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

Last change on this file since 5408 was 5337, checked in by Laurent Fairhead, 4 weeks ago

Getting rid of dependance to dynamics

File size: 3.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
6USE chem_mod_h
7    USE dimphy
8  USE infotrac_phy, ONLY : nbtr
9  USE indice_sol_mod
10
11!!USE paramet_mod_h
12USE yomcst_mod_h
13IMPLICIT NONE
14
15
16
17
18
19  !============================= INPUT ===================================
20  REAL :: qmin, qmax
21  REAL :: xconv(nbtr), masse(nbtr)
22  REAL :: pplay(klon,klev)    ! pression pour le mileu de chaque couche (en Pa)
23  REAL :: t_seri(klon,klev)   ! temperature
24  REAL :: zdz(klon,klev)      ! zdz
25  REAL :: paprs(klon,klev+1)  ! pression pour chaque inter-couche (en Pa)
26  REAL :: pmfu(klon,klev)     ! flux de masse dans le panache montant
27  REAL :: pmfd(klon,klev)     ! flux de masse dans le panache descendant
28  REAL :: pen_u(klon,klev)    ! flux entraine dans le panache montant
29  REAL :: pde_u(klon,klev)    ! flux detraine dans le panache montant
30  REAL :: pen_d(klon,klev)    ! flux entraine dans le panache descendant
31  REAL :: pde_d(klon,klev)    ! flux detraine dans le panache descendant
32  LOGICAL :: lminmax
33  REAL :: pdtphys
34  !============================= OUTPUT ==================================
35  REAL :: aux_var1(klon,klev)
36  REAL :: aux_var2(klon,klev)
37  REAL :: tr_seri(klon,klev,nbtr) ! traceur
38  REAL :: dtrconv(klon,nbtr) ! traceur
39  !========================= LOCAL VARIABLES =============================
40  INTEGER :: it, k, i, j
41  REAL :: d_tr(klon,klev,nbtr)
42
43  EXTERNAL nflxtr, tiedqneg, minmaxqfi
44
45  DO it=1, nbtr
46  !
47  DO i=1, klon
48    dtrconv(i,it)=0.0
49  ENDDO
50  DO i=1,klon
51  DO j=1,klev
52    aux_var1(i,j)=tr_seri(i,j,it)
53    aux_var2(i,j)=d_tr(i,j,it)
54  ENDDO
55  ENDDO
56
57  !
58  !nhl      CALL nflxtr(pdtphys, pmfu, pmfd, pen_u, pde_u, pen_d, pde_d,
59  !nhl     .            pplay, paprs, tr_seri(1,1,it), d_tr(1,1,it) )
60  CALL nflxtr(pdtphys, pmfu, pmfd, pen_u, pde_u, pen_d, pde_d, &
61        pplay, paprs, aux_var1, aux_var2 )
62  !
63  CALL tiedqneg(paprs,aux_var1, aux_var2)
64  !nhl      CALL tiedqneg(paprs,tr_seri(1,1,it), d_tr(1,1,it))
65  DO i=1,klon
66  DO j=1,klev
67    tr_seri(i,j,it)=aux_var1(i,j)
68    d_tr(i,j,it)=aux_var2(i,j)
69  ENDDO
70  ENDDO
71  !
72  DO k = 1, klev
73  DO i = 1, klon
74    IF (d_tr(i,k,it).LT.0.) THEN
75      tr_seri(i,k,it)=tr_seri(i,k,it)+d_tr(i,k,it)
76    ELSE
77      tr_seri(i,k,it)=tr_seri(i,k,it)+d_tr(i,k,it)*xconv(it)
78    ENDIF
79  ENDDO
80  ENDDO
81  !
82  !nhl      CALL kg_to_cm3(pplay,t_seri,d_tr(1,1,it))
83  CALL kg_to_cm3(pplay,t_seri,aux_var2)
84  DO i=1,klon
85  DO j=1,klev
86    d_tr(i,j,it)=aux_var2(i,j)
87  ENDDO
88  ENDDO
89
90  DO k = 1, klev
91  DO i = 1, klon
92    IF (d_tr(i,k,it).GE.0.) THEN
93    dtrconv(i,it)=dtrconv(i,it)+(1.-xconv(it))*d_tr(i,k,it) &
94          /RNAVO*masse(it)*1.e3*1.e6*zdz(i,k)/pdtphys
95    ENDIF
96  ENDDO
97  ENDDO
98
99  IF (lminmax) THEN
100    DO i=1,klon
101    DO j=1,klev
102      aux_var1(i,j)=tr_seri(i,j,it)
103    ENDDO
104    ENDDO
105    CALL minmaxqfi(aux_var1,qmin,qmax,'apr convection')
106  !nhl      CALL minmaxqfi(tr_seri(1,1,it),qmin,qmax,'apr convection')
107    DO i=1,klon
108    DO j=1,klev
109      tr_seri(i,j,it)=aux_var1(i,j)
110    ENDDO
111    ENDDO
112  ENDIF
113  !
114  ENDDO
115
116END SUBROUTINE trconvect
Note: See TracBrowser for help on using the repository browser.