/[lmdze]/trunk/phylmd/Radlwsw/sw1s.f
ViewVC logotype

Contents of /trunk/phylmd/Radlwsw/sw1s.f

Parent Directory Parent Directory | Revision Log Revision Log


Revision 82 - (show annotations)
Wed Mar 5 14:57:53 2014 UTC (10 years, 2 months ago) by guez
File size: 6068 byte(s)
Changed all ".f90" suffixes to ".f".
1 SUBROUTINE sw1s(knu, paer, flag_aer, tauae, pizae, cgae, palbd, palbp, pcg, &
2 pcld, pclear, pcldsw, pdsig, pomega, poz, prmu, psec, ptau, pud, pfd, &
3 pfu)
4 USE dimens_m
5 USE dimphy
6 USE raddim
7 IMPLICIT NONE
8
9 ! ------------------------------------------------------------------
10 ! PURPOSE.
11 ! --------
12
13 ! THIS ROUTINE COMPUTES THE SHORTWAVE RADIATION FLUXES IN TWO
14 ! SPECTRAL INTERVALS FOLLOWING FOUQUART AND BONNEL (1980).
15
16 ! METHOD.
17 ! -------
18
19 ! 1. COMPUTES UPWARD AND DOWNWARD FLUXES CORRESPONDING TO
20 ! CONTINUUM SCATTERING
21 ! 2. MULTIPLY BY OZONE TRANSMISSION FUNCTION
22
23 ! REFERENCE.
24 ! ----------
25
26 ! SEE RADIATION'S PART OF THE ECMWF RESEARCH DEPARTMENT
27 ! DOCUMENTATION, AND FOUQUART AND BONNEL (1980)
28
29 ! AUTHOR.
30 ! -------
31 ! JEAN-JACQUES MORCRETTE *ECMWF*
32
33 ! MODIFICATIONS.
34 ! --------------
35 ! ORIGINAL : 89-07-14
36 ! 94-11-15 J.-J. MORCRETTE DIRECT/DIFFUSE ALBEDO
37 ! ------------------------------------------------------------------
38
39 ! * ARGUMENTS:
40
41 INTEGER knu
42 ! -OB
43 DOUBLE PRECISION flag_aer
44 DOUBLE PRECISION tauae(kdlon, kflev, 2)
45 DOUBLE PRECISION pizae(kdlon, kflev, 2)
46 DOUBLE PRECISION cgae(kdlon, kflev, 2)
47 DOUBLE PRECISION paer(kdlon, kflev, 5)
48 DOUBLE PRECISION palbd(kdlon, 2)
49 DOUBLE PRECISION palbp(kdlon, 2)
50 DOUBLE PRECISION pcg(kdlon, 2, kflev)
51 DOUBLE PRECISION pcld(kdlon, kflev)
52 DOUBLE PRECISION pcldsw(kdlon, kflev)
53 DOUBLE PRECISION pclear(kdlon)
54 DOUBLE PRECISION pdsig(kdlon, kflev)
55 DOUBLE PRECISION pomega(kdlon, 2, kflev)
56 DOUBLE PRECISION poz(kdlon, kflev)
57 DOUBLE PRECISION prmu(kdlon)
58 DOUBLE PRECISION psec(kdlon)
59 DOUBLE PRECISION ptau(kdlon, 2, kflev)
60 DOUBLE PRECISION pud(kdlon, 5, kflev+1)
61
62 DOUBLE PRECISION pfd(kdlon, kflev+1)
63 DOUBLE PRECISION pfu(kdlon, kflev+1)
64
65 ! * LOCAL VARIABLES:
66
67 INTEGER iind(4)
68
69 DOUBLE PRECISION zcgaz(kdlon, kflev)
70 DOUBLE PRECISION zdiff(kdlon)
71 DOUBLE PRECISION zdirf(kdlon)
72 DOUBLE PRECISION zpizaz(kdlon, kflev)
73 DOUBLE PRECISION zrayl(kdlon)
74 DOUBLE PRECISION zray1(kdlon, kflev+1)
75 DOUBLE PRECISION zray2(kdlon, kflev+1)
76 DOUBLE PRECISION zrefz(kdlon, 2, kflev+1)
77 DOUBLE PRECISION zrj(kdlon, 6, kflev+1)
78 DOUBLE PRECISION zrj0(kdlon, 6, kflev+1)
79 DOUBLE PRECISION zrk(kdlon, 6, kflev+1)
80 DOUBLE PRECISION zrk0(kdlon, 6, kflev+1)
81 DOUBLE PRECISION zrmue(kdlon, kflev+1)
82 DOUBLE PRECISION zrmu0(kdlon, kflev+1)
83 DOUBLE PRECISION zr(kdlon, 4)
84 DOUBLE PRECISION ztauaz(kdlon, kflev)
85 DOUBLE PRECISION ztra1(kdlon, kflev+1)
86 DOUBLE PRECISION ztra2(kdlon, kflev+1)
87 DOUBLE PRECISION zw(kdlon, 4)
88
89 INTEGER jl, jk, k, jaj, ikm1, ikl
90
91 ! Prescribed Data:
92
93 DOUBLE PRECISION rsun(2)
94 SAVE rsun
95 DOUBLE PRECISION rray(2, 6)
96 SAVE rray
97 DATA rsun(1)/0.441676/
98 DATA rsun(2)/0.558324/
99 DATA (rray(1,k), k=1, 6)/.428937E-01, .890743E+00, -.288555E+01, &
100 .522744E+01, -.469173E+01, .161645E+01/
101 DATA (rray(2,k), k=1, 6)/.697200E-02, .173297E-01, -.850903E-01, &
102 .248261E+00, -.302031E+00, .129662E+00/
103 ! ------------------------------------------------------------------
104
105 ! * 1. FIRST SPECTRAL INTERVAL (0.25-0.68 MICRON)
106 ! ----------------------- ------------------
107
108
109
110 ! * 1.1 OPTICAL THICKNESS FOR RAYLEIGH SCATTERING
111 ! -----------------------------------------
112
113
114 DO jl = 1, kdlon
115 zrayl(jl) = rray(knu, 1) + prmu(jl)*(rray(knu,2)+prmu(jl)*(rray(knu, &
116 3)+prmu(jl)*(rray(knu,4)+prmu(jl)*(rray(knu,5)+prmu(jl)*rray(knu,6)))))
117 END DO
118
119
120 ! ------------------------------------------------------------------
121
122 ! * 2. CONTINUUM SCATTERING CALCULATIONS
123 ! ---------------------------------
124
125
126 ! * 2.1 CLEAR-SKY FRACTION OF THE COLUMN
127 ! --------------------------------
128
129
130 CALL swclr(knu, paer, flag_aer, tauae, pizae, cgae, palbp, pdsig, zrayl, &
131 psec, zcgaz, zpizaz, zray1, zray2, zrefz, zrj0, zrk0, zrmu0, ztauaz, &
132 ztra1, ztra2)
133
134
135 ! * 2.2 CLOUDY FRACTION OF THE COLUMN
136 ! -----------------------------
137
138
139 CALL swr(knu, palbd, pcg, pcld, pdsig, pomega, zrayl, psec, ptau, zcgaz, &
140 zpizaz, zray1, zray2, zrefz, zrj, zrk, zrmue, ztauaz, ztra1, ztra2)
141
142
143 ! ------------------------------------------------------------------
144
145 ! * 3. OZONE ABSORPTION
146 ! ----------------
147
148
149 iind(1) = 1
150 iind(2) = 3
151 iind(3) = 1
152 iind(4) = 3
153
154
155 ! * 3.1 DOWNWARD FLUXES
156 ! ---------------
157
158
159 jaj = 2
160
161 DO jl = 1, kdlon
162 zw(jl, 1) = 0.
163 zw(jl, 2) = 0.
164 zw(jl, 3) = 0.
165 zw(jl, 4) = 0.
166 pfd(jl, kflev+1) = ((1.-pclear(jl))*zrj(jl,jaj,kflev+1)+pclear(jl)*zrj0( &
167 jl,jaj,kflev+1))*rsun(knu)
168 END DO
169 DO jk = 1, kflev
170 ikl = kflev + 1 - jk
171 DO jl = 1, kdlon
172 zw(jl, 1) = zw(jl, 1) + pud(jl, 1, ikl)/zrmue(jl, ikl)
173 zw(jl, 2) = zw(jl, 2) + poz(jl, ikl)/zrmue(jl, ikl)
174 zw(jl, 3) = zw(jl, 3) + pud(jl, 1, ikl)/zrmu0(jl, ikl)
175 zw(jl, 4) = zw(jl, 4) + poz(jl, ikl)/zrmu0(jl, ikl)
176 END DO
177
178 CALL swtt1(knu, 4, iind, zw, zr)
179
180 DO jl = 1, kdlon
181 zdiff(jl) = zr(jl, 1)*zr(jl, 2)*zrj(jl, jaj, ikl)
182 zdirf(jl) = zr(jl, 3)*zr(jl, 4)*zrj0(jl, jaj, ikl)
183 pfd(jl, ikl) = ((1.-pclear(jl))*zdiff(jl)+pclear(jl)*zdirf(jl))* &
184 rsun(knu)
185 END DO
186 END DO
187
188
189 ! * 3.2 UPWARD FLUXES
190 ! -------------
191
192
193 DO jl = 1, kdlon
194 pfu(jl, 1) = ((1.-pclear(jl))*zdiff(jl)*palbd(jl,knu)+pclear(jl)*zdirf(jl &
195 )*palbp(jl,knu))*rsun(knu)
196 END DO
197
198 DO jk = 2, kflev + 1
199 ikm1 = jk - 1
200 DO jl = 1, kdlon
201 zw(jl, 1) = zw(jl, 1) + pud(jl, 1, ikm1)*1.66
202 zw(jl, 2) = zw(jl, 2) + poz(jl, ikm1)*1.66
203 zw(jl, 3) = zw(jl, 3) + pud(jl, 1, ikm1)*1.66
204 zw(jl, 4) = zw(jl, 4) + poz(jl, ikm1)*1.66
205 END DO
206
207 CALL swtt1(knu, 4, iind, zw, zr)
208
209 DO jl = 1, kdlon
210 zdiff(jl) = zr(jl, 1)*zr(jl, 2)*zrk(jl, jaj, jk)
211 zdirf(jl) = zr(jl, 3)*zr(jl, 4)*zrk0(jl, jaj, jk)
212 pfu(jl, jk) = ((1.-pclear(jl))*zdiff(jl)+pclear(jl)*zdirf(jl))* &
213 rsun(knu)
214 END DO
215 END DO
216
217 ! ------------------------------------------------------------------
218
219 RETURN
220 END SUBROUTINE sw1s

  ViewVC Help
Powered by ViewVC 1.1.21