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

Last change on this file since 3573 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
RevLine 
[3184]1      module sfluxv_mod
2
3      implicit none
[3275]4
[3184]5      contains
[3275]6
[3184]7      SUBROUTINE SFLUXV(DTAUV,TAUV,TAUCUMV,RSFV,DWNV,WBARV,COSBV,
8     *                  UBAR0,STEL,NFLUXTOPV,FLUXTOPVDN,
[3275]9     *                  NFLUXOUTV_nu,NFLUXGNDV_nu,NFLUXTOPV_nu,
10     *                  FMNETV,FMNETV_NU,FLUXUPV,FLUXDNV,
11     *                  FZEROV,taugsurf)
[3184]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)
[3275]21      real*8 FMNETV_NU(L_NLAYRAD,L_NSPECTV)
[3184]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
[3275]31      real*8 NFLUXTOPV_nu(L_NSPECTV)
[3184]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
[3275]55         NFLUXTOPV_nu(nw)=0.0
56         DO L=1,L_NLAYRAD
57           FMNETV_NU(L,NW) = 0.0
58        END DO
[3184]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
[3275]73
[3184]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
[3275]94
[3184]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
[3275]105C
106C         FUW AND FDW ARE WORKING FLUX ARRAYS THAT WILL BE USED TO
[3184]107C         RETURN FLUXES FOR A GIVEN NT
108
109
110          CALL GFLUXV(DTAUV(1,NW,NG),TAUV(1,NW,NG),TAUCUMV(1,NW,NG),
[3275]111     *                WBARV(1,NW,NG),COSBV(1,NW,NG),UBAR0,F0PI,RSFV(NW),
[3184]112     *                BTOP,BSURF,FMUPV,FMDV,DIFFV,FLUXUP,FLUXDN)
113
[3275]114C         NOW CALCULATE THE CUMULATIVE VISIBLE NET FLUX
[3184]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))
[3275]123            FMNETV_NU(L,NW)=FMNETV_NU(L,NW)+( FMUPV(L)-FMDV(L) )*
124     *                           GWEIGHT(NG)*(1.0-FZEROV(NW))
[3184]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
[3275]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
[3184]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
[3275]149   30     CONTINUE
[3184]150
[3275]151        END DO   ! the Gauss loop
[3184]152
[3275]153   40   continue
[3184]154C       Special 17th Gauss point
155
156        NG = L_NGAUSS
157
158C       SET UP THE UPPER AND LOWER BOUNDARY CONDITIONS ON THE VISIBLE
[3275]159
[3184]160        BTOP = 0.0
161
162C       LOOP OVER THE NTERMS BEGINNING HERE
[3275]163
[3184]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
[3275]171C
172C       FUW AND FDW ARE WORKING FLUX ARRAYS THAT WILL BE USED TO
[3184]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
[3275]180C       NOW CALCULATE THE CUMULATIVE VISIBLE NET FLUX
[3184]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
[3275]186          FMNETV_NU(L,NW)=FMNETV_NU(L,NW)+( FMUPV(L)-FMDV(L) )*FZERO
[3184]187          FLUXUPV(L) = FLUXUPV(L) + FMUPV(L)*FZERO
188          FLUXDNV(L) = FLUXDNV(L) + FMDV(L)*FZERO
189        END DO
190
[3275]191c         and same thing by spectral band... (RDW)
192          NFLUXTOPV_nu(NW) = NFLUXTOPV_nu(NW)
193     *      +(FLUXUP-FLUXDN)*FZERO
194
[3184]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
[3275]217
Note: See TracBrowser for help on using the repository browser.