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

Last change on this file since 293 was 253, checked in by emillour, 14 years ago

Generic GCM

  • Massive update to version 0.7

EM+RW

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