Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

3D elasticity complex with mixed elements #27

Open
jmv2009 opened this issue Aug 29, 2020 · 0 comments
Open

3D elasticity complex with mixed elements #27

jmv2009 opened this issue Aug 29, 2020 · 0 comments

Comments

@jmv2009
Copy link

jmv2009 commented Aug 29, 2020

3D elasticity complex with mixed elements with weak symmetry enforcement

(only "primal" method, based on only displacement dofs, is demonstrated in Freefem documentation)

Describe the solution you'd like
Would like to see Nedelec type II (linear face elements) for the elasticity complex in 3D.

Or better, actually all of these:
https://web.archive.org/web/20190325195633/http://femtable.org/femtable.pdf

Below is lowest order elasticity complex with mixed elements with weak symmetry, enforced by Lagrange multipliers. Literature ref:
https://www.doi.org/10.1007/0-387-38034-5_3

Below is 2D example:
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX


load "Element_Mixte";

int nn=5;
mesh Th= square(4*nn,nn,[4*x,y]);
fespace Vh(Th, [BDM1,BDM1,P0,P0,P0]);

real young=2;
real nu=0.3;

real mu=young/2/(1+nu);
real lambda=young*nu/(1+nu)/(1-2*nu);

real mu1= 0.5/mu;
real lambda1 = -mu1*lambda/(2*lambda+2*mu);
real rho = 1;
real gravity = -1*rho;
 
Vh [usxx,usyx,usxy,usyy,ux,uy,up],[vsxx,vsyx,vsxy,vsyy,vx,vy,vp];
solve fld([usxx,usyx,usxy,usyy,ux,uy,up],[vsxx,vsyx,vsxy,vsyy,vx,vy,vp])
  = int2d(Th)((mu1+lambda1)*usxx*vsxx+mu1*usxy*vsxy+mu1*usyx*vsyx+(mu1+lambda1)*usyy*vsyy+lambda1*usxx*vsyy+lambda1*usyy*vsxx+ux*(dx(vsxx)+dy(vsyx))+uy*(dx(vsxy)+dy(vsyy))+(dx(usxx)+dy(usyx))*vx+(dx(usxy)+dy(usyy))*vy+(usxy-usyx)*vp+up*(vsxy-vsyx)  
  )
  +  int2d(Th) ( -gravity*vy)
  +on(1,2,3,usxx=0,usyx=0,usxy=0,usyy=0)
 //+on(4,ux=0,uy=0)
  ;
 plot(ux, wait=1);
 mesh th = movemesh(Th, [x+0.001*ux, y+0.001*uy]);
plot(th, wait=true);
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

1 participant