Support for Xfem methods
(outdated, to be done again ...)
Xfem are finite element method with a particular enrichment with non-polynomials functions (see [4] for instance). The file getfem/getfem_Xfem.h gives a support for this kind of method. Any (τ-equivalent) valid finite element method can be extended. If pf is a valid descriptor of a finite element method, one can build a Xfem with the declaration
Xfem xf(pf);
then one adds a global function with
xf.add_function(pXf, pXg, pXh, ind);
where pXf should be a pointer on a type derived from the object virtual_Xfem_func representing the global function, pXg should be a pointer on a type derived from the object virtual_Xfem_grad representing the global function gradient, pXh is an optional parameter (only for fourth order derivative problems) which should be a pointer on a type derived from the object virtual_Xfem_hess representing the global function Hessian and ind is an index which should correspond to this function to identify the degrees of freedom (this should be different for each function added). It is possible to add an arbitrary number of global functions. The total number of degrees of freedom of the Xfem is the number of degrees of freedom of the initial fem times Nf+1 where Nf is the number of global functions added.
If φi for i=1..Nd are the basis functions of pf and fj for j=1..Nf the additional global functions, the basis functions of the Xfem are the basis function φi for i=1..Nd and the basis functions fjφi for i=1..Nd and j=1..Nf. From an element to another and for each function fj, the corresponding degrees of freedom are connected in a same manner as the corresponding degrees of freedom of pf.
Most of the time, one only needs an enrichment on a subset of node of the original element. If it is so, one should a posteriori eliminate the unwanted extra-dofs.
