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

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

Parent Directory Parent Directory | Revision Log Revision Log


Revision 82 - (show annotations)
Wed Mar 5 14:57:53 2014 UTC (10 years, 3 months ago) by guez
File size: 4923 byte(s)
Changed all ".f90" suffixes to ".f".
1
2 ! IM ctes ds clesphys.h SUBROUTINE SWU
3 ! (PSCT,RCO2,PCLDSW,PPMB,PPSOL,PRMU0,PFRAC,
4 SUBROUTINE swu(psct, pcldsw, ppmb, ppsol, prmu0, pfrac, ptave, pwv, paki, &
5 pcld, pclear, pdsig, pfact, prmu, psec, pud)
6 USE dimens_m
7 USE dimphy
8 USE clesphys
9 USE suphec_m
10 USE raddim
11 USE radepsi
12 USE radopt
13 IMPLICIT NONE
14
15 ! * ARGUMENTS:
16
17 DOUBLE PRECISION psct
18 ! IM ctes ds clesphys.h DOUBLE PRECISION RCO2
19 DOUBLE PRECISION pcldsw(kdlon, kflev)
20 DOUBLE PRECISION ppmb(kdlon, kflev+1)
21 DOUBLE PRECISION ppsol(kdlon)
22 DOUBLE PRECISION prmu0(kdlon)
23 DOUBLE PRECISION pfrac(kdlon)
24 DOUBLE PRECISION ptave(kdlon, kflev)
25 DOUBLE PRECISION pwv(kdlon, kflev)
26
27 DOUBLE PRECISION paki(kdlon, 2)
28 DOUBLE PRECISION pcld(kdlon, kflev)
29 DOUBLE PRECISION pclear(kdlon)
30 DOUBLE PRECISION pdsig(kdlon, kflev)
31 DOUBLE PRECISION pfact(kdlon)
32 DOUBLE PRECISION prmu(kdlon)
33 DOUBLE PRECISION psec(kdlon)
34 DOUBLE PRECISION pud(kdlon, 5, kflev+1)
35
36 ! * LOCAL VARIABLES:
37
38 INTEGER iind(2)
39 DOUBLE PRECISION zc1j(kdlon, kflev+1)
40 DOUBLE PRECISION zclear(kdlon)
41 DOUBLE PRECISION zcloud(kdlon)
42 DOUBLE PRECISION zn175(kdlon)
43 DOUBLE PRECISION zn190(kdlon)
44 DOUBLE PRECISION zo175(kdlon)
45 DOUBLE PRECISION zo190(kdlon)
46 DOUBLE PRECISION zsign(kdlon)
47 DOUBLE PRECISION zr(kdlon, 2)
48 DOUBLE PRECISION zsigo(kdlon)
49 DOUBLE PRECISION zud(kdlon, 2)
50 DOUBLE PRECISION zrth, zrtu, zwh2o, zdsco2, zdsh2o, zfppw
51 INTEGER jl, jk, jkp1, jkl, jklp1, ja
52
53 ! * Prescribed Data:
54
55 DOUBLE PRECISION zpdh2o, zpdumg
56 SAVE zpdh2o, zpdumg
57 DOUBLE PRECISION zprh2o, zprumg
58 SAVE zprh2o, zprumg
59 DOUBLE PRECISION rtdh2o, rtdumg
60 SAVE rtdh2o, rtdumg
61 DOUBLE PRECISION rth2o, rtumg
62 SAVE rth2o, rtumg
63 DATA zpdh2o, zpdumg/0.8, 0.75/
64 DATA zprh2o, zprumg/30000., 30000./
65 DATA rtdh2o, rtdumg/0.40, 0.375/
66 DATA rth2o, rtumg/240., 240./
67 ! ------------------------------------------------------------------
68
69 ! * 1. COMPUTES AMOUNTS OF ABSORBERS
70 ! -----------------------------
71
72
73 iind(1) = 1
74 iind(2) = 2
75
76
77 ! * 1.1 INITIALIZES QUANTITIES
78 ! ----------------------
79
80
81 DO jl = 1, kdlon
82 pud(jl, 1, kflev+1) = 0.
83 pud(jl, 2, kflev+1) = 0.
84 pud(jl, 3, kflev+1) = 0.
85 pud(jl, 4, kflev+1) = 0.
86 pud(jl, 5, kflev+1) = 0.
87 pfact(jl) = prmu0(jl)*pfrac(jl)*psct
88 prmu(jl) = sqrt(1224.*prmu0(jl)*prmu0(jl)+1.)/35.
89 psec(jl) = 1./prmu(jl)
90 zc1j(jl, kflev+1) = 0.
91 END DO
92
93 ! * 1.3 AMOUNTS OF ABSORBERS
94 ! --------------------
95
96
97 DO jl = 1, kdlon
98 zud(jl, 1) = 0.
99 zud(jl, 2) = 0.
100 zo175(jl) = ppsol(jl)**(zpdumg+1.)
101 zo190(jl) = ppsol(jl)**(zpdh2o+1.)
102 zsigo(jl) = ppsol(jl)
103 zclear(jl) = 1.
104 zcloud(jl) = 0.
105 END DO
106
107 DO jk = 1, kflev
108 jkp1 = jk + 1
109 jkl = kflev + 1 - jk
110 jklp1 = jkl + 1
111 DO jl = 1, kdlon
112 zrth = (rth2o/ptave(jl,jk))**rtdh2o
113 zrtu = (rtumg/ptave(jl,jk))**rtdumg
114 zwh2o = max(pwv(jl,jk), zepscq)
115 zsign(jl) = 100.*ppmb(jl, jkp1)
116 pdsig(jl, jk) = (zsigo(jl)-zsign(jl))/ppsol(jl)
117 zn175(jl) = zsign(jl)**(zpdumg+1.)
118 zn190(jl) = zsign(jl)**(zpdh2o+1.)
119 zdsco2 = zo175(jl) - zn175(jl)
120 zdsh2o = zo190(jl) - zn190(jl)
121 pud(jl, 1, jk) = 1./(10.*rg*(zpdh2o+1.))/(zprh2o**zpdh2o)*zdsh2o*zwh2o* &
122 zrth
123 pud(jl, 2, jk) = 1./(10.*rg*(zpdumg+1.))/(zprumg**zpdumg)*zdsco2*rco2* &
124 zrtu
125 zfppw = 1.6078*zwh2o/(1.+0.608*zwh2o)
126 pud(jl, 4, jk) = pud(jl, 1, jk)*zfppw
127 pud(jl, 5, jk) = pud(jl, 1, jk)*(1.-zfppw)
128 zud(jl, 1) = zud(jl, 1) + pud(jl, 1, jk)
129 zud(jl, 2) = zud(jl, 2) + pud(jl, 2, jk)
130 zsigo(jl) = zsign(jl)
131 zo175(jl) = zn175(jl)
132 zo190(jl) = zn190(jl)
133
134 IF (novlp==1) THEN
135 zclear(jl) = zclear(jl)*(1.-max(pcldsw(jl,jkl),zcloud(jl)))/(1.-min( &
136 zcloud(jl),1.-zepsec))
137 zc1j(jl, jkl) = 1.0 - zclear(jl)
138 zcloud(jl) = pcldsw(jl, jkl)
139 ELSE IF (novlp==2) THEN
140 zcloud(jl) = max(pcldsw(jl,jkl), zcloud(jl))
141 zc1j(jl, jkl) = zcloud(jl)
142 ELSE IF (novlp==3) THEN
143 zclear(jl) = zclear(jl)*(1.-pcldsw(jl,jkl))
144 zcloud(jl) = 1.0 - zclear(jl)
145 zc1j(jl, jkl) = zcloud(jl)
146 END IF
147 END DO
148 END DO
149 DO jl = 1, kdlon
150 pclear(jl) = 1. - zc1j(jl, 1)
151 END DO
152 DO jk = 1, kflev
153 DO jl = 1, kdlon
154 IF (pclear(jl)<1.) THEN
155 pcld(jl, jk) = pcldsw(jl, jk)/(1.-pclear(jl))
156 ELSE
157 pcld(jl, jk) = 0.
158 END IF
159 END DO
160 END DO
161
162
163 ! * 1.4 COMPUTES CLEAR-SKY GREY ABSORPTION COEFFICIENTS
164 ! -----------------------------------------------
165
166
167 DO ja = 1, 2
168 DO jl = 1, kdlon
169 zud(jl, ja) = zud(jl, ja)*psec(jl)
170 END DO
171 END DO
172
173 CALL swtt1(2, 2, iind, zud, zr)
174
175 DO ja = 1, 2
176 DO jl = 1, kdlon
177 paki(jl, ja) = -log(zr(jl,ja))/zud(jl, ja)
178 END DO
179 END DO
180
181
182 ! ------------------------------------------------------------------
183
184 RETURN
185 END SUBROUTINE swu

  ViewVC Help
Powered by ViewVC 1.1.21