Changeset 5293 for LMDZ6/trunk


Ignore:
Timestamp:
Oct 28, 2024, 5:10:20 PM (2 months ago)
Author:
abarral
Message:

Move calcul_divers.h to module

Location:
LMDZ6/trunk/libf
Files:
2 edited
2 moved

Legend:

Unmodified
Added
Removed
  • LMDZ6/trunk/libf/phylmd/calcul_divers_mod_h.f90

    r5292 r5293  
    1 !
    2 ! $Id$
    3 !
    4 ! itap : nombre de pas de temps de la physique
    5 ! itapm1 : somme du nombre de pas de temps du/des mois precedent/s.
    6 ! (itap - itapm1) : nombre de pas de temps du mois courant
    7 !
    8 ! Ne pas modifier les IFs ci-dessous impliquant itapm1,
    9 ! autrement les resultats seront faux !!
    10 !
    11 ! Ici on utilise MOD(itap - itapm1,NINT(mth_len*un_jour/phys_tstep)).EQ.1)
    12 ! pour detecter le debut de chaque mois lorsque  l on tourne par an.
    13 !
    14 ! IM, 26.05.2023
    15 !
    16 !
    17 ! Initialisations itapm1 du premier mois
    18       IF(itap.EQ.1) THEN
    19          itapm1=0
    20 !        print*,'initialisation itap=1 itapm1 ',itapm1
    21       ENDIF
     1MODULE calcul_divers_mod_h
     2  IMPLICIT NONE; PRIVATE
     3  PUBLIC calcul_divers
    224
    23 !
    24 ! Initialisation debut de mois
    25       IF(itap.EQ.itapm1+1) THEN
    26          ndayrain_mth(:)=0.
    27 !        print*,'Initialisation ndayrain_mth ',itap
    28       ENDIF
    29 !
    30 ! Initialisation debut de chaque jour
    31       IF(MOD(itap,NINT(un_jour/phys_tstep)).EQ.1) THEN
    32         nday_rain(:)=0.
    33 !       print*,'initialisation mois suivants day_rain itap',itap
    34       ENDIF
    35 !
    36 ! Calcul a chaque pas de temps de la physique
    37          DO i = 1, klon
    38             total_rain(i)=rain_fall(i)+snow_fall(i) 
    39             IF(total_rain(i).GT.0.) nday_rain(i)=1.
    40          ENDDO
    41 !
    42 ! Cumul en fin de journee
    43       IF(MOD(itap,NINT(un_jour/phys_tstep)).EQ.0) THEN
    44          DO i = 1, klon
    45             ndayrain_mth(i)=ndayrain_mth(i)+nday_rain(i)
    46          ENDDO
    47       ENDIF
    48 !
    49 ! Initialisation fin de mois
    50 ! Ne pas changer le IF ci-dessous, car le compteur itapm1 est augmente
    51 ! apres, dans la boucle !!!
    52 ! IM, 260523
    53       IF(MOD(itap-itapm1,NINT(mth_len*un_jour/phys_tstep)).EQ.0) THEN
    54         itapm1=itapm1+NINT(mth_len*un_jour/phys_tstep)
    55 !       print*,'fmois i i1 mjt',itap,itapm1,mth_len,un_jour,phys_tstep
    56       ENDIF
    57 !
    58 ! calcul temperatures minimale et maximale moyennees sur le mois
    59 !
    60 !initialisation debut de mois pour les fichiers mensuels annuels
    61   IF(itap.EQ.itapm1+1) THEN
    62      t2m_min_mon=0.
    63      t2m_max_mon=0.
    64   ENDIF
    65 !
    66 !initialisation debut de journee pour les fichiers mensuels annuels
    67   IF(MOD(itap,NINT(un_jour/phys_tstep)).EQ.1) THEN
    68      zt2m_min_mon=zt2m
    69      zt2m_max_mon=zt2m
    70   ENDIF
    71 !
    72 !calcul sur tous les pas de temps pour les fichiers mensuels annuels
    73      DO i = 1, klon
    74         zt2m_min_mon(i)=MIN(zt2m(i),zt2m_min_mon(i))
    75         zt2m_max_mon(i)=MAX(zt2m(i),zt2m_max_mon(i))
    76      ENDDO
    77 !
    78 !fin journee
    79   IF(MOD(itap,NINT(un_jour/phys_tstep)).EQ.0) THEN
    80    t2m_min_mon=t2m_min_mon+zt2m_min_mon
    81    t2m_max_mon=t2m_max_mon+zt2m_max_mon
    82   ENDIF
    83 !
    84 !fin mois
    85   IF(itap==itapm1) THEN
    86    t2m_min_mon=t2m_min_mon/mth_len
    87    t2m_max_mon=t2m_max_mon/mth_len
    88   ENDIF
    89 !
     5CONTAINS
     6
     7  SUBROUTINE calcul_divers(itap, itapm1, un_jour)
     8    ! IM, 26.05.2023
     9    ! Ne pas modifier les IFs ci-dessous impliquant itapm1,
     10    ! autrement les resultats seront faux !!
     11
     12    ! On utilise MOD(itap - itapm1,NINT(mth_len*un_jour/phys_tstep)).EQ.1)
     13    ! pour detecter le debut de chaque mois lorsque l'on tourne par an.
     14
     15    ! itap : nombre de pas de temps de la physique
     16    ! itapm1 : somme du nombre de pas de temps du/des mois precedent/s.
     17    ! (itap - itapm1) : nombre de pas de temps du mois courant
     18    USE dimphy, ONLY: klon
     19    USE phys_state_var_mod, ONLY: phys_tstep, ndayrain_mth, nday_rain, total_rain, rain_fall, snow_fall
     20    USE phys_local_var_mod, ONLY: t2m_min_mon, t2m_max_mon, zt2m_min_mon, zt2m_max_mon, zt2m
     21    USE phys_cal_mod, ONLY: mth_len
     22
     23    IMPLICIT NONE
     24
     25    INTEGER, INTENT(IN) :: itap
     26    INTEGER, INTENT(INOUT) :: itapm1
     27    REAL, INTENT(IN) :: un_jour
     28
     29    INTEGER :: i
     30
     31    ! Initialisations itapm1 du premier mois
     32    IF(itap==1) THEN
     33      itapm1 = 0
     34      !        PRINT*,'initialisation itap=1 itapm1 ',itapm1
     35    ENDIF
     36
     37    ! Initialisation debut de mois
     38    IF(itap==itapm1 + 1) THEN
     39      ndayrain_mth(:) = 0.
     40      !        PRINT*,'Initialisation ndayrain_mth ',itap
     41    ENDIF
     42
     43    ! Initialisation debut de chaque jour
     44    IF(MOD(itap, NINT(un_jour / phys_tstep))==1) THEN
     45      nday_rain(:) = 0.
     46      !       PRINT*,'initialisation mois suivants day_rain itap',itap
     47    ENDIF
     48
     49    ! Calcul a chaque pas de temps de la physique
     50    DO i = 1, klon
     51      total_rain(i) = rain_fall(i) + snow_fall(i)
     52      IF(total_rain(i)>0.) nday_rain(i) = 1.
     53    ENDDO
     54
     55    ! Cumul en fin de journee
     56    IF(MOD(itap, NINT(un_jour / phys_tstep))==0) THEN
     57      DO i = 1, klon
     58        ndayrain_mth(i) = ndayrain_mth(i) + nday_rain(i)
     59      ENDDO
     60    ENDIF
     61
     62    ! Initialisation fin de mois
     63    ! Ne pas changer le IF ci-dessous, car le compteur itapm1 est augmente
     64    ! apres, dans la boucle !!!
     65    ! IM, 260523
     66    IF(MOD(itap - itapm1, NINT(mth_len * un_jour / phys_tstep))==0) THEN
     67      itapm1 = itapm1 + NINT(mth_len * un_jour / phys_tstep)
     68      !       PRINT*,'fmois i i1 mjt',itap,itapm1,mth_len,un_jour,phys_tstep
     69    ENDIF
     70
     71    ! calcul temperatures minimale et maximale moyennees sur le mois
     72
     73    !initialisation debut de mois pour les fichiers mensuels annuels
     74    IF(itap==itapm1 + 1) THEN
     75      t2m_min_mon = 0.
     76      t2m_max_mon = 0.
     77    ENDIF
     78
     79    !initialisation debut de journee pour les fichiers mensuels annuels
     80    IF(MOD(itap, NINT(un_jour / phys_tstep))==1) THEN
     81      zt2m_min_mon = zt2m
     82      zt2m_max_mon = zt2m
     83    ENDIF
     84
     85    !calcul sur tous les pas de temps pour les fichiers mensuels annuels
     86    DO i = 1, klon
     87      zt2m_min_mon(i) = MIN(zt2m(i), zt2m_min_mon(i))
     88      zt2m_max_mon(i) = MAX(zt2m(i), zt2m_max_mon(i))
     89    ENDDO
     90
     91    !fin journee
     92    IF(MOD(itap, NINT(un_jour / phys_tstep))==0) THEN
     93      t2m_min_mon = t2m_min_mon + zt2m_min_mon
     94      t2m_max_mon = t2m_max_mon + zt2m_max_mon
     95    ENDIF
     96
     97    !fin mois
     98    IF(itap==itapm1) THEN
     99      t2m_min_mon = t2m_min_mon / mth_len
     100      t2m_max_mon = t2m_max_mon / mth_len
     101    ENDIF
     102
     103  END SUBROUTINE calcul_divers
     104
     105END MODULE calcul_divers_mod_h
  • LMDZ6/trunk/libf/phylmd/physiq_mod.F90

    r5285 r5293  
    1818! For clarity, the "USE" section is now arranged in alphabetical order,
    1919! with a separate section for CPP keys
    20 ! PLEASE try to follow this rule 
     20! PLEASE try to follow this rule
    2121
    2222    USE ACAMA_GWD_rando_m, only: ACAMA_GWD_rando
     
    8484    USE lmdz_thermcell_ini, ONLY : thermcell_ini, iflag_thermals_tenv
    8585    USE lmdz_thermcell_dtke, ONLY : thermcell_dtke
    86     USE lmdz_blowing_snow_ini, ONLY : blowing_snow_ini , qbst_bs 
     86    USE lmdz_blowing_snow_ini, ONLY : blowing_snow_ini , qbst_bs
    8787    USE lmdz_lscp_ini, ONLY : lscp_ini
    8888    USE lmdz_ratqs_main, ONLY : ratqs_main
     
    143143       t_seri,q_seri,ql_seri,qs_seri,qbs_seri, &
    144144       u_seri,v_seri,cf_seri,rvc_seri,tr_seri, &
    145        rhcl, &       
     145       rhcl, &
    146146       ! Dynamic tendencies (diagnostics)
    147147       d_t_dyn,d_q_dyn,d_ql_dyn,d_qs_dyn,d_qbs_dyn, &
     
    219219       topswai_aerop, solswai_aerop,   &
    220220       topswad0_aerop, solswad0_aerop, &
    221        topsw_aerop, topsw0_aerop,      & 
     221       topsw_aerop, topsw0_aerop,      &
    222222       solsw_aerop, solsw0_aerop,      &
    223223       topswcf_aerop, solswcf_aerop,   &
     
    250250       zustar, zu10m, zv10m, rh2m, qsat2m, &
    251251       zq2m, zt2m, zn2mout, weak_inversion, &
    252        zt2m_min_mon, zt2m_max_mon,   &         ! pour calcul_divers.h
    253        t2m_min_mon, t2m_max_mon,  &            ! pour calcul_divers.h
    254252       !
    255253       s_pblh_x, s_pblh_w, &
     
    275273       !
    276274       wake_k, &
    277        alp_wake, & 
     275       alp_wake, &
    278276       wake_h, wake_omg, &
    279277                       ! tendencies of delta T and delta q:
     
    287285!!!       d_s_vdf, d_dens_a_vdf, d_dens_vdf, & ! due to vertical diffusion
    288286!!!       d_s_the, d_dens_a_the, d_dens_the, & ! due to thermals
    289        !                                 
     287       !
    290288       ptconv, ratqsc, &
    291289       wbeff, convoccur, zmax_th, &
     
    338336       t2m, fluxlat,  &
    339337       fsollw, evap_pot,  &
    340        fsolsw, wfbils, wfevap, & 
     338       fsolsw, wfbils, wfevap, &
    341339       prfl, psfl,bsfl, fraca, Vprecip,  &
    342340       zw2,  &
     
    348346       wwriteSTD, phiwriteSTD, &              !pour calcul_STDlev.h
    349347       qwriteSTD, twriteSTD, rhwriteSTD, &    !pour calcul_STDlev.h
    350        ! 
     348       !
    351349       beta_prec,  &
    352350       rneb,  &
    353351       zxsnow,snowhgt,qsnow,to_ice,sissnow,runoff,albsol3_lic, &
    354        zxfluxt,zxfluxq 
     352       zxfluxt,zxfluxq
    355353       !
    356354       USE phys_local_var_mod, ONLY: zfice, dNovrN, ptconv
     
    363361       USE alpale_mod
    364362       USE yoethf_mod_h
     363       USE calcul_divers_mod_h, ONLY: calcul_divers
    365364
    366365    IMPLICIT NONE
     
    373372    !!AA                  -  uniformisation des parametrisations ds phytrac
    374373    !!AA                  -  stockage des moyennes des champs necessaires
    375     !!AA                     en mode traceur off-line 
     374    !!AA                     en mode traceur off-line
    376375    !!======================================================================
    377376    !!   CLEFS CPP POUR LES IO
     
    439438    ! Clef iflag_cycle_diurne controlant l'activation du cycle diurne:
    440439    ! en attente du codage des cles par Fred
    441     ! iflag_cycle_diurne est initialise par conf_phys et se trouve 
     440    ! iflag_cycle_diurne est initialise par conf_phys et se trouve
    442441    ! dans clesphys.h (IM)
    443442    !======================================================================
     
    472471    !$OMP THREADPRIVATE(ok_instan)
    473472    !
    474     LOGICAL ok_LES ! sortir le fichier LES 
    475     SAVE ok_LES                           
    476     !$OMP THREADPRIVATE(ok_LES)                 
    477     !
    478     LOGICAL callstats ! sortir le fichier stats 
    479     SAVE callstats                           
    480     !$OMP THREADPRIVATE(callstats)                 
     473    LOGICAL ok_LES ! sortir le fichier LES
     474    SAVE ok_LES
     475    !$OMP THREADPRIVATE(ok_LES)
     476    !
     477    LOGICAL callstats ! sortir le fichier stats
     478    SAVE callstats
     479    !$OMP THREADPRIVATE(callstats)
    481480    !
    482481    LOGICAL ok_region ! sortir le fichier regional
     
    486485    SAVE seuil_inversion
    487486    !$OMP THREADPRIVATE(seuil_inversion)
    488    
    489    
    490    
     487
     488
     489
    491490    real facteur
    492491
     
    551550!!    real wght_cvfd(klon,klev)
    552551!!    ! Variables pour le lessivage convectif
    553 !!    ! RomP >>> 
     552!!    ! RomP >>>
    554553!!    real phi2(klon,klev,klev)
    555554!!    real d1a(klon,klev),dam(klon,klev)
     
    572571    INTEGER n
    573572    !ym      INTEGER npoints
    574     !ym      PARAMETER(npoints=klon) 
     573    !ym      PARAMETER(npoints=klon)
    575574    !
    576575    INTEGER nregISCtot
    577     PARAMETER(nregISCtot=1) 
     576    PARAMETER(nregISCtot=1)
    578577    !
    579578    ! imin_debut, nbpti, jmin_debut, nbptj : parametres pour sorties
     
    584583    ! direction j (latitude)
    585584!JLD    INTEGER imin_debut, nbpti
    586 !JLD    INTEGER jmin_debut, nbptj 
     585!JLD    INTEGER jmin_debut, nbptj
    587586    !IM: region='3d' <==> sorties en global
    588587    CHARACTER*3 region
     
    673672    INTEGER,  SAVE               :: iflag_alp_wk_cond=0 ! wake: if =0, then Alp_wk is the average lifting
    674673                                                        ! power provided by the wakes; else, Alp_wk is the
    675                                                         ! lifting power conditionned on the presence of a 
     674                                                        ! lifting power conditionned on the presence of a
    676675                                                        ! gust-front in the grid cell.
    677676    !$OMP THREADPRIVATE(iflag_alp_wk_cond)
     
    696695    !
    697696!!!    INTEGER, SAVE, DIMENSION(klon)   :: wake_k
    698 !!!    !$OMP THREADPRIVATE(wake_k) 
     697!!!    !$OMP THREADPRIVATE(wake_k)
    699698    !
    700699    !jyg<
    701     !cc      REAL wake_pe(klon)              ! Wake potential energy - WAPE 
     700    !cc      REAL wake_pe(klon)              ! Wake potential energy - WAPE
    702701    !>jyg
    703702
     
    716715    REAL d_q_adjwk(klon,klev)                !jyg
    717716    LOGICAL,SAVE :: ok_adjwk=.FALSE.
    718     !$OMP THREADPRIVATE(ok_adjwk) 
     717    !$OMP THREADPRIVATE(ok_adjwk)
    719718    INTEGER,SAVE :: iflag_adjwk=0            !jyg
    720719    !$OMP THREADPRIVATE(iflag_adjwk)         !jyg
    721720    REAL,SAVE :: oliqmax=999.,oicemax=999.
    722     !$OMP THREADPRIVATE(oliqmax,oicemax) 
     721    !$OMP THREADPRIVATE(oliqmax,oicemax)
    723722    REAL, SAVE :: alp_offset
    724723    !$OMP THREADPRIVATE(alp_offset)
     
    728727    !$OMP THREADPRIVATE(dqcon_multistep_max)
    729728
    730  
     729
    731730    !
    732731    !RR:fin declarations poches froides
     
    735734    REAL ztv(klon,klev),ztva(klon,klev)
    736735    REAL zpspsk(klon,klev)
    737     REAL ztla(klon,klev),zqla(klon,klev) 
     736    REAL ztla(klon,klev),zqla(klon,klev)
    738737    REAL zthl(klon,klev)
    739738
     
    741740
    742741    !--------Stochastic Boundary Layer Triggering: ALE_BL--------
    743     !---Propri\'et\'es du thermiques au LCL 
     742    !---Propri\'et\'es du thermiques au LCL
    744743!    real zlcl_th(klon)          ! Altitude du LCL calcul\'e
    745744    ! continument (pcon dans
     
    749748    real w_conv(klon)           ! Vitesse verticale de grande \'echelle au LCL
    750749    real tke0(klon,klev+1)      ! TKE au d\'ebut du pas de temps
    751     real therm_tke_max0(klon)   ! TKE dans les thermiques au LCL 
    752     real env_tke_max0(klon)     ! TKE dans l'environnement au LCL 
     750    real therm_tke_max0(klon)   ! TKE dans les thermiques au LCL
     751    real env_tke_max0(klon)     ! TKE dans l'environnement au LCL
    753752    INTEGER, SAVE :: iflag_thermcell_tke ! transtport TKE by thermals
    754753    !$OMP THREADPRIVATE(iflag_thermcell_tke)
     
    758757
    759758    REAL,SAVE :: random_notrig_max=1.
    760     !$OMP THREADPRIVATE(random_notrig_max) 
     759    !$OMP THREADPRIVATE(random_notrig_max)
    761760
    762761    !--------Statistical Boundary Layer Closure: ALP_BL--------
     
    767766    !-------Activer les tendances de TKE due a l'orograp??ie---------
    768767     INTEGER, SAVE :: addtkeoro
    769     !$OMP THREADPRIVATE(addtkeoro) 
     768    !$OMP THREADPRIVATE(addtkeoro)
    770769     REAL, SAVE :: alphatkeoro
    771     !$OMP THREADPRIVATE(alphatkeoro) 
     770    !$OMP THREADPRIVATE(alphatkeoro)
    772771     LOGICAL, SAVE :: smallscales_tkeoro
    773     !$OMP THREADPRIVATE(smallscales_tkeoro) 
     772    !$OMP THREADPRIVATE(smallscales_tkeoro)
    774773
    775774
     
    786785    !
    787786    !AA
    788     !AA  Pour phytrac 
     787    !AA  Pour phytrac
    789788    REAL u1(klon)             ! vents dans la premiere couche U
    790789    REAL v1(klon)             ! vents dans la premiere couche V
     
    795794    REAL frac_impa(klon,klev) ! fractions d'aerosols lessivees (impaction)
    796795    REAL frac_nucl(klon,klev) ! idem (nucleation)
    797     ! RomP >>> 
     796    ! RomP >>>
    798797    REAL beta_prec_fisrt(klon,klev) ! taux de conv de l'eau cond (fisrt)
    799798    ! RomP <<<
     
    820819    INTEGER lmt_pas
    821820    SAVE lmt_pas                ! frequence de mise a jour
    822     !$OMP THREADPRIVATE(lmt_pas) 
    823     real zmasse(klon, nbp_lev),exner(klon, nbp_lev) 
     821    !$OMP THREADPRIVATE(lmt_pas)
     822    real zmasse(klon, nbp_lev),exner(klon, nbp_lev)
    824823    !     (column-density of mass of air in a cell, in kg m-2)
    825824    real, parameter:: dobson_u = 2.1415e-05 ! Dobson unit, in kg m-2
     
    866865    REAL radocond(klon,klev)  ! eau condensee nuageuse
    867866    !
    868     !XXX PB 
     867    !XXX PB
    869868    REAL fluxq(klon,klev, nbsrf)   ! flux turbulent d'humidite
    870869    REAL fluxqbs(klon,klev, nbsrf)   ! flux turbulent de neige soufflee
     
    919918    ! La convection n'est pas calculee tous les pas, il faut donc
    920919    !                      sauvegarder les sorties de la convection
    921     !ym      SAVE 
    922     !ym      SAVE 
    923     !ym      SAVE 
     920    !ym      SAVE
     921    !ym      SAVE
     922    !ym      SAVE
    924923    !
    925924    INTEGER itapcv, itapwk
     
    961960    REAL, DIMENSION(klon,klev)  :: d_q_ch4_dtime
    962961    !
    963     ! Flag pour pouvoir ne pas ajouter les tendances. 
     962    ! Flag pour pouvoir ne pas ajouter les tendances.
    964963    ! Par defaut, les tendances doivente etre ajoutees et
    965964    ! flag_inhib_tend = 0
    966     ! flag_inhib_tend > 0 : tendances non ajoutees, avec un nombre 
     965    ! flag_inhib_tend > 0 : tendances non ajoutees, avec un nombre
    967966    ! croissant de print quand la valeur du flag augmente
    968967    !!! attention, ce flag doit etre change avec prudence !!!
     
    970969!!    INTEGER :: flag_inhib_tend = 2
    971970    !
    972     ! Logical switch to a bug : reseting to 0 convective variables at the 
     971    ! Logical switch to a bug : reseting to 0 convective variables at the
    973972    ! begining of physiq.
    974973    LOGICAL, SAVE :: ok_bug_cv_trac = .TRUE.
     
    980979    !$OMP THREADPRIVATE(ok_bug_split_th)
    981980
    982     ! Logical switch to a bug : modifying directly wake_deltat  by adding 
     981    ! Logical switch to a bug : modifying directly wake_deltat  by adding
    983982    ! the (w) dry adjustment tendency to wake_deltat
    984983    LOGICAL, SAVE :: ok_bug_ajs_cv = .TRUE.
     
    10611060    !
    10621061    REAL zx_tmp_fi2d(klon)      ! variable temporaire grille physique
    1063     REAL zx_tmp_fi3d(klon,klev) ! variable temporaire pour champs 3D 
     1062    REAL zx_tmp_fi3d(klon,klev) ! variable temporaire pour champs 3D
    10641063!JLD    REAL zx_tmp_2d(nbp_lon,nbp_lat)
    10651064!JLD    REAL zx_lon(nbp_lon,nbp_lat)
     
    10961095    ! essai writephys
    10971096    INTEGER fid_day, fid_mth, fid_ins
    1098     PARAMETER (fid_ins = 1, fid_day = 2, fid_mth = 3) 
     1097    PARAMETER (fid_ins = 1, fid_day = 2, fid_mth = 3)
    10991098    INTEGER prof2d_on, prof3d_on, prof2d_av, prof3d_av
    11001099    PARAMETER (prof2d_on = 1, prof3d_on = 2, prof2d_av = 3, prof3d_av = 4)
     
    11111110    INTEGER :: naero
    11121111    ! Aerosol optical properties
    1113     CHARACTER*4, DIMENSION(naero_grp) :: rfname 
     1112    CHARACTER*4, DIMENSION(naero_grp) :: rfname
    11141113    REAL, DIMENSION(klon,klev)     :: mass_solu_aero ! total mass
    11151114    ! concentration
     
    11291128    LOGICAL, SAVE :: aerosol_couple ! true  : calcul des aerosols dans INCA
    11301129    ! false : lecture des aerosol dans un fichier
    1131     !$OMP THREADPRIVATE(aerosol_couple)   
    1132     LOGICAL, SAVE :: chemistry_couple ! true  : use INCA chemistry O3 
     1130    !$OMP THREADPRIVATE(aerosol_couple)
     1131    LOGICAL, SAVE :: chemistry_couple ! true  : use INCA chemistry O3
    11331132    ! false : use offline chemistry O3
    1134     !$OMP THREADPRIVATE(chemistry_couple)   
    1135     INTEGER, SAVE :: flag_aerosol 
    1136     !$OMP THREADPRIVATE(flag_aerosol) 
     1133    !$OMP THREADPRIVATE(chemistry_couple)
     1134    INTEGER, SAVE :: flag_aerosol
     1135    !$OMP THREADPRIVATE(flag_aerosol)
    11371136    LOGICAL, SAVE :: flag_bc_internal_mixture
    11381137    !$OMP THREADPRIVATE(flag_bc_internal_mixture)
     
    11911190    INTEGER, ALLOCATABLE, SAVE :: tabCFMIP(:)
    11921191    REAL, ALLOCATABLE, SAVE :: lonCFMIP(:), latCFMIP(:)
    1193     !$OMP THREADPRIVATE(tabCFMIP, lonCFMIP, latCFMIP) 
     1192    !$OMP THREADPRIVATE(tabCFMIP, lonCFMIP, latCFMIP)
    11941193    INTEGER, ALLOCATABLE, SAVE :: tabijGCM(:)
    11951194    REAL, ALLOCATABLE, SAVE :: lonGCM(:), latGCM(:)
     
    12301229
    12311230    !lwoff=y : offset LW CRE for radiation code and other schemes
    1232     REAL, SAVE :: betalwoff 
     1231    REAL, SAVE :: betalwoff
    12331232    !OMP THREADPRIVATE(betalwoff)
    12341233!
     
    12451244    !albedo SB <<<
    12461245
    1247     !--Lea Raillard qs_ini 
     1246    !--Lea Raillard qs_ini
    12481247    REAL, dimension(klon,klev) :: qs_ini
    12491248
     
    12911290    ! set-up call to alerte function
    12921291    call_alert = (alert_first_call .AND. is_master)
    1293    
     1292
    12941293    ! Ehouarn: set value of jjmp1 since it is no longer a "fixed parameter"
    12951294    jjmp1=nbp_lat
     
    13041303
    13051304    IF (using_xios) THEN
    1306       ! switch to XIOS LMDZ physics context 
     1305      ! switch to XIOS LMDZ physics context
    13071306      IF (.NOT. debut .AND. is_omp_master) THEN
    13081307        CALL wxios_set_context()
     
    13241323            'nlon,klev,nqtot,debut,lafin, jD_cur, jH_cur,pdtphys'
    13251324       write(lunout,*) &
    1326             nlon,klev,nqtot,debut,lafin, jD_cur, jH_cur,pdtphys 
     1325            nlon,klev,nqtot,debut,lafin, jD_cur, jH_cur,pdtphys
    13271326
    13281327       write(lunout,*) 'paprs, play, phi, u, v, t'
     
    13411340            "physiq_mod paprs bad order")
    13421341
    1343     IF (first) THEN 
     1342    IF (first) THEN
    13441343       ivap = strIdx(tracers(:)%name, addPhase('H2O', 'g'))
    13451344       iliq = strIdx(tracers(:)%name, addPhase('H2O', 'l'))
     
    13761375       CALL phys_state_var_init(read_climoz)
    13771376       CALL phys_output_var_init
    1378        IF (read_climoz>=1 .AND. create_etat0_limit .AND. grid_type==unstructured) & 
     1377       IF (read_climoz>=1 .AND. create_etat0_limit .AND. grid_type==unstructured) &
    13791378          CALL regr_horiz_time_climoz(read_climoz,ok_daily_climoz)
    13801379
     
    14371436    ENDIF  ! first
    14381437
    1439     !ym => necessaire pour iflag_con != 2   
     1438    !ym => necessaire pour iflag_con != 2
    14401439    pmfd(:,:) = 0.
    14411440    pen_u(:,:) = 0.
     
    14651464       call getin_p('iflag_thermcell_tke', iflag_thermcell_tke)                          !
    14661465
    1467        CALL getin_p('iflag_alp_wk_cond', iflag_alp_wk_cond) 
     1466       CALL getin_p('iflag_alp_wk_cond', iflag_alp_wk_cond)
    14681467       CALL getin_p('random_notrig_max',random_notrig_max)
    1469        CALL getin_p('ok_adjwk',ok_adjwk) 
     1468       CALL getin_p('ok_adjwk',ok_adjwk)
    14701469       IF (ok_adjwk) iflag_adjwk=2  ! for compatibility with older versions
    14711470       ! iflag_adjwk: ! 0 = Default: no convective adjustment of w-region
     
    14811480       iflag_wake_tend = 0
    14821481       CALL getin_p('iflag_wake_tend',iflag_wake_tend)
    1483        ok_bad_ecmwf_thermo=.TRUE. ! By default thermodynamical constants are set 
     1482       ok_bad_ecmwf_thermo=.TRUE. ! By default thermodynamical constants are set
    14841483                                  ! in rrtm/suphec.F90 (and rvtmp2 is set to 0).
    14851484       CALL getin_p('ok_bad_ecmwf_thermo',ok_bad_ecmwf_thermo)
     
    15091508       WRITE(lunout,*) 'ok_adjwk=',           ok_adjwk
    15101509       WRITE(lunout,*) 'iflag_adjwk=',        iflag_adjwk
    1511        WRITE(lunout,*) 'qtcon_multistep_max=',dtcon_multistep_max 
    1512        WRITE(lunout,*) 'qdcon_multistep_max=',dqcon_multistep_max 
     1510       WRITE(lunout,*) 'qtcon_multistep_max=',dtcon_multistep_max
     1511       WRITE(lunout,*) 'qdcon_multistep_max=',dqcon_multistep_max
    15131512       WRITE(lunout,*) 'ratqsp0=',            ratqsp0
    1514        WRITE(lunout,*) 'ratqsdp=',            ratqsdp 
     1513       WRITE(lunout,*) 'ratqsdp=',            ratqsdp
    15151514       WRITE(lunout,*) 'iflag_wake_tend=',    iflag_wake_tend
    1516        WRITE(lunout,*) 'ok_bad_ecmwf_thermo=',ok_bad_ecmwf_thermo 
    1517        WRITE(lunout,*) 'ok_bug_cv_trac=',     ok_bug_cv_trac 
     1515       WRITE(lunout,*) 'ok_bad_ecmwf_thermo=',ok_bad_ecmwf_thermo
     1516       WRITE(lunout,*) 'ok_bug_cv_trac=',     ok_bug_cv_trac
    15181517       WRITE(lunout,*) 'ok_bug_split_th=',    ok_bug_split_th
    15191518       WRITE(lunout,*) 'fl_ebil=',            fl_ebil
     
    15521551       !des caracteristiques du thermique
    15531552       wght_th(:,:)=1.
    1554        lalim_conv(:)=1 
     1553       lalim_conv(:)=1
    15551554       !RC
    15561555       ustar(:,:)=0.
     
    15781577          CALL getin_p('config_inca',config_inca)
    15791578
    1580        ELSE 
     1579       ELSE
    15811580          config_inca='none' ! default
    15821581       ENDIF
     
    16231622
    16241623       IF (iflag_pbl>1) THEN
    1625           PRINT*, "Using method MELLOR&YAMADA" 
     1624          PRINT*, "Using method MELLOR&YAMADA"
    16261625       ENDIF
    16271626
     
    16411640       IF (MOD(NINT(86400./phys_tstep),nbapp_rad).EQ.0) THEN
    16421641          radpas = NINT( 86400./phys_tstep)/nbapp_rad
    1643        ELSE 
     1642       ELSE
    16441643          WRITE(lunout,*) 'le nombre de pas de temps physique doit etre un ', &
    16451644               'multiple de nbapp_rad'
     
    16571656          cvpas = cvpas_0
    16581657       print *,'physiq, cvpas ',cvpas
    1659        ELSE 
     1658       ELSE
    16601659          WRITE(lunout,*) 'le nombre de pas de temps physique doit etre un ', &
    16611660               'multiple de nbapp_cv'
     
    16691668          wkpas = NINT( 86400./phys_tstep)/nbapp_wk
    16701669!       print *,'physiq, wkpas ',wkpas
    1671        ELSE 
     1670       ELSE
    16721671          WRITE(lunout,*) 'le nombre de pas de temps physique doit etre un ', &
    16731672               'multiple de nbapp_wk'
     
    17051704             ALLOCATE(iGCM(nCFMIP), jGCM(nCFMIP))
    17061705             !
    1707              ! lecture des nCFMIP stations CFMIP, de leur numero 
     1706             ! lecture des nCFMIP stations CFMIP, de leur numero
    17081707             ! et des coordonnees geographiques lonCFMIP, latCFMIP
    17091708             !
     
    17611760
    17621761       !XXXPB Positionner date0 pour initialisation de ORCHIDEE
    1763        date0 = jD_ref 
     1762       date0 = jD_ref
    17641763       WRITE(*,*) 'physiq date0 : ',date0
    17651764       !
     
    18111810               mr_ozone_cosp0,cldtau_cosp0, cldemi_cosp0)
    18121811END IF
    1813       ENDIF 
     1812      ENDIF
    18141813
    18151814       !
     
    18401839             IF (ok_cdnc.AND.NRADLP.NE.3) THEN
    18411840             abort_message='RRTM choix incoherent NRADLP doit etre egal a 3 ' &
    1842                   // 'pour ok_cdnc' 
     1841                  // 'pour ok_cdnc'
    18431842             CALL abort_physic(modname,abort_message,1)
    18441843             ENDIF
     
    18491848#endif
    18501849          ENDIF
    1851        ENDIF   
     1850       ENDIF
    18521851       CALL cloud_optics_prop_ini(klon, prt_level, lunout, flag_aerosol, &
    18531852                                  & ok_cdnc, bl95_b0, &
     
    18821881                                flag_aerosol, flag_aerosol_strat, ok_cdnc)
    18831882ELSE
    1884        ! phys_output_write écrit des variables traceurs seulement si iflag_phytrac == 1 
     1883       ! phys_output_write écrit des variables traceurs seulement si iflag_phytrac == 1
    18851884       ! donc seulement dans ce cas on doit appeler phytrac_init()
    18861885       IF (iflag_phytrac == 1 ) THEN
     
    18991898         IF (is_omp_master) CALL xios_update_calendar(1)
    19001899       ENDIF
    1901        
     1900
    19021901       IF(read_climoz>=1 .AND. create_etat0_limit) CALL regr_horiz_time_climoz(read_climoz,ok_daily_climoz)
    19031902       CALL create_etat0_limit_unstruct
     
    19591958       ENDIF
    19601959       !
    1961        IF (phys_tstep*REAL(radpas).GT.21600..AND.iflag_cycle_diurne.GE.1) THEN 
     1960       IF (phys_tstep*REAL(radpas).GT.21600..AND.iflag_cycle_diurne.GE.1) THEN
    19621961          WRITE(lunout,*)'Nbre d appels au rayonnement insuffisant'
    19631962          WRITE(lunout,*)"Au minimum 4 appels par jour si cycle diurne"
     
    20842083       !=============================================================
    20852084
    2086        IF (using_xios) THEN   
     2085       IF (using_xios) THEN
    20872086         ! Get "missing_val" value from XML files (from temperature variable)
    20882087         IF (is_omp_master) CALL xios_get_field_attr("temp",default_value=missing_val)
     
    20902089       ENDIF
    20912090
    2092        IF (using_xios) THEN   
     2091       IF (using_xios) THEN
    20932092         ! Need to put this initialisation after phyetat0 as in the coupled model the XIOS context is only
    20942093         ! initialised at that moment
     
    20962095         IF (is_omp_master) CALL xios_get_field_attr("temp",default_value=missing_val)
    20972096         CALL bcast_omp(missing_val)
    2098        ! 
     2097       !
    20992098       ! Now we activate some double radiation call flags only if some
    21002099       ! diagnostics are requested, otherwise there is no point in doing this
    21012100         IF (is_master) THEN
    2102            !--setting up swaero_diag to TRUE in XIOS case 
    2103            IF (xios_field_is_active("topswad").OR.xios_field_is_active("topswad0").OR. & 
    2104               xios_field_is_active("solswad").OR.xios_field_is_active("solswad0").OR. & 
    2105               xios_field_is_active("topswai").OR.xios_field_is_active("solswai").OR.  & 
    2106                 (iflag_rrtm==1.AND.(xios_field_is_active("toplwad").OR.xios_field_is_active("toplwad0").OR. & 
    2107                                     xios_field_is_active("sollwad").OR.xios_field_is_active("sollwad0"))))  & 
    2108               !!!--for now these fields are not in the XML files so they are omitted 
    2109               !!!  xios_field_is_active("toplwai").OR.xios_field_is_active("sollwai") !))) & 
    2110               swaero_diag=.TRUE. 
    2111  
    2112            !--setting up swaerofree_diag to TRUE in XIOS case 
     2101           !--setting up swaero_diag to TRUE in XIOS case
     2102           IF (xios_field_is_active("topswad").OR.xios_field_is_active("topswad0").OR. &
     2103              xios_field_is_active("solswad").OR.xios_field_is_active("solswad0").OR. &
     2104              xios_field_is_active("topswai").OR.xios_field_is_active("solswai").OR.  &
     2105                (iflag_rrtm==1.AND.(xios_field_is_active("toplwad").OR.xios_field_is_active("toplwad0").OR. &
     2106                                    xios_field_is_active("sollwad").OR.xios_field_is_active("sollwad0"))))  &
     2107              !!!--for now these fields are not in the XML files so they are omitted
     2108              !!!  xios_field_is_active("toplwai").OR.xios_field_is_active("sollwai") !))) &
     2109              swaero_diag=.TRUE.
     2110
     2111           !--setting up swaerofree_diag to TRUE in XIOS case
    21132112           IF (xios_field_is_active("SWdnSFCcleanclr").OR.xios_field_is_active("SWupSFCcleanclr").OR. &
    21142113              xios_field_is_active("SWupTOAcleanclr").OR.xios_field_is_active("rsucsaf").OR.   &
    21152114              xios_field_is_active("rsdcsaf") .OR. xios_field_is_active("LWdnSFCcleanclr").OR. &
    21162115              xios_field_is_active("LWupTOAcleanclr")) &
    2117               swaerofree_diag=.TRUE. 
    2118  
    2119            !--setting up dryaod_diag to TRUE in XIOS case 
     2116              swaerofree_diag=.TRUE.
     2117
     2118           !--setting up dryaod_diag to TRUE in XIOS case
    21202119           DO naero = 1, naero_tot-1
    2121              IF (xios_field_is_active("dryod550_"//name_aero_tau(naero))) dryaod_diag=.TRUE. 
     2120             IF (xios_field_is_active("dryod550_"//name_aero_tau(naero))) dryaod_diag=.TRUE.
    21222121           ENDDO
    21232122           !
    2124           !--setting up ok_4xCO2atm to TRUE in XIOS case 
    2125            IF (xios_field_is_active("rsut4co2").OR.xios_field_is_active("rlut4co2").OR. & 
     2123          !--setting up ok_4xCO2atm to TRUE in XIOS case
     2124           IF (xios_field_is_active("rsut4co2").OR.xios_field_is_active("rlut4co2").OR. &
    21262125              xios_field_is_active("rsutcs4co2").OR.xios_field_is_active("rlutcs4co2").OR. &
    21272126              xios_field_is_active("rsu4co2").OR.xios_field_is_active("rsucs4co2").OR. &
     
    21292128              xios_field_is_active("rlu4co2").OR.xios_field_is_active("rlucs4co2").OR. &
    21302129              xios_field_is_active("rld4co2").OR.xios_field_is_active("rldcs4co2")) &
    2131               ok_4xCO2atm=.TRUE. 
     2130              ok_4xCO2atm=.TRUE.
    21322131           ENDIF
    21332132           !$OMP BARRIER
     
    23112310      ENDIF
    23122311      WRITE(*,*)'ok_lwoff=',ok_lwoff
    2313       ! 
     2312      !
    23142313      !lwoff=y to begin only sollw and sollwdown are set up to CS values
    23152314      sollw = sollw + betalwoff * (sollw0 - sollw)
     
    23382337    !
    23392338    !
    2340     ! Update fraction of the sub-surfaces (pctsrf) and 
    2341     ! initialize, where a new fraction has appeared, all variables depending 
     2339    ! Update fraction of the sub-surfaces (pctsrf) and
     2340    ! initialize, where a new fraction has appeared, all variables depending
    23422341    ! on the surface fraction.
    23432342    !
     
    23902389    beta_prec(:,:)=0.
    23912390    !
    2392     !   Output variables from the convective scheme should not be set to 0 
     2391    !   Output variables from the convective scheme should not be set to 0
    23932392    !   since convection is not always called at every time step.
    23942393    IF (ok_bug_cv_trac) THEN
     
    24392438    qs_ini(:,:)=qs_seri(:,:)
    24402439    !
    2441     !--OB water mass fixer 
     2440    !--OB water mass fixer
    24422441    IF (ok_water_mass_fixer) THEN
    24432442    !--store initial water burden
     
    24812480         IF(.NOT.tracers(iq)%isInPhysics) CYCLE
    24822481         itr = itr+1
    2483          tr_ancien(:,:,itr)=tr_seri(:,:,itr)       
     2482         tr_ancien(:,:,itr)=tr_seri(:,:,itr)
    24842483       enddo
    24852484    ENDIF
     
    26812680    day_since_equinox = (jD_cur + jH_cur) - jD_eq
    26822681    !
    2683     !   choix entre calcul de la longitude solaire vraie ou valeur fixee a 
     2682    !   choix entre calcul de la longitude solaire vraie ou valeur fixee a
    26842683    !   solarlong0
    26852684    IF (solarlong0<-999.) THEN
     
    26932692    ELSE
    26942693       zlongi=solarlong0  ! longitude solaire vraie
    2695        dist=1.            ! distance au soleil / moyenne 
     2694       dist=1.            ! distance au soleil / moyenne
    26962695    ENDIF
    26972696
     
    27152714       ! recode par Olivier Boucher en sept 2015
    27162715       SELECT CASE (iflag_cycle_diurne)
    2717        CASE(0) 
     2716       CASE(0)
    27182717          !  Sans cycle diurne
    27192718          CALL angle(zlongi, latitude_deg, fract, rmu0)
     
    27212720          JrNt = 1.0
    27222721          zrmu0 = rmu0
    2723        CASE(1) 
     2722       CASE(1)
    27242723          !  Avec cycle diurne sans application des poids
    27252724          !  bit comparable a l ancienne formulation cycle_diurne=true
     
    27332732          JrNt = 0.0
    27342733          WHERE (fract.GT.0.0) JrNt = 1.0
    2735        CASE(2) 
     2734       CASE(2)
    27362735          !  Avec cycle diurne sans application des poids
    27372736          !  On integre entre gmtime-pdtphys et gmtime+pdtphys*(radpas-1)
     
    27422741          !  premier pas de temps de la physique pendant lequel
    27432742          !  itaprad=0
    2744           zdtime1=phys_tstep*REAL(-MOD(itaprad,radpas)-1)     
    2745           zdtime2=phys_tstep*REAL(radpas-MOD(itaprad,radpas)-1) 
     2743          zdtime1=phys_tstep*REAL(-MOD(itaprad,radpas)-1)
     2744          zdtime2=phys_tstep*REAL(radpas-MOD(itaprad,radpas)-1)
    27462745          CALL zenang(zlongi,jH_cur,zdtime1,zdtime2, &
    27472746               latitude_deg,longitude_deg,rmu0,fract)
     
    27582757          ! Calcul du flag jour-nuit
    27592758          JrNt = 0.0
    2760           WHERE (zfract.GT.0.0) JrNt = 1.0 
     2759          WHERE (zfract.GT.0.0) JrNt = 1.0
    27612760       END SELECT
    27622761    ENDIF
     
    27742773    ! Cela implique tous les interactions des sous-surfaces et la
    27752774    ! partie diffusion turbulent du couche limit.
    2776     ! 
    2777     ! Certains varibales de sorties de pbl_surface sont utiliser que pour 
     2775    !
     2776    ! Certains varibales de sorties de pbl_surface sont utiliser que pour
    27782777    ! ecriture des fihiers hist_XXXX.nc, ces sont :
    27792778    !   qsol,      zq2m,      s_pblh,  s_lcl,
     
    27872786    !   wfbils,    fluxt,   fluxu, fluxv,
    27882787    !
    2789     ! Certains ne sont pas utiliser du tout : 
     2788    ! Certains ne sont pas utiliser du tout :
    27902789    !   dsens, devap, zxsnow, zxfluxt, zxfluxq, q2m, fluxq
    27912790    !
     
    28282827       !ym : Warning gustiness non inialized for iflag_gusts=2 & iflag_gusts=3
    28292828       gustiness=0  !ym missing init
    2830        
     2829
    28312830       IF (iflag_gusts==0) THEN
    28322831          gustiness(1:klon)=0
     
    28752874                                !albedo SB >>>
    28762875                                ! albsol1,   albsol2,   sens,    evap,      &
    2877             albsol_dir,   albsol_dif,   sens,    evap, snowerosion, & 
     2876            albsol_dir,   albsol_dif,   sens,    evap, snowerosion, &
    28782877                                !albedo SB <<<
    28792878            albsol3_lic,runoff,   snowhgt,   qsnow, to_ice, sissnow, &
     
    29022901            z0m, z0h,     agesno,    fsollw,  fsolsw, &
    29032902            d_ts,      fevap,     fluxlat, t2m, &
    2904             wfbils, wfevap, & 
     2903            wfbils, wfevap, &
    29052904            fluxt,   fluxu,  fluxv, &
    29062905            dsens,     devap,     zxsnow, &
     
    29192918          d_deltaq_vdf(:,:) = d_q_vdf_w(:,:)-d_q_vdf_x(:,:)
    29202919          CALL add_wake_tend &
    2921              (d_deltat_vdf, d_deltaq_vdf, dsig0, dsig0, ddens0, ddens0, wkoccur1, 'vdf', abortphy) 
     2920             (d_deltat_vdf, d_deltaq_vdf, dsig0, dsig0, ddens0, ddens0, wkoccur1, 'vdf', abortphy)
    29222921       ELSE
    29232922          d_deltat_vdf(:,:) = 0.
     
    31643163             IF (iflag_adjwk == 2 .AND. OK_bug_ajs_cv) THEN
    31653164               CALL add_wake_tend &
    3166                  (d_deltat_ajs_cv, d_deltaq_ajs_cv, dsig0, dsig0, ddens0, ddens0, wkoccur1, 'ajs_cv', abortphy) 
     3165                 (d_deltat_ajs_cv, d_deltaq_ajs_cv, dsig0, dsig0, ddens0, ddens0, wkoccur1, 'ajs_cv', abortphy)
    31673166             ENDIF  ! (iflag_adjwk == 2 .AND. OK_bug_ajs_cv)
    31683167          ENDIF  ! (iflag_adjwk >= 1)
     
    31703169       !>jyg
    31713170       !
    3172        
     3171
    31733172!!      print *,'physiq. q_w(1,k), q_x(1,k) ', &
    31743173!!             (k, q_w(1,k), q_x(1,k),k=1,25)
     
    32483247          !
    32493248          !jyg<
    3250           ! If convective tendencies are too large, then call convection 
     3249          ! If convective tendencies are too large, then call convection
    32513250          !  every time step
    32523251          cvpas = cvpas_0
     
    34113410    ENDIF
    34123411
    3413 !!!jyg  Appel diagnostique a add_phys_tend pour tester la conservation de 
     3412!!!jyg  Appel diagnostique a add_phys_tend pour tester la conservation de
    34143413!!!     l'energie dans les courants satures.
    34153414!!    d_t_con_sat(:,:) = d_t_con(:,:) - ftd(:,:)*dtime
     
    34173416!!    dql_sat(:,:) = (wdtrainA(:,:)+wdtrainM(:,:))*dtime/zmasse(:,:)
    34183417!!    CALL add_phys_tend(d_u_con, d_v_con, d_t_con_sat, d_q_con_sat, dql_sat,   &
    3419 !!                     dqi0, paprs, 'convection_sat', abortphy, flag_inhib_tend,& 
     3418!!                     dqi0, paprs, 'convection_sat', abortphy, flag_inhib_tend,&
    34203419!!                     itap, 1)
    34213420!!    call prt_enerbil('convection_sat',itap)
     
    34433442    !
    34443443    !==========================================================================
    3445     !RR:Evolution de la poche froide: on ne fait pas de separation wake/env 
     3444    !RR:Evolution de la poche froide: on ne fait pas de separation wake/env
    34463445    !pour la couche limite diffuse pour l instant
    34473446    !
     
    34603459          DO k=1,klev
    34613460             DO i=1,klon
    3462                 dt_dwn(i,k)  = ftd(i,k) 
    3463                 dq_dwn(i,k)  = fqd(i,k) 
     3461                dt_dwn(i,k)  = ftd(i,k)
     3462                dq_dwn(i,k)  = fqd(i,k)
    34643463                M_dwn(i,k)   = dnwd0(i,k)
    34653464                M_up(i,k)    = upwd(i,k)
    3466                 dt_a(i,k)    = d_t_con(i,k)/phys_tstep - ftd(i,k) 
     3465                dt_a(i,k)    = d_t_con(i,k)/phys_tstep - ftd(i,k)
    34673466                dq_a(i,k)    = d_q_con(i,k)/phys_tstep - fqd(i,k)
    34683467             ENDDO
    34693468          ENDDO
    3470          
     3469
    34713470          IF (iflag_wake==2) THEN
    34723471             ok_wk_lsp(:)=max(sign(1.,wake_s(:)-wake_s_min_lsp),0.)
     
    34933492             ENDDO
    34943493          ENDIF
    3495          
     3494
    34963495          !
    34973496          !calcul caracteristiques de la poche froide
     
    35313530         CALL add_wake_tend &
    35323531            (d_deltat_wk, d_deltaq_wk, d_s_wk, d_s_a_wk, d_dens_wk, d_dens_a_wk, wake_k, &
    3533              'wake', abortphy) 
     3532             'wake', abortphy)
    35343533          CALL prt_enerbil('wake',itap)
    35353534       ENDIF   ! (iflag_wake_tend .GT. 0.)
     
    36943693                DO i=1,klon
    36953694                   !
    3696                    d_deltat_the(i,k) = - d_t_ajs(i,k) 
    3697                    d_deltaq_the(i,k) = - d_q_ajs(i,k) 
     3695                   d_deltat_the(i,k) = - d_t_ajs(i,k)
     3696                   d_deltaq_the(i,k) = - d_q_ajs(i,k)
    36983697                   !
    3699                    d_u_ajs(i,k) = d_u_ajs(i,k)*(1.-wake_s(i)) 
    3700                    d_v_ajs(i,k) = d_v_ajs(i,k)*(1.-wake_s(i)) 
    3701                    d_t_ajs(i,k) = d_t_ajs(i,k)*(1.-wake_s(i)) 
    3702                    d_q_ajs(i,k) = d_q_ajs(i,k)*(1.-wake_s(i)) 
     3698                   d_u_ajs(i,k) = d_u_ajs(i,k)*(1.-wake_s(i))
     3699                   d_v_ajs(i,k) = d_v_ajs(i,k)*(1.-wake_s(i))
     3700                   d_t_ajs(i,k) = d_t_ajs(i,k)*(1.-wake_s(i))
     3701                   d_q_ajs(i,k) = d_q_ajs(i,k)*(1.-wake_s(i))
    37033702                   !
    37043703                ENDDO
     
    37073706             IF (ok_bug_split_th) THEN
    37083707               CALL add_wake_tend &
    3709                    (d_deltat_the, d_deltaq_the, dsig0, dsig0, ddens0, ddens0, wkoccur1, 'the', abortphy) 
     3708                   (d_deltat_the, d_deltaq_the, dsig0, dsig0, ddens0, ddens0, wkoccur1, 'the', abortphy)
    37103709             ELSE
    37113710               CALL add_wake_tend &
    3712                    (d_deltat_the, d_deltaq_the, dsig0, dsig0, ddens0, ddens0, wake_k, 'the', abortphy) 
     3711                   (d_deltat_the, d_deltaq_the, dsig0, dsig0, ddens0, ddens0, wake_k, 'the', abortphy)
    37133712             ENDIF
    37143713             CALL prt_enerbil('the',itap)
     
    37393738             !           zmax_th(i)=pphi(i,lmax_th(i))/rg
    37403739             !CR:04/05/12:correction calcul zmax
    3741              zmax_th(i)=zmax0(i) 
     3740             zmax_th(i)=zmax0(i)
    37423741          ENDDO
    37433742
     
    37623761          ! Attention : le call ajsec_convV2 n'est maintenu que momentanneement
    37633762          ! pour des test de convergence numerique.
    3764           ! Le nouveau ajsec est a priori mieux, meme pour le cas 
     3763          ! Le nouveau ajsec est a priori mieux, meme pour le cas
    37653764          ! iflag_thermals = 0 (l'ancienne version peut faire des tendances
    37663765          ! non nulles numeriquement pour des mailles non concernees.
     
    37913790    !
    37923791    !===================================================================
    3793     ! Computation of ratqs, the width (normalized) of the subrid scale 
     3792    ! Computation of ratqs, the width (normalized) of the subrid scale
    37943793    ! water distribution
    37953794
     
    38363835    CALL lscp(klon,klev,phys_tstep,missing_val,paprs,pplay, &
    38373836         t_seri, q_seri,qs_ini,ptconv,ratqs,sigma_qtherm, &
    3838          d_t_lsc, d_q_lsc, d_ql_lsc, d_qi_lsc, rneb, rneblsvol, & 
     3837         d_t_lsc, d_q_lsc, d_ql_lsc, d_qi_lsc, rneb, rneblsvol, &
    38393838         pfraclr, pfracld, cldfraliq, sigma2_icefracturb, mean_icefracturb,  &
    38403839         radocond, picefra, rain_lsc, snow_lsc, &
     
    38793878!        & ,rain_lsc,snow_lsc
    38803879!    write(*,9000) "rcpv","rcw",rcpv,rcw,rcs,t_seri(1,1)
    3881 !-JLD 
     3880!-JLD
    38823881    CALL add_phys_tend(du0,dv0,d_t_lsc,d_q_lsc,d_ql_lsc,d_qi_lsc,dqbs0,paprs, &
    38833882         'lsc',abortphy,flag_inhib_tend,itap,0)
     
    39263925                radocond(i,k)=radocond(i,k)+qbs_seri(i,k)
    39273926                picefra(i,k)=(radocond(i,k)*picefra(i,k)+qbs_seri(i,k))/(radocond(i,k))
    3928                 qbsfra=min(qbs_seri(i,k)/qbst_bs,1.0) 
     3927                qbsfra=min(qbs_seri(i,k)/qbst_bs,1.0)
    39293928                cldfra(i,k)=max(cldfra(i,k),qbsfra)
    39303929             ENDDO
     
    40474046             ! profonde.
    40484047
    4049              !IM/FH: 2011/02/23 
     4048             !IM/FH: 2011/02/23
    40504049             ! definition des points sur lesquels ls thermiques sont actifs
    40514050
     
    41314130    ENDDO
    41324131
    4133     !IM Calcul temp.potentielle a 2m (tpot) et temp. potentielle 
     4132    !IM Calcul temp.potentielle a 2m (tpot) et temp. potentielle
    41344133    !   equivalente a 2m (tpote) pour diagnostique
    41354134    !
     
    42674266
    42684267                   !
    4269                 ELSE IF (NSW.EQ.2) THEN 
     4268                ELSE IF (NSW.EQ.2) THEN
    42704269                   !--for now we use the old aerosol properties
    42714270                   !
     
    43074306                  flag_aerosol, flag_bc_internal_mixture, itap, jD_cur-jD_ref, &
    43084307                  pdtphys, pplay, paprs, t_seri, rhcl, presnivs,  &
    4309                   tr_seri, mass_solu_aero, mass_solu_aero_pi, m_allaer) 
     4308                  tr_seri, mass_solu_aero, mass_solu_aero_pi, m_allaer)
    43104309#else
    43114310                abort_message='You should compile with -rad ecrad if running with iflag_rrtm=2'
     
    43144313          ENDIF
    43154314
    4316        ELSE   !--flag_aerosol = 0 
     4315       ELSE   !--flag_aerosol = 0
    43174316          tausum_aero(:,:,:) = 0.
    43184317          drytausum_aero(:,:) = 0.
     
    43684367          ENDIF
    43694368       ELSE
    4370           tausum_aero(:,:,id_STRAT_phy) = 0. 
     4369          tausum_aero(:,:,id_STRAT_phy) = 0.
    43714370       ENDIF
    43724371!
     
    43804379#endif
    43814380       !--fin STRAT AEROSOL
    4382        !     
     4381       !
    43834382
    43844383       ! Calculer les parametres optiques des nuages et quelques
    43854384       ! parametres pour diagnostiques:
    43864385       !
    4387        IF (aerosol_couple.AND.config_inca=='aero') THEN 
    4388           mass_solu_aero(:,:)    = ccm(:,:,1) 
    4389           mass_solu_aero_pi(:,:) = ccm(:,:,2) 
     4386       IF (aerosol_couple.AND.config_inca=='aero') THEN
     4387          mass_solu_aero(:,:)    = ccm(:,:,1)
     4388          mass_solu_aero_pi(:,:) = ccm(:,:,2)
    43904389       ENDIF
    43914390
     
    43984397               cldtaupi, distcltop, temp_cltop, re, fl, ref_liq, ref_ice, &
    43994398               ref_liq_pi, ref_ice_pi, scdnc, cldncl, reffclwtop, lcc, reffclws, &
    4400                reffclwc, cldnvi, lcc3d, lcc3dcon, lcc3dstra, icc3dcon, icc3dstra,  & 
     4399               reffclwc, cldnvi, lcc3d, lcc3dcon, lcc3dstra, icc3dcon, icc3dstra,  &
    44014400               zfice, dNovrN, ptconv, rnebcon, clwcon)
    44024401
     
    44654464       ENDIF
    44664465
    4467        !lecture de la chlorophylle pour le nouvel albedo de Sunghye Baek 
     4466       !lecture de la chlorophylle pour le nouvel albedo de Sunghye Baek
    44684467       IF (ok_chlorophyll) THEN
    44694468          print*,"-- reading chlorophyll"
     
    44714470       ENDIF
    44724471
    4473 !--if ok_suntime_rrtm we use ancillay data for RSUN 
     4472!--if ok_suntime_rrtm we use ancillay data for RSUN
    44744473!--previous values are therefore overwritten
    44754474!--this is needed for CMIP6 runs
    44764475!--and only possible for new radiation scheme
    4477        IF (iflag_rrtm.EQ.1.AND.ok_suntime_rrtm) THEN 
     4476       IF (iflag_rrtm.EQ.1.AND.ok_suntime_rrtm) THEN
    44784477#ifdef CPP_RRTM
    44794478         CALL read_rsun_rrtm(debut)
     
    44974496       ENDIF
    44984497
    4499        IF (aerosol_couple.AND.config_inca=='aero') THEN 
     4498       IF (aerosol_couple.AND.config_inca=='aero') THEN
    45004499IF (CPPKEY_INCA) THEN
    45014500          CALL radlwsw_inca  &
     
    45284527          RCFC11 = RCFC11_act
    45294528          RCFC12 = RCFC12_act
    4530           ! 
     4529          !
    45314530          !--interactive CO2 in ppm from carbon cycle
    45324531          IF (carbon_cycle_rad) RCO2=RCO2_glo
     
    45504549               flag_aerosol, flag_aerosol_strat, flag_aer_feedback, &
    45514550               tau_aero, piz_aero, cg_aero, &
    4552                tau_aero_sw_rrtm, piz_aero_sw_rrtm, cg_aero_sw_rrtm, & 
     4551               tau_aero_sw_rrtm, piz_aero_sw_rrtm, cg_aero_sw_rrtm, &
    45534552               ! Rajoute par OB pour RRTM
    4554                tau_aero_lw_rrtm, & 
     4553               tau_aero_lw_rrtm, &
    45554554               cldtaupirad, m_allaer, &
    45564555!              zqsat, flwcrad, fiwcrad, &
     
    45894588                        sollwdown(:))
    45904589          cool = cool + betalwoff * (cool0 - cool)
    4591  
     4590
    45924591          IF (.NOT. using_xios) THEN
    45934592            !
     
    46004599                RN2O_per.NE.RN2O_act.OR. &
    46014600                RCFC11_per.NE.RCFC11_act.OR. &
    4602                 RCFC12_per.NE.RCFC12_act) ok_4xCO2atm =.TRUE. 
     4601                RCFC12_per.NE.RCFC12_act) ok_4xCO2atm =.TRUE.
    46034602          ENDIF
    4604    ! 
     4603   !
    46054604          IF (ok_4xCO2atm) THEN
    46064605                !
     
    46214620                                !albedo SB >>>
    46224621                                !      paprs, pplay,zxtsol,albsol1, albsol2,  &
    4623                      paprs, pplay,zxtsol,SFRWL,albsol_dir, albsol_dif, & 
     4622                     paprs, pplay,zxtsol,SFRWL,albsol_dir, albsol_dif, &
    46244623                                !albedo SB <<<
    46254624                     t_seri,q_seri,wo, &
     
    46654664#ifdef CPP_ECRAD
    46664665          IF (ok_3Deffect) then
    4667 !                print*,'ok_3Deffect = ',ok_3Deffect 
     4666!                print*,'ok_3Deffect = ',ok_3Deffect
    46684667                namelist_ecrad_file='namelist_ecrad_s2'
    46694668                CALL radlwsw &
     
    46814680                     ref_liq, ref_ice, ref_liq_pi, ref_ice_pi, &
    46824681                     namelist_ecrad_file, &
    4683 ! A modifier             
     4682! A modifier
    46844683                     heat_s2,heat0_s2,cool_s2,cool0_s2,albpla_s2, &
    46854684                     heat_volc,cool_volc, &
     
    49774976    !IM calcul composantes axiales du moment angulaire et couple des montagnes
    49784977    !
    4979     IF (is_sequential .and. ok_orodr) THEN 
     4978    IF (is_sequential .and. ok_orodr) THEN
    49804979       CALL aaam_bud (27,klon,klev,jD_cur-jD_ref,jH_cur, &
    49814980            ra,rg,romega, &
     
    50575056!------------------
    50585057
    5059        addtkeoro=0   
    5060        CALL getin_p('addtkeoro',addtkeoro) 
    5061      
     5058       addtkeoro=0
     5059       CALL getin_p('addtkeoro',addtkeoro)
     5060
    50625061       IF (prt_level.ge.5) &
    50635062            print*,'addtkeoro', addtkeoro
    5064            
    5065        alphatkeoro=1.   
     5063
     5064       alphatkeoro=1.
    50665065       CALL getin_p('alphatkeoro',alphatkeoro)
    50675066       alphatkeoro=min(max(0.,alphatkeoro),1.)
    50685067
    5069        smallscales_tkeoro=.FALSE.   
    5070        CALL getin_p('smallscales_tkeoro',smallscales_tkeoro) 
     5068       smallscales_tkeoro=.FALSE.
     5069       CALL getin_p('smallscales_tkeoro',smallscales_tkeoro)
    50715070
    50725071
     
    50765075
    50775076! Choices for addtkeoro:
    5078 !      ** 0 no TKE tendency from orography   
     5077!      ** 0 no TKE tendency from orography
    50795078!      ** 1 we include a fraction alphatkeoro of the whole tendency duoro
    50805079!      ** 2 we include a fraction alphatkeoro of the gravity wave part of duoro
     
    51015100! Etienne: ici je prends en compte plus de relief que la routine drag_noro_strato
    51025101! car on peut s'attendre a ce que les petites echelles produisent aussi de la TKE
    5103 ! Mais attention, cela ne va pas dans le sens de la conservation de l'energie! 
     5102! Mais attention, cela ne va pas dans le sens de la conservation de l'energie!
    51045103          IF ((zstd(i).GT.1.0) .AND.(zrel_oro(i).LE.zrel_oro_t)) THEN
    51055104             itest(i)=1
     
    51095108       ENDDO
    51105109
    5111      ELSE 
     5110     ELSE
    51125111
    51135112       igwd=0
     
    51625161
    51635162    IF (ok_cosp) THEN
    5164        ! adeclarer 
     5163       ! adeclarer
    51655164IF (CPPKEY_COSP) THEN
    51665165       IF (itap.eq.1.or.MOD(itap,NINT(freq_cosp/phys_tstep)).EQ.0) THEN
     
    52925291    ELSE
    52935292       sh_in(:,:) = qx(:,:,ivap)
    5294        IF (nqo >= 3) THEN 
     5293       IF (nqo >= 3) THEN
    52955294          ch_in(:,:) = qx(:,:,iliq) + qx(:,:,isol)
    5296        ELSE 
     5295       ELSE
    52975296          ch_in(:,:) = qx(:,:,iliq)
    52985297       ENDIF
     
    53005299
    53015300IF (CPPKEY_DUST) THEN
    5302     !  Avec SPLA, iflag_phytrac est forcé =1 
     5301    !  Avec SPLA, iflag_phytrac est forcé =1
    53035302    CALL       phytracr_spl ( debut,lafin , jD_cur,jH_cur,iflag_con,       &  ! I
    53045303                      pdtphys,ftsol,                                   &  ! I
     
    54355434       ENDDO
    54365435    ENDIF
    5437    
     5436
    54385437    DO i = 1, klon
    54395438      !--compute ratio of what q+ql should be with conservation to what it is
     
    54585457
    54595458    !cc prw  = eau precipitable
    5460     !   prlw = colonne eau liquide 
     5459    !   prlw = colonne eau liquide
    54615460    !   prlw = colonne eau solide
    54625461    !   prbsw = colonne neige soufflee
     
    54915490    !
    54925491    !IM initialisation + calculs divers diag AMIP2
    5493     !
    5494     include "calcul_divers.h"
     5492    CALL calcul_divers(itap, itapm1, un_jour)
    54955493    !
    54965494    !IM Interpolation sur les niveaux de pression du NMC
     
    56785676
    56795677    ! Recupere des varibles calcule dans differents modules
    5680     ! pour ecriture dans histxxx.nc 
     5678    ! pour ecriture dans histxxx.nc
    56815679
    56825680    ! Get some variables from module fonte_neige_mod
     
    57255723    CALL phys_output_write(itap, pdtphys, paprs, pphis,  &
    57265724         pplay, lmax_th, aerosol_couple,                 &
    5727          ok_ade, ok_aie, ok_volcan, ivap, iliq, isol, ibs,   & 
     5725         ok_ade, ok_aie, ok_volcan, ivap, iliq, isol, ibs,   &
    57285726         ok_sync, ptconv, read_climoz, clevSTD,          &
    57295727         ptconvth, d_u, d_t, qx, d_qx, zmasse,           &
     
    57605758    alert_first_call = .FALSE.
    57615759
    5762    
     5760
    57635761    IF (lafin) THEN
    57645762       itau_phy = itau_phy + itap
     
    57675765       !         write(97) u_seri,v_seri,t_seri,q_seri
    57685766       !         close(97)
    5769      
     5767
    57705768       IF (is_omp_master) THEN
    5771        
     5769
    57725770         IF (read_climoz >= 1) THEN
    57735771           IF (is_mpi_root) CALL nf95_close(ncid_climoz)
     
    57755773            DEALLOCATE(press_cen_climoz)
    57765774         ENDIF
    5777        
     5775
    57785776       ENDIF
    57795777
     
    57935791
    57945792       WRITE(lunout,*) ' physiq fin, nombre de steps ou cvpas = 1 : ', Ncvpaseq1
    5795        
     5793
    57965794    ENDIF
    57975795
  • LMDZ6/trunk/libf/phylmdiso/calcul_divers_mod_h.f90

    r5292 r5293  
    1 link ../phylmd/calcul_divers.h
     1link ../phylmd/calcul_divers_mod_h.f90
  • LMDZ6/trunk/libf/phylmdiso/physiq_mod.F90

    r5285 r5293  
    295295       zustar, zu10m, zv10m, rh2m, qsat2m, &
    296296       zq2m, zt2m, zn2mout, weak_inversion, &
    297        zt2m_min_mon, zt2m_max_mon,   &         ! pour calcul_divers.h
    298        t2m_min_mon, t2m_max_mon,  &            ! pour calcul_divers.h
    299297       !
    300298       s_pblh_x, s_pblh_w, &
     
    436434       USE alpale_mod
    437435    USE yoethf_mod_h
     436    USE calcul_divers_mod_h, ONLY: calcul_divers
    438437
    439438    IMPLICIT NONE
     
    70937092    !
    70947093    !IM initialisation + calculs divers diag AMIP2
    7095     !
    7096     include "calcul_divers.h"
     7094    CALL calcul_divers(itap, itapm1, un_jour)
    70977095    !
    70987096    !IM Interpolation sur les niveaux de pression du NMC
Note: See TracChangeset for help on using the changeset viewer.