PROGRAM TITAN C23456789012345678901234567890123456789012345678901234567890123456789012 C PROGRAM TO CALCULATE THE SCATTERING GREENHOUSE EFFECT C ON TITAN CODE BEGUN 18 MARCH 1985 C C.P. McKAY C....................................................................... PARAMETER (NLAYER=30,NLEVEL=31) PARAMETER (NSPECI=46,NSPC1I=47,NSPECV=24,NSPC1V=25) COMMON /UBARED/ UBARI,UBARV,UBAR0 COMMON /ATM/ Z(NLEVEL),PRESS(NLEVEL),DEN(NLEVEL),TEMP(NLEVEL) COMMON /LAPSE/ DTDP(NLAYER),CONVEQ COMMON /GASS/ CH4(NLEVEL),XN2(NLEVEL),H2(NLEVEL),AR(NLEVEL) & ,XMU(NLEVEL),GAS1(NLAYER),COLDEN(NLAYER) COMMON /STRATO/ C2H2(NLAYER),C2H6(NLAYER) COMMON /VISGAS/SOLARF(NSPECV),NTERM(NSPECV),PEXPON(NSPECV), & ATERM(4,NSPECV),BTERM(4,NSPECV) COMMON /AERSOL/ RADIUS(NLAYER), XNUMB(NLAYER) & , REALI(NSPECI), XIMGI(NSPECI), REALV(NSPECV), XIMGV(NSPECV) COMMON /CLOUD/ RADCLD(NLAYER), XNCLD(NLAYER) & , RCLDI(NSPECI), XICLDI(NSPECI), RCLDV(NSPECV), XICLDV(NSPECV) COMMON /TAUS/ TAUHI(NSPECI),TAUCI(NSPECI),TAUGI(NSPECI), & TAURV(NSPECV),TAUHV(NSPECV),TAUCV(NSPECV),TAUGV(NSPECV) COMMON /OPTICI/ DTAUI(NLAYER,NSPECI),TAUI(NLEVEL,NSPECI) & ,WBARI(NLAYER,NSPECI), COSBI(NLAYER,NSPECI) COMMON /SPECTI/ BWNI(NSPC1I),WNOI(NSPECI),DWNI(NSPECI) & ,WLNI(NSPECI) COMMON /FLUXI/ FNETI(NLEVEL), FUPI(NLEVEL,NSPECI), & FDI(NLEVEL,NSPECI),FMNETI(NLEVEL),FMUPI(NLEVEL),FMDI(NLEVEL) COMMON /OPTICV/ DTAUV(NLAYER,NSPECV,4),TAUV(NLEVEL,NSPECV,4) & ,WBARV(NLAYER,NSPECV,4), COSBV(NLAYER,NSPECV,4) COMMON /SPECTV/ BWNV(NSPC1V),WNOV(NSPECV),DWNV(NSPECV) & ,WLNV(NSPECV) COMMON /FLUXV/ FNETV(NLEVEL), FUPV(NLEVEL,NSPECV), & FDV(NLEVEL,NSPECV), FMNETV(NLEVEL),FMUPV(NLEVEL),FMDV(NLEVEL) COMMON /FLUX/ FNET(NLEVEL), FMNET(NLEVEL), THEAT(NLAYER) COMMON /PLANT/ CSUBP,RSFI,RSFV,F0PI COMMON /ADJUST/ RHCH4,FH2,FHAZE,FHVIS,FHIR,TAUFAC,RCLOUD,FARGON COMMON /CONST/RGAS,RHOP,PI,SIGMA COMMON /IO/ TIDAL C* C* IPRINT CONTOLS OUTPUT AMOUNT:0=IRREDUCIBLE OUTPUT,LESS THAN 1 PAGE C* PER RUN, 0=MINIMAL OUTPUT, 1=BACKGROUND ATM AND SPEC; 10=FULL DEBUG WRITE(6,1111) 1111 FORMAT(' TITAN GREENHOUSE MODEL TUCSON 87 RUNS ', &' WITH VALUES CONSTRAINED BY GEOMETRIC ALBEDO WITH GAS2 OPACITY & ' //) IPRINT=1 C* C* SET UP BACKGROUNG ATMOSHPERE C* C* SET UP BACKGROUNG ATMOSHPERE C FAC IS THE RATIO BETWEEN GRID SPACING TOP/BOTTOM (1 IS EVEN) FAC=15. ZTOP=300. ZTOP1=250. C MODIFY ADJUSTABLE NUMBERS HERE -- NOT IN COMMON taufac=0.0 C fhir=0.6 c ?flag? C print *,'enter fhaze' C accept *,fhaze C print *,'enter N-IR factor' C accept *,fhir c print *,'enter cloud radius' c accept *,rcloud C print *,'enter cloud opacity' C accept *,taufac C CALL ZGRID(NLEVEL,FAC,ZTOP,ZTOP1,Z) CALL ATMSETUP(NLEVEL,Z,RHCH4,FH2,FARGON,TEMP,PRESS,DEN,XMU, & CH4,H2,XN2,AR,IPRINT) C C NOW CALCULATE THE LAYER AVERAGE GAS MIXING RATIOS. CALL GASSES(IPRINT) C C* CALL A ROUTINE THAT SETS UP THE IR SPECTRAL INTERVALS CALL SETSPI(IPRINT) CALL SETSPV(IPRINT) C SET UP PIA COEFFICIENTS CALL SETPIA(IPRINT,1) C C CALL A ROTUINE THAT SETS UP THE AEROSOL DIST AND OPTICAL PROP. IF ( FHAZE .GT. 0.) CALL HAZE2(IPRINT,NLAYER,Z,RADIUS,XNUMB) IF (TAUFAC .GT. 0.) CALL CLD(IPRINT) C C* CALL A SUBROUTINE THAT SETS UP THE OPTICAL PROPERTIES IN THE C INFRARED. AND THEN IN THE VISIBLE. CALL OPTCI(IPRINT) CALL OPTCV(IPRINT) C******************************************************************* C C CALL A ROUTINE THAT GETS THE NET FLUXES IN THE VISIBLE C INTEGRATING OVER ALL SPECTRAL INTERVALS AND THE IR NEXT CALL SFLUXV(IPRINT) CALL SFLUXI(IPRINT) C C C* NOW CALCULATE THE TOTAL NET FLUX AND THE HEATING RATES C * WE UNLY USE .5 * THE VISIBLE TO MAKE A GLOBAL AVERAGE...SEE NOTES C ADD TIDAL HEATING IN CGS UNITS NEGATIVE MEANS ADDED HEAT FLOW. C 1500 IS ONE IO UNIT OF HEAT FLOW. ?FLAG? TIDAL =-1.5E3 TIDAL = 0.*TIDAL DO 551 J=1,NLEVEL FNET(J)=FNETI(J)+FNETV(J)*0.5 + TIDAL FMNET(J)=FMNETI(J)+FMNETV(J)*0.5 +TIDAL 551 CONTINUE C CALL PRTOUT(IPRINT) C C BRIT2.F GOES HERE WHEN MAKING UP TGMBRIT.FOR C....................................................... C OUTPUT THE TEMP PROFILE WRITE(6,891) 891 FORMAT(//' INTITAL TEMPERATURE PROFILE') CALL FOUT(0,0) C DISABLE CONVERGENCE, PLOT MODEL ATMOSPHERE: GO TO 9876 c go to 9876 C C CALL A ROUTINE THAT GETS A FIRST GUESS AT A C CONVERGED RADIATIVE CONVECTIVE TEMPERATURE PROFILE. NSTRAT=NLEVEL-1 ITS=4 DO 1234 III=1,5 CALL TSTART(IPRINT,NSTRAT,ITS) CALL FOUT(NSTRAT,III) CALL ATMTEMP(IPRINT) CALL SFLUXV(0) 1234 CONTINUE C CALL PRTOUT(IPRINT) C C OUTPUT THE FIRST GUESS TEMPERATURE PROFILE WRITE(6,899) 899 FORMAT(///' INTITIAL RADIATIVE-CONVECTIVE TEMPERATURE PROFILE') CALL FOUT(NSTRAT,ITS) C JUMP TO 9876 TO GET PLOTS C THIS IS A SUITABLE JUMP POINT IF THE COMPOSITION OR THE TROPOPAUSE C ARE NOT TO BE DETERMINED INTERATIVELY. GO TO 9876 C C************************************END PHASE I*********************** C FIRST DO A COMPOSITION-TEMPERATURE ADJUSTEMENT AT FIXED NSTRAT C IP2=-10 ITS=2 DO III=1,5 CALL TSTART(IPRINT,NSTRAT,ITS) CALL FOUT(NSTRAT,III) CALL ATMTEMP(IP2) CALL SFLUXV(IP2) ENDDO C C DO LOOP IS THE CONVERGENCE LOOP C INCLUDING ADJUSTING NSTRAT ITMAX=10 ICON=1 DO 529 ITS=1,ITMAX C LETS CHECK FOR INSTABILITY UP TO THREE LAYERS ABOVE THE TROPOPAUSE IF( DTDP(NSTRAT-1) .GT. CONVEQ & .OR. DTDP(NSTRAT-2) .GT. CONVEQ & .OR. DTDP(NSTRAT-3) .GT. CONVEQ .OR. NSTRAT .EQ. NLEVEL) THEN C C WE HAVE AN UNSTABLE CONDITION OR WE ARE AT THE BONDARY IF (ICON .EQ. 1 .AND. NSTRAT .LT. NLEVEL) THEN C IF WE REACH HERE WE DO NOT KNOW IF WE'RE HIGH ENOUGH YET C SINCE WE HAVE YET TO HIT A STABLE LAYER SO WE KEEP RAISING C THE TROPOPAUSE UNTIL WE HIT AN STABLE LAYER WHICH SETS ICON=0 C WE ALWAYS APPROACH THE STABILITY CRITERIA FROM ABOVE C WE MAY BE AT THE BOUNDARY ALSO, C EITHER WAY WE HAVE TO RAISE THE TROPOPAUSE (LOWER NSTRAT) NSTRAT=NSTRAT-1 C CALL SUB TO SET UP NEW TEMP DEPENDENT C CALL ATMTEMP (IP2) CALL SFLUXV(IP2) CALL TSTART(IPRINT,NSTRAT,2) CALL FOUT(NSTRAT,ITS) CALL ATMTEMP (IP2) CALL SFLUXV(IP2) CALL TSTART(IPRINT,NSTRAT,2) CALL FOUT(NSTRAT,ITS) ELSE C IF WE REACH HERE WE HAVE THE FIRST UNSTABLE LOOP AFTER STABLE ONES C OR THAT THE TROPOPAUSE HAS BEEN LOWERED TO THE GROUND. EITHER WAY C THAT MUST MEAN THAT THE CORRECT VALUE OF NSTRAT IS THE PREVIOUS ONE C NSTRAT=NSTRAT-1 C CALL SUB TO SET UP NEW TEMP DEPENDENT C CALL TSTART(IPRINT,NSTRAT,2) CALL ATMTEMP (IP2) CALL SFLUXV(IP2) CALL TSTART(IPRINT,NSTRAT,2) CALL ATMTEMP (IP2) CALL SFLUXV(IP2) WRITE(6,*)' BEGIN FINAL CONVERGENCE' CALL FOUT(NSTRAT,ITS) CALL TSTART(IPRINT,NSTRAT,5) WRITE (6,821) CALL ATMTEMP (IPRINT) CALL SFLUXV(IP2) CALL PRTOUT(IPRINT) 821 FORMAT('1 CONVERGENCED SOLUTION') CALL FOUT(NSTRAT,ITS) GO TO 9876 ENDIF C ELSE C IF WE REACH HERE WE HAVE STABLE CONDITIONS BUT WE LOWER THE TROPOPAUSE C TO SEE IF WE MAINTAIN STABILITY (WE NEVER REACH HERE IF NSTRAT=NLEVEL) NSTRAT=NSTRAT+1 C CALL SUB TO SET UP NEW TEMP DEPENDENT C C AND THERE IS NO POINT IN DOING CALCULATIONS IF IT EQUALS NLEVEL IF (NSTRAT .LT. NLEVEL) THEN CALL TSTART(IPRINT,NSTRAT,2) CALL FOUT(NSTRAT,ITS) CALL ATMTEMP (IP2) CALL SFLUXV(IP2) CALL TSTART(IPRINT,NSTRAT,2) CALL ATMTEMP (IP2) CALL SFLUXV(IP2) CALL TSTART(IPRINT,NSTRAT,2) CALL FOUT(NSTRAT,ITS) ENDIF ICON=0 ENDIF 529 CONTINUE C PLOT ROUTINE OUTPUTS C JUMP TO 9876 TO GET PLOTS 9876 CONTINUE IP1=7 WRITE(IP1,*)Z,PRESS,TEMP,WLNV,FNETV,SOLARF, & TAUHV,FDV,FUPV,TAUGI,WNOI,FNET,FNETI & ,(FDI(NLEVEL,K),K=1,NSPECI) & ,(FUPI(NLEVEL,K),K=1,NSPECI) & ,(FUPI(1,K),K=1,NSPECI) & ,(((1.-RSFV)*FDV(NLEVEL,K)*1.E-4/(1./BWNV(K+1)-1./BWNV(K))) & ,K=1,NSPECV) & ,TAUHI,TAUCI,TAURV,TAUCV,TAUGV STOP 'TGM DONE' END SUBROUTINE FOUT(NSTRAT,ITS) PARAMETER (NLAYER=30,NLEVEL=31) PARAMETER (NSPECI=46,NSPC1I=47,NSPECV=24,NSPC1V=25) COMMON /ATM/ Z(NLEVEL),PRESS(NLEVEL),DEN(NLEVEL),TEMP(NLEVEL) COMMON /LAPSE/ DTDP(NLAYER),CONVEQ COMMON /FLUXI/ FNETI(NLEVEL), FUPI(NLEVEL,NSPECI), & FDI(NLEVEL,NSPECI),FMNETI(NLEVEL),FMUPI(NLEVEL),FMDI(NLEVEL) COMMON /FLUX/ FNET(NLEVEL), FMNET(NLEVEL), THEAT(NLAYER) WRITE (6,814) TEMP(NLEVEL), NSTRAT, ITS WRITE(6,892) (J,Z(J),TEMP(J),PRESS(J) &,FMNETI(J),DTDP(J),FMNET(J),J=1,NLAYER),NLEVEL,Z(NLEVEL) &,TEMP(NLEVEL),PRESS(NLEVEL),FNETI(NLEVEL) &,DTDP(NLEVEL-1),FNET(NLEVEL) 814 FORMAT(////' SURFACE TEMP=', F8.3,' NSTRAT=',I3,' ITS=',I2) 892 FORMAT(/' LEVEL ALT TEMP PRESS ', & 'IR-FNET DT/DP FNET-MID'/ & (1X,I2,F7.2,2F8.3,1PE11.3,0P,F11.5,1PE11.3,0P)) RETURN END SUBROUTINE MATSOL(A,NLEVEL,NSTRAT,DFLUX) C THIS SUBROUTINE SOLVES AX=B MATRIX EQUATION DIMENSION A(1,1),DFLUX(1) DIMENSION IPVT(101),WKAREA (1152) C CALL SGEFA(A,NLEVEL,NSTRAT,IPVT,INFO) C IF (INFO .NE. 0) WRITE (6,1927) C 1927 FORMAT(/' ****ERROR IN SGEFA IN TITAN MAIN CODE AT ITERATION') C CALL SGESL(A,NLEVEL,NSTRAT,IPVT,DFLUX,0) C C IMSL ROUTINES M=1 IDGT=3 CALL LEQT2F(A,M,NSTRAT,NLEVEL,DFLUX,IDGT,WKAREA,IER) IF (IER .NE. 0) WRITE (6,1927)IER 1927 FORMAT(/' *****ERROR IN MATRIX SOLVER IN TITAN MAIN CODE ',I5) RETURN END BLOCK DATA TGMDAT PARAMETER (NLAYER=30) COMMON /UBARED/ UBARI,UBARV,UBAR0 COMMON /LAPSE/ DTDP(NLAYER),CONVEQ COMMON /PLANT/ CSUBP,RSFI,RSFV,F0PI COMMON /ADJUST/ RHCH4,FH2,FHAZE,FHVIS,FHIR,TAUFAC,RCLOUD,FARGON COMMON /CONST/RGAS,RHOP,PI,SIGMA C* DATA PI/3.14159265358979323846/ C RGAS IS THE UNIVERSAL GAS CONSTANT IN UNITS OF: M SEC-2 AMU K-1 KM DATA RGAS/8.31432/ C SIGMA IS THE STEFAN-BOLTZMAN CONSTATNT IN CGS UNITS DATA SIGMA/5.6677E-5/ C* C RT CONSTANTS DATA UBARI,UBARV,UBAR0/0.5,0.5,0.5/ C* PLANET SPECIFIC CONSTANTS C C CONVEQ IS THE DRY N2 ADIABATE DLNT/DLNP DATA CONVEQ/0.2994/ C CSUBP IS THE SPECIFIC HEAT AT CONSTANT P OF THE ATMOSPHERE C IN UNITS OF ERGS K-1 G-1 DATA CSUBP/1.05E7/ C RHOP IS THE UNITS CONVERSION FROM TO GET MASS UNITS (G CM-2) C FROM PRESSURE (BARS) DEVIDED BY GRAVITY (M SEC-2) C IS EQUAL TO ONE GM CM-2 BARS-1 M SEC-2 C IF ONE WHATS TO CHANGE UNITS ON PRESSURE THIS C CONSTANT MUST BE CHANGED DATA RHOP/1.E4/ C RSF IS THE SURFACE REFLECTANCE FOR VIS AND IR DATA RSFV,RSFI/0.1,0.0/ C FOPI IS THE ACTUAL SOLAR FLUX IN ERGS/CM2 DATA F0PI/1.5E4/ C RHCH4 IS THE METHANE RH AT THE SURFACE DATA RHCH4 /0.60/ C FH2 IS THE CONSTANT MIXING RATIO OF H2 DATA FH2/0.003/ C FHAZE IS THE HAZE PRODUCTION SCALING FACTOR DATA FHAZE/0.35/ C FHIR IS THE HAZE INFRARED ABSORPTION SCALE FACTOR DATA FHIR/0.5/ C FHVIS IS THE HAZE INFRARED ABSORPTION SCALE FACTOR DATA FHVIS/1.333333333/ C TAUFAC IS THE 200 CM-1 SCALING FACTOR DATA TAUFAC/2.00/ C RCLOUD IS THE PARTICLE SIZE IN THE CLOUD IN MICRONS DATA RCLOUD/100./ END SUBROUTINE XMIE(RAD,RREAL,XIMG,QEXT,QSCT,QABS,CBAR,WAVEN) C CHANGED TO WORK WITH THE VAX MIE VERSION COMPLEX*16 ACAP(7000) REAL*8 ELTRMX(4,1,2),PIE(3,1),TAU(3,1),CSTHT(1),SI2THT(1) REAL*8 RO,REALO,XIMGO,QE,QS,CB,RD2,RN,CN,TPILAM RO=RAD REALO=RREAL XIMGO=XIMG RD2=0. RN=1.0 CN=0. WAVEL=1.E4/WAVEN TPILAM=2.0*3.14159/WAVEL CALL DMIESS (RO, REALO, XIMGO, 0.0, 1, * QE, QS,CB, * ELTRMX,PIE,TAU,CSTHT,SI2THT,ACAP,1, * 7000, RD2, RN, CN, TPILAM) CBAR=CB/QS QEXT=QE*3.14159*RAD*RAD*1.E-8 QSCT=QS*3.14159*RAD*RAD*1.E-8 QABS=QEXT-QSCT SIZE=3.14159*RAD*RAD*1.E-8 RETURN END SUBROUTINE TSTART(IPRINT,NSTRAT,ITMAX) PARAMETER (NLAYER=30,NLEVEL=31) PARAMETER (NSPECI=46,NSPC1I=47,NSPECV=24,NSPC1V=25) COMMON /ATM/ Z(NLEVEL),PRESS(NLEVEL),DEN(NLEVEL),TEMP(NLEVEL) COMMON /LAPSE/ DTDP(NLAYER),CONVEQ COMMON /FLUXI/ FNETI(NLEVEL), FUPI(NLEVEL,NSPECI), & FDI(NLEVEL,NSPECI),FMNETI(NLEVEL),FMUPI(NLEVEL),FMDI(NLEVEL) COMMON /FLUXV/ FNETV(NLEVEL), FUPV(NLEVEL,NSPECV), & FDV(NLEVEL,NSPECV), FMNETV(NLEVEL),FMUPV(NLEVEL),FMDV(NLEVEL) COMMON /FLUX/ FNET(NLEVEL), FMNET(NLEVEL), THEAT(NLAYER) DIMENSION BETA(NLEVEL), DFLUX(NLEVEL), A(NLEVEL,NLEVEL) & ,FMIP(NLEVEL), FNETIP(NLEVEL) COMMON /IO/ TIDAL DATA DELT /10./ C NSTRAT IS DEFINED TO BE THE LEVEL NUMBER WHICH C CORRESPONDS TO THE TROPOPAUSE. LAYERS WITH NUMBERS C LESS THAN NSTRAT ARE IN RADIATIVE EQUILIBRIUM. THERE C ARE NSTRAT-1 OF THESE LAYERS. LEVELS AND MIDPOINTS C WITH NUMBERS LESS THAN NSTRAT SHOULD HAVE ZERO FLUX. C LEVEL NSTRAT ITSELF IS NOT CONTRAINED TO HAVE ZERO FLUX. C C IN THIS SUBROUTINE NSTRAT IS DEFINED AND CONSTANT C DO 9999 ITS = 1, ITMAX C C SET UP THE INDEPENDENT VARIABLES FOR THE ITERATION PROCESESS C THESE ARE TEMPERATURES AT LEVELS UP TO NSTRAT, THESE ARE PUT C SEQUENTIALLY IN BETA VECTOR ALSO SET UP THE DFLUX VECTOR C INTITAL SET UP OF THESE VECTORS DO 1025 J=1,NSTRAT BETA(J)= TEMP(J) 1025 CONTINUE C DFLUX VECTOR CONSISTES OF FLUX AT TOP AND MIDPOINT FLUXES C FOR THE NSTRAT-1 LAYERS IN THE STRATOSPHERE C DFLUX(1) = FNET(1) DFLUX(NSTRAT)=FNET(NSTRAT) DO 1026 J=2,NSTRAT DFLUX(J) = FMNET(J-1) 1026 CONTINUE C C C BEGIN JACOBIAN LOOP**************************************** C AT THIS POINT WE HAVE VALUES FOR THE NET FLUXES AND THE VECTOR C DFLUX IS SET UP AS THE APPROPRIATE NET FLUXES. WE NOW WISH TO CALULATE C THE JACOBIAN C C WE MUST STORE THE VALUE OF THE FLUX CALCULATED WITHOUT PERTURBATION C IN FNETP AND FMNETP DO 219 J=1,NLEVEL FNETIP(J)=FNETI(J) FMIP (J)=FMNETI(J) 219 CONTINUE C C BEGIN PERTURBATION CALCULATION C DO 1020 JM = 1, NSTRAT C CHOSE A UNIT PERTURBATION IT IS FIVE DEG BETA(JM)=BETA(JM) + DELT C NOW RECONSTRUCT THE TEMPERATURE PROFILE DO 1019 J1 = 1,NSTRAT TEMP(J1) = BETA(J1) 1019 CONTINUE DO 1582 J1 = NSTRAT+1, NLEVEL TEMP(J1)=EXP(LOG(TEMP(J1-1))+CONVEQ* & (ALOG(PRESS(J1))-ALOG(PRESS(J1-1)))) 1582 CONTINUE C C NOW RECALULATE THE IR FLUXES GIVEN THE PURTURBATION IN TEMP C CALL SFLUXI(IPRINT) C C****************************************************************** C C NOW WE CALCULATE THE JACOBIAN TERMS IN THE SAME MANNER C AS THE DFLUX TERMS -- THESE ARE LINKED!!! -- C A(1,JM)=(FNETI(1) - FNETIP(1))/DELT A(NSTRAT,JM) = (FNETI(NSTRAT) - FNETIP(NSTRAT) )/DELT DO 1018 IM=1,NSTRAT-1 A(IM+1,JM) = ( FMNETI(IM) - FMIP(IM) )/DELT 1018 CONTINUE C****************************************************************** C UNDO BETA VECTOR PERTURBATION BETA(JM) = BETA(JM) - DELT C*********************************************************************** C234567..............................................................012 1020 CONTINUE C C PRINT OUT JACOBIAN MATRIX IF (ITS .EQ. 1 .AND. IPRINT .GT. 9) THEN WRITE (6,1400) 1,FNETIP(1),FNETI(1), (J+1,FMIP(J),FMNETI(J) & ,J=1,NSTRAT) 1400 FORMAT (//' J AFTER BEFORE'/(0PI3,1P2E12.3)) DO 1225 IM = 1, NSTRAT WRITE (6,1411) IM 1411 FORMAT(' JACOBIAN ROW: ',I3) WRITE (6,1311) ( A(IM,JM),JM=1,NSTRAT) 1311 FORMAT (1X, 1P8E10.2) 1225 CONTINUE END IF C C NOW CALL MATRIX SOLVER AND GET THE CHANGE IN THE C BETA VECTOR AND USE TO COMPUTE A NEW BETA VECTOR CALL MATSOL(A,NLEVEL,NSTRAT,DFLUX) C C ********************************************** DO 1239 J=1,NSTRAT C THIS IS AN ARTIFICAL DAMPER ..... IF ( ABS(DFLUX(J)) .GT. 10.0) & DFLUX(J)=10.*DFLUX(J)/ABS(DFLUX(J)) C BETA(J)=BETA(J)-DFLUX(J)*.5 1239 CONTINUE C C WE NOW HAVE A NEW BETA VECTOR - AN ITERATION HAS BEEN COMPLETED C C NOW RECOMPUTE THE TEMPERATURE PROFILE DO 1119 J1 = 1,NSTRAT TEMP(J1) = BETA(J1) 1119 CONTINUE DO 1120 J1 = NSTRAT+1,NLEVEL TEMP(J1)=EXP(LOG(TEMP(J1-1))+CONVEQ* & (ALOG(PRESS(J1))-ALOG(PRESS(J1-1)))) 1120 CONTINUE C THIS IS AN ARTIFICAL DAMPER .... DO 1121 J1=1,NLEVEL IF (TEMP(J1) .LT. 10.) TEMP(J1)=50.00 1121 IF (TEMP(J1) .GT. 300.) TEMP(J1)=300.00 C C RECALCULATE THE NET IR FLUXES CALL SFLUXI(IPRINT) C C* NOW RECALCULATE THE TOTAL NET FLUX DO 553 J=1,NLEVEL FNET(J)=FNETI(J)+FNETV(J)*0.5 +TIDAL FMNET(J)=FMNETI(J)+FMNETV(J)*0.5 + TIDAL 553 CONTINUE C 9999 CONTINUE C C END OF ITERATION LOOP *********************************** C C NOW RECALCULATE THE DFLUX VECTOR DFLUX(1) = FNET(1) DFLUX(NSTRAT) = FNET(NSTRAT) DO 4025 J=2,NSTRAT DFLUX(J) = FMNET(J-1) 4025 CONTINUE C NOW CALCULATE THE ACTUAL LAPSE RATES DO 529 J=1,NLAYER DTDP(J)=(LOG( TEMP(J)) - LOG( TEMP(J+1))) & /(LOG(PRESS(J)) - LOG(PRESS(J+1))) 529 CONTINUE RETURN END SUBROUTINE SETSPI(IPRINT) PARAMETER (NSPECI=46,NSPC1I=47) COMMON /SPECTI/ BWNI(NSPC1I),WNOI(NSPECI),DWNI(NSPECI) & ,WLNI(NSPECI) C SET UP SPECRAL INTERVALS BWNI(1)=8. BWNI(2)=15. BWNI(3)=25. BWNI(4)=37.5 DO 100 K=5,27 BWNI(K)=BWNI(K-1)+25. 100 CONTINUE BWNI(28)=645. BWNI(29)=645.+35.6760 BWNI(30)=BWNI(29)+4.324/2. BWNI(31)=BWNI(30)+4.324/2. BWNI(32)=BWNI(31)+12.327/4. BWNI(33)=BWNI(32)+12.327/4. BWNI(34)=BWNI(33)+12.327/4. BWNI(35)=BWNI(34)+12.327/4. BWNI(36)=BWNI(35)+35.6290 BWNI(37)=BWNI(36)+7.044/4. BWNI(38)=BWNI(37)+7.044/4. BWNI(39)=BWNI(38)+7.044/4. BWNI(40)=BWNI(39)+7.044/4. BWNI(41)=BWNI(40)+16.32/3. BWNI(42)=BWNI(41)+16.32/3. BWNI(43)=BWNI(42)+16.32/3. BWNI(44)=BWNI(43)+156.48 BWNI(45)=BWNI(44)+27.2/3. BWNI(46)=BWNI(45)+27.2/3. BWNI(47)=BWNI(46)+27.2/3. C C SET UP MEAN WAVENUMBERS AND DELTAS C UNITS ON WAVENUMBER ARE CM-1 C UNITS ON WAVELN ARE MICRONS DO 160 K=1,NSPECI WNOI(K)=( BWNI(K+1)+BWNI(K) )*0.5 DWNI(K)=BWNI(K+1)-BWNI(K) WLNI(K)=1.E+4/WNOI(K) 160 CONTINUE C IF THERE IS ONLY ONE INTERVAL THEN TOTAL ENERGY IS USED AND IF (NSPECI .EQ. 1) DWNI(1) = 1.0 C PRINT OUT SPECTRAL INTERVALS IF (IPRINT .GT. 1) THEN WRITE (6,190) DO 200 K=1,NSPECI WRITE (6,210)K,WLNI(K),WNOI(K),BWNI(K) & ,BWNI(K+1),DWNI(K) 200 CONTINUE END IF 210 FORMAT(1X,I3,F10.3,F10.2,F10.2,'-',F8.2,F10.3) 190 FORMAT(///' SPECTRAL INTERVALS'// & ' SNUM MICRONS WAVENU INTERVAL',11X,'DELTA-WN') C****** END SPECTRAL INTERVAL SET UP ************* RETURN END SUBROUTINE AEROSL(IPRINT) C THIS ROUTINE SETS UP THE AEROSOL DISTRIBUTION C PARAMETER (NLAYER=30,NLEVEL=31) PARAMETER (NSPECI=46,NSPECV=24) COMMON /ATM/ Z(NLEVEL),PRESS(NLEVEL),DEN(NLEVEL),TEMP(NLEVEL) COMMON /GASS/ CH4(NLEVEL),XN2(NLEVEL),H2(NLEVEL),AR(NLEVEL) & ,XMU(NLEVEL),GAS1(NLAYER),COLDEN(NLAYER) COMMON /AERSOL/ RADIUS(NLAYER), XNUMB(NLAYER) & , REALI(NSPECI), XIMGI(NSPECI), REALV(NSPECV), XIMGV(NSPECV) COMMON /PLANT/ CSUBP,RSFI,RSFV,F0PI COMMON /ADJUST/ RHCH4,FH2,FHAZE,FHVIS,FHIR,TAUFAC,RCLOUD,FARGON COMMON /CONST/RGAS,RHOP,PI,SIGMA DIMENSION PROD(NLEVEL) C C LETS REDEFINE THE AEROSOLS BASED ON THE MCKAY SIMPLE C AEROSOL MODEL... SEE NOTES C PRODUCTION PROFILE FROM TOON ET AL. (1980) XKB=1.380E-16 RHOH=1. PX=1.E-7 RCRIT=0.09E-4 c PY=PX*EXP(-1.124) C C DO 500 J=1,NLEVEL 500 PROD(J)=FHAZE*2.E-7*3.5E-14*EXP(-0.5*( (PRESS(J)-PX)/PY)**2) C C DUE TO NOLINEAR AVERAGEING WE NEED TO DETERMINE THE TOTAL C COLUMN PRODUCTION NUMERICALLY, AND ITERATIVELY DO ITS=1,4 CLEVEL=0.0 DO J=2,NLEVEL PRODMID=AVERGE( PROD(J),PROD(J-1) ) CLEVEL=CLEVEL+PRODMID*(Z(J-1)-Z(J))*1E5 ENDDO FACTOR=FHAZE*3.5E-14/CLEVEL C C SCALE THE RESULTS TO ADJUST THE PRODUCTION RATE DO J=1,NLEVEL PROD(J)=PROD(J)*FACTOR ENDDO CC ENDDO C TAU=0. IA=6 IFLAG=0 IF (IPRINT .GT. 0) WRITE(IA,389) 389 FORMAT('1 LVL ALT PRESS TAU(.635) PROD CUM-PROD' &,' DEN FALL-V R (CM)') C......... DO 501 J=1,NLEVEL GASDEN=1.E6*PRESS(J)/(XKB*TEMP(J)) EG = 100.*EFFG(Z(J)) XMASS=XMU(J)/6.022E23 B=EG*RHOH*0.5*SQRT(PI/(2.*XMASS*XKB*TEMP(J)))/GASDEN COAG=4.*SQRT(3.*XKB*TEMP(J)/RHOH) IF (J .GT. 1 ) THEN PRODMID=AVERGE( PROD(J),PROD(J-1) ) CMID=CLEVEL+0.5*PRODMID*(Z(J-1)-Z(J))*1E5 CLEVEL=CLEVEL+PRODMID*(Z(J-1)-Z(J))*1E5 C DO THE STOKES LIMIT ADJUSTMENT C AS DISCRIBED IN WRITE UP. PATH=1.689E14/GASDEN XKNUD=PATH/RAD2 ETA=1.78E-4*SQRT(TEMP(J)/300.) IK=1 IF (XKNUD .LT. 100.) THEN B= (B*XKNUD**IK + 5.4*2.*RHOH*EG*RAD2/(9.*ETA) )/(XKNUD**IK +1.) COAG=(COAG*XKNUD**IK + 4.*XKB*TEMP(J)/(3.*ETA*SQRT(RAD2))) & /(XKNUD**IK +1.) ENDIF C END OF STOKES FLOW ADJUSTMENT C C PUT IN CHARGE REDUCTION IN COAGULATION ?FLAG? COAG=COAG*EXP(-RAD2/RCRIT) C END OF CHARGE ADJUST R=( R**4.5 + ( 9.*COAG*CMID/(8.*PI*RHOH*B*B) & + 9.*SQRT(R)*PRODMID/(8.*PI*RHOH*B*DEN1)) * & (Z(J-1)-Z(J))*1.E5 )**(2./9.) DEN1=CLEVEL*3./(4.*PI*RHOH*B*R**4) C USE AVERAGEING PROCESS DENSITY AS DETERMINED IN NOTES C TO GET VALUES FOR THE LAYERS XNUMB(J-1)=AVERGE(DEN1,DEN2)*1.E5*( Z(J-1) - Z(J) ) RADIUS(J-1)=1.E4 * AVERGE(R,RAD2) ELSE C TOP LAYER CALCULATIONS (J .EQ. 1) CLEVEL=0.0 R= ( 9.*COAG*CLEVEL/(8.*PI*RHOH*B*B) )**(2./9.) CC BRITNESS SCALE FACTOR FOR TOP LAYER ?FLAG?? R=2.E-6 DEN1=4.*FHAZE/20. ENDIF RAD2=R DEN2=DEN1 C CALL THE MIE CODE TO GIVE THE AEROSOL PROPERTIES AT A REF WAVELN WVLN=.635 RMICRON=R*1E4 WNO=1.E4/WVLN CALL THOLIN(WVLN,REAL,XIMG) XIMG=XIMG*FHVIS CALL XMIE(RMICRON,REAL,XIMG, & QEXT,QSCT,QABS,CBAR,WNO) DTAU=QEXT*XNUMB(J-1) TAU=TAU+DTAU C C LETS DROP OUT THE HAZE FOR ALL ALTITUDES BELOW THE CONDENSATION POINT C WITH A ADD-ON HERE. ?FLAG?? IF ( IFLAG .EQ. 1 ) XNUMB(J-1)=0.0 IF ( CH4(J)*PRESS(J)/PCH4(TEMP(J)) .GT. 0.9 ) IFLAG=1 C IF (IPRINT .GT. 0) & WRITE(IA,390) J,Z(J),PRESS(J),TAU,PROD(J),CLEVEL,DEN1,B,R 501 CONTINUE 390 FORMAT(I3,F6.0,1P7E10.2) RETURN END SUBROUTINE CLD(IPRINT) C PUT IN A METHANE CLOUD HERE C THIS ROUTINE SETS UP THE CLOUD DISTRIBUTION C PARAMETER (NLAYER=30,NLEVEL=31) PARAMETER (NSPECI=46,NSPC1I=47,NSPECV=24,NSPC1V=25) COMMON /ATM/ Z(NLEVEL),PRESS(NLEVEL),DEN(NLEVEL),TEMP(NLEVEL) COMMON /GASS/ CH4(NLEVEL),XN2(NLEVEL),H2(NLEVEL),AR(NLEVEL) & ,XMU(NLEVEL),GAS1(NLAYER),COLDEN(NLAYER) COMMON /CLOUD/ RADCLD(NLAYER), XNCLD(NLAYER) & , RCLDI(NSPECI), XICLDI(NSPECI), RCLDV(NSPECV), XICLDV(NSPECV) COMMON /PLANT/ CSUBP,RSFI,RSFV,F0PI COMMON /ADJUST/ RHCH4,FH2,FHAZE,FHVIS,FHIR,TAUFAC,RCLOUD,FARGON COMMON /CONST/RGAS,RHOP,PI,SIGMA TOTALC=0.0 CCC XC=.95 DO 190 J=1,NLAYER XNCLD(J)=0. RADCLD(J)=0. IF ( CH4(J)*PRESS(J)/PCH4(TEMP(J)) .GT. XC) THEN RADCLD(J)=RCLOUD C TO COLAPSE THE CLOUD INTO ONE LAYER: ?FLAG? XC=9. C LET 1% OF THE GAS BE CLOUD AS AN INTITIAL GUESS XNCLD(J)=.01*COLDEN(J)*GAS1(J)/((4.*PI/3.)*RADCLD(J)**3*1.E-12) IF (IPRINT .GT. 0 ) WRITE(6,95) J,RADCLD(J),XNCLD(J),Z(J) 95 FORMAT(' CLOUD INSERTED: ',I3,F8.2,1P5E10.3) TOTALC=TOTALC+XNCLD(J) ENDIF 190 CONTINUE C CALL THE MIE CODE TO GIVE THE AEROSOL PROPERTIES AT A REF WAVENO C WHICH IS THE REF WAVENO OF TOON ET AL. WNOREF=200. RREF=1.27 XIREF=REFLIQ(WNOREF) CALL XMIE(RCLOUD,RREF,XIREF, & QEXT,QSCT,QABS,CBAR,WNOREF) CTAU=QEXT*TOTALC IF (IPRINT .GT. 0) WRITE(6,98) WNOREF,RREF,XIREF,TOTALC,CTAU 98 FORMAT(' CLOUD AT REFERENCE WAVENUMBER OF ',F7.2,' REAL, IMG =', & 1P2E10.2/' COLUMN DENSITY , OPTICAL DEPTH= ' 2E10.2) C SCALE THE CLOUD DENSITIES TO THE REFERENCE WAVENUMBER DO 145 J=1,NLAYER XNCLD(J)=XNCLD(J)*TAUFAC/CTAU 145 CONTINUE RETURN END SUBROUTINE OPTCI(IPRINT) PARAMETER (NLAYER=30,NLEVEL=31) PARAMETER (NSPECI=46,NSPC1I=47,NSPECV=24,NSPC1V=25) COMMON /ATM/ Z(NLEVEL),PRESS(NLEVEL),DEN(NLEVEL),TEMP(NLEVEL) COMMON /GASS/ CH4(NLEVEL),XN2(NLEVEL),H2(NLEVEL),AR(NLEVEL) & ,XMU(NLEVEL),GAS1(NLAYER),COLDEN(NLAYER) COMMON /STRATO/ C2H2(NLAYER),C2H6(NLAYER) COMMON /AERSOL/ RADIUS(NLAYER), XNUMB(NLAYER) & , REALI(NSPECI), XIMGI(NSPECI), REALV(NSPECV), XIMGV(NSPECV) COMMON /CLOUD/ RADCLD(NLAYER), XNCLD(NLAYER) & , RCLDI(NSPECI), XICLDI(NSPECI), RCLDV(NSPECV), XICLDV(NSPECV) COMMON /TAUS/ TAUHI(NSPECI),TAUCI(NSPECI),TAUGI(NSPECI), & TAURV(NSPECV),TAUHV(NSPECV),TAUCV(NSPECV),TAUGV(NSPECV) COMMON /OPTICI/ DTAUI(NLAYER,NSPECI),TAUI(NLEVEL,NSPECI) & ,WBARI(NLAYER,NSPECI), COSBI(NLAYER,NSPECI) COMMON /SPECTI/ BWNI(NSPC1I),WNOI(NSPECI),DWNI(NSPECI) & ,WLNI(NSPECI) COMMON /PLANT/ CSUBP,RSFI,RSFV,F0PI COMMON /ADJUST/ RHCH4,FH2,FHAZE,FHVIS,FHIR,TAUFAC,RCLOUD,FARGON COMMON /CONST/RGAS,RHOP,PI,SIGMA DIMENSION PROD(NLEVEL) C THE PRESSURE INDUCED TRANSITIONS ARE FROM REGIS C THE LAST SEVENTEEN INTERVALS ARE THE BANDS FROM GNF. C* C THIS SUBROUTINE SETS THE OPTICAL CONSTANTS IN THE INFRARED C IT CALCUALTES FOR EACH LAYER, FOR EACH SPECRAL INTERVAL IN THE IR C LAYER: WBAR, DTAU, COSBAR C LEVEL: TAU C DO 420 K=1,NSPECI C LETS USE THE THOLIN OPTICAL CONSTANTS FOR THE HAZE. CALL THOLIN(WLNI(K),TNR,TNI) REALI(K)=TNR XIMGI(K)=TNI*FHIR C SET UP THE OPTICAL CONSTANTS FOR THE CLOUD RCLDI(K)=1.27 XICLDI(K)=REFLIQ(WNOI(K)) 420 CONTINUE C C ZERO ALL OPTICAL DEPTHS. C ?FLAG? FOR SOME APPLCIATIONS THE TOP OPACITY MAY NOT VANISH DO 80 K=1,NSPECI TAUHI(K)=0. TAUCI(K)=0. TAUGI(K)=0. 80 CONTINUE C DO 100 J=1,NLAYER C SET UP THE COEFFICIENT TO REDUCE MASS PATH TO STP ...SEE NOTES C T0 =273.15 PO=1.01325 BAR TBAR=0.5*(TEMP(J)+TEMP(J+1)) PBAR=SQRT(PRESS(J)*PRESS(J+1)) BMU=0.5*(XMU(J+1)+XMU(J)) COEF1=RGAS*273.15**2*.5E5* (PRESS(J+1)**2 - PRESS(J)**2) & /(1.01325**2 *EFFG(Z(J))*TBAR*BMU) IF (IPRINT .GT. 9) WRITE(6,21) J,EFFG(Z(J)),TBAR,BMU,COEF1 21 FORMAT(' J, EFFG, TBAR, BMU, COEF1,: 'I3,1P6E10.3) DO 100 K=1,NSPECI C1 C FIRST COMPUTE TAU AEROSOL CALL XMIE(RADIUS(J),REALI(K),XIMGI(K), & QEXT,QSCT,QABS,CBAR,WNOI(K)) TAEROS=QEXT*XNUMB(J) C2 C NEXT COMPUTE TAU CLOUD TAUCLD=0.0 IF ( XNCLD(J) .GT. 0.) THEN CALL XMIE(RADCLD(J),RCLDI(K),XICLDI(K), & QEXTC,QSCTC,QABSC,CBARC,WNOI(K)) TAUCLD=QEXTC*XNCLD(J) ENDIF C3 C NOW COMPUTE TAUGAS DUE TO THE PIA TERM ONLY FOR LAMDA LT 940 TAUGAS=0.0 IF (WNOI(K) .LT. 940. ) THEN CALL PIA(K,TBAR,PNN,PCC,PCN,PHN) C HERE IS WHERE WE COULD SCALE THE PIA COEFFICEINTS C BASED ON REGIS' NOTES. ---TGM HAS NO ADJUST IN IT AS DEFAULT C 1.25 FACTOR SUGGESTED FOR HERE BY TOON C PCN=PCN*1.25*MIN(1.75 , MAX(1.0,WNOI(K)/200.)) C PCN=PCN*MIN(1.75 , MAX(1.0,WNOI(K)/200.)) TAUGAS=COEF1* & (XN2(J)*XN2(J)*PNN + CH4(J)*CH4(J)*PCC & + XN2(J)*CH4(J)*PCN + XN2(J)*H2(J)*PHN) IF (J .EQ. NLAYER .AND. IPRINT .GT. 9) & WRITE (6,22) WNOI(K),TAUGAS,XN2(J),CH4(J),H2(J), & TBAR, PNN,PCC,PCN, PHN, & XN2(J)*XN2(J)*PNN , CH4(J)*CH4(J)*PCC , & XN2(J)*CH4(J)*PCN , XN2(J)*H2(J)*PHN 22 FORMAT(1X,1P8E10.2) ENDIF IF (K .GT. 28) THEN KGAS=K-28 C ?FLAG? HERE MUST BE WATCHED CAREFULLY U=COLDEN(J)*6.02204E23/BMU CALL GAS2(J, KGAS,TBAR,PBAR,U,TAU2) TAUGAS=TAUGAS+TAU2 ENDIF C IF (TAEROS + TAUCLD .GT. 0.) THEN COSBI(J,K)=(CBAR*TAEROS + CBARC*TAUCLD )/(TAEROS + TAUCLD) ELSE COSBI(J,K)=0.0 ENDIF DTAUI(J,K)=TAUGAS+TAEROS+TAUCLD TAUHI(K)=TAUHI(K) + TAEROS TAUGI(K)=TAUGI(K) + TAUGAS TAUCI(K)=TAUCI(K) + TAUCLD C ?FLAG? SERIOUS PROBLEM WITH THE CODE HERE! TLIMIT=1.E-6 IF (DTAUI(J,K) .GT. TLIMIT) THEN WBARI(J,K)=(QSCT*XNUMB(J) + QSCTC*XNCLD(J)) & /DTAUI(J,K) ELSE WBARI(J,K)=0.0 WRITE (6,999) J,K,DTAUI(J,K) 999 FORMAT (' WARNING TAU MINIMUM AT J,K,DTAU:',2I3,1PE10.3) DTAUI(J,K)=TLIMIT ENDIF IF (IPRINT .GT. 9) & WRITE(6,73)J,K,TAUGAS,TAEROS,QEXT,QSCT 73 FORMAT(2I3,1P8E10.3) 100 CONTINUE C TOTAL EXTINCTION OPTICAL DEPTHS DO 119 K=1,NSPECI TAUI(1,K)=0.0 DO 119 J=1,NLAYER TAUI(J+1,K)=TAUI(J,K)+DTAUI(J,K) 119 CONTINUE IF (IPRINT .GT. 2) THEN WRITE (6,120) 120 FORMAT(///' OPTICAL CONSTANTS IN THE INFRARED') DO 200 K=1,NSPECI WRITE (6,190) WRITE (6,210)K,WLNI(K),WNOI(K),BWNI(K) & ,BWNI(K)+DWNI(K),DWNI(K) WRITE (6,230)REALI(K),XIMGI(K) DO 195 J=1,NLAYER WRITE (6,220)XNUMB(J), WBARI(J,K),COSBI(J,K),DTAUI(J,K) & ,TAUI(J,K) 195 CONTINUE WRITE (6,240) TAUI(NLEVEL,K) 200 CONTINUE END IF 210 FORMAT(1X,I3,F10.3,F10.2,F10.2,'-',F8.2,F10.3) 190 FORMAT(1X//' SNUM MICRONS WAVENU INTERVAL DELTA-WN') 230 FORMAT(1X,'NREAL(LAYER)= ',1PE10.3,' NIMG(LAYER)= ',E10.3/ &' #AEROSOLS WBAR COSBAR DTAU TAU') 220 FORMAT(5(1X,G9.3)) 240 FORMAT(41X,G9.3) RETURN END SUBROUTINE SETSPV(IPRINT) PARAMETER (NSPECV=24,NSPC1V=25) COMMON /SPECTV/ BWNV(NSPC1V),WNOV(NSPECV),DWNV(NSPECV) & ,WLNV(NSPECV) COMMON /VISGAS/SOLARF(NSPECV),NTERM(NSPECV),PEXPON(NSPECV), & ATERM(4,NSPECV),BTERM(4,NSPECV) DATA WLNV/ & 0.325, 0.375, 0.425, 0.475, 0.525, 0.575, & 0.640, 0.715, 0.789, 0.850, 0.891, 0.935, & 0.998, 1.073, 1.144, 1.213, 1.292, 1.381, & 1.484, 1.603, 1.742, 1.909, 2.111, 2.361/ data solarf/ & 525.430, 680.440, 1051.900, 1173.300, 1082.000, 1056.500, & 1495.100, 1123.100, 1053.200, 541.820, 397.630, 484.210, & 624.540, 528.390, 383.250, 372.260, 360.090, 339.230, & 315.600, 292.580, 267.600, 239.700, 208.040, 180.550/ data NTERM/1,1,4,4,4,3,4,4,3,4,3,3,3,4,4,3,3,4,3,4,4,3,4,4/ data pexpon/6*0.0, & 0.000, 0.000, 0.000, 0.149, 0.156, 0.186, & 0.302, 0.097, 1.150, 1.040, 1.030, 1.040, & 1.080, 1.070, 1.090, 1.050, 1.050, 0.959/ data ATERM/ & 1.000000, 0.000000, 0.000000, 0.000000, 1.000000, 0.000000, & 0.000000, 0.000000, 0.700000, 0.093900, 0.015000, 0.191100, & 0.300030, 0.135014, 0.460546, 0.104410, 0.164416, 0.375038, & 0.295630, 0.164917, 0.444755, 0.355864, 0.199380, 0.000000, & 0.198120, 0.331633, 0.335834, 0.134413, 0.327300, 0.335500, & 0.146800, 0.190400, 0.277055, 0.333367, 0.389578, 0.000000, & 0.126666, 0.416016, 0.364590, 0.092728, 0.286216, 0.492476, & 0.221308, 0.000000, 0.445402, 0.453717, 0.100882, 0.000000, & 0.351017, 0.371854, 0.277129, 0.000000, 0.434400, 0.477200, & 0.077600, 0.010800, 0.292343, 0.374023, 0.242032, 0.091602, & 0.501604, 0.385625, 0.112771, 0.000000, 0.597075, 0.308155, & 0.094771, 0.000000, 0.116916, 0.447207, 0.338013, 0.097864, & 0.541475, 0.367862, 0.090663, 0.000000, 0.468164, 0.212875, & 0.213276, 0.105685, 0.245440, 0.416617, 0.242734, 0.095209, & 0.330423, 0.503512, 0.166065, 0.000000, 0.307538, 0.361097, & 0.232456, 0.098909, 0.115609, 0.353355, 0.413319, 0.117718/ data BTERM/ &0.0000E+00,0.0000E+00,0.0000E+00,0.0000E+00,0.0000E+00,0.0000E+00, &0.0000E+00,0.0000E+00,0.0000E+00,7.8260E-04,2.3210E-03,5.5120E-03, &0.0000E+00,9.4390E-04,4.5750E-03,4.2690E-02,1.9500E-04,2.5340E-03, &1.5020E-02,8.9550E-02,2.5430E-03,1.5420E-02,3.1900E-02,0.0000E+00, &7.1740E-03,2.6010E-02,9.7160E-02,4.4030E-01,4.4550E-02,1.8750E-01, &7.9000E-01,2.8660E+00,5.6920E-02,1.9440E-01,7.9630E-01,0.0000E+00, &3.1190E-02,4.9600E-01,2.2970E+00,2.8660E+01,1.2740E+00,1.4250E+01, &1.4070E+02,0.0000E+00,9.4170E-02,6.1850E-01,6.9190E+00,0.0000E+00, &1.8690E+00,1.2560E+01,1.4730E+02,0.0000E+00,1.3600E-01,9.3830E-01, &4.2070E+00,1.4080E+02,6.1300E-02,1.3220E+00,2.2710E+01,8.5640E+02, &0.0000E+00,6.0630E-01,3.9880E+01,0.0000E+00,0.0000E+00,6.0850E-01, &4.5140E+01,0.0000E+00,2.7190E-01,1.9420E+00,3.1990E+01,1.5370E+03, &0.0000E+00,5.8440E-01,5.0650E+01,0.0000E+00,6.2920E-03,7.8350E-01, &3.5630E+01,1.2870E+03,1.7680E+00,3.0850E+01,4.6500E+02,1.3940E+04, &0.0000E+00,6.6970E-01,4.6030E+01,0.0000E+00,0.0000E+00,7.3460E-01, &3.9680E+01,3.1920E+03,9.5930E+00,3.7750E+02,5.1130E+03,2.7940E+05/ C******* C SET UP SPECRAL INTERVALS THESE ARE BASED ON KATHY RAGES PROGRAM C CONVERT PER KM-AMAGATS TO PER GM CM-3 (SEE NOTES FOR CONSTANT) DO K=1,NSPECV DO NT=1,4 BTERM(NT,K)=BTERM(NT,K)/(1.E5 * 16./22.4E3) ENDDO ENDDO C C SET UP MEAN WAVENUMBERS AND DELTAS C UNITS ON WAVENUMBER ARE CM-1 C UNITS ON WAVELN ARE MICRONS BWNV(1)=1.E4/.3 DO 100 K=2,NSPC1V BWLN=1.E4/BWNV(K-1) EWLN=2.*WLNV(K-1)-BWLN BWNV(K)=1.E4/EWLN 100 CONTINUE DO 160 K=1,NSPECV WNOV(K)=1.E4/WLNV(K) DWNV(K)=BWNV(K)-BWNV(K+1) 160 CONTINUE C IF THERE IS ONLY ONE SPECTRAL INTERVAL THEN TOTAL E IS USED AND IF (NSPECV .EQ. 1) DWNV(1) =1.0 C PRINT OUT SPECTRAL INTERVALS IF (IPRINT .GT. 1) THEN WRITE (6,190) DO 200 K=1,NSPECV WRITE (6,210)K,WLNV(K),WNOV(K),BWNV(K) & ,BWNV(K)+DWNV(K),DWNV(K) 200 CONTINUE WRITE(6,320) 320 FORMAT (///' J WAVELN SOLAR FLUX N NP [' & 16X,'A TERMS',14X,'] [',16X,'B TERMS',14X,']'/) DO 300 J=1,24 K=1 SUM=ATERM(K,J)+ATERM(K+1,J)+ATERM(K+2,J)+ATERM(K+3,J) WRITE(6,20)J,WLNV(J),SOLARF(J),NTERM(J),PEXPON(J) &,(ATERM(K,J),K=1,4),(BTERM(K,J),K=1,4) 300 CONTINUE 20 FORMAT(1X,I2,F7.4,1PE14.5,0PI2,F6.3,3X,1P8E10.3) END IF 210 FORMAT(1X,I3,F10.3,F10.2,F10.2,'-',F8.2,F10.3) 190 FORMAT(///' SPECTRAL INTERVALS'// & ' SNUM MICRONS WAVENU INTERVAL',11X,'DELTA-WN') C****** END SPECTRAL INTERVAL SET UP ************* RETURN END SUBROUTINE OPTCV(IPRINT) PARAMETER (NLAYER=30,NLEVEL=31) PARAMETER (NSPECI=46,NSPC1I=47,NSPECV=24,NSPC1V=25) COMMON /ATM/ Z(NLEVEL),PRESS(NLEVEL),DEN(NLEVEL),TEMP(NLEVEL) COMMON /GASS/ CH4(NLEVEL),XN2(NLEVEL),H2(NLEVEL),AR(NLEVEL) & ,XMU(NLEVEL),GAS1(NLAYER),COLDEN(NLAYER) COMMON /VISGAS/SOLARF(NSPECV),NTERM(NSPECV),PEXPON(NSPECV), & ATERM(4,NSPECV),BTERM(4,NSPECV) COMMON /AERSOL/ RADIUS(NLAYER), XNUMB(NLAYER) & , REALI(NSPECI), XIMGI(NSPECI), REALV(NSPECV), XIMGV(NSPECV) COMMON /CLOUD/ RADCLD(NLAYER), XNCLD(NLAYER) & , RCLDI(NSPECI), XICLDI(NSPECI), RCLDV(NSPECV), XICLDV(NSPECV) COMMON /TAUS/ TAUHI(NSPECI),TAUCI(NSPECI),TAUGI(NSPECI), & TAURV(NSPECV),TAUHV(NSPECV),TAUCV(NSPECV),TAUGV(NSPECV) COMMON /OPTICV/ DTAUV(NLAYER,NSPECV,4),TAUV(NLEVEL,NSPECV,4) & ,WBARV(NLAYER,NSPECV,4), COSBV(NLAYER,NSPECV,4) COMMON /SPECTV/ BWNV(NSPC1V),WNOV(NSPECV),DWNV(NSPECV) & ,WLNV(NSPECV) COMMON /PLANT/ CSUBP,RSFI,RSFV,F0PI COMMON /ADJUST/ RHCH4,FH2,FHAZE,FHVIS,FHIR,TAUFAC,RCLOUD,FARGON COMMON /CONST/RGAS,RHOP,PI,SIGMA C* C* C THIS SUBROUTINE SETS THE OPTICAL CONSTANTS IN THE VISIBLE C IT CALCUALTES FOR EACH LAYER, FOR EACH SPECRAL INTERVAL IN THE VIS C LAYER: WBAR, DTAU, COSBAR C LEVEL: TAU C DO 130 K=1,NSPECV C LETS USE THE OPTICAL CONSTANTS FOR THOLIN CALL THOLIN(WLNV(K),TNR,TNI) REALV(K)=TNR XIMGV(K)=TNI*FHVIS C BUT WE NOW USE THE GEOMETRIC ALBEDO FITTED RESULTS C XIMGV(K)=FITEDT(WLNV(K)) C XIMGV(K)=FITEDN(WLNV(K)) C THE CLOUD IS CLEAR IN THE VISIBLE RCLDV(K)=1.27 XICLDV(K)=1.E-7 130 CONTINUE C DO 100 K=1,NSPECV C ZERO THE COLUMN OPTICAL DEPTHS OF EACH TYPE C ?FLAG? THE OPTICAL DEPTH OF THE TOP OF THE MODEL C MAY NOT BE ZERO. TAURV(K)=0. TAUHV(K)=0. TAUCV(K)=0. TAUGV(K)=0. DO 100 J=1,NLAYER C1 HAZE C CALL THE MIE CODE TO GIVE THE AEROSOL PROPERTIES CALL XMIE(RADIUS(J),REALV(K),XIMGV(K), & QEXT,QSCT,QABS,CBAR,WNOV(K)) TAEROS=QEXT*XNUMB(J) C2 RAYLEIGH C RAYLEIGH SCATTERING STRAIGHT FROM HANSEN AND TRAVIS...SEE NOTES C RATIOED BY THE LAYER COLUMN NUMBER TO THE TOTAL C COLUMN NUMBER ON EARTH. CM-2 TAURAY=(COLDEN(J)*28.9/(XMU(J)*1013.25))* &(.008569/WLNV(K)**4)*(1.+.0113/WLNV(K)**2+.00013/WLNV(K)**4) C3 CLOUD C NEXT COMPUTE TAU CLOUD TAUCLD=0.0 IF ( XNCLD(J) .GT. 0.) THEN CALL XMIE(RADCLD(J),RCLDV(K),XICLDV(K), & QEXTC,QSCTC,QABSC,CBARC,WNOV(K)) TAUCLD=QEXTC*XNCLD(J) ENDIF C TAURV(K)=TAURV(K)+TAURAY TAUHV(K)=TAUHV(K)+TAEROS TAUCV(K)=TAUCV(K)+TAUCLD C4 TAUGAS C LOOP OVER THE NTERMS DO 909 NT=1,NTERM(K) TAUGAS=COLDEN(J)*GAS1(J)*BTERM(NT,K)* & ( (PRESS(J+1) + PRESS(J))*.5 )**PEXPON(K) C COMPUTE THE AVERAGE COSBAR AND WBAR COSBV(J,K,NT)=(CBAR*TAEROS + CBARC*TAUCLD) & /(TAEROS+TAUCLD+TAURAY) DTAUV(J,K,NT)=TAUGAS+TAEROS+TAURAY+TAUCLD TAUGV(K)=TAUGV(K)+TAUGAS*ATERM(NT,K) C WE LET W RAYLEIGH BE .999 OR W=1 WHEN ONLY RAYLEIGH=PROBLEM FOR TRID C WE HAVE ASSUMED ABOVE THAT COSBAR FOR RAYLEIGH IS ZERO. WBARV(J,K,NT)=(QSCT*XNUMB(J)+TAURAY*0.9999999 + QSCTC*XNCLD(J) ) & /(TAUGAS+TAEROS+TAURAY+TAUCLD) 909 CONTINUE 100 CONTINUE C TOTAL EXTINCTION OPTICAL DEPTHS DO 119 K=1,NSPECV C LOOP OVER NTERMS DO 119 NT=1,NTERM(K) TAUV(1,K,NT)=0.0 DO 119 J=1,NLAYER TAUV(J+1,K,NT)=TAUV(J,K,NT)+DTAUV(J,K,NT) 119 CONTINUE C IF (IPRINT .GT. 1) THEN WRITE (6,120) 120 FORMAT(///' OPTICAL CONSTANTS IN THE VISIBLE ') DO 200 K=1,NSPECV WRITE (6,190) WRITE (6,210)K,WLNV(K),WNOV(K),BWNV(K) & ,BWNV(K)+DWNV(K),DWNV(K) WRITE (6,230)REALV(K),XIMGV(K) DO 195 J=1,NLAYER C RECALCULATE FOR PRINT OUT ONLY, ONLY FIRST NTERM WRITE (6,220)XNUMB(J), WBARV(J,K,NT),COSBV(J,K,NT) & ,DTAUV(J,K,NT),TAUV(J,K,NT) 195 CONTINUE WRITE (6,240) TAUV(NLEVEL,K,NT) 200 CONTINUE END IF 210 FORMAT(1X,I3,F10.3,F10.2,F10.2,'-',F8.2,F10.3) 190 FORMAT(1X//' SNUM MICRONS WAVENU INTERVAL DELTA-WN') 230 FORMAT(1X,'NREAL(LAYER)= ',1PE10.3,' NIMG(LAYER)= ',E10.3/ &' #AEROSOLS WBAR COSBAR DTAU TAU' & ,9X,'RAY GAS AEROSOL') 220 FORMAT(8(1X,G9.3)) 240 FORMAT(41X,G9.3) RETURN END SUBROUTINE SFLUXV(IPRINT) PARAMETER (NLAYER=30,NLEVEL=31) PARAMETER (NSPECV=24,NSPC1V=25) COMMON /VISGAS/SOLARF(NSPECV),NTERM(NSPECV),PEXPON(NSPECV), & ATERM(4,NSPECV),BTERM(4,NSPECV) COMMON /OPTICV/ DTAUV(NLAYER,NSPECV,4),TAUV(NLEVEL,NSPECV,4) & ,WBARV(NLAYER,NSPECV,4), COSBV(NLAYER,NSPECV,4) COMMON /SPECTV/ BWNV(NSPC1V),WNOV(NSPECV),DWNV(NSPECV) & ,WLNV(NSPECV) COMMON /FLUXV/ FNETV(NLEVEL), FUPV(NLEVEL,NSPECV), & FDV(NLEVEL,NSPECV), FMNETV(NLEVEL),FMUPV(NLEVEL),FMDV(NLEVEL) COMMON /PLANT/ CSUBP,RSFI,RSFV,F0PI COMMON /UBARED/ UBARI,UBARV,UBAR0 DIMENSION FUW(NLEVEL),FDW(NLEVEL) C ZERO THE NET FLUXES DO 212 J=1,NLEVEL FNETV(J)=-0. FMNETV(J)=-0. 212 CONTINUE C C WE NOW ENTER A MAJOR LOOP OVER SPECRAL INTERVALS IN THE VISIBLE C TO CALCULATE THE NET FLUX IN EACH SPECTRAL INTERVAL C C*************************************************************** DO 500 K=1,NSPECV C ZERO THE SPECTRAL FLUXES IN ANTCIPATION OF SUMMING OVER NTERMS DO 214 J=1,NLEVEL FUPV(J,K)=0. FDV(J,K)=0. 214 CONTINUE C C SET UP THE UPPER AND LOWER BOUNDARY CONDITIONS ON THE VISIBLE F0PI=SOLARF(K) BTOP=0.0 C C LOOP OVER THE NTERMS BEGINING HERE DO 912 NT=1,NTERM(K) BSURF=0.+ RSFV*UBAR0*F0PI*EXP(-TAUV(NLEVEL,K,NT)/UBAR0) C C* WE CAN NOW SOLVE FOR THE COEFFICIENTS OF THE TWO STREAM C CALL A SUBROUTINE THAT SOLVES FOR THE FLUX TERMS C WITHIN EACH INTERVAL AT THE MIDPOINT WAVENUMBER C C FUW AND FDW ARE WORKING FLUX ARRAYS THAT WILL BE USED TO C RETURN FLUXES FOR A GIVEN NT C C23456789012345678901234567890123456789012345678901234567890123456789012 CALL GFLUXV(NLEVEL,WNOV(K),DTAUV(1,K,NT),TAUV(1,K,NT), & WBARV(1,K,NT),COSBV(1,K,NT),F0PI,RSFV,BTOP,BSURF,FUW,FDW,FMUPV, & FMDV,IPRINT) C C NOW CALACULTE THE CUMULATIVE VISIBLE NET FLUX DO 300 J=1,NLEVEL FMNETV(J)=FMNETV(J)+( FMUPV(J)-FMDV(J) )*ATERM(NT,K) FNETV(J)=FNETV(J)+( FUW(J)-FDW(J) )*ATERM(NT,K) C AND THE SPECTRAL FLUXES SUMMED OVER THE NTERMS FUPV(J,K)=FUPV(J,K)+FUW(J)*ATERM(NT,K) FDV(J,K)=FDV(J,K)+FDW(J)*ATERM(NT,K) 300 CONTINUE C C 912 CONTINUE 500 CONTINUE C*** END OF MAJOR SPECTRAL INTERVAL LOOP IN THE VISIBLE***** RETURN END SUBROUTINE SFLUXI(IPRINT) PARAMETER (NLAYER=30,NLEVEL=31) PARAMETER (NSPECI=46,NSPC1I=47) COMMON /ATM/ Z(NLEVEL),PRESS(NLEVEL),DEN(NLEVEL),TEMP(NLEVEL) COMMON /OPTICI/ DTAUI(NLAYER,NSPECI),TAUI(NLEVEL,NSPECI) & ,WBARI(NLAYER,NSPECI), COSBI(NLAYER,NSPECI) COMMON /SPECTI/ BWNI(NSPC1I),WNOI(NSPECI),DWNI(NSPECI) & ,WLNI(NSPECI) COMMON /FLUXI/ FNETI(NLEVEL), FUPI(NLEVEL,NSPECI), & FDI(NLEVEL,NSPECI),FMNETI(NLEVEL),FMUPI(NLEVEL),FMDI(NLEVEL) COMMON /PLANT/ CSUBP,RSFI,RSFV,F0PI COMMON /UBARED/ UBARI,UBARV,UBAR0 DATA PI/3.14159265358979323846/ CC ZERO THE NET FLUXES DO 212 J=1,NLEVEL FNETI(J)=0. FMNETI(J)=0. 212 CONTINUE C C WE NOW ENTER A MAJOR LOOP OVER SPECRAL INTERVALS IN THE INFRARED C TO CALCULATE THE NET FLUX IN EACH SPECTRAL INTERVAL C C*************************************************************** DO 501 K=1,NSPECI C C SET UP THE UPPER AND LOWER BOUNDARY CONDITIONS ON THE IR C CALCULATE THE DOWNWELLING RADIATION AT THE TOP OF THE MODEL C OR THE TOP LAYER WILL COOL TO SPACE UNPHYSICALLY TTOP=TEMP(1) TAUTOP=TAUI(NLEVEL,K)*PTOP/P0 BTOP=(1. - EXP(-TAUTOP/UBARI))*PLANCK(WNOI(K),TTOP,DWNI(K)) btop=0. C SURFACE EMISSIONS TSURF=TEMP(NLEVEL) BSURF=PLANCK( WNOI(K), TSURF, DWNI(K) ) C* WE CAN NOW SOLVE FOR THE COEFFICIENTS OF THE TWO STREAM C CALL A SUBROUTINE THAT SOLVES FOR THE FLUX TERMS C WITHIN EACH INTERVAL AT THE MIDPOINT WAVENUMBER C C CALL GFLUXI(NLEVEL,TEMP,WNOI(K),DWNI(K),DTAUI(1,K),WBARI(1,K) & ,COSBI(1,K),RSFI,BTOP,BSURF,FUPI(1,K),FDI(1,K), & FMUPI,FMDI,IPRINT) C C NOW CALACULTE THE CUMULATIVE IR NET FLUX DO J=1,NLEVEL C CORRECT FOR THE WAVENUMBER INTERVALS FMNETI(J)=FMNETI(J)+( FMUPI(J)-FMDI(J) )*DWNI(K) FNETI(J)=FNETI(J)+( FUPI(J,K)-FDI(J,K) )*DWNI(K) ENDDO C 501 CONTINUE C*** END OF MAJOR SPECTRAL INTERVAL LOOP IN THE INFRARED**** RETURN END SUBROUTINE GFLUXI(NLL,TEMP,WAVEN,DW,DTAU,W0,COSBAR & ,RSF,BTOP,BSURF,FP,FM,FMIDP,FMIDM,IPRINT) PARAMETER (NL=35) C* THIS SUBROUTINE TAKES THE OPTICAL CONSTANTS AND BOUNDARY CONDITONS C FOR THE INFRARED FLUX AT ONE WAVELENGTH AND SOLVES FOR THE FLUXES AT C THE LEVELS. THIS VERSION IS SET UP TO WORK WITH LAYER OPTICAL DEPTHS C MEASURED FROM THE TOP OF EACH LAEYER. THE TOP OF EACH LAYER HAS C OPTICAL DEPTH ZERO. IN THIS SUB LEVEL N IS ABOVE LAYER N. THAT IS LAYER N C HAS LEVEL N ON TOP AND LEVEL N+1 ON BOTTOM. OPTICAL DEPTH INCREASES C FROM TOP TO BOTTOM. SEE C.P. MCKAY, TGM NOTES. REAL LAMDA REAL*8 GAMA,CP,CM,CPM1,CMM1,E1,E2,E3,E4,B81,B82,R81,XK1,XK2 REAL*8 EM,EP COMMON /UBARED/ UBARI,UBARV,UBAR0 DIMENSION TEMP(1),W0(1),COSBAR(1),DTAU(1),FM(1),FP(1) & ,FMIDP(1),FMIDM(1) DIMENSION B0(NL),B1(NL),ALPHA(NL),LAMDA(NL),XK1(NL),XK2(NL) DIMENSION GAMA(NL),CP(NL),CM(NL),CPM1(NL),CMM1(NL) &,E1(NL),E2(NL),E3(NL),E4(NL) DATA PI/3.14159265358979323846/ C WE GO WITH THE HEMISPHERIC CONSTANT APPROACH NLAYER=NLL-1 DO 20 J=1,NLAYER ALPHA(J)=SQRT( (1.-W0(J))/(1.-W0(J)*COSBAR(J)) ) LAMDA(J)=ALPHA(J)*(1.-W0(J)*COSBAR(J))/UBARI B1(J)=(PLANCK(WAVEN,TEMP(J+1),DW) - PLANCK(WAVEN,TEMP(J),DW)) & /(DTAU(J)) B0(J)=PLANCK(WAVEN,TEMP(J),DW) 20 CONTINUE DO 7 J=1,NLAYER GAMA(J)=(1-ALPHA(J))/(1.+ALPHA(J)) TERM=UBARI/(1.-W0(J)*COSBAR(J)) C* CP AND CM ARE THE CPLUS AND CMINUS TERMS EVALUATED AT THE C BOTTOM OF THE LAYER. THAT IS AT DTAU OPTICAL DEPTH CP(J)=B0(J)+B1(J)*DTAU(J) +B1(J)*TERM CM(J)=B0(J)+B1(J)*DTAU(J) -B1(J)*TERM C* CPM1 AND CMM1 ARE THE CPLUS AND CMINUS TERMS EVALUATED C AT THE TOP OF THE LAYER, THAT IS ZERO OPTICAL DEPTH CPM1(J)=B0(J)+B1(J)*TERM CMM1(J)=B0(J)-B1(J)*TERM 7 CONTINUE C* C* NOW CALCULATE THE EXPONTNEIAL TERMS NEEDED C* FOR THE TRIDIAGONAL ROTATED LAYERED METHOD C* WARNING IF DTAU(J) IS GREATER THAN ABOUT 35 C* WE CLIPP IT TO AVOID OVERFLOW. C* EXP (TAU) - EXP(-TAU) WILL BE NONSENSE THIS IS C* CORRECTED IN THE DSOLVER ROUTINE. ?FLAG? DO 8 J=1,NLAYER C IF (LAMDA(J)*DTAU(J) .GE. 35.) WRITE(6,109) J,LAMDA(J)*DTAU(J) C 109 FORMAT(' WATCHOUT FROM GFLUXI, DTAU .GT. 35:',I5,F20.4) EP=EXP(35.) C* NEED TO CLIPP THE EXPONENTIAL HERE. IF ( LAMDA(J)*DTAU(J) .LT. 35. ) EP=EXP(LAMDA(J)*DTAU(J)) EM=1.0/EP E1(J)=EP+GAMA(J)*EM E2(J)=EP-GAMA(J)*EM E3(J)=GAMA(J)*EP+EM E4(J)=GAMA(J)*EP-EM 8 CONTINUE C B81=BTOP B82=BSURF R81=RSF CALL DSOLVER(NLAYER,GAMA,CP,CM,CPM1,CMM1 & ,E1,E2,E3,E4,BTOP,BSURF,RSF,XK1,XK2) C C EVALUATE THE NLEVEL FLUXES THROUGH THE NLAYER LAYERS C USE THE TOP (TAU=0) OPTICAL DEPTH EXPRESSIONS TO EVALUATE FP AND FM C AT THE THE TOP OF EACH LAYER,J = LEVEL J DO 50 J=1,NLAYER FP(J)=XK1(J) + GAMA(J)*XK2(J) + CPM1(J) FM(J)=GAMA(J)*XK1(J) + XK2(J) + CMM1(J) 50 CONTINUE C USE EXPRESSION FOR BOTTOM FLUX TO GET THE FP AND FM AT NLEVEL J=NLAYER EP=EXP(35.) C* NEED TO CLIPP THE EXPONENTIAL HERE. IF ( LAMDA(J)*DTAU(J) .LT. 35. ) EP=EXP(LAMDA(J)*DTAU(J)) EM=1.0/EP FP(J+1)=XK1(J)*EP + GAMA(J)*XK2(J)*EM + CP(J) FM(J+1)=XK1(J)*EP*GAMA(J) + XK2(J)*EM + CM(J) C TO GET THE FLUX WE NEED TO INTERGRATE OVER THE HEMISPHERE C UBARI = .5 IS HEMISPHERIC CONSTANT C UBARI = SQRT(3) IS GAUSS QUADRATURE DO 60 J=1,NLL FP(J)=FP(J)*2.*PI*UBARI FM(J)=FM(J)*2.*PI*UBARI 60 CONTINUE C C NOW WE CALCULATE THE FLUXES AT THE MIDPOINTS OF THE LAYERS. C DO 1982 J=1,NLAYER EP=EXP(35.) C* NEED TO CLIPP THE EXPONENTIAL HERE. IF (0.5*LAMDA(J)*DTAU(J) .LT. 35.)EP=EXP(0.5*LAMDA(J)*DTAU(J)) EM=1.0/EP TERM=UBARI/(1.-W0(J)*COSBAR(J)) C* CP AND CM ARE THE CPLUS AND CMINUS TERMS EVALUATED AT THE C BOTTOM OF THE LAYER. THAT IS AT DTAU OPTICAL DEPTH CPMID=B0(J)+B1(J)*0.5*DTAU(J) +B1(J)*TERM CMMID=B0(J)+B1(J)*0.5*DTAU(J) -B1(J)*TERM FMIDP(J)=XK1(J)*EP + GAMA(J)*XK2(J)*EM + CPMID FMIDM(J)=XK1(J)*EP*GAMA(J) + XK2(J)*EM + CMMID C TO GET THE FLUX WE NEED TO INTERGRATE OVER THE HEMISPHERE C UBARI = .5 IS HEMISPHERIC CONSTANT C UBARI = SQRT(3) IS GAUSS QUADRATURE FMIDP(J)=FMIDP(J)*2.*PI*UBARI FMIDM(J)=FMIDM(J)*2.*PI*UBARI 1982 CONTINUE IF (IPRINT .LT. 10) RETURN WRITE(6,601)RSF,BTOP,BSURF TAU=0. DO 120 J=1,NLAYER WRITE (6,301) TEMP(J),TAU,FP(J),FM(J),DTAU(J),W0(J),COSBAR(J) & ,ALPHA(J), LAMDA(J),B0(J),B1(J) TAU=TAU+DTAU(J) 120 CONTINUE J=NLL WRITE (6,301) TEMP(J),TAU,FP(J),FM(J) WRITE (6,602) DO 130 J=1,NLAYER WRITE (6,301) CP(J),CM(J),E1(J),E2(J),E3(J),E4(J),CPM1(J) & ,CMM1(J),GAMA(J) 130 CONTINUE 301 FORMAT(1X,1P13E10.3) 602 FORMAT(' CP(J),CM(J),E1(J),E2(J),EM1(J),EM2(J),CPM1(J),CMM1(J)' & ,',GAMA(J)') 601 FORMAT(1X,'RSF,BTOP,BSURF= ',1P3E10.3,/ & ' TEMP(J),TAU,FUP,FDOWN,DTAU(J),W0(J),COSBAR(J)' & ,',ALPHA(J),LAMDA(J),B0(J),B1(J)') C C.P. McKAY C234567..............................................................012 C******************************************************* RETURN END SUBROUTINE GFLUXV(NTODO,WAVEN,DTDEL,TDEL,WDEL,CDEL & , F0PI,RSF,BTOP,BSURF,FP,FM,FMIDP,FMIDM,IPRINT) PARAMETER (NL=101) C ?FLAG? THIS VALUE (101) MUST BE .GE. NTODO C* THIS SUBROUTINE TAKES THE OPTICAL CONSTANTS AND BOUNDARY CONDITONS C FOR THE VISIBLE FLUX AT ONE WAVELENGTH AND SOLVES FOR THE FLUXES AT C THE LEVELS. THIS VERSION IS SET UP TO WORK WITH LAYER OPTICAL DEPTHS C MEASURED FROM THE TOP OF EACH LAEYER. (DTAU) TOP OF EACH LAYER HAS C OPTICAL DEPTH TAU(N).IN THIS SUB LEVEL N IS ABOVE LAYER N. THAT IS LAYER N C HAS LEVEL N ON TOP AND LEVEL N+1 ON BOTTOM. OPTICAL DEPTH INCREASES C FROM TOP TO BOTTOM. SEE C.P. MCKAY, TGM NOTES. C THIS SUBROUTINE DIFFERS FROM ITS IR CONTERPART IN THAT HERE WE SOLVE FOR C THE FLUXES DIRECTLY USING THE GENERALIZED NOTATION OF MEADOR AND WEAVOR C J.A.S., 37, 630-642, 1980. REAL LAMDA REAL*8 GAMA,CP,CM,CPM1,CMM1,E1,E2,E3,E4,B81,B82,R81,XK1,XK2 REAL*8 EM,EP COMMON /UBARED/ UBARI,UBARV,UBAR0 C THIS NEXT ROW OF VARIABLES ARE THOSE ACTUALLY USED IN THE C ROUTINE DIMENSION W0(NL), COSBAR(NL),DTAU(NL),TAU(NL) DIMENSION WDEL(1),CDEL(1), DTDEL(1),TDEL(1),FM(1),FP(1) & ,FMIDM(1),FMIDP(1) DIMENSION ALPHA(NL),LAMDA(NL),XK1(NL),XK2(NL) DIMENSION G1(NL),G2(NL),G3(NL) DIMENSION GAMA(NL),CP(NL),CM(NL),CPM1(NL),CMM1(NL) &,E1(NL),E2(NL),E3(NL),E4(NL),EXPTRM(NL) DATA PI/3.14159265358979323846/ DATA IDELTA/1/ NAYER=NTODO-1 C TURN ON THE DELTA-FUNCTION IF REQUIRED HERE IF (IDELTA .EQ. 0) THEN DO J=1,NAYER W0(J)=WDEL(J) COSBAR(J)=CDEL(J) DTAU(J)=DTDEL(J) TAU(J)=TDEL(J) ENDDO TAU(NTODO)=TDEL(NTODO) ELSE C FOR THE DELTA FUNCTION HERE... TAU(1)=TDEL(1)*(1.-WDEL(1)*CDEL(1)**2) DO J=1,NAYER W0(J)=WDEL(J)*(1.-CDEL(J)**2)/(1.-WDEL(J)*CDEL(J)**2) COSBAR(J)=CDEL(J)/(1.+CDEL(J)) DTAU(J)=DTDEL(J)*(1.-WDEL(J)*CDEL(J)**2) TAU(J+1)=TAU(J)+DTAU(J) ENDDO ENDIF C WE GO WITH THE HEMISPHERIC CONSTANT APPROACH C AS DEFINED BY M&W - THIS IS THE WAY THE IR IS DONE DO 20 J=1,NAYER ALPHA(J)=SQRT( (1.-W0(J))/(1.-W0(J)*COSBAR(J)) ) C THIS SET OF G'S IS FOR THE TWO STREAM HEMI-CONSTANT C G1(J)=(1.-W0(J)*0.5*(1.+COSBAR(J)))/UBARV C G2(J)=W0(J)*0.5*(1.-COSBAR(J))/UBARV C G3(J)=0.5*(1.-COSBAR(J)) C SET OF CONSTANTS DETERMINED BY DOM G1(J)= (SQRT(3.)*0.5)*(2. - W0(J)*(1.+COSBAR(J))) G2(J)= (SQRT(3.)*W0(J)*0.5)*(1.-COSBAR(J)) G3(J)=0.5*(1.-SQRT(3.)*COSBAR(J)*UBAR0) LAMDA(J)=SQRT(G1(J)**2 - G2(J)**2) GAMA(J)=(G1(J)-LAMDA(J))/G2(J) 20 CONTINUE DO 7 J=1,NAYER G4=1.-G3(J) DENOM=LAMDA(J)**2 - 1./UBAR0**2 C THERE IS A PONTENTIAL PROBLEM HERE IF W0=0 AND UBARV=UBAR0 C THEN DENOM WILL VANISH. THIS ONLY HAPPENS PHYSICALLY WHEN C THE SCATTERING GOES TO ZERO?? C PREVENT THIS WITH A IF STATEMENT IF ( DENOM .EQ. 0.) THEN DENOM=1.E-10 WRITE (6,99) 99 FORMAT (' DENOM ZERO; RESET IN GFLUXV, W0=0?') END IF AM=F0PI*W0(J)*(G4 *(G1(J)+1./UBAR0) +G2(J)*G3(J) )/DENOM AP=F0PI*W0(J)*(G3(J)*(G1(J)-1./UBAR0) +G2(J)*G4 )/DENOM C* CPM1 AND CMM1 ARE THE CPLUS AND CMINUS TERMS EVALUATED C AT THE TOP OF THE LAYER, THAT IS LOWER OPTICAL DEPTH TAU(J) CPM1(J)=AP*EXP(-TAU(J)/UBAR0) CMM1(J)=AM*EXP(-TAU(J)/UBAR0) C* CP AND CM ARE THE CPLUS AND CMINUS TERMS EVALUATED AT THE C BOTTOM OF THE LAYER. THAT IS AT HIGHER OPTICAL DEPTH TAU(J+1) CP(J)=AP*EXP(-TAU(J+1)/UBAR0) CM(J)=AM*EXP(-TAU(J+1)/UBAR0) 7 CONTINUE C* C* NOW CALCULATE THE EXPONTNEIAL TERMS NEEDED C* FOR THE TRIDIAGONAL ROTATED LAYERED METHOD C* WARNING IF DTAU(J) IS GREATER THAN ABOUT 35 C* WE CLIPP IT TO AVOID OVERFLOW. C* EXP (TAU) - EXP(-TAU) WILL BE NONSENSE THIS IS C* CORRECTED IN THE DSOLVER ROUTINE. ?FLAG? DO J=1,NAYER EXPTRM(J)=35. IF ( LAMDA(J)*DTAU(J) .LT. 35. ) EXPTRM(J)=LAMDA(J)*DTAU(J) ENDDO C* NEED TO CLIPP THE EXPONENTIAL HERE. DO 8 J=1,NAYER EP=EXP(EXPTRM(J)) EM=1.0/EP E1(J)=EP+GAMA(J)*EM E2(J)=EP-GAMA(J)*EM E3(J)=GAMA(J)*EP+EM E4(J)=GAMA(J)*EP-EM 8 CONTINUE C B81=BTOP B82=BSURF R81=RSF CALL DSOLVER(NAYER,GAMA,CP,CM,CPM1,CMM1 & ,E1,E2,E3,E4,B81,B82,R81,XK1,XK2) C C EVALUATE THE NTODO FLUXES THROUGH THE NAYER LAYERS C USE THE TOP (TAU=0) OPTICAL DEPTH EXPRESSIONS TO EVALUATE FP AND FM C AT THE THE TOP OF EACH LAYER,J = LEVEL J DO 46 J=1,NAYER FP(J)= XK1(J) + GAMA(J)*XK2(J) + CPM1(J) FM(J)=GAMA(J)*XK1(J) + XK2(J) + CMM1(J) 46 CONTINUE C USE EXPRESSION FOR BOTTOM FLUX TO GET THE FP AND FM AT NTODO J=NAYER EP=EXP(EXPTRM(J)) EM=1.0/EP FP(J+1)=XK1(J)*EP + GAMA(J)*XK2(J)*EM + CP(J) FM(J+1)=XK1(J)*EP*GAMA(J) + XK2(J)*EM + CM(J) C NOTE THAT WE HAVE SOLVED FOR THE FLUXES DIRECTLY AND NO C FURTHER INTEGRATION IS NEEDED, THE UBARV TERM IS ABSORBED C INTO THE DEFINITION OF G1 THU G4 C UBARV = .5 IS HEMISPHERIC CONSTANT C UBARV = SQRT(3) IS GAUSS QUADRATURE C AND OTHER CASES AS PER MEADOR AND WEAVOR, JAS, 37, 630-643,1980. C C ADD THE DIRECT FLUX TERM TO THE DOWNWELLING RADIATION, LIOU 182 DO 80 J=1,NTODO FM(J)=FM(J)+UBAR0*F0PI*EXP(-TAU(J)/UBAR0) 80 CONTINUE C C NOW WE CALCULATE THE FLUXES AT THE MIDPOINTS OF THE LAYERS. C EXACLTY ANALOGOUS TO THE ABOVE COMPUTATION C DO 1982 J=1,NAYER EP=EXP(0.5*EXPTRM(J)) EM=1.0/EP G4=1.-G3(J) DENOM=LAMDA(J)**2 - 1./UBAR0**2 C THERE IS A PONTENTIAL PROBLEM HERE IF W0=0 AND UBARV=UBAR0 C THEN DENOM WILL VANISH. THIS ONLY HAPPENS PHYSICALLY WHEN C THE SCATTERING GOES TO ZERO?? C PREVENT THIS WITH A IF STATEMENT IF ( DENOM .EQ. 0.) THEN DENOM=1.E-10 WRITE (6,78) 78 FORMAT (' DENOM ZERO; RESET IN GFLUXV, W0=0?') END IF AM=F0PI*W0(J)*(G4 *(G1(J)+1./UBAR0) +G2(J)*G3(J) )/DENOM AP=F0PI*W0(J)*(G3(J)*(G1(J)-1./UBAR0) +G2(J)*G4 )/DENOM C* CPMID AND CMMID ARE THE CPLUS AND CMINUS TERMS EVALUATED C AT THE MIDDLE OF THE LAYER, THAT IS LOWER OPTICAL DEPTH TAU(J)+ TAUMID= (TAU(J)+0.5*DTAU(J) ) CPMID=AP*EXP(-TAUMID/UBAR0) CMMID=AM*EXP(-TAUMID/UBAR0) FMIDP(J)=XK1(J)*EP + GAMA(J)*XK2(J)*EM + CPMID FMIDM(J)=XK1(J)*EP*GAMA(J) + XK2(J)*EM + CMMID C ADD THE DIRECT FLUX TO THE DOWNWELLING TERM FMIDM(J)= FMIDM(J) +UBAR0*F0PI*EXP(-TAUMID/UBAR0) 1982 CONTINUE C** NOW PRINTOUT IF NECESSARY IF (IPRINT .LT. 9) RETURN WRITE(6,601) F0PI,RSF,BTOP,BSURF DO 120 J=1,NAYER WRITE (6,301) TAU(J),FP(J),FM(J),DTAU(J),W0(J),COSBAR(J) & ,ALPHA(J), LAMDA(J),G1(J),G2(J),G3(J) 120 CONTINUE J=NTODO WRITE (6,301) TAU(J),FP(J),FM(J) WRITE (6,602) DO 130 J=1,NAYER WRITE (6,301) CP(J),CM(J),E1(J),E2(J),E3(J),E4(J),CPM1(J) & ,CMM1(J),GAMA(J) 130 CONTINUE 301 FORMAT(1X,1P13E10.3) 602 FORMAT(' CP(J),CM(J),E1(J),E2(J),EM1(J),EM2(J),CPM1(J),CMM1(J)' & ,',GAMA(J)') 601 FORMAT(1X,'F0PI,RSF,BTOP,BSURF= ',1P4E10.3,/ & ' TAU,FUP,FDOWN,DTAU(J),W0(J),COSBAR(J)' & ,',ALPHA(J),LAMDA(J),G1,G2,G3') C********************************************************************012 RETURN END FUNCTION AVERGE(X,Y) AVERGE = .5*SQRT(X*Y)+0.25*(X+Y) RETURN END SUBROUTINE PIA(K,TBAR,PNN,PCC,PCN,PHN) PARAMETER (NSPECI=46, NTEMPS=14) REAL*8 PIANN,PIACC,PIACN,PIAHN COMMON /PIAC/ PIANN(NSPECI,NTEMPS),PIACC(NSPECI,NTEMPS) & ,PIACN(NSPECI,NTEMPS),PIAHN(NSPECI,NTEMPS),TMIN,TMAX TD=(TMAX-TMIN)/(NTEMPS-1) IF (TBAR .LT. TMIN) TBAR=TMIN IF (TBAR .GT. TMAX) TBAR=TMAX DO 100 I=1,NTEMPS T=TMIN + (I-1)*TD IF (TBAR .GT. T) GO TO 100 FACTOR= (T-TBAR)/TD PNN= PIANN(K,I) - FACTOR*(PIANN(K,I)-PIANN(K,I-1)) PCC= PIACC(K,I) - FACTOR*(PIACC(K,I)-PIACC(K,I-1)) PCN= PIACN(K,I) - FACTOR*(PIACN(K,I)-PIACN(K,I-1)) PHN= PIAHN(K,I) - FACTOR*(PIAHN(K,I)-PIAHN(K,I-1)) RETURN 100 CONTINUE RETURN END SUBROUTINE SETPIA(IPRINT,IFLAG) PARAMETER (NSPECI=46,NSPC1I=47, NTEMPS=14) REAL*8 PIANN,PIACC,PIACN,PIAHN,T,W COMMON /PIAC/ PIANN(NSPECI,NTEMPS),PIACC(NSPECI,NTEMPS) & ,PIACN(NSPECI,NTEMPS),PIAHN(NSPECI,NTEMPS),TMIN,TMAX COMMON /SPECTI/ BWNI(NSPC1I),WNOI(NSPECI),DWNI(NSPECI) & ,WLNI(NSPECI) DIMENSION T(NTEMPS),W(NSPECI) DATA TMAX,TMIN/190.,60./ DO 11 K=1,NSPECI DO 11 NT=1,NTEMPS PIANN(K,NT)=0.0 PIACC(K,NT)=0.0 PIACN(K,NT)=0.0 PIAHN(K,NT)=0.0 11 CONTINUE NWAVES=NSPECI DO 99 INU=1,NSPECI W(INU)=WNOI(INU) IF (WNOI(INU) .LT. 1000.) GOTO 99 NWAVES=INU-1 GO TO 991 99 CONTINUE 991 CONTINUE DT=(TMAX-TMIN)/(NTEMPS-1) DO 12 I=1,NTEMPS T(I)=TMIN + (I-1)*DT 12 CONTINUE CALL REGIS (W,NSPECI,NWAVES,T,NTEMPS,NTEMPS, & PIANN,PIACC,PIACN,PIAHN) RETURN CC TO BE DELETED... 1234 NT=NTEMPS NNU=NSPECI WRITE(6,101) 101 FORMAT(/55X,'N2-N2 ABSORPTION'//) WRITE(6,100) (T(IT),IT=1,NT) 100 FORMAT(2X,'NU\T',13F9.0/) DO 3 INU=1,NNU 3 WRITE(6,110) WNOI(INU),(PIANN(INU,IT),IT=1,NT) WRITE(6,103) 103 FORMAT(/55X,'CH4-CH4 ABSORPTION'//) WRITE(6,100) (T(IT),IT=1,NT) DO 5 INU=1,NNU 5 WRITE(6,110) WNOI(INU),(PIACC(INU,IT),IT=1,NT) WRITE(6,105) 105 FORMAT(/50X,'N2-CH4 + CH4-N2 ABSORPTION'//) DO 7 INU=1,NNU 7 WRITE(6,110) WNOI(INU),(PIACN(INU,IT),IT=1,NT) WRITE(6,102) 102 FORMAT(/55X,'N2-H2 + H2-N2 ABSORPTION'//) WRITE(6,100) (T(IT),IT=1,NT) DO 4 INU=1,NNU 4 WRITE(6,110) WNOI(INU),(PIAHN(INU,IT),IT=1,NT) 110 FORMAT(1X,F5.0,2X,13(1PD9.2)) RETURN END FUNCTION FITEDN(WAVELN) C THIS FUNCTION USESS THE OUTPUT FROM THE GEOMETRIC C ALBEDO FITTING PROGRAM TO DERIVE A SET OF C INDECIES OF REFRACTION FOR THE HAZE IN THE VISIBLE DIMENSION W(7),XK(7) REWIND 021 DO K=1,7 READ (21,*) W(K),XK(K) ENDDO IF (WAVELN .LT. W(1)) THEN CALL THOLIN(W(1),R1,XI1) CALL THOLIN(WAVELN,R,XI) FITEDN=XI*XK(1)/XI1 RETURN ELSE IF (WAVELN .GE. W(7)) THEN FITEDN=XK(7) RETURN ELSE C ALL INTERPOLATION IS IN LOG LAMBDA DO 100 I=2,7 IF (WAVELN .LT. W(I) ) GO TO 101 100 CONTINUE 101 CONTINUE C ALL INTERPOLATION IS IN LOG LAMBDA FACTOR= (alog(WAVELN) - alog(W(I)) ) / (alog(W(I-1)) - alog(W(I))) C IMAGINARY PART IS LOG INTERPOLATED XNI=alog(XK(I)) + FACTOR*(alog(XK(I-1)) - alog(XK(I))) FITEDN=exp(XNI) RETURN ENDIF ENDIF END SUBROUTINE HAZE2(IPRINT,NINPUT,Z2,R2,XNUMB2) C THIS ROUTINE SETS UP THE AEROSOL DISTRIBUTION C PARAMETER (NLHAZE=50) COMMON /ADJUST/ RHCH4,FH2,FHAZE,FHVIS,FHIR,TAUFAC,RCLOUD,FARGON DIMENSION Z(NLHAZE),DENH(NLHAZE),PRESS(NLHAZE),TEMP(NLHAZE) DIMENSION CH4(NLHAZE),XN2(NLHAZE),H2(NLHAZE),AR(NLHAZE) & ,XMU(NLHAZE) DIMENSION RADIUS(NLHAZE), XNUMB(NLHAZE) ,TAU(NLHAZE) DIMENSION PROD(NLHAZE) DIMENSION Z2(1),R2(1),XNUMB2(1) DATA PI/3.1415926535/ NLEVEL=NLHAZE C C* SET UP BACKGROUNG ATMOSHPERE C FAC IS THE RATIO BETWEEN GRID SPACING TOP/BOTTOM (1 IS EVEN) FAC=5. ZTOP=670. ZTOP1=635. C IP=IPRINT-3 CALL ZGRID(NLEVEL,FAC,ZTOP,ZTOP1,Z) CALL ATMSETUP(NLEVEL,Z,RHCH4,FH2,FARGON,TEMP,PRESS,DENH,XMU, & CH4,H2,XN2,AR,IP) C C C C LETS REDEFINE THE AEROSOLS BASED ON THE MCKAY SIMPLE C AEROSOL MODEL... SEE NOTES C PRODUCTION PROFILE FROM TOON ET AL. (1980) XKB=1.380E-16 RHOH=1. PX=1.E-7 RCRIT=0.09E-4 PY=PX*EXP(-1.124) C C DO 500 J=1,NLEVEL 500 PROD(J)=FHAZE*2.E-7*3.5E-14*EXP(-0.5*( (PRESS(J)-PX)/PY)**2) C C DUE TO NOLINEAR AVERAGEING WE NEED TO DETERMINE THE TOTAL C COLUMN PRODUCTION NUMERICALLY, AND ITERATIVELY DO ITS=1,4 CLEVEL=0.0 DO J=2,NLEVEL PRODMID=AVERGE( PROD(J),PROD(J-1) ) CLEVEL=CLEVEL+PRODMID*(Z(J-1)-Z(J))*1E5 ENDDO FACTOR=FHAZE*3.5E-14/CLEVEL C C SCALE THE RESULTS TO ADJUST THE PRODUCTION RATE DO J=1,NLEVEL PROD(J)=PROD(J)*FACTOR ENDDO CC ENDDO C TAU(1)=0. IFLAG=0. IA=6 IF (IPRINT .GT. 2) WRITE(IA,389) 389 FORMAT('1 LVL ALT PRESS TAU(.64) PROD CUM-PROD' &,' DEN FALL-V R (CM)') C......... DO 501 J=1,NLEVEL GASDEN=1.E6*PRESS(J)/(XKB*TEMP(J)) EG = 100.*EFFG(Z(J)) XMASS=XMU(J)/6.022E23 B=EG*RHOH*0.5*SQRT(PI/(2.*XMASS*XKB*TEMP(J)))/GASDEN COAG=4.*SQRT(3.*XKB*TEMP(J)/RHOH) IF (J .GT. 1 ) THEN PRODMID=AVERGE( PROD(J),PROD(J-1) ) CMID=CLEVEL+0.5*PRODMID*(Z(J-1)-Z(J))*1E5 CLEVEL=CLEVEL+PRODMID*(Z(J-1)-Z(J))*1E5 C DO THE STOKES LIMIT ADJUSTMENT C AS DISCRIBED IN WRITE UP. PATH=1.689E14/GASDEN XKNUD=PATH/RAD2 ETA=1.78E-4*SQRT(TEMP(J)/300.) IK=1 IF (XKNUD .LT. 100.) THEN B= (B*XKNUD**IK + 5.4*2.*RHOH*EG*RAD2/(9.*ETA) )/(XKNUD**IK +1.) COAG=(COAG*XKNUD**IK + 4.*XKB*TEMP(J)/(3.*ETA*SQRT(RAD2))) & /(XKNUD**IK +1.) ENDIF C END OF STOKES FLOW ADJUSTMENT C C PUT IN CHARGE REDUCTION IN COAGULATION ?FLAG? COAG=COAG*EXP(-RAD2/RCRIT) C END OF CHARGE ADJUST R=( R**4.5 + ( 9.*COAG*CMID/(8.*PI*RHOH*B*B) & + 9.*SQRT(R)*PRODMID/(8.*PI*RHOH*B*DEN1)) * & (Z(J-1)-Z(J))*1.E5 )**(2./9.) DEN1=CLEVEL*3./(4.*PI*RHOH*B*R**4) C USE AVERAGEING PROCESS DENSITY AS DETERMINED IN NOTES C TO GET VALUES FOR THE LAYERS XNUMB(J-1)=AVERGE(DEN1,DEN2)*1.E5*( Z(J-1) - Z(J) ) CC ?FLAG? CHANGE THIS TO BE LEVEL VALUE SO THAT INTERPOLATON WILL CC WORK RADIUS(J)=1.E4 * R C LETS DROP OUT THE HAZE FOR ALL ALTITUDES BELOW THE CONDENSATION POINT C WITH A ADD-ON HERE. ?FLAG?? IF ( IFLAG .EQ. 1 ) XNUMB(J-1)=0.0 IF ( CH4(J)*PRESS(J)/PCH4(TEMP(J)) .GT. 0.9 ) IFLAG=1 ELSE C TOP LAYER CALCULATIONS (J .EQ. 1) CLEVEL=0.0 R= ( 9.*COAG*CLEVEL/(8.*PI*RHOH*B*B) )**(2./9.) CC BRITNESS SCALE FACTOR FOR TOP LAYER ?FLAG?? R=1.E-7 DEN1=1.*FHAZE RADIUS(1)=1.E4* R ENDIF RAD2=R DEN2=DEN1 C C CALL THE MIE CODE TO GIVE THE AEROSOL PROPERTIES AT A REF WAVELN WVLN=.64 RMICRON=R*1E4 WNO=1.E4/WVLN CALL THOLIN(WVLN,REAL,XIMG) XIMG=XIMG*FHVIS CALL XMIE(RMICRON,REAL,XIMG, & QEXT,QSCT,QABS,CBAR,WNO) DTAU=QEXT*XNUMB(J-1) TAU(J)=TAU(J-1)+DTAU C IF (IPRINT .GT. 2) & WRITE(IA,390) J,Z(J),PRESS(J),TAU(J),PROD(J),CLEVEL,DEN1,B,R 501 CONTINUE 390 FORMAT(I3,F6.0,1P7E10.2) C C NOW INTERPOLATE TO GET THE RETURNED VALUES. DO 194 I=1,NINPUT IF (Z2(I) .GT. Z(1) ) GO TO 194 J1=2 DO 195 J=J1,NLEVEL-1 IF (Z2(I) .LT. Z(J+1) )GO TO 195 FACTOR = (Z2(I) - Z(J)) / (Z(J+1) - Z(J)) XNUMB2(I)= TAU(J) + ( TAU(J+1) - TAU(J) ) * FACTOR R2(I) = RADIUS(J) + (RADIUS(J+1) - RADIUS(J) ) * FACTOR J1=J-1 GO TO 194 195 CONTINUE 194 CONTINUE C IF (IPRINT .GT. 0) THEN WRITE(6,839) 839 FORMAT('1 LVL ALT TAU(.64) R (UM) IN LAYER') WRITE(6,930) (J,Z2(J),XNUMB2(J),R2(J),J=1,NINPUT) WRITE(6,930) NINPUT+1,Z2(NINPUT+1),TAU(NLEVEL) 930 FORMAT(0PI3,F6.1,1P2E10.2) ENDIF C C NOW ADJUST THE NUMBER DEN SO THAT THE CORRECT OPACTIY IS C OBTAINED DO J=1,NINPUT-1 RMICRON=R2(J) C CALL THE MIE CODE TO GIVE THE AEROSOL PROPERTIES AT A REF WAVELN CALL XMIE(RMICRON,REAL,XIMG, & QEXT,QSCT,QABS,CBAR,WNO) XNUMB2(J)= (XNUMB2(J+1) - XNUMB2(J))/QEXT ENDDO C C?FLAG? QUICK FIX TO NLEVEL PROBLEM XNUMB2(NINPUT)=(TAU(NLEVEL)-XNUMB2(NINPUT))/QEXT RETURN END SUBROUTINE GAS2(J,K,T,P,U,TAUGAS) PARAMETER (NLAYER=30) COMMON /STRATO/ C2H2(NLAYER),C2H6(NLAYER) DIMENSION A(18),A1(18),A2(18),B(18),B1(18),B2(18) DIMENSION C(18),C1(18),C2(18) DATA P0/0.1/ C P0 IS THE REFERENCE PRESSURE USED IN FORMULA C PRESSURE IS IN BARS!!! ?FLAG? C U IS IN MOLECULES PER CM2 DATA a / &-58.07850,-73.66951,-22.00411,-26.61158,-27.04048,-25.84024, & 0.00000,-18.70291,-16.08370,-23.03309,-31.18288,-19.96538, &-24.37518,-17.94444, 0.00000,-17.46335,-20.93769,-10.74428/ DATA a1/ & 31.24782, 45.09350, 3.53728, 7.34218, 7.09808, 5.35252, & 0.00000, 1.58486, -2.62994, 2.88087, 11.38614, 0.33491, & 3.36078, -3.94288, 0.00000, -1.57041, 0.28770,-10.54978/ DATA a2/ & -6.15763, -9.47812, -0.72611, -1.73805, -1.65804, -1.23760, & 0.00000, -0.33713, 0.84310, -0.44196, -2.79135, 0.00277, & -0.60197, 1.27842, 0.00000, 0.37686, 0.08828, 2.77701/ DATA b/ & 5.27820, 2.66675, 1.31741, -5.05287, 1.88008, 4.49298, & 0.00000, -0.94667, 2.77477, 15.80634, 33.83065, -2.29512, & 2.90790, 0.77265, 0.00000, -0.95471, 3.30490, 0.43886/ DATA b1/ & -4.00372, -1.49356, -0.80081, 5.86571, -0.95994, -3.38754, & 0.00000, 1.24800, -1.75869,-13.07462,-29.97486, 2.67427, & -1.73763, 0.87904, 0.00000, 1.35597, -2.09025, 1.40393/ DATA b2/ & 0.81995, 0.32331, 0.16170, -1.42280, 0.26043, 0.87377, & 0.00000, -0.31593, 0.36935, 2.86686, 6.83669, -0.75690, & 0.24220, -0.46079, 0.00000, -0.42681, 0.32905, -0.61443/ DATA c/ & -8.99733, 6.51736, -0.54907, -4.80457, 2.83010, -2.12019, & 0.00000, -1.53211,-13.48286,-18.91273,-16.89597, -1.02362, & 0.25710, -6.27612, 0.00000, -0.56746, 0.14651, -8.53711/ DATA c1/ & 8.43865, -6.62977, 0.48722, 4.43910, -3.21534, 1.92581, & 0.00000, 1.33927, 12.54849, 17.74174, 14.03467, 0.84636, & -0.30260, 5.98928, 0.00000, 0.40909, -0.17410, 8.13665/ DATA c2/ & -1.99052, 1.64435, -0.13150, -1.02683, 0.80781, -0.49989, & 0.00000, -0.30569, -2.91842, -4.14473, -2.91521, -0.18050, & 0.06981, -1.43493, 0.00000, -0.07578, 0.03729, -1.93800/ XKV = A(K) + A1(K)*LOG10(T) + A2(K)*LOG10(T)**2 &+ LOG10(P/P0)*(B(K) + B1(K)*LOG10(T) + B2(K)*LOG10(T)**2) &+ (C(K) + C1(K)*LOG10(T) + C2(K)*LOG10(T)**2) & *LOG10(P/P0)**2 GASMIX=C2H2(J) IF (K .GT. 11) GASMIX=C2H6(J) XKV=10.**XKV C CLIP OUT THE CLEAR INTERVALS. IF (A(K) .EQ. 0.0) XKV=0.0 TAUGAS=U*GASMIX*XKV RETURN END FUNCTION FITEDT(WAVELN) C THIS FUNCTION USESS THE OUTPUT FROM THE GEOMETRIC C ALBEDO FITTING PROGRAM TO DERIVE A SET OF C INDECIES OF REFRACTION FOR THE HAZE IN THE VISIBLE DIMENSION W(7),XK(7) REWIND 021 DO K=1,7 READ (21,*) W(K),XK(K) ENDDO IF (WAVELN .LT. W(1)) THEN CALL THOLIN(W(1),R1,XI1) CALL THOLIN(WAVELN,R,XI) FITEDT=XI*XK(1)/XI1 RETURN ELSE IF (WAVELN .GE. W(7)) THEN CALL THOLIN(W(7),R1,XI1) CALL THOLIN(WAVELN,R,XI) FITEDT=XI*XK(7)/XI1 RETURN ELSE C ALL INTERPOLATION IS IN LOG LAMBDA DO 100 I=2,7 IF (WAVELN .LT. W(I) ) GO TO 101 100 CONTINUE 101 CONTINUE C ALL INTERPOLATION IS IN LOG LAMBDA FACTOR= (alog(WAVELN) - alog(W(I)) ) / (alog(W(I-1)) - alog(W(I))) C IMAGINARY PART IS LOG INTERPOLATED XNI=alog(XK(I)) + FACTOR*(alog(XK(I-1)) - alog(XK(I))) FITEDT=exp(XNI) RETURN ENDIF ENDIF END SUBROUTINE ATMTEMP(IPRINT) PARAMETER (NLAYER=30,NLEVEL=31) PARAMETER (NSPECI=46,NSPC1I=47,NSPECV=24,NSPC1V=25) COMMON /UBARED/ UBARI,UBARV,UBAR0 COMMON /ATM/ Z(NLEVEL),PRESS(NLEVEL),DEN(NLEVEL),TEMP(NLEVEL) COMMON /LAPSE/ DTDP(NLAYER),CONVEQ COMMON /GASS/ CH4(NLEVEL),XN2(NLEVEL),H2(NLEVEL),AR(NLEVEL) & ,XMU(NLEVEL),GAS1(NLAYER),COLDEN(NLAYER) COMMON /AERSOL/ RADIUS(NLAYER), XNUMB(NLAYER) & , REALI(NSPECI), XIMGI(NSPECI), REALV(NSPECV), XIMGV(NSPECV) COMMON /CLOUD/ RADCLD(NLAYER), XNCLD(NLAYER) & , RCLDI(NSPECI), XICLDI(NSPECI), RCLDV(NSPECV), XICLDV(NSPECV) COMMON /PLANT/ CSUBP,RSFI,RSFV,F0PI COMMON /ADJUST/ RHCH4,FH2,FHAZE,FHVIS,FHIR,TAUFAC,RCLOUD,FARGON COMMON /CONST/RGAS,RHOP,PI,SIGMA DIMENSION XLNP(101) DO J=1,NLEVEL XLNP(J)=ALOG(PRESS(J)) ENDDO C INPUTS: C NLEVEL: NUMBER OF ALTITUDE LEVELS, J=1 IS AT THE TOP C Z ALTITUDE GRID IN KM C RHCH4 RELATIVE HUMIDITY OF METHANE AT Z=0. C C NOTES: METHANE FOLLOWS CONSTANT MIXING RATIO UNLESS SATUARTION C VALUE IS LOWER. C C C C FIRST COMPUTE THE MEAN MOLECULAR WEIGHT AT EACH LEVEL C NOW SET UP THE MIXING RATIOS OF THE GASSES BASED ON SATURATION C CURVE OF CH4 AND SPECIFIED MEAN MOLECULAR WEIGHT AND H2 CONSTANT CH4(NLEVEL)=PCH4(TEMP(NLEVEL))*RHCH4/PRESS(NLEVEL) DO 134 J=NLEVEL-1,1,-1 CH4SAT=PCH4(TEMP(J))/PRESS(J) CH4(J)=AMIN1(CH4SAT,CH4(NLEVEL),CH4(J+1)) 134 CONTINUE C ARGON AND H2 ARE NOT CHANGED AND ASSUMED TO BE SET DO J=1,NLEVEL XN2(J)=1.0 - H2(J) - CH4(J) -AR(J) XMU(J)=28.0134*XN2(J)+2.158*H2(J)+16.0426*CH4(J)+39.948*AR(J) ENDDO C NOW THAT WE HAVE A NEW SET OF MEAN MOLECULAR WEIGHTS C WE NEED TO RECOMPUTE THE ALT GRID. C START AT THE BOTTOM LEVEL AND THEN CALCULATE THE C ALTITUDE DROP ACROSS EACH LAYER C GIVEN A T-P PROFILE CALCULATE THE HEIGHT C PRESSURE IN BARS, T IN KELVIN, XMU IN AMUS, G IN M/SS C RETURNS Z IN KILOMETERS Z(NLEVEL)=0.0 DO 130 J=NLAYER,1,-1 C WE USE THE ALTITUDE BELOW (NOT AVG) THE LAYER TO GET G, SMALL ERROR C IN THE SCALE HEIGHT H C ASSUMES EQUATION OF STATE GIVEN BY IDEAL GAS LAW. ?FLAG? C WHICH IS PROBABLY OK SINCE THE Z IS USED ONLY FOR G(Z) BETA=(TEMP(J) - TEMP(J+1))/(TEMP(J+1)*XLNP(J) - TEMP(J)*XLNP(J+1)) TO=TEMP(J)/(1. + BETA * XLNP(J)) Z(J)=Z(J+1)-(RGAS*TO/(XMU(J)*EFFG(Z(J+1))))*(XLNP(J) - XLNP(J+1)+ & 0.5*BETA*(XLNP(J)**2 - XLNP(J+1)**2) ) 130 CONTINUE C NOW WE MUST RECOMPUTE THE OPTICALLY ACTIVE GASSES MASS MIXING RATIOS CALL GASSES(IPRINT) C CALL A ROTUINE THAT SETS UP THE AEROSOL DIST AND OPTICAL PROP. C?? IF ( FHAZE .GT. 0.) CALL HAZE2(IPRINT,NLAYER,Z,RADIUS,XNUMB) C?? IF (TAUFAC .GT. 0.) CALL CLD(IPRINT) C C* CALL A SUBROUTINE THAT SETS UP THE OPTICAL PROPERTIES IN THE C INFRARED. AND THEN IN THE VISIBLE. CALL OPTCI(IPRINT) CALL OPTCV(IPRINT) C* PRINT OUT THE AEROSOL AND CLOUD INFORMATION IF (IPRINT .GT. 0) THEN WRITE (6,139) DO 135 J=1,NLAYER WRITE(6,140)J,Z(J),PRESS(J),TEMP(J), & CH4(J)*PRESS(J)/PCH4(TEMP(J)),CH4(J)*100. 135 CONTINUE 139 FORMAT(///' AEROSOLS AND CLOUDS AT LEVELS'/ &' LVL ALTITUDE P(BARS) TEMP RH-CH4' & , ' %CH4 ') 140 FORMAT (1X,I3,F8.3,1PE10.3,0P2F7.2,F6.2,2(6X,0PF7.3,1PE10.3)) ENDIF RETURN END FUNCTION PC2H6(T) C THIS FUNCTION RETURNS THE VAPOR PRESSURE IN BARS. C BASED ON THE FORMULA NUMBER (7) PAGE 11 OF C NBS TECHNICAL PB-151 363 PC2H6=(1./760.)*10.**(8.5812- (965.4/T) ) RETURN END FUNCTION PC2H2(T) C THIS FUNCTION RETURNS THE VAPOR PRESSURE IN BARS. C BASED ON A LEAST SQUARES FIT TO DATA IN TABLE III C NBS TECHNICAL PB-151 363 DATA A,B/21.68901,-2814.018/ PC2H2=(1./760.)*EXP(A+B/T) RETURN END SUBROUTINE GASSES(IPRINT) C THIS SUBROUTINE SETS UP THE MASS MIXING RATIOS OF THE C OPTICALLY ACTIVE GASES: CH4, C2H2, AND C2H6 PARAMETER (NLAYER=30,NLEVEL=31) COMMON /ATM/ Z(NLEVEL),PRESS(NLEVEL),DEN(NLEVEL),TEMP(NLEVEL) COMMON /GASS/ CH4(NLEVEL),XN2(NLEVEL),H2(NLEVEL),AR(NLEVEL) & ,XMU(NLEVEL),GAS1(NLAYER),COLDEN(NLAYER) COMMON /STRATO/ C2H2(NLAYER),C2H6(NLAYER) COMMON /ADJUST/ RHCH4,FH2,FHAZE,FHVIS,FHIR,TAUFAC,RCLOUD,FARGON COMMON /CONST/RGAS,RHOP,PI,SIGMA C* C NOW CALCULATE THE LAYER AVERAGE GAS MIXING RATIOS. C OF THE ABSORBING GAS IN UNITS OF GRAMS PER GRAM C AND THE TOTAL LAYER COLUMN MASS GRAMS CM-2. DO 159 J=1,NLAYER EMU=(XMU(J+1)+XMU(J))*0.5 COLDEN(J)=RHOP*(PRESS(J+1)-PRESS(J))/EFFG(Z(J)) GAS1(J)=(16./EMU)*AVERGE(CH4(J+1),CH4(J)) 159 CONTINUE C WE NOW ALSO CALCULTE THE MASS MIXING RATIOS OF THE C STRATOSPHERIC GASES USED IN THE IR WITHIN EACH LAYER. J=1 FC2H2=2.E-6 FC2H6=2.E-5 C2H2(J) = MIN(FC2H2,PC2H2(TEMP(J))/PRESS(J)) C2H6(J) = MIN(FC2H6,PC2H6(TEMP(J))/PRESS(J)) DO J=2,NLAYER C2H2(J) = MIN(FC2H2,PC2H2(TEMP(J))/PRESS(J),C2H2(J-1)) C2H6(J) = MIN(FC2H6,PC2H6(TEMP(J))/PRESS(J),C2H6(J-1)) ENDDO C NOW CONVERT TO MASS MIXING RATIO DO J=1,NLAYER EMU=(XMU(J+1)+XMU(J))*0.5 C2H2(J)=C2H2(J)*26.0/EMU C2H6(J)=C2H6(J)*30.0/EMU ENDDO C IF (IPRINT .LT. 1) RETURN WRITE (6,9) 9 FORMAT(///' ALT CH4 C2H2 C2H6: MASS MIXING RATIOS') DO J=1,NLAYER WRITE (6,10)Z(J),GAS1(J),C2H2(J),C2H6(J) ENDDO 10 FORMAT(1X,F6.2,1P3E9.1) RETURN END SUBROUTINE PRTOUT(IPRINT) PARAMETER (NLAYER=30,NLEVEL=31) PARAMETER (NSPECI=46,NSPC1I=47,NSPECV=24,NSPC1V=25) COMMON /UBARED/ UBARI,UBARV,UBAR0 COMMON /ATM/ Z(NLEVEL),PRESS(NLEVEL),DEN(NLEVEL),TEMP(NLEVEL) COMMON /LAPSE/ DTDP(NLAYER),CONVEQ COMMON /GASS/ CH4(NLEVEL),XN2(NLEVEL),H2(NLEVEL),AR(NLEVEL) & ,XMU(NLEVEL),GAS1(NLAYER),COLDEN(NLAYER) COMMON /STRATO/ C2H2(NLAYER),C2H6(NLAYER) COMMON /VISGAS/SOLARF(NSPECV),NTERM(NSPECV),PEXPON(NSPECV), & ATERM(4,NSPECV),BTERM(4,NSPECV) COMMON /AERSOL/ RADIUS(NLAYER), XNUMB(NLAYER) & , REALI(NSPECI), XIMGI(NSPECI), REALV(NSPECV), XIMGV(NSPECV) COMMON /CLOUD/ RADCLD(NLAYER), XNCLD(NLAYER) & , RCLDI(NSPECI), XICLDI(NSPECI), RCLDV(NSPECV), XICLDV(NSPECV) COMMON /TAUS/ TAUHI(NSPECI),TAUCI(NSPECI),TAUGI(NSPECI), & TAURV(NSPECV),TAUHV(NSPECV),TAUCV(NSPECV),TAUGV(NSPECV) COMMON /OPTICI/ DTAUI(NLAYER,NSPECI),TAUI(NLEVEL,NSPECI) & ,WBARI(NLAYER,NSPECI), COSBI(NLAYER,NSPECI) COMMON /SPECTI/ BWNI(NSPC1I),WNOI(NSPECI),DWNI(NSPECI) & ,WLNI(NSPECI) COMMON /FLUXI/ FNETI(NLEVEL), FUPI(NLEVEL,NSPECI), & FDI(NLEVEL,NSPECI),FMNETI(NLEVEL),FMUPI(NLEVEL),FMDI(NLEVEL) COMMON /OPTICV/ DTAUV(NLAYER,NSPECV,4),TAUV(NLEVEL,NSPECV,4) & ,WBARV(NLAYER,NSPECV,4), COSBV(NLAYER,NSPECV,4) COMMON /SPECTV/ BWNV(NSPC1V),WNOV(NSPECV),DWNV(NSPECV) & ,WLNV(NSPECV) COMMON /FLUXV/ FNETV(NLEVEL), FUPV(NLEVEL,NSPECV), & FDV(NLEVEL,NSPECV), FMNETV(NLEVEL),FMUPV(NLEVEL),FMDV(NLEVEL) COMMON /FLUX/ FNET(NLEVEL), FMNET(NLEVEL), THEAT(NLAYER) COMMON /PLANT/ CSUBP,RSFI,RSFV,F0PI COMMON /ADJUST/ RHCH4,FH2,FHAZE,FHVIS,FHIR,TAUFAC,RCLOUD,FARGON COMMON /CONST/RGAS,RHOP,PI,SIGMA COMMON /IO/ TIDAL C C* PRINT OUT THE AEROSOL AND CLOUD INFORMATION IF (IPRINT .GT. 0) THEN WRITE (6,139) DO 135 J=1,NLAYER WRITE(6,140)J,Z(J),PRESS(J),TEMP(J), & CH4(J)*PRESS(J)/PCH4(TEMP(J)),CH4(J)*100.,RADIUS(J),XNUMB(J) & ,RADCLD(J),XNCLD(J) 135 CONTINUE 139 FORMAT(///' AEROSOLS AND CLOUDS AT LEVELS'/ &' LVL ALTITUDE P(BARS) TEMP RH-CH4' & , ' %CH4 HAZE:SIZE COL NUMB CLOUD:SIZE COL NUM') 140 FORMAT (1X,I3,F8.3,1PE10.3,0P2F7.2,F6.2,2(6X,0PF7.3,1PE10.3)) ENDIF IF (IPRINT .GT. 0) THEN C PRINT OUT SPECTRAL INTERVALS IN THE INFRARED WRITE (6,190) 'INFR' WRITE (6,210)(K,WLNI(K),WNOI(K),DWNI(K),TAUHI(K), & TAUCI(K),0.0,TAUGI(K),TAUI(NLEVEL,K),REALI(K) & ,XIMGI(K),RCLDI(K),XICLDI(K), K=1,NSPECI) C PRINT OUT SPECTRAL INTERVALS IN THE VISIBLE WRITE (6,190) 'VIS ' WRITE (6,210)(K,WLNV(K),WNOV(K),DWNV(K),TAUHV(K), & TAUCV(K),TAURV(K),TAUGV(K),TAUV(NLEVEL,K,1),REALV(K) & ,XIMGV(K),RCLDV(K),XICLDV(K), K=1,NSPECV) END IF 210 FORMAT(1X,I2,F8.3,F9.1,F8.1,1P9E10.3,0P) 190 FORMAT(///' SPECTRAL INTERVALS IN ',A4// & ' MICRONS WAVENU DEL-WN', & ' TAU HAZE TAU CLOUD TAU RAY TAU GAS TAU-TOTAL ', & 'HAZE:REAL IMG, CLOUD:REAL IMG') C C LETS OUTPUT THE SOLAR CONSTANT SOLARC=0.0 DO 552 K=1,NSPECV SOLARC=SOLARC+SOLARF(K) 552 CONTINUE SOLALB=1.0 + 2.* FNETV(1)/SOLARC C COMPUTE FRACTION OF TOTAL SUNLIT ABSORBED AT SURFACE, SEE NOTES C THE 2 IS THE RATIO OF HEMISPHERIC AVERAGE AREA TO CROSS SECTIONAL SURABS=-100.*2.*FNETV(NLEVEL)/SOLARC WRITE(6,167) SOLARC, SOLALB,SURABS,100.*4.*FNETI(NLEVEL)/SOLARC & ,RSFV,RSFI 167 FORMAT(/' SOLAR CONSTANT=', 1PE13.5,' BOND ALBEDO=',0PF7.4 &/' SURFACE ABSORPTION=',F7.4,'% OF TOTAL LIGHT INCIDENT ON TITAN' &/' SURFACE RADIATION =',F7.4,'% OF TOTAL LIGHT INCIDENT ON TITAN' & ,' RSFV=',F5.2,' RSFI=',F5.2) C C OUTPUT THE VISIBLE FLUXES AND PRESENT NET FLUX. WRITE(6,892) (J,Z(J),TEMP(J),PRESS(J) &,FNETV(J),FNETV(J)/(SOLARC*UBAR0),FNET(J),J=1,NLEVEL) 892 FORMAT(/' LEVEL ALT TEMP PRESS ', & 'VIS FNET FNET/SO FNET-LEVEL'/ & (1X,I2,F7.2,2F8.3,1P3E11.3,0P)) C OUTPUT SELECTED SOLAR FLUX DATA FOR ALL SPECV'S C NOTE THAT NLEVEL SHOULD NOT BE DIVISIBLE BY 6 OR FORMAT ERROR HERE WRITE(6,289)' UP','SOLAR',(J,J=1,NLEVEL,NLEVEL/6),(K,WLNV(K), & (FUPV(J,K),J=1,NLEVEL,NLEVEL/6), K=1,NSPECV) WRITE(6,289)' DOWN','SOLAR',(J,J=1,NLEVEL,NLEVEL/6),(K,WLNV(K), & (FDV(J,K),J=1,NLEVEL,NLEVEL/6), K=1,NSPECV) C OUTPUT SELECTED IR FLUX DATA FOR ALL SPECI'S WRITE(6,289)' UP','THERM',(J,J=1,NLEVEL,NLEVEL/6),(K,WLNI(K), & (FUPI(J,K),J=1,NLEVEL,NLEVEL/6), K=1,NSPECI) WRITE(6,289)' DOWN','THERM',(J,J=1,NLEVEL,NLEVEL/6),(K,WLNI(K), & (FDI(J,K),J=1,NLEVEL,NLEVEL/6), K=1,NSPECI) 289 FORMAT (//A5,'WARD ',A5,' FLUXES',12X,'LEVELS'/ & ' WAVELENGTH',7I10,/(1X,I2,F8.3,1P7E10.3,0P)) C RETURN END C ---------------------------------- C THIS IS THE START OF TGMSUBS.FOR C ---------------------------------- SUBROUTINE OTMSETUP(NLEVEL,Z,RHCH4,FH2,FARGON,TEMP,PRESS,DEN,XMU, & CH4,H2,XN2,AR,IPRINT) C THIS IS THE OLD ONE WITH THE LINDAL SCALING PARAMETER (NMAX=201) C THIS SUBROUTINE SETS UP THE INTITAL ATMOSPHERIC PROFILE FOR TITAN C BASED ON THE LINDAL ET AL DATA. THE ROUTINE STARTS WITH INPUTS C INPUTS: C NLEVEL: NUMBER OF ALTITUDE LEVELS, J=1 IS AT THE TOP C Z ALTITUDE GRID IN KM C RHCH4 RELATIVE HUMIDITY OF METHANE AT Z=0. C FH2 MIXING RATIO BY NUMBER OF H2 C FARGON ARGON FLAG 0 = NO ARGON IN ATMSOPHERE C -Y = ADJUST AR TO GIVE MEAN WEIGHT=Y C +X = MIXING RATIO OF ARGON = X C OUTPUTS: AT EACH LEVEL (NOT LAYER AVERAGES) C TEMP (K), PRESS(BARS), DEN(CM-3), XMU = MEAN MOLECUALR WEIGHT C CH4, H2, XN2, AR ARE THE NUMBER MIXING RATIOS OF THE GASES C INTERNAL VARIABLES C TLINAL, DLINAL, PLINAL : THE LINDAL INGRESS VALUES ON THE Z GRID C C NOTES: METHANE FOLLOWS CONSTANT MIXING RATIO UNLESS SATUARTION C VALUE IS LOWER. C DIMENSION Z(NLEVEL),TEMP(NLEVEL),PRESS(NLEVEL),DEN(1),XMU(1) DIMENSION CH4(1),H2(1),XN2(1),AR(1) DIMENSION TLINAL(NMAX),DLINAL(NMAX),PLINAL(NMAX) C C FIRST SET UP THE LINDAL PURE N2 VALUES CALL LINDAL(NLEVEL,Z,TLINAL,DLINAL,PLINAL) C LOAD THE LINDAL VALUES INTO THE ARRAYS DO J=1,NLEVEL TEMP(J)= TLINAL(J) DEN(J)= DLINAL(J) PRESS(J)=PLINAL(J) ENDDO C DO 1000 ITS =1,20 C C NOW COMPUTE THE MEAN MOLECULAR WEIGHT AT EACH LEVEL C NOW SET UP THE MIXING RATIOS OF THE GASSES BASED ON SATURATION C CURVE OF CH4 AND SPECIFIED MEAN MOLECULAR WEIGHT AND H2 CONSTANT CH4(NLEVEL)=PCH4(TEMP(NLEVEL))*RHCH4/PRESS(NLEVEL) DO 134 J=NLEVEL-1,1,-1 CH4SAT=PCH4(TEMP(J))/PRESS(J) CH4(J)=AMIN1(CH4SAT,CH4(NLEVEL),CH4(J+1)) 134 CONTINUE DO 20 J=1,NLEVEL H2(J)=FH2 IF (FARGON .LT. 0.) THEN C WE DECIDED TO KEEP CONSTANT MIXING RATIO = -FARGON AR(J)=(-FARGON-28.0134+25.8554*H2(J)+11.9708*CH4(J))/11.9346 ELSE IF (FARGON .EQ. 0.) THEN C WE DECIDED TO DROP THE ARGON... AR(J)=0.0 ELSE C ARGON GIVEN BY A CONSTANT MIXING RATIO AR(J)=FARGON ENDIF ENDIF XN2(J)=1.0 - H2(J) - CH4(J) -AR(J) XMU(J)=28.0134*XN2(J)+2.158*H2(J)+16.0426*CH4(J)+39.948*AR(J) 20 CONTINUE C AT THIS POINT WE HAVE THE TEMP, PRESS, DEN AND XMU VALUES. C ADJUST THE DEN BY THE FACTOR DUE TO THE MEAN REFRACTIVITY C NOW LETS INTERGRATE THE DENSITY WITH ALTITUDE TO GET THE PRESS SUMT=PLINAL(1)*6.02E23/10. SUMB=SUMT TLAST=TEMP(NLEVEL) DO J=2,NLEVEL C DENSITY ADJUSTMENT BASED ON REFRACTIVITIES ... SEE NOTES DENF=294.1/(XN2(J)*294.1 + CH4(J)*410. + H2(J)*136. + AR(J)*277.8) DEN(J) = DLINAL(J)*DENF C PERFORM THE INTEGRALS LISTED IN NOTES C SUMT IS ACTUAL PRESSURE ADEN=(DEN(J)-DEN(J-1))/ALOG(DEN(J)/DEN(J-1)) SUMT=SUMT+(EFFG(Z(J))*ADEN)*( Z(J-1)-Z(J))*XMU(J) ADEN=(DLINAL(J)-DLINAL(J-1))/ALOG(DLINAL(J)/DLINAL(J-1)) SUMB=SUMB+(EFFG(Z(J))*ADEN)*( Z(J-1)-Z(J))*28.01340 C C NON IDEAL GAS CORRECTION IS 3.5% TIMES DT = 0.03% :NEGLECTED PRESS(J)=PLINAL(J)*SUMT/SUMB TEMP(J) =TLINAL(J)*(SUMT/SUMB)*(1./DENF) C ENDDO 30 CONTINUE C C HOW WELL WE DO ON CONVERGENCE DT= ABS(TEMP(NLEVEL)-TLAST) IF (DT .LT. 0.001) GO TO 1001 1000 CONTINUE 1001 IF (IPRINT .LT. 0) RETURN WRITE (6,139)RHCH4,FH2,FARGON,DT DO 135 J=1,NLEVEL-1 WRITE(6,140)J,Z(J),PRESS(J),DEN(J),TEMP(J), & CH4(J)*PRESS(J)/PCH4(TEMP(J)) & ,CH4(J)*100.,XN2(J)*100.,H2(J)*100.,AR(J)*100.,XMU(J) & ,(TEMP(J+1)-TEMP(J))/(Z(J+1)-Z(J)) 135 CONTINUE J=NLEVEL WRITE(6,140)J,Z(J),PRESS(J),DEN(J),TEMP(J), & CH4(J)*PRESS(J)/PCH4(TEMP(J)) & ,CH4(J)*100.,XN2(J)*100.,H2(J)*100.,AR(J)*100.,XMU(J) 139 FORMAT(///' BACKGROUNG ATMOSPHERE AT LEVELS'/ & ' SURFACE HUMIDITY OF CH4:',F5.3,' H2 MIXING RATIO:',F6.4, & ' ARGON SETTING:',F8.4/' FINAL CONVERGENCE ON TEMP:',F10.5 & ' LINDAL ET AL SCALING'/ &' LVL ALTITUDE P(BARS) DEN(CM-3) TEMP RH-CH4' & , ' %CH4 %N2 %H2 %AR MU DT/DZ' ) 140 FORMAT(1X,I3,F8.3,1P2E10.3,0PF7.2,F5.2,2F6.2,2F5.2,4F6.2) C END INTITAL BACKGROUND ATMOSPHERE SETUP FOR TITAN RETURN END SUBROUTINE ATMSETUP(NLEVEL,Z,RHCH4,FH2,FARGON,TEMP,PRESS,DEN,XMU, & CH4,H2,XN2,AR,IPRINT) C THIS IS THE NEW ONE WITH THE BWC EQ OF STATE PARAMETER (NMAX=201) C THIS SUBROUTINE SETS UP THE INTITAL ATMOSPHERIC PROFILE FOR TITAN C BASED ON THE LINDAL ET AL DATA. THE ROUTINE STARTS WITH INPUTS C INPUTS: C NLEVEL: NUMBER OF ALTITUDE LEVELS, J=1 IS AT THE TOP C Z ALTITUDE GRID IN KM C RHCH4 RELATIVE HUMIDITY OF METHANE AT Z=0. C FH2 MIXING RATIO BY NUMBER OF H2 C FARGON ARGON FLAG 0 = NO ARGON IN ATMSOPHERE C -Y = ADJUST AR TO GIVE MEAN WEIGHT=Y C +X = MIXING RATIO OF ARGON = X C OUTPUTS: AT EACH LEVEL (NOT LAYER AVERAGES) C TEMP (K), PRESS(BARS), DEN(CM-3), XMU = MEAN MOLECUALR WEIGHT C CH4, H2, XN2, AR ARE THE NUMBER MIXING RATIOS OF THE GASES C INTERNAL VARIABLES C TLINAL, DLINAL, PLINAL : THE LINDAL INGRESS VALUES ON THE Z GRID C C NOTES: METHANE FOLLOWS CONSTANT MIXING RATIO UNLESS SATUARTION C VALUE IS LOWER. C DIMENSION Z(NLEVEL),TEMP(NLEVEL),PRESS(NLEVEL),DEN(1),XMU(1) DIMENSION CH4(1),H2(1),XN2(1),AR(1) DIMENSION TLINAL(NMAX),DLINAL(NMAX),PLINAL(NMAX) C C FIRST SET UP THE LINDAL PURE N2 VALUES CALL LINDAL(NLEVEL,Z,TLINAL,DLINAL,PLINAL) C LOAD THE LINDAL VALUES INTO THE ARRAYS DO J=1,NLEVEL TEMP(J)= TLINAL(J) DEN(J)= DLINAL(J) PRESS(J)=PLINAL(J) ENDDO C DO 1000 ITS =1,20 C C NOW COMPUTE THE MEAN MOLECULAR WEIGHT AT EACH LEVEL C NOW SET UP THE MIXING RATIOS OF THE GASSES BASED ON SATURATION C CURVE OF CH4 AND SPECIFIED MEAN MOLECULAR WEIGHT AND H2 CONSTANT CH4(NLEVEL)=PCH4(TEMP(NLEVEL))*RHCH4/PRESS(NLEVEL) DO 134 J=NLEVEL-1,1,-1 CH4SAT=PCH4(TEMP(J))/PRESS(J) CH4(J)=AMIN1(CH4SAT,CH4(NLEVEL),CH4(J+1)) 134 CONTINUE DO 20 J=1,NLEVEL H2(J)=FH2 IF (FARGON .LT. 0.) THEN C WE DECIDED TO KEEP CONSTANT MIXING RATIO = -FARGON AR(J)=(-FARGON-28.0134+25.8554*H2(J)+11.9708*CH4(J))/11.9346 ELSE IF (FARGON .EQ. 0.) THEN C WE DECIDED TO DROP THE ARGON... AR(J)=0.0 ELSE C ARGON GIVEN BY A CONSTANT MIXING RATIO AR(J)=FARGON ENDIF ENDIF XN2(J)=1.0 - H2(J) - CH4(J) -AR(J) XMU(J)=28.0134*XN2(J)+2.158*H2(J)+16.0426*CH4(J)+39.948*AR(J) 20 CONTINUE C AT THIS POINT WE HAVE THE TEMP, PRESS, DEN AND XMU VALUES. C ADJUST THE DEN BY THE FACTOR DUE TO THE MEAN REFRACTIVITY C NOW LETS INTERGRATE THE DENSITY WITH ALTITUDE TO GET THE PRESS SUMT=PLINAL(1)*6.02E23/10. SUMB=SUMT TLAST=TEMP(NLEVEL) DO J=2,NLEVEL C DENSITY ADJUSTMENT BASED ON REFRACTIVITIES ... SEE NOTES DENF=294.1/(XN2(J)*294.1 + CH4(J)*410. + H2(J)*136. + AR(J)*277.8) DEN(J) = DLINAL(J)*DENF C PERFORM THE INTEGRALS LISTED IN NOTES C SUMT IS ACTUAL PRESSURE ADEN=(DEN(J)-DEN(J-1))/ALOG(DEN(J)/DEN(J-1)) SUMT=SUMT+(EFFG(Z(J))*ADEN)*( Z(J-1)-Z(J))*XMU(J) ADEN=(DLINAL(J)-DLINAL(J-1))/ALOG(DLINAL(J)/DLINAL(J-1)) SUMB=SUMB+(EFFG(Z(J))*ADEN)*( Z(J-1)-Z(J))*28.01340 C C C PRESSURE IS IN BARS C DETERMINE THE TEMPERATURE WITH BWR EQ OF STATE PRESS(J)=SUMT*1.E7/6.02E23 *1E-6 TEMP(J) =EQSTATE(XN2(J),CH4(J),H2(J),AR(J),PRESS(J),DEN(J)) C C ENDDO 30 CONTINUE C C HOW WELL WE DO ON CONVERGENCE DT= ABS(TEMP(NLEVEL)-TLAST) IF (DT .LT. 0.001) GO TO 1001 1000 CONTINUE 1001 IF (IPRINT .LT. 0) RETURN WRITE (6,139)RHCH4,FH2,FARGON,DT DO 135 J=1,NLEVEL-1 WRITE(6,140)J,Z(J),PRESS(J),DEN(J),TEMP(J), & CH4(J)*PRESS(J)/PCH4(TEMP(J)) & ,CH4(J)*100.,XN2(J)*100.,H2(J)*100.,AR(J)*100.,XMU(J) & ,(TEMP(J+1)-TEMP(J))/(Z(J+1)-Z(J)) 135 CONTINUE J=NLEVEL WRITE(6,140)J,Z(J),PRESS(J),DEN(J),TEMP(J), & CH4(J)*PRESS(J)/PCH4(TEMP(J)) & ,CH4(J)*100.,XN2(J)*100.,H2(J)*100.,AR(J)*100.,XMU(J) 139 FORMAT(///' BACKGROUNG ATMOSPHERE AT LEVELS'/ & ' SURFACE HUMIDITY OF CH4:',F5.3,' H2 MIXING RATIO:',F6.4, & ' ARGON SETTING:',F8.4/' FINAL CONVERGENCE ON TEMP:',F10.5/ &' LVL ALTITUDE P(BARS) DEN(CM-3) TEMP RH-CH4' & , ' %CH4 %N2 %H2 %AR MU DT/DZ' ) 140 FORMAT(1X,I3,F8.3,1P2E10.3,0PF7.2,F5.2,2F6.2,2F5.2,4F6.2) C END INTITAL BACKGROUND ATMOSPHERE SETUP FOR TITAN RETURN END FUNCTION EQSTATE(FN2,FCH4,FH2,FAR,PIN,DENIN) PARAMETER (NGAS=2) DIMENSION BO(NGAS),AO(NGAS),CO(NGAS),DO(NGAS),B(NGAS),A(NGAS), & C(NGAS),DELTA(NGAS),GAMMA(NGAS),ALPHA(NGAS),GAS(NGAS) C C NITROGEN DATA BO(1),AO(1),CO(1),DO(1),B(1), & A(1),C(1),DELTA(1),GAMMA(1),ALPHA(1)/ & 0.0484824, 1.27389, 4273.00, 7.61781E6, 0.00232373, & 0.0178444, 475.000, 0.8320E6, 0.006500, 0.00015300/ C METHANE DATA BO(2),AO(2),CO(2),DO(2),B(2), & A(2),C(2),DELTA(2),GAMMA(2),ALPHA(2)/ & 0.042600, 1.85500, 22570.0, 0.000000, 0.00338004, & 0.0494000, 2545.00, 0.00000, 0.006000, 0.000124359/ C ABOVE NUMBERS FROM IGT PUBLICATION: ELLINGTION ET AL, 1959 C C INPUTS: DEN=DENSITY MOLECULES/CM3, PRESS = BARS, C OUTPUT: EQSTATE IS THE TEMPERATURE OF THE MIXTURE C DATA RGAS/0.08206/ C R IS DIFFERENT ON ACCOUNT OF ATMS INSTEAD OF BARS C CONVERT TO CGS UNITS DEN= MOLES/LITERS, PRESS=ATMS DEN =1.E3*DENIN/6.0220E23 PRESS = PIN/1.01325 C C BENEDICT, WEBB AND RUBIN EQUATION OF STATE (ELLINGTON ET AL.,1959) C TO COMPUTE THE VIRIAL COEFFICEINTS (REIF, P422) C C FIRST SET UP THE COEFFICIENTS FOR THE MIXING RATIOS GAS(1)=FN2+FH2+FAR GAS(2)=FCH4 C ZERO THE MEANS BOM = 0. AOM = 0. COM = 0. DOM = 0. AM = 0. BM = 0. CM = 0. DELTAM = 0. GAMMAM = 0. ALPHAM = 0. C COMPUTE SUMS DO 100 N=1,NGAS BOM = BOM + GAS(N)*BO(N) AOM = AOM + GAS(N)*SQRT(AO(N)) COM = COM + GAS(N)*SQRT(CO(N)) DOM = DOM + GAS(N)*SQRT(DO(N)) AM = AM + GAS(N)*A(N)**(1./3.) BM = BM + GAS(N)*B(N)**(1./3.) CM = CM + GAS(N)*C(N)**(1./3.) DELTAM = DELTAM + GAS(N)*DELTA(N)**(1./3.) GAMMAM = GAMMAM + GAS(N)*GAMMA(N)**(1./3.) ALPHAM = ALPHAM + GAS(N)*ALPHA(N)**(1./3.) 100 CONTINUE C AOM = AOM**2 COM = COM**2 DOM = DOM**2 AM = AM**3 BM = BM**3 CM = CM**3 DELTAM = DELTAM**3 GAMMAM = GAMMAM**3 ALPHAM = ALPHAM**3 C WE NOW HAVE THE TERMS FOR THE EQUATION OF STATE C NEXT GET THE IDEAL GAS TEMPERATURE T1=PRESS/(RGAS*DEN) T=T1 EQSTATE=T DO ITS =1,50 C1=BOM*RGAS*T - AOM - COM/T**2 C2=(BM*RGAS*T-AM)+CM*EXP(-GAMMAM*DEN**2)*(1.+GAMMAM*DEN**2)/(T*T) C3=AM*ALPHAM PNEW=RGAS*DEN*T+C1*DEN**2 + C2*DEN**3 + C3*DEN**6 T= T*PRESS/PNEW IF (ABS((T-EQSTATE)/T) .LT. 1.E-5) RETURN EQSTATE=T ENDDO RETURN END FUNCTION PCH4(T) C THIS SUBROUTINE RETURNS THE VAPOR PRESSURE OF METHANE C OVER THE TEMPERATURE INTERVAL (74-97K) IN UNITS OF BARS C IT IS BASED ON DATA FROM THE MATHASEN GAS DATA BOOK P 351 C FITTED BY CP MCKAY 10/85 PCH4=3.4543E4 * EXP(-1145.705/T) RETURN END FUNCTION TITANT(P) DIMENSION PRESS(107),TEMP(107) C THIS SUBROUTINE RETURNS THE LINDAL ET AL INGRESS C T,P AND DEN PROFILE ON THE INPUT ZGRID. DIMENSION ZLIN(106),DLIN(106) CALL INGRESS(TEMP(2),ZLIN,DLIN,PRESS(2)) DATA PRESS(1)/0.0/ TEMP(1)=TEMP(2) DO 100 I=2,107 IF (PRESS(I) .GT. P) GO TO 101 100 CONTINUE 101 CONTINUE FACTOR= (PRESS(I) - P )/(PRESS(I) - PRESS(I-1)) TITANT=TEMP(I) + FACTOR*(TEMP(I-1) - TEMP(I)) IF ( P .GT. PRESS(107)) TITANT=94.0 RETURN END SUBROUTINE THOLIN(WAVELN,XNR,XNI) DIMENSION W(90),XN(90),XK(90) DATA W/ &920.0000,850.0000,774.9000,688.8000,563.5000,387.4000,229.6000, &172.2000,140.9000,121.5000, 81.5700, 56.3500, 36.4600, 31.0000, & 22.1400, 18.2300, 17.7100, 14.4200, 12.9100, 11.7000, 11.0700, & 10.5100, 8.7310, 7.6530, 7.0440, 6.6660, 6.4570, 6.3260, & 5.9610, 5.8480, 5.7400, 5.4380, 5.2530, 5.1660, 4.8810, & 4.6260, 4.5920, 4.4920, 4.4280, 4.2170, 3.9480, 3.6680, & 3.4630, 3.2460, 3.0090, 2.9380, 2.8180, 2.7430, 2.6950, & 2.4220, 2.4030, 2.3930, 2.2140, 2.0190, 1.8730, 1.8230, & 1.8130, 1.8020, 1.3810, 1.3570, 1.1920, 1.1480, 1.0160, & 0.8731, 0.6888, 0.5635, 0.4428, 0.4133, 0.3874, 0.3542, & 0.3263, 0.2952, 0.2638, 0.2384, 0.1968, 0.1631, 0.1362, & 0.1215, 0.1181, 0.1159, 0.1097, 0.1016, 0.0925, 0.0800, & 0.0785, 0.0588, 0.0449, 0.0415, 0.0312, 0.0207/ DATA XN/ &2.170,2.170,2.160,2.160,2.150,2.120,2.070,2.040,2.030,2.020,1.930, &1.860,1.810,1.810,1.800,1.760,1.740,1.670,1.670,1.640,1.660,1.670, &1.710,1.720,1.690,1.690,1.640,1.580,1.430,1.440,1.480,1.550,1.580, &1.580,1.610,1.620,1.610,1.610,1.610,1.630,1.640,1.650,1.650,1.650, &1.610,1.590,1.580,1.590,1.600,1.620,1.620,1.620,1.630,1.630,1.630, &1.640,1.640,1.640,1.640,1.640,1.650,1.650,1.650,1.660,1.680,1.700, &1.720,1.690,1.660,1.630,1.640,1.660,1.680,1.680,1.660,1.650,1.700, &1.740,1.750,1.750,1.720,1.670,1.580,1.370,1.330,0.963,0.812,0.802, &0.850,0.920/ DATA XK/ &3.0E-3,1.0E-2,2.9E-2,4.7E-2,7.0E-2,1.0E-1,1.4E-1,1.6E-1,1.6E-1, &1.9E-1,2.1E-1,1.9E-1,1.5E-1,1.4E-1,1.8E-1,2.1E-1,2.1E-1,1.7E-1, &1.4E-1,9.7E-2,7.9E-2,7.5E-2,9.2E-2,1.3E-1,1.7E-1,2.2E-1,2.6E-1, &2.8E-1,1.5E-1,7.0E-2,2.9E-2,1.1E-2,8.7E-3,7.6E-3,1.0E-2,2.7E-2, &2.8E-2,1.4E-2,1.1E-2,1.0E-2,1.3E-2,2.1E-2,3.5E-2,5.6E-2,7.5E-2, &6.0E-2,2.4E-2,1.1E-2,4.1E-3,1.2E-3,8.5E-4,8.0E-4,8.9E-4,7.2E-4, &5.2E-4,4.4E-4,4.2E-4,4.0E-4,4.1E-4,4.2E-4,5.2E-4,6.4E-4,1.0E-3, &2.4E-3,8.8E-3,2.3E-2,6.0E-2,7.6E-2,9.1E-2,1.1E-1,1.3E-1,1.5E-1, &1.8E-1,2.1E-1,2.2E-1,2.4E-1,2.7E-1,3.7E-1,4.0E-1,4.3E-1,5.0E-1, &5.8E-1,6.7E-1,7.7E-1,7.7E-1,6.2E-1,3.8E-1,3.1E-1,1.4E-1,4.9E-2/ XNR=XN(1) XNI=XK(1) IF (WAVELN .GT. W(1)) RETURN XNR=XN(90) XNI=XK(90) IF (WAVELN .LT. W(90)) RETURN DO 100 I=2,90 IF (WAVELN .GT. W(I) ) GO TO 101 100 CONTINUE 101 CONTINUE C ALL INTERPOLATION IS IN LOG LAMBDA FACTOR= (alog(WAVELN) - alog(W(I)) ) / (alog(W(I-1)) - alog(W(I))) C REAL PART IS LINEARLY INTERPOLATED XNR=XN(I) + FACTOR*(XN(I-1) - XN(I)) C IMAGINARY PART IS LOG INTERPOLATED XNI=alog(XK(I)) + FACTOR*(alog(XK(I-1)) - alog(XK(I))) XNI=exp(XNI) RETURN END FUNCTION REFLIQ(W) DIMENSION WAVENO(55),XIMG(55) DATA WAVENO/0., 10., 40., 60., 80., 100., 120., 140., &160., 180., 200., 220., 240., 260., 280., 300., 325., &340., 350., 360., 380., 400., 450., 480., 500., 520., &540., 560., 600., 640., 684., 720., 760., 780., 800., &840., 875., 920., 960., 1000., 1040., 1080., 1120., 1160., &1200., 1220., 1240., 1260., 1280., 1300., 1320., 1340., &1400., 1800., 2000./ DATA XIMG/1.0E-5, 5.0E-5, 1.1E-3, 1.5E-3, 1.9E-3, 2.3E-3, &2.4E-3, 2.5E-3, 2.4E-3, 2.2E-3, 1.8E-3, 1.3E-3, 1.1E-3, &8.6E-4, 6.8E-4, 5.0E-4, 4.0E-4, 2.9E-4, 2.0E-4, 1.8E-4, &1.2E-4, 5.0E-5, 2.0E-5, 2.1E-5, 2.3E-5, 2.7E-5, 3.1E-5, &3.5E-5, 5.0E-5, 6.2E-5, 9.0E-5, 1.2E-4, 1.7E-4, 2.0E-4, &2.4E-4, 3.3E-4, 4.5E-4, 6.2E-4, 9.0E-4, 1.3E-3, 2.0E-3, &2.9E-3, 4.4E-3, 6.6E-3, 1.0E-2, 1.3E-2, 1.9E-2, 3.0E-2, &7.0E-2, 1.6E-1, 7.0E-2, 6.0E-3, 6.0E-3, 6.0E-3, 6.0E-3/ DO 100 I=2,55 IF (W .GT. WAVENO(I)) GO TO 100 FACTOR= (WAVENO(I) - W )/(WAVENO(I) - WAVENO(I-1)) REFLIQ=XIMG(I) + FACTOR*(XIMG(I-1) - XIMG(I)) RETURN 100 CONTINUE REFLIQ=XIMG(55) RETURN END SUBROUTINE ZGRID(NLEVEL,FAC,ZTOP,ZTOP1,Z) DIMENSION Z(NLEVEL) C CALCULATE THE GRID SPACING AT BOTTOM Z(1)=ZTOP Z(2)=ZTOP1 Z(NLEVEL)=0.0 C SUM UP THE TOTAL EQUIVALENT NUMBER OF BOTTOM GRIDS C THAT FIT IN THE MODEL SUM=0. DO 99 J=NLEVEL,3,-1 SUM=SUM + ((1.-FAC)*(J-3.)/(NLEVEL-3.)+FAC) 99 CONTINUE C NOTE THAT IF FAC=1 THEN THIS IS JUST NLEVEL-2 DZ=( Z(2)-Z(NLEVEL) )/SUM DO 101 J=NLEVEL,3,-1 Z(J-1)= Z(J) & +DZ* ((1.-FAC)*(J-3.)/(NLEVEL-3.)+FAC) 101 CONTINUE RETURN END SUBROUTINE LINDAL(NLEVEL,Z,T,DEN,P) C THIS SUBROUTINE RETURNS THE LINDAL ET AL INGRESS C T,P AND DEN PROFILE ON THE INPUT ZGRID. C RETURNS PRESSURE IN BARS DIMENSION Z(1),T(1),DEN(1),P(1) DIMENSION ZLIN(106),TLIN(106),DLIN(106),PLIN(106) CALL INGRESS(TLIN,ZLIN,DLIN,PLIN) DO J=1,106 C CONVERT TO BARS PLIN(J)=PLIN(J)*0.001 ENDDO DO 100 J=1,NLEVEL C EXTRAPOLATE WITH ISOTHERMAL ATM ABOVE DATA POINTS ISTART=1 IF (Z(J) .GT. ZLIN(1) ) THEN T(J)=TLIN(1) P(J)= PLIN(1)*EXP(-0.024733*(Z(J)-ZLIN(1))) DEN(J)=DLIN(1)*EXP(-0.024733*(Z(J)-ZLIN(1))) ELSE DO 101 I=ISTART,105 C INTERPOLATE LINEAR IN T EXPONENTIAL IN P AND DEN IF (Z(J) .LT. ZLIN(I+1) ) GO TO 101 FACTOR= (Z(J)-ZLIN(I) )/(ZLIN(I+1) - ZLIN(I)) T(J)=TLIN(I) + FACTOR*(TLIN(I+1) - TLIN(I)) P(J) =EXP(ALOG(PLIN(I))+FACTOR*(ALOG(PLIN(I+1))-ALOG(PLIN(I)))) DEN(J)=EXP(ALOG(DLIN(I))+FACTOR*(ALOG(DLIN(I+1))-ALOG(DLIN(I)))) ISTART=I GO TO 100 101 CONTINUE ENDIF 100 CONTINUE RETURN END SUBROUTINE INGRESS(TEMP,ALT,DEN,PRESS) DIMENSION TEMP(1),ALT(1),DEN(1),PRESS(1) DIMENSION TL(106),ZL(106),DENL(106),PL(106) C THIS SUBROUTINE RETURNS THE DATA FROM LINDAL ET AL (1983) ICARUS 53, C 348-363, FOR THE INGRESS PROFILE: TEMPERATURE (K), ALTITUDE (KM), C DENSITY (CM-3), PRESS (MB). C234567 DATA TL/ &169.4,169.1,168.8,168.6,168.3,168.1,167.9,167.6,167.4,167.3,167.2, &167.2,167.2,167.1,167.0,166.9,166.9,166.4,165.7,165.4,165.3,165.0, &164.5,163.9,163.1,162.6,162.3,162.0,161.5,160.9,160.1,159.4,159.0, &158.4,157.8,157.0,156.1,155.2,154.0,153.0,152.1,151.3,150.7,150.0, &149.2,148.5,147.8,147.0,145.6,144.3,143.1,141.9,140.6,139.0,137.1, &135.9,135.1,133.2,130.4,127.4,124.4,121.4,118.4,115.4,110.8,104.8, & 99.1, 92.1, 85.4, 80.5, 77.5, 75.1, 73.6, 72.7, 72.2, 71.9, 71.6, & 71.5, 71.4, 71.2, 71.2, 71.4, 71.7, 71.9, 72.3, 72.9, 73.5, 74.2, & 75.1, 76.2, 77.0, 78.2, 79.5, 80.8, 82.2, 83.6, 85.3, 87.1, 88.1, & 88.9, 89.9, 91.2, 91.9, 92.6, 93.3, 94.0/ DATA ZL/200.0, 198.0, 196.0, 194.0, 192.0, 190.0, &188.0, 186.0, 184.0, 182.0, 180.0, 178.0, 176.0, 174.0, &172.0, 170.0, 168.0, 166.0, 164.0, 162.0, 160.0, 158.0, &156.0, 154.0, 152.0, 150.0, 148.0, 146.0, 144.0, 142.0, &140.0, 138.0, 136.0, 134.0, 132.0, 130.0, 128.0, 126.0, &124.0, 122.0, 120.0, 118.0, 116.0, 114.0, 112.0, 110.0, &108.0, 106.0, 104.0, 102.0, 100.0, 98.0, 96.0, 94.0, &92.0, 90.0, 88.0, 86.0, 84.0, 82.0, 80.0, 78.0, 76.0, &74.0, 72.0, 70.0, 68.0, 66.0, 64.0, 62.0, 60.0, 58.0, &56.0, 54.0, 52.0, 50.0, 48.0, 46.0, 44.0, 42.0, 40.0, &38.0, 36.0, 34.0, 32.0, 30.0, 28.0, 26.0, 24.0, 22.0, &20.0, 18.0, 16.0, 14.0, 12.0, 10.0, 8.0, 6.0, 5.0, 4.0, &3.0, 2.0, 1.5, 1.0, 0.5, 0.0/ DATA DENL/0.32, 0.34, 0.35, 0.37, 0.39, 0.41, 0.43, 0.45, &0.47, 0.50, 0.52, 0.55, 0.57, 0.60, 0.63, 0.66, 0.70, &0.73, 0.77, 0.81, 0.85, 0.90, 0.95, 1.00, 1.06, 1.11, &1.17, 1.24, 1.30, 1.38, 1.46, 1.54, 1.63, 1.72, 1.82, &1.92, 2.04, 2.17, 2.30, 2.45, 2.60, 2.76, 2.93, 3.11, &3.31, 3.52, 3.74, 3.98, 4.26, 4.55, 4.87, 5.21, 5.58, &6.00, 6.47, 6.95, 7.44, 8.05, 8.77, 9.60, 10.51, 11.57, &12.74, 14.07, 15.83, 18.14, 20.87, 24.61, 29.29, 34.51, &40.07, 46.34, 53.23, 60.73, 69.07, 78.48, 89.07, 101.09, &114.65, 130.33, 147.77, 167.00, 188.70, 213.27, 240.49, &270.56, 304.10, 340.67, 380.79, 423.99, 473.54, 525.79, &582.13, 643.58, 710.23, 781.93, 856.89, 937.22, 979.00, &1023.97, 1067.09, 1108.70, 1129.37, 1150.16, 1171.26, &1192.38/ DATA PL/ & 0.75, 0.79, 0.83, 0.87, 0.91, 0.95, 1.00, 1.04, & 1.10, 1.15, 1.20, 1.26, 1.33, 1.39, 1.46, 1.53, & 1.61, 1.69, 1.77, 1.86, 1.95, 2.05, 2.15, 2.26, & 2.38, 2.50, 2.63, 2.76, 2.91, 3.06, 3.22, 3.39, & 3.57, 3.76, 3.96, 4.17, 4.40, 4.64, 4.89, 5.17, & 5.46, 5.76, 6.09, 6.44, 6.81, 7.21, 7.63, 8.08, & 8.56, 9.07, 9.62, 10.21, 10.84, 11.52, 12.25, 13.03, & 13.88, 14.80, 15.79, 16.88, 18.06, 19.38, 20.81, 22.41, & 24.20, 26.21, 28.54, 31.25, 34.48, 38.31, 42.78, 47.97, & 53.97, 60.84, 68.67, 77.60, 87.75, 99.29, 112.40, 127.30, & 144.26, 163.48, 185.22, 209.84, 237.68, 269.08, 304.45, 344.16, & 388.68, 438.44, 494.04, 556.03, 624.87, 701.09, 785.43, 878.54, & 980.98,1093.37,1153.44,1216.28,1282.01,1350.40,1385.60,1421.48, &1458.02,1495.26/ DO 10 J=1,106 TEMP(J)=TL(J) ALT(J)=ZL(J) PRESS(J)=PL(J) 10 DEN(J)=DENL(J)*1.E17 RETURN END FUNCTION EFFG(Z) DATA G/1.35/ DATA RPLANT/2575./ EFFG = G * (RPLANT/(RPLANT + Z ) )**2 RETURN END SUBROUTINE DSOLVER(NL,GAMA,CP,CM,CPM1,CMM1 ,,E1,E2,E3,E4,BTOP,BSURF,RSF,XK1,XK2) C DOUBLE PRECISION VERSION OF SOLVER PARAMETER (NMAX=201) IMPLICIT REAL*8 (A-H,O-Z) DIMENSION GAMA(NL),CP(NL),CM(NL), ,CPM1(NL),CMM1(NL),XK1(NL),XK2(NL) ,,E1(NL),E2(NL),E3(NL),E4(NL) DIMENSION AF(NMAX),BF(NMAX),CF(NMAX),DF(NMAX),XK(NMAX) C********************************************************* C* THIS SUBROUTINE SOLVES FOR THE COEFFICIENTS OF THE * C* TWO STREAM SOLUTION FOR GENERAL BOUNDARY CONDITIONS * C* NO ASSUMPTION OF THE DEPENDENCE ON OPTICAL DEPTH OF * C* C-PLUS OR C-MINUS HAS BEEN MADE. * C* NL = NUMBER OF LAYERS IN THE MODEL * C* CP = C-PLUS EVALUATED AT TAO=0 (TOP) * C* CM = C-MINUS EVALUATED AT TAO=0 (TOP) * C* CPM1 = C-PLUS EVALUATED AT TAOSTAR (BOTTOM) * C* CMM1 = C-MINUS EVALUATED AT TAOSTAR (BOTTOM) * C* EP = EXP(LAMDA*DTAU) * C* EM = 1/EP * C* E1 = EP + GAMA *EM * C* E2 = EP - GAMA *EM * C* E3 = GAMA*EP + EM * C* E4 = GAMA*EP - EM * C* BTOP = THE DIFFUSE RADIATION INTO THE MODEL AT TOP * C* BSURF = THE DIFFUSE RADIATION INTO THE MODEL AT * C* THE BOTTOM: INCLUDES EMMISION AND REFLECTION * C* OF THE UNATTENUATED PORTION OF THE DIRECT * C* BEAM. BSTAR+RSF*FO*EXP(-TAOSTAR/U0) * C* RSF = REFLECTIVITY OF THE SURFACE * C* XK1 = COEFFICIENT OF THE POSITIVE EXP TERM * C* XK2 = COEFFICIENT OF THE NEGATIVE EXP TERM * C********************************************************* L=2*NL C************MIXED COEFFICENTS********** C* THIS VERSION AVOIDS SINGULARITIES ASSOC. C* WIRH W0=0 BY SOLVING FOR XK1+XK2, AND XK1-XK2. AF(1)=0.0 BF(1)=GAMA(1)+1. CF(1)=GAMA(1)-1. DF(1)=BTOP-CMM1(1) N=0 LM2=L-2 C* EVEN TERMS DO 10 I=2,LM2,2 N=N+1 AF(I)=(E1(N)+E3(N))*(GAMA(N+1)-1.) BF(I)=(E2(N)+E4(N))*(GAMA(N+1)-1.) CF(I)=2.*(1.-GAMA(N+1)**2) DF(I)=(GAMA(N+1)-1.) * (CPM1(N+1) - CP(N)) & + (1.-GAMA(N+1))* (CM(N)-CMM1(N+1)) 10 CONTINUE N=0 LM1=L-1 DO 20 I=3,LM1,2 N=N+1 AF(I)=2.*(1.-GAMA(N)**2) BF(I)=(E1(N)-E3(N))*(1.+GAMA(N+1)) CF(I)=(E1(N)+E3(N))*(GAMA(N+1)-1.) DF(I)=E3(N)*(CPM1(N+1) - CP(N)) & + E1(N)*(CM(N) - CMM1(N+1)) 20 CONTINUE AF(L)=E1(NL)-RSF*E3(NL) BF(L)=E2(NL)-RSF*E4(NL) CF(L)=0.0 DF(L)=BSURF-CP(NL)+RSF*CM(NL) CALL DTRIDGL(L,AF,BF,CF,DF,XK) C***UNMIX THE COEFFICIENTS**** DO 28 N=1,NL XK1(N)=XK(2*N-1)+XK(2*N) XK2(N)=XK(2*N-1)-XK(2*N) C NOW TEST TO SEE IF XK2 IS REALLY ZERO TO THE LIMIT OF THE C MACHINE ACCURACY = 1 .E -30 C XK2 IS THE COEFFICEINT OF THE GROWING EXPONENTIAL AND MUST C BE TREATED CAREFULLY IF (XK2(N) .EQ. 0.0) GO TO 28 IF (ABS (XK2(N)/XK(2*N-1)) .LT. 1.E-30) XK2(N)=0.0 28 CONTINUE RETURN END SUBROUTINE DTRIDGL(L,AF,BF,CF,DF,XK) C DOUBLE PRESCISION VERSION OF TRIDGL PARAMETER (NMAX=201) IMPLICIT REAL*8 (A-H,O-Z) DIMENSION AF(L),BF(L),CF(L),DF(L),XK(L) DIMENSION AS(NMAX),DS(NMAX) C* THIS SUBROUTINE SOLVES A SYSTEM OF TRIDIAGIONAL MATRIX C* EQUATIONS. THE FORM OF THE EQUATIONS ARE: C* A(I)*X(I-1) + B(I)*X(I) + C(I)*X(I+1) = D(I) C* WHERE I=1,L LESS THAN 103. C* ..............REVIEWED -CP........ AS(L) = AF(L)/BF(L) DS(L) = DF(L)/BF(L) DO 10 I=2,L X=1./(BF(L+1-I) - CF(L+1-I)*AS(L+2-I)) AS(L+1-I)=AF(L+1-I)*X DS(L+1-I)=(DF(L+1-I)-CF(L+1-I)*DS(L+2-I))*X 10 CONTINUE XK(1)=DS(1) DO 20 I=2,L XKB=XK(I-1) XK(I)=DS(I)-AS(I)*XKB 20 CONTINUE 910 FORMAT(/,8X,'AF(I)',7X,'BF(I)',7X,'CF(I)',7X,'DF(I)',7X, * 'AS(I)',7X,'DS(I)',7X,'XK(I)',/) 915 FORMAT((3X,7(1X,1PE11.4))) RETURN END FUNCTION PLANCK(WAV,T,DW) C* PLANCK FUNCTION RETURNS B IN CGS UNITS, ERGS CM-2 WAVENUMBER-1 C* WAVNUM IS WAVENUMBER IN CM-1 C* T IS IN KELVIN DATA NBB/2/ PLANCK=0. DO 100 I=-NBB,NBB,1 WAVNUM=WAV + I*DW/(2.*NBB) PLANCK=PLANCK+1.191E-5* WAVNUM**3 * EXP(-1.4388 * WAVNUM/T )/ & ( 1.0- EXP(-1.4388 * WAVNUM/T ) ) 100 CONTINUE PLANCK=PLANCK/(2*NBB+1) RETURN END SUBROUTINE SOLVER(NL,GAMA,CP,CM,CPM1,CMM1 ,,E1,E2,E3,E4,BTOP,BSURF,RSF,XK1,XK2) PARAMETER (NMAX=201) DIMENSION GAMA(NL),CP(NL),CM(NL), ,CPM1(NL),CMM1(NL),XK1(NL),XK2(NL) ,,E1(NL),E2(NL),E3(NL),E4(NL) DIMENSION AF(NMAX),BF(NMAX),CF(NMAX),DF(NMAX),XK(NMAX) C********************************************************* C* THIS SUBROUTINE SOLVES FOR THE COEFFICIENTS OF THE * C* TWO STREAM SOLUTION FOR GENERAL BOUNDARY CONDITIONS * C* NO ASSUMPTION OF THE DEPENDENCE ON OPTICAL DEPTH OF * C* C-PLUS OR C-MINUS HAS BEEN MADE. * C* NL = NUMBER OF LAYERS IN THE MODEL * C* CP = C-PLUS EVALUATED AT TAO=0 (TOP) * C* CM = C-MINUS EVALUATED AT TAO=0 (TOP) * C* CPM1 = C-PLUS EVALUATED AT TAOSTAR (BOTTOM) * C* CMM1 = C-MINUS EVALUATED AT TAOSTAR (BOTTOM) * C* EP = EXP(LAMDA*DTAU) * C* EM = 1/EP * C* E1 = EP + GAMA *EM * C* E2 = EP - GAMA *EM * C* E3 = GAMA*EP + EM * C* E4 = GAMA*EP - EM * C* BTOP = THE DIFFUSE RADIATION INTO THE MODEL AT TOP * C* BSURF = THE DIFFUSE RADIATION INTO THE MODEL AT * C* THE BOTTOM: INCLUDES EMMISION AND REFLECTION * C* OF THE UNATTENUATED PORTION OF THE DIRECT * C* BEAM. BSTAR+RSF*FO*EXP(-TAOSTAR/U0) * C* RSF = REFLECTIVITY OF THE SURFACE * C* XK1 = COEFFICIENT OF THE POSITIVE EXP TERM * C* XK2 = COEFFICIENT OF THE NEGATIVE EXP TERM * C********************************************************* L=2*NL C************MIXED COEFFICENTS********** C* THIS VERSION AVOIDS SINGULARITIES ASSOC. C* WIRH W0=0 BY SOLVING FOR XK1+XK2, AND XK1-XK2. AF(1)=0.0 BF(1)=GAMA(1)+1. CF(1)=GAMA(1)-1. DF(1)=BTOP-CMM1(1) N=0 LM2=L-2 C* EVEN TERMS DO 10 I=2,LM2,2 N=N+1 AF(I)=(E1(N)+E3(N))*(GAMA(N+1)-1.) BF(I)=(E2(N)+E4(N))*(GAMA(N+1)-1.) CF(I)=2.*(1.-GAMA(N+1)**2) DF(I)=(GAMA(N+1)-1.) * (CPM1(N+1) - CP(N)) & + (1.-GAMA(N+1))* (CM(N)-CMM1(N+1)) 10 CONTINUE N=0 LM1=L-1 DO 20 I=3,LM1,2 N=N+1 AF(I)=2.*(1.-GAMA(N)**2) BF(I)=(E1(N)-E3(N))*(1.+GAMA(N+1)) CF(I)=(E1(N)+E3(N))*(GAMA(N+1)-1.) DF(I)=E3(N)*(CPM1(N+1) - CP(N)) & + E1(N)*(CM(N) - CMM1(N+1)) 20 CONTINUE AF(L)=E1(NL)-RSF*E3(NL) BF(L)=E2(NL)-RSF*E4(NL) CF(L)=0.0 DF(L)=BSURF-CP(NL)+RSF*CM(NL) CALL TRIDGL(L,AF,BF,CF,DF,XK) C***UNMIX THE COEFFICIENTS**** DO 28 N=1,NL XK1(N)=XK(2*N-1)+XK(2*N) XK2(N)=XK(2*N-1)-XK(2*N) 28 CONTINUE RETURN END SUBROUTINE TRIDGL(L,AF,BF,CF,DF,XK) PARAMETER (NMAX=201) DIMENSION AF(L),BF(L),CF(L),DF(L),XK(L) DIMENSION AS(NMAX),DS(NMAX) C* THIS SUBROUTINE SOLVES A SYSTEM OF TRIDIAGIONAL MATRIX C* EQUATIONS. THE FORM OF THE EQUATIONS ARE: C* A(I)*X(I-1) + B(I)*X(I) + C(I)*X(I+1) = D(I) C* WHERE I=1,L LESS THAN 103. C* ..............REVIEWED -CP........ AS(L) = AF(L)/BF(L) DS(L) = DF(L)/BF(L) DO 10 I=2,L X=1./(BF(L+1-I) - CF(L+1-I)*AS(L+2-I)) AS(L+1-I)=AF(L+1-I)*X DS(L+1-I)=(DF(L+1-I)-CF(L+1-I)*DS(L+2-I))*X 10 CONTINUE XK(1)=DS(1) DO 20 I=2,L XKB=XK(I-1) XK(I)=DS(I)-AS(I)*XKB 20 CONTINUE 910 FORMAT(/,8X,'AF(I)',7X,'BF(I)',7X,'CF(I)',7X,'DF(I)',7X, * 'AS(I)',7X,'DS(I)',7X,'XK(I)',/) 915 FORMAT((3X,7(1X,1PE11.4))) RETURN END SUBROUTINE DMIESS( RO, RFR, RFI, THETD, JX, 2 2 QEXT, QSCAT, CTBRQS, ELTRMX, PI, 3 3 TAU, CSTHT, SI2THT, ACAP, IT, 4 4 LL, R, RE2, TMAG2, WVNO ) 5 C 6 C THIS VERSION OF THE FAMOUS DMIESS CODE IS ADAPTED FOR THE VAX C ITS ACCURACY HAS BEEN CHECKED BY COMPARISON TO CRAY RUNS. C -C.P. MCKAY C IMPLICIT REAL*8 (A-H,O-Z) C 13 COMPLEX*16 FNAP, FNBP, ACAP(LL), W, 14 2 FNA, FNB, RF, RRF, 15 3 RRFX, WM1, FN1, FN2, 16 4 TC1, TC2, WFN(2), Z(4), 17 5 K1, K2, K3, SIN, 18 6 COS, RC, U(8), DH1, 19 7 DH2, DH4, P24H24, P24H21, 20 8 PSTORE, HSTORE, DUMMY, DUMSQ 21 C 22 DIMENSION W(3,9000) 12 DIMENSION T(5), TA(4), TB(2), TC(2), 23 2 TD(2), TE(2), PI( 3,IT ), TAU( 3,IT ), 24 3 CSTHT(IT), THETD(IT), SI2THT(IT), ELTRMX( 4,IT,2 ) 25 C 26 EQUIVALENCE ( WFN(1),TA(1) ), ( FNA,TB(1) ), 27 2 ( FNB,TC(1) ), ( FNAP,TD(1) ), 28 3 ( FNBP,TE(1) ) 29 C 30 C 31 C THIS SUBROUTINE COMPUTES MIE SCATTERING BY A STRATIFIED SPHERE, 32 C I.E. A PARTICLE CONSISTING OF A SPHERICAL CORE SURROUNDED BY A 33 C SPHERICAL SHELL. THE BASIC CODE USED WAS THAT DESCRIBED IN THE 34 C REPORT: " SUBROUTINES FOR COMPUTING THE PARAMETERS OF THE 35 C ELECTROMAGNETIC RADIATION SCATTERED BY A SPHERE " J.V. DAVE, 36 C I B M SCIENTIFIC CENTER, PALO ALTO , CALIFORNIA. 37 C REPORT NO. 320 - 3236 .. MAY 1968 . 38 C 39 C THE MODIFICATIONS FOR STRATIFIED SPHERES ARE DESCRIBED IN 40 C TOON AND ACKERMAN, APPL. OPTICS, IN PRESS, 1981 41 C 42 C 43 C THE PARAMETERS IN THE CALLING STATEMENT ARE DEFINED AS FOLLOWS : 44 C RO IS THE OUTER (SHELL) RADIUS; 45 C R IS THE CORE RADIUS; 46 C RFR, RFI ARE THE REAL AND IMAGINARY PARTS OF THE SHELL INDEX 47 C OF REFRACTION IN THE FORM (RFR - I* RFI); 48 C RE2, TMAG2 ARE THE INDEX PARTS FOR THE CORE; 49 C ( WE ASSUME SPACE HAS UNIT INDEX. ) 50 C THETD(J): ANGLE IN DEGREES BETWEEN THE DIRECTIONS OF THE INCIDENT 51 C AND THE SCATTERED RADIATION. THETD(J) IS< OR= 90.0 52 C IF THETD(J) SHOULD HAPPEN TO BE GREATER THAN 90.0, ENTER WITH 53 C SUPPLEMENTARY VALUE, SEE COMMENTS BELOW ON ELTRMX; 54 C JX: TOTAL NUMBER OF THETD FOR WHICH THE COMPUTATIONS ARE 55 C REQUIRED. JX SHOULD NOT EXCEED IT UNLESS THE DIMENSIONS 56 C STATEMENTS ARE APPROPRIATEDLY MODIFIED; 57 C 58 C THE DEFINITIONS FOR THE FOLLOWING SYMBOLS CAN BE FOUND IN"LIGHT 59 C SCATTERING BY SMALL PARTICLES,H.C.VAN DE HULST, JOHN WILEY ' 60 C SONS, INC., NEW YORK, 1957" . 61 C QEXT: EFFIECIENCY FACTOR FOR EXTINCTION,VAN DE HULST,P.14 ' 127. 62 C QSCAT: EFFIECINCY FACTOR FOR SCATTERING,V.D. HULST,P.14 ' 127. 63 C CTBRQS: AVERAGE(COSINE THETA) * QSCAT,VAN DE HULST,P.128 64 C ELTRMX(I,J,K): ELEMENTS OF THE TRANSFORMATION MATRIX F,V.D.HULST 65 C ,P.34,45 ' 125. I=1: ELEMENT M SUB 2..I=2: ELEMENT M SUB 1.. 66 C I = 3: ELEMENT S SUB 21.. I = 4: ELEMENT D SUB 21.. 67 C ELTRMX(I,J,1) REPRESENTS THE ITH ELEMENT OF THE MATRIX FOR 68 C THE ANGLE THETD(J).. ELTRMX(I,J,2) REPRESENTS THE ITH ELEMENT 69 C OF THE MATRIX FOR THE ANGLE 180.0 - THETD(J) .. 70 C 71 C IT: IS THE DIMENSION OF THETD, ELTRMX, CSTHT, PI, TAU, SI2THT, 72 C IT MUST CORRESPOND EXACTLY TO THE SECOND DIMENSION OF ELTRMX. 73 C LL: IS THE DIMENSION OF ACAP 74 C IN THE ORIGINAL PROGRAM THE DIMENSION OF ACAP WAS 7000. 75 C FOR CONSERVING SPACE THIS SHOULD BE NOT MUCH HIGHER THAN 76 C THE VALUE, N=1.1*(NREAL**2 + NIMAG**2)**.5 * X + 1 77 C WVNO: 2*PI / WAVELENGTH 78 C 79 C THIS SUBROUTINE COMPUTES THE CAPITAL A FUNCTION BY MAKING USE OF 80 C DOWNWARD RECURRENCE RELATIONSHIP. 81 C 82 C TA(1): REAL PART OF WFN(1). TA(2): IMAGINARY PART OF WFN(1). 83 C TA(3): REAL PART OF WFN(2). TA(4): IMAGINARY PART OF WFN(2). 84 C TB(1): REAL PART OF FNA. TB(2): IMAGINARY PART OF FNA. 85 C TC(1): REAL PART OF FNB. TC(2): IMAGINARY PART OF FNB. 86 C TD(1): REAL PART OF FNAP. TD(2): IMAGINARY PART OF FNAP. 87 C TE(1): REAL PART OF FNBP. TE(2): IMAGINARY PART OF FNBP. 88 C FNAP, FNBP ARE THE PRECEDING VALUES OF FNA, FNB RESPECTIVELY. 89 C 90 C IF THE CORE IS SMALL SCATTERING IS COMPUTED FOR THE SHELL ONLY 91 IFLAG = 1 92 IF ( R/RO .LT. 1.0E-06 ) IFLAG = 2 93 C 94 IF ( JX .LE. IT ) GO TO 20 95 WRITE( 6,7 ) 96 WRITE( 6,6 ) 97 STOP 30 98 20 RF = DCMPLX( RFR, -RFI ) 99 RC = DCMPLX( RE2,-TMAG2 ) 100 X = RO * WVNO 101 K1 = RC * WVNO 102 K2 = RF * WVNO ZET=0.0 103 K3 = DCMPLX( WVNO, ZET ) 104 Z(1) = K2 * RO 105 Z(2) = K3 * RO 106 Z(3) = K1 * R 107 Z(4) = K2 * R 108 X1 = DREAL( Z(1) ) 109 Y1 = DIMAG( Z(1) ) 110 X4 = DREAL( Z(4) ) 111 Y4 = DIMAG( Z(4) ) 112 RRF = 1.0 / RF 113 RX = 1.0 / X 114 RRFX = RRF * RX 115 T(1) = ( X**2 ) * ( RFR**2 + RFI**2 ) 116 T(1) = SQRT( T(1) ) 117 NMX1 = 1.10 * T(1) 118 C 119 IF ( NMX1 .LE. LL-1 ) GO TO 21 120 WRITE(6,8) 121 STOP 32 122 21 NMX2 = T(1) 123 IF ( NMX1 .GT. 150 ) GO TO 22 124 NMX1 = 150 125 NMX2 = 135 126 C 127 22 ACAP( NMX1+1 ) = ( 0.0,0.0 ) 128 IF ( IFLAG .EQ. 2 ) GO TO 26 129 DO 29 N = 1,3 130 29 W( N,NMX1+1 ) = ( 0.0,0.0 ) 131 26 CONTINUE 132 DO 23 N = 1,NMX1 133 NN = NMX1 - N + 1 134 ACAP(NN) = (NN+1) * RRFX - 1.0 / ( (NN+1) * RRFX + ACAP(NN+1) ) 135 IF ( IFLAG .EQ. 2 ) GO TO 23 136 DO 31 M = 1,3 137 31 W( M,NN ) = (NN+1) / Z(M+1) - 138 1 1.0 / ( (NN+1) / Z(M+1) + W( M,NN+1 ) ) 139 23 CONTINUE 140 DO 30 J = 1,JX 141 IF ( THETD(J) .LT. 0.0 ) THETD(J) = ABS( THETD(J) ) 142 IF ( THETD(J) .GT. 0.0 ) GO TO 24 143 CSTHT(J) = 1.0 144 SI2THT(J) = 0.0 145 GO TO 30 146 24 IF ( THETD(J) .GE. 90.0 ) GO TO 25 147 T(1) = ( 3.14159265359 * THETD(J) ) / 180.0 148 CSTHT(J) = COS( T(1) ) 149 SI2THT(J) = 1.0 - CSTHT(J)**2 150 GO TO 30 151 25 IF ( THETD(J) .GT. 90.0 ) GO TO 28 152 CSTHT(J) = 0.0 153 SI2THT(J) = 1.0 154 GO TO 30 155 28 WRITE( 6,5 ) THETD(J) 156 WRITE( 6,6 ) 157 STOP 34 158 30 CONTINUE 159 C 160 DO 35 J = 1,JX 161 PI(1,J) = 0.0 162 PI(2,J) = 1.0 163 TAU(1,J) = 0.0 164 TAU(2,J) = CSTHT(J) 165 35 CONTINUE 166 C 167 C INITIALIZATION OF HOMOGENEOUS SPHERE 168 T(1) = COS(X) 169 T(2) = SIN(X) 170 WM1 = DCMPLX( T(1),-T(2) ) 171 WFN(1) = DCMPLX( T(2), T(1) ) 172 WFN(2) = RX * WFN(1) - WM1 173 C 174 IF ( IFLAG .EQ. 2 ) GO TO 560 175 N = 1 176 C 177 C INITIALIZATION PROCEDURE FOR STRATIFIED SPHERE BEGINS HERE 178 C 179 SINX1 = SIN( X1 ) 180 SINX4 = SIN( X4 ) 181 COSX1 = COS( X1 ) 182 COSX4 = COS( X4 ) 183 EY1 = EXP( Y1 ) 184 E2Y1 = EY1 * EY1 185 EY4 = EXP( Y4 ) 186 EY1MY4 = EXP( Y1 - Y4 ) 187 EY1PY4 = EY1 * EY4 188 EY1MY4 = EXP( Y1 - Y4 ) 189 AA = SINX4 * ( EY1PY4 + EY1MY4 ) 190 BB = COSX4 * ( EY1PY4 - EY1MY4 ) 191 CC = SINX1 * ( E2Y1 + 1.0 ) 192 DD = COSX1 * ( E2Y1 - 1.0 ) 193 DENOM = 1.0 + E2Y1 * ( 4.0 * SINX1 * SINX1 - 2.0 + E2Y1 ) 194 REALP = ( AA * CC + BB * DD ) / DENOM 195 AMAGP = ( BB * CC - AA * DD ) / DENOM 196 DUMMY = DCMPLX( REALP, AMAGP ) 197 AA = SINX4 * SINX4 - 0.5 198 BB = COSX4 * SINX4 199 P24H24 = 0.5 + DCMPLX( AA,BB ) * EY4 * EY4 200 AA = SINX1 * SINX4 - COSX1 * COSX4 201 BB = SINX1 * COSX4 + COSX1 * SINX4 202 CC = SINX1 * SINX4 + COSX1 * COSX4 203 DD = -SINX1 * COSX4 + COSX1 * SINX4 204 P24H21 = 0.5 * DCMPLX( AA,BB ) * EY1 * EY4 + 205 2 0.5 * DCMPLX( CC,DD ) * EY1MY4 206 DH4 = Z(4) / ( 1.0 + ( 0.0,1.0 ) * Z(4) ) - 1.0 / Z(4) 207 DH1 = Z(1) / ( 1.0 + ( 0.0,1.0 ) * Z(1) ) - 1.0 / Z(1) 208 DH2 = Z(2) / ( 1.0 + ( 0.0,1.0 ) * Z(2) ) - 1.0 / Z(2) 209 PSTORE = ( DH4 + N / Z(4) ) * ( W(3,N) + N / Z(4) ) 210 P24H24 = P24H24 / PSTORE 211 HSTORE = ( DH1 + N / Z(1) ) * ( W(3,N) + N / Z(4) ) 212 P24H21 = P24H21 / HSTORE 213 PSTORE = ( ACAP(N) + N / Z(1) ) / ( W(3,N) + N / Z(4) ) 214 DUMMY = DUMMY * PSTORE 215 DUMSQ = DUMMY * DUMMY 216 C 217 C NOTE: THE DEFINITIONS OF U(I) IN THIS PROGRAM ARE NOT THE SAME AS 218 C THE USUBI DEFINED IN THE ARTICLE BY TOON AND ACKERMAN. THE 219 C CORRESPONDING TERMS ARE: 220 C USUB1 = U(1) USUB2 = U(5) 221 C USUB3 = U(7) USUB4 = DUMSQ 222 C USUB5 = U(2) USUB6 = U(3) 223 C USUB7 = U(6) USUB8 = U(4) 224 C RATIO OF SPHERICAL BESSEL FTN TO SPHERICAL HENKAL FTN = U(8) 225 C 226 U(1) = K3 * ACAP(N) - K2 * W(1,N) 227 U(2) = K3 * ACAP(N) - K2 * DH2 228 U(3) = K2 * ACAP(N) - K3 * W(1,N) 229 U(4) = K2 * ACAP(N) - K3 * DH2 230 U(5) = K1 * W(3,N) - K2 * W(2,N) 231 U(6) = K2 * W(3,N) - K1 * W(2,N) 232 U(7) = ( 0.0,-1.0 ) * ( DUMMY * P24H21 - P24H24 ) 233 U(8) = TA(3) / WFN(2) 234 C 235 FNA = U(8) * ( U(1)*U(5)*U(7) + K1*U(1) - DUMSQ*K3*U(5) ) / 236 2 ( U(2)*U(5)*U(7) + K1*U(2) - DUMSQ*K3*U(5) ) 237 FNB = U(8) * ( U(3)*U(6)*U(7) + K2*U(3) - DUMSQ*K2*U(6) ) / 238 2 ( U(4)*U(6)*U(7) + K2*U(4) - DUMSQ*K2*U(6) ) 239 GO TO 561 240 560 TC1 = ACAP(1) * RRF + RX 241 TC2 = ACAP(1) * RF + RX 242 FNA = ( TC1 * TA(3) - TA(1) ) / ( TC1 * WFN(2) - WFN(1) ) 243 FNB = ( TC2 * TA(3) - TA(1) ) / ( TC2 * WFN(2) - WFN(1) ) 244 561 CONTINUE 245 FNAP = FNA 246 FNBP = FNB 247 T(1) = 1.50 248 C 249 C FROM HERE TO THE STATMENT NUMBER 90, ELTRMX(I,J,K) HAS 250 C FOLLOWING MEANING: 251 C ELTRMX(1,J,K): REAL PART OF THE FIRST COMPLEX AMPLITUDE. 252 C ELTRMX(2,J,K): IMAGINARY PART OF THE FIRST COMPLEX AMPLITUDE. 253 C ELTRMX(3,J,K): REAL PART OF THE SECOND COMPLEX AMPLITUDE. 254 C ELTRMX(4,J,K): IMAGINARY PART OF THE SECOND COMPLEX AMPLITUDE. 255 C K = 1 : FOR THETD(J) AND K = 2 : FOR 180.0 - THETD(J) 256 C DEFINITION OF THE COMPLEX AMPLITUDE: VAN DE HULST,P.125. 257 TB(1) = T(1) * TB(1) 258 TB(2) = T(1) * TB(2) 259 TC(1) = T(1) * TC(1) 260 TC(2) = T(1) * TC(2) 261 DO 60 J = 1,JX 262 ELTRMX(1,J,1) = TB(1) * PI(2,J) + TC(1) * TAU(2,J) 263 ELTRMX(2,J,1) = TB(2) * PI(2,J) + TC(2) * TAU(2,J) 264 ELTRMX(3,J,1) = TC(1) * PI(2,J) + TB(1) * TAU(2,J) 265 ELTRMX(4,J,1) = TC(2) * PI(2,J) + TB(2) * TAU(2,J) 266 ELTRMX(1,J,2) = TB(1) * PI(2,J) - TC(1) * TAU(2,J) 267 ELTRMX(2,J,2) = TB(2) * PI(2,J) - TC(2) * TAU(2,J) 268 ELTRMX(3,J,2) = TC(1) * PI(2,J) - TB(1) * TAU(2,J) 269 ELTRMX(4,J,2) = TC(2) * PI(2,J) - TB(2) * TAU(2,J) 270 60 CONTINUE 271 C 272 QEXT = 2.0 * ( TB(1) + TC(1)) 273 QSCAT = ( TB(1)**2 + TB(2)**2 + TC(1)**2 + TC(2)**2 ) / 0.75 274 CTBRQS = 0.0 275 N = 2 276 65 T(1) = 2*N - 1 277 T(2) = N - 1 278 T(3) = 2*N + 1 279 DO 70 J = 1,JX 280 PI(3,J) = ( T(1) * PI(2,J) * CSTHT(J) - N * PI(1,J) ) / T(2) 281 TAU(3,J) = CSTHT(J) * ( PI(3,J) - PI(1,J) ) - 282 1 T(1) * SI2THT(J) * PI(2,J) + TAU(1,J) 283 70 CONTINUE 284 C 285 C HERE SET UP HOMOGENEOUS SPHERE 286 WM1 = WFN(1) 287 WFN(1) = WFN(2) 288 WFN(2) = T(1) * RX * WFN(1) - WM1 289 IF ( IFLAG .EQ. 2 ) GO TO 1000 290 C 291 C HERE SET UP STRATIFIED SPHERE 292 C 293 DH2 = - N / Z(2) + 1.0 / ( N / Z(2) - DH2 ) 294 DH4 = - N / Z(4) + 1.0 / ( N / Z(4) - DH4 ) 295 DH1 = - N / Z(1) + 1.0 / ( N / Z(1) - DH1 ) 296 PSTORE = ( DH4 + N / Z(4) ) * ( W(3,N) + N / Z(4) ) 297 P24H24 = P24H24 / PSTORE 298 HSTORE = ( DH1 + N / Z(1) ) * ( W(3,N) + N / Z(4) ) 299 P24H21 = P24H21 / HSTORE 300 PSTORE = ( ACAP(N) + N / Z(1) ) / ( W(3,N) + N / Z(4) ) 301 DUMMY = DUMMY * PSTORE 302 DUMSQ = DUMMY * DUMMY 303 C 304 U(1) = K3 * ACAP(N) - K2 * W(1,N) 305 U(2) = K3 * ACAP(N) - K2 * DH2 306 U(3) = K2 * ACAP(N) - K3 * W(1,N) 307 U(4) = K2 * ACAP(N) - K3 * DH2 308 U(5) = K1 * W(3,N) - K2 * W(2,N) 309 U(6) = K2 * W(3,N) - K1 * W(2,N) 310 U(7) = ( 0.0,-1.0 ) * ( DUMMY * P24H21 - P24H24 ) 311 U(8) = TA(3) / WFN(2) 312 C 313 FNA = U(8) * ( U(1)*U(5)*U(7) + K1*U(1) - DUMSQ*K3*U(5) ) / 314 2 ( U(2)*U(5)*U(7) + K1*U(2) - DUMSQ*K3*U(5) ) 315 FNB = U(8) * ( U(3)*U(6)*U(7) + K2*U(3) - DUMSQ*K2*U(6) ) / 316 2 ( U(4)*U(6)*U(7) + K2*U(4) - DUMSQ*K2*U(6) ) 317 C 318 1000 CONTINUE 319 TC1 = ACAP(N) * RRF + N * RX 320 TC2 = ACAP(N) * RF + N * RX 321 FN1 = ( TC1 * TA(3) - TA(1) ) / ( TC1 * WFN(2) - WFN(1) ) 322 FN2 = ( TC2 * TA(3) - TA(1) ) / ( TC2 * WFN(2) - WFN(1) ) 323 M = WVNO * R 324 IF ( N .LT. M ) GO TO 1002 325 IF ( IFLAG .EQ. 2 ) GO TO 1001 326 IF ( ABS( ( FN1-FNA ) / FN1 ) .LT. 1.0E-09 .AND. 327 1 ABS( ( FN2-FNB ) / FN2 ) .LT . 1.0E-09 ) IFLAG = 2 328 IF ( IFLAG .EQ. 1 ) GO TO 1002 329 1001 FNA = FN1 330 FNB = FN2 331 1002 CONTINUE 332 T(5) = N 333 T(4) = T(1) / ( T(5) * T(2) ) 334 T(2) = ( T(2) * ( T(5) + 1.0 ) ) / T(5) 335 C 336 CTBRQS = CTBRQS + T(2) * ( TD(1) * TB(1) + TD(2) * TB(2) + 337 1 TE(1) * TC(1) + TE(2) * TC(2) ) 338 2 + T(4) * ( TD(1) * TE(1) + TD(2) * TE(2) ) 339 QEXT = QEXT + T(3) * ( TB(1) + TC(1) ) 340 T(4) = TB(1)**2 + TB(2)**2 + TC(1)**2 + TC(2)**2 341 QSCAT = QSCAT + T(3) * T(4) 342 T(2) = N * (N+1) 343 T(1) = T(3) / T(2) 344 K = (N/2)*2 345 DO 80 J = 1,JX 346 ELTRMX(1,J,1) = ELTRMX(1,J,1)+T(1)*(TB(1)*PI(3,J)+TC(1)*TAU(3,J)) 347 ELTRMX(2,J,1) = ELTRMX(2,J,1)+T(1)*(TB(2)*PI(3,J)+TC(2)*TAU(3,J)) 348 ELTRMX(3,J,1) = ELTRMX(3,J,1)+T(1)*(TC(1)*PI(3,J)+TB(1)*TAU(3,J)) 349 ELTRMX(4,J,1) = ELTRMX(4,J,1)+T(1)*(TC(2)*PI(3,J)+TB(2)*TAU(3,J)) 350 IF ( K .EQ. N ) GO TO 75 351 ELTRMX(1,J,2) = ELTRMX(1,J,2)+T(1)*(TB(1)*PI(3,J)-TC(1)*TAU(3,J)) 352 ELTRMX(2,J,2) = ELTRMX(2,J,2)+T(1)*(TB(2)*PI(3,J)-TC(2)*TAU(3,J)) 353 ELTRMX(3,J,2) = ELTRMX(3,J,2)+T(1)*(TC(1)*PI(3,J)-TB(1)*TAU(3,J)) 354 ELTRMX(4,J,2) = ELTRMX(4,J,2)+T(1)*(TC(2)*PI(3,J)-TB(2)*TAU(3,J)) 355 GO TO 80 356 75 ELTRMX(1,J,2) =ELTRMX(1,J,2)+T(1)*(-TB(1)*PI(3,J)+TC(1)*TAU(3,J)) 357 ELTRMX(2,J,2) =ELTRMX(2,J,2)+T(1)*(-TB(2)*PI(3,J)+TC(2)*TAU(3,J)) 358 ELTRMX(3,J,2) =ELTRMX(3,J,2)+T(1)*(-TC(1)*PI(3,J)+TB(1)*TAU(3,J)) 359 ELTRMX(4,J,2) =ELTRMX(4,J,2)+T(1)*(-TC(2)*PI(3,J)+TB(2)*TAU(3,J)) 360 80 CONTINUE 361 C 362 IF ( T(4) .LT. 1.0E-14 ) GO TO 100 363 N = N + 1 364 DO 90 J = 1,JX 365 PI(1,J) = PI(2,J) 366 PI(2,J) = PI(3,J) 367 TAU(1,J) = TAU(2,J) 368 TAU(2,J) = TAU(3,J) 369 90 CONTINUE 370 FNAP = FNA 371 FNBP = FNB 372 IF ( N .LE. NMX2 ) GO TO 65 373 WRITE( 6,8 ) 374 STOP 36 375 100 DO 120 J = 1,JX 376 DO 120 K = 1,2 377 DO 115 I= 1,4 378 T(I) = ELTRMX(I,J,K) 379 115 CONTINUE 380 ELTRMX(2,J,K) = T(1)**2 + T(2)**2 381 ELTRMX(1,J,K) = T(3)**2 + T(4)**2 382 ELTRMX(3,J,K) = T(1) * T(3) + T(2) * T(4) 383 ELTRMX(4,J,K) = T(2) * T(3) - T(4) * T(1) 384 120 CONTINUE 385 T(1) = 2.0 * RX**2 386 QEXT = QEXT * T(1) 387 QSCAT = QSCAT * T(1) 388 CTBRQS = 2.0 * CTBRQS * T(1) 389 C 390 RETURN 391 C 392 5 FORMAT( 10X,' THE VALUE OF THE SCATTERING ANGLE IS GREATER THAN 393 1 90.0 DEGREES. IT IS ', E15.4 ) 394 6 FORMAT( // 10X, 'PLEASE READ COMMENTS.' // ) 395 7 FORMAT( // 10X, 'THE VALUE OF THE ARGUMENT JX IS GREATER THAN IT') 396 8 FORMAT( // 10X, 'THE UPPER LIMIT FOR ACAP IS NOT ENOUGH. SUGGEST 397 1 GET DETAILED OUTPUT AND MODIFY SUBROUTINE' // ) 398 C 399 END 400 SUBROUTINE REGIS (FNU,ND1,NNU,T,ND2,NT,XN2N2,XCH4CH4,XN2CH4,XN2H2) C THIS SUBROUTINE RETURNS THE PRESSURE INDUCED ABSORBTION COEFFICIENTS C FOR N2-N2, CH4-CH4, N2-CH4 + CH4-N2, H2-N2 + N2-H2. C FNU IS THE WAVENUMBER ARRAY C T IS THE TEMPERATURE ARRAY C NNU IS THE NUMBER OF WAVENUMBERS C NT IS THE NUMBER OF TEMPERATURES C ND1 IS THE DIMENSION OF THE WAVENUMERS C ND2 IS THE DIMENSION OF THE TEMPERATURES C XN2N2(ND1,ND2) IS THE N2-N2 COEFFICIENT C XCH4CH4(ND1,ND2) IS THE CH4-CH4 COEFFICIENT C XN2CH4(ND1,ND2) IS THE N2-CH4 + CH4-N2 COEFFICIENT C XN2H2(ND1,ND2) IS THE N2-H2 + H2-N2 COEFFICIENT C FROM REGIS COURTIN ADAPTED BY CPM. IMPLICIT REAL*8 (A-H,O-Z) DIMENSION FNU(NNU),T(NT), & XN2N2(ND1,ND2),XCH4CH4(ND1,ND2),XN2H2(ND1,ND2),XN2CH4(ND1,ND2) DIMENSION F8MN(100),F8NH(100),F8HN(100),F10(100), 2 XN2R(100),XN2T(100),XCH4R(100),XCH4T(100),XH2R(100),XH2T(100) DATA EPS1/71.4D0/,EPS2/148.6D0/,EPS3/36.8D0/ DO 1 IT=1,NT EPS4=DSQRT(EPS1*EPS2) EPS5=DSQRT(EPS1*EPS3) Y=4.D0*EPS4/T(IT) F8MN(IT)=FI8(Y) F10(IT)=FI10(Y) Y=4.D0*EPS5/T(IT) Z=FI8(Y) F8NH(IT)=Z F8HN(IT)=Z Y=4.D0*EPS1/T(IT) Z=FI8(Y) F8MN(IT)=F8MN(IT)/Z F8HN(IT)=F8HN(IT)/Z Y=4.D0*EPS2/T(IT) F10(IT)=F10(IT)/FI10(Y) Y=4.D0*EPS3/T(IT) F8NH(IT)=F8NH(IT)/FI8(Y) 1 CONTINUE CALL PIAN2(0.D0,NT,XN2R,XN2T,T) CALL PIACH4(0.D0,NT,XCH4R,XCH4T,T) CALL PIAH2(0.D0,NT,XH2R,XH2T,T) DO 2 INU=1,NNU CALL OPAN2(FNU(INU),NT,XN2R,XN2T) CALL OPACH4(FNU(INU),NT,XCH4R,XCH4T) CALL OPAH2(FNU(INU),NT,XH2R,XH2T) DO 11 IT=1,NT XN2N2(INU,IT)=XN2R(IT)+XN2T(IT) XCH4CH4(INU,IT)=XCH4R(IT)+XCH4T(IT) C C LINES 1 AND 3 ARE CORRECTION FACTORS INTRODUCED IN ORDER TO FIT C THE MEASUREMENTS OF DAGG ET AL (1986) BETWEEN 126 AND 212 K. C XN2CH4(INU,IT)=F8MN(IT)*(2.067D0*XN2R(IT)+2.865D0*XN2T(IT)) 1 * 2.48D0/(T(IT)**0.184) + 2 F10(IT)*(0.480D0*XCH4R(IT)+0.374D0*XCH4T(IT)) 3 * 1.54D0 C C LINE 3 IS A CORRECTION FACTOR INTRODUCED IN ORDER TO FIT C THE MEASUREMENTS OF DORE ET AL (1986) BETWEEN 91 AND 298 K. C OTHER CORRECTION FACTORS ARE IMBEDDED IN THE ROUTINE PIAH2. C XN2H2(INU,IT)= F8NH(IT)*(2.543D0*XH2R(IT)+1.445D1*XH2T(IT)) + 2 F8HN(IT)*(0.360D0*XN2R(IT)+0.246D0*XN2T(IT)) 3 * 0.30D0 11 CONTINUE 2 CONTINUE RETURN END SUBROUTINE PIAN2(NU,NT,XROT,XTRA,T) C C THIS ROUTINE WAS FIRST WRITTEN BY REGIS COURTIN IN 1980 : C THE PARAMETERS WERE DETERMINED BY THE MEASUREMENTS OF C BUONTEMPO ET AL (1975), JOURNAL OF CHEMICAL PHYSICS 63, 2570. C LAST MODIFIED BY REGIS COURTIN (APRIL 23,1986) : C THE QUADS1 PARAMETER WAS ADJUSTED TO FIT THE MEASUREMENTS OF C DAGG ET AL (1985), CANADIAN JOURNAL OF PHYSICS 63, 625. C IMPLICIT REAL*8 (A-H,O-Z) 192. REAL*8 NU,I8,NSQR,K 193. DIMENSION T(100) 194. DIMENSION XROT(100),XTRA(100) 195. DIMENSION XJ(32),G(32),E(32),WW(32),CG(32),RHO(100,32), 196. $I8(100),QUADS1(100),TAU1(100),TAU2(100),A2(100) 197. DATA JMAX1/30/,JMAX2/32/,PI/3.141592654D0/,H/1.05459D-27/, 198. $C/2.997925D10/,K/1.38054D-16/,HCK/1.43892D0/,XNLOS/2.687D19/, 199. $ASQR/3.3124D0/,EPSK/71.4D0/,PW1/.639D0/,PW2/.423D0/, $DSDT/-.0204D0/ DO 8 IT=1,NT 201. X=4.D0*EPSK/T(IT) 202. I8(IT)=FI8(X) 203. 8 CONTINUE 204. DO 10 J=1,JMAX2 205. XJ(J)=DFLOAT(J-1) 206. G(J)=6.D0 207. IF (MOD(J,2).EQ.0) G(J)=3.D0 208. E(J)=AZENER(0.D0,XJ(J)) 209. 10 CONTINUE 210. DO 20 J=1,JMAX1 211. CG(J)=1.5D0*(XJ(J)+1.D0)*(XJ(J)+2.D0)/(2.D0*XJ(J)+3.D0) 212. WW(J)=2.D0*PI*C*(E(J+2)-E(J)) 213. 20 CONTINUE 214. NSQR=(XNLOS*1.0D-24)**2 215. C1=4.D0*PI*PI*NSQR/H/C 216. DO 90 IT=1,NT 217. QUADS1(IT)=27.72D0+DSDT*T(IT) 218. TAU1(IT)=9.797D-12/(T(IT)**PW1) 219. TAU2(IT)=1.518D-12/(T(IT)**PW2) 220. SUM=0.D0 221. DO 50 J=1,JMAX2 222. ARG=HCK*E(J)/T(IT) 223. RHO(IT,J)=DEXP(-ARG) 224. SUM=SUM+(2.D0*XJ(J)+1.D0)*G(J)*RHO(IT,J) 225. 50 CONTINUE 226. DO 55 J=1,JMAX2 227. RHO(IT,J)=G(J)*RHO(IT,J)/SUM 228. 55 CONTINUE 229. A2(IT)=0.D0 230. DO 60 J=1,JMAX1 231. A2(IT)=A2(IT)+XJ(J)*(XJ(J)+1.D0)*(2.D0*XJ(J)+1.D0)*RHO(IT,J)/ 232. $ ((2.D0*XJ(J)-1.D0)*(2.D0*XJ(J)+3.D0)) 233. 60 CONTINUE 234. 90 CONTINUE 235. RETURN 236. ENTRY OPAN2(NU,NT,XROT,XTRA) 237. W=2.D0*PI*C*NU 238. DO 200 IT=1,NT 239. CZ=HCK*NU/T(IT) 240. CW=W*(1.D0-DEXP(-CZ)) 241. XTRA(IT)=A2(IT)*GAMMB(W,T(IT),TAU1(IT),TAU2(IT)) 242. XROT(IT)=0.D0 243. DO 125 J=1,JMAX1 244. XROT(IT)=XROT(IT)+CG(J)* 245. $(RHO(IT,J )*GAMMB(W-WW(J),T(IT),TAU1(IT),TAU2(IT)) 246. $+RHO(IT,J+2)*GAMMB(W+WW(J),T(IT),TAU1(IT),TAU2(IT))) 247. 125 CONTINUE 248. COEF=CW*C1*K*ASQR*QUADS1(IT)*I8(IT) 249. XROT(IT)=XROT(IT)*COEF 250. XTRA(IT)=XTRA(IT)*COEF 251. 200 CONTINUE 252. RETURN 253. END 254. DOUBLE PRECISION FUNCTION AZENER(V,J) 255. IMPLICIT REAL*8 (A-H,O-Z) 256. REAL*8 J,JP 257. VP=V+0.5D0 258. JP=J+1.D0 259. E=2359.61D0*VP-14.456D0*VP**2+7.51D-3*VP**3+ 260. $(1.9987D0-1.87D-2*VP)*J*JP-(5.8D-6-1.D-9*VP)*J**2*JP**2 261. AZENER=E 262. RETURN 263. END 264. SUBROUTINE PIACH4(NU,NT,XROT,XTRA,T) 265. IMPLICIT REAL*8 (A-H,O-Z) 266. REAL*8 NU,I10,NSQR,K 267. DIMENSION T(100) 268. DIMENSION FOX(60),XJ(23),G(23),E(23),WW(3,23),RHO(100,23), 269. $I10(100),XROT(100),XTRA(100) 270. DATA FOX /1.00,1.00,4.12,1.00,0.52,0.81,1.00,0.70,0.75,0.80, 271. $0.69,1.24,0.44,1.29,1.05,0.56,0.79,0.79,0.89,1.16,1.27,0.86, 272. $0.95,1.00,0.72,1.16,0.92,1.00,0.92,1.18,0.90,1.18,1.09,0.85, 273. $0.96,0.93,0.82,1.18,1.17,0.95,0.96,1.00,0.85,1.06,0.90,15*1.00/ 274. DATA JMAX1/20/,JMAX2/23/,PI/3.141592654D0/,H/1.05459D-27/, 275. $C/2.997925D10/,K/1.38054D-16/,HCK/1.43892D0/,XNLOS/2.687D19/, 276. $ASQR/6.7081D0/,EPSK/148.6D0/,B/5.25D0/,ANORM/4.797D17/ 277. DO 8 IT=1,NT 278. X=4.D0*EPSK/T(IT) 279. I10(IT)=FI10(X) 280. 8 CONTINUE 281. DO 10 J=1,JMAX2 282. XJ(J)=DFLOAT(J-1) 283. E(J)=B*XJ(J)*(XJ(J)+1.D0) 284. 10 CONTINUE 285. G(1)=5.D0 286. G(2)=3.D0 287. G(3)=5.D0 288. G(4)=11.D0 289. G(5)=13.D0 290. G(6)=11.D0 291. DO 15 J=7,JMAX2 292. 15 G(J)=G(J-6)+16.D0 293. DO 20 J=1,JMAX1 294. DO 20 I=1,3 295. WW(I,J)=2.D0*PI*C*(E(J+I)-E(J)) 296. 20 CONTINUE 297. NSQR=(XNLOS*1.0D-24)**2 298. C1=64.D0/63.D0*PI*PI*NSQR/H/C/ANORM 299. QUADS1=11.10D0 298. TAU1=9.00D-14 301. TAU2=13.60D-14 302. DO 90 IT=1,NT 303. SUM=0.D0 304. DO 50 J=1,JMAX2 305. ARG=HCK*E(J)/T(IT) 306. RHO(IT,J)=DEXP(-ARG) 307. SUM=SUM+(2.D0*XJ(J)+1.D0)*G(J)*RHO(IT,J) 308. 50 CONTINUE 309. DO 55 J=1,JMAX2 310. RHO(IT,J)=RHO(IT,J)/SUM 311. 55 CONTINUE 312. 90 CONTINUE 313. RETURN 314. ENTRY OPACH4(NU,NT,XROT,XTRA) 315. W=2.D0*PI*C*NU 316. DO 200 IT=1,NT 317. XROT(IT)=0.D0 318. XTRA(IT)=0.D0 319. CZ=HCK*NU/T(IT) 320. CW=W*(1.D0-DEXP(-CZ)) 321. DO 125 J=1,JMAX1 322. XTRA(IT)=XTRA(IT)+(2.D0*XJ(J)+1.D0)*(2.D0*XJ(J)+1.D0)* 323. $ RHO(IT,J)*GAMMB(W,T(IT),TAU1,TAU2) 324. DO 25 I=1,3 325. K=3*(J-1)+I 326. XROT(IT)=XROT(IT)+FOX(K)*(2.D0*XJ(J)+1.D0)*(2.D0*XJ(J+I)+1.D0)* 327. $(RHO(IT,J )*GAMMB(W-WW(I,J),T(IT),TAU1,TAU2) 328. $+RHO(IT,J+I)*GAMMB(W+WW(I,J),T(IT),TAU1,TAU2)) 329. 25 CONTINUE 330. 125 CONTINUE 331. COEF=CW*C1*K*ASQR*QUADS1*I10(IT) 332. XROT(IT)=XROT(IT)*COEF 333. XTRA(IT)=XTRA(IT)*COEF 334. 200 CONTINUE 335. RETURN 336. END 337. DOUBLE PRECISION FUNCTION FI8(X) 355. IMPLICIT REAL*8 (A-H,O-Z) 356. FI8=.3737D0/X+3.718903D0-.1908D0*X+.1617D0*X*X-3.633D-3*X**3 357. RETURN 358. END 359. DOUBLE PRECISION FUNCTION FI10(X) 360. IMPLICIT REAL*8 (A-H,O-Z) 361. FI10=.353D0/X+3.154000D0-.3060D0*X+.1410D0*X*X-2.887D-3*X**3 362. RETURN 363. END 364. DOUBLE PRECISION FUNCTION GAMMB(W,T,TAU1,TAU2) 365. IMPLICIT REAL*8 (A-H,O-Z) 366. DATA HK/7.638967D-12/,PI/3.141592654D0/ cfix ,TAU10/0.D0/,TAU20/0.D0/ 367. C NOTE. HK = 1.05459D-27/1.38054D-16 368. cfix IF (TAU1.NE.TAU10) GO TO 10 369. cfix IF (TAU2.EQ.TAU20) GO TO 20 370. cfix 10 CONTINUE 371. TAU12=TAU1*TAU1 372. TAU22=TAU2*TAU2 373. HBH = 0.5D0*HK/T 374. Z2=DSQRT ( TAU22 + HBH**2) / TAU1 375. cfix TAU10 = TAU1 376. cfix TAU20=TAU2 377. cfix 20 CONTINUE 378. WSQR=W*W 379. Z = DSQRT (1.D0+ WSQR*TAU12) * Z2 380. C COMPUTE THE MODIFIED BESSEL FUNCTION OF THE SECOND KIND (K1) 381. C USING AN UNPUBLISHED APPROXIMATION GIVEN BY COHEN. 382. F=1.5707963D0*(Z+0.5616D0)/(Z+0.4619D0) 383. BK1=DSQRT(1.D0+Z*F) 384. BK1=BK1*DEXP(-Z) 385. GAMMA=TAU1/PI*DEXP(TAU2/TAU1+HBH*W)*BK1 / (1.D0+WSQR*TAU12) 386. GAMMB=GAMMA 387. RETURN 388. END 389. SUBROUTINE PIAH2(NU,NT,XROT,XTRA,T) 00001000 C 00002000 C XKH2 IS CALLED BY TH2HE TO COMPUT XK1, A FACTOR IN THE 00003000 C H2-H2 COLLISION-INDUCED ABSORPTION. 00004000 C 00005000 C THIS VERSION INCLUDES RESULTS OF RECENT LOW-TEMPERATURE FITS 00006000 C BY G. BIRNBAUM ET AL (NBS), AS IMPLEMENTED BY VIRGIL KUNDE 00007000 C AND GORDON BJORAKER, AUGUST 1982. 00008000 C 00009000 C THIS VERSION ALLOWS FOR A NON-EQUILIBRIUM PARA-HYDROGEN FRACTION. 00010000 C 00011000 C LAST CHANGED BY JOHN HORNSTEIN CSC FEB 28,1983 00012000 C THIS CHANGE DELETED THE DOUBLE-TRANSITIONS, WHICH HAD BEEN 00013000 C INCORRECTLY FORMULATED IN BACHET ET AL. THE DELETION IS BY 00014000 C COMMENTING OUT WITH A "CD". 00015000 C 00016000 C THREE PARAMETERS ARE USED TO FIT THE H2-H2 OPACITY FROM 00017000 C 0 TO 2000 CM-1: STREN, TAU1, & TAU2. THE TEMPERATURE 00018000 C DEPENDENCE OF EACH PARAMETER IS HANDLED DIFFERENTLY. 00019000 C STREN WAS FIT TO EXPERIMENTAL VALUES IN DORE ET AL AND 00020000 C BACHET ET AL (1982) USING A LINEAR TEMPERATURE RELATION. 00021000 C TAU1 & TAU2 FOLLOW A POWER LAW OF THE FORM 00022000 C TAU = TAU0 * (T/T0)**BT AS SUGGESTED BY DORE ET AL. 00023000 C CONSTANTS FOR TAU1 ARE FROM DORE ET AL 00024000 C TAU2 = 1.23 * (TAU2 EVALUATED USING DORE POWER LAW). THIS MATCHES 00025000 C BACHET ET AL VALUES AT 195K & 297K (TAIL WT SINGLE + 00026000 C DOUBLE TRANSITION COEFFICIENTS). 00027000 C 00028000 C PARAMETER DESCRIPTION 00029000 C 00030000 C STRENGTH PARAMETER: STREN (SEE BACHET ET AL EQUATION 4B) 00031000 C STREN IS REALLY S/KB, TO AVOID LARGE POWERS OF 10. 00032000 C 00033000 C STREN = 6 * * OMEGA**2 * I8(R/SIGMA) / K 00034000 C (UNITS: KELVIN*ANGSTROM**6) 00035000 C 00036000 C IS MEAN SQUARE POLARIZABILITY UNIT: ANGSTROM**6 00037000 C OMEGA IS QUADRUPOLE MOMENT UNIT: ESU*CM**2 00038000 C R IS DISTANCE, SIGMA IS MOLECULAR SEPARATION, X = R/SIGMA 00039000 C I8(X) = 4*PI*INT(X**-8*EXP(-4.*E/(K*T)*(X**-12-X**-6))*X**2*DX) 00040000 C E & SIGMA ARE PARAMETERS OF LENNARD-JONES INTERMOLECULAR POTENTIAL 00041000 C INT(...DX) IS INTEGRAL 0 TO INFINITY 00042000 C 00043000 C TIME PARAMETERS: TAU1 & TAU2 00044000 C 00045000 C TAU1 CONTROLS HALF WIDTH NEAR LINE CENTER 00046000 C TAU2 CONTROLS EXPONENTIAL DECAY OF WINGS 00047000 C 00048000 C 00049000 C DOUBLE TRANSITIONS ARE INCLUDED. 00050000 C THE ABSORPTION DUE TO DOUBLE TRANSITIONS IS PROPORTIONAL TO C2 00051000 C C2 = 4./45. * KAPPA**2 00052000 C KAPPA = (APL-APP)/(1./3. * (APL+2.*APP)) 00053000 C APL & APP ARE POLARIZABILITIES PARALLEL 00054000 C AND PERPENDICULAR TO INTERNUCLEAR AXIS 00055000 C KAPPA = .375 FOR GROUND VIB STATE & J=0,1 OR 2 SEE KOLOS & WOLNIEWICZ00056000 C JOURNAL OF CHEMICAL PHYSICS 46, 1426 (1967) TABLE 3 IMPLICIT REAL*8 (A-H,O-Z) REAL*8 NU,NSQR,K 00058000 LOGICAL ILIST DIMENSION XROT(251),XTRA(251),XJ(10),G(10),A2(250),RHO(250,10), 0006000 A E(10),WN(10),WW(10),CG(10),BH(250),STREN(250),TAU1R(250), B TAU2R(250),TAU1T(250),TAU2T(250),COREG0(2),COREG(10,2) 0006100 DIMENSION T(251) 0006200 DATA JMAX1/8/,JMAX2/10/, 00063000 . PI/3.141593/,HBAR/1.05450D-27/,C/2.997925D+10/,K/1.38054D-16/, 00064000 . HCK/1.43879/,XNLOS/2.687E19/,S0/178./,DSDT/.4091/, 00065000 . TAU1R0/7.25/,TAU2R0/3.45/,TAU1T0/7.25/,TAU2T0/3.45/, . BT1/-.605/,BT2/-.607/,T0/273.15/,C2/0.0125/ C 00067000 DIMENSION FPARA(99) 00068000 C 00070000 C***********************************************************************00071000 C 00072000 C 00073000 C G(J) ARE STATISTICAL WTS: 00075000 C G(J)=1 EVEN ROTATIONAL STATES, 00076000 C G(J)=3 ODD ROTATIONAL STATES. 00077000 ILIST=.FALSE. C SET THE ORTHO/PARA TO EQUILIBRIUM -CPM NPARA=-1. DO 10 J = 1,JMAX2 00078000 COREG(J,1)=1.D0 COREG(J,2)=0.D0 XJ(J) = FLOAT(J-1) 00079000 G(J) = 1.0 00080000 IF (MOD(J,2) .EQ. 0) G(J) = 3.0 00081000 10 E(J) = H2ENER(0.0,XJ(J)) 00082000 C ****************** WARNING *********************** C CHANGE MADE BY REGIS COURTIN (APRIL 1986). C THE FOLLOWING COEFFICIENTS ARE INTRODUCED FOR THE CASE C OF COLLISIONS BETWEEN H2 AND N2 MOLECULES. C THE CORRECTED ABSORPTION COEFFICIENTS FIT THE DATA OF C DORE ET AL (1986), PREPRINT. C ****************************************************** COREG0(1)=22.35D0 COREG0(2)=-0.56D0 COREG(1,1)=0.36D0 COREG(1,2)=0.18D0 COREG(2,1)=10.91D0 COREG(2,2)=-0.433D0 C ****************************************************** C CG(J) = (2*J+1) * (CLEBSCH-GORDAN COEFF)**2 00083000 DO 20 J = 1,JMAX1 00084000 CG(J) = (2.0*XJ(J)+1.0) * (3.0*(XJ(J)+1.0)*(XJ(J)+2.0)) / 00085000 . (2.0*(2.0*XJ(J)+1.0)*(2.0*XJ(J)+3.0)) 00086000 WN(J) = E(J+2) - E(J) 00087000 20 WW(J) = 2.0 * PI * C * WN(J) 00088000 NSQR = (XNLOS*1.0D-24)**2 00089000 C1 = 2. * PI**2 * NSQR/(3. * HBAR * C) 00090000 C LIST HEADING FOR ORTHO AND PARA PROFILES: 00091000 IF ( (NPARA .LE. 0) .OR. (.NOT. ILIST)) GO TO 7000 00092000 WRITE(6,5000) 00093000 5000 FORMAT(//,' EQUILIBRIUM AND ACTUAL FRACTIONS OF PARA-', 00094000 . ' AND ORTHO-HYDROGEN:',/,' LAYER',7X,'FPARA(EQU)', 00095000 . 7X,'FPARA(HERE)',7X,'FORTHO(EQU)',7X,'FORTHO(HERE)') 00096000 7000 DO 90 IT = 1,NT 00097000 BH(IT) = HBAR / (K*T(IT)) 00098000 C EVALUATE STREN, TAU1R, TAU2R AT DESIRED T 00099000 STREN(IT) = (S0 + DSDT*T(IT)) 00100000 TAU1R(IT) = TAU1R0 * (T(IT)/T0)**BT1 * 1.0D-14 00101000 TAU2R(IT) = TAU2R0 * (T(IT)/T0)**BT2 * 1.0D-14 00102000 TAU1T(IT) = TAU1T0 * (T(IT)/T0)**BT1 * 1.0D-14 TAU2T(IT) = TAU2T0 * (T(IT)/T0)**BT2 * 1.0D-14 C COMPUTE THE FULL PARTION FUNCTION Z, USED IN EQUILIBRIUM, 00103000 C WHERE ORTHO AND PARA ARE CONVENIENTLY TREATED AS DIFFERENT 00104000 C STATES OF THE SAME SPECIES. 00105000 Z = 0.0 00106000 DO 50 J = 1,JMAX2 00107000 RHO(IT,J) = EXP(-1.*HCK*E(J)/T(IT)) 00108000 50 Z = Z + (2.0*XJ(J)+1.0)*G(J)*RHO(IT,J) 00109000 IF (NPARA .LE. 0) GO TO 54 00110000 C COMPUTE THE PARTITION FUNCTIONS ZPARA AND ZORTHO USED FOR 00111000 C NON-EQUILIBRIUM RATIOS, WHERE IT IS CONVENIENT TO TREAT 00112000 C ORTHO AND PARA AS DISTINCT SPECIES. THE NUCLEAR SPIN 00113000 C FACTORS G(J) CANCEL OUT IN THIS CASE. 00114000 ZPARA = 0. 00115000 ZORTHO = 0. 00116000 DO 1000 J=1,JMAX2,2 00117000 ZPARA = ZPARA + (2.*XJ(J) + 1.)*RHO(IT,J) 00118000 JJ = J + 1 00119000 1000 ZORTHO = ZORTHO + (2.*XJ(JJ) + 1.)*RHO(IT,JJ) 00120000 C COMPUTE AND LIST THE EQUILIBRIUM AND ACTUAL PROFILES: 00121000 FEPARA = ZPARA/Z 00122000 FEORTH = 3.*ZORTHO/Z 00123000 FORTHO = 1. - FPARA(IT) 00124000 IF (ILIST) WRITE(6,2000) IT, FEPARA, FPARA(IT), FEORTH, FORTHO00125000 2000 FORMAT(' ',I4,2F15.5,10X,2F15.5) 00126000 C FORM A NEW RHO WHICH EQUALS RHO(PARA) WHEN XJ IS EVEN 00127000 C (INDEX J IS ODD) AND EQUALS RHO(ORTHO) WHEN XJ IS ODD. 00128000 DO 3000 J=1,JMAX2,2 00129000 RHO(IT,J) = FPARA(IT)*RHO(IT,J)/ZPARA 00130000 JJ = J + 1 00131000 3000 RHO(IT,JJ) = FORTHO*RHO(IT,JJ)/ZORTHO 00132000 GO TO 57 00133000 C EQUILIBRIUM HYDROGEN STATISTICAL WEIGHTS 00134000 54 DO 55 J = 1,JMAX2 00135000 55 RHO(IT,J) = G(J)*RHO(IT,J) / Z 00136000 57 A2(IT) = 0.0 00137000 DO 60 J = 1,JMAX1 00138000 60 A2(IT) = A2(IT) + XJ(J)*(XJ(J)+1.0)*(2.0*XJ(J)+1.0)*RHO(IT,J)/00139000 . ((2.0*XJ(J)-1.0)*(2.0*XJ(J)+3.0)) 00140000 90 CONTINUE 00141000 RETURN ENTRY OPAH2(NU,NT,XROT,XTRA) W = 2.0 * PI * C * NU 00142000 DO 200 IT = 1,NT 00143000 DBL = 0. 00144000 FR = 0. 00145000 C EVALUATE TRANSLATIONAL PART OF SHAPE FACTOR F 00146000 FT = A2(IT) * GAMFCN(W,T(IT),TAU1T(IT),TAU2T(IT)) 00147000 .* COREG0(1)*T(IT)**COREG0(2) DO 125 J = 1,JMAX1 00148000 C EVALUATE THE ROTATIONAL PART OF F 00149000 FR = FR + CG(J) * (RHO(IT,J)*GAMFCN(W-WW(J),T(IT),TAU1R(IT), 00150000 . TAU2R(IT))+RHO(IT,J+2)*GAMFCN(W+WW(J),T(IT),TAU1R(IT), 00151000 . TAU2R(IT))) 00152000 . * COREG(J,1)*T(IT)**COREG(J,2) C DBL = DBL + CG(J) * (RHO(IT,J) + RHO(IT,J+2)) 00153000 125 CONTINUE 00154000 C ADD ON PART OF DOUBLE TRANSITION OPACITY (BACHET ET AL EQN 11) 00155000 CD FR = FR * (1.0 + C2 * A2(IT)) 00156000 C MORE DOUBLE TRANS (BACHET ET AL EQN 12) 00157000 CD FT = FT * (1.0 + C2 * A2(IT)) 00158000 C AND STILL MORE DOUBLE TRANS (BACHET ET AL EQN 13) 00159000 CD FT = FT + C2 * DBL*DBL*GAMFCN(W,T(IT),TAU1T(IT),TAU2T(IT)) 00160000 F = FT + FR 00161000 C EVALUATE & ADD ON DOUBLE TRANSITIONS (BACHET ET AL EQN 14) 00162000 CD DO 130 J1=1,4 00163000 CD DO 130 J2=1,4 00164000 CD IF (J1.NE.(J1+2).OR.J2.NE.(J1+2)) 00165000 CD A F = F + C2*RHO(IT,J1)*CG(J1)*RHO(IT,J2)*CG(J2) 00166000 CD B * GAMFCN(W-WW(J1)-WW(J2),T(IT),TAU1R(IT),TAU2R(IT)) 00167000 CD IF ((J1+2).NE.(J2+2).OR.J2.NE.J1) 00168000 CD A F = F + C2*RHO(IT,J1+2)*CG(J1)*RHO(IT,J2)*CG(J2) 00169000 CD B * GAMFCN(W+WW(J1)-WW(J2),T(IT),TAU1R(IT),TAU2R(IT)) 00170000 CD IF ((J1+2).NE.J2.OR.(J2+2).NE.J1) 00171000 CD A F = F + C2*RHO(IT,J1+2)*CG(J1)*RHO(IT,J2+2)*CG(J2) 00172000 CD B * GAMFCN(W+WW(J1)+WW(J2),T(IT),TAU1R(IT),TAU2R(IT)) 00173000 CD IF (J1.NE.J2.OR.(J2+2).NE.(J1+2)) 00174000 CD A F = F + C2*RHO(IT,J1)*CG(J1)*RHO(IT,J2+2)*CG(J2) 00175000 CD B * GAMFCN(W-WW(J1)+WW(J2),T(IT),TAU1R(IT),TAU2R(IT) 00176000 CD130 CONTINUE 00177000 XROT(IT) = C1 * K * W * (1.0-EXP(-BH(IT)*W)) * STREN(IT)*FR 00178000 XTRA(IT) = XROT(IT)*FT/FR 200 CONTINUE 00179000 RETURN 00180000 END 00183000 DOUBLE PRECISION FUNCTION GAMFCN(W,T,TAU1,TAU2) IMPLICIT REAL*8 (A-H,O-Z) C C COMPUTES THE LINE SHAPE FOR PRESSURE-INDUCED H2-H2 AND H2-HE C TRANSITIONS, FROM THE SEMI-EMIRICAL FORMULAE OF BIRNBAUM ET AL. C SEE EG., GEORGE BIRNBAUM AND E. RICHARD COHEN, CANADIAN JOURNAL C OF PHYSICS, VOL. 54, 593 (1976). C NOTE THAT "GAMFCN" IS A POOR NAME FOR THIS ROUTINE; THE GAMMA C OF BIRNBAUM AND COHEN IS NOT THE USUAL "GAMMA FUNCTION". C DATA HK/7.638315D-12/,PI/3.141593/,TAU10/0.0/,TAU20/0.0/ C NOTE: HK = 1.05450D-27 / 1.38054D-16 C C*********************************************************************** IF (TAU1 .NE. TAU10) GO TO 10 IF (TAU2 .EQ. TAU20) GO TO 20 10 TAU12 = TAU1 * TAU1 TAU22 = TAU2 * TAU2 HBH = 0.5 * HK / T Z2 = DSQRT(TAU22 + HBH**2) / TAU1 TAU10 = TAU1 TAU20 = TAU2 20 WSQR = W * W Z = DSQRT(1.0+WSQR*TAU12) * Z2 IF (Z .LE. 1.0) GO TO 50 C COMPUTE K1 BESSEL FUNCTION USING POLYNOMIAL APPROXIMATION A = 1.0 / Z BK1 = 1.253314 + .4699927*A B = A * A BK1 = BK1 - .1468583*B B = B * A BK1 = BK1 + .1280427*B B = B * A BK1 = BK1 - .1736432*B B = B * A BK1 = BK1 + .2847618*B B = B * A BK1 = BK1 - .4594342*B B = B * A BK1 = BK1 + .6283381*B B = B * A BK1 = BK1 - .6632295*B B = B * A BK1 = BK1 + .5050239*B B = B * A BK1 = BK1 - .2581304*B B = B * A BK1 = BK1 + .7880001D-01*B B = B * A BK1 = BK1 - .1082418D-01*B BK1 = EXP(-Z) * BK1 * DSQRT(A) GO TO 100 C COMPUTE K1 BESSEL FUNCTION USING SERIES EXPANSION 50 A = 0.5 * Z B = .5772157 + DLOG(A) C = A * A BK1 = 1.0/Z + A*(B-0.5) A = A * C BK1 = BK1 + A*.2500000D+00*(0.5+(B-1.500000)*2.0) A = A * C BK1 = BK1 + A*.2777777D-01*(0.5+(B-1.833333)*3.0) A = A * C BK1 = BK1 + A*.1736110D-02*(0.5+(B-2.083333)*4.0) A = A * C BK1 = BK1 + A*.6944439D-04*(0.5+(B-2.283333)*5.0) A = A * C BK1 = BK1 + A*.1929009D-05*(0.5+(B-2.449999)*6.0) A = A * C BK1 = BK1 + A*.3936752D-07*(0.5+(B-2.592855)*7.0) A = A * C BK1 = BK1 + A*.6151173D-09*(0.5+(B-2.717855)*8.0) 100 CONTINUE GAMFCN = TAU1/PI * EXP(TAU2/TAU1+HBH*W) * Z*BK1 / (1.0+WSQR*TAU12) RETURN END DOUBLE PRECISION FUNCTION H2ENER(V,J) C H2ENER SUBROUTINE OF THE INV PROGRAM. COMPUTES THE ENERGY C (IN CM-1) OF A VIBRATION-ROTATION STATE OF A HYDROGEN MOLECULE. C THE VIBRATION QUANTUM NUMBER IS V, AND THE QUANTUM NUMBER FOR C THE RIGID BODY ANGULAR MOMENTUM IS J (A REAL*4 QUANTITY). C THE FIRST LINE OF THE FORMULA FOR E IS THE CONTRIBUTION FROM C PURE VIBRATION, INCLUDING ANHARMONIC TERMS. THE OTHER LINES C ACCOUNT FOR COUPLED VIBRATION AND ROTATION, INCLUDING C CENTRIFUGAL DISTORTION. (THE (J(J+1))**2 AND (J(J+1))**3 C PROVIDE FOR CENTRIFUGAL DISTORTION; THE VP AND VP**2 IN THE C ROTATION TERMS PROVIDE FOR COUPLING BETWEEN VIBRATION AND C ROTATION.) C THE FORMULA OF COHEN AND BIRNBAUM(1981), C NU = 59.3392*(J(J+1)) - 0.04599*(J(J+1))**2 C + 0.000052*(J(J+1))**3 CM-1, C IS A SPECIAL CASE OF THE FORMULA USED HERE, OBTAINED BY C SETTING V=0 (IE., VP = 1/2); THE VP TERMS IN THE VIBRATION- C ROTATION CONTRIBUTIONS CORRECT THE INITIAL TERMS TO C PRODUCE THE COEFFICIENTS IN THE COHEN AND BIRNBAUM FORMULA. C FOR THE COLD ATMOSPHERES OF THE OUTER PLANETS, THE SIGNIF- C ICANTLY POPULATED LEVELS HAVE V=0. C C*********************************************************************** C IMPLICIT REAL*8 (A-H,O-Z) REAL*8 J,JP C VP = V + 0.5 JP = J + 1.0 E = 4400.39*VP - 120.815*VP**2 + 0.7242*VP**3 + A (60.841 - 3.0177*VP + 0.0286*VP**2)*J*JP - B (0.04684 - 0.00171*VP + 3.1D-05*VP**2)*J**2*JP**2 + C 5.2D-05*J**3*JP**3 - 2170.08 H2ENER = E RETURN END SUBROUTINE IKSUM(K,EK,NT,T,IK) IMPLICIT REAL*8 (A-H,O-Z) REAL*8 IK DOUBLE PRECISION TSUM DIMENSION T(250),IK(250),TSUM(250),EKT(250) DATA PI/3.14159/,X1/0.1/,DX/0.05/,NMAX/199/ C DO 10 I = 1,NT EKT(I) = -4.0*EK/T(I) 10 TSUM(I) = 0.D0 C DO 100 N = 1,NMAX X = X1 + FLOAT(N-1)*DX XKR = X**(2-K) XDIF = X**(-6) XDIF = XDIF*(XDIF - 1.) DO 50 I = 1,NT ARG = EKT(I) * XDIF IF (ARG .LT. -20.0) GO TO 50 TNOW = XKR * EXP(ARG) TSUM(I) = TSUM(I) + DBLE(TNOW) 50 CONTINUE 100 CONTINUE C COEF = 4.0*PI*DX DO 125 I = 1,NT 125 IK(I) = COEF*SNGL(TSUM(I)) C RETURN END