Changeset 3780 for LMDZ6/trunk/libf/phylmd/yamada4.F90
- Timestamp:
- Oct 22, 2020, 2:50:18 PM (4 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
LMDZ6/trunk/libf/phylmd/yamada4.F90
r3531 r3780 6 6 USE dimphy 7 7 USE ioipsl_getin_p_mod, ONLY : getin_p 8 8 USE phys_local_var_mod, only: tke_dissip 9 9 10 IMPLICIT NONE 10 11 include "iniprint.h" … … 56 57 ! iflag_pbl=11 -> the model starts with NP from start files created by ce0l 57 58 ! -> the model can run with longer time-steps. 58 ! 2016/11/30 (EV etienne.vignon@ univ-grenoble-alpes.fr)59 ! 2016/11/30 (EV etienne.vignon@lmd.ipsl.fr) 59 60 ! On met tke (=q2/2) en entr??e plut??t que q2 60 61 ! On corrige l'update de la tke 61 ! 62 ! 2020/10/01 (EV) 63 ! On ajoute la dissipation de la TKE en diagnostique de sortie 64 ! 62 65 ! Inpout/Output : 63 66 !============== … … 121 124 REAL,SAVE :: viscom,viscoh 122 125 !$OMP THREADPRIVATE( hboville,viscom,viscoh) 123 INTEGER ig, k126 INTEGER ig, jg, k 124 127 REAL ri, zrif, zalpha, zsm, zsn 125 128 REAL rif(klon, klev+1), sm(klon, klev+1), alpha(klon, klev) … … 416 419 ELSE IF (iflag_pbl>=10) THEN 417 420 421 shear(:,:)=0. 422 buoy(:,:)=0. 423 dissip(:,:)=0. 424 km(:,:)=0. 425 418 426 IF (yamada4_num>=1) THEN 419 427 … … 424 432 shear(ig,k)=km(ig, k)*m2(ig, k) 425 433 buoy(ig,k)=km(ig, k)*m2(ig, k)*(-1.*rif(ig,k)) 426 dissip(ig,k)= ((sqrt(q2(ig,k)))**3)/(b1*l(ig,k))434 dissip(ig,k)=min(max(((sqrt(q2(ig,k)))**3)/(b1*l(ig,k)),1.E-12),1.E4) 427 435 ENDDO 428 436 ENDDO 429 437 430 438 IF (yamada4_num==1) THEN ! Schema du MAR tel quel 431 439 DO k = 2, klev - 1 … … 478 486 ENDDO 479 487 ENDDO 488 489 !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! 490 !! Attention, yamada4_num=5 est inexacte car néglige les termes de flottabilité 491 !! en conditions instables 492 !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! 480 493 ELSE IF (yamada4_num==5) THEN ! version modifiee avec integration exacte pour la dissipation 481 494 DO k = 2, klev - 1 … … 507 520 DO k = 2, klev - 1 508 521 DO ig=1,ngrid 522 !tkeprov=q2(ig,k)/ydeux 523 !tkeprov=tkeprov+max(buoy(ig,k)+shear(ig,k),0.)*dt 524 !disseff=dissip(ig,k)-min(0.,buoy(ig,k)+shear(ig,k)) 525 !tkeexp=exp(-dt*disseff/tkeprov) 526 !tkeprov= tkeprov*tkeexp 527 !q2(ig,k)=tkeprov*ydeux 528 ! En cas stable, on traite la flotabilite comme la 529 ! dissipation, en supposant que dissipeff/TKE est constant. 530 ! Puis on prend la solution exacte 531 ! 532 ! With drag and dissipation from high vegetation (EV & FC, 05/10/2020) 533 winds(ig,k)=sqrt(u(ig,k)**2+v(ig,k)**2) 509 534 tkeprov=q2(ig,k)/ydeux 510 tkeprov=tkeprov+max(buoy(ig,k)+shear(ig,k) ,0.)*dt511 disseff=dissip(ig,k)-min(0.,buoy(ig,k)+shear(ig,k) )535 tkeprov=tkeprov+max(buoy(ig,k)+shear(ig,k)+drgpro(ig,k)*(winds(ig,k))**3,0.)*dt 536 disseff=dissip(ig,k)-min(0.,buoy(ig,k)+shear(ig,k)+drgpro(ig,k)*(winds(ig,k))**3) + drgpro(ig,k)*tkeprov 512 537 tkeexp=exp(-dt*disseff/tkeprov) 513 538 tkeprov= tkeprov*tkeexp 514 q2(ig,k)=tkeprov*ydeux 515 ! En cas stable, on traite la flotabilite comme la 516 ! dissipation, en supposant que buoy/q2^3 est constant. 517 ! Puis on prend la solution exacte 539 q2(ig,k)=tkeprov*ydeux 540 518 541 ENDDO 519 542 ENDDO … … 533 556 ! q2(1:ngrid, k) = q2(1:ngrid, k) + dt*km(1:ngrid, k)*m2(1:ngrid, k)*(1.-rif(1:ngrid,k)) 534 557 q2(1:ngrid, k) = min(max(q2(1:ngrid,k),1.E-10), 1.E4) 535 558 q2(1:ngrid, k) = 1./(1./sqrt(q2(1:ngrid,k))+dt/(yun*l(1:ngrid,k)*b1)) 536 559 ! q2(1:ngrid, k) = 1./(1./sqrt(q2(1:ngrid,k))+dt/(2*l(1:ngrid,k)*b1)) 537 560 q2(1:ngrid, k) = q2(1:ngrid, k)*q2(1:ngrid, k) … … 725 748 726 749 !============================================================================ 750 ! Diagnostique de la dissipation 751 !============================================================================ 752 753 ! Diagnostics 754 tke_dissip(1:ngrid,:,nsrf)=0. 755 DO k=2,klev 756 DO ig=1,ngrid 757 jg=ni(ig) 758 tke_dissip(jg,k,nsrf)=dissip(ig,k) 759 ENDDO 760 ENDDO 761 762 !============================================================================= 727 763 728 764 RETURN … … 1017 1053 !===================================================================== 1018 1054 1019 1055 l1(1:ngrid,:)=0. 1020 1056 IF (iflag_pbl==8 .OR. iflag_pbl==10) THEN 1021 1057 … … 1069 1105 l2(1:ngrid,:)=0.0 1070 1106 l_mixmin(1:ngrid,:,nsrf)=0. 1071 l_mix(1:ngrid,:,nsrf)= 0.1107 l_mix(1:ngrid,:,nsrf)=1.E-5 1072 1108 1073 1109 IF (nsrf .EQ. 1) THEN … … 1135 1171 1136 1172 1137 DO k= 2,klev1173 DO k=1,klev+1 1138 1174 DO ig=1,ngrid 1139 1175 lmix(ig,k)=MAX(MAX(l1(ig,k), l2(ig,k)),lmixmin) 1176 lmix(ig,k)=MAX(lmix(ig,k),1.E-5) 1140 1177 ENDDO 1141 1178 ENDDO … … 1143 1180 ! Diagnostics 1144 1181 1145 DO k=2,klev 1182 DO k=2,klev+1 1146 1183 DO ig=1,ngrid 1147 1184 jg=ni(ig)
Note: See TracChangeset
for help on using the changeset viewer.