Download as pdf or txt
Download as pdf or txt
You are on page 1of 3

1 ;;MORPHING

2
3 ;atención a los límites en "Y". Rutinas pueden tener que modificarse en función de
los límites en "Y".
4 ; Por defecto, los límites en "Y" son "y_max" and "y_min"
5
6 ; MORPH1
7
8 fish define morf1
9
10 global p1=p1
11 global p2=p2
12 global p3=p3
13 global p4=p4
14 global n_1=n_1
15 global n_2=n_2
16 global razon=razon
17 global xc_e=xc_e
18 global zc_e=zc_e
19 global xc_i=xc_i
20 global zc_i=zc_i
21 global r_e=r_e
22 global r_i=r_i
23
24 xx1=xc(p1)
25 zz1=zc(p1)
26 xx2=xc(p2)
27 zz2=zc(p2)
28 xx3=xc(p3)
29 zz3=zc(p3)
30 xx4=xc(p4)
31 zz4=zc(p4)
32
33 loop i(1,n_1+1)
34 counter = float(i-1)/float(n_1)
35 xa=xx1+(xx4-xx1)*counter
36 za=zz1+(zz4-zz1)*counter
37 xb=xx2+(xx3-xx2)*counter
38 zb=zz2+(zz3-zz2)*counter
39 gamma_e=math.atan2(zb-zc_e,xb-xc_e)
40 gamma_i=math.atan2(za-zc_i,xa-xc_i)
41 xna=r_i*math.cos(gamma_i)+xc_i
42 zna=r_i*math.sin(gamma_i)+zc_i
43 xnb=r_e*math.cos(gamma_e)+xc_e
44 znb=r_e*math.sin(gamma_e)+zc_e
45 loop j(1,n_2+1)
46 if razon=1 then
47 x_o=xa+(xb-xa)*float(j-1)/float(n_2)
48 z_o=za+(zb-za)*float(j-1)/float(n_2)
49 xn=xna+(xnb-xna)*float(j-1)/float(n_2)
50 zn=zna+(znb-zna)*float(j-1)/float(n_2)
51 else
52 x_o=xa+(xb-xa)*(razon^float(j-1)-1)/(razon^float(n_2)-1)
53 z_o=za+(zb-za)*(razon^float(j-1)-1)/(razon^float(n_2)-1)
54 xn=xna+(xnb-xna)*(razon^float(j-1)-1)/(razon^float(n_2)-1)
55 zn=zna+(znb-zna)*(razon^float(j-1)-1)/(razon^float(n_2)-1)
56 end_if
57 command
58 zone gridpoint initialize position-x @xn range cylinder end-1 @x_o @y_min @z_o
end-2 @x_o @y_max @z_o radius 1e-6
59 ;zone gridpoint initialize position-z @zn range cylinder end-1 @x_o @y_min @z_o
end-2 @x_o @y_max @z_o radius 5e-3
60 zone gridpoint initialize position-z @zn range cylinder end-1 @xn @y_min @z_o
end-2 @xn @y_max @z_o radius 1e-6
61 end_command
62 end_loop
63 end_loop
64 end
65
66 ;MORPH2
67
68 fish define morf2
69
70 global p1=p1
71 global p2=p2
72 global p3=p3
73 global p4=p4
74 global n_1=n_1
75 global n_2=n_2
76 global razon=razon
77 global xc_e=xc_e
78 global zc_e=zc_e
79 global xc_i=xc_i
80 global zc_i=zc_i
81 global r_e=r_e
82 global r_i=r_i
83
84 xx1=xc(p1)
85 zz1=zc(p1)
86 xx2=xc(p2)
87 zz2=zc(p2)
88 xx3=xc(p3)
89 zz3=zc(p3)
90 xx4=xc(p4)
91 zz4=zc(p4)
92
93 loop i(1,n_1+1)
94 counter = float(i-1)/float(n_1)
95 xa=xx1+(xx4-xx1)*counter
96 za=zz1+(zz4-zz1)*counter
97 xb=xx2+(xx3-xx2)*counter
98 zb=zz2+(zz3-zz2)*counter
99 gamma_e=math.atan2(zb-zc_e,xb-xc_e)
100 gamma_i=math.atan2(za-zc_i,xa-xc_i)
101 xna=r_i*math.cos(gamma_i)+xc_i
102 zna=r_i*math.sin(gamma_i)+zc_i
103 loop j(1,n_2+1)
104 if razon=1 then
105 x_o=xa+(xb-xa)*float(j-1)/float(n_2)
106 z_o=za+(zb-za)*float(j-1)/float(n_2)
107 xn=xna+(xb-xna)*float(j-1)/float(n_2)
108 zn=zna+(zb-zna)*float(j-1)/float(n_2)
109 else
110 x_o=xa+(xb-xa)*(razon^float(j-1)-1)/(razon^float(n_2)-1)
111 z_o=za+(zb-za)*(razon^float(j-1)-1)/(razon^float(n_2)-1)
112 xn=xna+(xb-xna)*(razon^float(j-1)-1)/(razon^float(n_2)-1)
113 zn=zna+(zb-zna)*(razon^float(j-1)-1)/(razon^float(n_2)-1)
114 end_if
115 command
116 zone gridpoint initialize position-x @xn range cylinder end-1 @x_o @y_min @z_o
end-2 @x_o @y_max @z_o radius 1e-6
117 ;zone gridpoint initialize position-z @zn range cylinder end-1 @x_o @y_min @z_o
end-2 @x_o @y_max @z_o radius 5e-3
118 zone gridpoint initialize position-z @zn range cylinder end-1 @xn @y_min @z_o
end-2 @xn @y_max @z_o radius 1e-6
119 end_command
120 end_loop
121 end_loop
122 end
123
124 ;MORPH3
125
126 fish define morf3
127
128 global p1=p1
129 global p2=p2
130 global p3=p3
131 global p4=p4
132 global n_1=n_1
133 global n_2=n_2
134 global razon=razon
135 global xc_e=xc_e
136 global zc_e=zc_e
137 global xc_i=xc_i
138 global zc_i=zc_i
139 global r_e=r_e
140 global r_i=r_i
141
142 xx1=xc(p1)
143 zz1=zc(p1)
144 xx2=xc(p2)
145 zz2=zc(p2)
146 xx3=xc(p3)
147 zz3=zc(p3)
148 xx4=xc(p4)
149 zz4=zc(p4)
150
151 loop i(1,n_1+1)
152 counter = float(i-1)/float(n_1)
153 xa=xx1+(xx4-xx1)*counter
154 za=zz1+(zz4-zz1)*counter
155 xb=xx2+(xx3-xx2)*counter
156 zb=zz2+(zz3-zz2)*counter
157 gamma_e=math.atan2(zb-zc_e,xb-xc_e)
158 gamma_i=math.atan2(za-zc_i,xa-xc_i)
159 xnb=r_e*math.cos(gamma_e)+xc_e
160 znb=r_e*math.sin(gamma_e)+zc_e
161 loop j(1,n_2+1)
162 if razon=1 then
163 x_o=xa+(xb-xa)*float(j-1)/float(n_2)
164 z_o=za+(zb-za)*float(j-1)/float(n_2)
165 xn=xa+(xnb-xa)*float(j-1)/float(n_2)
166 zn=za+(znb-za)*float(j-1)/float(n_2)
167 else
168 x_o=xa+(xb-xa)*(razon^float(j-1)-1)/(razon^float(n_2)-1)
169 z_o=za+(zb-za)*(razon^float(j-1)-1)/(razon^float(n_2)-1)
170 ;xn=xna+(xb-xna)*(razon^float(j-1)-1)/(razon^float(n_2)-1)
171 xn=xa+(xnb-xa)*(razon^float(j-1)-1)/(razon^float(n_2)-1)
172 ;zn=zna+(zb-zna)*(razon^float(j-1)-1)/(razon^float(n_2)-1)
173 zn=za+(znb-za)*(razon^float(j-1)-1)/(razon^float(n_2)-1)
174 end_if
175 command
176 zone gridpoint initialize position-x @xn range cylinder end-1 @x_o @y_min @z_o
end-2 @x_o @y_max @z_o radius 1e-6
177 ;zone gridpoint initialize position-z @zn range cylinder end-1 @x_o @y_min @z_o
end-2 @x_o @y_max @z_o radius 5e-3
178 zone gridpoint initialize position-z @zn range cylinder end-1 @xn @y_min @z_o
end-2 @xn @y_max @z_o radius 1e-6
179 end_command
180 end_loop
181 end_loop
182 end

You might also like