source: trunk/LMDZ.GENERIC/libf/phystd/gfluxi.F @ 135

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

CHANGEMENT ARBORESCENCE ETAPE 2 -- NON COMPLET

File size: 6.5 KB
Line 
1      SUBROUTINE GFLUXI(NLL,TLEV,NW,DW,DTAU,TAUCUM,W0,COSBAR,UBARI,
2     *                  RSF,BTOP,BSURF,FTOPUP,FMIDP,FMIDM)
3
4C  THIS SUBROUTINE TAKES THE OPTICAL CONSTANTS AND BOUNDARY CONDITIONS
5C  FOR THE INFRARED FLUX AT ONE WAVELENGTH AND SOLVES FOR THE FLUXES AT
6C  THE LEVELS. THIS VERSION IS SET UP TO WORK WITH LAYER OPTICAL DEPTHS
7C  MEASURED FROM THE TOP OF EACH LAYER.  THE TOP OF EACH LAYER HAS 
8C  OPTICAL DEPTH ZERO.  IN THIS SUB LEVEL N IS ABOVE LAYER N. THAT IS LAYER N
9C  HAS LEVEL N ON TOP AND LEVEL N+1 ON BOTTOM. OPTICAL DEPTH INCREASES
10C  FROM TOP TO BOTTOM. SEE C.P. MCKAY, TGM NOTES.
11C THE TRI-DIAGONAL MATRIX SOLVER IS DSOLVER AND IS DOUBLE PRECISION SO MANY
12C VARIABLES ARE PASSED AS SINGLE THEN BECOME DOUBLE IN DSOLVER
13C
14C NLL            = NUMBER OF LEVELS (NLAYERS + 1) MUST BE LESS THAT NL (101)
15C TLEV(L_LEVELS) = ARRAY OF TEMPERATURES AT GCM LEVELS
16C WAVEN          = WAVELENGTH FOR THE COMPUTATION
17C DW             = WAVENUMBER INTERVAL
18C DTAU(NLAYER)   = ARRAY OPTICAL DEPTH OF THE LAYERS
19C W0(NLEVEL)     = SINGLE SCATTERING ALBEDO
20C COSBAR(NLEVEL) = ASYMMETRY FACTORS, 0=ISOTROPIC
21C UBARI          = AVERAGE ANGLE, MUST BE EQUAL TO 0.5 IN IR
22C RSF            = SURFACE REFLECTANCE
23C BTOP           = UPPER BOUNDARY CONDITION ON IR INTENSITY (NOT FLUX)
24C BSURF          = SURFACE EMISSION = (1-RSFI)*PLANCK, INTENSITY (NOT FLUX)
25C FP(NLEVEL)     = UPWARD FLUX AT LEVELS
26C FM(NLEVEL)     = DOWNWARD FLUX AT LEVELS
27C FMIDP(NLAYER)  = UPWARD FLUX AT LAYER MIDPOINTS
28C FMIDM(NLAYER)  = DOWNWARD FLUX AT LAYER MIDPOINTS
29C
30C----------------------------------------------------------------------C
31
32      use radinc_h
33      use radcommon_h, only: planckir
34
35      implicit none
36
37#include "comcstfi.h"
38
39      INTEGER NLP
40      PARAMETER (NLP=101) ! MUST BE LARGER THAN NLEVEL
41
42      INTEGER NLL, NLAYER, L, NW, NT, NT2
43      REAL*8  TERM, CPMID, CMMID
44      REAL*8  PLANCK
45      REAL*8  EM,EP
46      REAL*8  COSBAR(L_NLAYRAD), W0(L_NLAYRAD), DTAU(L_NLAYRAD)
47      REAL*8  TAUCUM(L_LEVELS), DTAUK
48      REAL*8  TLEV(L_LEVELS)
49      REAL*8  WAVEN, DW, UBARI, RSF
50      REAL*8  BTOP, BSURF, FMIDP(L_NLAYRAD), FMIDM(L_NLAYRAD)
51      REAL*8  B0(NLP),B1(NLP),ALPHA(NLP),LAMDA(NLP),XK1(NLP),XK2(NLP)
52      REAL*8  GAMA(NLP),CP(NLP),CM(NLP),CPM1(NLP),CMM1(NLP),E1(NLP)
53      REAL*8  E2(NLP),E3(NLP),E4(NLP)
54
55      REAL*8  FTOPUP, FLUXUP, FLUXDN
56
57      real*8 :: TAUMAX = L_TAUMAX
58
59C======================================================================C
60 
61C     WE GO WITH THE HEMISPHERIC CONSTANT APPROACH IN THE INFRARED
62 
63
64      IF (NLL .GT. NLP) STOP 'PARAMETER NL TOO SMALL IN GFLUXV'
65
66      NLAYER = L_NLAYRAD
67
68      DO L=1,L_NLAYRAD-1
69        ALPHA(L) = SQRT( (1.0-W0(L))/(1.0-W0(L)*COSBAR(L)) )
70        LAMDA(L) = ALPHA(L)*(1.0-W0(L)*COSBAR(L))/UBARI
71
72        NT2   = TLEV(2*L+2)*10.0D0-499
73        NT    = TLEV(2*L)*10.0D0-499
74
75        B1(L) = (PLANCKIR(NW,NT2)-PLANCKIR(NW,NT))/DTAU(L)
76        B0(L) = PLANCKIR(NW,NT)
77      END DO
78
79C     Take care of special lower layer
80
81      L        = L_NLAYRAD
82      ALPHA(L) = SQRT( (1.0-W0(L))/(1.0-W0(L)*COSBAR(L)) )
83      LAMDA(L) = ALPHA(L)*(1.0-W0(L)*COSBAR(L))/UBARI
84
85      NT    = TLEV(2*L+1)*10.0D0-499
86      NT2   = TLEV(2*L)*10.0D0-499
87      B1(L) = (PLANCKIR(NW,NT)-PLANCKIR(NW,NT2))/DTAU(L)
88      B0(L) = PLANCKIR(NW,NT2)
89
90      DO L=1,L_NLAYRAD
91        GAMA(L) = (1.0-ALPHA(L))/(1.0+ALPHA(L))
92        TERM    = UBARI/(1.0-W0(L)*COSBAR(L))
93
94C       CP AND CM ARE THE CPLUS AND CMINUS TERMS EVALUATED AT THE
95C       BOTTOM OF THE LAYER.  THAT IS AT DTAU OPTICAL DEPTH
96
97        CP(L) = B0(L)+B1(L)*DTAU(L) +B1(L)*TERM
98        CM(L) = B0(L)+B1(L)*DTAU(L) -B1(L)*TERM
99
100C       CPM1 AND CMM1 ARE THE CPLUS AND CMINUS TERMS EVALUATED
101C       AT THE TOP OF THE LAYER, THAT IS ZERO OPTICAL DEPTH
102
103        CPM1(L) = B0(L)+B1(L)*TERM
104        CMM1(L) = B0(L)-B1(L)*TERM
105      END DO
106 
107C     NOW CALCULATE THE EXPONENTIAL TERMS NEEDED
108C     FOR THE TRIDIAGONAL ROTATED LAYERED METHOD
109C     WARNING IF DTAU(J) IS GREATER THAN ABOUT 35 (VAX)
110C     WE CLIP IT TO AVOID OVERFLOW.
111
112      DO L=1,L_NLAYRAD
113
114C       CLIP THE EXPONENTIAL HERE.
115
116        EP    = EXP( MIN((LAMDA(L)*DTAU(L)),TAUMAX))
117        EM    = 1.0/EP
118        E1(L) = EP+GAMA(L)*EM
119        E2(L) = EP-GAMA(L)*EM
120        E3(L) = GAMA(L)*EP+EM
121        E4(L) = GAMA(L)*EP-EM
122      END DO
123 
124c     B81=BTOP  ! RENAME BEFORE CALLING DSOLVER - used to be to set
125c     B82=BSURF ! them to real*8 - but now everything is real*8
126c     R81=RSF   ! so this may not be necessary
127
128C     Double precision tridiagonal solver
129
130      CALL DSOLVER(NLAYER,GAMA,CP,CM,CPM1,CMM1,E1,E2,E3,E4,BTOP,
131     *             BSURF,RSF,XK1,XK2)
132 
133
134C     NOW WE CALCULATE THE FLUXES AT THE MIDPOINTS OF THE LAYERS.
135 
136      DO L=1,L_NLAYRAD-1
137        DTAUK = TAUCUM(2*L+1)-TAUCUM(2*L)
138        EP    = EXP(MIN(LAMDA(L)*DTAUK,TAUMAX)) ! CLIPPED EXPONENTIAL
139        EM    = 1.0/EP
140        TERM  = UBARI/(1.-W0(L)*COSBAR(L))
141
142C       CP AND CM ARE THE CPLUS AND CMINUS TERMS EVALUATED AT THE
143C       BOTTOM OF THE LAYER.  THAT IS AT DTAU  OPTICAL DEPTH
144
145        CPMID    = B0(L)+B1(L)*DTAUK +B1(L)*TERM
146        CMMID    = B0(L)+B1(L)*DTAUK -B1(L)*TERM
147        FMIDP(L) = XK1(L)*EP + GAMA(L)*XK2(L)*EM + CPMID
148        FMIDM(L) = XK1(L)*EP*GAMA(L) + XK2(L)*EM + CMMID
149
150C       FOR FLUX WE INTEGRATE OVER THE HEMISPHERE TREATING INTENSITY CONSTANT
151
152        FMIDP(L) = FMIDP(L)*PI
153        FMIDM(L) = FMIDM(L)*PI
154      END DO
155 
156C     And now, for the special bottom layer
157
158      L    = L_NLAYRAD
159
160      EP   = EXP(MIN((LAMDA(L)*DTAU(L)),TAUMAX)) ! CLIPPED EXPONENTIAL
161      EM   = 1.0/EP
162      TERM = UBARI/(1.-W0(L)*COSBAR(L))
163
164C     CP AND CM ARE THE CPLUS AND CMINUS TERMS EVALUATED AT THE
165C     BOTTOM OF THE LAYER.  THAT IS AT DTAU  OPTICAL DEPTH
166
167      CPMID    = B0(L)+B1(L)*DTAU(L) +B1(L)*TERM
168      CMMID    = B0(L)+B1(L)*DTAU(L) -B1(L)*TERM
169      FMIDP(L) = XK1(L)*EP + GAMA(L)*XK2(L)*EM + CPMID
170      FMIDM(L) = XK1(L)*EP*GAMA(L) + XK2(L)*EM + CMMID
171 
172C     FOR FLUX WE INTEGRATE OVER THE HEMISPHERE TREATING INTENSITY CONSTANT
173
174      FMIDP(L) = FMIDP(L)*PI
175      FMIDM(L) = FMIDM(L)*PI
176
177C     FLUX AT THE PTOP LEVEL
178
179      EP   = 1.0
180      EM   = 1.0
181      TERM = UBARI/(1.0-W0(1)*COSBAR(1))
182
183C     CP AND CM ARE THE CPLUS AND CMINUS TERMS EVALUATED AT THE
184C     BOTTOM OF THE LAYER.  THAT IS AT DTAU  OPTICAL DEPTH
185
186      CPMID  = B0(1)+B1(1)*TERM
187      CMMID  = B0(1)-B1(1)*TERM
188
189      FLUXUP = XK1(1)*EP + GAMA(1)*XK2(1)*EM + CPMID
190      FLUXDN = XK1(1)*EP*GAMA(1) + XK2(1)*EM + CMMID
191 
192C     FOR FLUX WE INTEGRATE OVER THE HEMISPHERE TREATING INTENSITY CONSTANT
193
194      FTOPUP = (FLUXUP-FLUXDN)*PI
195
196
197      RETURN
198      END
Note: See TracBrowser for help on using the repository browser.