[Gmsh] bump and progression calculation in transfinite

Fabian f.braennstroem at gmx.de
Sat Oct 18 16:31:05 CEST 2008


Hi Christophe,

thanks for the long explanation and sorry for the late reply!
Thanks!

Fabian


Christophe Geuzaine wrote:
> Fabian wrote:
>   
>> Hi,
>>
>> I found the calculation for the transfinite progression and bump. 
>> Unfortunately, I do not get smart out of it. In the function r is the 
>> expansion, I assume that ge->length() is the length of the line, nbpt is 
>> the number of nodes. But what is 't' and 'd'?
>>     
>
> t is the curvilinear abscissa, and d is the norm of the derivative of 
> the parametrization.
>
> To understand the formula, consider the mesh size field $\delta(x,y,z)$ 
> as a function that defines, at every point of the domain, a target size 
> for the elements at that point.
>
> Then consider a point $\vec{p}(t)$ on a curve $C$, $t\in [t_1,t_2]$. The 
> number of subdivisions $N$ of the curve is its adimensional length:
> \begin{equation}
> \int_{t_1}^{t_2} \frac{1}{\delta(x,y,z)} \| \partial_t\vec{p}(t) \|dt = N.
> \end{equation}
>
> The $N+1$ mesh points on the curve are located at coordinates
> $\{T_0,\dots,T_N\}$, where $T_i$ is computed with the following rule:
> \begin{equation}
> \label{eq:1dmesh}
> \int_{t_1}^{T_i} \frac{1}{\delta(x,y,z)} \| \partial_t\vec{p}(t) \|dt = i.
> \end{equation}
> With this choice, each subdivision of the curve is exactly of 
> adimensional size $1$, and the 1-D mesh exactly satisfies the size field 
> $\delta$. In Gmsh, \eqref{eq:1dmesh} is evaluated with a recursive 
> numerical integration rule.
>
>
>   
>> Actually I would like to define the first grid height and the expansion, 
>> to get the suitable number of nodes...
>>     
>
> "Progression" is easy, it's just a geometric progression. "Bump" is an 
> ad hoc function we came up with a long time ago. We should probably add 
> something like "DoubleProgression" to have something easier to understand.
>
> You can check the progression code with this .geo file:
>
> // the mesh nodes should match the points below
>
> Point(1) = {0,0,0,1};
> Point(2) = {1,0,0,1};
> Point(3) = {3,0,0,1};
> Point(4) = {7,0,0,1};
> Point(5) = {15,0,0,1};
>
> n = 4; // number of intervals
> r = 2; // progression
>
> // progression using transfinite mesh
>
> Point(6) = {0,0.4,0,1};
> Point(7) = {15,0.4,0,1};
> Line(1) = {6,7};
> Transfinite Line {1} = n+1 Using Progression r;
>
> // progression using extruded mesh
>
> a = (r - 1) / (r^n - 1);
> one[0] = 1;
> layer[0] = a;
> For i In {1:n-1}
>    one[i] = 1;
>    layer[i] = layer[i-1] + a * r^i;
> EndFor
> Point(10) = {0,0.8,0,1};
> Extrude {15,0,0} {
>    Point{10}; Layers{one[], layer[]};
> }
>
> Hope this helps,
>
> Christophe
>
>
>
>   
>> Fabian
>>
>> _______________________________________________
>> gmsh mailing list
>> gmsh at geuz.org
>> http://www.geuz.org/mailman/listinfo/gmsh
>>
>>
>>     
>
>
>