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 |