- Timestamp:
- Mar 8, 2022, 8:44:55 PM (3 years ago)
- Location:
- LMDZ6/trunk
- Files:
-
- 1 added
- 6 edited
Legend:
- Unmodified
- Added
- Removed
-
LMDZ6/trunk/bld.cfg
r3910 r4085 110 110 bld::outfile_ext::mod .mod 111 111 bld::tool::SHELL /bin/bash 112 bld::tool::SHELL /usr/bin/bash -
LMDZ6/trunk/create_make_gcm
r3232 r4085 137 137 # Check if file is a routine or main program 138 138 # i.e: look for the "program" keword preceeded by leading spaces 139 test=` ( head $fili | grep -i '^ *program' ) `139 test=` ( head -20 $fili | grep -i '^ *program' ) ` 140 140 # if it is not a main program, add it to the list 141 141 if [ "$test" = "" ] ; then listlib=$listlib" "$fili ; fi … … 144 144 # Check if file is a routine or main program 145 145 # i.e. look for "program" keyword (with possibly some leading spaces) 146 test=` ( head $fili | grep -i '^ \{0,\}program' ) `146 test=` ( head -20 $fili | grep -i '^ \{0,\}program' ) ` 147 147 # if it is not a main program, add it to the list 148 148 if [ "$test" = "" ] ; then listlib=$listlib" "$fili ; fi -
LMDZ6/trunk/libf/phylmd/calwake.F90
r3208 r4085 208 208 END DO 209 209 210 CALL wake(znatsurf, p, ph, pi, dtime, & 210 211 212 CALL wake(klon,klev,znatsurf, p, ph, pi, dtime, & 211 213 te, qe, omgbe, & 212 214 dtdwn, dqdwn, amdwn, amup, dta, dqa, wgen, & 213 215 sigd0, Cin, & 214 dtw, dqw, sigmaw, awdens, wdens, & 216 dtw, dqw, sigmaw, awdens, wdens, & ! state variables 215 217 dth, hw, wape, fip, gfl, & 216 218 dtls, dqls, ktopw, omgbdth, dp_omgb, tx, qx, & 217 219 dtke, dqke, omg, dp_deltomg, spread, cstar, & 218 220 d_deltat_gw, & 219 d_deltatw, d_deltaqw, d_sigmaw, d_awdens, d_wdens) 221 d_deltatw, d_deltaqw, d_sigmaw, d_awdens, d_wdens) ! tendencies 220 222 221 223 ! -
LMDZ6/trunk/libf/phylmd/physiq_mod.F90
r4083 r4085 78 78 USE write_field_phy 79 79 USE lscp_mod, ONLY : lscp 80 USE wake_ini_mod, ONLY : wake_ini 80 81 81 82 !USE cmp_seri_mod … … 1725 1726 !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! 1726 1727 ! Nouvelle initialisation pour le rayonnement RRTM 1727 !1728 1728 !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! 1729 1729 1730 1730 CALL iniradia(klon,klev,paprs(1,1:klev+1)) 1731 1732 !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! 1733 CALL wake_ini(rg,rd,rv,prt_level) 1734 !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! 1735 1731 1736 ! 1732 1737 !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! … … 2145 2150 sollwdown(:)= sollwdown(:) + betalwoff *(-1.*ZFLDN0(:,1) - & 2146 2151 sollwdown(:)) 2152 2147 2153 2148 2154 -
LMDZ6/trunk/libf/phylmd/wake.F90
r3648 r4085 2 2 ! $Id$ 3 3 4 SUBROUTINE wake(znatsurf, p, ph, pi, dtime, & 5 te0, qe0, omgb, & 4 5 SUBROUTINE wake(klon,klev,znatsurf, p, ph, pi, dtime, & 6 tenv0, qe0, omgb, & 6 7 dtdwn, dqdwn, amdwn, amup, dta, dqa, wgen, & 7 8 sigd_con, Cin, & … … 9 10 dth, hw, wape, fip, gfl, & 10 11 dtls, dqls, ktopw, omgbdth, dp_omgb, tu, qu, & 11 dtke, dqke, omg, dp_deltomg, spread, cstar, &12 dtke, dqke, omg, dp_deltomg, wkspread, cstar, & 12 13 d_deltat_gw, & 13 14 d_deltatw2, d_deltaqw2, d_sigmaw2, d_awdens2, d_wdens2) ! tendencies … … 23 24 ! ************************************************************** 24 25 25 USE ioipsl_getin_p_mod, ONLY : getin_p 26 USE dimphy 27 use mod_phys_lmdz_para 28 USE print_control_mod, ONLY: prt_level 26 27 USE wake_ini_mod , ONLY : wake_ini 28 USE wake_ini_mod , ONLY : prt_level,epsim1,RG,RD 29 USE wake_ini_mod , ONLY : stark, wdens_ref, coefgw, alpk, wdens_ref, stark, coefgw, alpk 30 USE wake_ini_mod , ONLY : crep_upper, crep_sol, tau_cv, rzero, aa0, flag_wk_check_trgl 31 USE wake_ini_mod , ONLY : iflag_wk_act, iflag_wk_check_trgl, iflag_wk_pop_dyn, wdensmin 32 USE wake_ini_mod , ONLY : sigmad, hwmin, wapecut, cstart, sigmaw_max, dens_rate, epsilon_loc 33 34 29 35 IMPLICIT NONE 30 36 ! ============================================================================ … … 57 63 ! omg : Delta_omg =vertical velocity diff. wake-undist. (Pa/s) 58 64 ! dp_deltomg : vertical gradient of omg (s-1) 59 ! spread : spreading term in d_t_wake and d_q_wake65 ! wkspread : spreading term in d_t_wake and d_q_wake 60 66 ! deltatw : updated temperature difference (T_w-T_u). 61 67 ! deltaqw : updated humidity difference (q_w-q_u). … … 66 72 67 73 ! aire : aire de la maille 68 ! te 0 : temperature dans l'environnement (K)74 ! tenv0 : temperature dans l'environnement (K) 69 75 ! qe0 : humidite dans l'environnement (kg/kg) 70 76 ! omgb : vitesse verticale moyenne sur la maille (Pa/s) … … 90 96 ! rho : environment density at P levels 91 97 ! rhoh : environment density at Ph levels 92 ! te : environment temperature | may change within98 ! tenv : environment temperature | may change within 93 99 ! qe : environment humidity | sub-time-stepping 94 100 ! the : environment potential temperature … … 121 127 ! ------------------------------------------------------------------------- 122 128 123 include "YOMCST.h"124 include "cvthermo.h"125 129 126 130 ! Arguments en entree 127 131 ! -------------------- 128 132 133 INTEGER, INTENT(IN) :: klon,klev 129 134 INTEGER, DIMENSION (klon), INTENT(IN) :: znatsurf 130 135 REAL, DIMENSION (klon, klev), INTENT(IN) :: p, pi … … 132 137 REAL, DIMENSION (klon, klev), INTENT(IN) :: omgb 133 138 REAL, INTENT(IN) :: dtime 134 REAL, DIMENSION (klon, klev), INTENT(IN) :: te 0, qe0139 REAL, DIMENSION (klon, klev), INTENT(IN) :: tenv0, qe0 135 140 REAL, DIMENSION (klon, klev), INTENT(IN) :: dtdwn, dqdwn 136 141 REAL, DIMENSION (klon, klev), INTENT(IN) :: amdwn, amup … … 155 160 REAL, DIMENSION (klon, klev), INTENT(OUT) :: dtls, dqls 156 161 REAL, DIMENSION (klon, klev), INTENT(OUT) :: dtke, dqke 157 REAL, DIMENSION (klon, klev), INTENT(OUT) :: spread ! unused (jyg)162 REAL, DIMENSION (klon, klev), INTENT(OUT) :: wkspread ! unused (jyg) 158 163 REAL, DIMENSION (klon, klev), INTENT(OUT) :: omgbdth, omg 159 164 REAL, DIMENSION (klon, klev), INTENT(OUT) :: dp_omgb, dp_deltomg … … 169 174 170 175 ! Variables à fixer 171 INTEGER, SAVE :: igout172 !$OMP THREADPRIVATE(igout)173 LOGICAL, SAVE :: first = .TRUE.174 !$OMP THREADPRIVATE(first)175 !jyg<176 !! REAL, SAVE :: stark, wdens_ref, coefgw, alpk177 REAL, SAVE, DIMENSION(2) :: wdens_ref178 REAL, SAVE :: stark, coefgw, alpk179 !>jyg180 REAL, SAVE :: crep_upper, crep_sol181 !$OMP THREADPRIVATE(stark, wdens_ref, coefgw, alpk, crep_upper, crep_sol)182 183 REAL, SAVE :: tau_cv184 !$OMP THREADPRIVATE(tau_cv)185 REAL, SAVE :: rzero, aa0 ! minimal wake radius and area186 !$OMP THREADPRIVATE(rzero, aa0)187 188 LOGICAL, SAVE :: flag_wk_check_trgl189 !$OMP THREADPRIVATE(flag_wk_check_trgl)190 INTEGER, SAVE :: iflag_wk_check_trgl191 !$OMP THREADPRIVATE(iflag_wk_check_trgl)192 INTEGER, SAVE :: iflag_wk_pop_dyn193 !$OMP THREADPRIVATE(iflag_wk_pop_dyn)194 176 195 177 REAL :: delta_t_min 196 178 INTEGER :: nsub 197 179 REAL :: dtimesub 198 REAL, SAVE :: wdensmin199 !$OMP THREADPRIVATE(wdensmin)200 REAL, SAVE :: sigmad, hwmin, wapecut, cstart201 !$OMP THREADPRIVATE(sigmad, hwmin, wapecut, cstart)202 REAL, SAVE :: sigmaw_max203 !$OMP THREADPRIVATE(sigmaw_max)204 REAL, SAVE :: dens_rate205 !$OMP THREADPRIVATE(dens_rate)206 180 REAL :: wdens0 207 181 ! IM 080208 … … 211 185 REAL, DIMENSION (klon, klev) :: deltatw0 212 186 REAL, DIMENSION (klon, klev) :: deltaqw0 213 REAL, DIMENSION (klon, klev) :: te , qe187 REAL, DIMENSION (klon, klev) :: tenv, qe 214 188 !! REAL, DIMENSION (klon) :: sigmaw1 215 189 … … 222 196 REAL, DIMENSION(klon) :: wape1_act, wape2_act 223 197 LOGICAL, DIMENSION (klon) :: kill_wake 224 INTEGER, SAVE :: iflag_wk_act225 !$OMP THREADPRIVATE(iflag_wk_act)226 198 REAL :: drdt_pos 227 199 REAL :: tau_wk_inv_min … … 246 218 ! Sub-timestep tendencies and related variables 247 219 REAL, DIMENSION (klon, klev) :: d_deltatw, d_deltaqw 248 REAL, DIMENSION (klon, klev) :: d_te , d_qe220 REAL, DIMENSION (klon, klev) :: d_tenv, d_qe 249 221 REAL, DIMENSION (klon) :: d_awdens, d_wdens 250 222 REAL, DIMENSION (klon) :: d_sigmaw, alpha 251 223 REAL, DIMENSION (klon) :: q0_min, q1_min 252 224 LOGICAL, DIMENSION (klon) :: wk_adv, ok_qx_qw 253 REAL, SAVE :: epsilon254 !$OMP THREADPRIVATE(epsilon)255 DATA epsilon/1.E-15/256 225 257 226 ! Autres variables internes 258 INTEGER ::isubstep, k, i 227 INTEGER ::isubstep, k, i, igout 259 228 260 229 REAL :: wdens_targ … … 307 276 REAL, DIMENSION(klon) :: awdens_in, wdens_in ! pour les prints 308 277 278 309 279 ! ------------------------------------------------------------------------- 310 280 ! Initialisations 311 281 ! ------------------------------------------------------------------------- 312 313 ! print*, 'wake initialisations'314 315 ! Essais d'initialisation avec sigmaw = 0.02 et hw = 10.316 ! -------------------------------------------------------------------------317 318 !! DATA wapecut, sigmad, hwmin/5., .02, 10./319 !! DATA wapecut, sigmad, hwmin/1., .02, 10./320 DATA sigmad, hwmin/.02, 10./321 !! DATA wdensmin/1.e-12/322 DATA wdensmin/1.e-14/323 ! cc nrlmd324 DATA sigmaw_max/0.4/325 DATA dens_rate/0.1/326 ! cc327 ! Longueur de maille (en m)328 ! -------------------------------------------------------------------------329 330 ! ALON = 3.e5331 ! alon = 1.E6332 333 282 ! Provisionnal; to be suppressed when f_shear is parameterized 334 283 f_shear(:) = 1. ! 0. for strong shear, 1. for weak shear … … 353 302 ! alpk = 0.05 354 303 355 if (first) then 356 357 igout = klon/2+1/klon 358 359 crep_upper = 0.9 360 crep_sol = 1.0 361 362 ! Get wapecut from parameter file 363 wapecut = 1. 364 CALL getin_p('wapecut', wapecut) 365 366 ! cc nrlmd Lecture du fichier wake_param.data 367 stark=0.33 368 CALL getin_p('stark',stark) 369 cstart = stark*sqrt(2.*wapecut) 370 371 alpk=0.25 372 CALL getin_p('alpk',alpk) 373 !jyg< 374 !! wdens_ref=8.E-12 375 !! CALL getin_p('wdens_ref',wdens_ref) 376 wdens_ref(1)=8.E-12 377 wdens_ref(2)=8.E-12 378 CALL getin_p('wdens_ref_o',wdens_ref(1)) !wake number per unit area ; ocean 379 CALL getin_p('wdens_ref_l',wdens_ref(2)) !wake number per unit area ; land 380 !>jyg 381 ! 382 !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! 383 !!!!!!!!! Population dynamics parameters !!!!!!!!!!!!!!!!!!!!!!!!!!!! 384 !------------------------------------------------------------------------ 385 386 iflag_wk_pop_dyn = 0 387 CALL getin_p('iflag_wk_pop_dyn',iflag_wk_pop_dyn) ! switch between wdens prescribed 388 ! and wdens prognostic 389 iflag_wk_act = 0 390 CALL getin_p('iflag_wk_act',iflag_wk_act) ! 0: act(:)=0. 391 ! 1: act(:)=1. 392 ! 2: act(:)=f(Wape) 393 394 rzero = 5000. 395 CALL getin_p('rzero_wk', rzero) 396 aa0 = 3.14*rzero*rzero 397 ! 398 tau_cv = 4000. 399 CALL getin_p('tau_cv', tau_cv) 400 401 !------------------------------------------------------------------------ 402 403 coefgw=4. 404 CALL getin_p('coefgw',coefgw) 405 406 WRITE(*,*) 'stark=', stark 407 WRITE(*,*) 'alpk=', alpk 408 !jyg< 409 !! WRITE(*,*) 'wdens_ref=', wdens_ref 410 WRITE(*,*) 'wdens_ref_o=', wdens_ref(1) 411 WRITE(*,*) 'wdens_ref_l=', wdens_ref(2) 412 !>jyg 413 WRITE(*,*) 'iflag_wk_pop_dyn=',iflag_wk_pop_dyn 414 WRITE(*,*) 'iflag_wk_act',iflag_wk_act 415 WRITE(*,*) 'coefgw=', coefgw 416 417 flag_wk_check_trgl=.false. 418 CALL getin_p('flag_wk_check_trgl ', flag_wk_check_trgl) 419 WRITE(*,*) 'flag_wk_check_trgl=', flag_wk_check_trgl 420 WRITE(*,*) 'flag_wk_check_trgl OBSOLETE. Utilisr iflag_wk_check_trgl plutot' 421 iflag_wk_check_trgl=0 ; IF (flag_wk_check_trgl) iflag_wk_check_trgl=1 422 CALL getin_p('iflag_wk_check_trgl ', iflag_wk_check_trgl) 423 WRITE(*,*) 'iflag_wk_check_trgl=', iflag_wk_check_trgl 424 425 first=.false. 426 endif 304 305 igout = klon/2+1/klon 427 306 428 307 IF (iflag_wk_pop_dyn == 0) THEN … … 457 336 !! deltatw0(i, k) = deltatw(i, k) 458 337 !! deltaqw0(i, k) = deltaqw(i, k) 459 !! te (i, k) = te0(i, k)338 !! tenv(i, k) = tenv0(i, k) 460 339 !! qe(i, k) = qe0(i, k) 461 340 !! dtls(i, k) = 0. 462 341 !! dqls(i, k) = 0. 463 342 !! d_deltat_gw(i, k) = 0. 464 !! d_te (i, k) = 0.343 !! d_tenv(i, k) = 0. 465 344 !! d_qe(i, k) = 0. 466 345 !! d_deltatw(i, k) = 0. … … 475 354 deltatw0(:,:) = deltatw(:,:) 476 355 deltaqw0(:,:) = deltaqw(:,:) 477 te (:,:) = te0(:,:)356 tenv(:,:) = tenv0(:,:) 478 357 qe(:,:) = qe0(:,:) 479 358 dtls(:,:) = 0. 480 359 dqls(:,:) = 0. 481 360 d_deltat_gw(:,:) = 0. 482 d_te (:,:) = 0.361 d_tenv(:,:) = 0. 483 362 d_qe(:,:) = 0. 484 363 d_deltatw(:,:) = 0. … … 547 426 dtke(:,:) = 0. 548 427 dqke(:,:) = 0. 549 spread(:,:) = 0.428 wkspread(:,:) = 0. 550 429 omgbdth(:,:) = 0. 551 430 omg(:,:) = 0. … … 618 497 DO k = 1, klev 619 498 DO i = 1, klon 620 ! write(*,*)'wake 1',i,k, rd,te(i,k)621 rho(i, k) = p(i, k)/( rd*te(i,k))499 ! write(*,*)'wake 1',i,k,RD,tenv(i,k) 500 rho(i, k) = p(i, k)/(RD*tenv(i,k)) 622 501 ! write(*,*)'wake 2',rho(i,k) 623 502 IF (k==1) THEN 624 ! write(*,*)'wake 3',i,k,rd,te (i,k)625 rhoh(i, k) = ph(i, k)/( rd*te(i,k))626 ! write(*,*)'wake 4',i,k,rd,te (i,k)503 ! write(*,*)'wake 3',i,k,rd,tenv(i,k) 504 rhoh(i, k) = ph(i, k)/(RD*tenv(i,k)) 505 ! write(*,*)'wake 4',i,k,rd,tenv(i,k) 627 506 zhh(i, k) = 0 628 507 ELSE 629 ! write(*,*)'wake 5',rd,(te (i,k)+te(i,k-1))630 rhoh(i, k) = ph(i, k)*2./( rd*(te(i,k)+te(i,k-1)))508 ! write(*,*)'wake 5',rd,(tenv(i,k)+tenv(i,k-1)) 509 rhoh(i, k) = ph(i, k)*2./(RD*(tenv(i,k)+tenv(i,k-1))) 631 510 ! write(*,*)'wake 6',(-rhoh(i,k)*RG)+zhh(i,k-1) 632 zhh(i, k) = (ph(i,k)-ph(i,k-1))/(-rhoh(i,k)* rg) + zhh(i, k-1)511 zhh(i, k) = (ph(i,k)-ph(i,k-1))/(-rhoh(i,k)*RG) + zhh(i, k-1) 633 512 END IF 634 513 ! write(*,*)'wake 7',ppi(i,k) 635 the(i, k) = te (i, k)/ppi(i, k)636 thu(i, k) = (te (i,k)-deltatw(i,k)*sigmaw(i))/ppi(i, k)637 tu(i, k) = te (i, k) - deltatw(i, k)*sigmaw(i)514 the(i, k) = tenv(i, k)/ppi(i, k) 515 thu(i, k) = (tenv(i,k)-deltatw(i,k)*sigmaw(i))/ppi(i, k) 516 tu(i, k) = tenv(i, k) - deltatw(i, k)*sigmaw(i) 638 517 qu(i, k) = qe(i, k) - deltaqw(i, k)*sigmaw(i) 639 ! write(*,*)'wake 8',( rd*(te(i,k)+deltatw(i,k)))640 rhow(i, k) = p(i, k)/( rd*(te(i,k)+deltatw(i,k)))518 ! write(*,*)'wake 8',(RD*(tenv(i,k)+deltatw(i,k))) 519 rhow(i, k) = p(i, k)/(RD*(tenv(i,k)+deltatw(i,k))) 641 520 dth(i, k) = deltatw(i, k)/ppi(i, k) 642 521 END DO … … 648 527 n2(i, k) = 0 649 528 ELSE 650 n2(i, k) = amax1(0., - rg**2/the(i,k)*rho(i,k)*(the(i,k+1)-the(i,k-1))/ &529 n2(i, k) = amax1(0., -RG**2/the(i,k)*rho(i,k)*(the(i,k+1)-the(i,k-1))/ & 651 530 (p(i,k+1)-p(i,k-1))) 652 531 END IF … … 676 555 677 556 DO i = 1, klon 678 epaisseur1(i, 1) = -(ph(i,2)-ph(i,1))/(rho(i,1)* rg) + 1.679 epaisseur2(i, 1) = -(ph(i,2)-ph(i,1))/(rho(i,1)* rg) + 1.557 epaisseur1(i, 1) = -(ph(i,2)-ph(i,1))/(rho(i,1)*RG) + 1. 558 epaisseur2(i, 1) = -(ph(i,2)-ph(i,1))/(rho(i,1)*RG) + 1. 680 559 rhow_moyen(i, 1) = rhow(i, 1) 681 560 END DO … … 683 562 DO k = 2, klev 684 563 DO i = 1, klon 685 epaisseur1(i, k) = -(ph(i,k+1)-ph(i,k))/(rho(i,k)* rg) + 1.564 epaisseur1(i, k) = -(ph(i,k+1)-ph(i,k))/(rho(i,k)*RG) + 1. 686 565 epaisseur2(i, k) = epaisseur2(i, k-1) + epaisseur1(i, k) 687 566 rhow_moyen(i, k) = (rhow_moyen(i,k-1)*epaisseur2(i,k-1)+rhow(i,k)* & … … 735 614 DO k = 1, klev 736 615 DO i = 1, klon 737 dz(i) = -(amax1(ph(i,k+1),ptop_provis(i))-ph(i,k))/(rho(i,k)* rg)616 dz(i) = -(amax1(ph(i,k+1),ptop_provis(i))-ph(i,k))/(rho(i,k)*RG) 738 617 IF (dz(i)>0) THEN 739 618 z(i) = z(i) + dz(i) … … 760 639 DO k = 1, klev 761 640 DO i = 1, klon 762 dz(i) = amin1(-(ph(i,k+1)-ph(i,k))/(rho(i,k)* rg), hw0(i)-z(i))641 dz(i) = amin1(-(ph(i,k+1)-ph(i,k))/(rho(i,k)*RG), hw0(i)-z(i)) 763 642 IF (dz(i)>0) THEN 764 643 z(i) = z(i) + dz(i) 765 ptop(i) = ph(i, k) - rho(i, k)* rg*dz(i)644 ptop(i) = ph(i, k) - rho(i, k)*RG*dz(i) 766 645 END IF 767 646 END DO … … 856 735 DO k = 1, klev 857 736 DO i = 1, klon 858 dz(i) = -(amax1(ph(i,k+1),ptop(i))-ph(i,k))/(rho(i,k)* rg)737 dz(i) = -(amax1(ph(i,k+1),ptop(i))-ph(i,k))/(rho(i,k)*RG) 859 738 IF (dz(i)>0) THEN 860 739 z(i) = z(i) + dz(i) … … 896 775 av_dqdwn(i) = sum_dqdwn(i)/hw0(i) 897 776 898 wape(i) = - rg*hw0(i)*(av_dth(i)+ &777 wape(i) = -RG*hw0(i)*(av_dth(i)+ & 899 778 epsim1*(av_thu(i)*av_dq(i)+av_dth(i)*av_qu(i)+av_dth(i)*av_dq(i)))/av_thvu(i) 900 779 … … 1002 881 ! c $ isubstep,wk_adv(i),cstar(i),wape(i) 1003 882 IF (wk_adv(i) .AND. cstar(i)>0.01) THEN 1004 omg(i, kupper(i)+1) = - rg*amdwn(i, kupper(i)+1)/sigmaw(i) + &1005 rg*amup(i, kupper(i)+1)/(1.-sigmaw(i))883 omg(i, kupper(i)+1) = -RG*amdwn(i, kupper(i)+1)/sigmaw(i) + & 884 RG*amup(i, kupper(i)+1)/(1.-sigmaw(i)) 1006 885 wdens0 = (sigmaw(i)/(4.*3.14))* & 1007 886 ((1.-sigmaw(i))*omg(i,kupper(i)+1)/((ph(i,1)-pupper(i))*cstar(i)))**(2) … … 1154 1033 DO i = 1, klon 1155 1034 IF (wk_adv(i) .AND. k<=ktop(i)) THEN 1156 dz(i) = -(ph(i,k)-ph(i,k-1))/(rho(i,k-1)* rg)1035 dz(i) = -(ph(i,k)-ph(i,k-1))/(rho(i,k-1)*RG) 1157 1036 z(i) = z(i) + dz(i) 1158 1037 dp_deltomg(i, k) = dp_deltomg(i, 1) … … 1164 1043 DO i = 1, klon 1165 1044 IF (wk_adv(i)) THEN 1166 dztop(i) = -(ptop(i)-ph(i,ktop(i)))/(rho(i,ktop(i))* rg)1045 dztop(i) = -(ptop(i)-ph(i,ktop(i)))/(rho(i,ktop(i))*RG) 1167 1046 ztop(i) = z(i) + dztop(i) 1168 1047 omgtop(i) = dp_deltomg(i, 1)*ztop(i) … … 1182 1061 DO i = 1, klon 1183 1062 IF (wk_adv(i)) THEN 1184 omgtop(i) = -rho(i, ktop(i))* rg*omgtop(i)1063 omgtop(i) = -rho(i, ktop(i))*RG*omgtop(i) 1185 1064 dp_deltomg(i, 1) = omgtop(i)/(ptop(i)-ph(i,1)) 1186 1065 END IF … … 1190 1069 DO i = 1, klon 1191 1070 IF (wk_adv(i) .AND. k<=ktop(i)) THEN 1192 omg(i, k) = -rho(i, k)* rg*omg(i, k)1071 omg(i, k) = -rho(i, k)*RG*omg(i, k) 1193 1072 dp_deltomg(i, k) = dp_deltomg(i, 1) 1194 1073 END IF … … 1200 1079 DO i = 1, klon 1201 1080 IF (wk_adv(i) .AND. kupper(i)>ktop(i)) THEN 1202 omg(i, kupper(i)+1) = - rg*amdwn(i, kupper(i)+1)/sigmaw(i) + &1203 rg*amup(i, kupper(i)+1)/(1.-sigmaw(i))1081 omg(i, kupper(i)+1) = -RG*amdwn(i, kupper(i)+1)/sigmaw(i) + & 1082 RG*amup(i, kupper(i)+1)/(1.-sigmaw(i)) 1204 1083 dp_deltomg(i, kupper(i)) = (omgtop(i)-omg(i,kupper(i)+1))/ & 1205 1084 (ptop(i)-pupper(i)) … … 1368 1247 ! C 1369 1248 ! ----------------------------------------------------------------- 1370 d_te (i, k) = dtimesub*((rre1(i)*omg(i,k)*sigmaw(i)*d_th1(i,k)- &1249 d_tenv(i, k) = dtimesub*((rre1(i)*omg(i,k)*sigmaw(i)*d_th1(i,k)- & 1371 1250 rre2(i)*omg(i,k+1)*(1.-sigmaw(i))*d_th2(i,k+1))/ & 1372 1251 (ph(i,k)-ph(i,k+1)) & … … 1380 1259 (ph(i,k)-ph(i,k+1)) ) 1381 1260 ELSE IF (wk_adv(i) .AND. k==kupper(i)) THEN 1382 d_te (i, k) = dtimesub*(rre1(i)*omg(i,k)*sigmaw(i)*d_th1(i,k)/(ph(i,k)-ph(i,k+1)))*ppi(i, k)1261 d_tenv(i, k) = dtimesub*(rre1(i)*omg(i,k)*sigmaw(i)*d_th1(i,k)/(ph(i,k)-ph(i,k+1)))*ppi(i, k) 1383 1262 1384 1263 d_qe(i, k) = dtimesub*(rre1(i)*omg(i,k)*sigmaw(i)*d_q1(i,k)/(ph(i,k)-ph(i,k+1))) … … 1469 1348 sigmaw(i)*(1.-sigmaw(i))*dp_deltomg(i, k) 1470 1349 !>jyg 1471 spread(i, k) = (entr(i,k)-detr(i,k))/sigmaw(i)1472 1473 ! cc spread(i,k) =1350 wkspread(i, k) = (entr(i,k)-detr(i,k))/sigmaw(i) 1351 1352 ! cc wkspread(i,k) = 1474 1353 ! (1.-sigmaw(i))*dp_deltomg(i,k)+gfl(i)*Cstar(i)/ 1475 1354 ! cc $ sigmaw(i) … … 1488 1367 ! Sans GW 1489 1368 1490 ! deltatw(k)=deltatw(k)+dtimesub*(ff+dtKE(k)- spread(k)*deltatw(k))1369 ! deltatw(k)=deltatw(k)+dtimesub*(ff+dtKE(k)-wkspread(k)*deltatw(k)) 1491 1370 1492 1371 ! GW formule 1 1493 1372 1494 1373 ! deltatw(k) = deltatw(k)+dtimesub* 1495 ! $ (ff+dtKE(k) - spread(k)*deltatw(k)-Tgw(k)*deltatw(k))1374 ! $ (ff+dtKE(k) - wkspread(k)*deltatw(k)-Tgw(k)*deltatw(k)) 1496 1375 1497 1376 ! GW formule 2 … … 1530 1409 ! Scale tendencies so that water vapour remains positive in w and x. 1531 1410 1532 CALL wake_vec_modulation(klon, klev, wk_adv, epsilon , qe, d_qe, deltaqw, &1411 CALL wake_vec_modulation(klon, klev, wk_adv, epsilon_loc, qe, d_qe, deltaqw, & 1533 1412 d_deltaqw, sigmaw, d_sigmaw, alpha) 1534 1413 … … 1542 1421 DO i = 1, klon 1543 1422 IF (wk_adv(i) .AND. k<=kupper(i)) THEN 1544 d_te (i, k) = alpha(i)*d_te(i, k)1423 d_tenv(i, k) = alpha(i)*d_tenv(i, k) 1545 1424 d_qe(i, k) = alpha(i)*d_qe(i, k) 1546 1425 d_deltatw(i, k) = alpha(i)*d_deltatw(i, k) … … 1562 1441 DO i = 1, klon 1563 1442 IF (wk_adv(i) .AND. k<=kupper(i)) THEN 1564 dtls(i, k) = dtls(i, k) + d_te (i, k)1443 dtls(i, k) = dtls(i, k) + d_tenv(i, k) 1565 1444 dqls(i, k) = dqls(i, k) + d_qe(i, k) 1566 1445 ! cc nrlmd … … 1574 1453 DO i = 1, klon 1575 1454 IF (wk_adv(i) .AND. k<=kupper(i)) THEN 1576 te (i, k) = te0(i, k) + dtls(i, k)1455 tenv(i, k) = tenv0(i, k) + dtls(i, k) 1577 1456 qe(i, k) = qe0(i, k) + dqls(i, k) 1578 the(i, k) = te (i, k)/ppi(i, k)1457 the(i, k) = tenv(i, k)/ppi(i, k) 1579 1458 deltatw(i, k) = deltatw(i, k) + d_deltatw(i, k) 1580 1459 deltaqw(i, k) = deltaqw(i, k) + d_deltaqw(i, k) … … 1658 1537 DO i = 1, klon 1659 1538 IF (wk_adv(i)) THEN 1660 dz(i) = -(amax1(ph(i,k+1),ptop_provis(i))-ph(i,k))/(rho(i,k)* rg)1539 dz(i) = -(amax1(ph(i,k+1),ptop_provis(i))-ph(i,k))/(rho(i,k)*RG) 1661 1540 IF (dz(i)>0) THEN 1662 1541 z(i) = z(i) + dz(i) … … 1689 1568 DO i = 1, klon 1690 1569 IF (wk_adv(i)) THEN 1691 dz(i) = amin1(-(ph(i,k+1)-ph(i,k))/(rho(i,k)* rg), hw(i)-z(i))1570 dz(i) = amin1(-(ph(i,k+1)-ph(i,k))/(rho(i,k)*RG), hw(i)-z(i)) 1692 1571 IF (dz(i)>0) THEN 1693 1572 z(i) = z(i) + dz(i) 1694 ptop(i) = ph(i, k) - rho(i, k)* rg*dz(i)1573 ptop(i) = ph(i, k) - rho(i, k)*RG*dz(i) 1695 1574 ktop(i) = k 1696 1575 END IF … … 1789 1668 DO i = 1, klon 1790 1669 IF (wk_adv(i)) THEN !!! nrlmd 1791 dz(i) = -(max(ph(i,k+1),ptop(i))-ph(i,k))/(rho(i,k)* rg)1670 dz(i) = -(max(ph(i,k+1),ptop(i))-ph(i,k))/(rho(i,k)*RG) 1792 1671 IF (dz(i)>0) THEN 1793 1672 z(i) = z(i) + dz(i) … … 1832 1711 av_dqdwn(i) = sum_dqdwn(i)/hw0(i) 1833 1712 1834 wape(i) = - rg*hw0(i)*(av_dth(i)+epsim1*(av_thu(i)*av_dq(i) + &1713 wape(i) = -RG*hw0(i)*(av_dth(i)+epsim1*(av_thu(i)*av_dq(i) + & 1835 1714 av_dth(i)*av_qu(i)+av_dth(i)*av_dq(i)))/av_thvu(i) 1836 1715 END IF … … 1927 1806 IF (ok_qx_qw(i)) THEN 1928 1807 ! cc 1929 rho(i, k) = p(i, k)/( rd*te(i,k))1808 rho(i, k) = p(i, k)/(RD*tenv(i,k)) 1930 1809 IF (k==1) THEN 1931 rhoh(i, k) = ph(i, k)/( rd*te(i,k))1810 rhoh(i, k) = ph(i, k)/(RD*tenv(i,k)) 1932 1811 zhh(i, k) = 0 1933 1812 ELSE 1934 rhoh(i, k) = ph(i, k)*2./( rd*(te(i,k)+te(i,k-1)))1935 zhh(i, k) = (ph(i,k)-ph(i,k-1))/(-rhoh(i,k)* rg) + zhh(i, k-1)1936 END IF 1937 the(i, k) = te (i, k)/ppi(i, k)1938 thu(i, k) = (te (i,k)-deltatw(i,k)*sigmaw(i))/ppi(i, k)1939 tu(i, k) = te (i, k) - deltatw(i, k)*sigmaw(i)1813 rhoh(i, k) = ph(i, k)*2./(RD*(tenv(i,k)+tenv(i,k-1))) 1814 zhh(i, k) = (ph(i,k)-ph(i,k-1))/(-rhoh(i,k)*RG) + zhh(i, k-1) 1815 END IF 1816 the(i, k) = tenv(i, k)/ppi(i, k) 1817 thu(i, k) = (tenv(i,k)-deltatw(i,k)*sigmaw(i))/ppi(i, k) 1818 tu(i, k) = tenv(i, k) - deltatw(i, k)*sigmaw(i) 1940 1819 qu(i, k) = qe(i, k) - deltaqw(i, k)*sigmaw(i) 1941 rhow(i, k) = p(i, k)/( rd*(te(i,k)+deltatw(i,k)))1820 rhow(i, k) = p(i, k)/(RD*(tenv(i,k)+deltatw(i,k))) 1942 1821 dth(i, k) = deltatw(i, k)/ppi(i, k) 1943 1822 END IF … … 1967 1846 IF (ok_qx_qw(i)) THEN 1968 1847 ! cc 1969 dz(i) = -(amax1(ph(i,k+1),ptop(i))-ph(i,k))/(rho(i,k)* rg)1970 dz_half(i) = -(amax1(ph(i,k+1),0.5*(ptop(i)+ph(i,1)))-ph(i,k))/(rho(i,k)* rg)1848 dz(i) = -(amax1(ph(i,k+1),ptop(i))-ph(i,k))/(rho(i,k)*RG) 1849 dz_half(i) = -(amax1(ph(i,k+1),0.5*(ptop(i)+ph(i,1)))-ph(i,k))/(rho(i,k)*RG) 1971 1850 IF (dz(i)>0) THEN 1972 1851 z(i) = z(i) + dz(i) … … 2017 1896 av_dqdwn(i) = sum_dqdwn(i)/hw0(i) 2018 1897 2019 wape2(i) = - rg*hw0(i)*(av_dth(i)+epsim1*(av_thu(i)*av_dq(i) + &1898 wape2(i) = -RG*hw0(i)*(av_dth(i)+epsim1*(av_thu(i)*av_dq(i) + & 2020 1899 av_dth(i)*av_qu(i)+av_dth(i)*av_dq(i)))/av_thvu(i) 2021 1900 END IF … … 2224 2103 END DO 2225 2104 END DO 2226 !jyg< 2105 2227 2106 DO i = 1, klon 2228 2107 d_sigmaw2(i) = d_sigmaw2(i)/dtime … … 2230 2109 d_wdens2(i) = d_wdens2(i)/dtime 2231 2110 ENDDO 2232 !>jyg 2233 2234 2235 2236 RETURN 2111 2112 RETURN 2237 2113 END SUBROUTINE wake 2238 2114 2239 SUBROUTINE wake_vec_modulation(nlon, nl, wk_adv, epsilon , qe, d_qe, deltaqw, &2115 SUBROUTINE wake_vec_modulation(nlon, nl, wk_adv, epsilon_loc, qe, d_qe, deltaqw, & 2240 2116 d_deltaqw, sigmaw, d_sigmaw, alpha) 2241 2117 ! ------------------------------------------------------ … … 2258 2134 REAL alpha1(nlon) 2259 2135 REAL x, a, b, c, discrim 2260 REAL epsilon 2261 ! DATA epsilon/1.e-15/ 2136 REAL epsilon_loc 2262 2137 INTEGER i,k 2263 2138 … … 2280 2155 b = d_qe(i, k) + (zeta(i,k)-sigmaw(i))*d_deltaqw(i, k) - & 2281 2156 deltaqw(i, k)*d_sigmaw(i) 2282 c = qe(i, k) + (zeta(i,k)-sigmaw(i))*deltaqw(i, k) + epsilon 2157 c = qe(i, k) + (zeta(i,k)-sigmaw(i))*deltaqw(i, k) + epsilon_loc 2283 2158 discrim = b*b - 4.*a*c 2284 2159 ! print*, 'x, a, b, c, discrim', x, a, b, c, discrim … … 2308 2183 RETURN 2309 2184 END SUBROUTINE wake_vec_modulation 2310 2311 2312 2313 -
LMDZ6/trunk/makelmdz
r3997 r4085 692 692 echo suf_make $suf_make 693 693 694 ######################################################################## 695 # (re)Creation du makefile 696 ######################################################################## 697 698 echo "Controle de la necessite de recreer le makefile" 694 699 \rm tmp77 tmp90 695 700 for dir in $src_dirs ; do 696 find libf/$dir -name '*.[Fh]' -print | sort >> tmp77 697 find libf/$dir -name '*.F90' -print | sort >> tmp90 701 # On recupere la liste de tous les subroutine, use et include pour 702 # vérifier que les dépendense n'ont pas changé et reconstuire le 703 # makefile le cas échéant 704 # On enleve tout apres ONLy et on met un "uniq" pour que ca ne recrée pas 705 # le makefile si on se contente d'ajouter des lignes dans le ONLY 706 for str in subroutine "use " "include " ; do 707 grep -i "$str" libf/$dir/*.[Fh] | cut -d\( -f1 | sed -e 's/[Oo][Nn][Ll][Yy].*.$//' | uniq >> tmp77 708 grep -i "$str" libf/$dir/*.F90 | cut -d\( -f1 | sed -e 's/[Oo][Nn][Ll][Yy].*.$//' | uniq >> tmp90 709 done 698 710 done 699 711 … … 715 727 \mv -f tmp $makefile 716 728 echo "New makefile created" 717 fi 729 else 730 echo Pas besoin de recreer le makefile 731 fi 732 718 733 719 734 ln -sf $makefile makefile 720 721 #Create a .makelmdz file containing main compilation option for later comparisons722 735 echo "$lmdz_configuration" > .makelmdz 723 736
Note: See TracChangeset
for help on using the changeset viewer.