LMDZ
swde.F90
Go to the documentation of this file.
1 !OPTIONS XOPT(HSFUN)
2 SUBROUTINE swde &
3  &( kidia, kfdia, klon &
4  &, pgg , pref , prmuz, pto1, pw &
5  &, pre1 , pre2 , ptr1 , ptr2 &
6  &)
7 
8 !**** *SWDE* - DELTA-EDDINGTON IN A CLOUDY LAYER
9 
10 ! PURPOSE.
11 ! --------
12 ! COMPUTES THE REFLECTIVITY AND TRANSMISSIVITY OF A CLOUDY
13 ! LAYER USING THE DELTA-EDDINGTON'S APPROXIMATION.
14 
15 !** INTERFACE.
16 ! ----------
17 ! *SWDE* IS CALLED BY *SWR*, *SWNI*
18 
19 
20 ! EXPLICIT ARGUMENTS :
21 ! --------------------
22 ! PGG : (KLON) ; ASSYMETRY FACTOR
23 ! PREF : (KLON) ; REFLECTIVITY OF THE UNDERLYING LAYER
24 ! PRMUZ : (KLON) ; COSINE OF SOLAR ZENITH ANGLE
25 ! PTO1 : (KLON) ; OPTICAL THICKNESS
26 ! PW : (KLON) ; SINGLE SCATTERING ALBEDO
27 ! ==== OUTPUTS ===
28 ! PRE1 : (KLON) ; LAYER REFLECTIVITY ASSUMING NO
29 ! ; REFLECTION FROM UNDERLYING LAYER
30 ! PTR1 : (KLON) ; LAYER TRANSMISSIVITY ASSUMING NO
31 ! ; REFLECTION FROM UNDERLYING LAYER
32 ! PRE2 : (KLON) ; LAYER REFLECTIVITY ASSUMING
33 ! ; REFLECTION FROM UNDERLYING LAYER
34 ! PTR2 : (KLON) ; LAYER TRANSMISSIVITY ASSUMING
35 ! ; REFLECTION FROM UNDERLYING LAYER
36 
37 ! IMPLICIT ARGUMENTS : NONE
38 ! --------------------
39 
40 ! METHOD.
41 ! -------
42 
43 ! STANDARD DELTA-EDDINGTON LAYER CALCULATIONS.
44 
45 ! EXTERNALS.
46 ! ----------
47 
48 ! NONE
49 
50 ! REFERENCE.
51 ! ----------
52 
53 ! SEE RADIATION'S PART OF THE MODEL'S DOCUMENTATION AND
54 ! ECMWF RESEARCH DEPARTMENT DOCUMENTATION OF THE IFS
55 
56 ! AUTHOR.
57 ! -------
58 ! JEAN-JACQUES MORCRETTE *ECMWF*
59 
60 ! MODIFICATIONS.
61 ! --------------
62 ! ORIGINAL : 88-12-15
63 ! 96-05-30 Michel Deque (security in EXP())
64 ! 08-03-28 Hubert Gallee(lower/upper limit on PTR1,2)
65 
66 ! ------------------------------------------------------------------
67 
68 
69 ! ------------------------------------------------------------------
70 
71 !* 0.1 ARGUMENTS
72 ! ---------
73 
74 
75 #include "tsmbkind.h"
76 
77 IMPLICIT NONE
78 
79 
80 ! DUMMY INTEGER SCALARS
81 integer_m :: kfdia
82 integer_m :: kidia
83 integer_m :: klon
84 
85 real_b :: pgg(klon),pref(klon),prmuz(klon),pto1(klon),pw(klon)
86 real_b :: pre1(klon),pre2(klon),ptr1(klon),ptr2(klon)
87 
88 ! LOCAL INTEGER SCALARS
89 integer_m :: jl
90 
91 ! LOCAL REAL SCALARS
92 real_b :: za11, za12, za13, za21, za22, za23, zalpha,&
93  &zam2b, zap2b, zarg, zarg2, zb21, zb22, zb23, &
94  &zbeta, zc1a, zc1b, zc2a, zc2b, zdena, zdenb, &
95  &zdt, zexkm, zexkp, zexmu0, zff, zgp, zri0a, &
96  &zri0b, zri0c, zri0d, zri1a, zri1b, zri1c, &
97  &zri1d, zrk, zrm2, zrp, ztop, zwcp, zwm, zx1, &
98  &zx2, zxm2p, zxp2p
99 
100 
101 
102 ! ------------------------------------------------------------------
103 
104 !* 1. DELTA-EDDINGTON CALCULATIONS
105 
106 
107 DO jl = kidia,kfdia
108 
109 !* 1.1 SET UP THE DELTA-MODIFIED PARAMETERS
110 
111 
112  zff = pgg(jl)*pgg(jl)
113  zgp = pgg(jl)/(_one_+pgg(jl))
114  ztop = (_one_- pw(jl) * zff) * pto1(jl)
115  zwcp = (1-zff)* pw(jl) /(_one_- pw(jl) * zff)
116  zdt = _two_/3._jprb
117  zx1 = _one_-zwcp*zgp
118  zwm = _one_-zwcp
119  zrm2 = prmuz(jl) * prmuz(jl)
120  zrk = sqrt(3._jprb*zwm*zx1)
121  zx2 = 4._jprb*(_one_-zrk*zrk*zrm2)
122  zrp=zrk/zx1
123  zalpha = 3._jprb*zwcp*zrm2*(_one_+zgp*zwm)/zx2
124  zbeta = 3._jprb*zwcp* prmuz(jl) *(_one_+3._jprb*zgp*zrm2*zwm)/zx2
125 ! ZARG=MIN(ZTOP/PRMUZ(JL),200.)
126  zarg=max(-085._jprb,min(ztop/prmuz(jl),085._jprb))
127  zexmu0=exp(-zarg)
128  zarg2=min(zrk*ztop,085._jprb)
129  zexkp=exp(zarg2)
130  zexkm = _one_/zexkp
131  zxp2p = _one_+zdt*zrp
132  zxm2p = _one_-zdt*zrp
133  zap2b = zalpha+zdt*zbeta
134  zam2b = zalpha-zdt*zbeta
135 
136 !* 1.2 WITHOUT REFLECTION FROM THE UNDERLYING LAYER
137 
138 
139  za11 = zxp2p
140  za12 = zxm2p
141  za13 = zap2b
142  za22 = zxp2p*zexkp
143  za21 = zxm2p*zexkm
144  za23 = zam2b*zexmu0
145  zdena = za11 * za22 - za21 * za12
146  zc1a = (za22*za13-za12*za23)/zdena
147  zc2a = (za11*za23-za21*za13)/zdena
148  zri0a = zc1a+zc2a-zalpha
149  zri1a = zrp*(zc1a-zc2a)-zbeta
150  pre1(jl) = (zri0a-zdt*zri1a)/ prmuz(jl)
151  zri0b = zc1a*zexkm+zc2a*zexkp-zalpha*zexmu0
152  zri1b = zrp*(zc1a*zexkm-zc2a*zexkp)-zbeta*zexmu0
153  ptr1(jl) = zexmu0+(zri0b+zdt*zri1b)/ prmuz(jl)
154 
155  pre1(jl) = max(_zero_,min(pre1(jl),_one_)) ! lower/upper limit (Hubert Gallee, LGGE, 28-03-2008)
156  ptr1(jl) = max(_zero_,min(ptr1(jl),_one_)) ! lower/upper limit (Hubert Gallee, LGGE, 28-03-2008)
157 
158 !* 1.3 WITH REFLECTION FROM THE UNDERLYING LAYER
159 
160 
161  zb21 = za21- pref(jl) *zxp2p*zexkm
162  zb22 = za22- pref(jl) *zxm2p*zexkp
163  zb23 = za23- pref(jl) *zexmu0*(zap2b - prmuz(jl) )
164  zdenb = za11 * zb22 - zb21 * za12
165  zc1b = (zb22*za13-za12*zb23)/zdenb
166  zc2b = (za11*zb23-zb21*za13)/zdenb
167  zri0c = zc1b+zc2b-zalpha
168  zri1c = zrp*(zc1b-zc2b)-zbeta
169  pre2(jl) = (zri0c-zdt*zri1c) / prmuz(jl)
170  zri0d = zc1b*zexkm + zc2b*zexkp - zalpha*zexmu0
171  zri1d = zrp * (zc1b*zexkm - zc2b*zexkp) - zbeta*zexmu0
172  ptr2(jl) = zexmu0 + (zri0d + zdt*zri1d) / prmuz(jl)
173 
174  pre2(jl) = max(_zero_,min(pre2(jl),_one_)) ! lower/upper limit (Hubert Gallee, LGGE, 28-03-2008)
175  ptr2(jl) = max(_zero_,min(ptr2(jl),_one_)) ! lower/upper limit (Hubert Gallee, LGGE, 28-03-2008)
176 
177 ENDDO
178 RETURN
179 END SUBROUTINE swde
integer, save kidia
Definition: dimphy.F90:6
integer, save klon
Definition: dimphy.F90:3
integer, save kfdia
Definition: dimphy.F90:5
subroutine swde(KIDIA, KFDIA, KLON, PGG, PREF, PRMUZ, PTO1, PW, PRE1, PRE2, PTR1, PTR2)
Definition: swde.F90:7