!copyright (C) 2001 MSC-RPN COMM %%%RPN???%%%
***S/R SUN7
*
#include "phy_macros_f.h"
SUBROUTINE SUN7 (FDOWN,FUP,HEAT,VOZO,OZOTOIT, 1,5
% DSIG,DSH,DSC,
% DZ,PSOL,TM,WV,aSIG,
% QOF,CNEB,TAUAE,RMUO,ALBS,
% LMX,KMX,KMXP,NPTS,MM,
% RJ,RK,UD,REFZ,TR,
% UM,RL,RUEF,C1I,RMUE,RAY,TRA,TAUAZ,PIZAZ,
% CGAZ,OMEGAT,CG,TAU,RE1,RE2,TR1,TE2,S,G,R23,
% REF,RMU,R1,W,TO1,GG,RNEB,RMUZ,WORKX,KK,
% reduc,
% flss, srd, afldsig, aflsig, R0R,
% flkmx, flkmxp, RADFIX, RADFLTR)
#include "impnone.cdk"
*
external intchamps
INTEGER I,J,K,L,N
INTEGER KI,IK,K0,K1,JJ,MM
INTEGER KP1,LP1,KM1,ILG,LMX,JJP,KKI,N2J,IAE
INTEGER IABS,KMX,KMXP,KREF,NPTS,KFIN,LIND,KMXM1,IFIN,KKP4
integer flkmx, flkmxp
REAL CONS,CCAR,EXT,RE,WH2O
REAL DSHH,DSCC,XNU,VA,ROVLAP,XMAXLAP,CNEB1,CNEB2,FACOR,XMUE
REAL PT,TZ,XMPT,BPT,ZC,RE11,RKI,EE
REAL A,AA,D,Y,R,R0R
REAL REC_Y,REC_101325,REC_VV,REC_35,rec_86400
REAL ZEPSCQ,ZEPSCT,ZEPSC,RAYL,XNET,VV,ZZ
EXTERNAL TTTT,WFLUX
EXTERNAL SUN_RADFIX
LOGICAL RADFIX,RADFLTR
*
C
REAL DSIG(LMX,KMX),DSH(LMX,KMX),DSC(LMX,KMX),DZ(LMX,KMX)
REAL VOZO(LMX)
C
REAL PSOL(LMX),WV(MM,KMX),TM(MM,KMX),QOF(LMX,KMX),
% CNEB(LMX,KMX),TAUAE(LMX,KMX,5) ,RMUO(LMX),ALBS(LMX)
REAL EXP_ZZ(LMX)
REAL aSIG(LMX,KMX)
REAL Z(LMX)
C
C
REAL FDOWN(LMX,flkmxp),FUP(LMX,flkmxp),HEAT(LMX,flkmx)
REAL OZOTOIT(LMX)
C
C
REAL UD(LMX,3,KMXP),UM(LMX,KMXP),REFZ(LMX,2,KMXP),
A RJ(LMX,6,KMXP),RK(LMX,6,KMXP),TR(LMX,2,KMXP),
B C1I(LMX,KMXP),RL(LMX,8),RMUE(LMX,KMXP),RAY(LMX,KMXP),
C RUEF(LMX,8),RE1(LMX),RE2(LMX),TR1(LMX),TE2(LMX),S(LMX),G(LMX),
D R23(LMX),REF(LMX),RMU(LMX),R1(LMX),W(LMX),TO1(LMX),
E GG(LMX),RNEB(LMX),RMUZ(LMX),TRA(LMX,KMXP),
F TAUAZ(LMX,KMX),PIZAZ(LMX,KMX),CGAZ(LMX,KMX),WORKX(LMX),
G OMEGAT(LMX,KMX),CG(LMX,KMX),TAU(LMX,KMX),
H UDI1(LMX),UDI2(LMX)
INTEGER KK(LMX)
logical reduc
real flss(lmx,flkmxp), srd(lmx,kmxp)
real afldsig(lmx,flkmx), aflsig(lmx,flkmx)
*
*Author
* L.Garand (1989)
*
*Revision
* 001 G.Pellerin(Mar90)Standard documentation
* 002 N. Brunet (May91)
* New version of thermodynamic functions
* and file of constants
* 003 B. Bilodeau (August 1991)- Adaptation to UNIX
* 004 C. Girard (Nov 1992) - Adjustment on parameters
* controlling the effect of clouds
* 005 B. Bilodeau (Apr 1993) - Optimization
* 006 B. Bilodeau (May 1993) - R0 variable
* 007 R. Benoit (Aug 93) Local Sigma
* 008 B. Bilodeau (November 1993) - Total ozone
* (cm stp) above model roof in ozotoit
* Change name from SUN1 to SUN2
* 009 Wei Yu (Aug 94) - New option KUO2SUN2
* Change name from SUN2 to SUN3
* 010 M. Gagnon (June 1995) - Reduction mode
* 011 Louis Garand (April 1995) - Remove calculations of
* optical parameters now done in CLDOPTX; minor change
* to cloud overlapping calculation (as in IR code)
* 012 B. Dugas (Sep 96) - RADFIX to control 1) fixes and
* 2) loss of solar flux due to ozone above model lid
* 013 V. Lee (Apr 99) - Correct bug (loop 904)
* 014 G. Lemay, A. Patoine and B. Bilodeau (Sep 99) - Correct
* multitasking bug by removing comdeck "solfact"
* 015 B. Bilodeau (Jan 01) - Automatic arrays
* 016 M. Lepine (March 2003) - CVMG... Replacements
* 017 D. Talbot (June 2003) - IBM conversion
* - calls to vsexp routine (from massvp4 library)
* - calls to exponen4 (to calculate power function '**')
* - divisions replaced by reciprocals
* 018 A-M. Leduc (Jun 2003) - Add RADFLTR switch (sun6 to sun7)
* 019 F. Lemay (Sept 2003) - Call to sun_radfix
* 020 B. Bilodeau (Aug 2003) - exponen4 replaced by vspown1
*
*Object
* to calculate the solar heating rates and fluxes after
* Y.Fouquart and B. Bonnel, 1980, Beitr. Phys. Atmosph. 53,1,
* 35-62
*
*Arguments
*
* - Output -
* FDOWN downward flux at each flux level (W/m2) as output
* FUP upward flux at each flux level (W/m2) as output
* HEAT solar heat in Kelvin/second as output
* OZOTOIT total ozone (cm stp) above model roof
* VOZO transmissivity of ozone layer above model roof
*
* - Input -
* DSIG sigma thickness of each level
* DSH sigma thickness affected by exponent 1.9
* DSC sigma thickness affected by exponent 1.75
* DZ thickness of each layer in metres
* PSOL surface pressure in Newtons/m2
* TM temperature in middle of layer
* WV mixing water vapour ratio in kg/kg (middle of layer)
* ASIG reduced sigma levels
* QOF amount of ozone in cm STP in each layer
* CNEB cloud fraction in each layer
* ZLWC amount of liquid water per layer in kg/m3
* TAUAE optical thickness of aerosols per layer (no units)
* RMUO cosines of the solar Zenith angle (1. at noon)
* ALBS surface albedo
* LMX maximum number of points to execute (identical to the 1st
* dimension of defined multi-dimensional tables)
* KMX number of layers
* KMXP number of flux levels (KMX+1)
* NPTS number of points requested with ILG<=LMX
* MM 1st dimension of TM and WV
* RJ downward fluxes
* RK upward fluxes
* UD downward radiation
* REFZ reflectivities:
* REFZ(1,KM1) for reflectivity of layer KM1 for a non-
* reflecting underlying layer (R=0);
* REFZ(2,KM1) for reflectivity of layer KM1 for a reflecting
* underlying layer (R is not 0)
* TR transmissivities
* UM upward radiation
* RL work space
* RUEF work space
* C1I total cloudiness above level K assuming a random
* overlapping of the cloud layers, taking into account the
* actual optical thickness of the cloud (via the forward
* scattering peak)
* RMUE work space
* RAY Rayleigh scattering
* TRA work space
* TAUAZ work space
* PIZAZ work space
* CGAZ work space
* OMEGAT cloud layer single scattering albedo (0 to 1)
* CG cloud layer asymmetry parameter (0 to 1)
* TAU cloud layer optical thickness (no dimension, >=0)
* RE1 work space
* RE2 work space
* TR1 work space
* TE2 work space
* S work space
* G work space
* R23 work space
* REF work space
* RMU work space
* R1 work space
* W work space
* TO1 work space
* GG work space
* RNEB work space
* RMUZ work space
* WORKX work space
* KK work space
* reduc .true. to use interpolation
* .false. means we are working on full levels
* flss full "flux" sigma levels
* srd reduced "flux" sigma levels
* afldsig thickness between full "flux" sigma levels
* aflsig full sigma levels
* flkmx full number of levels excluding ground
* flkmxp full number of levels including ground
* RADFIX .true. to use curve fit at the end
* RADFLTR .true. to apply smoothing of net fluxes
* R0R factor close to 1.0 (+/- 3%) that takes into account
* the variation in sun-earth distance
*
*Notes
* Modified for inclusion of aerosol effect by D. Tanre, Aug.
* 1982.Vectorized and optimized by J.J. Morcrette , March
* 1984.Provided by Jean-Pierre Blanchet, CCRN, AES,
* Toronto.This is the version with one spectral interval.
* Version with two intervals (O.25-0.68 and 0.68-4Microns)
* is also available.
*
**
C
#include "consphy.cdk"
C-----------------------------------------------------------------------
C
************************************************************************
* AUTOMATIC ARRAYS
************************************************************************
*
AUTOMATIC ( FLDSIG , REAL , (LMX,FLKMX ) )
AUTOMATIC ( FLSIG , REAL , (LMX,FLKMX ) )
AUTOMATIC ( SIG , REAL , (LMX,KMX ) )
AUTOMATIC ( FLFDOWN , REAL , (LMX,FLKMXP) )
AUTOMATIC ( FLFUP , REAL , (LMX,FLKMXP) )
*
************************************************************************
REAL CH2O,CCO2
REAL TAUA(5),PIZA(5),CGA(5),CAER(4,5)
REAL APAD(3,6),BPAD(3,6),DQ(3),AKI(2)
real bb
SAVE CAER,TAUA,PIZA,CGA,APAD,BPAD,AKI,DQ
SAVE CH2O,CCO2
LOGICAL LO1
*
REAL SOMME,DIV,P1,P2,P3,P4,P5,P6,NUM,DENOM,ZY,NUME,DENOMI
C
DATA DQ/ 0.61 , 0.93 , 0.00 /
C
DATA AKI / 0.457, 0.00636 /
C
DATA ((APAD(I,J),J=1,6),I=1,3)/ 6.653722092E-05, 1.228372707E-01,
X 1.434798127E+01, 1.028708866E+02, 3.309603691E+01, 0.0 ,
X 6.074323894E+06, 2.379915061E+08,
X 1.978907838E+08, 7.973068584E+06, 1.221333677E+04, 0.0 ,
X 4.875774044E-04, 6.493865154E-01,
X 8.363354452E+01, 6.305273645E+02, 7.929825858E+01, 0.0 /
C
DATA ((BPAD(I,J),J=1,6),I=1,3) /6.653722092E-05, 1.242963636E-01,
X 1.534122504E+01, 1.289549216E+02, 6.193430339E+01, 1.0 ,
X 6.074323894E+06, 2.392851737E+08,
X 2.070297278E+08, 9.314161596E+06, 1.966084935E+04, 1.0 ,
X 4.875774044E-04, 6.499019064E-01,
X 8.435265650E+01, 6.443741405E+02, 9.864863951E+01, 1.0 /
C
C
C** OPTICAL PARAMETERS FOR THE STANDARD AEROSOLS OF THE RADIATION
C COMMISSION
C
CMODEL 1= CONTINENTAL, 2=MARITIME, 3=URBAN, 4=VOLCANIC, 5=STRATOSPHERIC
C
C
C-- SHORTWAVE (ADAPTED TO THE L.O.A. SHORTWAVE SCHEME)
C
DATA TAUA / .730719, .912819, .725059, .745405, .682188 /
DATA PIZA / .872212, .982545, .623143, .944887, .997975 /
DATA CGA / .647596, .739002, .580845, .662657, .624246 /
C
C-- LONGWAVE (ADAPTED TO THE L.O.A. LONGWAVE SCHEME SPECTRALS INTERVALS)
C
DATA CAER / .038520, .037196, .040532, .054934,
1 .12613 , .18313 , .10357 , .064106,
2 .012579, .013649, .018652, .025181,
3 .011890, .016142, .021105, .028908,
4 .013792, .026810, .052203, .066338 /
C
DATA CH2O/5.3669274E-3/, CCO2/3.3E-4/
C
C FONCTIONS-FORMULES POUR LE CALCUL DES APPROXIMANTS DE PADE
C
SOMME(P1,P2,P3,P4,P5,P6,ZY)=
+ (((((P6*ZY+P5)*ZY+P4)*ZY+P3)*ZY+P2)*ZY+P1)
C
DIV(NUM,DENOM,ZY)=(NUM/DENOM)*(1.-ZY) + ZY
C
C CAUTION: ALL ENTRIES ARE INVERTED VERTICALLY
C
ILG=NPTS
IF(ILG.GT.LMX)THEN
WRITE(6,9001)
9001 FORMAT(1X,' ILG DOIT ETRE < OU = A LMX DANS SUN2: FATAL')
ENDIF
KFIN=flKMX*.5 + 1
DO K=1,KFIN
KI=flKMX-K+1
DO J=1,LMX
flsig(J,K)=aflsig(J,KI)
flsig(J,KI)=aflsig(J,K)
fldsig(J,K)=afldsig(J,KI)
fldsig(J,KI)=afldsig(J,K)
enddo
enddo
KFIN=KMX*.5
DO 701 K=1,KFIN
KI=KMX-K+1
DO 702 J=1,LMX
A=WV(J,K)
WV(J,K)=WV(J,KI)
WV(J,KI)=A
A=DZ(J,K)
DZ(J,K)=DZ(J,KI)
DZ(J,KI)=A
A=TM(J,K)
TM(J,K)=TM(J,KI)
TM(J,KI)=A
A=QOF(J,K)
QOF(J,K)=QOF(J,KI)
QOF(J,KI)=A
A=CNEB(J,K)
CNEB(J,K)=CNEB(J,KI)
CNEB(J,KI)=A
A=cg(J,K)
cg(J,K)=cg(J,KI)
cg(J,KI)=A
A=tau(J,K)
tau(J,K)=max(tau(J,KI),1.e-10)
tau(J,KI)=max(A,1.e-10)
A=omegat(J,K)
omegat(J,K)=omegat(J,KI)
omegat(J,KI)=A
*
A=TAUAE(J,K,1)
TAUAE(J,K,1)=TAUAE(J,KI,1)
TAUAE(J,KI,1)=A
A=TAUAE(J,K,2)
TAUAE(J,K,2)=TAUAE(J,KI,2)
TAUAE(J,KI,2)=A
A=TAUAE(J,K,3)
TAUAE(J,K,3)=TAUAE(J,KI,3)
TAUAE(J,KI,3)=A
A=TAUAE(J,K,4)
TAUAE(J,K,4)=TAUAE(J,KI,4)
TAUAE(J,KI,4)=A
A=TAUAE(J,K,5)
TAUAE(J,K,5)=TAUAE(J,KI,5)
TAUAE(J,KI,5)=A
*
702 CONTINUE
*
701 CONTINUE
*
*
DO 704 I=1,KFIN
DO 704 J=1,LMX
IK=KMX-I+1
A=DSIG(J,I)
DSIG(J,I)=DSIG(J,IK)
DSIG(J,IK)=A
A=DSH(J,I)
DSH(J,I)=DSH(J,IK)
DSH(J,IK)=A
A=DSC(J,I)
DSC(J,I)=DSC(J,IK)
DSC(J,IK)=A
SIG(J,I)=aSIG(J,IK)
SIG(J,IK)=aSIG(J,I)
704 CONTINUE
CCAR=CCO2*0.0088509
CONS = GRAV/CPD
C
C
C-----------------------------------------------------------------------
C
C
C-- THRESHOLDS FOR CLOUDINESS, HUMIDITY, CLOUD OPTICAL THICKNESS
C
ZEPSC =1.E-02
ZEPSCQ=1.E-10
ZEPSCT=1.E-03
C
RAYL=0.06
C
C
C Y : MAGNIFICATION FACTOR
C UD : DOWNWARD RADIATION
C UM : UPWARD RADIATION
C
C INTERACTIONS BETWEEN OZONE ABSORPTION AND SCATTERING ARE NEGLECTED
C
C ABSORBER AMOUNT IN THE K TH LAYER
C H2O : UD(1,K)
C CO2 : UD(2,K)
C
IABS = 3
*
REC_35=1./35.
C
C si on introduit ce vsqrt sun6 plante car on perd en precision
C CALL VSQRT(RMU,1224.*RMUO*RMUO+1.,ILG)
C DO I=1,ILG
C RMU(I)=SQRT(1224.*RMUO(I)*RMUO(I)+1.)*REC_35
C RMU(I)=RMU(I)*REC_35
C ENDDO
C
DO 1 I=1,ILG
C1I(I,KMXP)=0.
UD(I,3,KMXP)=0.
RMU(I)=SQRT(1224.*RMUO(I)*RMUO(I)+1.)*REC_35
W(I) = OZOTOIT(I)/RMU(I)
NUME = SOMME(APAD(IABS,1),APAD(IABS,2),APAD(IABS,3),APAD(IABS,4),
+ APAD(IABS,5),APAD(IABS,6),W(I))
DENOMI= SOMME(BPAD(IABS,1),BPAD(IABS,2),BPAD(IABS,3),BPAD(IABS,4),
+ BPAD(IABS,5),BPAD(IABS,6),W(I))
*
* POUR TENIR COMPTE DE L'ABSORPTION DU RAYONNEMENT SOLAIRE
* CAUSEE PAR L'OZONE AU-DESSUS DU TOIT DU MODELE, REACTIVER
* LA LIGNE SUIVANTE. ELLE L'EST DEJA SI RADFIX EST FAUX
if (RADFIX) then
vozo(i) = 1.
else
vozo(i) = DIV(NUME,DENOMI,DQ(IABS))
endif
*
1 CONTINUE
*
* OZONE ABSORPTION ABOVE MODEL ROOF (NON-OPTIMIZED CODE)
* CALL TTTT(IABS,W,VOZO,WORKX,LMX,ILG,APAD,BPAD,DQ,AKI)
*
C
C-----------------------------------------------------------------------
C-- CALCULATES OZONE AMOUNTS FOR DOWNWARD LOOKING PATHS (SEC=1./RMU)
C
DO 3 K=1,KMX
KP1=K+1
L=KMXP-K
LP1=L+1
DO 2 I=1,ILG
UD(I,3,L)=UD(I,3,LP1)+QOF(I,L)/RMU(I)
2 CONTINUE
3 CONTINUE
C
C-----------------------------------------------------------------------
C CALCULATES OZONE AMOUNTS FOR UPWARD LOOKING PATHS (SEC=1.66)
C
Y=.6024
REC_Y=1./Y
DO 4 I=1,ILG
UM(I,1)=UD(I,3,1)
4 CONTINUE
C
DO 6 K=2,KMXP
KM1=K-1
DO 5 I=1,ILG
UM(I,K)=UM(I,KM1)+QOF(I,KM1)*REC_Y
5 CONTINUE
6 CONTINUE
C
C-----------------------------------------------------------------------
C CALCULATES AMOUNTS OF WATER VAPOR AND UNIFORMLY MIXED GASES (O2+CO2)
C FOR A VERTICAL PATH
C
REC_101325=1./101325.
DO 8 K=1,KMX
KP1=K+1
DO 7 I=1,ILG
C TZ=TM(I,K)
C Z = TCDK/TZ
Z(I) = TCDK/TM(I,K)
7 CONTINUE
C
call VSPOWN1 (UDI1,Z,0.45,ILG)
call VSPOWN1 (UDI2,Z,1.375,ILG)
DO I=1,ILG
WH2O=AMAX1(WV(I,K),1.E-8)
DSHH= DSH(I,K) * CH2O*WH2O
C DSCC= DSC(I,K) * CCAR*REC_101325
DSCC=DSC(I,K)*CCAR
! UD(I,1,K)= PSOL(I) * DSHH * Z**0.45
! UD(I,2,K)= PSOL(I) * DSCC * Z**1.375
C UD(I,1,K)= PSOL(I) * DSHH * (exp(0.45 *log(Z)))
C UD(I,2,K)= PSOL(I) * DSCC * (exp(1.375*log(Z)))
UD(I,1,K)= PSOL(I) * DSHH * UDI1(I)
UD(I,2,K)= PSOL(I) * DSCC * UDI2(I)
ENDDO
8 CONTINUE
C
C
C-----------------------------------------------------------------------
C C1I(*) TOTAL CLOUDINESS ABOVE LEVEL K ASSUMING A RANDOM OVERLAPPING
C OF THE CLOUD LAYERS, TAKING INTO ACCOUNT THE ACTUAL OPTICAL
C THICKNESS OF THE CLOUD (VIA THE FORWARD SCATTERING PEAK)
C
C
DO 9 I=1,ILG
R23(I)=0.
C1I(I,KMXP)=0.
9 CONTINUE
C DO 11 K=1,KMX
C L=KMXP-K
C DO 10 I=1,ILG
C-- 0.28 = 1.- PIZERO*G*G
C CORR=1.-EXP(-0.28*TAU(I,L)/RMU(I))
C R23(I)=1.-(1.-CNEB(I,L)*CORR)*(1.-R23(I))
C C1I(I,L)=R23(I)
C IF(I.EQ.1)WRITE(6,77)L,C1I(I,L),TAU(I,L),CNEB(I,L)
C 77 FORMAT(1X,'C1I TAU NEB:',I6,3E12.4)
C10 CONTINUE
C11 CONTINUE
C
C
C
C
do i=1,ilg
c te2 is memory of level for new cloud layer
c where maximum overlap occurs
c tr1 records the mimimum transmittance in that cloud
te2(i)=1.
tr1(i)=1.
end do
C
DO 904 J=1,KMXP
DO 904 I=1,ILG
904 RAY(I,J)=1.
DO 711 J=2,KMXP
LIND=MAX0(1,KMX-(J-2)+1)
LIND=MIN0(LIND,KMX)
DO 710 I=1,ILG
K=KMX-(J-1)+1
XNU=1.-CNEB(I,K)
VA=CNEB(I,LIND)
if(va.lt.0.01)then
te2(i)=ray(i,k)
tr1(i)=xnu
else
tr1(i)=min(tr1(i),xnu)
endif
ray(i,j)=tr1(i)*te2(i)
710 CONTINUE
711 CONTINUE
C RAY EST LE VECTEUR NUAGES DU SOMMET AUX AUTRES NIVEAUX
C AVEC RANDOM OVERLAP POUR COUCHES SEPAREES ET FULL OVERLAP
C POUR COUCHES ADJACENTES
C
DO 712 K=1,KMXP
DO 712 I=1,ILG
FUP(I,K)=1.-RAY(I,KMXP-K+1)
C IF(I.EQ.1)WRITE(6,9004)K,FUP(I,K)
C9004 FORMAT(' NOUV C1I: ',I5,2X,E12.4)
712 CONTINUE
C
DO 410 K = 1, KMX
DO 409 I=1,ILG
RE2(I)=0.
RE1(I)=0.
C1I(I,K)=FUP(I,K)
FDOWN(I,K)=CNEB(I,K)
PIZAZ(I,K) = 0.
409 CONTINUE
410 CONTINUE
C
C IF(1.EQ.1)GO TO 630
C DO 412 K=1,KMX
C L=KMXP-K
C K P 1 = K + 1
C DO 411 I=1,ILG
C C NEB 1 =CNEB(I,KMX-K+1)
C . . . . COMPUTES A DOWNWARD REDUCED CLOUDINESS TO CANCELL RANDOM OVERL
C C NEB 2 = CVMGT (0.,(RAY(I,KP1)-RAY(I,K) )/
C 1 AMAX1(1. -RAY(I,K), 0.001) ,
C 2 RAY(I,K) .GE. 0.999 )
C FDOWN(I,L) = (1. - RE1(I)) * C NEB 1 + RE1(I) * C NEB 2
C FDOWN(I,L) = AMIN1(FDOWN(I,L),CNEB1)
C RE2(I) = RE2(I) + TAU(I,L)
C PIZAZ(I,L) = PIZAZ(I,L) + TAU(I,L)*(CNEB1-FDOWN(I,L))
C FACOR = 1. - OMEGAT(I,L)*CG(I,L)*CG(I,L)
C RE1(I) = 1. - EXP(-FACOR * RE2(I) / RMU(I))
C C1I(I,L) = RAY(I,KP1) * RE1(I)
C411 CONTINUE
C412 CONTINUE
C DO 422 I=1,ILG
C422 RE1(I)=0.
C DO 423 J=1,KMX
C DO 424 I=1,ILG
C424 RE1(I)=RE1(I)+FDOWN(I,J)
C423 CONTINUE
C
C KMX M 1 = KMX - 1
C DO 416 K = 1, KMX M 1
C L = KMXP - K
C DO 415 I = 1,ILG
C FUP(I,L) = TAU (I,L)
C IF (FDOWN(I,L) .GT. .01)THEN
C TAU (I,L) = (TAU(I,L) * FDOWN(I,L) + PIZAZ(I,L-1)) /
C 1 FDOWN(I,L)
C TAU(I,L)= FDOWN(I,L)*RE2(I)/RE1(I)
C tau(i,l) = min(tau(i,l),150.)
C OMEGAT(I,L) = 1. - (1.-OMEGAT(I,L))*FUP(I,L)/TAU(I,L)
C OMEGAT(I,L) = AMAX1(OMEGAT(I,L),0.9936)
C omegat(i,l) = amin1 ( omegat(i,l) , 0.999999 )
C END IF
C 415 CONTINUE
C 416 CONTINUE
C
C630 CONTINUE
C
C
C
C-----------------------------------------------------------------------
C-- OPTICAL PARAMETERS FOR THE MIXING OF AEROSOLS
C
DO 115 K=1,KMX
DO 111 I=1,ILG
CGAZ(I,K)=0.
PIZAZ(I,K)=0.
TAUAZ(I,K)=0.
111 CONTINUE
DO 113 IAE=1,5
DO 112 I=1,ILG
TAUAZ(I,K)=TAUAZ(I,K)+TAUAE(I,K,IAE)*TAUA(IAE)
PIZAZ(I,K)=PIZAZ(I,K)+TAUAE(I,K,IAE)*TAUA(IAE)*PIZA(IAE)
CGAZ(I,K)=CGAZ(I,K)+TAUAE(I,K,IAE)*TAUA(IAE)*PIZA(IAE)*CGA(IAE)
112 CONTINUE
113 CONTINUE
DO 114 I=1,ILG
CGAZ(I,K)=CGAZ(I,K)/PIZAZ(I,K)
PIZAZ(I,K)=PIZAZ(I,K)/TAUAZ(I,K)
114 CONTINUE
115 CONTINUE
C
C------------------------------------------------------------------
C REFLECTIVITIES AND TRANSMITTIVITIES ARE FIRST CALCULATED WITHOUT
C GASEOUS ABSORPTION, I.E., FOR A PURELY SCATTERING ATMOSPHERE
C INCLUDING RAYLEIGH, CLOUDS, AEROSOLS
C
C SURFACE CONDITIONS ALBS
C
DO 12 I=1,ILG
REFZ(I,2,1)=ALBS(I)
REFZ(I,1,1)=ALBS(I)
12 CONTINUE
C
Y=1.66
312 FORMAT( 5X,'REFZ1',10X,'REFZ2',12X,'TR1',13X,'TR2',/)
C
DO K=2,KMXP
KM1=K-1
DO I=1,ILG
RNEB(I)=FDOWN(I,KM1)
! RE1(I)=0.
! TR1(I)=0.
! RE2(I)=0.
! TE2(I)=0.
C
C-- EQUIVALENT ZENITH ANGLE OBTAINED AS A MIX OF THE ZENITH ANGLE FOR
C DIRECT RADIATION AND OF THE DIFFUSE (SEC=1.66) ZENITH ANGLE
C DEPENDING ON THE OVERHEAD CLOUDINESS
C
XMUE=(1.-C1I(I,K))/RMU(I)+C1I(I,K)*1.66
RMUE(I,K)=1./XMUE
C
C REFLECTIVITY OF LAYER KM1 DUE TO RAYLEIGH SCATTERING
C
R=RAYL*DSIG(I,KM1)
C
C-- ORIGINAL FORMULA (FOUQUART)
C RAY(I,KM1)=0.5*R/(RMUE(I,K)+R)
C
C-- TANRE'S FORMULA
C RAY(I,KM1)= R / (2.*RMUE(I,K) + R)
C
C-- BURIEZ' FORMULA, JUIN 82
C R=DSIG(I,KM1)
C RAY(I,KM1)=0.0536*R/(RMUE(I,K)+0.063+0.055*R)
C
C-- TANRE'S FORMULA MODIFYING THE CONTRIBUTION OF RAYLEIGH SCATTERING
C TO ACCOUNT FOR AEROSOLS
C
PT=R+PIZAZ(I,KM1)*TAUAZ(I,KM1)
XMPT=(1.-PIZAZ(I,KM1))*TAUAZ(I,KM1)
BPT=0.5*(1.-TAUAZ(I,KM1)*CGAZ(I,KM1)/(R+TAUAZ(I,KM1)))*PT
TRA(I,KM1)=1./(1.+XMPT*XMUE+BPT*XMUE)
RAY(I,KM1)=TRA(I,KM1)*BPT*XMUE
C
C-- INTRODUCING THE EFFECT OF A CLOUD LAYER IN THE SCATTERING PROCESS
C
K0=0
K1=1
LO1=RNEB(I).GT.ZEPSC
if (LO1) then
ZC = 0.
else
ZC = 1.
endif
KK(I)=INT(ZC)
if (LO1) then
TAU(I,KM1) = AMAX1(TAU(I,KM1),ZEPSCT)
else
TAU(I,KM1) = 0.
endif
C
W(I) = OMEGAT(I,KM1)
TO1(I)=TAU(I,KM1)/W(I)
REF(I)=REFZ(I,1,KM1)
GG(I)=CG(I,KM1)
RMUZ(I)=RMUE(I,K)
ENDDO
C
CALL WFLUX
(REF, GG, W, TO1, RE1, TR1, RMUZ, RE2, TE2,LMX,ILG)
C
C REFZ(1,KM1): REFLECTIVITY OF LAYER KM1
C FOR A NON-REFLECTING UNDERLYING LAYER R=0.
C REFZ(2,KM1): FOR A REFLECTING (R#0.) UNDERLYING LAYER
C
DO 14 I=1,ILG
REFZ(I,1,K)=(1.-RNEB(I))*(RAY(I,KM1)+REFZ(I,1,KM1)*
1 ( TRA(I,KM1) ))+ RNEB(I)*RE2(I)
TR(I,1,KM1)=RNEB(I)*TE2(I)+( TRA(I,KM1) )*(1.-RNEB(I))
REFZ(I,2,K)=(1.-RNEB(I))*(RAY(I,KM1)+KK(I)*REFZ(I,2,KM1)*
1 ( TRA(I,KM1) ))+ RNEB(I)*RE1(I)
TR(I,2,KM1)=RNEB(I)*TR1(I)+(1.-RNEB(I))*( TRA(I,KM1) )
14 CONTINUE
ENDDO
C
DO 19 JJ=1,2
C
C RJ : DOWNWARD
C RK : UPWARD
C
DO 16 I=1,ILG
RJ(I,JJ,KMXP)=1.
RK(I,JJ,KMXP)=REFZ(I,JJ,KMXP)
16 CONTINUE
C
DO 18 K=1,KMX
L=KMXP-K
LP1=L+1
DO 17 I=1,ILG
RE11=RJ(I,JJ,LP1)*TR(I,JJ,L)
RJ(I,JJ,L)=RE11
RK(I,JJ,L)=RE11*REFZ(I,JJ,L)
17 CONTINUE
18 CONTINUE
19 CONTINUE
C
C----------------------------------------------------------------
C REFLECTIVITIES AND TRANSMITTIVITIES ARE NOW CALCULATED WITH A
C SIMULATED GASEOUS ABSORPTION USING AN EMPIRICAL GREY ABSORPTION
C COEFFICIENTS AKI(IABS)
C
C IABS=1 WATER VAPOR ; IABS=2 UNIFORMLY MIXED GASES
C
N=2
C
DO 28 IABS=1,2
RKI=AKI(IABS)
C
DO 20 I=1,ILG
REFZ(I,2,1)=ALBS(I)
REFZ(I,1,1)=ALBS(I)
20 CONTINUE
C
DO 23 K=2,KMXP
KM1=K-1
do i=1,ilg
AA=UD(I,IABS,KM1)
TO1(I) = RKI*aa
s(i)=-RKI*AA*y
g(i)=-RKI*AA/RMUE(I,K)
RMUZ(I)=RMUE(I,K)
enddo
call vsexp(s,s,ilg)
call vsexp(g,g,ilg)
DO 21 I=1,ILG
RNEB(I)=FDOWN(I,KM1)
! AA=UD(I,IABS,KM1)
! S(I)=EXP(-RKI*AA*Y)
! G(I)=EXP(-RKI*AA/RMUE(I,K))
! TR1(I)=0.
! RE1(I)=0.
! TE2(I)=0.
! RE2(I)=0.
C
LO1=RNEB(I).GT.ZEPSC
if (LO1) then
ZC = 0.
else
ZC = 1.
endif
KK(I)=INT(ZC)
if (LO1) then
TAU(I,KM1) = AMAX1(TAU(I,KM1),ZEPSCT)
else
TAU(I,KM1) = 0.
endif
C
C
! TO1(I) = RKI*AA + TAU(I,KM1)/OMEGAT(I,KM1)
TO1(I) = TO1(i) + TAU(I,KM1)/OMEGAT(I,KM1)
W(I)=TAU(I,KM1)/TO1(I)
REF(I)=REFZ(I,1,KM1)
GG(I)=CG(I,KM1)
! RMUZ(I)=RMUE(I,K)
21 CONTINUE
C
CALL WFLUX
(REF, GG, W, TO1, RE1, TR1, RMUZ, RE2, TE2,LMX,ILG)
C
DO 22 I=1,ILG
REFZ(I,2,K)=(1.-RNEB(I))*(RAY(I,KM1)+KK(I)*REFZ(I,2,KM1)*
1 ( TRA(I,KM1) ))*G(I)*S(I)+RNEB(I)*RE1(I)
TR(I,2,KM1)=(1.-RNEB(I))*( TRA(I,KM1) )*G(I)+RNEB(I)*TR1(I)
REFZ(I,1,K)=(1.-RNEB(I))*(RAY(I,KM1)+REFZ(I,1,KM1)*
1 ( TRA(I,KM1) ))*G(I)*S(I)+RNEB(I)*RE2(I)
TR(I,1,KM1)=(1.-RNEB(I))*( TRA(I,KM1) )*G(I)+RNEB(I)*TE2(I)
22 CONTINUE
23 CONTINUE
318 CONTINUE
C
DO 27 KREF=1,2
N=N+1
C
DO 24 I=1,ILG
RJ(I,N,KMXP)=1.
RK(I,N,KMXP)=REFZ(I,KREF,KMXP)
24 CONTINUE
C
DO 26 K=1,KMX
L=KMXP-K
LP1=L+1
DO 25 I=1,ILG
RE11=RJ(I,N,LP1)*TR(I,KREF,L)
RJ(I,N,L)=RE11
RK(I,N,L)=RE11*REFZ(I,KREF,L)
25 CONTINUE
26 CONTINUE
27 CONTINUE
28 CONTINUE
C
C
C
C-----------------------------------------------------------------------
C UPWARD (RK) AND DOWNWARD (RJ) FLUXES ARE NOW CALCULATED
C WITHOUT GASEOUS ABSORPTION : N= 1 , 2
C WITH GASEOUS ABSORPTION BY H2O : N= 3 , 4
C WITH GASEOUS ABSORPTION BY CO2 : N= 5 , 6
C N= 1, 3, 5 : NON-REFLECTING UNDERLYING LAYER
C N= 2, 4, 6 : REFLECTING UNDERLYING LAYER
C
C EFFECTIVE ABSORBER AMOUNTS UEFF= - LN (F(K)/F(0))/K
C
C----- EE IS AN ADJUSTABLE THRESHOLD DEPENDING ON THE COMPUTER PRECISION
C ADDED TO 'RJ' TO PREVENT LOGARITHM OF ZERO
C
EE=1.E-10
DO 32 K=1,KMXP
DO 31 JJ=1,5,2
JJP =JJ+1
DO 30 I=1,ILG
RJ(I,JJ,K)= RJ(I,JJ,K) - RJ(I,JJP ,K)
RK(I,JJ,K)= RK(I,JJ,K) - RK(I,JJP ,K)
RJ(I,JJ,K)= AMAX1( RJ(I,JJ,K) , EE )
RK(I,JJ,K)= AMAX1( RK(I,JJ,K) , EE )
30 CONTINUE
31 CONTINUE
32 CONTINUE
C
DO 35 K=1,KMXP
DO 34 JJ=2,6,2
DO 33 I=1,ILG
C RJ(I,JJ,K)= EE + RJ(I,JJ,K)
C RK(I,JJ,K)= EE + RK(I,JJ,K)
RJ(I,JJ,K)= AMAX1( RJ(I,JJ,K) , EE )
RK(I,JJ,K)= AMAX1( RK(I,JJ,K) , EE )
33 CONTINUE
34 CONTINUE
35 CONTINUE
C
149 CONTINUE
C
DO 42 K=1,KMXP
KKI=1
C
DO 40 JJ=1,2
RKI=1.0/AKI(JJ)
C
DO 39 N=1,2
N2J=N+2*JJ
KKP4=KKI+4
C
C EFFECTIVE ABSORBER AMOUNT
DO 36 I=1,ILG
! W(I)=ALOG(RJ(I,N,K)/RJ(I,N2J,K))/RKI
W(I)=RJ(I,N,K)/RJ(I,N2J,K)
36 CONTINUE
call vslog(w,w,ilg)
do i=1,ilg
w(i)=w(i)*rki
NUME = SOMME(APAD(JJ,1),APAD(JJ,2),APAD(JJ,3),APAD(JJ,4),
+ APAD(JJ,5),APAD(JJ,6),W(I))
DENOMI= SOMME(BPAD(JJ,1),BPAD(JJ,2),BPAD(JJ,3),BPAD(JJ,4),
+ BPAD(JJ,5),BPAD(JJ,6),W(I))
R1(I) = DIV(NUME,DENOMI,DQ(JJ))
RUEF(I,KKI)=W(I)
enddo
C
C TRANSMISSION FUNCTION
* CET APPEL A ETE REMPLACE PAR LES FONCTIONS-FORMULE SOMME ET DIV.
* CALL TTTT(JJ,W,R1,WORKX,LMX,ILG,APAD,BPAD,DQ,AKI)
C
DO 37 I=1,ILG
RL(I,KKI)=R1(I)
! W(I)=ALOG(RK(I,N,K)/RK(I,N2J,K))/RKI
W(I)=RK(I,N,K)/RK(I,N2J,K)
37 CONTINUE
call vslog(w,w,ilg)
do i=1,ilg
w(i)=w(i)*rki
NUME = SOMME(APAD(JJ,1),APAD(JJ,2),APAD(JJ,3),APAD(JJ,4),
+ APAD(JJ,5),APAD(JJ,6),W(I))
DENOMI= SOMME(BPAD(JJ,1),BPAD(JJ,2),BPAD(JJ,3),BPAD(JJ,4),
+ BPAD(JJ,5),BPAD(JJ,6),W(I))
R1(I) = DIV(NUME,DENOMI,DQ(JJ))
enddo
C
* CET APPEL A ETE REMPLACE PAR LES FONCTIONS-FORMULE SOMME ET DIV.
* CALL TTTT(JJ,W,R1,WORKX,LMX,ILG,APAD,BPAD,DQ,AKI)
C
DO 38 I=1,ILG
RL(I,KKP4)=R1(I)
RUEF(I,KKP4)=W(I)
38 CONTINUE
C
KKI=KKI+1
39 CONTINUE
40 CONTINUE
C
C
C UPWARD AND DOWNWARD FLUXES WITH H2O AND CO2 ABSORPTION
C
DO 41 I=1,ILG
FDOWN(I,K)=RJ(I,1,K)*RL(I,1)*RL(I,3)
1 +RJ(I,2,K)*RL(I,2)*RL(I,4)
FUP(I,K)=RK(I,1,K)*RL(I,5)*RL(I,7)
1 +RK(I,2,K)*RL(I,6)*RL(I,8)
41 CONTINUE
42 CONTINUE
C
C-----------------------------------------------------------------------
C OZONE ABSORPTION
C
IABS=3
DO 46 K=1,KMXP
DO 43 I=1,ILG
W(I)=UD(I,3,K)
NUME = SOMME(APAD(IABS,1),APAD(IABS,2),APAD(IABS,3),APAD(IABS,4),
+ APAD(IABS,5),APAD(IABS,6),W(I))
DENOMI= SOMME(BPAD(IABS,1),BPAD(IABS,2),BPAD(IABS,3),BPAD(IABS,4),
+ BPAD(IABS,5),BPAD(IABS,6),W(I))
R1(I) = DIV(NUME,DENOMI,DQ(IABS))
43 CONTINUE
C
* CET APPEL A ETE REMPLACE PAR LES FONCTIONS-FORMULE SOMME ET DIV.
* CALL TTTT(IABS,W,R1,WORKX,LMX,ILG,APAD,BPAD,DQ,AKI)
C
DO 44 I=1,ILG
FDOWN(I,K) = R1(I)*CONSOL*R0R*VOZO(I)*RMUO(I)*FDOWN(I,K)
W(I)=UM(I,K)
NUME = SOMME(APAD(IABS,1),APAD(IABS,2),APAD(IABS,3),APAD(IABS,4),
+ APAD(IABS,5),APAD(IABS,6),W(I))
DENOMI= SOMME(BPAD(IABS,1),BPAD(IABS,2),BPAD(IABS,3),BPAD(IABS,4),
+ BPAD(IABS,5),BPAD(IABS,6),W(I))
R1(I) = DIV(NUME,DENOMI,DQ(IABS))
44 CONTINUE
C
* CET APPEL A ETE REMPLACE PAR LES FONCTIONS-FORMULE SOMME ET DIV.
* CALL TTTT(IABS,W,R1,WORKX,LMX,ILG,APAD,BPAD,DQ,AKI)
C
DO 45 I=1,ILG
FUP(I,K) = R1(I)*CONSOL*R0R*RMUO(I)*FUP(I,K)
45 CONTINUE
46 CONTINUE
C
C**** NET FLUX AND HEATING RATES (DEG.K / DAY)
C
DO 47 I=1,ILG
C ALBP(I)=FUP(I,KMXP)/FDOWN(I,KMXP)
C FSOL(I)=FDOWN(I,1)-FUP(I,1)
47 CONTINUE
C
DO 49 K=1,KMXP
DO 48 I=1,ILG
C Q(I,K)=FUP(I,K)-FDOWN(I,K)
48 CONTINUE
49 CONTINUE
c En mode reduction, interpoler fup et fdown aux niveaux de flux complets
if( reduc ) then
c La condition .gt. de intchamps exige qu'on passe
c des champs dans le sens normal (1=haut,kmx=bas).
c Il faut inverser les flux a interpoler.
IFIN=KMXP*.5
DO I=1,IFIN
KI=KMXP-I+1
DO J=1,LMX
A=FUP(J,I)
FUP(J,I)=FUP(J,KI)
FUP(J,KI)=A
A=FDOWN(J,I)
FDOWN(J,I)=FDOWN(J,KI)
FDOWN(J,KI)=A
enddo
enddo
call intchamps
(flfdown,fdown,flss,srd,lmx,flkmxp,kmxp)
call intchamps
(flfup,fup,flss,srd,lmx,flkmxp,kmxp)
C
c Inverser le resultat avant de poursuivre les calculs.
IFIN=flkmxp*.5 + 1
DO I=1,IFIN
KI=flkmxp-I+1
DO J=1,LMX
FUP(J,I)=flFUP(J,KI)
FUP(J,KI)=flFUP(J,I)
FDOWN(J,I)=flFDOWN(J,KI)
FDOWN(J,KI)=flFDOWN(J,I)
enddo
enddo
endif
C SMOOTHING OF FLUXES If RADFLTR IS TRUE
DO K=1,flkmxp
DO I=1,ILG
RMUE(I,K)=FUP(I,K)
RAY(I,K)=FDOWN(I,K)
enddo
enddo
if ( RADFLTR ) then
DO K=2,flKMX
DO I=1,ILG
FUP(I,K)=0.25*(RMUE(I,K+1)+RMUE(I,K-1)) + 0.5*RMUE(I,K)
FDOWN(I,K) = 0.25*(RAY(I,K+1)+RAY(I,K-1)) + 0.5*RAY(I,K)
enddo
enddo
else
DO K=2,flKMX
DO I=1,ILG
FUP(I,K)= RMUE(I,K)
FDOWN(I,K) = RAY(I,K)
enddo
enddo
endif
c Calcul des taux (HEAT)
DO K=1,flKMX
L=flkmxp-K
LP1=L+1
DO I=1,ILG
XNET=FUP(I,L)-FDOWN(I,L) - (FUP(I,LP1)-FDOWN(I,LP1))
RE=RMUE(I,L)-RAY(I,L)-(RMUE(I,LP1)-RAY(I,LP1))
if ( L.EQ.1) XNET= RE
C AU NIVEAU DE LA SURFACE ON UTILISE LES FLUX SANS SMOOTHING
HEAT(I,L)=MAX(CONS*XNET/(PSOL(I)*flDSIG(I,L)),0.)
IF(RADFIX) THEN
CALL SUN_RADFIX
(flSIG(I,L),RMUO(I),RMUO(I),PSOL(I),HEAT(I,L),(L.EQ.flkmxp-1))
ENDIF
ENDDO
ENDDO
C INVERT BACK most INPUTS
KFIN=KMX*.5
DO 801 K=1,KFIN
KI=KMX-K+1
DO 802 J=1,LMX
A=DZ(J,K)
DZ(J,K)=DZ(J,KI)
DZ(J,KI)=A
A=WV(J,K)
WV(J,K)=WV(J,KI)
WV(J,KI)=A
A=TM(J,K)
TM(J,K)=TM(J,KI)
TM(J,KI)=A
A=QOF(J,K)
QOF(J,K)=QOF(J,KI)
QOF(J,KI)=A
A=CNEB(J,K)
CNEB(J,K)=CNEB(J,KI)
CNEB(J,KI)=A
*
802 CONTINUE
801 CONTINUE
*
DO 804 I=1,KFIN
DO 804 J=1,LMX
IK=KMX-I+1
A=DSIG(J,I)
DSIG(J,I)=DSIG(J,IK)
DSIG(J,IK)=A
A=DSH(J,I)
DSH(J,I)=DSH(J,IK)
DSH(J,IK)=A
A=DSC(J,I)
DSC(J,I)=DSC(J,IK)
DSC(J,IK)=A
804 CONTINUE
IFIN=flKMXP*.5
DO I=1,IFIN
KI=flKMXP-I+1
DO J=1,LMX
A=FUP(J,I)
FUP(J,I)=FUP(J,KI)
FUP(J,KI)=A
A=FDOWN(J,I)
FDOWN(J,I)=FDOWN(J,KI)
FDOWN(J,KI)=A
enddo
enddo
ifin=flkmx*.5
do i=1,ifin
ki=flkmx-i+1
do j=1,lmx
a = heat(j,i)
heat(j,i) = heat(j,ki)
heat(j,ki) = a
enddo
enddo
*
RETURN
END