Changeset 2817 for LMDZ5/trunk/libf
- Timestamp:
- Mar 7, 2017, 10:05:20 AM (8 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
LMDZ5/trunk/libf/phylmd/yamada4.F90
r2721 r2817 57 57 ! -> the model can run with longer time-steps. 58 58 ! 2016/11/30 (EV etienne.vignon@univ-grenoble-alpes.fr) 59 ! On met tke (=q2/2) en entr ée plutôt que q259 ! On met tke (=q2/2) en entr??e plut??t que q2 60 60 ! On corrige l'update de la tke 61 61 ! … … 130 130 REAL zz(klon, klev+1) 131 131 INTEGER iter 132 REAL dissip(klon,klev), tkeprov, shear(klon,klev), buoy(klon,klev) 132 133 REAL,SAVE :: ric0,ric,rifc, b1, kap 133 134 !$OMP THREADPRIVATE(ric0,ric,rifc,b1,kap) … … 138 139 !$OMP THREADPRIVATE(lmixmin) 139 140 LOGICAL, SAVE :: new_yamada4 140 !$OMP THREADPRIVATE(new_yamada4) 141 REAL, SAVE :: yun,ydeux 141 INTEGER, SAVE :: yamada4_num 142 !$OMP THREADPRIVATE(new_yamada4,yamada4_num) 143 REAL, SAVE :: yun,ydeux,b1leff 142 144 !$OMP THREADPRIVATE(yun,ydeux) 143 145 REAL frif, falpha, fsm … … 161 163 new_yamada4=.false. 162 164 CALL getin_p('new_yamada4',new_yamada4) 165 yamada4_num=0 166 CALL getin_p('yamada4_num',yamada4_num) 163 167 ! Pour garantir la continuite dans la mise au point de CMIP6. 164 168 ! Eliminer l'option new_yamada4 des le printemps 2016 … … 169 173 CALL getin_p('yamada4_ric',ric) 170 174 ric0=0.19489 ! ric=0.195 originalement, mais produisait sm<0 171 ric=min(ric,ric0) ! Au del à de ric0, sm devient négatif175 ric=min(ric,ric0) ! Au dela de ric0, sm devient n??gatif 172 176 rifc=frif(ric) 173 177 seuilsm=fsm(frif(ric)) … … 290 294 !======================================================================= 291 295 292 ! On commence par calcul é q2 àpartir de la tke296 ! On commence par calculer q2 a partir de la tke 293 297 294 298 IF (new_yamada4) THEN … … 400 404 ELSE IF (iflag_pbl>=10) THEN 401 405 406 IF (yamada4_num>=1) THEN 407 408 DO k = 2, klev - 1 409 DO ig=1,ngrid 410 q2(ig, k) = min(max(q2(ig,k),1.E-10), 1.E4) 411 km(ig, k) = l(ig, k)*sqrt(q2(ig,k))*sm(ig, k) 412 shear(ig,k)=km(ig, k)*m2(ig, k) 413 buoy(ig,k)=km(ig, k)*m2(ig, k)*(-1.*rif(ig,k)) 414 dissip(ig,k)=((sqrt(q2(ig,k)))**3)/(b1*l(ig,k)) 415 ENDDO 416 ENDDO 417 418 IF (yamada4_num==1) THEN ! Schema du MAR tel quel 419 DO k = 2, klev - 1 420 DO ig=1,ngrid 421 tkeprov=q2(ig,k)/ydeux 422 q2(ig,k)= tkeprov* & 423 & (tkeprov+dt*(shear(ig,k)+max(0.,buoy(ig,k))))/ & 424 & (tkeprov+dt*((-1.)*min(0.,buoy(ig,k))+dissip(ig,k))) 425 ENDDO 426 ENDDO 427 ELSE ! version modifiee avec integration exacte pour la dissipation 428 DO k = 2, klev - 1 429 DO ig=1,ngrid 430 tkeprov=q2(ig,k)/ydeux 431 q2(ig,k)= tkeprov+dt*(shear(ig,k)+max(0.,buoy(ig,k))) 432 ! En cas stable, on traite la flotabilite comme la 433 ! dissipation, en supposant que buoy/q2^3 est constant. 434 ! Puis on prend la solution exacte 435 b1leff=1./(1./(b1*l(ig,k))-min(0.,buoy(ig,k)/sqrt(q2(ig,k)))**3) 436 q2(1:ngrid, k) = 1./(1./sqrt(q2(1:ngrid,k))+dt/(yun*b1leff)) 437 ENDDO 438 ENDDO 439 ENDIF 440 441 DO k = 2, klev - 1 442 DO ig=1,ngrid 443 q2(ig,k)=q2(ig,k)*ydeux 444 q2(ig, k) = min(max(q2(ig,k),1.E-10), 1.E4) 445 ENDDO 446 ENDDO 447 448 ELSE 449 402 450 DO k = 2, klev - 1 403 451 km(1:ngrid, k) = l(1:ngrid, k)*sqrt(q2(1:ngrid,k))*sm(1:ngrid, k) … … 410 458 END DO 411 459 460 ENDIF 412 461 413 462 ELSE … … 575 624 576 625 !============================================================================ 577 ! Mise àjour de la tke626 ! Mise a jour de la tke 578 627 !============================================================================ 579 628
Note: See TracChangeset
for help on using the changeset viewer.