source: trunk/LMDZ.GENERIC/libf/phystd/sfluxv.F @ 1644

Last change on this file since 1644 was 1482, checked in by mturbet, 9 years ago

Implementation of the Spectral Albedo

File size: 5.5 KB
Line 
1      SUBROUTINE SFLUXV(DTAUV,TAUV,TAUCUMV,RSFV,DWNV,WBARV,COSBV,
2     *                  UBAR0,STEL,GWEIGHT,NFLUXTOPV,FLUXTOPVDN,
3     *                  NFLUXOUTV_nu,NFLUXGNDV_nu,
4     *                  FMNETV,FLUXUPV,FLUXDNV,FZEROV,taugsurf)
5
6      use radinc_h
7      use radcommon_h, only: tlimit
8
9      implicit none
10
11      real*8 FMNETV(L_NLAYRAD)
12      real*8 TAUCUMV(L_LEVELS,L_NSPECTV,L_NGAUSS)
13      real*8 TAUV(L_NLEVRAD,L_NSPECTV,L_NGAUSS)
14      real*8 DTAUV(L_NLAYRAD,L_NSPECTV,L_NGAUSS), DWNV(L_NSPECTV)
15      real*8 FMUPV(L_NLAYRAD), FMDV(L_NLAYRAD)
16      real*8 COSBV(L_NLAYRAD,L_NSPECTV,L_NGAUSS)
17      real*8 WBARV(L_NLAYRAD,L_NSPECTV,L_NGAUSS)
18      real*8 STEL(L_NSPECTV)
19      real*8 FLUXUPV(L_NLAYRAD), FLUXDNV(L_NLAYRAD)
20      real*8 NFLUXTOPV, FLUXUP, FLUXDN,FLUXTOPVDN
21      real*8 NFLUXOUTV_nu(L_NSPECTV)
22      real*8 NFLUXGNDV_nu(L_NSPECTV)
23      real*8 GWEIGHT(L_NGAUSS)
24
25      integer L, NG, NW, NG1,k
26      real*8 ubar0, f0pi, btop, bsurf, taumax, eterm
27      real*8 rsfv(L_NSPECTV) ! Spectral dependency added by MT2015.
28      real*8 FZEROV(L_NSPECTV)
29
30      real*8 DIFFV, DIFFVT
31      real*8 taugsurf(L_NSPECTV,L_NGAUSS-1), fzero
32
33C======================================================================C
34
35      TAUMAX = L_TAUMAX
36
37C     ZERO THE NET FLUXES
38
39      NFLUXTOPV = 0.0
40      FLUXTOPVDN = 0.0
41
42      DO NW=1,L_NSPECTV
43         NFLUXOUTV_nu(NW)=0.0
44         NFLUXGNDV_nu(NW)=0.0
45      END DO
46
47      DO L=1,L_NLAYRAD
48        FMNETV(L)  = 0.0
49        FLUXUPV(L) = 0.0
50        FLUXDNV(L) = 0.0
51      END DO
52
53      DIFFVT = 0.0
54
55C     WE NOW ENTER A MAJOR LOOP OVER SPECTRAL INTERVALS IN THE VISIBLE
56C     TO CALCULATE THE NET FLUX IN EACH SPECTRAL INTERVAL
57
58      DO 500 NW=1,L_NSPECTV
59     
60        F0PI = STEL(NW)
61
62        FZERO = FZEROV(NW)
63        IF(FZERO.ge.0.99) goto 40
64        DO NG=1,L_NGAUSS-1
65
66          if(TAUGSURF(NW,NG) .lt. TLIMIT) then
67
68            fzero = fzero + (1.0-FZEROV(NW))*GWEIGHT(NG)
69
70            goto 30
71          end if
72
73C         SET UP THE UPPER AND LOWER BOUNDARY CONDITIONS ON THE VISIBLE
74
75          BTOP  = 0.0
76          !BSURF = 0./0. ! why was this here?
77          BSURF = 0.
78C         LOOP OVER THE NTERMS BEGINNING HERE
79 
80
81!      FACTOR    = 1.0D0 - WDEL(1)*CDEL(1)**2
82!      TAU(1)    = TDEL(1)*FACTOR
83
84
85          ETERM = MIN(TAUV(L_NLEVRAD,NW,NG),TAUMAX)
86          BSURF = RSFV(NW)*UBAR0*STEL(NW)*EXP(-ETERM/UBAR0)
87
88C         WE CAN NOW SOLVE FOR THE COEFFICIENTS OF THE TWO STREAM
89C         CALL A SUBROUTINE THAT SOLVES  FOR THE FLUX TERMS
90C         WITHIN EACH INTERVAL AT THE MIDPOINT WAVENUMBER
91C
92C         FUW AND FDW ARE WORKING FLUX ARRAYS THAT WILL BE USED TO
93C         RETURN FLUXES FOR A GIVEN NT
94
95
96          CALL GFLUXV(DTAUV(1,NW,NG),TAUV(1,NW,NG),TAUCUMV(1,NW,NG),
97     *                WBARV(1,NW,NG),COSBV(1,NW,NG),UBAR0,F0PI,RSFV(NW),   
98     *                BTOP,BSURF,FMUPV,FMDV,DIFFV,FLUXUP,FLUXDN)
99
100C         NOW CALCULATE THE CUMULATIVE VISIBLE NET FLUX
101
102          NFLUXTOPV = NFLUXTOPV+(FLUXUP-FLUXDN)*GWEIGHT(NG)*
103     *                          (1.0-FZEROV(NW))
104          FLUXTOPVDN = FLUXTOPVDN+FLUXDN*GWEIGHT(NG)*
105     *                          (1.0-FZEROV(NW))
106          DO L=1,L_NLAYRAD
107            FMNETV(L)=FMNETV(L)+( FMUPV(L)-FMDV(L) )*
108     *                           GWEIGHT(NG)*(1.0-FZEROV(NW))
109            FLUXUPV(L) = FLUXUPV(L) + FMUPV(L)*GWEIGHT(NG)*
110     *                   (1.0-FZEROV(NW))
111            FLUXDNV(L) = FLUXDNV(L) + FMDV(L)*GWEIGHT(NG)*
112     *                   (1.0-FZEROV(NW))
113          END DO
114
115c     band-resolved flux leaving TOA (RDW)
116          NFLUXOUTV_nu(NW) = NFLUXOUTV_nu(NW)
117     *      +FLUXUP*GWEIGHT(NG)*(1.0-FZEROV(NW))
118
119c     band-resolved flux at ground (RDW)
120          NFLUXGNDV_nu(NW) = NFLUXGNDV_nu(NW)
121     *      +FMDV(L_NLAYRAD)*GWEIGHT(NG)*(1.0-FZEROV(NW))
122
123
124C         THE DIFFUSE COMPONENT OF THE DOWNWARD STELLAR FLUX
125
126          DIFFVT = DIFFVT + DIFFV*GWEIGHT(NG)*(1.0-FZEROV(NW))
127
128   30     CONTINUE
129
130        END DO   ! the Gauss loop
131
132   40   continue
133C       Special 17th Gauss point
134
135        NG = L_NGAUSS
136
137C       SET UP THE UPPER AND LOWER BOUNDARY CONDITIONS ON THE VISIBLE
138 
139        BTOP = 0.0
140
141C       LOOP OVER THE NTERMS BEGINNING HERE
142 
143        ETERM = MIN(TAUV(L_NLEVRAD,NW,NG),TAUMAX)
144        BSURF = RSFV(NW)*UBAR0*STEL(NW)*EXP(-ETERM/UBAR0)
145
146
147C       WE CAN NOW SOLVE FOR THE COEFFICIENTS OF THE TWO STREAM
148C       CALL A SUBROUTINE THAT SOLVES  FOR THE FLUX TERMS
149C       WITHIN EACH INTERVAL AT THE MIDPOINT WAVENUMBER
150C
151C       FUW AND FDW ARE WORKING FLUX ARRAYS THAT WILL BE USED TO
152C       RETURN FLUXES FOR A GIVEN NT
153
154        CALL GFLUXV(DTAUV(1,NW,NG),TAUV(1,NW,NG),TAUCUMV(1,NW,NG),
155     *              WBARV(1,NW,NG),COSBV(1,NW,NG),UBAR0,F0PI,RSFV(NW),
156     *              BTOP,BSURF,FMUPV,FMDV,DIFFV,FLUXUP,FLUXDN)
157
158
159C       NOW CALCULATE THE CUMULATIVE VISIBLE NET FLUX
160
161        NFLUXTOPV = NFLUXTOPV+(FLUXUP-FLUXDN)*FZERO
162        FLUXTOPVDN = FLUXTOPVDN+FLUXDN*FZERO
163        DO L=1,L_NLAYRAD
164          FMNETV(L)=FMNETV(L)+( FMUPV(L)-FMDV(L) )*FZERO
165          FLUXUPV(L) = FLUXUPV(L) + FMUPV(L)*FZERO
166          FLUXDNV(L) = FLUXDNV(L) + FMDV(L)*FZERO
167        END DO
168
169c     band-resolved flux leaving TOA (RDW)
170          NFLUXOUTV_nu(NW) = NFLUXOUTV_nu(NW)
171     *      +FLUXUP*FZERO
172
173c     band-resolved flux at ground (RDW)
174          NFLUXGNDV_nu(NW) = NFLUXGNDV_nu(NW)+FMDV(L_NLAYRAD)*FZERO
175
176
177C       THE DIFFUSE COMPONENT OF THE DOWNWARD STELLAR FLUX
178
179        DIFFVT = DIFFVT + DIFFV*FZERO
180
181
182  500 CONTINUE
183
184
185C     *** END OF MAJOR SPECTRAL INTERVAL LOOP IN THE VISIBLE*****
186
187
188      RETURN
189      END
Note: See TracBrowser for help on using the repository browser.