Changeset 4651


Ignore:
Timestamp:
Aug 28, 2023, 4:34:20 PM (9 months ago)
Author:
fhourdin
Message:

Pre-replayisation pour cloudth

Cration de lmdz_cloudth_ini
cloudth_mod.F90 -> lmdz_cloudth.F90
Supression des constantes dans lmdz_cloudth
En fait, cloudth lui même n'est pas vraiment replayisable car appeler ligne par ligne.

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

Legend:

Unmodified
Added
Removed
  • LMDZ6/trunk/libf/phylmd/fisrtilp.F90

    r4535 r4651  
    1414  USE icefrac_lsc_mod ! compute ice fraction (JBM 3/14)
    1515  USE print_control_mod, ONLY: prt_level, lunout
    16   USE cloudth_mod
     16  USE lmdz_cloudth, only : cloudth, cloudth_v3, cloudth_v6
    1717  USE ioipsl_getin_p_mod, ONLY : getin_p
    1818  USE phys_local_var_mod, ONLY: ql_seri,qs_seri
     
    2525  USE lscp_ini_mod, ONLY: cld_tau_lsc, cld_tau_con, cld_lc_lsc, cld_lc_con
    2626  USE lscp_ini_mod, ONLY: reevap_ice, iflag_bergeron, iflag_fisrtilp_qsat, iflag_pdf
     27      use phys_output_var_mod, ONLY : cloudth_sth,cloudth_senv
     28      use phys_output_var_mod, ONLY : cloudth_sigmath,cloudth_sigmaenv
     29
    2730
    2831
     
    849852                   zq,zqta,fraca, &
    850853                   qcloud,ctot,zpspsk,paprs,pplay,ztla,zthl, &
    851                    ratqs,zqs,t)
     854                   ratqs,zqs,t, &
     855                   cloudth_sth,cloudth_senv,cloudth_sigmath,cloudth_sigmaenv)
     856
    852857              elseif (iflag_cloudth_vert>=3 .and. iflag_cloudth_vert<=5) then
    853858               call cloudth_v3(klon,klev,k,ztv, &
    854859                   zq,zqta,fraca, &
    855860                   qcloud,ctot,ctot_vol,zpspsk,paprs,pplay,ztla,zthl, &
    856                    ratqs,zqs,t)
     861                   ratqs,zqs,t, &
     862                   cloudth_sth,cloudth_senv,cloudth_sigmath,cloudth_sigmaenv)
    857863              !----------------------------------
    858864              !Version these Jean Jouhaud, Decembre 2018
     
    862868                   zq,zqta,fraca, &
    863869                   qcloud,ctot,ctot_vol,zpspsk,paprs,pplay,ztla,zthl, &
    864                    ratqs,zqs,t)
     870                   ratqs,zqs,t, &
     871                   cloudth_sth,cloudth_senv,cloudth_sigmath,cloudth_sigmaenv)
    865872
    866873              endif
  • LMDZ6/trunk/libf/phylmd/lmdz_cloudth.F90

    r4650 r4651  
    1 MODULE cloudth_mod
     1MODULE lmdz_cloudth
    22
    33
     
    99     &           ztv,po,zqta,fraca, &
    1010     &           qcloud,ctot,zpspsk,paprs,pplay,ztla,zthl, &
    11      &           ratqs,zqs,t)
    12 
    13 
    14       use lscp_ini_mod, only: iflag_cloudth_vert
     11     &           ratqs,zqs,t, &
     12     &           cloudth_sth,cloudth_senv,cloudth_sigmath,cloudth_sigmaenv)
     13
     14
     15      use lmdz_cloudth_ini, only: iflag_cloudth_vert,iflag_ratqs
    1516
    1617      IMPLICIT NONE
     
    2526
    2627      INCLUDE "YOMCST.h"
    27       INCLUDE "nuage.h" ! iflag_ratqs
    2828      INCLUDE "YOETHF.h"
    2929      INCLUDE "FCTTRE.h"
     
    3131      INTEGER itap,ind1,ind2
    3232      INTEGER ngrid,klev,klon,l,ig
     33      real, dimension(ngrid,klev), intent(out) :: cloudth_sth,cloudth_senv,cloudth_sigmath,cloudth_sigmaenv
    3334     
    3435      REAL ztv(ngrid,klev)
     
    264265
    265266
    266       USE ioipsl_getin_p_mod, ONLY : getin_p
    267       use lscp_ini_mod, only: iflag_cloudth_vert
     267      use lmdz_cloudth_ini, only: iflag_cloudth_vert, vert_alpha
    268268
    269269      IMPLICIT NONE
    270270
    271271      INCLUDE "YOMCST.h"
    272       INCLUDE "nuage.h" ! iflag_ratqs
    273272      INCLUDE "YOETHF.h"
    274273      INCLUDE "FCTTRE.h"
     
    314313      ! Change the width of the PDF used for vertical subgrid scale heterogeneity
    315314      ! (J Jouhaud, JL Dufresne, JB Madeleine)
    316       REAL,SAVE :: vert_alpha
    317       !$OMP THREADPRIVATE(vert_alpha)
    318       LOGICAL, SAVE :: firstcall = .TRUE.
    319       !$OMP THREADPRIVATE(firstcall)
    320315     
    321316      REAL zpdf_sig(ngrid),zpdf_k(ngrid),zpdf_delta(ngrid)
     
    347342      sqrtpi=sqrt(pi)
    348343
    349       IF (firstcall) THEN
    350         vert_alpha=0.5
    351         CALL getin_p('cloudth_vert_alpha',vert_alpha)
    352         WRITE(*,*) 'cloudth_vert_alpha = ', vert_alpha
    353         firstcall=.FALSE.
    354       ENDIF
    355 
    356344!-------------------------------------------------------------------------------
    357345! Calcul de la fraction du thermique et des ?cart-types des distributions
     
    595583     &           ztv,po,zqta,fraca, &
    596584     &           qcloud,ctot,ctot_vol,zpspsk,paprs,pplay,ztla,zthl, &
    597      &           ratqs,zqs,t)
    598 
    599       use lscp_ini_mod, only: iflag_cloudth_vert
     585     &           ratqs,zqs,t, &
     586     &           cloudth_sth,cloudth_senv,cloudth_sigmath,cloudth_sigmaenv)
     587
     588      use lmdz_cloudth_ini, only: iflag_cloudth_vert
    600589
    601590      IMPLICIT NONE
     
    610599
    611600      INCLUDE "YOMCST.h"
    612       INCLUDE "nuage.h" ! iflag ratq
    613601      INCLUDE "YOETHF.h"
    614602      INCLUDE "FCTTRE.h"
     
    616604      INTEGER itap,ind1,ind2
    617605      INTEGER ngrid,klev,klon,l,ig
     606      real, dimension(ngrid,klev), intent(out) :: cloudth_sth,cloudth_senv,cloudth_sigmath,cloudth_sigmaenv
    618607     
    619608      REAL ztv(ngrid,klev)
     
    663652     &           ztv,po,zqta,fraca, &
    664653     &           qcloud,ctot,ctot_vol,zpspsk,paprs,pplay,ztla,zthl, &
    665      &           ratqs,zqs,t)
     654     &           ratqs,zqs,t, &
     655     &           cloudth_sth,cloudth_senv,cloudth_sigmath,cloudth_sigmaenv)
    666656      RETURN
    667657      ENDIF
     
    817807     &           ztv,po,zqta,fraca, &
    818808     &           qcloud,ctot,ctot_vol,zpspsk,paprs,pplay,ztla,zthl, &
    819      &           ratqs,zqs,t)
     809     &           ratqs,zqs,t, &
     810     &           cloudth_sth,cloudth_senv,cloudth_sigmath,cloudth_sigmaenv)
    820811
    821812!===========================================================================
     
    825816!===========================================================================
    826817
    827       use lscp_ini_mod, only: iflag_cloudth_vert
    828       USE ioipsl_getin_p_mod, ONLY : getin_p
    829       USE phys_output_var_mod, ONLY : cloudth_sth,cloudth_senv, &
    830      &                                cloudth_sigmath,cloudth_sigmaenv
     818      use lmdz_cloudth_ini, only : iflag_cloudth_vert,iflag_ratqs
     819      use lmdz_cloudth_ini, only : vert_alpha,vert_alpha_th, sigma1s_factor, sigma1s_power , sigma2s_factor , sigma2s_power , cloudth_ratqsmin , iflag_cloudth_vert_noratqs
    831820
    832821      IMPLICIT NONE
    833822
     823
     824
    834825      INCLUDE "YOMCST.h"
    835       INCLUDE "nuage.h" ! iflag ratq
    836826      INCLUDE "YOETHF.h"
    837827      INCLUDE "FCTTRE.h"
     
    839829      INTEGER itap,ind1,ind2
    840830      INTEGER ngrid,klev,klon,l,ig
     831      real, dimension(ngrid,klev), intent(out) :: cloudth_sth,cloudth_senv,cloudth_sigmath,cloudth_sigmaenv
    841832     
    842833      REAL ztv(ngrid,klev)
     
    881872      ! Change the width of the PDF used for vertical subgrid scale heterogeneity
    882873      ! (J Jouhaud, JL Dufresne, JB Madeleine)
    883       REAL,SAVE :: vert_alpha, vert_alpha_th
    884       !$OMP THREADPRIVATE(vert_alpha, vert_alpha_th)
    885       REAL,SAVE :: sigma1s_factor=1.1
    886       REAL,SAVE :: sigma1s_power=0.6
    887       REAL,SAVE :: sigma2s_factor=0.09
    888       REAL,SAVE :: sigma2s_power=0.5
    889       REAL,SAVE :: cloudth_ratqsmin=-1.
    890       !$OMP THREADPRIVATE(sigma1s_factor,sigma1s_power,sigma2s_factor,sigma2s_power,cloudth_ratqsmin)
    891       INTEGER, SAVE :: iflag_cloudth_vert_noratqs=0
    892       !$OMP THREADPRIVATE(iflag_cloudth_vert_noratqs)
    893 
    894       LOGICAL, SAVE :: firstcall = .TRUE.
    895       !$OMP THREADPRIVATE(firstcall)
    896874
    897875      REAL zpdf_sig(ngrid),zpdf_k(ngrid),zpdf_delta(ngrid)
     
    938916      sqrtpi=sqrt(pi)
    939917
    940       IF (firstcall) THEN
    941         vert_alpha=0.5
    942         CALL getin_p('cloudth_vert_alpha',vert_alpha)
    943         WRITE(*,*) 'cloudth_vert_alpha = ', vert_alpha
    944         ! The factor used for the thermal is equal to that of the environment
    945         !   if nothing is explicitly specified in the def file
    946         vert_alpha_th=vert_alpha
    947         CALL getin_p('cloudth_vert_alpha_th',vert_alpha_th)
    948         WRITE(*,*) 'cloudth_vert_alpha_th = ', vert_alpha_th
    949         ! Factor used in the calculation of sigma1s
    950         CALL getin_p('cloudth_sigma1s_factor',sigma1s_factor)
    951         WRITE(*,*) 'cloudth_sigma1s_factor = ', sigma1s_factor
    952         ! Power used in the calculation of sigma1s
    953         CALL getin_p('cloudth_sigma1s_power',sigma1s_power)
    954         WRITE(*,*) 'cloudth_sigma1s_power = ', sigma1s_power
    955         ! Factor used in the calculation of sigma2s
    956         CALL getin_p('cloudth_sigma2s_factor',sigma2s_factor)
    957         WRITE(*,*) 'cloudth_sigma2s_factor = ', sigma2s_factor
    958         ! Power used in the calculation of sigma2s
    959         CALL getin_p('cloudth_sigma2s_power',sigma2s_power)
    960         WRITE(*,*) 'cloudth_sigma2s_power = ', sigma2s_power
    961         ! Minimum value for the environmental air subgrid water distrib
    962         CALL getin_p('cloudth_ratqsmin',cloudth_ratqsmin)
    963         WRITE(*,*) 'cloudth_ratqsmin = ', cloudth_ratqsmin
    964         ! Remove the dependency to ratqs from the variance of the vertical PDF
    965         CALL getin_p('iflag_cloudth_vert_noratqs',iflag_cloudth_vert_noratqs)
    966         WRITE(*,*) 'iflag_cloudth_vert_noratqs = ', iflag_cloudth_vert_noratqs
    967 
    968         firstcall=.FALSE.
    969       ENDIF
     918
    970919
    971920!-------------------------------------------------------------------------------
     
    12891238     &           ztv,po,zqta,fraca, &
    12901239     &           qcloud,ctot_surf,ctot_vol,zpspsk,paprs,pplay,ztla,zthl, &
    1291      &           ratqs,zqs,T)
    1292 
    1293       use lscp_ini_mod, only: iflag_cloudth_vert
    1294       USE ioipsl_getin_p_mod, ONLY : getin_p
    1295       USE phys_output_var_mod, ONLY : cloudth_sth,cloudth_senv, &
    1296      &                                cloudth_sigmath,cloudth_sigmaenv
     1240     &           ratqs,zqs,T, &
     1241     &           cloudth_sth,cloudth_senv,cloudth_sigmath,cloudth_sigmaenv)
     1242
     1243      use lmdz_cloudth_ini, only: iflag_cloudth_vert
    12971244
    12981245      IMPLICIT NONE
     1246
    12991247
    13001248      INCLUDE "YOMCST.h"
     
    13061254      INTEGER ngrid !indice Max lat-lon
    13071255      INTEGER klev  !indice Max alt
     1256      real, dimension(ngrid,klev), intent(out) :: cloudth_sth,cloudth_senv,cloudth_sigmath,cloudth_sigmaenv
    13081257      INTEGER ind1  !indice in [1:ngrid]
    13091258      INTEGER ind2  !indice in [1:klev]
     
    15471496SUBROUTINE cloudth_mpc(klon,klev,ind2,iflag_mpc_bl,mpc_bl_points,           &
    15481497&           temp,ztv,po,zqta,fraca,zpspsk,paprs,pplay,ztla,zthl,            &
    1549 &           ratqs,zqs,snowflux,qcloud,qincloud,icefrac,ctot,ctot_vol)
     1498&           ratqs,zqs,snowflux,qcloud,qincloud,icefrac,ctot,ctot_vol,       &
     1499&           cloudth_sth,cloudth_senv,cloudth_sigmath,cloudth_sigmaenv)
    15501500!+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
    15511501! Author : Arnaud Octavio Jam (LMD/CNRS), Etienne Vignon (LMDZ/CNRS)
     
    15571507!+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
    15581508
    1559       use lscp_ini_mod, only: iflag_cloudth_vert
    1560       USE ioipsl_getin_p_mod, ONLY : getin_p
    1561       USE phys_output_var_mod, ONLY : cloudth_sth,cloudth_senv,cloudth_sigmath,cloudth_sigmaenv
    1562       USE lscp_tools_mod, ONLY: CALC_QSAT_ECMWF, FALLICE_VELOCITY
    1563       USE phys_local_var_mod, ONLY : qlth, qith, qsith, wiceth
     1509      use lmdz_cloudth_ini, only: iflag_cloudth_vert,iflag_ratqs
     1510      use lmdz_cloudth_ini, only:  C_mpc ,Ni,C_cap,Ei,d_top ,vert_alpha, vert_alpha_th ,sigma1s_factor,sigma1s_power,sigma2s_factor,sigma2s_power,cloudth_ratqsmin ,iflag_cloudth_vert_noratqs
     1511      use lscp_tools_mod, ONLY: CALC_QSAT_ECMWF, FALLICE_VELOCITY
     1512
     1513      use phys_local_var_mod, ONLY : qlth, qith, qsith, wiceth
    15641514
    15651515      IMPLICIT NONE
    15661516
    15671517      INCLUDE "YOMCST.h"
    1568       INCLUDE "nuage.h" ! iflag_ratqs
    15691518      INCLUDE "YOETHF.h"
    15701519      INCLUDE "FCTTRE.h"
     
    16031552      REAL, DIMENSION(klon),      INTENT(OUT)      ::  qincloud       ! In cloud condensed water content [kg/kg]
    16041553      REAL, DIMENSION(klon,klev), INTENT(OUT)      ::  icefrac      ! Fraction of ice in clouds [0-1]
     1554      real, dimension(klon,klev), intent(out) :: cloudth_sth,cloudth_senv,cloudth_sigmath,cloudth_sigmaenv
    16051555
    16061556
     
    16081558
    16091559      INTEGER itap,ind1,l,ig,iter,k
    1610 !      INTEGER iflag_ratqs
    16111560      INTEGER iflag_topthermals, niter
    16121561      LOGICAL falseklon(klon)
     
    16521601      ! Modifty the saturation deficit PDF in thermals
    16531602      ! in the presence of ice crystals
    1654       REAL,SAVE :: C_mpc
    1655       !$OMP THREADPRIVATE(C_mpc)
    1656       REAL, SAVE    :: Ni,C_cap,Ei,d_top
    1657       !$OMP THREADPRIVATE(Ni,C_cap,Ei,d_top)
    1658       ! Change the width of the PDF used for vertical subgrid scale heterogeneity
    1659       ! (J Jouhaud, JL Dufresne, JB Madeleine)
    1660       REAL,SAVE :: vert_alpha, vert_alpha_th
    1661       !$OMP THREADPRIVATE(vert_alpha, vert_alpha_th)
    1662       REAL,SAVE :: sigma1s_factor=1.1
    1663       REAL,SAVE :: sigma1s_power=0.6
    1664       REAL,SAVE :: sigma2s_factor=0.09
    1665       REAL,SAVE :: sigma2s_power=0.5
    1666       REAL,SAVE :: cloudth_ratqsmin=-1.
    1667       !$OMP THREADPRIVATE(sigma1s_factor,sigma1s_power,sigma2s_factor,sigma2s_power,cloudth_ratqsmin)
    1668       INTEGER, SAVE :: iflag_cloudth_vert_noratqs=0
    1669       !$OMP THREADPRIVATE(iflag_cloudth_vert_noratqs)
    1670       LOGICAL, SAVE :: firstcall = .TRUE.
    1671       !$OMP THREADPRIVATE(firstcall)
    1672 
    16731603      CHARACTER (len = 80) :: abort_message
    16741604      CHARACTER (len = 20) :: routname = 'cloudth_mpc'
     
    17311661      sthl=0.
    17321662      sthil=0.
    1733 
    1734 
    1735 
    1736       IF (firstcall) THEN
    1737 
    1738         vert_alpha=0.5
    1739         CALL getin_p('cloudth_vert_alpha',vert_alpha)
    1740         WRITE(*,*) 'cloudth_vert_alpha = ', vert_alpha
    1741         ! The factor used for the thermal is equal to that of the environment
    1742         !   if nothing is explicitly specified in the def file
    1743         vert_alpha_th=vert_alpha
    1744         CALL getin_p('cloudth_vert_alpha_th',vert_alpha_th)
    1745         WRITE(*,*) 'cloudth_vert_alpha_th = ', vert_alpha_th
    1746         ! Factor used in the calculation of sigma1s
    1747         CALL getin_p('cloudth_sigma1s_factor',sigma1s_factor)
    1748         WRITE(*,*) 'cloudth_sigma1s_factor = ', sigma1s_factor
    1749         ! Power used in the calculation of sigma1s
    1750         CALL getin_p('cloudth_sigma1s_power',sigma1s_power)
    1751         WRITE(*,*) 'cloudth_sigma1s_power = ', sigma1s_power
    1752         ! Factor used in the calculation of sigma2s
    1753         CALL getin_p('cloudth_sigma2s_factor',sigma2s_factor)
    1754         WRITE(*,*) 'cloudth_sigma2s_factor = ', sigma2s_factor
    1755         ! Power used in the calculation of sigma2s
    1756         CALL getin_p('cloudth_sigma2s_power',sigma2s_power)
    1757         WRITE(*,*) 'cloudth_sigma2s_power = ', sigma2s_power
    1758         ! Minimum value for the environmental air subgrid water distrib
    1759         CALL getin_p('cloudth_ratqsmin',cloudth_ratqsmin)
    1760         WRITE(*,*) 'cloudth_ratqsmin = ', cloudth_ratqsmin
    1761         ! Remove the dependency to ratqs from the variance of the vertical PDF
    1762         CALL getin_p('iflag_cloudth_vert_noratqs',iflag_cloudth_vert_noratqs)
    1763         WRITE(*,*) 'iflag_cloudth_vert_noratqs = ', iflag_cloudth_vert_noratqs
    1764         ! Modifies the PDF in thermals when ice crystals are present
    1765         C_mpc=1.e4
    1766         CALL getin_p('C_mpc',C_mpc)
    1767         WRITE(*,*) 'C_mpc = ', C_mpc
    1768         Ni=2.0e3
    1769         CALL getin_p('Ni', Ni)
    1770         WRITE(*,*) 'Ni = ', Ni
    1771         Ei=0.5
    1772         CALL getin_p('Ei', Ei)
    1773         WRITE(*,*) 'Ei = ', Ei
    1774         C_cap=0.5
    1775         CALL getin_p('C_cap', C_cap)
    1776         WRITE(*,*) 'C_cap = ', C_cap
    1777         d_top=1.2
    1778         CALL getin_p('d_top', d_top)
    1779         WRITE(*,*) 'd_top = ', d_top
    1780 
    1781         firstcall=.FALSE.
    1782 
    1783       ENDIF
    1784 
    1785 
    17861663
    17871664!-------------------------------------------------------------------------------
     
    23322209!=============================================================================
    23332210
    2334     USE ioipsl_getin_p_mod, ONLY : getin_p
    2335     USE phys_state_var_mod, ONLY : fm_therm, detr_therm, entr_therm
     2211    use phys_state_var_mod, ONLY : fm_therm, detr_therm, entr_therm
    23362212
    23372213    IMPLICIT none
     
    24532329END SUBROUTINE ICE_MPC_BL_CLOUDS
    24542330
    2455 
    2456 
    2457 
    2458 END MODULE cloudth_mod
    2459 
    2460 
    2461 
    2462 
     2331END MODULE lmdz_cloudth
  • LMDZ6/trunk/libf/phylmd/lscp_ini_mod.F90

    r4639 r4651  
    129129CONTAINS
    130130
    131 SUBROUTINE lscp_ini(dtime,ok_ice_sursat, RCPD_in, RLSTT_in, RLVTT_in, RLMLT_in, &
     131SUBROUTINE lscp_ini(dtime,ok_ice_sursat, iflag_ratqs, RCPD_in, RLSTT_in, RLVTT_in, RLMLT_in, &
    132132                    RVTMP2_in, RTT_in,RD_in,RG_in)
    133133
     
    136136   USE print_control_mod, ONLY: prt_level, lunout
    137137   USE ice_sursat_mod, ONLY: ice_sursat_init
     138   USE lmdz_cloudth_ini, ONLY : cloudth_ini
    138139
    139140   REAL, INTENT(IN)      :: dtime
    140141   LOGICAL, INTENT(IN)   :: ok_ice_sursat 
     142   INTEGER, INTENT(IN) :: iflag_ratqs
    141143
    142144   REAL, INTENT(IN)      :: RCPD_in, RLSTT_in, RLVTT_in, RLMLT_in
     
    255257    IF (ok_ice_sursat) CALL ice_sursat_init()
    256258
    257 
     259    CALL cloudth_ini(iflag_cloudth_vert,iflag_ratqs)
    258260
    259261end subroutine lscp_ini
  • LMDZ6/trunk/libf/phylmd/lscp_mod.F90

    r4639 r4651  
    1717     distcltop,temp_cltop,                               &
    1818     qclr, qcld, qss, qvc, rnebclr, rnebss, gamma_ss,   &
    19      Tcontr, qcontr, qcontr2, fcontrN, fcontrP)
     19     Tcontr, qcontr, qcontr2, fcontrN, fcontrP,         &
     20      cloudth_sth,cloudth_senv,cloudth_sigmath,cloudth_sigmaenv)
    2021
    2122!++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
     
    9091!
    9192USE print_control_mod, ONLY: prt_level, lunout
    92 USE cloudth_mod, ONLY : cloudth, cloudth_v3, cloudth_v6, cloudth_mpc
     93USE lmdz_cloudth, ONLY : cloudth, cloudth_v3, cloudth_v6, cloudth_mpc
    9394USE lscp_tools_mod, ONLY : calc_qsat_ecmwf, icefrac_lscp, calc_gammasat
    9495USE lscp_tools_mod, ONLY : fallice_velocity, distance_to_cloud_top
     
    187188  REAL, DIMENSION(klon,klev),      INTENT(OUT)  :: fcontrN          ! fraction of grid favourable to non-persistent contrails
    188189  REAL, DIMENSION(klon,klev),      INTENT(OUT)  :: fcontrP          ! fraction of grid favourable to persistent contrails
     190  REAL, DIMENSION(klon,klev),      INTENT(OUT)  :: cloudth_sth,cloudth_senv,cloudth_sigmath,cloudth_sigmaenv
    189191 
    190192
     
    623625                         zq,zqta,fraca,                            &
    624626                         qcloud,ctot,zpspsk,paprs,pplay,ztla,zthl, &
    625                          ratqs,zqs,t)
     627                         ratqs,zqs,t,                              &
     628                         cloudth_sth,cloudth_senv,cloudth_sigmath,cloudth_sigmaenv)
     629
     630
     631
     632
    626633
    627634                ELSEIF (iflag_cloudth_vert.GE.3 .AND. iflag_cloudth_vert.LE.5) THEN
     
    630637                         zq,zqta,fraca,                                     &
    631638                         qcloud,ctot,ctot_vol,zpspsk,paprs,pplay,ztla,zthl, &
    632                          ratqs,zqs,t)
     639                         ratqs,zqs,t, &
     640                         cloudth_sth,cloudth_senv,cloudth_sigmath,cloudth_sigmaenv)
    633641
    634642                !Jean Jouhaud's version, Decembre 2018
     
    640648                         zq,zqta,fraca,                                     &
    641649                         qcloud,ctot,ctot_vol,zpspsk,paprs,pplay,ztla,zthl, &
    642                          ratqs,zqs,t)
     650                         ratqs,zqs,t, &
     651                         cloudth_sth,cloudth_senv,cloudth_sigmath,cloudth_sigmaenv)
    643652
    644653                ENDIF
     
    651660                         t,ztv,zq,zqta,fraca, zpspsk,                      &
    652661                         paprs,pplay,ztla,zthl,ratqs,zqs,psfl,             &
    653                          qcloud,qincloud_mpc,icefrac_mpc,ctot,ctot_vol)
     662                         qcloud,qincloud_mpc,icefrac_mpc,ctot,ctot_vol,    &
     663                         cloudth_sth,cloudth_senv,cloudth_sigmath,cloudth_sigmaenv)
    654664
    655665         ENDIF ! iflag_mpc_bl
  • LMDZ6/trunk/libf/phylmd/physiq_mod.F90

    r4639 r4651  
    8787    USE lmdz_ratqs_main, ONLY : ratqs_main
    8888    USE lmdz_ratqs_ini, ONLY : ratqs_ini
     89    USE phys_output_var_mod, ONLY :      cloudth_sth,cloudth_senv,cloudth_sigmath,cloudth_sigmaenv
     90
    8991
    9092    !USE cmp_seri_mod
     
    18071809   &    RG,RD,RCPD,RKAPPA,RLVTT,RETV)
    18081810       CALL ratqs_ini(klon,klev,iflag_thermals,lunout,nbsrf,is_lic,is_ter,RG,RV,RD,RCPD,RLSTT,RLVTT,RTT)
    1809        CALL lscp_ini(pdtphys,ok_ice_sursat, RCPD, RLSTT, RLVTT, RLMLT, RVTMP2, RTT,RD,RG)
     1811       CALL lscp_ini(pdtphys,ok_ice_sursat,iflag_ratqs,RCPD, RLSTT, RLVTT, RLMLT, RVTMP2, RTT,RD,RG)
    18101812       CALL blowing_snow_ini(prt_level,lunout, &
    18111813                             RCPD, RLSTT, RLVTT, RLMLT, &
     
    37413743         iflag_ice_thermo, ok_ice_sursat, zqsatl, zqsats, distcltop, temp_cltop, &
    37423744         qclr, qcld, qss, qvc, rnebclr, rnebss, gamma_ss, &
    3743          Tcontr, qcontr, qcontr2, fcontrN, fcontrP )
     3745         Tcontr, qcontr, qcontr2, fcontrN, fcontrP , &
     3746         cloudth_sth,cloudth_senv,cloudth_sigmath,cloudth_sigmaenv)
     3747
    37443748
    37453749    ELSE
  • LMDZ6/trunk/libf/phylmd/physiqex_mod.F90

    r4548 r4651  
    99     &            debut,lafin,pdtphys, &
    1010     &            paprs,pplay,pphi,pphis,presnivs, &
    11      &            u,v,rot,t,qx, &
     11     &            u,v,rot,temp,qx, &
    1212     &            flxmass_w, &
    1313     &            d_u, d_v, d_t, d_qx, d_ps)
    1414
    15       USE dimphy, only : klon,klev
    16       USE infotrac_phy, only : nqtot
    17       USE geometry_mod, only : latitude
    18 !      USE comcstphy, only : rg
    19       USE ioipsl, only : ymds2ju
    20       USE phys_state_var_mod, only : phys_state_var_init
    21       USE phyetat0_mod, only: phyetat0
    22       USE output_physiqex_mod, ONLY: output_physiqex
     15
     16USE dimphy, only : klon,klev
     17USE infotrac_phy, only : nqtot
     18USE geometry_mod, only : latitude
     19USE ioipsl, only : ymds2ju
     20USE phys_state_var_mod, only : phys_state_var_init
     21USE phyetat0_mod, only: phyetat0
     22USE output_physiqex_mod, ONLY: output_physiqex
     23use vdif_ini, only : vdif_ini_
     24USE lmdz_thermcell_ini, ONLY : thermcell_ini
     25USE ioipsl_getin_p_mod, ONLY : getin_p
     26USE wxios, ONLY: missing_val, using_xios
     27USE lscp_mod, ONLY : lscp
     28USE lscp_ini_mod, ONLY : lscp_ini
     29USE add_phys_tend_mod, ONLY : add_phys_tend
     30
    2331
    2432      IMPLICIT none
     33
     34include "YOETHF.h"
     35
     36
     37
     38
    2539!
    2640! Routine argument:
     
    3246      logical,intent(in) :: lafin ! signals last call to physics
    3347      real,intent(in) :: pdtphys ! physics time step (s)
    34       real,intent(in) :: paprs(klon,klev+1) ! interlayer pressure (Pa)
    35       real,intent(in) :: pplay(klon,klev) ! mid-layer pressure (Pa)
    36       real,intent(in) :: pphi(klon,klev) ! geopotential at mid-layer
    37       real,intent(in) :: pphis(klon) ! surface geopotential
    38       real,intent(in) :: presnivs(klev) ! pseudo-pressure (Pa) of mid-layers
    39       real,intent(in) :: u(klon,klev) ! eastward zonal wind (m/s)
    40       real,intent(in) :: v(klon,klev) ! northward meridional wind (m/s)
    41       real,intent(in) :: rot(klon,klev) ! northward meridional wind (m/s)
    42       real,intent(in) :: t(klon,klev) ! temperature (K)
    43       real,intent(in) :: qx(klon,klev,nqtot) ! tracers (.../kg_air)
    44       real,intent(in) :: flxmass_w(klon,klev) ! vertical mass flux
    45       real,intent(out) :: d_u(klon,klev) ! physics tendency on u (m/s/s)
    46       real,intent(out) :: d_v(klon,klev) ! physics tendency on v (m/s/s)
    47       real,intent(out) :: d_t(klon,klev) ! physics tendency on t (K/s)
    48       real,intent(out) :: d_qx(klon,klev,nqtot) ! physics tendency on tracers
    49       real,intent(out) :: d_ps(klon) ! physics tendency on surface pressure
     48      real,dimension(klon,klev+1),intent(in) :: paprs ! interlayer pressure (Pa)
     49      real,dimension(klon,klev),intent(in) :: pplay ! mid-layer pressure (Pa)
     50      real,dimension(klon,klev),intent(in) :: pphi ! geopotential at mid-layer
     51      real,dimension(klon),intent(in) :: pphis ! surface geopotential
     52      real,dimension(klev),intent(in) :: presnivs ! pseudo-pressure (Pa) of mid-layers
     53      real,dimension(klon,klev),intent(in) :: u ! eastward zonal wind (m/s)
     54      real,dimension(klon,klev),intent(in) :: v ! northward meridional wind (m/s)
     55      real,dimension(klon,klev),intent(in) :: rot ! northward meridional wind (m/s)
     56      real,dimension(klon,klev),intent(in) :: temp ! temperature (K)
     57      real,dimension(klon,klev,nqtot),intent(in) :: qx  ! tracers (.../kg_air)
     58      real,dimension(klon,klev),intent(in) :: flxmass_w ! vertical mass flux
     59      real,dimension(klon,klev),intent(out) :: d_u ! physics tendency on u (m/s/s)
     60      real,dimension(klon,klev),intent(out) :: d_v ! physics tendency on v (m/s/s)
     61      real,dimension(klon,klev),intent(out) :: d_t ! physics tendency on t (K/s)
     62      real,dimension(klon,klev,nqtot),intent(out) :: d_qx ! physics tendency on tracers
     63      real,dimension(klon),intent(out) :: d_ps ! physics tendency on surface pressure
     64
     65      real, dimension(klon,klev) :: u_loc
     66      real, dimension(klon,klev) :: v_loc
     67      real, dimension(klon,klev) :: t_loc
     68      real, dimension(klon,klev) :: h_loc
     69      real, dimension(klon,klev) :: d_u_loc,d_v_loc,d_t_loc,d_h_loc
     70
     71      real, dimension(klon,klev) :: d_u_dyn,d_v_dyn,d_t_dyn
     72      real, dimension(klon,klev,nqtot) :: d_q_dyn
     73      real, allocatable, dimension(:,:), save :: u_prev,v_prev,t_prev
     74      real, allocatable, dimension(:,:,:), save :: q_prev
     75!$OMP THREADPRIVATE(u_prev,v_prev,t_prev,q_prev)
     76
     77
     78
     79      real, dimension(klon,klev) :: d_u_vdif,d_v_vdif,d_t_vdif,d_h_vdif
     80      real, dimension(klon,klev) :: d_u_the,d_v_the,d_t_the
     81      real, dimension(klon,klev,nqtot) :: q_loc,d_q_loc,d_q_vdif,d_q_the
     82
     83real, dimension(klon) :: capcal,z0m,z0h,dtsrf,emis,fluxsrf,cdh,cdv,tsrf_
     84real, dimension(klon,klev) :: zzlay,masse,zpopsk
     85real, dimension(klon,klev+1) :: zzlev,kz_v,kz_h,richardson
     86
     87real, save, allocatable, dimension(:) :: tsrf,f0,zmax0
     88real, save, allocatable, dimension(:,:) :: q2
     89!$OMP THREADPRIVATE(tsrf,q2,f0,zmax0)
     90
     91    real,save :: ratqsbas=0.002,ratqshaut=0.3,ratqsp0=50000.,ratqsdp=20000.
     92    !$OMP THREADPRIVATE(ratqsbas,ratqshaut,ratqsp0,ratqsdp)
     93
     94
     95real :: z1,z2,tau_thermals
     96logical :: lwrite
     97integer :: iflag_replay
     98
     99integer :: iflag_thermals=18
     100
     101!--------------------------------------------------------------
     102! Declaration lscp
     103!--------------------------------------------------------------
     104  INTEGER                         :: iflag_cld_th    ! flag that determines the distribution of convective clouds    ! IN
     105  INTEGER                         :: iflag_ice_thermo! flag to activate the ice thermodynamics                       ! IN
     106  LOGICAL                         :: ok_ice_sursat   ! flag to determine if ice sursaturation is activated           ! IN
     107  LOGICAL, DIMENSION(klon,klev)   :: ptconv          ! grid points where deep convection scheme is active            ! IN
     108  REAL, DIMENSION(klon,klev)      :: ztv             ! virtual potential temperature [K]                             ! IN
     109  REAL, DIMENSION(klon,klev)      :: zqta            ! specific humidity within thermals [kg/kg]                     ! IN
     110  REAL, DIMENSION(klon,klev+1)      :: frac_the,fm_the
     111  REAL, DIMENSION(klon,klev)      :: zpspsk          ! exner potential (p/100000)**(R/cp)                            ! IN
     112  REAL, DIMENSION(klon,klev)      :: ztla            ! liquid temperature within thermals [K]                        ! IN
     113  REAL, DIMENSION(klon,klev)         :: zthl         ! liquid potential temperature [K]                              ! INOUT
     114  REAL, DIMENSION(klon,klev)      :: ratqs            ! function of pressure that sets the large-scale               ! INOUT
     115  REAL, DIMENSION(klon,klev)      :: beta             ! conversion rate of condensed water                           ! INOUT
     116  REAL, DIMENSION(klon,klev)      :: rneb_seri        ! fraction nuageuse en memoire                                 ! INOUT
     117  REAL, DIMENSION(klon,klev)      :: d_t_lscp         ! temperature increment [K]                                    ! OUT
     118  REAL, DIMENSION(klon,klev)      :: d_q_lscp         ! specific humidity increment [kg/kg]                          ! OUT
     119  REAL, DIMENSION(klon,klev)      :: d_ql_lscp        ! liquid water increment [kg/kg]                               ! OUT
     120  REAL, DIMENSION(klon,klev)      :: d_qi_lscp        ! cloud ice mass increment [kg/kg]                             ! OUT
     121  REAL, DIMENSION(klon,klev)      :: rneb             ! cloud fraction [-]                                           ! OUT
     122  REAL, DIMENSION(klon,klev)      :: rneblsvol        ! cloud fraction per unit volume [-]                           ! OUT
     123  REAL, DIMENSION(klon,klev)      :: pfraclr          ! precip fraction clear-sky part [-]                           ! OUT
     124  REAL, DIMENSION(klon,klev)      :: pfracld          ! precip fraction cloudy part [-]                              ! OUT
     125  REAL, DIMENSION(klon,klev)      :: radocond         ! condensed water used in the radiation scheme [kg/kg]         ! OUT
     126  REAL, DIMENSION(klon,klev)      :: radicefrac       ! ice fraction of condensed water for radiation scheme         ! OUT
     127  REAL, DIMENSION(klon,klev)      :: rhcl             ! clear-sky relative humidity [-]                              ! OUT
     128  REAL, DIMENSION(klon)           :: rain             ! surface large-scale rainfall [kg/s/m2]                       ! OUT
     129  REAL, DIMENSION(klon)           :: snow             ! surface large-scale snowfall [kg/s/m2]                       ! OUT
     130  REAL, DIMENSION(klon,klev)      :: qsatl            ! saturation specific humidity wrt liquid [kg/kg]              ! OUT
     131  REAL, DIMENSION(klon,klev)      :: qsats            ! saturation specific humidity wrt ice [kg/kg]                 ! OUT
     132  REAL, DIMENSION(klon,klev+1)    :: prfl             ! large-scale rainfall flux in the column [kg/s/m2]            ! OUT
     133  REAL, DIMENSION(klon,klev+1)    :: psfl             ! large-scale snowfall flux in the column [kg/s/m2]            ! OUT
     134  REAL, DIMENSION(klon,klev)      :: distcltop        ! distance to cloud top [m]                                    ! OUT
     135  REAL, DIMENSION(klon,klev)      :: temp_cltop       ! temperature of cloud top [K]                                 ! OUT
     136  REAL, DIMENSION(klon,klev)      :: frac_impa        ! scavenging fraction due tu impaction [-]                     ! OUT
     137  REAL, DIMENSION(klon,klev)      :: frac_nucl        ! scavenging fraction due tu nucleation [-]                    ! OUT
     138  REAL, DIMENSION(klon,klev)      :: qclr             ! specific total water content in clear sky region [kg/kg]     ! OUT
     139  REAL, DIMENSION(klon,klev)      :: qcld             ! specific total water content in cloudy region [kg/kg]        ! OUT
     140  REAL, DIMENSION(klon,klev)      :: qss              ! specific total water content in supersat region [kg/kg]      ! OUT
     141  REAL, DIMENSION(klon,klev)      :: qvc              ! specific vapor content in clouds [kg/kg]                     ! OUT
     142  REAL, DIMENSION(klon,klev)      :: rnebclr          ! mesh fraction of clear sky [-]                               ! OUT
     143  REAL, DIMENSION(klon,klev)      :: rnebss           ! mesh fraction of ISSR [-]                                    ! OUT
     144  REAL, DIMENSION(klon,klev)      :: gamma_ss         ! coefficient governing the ice nucleation RHi threshold [-]   ! OUT   
     145  REAL, DIMENSION(klon,klev)      :: Tcontr           ! threshold temperature for contrail formation [K]             ! OUT
     146  REAL, DIMENSION(klon,klev)      :: qcontr           ! threshold humidity for contrail formation [kg/kg]            ! OUT
     147  REAL, DIMENSION(klon,klev)      :: qcontr2          ! // (2nd expression more consistent with LMDZ expression of q)! OUT         
     148  REAL, DIMENSION(klon,klev)      :: fcontrN          ! fraction of grid favourable to non-persistent contrails      ! OUT
     149  REAL, DIMENSION(klon,klev)      :: fcontrP          ! fraction of grid favourable to persistent contrails          ! OUT
     150!--------------------------------------------------------------
     151
     152  REAL, DIMENSION(klon,klev)      :: d_t_eva,d_q_eva,d_ql_eva,d_qi_eva
     153include "YOMCST.h"
    50154
    51155!    include "clesphys.h"
     
    58162
    59163
    60 real :: temp_newton(klon,klev)
    61 integer :: k
     164real,dimension(klon,klev) :: temp_newton
     165integer :: i,k,iq
     166INTEGER, SAVE :: itap=0
     167!$OMP THREADPRIVATE(itap)
     168INTEGER, SAVE :: abortphy=0   ! Reprere si on doit arreter en fin de phys
     169!$OMP THREADPRIVATE(abortphy)
     170
     171integer, save :: iflag_reevap=1,iflag_newton=0,iflag_vdif=1,iflag_lscp=1,iflag_cloudth_vert,iflag_ratqs
     172!$OMP THREADPRIVATE(iflag_reevap,iflag_newton,iflag_vdif,iflag_lscp,iflag_cloudth_vert,iflag_ratqs)
     173
    62174logical, save :: first=.true.
    63175!$OMP THREADPRIVATE(first)
    64 
    65 real,save :: rg=9.81
    66 !$OMP THREADPRIVATE(rg)
    67176
    68177! For I/Os
    69178integer :: itau0
    70179real :: zjulian
     180real,dimension(klon,klev) :: du0,dv0,dqbs0
     181real,dimension(klon,klev) :: cloudth_sth,cloudth_senv,cloudth_sigmath,cloudth_sigmaenv
    71182
    72183
     
    93204  ! Initialize IOIPSL output file
    94205#endif
     206call suphel
     207call vdif_ini_(klon,RCPD,RD,RG,RKAPPA)
     208! Pourquoi ce tau_thermals en argument ??? AFAIRE
     209tau_thermals=0.
     210call getin_p('iflag_thermals',iflag_thermals)
     211
     212call getin_p('iflag_newton',iflag_newton)
     213call getin_p('iflag_reevap',iflag_reevap)
     214call getin_p('iflag_cloudth_vert',iflag_cloudth_vert)
     215call getin_p('iflag_ratqs',iflag_ratqs)
     216call getin_p('iflag_vdif',iflag_vdif)
     217call getin_p('iflag_lscp',iflag_lscp)
     218call getin_p('ratqsbas',ratqsbas)
     219call getin_p('ratqshaut',ratqshaut)
     220call getin_p('ratqsp0',ratqsp0)
     221call getin_p('ratqsdp',ratqsdp)
     222CALL thermcell_ini(iflag_thermals,0,tau_thermals,6, &
     223   &    RG,RD,RCPD,RKAPPA,RLVTT,RETV)
     224CALL lscp_ini(pdtphys,.false.,iflag_ratqs, RCPD, RLSTT, RLVTT, RLMLT, RVTMP2, RTT,RD,RG)
     225
     226
     227
     228allocate(tsrf(klon),q2(klon,klev+1),f0(klon),zmax0(klon))
     229allocate(u_prev(klon,klev),v_prev(klon,klev),t_prev(klon,klev),q_prev(klon,klev,nqtot))
     230
     231u_prev(:,:)=u(:,:)
     232v_prev(:,:)=v(:,:)
     233t_prev(:,:)=temp(:,:)
     234q_prev(:,:,:)=qx(:,:,:)
     235
     236q2=1.e-10
     237tsrf=temp(:,1)
     238f0=0.
     239zmax0=0.
     240
     241iflag_replay=1
     242if ( iflag_replay == 1 ) CALL iophys_ini(pdtphys)
     243
    95244
    96245endif ! of if (debut)
     
    100249!------------------------------------------------------------
    101250
     251d_u_dyn(:,:)=(u(:,:)-u_prev(:,:))/pdtphys
     252d_v_dyn(:,:)=(v(:,:)-v_prev(:,:))/pdtphys
     253d_t_dyn(:,:)=(temp(:,:)-t_prev(:,:))/pdtphys
     254d_q_dyn(:,:,:)=(qx(:,:,:)-q_prev(:,:,:))/pdtphys
    102255
    103256! set all tendencies to zero
     
    108261d_ps(1:klon)=0.
    109262
     263u_loc(1:klon,1:klev)=u(1:klon,1:klev)
     264v_loc(1:klon,1:klev)=v(1:klon,1:klev)
     265t_loc(1:klon,1:klev)=temp(1:klon,1:klev)
     266d_u_loc(1:klon,1:klev)=0.
     267d_v_loc(1:klon,1:klev)=0.
     268d_t_loc(1:klon,1:klev)=0.
     269do iq=1,nqtot
     270   do k=1,klev
     271      do i=1,klon
     272         q_loc(i,k,iq)=qx(i,k,iq)
     273      enddo
     274   enddo
     275enddo
     276
     277du0(1:klon,1:klev)=0.
     278dv0(1:klon,1:klev)=0.
     279dqbs0(1:klon,1:klev)=0.
     280
     281
     282
    110283!------------------------------------------------------------
    111284! Calculs
    112285!------------------------------------------------------------
    113286
    114 ! compute tendencies to return to the dynamics:
    115 ! "friction" on the first layer
    116 d_u(1:klon,1)=-u(1:klon,1)/86400.
    117 d_v(1:klon,1)=-v(1:klon,1)/86400.
    118 ! newtonian relaxation towards temp_newton()
     287!------------------------------------------------------------
     288! Rappel en temperature et frottement dans la premiere chouche
     289!------------------------------------------------------------
     290
     291if ( iflag_newton == 1 ) then
     292    ! compute tendencies to return to the dynamics:
     293    ! "friction" on the first layer
     294    d_u(1:klon,1)=-u(1:klon,1)/86400.
     295    d_v(1:klon,1)=-v(1:klon,1)/86400.
     296    ! newtonian relaxation towards temp_newton()
     297    do k=1,klev
     298       temp_newton(1:klon,k)=280.+cos(latitude(1:klon))*40.-pphi(1:klon,k)/rg*6.e-3
     299       d_t(1:klon,k)=(temp_newton(1:klon,k)-temp(1:klon,k))/5.e5
     300    enddo
     301else
     302   temp_newton(:,:)=0.
     303endif
     304
     305
     306!------------------------------------------------------------
     307! Reevaporation de la pluie
     308!------------------------------------------------------------
     309
     310iflag_ice_thermo=1
     311if ( iflag_reevap == 1 ) then
     312      CALL reevap (klon,klev,iflag_ice_thermo,t_loc,q_loc(:,:,1),q_loc(:,:,2),q_loc(:,:,3), &
     313&                  d_t_eva,d_q_eva,d_ql_eva,d_qi_eva)
     314     do k=1,klev
     315        do i=1,klon
     316           t_loc(i,k)=t_loc(i,k)+d_t_eva(i,k)
     317           q_loc(i,k,1)=q_loc(i,k,1)+d_q_eva(i,k)
     318           q_loc(i,k,2)=q_loc(i,k,2)+d_ql_eva(i,k)
     319           q_loc(i,k,3)=q_loc(i,k,3)+d_qi_eva(i,k)
     320           q_loc(i,k,2)=0.
     321           q_loc(i,k,3)=0.
     322        enddo
     323     enddo
     324else
     325     d_t_eva(:,:)=0.
     326     d_q_eva(:,:)=0.
     327     d_ql_eva(:,:)=0.
     328     d_qi_eva(:,:)=0.
     329endif
     330
     331
     332
     333!-----------------------------------------------------------------------
     334! Variables intermédiaires (altitudes, temperature potentielle ...)
     335!-----------------------------------------------------------------------
     336
     337DO k=1,klev
     338   DO i=1,klon
     339      zzlay(i,k)=pphi(i,k)/rg
     340   ENDDO
     341ENDDO
     342DO i=1,klon
     343   zzlev(i,1)=0.
     344ENDDO
     345DO k=2,klev
     346   DO i=1,klon
     347      z1=(pplay(i,k-1)+paprs(i,k))/(pplay(i,k-1)-paprs(i,k))
     348      z2=(paprs(i,k)+pplay(i,k))/(paprs(i,k)-pplay(i,k))
     349      zzlev(i,k)=(z1*zzlay(i,k-1)+z2*zzlay(i,k))/(z1+z2)
     350   ENDDO
     351ENDDO
     352
     353!   Transformation de la temperature en temperature potentielle
     354DO k=1,klev
     355   DO i=1,klon
     356      zpopsk(i,k)=(pplay(i,k)/paprs(i,1))**rkappa
     357      masse(i,k)=(paprs(i,k)-paprs(i,k+1))/rg
     358   ENDDO
     359ENDDO
     360DO k=1,klev
     361   DO i=1,klon
     362      h_loc(i,k)=t_loc(i,k)/zpopsk(i,k)
     363      d_h_loc(i,k)=d_t_loc(i,k)/zpopsk(i,k)
     364      d_q_loc(i,k,1)=0.
     365   ENDDO
     366ENDDO
     367
     368!-----------------------------------------------------------------------
     369! Diffusion verticale
     370!-----------------------------------------------------------------------
     371
     372if ( iflag_vdif == 1 ) then
     373      emis(:)=1.
     374      !tsrf=300.
     375      z0m=0.01
     376      z0h=0.01
     377      capcal=1e5
     378      lwrite=.false.
     379      print*,'lwrite ',lwrite
     380            call vdif(klon,klev,                                   &
     381     &                pdtphys,capcal,z0m,z0h,                  &
     382     &                pplay,paprs,zzlay,zzlev,                      &
     383     &                u_loc,v_loc,t_loc,h_loc,q_loc,tsrf,emis,                         &
     384     &                d_u_loc,d_v_loc,d_h_loc,d_q_loc,fluxsrf,                   &
     385     &                d_u_vdif,d_v_vdif,d_h_vdif,d_q_vdif,dtsrf,q2,kz_v,kz_h,     &
     386     &                richardson,cdv,cdh,                         &
     387     &                lwrite)
     388      do k=1,klev
     389         do i=1,klon
     390            d_t_vdif(i,k)=d_h_vdif(i,k)*zpopsk(i,k)
     391            t_loc(i,k)=t_loc(i,k)+d_t_vdif(i,k)*pdtphys
     392            u_loc(i,k)=u_loc(i,k)+d_u_vdif(i,k)*pdtphys
     393            v_loc(i,k)=v_loc(i,k)+d_v_vdif(i,k)*pdtphys
     394            q_loc(i,k,1)=q_loc(i,k,1)+d_q_vdif(i,k,1)*pdtphys
     395         enddo
     396      enddo
     397      do i=1,klon
     398         tsrf(i)=tsrf(i)+dtsrf(i)*pdtphys
     399      enddo
     400else
     401      d_u_vdif(:,:)=0.
     402      d_v_vdif(:,:)=0.
     403      d_t_vdif(:,:)=0.
     404      d_h_vdif(:,:)=0.
     405      d_q_vdif(:,:,1)=0.
     406      kz_v(:,:)=0.
     407      kz_h(:,:)=0.
     408      richardson(:,:)=0.
     409endif
     410
     411!-----------------------------------------------------------------------
     412! Thermiques
     413!-----------------------------------------------------------------------
     414
    119415do k=1,klev
    120   temp_newton(1:klon,k)=280.+cos(latitude(1:klon))*40.-pphi(1:klon,k)/rg*6.e-3
    121   d_t(1:klon,k)=(temp_newton(1:klon,k)-t(1:klon,k))/1.e5
     416   do i=1,klon
     417      d_u_the(i,k)=0.
     418      d_v_the(i,k)=0.
     419      d_t_the(i,k)=0.
     420      d_q_the(i,k,1)=0.
     421   enddo
    122422enddo
    123423
     424if ( iflag_thermals > 0 ) then
     425
     426
     427          zqta(:,:)=q_loc(:,:,1)
     428          call caltherm(pdtphys  &
     429         &      ,pplay,paprs,pphi  &
     430         &      ,u_loc,v_loc,t_loc,q_loc,debut  &
     431         &      ,f0,zmax0,d_u_the,d_v_the,d_t_the,d_q_the  &
     432         &     ,frac_the,fm_the,zqta,ztv,zpspsk,ztla,zthl &
     433         &   )
     434   
     435          do k=1,klev
     436             do i=1,klon
     437                t_loc(i,k)=t_loc(i,k)+d_t_the(i,k)
     438                u_loc(i,k)=u_loc(i,k)+d_u_the(i,k)
     439                v_loc(i,k)=v_loc(i,k)+d_v_the(i,k)
     440                q_loc(i,k,1)=q_loc(i,k,1)+d_q_the(i,k,1)
     441             enddo
     442          enddo
     443
     444else
     445          frac_the(:,:)=0.
     446          fm_the(:,:)=0.
     447          ztv(:,:)=t_loc(:,:)
     448          zqta(:,:)=q_loc(:,:,1)
     449          ztla(:,:)=0.
     450          zthl(:,:)=0.
     451          zpspsk(:,:)=(pplay(:,:)/100000.)**RKAPPA
     452 
     453endif
     454
     455!-----------------------------------------------------------------------
     456! Condensation grande échelle
     457!-----------------------------------------------------------------------
     458
     459iflag_cld_th=5
     460ok_ice_sursat=.false.
     461ptconv(:,:)=.false.
     462distcltop=0.
     463temp_cltop=0.
     464beta(:,:)=1.
     465rneb_seri(:,:)=0.
     466do k=1,klev
     467  ratqs(:,k)=ratqsbas+0.5*(ratqshaut-ratqsbas) &
     468  *( tanh( (ratqsp0-pplay(:,k))/ratqsdp) + 1.)
     469enddo
     470
     471
     472if ( iflag_lscp == 1 ) then
     473
     474    call lscp(klon,klev,pdtphys,missing_val,            &
     475     paprs,pplay,t_loc,q_loc,ptconv,ratqs,                      &
     476     d_t_lscp, d_q_lscp, d_ql_lscp, d_qi_lscp, rneb, rneblsvol, rneb_seri,  &
     477     pfraclr,pfracld,                                   &
     478     radocond, radicefrac, rain, snow,                  &
     479     frac_impa, frac_nucl, beta,                        &
     480     prfl, psfl, rhcl, zqta, frac_the,                     &
     481     ztv, zpspsk, ztla, zthl, iflag_cld_th,             &
     482     iflag_ice_thermo, ok_ice_sursat, qsatl, qsats,     &
     483     distcltop,temp_cltop,                               &
     484     qclr, qcld, qss, qvc, rnebclr, rnebss, gamma_ss,   &
     485     Tcontr, qcontr, qcontr2, fcontrN, fcontrP, &
     486     cloudth_sth,cloudth_senv,cloudth_sigmath,cloudth_sigmaenv)
     487
     488
     489          do k=1,klev
     490             do i=1,klon
     491                t_loc(i,k)=t_loc(i,k)+d_t_lscp(i,k)
     492                q_loc(i,k,1)=q_loc(i,k,1)+d_q_lscp(i,k)
     493                q_loc(i,k,2)=q_loc(i,k,2)+d_ql_lscp(i,k)
     494                q_loc(i,k,3)=q_loc(i,k,3)+d_qi_lscp(i,k)
     495             enddo
     496          enddo
     497
     498else
     499     d_t_lscp(:,:)=0.
     500     d_q_lscp(:,:)=0.
     501     d_ql_lscp(:,:)=0.
     502     d_qi_lscp(:,:)=0.
     503     rneb(:,:)=0.
     504     rneblsvol(:,:)=0.
     505     pfraclr(:,:)=0.
     506     pfracld(:,:)=0.
     507     radocond(:,:)=0.
     508     rain(:)=0.
     509     snow(:)=0.
     510     radicefrac(:,:)=0.
     511     rhcl      (:,:)=0.
     512     qsatl     (:,:)=0.
     513     qsats     (:,:)=0.
     514     prfl      (:,:)=0.
     515     psfl      (:,:)=0.
     516     distcltop (:,:)=0.
     517     temp_cltop(:,:)=0.
     518     frac_impa (:,:)=0.
     519     frac_nucl (:,:)=0.
     520     qclr      (:,:)=0.
     521     qcld      (:,:)=0.
     522     qss       (:,:)=0.
     523     qvc       (:,:)=0.
     524     rnebclr   (:,:)=0.
     525     rnebss    (:,:)=0.
     526     gamma_ss  (:,:)=0.
     527     Tcontr    (:,:)=0.
     528     qcontr    (:,:)=0.
     529     qcontr2   (:,:)=0.
     530     fcontrN   (:,:)=0.
     531     fcontrP   (:,:)=0.
     532endif
     533
     534
     535d_u(:,:)=(u_loc(:,:)-u(:,:))/pdtphys
     536d_v(:,:)=(v_loc(:,:)-v(:,:))/pdtphys
     537d_t(:,:)=(t_loc(:,:)-temp(:,:))/pdtphys
     538d_qx(:,:,:)=(q_loc(:,:,:)-qx(:,:,:))/pdtphys
    124539
    125540!------------------------------------------------------------
     
    128543
    129544
    130 call output_physiqex(debut,zjulian,pdtphys,presnivs,paprs,u,v,t,qx,0.*t,0.*t,0.*t,0.*t,0.*t,0.*t)
     545tsrf_(:)=tsrf(:)
     546if ( iflag_replay == 0 ) then
     547   call output_physiqex(debut,zjulian,pdtphys,presnivs,paprs,u,v,temp,qx,0.*u,0.*u,0.*u,0.*u,q2,0.*u)
     548else
     549     ! En mode replay, on sort aussi les variables de base
     550! Les lignes qui suivent ont été générées automatiquement avec :
     551! ( for i in `grep -i 'real.*::' physiqex_mod.F90 | sed -e '/^!/d' | grep '(klon,klev' | cut -d: -f3 | cut -d! -f1 | sed -e 's/,/ /g' -e '/rot/d'` ; do echo ' call iophys_ecrit("'$i'",klev,"","",'$i')' ; done ) > physiqex_out.h
     552! ( for i in `grep -i 'real.*::' physiqex_mod.F90 | sed -e '/^!/d' | grep '(klon)' | cut -d: -f3 | cut -d! -f1 | sed -e 's/,/ /g' -e '/rot/d'` ; do echo ' call iophys_ecrit("'$i'",1,"","",'$i')' ; done ) >> physiqex_out.h
     553include "physiqex_out.h"
     554
     555endif
    131556
    132557
     
    136561endif
    137562
     563print*,'Fin physiqex'
    138564
    139565end subroutine physiqex
  • LMDZ6/trunk/libf/phylmdiso/fisrtilp.F90

    r4535 r4651  
    2020  USE icefrac_lsc_mod ! compute ice fraction (JBM 3/14)
    2121  USE print_control_mod, ONLY: prt_level, lunout
    22   USE cloudth_mod
     22  USE lmdz_cloudth, only : cloudth, cloudth_v3, cloudth_v6
    2323  USE ioipsl_getin_p_mod, ONLY : getin_p
    2424  USE phys_local_var_mod, ONLY: ql_seri,qs_seri
     
    3131  USE lscp_ini_mod, ONLY: cld_tau_lsc, cld_tau_con, cld_lc_lsc, cld_lc_con
    3232  USE lscp_ini_mod, ONLY: reevap_ice, iflag_bergeron, iflag_fisrtilp_qsat, iflag_pdf
     33      use phys_output_var_mod, ONLY : cloudth_sth,cloudth_senv
     34      use phys_output_var_mod, ONLY : cloudth_sigmath,cloudth_sigmaenv
     35
    3336
    3437
     
    11241127                   zq,zqta,fraca, &
    11251128                   qcloud,ctot,zpspsk,paprs,pplay,ztla,zthl, &
    1126                    ratqs,zqs,t)
     1129                   ratqs,zqs,t, &
     1130                   cloudth_sth,cloudth_senv,cloudth_sigmath,cloudth_sigmaenv)
     1131
    11271132              elseif (iflag_cloudth_vert>=3 .and. iflag_cloudth_vert<=5) then
    11281133               call cloudth_v3(klon,klev,k,ztv, &
    11291134                   zq,zqta,fraca, &
    11301135                   qcloud,ctot,ctot_vol,zpspsk,paprs,pplay,ztla,zthl, &
    1131                    ratqs,zqs,t)
     1136                   ratqs,zqs,t, &
     1137                   cloudth_sth,cloudth_senv,cloudth_sigmath,cloudth_sigmaenv)
     1138
    11321139              !----------------------------------
    11331140              !Version these Jean Jouhaud, Decembre 2018
     
    11371144                   zq,zqta,fraca, &
    11381145                   qcloud,ctot,ctot_vol,zpspsk,paprs,pplay,ztla,zthl, &
    1139                    ratqs,zqs,t)
     1146                   ratqs,zqs,t, &
     1147                   cloudth_sth,cloudth_senv,cloudth_sigmath,cloudth_sigmaenv)
     1148
    11401149
    11411150              endif
  • LMDZ6/trunk/libf/phylmdiso/lmdz_cloudth.F90

    r4650 r4651  
    1 link ../phylmd/cloudth_mod.F90
     1link ../phylmd/lmdz_cloudth.F90
  • LMDZ6/trunk/libf/phylmdiso/physiq_mod.F90

    r4639 r4651  
    8787    USE lmdz_ratqs_main, ONLY : ratqs_main
    8888    USE lmdz_ratqs_ini, ONLY : ratqs_ini
     89    USE phys_output_var_mod, ONLY :      cloudth_sth,cloudth_senv,cloudth_sigmath,cloudth_sigmaenv
     90
    8991
    9092    !USE cmp_seri_mod
     
    19191921   &    RG,RD,RCPD,RKAPPA,RLVTT,RETV)
    19201922       CALL ratqs_ini(klon,klev,iflag_thermals,lunout,nbsrf,is_lic,is_ter,RG,RV,RD,RCPD,RLSTT,RLVTT,RTT)
    1921        CALL lscp_ini(pdtphys,ok_ice_sursat,RCPD, RLSTT, RLVTT, RLMLT, RVTMP2, RTT,RD,RG)
     1923       CALL lscp_ini(pdtphys,ok_ice_sursat,iflag_ratqs,RCPD, RLSTT, RLVTT, RLMLT, RVTMP2, RTT,RD,RG)
    19221924       CALL blowing_snow_ini(prt_level,lunout, &
    19231925                             RCPD, RLSTT, RLVTT, RLMLT, &
     
    48084810         iflag_ice_thermo, ok_ice_sursat, zqsatl, zqsats, distcltop, temp_cltop, &
    48094811         qclr, qcld, qss, qvc, rnebclr, rnebss, gamma_ss, &
    4810          Tcontr, qcontr, qcontr2, fcontrN, fcontrP )
     4812         Tcontr, qcontr, qcontr2, fcontrN, fcontrP , &
     4813         cloudth_sth,cloudth_senv,cloudth_sigmath,cloudth_sigmaenv)
     4814
    48114815
    48124816    ELSE
Note: See TracChangeset for help on using the changeset viewer.