source: LMDZ6/trunk/libf/phylmd/Dust/trconvect.f90 @ 5277

Last change on this file since 5277 was 5274, checked in by abarral, 9 hours ago

Replace yomcst.h by existing module

File size: 4.1 KB
Line 
1! Subroutine that computes the convective mixing and transport
2SUBROUTINE trconvect(pplay,t_seri,pdtphys,pmfu,pmfd,pen_u,pde_u, &
3        pen_d,pde_d,paprs,zdz,xconv,qmin,qmax,lminmax,masse, &
4        dtrconv,tr_seri)
5
6  USE dimphy
7  USE infotrac
8  USE indice_sol_mod
9
10  USE dimensions_mod, ONLY: iim, jjm, llm, ndm
11USE paramet_mod_h, ONLY: iip1, iip2, iip3, jjp1, llmp1, llmp2, llmm1, kftd, ip1jm, ip1jmp1, &
12          ip1jmi1, ijp1llm, ijmllm, mvar, jcfil, jcfllm
13USE yomcst_mod_h, ONLY: RPI, RCLUM, RHPLA, RKBOL, RNAVO                   &
14          , RDAY, REA, REPSM, RSIYEA, RSIDAY, ROMEGA                  &
15          , R_ecc, R_peri, R_incl                                      &
16          , RA, RG, R1SA                                         &
17          , RSIGMA                                                     &
18          , R, RMD, RMV, RD, RV, RCPD                    &
19          , RMO3, RMCO2, RMC, RMCH4, RMN2O, RMCFC11, RMCFC12        &
20          , RCPV, RCVD, RCVV, RKAPPA, RETV, eps_w                    &
21          , RCW, RCS                                                 &
22          , RLVTT, RLSTT, RLMLT, RTT, RATM                           &
23          , RESTT, RALPW, RBETW, RGAMW, RALPS, RBETS, RGAMS            &
24          , RALPD, RBETD, RGAMD
25IMPLICIT NONE
26
27
28  INCLUDE "chem.h"
29
30
31
32  !============================= INPUT ===================================
33  REAL :: qmin, qmax
34  REAL :: xconv(nbtr), masse(nbtr)
35  REAL :: pplay(klon,klev)    ! pression pour le mileu de chaque couche (en Pa)
36  REAL :: t_seri(klon,klev)   ! temperature
37  REAL :: zdz(klon,klev)      ! zdz
38  REAL :: paprs(klon,klev+1)  ! pression pour chaque inter-couche (en Pa)
39  REAL :: pmfu(klon,klev)     ! flux de masse dans le panache montant
40  REAL :: pmfd(klon,klev)     ! flux de masse dans le panache descendant
41  REAL :: pen_u(klon,klev)    ! flux entraine dans le panache montant
42  REAL :: pde_u(klon,klev)    ! flux detraine dans le panache montant
43  REAL :: pen_d(klon,klev)    ! flux entraine dans le panache descendant
44  REAL :: pde_d(klon,klev)    ! flux detraine dans le panache descendant
45  LOGICAL :: lminmax
46  REAL :: pdtphys
47  !============================= OUTPUT ==================================
48  REAL :: aux_var1(klon,klev)
49  REAL :: aux_var2(klon,klev)
50  REAL :: tr_seri(klon,klev,nbtr) ! traceur
51  REAL :: dtrconv(klon,nbtr) ! traceur
52  !========================= LOCAL VARIABLES =============================
53  INTEGER :: it, k, i, j
54  REAL :: d_tr(klon,klev,nbtr)
55
56  EXTERNAL nflxtr, tiedqneg, minmaxqfi
57
58  DO it=1, nbtr
59  !
60  DO i=1, klon
61    dtrconv(i,it)=0.0
62  ENDDO
63  DO i=1,klon
64  DO j=1,klev
65    aux_var1(i,j)=tr_seri(i,j,it)
66    aux_var2(i,j)=d_tr(i,j,it)
67  ENDDO
68  ENDDO
69
70  !
71  !nhl      CALL nflxtr(pdtphys, pmfu, pmfd, pen_u, pde_u, pen_d, pde_d,
72  !nhl     .            pplay, paprs, tr_seri(1,1,it), d_tr(1,1,it) )
73  CALL nflxtr(pdtphys, pmfu, pmfd, pen_u, pde_u, pen_d, pde_d, &
74        pplay, paprs, aux_var1, aux_var2 )
75  !
76  CALL tiedqneg(paprs,aux_var1, aux_var2)
77  !nhl      CALL tiedqneg(paprs,tr_seri(1,1,it), d_tr(1,1,it))
78  DO i=1,klon
79  DO j=1,klev
80    tr_seri(i,j,it)=aux_var1(i,j)
81    d_tr(i,j,it)=aux_var2(i,j)
82  ENDDO
83  ENDDO
84  !
85  DO k = 1, klev
86  DO i = 1, klon
87    IF (d_tr(i,k,it).LT.0.) THEN
88      tr_seri(i,k,it)=tr_seri(i,k,it)+d_tr(i,k,it)
89    ELSE
90      tr_seri(i,k,it)=tr_seri(i,k,it)+d_tr(i,k,it)*xconv(it)
91    ENDIF
92  ENDDO
93  ENDDO
94  !
95  !nhl      CALL kg_to_cm3(pplay,t_seri,d_tr(1,1,it))
96  CALL kg_to_cm3(pplay,t_seri,aux_var2)
97  DO i=1,klon
98  DO j=1,klev
99    d_tr(i,j,it)=aux_var2(i,j)
100  ENDDO
101  ENDDO
102
103  DO k = 1, klev
104  DO i = 1, klon
105    IF (d_tr(i,k,it).GE.0.) THEN
106    dtrconv(i,it)=dtrconv(i,it)+(1.-xconv(it))*d_tr(i,k,it) &
107          /RNAVO*masse(it)*1.e3*1.e6*zdz(i,k)/pdtphys
108    ENDIF
109  ENDDO
110  ENDDO
111
112  IF (lminmax) THEN
113    DO i=1,klon
114    DO j=1,klev
115      aux_var1(i,j)=tr_seri(i,j,it)
116    ENDDO
117    ENDDO
118    CALL minmaxqfi(aux_var1,qmin,qmax,'apr convection')
119  !nhl      CALL minmaxqfi(tr_seri(1,1,it),qmin,qmax,'apr convection')
120    DO i=1,klon
121    DO j=1,klev
122      tr_seri(i,j,it)=aux_var1(i,j)
123    ENDDO
124    ENDDO
125  ENDIF
126  !
127  ENDDO
128
129END SUBROUTINE trconvect
Note: See TracBrowser for help on using the repository browser.