A pure convection method¶
A method to compute a pure convection is defined in the file
getfem/getfem_convect.h. The call of the function is:
getfem::convect(mf, U, mf_v, V, dt, nt, option = CONVECT_EXTRAPOLATION);
mf is a variable of type
U is a vector which represent the
field to be convected,
mf_v is a
getfem::mesh_fem for the velocity field,
V is the
dof vector for the velocity field,
dt is the pseudo time of convection and
nt the number of iterations for the computation of characteristics.
option is an option for the boundary condition where there is a re-entrant convection. The possibilities are getfem::CONVECT_EXTRAPOLATION (extrapolation of the field on the nearest element) or getfem::CONVECT_UNCHANGED (no change of the value on the boundary).
The method integrate the partial differential equation
on the time intervall \([0, dt]\).
The method used is of Galerkin-Characteristic kind. It is a very simple version which is inconditionnally stable but rather dissipative. See [ZT1989] and also the Freefem++ documentation on convect command.
The defined method works only if
mf is a pure Lagrange finite element method
for the moment. The principle is to convect backward the finite element nodes by solving the ordinary differential equation:
with an initial condition corresponding to each node. This convection is made with
nt steps. Then the solution is interploated on
the convected nodes.
In order to make the extrapolation not too expensive, the product \(dt\times V\) should not be too large.
Note that this method can be used to solve convection dominant problems coupling it with a splitting scheme.