From 5c33cec5d029b1256b030bf83ae424ba79e75384 Mon Sep 17 00:00:00 2001 From: Quentin Rodier <quentin.rodier@meteo.fr> Date: Wed, 17 Aug 2022 17:05:59 +0200 Subject: [PATCH] Quentin 17/08/2022: add old MEGAN files contained in the old megan.tar.gz (begin of history) --- src/LIB/MEGAN/.arbre2.txt.swp | Bin 0 -> 12288 bytes src/LIB/MEGAN/emproc.F90 | 284 +++++++ src/LIB/MEGAN/index1.F90 | 104 +++ src/LIB/MEGAN/init_mgn2mech.F90 | 208 +++++ src/LIB/MEGAN/julian.F90 | 92 +++ src/LIB/MEGAN/mgn2mech.F90 | 315 ++++++++ src/LIB/MEGAN/modd_megan.F90 | 145 ++++ src/LIB/MEGAN/modd_mgn2mech.F90 | 1275 ++++++++++++++++++++++++++++++ src/LIB/MEGAN/mode_gamma_etc.F90 | 553 +++++++++++++ src/LIB/MEGAN/mode_megan.F90 | 1220 ++++++++++++++++++++++++++++ src/LIB/MEGAN/mode_soilnox.F90 | 255 ++++++ src/LIB/MEGAN/soilnox.F90 | 172 ++++ src/LIB/MEGAN/solarangle.F90 | 56 ++ 13 files changed, 4679 insertions(+) create mode 100644 src/LIB/MEGAN/.arbre2.txt.swp create mode 100644 src/LIB/MEGAN/emproc.F90 create mode 100644 src/LIB/MEGAN/index1.F90 create mode 100644 src/LIB/MEGAN/init_mgn2mech.F90 create mode 100644 src/LIB/MEGAN/julian.F90 create mode 100644 src/LIB/MEGAN/mgn2mech.F90 create mode 100644 src/LIB/MEGAN/modd_megan.F90 create mode 100644 src/LIB/MEGAN/modd_mgn2mech.F90 create mode 100644 src/LIB/MEGAN/mode_gamma_etc.F90 create mode 100644 src/LIB/MEGAN/mode_megan.F90 create mode 100644 src/LIB/MEGAN/mode_soilnox.F90 create mode 100644 src/LIB/MEGAN/soilnox.F90 create mode 100644 src/LIB/MEGAN/solarangle.F90 diff --git a/src/LIB/MEGAN/.arbre2.txt.swp b/src/LIB/MEGAN/.arbre2.txt.swp new file mode 100644 index 0000000000000000000000000000000000000000..53891c1f3841e8264bd204ddb71f260ba22e4442 GIT binary patch literal 12288 zcmeI1O=}ZT6oyZ`uS#9&;;M)nP0|R(1`z^{C6Y|RkRWct&EzJI&KEOxV1!b4qPuSV z4+h0Qk(Ix}t-8~tYtP)7eAQ69Ro;O&H#g_JXU=)<WDzo`^qOsPuT&wvE)h*`ojg6E z*PEjwqLGY(B+UY6Uv3&F(P;PVB#s{E1<ReDRn8nLE$b-pUzFp>F1H&8b*p%l(I8UQ zl1}wsYa#&zK;XOtw&-qk$9&aqT)!qRZ+FjYL>>r$00@8p2!H?xfB*=9z<)qMha2>Y z=h!S}*)G<NQ){us0s<fa0w4eaAOHd&00JNY0w4eaAn*?okVB%ITSRYJ+5i8u-~YcZ z5`AHPWPM;ItX<a63q(Iy-&yZiJ=Rs$71lSd@s;(N^@)|$e8a*80w4eaAOHd&00JNY z0w4eaAh1Nh@g3dw#(vdP_A_z+&I7UXNokbsRcIwX+vFkTg;8La9`03)x!4*P#ew7c zL7D|?LWZGorxOv%NSrd|c}|*FBrh1MzNg00&z*^OTqj<!ntR#O55kv4X5MG!981rW zeWguPHL=D$?{<;8u+N(@U9Y&8<`GJZIf&WtGi!fTjM6^bZ`1@))7o!5*;zBqti)|$ zhMxCR><xtCP=+d{&S9(mxNaS^8tZEPF}!icfh!~Fk6lHNx~*p2TD2;3Am;AN<7E%R z^Tc(ePuY14=Z{G4)^gw~nWVyXrjuA??^GO4-`grK(ig{P2Y#%juQ|j#x~)csk^BZd C%LSVN literal 0 HcmV?d00001 diff --git a/src/LIB/MEGAN/emproc.F90 b/src/LIB/MEGAN/emproc.F90 new file mode 100644 index 000000000..508a9265c --- /dev/null +++ b/src/LIB/MEGAN/emproc.F90 @@ -0,0 +1,284 @@ + +SUBROUTINE EMPROC(KTIME, KDATE, PPFD_D, PTEMP_D, PDI, PRECADJ, & + PLAT, PLONG, PLAIP, PLAIC, PTEMP, PPFD, & + PWIND, PRES, PQV, KSLTYP, PSOILM, PSOILT, & + PFTF, OSOIL, PCFNO, PCFNOG, PCFSPEC ) + +!*********************************************************************** +! THIS PROGRAM COMPUTES BIOGENIC EMISSION USING INPUT EMISSION +! CAPACITY MAPS AND MCIP OUTPUT VARIABLES. +! THE EMISSION CAPACITY MAP (INPNAME) ARE GRIDDED IN NETCDF-IOAPI FORMAT +! WITH ALL THE DAILY AVERAGE PPFD AND DAILY AVERAGE TEMPERATURE. +! +! NOTE: THE PROJECTION AND INPUT GRIDS OF THE TWO FILES MUST BE +! IDENTICAL. +! +! +! CALL: +! CHECKMEM +! MODULE GAMMA_ETC +! GAMMA_LAI +! GAMMA_P +! GAMMA_TLD +! GAMMA_TLI +! GAMMA_A +! GAMMA_S +! +! HISTORY: +! CREATED BY JACK CHEN 11/04 +! MODIFIED BY TAN 11/21/06 FOR MEGAN V2.0 +! MODIFIED BY XUEMEI WANG 11/04/2007 FOR MEGAN2.1 +! MODIFIED BY JULIA LEE-TAYLOR 03/18/2008 FOR MEGAN2.1 +! MODIFIED BY XUEMEI WANG 09/30/2008 FOR MEGAN2.1 +! MODIFIED BY TAN 07/28/2011 FOR MEGAN2.1 +! MODIFIED BY P. TULET 01/11/2014 FOR COUPLING WITH ISBA (MESONH) +! MODIFIED BY J. PIANEZZEJ 13/02/2019 BUG in FARCE case +! +!*********************************************************************** +!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! +! +! SCIENTIFIC ALGORITHM +! +! EMISSION = [EF][GAMMA][RHO] +! WHERE [EF] = EMISSION FACTOR (UG/M2H) +! [GAMMA] = EMISSION ACTIVITY FACTOR (NON-DIMENSION) +! [RHO] = PRODUCTION AND LOSS WITHIN PLANT CANOPIES +! (NON-DIMENSIONAL) +! ASSUMPTION: [RHO] = 1 (11/27/06) (SEE PDT_LOT_CP.EXT) +! +! GAMMA = [GAMMA_CE][GAMMA_AGE][GAMMA_SM] +! WHERE [GAMMA_CE] = CANOPY CORRECTION FACTOR +! [GAMMA_AGE] = LEAF AGE CORRECTION FACTOR +! [GAMMA_SM] = SOIL MOISTURE CORRECTION FACTOR +! ASSUMPTION: [GAMMA_SM] = 1 (11/27/06) + +! GAMMA_CE = [GAMMA_LAI][GAMMA_P][GAMMA_T] +! WHERE [GAMMA_LAI] = LEAF AREA INDEX FACTOR +! [GAMMA_P] = PPFD EMISSION ACTIVITY FACTOR +! [GAMMA_T] = TEMPERATURE RESPONSE FACTOR +! +! EMISSION = [EF][GAMMA_LAI][GAMMA_P][GAMMA_T][GAMMA_AGE] +! DERIVATION: +! EMISSION = [EF][GAMMA](1-LDF) + [EF][GAMMA][LDF][GAMMA_P] +! EMISSION = [EF][GAMMA]{ (1-LDF) + [LDF][GAMMA_P] } +! EMISSION = [EF][GAMMA]{ (1-LDF) + [LDF][GAMMA_P] } +! WHERE LDF = LIGHT DEPENDENT FUNCTION (NON-DIMENSION) +! (SEE LD_FCT.EXT) +! +! FINAL EQUATION +! EMISSION = [EF][GAMMA_LAI][GAMMA_AGE]* +! { (1-LDF)[GAMMA_TLI] + [LDF][GAMMA_P][GAMMA_TLD] } !FOR MEGAN2.1 +! WHERE GAMMA_TLI IS LIGHT INDEPENDENT +! GAMMA_TLD IS LIGHT DEPENDENT +!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! + +USE MODD_MEGAN + +USE MODI_INDEX1 +USE MODI_SOILNOX +! +USE MODE_MEGAN +USE MODE_GAMMA_ETC ! MODULE CONTAINING GAMMA FUNCTIONS +! +IMPLICIT NONE + +INTEGER, INTENT(IN) :: KTIME !I TIME OF THE DAY HHMMSS +INTEGER, INTENT(IN) :: KDATE !I DATE YYYYDDD +! +REAL, INTENT(IN) :: PPFD_D !I DAILY PAR (UMOL/M2.S) +REAL, INTENT(IN) :: PTEMP_D !I DAILY TEMPERATURE (K) +REAL, INTENT(IN) :: PDI !I DROUGHT INDEX (0 NORMAL, -2 MODERATE DROUGHT, -3 SEVERE DROUGHT, -4 EXTREME DROUGHT) +REAL, INTENT(IN) :: PRECADJ !I RAIN ADJUSTMENT FACTOR +! +REAL, DIMENSION(:), INTENT(IN) :: PLAT !I LATITUDE OF GRID CELL +REAL, DIMENSION(:), INTENT(IN) :: PLONG !I LONGITUDE OF GRID CELL +REAL, DIMENSION(:), INTENT(IN) :: PLAIP !I PREVIOUS MONTHLY LAI +REAL, DIMENSION(:), INTENT(IN) :: PLAIC !I CURRENT MONTHLY LAI +REAL, DIMENSION(:), INTENT(IN) :: PTEMP !I TEMPERATURE (K) +REAL, DIMENSION(:), INTENT(INOUT) :: PPFD !I CALCULATED PAR (UMOL/M2.S) +REAL, DIMENSION(:), INTENT(IN) :: PWIND !I WIND VELOCITY (M/S) +REAL, DIMENSION(:), INTENT(IN) :: PRES !I ATMOSPHERIC PRESSURE (PA) +REAL, DIMENSION(:), INTENT(IN) :: PQV !I AIR HUMIDITY (KG/KG) +INTEGER,DIMENSION(:),INTENT(IN) :: KSLTYP !I SOIL CATEGORY (FUNCTION OF SILT, CLAY AND SAND)) +REAL, DIMENSION(:), INTENT(IN) :: PSOILM !I SOIL MOISTURE (M3/M3) +REAL, DIMENSION(:), INTENT(IN) :: PSOILT !I SOIL TEMPERATURE (K) +REAL, DIMENSION(:,:),INTENT(IN) :: PFTF ! PFT FACTOR ARRAY (NRTYP 1-16 IN THE FIRST DIM) +LOGICAL, INTENT(IN) :: OSOIL !I LOGICAL FOR ACTIVE NO CORRECTION FACTOR +REAL, DIMENSION(:), INTENT(INOUT) :: PCFNO !O NO CORRECTION FACTOR +REAL, DIMENSION(:), INTENT(INOUT) :: PCFNOG !O NO CORRECTION FACTOR FOR GRASS +REAL, DIMENSION(:,:),INTENT(INOUT) :: PCFSPEC !O OUTPUT EMISSION BUFFER + +! LOCAL VARIABLES AND THEIR DESCRIPTIONS: +REAL, DIMENSION(SIZE(PSOILM)) :: ZGAM_LHT ! LAI CORRECTION FACTOR +REAL, DIMENSION(SIZE(PSOILM)) :: ZGAM_AGE ! LEAF AGE CORRECTION FACTOR +REAL, DIMENSION(SIZE(PSOILM)) :: ZGAM_SMT ! SOIL MOISTURE CORRECTION FACTOR +REAL, DIMENSION(SIZE(PSOILM)) :: ZER ! EMISSION BUFFER +! NUMBER OF LAT, LONG, AND PFT FACTOR VARIABLES +REAL, DIMENSION(SIZE(PSOILM)) :: ZGAM_TLD +REAL, DIMENSION(SIZE(PSOILM)) :: ZGAM_TLI +! +CHARACTER(LEN=100), DIMENSION(N_MGN_SPC+7) :: YVNAME3D +! +REAL, DIMENSION(SIZE(PSOILM)) :: ZADJUST_FACTOR_LD, ZADJUST_FACTOR_LI +REAL, DIMENSION(SIZE(PSOILM)) :: ZGAMMA_TD, ZGAMMA_TI, ZTOTALPFT +REAL :: ZLDF ! LIGHT DEPENDENT FACTOR +REAL :: ZRHO ! PRODUCTION AND LOSS WITHIN CANOPY +REAL :: ZPFD_D +! +INTEGER :: I_PFT +INTEGER :: ILAIP_DY, ILAIP_HR, ILAIC_DY, ILAIC_HR +INTEGER :: IMXPFT, IMXLAI + +! LOOP INDICES +INTEGER :: JT, JS, JI, JJ , JK, JN, INP ! COUNTERS +INTEGER :: INMAP ! INDEX +INTEGER :: INVARS3D + +!*********************************************************************** + +!--===================================================================== +!... BEGIN PROGRAM +!--===================================================================== + +!----------------------------------------------------------------------- +!.....1) INITIALIZATION +!----------------------------------------------------------------------- +! +INVARS3D = N_MGN_SPC + 7 +! +DO JS = 1,N_MGN_SPC + YVNAME3D(JS) = TRIM( CMGN_SPC(JS) ) +! VDESC3D(S) = 'ENVIRONMENTAL ACTIVITY FACTOR FOR '// +! & TRIM( MGN_SPC(S) ) +! UNITS3D(S) = 'NON-DIMENSION ' +! VTYPE3D(S) = M3REAL +ENDDO + +YVNAME3D(N_MGN_SPC+1) = 'D_TEMP' +! UNITS3D(N_MGN_SPC+1) = 'K' +! VTYPE3D(N_MGN_SPC+1) = M3REAL +! VDESC3D(N_MGN_SPC+1) = 'VARIABLE '//'K' + +YVNAME3D(N_MGN_SPC+2) = 'D_PPFD' +! UNITS3D(N_MGN_SPC+2) = 'UMOL/M2.S' +! VTYPE3D(N_MGN_SPC+2) = M3REAL +! VDESC3D(N_MGN_SPC+2) = 'VARIABLE '//'UMOL/M2.S' + +YVNAME3D(N_MGN_SPC+3) = 'LAT' +! UNITS3D(N_MGN_SPC+3) = ' ' +! VTYPE3D(N_MGN_SPC+3) = M3REAL +! VDESC3D(N_MGN_SPC+3) = ' ' + +YVNAME3D(N_MGN_SPC+4) = 'LONG' +! UNITS3D(N_MGN_SPC+4) = ' ' +! VTYPE3D(N_MGN_SPC+4) = M3REAL +! VDESC3D(N_MGN_SPC+4) = ' ' + +YVNAME3D(N_MGN_SPC+5) = 'CFNO' +! UNITS3D(N_MGN_SPC+5) = ' ' +! VTYPE3D(N_MGN_SPC+5) = M3REAL +! VDESC3D(N_MGN_SPC+5) = ' ' + +YVNAME3D(N_MGN_SPC+6) = 'CFNOG' +! UNITS3D(N_MGN_SPC+6) = ' ' +! VTYPE3D(N_MGN_SPC+6) = M3REAL +! VDESC3D(N_MGN_SPC+6) = ' ' + +YVNAME3D(N_MGN_SPC+7) = 'SLTYP' +! UNITS3D(N_MGN_SPC+7) = ' ' +! VTYPE3D(N_MGN_SPC+7) = M3INT +! VDESC3D(N_MGN_SPC+7) = ' ' + +!----------------------------------------------------------------------- +!.....2) PROCESS EMISSION RATES +!----------------------------------------------------------------------- +! +INP = SIZE(PLAT) +! +! ************************************************************************************************ + +! PPFD: SRAD - SHORT WAVE FROM SUN (W/M2) +! ASSUMING 4.766 (UMOL M-2 S-1) PER (W M-2) +! ASSUME 1/2 OF SRAD IS IN 400-700NM BAND +!D_PPFD = D_PPFD * 4.766 * 0.5 +! UPG PT bug: SURFEX give PAR in UMOL M-2 S-1 : comment the lines above +!ZPFD_D = PPFD_D * 4.5 * 0.5 + +ZPFD_D = PPFD_D + +!PPFD = PPFD * 4.5 +!UPG PT end bug +! ***************************************************************************************** + +! GO OVER ALL THE CHEMICAL SPECIES +DO JS = 1, N_MGN_SPC + + ! INITIALIZE VARIABLES + ZER = 0. + ZGAM_LHT = 1. + ZGAM_AGE = 1. + ZGAM_SMT = 1. + ZGAM_TLD = 1. + ZGAM_TLI = 1. + + PCFNO = 1. + PCFNOG = 1. + + CALL GAMMA_LAI(PLAIC, ZGAM_LHT) + + CALL GAMMA_A(KDATE, KTIME, NTSTLEN, YVNAME3D(JS), PTEMP_D, PLAIP, PLAIC, ZGAM_AGE) + + CALL GAMMA_S(ZGAM_SMT) + + ZADJUST_FACTOR_LD(:) = 0.0 + ZADJUST_FACTOR_LI(:) = 0.0 + ZGAMMA_TD(:) = 0.0 + ZGAMMA_TI(:) = 0.0 + ZTOTALPFT(:) = 0.0 + + DO I_PFT = 1,N_MGN_PFT !CANOPY TYPES + ZTOTALPFT(:) = ZTOTALPFT(:) + PFTF(I_PFT,:) * 0.01 + ENDDO ! ENDDO I_PFT + + DO I_PFT = 1,N_MGN_PFT !CANOPY TYPES + + CALL GAMME_CE(KDATE, KTIME, XCANOPYCHAR, I_PFT, YVNAME3D(JS), & + ZPFD_D, ZPFD_D, PTEMP_D, PTEMP_D, PDI, & + PPFD, PLAT, PLONG, PTEMP, PWIND, PQV, PLAIC, & + PRES, ZGAMMA_TD, ZGAMMA_TI) + + ZADJUST_FACTOR_LD(:) = ZADJUST_FACTOR_LD(:) + 0.01 * PFTF(I_PFT,:) * ZGAMMA_TD(:) + ZADJUST_FACTOR_LI(:) = ZADJUST_FACTOR_LI(:) + 0.01 * PFTF(I_PFT,:) * ZGAMMA_TI(:) + + ENDDO ! ENDDO I_PFT + + WHERE (ZTOTALPFT(:).GT.0.) + ZGAM_TLD(:) = ZADJUST_FACTOR_LD(:) / ZTOTALPFT(:) + ZGAM_TLI(:) = ZADJUST_FACTOR_LI(:) / ZTOTALPFT(:) + ELSEWHERE + ZGAM_TLD(:) = 1. + ZGAM_TLI(:) = 1. + END WHERE + + INMAP = INDEX1(YVNAME3D(JS), CMGN_SPC) + ZLDF = XLDF_FCT(INMAP) + INMAP = INDEX1(YVNAME3D(JS), CMGN_SPC) + ZRHO = XMGN_MWT(INMAP) + +!... CALCULATE EMISSION + ZER(:) = ZGAM_AGE * ZGAM_SMT * ZRHO * ((1.-ZLDF) * ZGAM_TLI * ZGAM_LHT + ZLDF * ZGAM_TLD) + WHERE( ZER(:).GT.0. ) + PCFSPEC(JS,:) = ZER(:) + ELSEWHERE + PCFSPEC(JS,:) = 0.0 + ENDWHERE + +ENDDO + +!... ESTIATE CFNO AND CFNOG +CALL SOILNOX(KDATE, KTIME, OSOIL, KSLTYP, PRECADJ, & + PLAT, PTEMP, PSOILM, PSOILT, PLAIC, PCFNO, PCFNOG ) + +!--===================================================================== +END SUBROUTINE EMPROC + diff --git a/src/LIB/MEGAN/index1.F90 b/src/LIB/MEGAN/index1.F90 new file mode 100644 index 000000000..68e48b717 --- /dev/null +++ b/src/LIB/MEGAN/index1.F90 @@ -0,0 +1,104 @@ +FUNCTION INDEX1 (HNAME, HLIST) RESULT(KINDEX1) + +!*********************************************************************** +! Version "$Id: index1.f 45 2014-09-12 20:05:29Z coats $" +! EDSS/Models-3 I/O API. +! Copyright (C) 1992-2002 MCNC and Carlie J. Coats, Jr., and +! (C) 2003-2010 Baron Advanced Meteorological Systems, LLC. +! Distributed under the GNU LESSER GENERAL PUBLIC LICENSE version 2.1 +! See file "LGPL.txt" for conditions of use. +!......................................................................... +! INDEX1 subroutine body starts at line 53 +! INDEXINT1 subroutine body starts at line 99 +! +! FUNCTION: +! +! Search for character-string or integer key NAME or IKEY in list NLIST +! and return the subscript (1...N) at which it is found, or return 0 +! when not found in NLIST +! +! PRECONDITIONS REQUIRED: +! none +! +! SUBROUTINES AND FUNCTIONS CALLED: +! none +! +! REVISION HISTORY: +! INDEX1: +! 5/1988 Modified for ROMNET +! 9/1994 Modified for Models-3 by CJC +! INDEXINT1: +! Prototype 11/2004 by CJC: MODULE M3UTILIO for I/O API v3 +! Modified 3/2006 by CJC: moved INDEXINT1() to file "index1.f" +! +! Modified 03/2010 by CJC: F9x changes for I/O API v3.1 +!*********************************************************************** + +IMPLICIT NONE + +!....... Arguments and their descriptions: + +CHARACTER(LEN=*), INTENT(IN) :: HNAME ! Character string being searched for +CHARACTER(LEN=*), DIMENSION(:), INTENT(IN) :: HLIST ! array to be searched +INTEGER :: KINDEX1 + +!....... Local variable: + +INTEGER :: JI ! loop counter + +!..................................................................... +!....... begin body of INDEX1() + +KINDEX1 = 0 +! +DO JI = 1, SIZE(HLIST) + IF ( HNAME.EQ.HLIST(JI) ) THEN ! Found NAME in NLIST + KINDEX1 = JI + EXIT + ENDIF +END DO + +END FUNCTION INDEX1 + +! --=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=- + + +!FUNCTION INDEXINT1(KEY, KEYLIST ) RESULT(KINDEXINT1) +! +!!-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=- +!! Look up integer key IKEY in unsorted list <NLIST,KEYLIST> +!! of integer keys. Return the subscript at which IKEY +!! occurs, or 0 in case of failure +!! +!! PRECONDITIONS REQUIRED: +!! none +!! +!! REVISION HISTORY: +!! Prototype 11/2004 by CJC +!!-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=- +! +!IMPLICIT NONE +! +!!!........ Arguments: +! +!INTEGER, INTENT(IN) :: KEY +!INTEGER, DIMENSION(:), INTENT(IN) :: KEYLIST +! +!INTEGER :: KINDEXINT1 +! +!!!........ Local Variables: +! +!INTEGER :: JI +! +!!!........ begin body ........................................ +! +!KINDEXINT1 = 0 +! +!DO JI = 1, SIZE(KEYLIST) +! IF ( KEY .EQ. KEYLIST(JI) ) THEN +! KINDEXINT1 = JI +! EXIT +! END IF +!END DO +! +!END FUNCTION INDEXINT1 diff --git a/src/LIB/MEGAN/init_mgn2mech.F90 b/src/LIB/MEGAN/init_mgn2mech.F90 new file mode 100644 index 000000000..8e1bd59bc --- /dev/null +++ b/src/LIB/MEGAN/init_mgn2mech.F90 @@ -0,0 +1,208 @@ +!! ############################### +SUBROUTINE INIT_MGN2MECH(HMECHANISM, OCONVERSION, HVNAME3D, HMECH_SPC, & + KSPMH_MAP, KMECH_MAP, PCONV_FAC, PMECH_MWT, & + KVARS3D, K_SCON_SPC) +!! +!!*** *BVOCEM* +!! +!! PURPOSE +!! ------- +!! CALCULATE THE BIOGENIC EMISSION FLUXES UPON THE MEGAN CODE +!! HTTP://LAR.WSU.EDU/MEGAN/ +!! +!! METHOD +!! ------ +!! +!! +!! AUTHOR +!! ------ +! ORIGINALLY CREATED BY JACK CHEN 11/04 FOR MEGAN V.0 +! FOR MEGAN V2.0 CREATED BY TAN 12/01/06 +! FOR MEGAN V2.1 CREATED BY XUEMEI WANG 11/04/07 +! FOR MEGAN V2.1 TO USE 150 SPECIES CREATED BY XUEMEI WANG 09/30/09 +! +! HISTORY: +! 08/14/07 TAN - MOVE TO MEGANV2.02 WITH NO UPDATE +! 08/29/07 MODIFIED BY A. GUENTHER TO CORRECT ERROR IN ASSIGNING +! EMISSION FACTOR. THIS VERSION IS CALLED MEGANV2.03 +! 10/29/07 MODIFIED BY A. GUENTHER TO CORRECT OMISSION OF DIURNAL VARIATION +! FACTOR. THIS VERSION IS CALLED MEGANV2.04 +! 11/04/07 MODIFIED BY XUEMEI WANG TO GIVE TWO OPTIONS FOR MAP OR LOOKUP TABLE FOR +! THE EMISSION FACTORS. ALSO GIVES OPTIONS FOR DIFFERENT CHEMICAL MECHANISMS +! IN THE CODE: USER MODIFIES THE EXTERNAL SCRIPT TO ASSIGN MECHANISM. +! THIS VERSION IS CALLED MEGANV2.1.0 +! 06/04/08 MODIFIED BY J. LEE-TAYLOR TO ACCEPT VEGETATION-DEPENDENT SPECIATION FACTORS +! IN TABLE FORMAT (RESHAPE TABLES) RATHER THAN FROM DATA STATEMENTS. +! 09/30/08 MODIFIED BY XUEMEI WANG TO GIVE OPTIONS FOR INPUT FILE AND TEST DIFFERENT MECHANISMS +! 09/27/11 TAN&XUEMEI MEGANV2.10 INCLUDES SOIL NOX ADJUSTMENT AND A LOT OF UPDATES +! 20/12/14 P. TULET - ON-LINE COUPLING IN THE ISBA/SURFEX SCHEME. ALL INIT VARIABLES HAS BEEN +! MOVED IN INIT_MEGANN.F90. +!! +!! MODIFICATIONS +!! ------------- +!! ORIGINAL: 25/10/14 +!! +!! +!! EXTERNAL +!! -------- +!! +!! IMPLICIT ARGUMENTS +!! ------------------ +! +!------------------------------------------------------------------------------ +! +!* 0. DECLARATIONS +! ----------------- +! +USE MODD_MGN2MECH +! +IMPLICIT NONE + +CHARACTER(LEN=16), INTENT(IN) :: HMECHANISM !I MECHANISM NAME +LOGICAL, INTENT(IN) :: OCONVERSION !I +! +CHARACTER(LEN=16),DIMENSION(:), POINTER :: HMECH_SPC!I MECHANISM NAME +CHARACTER(LEN=16),DIMENSION(:), POINTER :: HVNAME3D !I MECHANISM NAME +INTEGER,DIMENSION(:), POINTER :: KSPMH_MAP +INTEGER,DIMENSION(:), POINTER :: KMECH_MAP +REAL,DIMENSION(:), POINTER :: PCONV_FAC +REAL,DIMENSION(:), POINTER :: PMECH_MWT +INTEGER, INTENT(INOUT) :: KVARS3D +INTEGER, INTENT(INOUT) :: K_SCON_SPC + +!... INCLUDES: +! +!* 0.1 DECLARATION OF LOCAL VARIABLES +! +! SET ATTRIBUTE AND VARIABLES FOR OUTPUT +SELECT CASE ( TRIM(HMECHANISM) ) + CASE ('CB05') + K_SCON_SPC = N_CB05 + KVARS3D = N_CB05_SPC + CASE ('CB6') + K_SCON_SPC = N_CB6 + KVARS3D = N_CB6_SPC + CASE ('SAPRCII') + K_SCON_SPC = N_SAPRCII + KVARS3D = N_SAPRCII_SPC + CASE ('RADM2') + K_SCON_SPC = N_RADM2 + KVARS3D = N_RADM2_SPC + CASE ('RACM') + K_SCON_SPC = N_RACM + KVARS3D = N_RACM_SPC + CASE ('CBMZ') + K_SCON_SPC = N_CBMZ + KVARS3D = N_CBMZ_SPC + CASE ('SAPRC99') + K_SCON_SPC = N_SAPRC99 + KVARS3D = N_SAPRC99_SPC + CASE ('SAPRC99Q') + K_SCON_SPC = N_SAPRC99_Q + KVARS3D = N_SAPRC99_Q_SPC + CASE ('SAPRC99X') + K_SCON_SPC = N_SAPRC99_X + KVARS3D = N_SAPRC99_X_SPC + CASE ('SOAX') + K_SCON_SPC = N_SOAX + KVARS3D = N_SOAX_SPC + CASE DEFAULT + CALL ABOR1_SFX("ERROR: MECHANISM CONVERSION, INVALID MECHANISM: "//TRIM(HMECHANISM)) +ENDSELECT + +! PRINT*,'SHAPE(SPMH_MAP) =',SHAPE(SPMH_MAP) +IF (ASSOCIATED(KSPMH_MAP)) DEALLOCATE(KSPMH_MAP) +ALLOCATE(KSPMH_MAP(K_SCON_SPC)) + +IF (ASSOCIATED(KMECH_MAP)) DEALLOCATE(KMECH_MAP) +ALLOCATE(KMECH_MAP(K_SCON_SPC)) + +IF (ASSOCIATED(PCONV_FAC)) DEALLOCATE(PCONV_FAC) +ALLOCATE(PCONV_FAC(K_SCON_SPC)) + +IF (ASSOCIATED(HMECH_SPC)) DEALLOCATE(HMECH_SPC) +ALLOCATE(HMECH_SPC(KVARS3D)) + +IF (ASSOCIATED(PMECH_MWT)) DEALLOCATE(PMECH_MWT) +ALLOCATE(PMECH_MWT(KVARS3D)) + +IF (ASSOCIATED(HVNAME3D)) DEALLOCATE(HVNAME3D) +ALLOCATE(HVNAME3D(KVARS3D)) + +IF ( OCONVERSION ) THEN + + SELECT CASE ( TRIM(HMECHANISM) ) + CASE ('CB05') + KSPMH_MAP(:) = NSPMH_MAP_CB05(:) + KMECH_MAP(:) = NMECH_MAP_CB05(:) + PCONV_FAC(:) = XCONV_FAC_CB05(:) + HMECH_SPC(:) = CMECH_SPC_CB05(:) + PMECH_MWT(:) = XMECH_MWT_CB05(:) + CASE ('CB6') + KSPMH_MAP(:) = NSPMH_MAP_CB6(:) + KMECH_MAP(:) = NMECH_MAP_CB6(:) + PCONV_FAC(:) = XCONV_FAC_CB6(:) + HMECH_SPC(:) = CMECH_SPC_CB6(:) + PMECH_MWT(:) = XMECH_MWT_CB6(:) + CASE ('SAPRCII') + KSPMH_MAP(:) = NSPMH_MAP_SAPRCII(:) + KMECH_MAP(:) = NMECH_MAP_SAPRCII(:) + PCONV_FAC(:) = XCONV_FAC_SAPRCII(:) + HMECH_SPC(:) = CMECH_SPC_SAPRCII(:) + PMECH_MWT(:) = XMECH_MWT_SAPRCII(:) + CASE ('RADM2') + KSPMH_MAP(:) = NSPMH_MAP_RADM2(:) + KMECH_MAP(:) = NMECH_MAP_RADM2(:) + PCONV_FAC(:) = XCONV_FAC_RADM2(:) + HMECH_SPC(:) = CMECH_SPC_RADM2(:) + PMECH_MWT(:) = XMECH_MWT_RADM2(:) + CASE ('RACM') + KSPMH_MAP(:) = NSPMH_MAP_RACM(:) + KMECH_MAP(:) = NMECH_MAP_RACM(:) + PCONV_FAC(:) = XCONV_FAC_RACM(:) + HMECH_SPC(:) = CMECH_SPC_RACM(:) + PMECH_MWT(:) = XMECH_MWT_RACM(:) + CASE ('CBMZ') + KSPMH_MAP(:) = NSPMH_MAP_CBMZ(:) + KMECH_MAP(:) = NMECH_MAP_CBMZ(:) + PCONV_FAC(:) = XCONV_FAC_CBMZ(:) + HMECH_SPC(:) = CMECH_SPC_CBMZ(:) + PMECH_MWT(:) = XMECH_MWT_CBMZ(:) + CASE ('SAPRC99') + KSPMH_MAP(:) = NSPMH_MAP_SAPRC99(:) + KMECH_MAP(:) = NMECH_MAP_SAPRC99(:) + PCONV_FAC(:) = XCONV_FAC_SAPRC99(:) + HMECH_SPC(:) = CMECH_SPC_SAPRC99(:) + PMECH_MWT(:) = XMECH_MWT_SAPRC99(:) + CASE ('SAPRC99Q') + KSPMH_MAP(:) = NSPMH_MAP_SAPRC99_Q(:) + KMECH_MAP(:) = NMECH_MAP_SAPRC99_Q(:) + PCONV_FAC(:) = XCONV_FAC_SAPRC99_Q(:) + HMECH_SPC(:) = CMECH_SPC_SAPRC99_Q(:) + PMECH_MWT(:) = XMECH_MWT_SAPRC99_Q(:) + CASE ('SAPRC99X') + KSPMH_MAP(:) = NSPMH_MAP_SAPRC99_X(:) + KMECH_MAP(:) = NMECH_MAP_SAPRC99_X(:) + PCONV_FAC(:) = XCONV_FAC_SAPRC99_X(:) + HMECH_SPC(:) = CMECH_SPC_SAPRC99_X(:) + PMECH_MWT(:) = XMECH_MWT_SAPRC99_X(:) + CASE ('SOAX') + KSPMH_MAP(:) = NSPMH_MAP_SOAX(:) + KMECH_MAP(:) = NMECH_MAP_SOAX(:) + PCONV_FAC(:) = XCONV_FAC_SOAX(:) + HMECH_SPC(:) = CMECH_SPC_SOAX(:) + PMECH_MWT(:) = XMECH_MWT_SOAX(:) + ENDSELECT + + HVNAME3D(:) = HMECH_SPC(:) + +ELSE + + KVARS3D = N_SPCA_SPC + HVNAME3D(:) = CSPCA_SPC(:) + +ENDIF + +!--------------------------------------------------------------------------- +! +END SUBROUTINE INIT_MGN2MECH diff --git a/src/LIB/MEGAN/julian.F90 b/src/LIB/MEGAN/julian.F90 new file mode 100644 index 000000000..73442ba48 --- /dev/null +++ b/src/LIB/MEGAN/julian.F90 @@ -0,0 +1,92 @@ +FUNCTION JULIAN (KYEAR, KMNTH, KMDAY) RESULT(KJULIAN) + +!*********************************************************************** +! Version "$Id: julian.F 45 2014-09-12 20:05:29Z coats $" +! EDSS/Models-3 I/O API. +! Copyright (C) 1992-2002 MCNC and Carlie J. Coats, Jr., +! (C) 2003-2010 by Baron Advanced Meteorological Systems. +! Distributed under the GNU LESSER GENERAL PUBLIC LICENSE version 2.1 +! See file "LGPL.txt" for conditions of use. +!......................................................................... +! function body starts at line 68 +! +! FUNCTION: returns the Julian day (1...365,366) corresponding to +! the date MNTH-MDAY-YEAR. +! NOTE: This is NOT the Julian DATE -- only the +! day-number. To get the Julian date: +! +! JDATE = 1000 * YEAR + JULIAN ( YEAR , MNTH , MDAY ) +! +! ARGUMENT LIST DESCRIPTION: +! +! Input arguments: +! +! YEAR Calendar year +! MNTH Month of year 1, 12 +! MDAY Day of month 1, 31 +! +! Output arguments: none +! +! RETURN VALUE: +! +! JULIAN The Julian DAY of the input arguments combined +! +! REVISION HISTORY: +! +! 5/1988 Modified for ROMNET +! +! 8/1990 Modified for ROM 2.2 by Carlie J. Coats, Jr., CSC +! improved comments; improved Zeller's Congruence algorithm +! and using IF-THEN ... ELSE IF ... construction. +! +! 8/1999 Version for global-climate IO_360, which uses 360-day "year" +! +! 2/2002 Unification by CJC with global-climate JULIAN +! +! Modified 03/2010 by CJC: F9x changes for I/O API v3.1 +!*********************************************************************** + +IMPLICIT NONE + +!........... ARGUMENTS and their descriptions: + +INTEGER, INTENT(IN) :: KYEAR ! year YYYY +INTEGER, INTENT(IN) :: KMNTH ! month 1...12 +INTEGER, INTENT(IN) :: KMDAY ! day-of-month 1...28,29,30,31 + +INTEGER :: KJULIAN + +!........... SCRATCH LOCAL VARIABLES: + +INTEGER :: JM, JN, JL + +!*********************************************************************** +! begin body of function JULIAN + +#ifdef IO_360 + +KJULIAN = KMDAY + 30 * ( KMNTH - 1 ) + +#else + +JM = MOD ((KMNTH + 9), 12) +JN = (JM * 153 + 2) / 5 + KMDAY + 58 + +IF ( MOD(KYEAR,4).NE.0 ) THEN + JL = 365 +ELSE IF ( MOD(KYEAR,100).NE.0 ) THEN + JL = 366 + JN = 1 + JN +ELSE IF ( MOD(KYEAR,400).NE.0 ) THEN + JL = 365 +ELSE + JL = 366 + JN = 1 + JN +END IF + +KJULIAN = 1 + MOD(JN,JL) + +#endif + +END FUNCTION JULIAN + diff --git a/src/LIB/MEGAN/mgn2mech.F90 b/src/LIB/MEGAN/mgn2mech.F90 new file mode 100644 index 000000000..9758d3c71 --- /dev/null +++ b/src/LIB/MEGAN/mgn2mech.F90 @@ -0,0 +1,315 @@ +SUBROUTINE MGN2MECH(KDATE, PLAT, PEF, PPFT, PCFNO, PCFNOG, PCFSPEC, & + KSPMH_MAP, KMECH_MAP, PCONV_FAC, OCONVERSION, PFLUX) + +!*********************************************************************** +! THIS PROGRAM DOES CHEMICAL SPECIATION AND MECHANISM CONVERSION. +! THE OUTPUT FROM MEGAN.F IS CONVERTED FROM 20 TO 150 SPECIES WHICH +! ARE THEN LUMPED ACCORDING TO THE MECHANISM ASSIGNED IN THE RUN SCRIPT. +! THE PROGRAM LOOPS THROUGH ALL TIMESTEPS OF THE INPUT FILE. +! +! PROCEDURE +! 1) FILE SET UP AND ASSIGN I/O PARAMETERS +! 2) CONVERSION FROM MGN 20 TO SPECIATED 150 +! 3) CONVERSION FROM SPECIATED SPECIES TO MECHANISM SPECIES +! 4) CONVERT TO TONNE/HOUR IF NEEDED +! +! THE INPUT FILE GIVES VARIABLES IN UNITS OF G-SPECIES/SEC. +! ALL OUTPUTS ARE IN MOLE/SEC OR TONNE/HR DEPENDING ON ASSIGNMENT. +! +! +! INPUT: +! 1) MEGAN OUTPUT (NETCDF-IOAPI) +! +! OUTPUT: +! 1) MEGAN SPECIATION OR MECHANISM SPECIES (NETCDF-IOAPI) +! +! REQUIREMENT: +! REQUIRES LIBNETCDF.A AND LIBIOAPI.A TO COMPILE +! +! SETENV MGERFILE <DEFANGED_INPUT MEGAN OUTPUT FOR EMISSION ACTIVITY FACTORS> +! SETENV OUTPFILE <OUTPUT SPECIATED EMISSION> +! +! CALLS: CHECKMEM +! +! ORIGINALLY CREATED BY JACK CHEN 11/04 FOR MEGAN V.0 +! FOR MEGAN V2.0 CREATED BY TAN 12/01/06 +! FOR MEGAN V2.1 CREATED BY XUEMEI WANG 11/04/07 +! FOR MEGAN V2.1 TO USE 150 SPECIES CREATED BY XUEMEI WANG 09/30/09 +! +! HISTORY: +! 08/14/07 TAN - MOVE TO MEGANV2.02 WITH NO UPDATE +! 08/29/07 MODIFIED BY A. GUENTHER TO CORRECT ERROR IN ASSIGNING +! EMISSION FACTOR. THIS VERSION IS CALLED MEGANV2.03 +! 10/29/07 MODIFIED BY A. GUENTHER TO CORRECT OMISSION OF DIURNAL VARIATION +! FACTOR. THIS VERSION IS CALLED MEGANV2.04 +! 11/04/07 MODIFIED BY XUEMEI WANG TO GIVE TWO OPTIONS FOR MAP OR LOOKUP TABLE FOR +! THE EMISSION FACTORS. ALSO GIVES OPTIONS FOR DIFFERENT CHEMICAL MECHANISMS +! IN THE CODE: USER MODIFIES THE EXTERNAL SCRIPT TO ASSIGN MECHANISM. +! THIS VERSION IS CALLED MEGANV2.1.0 +! 06/04/08 MODIFIED BY J. LEE-TAYLOR TO ACCEPT VEGETATION-DEPENDENT SPECIATION FACTORS +! IN TABLE FORMAT (RESHAPE TABLES) RATHER THAN FROM DATA STATEMENTS. +! 09/30/08 MODIFIED BY XUEMEI WANG TO GIVE OPTIONS FOR INPUT FILE AND TEST DIFFERENT MECHANISMS +! 09/27/11 TAN&XUEMEI MEGANV2.10 INCLUDES SOIL NOX ADJUSTMENT AND A LOT OF UPDATES +! 20/12/14 P. TULET - ON-LINE COUPLING IN THE ISBA/SURFEX SCHEME. ALL INIT VARIABLES HAS BEEN +! MOVED IN INIT_MEGANN.F90. +!*********************************************************************** + +USE MODD_MGN2MECH +USE MODD_MEGAN + +USE MODE_SOILNOX + +USE MODI_INDEX1 + +IMPLICIT NONE + +INTEGER, INTENT(IN) :: KDATE ! DATE YYYYDDD +REAL, DIMENSION(:), INTENT(IN) :: PLAT !I LATITUDE OF GRID CELL +REAL, DIMENSION(:,:),INTENT(IN) :: PPFT !I PFT FACTOR ARRAY (NRTYP 1-16 IN THE FIRST DIM) +REAL, DIMENSION(:,:),INTENT(IN) :: PEF !I PFT FACTOR ARRAY (NRTYP 1-16 IN THE FIRST DIM) +REAL, DIMENSION(:), INTENT(IN) :: PCFNO !I NO CORRECTION FACTOR +REAL, DIMENSION(:), INTENT(IN) :: PCFNOG !I NO CORRECTION FACTOR FOR GRASS +REAL, DIMENSION(:,:), INTENT(IN) :: PCFSPEC +LOGICAL, INTENT(IN) :: OCONVERSION +INTEGER, DIMENSION(:), INTENT(IN) :: KSPMH_MAP +INTEGER, DIMENSION(:), INTENT(IN) :: KMECH_MAP +REAL, DIMENSION(:), INTENT(IN) :: PCONV_FAC +REAL, DIMENSION(:,:),INTENT(INOUT) :: PFLUX !IO EMISSION FLUX IN MOL/M2/S + +!*********************************************************************** +! THIS PROGRAM DOES CHEMICAL SPECIATION AND MECHANISM CONVERSION. +!... PROGRAM I/O FILES +! PROGRAM NAME +! INPUT MEGAN ER FILE +! CHARACTER*16 :: MGNERS = 'MGNERS' ! INPUT MEGAN ER FILE LOGICAL NAME +! NETCDF FILE +! CHARACTER*16 :: EFMAPS = 'EFMAPS' ! EFMAP INPUT FILE NAME +! CHARACTER*16 :: PFTS16 = 'PFTS16' ! INPUT PFT FILE LOGICAL +! OUTPUT FILE +! CHARACTER*16 :: MGNOUT = 'MGNOUT' ! OUTPUT FILE LOGICAL NAME +! PARAMETERS FOR FILE UNITS +! INTEGER :: LOGDEV ! LOGFILE UNIT NUMBER + +!... PROGRAM I/O PARAMETERS +!... EXTERNAL PARAMETERS + +REAL, DIMENSION(N_SPCA_SPC,SIZE(PFLUX,2)) :: ZTMPER ! TEMP EMISSION BUFFER +REAL, DIMENSION(SIZE(PFLUX,1),SIZE(PFLUX,2)) :: ZOUTER ! OUTPUT EMISSION BUFFER +REAL, DIMENSION(SIZE(PLAT)) :: ZTMP1, ZTMP2, ZTMP3 +REAL :: ZTMO1, ZTMO2, ZTMO3 +REAL :: Z2CRATIO + +!... INTERNAL PARAMETERS +! INTERNAL PARAMTERS (STATUS AND BUFFER) +INTEGER, DIMENSION(SIZE(PLAT)) :: ILEN, IDAY +INTEGER :: JS, JJ, JI, JM, JN ! COUNTERS +INTEGER :: JMPMG, JMPSP, JMPMC ! COUNTERS +INTEGER :: INO +INTEGER :: INP, IN_SCON_SPC + +!*********************************************************************** + +!======================================================================= +!... BEGIN PROGRAM +!======================================================================= + +INP = SIZE(PLAT) +IN_SCON_SPC = SIZE(KSPMH_MAP) + +! CHANGE THE UNIT ACCORDING TO TONPHR FLAG +! IF ( TONPHR ) THEN +! UNITS3D(1:NVARS3D) = 'TONS/HR' +! ELSE +! UNITS3D(1:NVARS3D) = 'MG/M*M/H' +! ENDIF +! +! DO S = 1, NVARS3D +! PRINT*,'OUTPUT VARIABLE:',VNAME3D(S),UNITS3D(S) +! ENDDO + +! CALL NAMEVAL ( MGNERS , MESG ) ! GET INPUT FILE NAME AND PATH +! FDESC3D( 2 ) = 'INPUT MEGAN FILE: '//TRIM(MESG) + +!... ALLOCATE MEMORY + +!.....2) CONVERSION FROM MGN 20 TO SPECIATED 150 +!----------------------------------------------------------------------- +ZTMPER = 0. +ZOUTER = 0. + +INO = INDEX1('NO',CMGN_SPC) + +!... LOOP THROUGH TIME +DO JS = 1, N_SMAP_SPC + + JMPMG = NMG20_MAP(JS) + JMPSP = NSPCA_MAP(JS) +! PRINT*,'CONVERT '//MGN_SPC(NMPMG)//' TO '//SPCA_SPC(NMPSP) + + IF ( JMPMG.NE.INO ) THEN + + !... NOT NO + IF ( XEF_ALL(1,JMPMG).LT.0. ) THEN + + !... USE EFMAPS + ZTMP1(:) = 0. + ZTMP2(:) = 0. + DO JM = 1,N_MGN_PFT + ZTMP1 = ZTMP1 + PPFT(JM,:) + ZTMP2 = ZTMP2 + XEFFS_ALL(JM,JMPSP) * PPFT(JM,:) + ENDDO + WHERE( ZTMP1(:).EQ.0. ) + ZTMPER(JMPSP,:) = 0. + ELSEWHERE + ZTMPER(JMPSP,:) = PCFSPEC(JMPMG,:) * PEF(JMPMG,:) * ZTMP2(:)/ZTMP1(:) + ENDWHERE + + ELSE + + !... USE PFT-EF + ZTMP3(:) = 0.0 + DO JM = 1,N_MGN_PFT + ZTMP3 = ZTMP3 + XEF_ALL(JM,JMPMG) * XEFFS_ALL(JM,JMPSP) * PPFT(JM,:)/100. + ENDDO + ZTMPER(JMPSP,:) = PCFSPEC(JMPMG,:) * ZTMP3(:) + + ENDIF + + ELSE IF ( JMPMG.EQ.INO ) THEN + +!!-----------------NO STUFF----------------------- + + CALL GROWSEASON(KDATE, PLAT, IDAY, ILEN) + + DO JJ = 1,SIZE(PPFT,2) + + ! CHECK FOR GROWING SEASON + IF ( IDAY(JJ).EQ.0 ) THEN + + ! NON GROWING SEASON + ! CFNOG FOR EVERYWHERE + ! OVERRIDE CROP WITH GRASS WARM = 14 + IF ( XEF_ALL(1,INO).LT.0. ) THEN + + ! WITH EFMAPS + ZTMO1 = 0. + ZTMO2 = 0. + DO JM = 1,14 + ZTMO1 = ZTMO1 + PPFT(JM,JJ) + ZTMO2 = ZTMO2 + XEFFS_ALL(JM,JMPSP) * PPFT(JM,JJ) + ENDDO + DO JM = 15,N_MGN_PFT + ZTMO1 = ZTMO1 + PPFT(JM,JJ) + Z2CRATIO = XEF_ALL(14,INO)/XEF_ALL(JM,INO) + ZTMO2 = ZTMO2 + XEFFS_ALL(JM,JMPSP) * PPFT(JM,JJ) * Z2CRATIO + ENDDO + IF ( ZTMO1.EQ.0. ) THEN + ZTMPER(JMPSP,JJ) = 0. + ELSE + !ZTMPER(JMPSP,JJ) = & + ! PCFSPEC(INO,JJ) * PEF(INO,JJ) * PCFNOG(JJ) * ZTMO2/ZTMO1 + ZTMPER(JMPSP,JJ) = & + PCFSPEC(INO,JJ) * PEF(INO,JJ) * PCFNOG(JJ) * ZTMO2/ZTMO1 * XN2NO + ENDIF + + ELSE + + ! WITHOUT EFMAPS + ZTMO3 = 0.0 + DO JM = 1,14 + ZTMO3 = ZTMO3 + XEF_ALL(JM,INO) * XEFFS_ALL(JM,JMPSP) * PPFT(JM,JJ)/100. + ENDDO + DO JM = 15,N_MGN_PFT + ZTMO3 = ZTMO3 + XEF_ALL(14,INO) * XEFFS_ALL(JM,JMPSP) * PPFT(JM,JJ)/100. + ENDDO + !ZTMPER(JMPSP,JJ) = PCFSPEC(INO,JJ) * PCFNOG(JJ) * ZTMO3 + ZTMPER(JMPSP,JJ) = PCFSPEC(INO,JJ) * PCFNOG(JJ) * ZTMO3 * XN2NO + + ENDIF + + ELSE IF ( IDAY(JJ).GT.0 .AND. IDAY(JJ).LE.366 ) THEN + + ! GROWING SEASON + ! CFNOG FOR EVERYWHERE EXCEPT CROPS + ! CFNO FOR CROP AND CORN + IF ( XEF_ALL(1,INO).LT.0. ) THEN + + ! WITH EFMAPS + ZTMO1 = 0. + ZTMO2 = 0. + DO JM = 1,14 + ZTMO1 = ZTMO1 + PPFT(JM,JJ) + ZTMO2 = ZTMO2 + XEFFS_ALL(JM,JMPSP) * PPFT(JM,JJ) * PCFNOG(JJ) + ENDDO + DO JM = 15,N_MGN_PFT + ZTMO1 = ZTMO1 + PPFT(JM,JJ) + ZTMO2 = ZTMO2 + XEFFS_ALL(JM,JMPSP) * PPFT(JM,JJ) * PCFNO(JJ) + ENDDO + IF ( ZTMO1.EQ.0. ) THEN + ZTMPER(JMPSP,JJ) = 0. + ELSE + !ZTMPER(JMPSP,JJ) = PCFSPEC(INO,JJ) * PEF(INO,JJ) * ZTMO2/ZTMO1 + ZTMPER(JMPSP,JJ) = PCFSPEC(INO,JJ) * PEF(INO,JJ) * ZTMO2/ZTMO1 * XN2NO + ENDIF + + ELSE + + ! WITHOUT EFMAPS + ZTMO3 = 0.0 + DO JM = 1,14 + ZTMO3 = ZTMO3 + & + XEF_ALL(JM,INO) * XEFFS_ALL(JM,JMPSP) * PPFT(JM,JJ)/100. * PCFNOG(JJ) + ENDDO + DO JM = 15,N_MGN_PFT + ZTMO3 = ZTMO3 + & + XEF_ALL(JM,INO) * XEFFS_ALL(JM,JMPSP) * PPFT(JM,JJ)/100. * PCFNO(JJ) + ENDDO + !ZTMPER(JMPSP,JJ) = PCFSPEC(INO,JJ) * ZTMO3 + ZTMPER(JMPSP,JJ) = PCFSPEC(INO,JJ) * ZTMO3 * XN2NO + ENDIF + + ELSE + + WRITE(*,*) "MGN2MECH: BAD IDAY" + STOP + + ENDIF + + ENDDO !DO R = 1,NROWS + +!-----------------END OF NO---------------------- + ENDIF !IF ( NMPMG .NE. INO ) THEN + +ENDDO ! END SPECIES LOOP + +!----------------------------------------------------------------------- +!.....3) CONVERSION FROM SPECIATED SPECIES TO MECHANISM SPECIES +!----------------------------------------------------------------------- +! ! CONVERT FROM UG/M^2/HR TO MOL/M^2/S USING THEIR MW + +DO JS = 1, N_SPCA_SPC + ZTMPER(JS,:) = ZTMPER(JS,:) / XSPCA_MWT(JS) * XUG2G / XHR2SEC +ENDDO +! + ! LUMPING TO MECHANISM SPECIES +! +IF ( OCONVERSION ) THEN + + DO JS = 1, IN_SCON_SPC + + JMPSP = KSPMH_MAP(JS) ! MAPPING VALUE FOR SPCA + JMPMC = KMECH_MAP(JS) ! MAPPING VALUE FOR MECHANISM + ZOUTER(JMPMC,:) = ZOUTER(JMPMC,:) + ( ZTMPER(JMPSP,:) * PCONV_FAC(JS) ) +! ! UNITS OF THESE SPECIES ARE IN MOLE/S ------> MOLE/M²/S + + ENDDO ! END SPECIES LOOP + +ELSE + ! ! GET ALL 150 SPECIES INTO THE OUTPUT ARRAY + ZOUTER(:,:) = ZTMPER(:,:) + ! ! UNITS OF THESE SPECIES ARE IN MOLE/M2/S + +ENDIF +PFLUX(:,:) = ZOUTER(:,:) + +END SUBROUTINE MGN2MECH diff --git a/src/LIB/MEGAN/modd_megan.F90 b/src/LIB/MEGAN/modd_megan.F90 new file mode 100644 index 000000000..df8fdb870 --- /dev/null +++ b/src/LIB/MEGAN/modd_megan.F90 @@ -0,0 +1,145 @@ +MODULE MODD_MEGAN +! +INTEGER, PARAMETER :: NLAYERS = 5 +! LENGTH OF THE TIME STEP (DAYS) +INTEGER, PARAMETER :: NTSTLEN = 30 +INTEGER, PARAMETER :: NMAXSTYPES = 11 +! +REAL, PARAMETER :: XSOLARCONSTANT = 1367, & ! SOLAR CONSTANT [W/M2] + XWATERAIRRATIO = 18.016/28.97 ! RATIO BETWEEN WATER AND AIR MOLECULES +! +REAL, PARAMETER :: XPSTD_SUN=200.0, XPSTD_SHADE=50.0 +REAL ,PARAMETER :: XCCE=0.56 +! +REAL,PARAMETER :: XSB = 0.0000000567 +! +! REAL,PARAMETER :: CONVERTPPFD = 4.766 +REAL,PARAMETER :: XCONVERTSHADEPPFD = 4.6 +REAL,PARAMETER :: XCONVERTSUNPPFD = 4.0 +! +REAL,PARAMETER :: XPI = 3.14159, XRPI180 = 57.29578 +! +REAL,PARAMETER :: XDIHIGH = -0.5, XDILOW = -5 +! +REAL,PARAMETER :: XCTM2 = 230 +REAL,PARAMETER :: XCT2 =200.0 +! +REAL,PARAMETER :: XTS = 303.15 +! +! PARAMETER FOR UNIT CONVERSION +REAL, PARAMETER :: XUG2TONNE = 1E-12 ! CONVERT MICROGRAM TO METRIC TONNE +REAL, PARAMETER :: XHR2SEC = 3600 ! CONVERT HR TO SECOND +REAL, PARAMETER :: XUG2G = 1E-6 ! CONVERT MICROGRAM TO GRAM +REAL, PARAMETER :: XN2NO = 2.142857 ! CONVERT HR TO SECOND +! +REAL, DIMENSION(NMAXSTYPES) :: XSATURATION=& + (/0.395, 0.410, 0.435, 0.485, 0.451, 0.420, 0.477, 0.476, 0.426, 0.482, 0.482/) +! +REAL, PARAMETER :: XISMAX=1.344, XH=1.4614 +REAL, PARAMETER :: XCSTAR=585 +!======================================================================= +! CANOPY.EXT +! THIS INCLUDE FILE CONTAINS MEGAN SPECIES +! +! WHO WHEN WHAT +! --------------------------------------------------------------------- +! XUEMEI WANG 06/16/2009 - CREATES THIS FILE +!======================================================================= + +INTEGER, PARAMETER :: N_MGN_SPC = 20 + +CHARACTER(LEN=6), DIMENSION(N_MGN_SPC) :: & + CMGN_SPC=(/'ISOP ','MYRC ','SABI ','LIMO ','A_3CAR','OCIM ','BPIN ','APIN ','OMTP ',& + 'FARN ','BCAR ','OSQT ','MBO ','MEOH ','ACTO ','CO ','NO ','BIDER ',& + 'STRESS','OTHER '/) + +REAL, DIMENSION(N_MGN_SPC), PARAMETER :: & + XCLEO=(/2.,1.83,1.83,1.83,1.83,1.83,1.83,1.83,1.83,2.37,2.37,2.37,2.,1.6,1.83,1.6,1.86,2.,1.83,1.83/) + +REAL, DIMENSION(N_MGN_SPC), PARAMETER :: & + XCTM1=(/95.,80.,80.,80.,80.,80.,80.,80.,80.,130.,130.,130.,95.,60.,80.,60.,80.,95.,80.,80./) + +REAL, DIMENSION(N_MGN_SPC), PARAMETER :: & + XTDF_PRM=(/0.13,0.1,0.1,0.1,0.1,0.1,0.1,0.1,0.1,0.17,0.17,0.17,0.13,0.08,0.1,0.08,0.1,0.13,0.1,0.1/) + +REAL, DIMENSION(N_MGN_SPC), PARAMETER :: & + XLDF_FCT=(/0.999,0.6,0.6,0.4,0.4,0.4,0.4,0.6,0.4,0.5,0.5,0.5,0.999,0.8,0.2,0.999,0.,0.8,0.8,0.2/) + +REAL, DIMENSION(N_MGN_SPC), PARAMETER :: & + XMGN_MWT=(/1.,1.,1.,1.,1.,1.,1.,1.,1.,1.,1.,1.,1.,1.,1.,1.,1.,1.,1.,1./) +! +INTEGER, DIMENSION(N_MGN_SPC), PARAMETER :: & + NREA_INDEX=(/5,2,2,2,2,2,2,2,2,3,3,3,5,4,1,1,1,1,1,1/) +! +!************************************************************************************************************** +! +INTEGER,PARAMETER :: N_MGN_PFT = 16 +! +!CHARACTER(LEN=10), DIMENSION(N_MGN_PFT), PARAMETER :: & +! CMGN_PFT=(/'NT_EG_TEMP','NT_DC_BORL','NT_EG_BORL','BT_EG_TROP','BT_EG_TEMP','BT_DC_TROP',& +! 'BT_DC_TEMP','BT_DC_BORL','SG_EG_TEMP','SB_DC_TEMP','SB_DC_BORL',& +! 'GS_C3_COLD','GS_C3_COOL','GS_C3_WARM','CORN ','CROP '/) +! +!CHARACTER(LEN=35), DIMENSION(N_MGN_PFT), PARAMETER :: & +! CMGN_NAM=(/'Needleaf evergreen temperate tree ','Needleaf deciduous boreal tree ',& +! 'Needleaf evergreen boreal tree ','Broadleaf evergreen tropical tree ',& +! 'Broadleaf evergreen tropical tree ','Broadleaf deciduous tropical tree ',& +! 'Broadleaf deciduous temperate tree ','Broadleaf deciduous boreal tree ',& +! 'Broadleaf evergreen temperate shrub','Broadleaf deciduous temperate shrub',& +! 'Broadleaf deciduous boreal shrub ','Cold C3 grass ',& +! 'Cool C3 grass ','Warm C3 grass ',& +! 'Corn ','Other crops '/) +! +INTEGER,PARAMETER :: N_CAT = 5 +! +REAL, DIMENSION(N_CAT) :: XANEW=(/1.,2. ,0.4 ,3.5,0.05/) +REAL, DIMENSION(N_CAT) :: XAGRO=(/1.,1.8 ,0.6 ,3. ,0.6 /) +REAL, DIMENSION(N_CAT) :: XAMAT=(/1.,1. ,1. ,1. ,1. /) +REAL, DIMENSION(N_CAT) :: XAOLD=(/1.,1.05,0.95,1.2,0.9 /) +! +!********************************************************************************************************** + +INTEGER, PARAMETER :: NRCHA = 16 +! 1 = canopy depth +! 2 = leaf width +! 3 = leaf length +! 4 = canopy height +! 5 = scattering coefficient for PPFD +! 6 = scattering coefficient for near IR +! 7 = reflection coefficient for diffuse PPFD +! 8 = reflection coefficient for diffuse near IR +! 9 = clustering coefficient (accounts for leaf clumping influence on mean +! projected leaf area in the direction of the suns beam) +! use 0.85 for default, corn=0.4-0.9; Pine=0.6-1.0; oak=0.53-0.67; +! tropical rainforest=1.1 +! 10 = leaf IR emissivity +! 11 = leaf stomata and cuticle factor: 1=hypostomatous, 2=amphistomatous, +! 1.25=hypostomatous but with some transpiration through cuticle +! 12 = daytime temperature lapse rate (K m-1) +! 13 = nighttime temperature lapse rate (K m-1) +! 14 = warm (>283K) canopy total humidity change (Pa) +! 15 = cool (>= 283K) canopy total humidity change (Pa) +! 16 = normalized canopy depth where wind is negligible +! NT NT NT TF BT TF BT BT SB SB SB HB HB HB CR CR + +REAL,DIMENSION(NRCHA,N_MGN_PFT) :: XCANOPYCHAR = RESHAPE(& + (/ 16., 16., 16., 16., 16., 16., 16., 16., 1., 1., 1., 0.756, 0.756, 0.756, 1., 1., & + 0.05, 0.05, 0.05, 0.05, 0.05, 0.05, 0.05, 0.05, 0.015, 0.015, 0.015, 0.015, 0.015, 0.015, 0.02, 0.02, & + 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.15, 0.15, 0.15, 0.15, 0.15, & + 24., 24., 24., 24., 24., 24., 24., 24., 2., 2., 2., 0.75, 0.75, 0.75, 1., 1., & + 0.2, 0.2, 0.2, 0.2, 0.2, 0.2, 0.2, 0.2, 0.2, 0.2, 0.2, 0.2, 0.2, 0.2, 0.2, 0.2, & + 0.8, 0.8, 0.8, 0.8, 0.8, 0.8, 0.8, 0.8, 0.8, 0.8, 0.8, 0.8, 0.8, 0.8, 0.8, 0.8, & + 0.057, 0.057, 0.057, 0.057, 0.057, 0.057, 0.057, 0.057, 0.057, 0.057, 0.057, 0.057, 0.057, 0.057, 0.057, 0.057, & + 0.389, 0.389, 0.389, 0.389, 0.389, 0.389, 0.389, 0.389, 0.389, 0.389, 0.389, 0.389, 0.389, 0.389, 0.389, 0.389, & + 0.85, 0.85, 0.85, 1.1, 0.95, 1.1, 0.95, 0.95, 0.85, 0.85, 0.85, 0.76, 0.76, 0.76, 0.65, 0.65, & + 0.95, 0.95, 0.95, 0.95, 0.95, 0.95, 0.95, 0.95, 0.95, 0.95, 0.95, 0.95, 0.95, 0.95, 0.95, 0.95, & + 1.25, 1.25, 1.25, 1.25, 1.25, 1.25, 1.25, 1.25, 1.00, 1.00, 1.00, 1.25, 1.25, 1.25, 1.25, 1.25, & + 0.06, 0.06, 0.06, 0.06, 0.06, 0.06, 0.06, 0.06, 0.06, 0.06, 0.06, 0.06, 0.06, 0.06, 0.06, 0.06, & + -0.06, -0.06, -0.06, -0.06, -0.06, -0.06, -0.06, -0.06, -0.06, -0.06, -0.06, -0.06, -0.06, -0.06, -0.06, -0.06, & + 700., 700., 700., 700., 700., 700., 700., 700., 700., 700., 700., 700., 700., 700., 700., 700., & + 150., 150., 150., 150., 150., 150., 150., 150., 150., 150., 150., 150., 150., 150., 150., 150., & + 0.7, 0.7, 0.7, 0.7, 0.7, 0.7, 0.7, 0.7, 0.7, 0.7, 0.7, 0.7, 0.7, 0.7, 0.7, 0.7/)& + ,SHAPE=(/NRCHA,N_MGN_PFT/) ,ORDER=(/2,1/) ) + + +END MODULE MODD_MEGAN diff --git a/src/LIB/MEGAN/modd_mgn2mech.F90 b/src/LIB/MEGAN/modd_mgn2mech.F90 new file mode 100644 index 000000000..f64f45eb5 --- /dev/null +++ b/src/LIB/MEGAN/modd_mgn2mech.F90 @@ -0,0 +1,1275 @@ +MODULE MODD_MGN2MECH + +USE MODD_MEGAN, ONLY : N_MGN_SPC, N_MGN_PFT +!======================================================================= +! EF_MGN20.EXT +! This include file contains EF for 20 MEGAN species. The values in +! this file must be in the same order as in SPC_MGN.EXT +! +! MEGAN v2.1 +! INPUT version 210 +! +! History: +! Who When What +! --------------------------------------------------------------------- +! Tan 12/02/2006 - Creates this file +! Guenther A. 08/11/2007 - Creates this file again with updates and move +! from v2.0 to v2.02 +! Xuemei Wang and Alex 26/07/2011-Extend EFs to 16 PFTs +! Jiang X. 05/07/2012 - Updates EFs with new values from Guenther +!======================================================================= + +! EF_NT_EG_TEMP EF_NT_DC_BORL EF_NT_EG_BORL EF_BT_EG_TROP EF_BT_EG_TEMP +! EF_BT_DC_TROP EF_BT_DC_TEMP EF_BT_DC_BORL EF_SB_EG_TEMP EF_SB_DC_TEMP +! EF_SB_DC_BORL EF_GS_C3_COLD EF_GS_C3_COOL EF_GS_C3_WARM EF_CROP EF_CORN + +REAL,DIMENSION(N_MGN_PFT,N_MGN_SPC) :: XEF_ALL = RESHAPE( (/ & + -1., -1., -1., -1., -1., -1., -1., -1., -1., -1., -1., -1., -1., -1., -1., -1.,& + -1., -1., -1., -1., -1., -1., -1., -1., -1., -1., -1., -1., -1., -1., -1., -1.,& + -1., -1., -1., -1., -1., -1., -1., -1., -1., -1., -1., -1., -1., -1., -1., -1.,& + -1., -1., -1., -1., -1., -1., -1., -1., -1., -1., -1., -1., -1., -1., -1., -1.,& + -1., -1., -1., -1., -1., -1., -1., -1., -1., -1., -1., -1., -1., -1., -1., -1.,& + -1., -1., -1., -1., -1., -1., -1., -1., -1., -1., -1., -1., -1., -1., -1., -1.,& + -1., -1., -1., -1., -1., -1., -1., -1., -1., -1., -1., -1., -1., -1., -1., -1.,& + -1., -1., -1., -1., -1., -1., -1., -1., -1., -1., -1., -1., -1., -1., -1., -1.,& +180., 170., 180., 150., 150., 150., 150., 150., 110., 200., 110., 5., 5., 5., 5., 5.,& + 40., 40., 40., 60., 40., 60., 40., 40., 40., 40., 40., 3., 3., 3., 4., 4.,& + 80., 80., 80., 60., 40., 60., 40., 40., 50., 50., 50., 1., 1., 1., 2., 4.,& +120., 120., 120., 120., 100., 120., 100., 100., 100., 100., 100., 2., 2., 2., 2., 2.,& + -1., -1., -1., -1., -1., -1., -1., -1., -1., -1., -1., -1., -1., -1., -1., -1.,& +900., 900., 900., 500., 900., 500., 900., 900., 900., 900., 900., 500., 500., 500., 900., 900.,& +240., 240., 240., 240., 240., 240., 240., 240., 240., 240., 240., 80., 80., 80., 80., 80.,& +600., 600., 600., 600., 600., 600., 600., 600., 600., 600., 600., 600., 600., 600., 600., 600.,& + -1., -1., -1., -1., -1., -1., -1., -1., -1., -1., -1., -1., -1., -1., -1., -1.,& +500., 500., 500., 500., 500., 500., 500., 500., 500., 500., 500., 80., 80., 80., 80., 80.,& +300., 300., 300., 300., 300., 300., 300., 300., 300., 300., 300., 300., 300., 300., 300., 300.,& +140., 140., 140., 140., 140., 140., 140., 140., 140., 140., 140., 140., 140., 140., 140., 140. /),& +SHAPE=(/N_MGN_PFT,N_MGN_SPC/), ORDER=(/1,2/) ) + +!======================================================================= +! EFFS_MGN20T150.EXT +! This include file contains EF fractions for speciation from 20 MEGAN +! categories to 150 species. The values in this file must be in the +! same order as in MAP_MGN20T150.EXT +! +! MEGAN v2.1 +! INPUT version 210 +! +! History: +! Who When What +! --------------------------------------------------------------------- +! Tan 12/02/06 - Creates this file +! Guenther A. 08/11/07 - Move from MEGAN v2.0 to MEGAN v2.02 with update on +! Nitrogen gas. +! Guenther A. 26/07/2011-Extend EFs for 16 PFTs +! Jiang X. 05/07/12 - Update EF fractions with new values from Guenther +!======================================================================= + +INTEGER,PARAMETER :: N_EFFS_SPC=150 ! Number of chemical species + +! EFFS_NT_EG_TEMP EFFS_NT_DC_BORL EFFS_NT_EG_BORL EFFS_BT_EG_TROP EFFS_BT_EG_TEMP +! EFFS_BT_DC_TROP EFFS_BT_DC_TEMP EFFS_BT_DC_BORL EFSF_SB_EG_TEMP EFFS_SB_DC_TEMP +! EFFS_SB_DC_BORL EFFS_GS_C3_COLD EFFS_GS_C3_COOL EFFS_GS_C3_WARM EFFS_CROP EFFS_CORN + + +REAL,DIMENSION(N_MGN_PFT,N_EFFS_SPC) :: XEFFS_ALL = RESHAPE( (/ & + 1.000, 1.000, 1.000, 1.000, 1.000, 1.000, 1.000, 1.000, 1.000, 1.000, 1.000, 1.000, 1.000, 1.000, 1.000, 1.000,& + 1.000, 1.000, 1.000, 1.000, 1.000, 1.000, 1.000, 1.000, 1.000, 1.000, 1.000, 1.000, 1.000, 1.000, 1.000, 1.000,& + 1.000, 1.000, 1.000, 1.000, 1.000, 1.000, 1.000, 1.000, 1.000, 1.000, 1.000, 1.000, 1.000, 1.000, 1.000, 1.000,& + 1.000, 1.000, 1.000, 1.000, 1.000, 1.000, 1.000, 1.000, 1.000, 1.000, 1.000, 1.000, 1.000, 1.000, 1.000, 1.000,& + 1.000, 1.000, 1.000, 1.000, 1.000, 1.000, 1.000, 1.000, 1.000, 1.000, 1.000, 1.000, 1.000, 1.000, 1.000, 1.000,& + 1.000, 1.000, 1.000, 1.000, 1.000, 1.000, 1.000, 1.000, 1.000, 1.000, 1.000, 1.000, 1.000, 1.000, 1.000, 1.000,& + 1.000, 1.000, 1.000, 1.000, 1.000, 1.000, 1.000, 1.000, 1.000, 1.000, 1.000, 1.000, 1.000, 1.000, 1.000, 1.000,& + 1.000, 1.000, 1.000, 1.000, 1.000, 1.000, 1.000, 1.000, 1.000, 1.000, 1.000, 1.000, 1.000, 1.000, 1.000, 1.000,& + 0.006, 0.006, 0.006, 0.011, 0.011, 0.011, 0.011, 0.011, 0.009, 0.009, 0.009, 0.010, 0.010, 0.010, 0.010, 0.010,& + 0.055, 0.055, 0.055, 0.057, 0.057, 0.057, 0.057, 0.057, 0.046, 0.046, 0.046, 0.042, 0.042, 0.042, 0.042, 0.042,& + 0.017, 0.017, 0.017, 0.034, 0.034, 0.034, 0.034, 0.034, 0.028, 0.028, 0.028, 0.031, 0.031, 0.031, 0.031, 0.031,& + 0.055, 0.055, 0.055, 0.046, 0.046, 0.046, 0.046, 0.046, 0.046, 0.046, 0.046, 0.042, 0.042, 0.042, 0.042, 0.042,& + 0.033, 0.033, 0.033, 0.011, 0.011, 0.011, 0.011, 0.011, 0.037, 0.037, 0.037, 0.042, 0.042, 0.042, 0.042, 0.042,& + 0.055, 0.055, 0.055, 0.057, 0.057, 0.057, 0.057, 0.057, 0.046, 0.046, 0.046, 0.042, 0.042, 0.042, 0.042, 0.042,& + 0.055, 0.055, 0.055, 0.057, 0.057, 0.057, 0.057, 0.057, 0.046, 0.046, 0.046, 0.042, 0.042, 0.042, 0.042, 0.042,& + 0.067, 0.067, 0.067, 0.057, 0.057, 0.057, 0.057, 0.057, 0.055, 0.055, 0.055, 0.062, 0.062, 0.062, 0.062, 0.062,& + 0.160, 0.160, 0.160, 0.057, 0.057, 0.057, 0.057, 0.057, 0.092, 0.092, 0.092, 0.104, 0.104, 0.104, 0.104, 0.104,& + 0.248, 0.248, 0.248, 0.180, 0.180, 0.180, 0.180, 0.180, 0.186, 0.186, 0.186, 0.146, 0.146, 0.146, 0.146, 0.146,& + 0.005, 0.005, 0.005, 0.010, 0.010, 0.010, 0.010, 0.010, 0.008, 0.008, 0.008, 0.008, 0.008, 0.008, 0.008, 0.008,& + 0.002, 0.002, 0.002, 0.003, 0.003, 0.003, 0.003, 0.003, 0.003, 0.003, 0.003, 0.004, 0.004, 0.004, 0.004, 0.004,& + 0.006, 0.006, 0.006, 0.011, 0.011, 0.011, 0.011, 0.011, 0.009, 0.009, 0.009, 0.010, 0.010, 0.010, 0.010, 0.010,& + 0.022, 0.022, 0.022, 0.046, 0.046, 0.046, 0.046, 0.046, 0.037, 0.037, 0.037, 0.042, 0.042, 0.042, 0.042, 0.042,& + 0.006, 0.006, 0.006, 0.011, 0.011, 0.011, 0.011, 0.011, 0.009, 0.009, 0.009, 0.010, 0.010, 0.010, 0.010, 0.010,& + 0.002, 0.002, 0.002, 0.003, 0.003, 0.003, 0.003, 0.003, 0.003, 0.003, 0.003, 0.004, 0.004, 0.004, 0.004, 0.004,& + 0.033, 0.033, 0.033, 0.034, 0.034, 0.034, 0.034, 0.034, 0.046, 0.046, 0.046, 0.042, 0.042, 0.042, 0.042, 0.042,& + 0.006, 0.006, 0.006, 0.011, 0.011, 0.011, 0.011, 0.011, 0.009, 0.009, 0.009, 0.010, 0.010, 0.010, 0.010, 0.010,& + 0.002, 0.002, 0.002, 0.003, 0.003, 0.003, 0.003, 0.003, 0.003, 0.003, 0.003, 0.004, 0.004, 0.004, 0.004, 0.004,& + 0.028, 0.028, 0.028, 0.011, 0.011, 0.011, 0.011, 0.011, 0.046, 0.046, 0.046, 0.042, 0.042, 0.042, 0.042, 0.042,& + 0.006, 0.006, 0.006, 0.002, 0.002, 0.002, 0.002, 0.002, 0.009, 0.009, 0.009, 0.010, 0.010, 0.010, 0.010, 0.010,& + 0.011, 0.011, 0.011, 0.057, 0.057, 0.057, 0.057, 0.057, 0.037, 0.037, 0.037, 0.042, 0.042, 0.042, 0.042, 0.042,& + 0.004, 0.004, 0.004, 0.008, 0.008, 0.008, 0.008, 0.008, 0.006, 0.006, 0.006, 0.006, 0.006, 0.006, 0.006, 0.006,& + 0.060, 0.060, 0.060, 0.138, 0.138, 0.138, 0.138, 0.138, 0.111, 0.111, 0.111, 0.125, 0.125, 0.125, 0.125, 0.125,& + 0.003, 0.003, 0.003, 0.007, 0.007, 0.007, 0.007, 0.007, 0.006, 0.006, 0.006, 0.006, 0.006, 0.006, 0.006, 0.006,& + 0.017, 0.017, 0.017, 0.034, 0.034, 0.034, 0.034, 0.034, 0.028, 0.028, 0.028, 0.031, 0.031, 0.031, 0.031, 0.031,& + 0.003, 0.003, 0.003, 0.007, 0.007, 0.007, 0.007, 0.007, 0.006, 0.006, 0.006, 0.006, 0.006, 0.006, 0.006, 0.006,& + 0.017, 0.017, 0.017, 0.030, 0.030, 0.030, 0.030, 0.030, 0.024, 0.024, 0.024, 0.027, 0.027, 0.027, 0.027, 0.027,& + 0.001, 0.001, 0.001, 0.002, 0.002, 0.002, 0.002, 0.002, 0.002, 0.002, 0.002, 0.002, 0.002, 0.002, 0.002, 0.002,& + 0.003, 0.003, 0.003, 0.001, 0.001, 0.001, 0.001, 0.001, 0.003, 0.003, 0.003, 0.002, 0.002, 0.002, 0.002, 0.002,& + 1.000, 1.000, 1.000, 1.000, 1.000, 1.000, 1.000, 1.000, 1.000, 1.000, 1.000, 1.000, 1.000, 1.000, 1.000, 1.000,& + 1.000, 1.000, 1.000, 1.000, 1.000, 1.000, 1.000, 1.000, 1.000, 1.000, 1.000, 1.000, 1.000, 1.000, 1.000, 1.000,& + 0.016, 0.016, 0.016, 0.019, 0.019, 0.019, 0.019, 0.019, 0.019, 0.019, 0.019, 0.022, 0.022, 0.022, 0.022, 0.022,& + 0.006, 0.006, 0.006, 0.007, 0.007, 0.007, 0.007, 0.007, 0.008, 0.008, 0.008, 0.011, 0.011, 0.011, 0.011, 0.011,& + 0.144, 0.144, 0.144, 0.084, 0.084, 0.084, 0.084, 0.084, 0.096, 0.096, 0.096, 0.098, 0.098, 0.098, 0.098, 0.098,& + 0.002, 0.002, 0.002, 0.002, 0.002, 0.002, 0.002, 0.002, 0.002, 0.002, 0.002, 0.005, 0.005, 0.005, 0.005, 0.005,& + 0.002, 0.002, 0.002, 0.002, 0.002, 0.002, 0.002, 0.002, 0.002, 0.002, 0.002, 0.005, 0.005, 0.005, 0.005, 0.005,& + 0.120, 0.120, 0.120, 0.056, 0.056, 0.056, 0.056, 0.056, 0.067, 0.067, 0.067, 0.077, 0.077, 0.077, 0.077, 0.077,& + 0.024, 0.024, 0.024, 0.028, 0.028, 0.028, 0.028, 0.028, 0.029, 0.029, 0.029, 0.033, 0.033, 0.033, 0.033, 0.033,& + 0.012, 0.012, 0.012, 0.014, 0.014, 0.014, 0.014, 0.014, 0.014, 0.014, 0.014, 0.016, 0.016, 0.016, 0.016, 0.016,& + 0.008, 0.008, 0.008, 0.009, 0.009, 0.009, 0.009, 0.009, 0.010, 0.010, 0.010, 0.011, 0.011, 0.011, 0.011, 0.011,& + 0.005, 0.005, 0.005, 0.006, 0.006, 0.006, 0.006, 0.006, 0.006, 0.006, 0.006, 0.005, 0.005, 0.005, 0.005, 0.005,& + + 0.008, 0.008, 0.008, 0.009, 0.009, 0.009, 0.009, 0.009, 0.010, 0.010, 0.010, 0.011, 0.011, 0.011, 0.011, 0.011,& + 0.012, 0.012, 0.012, 0.014, 0.014, 0.014, 0.014, 0.014, 0.014, 0.014, 0.014, 0.016, 0.016, 0.016, 0.016, 0.016,& + 0.008, 0.008, 0.008, 0.009, 0.009, 0.009, 0.009, 0.009, 0.010, 0.010, 0.010, 0.011, 0.011, 0.011, 0.011, 0.011,& + 0.016, 0.016, 0.016, 0.019, 0.019, 0.019, 0.019, 0.019, 0.019, 0.019, 0.019, 0.022, 0.022, 0.022, 0.022, 0.022,& + 0.234, 0.234, 0.234, 0.276, 0.276, 0.276, 0.276, 0.276, 0.285, 0.285, 0.285, 0.224, 0.224, 0.224, 0.224, 0.224,& + 0.008, 0.008, 0.008, 0.009, 0.009, 0.009, 0.009, 0.009, 0.010, 0.010, 0.010, 0.011, 0.011, 0.011, 0.011, 0.011,& + 0.024, 0.024, 0.024, 0.028, 0.028, 0.028, 0.028, 0.028, 0.029, 0.029, 0.029, 0.033, 0.033, 0.033, 0.033, 0.033,& + 0.004, 0.004, 0.004, 0.005, 0.005, 0.005, 0.005, 0.005, 0.005, 0.005, 0.005, 0.005, 0.005, 0.005, 0.005, 0.005,& + 0.199, 0.199, 0.199, 0.139, 0.139, 0.139, 0.139, 0.139, 0.172, 0.172, 0.172, 0.164, 0.164, 0.164, 0.164, 0.164,& + 0.002, 0.002, 0.002, 0.002, 0.002, 0.002, 0.002, 0.002, 0.002, 0.002, 0.002, 0.005, 0.005, 0.005, 0.005, 0.005,& + 0.002, 0.002, 0.002, 0.002, 0.002, 0.002, 0.002, 0.002, 0.002, 0.002, 0.002, 0.005, 0.005, 0.005, 0.005, 0.005,& + 0.002, 0.002, 0.002, 0.002, 0.002, 0.002, 0.002, 0.002, 0.002, 0.002, 0.002, 0.005, 0.005, 0.005, 0.005, 0.005,& + 0.002, 0.002, 0.002, 0.002, 0.002, 0.002, 0.002, 0.002, 0.002, 0.002, 0.002, 0.005, 0.005, 0.005, 0.005, 0.005,& + 0.012, 0.012, 0.012, 0.014, 0.014, 0.014, 0.014, 0.014, 0.014, 0.014, 0.014, 0.016, 0.016, 0.016, 0.016, 0.016,& + 0.040, 0.040, 0.040, 0.046, 0.046, 0.046, 0.046, 0.046, 0.048, 0.048, 0.048, 0.055, 0.055, 0.055, 0.055, 0.055,& + 0.080, 0.080, 0.080, 0.186, 0.186, 0.186, 0.186, 0.186, 0.115, 0.115, 0.115, 0.109, 0.109, 0.109, 0.109, 0.109,& + 0.002, 0.002, 0.002, 0.002, 0.002, 0.002, 0.002, 0.002, 0.002, 0.002, 0.002, 0.005, 0.005, 0.005, 0.005, 0.005,& + 0.002, 0.002, 0.002, 0.002, 0.002, 0.002, 0.002, 0.002, 0.002, 0.002, 0.002, 0.005, 0.005, 0.005, 0.005, 0.005,& + 0.002, 0.002, 0.002, 0.005, 0.005, 0.005, 0.005, 0.005, 0.002, 0.002, 0.002, 0.005, 0.005, 0.005, 0.005, 0.005,& + 0.002, 0.002, 0.002, 0.002, 0.002, 0.002, 0.002, 0.002, 0.002, 0.002, 0.002, 0.005, 0.005, 0.005, 0.005, 0.005,& + 1.000, 1.000, 1.000, 1.000, 1.000, 1.000, 1.000, 1.000, 1.000, 1.000, 1.000, 1.000, 1.000, 1.000, 1.000, 1.000,& + 1.000, 1.000, 1.000, 1.000, 1.000, 1.000, 1.000, 1.000, 1.000, 1.000, 1.000, 1.000, 1.000, 1.000, 1.000, 1.000,& + 1.000, 1.000, 1.000, 1.000, 1.000, 1.000, 1.000, 1.000, 1.000, 1.000, 1.000, 1.000, 1.000, 1.000, 1.000, 1.000,& + 0.005, 0.005, 0.005, 0.005, 0.005, 0.005, 0.005, 0.005, 0.005, 0.005, 0.005, 0.005, 0.005, 0.005, 0.005, 0.005,& + 0.000, 0.000, 0.000, 0.000, 0.000, 0.000, 0.000, 0.000, 0.000, 0.000, 0.000, 0.000, 0.000, 0.000, 0.000, 0.000,& + 0.000, 0.000, 0.000, 0.000, 0.000, 0.000, 0.000, 0.000, 0.000, 0.000, 0.000, 0.000, 0.000, 0.000, 0.000, 0.000,& + 1.000, 1.000, 1.000, 1.000, 1.000, 1.000, 1.000, 1.000, 1.000, 1.000, 1.000, 1.000, 1.000, 1.000, 1.000, 1.000,& + 0.400, 0.400, 0.400, 0.400, 0.400, 0.400, 0.400, 0.400, 0.400, 0.400, 0.400, 0.250, 0.250, 0.250, 0.250, 0.250,& + 0.400, 0.400, 0.400, 0.400, 0.400, 0.400, 0.400, 0.400, 0.400, 0.400, 0.400, 0.250, 0.250, 0.250, 0.250, 0.250,& + 0.060, 0.060, 0.060, 0.060, 0.060, 0.060, 0.060, 0.060, 0.060, 0.060, 0.060, 0.150, 0.150, 0.150, 0.150, 0.150,& + 0.080, 0.080, 0.080, 0.080, 0.080, 0.080, 0.080, 0.080, 0.080, 0.080, 0.080, 0.200, 0.200, 0.200, 0.200, 0.200,& + 0.060, 0.060, 0.060, 0.060, 0.060, 0.060, 0.060, 0.060, 0.060, 0.060, 0.060, 0.150, 0.150, 0.150, 0.150, 0.150,& + 0.001, 0.001, 0.001, 0.001, 0.001, 0.001, 0.001, 0.001, 0.001, 0.001, 0.001, 0.001, 0.001, 0.001, 0.001, 0.001,& + 0.001, 0.001, 0.001, 0.001, 0.001, 0.001, 0.001, 0.001, 0.001, 0.001, 0.001, 0.001, 0.001, 0.001, 0.001, 0.001,& + 0.001, 0.001, 0.001, 0.001, 0.001, 0.001, 0.001, 0.001, 0.001, 0.001, 0.001, 0.001, 0.001, 0.001, 0.001, 0.001,& + 0.010, 0.010, 0.010, 0.010, 0.010, 0.010, 0.010, 0.010, 0.010, 0.010, 0.010, 0.010, 0.010, 0.010, 0.010, 0.010,& + 0.001, 0.001, 0.001, 0.001, 0.001, 0.001, 0.001, 0.001, 0.001, 0.001, 0.001, 0.001, 0.001, 0.001, 0.001, 0.001,& + 0.001, 0.001, 0.001, 0.001, 0.001, 0.001, 0.001, 0.001, 0.001, 0.001, 0.001, 0.001, 0.001, 0.001, 0.001, 0.001,& + 0.025, 0.025, 0.025, 0.025, 0.025, 0.025, 0.025, 0.025, 0.025, 0.025, 0.025, 0.025, 0.025, 0.025, 0.025, 0.025,& + 0.001, 0.001, 0.001, 0.001, 0.001, 0.001, 0.001, 0.001, 0.001, 0.001, 0.001, 0.001, 0.001, 0.001, 0.001, 0.001,& + 0.001, 0.001, 0.001, 0.001, 0.001, 0.001, 0.001, 0.001, 0.001, 0.001, 0.001, 0.001, 0.001, 0.001, 0.001, 0.001,& + 0.001, 0.001, 0.001, 0.001, 0.001, 0.001, 0.001, 0.001, 0.001, 0.001, 0.001, 0.001, 0.001, 0.001, 0.001, 0.001,& + 0.001, 0.001, 0.001, 0.001, 0.001, 0.001, 0.001, 0.001, 0.001, 0.001, 0.001, 0.001, 0.001, 0.001, 0.001, 0.001,& + 0.010, 0.010, 0.010, 0.010, 0.010, 0.010, 0.010, 0.010, 0.010, 0.010, 0.010, 0.010, 0.010, 0.010, 0.010, 0.010,& + 0.001, 0.001, 0.001, 0.001, 0.001, 0.001, 0.001, 0.001, 0.001, 0.001, 0.001, 0.001, 0.001, 0.001, 0.001, 0.001,& + 0.001, 0.001, 0.001, 0.001, 0.001, 0.001, 0.001, 0.001, 0.001, 0.001, 0.001, 0.001, 0.001, 0.001, 0.001, 0.001,& + 0.001, 0.001, 0.001, 0.001, 0.001, 0.001, 0.001, 0.001, 0.001, 0.001, 0.001, 0.001, 0.001, 0.001, 0.001, 0.001,& + 0.001, 0.001, 0.001, 0.001, 0.001, 0.001, 0.001, 0.001, 0.001, 0.001, 0.001, 0.001, 0.001, 0.001, 0.001, 0.001,& + 0.001, 0.001, 0.001, 0.001, 0.001, 0.001, 0.001, 0.001, 0.001, 0.001, 0.001, 0.001, 0.001, 0.001, 0.001, 0.001,& + 0.002, 0.002, 0.002, 0.002, 0.002, 0.002, 0.002, 0.002, 0.002, 0.002, 0.002, 0.002, 0.002, 0.002, 0.002, 0.002,& + + 0.010, 0.010, 0.010, 0.010, 0.010, 0.010, 0.010, 0.010, 0.010, 0.010, 0.010, 0.010, 0.010, 0.010, 0.010, 0.010,& + 0.001, 0.001, 0.001, 0.001, 0.001, 0.001, 0.001, 0.001, 0.001, 0.001, 0.001, 0.001, 0.001, 0.001, 0.001, 0.001,& + 0.001, 0.001, 0.001, 0.001, 0.001, 0.001, 0.001, 0.001, 0.001, 0.001, 0.001, 0.001, 0.001, 0.001, 0.001, 0.001,& + 0.015, 0.015, 0.015, 0.015, 0.015, 0.015, 0.015, 0.015, 0.015, 0.015, 0.015, 0.015, 0.015, 0.015, 0.015, 0.015,& + 0.001, 0.001, 0.001, 0.001, 0.001, 0.001, 0.001, 0.001, 0.001, 0.001, 0.001, 0.001, 0.001, 0.001, 0.001, 0.001,& + 0.001, 0.001, 0.001, 0.001, 0.001, 0.001, 0.001, 0.001, 0.001, 0.001, 0.001, 0.001, 0.001, 0.001, 0.001, 0.001,& + 0.030, 0.030, 0.030, 0.030, 0.030, 0.030, 0.030, 0.030, 0.030, 0.030, 0.030, 0.030, 0.030, 0.030, 0.030, 0.030,& + 1.000, 1.000, 1.000, 1.000, 1.000, 1.000, 1.000, 1.000, 1.000, 1.000, 1.000, 1.000, 1.000, 1.000, 1.000, 1.000,& + 0.240, 0.240, 0.240, 0.240, 0.240, 0.240, 0.240, 0.240, 0.240, 0.240, 0.240, 0.240, 0.240, 0.240, 0.240, 0.240,& + 0.010, 0.010, 0.010, 0.010, 0.010, 0.010, 0.010, 0.010, 0.010, 0.010, 0.010, 0.010, 0.010, 0.010, 0.010, 0.010,& + 0.580, 0.580, 0.580, 0.580, 0.580, 0.580, 0.580, 0.580, 0.580, 0.580, 0.580, 0.580, 0.580, 0.580, 0.580, 0.580,& + 0.015, 0.015, 0.015, 0.015, 0.015, 0.015, 0.015, 0.015, 0.015, 0.015, 0.015, 0.015, 0.015, 0.015, 0.015, 0.015,& + 0.001, 0.001, 0.001, 0.001, 0.001, 0.001, 0.001, 0.001, 0.001, 0.001, 0.001, 0.001, 0.001, 0.001, 0.001, 0.001,& + 0.480, 0.480, 0.480, 0.480, 0.480, 0.480, 0.480, 0.480, 0.480, 0.480, 0.480, 0.480, 0.480, 0.480, 0.480, 0.480,& + 0.002, 0.002, 0.002, 0.002, 0.002, 0.002, 0.002, 0.002, 0.002, 0.002, 0.002, 0.002, 0.002, 0.002, 0.002, 0.002,& + 0.003, 0.003, 0.003, 0.003, 0.003, 0.003, 0.003, 0.003, 0.003, 0.003, 0.003, 0.003, 0.003, 0.003, 0.003, 0.003,& + 0.001, 0.001, 0.001, 0.001, 0.001, 0.001, 0.001, 0.001, 0.001, 0.001, 0.001, 0.001, 0.001, 0.001, 0.001, 0.001,& + 0.002, 0.002, 0.002, 0.002, 0.002, 0.002, 0.002, 0.002, 0.002, 0.002, 0.002, 0.002, 0.002, 0.002, 0.002, 0.002,& + 0.050, 0.050, 0.050, 0.050, 0.050, 0.050, 0.050, 0.050, 0.050, 0.050, 0.050, 0.050, 0.050, 0.050, 0.050, 0.050,& + 0.010, 0.010, 0.010, 0.010, 0.010, 0.010, 0.010, 0.010, 0.010, 0.010, 0.010, 0.010, 0.010, 0.010, 0.010, 0.010,& + 0.002, 0.002, 0.002, 0.002, 0.002, 0.002, 0.002, 0.002, 0.002, 0.002, 0.002, 0.002, 0.002, 0.002, 0.002, 0.002,& + 0.001, 0.001, 0.001, 0.001, 0.001, 0.001, 0.001, 0.001, 0.001, 0.001, 0.001, 0.001, 0.001, 0.001, 0.001, 0.001,& + 0.003, 0.003, 0.003, 0.003, 0.003, 0.003, 0.003, 0.003, 0.003, 0.003, 0.003, 0.003, 0.003, 0.003, 0.003, 0.003,& + 0.001, 0.001, 0.001, 0.001, 0.001, 0.001, 0.001, 0.001, 0.001, 0.001, 0.001, 0.001, 0.001, 0.001, 0.001, 0.001,& + 0.001, 0.001, 0.001, 0.001, 0.001, 0.001, 0.001, 0.001, 0.001, 0.001, 0.001, 0.001, 0.001, 0.001, 0.001, 0.001,& + 0.001, 0.001, 0.001, 0.001, 0.001, 0.001, 0.001, 0.001, 0.001, 0.001, 0.001, 0.001, 0.001, 0.001, 0.001, 0.001,& + 0.030, 0.030, 0.030, 0.030, 0.030, 0.030, 0.030, 0.030, 0.030, 0.030, 0.030, 0.030, 0.030, 0.030, 0.030, 0.030,& + 0.030, 0.030, 0.030, 0.030, 0.030, 0.030, 0.030, 0.030, 0.030, 0.030, 0.030, 0.030, 0.030, 0.030, 0.030, 0.030,& + 0.002, 0.002, 0.002, 0.002, 0.002, 0.002, 0.002, 0.002, 0.002, 0.002, 0.002, 0.002, 0.002, 0.002, 0.002, 0.002,& + 0.001, 0.001, 0.001, 0.001, 0.001, 0.001, 0.001, 0.001, 0.001, 0.001, 0.001, 0.001, 0.001, 0.001, 0.001, 0.001,& + 0.010, 0.010, 0.010, 0.010, 0.010, 0.010, 0.010, 0.010, 0.010, 0.010, 0.010, 0.010, 0.010, 0.010, 0.010, 0.010,& + 0.002, 0.002, 0.002, 0.002, 0.002, 0.002, 0.002, 0.002, 0.002, 0.002, 0.002, 0.002, 0.002, 0.002, 0.002, 0.002,& + 0.010, 0.010, 0.010, 0.010, 0.010, 0.010, 0.010, 0.010, 0.010, 0.010, 0.010, 0.010, 0.010, 0.010, 0.010, 0.010,& + 0.010, 0.010, 0.010, 0.010, 0.010, 0.010, 0.010, 0.010, 0.010, 0.010, 0.010, 0.010, 0.010, 0.010, 0.010, 0.010,& + 0.100, 0.100, 0.100, 0.100, 0.100, 0.100, 0.100, 0.100, 0.100, 0.100, 0.100, 0.100, 0.100, 0.100, 0.100, 0.100,& + 0.060, 0.060, 0.060, 0.060, 0.060, 0.060, 0.060, 0.060, 0.060, 0.060, 0.060, 0.060, 0.060, 0.060, 0.060, 0.060,& + 0.060, 0.060, 0.060, 0.060, 0.060, 0.060, 0.060, 0.060, 0.060, 0.060, 0.060, 0.060, 0.060, 0.060, 0.060, 0.060,& + 0.060, 0.060, 0.060, 0.060, 0.060, 0.060, 0.060, 0.060, 0.060, 0.060, 0.060, 0.060, 0.060, 0.060, 0.060, 0.060,& + 0.060, 0.060, 0.060, 0.060, 0.060, 0.060, 0.060, 0.060, 0.060, 0.060, 0.060, 0.060, 0.060, 0.060, 0.060, 0.060,& + 0.030, 0.030, 0.030, 0.030, 0.030, 0.030, 0.030, 0.030, 0.030, 0.030, 0.030, 0.030, 0.030, 0.030, 0.030, 0.030,& + 0.001, 0.001, 0.001, 0.001, 0.001, 0.001, 0.001, 0.001, 0.001, 0.001, 0.001, 0.001, 0.001, 0.001, 0.001, 0.001,& + 0.001, 0.001, 0.001, 0.001, 0.001, 0.001, 0.001, 0.001, 0.001, 0.001, 0.001, 0.001, 0.001, 0.001, 0.001, 0.001,& + 0.001, 0.001, 0.001, 0.001, 0.001, 0.001, 0.001, 0.001, 0.001, 0.001, 0.001, 0.001, 0.001, 0.001, 0.001, 0.001,& + 0.003, 0.003, 0.003, 0.001, 0.001, 0.001, 0.001, 0.001, 0.001, 0.001, 0.001, 0.001, 0.001, 0.001, 0.001, 0.001,& + 0.002, 0.002, 0.002, 0.002, 0.002, 0.002, 0.002, 0.002, 0.002, 0.002, 0.002, 0.002, 0.002, 0.002, 0.002, 0.002,& + 0.003, 0.003, 0.003, 0.001, 0.001, 0.001, 0.001, 0.001, 0.001, 0.001, 0.001, 0.001, 0.001, 0.001, 0.001, 0.001,& + 0.001, 0.001, 0.001, 0.001, 0.001, 0.001, 0.001, 0.001, 0.001, 0.001, 0.001, 0.001, 0.001, 0.001, 0.001, 0.001,& + 0.003, 0.003, 0.003, 0.001, 0.001, 0.001, 0.001, 0.001, 0.001, 0.001, 0.001, 0.001, 0.001, 0.001, 0.001, 0.001,& + 0.003, 0.003, 0.003, 0.001, 0.001, 0.001, 0.001, 0.001, 0.001, 0.001, 0.001, 0.001, 0.001, 0.001, 0.001, 0.001,& + 0.001, 0.001, 0.001, 0.001, 0.001, 0.001, 0.001, 0.001, 0.001, 0.001, 0.001, 0.001, 0.001, 0.001, 0.001, 0.001 /),& +SHAPE=(/N_MGN_PFT,N_EFFS_SPC/), ORDER=(/1,2/) ) + + +!**************************************************************************************************************** +!**************************************************************************************************************** + +INTEGER, PARAMETER :: N_CB05_SPC=19 +! +CHARACTER(LEN=4), DIMENSION(N_CB05_SPC) :: CMECH_SPC_CB05=(/& ! Mechanism species name +'ISOP','TERP','PAR ','XYL ','OLE ','NR ','MEOH','CH4 ','NH3 ','NO ',& +'ALD2','ETOH','FORM','ALDX','TOL ','IOLE','CO ','ETHA','ETH '/) + + +REAL, DIMENSION(N_CB05_SPC) :: XMECH_MWT_CB05=(/& ! Mechanism species molecular weight + 80.,160., 16.,128., 32., 16., 16., 16., 17., 46., 32., 32., 16., 32.,112., 64.,& + 28., 32., 28./) + +INTEGER, PARAMETER :: N_CB05=204 + +CHARACTER(LEN=16), DIMENSION(N_CB05) :: CSPMH_NAM_CB05=(/& ! speciated species name +'isoprene ','myrcene ','sabinene ','limonene ','carene_3 ','ocimene_t_b ',& +'pinene_b ','pinene_a ','2met_styrene ','2met_styrene ','2met_styrene ','cymene_p ',& +'cymene_p ','cymene_o ','cymene_o ','phellandrene_a ','thujene_a ','terpinene_a ',& +'terpinene_g ','terpinolene ','phellandrene_b ','camphene ','bornene ','fenchene_a ',& +'ocimene_al ','ocimene_c_b ','tricyclene ','tricyclene ','estragole ','camphor ',& +'camphor ','fenchone ','fenchone ','piperitone ','thujone_a ','thujone_a ',& +'thujone_b ','thujone_b ','cineole_1_8 ','cineole_1_8 ','borneol ','borneol ',& +'linalool ','terpineol_4 ','terpineol_a ','linalool_OXD_c ','linalool_OXD_t ','ionone_b ',& +'ionone_b ','bornyl_ACT ','bornyl_ACT ','farnescene_a ','caryophyllene_b','acoradiene ',& +'aromadendrene ','bergamotene_a ','bergamotene_b ','bisabolene_a ','bisabolene_b ','bourbonene_b ',& +'cadinene_d ','cadinene_g ','cedrene_a ','copaene_a ','cubebene_a ','cubebene_b ',& +'elemene_b ','farnescene_b ','germacrene_B ','germacrene_D ','gurjunene_b ','humulene_a ',& +'humulene_g ','isolongifolene ','longifolene ','longipinene ','muurolene_a ','muurolene_g ',& +'selinene_b ','selinene_d ','nerolidol_c ','nerolidol_t ','cedrol ','cedrol ',& +'MBO_2m3e2ol ','MBO_2m3e2ol ','methanol ','acetone ','methane ','ammonia ',& +'nitric_OXD ','acetaldehyde ','ethanol ','formic_acid ','formaldehyde ','acetic_acid ',& +'acetic_acid ','MBO_3m2e1ol ','MBO_3m2e1ol ','MBO_3m3e1ol ','MBO_3m3e1ol ','benzaldehyde ',& +'butanone_2 ','decanal ','decanal ','dodecene_1 ','dodecene_1 ','geranyl_acetone',& +'geranyl_acetone','heptanal ','heptanal ','heptane ','hexane ','met_benzoate ',& +'met_benzoate ','met_heptenone ','met_heptenone ','neryl_acetone ','neryl_acetone ','neryl_acetone ',& +'nonanal ','nonanal ','nonenal ','nonenal ','nonenal ','octanal ',& +'octanal ','octanol ','octenol_1e3ol ','octenol_1e3ol ','oxopentanal ','oxopentanal ',& +'pentane ','phenyl_CCO ','phenyl_CCO ','pyruvic_acid ','pyruvic_acid ','terpinyl_ACT_a ',& +'terpinyl_ACT_a ','tetradecene_1 ','tetradecene_1 ','toluene ','carbon_monoxide','butene ',& +'butene ','ethane ','ethene ','propane ','propane ','propene ',& +'propene ','diallyl_2s ','diallyl_2s ','2met_2s ','2met_s ','met_chloride ',& +'met_bromide ','met_iodide ','met_mercaptan ','met_propenyl_2s','met_propenyl_2s','PPPP_2s ',& +'PPPP_2s ','2met_nonatriene','met_salicylate ','met_salicylate ','indole ','indole ',& +'jasmone ','jasmone ','met_jasmonate ','met_jasmonate ','3met_3DCTT ','hexanal ',& +'hexanal ','hexanol_1 ','hexenal_c3 ','hexenal_c3 ','hexenal_t2 ','hexenal_t2 ',& +'hexenol_c3 ','hexenol_c3 ','hexenyl_ACT_c3 ','hexenyl_ACT_c3 ','hexenyl_ACT_c3 ','homosalate ',& +'homosalate ','Ehsalate ','Ehsalate ','pentanal ','pentanal ','heptanone ',& +'anisole ','verbenene ','benzyl-acetate ','benzyl-acetate ','benzyl-acetate ','myrtenal ',& +'benzyl-alcohol ','meta-cymenene ','meta-cymenene ','ipsenol ','Napthalene ','Napthalene '/) +! +INTEGER, DIMENSION(N_CB05) :: NSPMH_MAP_CB05=(/& ! speciated species name + 1, 2, 3, 4, 5, 6, 7, 8, 9, 9, 9, 10, 10, 11, 11, 12,& + 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 23, 24, 25, 25, 26,& + 26, 27, 28, 28, 29, 29, 30, 30, 31, 31, 32, 33, 34, 35, 36, 37,& + 37, 38, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51,& + 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67,& + 68, 69, 70, 70, 71, 71, 72, 73, 74, 75, 77, 78, 79, 80, 81, 82,& + 82, 83, 83, 84, 84, 85, 86, 87, 87, 88, 88, 89, 89, 90, 90, 91,& + 92, 93, 93, 94, 94, 95, 95, 95, 96, 96, 97, 97, 97, 98, 98, 99,& +100,100,101,101,102,103,103,104,104,105,105,106,106,107,108,109,& +109,110,111,113,113,114,114,117,117,118,119,120,121,122,124,125,& +125,126,126,127,128,128,129,129,130,130,131,131,132,133,133,134,& +135,135,136,136,137,137,138,138,138,139,139,140,140,141,141,142,& +143,144,145,145,145,146,147,148,148,149,150,150/) +! +CHARACTER(LEN=4), DIMENSION(N_CB05) :: CMECH_NAM_CB05=(/& ! mechanism species +'ISOP','TERP','TERP','TERP','TERP','TERP','TERP','TERP','PAR ','XYL ','OLE ','PAR ','XYL ','PAR ','XYL ','TERP',& +'TERP','TERP','TERP','TERP','TERP','TERP','TERP','TERP','TERP','TERP','PAR ','NR ','TERP','PAR ','NR ','PAR ',& +'NR ','TERP','PAR ','NR ','PAR ','NR ','PAR ','NR ','PAR ','NR ','TERP','TERP','TERP','TERP','TERP','TERP',& +'NR ','PAR ','NR ','NR ','NR ','NR ','NR ','NR ','NR ','NR ','NR ','NR ','NR ','NR ','NR ','NR ',& +'NR ','NR ','NR ','NR ','NR ','NR ','NR ','NR ','NR ','NR ','NR ','NR ','NR ','NR ','NR ','NR ',& +'NR ','NR ','PAR ','NR ','OLE ','PAR ','MEOH','PAR ','CH4 ','NH3 ','NO ','ALD2','ETOH','NR ','FORM','PAR ',& +'NR ','ALDX','PAR ','FORM','PAR ','TOL ','PAR ','ALDX','PAR ','OLE ','PAR ','TERP','NR ','ALDX','PAR ','PAR ',& +'PAR ','TOL ','NR ','PAR ','ALDX','IOLE','PAR ','NR ','ALDX','PAR ','PAR ','IOLE','ALDX','ALDX','PAR ','PAR ',& +'PAR ','OLE ','PAR ','ALDX','PAR ','TOL ','ALDX','FORM','ALDX','TERP','NR ','PAR ','OLE ','TOL ','CO ','OLE ',& +'PAR ','ETHA','ETH ','PAR ','NR ','OLE ','PAR ','PAR ','OLE ','PAR ','PAR ','NR ','NR ','NR ','PAR ','PAR ',& +'OLE ','PAR ','OLE ','TERP','TOL ','NR ','TOL ','NR ','TERP','NR ','TERP','NR ','NR ','ALDX','PAR ','PAR ',& +'IOLE','ALDX','IOLE','ALDX','PAR ','IOLE','PAR ','IOLE','NR ','TERP','NR ','TERP','NR ','ALDX','PAR ','PAR ',& +'TOL ','TERP','TOL ','PAR ','NR ','TERP','TOL ','XYL ','PAR ','TERP','XYL ','PAR '/) +! +INTEGER, DIMENSION(N_CB05) :: NMECH_MAP_CB05=(/& ! mechanism species mapped + 1, 2, 2, 2, 2, 2, 2, 2, 3, 4, 5, 3, 4, 3, 4, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 3, 6, 2, 3, 6, 3,& + 6, 2, 3, 6, 3, 6, 3, 6, 3, 6, 2, 2, 2, 2, 2, 2, 6, 3, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6,& + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 3, 6, 5, 3, 7, 3, 8, 9,10,11,12, 6,13, 3,& + 6,14, 3,13, 3,15, 3,14, 3, 5, 3, 2, 6,14, 3, 3, 3,15, 6, 3,14,16, 3, 6,14, 3, 3,16,14,14, 3, 3,& + 3, 5, 3,14, 3,15,14,13,14, 2, 6, 3, 5,15,17, 5, 3,18,19, 3, 6, 5, 3, 3, 5, 3, 3, 6, 6, 6, 3, 3,& + 5, 3, 5, 2,15, 6,15, 6, 2, 6, 2, 6, 6,14, 3, 3,16,14,16,14, 3,16, 3,16, 6, 2, 6, 2, 6,14, 3, 3,& +15, 2,15, 3, 6, 2,15, 4, 3, 2, 4, 3/) + +! +REAL, DIMENSION(N_CB05) :: XCONV_FAC_CB05=(/& ! conversion factor + 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 0.5, 2., 1., 2., 1., 1.,& + 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 9., 1., 1., 8., 2., 8.,& + 2., 1., 9., 1., 9., 1., 9., 1., 8., 2., 1., 1., 1., 1., 1., 1.,& + 3., 6., 6., 15., 15., 15., 15., 15., 15., 15., 15., 15., 15., 15., 15., 15.,& + 15., 15., 15., 15., 15., 15., 15., 15., 15., 15., 15., 15., 15., 15., 15., 15.,& + 15., 15., 13., 2., 1., 3., 1., 3., 1., 1., 1., 1., 1., 1., 1., 1.,& + 1., 1., 3., 1., 4., 1., 4., 1., 8., 1., 10., 1., 3., 1., 5., 7.,& + 6., 1., 1., 6., 1., 1., 8., 1., 1., 7., 3., 1., 1., 1., 6., 8.,& + 6., 1., 3., 1., 5., 1., 0.5, 1., 1., 1., 2., 12., 1., 1., 1., 1.,& + 2., 1., 1., 1.5, 1.5, 1., 1., 2., 2., 2., 2., 1., 1., 1., 1., 2.,& + 1., 4., 1., 1., 1., 1., 1., 1., 1., 1., 1., 3., 16., 1., 4., 6.,& + 1., 1., 1., 1., 2., 1., 3., 1., 1., 1., 3., 1., 3., 1., 3., 7.,& + 1., 1., 1., 1., 1., 1., 1., 1., 2., 1., 1., 2./) + + +!**************************************************************************************************************** +!**************************************************************************************************************** + +INTEGER, PARAMETER :: N_CB6_SPC=24 + +CHARACTER(LEN=4), DIMENSION(N_CB6_SPC) :: CMECH_SPC_CB6=(/& ! Mechanism species name +'ISOP','TERP','PAR ','XYL ','OLE ','NR ','MEOH','CH4 ','NH3 ','NO ',& +'ALD2','ETOH','FORM','ALDX','TOL ','IOLE','CO ','ETHA','ETH ','ETHY',& +'PRPA','BENZ','ACET','KET '/) + +REAL, DIMENSION(N_CB6_SPC) :: XMECH_MWT_CB6=(/& ! Mechanism species molecular weight + 80.,160., 16.,128., 32., 16., 16., 16.,17., 46., 32., 32., 16., 32.,112., 64.,& + 28., 32., 28., 26., 44., 78., 58., 58./) + + +INTEGER, PARAMETER :: N_CB6=210 + +CHARACTER(LEN=15), DIMENSION(N_CB6) :: CSPMH_NAM_CB6=(/& +'isoprene ','myrcene ','sabinene ','limonene ','carene_3 ','ocimene_t_b ',& +'pinene_b ','pinene_a ','2met_styrene ','2met_styrene ','2met_styrene ','cymene_p ',& +'cymene_p ','cymene_o ','cymene_o ','phellandrene_a ','thujene_a ','terpinene_a ',& +'terpinene_g ','terpinolene ','phellandrene_b ','camphene ','bornene ','fenchene_a ',& +'ocimene_al ','ocimene_c_b ','tricyclene ','tricyclene ','estragole ','camphor ',& +'camphor ','fenchone ','fenchone ','piperitone ','thujone_a ','thujone_a ',& +'thujone_b ','thujone_b ','cineole_1_8 ','cineole_1_8 ','borneol ','borneol ',& +'linalool ','terpineol_4 ','terpineol_a ','linalool_OXD_c ','linalool_OXD_t ','ionone_b ',& +'ionone_b ','bornyl_ACT ','bornyl_ACT ','farnescene_a ','caryophyllene_b','acoradiene ',& +'aromadendrene ','bergamotene_a ','bergamotene_b ','bisabolene_a ','bisabolene_b ','bourbonene_b ',& +'cadinene_d ','cadinene_g ','cedrene_a ','copaene_a ','cubebene_a ','cubebene_b ',& +'elemene_b ','farnescene_b ','germacrene_B ','germacrene_D ','gurjunene_b ','humulene_a ',& +'humulene_g ','isolongifolene ','longifolene ','longipinene ','muurolene_a ','muurolene_g ',& +'selinene_b ','selinene_d ','nerolidol_c ','nerolidol_t ','cedrol ','cedrol ',& +'MBO_2m3e2ol ','MBO_2m3e2ol ','methanol ','acetone ','methane ','ammonia ',& +'nitric_OXD ','acetaldehyde ','ethanol ','formic_acid ','formaldehyde ','acetic_acid ',& +'acetic_acid ','MBO_3m2e1ol ','MBO_3m2e1ol ','MBO_3m3e1ol ','MBO_3m3e1ol ','benzaldehyde ',& +'butanone_2 ','decanal ','decanal ','dodecene_1 ','dodecene_1 ','geranyl_acetone',& +'geranyl_acetone','heptanal ','heptanal ','heptane ','hexane ','met_benzoate ',& +'met_benzoate ','met_heptenone ','met_heptenone ','neryl_acetone ','neryl_acetone ','neryl_acetone ',& +'nonanal ','nonanal ','nonenal ','nonenal ','nonenal ','octanal ',& +'octanal ','octanol ','octenol_1e3ol ','octenol_1e3ol ','oxopentanal ','oxopentanal ',& +'pentane ','phenyl_CCO ','phenyl_CCO ','pyruvic_acid ','pyruvic_acid ','terpinyl_ACT_a ',& +'terpinyl_ACT_a ','tetradecene_1 ','tetradecene_1 ','toluene ','carbon_monoxide','butene ',& +'butene ','ethane ','ethene ','propane ','propene ','propene ',& +'diallyl_2s ','diallyl_2s ','2met_2s ','2met_s ','met_chloride ','met_bromide ',& +'met_iodide ','met_mercaptan ','met_propenyl_2s','met_propenyl_2s','PPPP_2s ','PPPP_2s ',& +'2met_nonatriene','met_salicylate ','met_salicylate ','indole ','indole ','jasmone ',& +'jasmone ','met_jasmonate ','met_jasmonate ','3met_3DCTT ','hexanal ','hexanal ',& +'hexanol_1 ','hexenal_c3 ','hexenal_c3 ','hexenal_t2 ','hexenal_t2 ','hexenol_c3 ',& +'hexenol_c3 ','hexenyl_ACT_c3 ','hexenyl_ACT_c3 ','hexenyl_ACT_c3 ','homosalate ','homosalate ',& +'Ehsalate ','Ehsalate ','pentanal ','pentanal ','heptanone ','anisole ',& +'verbenene ','benzyl-acetate ','benzyl-acetate ','benzyl-acetate ','myrtenal ','benzyl-alcohol ',& +'meta-cymenene ','meta-cymenene ','ipsenol ','Napthalene ','Napthalene ','fenchone ',& +'thujone_a ','thujone_b ','butanone_2 ','met_heptenone ','neryl_acetone ','heptanone '/) + +INTEGER, DIMENSION(N_CB6) :: NSPMH_MAP_CB6=(/& + 1, 2, 3, 4, 5, 6, 7, 8, 9, 9, 9, 10, 10, 11, 11, 12,& + 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 23, 24, 25, 25, 26,& + 26, 27, 28, 28, 29, 29, 30, 30, 31, 31, 32, 33, 34, 35, 36, 37,& + 37, 38, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51,& + 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67,& + 68, 69, 70, 70, 71, 71, 72, 73, 74, 75, 77, 78, 79, 80, 81, 82,& + 82, 83, 83, 84, 84, 85, 86, 87, 87, 88, 88, 89, 89, 90, 90, 91,& + 92, 93, 93, 94, 94, 95, 95, 95, 96, 96, 97, 97, 97, 98, 98, 99,& +100,100,101,101,102,103,103,104,104,105,105,106,106,107,108,109,& +109,110,111,113,114,114,117,117,118,119,120,121,122,124,125,125,& +126,126,127,128,128,129,129,130,130,131,131,132,133,133,134,135,& +135,136,136,137,137,138,138,138,139,139,140,140,141,141,142,143,& +144,145,145,145,146,147,148,148,149,150,150, 26, 28, 29, 86, 94,& + 95,142/) + +CHARACTER(LEN=4), DIMENSION(N_CB6) :: CMECH_NAM_CB6=(/& +'ISOP','TERP','TERP','TERP','TERP','TERP','TERP','TERP','PAR ','XYL ','OLE ','PAR ','XYL ','PAR ','XYL ','TERP',& +'TERP','TERP','TERP','TERP','TERP','TERP','TERP','TERP','TERP','TERP','PAR ','NR ','TERP','PAR ','NR ','PAR ',& +'NR ','TERP','PAR ','NR ','PAR ','NR ','PAR ','NR ','PAR ','NR ','TERP','TERP','TERP','TERP','TERP','TERP',& +'NR ','PAR ','NR ','NR ','NR ','NR ','NR ','NR ','NR ','NR ','NR ','NR ','NR ','NR ','NR ','NR ',& +'NR ','NR ','NR ','NR ','NR ','NR ','NR ','NR ','NR ','NR ','NR ','NR ','NR ','NR ','NR ','NR ',& +'NR ','NR ','PAR ','NR ','OLE ','PAR ','MEOH','ACET','CH4 ','NH3 ','NO ','ALD2','ETOH','NR ','FORM','PAR ',& +'NR ','ALDX','PAR ','FORM','PAR ','TOL ','PAR ','ALDX','PAR ','OLE ','PAR ','TERP','NR ','ALDX','PAR ','PAR ',& +'PAR ','TOL ','NR ','PAR ','ALDX','IOLE','PAR ','NR ','ALDX','PAR ','PAR ','IOLE','ALDX','ALDX','PAR ','PAR ',& +'PAR ','OLE ','PAR ','ALDX','PAR ','TOL ','ALDX','FORM','ALDX','TERP','NR ','PAR ','OLE ','TOL ','CO ','OLE ',& +'PAR ','ETHA','ETH ','PRPA','OLE ','PAR ','PAR ','OLE ','PAR ','PAR ','NR ','NR ','NR ','PAR ','PAR ','OLE ',& +'PAR ','OLE ','TERP','TOL ','NR ','TOL ','NR ','TERP','NR ','TERP','NR ','NR ','ALDX','PAR ','PAR ','IOLE',& +'ALDX','IOLE','ALDX','PAR ','IOLE','PAR ','IOLE','NR ','TERP','NR ','TERP','NR ','ALDX','PAR ','PAR ','TOL ',& +'TERP','TOL ','PAR ','NR ','TERP','TOL ','XYL ','PAR ','TERP','XYL ','PAR ','KET ','KET ','KET ','KET ','KET ',& +'KET ','KET '/) + +INTEGER, DIMENSION(N_CB6) :: NMECH_MAP_CB6=(/& + 1, 2, 2, 2, 2, 2, 2, 2, 3, 4, 5, 3, 4, 3, 4, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 3, 6, 2, 3, 6, 3,& + 6, 2, 3, 6, 3, 6, 3, 6, 3, 6, 2, 2, 2, 2, 2, 2, 6, 3, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6,& + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 3, 6, 5, 3, 7,23, 8, 9,10,11,12, 6,13, 3,& + 6,14, 3,13, 3,15, 3,14, 3, 5, 3, 2, 6,14, 3, 3, 3,15, 6, 3,14,16, 3, 6,14, 3, 3,16,14,14, 3, 3,& + 3, 5, 3,14, 3,15,14,13,14, 2, 6, 3, 5,15,17, 5, 3,18,19,21, 5, 3, 3, 5, 3, 3, 6, 6, 6, 3, 3, 5,& + 3, 5, 2,15, 6,15, 6, 2, 6, 2, 6, 6,14, 3, 3,16,14,16,14, 3,16, 3,16, 6, 2, 6, 2, 6,14, 3, 3,15,& + 2,15, 3, 6, 2,15, 4, 3, 2, 4, 3,24,24,24,24,24,24,24/) + +REAL, DIMENSION(N_CB6) :: XCONV_FAC_CB6=(/& + 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 0.5, 2., 1., 2., 1., 1.,& + 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 9., 1., 1., 8., 2., 7.,& + 2., 1., 8., 1., 8., 1., 9., 1., 8., 2., 1., 1., 1., 1., 1., 1.,& + 3., 6., 6., 15., 15., 15., 15., 15., 15., 15., 15., 15., 15., 15., 15., 15.,& + 15., 15., 15., 15., 15., 15., 15., 15., 15., 15., 15., 15., 15., 15., 15., 15.,& + 15., 15., 13., 2., 1., 3., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1.,& + 1., 1., 3., 1., 4., 1., 3., 1., 8., 1., 10., 1., 3., 1., 5., 7.,& + 6., 1., 1., 5., 1., 1., 7., 1., 1., 7., 3., 1., 1., 1., 6., 8.,& + 6., 1., 3., 1., 5., 1., 0.5, 1., 1., 1., 2., 12., 1., 1., 1., 1.,& + 2., 1., 1., 1., 1., 1., 2., 2., 2., 2., 1., 1., 1., 1., 2., 1.,& + 4., 1., 1., 1., 1., 1., 1., 1., 1., 1., 3., 16., 1., 4., 6., 1.,& + 1., 1., 1., 2., 1., 3., 1., 1., 1., 3., 1., 3., 1., 3., 6., 1.,& + 1., 1., 1., 1., 1., 1., 1., 2., 1., 1., 2., 1., 1., 1., 1., 1.,& + 1., 1./) + + +!**************************************************************************************************************** +!**************************************************************************************************************** + +INTEGER, PARAMETER :: N_SAPRCII_SPC = 31 ! Number of mechanism species + +CHARACTER(LEN=8), PARAMETER, DIMENSION(N_SAPRCII_SPC) :: CMECH_SPC_SAPRCII=(/& ! Mechanism species name +'ISOPRENE','TRP1 ','BCARL ','AHUMUL ','SSQT ','MEOH ','ACET ','CH4 ',& +'NO ','NO2 ','NH3 ','CCHO ','HCOOH ','HCHO ','CCO_OH ','BALD ',& +'MEK ','RCO_OH ','CO ','ETHENE ','ALK1 ','ALK2 ','ALK3 ','ALK4 ',& +'ALK5 ','ARO1 ','ARO2 ','OLE1 ','OLE2 ','RCHO ','NONR '/) + +REAL, PARAMETER, DIMENSION(N_SAPRCII_SPC) :: XMECH_MWT_SAPRCII=(/& ! Mechanism species mol. wt. + 68.0,136.0,204.0,204.0,204.0, 32.0, 58.0, 16.0, 30.0,44.01, 17.0, 44.0, 46.0, 30.0, 60.0,106.0,& + 72.0, 74.0, 28.0, 28.0, 30.1, 36.7, 58.6, 77.6,118.9, 98.6,118.7, 72.3, 75.8, 58.0, 1.0/) + + +INTEGER, PARAMETER :: N_SAPRCII = 150 ! Number of map species + +CHARACTER(LEN=17), PARAMETER, DIMENSION(N_SAPRCII) :: CSPMH_NAM_SAPRCII=(/& ! speciated species name +'isoprene ','myrcene ','sabinene ','limonene ','carene_3 ','ocimene_t_b ',& +'pinene_b ','pinene_a ','A_2met_styrene ','cymene_p ','cymene_o ','phellandrene_a ',& +'thujene_a ','terpinene_a ','terpinene_g ','terpinolene ','phellandrene_b ','camphene ',& +'bornene ','fenchene_a ','ocimene_al ','ocimene_c_b ','tricyclene ','estragole ',& +'camphor ','fenchone ','piperitone ','thujone_a ','thujone_b ','cineole_1_8 ',& +'borneol ','linalool ','terpineol_4 ','terpineol_a ','linalool_OXD_c ','linalool_OXD_t ',& +'ionone_b ','bornyl_ACT ','farnescene_a ','caryophyllene_b ','acoradiene ','aromadendrene ',& +'bergamotene_a ','bergamotene_b ','bisabolene_a ','bisabolene_b ','bourbonene_b ','cadinene_d ',& +'cadinene_g ','cedrene_a ','copaene_a ','cubebene_a ','cubebene_b ','elemene_b ',& +'farnescene_b ','germacrene_B ','germacrene_D ','gurjunene_b ','humulene_a ','humulene_g ',& +'isolongifolene ','longifolene ','longipinene ','muurolene_a ','muurolene_g ','selinene_b ',& +'selinene_d ','nerolidol_c ','nerolidol_t ','cedrol ','MBO_2m3e2ol ','methanol ',& +'acetone ','methane ','ammonia ','nitrous_OXD ','nitric_OXD ','acetaldehyde ',& +'ethanol ','formic_acid ','formaldehyde ','acetic_acid ','MBO_3m2e1ol ','MBO_3m3e1ol ',& +'benzaldehyde ','butanone_2 ','decanal ','dodecene_1 ','geranyl_acetone ','heptanal ',& +'heptane ','hexane ','met_benzoate ','met_heptenone ','neryl_acetone ','nonanal ',& +'nonenal ','octanal ','octanol ','octenol_1e3ol ','oxopentanal ','pentane ',& +'phenyl_CCO ','pyruvic_acid ','terpinyl_ACT_a ','tetradecene_1 ','toluene ','carbon_monoxide ',& +'butene ','ethane ','ethene ','hydrogen_cyanide ','propane ','propene ',& +'carbon_2s ','carbonyl_s ','diallyl_2s ','A_2met_2s ','A_2met_s ','met_chloride ',& +'met_bromide ','met_iodide ','hydrogen_s ','met_mercaptan ','met_propenyl_2s ','PPPP_2s ',& +'A_2met_nonatriene','met_salicylate ','indole ','jasmone ','met_jasmonate ','A_3met_3DCTT ',& +'hexanal ','hexanol_1 ','hexenal_c3 ','hexenal_t2 ','hexenol_c3 ','hexenyl_ACT_c3 ',& +'homosalate ','Ehsalate ','pentanal ','heptanone ','anisole ','verbenene ',& +'benzyl-acetate ','myrtenal ','benzyl-alcohol ','meta-cymenene ','ipsenol ','Napthalene '/) + +INTEGER, PARAMETER, DIMENSION(N_SAPRCII) :: NSPMH_MAP_SAPRCII=(/& ! speciated species name + 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16,& + 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32,& + 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48,& + 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64,& + 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80,& + 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96,& + 97, 98, 99,100,101,102,103,104,105,106,107,108,109,110,111,112,& +113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,& +129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,& +145,146,147,148,149,150/) + +CHARACTER(LEN=8), PARAMETER, DIMENSION(N_SAPRCII) :: CMECH_NAM_SAPRCII=(/& ! mechanism species +'ISOPRENE','TRP1g ','TRP1g ','TRP1g ','TRP1g ','TRP1g ','TRP1g ','TRP1g ',& +'OLE2g ','ARO2g ','ARO2g ','TRP1g ','TRP1g ','TRP1g ','TRP1g ','TRP1g ',& +'TRP1g ','TRP1g ','TRP1g ','TRP1g ','TRP1g ','TRP1g ','ALK5g ','TRP1g ',& +'TRP1g ','ALK5g ','TRP1g ','ALK5g ','ALK5g ','ALK5g ','ALK5g ','TRP1g ',& +'TRP1g ','TRP1g ','TRP1g ','TRP1g ','SSQTg ','ALK5g ','AHUMULg ','BCARLg ',& +'SSQTg ','SSQTg ','SSQTg ','SSQTg ','AHUMULg ','SSQTg ','SSQTg ','SSQTg ',& +'SSQTg ','SSQTg ','SSQTg ','SSQTg ','SSQTg ','SSQTg ','AHUMULg ','AHUMULg ',& +'SSQTg ','SSQTg ','AHUMULg ','AHUMULg ','SSQTg ','SSQTg ','SSQTg ','SSQTg ',& +'SSQTg ','SSQTg ','SSQTg ','SSQTg ','SSQTg ','ALK5g ','ISOPRENE','MEOHg ',& +'ACETg ','CH4g ','NH3g ','NONRg ','NOg ','CCHOg ','ALK3g ','HCOOHg ',& +'HCHOg ','CCO_OHg ','ISOPRENE','ISOPRENE','BALDg ','MEKg ','RCHOg ','OLE1g ',& +'SSQTg ','RCHOg ','ALK5g ','ALK4g ','ARO1g ','OLE2g ','OLE2g ','RCHOg ',& +'OLE1g ','RCHOg ','ALK5g ','OLE1g ','RCHOg ','ALK4g ','ARO1g ','RCO_OHg ',& +'TRP1g ','OLE1g ','ARO1g ','COg ','OLE1g ','ALK1g ','ETHENEg ','NONRg ',& +'ALK2g ','OLE1g ','NONRg ','NONRg ','OLE1g ','ALK5g ','ALK4g ','NONRg ',& +'NONRg ','NONRg ','NONRg ','ALK5g ','OLE1g ','OLE1g ','TRP1g ','ARO1g ',& +'ARO2g ','TRP1g ','SSQTg ','AHUMULg ','RCHOg ','ALK5g ','OLE2g ','OLE2g ',& +'OLE2g ','OLE2g ','SSQTg ','SSQTg ','RCHOg ','OLE2g ','BALD ','ARO2g ',& +'BALDg ','TRP1g ','BALDg ','ARO2g ','TRP1g ','ARO2g '/) + +INTEGER, PARAMETER, DIMENSION(N_SAPRCII) :: NMECH_MAP_SAPRCII=(/& ! mechanism species mapped + 1, 2, 2, 2, 2, 2, 2, 2,29,27,27, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,25, 2, 2,25, 2,25,25,25,25, 2,& + 2, 2, 2, 2, 5,25, 4, 3, 5, 5, 5, 5, 4, 5, 5, 5, 5, 5, 5, 5, 5, 5, 4, 4, 5, 5, 4, 4, 5, 5, 5, 5,& + 5, 5, 5, 5, 5,25, 1, 6, 7, 8,11,31, 9,12,23,13,14,15, 1, 1,16,17,30,28, 5,30,25,24,26,29,29,30,& +28,30,25,28,30,24,26,18, 2,28,26,19,28,21,20,31,22,28,31,31,28,25,24,31,31,31,31,25,28,28, 2,26,& +27, 2, 5, 4,30,25,29,29,29,29, 5, 5,30,29,16,27,16, 2,16,27, 2,27/) + + ! to SPC_SAPRCII.EXT +REAL, PARAMETER, DIMENSION(N_SAPRCII) :: XCONV_FAC_SAPRCII=(/& ! conversion factor +1.,1.,1.,1.,1.,1.,1.,1.,1.,1.,1.,1.,1.,1.,1.,1.,1.,1.,1.,1.,1.,1.,1.,1.,1.,1.,1.,1.,1.,1.,1.,1.,& +1.,1.,1.,1.,1.,1.,1.,1.,1.,1.,1.,1.,1.,1.,1.,1.,1.,1.,1.,1.,1.,1.,1.,1.,1.,1.,1.,1.,1.,1.,1.,1.,& +1.,1.,1.,1.,1.,1.,1.,1.,1.,1.,1.,1.,1.,1.,1.,1.,1.,1.,1.,1.,1.,1.,1.,1.,1.,1.,1.,1.,1.,1.,1.,1.,& +1.,1.,1.,1.,1.,1.,1.,1.,1.,1.,1.,1.,1.,1.,1.,1.,1.,1.,1.,1.,1.,1.,1.,1.,1.,1.,1.,1.,1.,1.,1.,1.,& +1.,1.,1.,1.,1.,1.,1.,1.,1.,1.,1.,1.,1.,1.,1.,1.,1.,1.,1.,1.,1.,1./) + +!**************************************************************************************************************** +!**************************************************************************************************************** + +INTEGER, PARAMETER :: N_RADM2_SPC = 21 ! Number of mechanism species + +CHARACTER(LEN=4), PARAMETER, DIMENSION(N_RADM2_SPC) :: CMECH_SPC_RADM2=(/& ! Mechanism species name +'ISO ','CH4 ','ETH ','HC3 ','HC5 ','HC8 ','OL2 ','OLI ','OLT ','ALD ',& +'KET ','TOL ','HCHO','ORA1','ORA2','CO ','SO2 ','NO ','HNO3','NO2 ',& +'NR '/) + +REAL, PARAMETER, DIMENSION(N_RADM2_SPC) :: XMECH_MWT_RADM2=(/& ! Mechanism species mol. wt. + 68., 16., 30., 44., 72., 114., 28., 56., 42., 44., 72., 92., 30., 46., 60., 28.,& + 64., 30., 63., 46., 1./) + +INTEGER,PARAMETER :: N_RADM2 = 177 ! Number of map species + +CHARACTER(LEN=17), PARAMETER, DIMENSION(N_RADM2) :: CSPMH_NAM_RADM2=(/& ! speciated species name +'isoprene ','myrcene ','A_myrcene ','sabinene ','limonene ','A_limonene ',& +'carene_3 ','ocimene_t_b ','ocimene_t_b ','pinene_b ','pinene_a ','A_2met_styrene ',& +'cymene_p ','cymene_o ','phellandrene_a ','thujene_a ','terpinene_a ','terpinene_g ',& +'terpinolene ','phellandrene_b ','phellandrene_b ','camphene ','bornene ','fenchene_a ',& +'ocimene_al ','ocimene_c_b ','ocimene_c_b ','tricyclene ','estragole ','camphor ',& +'fenchone ','piperitone ','thujone_a ','thujone_b ','cineole_1_8 ','borneol ',& +'linalool ','linalool ','terpineol_4 ','terpineol_a ','linalool_OXD_c ','linalool_OXD_t ',& +'ionone_b ','bornyl_ACT ','farnescene_a ','farnescene_a ','caryophyllene_b ','caryophyllene_b ',& +'acoradiene ','acoradiene ','aromadendrene ','bergamotene_a ','bergamotene_b ','bergamotene_b ',& +'bisabolene_a ','bisabolene_b ','bisabolene_b ','bourbonene_b ','cadinene_d ','cadinene_g ',& +'cadinene_g ','cedrene_a ','copaene_a ','cubebene_a ','cubebene_b ','elemene_b ',& +'farnescene_b ','farnescene_b ','germacrene_B ','germacrene_D ','germacrene_D ','gurjunene_b ',& +'humulene_a ','humulene_g ','isolongifolene ','longifolene ','longipinene ','muurolene_a ',& +'muurolene_g ','muurolene_g ','selinene_b ','selinene_d ','nerolidol_c ','nerolidol_c ',& +'nerolidol_t ','nerolidol_t ','cedrol ','MBO_2m3e2ol ','methanol ','acetone ',& +'methane ','ammonia ','nitrous_OXD ','nitric_OXD ','acetaldehyde ','ethanol ',& +'formic_acid ','formaldehyde ','acetic_acid ','MBO_3m2e1ol ','MBO_3m3e1ol ','benzaldehyde ',& +'butanone_2 ','decanal ','dodecene_1 ','geranyl_acetone ','heptanal ','heptane ',& +'hexane ','met_benzoate ','met_heptenone ','neryl_acetone ','nonanal ','nonenal ',& +'nonenal ','octanal ','octanol ','octenol_1e3ol ','oxopentanal ','pentane ',& +'phenyl_CCO ','pyruvic_acid ','terpinyl_ACT_a ','tetradecene_1 ','toluene ','carbon_monoxide ',& +'butene ','ethane ','ethene ','hydrogen_cyanide ','propane ','propene ',& +'carbon_2s ','carbonyl_s ','diallyl_2s ','diallyl_2s ','A_2met_2s ','A_2met_2s ',& +'A_2met_s ','A_2met_s ','met_chloride ','met_bromide ','met_iodide ','hydrogen_s ',& +'met_mercaptan ','met_mercaptan ','met_propenyl_2s ','met_propenyl_2s ','PPPP_2s ','PPPP_2s ',& +'A_2met_nonatriene','A_2met_nonatriene','met_salicylate ','indole ','indole ','jasmone ',& +'met_jasmonate ','A_3met_3DCTT ','A_3met_3DCTT ','hexanal ','hexanol_1 ','hexenal_c3 ',& +'hexenal_t2 ','hexenol_c3 ','hexenyl_ACT_c3 ','homosalate ','Ehsalate ','pentanal ',& +'heptanone ','anisole ','verbenene ','benzyl-acetate ','myrtenal ','benzyl-alcohol ',& +'meta-cymenene ','ipsenol ','Napthalene '/) + +INTEGER, PARAMETER, DIMENSION(N_RADM2) :: NSPMH_MAP_RADM2=(/& ! speciated species name + 1, 2, 2, 3, 4, 4, 5, 6, 6, 7, 8, 9, 10, 11, 12, 13,& + 14, 15, 16, 17, 17, 18, 19, 20, 21, 22, 22, 23, 24, 25, 26, 27,& + 28, 29, 30, 31, 32, 32, 33, 34, 35, 36, 37, 38, 39, 39, 40, 40,& + 41, 41, 42, 43, 44, 44, 45, 46, 46, 47, 48, 49, 49, 50, 51, 52,& + 53, 54, 55, 55, 56, 57, 57, 58, 59, 60, 61, 62, 63, 64, 65, 65,& + 66, 67, 68, 68, 69, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79,& + 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95,& + 96, 97, 97, 98, 99,100,101,102,103,104,105,106,107,108,109,110,& +111,112,113,114,115,116,117,117,118,118,119,119,120,121,122,123,& +124,124,125,125,126,126,127,127,128,129,129,130,131,132,132,133,& +134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,& +150/) + + ! mapped to SPC_SPCAT.EXT +CHARACTER(LEN=4), PARAMETER, DIMENSION(N_RADM2) :: CMECH_NAM_RADM2=(/& ! mechanism species +'ISO ','OLT ','OLI ','OLT ','OLT ','OLI ','OLI ','OLT ','OLI ','OLT ','OLI ','TOL ','TOL ','TOL ','OLI ','OLI ',& +'OLI ','OLI ','OLI ','OLT ','OLI ','OLT ','OLI ','OLT ','OLI ','OLT ','OLI ','NR ','OLT ','HC8 ','NR ','OLT ',& +'NR ','NR ','HC8 ','NR ','OLT ','OLI ','OLI ','OLI ','OLT ','OLT ','OLI ','NR ','OLT ','OLI ','OLT ','OLI ',& +'OLT ','OLI ','OLT ','OLI ','OLT ','OLI ','OLI ','OLT ','OLI ','OLT ','OLI ','OLT ','OLI ','OLI ','OLI ','OLI ',& +'OLT ','OLT ','OLT ','OLI ','OLI ','OLT ','OLI ','OLI ','OLI ','OLI ','OLI ','OLT ','OLI ','OLI ','OLT ','OLI ',& +'OLT ','OLI ','OLT ','OLI ','OLT ','OLI ','NR ','ISO ','HC3 ','KET ','CH4 ','NR ','NO2 ','NO ','ALD ','HC3 ',& +'ORA1','HCHO','ORA2','ISO ','ISO ','NR ','KET ','ALD ','OLT ','OLI ','ALD ','HC5 ','HC5 ','HC8 ','OLI ','OLI ',& +'ALD ','ALD ','HC8 ','ALD ','HC8 ','OLT ','ALD ','HC5 ','NR ','ORA2','OLI ','OLT ','TOL ','CO ','OLT ','ETH ',& +'OL2 ','NR ','HC3 ','OLT ','NR ','NR ','OLI ','SO2 ','ETH ','SO2 ','ETH ','SO2 ','NR ','NR ','NR ','SO2 ',& +'CH4 ','SO2 ','OLI ','SO2 ','OLI ','SO2 ','OLT ','OLI ','HC8 ','HC8 ','HNO3','OLI ','OLI ','OLT ','OLI ','ALD ',& +'HC5 ','OLI ','OLI ','OLT ','OLI ','OLI ','OLI ','ALD ','OLI ','NR ','TOL ','NR ','OLT ','NR ','TOL ','OLT ',& +'HC8 '/) + +INTEGER, PARAMETER, DIMENSION(N_RADM2) :: NMECH_MAP_RADM2=(/& ! mechanism species mapped + 1, 9, 8, 9, 9, 8, 8, 9, 8, 9, 8,12,12,12, 8, 8, 8, 8, 8, 9, 8, 9, 8, 9, 8, 9, 8,21, 9, 6,21, 9,& +21,21, 6,21, 9, 8, 8, 8, 9, 9, 8,21, 9, 8, 9, 8, 9, 8, 9, 8, 9, 8, 8, 9, 8, 9, 8, 9, 8, 8, 8, 8,& + 9, 9, 9, 8, 8, 9, 8, 8, 8, 8, 8, 9, 8, 8, 9, 8, 9, 8, 9, 8, 9, 8,21, 1, 4,11, 2,21,20,18,10, 4,& +14,13,15, 1, 1,21,11,10, 9, 8,10, 5, 5, 6, 8, 8,10,10, 6,10, 6, 9,10, 5,21,15, 8, 9,12,16, 9, 3,& + 7,21, 4, 9,21,21, 8,17, 3,17, 3,17,21,21,21,17, 2,17, 8,17, 8,17, 9, 8, 6, 6,19, 8, 8, 9, 8,10,& + 5, 8, 8, 9, 8, 8, 8,10, 8,21,12,21, 9,21,12, 9, 6/) + + ! to SPC_RADM2.EXT +REAL, PARAMETER, DIMENSION(N_RADM2) :: XCONV_FAC_RADM2=(/& ! conversion factor + 1., 0.5, 0.5, 1., 0.5, 0.5, 1., 0.5, 0.5, 1., 1., 1., 1., 1., 1., 1.,& + 1., 1., 1., 0.5, 0.5, 1., 1., 1., 1., 0.5, 0.5, 1., 1.,0.388, 1., 1.,& + 1., 1.,0.755, 1., 0.5, 0.5, 1., 1., 1., 1., 1., 1., 0.5, 0.5, 0.5, 0.5,& + 0.5, 0.5, 1., 1., 0.5, 0.5, 1., 0.5, 0.5, 1., 1., 0.5, 0.5, 1., 1., 1.,& + 1., 1., 0.5, 0.5, 1., 0.5, 0.5, 1., 1., 1., 1., 1., 1., 1., 0.5, 0.5,& + 1., 1., 0.5, 0.5, 0.5, 0.5, 1., 1.,0.402,0.253, 1., 1., 1., 1., 1.,1.198,& + 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1.,1.226,1.049, 1., 1., 1.,& + 1., 1., 1., 1.,1.119, 1., 1.,0.847, 1., 1., 1., 1., 1., 1., 1., 1.,& + 1., 1.,0.519, 1., 1., 1., 1., 2., 1., 2., 1., 1., 1., 1., 1., 1.,& + 1., 1., 1., 2., 1., 2., 0.5, 0.5, 1.,1.238, 1., 1., 1., 0.5, 0.5, 1.,& +1.697, 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1.,& + 1./) + +!**************************************************************************************************************** +!**************************************************************************************************************** + + INTEGER, PARAMETER :: N_RACM_SPC = 23 ! Number of mechanism species + +CHARACTER(LEN=4), PARAMETER, DIMENSION(N_RACM_SPC) :: CMECH_SPC_RACM=(/& ! Mechanism species name +'ISO ','CH4 ','ETH ','HC3 ','HC5 ','HC8 ','OL2 ','OLI ','OLT ','ALD ','KET ','TOL ','HCHO','ORA1','ORA2','API ',& +'LIM ','CO ','SO2 ','NO ','HNO3','NO2 ','NR '/) + +REAL, PARAMETER, DIMENSION(N_RACM_SPC) :: XMECH_MWT_RACM=(/& ! Mechanism species mol. wt. + 68., 16., 30., 44., 72., 114., 28., 68., 42., 44., 72., 92., 30., 46., 60., 136.,& + 136., 28., 64., 30., 63., 46., 1./) + +INTEGER, PARAMETER :: N_RACM = 159 ! Number of map species + +CHARACTER(LEN=17), PARAMETER, DIMENSION(N_RACM) :: CSPMH_NAM_RACM=(/& ! speciated species name +'isoprene ','myrcene ','sabinene ','limonene ','carene_3 ','ocimene_t_b ',& +'pinene_b ','pinene_a ','A_2met_styrene ','cymene_p ','cymene_o ','phellandrene_a ',& +'thujene_a ','terpinene_a ','terpinene_g ','terpinolene ','phellandrene_b ','camphene ',& +'bornene ','fenchene_a ','ocimene_al ','ocimene_c_b ','tricyclene ','estragole ',& +'camphor ','fenchone ','piperitone ','thujone_a ','thujone_b ','cineole_1_8 ',& +'borneol ','linalool ','terpineol_4 ','terpineol_a ','linalool_OXD_c ','linalool_OXD_t ',& +'ionone_b ','bornyl_ACT ','farnescene_a ','caryophyllene_b ','acoradiene ','aromadendrene ',& +'bergamotene_a ','bergamotene_b ','bisabolene_a ','bisabolene_b ','bourbonene_b ','cadinene_d ',& +'cadinene_g ','cedrene_a ','copaene_a ','cubebene_a ','cubebene_b ','elemene_b ',& +'farnescene_b ','germacrene_B ','germacrene_D ','gurjunene_b ','humulene_a ','humulene_g ',& +'isolongifolene ','longifolene ','longipinene ','muurolene_a ','muurolene_g ','selinene_b ',& +'selinene_d ','nerolidol_c ','nerolidol_t ','cedrol ','MBO_2m3e2ol ','methanol ',& +'acetone ','methane ','ammonia ','nitrous_OXD ','nitric_OXD ','acetaldehyde ',& +'ethanol ','formic_acid ','formaldehyde ','acetic_acid ','MBO_3m2e1ol ','MBO_3m3e1ol ',& +'benzaldehyde ','butanone_2 ','decanal ','dodecene_1 ','geranyl_acetone ','heptanal ',& +'heptane ','hexane ','met_benzoate ','met_heptenone ','neryl_acetone ','nonanal ',& +'nonenal ','nonenal ','octanal ','octanol ','octenol_1e3ol ','oxopentanal ',& +'pentane ','phenyl_CCO ','pyruvic_acid ','terpinyl_ACT_a ','tetradecene_1 ','toluene ',& +'carbon_monoxide ','butene ','ethane ','ethene ','hydrogen_cyanide ','propane ',& +'propene ','carbon_2s ','carbonyl_s ','diallyl_2s ','diallyl_2s ','A_2met_2s ',& +'A_2met_2s ','A_2met_s ','A_2met_s ','met_chloride ','met_bromide ','met_iodide ',& +'hydrogen_s ','met_mercaptan ','met_mercaptan ','met_propenyl_2s ','met_propenyl_2s ','PPPP_2s ',& +'PPPP_2s ','A_2met_nonatriene','met_salicylate ','indole ','indole ','jasmone ',& +'met_jasmonate ','A_3met_3DCTT ','A_3met_3DCTT ','hexanal ','hexanol_1 ','hexenal_c3 ',& +'hexenal_t2 ','hexenol_c3 ','hexenyl_ACT_c3 ','homosalate ','Ehsalate ','pentanal ',& +'heptanone ','anisole ','verbenene ','benzyl-acetate ','myrtenal ','benzyl-alcohol ',& +'meta-cymenene ','ipsenol ','Napthalene '/) + + +INTEGER, PARAMETER, DIMENSION(N_RACM) :: NSPMH_MAP_RACM=(/& ! speciated species name + 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16,& + 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32,& + 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48,& + 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64,& + 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80,& + 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96,& + 97, 97, 98, 99,100,101,102,103,104,105,106,107,108,109,110,111,& +112,113,114,115,116,117,117,118,118,119,119,120,121,122,123,124,& +124,125,125,126,126,127,128,129,129,130,131,132,132,133,134,135,& +136,137,138,139,140,141,142,143,144,145,146,147,148,149,150/) + + ! mapped to SPC_SPCAT.EXT +CHARACTER(LEN=4), PARAMETER, DIMENSION(N_RACM) :: CMECH_NAM_RACM=(/& ! mechanism species +'ISO ','LIM ','API ','LIM ','API ','LIM ','API ','API ','LIM ','LIM ','LIM ','LIM ','API ','LIM ','LIM ','LIM ',& +'LIM ','API ','API ','API ','LIM ','LIM ','NR ','LIM ','HC8 ','NR ','API ','NR ','NR ','HC8 ','NR ','LIM ',& +'API ','API ','LIM ','LIM ','LIM ','NR ','LIM ','LIM ','LIM ','API ','LIM ','LIM ','LIM ','LIM ','API ','LIM ',& +'LIM ','API ','API ','API ','API ','LIM ','LIM ','LIM ','LIM ','API ','LIM ','LIM ','API ','API ','API ','LIM ',& +'LIM ','LIM ','LIM ','LIM ','LIM ','NR ','ISO ','HC3 ','KET ','CH4 ','NR ','NO2 ','NO ','ALD ','HC3 ','ORA1',& +'HCHO','ORA2','ISO ','ISO ','NR ','KET ','ALD ','OLT ','LIM ','ALD ','HC5 ','HC5 ','HC8 ','OLI ','OLI ','ALD ',& +'HC8 ','ALD ','ALD ','HC8 ','OLT ','ALD ','HC5 ','NR ','ORA2','API ','OLT ','TOL ','CO ','OLT ','ETH ','ETE ',& +'NR ','HC3 ','OLT ','NR ','NR ','OLI ','SO2 ','ETH ','SO2 ','ETH ','SO2 ','NR ','NR ','NR ','SO2 ','CH4 ',& +'SO2 ','OLI ','SO2 ','OLI ','SO2 ','LIM ','HC8 ','HC8 ','HNO3','LIM ','LIM ','OLI ','OLT ','ALD ','HC5 ','OLI ',& +'OLI ','OLT ','OLI ','LIM ','LIM ','ALD ','OLI ','NR ','LIM ','NR ','LIM ','NR ','LIM ','LIM ','HC8 '/) + +INTEGER, PARAMETER, DIMENSION(N_RACM) :: NMECH_MAP_RACM=(/& ! mechanism species mapped + 1,17,16,17,16,17,16,16,17,17,17,17,16,17,17,17,17,16,16,16,17,17,23,17, 6,23,16,23,23, 6,23,17,& +16,16,17,17,17,23,17,17,17,16,17,17,17,17,16,17,17,16,16,16,16,17,17,17,17,16,17,17,16,16,16,17,& +17,17,17,17,17,23, 1, 4,11, 2,23,22,20,10, 4,14,13,15, 1, 1,23,11,10, 9,17,10, 5, 5, 6, 8, 8,10,& + 6,10,10, 6, 9,10, 5,23,15,16, 9,12,18, 9, 3, 7,23, 4, 9,23,23, 8,19, 3,19, 3,19,23,23,23,19, 2,& +19, 8,19, 8,19,17, 6, 6,21,17,17, 8, 9,10, 5, 8, 8, 9, 8,17,17,10, 8,23,17,23,17,23,17,17, 6/) + + ! to SPC_RACM.EXT +REAL, PARAMETER, DIMENSION(N_RACM) :: XCONV_FAC_RACM=(/& ! conversion factor + 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1.,& + 1., 1., 1., 1., 1., 1., 1., 1., 0.38, 1., 1., 1., 1.,0.738, 1., 1.,& + 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1.,& + 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1.,& + 1., 1., 1., 1., 1., 1., 1., 0.49, 0.33, 1., 1., 1., 1., 1., 1.37, 1.,& + 1., 1., 1., 1., 1., 1.61, 1., 1., 1., 1.,1.236,1.058, 1., 1., 1., 1.,& + 1., 1., 1.,1.092, 1., 1.,0.854, 1., 1., 1., 1., 1., 1., 1., 1., 1.,& + 1., 0.57, 1., 1., 1., 1., 2., 1., 2., 1., 1., 1., 1., 1., 1., 1.,& + 1., 1., 2., 1., 2., 1., 1.,1.201, 1., 1., 1., 0.5, 0.5, 1., 1.71, 1.,& + 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1./) + + +!**************************************************************************************************************** +!**************************************************************************************************************** + +INTEGER, PARAMETER :: N_CBMZ_SPC = 23 ! Number of mechanism species + +CHARACTER(LEN=5), PARAMETER, DIMENSION(N_CBMZ_SPC) :: CMECH_SPC_CBMZ=(/& ! Mechanism species name +'ISOP ','NO ','NO2 ','CO ','CH3OH','ANOL ','ALD2 ','HCHO ','HCOOH','RCOOH','CH4 ','C2H6 ','PAR ','ETH ','OLET ','OLEI ',& +'CRES ','AONE ','TOL ','XYL ','DMS ','NH3 ','NR '/) + +REAL, PARAMETER, DIMENSION(N_CBMZ_SPC) :: XMECH_MWT_CBMZ=(/& ! Mechanism species mol. wt. + 68.12, 30.01, 44.01, 28.01, 32.04, 46.07, 44.05, 30.03, 46.03, 60.05, 16.04, 30.07, 13.00, 28.05, 27.00, 26.00,& +108.14, 58.08, 92.14,106.17, 62.14, 17.03, 1.00/) + +INTEGER, PARAMETER :: N_CBMZ = 185 ! Number of map species + +CHARACTER(LEN=17), PARAMETER, DIMENSION(N_CBMZ) :: CSPMH_NAM_CBMZ=(/& ! speciated species name +'isoprene ','myrcene ','sabinene ','limonene ','carene_3 ','ocimene_t_b ',& +'pinene_b ','pinene_a ','A_2met_styrene ','cymene_p ','cymene_o ','phellandrene_a ',& +'thujene_a ','terpinene_a ','terpinene_g ','terpinolene ','phellandrene_b ','camphene ',& +'bornene ','fenchene_a ','ocimene_al ','ocimene_c_b ','tricyclene ','estragole ',& +'camphor ','fenchone ','piperitone ','thujone_a ','thujone_b ','cineole_1_8 ',& +'borneol ','linalool ','terpineol_4 ','terpineol_a ','linalool_OXD_c ','linalool_OXD_t ',& +'ionone_b ','bornyl_ACT ','farnescene_a ','caryophyllene_b ','acoradiene ','aromadendrene ',& +'bergamotene_a ','bergamotene_b ','bisabolene_a ','bisabolene_b ','bourbonene_b ','cadinene_d ',& +'cadinene_g ','cedrene_a ','copaene_a ','cubebene_a ','cubebene_b ','elemene_b ',& +'farnescene_b ','germacrene_B ','germacrene_D ','gurjunene_b ','humulene_a ','humulene_g ',& +'isolongifolene ','longifolene ','longipinene ','muurolene_a ','muurolene_g ','selinene_b ',& +'selinene_d ','nerolidol_c ','nerolidol_t ','cedrol ','MBO_2m3e2ol ','MBO_2m3e2ol ',& +'methanol ','acetone ','methane ','ammonia ','nitrous_OXD ','nitric_OXD ',& +'acetaldehyde ','ethanol ','formic_acid ','formaldehyde ','acetic_acid ','MBO_3m2e1ol ',& +'MBO_3m2e1ol ','MBO_3m3e1ol ','MBO_3m3e1ol ','benzaldehyde ','butanone_2 ','butanone_2 ',& +'decanal ','decanal ','dodecene_1 ','dodecene_1 ','geranyl_acetone ','heptanal ',& +'heptanal ','heptane ','hexane ','met_benzoate ','met_heptenone ','met_heptenone ',& +'met_heptenone ','neryl_acetone ','neryl_acetone ','neryl_acetone ','nonanal ','nonanal ',& +'nonenal ','nonenal ','nonenal ','octanal ','octanal ','octanol ',& +'octenol_1e3ol ','octenol_1e3ol ','oxopentanal ','oxopentanal ','pentane ','phenyl_CCO ',& +'phenyl_CCO ','pyruvic_acid ','pyruvic_acid ','terpinyl_ACT_a ','tetradecene_1 ','tetradecene_1 ',& +'toluene ','carbon_monoxide ','butene ','butene ','ethane ','ethene ',& +'hydrogen_cyanide ','propane ','propene ','propene ','carbon_2s ','carbonyl_s ',& +'diallyl_2s ','diallyl_2s ','diallyl_2s ','A_2met_2s ','A_2met_s ','met_chloride ',& +'met_bromide ','met_iodide ','hydrogen_s ','met_mercaptan ','met_propenyl_2s ','met_propenyl_2s ',& +'PPPP_2s ','PPPP_2s ','PPPP_2s ','A_2met_nonatriene','met_salicylate ','indole ',& +'jasmone ','met_jasmonate ','A_3met_3DCTT ','hexanal ','hexanal ','hexanol_1 ',& +'hexenal_c3 ','hexenal_c3 ','hexenal_c3 ','hexenal_t2 ','hexenal_t2 ','hexenal_t2 ',& +'hexenol_c3 ','hexenol_c3 ','hexenyl_ACT_c3 ','hexenyl_ACT_c3 ','hexenyl_ACT_c3 ','homosalate ',& +'Ehsalate ','pentanal ','heptanone ','anisole ','verbenene ','benzyl-acetate ',& +'myrtenal ','benzyl-alcohol ','meta-cymenene ','ipsenol ','Napthalene '/) + +INTEGER, PARAMETER, DIMENSION(N_CBMZ) :: NSPMH_MAP_CBMZ=(/& ! speciated species name + 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16,& + 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32,& + 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48,& + 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64,& + 65, 66, 67, 68, 69, 70, 71, 71, 72, 73, 74, 75, 76, 77, 78, 79,& + 80, 81, 82, 83, 83, 84, 84, 85, 86, 86, 87, 87, 88, 88, 89, 90,& + 90, 91, 92, 93, 94, 94, 94, 95, 95, 95, 96, 96, 97, 97, 97, 98,& + 98, 99,100,100,101,101,102,103,103,104,104,105,106,106,107,108,& +109,109,110,111,112,113,114,114,115,116,117,117,117,118,119,120,& +121,122,123,124,125,125,126,126,126,127,128,129,130,131,132,133,& +133,134,135,135,135,136,136,136,137,137,138,138,138,139,140,141,& +142,143,144,145,146,147,148,149,150/) + + ! mapped to SPC_SPCAT.EXT +CHARACTER(LEN=5), PARAMETER, DIMENSION(N_CBMZ) :: CMECH_NAM_CBMZ=(/& ! mechanism species +'ISOP ','ISOP ','ISOP ','ISOP ','ISOP ','ISOP ','ISOP ','ISOP ','ISOP ','ISOP ','ISOP ','ISOP ','ISOP ','ISOP ','ISOP ','ISOP ',& +'ISOP ','ISOP ','ISOP ','ISOP ','ISOP ','ISOP ','ISOP ','ISOP ','ISOP ','ISOP ','ISOP ','ISOP ','ISOP ','ISOP ','ISOP ','ISOP ',& +'ISOP ','ISOP ','ISOP ','ISOP ','ISOP ','ISOP ','ISOP ','ISOP ','ISOP ','ISOP ','ISOP ','ISOP ','ISOP ','ISOP ','ISOP ','ISOP ',& +'ISOP ','ISOP ','ISOP ','ISOP ','ISOP ','ISOP ','ISOP ','ISOP ','ISOP ','ISOP ','ISOP ','ISOP ','ISOP ','ISOP ','ISOP ','ISOP ',& +'ISOP ','ISOP ','ISOP ','ISOP ','ISOP ','ISOP ','OLET ','PAR ','CH3OH','AONE ','CH4 ','NH3 ','NR ','NO ','ALD2 ','ANOL ',& +'HCOOH','HCHO ','RCOOH','ALD2 ','PAR ','HCHO ','PAR ','TOL ','AONE ','PAR ','ALD2 ','PAR ','OLET ','PAR ','ISOP ','ALD2 ',& +'PAR ','PAR ','PAR ','TOL ','AONE ','PAR ','OLET ','AONE ','PAR ','OLEI ','ALD2 ','PAR ','ALD2 ','PAR ','OLEI ','ALD2 ',& +'PAR ','PAR ','PAR ','OLET ','PAR ','ALD2 ','PAR ','ALD2 ','TOL ','HCOOH','AONE ','ISOP ','PAR ','OLET ','TOL ','CO ',& +'OLET ','PAR ','C2H6 ','ETH ','NR ','PAR ','OLET ','PAR ','NR ','NR ','DMS ','PAR ','OLET ','DMS ','DMS ','NR ',& +'NR ','NR ','NR ','PAR ','DMS ','OLEI ','DMS ','PAR ','OLEI ','ISOP ','TOL ','TOL ','ISOP ','ISOP ','ISOP ','ALD2 ',& +'PAR ','PAR ','ALD2 ','PAR ','OLEI ','ALD2 ','PAR ','OLEI ','PAR ','OLEI ','AONE ','PAR ','OLEI ','ISOP ','ISOP ','ALD2 ',& +'AONE ','TOL ','ISOP ','TOL ','ISOP ','TOL ','ISOP ','ISOP ','TOL '/) + +INTEGER, PARAMETER, DIMENSION(N_CBMZ) :: NMECH_MAP_CBMZ=(/& ! mechanism species mapped + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,& + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,& + 1, 1, 1, 1, 1, 1,15,13, 5,18,11,22,23, 2, 7, 6, 9, 8,10, 7,13, 8,13,19,18,13, 7,13,15,13, 1, 7,& +13,13,13,19,18,13,15,18,13,16, 7,13, 7,13,16, 7,13,13,13,15,13, 7,13, 7,19, 9,18, 1,13,15,19, 4,& +15,13,12,14,23,13,15,13,23,23,21,13,15,21,21,23,23,23,23,13,21,16,21,13,16, 1,19,19, 1, 1, 1, 7,& +13,13, 7,13,16, 7,13,16,13,16,18,13,16, 1, 1, 7,18,19, 1,19, 1,19, 1, 1,19/) + +REAL, PARAMETER, DIMENSION(N_CBMZ) :: XCONV_FAC_CBMZ=(/& ! conversion factor + 1., 2., 2., 2., 2., 2., 2., 2., 2., 2., 2., 2., 2., 2., 2., 2.,& + 2., 2., 2., 2., 2., 2., 2., 2., 2., 2., 2., 2., 2., 2., 2., 2.,& + 2., 2., 2., 2., 3., 2., 3., 3., 3., 3., 3., 3., 3., 3., 3., 3.,& + 3., 3., 3., 3., 3., 3., 3., 3., 3., 3., 3., 3., 3., 3., 3., 3.,& + 3., 3., 3., 3., 3., 3., 1., 3., 1., 1., 1., 1., 1., 1., 1., 1.,& + 1., 1., 1., 1., 3., 1., 4., 1., 1., 1., 1., 8., 1., 10., 3., 1.,& + 5., 7., 6., 1., 1., 3., 1., 1., 8., 2., 1., 7., 1., 6., 1., 1.,& + 6., 8., 6., 1., 3., 1., 5., 1., 1., 1., 1., 2., 12., 1., 1., 1.,& + 1., 2., 1., 1., 1., 3., 1., 1., 1., 1., 1., 2., 2., 1., 1., 1.,& + 1., 1., 1., 1., 1., 1., 1., 2., 1., 2., 1., 1., 2., 3., 3., 1.,& + 4., 6., 1., 3., 1., 1., 6., 1., 5., 1., 1., 3., 1., 1., 1., 1.,& + 1., 1., 1., 1., 1., 1., 1., 1., 1./) + +!**************************************************************************************************************** +!**************************************************************************************************************** + +INTEGER, PARAMETER :: N_SAPRC99_SPC=28 + +CHARACTER(LEN=8), DIMENSION(N_SAPRC99_SPC) :: CMECH_SPC_SAPRC99=(/& ! Mechanism species name +'ISOPRENE','TRP1 ','MEOH ','ACET ','CH4 ','NO ','NO2 ','NH3 ','CCHO ','HCOOH ',& +'HCHO ','CCO_OH ','BALD ','MEK ','RCO_OH ','CO ','ETHENE ','ALK1 ','ALK2 ','ALK3 ',& +'ALK4 ','ALK5 ','ARO1 ','ARO2 ','OLE1 ','OLE2 ','RCHO ','NONR '/) + + +REAL, DIMENSION(N_SAPRC99_SPC) :: XMECH_MWT_SAPRC99=(/& ! Mechanism species molecular weight + 68.0,136.0, 32.0, 58.0, 16.0, 30.0,44.01, 17.0, 44.0, 46.0, 30.0, 60.0,106.0, 72.0, 74.0, 28.0,& + 28.0, 30.1, 36.7, 58.6, 77.6,118.9, 98.6,118.7, 72.3, 75.8, 58.0, 1.0/) + + +INTEGER, PARAMETER :: N_SAPRC99=150 + +CHARACTER(LEN=16), DIMENSION(N_SAPRC99) :: CSPMH_NAM_SAPRC99=(/& ! speciated species name +'isoprene ','myrcene ','sabinene ','limonene ','carene_3 ','ocimene_t_b ',& +'pinene_b ','pinene_a ','2met_styrene ','cymene_p ','cymene_o ','phellandrene_a ',& +'thujene_a ','terpinene_a ','terpinene_g ','terpinolene ','phellandrene_b ','camphene ',& +'bornene ','fenchene_a ','ocimene_al ','ocimene_c_b ','tricyclene ','estragole ',& +'camphor ','fenchone ','piperitone ','thujone_a ','thujone_b ','cineole_1_8 ',& +'borneol ','linalool ','terpineol_4 ','terpineol_a ','linalool_OXD_c ','linalool_OXD_t ',& +'ionone_b ','bornyl_ACT ','farnescene_a ','caryophyllene_b ','acoradiene ','aromadendrene ',& +'bergamotene_a ','bergamotene_b ','bisabolene_a ','bisabolene_b ','bourbonene_b ','cadinene_d ',& +'cadinene_g ','cedrene_a ','copaene_a ','cubebene_a ','cubebene_b ','elemene_b ',& +'farnescene_b ','germacrene_B ','germacrene_D ','gurjunene_b ','humulene_a ','humulene_g ',& +'isolongifolene ','longifolene ','longipinene ','muurolene_a ','muurolene_g ','selinene_b ',& +'selinene_d ','nerolidol_c ','nerolidol_t ','cedrol ','MBO_2m3e2ol ','methanol ',& +'acetone ','methane ','ammonia ','nitrous_OXD ','nitric_OXD ','acetaldehyde ',& +'ethanol ','formic_acid ','formaldehyde ','acetic_acid ','MBO_3m2e1ol ','MBO_3m3e1ol ',& +'benzaldehyde ','butanone_2 ','decanal ','dodecene_1 ','geranyl_acetone ','heptanal ',& +'heptane ','hexane ','met_benzoate ','met_heptenone ','neryl_acetone ','nonanal ',& +'nonenal ','octanal ','octanol ','octenol_1e3ol ','oxopentanal ','pentane ',& +'phenyl_CCO ','pyruvic_acid ','terpinyl_ACT_a ','tetradecene_1 ','toluene ','carbon_monoxide ',& +'butene ','ethane ','ethene ','hydrogen_cyanide','propane ','propene ',& +'carbon_2s ','carbonyl_s ','diallyl_2s ','2met_2s ','2met_s ','met_chloride ',& +'met_bromide ','met_iodide ','hydrogen_s ','met_mercaptan ','met_propenyl_2s ','PPPP_2s ',& +'2met_nonatriene ','met_salicylate ','indole ','jasmone ','met_jasmonate ','3met_3DCTT ',& +'hexanal ','hexanol_1 ','hexenal_c3 ','hexenal_t2 ','hexenol_c3 ','hexenyl_ACT_c3 ',& +'homosalate ','Ehsalate ','pentanal ','heptanone ','anisole ','verbenene ',& +'benzyl-acetate ','myrtenal ','benzyl-alcohol ','meta-cymenene ','ipsenol ','Napthalene '/) + +INTEGER, DIMENSION(N_SAPRC99) :: NSPMH_MAP_SAPRC99=(/& ! speciated species name + 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16,& + 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32,& + 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48,& + 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64,& + 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80,& + 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96,& + 97, 98, 99,100,101,102,103,104,105,106,107,108,109,110,111,112,& +113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,& +129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,& +145,146,147,148,149,150/) + +CHARACTER(LEN=8), DIMENSION(N_SAPRC99) :: CMECH_NAM_SAPRC99=(/& ! mechanism species +'ISOPRENE','TRP1 ','TRP1 ','TRP1 ','TRP1 ','TRP1 ','TRP1 ','TRP1 ','OLE2 ','ARO2 ',& +'ARO2 ','TRP1 ','TRP1 ','TRP1 ','TRP1 ','TRP1 ','TRP1 ','TRP1 ','TRP1 ','TRP1 ',& +'TRP1 ','TRP1 ','ALK5 ','TRP1 ','TRP1 ','ALK5 ','TRP1 ','ALK5 ','ALK5 ','ALK5 ',& +'ALK5 ','TRP1 ','TRP1 ','TRP1 ','TRP1 ','TRP1 ','TRP1 ','ALK5 ','TRP1 ','TRP1 ',& +'TRP1 ','TRP1 ','TRP1 ','TRP1 ','TRP1 ','TRP1 ','TRP1 ','TRP1 ','TRP1 ','TRP1 ',& +'TRP1 ','TRP1 ','TRP1 ','TRP1 ','TRP1 ','TRP1 ','TRP1 ','TRP1 ','TRP1 ','TRP1 ',& +'TRP1 ','TRP1 ','TRP1 ','TRP1 ','TRP1 ','TRP1 ','TRP1 ','TRP1 ','TRP1 ','ALK5 ',& +'ISOPRENE','MEOH ','ACET ','CH4 ','NH3 ','NONR ','NO ','CCHO ','ALK3 ','HCOOH ',& +'HCHO ','CCO_OH ','ISOPRENE','ISOPRENE','BALD ','MEK ','RCHO ','OLE1 ','TRP1 ','RCHO ',& +'ALK5 ','ALK4 ','ARO1 ','OLE2 ','OLE2 ','RCHO ','OLE1 ','RCHO ','ALK5 ','OLE1 ',& +'RCHO ','ALK4 ','ARO1 ','RCO_OH ','TRP1 ','OLE1 ','ARO1 ','CO ','OLE1 ','ALK1 ',& +'ETHENE ','NONR ','ALK2 ','OLE1 ','NONR ','NONR ','OLE1 ','ALK5 ','ALK4 ','NONR ',& +'NONR ','NONR ','NONR ','ALK5 ','OLE1 ','OLE1 ','TRP1 ','ARO1 ','ARO2 ','TRP1 ',& +'TRP1 ','TRP1 ','RCHO ','ALK5 ','OLE2 ','OLE2 ','OLE2 ','OLE2 ','TRP1 ','TRP1 ',& +'RCHO ','OLE2 ','BALD ','ARO2 ','ARO1 ','TRP1 ','ARO1 ','ARO2 ','TRP1 ','ARO2 '/) + +INTEGER, DIMENSION(N_SAPRC99) :: NMECH_MAP_SAPRC99=(/& ! mechanism species mapped + 1, 2, 2, 2, 2, 2, 2, 2,26,24,24, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,22, 2, 2,22, 2,22,22,22,22, 2,& + 2, 2, 2, 2, 2,22, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,& + 2, 2, 2, 2, 2,22, 1, 3, 4, 5, 8,28, 6, 9,20,10,11,12, 1, 1,13,14,27,25, 2,27,22,21,23,26,26,27,& +25,27,22,25,27,21,23,15, 2,25,23,16,25,18,17,28,19,25,28,28,25,22,21,28,28,28,28,22,25,25, 2,23,& +24, 2, 2, 2,27,22,26,26,26,26, 2, 2,27,26,13,24,23, 2,23,24, 2,24/) + +REAL, DIMENSION(N_SAPRC99) :: XCONV_FAC_SAPRC99=(/& ! conversion factor + 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1.,& + 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1.,& + 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1.,& + 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1.,& + 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1./) + + +!**************************************************************************************************************** +!**************************************************************************************************************** + +INTEGER, PARAMETER :: N_SAPRC99_Q_SPC=27 + +CHARACTER(LEN=8), DIMENSION(N_SAPRC99_Q_SPC) :: CMECH_SPC_SAPRC99_Q=(/& ! Mechanism species name +'ISOPRENE','TRP1 ','OLE2 ','ARO2 ','ALK5 ','XC ','OLE1 ','MEOH ','ACET ','CH4 ','NH3 ',& +'NO ','CCHO ','ALK3 ','HCOOH ','HCHO ','CCO_OH ','BALD ','MEK ','RCHO ','ALK4 ','ARO1 ',& +'BACL ','CO ','ALK1 ','ETHENE ','ALK2 '/) + + +REAL, DIMENSION(N_SAPRC99_Q_SPC) :: XMECH_MWT_SAPRC99_Q=(/& ! Mechanism species molecular weight + 68.0,136.0, 75.8,118.7,118.9, 12.0, 72.3, 32.0, 58.0, 16.0, 17.0, 30.0, 44.0, 58.6, 46.0, 30.0,& + 75.0,106.0, 72.0, 58.0, 77.6, 98.6, 86.0, 28.0, 30.1, 92.0, 36.7/) + + +INTEGER, PARAMETER :: N_SAPRC99_Q=145 + +CHARACTER(LEN=15), DIMENSION(N_SAPRC99_Q) :: CSPMH_NAM_SAPRC99_Q=(/& ! speciated species name +'isoprene ','myrcene ','sabinene ','limonene ','carene_3 ','ocimene_t_b ',& +'pinene_b ','pinene_a ','2met_styrene ','cymene_p ','cymene_o ','phellandrene_a ',& +'thujene_a ','terpinene_a ','terpinene_g ','terpinolene ','phellandrene_b ','camphene ',& +'bornene ','fenchene_a ','ocimene_al ','ocimene_c_b ','tricyclene ','estragole ',& +'camphor ','fenchone ','piperitone ','thujone_a ','thujone_b ','cineole_1_8 ',& +'borneol ','linalool ','terpineol_4 ','terpineol_a ','linalool_OXD_c ','linalool_OXD_t ',& +'ionone_b ','bornyl_ACT ','farnescene_a ','caryophyllene_b','acoradiene ','aromadendrene ',& +'bergamotene_a ','bergamotene_b ','bisabolene_a ','bisabolene_b ','bourbonene_b ','cadinene_d ',& +'cadinene_g ','cedrene_a ','copaene_a ','cubebene_a ','cubebene_b ','elemene_b ',& +'farnescene_b ','germacrene_B ','germacrene_D ','gurjunene_b ','humulene_a ','humulene_g ',& +'isolongifolene ','longifolene ','longipinene ','muurolene_a ','muurolene_g ','selinene_b ',& +'selinene_d ','nerolidol_c ','nerolidol_t ','cedrol ','MBO_2m3e2ol ','methanol ',& +'acetone ','methane ','ammonia ','nitric_OXD ','acetaldehyde ','ethanol ',& +'formic_acid ','formaldehyde ','acetic_acid ','MBO_3m2e1ol ','MBO_3m3e1ol ','benzaldehyde ',& +'butanone_2 ','decanal ','dodecene_1 ','geranyl_acetone','heptanal ','heptane ',& +'hexane ','met_benzoate ','met_heptenone ','neryl_acetone ','nonanal ','nonenal ',& +'octanal ','octanol ','octenol_1e3ol ','oxopentanal ','pentane ','phenyl_CCO ',& +'pyruvic_acid ','terpinyl_ACT_a ','tetradecene_1 ','toluene ','carbon_monoxide','butene ',& +'ethane ','ethene ','propane ','propene ','diallyl_2s ','2met_2s ',& +'2met_s ','met_chloride ','met_bromide ','met_iodide ','met_mercaptan ','met_propenyl_2s',& +'PPPP_2s ','2met_nonatriene','met_salicylate ','indole ','jasmone ','met_jasmonate ',& +'3met_3DCTT ','hexanal ','hexanol_1 ','hexenal_c3 ','hexenal_t2 ','hexenol_c3 ',& +'hexenyl_ACT_c3 ','homosalate ','Ehsalate ','pentanal ','heptanone ','anisole ',& +'verbenene ','benzyl-acetate ','myrtenal ','benzyl-alcohol ','meta-cymenene ','ipsenol ',& +'Napthalene '/) + +INTEGER, DIMENSION(N_SAPRC99_Q) :: NSPMH_MAP_SAPRC99_Q=(/& ! speciated species name + 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16,& + 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32,& + 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48,& + 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64,& + 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 77, 78, 79, 80, 81,& + 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97,& + 98, 99,100,101,102,103,104,105,106,107,108,109,110,111,113,114,& +117,118,119,120,121,122,124,125,126,127,128,129,130,131,132,133,& +134,135,136,137,138,134,135,136,137,138,139,140,141,142,143,144,& +145/) + +CHARACTER(LEN=8), DIMENSION(N_SAPRC99_Q) :: CMECH_NAM_SAPRC99_Q=(/& ! mechanism species +'ISOPRENE','TRP1 ','TRP1 ','TRP1 ','TRP1 ','TRP1 ','TRP1 ','TRP1 ','OLE2 ','ARO2 ',& +'ARO2 ','TRP1 ','TRP1 ','TRP1 ','TRP1 ','TRP1 ','TRP1 ','TRP1 ','TRP1 ','TRP1 ',& +'TRP1 ','TRP1 ','ALK5 ','TRP1 ','TRP1 ','ALK5 ','TRP1 ','ALK5 ','ALK5 ','ALK5 ',& +'ALK5 ','TRP1 ','TRP1 ','TRP1 ','TRP1 ','TRP1 ','TRP1 ','ALK5 ','XC ','XC ',& +'XC ','XC ','XC ','XC ','XC ','XC ','XC ','XC ','XC ','XC ',& +'XC ','XC ','XC ','XC ','XC ','XC ','XC ','XC ','XC ','XC ',& +'XC ','XC ','XC ','XC ','XC ','XC ','XC ','XC ','XC ','ALK5 ',& +'OLE1 ','MEOH ','ACET ','CH4 ','NH3 ','NO ','CCHO ','ALK3 ','HCOOH ','HCHO ',& +'CCO_OH ','OLE2 ','OLE1 ','BALD ','MEK ','RCHO ','OLE1 ','TRP1 ','RCHO ','ALK5 ',& +'ALK4 ','ARO1 ','OLE2 ','OLE2 ','RCHO ','OLE1 ','RCHO ','ALK5 ','OLE1 ','RCHO ',& +'ALK4 ','ARO1 ','BACL ','TRP1 ','OLE1 ','ARO1 ','CO ','OLE1 ','ALK1 ','ETHENE ',& +'ALK2 ','OLE1 ','OLE1 ','ALK3 ','ALK4 ','ALK2 ','ALK2 ','ALK2 ','ALK2 ','OLE1 ',& +'OLE1 ','TRP1 ','ARO1 ','ARO2 ','TRP1 ','TRP1 ','XC ','RCHO ','ALK5 ','OLE2 ',& +'OLE2 ','OLE2 ','OLE2 ','TRP1 ','TRP1 ','RCHO ','OLE2 ','BALD ','ARO2 ','ARO1 ',& +'TRP1 ','ARO1 ','ARO2 ','TRP1 ','ARO2 '/) + +INTEGER, DIMENSION(N_SAPRC99_Q) :: NMECH_MAP_SAPRC99_Q=(/& ! mechanism species mapped + 1, 2, 2, 2, 2, 2, 2, 2, 3, 4, 4, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 5, 2, 2, 5, 2, 5, 5, 5, 5, 2,& + 2, 2, 2, 2, 2, 5, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6,& + 6, 6, 6, 6, 6, 5, 7, 8, 9,10,11,12,13,14,15,16,17, 3, 7,18,19,20, 7, 2,20, 5,21,22, 3, 3,20, 7,& +20, 5, 7,20,21,22,23, 2, 7,22,24, 7,25,26,27, 7, 7,14,21,27,27,27,27, 7, 7, 2,22, 4, 2, 2, 6,20,& + 5, 3, 3, 3, 3, 2, 2,27,26,13,24,23, 2,23,24, 2,24/) + +REAL, DIMENSION(N_SAPRC99_Q) :: XCONV_FAC_SAPRC99_Q=(/& ! conversion factor + 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1.,& + 1., 1., 1., 1., 1., 1.,15.,15.,15.,15.,15.,15.,15.,15.,15.,15.,15.,15.,15.,15.,15.,15.,15.,15.,15.,15.,15.,15.,15.,15.,15.,15.,& +15.,15.,15.,15.,15., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1.,& + 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1.,16., 1.,& + 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1./) + +!**************************************************************************************************************** +!**************************************************************************************************************** + +INTEGER, PARAMETER :: N_SAPRC99_X_SPC=27 + +CHARACTER(LEN=4), DIMENSION(N_SAPRC99_X_SPC) :: CMECH_SPC_SAPRC99_X=(/& ! Mechanism species name +'ISOP','TERP','OLE2','ARO2','ALK5','XC ','OLE1','MEOH','ACET','CH4 ','NH3 ','NO ','CCHO','ALK3','HC2H','HCHO',& +'CO2H','BALD','MEK ','RCHO','ALK4','ARO1','BACL','CO ','ALK1','ETHE','ALK2'/) + + +REAL, DIMENSION(N_SAPRC99_X_SPC) :: XMECH_MWT_SAPRC99_X=(/& ! Mechanism species molecular weight + 68.0,136.0, 75.8,118.7,118.9, 12.0, 72.3, 32.0, 58.0, 16.0, 17.0, 30.0, 44.0, 58.6, 46.0, 30.0,& + 75.0,106.0, 72.0, 58.0, 77.6, 98.6, 86.0, 28.0, 30.1, 92.0, 36.7/) + + +INTEGER, PARAMETER :: N_SAPRC99_X=145 + +CHARACTER(LEN=15), DIMENSION(N_SAPRC99_X) :: CSPMH_NAM_SAPRC99_X=(/& ! speciated species name +'isoprene ','myrcene ','sabinene ','limonene ','carene_3 ','ocimene_t_b ',& +'pinene_b ','pinene_a ','2met_styrene ','cymene_p ','cymene_o ','phellandrene_a ',& +'thujene_a ','terpinene_a ','terpinene_g ','terpinolene ','phellandrene_b ','camphene ',& +'bornene ','fenchene_a ','ocimene_al ','ocimene_c_b ','tricyclene ','estragole ',& +'camphor ','fenchone ','piperitone ','thujone_a ','thujone_b ','cineole_1_8 ',& +'borneol ','linalool ','terpineol_4 ','terpineol_a ','linalool_OXD_c ','linalool_OXD_t ',& +'ionone_b ','bornyl_ACT ','farnescene_a ','caryophyllene_b','acoradiene ','aromadendrene ',& +'bergamotene_a ','bergamotene_b ','bisabolene_a ','bisabolene_b ','bourbonene_b ','cadinene_d ',& +'cadinene_g ','cedrene_a ','copaene_a ','cubebene_a ','cubebene_b ','elemene_b ',& +'farnescene_b ','germacrene_B ','germacrene_D ','gurjunene_b ','humulene_a ','humulene_g ',& +'isolongifolene ','longifolene ','longipinene ','muurolene_a ','muurolene_g ','selinene_b ',& +'selinene_d ','nerolidol_c ','nerolidol_t ','cedrol ','MBO_2m3e2ol ','methanol ',& +'acetone ','methane ','ammonia ','nitric_OXD ','acetaldehyde ','ethanol ',& +'formic_acid ','formaldehyde ','acetic_acid ','MBO_3m2e1ol ','MBO_3m3e1ol ','benzaldehyde ',& +'butanone_2 ','decanal ','dodecene_1 ','geranyl_acetone','heptanal ','heptane ',& +'hexane ','met_benzoate ','met_heptenone ','neryl_acetone ','nonanal ','nonenal ',& +'octanal ','octanol ','octenol_1e3ol ','oxopentanal ','pentane ','phenyl_CCO ',& +'pyruvic_acid ','terpinyl_ACT_a ','tetradecene_1 ','toluene ','carbon_monoxide','butene ',& +'ethane ','ethene ','propane ','propene ','diallyl_2s ','2met_2s ',& +'2met_s ','met_chloride ','met_bromide ','met_iodide ','met_mercaptan ','met_propenyl_2s',& +'PPPP_2s ','2met_nonatriene','met_salicylate ','indole ','jasmone ','met_jasmonate ',& +'3met_3DCTT ','hexanal ','hexanol_1 ','hexenal_c3 ','hexenal_t2 ','hexenol_c3 ',& +'hexenyl_ACT_c3 ','homosalate ','Ehsalate ','pentanal ','heptanone ','anisole ',& +'verbenene ','benzyl-acetate ','myrtenal ','benzyl-alcohol ','meta-cymenene ','ipsenol ',& +'Napthalene '/) + + +INTEGER, DIMENSION(N_SAPRC99_X) :: NSPMH_MAP_SAPRC99_X=(/& ! speciated species name + 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16,& + 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32,& + 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48,& + 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64,& + 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 77, 78, 79, 80, 81,& + 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97,& + 98, 99,100,101,102,103,104,105,106,107,108,109,110,111,113,114,& +117,118,119,120,121,122,124,125,126,127,128,129,130,131,132,133,& +134,135,136,137,138,134,135,136,137,138,139,140,141,142,143,144,& +145/) + + +CHARACTER(LEN=4), DIMENSION(N_SAPRC99_X) :: CMECH_NAM_SAPRC99_X=(/& ! mechanism species +'ISOP','TERP','TERP','TERP','TERP','TERP','TERP','TERP','OLE2','ARO2','ARO2','TERP','TERP','TERP','TERP','TERP',& +'TERP','TERP','TERP','TERP','TERP','TERP','ALK5','TERP','TERP','ALK5','TERP','ALK5','ALK5','ALK5','ALK5','TERP',& +'TERP','TERP','TERP','TERP','TERP','ALK5','XC ','XC ','XC ','XC ','XC ','XC ','XC ','XC ','XC ','XC ',& +'XC ','XC ','XC ','XC ','XC ','XC ','XC ','XC ','XC ','XC ','XC ','XC ','XC ','XC ','XC ','XC ',& +'XC ','XC ','XC ','XC ','XC ','ALK5','OLE1','MEOH','ACET','CH4 ','NH3 ','NO ','CCHO','ALK3','HC2H','HCHO',& +'CO2H','OLE2','OLE1','BALD','MEK ','RCHO','OLE1','TERP','RCHO','ALK5','ALK4','ARO1','OLE2','OLE2','RCHO','OLE1',& +'RCHO','ALK5','OLE1','RCHO','ALK4','ARO1','BACL','TERP','OLE1','ARO1','CO ','OLE1','ALK1','ETHE','ALK2','OLE1',& +'OLE1','ALK3','ALK4','ALK2','ALK2','ALK2','ALK2','OLE1','OLE1','TERP','ARO1','ARO2','TERP','TERP','XC ','RCHO',& +'ALK5','OLE2','OLE2','OLE2','OLE2','TERP','TERP','RCHO','OLE2','BALD','ARO2','ARO1','TERP','ARO1','ARO2','TERP',& +'ARO2'/) + +INTEGER, DIMENSION(N_SAPRC99_X) :: NMECH_MAP_SAPRC99_X=(/& ! mechanism species mapped + 1, 2, 2, 2, 2, 2, 2, 2, 3, 4, 4, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 5, 2, 2, 5, 2, 5, 5, 5, 5, 2,& + 2, 2, 2, 2, 2, 5, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6,& + 6, 6, 6, 6, 6, 5, 7, 8, 9,10,11,12,13,14,15,16,17, 3, 7,18,19,20, 7, 2,20, 5,21,22, 3, 3,20, 7,& +20, 5, 7,20,21,22,23, 2, 7,22,24, 7,25,26,27, 7, 7,14,21,27,27,27,27, 7, 7, 2,22, 4, 2, 2, 6,20,& + 5, 3, 3, 3, 3, 2, 2,27,26,13,24,23, 2,23,24, 2,24/) + +REAL, DIMENSION(N_SAPRC99_X) :: XCONV_FAC_SAPRC99_X=(/& ! conversion factor + 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1.,& + 1., 1., 1., 1., 1., 1.,15.,15.,15.,15.,15.,15.,15.,15.,15.,15.,15.,15.,15.,15.,15.,15.,15.,15.,15.,15.,15.,15.,15.,15.,15.,15.,& +15.,15.,15.,15.,15., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1.,& + 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1.,16., 1.,& + 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1./) + +!**************************************************************************************************************** +!**************************************************************************************************************** + +INTEGER, PARAMETER :: N_SOAX_SPC=8 + +CHARACTER(LEN=4), DIMENSION(N_SOAX_SPC) :: CMECH_SPC_SOAX=(/& ! Mechanism species name +'ISP ','TRP ','XYLA','CG5 ','SQT ','TOLA','CG6 ','CG4 '/) + +REAL, DIMENSION(N_SOAX_SPC) :: XMECH_MWT_SOAX=(/& ! Mechanism species molecular weight + 68.,136.,106.,180.,204., 92., 80.,130./) + + +INTEGER, PARAMETER :: N_SOAX=110 + +CHARACTER(LEN=15), DIMENSION(N_SOAX) :: CSPMH_NAM_SOAX=(/& ! speciated species name +'isoprene ','myrcene ','sabinene ','limonene ','carene_3 ','ocimene_t_b ',& +'pinene_b ','pinene_a ','2met_styrene ','cymene_p ','cymene_o ','phellandrene_a ',& +'thujene_a ','terpinene_a ','terpinene_g ','terpinolene ','phellandrene_b ','camphene ',& +'bornene ','fenchene_a ','ocimene_al ','ocimene_c_b ','estragole ','camphor ',& +'fenchone ','piperitone ','thujone_a ','thujone_b ','cineole_1_8 ','borneol ',& +'linalool ','terpineol_4 ','terpineol_a ','linalool_OXD_c ','linalool_OXD_t ','ionone_b ',& +'bornyl_ACT ','farnescene_a ','caryophyllene_b','acoradiene ','aromadendrene ','bergamotene_a ',& +'bergamotene_b ','bisabolene_a ','bisabolene_b ','bourbonene_b ','cadinene_d ','cadinene_g ',& +'cedrene_a ','copaene_a ','cubebene_a ','cubebene_b ','elemene_b ','farnescene_b ',& +'germacrene_B ','germacrene_D ','gurjunene_b ','humulene_a ','humulene_g ','isolongifolene ',& +'longifolene ','longipinene ','muurolene_a ','muurolene_g ','selinene_b ','selinene_d ',& +'nerolidol_c ','nerolidol_t ','cedrol ','benzaldehyde ','decanal ','geranyl_acetone',& +'heptanal ','met_benzoate ','met_heptenone ','neryl_acetone ','nonanal ','nonenal ',& +'octanal ','octanol ','octenol_1e3ol ','oxopentanal ','phenyl_CCO ','pyruvic_acid ',& +'terpinyl_ACT_a ','toluene ','2met_nonatriene','met_salicylate ','indole ','jasmone ',& +'met_jasmonate ','3met_3DCTT ','hexanal ','hexanol_1 ','hexenal_c3 ','hexenal_t2 ',& +'hexenol_c3 ','hexenyl_ACT_c3 ','homosalate ','Ehsalate ','pentanal ','heptanone ',& +'anisole ','verbenene ','benzyl-acetate ','myrtenal ','benzyl-alcohol ','meta-cymenene ',& +'ipsenol ','Napthalene '/) + +INTEGER, DIMENSION(N_SOAX) :: NSPMH_MAP_SOAX=(/& ! speciated species name + 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16,& + 17, 18, 19, 20, 21, 22, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33,& + 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49,& + 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65,& + 66, 67, 68, 69, 70, 85, 87, 89, 90, 93, 94, 95, 96, 97, 98, 99,& +100,101,103,104,105,107,127,128,129,130,131,132,133,134,135,136,& +137,138,139,140,141,142,143,144,145,146,147,148,149,150/) + +CHARACTER(LEN=16), DIMENSION(N_SOAX) :: CMECH_NAM_SOAX=(/& ! mechanism species +'ISP ','TRP ','TRP ','TRP ','TRP ','TRP ','TRP ','TRP ','XYLA','XYLA','XYLA','TRP ','TRP ','TRP ','TRP ','TRP ',& +'TRP ','TRP ','TRP ','TRP ','TRP ','TRP ','TRP ','CG5 ','CG5 ','TRP ','CG5 ','CG5 ','CG5 ','CG5 ','TRP ','TRP ',& +'TRP ','TRP ','TRP ','TRP ','CG5 ','SQT ','SQT ','SQT ','SQT ','SQT ','SQT ','SQT ','SQT ','SQT ','SQT ','SQT ',& +'SQT ','SQT ','SQT ','SQT ','SQT ','SQT ','SQT ','SQT ','SQT ','SQT ','SQT ','SQT ','SQT ','SQT ','SQT ','SQT ',& +'SQT ','SQT ','SQT ','SQT ','CG5 ','TOLA','CG5 ','TRP ','CG6 ','TOLA','CG6 ','CG5 ','CG6 ','CG6 ','CG6 ','CG6 ',& +'CG6 ','CG4 ','TOLA','CG4 ','TRP ','TOLA','TRP ','TOLA','TOLA','TRP ','TRP ','SQT ','CG4 ','CG4 ','CG4 ','CG4 ',& +'CG4 ','CG6 ','SQT ','SQT ','CG4 ','CG6 ','TOLA','TRP ','TOLA','TRP ','TOLA','XYLA','TRP ','XYLA'/) + +INTEGER, DIMENSION(N_SOAX) :: NMECH_MAP_SOAX=(/& ! mechanism species mapped + 1, 2, 2, 2, 2, 2, 2, 2, 3, 3, 3, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 4, 4, 2, 4, 4, 4, 4, 2, 2,& + 2, 2, 2, 2, 4, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,& + 5, 5, 5, 5, 4, 6, 4, 2, 7, 6, 7, 4, 7, 7, 7, 7, 7, 8, 6, 8, 2, 6, 2, 6, 6, 2, 2, 5, 8, 8, 8, 8,& + 8, 7, 5, 5, 8, 7, 6, 2, 6, 2, 6, 3, 2, 3/) + +REAL, DIMENSION(N_SOAX) :: XCONV_FAC_SOAX=(/& ! conversion factor + 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0,& + 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0,0.85,0.85, 1.0,0.85,0.85,0.86,0.86, 1.0, 1.0,& + 1.0, 1.0, 1.0, 1.0,1.09, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0,& + 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0,& + 1.0, 1.0, 1.0, 1.0,1.24, 1.0,0.87, 1.0,0.63, 1.0,0.70,1.08,0.79,0.78,0.71,0.72,& +0.71,0.77, 1.0,0.68, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0,0.77,0.79,0.76,0.76,& +0.77,0.79, 1.0, 1.0,0.77,0.70, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0/) + +!**************************************************************************************************************** +!**************************************************************************************************************** + +INTEGER,PARAMETER :: N_SPCA_SPC = 150 ! Number of speciated species + +CHARACTER(LEN=17), DIMENSION(N_SPCA_SPC) :: CSPCA_SPC=(/& ! speciated species name +'isoprene ','myrcene ','sabinene ','limonene ','carene_3 ','ocimene_t_b ',& +'pinene_b ','pinene_a ','A_2met_styrene ','cymene_p ','cymene_o ','phellandrene_a ',& +'thujene_a ','terpinene_a ','terpinene_g ','terpinolene ','phellandrene_b ','camphene ',& +'bornene ','fenchene_a ','ocimene_al ','ocimene_c_b ','tricyclene ','estragole ',& +'camphor ','fenchone ','piperitone ','thujone_a ','thujone_b ','cineole_1_8 ',& +'borneol ','linalool ','terpineol_4 ','terpineol_a ','linalool_OXD_c ','linalool_OXD_t ',& +'ionone_b ','bornyl_ACT ','farnescene_a ','caryophyllene_b ','acoradiene ','aromadendrene ',& +'bergamotene_a ','bergamotene_b ','bisabolene_a ','bisabolene_b ','bourbonene_b ','cadinene_d ',& +'cadinene_g ','cedrene_a ','copaene_a ','cubebene_a ','cubebene_b ','elemene_b ',& +'farnescene_b ','germacrene_B ','germacrene_D ','gurjunene_b ','humulene_a ','humulene_g ',& +'isolongifolene ','longifolene ','longipinene ','muurolene_a ','muurolene_g ','selinene_b ',& +'selinene_d ','nerolidol_c ','nerolidol_t ','cedrol ','MBO_2m3e2ol ','methanol ',& +'acetone ','methane ','ammonia ','nitrous_OXD ','nitric_OXD ','acetaldehyde ',& +'ethanol ','formic_acid ','formaldehyde ','acetic_acid ','MBO_3m2e1ol ','MBO_3m3e1ol ',& +'benzaldehyde ','butanone_2 ','decanal ','dodecene_1 ','geranyl_acetone ','heptanal ',& +'heptane ','hexane ','met_benzoate ','met_heptenone ','neryl_acetone ','nonanal ',& +'nonenal ','octanal ','octanol ','octenol_1e3ol ','oxopentanal ','pentane ',& +'phenyl_CCO ','pyruvic_acid ','terpinyl_ACT_a ','tetradecene_1 ','toluene ','carbon_monoxide ',& +'butene ','ethane ','ethene ','hydrogen_cyanide ','propane ','propene ',& +'carbon_2s ','carbonyl_s ','diallyl_2s ','A_2met_2s ','A_2met_s ','met_chloride ',& +'met_bromide ','met_iodide ','hydrogen_s ','met_mercaptan ','met_propenyl_2s ','PPPP_2s ',& +'A_2met_nonatriene','met_salicylate ','indole ','jasmone ','met_jasmonate ','A_3met_3DCTT ',& +'hexanal ','hexanol_1 ','hexenal_c3 ','hexenal_t2 ','hexenol_c3 ','hexenyl_ACT_c3 ',& +'homosalate ','Ehsalate ','pentanal ','heptanone ','anisole ','verbenene ',& +'benzyl-acetate ','myrtenal ','benzyl-alcohol ','meta-cymenene ','ipsenol ','Napthalene '/) + +REAL, DIMENSION(N_SPCA_SPC) :: XSPCA_MWT=(/& ! Mechanism species molecular weight + 68.12,136.23,136.23,136.23,136.23,136.23,136.23,136.23,132.20,134.22,134.22,136.23,136.23,136.23,136.23,136.23,& +136.23,136.23,136.23,136.23,136.23,136.23,136.23,148.20,152.23,152.23,152.23,152.23,152.23,154.25,154.25,154.25,& +154.25,154.25,170.25,170.25,192.30,196.29,204.35,204.35,204.35,204.35,204.35,204.35,204.35,204.35,204.35,204.35,& +204.35,204.35,204.35,204.35,204.35,204.35,204.35,204.35,204.35,204.35,204.35,204.35,204.35,204.35,204.35,204.35,& +204.35,204.35,204.35,222.37,222.37,222.37, 86.13, 32.04, 58.08, 16.04, 17.03, 44.01, 30.01, 44.05, 46.07, 46.03,& + 30.03, 60.05, 86.13, 86.13,106.12, 72.11,156.27,168.32,194.31,114.19,100.20, 86.18,136.15,126.20,194.31,142.24,& +140.22,128.21,130.23,128.21,100.12, 72.15,120.15, 88.06,196.29,196.37, 92.14, 28.01, 56.11, 30.07, 28.05, 27.03,& + 44.10, 42.08, 76.14, 60.08,146.28, 94.20, 62.14, 50.49, 94.94,141.94, 34.08, 48.11,120.24,148.29,150.26,152.15,& +117.15,164.24,224.30,218.38,100.16,102.17, 98.14, 98.14,100.16,142.20, 131., 131., 133., 94., 85., 10.,& + 85., 32., 85., 10., 32., 129./) + +!**************************************************************************************************************** +!**************************************************************************************************************** + +INTEGER,PARAMETER :: N_SMAP_SPC = 150 ! Number of map species + +CHARACTER(LEN=17), DIMENSION(N_SMAP_SPC) :: CSPCA_NAM=(/& ! speciated species name +'isoprene ','myrcene ','sabinene ','limonene ','carene_3 ','ocimene_t_b ',& +'pinene_b ','pinene_a ','A_2met_styrene ','cymene_p ','cymene_o ','phellandrene_a ',& +'thujene_a ','terpinene_a ','terpinene_g ','terpinolene ','phellandrene_b ','camphene ',& +'bornene ','fenchene_a ','ocimene_al ','ocimene_c_b ','tricyclene ','estragole ',& +'camphor ','fenchone ','piperitone ','thujone_a ','thujone_b ','cineole_1_8 ',& +'borneol ','linalool ','terpineol_4 ','terpineol_a ','linalool_OXD_c ','linalool_OXD_t ',& +'ionone_b ','bornyl_ACT ','farnescene_a ','caryophyllene_b ','acoradiene ','aromadendrene ',& +'bergamotene_a ','bergamotene_b ','bisabolene_a ','bisabolene_b ','bourbonene_b ','cadinene_d ',& +'cadinene_g ','cedrene_a ','copaene_a ','cubebene_a ','cubebene_b ','elemene_b ',& +'farnescene_b ','germacrene_B ','germacrene_D ','gurjunene_b ','humulene_a ','humulene_g ',& +'isolongifolene ','longifolene ','longipinene ','muurolene_a ','muurolene_g ','selinene_b ',& +'selinene_d ','nerolidol_c ','nerolidol_t ','cedrol ','MBO_2m3e2ol ','methanol ',& +'acetone ','methane ','ammonia ','nitrous_OXD ','nitric_OXD ','acetaldehyde ',& +'ethanol ','formic_acid ','formaldehyde ','acetic_acid ','MBO_3m2e1ol ','MBO_3m3e1ol ',& +'benzaldehyde ','butanone_2 ','decanal ','dodecene_1 ','geranyl_acetone ','heptanal ',& +'heptane ','hexane ','met_benzoate ','met_heptenone ','neryl_acetone ','nonanal ',& +'nonenal ','octanal ','octanol ','octenol_1e3ol ','oxopentanal ','pentane ',& +'phenyl_CCO ','pyruvic_acid ','terpinyl_ACT_a ','tetradecene_1 ','toluene ','carbon_monoxide ',& +'butene ','ethane ','ethene ','hydrogen_cyanide ','propane ','propene ',& +'carbon_2s ','carbonyl_s ','diallyl_2s ','A_2met_2s ','A_2met_s ','met_chloride ',& +'met_bromide ','met_iodide ','hydrogen_s ','met_mercaptan ','met_propenyl_2s ','PPPP_2s ',& +'A_2met_nonatriene','met_salicylate ','indole ','jasmone ','met_jasmonate ','3met_3DCTT ',& +'hexanal ','hexanol_1 ','hexenal_c3 ','hexenal_t2 ','hexenol_c3 ','hexenyl_ACT_c3 ',& +'homosalate ','Ehsalate ','pentanal ','heptanone ','anisole ','verbenene ',& +'benzyl-acetate ','myrtenal ','benzyl-alcohol ','meta-cymenene ','ipsenol ','Napthalene '/) + +INTEGER, DIMENSION(N_SMAP_SPC) :: NSPCA_MAP=(/& ! speciated species name + 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16,& + 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32,& + 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48,& + 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64,& + 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80,& + 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96,& + 97, 98, 99,100,101,102,103,104,105,106,107,108,109,110,111,112,& +113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,& +129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,& +145,146,147,148,149,150/) + +CHARACTER(LEN=6), DIMENSION(N_SMAP_SPC) :: CMG20_NAM=(/& ! MEGAN species +'ISOP ','MYRC ','SABI ','LIMO ','3CAR ','OCIM ','BPIN ','APIN ','OMTP ','OMTP ',& +'OMTP ','OMTP ','OMTP ','OMTP ','OMTP ','OMTP ','OMTP ','OMTP ','OMTP ','OMTP ',& +'OMTP ','OMTP ','OMTP ','OMTP ','OMTP ','OMTP ','OMTP ','OMTP ','OMTP ','OMTP ',& +'OMTP ','OMTP ','OMTP ','OMTP ','OMTP ','OMTP ','OMTP ','OMTP ','FARN ','BCAR ',& +'OSQT ','OSQT ','OSQT ','OSQT ','OSQT ','OSQT ','OSQT ','OSQT ','OSQT ','OSQT ',& +'OSQT ','OSQT ','OSQT ','OSQT ','OSQT ','OSQT ','OSQT ','OSQT ','OSQT ','OSQT ',& +'OSQT ','OSQT ','OSQT ','OSQT ','OSQT ','OSQT ','OSQT ','OSQT ','OSQT ','OSQT ',& +'MBO ','MEOH ','ACTO ','OTHER ','NO ','NO ','NO ','BIDIR ','BIDIR ','BIDIR ',& +'BIDIR ','BIDIR ','OTHER ','OTHER ','OTHER ','OTHER ','OTHER ','OTHER ','OTHER ','OTHER ',& +'OTHER ','OTHER ','OTHER ','OTHER ','OTHER ','OTHER ','OTHER ','OTHER ','OTHER ','OTHER ',& +'OTHER ','OTHER ','OTHER ','OTHER ','OTHER ','OTHER ','STRESS','CO ','OTHER ','OTHER ',& +'STRESS','STRESS','OTHER ','OTHER ','OTHER ','OTHER ','OTHER ','OTHER ','OTHER ','OTHER ',& +'OTHER ','OTHER ','OTHER ','OTHER ','OTHER ','OTHER ','STRESS','STRESS','STRESS','STRESS',& +'STRESS','STRESS','STRESS','STRESS','STRESS','STRESS','STRESS','STRESS','OTHER ','OTHER ',& +'OTHER ','OTHER ','OTHER ','OMTP ','OTHER ','OMTP ','OTHER ','OMTP ','OMTP ','OTHER '/) + +INTEGER, DIMENSION(N_SMAP_SPC) :: NMG20_MAP=(/& ! MEGAN species mapped to + 1, 2, 3, 4, 5, 6, 7, 8, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,& + 9, 9, 9, 9, 9, 9,10,11,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,& +12,12,12,12,12,12,13,14,15,20,17,17,17,18,18,18,18,18,20,20,20,20,20,20,20,20,20,20,20,20,20,20,& +20,20,20,20,20,20,20,20,20,20,19,16,20,20,20,20,20,20,20,20,20,20,20,20,20,20,20,20,20,20,20,20,& +19,19,19,19,19,19,19,19,19,19,20,20,20,20,20, 9,20, 9,20, 9, 9,20/) + +END MODULE MODD_MGN2MECH diff --git a/src/LIB/MEGAN/mode_gamma_etc.F90 b/src/LIB/MEGAN/mode_gamma_etc.F90 new file mode 100644 index 000000000..098c29df7 --- /dev/null +++ b/src/LIB/MEGAN/mode_gamma_etc.F90 @@ -0,0 +1,553 @@ +!======================================================================= +! MODULE GAMMA +! +! THIS MODULE CONTAIN FUNCTIONS TO CALCULATE +! GAMMA_P, GAMMA_T, GAMMA_L, GAMMA_A FOR BVOCS. +! +! CONTAINS: 1)GAMMA_LAI +! 2)GAMMA_P +! 3)GAMMA_TLD +! 4)GAMMA_TLI +! 5)GAMMA_A +! 6)GAMMA_S +! 7)GAMMA_CO2 +! 8)GAMMA_LAIBIDIR +! +! NOTE: +! +! REQUIREMENT: +! +! CALLS: SOLARANGLE +! +! CREATED BY TAN 11/21/06 FOR MEGAN V2.0 +! +! HISTORY: +! 08/01/07 GUENTHER A. - MOVE TO MEGANV2.02 WITH MODIFICATION TO +! CORRECT CALCULATION OF GAMMA_P +! +!======================================================================= + +MODULE MODE_GAMMA_ETC +! +USE MODD_MEGAN +! +!USE MODI_SOLARANGLE +USE MODI_INDEX1 +! +IMPLICIT NONE + +!... PROGRAM I/O PARAMETERS + +!... EXTERNAL PARAMETERS + +CONTAINS +!*********************************************************************** + +!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! +! +! SCIENTIFIC ALGORITHM +! +! EMISSION = [EF][GAMMA][RHO] +! WHERE [EF] = EMISSION FACTOR (UG/M2H) +! [GAMMA] = EMISSION ACTIVITY FACTOR (NON-DIMENSION) +! [RHO] = PRODUCTION AND LOSS WITHIN PLANT CANOPIES +! (NON-DIMENSINO) +! ASSUMPTION: [RHO] = 1 (11/27/06) (SEE PDT_LOT_CP.EXT) +! +! GAMMA = [GAMMA_CE][GAMMA_AGE][GAMMA_SM] +! WHERE [GAMMA_CE] = CANOPY CORRECTION FACTOR +! [GAMMA_AGE] = LEAF AGE CORRECTION FACTOR +! [GAMMA_SM] = SOIL MOISTURE CORRECTION FACTOR +! ASSUMPTION: [GAMMA_SM] = 1 (11/27/06) +! +! GAMMA_CE = [GAMMA_LAI][GAMMA_P][GAMMA_T] +! WHERE [GAMMA_LAI] = LEAF AREA INDEX FACTOR +! [GAMMA_P] = PPFD EMISSION ACTIVITY FACTOR +! [GAMMA_T] = TEMPERATURE RESPONSE FACTOR +! +! EMISSION = [EF][GAMMA_LAI][GAMMA_P][GAMMA_T][GAMMA_AGE][GAMMA_SM] +! DERIVATION: +! EMISSION = [EF][GAMMA_ETC](1-LDF) + [EF][GAMMA_ETC][LDF][GAMMA_P] +! EMISSION = [EF][GAMMA_ETC]{ (1-LDF) + [LDF][GAMMA_P] } +! EMISSION = [EF][GAMMA_ECT]{ (1-LDF) + [LDF][GAMMA_P] } +! WHERE LDF = LIGHT DEPENDENT FUNCTION (NON-DIMENSION) +! +! FOR ISOPRENE +! ASSUMPTION: LDF = 1 FOR ISOPRENE (11/27/06) +! +! FINAL EQUATION +! EMISSION = [EF][GAMMA_LAI][GAMMA_P][GAMMA_T][GAMMA_AGE][GAMMA_SM] +! +! FOR NON-ISOPRENE +! FINAL EQUATION +! EMISSION = [EF][GAMMA_LAI][GAMMA_T][GAMMA_AGE][GAMMA_SM]* +! { (1-LDF) + [LDF][GAMMA_P] } +!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! + +!======================================================================= +!... BEGIN MODULE +!======================================================================= + + +!----------------------------------------------------------------------- +!.....1) CALCULATE GAM_L (GAMMA_LAI) +!----------------------------------------------------------------------- +! 0.49[LAI] +! GAMMA_LAI = ---------------- (NON-DIMENSION) +! (1+0.2LAI^2)^0.5 +! +! SUBROUTINE GAMMA_LAI RETURNS THE GAMMA_LAI VALUES +!----------------------------------------------------------------------- +SUBROUTINE GAMMA_LAI(PLAI, PGAM_L) + +IMPLICIT NONE +! INPUT +REAL,DIMENSION(:),INTENT(IN) :: PLAI +! OUTPUT +REAL,DIMENSION(:),INTENT(OUT) :: PGAM_L + +PGAM_L(:) = (0.49*PLAI(:)) / ( (1.+0.2*(PLAI(:)**2))**0.5 ) + +END SUBROUTINE GAMMA_LAI +!----------------------------------------------------------------------- + +!----------------------------------------------------------------------- +!.....5) CALCULATE GAM_A (GAMMA_AGE) +!----------------------------------------------------------------------- +! +! GAMMA_AGE = FNEW*ANEW + FGRO*AGRO + FMAT*AMAT + FOLD*AOLD +! WHERE FNEW = NEW FOLIAGE FRACTION +! FGRO = GROWING FOLIAGE FRACTION +! FMAT = MATURE FOLIAGE FRACTION +! FOLD = OLD FOLIAGE FRACTION +! ANEW = RELATIVE EMISSION ACTIVITY FOR NEW FOLIAGE +! AGRO = RELATIVE EMISSION ACTIVITY FOR GROWING FOLIAGE +! AMAT = RELATIVE EMISSION ACTIVITY FOR MATURE FOLIAGE +! AOLD = RELATIVE EMISSION ACTIVITY FOR OLD FOLIAGE +! +! +! FOR FOLIAGE FRACTION +! CASE 1) LAIC = LAIP +! FNEW = 0.0 , FGRO = 0.1 , FMAT = 0.8 , FOLD = 0.1 +! +! CASE 2) LAIP > LAIC +! FNEW = 0.0 , FGRO = 0.0 +! FMAT = 1-FOLD +! FOLD = (LAIP-LAIC)/LAIP +! +! CASE 3) LAIP < LAIC +! FNEW = 1-(LAIP/LAIC) T <= TI +! = (TI/T) * ( 1-(LAIP/LAIC) ) T > TI +! +! FMAT = LAIP/LAIC T <= TM +! = (LAIP/LAIC) + +! ( (T-TM)/T ) * ( 1-(LAIP/LAIC) ) T > TM +! +! FGRO = 1 - FNEW - FMAT +! FOLD = 0.0 +! +! WHERE +! TI = 5 + (0.7*(300-TT)) TT <= 303 +! = 2.9 TT > 303 +! TM = 2.3*TI +! +! T = LENGTH OF THE TIME STEP (DAYS) +! TI = NUMBER OF DAYS BETWEEN BUDBREAK AND THE INDUCTION OF +! EMISSION +! TM = NUMBER OF DAYS BETWEEN BUDBREAK AND THE INITIATION OF +! PEAK EMISSIONS RATES +! TT = AVERAGE TEMPERATURE (K) NEAR TOP OF THE CANOPY DURING +! CURRENT TIME PERIOD (DAILY AVE TEMP FOR THIS CASE) +! +! +! FOR RELATIVE EMISSION ACTIVITY +! CASE 1) CONSTANT +! ANEW = 1.0 , AGRO = 1.0 , AMAT = 1.0 , AOLD = 1.0 +! +! CASE 2) MONOTERPENES +! ANEW = 2.0 , AGRO = 1.8 , AMAT = 0.95 , AOLD = 1.0 +! +! CASE 3) SESQUITERPENES +! ANEW = 0.4 , AGRO = 0.6 , AMAT = 1.075, AOLD = 1.0 +! +! CASE 4) METHANOL +! ANEW = 3.0 , AGRO = 2.6 , AMAT = 0.85 , AOLD = 1.0 +! +! CASE 5) ISOPRENE +! ANEW = 0.05 , AGRO = 0.6 , AMAT = 1.125, AOLD = 1.0 +! +! SUBROUTINE GAMMA_A RETURNS GAMMA_A +!----------------------------------------------------------------------- +SUBROUTINE GAMMA_A(KDATE, KTIME, KTSTLEN, HSPC_NAME, PTEMP_D, PLAIARP, PLAIARC, PGAM_A) + +IMPLICIT NONE + +! INPUT +INTEGER, INTENT(IN) :: KDATE, KTIME, KTSTLEN +CHARACTER(LEN=16), INTENT(IN) :: HSPC_NAME +REAL, INTENT(IN) :: PTEMP_D +REAL, DIMENSION(:), INTENT(IN) :: PLAIARP, PLAIARC +! OUTPUT +REAL,DIMENSION(:),INTENT(OUT) :: PGAM_A + +! LOCAL PARAMETERS +REAL :: ZFNEW, ZFGRO, ZFMAT, ZFOLD +REAL :: ZTI, ZTM ! NUMBER OF DAYS BETWEEN BUDBREAK + ! AND INDUCTION OF EMISSION, + ! INITIATION OF PEAK EMISSIONS RATES +INTEGER :: IAINDX ! RELATIVE EMISSION ACITIVITY INDEX +INTEGER :: ISPCNUM +INTEGER :: JJ + +!... CHOOSE RELATIVE EMISSION ACTIVITY +!--------CODE BY XUEMEI WANG 11/04/2007---------------- +! +ISPCNUM = INDEX1(HSPC_NAME, CMGN_SPC) +IAINDX = NREA_INDEX(ISPCNUM) +! +!--------------------------------------------------- +! LOCAL PARAMETER ARRAYS +IF ( PTEMP_D.LE.303. ) THEN + ZTI = 5.0 + 0.7*(300.-PTEMP_D) +ELSE + ZTI = 2.9 +ENDIF +ZTM = 2.3 * ZTI +! +DO JJ = 1,SIZE(PLAIARP) + +!... CALCULATE FOLIAGE FRACTION + +! PRINT*,'LAIP,LAIC, TT=',MINVAL(LAIP), MAXVAL(LAIP), +! S MINVAL(LAIC), MAXVAL(LAIC), MINVAL(TT), MAXVAL(TT) + +! WHERE (LAIP .LT. LAIC) + +! CALCULATE TI AND TM + IF ( PLAIARP(JJ).EQ.PLAIARC(JJ) ) THEN + + ZFNEW = 0.0 + ZFGRO = 0.1 + ZFMAT = 0.8 + ZFOLD = 0.1 + + ELSEIF ( PLAIARP(JJ).GT.PLAIARC(JJ) ) THEN + + ZFNEW = 0.0 + ZFGRO = 0.0 + ZFOLD = ( PLAIARP(JJ)-PLAIARC(JJ) ) / PLAIARP(JJ) + ZFMAT = 1. - ZFOLD + + ELSE + + ZFMAT = PLAIARP(JJ)/PLAIARC(JJ) + ! CALCULATE FNEW AND FMAT, THEN FGRO AND FOLD + ! FNEW + IF ( ZTI.GE.KTSTLEN ) THEN + ZFNEW = 1.0 - ZFMAT + ELSE + ZFNEW = (ZTI/KTSTLEN) * ( 1. - ZFMAT ) + ENDIF +! FMAT + IF ( ZTM.LT.KTSTLEN ) THEN + ZFMAT = ZFMAT + ( (KTSTLEN-ZTM)/KTSTLEN ) * ( 1.-ZFMAT ) + ENDIF + + ZFGRO = 1.0 - ZFNEW - ZFMAT + ZFOLD = 0.0 + + ENDIF + + !... CALCULATE GAMMA_A + PGAM_A(JJ) = ZFNEW * XANEW(IAINDX) + ZFGRO * XAGRO(IAINDX) + & + ZFMAT * XAMAT(IAINDX) + ZFOLD * XAOLD(IAINDX) + +ENDDO + +END SUBROUTINE GAMMA_A + +!----------------------------------------------------------------------- +!.....6) CALCULATE GAM_SMT (GAMMA_SM) +!----------------------------------------------------------------------- +! +! GAMMA_SM = 1.0 (NON-DIMENSION) +! +! +! SUBROUTINE GAMMA_S RETURNS THE GAMMA_SM VALUES +!----------------------------------------------------------------------- +SUBROUTINE GAMMA_S( PGAM_S ) + +IMPLICIT NONE + +REAL,DIMENSION(:) :: PGAM_S + +PGAM_S = 1.0 + +END SUBROUTINE GAMMA_S + +!----------------------------------------------------------------------- +!.....2) CALCULATE GAM_P (GAMMA_P) +!----------------------------------------------------------------------- +! GAMMA_P = 0.0 A<=0, A>=180, SIN(A) <= 0.0 +! +! GAMMA_P = SIN(A)[ 2.46*(1+0.0005(PDAILY-400))*PHI - 0.9*PHI^2 ] +! 0<A<180, SIN(A) > 0.0 +! WHERE PHI = ABOVE CANOPY PPFD TRANSMISSION (NON-DIMENSION) +! PDAILY = DAILY AVERAGE ABOVE CANOPY PPFD (UMOL/M2S) +! A = SOLAR ANGLE (DEGREE) +! +! NOTE: AAA = 2.46*BBB*PHI - 0.9*PHI^2 +! BBB = (1+0.0005(PDAILY-400)) +! GAMMA_P = SIN(A)*AAA +! +! PAC +! PHI = ----------- +! SIN(A)*PTOA +! WHERE PAC = ABOVE CANOPY PPFD (UMOL/M2S) +! PTOA = PPFD AT THE TOP OF ATMOSPHERE (UMOL/M2S) +! +! PAC = SRAD * 4.766 MMMOL/M2-S * 0.5 +! +! PTOA = 3000 + 99*COS[2*3.14-( DOY-10)/365 )] +! WHERE DOY = DAY OF YEAR +! +! SUBROUTINE GAMMA_P RETURNS THE GAMMA_P VALUES +!----------------------------------------------------------------------- +!SUBROUTINE GAMMA_P( KDATE, KTIME, PLAT, PLONG, PPFD, PPFD_D, PGAM_P ) +! +!IMPLICIT NONE +! +!! INPUT +!INTEGER,INTENT(IN) :: KDATE, KTIME +! +!REAL,DIMENSION(:),INTENT(IN) :: PLAT, PLONG +!! PHOTOSYNTHETIC PHOTON FLUX DENSITY: INSTANTANEOUS, DAILY +!REAL,DIMENSION(:),INTENT(IN) :: PPFD, PPFD_D +!! OUTPUT +!REAL,DIMENSION(:),INTENT(OUT) :: PGAM_P ! GAMMA_P +! +!! LOCAL PARAMETERS +!REAL, DIMENSION(SIZE(PLAT)) :: ZHOUR, ZSINBETA ! HOUR IS SOLAR HOUR +!INTEGER, DIMENSION(SIZE(PLAT)) :: IDAY ! DAY IS DOY (JDATE) +! +!REAL :: ZPTOA, ZPHI +!REAL :: ZAAA, ZBBB +!REAL :: ZBETA ! SOLAR ZENITH ANGLE +!INTEGER :: JJ +! +!!... BEGIN ESTIMATING GAMMA_P +! +!!... CONVERT DATE AND TIME FORMAT TO LOCAL TIME +!! DAY IS JULIAN DAY +!IDAY(:) = MOD(KDATE,1000) +! +!! CONVERT FROM XXXXXX FORMAT TO XX.XX (SOLAR HOUR) +!! HOUR = 0 -> 23.XX +!! SOLAR HOUR +!ZHOUR(:) = KTIME/10000. + PLONG(:)/15. +! +!WHERE ( ZHOUR(:).LT.0. ) +! ZHOUR(:) = ZHOUR(:) + 24.0 +! IDAY(:) = IDAY(:) - 1. +!ENDWHERE +! +!! GET SOLAR ELEVATION ANGLE +!CALL SOLARANGLE(IDAY, ZHOUR, PLAT, ZSINBETA) +! +!DO JJ = 1,SIZE(ZSINBETA) +! +! IF ( ZSINBETA(JJ).LE.0. ) THEN +! +! PGAM_P(JJ) = 0. +! +! ELSE IF ( ZSINBETA(JJ).GT.0. ) THEN +! +! ZPTOA = 3000.0 + 99.0 *COS(2. * 3.14 * (IDAY(JJ)-10.)/365.) +! +! ZPHI = PPFD(JJ) / (ZSINBETA(JJ) * ZPTOA) +! +! ZBBB = 1. + 0.0005 * (PPFD_D(JJ)-400. ) +! ZAAA = ( 2.46 * ZBBB * ZPHI ) - ( 0.9 * ZPHI**2 ) +! +! PGAM_P(JJ) = ZSINBETA(JJ) * ZAAA +! +! ZBETA = ASIN(ZSINBETA(JJ)) * XRPI180 ! DEGREE +! +! ! SCREENING THE UNFORCED ERRORS +! ! IF SOLAR ELEVATION ANGLE IS LESS THAN 1 THEN +! ! GAMMA_P CAN NOT BE GREATER THAN 0.1. +! IF ( ZBETA.LT.1.0 .AND. PGAM_P(JJ).GT.0.1 ) THEN +! PGAM_P(JJ) = 0.0 +! ENDIF +! +! ELSE +! +! WRITE(*,*) "ERROR: SOLAR ANGLE IS INVALID - FATAL ERROR GAMMA_P, STOP" +! STOP +! +! ENDIF +! ! END LOOP FOR NROWS +!ENDDO ! END LOOP FOR NCOLS +! +!END SUBROUTINE GAMMA_P +!!----------------------------------------------------------------------- +! +! +!!----------------------------------------------------------------------- +!!.....3) CALCULATE GAM_T (GAMMA_T) FOR ISOPRENE +!!----------------------------------------------------------------------- +!! EOPT*CT2*EXP(CT1*X) +!! GAMMA_T = ------------------------ +!! [CT2-CT1*(1-EXP(CT2*X))] +!! WHERE X = [ (1/TOPT)-(1/THR) ] / 0.00831 +!! EOPT = 1.75*EXP(0.08(TDAILY-297) +!! CT1 = 80 +!! CT2 = 200 +!! THR = HOURLY AVERAGE AIR TEMPERATURE (K) +!! TDAILY = DAILY AVERAGE AIR TEMPERATURE (K) +!! TOPT = 313 + 0.6(TDAILY-297) +!! +!! NOTE: AAA = EOPT*CT2*EXP(CT1*X) +!! BBB = [CT2-CT1*(1-EXP(CT2*X))] +!! GAMMA_T = AAA/BBB +!! +!! SUBROUTINE GAMMA_TLD RETURNS THE GAMMA_T VALUE FOR ISOPRENE +!!----------------------------------------------------------------------- +!SUBROUTINE GAMMA_TLD( PTEMP, PTEMP_D, PGAM_T, HSPC_NAME ) +! +!IMPLICIT NONE +! +!! INPUT +!REAL,DIMENSION(:),INTENT(IN) :: PTEMP, PTEMP_D ! DAILY, HOURLY SURFACE TEMPERATURE +!! OUTPUT +!REAL,DIMENSION(:),INTENT(OUT) :: PGAM_T ! GAMMA_T +!CHARACTER(LEN=16),INTENT(IN) :: HSPC_NAME +!! +!! LOCAL PARAMETERS +!REAL :: ZEOPT, ZTOPT, ZX, ZAAA, ZBBB +!INTEGER :: ISPCNUM, JJ +! +!ISPCNUM = INDEX1(HSPC_NAME, CMGN_SPC) +! +!DO JJ = 1,SIZE(PTEMP) +! +! ZEOPT = XCLEO(ISPCNUM) * EXP(0.08*(PTEMP_D(JJ)-297.)) +! ZTOPT = 313.0 + ( 0.6*(PTEMP_D(JJ)-297.) ) +! ZX = ( (1/ZTOPT)-(1/PTEMP(JJ)) ) / 0.00831 +! +! ZAAA = ZEOPT * XCT2 * EXP(XCTM1(ISPCNUM)*ZX) +! ZBBB = ( XCT2- XCTM1(ISPCNUM)*( 1.-EXP(XCT2*ZX) ) ) +! PGAM_T(JJ) = ZAAA/ZBBB +! +!ENDDO +! +!END SUBROUTINE GAMMA_TLD +!!----------------------------------------------------------------------- +! +! +!!----------------------------------------------------------------------- +!!.....4) CALCULATE GAM_T (GAMMA_T) FOR NON-ISOPRENE +!!----------------------------------------------------------------------- +!! +!! GAMMA_T = EXP[TDP_FCT*(T-TS)] +!! WHERE TDP_FCT = TEMPERATURE DEPENDENT PARAMETER ('BETA') +!! TS = STANDARD TEMPERATURE (NORMALLY 303K, 30C) +!! +!! SUBROUTINE GAMMA_TLI RETURNS THE GAMMA_T VALUE FOR NON-ISOPRENE +!!----------------------------------------------------------------------- +!SUBROUTINE GAMMA_TLI(HSPCNAM, PTEMP, PGAM_T) +! +!IMPLICIT NONE +! +!CHARACTER(LEN=16), INTENT(IN) :: HSPCNAM +!REAL,DIMENSION(:), INTENT(IN):: PTEMP +!REAL, DIMENSION(:), INTENT(OUT) :: PGAM_T +!! +!INTEGER :: ISPCNUM ! SPECIES NUMBER +! +!!--END OF DECLARATIONS-- +! +!ISPCNUM = INDEX1(HSPCNAM, CMGN_SPC) +!! +!PGAM_T = EXP( XTDF_PRM(ISPCNUM) * (PTEMP-XTS) ) +! +!END SUBROUTINE GAMMA_TLI +!!----------------------------------------------------------------------- +! +!!======================================================================= +!!----------------------------------------------------------------------- +!!.....7) CALCULATE GAM_CO2(GAMMA_CO2) +!!----------------------------------------------------------------------- +!! +!! GAMMA_CO2 = 1.0 (NON-DIMENSION) +!! WHEN CO2 =400PPM +!! +!! SUBROUTINE GAM_CO2 RETURNS THE GAMMA_CO2 VALUES +!! XUEMEI WANG-2009-06-22 +!!----------------------------------------------------------------------- +!SUBROUTINE GAMMA_CO2(PCO2, PGAM_CO2) +! +!IMPLICIT NONE +! +!REAL, DIMENSION(:), INTENT(IN) :: PCO2 +!REAL, DIMENSION(:), INTENT(OUT) :: PGAM_CO2 +! +!REAL :: ZCI +!INTEGER :: JJ +! +!DO JJ = 1,SIZE(PCO2) +! +! IF ( PCO2(JJ).EQ.400. ) THEN +! PGAM_CO2(JJ) = 1.0 +! ELSE +! ZCI = 0.7* PCO2(JJ) +! PGAM_CO2(JJ) = XISMAX - ((XISMAX*ZCI**XH) /(XCSTAR**XH+ZCI**XH)) +! ENDIF +! +!ENDDO +! +!END SUBROUTINE GAMMA_CO2 +! +!!======================================================================= +!!======================================================================= +!!----------------------------------------------------------------------- +!!.....8) CALCULATE GAMMA_LAIBIDIR(GAM_LAIBIDIR,LAI) +!!----------------------------------------------------------------------- +!!FROM ALEX GUENTHER 2010-01-26 +!!IF LAI < 2 THEN +!!GAMMALAIBIDIR= 0.5 * LAI +!!ELSEIF LAI <= 6 THEN +!!GAMMALAIBIDIR= 1 - 0.0625 * (LAI - 2) +!!ELSE +!!GAMMALAIBIDIR= 0.75 +!!END IF +!! +!! SUBROUTINE GAMMA_LAIBIDIR RETURNS THE GAM_LAIBIDIR VALUES +!! XUEMEI WANG-2010-01-28 +!! +!!----------------------------------------------------------------------- +!SUBROUTINE GAMMA_LAIBIDIR(PLAI, PGAM_LAIBIDIR) +! +!IMPLICIT NONE +! +!REAL,DIMENSION(:),INTENT(IN) :: PLAI +!REAL,DIMENSION(:),INTENT(OUT) :: PGAM_LAIBIDIR +! +!INTEGER :: JJ +!! +!DO JJ = 1,SIZE(PLAI) +! +! IF ( PLAI(JJ)<2. ) THEN +! PGAM_LAIBIDIR(JJ) = 0.5 * PLAI(JJ) +! ELSEIF ( PLAI(JJ).GE.2. .AND. PLAI(JJ).LE.6. ) THEN +! PGAM_LAIBIDIR(JJ) = 1. - 0.0625 * ( PLAI(JJ)-2. ) +! ELSE +! PGAM_LAIBIDIR(JJ) = 0.75 +! ENDIF +! +!ENDDO +! +!END SUBROUTINE GAMMA_LAIBIDIR +!!======================================================================= +! +END MODULE MODE_GAMMA_ETC diff --git a/src/LIB/MEGAN/mode_megan.F90 b/src/LIB/MEGAN/mode_megan.F90 new file mode 100644 index 000000000..b2a1ac523 --- /dev/null +++ b/src/LIB/MEGAN/mode_megan.F90 @@ -0,0 +1,1220 @@ +MODULE MODE_MEGAN +! +USE MODD_MEGAN +! +USE MODI_SOLARANGLE +! +USE YOMHOOK ,ONLY : LHOOK, DR_HOOK +USE PARKIND1 ,ONLY : JPRB +! +IMPLICIT NONE +! +!XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX +! +! INPUT AND OUTPUT FILES MUST BE SELECTED BEFORE STARTING THE PROGRAM +! +!XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX +!! +! INPUT VARIBLES +! +! DAY JULIAN DAY +! LAT LATITUDE +! HOUR HOUR OF THE DAY +! TC TEMPERATURE [C] +! PPFD INCOMING PHOTOSYNTHETIC ACTIVE RADIATION [UMOL/M2/S1] +! WIND WIND SPEED [M S-1] +! HUMIDITY RELATIVE HUMIDITY [%] +! CANTYPYE DEFINES SET OF CANOPY CHARACTERISTICS +! LAI LEAF AREA INDEX [M2 PER M2 GROUND AREA] +! DI ??? +! PRES PRESSURE [PA] +! +! USED VARIABLES: +! +! PPFDFRAC FRACTION OF TOTAL SOLAR RADIATION THAT IS PPFD +! SOLAR SOLAR RADIATION [W/M2] +! MAXSOLAR MAXIMUM OF SOLAR RADIATION +! BETA SIN OF SOLAR ANGLE ABOVE HORIZON +! SINBETA SOLAR ANGLE ABOVE HORIZON +! TAIRK0 ABOVE CANOPY AIR TEMPERATURE [K] +! TAIRK ARRAY OF CANOPY AIR TEMPERATURE [K] +! WS0 ABOVE CANOPY WIND SPEED [M/S] +! WS ARRAY OF CANOPY WIND SPEED [M/S] +! HUMIDAIRPA0 ABOVE CANOPY AMBIENT HUMIDITY [PA] +! HUMIDAIRPA ARRAY OF CANOPY AMBIENT HUMIDITY IN [PA] +! STOMATADI INDEX FOR WATER STATUS OF LEAVES. USED TO MODIFY STOMATAL CONDUCTANCE +! TRANSMIS TRANSMISSION OF PPFD THAT IS DIFFUSE +! DIFFFRAC FRACTION OF PPFD THAT IS DIFFUSE +! PPFDFRAC FRACTION OF SOLAR RAD THAT IS PPFD +! TRATE STABILITY OF BOUNDARY ??? +! SH SENSIBLE HEAT FLUX ??? +! VPGAUSWT ARRAY OF GAUSSIAN WEIGHTING FACTORS +! VPGAUSDIS ARRAY OF GAUSSIAN WEIGHTING FACTORS +! VPSLWWT ARRAY OF GAUSSIAN WEIGHTING FACTORS +! SUNFRAC ARRAY OF THE FRACTION OF SUN LEAVES. I = 1 IS THE TOP CANOPY LAYER, 2 IS THE NEXT LAYER, ETC. +! SUNPPFD ARRAY OF INCOMING (NOT ABSORBED) PPFD ON A SUN LEAF [UMOL/M2/S] +! SHADEPPFD ARRAY OF INCOMING (NOT ABSORBED) PPFD ON A SHADE LEAF [UMOL/M2/S] +! SUNQV ARRAY OF VISIBLE RADIATION (IN AND OUT) FLUXES ON SUN LEAVES +! SHADEQV ARRAY OF ABSORBED VISIBLE RADIATION (IN AND OUT) FLUXES ON SHADE LEAVES +! SUNQN ARRAY OF ABSORBED NEAR IR RADIATION (IN AND OUT) FLUXES ON SUN LEAVES +! SHADEQN ARRAY OF ABSORBED NEAR IR RADIATION (IN AND OUT) FLUXES ON SHADE LEAVES +! SUNLEAFTK ARRAY OF LEAF TEMPERATURE FOR SUN LEAVES [K] +! SUNLEAFSH ARRAY OF SENSIBLE HEAT FLUX FOR SUN LEAVES [W/M2] +! SUNLEAFLH ARRAY OF LATENT HEAT FLUX FOR SUN LEAVES [W/M2] +! SUNLEAFIR ARRAY OF INFRARED FLUX FOR SUN LEAVES [W/M2] +! SHADELEAFTK ARRAY OF LEAF TEMPERATURE FOR SHADE LEAVES [K] +! SHADELEAFSH ARRAY OF SENSIBLE HEAT FLUX FOR SHADE LEAVES [W/M2] +! SHADELEAFLH ARRAY OF LATENT HEAT FLUX FOR SHADE LEAVES [W/M2] +! SHADELEAFIR ARRAY OF INFRARED FLUX FOR SHADE LEAVES [W/M2] +! QBABSV, QBABSN ABSORBED DIRECT BEAM LIGHT FOR VISIBLE AND NEAR INFRA RED +! QDABSV, QDABSN ARRAY OF ABSORBED DIFFUSE LIGHT FOR VISIBLE AND NEAR INFRA RED +! QSABSV, QSABSN ARRAY OF ABSORBED SCATTERED LIGHT FOR VISIBLE AND NEAR INFRA RED +! QBEAMV, QBEAMN ABOVE CANOPY BEAM (DIRECT) LIGHT FOR VISIBLE AND NEAR INFRA RED +! QDIFFV, QDIFFN ABOVE CANOPY DIFFUSE LIGHT FOR VISIBLE AND NEAR INFRA RED +! EA1PLAYER ARRAY OF EMISSION ACTIVITY OF LIGHT PER LAYER +! EA1TLAYER ARRAY OF EMISSION ACTIVITY OF TEMPERATURE PER LAYER +! EA1LAYER ARRAY OF COMPANIED EMISSION ACTIVITY +! EA1PCANOPY TOTAL EMISSION ACTIVITY OF LIGHT +! EATILAYER ARRAY OF EMISSION ACTIVITY OF TEMPERATURE INDENDENT PER LAYER +! EA1TCANOPY TOTAL EMISSION ACTIVITY OF TEMPERATURE DEPEDENT FACTOR +! PEA1CANOPY TOTAL COMPANIED EMISSION ACTIVITY +! PEATICANOPY TOTAL EMISSION ACTIVITY OF TEMPERATURE INDEPEDENT FACTOR +! CALCBETA FUNCTION: CALCULATION OF SOLAR ZENITH ANGLE +! WATERVAPPRES FUNCTION: CONVERT WATER MIXING RATIO (KG/KG) TO WATER VAPOR PRESSURE +! STABILITY FUNCTION: TEMPERATURE LAPSE RATE +! EA1T99 FUNCTION: TEMPERATURE DEPENDENCE ACTIVITY FACTOR FOR EMISSION TYPE 1 +! EA1P99 FUNCTION: LIGHT DEPENDENCE ACTIVITY FACTOR FOR EMISSION +! EALTI FUNCTION: TEMPERATURE INDEPENDENCE ACTIVITY FACTOR FOR EMISSION +! DISTOMATA FUNCTION: +! CALCECCENTRICITY FUNCTION: +! +!XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX +! +CONTAINS +! +SUBROUTINE GAMME_CE(KDATE, KTIME, PCANOPYCHAR, KCANTYPE, HSPCNAME, & + PPFD24, PPFD240, PT24, PT240, PDI, & + PPFD0, PLAT, PLONG, PTC, PWIND, PHUMIDITY, & + PLAI, PRES, PEA1CANOPY, PEATICANOPY ) +! +IMPLICIT NONE +! INPUT +INTEGER,INTENT(IN) :: KDATE, KTIME, KCANTYPE +REAL,DIMENSION(:,:),INTENT(IN) :: PCANOPYCHAR +CHARACTER(LEN=16), INTENT(IN) :: HSPCNAME +! +REAL, INTENT(IN) :: PPFD24, PPFD240 +REAL, INTENT(IN) :: PT24, PT240, PDI +! +REAL, DIMENSION(:), INTENT(IN) :: PPFD0 +REAL, DIMENSION(:), INTENT(IN) :: PLONG, PLAT +REAL, DIMENSION(:), INTENT(IN) :: PTC, PRES, PWIND, PHUMIDITY, PLAI +! ARRAY OF CANOPY CHARACTERISTICS FOR KRTYP OF CANOPY TYPE +! OUTPUT +REAL, DIMENSION(:), INTENT(OUT) :: PEA1CANOPY, PEATICANOPY +! +! LOCAL VARIABLES +REAL, DIMENSION(NLAYERS) :: ZVPGAUSWT, ZVPGAUSDIS2, ZVPGAUSDIS +! +REAL, DIMENSION(SIZE(PLONG),NLAYERS) :: ZEA1LAYER, ZEATILAYER, ZVPSLWWT +REAL, DIMENSION(SIZE(PLONG),NLAYERS) :: ZSUNFRAC, ZSUNQV, ZSHADEQV, ZSUNQN, ZSHADEQN, & + ZSUNPPFD, ZSHADEPPFD, ZSUNLEAFTK, ZSHADELEAFTK, & + ZSUNLEAFSH, ZSHADELEAFSH +! +REAL, DIMENSION(SIZE(PLONG)) :: ZHOUR, ZSINBETA, ZSOLAR, & + ZMAXSOLAR, ZQDIFFV, ZQBEAMV, ZQDIFFN, ZQBEAMN, & + ZHUMIDAIRPA0, ZTRATE +! +REAL :: ZSTOMATADI +INTEGER, DIMENSION(SIZE(PLONG)) :: IDAY +INTEGER :: JI, JJ +! +!---------------------------HEADER OVER-------------------------------- +! +IDAY(:) = MOD(KDATE,1000) +! CONVERT FROM XXXXXX FORMAT TO XX.XX (SOLAR HOUR) +! HOUR = 0 -> 23.XX +! SOLAR HOUR +ZHOUR(:) = KTIME/10000. + PLONG(:)/15. +! +WHERE ( ZHOUR(:).LT.0. ) + ZHOUR(:) = ZHOUR(:) + 24. + IDAY (:) = IDAY (:) - 1 +ELSEWHERE ( ZHOUR.GT.24. ) + ZHOUR(:) = ZHOUR(:) - 24. + IDAY (:) = IDAY (:) + 1 +END WHERE +! +CALL SOLARANGLE(IDAY, ZHOUR, PLAT, ZSINBETA) +! +ZSOLAR (:) = PPFD0(:)/2.25 +ZMAXSOLAR(:) = ZSINBETA(:) * XSOLARCONSTANT * CALCECCENTRICITY(IDAY(:)) +CALL SOLARFRACTIONS(ZSOLAR, ZMAXSOLAR, ZQDIFFV, ZQBEAMV, ZQDIFFN, ZQBEAMN) +! +CALL GAUSSIANINTEGRATION(ZVPGAUSWT, ZVPGAUSDIS, ZVPGAUSDIS2) +! +CALL CANOPYRAD(KCANTYPE, PCANOPYCHAR, ZVPGAUSDIS, & + PLAI, ZSINBETA, ZQBEAMV, ZQDIFFV, ZQBEAMN, ZQDIFFN, & + ZSUNFRAC, ZSUNQV, ZSHADEQV, ZSUNQN, ZSHADEQN, & + ZSUNPPFD, ZSHADEPPFD) +! +ZTRATE (:) = STABILITY(PCANOPYCHAR, KCANTYPE, ZSOLAR) +! +ZSTOMATADI = DISTOMATA(PDI) +! +ZHUMIDAIRPA0(:) = WATERVAPPRES(XWATERAIRRATIO, PHUMIDITY, PRES) +! +CALL CANOPYEB(KCANTYPE, PCANOPYCHAR, ZVPGAUSDIS, ZSTOMATADI, & + PTC, PWIND, ZTRATE, ZHUMIDAIRPA0, & + ZSUNQV, ZSHADEQV, ZSUNQN, ZSHADEQN, ZSUNPPFD, ZSHADEPPFD, & + ZSUNLEAFTK, ZSHADELEAFTK, ZSUNLEAFSH, ZSHADELEAFSH) + +!ZEA1TCANOPY(:) = 0. +!ZEA1PCANOPY(:) = 0. +PEA1CANOPY (:) = 0. +PEATICANOPY(:) = 0. + +DO JI = 1,SIZE(ZEA1LAYER,2) + + + !ZEA1TLAYER(:,JI) = EA1T99(ZSUNLEAFTK (:,JI), PT24, PT240, HSPCNAME) * ZSUNFRAC(:,JI) + & + ! EA1T99(ZSHADELEAFTK(:,JI), PT24, PT240, HSPCNAME) *(1.-ZSUNFRAC(:,JI)) + +! PSTD = 200 FOR SUN LEAVES +! PSTD = 50 FOR SHADE LEAVES + !ZEA1PLAYER(:,JI) = EA1P99(ZSUNPPFD(:,JI), PPFD24*0.5, PPFD240*0.5, XPSTD_SUN) * ZSUNFRAC(:,JI) + & + ! EA1P99(ZSHADEPPFD(:,JI), PPFD24*0.16, PPFD240*0.16, XPSTD_SHADE) * (1.-ZSUNFRAC(:,JI)) + + ZEA1LAYER(:,JI) = EA1T99(HSPCNAME , PT24 , PT240 , ZSUNLEAFTK (:,JI)) * & + EA1P99(XPSTD_SUN , PPFD24*0.5 , PPFD240*0.5 , ZSUNPPFD (:,JI)) * ZSUNFRAC(:,JI) + & + EA1T99(HSPCNAME , PT24 , PT240 , ZSHADELEAFTK(:,JI)) * & + EA1P99(XPSTD_SHADE, PPFD24*0.16, PPFD240*0.16, ZSHADEPPFD (:,JI) ) * (1.-ZSUNFRAC(:,JI)) + + ZEATILAYER(:,JI) = EALTI99(HSPCNAME, ZSUNLEAFTK (:,JI)) * ZSUNFRAC(:,JI) + & + EALTI99(HSPCNAME, ZSHADELEAFTK(:,JI)) * (1-ZSUNFRAC(:,JI)) + +ENDDO + +CALL WEIGHTSLW(ZVPGAUSDIS, PLAI, ZVPSLWWT) +! +DO JJ = 1,SIZE(PEA1CANOPY) +! ZEA1PCANOPY(JJ) = SUM(ZEA1PLAYER(JJ,:) * ZVPSLWWT(JJ,:) * ZVPGAUSWT(:) ) +! ZEA1TCANOPY(JJ) = SUM(ZEA1TLAYER(JJ,:) * ZVPSLWWT(JJ,:) * ZVPGAUSWT(:) ) + PEA1CANOPY (JJ) = SUM(ZEA1LAYER (JJ,:) * ZVPSLWWT(JJ,:) * ZVPGAUSWT(:) ) + PEATICANOPY(JJ) = SUM(ZEATILAYER(JJ,:) * ZVPSLWWT(JJ,:) * ZVPGAUSWT(:) ) +! THIS QUANTITY IS APPARENTLY NOT PASSED OUT OF THE SUBROUTINE +! ZSH(JJ) = SUM( ( ZSUNLEAFSH (JJ,:) * ZSUNFRAC(:,JJ) + & +! ZSHADELEAFSH(JJ,:) * (1 - ZSUNFRAC(:,JJ))) * PLAI(:) * ZVPGAUSWT(:) ) +ENDDO + +PEA1CANOPY(:) = PEA1CANOPY(:) * XCCE * PLAI(:) + +END SUBROUTINE GAMME_CE + +!OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO +! +! SUBROUTINE GAUSSIANINTEGRATION +! +!OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO + +SUBROUTINE GAUSSIANINTEGRATION(PWEIGHTGAUSS, PDISTGAUSS, PDISTGAUSS2) +! +IMPLICIT NONE +! +REAL,DIMENSION(:),INTENT(OUT) :: PWEIGHTGAUSS, PDISTGAUSS, PDISTGAUSS2 +! +! LOCAL VARIABLES +INTEGER :: JI +!-------------------------------------------------------------------- +! +IF ( NLAYERS.EQ.1 ) THEN + PWEIGHTGAUSS(1) = 1 + PDISTGAUSS (1) = 0.5 + PDISTGAUSS2 (1) = 1 +ELSEIF ( NLAYERS.EQ.3 ) THEN + PWEIGHTGAUSS(1) = 0.277778 + PWEIGHTGAUSS(2) = 0.444444 + PWEIGHTGAUSS(3) = 0.277778 + PDISTGAUSS(1) = 0.112702 + PDISTGAUSS(2) = 0.5 + PDISTGAUSS(3) = 0.887298 + PDISTGAUSS2(1) = 0.277778 + PDISTGAUSS2(2) = 0.722222 + PDISTGAUSS2(3) = 1 +ELSEIF ( NLAYERS.EQ.5 ) THEN + PWEIGHTGAUSS(1) = 0.1184635 + PWEIGHTGAUSS(2) = 0.2393144 + PWEIGHTGAUSS(3) = 0.284444444 + PWEIGHTGAUSS(4) = 0.2393144 + PWEIGHTGAUSS(5) = 0.1184635 + PDISTGAUSS(1) = 0.0469101 + PDISTGAUSS(2) = 0.2307534 + PDISTGAUSS(3) = 0.5 + PDISTGAUSS(4) = 0.7692465 + PDISTGAUSS(5) = 0.9530899 + PDISTGAUSS2(1) = 0.1184635 + PDISTGAUSS2(2) = 0.3577778 + PDISTGAUSS2(3) = 0.6422222 + PDISTGAUSS2(4) = 0.881536 + PDISTGAUSS2(5) = 1.0 +ELSE + DO JI = 1,NLAYERS + PWEIGHTGAUSS(JI) = 1. / NLAYERS + PDISTGAUSS (JI) = (JI - 0.5) / NLAYERS + PDISTGAUSS2 (JI) = JI / NLAYERS + ENDDO +ENDIF + +END SUBROUTINE GAUSSIANINTEGRATION + +!OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO +! +! SUBROUTINE WEIGHTSLW +! +!OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO + +SUBROUTINE WEIGHTSLW(PDISTGAUSS, PLAI, PSLW) + +IMPLICIT NONE + +REAL, DIMENSION(:), INTENT(IN) :: PLAI +REAL, DIMENSION(:), INTENT(IN) :: PDISTGAUSS + +REAL, DIMENSION(:,:), INTENT(OUT) :: PSLW + +! LOCAL VARIABLES +INTEGER :: JI +!-------------------------------------------------- + +DO JI = 1,NLAYERS + PSLW(:,JI) = 0.63 + 0.37 * EXP(-((PLAI(:) * PDISTGAUSS(JI)) - 1.)) +ENDDO + +END SUBROUTINE WEIGHTSLW + +!OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO +! +! SUBROUTINE SOLARFRACTIONS +! TRANSMISSION, FRACTION OF PPFD THAT IS DIFFUSE, +! FRACTION OF SOLAR RAD THAT IS PPFD +! +!OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO + +SUBROUTINE SOLARFRACTIONS(PSOLAR, PMAXSOLAR, PQDIFFV, PQBEAMV, PQDIFFN, PQBEAMN) +! +IMPLICIT NONE +! +! INTEGER,INTENT(IN) :: TIMEPERIOD +REAL, DIMENSION(:), INTENT(IN) :: PSOLAR, PMAXSOLAR +! +REAL, DIMENSION(:), INTENT(OUT) :: PQDIFFV, PQBEAMV, PQDIFFN, PQBEAMN +! +! INTERNAL VARIABLES +REAL :: ZFRACDIFF, ZPPFDFRAC, ZPPFDDIFFRAC, ZQV, ZQN +REAL :: ZTRANSMIS +INTEGER :: JJ +!----------------------------------------------------- +! IF (TIMEPERIOD .EQ. 1) THEN ! DAILY TRANSMISSION +! TRANSMIN = 0.26 +! TRANSSLOPE= 1.655 +! ELSE ! HOURLY TRANSMISSION +! TRANSMIN = 0.26 +! TRANSSLOPE = 1.655 +! ENDIF +DO JJ = 1,SIZE(PSOLAR) + + IF (PMAXSOLAR(JJ)<=0) THEN + ZTRANSMIS = 0.5 + ELSEIF (PMAXSOLAR(JJ)<PSOLAR(JJ)) THEN + ZTRANSMIS = 1.0 + ELSE + ZTRANSMIS = PSOLAR(JJ) / PMAXSOLAR(JJ) + ENDIF + +! ESTIMATE DIFFUSE FRACTION BASED ON DAILY TRANSMISSION (RODERICK 1999, GOUDRIANN AND VAN LAAR 1994- P.33) + +! IF (TRANSMIS > 0.81) THEN +! FRACDIFF = 0.05 +! ELSEIF (TRANSMIS > TRANSMIN) THEN +! FRACDIFF = 0.96-TRANSSLOPE * (TRANSMIS - TRANSMIN) +! ELSE +! FRACDIFF = 0.96 +! ENDIF + +! THE FRACTION OF TOTAL SOLAR RADIATION THAT IS PPFD (43% TO 55%) +! G. AND L. 84 +! PPFDFRAC = 0.43 + FRACDIFF * 0.12 + +!FRACDIFF IS BASED ON LIZASO 2005 +!MODIFIED BY XUEMEI 2010-01-26 ACCORDING TO ALEX'S DOCUMENT + ZFRACDIFF = 0.156 + 0.86/(1 + EXP(11.1*(ZTRANSMIS -0.53))) + +!PPFDFRAC IS BASED ON G.L. 84 +!MODIFIED BY XUEMEI 2010-01-26 ACCORDING TO ALEX'S DOCUMENT + ZPPFDFRAC = 0.55 -ZTRANSMIS*0.12 + +!PPFDDIFFRAC IS BASED ON DATA IN JACOVIDES 2007 +!MODIFIED BY XUEMEI 2010-01-26 ACCORDING TO ALEX'S DOCUMENT + ZPPFDDIFFRAC = ZFRACDIFF * (1.06 + ZTRANSMIS*0.4) + +! CALCULTE QDIFFV,QBEAMV, QDIFFN, QBEAMN IN THE SUBROUTINE +! MODIFIED BY XUEMEI 2010-01-26 ACCORDING TO ALEX'S DOCUMENT + IF (ZPPFDDIFFRAC > 1.0) ZPPFDDIFFRAC = 1.0 + + ZQV = ZPPFDFRAC * PSOLAR(JJ) + PQDIFFV(JJ) = ZQV * ZPPFDDIFFRAC + PQBEAMV(JJ) = ZQV - PQDIFFV(JJ) + ZQN = PSOLAR(JJ) - ZQV + PQDIFFN(JJ) = ZQN * ZFRACDIFF + PQBEAMN(JJ) = ZQN - PQDIFFN(JJ) + +ENDDO + +END SUBROUTINE SOLARFRACTIONS + +!OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO +! +! SUBROUTINE CANOPYRAD +! +! CANOPY LIGHT ENVIRONMENT MODEL +! CODE DEVELOPED BY ALEX GUENTHER, BASED ON SPITTERS ET AL. (1986), +! GOUDRIAN AND LAAR (1994), LEUNING (1997) +! INITIAL CODE 8-99, MODIFIED 7-2000 AND 12-2001 +! +!OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO +SUBROUTINE CANOPYRAD(KCANTYPE, PCANOPYCHAR, PDISTGAUSS, & + PLAI, PSINBETA, PQBEAMV, PQDIFFV, PQBEAMN, PQDIFFN, & + PSUNFRAC, PSUNQV, PSHADEQV, PSUNQN, PSHADEQN, & + PSUNPPFD, PSHADEPPFD, & + PQDABSV, PQDABSN, PQSABSV, PQSABSN, PQBABSV, PQBABSN) + +IMPLICIT NONE + +! INPUT +INTEGER, INTENT(IN) :: KCANTYPE +REAL, DIMENSION(:,:), INTENT(IN) :: PCANOPYCHAR +REAL, DIMENSION(:), INTENT(IN) :: PDISTGAUSS +! +REAL, DIMENSION(:), INTENT(IN) :: PLAI, PSINBETA, PQBEAMV, PQDIFFV, PQBEAMN, PQDIFFN +! OUTPUT +REAL, DIMENSION(:,:), INTENT(OUT) :: PSUNFRAC, PSUNQV, PSHADEQV, & + PSUNQN, PSHADEQN, PSHADEPPFD, PSUNPPFD +REAL, DIMENSION(:,:), INTENT(OUT), OPTIONAL :: PQDABSV, PQDABSN, PQSABSV, PQSABSN +REAL, DIMENSION(:), INTENT(OUT), OPTIONAL :: PQBABSV, PQBABSN + +! INTERNAL VARIABLES +REAL, DIMENSION(SIZE(PQBEAMV)) :: ZKB, ZLAIDEPTH, ZQDABSVL, ZQSABSVL, ZQDABSNL, ZQSABSNL, & + ZREFLBV, ZREFLBN, ZKBPV, ZKBPN, ZKDPV, ZKDPN +REAL, DIMENSION(SIZE(PQBEAMV)) :: ZQBABSV, ZQBABSN +REAL :: ZSCATV, ZSCATN, ZREFLDV, ZREFLDN, ZKD, ZCLUSTER +! +INTEGER :: JI, JJ +! +!--------------------------------------------------------------------- + + +! SCATTERING COEFFICIENTS (SCATV,SCATN), DIFFUSE AND BEAM REFLECTION +! COEFFICIENTS (REF..) FOR VISIBLE OR NEAR IR +ZSCATV = PCANOPYCHAR(5,KCANTYPE) +ZSCATN = PCANOPYCHAR(6,KCANTYPE) +ZREFLDV = PCANOPYCHAR(7,KCANTYPE) +ZREFLDN = PCANOPYCHAR(8,KCANTYPE) +ZCLUSTER = PCANOPYCHAR(9,KCANTYPE) +! +! EXTINCTION COEFFICIENTS FOR BLACK LEAVES FOR BEAM (KB) OR DIFFUSE (KD) +ZKB(:) = ZCLUSTER * 0.5 / MAX(0.00002,PSINBETA(:)) +! (0.5 ASSUMES A SPHERICAL LEAF ANGLE DISTRIBUTION (0.5 = COS (60 DEG)) +ZKD = 0.8 * ZCLUSTER +! (0.8 ASSUMES A SPHERICAL LEAF ANGLE DISTRIBUTION) + +CALL CALCEXTCOEFF(ZSCATV,ZKD,PQBEAMV,ZKB,ZREFLBV,ZKBPV,ZKDPV,ZQBABSV) +CALL CALCEXTCOEFF(ZSCATN,ZKD,PQBEAMN,ZKB,ZREFLBN,ZKBPN,ZKDPN,ZQBABSN) + +PSUNFRAC(:,:) = 0. +DO JI = 1,NLAYERS + +! PLAI DEPTH AT THIS LAYER + ZLAIDEPTH(:) = PLAI(:) * PDISTGAUSS(JI) +!FRACTION OF LEAVES THAT ARE SUNLIT + PSUNFRAC(:,JI) = EXP(-ZKB(:) * ZLAIDEPTH(:)) + + CALL CALCRADCOMPONENTS(ZSCATV, ZREFLDV, PQDIFFV, PQBEAMV, ZKDPV, ZKBPV, ZKB, & + ZREFLBV, ZLAIDEPTH, ZQDABSVL, ZQSABSVL) + + CALL CALCRADCOMPONENTS(ZSCATN, ZREFLDN, PQDIFFN, PQBEAMN, ZKDPN, ZKBPN, ZKB, & + ZREFLBN, ZLAIDEPTH, ZQDABSNL, ZQSABSNL) + + PSHADEPPFD(:,JI) = (ZQDABSVL(:) + ZQSABSVL(:)) * XCONVERTSHADEPPFD / (1. - ZSCATV) + PSUNPPFD (:,JI) = PSHADEPPFD(:,JI) + (ZQBABSV(:) * XCONVERTSUNPPFD / (1. - ZSCATV)) + PSHADEQV (:,JI) = ZQDABSVL(:) + ZQSABSVL(:) + PSUNQV (:,JI) = PSHADEQV(:,JI) + ZQBABSV(:) + PSHADEQN (:,JI) = ZQDABSNL(:) + ZQSABSNL(:) + PSUNQN (:,JI) = PSHADEQN(:,JI) + ZQBABSN(:) + IF (PRESENT(PQDABSV)) PQDABSV (:,JI) = ZQDABSVL(:) + IF (PRESENT(PQSABSV)) PQSABSV (:,JI) = ZQSABSVL(:) + IF (PRESENT(PQDABSN)) PQDABSN (:,JI) = ZQDABSNL(:) + IF (PRESENT(PQSABSN)) PQSABSN (:,JI) = ZQSABSNL(:) + +ENDDO + +DO JJ = 1,SIZE(PQBEAMV) + + IF ( (PQBEAMV(JJ)+PQDIFFV(JJ))<=0.001 .OR. PSINBETA(JJ)<=0.00002 .OR. PLAI(JJ)<=0.001 ) THEN + ! DAYTIME + ZQBABSV(JJ) = 0. + ZQBABSN(JJ) = 0. + + PSUNFRAC (JJ,:) = 0.2 + PSUNQN (JJ,:) = 0. + PSHADEQN (JJ,:) = 0. + PSUNQV (JJ,:) = 0. + PSHADEQV (JJ,:) = 0. + PSUNPPFD (JJ,:) = 0. + PSHADEPPFD(JJ,:) = 0. + IF (PRESENT(PQDABSV)) PQDABSV(JJ,:) = 0. + IF (PRESENT(PQSABSV)) PQSABSV(JJ,:) = 0. + IF (PRESENT(PQDABSN)) PQDABSN(JJ,:) = 0. + IF (PRESENT(PQSABSN)) PQSABSN(JJ,:) = 0. + + ENDIF + +END DO + +IF (PRESENT(PQBABSV)) PQBABSV(:) = ZQBABSV(:) +IF (PRESENT(PQBABSN)) PQBABSN(:) = ZQBABSN(:) + +END SUBROUTINE CANOPYRAD + +!OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO +! +! SUBROUTINE CALCEXTCOEFF +! +!OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO + +SUBROUTINE CALCEXTCOEFF(PSCAT, PKD, PQBEAM, PKB, PREFLB, PKBP, PKDP, PQBEAMABSORB) +! +IMPLICIT NONE +! +REAL, INTENT(IN) :: PSCAT, PKD +REAL, DIMENSION(:), INTENT(IN) :: PQBEAM, PKB +REAL, DIMENSION(:), INTENT(OUT) :: PREFLB, PKBP, PKDP, PQBEAMABSORB + +! LOCAL VARIABLES +REAL :: ZP +INTEGER :: JJ +!------------------------------------------------------------------- + +ZP = (1.-PSCAT)**0.5 + +DO JJ = 1,SIZE(PKB) + + PREFLB(JJ) = 1. - EXP((-2. * ((1.-ZP)/(1.+ZP)) * PKB(JJ)) / (1. + PKB(JJ))) + + ! EXTINCTION COEFFICIENTS + PKBP(JJ) = PKB(JJ) * ZP + PKDP(JJ) = PKD * ZP + ! ABSORBED BEAM RADIATION + PQBEAMABSORB(JJ) = PKB(JJ) * PQBEAM(JJ) * (1 - PSCAT) + +ENDDO + +END SUBROUTINE CALCEXTCOEFF + +!OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO +! +! SUBROUTINE CALCRADCOMPONENTS +! +!OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO + +SUBROUTINE CALCRADCOMPONENTS(PSCAT, PREFLD, PQDIFF, PQBEAM, PKDP, PKBP, PKB, & + PREFLB, PLAIDEPTH, PQDABS, PQSABS) + +IMPLICIT NONE + +REAL, INTENT(IN) :: PSCAT, PREFLD +REAL, DIMENSION(:), INTENT(IN) :: PQDIFF, PQBEAM, PKDP, PKBP, PKB, PREFLB, PLAIDEPTH +REAL, DIMENSION(:), INTENT(OUT) :: PQDABS, PQSABS +!------------------------------------------------------------------- + +PQDABS(:) = PQDIFF(:) * PKDP(:) * (1. - PREFLD) * EXP(-PKDP(:) * PLAIDEPTH(:)) +PQSABS(:) = PQBEAM(:) * ((PKBP(:) * (1. - PREFLB(:)) * EXP(-PKBP(:) * PLAIDEPTH(:))) & + - (PKB(:) * (1. - PSCAT) * EXP(-PKB (:) * PLAIDEPTH(:)))) + +END SUBROUTINE CALCRADCOMPONENTS + +!OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO +! +! SUBROUTINE CANOPYEB +! +! CANOPY ENERGY BALANCE MODEL FOR ESTIMATING LEAF TEMPERATURE +! CODE DEVELOPED BY ALEX GUENTHER, BASED ON GOUDRIAN AND LAAR (1994), +! LEUNING (1997) +! INITIAL CODE 8-99, MODIFIED 7-2000 AND 12-2001 +! +! NOTE: I DENOTES AN ARRAY CONTAINING A VERTICAL PROFILE THROUGH THE +! CANOPY WITH 0 +! (ABOVE CANOPY CONDITIONS) PLUS 1 TO NUMBER OF CANOPY LAYERS +!OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO + +SUBROUTINE CANOPYEB(KCANTYPE, PCANOPYCHAR, PDISTGAUSS, PSTOMATADI, & + PTAIRK0, PWS0, PTRATE, PHUMIDAIRPA0, & + PSUNQV, PSHADEQV, PSUNQN, PSHADEQN, PSUNPPFD, PSHADEPPFD, & + PSUNLEAFTK, PSHADELEAFTK, PSUNLEAFSH, PSHADELEAFSH, & + PTAIRK, PHUMIDAIRPA, PWS, & + PSUNLEAFLH, PSUNLEAFIR, PSHADELEAFLH, PSHADELEAFIR) + +IMPLICIT NONE + +! INPUTS +INTEGER, INTENT(IN) :: KCANTYPE +REAL, DIMENSION(:,:), INTENT(IN) :: PCANOPYCHAR +REAL, DIMENSION(:), INTENT(IN) :: PDISTGAUSS +REAL, INTENT(IN) :: PSTOMATADI +! +REAL, DIMENSION(:), INTENT(IN) :: PTRATE, PTAIRK0, PWS0, PHUMIDAIRPA0 +REAL, DIMENSION(:,:), INTENT(IN) :: PSUNQV, PSHADEQV, & + PSUNQN, PSHADEQN, PSUNPPFD, PSHADEPPFD + +! OUTPUTS +REAL, DIMENSION(:,:), INTENT(OUT) :: PSUNLEAFTK, PSHADELEAFTK, PSUNLEAFSH, PSHADELEAFSH +! +REAL, DIMENSION(:,:), INTENT(OUT), OPTIONAL :: PTAIRK, PHUMIDAIRPA, PWS, & + PSUNLEAFLH, PSHADELEAFLH,& + PSUNLEAFIR, PSHADELEAFIR +! LOCAL VARIABLES +REAL :: ZLDEPTH, ZWSH +REAL, DIMENSION(SIZE(PTRATE)) :: ZTAIRK, ZHUMIDAIRPA, ZWS, & + ZSUNLEAFLH, ZSHADELEAFLH, ZSUNLEAFIR, ZSHADELEAFIR +! +REAL, DIMENSION(SIZE(PTRATE)) :: ZDELTAH, ZIRIN, ZIROUT +REAL :: ZCDEPTH, ZLWIDTH, ZLLENGTH, ZCHEIGHT, ZEPS, ZTRANSPIRETYPE +INTEGER :: JI +! +!----------------------------------------------------------------------- + +ZCDEPTH = PCANOPYCHAR(1, KCANTYPE) +!ZLWIDTH = PCANOPYCHAR(2, KCANTYPE) +ZLLENGTH = PCANOPYCHAR(3, KCANTYPE) +ZCHEIGHT = PCANOPYCHAR(4, KCANTYPE) +ZEPS = PCANOPYCHAR(10,KCANTYPE) +ZTRANSPIRETYPE = PCANOPYCHAR(11,KCANTYPE) + +WHERE ( PTAIRK0(:) >288. ) +! PA M-1 (PHUMIDITY PROFILE FOR T < 288) + ZDELTAH(:) = PCANOPYCHAR(14,KCANTYPE) / ZCHEIGHT +ELSEWHERE ( PTAIRK0(:)>278. ) + ZDELTAH(:) = ( PCANOPYCHAR(14,KCANTYPE) - ( (288.-PTAIRK0(:))/10.) * & + ( PCANOPYCHAR(14,KCANTYPE) - PCANOPYCHAR(15,KCANTYPE)) ) / ZCHEIGHT +ELSEWHERE +! PA M-1 (PHUMIDITY PROFILE FOR T <278) + ZDELTAH(:) = PCANOPYCHAR(15,KCANTYPE) / ZCHEIGHT +END WHERE + +DO JI = 1,SIZE(PDISTGAUSS) + + ZLDEPTH = ZCDEPTH * PDISTGAUSS(JI) + ZWSH = ( ZCHEIGHT - ZLDEPTH ) - ( PCANOPYCHAR(16,KCANTYPE) * ZCHEIGHT ) + + ZTAIRK (:) = PTAIRK0 (:) + (PTRATE (:) * ZLDEPTH) ! CHECK THIS + ZHUMIDAIRPA(:) = PHUMIDAIRPA0(:) + (ZDELTAH(:) * ZLDEPTH) + IF ( ZWSH.GT.1E-3 ) THEN + ZWS(:) = ( PWS0(:) * LOG(ZWSH) / LOG(ZCHEIGHT-PCANOPYCHAR(16,KCANTYPE)*ZCHEIGHT) ) + ELSE + ZWS(:) = 0.05 + END IF + + ZIRIN(:) = UNEXPOSEDLEAFIRIN(ZEPS, ZTAIRK) + + ZSUNLEAFIR(:) = 0.5 * EXPOSEDLEAFIRIN(PHUMIDAIRPA0,PTAIRK0) + 1.5*ZIRIN(:) + +! SUN + CALL LEAFEB(ZEPS, ZTRANSPIRETYPE, ZLLENGTH, PSTOMATADI, & + PSUNPPFD(:,JI), PSUNQV(:,JI)+PSUNQN(:,JI), & + ZSUNLEAFIR, ZTAIRK, ZHUMIDAIRPA, ZWS, & + PSUNLEAFTK(:,JI), PSUNLEAFSH(:,JI), ZSUNLEAFLH, & + ZIROUT ) +! + IF (PRESENT(PSUNLEAFIR)) PSUNLEAFIR(:,JI) = ZSUNLEAFIR(:) - ZIROUT(:) + +! SHADE + ZSHADELEAFIR(:) = 2. * ZIRIN(:) + + CALL LEAFEB(ZEPS, ZTRANSPIRETYPE, ZLLENGTH, PSTOMATADI, & + PSHADEPPFD(:,JI), PSHADEQV(:,JI)+PSHADEQN(:,JI), & + ZSHADELEAFIR, ZTAIRK, ZHUMIDAIRPA, ZWS, & + PSHADELEAFTK(:,JI), PSHADELEAFSH(:,JI), ZSHADELEAFLH, & + ZIROUT ) +! + IF (PRESENT(PSHADELEAFIR)) PSHADELEAFIR(:,JI) = ZSHADELEAFIR(:) - ZIROUT(:) + + IF (PRESENT(PTAIRK)) PTAIRK (:,JI) = ZTAIRK (:) + IF (PRESENT(PHUMIDAIRPA)) PHUMIDAIRPA (:,JI) = ZHUMIDAIRPA (:) + IF (PRESENT(PWS)) PWS (:,JI) = ZWS (:) + IF (PRESENT(PSUNLEAFLH)) PSUNLEAFLH (:,JI) = ZSUNLEAFLH (:) + IF (PRESENT(PSHADELEAFLH)) PSHADELEAFLH(:,JI) = ZSHADELEAFLH(:) + +ENDDO +! +END SUBROUTINE CANOPYEB + +!OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO +! +! SUBROUTINE LEAFEB +! +! LEAF ENERGY BALANCE +! +!OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO + +SUBROUTINE LEAFEB(PEPS, PTRANSPIRETYPE, PLLENGTH, PSTOMATADI, & + PPFD, PQ, PIRIN, PTAIRK, PHUMIDAIRPA, PWS, & + PTLEAF, PSH, PLH, PIROUT) + +IMPLICIT NONE + +REAL, INTENT(IN) :: PEPS, PTRANSPIRETYPE, PLLENGTH, PSTOMATADI +REAL, DIMENSION(:), INTENT(IN) :: PPFD, PQ, PIRIN, PTAIRK, PHUMIDAIRPA, PWS +REAL, DIMENSION(:), INTENT(OUT) :: PTLEAF, PSH, PLH, PIROUT + +! LOCAL VARIABLES +REAL, DIMENSION(SIZE(PPFD)) :: ZHUMIDAIRKGM3, ZGHFORCED, ZSTOMRES, ZIROUTAIRT, ZLATHV, & + ZLHAIRT, ZTDELT, ZBALANCE, ZGH1, ZSH1, ZLH1, ZE1, ZIROUT1, ZGH, & + ZTAIRK, ZVAPDEFICIT +INTEGER :: JI +!---------------------------------------------------- + +! AIR VAPOR DENSITY KG M-3 +ZHUMIDAIRKGM3(:) = CONVERTHUMIDITYPA2KGM3(PHUMIDAIRPA, PTAIRK) + +! LATENT HEAT OF VAPORIZATION (J KG-1) +ZLATHV(:) = LHV(PTAIRK) +! +! HEAT CONVECTION COEFFICIENT (W M-2 K-1) FOR FORCED CONVECTION. +! NOBEL PAGE 366 +ZGHFORCED(:) = 0.0259 / (0.004 * ((PLLENGTH / PWS(:))**0.5)) +! +! STOMATAL RESISTENCE S M-1 +ZSTOMRES (:) = RESSC(PSTOMATADI, PPFD) +! +! LATENT HEAT FLUX +ZVAPDEFICIT(:) = SVDTK(PTAIRK(:)) - ZHUMIDAIRKGM3(:) +ZLHAIRT(:) = LEAFLE(PTRANSPIRETYPE, ZVAPDEFICIT, ZLATHV, ZGHFORCED, ZSTOMRES) +! +ZIROUTAIRT(:) = LEAFIROUT(PEPS, PTAIRK) +ZE1(:) = (PQ(:) + PIRIN(:) - ZIROUTAIRT(:) - ZLHAIRT(:)) +WHERE ( ZE1(:).EQ.0. ) ZE1(:) = -1. +! +ZTDELT (:) = 1. +ZBALANCE(:) = 10. +DO JI = 1, 10 + ! + WHERE ( ABS(ZBALANCE(:))>2. ) + ! + ZTAIRK (:) = PTAIRK(:) + ZTDELT(:) + ! + ! LATENT HEAT OF VAPORIZATION (J KG-1) + ZLATHV(:) = LHV(ZTAIRK) + ! BOUNDARY LAYER CONDUCTANCE + ZGH1 (:) = LEAFBLC(PLLENGTH, ZGHFORCED, ZTDELT) + ! + ZVAPDEFICIT(:) = SVDTK(ZTAIRK(:)) - ZHUMIDAIRKGM3(:) + PLH (:) = LEAFLE(PTRANSPIRETYPE, ZVAPDEFICIT, ZLATHV, ZGH1, ZSTOMRES) + ! + PIROUT (:) = LEAFIROUT(PEPS, PTAIRK+ZTDELT) + ZIROUT1(:) = PIROUT(:) - ZIROUTAIRT(:) + ! + ! CONVECTIVE HEAT FLUX + ZSH1(:) = LEAFH(ZTDELT, ZGH1) + ZLH1(:) = PLH(:) - ZLHAIRT(:) + ! + ZTDELT (:) = ZE1(:) / ((ZSH1(:) + ZLH1(:) + ZIROUT1(:)) / ZTDELT(:)) + ZBALANCE(:) = PQ(:) + PIRIN(:) - PIROUT(:) - ZSH1(:) - PLH(:) + END WHERE + ! + IF (ALL(ZBALANCE(:)<=2.)) EXIT + ! +ENDDO +! +ZTDELT(:) = MAX(-10.,MIN(ZTDELT(:),10.)) +! +PTLEAF(:) = PTAIRK(:) + ZTDELT(:) +! +ZGH(:) = LEAFBLC(PLLENGTH, ZGHFORCED, ZTDELT) +PSH(:) = LEAFH (ZTDELT, ZGH) +! +ZVAPDEFICIT(:) = SVDTK(PTLEAF(:)) - ZHUMIDAIRKGM3(:) +PLH(:) = LEAFLE (PTRANSPIRETYPE, ZVAPDEFICIT, ZLATHV, ZGH, ZSTOMRES) +PIROUT(:) = LEAFIROUT(PEPS, PTLEAF) +! +END SUBROUTINE LEAFEB + +!OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO +! +! FUNCTION DISTOMATA +! +!OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO + +FUNCTION DISTOMATA(PDI) RESULT(PDISTOMATA) + +IMPLICIT NONE + +REAL, INTENT(IN) :: PDI +REAL :: PDISTOMATA +INTEGER :: JJ +! > -.5 INCIPIENT, MILD OR NO DROUGHT; < -4 EXTREME DROUGHT +!-------------------------------------------------------------------- + +IF ( PDI>XDIHIGH ) THEN + PDISTOMATA = 1. ! NO DROUGHT +ELSEIF ( PDI>XDILOW ) THEN + ! INTERPOLATE + PDISTOMATA = 1. - (0.9 * ((PDI - XDIHIGH) / (XDILOW - XDIHIGH))) +ELSE + PDISTOMATA = 0. ! MAXIMUM DROUGHT, MAXIMUM STOMATAL RESISTANCE +ENDIF + +END FUNCTION DISTOMATA + +!OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO +! +! FUNCTION CALCECCENTRICITY +! +!OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO + +FUNCTION CALCECCENTRICITY(KDAY) RESULT(PCALCECCENTRICITY) + +IMPLICIT NONE + +INTEGER, DIMENSION(:), INTENT(IN) :: KDAY +! +REAL, DIMENSION(SIZE(KDAY)) :: PCALCECCENTRICITY +! +!-------------------------------------------------------------------- + +PCALCECCENTRICITY(:) = 1. + 0.033 * COS(2*3.14*(KDAY(:)-10)/365) + +END FUNCTION CALCECCENTRICITY + +!OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO +! +! FUNCTION UNEXPOSEDLEAFIRIN +! +! CALCULATE IR INTO LEAF THAT IS NOT EXPOSED TO THE SKY +! +!OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO + +FUNCTION UNEXPOSEDLEAFIRIN(PEPS, PTK) RESULT(PUNEXPOSEDLEAFIRIN) + +IMPLICIT NONE + +REAL, INTENT(IN) :: PEPS +REAL, DIMENSION(:), INTENT(IN) :: PTK +REAL, DIMENSION(SIZE(PTK)) :: PUNEXPOSEDLEAFIRIN +!-------------------------------------------------------------------- + +PUNEXPOSEDLEAFIRIN(:) = PEPS * XSB * (PTK(:)**4.) + +END FUNCTION UNEXPOSEDLEAFIRIN + +!OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO +! +! FUNCTION EXPOSEDLEAFIRIN +! +! CALCULATE IR INTO LEAF THAT IS EXPOSED TO THE SKY +! +!OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO + +FUNCTION EXPOSEDLEAFIRIN(PHUMIDPA, PTK) RESULT(PEXPOSEDLEAFIRIN) + +IMPLICIT NONE + +REAL, DIMENSION(:), INTENT(IN) :: PTK, PHUMIDPA +REAL, DIMENSION(SIZE(PTK)) :: PEXPOSEDLEAFIRIN +REAL :: ZEMISSATM +INTEGER :: JJ +!-------------------------------------------------------------------- + +! APPARENT ATMOSPHERIC EMISSIVITY FOR CLEAR SKIES: +! FUNCTION OF WATER VAPOR PRESSURE (PA) +! AND AMBIENT TEMPERATURE (K) BASED ON BRUTSAERT(1975) +! REFERENCED IN LEUNING (1997) + +DO JJ = 1,SIZE(PTK) + ZEMISSATM = 0.642 * (PHUMIDPA(JJ) / PTK(JJ))**(1./7.) + PEXPOSEDLEAFIRIN(JJ) = ZEMISSATM * XSB * (PTK(JJ)**4.) +ENDDO + +END FUNCTION EXPOSEDLEAFIRIN + +!OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO +! +! FUNCTION WATERVAPPRES +! +! CONVERT WATER MIXING RATIO (KG/KG) TO WATER VAPOR PRESSURE +! (PA OR KPA DEPENDING ON UNITS OF INPUT ) +! MIXING RATIO (KG/KG), TEMP (C), PRESSURE (KPA) +! +!OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO + +FUNCTION WATERVAPPRES(PWATERAIRRATIO, PDENS, PRES) RESULT(PWATERVAPPRES) + +IMPLICIT NONE + +REAL, INTENT(IN) :: PWATERAIRRATIO +REAL, DIMENSION(:), INTENT(IN) :: PDENS, PRES +REAL, DIMENSION(SIZE(PDENS)) :: PWATERVAPPRES +!-------------------------------------------------------------------- + +PWATERVAPPRES(:) = (PDENS(:) / (PDENS(:) + PWATERAIRRATIO)) * PRES(:) + +END FUNCTION WATERVAPPRES + +!OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO +! +! FUNCTION STABILITY +! +!OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO + +FUNCTION STABILITY(PCANOPYCHAR, KCANTYPE, PSOLAR) RESULT(PSTABILITY) + +IMPLICIT NONE +! +REAL, DIMENSION(:,:), INTENT(IN) :: PCANOPYCHAR +INTEGER, INTENT(IN) :: KCANTYPE +REAL, DIMENSION(:), INTENT(IN) :: PSOLAR +REAL, DIMENSION(SIZE(PSOLAR)) :: PSTABILITY +REAL :: ZTRATEBOUNDARY +INTEGER :: JJ +!-------------------------------------------------------------------- + +ZTRATEBOUNDARY = 500 + +DO JJ = 1,SIZE(PSOLAR) + IF ( PSOLAR(JJ)>ZTRATEBOUNDARY ) THEN + ! DAYTIME TEMPERATURE LAPSE RATE + PSTABILITY(JJ) = PCANOPYCHAR(12,KCANTYPE) + ELSEIF ( PSOLAR(JJ)>0. ) THEN + PSTABILITY(JJ) = PCANOPYCHAR(12,KCANTYPE) - & + ( (ZTRATEBOUNDARY - PSOLAR(JJ)) / ZTRATEBOUNDARY ) * & + (PCANOPYCHAR(12,KCANTYPE) - PCANOPYCHAR(13,KCANTYPE)) + ELSE + ! NIGHTIME TEMPERATURE LAPSE RATE + PSTABILITY = PCANOPYCHAR(13,KCANTYPE) + ENDIF +ENDDO + +END FUNCTION STABILITY + +!OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO +! +! FUNCTION CONVERTHUMIDITYPA2KGM3 +! +! SATURATION VAPOR DENSITY (KG/M3) +! +!OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO + +FUNCTION CONVERTHUMIDITYPA2KGM3(PA, PTK) RESULT(PCONVERTHUMIDITYPA2KGM3) + +IMPLICIT NONE + +REAL, DIMENSION(:), INTENT(IN) :: PA, PTK +REAL, DIMENSION(SIZE(PA)) :: PCONVERTHUMIDITYPA2KGM3 +!-------------------------------------------------------------------- + +PCONVERTHUMIDITYPA2KGM3(:) = 0.002165 * PA(:) / PTK(:) + +END FUNCTION CONVERTHUMIDITYPA2KGM3 + +!OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO +! +! FUNCTION RESSC +! +! LEAF STOMATAL COND. RESISTANCE S M-1 +! +!OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO + +FUNCTION RESSC(PSTOMATADI, PAR) RESULT(PRESSC) + +IMPLICIT NONE + +REAL, INTENT(IN) :: PSTOMATADI +REAL, DIMENSION(:), INTENT(IN) :: PAR +REAL, DIMENSION(SIZE(PAR)) :: PRESSC +REAL, DIMENSION(SIZE(PAR)) :: ZSCADJ +INTEGER :: JJ +!-------------------------------------------------------------------- + +ZSCADJ(:) = PSTOMATADI * & + ( (0.0027*1.066*PAR(:)) / ((1 + 0.0027*0.0027*PAR(:)**2.)**0.5) ) +! +WHERE (ZSCADJ(:)<0.1) + PRESSC(:) = 2000. +ELSE WHERE + PRESSC(:) = 200./ZSCADJ(:) +END WHERE + +END FUNCTION RESSC + +!OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO +! +! FUNCTION LEAFIROUT +! +! IR THERMAL RADIATION ENERGY OUTPUT BY LEAF +! +!OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO + +FUNCTION LEAFIROUT(PEPS, PTLEAF) RESULT(PLEAFIROUT) + +IMPLICIT NONE + +REAL, INTENT(IN) :: PEPS +REAL, DIMENSION(:), INTENT(IN) :: PTLEAF +REAL, DIMENSION(SIZE(PTLEAF)) :: PLEAFIROUT +!-------------------------------------------------------------------- + +! PRINT*,'EPS, SB, TLEAF =', EPS, SB, TLEAF +PLEAFIROUT(:) = PEPS * XSB * (2 * (PTLEAF(:)**4.)) + +END FUNCTION LEAFIROUT + +!OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO +! +! FUNCTION LHV +! +! LATENT HEAT OF VAPORIZATION(J KG-1) FROM STULL P641 +! +!OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO + +FUNCTION LHV(PTK) RESULT(PLHV) + +IMPLICIT NONE + +REAL, DIMENSION(:), INTENT(IN) :: PTK +REAL, DIMENSION(SIZE(PTK)) :: PLHV +!-------------------------------------------------------------------- + +PLHV(:) = 2501000. - (2370. * (PTK(:) - 273.)) + +END FUNCTION LHV + +!OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO +! +! FUNCTION LEAFLE +! +! LATENT ENERGY TERM IN ENERGY BALANCE +! +!OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO + +FUNCTION LEAFLE(PTRANSPIRETYPE, PVAPDEFICIT, PLATHV, PGH, PSTOMRES) RESULT(PLEAFLE) + +IMPLICIT NONE + +REAL, INTENT(IN) :: PTRANSPIRETYPE +REAL, DIMENSION(:), INTENT(IN) :: PVAPDEFICIT, PLATHV, PGH, PSTOMRES +REAL, DIMENSION(SIZE(PLATHV)) :: PLEAFLE +REAL, DIMENSION(SIZE(PLATHV)) :: ZLEAFRES +!INTEGER :: JJ +!-------------------------------------------------------------------- + +ZLEAFRES(:) = (1. / (1.075 * (PGH(:) / 1231.))) + PSTOMRES(:) + +! LATENT HEAT OF VAP (J KG-1) * VAP DEFICIT(KG M-3) / +! LEAF RESISTENCE (S M-1) +PLEAFLE(:) = PTRANSPIRETYPE * (1./ZLEAFRES(:)) * PLATHV(:) * PVAPDEFICIT(:) +! +PLEAFLE(:) = MAX(PLEAFLE(:),0.) +! +END FUNCTION LEAFLE + +!OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO +! +! FUNCTION LEAFBLC +! +! BOUNDARY LAYER CONDUCTANCE +! +!OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO + +FUNCTION LEAFBLC(PLLENGTH, PGHFORCED, PTDELTA) RESULT(PLEAFBLC) + +IMPLICIT NONE + +REAL, INTENT(IN) :: PLLENGTH +REAL, DIMENSION(:), INTENT(IN) :: PGHFORCED, PTDELTA +REAL, DIMENSION(SIZE(PTDELTA)) :: PLEAFBLC +REAL, DIMENSION(SIZE(PTDELTA)) :: ZGHFREE +REAL :: ZLLENGTH3 +INTEGER :: JJ +!-------------------------------------------------------------------- + +! THIS IS BASED ON LEUNING 1995 P.1198 EXCEPT USING MOLECULAR +! CONDUCTIVITY (.00253 W M-1 K-1 STULL P 640) INSTEAD OF MOLECULAR +! DIFFUSIVITY SO THAT YOU END UP WITH A HEAT CONVECTION COEFFICIENT +! (W M-2 K-1) INSTEAD OF A CONDUCTANCE FOR FREE CONVECTION +! +ZLLENGTH3 = PLLENGTH**3 +! +WHERE (PTDELTA(:)>=0.) + ZGHFREE (:) = 0.5 * 0.00253 * ((160000000. * PTDELTA(:) / (ZLLENGTH3))**0.25) / PLLENGTH + PLEAFBLC(:) = PGHFORCED(:) + ZGHFREE(:) +ELSE WHERE + PLEAFBLC(:) = PGHFORCED(:) +END WHERE +! +END FUNCTION LEAFBLC + +!OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO +! +! FUNCTION LEAFH +! +! CONVECTIVE ENERGY TERM IN ENERGY BALANCE (W M-2 HEAT FLUX FROM +! BOTH SIDES OF LEAF) +! +!OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO + +FUNCTION LEAFH(PTDELTA, PGH) RESULT(PLEAFH) + +IMPLICIT NONE + +REAL, DIMENSION(:), INTENT(IN) :: PTDELTA, PGH +REAL, DIMENSION(SIZE(PGH)) :: PLEAFH +!-------------------------------------------------------------------- + +! 2 SIDES X CONDUCTANCE X TEMPERATURE GRADIENT +PLEAFH(:) = 2. * PGH(:) * PTDELTA(:) + +END FUNCTION LEAFH + +!OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO +! +! FUNCTION SVDTK +! +! SATURATION VAPOR DENSITY (KG/M3) +! +!OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO + +FUNCTION SVDTK(PTK) RESULT(PSVDTK) + +IMPLICIT NONE + +REAL, DIMENSION(:), INTENT(IN) :: PTK +REAL, DIMENSION(SIZE(PTK)) :: PSVDTK +REAL, DIMENSION(SIZE(PTK)) :: ZSVP +INTEGER :: JJ +!-------------------------------------------------------------------- + +! SATURATION VAPOR PRESSURE (MILLIBARS) +ZSVP (:) = 10.**((-2937.4 / PTK(:)) - (4.9283 * LOG10(PTK(:))) + 23.5518) +PSVDTK(:) = 0.2165 * ZSVP(:) / PTK(:) + +END FUNCTION SVDTK + +!OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO +! +! FUNCTION EA1T99 +! +! TEMPERATURE DEPENDENCE ACTIVITY FACTOR FOR EMISSION TYPE 1 +! (E.G. ISOPRENE, MBO) +! +!OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO + +FUNCTION EA1T99(HSPC_NAME, PT24, PT240, PT1) RESULT(PEA1T99) + +USE MODI_INDEX1 + +IMPLICIT NONE + +CHARACTER(LEN=16),INTENT(IN) :: HSPC_NAME +REAL, INTENT(IN) :: PT24, PT240 +REAL, DIMENSION(:), INTENT(IN) :: PT1 +REAL, DIMENSION(SIZE(PT1)) :: PEA1T99 +REAL :: ZTOPT, ZX, ZEOPT +INTEGER :: ISPCNUM +INTEGER :: JJ +!-------------------------------------------------------------------- + +ISPCNUM = INDEX1(HSPC_NAME, CMGN_SPC) +! +DO JJ = 1,SIZE(PT1) + + IF ( PT1(JJ)<260. ) THEN + PEA1T99(JJ) = 0. + ELSE + ! ENERGY OF ACTIVATION AND DEACTIVATION + ! TEMPERATURE AT WHICH MAXIMUM EMISSION OCCURS + ZTOPT = 312.5 + 0.6 * (PT240 - 297) + ZX = ((1 / ZTOPT) - (1 / PT1(JJ))) / 0.00831 + + ! MAXIMUM EMISSION (RELATIVE TO EMISSION AT 30 C) + ZEOPT = XCLEO(ISPCNUM) * EXP(0.05 * (PT24 - 297)) * EXP(0.05*(PT240-297)) + PEA1T99(JJ) = ZEOPT * XCTM2 * EXP(XCTM1(ISPCNUM)*ZX) / & + (XCTM2 - XCTM1(ISPCNUM) * (1.-EXP(XCTM2*ZX))) + ENDIF + +ENDDO + +END FUNCTION EA1T99 + +!OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO +! +! FUNCTION EA1PP +! +! PSTD = 200 FOR SUN LEAVES AND 50 FOR SHADE LEAVES +! +!OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO + +FUNCTION EA1P99(PSTD, PPFD24, PPFD240, PPFD1) RESULT(PEA1P99) + +IMPLICIT NONE + +REAL, INTENT(IN) :: PSTD, PPFD24, PPFD240 +REAL, DIMENSION(:), INTENT(IN) :: PPFD1 +REAL, DIMENSION(SIZE(PPFD1)) :: PEA1P99 +REAL :: ZALPHA, ZC1 +INTEGER :: JJ +!-------------------------------------------------------------------- + +DO JJ = 1,SIZE(PPFD1) + + IF ( PPFD240<0.01 ) THEN + PEA1P99(JJ) = 0. + ELSE + ZALPHA = 0.004 - 0.0005 * LOG(PPFD240) + ZC1 = 0.0468 * EXP(0.0005 * (PPFD24 - PSTD)) * (PPFD240**0.6) + PEA1P99(JJ) = (ZALPHA * ZC1 * PPFD1(JJ)) / ((1 + ZALPHA**2. * PPFD1(JJ)**2.)**0.5) + ENDIF + +ENDDO + +END FUNCTION EA1P99 + +!OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO +! +! FUNCTION EALTI99 +! +! CALCULATE LIGHT INDEPENT ALGORITHMS +! CODED BY XUEMEI WANG 05 NOV. 2007 +!-- GAMMA_TLI = EXP[BETA*(T-TS)] +! WHERE BETA = TEMPERATURE DEPENDENT PARAMETER +! TS = STANDARD TEMPERATURE (NORMALLY 303K, 30C) +! +!OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO + +FUNCTION EALTI99(HSPCNAM, PTEMP) RESULT(PEALTI99) + +USE MODI_INDEX1 + +IMPLICIT NONE + +CHARACTER(LEN=16), INTENT(IN) :: HSPCNAM +REAL, DIMENSION(:), INTENT(IN) :: PTEMP +REAL, DIMENSION(SIZE(PTEMP)) :: PEALTI99 +! +INTEGER :: ISPCNUM ! SPECIES NUMBER +!-------------------------------------------------------------------- +ISPCNUM = INDEX1(HSPCNAM, CMGN_SPC) +PEALTI99(:) = EXP( XTDF_PRM(ISPCNUM)*(PTEMP(:)-XTS) ) + +END FUNCTION EALTI99 +! +!OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO +! +END MODULE MODE_MEGAN diff --git a/src/LIB/MEGAN/mode_soilnox.F90 b/src/LIB/MEGAN/mode_soilnox.F90 new file mode 100644 index 000000000..226c006ed --- /dev/null +++ b/src/LIB/MEGAN/mode_soilnox.F90 @@ -0,0 +1,255 @@ +!======================================================================= +! MODULE SOILNOX_FX +! +! This module contain functions to assist soil NOx calculation. +! +! +! CONTAINS: 1)FERTLZ_ADJ +! 2)VEG_ADJ +! 3)GROWSEASON +! +! Note: +! +! Requirement: +! +! +! Imported from SMOKE-BEIS v3.14 and modified +! by Tan 07/21/11 for MEGAN v2.10 +! +! Function PRECADJ is moved to MET2MGN +! PULSETYPE is moved to MET2MGN +! PRECIPFAC is moved to MET2MGN +! +! History: +! +!======================================================================= + +MODULE MODE_SOILNOX + +USE MODI_JULIAN + +IMPLICIT NONE + +!... Program I/O parameters + +!... External parameters + +CONTAINS + +!======================================================================= +!======================================================================= +FUNCTION FERTLZ_ADJ(KDATE, PLAT) RESULT(PFERTLZ_ADJ) + +!*********************************************************************** +! DESCRIPTION: +! This internal function computes a fertilizer adjustment factor +! for the given date in yyyyddd format. If it is not growing +! season, the adjustment factor is 0; otherwise, it ranges from +! 0.0 to 1.0. +! +! CALL: +! GROWSEASON +! +! HISTORY: +! 07/21/11 : Imported from SMOKE-BEIS v3.14 and modified (Tan) +!*********************************************************************** + +IMPLICIT NONE + +!.... Function arguments +INTEGER, INTENT(IN) :: KDATE +REAL, DIMENSION(:), INTENT(IN) :: PLAT +REAL, DIMENSION(SIZE(PLAT)) :: PFERTLZ_ADJ + +!.... Local variables +INTEGER, DIMENSION(SIZE(PLAT)) :: IDAY, ILEN + +!----------------------------------------------------------------------------- + +CALL GROWSEASON(KDATE, PLAT, IDAY, ILEN) + +IF (ANY(IDAY(:)<0).OR.ANY(IDAY(:)>366)) THEN + WRITE(*,*) "MODE_SOILNOX: FERTLZ_ADJ: Invalid date specified" + STOP +ENDIF + +WHERE ( IDAY(:)==0 ) + PFERTLZ_ADJ(:) = 0. +ELSE WHERE( IDAY(:)>=1 .AND. IDAY(:)<30 ) + ! first month of growing season + PFERTLZ_ADJ(:) = 1. +ELSE WHERE( IDAY(:)>=30 .AND. IDAY(:)<=366 ) + ! later month of growing season + PFERTLZ_ADJ(:) = 1. + (30.-FLOAT(IDAY(:)))/(FLOAT(ILEN(:))) +END WHERE + +END FUNCTION FERTLZ_ADJ +!======================================================================= +!======================================================================= + + +!======================================================================= +!======================================================================= +FUNCTION VEG_ADJ(PLAI) RESULT(PVEG_ADJ) + +!*********************************************************************** +! DESCRIPTION +! This internal function computes a vegetation adjustment factor +! based on LAIv. See Yienger and Levy 1995 +! VEG_ADJ = (EXP(-0.24*LAIv)+EXP(-0.0525*LAIv))*0.5 +! +! CALL +! NONE +! +! HISTORY: +!*********************************************************************** + +IMPLICIT NONE + +!... Function arguments +REAL, DIMENSION(:), INTENT(IN) :: PLAI +! +REAL, DIMENSION(SIZE(PLAI)) :: PVEG_ADJ +! +!----------------------------------------------------------------------------- + +PVEG_ADJ = (EXP(-0.24*PLAI)+EXP(-0.0525*PLAI))*0.5 + +!****************** FORMAT STATEMENTS ****************************** + +END FUNCTION VEG_ADJ +!======================================================================= +!======================================================================= + + +!======================================================================= +!======================================================================= +SUBROUTINE GROWSEASON(KDATE, PLAT, KDAY, KLEN) + +!*********************************************************************** +! DESCRIPTION +! This internal function computes the day of the growing season +! corresponding to the given date in yyyyddd format. +! +! CALL +! JULIAN +! +! HISTORY: +! 07/21/11 : Imported from SMOKE-BEIS v3.14 and modified (Tan) +! Variation of growing season depends on latitude +! (Guenther) +!*********************************************************************** + +IMPLICIT NONE + +!....... Function arguments +INTEGER, INTENT(IN) :: KDATE +REAL, DIMENSION(:), INTENT(IN) :: PLAT +! +INTEGER, DIMENSION(:), INTENT(OUT) :: KDAY +INTEGER, DIMENSION(:), INTENT(OUT) :: KLEN + +!....... Local parameters +INTEGER :: ISEASON_START +INTEGER :: ISEASON_END + +!....... Local variables +INTEGER, DIMENSION(SIZE(PLAT)) :: ISJULIAN_START, ISJULIAN_END +INTEGER :: ISJULIAN_START0, ISJULIAN_START1, ISJULIAN_START2 +INTEGER :: ISJULIAN_END1, ISJULIAN_END2 +INTEGER :: IYEAR, IDAY, IDAY_ADD +! +!----------------------------------------------------------------------------- + +IYEAR = INT(KDATE/1000.) +IDAY = KDATE - IYEAR*1000. + +IF( IDAY.LT.1 .OR. IDAY.GT.366 ) THEN + WRITE(*,*) "MODE_SOILNOX: GROWSEASON: Invalid date specified" + STOP +ENDIF + +ISJULIAN_START1 = G2J(IYEAR, 0101) +ISJULIAN_END1 = G2J(IYEAR, 0531) +ISJULIAN_START2 = G2J(IYEAR, 1101) +ISJULIAN_END2 = G2J(IYEAR, 1231) + +IF ( IDAY.GE.1101 .AND. IDAY.LE.1231 ) THEN + ISJULIAN_START0 = ISJULIAN_START2 + IDAY_ADD = 0 +ELSE IF ( IDAY.GE.0101 .AND. IDAY.LE.0531 ) THEN + ISJULIAN_START0 = ISJULIAN_START1 + IDAY_ADD = 61 +ELSE + ISJULIAN_START0 = IDAY + IDAY_ADD = -1 +ENDIF + +WHERE ( PLAT(:).LT.-60. .OR. PLAT(:).GT.65. ) + + ! antarctic start = 0 end = 0, no growing + KDAY(:) = 0 + KLEN(:) = 0 + +ELSE WHERE ( PLAT(:).LE.23. .AND. PLAT(:).GE.-23. ) + + ! tropical regions, year round + KDAY(:) = IDAY - ISJULIAN_START1 + 1 + KLEN(:) = ISJULIAN_END2 - ISJULIAN_START1 + 1 + +ELSE WHERE ( PLAT(:).LT.-23. ) + +! southern hemisphere + KDAY(:) = IDAY - ISJULIAN_START0 + 1 + IDAY_ADD + KLEN(:) = 30 + 31 + ISJULIAN_END1 - ISJULIAN_START1 + 1 + +ELSE WHERE ( PLAT.GT.23. ) + + ! northern hemisphere temperate + ! start= (lat-23)*4.5 189 + ! end = 365 -((lat-23)*3.3) 226 + + ISJULIAN_START(:) = INT( (PLAT(:)-23.0)*4.5 ) + ISJULIAN_END (:) = ISJULIAN_END2 - INT( (PLAT(:)-23.0)*3.3 ) + + WHERE ( IDAY.GE.ISJULIAN_START(:) .AND. IDAY.LE.ISJULIAN_END(:) ) + KDAY(:) = IDAY - ISJULIAN_START(:) + 1 + ELSE WHERE + KDAY(:) = 0 + END WHERE + KLEN(:) = ISJULIAN_END(:) - ISJULIAN_START(:) + 1 + +END WHERE + +!****************** FORMAT STATEMENTS ****************************** + +END SUBROUTINE GROWSEASON +!======================================================================= +!======================================================================= + + +!======================================================================= +!======================================================================= +FUNCTION G2J(KYYYY, KMMDD) RESULT(KG2J) + +IMPLICIT NONE + +!....... Function arguments +INTEGER, INTENT(IN) :: KYYYY +INTEGER, INTENT(IN) :: KMMDD + +INTEGER :: KG2J + +!....... Local parameters +INTEGER :: IMM +INTEGER :: IDD + +IMM = INT(KMMDD/100.) +IDD = KMMDD - IMM*100 +KG2J = JULIAN(KYYYY, IMM, IDD) + +END FUNCTION G2J + +!======================================================================= +!======================================================================= +END MODULE MODE_SOILNOX diff --git a/src/LIB/MEGAN/soilnox.F90 b/src/LIB/MEGAN/soilnox.F90 new file mode 100644 index 000000000..0435a01a2 --- /dev/null +++ b/src/LIB/MEGAN/soilnox.F90 @@ -0,0 +1,172 @@ +SUBROUTINE SOILNOX(KDATE, KTIME, OSOIL, KSLTYP, PRECADJ, & + PLAT, PTA, PSOILM, PSOILT, PLAIC, PCFNO, PCFNOG ) + +!*********************************************************************** +! DESCRIPTION: +! +! Uses new NO algorithm NO = Normalized*Tadj*Padj*Fadj*Cadj +! to estimate NO emissions +! Information needed to estimate NO emissions +! Julian Day (integer) JDATE +! Surface Temperature (MCIP field) TA (K) +! Soil Moisture (MCIP field) SOILM (M**3/M**3) (LSOIL) +! (ratio of volume of water per volume of soil) +! Soil Temperature (MCIP field) SOILT (K) (LSOIL) +! Soil Type (MCIP field) ISLTYP (LSOIL) +! +! saturation values for soil types (constants) (LSOIL) +! FOR PX Version, the Temperature adjustment factor accounts for wet and dry soils +! and the precipitation adjustment factor accounts for saturated soils +! FOR the non-PX version, the basic algorithm remains with a temperature adjustment factor (dry soil) +! and no adjustment for saturated soils +! +! +! The following arrays are updated after each call to SOILNOX +! PULTYPE type of NO emission pulse +! PULSEDATE julian date for the beginning of an NO pulse +! PULSETIME time for the beginning of an NO pulse +! +! The calculation are based on the following paper by J.J. Yienger and H. Levy II +! J.J. Yienger and H. Levy II, Journal of Geophysical Research, vol 100,11447-11464,1995 +! +! The Temperature Adjustment Factor is based on section 4.2 for wet and dry soils with +! the following modification (PX version): +! Instead of classifying soils as either 'wet' or 'dry', the wet and dry adjustment is +! calculated at each grid cell. A linear interpolation between the wet and dry adjustment +! factor is made using the relative amount of soil moisture in the top layer (1cm) +! as the interpolating factor. The relative amount of soil moisture is determined by +! taking the MCIP soil moisture field and dividing by the saturation value defined for each +! soil type in the PX version of MCIP +! the soil temperature is used in PX version +! +! The Precipation Adjustment factor is based on section 4.1 with the following modifications. +! The rainrate is computed from the MCIP directly using a 24 hr daily total. +! THe types of Pulses as described in YL95 were used to estimate the NO emission +! rate. +! +! Also see the following paper for more information: +! Proceedings of the Air and Waste Management Association/U.S. Environmental Protection +! Agency EMission Inventory Conference, Raleigh October 26-28, 1999 Raleigh NC +! by Tom Pierce and Lucille Bender +! +! REFERENCES +! +! JACQUEMIN B. AND NOILHAN J. (1990), BOUND.-LAYER METEOROL., 52, 93-134. +! J.J. Yienger and H. Levy II, Journal of Geophysical Research, vol 100,11447-11464,1995 +! T. Pierce and L. Bender, Examining the Temporal Variability of Ammonia and Nitric Oxide Emissions from Agricultural Processes +! Proceedings of the Air and Waste Management Association/U.S. Environmental Protection +! Agency EMission Inventory Conference, Raleigh October 26-28, 1999 Raleigh NC +! +! PRECONDITIONS REQUIRED: +! Normalized NO emissions, Surface Temperature, Soil Moisture, Soil type, +! NO emission pulse type, soil moisture from previous time step, julian date +! of NO emission pulse start, time of NO emission pulse start, +! soil type, SOIL TYPES, Land use data +! +! SUBROUTINES AND FUNCTIONS CALLED (directly or indirectly): +! FERTILIZER_ADJ computes fertlizer adjustment factor +! VEG_ADJ computes vegatation adjustment factor +! GROWSEASON computes day of growing season +! +! REVISION HISTORY: +! 10/01 : Prototype by GAP +! 10/03 : modified transition to non growing season for jul-oct of the year +! 08/04 : Converted to SMOKE code style by C. Seppanen +! 07/21/11 : Imported form SMOKE-BEIS v3.14 for MEGAN v2.10 +! +!*********************************************************************** + +USE MODE_SOILNOX + +USE MODD_MEGAN + +IMPLICIT NONE + +!......... ARGUMENTS and their descriptions +INTEGER, INTENT(IN) :: KDATE ! current simulation date (YYYYDDD) +INTEGER, INTENT(IN) :: KTIME ! current simulation time (HHMMSS) +LOGICAL, INTENT(IN) :: OSOIL ! true: using PX version of MCIP +! +INTEGER, DIMENSION(:), INTENT(IN) :: KSLTYP ! soil type +! +REAL, INTENT(IN) :: PRECADJ ! precip adjustment +! +REAL, DIMENSION(:), INTENT(IN) :: PLAT ! Latitude +REAL, DIMENSION(:), INTENT(IN) :: PTA ! air temperature (K) +REAL, DIMENSION(:), INTENT(IN) :: PSOILM ! soil moisture (m3/m3) +REAL, DIMENSION(:), INTENT(IN) :: PSOILT ! soil temperature (K) +REAL, DIMENSION(:), INTENT(IN) :: PLAIC ! soil temperature (K) +REAL, DIMENSION(:), INTENT(INOUT) :: PCFNO ! NO correction factor +REAL, DIMENSION(:), INTENT(INOUT) :: PCFNOG ! NO correction factor for grass + +!....... Local ARRAYS +! Saturation values for 11 soil types from pxpbl.F (MCIP PX version) +! PLEIM-XIU LAND-SURFACE AND PBL MODEL (PX-LSM) +! See JACQUEMIN B. AND NOILHAN J. (1990), BOUND.-LAYER METEOROL., 52, 93-134. + +!......... SCRATCH LOCAL VARIABLES and their descriptions: +REAL, DIMENSION(SIZE(PLAT)) :: ZCF ! NO correction factor +REAL :: ZTAIR ! surface temperature +REAL :: ZTSOI ! soil temperature +REAL :: ZCFNOWET, ZCFNODRY, ZRATIO + +INTEGER :: JJ, JL ! counters +INTEGER :: ISOILCAT ! soil category + +!HARACTER(256) MESG ! message buffer + +!HARACTER(16) :: PROGNAME = 'SOILNOX' ! program name + +!*********************************************************************** + +!..... Loop through cells +DO JJ = 1,SIZE(PTA) + + ZTAIR = MIN(PTA(JJ),303.) ! unit in degree K + + IF ( ZTAIR>268.8690 ) THEN + PCFNOG(JJ) = EXP( 0.04686 * ZTAIR - 14.30579 ) ! grass (from BEIS2) + ELSE + PCFNOG(JJ) = 0.0 + END IF + +!....... CFNO + IF( .NOT.OSOIL ) THEN + ZTSOI = 0.72 * ZTAIR + 82.28 + ELSE + ZTSOI = PSOILT(JJ) + ENDIF + + ZTSOI = MIN(MAX(ZTSOI,273.16),303.16) + ZCFNODRY = (1./3.) * (1./30.) * (ZTSOI-273.16) ! see YL 1995 Equa 9a p. 11452 + IF ( ZTSOI<=283.16 ) THEN ! linear cold case + ZCFNOWET = (ZTSOI-273.16)*EXP(-0.103*30.0)*0.28 ! see YL 1995 Equ 7b + ELSE ! exponential case + ZCFNOWET = EXP(0.103 * (ZTSOI-273.16)) * EXP(-0.103 * 30.0) + END IF + + IF( .NOT.OSOIL ) THEN + + ZCF(JJ) = 0.5 * ZCFNOWET + 0.5 * ZCFNODRY + + ELSE + + ! soil + ISOILCAT = KSLTYP(JJ) + IF( ISOILCAT>0 .AND. ISOILCAT<=NMAXSTYPES ) THEN + ZRATIO = PSOILM(JJ) / XSATURATION(ISOILCAT) + ZCF(JJ) = ZRATIO * ZCFNOWET + (1.-ZRATIO) * ZCFNODRY + ELSE + ZCF(JJ) = 0. + END IF + + END IF ! Endif LSOIL + +ENDDO + +PCFNO(:) = ZCF(:) * FERTLZ_ADJ(KDATE,PLAT) * VEG_ADJ(PLAIC) * PRECADJ + +!****************** FORMAT STATEMENTS ****************************** + +END SUBROUTINE SOILNOX + diff --git a/src/LIB/MEGAN/solarangle.F90 b/src/LIB/MEGAN/solarangle.F90 new file mode 100644 index 000000000..60ac5815a --- /dev/null +++ b/src/LIB/MEGAN/solarangle.F90 @@ -0,0 +1,56 @@ +!----------------------------------------------------------------------- +! SUBROUTINE: SOLARANGLE +! +! DESCRIPTION: TO CALCULATE THE SOLAR ZENITH ANGLE. THIS WILL GIVE +! SIN(BETA), NOT THE BETA. +! +! CALL: NONE +! +! REQUIRE: NONE +! +! INPUT: +! 1) DAY OF YEAR +! 2) LATITUDE +! 3) HOUR +! +! OUTPUT: CALCBETA (SOLAR ZENITH ANGLE) +! +! CREATED BY TAN 11/15/06 (BASED ON XXXX'S PROGRAM) +! +!----------------------------------------------------------------------- +SUBROUTINE SOLARANGLE(KDAY, PSHOUR, PLAT, PSINBETA) + +USE MODD_MEGAN + +IMPLICIT NONE + +! INPUT +INTEGER, DIMENSION(:), INTENT(IN) :: KDAY ! DOY OR JULIAN DAY +REAL, DIMENSION(:), INTENT(IN) :: PSHOUR ! SOLAR HOUR +REAL, DIMENSION(:), INTENT(IN) :: PLAT ! LATITUDE +! OUTPUT +REAL, DIMENSION(:), INTENT(OUT) :: PSINBETA +! LOCAL +!REAL :: ZBETA ! SOLAR ELEVATION ANGLE +REAL :: ZSINDELTA, ZCOSDELTA, ZA, ZB +! CONSTANTS +INTEGER :: JJ + +! CALCULATION +DO JJ = 1,SIZE(KDAY) + + ZSINDELTA = -SIN(0.40907) * COS( 6.28*(KDAY(JJ)+10.)/365. ) + ZCOSDELTA = (1.-ZSINDELTA**2)**0.5 + + ZA = SIN( PLAT(JJ) / XRPI180 ) * ZSINDELTA + ZB = COS( PLAT(JJ) / XRPI180 ) * ZCOSDELTA + + PSINBETA(JJ) = ZA + ZB * COS( 2 * XPI * (PSHOUR(JJ)-12.)/24. ) ! THIS WILL BE TRANSFERED + ! TO GAMMA_P FUNCTION + !ZBETA = ASIN(PSINBETA(JJ)) * XRPI180 ! THIS IS NOT USED. + +ENDDO + +END SUBROUTINE SOLARANGLE +!----------------------------------------------------------------------- + -- GitLab