File indexing completed on 2018-03-02 18:40:10 UTC
view on githubraw file Latest commit add29e06 on 2018-01-31 20:35:05 UTC
ee830839ce Andr*0001 #include "FIZHI_OPTIONS.h"
0002 subroutine gwdrag (myid,pz,pl,ple,dpres,pkz,uz,vz,tz,qz,phis_var,
5c6d0925b4 Andr*0003 . dudt,dvdt,dtdt,im,jm,Lm,bi,bj,istrip,npcs,imglobal)
ee830839ce Andr*0004
0005
0006
0007
0008
0009
0010
0011
0012
0013
5c6d0925b4 Andr*0014
0015
0016
0017
0018
0019
0020
0021
ee830839ce Andr*0022
0023
0024
5c6d0925b4 Andr*0025
ee830839ce Andr*0026
0027
0028
0029
0030
0031
0032
0033
0034
0035
0036
0037 implicit none
0038
0039
0040
5c6d0925b4 Andr*0041 integer myid,im,jm,Lm,bi,bj,istrip,npcs,imglobal
8b150b4af9 Andr*0042 _RL pz(im,jm)
5c6d0925b4 Andr*0043 _RL pl(im,jm,Lm)
0044 _RL ple(im,jm,Lm+1)
0045 _RL dpres(im,jm,Lm)
0046 _RL pkz(im,jm,Lm)
0047 _RL uz(im,jm,Lm)
0048 _RL vz(im,jm,Lm)
0049 _RL tz(im,jm,Lm)
0050 _RL qz(im,jm,Lm)
8b150b4af9 Andr*0051 _RL phis_var(im,jm)
0052
5c6d0925b4 Andr*0053 _RL dudt(im,jm,Lm)
0054 _RL dvdt(im,jm,Lm)
0055 _RL dtdt(im,jm,Lm)
ee830839ce Andr*0056
0057
0058
5c6d0925b4 Andr*0059 _RL tv(im,jm,Lm)
0060 _RL dragu(im,jm,Lm), dragv(im,jm,Lm)
0061 _RL dragt(im,jm,Lm)
8b150b4af9 Andr*0062 _RL dragx(im,jm), dragy(im,jm)
0063 _RL sumu(im,jm)
ee830839ce Andr*0064 integer nthin(im,jm),nbase(im,jm)
0065 integer nthini, nbasei
0066
8b150b4af9 Andr*0067 _RL phis_std(im,jm)
ee830839ce Andr*0068
8b150b4af9 Andr*0069 _RL std(istrip), ps(istrip)
5c6d0925b4 Andr*0070 _RL us(istrip,Lm), vs(istrip,Lm), ts(istrip,Lm)
0071 _RL dragus(istrip,Lm), dragvs(istrip,Lm)
8b150b4af9 Andr*0072 _RL dragxs(istrip), dragys(istrip)
924c50866c Jean*0073 _RL plstr(istrip,Lm),plestr(istrip,Lm+1),dpresstr(istrip,Lm)
ee830839ce Andr*0074 integer nthinstr(istrip),nbasestr(istrip)
0075
0076 integer n,i,j,L
8b150b4af9 Andr*0077 _RL getcon, pi
0078 _RL grav, rgas, cp, cpinv, lstar
0079 #ifdef ALLOW_DIAGNOSTICS
0080 logical diagnostics_is_on
0081 external diagnostics_is_on
0082 _RL tmpdiag(im,jm)
0083 #endif
ee830839ce Andr*0084
0085
0086
0087 pi = 4.0*atan(1.0)
0088 grav = getcon('GRAVITY')
0089 rgas = getcon('RGAS')
0090 cp = getcon('CP')
0091 cpinv = 1.0/cp
0092 lstar = 2*getcon('EARTH RADIUS')*cos(pi/3.0)/imglobal
0093
0094
0095
0096 do j=1,jm
0097 do i=1,im
0098
5c6d0925b4 Andr*0099 do nthini = 1,Lm+1
0100 if( pz(i,j)-ple(i,j,Lm+2-nthini).gt.25. ) then
ee830839ce Andr*0101 nthin(i,j) = nthini
0102 goto 10
0103 endif
0104 enddo
0105 10 continue
5c6d0925b4 Andr*0106 do nbasei = 1,Lm+1
0107 if( ple(i,j,Lm+2-nbasei).lt.(0.667*pz(i,j)) ) then
ee830839ce Andr*0108 nbase(i,j) = nbasei
0109 goto 20
0110 endif
0111 enddo
0112 20 continue
5c6d0925b4 Andr*0113 if( (0.667*pz(i,j))-ple(i,j,Lm+2-nbase(i,j)) .gt.
0114 . ple(i,j,Lm+3-nbase(i,j))-(0.667*pz(i,j)) ) then
ee830839ce Andr*0115 nbase(i,j) = nbase(i,j)-1
0116 endif
0117
0118 enddo
0119 enddo
5c6d0925b4 Andr*0120
ee830839ce Andr*0121
5c6d0925b4 Andr*0122
ee830839ce Andr*0123
0124 do j=1,jm
0125 do i=1,im
e7070f537c Cons*0126 phis_std(i,j) = min( 400.0 _d 0, sqrt( max(0.0 _d 0,
0127 $ phis_var(i,j)) )/grav )
ee830839ce Andr*0128 enddo
0129 enddo
0130
0131
0132
5c6d0925b4 Andr*0133 do L = 1,Lm
ee830839ce Andr*0134 do j = 1,jm
0135 do i = 1,im
0136 tv(i,j,L) = tz(i,j,L)*pkz(i,j,L)*(1.+.609*qz(i,j,L))
0137 enddo
0138 enddo
0139 enddo
0140
5c6d0925b4 Andr*0141 do L = 1,Lm
0142 do j = 1,jm
0143 do i = 1,im
0144 dragu(i,j,L) = 0.
0145 dragv(i,j,L) = 0.
0146 dragt(i,j,L) = 0.
0147 enddo
0148 enddo
0149 enddo
0150
ee830839ce Andr*0151
0152
0153
0154 do n=1,npcs
0155
80223129cd Andr*0156 call stripit ( phis_std,std,im*jm,im*jm,istrip,1,n )
ee830839ce Andr*0157
80223129cd Andr*0158 call stripit ( pz,ps,im*jm,im*jm,istrip,1 ,n )
0159 call stripit ( uz,us,im*jm,im*jm,istrip,Lm,n )
0160 call stripit ( vz,vs,im*jm,im*jm,istrip,Lm,n )
0161 call stripit ( tv,ts,im*jm,im*jm,istrip,Lm,n )
0162 call stripit ( pl,plstr,im*jm,im*jm,istrip,Lm,n )
924c50866c Jean*0163 call stripit ( ple,plestr,im*jm,im*jm,istrip,Lm+1,n )
80223129cd Andr*0164 call stripit ( dpres,dpresstr,im*jm,im*jm,istrip,Lm,n )
0165 call stripitint ( nthin,nthinstr,im*jm,im*jm,istrip,1,n )
0166 call stripitint ( nbase,nbasestr,im*jm,im*jm,istrip,1,n )
ee830839ce Andr*0167
0168 call GWDD ( ps,us,vs,ts,
0169 . dragus,dragvs,dragxs,dragys,std,
0170 . plstr,plestr,dpresstr,grav,rgas,cp,
5c6d0925b4 Andr*0171 . istrip,Lm,nthinstr,nbasestr,lstar )
ee830839ce Andr*0172
80223129cd Andr*0173 call pastit( dragus,dragu,istrip,im*jm,im*jm,Lm,n )
0174 call pastit( dragvs,dragv,istrip,im*jm,im*jm,Lm,n )
0175 call pastit( dragxs,dragx,istrip,im*jm,im*jm,1 ,n )
0176 call pastit( dragys,dragy,istrip,im*jm,im*jm,1 ,n )
ee830839ce Andr*0177
0178 enddo
0179
0180
0181
5c6d0925b4 Andr*0182 do L = 1,Lm
ee830839ce Andr*0183 do j = 1,jm
0184 do i = 1,im
e7070f537c Cons*0185 dragu(i,j,L) = sign( min(0.006 _d 0,abs(dragu(i,j,L))), dragu(i
0186 $ ,j,L) )
0187 dragv(i,j,L) = sign( min(0.006 _d 0,abs(dragv(i,j,L))), dragv(i
0188 $ ,j,L) )
ee830839ce Andr*0189 dragt(i,j,L) = -( uz(i,j,L)*dragu(i,j,L)+vz(i,j,L)*dragv(i,j,L) )
0190 . *cpinv
694aa9199c Andr*0191 dudt(i,j,L) = dudt(i,j,L) + dragu(i,j,L)
0192 dvdt(i,j,L) = dvdt(i,j,L) + dragv(i,j,L)
0193 dtdt(i,j,L) = dtdt(i,j,L) + dragt(i,j,L)*pz(i,j)/pkz(i,j,L)
ee830839ce Andr*0194 enddo
0195 enddo
0196 enddo
0197
0198
0199
8b150b4af9 Andr*0200 #ifdef ALLOW_DIAGNOSTICS
5c6d0925b4 Andr*0201 do L = 1,Lm
8b150b4af9 Andr*0202
0203 if(diagnostics_is_on('GWDU ',myid) ) then
0204 do j=1,jm
0205 do i=1,im
0206 tmpdiag(i,j) = dragu(i,j,L)*86400
0207 enddo
0208 enddo
0209 call diagnostics_fill(tmpdiag,'GWDU ',L,1,3,bi,bj,myid)
ee830839ce Andr*0210 endif
0211
8b150b4af9 Andr*0212 if(diagnostics_is_on('GWDV ',myid) ) then
0213 do j=1,jm
0214 do i=1,im
0215 tmpdiag(i,j) = dragv(i,j,L)*86400
0216 enddo
0217 enddo
0218 call diagnostics_fill(tmpdiag,'GWDV ',L,1,3,bi,bj,myid)
0219 endif
0220
0221 if(diagnostics_is_on('GWDT ',myid) ) then
0222 do j=1,jm
0223 do i=1,im
0224 tmpdiag(i,j) = dragt(i,j,L)*86400
0225 enddo
0226 enddo
0227 call diagnostics_fill(tmpdiag,'GWDT ',L,1,3,bi,bj,myid)
0228 endif
0229
0230 enddo
0231
ee830839ce Andr*0232
0233
8b150b4af9 Andr*0234 if(diagnostics_is_on('GWDUS ',myid) ) then
0235 call diagnostics_fill(dragx,'GWDUS ',0,1,3,bi,bj,myid)
ee830839ce Andr*0236 endif
0237
0238
0239
8b150b4af9 Andr*0240 if(diagnostics_is_on('GWDVS ',myid) ) then
0241 call diagnostics_fill(dragy,'GWDVS ',0,1,3,bi,bj,myid)
ee830839ce Andr*0242 endif
0243
0244
0245
8b150b4af9 Andr*0246 if(diagnostics_is_on('GWDUT ',myid) ) then
ee830839ce Andr*0247 do j = 1,jm
0248 do i = 1,im
0249 sumu(i,j) = 0.0
0250 enddo
0251 enddo
5c6d0925b4 Andr*0252 do L = 1,Lm
ee830839ce Andr*0253 do j = 1,jm
0254 do i = 1,im
0255 sumu(i,j) = sumu(i,j) + dragu(i,j,L)*dpres(i,j,L)/pz(i,j)
0256 enddo
0257 enddo
0258 enddo
8b150b4af9 Andr*0259 do j=1,jm
0260 do i=1,im
0261 tmpdiag(i,j) = dragx(i,j) + sumu(i,j)*pz(i,j)/grav*100
0262 enddo
0263 enddo
0264 call diagnostics_fill(tmpdiag,'GWDUT ',0,1,3,bi,bj,myid)
ee830839ce Andr*0265 endif
0266
0267
0268
8b150b4af9 Andr*0269 if(diagnostics_is_on('GWDVT ',myid) ) then
ee830839ce Andr*0270 do j = 1,jm
0271 do i = 1,im
0272 sumu(i,j) = 0.0
0273 enddo
0274 enddo
5c6d0925b4 Andr*0275 do L = 1,Lm
ee830839ce Andr*0276 do j = 1,jm
0277 do i = 1,im
0278 sumu(i,j) = sumu(i,j) + dragv(i,j,L)*dpres(i,j,L)/pz(i,j)
0279 enddo
0280 enddo
0281 enddo
8b150b4af9 Andr*0282 do j=1,jm
0283 do i=1,im
0284 tmpdiag(i,j) = dragy(i,j) + sumu(i,j)*pz(i,j)/grav*100
0285 enddo
0286 enddo
0287 call diagnostics_fill(tmpdiag,'GWDVT ',0,1,3,bi,bj,myid)
ee830839ce Andr*0288 endif
8b150b4af9 Andr*0289 #endif
ee830839ce Andr*0290
0291 return
0292 end
0293 SUBROUTINE GWDD ( ps,u,v,t,dudt,dvdt,xdrag,ydrag,
0294 . std,pl,ple,dpres,
5c6d0925b4 Andr*0295 . grav,rgas,cp,irun,Lm,nthin,nbase,lstar )
ee830839ce Andr*0296
0297
0298
0299
0300
0301
0302
0303
0304
0305
0306
0307
0308
0309
0310
0311
0312
0313
0314
0315
0316
5c6d0925b4 Andr*0317
ee830839ce Andr*0318
0319
0320
0321
0322
0323
0324
0325
0326
5c6d0925b4 Andr*0327
0328
0329
0330
0331
ee830839ce Andr*0332
0333
0334 implicit none
0335
0336
0337
5c6d0925b4 Andr*0338 integer irun,Lm
8b150b4af9 Andr*0339 _RL ps(irun)
5c6d0925b4 Andr*0340 _RL u(irun,Lm), v(irun,Lm), t(irun,Lm)
0341 _RL dudt(irun,Lm), dvdt(irun,Lm)
8b150b4af9 Andr*0342 _RL xdrag(irun), ydrag(irun)
0343 _RL std(irun)
5c6d0925b4 Andr*0344 _RL ple(irun,Lm+1), pl(irun,Lm), dpres(irun,Lm)
8b150b4af9 Andr*0345 _RL grav, rgas, cp
ee830839ce Andr*0346 integer nthin(irun),nbase(irun)
8b150b4af9 Andr*0347 _RL lstar
ee830839ce Andr*0348
0349
0350
8b150b4af9 Andr*0351 _RL ubar(irun), vbar(irun), robar(irun)
0352 _RL speed(irun), ang(irun)
5c6d0925b4 Andr*0353 _RL bv(irun,Lm)
8b150b4af9 Andr*0354 _RL nbar(irun)
ee830839ce Andr*0355
5c6d0925b4 Andr*0356 _RL XTENS(irun,Lm+1), YTENS(irun,Lm+1)
0357 _RL TENSIO(irun,Lm+1)
8b150b4af9 Andr*0358 _RL DRAGSF(irun)
5c6d0925b4 Andr*0359 _RL RO(irun,Lm), DZ(irun,Lm)
ee830839ce Andr*0360
0361 integer icrilv(irun)
0362
0363
0364
5c6d0925b4 Andr*0365 integer i,L
0366 _RL a,g,agrav,akwnmb
8b150b4af9 Andr*0367 _RL gocp,roave,roiave,frsf,gstar,vai1,vai2
0368 _RL vaisd,velco,deluu,delvv,delve2,delz,vsqua
0369 _RL richsn,crifro,crif2,fro2,coef
ee830839ce Andr*0370
0371
0372
0373 a = 1.0
0374 g = 1.0
5c6d0925b4 Andr*0375 agrav = 1.0/grav
ee830839ce Andr*0376 akwnmb = 1.0/lstar
5c6d0925b4 Andr*0377 gocp = grav/cp
ee830839ce Andr*0378
5c6d0925b4 Andr*0379
0380
0381 do l = 1,Lm
ee830839ce Andr*0382 do i = 1,irun
5c6d0925b4 Andr*0383 ro(i,L) = pl(i,Lm+1-L)/(rgas*t(i,Lm+1-L))
ee830839ce Andr*0384 enddo
0385 enddo
0386
0387
0388
5c6d0925b4 Andr*0389 do l = 2,Lm
ee830839ce Andr*0390 do i = 1,irun
5c6d0925b4 Andr*0391 roiave = ( 1./ro(i,L-1) + 1./ro(i,L) )*0.5
694aa9199c Andr*0392 dz(i,L) = agrav*roiave*( pl(i,Lm+2-L)-pl(i,Lm+1-L) )
ee830839ce Andr*0393 enddo
0394 enddo
0395
0396
5c6d0925b4 Andr*0397
0398
0399
ee830839ce Andr*0400
0401
0402
0403 do i = 1,irun
5c6d0925b4 Andr*0404 robar(i) = 0.0
ee830839ce Andr*0405 ubar(i) = 0.0
0406 vbar(i) = 0.0
0407 enddo
0408
0409 do i = 1,irun
0410 do L = 1,nbase(i)-1
694aa9199c Andr*0411 robar(i) = robar(i) + ro(i,L) * (ple(i,Lm+2-L)-ple(i,Lm+1-L))
0412 ubar(i) = ubar(i) + u(i,Lm+1-L) * (ple(i,Lm+2-L)-ple(i,Lm+1-L))
0413 vbar(i) = vbar(i) + v(i,Lm+1-L) * (ple(i,Lm+2-L)-ple(i,Lm+1-L))
ee830839ce Andr*0414 enddo
0415 enddo
0416
0417 do i = 1,irun
af0ffc68df Andr*0418 robar(i) = robar(i)/(ps(i)-ple(i,Lm+1-(nbase(i)-1))) * 100.0
0419 ubar(i) = ubar(i)/(ps(i)-ple(i,Lm+1-(nbase(i)-1)))
0420 vbar(i) = vbar(i)/(ps(i)-ple(i,Lm+1-(nbase(i)-1)))
ee830839ce Andr*0421
5c6d0925b4 Andr*0422 speed(i) = sqrt( ubar(i)*ubar(i) + vbar(i)*vbar(i) )
0423 ang(i) = atan2(vbar(i),ubar(i))
ee830839ce Andr*0424 enddo
0425
0426
0427
0428 do i = 1,irun
5c6d0925b4 Andr*0429 do l = 2,nbase(i)
0430 vai1 = (t(i,Lm+1-L)-t(i,Lm+2-L))/dz(i,L)+gocp
0431 if( vai1.LT.0.0 ) then
0432 vai1 = 0.0
0433 endif
0434 vai2 = 2.0*grav/( t(i,Lm+1-L)+t(i,Lm+2-L) )
0435 vsqua = vai1*vai2
0436 bv(i,L) = sqrt(vsqua)
0437 enddo
ee830839ce Andr*0438 enddo
0439
0440
0441
0442 do i = 1,irun
5c6d0925b4 Andr*0443 nbar(i) = 0.0
ee830839ce Andr*0444 enddo
0445 do i = 1,irun
0446 do l = 2,nbase(i)
694aa9199c Andr*0447 nbar(i) = nbar(i) + bv(i,L)*(pl(i,Lm+2-L)-pl(i,Lm+1-L))
ee830839ce Andr*0448 enddo
0449 enddo
0450
0451 do i = 1,irun
5c6d0925b4 Andr*0452 nbar(i) = nbar(i)/(pl(i,Lm)-pl(i,Lm+1-nbase(i)))
0453 frsf = nbar(i)*std(i)/speed(i)
0454
0455 if( speed(i).eq.0.0 .or. nbar(i).eq.0.0 ) then
0456 tensio(i,1) = 0.0
0457 else
0458 gstar = g*frsf*frsf/(frsf*frsf+a*a)
0459 tensio(i,1) = gstar*(robar(i)*speed(i)*speed(i)*speed(i))
0460 . / (nbar(i)*lstar)
0461 endif
ee830839ce Andr*0462
5c6d0925b4 Andr*0463 xtens(i,1) = tensio(i,1) * cos(ang(i))
0464 ytens(i,1) = tensio(i,1) * sin(ang(i))
0465 dragsf(i) = tensio(i,1)
0466 xdrag(i) = xtens(i,1)
0467 ydrag(i) = ytens(i,1)
ee830839ce Andr*0468 enddo
0469
0470
0471
0472 do i = 1,irun
5c6d0925b4 Andr*0473 if( nthin(i).gt.1 ) then
0474 do l = 1,nthin(i)
0475 tensio(i,L) = tensio(i,1)
0476 xtens(i,L) = xtens(i,1)
0477 ytens(i,L) = ytens(i,1)
0478 enddo
0479 endif
ee830839ce Andr*0480 enddo
0481
0482
0483
0484
0485
0486 do i = 1,irun
5c6d0925b4 Andr*0487 do l = nthin(i)+1,nbase(i)
ee830839ce Andr*0488
5c6d0925b4 Andr*0489 velco = 0.5*( (u(i,Lm+1-L)*ubar(i) + v(i,Lm+1-L)*vbar(i))
0490 . + (u(i,Lm+2-L)*ubar(i) + v(i,Lm+2-L)*vbar(i)) )
ee830839ce Andr*0491 . / speed(i)
0492
0493
5c6d0925b4 Andr*0494 roave = 0.5*(ro(i,L-1)+ro(i,L)) * 100.0
ee830839ce Andr*0495
5c6d0925b4 Andr*0496 if( velco.le.0.0 ) then
0497 tensio(i,L) = tensio(i,L-1)
0498 goto 1500
0499 endif
ee830839ce Andr*0500
0501
0502
5c6d0925b4 Andr*0503 fro2 = bv(i,L)/(akwnmb*roave*velco*velco*velco)*tensio(i,L-1)
0504 deluu = u(i,Lm+1-L)-u(i,Lm+2-L)
0505 delvv = v(i,Lm+1-L)-v(i,Lm+2-L)
0506 delve2 = ( deluu*deluu + delvv*delvv )
ee830839ce Andr*0507
0508
0509
5c6d0925b4 Andr*0510 if( delve2.ne.0.0 ) then
0511 delz = dz(i,L)
0512 vsqua = bv(i,L)*bv(i,L)
0513 richsn = delz*delz*vsqua/delve2
0514 else
0515 richsn = 99999.0
0516 endif
0517
0518 if( richsn.le.0.25 ) then
0519 tensio(i,L) = tensio(i,L-1)
0520 goto 1500
0521 endif
ee830839ce Andr*0522
0523
0524
0525
5c6d0925b4 Andr*0526 crifro = 1.0 - 0.25/richsn
0527 crif2 = crifro*crifro
32362b8fa8 Cons*0528 if( l.eq.2 ) crif2 = min(0.7 _d 0,crif2)
ee830839ce Andr*0529
5c6d0925b4 Andr*0530 if( fro2.gt.crif2 ) then
0531 tensio(i,L) = crif2/fro2*tensio(i,L-1)
0532 else
0533 tensio(i,L) = tensio(i,L-1)
0534 endif
ee830839ce Andr*0535
5c6d0925b4 Andr*0536 1500 continue
0537 xtens(i,L) = tensio(i,L)*cos(ang(i))
0538 ytens(i,L) = tensio(i,L)*sin(ang(i))
0539
0540 enddo
ee830839ce Andr*0541 enddo
0542
0543
0544
0545
0546
0547 do i = 1,irun
5c6d0925b4 Andr*0548 icrilv(i) = 0
ee830839ce Andr*0549 enddo
0550
0551 do i = 1,irun
5c6d0925b4 Andr*0552 do l = nbase(i)+1,Lm+1
ee830839ce Andr*0553
5c6d0925b4 Andr*0554 tensio(i,L) = 0.0
ee830839ce Andr*0555
0556
0557
5c6d0925b4 Andr*0558 if( icrilv(i).eq.1 ) goto 130
ee830839ce Andr*0559
0560
0561
5c6d0925b4 Andr*0562 if( l.eq.Lm+1 ) then
0563 tensio(i,L) = tensio(i,L-1)
0564 goto 130
0565 endif
ee830839ce Andr*0566
5c6d0925b4 Andr*0567 roave = 0.5*(ro(i,L-1)+ro(i,L)) * 100.0
0568 vai1 = (t(i,Lm+1-L)-t(i,Lm+2-L))/dz(i,L)+gocp
ee830839ce Andr*0569
5c6d0925b4 Andr*0570 if( vai1.lt.0.0 ) then
0571 icrilv(i) = 1
0572 tensio(i,L) = 0.0
0573 goto 130
0574 endif
0575
0576 vai2 = 2.0*grav/(t(i,Lm+1-L)+t(i,Lm+2-L))
0577 vsqua = vai1*vai2
0578 vaisd = sqrt(vsqua)
0579
0580 velco = 0.5*( (u(i,Lm+1-L)*ubar(i) + v(i,Lm+1-L)*vbar(i))
0581 . + (u(i,Lm+2-L)*ubar(i) + v(i,Lm+2-L)*vbar(i)) )
ee830839ce Andr*0582 . / speed(i)
0583
5c6d0925b4 Andr*0584 if( velco.lt.0.0 ) then
0585 icrilv(i) = 1
0586 tensio(i,L) = 0.0
0587 goto 130
0588 endif
ee830839ce Andr*0589
0590
0591
5c6d0925b4 Andr*0592 fro2 = vaisd/(akwnmb*roave*velco*velco*velco)*tensio(i,L-1)
0593 deluu = u(i,Lm+1-L)-u(i,Lm+2-L)
0594 delvv = v(i,Lm+1-L)-v(i,Lm+2-L)
0595 delve2 = ( deluu*deluu + delvv*delvv )
ee830839ce Andr*0596
0597
0598
5c6d0925b4 Andr*0599 if( delve2.ne.0.0 ) then
0600 delz = dz(i,L)
0601 richsn = delz*delz*vsqua/delve2
0602 else
0603 richsn = 99999.0
0604 endif
0605
0606 if( richsn.le.0.25 ) then
0607 tensio(i,L) = 0.0
0608 icrilv(i) = 1
0609 goto 130
0610 endif
ee830839ce Andr*0611
0612
0613
0614
5c6d0925b4 Andr*0615 crifro = 1.0 - 0.25/richsn
0616 crif2 = crifro*crifro
0617
0618 if( fro2.ge.crif2 ) then
0619 tensio(i,L) = crif2/fro2*tensio(i,L-1)
0620 else
0621 tensio(i,L) = tensio(i,L-1)
0622 endif
0623
0624 130 continue
0625 xtens(i,L) = tensio(i,L)*cos(ang(i))
0626 ytens(i,L) = tensio(i,L)*sin(ang(i))
0627 enddo
ee830839ce Andr*0628 enddo
0629
0630
0631
0632
0633
0634 do i = 1,irun
5c6d0925b4 Andr*0635 do l = nthin(i)+1,Lm
694aa9199c Andr*0636 coef = -grav*ps(i)/dpres(i,Lm+1-L)
5c6d0925b4 Andr*0637 dudt(i,Lm+1-L) = coef*(xtens(i,L+1)-xtens(i,L))
0638 dvdt(i,Lm+1-L) = coef*(ytens(i,L+1)-ytens(i,L))
ee830839ce Andr*0639 enddo
0640 enddo
0641
0642
0643
0644 do i = 1,irun
694aa9199c Andr*0645 coef = grav*ps(i)/(ple(i,Lm+1-nthin(i))-ple(i,Lm+1))
5c6d0925b4 Andr*0646 dudt(i,Lm) = coef*(xtens(i,nthin(i)+1)-xtens(i,1))
0647 dvdt(i,Lm) = coef*(ytens(i,nthin(i)+1)-ytens(i,1))
ee830839ce Andr*0648 enddo
0649
0650
0651
0652 do i = 1,irun
5c6d0925b4 Andr*0653 if( nthin(i).gt.1 ) then
0654 do l = 2,nthin(i)
0655 dudt(i,Lm+1-L) = dudt(i,Lm)
0656 dvdt(i,Lm+1-L) = dvdt(i,Lm)
0657 enddo
0658 endif
ee830839ce Andr*0659 enddo
0660
0661
0662
5c6d0925b4 Andr*0663 do l = 1,Lm
ee830839ce Andr*0664 do i = 1,irun
5c6d0925b4 Andr*0665 dudt(i,L) = - dudt(i,L)/ps(i)*0.01
0666 dvdt(i,L) = - dvdt(i,L)/ps(i)*0.01
ee830839ce Andr*0667 enddo
0668 enddo
0669
0670 return
0671 end