/[lmdze]/trunk/phylmd/Conflx/flxini.f
ViewVC logotype

Annotation of /trunk/phylmd/Conflx/flxini.f

Parent Directory Parent Directory | Revision Log Revision Log


Revision 70 - (hide annotations)
Mon Jun 24 15:39:52 2013 UTC (11 years ago) by guez
Original Path: trunk/libf/phylmd/Conflx/flxini.f90
File size: 4637 byte(s)
In procedure, "addfi" access directly the module variable "dtphys"
instead of going through an argument.

In "conflx", do not create a local variable for temperature with
reversed order of vertical levels. Instead, give an actual argument
with reversed order in "physiq".

Changed names of variables "rmd" and "rmv" from module "suphec_m" to
"md" and "mv".

In "hgardfou", print only the first temperature out of range found.

1 guez 70 module flxini_m
2    
3     IMPLICIT none
4    
5     contains
6    
7     SUBROUTINE flxini(pten, pqen, pqsen, pgeo, paph, pgeoh, ptenh, pqenh, &
8     pqsenh, ptu, pqu, ptd, pqd, pmfd, pmfds, pmfdq, pdmfdp, pmfu, pmfus, &
9     pmfuq, pdmfup, pdpmel, plu, plude, klab,pen_u, pde_u, pen_d, pde_d)
10    
11     ! This routine interpolates large-scale fields of T,q etc. to half
12     ! levels (i.e. grid for massflux scheme), and initializes values
13     ! for updrafts.
14    
15     USE dimphy, ONLY: klev, klon
16     use flxadjtq_m, only: flxadjtq
17     USE suphec_m, ONLY: rcpd
18    
19     REAL, intent(in):: pten(klon,klev) ! temperature (environnement)
20     REAL, intent(in):: pqen(klon,klev) ! humidite (environnement)
21     REAL, intent(in):: pqsen(klon,klev) ! humidite saturante (environnement)
22     REAL, intent(in):: pgeo(klon,klev) ! geopotentiel (g * metre)
23     REAL pgeoh(klon,klev) ! geopotentiel aux demi-niveaux
24     REAL paph(klon,klev+1) ! pression aux demi-niveaux
25     REAL ptenh(klon,klev) ! temperature aux demi-niveaux
26     REAL pqenh(klon,klev) ! humidite aux demi-niveaux
27     REAL pqsenh(klon,klev) ! humidite saturante aux demi-niveaux
28     !
29     REAL ptu(klon,klev) ! temperature du panache ascendant (p-a)
30     REAL pqu(klon,klev) ! humidite du p-a
31     REAL plu(klon,klev) ! eau liquide du p-a
32     REAL pmfu(klon,klev) ! flux de masse du p-a
33     REAL pmfus(klon,klev) ! flux de l'energie seche dans le p-a
34     REAL pmfuq(klon,klev) ! flux de l'humidite dans le p-a
35     REAL pdmfup(klon,klev) ! quantite de l'eau precipitee dans p-a
36     REAL plude(klon,klev) ! quantite de l'eau liquide jetee du
37     ! p-a a l'environnement
38     REAL pdpmel(klon,klev) ! quantite de neige fondue
39     !
40     REAL ptd(klon,klev) ! temperature du panache descendant (p-d)
41     REAL pqd(klon,klev) ! humidite du p-d
42     REAL pmfd(klon,klev) ! flux de masse du p-d
43     REAL pmfds(klon,klev) ! flux de l'energie seche dans le p-d
44     REAL pmfdq(klon,klev) ! flux de l'humidite dans le p-d
45     REAL pdmfdp(klon,klev) ! quantite de precipitation dans p-d
46     !
47     REAL pen_u(klon,klev) ! quantite de masse entrainee pour p-a
48     REAL pde_u(klon,klev) ! quantite de masse detrainee pour p-a
49     REAL pen_d(klon,klev) ! quantite de masse entrainee pour p-d
50     REAL pde_d(klon,klev) ! quantite de masse detrainee pour p-d
51     !
52     INTEGER klab(klon,klev)
53     LOGICAL llflag(klon)
54     INTEGER k, i, icall
55     REAL zzs
56     !----------------------------------------------------------------------
57     ! SPECIFY LARGE SCALE PARAMETERS AT HALF LEVELS
58     ! ADJUST TEMPERATURE FIELDS IF STATICLY UNSTABLE
59     !----------------------------------------------------------------------
60     DO k = 2, klev
61     !
62     DO i = 1, klon
63     pgeoh(i,k)=pgeo(i,k)+(pgeo(i,k-1)-pgeo(i,k))*0.5
64     ptenh(i,k)=(MAX(RCPD*pten(i,k-1)+pgeo(i,k-1), &
65     RCPD*pten(i,k)+pgeo(i,k))-pgeoh(i,k))/RCPD
66     pqsenh(i,k)=pqsen(i,k-1)
67     llflag(i)=.TRUE.
68     ENDDO
69     !
70     icall=0
71     CALL flxadjtq(paph(1,k),ptenh(1,k),pqsenh(1,k),llflag,icall)
72     !
73     DO i = 1, klon
74     pqenh(i,k)=MIN(pqen(i,k-1),pqsen(i,k-1)) &
75     +(pqsenh(i,k)-pqsen(i,k-1))
76     pqenh(i,k)=MAX(pqenh(i,k),0.)
77     ENDDO
78     !
79     end DO
80     !
81     DO i = 1, klon
82     ptenh(i,klev)=(RCPD*pten(i,klev)+pgeo(i,klev)- &
83     pgeoh(i,klev))/RCPD
84     pqenh(i,klev)=pqen(i,klev)
85     ptenh(i,1)=pten(i,1)
86     pqenh(i,1)=pqen(i,1)
87     pgeoh(i,1)=pgeo(i,1)
88     end DO
89     !
90     DO k = klev-1, 2, -1
91     DO i = 1, klon
92     zzs = MAX(RCPD*ptenh(i,k)+pgeoh(i,k), &
93     RCPD*ptenh(i,k+1)+pgeoh(i,k+1))
94     ptenh(i,k) = (zzs-pgeoh(i,k))/RCPD
95     end DO
96     end DO
97     !
98     !-----------------------------------------------------------------------
99     ! INITIALIZE VALUES FOR UPDRAFTS AND DOWNDRAFTS
100     !-----------------------------------------------------------------------
101     DO k = 1, klev
102     DO i = 1, klon
103     ptu(i,k) = ptenh(i,k)
104     pqu(i,k) = pqenh(i,k)
105     plu(i,k) = 0.
106     pmfu(i,k) = 0.
107     pmfus(i,k) = 0.
108     pmfuq(i,k) = 0.
109     pdmfup(i,k) = 0.
110     pdpmel(i,k) = 0.
111     plude(i,k) = 0.
112     !
113     klab(i,k) = 0
114     !
115     ptd(i,k) = ptenh(i,k)
116     pqd(i,k) = pqenh(i,k)
117     pmfd(i,k) = 0.0
118     pmfds(i,k) = 0.0
119     pmfdq(i,k) = 0.0
120     pdmfdp(i,k) = 0.0
121     !
122     pen_u(i,k) = 0.0
123     pde_u(i,k) = 0.0
124     pen_d(i,k) = 0.0
125     pde_d(i,k) = 0.0
126     ENDDO
127     ENDDO
128    
129     END SUBROUTINE flxini
130    
131     end module flxini_m

  ViewVC Help
Powered by ViewVC 1.1.21