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

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

Parent Directory Parent Directory | Revision Log Revision Log


Revision 78 - (show annotations)
Wed Feb 5 17:51:07 2014 UTC (10 years, 3 months ago) by guez
File size: 4590 byte(s)
Moved procedure inigeom into module comgeom.

In disvert, renamed s_sampling to vert_sampling, following
LMDZ. Removed choice strato1. In case read, read ap and bp instead of
s (following LMDZ).

Added argument phis to start_init_orog and start_init_dyn, and removed
variable phis of module start_init_orog_m. In etat0 and
start_init_orog, renamed relief to zmea_2d. In start_init_dyn, renamed
psol to ps.

In start_init_orog, renamed relief_hi to relief. No need to set
phis(iim + 1, :) = phis(1, :), already done in grid_noro.

Documentation for massbar out of SVN, in massbar.txt. Documentation
was duplicated in massdair, but not relevant in massdair.

In conflx, no need to initialize pen_[ud] and pde_[ud]. In flxasc,
used intermediary variable fact (following LMDZ).

In grid_noro, added local variable zmea0 for zmea not smoothed and
computed zphi from zmea instead of zmea0 (following LMDZ). This
changes the results of ce0l.

Removed arguments pen_u and pde_d of phytrac and nflxtr, which were
not used.

1 module flxini_m
2
3 IMPLICIT none
4
5 contains
6
7 SUBROUTINE flxini(ten, pqen, pqsen, pgeo, paph, pgeoh, ptenh, pqenh, &
8 pqsenh, ptu, pqu, ptd, pqd, mfd, pmfds, pmfdq, pdmfdp, mfu, mfus, &
9 mfuq, 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
12 ! half levels (i. e. grid for massflux scheme), and initializes
13 ! values 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):: ten(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, intent(in):: paph(klon, klev+1) ! pression aux demi-niveaux
24 REAL pgeoh(klon, klev) ! geopotentiel 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 REAL ptu(klon, klev) ! temperature du panache ascendant
29 REAL pqu(klon, klev) ! humidite du panache ascendant
30 REAL ptd(klon, klev) ! temperature du panache descendant
31 REAL pqd(klon, klev) ! humidite du panache descendant
32 REAL, intent(out):: mfd(klon, klev) ! flux de masse du panache descendant
33 REAL pmfds(klon, klev) ! flux de l'energie seche dans le panache descendant
34 REAL pmfdq(klon, klev) ! flux de l'humidite dans le panache descendant
35 REAL pdmfdp(klon, klev) ! quantite de precipitation dans panache descendant
36 REAL, intent(out):: mfu(klon, klev) ! flux de masse du panache ascendant
37 REAL mfus(klon, klev) ! flux de l'energie seche dans le panache ascendant
38 REAL mfuq(klon, klev) ! flux de l'humidite dans le panache ascendant
39
40 REAL pdmfup(klon, klev)
41 ! quantite de l'eau precipitee dans panache ascendant
42
43 REAL pdpmel(klon, klev) ! quantite de neige fondue
44 REAL plu(klon, klev) ! eau liquide du panache ascendant
45
46 REAL plude(klon, klev)
47 ! quantite de l'eau liquide jetee du panache ascendant a l'environnement
48
49 INTEGER klab(klon, klev)
50 REAL pen_u(klon, klev) ! quantite de masse entrainee pour panache ascendant
51 REAL pde_u(klon, klev) ! quantite de masse detrainee pour panache ascendant
52 REAL pen_d(klon, klev) ! quantite de masse entrainee pour panache descendant
53 REAL pde_d(klon, klev) ! quantite de masse detrainee pour panache descendant
54
55 ! Local:
56 LOGICAL llflag(klon)
57 INTEGER k, i, icall
58 REAL zzs
59
60 !----------------------------------------------------------------------
61
62 ! Specify large scale parameters at half levels. Adjust
63 ! temperature fields if statically unstable.
64
65 DO k = 2, klev
66 DO i = 1, klon
67 pgeoh(i, k)=pgeo(i, k)+(pgeo(i, k-1)-pgeo(i, k))*0.5
68 ptenh(i, k)=(MAX(RCPD*ten(i, k-1)+pgeo(i, k-1), &
69 RCPD*ten(i, k)+pgeo(i, k))-pgeoh(i, k))/RCPD
70 pqsenh(i, k)=pqsen(i, k-1)
71 llflag(i)=.TRUE.
72 ENDDO
73
74 icall=0
75 CALL flxadjtq(paph(:, k), ptenh(1, k), pqsenh(1, k), llflag, icall)
76
77 DO i = 1, klon
78 pqenh(i, k)=MIN(pqen(i, k-1), pqsen(i, k-1)) &
79 +(pqsenh(i, k)-pqsen(i, k-1))
80 pqenh(i, k)=MAX(pqenh(i, k), 0.)
81 ENDDO
82 end DO
83
84 DO i = 1, klon
85 ptenh(i, klev)=(RCPD*ten(i, klev)+pgeo(i, klev)- pgeoh(i, klev))/RCPD
86 pqenh(i, klev)=pqen(i, klev)
87 ptenh(i, 1)=ten(i, 1)
88 pqenh(i, 1)=pqen(i, 1)
89 pgeoh(i, 1)=pgeo(i, 1)
90 end DO
91
92 DO k = klev-1, 2, -1
93 DO i = 1, klon
94 zzs = MAX(RCPD*ptenh(i, k)+pgeoh(i, k), &
95 RCPD*ptenh(i, k+1)+pgeoh(i, k+1))
96 ptenh(i, k) = (zzs-pgeoh(i, k))/RCPD
97 end DO
98 end DO
99
100 ! Initialize values for updrafts and downdrafts
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 mfu(i, k) = 0.
107 mfus(i, k) = 0.
108 mfuq(i, k) = 0.
109 pdmfup(i, k) = 0.
110 pdpmel(i, k) = 0.
111 plude(i, k) = 0.
112 klab(i, k) = 0
113 ptd(i, k) = ptenh(i, k)
114 pqd(i, k) = pqenh(i, k)
115 mfd(i, k) = 0.0
116 pmfds(i, k) = 0.0
117 pmfdq(i, k) = 0.0
118 pdmfdp(i, k) = 0.0
119 pen_u(i, k) = 0.0
120 pde_u(i, k) = 0.0
121 pen_d(i, k) = 0.0
122 pde_d(i, k) = 0.0
123 ENDDO
124 ENDDO
125
126 END SUBROUTINE flxini
127
128 end module flxini_m

  ViewVC Help
Powered by ViewVC 1.1.21