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

Last change on this file since 5894 was 5894, checked in by Sebastien Nguyen, 11 days ago

rephase LMDZISO with 5864 version of phylmd + bug fixes in physiq_mod + other bugs in isoverif sections. Code now compiles and runs with -debug -isotopes true -isoverif. There are still isoverif error messages for Dexcess getting greater than 1000 on some points at some moments.

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