/[lmdze]/trunk/libf/phylmd/Radlwsw/swr.f
ViewVC logotype

Annotation of /trunk/libf/phylmd/Radlwsw/swr.f

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
File size: 10760 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 24 SUBROUTINE SWR ( KNU
2     S , PALBD , PCG , PCLD , PDSIG, POMEGA, PRAYL
3     S , PSEC , PTAU
4     S , PCGAZ , PPIZAZ, PRAY1, PRAY2, PREFZ , PRJ , PRK , PRMUE
5     S , PTAUAZ, PTRA1 , PTRA2 )
6     use dimens_m
7     use dimphy
8     use raddim
9     use radepsi
10     use radopt
11     IMPLICIT none
12     C
13     C ------------------------------------------------------------------
14     C PURPOSE.
15     C --------
16     C COMPUTES THE REFLECTIVITY AND TRANSMISSIVITY IN CASE OF
17     C CONTINUUM SCATTERING
18     C
19     C METHOD.
20     C -------
21     C
22     C 1. COMPUTES CONTINUUM FLUXES CORRESPONDING TO AEROSOL
23     C OR/AND RAYLEIGH SCATTERING (NO MOLECULAR GAS ABSORPTION)
24     C
25     C REFERENCE.
26     C ----------
27     C
28     C SEE RADIATION'S PART OF THE ECMWF RESEARCH DEPARTMENT
29     C DOCUMENTATION, AND FOUQUART AND BONNEL (1980)
30     C
31     C AUTHOR.
32     C -------
33     C JEAN-JACQUES MORCRETTE *ECMWF*
34     C
35     C MODIFICATIONS.
36     C --------------
37     C ORIGINAL : 89-07-14
38     C ------------------------------------------------------------------
39     C* ARGUMENTS:
40     C
41     INTEGER KNU
42 guez 71 DOUBLE PRECISION PALBD(KDLON,2)
43     DOUBLE PRECISION PCG(KDLON,2,KFLEV)
44     DOUBLE PRECISION PCLD(KDLON,KFLEV)
45     DOUBLE PRECISION PDSIG(KDLON,KFLEV)
46     DOUBLE PRECISION POMEGA(KDLON,2,KFLEV)
47     DOUBLE PRECISION PRAYL(KDLON)
48     DOUBLE PRECISION PSEC(KDLON)
49     DOUBLE PRECISION PTAU(KDLON,2,KFLEV)
50 guez 24 C
51 guez 71 DOUBLE PRECISION PRAY1(KDLON,KFLEV+1)
52     DOUBLE PRECISION PRAY2(KDLON,KFLEV+1)
53     DOUBLE PRECISION PREFZ(KDLON,2,KFLEV+1)
54     DOUBLE PRECISION PRJ(KDLON,6,KFLEV+1)
55     DOUBLE PRECISION PRK(KDLON,6,KFLEV+1)
56     DOUBLE PRECISION PRMUE(KDLON,KFLEV+1)
57     DOUBLE PRECISION PCGAZ(KDLON,KFLEV)
58     DOUBLE PRECISION PPIZAZ(KDLON,KFLEV)
59     DOUBLE PRECISION PTAUAZ(KDLON,KFLEV)
60     DOUBLE PRECISION PTRA1(KDLON,KFLEV+1)
61     DOUBLE PRECISION PTRA2(KDLON,KFLEV+1)
62 guez 24 C
63     C* LOCAL VARIABLES:
64     C
65 guez 71 DOUBLE PRECISION ZC1I(KDLON,KFLEV+1)
66     DOUBLE PRECISION ZCLEQ(KDLON,KFLEV)
67     DOUBLE PRECISION ZCLEAR(KDLON)
68     DOUBLE PRECISION ZCLOUD(KDLON)
69     DOUBLE PRECISION ZGG(KDLON)
70     DOUBLE PRECISION ZREF(KDLON)
71     DOUBLE PRECISION ZRE1(KDLON)
72     DOUBLE PRECISION ZRE2(KDLON)
73     DOUBLE PRECISION ZRMUZ(KDLON)
74     DOUBLE PRECISION ZRNEB(KDLON)
75     DOUBLE PRECISION ZR21(KDLON)
76     DOUBLE PRECISION ZR22(KDLON)
77     DOUBLE PRECISION ZR23(KDLON)
78     DOUBLE PRECISION ZSS1(KDLON)
79     DOUBLE PRECISION ZTO1(KDLON)
80     DOUBLE PRECISION ZTR(KDLON,2,KFLEV+1)
81     DOUBLE PRECISION ZTR1(KDLON)
82     DOUBLE PRECISION ZTR2(KDLON)
83     DOUBLE PRECISION ZW(KDLON)
84 guez 24 C
85     INTEGER jk, jl, ja, jkl, jklp1, jkm1, jaj
86 guez 71 DOUBLE PRECISION ZFACOA, ZFACOC, ZCORAE, ZCORCD
87     DOUBLE PRECISION ZMUE, ZGAP, ZWW, ZTO, ZDEN, ZDEN1
88     DOUBLE PRECISION ZMU1, ZRE11, ZBMU0, ZBMU1
89 guez 24 C
90     C ------------------------------------------------------------------
91     C
92     C* 1. INITIALIZATION
93     C --------------
94     C
95     100 CONTINUE
96     C
97     DO 103 JK = 1 , KFLEV+1
98     DO 102 JA = 1 , 6
99     DO 101 JL = 1, KDLON
100     PRJ(JL,JA,JK) = 0.
101     PRK(JL,JA,JK) = 0.
102     101 CONTINUE
103     102 CONTINUE
104     103 CONTINUE
105     C
106     C
107     C ------------------------------------------------------------------
108     C
109     C* 2. TOTAL EFFECTIVE CLOUDINESS ABOVE A GIVEN LEVEL
110     C ----------------------------------------------
111     C
112     200 CONTINUE
113     C
114     DO 201 JL = 1, KDLON
115     ZR23(JL) = 0.
116     ZC1I(JL,KFLEV+1) = 0.
117     ZCLEAR(JL) = 1.
118     ZCLOUD(JL) = 0.
119     201 CONTINUE
120     C
121     JK = 1
122     JKL = KFLEV+1 - JK
123     JKLP1 = JKL + 1
124     DO 202 JL = 1, KDLON
125     ZFACOA = 1. - PPIZAZ(JL,JKL)*PCGAZ(JL,JKL)*PCGAZ(JL,JKL)
126     ZFACOC = 1. - POMEGA(JL,KNU,JKL) * PCG(JL,KNU,JKL)
127     S * PCG(JL,KNU,JKL)
128     ZCORAE = ZFACOA * PTAUAZ(JL,JKL) * PSEC(JL)
129     ZCORCD = ZFACOC * PTAU(JL,KNU,JKL) * PSEC(JL)
130     ZR21(JL) = EXP(-ZCORAE )
131     ZR22(JL) = EXP(-ZCORCD )
132     ZSS1(JL) = PCLD(JL,JKL)*(1.0-ZR21(JL)*ZR22(JL))
133     S + (1.0-PCLD(JL,JKL))*(1.0-ZR21(JL))
134     ZCLEQ(JL,JKL) = ZSS1(JL)
135     C
136     IF (NOVLP.EQ.1) THEN
137     c* maximum-random
138     ZCLEAR(JL) = ZCLEAR(JL)
139     S *(1.0-MAX(ZSS1(JL),ZCLOUD(JL)))
140     S /(1.0-MIN(ZCLOUD(JL),1.-ZEPSEC))
141     ZC1I(JL,JKL) = 1.0 - ZCLEAR(JL)
142     ZCLOUD(JL) = ZSS1(JL)
143     ELSE IF (NOVLP.EQ.2) THEN
144     C* maximum
145     ZCLOUD(JL) = MAX( ZSS1(JL) , ZCLOUD(JL) )
146     ZC1I(JL,JKL) = ZCLOUD(JL)
147     ELSE IF (NOVLP.EQ.3) THEN
148     c* random
149     ZCLEAR(JL) = ZCLEAR(JL)*(1.0 - ZSS1(JL))
150     ZCLOUD(JL) = 1.0 - ZCLEAR(JL)
151     ZC1I(JL,JKL) = ZCLOUD(JL)
152     END IF
153     202 CONTINUE
154     C
155     DO 205 JK = 2 , KFLEV
156     JKL = KFLEV+1 - JK
157     JKLP1 = JKL + 1
158     DO 204 JL = 1, KDLON
159     ZFACOA = 1. - PPIZAZ(JL,JKL)*PCGAZ(JL,JKL)*PCGAZ(JL,JKL)
160     ZFACOC = 1. - POMEGA(JL,KNU,JKL) * PCG(JL,KNU,JKL)
161     S * PCG(JL,KNU,JKL)
162     ZCORAE = ZFACOA * PTAUAZ(JL,JKL) * PSEC(JL)
163     ZCORCD = ZFACOC * PTAU(JL,KNU,JKL) * PSEC(JL)
164     ZR21(JL) = EXP(-ZCORAE )
165     ZR22(JL) = EXP(-ZCORCD )
166     ZSS1(JL) = PCLD(JL,JKL)*(1.0-ZR21(JL)*ZR22(JL))
167     S + (1.0-PCLD(JL,JKL))*(1.0-ZR21(JL))
168     ZCLEQ(JL,JKL) = ZSS1(JL)
169     c
170     IF (NOVLP.EQ.1) THEN
171     c* maximum-random
172     ZCLEAR(JL) = ZCLEAR(JL)
173     S *(1.0-MAX(ZSS1(JL),ZCLOUD(JL)))
174     S /(1.0-MIN(ZCLOUD(JL),1.-ZEPSEC))
175     ZC1I(JL,JKL) = 1.0 - ZCLEAR(JL)
176     ZCLOUD(JL) = ZSS1(JL)
177     ELSE IF (NOVLP.EQ.2) THEN
178     C* maximum
179     ZCLOUD(JL) = MAX( ZSS1(JL) , ZCLOUD(JL) )
180     ZC1I(JL,JKL) = ZCLOUD(JL)
181     ELSE IF (NOVLP.EQ.3) THEN
182     c* random
183     ZCLEAR(JL) = ZCLEAR(JL)*(1.0 - ZSS1(JL))
184     ZCLOUD(JL) = 1.0 - ZCLEAR(JL)
185     ZC1I(JL,JKL) = ZCLOUD(JL)
186     END IF
187     204 CONTINUE
188     205 CONTINUE
189     C
190     C ------------------------------------------------------------------
191     C
192     C* 3. REFLECTIVITY/TRANSMISSIVITY FOR PURE SCATTERING
193     C -----------------------------------------------
194     C
195     300 CONTINUE
196     C
197     DO 301 JL = 1, KDLON
198     PRAY1(JL,KFLEV+1) = 0.
199     PRAY2(JL,KFLEV+1) = 0.
200     PREFZ(JL,2,1) = PALBD(JL,KNU)
201     PREFZ(JL,1,1) = PALBD(JL,KNU)
202     PTRA1(JL,KFLEV+1) = 1.
203     PTRA2(JL,KFLEV+1) = 1.
204     301 CONTINUE
205     C
206     DO 346 JK = 2 , KFLEV+1
207     JKM1 = JK-1
208     DO 342 JL = 1, KDLON
209     ZRNEB(JL)= PCLD(JL,JKM1)
210     ZRE1(JL)=0.
211     ZTR1(JL)=0.
212     ZRE2(JL)=0.
213     ZTR2(JL)=0.
214     C
215     C
216     C ------------------------------------------------------------------
217     C
218     C* 3.1 EQUIVALENT ZENITH ANGLE
219     C -----------------------
220     C
221     310 CONTINUE
222     C
223     ZMUE = (1.-ZC1I(JL,JK)) * PSEC(JL)
224     S + ZC1I(JL,JK) * 1.66
225     PRMUE(JL,JK) = 1./ZMUE
226     C
227     C
228     C ------------------------------------------------------------------
229     C
230     C* 3.2 REFLECT./TRANSMISSIVITY DUE TO RAYLEIGH AND AEROSOLS
231     C ----------------------------------------------------
232     C
233     320 CONTINUE
234     C
235     ZGAP = PCGAZ(JL,JKM1)
236     ZBMU0 = 0.5 - 0.75 * ZGAP / ZMUE
237     ZWW = PPIZAZ(JL,JKM1)
238     ZTO = PTAUAZ(JL,JKM1)
239     ZDEN = 1. + (1. - ZWW + ZBMU0 * ZWW) * ZTO * ZMUE
240     S + (1-ZWW) * (1. - ZWW +2.*ZBMU0*ZWW)*ZTO*ZTO*ZMUE*ZMUE
241     PRAY1(JL,JKM1) = ZBMU0 * ZWW * ZTO * ZMUE / ZDEN
242     PTRA1(JL,JKM1) = 1. / ZDEN
243     c PRINT *,' LOOP 342 ** 3 ** JL=',JL,PRAY1(JL,JKM1),PTRA1(JL,JKM1)
244     C
245     ZMU1 = 0.5
246     ZBMU1 = 0.5 - 0.75 * ZGAP * ZMU1
247     ZDEN1= 1. + (1. - ZWW + ZBMU1 * ZWW) * ZTO / ZMU1
248     S + (1-ZWW) * (1. - ZWW +2.*ZBMU1*ZWW)*ZTO*ZTO/ZMU1/ZMU1
249     PRAY2(JL,JKM1) = ZBMU1 * ZWW * ZTO / ZMU1 / ZDEN1
250     PTRA2(JL,JKM1) = 1. / ZDEN1
251     C
252     C
253     C ------------------------------------------------------------------
254     C
255     C* 3.3 EFFECT OF CLOUD LAYER
256     C ---------------------
257     C
258     330 CONTINUE
259     C
260     ZW(JL) = POMEGA(JL,KNU,JKM1)
261     ZTO1(JL) = PTAU(JL,KNU,JKM1)/ZW(JL)
262     S + PTAUAZ(JL,JKM1)/PPIZAZ(JL,JKM1)
263     ZR21(JL) = PTAU(JL,KNU,JKM1) + PTAUAZ(JL,JKM1)
264     ZR22(JL) = PTAU(JL,KNU,JKM1) / ZR21(JL)
265     ZGG(JL) = ZR22(JL) * PCG(JL,KNU,JKM1)
266     S + (1. - ZR22(JL)) * PCGAZ(JL,JKM1)
267     C Modif PhD - JJM 19/03/96 pour erreurs arrondis
268     C machine
269     C PHD PROTECTION ZW(JL) = ZR21(JL) / ZTO1(JL)
270     IF (ZW(JL).EQ.1. .AND. PPIZAZ(JL,JKM1).EQ.1.) THEN
271     ZW(JL)=1.
272     ELSE
273     ZW(JL) = ZR21(JL) / ZTO1(JL)
274     END IF
275     ZREF(JL) = PREFZ(JL,1,JKM1)
276     ZRMUZ(JL) = PRMUE(JL,JK)
277     342 CONTINUE
278     C
279     CALL SWDE(ZGG , ZREF , ZRMUZ , ZTO1 , ZW,
280     S ZRE1 , ZRE2 , ZTR1 , ZTR2)
281     C
282     DO 345 JL = 1, KDLON
283     C
284     PREFZ(JL,1,JK) = (1.-ZRNEB(JL)) * (PRAY1(JL,JKM1)
285     S + PREFZ(JL,1,JKM1) * PTRA1(JL,JKM1)
286     S * PTRA2(JL,JKM1)
287     S / (1.-PRAY2(JL,JKM1)*PREFZ(JL,1,JKM1)))
288     S + ZRNEB(JL) * ZRE2(JL)
289     C
290     ZTR(JL,1,JKM1) = ZRNEB(JL) * ZTR2(JL) + (PTRA1(JL,JKM1)
291     S / (1.-PRAY2(JL,JKM1)*PREFZ(JL,1,JKM1)))
292     S * (1.-ZRNEB(JL))
293     C
294     PREFZ(JL,2,JK) = (1.-ZRNEB(JL)) * (PRAY1(JL,JKM1)
295     S + PREFZ(JL,2,JKM1) * PTRA1(JL,JKM1)
296     S * PTRA2(JL,JKM1) )
297     S + ZRNEB(JL) * ZRE1(JL)
298     C
299     ZTR(JL,2,JKM1) = ZRNEB(JL) * ZTR1(JL)
300     S + PTRA1(JL,JKM1) * (1.-ZRNEB(JL))
301     C
302     345 CONTINUE
303     346 CONTINUE
304     DO 347 JL = 1, KDLON
305     ZMUE = (1.-ZC1I(JL,1))*PSEC(JL)+ZC1I(JL,1)*1.66
306     PRMUE(JL,1)=1./ZMUE
307     347 CONTINUE
308     C
309     C
310     C ------------------------------------------------------------------
311     C
312     C* 3.5 REFLECT./TRANSMISSIVITY BETWEEN SURFACE AND LEVEL
313     C -------------------------------------------------
314     C
315     350 CONTINUE
316     C
317     IF (KNU.EQ.1) THEN
318     JAJ = 2
319     DO 351 JL = 1, KDLON
320     PRJ(JL,JAJ,KFLEV+1) = 1.
321     PRK(JL,JAJ,KFLEV+1) = PREFZ(JL, 1,KFLEV+1)
322     351 CONTINUE
323     C
324     DO 353 JK = 1 , KFLEV
325     JKL = KFLEV+1 - JK
326     JKLP1 = JKL + 1
327     DO 352 JL = 1, KDLON
328     ZRE11= PRJ(JL,JAJ,JKLP1) * ZTR(JL, 1,JKL)
329     PRJ(JL,JAJ,JKL) = ZRE11
330     PRK(JL,JAJ,JKL) = ZRE11 * PREFZ(JL, 1,JKL)
331     352 CONTINUE
332     353 CONTINUE
333     354 CONTINUE
334     C
335     ELSE
336     C
337     DO 358 JAJ = 1 , 2
338     DO 355 JL = 1, KDLON
339     PRJ(JL,JAJ,KFLEV+1) = 1.
340     PRK(JL,JAJ,KFLEV+1) = PREFZ(JL,JAJ,KFLEV+1)
341     355 CONTINUE
342     C
343     DO 357 JK = 1 , KFLEV
344     JKL = KFLEV+1 - JK
345     JKLP1 = JKL + 1
346     DO 356 JL = 1, KDLON
347     ZRE11= PRJ(JL,JAJ,JKLP1) * ZTR(JL,JAJ,JKL)
348     PRJ(JL,JAJ,JKL) = ZRE11
349     PRK(JL,JAJ,JKL) = ZRE11 * PREFZ(JL,JAJ,JKL)
350     356 CONTINUE
351     357 CONTINUE
352     358 CONTINUE
353     C
354     END IF
355     C
356     C ------------------------------------------------------------------
357     C
358     RETURN
359     END

  ViewVC Help
Powered by ViewVC 1.1.21