1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45
| //Choix des paramètres du problème
real c = 1; // Côté du carré
real a=0.25; //Rayon du cercle
real f1 = 1 ; //Force globale appliquée selon axe x
//Paramètres du maillage
int nAB=50;
int nBC=50 ;
int nCD=50;
int nDA=50;
int ncercle=100;
border AB(t=0,c){y=0;x=t;label=1;}
border BC(t=0,c){x=c;y=t;label=2;}
border CD(t=0,c){y=c;x=c-t;label=3;}
border DA(t=0,c){x=0;y=c-t;label=4;}
border cercle(t=2*pi,0){x=c/2+a*cos(t);y=c/2+a*sin(t);}
//Construction du maillage
mesh Th=buildmesh(AB(nAB)+BC(nBC)+CD(nCD)+DA(nDA)+cercle(ncercle));//,fixeborder = true);
plot(Th);
func perio=[[1,x],[3,x],[4,y],[2,y]];
//Th=adaptmesh(Th, 0.25*2, IsMetric=1, nbvx=100000, periodic=perio);
//Th=adaptmesh(Th, 0.25*2, IsMetric=1, nbvx=100000, periodic=perio);
fespace Vh(Th,P1,periodic=perio),Qh(Th,P1,periodic=perio);
Vh v1,v2,vh1,vh2;
Qh p,ph;
macro d12(u1,u2) (dy(u1) + dx(u2))/2.0 //
real delta=0.01;
real epsln=1.0e-6;
solve stokes(v1,v2,p, vh1,vh2,ph) =
int2d(Th)( 2.0*(dx(v1)*dx(vh1)
+2.0*d12(v1,v2)*d12(vh1,vh2)+dy(v2)*dy(vh2))
-p*dx(vh1)-p*dy(vh2)-dx(v1)*ph-dy(v2)*ph
-delta*hTriangle*hTriangle* // stabilization
(dx(p)*dx(ph)+dy(p)*dy(ph))
-p*ph*epsln ) // penalization
- int2d(Th)( f1 * vh1 ); |
Partager