Transformations and FEM space

Hi all,

I would like to create an interpolation matrix between two finite element spaces associated to the same mesh, but the geometry is transformed (rotated and translated).
Actually, the connectivity at the FE space level is not the same although the geometry and the mesh (including its connectivity) are the same.


Dear amina,

I sorry, I don’t understand your problem,

  1. you can build the interpolate matrix form the 2 finite element space associer to the two meshes, but I think you do not want that

  2. you want to transport also the data, so in this case the interpolation matrix is the Identity.

Frederic Hecht

Dear Pr. Hecht,

Thank you very much for your willingness to help.

Actually, I want to transport the data as you say. The issue is that the nodes are not numbered the same way in the two meshes (before and after rotation+translation), which leads to non identical stiffness matrices and all other data.

Specifically, I need the permutation (transfer matrix i.e. matrice de passage) that transforms the data from a FEM space to another, and the identity doesn’t work since the numbering is different.


Please give a script example ,
because if you do a movemesh to you get the same numbering,
but of coarse if do the transformation of the boundary and you rebuild the mesh
then I can say nothing.

Now the other problem is you solve elasticity problem, then the rotation must be taken in account.

Actually, I had applied a truncation of the mesh (which was the combination of 2 submeshes as you can see below) to get my submesh before rotation, which may have affected boundary conditions. Thanks for confirming that the connectivity should be the same. My problem is therefore solved.

mesh Th = ThHole+ ThBend;

int nPos = Th(L/5., 0.).region;
int nNeg = Th(-D/12., 0.).region;
func abscisse = x;

int[int] l1=[nNeg,200];
mesh Th10=trunc(Th,(abscisse<=0));
Th10 = change(Th10,region=l1);
// medit(“th2”, Th1);
mesh Th20=trunc(Th,(abscisse>=0));
int[int] l2=[nPos,300];
Th20 = change(Th20,region=l2);

Th = Th10 + Th20;