source: trunk/LMDZ.PLUTO.old/libf/phypluto/gfluxv.F_saved @ 3436

Last change on this file since 3436 was 3175, checked in by emillour, 11 months ago

Pluto PCM:
Add the old Pluto LMDZ for reference (required prior step to making
an LMDZ.PLUTO using the same framework as the other physics packages).
TB+EM

File size: 9.5 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(L_NLAYRAD), ALPHA(L_NLAYRAD), XK1(L_NLAYRAD)
53      REAL*8 XK2(L_NLAYRAD),G1(L_NLAYRAD), G2(L_NLAYRAD)
54      REAL*8 G3(L_NLAYRAD), GAMA(L_NLAYRAD),CP(L_NLAYRAD),CM(L_NLAYRAD)
55      REAL*8 CPM1(L_NLAYRAD),CMM1(L_NLAYRAD), E1(L_NLAYRAD)
56      REAL*8 E2(L_NLAYRAD),E3(L_NLAYRAD),E4(L_NLAYRAD),EXPTRM(L_NLAYRAD)
57      REAL*8 FLUXUP, FLUXDN
58      REAL*8 FACTOR, TAUCUMIN(L_LEVELS), TAUCUM(L_LEVELS)
59
60      integer NAYER, L, K
61      real*8  ubar0, f0pi, rsf, btop, bsurf, g4, denom, am, ap
62      real*8  taumax, taumid, cpmid, cmmid
63      real*8  diffv
64
65C======================================================================C
66
67
68
69
70      NAYER  = L_NLAYRAD
71      TAUMAX = L_TAUMAX    !Default is 35.0
72     
73!  Delta-Eddington Scaling
74
75
76      FACTOR    = 1.0D0 - WDEL(1)*CDEL(1)**2
77
78      TAU(1)    = TDEL(1)*FACTOR
79      TAUCUM(1) = 0.0D0
80      TAUCUM(2) = TAUCUMIN(2)*FACTOR
81      TAUCUM(3) = TAUCUM(2) +(TAUCUMIN(3)-TAUCUMIN(2))*FACTOR
82
83      !Print*, 'TBbug wdel= ',WDEL
84      !Print*, 'TBbug cdel= ',CDEL
85
86      DO L=1,L_NLAYRAD-1
87        FACTOR      = 1.0D0 - WDEL(L)*CDEL(L)**2
88        W0(L)       = WDEL(L)*(1.0D0-CDEL(L)**2)/FACTOR
89        COSBAR(L)   = CDEL(L)/(1.0D0+CDEL(L))
90        DTAU(L)     = DTDEL(L)*FACTOR
91        TAU(L+1)    = TAU(L)+DTAU(L)
92        K           = 2*(L+1)
93        TAUCUM(K)   = TAU(L+1)
94        TAUCUM(K+1) = TAUCUM(K) + (TAUCUMIN(K+1)-TAUCUMIN(K))*FACTOR
95      END DO
96      !write(*,*),'gfluxv : cosbar=',COSBAR
97      !write(*,*),'gfluxv : w0, factor=',W0(1),FACTOR
98      !write(*,*),'gfluxv : wdel, cdel',WDEL(1),CDEL(1)
99
100
101!  Bottom layer
102
103      L             = L_NLAYRAD
104      FACTOR        = 1.0D0 - WDEL(L)*CDEL(L)**2
105      W0(L)         = WDEL(L)*(1.0D0-CDEL(L)**2)/FACTOR
106      COSBAR(L)     = CDEL(L)/(1.0D0+CDEL(L))
107      DTAU(L)       = DTDEL(L)*FACTOR
108      TAU(L+1)      = TAU(L)+DTAU(L)
109      TAUCUM(2*L+1) = TAU(L+1)
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
118        ALPHA(L)=SQRT( (1.0-W0(L))/(1.0-W0(L)*COSBAR(L)) )
119!        write(*,*),'gfluxv : alpha = ',ALPHA(L)
120
121
122C       SET OF CONSTANTS DETERMINED BY DOM
123
124        G1(L)    = (SQRT(3.0)*0.5)*(2.0- W0(L)*(1.0+COSBAR(L)))
125        G2(L)    = (SQRT(3.0)*W0(L)*0.5)*(1.0-COSBAR(L))
126        G3(L)    = 0.5*(1.0-SQRT(3.0)*COSBAR(L)*UBAR0)
127
128
129c     this is Quadrature
130c     but the scaling is Eddington?
131
132        LAMDA(L) = SQRT(G1(L)**2 - G2(L)**2)
133        GAMA(L)  = (G1(L)-LAMDA(L))/G2(L)
134      END DO
135
136      DO L=1,L_NLAYRAD
137        G4    = 1.0-G3(L)
138        DENOM = LAMDA(L)**2 - 1./UBAR0**2
139 
140C       THERE IS A POTENTIAL PROBLEM HERE IF W0=0 AND UBARV=UBAR0
141C       THEN DENOM WILL VANISH. THIS ONLY HAPPENS PHYSICALLY WHEN
142C       THE SCATTERING GOES TO ZERO
143C       PREVENT THIS WITH AN IF STATEMENT
144
145        IF ( DENOM .EQ. 0.) THEN
146          DENOM=1.E-10
147        END IF
148
149
150        AM = F0PI*W0(L)*(G4   *(G1(L)+1./UBAR0) +G2(L)*G3(L) )/DENOM
151        AP = F0PI*W0(L)*(G3(L)*(G1(L)-1./UBAR0) +G2(L)*G4    )/DENOM
152
153C       CPM1 AND CMM1 ARE THE CPLUS AND CMINUS TERMS EVALUATED
154C       AT THE TOP OF THE LAYER, THAT IS LOWER   OPTICAL DEPTH TAU(L)
155 
156        CPM1(L) = AP*EXP(-TAU(L)/UBAR0)
157        CMM1(L) = AM*EXP(-TAU(L)/UBAR0)
158
159C       CP AND CM ARE THE CPLUS AND CMINUS TERMS EVALUATED AT THE
160C       BOTTOM OF THE LAYER.  THAT IS AT HIGHER OPTICAL DEPTH TAU(L+1)
161
162        CP(L) = AP*EXP(-TAU(L+1)/UBAR0)
163        CM(L) = AM*EXP(-TAU(L+1)/UBAR0)
164
165      END DO
166
167
168 
169C     NOW CALCULATE THE EXPONENTIAL TERMS NEEDED
170C     FOR THE TRIDIAGONAL ROTATED LAYERED METHOD
171
172      DO L=1,L_NLAYRAD
173        !print*, 'TBbug=',TAUMAX,LAMDA(L),DTAU(L)
174        EXPTRM(L) = MIN(TAUMAX,LAMDA(L)*DTAU(L))  ! CLIPPED EXPONENTIAL
175        EP = EXP(EXPTRM(L))
176
177        EM        = 1.0/EP
178        E1(L)     = EP+GAMA(L)*EM
179        E2(L)     = EP-GAMA(L)*EM
180        E3(L)     = GAMA(L)*EP+EM
181        E4(L)     = GAMA(L)*EP-EM
182      END DO
183
184      CALL DSOLVER(NAYER,GAMA,CP,CM,CPM1,CMM1,E1,E2,E3,E4,BTOP,
185     *             BSURF,RSF,XK1,XK2)
186
187C     NOW WE CALCULATE THE FLUXES AT THE MIDPOINTS OF THE LAYERS.
188 
189      DO L=1,L_NLAYRAD-1
190        EXPTRM(L) = MIN(TAUMAX,LAMDA(L)*(TAUCUM(2*L+1)-TAUCUM(2*L)))
191 
192        EP = EXP(EXPTRM(L))
193
194        EM    = 1.0/EP
195        G4    = 1.0-G3(L)
196        DENOM = LAMDA(L)**2 - 1./UBAR0**2
197
198C       THERE IS A POTENTIAL PROBLEM HERE IF W0=0 AND UBARV=UBAR0
199C       THEN DENOM WILL VANISH. THIS ONLY HAPPENS PHYSICALLY WHEN
200C       THE SCATTERING GOES TO ZERO
201C       PREVENT THIS WITH A IF STATEMENT
202
203
204        IF ( DENOM .EQ. 0.) THEN
205          DENOM=1.E-10
206        END IF
207
208        AM = F0PI*W0(L)*(G4   *(G1(L)+1./UBAR0) +G2(L)*G3(L) )/DENOM
209        AP = F0PI*W0(L)*(G3(L)*(G1(L)-1./UBAR0) +G2(L)*G4    )/DENOM
210
211C       CPMID AND CMMID  ARE THE CPLUS AND CMINUS TERMS EVALUATED
212C       AT THE MIDDLE OF THE LAYER.
213
214        TAUMID   = TAUCUM(2*L+1)
215
216        CPMID = AP*EXP(-TAUMID/UBAR0)
217        CMMID = AM*EXP(-TAUMID/UBAR0)
218
219        FMIDP(L) = XK1(L)*EP + GAMA(L)*XK2(L)*EM + CPMID
220        FMIDM(L) = XK1(L)*EP*GAMA(L) + XK2(L)*EM + CMMID
221 
222C       ADD THE DIRECT FLUX TO THE DOWNWELLING TERM
223
224        FMIDM(L)= FMIDM(L)+UBAR0*F0PI*EXP(-MIN(TAUMID,TAUMAX)/UBAR0)
225   
226      END DO
227 
228C     FLUX AT THE Ptop layer
229
230      EP    = 1.0
231      EM    = 1.0
232      G4    = 1.0-G3(1)
233      DENOM = LAMDA(1)**2 - 1./UBAR0**2
234
235C     THERE IS A POTENTIAL PROBLEM HERE IF W0=0 AND UBARV=UBAR0
236C     THEN DENOM WILL VANISH. THIS ONLY HAPPENS PHYSICALLY WHEN
237C     THE SCATTERING GOES TO ZERO
238C     PREVENT THIS WITH A IF STATEMENT
239
240      IF ( DENOM .EQ. 0.) THEN
241        DENOM=1.E-10
242      END IF
243
244      AM = F0PI*W0(1)*(G4   *(G1(1)+1./UBAR0) +G2(1)*G3(1) )/DENOM
245      AP = F0PI*W0(1)*(G3(1)*(G1(1)-1./UBAR0) +G2(1)*G4    )/DENOM
246
247C     CPMID AND CMMID  ARE THE CPLUS AND CMINUS TERMS EVALUATED
248C     AT THE MIDDLE OF THE LAYER.
249
250      CPMID  = AP
251      CMMID  = AM
252
253      FLUXUP = XK1(1)*EP + GAMA(1)*XK2(1)*EM + CPMID
254      FLUXDN = XK1(1)*EP*GAMA(1) + XK2(1)*EM + CMMID
255
256C     ADD THE DIRECT FLUX TO THE DOWNWELLING TERM
257
258      fluxdn = fluxdn+UBAR0*F0PI*EXP(-MIN(TAUCUM(1),TAUMAX)/UBAR0)
259 
260C     This is for the "special" bottom layer, where we take
261C     DTAU instead of DTAU/2.
262
263      L     = L_NLAYRAD
264      EXPTRM(L) = MIN(TAUMAX,LAMDA(L)*(TAUCUM(L_LEVELS)-
265     *                                 TAUCUM(L_LEVELS-1)))
266
267      EP    = EXP(EXPTRM(L))
268      EM    = 1.0/EP
269      G4    = 1.0-G3(L)
270      DENOM = LAMDA(L)**2 - 1./UBAR0**2
271
272
273
274C     THERE IS A POTENTIAL PROBLEM HERE IF W0=0 AND UBARV=UBAR0
275C     THEN DENOM WILL VANISH. THIS ONLY HAPPENS PHYSICALLY WHEN
276C     THE SCATTERING GOES TO ZERO
277C     PREVENT THIS WITH A IF STATEMENT
278
279
280      IF ( DENOM .EQ. 0.) THEN
281        DENOM=1.E-10
282      END IF
283
284      AM = F0PI*W0(L)*(G4   *(G1(L)+1./UBAR0) +G2(L)*G3(L) )/DENOM
285      AP = F0PI*W0(L)*(G3(L)*(G1(L)-1./UBAR0) +G2(L)*G4    )/DENOM
286
287C     CPMID AND CMMID  ARE THE CPLUS AND CMINUS TERMS EVALUATED
288C     AT THE MIDDLE OF THE LAYER.
289
290      TAUMID   = MIN(TAUCUM(L_LEVELS),TAUMAX)
291      CPMID    = AP*EXP(-MIN(TAUMID,TAUMAX)/UBAR0)
292      CMMID    = AM*EXP(-MIN(TAUMID,TAUMAX)/UBAR0)
293
294
295      FMIDP(L) = XK1(L)*EP + GAMA(L)*XK2(L)*EM + CPMID
296      FMIDM(L) = XK1(L)*EP*GAMA(L) + XK2(L)*EM + CMMID
297
298C  Save the diffuse downward flux for TEMPGR calculations
299
300      DIFFV = FMIDM(L)
301
302
303C     ADD THE DIRECT FLUX TO THE DOWNWELLING TERM
304
305      FMIDM(L)= FMIDM(L)+UBAR0*F0PI*EXP(-MIN(TAUMID,TAUMAX)/UBAR0)
306
307
308
309
310      RETURN
311
312
313      END
Note: See TracBrowser for help on using the repository browser.