source: trunk/LMDZ.PLUTO/libf/phypluto/sfluxi_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: 7.5 KB
Line 
1      module sfluxi_PLUTO_mod
2
3      implicit none
4
5      contains
6
7      SUBROUTINE SFLUXI_PLUTO(PLEV,TLEV,DTAUI,TAUCUMI,UBARI,RSFI,WNOI,
8     *                  DWNI,COSBI,WBARI,NFLUXTOPI,NFLUXTOPI_nu,
9     *                  FMNETI,fmneti_nu,fluxupi,fluxdni,fluxupi_nu,
10     *                  FZEROI,TAUGSURF)
11
12      use radinc_h, only: NTfac, NTstart, L_LEVELS, L_NSPECTI, L_NGAUSS
13      use radinc_h, only: L_NLAYRAD, L_NLEVRAD
14      use radcommon_h, only: planckir, tlimit,sigma, gweight
15      use comcstfi_mod, only: pi
16      !use gfluxi_old_mod, only: gfluxi_old
17      use gfluxi_mod, only: gfluxi
18
19
20      implicit none
21
22      integer NLEVRAD, L, NW, NG, NTS, NTT
23
24      real*8 TLEV(L_LEVELS), PLEV(L_LEVELS)
25      real*8 TAUCUMI(L_LEVELS,L_NSPECTI,L_NGAUSS)
26      real*8 FMNETI(L_NLAYRAD)
27      real*8 FMNETI_NU(L_NLAYRAD,L_NSPECTI)
28      real*8 WNOI(L_NSPECTI), DWNI(L_NSPECTI)
29      real*8 DTAUI(L_NLAYRAD,L_NSPECTI,L_NGAUSS)
30      real*8 FMUPI(L_NLEVRAD), FMDI(L_NLEVRAD)
31      real*8 COSBI(L_NLAYRAD,L_NSPECTI,L_NGAUSS)
32      real*8 WBARI(L_NLAYRAD,L_NSPECTI,L_NGAUSS)
33      real*8 NFLUXTOPI
34      real*8 NFLUXTOPI_nu(L_NSPECTI)
35      real*8 fluxupi_nu(L_NLAYRAD,L_NSPECTI)
36      real*8 FTOPUP
37
38      real*8 UBARI, RSFI, TSURF, BSURF, TTOP, BTOP, TAUTOP
39      real*8 PLANCK, PLTOP
40      real*8 fluxupi(L_NLAYRAD), fluxdni(L_NLAYRAD)
41      real*8 FZEROI(L_NSPECTI)
42      real*8 taugsurf(L_NSPECTI,L_NGAUSS-1), fzero
43
44      real*8 BSURFtest ! by RW for test
45
46      real*8 fup_tmp(L_NSPECTI),fdn_tmp(L_NSPECTI)
47      real*8 XX,YY   ! calcul intermediate
48
49
50C======================================================================C
51
52      NLEVRAD = L_NLEVRAD
53
54
55C     ZERO THE NET FLUXES
56
57      NFLUXTOPI = 0.0
58      DO NW=1,L_NSPECTI
59        NFLUXTOPI_nu(NW) = 0.0
60        DO L=1,L_NLAYRAD
61           FLUXUPI_nu(L,NW) = 0.0
62           FMNETI_nu(L,NW)  = 0.0
63
64              fup_tmp(nw)=0.0
65              fdn_tmp(nw)=0.0
66
67        END DO
68      END DO
69
70      DO L=1,L_NLAYRAD
71        FMNETI(L)  = 0.0
72        FLUXUPI(L) = 0.0
73        FLUXDNI(L) = 0.0
74      END DO
75
76C     WE NOW ENTER A MAJOR LOOP OVER SPECTRAL INTERVALS IN THE INFRARED
77C     TO CALCULATE THE NET FLUX IN EACH SPECTRAL INTERVAL
78
79      TTOP  = TLEV(2)
80      TSURF = TLEV(L_LEVELS)
81      !PRINT*, 'TB18 NTstart: ',NTstart,TSURF
82      NTS   = int(TSURF*10.0D0)-NTstart + 1
83      !PRINT*, 'TB18 NTS: ',NTS
84      !PRINT*, 'TB18 TLEV sfluxi: ',TLEV
85      NTT   = int(TTOP *10.0D0)-NTstart +1
86      !PRINT*, 'TB18 NTT: ',NTT
87
88! if temperatures superior to 50K
89!      NTS   = TSURF*10.0D0-499
90!      NTT   = TTOP *10.0D0-499
91
92! analyse
93c      write(*,*)'TTOP',TTOP
94c      write(*,*)'TSURF',TSURF
95c      write(*,*)'NTS',NTS
96c      write(*,*)'NTT',NTT
97c     DO L=1,L_LEVELS
98c         write(*,*)'TLEV',TLEV
99c      ENDDO
100      BSURFtest=0.0
101
102      DO 501  NW=1,L_NSPECTI
103
104C       SURFACE EMISSIONS - INDEPENDENT OF GAUSS POINTS
105        BSURF = (1.-RSFI)*PLANCKIR(NW,NTS) ! interpolate for accuracy??
106        PLTOP = PLANCKIR(NW,NTT)
107
108        !BSURFtest=BSURFtest+BSURF*DWNI(NW)
109        !if(NW.eq.L_NSPECTI)then
110        !     print*,'eps*sigma*T^4',5.67e-8*(1.-RSFI)*TSURF**4
111        !     print*,'BSURF in sfluxi=',pi*BSURFtest
112        !endif
113
114
115C  If FZEROI(NW) = 1, then the k-coefficients are zero - skip to the
116C  special Gauss point at the end.
117
118        FZERO = FZEROI(NW)
119        IF(FZERO.ge.0.99) goto 40
120
121        DO NG=1,L_NGAUSS-1
122
123          if(TAUGSURF(NW,NG).lt. TLIMIT) then
124            fzero = fzero + (1.0-FZEROI(NW))*GWEIGHT(NG)
125            goto 30
126          end if
127
128C         SET UP THE UPPER AND LOWER BOUNDARY CONDITIONS ON THE IR
129C         CALCULATE THE DOWNWELLING RADIATION AT THE TOP OF THE MODEL
130C         OR THE TOP LAYER WILL COOL TO SPACE UNPHYSICALLY
131
132          TAUTOP = DTAUI(1,NW,NG)*PLEV(2)/(PLEV(4)-PLEV(2))
133          BTOP   = (1.0-EXP(-TAUTOP/UBARI))*PLTOP
134
135C         WE CAN NOW SOLVE FOR THE COEFFICIENTS OF THE TWO STREAM
136C         CALL A SUBROUTINE THAT SOLVES  FOR THE FLUX TERMS
137C         WITHIN EACH INTERVAL AT THE MIDPOINT WAVENUMBER
138
139          CALL GFLUXI(NLEVRAD,TLEV,NW,DWNI(NW),DTAUI(1,NW,NG),
140     *                TAUCUMI(1,NW,NG),
141     *                WBARI(1,NW,NG),COSBI(1,NW,NG),UBARI,RSFI,BTOP,
142     *                BSURF,FTOPUP,FMUPI,FMDI)
143
144
145C         NOW CALCULATE THE CUMULATIVE IR NET FLUX
146          XX= FTOPUP*DWNI(NW)*GWEIGHT(NG)*(1.0-FZEROI(NW))
147          NFLUXTOPI =        NFLUXTOPI+ XX
148          NFLUXTOPI_nu(NW) = NFLUXTOPI_nu(NW) + XX !same by spectral band.
149
150
151          DO L=1,L_NLEVRAD-1
152
153C           CORRECT FOR THE WAVENUMBER INTERVALS
154            YY = DWNI(NW)*GWEIGHT(NG)*(1.0-FZEROI(NW))
155
156            FMNETI(L)  = FMNETI(L)+(FMUPI(L)-FMDI(L))* YY
157            FMNETI_nu(L,NW)  = FMNETI_nu(L,NW)+(FMUPI(L)-FMDI(L))* YY !same by spectral band
158            FLUXDNI(L) = FLUXDNI(L) + FMDI(L)* YY
159
160            FLUXUPI(L) = FLUXUPI(L) +  FMUPI(L)* YY
161            FLUXUPI_nu(L,NW) = FLUXUPI_nu(L,NW) +  FMUPI(L)* YY  !same by spectral band.
162          END DO
163
164         !fup_tmp(nw)=fup_tmp(nw)+FMUPI(L_NLEVRAD-1)*DWNI(NW)*GWEIGHT(NG)
165         !fdn_tmp(nw)=fdn_tmp(nw)+FMDI(L_NLEVRAD-1)*DWNI(NW)*GWEIGHT(NG)
166         !fup_tmp(nw)=fup_tmp(nw)+FMUPI(1)*DWNI(NW)*GWEIGHT(NG)
167         !fdn_tmp(nw)=fdn_tmp(nw)+FMDI(1)*DWNI(NW)*GWEIGHT(NG)
168
169   30     CONTINUE
170
171       END DO       !End NGAUSS LOOP
172
173           ! print*,'-----------------------------------'
174            !print*,'FMDI(',nw,')=',FMDI(L_NLEVRAD-1)
175            !print*,'FMUPI(',nw,')=',FMUPI(L_NLEVRAD-1)
176            !print*,'DWNI(',nw,')=',DWNI(nw)
177           ! print*,'-----------------------------------'
178
179   40  CONTINUE
180
181C      SPECIAL 17th Gauss point
182
183    !   print*,'fzero for ng=17',fzero
184
185
186       NG     = L_NGAUSS
187
188       TAUTOP = DTAUI(1,NW,NG)*PLEV(2)/(PLEV(4)-PLEV(2))
189       BTOP   = (1.0-EXP(-TAUTOP/UBARI))*PLTOP
190
191C      WE CAN NOW SOLVE FOR THE COEFFICIENTS OF THE TWO STREAM
192C      CALL A SUBROUTINE THAT SOLVES  FOR THE FLUX TERMS
193C      WITHIN EACH INTERVAL AT THE MIDPOINT WAVENUMBER
194
195
196       CALL GFLUXI(NLEVRAD,TLEV,NW,DWNI(NW),DTAUI(1,NW,NG),
197     *                TAUCUMI(1,NW,NG),
198     *                WBARI(1,NW,NG),COSBI(1,NW,NG),UBARI,RSFI,BTOP,
199     *                BSURF,FTOPUP,FMUPI,FMDI)
200
201C      NOW CALCULATE THE CUMULATIVE IR NET FLUX
202
203       NFLUXTOPI = NFLUXTOPI+FTOPUP*DWNI(NW)*FZERO
204       NFLUXTOPI_nu(NW) = NFLUXTOPI_nu(NW)+FTOPUP*DWNI(NW)*FZERO !same by spectral band.
205
206       DO L=1,L_NLEVRAD-1
207
208C        CORRECT FOR THE WAVENUMBER INTERVALS
209
210         FLUXDNI(L) = FLUXDNI(L) + FMDI(L)*DWNI(NW)*FZERO
211
212         XX = (FMUPI(L)-FMDI(L))*DWNI(NW)*FZERO
213         FMNETI(L)  = FMNETI(L)+ XX
214         FMNETI_nu(L,NW)  = FMNETI_nu(L,NW)+XX !same by spectral band.
215
216         XX=  FMUPI(L)*DWNI(NW)*FZERO
217         FLUXUPI(L) = FLUXUPI(L) + XX
218         FLUXUPI_nu(L,NW) = FLUXUPI_nu(L,NW) + XX !same by spectral band.
219
220       END DO
221
222       !     print*,'-----------------------------------'
223       !     print*,'nw=',nw
224       !     print*,'ng=',ng
225       !     print*,'FMDI=',FMDI(L_NLEVRAD-1)
226       !     print*,'FMUPI=',FMUPI(L_NLEVRAD-1)
227       !     print*,'-----------------------------------'
228
229  501 CONTINUE      !End Spectral Interval LOOP
230
231C *** END OF MAJOR SPECTRAL INTERVAL LOOP IN THE INFRARED****
232
233            !print*,'-----------------------------------'
234            !print*,'gweight=',gweight
235            !print*,'FLUXDNI=',FLUXDNI(L_NLEVRAD-1)
236            !print*,'FLUXUPI=',FLUXUPI(L_NLEVRAD-1)
237            !print*,'-----------------------------------'
238
239            !do nw=1,L_NSPECTI
240            !   print*,'fup_tmp(',nw,')=',fup_tmp(nw)
241            !   print*,'fdn_tmp(',nw,')=',fdn_tmp(nw)
242            !enddo
243
244
245      END SUBROUTINE SFLUXI_PLUTO
246
247      end module sfluxi_pluto_mod
Note: See TracBrowser for help on using the repository browser.