- Timestamp:
- Mar 2, 2012, 12:04:08 PM (13 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/LMDZ.MARS/libf/phymars/yamada4.F
r544 r554 1 !************************************************************ 2 !************************************************************ 3 ! 4 ! YAMADA4 EARTH =>>> MARS VERSION 5 ! Modifications by: A.C. 02-03-2012 (marked by 'MARS') 6 ! Original version given by F.H. 01-03-2012 7 ! 8 !************************************************************ 9 !************************************************************ 1 10 SUBROUTINE yamada4(ngrid,nlay,dt,g,rconst,plev,temp 2 s ,zlev,zlay,u,v, teta,cd,q2,km,kn,kq,ustar11 s ,zlev,zlay,u,v,phc,pq,cd,q2,km,kn,kq,ustar 3 12 s ,iflag_pbl) 4 13 IMPLICIT NONE 5 c....................................................................... 14 !....................................................................... 15 ! MARS 6 16 #include "dimensions.h" 7 17 #include "dimphys.h" 8 18 #include "tracer.h" 9 19 #include "callkeys.h" 10 c....................................................................... 11 c 12 c 13 c dt : pas de temps 14 c g : g 15 c zlev : altitude a chaque niveau (interface inferieure de la couche 16 c de meme indice) 17 c zlay : altitude au centre de chaque couche 18 c u,v : vitesse au centre de chaque couche 19 c (en entree : la valeur au debut du pas de temps) 20 c teta : temperature potentielle au centre de chaque couche 21 c (en entree : la valeur au debut du pas de temps) 22 c cd : cdrag 23 c (en entree : la valeur au debut du pas de temps) 24 c q2 : $q^2$ au bas de chaque couche 25 c (en entree : la valeur au debut du pas de temps) 26 c (en sortie : la valeur a la fin du pas de temps) 27 c km : diffusivite turbulente de quantite de mouvement (au bas de chaque 28 c couche) 29 c (en sortie : la valeur a la fin du pas de temps) 30 c kn : diffusivite turbulente des scalaires (au bas de chaque couche) 31 c (en sortie : la valeur a la fin du pas de temps) 32 c 33 c iflag_pbl doit valoir entre 6 et 9 34 c l=6, on prend systematiquement une longueur d equilibre 35 c iflag_pbl=6 : MY 2.0 36 c iflag_pbl=7 : MY 2.0.Fournier 37 c iflag_pbl=8 : MY 2.5 38 c iflag_pbl>=9 : MY 2.5 avec diffusion verticale 39 40 c....................................................................... 41 REAL dt,g,rconst 42 real plev(ngrid,nlay+1),temp(ngrid,nlay) 43 real ustar(ngrid) 44 real kmin,qmin,pblhmin(ngrid),coriol(ngrid) 45 REAL zlev(ngrid,nlay+1) 46 REAL zlay(ngrid,nlay) 47 REAL u(ngrid,nlay) 48 REAL v(ngrid,nlay) 49 REAL teta(ngrid,nlay) 50 REAL cd(ngrid) 51 REAL q2(ngrid,nlay+1),qpre 20 !....................................................................... 21 ! 22 ! dt : pas de temps 23 ! g : g 24 ! zlev : altitude a chaque niveau (interface inferieure de la couche 25 ! de meme indice) 26 ! zlay : altitude au centre de chaque couche 27 ! u,v : vitesse au centre de chaque couche 28 ! (en entree : la valeur au debut du pas de temps) 29 ! phc : temperature potentielle au centre de chaque couche 30 ! (en entree : la valeur au debut du pas de temps) 31 ! cd : cdrag 32 ! (en entree : la valeur au debut du pas de temps) 33 ! q2 : $q^2$ au bas de chaque couche 34 ! (en entree : la valeur au debut du pas de temps) 35 ! (en sortie : la valeur a la fin du pas de temps) 36 ! km : diffusivite turbulente de quantite de mouvement (au bas de chaque 37 ! couche) 38 ! (en sortie : la valeur a la fin du pas de temps) 39 ! kn : diffusivite turbulente des scalaires (au bas de chaque couche) 40 ! (en sortie : la valeur a la fin du pas de temps) 41 ! 42 ! iflag_pbl doit valoir entre 6 et 9 43 ! l=6, on prend systematiquement une longueur d equilibre 44 ! iflag_pbl=6 : MY 2.0 45 ! iflag_pbl=7 : MY 2.0.Fournier 46 ! iflag_pbl=8 : MY 2.5 47 ! iflag_pbl>=9 : MY 2.5 avec diffusion verticale 48 ! 49 !....................................................................... 50 51 REAL, INTENT(IN) :: dt,g,rconst 52 REAL, INTENT(IN) :: u(ngrid,nlay) 53 REAL, INTENT(IN) :: v(ngrid,nlay) 54 REAL, INTENT(IN) :: phc(ngrid,nlay) 55 REAL, INTENT(IN) :: cd(ngrid) 56 REAL, INTENT(IN) :: temp(ngrid,nlay) 57 REAL, INTENT(IN) :: plev(ngrid,nlay+1) 58 REAL, INTENT(IN) :: ustar(ngrid) 59 REAL, INTENT(IN) :: zlev(ngrid,nlay+1) 60 REAL, INTENT(IN) :: zlay(ngrid,nlay) 61 INTEGER, INTENT(IN) :: iflag_pbl,ngrid 62 INTEGER, INTENT(IN) :: nlay 63 REAL, INTENT(INOUT) :: q2(ngrid,nlay+1) 64 REAL, INTENT(OUT) :: km(ngrid,nlay+1) 65 REAL, INTENT(OUT) :: kn(ngrid,nlay+1) 66 REAL, INTENT(OUT) :: kq(ngrid,nlay+1) 67 68 REAL kmin,qmin,pblhmin(ngrid),coriol(ngrid) 52 69 REAL unsdz(ngrid,nlay) 53 70 REAL unsdzdec(ngrid,nlay+1) 54 55 REAL km(ngrid,nlay+1)56 71 REAL kmpre(ngrid,nlay+1),tmp2 57 72 REAL mpre(ngrid,nlay+1) 58 REAL kn(ngrid,nlay+1) 59 REAL kq(ngrid,nlay+1) 60 real ff(ngrid,nlay+1),delta(ngrid,nlay+1) 61 real aa(ngrid,nlay+1),aa0,aa1 62 integer iflag_pbl,ngrid,nlay,nlev 63 64 65 logical first 66 integer ipas 67 save first,ipas 68 cFH/IM data first,ipas/.true.,0/ 69 data first,ipas/.false.,0/ 70 71 integer ig,k 72 73 74 real ri,zrif,zalpha,zsm,zsn 75 real rif(ngrid,nlay+1),sm(ngrid,nlay+1),alpha(ngrid,nlay) 76 77 real m2(ngrid,nlay+1),dz(ngrid,nlay+1),zq,n2(ngrid,nlay+1) 78 real dtetadz(ngrid,nlay+1) 79 real m2cstat,mcstat,kmcstat 80 real l(ngrid,nlay+1) 81 real,allocatable,save :: l0(:) 82 real sq(ngrid),sqz(ngrid),zz(ngrid,nlay+1) 83 integer iter 84 85 real ric,rifc,b1,kap 86 save ric,rifc,b1,kap 87 data ric,rifc,b1,kap/0.195,0.191,16.6,0.4/ 88 real frif,falpha,fsm 89 real fl,zzz,zl0,zq2,zn2 90 91 ! MARS 92 REAL,SAVE :: q2min,q2max,knmin,kmmin 93 DATA q2min,q2max,knmin,kmmin/1.E-10,1.E+2,1.E-5,1.E-5/ 94 95 ! mars q2min 0.001 mais trop fort ! 96 ! PARAMETER (gnmin=-10.E+0) 97 ! PARAMETER (gnmax=0.0233E+0) 98 ! PARAMETER (a1=0.92E+0) 99 ! PARAMETER (a2=0.74E+0) 100 ! PARAMETER (b2=10.1E+0) 101 ! PARAMETER (c1=0.08E+0) 102 103 real rino(ngrid,nlay+1),smyam(ngrid,nlay),styam(ngrid,nlay) 73 REAL ff(ngrid,nlay+1),delta(ngrid,nlay+1) 74 REAL aa(ngrid,nlay+1),aa0,aa1,qpre 75 76 LOGICAL first 77 INTEGER ipas,nlev 78 SAVE first,ipas 79 !FH/IM DATA first,ipas/.true.,0/ 80 DATA first,ipas/.false.,0/ 81 INTEGER ig,k 82 83 84 REAL ri,zrif,zalpha,zsm,zsn 85 REAL rif(ngrid,nlay+1),sm(ngrid,nlay+1),alpha(ngrid,nlay) 86 87 REAL m2(ngrid,nlay+1),dz(ngrid,nlay+1),zq,n2(ngrid,nlay+1) 88 REAL dtetadz(ngrid,nlay+1) 89 REAL m2cstat,mcstat,kmcstat 90 REAL l(ngrid,nlay+1) 91 REAL,allocatable,SAVE :: l0(:) 92 REAL sq(ngrid),sqz(ngrid),zz(ngrid,nlay+1) 93 INTEGER iter 94 95 REAL ric,rifc,b1,kap 96 SAVE ric,rifc,b1,kap 97 DATA ric,rifc,b1,kap/0.195,0.191,16.6,0.4/ 98 REAL frif,falpha,fsm 99 REAL fl,zzz,zl0,zq2,zn2 100 101 REAL rino(ngrid,nlay+1),smyam(ngrid,nlay),styam(ngrid,nlay) 104 102 s ,lyam(ngrid,nlay),knyam(ngrid,nlay) 105 103 s ,w2yam(ngrid,nlay),t2yam(ngrid,nlay) 106 logical,save:: firstcall=.true.104 LOGICAL,SAVE :: firstcall=.true. 107 105 frif(ri)=0.6588*(ri+0.1776-sqrt(ri*ri-0.3221*ri+0.03156)) 108 106 falpha(ri)=1.318*(0.2231-ri)/(0.2341-ri) … … 113 111 114 112 113 ! MARS 114 REAL,SAVE :: q2min,q2max,knmin,kmmin 115 DATA q2min,q2max,knmin,kmmin/1.E-10,1.E+2,1.E-5,1.E-5/ 116 INTEGER ico2,iq 117 SAVE ico2 118 REAL m_co2, m_noco2, A , B 119 SAVE A, B 120 REAL teta(ngrid,nlay) 121 REAL pq(ngrid,nlay,nqmx) 122 115 123 nlev=nlay+1 124 125 c....................................................................... 126 c Initialization 127 c....................................................................... 128 129 if(firstcall) then 130 ico2=0 131 if (tracer) then 132 ! Prepare Special treatment if one of the tracers is CO2 gas 133 do iq=1,nqmx 134 if (noms(iq).eq."co2") then 135 ico2=iq 136 m_co2 = 44.01E-3 ! CO2 molecular mass (kg/mol) 137 m_noco2 = 33.37E-3 ! Non condensible mol mass (kg/mol) 138 ! Compute A and B coefficient use to compute 139 ! mean molecular mass Mair defined by 140 ! 1/Mair = q(ico2)/m_co2 + (1-q(ico2))/m_noco2 141 ! 1/Mair = A*q(ico2) + B 142 A =(1/m_co2 - 1/m_noco2) 143 B=1/m_noco2 144 end if 145 enddo 146 endif 147 allocate(l0(ngrid)) 148 firstcall=.false. 149 endif !of if firstcall 150 151 c....................................................................... 152 c Special treatment for co2 153 c....................................................................... 154 155 if (ico2.ne.0) then 156 ! Special case if one of the tracers is CO2 gas 157 DO k=1,nlay 158 DO ig=1,ngrid 159 teta(ig,k) = phc(ig,k)*(A*pq(ig,k,ico2)+B) 160 ENDDO 161 ENDDO 162 else 163 teta(:,:)=phc(:,:) 164 end if 116 165 117 if (firstcall) then118 allocate(l0(ngrid))119 firstcall=.false.120 endif121 122 123 166 if (.not.(iflag_pbl.ge.6.and.iflag_pbl.le.10)) then 124 167 stop'probleme de coherence dans appel a MY' … … 126 169 127 170 ipas=ipas+1 128 if (0.eq.1.and.first) then 129 do ig=1,1000 130 ri=(ig-800.)/500. 131 if (ri.lt.ric) then 132 zrif=frif(ri) 133 else 134 zrif=rifc 135 endif 136 if(zrif.lt.0.16) then 137 zalpha=falpha(zrif) 138 zsm=fsm(zrif) 139 else 140 zalpha=1.12 141 zsm=0.085 142 endif 143 c print*,ri,rif,zalpha,zsm 144 enddo 145 endif 146 147 c....................................................................... 148 c les increments verticaux 149 c....................................................................... 150 c 151 c!!!!! allerte !!!!!c 152 c!!!!! zlev n'est pas declare a nlay !!!!!c 153 c!!!!! ----> 154 DO ig=1,ngrid 155 zlev(ig,nlev)=zlay(ig,nlay) 156 & +( zlay(ig,nlay) - zlev(ig,nlev-1) ) 157 ENDDO 158 c!!!!! <---- 159 c!!!!! allerte !!!!!c 160 c 171 ! MARS 172 ! if (0.eq.1.and.first) then 173 ! do ig=1,1000 174 ! ri=(ig-800.)/500. 175 ! if (ri.lt.ric) then 176 ! zrif=frif(ri) 177 ! else 178 ! zrif=rifc 179 ! endif 180 ! if(zrif.lt.0.16) then 181 ! zalpha=falpha(zrif) 182 ! zsm=fsm(zrif) 183 ! else 184 ! zalpha=1.12 185 ! zsm=0.085 186 ! endif 187 ! print*,ri,rif,zalpha,zsm 188 ! enddo 189 ! endif 190 191 !....................................................................... 192 ! les increments verticaux 193 !....................................................................... 194 ! 195 !!!!!! allerte !!!!! 196 !!!!!! zlev n'est pas declare a nlev !!!!! 197 !!!!!! ----> 198 ! MARS 199 ! 200 ! DO ig=1,ngrid 201 ! zlev(ig,nlev)=zlay(ig,nlay) 202 ! & +( zlay(ig,nlay) - zlev(ig,nlev-1) ) 203 ! ENDDO 204 !!!!! <---- 205 !!!!! allerte !!!!! 206 161 207 DO k=1,nlay 162 208 DO ig=1,ngrid … … 175 221 unsdzdec(ig,nlay+1)=1.E+0/(zlev(ig,nlay+1)-zlay(ig,nlay)) 176 222 ENDDO 177 c 178 c.......................................................................223 ! 224 !....................................................................... 179 225 180 226 do k=2,nlay … … 185 231 dtetadz(ig,k)=(teta(ig,k)-teta(ig,k-1))/dz(ig,k) 186 232 n2(ig,k)=g*2.*dtetadz(ig,k)/(teta(ig,k-1)+teta(ig,k)) 187 cn2(ig,k)=0.233 ! n2(ig,k)=0. 188 234 ri=n2(ig,k)/max(m2(ig,k),1.e-10) 189 235 if (ri.lt.ric) then … … 200 246 endif 201 247 zz(ig,k)=b1*m2(ig,k)*(1.-rif(ig,k))*sm(ig,k) 202 cprint*,'RIF L=',k,rif(ig,k),ri*alpha(ig,k)203 204 205 enddo 206 enddo 207 208 209 c====================================================================210 cAu premier appel, on determine l et q2 de facon iterative.211 citerration pour determiner la longueur de melange248 ! print*,'RIF L=',k,rif(ig,k),ri*alpha(ig,k) 249 250 251 enddo 252 enddo 253 254 255 !==================================================================== 256 ! Au premier appel, on determine l et q2 de facon iterative. 257 ! iterration pour determiner la longueur de melange 212 258 213 259 214 260 if (first.or.iflag_pbl.eq.6) then 215 261 do ig=1,ngrid 216 ! l0(ig)=10. !EARTH 262 ! MARS 263 ! l0(ig)=10. 217 264 l0(ig)=160. 218 265 enddo … … 239 286 do ig=1,ngrid 240 287 l0(ig)=0.2*sqz(ig)/sq(ig) 241 cl0(ig)=30.242 enddo 243 cprint*,'ITER=',iter,' L0=',l0244 245 enddo 246 247 cprint*,'Fin de l initialisation de q2 et l0'288 ! l0(ig)=30. 289 enddo 290 ! print*,'ITER=',iter,' L0=',l0 291 292 enddo 293 294 ! print*,'Fin de l initialisation de q2 et l0' 248 295 249 296 endif ! first 250 297 251 c====================================================================252 cCalcul de la longueur de melange.253 c====================================================================254 255 cMise a jour de l0298 !==================================================================== 299 ! Calcul de la longueur de melange. 300 !==================================================================== 301 302 ! Mise a jour de l0 256 303 do ig=1,ngrid 257 304 sq(ig)=1.e-10 … … 267 314 do ig=1,ngrid 268 315 l0(ig)=0.2*sqz(ig)/sq(ig) 269 cl0(ig)=30.270 enddo 271 cprint*,'ITER=',iter,' L0=',l0272 ccalcul de l(z)316 ! l0(ig)=30. 317 enddo 318 ! print*,'ITER=',iter,' L0=',l0 319 ! calcul de l(z) 273 320 do k=2,nlay 274 321 do ig=1,ngrid … … 280 327 enddo 281 328 282 c====================================================================283 cYamada 2.0284 c====================================================================329 !==================================================================== 330 ! Yamada 2.0 331 !==================================================================== 285 332 if (iflag_pbl.eq.6) then 286 333 … … 293 340 294 341 else if (iflag_pbl.eq.7) then 295 c====================================================================296 cYamada 2.Fournier297 c====================================================================298 299 cCalcul de l, km, au pas precedent342 !==================================================================== 343 ! Yamada 2.Fournier 344 !==================================================================== 345 346 ! Calcul de l, km, au pas precedent 300 347 do k=2,nlay 301 348 do ig=1,ngrid … … 313 360 mcstat=sqrt(m2cstat) 314 361 315 cprint*,'M2 L=',k,mpre(ig,k),mcstat316 c 317 c -----{puis on ecrit la valeur de q qui annule lequation de m318 csupposee en q3}319 c 362 ! print*,'M2 L=',k,mpre(ig,k),mcstat 363 ! 364 ! -----{puis on ecrit la valeur de q qui annule l'equation de m 365 ! supposee en q3} 366 ! 320 367 IF (k.eq.2) THEN 321 368 kmcstat=1.E+0 / mcstat … … 336 383 & /( unsdz(ig,k)+unsdz(ig,k-1) ) 337 384 ENDIF 338 cprint*,'T2 L=',k,tmp2385 ! print*,'T2 L=',k,tmp2 339 386 tmp2=kmcstat 340 387 & /( sm(ig,k)/q2(ig,k) ) 341 388 & /l(ig,k) 342 ! q2(ig,k)=max(tmp2,1.E-10)**(2./3.) 343 ! MARS 344 q2(ig,k)=max(tmp2,q2min)**(2./3.) 345 c print*,'Q2 L=',k,q2(ig,k) 346 c 389 390 ! MARS 391 ! q2(ig,k)=max(tmp2,1.e-12)**(2./3.) 392 q2(ig,k)=max(q2min,max(tmp2,1.e-12)**(2./3.)) 393 394 ! print*,'Q2 L=',k,q2(ig,k) 395 ! 347 396 enddo 348 397 enddo 349 398 350 399 else if (iflag_pbl.ge.8) then 351 c====================================================================352 cYamada 2.5 a la Didi353 c====================================================================354 355 356 cCalcul de l, km, au pas precedent357 do k=2,nlay 358 do ig=1,ngrid 359 cprint*,'SMML=',sm(ig,k),l(ig,k)400 !==================================================================== 401 ! Yamada 2.5 a la Didi 402 !==================================================================== 403 404 405 ! Calcul de l, km, au pas precedent 406 do k=2,nlay 407 do ig=1,ngrid 408 ! print*,'SMML=',sm(ig,k),l(ig,k) 360 409 delta(ig,k)=q2(ig,k)/(l(ig,k)**2*sm(ig,k)) 361 410 if (delta(ig,k).lt.1.e-20) then 362 cprint*,'ATTENTION L=',k,' Delta=',delta(ig,k)411 ! print*,'ATTENTION L=',k,' Delta=',delta(ig,k) 363 412 delta(ig,k)=1.e-20 364 413 endif … … 368 417 aa1= 369 418 s (m2(ig,k)*(1.-rif(ig,k))-delta(ig,k)/b1) 370 cabder print*,'AA L=',k,aa0,aa1,aa1/max(m2(ig,k),1.e-20)419 ! abder print*,'AA L=',k,aa0,aa1,aa1/max(m2(ig,k),1.e-20) 371 420 aa(ig,k)=aa1*dt/(delta(ig,k)*l(ig,k)) 372 cprint*,'0L=',k,l(ig,k),delta(ig,k),km(ig,k)421 ! print*,'0L=',k,l(ig,k),delta(ig,k),km(ig,k) 373 422 qpre=sqrt(q2(ig,k)) 374 423 if (iflag_pbl.eq.8 ) then … … 385 434 endif 386 435 endif 436 437 ! MARS 438 q2(ig,k)=min(max(q2(ig,k),q2min),q2max) 387 439 ! q2(ig,k)=min(max(q2(ig,k),1.e-10),1.e4) 388 ! MARS 389 q2(ig,k)=min(max(q2(ig,k),q2min),q2max) 390 c print*,'Q2 L=',k,q2(ig,k),qpre*qpre 391 enddo 392 enddo 393 394 !MARS 395 ! q2(:,nlay+1)=q2min 396 ! OU ALORS MARS 440 441 ! print*,'Q2 L=',k,q2(ig,k),qpre*qpre 442 enddo 443 enddo 444 445 ! MARS 397 446 q2(:,nlay+1)=q2(:,nlay) 447 398 448 endif ! Fin du cas 8 399 449 400 cprint*,'OK8'401 402 c====================================================================403 c Calcul des coefficients de m�ange404 c====================================================================405 do k=2,nlay 406 cprint*,'k=',k407 do ig=1,ngrid 408 cabde print*,'KML=',l(ig,k),q2(ig,k),sm(ig,k)450 ! print*,'OK8' 451 452 !==================================================================== 453 ! Calcul des coefficients de melange 454 !==================================================================== 455 do k=2,nlay 456 ! print*,'k=',k 457 do ig=1,ngrid 458 !abde print*,'KML=',l(ig,k),q2(ig,k),sm(ig,k) 409 459 zq=sqrt(q2(ig,k)) 410 460 km(ig,k)=l(ig,k)*zq*sm(ig,k) 411 461 kn(ig,k)=km(ig,k)*alpha(ig,k) 412 ! MARS413 ! km(ig,k)=max(l(ig,k)*zq*sm(ig,k),kmmin)414 ! kn(ig,k)=max(km(ig,k)*alpha(ig,k),knmin)415 462 kq(ig,k)=l(ig,k)*zq*0.2 416 c print*,'KML=',km(ig,k),kn(ig,k) 417 enddo 418 enddo 419 ! MARS 420 ! km(:,nlay+1)=kmmin 421 ! kn(:,nlay+1)=knmin 422 ! kq(:,nlay+1)=knmin 423 ! OU ALORS MARS 463 ! print*,'KML=',km(ig,k),kn(ig,k) 464 enddo 465 enddo 466 467 ! MARS 424 468 km(:,nlay+1)=km(:,nlay) 425 469 kn(:,nlay+1)=kn(:,nlay) … … 433 477 endif 434 478 435 c Traitement des cas noctrunes avec l'introduction d'une longueur 436 c minimale. 437 438 c==================================================================== 439 c Traitement particulier pour les cas tres stables. 440 c D apres Holtslag Boville. 441 442 do ig=1,ngrid 443 coriol(ig)=1.e-4 444 pblhmin(ig)=0.07*ustar(ig)/max(abs(coriol(ig)),2.546e-5) 445 enddo 446 479 ! Traitement des cas noctrunes avec l'introduction d'une longueur 480 ! minilale. 481 ! 482 !==================================================================== 483 ! Traitement particulier pour les cas tres stables. 484 ! D'apres Holtslag Boville. 485 486 ! MARS : deactivating pblhmin following F.H. concerns 487 488 ! do ig=1,ngrid 489 ! coriol(ig)=1.e-4 490 ! pblhmin(ig)=0.07*ustar(ig)/max(abs(coriol(ig)),2.546e-5) 491 ! enddo 492 ! 447 493 ! print*,'pblhmin ',pblhmin 448 CTest a remettre 21 11 02449 ctest abd 13 05 02 if(0.eq.1) then450 if(1.eq.1) then451 do k=2,nlay452 do ig=1,ngrid453 if (teta(ig,2).gt.teta(ig,1)) then454 qmin=ustar(ig)*(max(1.-zlev(ig,k)/pblhmin(ig),0.))**2455 kmin=kap*zlev(ig,k)*qmin456 else457 kmin=-1. ! kmin n'est utilise que pour les SL stables.458 endif459 if (kn(ig,k).lt.kmin.or.km(ig,k).lt.kmin) then460 cprint*,'Seuil min Km K=',k,kmin,km(ig,k),kn(ig,k)461 cs ,sqrt(q2(ig,k)),pblhmin(ig),qmin/sm(ig,k)462 kn(ig,k)=kmin463 km(ig,k)=kmin464 kq(ig,k)=kmin465 cla longueur de melange est suposee etre l= kap z466 c K=l q Sm dou q2=(K/l Sm)**2467 q2(ig,k)=(qmin/sm(ig,k))**2468 endif469 enddo470 enddo471 endif472 473 cDiagnostique pour stokage494 !CTest a remettre 21 11 02 495 ! test abd 13 05 02 if(0.eq.1) then 496 ! if(0.eq.1) then 497 ! do k=2,nlay 498 ! do ig=1,ngrid 499 ! if (teta(ig,2).gt.teta(ig,1)) then 500 ! qmin=ustar(ig)*(max(1.-zlev(ig,k)/pblhmin(ig),0.))**2 501 ! kmin=kap*zlev(ig,k)*qmin 502 ! else 503 ! kmin=-1. ! kmin n'est utilise que pour les SL stables. 504 ! endif 505 ! if (kn(ig,k).lt.kmin.or.km(ig,k).lt.kmin) then 506 ! print*,'Seuil min Km K=',k,kmin,km(ig,k),kn(ig,k) 507 ! s ,sqrt(q2(ig,k)),pblhmin(ig),qmin/sm(ig,k) 508 ! kn(ig,k)=kmin 509 ! km(ig,k)=kmin 510 ! kq(ig,k)=kmin 511 ! la longueur de melange est suposee etre l= kap z 512 ! K=l q Sm d'ou q2=(K/l Sm)**2 513 ! q2(ig,k)=(qmin/sm(ig,k))**2 514 ! endif 515 ! enddo 516 ! enddo 517 ! endif 518 519 ! Diagnostique pour stokage 474 520 475 521 if(1.eq.0)then … … 487 533 knyam(1:ngrid,2:nlay)=kn(1:ngrid,2:nlay) 488 534 489 c Estimations de w'2 et T'2 dapres Abdela et McFarlane535 ! Estimations de w'2 et T'2 d'apres Abdela et McFarlane 490 536 491 537 w2yam(1:ngrid,2:nlay)=q2(1:ngrid,2:nlay)*0.24 … … 498 544 endif 499 545 500 cprint*,'OKFIN'546 ! print*,'OKFIN' 501 547 first=.false. 502 548 return … … 505 551 & kmy,q2) 506 552 IMPLICIT NONE 507 c....................................................................... 553 !....................................................................... 554 ! MARS 508 555 #include "dimensions.h" 509 556 #include "dimphys.h" 510 557 #include "tracer.h" 511 558 #include "callkeys.h" 512 c.......................................................................513 c 514 cdt : pas de temps515 516 realplev(ngrid,nlay+1)517 realtemp(ngrid,nlay)518 realtimestep519 realgravity,rconst520 realkstar(ngrid,nlay+1),zz521 realkmy(ngrid,nlay+1)522 realq2(ngrid,nlay+1)523 realdeltap(ngrid,nlay+1)524 realdenom(ngrid,nlay+1),alpha(ngrid,nlay+1),beta(ngrid,nlay+1)525 integerngrid,nlay526 527 integeri,k559 !....................................................................... 560 ! 561 ! dt : pas de temps 562 ! 563 REAL plev(ngrid,nlay+1) 564 REAL temp(ngrid,nlay) 565 REAL timestep 566 REAL gravity,rconst 567 REAL kstar(ngrid,nlay+1),zz 568 REAL kmy(ngrid,nlay+1) 569 REAL q2(ngrid,nlay+1) 570 REAL deltap(ngrid,nlay+1) 571 REAL denom(ngrid,nlay+1),alpha(ngrid,nlay+1),beta(ngrid,nlay+1) 572 INTEGER ngrid,nlay 573 574 INTEGER i,k 528 575 529 576 ! print*,'RD=',rconst 530 577 do k=1,nlay 531 578 do i=1,ngrid 532 ctest579 ! test 533 580 ! print*,'i,k',i,k 534 581 ! print*,'temp(i,k)=',temp(i,k) … … 557 604 denom(i,k)=deltap(i,k)+(1.-beta(i,k+1))* 558 605 s kstar(i,k)+kstar(i,k-1) 559 c correction dun bug 10 01 2001606 ! correction d'un bug 10 01 2001 560 607 alpha(i,k)=(q2(i,k)*deltap(i,k) 561 608 s +kstar(i,k)*alpha(i,k+1))/denom(i,k) … … 564 611 enddo 565 612 566 cSi on recalcule q2(1)613 ! Si on recalcule q2(1) 567 614 if(1.eq.0) then 568 615 do i=1,ngrid … … 572 619 enddo 573 620 endif 574 csinon, on peut sauter cette boucle...621 ! sinon, on peut sauter cette boucle... 575 622 576 623 do k=2,nlay+1 … … 585 632 & plev,temp,kmy,q2) 586 633 IMPLICIT NONE 587 c....................................................................... 634 !....................................................................... 635 ! MARS 588 636 #include "dimensions.h" 589 637 #include "dimphys.h" 590 638 #include "tracer.h" 591 639 #include "callkeys.h" 592 c.......................................................................593 c 594 cdt : pas de temps595 596 realplev(ngrid,nlay+1)597 realtemp(ngrid,nlay)598 realtimestep599 realgravity,rconst600 realkstar(ngrid,nlay+1),zz601 realkmy(ngrid,nlay+1)602 realq2(ngrid,nlay+1)603 realdeltap(ngrid,nlay+1)604 realdenom(ngrid,nlay+1),alpha(ngrid,nlay+1),beta(ngrid,nlay+1)605 integerngrid,nlay606 607 integeri,k640 !....................................................................... 641 ! 642 ! dt : pas de temps 643 644 REAL plev(ngrid,nlay+1) 645 REAL temp(ngrid,nlay) 646 REAL timestep 647 REAL gravity,rconst 648 REAL kstar(ngrid,nlay+1),zz 649 REAL kmy(ngrid,nlay+1) 650 REAL q2(ngrid,nlay+1) 651 REAL deltap(ngrid,nlay+1) 652 REAL denom(ngrid,nlay+1),alpha(ngrid,nlay+1),beta(ngrid,nlay+1) 653 INTEGER ngrid,nlay 654 655 INTEGER i,k 608 656 609 657 do k=1,nlay
Note: See TracChangeset
for help on using the changeset viewer.