source: trunk/LMDZ.GENERIC/libf/phystd/gfluxv.F @ 135

Last change on this file since 135 was 135, checked in by aslmd, 14 years ago

CHANGEMENT ARBORESCENCE ETAPE 2 -- NON COMPLET

File size: 9.4 KB
Line 
1      SUBROUTINE GFLUXV(DTDEL,TDEL,TAUCUMIN,WDEL,CDEL,UBAR0,F0PI,RSF,
2     *                  BTOP,BSURF,FMIDP,FMIDM,DIFFV,FLUXUP,FLUXDN)
3
4
5C  THIS SUBROUTINE TAKES THE OPTICAL CONSTANTS AND BOUNDARY CONDITIONS
6C  FOR THE VISIBLE  FLUX AT ONE WAVELENGTH AND SOLVES FOR THE FLUXES AT
7C  THE LEVELS. THIS VERSION IS SET UP TO WORK WITH LAYER OPTICAL DEPTHS
8C  MEASURED FROM THE TOP OF EACH LAYER.  (DTAU) TOP OF EACH LAYER HAS 
9C  OPTICAL DEPTH TAU(N).IN THIS SUB LEVEL N IS ABOVE LAYER N. THAT IS LAYER N
10C  HAS LEVEL N ON TOP AND LEVEL N+1 ON BOTTOM. OPTICAL DEPTH INCREASES
11C  FROM TOP TO BOTTOM. SEE C.P. MCKAY, TGM NOTES.
12C THIS SUBROUTINE DIFFERS FROM ITS IR COUNTERPART IN THAT HERE WE SOLVE FOR
13C THE FLUXES DIRECTLY USING THE GENERALIZED NOTATION OF MEADOR AND WEAVOR
14C J.A.S., 37, 630-642, 1980.
15C THE TRI-DIAGONAL MATRIX SOLVER IS DSOLVER AND IS DOUBLE PRECISION SO MANY
16C VARIABLES ARE PASSED AS SINGLE THEN BECOME DOUBLE IN DSOLVER
17C
18C NLL           = NUMBER OF LEVELS (NAYER + 1) THAT WILL BE SOLVED
19C NAYER         = NUMBER OF LAYERS (NOTE DIFFERENT SPELLING HERE)
20C WAVEN         = WAVELENGTH FOR THE COMPUTATION
21C DTDEL(NLAYER) = ARRAY OPTICAL DEPTH OF THE LAYERS
22C TDEL(NLL)     = ARRAY COLUMN OPTICAL DEPTH AT THE LEVELS
23C WDEL(NLEVEL)  = SINGLE SCATTERING ALBEDO
24C CDEL(NLL)     = ASYMMETRY FACTORS, 0=ISOTROPIC
25C UBARV         = AVERAGE ANGLE,
26C UBAR0         = SOLAR ZENITH ANGLE
27C F0PI          = INCIDENT SOLAR DIRECT BEAM FLUX
28C RSF           = SURFACE REFLECTANCE
29C BTOP          = UPPER BOUNDARY CONDITION ON DIFFUSE FLUX
30C BSURF         = REFLECTED DIRECT BEAM = (1-RSFI)*F0PI*EDP-TAU/U
31C FP(NLEVEL)    = UPWARD FLUX AT LEVELS
32C FM(NLEVEL)    = DOWNWARD FLUX AT LEVELS
33C FMIDP(NLAYER) = UPWARD FLUX AT LAYER MIDPOINTS
34C FMIDM(NLAYER) = DOWNWARD FLUX AT LAYER MIDPOINTS
35C added Dec 2002
36C DIFFV         = downward diffuse solar flux at the surface
37C
38!======================================================================!
39
40      use radinc_h
41
42      implicit none
43
44      INTEGER NLP
45      PARAMETER (NLP=101) ! MUST BE LARGER THAN NLEVEL
46
47      REAL*8 EM, EP
48      REAL*8 W0(L_NLAYRAD), COSBAR(L_NLAYRAD), DTAU(L_NLAYRAD)
49      REAL*8 TAU(L_NLEVRAD), WDEL(L_NLAYRAD), CDEL(L_NLAYRAD)
50      REAL*8 DTDEL(L_NLAYRAD), TDEL(L_NLEVRAD)
51      REAL*8 FMIDP(L_NLAYRAD), FMIDM(L_NLAYRAD)
52      REAL*8 LAMDA(NLP), ALPHA(NLP), XK1(NLP), XK2(NLP)
53      REAL*8 G1(NLP), G2(NLP), G3(NLP), GAMA(NLP), CP(NLP), CM(NLP)
54      REAL*8 CPM1(NLP)
55      REAL*8 CMM1(NLP), E1(NLP), E2(NLP), E3(NLP), E4(NLP), EXPTRM(NLP)
56      REAL*8 FLUXUP, FLUXDN
57      REAL*8 FACTOR, TAUCUMIN(L_LEVELS), TAUCUM(L_LEVELS)
58
59      integer NAYER, L, K
60      real*8  ubar0, f0pi, rsf, btop, bsurf, g4, denom, am, ap
61      real*8  taumax, taumid, cpmid, cmmid
62      real*8  diffv
63
64C======================================================================C
65
66
67
68      NAYER  = L_NLAYRAD
69      TAUMAX = L_TAUMAX    !Default is 35.0
70     
71!  Delta-Eddington Scaling
72
73
74      FACTOR    = 1.0D0 - WDEL(1)*CDEL(1)**2
75
76      TAU(1)    = TDEL(1)*FACTOR
77      TAUCUM(1) = 0.0D0
78      TAUCUM(2) = TAUCUMIN(2)*FACTOR
79      TAUCUM(3) = TAUCUM(2) +(TAUCUMIN(3)-TAUCUMIN(2))*FACTOR
80
81
82      DO L=1,L_NLAYRAD-1
83        FACTOR      = 1.0D0 - WDEL(L)*CDEL(L)**2
84        W0(L)       = WDEL(L)*(1.0D0-CDEL(L)**2)/FACTOR
85        COSBAR(L)   = CDEL(L)/(1.0D0+CDEL(L))
86        DTAU(L)     = DTDEL(L)*FACTOR
87        TAU(L+1)    = TAU(L)+DTAU(L)
88        K           = 2*(L+1)
89        TAUCUM(K)   = TAU(L+1)
90        TAUCUM(K+1) = TAUCUM(K) + (TAUCUMIN(K+1)-TAUCUMIN(K))*FACTOR
91      END DO
92
93
94!  Bottom layer
95
96      L             = L_NLAYRAD
97      FACTOR        = 1.0D0 - WDEL(L)*CDEL(L)**2
98      W0(L)         = WDEL(L)*(1.0D0-CDEL(L)**2)/FACTOR
99      COSBAR(L)     = CDEL(L)/(1.0D0+CDEL(L))
100      DTAU(L)       = DTDEL(L)*FACTOR
101      TAU(L+1)      = TAU(L)+DTAU(L)
102      TAUCUM(2*L+1) = TAU(L+1)
103
104
105      BSURF = RSF*UBAR0*F0PI*EXP(-MIN(TAU(L+1),TAUMAX)/UBAR0)
106      ! new definition of BSURF
107      ! the old one was false because it used tau, not tau'
108      ! tau' includes the contribution to the downward flux
109      ! of the radiation scattered in the forward direction
110
111
112C     WE GO WITH THE QUADRATURE APPROACH HERE.  THE "SQRT(3)" factors
113C     ARE THE UBARV TERM.
114
115      DO L=1,L_NLAYRAD
116       
117        ALPHA(L)=SQRT( (1.0-W0(L))/(1.0-W0(L)*COSBAR(L)) )
118
119
120C       SET OF CONSTANTS DETERMINED BY DOM
121
122        G1(L)    = (SQRT(3.0)*0.5)*(2.0- W0(L)*(1.0+COSBAR(L)))
123        G2(L)    = (SQRT(3.0)*W0(L)*0.5)*(1.0-COSBAR(L))
124        G3(L)    = 0.5*(1.0-SQRT(3.0)*COSBAR(L)*UBAR0)
125
126
127c     this is Quadrature
128c     but the scaling is Eddington?
129
130        LAMDA(L) = SQRT(G1(L)**2 - G2(L)**2)
131        GAMA(L)  = (G1(L)-LAMDA(L))/G2(L)
132      END DO
133
134
135      DO L=1,L_NLAYRAD
136        G4    = 1.0-G3(L)
137        DENOM = LAMDA(L)**2 - 1./UBAR0**2
138 
139C       THERE IS A POTENTIAL PROBLEM HERE IF W0=0 AND UBARV=UBAR0
140C       THEN DENOM WILL VANISH. THIS ONLY HAPPENS PHYSICALLY WHEN
141C       THE SCATTERING GOES TO ZERO
142C       PREVENT THIS WITH AN IF STATEMENT
143
144        IF ( DENOM .EQ. 0.) THEN
145          DENOM=1.E-10
146        END IF
147
148
149        AM = F0PI*W0(L)*(G4   *(G1(L)+1./UBAR0) +G2(L)*G3(L) )/DENOM
150        AP = F0PI*W0(L)*(G3(L)*(G1(L)-1./UBAR0) +G2(L)*G4    )/DENOM
151
152C       CPM1 AND CMM1 ARE THE CPLUS AND CMINUS TERMS EVALUATED
153C       AT THE TOP OF THE LAYER, THAT IS LOWER   OPTICAL DEPTH TAU(L)
154 
155        CPM1(L) = AP*EXP(-TAU(L)/UBAR0)
156        CMM1(L) = AM*EXP(-TAU(L)/UBAR0)
157
158C       CP AND CM ARE THE CPLUS AND CMINUS TERMS EVALUATED AT THE
159C       BOTTOM OF THE LAYER.  THAT IS AT HIGHER OPTICAL DEPTH TAU(L+1)
160
161        CP(L) = AP*EXP(-TAU(L+1)/UBAR0)
162        CM(L) = AM*EXP(-TAU(L+1)/UBAR0)
163
164      END DO
165
166
167 
168C     NOW CALCULATE THE EXPONENTIAL TERMS NEEDED
169C     FOR THE TRIDIAGONAL ROTATED LAYERED METHOD
170
171      DO L=1,L_NLAYRAD
172        EXPTRM(L) = MIN(TAUMAX,LAMDA(L)*DTAU(L))  ! CLIPPED EXPONENTIAL
173        EP = EXP(EXPTRM(L))
174
175        EM        = 1.0/EP
176        E1(L)     = EP+GAMA(L)*EM
177        E2(L)     = EP-GAMA(L)*EM
178        E3(L)     = GAMA(L)*EP+EM
179        E4(L)     = GAMA(L)*EP-EM
180      END DO
181
182      CALL DSOLVER(NAYER,GAMA,CP,CM,CPM1,CMM1,E1,E2,E3,E4,BTOP,
183     *             BSURF,RSF,XK1,XK2)
184
185C     NOW WE CALCULATE THE FLUXES AT THE MIDPOINTS OF THE LAYERS.
186 
187      DO L=1,L_NLAYRAD-1
188        EXPTRM(L) = MIN(TAUMAX,LAMDA(L)*(TAUCUM(2*L+1)-TAUCUM(2*L)))
189 
190        EP = EXP(EXPTRM(L))
191
192        EM    = 1.0/EP
193        G4    = 1.0-G3(L)
194        DENOM = LAMDA(L)**2 - 1./UBAR0**2
195
196C       THERE IS A POTENTIAL PROBLEM HERE IF W0=0 AND UBARV=UBAR0
197C       THEN DENOM WILL VANISH. THIS ONLY HAPPENS PHYSICALLY WHEN
198C       THE SCATTERING GOES TO ZERO
199C       PREVENT THIS WITH A IF STATEMENT
200
201
202        IF ( DENOM .EQ. 0.) THEN
203          DENOM=1.E-10
204        END IF
205
206        AM = F0PI*W0(L)*(G4   *(G1(L)+1./UBAR0) +G2(L)*G3(L) )/DENOM
207        AP = F0PI*W0(L)*(G3(L)*(G1(L)-1./UBAR0) +G2(L)*G4    )/DENOM
208
209C       CPMID AND CMMID  ARE THE CPLUS AND CMINUS TERMS EVALUATED
210C       AT THE MIDDLE OF THE LAYER.
211
212        TAUMID   = TAUCUM(2*L+1)
213
214        CPMID = AP*EXP(-TAUMID/UBAR0)
215        CMMID = AM*EXP(-TAUMID/UBAR0)
216
217        FMIDP(L) = XK1(L)*EP + GAMA(L)*XK2(L)*EM + CPMID
218        FMIDM(L) = XK1(L)*EP*GAMA(L) + XK2(L)*EM + CMMID
219 
220C       ADD THE DIRECT FLUX TO THE DOWNWELLING TERM
221
222        FMIDM(L)= FMIDM(L)+UBAR0*F0PI*EXP(-MIN(TAUMID,TAUMAX)/UBAR0)
223   
224      END DO
225 
226C     FLUX AT THE Ptop layer
227
228      EP    = 1.0
229      EM    = 1.0
230      G4    = 1.0-G3(1)
231      DENOM = LAMDA(1)**2 - 1./UBAR0**2
232
233C     THERE IS A POTENTIAL PROBLEM HERE IF W0=0 AND UBARV=UBAR0
234C     THEN DENOM WILL VANISH. THIS ONLY HAPPENS PHYSICALLY WHEN
235C     THE SCATTERING GOES TO ZERO
236C     PREVENT THIS WITH A IF STATEMENT
237
238      IF ( DENOM .EQ. 0.) THEN
239        DENOM=1.E-10
240      END IF
241
242      AM = F0PI*W0(1)*(G4   *(G1(1)+1./UBAR0) +G2(1)*G3(1) )/DENOM
243      AP = F0PI*W0(1)*(G3(1)*(G1(1)-1./UBAR0) +G2(1)*G4    )/DENOM
244
245C     CPMID AND CMMID  ARE THE CPLUS AND CMINUS TERMS EVALUATED
246C     AT THE MIDDLE OF THE LAYER.
247
248      CPMID  = AP
249      CMMID  = AM
250
251      FLUXUP = XK1(1)*EP + GAMA(1)*XK2(1)*EM + CPMID
252      FLUXDN = XK1(1)*EP*GAMA(1) + XK2(1)*EM + CMMID
253
254C     ADD THE DIRECT FLUX TO THE DOWNWELLING TERM
255
256      fluxdn = fluxdn+UBAR0*F0PI*EXP(-MIN(TAUCUM(1),TAUMAX)/UBAR0)
257 
258C     This is for the "special" bottom layer, where we take
259C     DTAU instead of DTAU/2.
260
261      L     = L_NLAYRAD
262      EXPTRM(L) = MIN(TAUMAX,LAMDA(L)*(TAUCUM(L_LEVELS)-
263     *                                 TAUCUM(L_LEVELS-1)))
264
265      EP    = EXP(EXPTRM(L))
266      EM    = 1.0/EP
267      G4    = 1.0-G3(L)
268      DENOM = LAMDA(L)**2 - 1./UBAR0**2
269
270
271
272C     THERE IS A POTENTIAL PROBLEM HERE IF W0=0 AND UBARV=UBAR0
273C     THEN DENOM WILL VANISH. THIS ONLY HAPPENS PHYSICALLY WHEN
274C     THE SCATTERING GOES TO ZERO
275C     PREVENT THIS WITH A IF STATEMENT
276
277
278      IF ( DENOM .EQ. 0.) THEN
279        DENOM=1.E-10
280      END IF
281
282      AM = F0PI*W0(L)*(G4   *(G1(L)+1./UBAR0) +G2(L)*G3(L) )/DENOM
283      AP = F0PI*W0(L)*(G3(L)*(G1(L)-1./UBAR0) +G2(L)*G4    )/DENOM
284
285C     CPMID AND CMMID  ARE THE CPLUS AND CMINUS TERMS EVALUATED
286C     AT THE MIDDLE OF THE LAYER.
287
288      TAUMID   = MIN(TAUCUM(L_LEVELS),TAUMAX)
289      CPMID    = AP*EXP(-MIN(TAUMID,TAUMAX)/UBAR0)
290      CMMID    = AM*EXP(-MIN(TAUMID,TAUMAX)/UBAR0)
291
292
293      FMIDP(L) = XK1(L)*EP + GAMA(L)*XK2(L)*EM + CPMID
294      FMIDM(L) = XK1(L)*EP*GAMA(L) + XK2(L)*EM + CMMID
295
296C  Save the diffuse downward flux for TEMPGR calculations
297
298      DIFFV = FMIDM(L)
299
300
301C     ADD THE DIRECT FLUX TO THE DOWNWELLING TERM
302
303      FMIDM(L)= FMIDM(L)+UBAR0*F0PI*EXP(-MIN(TAUMID,TAUMAX)/UBAR0)
304
305
306
307
308      RETURN
309
310
311      END
Note: See TracBrowser for help on using the repository browser.