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

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

Parent Directory Parent Directory | Revision Log Revision Log


Revision 82 - (hide annotations)
Wed Mar 5 14:57:53 2014 UTC (10 years, 3 months ago) by guez
File size: 6068 byte(s)
Changed all ".f90" suffixes to ".f".
1 guez 81 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