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

Last change on this file since 220 was 135, checked in by aslmd, 14 years ago

CHANGEMENT ARBORESCENCE ETAPE 2 -- NON COMPLET

File size: 4.8 KB
Line 
1      SUBROUTINE SFLUXV(DTAUV,TAUV,TAUCUMV,RSFV,DWNV,WBARV,COSBV,
2     *                  UBAR0,STEL,GWEIGHT,NFLUXTOPV,NFLUXTOPV_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 GWEIGHT(L_NGAUSS)
22
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
30      real*8 taugsurf(L_NSPECTV,L_NGAUSS-1), fzero
31
32C======================================================================C
33
34      TAUMAX = L_TAUMAX
35
36C     ZERO THE NET FLUXES
37
38      NFLUXTOPV = 0.0
39
40
41      DO L=1,L_NLAYRAD
42        FMNETV(L)  = 0.0
43        FLUXUPV(L) = 0.0
44        FLUXDNV(L) = 0.0
45      END DO
46
47      DIFFVT = 0.0
48
49C     WE NOW ENTER A MAJOR LOOP OVER SPECTRAL INTERVALS IN THE VISIBLE
50C     TO CALCULATE THE NET FLUX IN EACH SPECTRAL INTERVAL
51
52      DO 500 NW=1,L_NSPECTV
53     
54        F0PI = STEL(NW)
55
56
57        FZERO = FZEROV(NW)
58        IF(FZERO.ge.0.99) goto 40
59        DO NG=1,L_NGAUSS-1
60
61          if(TAUGSURF(NW,NG) .lt. TLIMIT) then
62
63            fzero = fzero + (1.0-FZEROV(NW))*GWEIGHT(NG)
64
65            goto 30
66          end if
67
68C         SET UP THE UPPER AND LOWER BOUNDARY CONDITIONS ON THE VISIBLE
69
70          BTOP = 0.0
71
72C         LOOP OVER THE NTERMS BEGINNING HERE
73 
74          ETERM = MIN(TAUV(L_NLEVRAD,NW,NG),TAUMAX)
75          BSURF = RSFV*UBAR0*STEL(NW)*EXP(-ETERM/UBAR0)
76
77
78C         WE CAN NOW SOLVE FOR THE COEFFICIENTS OF THE TWO STREAM
79C         CALL A SUBROUTINE THAT SOLVES  FOR THE FLUX TERMS
80C         WITHIN EACH INTERVAL AT THE MIDPOINT WAVENUMBER
81C
82C         FUW AND FDW ARE WORKING FLUX ARRAYS THAT WILL BE USED TO
83C         RETURN FLUXES FOR A GIVEN NT
84
85
86
87          CALL GFLUXV(DTAUV(1,NW,NG),TAUV(1,NW,NG),TAUCUMV(1,NW,NG),
88     *                WBARV(1,NW,NG),COSBV(1,NW,NG),UBAR0,F0PI,RSFV,
89     *                BTOP,BSURF,FMUPV,FMDV,DIFFV,FLUXUP,FLUXDN)
90
91
92C         NOW CALCULATE THE CUMULATIVE VISIBLE NET FLUX
93
94          NFLUXTOPV = NFLUXTOPV+(FLUXUP-FLUXDN)*GWEIGHT(NG)*
95     *                          (1.0-FZEROV(NW))
96          DO L=1,L_NLAYRAD
97            FMNETV(L)=FMNETV(L)+( FMUPV(L)-FMDV(L) )*
98     *                           GWEIGHT(NG)*(1.0-FZEROV(NW))
99            FLUXUPV(L) = FLUXUPV(L) + FMUPV(L)*GWEIGHT(NG)*
100     *                   (1.0-FZEROV(NW))
101            FLUXDNV(L) = FLUXDNV(L) + FMDV(L)*GWEIGHT(NG)*
102     *                   (1.0-FZEROV(NW))
103          END DO
104
105c         and same thing by spectral band... (RDW)
106          NFLUXTOPV_nu(NW) = NFLUXTOPV_nu(NW)
107     *      +(FLUXUP-FLUXDN)*GWEIGHT(NG)*
108     *                          (1.0-FZEROV(NW))
109
110C         THE DIFFUSE COMPONENT OF THE DOWNWARD STELLAR FLUX
111
112          DIFFVT = DIFFVT + DIFFV*GWEIGHT(NG)*(1.0-FZEROV(NW))
113
114   30     CONTINUE
115
116        END DO   ! the Gauss loop
117
118   40   continue
119C       Special 17th Gauss point
120
121        NG = L_NGAUSS
122
123C       SET UP THE UPPER AND LOWER BOUNDARY CONDITIONS ON THE VISIBLE
124 
125        BTOP = 0.0
126
127C       LOOP OVER THE NTERMS BEGINNING HERE
128 
129        ETERM = MIN(TAUV(L_NLEVRAD,NW,NG),TAUMAX)
130        BSURF = RSFV*UBAR0*STEL(NW)*EXP(-ETERM/UBAR0)
131
132
133C       WE CAN NOW SOLVE FOR THE COEFFICIENTS OF THE TWO STREAM
134C       CALL A SUBROUTINE THAT SOLVES  FOR THE FLUX TERMS
135C       WITHIN EACH INTERVAL AT THE MIDPOINT WAVENUMBER
136C
137C       FUW AND FDW ARE WORKING FLUX ARRAYS THAT WILL BE USED TO
138C       RETURN FLUXES FOR A GIVEN NT
139
140        CALL GFLUXV(DTAUV(1,NW,NG),TAUV(1,NW,NG),TAUCUMV(1,NW,NG),
141     *              WBARV(1,NW,NG),COSBV(1,NW,NG),UBAR0,F0PI,RSFV,
142     *              BTOP,BSURF,FMUPV,FMDV,DIFFV,FLUXUP,FLUXDN)
143
144
145C       NOW CALCULATE THE CUMULATIVE VISIBLE NET FLUX
146
147
148        !print*,'fmdv',fmdv
149        !print*,'fzero',fzero
150
151
152        NFLUXTOPV = NFLUXTOPV+(FLUXUP-FLUXDN)*FZERO
153        DO L=1,L_NLAYRAD
154          FMNETV(L)=FMNETV(L)+( FMUPV(L)-FMDV(L) )*FZERO
155          FLUXUPV(L) = FLUXUPV(L) + FMUPV(L)*FZERO
156          FLUXDNV(L) = FLUXDNV(L) + FMDV(L)*FZERO
157        END DO
158
159c         and same thing by spectral band... (RDW)
160          NFLUXTOPV_nu(NW) = NFLUXTOPV_nu(NW)
161     *      +(FLUXUP-FLUXDN)*FZERO
162
163
164C       THE DIFFUSE COMPONENT OF THE DOWNWARD STELLAR FLUX
165
166        DIFFVT = DIFFVT + DIFFV*FZERO
167
168
169  500 CONTINUE
170
171C     *** END OF MAJOR SPECTRAL INTERVAL LOOP IN THE VISIBLE*****
172
173
174      RETURN
175      END
Note: See TracBrowser for help on using the repository browser.