source: trunk/LMDZ.PLUTO/libf/phypluto/sfluxv_pluto_mod.F @ 3392

Last change on this file since 3392 was 3390, checked in by tbertrand, 19 months ago

LMDZ.PLUTO
resolving some issues in the code for 3D runs
TB

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