Hi,
I want to solve a coupled problem of vibro-acoustic. The variationnal formulation gives me 5 matrices, (K,M) for elasticity, (H,Q) for acoustic and C the coupled matrix. Then we obtain two global matrices :
Kglob = [K -C]
[0 H]
Mglob = [M 0]
[C’ Q]
And we solve :
Kglob -omega^2*Mglob = RHS
To solve that I tried to proceed as follows:
%----------------------------------------------------------------------------------
//Th is load from gmsh 3d
fespace VhS(Th, [P1,P1,P1]); // elasticity
VhS [u1,u2,u3], [v1,v2,v3];
fespace VhF(Th, P1); // acoustic
VhF p,v;
//Solid
varf k([u1,u2,u3], [v1,v2,v3]) = int3d(Th, 5)( … ); //5 refers to elastic medium
varf m(…) = …
varf h(p, v) = int3d(Th, 4)( … );
varf q(…) = …
matrix K = k(VhS, VhS);
matrix M = …
matrix H = h(VhF, VhF)
matrix Q = …
%----------------------------------------------------------------------------------
Then I export the matrices but the shape of each matrix is (n x ndof,n x ndof) (n = 3 for elasticity and n = 1 for acoustic). The problem is that ui = 0 in air medium, the same for pressure in elastic medium…which creates a singular LHS after assembly.
My question : Is there a way to build the matrices on their respective medium and only get interesting nodes values, not all the nodes of the mesh ? This way to proceed implies to extract the nodes of each medium by the way…
Maybe there’s an easier way to proceed ?
I hope this is clear enought…
Thank you,
Julien