/[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 71 - (show annotations)
Mon Jul 8 18:12:18 2013 UTC (10 years, 9 months ago) by guez
File size: 4576 byte(s)
No reason to call inidissip in ce0l.

In inidissip, set random seed to 1 beacuse PGI compiler does not
accept all zeros.

dq was computed needlessly in caladvtrac. Arguments masse and dq of
calfis not used.

Replaced real*8 by double precision.

Pass arrays with inverted order of vertical levels to conflx instead
of creating local variables for this inside conflx.

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 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(1, 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