1 | subroutine my_25(imax,kmax,dt,gp,zi,z,u,v,teta,cd,q2,long,km,kh) |
---|
2 | |
---|
3 | *********************************************************************** |
---|
4 | ******* FERMETURE MELLOR-YAMADA DE NIVEAU 2.5 (QUASI-EQUILIBRE) ******* |
---|
5 | ** q2 au interfaces entre mailles. |
---|
6 | *********************************************************************** |
---|
7 | |
---|
8 | |
---|
9 | ************** DECLARATIONS ******************************************* |
---|
10 | |
---|
11 | |
---|
12 | integer imax,kmax |
---|
13 | |
---|
14 | parameter (impmax=5) |
---|
15 | |
---|
16 | real kappa,khmin,kmmin,kqmin,longc |
---|
17 | |
---|
18 | parameter (kappa=0.4) |
---|
19 | parameter (a1=0.92, a2=0.74, b1=16.6, b2=10.1, c1=0.08, |
---|
20 | a e1=1.8, e2=1.33) |
---|
21 | parameter (khmin=1.0e-5, kmmin=1.0e-5, kqmin=1.0e-5, |
---|
22 | a q2min=0.001, q2lmin=0.001) |
---|
23 | parameter (ghmax=0.023, ghmin=-0.28) |
---|
24 | |
---|
25 | real cd(imax),teta(imax,kmax),u(imax,kmax),v(imax,kmax), |
---|
26 | a z(imax,kmax),zi(imax,kmax+1) |
---|
27 | real kh(imax,kmax+1),km(imax,kmax+1),q2(imax,kmax+1), |
---|
28 | a long(imax,kmax+1) |
---|
29 | real unsdz(imax,kmax),unsdzi(imax,kmax+1) |
---|
30 | real kq(imax,kmax), |
---|
31 | a m2(imax,kmax+1),n2(imax,kmax+1),ri(imax,kmax+1) |
---|
32 | real a(imax,kmax),b(imax,kmax),c(imax,kmax),f(imax,kmax), |
---|
33 | a alph(imax,kmax) |
---|
34 | real ksdz2inf,ksdz2sup |
---|
35 | |
---|
36 | c save q2,q2l |
---|
37 | |
---|
38 | save imp |
---|
39 | |
---|
40 | data imp/0/ |
---|
41 | |
---|
42 | *********************************************************************** |
---|
43 | |
---|
44 | imp=imp+1 |
---|
45 | |
---|
46 | ************** INCREMENTS VERTICAUX *********************************** |
---|
47 | |
---|
48 | do 9 i=1,imax |
---|
49 | zi(i,kmax+1)=zi(i,kmax)+2.0*(z(i,kmax)-zi(i,kmax)) |
---|
50 | 9 continue |
---|
51 | do 10 k=1,kmax |
---|
52 | do 10 i=1,imax |
---|
53 | unsdz(i,k)=1.0/(zi(i,k+1)-zi(i,k)) |
---|
54 | 10 continue |
---|
55 | do 11 k=2,kmax |
---|
56 | do 11 i=1,imax |
---|
57 | unsdzi(i,k)=1.0/(z(i,k)-z(i,k-1)) |
---|
58 | 11 continue |
---|
59 | do 12 i=1,imax |
---|
60 | unsdzi(i,1)=0.5/(z(i,1)-zi(i,1)) |
---|
61 | unsdzi(i,kmax+1)=0.5/(zi(i,kmax+1)-z(i,kmax)) |
---|
62 | 12 continue |
---|
63 | |
---|
64 | *********************************************************************** |
---|
65 | |
---|
66 | |
---|
67 | ************** DIFFUSIVITES KH, KM et KQ ****************************** |
---|
68 | * Ci-dessous, une premiere estimation des diffusivites turbulentes km * |
---|
69 | * et kh est effectuee pour utilisation dans les taux de production * |
---|
70 | * et de destruction de q2 et q2l. On calcule aussi kq. * |
---|
71 | |
---|
72 | do 100 k=2,kmax |
---|
73 | do 100 i=1,imax |
---|
74 | beta=2.0/(teta(i,k)+teta(i,k-1)) |
---|
75 | n2(i,k)=beta*gp*unsdzi(i,k)*(teta(i,k)-teta(i,k-1)) |
---|
76 | n2(i,k)=amax1(0.0,n2(i,k)) |
---|
77 | du=unsdzi(i,k)*(u(i,k)-u(i,k-1)) |
---|
78 | dv=unsdzi(i,k)*(v(i,k)-v(i,k-1)) |
---|
79 | m2(i,k)=du*du+dv*dv |
---|
80 | ri(i,k)=n2(i,k)/(m2(i,k)+1.0e-10) |
---|
81 | ri(i,k)=amax1(-0.1,min(4.0,ri(i,k))) |
---|
82 | 100 continue |
---|
83 | |
---|
84 | do 110 k=2,kmax |
---|
85 | do 110 i=1,imax |
---|
86 | vt=kappa*(zi(i,k)-zi(i,1)) |
---|
87 | long(i,k)=vt/(1.0+vt/160.0) |
---|
88 | if(n2(i,k).gt.0.0) then |
---|
89 | long(i,k)=min(0.53*sqrt(q2(i,k))/sqrt(n2(i,k)),long(i,k)) |
---|
90 | endif |
---|
91 | gh=amax1(ghmin, |
---|
92 | a min(ghmax,-long(i,k)*long(i,k)*n2(i,k)/q2(i,k))) |
---|
93 | sm=a1*(1.0-3.0*c1-6.0*a1/b1-3.0*a2*gh* |
---|
94 | a ((b2-3.0*a2)*(1.0-6.0*a1/b1)-3.0*c1*(b2+6.0*a1)))/ |
---|
95 | a ((1.0-3.0*a2*gh*(6.0*a1+b2))*(1.0-9.0*a1*a2*gh)) |
---|
96 | km(i,k)=amax1(kmmin,long(i,k)*sqrt(q2(i,k))*sm) |
---|
97 | sh=a2*(1.0-6.0*a1/b1)/(1.0-3.0*a2*gh*(6.0*a1+b2)) |
---|
98 | kh(i,k)=amax1(khmin,long(i,k)*sqrt(q2(i,k))*sh) |
---|
99 | 110 continue |
---|
100 | do 111 i=1,imax |
---|
101 | us=sqrt(cd(i)*(u(i,1)*u(i,1)+v(i,1)*v(i,1))) |
---|
102 | vt1=(b1**0.666667)*us*us |
---|
103 | vt2=(b1**0.6666667)*kappa*kappa* |
---|
104 | a m2(i,2)*(zi(i,2)-zi(i,1))*(zi(i,2)-zi(i,1)) |
---|
105 | c q2(i,1)=amax1(q2min,vt1,vt2) |
---|
106 | q2(i,1)=amax1(q2min,vt1) |
---|
107 | long(i,1)=0.0 |
---|
108 | long(i,kmax+1)=long(i,kmax) |
---|
109 | sq=0.2 |
---|
110 | kq(i,1)=amax1(kqmin,kappa*(z(i,1)-zi(i,1))*us*sq) |
---|
111 | 111 continue |
---|
112 | |
---|
113 | do 120 k=2,kmax |
---|
114 | do 120 i=1,imax |
---|
115 | longc=0.5*(long(i,k)+long(i,k+1)) |
---|
116 | q2c=0.5*(q2(i,k)+q2(i,k+1)) |
---|
117 | sq=0.2 |
---|
118 | kq(i,k)=amax1(kqmin,longc*sqrt(q2c)*sq) |
---|
119 | 120 continue |
---|
120 | |
---|
121 | *********************************************************************** |
---|
122 | |
---|
123 | |
---|
124 | ************** CALCUL DE Q2 ******************************************* |
---|
125 | |
---|
126 | do 200 k=2,kmax |
---|
127 | do 200 i=1,imax |
---|
128 | prod=2.0*(km(i,k)*m2(i,k)+amax1(0.0,-kh(i,k)*n2(i,k))) |
---|
129 | dest=2.0*(amax1(0.0,kh(i,k)*n2(i,k)) |
---|
130 | a +q2(i,k)*sqrt(q2(i,k))/(b1*long(i,k))) |
---|
131 | if(k.lt.kmax) then |
---|
132 | ksdz2sup=unsdzi(i,k)*unsdz(i,k)*kq(i,k) |
---|
133 | else |
---|
134 | ksdz2sup=0.0 |
---|
135 | endif |
---|
136 | ksdz2inf=unsdzi(i,k)*unsdz(i,k-1)*kq(i,k-1) |
---|
137 | b(i,k)=-ksdz2inf*dt |
---|
138 | a(i,k)=1.0+dt*(dest/q2(i,k)+ksdz2inf+ksdz2sup) |
---|
139 | c(i,k)=-ksdz2sup*dt |
---|
140 | f(i,k)=q2(i,k)+dt*prod |
---|
141 | 200 continue |
---|
142 | do 201 i=1,imax |
---|
143 | f(i,2)=f(i,2) |
---|
144 | a +dt*unsdzi(i,2)*unsdz(i,1)*kq(i,1)*q2(i,1) |
---|
145 | 201 continue |
---|
146 | |
---|
147 | do 210 i=1,imax |
---|
148 | alph(i,2)=a(i,2) |
---|
149 | 210 continue |
---|
150 | do 211 k=3,kmax |
---|
151 | do 211 i=1,imax |
---|
152 | bet=b(i,k)/alph(i,k-1) |
---|
153 | alph(i,k)=a(i,k)-bet*c(i,k-1) |
---|
154 | f(i,k)=f(i,k)-bet*f(i,k-1) |
---|
155 | 211 continue |
---|
156 | |
---|
157 | do 220 i=1,imax |
---|
158 | q2(i,kmax)=amax1(q2min,f(i,kmax)/alph(i,kmax)) |
---|
159 | q2(i,kmax+1)=q2(i,kmax) |
---|
160 | 220 continue |
---|
161 | do 221 k=kmax-1,2,-1 |
---|
162 | do 221 i=1,imax |
---|
163 | q2(i,k)=amax1(q2min,(f(i,k)-c(i,k)*q2(i,k+1))/alph(i,k)) |
---|
164 | 221 continue |
---|
165 | do 222 i=1,imax |
---|
166 | q2(i,2)=amax1(q2(i,2),q2(i,1)) |
---|
167 | 222 continue |
---|
168 | |
---|
169 | *********************************************************************** |
---|
170 | |
---|
171 | |
---|
172 | ************** EVALUATION FINALE DE KH ET KM ************************** |
---|
173 | |
---|
174 | do 400 k=2,kmax |
---|
175 | do 400 i=1,imax |
---|
176 | if(n2(i,k).gt.0.0) then |
---|
177 | long(i,k)=min(0.53*sqrt(q2(i,k))/sqrt(n2(i,k)),long(i,k)) |
---|
178 | endif |
---|
179 | gh=amax1(ghmin, |
---|
180 | a min(ghmax,-long(i,k)*long(i,k)*n2(i,k)/q2(i,k))) |
---|
181 | sm=a1*(1.0-3.0*c1-6.0*a1/b1-3.0*a2*gh* |
---|
182 | a ((b2-3.0*a2)*(1.0-6.0*a1/b1)-3.0*c1*(b2+6.0*a1)))/ |
---|
183 | a ((1.0-3.0*a2*gh*(6.0*a1+b2))*(1.0-9.0*a1*a2*gh)) |
---|
184 | km(i,k)=amax1(kmmin,long(i,k)*sqrt(q2(i,k))*sm) |
---|
185 | sh=a2*(1.0-6.0*a1/b1)/(1.0-3.0*a2*gh*(6.0*a1+b2)) |
---|
186 | kh(i,k)=amax1(khmin,long(i,k)*sqrt(q2(i,k))*sh) |
---|
187 | 400 continue |
---|
188 | do 401 i=1,imax |
---|
189 | km(i,1)=kmmin |
---|
190 | km(i,kmax+1)=km(i,kmax) |
---|
191 | kh(i,1)=khmin |
---|
192 | kh(i,kmax+1)=kh(i,kmax) |
---|
193 | 401 continue |
---|
194 | |
---|
195 | *********************************************************************** |
---|
196 | |
---|
197 | c if(imp.eq.impmax) then |
---|
198 | am=1.0/float(imax) |
---|
199 | imp=0 |
---|
200 | do 1000 k=kmax,1,-1 |
---|
201 | au=0.0 |
---|
202 | ateta=0.0 |
---|
203 | az=0.0 |
---|
204 | adz=0.0 |
---|
205 | akq=0.0 |
---|
206 | acd=0.0 |
---|
207 | do 1001 i=1,imax |
---|
208 | au=au+am*sqrt(u(i,k)*u(i,k)+v(i,k)*v(i,k)) |
---|
209 | ateta=ateta+am*teta(i,k) |
---|
210 | az=az+am*z(i,k) |
---|
211 | adz=adz+am*(1.0/unsdz(i,k)) |
---|
212 | akq=akq+am*kq(i,k) |
---|
213 | acd=acd+am*cd(i) |
---|
214 | 1001 continue |
---|
215 | c write(*,2000) k,az,adz,au,ateta,akq,acd*1000.0 |
---|
216 | 2000 format(2x,i3,2x,6(f9.2,2x)) |
---|
217 | 1000 continue |
---|
218 | |
---|
219 | write(*,*) |
---|
220 | write(*,*) |
---|
221 | |
---|
222 | do 1002 k=kmax+1,1,-1 |
---|
223 | azi=0.0 |
---|
224 | adzi=0.0 |
---|
225 | aq2=0.0 |
---|
226 | al=0.0 |
---|
227 | akm=0.0 |
---|
228 | akh=0.0 |
---|
229 | am2=0.0 |
---|
230 | al0=0.0 |
---|
231 | do 1003 i=1,imax |
---|
232 | azi=azi+am*zi(i,k) |
---|
233 | adzi=adzi+am*(1.0/unsdzi(i,k)) |
---|
234 | aq2=aq2+am*q2(i,k) |
---|
235 | al=al+am*long(i,k) |
---|
236 | akm=akm+am*km(i,k) |
---|
237 | akh=akh+am*kh(i,k) |
---|
238 | am2=am2+am*m2(i,k) |
---|
239 | c al0=al0+am*long0d(i) |
---|
240 | 1003 continue |
---|
241 | c write(*,2001) k,azi,aq2,al,akm,akh,am2*1.0e5 |
---|
242 | 2001 format(2x,i3,6(2x,f9.3)) |
---|
243 | 1002 continue |
---|
244 | c endif |
---|
245 | |
---|
246 | return |
---|
247 | end |
---|