Files
GEOS-Chem-adjoint-v35-note/code/lidort/thread_sourcecode_MkII_F90/LIDORT.PARS_F90
2018-08-28 00:35:59 -04:00

371 lines
12 KiB
Plaintext

!$Id: LIDORT.PARS_F90,v 1.1 2010/08/01 18:26:37 daven Exp $
! ===============================================================
! = =
! = THE LIDORT FAMILY =
! = =
! = LInearized Discrete Ordinate Radiative Transfer) =
! = -- - - - - =
! = =
! ===============================================================
! ===============================================================
! = =
! = Author : Robert. J. D. Spurr =
! = =
! = Address : RT Solutions, inc. =
! = 9 Channing Street =
! = Cambridge, MA 02138, USA =
! = Tel: (617) 492 1183 =
! = =
! = Email : rtsolutions@verizon.net =
! = =
! = This Version : 3.5 F90 =
! = Release Date : June 2010 =
! = =
! = NEW: THERMAL SUPPLEMENT INCLUDED (3.2) =
! = NEW: OUTGOING SPHERICITY CORRECTION (3.2) =
! = NEW: TOTAL COLUMN JACOBIANS (3.3) =
! = VLIDORT COMPATIBILITY (3.4) =
! = THREADED/OPTIMIZED F90 code (3.5) =
! = =
! ===============================================================
! =====================================================
! = =
! = This Version of LIDORT comes with a GNU-style =
! = license. Please read the license carefully. =
! = =
! =====================================================
! File name : LIDORT.PARS_F90
! Purpose : Include File of constants for LIDORT model.
! Version number
! ==============
CHARACTER*3 LIDORT_VERSION_NUMBER
PARAMETER ( LIDORT_VERSION_NUMBER = '3.5' )
! File i/o unit numbers
! ======================
INTEGER LIDORT_FUNIT, LIDORT_INUNIT, LIDORT_SCENUNIT
INTEGER LIDORT_RESUNIT, LIDORT_ERRUNIT, LIDORT_DBGUNIT
PARAMETER ( LIDORT_INUNIT = 21 )
PARAMETER ( LIDORT_SCENUNIT = 22 )
PARAMETER ( LIDORT_FUNIT = 23 )
PARAMETER ( LIDORT_RESUNIT = 24 )
PARAMETER ( LIDORT_ERRUNIT = 25 )
PARAMETER ( LIDORT_DBGUNIT = 71 )
! Basic dimensions
! ================
! Computational dimensioning
! --------------------------
! Maximum number of computational threads
INTEGER MAXTHREADS
! increase to match JJPAR (dkh, 07/28/10)
!PARAMETER ( MAXTHREADS = 8 )
PARAMETER ( MAXTHREADS = 46 )
! Number of computational streams in the half-space
INTEGER MAXSTREAMS
PARAMETER ( MAXSTREAMS = 10 )
! Maximum number of computational layers
INTEGER MAXLAYERS
! (dkh, 07/26/10)
!PARAMETER ( MAXLAYERS = 23 )
PARAMETER ( MAXLAYERS = 47 )
! Maximum number of fine layers used in single scattering corrections
INTEGER MAXFINELAYERS
PARAMETER ( MAXFINELAYERS = 4 )
! Maximum number of input moments.
! (Use full range for exact single scatter calculations)
INTEGER MAXMOMENTS_INPUT
PARAMETER ( MAXMOMENTS_INPUT = 180 )
! Max number of thermal coefficients
INTEGER MAX_THERMAL_COEFFS
PARAMETER ( MAX_THERMAL_COEFFS = 3 )
! Geometrical and output parameters
! ---------------------------------
! Maximum number of solar beams
INTEGER MAXBEAMS
PARAMETER ( MAXBEAMS = 4 )
! maximum number of user-defined output zenith angles
INTEGER MAX_USER_STREAMS
PARAMETER ( MAX_USER_STREAMS = 4 )
! maximum number of user-defined output relative azimuth angles
INTEGER MAX_USER_RELAZMS
PARAMETER ( MAX_USER_RELAZMS = 3 )
! Maximum number of output levels
INTEGER MAX_USER_LEVELS
PARAMETER ( MAX_USER_LEVELS = 5 )
! Maximum number of output levels away from layer boundaries
! This must be less than or equal to the previous entry
INTEGER MAX_PARTLAYERS
PARAMETER ( MAX_PARTLAYERS = 2 )
! Fixed parameters
! ----------------
! Two directions (Up and Down)
INTEGER MAX_DIRECTIONS
PARAMETER ( MAX_DIRECTIONS = 2 )
! Surface BRDF dimensioning
! -------------------------
! Maximum number of BRDF kernels
INTEGER MAX_BRDF_KERNELS
PARAMETER ( MAX_BRDF_KERNELS = 3 )
! Maximum number of BRDF parameters per kernel
INTEGER MAX_BRDF_PARAMETERS
PARAMETER ( MAX_BRDF_PARAMETERS = 3 )
! Maximum number of azimuth-quadrature streams for BGRDF Fourier.
INTEGER MAXSTREAMS_BRDF, MAXSTHALF_BRDF
! PARAMETER ( MAXSTREAMS_BRDF = 2 )
PARAMETER ( MAXSTREAMS_BRDF = 101 ) ! best
! Weighting functions
! -------------------
! Maximum number of profile/column weighting functions
INTEGER MAX_ATMOSWFS
PARAMETER ( MAX_ATMOSWFS = 4 )
! Maximum number of surface property weighting functions
INTEGER MAX_SURFACEWFS
PARAMETER ( MAX_SURFACEWFS = 7 )
! Maximum number of error messages
INTEGER MAX_MESSAGES
PARAMETER ( MAX_MESSAGES = 25 )
! Derived dimensions
! ==================
! Maximum possible geometries
INTEGER MAX_GEOMETRIES
INTEGER TMP1
PARAMETER (TMP1=MAX_USER_RELAZMS*MAXBEAMS)
PARAMETER (MAX_GEOMETRIES=MAX_USER_STREAMS*TMP1)
! All streams
INTEGER MAX_ALLSTRMS
PARAMETER ( MAX_ALLSTRMS = MAX_USER_STREAMS + MAXSTREAMS )
! All streams for the Legendre PI-matrix setup.
! Straightline setting: This setting should avoid dimensioning error
! INTEGER MAX_ALLSTRMS_P1
! PARAMETER ( MAX_ALLSTRMS_P1 = MAX_ALLSTRMS + MAXBEAMS )
! All streams for the Legendre setup.
! This setting should avoid dimensioning error Watch out for Kill
INTEGER MAX_ALLSTRMS_P1
PARAMETER (MAX_ALLSTRMS_P1=MAX_ALLSTRMS + MAXBEAMS*MAXLAYERS )
! Maximum number of moments in the diffuse field calculation
! This is always 2*MAXSTREAMS, in case we need DELTA-M
INTEGER MAXMOMENTS
PARAMETER ( MAXMOMENTS = 2*MAXSTREAMS )
! Maximum number of Fourier components = 2*MAXSTREAMS - 1
INTEGER MAXFOURIER
PARAMETER ( MAXFOURIER = 2*MAXSTREAMS - 1 )
! Half the number of BRDF azimuth quadratures
PARAMETER ( MAXSTHALF_BRDF = MAXSTREAMS_BRDF / 2 )
! Other derived dimensions
INTEGER MAXSTREAMS_2, MAXSTREAMS_P1
PARAMETER ( MAXSTREAMS_2 = 2*MAXSTREAMS )
PARAMETER ( MAXSTREAMS_P1 = MAXSTREAMS + 1 )
! For the BVP problems
INTEGER MAXTOTAL, MAXBANDTOTAL
PARAMETER ( MAXTOTAL = MAXLAYERS*MAXSTREAMS_2 )
PARAMETER ( MAXBANDTOTAL = 9*MAXSTREAMS - 2 )
! Format constants
! ================
CHARACTER *(*) FMT_HEADING
PARAMETER ( FMT_HEADING = '( / T6, ''-----> '', A, /)' )
CHARACTER *(*) FMT_INTEGER
PARAMETER ( FMT_INTEGER = '(T6, A, T58, I10)' )
CHARACTER *(*) FMT_REAL
PARAMETER ( FMT_REAL = '(T6, A, T58, 1PG14.6)' )
CHARACTER *(*) FMT_CHAR
PARAMETER ( FMT_CHAR = '(T6, A, T48, A20)' )
CHARACTER *(*) FMT_SECTION
PARAMETER ( FMT_SECTION = '( / T6, ''-----> '', A, /)' )
! numbers
! =======
DOUBLE PRECISION FOUR,THREE,TWO,ONEP5,ONE,ZERO
DOUBLE PRECISION MINUS_ONE,MINUS_TWO
DOUBLE PRECISION HALF,QUARTER,DEG_TO_RAD,PIE,PI4,PI2,PIO2,PIO4
DOUBLE PRECISION EPS3, EPS4, EPS5
DOUBLE PRECISION SMALLNUM, BIGEXP
PARAMETER ( ONE = 1.0D0, ZERO = 0.0D0, ONEP5 = 1.5D0 )
PARAMETER ( TWO = 2.0D0, THREE = 3.0D0, FOUR = 4.0D0 )
PARAMETER ( QUARTER = 0.25D0, HALF = 0.5D0 )
PARAMETER ( MINUS_ONE = -ONE )
PARAMETER ( MINUS_TWO = -TWO )
PARAMETER ( DEG_TO_RAD = 1.7453292519943D-02 )
PARAMETER ( PIE = 180.0D0*DEG_TO_RAD )
PARAMETER ( PI2 = 2.0D0 * PIE )
PARAMETER ( PI4 = 4.0D0 * PIE )
PARAMETER ( PIO2 = HALF * PIE )
PARAMETER ( PIO4 = QUARTER * PIE )
PARAMETER ( EPS3 = 0.001D0 )
PARAMETER ( EPS4 = 0.0001D0 )
PARAMETER ( EPS5 = 0.00001D0 )
PARAMETER ( SMALLNUM = 1.0D-15 )
PARAMETER ( BIGEXP = 32.0D0 )
! Control for Using L'Hopital's Rule
DOUBLE PRECISION HOPITAL_TOLERANCE
PARAMETER ( HOPITAL_TOLERANCE = EPS5 )
! Control for limits of single scatter albedo
DOUBLE PRECISION OMEGA_SMALLNUM
PARAMETER ( OMEGA_SMALLNUM = 1.0D-8 )
! Control for limits of extinction optical depth along solar path
DOUBLE PRECISION MAX_TAU_SPATH
PARAMETER ( MAX_TAU_SPATH = 32.0D0 )
! Control for limits of extinction optical depth along USER paths
DOUBLE PRECISION MAX_TAU_UPATH
PARAMETER ( MAX_TAU_UPATH = 32.0D0 )
! Control for limits of extinction optical depth along QUADRATURE paths
DOUBLE PRECISION MAX_TAU_QPATH
PARAMETER ( MAX_TAU_QPATH = 32.0D0 )
! error indices
! =============
INTEGER LIDORT_SERIOUS
PARAMETER ( LIDORT_SERIOUS = 4 )
INTEGER LIDORT_WARNING
PARAMETER ( LIDORT_WARNING = 3 )
INTEGER LIDORT_INFO
PARAMETER ( LIDORT_INFO = 2 )
INTEGER LIDORT_DEBUG
PARAMETER ( LIDORT_DEBUG = 1 )
INTEGER LIDORT_SUCCESS
PARAMETER ( LIDORT_SUCCESS = 0 )
! directional indices
INTEGER UPIDX
PARAMETER ( UPIDX = 1 )
INTEGER DNIDX
PARAMETER ( DNIDX = 2 )
! surface indices
! ---------------
! These refer to the BRDF kernel functions currently included.
INTEGER LAMBERTIAN_IDX
INTEGER ROSSTHIN_IDX
INTEGER ROSSTHICK_IDX
INTEGER LISPARSE_IDX
INTEGER LIDENSE_IDX
INTEGER HAPKE_IDX
INTEGER ROUJEAN_IDX
INTEGER RAHMAN_IDX
INTEGER COXMUNK_IDX
! New for Version 3.4R
INTEGER BREONVEG_IDX
INTEGER BREONSOIL_IDX
! These never used up to and including Version 3.4
! INTEGER GISSSOIL_IDX
! INTEGER GISSSNOW_IDX
PARAMETER ( LAMBERTIAN_IDX = 1 )
PARAMETER ( ROSSTHIN_IDX = 2 )
PARAMETER ( ROSSTHICK_IDX = 3 )
PARAMETER ( LISPARSE_IDX = 4 )
PARAMETER ( LIDENSE_IDX = 5 )
PARAMETER ( HAPKE_IDX = 6 )
PARAMETER ( ROUJEAN_IDX = 7 )
PARAMETER ( RAHMAN_IDX = 8 )
PARAMETER ( COXMUNK_IDX = 9 )
PARAMETER ( BREONVEG_IDX = 10 )
PARAMETER ( BREONSOIL_IDX = 11 )
! PARAMETER ( GISSSOIL_IDX = 10 )
! PARAMETER ( GISSSNOW_IDX = 11 )
INTEGER MAXBRDF_IDX
PARAMETER ( MAXBRDF_IDX = BREONSOIL_IDX )
! PARAMETER ( MAXBRDF_IDX = GISSSNOW_IDX )
! End of file.