Changeset 2828
- Timestamp:
- Mar 20, 2017, 6:05:17 PM (8 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
LMDZ5/trunk/libf/phylmd/yamada4.F90
r2817 r2828 120 120 DATA first, ipas/.FALSE., 0/ 121 121 !$OMP THREADPRIVATE( first,ipas) 122 LOGICAL hboville 122 LOGICAL,SAVE :: hboville=.TRUE. 123 REAL,SAVE :: viscom,viscoh 124 !$OMP THREADPRIVATE( hboville,viscom,viscoh) 123 125 INTEGER ig, k 124 126 REAL ri, zrif, zalpha, zsm, zsn … … 130 132 REAL zz(klon, klev+1) 131 133 INTEGER iter 132 REAL dissip(klon,klev), tkeprov, shear(klon,klev), buoy(klon,klev)134 REAL dissip(klon,klev), tkeprov,tkeexp, shear(klon,klev), buoy(klon,klev) 133 135 REAL,SAVE :: ric0,ric,rifc, b1, kap 134 136 !$OMP THREADPRIVATE(ric0,ric,rifc,b1,kap) … … 141 143 INTEGER, SAVE :: yamada4_num 142 144 !$OMP THREADPRIVATE(new_yamada4,yamada4_num) 143 REAL, SAVE :: yun,ydeux, b1leff145 REAL, SAVE :: yun,ydeux,disseff 144 146 !$OMP THREADPRIVATE(yun,ydeux) 145 147 REAL frif, falpha, fsm … … 163 165 new_yamada4=.false. 164 166 CALL getin_p('new_yamada4',new_yamada4) 165 yamada4_num=0 166 CALL getin_p('yamada4_num',yamada4_num) 167 ! Pour garantir la continuite dans la mise au point de CMIP6. 168 ! Eliminer l'option new_yamada4 des le printemps 2016 167 169 168 IF (new_yamada4) THEN 169 ! Corrections et reglages issus du travail de these d'Etienne Vignon. 170 170 ric=0.143 ! qui donne des valeurs proches des seuils proposes 171 171 ! dans YAMADA 1983 : sm=0.0845 (0.085 dans Y83) … … 179 179 yun=1. 180 180 ydeux=2. 181 ! yun=2. 182 ! ydeux=1. 181 hboville=.FALSE. 182 viscom=1.46E-5 183 viscoh=2.06E-5 184 lmixmin=0. 185 yamada4_num=5 183 186 ELSE 184 !! DATA ric, rifc, b1, kap/0.195, 0.191, 16.6, 0.4/185 187 ric=0.195 186 188 rifc=0.191 … … 189 191 yun=2. 190 192 ydeux=1. 193 hboville=.TRUE. 194 viscom=0. 195 viscoh=0. 196 lmixmin=1. 197 yamada4_num=0 191 198 ENDIF 199 192 200 PRINT*,'YAMADA4 RIc, RIfc, Sm_min, Alpha_min',ric,rifc,seuilsm,seuilalpha 193 201 firstcall = .FALSE. 194 lmixmin=1.195 202 CALL getin_p('lmixmin',lmixmin) 203 CALL getin_p('yamada4_hboville',hboville) 204 CALL getin_p('yamada4_num',yamada4_num) 196 205 END IF 197 206 … … 203 212 204 213 ! On utilise ou non la routine de Holstalg Boville pour les cas tres stables 205 hboville=.TRUE.206 214 207 215 … … 420 428 DO ig=1,ngrid 421 429 tkeprov=q2(ig,k)/ydeux 422 q2(ig,k)= tkeprov* &430 tkeprov= tkeprov* & 423 431 & (tkeprov+dt*(shear(ig,k)+max(0.,buoy(ig,k))))/ & 424 432 & (tkeprov+dt*((-1.)*min(0.,buoy(ig,k))+dissip(ig,k))) 433 q2(ig,k)=tkeprov*ydeux 425 434 ENDDO 426 435 ENDDO 427 ELSE ! version modifiee avec integration exacte pour la dissipation436 ELSE IF (yamada4_num==2) THEN ! version modifiee avec integration exacte pour la dissipation 428 437 DO k = 2, klev - 1 429 438 DO ig=1,ngrid 430 439 tkeprov=q2(ig,k)/ydeux 431 q2(ig,k)= tkeprov+dt*(shear(ig,k)+max(0.,buoy(ig,k))) 440 disseff=dissip(ig,k)-min(0.,buoy(ig,k)) 441 tkeprov = tkeprov/(1.+dt*disseff/(2.*tkeprov))**2 442 tkeprov= tkeprov+dt*(shear(ig,k)+max(0.,buoy(ig,k))) 443 q2(ig,k)=tkeprov*ydeux 432 444 ! En cas stable, on traite la flotabilite comme la 433 445 ! dissipation, en supposant que buoy/q2^3 est constant. 434 446 ! 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)) 447 ENDDO 448 ENDDO 449 ELSE IF (yamada4_num==3) THEN ! version modifiee avec integration exacte pour la dissipation 450 DO k = 2, klev - 1 451 DO ig=1,ngrid 452 tkeprov=q2(ig,k)/ydeux 453 disseff=dissip(ig,k)-min(0.,buoy(ig,k)) 454 tkeprov=tkeprov*exp(-dt*disseff/tkeprov) 455 tkeprov= tkeprov+dt*(shear(ig,k)+max(0.,buoy(ig,k))) 456 q2(ig,k)=tkeprov*ydeux 457 ! En cas stable, on traite la flotabilite comme la 458 ! dissipation, en supposant que buoy/q2^3 est constant. 459 ! Puis on prend la solution exacte 460 ENDDO 461 ENDDO 462 ELSE IF (yamada4_num==4) THEN ! version modifiee avec integration exacte pour la dissipation 463 DO k = 2, klev - 1 464 DO ig=1,ngrid 465 tkeprov=q2(ig,k)/ydeux 466 tkeprov= tkeprov+dt*(shear(ig,k)+max(0.,buoy(ig,k))) 467 tkeprov= tkeprov* & 468 & tkeprov/ & 469 & (tkeprov+dt*((-1.)*min(0.,buoy(ig,k))+dissip(ig,k))) 470 q2(ig,k)=tkeprov*ydeux 471 ! En cas stable, on traite la flotabilite comme la 472 ! dissipation, en supposant que buoy/q2^3 est constant. 473 ! Puis on prend la solution exacte 474 ENDDO 475 ENDDO 476 ELSE IF (yamada4_num==5) THEN ! version modifiee avec integration exacte pour la dissipation 477 DO k = 2, klev - 1 478 DO ig=1,ngrid 479 tkeprov=q2(ig,k)/ydeux 480 disseff=dissip(ig,k)-min(0.,buoy(ig,k)) 481 tkeexp=exp(-dt*disseff/tkeprov) 482 tkeprov= shear(ig,k)*tkeprov/disseff*(1.-tkeexp)+tkeprov*tkeexp 483 q2(ig,k)=tkeprov*ydeux 484 ! En cas stable, on traite la flotabilite comme la 485 ! dissipation, en supposant que buoy/q2^3 est constant. 486 ! Puis on prend la solution exacte 487 ENDDO 488 ENDDO 489 ELSE IF (yamada4_num==6) THEN ! version modifiee avec integration exacte pour la dissipation 490 DO k = 2, klev - 1 491 DO ig=1,ngrid 492 tkeprov=q2(ig,k)/ydeux 493 tkeprov=tkeprov+max(buoy(ig,k)+shear(ig,k),0.)*dt 494 disseff=dissip(ig,k)-min(0.,buoy(ig,k)+shear(ig,k)) 495 tkeexp=exp(-dt*disseff/tkeprov) 496 tkeprov= tkeprov*tkeexp 497 q2(ig,k)=tkeprov*ydeux 498 ! En cas stable, on traite la flotabilite comme la 499 ! dissipation, en supposant que buoy/q2^3 est constant. 500 ! Puis on prend la solution exacte 437 501 ENDDO 438 502 ENDDO … … 441 505 DO k = 2, klev - 1 442 506 DO ig=1,ngrid 443 q2(ig,k)=q2(ig,k)*ydeux444 507 q2(ig, k) = min(max(q2(ig,k),1.E-10), 1.E4) 445 508 ENDDO … … 577 640 578 641 END IF ! hboville 642 643 ! Ajout d'une viscosite moleculaire 644 km(:,:)=km(:,:)+viscom 645 kn(:,:)=kn(:,:)+viscoh 646 kq(:,:)=kq(:,:)+viscoh 579 647 580 648 IF (prt_level>1) THEN
Note: See TracChangeset
for help on using the changeset viewer.