/[lmdze]/trunk/phylmd/Radlwsw/swde.f90
ViewVC logotype

Annotation of /trunk/phylmd/Radlwsw/swde.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/Radlwsw/swde.f
File size: 4306 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 SWDE (PGG,PREF,PRMUZ,PTO1,PW,
2     S PRE1,PRE2,PTR1,PTR2)
3     use dimens_m
4     use dimphy
5     use raddim
6     IMPLICIT none
7     C
8     C ------------------------------------------------------------------
9     C PURPOSE.
10     C --------
11     C COMPUTES THE REFLECTIVITY AND TRANSMISSIVITY OF A CLOUDY
12     C LAYER USING THE DELTA-EDDINGTON'S APPROXIMATION.
13     C
14     C METHOD.
15     C -------
16     C
17     C STANDARD DELTA-EDDINGTON LAYER CALCULATIONS.
18     C
19     C REFERENCE.
20     C ----------
21     C
22     C SEE RADIATION'S PART OF THE MODEL'S DOCUMENTATION AND
23     C ECMWF RESEARCH DEPARTMENT DOCUMENTATION OF THE IFS
24     C
25     C AUTHOR.
26     C -------
27     C JEAN-JACQUES MORCRETTE *ECMWF*
28     C
29     C MODIFICATIONS.
30     C --------------
31     C ORIGINAL : 88-12-15
32     C ------------------------------------------------------------------
33     C* ARGUMENTS:
34     C
35 guez 71 DOUBLE PRECISION PGG(KDLON) ! ASSYMETRY FACTOR
36     DOUBLE PRECISION PREF(KDLON) ! REFLECTIVITY OF THE UNDERLYING LAYER
37     DOUBLE PRECISION PRMUZ(KDLON) ! COSINE OF SOLAR ZENITH ANGLE
38     DOUBLE PRECISION PTO1(KDLON) ! OPTICAL THICKNESS
39     DOUBLE PRECISION PW(KDLON) ! SINGLE SCATTERING ALBEDO
40     DOUBLE PRECISION PRE1(KDLON) ! LAYER REFLECTIVITY (NO UNDERLYING-LAYER REFLECTION)
41     DOUBLE PRECISION PRE2(KDLON) ! LAYER REFLECTIVITY
42     DOUBLE PRECISION PTR1(KDLON) ! LAYER TRANSMISSIVITY (NO UNDERLYING-LAYER REFLECTION)
43     DOUBLE PRECISION PTR2(KDLON) ! LAYER TRANSMISSIVITY
44 guez 24 C
45     C* LOCAL VARIABLES:
46     C
47     INTEGER jl
48 guez 71 DOUBLE PRECISION ZFF, ZGP, ZTOP, ZWCP, ZDT, ZX1, ZWM
49     DOUBLE PRECISION ZRM2, ZRK, ZX2, ZRP, ZALPHA, ZBETA, ZARG
50     DOUBLE PRECISION ZEXMU0, ZARG2, ZEXKP, ZEXKM, ZXP2P, ZXM2P, ZAP2B
51     DOUBLE PRECISION ZAM2B
52     DOUBLE PRECISION ZA11, ZA12, ZA13, ZA21, ZA22, ZA23
53     DOUBLE PRECISION ZDENA, ZC1A, ZC2A, ZRI0A, ZRI1A
54     DOUBLE PRECISION ZRI0B, ZRI1B
55     DOUBLE PRECISION ZB21, ZB22, ZB23, ZDENB, ZC1B, ZC2B
56     DOUBLE PRECISION ZRI0C, ZRI1C, ZRI0D, ZRI1D
57 guez 24 C ------------------------------------------------------------------
58     C
59     C* 1. DELTA-EDDINGTON CALCULATIONS
60     C
61     100 CONTINUE
62     C
63     DO 131 JL = 1, KDLON
64     C
65     C* 1.1 SET UP THE DELTA-MODIFIED PARAMETERS
66     C
67     110 CONTINUE
68     C
69     ZFF = PGG(JL)*PGG(JL)
70     ZGP = PGG(JL)/(1.+PGG(JL))
71     ZTOP = (1.- PW(JL) * ZFF) * PTO1(JL)
72     ZWCP = (1-ZFF)* PW(JL) /(1.- PW(JL) * ZFF)
73     ZDT = 2./3.
74     ZX1 = 1.-ZWCP*ZGP
75     ZWM = 1.-ZWCP
76     ZRM2 = PRMUZ(JL) * PRMUZ(JL)
77     ZRK = SQRT(3.*ZWM*ZX1)
78     ZX2 = 4.*(1.-ZRK*ZRK*ZRM2)
79     ZRP=ZRK/ZX1
80     ZALPHA = 3.*ZWCP*ZRM2*(1.+ZGP*ZWM)/ZX2
81     ZBETA = 3.*ZWCP* PRMUZ(JL) *(1.+3.*ZGP*ZRM2*ZWM)/ZX2
82     CMAF ZARG=MIN(ZTOP/PRMUZ(JL),200.)
83     ZARG=MIN(ZTOP/PRMUZ(JL),2.0d+2)
84     ZEXMU0=EXP(-ZARG)
85     CMAF ZARG2=MIN(ZRK*ZTOP,200.)
86     ZARG2=MIN(ZRK*ZTOP,2.0d+2)
87     ZEXKP=EXP(ZARG2)
88     ZEXKM = 1./ZEXKP
89     ZXP2P = 1.+ZDT*ZRP
90     ZXM2P = 1.-ZDT*ZRP
91     ZAP2B = ZALPHA+ZDT*ZBETA
92     ZAM2B = ZALPHA-ZDT*ZBETA
93     C
94     C* 1.2 WITHOUT REFLECTION FROM THE UNDERLYING LAYER
95     C
96     120 CONTINUE
97     C
98     ZA11 = ZXP2P
99     ZA12 = ZXM2P
100     ZA13 = ZAP2B
101     ZA22 = ZXP2P*ZEXKP
102     ZA21 = ZXM2P*ZEXKM
103     ZA23 = ZAM2B*ZEXMU0
104     ZDENA = ZA11 * ZA22 - ZA21 * ZA12
105     ZC1A = (ZA22*ZA13-ZA12*ZA23)/ZDENA
106     ZC2A = (ZA11*ZA23-ZA21*ZA13)/ZDENA
107     ZRI0A = ZC1A+ZC2A-ZALPHA
108     ZRI1A = ZRP*(ZC1A-ZC2A)-ZBETA
109     PRE1(JL) = (ZRI0A-ZDT*ZRI1A)/ PRMUZ(JL)
110     ZRI0B = ZC1A*ZEXKM+ZC2A*ZEXKP-ZALPHA*ZEXMU0
111     ZRI1B = ZRP*(ZC1A*ZEXKM-ZC2A*ZEXKP)-ZBETA*ZEXMU0
112     PTR1(JL) = ZEXMU0+(ZRI0B+ZDT*ZRI1B)/ PRMUZ(JL)
113     C
114     C* 1.3 WITH REFLECTION FROM THE UNDERLYING LAYER
115     C
116     130 CONTINUE
117     C
118     ZB21 = ZA21- PREF(JL) *ZXP2P*ZEXKM
119     ZB22 = ZA22- PREF(JL) *ZXM2P*ZEXKP
120     ZB23 = ZA23- PREF(JL) *ZEXMU0*(ZAP2B - PRMUZ(JL) )
121     ZDENB = ZA11 * ZB22 - ZB21 * ZA12
122     ZC1B = (ZB22*ZA13-ZA12*ZB23)/ZDENB
123     ZC2B = (ZA11*ZB23-ZB21*ZA13)/ZDENB
124     ZRI0C = ZC1B+ZC2B-ZALPHA
125     ZRI1C = ZRP*(ZC1B-ZC2B)-ZBETA
126     PRE2(JL) = (ZRI0C-ZDT*ZRI1C) / PRMUZ(JL)
127     ZRI0D = ZC1B*ZEXKM + ZC2B*ZEXKP - ZALPHA*ZEXMU0
128     ZRI1D = ZRP * (ZC1B*ZEXKM - ZC2B*ZEXKP) - ZBETA*ZEXMU0
129     PTR2(JL) = ZEXMU0 + (ZRI0D + ZDT*ZRI1D) / PRMUZ(JL)
130     C
131     131 CONTINUE
132     RETURN
133     END

  ViewVC Help
Powered by ViewVC 1.1.21