Changeset 2106 for LMDZ5/trunk/libf/phylmd
- Timestamp:
- Aug 11, 2014, 10:56:54 AM (10 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
LMDZ5/trunk/libf/phylmd/thermcell_plume.F90
r2046 r2106 10 10 !thermcell_plume: calcule les valeurs de qt, thetal et w dans l ascendance 11 11 !-------------------------------------------------------------------------- 12 USE IOIPSL, ONLY : getin 12 13 13 14 IMPLICIT NONE … … 78 79 79 80 real zdz,zbuoy(ngrid,klev),zalpha,gamma(ngrid,klev),zdqt(ngrid,klev),zw2m 80 real zbuoyjam(ngrid,klev) 81 real zbuoyjam(ngrid,klev),zdqtjam(ngrid,klev) 81 82 real zbuoybis,zdz2,zdz3,lmel,entrbis,zdzbis 82 real fact_shell83 83 real ztv1,ztv2,factinv,zinv,zlmel 84 real zlmelup,zlmeldwn,zlt,zltdwn,zltup 85 real atv1,atv2,btv1,btv2 84 86 real ztv_est1,ztv_est2 85 87 real zcor,zdelta,zcvm5,qlbef 86 real betalpha,zbetalpha87 real eps , afact88 real zbetalpha 89 real eps 88 90 REAL REPS,RLvCp,DDT0 89 91 PARAMETER (DDT0=.01) 90 92 logical Zsat 91 93 LOGICAL active(ngrid),activetmp(ngrid) 92 REAL fact_gamma,fact_epsilon,fact_gamma2,fact_epsilon2 94 REAL fact_gamma,fact_gamma2,fact_epsilon2 95 96 REAL, SAVE :: fact_epsilon, fact_epsilon_omp=0.002 97 REAL, SAVE :: betalpha, betalpha_omp=0.9 98 REAL, SAVE :: afact, afact_omp=2./3. 99 REAL, SAVE :: fact_shell, fact_shell_omp=0.6 100 REAL,SAVE :: detr_min,detr_min_omp=1.e-4 101 REAL,SAVE :: entr_min,entr_min_omp=1.e-4 102 REAL,SAVE :: detr_q_coef,detr_q_coef_omp=0.012 103 REAL,SAVE :: detr_q_power,detr_q_power_omp=0.5 104 REAL,SAVE :: mix0,mix0_omp=0. 105 106 LOGICAL, SAVE :: first=.true. 107 93 108 REAL c2(ngrid,klev) 109 110 if (ngrid==1) print*,'THERMCELL PLUME MODIFIE 2014/07/11' 94 111 Zsat=.false. 95 112 ! Initialisation 96 113 97 114 RLvCp = RLVTT/RCPD 98 fact_epsilon=0.002 99 betalpha=0.9 100 afact=2./3. 101 fact_shell=0.85 115 IF (first) THEN 116 !$OMP MASTER 117 ! FH : if ok_sync=.true. , the time axis is written at each time step 118 ! in the output files. Only at the end in the opposite case 119 CALL getin('thermals_fact_epsilon',fact_epsilon_omp) 120 CALL getin('thermals_betalpha',betalpha_omp) 121 CALL getin('thermals_afact',afact_omp) 122 CALL getin('thermals_fact_shell',fact_shell_omp) 123 CALL getin('thermals_detr_min',detr_min_omp) 124 CALL getin('thermals_entr_min',entr_min_omp) 125 CALL getin('thermals_detr_q_coef',detr_q_coef_omp) 126 CALL getin('thermals_detr_q_power',detr_q_power_omp) 127 CALL getin('thermals_mix0',mix0_omp) 128 ! CALL getin('thermals_X',X_omp) 129 ! X=X_omp 130 !$OMP END MASTER 131 !$OMP BARRIER 132 fact_epsilon=fact_epsilon_omp 133 betalpha=betalpha_omp 134 afact=afact_omp 135 fact_shell=fact_shell_omp 136 detr_min=detr_min_omp 137 entr_min=entr_min_omp 138 detr_q_coef=detr_q_coef_omp 139 detr_q_power=detr_q_power_omp 140 mix0=mix0_omp 141 first=.false. 142 ENDIF 102 143 103 144 zbetalpha=betalpha/(1.+betalpha) … … 273 314 ! Nouvelle version Arnaud 274 315 else 275 w_est(ig,l+1)=Max(0.0001,(zdz/zdzbis)*(exp(-zw2fact)* & 276 & (zw2(ig,l)-zdw2)+zdw2)+(zdzbis-zdz)/zdzbis* & 277 & (exp(-zw2factbis)*(zw2(ig,l-1)-zdw2bis)+zdw2)) 316 ! w_est(ig,l+1)=Max(0.0001,(zdz/zdzbis)*(exp(-zw2fact)* & 317 ! & (zw2(ig,l)-zdw2)+zdw2)+(zdzbis-zdz)/zdzbis* & 318 ! & (exp(-zw2factbis)*(zw2(ig,l-1)-zdw2bis)+zdw2bis)) 319 320 w_est(ig,l+1)=Max(0.0001,(zw2(ig,l)+zdw2*zw2fact)*exp(-zw2fact)) 321 322 ! w_est(ig,l+1)=Max(0.0001,(zdz/zdzbis)*(zw2(ig,l)+zdw2*zw2fact)*exp(-zw2fact)+ & 323 ! & (zdzbis-zdz)/zdzbis*(zw2(ig,l-1)+zdw2bis*zw2factbis)*exp(-zw2factbis)) 324 ! w_est(ig,l+1)=Max(0.0001,exp(-zw2fact)*(w_est(ig,l)-zdw2bis)+zdw2) 325 278 326 endif 279 327 … … 288 336 zdw2=afact*zbuoy(ig,l)/fact_epsilon 289 337 zdw2bis=afact*zbuoy(ig,l-1)/fact_epsilon 290 w_est(ig,l+1)=Max(0.0001,(zdz/zdzbis)*(exp(-zw2fact)* & 291 & (zw2(ig,l)-zdw2)+zdw2)+(zdzbis-zdz)/zdzbis* & 292 & (exp(-zw2factbis)*(zw2(ig,l-1)-zdw2bis)+zdw2)) 338 w_est(ig,l+1)=Max(0.0001,(zw2(ig,l)+zdw2*zw2fact)*exp(-zw2fact)) 339 340 ! w_est(ig,l+1)=Max(0.0001,(zdz/zdzbis)*(exp(-zw2fact)* & 341 ! & (zw2(ig,l)-zdw2)+zdw2)+(zdzbis-zdz)/zdzbis* & 342 ! & (exp(-zw2factbis)*(zw2(ig,l-1)-zdw2bis)+zdw2)) 293 343 294 344 endif … … 296 346 !AJ052014: J'ai comment? ce if plus n?cessaire puisqu' 297 347 !on fait max(0.0001,.....) 298 !-------------------------------------------------- 348 !-------------------------------------------------- 299 349 300 350 ! if (w_est(ig,l+1).lt.0.) then … … 333 383 !Modif AJAM 334 384 335 lmel=fact_thermals_ed_dz*zlev(ig,l) 385 lmel=fact_thermals_ed_dz*zlev(ig,l) 386 ! lmel=0.09*zlev(ig,l) 336 387 zlmel=zlev(ig,l)+lmel 337 ! lmel=2.5*(zlev(ig,l)-zlev(ig,l-1)) 388 zlmelup=zlmel+(zdz/2) 389 zlmeldwn=zlmel-(zdz/2) 390 338 391 lt=l+1 339 zdz2=zlev(ig,lt)-zlev(ig,l) 392 zlt=zlev(ig,lt) 393 zdz3=zlev(ig,lt+1)-zlt 394 zltdwn=zlt-zdz3/2 395 zltup=zlt+zdz3/2 396 397 !========================================================================= 398 ! 3. Calcul de la flotabilite modifie par melange avec l'air au dessus 399 !========================================================================= 400 340 401 !-------------------------------------------------- 341 !AJ052014: J'ai remplac? la boucle do par un do while 402 if (iflag_thermals_ed.lt.8) then 403 !-------------------------------------------------- 404 !AJ052014: J'ai remplac?? la boucle do par un do while 342 405 ! afin de faire moins de calcul dans la boucle 343 406 !-------------------------------------------------- 344 do while (zdz2.lt.lmel)345 lt=lt+1346 zdz2=zlev(ig,lt)-zlev(ig,l)347 end do348 349 zdz3=zlev(ig,lt)-zlev(ig,lt-1)350 407 do while (zlmelup.gt.zltup) 408 lt=lt+1 409 zlt=zlev(ig,lt) 410 zdz3=zlev(ig,lt+1)-zlt 411 zltdwn=zlt-zdz3/2 412 zltup=zlt+zdz3/2 413 enddo 351 414 !-------------------------------------------------- 352 415 !AJ052014: Si iflag_thermals_ed<8 (par ex 6), alors 353 ! on cherche o? se trouve l'altitude d'inversion416 ! on cherche o?? se trouve l'altitude d'inversion 354 417 ! en calculant ztv1 (interpolation de la valeur de 355 418 ! theta au niveau lt en utilisant les niveaux lt-1 et 356 419 ! lt-2) et ztv2 (interpolation avec les niveaux lt+1 357 ! et lt+2). Si theta r? ellement calcul?e au niveau lt420 ! et lt+2). Si theta r??ellement calcul??e au niveau lt 358 421 ! comprise entre ztv1 et ztv2, alors il y a inversion 359 422 ! et on calcule son altitude zinv en supposant que ztv(lt) 360 ! est une combinaison lin ?aire de ztv1 et ztv2.361 ! Ensuite, on calcule la flottabilit ?en comparant362 ! la temp ?rature de la couche l ? celle de l'air situ?363 ! l+lmel plus haut, ce qui n ?cessite de savoir quel fraction423 ! est une combinaison lineaire de ztv1 et ztv2. 424 ! Ensuite, on calcule la flottabilite en comparant 425 ! la temperature de la couche l a celle de l'air situe 426 ! l+lmel plus haut, ce qui necessite de savoir quel fraction 364 427 ! de cet air est au-dessus ou en-dessous de l'inversion 365 428 !-------------------------------------------------- 366 367 368 if (iflag_thermals_ed.lt.8) then 369 370 ztv1=(ztv(ig,lt-1)-ztv(ig,lt-2))*zlev(ig,lt)/(zlev(ig,lt-1)-zlev(ig,lt-2)) & 371 & +(ztv(ig,lt-2)*zlev(ig,lt-1)-ztv(ig,lt-1)*zlev(ig,lt-2)) & 429 atv1=(ztv(ig,lt-1)-ztv(ig,lt-2))/(zlev(ig,lt-1)-zlev(ig,lt-2)) 430 btv1=(ztv(ig,lt-2)*zlev(ig,lt-1)-ztv(ig,lt-1)*zlev(ig,lt-2)) & 372 431 & /(zlev(ig,lt-1)-zlev(ig,lt-2)) 373 374 ztv2=(ztv(ig,lt+2)-ztv(ig,lt+1))*zlev(ig,lt)/(zlev(ig,lt+2)-zlev(ig,lt+1)) & 375 & +(ztv(ig,lt+1)*zlev(ig,lt+2)-ztv(ig,lt+2)*zlev(ig,lt+1)) & 432 atv2=(ztv(ig,lt+2)-ztv(ig,lt+1))/(zlev(ig,lt+2)-zlev(ig,lt+1)) 433 btv2=(ztv(ig,lt+1)*zlev(ig,lt+2)-ztv(ig,lt+2)*zlev(ig,lt+1)) & 376 434 & /(zlev(ig,lt+2)-zlev(ig,lt+1)) 377 435 378 if (ztv(ig,lt).gt.ztv1.and.ztv(ig,lt).lt.ztv2) then 379 380 factinv=(ztv2-ztv(ig,lt))/(ztv2-ztv1) 381 zinv=zlev(ig,lt-1)+factinv*(zlev(ig,lt)-zlev(ig,lt-1)) 382 383 if (zlmel+0.5*zdz.ge.zinv) then 384 if (zlmel-0.5*zdz.ge.zinv) then 385 386 ztv_est(ig,l)=(ztv(ig,lt+2)-ztv(ig,lt+1))*(zlmel-0.*zdz)/(zlev(ig,lt+2)-zlev(ig,lt+1)) & 387 & +(ztv(ig,lt+1)*zlev(ig,lt+2)-ztv(ig,lt+2)*zlev(ig,lt+1)) & 388 & /(zlev(ig,lt+2)-zlev(ig,lt+1)) 389 390 zbuoyjam(ig,l)=fact_shell*RG*(ztva_est(ig,l)-ztv_est(ig,l))/ztv_est(ig,l)+(1.-fact_shell)*zbuoy(ig,l) 391 392 else 393 394 ztv_est1=(ztv(ig,lt+2)-ztv(ig,lt+1))*0.5*(zlmel+zinv+0.5*zdz)/(zlev(ig,lt+2)-zlev(ig,lt+1)) & 395 & +(ztv(ig,lt+1)*zlev(ig,lt+2)-ztv(ig,lt+2)*zlev(ig,lt+1)) & 396 & /(zlev(ig,lt+2)-zlev(ig,lt+1)) 397 ztv_est2=(ztv(ig,lt-1)-ztv(ig,lt-2))*0.5*(zinv+zlmel-0.5*zdz)/(zlev(ig,lt-1)-zlev(ig,lt-2)) & 398 & +(ztv(ig,lt-2)*zlev(ig,lt-1)-ztv(ig,lt-1)*zlev(ig,lt-2)) & 399 & /(zlev(ig,lt-1)-zlev(ig,lt-2)) 400 zbuoyjam(ig,l)=fact_shell*RG*(((zlmel+0.5*zdz-zinv)/zdz)*(ztva_est(ig,l)- & 401 & ztv_est1)/ztv_est1+((zinv-zlmel+0.5*zdz)/zdz)*(ztva_est(ig,l)- & 402 & ztv_est2)/ztv_est2)+(1.-fact_shell)*zbuoy(ig,l) 403 404 endif 405 406 else 407 408 ztv_est(ig,l)=(ztv(ig,lt-1)-ztv(ig,lt-2))*(zlmel-0.*zdz)/(zlev(ig,lt-1)-zlev(ig,lt-2)) & 409 & +(ztv(ig,lt-2)*zlev(ig,lt-1)-ztv(ig,lt-1)*zlev(ig,lt-2)) & 410 & /(zlev(ig,lt-1)-zlev(ig,lt-2)) 411 412 zbuoyjam(ig,l)=fact_shell*RG*(ztva_est(ig,l)-ztv_est(ig,l))/ztv_est(ig,l)+(1.-fact_shell)*zbuoy(ig,l) 413 ! ztv_est1=(ztv(ig,lt+2)-ztv(ig,lt+1))*0.5*(zlmel+zinv+0.5*zdz)/(zlev(ig,lt+2)-zlev(ig,lt+1)) & 414 ! & +(ztv(ig,lt+1)*zlev(ig,lt+2)-ztv(ig,lt+2)*zlev(ig,lt+1)) & 415 ! & /(zlev(ig,lt+2)-zlev(ig,lt+1)) 416 ! ztv_est2=(ztv(ig,lt-1)-ztv(ig,lt-2))*0.5*(zinv+zlmel-0.5*zdz)/(zlev(ig,lt-1)-zlev(ig,lt-2)) & 417 ! & +(ztv(ig,lt-2)*zlev(ig,lt-1)-ztv(ig,lt-1)*zlev(ig,lt-2)) & 418 ! & /(zlev(ig,lt-1)-zlev(ig,lt-2)) 419 ! zbuoyjam(ig,l)=fact_shell*RG*(((zlmel+0.5*zdz-zinv)/zdz)*(ztva_est(ig,l)- & 420 ! & ztv_est1)/ztv_est1+((zinv-zlmel+0.5*zdz)/zdz)*(ztva_est(ig,l)- & 421 ! & ztv_est2)/ztv_est2)+(1.-fact_shell)*zbuoy(ig,l) 422 423 424 425 426 ! print*,'on est pass? par l?',l,lt,zbuoyjam(ig,l),zbuoy(ig,l) 427 endif 428 429 430 else 436 ztv1=atv1*zlt+btv1 437 ztv2=atv2*zlt+btv2 438 439 if (ztv(ig,lt).gt.ztv1.and.ztv(ig,lt).lt.ztv2) then 440 441 !-------------------------------------------------- 442 !AJ052014: D??calage de zinv qui est entre le haut 443 ! et le bas de la couche lt 444 !-------------------------------------------------- 445 factinv=(ztv2-ztv(ig,lt))/(ztv2-ztv1) 446 zinv=zltdwn+zdz3*factinv 447 431 448 432 ! ztv_est(ig,l)=(lmel/zdz2)*(ztv(ig,lt)-ztv(ig,l))+ztv(ig,l) 433 ! zbuoyjam(ig,l)=RG*(ztva_est(ig,l)-ztv_est(ig,l))/ztv_est(ig,l) 434 435 zbuoyjam(ig,l)=fact_shell*RG*(((lmel+zdz3-zdz2)/zdz3)*(ztva_est(ig,l)- & 436 & ztv(ig,lt))/ztv(ig,lt)+((zdz2-lmel)/zdz3)*(ztva_est(ig,l)- & 437 & ztv(ig,lt-1))/ztv(ig,lt-1))+(1.-fact_shell)*zbuoy(ig,l) 438 449 if (zlmeldwn.ge.zinv) then 450 ztv_est(ig,l)=atv2*zlmel+btv2 451 zbuoyjam(ig,l)=fact_shell*RG*(ztva_est(ig,l)-ztv_est(ig,l))/ztv_est(ig,l) & 452 & +(1.-fact_shell)*zbuoy(ig,l) 453 ! print*,'on est pass?? par l??1',l,lt,ztv1,ztv2,ztv(ig,lt),ztv_est(ig,l),ztva_est(ig,l),ztv(ig,l), & 454 ! & zinv,zlmelup,zbuoy(ig,l),zbuoyjam(ig,l) 455 elseif (zlmelup.ge.zinv) then 456 ztv_est2=atv2*0.5*(zlmelup+zinv)+btv2 457 ztv_est1=atv1*0.5*(zinv+zlmeldwn)+btv1 458 ztv_est(ig,l)=((zlmelup-zinv)/zdz)*ztv_est2+((zinv-zlmeldwn)/zdz)*ztv_est1 459 460 zbuoyjam(ig,l)=fact_shell*RG*(((zlmelup-zinv)/zdz)*(ztva_est(ig,l)- & 461 & ztv_est2)/ztv_est2+((zinv-zlmeldwn)/zdz)*(ztva_est(ig,l)- & 462 & ztv_est1)/ztv_est1)+(1.-fact_shell)*zbuoy(ig,l) 463 464 ! print*,'on est pass?? par l??2',l,lt,ztv_est1,ztv_est2,ztv(ig,lt),ztv_est(ig,l),ztva_est(ig,l),ztv(ig,l), & 465 ! & zinv,zlmelup,zbuoy(ig,l),zbuoyjam(ig,l) 466 else 467 ztv_est(ig,l)=atv1*zlmel+btv1 468 zbuoyjam(ig,l)=fact_shell*RG*(ztva_est(ig,l)-ztv_est(ig,l))/ztv_est(ig,l) & 469 & +(1.-fact_shell)*zbuoy(ig,l) 470 ! print*,'on est pass?? par l??3',l,lt,ztv1,ztv2,ztv(ig,lt),ztv_est(ig,l),ztva_est(ig,l),ztv(ig,l), & 471 ! & zinv,zlmelup,zbuoy(ig,l),zbuoyjam(ig,l) 472 endif 473 474 else ! if (ztv(ig,lt).gt.ztv1.and.ztv(ig,lt).lt.ztv2) then 475 476 if (zlmeldwn.gt.zltdwn) then 477 zbuoyjam(ig,l)=fact_shell*RG*((ztva_est(ig,l)- & 478 & ztv(ig,lt))/ztv(ig,lt))+(1.-fact_shell)*zbuoy(ig,l) 479 else 480 zbuoyjam(ig,l)=fact_shell*RG*(((zlmelup-zltdwn)/zdz)*(ztva_est(ig,l)- & 481 & ztv(ig,lt))/ztv(ig,lt)+((zltdwn-zlmeldwn)/zdz)*(ztva_est(ig,l)- & 482 & ztv(ig,lt-1))/ztv(ig,lt-1))+(1.-fact_shell)*zbuoy(ig,l) 483 484 endif 485 ! print*,'on est pass?? par l??4',l,lt,ztv1,ztv2,ztv(ig,lt),ztv(ig,l),ztva_est(ig,l), & 486 ! & zlmelup,zbuoy(ig,l),zbuoyjam(ig,l) 487 ! zbuoyjam(ig,l)=fact_shell*RG*(((zlmelup-zltdwn)/zdz)*(ztva_est(ig,l)- & 488 ! & ztv1)/ztv1+((zltdwn-zlmeldwn)/zdz)*(ztva_est(ig,l)- & 489 ! & ztv(ig,lt-1))/ztv(ig,lt-1))+(1.-fact_shell)*zbuoy(ig,l) 439 490 ! zdqt(ig,l)=Max(0.,((lmel+zdz3-zdz2)/zdz3)*(zqta(ig,l-1)- & 440 491 ! & po(ig,lt))/po(ig,lt)+((zdz2-lmel)/zdz3)*(zqta(ig,l-1)- & 441 492 ! & po(ig,lt-1))/po(ig,lt-1)) 442 443 endif 444 445 else 446 447 zbuoyjam(ig,l)=1.*RG*(((lmel+zdz3-zdz2)/zdz3)*(ztva_est(ig,l)- & 493 endif ! if (ztv(ig,lt).gt.ztv1.and.ztv(ig,lt).lt.ztv2) then 494 495 else ! if (iflag_thermals_ed.lt.8) then 496 lt=l+1 497 zdz2=zlev(ig,lt)-zlev(ig,l) 498 499 do while (lmel.gt.zdz2) 500 lt=lt+1 501 zlt=zlev(ig,lt) 502 zdz2=zlt-zlev(ig,l) 503 enddo 504 zdz3=zlev(ig,lt+1)-zlt 505 zltdwn=zlev(ig,lt)-zdz3/2 506 507 zbuoyjam(ig,l)=1.*RG*(((lmel+zdz3-zdz2)/zdz3)*(ztva_est(ig,l)- & 448 508 & ztv(ig,lt))/ztv(ig,lt)+((zdz2-lmel)/zdz3)*(ztva_est(ig,l)- & 449 509 & ztv(ig,lt-1))/ztv(ig,lt-1))+0.*zbuoy(ig,l) 450 451 endif 452 510 ! print*,'on est pass?? par l??',l,lt,ztv(ig,lt),ztva_est(ig,l),ztv(ig,l), & 511 ! & zbuoy(ig,l),zbuoyjam(ig,l) 512 endif ! if (iflag_thermals_ed.lt.8) then 453 513 454 514 ! zbuoyjam(ig,l)=RG*(ztva_est(ig,l)-ztv(ig,l))/ztv(ig,l) 515 516 !========================================================================= 517 ! 4. Calcul de l'entrainement et du detrainement 518 !========================================================================= 455 519 456 520 ! entr_star(ig,l)=f_star(ig,l)*zdz*zbetalpha*MAX(0., & 457 521 ! & afact*zbuoyjam(ig,l)/zw2m - fact_epsilon ) 458 459 522 ! entrbis=entr_star(ig,l) 460 523 461 524 if (iflag_thermals_ed.lt.6) then 462 525 fact_epsilon=0.0002/(zalpha+0.1) 463 endif 526 endif 527 528 ! if (zw2m.lt.1.) then 529 ! zbuoyjam(ig,l)=zbuoy(ig,l) 530 ! endif 531 532 464 533 465 534 detr_star(ig,l)=f_star(ig,l)*zdz & 466 & *MAX(1.e-4, -afact*zbetalpha*zbuoyjam(ig,l)/zw2m & 467 & + 0.012*(zdqt(ig,l)/zw2m)**0.5) 535 & *( mix0 * 0.1 / (zalpha+0.001) & 536 & + MAX(detr_min, -afact*zbetalpha*zbuoyjam(ig,l)/zw2m & 537 & + detr_q_coef*(zdqt(ig,l)/zw2m)**detr_q_power)) 468 538 469 539 zbuoy(ig,l)=RG*(ztva_est(ig,l)-ztv(ig,l))/ztv(ig,l) 470 540 471 entr_star(ig,l)=f_star(ig,l)*zdz*zbetalpha*MAX(0., & 472 & afact*zbuoy(ig,l)/zw2m - fact_epsilon) 541 entr_star(ig,l)=f_star(ig,l)*zdz* ( & 542 & mix0 * 0.1 / (zalpha+0.001) & 543 & + zbetalpha*MAX(entr_min, & 544 & afact*zbuoy(ig,l)/zw2m - fact_epsilon)) 473 545 474 546 ! entr_star(ig,l)=Max(0.,f_star(ig,l)*zdz*zbetalpha* & … … 487 559 ! endif 488 560 489 ! 561 ! print*,'alim0',zlev(ig,l),entr_star(ig,l),detr_star(ig,l),zw2m,zbuoy(ig,l),f_star(ig,l) 490 562 ! Calcul du flux montant normalise 491 563 f_star(ig,l+1)=f_star(ig,l)+alim_star(ig,l)+entr_star(ig,l) & … … 496 568 497 569 498 !---------------------------------------------------------------------------- 499 !calcul de la vitesse verticale en melangeant Tl et qt du thermique 500 !--------------------------------------------------------------------------- 570 !============================================================================ 571 ! 5. calcul de la vitesse verticale en melangeant Tl et qt du thermique 572 !=========================================================================== 573 501 574 activetmp(:)=active(:) .and. f_star(:,l+1)>1.e-10 502 575 do ig=1,ngrid … … 530 603 zdzbis=zlev(ig,l+1)-zlev(ig,l-1) 531 604 zeps(ig,l)=(entr_star(ig,l)+alim_star(ig,l))/(f_star(ig,l)*zdz) 532 605 !!!!!!! fact_epsilon=0.002 533 606 zw2fact=fact_epsilon*2.*zdz/(1.+betalpha) 534 607 zw2factbis=fact_epsilon*2.*zdzbis/(1.+betalpha) 535 608 zdw2= afact*zbuoy(ig,l)/(fact_epsilon) 536 609 zdw2bis= afact*zbuoy(ig,l-1)/(fact_epsilon) 537 ! zw2(ig,l+1)=Max(0.0001,exp(-zw2fact)*(zw2(ig,l)-zdw2)+zdw2) 538 zw2(ig,l+1)=Max(0.0001,(zdz/zdzbis)*(exp(-zw2fact)* & 539 & (zw2(ig,l)-zdw2)+zdw2)+(zdzbis-zdz)/zdzbis* & 540 & (exp(-zw2factbis)*(zw2(ig,l-1)-zdw2bis)+zdw2)) 541 542 if (iflag_thermals_ed.lt.6) then 610 ! zw2(ig,l+1)=Max(0.0001,exp(-zw2fact)*(zw2(ig,l)-zdw2bis)+zdw2) 611 ! zw2(ig,l+1)=Max(0.0001,(zdz/zdzbis)*(zw2(ig,l)+zdw2*zw2fact)*exp(-zw2fact)+ & 612 ! & (zdzbis-zdz)/zdzbis*(zw2(ig,l-1)+zdw2bis*zw2factbis)*exp(-zw2factbis)) 613 zw2(ig,l+1)=Max(0.0001,(zw2(ig,l)+zdw2*zw2fact)*exp(-zw2fact)) 614 ! zw2(ig,l+1)=Max(0.0001,(zdz/zdzbis)*(exp(-zw2fact)* & 615 ! & (zw2(ig,l)-zdw2)+zdw2)+(zdzbis-zdz)/zdzbis* & 616 ! & (exp(-zw2factbis)*(zw2(ig,l-1)-zdw2bis)+zdw2bis)) 617 618 if (iflag_thermals_ed.lt.6) then 543 619 zalpha=f0(ig)*f_star(ig,l)/sqrt(zw2(ig,l+1))/rhobarz(ig,l) 544 620 ! fact_epsilon=0.0005/(zalpha+0.025)**0.5 … … 550 626 zdw2bis= afact*zbuoy(ig,l-1)/(fact_epsilon) 551 627 552 zw2(ig,l+1)=Max(0.0001,(zdz/zdzbis)*(exp(-zw2fact)* & 553 & (zw2(ig,l)-zdw2)+zdw2)+(zdzbis-zdz)/zdzbis* & 554 & (exp(-zw2factbis)*(zw2(ig,l-1)-zdw2bis)+zdw2)) 555 556 endif 628 ! zw2(ig,l+1)=Max(0.0001,(zdz/zdzbis)*(exp(-zw2fact)* & 629 ! & (zw2(ig,l)-zdw2)+zdw2)+(zdzbis-zdz)/zdzbis* & 630 ! & (exp(-zw2factbis)*(zw2(ig,l-1)-zdw2bis)+zdw2)) 631 zw2(ig,l+1)=Max(0.0001,(zw2(ig,l)+zdw2*zw2fact)*exp(-zw2fact)) 632 633 endif 557 634 558 635 … … 562 639 if (prt_level.ge.20) print*,'coucou calcul detr 460: ig, l',ig, l 563 640 ! 564 ! ---------------------------------------------------------------------------565 ! initialisations pour le calcul de la hauteur du thermique, de l'inversion et de la vitesse verticale max566 ! ---------------------------------------------------------------------------641 !=========================================================================== 642 ! 6. initialisations pour le calcul de la hauteur du thermique, de l'inversion et de la vitesse verticale max 643 !=========================================================================== 567 644 568 645 nbpb=0 … … 1033 1110 & -zw2(ig,l))/(zw2(ig,l+1)-zw2(ig,l)) 1034 1111 zw2(ig,l+1)=0. 1112 elseif (f_star(ig,l+1).lt.0.) then 1113 linter(ig)=(l*(f_star(ig,l+1)-f_star(ig,l)) & 1114 & -f_star(ig,l))/(f_star(ig,l+1)-f_star(ig,l)) 1115 print*,"linter plume", linter(ig) 1116 zw2(ig,l+1)=0. 1035 1117 endif 1036 1118
Note: See TracChangeset
for help on using the changeset viewer.