Ignore:
Timestamp:
Sep 10, 2013, 2:42:17 PM (11 years ago)
Author:
lguez
Message:

Indented physiq.F90 and replaced #include by include.

File:
1 edited

Legend:

Unmodified
Added
Removed
  • LMDZ5/trunk/libf/phylmd/physiq.F90

    r1862 r1863  
    22!#define IO_DEBUG
    33
    4       SUBROUTINE physiq (nlon,nlev, &
    5                   debut,lafin,jD_cur, jH_cur,pdtphys, &
    6                   paprs,pplay,pphi,pphis,presnivs,clesphy0, &
    7                   u,v,t,qx, &
    8                   flxmass_w, &
    9                   d_u, d_v, d_t, d_qx, d_ps &
    10                   , dudyn &
    11                   , PVteta)
    12 
    13       USE ioipsl, only: histbeg, histvert, histdef, histend, histsync, &
    14            histwrite, ju2ymds, ymds2ju, ioget_year_len
    15       USE comgeomphy
    16       USE phys_cal_mod
    17       USE write_field_phy
    18       USE dimphy
    19       USE infotrac
    20       USE mod_grid_phy_lmdz
    21       USE mod_phys_lmdz_para
    22       USE iophy
    23       USE misc_mod, mydebug=>debug
    24       USE vampir
    25       USE pbl_surface_mod, ONLY : pbl_surface
    26       USE change_srf_frac_mod
    27       USE surface_data,     ONLY : type_ocean, ok_veget
    28       USE phys_local_var_mod ! Variables internes non sauvegardees de la physique
    29       USE phys_state_var_mod ! Variables sauvegardees de la physique
    30       USE phys_output_var_mod ! Variables pour les ecritures des sorties
    31       USE phys_output_write_mod
    32       USE fonte_neige_mod, ONLY  : fonte_neige_get_vars
    33       USE phys_output_mod
    34       USE phys_output_ctrlout_mod
    35       USE iophy
    36       use open_climoz_m, only: open_climoz ! ozone climatology from a file
    37       use regr_pr_av_m, only: regr_pr_av
    38       use netcdf95, only: nf95_close
    39 !IM for NMC files
    40 !     use netcdf, only: nf90_fill_real
    41       use netcdf
    42       use mod_phys_lmdz_mpi_data, only: is_mpi_root
    43       USE aero_mod
    44       use ozonecm_m, only: ozonecm ! ozone of J.-F. Royer
    45       use conf_phys_m, only: conf_phys
    46       use radlwsw_m, only: radlwsw
    47       use phyaqua_mod, only: zenang_an
    48       USE control_mod
     4SUBROUTINE physiq (nlon,nlev, &
     5     debut,lafin,jD_cur, jH_cur,pdtphys, &
     6     paprs,pplay,pphi,pphis,presnivs,clesphy0, &
     7     u,v,t,qx, &
     8     flxmass_w, &
     9     d_u, d_v, d_t, d_qx, d_ps &
     10     , dudyn &
     11     , PVteta)
     12
     13  USE ioipsl, only: histbeg, histvert, histdef, histend, histsync, &
     14       histwrite, ju2ymds, ymds2ju, ioget_year_len
     15  USE comgeomphy
     16  USE phys_cal_mod
     17  USE write_field_phy
     18  USE dimphy
     19  USE infotrac
     20  USE mod_grid_phy_lmdz
     21  USE mod_phys_lmdz_para
     22  USE iophy
     23  USE misc_mod, mydebug=>debug
     24  USE vampir
     25  USE pbl_surface_mod, ONLY : pbl_surface
     26  USE change_srf_frac_mod
     27  USE surface_data,     ONLY : type_ocean, ok_veget
     28  USE phys_local_var_mod ! Variables internes non sauvegardees de la physique
     29  USE phys_state_var_mod ! Variables sauvegardees de la physique
     30  USE phys_output_var_mod ! Variables pour les ecritures des sorties
     31  USE phys_output_write_mod
     32  USE fonte_neige_mod, ONLY  : fonte_neige_get_vars
     33  USE phys_output_mod
     34  USE phys_output_ctrlout_mod
     35  USE iophy
     36  use open_climoz_m, only: open_climoz ! ozone climatology from a file
     37  use regr_pr_av_m, only: regr_pr_av
     38  use netcdf95, only: nf95_close
     39  !IM for NMC files
     40  !     use netcdf, only: nf90_fill_real
     41  use netcdf
     42  use mod_phys_lmdz_mpi_data, only: is_mpi_root
     43  USE aero_mod
     44  use ozonecm_m, only: ozonecm ! ozone of J.-F. Royer
     45  use conf_phys_m, only: conf_phys
     46  use radlwsw_m, only: radlwsw
     47  use phyaqua_mod, only: zenang_an
     48  USE control_mod
    4949#ifdef REPROBUS
    50       USE CHEM_REP, ONLY : Init_chem_rep_xjour
     50  USE CHEM_REP, ONLY : Init_chem_rep_xjour
    5151#endif
    52       USE indice_sol_mod
    53       USE phytrac_mod, ONLY : phytrac
    54 
    55 !IM stations CFMIP
    56       USE CFMIP_point_locations
    57       IMPLICIT none
    58 !>======================================================================
    59 !!
    60 !! Auteur(s) Z.X. Li (LMD/CNRS) date: 19930818
    61 !!
    62 !! Objet: Moniteur general de la physique du modele
    63 !!AA      Modifications quant aux traceurs :
    64 !!AA                  -  uniformisation des parametrisations ds phytrac
    65 !!AA                  -  stockage des moyennes des champs necessaires
    66 !!AA                     en mode traceur off-line
    67 !!======================================================================
    68 !!   CLEFS CPP POUR LES IO
    69 !!   =====================
     52  USE indice_sol_mod
     53  USE phytrac_mod, ONLY : phytrac
     54
     55  !IM stations CFMIP
     56  USE CFMIP_point_locations
     57  IMPLICIT none
     58  !>======================================================================
     59  !!
     60  !! Auteur(s) Z.X. Li (LMD/CNRS) date: 19930818
     61  !!
     62  !! Objet: Moniteur general de la physique du modele
     63  !!AA      Modifications quant aux traceurs :
     64  !!AA                  -  uniformisation des parametrisations ds phytrac
     65  !!AA                  -  stockage des moyennes des champs necessaires
     66  !!AA                     en mode traceur off-line
     67  !!======================================================================
     68  !!   CLEFS CPP POUR LES IO
     69  !!   =====================
    7070#define histNMC
    71 !#define histISCCP
    72 !!======================================================================
    73 !!    modif   ( P. Le Van ,  12/10/98 )
    74 !!
    75 !!  Arguments:
    76 !!
    77 !! nlon----input-I-nombre de points horizontaux
    78 !! nlev----input-I-nombre de couches verticales, doit etre egale a klev
    79 !! debut---input-L-variable logique indiquant le premier passage
    80 !! lafin---input-L-variable logique indiquant le dernier passage
    81 !! jD_cur       -R-jour courant a l'appel de la physique (jour julien)
    82 !! jH_cur       -R-heure courante a l'appel de la physique (jour julien)
    83 !! pdtphys-input-R-pas d'integration pour la physique (seconde)
    84 !! paprs---input-R-pression pour chaque inter-couche (en Pa)
    85 !! pplay---input-R-pression pour le mileu de chaque couche (en Pa)
    86 !! pphi----input-R-geopotentiel de chaque couche (g z) (reference sol)
    87 !! pphis---input-R-geopotentiel du sol
    88 !! presnivs-input_R_pressions approximat. des milieux couches ( en PA)
    89 !! u-------input-R-vitesse dans la direction X (de O a E) en m/s
    90 !! v-------input-R-vitesse Y (de S a N) en m/s
    91 !! t-------input-R-temperature (K)
    92 !! qx------input-R-humidite specifique (kg/kg) et d'autres traceurs
    93 !! d_t_dyn-input-R-tendance dynamique pour "t" (K/s)
    94 !! d_q_dyn-input-R-tendance dynamique pour "q" (kg/kg/s)
    95 !! flxmass_w -input-R- flux de masse verticale
    96 !! d_u-----output-R-tendance physique de "u" (m/s/s)
    97 !! d_v-----output-R-tendance physique de "v" (m/s/s)
    98 !! d_t-----output-R-tendance physique de "t" (K/s)
    99 !! d_qx----output-R-tendance physique de "qx" (kg/kg/s)
    100 !! d_ps----output-R-tendance physique de la pression au sol
    101 !!IM
    102 !! PVteta--output-R-vorticite potentielle a des thetas constantes
    103 !!======================================================================
    104 #include "dimensions.h"
    105       integer jjmp1
    106       parameter (jjmp1=jjm+1-1/jjm)
    107       integer iip1
    108       parameter (iip1=iim+1)
    109 
    110 #include "regdim.h"
    111 #include "dimsoil.h"
    112 #include "clesphys.h"
    113 #include "temps.h"
    114 #include "iniprint.h"
    115 #include "thermcell.h"
    116 !======================================================================
    117       LOGICAL ok_cvl  ! pour activer le nouveau driver pour convection KE
    118       PARAMETER (ok_cvl=.TRUE.)
    119       LOGICAL ok_gust ! pour activer l'effet des gust sur flux surface
    120       PARAMETER (ok_gust=.FALSE.)
    121       integer iflag_radia     ! active ou non le rayonnement (MPL)
    122       save iflag_radia
    123 !$OMP THREADPRIVATE(iflag_radia)
    124 !======================================================================
    125       LOGICAL check ! Verifier la conservation du modele en eau
    126       PARAMETER (check=.FALSE.)
    127       LOGICAL ok_stratus ! Ajouter artificiellement les stratus
    128       PARAMETER (ok_stratus=.FALSE.)
    129 !======================================================================
    130       REAL amn, amx
    131       INTEGER igout
    132 !======================================================================
    133 ! Clef controlant l'activation du cycle diurne:
    134 !cc      LOGICAL cycle_diurne
    135 !cc      PARAMETER (cycle_diurne=.FALSE.)
    136 !======================================================================
    137 ! Modele thermique du sol, a activer pour le cycle diurne:
    138 !cc      LOGICAL soil_model
    139 !cc      PARAMETER (soil_model=.FALSE.)
    140 !======================================================================
    141 ! Dans les versions precedentes, l'eau liquide nuageuse utilisee dans
    142 ! le calcul du rayonnement est celle apres la precipitation des nuages.
    143 ! Si cette cle new_oliq est activee, ce sera une valeur moyenne entre
    144 ! la condensation et la precipitation. Cette cle augmente les impacts
    145 ! radiatifs des nuages.
    146 !cc      LOGICAL new_oliq
    147 !cc      PARAMETER (new_oliq=.FALSE.)
    148 !======================================================================
    149 ! Clefs controlant deux parametrisations de l'orographie:
    150 !c      LOGICAL ok_orodr
    151 !cc      PARAMETER (ok_orodr=.FALSE.)
    152 !cc      LOGICAL ok_orolf
    153 !cc      PARAMETER (ok_orolf=.FALSE.)
    154 !======================================================================
    155       LOGICAL ok_journe ! sortir le fichier journalier
    156       save ok_journe
    157 !$OMP THREADPRIVATE(ok_journe)
    158 !
    159       LOGICAL ok_mensuel ! sortir le fichier mensuel
    160       save ok_mensuel
    161 !$OMP THREADPRIVATE(ok_mensuel)
    162 !
    163       LOGICAL ok_instan ! sortir le fichier instantane
    164       save ok_instan
    165 !$OMP THREADPRIVATE(ok_instan)
    166 !
    167       LOGICAL ok_LES ! sortir le fichier LES
    168       save ok_LES                           
    169 !$OMP THREADPRIVATE(ok_LES)                 
    170 !
    171       LOGICAL callstats ! sortir le fichier stats
    172       save callstats                           
    173 !$OMP THREADPRIVATE(callstats)                 
    174 !
    175       LOGICAL ok_region ! sortir le fichier regional
    176       PARAMETER (ok_region=.FALSE.)
    177 !======================================================================
    178       real seuil_inversion
    179       save seuil_inversion
    180 !$OMP THREADPRIVATE(seuil_inversion)
    181       integer iflag_ratqs
    182       save iflag_ratqs
    183 !$OMP THREADPRIVATE(iflag_ratqs)
    184       real facteur
    185 
    186       REAL zz,znum,zden
    187       REAL wmax_th(klon)
    188       REAL tau_overturning_th(klon)
    189 
    190       integer lmax_th(klon)
    191       integer limbas(klon)
    192       real ratqscth(klon,klev)
    193       real ratqsdiff(klon,klev)
    194       real zqsatth(klon,klev)
    195 
    196 !======================================================================
    197 !
    198       INTEGER ivap          ! indice de traceurs pour vapeur d'eau
    199       PARAMETER (ivap=1)
    200       INTEGER iliq          ! indice de traceurs pour eau liquide
    201       PARAMETER (iliq=2)
    202 
    203 !
    204 !
    205 ! Variables argument:
    206 !
    207       INTEGER nlon
    208       INTEGER nlev
    209       REAL, intent(in):: jD_cur, jH_cur
    210 
    211       REAL pdtphys
    212       LOGICAL debut, lafin
    213       REAL paprs(klon,klev+1)
    214       REAL pplay(klon,klev)
    215       REAL pphi(klon,klev)
    216       REAL pphis(klon)
    217       REAL presnivs(klev)
    218       REAL znivsig(klev)
    219       real pir
    220 
    221       REAL u(klon,klev)
    222       REAL v(klon,klev)
    223       REAL t(klon,klev),thetal(klon,klev)
    224 ! thetal: ligne suivante a decommenter si vous avez les fichiers     MPL 20130625
    225 ! fth_fonctions.F90 et parkind1.F90
    226 ! sinon thetal=theta
    227 !     REAL fth_thetae,fth_thetav,fth_thetal
    228       REAL qx(klon,klev,nqtot)
    229       REAL flxmass_w(klon,klev)
    230       REAL d_u(klon,klev)
    231       REAL d_v(klon,klev)
    232       REAL d_t(klon,klev)
    233       REAL d_qx(klon,klev,nqtot)
    234       REAL d_ps(klon)
    235 ! Variables pour le transport convectif
    236       real da(klon,klev),phi(klon,klev,klev),mp(klon,klev)
    237 ! Variables pour le lessivage convectif
    238 ! RomP >>>
    239       real phi2(klon,klev,klev)
    240       real d1a(klon,klev),dam(klon,klev)
    241       real ev(klon,klev),ep(klon,klev)
    242       real clw(klon,klev),elij(klon,klev,klev)
    243       real epmlmMm(klon,klev,klev),eplaMm(klon,klev)
    244 ! RomP <<<
    245 !IM definition dynamique o_trac dans phys_output_open
    246 !      type(ctrl_out) :: o_trac(nqtot)
    247 !
    248 !IM Amip2 PV a theta constante
    249 !
    250       INTEGER nbteta
    251       PARAMETER(nbteta=3)
    252       CHARACTER*3 ctetaSTD(nbteta)
    253       DATA ctetaSTD/'350','380','405'/
    254       SAVE ctetaSTD
    255 !$OMP THREADPRIVATE(ctetaSTD)
    256       REAL rtetaSTD(nbteta)
    257       DATA rtetaSTD/350., 380., 405./
    258       SAVE rtetaSTD
    259 !$OMP THREADPRIVATE(rtetaSTD)     
    260 !
    261       REAL PVteta(klon,nbteta)
    262       REAL zx_tmp_3dte(iim,jjmp1,nbteta)
    263 !
    264 !MI Amip2 PV a theta constante
    265 
    266 !ym      INTEGER klevp1, klevm1
    267 !ym      PARAMETER(klevp1=klev+1,klevm1=klev-1)
    268 !ym#include "raddim.h"
    269 !
    270 !
    271 !IM Amip2
    272 ! variables a une pression donnee
    273 !
    274 #include "declare_STDlev.h"
    275 !
    276       CHARACTER*4 bb2
    277       CHARACTER*2 bb3
    278 !
    279 #include "radopt.h"
    280 !
    281 !
    282 
    283       REAL convliq(klon,klev)  ! eau liquide nuageuse convective
    284       REAL convfra(klon,klev)  ! fraction nuageuse convective
    285 
    286       REAL cldl_c(klon),cldm_c(klon),cldh_c(klon) !nuages bas, moyen et haut
    287       REAL cldt_c(klon),cldq_c(klon) !nuage total, eau liquide integree
    288       REAL cldl_s(klon),cldm_s(klon),cldh_s(klon) !nuages bas, moyen et haut
    289       REAL cldt_s(klon),cldq_s(klon) !nuage total, eau liquide integree
    290 
    291       INTEGER linv, kp1
    292 ! flwp, fiwp = Liquid Water Path & Ice Water Path (kg/m2)
    293 ! flwc, fiwc = Liquid Water Content & Ice Water Content (kg/kg)
    294       REAL flwp_c(klon), fiwp_c(klon)
    295       REAL flwc_c(klon,klev), fiwc_c(klon,klev)
    296       REAL flwp_s(klon), fiwp_s(klon)
    297       REAL flwc_s(klon,klev), fiwc_s(klon,klev)
    298 
    299 
    300 !IM ISCCP simulator v3.4
    301 ! dans clesphys.h top_height, overlap
    302 !v3.4
    303       INTEGER debug, debugcol
    304 !ym      INTEGER npoints
    305 !ym      PARAMETER(npoints=klon)
    306 !
    307       INTEGER sunlit(klon) !sunlit=1 if day; sunlit=0 if night
    308       INTEGER nregISCtot
    309       PARAMETER(nregISCtot=1)
    310 !
    311 ! imin_debut, nbpti, jmin_debut, nbptj : parametres pour sorties sur 1 region rectangulaire
    312 ! y compris pour 1 point
    313 ! imin_debut : indice minimum de i; nbpti : nombre de points en direction i (longitude)
    314 ! jmin_debut : indice minimum de j; nbptj : nombre de points en direction j (latitude)
    315       INTEGER imin_debut, nbpti
    316       INTEGER jmin_debut, nbptj
    317 !IM parametres ISCCP BEG
    318       INTEGER nbapp_isccp
    319 !     INTEGER nbapp_isccp,isccppas
    320 !     PARAMETER(isccppas=6) !appel du simulateurs tous les 6pas de temps de la physique
    321 !                           !i.e. toutes les 3 heures
    322       INTEGER n
    323       INTEGER ifreq_isccp(napisccp), freqin_pdt(napisccp)
    324       DATA ifreq_isccp/3/
    325       SAVE ifreq_isccp
    326 !$OMP THREADPRIVATE(ifreq_isccp)
    327       CHARACTER*5 typinout(napisccp)
    328       DATA typinout/'i3od'/
    329       SAVE typinout
    330 !$OMP THREADPRIVATE(typinout)
    331 !IM verif boxptop BEG
    332       CHARACTER*1 verticaxe(napisccp)
    333       DATA verticaxe/'1'/
    334       SAVE verticaxe
    335 !$OMP THREADPRIVATE(verticaxe)
    336 !IM verif boxptop END
    337       INTEGER nvlev(napisccp)
    338 !     INTEGER nvlev
    339       REAL t1, aa
    340       REAL seed_re(klon,napisccp)
    341 !ym !!!! A voir plus tard
    342 !ym      INTEGER iphy(iim,jjmp1)
    343 !IM parametres ISCCP END
    344 !
    345 ! ncol = nb. de sous-colonnes pour chaque maille du GCM
    346 ! ncolmx = No. max. de sous-colonnes pour chaque maille du GCM
    347 !      INTEGER ncol(napisccp), ncolmx, seed(klon,napisccp)
    348       INTEGER,SAVE :: ncol(napisccp)
    349 !$OMP THREADPRIVATE(ncol)
    350       INTEGER ncolmx, seed(klon,napisccp)
    351       REAL nbsunlit(nregISCtot,klon,napisccp)  !nbsunlit : moyenne de sunlit
    352 !     PARAMETER(ncolmx=1500)
    353       PARAMETER(ncolmx=300)
    354 !
    355 !IM verif boxptop BEG
    356       REAL vertlev(ncolmx,napisccp)
    357 !IM verif boxptop END
    358 !
    359       REAL,SAVE :: tautab_omp(0:255),tautab(0:255)
    360       INTEGER,SAVE :: invtau_omp(-20:45000),invtau(-20:45000)
    361 !$OMP THREADPRIVATE(tautab,invtau)
    362       REAL emsfc_lw
    363       PARAMETER(emsfc_lw=0.99)
    364 !     REAL    ran0                      ! type for random number fuction
    365 !
    366       REAL cldtot(klon,klev)
    367 ! variables de haut en bas pour le simulateur ISCCP
    368       REAL dtau_s(klon,klev) !tau nuages startiformes
    369       REAL dtau_c(klon,klev) !tau nuages convectifs
    370       REAL dem_s(klon,klev)  !emissivite nuages startiformes
    371       REAL dem_c(klon,klev)  !emissivite nuages convectifs
    372 !
    373 ! variables de haut en bas pour le simulateur ISCCP
    374       REAL pfull(klon,klev)
    375       REAL phalf(klon,klev+1)
    376       REAL qv(klon,klev)
    377       REAL cc(klon,klev)
    378       REAL conv(klon,klev)
    379       REAL dtau_sH2B(klon,klev)
    380       REAL dtau_cH2B(klon,klev)
    381       REAL at(klon,klev)
    382       REAL dem_sH2B(klon,klev)
    383       REAL dem_cH2B(klon,klev)
    384 !
    385       INTEGER kmax, lmax, lmax3
    386       PARAMETER(kmax=8, lmax=8, lmax3=3)
    387       INTEGER kmaxm1, lmaxm1
    388       PARAMETER(kmaxm1=kmax-1, lmaxm1=lmax-1)
    389       INTEGER iimx7, jjmx7, jjmp1x7
    390       PARAMETER(iimx7=iim*kmaxm1, jjmx7=jjm*lmaxm1,  &
    391       jjmp1x7=jjmp1*lmaxm1)
    392 !
    393 ! output from ISCCP simulator
    394       REAL fq_isccp(klon,kmaxm1,lmaxm1,napisccp)
    395       REAL fq_is_true(klon,kmaxm1,lmaxm1,napisccp)
    396       REAL totalcldarea(klon,napisccp)
    397       REAL meanptop(klon,napisccp)
    398       REAL meantaucld(klon,napisccp)
    399       REAL boxtau(klon,ncolmx,napisccp)
    400       REAL boxptop(klon,ncolmx,napisccp)
    401       REAL zx_tmp_fi3d_bx(klon,ncolmx)
    402       REAL zx_tmp_3d_bx(iim,jjmp1,ncolmx)
    403 !
    404       REAL cld_fi3d(klon,lmax3)
    405       REAL cld_3d(iim,jjmp1,lmax3)
    406 !
    407       INTEGER iw, iwmax
    408       REAL wmin, pas_w
    409 !     PARAMETER(wmin=-100.,pas_w=10.,iwmax=30)
    410 !IM 051005     PARAMETER(wmin=-200.,pas_w=10.,iwmax=40)
    411       PARAMETER(wmin=-100.,pas_w=10.,iwmax=20)
    412       REAL o500(klon)
    413 !
    414 
    415 ! sorties ISCCP
    416 
    417       integer nid_isccp
    418       save nid_isccp       
    419 !$OMP THREADPRIVATE(nid_isccp)
    420 
    421       REAL zx_tau(kmaxm1), zx_pc(lmaxm1), zx_o500(iwmax)
    422       DATA zx_tau/0.0, 0.3, 1.3, 3.6, 9.4, 23., 60./
    423       SAVE zx_tau
    424       DATA zx_pc/180., 310., 440., 560., 680., 800., 1000./
    425       SAVE zx_pc
    426 !$OMP THREADPRIVATE(zx_tau,zx_pc)
    427 ! cldtopres pression au sommet des nuages
    428       REAL cldtopres(lmaxm1), cldtopres3(lmax3)
    429       DATA cldtopres/180., 310., 440., 560., 680., 800., 1000./
    430       DATA cldtopres3/440., 680., 1000./
    431       SAVE cldtopres,cldtopres3
    432 !$OMP THREADPRIVATE(cldtopres,cldtopres3)
    433 !IM 051005 BEG
    434       INTEGER komega, nhoriRD
    435 
    436 ! taulev: numero du niveau de tau dans les sorties ISCCP
    437       CHARACTER *4 taulev(kmaxm1)
    438 !     DATA taulev/'tau1','tau2','tau3','tau4','tau5','tau6','tau7'/
    439       DATA taulev/'tau0','tau1','tau2','tau3','tau4','tau5','tau6'/
    440       CHARACTER *3 pclev(lmaxm1)
    441       DATA pclev/'pc1','pc2','pc3','pc4','pc5','pc6','pc7'/
    442       SAVE taulev,pclev
    443 !$OMP THREADPRIVATE(taulev,pclev)
    444 !
    445 ! cnameisccp
    446       CHARACTER *29 cnameisccp(lmaxm1,kmaxm1)
    447 !IM bad 151205     DATA cnameisccp/'pc< 50hPa, tau< 0.3',
    448       DATA cnameisccp/'pc= 50-180hPa, tau< 0.3', &
    449                       'pc= 180-310hPa, tau< 0.3', &
    450                       'pc= 310-440hPa, tau< 0.3', &
    451                       'pc= 440-560hPa, tau< 0.3', &
    452                       'pc= 560-680hPa, tau< 0.3', &
    453                       'pc= 680-800hPa, tau< 0.3', &
    454                       'pc= 800-1000hPa, tau< 0.3', &
    455                       'pc= 50-180hPa, tau= 0.3-1.3', &
    456                       'pc= 180-310hPa, tau= 0.3-1.3', &
    457                       'pc= 310-440hPa, tau= 0.3-1.3', &
    458                       'pc= 440-560hPa, tau= 0.3-1.3', &
    459                       'pc= 560-680hPa, tau= 0.3-1.3', &
    460                       'pc= 680-800hPa, tau= 0.3-1.3', &
    461                       'pc= 800-1000hPa, tau= 0.3-1.3', &
    462                       'pc= 50-180hPa, tau= 1.3-3.6', &
    463                       'pc= 180-310hPa, tau= 1.3-3.6', &
    464                       'pc= 310-440hPa, tau= 1.3-3.6', &
    465                       'pc= 440-560hPa, tau= 1.3-3.6', &
    466                       'pc= 560-680hPa, tau= 1.3-3.6', &
    467                       'pc= 680-800hPa, tau= 1.3-3.6', &
    468                       'pc= 800-1000hPa, tau= 1.3-3.6', &
    469                       'pc= 50-180hPa, tau= 3.6-9.4', &
    470                       'pc= 180-310hPa, tau= 3.6-9.4', &
    471                       'pc= 310-440hPa, tau= 3.6-9.4', &
    472                       'pc= 440-560hPa, tau= 3.6-9.4', &
    473                       'pc= 560-680hPa, tau= 3.6-9.4', &
    474                       'pc= 680-800hPa, tau= 3.6-9.4', &
    475                       'pc= 800-1000hPa, tau= 3.6-9.4', &
    476                       'pc= 50-180hPa, tau= 9.4-23', &
    477                       'pc= 180-310hPa, tau= 9.4-23', &
    478                       'pc= 310-440hPa, tau= 9.4-23', &
    479                       'pc= 440-560hPa, tau= 9.4-23', &
    480                       'pc= 560-680hPa, tau= 9.4-23', &
    481                       'pc= 680-800hPa, tau= 9.4-23', &
    482                       'pc= 800-1000hPa, tau= 9.4-23', &
    483                       'pc= 50-180hPa, tau= 23-60', &
    484                       'pc= 180-310hPa, tau= 23-60', &
    485                       'pc= 310-440hPa, tau= 23-60', &
    486                       'pc= 440-560hPa, tau= 23-60', &
    487                       'pc= 560-680hPa, tau= 23-60', &
    488                       'pc= 680-800hPa, tau= 23-60', &
    489                       'pc= 800-1000hPa, tau= 23-60', &
    490                       'pc= 50-180hPa, tau> 60.', &
    491                       'pc= 180-310hPa, tau> 60.', &
    492                       'pc= 310-440hPa, tau> 60.', &
    493                       'pc= 440-560hPa, tau> 60.', &
    494                       'pc= 560-680hPa, tau> 60.', &
    495                       'pc= 680-800hPa, tau> 60.', &
    496                       'pc= 800-1000hPa, tau> 60.'/
    497        SAVE cnameisccp
    498 !$OMP THREADPRIVATE(cnameisccp)
    499 !
    500 !     REAL zx_lonx7(iimx7), zx_latx7(jjmp1x7)
    501 !     INTEGER nhorix7
    502 !IM: region='3d' <==> sorties en global
    503       CHARACTER*3 region
    504       PARAMETER(region='3d')
    505 !
    506 !IM ISCCP simulator v3.4
    507 !
    508       logical ok_hf
    509 !
    510       integer nid_hf, nid_hf3d
    511       save ok_hf, nid_hf, nid_hf3d
    512 !$OMP THREADPRIVATE(ok_hf, nid_hf, nid_hf3d)
    513 !  QUESTION : noms de variables ?
    514 
    515       INTEGER        longcles
    516       PARAMETER    ( longcles = 20 )
    517       REAL clesphy0( longcles      )
    518 !
    519 ! Variables propres a la physique
    520       INTEGER itap
    521       SAVE itap                   ! compteur pour la physique
    522 !$OMP THREADPRIVATE(itap)
    523 !
    524       REAL,save ::  solarlong0
    525 !$OMP THREADPRIVATE(solarlong0)
    526 
    527 !
    528 !  Parametres de l'Orographie a l'Echelle Sous-Maille (OESM):
    529 !
    530 !IM 141004     REAL zulow(klon),zvlow(klon),zustr(klon), zvstr(klon)
    531       REAL zulow(klon),zvlow(klon)
    532 !
    533       INTEGER igwd,idx(klon),itest(klon)
    534 !
    535 !      REAL,allocatable,save :: run_off_lic_0(:)
     71  !#define histISCCP
     72  !!======================================================================
     73  !!    modif   ( P. Le Van ,  12/10/98 )
     74  !!
     75  !!  Arguments:
     76  !!
     77  !! nlon----input-I-nombre de points horizontaux
     78  !! nlev----input-I-nombre de couches verticales, doit etre egale a klev
     79  !! debut---input-L-variable logique indiquant le premier passage
     80  !! lafin---input-L-variable logique indiquant le dernier passage
     81  !! jD_cur       -R-jour courant a l'appel de la physique (jour julien)
     82  !! jH_cur       -R-heure courante a l'appel de la physique (jour julien)
     83  !! pdtphys-input-R-pas d'integration pour la physique (seconde)
     84  !! paprs---input-R-pression pour chaque inter-couche (en Pa)
     85  !! pplay---input-R-pression pour le mileu de chaque couche (en Pa)
     86  !! pphi----input-R-geopotentiel de chaque couche (g z) (reference sol)
     87  !! pphis---input-R-geopotentiel du sol
     88  !! presnivs-input_R_pressions approximat. des milieux couches ( en PA)
     89  !! u-------input-R-vitesse dans la direction X (de O a E) en m/s
     90  !! v-------input-R-vitesse Y (de S a N) en m/s
     91  !! t-------input-R-temperature (K)
     92  !! qx------input-R-humidite specifique (kg/kg) et d'autres traceurs
     93  !! d_t_dyn-input-R-tendance dynamique pour "t" (K/s)
     94  !! d_q_dyn-input-R-tendance dynamique pour "q" (kg/kg/s)
     95  !! flxmass_w -input-R- flux de masse verticale
     96  !! d_u-----output-R-tendance physique de "u" (m/s/s)
     97  !! d_v-----output-R-tendance physique de "v" (m/s/s)
     98  !! d_t-----output-R-tendance physique de "t" (K/s)
     99  !! d_qx----output-R-tendance physique de "qx" (kg/kg/s)
     100  !! d_ps----output-R-tendance physique de la pression au sol
     101  !!IM
     102  !! PVteta--output-R-vorticite potentielle a des thetas constantes
     103  !!======================================================================
     104  include "dimensions.h"
     105  integer jjmp1
     106  parameter (jjmp1=jjm+1-1/jjm)
     107  integer iip1
     108  parameter (iip1=iim+1)
     109
     110  include "regdim.h"
     111  include "dimsoil.h"
     112  include "clesphys.h"
     113  include "temps.h"
     114  include "iniprint.h"
     115  include "thermcell.h"
     116  !======================================================================
     117  LOGICAL ok_cvl  ! pour activer le nouveau driver pour convection KE
     118  PARAMETER (ok_cvl=.TRUE.)
     119  LOGICAL ok_gust ! pour activer l'effet des gust sur flux surface
     120  PARAMETER (ok_gust=.FALSE.)
     121  integer iflag_radia     ! active ou non le rayonnement (MPL)
     122  save iflag_radia
     123  !$OMP THREADPRIVATE(iflag_radia)
     124  !======================================================================
     125  LOGICAL check ! Verifier la conservation du modele en eau
     126  PARAMETER (check=.FALSE.)
     127  LOGICAL ok_stratus ! Ajouter artificiellement les stratus
     128  PARAMETER (ok_stratus=.FALSE.)
     129  !======================================================================
     130  REAL amn, amx
     131  INTEGER igout
     132  !======================================================================
     133  ! Clef controlant l'activation du cycle diurne:
     134  !cc      LOGICAL cycle_diurne
     135  !cc      PARAMETER (cycle_diurne=.FALSE.)
     136  !======================================================================
     137  ! Modele thermique du sol, a activer pour le cycle diurne:
     138  !cc      LOGICAL soil_model
     139  !cc      PARAMETER (soil_model=.FALSE.)
     140  !======================================================================
     141  ! Dans les versions precedentes, l'eau liquide nuageuse utilisee dans
     142  ! le calcul du rayonnement est celle apres la precipitation des nuages.
     143  ! Si cette cle new_oliq est activee, ce sera une valeur moyenne entre
     144  ! la condensation et la precipitation. Cette cle augmente les impacts
     145  ! radiatifs des nuages.
     146  !cc      LOGICAL new_oliq
     147  !cc      PARAMETER (new_oliq=.FALSE.)
     148  !======================================================================
     149  ! Clefs controlant deux parametrisations de l'orographie:
     150  !c      LOGICAL ok_orodr
     151  !cc      PARAMETER (ok_orodr=.FALSE.)
     152  !cc      LOGICAL ok_orolf
     153  !cc      PARAMETER (ok_orolf=.FALSE.)
     154  !======================================================================
     155  LOGICAL ok_journe ! sortir le fichier journalier
     156  save ok_journe
     157  !$OMP THREADPRIVATE(ok_journe)
     158  !
     159  LOGICAL ok_mensuel ! sortir le fichier mensuel
     160  save ok_mensuel
     161  !$OMP THREADPRIVATE(ok_mensuel)
     162  !
     163  LOGICAL ok_instan ! sortir le fichier instantane
     164  save ok_instan
     165  !$OMP THREADPRIVATE(ok_instan)
     166  !
     167  LOGICAL ok_LES ! sortir le fichier LES
     168  save ok_LES                           
     169  !$OMP THREADPRIVATE(ok_LES)                 
     170  !
     171  LOGICAL callstats ! sortir le fichier stats
     172  save callstats                           
     173  !$OMP THREADPRIVATE(callstats)                 
     174  !
     175  LOGICAL ok_region ! sortir le fichier regional
     176  PARAMETER (ok_region=.FALSE.)
     177  !======================================================================
     178  real seuil_inversion
     179  save seuil_inversion
     180  !$OMP THREADPRIVATE(seuil_inversion)
     181  integer iflag_ratqs
     182  save iflag_ratqs
     183  !$OMP THREADPRIVATE(iflag_ratqs)
     184  real facteur
     185
     186  REAL zz,znum,zden
     187  REAL wmax_th(klon)
     188  REAL tau_overturning_th(klon)
     189
     190  integer lmax_th(klon)
     191  integer limbas(klon)
     192  real ratqscth(klon,klev)
     193  real ratqsdiff(klon,klev)
     194  real zqsatth(klon,klev)
     195
     196  !======================================================================
     197  !
     198  INTEGER ivap          ! indice de traceurs pour vapeur d'eau
     199  PARAMETER (ivap=1)
     200  INTEGER iliq          ! indice de traceurs pour eau liquide
     201  PARAMETER (iliq=2)
     202
     203  !
     204  !
     205  ! Variables argument:
     206  !
     207  INTEGER nlon
     208  INTEGER nlev
     209  REAL, intent(in):: jD_cur, jH_cur
     210
     211  REAL pdtphys
     212  LOGICAL debut, lafin
     213  REAL paprs(klon,klev+1)
     214  REAL pplay(klon,klev)
     215  REAL pphi(klon,klev)
     216  REAL pphis(klon)
     217  REAL presnivs(klev)
     218  REAL znivsig(klev)
     219  real pir
     220
     221  REAL u(klon,klev)
     222  REAL v(klon,klev)
     223  REAL t(klon,klev),thetal(klon,klev)
     224  ! thetal: ligne suivante a decommenter si vous avez les fichiers     MPL 20130625
     225  ! fth_fonctions.F90 et parkind1.F90
     226  ! sinon thetal=theta
     227  !     REAL fth_thetae,fth_thetav,fth_thetal
     228  REAL qx(klon,klev,nqtot)
     229  REAL flxmass_w(klon,klev)
     230  REAL d_u(klon,klev)
     231  REAL d_v(klon,klev)
     232  REAL d_t(klon,klev)
     233  REAL d_qx(klon,klev,nqtot)
     234  REAL d_ps(klon)
     235  ! Variables pour le transport convectif
     236  real da(klon,klev),phi(klon,klev,klev),mp(klon,klev)
     237  ! Variables pour le lessivage convectif
     238  ! RomP >>>
     239  real phi2(klon,klev,klev)
     240  real d1a(klon,klev),dam(klon,klev)
     241  real ev(klon,klev),ep(klon,klev)
     242  real clw(klon,klev),elij(klon,klev,klev)
     243  real epmlmMm(klon,klev,klev),eplaMm(klon,klev)
     244  ! RomP <<<
     245  !IM definition dynamique o_trac dans phys_output_open
     246  !      type(ctrl_out) :: o_trac(nqtot)
     247  !
     248  !IM Amip2 PV a theta constante
     249  !
     250  INTEGER nbteta
     251  PARAMETER(nbteta=3)
     252  CHARACTER*3 ctetaSTD(nbteta)
     253  DATA ctetaSTD/'350','380','405'/
     254  SAVE ctetaSTD
     255  !$OMP THREADPRIVATE(ctetaSTD)
     256  REAL rtetaSTD(nbteta)
     257  DATA rtetaSTD/350., 380., 405./
     258  SAVE rtetaSTD
     259  !$OMP THREADPRIVATE(rtetaSTD)     
     260  !
     261  REAL PVteta(klon,nbteta)
     262  REAL zx_tmp_3dte(iim,jjmp1,nbteta)
     263  !
     264  !MI Amip2 PV a theta constante
     265
     266  !ym      INTEGER klevp1, klevm1
     267  !ym      PARAMETER(klevp1=klev+1,klevm1=klev-1)
     268  !ym      include "raddim.h"
     269  !
     270  !
     271  !IM Amip2
     272  ! variables a une pression donnee
     273  !
     274  include "declare_STDlev.h"
     275  !
     276  CHARACTER*4 bb2
     277  CHARACTER*2 bb3
     278  !
     279  include "radopt.h"
     280  !
     281  !
     282
     283  REAL convliq(klon,klev)  ! eau liquide nuageuse convective
     284  REAL convfra(klon,klev)  ! fraction nuageuse convective
     285
     286  REAL cldl_c(klon),cldm_c(klon),cldh_c(klon) !nuages bas, moyen et haut
     287  REAL cldt_c(klon),cldq_c(klon) !nuage total, eau liquide integree
     288  REAL cldl_s(klon),cldm_s(klon),cldh_s(klon) !nuages bas, moyen et haut
     289  REAL cldt_s(klon),cldq_s(klon) !nuage total, eau liquide integree
     290
     291  INTEGER linv, kp1
     292  ! flwp, fiwp = Liquid Water Path & Ice Water Path (kg/m2)
     293  ! flwc, fiwc = Liquid Water Content & Ice Water Content (kg/kg)
     294  REAL flwp_c(klon), fiwp_c(klon)
     295  REAL flwc_c(klon,klev), fiwc_c(klon,klev)
     296  REAL flwp_s(klon), fiwp_s(klon)
     297  REAL flwc_s(klon,klev), fiwc_s(klon,klev)
     298
     299
     300  !IM ISCCP simulator v3.4
     301  ! dans clesphys.h top_height, overlap
     302  !v3.4
     303  INTEGER debug, debugcol
     304  !ym      INTEGER npoints
     305  !ym      PARAMETER(npoints=klon)
     306  !
     307  INTEGER sunlit(klon) !sunlit=1 if day; sunlit=0 if night
     308  INTEGER nregISCtot
     309  PARAMETER(nregISCtot=1)
     310  !
     311  ! imin_debut, nbpti, jmin_debut, nbptj : parametres pour sorties sur 1 region rectangulaire
     312  ! y compris pour 1 point
     313  ! imin_debut : indice minimum de i; nbpti : nombre de points en direction i (longitude)
     314  ! jmin_debut : indice minimum de j; nbptj : nombre de points en direction j (latitude)
     315  INTEGER imin_debut, nbpti
     316  INTEGER jmin_debut, nbptj
     317  !IM parametres ISCCP BEG
     318  INTEGER nbapp_isccp
     319  !     INTEGER nbapp_isccp,isccppas
     320  !     PARAMETER(isccppas=6) !appel du simulateurs tous les 6pas de temps de la physique
     321  !                           !i.e. toutes les 3 heures
     322  INTEGER n
     323  INTEGER ifreq_isccp(napisccp), freqin_pdt(napisccp)
     324  DATA ifreq_isccp/3/
     325  SAVE ifreq_isccp
     326  !$OMP THREADPRIVATE(ifreq_isccp)
     327  CHARACTER*5 typinout(napisccp)
     328  DATA typinout/'i3od'/
     329  SAVE typinout
     330  !$OMP THREADPRIVATE(typinout)
     331  !IM verif boxptop BEG
     332  CHARACTER*1 verticaxe(napisccp)
     333  DATA verticaxe/'1'/
     334  SAVE verticaxe
     335  !$OMP THREADPRIVATE(verticaxe)
     336  !IM verif boxptop END
     337  INTEGER nvlev(napisccp)
     338  !     INTEGER nvlev
     339  REAL t1, aa
     340  REAL seed_re(klon,napisccp)
     341  !ym !!!! A voir plus tard
     342  !ym      INTEGER iphy(iim,jjmp1)
     343  !IM parametres ISCCP END
     344  !
     345  ! ncol = nb. de sous-colonnes pour chaque maille du GCM
     346  ! ncolmx = No. max. de sous-colonnes pour chaque maille du GCM
     347  !      INTEGER ncol(napisccp), ncolmx, seed(klon,napisccp)
     348  INTEGER,SAVE :: ncol(napisccp)
     349  !$OMP THREADPRIVATE(ncol)
     350  INTEGER ncolmx, seed(klon,napisccp)
     351  REAL nbsunlit(nregISCtot,klon,napisccp)  !nbsunlit : moyenne de sunlit
     352  !     PARAMETER(ncolmx=1500)
     353  PARAMETER(ncolmx=300)
     354  !
     355  !IM verif boxptop BEG
     356  REAL vertlev(ncolmx,napisccp)
     357  !IM verif boxptop END
     358  !
     359  REAL,SAVE :: tautab_omp(0:255),tautab(0:255)
     360  INTEGER,SAVE :: invtau_omp(-20:45000),invtau(-20:45000)
     361  !$OMP THREADPRIVATE(tautab,invtau)
     362  REAL emsfc_lw
     363  PARAMETER(emsfc_lw=0.99)
     364  !     REAL    ran0                      ! type for random number fuction
     365  !
     366  REAL cldtot(klon,klev)
     367  ! variables de haut en bas pour le simulateur ISCCP
     368  REAL dtau_s(klon,klev) !tau nuages startiformes
     369  REAL dtau_c(klon,klev) !tau nuages convectifs
     370  REAL dem_s(klon,klev)  !emissivite nuages startiformes
     371  REAL dem_c(klon,klev)  !emissivite nuages convectifs
     372  !
     373  ! variables de haut en bas pour le simulateur ISCCP
     374  REAL pfull(klon,klev)
     375  REAL phalf(klon,klev+1)
     376  REAL qv(klon,klev)
     377  REAL cc(klon,klev)
     378  REAL conv(klon,klev)
     379  REAL dtau_sH2B(klon,klev)
     380  REAL dtau_cH2B(klon,klev)
     381  REAL at(klon,klev)
     382  REAL dem_sH2B(klon,klev)
     383  REAL dem_cH2B(klon,klev)
     384  !
     385  INTEGER kmax, lmax, lmax3
     386  PARAMETER(kmax=8, lmax=8, lmax3=3)
     387  INTEGER kmaxm1, lmaxm1
     388  PARAMETER(kmaxm1=kmax-1, lmaxm1=lmax-1)
     389  INTEGER iimx7, jjmx7, jjmp1x7
     390  PARAMETER(iimx7=iim*kmaxm1, jjmx7=jjm*lmaxm1,  &
     391       jjmp1x7=jjmp1*lmaxm1)
     392  !
     393  ! output from ISCCP simulator
     394  REAL fq_isccp(klon,kmaxm1,lmaxm1,napisccp)
     395  REAL fq_is_true(klon,kmaxm1,lmaxm1,napisccp)
     396  REAL totalcldarea(klon,napisccp)
     397  REAL meanptop(klon,napisccp)
     398  REAL meantaucld(klon,napisccp)
     399  REAL boxtau(klon,ncolmx,napisccp)
     400  REAL boxptop(klon,ncolmx,napisccp)
     401  REAL zx_tmp_fi3d_bx(klon,ncolmx)
     402  REAL zx_tmp_3d_bx(iim,jjmp1,ncolmx)
     403  !
     404  REAL cld_fi3d(klon,lmax3)
     405  REAL cld_3d(iim,jjmp1,lmax3)
     406  !
     407  INTEGER iw, iwmax
     408  REAL wmin, pas_w
     409  !     PARAMETER(wmin=-100.,pas_w=10.,iwmax=30)
     410  !IM 051005     PARAMETER(wmin=-200.,pas_w=10.,iwmax=40)
     411  PARAMETER(wmin=-100.,pas_w=10.,iwmax=20)
     412  REAL o500(klon)
     413  !
     414
     415  ! sorties ISCCP
     416
     417  integer nid_isccp
     418  save nid_isccp       
     419  !$OMP THREADPRIVATE(nid_isccp)
     420
     421  REAL zx_tau(kmaxm1), zx_pc(lmaxm1), zx_o500(iwmax)
     422  DATA zx_tau/0.0, 0.3, 1.3, 3.6, 9.4, 23., 60./
     423  SAVE zx_tau
     424  DATA zx_pc/180., 310., 440., 560., 680., 800., 1000./
     425  SAVE zx_pc
     426  !$OMP THREADPRIVATE(zx_tau,zx_pc)
     427  ! cldtopres pression au sommet des nuages
     428  REAL cldtopres(lmaxm1), cldtopres3(lmax3)
     429  DATA cldtopres/180., 310., 440., 560., 680., 800., 1000./
     430  DATA cldtopres3/440., 680., 1000./
     431  SAVE cldtopres,cldtopres3
     432  !$OMP THREADPRIVATE(cldtopres,cldtopres3)
     433  !IM 051005 BEG
     434  INTEGER komega, nhoriRD
     435
     436  ! taulev: numero du niveau de tau dans les sorties ISCCP
     437  CHARACTER *4 taulev(kmaxm1)
     438  !     DATA taulev/'tau1','tau2','tau3','tau4','tau5','tau6','tau7'/
     439  DATA taulev/'tau0','tau1','tau2','tau3','tau4','tau5','tau6'/
     440  CHARACTER *3 pclev(lmaxm1)
     441  DATA pclev/'pc1','pc2','pc3','pc4','pc5','pc6','pc7'/
     442  SAVE taulev,pclev
     443  !$OMP THREADPRIVATE(taulev,pclev)
     444  !
     445  ! cnameisccp
     446  CHARACTER *29 cnameisccp(lmaxm1,kmaxm1)
     447  !IM bad 151205     DATA cnameisccp/'pc< 50hPa, tau< 0.3',
     448  DATA cnameisccp/'pc= 50-180hPa, tau< 0.3', &
     449       'pc= 180-310hPa, tau< 0.3', &
     450       'pc= 310-440hPa, tau< 0.3', &
     451       'pc= 440-560hPa, tau< 0.3', &
     452       'pc= 560-680hPa, tau< 0.3', &
     453       'pc= 680-800hPa, tau< 0.3', &
     454       'pc= 800-1000hPa, tau< 0.3', &
     455       'pc= 50-180hPa, tau= 0.3-1.3', &
     456       'pc= 180-310hPa, tau= 0.3-1.3', &
     457       'pc= 310-440hPa, tau= 0.3-1.3', &
     458       'pc= 440-560hPa, tau= 0.3-1.3', &
     459       'pc= 560-680hPa, tau= 0.3-1.3', &
     460       'pc= 680-800hPa, tau= 0.3-1.3', &
     461       'pc= 800-1000hPa, tau= 0.3-1.3', &
     462       'pc= 50-180hPa, tau= 1.3-3.6', &
     463       'pc= 180-310hPa, tau= 1.3-3.6', &
     464       'pc= 310-440hPa, tau= 1.3-3.6', &
     465       'pc= 440-560hPa, tau= 1.3-3.6', &
     466       'pc= 560-680hPa, tau= 1.3-3.6', &
     467       'pc= 680-800hPa, tau= 1.3-3.6', &
     468       'pc= 800-1000hPa, tau= 1.3-3.6', &
     469       'pc= 50-180hPa, tau= 3.6-9.4', &
     470       'pc= 180-310hPa, tau= 3.6-9.4', &
     471       'pc= 310-440hPa, tau= 3.6-9.4', &
     472       'pc= 440-560hPa, tau= 3.6-9.4', &
     473       'pc= 560-680hPa, tau= 3.6-9.4', &
     474       'pc= 680-800hPa, tau= 3.6-9.4', &
     475       'pc= 800-1000hPa, tau= 3.6-9.4', &
     476       'pc= 50-180hPa, tau= 9.4-23', &
     477       'pc= 180-310hPa, tau= 9.4-23', &
     478       'pc= 310-440hPa, tau= 9.4-23', &
     479       'pc= 440-560hPa, tau= 9.4-23', &
     480       'pc= 560-680hPa, tau= 9.4-23', &
     481       'pc= 680-800hPa, tau= 9.4-23', &
     482       'pc= 800-1000hPa, tau= 9.4-23', &
     483       'pc= 50-180hPa, tau= 23-60', &
     484       'pc= 180-310hPa, tau= 23-60', &
     485       'pc= 310-440hPa, tau= 23-60', &
     486       'pc= 440-560hPa, tau= 23-60', &
     487       'pc= 560-680hPa, tau= 23-60', &
     488       'pc= 680-800hPa, tau= 23-60', &
     489       'pc= 800-1000hPa, tau= 23-60', &
     490       'pc= 50-180hPa, tau> 60.', &
     491       'pc= 180-310hPa, tau> 60.', &
     492       'pc= 310-440hPa, tau> 60.', &
     493       'pc= 440-560hPa, tau> 60.', &
     494       'pc= 560-680hPa, tau> 60.', &
     495       'pc= 680-800hPa, tau> 60.', &
     496       'pc= 800-1000hPa, tau> 60.'/
     497  SAVE cnameisccp
     498  !$OMP THREADPRIVATE(cnameisccp)
     499  !
     500  !     REAL zx_lonx7(iimx7), zx_latx7(jjmp1x7)
     501  !     INTEGER nhorix7
     502  !IM: region='3d' <==> sorties en global
     503  CHARACTER*3 region
     504  PARAMETER(region='3d')
     505  !
     506  !IM ISCCP simulator v3.4
     507  !
     508  logical ok_hf
     509  !
     510  integer nid_hf, nid_hf3d
     511  save ok_hf, nid_hf, nid_hf3d
     512  !$OMP THREADPRIVATE(ok_hf, nid_hf, nid_hf3d)
     513  !  QUESTION : noms de variables ?
     514
     515  INTEGER        longcles
     516  PARAMETER    ( longcles = 20 )
     517  REAL clesphy0( longcles      )
     518  !
     519  ! Variables propres a la physique
     520  INTEGER itap
     521  SAVE itap                   ! compteur pour la physique
     522  !$OMP THREADPRIVATE(itap)
     523  !
     524  REAL,save ::  solarlong0
     525  !$OMP THREADPRIVATE(solarlong0)
     526
     527  !
     528  !  Parametres de l'Orographie a l'Echelle Sous-Maille (OESM):
     529  !
     530  !IM 141004     REAL zulow(klon),zvlow(klon),zustr(klon), zvstr(klon)
     531  REAL zulow(klon),zvlow(klon)
     532  !
     533  INTEGER igwd,idx(klon),itest(klon)
     534  !
     535  !      REAL,allocatable,save :: run_off_lic_0(:)
    536536!!$OMP THREADPRIVATE(run_off_lic_0)
    537 !ym      SAVE run_off_lic_0
    538 !KE43
    539 ! Variables liees a la convection de K. Emanuel (sb):
    540 !
    541       REAL bas, top             ! cloud base and top levels
    542       SAVE bas
    543       SAVE top
    544 !$OMP THREADPRIVATE(bas, top)
    545 
    546       REAL wdn(klon), tdn(klon), qdn(klon)
    547 !
    548 !=================================================================================================
    549 !CR04.12.07: on ajoute les nouvelles variables du nouveau schema de convection avec poches froides
    550 ! Variables li\'ees \`a la poche froide (jyg)
    551 
    552       REAL mip(klon,klev)  ! mass flux shed by the adiab ascent at each level
    553 !
    554       REAL wape_prescr, fip_prescr
    555       INTEGER it_wape_prescr
    556       SAVE wape_prescr, fip_prescr, it_wape_prescr
    557 !$OMP THREADPRIVATE(wape_prescr, fip_prescr, it_wape_prescr)
    558 !
    559 ! variables supplementaires de concvl
    560       REAL Tconv(klon,klev)
    561       REAL ment(klon,klev,klev),sij(klon,klev,klev)
    562       REAL dd_t(klon,klev),dd_q(klon,klev)
    563 
    564       real, save :: alp_bl_prescr=0.
    565       real, save :: ale_bl_prescr=0.
    566 
    567       real, save :: ale_max=1000.
    568       real, save :: alp_max=2.
    569 
    570       real, save :: wake_s_min_lsp=0.1
    571 
    572 !$OMP THREADPRIVATE(alp_bl_prescr,ale_bl_prescr)
    573 !$OMP THREADPRIVATE(ale_max,alp_max)
    574 !$OMP THREADPRIVATE(wake_s_min_lsp)
    575 
    576 
    577       real ok_wk_lsp(klon)
    578 
    579 !RC
    580 ! Variables li\'ees \`a la poche froide (jyg et rr)
    581 ! Version diagnostique pour l'instant : pas de r\'etroaction sur la convection
    582 
    583       REAL t_wake(klon,klev),q_wake(klon,klev) ! wake pour la convection
    584 
    585       REAL wake_dth(klon,klev)        ! wake : temp pot difference
    586 
    587       REAL wake_d_deltat_gw(klon,klev)! wake : delta T tendency due to Gravity Wave (/s)
    588       REAL wake_omgbdth(klon,klev)    ! Wake : flux of Delta_Theta transported by LS omega
    589       REAL wake_dp_omgb(klon,klev)    ! Wake : vertical gradient of large scale omega
    590       REAL wake_dtKE(klon,klev)       ! Wake : differential heating (wake - unpertubed) CONV
    591       REAL wake_dqKE(klon,klev)       ! Wake : differential moistening (wake - unpertubed) CONV
    592       REAL wake_dtPBL(klon,klev)      ! Wake : differential heating (wake - unpertubed) PBL
    593       REAL wake_dqPBL(klon,klev)      ! Wake : differential moistening (wake - unpertubed) PBL
    594       REAL wake_ddeltat(klon,klev),wake_ddeltaq(klon,klev)
    595       REAL wake_dp_deltomg(klon,klev) ! Wake : gradient vertical de wake_omg
    596       REAL wake_spread(klon,klev)     ! spreading term in wake_delt
    597 !
    598 !pourquoi y'a pas de save??
    599 !
    600       INTEGER wake_k(klon)            ! Wake sommet
    601 !
    602       REAL t_undi(klon,klev)               ! temperature moyenne dans la zone non perturbee
    603       REAL q_undi(klon,klev)               ! humidite moyenne dans la zone non perturbee
    604 !
    605 !jyg
    606 !cc      REAL wake_pe(klon)              ! Wake potential energy - WAPE
    607 
    608       REAL wake_gfl(klon)             ! Gust Front Length
    609       REAL wake_dens(klon)
    610 !
    611 !
    612       REAL dt_dwn(klon,klev)
    613       REAL dq_dwn(klon,klev)
    614       REAL wdt_PBL(klon,klev)
    615       REAL udt_PBL(klon,klev)
    616       REAL wdq_PBL(klon,klev)
    617       REAL udq_PBL(klon,klev)
    618       REAL M_dwn(klon,klev)
    619       REAL M_up(klon,klev)
    620       REAL dt_a(klon,klev)
    621       REAL dq_a(klon,klev)
    622       REAL, SAVE :: alp_offset
    623 !$OMP THREADPRIVATE(alp_offset)
    624 
    625 !
    626 !RR:fin declarations poches froides
    627 !=======================================================================================================
    628        
    629       REAL ztv(klon,klev),ztva(klon,klev)
    630       REAL zpspsk(klon,klev)
    631       REAL ztla(klon,klev),zqla(klon,klev)
    632       REAL zthl(klon,klev)
    633 
    634 !cc nrlmd le 10/04/2012
    635 
    636 !--------Stochastic Boundary Layer Triggering: ALE_BL--------
    637 !---Propri\'et\'es du thermiques au LCL
    638       real zlcl_th(klon)                                     ! Altitude du LCL calcul\'e continument (pcon dans thermcell_main.F90)
    639       real fraca0(klon)                                      ! Fraction des thermiques au LCL
    640       real w0(klon)                                          ! Vitesse des thermiques au LCL
    641       real w_conv(klon)                                      ! Vitesse verticale de grande \'echelle au LCL
    642       real tke0(klon,klev+1)                                 ! TKE au début du pas de temps
    643       real therm_tke_max0(klon)                              ! TKE dans les thermiques au LCL
    644       real env_tke_max0(klon)                                ! TKE dans l'environnement au LCL
    645 
    646 !---D\'eclenchement stochastique
    647       integer :: tau_trig(klon)
    648 
    649 !--------Statistical Boundary Layer Closure: ALP_BL--------
    650 !---Profils de TKE dans et hors du thermique
    651       real pbl_tke_input(klon,klev+1,nbsrf)
    652       real therm_tke_max(klon,klev)                          ! Profil de TKE dans les thermiques
    653       real env_tke_max(klon,klev)                            ! Profil de TKE dans l'environnement
    654 
    655 
    656 !cc fin nrlmd le 10/04/2012
    657 
    658 ! Variables locales pour la couche limite (al1):
    659 !
    660 !Al1      REAL pblh(klon)           ! Hauteur de couche limite
    661 !Al1      SAVE pblh
    662 !34EK
    663 !
    664 ! Variables locales:
    665 !
    666 !AA
    667 !AA  Pour phytrac
    668       REAL u1(klon)             ! vents dans la premiere couche U
    669       REAL v1(klon)             ! vents dans la premiere couche V
    670 
    671 !@$$      LOGICAL offline           ! Controle du stockage ds "physique"
    672 !@$$      PARAMETER (offline=.false.)
    673 !@$$      INTEGER physid
    674       REAL frac_impa(klon,klev) ! fractions d'aerosols lessivees (impaction)
    675       REAL frac_nucl(klon,klev) ! idem (nucleation)
    676 ! RomP >>>
    677       REAL beta_prec_fisrt(klon,klev) ! taux de conv de l'eau cond (fisrt)
    678 ! RomP <<<
    679       INTEGER       :: iii
    680       REAL          :: calday
    681 
    682 !IM cf FH pour Tiedtke 080604
    683       REAL rain_tiedtke(klon),snow_tiedtke(klon)
    684 !
    685 !IM 050204 END
    686       REAL devap(klon) ! evaporation et sa derivee
    687       REAL dsens(klon) ! chaleur sensible et sa derivee
    688 
    689 !
    690 ! Conditions aux limites
    691 !
    692 !
    693       REAL :: day_since_equinox
    694 ! Date de l'equinoxe de printemps
    695       INTEGER, parameter :: mth_eq=3, day_eq=21
    696       REAL :: jD_eq
    697 
    698       LOGICAL, parameter :: new_orbit = .true.
    699 
    700 !
    701       INTEGER lmt_pas
    702       SAVE lmt_pas                ! frequence de mise a jour
    703 !$OMP THREADPRIVATE(lmt_pas)
    704       real zmasse(klon, llm),exner(klon, llm)
    705 !     (column-density of mass of air in a cell, in kg m-2)
    706       real, parameter:: dobson_u = 2.1415e-05 ! Dobson unit, in kg m-2
    707 
    708 !IM sorties
    709       REAL un_jour
    710       PARAMETER(un_jour=86400.)
    711 !======================================================================
    712 !
    713 ! Declaration des procedures appelees
    714 !
    715       EXTERNAL angle     ! calculer angle zenithal du soleil
    716       EXTERNAL alboc     ! calculer l'albedo sur ocean
    717       EXTERNAL ajsec     ! ajustement sec
    718       EXTERNAL conlmd    ! convection (schema LMD)
    719 !KE43
    720       EXTERNAL conema3  ! convect4.3
    721       EXTERNAL fisrtilp  ! schema de condensation a grande echelle (pluie)
    722 !AA
    723       EXTERNAL fisrtilp_tr ! schema de condensation a grande echelle (pluie)
    724 !                          ! stockage des coefficients necessaires au
    725 !                          ! lessivage OFF-LINE et ON-LINE
    726       EXTERNAL hgardfou  ! verifier les temperatures
    727       EXTERNAL nuage     ! calculer les proprietes radiatives
    728 !C      EXTERNAL o3cm      ! initialiser l'ozone
    729       EXTERNAL orbite    ! calculer l'orbite terrestre
    730       EXTERNAL phyetat0  ! lire l'etat initial de la physique
    731       EXTERNAL phyredem  ! ecrire l'etat de redemarrage de la physique
    732       EXTERNAL suphel    ! initialiser certaines constantes
    733       EXTERNAL transp    ! transport total de l'eau et de l'energie
    734       EXTERNAL ecribina  ! ecrire le fichier binaire global
    735       EXTERNAL ecribins  ! ecrire le fichier binaire global
    736       EXTERNAL ecrirega  ! ecrire le fichier binaire regional
    737       EXTERNAL ecriregs  ! ecrire le fichier binaire regional
    738 !IM
    739       EXTERNAL haut2bas  !variables de haut en bas
    740       EXTERNAL ini_undefSTD  !initialise a 0 une variable a 1 niveau de pression
    741       EXTERNAL undefSTD      !somme les valeurs definies d'1 var a 1 niveau de pression
    742 !     EXTERNAL moy_undefSTD  !moyenne d'1 var a 1 niveau de pression
    743 !     EXTERNAL moyglo_aire   !moyenne globale d'1 var ponderee par l'aire de la maille (moyglo_pondaire)
    744 !                            !par la masse/airetot (moyglo_pondaima) et la vraie masse (moyglo_pondmass)
    745 !
    746 ! Variables locales
    747 !
    748       REAL rhcl(klon,klev)    ! humiditi relative ciel clair
    749       REAL dialiq(klon,klev)  ! eau liquide nuageuse
    750       REAL diafra(klon,klev)  ! fraction nuageuse
    751       REAL cldliq(klon,klev)  ! eau liquide nuageuse
    752 !
    753 !XXX PB
    754       REAL fluxq(klon,klev, nbsrf)   ! flux turbulent d'humidite
    755 !
    756       REAL zxfluxt(klon, klev)
    757       REAL zxfluxq(klon, klev)
    758       REAL zxfluxu(klon, klev)
    759       REAL zxfluxv(klon, klev)
    760 
    761 ! Le rayonnement n'est pas calcule tous les pas, il faut donc
    762 !                      sauvegarder les sorties du rayonnement
    763 !ym      SAVE  heat,cool,albpla,topsw,toplw,solsw,sollw,sollwdown
    764 !ym      SAVE  sollwdownclr, toplwdown, toplwdownclr
    765 !ym      SAVE  topsw0,toplw0,solsw0,sollw0, heat0, cool0
    766 !
    767       INTEGER itaprad
    768       SAVE itaprad
    769 !$OMP THREADPRIVATE(itaprad)
    770 !
    771       REAL conv_q(klon,klev) ! convergence de l'humidite (kg/kg/s)
    772       REAL conv_t(klon,klev) ! convergence de la temperature(K/s)
    773 
    774 !
    775       REAL zxsnow(klon)
    776       REAL zxsnow_dummy(klon)
    777 !
    778       REAL dist, rmu0(klon), fract(klon)
    779       REAL zdtime, zlongi
    780 !
    781       CHARACTER*2 str2
    782       CHARACTER*2 iqn
    783 !
    784       REAL qcheck
    785       REAL z_avant(klon), z_apres(klon), z_factor(klon)
    786       LOGICAL zx_ajustq
    787 !
    788       REAL za, zb
    789       REAL zx_t, zx_qs, zdelta, zcor, zfra, zlvdcp, zlsdcp
    790       real zqsat(klon,klev)
    791       INTEGER i, k, iq, ig, j, nsrf, ll, l, iiq, iff
    792       REAL t_coup
    793       PARAMETER (t_coup=234.0)
    794 
    795 !ym A voir plus tard !!
    796 !ym      REAL zx_relief(iim,jjmp1)
    797 !ym      REAL zx_aire(iim,jjmp1)
    798 !
    799 ! Grandeurs de sorties
    800       REAL s_capCL(klon)
    801       REAL s_oliqCL(klon), s_cteiCL(klon)
    802       REAL s_trmb1(klon), s_trmb2(klon)
    803       REAL s_trmb3(klon)
    804 !KE43
    805 ! Variables locales pour la convection de K. Emanuel (sb):
    806 
    807       REAL tvp(klon,klev)       ! virtual temp of lifted parcel
    808       CHARACTER*40 capemaxcels  !max(CAPE)
    809 
    810       REAL rflag(klon)          ! flag fonctionnement de convect
    811       INTEGER iflagctrl(klon)          ! flag fonctionnement de convect
    812 
    813 ! -- convect43:
    814       INTEGER ntra              ! nb traceurs pour convect4.3
    815       REAL pori_con(klon)    ! pressure at the origin level of lifted parcel
    816       REAL dtma_con(klon),dtlcl_con(klon)
    817       REAL dtvpdt1(klon,klev), dtvpdq1(klon,klev)
    818       REAL dplcldt(klon), dplcldr(klon)
    819 !?     .     condm_con(klon,klev),conda_con(klon,klev),
    820 !?     .     mr_con(klon,klev),ep_con(klon,klev)
    821 !?     .    ,sadiab(klon,klev),wadiab(klon,klev)
    822 ! --
    823 !34EK
    824 !
    825 ! Variables du changement
    826 !
    827 ! con: convection
    828 ! lsc: condensation a grande echelle (Large-Scale-Condensation)
    829 ! ajs: ajustement sec
    830 ! eva: evaporation de l'eau liquide nuageuse
    831 ! vdf: couche limite (Vertical DiFfusion)
    832 
    833 ! tendance nulles
    834       REAL du0(klon,klev),dv0(klon,klev),dq0(klon,klev),dql0(klon,klev)
    835 
    836 !
    837 !********************************************************
    838 !     declarations
    839      
    840 !********************************************************
    841 !IM 081204 END
    842 !
    843       REAL pen_u(klon,klev), pen_d(klon,klev)
    844       REAL pde_u(klon,klev), pde_d(klon,klev)
    845       INTEGER kcbot(klon), kctop(klon), kdtop(klon)
    846 !
    847       REAL ratqsc(klon,klev)
    848       real ratqsbas,ratqshaut,tau_ratqs
    849       save ratqsbas,ratqshaut,tau_ratqs
    850 !$OMP THREADPRIVATE(ratqsbas,ratqshaut,tau_ratqs)
    851       real zpt_conv(klon,klev)
    852 
    853 ! Parametres lies au nouveau schema de nuages (SB, PDF)
    854       real fact_cldcon
    855       real facttemps
    856       logical ok_newmicro
    857       save ok_newmicro
    858 !$OMP THREADPRIVATE(ok_newmicro)
    859       save fact_cldcon,facttemps
    860 !$OMP THREADPRIVATE(fact_cldcon,facttemps)
    861 
    862       integer iflag_cldcon
    863       save iflag_cldcon
    864 !$OMP THREADPRIVATE(iflag_cldcon)
    865       logical ptconv(klon,klev)
    866 !IM cf. AM 081204 BEG
    867       logical ptconvth(klon,klev)
    868 !IM cf. AM 081204 END
    869 !
    870 ! Variables liees a l'ecriture de la bande histoire physique
    871 !
    872 !======================================================================
    873 !
    874 !IM cf. AM 081204 BEG
    875 !   declarations pour sortir sur une sous-region
    876       integer imin_ins,imax_ins,jmin_ins,jmax_ins
    877       save imin_ins,imax_ins,jmin_ins,jmax_ins
    878 !$OMP THREADPRIVATE(imin_ins,imax_ins,jmin_ins,jmax_ins)
    879 !      real lonmin_ins,lonmax_ins,latmin_ins
    880 !     s  ,latmax_ins
    881 !     data lonmin_ins,lonmax_ins,latmin_ins
    882 !    s  ,latmax_ins/
    883 ! valeurs initiales     s   -5.,20.,41.,55./   
    884 !    s   100.,130.,-20.,20./
    885 !    s   -180.,180.,-90.,90./
    886 !======================================================================
    887 !IM cf. AM 081204 END
    888 
    889 !
    890       integer itau_w   ! pas de temps ecriture = itap + itau_phy
    891 !
    892 !
    893 ! Variables locales pour effectuer les appels en serie
    894 !
    895 !IM RH a 2m (la surface)
    896       REAL Lheat
    897 
    898       INTEGER        length
    899       PARAMETER    ( length = 100 )
    900       REAL tabcntr0( length       )
    901 !
    902       INTEGER ndex2d(iim*jjmp1),ndex3d(iim*jjmp1*klev)
    903 !IM
    904       INTEGER ndex2d1(iwmax)
    905 !
    906 !IM AMIP2 BEG
    907       REAL moyglo, mountor
    908 !IM 141004 BEG
    909       REAL zustrdr(klon), zvstrdr(klon)
    910       REAL zustrli(klon), zvstrli(klon)
    911       REAL zustrph(klon), zvstrph(klon)
    912       REAL zustrhi(klon), zvstrhi(klon)
    913       REAL aam, torsfc
    914 !IM 141004 END
    915 !IM 190504 BEG
    916       INTEGER ij, imp1jmp1
    917       PARAMETER(imp1jmp1=(iim+1)*jjmp1)
    918 !ym A voir plus tard
    919       REAL zx_tmp(imp1jmp1), airedyn(iim+1,jjmp1)
    920       REAL padyn(iim+1,jjmp1,klev+1)
    921       REAL dudyn(iim+1,jjmp1,klev)
    922       REAL rlatdyn(iim+1,jjmp1)
    923 !IM 190504 END
    924       LOGICAL ok_msk
    925       REAL msk(klon)
    926 !IM
    927       REAL airetot, pi
    928 !ym A voir plus tard
    929 !ym      REAL zm_wo(jjmp1, klev)
    930 !IM AMIP2 END
    931 !
    932       REAL zx_tmp_fi2d(klon)      ! variable temporaire grille physique
    933       REAL zx_tmp_fi3d(klon,klev) ! variable temporaire pour champs 3D
    934       REAL zx_tmp_fi3d1(klon,klev+1) !variable temporaire pour champs 3D (kelvp1)
    935       REAL(KIND=8) zx_tmp2_fi3d(klon,klev) ! variable temporaire pour champs 3D
    936       REAL zx_tmp_2d(iim,jjmp1), zx_tmp_3d(iim,jjmp1,klev)
    937       REAL zx_lon(iim,jjmp1), zx_lat(iim,jjmp1)
    938 !
    939       INTEGER nid_day, nid_mth, nid_ins, nid_mthnmc, nid_daynmc
    940       INTEGER nid_hfnmc, nid_day_seri, nid_ctesGCM
    941       SAVE nid_day, nid_mth, nid_ins, nid_mthnmc, nid_daynmc
    942       SAVE nid_hfnmc, nid_day_seri, nid_ctesGCM
    943 !$OMP THREADPRIVATE(nid_day, nid_mth, nid_ins)
    944 !$OMP THREADPRIVATE(nid_mthnmc, nid_daynmc, nid_hfnmc)
    945 !$OMP THREADPRIVATE(nid_day_seri,nid_ctesGCM)
    946 !
    947 !IM 280405 BEG
    948       INTEGER nid_bilKPins, nid_bilKPave
    949       SAVE nid_bilKPins, nid_bilKPave
    950 !$OMP THREADPRIVATE(nid_bilKPins, nid_bilKPave)
    951 !
    952       REAL ve_lay(klon,klev) ! transport meri. de l'energie a chaque niveau vert.
    953       REAL vq_lay(klon,klev) ! transport meri. de l'eau a chaque niveau vert.
    954       REAL ue_lay(klon,klev) ! transport zonal de l'energie a chaque niveau vert.
    955       REAL uq_lay(klon,klev) ! transport zonal de l'eau a chaque niveau vert.
    956 !
    957       INTEGER nhori, nvert, nvert1, nvert3
    958       REAL zsto, zsto1, zsto2
    959       REAL zstophy, zstorad, zstohf, zstoday, zstomth, zout
    960       REAL zcals(napisccp), zcalh(napisccp), zoutj(napisccp)
    961       REAL zout_isccp(napisccp)
    962       SAVE zcals, zcalh, zoutj, zout_isccp
    963 !$OMP THREADPRIVATE(zcals, zcalh, zoutj, zout_isccp)
    964 
    965       real zjulian
    966       save zjulian
    967 !$OMP THREADPRIVATE(zjulian)
    968 
    969       character*20 modname
    970       character*80 abort_message
    971       logical ok_sync
    972       real date0
    973       integer idayref
    974 
    975 ! essai writephys
    976       integer fid_day, fid_mth, fid_ins
    977       parameter (fid_ins = 1, fid_day = 2, fid_mth = 3)
    978       integer prof2d_on, prof3d_on, prof2d_av, prof3d_av
    979       parameter (prof2d_on = 1, prof3d_on = 2, &
    980                  prof2d_av = 3, prof3d_av = 4)
    981       character*30 nom_fichier
    982       character*40 varname
    983       character*40 vartitle
    984       character*20 varunits
    985 !     Variables liees au bilan d'energie et d'enthalpi
    986       REAL ztsol(klon)
    987       REAL      h_vcol_tot, h_dair_tot, h_qw_tot, h_ql_tot &
    988               , h_qs_tot, qw_tot, ql_tot, qs_tot , ec_tot
    989       SAVE      h_vcol_tot, h_dair_tot, h_qw_tot, h_ql_tot &
    990               , h_qs_tot, qw_tot, ql_tot, qs_tot , ec_tot
    991 !$OMP THREADPRIVATE(h_vcol_tot, h_dair_tot, h_qw_tot, h_ql_tot)
    992 !$OMP THREADPRIVATE(h_qs_tot, qw_tot, ql_tot, qs_tot , ec_tot)
    993       REAL      d_h_vcol, d_h_dair, d_qt, d_qw, d_ql, d_qs, d_ec
    994       REAL      d_h_vcol_phy
    995       REAL      fs_bound, fq_bound
    996       SAVE      d_h_vcol_phy
    997 !$OMP THREADPRIVATE(d_h_vcol_phy)
    998       REAL      zero_v(klon)
    999       CHARACTER*15 ztit
    1000       INTEGER   ip_ebil  ! PRINT level for energy conserv. diag.
    1001       SAVE      ip_ebil
    1002       DATA      ip_ebil/0/
    1003 !$OMP THREADPRIVATE(ip_ebil)
    1004       INTEGER   if_ebil ! level for energy conserv. dignostics
    1005       SAVE      if_ebil
    1006 !$OMP THREADPRIVATE(if_ebil)
    1007 !+jld ec_conser
    1008       REAL ZRCPD
    1009 !-jld ec_conser
    1010       REAL q2m(klon,nbsrf)  ! humidite a 2m
    1011 
    1012 !IM: t2m, q2m, ustar, u10m, v10m et t2mincels, t2maxcels
    1013       CHARACTER*40 t2mincels, t2maxcels       !t2m min., t2m max
    1014       CHARACTER*40 tinst, tave, typeval
    1015       REAL cldtaupi(klon,klev)  ! Cloud optical thickness for pre-industrial (pi) aerosols
    1016 
    1017 
    1018       REAL re_top(klon), fl_top(klon) ! CDR at top of liquid water clouds
    1019 
    1020       ! Aerosol optical properties
    1021       CHARACTER*4, DIMENSION(naero_grp) :: rfname
    1022       REAL, DIMENSION(klon)          :: aerindex     ! POLDER aerosol index
    1023       REAL, DIMENSION(klon,klev)     :: mass_solu_aero    ! total mass concentration for all soluble aerosols[ug/m3]
    1024       REAL, DIMENSION(klon,klev)     :: mass_solu_aero_pi ! - " - (pre-industrial value)
    1025       INTEGER :: naero ! aerosol species
    1026 
    1027       ! Parameters
    1028       LOGICAL ok_ade, ok_aie    ! Apply aerosol (in)direct effects or not
    1029       LOGICAL ok_cdnc          ! ok cloud droplet number concentration (O. Boucher 01-2013)
    1030       REAL bl95_b0, bl95_b1   ! Parameter in Boucher and Lohmann (1995)
    1031       SAVE ok_ade, ok_aie, ok_cdnc, bl95_b0, bl95_b1
    1032 !$OMP THREADPRIVATE(ok_ade, ok_aie, ok_cdnc, bl95_b0, bl95_b1)
    1033       LOGICAL, SAVE :: aerosol_couple ! true  : calcul des aerosols dans INCA
    1034                                       ! false : lecture des aerosol dans un fichier
    1035 !$OMP THREADPRIVATE(aerosol_couple)   
    1036       INTEGER, SAVE :: flag_aerosol
    1037 !$OMP THREADPRIVATE(flag_aerosol)
    1038       LOGICAL, SAVE :: new_aod
    1039 !$OMP THREADPRIVATE(new_aod)
    1040 !
    1041 !--STRAT AEROSOL
    1042       LOGICAL, SAVE :: flag_aerosol_strat
    1043 !$OMP THREADPRIVATE(flag_aerosol_strat)
    1044 !c-fin STRAT AEROSOL
    1045 !
    1046 ! Declaration des constantes et des fonctions thermodynamiques
    1047 !
    1048       LOGICAL,SAVE :: first=.true.
    1049 !$OMP THREADPRIVATE(first)
    1050 
    1051       integer iunit
    1052 
    1053       integer, save::  read_climoz ! read ozone climatology
    1054 !     (let it keep the default OpenMP shared attribute)
    1055 !     Allowed values are 0, 1 and 2
    1056 !     0: do not read an ozone climatology
    1057 !     1: read a single ozone climatology that will be used day and night
    1058 !     2: read two ozone climatologies, the average day and night
    1059 !     climatology and the daylight climatology
    1060 
    1061       integer, save:: ncid_climoz ! NetCDF file containing ozone climatologies
    1062 !     (let it keep the default OpenMP shared attribute)
    1063 
    1064       real, pointer, save:: press_climoz(:)
    1065 !     (let it keep the default OpenMP shared attribute)
    1066 !     edges of pressure intervals for ozone climatologies, in Pa, in strictly
    1067 !     ascending order
    1068 
    1069       integer, save:: co3i = 0
    1070 !     time index in NetCDF file of current ozone fields
    1071 !$OMP THREADPRIVATE(co3i)
    1072 
    1073       integer ro3i
    1074 !     required time index in NetCDF file for the ozone fields, between 1
    1075 !     and 360
    1076 
    1077       INTEGER ierr
    1078 #include "YOMCST.h"
    1079 #include "YOETHF.h"
    1080 #include "FCTTRE.h"
    1081 !IM 100106 BEG : pouvoir sortir les ctes de la physique
    1082 #include "conema3.h"
    1083 #include "fisrtilp.h"
    1084 #include "nuage.h"
    1085 #include "compbl.h"
    1086 !IM 100106 END : pouvoir sortir les ctes de la physique
    1087 !
     537  !ym      SAVE run_off_lic_0
     538  !KE43
     539  ! Variables liees a la convection de K. Emanuel (sb):
     540  !
     541  REAL bas, top             ! cloud base and top levels
     542  SAVE bas
     543  SAVE top
     544  !$OMP THREADPRIVATE(bas, top)
     545
     546  REAL wdn(klon), tdn(klon), qdn(klon)
     547  !
     548  !=================================================================================================
     549  !CR04.12.07: on ajoute les nouvelles variables du nouveau schema de convection avec poches froides
     550  ! Variables li\'ees \`a la poche froide (jyg)
     551
     552  REAL mip(klon,klev)  ! mass flux shed by the adiab ascent at each level
     553  !
     554  REAL wape_prescr, fip_prescr
     555  INTEGER it_wape_prescr
     556  SAVE wape_prescr, fip_prescr, it_wape_prescr
     557  !$OMP THREADPRIVATE(wape_prescr, fip_prescr, it_wape_prescr)
     558  !
     559  ! variables supplementaires de concvl
     560  REAL Tconv(klon,klev)
     561  REAL ment(klon,klev,klev),sij(klon,klev,klev)
     562  REAL dd_t(klon,klev),dd_q(klon,klev)
     563
     564  real, save :: alp_bl_prescr=0.
     565  real, save :: ale_bl_prescr=0.
     566
     567  real, save :: ale_max=1000.
     568  real, save :: alp_max=2.
     569
     570  real, save :: wake_s_min_lsp=0.1
     571
     572  !$OMP THREADPRIVATE(alp_bl_prescr,ale_bl_prescr)
     573  !$OMP THREADPRIVATE(ale_max,alp_max)
     574  !$OMP THREADPRIVATE(wake_s_min_lsp)
     575
     576
     577  real ok_wk_lsp(klon)
     578
     579  !RC
     580  ! Variables li\'ees \`a la poche froide (jyg et rr)
     581  ! Version diagnostique pour l'instant : pas de r\'etroaction sur la convection
     582
     583  REAL t_wake(klon,klev),q_wake(klon,klev) ! wake pour la convection
     584
     585  REAL wake_dth(klon,klev)        ! wake : temp pot difference
     586
     587  REAL wake_d_deltat_gw(klon,klev)! wake : delta T tendency due to Gravity Wave (/s)
     588  REAL wake_omgbdth(klon,klev)    ! Wake : flux of Delta_Theta transported by LS omega
     589  REAL wake_dp_omgb(klon,klev)    ! Wake : vertical gradient of large scale omega
     590  REAL wake_dtKE(klon,klev)       ! Wake : differential heating (wake - unpertubed) CONV
     591  REAL wake_dqKE(klon,klev)       ! Wake : differential moistening (wake - unpertubed) CONV
     592  REAL wake_dtPBL(klon,klev)      ! Wake : differential heating (wake - unpertubed) PBL
     593  REAL wake_dqPBL(klon,klev)      ! Wake : differential moistening (wake - unpertubed) PBL
     594  REAL wake_ddeltat(klon,klev),wake_ddeltaq(klon,klev)
     595  REAL wake_dp_deltomg(klon,klev) ! Wake : gradient vertical de wake_omg
     596  REAL wake_spread(klon,klev)     ! spreading term in wake_delt
     597  !
     598  !pourquoi y'a pas de save??
     599  !
     600  INTEGER wake_k(klon)            ! Wake sommet
     601  !
     602  REAL t_undi(klon,klev)               ! temperature moyenne dans la zone non perturbee
     603  REAL q_undi(klon,klev)               ! humidite moyenne dans la zone non perturbee
     604  !
     605  !jyg
     606  !cc      REAL wake_pe(klon)              ! Wake potential energy - WAPE
     607
     608  REAL wake_gfl(klon)             ! Gust Front Length
     609  REAL wake_dens(klon)
     610  !
     611  !
     612  REAL dt_dwn(klon,klev)
     613  REAL dq_dwn(klon,klev)
     614  REAL wdt_PBL(klon,klev)
     615  REAL udt_PBL(klon,klev)
     616  REAL wdq_PBL(klon,klev)
     617  REAL udq_PBL(klon,klev)
     618  REAL M_dwn(klon,klev)
     619  REAL M_up(klon,klev)
     620  REAL dt_a(klon,klev)
     621  REAL dq_a(klon,klev)
     622  REAL, SAVE :: alp_offset
     623  !$OMP THREADPRIVATE(alp_offset)
     624
     625  !
     626  !RR:fin declarations poches froides
     627  !=======================================================================================================
     628
     629  REAL ztv(klon,klev),ztva(klon,klev)
     630  REAL zpspsk(klon,klev)
     631  REAL ztla(klon,klev),zqla(klon,klev)
     632  REAL zthl(klon,klev)
     633
     634  !cc nrlmd le 10/04/2012
     635
     636  !--------Stochastic Boundary Layer Triggering: ALE_BL--------
     637  !---Propri\'et\'es du thermiques au LCL
     638  real zlcl_th(klon)                                     ! Altitude du LCL calcul\'e continument (pcon dans thermcell_main.F90)
     639  real fraca0(klon)                                      ! Fraction des thermiques au LCL
     640  real w0(klon)                                          ! Vitesse des thermiques au LCL
     641  real w_conv(klon)                                      ! Vitesse verticale de grande \'echelle au LCL
     642  real tke0(klon,klev+1)                                 ! TKE au début du pas de temps
     643  real therm_tke_max0(klon)                              ! TKE dans les thermiques au LCL
     644  real env_tke_max0(klon)                                ! TKE dans l'environnement au LCL
     645
     646  !---D\'eclenchement stochastique
     647  integer :: tau_trig(klon)
     648
     649  !--------Statistical Boundary Layer Closure: ALP_BL--------
     650  !---Profils de TKE dans et hors du thermique
     651  real pbl_tke_input(klon,klev+1,nbsrf)
     652  real therm_tke_max(klon,klev)                          ! Profil de TKE dans les thermiques
     653  real env_tke_max(klon,klev)                            ! Profil de TKE dans l'environnement
     654
     655
     656  !cc fin nrlmd le 10/04/2012
     657
     658  ! Variables locales pour la couche limite (al1):
     659  !
     660  !Al1      REAL pblh(klon)           ! Hauteur de couche limite
     661  !Al1      SAVE pblh
     662  !34EK
     663  !
     664  ! Variables locales:
     665  !
     666  !AA
     667  !AA  Pour phytrac
     668  REAL u1(klon)             ! vents dans la premiere couche U
     669  REAL v1(klon)             ! vents dans la premiere couche V
     670
     671  !@$$      LOGICAL offline           ! Controle du stockage ds "physique"
     672  !@$$      PARAMETER (offline=.false.)
     673  !@$$      INTEGER physid
     674  REAL frac_impa(klon,klev) ! fractions d'aerosols lessivees (impaction)
     675  REAL frac_nucl(klon,klev) ! idem (nucleation)
     676  ! RomP >>>
     677  REAL beta_prec_fisrt(klon,klev) ! taux de conv de l'eau cond (fisrt)
     678  ! RomP <<<
     679  INTEGER       :: iii
     680  REAL          :: calday
     681
     682  !IM cf FH pour Tiedtke 080604
     683  REAL rain_tiedtke(klon),snow_tiedtke(klon)
     684  !
     685  !IM 050204 END
     686  REAL devap(klon) ! evaporation et sa derivee
     687  REAL dsens(klon) ! chaleur sensible et sa derivee
     688
     689  !
     690  ! Conditions aux limites
     691  !
     692  !
     693  REAL :: day_since_equinox
     694  ! Date de l'equinoxe de printemps
     695  INTEGER, parameter :: mth_eq=3, day_eq=21
     696  REAL :: jD_eq
     697
     698  LOGICAL, parameter :: new_orbit = .true.
     699
     700  !
     701  INTEGER lmt_pas
     702  SAVE lmt_pas                ! frequence de mise a jour
     703  !$OMP THREADPRIVATE(lmt_pas)
     704  real zmasse(klon, llm),exner(klon, llm)
     705  !     (column-density of mass of air in a cell, in kg m-2)
     706  real, parameter:: dobson_u = 2.1415e-05 ! Dobson unit, in kg m-2
     707
     708  !IM sorties
     709  REAL un_jour
     710  PARAMETER(un_jour=86400.)
     711  !======================================================================
     712  !
     713  ! Declaration des procedures appelees
     714  !
     715  EXTERNAL angle     ! calculer angle zenithal du soleil
     716  EXTERNAL alboc     ! calculer l'albedo sur ocean
     717  EXTERNAL ajsec     ! ajustement sec
     718  EXTERNAL conlmd    ! convection (schema LMD)
     719  !KE43
     720  EXTERNAL conema3  ! convect4.3
     721  EXTERNAL fisrtilp  ! schema de condensation a grande echelle (pluie)
     722  !AA
     723  EXTERNAL fisrtilp_tr ! schema de condensation a grande echelle (pluie)
     724  !                          ! stockage des coefficients necessaires au
     725  !                          ! lessivage OFF-LINE et ON-LINE
     726  EXTERNAL hgardfou  ! verifier les temperatures
     727  EXTERNAL nuage     ! calculer les proprietes radiatives
     728  !C      EXTERNAL o3cm      ! initialiser l'ozone
     729  EXTERNAL orbite    ! calculer l'orbite terrestre
     730  EXTERNAL phyetat0  ! lire l'etat initial de la physique
     731  EXTERNAL phyredem  ! ecrire l'etat de redemarrage de la physique
     732  EXTERNAL suphel    ! initialiser certaines constantes
     733  EXTERNAL transp    ! transport total de l'eau et de l'energie
     734  EXTERNAL ecribina  ! ecrire le fichier binaire global
     735  EXTERNAL ecribins  ! ecrire le fichier binaire global
     736  EXTERNAL ecrirega  ! ecrire le fichier binaire regional
     737  EXTERNAL ecriregs  ! ecrire le fichier binaire regional
     738  !IM
     739  EXTERNAL haut2bas  !variables de haut en bas
     740  EXTERNAL ini_undefSTD  !initialise a 0 une variable a 1 niveau de pression
     741  EXTERNAL undefSTD      !somme les valeurs definies d'1 var a 1 niveau de pression
     742  !     EXTERNAL moy_undefSTD  !moyenne d'1 var a 1 niveau de pression
     743  !     EXTERNAL moyglo_aire   !moyenne globale d'1 var ponderee par l'aire de la maille (moyglo_pondaire)
     744  !                            !par la masse/airetot (moyglo_pondaima) et la vraie masse (moyglo_pondmass)
     745  !
     746  ! Variables locales
     747  !
     748  REAL rhcl(klon,klev)    ! humiditi relative ciel clair
     749  REAL dialiq(klon,klev)  ! eau liquide nuageuse
     750  REAL diafra(klon,klev)  ! fraction nuageuse
     751  REAL cldliq(klon,klev)  ! eau liquide nuageuse
     752  !
     753  !XXX PB
     754  REAL fluxq(klon,klev, nbsrf)   ! flux turbulent d'humidite
     755  !
     756  REAL zxfluxt(klon, klev)
     757  REAL zxfluxq(klon, klev)
     758  REAL zxfluxu(klon, klev)
     759  REAL zxfluxv(klon, klev)
     760
     761  ! Le rayonnement n'est pas calcule tous les pas, il faut donc
     762  !                      sauvegarder les sorties du rayonnement
     763  !ym      SAVE  heat,cool,albpla,topsw,toplw,solsw,sollw,sollwdown
     764  !ym      SAVE  sollwdownclr, toplwdown, toplwdownclr
     765  !ym      SAVE  topsw0,toplw0,solsw0,sollw0, heat0, cool0
     766  !
     767  INTEGER itaprad
     768  SAVE itaprad
     769  !$OMP THREADPRIVATE(itaprad)
     770  !
     771  REAL conv_q(klon,klev) ! convergence de l'humidite (kg/kg/s)
     772  REAL conv_t(klon,klev) ! convergence de la temperature(K/s)
     773
     774  !
     775  REAL zxsnow(klon)
     776  REAL zxsnow_dummy(klon)
     777  !
     778  REAL dist, rmu0(klon), fract(klon)
     779  REAL zdtime, zlongi
     780  !
     781  CHARACTER*2 str2
     782  CHARACTER*2 iqn
     783  !
     784  REAL qcheck
     785  REAL z_avant(klon), z_apres(klon), z_factor(klon)
     786  LOGICAL zx_ajustq
     787  !
     788  REAL za, zb
     789  REAL zx_t, zx_qs, zdelta, zcor, zfra, zlvdcp, zlsdcp
     790  real zqsat(klon,klev)
     791  INTEGER i, k, iq, ig, j, nsrf, ll, l, iiq, iff
     792  REAL t_coup
     793  PARAMETER (t_coup=234.0)
     794
     795  !ym A voir plus tard !!
     796  !ym      REAL zx_relief(iim,jjmp1)
     797  !ym      REAL zx_aire(iim,jjmp1)
     798  !
     799  ! Grandeurs de sorties
     800  REAL s_capCL(klon)
     801  REAL s_oliqCL(klon), s_cteiCL(klon)
     802  REAL s_trmb1(klon), s_trmb2(klon)
     803  REAL s_trmb3(klon)
     804  !KE43
     805  ! Variables locales pour la convection de K. Emanuel (sb):
     806
     807  REAL tvp(klon,klev)       ! virtual temp of lifted parcel
     808  CHARACTER*40 capemaxcels  !max(CAPE)
     809
     810  REAL rflag(klon)          ! flag fonctionnement de convect
     811  INTEGER iflagctrl(klon)          ! flag fonctionnement de convect
     812
     813  ! -- convect43:
     814  INTEGER ntra              ! nb traceurs pour convect4.3
     815  REAL pori_con(klon)    ! pressure at the origin level of lifted parcel
     816  REAL dtma_con(klon),dtlcl_con(klon)
     817  REAL dtvpdt1(klon,klev), dtvpdq1(klon,klev)
     818  REAL dplcldt(klon), dplcldr(klon)
     819  !?     .     condm_con(klon,klev),conda_con(klon,klev),
     820  !?     .     mr_con(klon,klev),ep_con(klon,klev)
     821  !?     .    ,sadiab(klon,klev),wadiab(klon,klev)
     822  ! --
     823  !34EK
     824  !
     825  ! Variables du changement
     826  !
     827  ! con: convection
     828  ! lsc: condensation a grande echelle (Large-Scale-Condensation)
     829  ! ajs: ajustement sec
     830  ! eva: evaporation de l'eau liquide nuageuse
     831  ! vdf: couche limite (Vertical DiFfusion)
     832
     833  ! tendance nulles
     834  REAL du0(klon,klev),dv0(klon,klev),dq0(klon,klev),dql0(klon,klev)
     835
     836  !
     837  !********************************************************
     838  !     declarations
     839
     840  !********************************************************
     841  !IM 081204 END
     842  !
     843  REAL pen_u(klon,klev), pen_d(klon,klev)
     844  REAL pde_u(klon,klev), pde_d(klon,klev)
     845  INTEGER kcbot(klon), kctop(klon), kdtop(klon)
     846  !
     847  REAL ratqsc(klon,klev)
     848  real ratqsbas,ratqshaut,tau_ratqs
     849  save ratqsbas,ratqshaut,tau_ratqs
     850  !$OMP THREADPRIVATE(ratqsbas,ratqshaut,tau_ratqs)
     851  real zpt_conv(klon,klev)
     852
     853  ! Parametres lies au nouveau schema de nuages (SB, PDF)
     854  real fact_cldcon
     855  real facttemps
     856  logical ok_newmicro
     857  save ok_newmicro
     858  !$OMP THREADPRIVATE(ok_newmicro)
     859  save fact_cldcon,facttemps
     860  !$OMP THREADPRIVATE(fact_cldcon,facttemps)
     861
     862  integer iflag_cldcon
     863  save iflag_cldcon
     864  !$OMP THREADPRIVATE(iflag_cldcon)
     865  logical ptconv(klon,klev)
     866  !IM cf. AM 081204 BEG
     867  logical ptconvth(klon,klev)
     868  !IM cf. AM 081204 END
     869  !
     870  ! Variables liees a l'ecriture de la bande histoire physique
     871  !
     872  !======================================================================
     873  !
     874  !IM cf. AM 081204 BEG
     875  !   declarations pour sortir sur une sous-region
     876  integer imin_ins,imax_ins,jmin_ins,jmax_ins
     877  save imin_ins,imax_ins,jmin_ins,jmax_ins
     878  !$OMP THREADPRIVATE(imin_ins,imax_ins,jmin_ins,jmax_ins)
     879  !      real lonmin_ins,lonmax_ins,latmin_ins
     880  !     s  ,latmax_ins
     881  !     data lonmin_ins,lonmax_ins,latmin_ins
     882  !    s  ,latmax_ins/
     883  ! valeurs initiales     s   -5.,20.,41.,55./   
     884  !    s   100.,130.,-20.,20./
     885  !    s   -180.,180.,-90.,90./
     886  !======================================================================
     887  !IM cf. AM 081204 END
     888
     889  !
     890  integer itau_w   ! pas de temps ecriture = itap + itau_phy
     891  !
     892  !
     893  ! Variables locales pour effectuer les appels en serie
     894  !
     895  !IM RH a 2m (la surface)
     896  REAL Lheat
     897
     898  INTEGER        length
     899  PARAMETER    ( length = 100 )
     900  REAL tabcntr0( length       )
     901  !
     902  INTEGER ndex2d(iim*jjmp1),ndex3d(iim*jjmp1*klev)
     903  !IM
     904  INTEGER ndex2d1(iwmax)
     905  !
     906  !IM AMIP2 BEG
     907  REAL moyglo, mountor
     908  !IM 141004 BEG
     909  REAL zustrdr(klon), zvstrdr(klon)
     910  REAL zustrli(klon), zvstrli(klon)
     911  REAL zustrph(klon), zvstrph(klon)
     912  REAL zustrhi(klon), zvstrhi(klon)
     913  REAL aam, torsfc
     914  !IM 141004 END
     915  !IM 190504 BEG
     916  INTEGER ij, imp1jmp1
     917  PARAMETER(imp1jmp1=(iim+1)*jjmp1)
     918  !ym A voir plus tard
     919  REAL zx_tmp(imp1jmp1), airedyn(iim+1,jjmp1)
     920  REAL padyn(iim+1,jjmp1,klev+1)
     921  REAL dudyn(iim+1,jjmp1,klev)
     922  REAL rlatdyn(iim+1,jjmp1)
     923  !IM 190504 END
     924  LOGICAL ok_msk
     925  REAL msk(klon)
     926  !IM
     927  REAL airetot, pi
     928  !ym A voir plus tard
     929  !ym      REAL zm_wo(jjmp1, klev)
     930  !IM AMIP2 END
     931  !
     932  REAL zx_tmp_fi2d(klon)      ! variable temporaire grille physique
     933  REAL zx_tmp_fi3d(klon,klev) ! variable temporaire pour champs 3D
     934  REAL zx_tmp_fi3d1(klon,klev+1) !variable temporaire pour champs 3D (kelvp1)
     935  REAL(KIND=8) zx_tmp2_fi3d(klon,klev) ! variable temporaire pour champs 3D
     936  REAL zx_tmp_2d(iim,jjmp1), zx_tmp_3d(iim,jjmp1,klev)
     937  REAL zx_lon(iim,jjmp1), zx_lat(iim,jjmp1)
     938  !
     939  INTEGER nid_day, nid_mth, nid_ins, nid_mthnmc, nid_daynmc
     940  INTEGER nid_hfnmc, nid_day_seri, nid_ctesGCM
     941  SAVE nid_day, nid_mth, nid_ins, nid_mthnmc, nid_daynmc
     942  SAVE nid_hfnmc, nid_day_seri, nid_ctesGCM
     943  !$OMP THREADPRIVATE(nid_day, nid_mth, nid_ins)
     944  !$OMP THREADPRIVATE(nid_mthnmc, nid_daynmc, nid_hfnmc)
     945  !$OMP THREADPRIVATE(nid_day_seri,nid_ctesGCM)
     946  !
     947  !IM 280405 BEG
     948  INTEGER nid_bilKPins, nid_bilKPave
     949  SAVE nid_bilKPins, nid_bilKPave
     950  !$OMP THREADPRIVATE(nid_bilKPins, nid_bilKPave)
     951  !
     952  REAL ve_lay(klon,klev) ! transport meri. de l'energie a chaque niveau vert.
     953  REAL vq_lay(klon,klev) ! transport meri. de l'eau a chaque niveau vert.
     954  REAL ue_lay(klon,klev) ! transport zonal de l'energie a chaque niveau vert.
     955  REAL uq_lay(klon,klev) ! transport zonal de l'eau a chaque niveau vert.
     956  !
     957  INTEGER nhori, nvert, nvert1, nvert3
     958  REAL zsto, zsto1, zsto2
     959  REAL zstophy, zstorad, zstohf, zstoday, zstomth, zout
     960  REAL zcals(napisccp), zcalh(napisccp), zoutj(napisccp)
     961  REAL zout_isccp(napisccp)
     962  SAVE zcals, zcalh, zoutj, zout_isccp
     963  !$OMP THREADPRIVATE(zcals, zcalh, zoutj, zout_isccp)
     964
     965  real zjulian
     966  save zjulian
     967  !$OMP THREADPRIVATE(zjulian)
     968
     969  character*20 modname
     970  character*80 abort_message
     971  logical ok_sync
     972  real date0
     973  integer idayref
     974
     975  ! essai writephys
     976  integer fid_day, fid_mth, fid_ins
     977  parameter (fid_ins = 1, fid_day = 2, fid_mth = 3)
     978  integer prof2d_on, prof3d_on, prof2d_av, prof3d_av
     979  parameter (prof2d_on = 1, prof3d_on = 2, &
     980       prof2d_av = 3, prof3d_av = 4)
     981  character*30 nom_fichier
     982  character*40 varname
     983  character*40 vartitle
     984  character*20 varunits
     985  !     Variables liees au bilan d'energie et d'enthalpi
     986  REAL ztsol(klon)
     987  REAL      h_vcol_tot, h_dair_tot, h_qw_tot, h_ql_tot &
     988       , h_qs_tot, qw_tot, ql_tot, qs_tot , ec_tot
     989  SAVE      h_vcol_tot, h_dair_tot, h_qw_tot, h_ql_tot &
     990       , h_qs_tot, qw_tot, ql_tot, qs_tot , ec_tot
     991  !$OMP THREADPRIVATE(h_vcol_tot, h_dair_tot, h_qw_tot, h_ql_tot)
     992  !$OMP THREADPRIVATE(h_qs_tot, qw_tot, ql_tot, qs_tot , ec_tot)
     993  REAL      d_h_vcol, d_h_dair, d_qt, d_qw, d_ql, d_qs, d_ec
     994  REAL      d_h_vcol_phy
     995  REAL      fs_bound, fq_bound
     996  SAVE      d_h_vcol_phy
     997  !$OMP THREADPRIVATE(d_h_vcol_phy)
     998  REAL      zero_v(klon)
     999  CHARACTER*15 ztit
     1000  INTEGER   ip_ebil  ! PRINT level for energy conserv. diag.
     1001  SAVE      ip_ebil
     1002  DATA      ip_ebil/0/
     1003  !$OMP THREADPRIVATE(ip_ebil)
     1004  INTEGER   if_ebil ! level for energy conserv. dignostics
     1005  SAVE      if_ebil
     1006  !$OMP THREADPRIVATE(if_ebil)
     1007  !+jld ec_conser
     1008  REAL ZRCPD
     1009  !-jld ec_conser
     1010  REAL q2m(klon,nbsrf)  ! humidite a 2m
     1011
     1012  !IM: t2m, q2m, ustar, u10m, v10m et t2mincels, t2maxcels
     1013  CHARACTER*40 t2mincels, t2maxcels       !t2m min., t2m max
     1014  CHARACTER*40 tinst, tave, typeval
     1015  REAL cldtaupi(klon,klev)  ! Cloud optical thickness for pre-industrial (pi) aerosols
     1016
     1017
     1018  REAL re_top(klon), fl_top(klon) ! CDR at top of liquid water clouds
     1019
     1020  ! Aerosol optical properties
     1021  CHARACTER*4, DIMENSION(naero_grp) :: rfname
     1022  REAL, DIMENSION(klon)          :: aerindex     ! POLDER aerosol index
     1023  REAL, DIMENSION(klon,klev)     :: mass_solu_aero    ! total mass concentration for all soluble aerosols[ug/m3]
     1024  REAL, DIMENSION(klon,klev)     :: mass_solu_aero_pi ! - " - (pre-industrial value)
     1025  INTEGER :: naero ! aerosol species
     1026
     1027  ! Parameters
     1028  LOGICAL ok_ade, ok_aie    ! Apply aerosol (in)direct effects or not
     1029  LOGICAL ok_cdnc          ! ok cloud droplet number concentration (O. Boucher 01-2013)
     1030  REAL bl95_b0, bl95_b1   ! Parameter in Boucher and Lohmann (1995)
     1031  SAVE ok_ade, ok_aie, ok_cdnc, bl95_b0, bl95_b1
     1032  !$OMP THREADPRIVATE(ok_ade, ok_aie, ok_cdnc, bl95_b0, bl95_b1)
     1033  LOGICAL, SAVE :: aerosol_couple ! true  : calcul des aerosols dans INCA
     1034  ! false : lecture des aerosol dans un fichier
     1035  !$OMP THREADPRIVATE(aerosol_couple)   
     1036  INTEGER, SAVE :: flag_aerosol
     1037  !$OMP THREADPRIVATE(flag_aerosol)
     1038  LOGICAL, SAVE :: new_aod
     1039  !$OMP THREADPRIVATE(new_aod)
     1040  !
     1041  !--STRAT AEROSOL
     1042  LOGICAL, SAVE :: flag_aerosol_strat
     1043  !$OMP THREADPRIVATE(flag_aerosol_strat)
     1044  !c-fin STRAT AEROSOL
     1045  !
     1046  ! Declaration des constantes et des fonctions thermodynamiques
     1047  !
     1048  LOGICAL,SAVE :: first=.true.
     1049  !$OMP THREADPRIVATE(first)
     1050
     1051  integer iunit
     1052
     1053  integer, save::  read_climoz ! read ozone climatology
     1054  !     (let it keep the default OpenMP shared attribute)
     1055  !     Allowed values are 0, 1 and 2
     1056  !     0: do not read an ozone climatology
     1057  !     1: read a single ozone climatology that will be used day and night
     1058  !     2: read two ozone climatologies, the average day and night
     1059  !     climatology and the daylight climatology
     1060
     1061  integer, save:: ncid_climoz ! NetCDF file containing ozone climatologies
     1062  !     (let it keep the default OpenMP shared attribute)
     1063
     1064  real, pointer, save:: press_climoz(:)
     1065  !     (let it keep the default OpenMP shared attribute)
     1066  !     edges of pressure intervals for ozone climatologies, in Pa, in strictly
     1067  !     ascending order
     1068
     1069  integer, save:: co3i = 0
     1070  !     time index in NetCDF file of current ozone fields
     1071  !$OMP THREADPRIVATE(co3i)
     1072
     1073  integer ro3i
     1074  !     required time index in NetCDF file for the ozone fields, between 1
     1075  !     and 360
     1076
     1077  INTEGER ierr
     1078  include "YOMCST.h"
     1079  include "YOETHF.h"
     1080  include "FCTTRE.h"
     1081  !IM 100106 BEG : pouvoir sortir les ctes de la physique
     1082  include "conema3.h"
     1083  include "fisrtilp.h"
     1084  include "nuage.h"
     1085  include "compbl.h"
     1086  !IM 100106 END : pouvoir sortir les ctes de la physique
     1087  !
    10881088!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
    1089 ! Declarations pour Simulateur COSP
    1090 !============================================================
    1091       real :: mr_ozone(klon,klev)
    1092 
    1093 !IM sorties fichier 1D paramLMDZ_phy.nc
    1094       REAL :: zx_tmp_0d(1,1)
    1095       INTEGER, PARAMETER :: np=1
    1096       REAL,dimension(klon_glo)        :: rlat_glo
    1097       REAL,dimension(klon_glo)        :: rlon_glo
    1098       REAL gbils(1), gevap(1), gevapt(1), glat(1), gnet0(1), gnet(1)
    1099       REAL grain(1), gtsol(1), gt2m(1), gprw(1)
    1100 
    1101 !IM stations CFMIP
    1102       INTEGER, SAVE :: nCFMIP
    1103 !$OMP THREADPRIVATE(nCFMIP)
    1104       INTEGER, PARAMETER :: npCFMIP=120
    1105       INTEGER, ALLOCATABLE, SAVE :: tabCFMIP(:)
    1106       REAL, ALLOCATABLE, SAVE :: lonCFMIP(:), latCFMIP(:)
    1107 !$OMP THREADPRIVATE(tabCFMIP, lonCFMIP, latCFMIP)
    1108       INTEGER, ALLOCATABLE, SAVE :: tabijGCM(:)
    1109       REAL, ALLOCATABLE, SAVE :: lonGCM(:), latGCM(:)
    1110 !$OMP THREADPRIVATE(tabijGCM, lonGCM, latGCM)
    1111       INTEGER, ALLOCATABLE, SAVE :: iGCM(:), jGCM(:)
    1112 !$OMP THREADPRIVATE(iGCM, jGCM)
    1113       logical, dimension(nfiles)            :: phys_out_filestations
    1114       logical, parameter :: lNMC=.FALSE.
    1115 
    1116 !IM betaCRF
    1117       REAL, SAVE :: pfree, beta_pbl, beta_free
    1118 !$OMP THREADPRIVATE(pfree, beta_pbl, beta_free)
    1119       REAL, SAVE :: lon1_beta,  lon2_beta, lat1_beta, lat2_beta
    1120 !$OMP THREADPRIVATE(lon1_beta,  lon2_beta, lat1_beta, lat2_beta)
    1121       LOGICAL, SAVE :: mskocean_beta
    1122 !$OMP THREADPRIVATE(mskocean_beta)
    1123       REAL, dimension(klon, klev) :: beta         ! facteur sur cldtaurad et cldemirad pour evaluer les retros liees aux CRF
    1124       REAL, dimension(klon, klev) :: cldtaurad    ! epaisseur optique pour radlwsw pour tester "CRF off"
    1125       REAL, dimension(klon, klev) :: cldtaupirad  ! epaisseur optique pour radlwsw pour tester "CRF off"
    1126       REAL, dimension(klon, klev) :: cldemirad    ! emissivite pour radlwsw pour tester "CRF off"
    1127       REAL, dimension(klon, klev) :: cldfrarad    ! fraction nuageuse
    1128 
    1129       INTEGER :: nbtr_tmp ! Number of tracer inside concvl
    1130       REAL, dimension(klon,klev) :: sh_in ! Specific humidity entering in phytrac
    1131       integer iostat
    1132 
    1133 !======================================================================
    1134 ! Gestion calendrier : mise a jour du module phys_cal_mod
    1135 !
    1136       CALL phys_cal_update(jD_cur,jH_cur)
    1137 
    1138 !======================================================================
    1139 ! Ecriture eventuelle d'un profil verticale en entree de la physique.
    1140 ! Utilise notamment en 1D mais peut etre active egalement en 3D
    1141 ! en imposant la valeur de igout.
    1142 !======================================================================d
    1143       if (prt_level.ge.1) then
    1144           igout=klon/2+1/klon
    1145          write(lunout,*) 'DEBUT DE PHYSIQ !!!!!!!!!!!!!!!!!!!!'
    1146          write(lunout,*) &
    1147        'nlon,klev,nqtot,debut,lafin, jD_cur, jH_cur,pdtphys'
    1148          write(lunout,*) &
    1149         nlon,klev,nqtot,debut,lafin, jD_cur, jH_cur,pdtphys
    1150 
    1151          write(lunout,*) 'paprs, play, phi, u, v, t'
    1152          do k=1,klev
    1153             write(lunout,*) paprs(igout,k),pplay(igout,k),pphi(igout,k), &
    1154          u(igout,k),v(igout,k),t(igout,k)
    1155          enddo
    1156          write(lunout,*) 'ovap (g/kg),  oliq (g/kg)'
    1157          do k=1,klev
    1158             write(lunout,*) qx(igout,k,1)*1000,qx(igout,k,2)*1000.
    1159          enddo
    1160       endif
    1161 
    1162 !======================================================================
    1163 
    1164       if (first) then
    1165      
    1166 !CR:nvelles variables convection/poches froides
    1167      
    1168       print*, '================================================='
    1169       print*, 'Allocation des variables locales et sauvegardees'
    1170       call phys_local_var_init
    1171 !
    1172       pasphys=pdtphys
    1173 !     appel a la lecture du run.def physique
    1174       call conf_phys(ok_journe, ok_mensuel, &
    1175            ok_instan, ok_hf, &
    1176            ok_LES, &
    1177            callstats, &
    1178            solarlong0,seuil_inversion, &
    1179            fact_cldcon, facttemps,ok_newmicro,iflag_radia, &
    1180            iflag_cldcon,iflag_ratqs,ratqsbas,ratqshaut,tau_ratqs, &
    1181            ok_ade, ok_aie, ok_cdnc, aerosol_couple,  &
    1182            flag_aerosol, flag_aerosol_strat, new_aod, &
    1183            bl95_b0, bl95_b1, &
    1184 !     nv flags pour la convection et les poches froides
    1185            read_climoz, &
    1186            alp_offset)
    1187       call phys_state_var_init(read_climoz)
    1188       call phys_output_var_init
    1189       print*, '================================================='
    1190 !
    1191           dnwd0=0.0
    1192           ftd=0.0
    1193           fqd=0.0
    1194           cin=0.
    1195 !ym Attention pbase pas initialise dans concvl !!!!
    1196           pbase=0
    1197 !IM 180608
    1198 
    1199         itau_con=0
    1200         first=.false.
    1201 
    1202       endif  ! first
    1203 
    1204 !ym => necessaire pour iflag_con != 2   
    1205       pmfd(:,:) = 0.
    1206       pen_u(:,:) = 0.
    1207       pen_d(:,:) = 0.
    1208       pde_d(:,:) = 0.
    1209       pde_u(:,:) = 0.
    1210       aam=0.
    1211 
    1212       torsfc=0.
    1213       forall (k=1: llm) zmasse(:, k) = (paprs(:, k)-paprs(:, k+1)) / rg
    1214 
    1215 
    1216 
    1217        modname = 'physiq'
    1218 !IM
    1219       IF (ip_ebil_phy.ge.1) THEN
    1220         DO i=1,klon
    1221           zero_v(i)=0.
    1222         END DO
    1223       END IF
    1224       ok_sync=.TRUE.
    1225 
    1226       IF (debut) THEN
    1227          CALL suphel ! initialiser constantes et parametres phys.
    1228       ENDIF
    1229 
    1230       if(prt_level.ge.1) print*,'CONVERGENCE PHYSIQUE THERM 1 '
    1231 
    1232 
    1233 !======================================================================
    1234 ! Gestion calendrier : mise a jour du module phys_cal_mod
    1235 !
    1236 !     CALL phys_cal_update(jD_cur,jH_cur)
    1237 
    1238 !
    1239 ! Si c'est le debut, il faut initialiser plusieurs choses
    1240 !          ********
    1241 !
    1242        IF (debut) THEN
    1243 !rv
    1244 !CRinitialisation de wght_th et lalim_conv pour la definition de la couche alimentation
    1245 !de la convection a partir des caracteristiques du thermique
    1246          wght_th(:,:)=1.
    1247          lalim_conv(:)=1
    1248 !RC
    1249          ustar(:,:)=0.
    1250          u10m(:,:)=0.
    1251          v10m(:,:)=0.
    1252          rain_con(:)=0.
    1253          snow_con(:)=0.
    1254          topswai(:)=0.
    1255          topswad(:)=0.
    1256          solswai(:)=0.
    1257          solswad(:)=0.
    1258 
    1259          wmax_th(:)=0.
    1260          tau_overturning_th(:)=0.
    1261 
    1262          IF (type_trac == 'inca') THEN
    1263             ! jg : initialisation jusqu'au ces variables sont dans restart
    1264             ccm(:,:,:) = 0.
    1265             tau_aero(:,:,:,:) = 0.
    1266             piz_aero(:,:,:,:) = 0.
    1267             cg_aero(:,:,:,:) = 0.
    1268          END IF
    1269 
    1270          rnebcon0(:,:) = 0.0
    1271          clwcon0(:,:) = 0.0
    1272          rnebcon(:,:) = 0.0
    1273          clwcon(:,:) = 0.0
    1274 
    1275 !IM     
    1276          IF (ip_ebil_phy.ge.1) d_h_vcol_phy=0.
    1277 !
    1278       print*,'iflag_coupl,iflag_clos,iflag_wake', &
    1279          iflag_coupl,iflag_clos,iflag_wake
    1280       print*,'CYCLE_DIURNE', cycle_diurne
    1281 !
    1282       IF (iflag_con.EQ.2.AND.iflag_cldcon.GT.-1) THEN
    1283          abort_message = 'Tiedtke needs iflag_cldcon=-2 or -1'
    1284          CALL abort_gcm (modname,abort_message,1)
    1285       ENDIF
    1286 !
    1287       IF(ok_isccp.AND.iflag_con.LE.2) THEN
    1288          abort_message = 'ISCCP-like outputs may be available for KE' // &
    1289      '(iflag_con >= 3); for Tiedtke (iflag_con=-2) put ok_isccp=n'
    1290          CALL abort_gcm (modname,abort_message,1)
    1291       ENDIF
    1292 !
    1293 ! Initialiser les compteurs:
    1294 !
    1295          itap    = 0
    1296          itaprad = 0
     1089  ! Declarations pour Simulateur COSP
     1090  !============================================================
     1091  real :: mr_ozone(klon,klev)
     1092
     1093  !IM sorties fichier 1D paramLMDZ_phy.nc
     1094  REAL :: zx_tmp_0d(1,1)
     1095  INTEGER, PARAMETER :: np=1
     1096  REAL,dimension(klon_glo)        :: rlat_glo
     1097  REAL,dimension(klon_glo)        :: rlon_glo
     1098  REAL gbils(1), gevap(1), gevapt(1), glat(1), gnet0(1), gnet(1)
     1099  REAL grain(1), gtsol(1), gt2m(1), gprw(1)
     1100
     1101  !IM stations CFMIP
     1102  INTEGER, SAVE :: nCFMIP
     1103  !$OMP THREADPRIVATE(nCFMIP)
     1104  INTEGER, PARAMETER :: npCFMIP=120
     1105  INTEGER, ALLOCATABLE, SAVE :: tabCFMIP(:)
     1106  REAL, ALLOCATABLE, SAVE :: lonCFMIP(:), latCFMIP(:)
     1107  !$OMP THREADPRIVATE(tabCFMIP, lonCFMIP, latCFMIP)
     1108  INTEGER, ALLOCATABLE, SAVE :: tabijGCM(:)
     1109  REAL, ALLOCATABLE, SAVE :: lonGCM(:), latGCM(:)
     1110  !$OMP THREADPRIVATE(tabijGCM, lonGCM, latGCM)
     1111  INTEGER, ALLOCATABLE, SAVE :: iGCM(:), jGCM(:)
     1112  !$OMP THREADPRIVATE(iGCM, jGCM)
     1113  logical, dimension(nfiles)            :: phys_out_filestations
     1114  logical, parameter :: lNMC=.FALSE.
     1115
     1116  !IM betaCRF
     1117  REAL, SAVE :: pfree, beta_pbl, beta_free
     1118  !$OMP THREADPRIVATE(pfree, beta_pbl, beta_free)
     1119  REAL, SAVE :: lon1_beta,  lon2_beta, lat1_beta, lat2_beta
     1120  !$OMP THREADPRIVATE(lon1_beta,  lon2_beta, lat1_beta, lat2_beta)
     1121  LOGICAL, SAVE :: mskocean_beta
     1122  !$OMP THREADPRIVATE(mskocean_beta)
     1123  REAL, dimension(klon, klev) :: beta         ! facteur sur cldtaurad et cldemirad pour evaluer les retros liees aux CRF
     1124  REAL, dimension(klon, klev) :: cldtaurad    ! epaisseur optique pour radlwsw pour tester "CRF off"
     1125  REAL, dimension(klon, klev) :: cldtaupirad  ! epaisseur optique pour radlwsw pour tester "CRF off"
     1126  REAL, dimension(klon, klev) :: cldemirad    ! emissivite pour radlwsw pour tester "CRF off"
     1127  REAL, dimension(klon, klev) :: cldfrarad    ! fraction nuageuse
     1128
     1129  INTEGER :: nbtr_tmp ! Number of tracer inside concvl
     1130  REAL, dimension(klon,klev) :: sh_in ! Specific humidity entering in phytrac
     1131  integer iostat
     1132
     1133  !======================================================================
     1134  ! Gestion calendrier : mise a jour du module phys_cal_mod
     1135  !
     1136  CALL phys_cal_update(jD_cur,jH_cur)
     1137
     1138  !======================================================================
     1139  ! Ecriture eventuelle d'un profil verticale en entree de la physique.
     1140  ! Utilise notamment en 1D mais peut etre active egalement en 3D
     1141  ! en imposant la valeur de igout.
     1142  !======================================================================d
     1143  if (prt_level.ge.1) then
     1144     igout=klon/2+1/klon
     1145     write(lunout,*) 'DEBUT DE PHYSIQ !!!!!!!!!!!!!!!!!!!!'
     1146     write(lunout,*) &
     1147          'nlon,klev,nqtot,debut,lafin, jD_cur, jH_cur,pdtphys'
     1148     write(lunout,*) &
     1149          nlon,klev,nqtot,debut,lafin, jD_cur, jH_cur,pdtphys
     1150
     1151     write(lunout,*) 'paprs, play, phi, u, v, t'
     1152     do k=1,klev
     1153        write(lunout,*) paprs(igout,k),pplay(igout,k),pphi(igout,k), &
     1154             u(igout,k),v(igout,k),t(igout,k)
     1155     enddo
     1156     write(lunout,*) 'ovap (g/kg),  oliq (g/kg)'
     1157     do k=1,klev
     1158        write(lunout,*) qx(igout,k,1)*1000,qx(igout,k,2)*1000.
     1159     enddo
     1160  endif
     1161
     1162  !======================================================================
     1163
     1164  if (first) then
     1165
     1166     !CR:nvelles variables convection/poches froides
     1167
     1168     print*, '================================================='
     1169     print*, 'Allocation des variables locales et sauvegardees'
     1170     call phys_local_var_init
     1171     !
     1172     pasphys=pdtphys
     1173     !     appel a la lecture du run.def physique
     1174     call conf_phys(ok_journe, ok_mensuel, &
     1175          ok_instan, ok_hf, &
     1176          ok_LES, &
     1177          callstats, &
     1178          solarlong0,seuil_inversion, &
     1179          fact_cldcon, facttemps,ok_newmicro,iflag_radia, &
     1180          iflag_cldcon,iflag_ratqs,ratqsbas,ratqshaut,tau_ratqs, &
     1181          ok_ade, ok_aie, ok_cdnc, aerosol_couple,  &
     1182          flag_aerosol, flag_aerosol_strat, new_aod, &
     1183          bl95_b0, bl95_b1, &
     1184          !     nv flags pour la convection et les poches froides
     1185          read_climoz, &
     1186          alp_offset)
     1187     call phys_state_var_init(read_climoz)
     1188     call phys_output_var_init
     1189     print*, '================================================='
     1190     !
     1191     dnwd0=0.0
     1192     ftd=0.0
     1193     fqd=0.0
     1194     cin=0.
     1195     !ym Attention pbase pas initialise dans concvl !!!!
     1196     pbase=0
     1197     !IM 180608
     1198
     1199     itau_con=0
     1200     first=.false.
     1201
     1202  endif  ! first
     1203
     1204  !ym => necessaire pour iflag_con != 2   
     1205  pmfd(:,:) = 0.
     1206  pen_u(:,:) = 0.
     1207  pen_d(:,:) = 0.
     1208  pde_d(:,:) = 0.
     1209  pde_u(:,:) = 0.
     1210  aam=0.
     1211
     1212  torsfc=0.
     1213  forall (k=1: llm) zmasse(:, k) = (paprs(:, k)-paprs(:, k+1)) / rg
     1214
     1215
     1216
     1217  modname = 'physiq'
     1218  !IM
     1219  IF (ip_ebil_phy.ge.1) THEN
     1220     DO i=1,klon
     1221        zero_v(i)=0.
     1222     END DO
     1223  END IF
     1224  ok_sync=.TRUE.
     1225
     1226  IF (debut) THEN
     1227     CALL suphel ! initialiser constantes et parametres phys.
     1228  ENDIF
     1229
     1230  if(prt_level.ge.1) print*,'CONVERGENCE PHYSIQUE THERM 1 '
     1231
     1232
     1233  !======================================================================
     1234  ! Gestion calendrier : mise a jour du module phys_cal_mod
     1235  !
     1236  !     CALL phys_cal_update(jD_cur,jH_cur)
     1237
     1238  !
     1239  ! Si c'est le debut, il faut initialiser plusieurs choses
     1240  !          ********
     1241  !
     1242  IF (debut) THEN
     1243     !rv
     1244     !CRinitialisation de wght_th et lalim_conv pour la definition de la couche alimentation
     1245     !de la convection a partir des caracteristiques du thermique
     1246     wght_th(:,:)=1.
     1247     lalim_conv(:)=1
     1248     !RC
     1249     ustar(:,:)=0.
     1250     u10m(:,:)=0.
     1251     v10m(:,:)=0.
     1252     rain_con(:)=0.
     1253     snow_con(:)=0.
     1254     topswai(:)=0.
     1255     topswad(:)=0.
     1256     solswai(:)=0.
     1257     solswad(:)=0.
     1258
     1259     wmax_th(:)=0.
     1260     tau_overturning_th(:)=0.
     1261
     1262     IF (type_trac == 'inca') THEN
     1263        ! jg : initialisation jusqu'au ces variables sont dans restart
     1264        ccm(:,:,:) = 0.
     1265        tau_aero(:,:,:,:) = 0.
     1266        piz_aero(:,:,:,:) = 0.
     1267        cg_aero(:,:,:,:) = 0.
     1268     END IF
     1269
     1270     rnebcon0(:,:) = 0.0
     1271     clwcon0(:,:) = 0.0
     1272     rnebcon(:,:) = 0.0
     1273     clwcon(:,:) = 0.0
     1274
     1275     !IM     
     1276     IF (ip_ebil_phy.ge.1) d_h_vcol_phy=0.
     1277     !
     1278     print*,'iflag_coupl,iflag_clos,iflag_wake', &
     1279          iflag_coupl,iflag_clos,iflag_wake
     1280     print*,'CYCLE_DIURNE', cycle_diurne
     1281     !
     1282     IF (iflag_con.EQ.2.AND.iflag_cldcon.GT.-1) THEN
     1283        abort_message = 'Tiedtke needs iflag_cldcon=-2 or -1'
     1284        CALL abort_gcm (modname,abort_message,1)
     1285     ENDIF
     1286     !
     1287     IF(ok_isccp.AND.iflag_con.LE.2) THEN
     1288        abort_message = 'ISCCP-like outputs may be available for KE' // &
     1289             '(iflag_con >= 3); for Tiedtke (iflag_con=-2) put ok_isccp=n'
     1290        CALL abort_gcm (modname,abort_message,1)
     1291     ENDIF
     1292     !
     1293     ! Initialiser les compteurs:
     1294     !
     1295     itap    = 0
     1296     itaprad = 0
    12971297
    12981298!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
    1299 !! Un petit travail \`a faire ici.
     1299     !! Un petit travail \`a faire ici.
    13001300!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
    13011301
    1302          if (iflag_pbl>1) then
    1303              PRINT*, "Using method MELLOR&YAMADA"
    1304          endif
     1302     if (iflag_pbl>1) then
     1303        PRINT*, "Using method MELLOR&YAMADA"
     1304     endif
    13051305
    13061306!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
    1307 ! FH 2008/05/02 changement lie a la lecture de nbapp_rad dans phylmd plutot que
    1308 ! dyn3d
    1309 ! Attention : la version precedente n'etait pas tres propre.
    1310 ! Il se peut qu'il faille prendre une valeur differente de nbapp_rad
    1311 ! pour obtenir le meme resultat.
    1312          dtime=pdtphys
    1313          radpas = NINT( 86400./dtime/nbapp_rad)
     1307     ! FH 2008/05/02 changement lie a la lecture de nbapp_rad dans phylmd plutot que
     1308     ! dyn3d
     1309     ! Attention : la version precedente n'etait pas tres propre.
     1310     ! Il se peut qu'il faille prendre une valeur differente de nbapp_rad
     1311     ! pour obtenir le meme resultat.
     1312     dtime=pdtphys
     1313     radpas = NINT( 86400./dtime/nbapp_rad)
    13141314!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
    13151315
    1316          CALL phyetat0 ("startphy.nc",clesphy0,tabcntr0)
    1317          IF (klon_glo==1) THEN
    1318          coefh=0. ; coefm=0. ; pbl_tke=0.
    1319          coefh(:,2,:)=1.e-2 ; coefm(:,2,:)=1.e-2 ; pbl_tke(:,2,:)=1.e-2
    1320          PRINT*,'FH WARNING : lignes a supprimer'
    1321          ENDIF
    1322 !IM begin
    1323           print*,'physiq: clwcon rnebcon ratqs',clwcon(1,1),rnebcon(1,1) &
    1324       ,ratqs(1,1)
    1325 !IM end
     1316     CALL phyetat0 ("startphy.nc",clesphy0,tabcntr0)
     1317     IF (klon_glo==1) THEN
     1318        coefh=0. ; coefm=0. ; pbl_tke=0.
     1319        coefh(:,2,:)=1.e-2 ; coefm(:,2,:)=1.e-2 ; pbl_tke(:,2,:)=1.e-2
     1320        PRINT*,'FH WARNING : lignes a supprimer'
     1321     ENDIF
     1322     !IM begin
     1323     print*,'physiq: clwcon rnebcon ratqs',clwcon(1,1),rnebcon(1,1) &
     1324          ,ratqs(1,1)
     1325     !IM end
    13261326
    13271327
    13281328
    13291329!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
    1330 !
    1331 ! on remet le calendrier a zero
    1332 !
    1333          IF (raz_date .eq. 1) THEN
    1334            itau_phy = 0
    1335          ENDIF
    1336 
    1337 !IM cf. AM 081204 BEG
    1338          PRINT*,'cycle_diurne3 =',cycle_diurne
    1339 !IM cf. AM 081204 END
    1340 !
    1341          CALL printflag( tabcntr0,radpas,ok_journe, &
    1342                           ok_instan, ok_region )
    1343 !
    1344          IF (ABS(dtime-pdtphys).GT.0.001) THEN
    1345             WRITE(lunout,*) 'Pas physique n est pas correct',dtime, &
    1346                               pdtphys
    1347             abort_message='Pas physique n est pas correct '
    1348 !           call abort_gcm(modname,abort_message,1)
    1349             dtime=pdtphys
    1350          ENDIF
    1351          IF (nlon .NE. klon) THEN
    1352             WRITE(lunout,*)'nlon et klon ne sont pas coherents', nlon,  &
    1353                             klon
    1354             abort_message='nlon et klon ne sont pas coherents'
    1355             call abort_gcm(modname,abort_message,1)
    1356          ENDIF
    1357          IF (nlev .NE. klev) THEN
    1358             WRITE(lunout,*)'nlev et klev ne sont pas coherents', nlev, &
    1359                              klev
    1360             abort_message='nlev et klev ne sont pas coherents'
    1361             call abort_gcm(modname,abort_message,1)
    1362          ENDIF
    1363 !
    1364          IF (dtime*REAL(radpas).GT.21600..AND.cycle_diurne) THEN
    1365            WRITE(lunout,*)'Nbre d appels au rayonnement insuffisant'
    1366            WRITE(lunout,*)"Au minimum 4 appels par jour si cycle diurne"
    1367            abort_message='Nbre d appels au rayonnement insuffisant'
    1368            call abort_gcm(modname,abort_message,1)
    1369          ENDIF
    1370          WRITE(lunout,*)"Clef pour la convection, iflag_con=", iflag_con
    1371          WRITE(lunout,*)"Clef pour le driver de la convection, ok_cvl=", &
    1372                          ok_cvl
    1373 !
    1374 !KE43
    1375 ! Initialisation pour la convection de K.E. (sb):
    1376          IF (iflag_con.GE.3) THEN
    1377 
    1378          WRITE(lunout,*)"*** Convection de Kerry Emanuel 4.3  "
    1379          WRITE(lunout,*) &
    1380             "On va utiliser le melange convectif des traceurs qui"
    1381          WRITE(lunout,*)"est calcule dans convect4.3"
    1382          WRITE(lunout,*)" !!! penser aux logical flags de phytrac"
    1383 
    1384           DO i = 1, klon
     1330     !
     1331     ! on remet le calendrier a zero
     1332     !
     1333     IF (raz_date .eq. 1) THEN
     1334        itau_phy = 0
     1335     ENDIF
     1336
     1337     !IM cf. AM 081204 BEG
     1338     PRINT*,'cycle_diurne3 =',cycle_diurne
     1339     !IM cf. AM 081204 END
     1340     !
     1341     CALL printflag( tabcntr0,radpas,ok_journe, &
     1342          ok_instan, ok_region )
     1343     !
     1344     IF (ABS(dtime-pdtphys).GT.0.001) THEN
     1345        WRITE(lunout,*) 'Pas physique n est pas correct',dtime, &
     1346             pdtphys
     1347        abort_message='Pas physique n est pas correct '
     1348        !           call abort_gcm(modname,abort_message,1)
     1349        dtime=pdtphys
     1350     ENDIF
     1351     IF (nlon .NE. klon) THEN
     1352        WRITE(lunout,*)'nlon et klon ne sont pas coherents', nlon,  &
     1353             klon
     1354        abort_message='nlon et klon ne sont pas coherents'
     1355        call abort_gcm(modname,abort_message,1)
     1356     ENDIF
     1357     IF (nlev .NE. klev) THEN
     1358        WRITE(lunout,*)'nlev et klev ne sont pas coherents', nlev, &
     1359             klev
     1360        abort_message='nlev et klev ne sont pas coherents'
     1361        call abort_gcm(modname,abort_message,1)
     1362     ENDIF
     1363     !
     1364     IF (dtime*REAL(radpas).GT.21600..AND.cycle_diurne) THEN
     1365        WRITE(lunout,*)'Nbre d appels au rayonnement insuffisant'
     1366        WRITE(lunout,*)"Au minimum 4 appels par jour si cycle diurne"
     1367        abort_message='Nbre d appels au rayonnement insuffisant'
     1368        call abort_gcm(modname,abort_message,1)
     1369     ENDIF
     1370     WRITE(lunout,*)"Clef pour la convection, iflag_con=", iflag_con
     1371     WRITE(lunout,*)"Clef pour le driver de la convection, ok_cvl=", &
     1372          ok_cvl
     1373     !
     1374     !KE43
     1375     ! Initialisation pour la convection de K.E. (sb):
     1376     IF (iflag_con.GE.3) THEN
     1377
     1378        WRITE(lunout,*)"*** Convection de Kerry Emanuel 4.3  "
     1379        WRITE(lunout,*) &
     1380             "On va utiliser le melange convectif des traceurs qui"
     1381        WRITE(lunout,*)"est calcule dans convect4.3"
     1382        WRITE(lunout,*)" !!! penser aux logical flags de phytrac"
     1383
     1384        DO i = 1, klon
    13851385           ema_cbmf(i) = 0.
    13861386           ema_pcb(i)  = 0.
    13871387           ema_pct(i)  = 0.
    1388 !          ema_workcbmf(i) = 0.
    1389           ENDDO
    1390 !IM15/11/02 rajout initialisation ibas_con,itop_con cf. SB =>BEG
    1391           DO i = 1, klon
     1388           !          ema_workcbmf(i) = 0.
     1389        ENDDO
     1390        !IM15/11/02 rajout initialisation ibas_con,itop_con cf. SB =>BEG
     1391        DO i = 1, klon
    13921392           ibas_con(i) = 1
    13931393           itop_con(i) = 1
    1394           ENDDO
    1395 !IM15/11/02 rajout initialisation ibas_con,itop_con cf. SB =>END
    1396 !===============================================================================
    1397 !CR:04.12.07: initialisations poches froides
    1398 ! Controle de ALE et ALP pour la fermeture convective (jyg)
    1399           if (iflag_wake>=1) then
    1400             CALL ini_wake(0.,0.,it_wape_prescr,wape_prescr,fip_prescr &
    1401                         ,alp_bl_prescr, ale_bl_prescr)
    1402 ! 11/09/06 rajout initialisation ALE et ALP du wake et PBL(YU)
    1403 !        print*,'apres ini_wake iflag_cldcon=', iflag_cldcon
    1404           endif
     1394        ENDDO
     1395        !IM15/11/02 rajout initialisation ibas_con,itop_con cf. SB =>END
     1396        !===============================================================================
     1397        !CR:04.12.07: initialisations poches froides
     1398        ! Controle de ALE et ALP pour la fermeture convective (jyg)
     1399        if (iflag_wake>=1) then
     1400           CALL ini_wake(0.,0.,it_wape_prescr,wape_prescr,fip_prescr &
     1401                ,alp_bl_prescr, ale_bl_prescr)
     1402           ! 11/09/06 rajout initialisation ALE et ALP du wake et PBL(YU)
     1403           !        print*,'apres ini_wake iflag_cldcon=', iflag_cldcon
     1404        endif
    14051405
    14061406        do i = 1,klon
    1407          Ale_bl(i)=0.
    1408          Alp_bl(i)=0.
     1407           Ale_bl(i)=0.
     1408           Alp_bl(i)=0.
    14091409        enddo
    14101410
    1411 !================================================================================
    1412 !IM stations CFMIP
    1413       nCFMIP=npCFMIP
    1414       OPEN(98,file='npCFMIP_param.data',status='old', &
    1415                 form='formatted',iostat=iostat)
    1416             if (iostat == 0) then
    1417       READ(98,*,end=998) nCFMIP
    1418 998   CONTINUE
    1419       CLOSE(98)
    1420       CONTINUE
    1421       IF(nCFMIP.GT.npCFMIP) THEN
    1422        print*,'nCFMIP > npCFMIP : augmenter npCFMIP et recompiler'
    1423        CALL abort
    1424       else
    1425        print*,'physiq npCFMIP=',npCFMIP,'nCFMIP=',nCFMIP
    1426       ENDIF
    1427 
    1428 !
    1429       ALLOCATE(tabCFMIP(nCFMIP))
    1430       ALLOCATE(lonCFMIP(nCFMIP), latCFMIP(nCFMIP))
    1431       ALLOCATE(tabijGCM(nCFMIP))
    1432       ALLOCATE(lonGCM(nCFMIP), latGCM(nCFMIP))
    1433       ALLOCATE(iGCM(nCFMIP), jGCM(nCFMIP))
    1434 !
    1435 ! lecture des nCFMIP stations CFMIP, de leur numero
    1436 ! et des coordonnees geographiques lonCFMIP, latCFMIP
    1437 !
    1438          CALL read_CFMIP_point_locations(nCFMIP, tabCFMIP,  &
    1439       lonCFMIP, latCFMIP)
    1440 !
    1441 ! identification des
    1442 ! 1) coordonnees lonGCM, latGCM des points CFMIP dans la grille de LMDZ
    1443 ! 2) indices points tabijGCM de la grille physique 1d sur klon points
    1444 ! 3) indices iGCM, jGCM de la grille physique 2d
    1445 !
    1446          CALL LMDZ_CFMIP_point_locations(nCFMIP, lonCFMIP, latCFMIP, &
    1447       tabijGCM, lonGCM, latGCM, iGCM, jGCM)
    1448 !
    1449             else
    1450                ALLOCATE(tabijGCM(0))
    1451                ALLOCATE(lonGCM(0), latGCM(0))
    1452                ALLOCATE(iGCM(0), jGCM(0))
    1453             end if
    1454          else
    1455             ALLOCATE(tabijGCM(0))
    1456             ALLOCATE(lonGCM(0), latGCM(0))
    1457             ALLOCATE(iGCM(0), jGCM(0))
    1458          ENDIF
    1459  
    1460            DO i=1,klon
    1461              rugoro(i) = f_rugoro * MAX(1.0e-05, zstd(i)*zsig(i)/2.0)
    1462            ENDDO
    1463 
    1464 !34EK
    1465          IF (ok_orodr) THEN
     1411        !================================================================================
     1412        !IM stations CFMIP
     1413        nCFMIP=npCFMIP
     1414        OPEN(98,file='npCFMIP_param.data',status='old', &
     1415             form='formatted',iostat=iostat)
     1416        if (iostat == 0) then
     1417           READ(98,*,end=998) nCFMIP
     1418998        CONTINUE
     1419           CLOSE(98)
     1420           CONTINUE
     1421           IF(nCFMIP.GT.npCFMIP) THEN
     1422              print*,'nCFMIP > npCFMIP : augmenter npCFMIP et recompiler'
     1423              CALL abort
     1424           else
     1425              print*,'physiq npCFMIP=',npCFMIP,'nCFMIP=',nCFMIP
     1426           ENDIF
     1427
     1428           !
     1429           ALLOCATE(tabCFMIP(nCFMIP))
     1430           ALLOCATE(lonCFMIP(nCFMIP), latCFMIP(nCFMIP))
     1431           ALLOCATE(tabijGCM(nCFMIP))
     1432           ALLOCATE(lonGCM(nCFMIP), latGCM(nCFMIP))
     1433           ALLOCATE(iGCM(nCFMIP), jGCM(nCFMIP))
     1434           !
     1435           ! lecture des nCFMIP stations CFMIP, de leur numero
     1436           ! et des coordonnees geographiques lonCFMIP, latCFMIP
     1437           !
     1438           CALL read_CFMIP_point_locations(nCFMIP, tabCFMIP,  &
     1439                lonCFMIP, latCFMIP)
     1440           !
     1441           ! identification des
     1442           ! 1) coordonnees lonGCM, latGCM des points CFMIP dans la grille de LMDZ
     1443           ! 2) indices points tabijGCM de la grille physique 1d sur klon points
     1444           ! 3) indices iGCM, jGCM de la grille physique 2d
     1445           !
     1446           CALL LMDZ_CFMIP_point_locations(nCFMIP, lonCFMIP, latCFMIP, &
     1447                tabijGCM, lonGCM, latGCM, iGCM, jGCM)
     1448           !
     1449        else
     1450           ALLOCATE(tabijGCM(0))
     1451           ALLOCATE(lonGCM(0), latGCM(0))
     1452           ALLOCATE(iGCM(0), jGCM(0))
     1453        end if
     1454     else
     1455        ALLOCATE(tabijGCM(0))
     1456        ALLOCATE(lonGCM(0), latGCM(0))
     1457        ALLOCATE(iGCM(0), jGCM(0))
     1458     ENDIF
     1459
     1460     DO i=1,klon
     1461        rugoro(i) = f_rugoro * MAX(1.0e-05, zstd(i)*zsig(i)/2.0)
     1462     ENDDO
     1463
     1464     !34EK
     1465     IF (ok_orodr) THEN
    14661466
    14671467!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
    1468 ! FH sans doute a enlever de finitivement ou, si on le garde, l'activer
    1469 ! justement quand ok_orodr = false.
    1470 ! ce rugoro est utilise par la couche limite et fait double emploi
    1471 ! avec les param\'etrisations sp\'ecifiques de Francois Lott.
    1472 !           DO i=1,klon
    1473 !             rugoro(i) = MAX(1.0e-05, zstd(i)*zsig(i)/2.0)
    1474 !           ENDDO
     1468        ! FH sans doute a enlever de finitivement ou, si on le garde, l'activer
     1469        ! justement quand ok_orodr = false.
     1470        ! ce rugoro est utilise par la couche limite et fait double emploi
     1471        ! avec les param\'etrisations sp\'ecifiques de Francois Lott.
     1472        !           DO i=1,klon
     1473        !             rugoro(i) = MAX(1.0e-05, zstd(i)*zsig(i)/2.0)
     1474        !           ENDDO
    14751475!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
    1476            IF (ok_strato) THEN
    1477              CALL SUGWD_strato(klon,klev,paprs,pplay)
    1478            ELSE
    1479              CALL SUGWD(klon,klev,paprs,pplay)
    1480            ENDIF
    1481            
    1482            DO i=1,klon
    1483              zuthe(i)=0.
    1484              zvthe(i)=0.
    1485              if(zstd(i).gt.10.)then
    1486                zuthe(i)=(1.-zgam(i))*cos(zthe(i))
    1487                zvthe(i)=(1.-zgam(i))*sin(zthe(i))
    1488              endif
    1489            ENDDO
    1490          ENDIF
    1491 !
    1492 !
    1493          lmt_pas = NINT(86400./dtime * 1.0)   ! tous les jours
    1494          WRITE(lunout,*)'La frequence de lecture surface est de ',  &
    1495                          lmt_pas
    1496 !
    1497       capemaxcels = 't_max(X)'
    1498       t2mincels = 't_min(X)'
    1499       t2maxcels = 't_max(X)'
    1500       tinst = 'inst(X)'
    1501       tave = 'ave(X)'
    1502 !IM cf. AM 081204 BEG
    1503       write(lunout,*)'AVANT HIST IFLAG_CON=',iflag_con
    1504 !IM cf. AM 081204 END
    1505 !
    1506 !=============================================================
    1507 !   Initialisation des sorties
    1508 !=============================================================
     1476        IF (ok_strato) THEN
     1477           CALL SUGWD_strato(klon,klev,paprs,pplay)
     1478        ELSE
     1479           CALL SUGWD(klon,klev,paprs,pplay)
     1480        ENDIF
     1481
     1482        DO i=1,klon
     1483           zuthe(i)=0.
     1484           zvthe(i)=0.
     1485           if(zstd(i).gt.10.)then
     1486              zuthe(i)=(1.-zgam(i))*cos(zthe(i))
     1487              zvthe(i)=(1.-zgam(i))*sin(zthe(i))
     1488           endif
     1489        ENDDO
     1490     ENDIF
     1491     !
     1492     !
     1493     lmt_pas = NINT(86400./dtime * 1.0)   ! tous les jours
     1494     WRITE(lunout,*)'La frequence de lecture surface est de ',  &
     1495          lmt_pas
     1496     !
     1497     capemaxcels = 't_max(X)'
     1498     t2mincels = 't_min(X)'
     1499     t2maxcels = 't_max(X)'
     1500     tinst = 'inst(X)'
     1501     tave = 'ave(X)'
     1502     !IM cf. AM 081204 BEG
     1503     write(lunout,*)'AVANT HIST IFLAG_CON=',iflag_con
     1504     !IM cf. AM 081204 END
     1505     !
     1506     !=============================================================
     1507     !   Initialisation des sorties
     1508     !=============================================================
    15091509
    15101510#ifdef CPP_IOIPSL
    15111511
    1512 !$OMP MASTER
    1513        call phys_output_open(rlon,rlat,nCFMIP,tabijGCM, &
    1514                              iGCM,jGCM,lonGCM,latGCM, &
    1515                              jjmp1,nlevSTD,clevSTD,rlevSTD, &
    1516                              nbteta, ctetaSTD, dtime,ok_veget, &
    1517                              type_ocean,iflag_pbl,ok_mensuel,ok_journe, &
    1518                              ok_hf,ok_instan,ok_LES,ok_ade,ok_aie,  &
    1519                              read_climoz, phys_out_filestations, &
    1520                              new_aod, aerosol_couple, &
    1521                              flag_aerosol_strat, pdtphys, paprs, pphis,  &
    1522                              pplay, lmax_th, ptconv, ptconvth, ivap,  &
    1523                              d_t, qx, d_qx, zmasse, ok_sync)
    1524 !$OMP END MASTER
    1525 !$OMP BARRIER
     1512     !$OMP MASTER
     1513     call phys_output_open(rlon,rlat,nCFMIP,tabijGCM, &
     1514          iGCM,jGCM,lonGCM,latGCM, &
     1515          jjmp1,nlevSTD,clevSTD,rlevSTD, &
     1516          nbteta, ctetaSTD, dtime,ok_veget, &
     1517          type_ocean,iflag_pbl,ok_mensuel,ok_journe, &
     1518          ok_hf,ok_instan,ok_LES,ok_ade,ok_aie,  &
     1519          read_climoz, phys_out_filestations, &
     1520          new_aod, aerosol_couple, &
     1521          flag_aerosol_strat, pdtphys, paprs, pphis,  &
     1522          pplay, lmax_th, ptconv, ptconvth, ivap,  &
     1523          d_t, qx, d_qx, zmasse, ok_sync)
     1524     !$OMP END MASTER
     1525     !$OMP BARRIER
    15261526
    15271527#undef histISCCP
    15281528#ifdef histISCCP
    1529 #include "ini_histISCCP.h"
     1529     include "ini_histISCCP.h"
    15301530#endif
    15311531
    1532 #include "ini_histday_seri.h"
    1533 
    1534 #include "ini_paramLMDZ_phy.h"
     1532     include "ini_histday_seri.h"
     1533
     1534     include "ini_paramLMDZ_phy.h"
    15351535
    15361536#endif
    1537          ecrit_reg = ecrit_reg * un_jour
    1538          ecrit_tra = ecrit_tra * un_jour
    1539        
    1540 !XXXPB Positionner date0 pour initialisation de ORCHIDEE
    1541       date0 = jD_ref
    1542       WRITE(*,*) 'physiq date0 : ',date0
    1543 !
    1544 !
    1545 !
    1546 ! Prescrire l'ozone dans l'atmosphere
    1547 !
    1548 !
    1549 !c         DO i = 1, klon
    1550 !c         DO k = 1, klev
    1551 !c            CALL o3cm (paprs(i,k)/100.,paprs(i,k+1)/100., wo(i,k),20)
    1552 !c         ENDDO
    1553 !c         ENDDO
    1554 !
    1555       IF (type_trac == 'inca') THEN
     1537     ecrit_reg = ecrit_reg * un_jour
     1538     ecrit_tra = ecrit_tra * un_jour
     1539
     1540     !XXXPB Positionner date0 pour initialisation de ORCHIDEE
     1541     date0 = jD_ref
     1542     WRITE(*,*) 'physiq date0 : ',date0
     1543     !
     1544     !
     1545     !
     1546     ! Prescrire l'ozone dans l'atmosphere
     1547     !
     1548     !
     1549     !c         DO i = 1, klon
     1550     !c         DO k = 1, klev
     1551     !c            CALL o3cm (paprs(i,k)/100.,paprs(i,k+1)/100., wo(i,k),20)
     1552     !c         ENDDO
     1553     !c         ENDDO
     1554     !
     1555     IF (type_trac == 'inca') THEN
    15561556#ifdef INCA
    1557          CALL VTe(VTphysiq)
    1558          CALL VTb(VTinca)
    1559 !         iii = MOD(NINT(xjour),360)
    1560 !         calday = REAL(iii) + jH_cur
    1561          calday = REAL(days_elapsed) + jH_cur
    1562          WRITE(lunout,*) 'initial time chemini', days_elapsed, calday
    1563 
    1564          CALL chemini(  &
    1565                          rg, &
    1566                          ra, &
    1567                          airephy, &
    1568                          rlat, &
    1569                          rlon, &
    1570                          presnivs, &
    1571                          calday, &
    1572                          klon, &
    1573                          nqtot, &
    1574                          pdtphys, &
    1575                          annee_ref, &
    1576                          day_ref,  &
    1577                          itau_phy)
    1578 
    1579          CALL VTe(VTinca)
    1580          CALL VTb(VTphysiq)
     1557        CALL VTe(VTphysiq)
     1558        CALL VTb(VTinca)
     1559        !         iii = MOD(NINT(xjour),360)
     1560        !         calday = REAL(iii) + jH_cur
     1561        calday = REAL(days_elapsed) + jH_cur
     1562        WRITE(lunout,*) 'initial time chemini', days_elapsed, calday
     1563
     1564        CALL chemini(  &
     1565             rg, &
     1566             ra, &
     1567             airephy, &
     1568             rlat, &
     1569             rlon, &
     1570             presnivs, &
     1571             calday, &
     1572             klon, &
     1573             nqtot, &
     1574             pdtphys, &
     1575             annee_ref, &
     1576             day_ref,  &
     1577             itau_phy)
     1578
     1579        CALL VTe(VTinca)
     1580        CALL VTb(VTphysiq)
    15811581#endif
    1582       END IF
    1583 !
    1584 !
     1582     END IF
     1583     !
     1584     !
    15851585!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
    1586 ! Nouvelle initialisation pour le rayonnement RRTM
     1586     ! Nouvelle initialisation pour le rayonnement RRTM
    15871587!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
    15881588
    1589       call iniradia(klon,klev,paprs(1,1:klev+1))
    1590 
    1591 !$omp single
    1592       if (read_climoz >= 1) then
    1593          call open_climoz(ncid_climoz, press_climoz)
    1594       END IF
    1595 !$omp end single
    1596 !
    1597 !IM betaCRF
    1598       pfree=70000. !Pa
    1599       beta_pbl=1.
    1600       beta_free=1.
    1601       lon1_beta=-180.
    1602       lon2_beta=+180.
    1603       lat1_beta=90.
    1604       lat2_beta=-90.
    1605       mskocean_beta=.FALSE.
    1606 
    1607       OPEN(99,file='beta_crf.data',status='old', &
    1608                 form='formatted',err=9999)
    1609       READ(99,*,end=9998) pfree
    1610       READ(99,*,end=9998) beta_pbl
    1611       READ(99,*,end=9998) beta_free
    1612       READ(99,*,end=9998) lon1_beta
    1613       READ(99,*,end=9998) lon2_beta
    1614       READ(99,*,end=9998) lat1_beta
    1615       READ(99,*,end=9998) lat2_beta
    1616       READ(99,*,end=9998) mskocean_beta
    1617 9998  Continue
    1618       CLOSE(99)
    1619 9999  Continue
    1620       WRITE(*,*)'pfree=',pfree
    1621       WRITE(*,*)'beta_pbl=',beta_pbl
    1622       WRITE(*,*)'beta_free=',beta_free
    1623       WRITE(*,*)'lon1_beta=',lon1_beta
    1624       WRITE(*,*)'lon2_beta=',lon2_beta
    1625       WRITE(*,*)'lat1_beta=',lat1_beta
    1626       WRITE(*,*)'lat2_beta=',lat2_beta
    1627       WRITE(*,*)'mskocean_beta=',mskocean_beta
    1628       ENDIF
    1629 !
    1630 !   ****************     Fin  de   IF ( debut  )   ***************
    1631 !
    1632 !
    1633 ! Incrementer le compteur de la physique
    1634 !
    1635       itap   = itap + 1
    1636 !
    1637 !
    1638 ! Update fraction of the sub-surfaces (pctsrf) and
    1639 ! initialize, where a new fraction has appeared, all variables depending
    1640 ! on the surface fraction.
    1641 !
    1642       CALL change_srf_frac(itap, dtime, days_elapsed+1,  &
    1643            pctsrf, falb1, falb2, ftsol, ustar, u10m, v10m, pbl_tke)
    1644 
    1645 
    1646 ! Update time and other variables in Reprobus
    1647       IF (type_trac == 'repr') THEN
     1589     call iniradia(klon,klev,paprs(1,1:klev+1))
     1590
     1591     !$omp single
     1592     if (read_climoz >= 1) then
     1593        call open_climoz(ncid_climoz, press_climoz)
     1594     END IF
     1595     !$omp end single
     1596     !
     1597     !IM betaCRF
     1598     pfree=70000. !Pa
     1599     beta_pbl=1.
     1600     beta_free=1.
     1601     lon1_beta=-180.
     1602     lon2_beta=+180.
     1603     lat1_beta=90.
     1604     lat2_beta=-90.
     1605     mskocean_beta=.FALSE.
     1606
     1607     OPEN(99,file='beta_crf.data',status='old', &
     1608          form='formatted',err=9999)
     1609     READ(99,*,end=9998) pfree
     1610     READ(99,*,end=9998) beta_pbl
     1611     READ(99,*,end=9998) beta_free
     1612     READ(99,*,end=9998) lon1_beta
     1613     READ(99,*,end=9998) lon2_beta
     1614     READ(99,*,end=9998) lat1_beta
     1615     READ(99,*,end=9998) lat2_beta
     1616     READ(99,*,end=9998) mskocean_beta
     16179998 Continue
     1618     CLOSE(99)
     16199999 Continue
     1620     WRITE(*,*)'pfree=',pfree
     1621     WRITE(*,*)'beta_pbl=',beta_pbl
     1622     WRITE(*,*)'beta_free=',beta_free
     1623     WRITE(*,*)'lon1_beta=',lon1_beta
     1624     WRITE(*,*)'lon2_beta=',lon2_beta
     1625     WRITE(*,*)'lat1_beta=',lat1_beta
     1626     WRITE(*,*)'lat2_beta=',lat2_beta
     1627     WRITE(*,*)'mskocean_beta=',mskocean_beta
     1628  ENDIF
     1629  !
     1630  !   ****************     Fin  de   IF ( debut  )   ***************
     1631  !
     1632  !
     1633  ! Incrementer le compteur de la physique
     1634  !
     1635  itap   = itap + 1
     1636  !
     1637  !
     1638  ! Update fraction of the sub-surfaces (pctsrf) and
     1639  ! initialize, where a new fraction has appeared, all variables depending
     1640  ! on the surface fraction.
     1641  !
     1642  CALL change_srf_frac(itap, dtime, days_elapsed+1,  &
     1643       pctsrf, falb1, falb2, ftsol, ustar, u10m, v10m, pbl_tke)
     1644
     1645
     1646  ! Update time and other variables in Reprobus
     1647  IF (type_trac == 'repr') THEN
    16481648#ifdef REPROBUS
    1649          CALL Init_chem_rep_xjour(jD_cur-jD_ref+day_ref)
    1650          print*,'xjour equivalent rjourvrai',jD_cur-jD_ref+day_ref
    1651          CALL Rtime(debut)
     1649     CALL Init_chem_rep_xjour(jD_cur-jD_ref+day_ref)
     1650     print*,'xjour equivalent rjourvrai',jD_cur-jD_ref+day_ref
     1651     CALL Rtime(debut)
    16521652#endif
    1653       END IF
    1654 
    1655 
    1656 ! Tendances bidons pour les processus qui n'affectent pas certaines
    1657 ! variables.
    1658       du0(:,:)=0.
    1659       dv0(:,:)=0.
    1660       dq0(:,:)=0.
    1661       dql0(:,:)=0.
    1662 !
    1663 ! Mettre a zero des variables de sortie (pour securite)
    1664 !
    1665       DO i = 1, klon
    1666          d_ps(i) = 0.0
    1667       ENDDO
    1668       DO k = 1, klev
    1669       DO i = 1, klon
    1670          d_t(i,k) = 0.0
    1671          d_u(i,k) = 0.0
    1672          d_v(i,k) = 0.0
    1673       ENDDO
    1674       ENDDO
    1675       DO iq = 1, nqtot
    1676       DO k = 1, klev
    1677       DO i = 1, klon
    1678          d_qx(i,k,iq) = 0.0
    1679       ENDDO
    1680       ENDDO
    1681       ENDDO
    1682       da(:,:)=0.
    1683       mp(:,:)=0.
    1684       phi(:,:,:)=0.
    1685 ! RomP >>>
    1686       phi2(:,:,:)=0.
    1687       beta_prec_fisrt(:,:)=0.
    1688       beta_prec(:,:)=0.
    1689       epmlmMm(:,:,:)=0.
    1690       eplaMm(:,:)=0.
    1691       d1a(:,:)=0.
    1692       dam(:,:)=0.
    1693           pmflxr=0.
    1694           pmflxs=0.
    1695 ! RomP <<<
    1696 
    1697 !
    1698 ! Ne pas affecter les valeurs entrees de u, v, h, et q
    1699 !
    1700       DO k = 1, klev
    1701       DO i = 1, klon
    1702          t_seri(i,k)  = t(i,k)
    1703          u_seri(i,k)  = u(i,k)
    1704          v_seri(i,k)  = v(i,k)
    1705          q_seri(i,k)  = qx(i,k,ivap)
    1706          ql_seri(i,k) = qx(i,k,iliq)
    1707          qs_seri(i,k) = 0.
    1708       ENDDO
    1709       ENDDO
    1710       tke0(:,:)=pbl_tke(:,:,is_ave)
    1711       IF (nqtot.GE.3) THEN
    1712       DO iq = 3, nqtot
    1713       DO  k = 1, klev
    1714       DO  i = 1, klon
    1715          tr_seri(i,k,iq-2) = qx(i,k,iq)
    1716       ENDDO
    1717       ENDDO
    1718       ENDDO
    1719       ELSE
    1720       DO k = 1, klev
    1721       DO i = 1, klon
    1722          tr_seri(i,k,1) = 0.0
    1723       ENDDO
    1724       ENDDO
    1725       ENDIF
    1726 !
    1727       DO i = 1, klon
    1728         ztsol(i) = 0.
    1729       ENDDO
    1730       DO nsrf = 1, nbsrf
     1653  END IF
     1654
     1655
     1656  ! Tendances bidons pour les processus qui n'affectent pas certaines
     1657  ! variables.
     1658  du0(:,:)=0.
     1659  dv0(:,:)=0.
     1660  dq0(:,:)=0.
     1661  dql0(:,:)=0.
     1662  !
     1663  ! Mettre a zero des variables de sortie (pour securite)
     1664  !
     1665  DO i = 1, klon
     1666     d_ps(i) = 0.0
     1667  ENDDO
     1668  DO k = 1, klev
     1669     DO i = 1, klon
     1670        d_t(i,k) = 0.0
     1671        d_u(i,k) = 0.0
     1672        d_v(i,k) = 0.0
     1673     ENDDO
     1674  ENDDO
     1675  DO iq = 1, nqtot
     1676     DO k = 1, klev
    17311677        DO i = 1, klon
    1732           ztsol(i) = ztsol(i) + ftsol(i,nsrf)*pctsrf(i,nsrf)
     1678           d_qx(i,k,iq) = 0.0
    17331679        ENDDO
    1734       ENDDO
    1735 !IM
    1736       IF (ip_ebil_phy.ge.1) THEN
    1737         ztit='after dynamic'
    1738         CALL diagetpq(airephy,ztit,ip_ebil_phy,1,1,dtime &
    1739             , t_seri,q_seri,ql_seri,qs_seri,u_seri,v_seri,paprs,pplay &
    1740             , d_h_vcol, d_qt, d_qw, d_ql, d_qs, d_ec)
    1741 !     Comme les tendances de la physique sont ajoute dans la dynamique,
    1742 !     on devrait avoir que la variation d'entalpie par la dynamique
    1743 !     est egale a la variation de la physique au pas de temps precedent.
    1744 !     Donc la somme de ces 2 variations devrait etre nulle.
    1745         call diagphy(airephy,ztit,ip_ebil_phy &
    1746             , zero_v, zero_v, zero_v, zero_v, zero_v &
    1747             , zero_v, zero_v, zero_v, ztsol &
    1748             , d_h_vcol+d_h_vcol_phy, d_qt, 0. &
    1749             , fs_bound, fq_bound )
    1750       END IF
    1751 
    1752 ! Diagnostiquer la tendance dynamique
    1753 !
    1754       IF (ancien_ok) THEN
    1755          DO k = 1, klev
    1756          DO i = 1, klon
    1757             d_u_dyn(i,k) = (u_seri(i,k)-u_ancien(i,k))/dtime
    1758             d_v_dyn(i,k) = (v_seri(i,k)-v_ancien(i,k))/dtime
    1759             d_t_dyn(i,k) = (t_seri(i,k)-t_ancien(i,k))/dtime
    1760             d_q_dyn(i,k) = (q_seri(i,k)-q_ancien(i,k))/dtime
    1761          ENDDO
    1762          ENDDO
     1680     ENDDO
     1681  ENDDO
     1682  da(:,:)=0.
     1683  mp(:,:)=0.
     1684  phi(:,:,:)=0.
     1685  ! RomP >>>
     1686  phi2(:,:,:)=0.
     1687  beta_prec_fisrt(:,:)=0.
     1688  beta_prec(:,:)=0.
     1689  epmlmMm(:,:,:)=0.
     1690  eplaMm(:,:)=0.
     1691  d1a(:,:)=0.
     1692  dam(:,:)=0.
     1693  pmflxr=0.
     1694  pmflxs=0.
     1695  ! RomP <<<
     1696
     1697  !
     1698  ! Ne pas affecter les valeurs entrees de u, v, h, et q
     1699  !
     1700  DO k = 1, klev
     1701     DO i = 1, klon
     1702        t_seri(i,k)  = t(i,k)
     1703        u_seri(i,k)  = u(i,k)
     1704        v_seri(i,k)  = v(i,k)
     1705        q_seri(i,k)  = qx(i,k,ivap)
     1706        ql_seri(i,k) = qx(i,k,iliq)
     1707        qs_seri(i,k) = 0.
     1708     ENDDO
     1709  ENDDO
     1710  tke0(:,:)=pbl_tke(:,:,is_ave)
     1711  IF (nqtot.GE.3) THEN
     1712     DO iq = 3, nqtot
     1713        DO  k = 1, klev
     1714           DO  i = 1, klon
     1715              tr_seri(i,k,iq-2) = qx(i,k,iq)
     1716           ENDDO
     1717        ENDDO
     1718     ENDDO
     1719  ELSE
     1720     DO k = 1, klev
     1721        DO i = 1, klon
     1722           tr_seri(i,k,1) = 0.0
     1723        ENDDO
     1724     ENDDO
     1725  ENDIF
     1726  !
     1727  DO i = 1, klon
     1728     ztsol(i) = 0.
     1729  ENDDO
     1730  DO nsrf = 1, nbsrf
     1731     DO i = 1, klon
     1732        ztsol(i) = ztsol(i) + ftsol(i,nsrf)*pctsrf(i,nsrf)
     1733     ENDDO
     1734  ENDDO
     1735  !IM
     1736  IF (ip_ebil_phy.ge.1) THEN
     1737     ztit='after dynamic'
     1738     CALL diagetpq(airephy,ztit,ip_ebil_phy,1,1,dtime &
     1739          , t_seri,q_seri,ql_seri,qs_seri,u_seri,v_seri,paprs,pplay &
     1740          , d_h_vcol, d_qt, d_qw, d_ql, d_qs, d_ec)
     1741     !     Comme les tendances de la physique sont ajoute dans la dynamique,
     1742     !     on devrait avoir que la variation d'entalpie par la dynamique
     1743     !     est egale a la variation de la physique au pas de temps precedent.
     1744     !     Donc la somme de ces 2 variations devrait etre nulle.
     1745     call diagphy(airephy,ztit,ip_ebil_phy &
     1746          , zero_v, zero_v, zero_v, zero_v, zero_v &
     1747          , zero_v, zero_v, zero_v, ztsol &
     1748          , d_h_vcol+d_h_vcol_phy, d_qt, 0. &
     1749          , fs_bound, fq_bound )
     1750  END IF
     1751
     1752  ! Diagnostiquer la tendance dynamique
     1753  !
     1754  IF (ancien_ok) THEN
     1755     DO k = 1, klev
     1756        DO i = 1, klon
     1757           d_u_dyn(i,k) = (u_seri(i,k)-u_ancien(i,k))/dtime
     1758           d_v_dyn(i,k) = (v_seri(i,k)-v_ancien(i,k))/dtime
     1759           d_t_dyn(i,k) = (t_seri(i,k)-t_ancien(i,k))/dtime
     1760           d_q_dyn(i,k) = (q_seri(i,k)-q_ancien(i,k))/dtime
     1761        ENDDO
     1762     ENDDO
    17631763!!! RomP >>>   td dyn traceur
    1764        IF (nqtot.GE.3) THEN
    1765           DO iq = 3, nqtot
    1766           DO k = 1, klev
    1767           DO i = 1, klon
    1768             d_tr_dyn(i,k,iq-2)= &
    1769              (tr_seri(i,k,iq-2)-tr_ancien(i,k,iq-2))/dtime
    1770 !         iiq=niadv(iq)
    1771 !         print*,i,k," d_tr_dyn",d_tr_dyn(i,k,iq-2),"tra:",iq,tname(iiq)
    1772           ENDDO
    1773           ENDDO
    1774           ENDDO
    1775        ENDIF
     1764     IF (nqtot.GE.3) THEN
     1765        DO iq = 3, nqtot
     1766           DO k = 1, klev
     1767              DO i = 1, klon
     1768                 d_tr_dyn(i,k,iq-2)= &
     1769                      (tr_seri(i,k,iq-2)-tr_ancien(i,k,iq-2))/dtime
     1770                 !         iiq=niadv(iq)
     1771                 !         print*,i,k," d_tr_dyn",d_tr_dyn(i,k,iq-2),"tra:",iq,tname(iiq)
     1772              ENDDO
     1773           ENDDO
     1774        ENDDO
     1775     ENDIF
    17761776!!! RomP <<<
    1777       ELSE
    1778          DO k = 1, klev
    1779          DO i = 1, klon
    1780             d_u_dyn(i,k) = 0.0
    1781             d_v_dyn(i,k) = 0.0
    1782             d_t_dyn(i,k) = 0.0
    1783             d_q_dyn(i,k) = 0.0
    1784          ENDDO
    1785          ENDDO
     1777  ELSE
     1778     DO k = 1, klev
     1779        DO i = 1, klon
     1780           d_u_dyn(i,k) = 0.0
     1781           d_v_dyn(i,k) = 0.0
     1782           d_t_dyn(i,k) = 0.0
     1783           d_q_dyn(i,k) = 0.0
     1784        ENDDO
     1785     ENDDO
    17861786!!! RomP >>>   td dyn traceur
    1787         IF (nqtot.GE.3) THEN
    1788           DO iq = 3, nqtot
    1789           DO k = 1, klev
    1790           DO i = 1, klon
    1791             d_tr_dyn(i,k,iq-2)= 0.0
    1792           ENDDO
    1793           ENDDO
    1794           ENDDO
    1795        ENDIF
     1787     IF (nqtot.GE.3) THEN
     1788        DO iq = 3, nqtot
     1789           DO k = 1, klev
     1790              DO i = 1, klon
     1791                 d_tr_dyn(i,k,iq-2)= 0.0
     1792              ENDDO
     1793           ENDDO
     1794        ENDDO
     1795     ENDIF
    17961796!!! RomP <<<
    1797          ancien_ok = .TRUE.
    1798       ENDIF
    1799 !
    1800 ! Ajouter le geopotentiel du sol:
    1801 !
    1802       DO k = 1, klev
    1803       DO i = 1, klon
    1804          zphi(i,k) = pphi(i,k) + pphis(i)
    1805       ENDDO
    1806       ENDDO
    1807 !
    1808 ! Verifier les temperatures
    1809 !
    1810 !IM BEG
    1811       IF (check) THEN
    1812        amn=MIN(ftsol(1,is_ter),1000.)
    1813        amx=MAX(ftsol(1,is_ter),-1000.)
    1814        DO i=2, klon
     1797     ancien_ok = .TRUE.
     1798  ENDIF
     1799  !
     1800  ! Ajouter le geopotentiel du sol:
     1801  !
     1802  DO k = 1, klev
     1803     DO i = 1, klon
     1804        zphi(i,k) = pphi(i,k) + pphis(i)
     1805     ENDDO
     1806  ENDDO
     1807  !
     1808  ! Verifier les temperatures
     1809  !
     1810  !IM BEG
     1811  IF (check) THEN
     1812     amn=MIN(ftsol(1,is_ter),1000.)
     1813     amx=MAX(ftsol(1,is_ter),-1000.)
     1814     DO i=2, klon
    18151815        amn=MIN(ftsol(i,is_ter),amn)
    18161816        amx=MAX(ftsol(i,is_ter),amx)
    1817        ENDDO
    1818 !
    1819        PRINT*,' debut avant hgardfou min max ftsol',itap,amn,amx
    1820       ENDIF !(check) THEN
    1821 !IM END
    1822 !
    1823       CALL hgardfou(t_seri,ftsol,'debutphy')
    1824 !
    1825 !IM BEG
    1826       IF (check) THEN
    1827        amn=MIN(ftsol(1,is_ter),1000.)
    1828        amx=MAX(ftsol(1,is_ter),-1000.)
    1829        DO i=2, klon
     1817     ENDDO
     1818     !
     1819     PRINT*,' debut avant hgardfou min max ftsol',itap,amn,amx
     1820  ENDIF !(check) THEN
     1821  !IM END
     1822  !
     1823  CALL hgardfou(t_seri,ftsol,'debutphy')
     1824  !
     1825  !IM BEG
     1826  IF (check) THEN
     1827     amn=MIN(ftsol(1,is_ter),1000.)
     1828     amx=MAX(ftsol(1,is_ter),-1000.)
     1829     DO i=2, klon
    18301830        amn=MIN(ftsol(i,is_ter),amn)
    18311831        amx=MAX(ftsol(i,is_ter),amx)
    1832        ENDDO
    1833 !
    1834        PRINT*,' debut apres hgardfou min max ftsol',itap,amn,amx
    1835       ENDIF !(check) THEN
    1836 !IM END
    1837 !
    1838 ! Mettre en action les conditions aux limites (albedo, sst, etc.).
    1839 ! Prescrire l'ozone et calculer l'albedo sur l'ocean.
    1840 !
    1841       if (read_climoz >= 1) then
    1842 !        Ozone from a file
    1843 !        Update required ozone index:
    1844          ro3i = int((days_elapsed + jh_cur - jh_1jan) &
    1845               / ioget_year_len(year_cur) * 360.) + 1
    1846          if (ro3i == 361) ro3i = 360
    1847 !        (This should never occur, except perhaps because of roundup
    1848 !        error. See documentation.)
    1849          if (ro3i /= co3i) then
    1850 !           Update ozone field:
    1851             if (read_climoz == 1) then
    1852                call regr_pr_av(ncid_climoz, (/"tro3"/), julien=ro3i, &
    1853                     press_in_edg=press_climoz, paprs=paprs, v3=wo)
    1854             else
    1855 !              read_climoz == 2
    1856                call regr_pr_av(ncid_climoz, &
    1857                     (/"tro3         ", "tro3_daylight"/), &
    1858                     julien=ro3i, press_in_edg=press_climoz, paprs=paprs, &
    1859                     v3=wo)
    1860             end if
    1861 !           Convert from mole fraction of ozone to column density of ozone in a
    1862 !           cell, in kDU:
    1863             forall (l = 1: read_climoz) wo(:, :, l) = wo(:, :, l) &
    1864                  * rmo3 / rmd * zmasse / dobson_u / 1e3
    1865 !           (By regridding ozone values for LMDZ only once every 360th of
    1866 !           year, we have already neglected the variation of pressure in one
    1867 !           360th of year. So do not recompute "wo" at each time step even if
    1868 !           "zmasse" changes a little.)
    1869             co3i = ro3i
    1870          end if
    1871       elseif (MOD(itap-1,lmt_pas) == 0) THEN
    1872 !        Once per day, update ozone from Royer:
    1873          wo(:, :, 1) = ozonecm(rlat, paprs, rjour=real(days_elapsed+1))
    1874       ENDIF
    1875 !
    1876 ! Re-evaporer l'eau liquide nuageuse
    1877 !
    1878       DO k = 1, klev  ! re-evaporation de l'eau liquide nuageuse
    1879       DO i = 1, klon
    1880          zlvdcp=RLVTT/RCPD/(1.0+RVTMP2*q_seri(i,k))
    1881 !jyg<
    1882 !      Attention : Arnaud a propose des formules completement differentes
    1883 !                  A verifier !!!
    1884          zlsdcp=RLSTT/RCPD/(1.0+RVTMP2*q_seri(i,k))
    1885          IF (iflag_ice_thermo .EQ. 0) THEN
     1832     ENDDO
     1833     !
     1834     PRINT*,' debut apres hgardfou min max ftsol',itap,amn,amx
     1835  ENDIF !(check) THEN
     1836  !IM END
     1837  !
     1838  ! Mettre en action les conditions aux limites (albedo, sst, etc.).
     1839  ! Prescrire l'ozone et calculer l'albedo sur l'ocean.
     1840  !
     1841  if (read_climoz >= 1) then
     1842     !        Ozone from a file
     1843     !        Update required ozone index:
     1844     ro3i = int((days_elapsed + jh_cur - jh_1jan) &
     1845          / ioget_year_len(year_cur) * 360.) + 1
     1846     if (ro3i == 361) ro3i = 360
     1847     !        (This should never occur, except perhaps because of roundup
     1848     !        error. See documentation.)
     1849     if (ro3i /= co3i) then
     1850        !           Update ozone field:
     1851        if (read_climoz == 1) then
     1852           call regr_pr_av(ncid_climoz, (/"tro3"/), julien=ro3i, &
     1853                press_in_edg=press_climoz, paprs=paprs, v3=wo)
     1854        else
     1855           !              read_climoz == 2
     1856           call regr_pr_av(ncid_climoz, &
     1857                (/"tro3         ", "tro3_daylight"/), &
     1858                julien=ro3i, press_in_edg=press_climoz, paprs=paprs, &
     1859                v3=wo)
     1860        end if
     1861        !           Convert from mole fraction of ozone to column density of ozone in a
     1862        !           cell, in kDU:
     1863        forall (l = 1: read_climoz) wo(:, :, l) = wo(:, :, l) &
     1864             * rmo3 / rmd * zmasse / dobson_u / 1e3
     1865        !           (By regridding ozone values for LMDZ only once every 360th of
     1866        !           year, we have already neglected the variation of pressure in one
     1867        !           360th of year. So do not recompute "wo" at each time step even if
     1868        !           "zmasse" changes a little.)
     1869        co3i = ro3i
     1870     end if
     1871  elseif (MOD(itap-1,lmt_pas) == 0) THEN
     1872     !        Once per day, update ozone from Royer:
     1873     wo(:, :, 1) = ozonecm(rlat, paprs, rjour=real(days_elapsed+1))
     1874  ENDIF
     1875  !
     1876  ! Re-evaporer l'eau liquide nuageuse
     1877  !
     1878  DO k = 1, klev  ! re-evaporation de l'eau liquide nuageuse
     1879     DO i = 1, klon
     1880        zlvdcp=RLVTT/RCPD/(1.0+RVTMP2*q_seri(i,k))
     1881        !jyg<
     1882        !      Attention : Arnaud a propose des formules completement differentes
     1883        !                  A verifier !!!
     1884        zlsdcp=RLSTT/RCPD/(1.0+RVTMP2*q_seri(i,k))
     1885        IF (iflag_ice_thermo .EQ. 0) THEN
    18861886           zlsdcp=zlvdcp
    1887          ENDIF
    1888 !>jyg
    1889 
    1890          zdelta = MAX(0.,SIGN(1.,RTT-t_seri(i,k)))
    1891          zb = MAX(0.0,ql_seri(i,k))
    1892          za = - MAX(0.0,ql_seri(i,k)) &
    1893                         * (zlvdcp*(1.-zdelta)+zlsdcp*zdelta)
    1894          t_seri(i,k) = t_seri(i,k) + za
    1895          q_seri(i,k) = q_seri(i,k) + zb
    1896          ql_seri(i,k) = 0.0
    1897          d_t_eva(i,k) = za
    1898          d_q_eva(i,k) = zb
    1899       ENDDO
    1900       ENDDO
    1901 !IM
    1902       IF (ip_ebil_phy.ge.2) THEN
    1903         ztit='after reevap'
    1904         CALL diagetpq(airephy,ztit,ip_ebil_phy,2,1,dtime &
    1905             , t_seri,q_seri,ql_seri,qs_seri,u_seri,v_seri,paprs,pplay &
    1906             , d_h_vcol, d_qt, d_qw, d_ql, d_qs, d_ec)
    1907          call diagphy(airephy,ztit,ip_ebil_phy &
    1908             , zero_v, zero_v, zero_v, zero_v, zero_v &
    1909             , zero_v, zero_v, zero_v, ztsol &
    1910             , d_h_vcol, d_qt, d_ec &
    1911             , fs_bound, fq_bound )
    1912 !
    1913       END IF
    1914 
    1915 !
    1916 !=========================================================================
    1917 ! Calculs de l'orbite.
    1918 ! Necessaires pour le rayonnement et la surface (calcul de l'albedo).
    1919 ! doit donc etre plac\'e avant radlwsw et pbl_surface
     1887        ENDIF
     1888        !>jyg
     1889
     1890        zdelta = MAX(0.,SIGN(1.,RTT-t_seri(i,k)))
     1891        zb = MAX(0.0,ql_seri(i,k))
     1892        za = - MAX(0.0,ql_seri(i,k)) &
     1893             * (zlvdcp*(1.-zdelta)+zlsdcp*zdelta)
     1894        t_seri(i,k) = t_seri(i,k) + za
     1895        q_seri(i,k) = q_seri(i,k) + zb
     1896        ql_seri(i,k) = 0.0
     1897        d_t_eva(i,k) = za
     1898        d_q_eva(i,k) = zb
     1899     ENDDO
     1900  ENDDO
     1901  !IM
     1902  IF (ip_ebil_phy.ge.2) THEN
     1903     ztit='after reevap'
     1904     CALL diagetpq(airephy,ztit,ip_ebil_phy,2,1,dtime &
     1905          , t_seri,q_seri,ql_seri,qs_seri,u_seri,v_seri,paprs,pplay &
     1906          , d_h_vcol, d_qt, d_qw, d_ql, d_qs, d_ec)
     1907     call diagphy(airephy,ztit,ip_ebil_phy &
     1908          , zero_v, zero_v, zero_v, zero_v, zero_v &
     1909          , zero_v, zero_v, zero_v, ztsol &
     1910          , d_h_vcol, d_qt, d_ec &
     1911          , fs_bound, fq_bound )
     1912     !
     1913  END IF
     1914
     1915  !
     1916  !=========================================================================
     1917  ! Calculs de l'orbite.
     1918  ! Necessaires pour le rayonnement et la surface (calcul de l'albedo).
     1919  ! doit donc etre plac\'e avant radlwsw et pbl_surface
    19201920
    19211921!!!   jyg 17 Sep 2010 !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
    1922       call ymds2ju(year_cur, mth_eq, day_eq,0., jD_eq)
    1923       day_since_equinox = (jD_cur + jH_cur) - jD_eq
    1924 !
    1925 !   choix entre calcul de la longitude solaire vraie ou valeur fixee a
    1926 !   solarlong0
    1927       if (solarlong0<-999.) then
    1928        if (new_orbit) then
    1929 ! calcul selon la routine utilisee pour les planetes
     1922  call ymds2ju(year_cur, mth_eq, day_eq,0., jD_eq)
     1923  day_since_equinox = (jD_cur + jH_cur) - jD_eq
     1924  !
     1925  !   choix entre calcul de la longitude solaire vraie ou valeur fixee a
     1926  !   solarlong0
     1927  if (solarlong0<-999.) then
     1928     if (new_orbit) then
     1929        ! calcul selon la routine utilisee pour les planetes
    19301930        call solarlong(day_since_equinox, zlongi, dist)
    1931        else
    1932 ! calcul selon la routine utilisee pour l'AR4
     1931     else
     1932        ! calcul selon la routine utilisee pour l'AR4
    19331933        CALL orbite(REAL(days_elapsed+1),zlongi,dist)
    1934        endif
    1935       else
    1936            zlongi=solarlong0  ! longitude solaire vraie
    1937            dist=1.            ! distance au soleil / moyenne
    1938       endif
    1939       if(prt_level.ge.1)                                                &
    1940          write(lunout,*)'Longitude solaire ',zlongi,solarlong0,dist
     1934     endif
     1935  else
     1936     zlongi=solarlong0  ! longitude solaire vraie
     1937     dist=1.            ! distance au soleil / moyenne
     1938  endif
     1939  if(prt_level.ge.1)                                                &
     1940       write(lunout,*)'Longitude solaire ',zlongi,solarlong0,dist
    19411941
    19421942
    19431943!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
    1944 ! Calcul de l'ensoleillement :
    1945 ! ============================
    1946 ! Pour une solarlong0=1000., on calcule un ensoleillement moyen sur
    1947 ! l'annee a partir d'une formule analytique.
    1948 ! Cet ensoleillement est sym\'etrique autour de l'\'equateur et
    1949 ! non nul aux poles.
    1950       IF (abs(solarlong0-1000.)<1.e-4) then
    1951          call zenang_an(cycle_diurne,jH_cur,rlat,rlon,rmu0,fract)
    1952       ELSE
    1953 !  Avec ou sans cycle diurne
    1954          IF (cycle_diurne) THEN
    1955            zdtime=dtime*REAL(radpas) ! pas de temps du rayonnement (s)
    1956            CALL zenang(zlongi,jH_cur,zdtime,rlat,rlon,rmu0,fract)
    1957          ELSE
    1958            CALL angle(zlongi, rlat, fract, rmu0)
    1959          ENDIF
    1960       ENDIF
    1961 
    1962       if (mydebug) then
     1944  ! Calcul de l'ensoleillement :
     1945  ! ============================
     1946  ! Pour une solarlong0=1000., on calcule un ensoleillement moyen sur
     1947  ! l'annee a partir d'une formule analytique.
     1948  ! Cet ensoleillement est sym\'etrique autour de l'\'equateur et
     1949  ! non nul aux poles.
     1950  IF (abs(solarlong0-1000.)<1.e-4) then
     1951     call zenang_an(cycle_diurne,jH_cur,rlat,rlon,rmu0,fract)
     1952  ELSE
     1953     !  Avec ou sans cycle diurne
     1954     IF (cycle_diurne) THEN
     1955        zdtime=dtime*REAL(radpas) ! pas de temps du rayonnement (s)
     1956        CALL zenang(zlongi,jH_cur,zdtime,rlat,rlon,rmu0,fract)
     1957     ELSE
     1958        CALL angle(zlongi, rlat, fract, rmu0)
     1959     ENDIF
     1960  ENDIF
     1961
     1962  if (mydebug) then
     1963     call writefield_phy('u_seri',u_seri,llm)
     1964     call writefield_phy('v_seri',v_seri,llm)
     1965     call writefield_phy('t_seri',t_seri,llm)
     1966     call writefield_phy('q_seri',q_seri,llm)
     1967  endif
     1968
     1969  !cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc
     1970  ! Appel au pbl_surface : Planetary Boudary Layer et Surface
     1971  ! Cela implique tous les interactions des sous-surfaces et la partie diffusion
     1972  ! turbulent du couche limit.
     1973  !
     1974  ! Certains varibales de sorties de pbl_surface sont utiliser que pour
     1975  ! ecriture des fihiers hist_XXXX.nc, ces sont :
     1976  !   qsol,      zq2m,      s_pblh,  s_lcl,
     1977  !   s_capCL,   s_oliqCL,  s_cteiCL,s_pblT,
     1978  !   s_therm,   s_trmb1,   s_trmb2, s_trmb3,
     1979  !   zxrugs,    zu10m,     zv10m,   fder,
     1980  !   zxqsurf,   rh2m,      zxfluxu, zxfluxv,
     1981  !   frugs,     agesno,    fsollw,  fsolsw,
     1982  !   d_ts,      fevap,     fluxlat, t2m,
     1983  !   wfbils,    wfbilo,    fluxt,   fluxu, fluxv,
     1984  !
     1985  ! Certains ne sont pas utiliser du tout :
     1986  !   dsens, devap, zxsnow, zxfluxt, zxfluxq, q2m, fluxq
     1987  !
     1988
     1989  ! Calcul de l'humidite de saturation au niveau du sol
     1990
     1991
     1992
     1993  if (iflag_pbl/=0) then
     1994
     1995     CALL pbl_surface(  &
     1996          dtime,     date0,     itap,    days_elapsed+1, &
     1997          debut,     lafin, &
     1998          rlon,      rlat,      rugoro,  rmu0,      &
     1999          rain_fall, snow_fall, solsw,   sollw,     &
     2000          t_seri,    q_seri,    u_seri,  v_seri,    &
     2001          pplay,     paprs,     pctsrf,             &
     2002          ftsol,falb1,falb2,ustar,u10m,v10m,wstar, &
     2003          sollwdown, cdragh,    cdragm,  u1,    v1, &
     2004          albsol1,   albsol2,   sens,    evap,   &
     2005          zxtsol,    zxfluxlat, zt2m,    qsat2m,  &
     2006          d_t_vdf,   d_q_vdf,   d_u_vdf, d_v_vdf, d_t_diss, &
     2007          coefh,     coefm,     slab_wfbils,                 &
     2008          qsol,      zq2m,      s_pblh,  s_lcl, &
     2009          s_capCL,   s_oliqCL,  s_cteiCL,s_pblT, &
     2010          s_therm,   s_trmb1,   s_trmb2, s_trmb3, &
     2011          zxrugs,    zustar, zu10m,     zv10m,   fder, &
     2012          zxqsurf,   rh2m,      zxfluxu, zxfluxv, &
     2013          frugs,     agesno,    fsollw,  fsolsw, &
     2014          d_ts,      fevap,     fluxlat, t2m, &
     2015          wfbils,    wfbilo,    fluxt,   fluxu,  fluxv, &
     2016          dsens,     devap,     zxsnow, &
     2017          zxfluxt,   zxfluxq,   q2m,     fluxq, pbl_tke )
     2018
     2019
     2020     !-----------------------------------------------------------------------------------------
     2021     ! ajout des tendances de la diffusion turbulente
     2022     CALL add_phys_tend &
     2023          (d_u_vdf,d_v_vdf,d_t_vdf+d_t_diss,d_q_vdf,dql0,'vdf')
     2024     !-----------------------------------------------------------------------------------------
     2025
     2026     if (mydebug) then
    19632027        call writefield_phy('u_seri',u_seri,llm)
    19642028        call writefield_phy('v_seri',v_seri,llm)
    19652029        call writefield_phy('t_seri',t_seri,llm)
    19662030        call writefield_phy('q_seri',q_seri,llm)
    1967       endif
    1968 
    1969 !cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc
    1970 ! Appel au pbl_surface : Planetary Boudary Layer et Surface
    1971 ! Cela implique tous les interactions des sous-surfaces et la partie diffusion
    1972 ! turbulent du couche limit.
    1973 !
    1974 ! Certains varibales de sorties de pbl_surface sont utiliser que pour
    1975 ! ecriture des fihiers hist_XXXX.nc, ces sont :
    1976 !   qsol,      zq2m,      s_pblh,  s_lcl,
    1977 !   s_capCL,   s_oliqCL,  s_cteiCL,s_pblT,
    1978 !   s_therm,   s_trmb1,   s_trmb2, s_trmb3,
    1979 !   zxrugs,    zu10m,     zv10m,   fder,
    1980 !   zxqsurf,   rh2m,      zxfluxu, zxfluxv,
    1981 !   frugs,     agesno,    fsollw,  fsolsw,
    1982 !   d_ts,      fevap,     fluxlat, t2m,
    1983 !   wfbils,    wfbilo,    fluxt,   fluxu, fluxv,
    1984 !
    1985 ! Certains ne sont pas utiliser du tout :
    1986 !   dsens, devap, zxsnow, zxfluxt, zxfluxq, q2m, fluxq
    1987 !
    1988 
    1989 ! Calcul de l'humidite de saturation au niveau du sol
    1990 
    1991 
    1992 
    1993       if (iflag_pbl/=0) then
    1994 
    1995       CALL pbl_surface(  &
    1996            dtime,     date0,     itap,    days_elapsed+1, &
    1997            debut,     lafin, &
    1998            rlon,      rlat,      rugoro,  rmu0,      &
    1999            rain_fall, snow_fall, solsw,   sollw,     &
    2000            t_seri,    q_seri,    u_seri,  v_seri,    &
    2001            pplay,     paprs,     pctsrf,             &
    2002            ftsol,falb1,falb2,ustar,u10m,v10m,wstar, &
    2003            sollwdown, cdragh,    cdragm,  u1,    v1, &
    2004            albsol1,   albsol2,   sens,    evap,   &
    2005            zxtsol,    zxfluxlat, zt2m,    qsat2m,  &
    2006            d_t_vdf,   d_q_vdf,   d_u_vdf, d_v_vdf, d_t_diss, &
    2007            coefh,     coefm,     slab_wfbils,                 &
    2008            qsol,      zq2m,      s_pblh,  s_lcl, &
    2009            s_capCL,   s_oliqCL,  s_cteiCL,s_pblT, &
    2010            s_therm,   s_trmb1,   s_trmb2, s_trmb3, &
    2011            zxrugs,    zustar, zu10m,     zv10m,   fder, &
    2012            zxqsurf,   rh2m,      zxfluxu, zxfluxv, &
    2013            frugs,     agesno,    fsollw,  fsolsw, &
    2014            d_ts,      fevap,     fluxlat, t2m, &
    2015            wfbils,    wfbilo,    fluxt,   fluxu,  fluxv, &
    2016            dsens,     devap,     zxsnow, &
    2017            zxfluxt,   zxfluxq,   q2m,     fluxq, pbl_tke )
    2018 
    2019 
    2020 !-----------------------------------------------------------------------------------------
    2021 ! ajout des tendances de la diffusion turbulente
    2022       CALL add_phys_tend &
    2023            (d_u_vdf,d_v_vdf,d_t_vdf+d_t_diss,d_q_vdf,dql0,'vdf')
    2024 !-----------------------------------------------------------------------------------------
    2025 
    2026       if (mydebug) then
    2027         call writefield_phy('u_seri',u_seri,llm)
    2028         call writefield_phy('v_seri',v_seri,llm)
    2029         call writefield_phy('t_seri',t_seri,llm)
    2030         call writefield_phy('q_seri',q_seri,llm)
    2031       endif
    2032 
    2033          CALL evappot(klon,nbsrf,ftsol,pplay(:,1),cdragh, &
    2034             t_seri(:,1),q_seri(:,1),u_seri(:,1),v_seri(:,1),evap_pot)
    2035 
    2036 
    2037       IF (ip_ebil_phy.ge.2) THEN
     2031     endif
     2032
     2033     CALL evappot(klon,nbsrf,ftsol,pplay(:,1),cdragh, &
     2034          t_seri(:,1),q_seri(:,1),u_seri(:,1),v_seri(:,1),evap_pot)
     2035
     2036
     2037     IF (ip_ebil_phy.ge.2) THEN
    20382038        ztit='after surface_main'
    20392039        CALL diagetpq(airephy,ztit,ip_ebil_phy,2,2,dtime &
    2040             , t_seri,q_seri,ql_seri,qs_seri,u_seri,v_seri,paprs,pplay &
    2041             , d_h_vcol, d_qt, d_qw, d_ql, d_qs, d_ec)
    2042          call diagphy(airephy,ztit,ip_ebil_phy &
    2043             , zero_v, zero_v, zero_v, zero_v, sens &
    2044             , evap  , zero_v, zero_v, ztsol &
    2045             , d_h_vcol, d_qt, d_ec &
    2046             , fs_bound, fq_bound )
    2047       END IF
    2048 
    2049       ENDIF
    2050 ! =================================================================== c
    2051 !   Calcul de Qsat
    2052 
    2053       DO k = 1, klev
    2054       DO i = 1, klon
    2055          zx_t = t_seri(i,k)
    2056          IF (thermcep) THEN
    2057             zdelta = MAX(0.,SIGN(1.,rtt-zx_t))
    2058             zx_qs  = r2es * FOEEW(zx_t,zdelta)/pplay(i,k)
    2059             zx_qs  = MIN(0.5,zx_qs)
    2060             zcor   = 1./(1.-retv*zx_qs)
    2061             zx_qs  = zx_qs*zcor
    2062          ELSE
     2040             , t_seri,q_seri,ql_seri,qs_seri,u_seri,v_seri,paprs,pplay &
     2041             , d_h_vcol, d_qt, d_qw, d_ql, d_qs, d_ec)
     2042        call diagphy(airephy,ztit,ip_ebil_phy &
     2043             , zero_v, zero_v, zero_v, zero_v, sens &
     2044             , evap  , zero_v, zero_v, ztsol &
     2045             , d_h_vcol, d_qt, d_ec &
     2046             , fs_bound, fq_bound )
     2047     END IF
     2048
     2049  ENDIF
     2050  ! =================================================================== c
     2051  !   Calcul de Qsat
     2052
     2053  DO k = 1, klev
     2054     DO i = 1, klon
     2055        zx_t = t_seri(i,k)
     2056        IF (thermcep) THEN
     2057           zdelta = MAX(0.,SIGN(1.,rtt-zx_t))
     2058           zx_qs  = r2es * FOEEW(zx_t,zdelta)/pplay(i,k)
     2059           zx_qs  = MIN(0.5,zx_qs)
     2060           zcor   = 1./(1.-retv*zx_qs)
     2061           zx_qs  = zx_qs*zcor
     2062        ELSE
    20632063           IF (zx_t.LT.t_coup) THEN
    20642064              zx_qs = qsats(zx_t)/pplay(i,k)
     
    20662066              zx_qs = qsatl(zx_t)/pplay(i,k)
    20672067           ENDIF
    2068          ENDIF
    2069          zqsat(i,k)=zx_qs
    2070       ENDDO
    2071       ENDDO
    2072 
    2073       if (prt_level.ge.1) then
    2074       write(lunout,*) 'L   qsat (g/kg) avant clouds_gno'
    2075       write(lunout,'(i4,f15.4)') (k,1000.*zqsat(igout,k),k=1,klev)
    2076       endif
    2077 !
    2078 ! Appeler la convection (au choix)
    2079 !
    2080       DO k = 1, klev
    2081       DO i = 1, klon
    2082          conv_q(i,k) = d_q_dyn(i,k)  &
    2083                      + d_q_vdf(i,k)/dtime
    2084          conv_t(i,k) = d_t_dyn(i,k)  &
    2085                      + d_t_vdf(i,k)/dtime
    2086       ENDDO
    2087       ENDDO
    2088       IF (check) THEN
    2089          za = qcheck(klon,klev,paprs,q_seri,ql_seri,airephy)
    2090          WRITE(lunout,*) "avantcon=", za
    2091       ENDIF
    2092       zx_ajustq = .FALSE.
    2093       IF (iflag_con.EQ.2) zx_ajustq=.TRUE.
    2094       IF (zx_ajustq) THEN
    2095          DO i = 1, klon
    2096             z_avant(i) = 0.0
    2097          ENDDO
    2098          DO k = 1, klev
    2099          DO i = 1, klon
    2100             z_avant(i) = z_avant(i) + (q_seri(i,k)+ql_seri(i,k)) &
    2101                               *(paprs(i,k)-paprs(i,k+1))/RG
    2102          ENDDO
    2103          ENDDO
    2104       ENDIF
    2105 
    2106 ! Calcule de vitesse verticale a partir de flux de masse verticale
    2107       DO k = 1, klev
    2108          DO i = 1, klon
    2109             omega(i,k) = RG*flxmass_w(i,k) / airephy(i)
    2110          END DO
    2111       END DO
    2112       if (prt_level.ge.1) write(lunout,*) 'omega(igout, :) = ', &
    2113            omega(igout, :)
    2114 
    2115       IF (iflag_con.EQ.1) THEN
    2116         abort_message ='reactiver le call conlmd dans physiq.F'
    2117         CALL abort_gcm (modname,abort_message,1)
    2118 !     CALL conlmd (dtime, paprs, pplay, t_seri, q_seri, conv_q,
    2119 !    .             d_t_con, d_q_con,
    2120 !    .             rain_con, snow_con, ibas_con, itop_con)
    2121       ELSE IF (iflag_con.EQ.2) THEN
    2122       CALL conflx(dtime, paprs, pplay, t_seri, q_seri, &
    2123                   conv_t, conv_q, -evap, omega, &
    2124                   d_t_con, d_q_con, rain_con, snow_con, &
    2125                   pmfu, pmfd, pen_u, pde_u, pen_d, pde_d, &
    2126                   kcbot, kctop, kdtop, pmflxr, pmflxs)
    2127       d_u_con = 0.
    2128       d_v_con = 0.
    2129 
    2130       WHERE (rain_con < 0.) rain_con = 0.
    2131       WHERE (snow_con < 0.) snow_con = 0.
    2132       DO i = 1, klon
    2133          ibas_con(i) = klev+1 - kcbot(i)
    2134          itop_con(i) = klev+1 - kctop(i)
    2135       ENDDO
    2136       ELSE IF (iflag_con.GE.3) THEN
    2137 ! nb of tracers for the KE convection:
    2138 ! MAF la partie traceurs est faite dans phytrac
    2139 ! on met ntra=1 pour limiter les appels mais on peut
    2140 ! supprimer les calculs / ftra.
    2141               ntra = 1
    2142 
    2143 !=====================================================================================
    2144 !ajout pour la parametrisation des poches froides:
    2145 !calcul de t_wake et t_undi: si pas de poches froides, t_wake=t_undi=t_seri
    2146       do k=1,klev
    2147             do i=1,klon
    2148              if (iflag_wake>=1) then
    2149              t_wake(i,k) = t_seri(i,k) &
    2150                  +(1-wake_s(i))*wake_deltat(i,k)
    2151              q_wake(i,k) = q_seri(i,k) &
    2152                  +(1-wake_s(i))*wake_deltaq(i,k)
    2153              t_undi(i,k) = t_seri(i,k) &
    2154                  -wake_s(i)*wake_deltat(i,k)
    2155              q_undi(i,k) = q_seri(i,k) &
    2156                  -wake_s(i)*wake_deltaq(i,k)
    2157              else
    2158              t_wake(i,k) = t_seri(i,k)
    2159              q_wake(i,k) = q_seri(i,k)
    2160              t_undi(i,k) = t_seri(i,k)
    2161              q_undi(i,k) = q_seri(i,k)
    2162              endif
    2163             enddo
    2164          enddo
    2165      
    2166 !c--   Calcul de l'energie disponible ALE (J/kg) et de la puissance disponible ALP (W/m2)
    2167 !c--    pour le soulevement des particules dans le modele convectif
    2168 !
    2169       do i = 1,klon
     2068        ENDIF
     2069        zqsat(i,k)=zx_qs
     2070     ENDDO
     2071  ENDDO
     2072
     2073  if (prt_level.ge.1) then
     2074     write(lunout,*) 'L   qsat (g/kg) avant clouds_gno'
     2075     write(lunout,'(i4,f15.4)') (k,1000.*zqsat(igout,k),k=1,klev)
     2076  endif
     2077  !
     2078  ! Appeler la convection (au choix)
     2079  !
     2080  DO k = 1, klev
     2081     DO i = 1, klon
     2082        conv_q(i,k) = d_q_dyn(i,k)  &
     2083             + d_q_vdf(i,k)/dtime
     2084        conv_t(i,k) = d_t_dyn(i,k)  &
     2085             + d_t_vdf(i,k)/dtime
     2086     ENDDO
     2087  ENDDO
     2088  IF (check) THEN
     2089     za = qcheck(klon,klev,paprs,q_seri,ql_seri,airephy)
     2090     WRITE(lunout,*) "avantcon=", za
     2091  ENDIF
     2092  zx_ajustq = .FALSE.
     2093  IF (iflag_con.EQ.2) zx_ajustq=.TRUE.
     2094  IF (zx_ajustq) THEN
     2095     DO i = 1, klon
     2096        z_avant(i) = 0.0
     2097     ENDDO
     2098     DO k = 1, klev
     2099        DO i = 1, klon
     2100           z_avant(i) = z_avant(i) + (q_seri(i,k)+ql_seri(i,k)) &
     2101                *(paprs(i,k)-paprs(i,k+1))/RG
     2102        ENDDO
     2103     ENDDO
     2104  ENDIF
     2105
     2106  ! Calcule de vitesse verticale a partir de flux de masse verticale
     2107  DO k = 1, klev
     2108     DO i = 1, klon
     2109        omega(i,k) = RG*flxmass_w(i,k) / airephy(i)
     2110     END DO
     2111  END DO
     2112  if (prt_level.ge.1) write(lunout,*) 'omega(igout, :) = ', &
     2113       omega(igout, :)
     2114
     2115  IF (iflag_con.EQ.1) THEN
     2116     abort_message ='reactiver le call conlmd dans physiq.F'
     2117     CALL abort_gcm (modname,abort_message,1)
     2118     !     CALL conlmd (dtime, paprs, pplay, t_seri, q_seri, conv_q,
     2119     !    .             d_t_con, d_q_con,
     2120     !    .             rain_con, snow_con, ibas_con, itop_con)
     2121  ELSE IF (iflag_con.EQ.2) THEN
     2122     CALL conflx(dtime, paprs, pplay, t_seri, q_seri, &
     2123          conv_t, conv_q, -evap, omega, &
     2124          d_t_con, d_q_con, rain_con, snow_con, &
     2125          pmfu, pmfd, pen_u, pde_u, pen_d, pde_d, &
     2126          kcbot, kctop, kdtop, pmflxr, pmflxs)
     2127     d_u_con = 0.
     2128     d_v_con = 0.
     2129
     2130     WHERE (rain_con < 0.) rain_con = 0.
     2131     WHERE (snow_con < 0.) snow_con = 0.
     2132     DO i = 1, klon
     2133        ibas_con(i) = klev+1 - kcbot(i)
     2134        itop_con(i) = klev+1 - kctop(i)
     2135     ENDDO
     2136  ELSE IF (iflag_con.GE.3) THEN
     2137     ! nb of tracers for the KE convection:
     2138     ! MAF la partie traceurs est faite dans phytrac
     2139     ! on met ntra=1 pour limiter les appels mais on peut
     2140     ! supprimer les calculs / ftra.
     2141     ntra = 1
     2142
     2143     !=====================================================================================
     2144     !ajout pour la parametrisation des poches froides:
     2145     !calcul de t_wake et t_undi: si pas de poches froides, t_wake=t_undi=t_seri
     2146     do k=1,klev
     2147        do i=1,klon
     2148           if (iflag_wake>=1) then
     2149              t_wake(i,k) = t_seri(i,k) &
     2150                   +(1-wake_s(i))*wake_deltat(i,k)
     2151              q_wake(i,k) = q_seri(i,k) &
     2152                   +(1-wake_s(i))*wake_deltaq(i,k)
     2153              t_undi(i,k) = t_seri(i,k) &
     2154                   -wake_s(i)*wake_deltat(i,k)
     2155              q_undi(i,k) = q_seri(i,k) &
     2156                   -wake_s(i)*wake_deltaq(i,k)
     2157           else
     2158              t_wake(i,k) = t_seri(i,k)
     2159              q_wake(i,k) = q_seri(i,k)
     2160              t_undi(i,k) = t_seri(i,k)
     2161              q_undi(i,k) = q_seri(i,k)
     2162           endif
     2163        enddo
     2164     enddo
     2165
     2166     !c--   Calcul de l'energie disponible ALE (J/kg) et de la puissance disponible ALP (W/m2)
     2167     !c--    pour le soulevement des particules dans le modele convectif
     2168     !
     2169     do i = 1,klon
    21702170        ALE(i) = 0.
    21712171        ALP(i) = 0.
    2172       enddo
    2173 !
    2174 !calcul de ale_wake et alp_wake
    2175        if (iflag_wake>=1) then
    2176          if (itap .le. it_wape_prescr) then
    2177           do i = 1,klon
    2178            ale_wake(i) = wape_prescr
    2179            alp_wake(i) = fip_prescr
    2180           enddo
    2181          else
    2182           do i = 1,klon
    2183 !jyg  ALE=WAPE au lieu de ALE = 1/2 Cstar**2
    2184 !cc           ale_wake(i) = 0.5*wake_cstar(i)**2
    2185            ale_wake(i) = wake_pe(i)
    2186            alp_wake(i) = wake_fip(i)
    2187           enddo
    2188          endif
    2189        else
    2190          do i = 1,klon
     2172     enddo
     2173     !
     2174     !calcul de ale_wake et alp_wake
     2175     if (iflag_wake>=1) then
     2176        if (itap .le. it_wape_prescr) then
     2177           do i = 1,klon
     2178              ale_wake(i) = wape_prescr
     2179              alp_wake(i) = fip_prescr
     2180           enddo
     2181        else
     2182           do i = 1,klon
     2183              !jyg  ALE=WAPE au lieu de ALE = 1/2 Cstar**2
     2184              !cc           ale_wake(i) = 0.5*wake_cstar(i)**2
     2185              ale_wake(i) = wake_pe(i)
     2186              alp_wake(i) = wake_fip(i)
     2187           enddo
     2188        endif
     2189     else
     2190        do i = 1,klon
    21912191           ale_wake(i) = 0.
    21922192           alp_wake(i) = 0.
    2193          enddo
    2194        endif
    2195 !combinaison avec ale et alp de couche limite: constantes si pas de couplage, valeurs calculees
    2196 !dans le thermique sinon
    2197        if (iflag_coupl.eq.0) then
    2198           if (debut.and.prt_level.gt.9) &
    2199                            WRITE(lunout,*)'ALE et ALP imposes'
    2200           do i = 1,klon
    2201 !on ne couple que ale
    2202 !           ALE(i) = max(ale_wake(i),Ale_bl(i))
    2203             ALE(i) = max(ale_wake(i),ale_bl_prescr)
    2204 !on ne couple que alp
    2205 !           ALP(i) = alp_wake(i) + Alp_bl(i)
    2206             ALP(i) = alp_wake(i) + alp_bl_prescr
    2207           enddo
    2208        else
    2209          IF(prt_level>9)WRITE(lunout,*)'ALE et ALP couples au thermique'
    2210 !         do i = 1,klon
    2211 !             ALE(i) = max(ale_wake(i),Ale_bl(i))
    2212 ! avant        ALP(i) = alp_wake(i) + Alp_bl(i)
    2213 !             ALP(i) = alp_wake(i) + Alp_bl(i) + alp_offset ! modif sb
    2214 !         write(20,*)'ALE',ALE(i),Ale_bl(i),ale_wake(i)
    2215 !         write(21,*)'ALP',ALP(i),Alp_bl(i),alp_wake(i)
    2216 !         enddo
     2193        enddo
     2194     endif
     2195     !combinaison avec ale et alp de couche limite: constantes si pas de couplage, valeurs calculees
     2196     !dans le thermique sinon
     2197     if (iflag_coupl.eq.0) then
     2198        if (debut.and.prt_level.gt.9) &
     2199             WRITE(lunout,*)'ALE et ALP imposes'
     2200        do i = 1,klon
     2201           !on ne couple que ale
     2202           !           ALE(i) = max(ale_wake(i),Ale_bl(i))
     2203           ALE(i) = max(ale_wake(i),ale_bl_prescr)
     2204           !on ne couple que alp
     2205           !           ALP(i) = alp_wake(i) + Alp_bl(i)
     2206           ALP(i) = alp_wake(i) + alp_bl_prescr
     2207        enddo
     2208     else
     2209        IF(prt_level>9)WRITE(lunout,*)'ALE et ALP couples au thermique'
     2210        !         do i = 1,klon
     2211        !             ALE(i) = max(ale_wake(i),Ale_bl(i))
     2212        ! avant        ALP(i) = alp_wake(i) + Alp_bl(i)
     2213        !             ALP(i) = alp_wake(i) + Alp_bl(i) + alp_offset ! modif sb
     2214        !         write(20,*)'ALE',ALE(i),Ale_bl(i),ale_wake(i)
     2215        !         write(21,*)'ALP',ALP(i),Alp_bl(i),alp_wake(i)
     2216        !         enddo
    22172217
    22182218!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
    2219 ! Modif FH 2010/04/27. Sans doute temporaire.
    2220 ! Deux options pour le alp_offset : constant si >?? 0 ou proportionnel ??a
    2221 ! w si <0
     2219        ! Modif FH 2010/04/27. Sans doute temporaire.
     2220        ! Deux options pour le alp_offset : constant si >?? 0 ou proportionnel ??a
     2221        ! w si <0
    22222222!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
    2223        do i = 1,klon
    2224           ALE(i) = max(ale_wake(i),Ale_bl(i))
    2225 !cc nrlmd le 10/04/2012----------Stochastic triggering--------------
    2226           if (iflag_trig_bl.ge.1) then
    2227              ALE(i) = max(ale_wake(i),Ale_bl_trig(i))
    2228           endif
    2229 !cc fin nrlmd le 10/04/2012
    2230           if (alp_offset>=0.) then
    2231             ALP(i) = alp_wake(i) + Alp_bl(i) + alp_offset ! modif sb
    2232           else
    2233             ALP(i)=alp_wake(i)+Alp_bl(i)+alp_offset*min(omega(i,6),0.)
    2234             if (alp(i)<0.) then
    2235                print*,'ALP ',alp(i),alp_wake(i) &
    2236                ,Alp_bl(i),alp_offset*min(omega(i,6),0.)
    2237             endif
    2238           endif
    2239        enddo
     2223        do i = 1,klon
     2224           ALE(i) = max(ale_wake(i),Ale_bl(i))
     2225           !cc nrlmd le 10/04/2012----------Stochastic triggering--------------
     2226           if (iflag_trig_bl.ge.1) then
     2227              ALE(i) = max(ale_wake(i),Ale_bl_trig(i))
     2228           endif
     2229           !cc fin nrlmd le 10/04/2012
     2230           if (alp_offset>=0.) then
     2231              ALP(i) = alp_wake(i) + Alp_bl(i) + alp_offset ! modif sb
     2232           else
     2233              ALP(i)=alp_wake(i)+Alp_bl(i)+alp_offset*min(omega(i,6),0.)
     2234              if (alp(i)<0.) then
     2235                 print*,'ALP ',alp(i),alp_wake(i) &
     2236                      ,Alp_bl(i),alp_offset*min(omega(i,6),0.)
     2237              endif
     2238           endif
     2239        enddo
    22402240!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
    22412241
    2242        endif
    2243        do i=1,klon
    2244           if (alp(i)>alp_max) then
    2245              IF(prt_level>9)WRITE(lunout,*)                             &
    2246             'WARNING SUPER ALP (seuil=',alp_max, &
    2247              '): i, alp, alp_wake,ale',i,alp(i),alp_wake(i),ale(i)
    2248              alp(i)=alp_max
    2249           endif
    2250           if (ale(i)>ale_max) then
    2251              IF(prt_level>9)WRITE(lunout,*)                             &
    2252             'WARNING SUPER ALE (seuil=',ale_max, &
    2253              '): i, alp, alp_wake,ale',i,ale(i),ale_wake(i),alp(i)
    2254              ale(i)=ale_max
    2255           endif
    2256        enddo
    2257 
    2258 !fin calcul ale et alp
    2259 !=================================================================================================
    2260 
    2261 
    2262 ! sb, oct02:
    2263 ! Schema de convection modularise et vectorise:
    2264 ! (driver commun aux versions 3 et 4)
    2265 !
    2266           IF (ok_cvl) THEN ! new driver for convectL
    2267 
    2268              IF (type_trac == 'repr') THEN
    2269                 nbtr_tmp=ntra
    2270              ELSE
    2271                 nbtr_tmp=nbtr
    2272              END IF
    2273 !jyg   iflag_con est dans clesphys
    2274 !c          CALL concvl (iflag_con,iflag_clos,
    2275           CALL concvl (iflag_clos, &
    2276               dtime,paprs,pplay,t_undi,q_undi, &
    2277               t_wake,q_wake,wake_s, &
    2278               u_seri,v_seri,tr_seri,nbtr_tmp, &
    2279               ALE,ALP, &
    2280               sig1,w01, &
    2281               d_t_con,d_q_con,d_u_con,d_v_con,d_tr, &
    2282               rain_con, snow_con, ibas_con, itop_con, sigd, &
    2283               ema_cbmf,plcl,plfc,wbeff,upwd,dnwd,dnwd0, &
    2284               Ma,mip,Vprecip,cape,cin,tvp,Tconv,iflagctrl, &
    2285               pbase,bbase,dtvpdt1,dtvpdq1,dplcldt,dplcldr,qcondc,wd, &
    2286 ! RomP >>>
    2287 !!     .        pmflxr,pmflxs,da,phi,mp,
    2288 !!     .        ftd,fqd,lalim_conv,wght_th)
    2289               pmflxr,pmflxs,da,phi,mp,phi2,d1a,dam,sij,clw,elij, &
    2290               ftd,fqd,lalim_conv,wght_th, &
    2291               ev, ep,epmlmMm,eplaMm, &
    2292               wdtrainA,wdtrainM)
    2293 ! RomP <<<
    2294 
    2295 !IM begin
    2296 !       print*,'physiq: cin pbase dnwd0 ftd fqd ',cin(1),pbase(1),
    2297 !    .dnwd0(1,1),ftd(1,1),fqd(1,1)
    2298 !IM end
    2299 !IM cf. FH
    2300               clwcon0=qcondc
    2301               pmfu(:,:)=upwd(:,:)+dnwd(:,:)
    2302 
    2303               do i = 1, klon
    2304                 if (iflagctrl(i).le.1) itau_con(i)=itau_con(i)+1
    2305               enddo
    2306 
    2307           ELSE ! ok_cvl
    2308 
    2309 ! MAF conema3 ne contient pas les traceurs
    2310           CALL conema3 (dtime, &
    2311               paprs,pplay,t_seri,q_seri, &
    2312               u_seri,v_seri,tr_seri,ntra, &
    2313               sig1,w01, &
    2314               d_t_con,d_q_con,d_u_con,d_v_con,d_tr, &
    2315               rain_con, snow_con, ibas_con, itop_con, &
    2316               upwd,dnwd,dnwd0,bas,top, &
    2317               Ma,cape,tvp,rflag, &
    2318               pbase &
    2319               ,bbase,dtvpdt1,dtvpdq1,dplcldt,dplcldr &
    2320               ,clwcon0)
    2321 
    2322           ENDIF ! ok_cvl
    2323 
    2324 !
    2325 ! Correction precip
    2326           rain_con = rain_con * cvl_corr
    2327           snow_con = snow_con * cvl_corr
    2328 !
    2329 
    2330            IF (.NOT. ok_gust) THEN
    2331            do i = 1, klon
    2332             wd(i)=0.0
    2333            enddo
     2242     endif
     2243     do i=1,klon
     2244        if (alp(i)>alp_max) then
     2245           IF(prt_level>9)WRITE(lunout,*)                             &
     2246                'WARNING SUPER ALP (seuil=',alp_max, &
     2247                '): i, alp, alp_wake,ale',i,alp(i),alp_wake(i),ale(i)
     2248           alp(i)=alp_max
     2249        endif
     2250        if (ale(i)>ale_max) then
     2251           IF(prt_level>9)WRITE(lunout,*)                             &
     2252                'WARNING SUPER ALE (seuil=',ale_max, &
     2253                '): i, alp, alp_wake,ale',i,ale(i),ale_wake(i),alp(i)
     2254           ale(i)=ale_max
     2255        endif
     2256     enddo
     2257
     2258     !fin calcul ale et alp
     2259     !=================================================================================================
     2260
     2261
     2262     ! sb, oct02:
     2263     ! Schema de convection modularise et vectorise:
     2264     ! (driver commun aux versions 3 et 4)
     2265     !
     2266     IF (ok_cvl) THEN ! new driver for convectL
     2267
     2268        IF (type_trac == 'repr') THEN
     2269           nbtr_tmp=ntra
     2270        ELSE
     2271           nbtr_tmp=nbtr
     2272        END IF
     2273        !jyg   iflag_con est dans clesphys
     2274        !c          CALL concvl (iflag_con,iflag_clos,
     2275        CALL concvl (iflag_clos, &
     2276             dtime,paprs,pplay,t_undi,q_undi, &
     2277             t_wake,q_wake,wake_s, &
     2278             u_seri,v_seri,tr_seri,nbtr_tmp, &
     2279             ALE,ALP, &
     2280             sig1,w01, &
     2281             d_t_con,d_q_con,d_u_con,d_v_con,d_tr, &
     2282             rain_con, snow_con, ibas_con, itop_con, sigd, &
     2283             ema_cbmf,plcl,plfc,wbeff,upwd,dnwd,dnwd0, &
     2284             Ma,mip,Vprecip,cape,cin,tvp,Tconv,iflagctrl, &
     2285             pbase,bbase,dtvpdt1,dtvpdq1,dplcldt,dplcldr,qcondc,wd, &
     2286             ! RomP >>>
     2287             !!     .        pmflxr,pmflxs,da,phi,mp,
     2288             !!     .        ftd,fqd,lalim_conv,wght_th)
     2289             pmflxr,pmflxs,da,phi,mp,phi2,d1a,dam,sij,clw,elij, &
     2290             ftd,fqd,lalim_conv,wght_th, &
     2291             ev, ep,epmlmMm,eplaMm, &
     2292             wdtrainA,wdtrainM)
     2293        ! RomP <<<
     2294
     2295        !IM begin
     2296        !       print*,'physiq: cin pbase dnwd0 ftd fqd ',cin(1),pbase(1),
     2297        !    .dnwd0(1,1),ftd(1,1),fqd(1,1)
     2298        !IM end
     2299        !IM cf. FH
     2300        clwcon0=qcondc
     2301        pmfu(:,:)=upwd(:,:)+dnwd(:,:)
     2302
     2303        do i = 1, klon
     2304           if (iflagctrl(i).le.1) itau_con(i)=itau_con(i)+1
     2305        enddo
     2306
     2307     ELSE ! ok_cvl
     2308
     2309        ! MAF conema3 ne contient pas les traceurs
     2310        CALL conema3 (dtime, &
     2311             paprs,pplay,t_seri,q_seri, &
     2312             u_seri,v_seri,tr_seri,ntra, &
     2313             sig1,w01, &
     2314             d_t_con,d_q_con,d_u_con,d_v_con,d_tr, &
     2315             rain_con, snow_con, ibas_con, itop_con, &
     2316             upwd,dnwd,dnwd0,bas,top, &
     2317             Ma,cape,tvp,rflag, &
     2318             pbase &
     2319             ,bbase,dtvpdt1,dtvpdq1,dplcldt,dplcldr &
     2320             ,clwcon0)
     2321
     2322     ENDIF ! ok_cvl
     2323
     2324     !
     2325     ! Correction precip
     2326     rain_con = rain_con * cvl_corr
     2327     snow_con = snow_con * cvl_corr
     2328     !
     2329
     2330     IF (.NOT. ok_gust) THEN
     2331        do i = 1, klon
     2332           wd(i)=0.0
     2333        enddo
     2334     ENDIF
     2335
     2336     ! =================================================================== c
     2337     ! Calcul des proprietes des nuages convectifs
     2338     !
     2339
     2340     !   calcul des proprietes des nuages convectifs
     2341     clwcon0(:,:)=fact_cldcon*clwcon0(:,:)
     2342     call clouds_gno &
     2343          (klon,klev,q_seri,zqsat,clwcon0,ptconv,ratqsc,rnebcon0)
     2344
     2345     ! =================================================================== c
     2346
     2347     DO i = 1, klon
     2348        itop_con(i) = min(max(itop_con(i),1),klev)
     2349        ibas_con(i) = min(max(ibas_con(i),1),itop_con(i))
     2350     ENDDO
     2351
     2352     DO i = 1, klon
     2353        ema_pcb(i)  = paprs(i,ibas_con(i))
     2354     ENDDO
     2355     DO i = 1, klon
     2356        ! L'idicage de itop_con peut cacher un pb potentiel
     2357        ! FH sous la dictee de JYG, CR
     2358        ema_pct(i)  = paprs(i,itop_con(i)+1)
     2359
     2360        if (itop_con(i).gt.klev-3) then
     2361           if(prt_level >= 9) then
     2362              write(lunout,*)'La convection monte trop haut '
     2363              write(lunout,*)'itop_con(,',i,',)=',itop_con(i)
     2364           endif
     2365        endif
     2366     ENDDO
     2367  ELSE IF (iflag_con.eq.0) THEN
     2368     write(lunout,*) 'On n appelle pas la convection'
     2369     clwcon0=0.
     2370     rnebcon0=0.
     2371     d_t_con=0.
     2372     d_q_con=0.
     2373     d_u_con=0.
     2374     d_v_con=0.
     2375     rain_con=0.
     2376     snow_con=0.
     2377     bas=1
     2378     top=1
     2379  ELSE
     2380     WRITE(lunout,*) "iflag_con non-prevu", iflag_con
     2381     CALL abort
     2382  ENDIF
     2383
     2384  !     CALL homogene(paprs, q_seri, d_q_con, u_seri,v_seri,
     2385  !    .              d_u_con, d_v_con)
     2386
     2387  !-----------------------------------------------------------------------------------------
     2388  ! ajout des tendances de la diffusion turbulente
     2389  CALL add_phys_tend(d_u_con,d_v_con,d_t_con,d_q_con,dql0,'con')
     2390  !-----------------------------------------------------------------------------------------
     2391
     2392  if (mydebug) then
     2393     call writefield_phy('u_seri',u_seri,llm)
     2394     call writefield_phy('v_seri',v_seri,llm)
     2395     call writefield_phy('t_seri',t_seri,llm)
     2396     call writefield_phy('q_seri',q_seri,llm)
     2397  endif
     2398
     2399  !IM
     2400  IF (ip_ebil_phy.ge.2) THEN
     2401     ztit='after convect'
     2402     CALL diagetpq(airephy,ztit,ip_ebil_phy,2,2,dtime &
     2403          , t_seri,q_seri,ql_seri,qs_seri,u_seri,v_seri,paprs,pplay &
     2404          , d_h_vcol, d_qt, d_qw, d_ql, d_qs, d_ec)
     2405     call diagphy(airephy,ztit,ip_ebil_phy &
     2406          , zero_v, zero_v, zero_v, zero_v, zero_v &
     2407          , zero_v, rain_con, snow_con, ztsol &
     2408          , d_h_vcol, d_qt, d_ec &
     2409          , fs_bound, fq_bound )
     2410  END IF
     2411  !
     2412  IF (check) THEN
     2413     za = qcheck(klon,klev,paprs,q_seri,ql_seri,airephy)
     2414     WRITE(lunout,*)"aprescon=", za
     2415     zx_t = 0.0
     2416     za = 0.0
     2417     DO i = 1, klon
     2418        za = za + airephy(i)/REAL(klon)
     2419        zx_t = zx_t + (rain_con(i)+ &
     2420             snow_con(i))*airephy(i)/REAL(klon)
     2421     ENDDO
     2422     zx_t = zx_t/za*dtime
     2423     WRITE(lunout,*)"Precip=", zx_t
     2424  ENDIF
     2425  IF (zx_ajustq) THEN
     2426     DO i = 1, klon
     2427        z_apres(i) = 0.0
     2428     ENDDO
     2429     DO k = 1, klev
     2430        DO i = 1, klon
     2431           z_apres(i) = z_apres(i) + (q_seri(i,k)+ql_seri(i,k)) &
     2432                *(paprs(i,k)-paprs(i,k+1))/RG
     2433        ENDDO
     2434     ENDDO
     2435     DO i = 1, klon
     2436        z_factor(i) = (z_avant(i)-(rain_con(i)+snow_con(i))*dtime) &
     2437             /z_apres(i)
     2438     ENDDO
     2439     DO k = 1, klev
     2440        DO i = 1, klon
     2441           IF (z_factor(i).GT.(1.0+1.0E-08) .OR. &
     2442                z_factor(i).LT.(1.0-1.0E-08)) THEN
     2443              q_seri(i,k) = q_seri(i,k) * z_factor(i)
    23342444           ENDIF
    2335 
    2336 ! =================================================================== c
    2337 ! Calcul des proprietes des nuages convectifs
    2338 !
    2339 
    2340 !   calcul des proprietes des nuages convectifs
    2341              clwcon0(:,:)=fact_cldcon*clwcon0(:,:)
    2342              call clouds_gno &
    2343              (klon,klev,q_seri,zqsat,clwcon0,ptconv,ratqsc,rnebcon0)
    2344 
    2345 ! =================================================================== c
    2346 
    2347           DO i = 1, klon
    2348            itop_con(i) = min(max(itop_con(i),1),klev)
    2349            ibas_con(i) = min(max(ibas_con(i),1),itop_con(i))
    2350           ENDDO
    2351 
    2352           DO i = 1, klon
    2353             ema_pcb(i)  = paprs(i,ibas_con(i))
    2354           ENDDO
    2355           DO i = 1, klon
    2356 ! L'idicage de itop_con peut cacher un pb potentiel
    2357 ! FH sous la dictee de JYG, CR
    2358             ema_pct(i)  = paprs(i,itop_con(i)+1)
    2359 
    2360             if (itop_con(i).gt.klev-3) then
    2361               if(prt_level >= 9) then
    2362                 write(lunout,*)'La convection monte trop haut '
    2363                 write(lunout,*)'itop_con(,',i,',)=',itop_con(i)
    2364               endif
    2365             endif
    2366           ENDDO     
    2367       ELSE IF (iflag_con.eq.0) THEN
    2368           write(lunout,*) 'On n appelle pas la convection'
    2369           clwcon0=0.
    2370           rnebcon0=0.
    2371           d_t_con=0.
    2372           d_q_con=0.
    2373           d_u_con=0.
    2374           d_v_con=0.
    2375           rain_con=0.
    2376           snow_con=0.
    2377           bas=1
    2378           top=1
    2379       ELSE
    2380           WRITE(lunout,*) "iflag_con non-prevu", iflag_con
    2381           CALL abort
    2382       ENDIF
    2383 
    2384 !     CALL homogene(paprs, q_seri, d_q_con, u_seri,v_seri,
    2385 !    .              d_u_con, d_v_con)
    2386 
    2387 !-----------------------------------------------------------------------------------------
    2388 ! ajout des tendances de la diffusion turbulente
    2389       CALL add_phys_tend(d_u_con,d_v_con,d_t_con,d_q_con,dql0,'con')
    2390 !-----------------------------------------------------------------------------------------
    2391 
    2392       if (mydebug) then
    2393         call writefield_phy('u_seri',u_seri,llm)
    2394         call writefield_phy('v_seri',v_seri,llm)
    2395         call writefield_phy('t_seri',t_seri,llm)
    2396         call writefield_phy('q_seri',q_seri,llm)
    2397       endif
    2398 
    2399 !IM
    2400       IF (ip_ebil_phy.ge.2) THEN
    2401         ztit='after convect'
    2402         CALL diagetpq(airephy,ztit,ip_ebil_phy,2,2,dtime &
    2403             , t_seri,q_seri,ql_seri,qs_seri,u_seri,v_seri,paprs,pplay &
    2404             , d_h_vcol, d_qt, d_qw, d_ql, d_qs, d_ec)
    2405          call diagphy(airephy,ztit,ip_ebil_phy &
    2406             , zero_v, zero_v, zero_v, zero_v, zero_v &
    2407             , zero_v, rain_con, snow_con, ztsol &
    2408             , d_h_vcol, d_qt, d_ec &
    2409             , fs_bound, fq_bound )
    2410       END IF
    2411 !
    2412       IF (check) THEN
    2413           za = qcheck(klon,klev,paprs,q_seri,ql_seri,airephy)
    2414           WRITE(lunout,*)"aprescon=", za
    2415           zx_t = 0.0
    2416           za = 0.0
    2417           DO i = 1, klon
    2418             za = za + airephy(i)/REAL(klon)
    2419             zx_t = zx_t + (rain_con(i)+ &
    2420                          snow_con(i))*airephy(i)/REAL(klon)
    2421           ENDDO
    2422           zx_t = zx_t/za*dtime
    2423           WRITE(lunout,*)"Precip=", zx_t
    2424       ENDIF
    2425       IF (zx_ajustq) THEN
    2426           DO i = 1, klon
    2427             z_apres(i) = 0.0
    2428           ENDDO
    2429           DO k = 1, klev
    2430             DO i = 1, klon
    2431               z_apres(i) = z_apres(i) + (q_seri(i,k)+ql_seri(i,k)) &
    2432                   *(paprs(i,k)-paprs(i,k+1))/RG
    2433             ENDDO
    2434           ENDDO
    2435           DO i = 1, klon
    2436             z_factor(i) = (z_avant(i)-(rain_con(i)+snow_con(i))*dtime) &
    2437                 /z_apres(i)
    2438           ENDDO
    2439           DO k = 1, klev
    2440             DO i = 1, klon
    2441               IF (z_factor(i).GT.(1.0+1.0E-08) .OR. &
    2442                   z_factor(i).LT.(1.0-1.0E-08)) THEN
    2443                   q_seri(i,k) = q_seri(i,k) * z_factor(i)
    2444               ENDIF
    2445             ENDDO
    2446           ENDDO
    2447       ENDIF
    2448       zx_ajustq=.FALSE.
    2449 
    2450 !
    2451 !=============================================================================
    2452 !RR:Evolution de la poche froide: on ne fait pas de separation wake/env
    2453 !pour la couche limite diffuse pour l instant
    2454 !
    2455       if (iflag_wake>=1) then
    2456       DO k=1,klev
     2445        ENDDO
     2446     ENDDO
     2447  ENDIF
     2448  zx_ajustq=.FALSE.
     2449
     2450  !
     2451  !=============================================================================
     2452  !RR:Evolution de la poche froide: on ne fait pas de separation wake/env
     2453  !pour la couche limite diffuse pour l instant
     2454  !
     2455  if (iflag_wake>=1) then
     2456     DO k=1,klev
    24572457        DO i=1,klon
    2458           dt_dwn(i,k)  = ftd(i,k)
    2459           wdt_PBL(i,k) = 0.
    2460           dq_dwn(i,k)  = fqd(i,k)
    2461           wdq_PBL(i,k) = 0.
    2462           M_dwn(i,k)   = dnwd0(i,k)
    2463           M_up(i,k)    = upwd(i,k)
    2464           dt_a(i,k)    = d_t_con(i,k)/dtime - ftd(i,k)
    2465           udt_PBL(i,k) = 0.
    2466           dq_a(i,k)    = d_q_con(i,k)/dtime - fqd(i,k)
    2467           udq_PBL(i,k) = 0.
     2458           dt_dwn(i,k)  = ftd(i,k)
     2459           wdt_PBL(i,k) = 0.
     2460           dq_dwn(i,k)  = fqd(i,k)
     2461           wdq_PBL(i,k) = 0.
     2462           M_dwn(i,k)   = dnwd0(i,k)
     2463           M_up(i,k)    = upwd(i,k)
     2464           dt_a(i,k)    = d_t_con(i,k)/dtime - ftd(i,k)
     2465           udt_PBL(i,k) = 0.
     2466           dq_a(i,k)    = d_q_con(i,k)/dtime - fqd(i,k)
     2467           udq_PBL(i,k) = 0.
    24682468        ENDDO
    2469       ENDDO
    2470 
    2471       if (iflag_wake==2) then
     2469     ENDDO
     2470
     2471     if (iflag_wake==2) then
    24722472        ok_wk_lsp(:)=max(sign(1.,wake_s(:)-wake_s_min_lsp),0.)
    24732473        DO k = 1,klev
    2474          dt_dwn(:,k)= dt_dwn(:,k)+ &
    2475                   ok_wk_lsp(:)*(d_t_eva(:,k)+d_t_lsc(:,k))/dtime
    2476          dq_dwn(:,k)= dq_dwn(:,k)+ &
    2477                   ok_wk_lsp(:)*(d_q_eva(:,k)+d_q_lsc(:,k))/dtime
     2474           dt_dwn(:,k)= dt_dwn(:,k)+ &
     2475                ok_wk_lsp(:)*(d_t_eva(:,k)+d_t_lsc(:,k))/dtime
     2476           dq_dwn(:,k)= dq_dwn(:,k)+ &
     2477                ok_wk_lsp(:)*(d_q_eva(:,k)+d_q_lsc(:,k))/dtime
    24782478        ENDDO
    2479       endif
    2480 !
    2481 !calcul caracteristiques de la poche froide
    2482       call calWAKE (paprs,pplay,dtime &
    2483                      ,t_seri,q_seri,omega &
    2484                      ,dt_dwn,dq_dwn,M_dwn,M_up &
    2485                      ,dt_a,dq_a,sigd &
    2486                      ,wdt_PBL,wdq_PBL &
    2487                      ,udt_PBL,udq_PBL &
    2488                      ,wake_deltat,wake_deltaq,wake_dth &
    2489                      ,wake_h,wake_s,wake_dens &
    2490                      ,wake_pe,wake_fip,wake_gfl &
    2491                      ,dt_wake,dq_wake &
    2492                      ,wake_k, t_undi,q_undi &
    2493                      ,wake_omgbdth,wake_dp_omgb &
    2494                      ,wake_dtKE,wake_dqKE &
    2495                      ,wake_dtPBL,wake_dqPBL &
    2496                      ,wake_omg,wake_dp_deltomg &
    2497                      ,wake_spread,wake_Cstar,wake_d_deltat_gw &
    2498                      ,wake_ddeltat,wake_ddeltaq)
    2499 !
    2500 !-----------------------------------------------------------------------------------------
    2501 ! ajout des tendances des poches froides
    2502 ! Faire rapidement disparaitre l'ancien dt_wake pour garder un d_t_wake
    2503 ! coherent avec les autres d_t_...
    2504       d_t_wake(:,:)=dt_wake(:,:)*dtime
    2505       d_q_wake(:,:)=dq_wake(:,:)*dtime
    2506       CALL add_phys_tend(du0,dv0,d_t_wake,d_q_wake,dql0,'wake')
    2507 !-----------------------------------------------------------------------------------------
    2508 
    2509       endif
    2510 !
    2511 !===================================================================
    2512 !JYG
    2513       IF (ip_ebil_phy.ge.2) THEN
    2514         ztit='after wake'
    2515         CALL diagetpq(airephy,ztit,ip_ebil_phy,2,2,dtime &
    2516             , t_seri,q_seri,ql_seri,qs_seri,u_seri,v_seri,paprs,pplay &
    2517             , d_h_vcol, d_qt, d_qw, d_ql, d_qs, d_ec)
    2518         call diagphy(airephy,ztit,ip_ebil_phy &
    2519             , zero_v, zero_v, zero_v, zero_v, zero_v &
    2520             , zero_v, zero_v, zero_v, ztsol &
    2521             , d_h_vcol, d_qt, d_ec &
    2522             , fs_bound, fq_bound )
    2523       END IF
    2524 
    2525 !      print*,'apres callwake iflag_cldcon=', iflag_cldcon
    2526 !
    2527 !===================================================================
    2528 ! Convection seche (thermiques ou ajustement)
    2529 !===================================================================
    2530 !
    2531        call stratocu_if(klon,klev,pctsrf,paprs, pplay,t_seri &
     2479     endif
     2480     !
     2481     !calcul caracteristiques de la poche froide
     2482     call calWAKE (paprs,pplay,dtime &
     2483          ,t_seri,q_seri,omega &
     2484          ,dt_dwn,dq_dwn,M_dwn,M_up &
     2485          ,dt_a,dq_a,sigd &
     2486          ,wdt_PBL,wdq_PBL &
     2487          ,udt_PBL,udq_PBL &
     2488          ,wake_deltat,wake_deltaq,wake_dth &
     2489          ,wake_h,wake_s,wake_dens &
     2490          ,wake_pe,wake_fip,wake_gfl &
     2491          ,dt_wake,dq_wake &
     2492          ,wake_k, t_undi,q_undi &
     2493          ,wake_omgbdth,wake_dp_omgb &
     2494          ,wake_dtKE,wake_dqKE &
     2495          ,wake_dtPBL,wake_dqPBL &
     2496          ,wake_omg,wake_dp_deltomg &
     2497          ,wake_spread,wake_Cstar,wake_d_deltat_gw &
     2498          ,wake_ddeltat,wake_ddeltaq)
     2499     !
     2500     !-----------------------------------------------------------------------------------------
     2501     ! ajout des tendances des poches froides
     2502     ! Faire rapidement disparaitre l'ancien dt_wake pour garder un d_t_wake
     2503     ! coherent avec les autres d_t_...
     2504     d_t_wake(:,:)=dt_wake(:,:)*dtime
     2505     d_q_wake(:,:)=dq_wake(:,:)*dtime
     2506     CALL add_phys_tend(du0,dv0,d_t_wake,d_q_wake,dql0,'wake')
     2507     !-----------------------------------------------------------------------------------------
     2508
     2509  endif
     2510  !
     2511  !===================================================================
     2512  !JYG
     2513  IF (ip_ebil_phy.ge.2) THEN
     2514     ztit='after wake'
     2515     CALL diagetpq(airephy,ztit,ip_ebil_phy,2,2,dtime &
     2516          , t_seri,q_seri,ql_seri,qs_seri,u_seri,v_seri,paprs,pplay &
     2517          , d_h_vcol, d_qt, d_qw, d_ql, d_qs, d_ec)
     2518     call diagphy(airephy,ztit,ip_ebil_phy &
     2519          , zero_v, zero_v, zero_v, zero_v, zero_v &
     2520          , zero_v, zero_v, zero_v, ztsol &
     2521          , d_h_vcol, d_qt, d_ec &
     2522          , fs_bound, fq_bound )
     2523  END IF
     2524
     2525  !      print*,'apres callwake iflag_cldcon=', iflag_cldcon
     2526  !
     2527  !===================================================================
     2528  ! Convection seche (thermiques ou ajustement)
     2529  !===================================================================
     2530  !
     2531  call stratocu_if(klon,klev,pctsrf,paprs, pplay,t_seri &
    25322532       ,seuil_inversion,weak_inversion,dthmin)
    25332533
    25342534
    25352535
    2536       d_t_ajsb(:,:)=0.
    2537       d_q_ajsb(:,:)=0.
    2538       d_t_ajs(:,:)=0.
    2539       d_u_ajs(:,:)=0.
    2540       d_v_ajs(:,:)=0.
    2541       d_q_ajs(:,:)=0.
    2542       clwcon0th(:,:)=0.
    2543 !
    2544 !      fm_therm(:,:)=0.
    2545 !      entr_therm(:,:)=0.
    2546 !      detr_therm(:,:)=0.
    2547 !
    2548       IF(prt_level>9)WRITE(lunout,*) &
    2549           'AVANT LA CONVECTION SECHE , iflag_thermals=' &
    2550          ,iflag_thermals,'   nsplit_thermals=',nsplit_thermals
    2551       if(iflag_thermals.lt.0) then
    2552 !  Rien
    2553 !  ====
    2554          IF(prt_level>9)WRITE(lunout,*)'pas de convection'
    2555 
    2556 
    2557       else
    2558 
    2559 !  Thermiques
    2560 !  ==========
    2561          IF(prt_level>9)WRITE(lunout,*)'JUSTE AVANT , iflag_thermals=' &
    2562          ,iflag_thermals,'   nsplit_thermals=',nsplit_thermals
    2563 
    2564 
    2565 !cc nrlmd le 10/04/2012
    2566          DO k=1,klev+1
    2567            DO i=1,klon
     2536  d_t_ajsb(:,:)=0.
     2537  d_q_ajsb(:,:)=0.
     2538  d_t_ajs(:,:)=0.
     2539  d_u_ajs(:,:)=0.
     2540  d_v_ajs(:,:)=0.
     2541  d_q_ajs(:,:)=0.
     2542  clwcon0th(:,:)=0.
     2543  !
     2544  !      fm_therm(:,:)=0.
     2545  !      entr_therm(:,:)=0.
     2546  !      detr_therm(:,:)=0.
     2547  !
     2548  IF(prt_level>9)WRITE(lunout,*) &
     2549       'AVANT LA CONVECTION SECHE , iflag_thermals=' &
     2550       ,iflag_thermals,'   nsplit_thermals=',nsplit_thermals
     2551  if(iflag_thermals.lt.0) then
     2552     !  Rien
     2553     !  ====
     2554     IF(prt_level>9)WRITE(lunout,*)'pas de convection'
     2555
     2556
     2557  else
     2558
     2559     !  Thermiques
     2560     !  ==========
     2561     IF(prt_level>9)WRITE(lunout,*)'JUSTE AVANT , iflag_thermals=' &
     2562          ,iflag_thermals,'   nsplit_thermals=',nsplit_thermals
     2563
     2564
     2565     !cc nrlmd le 10/04/2012
     2566     DO k=1,klev+1
     2567        DO i=1,klon
    25682568           pbl_tke_input(i,k,is_oce)=pbl_tke(i,k,is_oce)
    25692569           pbl_tke_input(i,k,is_ter)=pbl_tke(i,k,is_ter)
    25702570           pbl_tke_input(i,k,is_lic)=pbl_tke(i,k,is_lic)
    25712571           pbl_tke_input(i,k,is_sic)=pbl_tke(i,k,is_sic)
    2572            ENDDO
    2573          ENDDO
    2574 !cc fin nrlmd le 10/04/2012
    2575 
    2576          if (iflag_thermals>=1) then
    2577          call calltherm(pdtphys &
    2578             ,pplay,paprs,pphi,weak_inversion &
    2579             ,u_seri,v_seri,t_seri,q_seri,zqsat,debut &
    2580             ,d_u_ajs,d_v_ajs,d_t_ajs,d_q_ajs &
    2581             ,fm_therm,entr_therm,detr_therm &
    2582             ,zqasc,clwcon0th,lmax_th,ratqscth &
    2583             ,ratqsdiff,zqsatth &
    2584 !on rajoute ale et alp, et les caracteristiques de la couche alim
    2585             ,Ale_bl,Alp_bl,lalim_conv,wght_th, zmax0, f0, zw2,fraca &
    2586             ,ztv,zpspsk,ztla,zthl &
    2587 !cc nrlmd le 10/04/2012
    2588             ,pbl_tke_input,pctsrf,omega,airephy &
    2589             ,zlcl_th,fraca0,w0,w_conv,therm_tke_max0,env_tke_max0 &
    2590             ,n2,s2,ale_bl_stat &
    2591             ,therm_tke_max,env_tke_max &
    2592             ,alp_bl_det,alp_bl_fluct_m,alp_bl_fluct_tke &
    2593             ,alp_bl_conv,alp_bl_stat &
    2594 !cc fin nrlmd le 10/04/2012
    2595             ,zqla,ztva )
    2596 
    2597 !cc nrlmd le 10/04/2012
    2598 !-----------Stochastic triggering-----------
    2599       if (iflag_trig_bl.ge.1) then
    2600 !
     2572        ENDDO
     2573     ENDDO
     2574     !cc fin nrlmd le 10/04/2012
     2575
     2576     if (iflag_thermals>=1) then
     2577        call calltherm(pdtphys &
     2578             ,pplay,paprs,pphi,weak_inversion &
     2579             ,u_seri,v_seri,t_seri,q_seri,zqsat,debut &
     2580             ,d_u_ajs,d_v_ajs,d_t_ajs,d_q_ajs &
     2581             ,fm_therm,entr_therm,detr_therm &
     2582             ,zqasc,clwcon0th,lmax_th,ratqscth &
     2583             ,ratqsdiff,zqsatth &
     2584             !on rajoute ale et alp, et les caracteristiques de la couche alim
     2585             ,Ale_bl,Alp_bl,lalim_conv,wght_th, zmax0, f0, zw2,fraca &
     2586             ,ztv,zpspsk,ztla,zthl &
     2587             !cc nrlmd le 10/04/2012
     2588             ,pbl_tke_input,pctsrf,omega,airephy &
     2589             ,zlcl_th,fraca0,w0,w_conv,therm_tke_max0,env_tke_max0 &
     2590             ,n2,s2,ale_bl_stat &
     2591             ,therm_tke_max,env_tke_max &
     2592             ,alp_bl_det,alp_bl_fluct_m,alp_bl_fluct_tke &
     2593             ,alp_bl_conv,alp_bl_stat &
     2594             !cc fin nrlmd le 10/04/2012
     2595             ,zqla,ztva )
     2596
     2597        !cc nrlmd le 10/04/2012
     2598        !-----------Stochastic triggering-----------
     2599        if (iflag_trig_bl.ge.1) then
     2600           !
     2601           IF (prt_level .GE. 10) THEN
     2602              print *,'cin, ale_bl_stat, alp_bl_stat ', &
     2603                   cin, ale_bl_stat, alp_bl_stat
     2604           ENDIF
     2605
     2606           !----Initialisations
     2607           do i=1,klon
     2608              proba_notrig(i)=1.
     2609              random_notrig(i)=1e6*ale_bl_stat(i)-int(1e6*ale_bl_stat(i))
     2610              if ( ale_bl_trig(i) .lt. abs(cin(i))+1.e-10 ) then
     2611                 tau_trig(i)=tau_trig_shallow
     2612              else
     2613                 tau_trig(i)=tau_trig_deep
     2614              endif
     2615           enddo
     2616           !
     2617           IF (prt_level .GE. 10) THEN
     2618              print *,'random_notrig, tau_trig ', &
     2619                   random_notrig, tau_trig
     2620              print *,'s_trig,s2,n2 ', &
     2621                   s_trig,s2,n2
     2622           ENDIF
     2623
     2624           !----Tirage al\'eatoire et calcul de ale_bl_trig
     2625           do i=1,klon
     2626              if ( (ale_bl_stat(i) .gt. abs(cin(i))+1.e-10) )  then
     2627                 proba_notrig(i)=(1.-exp(-s_trig/s2(i)))** &
     2628                      (n2(i)*dtime/tau_trig(i))
     2629                 !        print *, 'proba_notrig(i) ',proba_notrig(i)
     2630                 if (random_notrig(i) .ge. proba_notrig(i)) then
     2631                    ale_bl_trig(i)=ale_bl_stat(i)
     2632                 else
     2633                    ale_bl_trig(i)=0.
     2634                 endif
     2635              else
     2636                 proba_notrig(i)=1.
     2637                 random_notrig(i)=0.
     2638                 ale_bl_trig(i)=0.
     2639              endif
     2640           enddo
     2641           !
     2642           IF (prt_level .GE. 10) THEN
     2643              print *,'proba_notrig, ale_bl_trig ', &
     2644                   proba_notrig, ale_bl_trig
     2645           ENDIF
     2646
     2647        endif !(iflag_trig_bl)
     2648
     2649        !-----------Statistical closure-----------
     2650        if (iflag_clos_bl.ge.1) then
     2651
     2652           do i=1,klon
     2653              alp_bl(i)=alp_bl_stat(i)
     2654           enddo
     2655
     2656        else
     2657
     2658           alp_bl_stat(:)=0.
     2659
     2660        endif !(iflag_clos_bl)
     2661
    26012662        IF (prt_level .GE. 10) THEN
    2602          print *,'cin, ale_bl_stat, alp_bl_stat ', &
    2603                   cin, ale_bl_stat, alp_bl_stat
     2663           print *,'ale_bl_trig, alp_bl_stat ',ale_bl_trig, alp_bl_stat
    26042664        ENDIF
    26052665
    2606 !----Initialisations
    2607       do i=1,klon
    2608       proba_notrig(i)=1.
    2609       random_notrig(i)=1e6*ale_bl_stat(i)-int(1e6*ale_bl_stat(i))
    2610         if ( ale_bl_trig(i) .lt. abs(cin(i))+1.e-10 ) then
    2611         tau_trig(i)=tau_trig_shallow
     2666        !cc fin nrlmd le 10/04/2012
     2667
     2668        ! ----------------------------------------------------------------------
     2669        ! Transport de la TKE par les panaches thermiques.
     2670        ! FH : 2010/02/01
     2671        !     if (iflag_pbl.eq.10) then
     2672        !     call thermcell_dtke(klon,klev,nbsrf,pdtphys,fm_therm,entr_therm,
     2673        !    s           rg,paprs,pbl_tke)
     2674        !     endif
     2675        ! ----------------------------------------------------------------------
     2676        !IM/FH: 2011/02/23
     2677        ! Couplage Thermiques/Emanuel seulement si T<0
     2678        if (iflag_coupl==2) then
     2679           print*,'Couplage Thermiques/Emanuel seulement si T<0'
     2680           do i=1,klon
     2681              if (t_seri(i,lmax_th(i))>273.) then
     2682                 Ale_bl(i)=0.
     2683              endif
     2684           enddo
     2685        endif
     2686
     2687        do i=1,klon
     2688           zmax_th(i)=pphi(i,lmax_th(i))/rg
     2689        enddo
     2690
     2691     endif
     2692
     2693
     2694     !  Ajustement sec
     2695     !  ==============
     2696
     2697     ! Dans le cas o\`u on active les thermiques, on fait partir l'ajustement
     2698     ! a partir du sommet des thermiques.
     2699     ! Dans le cas contraire, on demarre au niveau 1.
     2700
     2701     if (iflag_thermals.ge.13.or.iflag_thermals.eq.0) then
     2702
     2703        if(iflag_thermals.eq.0) then
     2704           IF(prt_level>9)WRITE(lunout,*)'ajsec'
     2705           limbas(:)=1
    26122706        else
    2613         tau_trig(i)=tau_trig_deep
     2707           limbas(:)=lmax_th(:)
    26142708        endif
    2615       enddo
    2616 !
    2617         IF (prt_level .GE. 10) THEN
    2618          print *,'random_notrig, tau_trig ', &
    2619                   random_notrig, tau_trig
    2620           print *,'s_trig,s2,n2 ', &
    2621                    s_trig,s2,n2
    2622         ENDIF
    2623 
    2624 !----Tirage al\'eatoire et calcul de ale_bl_trig
    2625       do i=1,klon
    2626         if ( (ale_bl_stat(i) .gt. abs(cin(i))+1.e-10) )  then
    2627         proba_notrig(i)=(1.-exp(-s_trig/s2(i)))** &
    2628                         (n2(i)*dtime/tau_trig(i))
    2629 !        print *, 'proba_notrig(i) ',proba_notrig(i)
    2630           if (random_notrig(i) .ge. proba_notrig(i)) then
    2631           ale_bl_trig(i)=ale_bl_stat(i)
    2632           else
    2633           ale_bl_trig(i)=0.
    2634           endif
     2709
     2710        ! Attention : le call ajsec_convV2 n'est maintenu que momentanneement
     2711        ! pour des test de convergence numerique.
     2712        ! Le nouveau ajsec est a priori mieux, meme pour le cas
     2713        ! iflag_thermals = 0 (l'ancienne version peut faire des tendances
     2714        ! non nulles numeriquement pour des mailles non concernees.
     2715
     2716        if (iflag_thermals.eq.0) then
     2717           CALL ajsec_convV2(paprs, pplay, t_seri,q_seri &
     2718                , d_t_ajsb, d_q_ajsb)
    26352719        else
    2636         proba_notrig(i)=1.
    2637         random_notrig(i)=0.
    2638         ale_bl_trig(i)=0.
     2720           CALL ajsec(paprs, pplay, t_seri,q_seri,limbas &
     2721                , d_t_ajsb, d_q_ajsb)
    26392722        endif
    2640       enddo
    2641 !
    2642         IF (prt_level .GE. 10) THEN
    2643          print *,'proba_notrig, ale_bl_trig ', &
    2644                   proba_notrig, ale_bl_trig
    2645         ENDIF
    2646 
    2647       endif !(iflag_trig_bl)
    2648 
    2649 !-----------Statistical closure-----------
    2650       if (iflag_clos_bl.ge.1) then
    2651 
     2723
     2724        !-----------------------------------------------------------------------------------------
     2725        ! ajout des tendances de l'ajustement sec ou des thermiques
     2726        CALL add_phys_tend(du0,dv0,d_t_ajsb,d_q_ajsb,dql0,'ajsb')
     2727        d_t_ajs(:,:)=d_t_ajs(:,:)+d_t_ajsb(:,:)
     2728        d_q_ajs(:,:)=d_q_ajs(:,:)+d_q_ajsb(:,:)
     2729
     2730        !-----------------------------------------------------------------------------------------
     2731
     2732     endif
     2733
     2734  endif
     2735  !
     2736  !===================================================================
     2737  !IM
     2738  IF (ip_ebil_phy.ge.2) THEN
     2739     ztit='after dry_adjust'
     2740     CALL diagetpq(airephy,ztit,ip_ebil_phy,2,2,dtime &
     2741          , t_seri,q_seri,ql_seri,qs_seri,u_seri,v_seri,paprs,pplay &
     2742          , d_h_vcol, d_qt, d_qw, d_ql, d_qs, d_ec)
     2743     call diagphy(airephy,ztit,ip_ebil_phy &
     2744          , zero_v, zero_v, zero_v, zero_v, zero_v &
     2745          , zero_v, zero_v, zero_v, ztsol &
     2746          , d_h_vcol, d_qt, d_ec &
     2747          , fs_bound, fq_bound )
     2748  END IF
     2749
     2750
     2751  !-------------------------------------------------------------------------
     2752  ! Computation of ratqs, the width (normalized) of the subrid scale
     2753  ! water distribution
     2754  CALL  calcratqs(klon,klev,prt_level,lunout,        &
     2755       iflag_ratqs,iflag_con,iflag_cldcon,pdtphys,  &
     2756       ratqsbas,ratqshaut,tau_ratqs,fact_cldcon,   &
     2757       ptconv,ptconvth,clwcon0th, rnebcon0th,     &
     2758       paprs,pplay,q_seri,zqsat,fm_therm, &
     2759       ratqs,ratqsc)
     2760
     2761
     2762  !
     2763  ! Appeler le processus de condensation a grande echelle
     2764  ! et le processus de precipitation
     2765  !-------------------------------------------------------------------------
     2766  IF (prt_level .GE.10) THEN
     2767     print *,' ->fisrtilp '
     2768  ENDIF
     2769  !-------------------------------------------------------------------------
     2770  CALL fisrtilp(dtime,paprs,pplay, &
     2771       t_seri, q_seri,ptconv,ratqs, &
     2772       d_t_lsc, d_q_lsc, d_ql_lsc, rneb, cldliq, &
     2773       rain_lsc, snow_lsc, &
     2774       pfrac_impa, pfrac_nucl, pfrac_1nucl, &
     2775       frac_impa, frac_nucl, beta_prec_fisrt, &
     2776       prfl, psfl, rhcl,  &
     2777       zqasc, fraca,ztv,zpspsk,ztla,zthl,iflag_cldcon, &
     2778       iflag_ice_thermo)
     2779
     2780  WHERE (rain_lsc < 0) rain_lsc = 0.
     2781  WHERE (snow_lsc < 0) snow_lsc = 0.
     2782  !-----------------------------------------------------------------------------------------
     2783  ! ajout des tendances de la diffusion turbulente
     2784  CALL add_phys_tend(du0,dv0,d_t_lsc,d_q_lsc,d_ql_lsc,'lsc')
     2785  !-----------------------------------------------------------------------------------------
     2786  DO k = 1, klev
     2787     DO i = 1, klon
     2788        cldfra(i,k) = rneb(i,k)
     2789        IF (.NOT.new_oliq) cldliq(i,k) = ql_seri(i,k)
     2790     ENDDO
     2791  ENDDO
     2792  IF (check) THEN
     2793     za = qcheck(klon,klev,paprs,q_seri,ql_seri,airephy)
     2794     WRITE(lunout,*)"apresilp=", za
     2795     zx_t = 0.0
     2796     za = 0.0
     2797     DO i = 1, klon
     2798        za = za + airephy(i)/REAL(klon)
     2799        zx_t = zx_t + (rain_lsc(i) &
     2800             + snow_lsc(i))*airephy(i)/REAL(klon)
     2801     ENDDO
     2802     zx_t = zx_t/za*dtime
     2803     WRITE(lunout,*)"Precip=", zx_t
     2804  ENDIF
     2805  !IM
     2806  IF (ip_ebil_phy.ge.2) THEN
     2807     ztit='after fisrt'
     2808     CALL diagetpq(airephy,ztit,ip_ebil_phy,2,2,dtime &
     2809          , t_seri,q_seri,ql_seri,qs_seri,u_seri,v_seri,paprs,pplay &
     2810          , d_h_vcol, d_qt, d_qw, d_ql, d_qs, d_ec)
     2811     call diagphy(airephy,ztit,ip_ebil_phy &
     2812          , zero_v, zero_v, zero_v, zero_v, zero_v &
     2813          , zero_v, rain_lsc, snow_lsc, ztsol &
     2814          , d_h_vcol, d_qt, d_ec &
     2815          , fs_bound, fq_bound )
     2816  END IF
     2817
     2818  if (mydebug) then
     2819     call writefield_phy('u_seri',u_seri,llm)
     2820     call writefield_phy('v_seri',v_seri,llm)
     2821     call writefield_phy('t_seri',t_seri,llm)
     2822     call writefield_phy('q_seri',q_seri,llm)
     2823  endif
     2824
     2825  !
     2826  !-------------------------------------------------------------------
     2827  !  PRESCRIPTION DES NUAGES POUR LE RAYONNEMENT
     2828  !-------------------------------------------------------------------
     2829
     2830  ! 1. NUAGES CONVECTIFS
     2831  !
     2832  !IM cf FH
     2833  !     IF (iflag_cldcon.eq.-1) THEN ! seulement pour Tiedtke
     2834  IF (iflag_cldcon.le.-1) THEN ! seulement pour Tiedtke
     2835     snow_tiedtke=0.
     2836     !     print*,'avant calcul de la pseudo precip '
     2837     !     print*,'iflag_cldcon',iflag_cldcon
     2838     if (iflag_cldcon.eq.-1) then
     2839        rain_tiedtke=rain_con
     2840     else
     2841        !       print*,'calcul de la pseudo precip '
     2842        rain_tiedtke=0.
     2843        !         print*,'calcul de la pseudo precip 0'
     2844        do k=1,klev
     2845           do i=1,klon
     2846              if (d_q_con(i,k).lt.0.) then
     2847                 rain_tiedtke(i)=rain_tiedtke(i)-d_q_con(i,k)/pdtphys &
     2848                      *(paprs(i,k)-paprs(i,k+1))/rg
     2849              endif
     2850           enddo
     2851        enddo
     2852     endif
     2853     !
     2854     !     call dump2d(iim,jjm,rain_tiedtke(2:klon-1),'PSEUDO PRECIP ')
     2855     !
     2856
     2857     ! Nuages diagnostiques pour Tiedtke
     2858     CALL diagcld1(paprs,pplay, &
     2859          !IM cf FH  .             rain_con,snow_con,ibas_con,itop_con,
     2860          rain_tiedtke,snow_tiedtke,ibas_con,itop_con, &
     2861          diafra,dialiq)
     2862     DO k = 1, klev
     2863        DO i = 1, klon
     2864           IF (diafra(i,k).GT.cldfra(i,k)) THEN
     2865              cldliq(i,k) = dialiq(i,k)
     2866              cldfra(i,k) = diafra(i,k)
     2867           ENDIF
     2868        ENDDO
     2869     ENDDO
     2870
     2871  ELSE IF (iflag_cldcon.ge.3) THEN
     2872     !  On prend pour les nuages convectifs le max du calcul de la
     2873     !  convection et du calcul du pas de temps precedent diminue d'un facteur
     2874     !  facttemps
     2875     facteur = pdtphys *facttemps
     2876     do k=1,klev
    26522877        do i=1,klon
    2653         alp_bl(i)=alp_bl_stat(i)
    2654         enddo
    2655 
    2656       else
    2657 
    2658       alp_bl_stat(:)=0.
    2659 
    2660       endif !(iflag_clos_bl)
    2661 
    2662         IF (prt_level .GE. 10) THEN
    2663          print *,'ale_bl_trig, alp_bl_stat ',ale_bl_trig, alp_bl_stat
    2664         ENDIF
    2665 
    2666 !cc fin nrlmd le 10/04/2012
    2667 
    2668 ! ----------------------------------------------------------------------
    2669 ! Transport de la TKE par les panaches thermiques.
    2670 ! FH : 2010/02/01
    2671 !     if (iflag_pbl.eq.10) then
    2672 !     call thermcell_dtke(klon,klev,nbsrf,pdtphys,fm_therm,entr_therm,
    2673 !    s           rg,paprs,pbl_tke)
    2674 !     endif
    2675 ! ----------------------------------------------------------------------
    2676 !IM/FH: 2011/02/23
    2677 ! Couplage Thermiques/Emanuel seulement si T<0
    2678       if (iflag_coupl==2) then
    2679         print*,'Couplage Thermiques/Emanuel seulement si T<0'
    2680         do i=1,klon
    2681            if (t_seri(i,lmax_th(i))>273.) then
    2682               Ale_bl(i)=0.
     2878           rnebcon(i,k)=rnebcon(i,k)*facteur
     2879           if (rnebcon0(i,k)*clwcon0(i,k).gt.rnebcon(i,k)*clwcon(i,k)) &
     2880                then
     2881              rnebcon(i,k)=rnebcon0(i,k)
     2882              clwcon(i,k)=clwcon0(i,k)
    26832883           endif
    26842884        enddo
    2685       endif
    2686 
    2687       do i=1,klon
    2688          zmax_th(i)=pphi(i,lmax_th(i))/rg
    2689       enddo
    2690 
    2691          endif
    2692 
    2693 
    2694 !  Ajustement sec
    2695 !  ==============
    2696 
    2697 ! Dans le cas o\`u on active les thermiques, on fait partir l'ajustement
    2698 ! a partir du sommet des thermiques.
    2699 ! Dans le cas contraire, on demarre au niveau 1.
    2700 
    2701          if (iflag_thermals.ge.13.or.iflag_thermals.eq.0) then
    2702 
    2703          if(iflag_thermals.eq.0) then
    2704             IF(prt_level>9)WRITE(lunout,*)'ajsec'
    2705             limbas(:)=1
    2706          else
    2707             limbas(:)=lmax_th(:)
    2708          endif
    2709  
    2710 ! Attention : le call ajsec_convV2 n'est maintenu que momentanneement
    2711 ! pour des test de convergence numerique.
    2712 ! Le nouveau ajsec est a priori mieux, meme pour le cas
    2713 ! iflag_thermals = 0 (l'ancienne version peut faire des tendances
    2714 ! non nulles numeriquement pour des mailles non concernees.
    2715 
    2716          if (iflag_thermals.eq.0) then
    2717             CALL ajsec_convV2(paprs, pplay, t_seri,q_seri &
    2718             , d_t_ajsb, d_q_ajsb)
    2719          else
    2720             CALL ajsec(paprs, pplay, t_seri,q_seri,limbas &
    2721             , d_t_ajsb, d_q_ajsb)
    2722          endif
    2723 
    2724 !-----------------------------------------------------------------------------------------
    2725 ! ajout des tendances de l'ajustement sec ou des thermiques
    2726       CALL add_phys_tend(du0,dv0,d_t_ajsb,d_q_ajsb,dql0,'ajsb')
    2727          d_t_ajs(:,:)=d_t_ajs(:,:)+d_t_ajsb(:,:)
    2728          d_q_ajs(:,:)=d_q_ajs(:,:)+d_q_ajsb(:,:)
    2729 
    2730 !-----------------------------------------------------------------------------------------
    2731 
    2732          endif
    2733 
    2734       endif
    2735 !
    2736 !===================================================================
    2737 !IM
    2738       IF (ip_ebil_phy.ge.2) THEN
    2739         ztit='after dry_adjust'
    2740         CALL diagetpq(airephy,ztit,ip_ebil_phy,2,2,dtime &
    2741             , t_seri,q_seri,ql_seri,qs_seri,u_seri,v_seri,paprs,pplay &
    2742             , d_h_vcol, d_qt, d_qw, d_ql, d_qs, d_ec)
    2743         call diagphy(airephy,ztit,ip_ebil_phy &
    2744             , zero_v, zero_v, zero_v, zero_v, zero_v &
    2745             , zero_v, zero_v, zero_v, ztsol &
    2746             , d_h_vcol, d_qt, d_ec &
    2747             , fs_bound, fq_bound )
    2748       END IF
    2749 
    2750 
    2751 !-------------------------------------------------------------------------
    2752 ! Computation of ratqs, the width (normalized) of the subrid scale
    2753 ! water distribution
    2754       CALL  calcratqs(klon,klev,prt_level,lunout,        &
    2755            iflag_ratqs,iflag_con,iflag_cldcon,pdtphys,  &
    2756            ratqsbas,ratqshaut,tau_ratqs,fact_cldcon,   &
    2757            ptconv,ptconvth,clwcon0th, rnebcon0th,     &
    2758            paprs,pplay,q_seri,zqsat,fm_therm, &
    2759            ratqs,ratqsc)
    2760 
    2761 
    2762 !
    2763 ! Appeler le processus de condensation a grande echelle
    2764 ! et le processus de precipitation
    2765 !-------------------------------------------------------------------------
    2766       IF (prt_level .GE.10) THEN
    2767        print *,' ->fisrtilp '
    2768       ENDIF
    2769 !-------------------------------------------------------------------------
    2770       CALL fisrtilp(dtime,paprs,pplay, &
    2771                  t_seri, q_seri,ptconv,ratqs, &
    2772                  d_t_lsc, d_q_lsc, d_ql_lsc, rneb, cldliq, &
    2773                  rain_lsc, snow_lsc, &
    2774                  pfrac_impa, pfrac_nucl, pfrac_1nucl, &
    2775                  frac_impa, frac_nucl, beta_prec_fisrt, &
    2776                  prfl, psfl, rhcl,  &
    2777                  zqasc, fraca,ztv,zpspsk,ztla,zthl,iflag_cldcon, &
    2778                  iflag_ice_thermo)
    2779 
    2780       WHERE (rain_lsc < 0) rain_lsc = 0.
    2781       WHERE (snow_lsc < 0) snow_lsc = 0.
    2782 !-----------------------------------------------------------------------------------------
    2783 ! ajout des tendances de la diffusion turbulente
    2784       CALL add_phys_tend(du0,dv0,d_t_lsc,d_q_lsc,d_ql_lsc,'lsc')
    2785 !-----------------------------------------------------------------------------------------
    2786       DO k = 1, klev
    2787       DO i = 1, klon
    2788          cldfra(i,k) = rneb(i,k)
    2789          IF (.NOT.new_oliq) cldliq(i,k) = ql_seri(i,k)
    2790       ENDDO
    2791       ENDDO
    2792       IF (check) THEN
    2793          za = qcheck(klon,klev,paprs,q_seri,ql_seri,airephy)
    2794          WRITE(lunout,*)"apresilp=", za
    2795          zx_t = 0.0
    2796          za = 0.0
    2797          DO i = 1, klon
    2798             za = za + airephy(i)/REAL(klon)
    2799             zx_t = zx_t + (rain_lsc(i) &
    2800                         + snow_lsc(i))*airephy(i)/REAL(klon)
     2885     enddo
     2886
     2887     !
     2888     !jq - introduce the aerosol direct and first indirect radiative forcings
     2889     !jq - Johannes Quaas, 27/11/2003 (quaas@lmd.jussieu.fr)
     2890     IF (flag_aerosol .gt. 0) THEN
     2891        IF (.NOT. aerosol_couple) &
     2892             CALL readaerosol_optic( &
     2893             debut, new_aod, flag_aerosol, itap, jD_cur-jD_ref, &
     2894             pdtphys, pplay, paprs, t_seri, rhcl, presnivs,  &
     2895             mass_solu_aero, mass_solu_aero_pi,  &
     2896             tau_aero, piz_aero, cg_aero,  &
     2897             tausum_aero, tau3d_aero)
     2898     ELSE
     2899        tausum_aero(:,:,:) = 0.
     2900        tau_aero(:,:,:,:) = 0.
     2901        piz_aero(:,:,:,:) = 0.
     2902        cg_aero(:,:,:,:)  = 0.
     2903     ENDIF
     2904     !
     2905     !--STRAT AEROSOL
     2906     !--updates tausum_aero,tau_aero,piz_aero,cg_aero
     2907     IF (flag_aerosol_strat) THEN
     2908        PRINT *,'appel a readaerosolstrat', mth_cur
     2909        CALL readaerosolstrato(debut)
     2910     ENDIF
     2911     !--fin STRAT AEROSOL
     2912
     2913     !IM calcul nuages par le simulateur ISCCP
     2914     !
     2915#ifdef histISCCP
     2916     IF (ok_isccp) THEN
     2917        !
     2918        !IM lecture invtau, tautab des fichiers formattes
     2919        !
     2920        IF (debut) THEN
     2921           !$OMP MASTER
     2922           !
     2923           open(99,file='tautab.formatted', FORM='FORMATTED')
     2924           read(99,'(f30.20)') tautab_omp
     2925           close(99)
     2926           !
     2927           open(99,file='invtau.formatted',form='FORMATTED')
     2928           read(99,'(i10)') invtau_omp
     2929
     2930           !     print*,'calcul_simulISCCP invtau_omp',invtau_omp
     2931           !     write(6,'(a,8i10)') 'invtau_omp',(invtau_omp(i),i=1,100)
     2932
     2933           close(99)
     2934           !$OMP END MASTER
     2935           !$OMP BARRIER
     2936           tautab=tautab_omp
     2937           invtau=invtau_omp
     2938           !
     2939        ENDIF !debut
     2940        !
     2941        !IM appel simulateur toutes les  NINT(freq_ISCCP/dtime) heures
     2942        IF (MOD(itap,NINT(freq_ISCCP/dtime)).EQ.0) THEN
     2943           include "calcul_simulISCCP.h"
     2944        ENDIF !(MOD(itap,NINT(freq_ISCCP/dtime))
     2945     ENDIF !ok_isccp
     2946#endif
     2947
     2948     !   On prend la somme des fractions nuageuses et des contenus en eau
     2949
     2950     if (iflag_cldcon>=5) then
     2951
     2952        do k=1,klev
     2953           ptconvth(:,k)=fm_therm(:,k+1)>0.
     2954        enddo
     2955
     2956        if (iflag_coupl==4) then
     2957
     2958           ! Dans le cas iflag_coupl==4, on prend la somme des convertures
     2959           ! convectives et lsc dans la partie des thermiques
     2960           ! Le controle par iflag_coupl est peut etre provisoire.
     2961           do k=1,klev
     2962              do i=1,klon
     2963                 if (ptconv(i,k).and.ptconvth(i,k)) then
     2964                    cldliq(i,k)=cldliq(i,k)+rnebcon(i,k)*clwcon(i,k)
     2965                    cldfra(i,k)=min(cldfra(i,k)+rnebcon(i,k),1.)
     2966                 else if (ptconv(i,k)) then
     2967                    cldfra(i,k)=rnebcon(i,k)
     2968                    cldliq(i,k)=rnebcon(i,k)*clwcon(i,k)
     2969                 endif
     2970              enddo
     2971           enddo
     2972
     2973        else if (iflag_coupl==5) then
     2974           do k=1,klev
     2975              do i=1,klon
     2976                 cldfra(i,k)=min(cldfra(i,k)+rnebcon(i,k),1.)
     2977                 cldliq(i,k)=cldliq(i,k)+rnebcon(i,k)*clwcon(i,k)
     2978              enddo
     2979           enddo
     2980
     2981        else
     2982
     2983           ! Si on est sur un point touche par la convection profonde et pas
     2984           ! par les thermiques, on prend la couverture nuageuse et l'eau nuageuse
     2985           ! de la convection profonde.
     2986
     2987           !IM/FH: 2011/02/23
     2988           ! definition des points sur lesquels ls thermiques sont actifs
     2989
     2990           do k=1,klev
     2991              do i=1,klon
     2992                 if (ptconv(i,k).and. .not. ptconvth(i,k)) then
     2993                    cldfra(i,k)=rnebcon(i,k)
     2994                    cldliq(i,k)=rnebcon(i,k)*clwcon(i,k)
     2995                 endif
     2996              enddo
     2997           enddo
     2998
     2999        endif
     3000
     3001     else
     3002
     3003        ! Ancienne version
     3004        cldfra(:,:)=min(max(cldfra(:,:),rnebcon(:,:)),1.)
     3005        cldliq(:,:)=cldliq(:,:)+rnebcon(:,:)*clwcon(:,:)
     3006     endif
     3007
     3008  ENDIF
     3009
     3010  !     plulsc(:)=0.
     3011  !     do k=1,klev,-1
     3012  !        do i=1,klon
     3013  !              zzz=prfl(:,k)+psfl(:,k)
     3014  !           if (.not.ptconvth.zzz.gt.0.)
     3015  !        enddo prfl, psfl,
     3016  !     enddo
     3017  !
     3018  ! 2. NUAGES STARTIFORMES
     3019  !
     3020  IF (ok_stratus) THEN
     3021     CALL diagcld2(paprs,pplay,t_seri,q_seri, diafra,dialiq)
     3022     DO k = 1, klev
     3023        DO i = 1, klon
     3024           IF (diafra(i,k).GT.cldfra(i,k)) THEN
     3025              cldliq(i,k) = dialiq(i,k)
     3026              cldfra(i,k) = diafra(i,k)
     3027           ENDIF
    28013028        ENDDO
    2802          zx_t = zx_t/za*dtime
    2803          WRITE(lunout,*)"Precip=", zx_t
    2804       ENDIF
    2805 !IM
    2806       IF (ip_ebil_phy.ge.2) THEN
    2807         ztit='after fisrt'
    2808         CALL diagetpq(airephy,ztit,ip_ebil_phy,2,2,dtime &
    2809             , t_seri,q_seri,ql_seri,qs_seri,u_seri,v_seri,paprs,pplay &
    2810             , d_h_vcol, d_qt, d_qw, d_ql, d_qs, d_ec)
    2811         call diagphy(airephy,ztit,ip_ebil_phy &
    2812             , zero_v, zero_v, zero_v, zero_v, zero_v &
    2813             , zero_v, rain_lsc, snow_lsc, ztsol &
    2814             , d_h_vcol, d_qt, d_ec &
    2815             , fs_bound, fq_bound )
    2816       END IF
    2817 
    2818       if (mydebug) then
    2819         call writefield_phy('u_seri',u_seri,llm)
    2820         call writefield_phy('v_seri',v_seri,llm)
    2821         call writefield_phy('t_seri',t_seri,llm)
    2822         call writefield_phy('q_seri',q_seri,llm)
    2823       endif
    2824 
    2825 !
    2826 !-------------------------------------------------------------------
    2827 !  PRESCRIPTION DES NUAGES POUR LE RAYONNEMENT
    2828 !-------------------------------------------------------------------
    2829 
    2830 ! 1. NUAGES CONVECTIFS
    2831 !
    2832 !IM cf FH
    2833 !     IF (iflag_cldcon.eq.-1) THEN ! seulement pour Tiedtke
    2834       IF (iflag_cldcon.le.-1) THEN ! seulement pour Tiedtke
    2835        snow_tiedtke=0.
    2836 !     print*,'avant calcul de la pseudo precip '
    2837 !     print*,'iflag_cldcon',iflag_cldcon
    2838        if (iflag_cldcon.eq.-1) then
    2839           rain_tiedtke=rain_con
    2840        else
    2841 !       print*,'calcul de la pseudo precip '
    2842           rain_tiedtke=0.
    2843 !         print*,'calcul de la pseudo precip 0'
    2844           do k=1,klev
    2845           do i=1,klon
    2846              if (d_q_con(i,k).lt.0.) then
    2847                 rain_tiedtke(i)=rain_tiedtke(i)-d_q_con(i,k)/pdtphys &
    2848                *(paprs(i,k)-paprs(i,k+1))/rg
    2849              endif
    2850           enddo
    2851           enddo
    2852        endif
    2853 !
    2854 !     call dump2d(iim,jjm,rain_tiedtke(2:klon-1),'PSEUDO PRECIP ')
    2855 !
    2856 
    2857 ! Nuages diagnostiques pour Tiedtke
    2858       CALL diagcld1(paprs,pplay, &
    2859 !IM cf FH  .             rain_con,snow_con,ibas_con,itop_con,
    2860                    rain_tiedtke,snow_tiedtke,ibas_con,itop_con, &
    2861                    diafra,dialiq)
    2862       DO k = 1, klev
    2863       DO i = 1, klon
    2864       IF (diafra(i,k).GT.cldfra(i,k)) THEN
    2865          cldliq(i,k) = dialiq(i,k)
    2866          cldfra(i,k) = diafra(i,k)
    2867       ENDIF
    2868       ENDDO
    2869       ENDDO
    2870 
    2871       ELSE IF (iflag_cldcon.ge.3) THEN
    2872 !  On prend pour les nuages convectifs le max du calcul de la
    2873 !  convection et du calcul du pas de temps precedent diminue d'un facteur
    2874 !  facttemps
    2875       facteur = pdtphys *facttemps
    2876       do k=1,klev
    2877          do i=1,klon
    2878             rnebcon(i,k)=rnebcon(i,k)*facteur
    2879             if (rnebcon0(i,k)*clwcon0(i,k).gt.rnebcon(i,k)*clwcon(i,k)) &
    2880             then
    2881                 rnebcon(i,k)=rnebcon0(i,k)
    2882                 clwcon(i,k)=clwcon0(i,k)
    2883             endif
    2884          enddo
    2885       enddo
    2886 
    2887 !
    2888 !jq - introduce the aerosol direct and first indirect radiative forcings
    2889 !jq - Johannes Quaas, 27/11/2003 (quaas@lmd.jussieu.fr)
    2890       IF (flag_aerosol .gt. 0) THEN
    2891          IF (.NOT. aerosol_couple) &
    2892               CALL readaerosol_optic( &
    2893               debut, new_aod, flag_aerosol, itap, jD_cur-jD_ref, &
    2894               pdtphys, pplay, paprs, t_seri, rhcl, presnivs,  &
    2895               mass_solu_aero, mass_solu_aero_pi,  &
    2896               tau_aero, piz_aero, cg_aero,  &
    2897               tausum_aero, tau3d_aero)
    2898       ELSE
    2899          tausum_aero(:,:,:) = 0.
    2900          tau_aero(:,:,:,:) = 0.
    2901          piz_aero(:,:,:,:) = 0.
    2902          cg_aero(:,:,:,:)  = 0.
    2903       ENDIF
    2904 !
    2905 !--STRAT AEROSOL
    2906 !--updates tausum_aero,tau_aero,piz_aero,cg_aero
    2907       IF (flag_aerosol_strat) THEN
    2908          PRINT *,'appel a readaerosolstrat', mth_cur
    2909          CALL readaerosolstrato(debut)
    2910       ENDIF
    2911 !--fin STRAT AEROSOL
    2912 
    2913 !IM calcul nuages par le simulateur ISCCP
    2914 !
    2915 #ifdef histISCCP
    2916       IF (ok_isccp) THEN
    2917 !
    2918 !IM lecture invtau, tautab des fichiers formattes
    2919 !
    2920       IF (debut) THEN
    2921 !$OMP MASTER
    2922 !
    2923       open(99,file='tautab.formatted', FORM='FORMATTED')
    2924       read(99,'(f30.20)') tautab_omp
    2925       close(99)
    2926 !
    2927       open(99,file='invtau.formatted',form='FORMATTED')
    2928       read(99,'(i10)') invtau_omp
    2929 
    2930 !     print*,'calcul_simulISCCP invtau_omp',invtau_omp
    2931 !     write(6,'(a,8i10)') 'invtau_omp',(invtau_omp(i),i=1,100)
    2932 
    2933       close(99)
    2934 !$OMP END MASTER
    2935 !$OMP BARRIER
    2936       tautab=tautab_omp
    2937       invtau=invtau_omp
    2938 !
    2939       ENDIF !debut
    2940 !
    2941 !IM appel simulateur toutes les  NINT(freq_ISCCP/dtime) heures
    2942        IF (MOD(itap,NINT(freq_ISCCP/dtime)).EQ.0) THEN
    2943 #include "calcul_simulISCCP.h"
    2944        ENDIF !(MOD(itap,NINT(freq_ISCCP/dtime))
    2945       ENDIF !ok_isccp
    2946 #endif
    2947 
    2948 !   On prend la somme des fractions nuageuses et des contenus en eau
    2949 
    2950       if (iflag_cldcon>=5) then
    2951 
    2952         do k=1,klev
    2953          ptconvth(:,k)=fm_therm(:,k+1)>0.
    2954         enddo
    2955 
    2956        if (iflag_coupl==4) then
    2957 
    2958 ! Dans le cas iflag_coupl==4, on prend la somme des convertures
    2959 ! convectives et lsc dans la partie des thermiques
    2960 ! Le controle par iflag_coupl est peut etre provisoire.
    2961          do k=1,klev
    2962             do i=1,klon
    2963                if (ptconv(i,k).and.ptconvth(i,k)) then
    2964                    cldliq(i,k)=cldliq(i,k)+rnebcon(i,k)*clwcon(i,k)
    2965                    cldfra(i,k)=min(cldfra(i,k)+rnebcon(i,k),1.)
    2966                else if (ptconv(i,k)) then
    2967                    cldfra(i,k)=rnebcon(i,k)
    2968                    cldliq(i,k)=rnebcon(i,k)*clwcon(i,k)
    2969                endif
    2970             enddo
    2971          enddo
    2972 
    2973          else if (iflag_coupl==5) then
    2974          do k=1,klev
    2975             do i=1,klon
    2976                cldfra(i,k)=min(cldfra(i,k)+rnebcon(i,k),1.)
    2977                cldliq(i,k)=cldliq(i,k)+rnebcon(i,k)*clwcon(i,k)
    2978             enddo
    2979          enddo
    2980 
    2981          else
    2982 
    2983 ! Si on est sur un point touche par la convection profonde et pas
    2984 ! par les thermiques, on prend la couverture nuageuse et l'eau nuageuse
    2985 ! de la convection profonde.
    2986 
    2987 !IM/FH: 2011/02/23
    2988 ! definition des points sur lesquels ls thermiques sont actifs
    2989 
    2990          do k=1,klev
    2991             do i=1,klon
    2992                if (ptconv(i,k).and. .not. ptconvth(i,k)) then
    2993                    cldfra(i,k)=rnebcon(i,k)
    2994                    cldliq(i,k)=rnebcon(i,k)*clwcon(i,k)
    2995                endif
    2996             enddo
    2997          enddo
    2998 
    2999         endif
    3000 
    3001       else
    3002 
    3003 ! Ancienne version
    3004       cldfra(:,:)=min(max(cldfra(:,:),rnebcon(:,:)),1.)
    3005       cldliq(:,:)=cldliq(:,:)+rnebcon(:,:)*clwcon(:,:)
    3006       endif
    3007 
    3008       ENDIF
    3009 
    3010 !     plulsc(:)=0.
    3011 !     do k=1,klev,-1
    3012 !        do i=1,klon
    3013 !              zzz=prfl(:,k)+psfl(:,k)
    3014 !           if (.not.ptconvth.zzz.gt.0.)
    3015 !        enddo prfl, psfl,
    3016 !     enddo
    3017 !
    3018 ! 2. NUAGES STARTIFORMES
    3019 !
    3020       IF (ok_stratus) THEN
    3021       CALL diagcld2(paprs,pplay,t_seri,q_seri, diafra,dialiq)
    3022       DO k = 1, klev
    3023       DO i = 1, klon
    3024       IF (diafra(i,k).GT.cldfra(i,k)) THEN
    3025          cldliq(i,k) = dialiq(i,k)
    3026          cldfra(i,k) = diafra(i,k)
    3027       ENDIF
    3028       ENDDO
    3029       ENDDO
    3030       ENDIF
    3031 !
    3032 ! Precipitation totale
    3033 !
    3034       DO i = 1, klon
    3035          rain_fall(i) = rain_con(i) + rain_lsc(i)
    3036          snow_fall(i) = snow_con(i) + snow_lsc(i)
    3037       ENDDO
    3038 !IM
    3039       IF (ip_ebil_phy.ge.2) THEN
    3040         ztit="after diagcld"
    3041         CALL diagetpq(airephy,ztit,ip_ebil_phy,2,2,dtime &
    3042             , t_seri,q_seri,ql_seri,qs_seri,u_seri,v_seri,paprs,pplay &
    3043             , d_h_vcol, d_qt, d_qw, d_ql, d_qs, d_ec)
    3044         call diagphy(airephy,ztit,ip_ebil_phy &
    3045             , zero_v, zero_v, zero_v, zero_v, zero_v &
    3046             , zero_v, zero_v, zero_v, ztsol &
    3047             , d_h_vcol, d_qt, d_ec &
    3048             , fs_bound, fq_bound )
    3049       END IF
    3050 !
    3051 ! Calculer l'humidite relative pour diagnostique
    3052 !
    3053       DO k = 1, klev
    3054       DO i = 1, klon
    3055          zx_t = t_seri(i,k)
    3056          IF (thermcep) THEN
    3057             zdelta = MAX(0.,SIGN(1.,rtt-zx_t))
    3058             zx_qs  = r2es * FOEEW(zx_t,zdelta)/pplay(i,k)
    3059             zx_qs  = MIN(0.5,zx_qs)
    3060             zcor   = 1./(1.-retv*zx_qs)
    3061             zx_qs  = zx_qs*zcor
    3062          ELSE
     3029     ENDDO
     3030  ENDIF
     3031  !
     3032  ! Precipitation totale
     3033  !
     3034  DO i = 1, klon
     3035     rain_fall(i) = rain_con(i) + rain_lsc(i)
     3036     snow_fall(i) = snow_con(i) + snow_lsc(i)
     3037  ENDDO
     3038  !IM
     3039  IF (ip_ebil_phy.ge.2) THEN
     3040     ztit="after diagcld"
     3041     CALL diagetpq(airephy,ztit,ip_ebil_phy,2,2,dtime &
     3042          , t_seri,q_seri,ql_seri,qs_seri,u_seri,v_seri,paprs,pplay &
     3043          , d_h_vcol, d_qt, d_qw, d_ql, d_qs, d_ec)
     3044     call diagphy(airephy,ztit,ip_ebil_phy &
     3045          , zero_v, zero_v, zero_v, zero_v, zero_v &
     3046          , zero_v, zero_v, zero_v, ztsol &
     3047          , d_h_vcol, d_qt, d_ec &
     3048          , fs_bound, fq_bound )
     3049  END IF
     3050  !
     3051  ! Calculer l'humidite relative pour diagnostique
     3052  !
     3053  DO k = 1, klev
     3054     DO i = 1, klon
     3055        zx_t = t_seri(i,k)
     3056        IF (thermcep) THEN
     3057           zdelta = MAX(0.,SIGN(1.,rtt-zx_t))
     3058           zx_qs  = r2es * FOEEW(zx_t,zdelta)/pplay(i,k)
     3059           zx_qs  = MIN(0.5,zx_qs)
     3060           zcor   = 1./(1.-retv*zx_qs)
     3061           zx_qs  = zx_qs*zcor
     3062        ELSE
    30633063           IF (zx_t.LT.t_coup) THEN
    30643064              zx_qs = qsats(zx_t)/pplay(i,k)
     
    30663066              zx_qs = qsatl(zx_t)/pplay(i,k)
    30673067           ENDIF
    3068          ENDIF
    3069          zx_rh(i,k) = q_seri(i,k)/zx_qs
    3070          zqsat(i,k)=zx_qs
    3071       ENDDO
    3072       ENDDO
    3073 
    3074 !IM Calcul temp.potentielle a 2m (tpot) et temp. potentielle
    3075 !   equivalente a 2m (tpote) pour diagnostique
    3076 !
    3077       DO i = 1, klon
    3078        tpot(i)=zt2m(i)*(100000./paprs(i,1))**RKAPPA
    3079        IF (thermcep) THEN
     3068        ENDIF
     3069        zx_rh(i,k) = q_seri(i,k)/zx_qs
     3070        zqsat(i,k)=zx_qs
     3071     ENDDO
     3072  ENDDO
     3073
     3074  !IM Calcul temp.potentielle a 2m (tpot) et temp. potentielle
     3075  !   equivalente a 2m (tpote) pour diagnostique
     3076  !
     3077  DO i = 1, klon
     3078     tpot(i)=zt2m(i)*(100000./paprs(i,1))**RKAPPA
     3079     IF (thermcep) THEN
    30803080        IF(zt2m(i).LT.RTT) then
    3081          Lheat=RLSTT
     3081           Lheat=RLSTT
    30823082        ELSE
    3083          Lheat=RLVTT
     3083           Lheat=RLVTT
    30843084        ENDIF
    3085        ELSE
     3085     ELSE
    30863086        IF (zt2m(i).LT.RTT) THEN
    3087          Lheat=RLSTT
     3087           Lheat=RLSTT
    30883088        ELSE
    3089          Lheat=RLVTT
     3089           Lheat=RLVTT
    30903090        ENDIF
    3091        ENDIF
    3092        tpote(i) = tpot(i)*      &
    3093        EXP((Lheat *qsat2m(i))/(RCPD*zt2m(i)))
    3094       ENDDO
    3095 
    3096       IF (type_trac == 'inca') THEN
     3091     ENDIF
     3092     tpote(i) = tpot(i)*      &
     3093          EXP((Lheat *qsat2m(i))/(RCPD*zt2m(i)))
     3094  ENDDO
     3095
     3096  IF (type_trac == 'inca') THEN
    30973097#ifdef INCA
    3098          CALL VTe(VTphysiq)
    3099          CALL VTb(VTinca)
    3100          calday = REAL(days_elapsed + 1) + jH_cur
    3101 
    3102          call chemtime(itap+itau_phy-1, date0, dtime)
    3103          IF (config_inca == 'aero') THEN
    3104             CALL AEROSOL_METEO_CALC( &
    3105                  calday,pdtphys,pplay,paprs,t,pmflxr,pmflxs, &
    3106                  prfl,psfl,pctsrf,airephy,rlat,rlon,u10m,v10m)
    3107          END IF
    3108 
    3109          zxsnow_dummy(:) = 0.0
    3110 
    3111          CALL chemhook_begin (calday, &
    3112                                 days_elapsed+1, &
    3113                                 jH_cur, &
    3114                                 pctsrf(1,1), &
    3115                                 rlat, &
    3116                                 rlon, &
    3117                                 airephy, &
    3118                                 paprs, &
    3119                                 pplay, &
    3120                                 coefh(:,:,is_ave), &
    3121                                 pphi, &
    3122                                 t_seri, &
    3123                                 u, &
    3124                                 v, &
    3125                                 wo(:, :, 1), &
    3126                                 q_seri, &
    3127                                 zxtsol, &
    3128                                 zxsnow_dummy, &
    3129                                 solsw, &
    3130                                 albsol1, &
    3131                                 rain_fall, &
    3132                                 snow_fall, &
    3133                                 itop_con, &
    3134                                 ibas_con, &
    3135                                 cldfra, &
    3136                                 iim, &
    3137                                 jjm, &
    3138                                 tr_seri, &
    3139                                 ftsol, &
    3140                                 paprs, &
    3141                                 cdragh, &
    3142                                 cdragm, &
    3143                                 pctsrf, &
    3144                                 pdtphys, &
    3145                                   itap)
    3146 
    3147          CALL VTe(VTinca)
    3148          CALL VTb(VTphysiq)
     3098     CALL VTe(VTphysiq)
     3099     CALL VTb(VTinca)
     3100     calday = REAL(days_elapsed + 1) + jH_cur
     3101
     3102     call chemtime(itap+itau_phy-1, date0, dtime)
     3103     IF (config_inca == 'aero') THEN
     3104        CALL AEROSOL_METEO_CALC( &
     3105             calday,pdtphys,pplay,paprs,t,pmflxr,pmflxs, &
     3106             prfl,psfl,pctsrf,airephy,rlat,rlon,u10m,v10m)
     3107     END IF
     3108
     3109     zxsnow_dummy(:) = 0.0
     3110
     3111     CALL chemhook_begin (calday, &
     3112          days_elapsed+1, &
     3113          jH_cur, &
     3114          pctsrf(1,1), &
     3115          rlat, &
     3116          rlon, &
     3117          airephy, &
     3118          paprs, &
     3119          pplay, &
     3120          coefh(:,:,is_ave), &
     3121          pphi, &
     3122          t_seri, &
     3123          u, &
     3124          v, &
     3125          wo(:, :, 1), &
     3126          q_seri, &
     3127          zxtsol, &
     3128          zxsnow_dummy, &
     3129          solsw, &
     3130          albsol1, &
     3131          rain_fall, &
     3132          snow_fall, &
     3133          itop_con, &
     3134          ibas_con, &
     3135          cldfra, &
     3136          iim, &
     3137          jjm, &
     3138          tr_seri, &
     3139          ftsol, &
     3140          paprs, &
     3141          cdragh, &
     3142          cdragm, &
     3143          pctsrf, &
     3144          pdtphys, &
     3145          itap)
     3146
     3147     CALL VTe(VTinca)
     3148     CALL VTb(VTphysiq)
    31493149#endif
    3150       END IF !type_trac = inca
    3151 !     
    3152 ! Calculer les parametres optiques des nuages et quelques
    3153 ! parametres pour diagnostiques:
    3154 !
    3155 
    3156       IF (aerosol_couple) THEN
    3157          mass_solu_aero(:,:)    = ccm(:,:,1)
    3158          mass_solu_aero_pi(:,:) = ccm(:,:,2)
    3159       END IF
    3160 
    3161       if (ok_newmicro) then
    3162       CALL newmicro (ok_cdnc, bl95_b0, bl95_b1, &
    3163                     paprs, pplay, t_seri, cldliq, cldfra, &
    3164                     cldtau, cldemi, cldh, cldl, cldm, cldt, cldq, &
    3165                     flwp, fiwp, flwc, fiwc, &
    3166                     mass_solu_aero, mass_solu_aero_pi, &
    3167                     cldtaupi, re, fl, ref_liq, ref_ice)
    3168       else
    3169       CALL nuage (paprs, pplay, &
    3170                   t_seri, cldliq, cldfra, cldtau, cldemi, &
    3171                   cldh, cldl, cldm, cldt, cldq, &
    3172                   ok_aie, &
    3173                   mass_solu_aero, mass_solu_aero_pi, &
    3174                   bl95_b0, bl95_b1, &
    3175                   cldtaupi, re, fl)
    3176       endif
    3177 !
    3178 !IM betaCRF
    3179 !
    3180       cldtaurad   = cldtau
    3181       cldtaupirad = cldtaupi
    3182       cldemirad   = cldemi
    3183      
    3184 !
    3185       if(lon1_beta.EQ.-180..AND.lon2_beta.EQ.180..AND. &
    3186       lat1_beta.EQ.90..AND.lat2_beta.EQ.-90.) THEN
    3187 !
    3188 ! global
    3189 !
    3190        DO k=1, klev
    3191        DO i=1, klon
    3192         if (pplay(i,k).GE.pfree) THEN
    3193          beta(i,k) = beta_pbl
    3194         else
    3195          beta(i,k) = beta_free
    3196         endif
    3197         if (mskocean_beta) THEN
    3198          beta(i,k) = beta(i,k) * pctsrf(i,is_oce)
    3199         endif
    3200         cldtaurad(i,k)   = cldtau(i,k) * beta(i,k)
    3201         cldtaupirad(i,k) = cldtaupi(i,k) * beta(i,k)
    3202         cldemirad(i,k)   = cldemi(i,k) * beta(i,k)
    3203         cldfrarad(i,k)   = cldfra(i,k) * beta(i,k)
    3204        ENDDO
    3205        ENDDO
    3206 !
    3207       else
    3208 !
    3209 ! regional
    3210 !
    3211        DO k=1, klev
    3212        DO i=1,klon
    3213 !
    3214         if (rlon(i).ge.lon1_beta.AND.rlon(i).le.lon2_beta.AND. &
    3215             rlat(i).le.lat1_beta.AND.rlat(i).ge.lat2_beta) THEN
    3216          if (pplay(i,k).GE.pfree) THEN
    3217           beta(i,k) = beta_pbl
    3218          else
    3219           beta(i,k) = beta_free
    3220          endif
    3221          if (mskocean_beta) THEN
    3222           beta(i,k) = beta(i,k) * pctsrf(i,is_oce)
    3223          endif
    3224         cldtaurad(i,k)   = cldtau(i,k) * beta(i,k)
    3225         cldtaupirad(i,k) = cldtaupi(i,k) * beta(i,k)
    3226         cldemirad(i,k)   = cldemi(i,k) * beta(i,k)
    3227         cldfrarad(i,k)   = cldfra(i,k) * beta(i,k)
    3228         endif
    3229 !
    3230        ENDDO
    3231        ENDDO
    3232 !
    3233       endif
    3234 !
    3235 ! Appeler le rayonnement mais calculer tout d'abord l'albedo du sol.
    3236 !
    3237       IF (MOD(itaprad,radpas).EQ.0) THEN
    3238 
    3239       DO i = 1, klon
    3240          albsol1(i) = falb1(i,is_oce) * pctsrf(i,is_oce) &
    3241                    + falb1(i,is_lic) * pctsrf(i,is_lic) &
    3242                    + falb1(i,is_ter) * pctsrf(i,is_ter) &
    3243                    + falb1(i,is_sic) * pctsrf(i,is_sic)
    3244          albsol2(i) = falb2(i,is_oce) * pctsrf(i,is_oce) &
    3245                      + falb2(i,is_lic) * pctsrf(i,is_lic) &
    3246                      + falb2(i,is_ter) * pctsrf(i,is_ter) &
    3247                      + falb2(i,is_sic) * pctsrf(i,is_sic)
    3248       ENDDO
    3249 
    3250       if (mydebug) then
    3251         call writefield_phy('u_seri',u_seri,llm)
    3252         call writefield_phy('v_seri',v_seri,llm)
    3253         call writefield_phy('t_seri',t_seri,llm)
    3254        call writefield_phy('q_seri',q_seri,llm)
    3255       endif
    3256      
    3257       IF (aerosol_couple) THEN
    3258 #ifdef INCA
    3259          CALL radlwsw_inca  &
    3260               (kdlon,kflev,dist, rmu0, fract, solaire, &
    3261               paprs, pplay,zxtsol,albsol1, albsol2, t_seri,q_seri, &
    3262               wo(:, :, 1), &
    3263               cldfrarad, cldemirad, cldtaurad, &
    3264               heat,heat0,cool,cool0,radsol,albpla, &
    3265               topsw,toplw,solsw,sollw, &
    3266               sollwdown, &
    3267               topsw0,toplw0,solsw0,sollw0, &
    3268               lwdn0, lwdn, lwup0, lwup,  &
    3269               swdn0, swdn, swup0, swup, &
    3270               ok_ade, ok_aie, &
    3271               tau_aero, piz_aero, cg_aero, &
    3272               topswad_aero, solswad_aero, &
    3273               topswad0_aero, solswad0_aero, &
    3274               topsw_aero, topsw0_aero, &
    3275               solsw_aero, solsw0_aero, &
    3276               cldtaupirad, &
    3277               topswai_aero, solswai_aero)
    3278            
    3279 #endif
    3280       ELSE
    3281 !
    3282 !IM calcul radiatif pour le cas actuel
    3283 !
    3284        RCO2 = RCO2_act
    3285        RCH4 = RCH4_act
    3286        RN2O = RN2O_act
    3287        RCFC11 = RCFC11_act
    3288        RCFC12 = RCFC12_act
    3289 !
    3290       IF (prt_level .GE.10) THEN
    3291        print *,' ->radlwsw, number 1 '
    3292       ENDIF
    3293 !
    3294          CALL radlwsw &
    3295               (dist, rmu0, fract,  &
    3296               paprs, pplay,zxtsol,albsol1, albsol2,  &
    3297               t_seri,q_seri,wo, &
    3298               cldfrarad, cldemirad, cldtaurad, &
    3299               ok_ade.OR.flag_aerosol_strat, ok_aie, flag_aerosol, &
    3300               flag_aerosol_strat, &
    3301               tau_aero, piz_aero, cg_aero, &
    3302               cldtaupirad,new_aod, &
    3303               zqsat, flwc, fiwc, &
    3304               heat,heat0,cool,cool0,radsol,albpla, &
    3305               topsw,toplw,solsw,sollw, &
    3306               sollwdown, &
    3307               topsw0,toplw0,solsw0,sollw0, &
    3308               lwdn0, lwdn, lwup0, lwup,  &
    3309               swdn0, swdn, swup0, swup, &
    3310               topswad_aero, solswad_aero, &
    3311               topswai_aero, solswai_aero, &
    3312               topswad0_aero, solswad0_aero, &
    3313               topsw_aero, topsw0_aero, &
    3314               solsw_aero, solsw0_aero, &
    3315               topswcf_aero, solswcf_aero)
    3316          
    3317 !
    3318 !IM 2eme calcul radiatif pour le cas perturbe ou au moins un
    3319 !IM des taux doit etre different du taux actuel
    3320 !IM Par defaut on a les taux perturbes egaux aux taux actuels
    3321 !
    3322       if (ok_4xCO2atm) then
    3323        if (RCO2_per.NE.RCO2_act.OR.RCH4_per.NE.RCH4_act.OR. &
    3324       RN2O_per.NE.RN2O_act.OR.RCFC11_per.NE.RCFC11_act.OR. &
    3325       RCFC12_per.NE.RCFC12_act) THEN
    3326 !
    3327        RCO2 = RCO2_per
    3328        RCH4 = RCH4_per
    3329        RN2O = RN2O_per
    3330        RCFC11 = RCFC11_per
    3331        RCFC12 = RCFC12_per
    3332 !
    3333       IF (prt_level .GE.10) THEN
    3334        print *,' ->radlwsw, number 2 '
    3335       ENDIF
    3336 !
    3337          CALL radlwsw &
    3338               (dist, rmu0, fract,  &
    3339               paprs, pplay,zxtsol,albsol1, albsol2,  &
    3340               t_seri,q_seri,wo, &
    3341               cldfra, cldemi, cldtau, &
    3342               ok_ade.OR.flag_aerosol_strat, ok_aie, flag_aerosol, &
    3343               flag_aerosol_strat, &
    3344               tau_aero, piz_aero, cg_aero, &
    3345               cldtaupi,new_aod, &
    3346               zqsat, flwc, fiwc, &
    3347               heatp,heat0p,coolp,cool0p,radsolp,albplap, &
    3348               topswp,toplwp,solswp,sollwp, &
    3349               sollwdownp, &
    3350               topsw0p,toplw0p,solsw0p,sollw0p, &
    3351               lwdn0p, lwdnp, lwup0p, lwupp,  &
    3352               swdn0p, swdnp, swup0p, swupp, &
    3353               topswad_aerop, solswad_aerop, &
    3354               topswai_aerop, solswai_aerop, &
    3355               topswad0_aerop, solswad0_aerop, &
    3356               topsw_aerop, topsw0_aerop, &
    3357               solsw_aerop, solsw0_aerop, &
    3358               topswcf_aerop, solswcf_aerop)
    3359        endif
    3360       endif
    3361 !
    3362       ENDIF ! aerosol_couple
    3363       itaprad = 0
    3364       ENDIF ! MOD(itaprad,radpas)
    3365       itaprad = itaprad + 1
    3366 
    3367       IF (iflag_radia.eq.0) THEN
    3368          IF (prt_level.ge.9) THEN
    3369             PRINT *,'--------------------------------------------------'
    3370             PRINT *,'>>>> ATTENTION rayonnement desactive pour ce cas'
    3371             PRINT *,'>>>>           heat et cool mis a zero '
    3372             PRINT *,'--------------------------------------------------'
    3373          END IF
    3374          heat=0.
    3375          cool=0.
    3376          sollw=0.   ! MPL 01032011
    3377          solsw=0.
    3378          radsol=0.
    3379          swup=0.    ! MPL 27102011 pour les fichiers AMMA_profiles et AMMA_scalars
    3380          swup0=0.
    3381          swdn=0.
    3382          swdn0=0.
    3383          lwup=0.
    3384          lwup0=0.
    3385          lwdn=0.
    3386          lwdn0=0.
    3387       END IF
    3388 
    3389 !
    3390 ! Ajouter la tendance des rayonnements (tous les pas)
    3391 !
    3392       DO k = 1, klev
    3393       DO i = 1, klon
    3394          t_seri(i,k) = t_seri(i,k) &
    3395                      + (heat(i,k)-cool(i,k)) * dtime/RDAY
    3396       ENDDO
    3397       ENDDO
    3398 !
    3399       if (mydebug) then
     3150  END IF !type_trac = inca
     3151  !     
     3152  ! Calculer les parametres optiques des nuages et quelques
     3153  ! parametres pour diagnostiques:
     3154  !
     3155
     3156  IF (aerosol_couple) THEN
     3157     mass_solu_aero(:,:)    = ccm(:,:,1)
     3158     mass_solu_aero_pi(:,:) = ccm(:,:,2)
     3159  END IF
     3160
     3161  if (ok_newmicro) then
     3162     CALL newmicro (ok_cdnc, bl95_b0, bl95_b1, &
     3163          paprs, pplay, t_seri, cldliq, cldfra, &
     3164          cldtau, cldemi, cldh, cldl, cldm, cldt, cldq, &
     3165          flwp, fiwp, flwc, fiwc, &
     3166          mass_solu_aero, mass_solu_aero_pi, &
     3167          cldtaupi, re, fl, ref_liq, ref_ice)
     3168  else
     3169     CALL nuage (paprs, pplay, &
     3170          t_seri, cldliq, cldfra, cldtau, cldemi, &
     3171          cldh, cldl, cldm, cldt, cldq, &
     3172          ok_aie, &
     3173          mass_solu_aero, mass_solu_aero_pi, &
     3174          bl95_b0, bl95_b1, &
     3175          cldtaupi, re, fl)
     3176  endif
     3177  !
     3178  !IM betaCRF
     3179  !
     3180  cldtaurad   = cldtau
     3181  cldtaupirad = cldtaupi
     3182  cldemirad   = cldemi
     3183
     3184  !
     3185  if(lon1_beta.EQ.-180..AND.lon2_beta.EQ.180..AND. &
     3186       lat1_beta.EQ.90..AND.lat2_beta.EQ.-90.) THEN
     3187     !
     3188     ! global
     3189     !
     3190     DO k=1, klev
     3191        DO i=1, klon
     3192           if (pplay(i,k).GE.pfree) THEN
     3193              beta(i,k) = beta_pbl
     3194           else
     3195              beta(i,k) = beta_free
     3196           endif
     3197           if (mskocean_beta) THEN
     3198              beta(i,k) = beta(i,k) * pctsrf(i,is_oce)
     3199           endif
     3200           cldtaurad(i,k)   = cldtau(i,k) * beta(i,k)
     3201           cldtaupirad(i,k) = cldtaupi(i,k) * beta(i,k)
     3202           cldemirad(i,k)   = cldemi(i,k) * beta(i,k)
     3203           cldfrarad(i,k)   = cldfra(i,k) * beta(i,k)
     3204        ENDDO
     3205     ENDDO
     3206     !
     3207  else
     3208     !
     3209     ! regional
     3210     !
     3211     DO k=1, klev
     3212        DO i=1,klon
     3213           !
     3214           if (rlon(i).ge.lon1_beta.AND.rlon(i).le.lon2_beta.AND. &
     3215                rlat(i).le.lat1_beta.AND.rlat(i).ge.lat2_beta) THEN
     3216              if (pplay(i,k).GE.pfree) THEN
     3217                 beta(i,k) = beta_pbl
     3218              else
     3219                 beta(i,k) = beta_free
     3220              endif
     3221              if (mskocean_beta) THEN
     3222                 beta(i,k) = beta(i,k) * pctsrf(i,is_oce)
     3223              endif
     3224              cldtaurad(i,k)   = cldtau(i,k) * beta(i,k)
     3225              cldtaupirad(i,k) = cldtaupi(i,k) * beta(i,k)
     3226              cldemirad(i,k)   = cldemi(i,k) * beta(i,k)
     3227              cldfrarad(i,k)   = cldfra(i,k) * beta(i,k)
     3228           endif
     3229           !
     3230        ENDDO
     3231     ENDDO
     3232     !
     3233  endif
     3234  !
     3235  ! Appeler le rayonnement mais calculer tout d'abord l'albedo du sol.
     3236  !
     3237  IF (MOD(itaprad,radpas).EQ.0) THEN
     3238
     3239     DO i = 1, klon
     3240        albsol1(i) = falb1(i,is_oce) * pctsrf(i,is_oce) &
     3241             + falb1(i,is_lic) * pctsrf(i,is_lic) &
     3242             + falb1(i,is_ter) * pctsrf(i,is_ter) &
     3243             + falb1(i,is_sic) * pctsrf(i,is_sic)
     3244        albsol2(i) = falb2(i,is_oce) * pctsrf(i,is_oce) &
     3245             + falb2(i,is_lic) * pctsrf(i,is_lic) &
     3246             + falb2(i,is_ter) * pctsrf(i,is_ter) &
     3247             + falb2(i,is_sic) * pctsrf(i,is_sic)
     3248     ENDDO
     3249
     3250     if (mydebug) then
    34003251        call writefield_phy('u_seri',u_seri,llm)
    34013252        call writefield_phy('v_seri',v_seri,llm)
    34023253        call writefield_phy('t_seri',t_seri,llm)
    34033254        call writefield_phy('q_seri',q_seri,llm)
    3404       endif
    3405  
    3406 !IM
    3407       IF (ip_ebil_phy.ge.2) THEN
    3408         ztit='after rad'
    3409         CALL diagetpq(airephy,ztit,ip_ebil_phy,2,2,dtime &
    3410             , t_seri,q_seri,ql_seri,qs_seri,u_seri,v_seri,paprs,pplay &
    3411             , d_h_vcol, d_qt, d_qw, d_ql, d_qs, d_ec)
    3412         call diagphy(airephy,ztit,ip_ebil_phy &
    3413             , topsw, toplw, solsw, sollw, zero_v &
    3414             , zero_v, zero_v, zero_v, ztsol &
    3415             , d_h_vcol, d_qt, d_ec &
    3416             , fs_bound, fq_bound )
    3417       END IF
    3418 !
    3419 !
    3420 ! Calculer l'hydrologie de la surface
    3421 !
    3422 !      CALL hydrol(dtime,pctsrf,rain_fall, snow_fall, zxevap,
    3423 !     .            agesno, ftsol,fqsurf,fsnow, ruis)
    3424 !
    3425 
    3426 !
    3427 ! Calculer le bilan du sol et la derive de temperature (couplage)
    3428 !
    3429       DO i = 1, klon
    3430 !         bils(i) = radsol(i) - sens(i) - evap(i)*RLVTT
    3431 ! a la demande de JLD
    3432          bils(i) = radsol(i) - sens(i) + zxfluxlat(i)
    3433       ENDDO
    3434 !
    3435 !moddeblott(jan95)
    3436 ! Appeler le programme de parametrisation de l'orographie
    3437 ! a l'echelle sous-maille:
    3438 !
    3439       IF (prt_level .GE.10) THEN
    3440        print *,' call orography ? ', ok_orodr
    3441       ENDIF
    3442 !
    3443       IF (ok_orodr) THEN
    3444 !
    3445 !  selection des points pour lesquels le shema est actif:
    3446         igwd=0
    3447         DO i=1,klon
     3255     endif
     3256
     3257     IF (aerosol_couple) THEN
     3258#ifdef INCA
     3259        CALL radlwsw_inca  &
     3260             (kdlon,kflev,dist, rmu0, fract, solaire, &
     3261             paprs, pplay,zxtsol,albsol1, albsol2, t_seri,q_seri, &
     3262             wo(:, :, 1), &
     3263             cldfrarad, cldemirad, cldtaurad, &
     3264             heat,heat0,cool,cool0,radsol,albpla, &
     3265             topsw,toplw,solsw,sollw, &
     3266             sollwdown, &
     3267             topsw0,toplw0,solsw0,sollw0, &
     3268             lwdn0, lwdn, lwup0, lwup,  &
     3269             swdn0, swdn, swup0, swup, &
     3270             ok_ade, ok_aie, &
     3271             tau_aero, piz_aero, cg_aero, &
     3272             topswad_aero, solswad_aero, &
     3273             topswad0_aero, solswad0_aero, &
     3274             topsw_aero, topsw0_aero, &
     3275             solsw_aero, solsw0_aero, &
     3276             cldtaupirad, &
     3277             topswai_aero, solswai_aero)
     3278
     3279#endif
     3280     ELSE
     3281        !
     3282        !IM calcul radiatif pour le cas actuel
     3283        !
     3284        RCO2 = RCO2_act
     3285        RCH4 = RCH4_act
     3286        RN2O = RN2O_act
     3287        RCFC11 = RCFC11_act
     3288        RCFC12 = RCFC12_act
     3289        !
     3290        IF (prt_level .GE.10) THEN
     3291           print *,' ->radlwsw, number 1 '
     3292        ENDIF
     3293        !
     3294        CALL radlwsw &
     3295             (dist, rmu0, fract,  &
     3296             paprs, pplay,zxtsol,albsol1, albsol2,  &
     3297             t_seri,q_seri,wo, &
     3298             cldfrarad, cldemirad, cldtaurad, &
     3299             ok_ade.OR.flag_aerosol_strat, ok_aie, flag_aerosol, &
     3300             flag_aerosol_strat, &
     3301             tau_aero, piz_aero, cg_aero, &
     3302             cldtaupirad,new_aod, &
     3303             zqsat, flwc, fiwc, &
     3304             heat,heat0,cool,cool0,radsol,albpla, &
     3305             topsw,toplw,solsw,sollw, &
     3306             sollwdown, &
     3307             topsw0,toplw0,solsw0,sollw0, &
     3308             lwdn0, lwdn, lwup0, lwup,  &
     3309             swdn0, swdn, swup0, swup, &
     3310             topswad_aero, solswad_aero, &
     3311             topswai_aero, solswai_aero, &
     3312             topswad0_aero, solswad0_aero, &
     3313             topsw_aero, topsw0_aero, &
     3314             solsw_aero, solsw0_aero, &
     3315             topswcf_aero, solswcf_aero)
     3316
     3317        !
     3318        !IM 2eme calcul radiatif pour le cas perturbe ou au moins un
     3319        !IM des taux doit etre different du taux actuel
     3320        !IM Par defaut on a les taux perturbes egaux aux taux actuels
     3321        !
     3322        if (ok_4xCO2atm) then
     3323           if (RCO2_per.NE.RCO2_act.OR.RCH4_per.NE.RCH4_act.OR. &
     3324                RN2O_per.NE.RN2O_act.OR.RCFC11_per.NE.RCFC11_act.OR. &
     3325                RCFC12_per.NE.RCFC12_act) THEN
     3326              !
     3327              RCO2 = RCO2_per
     3328              RCH4 = RCH4_per
     3329              RN2O = RN2O_per
     3330              RCFC11 = RCFC11_per
     3331              RCFC12 = RCFC12_per
     3332              !
     3333              IF (prt_level .GE.10) THEN
     3334                 print *,' ->radlwsw, number 2 '
     3335              ENDIF
     3336              !
     3337              CALL radlwsw &
     3338                   (dist, rmu0, fract,  &
     3339                   paprs, pplay,zxtsol,albsol1, albsol2,  &
     3340                   t_seri,q_seri,wo, &
     3341                   cldfra, cldemi, cldtau, &
     3342                   ok_ade.OR.flag_aerosol_strat, ok_aie, flag_aerosol, &
     3343                   flag_aerosol_strat, &
     3344                   tau_aero, piz_aero, cg_aero, &
     3345                   cldtaupi,new_aod, &
     3346                   zqsat, flwc, fiwc, &
     3347                   heatp,heat0p,coolp,cool0p,radsolp,albplap, &
     3348                   topswp,toplwp,solswp,sollwp, &
     3349                   sollwdownp, &
     3350                   topsw0p,toplw0p,solsw0p,sollw0p, &
     3351                   lwdn0p, lwdnp, lwup0p, lwupp,  &
     3352                   swdn0p, swdnp, swup0p, swupp, &
     3353                   topswad_aerop, solswad_aerop, &
     3354                   topswai_aerop, solswai_aerop, &
     3355                   topswad0_aerop, solswad0_aerop, &
     3356                   topsw_aerop, topsw0_aerop, &
     3357                   solsw_aerop, solsw0_aerop, &
     3358                   topswcf_aerop, solswcf_aerop)
     3359           endif
     3360        endif
     3361        !
     3362     ENDIF ! aerosol_couple
     3363     itaprad = 0
     3364  ENDIF ! MOD(itaprad,radpas)
     3365  itaprad = itaprad + 1
     3366
     3367  IF (iflag_radia.eq.0) THEN
     3368     IF (prt_level.ge.9) THEN
     3369        PRINT *,'--------------------------------------------------'
     3370        PRINT *,'>>>> ATTENTION rayonnement desactive pour ce cas'
     3371        PRINT *,'>>>>           heat et cool mis a zero '
     3372        PRINT *,'--------------------------------------------------'
     3373     END IF
     3374     heat=0.
     3375     cool=0.
     3376     sollw=0.   ! MPL 01032011
     3377     solsw=0.
     3378     radsol=0.
     3379     swup=0.    ! MPL 27102011 pour les fichiers AMMA_profiles et AMMA_scalars
     3380     swup0=0.
     3381     swdn=0.
     3382     swdn0=0.
     3383     lwup=0.
     3384     lwup0=0.
     3385     lwdn=0.
     3386     lwdn0=0.
     3387  END IF
     3388
     3389  !
     3390  ! Ajouter la tendance des rayonnements (tous les pas)
     3391  !
     3392  DO k = 1, klev
     3393     DO i = 1, klon
     3394        t_seri(i,k) = t_seri(i,k) &
     3395             + (heat(i,k)-cool(i,k)) * dtime/RDAY
     3396     ENDDO
     3397  ENDDO
     3398  !
     3399  if (mydebug) then
     3400     call writefield_phy('u_seri',u_seri,llm)
     3401     call writefield_phy('v_seri',v_seri,llm)
     3402     call writefield_phy('t_seri',t_seri,llm)
     3403     call writefield_phy('q_seri',q_seri,llm)
     3404  endif
     3405
     3406  !IM
     3407  IF (ip_ebil_phy.ge.2) THEN
     3408     ztit='after rad'
     3409     CALL diagetpq(airephy,ztit,ip_ebil_phy,2,2,dtime &
     3410          , t_seri,q_seri,ql_seri,qs_seri,u_seri,v_seri,paprs,pplay &
     3411          , d_h_vcol, d_qt, d_qw, d_ql, d_qs, d_ec)
     3412     call diagphy(airephy,ztit,ip_ebil_phy &
     3413          , topsw, toplw, solsw, sollw, zero_v &
     3414          , zero_v, zero_v, zero_v, ztsol &
     3415          , d_h_vcol, d_qt, d_ec &
     3416          , fs_bound, fq_bound )
     3417  END IF
     3418  !
     3419  !
     3420  ! Calculer l'hydrologie de la surface
     3421  !
     3422  !      CALL hydrol(dtime,pctsrf,rain_fall, snow_fall, zxevap,
     3423  !     .            agesno, ftsol,fqsurf,fsnow, ruis)
     3424  !
     3425
     3426  !
     3427  ! Calculer le bilan du sol et la derive de temperature (couplage)
     3428  !
     3429  DO i = 1, klon
     3430     !         bils(i) = radsol(i) - sens(i) - evap(i)*RLVTT
     3431     ! a la demande de JLD
     3432     bils(i) = radsol(i) - sens(i) + zxfluxlat(i)
     3433  ENDDO
     3434  !
     3435  !moddeblott(jan95)
     3436  ! Appeler le programme de parametrisation de l'orographie
     3437  ! a l'echelle sous-maille:
     3438  !
     3439  IF (prt_level .GE.10) THEN
     3440     print *,' call orography ? ', ok_orodr
     3441  ENDIF
     3442  !
     3443  IF (ok_orodr) THEN
     3444     !
     3445     !  selection des points pour lesquels le shema est actif:
     3446     igwd=0
     3447     DO i=1,klon
    34483448        itest(i)=0
    3449 !        IF ((zstd(i).gt.10.0)) THEN
     3449        !        IF ((zstd(i).gt.10.0)) THEN
    34503450        IF (((zpic(i)-zmea(i)).GT.100.).AND.(zstd(i).GT.10.0)) THEN
    3451           itest(i)=1
    3452           igwd=igwd+1
    3453           idx(igwd)=i
     3451           itest(i)=1
     3452           igwd=igwd+1
     3453           idx(igwd)=i
    34543454        ENDIF
    3455         ENDDO
    3456 !        igwdim=MAX(1,igwd)
    3457 !
    3458         IF (ok_strato) THEN
    3459        
    3460           CALL drag_noro_strato(klon,klev,dtime,paprs,pplay, &
    3461                          zmea,zstd, zsig, zgam, zthe,zpic,zval, &
    3462                          igwd,idx,itest, &
    3463                          t_seri, u_seri, v_seri, &
    3464                          zulow, zvlow, zustrdr, zvstrdr, &
    3465                          d_t_oro, d_u_oro, d_v_oro)
    3466 
    3467        ELSE
     3455     ENDDO
     3456     !        igwdim=MAX(1,igwd)
     3457     !
     3458     IF (ok_strato) THEN
     3459
     3460        CALL drag_noro_strato(klon,klev,dtime,paprs,pplay, &
     3461             zmea,zstd, zsig, zgam, zthe,zpic,zval, &
     3462             igwd,idx,itest, &
     3463             t_seri, u_seri, v_seri, &
     3464             zulow, zvlow, zustrdr, zvstrdr, &
     3465             d_t_oro, d_u_oro, d_v_oro)
     3466
     3467     ELSE
    34683468        CALL drag_noro(klon,klev,dtime,paprs,pplay, &
    3469                          zmea,zstd, zsig, zgam, zthe,zpic,zval, &
    3470                          igwd,idx,itest, &
    3471                          t_seri, u_seri, v_seri, &
    3472                          zulow, zvlow, zustrdr, zvstrdr, &
    3473                          d_t_oro, d_u_oro, d_v_oro)
    3474        ENDIF
    3475 !
    3476 !  ajout des tendances
    3477 !-----------------------------------------------------------------------------------------
    3478 ! ajout des tendances de la trainee de l'orographie
    3479       CALL add_phys_tend(d_u_oro,d_v_oro,d_t_oro,dq0,dql0,'oro')
    3480 !-----------------------------------------------------------------------------------------
    3481 !
    3482       ENDIF ! fin de test sur ok_orodr
    3483 !
    3484       if (mydebug) then
    3485         call writefield_phy('u_seri',u_seri,llm)
    3486         call writefield_phy('v_seri',v_seri,llm)
    3487         call writefield_phy('t_seri',t_seri,llm)
    3488         call writefield_phy('q_seri',q_seri,llm)
    3489       endif
    3490      
    3491       IF (ok_orolf) THEN
    3492 !
    3493 !  selection des points pour lesquels le shema est actif:
    3494         igwd=0
    3495         DO i=1,klon
     3469             zmea,zstd, zsig, zgam, zthe,zpic,zval, &
     3470             igwd,idx,itest, &
     3471             t_seri, u_seri, v_seri, &
     3472             zulow, zvlow, zustrdr, zvstrdr, &
     3473             d_t_oro, d_u_oro, d_v_oro)
     3474     ENDIF
     3475     !
     3476     !  ajout des tendances
     3477     !-----------------------------------------------------------------------------------------
     3478     ! ajout des tendances de la trainee de l'orographie
     3479     CALL add_phys_tend(d_u_oro,d_v_oro,d_t_oro,dq0,dql0,'oro')
     3480     !-----------------------------------------------------------------------------------------
     3481     !
     3482  ENDIF ! fin de test sur ok_orodr
     3483  !
     3484  if (mydebug) then
     3485     call writefield_phy('u_seri',u_seri,llm)
     3486     call writefield_phy('v_seri',v_seri,llm)
     3487     call writefield_phy('t_seri',t_seri,llm)
     3488     call writefield_phy('q_seri',q_seri,llm)
     3489  endif
     3490
     3491  IF (ok_orolf) THEN
     3492     !
     3493     !  selection des points pour lesquels le shema est actif:
     3494     igwd=0
     3495     DO i=1,klon
    34963496        itest(i)=0
    34973497        IF ((zpic(i)-zmea(i)).GT.100.) THEN
    3498           itest(i)=1
    3499           igwd=igwd+1
    3500           idx(igwd)=i
     3498           itest(i)=1
     3499           igwd=igwd+1
     3500           idx(igwd)=i
    35013501        ENDIF
     3502     ENDDO
     3503     !        igwdim=MAX(1,igwd)
     3504     !
     3505     IF (ok_strato) THEN
     3506
     3507        CALL lift_noro_strato(klon,klev,dtime,paprs,pplay, &
     3508             rlat,zmea,zstd,zpic,zgam,zthe,zpic,zval, &
     3509             igwd,idx,itest, &
     3510             t_seri, u_seri, v_seri, &
     3511             zulow, zvlow, zustrli, zvstrli, &
     3512             d_t_lif, d_u_lif, d_v_lif               )
     3513
     3514     ELSE
     3515        CALL lift_noro(klon,klev,dtime,paprs,pplay, &
     3516             rlat,zmea,zstd,zpic, &
     3517             itest, &
     3518             t_seri, u_seri, v_seri, &
     3519             zulow, zvlow, zustrli, zvstrli, &
     3520             d_t_lif, d_u_lif, d_v_lif)
     3521     ENDIF
     3522     !   
     3523     !-----------------------------------------------------------------------------------------
     3524     ! ajout des tendances de la portance de l'orographie
     3525     CALL add_phys_tend(d_u_lif,d_v_lif,d_t_lif,dq0,dql0,'lif')
     3526     !-----------------------------------------------------------------------------------------
     3527     !
     3528  ENDIF ! fin de test sur ok_orolf
     3529  !  HINES GWD PARAMETRIZATION
     3530
     3531  IF (ok_hines) then
     3532
     3533     CALL hines_gwd(klon,klev,dtime,paprs,pplay, &
     3534          rlat,t_seri,u_seri,v_seri, &
     3535          zustrhi,zvstrhi, &
     3536          d_t_hin, d_u_hin, d_v_hin)
     3537     !
     3538     !  ajout des tendances
     3539     CALL add_phys_tend(d_u_hin,d_v_hin,d_t_hin,dq0,dql0,'hin')
     3540
     3541  ENDIF
     3542  !
     3543
     3544  !
     3545  !IM cf. FLott BEG
     3546  ! STRESS NECESSAIRES: TOUTE LA PHYSIQUE
     3547
     3548  if (mydebug) then
     3549     call writefield_phy('u_seri',u_seri,llm)
     3550     call writefield_phy('v_seri',v_seri,llm)
     3551     call writefield_phy('t_seri',t_seri,llm)
     3552     call writefield_phy('q_seri',q_seri,llm)
     3553  endif
     3554
     3555  DO i = 1, klon
     3556     zustrph(i)=0.
     3557     zvstrph(i)=0.
     3558  ENDDO
     3559  DO k = 1, klev
     3560     DO i = 1, klon
     3561        zustrph(i)=zustrph(i)+(u_seri(i,k)-u(i,k))/dtime* &
     3562             (paprs(i,k)-paprs(i,k+1))/rg
     3563        zvstrph(i)=zvstrph(i)+(v_seri(i,k)-v(i,k))/dtime* &
     3564             (paprs(i,k)-paprs(i,k+1))/rg
     3565     ENDDO
     3566  ENDDO
     3567  !
     3568  !IM calcul composantes axiales du moment angulaire et couple des montagnes
     3569  !
     3570  IF (is_sequential .and. ok_orodr) THEN
     3571     CALL aaam_bud (27,klon,klev,jD_cur-jD_ref,jH_cur, &
     3572          ra,rg,romega, &
     3573          rlat,rlon,pphis, &
     3574          zustrdr,zustrli,zustrph, &
     3575          zvstrdr,zvstrli,zvstrph, &
     3576          paprs,u,v, &
     3577          aam, torsfc)
     3578  ENDIF
     3579  !IM cf. FLott END
     3580  !IM
     3581  IF (ip_ebil_phy.ge.2) THEN
     3582     ztit='after orography'
     3583     CALL diagetpq(airephy,ztit,ip_ebil_phy,2,2,dtime &
     3584          , t_seri,q_seri,ql_seri,qs_seri,u_seri,v_seri,paprs,pplay &
     3585          , d_h_vcol, d_qt, d_qw, d_ql, d_qs, d_ec)
     3586     call diagphy(airephy,ztit,ip_ebil_phy &
     3587          , zero_v, zero_v, zero_v, zero_v, zero_v &
     3588          , zero_v, zero_v, zero_v, ztsol &
     3589          , d_h_vcol, d_qt, d_ec &
     3590          , fs_bound, fq_bound )
     3591  END IF
     3592  !
     3593  !
     3594  !====================================================================
     3595  ! Interface Simulateur COSP (Calipso, ISCCP, MISR, ..)
     3596  !====================================================================
     3597  ! Abderrahmane 24.08.09
     3598
     3599  IF (ok_cosp) THEN
     3600     ! adeclarer
     3601#ifdef CPP_COSP
     3602     IF (MOD(itap,NINT(freq_cosp/dtime)).EQ.0) THEN
     3603
     3604        print*,'freq_cosp',freq_cosp
     3605        mr_ozone=wo(:, :, 1) * dobson_u * 1e3 / zmasse
     3606        !       print*,'Dans physiq.F avant appel cosp ref_liq,ref_ice=',
     3607        !     s        ref_liq,ref_ice
     3608        call phys_cosp(itap,dtime,freq_cosp, &
     3609             ok_mensuelCOSP,ok_journeCOSP,ok_hfCOSP, &
     3610             ecrit_mth,ecrit_day,ecrit_hf, &
     3611             klon,klev,rlon,rlat,presnivs,overlap, &
     3612             ref_liq,ref_ice, &
     3613             pctsrf(:,is_ter)+pctsrf(:,is_lic), &
     3614             zu10m,zv10m,pphis, &
     3615             zphi,paprs(:,1:klev),pplay,zxtsol,t_seri, &
     3616             qx(:,:,ivap),zx_rh,cldfra,rnebcon,flwc,fiwc, &
     3617             prfl(:,1:klev),psfl(:,1:klev), &
     3618             pmflxr(:,1:klev),pmflxs(:,1:klev), &
     3619             mr_ozone,cldtau, cldemi)
     3620
     3621        !     L          calipso2D,calipso3D,cfadlidar,parasolrefl,atb,betamol,
     3622        !     L          cfaddbze,clcalipso2,dbze,cltlidarradar,
     3623        !     M          clMISR,
     3624        !     R          clisccp2,boxtauisccp,boxptopisccp,tclisccp,ctpisccp,
     3625        !     I          tauisccp,albisccp,meantbisccp,meantbclrisccp)
     3626
     3627     ENDIF
     3628
     3629#endif
     3630  ENDIF  !ok_cosp
     3631!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
     3632  !AA
     3633  !AA Installation de l'interface online-offline pour traceurs
     3634  !AA
     3635  !====================================================================
     3636  !   Calcul  des tendances traceurs
     3637  !====================================================================
     3638  !
     3639
     3640  IF (type_trac=='repr') THEN
     3641     sh_in(:,:) = q_seri(:,:)
     3642  ELSE
     3643     sh_in(:,:) = qx(:,:,ivap)
     3644  END IF
     3645
     3646  call phytrac ( &
     3647       itap,     days_elapsed+1,    jH_cur,   debut, &
     3648       lafin,    dtime,     u, v,     t, &
     3649       paprs,    pplay,     pmfu,     pmfd, &
     3650       pen_u,    pde_u,     pen_d,    pde_d, &
     3651       cdragh,   coefh(:,:,is_ave),   fm_therm, entr_therm, &
     3652       u1,       v1,        ftsol,    pctsrf, &
     3653       zustar,   zu10m,     zv10m, &
     3654       wstar(:,is_ave),    ale_bl,         ale_wake, &
     3655       rlat,     rlon, &
     3656       frac_impa,frac_nucl, beta_prec_fisrt,beta_prec, &
     3657       presnivs, pphis,     pphi,     albsol1, &
     3658       sh_in,    rhcl,      cldfra,   rneb, &
     3659       diafra,   cldliq,    itop_con, ibas_con, &
     3660       pmflxr,   pmflxs,    prfl,     psfl, &
     3661       da,       phi,       mp,       upwd, &
     3662       phi2,     d1a,       dam,      sij, &        !<<RomP
     3663       wdtrainA, wdtrainM,  sigd,     clw,elij, &   !<<RomP
     3664       ev,       ep,        epmlmMm,  eplaMm, &     !<<RomP
     3665       dnwd,     aerosol_couple,      flxmass_w, &
     3666       tau_aero, piz_aero,  cg_aero,  ccm, &
     3667       rfname, &
     3668       d_tr_dyn, &                                 !<<RomP
     3669       tr_seri)
     3670
     3671  IF (offline) THEN
     3672
     3673     IF (prt_level.ge.9) &
     3674          print*,'Attention on met a 0 les thermiques pour phystoke'
     3675     call phystokenc ( &
     3676          nlon,klev,pdtphys,rlon,rlat, &
     3677          t,pmfu, pmfd, pen_u, pde_u, pen_d, pde_d, &
     3678          fm_therm,entr_therm, &
     3679          cdragh,coefh(:,:,is_ave),u1,v1,ftsol,pctsrf, &
     3680          frac_impa, frac_nucl, &
     3681          pphis,airephy,dtime,itap, &
     3682          qx(:,:,ivap),da,phi,mp,upwd,dnwd)
     3683
     3684
     3685  ENDIF
     3686
     3687  !
     3688  ! Calculer le transport de l'eau et de l'energie (diagnostique)
     3689  !
     3690  CALL transp (paprs,zxtsol, &
     3691       t_seri, q_seri, u_seri, v_seri, zphi, &
     3692       ve, vq, ue, uq)
     3693  !
     3694  !IM global posePB BEG
     3695  IF(1.EQ.0) THEN
     3696     !
     3697     CALL transp_lay (paprs,zxtsol, &
     3698          t_seri, q_seri, u_seri, v_seri, zphi, &
     3699          ve_lay, vq_lay, ue_lay, uq_lay)
     3700     !
     3701  ENDIF !(1.EQ.0) THEN
     3702  !IM global posePB END
     3703  ! Accumuler les variables a stocker dans les fichiers histoire:
     3704  !
     3705
     3706  !================================================================
     3707  ! Conversion of kinetic and potential energy into heat, for
     3708  ! parameterisation of subgrid-scale motions
     3709  !================================================================
     3710
     3711  d_t_ec(:,:)=0.
     3712  forall (k=1: llm) exner(:, k) = (pplay(:, k)/paprs(:,1))**RKAPPA
     3713  CALL ener_conserv(klon,klev,pdtphys,u,v,t,qx(:,:,ivap), &
     3714       u_seri,v_seri,t_seri,q_seri,pbl_tke(:,:,is_ave)-tke0(:,:), &
     3715       zmasse,exner,d_t_ec)
     3716  t_seri(:,:)=t_seri(:,:)+d_t_ec(:,:)
     3717
     3718  !IM
     3719  IF (ip_ebil_phy.ge.1) THEN
     3720     ztit='after physic'
     3721     CALL diagetpq(airephy,ztit,ip_ebil_phy,1,1,dtime &
     3722          , t_seri,q_seri,ql_seri,qs_seri,u_seri,v_seri,paprs,pplay &
     3723          , d_h_vcol, d_qt, d_qw, d_ql, d_qs, d_ec)
     3724     !     Comme les tendances de la physique sont ajoute dans la dynamique,
     3725     !     on devrait avoir que la variation d'entalpie par la dynamique
     3726     !     est egale a la variation de la physique au pas de temps precedent.
     3727     !     Donc la somme de ces 2 variations devrait etre nulle.
     3728
     3729     call diagphy(airephy,ztit,ip_ebil_phy &
     3730          , topsw, toplw, solsw, sollw, sens &
     3731          , evap, rain_fall, snow_fall, ztsol &
     3732          , d_h_vcol, d_qt, d_ec &
     3733          , fs_bound, fq_bound )
     3734     !
     3735     d_h_vcol_phy=d_h_vcol
     3736     !
     3737  END IF
     3738  !
     3739  !=======================================================================
     3740  !   SORTIES
     3741  !=======================================================================
     3742
     3743  !IM Interpolation sur les niveaux de pression du NMC
     3744  !   -------------------------------------------------
     3745  !
     3746  include "calcul_STDlev.h"
     3747  !
     3748  ! slp sea level pressure
     3749  slp(:) = paprs(:,1)*exp(pphis(:)/(RD*t_seri(:,1)))
     3750  !
     3751  !cc prw = eau precipitable
     3752  DO i = 1, klon
     3753     prw(i) = 0.
     3754     DO k = 1, klev
     3755        prw(i) = prw(i) + &
     3756             q_seri(i,k)*(paprs(i,k)-paprs(i,k+1))/RG
     3757     ENDDO
     3758  ENDDO
     3759  !
     3760  !IM initialisation + calculs divers diag AMIP2
     3761  !
     3762  include "calcul_divers.h"
     3763  !
     3764  IF (type_trac == 'inca') THEN
     3765#ifdef INCA
     3766     CALL VTe(VTphysiq)
     3767     CALL VTb(VTinca)
     3768
     3769     CALL chemhook_end ( &
     3770          dtime, &
     3771          pplay, &
     3772          t_seri, &
     3773          tr_seri, &
     3774          nbtr, &
     3775          paprs, &
     3776          q_seri, &
     3777          airephy, &
     3778          pphi, &
     3779          pphis, &
     3780          zx_rh)
     3781
     3782     CALL VTe(VTinca)
     3783     CALL VTb(VTphysiq)
     3784#endif
     3785  END IF
     3786
     3787
     3788  !
     3789  ! Convertir les incrementations en tendances
     3790  !
     3791  IF (prt_level .GE.10) THEN
     3792     print *,'Convertir les incrementations en tendances '
     3793  ENDIF
     3794  !
     3795  if (mydebug) then
     3796     call writefield_phy('u_seri',u_seri,llm)
     3797     call writefield_phy('v_seri',v_seri,llm)
     3798     call writefield_phy('t_seri',t_seri,llm)
     3799     call writefield_phy('q_seri',q_seri,llm)
     3800  endif
     3801
     3802  DO k = 1, klev
     3803     DO i = 1, klon
     3804        d_u(i,k) = ( u_seri(i,k) - u(i,k) ) / dtime
     3805        d_v(i,k) = ( v_seri(i,k) - v(i,k) ) / dtime
     3806        d_t(i,k) = ( t_seri(i,k)-t(i,k) ) / dtime
     3807        d_qx(i,k,ivap) = ( q_seri(i,k) - qx(i,k,ivap) ) / dtime
     3808        d_qx(i,k,iliq) = ( ql_seri(i,k) - qx(i,k,iliq) ) / dtime
     3809     ENDDO
     3810  ENDDO
     3811  !
     3812  IF (nqtot.GE.3) THEN
     3813     DO iq = 3, nqtot
     3814        DO  k = 1, klev
     3815           DO  i = 1, klon
     3816              d_qx(i,k,iq) = ( tr_seri(i,k,iq-2) - qx(i,k,iq) ) / dtime
     3817           ENDDO
    35023818        ENDDO
    3503 !        igwdim=MAX(1,igwd)
    3504 !
    3505         IF (ok_strato) THEN
    3506 
    3507           CALL lift_noro_strato(klon,klev,dtime,paprs,pplay, &
    3508                          rlat,zmea,zstd,zpic,zgam,zthe,zpic,zval, &
    3509                          igwd,idx,itest, &
    3510                          t_seri, u_seri, v_seri, &
    3511                          zulow, zvlow, zustrli, zvstrli, &
    3512                          d_t_lif, d_u_lif, d_v_lif               )
    3513        
    3514         ELSE
    3515           CALL lift_noro(klon,klev,dtime,paprs,pplay, &
    3516                          rlat,zmea,zstd,zpic, &
    3517                          itest, &
    3518                          t_seri, u_seri, v_seri, &
    3519                          zulow, zvlow, zustrli, zvstrli, &
    3520                          d_t_lif, d_u_lif, d_v_lif)
    3521        ENDIF
    3522 !   
    3523 !-----------------------------------------------------------------------------------------
    3524 ! ajout des tendances de la portance de l'orographie
    3525       CALL add_phys_tend(d_u_lif,d_v_lif,d_t_lif,dq0,dql0,'lif')
    3526 !-----------------------------------------------------------------------------------------
    3527 !
    3528       ENDIF ! fin de test sur ok_orolf
    3529 !  HINES GWD PARAMETRIZATION
    3530 
    3531        IF (ok_hines) then
    3532 
    3533          CALL hines_gwd(klon,klev,dtime,paprs,pplay, &
    3534                         rlat,t_seri,u_seri,v_seri, &
    3535                         zustrhi,zvstrhi, &
    3536                         d_t_hin, d_u_hin, d_v_hin)
    3537 !
    3538 !  ajout des tendances
    3539         CALL add_phys_tend(d_u_hin,d_v_hin,d_t_hin,dq0,dql0,'hin')
    3540 
    3541       ENDIF
    3542 !
    3543 
    3544 !
    3545 !IM cf. FLott BEG
    3546 ! STRESS NECESSAIRES: TOUTE LA PHYSIQUE
    3547 
    3548       if (mydebug) then
    3549         call writefield_phy('u_seri',u_seri,llm)
    3550         call writefield_phy('v_seri',v_seri,llm)
    3551         call writefield_phy('t_seri',t_seri,llm)
    3552         call writefield_phy('q_seri',q_seri,llm)
    3553       endif
    3554 
    3555       DO i = 1, klon
    3556         zustrph(i)=0.
    3557         zvstrph(i)=0.
    3558       ENDDO
    3559       DO k = 1, klev
    3560       DO i = 1, klon
    3561        zustrph(i)=zustrph(i)+(u_seri(i,k)-u(i,k))/dtime* &
    3562                   (paprs(i,k)-paprs(i,k+1))/rg
    3563        zvstrph(i)=zvstrph(i)+(v_seri(i,k)-v(i,k))/dtime* &
    3564                   (paprs(i,k)-paprs(i,k+1))/rg
    3565       ENDDO
    3566       ENDDO
    3567 !
    3568 !IM calcul composantes axiales du moment angulaire et couple des montagnes
    3569 !
    3570       IF (is_sequential .and. ok_orodr) THEN
    3571         CALL aaam_bud (27,klon,klev,jD_cur-jD_ref,jH_cur, &
    3572                        ra,rg,romega, &
    3573                        rlat,rlon,pphis, &
    3574                        zustrdr,zustrli,zustrph, &
    3575                        zvstrdr,zvstrli,zvstrph, &
    3576                        paprs,u,v, &
    3577                        aam, torsfc)
    3578        ENDIF
    3579 !IM cf. FLott END
    3580 !IM
    3581       IF (ip_ebil_phy.ge.2) THEN
    3582         ztit='after orography'
    3583         CALL diagetpq(airephy,ztit,ip_ebil_phy,2,2,dtime &
    3584             , t_seri,q_seri,ql_seri,qs_seri,u_seri,v_seri,paprs,pplay &
    3585             , d_h_vcol, d_qt, d_qw, d_ql, d_qs, d_ec)
    3586          call diagphy(airephy,ztit,ip_ebil_phy &
    3587             , zero_v, zero_v, zero_v, zero_v, zero_v &
    3588             , zero_v, zero_v, zero_v, ztsol &
    3589             , d_h_vcol, d_qt, d_ec &
    3590             , fs_bound, fq_bound )
    3591       END IF
    3592 !
    3593 !
    3594 !====================================================================
    3595 ! Interface Simulateur COSP (Calipso, ISCCP, MISR, ..)
    3596 !====================================================================
    3597 ! Abderrahmane 24.08.09
    3598 
    3599       IF (ok_cosp) THEN
    3600 ! adeclarer
    3601 #ifdef CPP_COSP
    3602        IF (MOD(itap,NINT(freq_cosp/dtime)).EQ.0) THEN
    3603 
    3604        print*,'freq_cosp',freq_cosp
    3605           mr_ozone=wo(:, :, 1) * dobson_u * 1e3 / zmasse
    3606 !       print*,'Dans physiq.F avant appel cosp ref_liq,ref_ice=',
    3607 !     s        ref_liq,ref_ice
    3608           call phys_cosp(itap,dtime,freq_cosp, &
    3609                          ok_mensuelCOSP,ok_journeCOSP,ok_hfCOSP, &
    3610                          ecrit_mth,ecrit_day,ecrit_hf, &
    3611                          klon,klev,rlon,rlat,presnivs,overlap, &
    3612                          ref_liq,ref_ice, &
    3613                          pctsrf(:,is_ter)+pctsrf(:,is_lic), &
    3614                          zu10m,zv10m,pphis, &
    3615                          zphi,paprs(:,1:klev),pplay,zxtsol,t_seri, &
    3616                          qx(:,:,ivap),zx_rh,cldfra,rnebcon,flwc,fiwc, &
    3617                          prfl(:,1:klev),psfl(:,1:klev), &
    3618                          pmflxr(:,1:klev),pmflxs(:,1:klev), &
    3619                          mr_ozone,cldtau, cldemi)
    3620 
    3621 !     L          calipso2D,calipso3D,cfadlidar,parasolrefl,atb,betamol,
    3622 !     L          cfaddbze,clcalipso2,dbze,cltlidarradar,
    3623 !     M          clMISR,
    3624 !     R          clisccp2,boxtauisccp,boxptopisccp,tclisccp,ctpisccp,
    3625 !     I          tauisccp,albisccp,meantbisccp,meantbclrisccp)
    3626 
    3627          ENDIF
    3628 
     3819     ENDDO
     3820  ENDIF
     3821  !
     3822  !IM rajout diagnostiques bilan KP pour analyse MJO par Jun-Ichi Yano
     3823  !IM global posePB      include "write_bilKP_ins.h"
     3824  !IM global posePB      include "write_bilKP_ave.h"
     3825  !
     3826
     3827  ! Sauvegarder les valeurs de t et q a la fin de la physique:
     3828  !
     3829  DO k = 1, klev
     3830     DO i = 1, klon
     3831        u_ancien(i,k) = u_seri(i,k)
     3832        v_ancien(i,k) = v_seri(i,k)
     3833        t_ancien(i,k) = t_seri(i,k)
     3834        q_ancien(i,k) = q_seri(i,k)
     3835     ENDDO
     3836  ENDDO
     3837
     3838!!! RomP >>>
     3839  IF (nqtot.GE.3) THEN
     3840     DO iq = 3, nqtot
     3841        DO k = 1, klev
     3842           DO i = 1, klon
     3843              tr_ancien(i,k,iq-2) = tr_seri(i,k,iq-2)
     3844           ENDDO
     3845        ENDDO
     3846     ENDDO
     3847  ENDIF
     3848!!! RomP <<<
     3849  !==========================================================================
     3850  ! Sorties des tendances pour un point particulier
     3851  ! a utiliser en 1D, avec igout=1 ou en 3D sur un point particulier
     3852  ! pour le debug
     3853  ! La valeur de igout est attribuee plus haut dans le programme
     3854  !==========================================================================
     3855
     3856  if (prt_level.ge.1) then
     3857     write(lunout,*) 'FIN DE PHYSIQ !!!!!!!!!!!!!!!!!!!!'
     3858     write(lunout,*) &
     3859          'nlon,klev,nqtot,debut,lafin,jD_cur, jH_cur, pdtphys pct tlos'
     3860     write(lunout,*) &
     3861          nlon,klev,nqtot,debut,lafin, jD_cur, jH_cur ,pdtphys, &
     3862          pctsrf(igout,is_ter), pctsrf(igout,is_lic),pctsrf(igout,is_oce), &
     3863          pctsrf(igout,is_sic)
     3864     write(lunout,*) 'd_t_dyn,d_t_con,d_t_lsc,d_t_ajsb,d_t_ajs,d_t_eva'
     3865     do k=1,klev
     3866        write(lunout,*) d_t_dyn(igout,k),d_t_con(igout,k), &
     3867             d_t_lsc(igout,k),d_t_ajsb(igout,k),d_t_ajs(igout,k), &
     3868             d_t_eva(igout,k)
     3869     enddo
     3870     write(lunout,*) 'cool,heat'
     3871     do k=1,klev
     3872        write(lunout,*) cool(igout,k),heat(igout,k)
     3873     enddo
     3874
     3875     write(lunout,*) 'd_t_oli,d_t_vdf,d_t_oro,d_t_lif,d_t_ec'
     3876     do k=1,klev
     3877        write(lunout,*) d_t_oli(igout,k),d_t_vdf(igout,k), &
     3878             d_t_oro(igout,k),d_t_lif(igout,k),d_t_ec(igout,k)
     3879     enddo
     3880
     3881     write(lunout,*) 'd_ps ',d_ps(igout)
     3882     write(lunout,*) 'd_u, d_v, d_t, d_qx1, d_qx2 '
     3883     do k=1,klev
     3884        write(lunout,*) d_u(igout,k),d_v(igout,k),d_t(igout,k), &
     3885             d_qx(igout,k,1),d_qx(igout,k,2)
     3886     enddo
     3887  endif
     3888
     3889  !==========================================================================
     3890
     3891  !============================================================
     3892  !   Calcul de la temperature potentielle
     3893  !============================================================
     3894  DO k = 1, klev
     3895     DO i = 1, klon
     3896        !JYG/IM theta en debut du pas de temps
     3897        !JYG/IM       theta(i,k)=t(i,k)*(100000./pplay(i,k))**(RD/RCPD)
     3898        !JYG/IM theta en fin de pas de temps de physique
     3899        theta(i,k)=t_seri(i,k)*(100000./pplay(i,k))**(RD/RCPD)
     3900        ! thetal: 2 lignes suivantes a decommenter si vous avez les fichiers     MPL 20130625
     3901        ! fth_fonctions.F90 et parkind1.F90
     3902        ! sinon thetal=theta
     3903        !       thetal(i,k)=fth_thetal(pplay(i,k),t_seri(i,k),q_seri(i,k),
     3904        !    :         ql_seri(i,k))
     3905        thetal(i,k)=theta(i,k)
     3906     ENDDO
     3907  ENDDO
     3908  !
     3909
     3910  ! 22.03.04 BEG
     3911  !=============================================================
     3912  !   Ecriture des sorties
     3913  !=============================================================
     3914#ifdef CPP_IOIPSL
     3915
     3916  ! Recupere des varibles calcule dans differents modules
     3917  ! pour ecriture dans histxxx.nc
     3918
     3919  ! Get some variables from module fonte_neige_mod
     3920  CALL fonte_neige_get_vars(pctsrf,  &
     3921       zxfqcalving, zxfqfonte, zxffonte)
     3922
     3923
     3924
     3925
     3926  !=============================================================
     3927  ! Separation entre thermiques et non thermiques dans les sorties
     3928  ! de fisrtilp
     3929  !=============================================================
     3930
     3931  if (iflag_thermals>=1) then
     3932     d_t_lscth=0.
     3933     d_t_lscst=0.
     3934     d_q_lscth=0.
     3935     d_q_lscst=0.
     3936     do k=1,klev
     3937        do i=1,klon
     3938           if (ptconvth(i,k)) then
     3939              d_t_lscth(i,k)=d_t_eva(i,k)+d_t_lsc(i,k)
     3940              d_q_lscth(i,k)=d_q_eva(i,k)+d_q_lsc(i,k)
     3941           else
     3942              d_t_lscst(i,k)=d_t_eva(i,k)+d_t_lsc(i,k)
     3943              d_q_lscst(i,k)=d_q_eva(i,k)+d_q_lsc(i,k)
     3944           endif
     3945        enddo
     3946     enddo
     3947
     3948     do i=1,klon
     3949        plul_st(i)=prfl(i,lmax_th(i)+1)+psfl(i,lmax_th(i)+1)
     3950        plul_th(i)=prfl(i,1)+psfl(i,1)
     3951     enddo
     3952  endif
     3953
     3954
     3955  !On effectue les sorties:
     3956
     3957  CALL phys_output_write(itap, pdtphys, paprs, pphis,               &
     3958       pplay, lmax_th, aerosol_couple,                 &
     3959       ok_ade, ok_aie, ivap, new_aod, ok_sync,         &
     3960       ptconv, read_climoz, clevSTD, freq_moyNMC,      &
     3961       ptconvth, d_t, qx, d_qx, zmasse,                &
     3962       flag_aerosol_strat)
     3963
     3964
     3965
     3966
     3967#ifdef histISCCP
     3968  include "write_histISCCP.h"
    36293969#endif
    3630        ENDIF  !ok_cosp
    3631 !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
    3632 !AA
    3633 !AA Installation de l'interface online-offline pour traceurs
    3634 !AA
    3635 !====================================================================
    3636 !   Calcul  des tendances traceurs
    3637 !====================================================================
    3638 !
    3639 
    3640        IF (type_trac=='repr') THEN
    3641           sh_in(:,:) = q_seri(:,:)
    3642        ELSE
    3643           sh_in(:,:) = qx(:,:,ivap)
    3644        END IF
    3645 
    3646       call phytrac ( &
    3647            itap,     days_elapsed+1,    jH_cur,   debut, &
    3648            lafin,    dtime,     u, v,     t, &
    3649            paprs,    pplay,     pmfu,     pmfd, &
    3650            pen_u,    pde_u,     pen_d,    pde_d, &
    3651            cdragh,   coefh(:,:,is_ave),   fm_therm, entr_therm, &
    3652            u1,       v1,        ftsol,    pctsrf, &
    3653            zustar,   zu10m,     zv10m, &
    3654            wstar(:,is_ave),    ale_bl,         ale_wake, &
    3655            rlat,     rlon, &
    3656            frac_impa,frac_nucl, beta_prec_fisrt,beta_prec, &
    3657            presnivs, pphis,     pphi,     albsol1, &
    3658            sh_in,    rhcl,      cldfra,   rneb, &
    3659            diafra,   cldliq,    itop_con, ibas_con, &
    3660            pmflxr,   pmflxs,    prfl,     psfl, &
    3661            da,       phi,       mp,       upwd, &
    3662            phi2,     d1a,       dam,      sij, &        !<<RomP
    3663            wdtrainA, wdtrainM,  sigd,     clw,elij, &   !<<RomP
    3664            ev,       ep,        epmlmMm,  eplaMm, &     !<<RomP
    3665            dnwd,     aerosol_couple,      flxmass_w, &
    3666            tau_aero, piz_aero,  cg_aero,  ccm, &
    3667            rfname, &
    3668            d_tr_dyn, &                                 !<<RomP
    3669            tr_seri)
    3670 
    3671       IF (offline) THEN
    3672 
    3673        IF (prt_level.ge.9) &
    3674           print*,'Attention on met a 0 les thermiques pour phystoke'
    3675          call phystokenc ( &
    3676                          nlon,klev,pdtphys,rlon,rlat, &
    3677                          t,pmfu, pmfd, pen_u, pde_u, pen_d, pde_d, &
    3678                          fm_therm,entr_therm, &
    3679                          cdragh,coefh(:,:,is_ave),u1,v1,ftsol,pctsrf, &
    3680                          frac_impa, frac_nucl, &
    3681                          pphis,airephy,dtime,itap, &
    3682                          qx(:,:,ivap),da,phi,mp,upwd,dnwd)
    3683 
    3684 
    3685       ENDIF
    3686 
    3687 !
    3688 ! Calculer le transport de l'eau et de l'energie (diagnostique)
    3689 !
    3690       CALL transp (paprs,zxtsol, &
    3691                          t_seri, q_seri, u_seri, v_seri, zphi, &
    3692                          ve, vq, ue, uq)
    3693 !
    3694 !IM global posePB BEG
    3695       IF(1.EQ.0) THEN
    3696 !
    3697       CALL transp_lay (paprs,zxtsol, &
    3698                          t_seri, q_seri, u_seri, v_seri, zphi, &
    3699                          ve_lay, vq_lay, ue_lay, uq_lay)
    3700 !
    3701       ENDIF !(1.EQ.0) THEN
    3702 !IM global posePB END
    3703 ! Accumuler les variables a stocker dans les fichiers histoire:
    3704 !
    3705 
    3706 !================================================================
    3707 ! Conversion of kinetic and potential energy into heat, for
    3708 ! parameterisation of subgrid-scale motions
    3709 !================================================================
    3710 
    3711       d_t_ec(:,:)=0.
    3712       forall (k=1: llm) exner(:, k) = (pplay(:, k)/paprs(:,1))**RKAPPA
    3713       CALL ener_conserv(klon,klev,pdtphys,u,v,t,qx(:,:,ivap), &
    3714               u_seri,v_seri,t_seri,q_seri,pbl_tke(:,:,is_ave)-tke0(:,:), &
    3715               zmasse,exner,d_t_ec)
    3716       t_seri(:,:)=t_seri(:,:)+d_t_ec(:,:)
    3717 
    3718 !IM
    3719       IF (ip_ebil_phy.ge.1) THEN
    3720         ztit='after physic'
    3721         CALL diagetpq(airephy,ztit,ip_ebil_phy,1,1,dtime &
    3722             , t_seri,q_seri,ql_seri,qs_seri,u_seri,v_seri,paprs,pplay &
    3723             , d_h_vcol, d_qt, d_qw, d_ql, d_qs, d_ec)
    3724 !     Comme les tendances de la physique sont ajoute dans la dynamique,
    3725 !     on devrait avoir que la variation d'entalpie par la dynamique
    3726 !     est egale a la variation de la physique au pas de temps precedent.
    3727 !     Donc la somme de ces 2 variations devrait etre nulle.
    3728 
    3729         call diagphy(airephy,ztit,ip_ebil_phy &
    3730             , topsw, toplw, solsw, sollw, sens &
    3731             , evap, rain_fall, snow_fall, ztsol &
    3732             , d_h_vcol, d_qt, d_ec &
    3733             , fs_bound, fq_bound )
    3734 !
    3735       d_h_vcol_phy=d_h_vcol
    3736 !
    3737       END IF
    3738 !
    3739 !=======================================================================
    3740 !   SORTIES
    3741 !=======================================================================
    3742 
    3743 !IM Interpolation sur les niveaux de pression du NMC
    3744 !   -------------------------------------------------
    3745 !
    3746 #include "calcul_STDlev.h"
    3747 !
    3748 ! slp sea level pressure
    3749       slp(:) = paprs(:,1)*exp(pphis(:)/(RD*t_seri(:,1)))
    3750 !
    3751 !cc prw = eau precipitable
    3752       DO i = 1, klon
    3753        prw(i) = 0.
    3754        DO k = 1, klev
    3755         prw(i) = prw(i) + &
    3756                  q_seri(i,k)*(paprs(i,k)-paprs(i,k+1))/RG
    3757        ENDDO
    3758       ENDDO
    3759 !
    3760 !IM initialisation + calculs divers diag AMIP2
    3761 !
    3762 #include "calcul_divers.h"
    3763 !
    3764       IF (type_trac == 'inca') THEN
    3765 #ifdef INCA
    3766          CALL VTe(VTphysiq)
    3767          CALL VTb(VTinca)
    3768 
    3769          CALL chemhook_end ( &
    3770                               dtime, &
    3771                               pplay, &
    3772                               t_seri, &
    3773                               tr_seri, &
    3774                               nbtr, &
    3775                               paprs, &
    3776                               q_seri, &
    3777                               airephy, &
    3778                               pphi, &
    3779                               pphis, &
    3780                               zx_rh)
    3781 
    3782          CALL VTe(VTinca)
    3783          CALL VTb(VTphysiq)
     3970
     3971  include "write_histday_seri.h"
     3972
     3973  include "write_paramLMDZ_phy.h"
     3974
    37843975#endif
    3785       END IF
    3786 
    3787 
    3788 !
    3789 ! Convertir les incrementations en tendances
    3790 !
    3791       IF (prt_level .GE.10) THEN
    3792         print *,'Convertir les incrementations en tendances '
    3793       ENDIF
    3794 !
    3795       if (mydebug) then
    3796         call writefield_phy('u_seri',u_seri,llm)
    3797         call writefield_phy('v_seri',v_seri,llm)
    3798         call writefield_phy('t_seri',t_seri,llm)
    3799         call writefield_phy('q_seri',q_seri,llm)
    3800       endif
    3801 
    3802       DO k = 1, klev
    3803       DO i = 1, klon
    3804          d_u(i,k) = ( u_seri(i,k) - u(i,k) ) / dtime
    3805          d_v(i,k) = ( v_seri(i,k) - v(i,k) ) / dtime
    3806          d_t(i,k) = ( t_seri(i,k)-t(i,k) ) / dtime
    3807          d_qx(i,k,ivap) = ( q_seri(i,k) - qx(i,k,ivap) ) / dtime
    3808          d_qx(i,k,iliq) = ( ql_seri(i,k) - qx(i,k,iliq) ) / dtime
    3809       ENDDO
    3810       ENDDO
    3811 !
    3812       IF (nqtot.GE.3) THEN
    3813       DO iq = 3, nqtot
    3814       DO  k = 1, klev
    3815       DO  i = 1, klon
    3816          d_qx(i,k,iq) = ( tr_seri(i,k,iq-2) - qx(i,k,iq) ) / dtime
    3817       ENDDO
    3818       ENDDO
    3819       ENDDO
    3820       ENDIF
    3821 !
    3822 !IM rajout diagnostiques bilan KP pour analyse MJO par Jun-Ichi Yano
    3823 !IM global posePB#include "write_bilKP_ins.h"
    3824 !IM global posePB#include "write_bilKP_ave.h"
    3825 !
    3826 
    3827 ! Sauvegarder les valeurs de t et q a la fin de la physique:
    3828 !
    3829       DO k = 1, klev
    3830       DO i = 1, klon
    3831          u_ancien(i,k) = u_seri(i,k)
    3832          v_ancien(i,k) = v_seri(i,k)
    3833          t_ancien(i,k) = t_seri(i,k)
    3834          q_ancien(i,k) = q_seri(i,k)
    3835       ENDDO
    3836       ENDDO
    3837 
    3838 !!! RomP >>>
    3839       IF (nqtot.GE.3) THEN
    3840         DO iq = 3, nqtot
    3841         DO k = 1, klev
    3842         DO i = 1, klon
    3843            tr_ancien(i,k,iq-2) = tr_seri(i,k,iq-2)
    3844         ENDDO
    3845         ENDDO
    3846         ENDDO
    3847       ENDIF
    3848 !!! RomP <<<
    3849 !==========================================================================
    3850 ! Sorties des tendances pour un point particulier
    3851 ! a utiliser en 1D, avec igout=1 ou en 3D sur un point particulier
    3852 ! pour le debug
    3853 ! La valeur de igout est attribuee plus haut dans le programme
    3854 !==========================================================================
    3855 
    3856       if (prt_level.ge.1) then
    3857       write(lunout,*) 'FIN DE PHYSIQ !!!!!!!!!!!!!!!!!!!!'
    3858       write(lunout,*) &
    3859        'nlon,klev,nqtot,debut,lafin,jD_cur, jH_cur, pdtphys pct tlos'
    3860       write(lunout,*) &
    3861         nlon,klev,nqtot,debut,lafin, jD_cur, jH_cur ,pdtphys, &
    3862         pctsrf(igout,is_ter), pctsrf(igout,is_lic),pctsrf(igout,is_oce), &
    3863         pctsrf(igout,is_sic)
    3864       write(lunout,*) 'd_t_dyn,d_t_con,d_t_lsc,d_t_ajsb,d_t_ajs,d_t_eva'
    3865       do k=1,klev
    3866          write(lunout,*) d_t_dyn(igout,k),d_t_con(igout,k), &
    3867          d_t_lsc(igout,k),d_t_ajsb(igout,k),d_t_ajs(igout,k), &
    3868          d_t_eva(igout,k)
    3869       enddo
    3870       write(lunout,*) 'cool,heat'
    3871       do k=1,klev
    3872          write(lunout,*) cool(igout,k),heat(igout,k)
    3873       enddo
    3874 
    3875       write(lunout,*) 'd_t_oli,d_t_vdf,d_t_oro,d_t_lif,d_t_ec'
    3876       do k=1,klev
    3877          write(lunout,*) d_t_oli(igout,k),d_t_vdf(igout,k), &
    3878        d_t_oro(igout,k),d_t_lif(igout,k),d_t_ec(igout,k)
    3879       enddo
    3880 
    3881       write(lunout,*) 'd_ps ',d_ps(igout)
    3882       write(lunout,*) 'd_u, d_v, d_t, d_qx1, d_qx2 '
    3883       do k=1,klev
    3884          write(lunout,*) d_u(igout,k),d_v(igout,k),d_t(igout,k), &
    3885         d_qx(igout,k,1),d_qx(igout,k,2)
    3886       enddo
    3887       endif
    3888 
    3889 !==========================================================================
    3890 
    3891 !============================================================
    3892 !   Calcul de la temperature potentielle
    3893 !============================================================
    3894       DO k = 1, klev
    3895       DO i = 1, klon
    3896 !JYG/IM theta en debut du pas de temps
    3897 !JYG/IM       theta(i,k)=t(i,k)*(100000./pplay(i,k))**(RD/RCPD)
    3898 !JYG/IM theta en fin de pas de temps de physique
    3899         theta(i,k)=t_seri(i,k)*(100000./pplay(i,k))**(RD/RCPD)
    3900 ! thetal: 2 lignes suivantes a decommenter si vous avez les fichiers     MPL 20130625
    3901 ! fth_fonctions.F90 et parkind1.F90
    3902 ! sinon thetal=theta
    3903 !       thetal(i,k)=fth_thetal(pplay(i,k),t_seri(i,k),q_seri(i,k),
    3904 !    :         ql_seri(i,k))
    3905         thetal(i,k)=theta(i,k)
    3906       ENDDO
    3907       ENDDO
    3908 !
    3909 
    3910 ! 22.03.04 BEG
    3911 !=============================================================
    3912 !   Ecriture des sorties
    3913 !=============================================================
    3914 #ifdef CPP_IOIPSL
    3915  
    3916 ! Recupere des varibles calcule dans differents modules
    3917 ! pour ecriture dans histxxx.nc
    3918 
    3919       ! Get some variables from module fonte_neige_mod
    3920       CALL fonte_neige_get_vars(pctsrf,  &
    3921            zxfqcalving, zxfqfonte, zxffonte)
    3922 
    3923 
    3924 
    3925 
    3926 !=============================================================
    3927 ! Separation entre thermiques et non thermiques dans les sorties
    3928 ! de fisrtilp
    3929 !=============================================================
    3930 
    3931       if (iflag_thermals>=1) then
    3932       d_t_lscth=0.
    3933       d_t_lscst=0.
    3934       d_q_lscth=0.
    3935       d_q_lscst=0.
    3936       do k=1,klev
    3937          do i=1,klon
    3938             if (ptconvth(i,k)) then
    3939                 d_t_lscth(i,k)=d_t_eva(i,k)+d_t_lsc(i,k)
    3940                 d_q_lscth(i,k)=d_q_eva(i,k)+d_q_lsc(i,k)
    3941             else
    3942                 d_t_lscst(i,k)=d_t_eva(i,k)+d_t_lsc(i,k)
    3943                 d_q_lscst(i,k)=d_q_eva(i,k)+d_q_lsc(i,k)
    3944             endif
    3945          enddo
    3946       enddo
    3947 
    3948       do i=1,klon
    3949       plul_st(i)=prfl(i,lmax_th(i)+1)+psfl(i,lmax_th(i)+1)
    3950       plul_th(i)=prfl(i,1)+psfl(i,1)
    3951       enddo
    3952       endif
    3953 
    3954 
    3955 !On effectue les sorties:
    3956 
    3957       CALL phys_output_write(itap, pdtphys, paprs, pphis,               &
    3958                         pplay, lmax_th, aerosol_couple,                 &
    3959                         ok_ade, ok_aie, ivap, new_aod, ok_sync,         &
    3960                         ptconv, read_climoz, clevSTD, freq_moyNMC,      &
    3961                         ptconvth, d_t, qx, d_qx, zmasse,                &
    3962                         flag_aerosol_strat)
    3963 
    3964 
    3965 
    3966 
    3967 #ifdef histISCCP
    3968 #include "write_histISCCP.h"
    3969 #endif
    3970 
    3971 #include "write_histday_seri.h"
    3972 
    3973 #include "write_paramLMDZ_phy.h"
    3974 
    3975 #endif
    3976 
    3977 ! 22.03.04 END
    3978 !
    3979 !====================================================================
    3980 ! Si c'est la fin, il faut conserver l'etat de redemarrage
    3981 !====================================================================
    3982 !
    3983 
    3984 !        -----------------------------------------------------------------
    3985 !        WSTATS: Saving statistics
    3986 !        -----------------------------------------------------------------
    3987 !        ("stats" stores and accumulates 8 key variables in file "stats.nc"
    3988 !        which can later be used to make the statistic files of the run:
    3989 !        "stats")          only possible in 3D runs !
    3990 
    3991          
    3992          IF (callstats) THEN
    3993 
    3994            call wstats(klon,o_psol%name,"Surface pressure","Pa" &
    3995                        ,2,paprs(:,1))
    3996            call wstats(klon,o_tsol%name,"Surface temperature","K", &
    3997                        2,zxtsol)
    3998            zx_tmp_fi2d(:) = rain_fall(:) + snow_fall(:)
    3999            call wstats(klon,o_precip%name,"Precip Totale liq+sol", &
    4000                        "kg/(s*m2)",2,zx_tmp_fi2d)
    4001            zx_tmp_fi2d(:) = rain_lsc(:) + snow_lsc(:)
    4002            call wstats(klon,o_plul%name,"Large-scale Precip", &
    4003                        "kg/(s*m2)",2,zx_tmp_fi2d)
    4004            zx_tmp_fi2d(:) = rain_con(:) + snow_con(:)
    4005            call wstats(klon,o_pluc%name,"Convective Precip", &
    4006                        "kg/(s*m2)",2,zx_tmp_fi2d)
    4007            call wstats(klon,o_sols%name,"Solar rad. at surf.", &
    4008                        "W/m2",2,solsw)
    4009            call wstats(klon,o_soll%name,"IR rad. at surf.", &
    4010                        "W/m2",2,sollw)
    4011           zx_tmp_fi2d(:) = topsw(:)-toplw(:)
    4012           call wstats(klon,o_nettop%name,"Net dn radiatif flux at TOA", &
    4013                        "W/m2",2,zx_tmp_fi2d)
    4014 
    4015 
    4016 
    4017            call wstats(klon,o_temp%name,"Air temperature","K", &
    4018                        3,t_seri)
    4019            call wstats(klon,o_vitu%name,"Zonal wind","m.s-1", &
    4020                        3,u_seri)
    4021            call wstats(klon,o_vitv%name,"Meridional wind", &
    4022                       "m.s-1",3,v_seri)
    4023            call wstats(klon,o_vitw%name,"Vertical wind", &
    4024                       "m.s-1",3,omega)
    4025            call wstats(klon,o_ovap%name,"Specific humidity", "kg/kg", &
    4026                        3,q_seri)
    4027  
    4028 
    4029 
    4030            IF(lafin) THEN
    4031              write (*,*) "Writing stats..."
    4032              call mkstats(ierr)
    4033            ENDIF
    4034 
    4035          ENDIF !if callstats
    4036      
    4037       IF (lafin) THEN
    4038          itau_phy = itau_phy + itap
    4039          CALL phyredem ("restartphy.nc")
    4040 !         open(97,form="unformatted",file="finbin")
    4041 !         write(97) u_seri,v_seri,t_seri,q_seri
    4042 !         close(97)
    4043 !$OMP MASTER
    4044          if (read_climoz >= 1) then
    4045             if (is_mpi_root) then
    4046                call nf95_close(ncid_climoz)
    4047             end if
    4048             deallocate(press_climoz) ! pointer
    4049          end if
    4050 !$OMP END MASTER
    4051       ENDIF
    4052      
    4053 !      first=.false.
    4054 
    4055       RETURN
    4056       END
    4057       FUNCTION qcheck(klon,klev,paprs,q,ql,aire)
    4058       IMPLICIT none
    4059 !
    4060 ! Calculer et imprimer l'eau totale. A utiliser pour verifier
    4061 ! la conservation de l'eau
    4062 !
    4063 #include "YOMCST.h"
    4064       INTEGER klon,klev
    4065       REAL paprs(klon,klev+1), q(klon,klev), ql(klon,klev)
    4066       REAL aire(klon)
    4067       REAL qtotal, zx, qcheck
    4068       INTEGER i, k
    4069 !
    4070       zx = 0.0
    4071       DO i = 1, klon
    4072          zx = zx + aire(i)
    4073       ENDDO
    4074       qtotal = 0.0
    4075       DO k = 1, klev
    4076       DO i = 1, klon
    4077          qtotal = qtotal + (q(i,k)+ql(i,k)) * aire(i) &
    4078                            *(paprs(i,k)-paprs(i,k+1))/RG
    4079       ENDDO
    4080       ENDDO
    4081 !
    4082       qcheck = qtotal/zx
    4083 !
    4084       RETURN
    4085       END
    4086       SUBROUTINE gr_fi_ecrit(nfield,nlon,iim,jjmp1,fi,ecrit)
    4087       IMPLICIT none
    4088 !
    4089 ! Tranformer une variable de la grille physique a
    4090 ! la grille d'ecriture
    4091 !
    4092       INTEGER nfield,nlon,iim,jjmp1, jjm
    4093       REAL fi(nlon,nfield), ecrit(iim*jjmp1,nfield)
    4094 !
    4095       INTEGER i, n, ig
    4096 !
    4097       jjm = jjmp1 - 1
    4098       DO n = 1, nfield
    4099          DO i=1,iim
    4100             ecrit(i,n) = fi(1,n)
    4101             ecrit(i+jjm*iim,n) = fi(nlon,n)
    4102          ENDDO
    4103          DO ig = 1, nlon - 2
    4104            ecrit(iim+ig,n) = fi(1+ig,n)
    4105          ENDDO
    4106       ENDDO
    4107       RETURN
    4108       END
     3976
     3977  ! 22.03.04 END
     3978  !
     3979  !====================================================================
     3980  ! Si c'est la fin, il faut conserver l'etat de redemarrage
     3981  !====================================================================
     3982  !
     3983
     3984  !        -----------------------------------------------------------------
     3985  !        WSTATS: Saving statistics
     3986  !        -----------------------------------------------------------------
     3987  !        ("stats" stores and accumulates 8 key variables in file "stats.nc"
     3988  !        which can later be used to make the statistic files of the run:
     3989  !        "stats")          only possible in 3D runs !
     3990
     3991
     3992  IF (callstats) THEN
     3993
     3994     call wstats(klon,o_psol%name,"Surface pressure","Pa" &
     3995          ,2,paprs(:,1))
     3996     call wstats(klon,o_tsol%name,"Surface temperature","K", &
     3997          2,zxtsol)
     3998     zx_tmp_fi2d(:) = rain_fall(:) + snow_fall(:)
     3999     call wstats(klon,o_precip%name,"Precip Totale liq+sol", &
     4000          "kg/(s*m2)",2,zx_tmp_fi2d)
     4001     zx_tmp_fi2d(:) = rain_lsc(:) + snow_lsc(:)
     4002     call wstats(klon,o_plul%name,"Large-scale Precip", &
     4003          "kg/(s*m2)",2,zx_tmp_fi2d)
     4004     zx_tmp_fi2d(:) = rain_con(:) + snow_con(:)
     4005     call wstats(klon,o_pluc%name,"Convective Precip", &
     4006          "kg/(s*m2)",2,zx_tmp_fi2d)
     4007     call wstats(klon,o_sols%name,"Solar rad. at surf.", &
     4008          "W/m2",2,solsw)
     4009     call wstats(klon,o_soll%name,"IR rad. at surf.", &
     4010          "W/m2",2,sollw)
     4011     zx_tmp_fi2d(:) = topsw(:)-toplw(:)
     4012     call wstats(klon,o_nettop%name,"Net dn radiatif flux at TOA", &
     4013          "W/m2",2,zx_tmp_fi2d)
     4014
     4015
     4016
     4017     call wstats(klon,o_temp%name,"Air temperature","K", &
     4018          3,t_seri)
     4019     call wstats(klon,o_vitu%name,"Zonal wind","m.s-1", &
     4020          3,u_seri)
     4021     call wstats(klon,o_vitv%name,"Meridional wind", &
     4022          "m.s-1",3,v_seri)
     4023     call wstats(klon,o_vitw%name,"Vertical wind", &
     4024          "m.s-1",3,omega)
     4025     call wstats(klon,o_ovap%name,"Specific humidity", "kg/kg", &
     4026          3,q_seri)
     4027
     4028
     4029
     4030     IF(lafin) THEN
     4031        write (*,*) "Writing stats..."
     4032        call mkstats(ierr)
     4033     ENDIF
     4034
     4035  ENDIF !if callstats
     4036
     4037  IF (lafin) THEN
     4038     itau_phy = itau_phy + itap
     4039     CALL phyredem ("restartphy.nc")
     4040     !         open(97,form="unformatted",file="finbin")
     4041     !         write(97) u_seri,v_seri,t_seri,q_seri
     4042     !         close(97)
     4043     !$OMP MASTER
     4044     if (read_climoz >= 1) then
     4045        if (is_mpi_root) then
     4046           call nf95_close(ncid_climoz)
     4047        end if
     4048        deallocate(press_climoz) ! pointer
     4049     end if
     4050     !$OMP END MASTER
     4051  ENDIF
     4052
     4053  !      first=.false.
     4054
     4055  RETURN
     4056END SUBROUTINE physiq
     4057FUNCTION qcheck(klon,klev,paprs,q,ql,aire)
     4058  IMPLICIT none
     4059  !
     4060  ! Calculer et imprimer l'eau totale. A utiliser pour verifier
     4061  ! la conservation de l'eau
     4062  !
     4063  include "YOMCST.h"
     4064  INTEGER klon,klev
     4065  REAL paprs(klon,klev+1), q(klon,klev), ql(klon,klev)
     4066  REAL aire(klon)
     4067  REAL qtotal, zx, qcheck
     4068  INTEGER i, k
     4069  !
     4070  zx = 0.0
     4071  DO i = 1, klon
     4072     zx = zx + aire(i)
     4073  ENDDO
     4074  qtotal = 0.0
     4075  DO k = 1, klev
     4076     DO i = 1, klon
     4077        qtotal = qtotal + (q(i,k)+ql(i,k)) * aire(i) &
     4078             *(paprs(i,k)-paprs(i,k+1))/RG
     4079     ENDDO
     4080  ENDDO
     4081  !
     4082  qcheck = qtotal/zx
     4083  !
     4084  RETURN
     4085END FUNCTION qcheck
     4086SUBROUTINE gr_fi_ecrit(nfield,nlon,iim,jjmp1,fi,ecrit)
     4087  IMPLICIT none
     4088  !
     4089  ! Tranformer une variable de la grille physique a
     4090  ! la grille d'ecriture
     4091  !
     4092  INTEGER nfield,nlon,iim,jjmp1, jjm
     4093  REAL fi(nlon,nfield), ecrit(iim*jjmp1,nfield)
     4094  !
     4095  INTEGER i, n, ig
     4096  !
     4097  jjm = jjmp1 - 1
     4098  DO n = 1, nfield
     4099     DO i=1,iim
     4100        ecrit(i,n) = fi(1,n)
     4101        ecrit(i+jjm*iim,n) = fi(nlon,n)
     4102     ENDDO
     4103     DO ig = 1, nlon - 2
     4104        ecrit(iim+ig,n) = fi(1+ig,n)
     4105     ENDDO
     4106  ENDDO
     4107  RETURN
     4108END SUBROUTINE gr_fi_ecrit
Note: See TracChangeset for help on using the changeset viewer.