Changeset 4661 for LMDZ6/branches/LMDZ_cdrag_LSCE/libf/phylmd
- Timestamp:
- Aug 31, 2023, 2:58:34 PM (17 months ago)
- Location:
- LMDZ6/branches/LMDZ_cdrag_LSCE/libf/phylmd
- Files:
-
- 9 added
- 7 edited
Legend:
- Unmodified
- Added
- Removed
-
LMDZ6/branches/LMDZ_cdrag_LSCE/libf/phylmd/cdrag_mod.F90
r4481 r4661 15 15 SUBROUTINE cdrag(knon, nsrf, & 16 16 speed, t1, q1, zgeop1, & 17 psol, tsurf, qsurf, z0m, z0h, &17 psol, pblh, tsurf, qsurf, z0m, z0h, & 18 18 ri_in, iri_in, & 19 cdm, cdh, zri, pref )19 cdm, cdh, zri, pref, prain, tsol , pat1) 20 20 21 21 USE dimphy … … 81 81 82 82 INTEGER, INTENT(IN) :: knon, nsrf ! nombre de points de grille sur l'horizontal + type de surface 83 REAL, DIMENSION(klon), INTENT(IN) :: speed ! module du vent au 1er niveau du modele84 REAL, DIMENSION(klon), INTENT(IN) :: zgeop1 ! geopotentiel au 1er niveau du modele85 REAL, DIMENSION(klon), INTENT(IN) :: tsurf ! Surface temperature (K)86 REAL, DIMENSION(klon), INTENT(IN) :: qsurf ! Surface humidity (Kg/Kg)87 REAL, DIMENSION(klon), INTENT(IN ):: z0m, z0h ! Rugosity at surface (m)83 REAL, DIMENSION(klon), INTENT(IN) :: speed ! module du vent au 1er niveau du modele 84 REAL, DIMENSION(klon), INTENT(IN) :: zgeop1 ! geopotentiel au 1er niveau du modele 85 REAL, DIMENSION(klon), INTENT(IN) :: tsurf ! Surface temperature (K) 86 REAL, DIMENSION(klon), INTENT(IN) :: qsurf ! Surface humidity (Kg/Kg) 87 REAL, DIMENSION(klon), INTENT(INOUT) :: z0m, z0h ! Rugosity at surface (m) 88 88 REAL, DIMENSION(klon), INTENT(IN) :: ri_in ! Input Richardson 1st layer for first guess calculations of screen var. 89 89 INTEGER, INTENT(IN) :: iri_in! iflag to activate cdrag calculation using ri1 90 REAL, DIMENSION(klon), INTENT(IN) :: t1 ! Temperature au premier niveau (K) 91 REAL, DIMENSION(klon), INTENT(IN) :: q1 ! humidite specifique au premier niveau (kg/kg) 92 REAL, DIMENSION(klon), INTENT(IN) :: psol ! pression au sol 90 REAL, DIMENSION(klon), INTENT(IN) :: t1 ! Temperature au premier niveau (K) 91 REAL, DIMENSION(klon), INTENT(IN) :: q1 ! humidite specifique au premier niveau (kg/kg) 92 REAL, DIMENSION(klon), INTENT(IN) :: psol ! pression au sol 93 94 !------------------ Rajout pour COARE (OT2018) -------------------- 95 REAL, DIMENSION(klon), INTENT(INOUT) :: pblh !hauteur de CL 96 REAL, DIMENSION(klon), INTENT(IN) :: prain !rapport au precipitation 97 REAL, DIMENSION(klon), INTENT(IN) :: tsol !SST imposé sur la surface oceanique 98 REAL, DIMENSION(klon), INTENT(IN) :: pat1 !pression premier lev 93 99 94 100 … … 99 105 REAL, DIMENSION(klon), INTENT(OUT) :: cdh ! Drag coefficient for heat flux 100 106 REAL, DIMENSION(klon), INTENT(OUT) :: zri ! Richardson number 101 REAL, DIMENSION(klon), INTENT( OUT) :: pref ! Pression au niveau zgeop/RG107 REAL, DIMENSION(klon), INTENT(INOUT) :: pref ! Pression au niveau zgeop/RG 102 108 103 109 ! Variables Locales … … 119 125 INTEGER ng_q1 ! Number of grids that q1 < 0.0 120 126 INTEGER ng_qsurf ! Number of grids that qsurf < 0.0 121 INTEGER i 127 INTEGER i, k 122 128 REAL zdu2, ztsolv 123 129 REAL ztvd, zscf … … 129 135 REAL, DIMENSION(klon) :: sm, prandtl ! Stability function from atke turbulence scheme 130 136 REAL ri0, ri1, cn ! to have dimensionless term in sm and prandtl 137 138 !------------------ Rajout (OT2018) -------------------- 139 !------------------ Rajout pour les appelles BULK (OT) -------------------- 140 REAL, DIMENSION(klon,2) :: rugos_itm 141 REAL, DIMENSION(klon,2) :: rugos_ith 142 REAL, PARAMETER :: tol_it_rugos=1.e-4 143 REAL, DIMENSION(3) :: coeffs 144 LOGICAL :: mixte 145 REAL :: z_0m 146 REAL :: z_0h 147 REAL, DIMENSION(klon) :: cdmm 148 REAL, DIMENSION(klon) :: cdhh 149 150 !--------- rajout pour verification -------------------- 151 152 REAL, DIMENSION(klon) :: zcdn_h2 153 154 155 !------------------RAJOUT POUR ECUME ------------------- 156 157 REAL, DIMENSION(klon) :: PQSAT 158 REAL, DIMENSION(klon) :: PSFTH 159 REAL, DIMENSION(klon) :: PFSTQ 160 REAL, DIMENSION(klon) :: PUSTAR 161 REAL, DIMENSION(klon) :: PCD ! Drag coefficient for momentum 162 REAL, DIMENSION(klon) :: PCDN ! Drag coefficient for momentum 163 REAL, DIMENSION(klon) :: PCH ! Drag coefficient for momentum 164 REAL, DIMENSION(klon) :: PCE ! Drag coefficient for momentum 165 REAL, DIMENSION(klon) :: PRI 166 REAL, DIMENSION(klon) :: PRESA 167 REAL, DIMENSION(klon) :: PSSS 168 169 LOGICAL :: OPRECIP 170 LOGICAL :: OPWEBB 171 LOGICAL :: OPERTFLUX 172 LOGICAL :: LPRECIP 173 LOGICAL :: LPWG 174 175 131 176 132 177 LOGICAL, SAVE :: firstcall = .TRUE. … … 219 264 ENDIF 220 265 266 !------------------ Rajout (OT2018) -------------------- 267 !--------- Rajout pour itération sur rugosité ---------------- 268 rugos_itm(:,2) = z0m 269 rugos_itm(:,1) = 3.*tol_it_rugos*z0m 270 271 rugos_ith(:,2) = z0h !cp nouveau rugos_it 272 rugos_ith(:,1) = 3.*tol_it_rugos*z0h 273 !-------------------------------------------------------------------- 274 221 275 !xxxxxxxxxxxxxxxxxxxxxxx 222 276 DO i = 1, knon ! Boucle sur l'horizontal … … 227 281 !*********************** 228 282 229 230 283 zdu2 = MAX(CEPDU2, speed(i)**2) 231 284 pref(i) = EXP(LOG(psol(i)) - zgeop1(i)/(RD*t1(i)* & 232 (1.+ RETV * max(q1(i),0.0)))) ! negative q1 set to zero285 (1.+ RETV * max(q1(i),0.0)))) ! negative q1 set to zero 233 286 ztsolv = tsurf(i) * (1.0+RETV*max(qsurf(i),0.0)) ! negative qsurf set to zero 234 ztvd = (t1(i)+zgeop1(i)/RCPD/(1.+RVTMP2* max(q1(i),0.0))) &287 ztvd = (t1(i)+zgeop1(i)/RCPD/(1.+RVTMP2*q1(i))) & 235 288 *(1.+RETV*max(q1(i),0.0)) ! negative q1 set to zero 236 zri(i) = zgeop1(i)*(ztvd-ztsolv)/(zdu2*ztvd) 289 290 !------------------ Rajout (OT2018) -------------------- 291 !-------------- ON DUPLIQUE POUR METTRE ITERATION SUR OCEAN ------------------------ 237 292 IF (iri_in.EQ.1) THEN 238 293 zri(i) = ri_in(i) 239 294 ENDIF 240 295 296 IF (nsrf == is_oce) THEN 297 298 !------------------ Pour Core 2 choix Core Pur ou Core Mixte -------------------- 299 IF ((choix_bulk > 1 .AND. choix_bulk < 4) .AND. (nsrf .eq. is_oce)) THEN 300 IF(choix_bulk .eq. 2) THEN 301 mixte = .false. 302 ELSE 303 mixte = .true. 304 ENDIF 305 call clc_core_cp ( sqrt(zdu2),t1(i)-tsurf(i),q1(i)-qsurf(i),t1(i),q1(i),& 306 zgeop1(i)/RG, zgeop1(i)/RG, zgeop1(i)/RG,& 307 psol(i),nit_bulk,mixte,& 308 coeffs,z_0m,z_0h) 309 cdmm(i) = coeffs(1) 310 cdhh(i) = coeffs(2) 311 cdm(i)=cdmm(i) 312 cdh(i)=cdhh(i) 313 write(*,*) "clc_core cd ch",cdmm(i),cdhh(i) 314 315 !------------------ Pour ECUME -------------------- 316 ELSE IF ((choix_bulk .eq. 4) .and. (nsrf .eq. is_oce)) THEN 317 OPRECIP = .false. 318 OPWEBB = .false. 319 OPERTFLUX = .false. 320 IF (nsrf .eq. is_oce) THEN 321 PSSS = 0.0 322 ENDIF 323 call ini_csts 324 call ecumev6_flux( z_0m,t1(i),tsurf(i),& 325 q1(i),qsurf(i),sqrt(zdu2),zgeop1(i)/RG,PSSS,zgeop1(i)/RG,& 326 psol(i),pat1(i), OPRECIP, OPWEBB,& 327 PSFTH,PFSTQ,PUSTAR,PCD,PCDN,& 328 PCH,PCE,PRI,PRESA,prain,& 329 z_0h,OPERTFLUX,coeffs) 330 331 cdmm(i) = coeffs(1) 332 cdhh(i) = coeffs(2) 333 cdm(i)=cdmm(i) 334 cdh(i)=cdhh(i) 335 336 write(*,*) "ecume cd ch",cdmm(i),cdhh(i) 337 338 !------------------ Pour COARE CNRM -------------------- 339 ELSE IF ((choix_bulk .eq. 5) .and. (nsrf .eq. is_oce)) THEN 340 LPRECIP = .false. 341 LPWG = .false. 342 call ini_csts 343 call coare30_flux_cnrm(z_0m,t1(i),tsurf(i), q1(i), & 344 sqrt(zdu2),zgeop1(i)/RG,zgeop1(i)/RG,psol(i),qsurf(i),PQSAT, & 345 PSFTH,PFSTQ,PUSTAR,PCD,PCDN,PCH,PCE,PRI, & 346 PRESA,prain,pat1(i),z_0h, LPRECIP, LPWG, coeffs) 347 cdmm(i) = coeffs(1) 348 cdhh(i) = coeffs(2) 349 cdm(i)=cdmm(i) 350 cdh(i)=cdhh(i) 351 write(*,*) "coare CNRM cd ch",cdmm(i),cdhh(i) 352 353 !------------------ Pour COARE Maison -------------------- 354 ELSE IF ((choix_bulk .eq. 1) .and. (nsrf .eq. is_oce)) THEN 355 IF ( pblh(i) .eq. 0. ) THEN 356 pblh(i) = 1500. 357 ENDIF 358 write(*,*) "debug size",size(coeffs) 359 call coare_cp(sqrt(zdu2),t1(i)-tsurf(i),q1(i)-qsurf(i),& 360 t1(i),q1(i),& 361 zgeop1(i)/RG,zgeop1(i)/RG,zgeop1(i)/RG,& 362 psol(i), pblh(i),& 363 nit_bulk,& 364 coeffs,z_0m,z_0h) 365 cdmm(i) = coeffs(1) 366 cdhh(i) = coeffs(3) 367 cdm(i)=cdmm(i) 368 cdh(i)=cdhh(i) 369 write(*,*) "coare cd ch",cdmm(i),cdhh(i) 370 ELSE 371 !------------------ Pour La param LMDZ (ocean) -------------------- 372 zri(i) = zgeop1(i)*(ztvd-ztsolv)/(zdu2*ztvd) 373 IF (iri_in.EQ.1) THEN 374 zri(i) = ri_in(i) 375 ENDIF 376 ENDIF 377 378 !----------------------- Rajout des itérations -------------- 379 DO k=1,nit_bulk 241 380 242 381 ! Coefficients CD neutres : k^2/ln(z/z0) et k^2/(ln(z/z0)*ln(z/z0h)): 243 382 !******************************************************************** 244 245 zzzcd=CKAP/LOG(1.+zgeop1(i)/(RG*z0m(i))) 246 cdmn(i) = zzzcd*zzzcd 247 cdhn(i) = zzzcd*(CKAP/LOG(1.+zgeop1(i)/(RG*z0h(i)))) 383 zzzcd=CKAP/LOG(1.+zgeop1(i)/(RG*rugos_itm(i,2))) 384 cdmn(i) = zzzcd*zzzcd 385 cdhn(i) = zzzcd*(CKAP/LOG(1.+zgeop1(i)/(RG*rugos_ith(i,2)))) 386 387 ! Calcul des fonctions de stabilite FMs, FHs, FMi, FHi : 388 !******************************************************* 389 IF (zri(i) .LT. 0.) THEN 390 SELECT CASE (iflag_corr_insta) 391 CASE (1) ! Louis 1979 + Mascart 1995 392 MU=LOG(MAX(z0m(i)/z0h(i),0.01)) 393 CMstar=6.8741+2.6933*MU-0.3601*(MU**2)+0.0154*(MU**3) 394 PM=0.5233-0.0815*MU+0.0135*(MU**2)-0.001*(MU**3) 395 CHstar=3.2165+4.3431*MU+0.536*(MU**2)-0.0781*(MU**3) 396 PH=0.5802-0.1571*MU+0.0327*(MU**2)-0.0026*(MU**3) 397 CH=CHstar*B*CKAP/LOG(z0m(i)+zgeop1(i)/(RG*z0m(i))) & 398 & * CKAPT/LOG(z0h(i)+zgeop1(i)/(RG*z0h(i))) & 399 & * ((zgeop1(i)/(RG*z0h(i)))**PH) 400 CM=CMstar*B*CKAP/LOG(z0m(i)+zgeop1(i)/(RG*z0m(i))) & 401 & *CKAP/LOG(z0m(i)+zgeop1(i)/(RG*z0m(i))) & 402 & * ((zgeop1(i)/(RG*z0m(i)))**PM) 403 FM(i)=1.-B*zri(i)/(1.+CM*SQRT(ABS(zri(i)))) 404 FH(i)=1.-B*zri(i)/(1.+CH*SQRT(ABS(zri(i)))) 405 CASE (2) ! Louis 1982 406 zucf = 1./(1.+3.0*CB*CC*cdmn(i)*SQRT(ABS(zri(i)) & 407 *(1.0+zgeop1(i)/(RG*z0m(i))))) 408 FM(i) = AMAX1((1.-2.0*CB*zri(i)*zucf),f_ri_cd_min) 409 FH(i) = AMAX1((1.-3.0*CB*zri(i)*zucf),f_ri_cd_min) 410 CASE (3) ! Laurent Li 411 FM(i) = MAX(SQRT(1.0-18.0*zri(i)),f_ri_cd_min) 412 FH(i) = MAX(SQRT(1.0-18.0*zri(i)),f_ri_cd_min) 413 CASE (6) ! Consistent with turbulence scheme (in stationary case) derived in atke (2023) 414 sm(i) = 2./rpi * (cinf - cn) * atan(-zri(i)/ri0) + cn 415 prandtl(i) = -2./rpi * (pr_asym - pr_neut) * atan(zri(i)/ri1) + pr_neut 416 FM(i) = MAX((sm(i)**(3/2) * sqrt(cepsilon) * (1 - zri(i) / prandtl(i))**(1/2)),f_ri_cd_min) 417 FH(i) = MAX((FM(i) / prandtl(i)), f_ri_cd_min) 418 CASE default ! Louis 1982 419 zucf = 1./(1.+3.0*CB*CC*cdmn(i)*SQRT(ABS(zri(i)) & 420 *(1.0+zgeop1(i)/(RG*z0m(i))))) 421 FM(i) = AMAX1((1.-2.0*CB*zri(i)*zucf),f_ri_cd_min) 422 FH(i) = AMAX1((1.-3.0*CB*zri(i)*zucf),f_ri_cd_min) 423 END SELECT 424 ! Calcul des drags 425 cdmm(i)=cdmn(i)*FM(i) 426 cdhh(i)=f_cdrag_ter*cdhn(i)*FH(i) 427 ! Traitement particulier des cas oceaniques 428 ! on applique Miller et al 1992 en l'absence de gustiness 429 IF (nsrf == is_oce) THEN 430 ! cdh(i)=f_cdrag_oce*cdhn(i)*FH(i) 431 IF (iflag_gusts==0) THEN 432 zcr = (0.0016/(cdmn(i)*SQRT(zdu2)))*ABS(ztvd-ztsolv)**(1./3.) 433 cdhh(i) =f_cdrag_oce* cdhn(i)*(1.0+zcr**1.25)**(1./1.25) 434 ENDIF 435 cdmm(i)=MIN(cdmm(i),cdmmax) 436 cdhh(i)=MIN(cdhh(i),cdhmax) 437 write(*,*) "LMDZ cd ch",cdmm(i),cdhh(i) 438 END IF 439 ELSE 440 441 !''''''''''''''' 442 ! Cas stables : 443 !''''''''''''''' 444 zri(i) = MIN(20.,zri(i)) 445 SELECT CASE (iflag_corr_sta) 446 CASE (1) ! Louis 1979 + Mascart 1995 447 FM(i)=MAX(1./((1+BPRIME*zri(i))**2),f_ri_cd_min) 448 FH(i)=FM(i) 449 CASE (2) ! Louis 1982 450 zscf = SQRT(1.+CD*ABS(zri(i))) 451 FM(i)= AMAX1(1. / (1.+2.*CB*zri(i)/zscf), f_ri_cd_min) 452 FH(i)= AMAX1(1./ (1.+3.*CB*zri(i)*zscf), f_ri_cd_min ) 453 CASE (3) ! Laurent Li 454 FM(i)=MAX(1.0 / (1.0+10.0*zri(i)*(1+8.0*zri(i))),f_ri_cd_min) 455 FH(i)=FM(i) 456 CASE (4) ! King 2001 457 IF (zri(i) .LT. C2/2.) THEN 458 FM(i)=MAX((1.-zri(i)/C2)**2,f_ri_cd_min) 459 FH(i)= FM(i) 460 ELSE 461 FM(i)=MAX(C3*((C2/zri(i))**2),f_ri_cd_min) 462 FH(i)= FM(i) 463 ENDIF 464 CASE (5) ! MO 465 if (zri(i) .LT. 1./alpha) then 466 FM(i)=MAX((1.-alpha*zri(i))**2,f_ri_cd_min) 467 FH(i)=FM(i) 468 else 469 FM(i)=MAX(1E-7,f_ri_cd_min) 470 FH(i)=FM(i) 471 endif 472 CASE (6) ! Consistent with turbulence scheme (in stationary case) derived in atke (2023) 473 sm(i) = MAX(0.,cn*(1.-zri(i)/ric)) 474 prandtl(i) = pr_neut + zri(i) * pr_slope 475 FM(i) = MAX((sm(i)**(3/2) * sqrt(cepsilon) * (1 - zri(i) / prandtl(i))**(1/2)),f_ri_cd_min) 476 FH(i) = MAX((FM(i) / prandtl(i)), f_ri_cd_min) 477 CASE default ! Louis 1982 478 zscf = SQRT(1.+CD*ABS(zri(i))) 479 FM(i)= AMAX1(1. / (1.+2.*CB*zri(i)/zscf), f_ri_cd_min) 480 FH(i)= AMAX1(1./ (1.+3.*CB*zri(i)*zscf), f_ri_cd_min ) 481 END SELECT 482 ! Calcul des drags 483 cdmm(i)=cdmn(i)*FM(i) 484 cdhh(i)=f_cdrag_ter*cdhn(i)*FH(i) 485 IF (nsrf.EQ.is_oce) THEN 486 cdhh(i)=f_cdrag_oce*cdhn(i)*FH(i) 487 cdmm(i)=MIN(cdm(i),cdmmax) 488 cdhh(i)=MIN(cdh(i),cdhmax) 489 ENDIF 490 rugos_itm(i,1) = rugos_itm(i,2) 491 rugos_ith(i,1) = rugos_ith(i,2) 492 rugos_itm(i,2) = 0.018*cdmm(i) * (speed(i))/RG & 493 + 0.11*14e-6 / SQRT(cdmm(i) * zdu2) 494 495 !---------- Version SEPARATION DES Z0 ---------------------- 496 IF (iflag_z0_oce==0) THEN 497 rugos_ith(i,2) = rugos_itm(i,2) 498 ELSE IF (iflag_z0_oce==1) THEN 499 rugos_ith(i,2) = 0.40*14e-6 / SQRT(cdmm(i) * zdu2) 500 ENDIF 501 ENDIF 502 rugos_itm(i,2) = MAX(1.5e-05,rugos_itm(i,2)) 503 rugos_ith(i,2) = MAX(1.5e-05,rugos_ith(i,2)) 504 ENDDO 505 IF (nsrf.EQ.is_oce) THEN 506 cdm(i)=MIN(cdmm(i),cdmmax) 507 cdh(i)=MIN(cdhh(i),cdhmax) 508 ENDIF 509 z0m = rugos_itm(:,2) 510 z0h = rugos_ith(:,2) 511 ELSE ! (nsrf == is_oce) 512 zri(i) = zgeop1(i)*(ztvd-ztsolv)/(zdu2*ztvd) 513 IF (iri_in.EQ.1) THEN 514 zri(i) = ri_in(i) 515 ENDIF 516 517 ! Coefficients CD neutres : k^2/ln(z/z0) et k^2/(ln(z/z0)*ln(z/z0h)): 518 !******************************************************************** 519 zzzcd=CKAP/LOG(1.+zgeop1(i)/(RG*z0m(i))) 520 cdmn(i) = zzzcd*zzzcd 521 cdhn(i) = zzzcd*(CKAP/LOG(1.+zgeop1(i)/(RG*z0h(i)))) 248 522 249 523 250 524 ! Calcul des fonctions de stabilit?? FMs, FHs, FMi, FHi : 251 525 !******************************************************* 252 253 254 255 526 !'''''''''''''' 256 527 ! Cas instables 257 528 !'''''''''''''' 258 259 IF (zri(i) .LT. 0.) THEN 260 261 262 SELECT CASE (iflag_corr_insta) 263 264 CASE (1) ! Louis 1979 + Mascart 1995 265 266 MU=LOG(MAX(z0m(i)/z0h(i),0.01)) 267 CMstar=6.8741+2.6933*MU-0.3601*(MU**2)+0.0154*(MU**3) 268 PM=0.5233-0.0815*MU+0.0135*(MU**2)-0.001*(MU**3) 269 CHstar=3.2165+4.3431*MU+0.536*(MU**2)-0.0781*(MU**3) 270 PH=0.5802-0.1571*MU+0.0327*(MU**2)-0.0026*(MU**3) 271 CH=CHstar*B*CKAP/LOG(z0m(i)+zgeop1(i)/(RG*z0m(i))) & 272 & * CKAPT/LOG(z0h(i)+zgeop1(i)/(RG*z0h(i))) & 273 & * ((zgeop1(i)/(RG*z0h(i)))**PH) 274 CM=CMstar*B*CKAP/LOG(z0m(i)+zgeop1(i)/(RG*z0m(i))) & 275 & *CKAP/LOG(z0m(i)+zgeop1(i)/(RG*z0m(i))) & 276 & * ((zgeop1(i)/(RG*z0m(i)))**PM) 277 278 279 280 281 FM(i)=1.-B*zri(i)/(1.+CM*SQRT(ABS(zri(i)))) 282 FH(i)=1.-B*zri(i)/(1.+CH*SQRT(ABS(zri(i)))) 283 284 CASE (2) ! Louis 1982 285 286 zucf = 1./(1.+3.0*CB*CC*cdmn(i)*SQRT(ABS(zri(i)) & 287 *(1.0+zgeop1(i)/(RG*z0m(i))))) 288 FM(i) = AMAX1((1.-2.0*CB*zri(i)*zucf),f_ri_cd_min) 289 FH(i) = AMAX1((1.-3.0*CB*zri(i)*zucf),f_ri_cd_min) 290 291 292 CASE (3) ! Laurent Li 293 294 295 FM(i) = MAX(SQRT(1.0-18.0*zri(i)),f_ri_cd_min) 296 FH(i) = MAX(SQRT(1.0-18.0*zri(i)),f_ri_cd_min) 297 298 CASE (6) ! Consistent with turbulence scheme (in stationary case) derived in atke (2023) 299 300 sm(i) = 2./rpi * (cinf - cn) * atan(-zri(i)/ri0) + cn 301 prandtl(i) = -2./rpi * (pr_asym - pr_neut) * atan(zri(i)/ri1) + pr_neut 302 FM(i) = MAX((sm(i)**(3/2) * sqrt(cepsilon) * (1 - zri(i) / prandtl(i))**(1/2)),f_ri_cd_min) 303 FH(i) = MAX((FM(i) / prandtl(i)), f_ri_cd_min) 304 305 CASE default ! Louis 1982 306 307 zucf = 1./(1.+3.0*CB*CC*cdmn(i)*SQRT(ABS(zri(i)) & 308 *(1.0+zgeop1(i)/(RG*z0m(i))))) 309 FM(i) = AMAX1((1.-2.0*CB*zri(i)*zucf),f_ri_cd_min) 310 FH(i) = AMAX1((1.-3.0*CB*zri(i)*zucf),f_ri_cd_min) 311 312 529 IF (zri(i) .LT. 0.) THEN 530 SELECT CASE (iflag_corr_insta) 531 CASE (1) ! Louis 1979 + Mascart 1995 532 MU=LOG(MAX(z0m(i)/z0h(i),0.01)) 533 CMstar=6.8741+2.6933*MU-0.3601*(MU**2)+0.0154*(MU**3) 534 PM=0.5233-0.0815*MU+0.0135*(MU**2)-0.001*(MU**3) 535 CHstar=3.2165+4.3431*MU+0.536*(MU**2)-0.0781*(MU**3) 536 PH=0.5802-0.1571*MU+0.0327*(MU**2)-0.0026*(MU**3) 537 CH=CHstar*B*CKAP/LOG(z0m(i)+zgeop1(i)/(RG*z0m(i))) & 538 & * CKAPT/LOG(z0h(i)+zgeop1(i)/(RG*z0h(i))) & 539 & * ((zgeop1(i)/(RG*z0h(i)))**PH) 540 CM=CMstar*B*CKAP/LOG(z0m(i)+zgeop1(i)/(RG*z0m(i))) & 541 & *CKAP/LOG(z0m(i)+zgeop1(i)/(RG*z0m(i))) & 542 & * ((zgeop1(i)/(RG*z0m(i)))**PM) 543 FM(i)=1.-B*zri(i)/(1.+CM*SQRT(ABS(zri(i)))) 544 FH(i)=1.-B*zri(i)/(1.+CH*SQRT(ABS(zri(i)))) 545 CASE (2) ! Louis 1982 546 zucf = 1./(1.+3.0*CB*CC*cdmn(i)*SQRT(ABS(zri(i)) & 547 *(1.0+zgeop1(i)/(RG*z0m(i))))) 548 FM(i) = AMAX1((1.-2.0*CB*zri(i)*zucf),f_ri_cd_min) 549 FH(i) = AMAX1((1.-3.0*CB*zri(i)*zucf),f_ri_cd_min) 550 CASE (3) ! Laurent Li 551 FM(i) = MAX(SQRT(1.0-18.0*zri(i)),f_ri_cd_min) 552 FH(i) = MAX(SQRT(1.0-18.0*zri(i)),f_ri_cd_min) 553 CASE (6) ! Consistent with turbulence scheme (in stationary case) derived in atke (2023) 554 sm(i) = 2./rpi * (cinf - cn) * atan(-zri(i)/ri0) + cn 555 prandtl(i) = -2./rpi * (pr_asym - pr_neut) * atan(zri(i)/ri1) + pr_neut 556 FM(i) = MAX((sm(i)**(3/2) * sqrt(cepsilon) * (1 - zri(i) / prandtl(i))**(1/2)),f_ri_cd_min) 557 FH(i) = MAX((FM(i) / prandtl(i)), f_ri_cd_min) 558 CASE default ! Louis 1982 559 zucf = 1./(1.+3.0*CB*CC*cdmn(i)*SQRT(ABS(zri(i)) & 560 *(1.0+zgeop1(i)/(RG*z0m(i))))) 561 FM(i) = AMAX1((1.-2.0*CB*zri(i)*zucf),f_ri_cd_min) 562 FH(i) = AMAX1((1.-3.0*CB*zri(i)*zucf),f_ri_cd_min) 313 563 END SELECT 314 315 316 317 564 ! Calcul des drags 318 319 320 cdm(i)=cdmn(i)*FM(i) 321 cdh(i)=f_cdrag_ter*cdhn(i)*FH(i) 322 323 324 ! Traitement particulier des cas oceaniques 325 ! on applique Miller et al 1992 en l'absence de gustiness 326 327 IF (nsrf == is_oce) THEN 328 ! cdh(i)=f_cdrag_oce*cdhn(i)*FH(i) 329 330 IF(iflag_gusts==0) THEN 331 zcr = (0.0016/(cdmn(i)*SQRT(zdu2)))*ABS(ztvd-ztsolv)**(1./3.) 332 cdh(i) =f_cdrag_oce* cdhn(i)*(1.0+zcr**1.25)**(1./1.25) 333 ENDIF 334 335 336 cdm(i)=MIN(cdm(i),cdmmax) 337 cdh(i)=MIN(cdh(i),cdhmax) 338 339 END IF 340 341 342 343 ELSE 344 565 cdm(i)=cdmn(i)*FM(i) 566 cdh(i)=f_cdrag_ter*cdhn(i)*FH(i) 567 ELSE 345 568 !''''''''''''''' 346 569 ! Cas stables : 347 570 !''''''''''''''' 348 zri(i) = MIN(20.,zri(i)) 349 350 SELECT CASE (iflag_corr_sta) 351 352 CASE (1) ! Louis 1979 + Mascart 1995 353 354 FM(i)=MAX(1./((1+BPRIME*zri(i))**2),f_ri_cd_min) 355 FH(i)=FM(i) 356 357 358 CASE (2) ! Louis 1982 359 360 zscf = SQRT(1.+CD*ABS(zri(i))) 361 FM(i)= AMAX1(1. / (1.+2.*CB*zri(i)/zscf), f_ri_cd_min) 362 FH(i)= AMAX1(1./ (1.+3.*CB*zri(i)*zscf), f_ri_cd_min ) 363 364 365 CASE (3) ! Laurent Li 366 367 FM(i)=MAX(1.0 / (1.0+10.0*zri(i)*(1+8.0*zri(i))),f_ri_cd_min) 368 FH(i)=FM(i) 369 370 371 CASE (4) ! King 2001 372 373 if (zri(i) .LT. C2/2.) then 374 FM(i)=MAX((1.-zri(i)/C2)**2,f_ri_cd_min) 375 FH(i)= FM(i) 376 377 378 else 379 FM(i)=MAX(C3*((C2/zri(i))**2),f_ri_cd_min) 380 FH(i)= FM(i) 381 endif 382 383 384 CASE (5) ! MO 385 386 if (zri(i) .LT. 1./alpha) then 387 388 FM(i)=MAX((1.-alpha*zri(i))**2,f_ri_cd_min) 389 FH(i)=FM(i) 390 391 else 392 393 394 FM(i)=MAX(1E-7,f_ri_cd_min) 395 FH(i)=FM(i) 396 397 endif 398 399 CASE (6) ! Consistent with turbulence scheme (in stationary case) derived in atke (2023) 400 sm(i) = MAX(0.,cn*(1.-zri(i)/ric)) 401 prandtl(i) = pr_neut + zri(i) * pr_slope 402 FM(i) = MAX((sm(i)**(3/2) * sqrt(cepsilon) * (1 - zri(i) / prandtl(i))**(1/2)),f_ri_cd_min) 403 FH(i) = MAX((FM(i) / prandtl(i)), f_ri_cd_min) 404 405 CASE default ! Louis 1982 406 407 zscf = SQRT(1.+CD*ABS(zri(i))) 408 FM(i)= AMAX1(1. / (1.+2.*CB*zri(i)/zscf), f_ri_cd_min) 409 FH(i)= AMAX1(1./ (1.+3.*CB*zri(i)*zscf), f_ri_cd_min ) 410 411 412 413 END SELECT 414 571 zri(i) = MIN(20.,zri(i)) 572 SELECT CASE (iflag_corr_sta) 573 CASE (1) ! Louis 1979 + Mascart 1995 574 FM(i)=MAX(1./((1+BPRIME*zri(i))**2),f_ri_cd_min) 575 FH(i)=FM(i) 576 CASE (2) ! Louis 1982 577 zscf = SQRT(1.+CD*ABS(zri(i))) 578 FM(i)= AMAX1(1. / (1.+2.*CB*zri(i)/zscf), f_ri_cd_min) 579 FH(i)= AMAX1(1./ (1.+3.*CB*zri(i)*zscf), f_ri_cd_min ) 580 CASE (3) ! Laurent Li 581 FM(i)=MAX(1.0 / (1.0+10.0*zri(i)*(1+8.0*zri(i))),f_ri_cd_min) 582 FH(i)=FM(i) 583 CASE (4) ! King 2001 584 if (zri(i) .LT. C2/2.) then 585 FM(i)=MAX((1.-zri(i)/C2)**2,f_ri_cd_min) 586 FH(i)= FM(i) 587 else 588 FM(i)=MAX(C3*((C2/zri(i))**2),f_ri_cd_min) 589 FH(i)= FM(i) 590 endif 591 CASE (5) ! MO 592 if (zri(i) .LT. 1./alpha) then 593 FM(i)=MAX((1.-alpha*zri(i))**2,f_ri_cd_min) 594 FH(i)=FM(i) 595 else 596 FM(i)=MAX(1E-7,f_ri_cd_min) 597 FH(i)=FM(i) 598 endif 599 CASE (6) ! Consistent with turbulence scheme (in stationary case) derived in atke (2023) 600 sm(i) = MAX(0.,cn*(1.-zri(i)/ric)) 601 prandtl(i) = pr_neut + zri(i) * pr_slope 602 FM(i) = MAX((sm(i)**(3/2) * sqrt(cepsilon) * (1 - zri(i) / prandtl(i))**(1/2)),f_ri_cd_min) 603 FH(i) = MAX((FM(i) / prandtl(i)), f_ri_cd_min) 604 CASE default ! Louis 1982 605 zscf = SQRT(1.+CD*ABS(zri(i))) 606 FM(i)= AMAX1(1. / (1.+2.*CB*zri(i)/zscf), f_ri_cd_min) 607 FH(i)= AMAX1(1./ (1.+3.*CB*zri(i)*zscf), f_ri_cd_min ) 608 END SELECT 415 609 ! Calcul des drags 416 417 418 cdm(i)=cdmn(i)*FM(i) 419 cdh(i)=f_cdrag_ter*cdhn(i)*FH(i) 420 421 IF(nsrf.EQ.is_oce) THEN 422 423 cdh(i)=f_cdrag_oce*cdhn(i)*FH(i) 424 cdm(i)=MIN(cdm(i),cdmmax) 425 cdh(i)=MIN(cdh(i),cdhmax) 426 427 ENDIF 428 429 430 ENDIF 431 432 !xxxxxxxxxxx 610 cdm(i)=cdmn(i)*FM(i) 611 cdh(i)=f_cdrag_ter*cdhn(i)*FH(i) 612 ENDIF 613 ENDIF ! fin du if (nsrf == is_oce) 433 614 END DO ! Fin de la boucle sur l'horizontal 434 !xxxxxxxxxxx435 ! ================================================================= c436 615 437 616 END SUBROUTINE cdrag -
LMDZ6/branches/LMDZ_cdrag_LSCE/libf/phylmd/clesphys.h
r4458 r4661 42 42 !IM seuils cdrm, cdrh 43 43 REAL cdmmax, cdhmax 44 !IM pour les params différentes Olivier Torres 45 INTEGER choix_bulk, nit_bulk, kz0 44 46 !IM param. stabilite s/ terres et en dehors 45 47 REAL ksta, ksta_ter, f_ri_cd_min … … 105 107 COMMON/clesphys/ & 106 108 ! REAL FIRST 109 ! rajout choix_bulk et nit_bulk kz0 par Olivier Torres 107 110 & co2_ppm, solaire & 108 111 & , RCO2, RCH4, RN2O, RCFC11, RCFC12 & … … 132 135 & , ok_orodr, ok_orolf, ok_limitvrai, nbapp_rad & 133 136 & , iflag_con, nbapp_cv, nbapp_wk & 137 & , choix_bulk, nit_bulk, kz0 & 134 138 & , iflag_ener_conserv & 135 139 & , ok_suntime_rrtm & -
LMDZ6/branches/LMDZ_cdrag_LSCE/libf/phylmd/conf_phys_m.F90
r4466 r4661 255 255 LOGICAL, SAVE :: ok_new_lscp_omp 256 256 LOGICAL, SAVE :: ok_icefra_lscp_omp 257 !rajout de choix_bulk et nit_bulk par Olivier Torres 258 INTEGER,SAVE :: choix_bulk_omp 259 INTEGER,SAVE :: nit_bulk_omp 260 INTEGER,SAVE :: kz0_omp 257 261 258 262 … … 947 951 nbapp_rad_omp = 12 948 952 CALL getin('nbapp_rad',nbapp_rad_omp) 953 954 !rajout Olivier Torres 955 !Config Key = choix_bulk 956 !Config Desc = choix de la formulation bulk a prendre dans clcdrag au-dessus de l'ocean 957 !Config Def = 0 958 !Config 0 -> originale (lmdz/Louis 79) 959 !Config 1 -> COARE 960 !Config 2 -> CORE-"pure" (cf. Large) 961 !Config 3 -> CORE-"mixte" (avec z_0 et C_T^N donnees par Smith 88) 962 choix_bulk_omp = 0 963 CALL getin('choix_bulk',choix_bulk_omp) 964 965 !Config Key = nit_bulk 966 !Config Desc = choix du nombre d'it de pt fixe dans la bulk 967 !Config Def = 5 968 nit_bulk_omp = 1 969 CALL getin('nit_bulk',nit_bulk_omp) 970 971 !Config Key = kz0 972 !Config Desc = choix de la formulation z0 pour la bulk ECUME 973 !Config Def = 1 974 !Config 0 -> ARPEGE formulation 975 !Config 1 -> Smith Formulation 976 !Config 2 -> Direct computation using the stability functions 977 kz0_omp = 0 978 CALL getin('kz0',kz0_omp) 979 949 980 950 981 !Config Key = iflag_con … … 2692 2723 read_fco2_land_cor = read_fco2_land_cor_omp 2693 2724 var_fco2_land_cor = var_fco2_land_cor_omp 2725 !rajout Olivier Torres 2726 kz0=kz0_omp 2727 choix_bulk = choix_bulk_omp 2728 nit_bulk = nit_bulk_omp 2694 2729 2695 2730 ! Test of coherence between type_ocean and version_ocean … … 3056 3091 WRITE(lunout,*) ' buf_sph_pol = ', buf_sph_pol 3057 3092 WRITE(lunout,*) ' buf_siz_pol= ', buf_siz_pol 3093 !rajout Olivier Torres 3094 write(lunout,*) 'choix_bulk = ', choix_bulk 3095 write(lunout,*) 'nit_bulk = ', nit_bulk 3096 write(lunout,*) 'kz0 = ', kz0 3058 3097 3059 3098 !$OMP END MASTER -
LMDZ6/branches/LMDZ_cdrag_LSCE/libf/phylmd/pbl_surface_mod.F90
r4478 r4661 349 349 REAL, DIMENSION(klon), INTENT(IN) :: rugoro ! rugosity length 350 350 REAL, DIMENSION(klon), INTENT(IN) :: rmu0 ! cosine of solar zenith angle 351 REAL, DIMENSION(klon), INTENT(IN ):: rain_f ! rain fall351 REAL, DIMENSION(klon), INTENT(INOUT) :: rain_f ! rain fall 352 352 REAL, DIMENSION(klon), INTENT(IN) :: snow_f ! snow fall 353 353 REAL, DIMENSION(klon), INTENT(IN) :: solsw_m ! net shortwave radiation at mean surface … … 1570 1570 ENDDO 1571 1571 CALL cdrag(knon, nsrf, & 1572 speed, yt(:,1), yq(:,1), zgeo1, ypaprs(:,1), &1572 speed, yt(:,1), yq(:,1), zgeo1, ypaprs(:,1), s_pblh, & 1573 1573 yts, yqsurf, yz0m, yz0h, yri0, 0, & 1574 ycdragm, ycdragh, zri1, pref 1574 ycdragm, ycdragh, zri1, pref, rain_f, zxtsol, ypplay(:,1)) 1575 1575 1576 1576 ! --- special Dice: on force cdragm ( a defaut de forcer ustar) MPL 05082013 … … 1604 1604 1605 1605 CALL cdrag(knon, nsrf, & 1606 speed_x, yt_x(:,1), yq_x(:,1), zgeo1_x, ypaprs(:,1), &1606 speed_x, yt_x(:,1), yq_x(:,1), zgeo1_x, ypaprs(:,1),s_pblh_x,& 1607 1607 yts_x, yqsurf_x, yz0m, yz0h, yri0, 0, & 1608 ycdragm_x, ycdragh_x, zri1_x, pref_x )1608 ycdragm_x, ycdragh_x, zri1_x, pref_x, rain_f, zxtsol, ypplay(:,1) ) 1609 1609 1610 1610 ! --- special Dice. JYG+MPL 25112013 … … 1631 1631 ENDDO 1632 1632 CALL cdrag(knon, nsrf, & 1633 speed_w, yt_w(:,1), yq_w(:,1), zgeo1_w, ypaprs(:,1), &1633 speed_w, yt_w(:,1), yq_w(:,1), zgeo1_w, ypaprs(:,1),s_pblh_w,& 1634 1634 yts_w, yqsurf_w, yz0m, yz0h, yri0, 0, & 1635 ycdragm_w, ycdragh_w, zri1_w, pref_w )1635 ycdragm_w, ycdragh_w, zri1_w, pref_w, rain_f, zxtsol, ypplay(:,1) ) 1636 1636 ! 1637 1637 zgeo1(:) = wake_s(:)*zgeo1_w(:) + (1.-wake_s(:))*zgeo1_x(:) … … 2037 2037 yu(:,1), yv(:,1), yt(:,1), yq(:,1), zgeo1, & 2038 2038 yts, yqsurf, yz0m, yz0h, ypaprs(:,1), ypplay(:,1), & 2039 yt2m, yq2m, yt10m, yq10m, yu10m, yustar )2039 yt2m, yq2m, yt10m, yq10m, yu10m, yustar, ypblh, rain_f, zxtsol) 2040 2040 ENDIF 2041 2041 … … 2997 2997 uzon, vmer, tair1, qair1, zgeo1, & 2998 2998 tairsol, qairsol, yz0m, yz0h_oupas, psfce, patm, & 2999 yt2m, yq2m, yt10m, yq10m, yu10m, yustar )2999 yt2m, yq2m, yt10m, yq10m, yu10m, yustar, ypblh, rain_f, zxtsol) 3000 3000 ENDIF 3001 3001 ELSE !(iflag_split .eq.0) … … 3015 3015 uzon_x, vmer_x, tair1_x, qair1_x, zgeo1_x, & 3016 3016 tairsol_x, qairsol, yz0m, yz0h_oupas, psfce, patm, & 3017 yt2m_x, yq2m_x, yt10m_x, yq10m_x, yu10m_x, yustar_x )3017 yt2m_x, yq2m_x, yt10m_x, yq10m_x, yu10m_x, yustar_x, ypblh_x, rain_f, zxtsol) 3018 3018 CALL stdlevvar(klon, knon, nsrf, zxli, & 3019 3019 uzon_w, vmer_w, tair1_w, qair1_w, zgeo1_w, & 3020 3020 tairsol_w, qairsol, yz0m, yz0h_oupas, psfce, patm, & 3021 yt2m_w, yq2m_w, yt10m_w, yq10m_w, yu10m_w, yustar_w )3021 yt2m_w, yq2m_w, yt10m_w, yq10m_w, yu10m_w, yustar_w, ypblh_w, rain_f, zxtsol) 3022 3022 ENDIF 3023 3023 !!! -
LMDZ6/branches/LMDZ_cdrag_LSCE/libf/phylmd/physiq_mod.F90
r4489 r4661 1212 1212 REAL qql1(klon),qql2(klon),corrqql 1213 1213 1214 1215 REAL, dimension(klon) :: pr_et 1216 REAL, dimension(klon) :: w_et, jlr_g_c, jlr_g_s 1217 1214 1218 REAL pi 1215 1219 … … 2667 2671 ELSE IF (iflag_gusts==2) THEN 2668 2672 gustiness(1:klon)=f_gust_bl*ale_bl_stat(1:klon)+f_gust_wk*ale_wake(1:klon) 2673 !!!! modif olivier torres 2674 ELSE IF (iflag_gusts==3) THEN 2675 w_et=wstar(1,3) 2676 jlr_g_s=(0.65*w_et)**2 2677 pr_et=rain_con*8640 2678 jlr_g_c = (((19.8*(pr_et(1:klon)**2))/(1.5+pr_et(1:klon)+pr_et(1:klon)**2))**(0.4))**2 2679 gustiness(1:klon)=jlr_g_c+jlr_g_s 2680 !! write(*,*) "rain ",pr_et 2681 !! write(*,*) "jlr_g_c",jlr_g_c 2682 !! write(*,*) "wstar",wstar(1,3) 2683 !! write(*,*) "jlr_g_s",jlr_g_s 2669 2684 ! ELSE IF (iflag_gusts==2) THEN 2670 2685 ! do i = 1, klon -
LMDZ6/branches/LMDZ_cdrag_LSCE/libf/phylmd/screenc_mod.F90
r4478 r4661 18 18 ts, qsurf, z0m, z0h, psol, & 19 19 ustar, testar, qstar, okri, ri1, & 20 pref, delu, delte, delq )20 pref, delu, delte, delq, s_pblh, prain, tsol, pat1) 21 21 IMPLICIT NONE 22 22 !----------------------------------------------------------------------- … … 60 60 REAL, dimension(klon), intent(in) :: speed, temp, q_zref 61 61 REAL, intent(in) :: zref 62 REAL, dimension(klon), intent(in) :: ts, qsurf, z0m, z0h, psol 63 REAL, dimension(klon), intent(in) :: ustar, testar, qstar, ri1 62 REAL, dimension(klon), intent(IN) :: ts 63 REAL, dimension(klon), intent(in) :: qsurf, psol 64 REAL, dimension(klon), intent(inout):: z0m, z0h 65 REAL, dimension(klon), intent(in) :: ustar, testar, qstar, ri1 66 67 REAL, dimension(klon), intent(inout) :: s_pblh 68 REAL, dimension(klon), intent(in) :: prain 69 REAL, dimension(klon), intent(in) :: tsol 70 REAL, DIMENSION(klon), INTENT(IN) :: pat1 !pression premier lev 64 71 ! 65 72 REAL, dimension(klon), intent(out) :: pref, delu, delte, delq … … 88 95 CALL cdrag (knon, nsrf, & 89 96 speed, temp, q_zref, gref, & 90 psol, ts, qsurf, z0m, z0h, &97 psol, s_pblh, ts, qsurf, z0m, z0h, & 91 98 zri_zero,0, & 92 cdram, cdrah, zri1, pref )99 cdram, cdrah, zri1, pref, prain, tsol, pat1) 93 100 DO i = 1, knon 94 101 IF(ok_prescr_ust) THEN … … 114 121 cdrm, cdrh, okri, & 115 122 ri1, iri1, & 116 pref, delm, delh, zri1 )123 pref, delm, delh, zri1, s_pblh, prain, tsol, pat1) 117 124 IMPLICIT NONE 118 125 !----------------------------------------------------------------------- … … 156 163 REAL, dimension(klon), intent(in) :: speed, temp, q_zref 157 164 REAL, intent(in) :: zref 158 REAL, dimension(klon), intent(in) :: ts, qsurf, z0m, z0h, psol 165 REAL, dimension(klon), intent(in) :: ts, qsurf, psol 166 REAL, dimension(klon), intent(inout) :: z0m, z0h 159 167 REAL, dimension(klon), intent(in) :: cdrm, cdrh, ri1 168 REAL, dimension(klon), intent(inout) :: s_pblh 169 REAL, dimension(klon), intent(in) :: prain 170 REAL, dimension(klon), intent(in) :: tsol 171 REAL, DIMENSION(klon), INTENT(IN) :: pat1 !pression premier lev 160 172 INTEGER, INTENT(IN) :: iri1 ! Richardson de la 1ere couche 161 173 ! … … 180 192 CALL cdrag(knon, nsrf, & 181 193 speed, temp, q_zref, gref, & 182 psol, ts, qsurf, z0m, z0h, &194 psol, s_pblh, ts, qsurf, z0m, z0h, & 183 195 ri1, iri1, & 184 cdram, cdrah, zri1, pref )196 cdram, cdrah, zri1, pref, prain, tsol, pat1) 185 197 DO i = 1, knon 186 198 delm(i) = sqrt(cdrm(i))/sqrt(cdram(i)) -
LMDZ6/branches/LMDZ_cdrag_LSCE/libf/phylmd/stdlevvar_mod.F90
r4478 r4661 19 19 u1, v1, t1, q1, z1, & 20 20 ts1, qsurf, z0m, z0h, psol, pat1, & 21 t_2m, q_2m, t_10m, q_10m, u_10m, ustar )21 t_2m, q_2m, t_10m, q_10m, u_10m, ustar, s_pblh, prain, tsol) 22 22 IMPLICIT NONE 23 23 !------------------------------------------------------------------------- … … 61 61 LOGICAL, intent(in) :: zxli 62 62 REAL, dimension(klon), intent(in) :: u1, v1, t1, q1, z1, ts1 63 REAL, dimension(klon), intent(in) :: qsurf, z0m, z0h 63 REAL, dimension(klon), intent(in) :: qsurf 64 REAL, dimension(klon), intent(inout) :: z0m, z0h 64 65 REAL, dimension(klon), intent(in) :: psol, pat1 65 66 ! 66 67 REAL, dimension(klon), intent(out) :: t_2m, q_2m, ustar 67 68 REAL, dimension(klon), intent(out) :: u_10m, t_10m, q_10m 69 REAL, DIMENSION(klon), INTENT(INOUT) :: s_pblh 70 REAL, DIMENSION(klon), INTENT(IN) :: prain 71 REAL, DIMENSION(klon), INTENT(IN) :: tsol 68 72 !------------------------------------------------------------------------- 69 73 include "flux_arp.h" … … 120 124 CALL cdrag(knon, nsrf, & 121 125 & speed, t1, q1, z1, & 122 & psol, ts1, qsurf, z0m, z0h, &126 & psol, s_pblh, ts1, qsurf, z0m, z0h, & 123 127 & zri_zero, 0, & 124 & cdram, cdrah, zri1, pref )128 & cdram, cdrah, zri1, pref, prain, tsol, pat1) 125 129 126 130 ! --- special Dice: on force cdragm ( a defaut de forcer ustar) MPL 05082013 … … 178 182 & ts1, qsurf, z0m, z0h, psol, & 179 183 & ustar, testar, qstar, okri, ri1, & 180 & pref, delu, delte, delq )184 & pref, delu, delte, delq, s_pblh ,prain, tsol, pat1) 181 185 ! 182 186 DO i = 1, knon … … 280 284 & ts1, qsurf, z0m, z0h, psol, & 281 285 & ustar, testar, qstar, okri, ri1, & 282 & pref, delu, delte, delq )286 & pref, delu, delte, delq, s_pblh ,prain, tsol, pat1) 283 287 ! 284 288 DO i = 1, knon … … 357 361 INTEGER, intent(in) :: klon, knon, nsrf 358 362 LOGICAL, intent(in) :: zxli 359 REAL, dimension(klon), intent(in) :: u1, v1, t1, q1, z1, ts1 360 REAL, dimension(klon), intent(in) :: qsurf, z0m, z0h 363 REAL, dimension(klon), intent(in) :: u1, v1, t1, q1, ts1, z1 364 REAL, dimension(klon), intent(inout) :: z0m, z0h 365 REAL, dimension(klon), intent(in) :: qsurf 361 366 REAL, dimension(klon), intent(in) :: psol, pat1 362 367 ! … … 371 376 REAL, dimension(klon) :: cdmn2m, cdhn2m, fm2m, fh2m 372 377 REAL, dimension(klon) :: ri2m_new 378 REAL, DIMENSION(klon) :: s_pblh 379 REAL, DIMENSION(klon) :: prain 380 REAL, DIMENSION(klon) :: tsol 373 381 !------------------------------------------------------------------------- 374 382 include "flux_arp.h" … … 444 452 CALL cdrag(knon, nsrf, & 445 453 & speed, t1, q1, z1, & 446 & psol, ts1, qsurf, z0m, z0h, &454 & psol, s_pblh, ts1, qsurf, z0m, z0h, & 447 455 & zri_zero, 0, & 448 & cdram, cdrah, zri1, pref )456 & cdram, cdrah, zri1, pref, prain, tsol, pat1) 449 457 450 458 ! … … 468 476 & cdram, cdrah, okri, & 469 477 & ri1, 1, & 470 & pref_new, delm_new, delh_new, ri2m) 478 & pref_new, delm_new, delh_new, ri2m, & 479 & s_pblh, prain, tsol, pat1 ) 471 480 ! 472 481 DO i = 1, knon … … 535 544 & cdram, cdrah, okri, & 536 545 & ri1, 0, & 537 & pref, delm, delh, ri2m) 546 & pref, delm, delh, ri2m, & 547 & s_pblh, prain, tsol, pat1 ) 538 548 ! 539 549 DO i = 1, knon … … 614 624 & cdram, cdrah, okri, & 615 625 & ri1, 1, & 616 & pref_new, delm_new, delh_new, ri10m) 626 & pref_new, delm_new, delh_new, ri10m, & 627 & s_pblh, prain, tsol, pat1 ) 617 628 ! 618 629 DO i = 1, knon … … 671 682 & cdram, cdrah, okri, & 672 683 & ri1, 0, & 673 & pref, delm, delh, ri10m) 684 & pref, delm, delh, ri10m, & 685 & s_pblh, prain, tsol, pat1 ) 674 686 ! 675 687 DO i = 1, knon
Note: See TracChangeset
for help on using the changeset viewer.