source: trunk/LMDZ.PLUTO/libf/phypluto/sfluxv.F @ 3586

Last change on this file since 3586 was 3275, checked in by afalco, 11 months ago

Pluto PCM:
Changed _vap to _gas;
Included surfprop.F90;
callcorrk includes methane
AF

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