Changeset 4085


Ignore:
Timestamp:
Mar 8, 2022, 8:44:55 PM (2 years ago)
Author:
fhourdin
Message:

Reecriture de wake sur de nouveaux standards
Permet de rejouer les calculs (fonctionalité replay) et
pave le chemin vers les GPU.
Frédéric, Jean-Yves et Etienne
+ corrections makelmdz/create_make_gcm.

Location:
LMDZ6/trunk
Files:
1 added
6 edited

Legend:

Unmodified
Added
Removed
  • LMDZ6/trunk/bld.cfg

    r3910 r4085  
    110110bld::outfile_ext::mod .mod
    111111bld::tool::SHELL   /bin/bash
     112bld::tool::SHELL   /usr/bin/bash
  • LMDZ6/trunk/create_make_gcm

    r3232 r4085  
    137137         # Check if file is a routine or main program
    138138         # 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' ) `
    140140         # if it is not a main program, add it to the list
    141141         if [ "$test" = "" ] ; then listlib=$listlib" "$fili ; fi
     
    144144         # Check if file is a routine or main program
    145145         # 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' ) `
    147147         # if it is not a main program, add it to the list
    148148         if [ "$test" = "" ] ; then listlib=$listlib" "$fili ; fi
  • LMDZ6/trunk/libf/phylmd/calwake.F90

    r3208 r4085  
    208208  END DO
    209209
    210   CALL wake(znatsurf, p, ph, pi, dtime, &
     210
     211
     212  CALL wake(klon,klev,znatsurf, p, ph, pi, dtime, &
    211213    te, qe, omgbe, &
    212214    dtdwn, dqdwn, amdwn, amup, dta, dqa, wgen, &
    213215    sigd0, Cin, &
    214     dtw, dqw, sigmaw, awdens, wdens, &                                   ! state variables
     216    dtw, dqw, sigmaw, awdens, wdens, &                      ! state variables
    215217    dth, hw, wape, fip, gfl, &
    216218    dtls, dqls, ktopw, omgbdth, dp_omgb, tx, qx, &
    217219    dtke, dqke, omg, dp_deltomg, spread, cstar, &
    218220    d_deltat_gw, &
    219     d_deltatw, d_deltaqw, d_sigmaw, d_awdens, d_wdens)                     ! tendencies
     221    d_deltatw, d_deltaqw, d_sigmaw, d_awdens, d_wdens)      ! tendencies
    220222
    221223!
  • LMDZ6/trunk/libf/phylmd/physiq_mod.F90

    r4083 r4085  
    7878    USE write_field_phy
    7979    USE lscp_mod, ONLY : lscp
     80    USE wake_ini_mod, ONLY : wake_ini
    8081
    8182    !USE cmp_seri_mod
     
    17251726!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
    17261727       ! Nouvelle initialisation pour le rayonnement RRTM
    1727        !
    17281728!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
    17291729
    17301730       CALL iniradia(klon,klev,paprs(1,1:klev+1))
     1731
     1732!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
     1733       CALL wake_ini(rg,rd,rv,prt_level)
     1734!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
     1735
    17311736       !
    17321737!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
     
    21452150      sollwdown(:)= sollwdown(:) + betalwoff *(-1.*ZFLDN0(:,1) - &
    21462151                    sollwdown(:))
     2152
    21472153
    21482154
  • LMDZ6/trunk/libf/phylmd/wake.F90

    r3648 r4085  
    22! $Id$
    33
    4 SUBROUTINE wake(znatsurf, p, ph, pi, dtime, &
    5                 te0, qe0, omgb, &
     4
     5SUBROUTINE wake(klon,klev,znatsurf, p, ph, pi, dtime, &
     6                tenv0, qe0, omgb, &
    67                dtdwn, dqdwn, amdwn, amup, dta, dqa, wgen, &
    78                sigd_con, Cin, &
     
    910                dth, hw, wape, fip, gfl, &
    1011                dtls, dqls, ktopw, omgbdth, dp_omgb, tu, qu, &
    11                 dtke, dqke, omg, dp_deltomg, spread, cstar, &
     12                dtke, dqke, omg, dp_deltomg, wkspread, cstar, &
    1213                d_deltat_gw, &
    1314                d_deltatw2, d_deltaqw2, d_sigmaw2, d_awdens2, d_wdens2)     ! tendencies
     
    2324  ! **************************************************************
    2425
    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
    2935  IMPLICIT NONE
    3036  ! ============================================================================
     
    5763  ! omg    : Delta_omg =vertical velocity diff. wake-undist. (Pa/s)
    5864  ! dp_deltomg  : vertical gradient of omg (s-1)
    59   ! spread  : spreading term in d_t_wake and d_q_wake
     65  ! wkspread  : spreading term in d_t_wake and d_q_wake
    6066  ! deltatw     : updated temperature difference (T_w-T_u).
    6167  ! deltaqw     : updated humidity difference (q_w-q_u).
     
    6672
    6773  ! aire : aire de la maille
    68   ! te0  : temperature dans l'environnement  (K)
     74  ! tenv0  : temperature dans l'environnement  (K)
    6975  ! qe0  : humidite dans l'environnement     (kg/kg)
    7076  ! omgb : vitesse verticale moyenne sur la maille (Pa/s)
     
    9096  ! rho  : environment density at P levels
    9197  ! rhoh : environment density at Ph levels
    92   ! te   : environment temperature | may change within
     98  ! tenv   : environment temperature | may change within
    9399  ! qe   : environment humidity    | sub-time-stepping
    94100  ! the  : environment potential temperature
     
    121127  ! -------------------------------------------------------------------------
    122128
    123   include "YOMCST.h"
    124   include "cvthermo.h"
    125129
    126130  ! Arguments en entree
    127131  ! --------------------
    128132
     133  INTEGER, INTENT(IN) :: klon,klev
    129134  INTEGER, DIMENSION (klon),        INTENT(IN)          :: znatsurf
    130135  REAL, DIMENSION (klon, klev),     INTENT(IN)          :: p, pi
     
    132137  REAL, DIMENSION (klon, klev),     INTENT(IN)          :: omgb
    133138  REAL,                             INTENT(IN)          :: dtime
    134   REAL, DIMENSION (klon, klev),     INTENT(IN)          :: te0, qe0
     139  REAL, DIMENSION (klon, klev),     INTENT(IN)          :: tenv0, qe0
    135140  REAL, DIMENSION (klon, klev),     INTENT(IN)          :: dtdwn, dqdwn
    136141  REAL, DIMENSION (klon, klev),     INTENT(IN)          :: amdwn, amup
     
    155160  REAL, DIMENSION (klon, klev),     INTENT(OUT)         :: dtls, dqls
    156161  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)
    158163  REAL, DIMENSION (klon, klev),     INTENT(OUT)         :: omgbdth, omg
    159164  REAL, DIMENSION (klon, klev),     INTENT(OUT)         :: dp_omgb, dp_deltomg
     
    169174
    170175  ! Variables à fixer
    171   INTEGER, SAVE                                         :: igout
    172   !$OMP THREADPRIVATE(igout)
    173   LOGICAL, SAVE                                         :: first = .TRUE.
    174   !$OMP THREADPRIVATE(first)
    175 !jyg<
    176 !!  REAL, SAVE                                            :: stark, wdens_ref, coefgw, alpk
    177   REAL, SAVE, DIMENSION(2)                              :: wdens_ref
    178   REAL, SAVE                                            :: stark, coefgw, alpk
    179 !>jyg
    180   REAL, SAVE                                            :: crep_upper, crep_sol 
    181   !$OMP THREADPRIVATE(stark, wdens_ref, coefgw, alpk, crep_upper, crep_sol)
    182 
    183   REAL, SAVE                                            :: tau_cv
    184   !$OMP THREADPRIVATE(tau_cv)
    185   REAL, SAVE                                            :: rzero, aa0 ! minimal wake radius and area
    186   !$OMP THREADPRIVATE(rzero, aa0)
    187 
    188   LOGICAL, SAVE                                         :: flag_wk_check_trgl
    189   !$OMP THREADPRIVATE(flag_wk_check_trgl)
    190   INTEGER, SAVE                                         :: iflag_wk_check_trgl
    191   !$OMP THREADPRIVATE(iflag_wk_check_trgl)
    192   INTEGER, SAVE                                         :: iflag_wk_pop_dyn
    193   !$OMP THREADPRIVATE(iflag_wk_pop_dyn)
    194176
    195177  REAL                                                  :: delta_t_min
    196178  INTEGER                                               :: nsub
    197179  REAL                                                  :: dtimesub
    198   REAL, SAVE                                            :: wdensmin
    199   !$OMP THREADPRIVATE(wdensmin)
    200   REAL, SAVE                                            :: sigmad, hwmin, wapecut, cstart
    201   !$OMP THREADPRIVATE(sigmad, hwmin, wapecut, cstart)
    202   REAL, SAVE                                            :: sigmaw_max
    203   !$OMP THREADPRIVATE(sigmaw_max) 
    204   REAL, SAVE                                            :: dens_rate
    205   !$OMP THREADPRIVATE(dens_rate)
    206180  REAL                                                  :: wdens0
    207181  ! IM 080208
     
    211185  REAL, DIMENSION (klon, klev)                          :: deltatw0
    212186  REAL, DIMENSION (klon, klev)                          :: deltaqw0
    213   REAL, DIMENSION (klon, klev)                          :: te, qe
     187  REAL, DIMENSION (klon, klev)                          :: tenv, qe
    214188!!  REAL, DIMENSION (klon)                                :: sigmaw1
    215189
     
    222196  REAL, DIMENSION(klon)                                 :: wape1_act, wape2_act
    223197  LOGICAL, DIMENSION (klon)                             :: kill_wake
    224   INTEGER, SAVE                                         :: iflag_wk_act
    225   !$OMP THREADPRIVATE(iflag_wk_act)
    226198  REAL                                                  :: drdt_pos
    227199  REAL                                                  :: tau_wk_inv_min
     
    246218  ! Sub-timestep tendencies and related variables
    247219  REAL, DIMENSION (klon, klev)                          :: d_deltatw, d_deltaqw
    248   REAL, DIMENSION (klon, klev)                          :: d_te, d_qe
     220  REAL, DIMENSION (klon, klev)                          :: d_tenv, d_qe
    249221  REAL, DIMENSION (klon)                                :: d_awdens, d_wdens
    250222  REAL, DIMENSION (klon)                                :: d_sigmaw, alpha
    251223  REAL, DIMENSION (klon)                                :: q0_min, q1_min
    252224  LOGICAL, DIMENSION (klon)                             :: wk_adv, ok_qx_qw
    253   REAL, SAVE                                            :: epsilon
    254   !$OMP THREADPRIVATE(epsilon)
    255   DATA epsilon/1.E-15/
    256225
    257226  ! Autres variables internes
    258   INTEGER                                               ::isubstep, k, i
     227  INTEGER                                               ::isubstep, k, i, igout
    259228
    260229  REAL                                                  :: wdens_targ
     
    307276  REAL, DIMENSION(klon)                                 :: awdens_in, wdens_in   ! pour les prints
    308277
     278
    309279  ! -------------------------------------------------------------------------
    310280  ! Initialisations
    311281  ! -------------------------------------------------------------------------
    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 nrlmd
    324   DATA sigmaw_max/0.4/
    325   DATA dens_rate/0.1/
    326   ! cc
    327   ! Longueur de maille (en m)
    328   ! -------------------------------------------------------------------------
    329 
    330   ! ALON = 3.e5
    331   ! alon = 1.E6
    332 
    333282  !  Provisionnal; to be suppressed when f_shear is parameterized
    334283  f_shear(:) = 1.       ! 0. for strong shear, 1. for weak shear
     
    353302  ! alpk = 0.05
    354303
    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
    427306
    428307 IF (iflag_wk_pop_dyn == 0) THEN
     
    457336!!      deltatw0(i, k) = deltatw(i, k)
    458337!!      deltaqw0(i, k) = deltaqw(i, k)
    459 !!      te(i, k) = te0(i, k)
     338!!      tenv(i, k) = tenv0(i, k)
    460339!!      qe(i, k) = qe0(i, k)
    461340!!      dtls(i, k) = 0.
    462341!!      dqls(i, k) = 0.
    463342!!      d_deltat_gw(i, k) = 0.
    464 !!      d_te(i, k) = 0.
     343!!      d_tenv(i, k) = 0.
    465344!!      d_qe(i, k) = 0.
    466345!!      d_deltatw(i, k) = 0.
     
    475354      deltatw0(:,:) = deltatw(:,:)
    476355      deltaqw0(:,:) = deltaqw(:,:)
    477       te(:,:) = te0(:,:)
     356      tenv(:,:) = tenv0(:,:)
    478357      qe(:,:) = qe0(:,:)
    479358      dtls(:,:) = 0.
    480359      dqls(:,:) = 0.
    481360      d_deltat_gw(:,:) = 0.
    482       d_te(:,:) = 0.
     361      d_tenv(:,:) = 0.
    483362      d_qe(:,:) = 0.
    484363      d_deltatw(:,:) = 0.
     
    547426dtke(:,:) = 0.
    548427dqke(:,:) = 0.
    549 spread(:,:) = 0.
     428wkspread(:,:) = 0.
    550429omgbdth(:,:) = 0.
    551430omg(:,:) = 0.
     
    618497  DO k = 1, klev
    619498    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))
    622501      ! write(*,*)'wake 2',rho(i,k)
    623502      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)
    627506        zhh(i, k) = 0
    628507      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)))
    631510        ! 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)
    633512      END IF
    634513      ! 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)
    638517      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)))
    641520      dth(i, k) = deltatw(i, k)/ppi(i, k)
    642521    END DO
     
    648527        n2(i, k) = 0
    649528      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))/ &
    651530                             (p(i,k+1)-p(i,k-1)))
    652531      END IF
     
    676555
    677556  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.
    680559    rhow_moyen(i, 1) = rhow(i, 1)
    681560  END DO
     
    683562  DO k = 2, klev
    684563    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.
    686565      epaisseur2(i, k) = epaisseur2(i, k-1) + epaisseur1(i, k)
    687566      rhow_moyen(i, k) = (rhow_moyen(i,k-1)*epaisseur2(i,k-1)+rhow(i,k)* &
     
    735614  DO k = 1, klev
    736615    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)
    738617      IF (dz(i)>0) THEN
    739618        z(i) = z(i) + dz(i)
     
    760639  DO k = 1, klev
    761640    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))
    763642      IF (dz(i)>0) THEN
    764643        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)
    766645      END IF
    767646    END DO
     
    856735  DO k = 1, klev
    857736    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)
    859738      IF (dz(i)>0) THEN
    860739        z(i) = z(i) + dz(i)
     
    896775    av_dqdwn(i) = sum_dqdwn(i)/hw0(i)
    897776
    898     wape(i) = -rg*hw0(i)*(av_dth(i)+ &
     777    wape(i) = -RG*hw0(i)*(av_dth(i)+ &
    899778        epsim1*(av_thu(i)*av_dq(i)+av_dth(i)*av_qu(i)+av_dth(i)*av_dq(i)))/av_thvu(i)
    900779
     
    1002881      ! c     $           isubstep,wk_adv(i),cstar(i),wape(i)
    1003882      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))
    1006885        wdens0 = (sigmaw(i)/(4.*3.14))* &
    1007886          ((1.-sigmaw(i))*omg(i,kupper(i)+1)/((ph(i,1)-pupper(i))*cstar(i)))**(2)
     
    11541033      DO i = 1, klon
    11551034        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)
    11571036          z(i) = z(i) + dz(i)
    11581037          dp_deltomg(i, k) = dp_deltomg(i, 1)
     
    11641043    DO i = 1, klon
    11651044      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)
    11671046        ztop(i) = z(i) + dztop(i)
    11681047        omgtop(i) = dp_deltomg(i, 1)*ztop(i)
     
    11821061    DO i = 1, klon
    11831062      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)
    11851064        dp_deltomg(i, 1) = omgtop(i)/(ptop(i)-ph(i,1))
    11861065      END IF
     
    11901069      DO i = 1, klon
    11911070        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)
    11931072          dp_deltomg(i, k) = dp_deltomg(i, 1)
    11941073        END IF
     
    12001079    DO i = 1, klon
    12011080      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))
    12041083        dp_deltomg(i, kupper(i)) = (omgtop(i)-omg(i,kupper(i)+1))/ &
    12051084          (ptop(i)-pupper(i))
     
    13681247          ! C
    13691248          ! -----------------------------------------------------------------
    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)- &
    13711250                                  rre2(i)*omg(i,k+1)*(1.-sigmaw(i))*d_th2(i,k+1))/ &
    13721251                                 (ph(i,k)-ph(i,k+1)) &
     
    13801259                                 (ph(i,k)-ph(i,k+1)) )
    13811260        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)
    13831262
    13841263          d_qe(i, k) = dtimesub*(rre1(i)*omg(i,k)*sigmaw(i)*d_q1(i,k)/(ph(i,k)-ph(i,k+1)))
     
    14691348                         sigmaw(i)*(1.-sigmaw(i))*dp_deltomg(i, k)   
    14701349!>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) =
    14741353          ! (1.-sigmaw(i))*dp_deltomg(i,k)+gfl(i)*Cstar(i)/
    14751354          ! cc     $  sigmaw(i)
     
    14881367          ! Sans GW
    14891368
    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))
    14911370
    14921371          ! GW formule 1
    14931372
    14941373          ! 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))
    14961375
    14971376          ! GW formule 2
     
    15301409    ! Scale tendencies so that water vapour remains positive in w and x.
    15311410
    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, &
    15331412      d_deltaqw, sigmaw, d_sigmaw, alpha)
    15341413
     
    15421421      DO i = 1, klon
    15431422        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)
    15451424          d_qe(i, k) = alpha(i)*d_qe(i, k)
    15461425          d_deltatw(i, k) = alpha(i)*d_deltatw(i, k)
     
    15621441      DO i = 1, klon
    15631442        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)
    15651444          dqls(i, k) = dqls(i, k) + d_qe(i, k)
    15661445          ! cc nrlmd
     
    15741453      DO i = 1, klon
    15751454        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)
    15771456          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)
    15791458          deltatw(i, k) = deltatw(i, k) + d_deltatw(i, k)
    15801459          deltaqw(i, k) = deltaqw(i, k) + d_deltaqw(i, k)
     
    16581537      DO i = 1, klon
    16591538        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)
    16611540          IF (dz(i)>0) THEN
    16621541            z(i) = z(i) + dz(i)
     
    16891568      DO i = 1, klon
    16901569        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))
    16921571          IF (dz(i)>0) THEN
    16931572            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)
    16951574            ktop(i) = k
    16961575          END IF
     
    17891668      DO i = 1, klon
    17901669        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)
    17921671          IF (dz(i)>0) THEN
    17931672            z(i) = z(i) + dz(i)
     
    18321711        av_dqdwn(i) = sum_dqdwn(i)/hw0(i)
    18331712
    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) + &
    18351714                              av_dth(i)*av_qu(i)+av_dth(i)*av_dq(i)))/av_thvu(i)
    18361715      END IF
     
    19271806      IF (ok_qx_qw(i)) THEN
    19281807        ! cc
    1929         rho(i, k) = p(i, k)/(rd*te(i,k))
     1808        rho(i, k) = p(i, k)/(RD*tenv(i,k))
    19301809        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))
    19321811          zhh(i, k) = 0
    19331812        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)
    19401819        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)))
    19421821        dth(i, k) = deltatw(i, k)/ppi(i, k)
    19431822      END IF
     
    19671846      IF (ok_qx_qw(i)) THEN
    19681847        ! 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)
    19711850        IF (dz(i)>0) THEN
    19721851          z(i) = z(i) + dz(i)
     
    20171896      av_dqdwn(i) = sum_dqdwn(i)/hw0(i)
    20181897
    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) + &
    20201899                             av_dth(i)*av_qu(i)+av_dth(i)*av_dq(i)))/av_thvu(i)
    20211900    END IF
     
    22242103    END DO
    22252104  END DO
    2226 !jyg<
     2105
    22272106  DO i = 1, klon
    22282107    d_sigmaw2(i) = d_sigmaw2(i)/dtime
     
    22302109    d_wdens2(i) = d_wdens2(i)/dtime
    22312110  ENDDO
    2232 !>jyg
    2233 
    2234 
    2235 
    2236   RETURN
     2111
     2112 RETURN
    22372113END SUBROUTINE wake
    22382114
    2239 SUBROUTINE wake_vec_modulation(nlon, nl, wk_adv, epsilon, qe, d_qe, deltaqw, &
     2115SUBROUTINE wake_vec_modulation(nlon, nl, wk_adv, epsilon_loc, qe, d_qe, deltaqw, &
    22402116    d_deltaqw, sigmaw, d_sigmaw, alpha)
    22412117  ! ------------------------------------------------------
     
    22582134  REAL alpha1(nlon)
    22592135  REAL x, a, b, c, discrim
    2260   REAL epsilon
    2261   ! DATA epsilon/1.e-15/
     2136  REAL epsilon_loc
    22622137  INTEGER i,k
    22632138
     
    22802155        b = d_qe(i, k) + (zeta(i,k)-sigmaw(i))*d_deltaqw(i, k) - &
    22812156          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
    22832158        discrim = b*b - 4.*a*c
    22842159        ! print*, 'x, a, b, c, discrim', x, a, b, c, discrim
     
    23082183  RETURN
    23092184END SUBROUTINE wake_vec_modulation
    2310 
    2311 
    2312 
    2313 
  • LMDZ6/trunk/makelmdz

    r3997 r4085  
    692692echo suf_make $suf_make
    693693
     694########################################################################
     695# (re)Creation du makefile
     696########################################################################
     697
     698echo "Controle de la necessite de recreer le makefile"
    694699\rm tmp77 tmp90
    695700for 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
    698710done
    699711
     
    715727  \mv -f tmp $makefile
    716728  echo "New makefile created"
    717 fi
     729else
     730  echo Pas besoin de recreer le makefile
     731fi
     732
    718733
    719734ln -sf $makefile makefile
    720 
    721 #Create a .makelmdz file containing main compilation option for later comparisons
    722735echo "$lmdz_configuration" > .makelmdz
    723736
Note: See TracChangeset for help on using the changeset viewer.