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

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

Parent Directory Parent Directory | Revision Log Revision Log


Revision 71 - (hide annotations)
Mon Jul 8 18:12:18 2013 UTC (10 years, 10 months ago) by guez
Original Path: trunk/libf/phylmd/Conflx/flxini.f90
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 guez 70 module flxini_m
2    
3     IMPLICIT none
4    
5     contains
6    
7 guez 71 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 guez 70
11 guez 71 ! 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 guez 70
15     USE dimphy, ONLY: klev, klon
16     use flxadjtq_m, only: flxadjtq
17     USE suphec_m, ONLY: rcpd
18    
19 guez 71 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 guez 70 INTEGER k, i, icall
58     REAL zzs
59 guez 71
60 guez 70 !----------------------------------------------------------------------
61 guez 71
62     ! Specify large scale parameters at half levels. Adjust
63     ! temperature fields if statically unstable.
64    
65     DO k = 2, klev
66 guez 70 DO i = 1, klon
67 guez 71 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 guez 70 llflag(i)=.TRUE.
72     ENDDO
73 guez 71
74 guez 70 icall=0
75 guez 71 CALL flxadjtq(paph(1, k), ptenh(1, k), pqsenh(1, k), llflag, icall)
76    
77 guez 70 DO i = 1, klon
78 guez 71 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 guez 70 ENDDO
82     end DO
83 guez 71
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 guez 70 end DO
91 guez 71
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 guez 70 end DO
98     end DO
99 guez 71
100     ! Initialize values for updrafts and downdrafts
101 guez 70 DO k = 1, klev
102     DO i = 1, klon
103 guez 71 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 guez 70 ENDDO
124     ENDDO
125    
126     END SUBROUTINE flxini
127    
128     end module flxini_m

  ViewVC Help
Powered by ViewVC 1.1.21