source: LMDZ6/trunk/libf/phylmdiso/reevap.F90 @ 5279

Last change on this file since 5279 was 5274, checked in by abarral, 21 hours ago

Replace yomcst.h by existing module

File size: 4.7 KB
RevLine 
[4982]1  SUBROUTINE reevap (klon,klev,iflag_ice_thermo,t_seri,qx, &
2   &         d_t_eva,d_qx_eva)
[3927]3
4    ! flag to include modifications to ensure energy conservation (if flag >0)
5    USE add_phys_tend_mod, only : fl_cor_ebil
6#ifdef ISO
[4982]7    USE infotrac_phy, ONLY: ntiso,nqtot,ivap,iliq,isol,iqWIsoPha
[3927]8#ifdef ISOVERIF
9    USE isotopes_verif_mod
10!, ONLY: errmax,errmaxrel, iso_verif_o18_aberrant_nostop,deltaD,deltaO
11    USE isotopes_mod, ONLY: iso_eau,iso_hdo,iso_o18,ridicule
12#ifdef ISOTRAC
13    USE isotrac_routines_mod, ONLY: iso_verif_traceur_pbidouille   
14#endif
15#endif
16#endif
[5274]17    USE yomcst_mod_h, ONLY: RPI, RCLUM, RHPLA, RKBOL, RNAVO                   &
18          , RDAY, REA, REPSM, RSIYEA, RSIDAY, ROMEGA                  &
19          , R_ecc, R_peri, R_incl                                      &
20          , RA, RG, R1SA                                         &
21          , RSIGMA                                                     &
22          , R, RMD, RMV, RD, RV, RCPD                    &
23          , RMO3, RMCO2, RMC, RMCH4, RMN2O, RMCFC11, RMCFC12        &
24          , RCPV, RCVD, RCVV, RKAPPA, RETV, eps_w                    &
25          , RCW, RCS                                                 &
26          , RLVTT, RLSTT, RLMLT, RTT, RATM                           &
27          , RESTT, RALPW, RBETW, RGAMW, RALPS, RBETS, RGAMS            &
28          , RALPD, RBETD, RGAMD
29IMPLICIT none
[3927]30    !>======================================================================
31
32    INTEGER klon,klev,iflag_ice_thermo
[4982]33    REAL, DIMENSION(klon,klev), INTENT(in) :: t_seri
34    REAL, DIMENSION(klon,klev,nqtot), INTENT(in) ::     qx
35    REAL, DIMENSION(klon,klev), INTENT(out) :: d_t_eva
[5149]36    REAL, DIMENSION(klon,klev,nqtot), INTENT(out) ::    d_qx_eva
[3927]37
38    REAL za,zb,zdelta,zlvdcp,zlsdcp
[5274]39    INTEGER i,k,ixt,ivapcur,iliqcur,isolcur
[3927]40
41
42    !--------Stochastic Boundary Layer Triggering: ALE_BL--------
[5274]43    !---Propri\'et\'es du thermiques au LCL
44
[3927]45    include "YOETHF.h"
46    include "FCTTRE.h"
47    !IM 100106 BEG : pouvoir sortir les ctes de la physique
48    !
[5149]49    DO ixt = 1, 1+ntiso
[3927]50    ! Re-evaporer l'eau liquide nuageuse
51    !
[4982]52    iliqcur= iqWIsoPha(ixt,iliq)   
53    ivapcur= iqWIsoPha(ixt,ivap)   
54    isolcur= iqWIsoPha(ixt,isol)   
[3927]55!print *,'rrevap ; fl_cor_ebil:',fl_cor_ebil,' iflag_ice_thermo:',iflag_ice_thermo,' RVTMP2',RVTMP2
56    DO k = 1, klev  ! re-evaporation de l'eau liquide nuageuse
[5149]57      DO i = 1, klon
[4982]58
[5149]59        IF (ixt == 1) THEN ! water
60          IF (fl_cor_ebil > 0) THEN
61            !zlvdcp=RLVTT/RCPD/(1.0+RVTMP2*(q_seri(i,k)+ql_seri(i,k)+qs_seri(i,k)))
62            !zlsdcp=RLSTT/RCPD/(1.0+RVTMP2*(q_seri(i,k)+ql_seri(i,k)+qs_seri(i,k)))
63            zlvdcp=RLVTT/RCPD/(1.0+RVTMP2*(qx(i,k,ivapcur)+qx(i,k,iliqcur)+qx(i,k,isolcur)))
64            zlsdcp=RLSTT/RCPD/(1.0+RVTMP2*(qx(i,k,ivapcur)+qx(i,k,iliqcur)+qx(i,k,isolcur)))
65          ELSE
66            zlvdcp=RLVTT/RCPD/(1.0+RVTMP2*qx(i,k,ivapcur))
67            !jyg<
68            !  Attention : Arnaud a propose des formules completement differentes
69            !                  A verifier !!!
70            zlsdcp=RLSTT/RCPD/(1.0+RVTMP2*qx(i,k,ivapcur))
[4982]71         ENDIF
[5149]72          IF (iflag_ice_thermo == 0) THEN
73            zlsdcp=zlvdcp
74          ENDIF
[3927]75          !>jyg
[5149]76        ENDIF
77        IF (iflag_ice_thermo == 0) THEN   
78           !pas necessaire a priori
79
80            zdelta = MAX(0.,SIGN(1.,RTT-t_seri(i,k)))
81            zdelta = 0.
82            zb = MAX(0.0,qx(i,k,iliqcur))
83            IF (ixt == 1) THEN
84              za = - MAX(0.0,qx(i,k,iliqcur)) &
85                   * (zlvdcp*(1.-zdelta)+zlsdcp*zdelta)
86              d_t_eva(i,k) = za
87            ENDIF
88            d_qx_eva(i,k,ivapcur)  = zb
89            d_qx_eva(i,k,iliqcur) = -qx(i,k,iliqcur)
90            d_qx_eva(i,k,isolcur) = 0.
91
92        ELSE
93             
[3927]94             !CR: on r\'e-\'evapore eau liquide et glace
95
96             !        zdelta = MAX(0.,SIGN(1.,RTT-t_seri(i,k)))
97             !        zb = MAX(0.0,ql_seri(i,k))
98             !        za = - MAX(0.0,ql_seri(i,k)) &
99             !             * (zlvdcp*(1.-zdelta)+zlsdcp*zdelta)
[5149]100            IF (ixt == 1) THEN
101              za = - MAX(0.0,qx(i,k,iliqcur))*zlvdcp &
102                   - MAX(0.0,qx(i,k,iliqcur))*zlsdcp
103              d_t_eva(i,k) = za
104            ENDIF
[4982]105            !zb = MAX(0.0,ql_seri(i,k)+qs_seri(i,k))
106            !d_q_eva(i,k) = zb
107            !d_ql_eva(i,k) = -ql_seri(i,k)
108            !d_qs_eva(i,k) = -qs_seri(i,k)
[3927]109
[4982]110            zb = MAX(0.0,qx(i,k,iliqcur)+qx(i,k,isolcur))
111            d_qx_eva(i,k,ivapcur) = zb
112            d_qx_eva(i,k,iliqcur) = -qx(i,k,iliqcur)
113            d_qx_eva(i,k,isolcur) = -qx(i,k,isolcur)
[5149]114        ENDIF
[3927]115
[4982]116
[5149]117      ENDDO
[3927]118    ENDDO
119
[5149]120    ENDDO ! DO ixt = 1, 1+niso*(nzone +1)
[4982]121
[3927]122RETURN
123
124END SUBROUTINE reevap
Note: See TracBrowser for help on using the repository browser.