⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 cavitynewtow.edp

📁 FreeFem++可以生成高质量的有限元网格。可以用于流体力学
💻 EDP
字号:
mesh Th=square(8,8);fespace Xh(Th,P2);fespace Mh(Th,P1);fespace XXMh(Th,[P2,P2,P1]);XXMh [u1,u2,p];XXMh [v1,v2,q]; //Mh p,q;macro div(u1,u2) (dx(u1)+dy(u2))//macro grad(u1,u2) [dx(u1),dy(u2)]//macro ugrad(u1,u2,v) (u1*dx(v)+u2*dy(v)) //macro Ugrad(u1,u2,v1,v2) [ugrad(u1,u2,v1),ugrad(u1,u2,v2)]//solve Stokes ([u1,u2,p],[v1,v2,q],solver=UMFPACK) =    int2d(Th)( ( dx(u1)*dx(v1) + dy(u1)*dy(v1)            +  dx(u2)*dx(v2) + dy(u2)*dy(v2) )            + p*q*(0.000001)             - p*div(v1,v2)-q*div(u1,u2)           )  + on(3,u1=4*x*(1-x),u2=0)   + on(1,2,4,u1=0,u2=0); Xh uu1=u1,uu2=u2;  plot(coef=0.2,cmm=" [u1,u2] et p  ",p,[uu1,uu2],wait=1);Xh psi,phi;solve streamlines(psi,phi) =       int2d(Th)( dx(psi)*dx(phi) + dy(psi)*dy(phi))   +  int2d(Th)( -phi*(dy(u1)-dx(u2)))   +  on(1,2,3,4,psi=0);plot(psi,wait=1);int i=0;real  nu=1./100.;real dt=0.1;real alpha=1/dt;/* NL  varf   vNS ([u1,u2,p],[v1,v2,q],solver=Crout,init=i) =    int2d(Th)(             alpha*( u1*v1 + u2*v2)             + nu * ( dx(u1)*dx(v1) + dy(u1)*dy(v1)            +  dx(u2)*dx(v2) + dy(u2)*dy(v2) )            + p*q*(0.000001)             + p*dx(v1)+ p*dy(v2)            + dx(u1)*q+ dy(u2)*q            + Ugrad(u1,u2,u1,u2)'*[v1,v2]           )     + on(3,u1=1,u2=0)   + on(1,2,4,u1=0,u2=0) */XXMh [up1,up2,pp];varf   vDNS ([u1,u2,p],[v1,v2,q]) =    int2d(Th)(                        + nu * ( dx(u1)*dx(v1) + dy(u1)*dy(v1)            +  dx(u2)*dx(v2) + dy(u2)*dy(v2) )            + p*q*(0.000001)             + p*dx(v1)+ p*dy(v2)            + dx(u1)*q+ dy(u2)*q            + Ugrad(u1,u2,up1,up2)'*[v1,v2]            + Ugrad(up1,up2,u1,u2)'*[v1,v2]           )  + on(1,2,3,4,u1=0,u2=0) ;varf   vNS ([u1,u2,p],[v1,v2,q]) =    int2d(Th)(                      + nu * ( dx(up1)*dx(v1) + dy(up1)*dy(v1)            +  dx(up2)*dx(v2) + dy(up2)*dy(v2) )            + pp*q*(0.000001)             + pp*dx(v1)+ pp*dy(v2)            + dx(up1)*q+ dy(up2)*q            + Ugrad(up1,up2,up1,up2)'*[v1,v2]           )  + on(1,2,3,4,u1=0,u2=0) ;for(real re=100;re<25000;re *=2){ real lerr=0.04;if(re>8000) lerr=0.01;if(re>10000) lerr=0.005; for(int step=0;step<2;step++){     Th=adaptmesh(Th,[u1,u2],p,err=lerr,nbvx=100000);     //plot(Th,wait=0);     [u1,u2,p]=[u1,u2,p];     [up1,up2,pp]=[up1,up2,pp];	for (i=0;i<=20;i++) { nu =1./re;   up1[]=u1[];    real[int] b = vNS(0,XXMh);   matrix Ans=vDNS(XXMh,XXMh);   set(Ans,solver=UMFPACK);   real[int] w = Ans^-1*b;   u1[] -= w;   cout << " iter = "<< i << "  " << w.l2 <<  " rey = " << re << endl;    if(w.l2<1e-6) break;    // uu1=u1;uu2=u2;    //plot(coef=0.2,cmm=" [u1,u2] et p  ",p,[uu1,uu2]);       } ;} uu1=u1;uu2=u2; streamlines;  plot(coef=0.2,cmm="rey="+re+" [u1,u2] et p  ",psi,[uu1,uu2],wait=0,nbiso=20,ps="cavity-"+re+".ps");  }

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -