Statistiques
| Révision :

root / Final-Parameters_sm_fsn_fss_fsv / geometry1.cpp @ 15

Historique | Voir | Annoter | Télécharger (4,1 ko)

1 9 akiss
2 9 akiss
/*************************************************************
3 9 akiss
 *                  GEOMETRY and MESH
4 9 akiss
 * **********************************************************/
5 9 akiss
6 9 akiss
// ----------------- external boundary
7 9 akiss
8 9 akiss
//border a1(t=0,1){x=lx/2+t*(-lx);y=0;label=1;}; //ok
9 9 akiss
real rnect=lx/2-vthickness;
10 9 akiss
real tB=2*pi-acos(rnect/R);
11 9 akiss
real tA=pi+acos(rnect/R);
12 9 akiss
real xC=0;
13 9 akiss
real yC=sqrt(R*R-rnect*rnect);
14 9 akiss
15 9 akiss
border a1(t=0,1){x=lx/2+t*(lx/2-vthickness-lx/2);y=0;label=11;}; //ok
16 9 akiss
border a2(t=tB,tA){x=xC+R*cos(t);y=yC+R*sin(t);label=12;}; //ok
17 9 akiss
//border a2(t=0,1){x=rnect+t*(-2*rnect);y=0;label=12;}; //ok
18 9 akiss
border a3(t=0,1){x=-lx/2+vthickness+t*(-lx/2-(-lx/2+vthickness));y=0;label=13;}; //ok
19 9 akiss
20 9 akiss
border b1(t=0,1){x=-lx/2;y=t*(-ly);label=2;}; //ok
21 9 akiss
22 9 akiss
border c1(t=0,1){x=-lx/2+t*(-cwidth/2-vthickness+lx/2);y=-ly;label=31;}; //ok
23 9 akiss
border c2(t=0,1){x=-cwidth/2-vthickness+t*vthickness;y=-ly;label=32;}; //ok
24 9 akiss
border cc(t=0,1){x=-cwidth/2+t*cwidth; y=-ly; label=35;}; // bouchon
25 9 akiss
border c3(t=0,1){x=cwidth/2+t*vthickness;y=-ly;label=33;};
26 9 akiss
border c4(t=0,1){x=cwidth/2+vthickness+t*(lx/2-cwidth/2-vthickness);y=-ly;label=34;};
27 9 akiss
28 9 akiss
border d1(t=0,1){x=lx/2;y=-ly+t*(ly);label=4;}; //ok
29 9 akiss
30 9 akiss
// -------------------- internal boundary
31 9 akiss
32 9 akiss
real xA=-rnect; real yA=0;
33 9 akiss
real xB=-cwidth/2; real yB=-ly;
34 9 akiss
real D=lineD(xA, xB, yA, yB);
35 9 akiss
real C=lineC(xA, xB, yA, yB);
36 9 akiss
real delta=D^2*(C-yC)^2-(1+D^2)*((C-yC)^2-(R+hnect)^2);
37 9 akiss
real xM=(-D*(C-yC)+sqrt(delta))/(D^2+1);
38 9 akiss
real yM=D*xM+C;
39 9 akiss
real tN=2*pi+asin(-sqrt((R+hnect)^2-xM^2)/(R+hnect));
40 9 akiss
real tM=3*pi-tN;
41 9 akiss
/*
42 9 akiss
cout<<"xM="<<xM<<" yM="<<yM<<endl;
43 9 akiss
cout<<"xxM="<<xC+(R+hnect)*cos(tM)<<" yyM="<<yC+(R+hnect)*sin(tM)<<endl;
44 9 akiss
cout<<"xxN="<<xC+(R+hnect)*cos(tN)<<" yyN="<<yC+(R+hnect)*sin(tN)<<endl;
45 9 akiss
*/
46 9 akiss
47 9 akiss
border vide1(t=0,1){x=-cwidth/2+t*(xM+cwidth/2);y=-ly+t*(yM+ly);label=51;};//ok
48 9 akiss
border vide2(t=tM,tN){x=xC+(R+hnect)*cos(t);y=yC+(R+hnect)*sin(t);label=52;};
49 9 akiss
//border vide2(t=0,1){x=xM+(-2*xM)*t;y=yM;label=52;};
50 9 akiss
border vide3(t=0,1){x=-xM+t*(cwidth/2+xM);y=yM+t*(-ly-yM);label=53;};//ok
51 9 akiss
52 9 akiss
// ------------------- define the mesh
53 9 akiss
54 9 akiss
//border circle(t=2*pi,0){x=xC+R*cos(t);y=yC+R*sin(t);label=12;};
55 9 akiss
//mesh Th = buildmesh(circle(-nvertex*lx));
56 9 akiss
57 9 akiss
/*
58 9 akiss
plot(a1(nvertex*vthickness)+a2(nvertex*2*rnect)+a3(nvertex*vthickness)
59 9 akiss
                     + b1(nvertex*ly)
60 9 akiss
                     + c1(nvertex*lx/2) + c2(nvertex*vthickness)
61 9 akiss
                     + vide1(nvertex*ly) + vide2(nvertex*(lx-2*vthickness)) + vide3(nvertex*ly)  //hole
62 9 akiss
                     //+ cc(nvertex*cwidth)
63 9 akiss
                     + c3(nvertex*vthickness) + c4(nvertex*lx/2)
64 9 akiss
                     + d1(nvertex*ly), wait=1
65 9 akiss
                     );
66 9 akiss
*/
67 9 akiss
68 9 akiss
mesh Th = buildmesh (a1(nvertex*vthickness)+a2(nvertex*2*rnect)+a3(nvertex*vthickness)
69 9 akiss
                     + b1(nvertex*ly)
70 9 akiss
                     + c1(nvertex*lx/2) + c2(nvertex*vthickness)
71 9 akiss
                     + vide1(nvertex*ly) + vide2(nvertex*(lx-2*vthickness)) + vide3(nvertex*ly)  //hole
72 9 akiss
                     //+ cc(nvertex*cwidth)
73 9 akiss
                     + c3(nvertex*vthickness) + c4(nvertex*lx/2)
74 9 akiss
                     + d1(nvertex*ly)
75 9 akiss
                     );
76 9 akiss
77 9 akiss
78 9 akiss
/*************************************************************
79 9 akiss
 *                  DEFINITION OF DOMAINS
80 9 akiss
 * **********************************************************/
81 9 akiss
82 9 akiss
//vposition=-xM;
83 9 akiss
84 9 akiss
real xA1=-(vposition+vthickness), yA1=-hnect;
85 9 akiss
real xB1=-cwidth/2-vthickness, yB1=-ly;
86 9 akiss
real xA2=(vposition+vthickness), yA2=-hnect;
87 9 akiss
real xB2=cwidth/2+vthickness, yB2=-ly;
88 9 akiss
real D1=lineD(xA1, xB1, yA1, yB1);
89 9 akiss
real C1=lineC(xA1, xB1, yA1, yB1);
90 9 akiss
real D2=lineD(xA2, xB2, yA2, yB2);
91 9 akiss
real C2=lineC(xA2, xB2, yA2, yB2);
92 9 akiss
93 9 akiss
func bool vasculatureBool(real xx, real yy)
94 9 akiss
{        return (((yy>D1*xx+C1) && (yy<D1*(xx-vthickness)+C1)) || ((yy>D2*xx+C2)&& (yy<D2*(xx+vthickness)+C2)) );
95 9 akiss
}
96 9 akiss
97 9 akiss
/*
98 9 akiss
func bool nectaryBool(real xx, real yy)
99 9 akiss
{        return (yy>-hnect)&&(yy>D1*(xx-vthickness)+C1)&&(yy>D2*(xx+vthickness)+C2);
100 9 akiss
}*/
101 9 akiss
102 9 akiss
func bool nectaryBool(real xx, real yy)
103 9 akiss
{        return (yy>D1*(xx-vthickness)+C1)&&(yy>D2*(xx+vthickness)+C2);
104 9 akiss
}
105 9 akiss
106 9 akiss
107 9 akiss
func bool sideBool(real xx, real yy)
108 9 akiss
{        return   (yy>-hside) && (((xx<-lx/2+lside)&&(yy<D1*xx+C1)) || ( (xx>lx/2-lside)&& (yy<D2*xx+C2))  );
109 9 akiss
}
110 9 akiss
111 9 akiss
func bool mesophylBool(real xx, real yy)
112 9 akiss
{        return (!vasculatureBool(xx,yy)) && (!nectaryBool(xx,yy)) && (!sideBool(xx,yy));
113 9 akiss
}
114 9 akiss