/[lmdze]/trunk/libf/phylmd/Conflx/flxini.f90
ViewVC logotype

Contents of /trunk/libf/phylmd/Conflx/flxini.f90

Parent Directory Parent Directory | Revision Log Revision Log


Revision 70 - (show annotations)
Mon Jun 24 15:39:52 2013 UTC (10 years, 11 months ago) by guez
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 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