[Gmsh] bump and progression calculation in transfinite

Christophe Geuzaine cgeuzaine at ulg.ac.be
Thu Aug 28 19:46:33 CEST 2008


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
> 
> 


-- 
Prof. Christophe Geuzaine
University of Liege, Electrical Engineering and Computer Science
http://www.montefiore.ulg.ac.be/~geuzaine