Hello Freefem user,
I’m studying the following system :
Mat NN = [[ A , pBEx,pBEy,pBEz,pBMx,pBMy,pBMz ],
[ pBEx’,-1/kt,0,0,0,0,0 ],
[ pBEy’,0,-1/kt,0,0,0,0 ],
[ pBEz’,0,0,-1/ka,0,0,0 ],
[ pBMx’,0,0,0,-1/kf,0,0 ],
[ pBMy’,0,0,0,0,-1/kf,0 ],
[ pBMz’,0,0,0,0,0,-1/kth ]];
Here, A is a large matrix coming from 3D elasticity varf, and the pBxxx are linear forms used to enforce boundary conditions via six Lagrange multipliers. More precisely, the goal is to create a mean spring effect between two surfaces of the solid, where the kxx are the stiffnesses of these springs.
I managed to solve this problem on a small mesh using PETSc + LU and obtained correct results.
I now want to increase the mesh size and use Hypre preconditioning. Even on small meshes, the system does not converge with six springs, but it works with just one.
Correct me if I’m wrong, but a good way to handle this problem could be to use splitfield:
-
Solve
Ausing Hypre. -
Solve the rest using LU.
I’m struggling with implementing this using set(NN, sparams=" ") and specifying the block sizes.
I also haven’t found a way to rewrite the problem in a more compact form like NN = [A B; B' S], which would be more convenient if I want to handle more springs in the future.
Do you have any suggestions on how to do this?
Thanks,