[✓] Get an accurate smooth boundary of the mesh generated by ToElementMesh?

Posted 1 year ago
1319 Views
|
2 Replies
|
3 Total Likes
|
 I try to generate a mesh over a region, which has a wavy boundary at its bottom and needs very fine mesh around the bottom.However, the generated mesh boundary is not as smooth as the specified region. The region isThe generated mesh is If we zone-in we will find the bottom boundary is not the one as specified, seeThe bottom looks very bad. I further try to generate the boundary first. Here is what I found. The boundary is not generated correctly. Anyone know how to generate the correct meshed boundary?The minimum work code is as follows. Needs["NDSolveFEM"]; width = 1; heigth = 0.25; radius = 10; ydatum = 0.006; Aw = 5 10^-3; \[Lambda]w = 0.1; \[ScriptCapitalR] = ImplicitRegion[ Abs[x] <= width/2 && y <= heigth + ydatum && y >= x^2/(2 radius) + Aw (1 - Cos[(2 \[Pi] x)/\[Lambda]w]) + ydatum, {x, y}]; RegionPlot[\[ScriptCapitalR], FrameTicks -> None, AspectRatio -> Automatic, ImageSize -> Large, PlotRange -> {{-0.35, 0.35}, {0.005, 0.256}}] bmesh = ToBoundaryMesh[\[ScriptCapitalR], "BoundaryMeshGenerator" -> "Continuation", AccuracyGoal -> 2] bmesh["Wireframe"] meshrefine = Function[{vertices, area}, Block[{x, y}, {x, y} = Mean[vertices]; If[ydatum < y < ydatum + 0.025, area > 3.0*10^-7, area > 0.0002]]]; mesh1 = ToElementMesh[\[ScriptCapitalR], "MeshOrder" -> 1, MaxCellMeasure -> {"Length" -> 0.01}, MeshRefinementFunction -> meshrefine] mesh1["Wireframe"] Show[mesh1["Wireframe"], PlotRange -> {{-0.05, 0.05}, {0.005, 0.04}}, ImageSize -> 800] 
2 Replies
Sort By:
Posted 1 year ago
 Extend the bounding box to include a little outside the region: \[ScriptCapitalR] = ImplicitRegion[ Abs[x] <= width/2 && y <= heigth + ydatum && y >= x^2/(2 radius) + Aw (1 - Cos[(2 \[Pi] x)/\[Lambda]w]) + ydatum, {{x, -0.36, 0.36}, {y, -0.02, 0.3}}]; (* <--- N.B. *) mesh1 = ToElementMesh[\[ScriptCapitalR], "MeshOrder" -> 1, MaxCellMeasure -> {"Length" -> 0.01}, MeshRefinementFunction -> meshrefine] mesh1["Wireframe"]