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