diff --git a/src/LIB/MEGAN/.arbre2.txt.swp b/src/LIB/MEGAN/.arbre2.txt.swp new file mode 100644 index 0000000000000000000000000000000000000000..53891c1f3841e8264bd204ddb71f260ba22e4442 Binary files /dev/null and b/src/LIB/MEGAN/.arbre2.txt.swp differ diff --git a/src/LIB/MEGAN/emproc.F90 b/src/LIB/MEGAN/emproc.F90 new file mode 100644 index 0000000000000000000000000000000000000000..7cb60b64fe78f2edf40e1ed4266b6fce9b213d96 --- /dev/null +++ b/src/LIB/MEGAN/emproc.F90 @@ -0,0 +1,292 @@ + +SUBROUTINE EMPROC(KTIME, KDATE, PPFD24, T24, 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 ZER(:) = ZGAM_AGE * ZGAM_SMT * ZRHO * ((1.-ZLDF) * ZGAM_TLI * ZGAM_LHT + ZLDF * ZGAM_TLD) +! 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, DIMENSION(:), INTENT(IN) :: T24, PPFD24 !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, JL ! 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 = PPFD24 + +!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) + +! IF (JS == 1) print*, "ZGAM_LHT", ZGAM_LHT + + CALL GAMMA_A(KDATE, KTIME, NTSTLEN, YVNAME3D(JS), T24, PLAIP, PLAIC, ZGAM_AGE) + +! IF (JS == 1) print*, "ZGAM_AGE", 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 !!la division par 100 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), & + PPFD24, PPFD24, T24, T24, 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_LD(:) = ZADJUST_FACTOR_LD(:) + 0.01 * PFTF(I_PFT,:) * ZGAMMA_TD(:) + ZADJUST_FACTOR_LI(:) = ZADJUST_FACTOR_LI(:) + 0.01 * PFTF(I_PFT,:) * ZGAMMA_TI(:) !! attention le 0.01 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 + + !IF (JS == 1) print*, "ZGAM_TLD(:)", ZGAM_TLD(:) + + 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 + END WHERE + +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 0000000000000000000000000000000000000000..68e48b7173a81e3fb1e289d1b9e6eaf23b5fc5fd --- /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 0000000000000000000000000000000000000000..8e1bd59bcd401b3f016542476abe0c873d6963a1 --- /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 0000000000000000000000000000000000000000..73442ba48e36a1a549e9dcc8da7c5f3e61046937 --- /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 0000000000000000000000000000000000000000..f6c19ec072edb64c51c7edee483edd230aa6d4aa --- /dev/null +++ b/src/LIB/MEGAN/mgn2mech.F90 @@ -0,0 +1,323 @@ +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, ZTMP4 +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 + ZTMP4(:) = 0.0 + DO JM = 1,N_MGN_PFT + !ZTMP3 = ZTMP3 + XEF_ALL(JM,JMPMG) * XEFFS_ALL(JM,JMPSP) * PPFT(JM,:)/100. + ZTMP4(:) = ZTMP4(:) + PPFT(JM,:) + ZTMP3(:) = ZTMP3(:) + XEF_ALL(JM,JMPMG) * XEFFS_ALL(JM,JMPSP) * PPFT(JM,:) ! bug S. Oumami + ENDDO + WHERE( ZTMP4(:).EQ.0. ) + ZTMPER(JMPSP,:) = 0. + ELSEWHERE + ZTMPER(JMPSP,:) = PCFSPEC(JMPMG,:) * ZTMP3(:) / ZTMP4(:) + ENDWHERE + + + 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 0000000000000000000000000000000000000000..df8fdb870141aadd492e194c474fd89de5d0af20 --- /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 0000000000000000000000000000000000000000..f64f45eb52ccb15ce98405c9fbcd260a8dac3b13 --- /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 0000000000000000000000000000000000000000..04a1b209106bbb8b2f8f99a5a2b731cc65fe9041 --- /dev/null +++ b/src/LIB/MEGAN/mode_gamma_etc.F90 @@ -0,0 +1,554 @@ +!======================================================================= +! 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, DIMENSION(:), 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 +DO JJ = 1,SIZE(PLAIARP) + IF ( PTEMP_D(JJ).LE.303. ) THEN + ZTI = 5.0 + 0.7*(300.-PTEMP_D(JJ)) + ELSE + ZTI = 2.9 + ENDIF + ZTM = 2.3 * ZTI +! + + +!... 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 0000000000000000000000000000000000000000..584fda604460f5e9520796307a6719c89100c482 --- /dev/null +++ b/src/LIB/MEGAN/mode_megan.F90 @@ -0,0 +1,1235 @@ +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, DIMENSION(:), INTENT(IN) :: PT24, PT240, PPFD24, PPFD240 +REAL, INTENT(IN) :: 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, Z_PPFD, Z_ALPHAP +! +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)) + + Z_PPFD(:,JI) = ZSUNPPFD(:,JI) * ZSUNFRAC(:,JI) + ZSHADEPPFD(:,JI) * (1.-ZSUNFRAC(:,JI)) + + Z_ALPHAP(:,JI) = EA1P99(XPSTD_SUN , PPFD24*0.5 , PPFD240*0.5 , ZSUNPPFD (:,JI)) * ZSUNFRAC(:,JI) + & + EA1P99(XPSTD_SHADE, PPFD24*0.16, PPFD240*0.16, ZSHADEPPFD (:,JI) ) * (1.-ZSUNFRAC(:,JI)) !! + ! IF (KCANTYPE == 15) THEN + ! PRINT*, JI, ZSUNPPFD(:,JI) + !ENDIF + +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 + ! NIGHT TIME + 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, DIMENSION(:), INTENT(IN) :: PT1, PT24, PT240 +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(JJ) - 297) + ZX = ((1 / ZTOPT) - (1 / PT1(JJ))) / 0.00831 + + ! MAXIMUM EMISSION (RELATIVE TO EMISSION AT 30 C) + ZEOPT = XCLEO(ISPCNUM) * EXP(0.05 * (PT24(JJ) - 297)) * EXP(0.05*(PT240(JJ)-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 +REAL, DIMENSION(:), INTENT(IN) :: PPFD1, PPFD24, PPFD240 +REAL, DIMENSION(SIZE(PPFD1)) :: PEA1P99 +REAL :: ZALPHA, ZC1 +INTEGER :: JJ +!-------------------------------------------------------------------- + +DO JJ = 1,SIZE(PPFD1) + + IF ( PPFD240(JJ)<0.01 ) THEN + PEA1P99(JJ) = 0. + ELSE + ZALPHA = 0.004 - 0.0005 * LOG(PPFD240(JJ)) + ZC1 = 0.0468 * EXP(0.0005 * (PPFD24(JJ) - PSTD)) * (PPFD240(JJ)**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 0000000000000000000000000000000000000000..226c006ed14dab07e4bf37eb1b082fbad8af78a9 --- /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 0000000000000000000000000000000000000000..0435a01a2abbfc76b6a444a38a6f7c24aa944d0d --- /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 0000000000000000000000000000000000000000..60ac5815a77412f157755f1eecc136f637afc73b --- /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 +!----------------------------------------------------------------------- + diff --git a/src/LIB/SURCOUCHE/src/mode_field.f90 b/src/LIB/SURCOUCHE/src/mode_field.f90 index ce06ed50bf7d80102600d3423136c97d754915b4..648ac8b7546ff473b262245e84e3f186abd6fa6c 100644 --- a/src/LIB/SURCOUCHE/src/mode_field.f90 +++ b/src/LIB/SURCOUCHE/src/mode_field.f90 @@ -2316,6 +2316,20 @@ ALLOCATE(TFIELDLIST(IDX)%TFIELD_X3D(IMODEL)) IDX = IDX+1 ! IF(IDX>MAXFIELDS) CALL ERR_INI_FIELD_LIST() +TFIELDLIST(IDX)%CMNHNAME = 'ICEFR' +TFIELDLIST(IDX)%CSTDNAME = '' +TFIELDLIST(IDX)%CLONGNAME = 'ICEFR' +TFIELDLIST(IDX)%CUNITS = '1' +TFIELDLIST(IDX)%CDIR = 'XY' +TFIELDLIST(IDX)%CCOMMENT = 'X_Y_Z_ICE cloud FRaction' +TFIELDLIST(IDX)%NGRID = 1 +TFIELDLIST(IDX)%NTYPE = TYPEREAL +TFIELDLIST(IDX)%NDIMS = 3 +TFIELDLIST(IDX)%LTIMEDEP = .TRUE. +ALLOCATE(TFIELDLIST(IDX)%TFIELD_X3D(IMODEL)) +IDX = IDX+1 +! +IF(IDX>MAXFIELDS) CALL ERR_INI_FIELD_LIST() TFIELDLIST(IDX)%CMNHNAME = 'CIT' TFIELDLIST(IDX)%CSTDNAME = '' TFIELDLIST(IDX)%CLONGNAME = 'CIT' diff --git a/src/MNH/BASIC.f90 b/src/MNH/BASIC.f90 old mode 100755 new mode 100644 index 0160a3c40994be611effb8b9506eabb2fa0f9bf0..b08332e85019c776d75d871cf4e911c01bb5683e --- a/src/MNH/BASIC.f90 +++ b/src/MNH/BASIC.f90 @@ -1,5 +1,3 @@ -! Modifications: -! P. Wautelet 10/04/2019: replace ABORT and STOP calls by Print_msg ! !======================================================================== ! @@ -168,6 +166,9 @@ ! K130=4.00E-12::XO2+NO-->NO2 ! K131=1.20E-12::XO2+NO3-->NO2 ! K132=1.00E-40::SULF--> +! K133=5.40E-13::DMS+NO3-->SO2+NO2 +! K134=1.30E-11*exp(-(400./TPK%T))::DMS+O3P-->SO2 +! K135=(TPK%T*exp(-234./TPK%T)+8.4E-10*exp(7230./TPK%T)+2.68E-10*exp(7810./TPK%T))/(1.04E11*TPK%T+88.1*exp(7460./TPK%T))::DMS+OH-->0.8*SO2 ! KTC1=@KT(0.05,48.,TPK%T,TPK%RADC,KVECNPT)*TPK%LWC::O3-->WC_O3 ! KTC2=@KT(0.11,34.,TPK%T,TPK%RADC,KVECNPT)*TPK%LWC::H2O2-->WC_H2O2 ! KTC3=@KT(0.0001,30.,TPK%T,TPK%RADC,KVECNPT)*TPK%LWC::NO-->WC_NO @@ -188,14 +189,14 @@ ! KTC18=@KT(0.03,60.,TPK%T,TPK%RADC,KVECNPT)*TPK%LWC::ORA2-->WC_ORA2 ! KTC19=@KT(0.05,47.,TPK%T,TPK%RADC,KVECNPT)*TPK%LWC::MO2-->WC_MO2 ! KTC20=@KT(0.007,48.,TPK%T,TPK%RADC,KVECNPT)*TPK%LWC::OP1-->WC_OP1 -! KTC21=@KT(0.05,48.,TPK%T,TPK%RADC,KVECNPT)/(@HENRY(1.1e-2,-2830.,TPK%T,KVECNPT)*TPK%RCH*TPK%T)::WC_O3-->O3 -! KTC22=@KT(0.11,34.,TPK%T,TPK%RADC,KVECNPT)/(@HENRY(7.73e4,-7310.,TPK%T,KVECNPT)*TPK%RCH*TPK%T)::WC_H2O2-->H2O2 +! KTC21=@KT(0.05,48.,TPK%T,TPK%RADC,KVECNPT)/(@HENRY(1.03e-2,-2830.,TPK%T,KVECNPT)*TPK%RCH*TPK%T)::WC_O3-->O3 +! KTC22=@KT(0.11,34.,TPK%T,TPK%RADC,KVECNPT)/(@HENRY(8.44e4,-7600.,TPK%T,KVECNPT)*TPK%RCH*TPK%T)::WC_H2O2-->H2O2 ! KTC23=@KT(0.0001,30.,TPK%T,TPK%RADC,KVECNPT)/(@HENRY(1.92e-3,-1790.,TPK%T,KVECNPT)*TPK%RCH*TPK%T)::WC_NO-->NO -! KTC24=@KT(0.0015,46.,TPK%T,TPK%RADC,KVECNPT)/(@HENRY(1.4e-2,0.,TPK%T,KVECNPT)*TPK%RCH*TPK%T)::WC_NO2-->NO2 +! KTC24=@KT(0.0015,46.,TPK%T,TPK%RADC,KVECNPT)/(@HENRY(1.2e-2,-2400.,TPK%T,KVECNPT)*TPK%RCH*TPK%T)::WC_NO2-->NO2 ! KTC25=@KT(0.05,62.,TPK%T,TPK%RADC,KVECNPT)/(@HENRY(3.8e-2,0.,TPK%T,KVECNPT)*TPK%RCH*TPK%T)::WC_NO3-->NO3 -! KTC26=@KT(0.0037,108.,TPK%T,TPK%RADC,KVECNPT)/(@HENRY(2.1,-3400.,TPK%T,KVECNPT)*TPK%RCH*TPK%T)::WC_N2O5-->N2O5 +! KTC26=@KT(0.0037,108.,TPK%T,TPK%RADC,KVECNPT)/(@HENRY(8.8e-2,-3600.,TPK%T,KVECNPT)*TPK%RCH*TPK%T)::WC_N2O5-->N2O5 ! KTC27=@KT(0.05,47.,TPK%T,TPK%RADC,KVECNPT)/(@HEFFA(5.0e1,-4880.,1.6e-3,1760.,0.,0.,TPK%PHC,TPK%T,KVECNPT)*TPK%RCH*TPK%T)::WC_HONO-->HONO -! KTC28=@KT(0.054,63.,TPK%T,TPK%RADC,KVECNPT)/(@HEFFA(2.1e5,-8700.,2.2e1,0.,0.,0.,TPK%PHC,TPK%T,KVECNPT)*TPK%RCH*TPK%T)::WC_HNO3-->HNO3 +! KTC28=@KT(0.054,63.,TPK%T,TPK%RADC,KVECNPT)/(@HEFFA(2.1e5,-10500.,2.2e1,0.,0.,0.,TPK%PHC,TPK%T,KVECNPT)*TPK%RCH*TPK%T)::WC_HNO3-->HNO3 ! KTC29=@KT(0.05,79.,TPK%T,TPK%RADC,KVECNPT)/(@HEFFA(1.2e4,-6900.,1.26e-6,0.,0.,0.,TPK%PHC,TPK%T,KVECNPT)*TPK%RCH*TPK%T)::WC_HNO4-->HNO4 ! KTC30=@KT(0.04,17.,TPK%T,TPK%RADC,KVECNPT)/(@HEFFB(6.02e1,-4160.,1.7e-5,4350.,TPK%PHC,TPK%T,KVECNPT)*TPK%RCH*TPK%T)::WC_NH3-->NH3 ! KTC31=@KT(0.05,17.,TPK%T,TPK%RADC,KVECNPT)/(@HENRY(3.9e1,0.,TPK%T,KVECNPT)*TPK%RCH*TPK%T)::WC_OH-->OH @@ -206,7 +207,7 @@ ! KTC36=@KT(0.04,30.,TPK%T,TPK%RADC,KVECNPT)/(@HENRY(3.23e3,-7100.,TPK%T,KVECNPT)*TPK%RCH*TPK%T)::WC_HCHO-->HCHO ! KTC37=@KT(0.012,46.,TPK%T,TPK%RADC,KVECNPT)/(@HEFFA(8.9e3,-6100.,1.8e-4,150.,0.,0.,TPK%PHC,TPK%T,KVECNPT)*TPK%RCH*TPK%T)::WC_ORA1-->ORA1 ! KTC38=@KT(0.03,60.,TPK%T,TPK%RADC,KVECNPT)/(@HEFFA(4.1e3,-6200.,1.74e-5,0.,0.,0.,TPK%PHC,TPK%T,KVECNPT)*TPK%RCH*TPK%T)::WC_ORA2-->ORA2 -! KTC39=@KT(0.05,47.,TPK%T,TPK%RADC,KVECNPT)/(@HENRY(2.7e0,-2030.,TPK%T,KVECNPT)*TPK%RCH*TPK%T)::WC_MO2-->MO2 +! KTC39=@KT(0.05,47.,TPK%T,TPK%RADC,KVECNPT)/(@HENRY(2.45e0,-5280.,TPK%T,KVECNPT)*TPK%RCH*TPK%T)::WC_MO2-->MO2 ! KTC40=@KT(0.007,48.,TPK%T,TPK%RADC,KVECNPT)/(@HENRY(3.e2,-5280.,TPK%T,KVECNPT)*TPK%RCH*TPK%T)::WC_OP1-->OP1 ! KTR1=@KT(0.05,48.,TPK%T,TPK%RADR,KVECNPT)*TPK%LWR::O3-->WR_O3 ! KTR2=@KT(0.11,34.,TPK%T,TPK%RADR,KVECNPT)*TPK%LWR::H2O2-->WR_H2O2 @@ -228,14 +229,14 @@ ! KTR18=@KT(0.03,60.,TPK%T,TPK%RADR,KVECNPT)*TPK%LWR::ORA2-->WR_ORA2 ! KTR19=@KT(0.05,47.,TPK%T,TPK%RADR,KVECNPT)*TPK%LWR::MO2-->WR_MO2 ! KTR20=@KT(0.007,48.,TPK%T,TPK%RADR,KVECNPT)*TPK%LWR::OP1-->WR_OP1 -! KTR21=@KT(0.05,48.,TPK%T,TPK%RADR,KVECNPT)/(@HENRY(1.1e-2,-2830.,TPK%T,KVECNPT)*TPK%RCH*TPK%T)::WR_O3-->O3 -! KTR22=@KT(0.11,34.,TPK%T,TPK%RADR,KVECNPT)/(@HENRY(7.73e4,-7310.,TPK%T,KVECNPT)*TPK%RCH*TPK%T)::WR_H2O2-->H2O2 +! KTR21=@KT(0.05,48.,TPK%T,TPK%RADR,KVECNPT)/(@HENRY(1.03e-2,-2830.,TPK%T,KVECNPT)*TPK%RCH*TPK%T)::WR_O3-->O3 +! KTR22=@KT(0.11,34.,TPK%T,TPK%RADR,KVECNPT)/(@HENRY(8.44e4,-7600.,TPK%T,KVECNPT)*TPK%RCH*TPK%T)::WR_H2O2-->H2O2 ! KTR23=@KT(0.0001,30.,TPK%T,TPK%RADR,KVECNPT)/(@HENRY(1.92e-3,-1790.,TPK%T,KVECNPT)*TPK%RCH*TPK%T)::WR_NO-->NO -! KTR24=@KT(0.0015,46.,TPK%T,TPK%RADR,KVECNPT)/(@HENRY(1.4e-2,0.,TPK%T,KVECNPT)*TPK%RCH*TPK%T)::WR_NO2-->NO2 +! KTR24=@KT(0.0015,46.,TPK%T,TPK%RADR,KVECNPT)/(@HENRY(1.2e-2,-2400.,TPK%T,KVECNPT)*TPK%RCH*TPK%T)::WR_NO2-->NO2 ! KTR25=@KT(0.05,62.,TPK%T,TPK%RADR,KVECNPT)/(@HENRY(3.8e-2,0.,TPK%T,KVECNPT)*TPK%RCH*TPK%T)::WR_NO3-->NO3 -! KTR26=@KT(0.0037,108.,TPK%T,TPK%RADR,KVECNPT)/(@HENRY(2.1,-3400.,TPK%T,KVECNPT)*TPK%RCH*TPK%T)::WR_N2O5-->N2O5 +! KTR26=@KT(0.0037,108.,TPK%T,TPK%RADR,KVECNPT)/(@HENRY(8.8e-2,-3600.,TPK%T,KVECNPT)*TPK%RCH*TPK%T)::WR_N2O5-->N2O5 ! KTR27=@KT(0.05,47.,TPK%T,TPK%RADR,KVECNPT)/(@HEFFA(5.0e1,-4880.,1.6e-3,1760.,0.,0.,TPK%PHR,TPK%T,KVECNPT)*TPK%RCH*TPK%T)::WR_HONO-->HONO -! KTR28=@KT(0.054,63.,TPK%T,TPK%RADR,KVECNPT)/(@HEFFA(2.1e5,-8700.,2.2e1,0.,0.,0.,TPK%PHR,TPK%T,KVECNPT)*TPK%RCH*TPK%T)::WR_HNO3-->HNO3 +! KTR28=@KT(0.054,63.,TPK%T,TPK%RADR,KVECNPT)/(@HEFFA(2.1e5,-10500.,2.2e1,0.,0.,0.,TPK%PHR,TPK%T,KVECNPT)*TPK%RCH*TPK%T)::WR_HNO3-->HNO3 ! KTR29=@KT(0.05,79.,TPK%T,TPK%RADR,KVECNPT)/(@HEFFA(1.2e4,-6900.,1.26e-6,0.,0.,0.,TPK%PHR,TPK%T,KVECNPT)*TPK%RCH*TPK%T)::WR_HNO4-->HNO4 ! KTR30=@KT(0.04,17.,TPK%T,TPK%RADR,KVECNPT)/(@HEFFB(6.02e1,-4160.,1.7e-5,4350.,TPK%PHR,TPK%T,KVECNPT)*TPK%RCH*TPK%T)::WR_NH3-->NH3 ! KTR31=@KT(0.05,17.,TPK%T,TPK%RADR,KVECNPT)/(@HENRY(3.9e1,0.,TPK%T,KVECNPT)*TPK%RCH*TPK%T)::WR_OH-->OH @@ -246,7 +247,7 @@ ! KTR36=@KT(0.04,30.,TPK%T,TPK%RADR,KVECNPT)/(@HENRY(3.23e3,-7100.,TPK%T,KVECNPT)*TPK%RCH*TPK%T)::WR_HCHO-->HCHO ! KTR37=@KT(0.012,46.,TPK%T,TPK%RADR,KVECNPT)/(@HEFFA(8.9e3,-6100.,1.8e-4,150.,0.,0.,TPK%PHR,TPK%T,KVECNPT)*TPK%RCH*TPK%T)::WR_ORA1-->ORA1 ! KTR38=@KT(0.03,60.,TPK%T,TPK%RADR,KVECNPT)/(@HEFFA(4.1e3,-6200.,1.74e-5,0.,0.,0.,TPK%PHR,TPK%T,KVECNPT)*TPK%RCH*TPK%T)::WR_ORA2-->ORA2 -! KTR39=@KT(0.05,47.,TPK%T,TPK%RADR,KVECNPT)/(@HENRY(2.7e0,-2030.,TPK%T,KVECNPT)*TPK%RCH*TPK%T)::WR_MO2-->MO2 +! KTR39=@KT(0.05,47.,TPK%T,TPK%RADR,KVECNPT)/(@HENRY(2.45e0,-5280.,TPK%T,KVECNPT)*TPK%RCH*TPK%T)::WR_MO2-->MO2 ! KTR40=@KT(0.007,48.,TPK%T,TPK%RADR,KVECNPT)/(@HENRY(3.e2,-5280.,TPK%T,KVECNPT)*TPK%RCH*TPK%T)::WR_OP1-->OP1 ! KC1=!ZRATES(:,018)::WC_H2O2-->WC_OH+WC_OH ! KC2=(3.6E+9*exp(-930.*(1./TPK%T-1./298.15)))/TPK%MOL2MOLECCLOUD::WC_OH+WC_OH-->WC_H2O2 @@ -323,87 +324,88 @@ ! 8. HNO3 PCONC(:,8) ! 9. HNO4 PCONC(:,9) ! 10. NH3 PCONC(:,10) -! 11. SO2 PCONC(:,11) -! 12. SULF PCONC(:,12) -! 13. CO PCONC(:,13) -! 14. OH PCONC(:,14) -! 15. HO2 PCONC(:,15) -! 16. CH4 PCONC(:,16) -! 17. ETH PCONC(:,17) -! 18. ALKA PCONC(:,18) -! 19. ALKE PCONC(:,19) -! 20. BIO PCONC(:,20) -! 21. ARO PCONC(:,21) -! 22. HCHO PCONC(:,22) -! 23. ALD PCONC(:,23) -! 24. KET PCONC(:,24) -! 25. CARBO PCONC(:,25) -! 26. ONIT PCONC(:,26) -! 27. PAN PCONC(:,27) -! 28. OP1 PCONC(:,28) -! 29. OP2 PCONC(:,29) -! 30. ORA1 PCONC(:,30) -! 31. ORA2 PCONC(:,31) -! 32. MO2 PCONC(:,32) -! 33. ALKAP PCONC(:,33) -! 34. ALKEP PCONC(:,34) -! 35. BIOP PCONC(:,35) -! 36. PHO PCONC(:,36) -! 37. ADD PCONC(:,37) -! 38. AROP PCONC(:,38) -! 39. CARBOP PCONC(:,39) -! 40. OLN PCONC(:,40) -! 41. XO2 PCONC(:,41) -! 42. WC_O3 PCONC(:,42) -! 43. WC_H2O2 PCONC(:,43) -! 44. WC_NO PCONC(:,44) -! 45. WC_NO2 PCONC(:,45) -! 46. WC_NO3 PCONC(:,46) -! 47. WC_N2O5 PCONC(:,47) -! 48. WC_HONO PCONC(:,48) -! 49. WC_HNO3 PCONC(:,49) -! 50. WC_HNO4 PCONC(:,50) -! 51. WC_NH3 PCONC(:,51) -! 52. WC_OH PCONC(:,52) -! 53. WC_HO2 PCONC(:,53) -! 54. WC_CO2 PCONC(:,54) -! 55. WC_SO2 PCONC(:,55) -! 56. WC_SULF PCONC(:,56) -! 57. WC_HCHO PCONC(:,57) -! 58. WC_ORA1 PCONC(:,58) -! 59. WC_ORA2 PCONC(:,59) -! 60. WC_MO2 PCONC(:,60) -! 61. WC_OP1 PCONC(:,61) -! 62. WC_ASO3 PCONC(:,62) -! 63. WC_ASO4 PCONC(:,63) -! 64. WC_ASO5 PCONC(:,64) -! 65. WC_AHSO5 PCONC(:,65) -! 66. WC_AHMS PCONC(:,66) -! 67. WR_O3 PCONC(:,67) -! 68. WR_H2O2 PCONC(:,68) -! 69. WR_NO PCONC(:,69) -! 70. WR_NO2 PCONC(:,70) -! 71. WR_NO3 PCONC(:,71) -! 72. WR_N2O5 PCONC(:,72) -! 73. WR_HONO PCONC(:,73) -! 74. WR_HNO3 PCONC(:,74) -! 75. WR_HNO4 PCONC(:,75) -! 76. WR_NH3 PCONC(:,76) -! 77. WR_OH PCONC(:,77) -! 78. WR_HO2 PCONC(:,78) -! 79. WR_CO2 PCONC(:,79) -! 80. WR_SO2 PCONC(:,80) -! 81. WR_SULF PCONC(:,81) -! 82. WR_HCHO PCONC(:,82) -! 83. WR_ORA1 PCONC(:,83) -! 84. WR_ORA2 PCONC(:,84) -! 85. WR_MO2 PCONC(:,85) -! 86. WR_OP1 PCONC(:,86) -! 87. WR_ASO3 PCONC(:,87) -! 88. WR_ASO4 PCONC(:,88) -! 89. WR_ASO5 PCONC(:,89) -! 90. WR_AHSO5 PCONC(:,90) -! 91. WR_AHMS PCONC(:,91) +! 11. DMS PCONC(:,11) +! 12. SO2 PCONC(:,12) +! 13. SULF PCONC(:,13) +! 14. CO PCONC(:,14) +! 15. OH PCONC(:,15) +! 16. HO2 PCONC(:,16) +! 17. CH4 PCONC(:,17) +! 18. ETH PCONC(:,18) +! 19. ALKA PCONC(:,19) +! 20. ALKE PCONC(:,20) +! 21. BIO PCONC(:,21) +! 22. ARO PCONC(:,22) +! 23. HCHO PCONC(:,23) +! 24. ALD PCONC(:,24) +! 25. KET PCONC(:,25) +! 26. CARBO PCONC(:,26) +! 27. ONIT PCONC(:,27) +! 28. PAN PCONC(:,28) +! 29. OP1 PCONC(:,29) +! 30. OP2 PCONC(:,30) +! 31. ORA1 PCONC(:,31) +! 32. ORA2 PCONC(:,32) +! 33. MO2 PCONC(:,33) +! 34. ALKAP PCONC(:,34) +! 35. ALKEP PCONC(:,35) +! 36. BIOP PCONC(:,36) +! 37. PHO PCONC(:,37) +! 38. ADD PCONC(:,38) +! 39. AROP PCONC(:,39) +! 40. CARBOP PCONC(:,40) +! 41. OLN PCONC(:,41) +! 42. XO2 PCONC(:,42) +! 43. WC_O3 PCONC(:,43) +! 44. WC_H2O2 PCONC(:,44) +! 45. WC_NO PCONC(:,45) +! 46. WC_NO2 PCONC(:,46) +! 47. WC_NO3 PCONC(:,47) +! 48. WC_N2O5 PCONC(:,48) +! 49. WC_HONO PCONC(:,49) +! 50. WC_HNO3 PCONC(:,50) +! 51. WC_HNO4 PCONC(:,51) +! 52. WC_NH3 PCONC(:,52) +! 53. WC_OH PCONC(:,53) +! 54. WC_HO2 PCONC(:,54) +! 55. WC_CO2 PCONC(:,55) +! 56. WC_SO2 PCONC(:,56) +! 57. WC_SULF PCONC(:,57) +! 58. WC_HCHO PCONC(:,58) +! 59. WC_ORA1 PCONC(:,59) +! 60. WC_ORA2 PCONC(:,60) +! 61. WC_MO2 PCONC(:,61) +! 62. WC_OP1 PCONC(:,62) +! 63. WC_ASO3 PCONC(:,63) +! 64. WC_ASO4 PCONC(:,64) +! 65. WC_ASO5 PCONC(:,65) +! 66. WC_AHSO5 PCONC(:,66) +! 67. WC_AHMS PCONC(:,67) +! 68. WR_O3 PCONC(:,68) +! 69. WR_H2O2 PCONC(:,69) +! 70. WR_NO PCONC(:,70) +! 71. WR_NO2 PCONC(:,71) +! 72. WR_NO3 PCONC(:,72) +! 73. WR_N2O5 PCONC(:,73) +! 74. WR_HONO PCONC(:,74) +! 75. WR_HNO3 PCONC(:,75) +! 76. WR_HNO4 PCONC(:,76) +! 77. WR_NH3 PCONC(:,77) +! 78. WR_OH PCONC(:,78) +! 79. WR_HO2 PCONC(:,79) +! 80. WR_CO2 PCONC(:,80) +! 81. WR_SO2 PCONC(:,81) +! 82. WR_SULF PCONC(:,82) +! 83. WR_HCHO PCONC(:,83) +! 84. WR_ORA1 PCONC(:,84) +! 85. WR_ORA2 PCONC(:,85) +! 86. WR_MO2 PCONC(:,86) +! 87. WR_OP1 PCONC(:,87) +! 88. WR_ASO3 PCONC(:,88) +! 89. WR_ASO4 PCONC(:,89) +! 90. WR_ASO5 PCONC(:,90) +! 91. WR_AHSO5 PCONC(:,91) +! 92. WR_AHMS PCONC(:,92) ! !======================================================================== ! @@ -509,6 +511,7 @@ ! + 1.74072*K125*<OLN>*<NO3> ! + K130*<XO2>*<NO> ! + K131*<XO2>*<NO3> +! + K133*<DMS>*<NO3> ! + KTC24*<WC_NO2> ! + KTR24*<WR_NO2> ! - K001*<NO2> @@ -558,6 +561,7 @@ ! - K124*<CARBOP>*<NO3> ! - K125*<OLN>*<NO3> ! - K131*<XO2>*<NO3> +! - K133*<DMS>*<NO3> ! - KTC5*<NO3> ! - KTR5*<NO3> ! terms for N2O5: @@ -604,7 +608,15 @@ ! - K050*<NH3>*<OH> ! - KTC10*<NH3> ! - KTR10*<NH3> +! terms for DMS: +! + 0.0 +! - K133*<DMS>*<NO3> +! - K134*<DMS>*<O3P> +! - K135*<DMS>*<OH> ! terms for SO2: +! + K133*<DMS>*<NO3> +! + K134*<DMS>*<O3P> +! + 0.8*K135*<DMS>*<OH> ! + KTC34*<WC_SO2> ! + KTR34*<WR_SO2> ! - K052*<OH>*<SO2> @@ -686,6 +698,7 @@ ! - K069*<OP2>*<OH> ! - K070*<PAN>*<OH> ! - K071*<ONIT>*<OH> +! - K135*<DMS>*<OH> ! - KTC11*<OH> ! - KTR11*<OH> ! terms for HO2: @@ -1539,11 +1552,11 @@ !! DECLARATIONS !! ------------ IMPLICIT NONE -INTEGER, DIMENSION(2), PARAMETER :: JPNEQ = (/41,91/) ! number of prognostic chemical species +INTEGER, DIMENSION(2), PARAMETER :: JPNEQ = (/42,92/) ! number of prognostic chemical species INTEGER, DIMENSION(2), PARAMETER :: JPNEQAQ = (/0,50/) ! number of prognostic aqueous phase chemical species -INTEGER, DIMENSION(2), PARAMETER :: JPNREAC = (/132,272/) ! number of chemical reactions +INTEGER, DIMENSION(2), PARAMETER :: JPNREAC = (/135,275/) ! number of chemical reactions INTEGER, DIMENSION(2), PARAMETER :: JPNMETEOVARS = (/13,13/) ! number of meteorological variables -INTEGER, DIMENSION(2), PARAMETER :: JPNNONZEROTERMS = (/606,942/) ! number of non-zero terms returned by CH_TERMS +INTEGER, DIMENSION(2), PARAMETER :: JPNNONZEROTERMS = (/615,951/) ! number of non-zero terms returned by CH_TERMS ! CHARACTER(LEN=32), DIMENSION(JPNEQ(2)), TARGET :: CNAMES ! names of the species CHARACTER(LEN=32), DIMENSION(JPNREAC(2)), TARGET :: CREACS ! the reaction rate names @@ -1689,6 +1702,9 @@ REAL,DIMENSION(:),POINTER :: K129=>NULL() REAL,DIMENSION(:),POINTER :: K130=>NULL() REAL,DIMENSION(:),POINTER :: K131=>NULL() REAL,DIMENSION(:),POINTER :: K132=>NULL() +REAL,DIMENSION(:),POINTER :: K133=>NULL() +REAL,DIMENSION(:),POINTER :: K134=>NULL() +REAL,DIMENSION(:),POINTER :: K135=>NULL() REAL,DIMENSION(:),POINTER :: KTC1=>NULL() REAL,DIMENSION(:),POINTER :: KTC2=>NULL() REAL,DIMENSION(:),POINTER :: KTC3=>NULL() @@ -1888,87 +1904,88 @@ INTEGER, PARAMETER :: JP_HONO = 7 INTEGER, PARAMETER :: JP_HNO3 = 8 INTEGER, PARAMETER :: JP_HNO4 = 9 INTEGER, PARAMETER :: JP_NH3 = 10 -INTEGER, PARAMETER :: JP_SO2 = 11 -INTEGER, PARAMETER :: JP_SULF = 12 -INTEGER, PARAMETER :: JP_CO = 13 -INTEGER, PARAMETER :: JP_OH = 14 -INTEGER, PARAMETER :: JP_HO2 = 15 -INTEGER, PARAMETER :: JP_CH4 = 16 -INTEGER, PARAMETER :: JP_ETH = 17 -INTEGER, PARAMETER :: JP_ALKA = 18 -INTEGER, PARAMETER :: JP_ALKE = 19 -INTEGER, PARAMETER :: JP_BIO = 20 -INTEGER, PARAMETER :: JP_ARO = 21 -INTEGER, PARAMETER :: JP_HCHO = 22 -INTEGER, PARAMETER :: JP_ALD = 23 -INTEGER, PARAMETER :: JP_KET = 24 -INTEGER, PARAMETER :: JP_CARBO = 25 -INTEGER, PARAMETER :: JP_ONIT = 26 -INTEGER, PARAMETER :: JP_PAN = 27 -INTEGER, PARAMETER :: JP_OP1 = 28 -INTEGER, PARAMETER :: JP_OP2 = 29 -INTEGER, PARAMETER :: JP_ORA1 = 30 -INTEGER, PARAMETER :: JP_ORA2 = 31 -INTEGER, PARAMETER :: JP_MO2 = 32 -INTEGER, PARAMETER :: JP_ALKAP = 33 -INTEGER, PARAMETER :: JP_ALKEP = 34 -INTEGER, PARAMETER :: JP_BIOP = 35 -INTEGER, PARAMETER :: JP_PHO = 36 -INTEGER, PARAMETER :: JP_ADD = 37 -INTEGER, PARAMETER :: JP_AROP = 38 -INTEGER, PARAMETER :: JP_CARBOP = 39 -INTEGER, PARAMETER :: JP_OLN = 40 -INTEGER, PARAMETER :: JP_XO2 = 41 -INTEGER, PARAMETER :: JP_WC_O3 = 42 -INTEGER, PARAMETER :: JP_WC_H2O2 = 43 -INTEGER, PARAMETER :: JP_WC_NO = 44 -INTEGER, PARAMETER :: JP_WC_NO2 = 45 -INTEGER, PARAMETER :: JP_WC_NO3 = 46 -INTEGER, PARAMETER :: JP_WC_N2O5 = 47 -INTEGER, PARAMETER :: JP_WC_HONO = 48 -INTEGER, PARAMETER :: JP_WC_HNO3 = 49 -INTEGER, PARAMETER :: JP_WC_HNO4 = 50 -INTEGER, PARAMETER :: JP_WC_NH3 = 51 -INTEGER, PARAMETER :: JP_WC_OH = 52 -INTEGER, PARAMETER :: JP_WC_HO2 = 53 -INTEGER, PARAMETER :: JP_WC_CO2 = 54 -INTEGER, PARAMETER :: JP_WC_SO2 = 55 -INTEGER, PARAMETER :: JP_WC_SULF = 56 -INTEGER, PARAMETER :: JP_WC_HCHO = 57 -INTEGER, PARAMETER :: JP_WC_ORA1 = 58 -INTEGER, PARAMETER :: JP_WC_ORA2 = 59 -INTEGER, PARAMETER :: JP_WC_MO2 = 60 -INTEGER, PARAMETER :: JP_WC_OP1 = 61 -INTEGER, PARAMETER :: JP_WC_ASO3 = 62 -INTEGER, PARAMETER :: JP_WC_ASO4 = 63 -INTEGER, PARAMETER :: JP_WC_ASO5 = 64 -INTEGER, PARAMETER :: JP_WC_AHSO5 = 65 -INTEGER, PARAMETER :: JP_WC_AHMS = 66 -INTEGER, PARAMETER :: JP_WR_O3 = 67 -INTEGER, PARAMETER :: JP_WR_H2O2 = 68 -INTEGER, PARAMETER :: JP_WR_NO = 69 -INTEGER, PARAMETER :: JP_WR_NO2 = 70 -INTEGER, PARAMETER :: JP_WR_NO3 = 71 -INTEGER, PARAMETER :: JP_WR_N2O5 = 72 -INTEGER, PARAMETER :: JP_WR_HONO = 73 -INTEGER, PARAMETER :: JP_WR_HNO3 = 74 -INTEGER, PARAMETER :: JP_WR_HNO4 = 75 -INTEGER, PARAMETER :: JP_WR_NH3 = 76 -INTEGER, PARAMETER :: JP_WR_OH = 77 -INTEGER, PARAMETER :: JP_WR_HO2 = 78 -INTEGER, PARAMETER :: JP_WR_CO2 = 79 -INTEGER, PARAMETER :: JP_WR_SO2 = 80 -INTEGER, PARAMETER :: JP_WR_SULF = 81 -INTEGER, PARAMETER :: JP_WR_HCHO = 82 -INTEGER, PARAMETER :: JP_WR_ORA1 = 83 -INTEGER, PARAMETER :: JP_WR_ORA2 = 84 -INTEGER, PARAMETER :: JP_WR_MO2 = 85 -INTEGER, PARAMETER :: JP_WR_OP1 = 86 -INTEGER, PARAMETER :: JP_WR_ASO3 = 87 -INTEGER, PARAMETER :: JP_WR_ASO4 = 88 -INTEGER, PARAMETER :: JP_WR_ASO5 = 89 -INTEGER, PARAMETER :: JP_WR_AHSO5 = 90 -INTEGER, PARAMETER :: JP_WR_AHMS = 91 +INTEGER, PARAMETER :: JP_DMS = 11 +INTEGER, PARAMETER :: JP_SO2 = 12 +INTEGER, PARAMETER :: JP_SULF = 13 +INTEGER, PARAMETER :: JP_CO = 14 +INTEGER, PARAMETER :: JP_OH = 15 +INTEGER, PARAMETER :: JP_HO2 = 16 +INTEGER, PARAMETER :: JP_CH4 = 17 +INTEGER, PARAMETER :: JP_ETH = 18 +INTEGER, PARAMETER :: JP_ALKA = 19 +INTEGER, PARAMETER :: JP_ALKE = 20 +INTEGER, PARAMETER :: JP_BIO = 21 +INTEGER, PARAMETER :: JP_ARO = 22 +INTEGER, PARAMETER :: JP_HCHO = 23 +INTEGER, PARAMETER :: JP_ALD = 24 +INTEGER, PARAMETER :: JP_KET = 25 +INTEGER, PARAMETER :: JP_CARBO = 26 +INTEGER, PARAMETER :: JP_ONIT = 27 +INTEGER, PARAMETER :: JP_PAN = 28 +INTEGER, PARAMETER :: JP_OP1 = 29 +INTEGER, PARAMETER :: JP_OP2 = 30 +INTEGER, PARAMETER :: JP_ORA1 = 31 +INTEGER, PARAMETER :: JP_ORA2 = 32 +INTEGER, PARAMETER :: JP_MO2 = 33 +INTEGER, PARAMETER :: JP_ALKAP = 34 +INTEGER, PARAMETER :: JP_ALKEP = 35 +INTEGER, PARAMETER :: JP_BIOP = 36 +INTEGER, PARAMETER :: JP_PHO = 37 +INTEGER, PARAMETER :: JP_ADD = 38 +INTEGER, PARAMETER :: JP_AROP = 39 +INTEGER, PARAMETER :: JP_CARBOP = 40 +INTEGER, PARAMETER :: JP_OLN = 41 +INTEGER, PARAMETER :: JP_XO2 = 42 +INTEGER, PARAMETER :: JP_WC_O3 = 43 +INTEGER, PARAMETER :: JP_WC_H2O2 = 44 +INTEGER, PARAMETER :: JP_WC_NO = 45 +INTEGER, PARAMETER :: JP_WC_NO2 = 46 +INTEGER, PARAMETER :: JP_WC_NO3 = 47 +INTEGER, PARAMETER :: JP_WC_N2O5 = 48 +INTEGER, PARAMETER :: JP_WC_HONO = 49 +INTEGER, PARAMETER :: JP_WC_HNO3 = 50 +INTEGER, PARAMETER :: JP_WC_HNO4 = 51 +INTEGER, PARAMETER :: JP_WC_NH3 = 52 +INTEGER, PARAMETER :: JP_WC_OH = 53 +INTEGER, PARAMETER :: JP_WC_HO2 = 54 +INTEGER, PARAMETER :: JP_WC_CO2 = 55 +INTEGER, PARAMETER :: JP_WC_SO2 = 56 +INTEGER, PARAMETER :: JP_WC_SULF = 57 +INTEGER, PARAMETER :: JP_WC_HCHO = 58 +INTEGER, PARAMETER :: JP_WC_ORA1 = 59 +INTEGER, PARAMETER :: JP_WC_ORA2 = 60 +INTEGER, PARAMETER :: JP_WC_MO2 = 61 +INTEGER, PARAMETER :: JP_WC_OP1 = 62 +INTEGER, PARAMETER :: JP_WC_ASO3 = 63 +INTEGER, PARAMETER :: JP_WC_ASO4 = 64 +INTEGER, PARAMETER :: JP_WC_ASO5 = 65 +INTEGER, PARAMETER :: JP_WC_AHSO5 = 66 +INTEGER, PARAMETER :: JP_WC_AHMS = 67 +INTEGER, PARAMETER :: JP_WR_O3 = 68 +INTEGER, PARAMETER :: JP_WR_H2O2 = 69 +INTEGER, PARAMETER :: JP_WR_NO = 70 +INTEGER, PARAMETER :: JP_WR_NO2 = 71 +INTEGER, PARAMETER :: JP_WR_NO3 = 72 +INTEGER, PARAMETER :: JP_WR_N2O5 = 73 +INTEGER, PARAMETER :: JP_WR_HONO = 74 +INTEGER, PARAMETER :: JP_WR_HNO3 = 75 +INTEGER, PARAMETER :: JP_WR_HNO4 = 76 +INTEGER, PARAMETER :: JP_WR_NH3 = 77 +INTEGER, PARAMETER :: JP_WR_OH = 78 +INTEGER, PARAMETER :: JP_WR_HO2 = 79 +INTEGER, PARAMETER :: JP_WR_CO2 = 80 +INTEGER, PARAMETER :: JP_WR_SO2 = 81 +INTEGER, PARAMETER :: JP_WR_SULF = 82 +INTEGER, PARAMETER :: JP_WR_HCHO = 83 +INTEGER, PARAMETER :: JP_WR_ORA1 = 84 +INTEGER, PARAMETER :: JP_WR_ORA2 = 85 +INTEGER, PARAMETER :: JP_WR_MO2 = 86 +INTEGER, PARAMETER :: JP_WR_OP1 = 87 +INTEGER, PARAMETER :: JP_WR_ASO3 = 88 +INTEGER, PARAMETER :: JP_WR_ASO4 = 89 +INTEGER, PARAMETER :: JP_WR_ASO5 = 90 +INTEGER, PARAMETER :: JP_WR_AHSO5 = 91 +INTEGER, PARAMETER :: JP_WR_AHMS = 92 ! END MODULE MODD_CH_M9_SCHEME ! @@ -2172,6 +2189,9 @@ ALLOCATE(TACCS(KMI)%K129(KVECNPT)) ALLOCATE(TACCS(KMI)%K130(KVECNPT)) ALLOCATE(TACCS(KMI)%K131(KVECNPT)) ALLOCATE(TACCS(KMI)%K132(KVECNPT)) +ALLOCATE(TACCS(KMI)%K133(KVECNPT)) +ALLOCATE(TACCS(KMI)%K134(KVECNPT)) +ALLOCATE(TACCS(KMI)%K135(KVECNPT)) IF (TACCS(KMI)%LUSECHAQ) THEN ALLOCATE(TACCS(KMI)%KTC1(KVECNPT)) ALLOCATE(TACCS(KMI)%KTC2(KVECNPT)) @@ -2545,6 +2565,9 @@ IF (ASSOCIATED(TACCS(KMI)%K129)) DEALLOCATE(TACCS(KMI)%K129) IF (ASSOCIATED(TACCS(KMI)%K130)) DEALLOCATE(TACCS(KMI)%K130) IF (ASSOCIATED(TACCS(KMI)%K131)) DEALLOCATE(TACCS(KMI)%K131) IF (ASSOCIATED(TACCS(KMI)%K132)) DEALLOCATE(TACCS(KMI)%K132) +IF (ASSOCIATED(TACCS(KMI)%K133)) DEALLOCATE(TACCS(KMI)%K133) +IF (ASSOCIATED(TACCS(KMI)%K134)) DEALLOCATE(TACCS(KMI)%K134) +IF (ASSOCIATED(TACCS(KMI)%K135)) DEALLOCATE(TACCS(KMI)%K135) IF (ASSOCIATED(TACCS(KMI)%KTC1)) DEALLOCATE(TACCS(KMI)%KTC1) IF (ASSOCIATED(TACCS(KMI)%KTC2)) DEALLOCATE(TACCS(KMI)%KTC2) IF (ASSOCIATED(TACCS(KMI)%KTC3)) DEALLOCATE(TACCS(KMI)%KTC3) @@ -2822,87 +2845,88 @@ IF (GFIRSTCALL) THEN CNAMES(8) = 'HNO3' CNAMES(9) = 'HNO4' CNAMES(10) = 'NH3' - CNAMES(11) = 'SO2' - CNAMES(12) = 'SULF' - CNAMES(13) = 'CO' - CNAMES(14) = 'OH' - CNAMES(15) = 'HO2' - CNAMES(16) = 'CH4' - CNAMES(17) = 'ETH' - CNAMES(18) = 'ALKA' - CNAMES(19) = 'ALKE' - CNAMES(20) = 'BIO' - CNAMES(21) = 'ARO' - CNAMES(22) = 'HCHO' - CNAMES(23) = 'ALD' - CNAMES(24) = 'KET' - CNAMES(25) = 'CARBO' - CNAMES(26) = 'ONIT' - CNAMES(27) = 'PAN' - CNAMES(28) = 'OP1' - CNAMES(29) = 'OP2' - CNAMES(30) = 'ORA1' - CNAMES(31) = 'ORA2' - CNAMES(32) = 'MO2' - CNAMES(33) = 'ALKAP' - CNAMES(34) = 'ALKEP' - CNAMES(35) = 'BIOP' - CNAMES(36) = 'PHO' - CNAMES(37) = 'ADD' - CNAMES(38) = 'AROP' - CNAMES(39) = 'CARBOP' - CNAMES(40) = 'OLN' - CNAMES(41) = 'XO2' - CNAMES(42) = 'WC_O3' - CNAMES(43) = 'WC_H2O2' - CNAMES(44) = 'WC_NO' - CNAMES(45) = 'WC_NO2' - CNAMES(46) = 'WC_NO3' - CNAMES(47) = 'WC_N2O5' - CNAMES(48) = 'WC_HONO' - CNAMES(49) = 'WC_HNO3' - CNAMES(50) = 'WC_HNO4' - CNAMES(51) = 'WC_NH3' - CNAMES(52) = 'WC_OH' - CNAMES(53) = 'WC_HO2' - CNAMES(54) = 'WC_CO2' - CNAMES(55) = 'WC_SO2' - CNAMES(56) = 'WC_SULF' - CNAMES(57) = 'WC_HCHO' - CNAMES(58) = 'WC_ORA1' - CNAMES(59) = 'WC_ORA2' - CNAMES(60) = 'WC_MO2' - CNAMES(61) = 'WC_OP1' - CNAMES(62) = 'WC_ASO3' - CNAMES(63) = 'WC_ASO4' - CNAMES(64) = 'WC_ASO5' - CNAMES(65) = 'WC_AHSO5' - CNAMES(66) = 'WC_AHMS' - CNAMES(67) = 'WR_O3' - CNAMES(68) = 'WR_H2O2' - CNAMES(69) = 'WR_NO' - CNAMES(70) = 'WR_NO2' - CNAMES(71) = 'WR_NO3' - CNAMES(72) = 'WR_N2O5' - CNAMES(73) = 'WR_HONO' - CNAMES(74) = 'WR_HNO3' - CNAMES(75) = 'WR_HNO4' - CNAMES(76) = 'WR_NH3' - CNAMES(77) = 'WR_OH' - CNAMES(78) = 'WR_HO2' - CNAMES(79) = 'WR_CO2' - CNAMES(80) = 'WR_SO2' - CNAMES(81) = 'WR_SULF' - CNAMES(82) = 'WR_HCHO' - CNAMES(83) = 'WR_ORA1' - CNAMES(84) = 'WR_ORA2' - CNAMES(85) = 'WR_MO2' - CNAMES(86) = 'WR_OP1' - CNAMES(87) = 'WR_ASO3' - CNAMES(88) = 'WR_ASO4' - CNAMES(89) = 'WR_ASO5' - CNAMES(90) = 'WR_AHSO5' - CNAMES(91) = 'WR_AHMS' + CNAMES(11) = 'DMS' + CNAMES(12) = 'SO2' + CNAMES(13) = 'SULF' + CNAMES(14) = 'CO' + CNAMES(15) = 'OH' + CNAMES(16) = 'HO2' + CNAMES(17) = 'CH4' + CNAMES(18) = 'ETH' + CNAMES(19) = 'ALKA' + CNAMES(20) = 'ALKE' + CNAMES(21) = 'BIO' + CNAMES(22) = 'ARO' + CNAMES(23) = 'HCHO' + CNAMES(24) = 'ALD' + CNAMES(25) = 'KET' + CNAMES(26) = 'CARBO' + CNAMES(27) = 'ONIT' + CNAMES(28) = 'PAN' + CNAMES(29) = 'OP1' + CNAMES(30) = 'OP2' + CNAMES(31) = 'ORA1' + CNAMES(32) = 'ORA2' + CNAMES(33) = 'MO2' + CNAMES(34) = 'ALKAP' + CNAMES(35) = 'ALKEP' + CNAMES(36) = 'BIOP' + CNAMES(37) = 'PHO' + CNAMES(38) = 'ADD' + CNAMES(39) = 'AROP' + CNAMES(40) = 'CARBOP' + CNAMES(41) = 'OLN' + CNAMES(42) = 'XO2' + CNAMES(43) = 'WC_O3' + CNAMES(44) = 'WC_H2O2' + CNAMES(45) = 'WC_NO' + CNAMES(46) = 'WC_NO2' + CNAMES(47) = 'WC_NO3' + CNAMES(48) = 'WC_N2O5' + CNAMES(49) = 'WC_HONO' + CNAMES(50) = 'WC_HNO3' + CNAMES(51) = 'WC_HNO4' + CNAMES(52) = 'WC_NH3' + CNAMES(53) = 'WC_OH' + CNAMES(54) = 'WC_HO2' + CNAMES(55) = 'WC_CO2' + CNAMES(56) = 'WC_SO2' + CNAMES(57) = 'WC_SULF' + CNAMES(58) = 'WC_HCHO' + CNAMES(59) = 'WC_ORA1' + CNAMES(60) = 'WC_ORA2' + CNAMES(61) = 'WC_MO2' + CNAMES(62) = 'WC_OP1' + CNAMES(63) = 'WC_ASO3' + CNAMES(64) = 'WC_ASO4' + CNAMES(65) = 'WC_ASO5' + CNAMES(66) = 'WC_AHSO5' + CNAMES(67) = 'WC_AHMS' + CNAMES(68) = 'WR_O3' + CNAMES(69) = 'WR_H2O2' + CNAMES(70) = 'WR_NO' + CNAMES(71) = 'WR_NO2' + CNAMES(72) = 'WR_NO3' + CNAMES(73) = 'WR_N2O5' + CNAMES(74) = 'WR_HONO' + CNAMES(75) = 'WR_HNO3' + CNAMES(76) = 'WR_HNO4' + CNAMES(77) = 'WR_NH3' + CNAMES(78) = 'WR_OH' + CNAMES(79) = 'WR_HO2' + CNAMES(80) = 'WR_CO2' + CNAMES(81) = 'WR_SO2' + CNAMES(82) = 'WR_SULF' + CNAMES(83) = 'WR_HCHO' + CNAMES(84) = 'WR_ORA1' + CNAMES(85) = 'WR_ORA2' + CNAMES(86) = 'WR_MO2' + CNAMES(87) = 'WR_OP1' + CNAMES(88) = 'WR_ASO3' + CNAMES(89) = 'WR_ASO4' + CNAMES(90) = 'WR_ASO5' + CNAMES(91) = 'WR_AHSO5' + CNAMES(92) = 'WR_AHMS' ! initialisation of the names of the reactions CREACS(1) = 'K001' CREACS(2) = 'K002' @@ -3036,146 +3060,149 @@ IF (GFIRSTCALL) THEN CREACS(130) = 'K130' CREACS(131) = 'K131' CREACS(132) = 'K132' - CREACS(133) = 'KTC1' - CREACS(134) = 'KTC2' - CREACS(135) = 'KTC3' - CREACS(136) = 'KTC4' - CREACS(137) = 'KTC5' - CREACS(138) = 'KTC6' - CREACS(139) = 'KTC7' - CREACS(140) = 'KTC8' - CREACS(141) = 'KTC9' - CREACS(142) = 'KTC10' - CREACS(143) = 'KTC11' - CREACS(144) = 'KTC12' - CREACS(145) = 'KTC13' - CREACS(146) = 'KTC14' - CREACS(147) = 'KTC15' - CREACS(148) = 'KTC16' - CREACS(149) = 'KTC17' - CREACS(150) = 'KTC18' - CREACS(151) = 'KTC19' - CREACS(152) = 'KTC20' - CREACS(153) = 'KTC21' - CREACS(154) = 'KTC22' - CREACS(155) = 'KTC23' - CREACS(156) = 'KTC24' - CREACS(157) = 'KTC25' - CREACS(158) = 'KTC26' - CREACS(159) = 'KTC27' - CREACS(160) = 'KTC28' - CREACS(161) = 'KTC29' - CREACS(162) = 'KTC30' - CREACS(163) = 'KTC31' - CREACS(164) = 'KTC32' - CREACS(165) = 'KTC33' - CREACS(166) = 'KTC34' - CREACS(167) = 'KTC35' - CREACS(168) = 'KTC36' - CREACS(169) = 'KTC37' - CREACS(170) = 'KTC38' - CREACS(171) = 'KTC39' - CREACS(172) = 'KTC40' - CREACS(173) = 'KTR1' - CREACS(174) = 'KTR2' - CREACS(175) = 'KTR3' - CREACS(176) = 'KTR4' - CREACS(177) = 'KTR5' - CREACS(178) = 'KTR6' - CREACS(179) = 'KTR7' - CREACS(180) = 'KTR8' - CREACS(181) = 'KTR9' - CREACS(182) = 'KTR10' - CREACS(183) = 'KTR11' - CREACS(184) = 'KTR12' - CREACS(185) = 'KTR13' - CREACS(186) = 'KTR14' - CREACS(187) = 'KTR15' - CREACS(188) = 'KTR16' - CREACS(189) = 'KTR17' - CREACS(190) = 'KTR18' - CREACS(191) = 'KTR19' - CREACS(192) = 'KTR20' - CREACS(193) = 'KTR21' - CREACS(194) = 'KTR22' - CREACS(195) = 'KTR23' - CREACS(196) = 'KTR24' - CREACS(197) = 'KTR25' - CREACS(198) = 'KTR26' - CREACS(199) = 'KTR27' - CREACS(200) = 'KTR28' - CREACS(201) = 'KTR29' - CREACS(202) = 'KTR30' - CREACS(203) = 'KTR31' - CREACS(204) = 'KTR32' - CREACS(205) = 'KTR33' - CREACS(206) = 'KTR34' - CREACS(207) = 'KTR35' - CREACS(208) = 'KTR36' - CREACS(209) = 'KTR37' - CREACS(210) = 'KTR38' - CREACS(211) = 'KTR39' - CREACS(212) = 'KTR40' - CREACS(213) = 'KC1' - CREACS(214) = 'KC2' - CREACS(215) = 'KC3' - CREACS(216) = 'KC4' - CREACS(217) = 'KC5' - CREACS(218) = 'KC6' - CREACS(219) = 'KC7' - CREACS(220) = 'KC8' - CREACS(221) = 'KC9' - CREACS(222) = 'KC10' - CREACS(223) = 'KC11' - CREACS(224) = 'KC12' - CREACS(225) = 'KC13' - CREACS(226) = 'KC14' - CREACS(227) = 'KC15' - CREACS(228) = 'KC16' - CREACS(229) = 'KC17' - CREACS(230) = 'KC18' - CREACS(231) = 'KC19' - CREACS(232) = 'KC20' - CREACS(233) = 'KC21' - CREACS(234) = 'KC22' - CREACS(235) = 'KC23' - CREACS(236) = 'KC24' - CREACS(237) = 'KC25' - CREACS(238) = 'KC26' - CREACS(239) = 'KC27' - CREACS(240) = 'KC28' - CREACS(241) = 'KC29' - CREACS(242) = 'KC30' - CREACS(243) = 'KR1' - CREACS(244) = 'KR2' - CREACS(245) = 'KR3' - CREACS(246) = 'KR4' - CREACS(247) = 'KR5' - CREACS(248) = 'KR6' - CREACS(249) = 'KR7' - CREACS(250) = 'KR8' - CREACS(251) = 'KR9' - CREACS(252) = 'KR10' - CREACS(253) = 'KR11' - CREACS(254) = 'KR12' - CREACS(255) = 'KR13' - CREACS(256) = 'KR14' - CREACS(257) = 'KR15' - CREACS(258) = 'KR16' - CREACS(259) = 'KR17' - CREACS(260) = 'KR18' - CREACS(261) = 'KR19' - CREACS(262) = 'KR20' - CREACS(263) = 'KR21' - CREACS(264) = 'KR22' - CREACS(265) = 'KR23' - CREACS(266) = 'KR24' - CREACS(267) = 'KR25' - CREACS(268) = 'KR26' - CREACS(269) = 'KR27' - CREACS(270) = 'KR28' - CREACS(271) = 'KR29' - CREACS(272) = 'KR30' + CREACS(133) = 'K133' + CREACS(134) = 'K134' + CREACS(135) = 'K135' + CREACS(136) = 'KTC1' + CREACS(137) = 'KTC2' + CREACS(138) = 'KTC3' + CREACS(139) = 'KTC4' + CREACS(140) = 'KTC5' + CREACS(141) = 'KTC6' + CREACS(142) = 'KTC7' + CREACS(143) = 'KTC8' + CREACS(144) = 'KTC9' + CREACS(145) = 'KTC10' + CREACS(146) = 'KTC11' + CREACS(147) = 'KTC12' + CREACS(148) = 'KTC13' + CREACS(149) = 'KTC14' + CREACS(150) = 'KTC15' + CREACS(151) = 'KTC16' + CREACS(152) = 'KTC17' + CREACS(153) = 'KTC18' + CREACS(154) = 'KTC19' + CREACS(155) = 'KTC20' + CREACS(156) = 'KTC21' + CREACS(157) = 'KTC22' + CREACS(158) = 'KTC23' + CREACS(159) = 'KTC24' + CREACS(160) = 'KTC25' + CREACS(161) = 'KTC26' + CREACS(162) = 'KTC27' + CREACS(163) = 'KTC28' + CREACS(164) = 'KTC29' + CREACS(165) = 'KTC30' + CREACS(166) = 'KTC31' + CREACS(167) = 'KTC32' + CREACS(168) = 'KTC33' + CREACS(169) = 'KTC34' + CREACS(170) = 'KTC35' + CREACS(171) = 'KTC36' + CREACS(172) = 'KTC37' + CREACS(173) = 'KTC38' + CREACS(174) = 'KTC39' + CREACS(175) = 'KTC40' + CREACS(176) = 'KTR1' + CREACS(177) = 'KTR2' + CREACS(178) = 'KTR3' + CREACS(179) = 'KTR4' + CREACS(180) = 'KTR5' + CREACS(181) = 'KTR6' + CREACS(182) = 'KTR7' + CREACS(183) = 'KTR8' + CREACS(184) = 'KTR9' + CREACS(185) = 'KTR10' + CREACS(186) = 'KTR11' + CREACS(187) = 'KTR12' + CREACS(188) = 'KTR13' + CREACS(189) = 'KTR14' + CREACS(190) = 'KTR15' + CREACS(191) = 'KTR16' + CREACS(192) = 'KTR17' + CREACS(193) = 'KTR18' + CREACS(194) = 'KTR19' + CREACS(195) = 'KTR20' + CREACS(196) = 'KTR21' + CREACS(197) = 'KTR22' + CREACS(198) = 'KTR23' + CREACS(199) = 'KTR24' + CREACS(200) = 'KTR25' + CREACS(201) = 'KTR26' + CREACS(202) = 'KTR27' + CREACS(203) = 'KTR28' + CREACS(204) = 'KTR29' + CREACS(205) = 'KTR30' + CREACS(206) = 'KTR31' + CREACS(207) = 'KTR32' + CREACS(208) = 'KTR33' + CREACS(209) = 'KTR34' + CREACS(210) = 'KTR35' + CREACS(211) = 'KTR36' + CREACS(212) = 'KTR37' + CREACS(213) = 'KTR38' + CREACS(214) = 'KTR39' + CREACS(215) = 'KTR40' + CREACS(216) = 'KC1' + CREACS(217) = 'KC2' + CREACS(218) = 'KC3' + CREACS(219) = 'KC4' + CREACS(220) = 'KC5' + CREACS(221) = 'KC6' + CREACS(222) = 'KC7' + CREACS(223) = 'KC8' + CREACS(224) = 'KC9' + CREACS(225) = 'KC10' + CREACS(226) = 'KC11' + CREACS(227) = 'KC12' + CREACS(228) = 'KC13' + CREACS(229) = 'KC14' + CREACS(230) = 'KC15' + CREACS(231) = 'KC16' + CREACS(232) = 'KC17' + CREACS(233) = 'KC18' + CREACS(234) = 'KC19' + CREACS(235) = 'KC20' + CREACS(236) = 'KC21' + CREACS(237) = 'KC22' + CREACS(238) = 'KC23' + CREACS(239) = 'KC24' + CREACS(240) = 'KC25' + CREACS(241) = 'KC26' + CREACS(242) = 'KC27' + CREACS(243) = 'KC28' + CREACS(244) = 'KC29' + CREACS(245) = 'KC30' + CREACS(246) = 'KR1' + CREACS(247) = 'KR2' + CREACS(248) = 'KR3' + CREACS(249) = 'KR4' + CREACS(250) = 'KR5' + CREACS(251) = 'KR6' + CREACS(252) = 'KR7' + CREACS(253) = 'KR8' + CREACS(254) = 'KR9' + CREACS(255) = 'KR10' + CREACS(256) = 'KR11' + CREACS(257) = 'KR12' + CREACS(258) = 'KR13' + CREACS(259) = 'KR14' + CREACS(260) = 'KR15' + CREACS(261) = 'KR16' + CREACS(262) = 'KR17' + CREACS(263) = 'KR18' + CREACS(264) = 'KR19' + CREACS(265) = 'KR20' + CREACS(266) = 'KR21' + CREACS(267) = 'KR22' + CREACS(268) = 'KR23' + CREACS(269) = 'KR24' + CREACS(270) = 'KR25' + CREACS(271) = 'KR26' + CREACS(272) = 'KR27' + CREACS(273) = 'KR28' + CREACS(274) = 'KR29' + CREACS(275) = 'KR30' ! initialisation of the full reactions CFULLREACS(1) = 'K001=!ZRATES(:,001)::NO2-->O3P+NO' CFULLREACS(2) = 'K002=!ZRATES(:,002)::O3-->O1D+O2' @@ -3406,340 +3433,344 @@ IF (GFIRSTCALL) THEN CFULLREACS(130) = 'K130=4.00E-12::XO2+NO-->NO2' CFULLREACS(131) = 'K131=1.20E-12::XO2+NO3-->NO2' CFULLREACS(132) = 'K132=1.00E-40::SULF-->' - CFULLREACS(133) = 'KTC1=@KT(0.05,48.,TPK%T,TPK%RADC,KVECNPT)*TPK%LWC::O3-->WC_& + CFULLREACS(133) = 'K133=5.40E-13::DMS+NO3-->SO2+NO2' + CFULLREACS(134) = 'K134=1.30E-11*exp(-(400./TPK%T))::DMS+O3P-->SO2' + CFULLREACS(135) = 'K135=(TPK%T*exp(-234./TPK%T)+8.4E-10*exp(7230./TPK%T)+2.68E& +&-10*exp(7810./TPK%T))/(1.04E11*TPK%T+88.1*exp(7460./TPK%T))::DMS+OH-->0.8*SO2' + CFULLREACS(136) = 'KTC1=@KT(0.05,48.,TPK%T,TPK%RADC,KVECNPT)*TPK%LWC::O3-->WC_& &O3' - CFULLREACS(134) = 'KTC2=@KT(0.11,34.,TPK%T,TPK%RADC,KVECNPT)*TPK%LWC::H2O2-->W& + CFULLREACS(137) = 'KTC2=@KT(0.11,34.,TPK%T,TPK%RADC,KVECNPT)*TPK%LWC::H2O2-->W& &C_H2O2' - CFULLREACS(135) = 'KTC3=@KT(0.0001,30.,TPK%T,TPK%RADC,KVECNPT)*TPK%LWC::NO-->W& + CFULLREACS(138) = 'KTC3=@KT(0.0001,30.,TPK%T,TPK%RADC,KVECNPT)*TPK%LWC::NO-->W& &C_NO' - CFULLREACS(136) = 'KTC4=@KT(0.0015,46.,TPK%T,TPK%RADC,KVECNPT)*TPK%LWC::NO2-->& + CFULLREACS(139) = 'KTC4=@KT(0.0015,46.,TPK%T,TPK%RADC,KVECNPT)*TPK%LWC::NO2-->& &WC_NO2' - CFULLREACS(137) = 'KTC5=@KT(0.05,62.,TPK%T,TPK%RADC,KVECNPT)*TPK%LWC::NO3-->WC& + CFULLREACS(140) = 'KTC5=@KT(0.05,62.,TPK%T,TPK%RADC,KVECNPT)*TPK%LWC::NO3-->WC& &_NO3' - CFULLREACS(138) = 'KTC6=@KT(0.0037,108.,TPK%T,TPK%RADC,KVECNPT)*TPK%LWC::N2O5-& + CFULLREACS(141) = 'KTC6=@KT(0.0037,108.,TPK%T,TPK%RADC,KVECNPT)*TPK%LWC::N2O5-& &->WC_N2O5' - CFULLREACS(139) = 'KTC7=@KT(0.05,47.,TPK%T,TPK%RADC,KVECNPT)*TPK%LWC::HONO-->W& + CFULLREACS(142) = 'KTC7=@KT(0.05,47.,TPK%T,TPK%RADC,KVECNPT)*TPK%LWC::HONO-->W& &C_HONO' - CFULLREACS(140) = 'KTC8=@KT(0.054,63.,TPK%T,TPK%RADC,KVECNPT)*TPK%LWC::HNO3-->& + CFULLREACS(143) = 'KTC8=@KT(0.054,63.,TPK%T,TPK%RADC,KVECNPT)*TPK%LWC::HNO3-->& &WC_HNO3' - CFULLREACS(141) = 'KTC9=@KT(0.05,79.,TPK%T,TPK%RADC,KVECNPT)*TPK%LWC::HNO4-->W& + CFULLREACS(144) = 'KTC9=@KT(0.05,79.,TPK%T,TPK%RADC,KVECNPT)*TPK%LWC::HNO4-->W& &C_HNO4' - CFULLREACS(142) = 'KTC10=@KT(0.04,17.,TPK%T,TPK%RADC,KVECNPT)*TPK%LWC::NH3-->W& + CFULLREACS(145) = 'KTC10=@KT(0.04,17.,TPK%T,TPK%RADC,KVECNPT)*TPK%LWC::NH3-->W& &C_NH3' - CFULLREACS(143) = 'KTC11=@KT(0.05,17.,TPK%T,TPK%RADC,KVECNPT)*TPK%LWC::OH-->WC& + CFULLREACS(146) = 'KTC11=@KT(0.05,17.,TPK%T,TPK%RADC,KVECNPT)*TPK%LWC::OH-->WC& &_OH' - CFULLREACS(144) = 'KTC12=@KT(0.2,30.,TPK%T,TPK%RADC,KVECNPT)*TPK%LWC::HO2-->WC& + CFULLREACS(147) = 'KTC12=@KT(0.2,30.,TPK%T,TPK%RADC,KVECNPT)*TPK%LWC::HO2-->WC& &_HO2' - CFULLREACS(145) = 'KTC13=@KT(0.0002,44.,TPK%T,TPK%RADC,KVECNPT)*TPK%LWC::CO2--& + CFULLREACS(148) = 'KTC13=@KT(0.0002,44.,TPK%T,TPK%RADC,KVECNPT)*TPK%LWC::CO2--& &>WC_CO2' - CFULLREACS(146) = 'KTC14=@KT(0.11,64.,TPK%T,TPK%RADC,KVECNPT)*TPK%LWC::SO2-->W& + CFULLREACS(149) = 'KTC14=@KT(0.11,64.,TPK%T,TPK%RADC,KVECNPT)*TPK%LWC::SO2-->W& &C_SO2' - CFULLREACS(147) = 'KTC15=@KT(0.07,98.,TPK%T,TPK%RADC,KVECNPT)*TPK%LWC::SULF-->& + CFULLREACS(150) = 'KTC15=@KT(0.07,98.,TPK%T,TPK%RADC,KVECNPT)*TPK%LWC::SULF-->& &WC_SULF' - CFULLREACS(148) = 'KTC16=@KT(0.04,30.,TPK%T,TPK%RADC,KVECNPT)*TPK%LWC::HCHO-->& + CFULLREACS(151) = 'KTC16=@KT(0.04,30.,TPK%T,TPK%RADC,KVECNPT)*TPK%LWC::HCHO-->& &WC_HCHO' - CFULLREACS(149) = 'KTC17=@KT(0.012,46.,TPK%T,TPK%RADC,KVECNPT)*TPK%LWC::ORA1--& + CFULLREACS(152) = 'KTC17=@KT(0.012,46.,TPK%T,TPK%RADC,KVECNPT)*TPK%LWC::ORA1--& &>WC_ORA1' - CFULLREACS(150) = 'KTC18=@KT(0.03,60.,TPK%T,TPK%RADC,KVECNPT)*TPK%LWC::ORA2-->& + CFULLREACS(153) = 'KTC18=@KT(0.03,60.,TPK%T,TPK%RADC,KVECNPT)*TPK%LWC::ORA2-->& &WC_ORA2' - CFULLREACS(151) = 'KTC19=@KT(0.05,47.,TPK%T,TPK%RADC,KVECNPT)*TPK%LWC::MO2-->W& + CFULLREACS(154) = 'KTC19=@KT(0.05,47.,TPK%T,TPK%RADC,KVECNPT)*TPK%LWC::MO2-->W& &C_MO2' - CFULLREACS(152) = 'KTC20=@KT(0.007,48.,TPK%T,TPK%RADC,KVECNPT)*TPK%LWC::OP1-->& + CFULLREACS(155) = 'KTC20=@KT(0.007,48.,TPK%T,TPK%RADC,KVECNPT)*TPK%LWC::OP1-->& &WC_OP1' - CFULLREACS(153) = 'KTC21=@KT(0.05,48.,TPK%T,TPK%RADC,KVECNPT)/(@HENRY(1.1e-2,-& -&2830.,TPK%T,KVECNPT)*TPK%RCH*TPK%T)::WC_O3-->O3' - CFULLREACS(154) = 'KTC22=@KT(0.11,34.,TPK%T,TPK%RADC,KVECNPT)/(@HENRY(7.73e4,-& -&7310.,TPK%T,KVECNPT)*TPK%RCH*TPK%T)::WC_H2O2-->H2O2' - CFULLREACS(155) = 'KTC23=@KT(0.0001,30.,TPK%T,TPK%RADC,KVECNPT)/(@HENRY(1.92e-& + CFULLREACS(156) = 'KTC21=@KT(0.05,48.,TPK%T,TPK%RADC,KVECNPT)/(@HENRY(1.03e-2,& +&-2830.,TPK%T,KVECNPT)*TPK%RCH*TPK%T)::WC_O3-->O3' + CFULLREACS(157) = 'KTC22=@KT(0.11,34.,TPK%T,TPK%RADC,KVECNPT)/(@HENRY(8.44e4,-& +&7600.,TPK%T,KVECNPT)*TPK%RCH*TPK%T)::WC_H2O2-->H2O2' + CFULLREACS(158) = 'KTC23=@KT(0.0001,30.,TPK%T,TPK%RADC,KVECNPT)/(@HENRY(1.92e-& &3,-1790.,TPK%T,KVECNPT)*TPK%RCH*TPK%T)::WC_NO-->NO' - CFULLREACS(156) = 'KTC24=@KT(0.0015,46.,TPK%T,TPK%RADC,KVECNPT)/(@HENRY(1.4e-2& -&,0.,TPK%T,KVECNPT)*TPK%RCH*TPK%T)::WC_NO2-->NO2' - CFULLREACS(157) = 'KTC25=@KT(0.05,62.,TPK%T,TPK%RADC,KVECNPT)/(@HENRY(3.8e-2,0& + CFULLREACS(159) = 'KTC24=@KT(0.0015,46.,TPK%T,TPK%RADC,KVECNPT)/(@HENRY(1.2e-2& +&,-2400.,TPK%T,KVECNPT)*TPK%RCH*TPK%T)::WC_NO2-->NO2' + CFULLREACS(160) = 'KTC25=@KT(0.05,62.,TPK%T,TPK%RADC,KVECNPT)/(@HENRY(3.8e-2,0& &.,TPK%T,KVECNPT)*TPK%RCH*TPK%T)::WC_NO3-->NO3' - CFULLREACS(158) = 'KTC26=@KT(0.0037,108.,TPK%T,TPK%RADC,KVECNPT)/(@HENRY(2.1,-& -&3400.,TPK%T,KVECNPT)*TPK%RCH*TPK%T)::WC_N2O5-->N2O5' - CFULLREACS(159) = 'KTC27=@KT(0.05,47.,TPK%T,TPK%RADC,KVECNPT)/(@HEFFA(5.0e1,-4& + CFULLREACS(161) = 'KTC26=@KT(0.0037,108.,TPK%T,TPK%RADC,KVECNPT)/(@HENRY(8.8e-& +&2,-3600.,TPK%T,KVECNPT)*TPK%RCH*TPK%T)::WC_N2O5-->N2O5' + CFULLREACS(162) = 'KTC27=@KT(0.05,47.,TPK%T,TPK%RADC,KVECNPT)/(@HEFFA(5.0e1,-4& &880.,1.6e-3,1760.,0.,0.,TPK%PHC,TPK%T,KVECNPT)*TPK%RCH*TPK%T)::WC_HONO-->HONO' - CFULLREACS(160) = 'KTC28=@KT(0.054,63.,TPK%T,TPK%RADC,KVECNPT)/(@HEFFA(2.1e5,-& -&8700.,2.2e1,0.,0.,0.,TPK%PHC,TPK%T,KVECNPT)*TPK%RCH*TPK%T)::WC_HNO3-->HNO3' - CFULLREACS(161) = 'KTC29=@KT(0.05,79.,TPK%T,TPK%RADC,KVECNPT)/(@HEFFA(1.2e4,-6& + CFULLREACS(163) = 'KTC28=@KT(0.054,63.,TPK%T,TPK%RADC,KVECNPT)/(@HEFFA(2.1e5,-& +&10500.,2.2e1,0.,0.,0.,TPK%PHC,TPK%T,KVECNPT)*TPK%RCH*TPK%T)::WC_HNO3-->HNO3' + CFULLREACS(164) = 'KTC29=@KT(0.05,79.,TPK%T,TPK%RADC,KVECNPT)/(@HEFFA(1.2e4,-6& &900.,1.26e-6,0.,0.,0.,TPK%PHC,TPK%T,KVECNPT)*TPK%RCH*TPK%T)::WC_HNO4-->HNO4' - CFULLREACS(162) = 'KTC30=@KT(0.04,17.,TPK%T,TPK%RADC,KVECNPT)/(@HEFFB(6.02e1,-& + CFULLREACS(165) = 'KTC30=@KT(0.04,17.,TPK%T,TPK%RADC,KVECNPT)/(@HEFFB(6.02e1,-& &4160.,1.7e-5,4350.,TPK%PHC,TPK%T,KVECNPT)*TPK%RCH*TPK%T)::WC_NH3-->NH3' - CFULLREACS(163) = 'KTC31=@KT(0.05,17.,TPK%T,TPK%RADC,KVECNPT)/(@HENRY(3.9e1,0.& + CFULLREACS(166) = 'KTC31=@KT(0.05,17.,TPK%T,TPK%RADC,KVECNPT)/(@HENRY(3.9e1,0.& &,TPK%T,KVECNPT)*TPK%RCH*TPK%T)::WC_OH-->OH' - CFULLREACS(164) = 'KTC32=@KT(0.2,30.,TPK%T,TPK%RADC,KVECNPT)/(@HEFFA(6.9e2,0.,& + CFULLREACS(167) = 'KTC32=@KT(0.2,30.,TPK%T,TPK%RADC,KVECNPT)/(@HEFFA(6.9e2,0.,& &1.6e-5,0.,0.,0.,TPK%PHC,TPK%T,KVECNPT)*TPK%RCH*TPK%T)::WC_HO2-->HO2' - CFULLREACS(165) = 'KTC33=@KT(0.0002,44.,TPK%T,TPK%RADC,KVECNPT)/(@HEFFA(3.4e-2& + CFULLREACS(168) = 'KTC33=@KT(0.0002,44.,TPK%T,TPK%RADC,KVECNPT)/(@HEFFA(3.4e-2& &,-2710.,4.3e-7,920.,4.7e-11,1780.,TPK%PHC,TPK%T,KVECNPT)*TPK%RCH*TPK%T)::WC_CO& &2-->CO2' - CFULLREACS(166) = 'KTC34=@KT(0.11,64.,TPK%T,TPK%RADC,KVECNPT)/(@HEFFA(1.36,-29& + CFULLREACS(169) = 'KTC34=@KT(0.11,64.,TPK%T,TPK%RADC,KVECNPT)/(@HEFFA(1.36,-29& &30.,1.3e-2,-1965.,6.4e-8,-1430.,TPK%PHC,TPK%T,KVECNPT)*TPK%RCH*TPK%T)::WC_SO2-& &->SO2' - CFULLREACS(167) = 'KTC35=@KT(0.07,98.,TPK%T,TPK%RADC,KVECNPT)/(@HEFFA(2.1e5,-8& + CFULLREACS(170) = 'KTC35=@KT(0.07,98.,TPK%T,TPK%RADC,KVECNPT)/(@HEFFA(2.1e5,-8& &700.,1.0e3,0.,1.0e-2,0.,TPK%PHC,TPK%T,KVECNPT)*TPK%RCH*TPK%T)::WC_SULF-->SULF' - CFULLREACS(168) = 'KTC36=@KT(0.04,30.,TPK%T,TPK%RADC,KVECNPT)/(@HENRY(3.23e3,-& + CFULLREACS(171) = 'KTC36=@KT(0.04,30.,TPK%T,TPK%RADC,KVECNPT)/(@HENRY(3.23e3,-& &7100.,TPK%T,KVECNPT)*TPK%RCH*TPK%T)::WC_HCHO-->HCHO' - CFULLREACS(169) = 'KTC37=@KT(0.012,46.,TPK%T,TPK%RADC,KVECNPT)/(@HEFFA(8.9e3,-& + CFULLREACS(172) = 'KTC37=@KT(0.012,46.,TPK%T,TPK%RADC,KVECNPT)/(@HEFFA(8.9e3,-& &6100.,1.8e-4,150.,0.,0.,TPK%PHC,TPK%T,KVECNPT)*TPK%RCH*TPK%T)::WC_ORA1-->ORA1' - CFULLREACS(170) = 'KTC38=@KT(0.03,60.,TPK%T,TPK%RADC,KVECNPT)/(@HEFFA(4.1e3,-6& + CFULLREACS(173) = 'KTC38=@KT(0.03,60.,TPK%T,TPK%RADC,KVECNPT)/(@HEFFA(4.1e3,-6& &200.,1.74e-5,0.,0.,0.,TPK%PHC,TPK%T,KVECNPT)*TPK%RCH*TPK%T)::WC_ORA2-->ORA2' - CFULLREACS(171) = 'KTC39=@KT(0.05,47.,TPK%T,TPK%RADC,KVECNPT)/(@HENRY(2.7e0,-2& -&030.,TPK%T,KVECNPT)*TPK%RCH*TPK%T)::WC_MO2-->MO2' - CFULLREACS(172) = 'KTC40=@KT(0.007,48.,TPK%T,TPK%RADC,KVECNPT)/(@HENRY(3.e2,-5& + CFULLREACS(174) = 'KTC39=@KT(0.05,47.,TPK%T,TPK%RADC,KVECNPT)/(@HENRY(2.45e0,-& +&5280.,TPK%T,KVECNPT)*TPK%RCH*TPK%T)::WC_MO2-->MO2' + CFULLREACS(175) = 'KTC40=@KT(0.007,48.,TPK%T,TPK%RADC,KVECNPT)/(@HENRY(3.e2,-5& &280.,TPK%T,KVECNPT)*TPK%RCH*TPK%T)::WC_OP1-->OP1' - CFULLREACS(173) = 'KTR1=@KT(0.05,48.,TPK%T,TPK%RADR,KVECNPT)*TPK%LWR::O3-->WR_& + CFULLREACS(176) = 'KTR1=@KT(0.05,48.,TPK%T,TPK%RADR,KVECNPT)*TPK%LWR::O3-->WR_& &O3' - CFULLREACS(174) = 'KTR2=@KT(0.11,34.,TPK%T,TPK%RADR,KVECNPT)*TPK%LWR::H2O2-->W& + CFULLREACS(177) = 'KTR2=@KT(0.11,34.,TPK%T,TPK%RADR,KVECNPT)*TPK%LWR::H2O2-->W& &R_H2O2' - CFULLREACS(175) = 'KTR3=@KT(0.0001,30.,TPK%T,TPK%RADR,KVECNPT)*TPK%LWR::NO-->W& + CFULLREACS(178) = 'KTR3=@KT(0.0001,30.,TPK%T,TPK%RADR,KVECNPT)*TPK%LWR::NO-->W& &R_NO' - CFULLREACS(176) = 'KTR4=@KT(0.0015,46.,TPK%T,TPK%RADR,KVECNPT)*TPK%LWR::NO2-->& + CFULLREACS(179) = 'KTR4=@KT(0.0015,46.,TPK%T,TPK%RADR,KVECNPT)*TPK%LWR::NO2-->& &WR_NO2' - CFULLREACS(177) = 'KTR5=@KT(0.05,62.,TPK%T,TPK%RADR,KVECNPT)*TPK%LWR::NO3-->WR& + CFULLREACS(180) = 'KTR5=@KT(0.05,62.,TPK%T,TPK%RADR,KVECNPT)*TPK%LWR::NO3-->WR& &_NO3' - CFULLREACS(178) = 'KTR6=@KT(0.0037,108.,TPK%T,TPK%RADR,KVECNPT)*TPK%LWR::N2O5-& + CFULLREACS(181) = 'KTR6=@KT(0.0037,108.,TPK%T,TPK%RADR,KVECNPT)*TPK%LWR::N2O5-& &->WR_N2O5' - CFULLREACS(179) = 'KTR7=@KT(0.05,47.,TPK%T,TPK%RADR,KVECNPT)*TPK%LWR::HONO-->W& + CFULLREACS(182) = 'KTR7=@KT(0.05,47.,TPK%T,TPK%RADR,KVECNPT)*TPK%LWR::HONO-->W& &R_HONO' - CFULLREACS(180) = 'KTR8=@KT(0.054,63.,TPK%T,TPK%RADR,KVECNPT)*TPK%LWR::HNO3-->& + CFULLREACS(183) = 'KTR8=@KT(0.054,63.,TPK%T,TPK%RADR,KVECNPT)*TPK%LWR::HNO3-->& &WR_HNO3' - CFULLREACS(181) = 'KTR9=@KT(0.05,79.,TPK%T,TPK%RADR,KVECNPT)*TPK%LWR::HNO4-->W& + CFULLREACS(184) = 'KTR9=@KT(0.05,79.,TPK%T,TPK%RADR,KVECNPT)*TPK%LWR::HNO4-->W& &R_HNO4' - CFULLREACS(182) = 'KTR10=@KT(0.04,17.,TPK%T,TPK%RADR,KVECNPT)*TPK%LWR::NH3-->W& + CFULLREACS(185) = 'KTR10=@KT(0.04,17.,TPK%T,TPK%RADR,KVECNPT)*TPK%LWR::NH3-->W& &R_NH3' - CFULLREACS(183) = 'KTR11=@KT(0.05,17.,TPK%T,TPK%RADR,KVECNPT)*TPK%LWR::OH-->WR& + CFULLREACS(186) = 'KTR11=@KT(0.05,17.,TPK%T,TPK%RADR,KVECNPT)*TPK%LWR::OH-->WR& &_OH' - CFULLREACS(184) = 'KTR12=@KT(0.2,30.,TPK%T,TPK%RADR,KVECNPT)*TPK%LWR::HO2-->WR& + CFULLREACS(187) = 'KTR12=@KT(0.2,30.,TPK%T,TPK%RADR,KVECNPT)*TPK%LWR::HO2-->WR& &_HO2' - CFULLREACS(185) = 'KTR13=@KT(0.0002,44.,TPK%T,TPK%RADR,KVECNPT)*TPK%LWR::CO2--& + CFULLREACS(188) = 'KTR13=@KT(0.0002,44.,TPK%T,TPK%RADR,KVECNPT)*TPK%LWR::CO2--& &>WR_CO2' - CFULLREACS(186) = 'KTR14=@KT(0.11,64.,TPK%T,TPK%RADR,KVECNPT)*TPK%LWR::SO2-->W& + CFULLREACS(189) = 'KTR14=@KT(0.11,64.,TPK%T,TPK%RADR,KVECNPT)*TPK%LWR::SO2-->W& &R_SO2' - CFULLREACS(187) = 'KTR15=@KT(0.07,98.,TPK%T,TPK%RADR,KVECNPT)*TPK%LWR::SULF-->& + CFULLREACS(190) = 'KTR15=@KT(0.07,98.,TPK%T,TPK%RADR,KVECNPT)*TPK%LWR::SULF-->& &WR_SULF' - CFULLREACS(188) = 'KTR16=@KT(0.04,30.,TPK%T,TPK%RADR,KVECNPT)*TPK%LWR::HCHO-->& + CFULLREACS(191) = 'KTR16=@KT(0.04,30.,TPK%T,TPK%RADR,KVECNPT)*TPK%LWR::HCHO-->& &WR_HCHO' - CFULLREACS(189) = 'KTR17=@KT(0.012,46.,TPK%T,TPK%RADR,KVECNPT)*TPK%LWR::ORA1--& + CFULLREACS(192) = 'KTR17=@KT(0.012,46.,TPK%T,TPK%RADR,KVECNPT)*TPK%LWR::ORA1--& &>WR_ORA1' - CFULLREACS(190) = 'KTR18=@KT(0.03,60.,TPK%T,TPK%RADR,KVECNPT)*TPK%LWR::ORA2-->& + CFULLREACS(193) = 'KTR18=@KT(0.03,60.,TPK%T,TPK%RADR,KVECNPT)*TPK%LWR::ORA2-->& &WR_ORA2' - CFULLREACS(191) = 'KTR19=@KT(0.05,47.,TPK%T,TPK%RADR,KVECNPT)*TPK%LWR::MO2-->W& + CFULLREACS(194) = 'KTR19=@KT(0.05,47.,TPK%T,TPK%RADR,KVECNPT)*TPK%LWR::MO2-->W& &R_MO2' - CFULLREACS(192) = 'KTR20=@KT(0.007,48.,TPK%T,TPK%RADR,KVECNPT)*TPK%LWR::OP1-->& + CFULLREACS(195) = 'KTR20=@KT(0.007,48.,TPK%T,TPK%RADR,KVECNPT)*TPK%LWR::OP1-->& &WR_OP1' - CFULLREACS(193) = 'KTR21=@KT(0.05,48.,TPK%T,TPK%RADR,KVECNPT)/(@HENRY(1.1e-2,-& -&2830.,TPK%T,KVECNPT)*TPK%RCH*TPK%T)::WR_O3-->O3' - CFULLREACS(194) = 'KTR22=@KT(0.11,34.,TPK%T,TPK%RADR,KVECNPT)/(@HENRY(7.73e4,-& -&7310.,TPK%T,KVECNPT)*TPK%RCH*TPK%T)::WR_H2O2-->H2O2' - CFULLREACS(195) = 'KTR23=@KT(0.0001,30.,TPK%T,TPK%RADR,KVECNPT)/(@HENRY(1.92e-& + CFULLREACS(196) = 'KTR21=@KT(0.05,48.,TPK%T,TPK%RADR,KVECNPT)/(@HENRY(1.03e-2,& +&-2830.,TPK%T,KVECNPT)*TPK%RCH*TPK%T)::WR_O3-->O3' + CFULLREACS(197) = 'KTR22=@KT(0.11,34.,TPK%T,TPK%RADR,KVECNPT)/(@HENRY(8.44e4,-& +&7600.,TPK%T,KVECNPT)*TPK%RCH*TPK%T)::WR_H2O2-->H2O2' + CFULLREACS(198) = 'KTR23=@KT(0.0001,30.,TPK%T,TPK%RADR,KVECNPT)/(@HENRY(1.92e-& &3,-1790.,TPK%T,KVECNPT)*TPK%RCH*TPK%T)::WR_NO-->NO' - CFULLREACS(196) = 'KTR24=@KT(0.0015,46.,TPK%T,TPK%RADR,KVECNPT)/(@HENRY(1.4e-2& -&,0.,TPK%T,KVECNPT)*TPK%RCH*TPK%T)::WR_NO2-->NO2' - CFULLREACS(197) = 'KTR25=@KT(0.05,62.,TPK%T,TPK%RADR,KVECNPT)/(@HENRY(3.8e-2,0& + CFULLREACS(199) = 'KTR24=@KT(0.0015,46.,TPK%T,TPK%RADR,KVECNPT)/(@HENRY(1.2e-2& +&,-2400.,TPK%T,KVECNPT)*TPK%RCH*TPK%T)::WR_NO2-->NO2' + CFULLREACS(200) = 'KTR25=@KT(0.05,62.,TPK%T,TPK%RADR,KVECNPT)/(@HENRY(3.8e-2,0& &.,TPK%T,KVECNPT)*TPK%RCH*TPK%T)::WR_NO3-->NO3' - CFULLREACS(198) = 'KTR26=@KT(0.0037,108.,TPK%T,TPK%RADR,KVECNPT)/(@HENRY(2.1,-& -&3400.,TPK%T,KVECNPT)*TPK%RCH*TPK%T)::WR_N2O5-->N2O5' - CFULLREACS(199) = 'KTR27=@KT(0.05,47.,TPK%T,TPK%RADR,KVECNPT)/(@HEFFA(5.0e1,-4& + CFULLREACS(201) = 'KTR26=@KT(0.0037,108.,TPK%T,TPK%RADR,KVECNPT)/(@HENRY(8.8e-& +&2,-3600.,TPK%T,KVECNPT)*TPK%RCH*TPK%T)::WR_N2O5-->N2O5' + CFULLREACS(202) = 'KTR27=@KT(0.05,47.,TPK%T,TPK%RADR,KVECNPT)/(@HEFFA(5.0e1,-4& &880.,1.6e-3,1760.,0.,0.,TPK%PHR,TPK%T,KVECNPT)*TPK%RCH*TPK%T)::WR_HONO-->HONO' - CFULLREACS(200) = 'KTR28=@KT(0.054,63.,TPK%T,TPK%RADR,KVECNPT)/(@HEFFA(2.1e5,-& -&8700.,2.2e1,0.,0.,0.,TPK%PHR,TPK%T,KVECNPT)*TPK%RCH*TPK%T)::WR_HNO3-->HNO3' - CFULLREACS(201) = 'KTR29=@KT(0.05,79.,TPK%T,TPK%RADR,KVECNPT)/(@HEFFA(1.2e4,-6& + CFULLREACS(203) = 'KTR28=@KT(0.054,63.,TPK%T,TPK%RADR,KVECNPT)/(@HEFFA(2.1e5,-& +&10500.,2.2e1,0.,0.,0.,TPK%PHR,TPK%T,KVECNPT)*TPK%RCH*TPK%T)::WR_HNO3-->HNO3' + CFULLREACS(204) = 'KTR29=@KT(0.05,79.,TPK%T,TPK%RADR,KVECNPT)/(@HEFFA(1.2e4,-6& &900.,1.26e-6,0.,0.,0.,TPK%PHR,TPK%T,KVECNPT)*TPK%RCH*TPK%T)::WR_HNO4-->HNO4' - CFULLREACS(202) = 'KTR30=@KT(0.04,17.,TPK%T,TPK%RADR,KVECNPT)/(@HEFFB(6.02e1,-& + CFULLREACS(205) = 'KTR30=@KT(0.04,17.,TPK%T,TPK%RADR,KVECNPT)/(@HEFFB(6.02e1,-& &4160.,1.7e-5,4350.,TPK%PHR,TPK%T,KVECNPT)*TPK%RCH*TPK%T)::WR_NH3-->NH3' - CFULLREACS(203) = 'KTR31=@KT(0.05,17.,TPK%T,TPK%RADR,KVECNPT)/(@HENRY(3.9e1,0.& + CFULLREACS(206) = 'KTR31=@KT(0.05,17.,TPK%T,TPK%RADR,KVECNPT)/(@HENRY(3.9e1,0.& &,TPK%T,KVECNPT)*TPK%RCH*TPK%T)::WR_OH-->OH' - CFULLREACS(204) = 'KTR32=@KT(0.2,30.,TPK%T,TPK%RADR,KVECNPT)/(@HEFFA(6.9e2,0.,& + CFULLREACS(207) = 'KTR32=@KT(0.2,30.,TPK%T,TPK%RADR,KVECNPT)/(@HEFFA(6.9e2,0.,& &1.6e-5,0.,0.,0.,TPK%PHR,TPK%T,KVECNPT)*TPK%RCH*TPK%T)::WR_HO2-->HO2' - CFULLREACS(205) = 'KTR33=@KT(0.0002,44.,TPK%T,TPK%RADR,KVECNPT)/(@HEFFA(3.4e-2& + CFULLREACS(208) = 'KTR33=@KT(0.0002,44.,TPK%T,TPK%RADR,KVECNPT)/(@HEFFA(3.4e-2& &,-2710.,4.3e-7,920.,4.7e-11,1780.,TPK%PHR,TPK%T,KVECNPT)*TPK%RCH*TPK%T)::WR_CO& &2-->CO2' - CFULLREACS(206) = 'KTR34=@KT(0.11,64.,TPK%T,TPK%RADR,KVECNPT)/(@HEFFA(1.36,-29& + CFULLREACS(209) = 'KTR34=@KT(0.11,64.,TPK%T,TPK%RADR,KVECNPT)/(@HEFFA(1.36,-29& &30.,1.3e-2,-1965.,6.4e-8,-1430.,TPK%PHR,TPK%T,KVECNPT)*TPK%RCH*TPK%T)::WR_SO2-& &->SO2' - CFULLREACS(207) = 'KTR35=@KT(0.07,98.,TPK%T,TPK%RADR,KVECNPT)/(@HEFFA(2.1e5,-8& + CFULLREACS(210) = 'KTR35=@KT(0.07,98.,TPK%T,TPK%RADR,KVECNPT)/(@HEFFA(2.1e5,-8& &700.,1.0e3,0.,1.0e-2,0.,TPK%PHR,TPK%T,KVECNPT)*TPK%RCH*TPK%T)::WR_SULF-->SULF' - CFULLREACS(208) = 'KTR36=@KT(0.04,30.,TPK%T,TPK%RADR,KVECNPT)/(@HENRY(3.23e3,-& + CFULLREACS(211) = 'KTR36=@KT(0.04,30.,TPK%T,TPK%RADR,KVECNPT)/(@HENRY(3.23e3,-& &7100.,TPK%T,KVECNPT)*TPK%RCH*TPK%T)::WR_HCHO-->HCHO' - CFULLREACS(209) = 'KTR37=@KT(0.012,46.,TPK%T,TPK%RADR,KVECNPT)/(@HEFFA(8.9e3,-& + CFULLREACS(212) = 'KTR37=@KT(0.012,46.,TPK%T,TPK%RADR,KVECNPT)/(@HEFFA(8.9e3,-& &6100.,1.8e-4,150.,0.,0.,TPK%PHR,TPK%T,KVECNPT)*TPK%RCH*TPK%T)::WR_ORA1-->ORA1' - CFULLREACS(210) = 'KTR38=@KT(0.03,60.,TPK%T,TPK%RADR,KVECNPT)/(@HEFFA(4.1e3,-6& + CFULLREACS(213) = 'KTR38=@KT(0.03,60.,TPK%T,TPK%RADR,KVECNPT)/(@HEFFA(4.1e3,-6& &200.,1.74e-5,0.,0.,0.,TPK%PHR,TPK%T,KVECNPT)*TPK%RCH*TPK%T)::WR_ORA2-->ORA2' - CFULLREACS(211) = 'KTR39=@KT(0.05,47.,TPK%T,TPK%RADR,KVECNPT)/(@HENRY(2.7e0,-2& -&030.,TPK%T,KVECNPT)*TPK%RCH*TPK%T)::WR_MO2-->MO2' - CFULLREACS(212) = 'KTR40=@KT(0.007,48.,TPK%T,TPK%RADR,KVECNPT)/(@HENRY(3.e2,-5& + CFULLREACS(214) = 'KTR39=@KT(0.05,47.,TPK%T,TPK%RADR,KVECNPT)/(@HENRY(2.45e0,-& +&5280.,TPK%T,KVECNPT)*TPK%RCH*TPK%T)::WR_MO2-->MO2' + CFULLREACS(215) = 'KTR40=@KT(0.007,48.,TPK%T,TPK%RADR,KVECNPT)/(@HENRY(3.e2,-5& &280.,TPK%T,KVECNPT)*TPK%RCH*TPK%T)::WR_OP1-->OP1' - CFULLREACS(213) = 'KC1=!ZRATES(:,018)::WC_H2O2-->WC_OH+WC_OH' - CFULLREACS(214) = 'KC2=(3.6E+9*exp(-930.*(1./TPK%T-1./298.15)))/TPK%MOL2MOLECC& + CFULLREACS(216) = 'KC1=!ZRATES(:,018)::WC_H2O2-->WC_OH+WC_OH' + CFULLREACS(217) = 'KC2=(3.6E+9*exp(-930.*(1./TPK%T-1./298.15)))/TPK%MOL2MOLECC& &LOUD::WC_OH+WC_OH-->WC_H2O2' - CFULLREACS(215) = 'KC3=((2.8E+10*10.**(-TPK%PHC)+3.5E+10*exp(-720.*(1./TPK%T-1& + CFULLREACS(218) = 'KC3=((2.8E+10*10.**(-TPK%PHC)+3.5E+10*exp(-720.*(1./TPK%T-1& &./298.15))*1.6e-5)/(1.6e-5+10.**(-TPK%PHC)))/TPK%MOL2MOLECCLOUD::WC_OH+WC_HO2-& &->' - CFULLREACS(216) = 'KC4=(3.2E+7*exp(-1700.*(1./TPK%T-1./298.15)))/TPK%MOL2MOLEC& + CFULLREACS(219) = 'KC4=(3.2E+7*exp(-1700.*(1./TPK%T-1./298.15)))/TPK%MOL2MOLEC& &CLOUD::WC_H2O2+WC_OH-->WC_HO2' - CFULLREACS(217) = 'KC5=((8.3E+5*exp(-2700.*(1./TPK%T-1./298.15))*(10.**(-TPK%P& + CFULLREACS(220) = 'KC5=((8.3E+5*exp(-2700.*(1./TPK%T-1./298.15))*(10.**(-TPK%P& &HC))**2.+9.6E+7*exp(-910.*(1./TPK%T-1./298.15))*10.**(-TPK%PHC)*1.6e-5)/(1.6e-& &5+10.**(-TPK%PHC))**2.)/TPK%MOL2MOLECCLOUD::WC_HO2+WC_HO2-->WC_H2O2' - CFULLREACS(218) = 'KC6=(1.5E+9*exp(-1500.*(1./TPK%T-1./298.15))*1.6e-5/(1.6e-5& + CFULLREACS(221) = 'KC6=(1.5E+9*exp(-1500.*(1./TPK%T-1./298.15))*1.6e-5/(1.6e-5& &+10.**(-TPK%PHC)))/TPK%MOL2MOLECCLOUD::WC_O3+WC_HO2-->WC_OH' - CFULLREACS(219) = 'KC7=(2.7E+9*1.3e-2*exp(1965.*(1./TPK%T-1./298.15))*10.**(-T& + CFULLREACS(222) = 'KC7=(2.7E+9*1.3e-2*exp(1965.*(1./TPK%T-1./298.15))*10.**(-T& &PK%PHC)/(1.3e-2*exp(1965.*(1./TPK%T-1./298.15))*6.4e-8*exp(1430.*(1./TPK%T-1./& &298.15))+1.3e-2*exp(1965.*(1./TPK%T-1./298.15))*10.**(-TPK%PHC)+(10.**(-TPK%PH& &C))**2.))/TPK%MOL2MOLECCLOUD::WC_OH+WC_SO2-->WC_ASO3' - CFULLREACS(220) = 'KC8=(1.0E+10*10.**(-TPK%PHC)/(1.6e-3*exp(-1760.*(1./TPK%T-1& + CFULLREACS(223) = 'KC8=(1.0E+10*10.**(-TPK%PHC)/(1.6e-3*exp(-1760.*(1./TPK%T-1& &./298.15))+10.**(-TPK%PHC)))/TPK%MOL2MOLECCLOUD::WC_HONO+WC_OH-->WC_NO2' - CFULLREACS(221) = 'KC9=((1.8E+9*10.**(-TPK%PHC)+4.5E+9*1.6e-5)/(1.6e-5+10.**(-& + CFULLREACS(224) = 'KC9=((1.8E+9*10.**(-TPK%PHC)+4.5E+9*1.6e-5)/(1.6e-5+10.**(-& &TPK%PHC)))/TPK%MOL2MOLECCLOUD::WC_NO2+WC_HO2-->WC_HNO4' - CFULLREACS(222) = 'KC10=2.6E-2*10.**(-TPK%PHC)/(1.26e-6+10.**(-TPK%PHC))::WC_H& + CFULLREACS(225) = 'KC10=2.6E-2*10.**(-TPK%PHC)/(1.26e-6+10.**(-TPK%PHC))::WC_H& &NO4-->WC_HO2+WC_NO2' - CFULLREACS(223) = 'KC11=1.1E0*1.26e-6/(1.26e-6+10.**(-TPK%PHC))::WC_HNO4-->WC_& + CFULLREACS(226) = 'KC11=1.1E0*1.26e-6/(1.26e-6+10.**(-TPK%PHC))::WC_HNO4-->WC_& &HONO' - CFULLREACS(224) = 'KC12=(3.3E+5*1.3e-2*exp(1965.*(1./TPK%T-1./298.15))*(10.**(& + CFULLREACS(227) = 'KC12=(3.3E+5*1.3e-2*exp(1965.*(1./TPK%T-1./298.15))*(10.**(& &-TPK%PHC))**2./((1.3e-2*exp(1965.*(1./TPK%T-1./298.15))*6.4e-8*exp(1430.*(1./T& &PK%T-1./298.15))+1.3e-2*exp(1965.*(1./TPK%T-1./298.15))*10.**(-TPK%PHC)+(10.**& &(-TPK%PHC))**2.)*(1.26e-6+10.**(-TPK%PHC))))/TPK%MOL2MOLECCLOUD::WC_HNO4+WC_SO& &2-->WC_SULF+WC_HNO3' - CFULLREACS(225) = 'KC13=!ZRATES(:,019)*2.2e+1/(2.2e+1+10.**(-TPK%PHC))::WC_HNO& + CFULLREACS(228) = 'KC13=!ZRATES(:,019)*2.2e+1/(2.2e+1+10.**(-TPK%PHC))::WC_HNO& &3-->WC_NO2+WC_OH' - CFULLREACS(226) = 'KC14=1.0E+10::WC_N2O5-->WC_HNO3+WC_HNO3' - CFULLREACS(227) = 'KC15=(1.0E+5*1.0e+3*1.0e-2/(1.0e+3*1.0e-2+1.0e+3*10.**(-TPK& + CFULLREACS(229) = 'KC14=1.0E+10::WC_N2O5-->WC_HNO3+WC_HNO3' + CFULLREACS(230) = 'KC15=(1.0E+5*1.0e+3*1.0e-2/(1.0e+3*1.0e-2+1.0e+3*10.**(-TPK& &%PHC)+(10.**(-TPK%PHC))**2.))/TPK%MOL2MOLECCLOUD::WC_NO3+WC_SULF-->WC_HNO3+WC_& &ASO4' - CFULLREACS(228) = 'KC16=(1.3E+9*exp(-2200.*(1./TPK%T-1./298.15))*1.3e-2*exp(19& + CFULLREACS(231) = 'KC16=(1.3E+9*exp(-2200.*(1./TPK%T-1./298.15))*1.3e-2*exp(19& &65.*(1./TPK%T-1./298.15))*10.**(-TPK%PHC)/(1.3e-2*exp(1965.*(1./TPK%T-1./298.1& &5))*6.4e-8*exp(1430.*(1./TPK%T-1./298.15))+1.3e-2*exp(1965.*(1./TPK%T-1./298.1& &5))*10.**(-TPK%PHC)+(10.**(-TPK%PHC))**2.))/TPK%MOL2MOLECCLOUD::WC_NO3+WC_SO2-& &->WC_HNO3+WC_ASO3' - CFULLREACS(229) = 'KC17=(1.7E+8*exp(-2200.*(1./TPK%T-1./298.15)))/TPK%MOL2MOLE& + CFULLREACS(232) = 'KC17=(1.7E+8*exp(-2200.*(1./TPK%T-1./298.15)))/TPK%MOL2MOLE& &CCLOUD::WC_MO2+WC_MO2-->2.00*WC_HCHO+2.00*WC_HO2' - CFULLREACS(230) = 'KC18=(5.0E+5*1.3e-2*exp(1965.*(1./TPK%T-1./298.15))*10.**(-& + CFULLREACS(233) = 'KC18=(5.0E+5*1.3e-2*exp(1965.*(1./TPK%T-1./298.15))*10.**(-& &TPK%PHC)/(1.3e-2*exp(1965.*(1./TPK%T-1./298.15))*6.4e-8*exp(1430.*(1./TPK%T-1.& &/298.15))+1.3e-2*exp(1965.*(1./TPK%T-1./298.15))*10.**(-TPK%PHC)+(10.**(-TPK%P& &HC))**2.))/TPK%MOL2MOLECCLOUD::WC_MO2+WC_SO2-->WC_OP1+WC_ASO3' - CFULLREACS(231) = 'KC19=(7.8E+8*exp(-1000.*(1./TPK%T-1./298.15))*2.5e3*exp(403& + CFULLREACS(234) = 'KC19=(7.8E+8*exp(-1000.*(1./TPK%T-1./298.15))*2.5e3*exp(403& &0.*(1./TPK%T-1./298.15))/(1.+2.5e3*exp(4030.*(1./TPK%T-1./298.15))))/TPK%MOL2M& &OLECCLOUD::WC_HCHO+WC_OH-->WC_ORA1+WC_HO2' - CFULLREACS(232) = 'KC20=((1.0E+8*exp(-1000.*(1./TPK%T-1./298.15))*10.**(-TPK%P& + CFULLREACS(235) = 'KC20=((1.0E+8*exp(-1000.*(1./TPK%T-1./298.15))*10.**(-TPK%P& &HC)+3.4E+9*exp(-1200.*(1./TPK%T-1./298.15))*1.8e-4*exp(150.*(1./TPK%T-1./298.1& &5)))/(1.8e-4*exp(150.*(1./TPK%T-1./298.15))+10.**(-TPK%PHC)))/TPK%MOL2MOLECCLO& &UD::WC_ORA1+WC_OH-->WC_CO2+WC_HO2' - CFULLREACS(233) = 'KC21=((7.9E+2*exp(-2900.*(1./TPK%T-1./298.15))*1.3e-2*exp(1& + CFULLREACS(236) = 'KC21=((7.9E+2*exp(-2900.*(1./TPK%T-1./298.15))*1.3e-2*exp(1& &965.*(1./TPK%T-1./298.15))*10.**(-TPK%PHC)+2.5E+7*exp(-2450.*(1./TPK%T-1./298.& &15))*1.3e-2*exp(1965.*(1./TPK%T-1./298.15))*6.4e-8*exp(1430.*(1./TPK%T-1./298.& &15)))/((1.3e-2*exp(1965.*(1./TPK%T-1./298.15))*6.4e-8*exp(1430.*(1./TPK%T-1./2& &98.15))+1.3e-2*exp(1965.*(1./TPK%T-1./298.15))*10.**(-TPK%PHC)+(10.**(-TPK%PHC& &))**2.)*(1.+2.5e3*exp(4030.*(1./TPK%T-1./298.15)))))/TPK%MOL2MOLECCLOUD::WC_SO& &2+WC_HCHO-->WC_AHMS' - CFULLREACS(234) = 'KC22=7.7E-3*exp(-9200.*(1./TPK%T-1./298.15))+3.7E+3*1.e-14*& + CFULLREACS(237) = 'KC22=7.7E-3*exp(-9200.*(1./TPK%T-1./298.15))+3.7E+3*1.e-14*& &EXP(-6716*(1./TPK%T-1./298.15))/10.**(-TPK%PHC)::WC_AHMS-->WC_SO2+WC_HCHO' - CFULLREACS(235) = 'KC23=3.0E+8/TPK%MOL2MOLECCLOUD::WC_AHMS+WC_OH-->WC_HO2+WC_O& + CFULLREACS(238) = 'KC23=3.0E+8/TPK%MOL2MOLECCLOUD::WC_AHMS+WC_OH-->WC_HO2+WC_O& &RA1+WC_SO2' - CFULLREACS(236) = 'KC24=1.1E+9::WC_ASO3+W_O2-->WC_ASO5' - CFULLREACS(237) = 'KC25=(1.7E+9*10.**(-TPK%PHC)/(1.6e-5+10.**(-TPK%PHC)))/TPK%& + CFULLREACS(239) = 'KC24=1.1E+9::WC_ASO3+W_O2-->WC_ASO5' + CFULLREACS(240) = 'KC25=(1.7E+9*10.**(-TPK%PHC)/(1.6e-5+10.**(-TPK%PHC)))/TPK%& &MOL2MOLECCLOUD::WC_ASO5+WC_HO2-->WC_AHSO5' - CFULLREACS(238) = 'KC26=(2.2E+8*exp(-2600.*(1./TPK%T-1./298.15)))/TPK%MOL2MOLE& + CFULLREACS(241) = 'KC26=(2.2E+8*exp(-2600.*(1./TPK%T-1./298.15)))/TPK%MOL2MOLE& &CCLOUD::WC_ASO5+WC_ASO5-->WC_ASO4+WC_ASO4' - CFULLREACS(239) = 'KC27=(7.1E+6*1.3e-2*exp(1965.*(1./TPK%T-1./298.15))*10.**(-& + CFULLREACS(242) = 'KC27=(7.1E+6*1.3e-2*exp(1965.*(1./TPK%T-1./298.15))*10.**(-& &TPK%PHC)*10.**(-TPK%PHC)/(1.3e-2*exp(1965.*(1./TPK%T-1./298.15))*6.4e-8*exp(14& &30.*(1./TPK%T-1./298.15))+1.3e-2*exp(1965.*(1./TPK%T-1./298.15))*10.**(-TPK%PH& &C)+(10.**(-TPK%PHC))**2.))/TPK%MOL2MOLECCLOUD::WC_AHSO5+WC_SO2-->2.00*WC_SULF' - CFULLREACS(240) = 'KC28=4.6E+2*exp(-1100.*(1./TPK%T-1./298.15))::WC_ASO4-->WC_& + CFULLREACS(243) = 'KC28=4.6E+2*exp(-1100.*(1./TPK%T-1./298.15))::WC_ASO4-->WC_& &SULF+WC_OH' - CFULLREACS(241) = 'KC29=((3.7E+5*exp(-5500.*(1./TPK%T-1./298.15))*1.3e-2*exp(1& + CFULLREACS(244) = 'KC29=((3.7E+5*exp(-5500.*(1./TPK%T-1./298.15))*1.3e-2*exp(1& &965.*(1./TPK%T-1./298.15))*10.**(-TPK%PHC)+1.5E+9*exp(-5300.*(1./TPK%T-1./298.& &15))*1.3e-2*exp(1965.*(1./TPK%T-1./298.15))*6.4e-8*exp(1430.*(1./TPK%T-1./298.& &15)))/(1.3e-2*exp(1965.*(1./TPK%T-1./298.15))*6.4e-8*exp(1430.*(1./TPK%T-1./29& &8.15))+1.3e-2*exp(1965.*(1./TPK%T-1./298.15))*10.**(-TPK%PHC)+(10.**(-TPK%PHC)& &)**2.))/TPK%MOL2MOLECCLOUD::WC_SO2+WC_O3-->WC_SULF' - CFULLREACS(242) = 'KC30=(9.1E+7*exp(-3600.*(1./TPK%T-1./298.15))*1.3e-2*exp(19& + CFULLREACS(245) = 'KC30=(9.1E+7*exp(-3600.*(1./TPK%T-1./298.15))*1.3e-2*exp(19& &65.*(1./TPK%T-1./298.15))*10.**(-TPK%PHC)*10.**(-TPK%PHC)/(1.3e-2*exp(1965.*(1& &./TPK%T-1./298.15))*6.4e-8*exp(1430.*(1./TPK%T-1./298.15))+1.3e-2*exp(1965.*(1& &./TPK%T-1./298.15))*10.**(-TPK%PHC)+(10.**(-TPK%PHC))**2.))/TPK%MOL2MOLECCLOUD& &::WC_SO2+WC_H2O2-->WC_SULF' - CFULLREACS(243) = 'KR1=!ZRATES(:,018)::WR_H2O2-->WR_OH+WR_OH' - CFULLREACS(244) = 'KR2=(3.6E+9*exp(-930.*(1./TPK%T-1./298.15)))/TPK%MOL2MOLECR& + CFULLREACS(246) = 'KR1=!ZRATES(:,018)::WR_H2O2-->WR_OH+WR_OH' + CFULLREACS(247) = 'KR2=(3.6E+9*exp(-930.*(1./TPK%T-1./298.15)))/TPK%MOL2MOLECR& &AIN::WR_OH+WR_OH-->WR_H2O2' - CFULLREACS(245) = 'KR3=((2.8E+10*10.**(-TPK%PHR)+3.5E+10*exp(-720.*(1./TPK%T-1& + CFULLREACS(248) = 'KR3=((2.8E+10*10.**(-TPK%PHR)+3.5E+10*exp(-720.*(1./TPK%T-1& &./298.15))*1.6e-5)/(1.6e-5+10.**(-TPK%PHR)))/TPK%MOL2MOLECRAIN::WR_OH+WR_HO2--& &>' - CFULLREACS(246) = 'KR4=(3.2E+7*exp(-1700.*(1./TPK%T-1./298.15)))/TPK%MOL2MOLEC& + CFULLREACS(249) = 'KR4=(3.2E+7*exp(-1700.*(1./TPK%T-1./298.15)))/TPK%MOL2MOLEC& &RAIN::WR_H2O2+WR_OH-->WR_HO2' - CFULLREACS(247) = 'KR5=((8.3E+5*exp(-2700.*(1./TPK%T-1./298.15))*(10.**(-TPK%P& + CFULLREACS(250) = 'KR5=((8.3E+5*exp(-2700.*(1./TPK%T-1./298.15))*(10.**(-TPK%P& &HR))**2.+9.6E+7*exp(-910.*(1./TPK%T-1./298.15))*10.**(-TPK%PHR)*1.6e-5)/(1.6e-& &5+10.**(-TPK%PHR))**2.)/TPK%MOL2MOLECRAIN::WR_HO2+WR_HO2-->WR_H2O2' - CFULLREACS(248) = 'KR6=(1.5E+9*exp(-1500.*(1./TPK%T-1./298.15))*1.6e-5/(1.6e-5& + CFULLREACS(251) = 'KR6=(1.5E+9*exp(-1500.*(1./TPK%T-1./298.15))*1.6e-5/(1.6e-5& &+10.**(-TPK%PHR)))/TPK%MOL2MOLECRAIN::WR_O3+WR_HO2-->WR_OH' - CFULLREACS(249) = 'KR7=(2.7E+9*1.3e-2*exp(1965.*(1./TPK%T-1./298.15))*10.**(-T& + CFULLREACS(252) = 'KR7=(2.7E+9*1.3e-2*exp(1965.*(1./TPK%T-1./298.15))*10.**(-T& &PK%PHR)/(1.3e-2*exp(1965.*(1./TPK%T-1./298.15))*6.4e-8*exp(1430.*(1./TPK%T-1./& &298.15))+1.3e-2*exp(1965.*(1./TPK%T-1./298.15))*10.**(-TPK%PHR)+(10.**(-TPK%PH& &R))**2.))/TPK%MOL2MOLECRAIN::WR_OH+WR_SO2-->WR_ASO3' - CFULLREACS(250) = 'KR8=(1.0E+10*10.**(-TPK%PHR)/(1.6e-3*exp(-1760.*(1./TPK%T-1& + CFULLREACS(253) = 'KR8=(1.0E+10*10.**(-TPK%PHR)/(1.6e-3*exp(-1760.*(1./TPK%T-1& &./298.15))+10.**(-TPK%PHR)))/TPK%MOL2MOLECRAIN::WR_HONO+WR_OH-->WR_NO2' - CFULLREACS(251) = 'KR9=((1.8E+9*10.**(-TPK%PHR)+4.5E+9*1.6e-5)/(1.6e-5+10.**(-& + CFULLREACS(254) = 'KR9=((1.8E+9*10.**(-TPK%PHR)+4.5E+9*1.6e-5)/(1.6e-5+10.**(-& &TPK%PHR)))/TPK%MOL2MOLECRAIN::WR_NO2+WR_HO2-->WR_HNO4' - CFULLREACS(252) = 'KR10=2.6E-2*10.**(-TPK%PHR)/(1.26e-6+10.**(-TPK%PHR))::WR_H& + CFULLREACS(255) = 'KR10=2.6E-2*10.**(-TPK%PHR)/(1.26e-6+10.**(-TPK%PHR))::WR_H& &NO4-->WR_HO2+WR_NO2' - CFULLREACS(253) = 'KR11=1.1E0*1.26e-6/(1.26e-6+10.**(-TPK%PHR))::WR_HNO4-->WR_& + CFULLREACS(256) = 'KR11=1.1E0*1.26e-6/(1.26e-6+10.**(-TPK%PHR))::WR_HNO4-->WR_& &HONO' - CFULLREACS(254) = 'KR12=(3.3E+5*1.3e-2*exp(1965.*(1./TPK%T-1./298.15))*(10.**(& + CFULLREACS(257) = 'KR12=(3.3E+5*1.3e-2*exp(1965.*(1./TPK%T-1./298.15))*(10.**(& &-TPK%PHR))**2./((1.3e-2*exp(1965.*(1./TPK%T-1./298.15))*6.4e-8*exp(1430.*(1./T& &PK%T-1./298.15))+1.3e-2*exp(1965.*(1./TPK%T-1./298.15))*10.**(-TPK%PHR)+(10.**& &(-TPK%PHR))**2.)*(1.26e-6+10.**(-TPK%PHR))))/TPK%MOL2MOLECRAIN::WR_HNO4+WR_SO2& &-->WR_SULF+WR_HNO3' - CFULLREACS(255) = 'KR13=!ZRATES(:,019)*2.2e+1/(2.2e+1+10.**(-TPK%PHR))::WR_HNO& + CFULLREACS(258) = 'KR13=!ZRATES(:,019)*2.2e+1/(2.2e+1+10.**(-TPK%PHR))::WR_HNO& &3-->WR_NO2+WR_OH' - CFULLREACS(256) = 'KR14=1.0E+10::WR_N2O5-->WR_HNO3+WR_HNO3' - CFULLREACS(257) = 'KR15=(1.0E+5*1.0e+3*1.0e-2/(1.0e+3*1.0e-2+1.0e+3*10.**(-TPK& + CFULLREACS(259) = 'KR14=1.0E+10::WR_N2O5-->WR_HNO3+WR_HNO3' + CFULLREACS(260) = 'KR15=(1.0E+5*1.0e+3*1.0e-2/(1.0e+3*1.0e-2+1.0e+3*10.**(-TPK& &%PHR)+(10.**(-TPK%PHR))**2.))/TPK%MOL2MOLECRAIN::WR_NO3+WR_SULF-->WR_HNO3+WR_A& &SO4' - CFULLREACS(258) = 'KR16=(1.3E+9*exp(-2200.*(1./TPK%T-1./298.15))*1.3e-2*exp(19& + CFULLREACS(261) = 'KR16=(1.3E+9*exp(-2200.*(1./TPK%T-1./298.15))*1.3e-2*exp(19& &65.*(1./TPK%T-1./298.15))*10.**(-TPK%PHR)/(1.3e-2*exp(1965.*(1./TPK%T-1./298.1& &5))*6.4e-8*exp(1430.*(1./TPK%T-1./298.15))+1.3e-2*exp(1965.*(1./TPK%T-1./298.1& &5))*10.**(-TPK%PHR)+(10.**(-TPK%PHR))**2.))/TPK%MOL2MOLECRAIN::WR_NO3+WR_SO2--& &>WR_HNO3+WR_ASO3' - CFULLREACS(259) = 'KR17=(1.7E+8*exp(-2200.*(1./TPK%T-1./298.15)))/TPK%MOL2MOLE& + CFULLREACS(262) = 'KR17=(1.7E+8*exp(-2200.*(1./TPK%T-1./298.15)))/TPK%MOL2MOLE& &CRAIN::WR_MO2+WR_MO2-->2.00*WR_HCHO+2.00*WR_HO2' - CFULLREACS(260) = 'KR18=(5.0E+5*1.3e-2*exp(1965.*(1./TPK%T-1./298.15))*10.**(-& + CFULLREACS(263) = 'KR18=(5.0E+5*1.3e-2*exp(1965.*(1./TPK%T-1./298.15))*10.**(-& &TPK%PHR)/(1.3e-2*exp(1965.*(1./TPK%T-1./298.15))*6.4e-8*exp(1430.*(1./TPK%T-1.& &/298.15))+1.3e-2*exp(1965.*(1./TPK%T-1./298.15))*10.**(-TPK%PHR)+(10.**(-TPK%P& &HR))**2.))/TPK%MOL2MOLECRAIN::WR_MO2+WR_SO2-->WR_OP1+WR_ASO3' - CFULLREACS(261) = 'KR19=(7.8E+8*exp(-1000.*(1./TPK%T-1./298.15))*2.5e3*exp(403& + CFULLREACS(264) = 'KR19=(7.8E+8*exp(-1000.*(1./TPK%T-1./298.15))*2.5e3*exp(403& &0.*(1./TPK%T-1./298.15))/(1.+2.5e3*exp(4030.*(1./TPK%T-1./298.15))))/TPK%MOL2M& &OLECRAIN::WR_HCHO+WR_OH-->WR_ORA1+WR_HO2' - CFULLREACS(262) = 'KR20=((1.0E+8*exp(-1000.*(1./TPK%T-1./298.15))*10.**(-TPK%P& + CFULLREACS(265) = 'KR20=((1.0E+8*exp(-1000.*(1./TPK%T-1./298.15))*10.**(-TPK%P& &HR)+3.4E+9*exp(-1200.*(1./TPK%T-1./298.15))*1.8e-4*exp(150.*(1./TPK%T-1./298.1& &5)))/(1.8e-4*exp(150.*(1./TPK%T-1./298.15))+10.**(-TPK%PHR)))/TPK%MOL2MOLECRAI& &N::WR_ORA1+WR_OH-->WR_CO2+WR_HO2' - CFULLREACS(263) = 'KR21=((7.9E+2*exp(-2900.*(1./TPK%T-1./298.15))*1.3e-2*exp(1& + CFULLREACS(266) = 'KR21=((7.9E+2*exp(-2900.*(1./TPK%T-1./298.15))*1.3e-2*exp(1& &965.*(1./TPK%T-1./298.15))*10.**(-TPK%PHR)+2.5E+7*exp(-2450.*(1./TPK%T-1./298.& &15))*1.3e-2*exp(1965.*(1./TPK%T-1./298.15))*6.4e-8*exp(1430.*(1./TPK%T-1./298.& &15)))/((1.3e-2*exp(1965.*(1./TPK%T-1./298.15))*6.4e-8*exp(1430.*(1./TPK%T-1./2& &98.15))+1.3e-2*exp(1965.*(1./TPK%T-1./298.15))*10.**(-TPK%PHR)+(10.**(-TPK%PHR& &))**2.)*(1.+2.5e3*exp(4030.*(1./TPK%T-1./298.15)))))/TPK%MOL2MOLECRAIN::WR_SO2& &+WR_HCHO-->WR_AHMS' - CFULLREACS(264) = 'KR22=7.7E-3*exp(-9200.*(1./TPK%T-1./298.15))+3.7E+3*1.e-14*& + CFULLREACS(267) = 'KR22=7.7E-3*exp(-9200.*(1./TPK%T-1./298.15))+3.7E+3*1.e-14*& &EXP(-6716*(1./TPK%T-1./298.15))/10.**(-TPK%PHR)::WR_AHMS-->WR_SO2+WR_HCHO' - CFULLREACS(265) = 'KR23=3.0E+8/TPK%MOL2MOLECRAIN::WR_AHMS+WR_OH-->WR_HO2+WR_OR& + CFULLREACS(268) = 'KR23=3.0E+8/TPK%MOL2MOLECRAIN::WR_AHMS+WR_OH-->WR_HO2+WR_OR& &A1+WR_SO2' - CFULLREACS(266) = 'KR24=1.1E+9::WR_ASO3+W_O2-->WR_ASO5' - CFULLREACS(267) = 'KR25=(1.7E+9*10.**(-TPK%PHR)/(1.6e-5+10.**(-TPK%PHR)))/TPK%& + CFULLREACS(269) = 'KR24=1.1E+9::WR_ASO3+W_O2-->WR_ASO5' + CFULLREACS(270) = 'KR25=(1.7E+9*10.**(-TPK%PHR)/(1.6e-5+10.**(-TPK%PHR)))/TPK%& &MOL2MOLECRAIN::WR_ASO5+WR_HO2-->WR_AHSO5' - CFULLREACS(268) = 'KR26=(2.2E+8*exp(-2600.*(1./TPK%T-1./298.15)))/TPK%MOL2MOLE& + CFULLREACS(271) = 'KR26=(2.2E+8*exp(-2600.*(1./TPK%T-1./298.15)))/TPK%MOL2MOLE& &CRAIN::WR_ASO5+WR_ASO5-->WR_ASO4+WR_ASO4' - CFULLREACS(269) = 'KR27=(7.1E+6*1.3e-2*exp(1965.*(1./TPK%T-1./298.15))*10.**(-& + CFULLREACS(272) = 'KR27=(7.1E+6*1.3e-2*exp(1965.*(1./TPK%T-1./298.15))*10.**(-& &TPK%PHR)*10.**(-TPK%PHR)/(1.3e-2*exp(1965.*(1./TPK%T-1./298.15))*6.4e-8*exp(14& &30.*(1./TPK%T-1./298.15))+1.3e-2*exp(1965.*(1./TPK%T-1./298.15))*10.**(-TPK%PH& &R)+(10.**(-TPK%PHR))**2.))/TPK%MOL2MOLECRAIN::WR_AHSO5+WR_SO2-->2.00*WR_SULF' - CFULLREACS(270) = 'KR28=4.6E+2*exp(-1100.*(1./TPK%T-1./298.15))::WR_ASO4-->WR_& + CFULLREACS(273) = 'KR28=4.6E+2*exp(-1100.*(1./TPK%T-1./298.15))::WR_ASO4-->WR_& &SULF+WR_OH' - CFULLREACS(271) = 'KR29=((3.7E+5*exp(-5500.*(1./TPK%T-1./298.15))*1.3e-2*exp(1& + CFULLREACS(274) = 'KR29=((3.7E+5*exp(-5500.*(1./TPK%T-1./298.15))*1.3e-2*exp(1& &965.*(1./TPK%T-1./298.15))*10.**(-TPK%PHR)+1.5E+9*exp(-5300.*(1./TPK%T-1./298.& &15))*1.3e-2*exp(1965.*(1./TPK%T-1./298.15))*6.4e-8*exp(1430.*(1./TPK%T-1./298.& &15)))/(1.3e-2*exp(1965.*(1./TPK%T-1./298.15))*6.4e-8*exp(1430.*(1./TPK%T-1./29& &8.15))+1.3e-2*exp(1965.*(1./TPK%T-1./298.15))*10.**(-TPK%PHR)+(10.**(-TPK%PHR)& &)**2.))/TPK%MOL2MOLECRAIN::WR_SO2+WR_O3-->WR_SULF' - CFULLREACS(272) = 'KR30=(9.1E+7*exp(-3600.*(1./TPK%T-1./298.15))*1.3e-2*exp(19& + CFULLREACS(275) = 'KR30=(9.1E+7*exp(-3600.*(1./TPK%T-1./298.15))*1.3e-2*exp(19& &65.*(1./TPK%T-1./298.15))*10.**(-TPK%PHR)*10.**(-TPK%PHR)/(1.3e-2*exp(1965.*(1& &./TPK%T-1./298.15))*6.4e-8*exp(1430.*(1./TPK%T-1./298.15))+1.3e-2*exp(1965.*(1& &./TPK%T-1./298.15))*10.**(-TPK%PHR)+(10.**(-TPK%PHR))**2.))/TPK%MOL2MOLECRAIN:& @@ -4003,7 +4034,7 @@ TPK%O3P(:)=(TPK%K001(:)*PCONC(:,JP_NO2)+TPK%K003(:)*PCONC(:,JP_O3)+TPK%K008(:)*P &0.09000*TPK%K080(:)*PCONC(:,JP_BIO)*PCONC(:,JP_O3))/& &(TPK%K018(:)*TPK%O2(:)+TPK%K019(:)*PCONC(:,JP_O3)+TPK%K029(:)*PCONC(:,JP_NO)+& &TPK%K030(:)*PCONC(:,JP_NO2)+TPK%K031(:)*PCONC(:,JP_NO2)+TPK%K054(:)*PCONC(:,JP_BIO)+& - &TPK%K055(:)*PCONC(:,JP_CARBO)) + &TPK%K055(:)*PCONC(:,JP_CARBO)+TPK%K134(:)*PCONC(:,JP_DMS)) ! /END_CODE/ CALL SUB0 CALL SUB1 @@ -4025,36 +4056,36 @@ SUBROUTINE SUB0 ! !PPROD(O3) = +K018*<O3P>*<O2>+0.17307*K0102*<CARBOP>*<HO2>+KTC21*<WC_O3>+KTR21* !<WR_O3> - PPROD(:,1) = +TPK%K018(:)*TPK%O3P(:)*TPK%O2(:)+0.17307*TPK%K0102(:)*PCONC(:,39& -&)*PCONC(:,15)+TPK%KTC21(:)*PCONC(:,42)+TPK%KTR21(:)*PCONC(:,67) + PPROD(:,1) = +TPK%K018(:)*TPK%O3P(:)*TPK%O2(:)+0.17307*TPK%K0102(:)*PCONC(:,40& +&)*PCONC(:,16)+TPK%KTC21(:)*PCONC(:,43)+TPK%KTR21(:)*PCONC(:,68) !PLOSS(O3) = +K002+K003+K019*<O3P>+K023*<OH>+K024*<HO2>+K042*<NO>+K043*<NO2>+K0 !79*<ALKE>+K080*<BIO>+K081*<CARBO>+K082*<PAN>+K087*<ADD>+KTC1+KTR1 PLOSS(:,1) = +TPK%K002(:)+TPK%K003(:)+TPK%K019(:)*TPK%O3P(:)+TPK%K023(:)*PCONC& -&(:,14)+TPK%K024(:)*PCONC(:,15)+TPK%K042(:)*PCONC(:,3)+TPK%K043(:)*PCONC(:,4)+T& -&PK%K079(:)*PCONC(:,19)+TPK%K080(:)*PCONC(:,20)+TPK%K081(:)*PCONC(:,25)+TPK%K08& -&2(:)*PCONC(:,27)+TPK%K087(:)*PCONC(:,37)+TPK%KTC1(:)+TPK%KTR1(:) +&(:,15)+TPK%K024(:)*PCONC(:,16)+TPK%K042(:)*PCONC(:,3)+TPK%K043(:)*PCONC(:,4)+T& +&PK%K079(:)*PCONC(:,20)+TPK%K080(:)*PCONC(:,21)+TPK%K081(:)*PCONC(:,26)+TPK%K08& +&2(:)*PCONC(:,28)+TPK%K087(:)*PCONC(:,38)+TPK%KTC1(:)+TPK%KTR1(:) ! !PPROD(H2O2) = +K027*<HO2>*<HO2>+K028*<HO2>*<HO2>*<H2O>+0.01833*K079*<ALKE>*<O3 !>+0.00100*K080*<BIO>*<O3>+KTC22*<WC_H2O2>+KTR22*<WR_H2O2> - PPROD(:,2) = +TPK%K027(:)*PCONC(:,15)*PCONC(:,15)+TPK%K028(:)*PCONC(:,15)*PCON& -&C(:,15)*TPK%H2O(:)+0.01833*TPK%K079(:)*PCONC(:,19)*PCONC(:,1)+0.00100*TPK%K080& -&(:)*PCONC(:,20)*PCONC(:,1)+TPK%KTC22(:)*PCONC(:,43)+TPK%KTR22(:)*PCONC(:,68) + PPROD(:,2) = +TPK%K027(:)*PCONC(:,16)*PCONC(:,16)+TPK%K028(:)*PCONC(:,16)*PCON& +&C(:,16)*TPK%H2O(:)+0.01833*TPK%K079(:)*PCONC(:,20)*PCONC(:,1)+0.00100*TPK%K080& +&(:)*PCONC(:,21)*PCONC(:,1)+TPK%KTC22(:)*PCONC(:,44)+TPK%KTR22(:)*PCONC(:,69) !PLOSS(H2O2) = +K009+K026*<OH>+KTC2+KTR2 - PLOSS(:,2) = +TPK%K009(:)+TPK%K026(:)*PCONC(:,14)+TPK%KTC2(:)+TPK%KTR2(:) + PLOSS(:,2) = +TPK%K009(:)+TPK%K026(:)*PCONC(:,15)+TPK%KTC2(:)+TPK%KTR2(:) ! !PPROD(NO) = +K001*<NO2>+K004*<HONO>+K007*<NO3>+K030*<O3P>*<NO2>+K046*<NO3>*<NO !2>+KTC23*<WC_NO>+KTR23*<WR_NO> PPROD(:,3) = +TPK%K001(:)*PCONC(:,4)+TPK%K004(:)*PCONC(:,7)+TPK%K007(:)*PCONC(& &:,5)+TPK%K030(:)*TPK%O3P(:)*PCONC(:,4)+TPK%K046(:)*PCONC(:,5)*PCONC(:,4)+TPK%K& -&TC23(:)*PCONC(:,44)+TPK%KTR23(:)*PCONC(:,69) +&TC23(:)*PCONC(:,45)+TPK%KTR23(:)*PCONC(:,70) !PLOSS(NO) = +K029*<O3P>+K032*<OH>+K035*<HO2>+K042*<O3>+K044*<NO>*<O2>+K044*<NO !>*<O2>+K045*<NO3>+K090*<MO2>+K091*<ALKAP>+K092*<ALKEP>+K093*<BIOP>+K094*<AROP> !+K095*<CARBOP>+K096*<OLN>+K130*<XO2>+KTC3+KTR3 - PLOSS(:,3) = +TPK%K029(:)*TPK%O3P(:)+TPK%K032(:)*PCONC(:,14)+TPK%K035(:)*PCONC& -&(:,15)+TPK%K042(:)*PCONC(:,1)+TPK%K044(:)*PCONC(:,3)*TPK%O2(:)+TPK%K044(:)*PCO& -&NC(:,3)*TPK%O2(:)+TPK%K045(:)*PCONC(:,5)+TPK%K090(:)*PCONC(:,32)+TPK%K091(:)*P& -&CONC(:,33)+TPK%K092(:)*PCONC(:,34)+TPK%K093(:)*PCONC(:,35)+TPK%K094(:)*PCONC(:& -&,38)+TPK%K095(:)*PCONC(:,39)+TPK%K096(:)*PCONC(:,40)+TPK%K130(:)*PCONC(:,41)+T& + PLOSS(:,3) = +TPK%K029(:)*TPK%O3P(:)+TPK%K032(:)*PCONC(:,15)+TPK%K035(:)*PCONC& +&(:,16)+TPK%K042(:)*PCONC(:,1)+TPK%K044(:)*PCONC(:,3)*TPK%O2(:)+TPK%K044(:)*PCO& +&NC(:,3)*TPK%O2(:)+TPK%K045(:)*PCONC(:,5)+TPK%K090(:)*PCONC(:,33)+TPK%K091(:)*P& +&CONC(:,34)+TPK%K092(:)*PCONC(:,35)+TPK%K093(:)*PCONC(:,36)+TPK%K094(:)*PCONC(:& +&,39)+TPK%K095(:)*PCONC(:,40)+TPK%K096(:)*PCONC(:,41)+TPK%K130(:)*PCONC(:,42)+T& &PK%KTC3(:)+TPK%KTR3(:) ! !PPROD(NO2) = +K005*<HNO3>+0.65*K006*<HNO4>+K008*<NO3>+K017*<ONIT>+K029*<O3P>*< @@ -4067,88 +4098,90 @@ SUBROUTINE SUB0 !ARBOP>*<NO>+1.81599*K096*<OLN>*<NO>+0.32440*K110*<OLN>*<MO2>+0.00000*K116*<OLN !>*<CARBOP>+0.00000*K118*<OLN>*<OLN>+K119*<MO2>*<NO3>+K120*<ALKAP>*<NO3>+K121*< !ALKEP>*<NO3>+K122*<BIOP>*<NO3>+K123*<AROP>*<NO3>+K124*<CARBOP>*<NO3>+1.74072*K -!125*<OLN>*<NO3>+K130*<XO2>*<NO>+K131*<XO2>*<NO3>+KTC24*<WC_NO2>+KTR24*<WR_NO2> +!125*<OLN>*<NO3>+K130*<XO2>*<NO>+K131*<XO2>*<NO3>+K133*<DMS>*<NO3>+KTC24*<WC_NO +!2>+KTR24*<WR_NO2> PPROD(:,4) = +TPK%K005(:)*PCONC(:,8)+0.65*TPK%K006(:)*PCONC(:,9)+TPK%K008(:)*P& -&CONC(:,5)+TPK%K017(:)*PCONC(:,26)+TPK%K029(:)*TPK%O3P(:)*PCONC(:,3)+TPK%K034(:& -&)*PCONC(:,14)*PCONC(:,5)+TPK%K035(:)*PCONC(:,15)*PCONC(:,3)+TPK%K037(:)*PCONC(& -&:,9)+0.7*TPK%K038(:)*PCONC(:,15)*PCONC(:,5)+TPK%K039(:)*PCONC(:,14)*PCONC(:,7)& -&+TPK%K041(:)*PCONC(:,14)*PCONC(:,9)+TPK%K042(:)*PCONC(:,1)*PCONC(:,3)+TPK%K044& +&CONC(:,5)+TPK%K017(:)*PCONC(:,27)+TPK%K029(:)*TPK%O3P(:)*PCONC(:,3)+TPK%K034(:& +&)*PCONC(:,15)*PCONC(:,5)+TPK%K035(:)*PCONC(:,16)*PCONC(:,3)+TPK%K037(:)*PCONC(& +&:,9)+0.7*TPK%K038(:)*PCONC(:,16)*PCONC(:,5)+TPK%K039(:)*PCONC(:,15)*PCONC(:,7)& +&+TPK%K041(:)*PCONC(:,15)*PCONC(:,9)+TPK%K042(:)*PCONC(:,1)*PCONC(:,3)+TPK%K044& &(:)*PCONC(:,3)*PCONC(:,3)*TPK%O2(:)+TPK%K044(:)*PCONC(:,3)*PCONC(:,3)*TPK%O2(:& &)+TPK%K045(:)*PCONC(:,5)*PCONC(:,3)+TPK%K045(:)*PCONC(:,5)*PCONC(:,3)+TPK%K046& &(:)*PCONC(:,5)*PCONC(:,4)+TPK%K048(:)*PCONC(:,6)+TPK%K049(:)*PCONC(:,5)*PCONC(& -&:,5)+TPK%K049(:)*PCONC(:,5)*PCONC(:,5)+TPK%K071(:)*PCONC(:,26)*PCONC(:,14)+0.1& -&0530*TPK%K074(:)*PCONC(:,25)*PCONC(:,5)+0.40*TPK%K078(:)*PCONC(:,27)*PCONC(:,5& -&)+0.70*TPK%K082(:)*PCONC(:,27)*PCONC(:,1)+TPK%K089(:)*PCONC(:,27)+TPK%K090(:)*& -&PCONC(:,32)*PCONC(:,3)+0.91541*TPK%K091(:)*PCONC(:,33)*PCONC(:,3)+TPK%K092(:)*& -&PCONC(:,34)*PCONC(:,3)+0.84700*TPK%K093(:)*PCONC(:,35)*PCONC(:,3)+0.95115*TPK%& -&K094(:)*PCONC(:,38)*PCONC(:,3)+TPK%K095(:)*PCONC(:,39)*PCONC(:,3)+1.81599*TPK%& -&K096(:)*PCONC(:,40)*PCONC(:,3)+0.32440*TPK%K110(:)*PCONC(:,40)*PCONC(:,32)+0.0& -&0000*TPK%K116(:)*PCONC(:,40)*PCONC(:,39)+0.00000*TPK%K118(:)*PCONC(:,40)*PCONC& -&(:,40)+TPK%K119(:)*PCONC(:,32)*PCONC(:,5)+TPK%K120(:)*PCONC(:,33)*PCONC(:,5)+T& -&PK%K121(:)*PCONC(:,34)*PCONC(:,5)+TPK%K122(:)*PCONC(:,35)*PCONC(:,5)+TPK%K123(& -&:)*PCONC(:,38)*PCONC(:,5)+TPK%K124(:)*PCONC(:,39)*PCONC(:,5)+1.74072*TPK%K125(& -&:)*PCONC(:,40)*PCONC(:,5)+TPK%K130(:)*PCONC(:,41)*PCONC(:,3)+TPK%K131(:)*PCONC& -&(:,41)*PCONC(:,5)+TPK%KTC24(:)*PCONC(:,45)+TPK%KTR24(:)*PCONC(:,70) +&:,5)+TPK%K049(:)*PCONC(:,5)*PCONC(:,5)+TPK%K071(:)*PCONC(:,27)*PCONC(:,15)+0.1& +&0530*TPK%K074(:)*PCONC(:,26)*PCONC(:,5)+0.40*TPK%K078(:)*PCONC(:,28)*PCONC(:,5& +&)+0.70*TPK%K082(:)*PCONC(:,28)*PCONC(:,1)+TPK%K089(:)*PCONC(:,28)+TPK%K090(:)*& +&PCONC(:,33)*PCONC(:,3)+0.91541*TPK%K091(:)*PCONC(:,34)*PCONC(:,3)+TPK%K092(:)*& +&PCONC(:,35)*PCONC(:,3)+0.84700*TPK%K093(:)*PCONC(:,36)*PCONC(:,3)+0.95115*TPK%& +&K094(:)*PCONC(:,39)*PCONC(:,3)+TPK%K095(:)*PCONC(:,40)*PCONC(:,3)+1.81599*TPK%& +&K096(:)*PCONC(:,41)*PCONC(:,3)+0.32440*TPK%K110(:)*PCONC(:,41)*PCONC(:,33)+0.0& +&0000*TPK%K116(:)*PCONC(:,41)*PCONC(:,40)+0.00000*TPK%K118(:)*PCONC(:,41)*PCONC& +&(:,41)+TPK%K119(:)*PCONC(:,33)*PCONC(:,5)+TPK%K120(:)*PCONC(:,34)*PCONC(:,5)+T& +&PK%K121(:)*PCONC(:,35)*PCONC(:,5)+TPK%K122(:)*PCONC(:,36)*PCONC(:,5)+TPK%K123(& +&:)*PCONC(:,39)*PCONC(:,5)+TPK%K124(:)*PCONC(:,40)*PCONC(:,5)+1.74072*TPK%K125(& +&:)*PCONC(:,41)*PCONC(:,5)+TPK%K130(:)*PCONC(:,42)*PCONC(:,3)+TPK%K131(:)*PCONC& +&(:,42)*PCONC(:,5)+TPK%K133(:)*PCONC(:,11)*PCONC(:,5)+TPK%KTC24(:)*PCONC(:,46)+& +&TPK%KTR24(:)*PCONC(:,71) !PLOSS(NO2) = +K001+K030*<O3P>+K031*<O3P>+K033*<OH>+K036*<HO2>+K043*<O3>+K046*< !NO3>+K047*<NO3>+K083*<PHO>+K085*<ADD>+K088*<CARBOP>+KTC4+KTR4 PLOSS(:,4) = +TPK%K001(:)+TPK%K030(:)*TPK%O3P(:)+TPK%K031(:)*TPK%O3P(:)+TPK%K0& -&33(:)*PCONC(:,14)+TPK%K036(:)*PCONC(:,15)+TPK%K043(:)*PCONC(:,1)+TPK%K046(:)*P& -&CONC(:,5)+TPK%K047(:)*PCONC(:,5)+TPK%K083(:)*PCONC(:,36)+TPK%K085(:)*PCONC(:,3& -&7)+TPK%K088(:)*PCONC(:,39)+TPK%KTC4(:)+TPK%KTR4(:) +&33(:)*PCONC(:,15)+TPK%K036(:)*PCONC(:,16)+TPK%K043(:)*PCONC(:,1)+TPK%K046(:)*P& +&CONC(:,5)+TPK%K047(:)*PCONC(:,5)+TPK%K083(:)*PCONC(:,37)+TPK%K085(:)*PCONC(:,3& +&8)+TPK%K088(:)*PCONC(:,40)+TPK%KTC4(:)+TPK%KTR4(:) ! !PPROD(NO3) = +0.35*K006*<HNO4>+K031*<O3P>*<NO2>+K040*<OH>*<HNO3>+K043*<O3>*<NO !2>+K048*<N2O5>+0.71893*K070*<PAN>*<OH>+0.60*K078*<PAN>*<NO3>+KTC25*<WC_NO3>+KT !R25*<WR_NO3> PPROD(:,5) = +0.35*TPK%K006(:)*PCONC(:,9)+TPK%K031(:)*TPK%O3P(:)*PCONC(:,4)+TP& -&K%K040(:)*PCONC(:,14)*PCONC(:,8)+TPK%K043(:)*PCONC(:,1)*PCONC(:,4)+TPK%K048(:)& -&*PCONC(:,6)+0.71893*TPK%K070(:)*PCONC(:,27)*PCONC(:,14)+0.60*TPK%K078(:)*PCONC& -&(:,27)*PCONC(:,5)+TPK%KTC25(:)*PCONC(:,46)+TPK%KTR25(:)*PCONC(:,71) +&K%K040(:)*PCONC(:,15)*PCONC(:,8)+TPK%K043(:)*PCONC(:,1)*PCONC(:,4)+TPK%K048(:)& +&*PCONC(:,6)+0.71893*TPK%K070(:)*PCONC(:,28)*PCONC(:,15)+0.60*TPK%K078(:)*PCONC& +&(:,28)*PCONC(:,5)+TPK%KTC25(:)*PCONC(:,47)+TPK%KTR25(:)*PCONC(:,72) !PLOSS(NO3) = +K007+K008+K034*<OH>+K038*<HO2>+K045*<NO>+K046*<NO2>+K047*<NO2>+K !049*<NO3>+K049*<NO3>+K072*<HCHO>+K073*<ALD>+K074*<CARBO>+K075*<ARO>+K076*<ALKE !>+K077*<BIO>+K078*<PAN>+K119*<MO2>+K120*<ALKAP>+K121*<ALKEP>+K122*<BIOP>+K123* -!<AROP>+K124*<CARBOP>+K125*<OLN>+K131*<XO2>+KTC5+KTR5 - PLOSS(:,5) = +TPK%K007(:)+TPK%K008(:)+TPK%K034(:)*PCONC(:,14)+TPK%K038(:)*PCON& -&C(:,15)+TPK%K045(:)*PCONC(:,3)+TPK%K046(:)*PCONC(:,4)+TPK%K047(:)*PCONC(:,4)+T& -&PK%K049(:)*PCONC(:,5)+TPK%K049(:)*PCONC(:,5)+TPK%K072(:)*PCONC(:,22)+TPK%K073(& -&:)*PCONC(:,23)+TPK%K074(:)*PCONC(:,25)+TPK%K075(:)*PCONC(:,21)+TPK%K076(:)*PCO& -&NC(:,19)+TPK%K077(:)*PCONC(:,20)+TPK%K078(:)*PCONC(:,27)+TPK%K119(:)*PCONC(:,3& -&2)+TPK%K120(:)*PCONC(:,33)+TPK%K121(:)*PCONC(:,34)+TPK%K122(:)*PCONC(:,35)+TPK& -&%K123(:)*PCONC(:,38)+TPK%K124(:)*PCONC(:,39)+TPK%K125(:)*PCONC(:,40)+TPK%K131(& -&:)*PCONC(:,41)+TPK%KTC5(:)+TPK%KTR5(:) +!<AROP>+K124*<CARBOP>+K125*<OLN>+K131*<XO2>+K133*<DMS>+KTC5+KTR5 + PLOSS(:,5) = +TPK%K007(:)+TPK%K008(:)+TPK%K034(:)*PCONC(:,15)+TPK%K038(:)*PCON& +&C(:,16)+TPK%K045(:)*PCONC(:,3)+TPK%K046(:)*PCONC(:,4)+TPK%K047(:)*PCONC(:,4)+T& +&PK%K049(:)*PCONC(:,5)+TPK%K049(:)*PCONC(:,5)+TPK%K072(:)*PCONC(:,23)+TPK%K073(& +&:)*PCONC(:,24)+TPK%K074(:)*PCONC(:,26)+TPK%K075(:)*PCONC(:,22)+TPK%K076(:)*PCO& +&NC(:,20)+TPK%K077(:)*PCONC(:,21)+TPK%K078(:)*PCONC(:,28)+TPK%K119(:)*PCONC(:,3& +&3)+TPK%K120(:)*PCONC(:,34)+TPK%K121(:)*PCONC(:,35)+TPK%K122(:)*PCONC(:,36)+TPK& +&%K123(:)*PCONC(:,39)+TPK%K124(:)*PCONC(:,40)+TPK%K125(:)*PCONC(:,41)+TPK%K131(& +&:)*PCONC(:,42)+TPK%K133(:)*PCONC(:,11)+TPK%KTC5(:)+TPK%KTR5(:) ! !PPROD(N2O5) = +K047*<NO3>*<NO2>+KTC26*<WC_N2O5>+KTR26*<WR_N2O5> - PPROD(:,6) = +TPK%K047(:)*PCONC(:,5)*PCONC(:,4)+TPK%KTC26(:)*PCONC(:,47)+TPK%K& -&TR26(:)*PCONC(:,72) + PPROD(:,6) = +TPK%K047(:)*PCONC(:,5)*PCONC(:,4)+TPK%KTC26(:)*PCONC(:,48)+TPK%K& +&TR26(:)*PCONC(:,73) !PLOSS(N2O5) = +K048+KTC6+KTR6 PLOSS(:,6) = +TPK%K048(:)+TPK%KTC6(:)+TPK%KTR6(:) ! !PPROD(HONO) = +K032*<OH>*<NO>+K085*<ADD>*<NO2>+KTC27*<WC_HONO>+KTR27*<WR_HONO> - PPROD(:,7) = +TPK%K032(:)*PCONC(:,14)*PCONC(:,3)+TPK%K085(:)*PCONC(:,37)*PCONC& -&(:,4)+TPK%KTC27(:)*PCONC(:,48)+TPK%KTR27(:)*PCONC(:,73) + PPROD(:,7) = +TPK%K032(:)*PCONC(:,15)*PCONC(:,3)+TPK%K085(:)*PCONC(:,38)*PCONC& +&(:,4)+TPK%KTC27(:)*PCONC(:,49)+TPK%KTR27(:)*PCONC(:,74) !PLOSS(HONO) = +K004+K039*<OH>+KTC7+KTR7 - PLOSS(:,7) = +TPK%K004(:)+TPK%K039(:)*PCONC(:,14)+TPK%KTC7(:)+TPK%KTR7(:) + PLOSS(:,7) = +TPK%K004(:)+TPK%K039(:)*PCONC(:,15)+TPK%KTC7(:)+TPK%KTR7(:) ! !PPROD(HNO3) = +K033*<OH>*<NO2>+0.3*K038*<HO2>*<NO3>+K072*<HCHO>*<NO3>+K073*<AL !D>*<NO3>+0.91567*K074*<CARBO>*<NO3>+K075*<ARO>*<NO3>+KTC28*<WC_HNO3>+KTR28*<WR !_HNO3> - PPROD(:,8) = +TPK%K033(:)*PCONC(:,14)*PCONC(:,4)+0.3*TPK%K038(:)*PCONC(:,15)*P& -&CONC(:,5)+TPK%K072(:)*PCONC(:,22)*PCONC(:,5)+TPK%K073(:)*PCONC(:,23)*PCONC(:,5& -&)+0.91567*TPK%K074(:)*PCONC(:,25)*PCONC(:,5)+TPK%K075(:)*PCONC(:,21)*PCONC(:,5& -&)+TPK%KTC28(:)*PCONC(:,49)+TPK%KTR28(:)*PCONC(:,74) + PPROD(:,8) = +TPK%K033(:)*PCONC(:,15)*PCONC(:,4)+0.3*TPK%K038(:)*PCONC(:,16)*P& +&CONC(:,5)+TPK%K072(:)*PCONC(:,23)*PCONC(:,5)+TPK%K073(:)*PCONC(:,24)*PCONC(:,5& +&)+0.91567*TPK%K074(:)*PCONC(:,26)*PCONC(:,5)+TPK%K075(:)*PCONC(:,22)*PCONC(:,5& +&)+TPK%KTC28(:)*PCONC(:,50)+TPK%KTR28(:)*PCONC(:,75) !PLOSS(HNO3) = +K005+K040*<OH>+KTC8+KTR8 - PLOSS(:,8) = +TPK%K005(:)+TPK%K040(:)*PCONC(:,14)+TPK%KTC8(:)+TPK%KTR8(:) + PLOSS(:,8) = +TPK%K005(:)+TPK%K040(:)*PCONC(:,15)+TPK%KTC8(:)+TPK%KTR8(:) ! !PPROD(HNO4) = +K036*<HO2>*<NO2>+KTC29*<WC_HNO4>+KTR29*<WR_HNO4> - PPROD(:,9) = +TPK%K036(:)*PCONC(:,15)*PCONC(:,4)+TPK%KTC29(:)*PCONC(:,50)+TPK%& -&KTR29(:)*PCONC(:,75) + PPROD(:,9) = +TPK%K036(:)*PCONC(:,16)*PCONC(:,4)+TPK%KTC29(:)*PCONC(:,51)+TPK%& +&KTR29(:)*PCONC(:,76) !PLOSS(HNO4) = +K006+K037+K041*<OH>+KTC9+KTR9 - PLOSS(:,9) = +TPK%K006(:)+TPK%K037(:)+TPK%K041(:)*PCONC(:,14)+TPK%KTC9(:)+TPK%& + PLOSS(:,9) = +TPK%K006(:)+TPK%K037(:)+TPK%K041(:)*PCONC(:,15)+TPK%KTC9(:)+TPK%& &KTR9(:) ! !PPROD(NH3) = +KTC30*<WC_NH3>+KTR30*<WR_NH3> - PPROD(:,10) = +TPK%KTC30(:)*PCONC(:,51)+TPK%KTR30(:)*PCONC(:,76) + PPROD(:,10) = +TPK%KTC30(:)*PCONC(:,52)+TPK%KTR30(:)*PCONC(:,77) !PLOSS(NH3) = +K050*<OH>+KTC10+KTR10 - PLOSS(:,10) = +TPK%K050(:)*PCONC(:,14)+TPK%KTC10(:)+TPK%KTR10(:) + PLOSS(:,10) = +TPK%K050(:)*PCONC(:,15)+TPK%KTC10(:)+TPK%KTR10(:) ! RETURN END SUBROUTINE SUB0 @@ -4158,30 +4191,39 @@ SUBROUTINE SUB1 !Indices 11 a 20 ! ! -!PPROD(SO2) = +KTC34*<WC_SO2>+KTR34*<WR_SO2> - PPROD(:,11) = +TPK%KTC34(:)*PCONC(:,55)+TPK%KTR34(:)*PCONC(:,80) +!PPROD(DMS) = 0.0 + PPROD(:,11) = 0.0 +!PLOSS(DMS) = +K133*<NO3>+K134*<O3P>+K135*<OH> + PLOSS(:,11) = +TPK%K133(:)*PCONC(:,5)+TPK%K134(:)*TPK%O3P(:)+TPK%K135(:)*PCONC& +&(:,15) +! +!PPROD(SO2) = +K133*<DMS>*<NO3>+K134*<DMS>*<O3P>+0.8*K135*<DMS>*<OH>+KTC34*<WC_ +!SO2>+KTR34*<WR_SO2> + PPROD(:,12) = +TPK%K133(:)*PCONC(:,11)*PCONC(:,5)+TPK%K134(:)*PCONC(:,11)*TPK%& +&O3P(:)+0.8*TPK%K135(:)*PCONC(:,11)*PCONC(:,15)+TPK%KTC34(:)*PCONC(:,56)+TPK%KT& +&R34(:)*PCONC(:,81) !PLOSS(SO2) = +K052*<OH>+KTC14+KTR14 - PLOSS(:,11) = +TPK%K052(:)*PCONC(:,14)+TPK%KTC14(:)+TPK%KTR14(:) + PLOSS(:,12) = +TPK%K052(:)*PCONC(:,15)+TPK%KTC14(:)+TPK%KTR14(:) ! !PPROD(SULF) = +K052*<OH>*<SO2>+KTC35*<WC_SULF>+KTR35*<WR_SULF> - PPROD(:,12) = +TPK%K052(:)*PCONC(:,14)*PCONC(:,11)+TPK%KTC35(:)*PCONC(:,56)+TP& -&K%KTR35(:)*PCONC(:,81) + PPROD(:,13) = +TPK%K052(:)*PCONC(:,15)*PCONC(:,12)+TPK%KTC35(:)*PCONC(:,57)+TP& +&K%KTR35(:)*PCONC(:,82) !PLOSS(SULF) = +K132+KTC15+KTR15 - PLOSS(:,12) = +TPK%K132(:)+TPK%KTC15(:)+TPK%KTR15(:) + PLOSS(:,13) = +TPK%K132(:)+TPK%KTC15(:)+TPK%KTR15(:) ! !PPROD(CO) = +K010*<HCHO>+K011*<HCHO>+K012*<ALD>+0.91924*K016*<CARBO>+0.01*K054 !*<BIO>*<O3P>+0.00878*K058*<ALKA>*<OH>+K062*<HCHO>*<OH>+1.01732*K065*<CARBO>*<O !H>+K072*<HCHO>*<NO3>+1.33723*K074*<CARBO>*<NO3>+0.35120*K079*<ALKE>*<O3>+0.360 !00*K080*<BIO>*<O3>+0.64728*K081*<CARBO>*<O3>+0.13*K082*<PAN>*<O3> - PPROD(:,13) = +TPK%K010(:)*PCONC(:,22)+TPK%K011(:)*PCONC(:,22)+TPK%K012(:)*PCO& -&NC(:,23)+0.91924*TPK%K016(:)*PCONC(:,25)+0.01*TPK%K054(:)*PCONC(:,20)*TPK%O3P(& -&:)+0.00878*TPK%K058(:)*PCONC(:,18)*PCONC(:,14)+TPK%K062(:)*PCONC(:,22)*PCONC(:& -&,14)+1.01732*TPK%K065(:)*PCONC(:,25)*PCONC(:,14)+TPK%K072(:)*PCONC(:,22)*PCONC& -&(:,5)+1.33723*TPK%K074(:)*PCONC(:,25)*PCONC(:,5)+0.35120*TPK%K079(:)*PCONC(:,1& -&9)*PCONC(:,1)+0.36000*TPK%K080(:)*PCONC(:,20)*PCONC(:,1)+0.64728*TPK%K081(:)*P& -&CONC(:,25)*PCONC(:,1)+0.13*TPK%K082(:)*PCONC(:,27)*PCONC(:,1) + PPROD(:,14) = +TPK%K010(:)*PCONC(:,23)+TPK%K011(:)*PCONC(:,23)+TPK%K012(:)*PCO& +&NC(:,24)+0.91924*TPK%K016(:)*PCONC(:,26)+0.01*TPK%K054(:)*PCONC(:,21)*TPK%O3P(& +&:)+0.00878*TPK%K058(:)*PCONC(:,19)*PCONC(:,15)+TPK%K062(:)*PCONC(:,23)*PCONC(:& +&,15)+1.01732*TPK%K065(:)*PCONC(:,26)*PCONC(:,15)+TPK%K072(:)*PCONC(:,23)*PCONC& +&(:,5)+1.33723*TPK%K074(:)*PCONC(:,26)*PCONC(:,5)+0.35120*TPK%K079(:)*PCONC(:,2& +&0)*PCONC(:,1)+0.36000*TPK%K080(:)*PCONC(:,21)*PCONC(:,1)+0.64728*TPK%K081(:)*P& +&CONC(:,26)*PCONC(:,1)+0.13*TPK%K082(:)*PCONC(:,28)*PCONC(:,1) !PLOSS(CO) = +K053*<OH> - PLOSS(:,13) = +TPK%K053(:)*PCONC(:,14) + PLOSS(:,14) = +TPK%K053(:)*PCONC(:,15) ! !PPROD(OH) = +K004*<HONO>+K005*<HNO3>+0.35*K006*<HNO4>+K009*<H2O2>+K009*<H2O2>+ !K013*<OP1>+K014*<OP2>+K022*<O1D>*<H2O>+K022*<O1D>*<H2O>+K024*<O3>*<HO2>+K035*< @@ -4189,32 +4231,32 @@ SUBROUTINE SUB1 !0.35*K068*<OP1>*<OH>+0.44925*K069*<OP2>*<OH>+0.39435*K079*<ALKE>*<O3>+0.28000* !K080*<BIO>*<O3>+0.20595*K081*<CARBO>*<O3>+0.036*K082*<PAN>*<O3>+K087*<ADD>*<O3 !>+KTC31*<WC_OH>+KTR31*<WR_OH> - PPROD(:,14) = +TPK%K004(:)*PCONC(:,7)+TPK%K005(:)*PCONC(:,8)+0.35*TPK%K006(:)*& + PPROD(:,15) = +TPK%K004(:)*PCONC(:,7)+TPK%K005(:)*PCONC(:,8)+0.35*TPK%K006(:)*& &PCONC(:,9)+TPK%K009(:)*PCONC(:,2)+TPK%K009(:)*PCONC(:,2)+TPK%K013(:)*PCONC(:,2& -&8)+TPK%K014(:)*PCONC(:,29)+TPK%K022(:)*TPK%O1D(:)*TPK%H2O(:)+TPK%K022(:)*TPK%O& -&1D(:)*TPK%H2O(:)+TPK%K024(:)*PCONC(:,1)*PCONC(:,15)+TPK%K035(:)*PCONC(:,15)*PC& -&ONC(:,3)+0.7*TPK%K038(:)*PCONC(:,15)*PCONC(:,5)+0.02*TPK%K054(:)*PCONC(:,20)*T& -&PK%O3P(:)+0.00878*TPK%K058(:)*PCONC(:,18)*PCONC(:,14)+0.35*TPK%K068(:)*PCONC(:& -&,28)*PCONC(:,14)+0.44925*TPK%K069(:)*PCONC(:,29)*PCONC(:,14)+0.39435*TPK%K079(& -&:)*PCONC(:,19)*PCONC(:,1)+0.28000*TPK%K080(:)*PCONC(:,20)*PCONC(:,1)+0.20595*T& -&PK%K081(:)*PCONC(:,25)*PCONC(:,1)+0.036*TPK%K082(:)*PCONC(:,27)*PCONC(:,1)+TPK& -&%K087(:)*PCONC(:,37)*PCONC(:,1)+TPK%KTC31(:)*PCONC(:,52)+TPK%KTR31(:)*PCONC(:,& -&77) +&9)+TPK%K014(:)*PCONC(:,30)+TPK%K022(:)*TPK%O1D(:)*TPK%H2O(:)+TPK%K022(:)*TPK%O& +&1D(:)*TPK%H2O(:)+TPK%K024(:)*PCONC(:,1)*PCONC(:,16)+TPK%K035(:)*PCONC(:,16)*PC& +&ONC(:,3)+0.7*TPK%K038(:)*PCONC(:,16)*PCONC(:,5)+0.02*TPK%K054(:)*PCONC(:,21)*T& +&PK%O3P(:)+0.00878*TPK%K058(:)*PCONC(:,19)*PCONC(:,15)+0.35*TPK%K068(:)*PCONC(:& +&,29)*PCONC(:,15)+0.44925*TPK%K069(:)*PCONC(:,30)*PCONC(:,15)+0.39435*TPK%K079(& +&:)*PCONC(:,20)*PCONC(:,1)+0.28000*TPK%K080(:)*PCONC(:,21)*PCONC(:,1)+0.20595*T& +&PK%K081(:)*PCONC(:,26)*PCONC(:,1)+0.036*TPK%K082(:)*PCONC(:,28)*PCONC(:,1)+TPK& +&%K087(:)*PCONC(:,38)*PCONC(:,1)+TPK%KTC31(:)*PCONC(:,53)+TPK%KTR31(:)*PCONC(:,& +&78) !PLOSS(OH) = +K023*<O3>+K025*<HO2>+K026*<H2O2>+K032*<NO>+K033*<NO2>+K034*<NO3>+ !K039*<HONO>+K040*<HNO3>+K041*<HNO4>+K050*<NH3>+K051*<H2>+K052*<SO2>+K053*<CO>+ !K056*<CH4>+K057*<ETH>+K058*<ALKA>+K059*<ALKE>+K060*<BIO>+K061*<ARO>+K062*<HCHO !>+K063*<ALD>+K064*<KET>+K065*<CARBO>+K066*<ORA1>+K067*<ORA2>+K068*<OP1>+K069*< -!OP2>+K070*<PAN>+K071*<ONIT>+KTC11+KTR11 - PLOSS(:,14) = +TPK%K023(:)*PCONC(:,1)+TPK%K025(:)*PCONC(:,15)+TPK%K026(:)*PCON& +!OP2>+K070*<PAN>+K071*<ONIT>+K135*<DMS>+KTC11+KTR11 + PLOSS(:,15) = +TPK%K023(:)*PCONC(:,1)+TPK%K025(:)*PCONC(:,16)+TPK%K026(:)*PCON& &C(:,2)+TPK%K032(:)*PCONC(:,3)+TPK%K033(:)*PCONC(:,4)+TPK%K034(:)*PCONC(:,5)+TP& &K%K039(:)*PCONC(:,7)+TPK%K040(:)*PCONC(:,8)+TPK%K041(:)*PCONC(:,9)+TPK%K050(:)& -&*PCONC(:,10)+TPK%K051(:)*TPK%H2(:)+TPK%K052(:)*PCONC(:,11)+TPK%K053(:)*PCONC(:& -&,13)+TPK%K056(:)*PCONC(:,16)+TPK%K057(:)*PCONC(:,17)+TPK%K058(:)*PCONC(:,18)+T& -&PK%K059(:)*PCONC(:,19)+TPK%K060(:)*PCONC(:,20)+TPK%K061(:)*PCONC(:,21)+TPK%K06& -&2(:)*PCONC(:,22)+TPK%K063(:)*PCONC(:,23)+TPK%K064(:)*PCONC(:,24)+TPK%K065(:)*P& -&CONC(:,25)+TPK%K066(:)*PCONC(:,30)+TPK%K067(:)*PCONC(:,31)+TPK%K068(:)*PCONC(:& -&,28)+TPK%K069(:)*PCONC(:,29)+TPK%K070(:)*PCONC(:,27)+TPK%K071(:)*PCONC(:,26)+T& -&PK%KTC11(:)+TPK%KTR11(:) +&*PCONC(:,10)+TPK%K051(:)*TPK%H2(:)+TPK%K052(:)*PCONC(:,12)+TPK%K053(:)*PCONC(:& +&,14)+TPK%K056(:)*PCONC(:,17)+TPK%K057(:)*PCONC(:,18)+TPK%K058(:)*PCONC(:,19)+T& +&PK%K059(:)*PCONC(:,20)+TPK%K060(:)*PCONC(:,21)+TPK%K061(:)*PCONC(:,22)+TPK%K06& +&2(:)*PCONC(:,23)+TPK%K063(:)*PCONC(:,24)+TPK%K064(:)*PCONC(:,25)+TPK%K065(:)*P& +&CONC(:,26)+TPK%K066(:)*PCONC(:,31)+TPK%K067(:)*PCONC(:,32)+TPK%K068(:)*PCONC(:& +&,29)+TPK%K069(:)*PCONC(:,30)+TPK%K070(:)*PCONC(:,28)+TPK%K071(:)*PCONC(:,27)+T& +&PK%K135(:)*PCONC(:,11)+TPK%KTC11(:)+TPK%KTR11(:) ! !PPROD(HO2) = +0.65*K006*<HNO4>+K011*<HCHO>+K011*<HCHO>+K012*<ALD>+K013*<OP1>+0 !.96205*K014*<OP2>+0.75830*K016*<CARBO>+K017*<ONIT>+K023*<O3>*<OH>+K026*<H2O2>* @@ -4233,82 +4275,76 @@ SUBROUTINE SUB1 !LN>+0.00000*K118*<OLN>*<OLN>+K119*<MO2>*<NO3>+0.81290*K120*<ALKAP>*<NO3>+K121* !<ALKEP>*<NO3>+K122*<BIOP>*<NO3>+K123*<AROP>*<NO3>+0.04915*K124*<CARBOP>*<NO3>+ !0.25928*K125*<OLN>*<NO3>+K127*<XO2>*<MO2>+KTC32*<WC_HO2>+KTR32*<WR_HO2> - PPROD(:,15) = +0.65*TPK%K006(:)*PCONC(:,9)+TPK%K011(:)*PCONC(:,22)+TPK%K011(:)& -&*PCONC(:,22)+TPK%K012(:)*PCONC(:,23)+TPK%K013(:)*PCONC(:,28)+0.96205*TPK%K014(& -&:)*PCONC(:,29)+0.75830*TPK%K016(:)*PCONC(:,25)+TPK%K017(:)*PCONC(:,26)+TPK%K02& -&3(:)*PCONC(:,1)*PCONC(:,14)+TPK%K026(:)*PCONC(:,2)*PCONC(:,14)+TPK%K034(:)*PCO& -&NC(:,14)*PCONC(:,5)+TPK%K037(:)*PCONC(:,9)+TPK%K051(:)*PCONC(:,14)*TPK%H2(:)+T& -&PK%K052(:)*PCONC(:,14)*PCONC(:,11)+TPK%K053(:)*PCONC(:,13)*PCONC(:,14)+0.28*TP& -&K%K054(:)*PCONC(:,20)*TPK%O3P(:)+0.12793*TPK%K058(:)*PCONC(:,18)*PCONC(:,14)+0& -&.10318*TPK%K061(:)*PCONC(:,21)*PCONC(:,14)+TPK%K062(:)*PCONC(:,22)*PCONC(:,14)& -&+0.51208*TPK%K065(:)*PCONC(:,25)*PCONC(:,14)+TPK%K066(:)*PCONC(:,30)*PCONC(:,1& -&4)+0.02915*TPK%K069(:)*PCONC(:,29)*PCONC(:,14)+0.28107*TPK%K070(:)*PCONC(:,27)& -&*PCONC(:,14)+TPK%K072(:)*PCONC(:,22)*PCONC(:,5)+0.63217*TPK%K074(:)*PCONC(:,25& -&)*PCONC(:,5)+0.23451*TPK%K079(:)*PCONC(:,19)*PCONC(:,1)+0.30000*TPK%K080(:)*PC& -&ONC(:,20)*PCONC(:,1)+0.28441*TPK%K081(:)*PCONC(:,25)*PCONC(:,1)+0.08*TPK%K082(& -&:)*PCONC(:,27)*PCONC(:,1)+0.02*TPK%K086(:)*PCONC(:,37)*TPK%O2(:)+TPK%K090(:)*P& -&CONC(:,32)*PCONC(:,3)+0.74265*TPK%K091(:)*PCONC(:,33)*PCONC(:,3)+TPK%K092(:)*P& -&CONC(:,34)*PCONC(:,3)+0.84700*TPK%K093(:)*PCONC(:,35)*PCONC(:,3)+0.95115*TPK%K& -&094(:)*PCONC(:,38)*PCONC(:,3)+0.12334*TPK%K095(:)*PCONC(:,39)*PCONC(:,3)+0.184& -&01*TPK%K096(:)*PCONC(:,40)*PCONC(:,3)+0.66*TPK%K104(:)*PCONC(:,32)*PCONC(:,32)& -&+0.98383*TPK%K105(:)*PCONC(:,33)*PCONC(:,32)+TPK%K106(:)*PCONC(:,34)*PCONC(:,3& -&2)+1.00000*TPK%K107(:)*PCONC(:,35)*PCONC(:,32)+1.02767*TPK%K108(:)*PCONC(:,38)& -&*PCONC(:,32)+0.82998*TPK%K109(:)*PCONC(:,39)*PCONC(:,32)+0.67560*TPK%K110(:)*P& -&CONC(:,40)*PCONC(:,32)+0.48079*TPK%K111(:)*PCONC(:,33)*PCONC(:,39)+0.50078*TPK& -&%K112(:)*PCONC(:,34)*PCONC(:,39)+0.50600*TPK%K113(:)*PCONC(:,35)*PCONC(:,39)+T& -&PK%K114(:)*PCONC(:,38)*PCONC(:,39)+0.07566*TPK%K115(:)*PCONC(:,39)*PCONC(:,39)& -&+0.17599*TPK%K116(:)*PCONC(:,40)*PCONC(:,39)+TPK%K117(:)*PCONC(:,40)*PCONC(:,4& -&0)+0.00000*TPK%K118(:)*PCONC(:,40)*PCONC(:,40)+TPK%K119(:)*PCONC(:,32)*PCONC(:& -&,5)+0.81290*TPK%K120(:)*PCONC(:,33)*PCONC(:,5)+TPK%K121(:)*PCONC(:,34)*PCONC(:& -&,5)+TPK%K122(:)*PCONC(:,35)*PCONC(:,5)+TPK%K123(:)*PCONC(:,38)*PCONC(:,5)+0.04& -&915*TPK%K124(:)*PCONC(:,39)*PCONC(:,5)+0.25928*TPK%K125(:)*PCONC(:,40)*PCONC(:& -&,5)+TPK%K127(:)*PCONC(:,41)*PCONC(:,32)+TPK%KTC32(:)*PCONC(:,53)+TPK%KTR32(:)*& -&PCONC(:,78) + PPROD(:,16) = +0.65*TPK%K006(:)*PCONC(:,9)+TPK%K011(:)*PCONC(:,23)+TPK%K011(:)& +&*PCONC(:,23)+TPK%K012(:)*PCONC(:,24)+TPK%K013(:)*PCONC(:,29)+0.96205*TPK%K014(& +&:)*PCONC(:,30)+0.75830*TPK%K016(:)*PCONC(:,26)+TPK%K017(:)*PCONC(:,27)+TPK%K02& +&3(:)*PCONC(:,1)*PCONC(:,15)+TPK%K026(:)*PCONC(:,2)*PCONC(:,15)+TPK%K034(:)*PCO& +&NC(:,15)*PCONC(:,5)+TPK%K037(:)*PCONC(:,9)+TPK%K051(:)*PCONC(:,15)*TPK%H2(:)+T& +&PK%K052(:)*PCONC(:,15)*PCONC(:,12)+TPK%K053(:)*PCONC(:,14)*PCONC(:,15)+0.28*TP& +&K%K054(:)*PCONC(:,21)*TPK%O3P(:)+0.12793*TPK%K058(:)*PCONC(:,19)*PCONC(:,15)+0& +&.10318*TPK%K061(:)*PCONC(:,22)*PCONC(:,15)+TPK%K062(:)*PCONC(:,23)*PCONC(:,15)& +&+0.51208*TPK%K065(:)*PCONC(:,26)*PCONC(:,15)+TPK%K066(:)*PCONC(:,31)*PCONC(:,1& +&5)+0.02915*TPK%K069(:)*PCONC(:,30)*PCONC(:,15)+0.28107*TPK%K070(:)*PCONC(:,28)& +&*PCONC(:,15)+TPK%K072(:)*PCONC(:,23)*PCONC(:,5)+0.63217*TPK%K074(:)*PCONC(:,26& +&)*PCONC(:,5)+0.23451*TPK%K079(:)*PCONC(:,20)*PCONC(:,1)+0.30000*TPK%K080(:)*PC& +&ONC(:,21)*PCONC(:,1)+0.28441*TPK%K081(:)*PCONC(:,26)*PCONC(:,1)+0.08*TPK%K082(& +&:)*PCONC(:,28)*PCONC(:,1)+0.02*TPK%K086(:)*PCONC(:,38)*TPK%O2(:)+TPK%K090(:)*P& +&CONC(:,33)*PCONC(:,3)+0.74265*TPK%K091(:)*PCONC(:,34)*PCONC(:,3)+TPK%K092(:)*P& +&CONC(:,35)*PCONC(:,3)+0.84700*TPK%K093(:)*PCONC(:,36)*PCONC(:,3)+0.95115*TPK%K& +&094(:)*PCONC(:,39)*PCONC(:,3)+0.12334*TPK%K095(:)*PCONC(:,40)*PCONC(:,3)+0.184& +&01*TPK%K096(:)*PCONC(:,41)*PCONC(:,3)+0.66*TPK%K104(:)*PCONC(:,33)*PCONC(:,33)& +&+0.98383*TPK%K105(:)*PCONC(:,34)*PCONC(:,33)+TPK%K106(:)*PCONC(:,35)*PCONC(:,3& +&3)+1.00000*TPK%K107(:)*PCONC(:,36)*PCONC(:,33)+1.02767*TPK%K108(:)*PCONC(:,39)& +&*PCONC(:,33)+0.82998*TPK%K109(:)*PCONC(:,40)*PCONC(:,33)+0.67560*TPK%K110(:)*P& +&CONC(:,41)*PCONC(:,33)+0.48079*TPK%K111(:)*PCONC(:,34)*PCONC(:,40)+0.50078*TPK& +&%K112(:)*PCONC(:,35)*PCONC(:,40)+0.50600*TPK%K113(:)*PCONC(:,36)*PCONC(:,40)+T& +&PK%K114(:)*PCONC(:,39)*PCONC(:,40)+0.07566*TPK%K115(:)*PCONC(:,40)*PCONC(:,40)& +&+0.17599*TPK%K116(:)*PCONC(:,41)*PCONC(:,40)+TPK%K117(:)*PCONC(:,41)*PCONC(:,4& +&1)+0.00000*TPK%K118(:)*PCONC(:,41)*PCONC(:,41)+TPK%K119(:)*PCONC(:,33)*PCONC(:& +&,5)+0.81290*TPK%K120(:)*PCONC(:,34)*PCONC(:,5)+TPK%K121(:)*PCONC(:,35)*PCONC(:& +&,5)+TPK%K122(:)*PCONC(:,36)*PCONC(:,5)+TPK%K123(:)*PCONC(:,39)*PCONC(:,5)+0.04& +&915*TPK%K124(:)*PCONC(:,40)*PCONC(:,5)+0.25928*TPK%K125(:)*PCONC(:,41)*PCONC(:& +&,5)+TPK%K127(:)*PCONC(:,42)*PCONC(:,33)+TPK%KTC32(:)*PCONC(:,54)+TPK%KTR32(:)*& +&PCONC(:,79) !PLOSS(HO2) = +K024*<O3>+K025*<OH>+K027*<HO2>+K027*<HO2>+K028*<HO2>*<H2O>+K028* !<HO2>*<H2O>+K035*<NO>+K036*<NO2>+K038*<NO3>+K084*<PHO>+K097*<MO2>+K098*<ALKAP> !+K099*<ALKEP>+K0100*<BIOP>+K0101*<AROP>+K0102*<CARBOP>+K103*<OLN>+K126*<XO2>+K !TC12+KTR12 - PLOSS(:,15) = +TPK%K024(:)*PCONC(:,1)+TPK%K025(:)*PCONC(:,14)+TPK%K027(:)*PCON& -&C(:,15)+TPK%K027(:)*PCONC(:,15)+TPK%K028(:)*PCONC(:,15)*TPK%H2O(:)+TPK%K028(:)& -&*PCONC(:,15)*TPK%H2O(:)+TPK%K035(:)*PCONC(:,3)+TPK%K036(:)*PCONC(:,4)+TPK%K038& -&(:)*PCONC(:,5)+TPK%K084(:)*PCONC(:,36)+TPK%K097(:)*PCONC(:,32)+TPK%K098(:)*PCO& -&NC(:,33)+TPK%K099(:)*PCONC(:,34)+TPK%K0100(:)*PCONC(:,35)+TPK%K0101(:)*PCONC(:& -&,38)+TPK%K0102(:)*PCONC(:,39)+TPK%K103(:)*PCONC(:,40)+TPK%K126(:)*PCONC(:,41)+& + PLOSS(:,16) = +TPK%K024(:)*PCONC(:,1)+TPK%K025(:)*PCONC(:,15)+TPK%K027(:)*PCON& +&C(:,16)+TPK%K027(:)*PCONC(:,16)+TPK%K028(:)*PCONC(:,16)*TPK%H2O(:)+TPK%K028(:)& +&*PCONC(:,16)*TPK%H2O(:)+TPK%K035(:)*PCONC(:,3)+TPK%K036(:)*PCONC(:,4)+TPK%K038& +&(:)*PCONC(:,5)+TPK%K084(:)*PCONC(:,37)+TPK%K097(:)*PCONC(:,33)+TPK%K098(:)*PCO& +&NC(:,34)+TPK%K099(:)*PCONC(:,35)+TPK%K0100(:)*PCONC(:,36)+TPK%K0101(:)*PCONC(:& +&,39)+TPK%K0102(:)*PCONC(:,40)+TPK%K103(:)*PCONC(:,41)+TPK%K126(:)*PCONC(:,42)+& &TPK%KTC12(:)+TPK%KTR12(:) ! !PPROD(CH4) = +0.04300*K079*<ALKE>*<O3> - PPROD(:,16) = +0.04300*TPK%K079(:)*PCONC(:,19)*PCONC(:,1) + PPROD(:,17) = +0.04300*TPK%K079(:)*PCONC(:,20)*PCONC(:,1) !PLOSS(CH4) = +K056*<OH> - PLOSS(:,16) = +TPK%K056(:)*PCONC(:,14) + PLOSS(:,17) = +TPK%K056(:)*PCONC(:,15) ! !PPROD(ETH) = +0.03196*K079*<ALKE>*<O3> - PPROD(:,17) = +0.03196*TPK%K079(:)*PCONC(:,19)*PCONC(:,1) + PPROD(:,18) = +0.03196*TPK%K079(:)*PCONC(:,20)*PCONC(:,1) !PLOSS(ETH) = +K057*<OH> - PLOSS(:,17) = +TPK%K057(:)*PCONC(:,14) + PLOSS(:,18) = +TPK%K057(:)*PCONC(:,15) ! !PPROD(ALKA) = 0.0 - PPROD(:,18) = 0.0 + PPROD(:,19) = 0.0 !PLOSS(ALKA) = +K058*<OH> - PLOSS(:,18) = +TPK%K058(:)*PCONC(:,14) + PLOSS(:,19) = +TPK%K058(:)*PCONC(:,15) ! !PPROD(ALKE) = +0.91868*K054*<BIO>*<O3P>+0.00000*K079*<ALKE>*<O3>+0.37388*K080* !<BIO>*<O3>+0.37815*K093*<BIOP>*<NO>+0.48074*K107*<BIOP>*<MO2>+0.24463*K113*<BI !OP>*<CARBOP>+0.42729*K122*<BIOP>*<NO3> - PPROD(:,19) = +0.91868*TPK%K054(:)*PCONC(:,20)*TPK%O3P(:)+0.00000*TPK%K079(:)*& -&PCONC(:,19)*PCONC(:,1)+0.37388*TPK%K080(:)*PCONC(:,20)*PCONC(:,1)+0.37815*TPK%& -&K093(:)*PCONC(:,35)*PCONC(:,3)+0.48074*TPK%K107(:)*PCONC(:,35)*PCONC(:,32)+0.2& -&4463*TPK%K113(:)*PCONC(:,35)*PCONC(:,39)+0.42729*TPK%K122(:)*PCONC(:,35)*PCONC& + PPROD(:,20) = +0.91868*TPK%K054(:)*PCONC(:,21)*TPK%O3P(:)+0.00000*TPK%K079(:)*& +&PCONC(:,20)*PCONC(:,1)+0.37388*TPK%K080(:)*PCONC(:,21)*PCONC(:,1)+0.37815*TPK%& +&K093(:)*PCONC(:,36)*PCONC(:,3)+0.48074*TPK%K107(:)*PCONC(:,36)*PCONC(:,33)+0.2& +&4463*TPK%K113(:)*PCONC(:,36)*PCONC(:,40)+0.42729*TPK%K122(:)*PCONC(:,36)*PCONC& &(:,5) !PLOSS(ALKE) = +K059*<OH>+K076*<NO3>+K079*<O3> - PLOSS(:,19) = +TPK%K059(:)*PCONC(:,14)+TPK%K076(:)*PCONC(:,5)+TPK%K079(:)*PCON& + PLOSS(:,20) = +TPK%K059(:)*PCONC(:,15)+TPK%K076(:)*PCONC(:,5)+TPK%K079(:)*PCON& &C(:,1) ! -!PPROD(BIO) = 0.0 - PPROD(:,20) = 0.0 -!PLOSS(BIO) = +K054*<O3P>+K060*<OH>+K077*<NO3>+K080*<O3> - PLOSS(:,20) = +TPK%K054(:)*TPK%O3P(:)+TPK%K060(:)*PCONC(:,14)+TPK%K077(:)*PCON& -&C(:,5)+TPK%K080(:)*PCONC(:,1) -! RETURN END SUBROUTINE SUB1 ! @@ -4317,13 +4353,19 @@ SUBROUTINE SUB2 !Indices 21 a 30 ! ! +!PPROD(BIO) = 0.0 + PPROD(:,21) = 0.0 +!PLOSS(BIO) = +K054*<O3P>+K060*<OH>+K077*<NO3>+K080*<O3> + PLOSS(:,21) = +TPK%K054(:)*TPK%O3P(:)+TPK%K060(:)*PCONC(:,15)+TPK%K077(:)*PCON& +&C(:,5)+TPK%K080(:)*PCONC(:,1) +! !PPROD(ARO) = +0.10670*K083*<PHO>*<NO2>+1.06698*K084*<PHO>*<HO2>+K085*<ADD>*<NO !2>+0.02*K086*<ADD>*<O2>+K087*<ADD>*<O3> - PPROD(:,21) = +0.10670*TPK%K083(:)*PCONC(:,36)*PCONC(:,4)+1.06698*TPK%K084(:)*& -&PCONC(:,36)*PCONC(:,15)+TPK%K085(:)*PCONC(:,37)*PCONC(:,4)+0.02*TPK%K086(:)*PC& -&ONC(:,37)*TPK%O2(:)+TPK%K087(:)*PCONC(:,37)*PCONC(:,1) + PPROD(:,22) = +0.10670*TPK%K083(:)*PCONC(:,37)*PCONC(:,4)+1.06698*TPK%K084(:)*& +&PCONC(:,37)*PCONC(:,16)+TPK%K085(:)*PCONC(:,38)*PCONC(:,4)+0.02*TPK%K086(:)*PC& +&ONC(:,38)*TPK%O2(:)+TPK%K087(:)*PCONC(:,38)*PCONC(:,1) !PLOSS(ARO) = +K061*<OH>+K075*<NO3> - PLOSS(:,21) = +TPK%K061(:)*PCONC(:,14)+TPK%K075(:)*PCONC(:,5) + PLOSS(:,22) = +TPK%K061(:)*PCONC(:,15)+TPK%K075(:)*PCONC(:,5) ! !PPROD(HCHO) = +K013*<OP1>+0.06517*K016*<CARBO>+0.05*K054*<BIO>*<O3P>+0.00140*K !058*<ALKA>*<OH>+0.00000*K065*<CARBO>*<OH>+0.35*K068*<OP1>*<OH>+0.02915*K069*<O @@ -4338,30 +4380,30 @@ SUBROUTINE SUB2 !K118*<OLN>*<OLN>+K119*<MO2>*<NO3>+0.03142*K120*<ALKAP>*<NO3>+1.40909*K121*<ALK !EP>*<NO3>+0.68600*K122*<BIOP>*<NO3>+0.03175*K124*<CARBOP>*<NO3>+0.20740*K125*< !OLN>*<NO3>+K127*<XO2>*<MO2>+KTC36*<WC_HCHO>+KTR36*<WR_HCHO> - PPROD(:,22) = +TPK%K013(:)*PCONC(:,28)+0.06517*TPK%K016(:)*PCONC(:,25)+0.05*TP& -&K%K054(:)*PCONC(:,20)*TPK%O3P(:)+0.00140*TPK%K058(:)*PCONC(:,18)*PCONC(:,14)+0& -&.00000*TPK%K065(:)*PCONC(:,25)*PCONC(:,14)+0.35*TPK%K068(:)*PCONC(:,28)*PCONC(& -&:,14)+0.02915*TPK%K069(:)*PCONC(:,29)*PCONC(:,14)+0.57839*TPK%K070(:)*PCONC(:,& -&27)*PCONC(:,14)+0.40*TPK%K078(:)*PCONC(:,27)*PCONC(:,5)+0.48290*TPK%K079(:)*PC& -&ONC(:,19)*PCONC(:,1)+0.90000*TPK%K080(:)*PCONC(:,20)*PCONC(:,1)+0.00000*TPK%K0& -&81(:)*PCONC(:,25)*PCONC(:,1)+0.70*TPK%K082(:)*PCONC(:,27)*PCONC(:,1)+TPK%K090(& -&:)*PCONC(:,32)*PCONC(:,3)+0.03002*TPK%K091(:)*PCONC(:,33)*PCONC(:,3)+1.39870*T& -&PK%K092(:)*PCONC(:,34)*PCONC(:,3)+0.60600*TPK%K093(:)*PCONC(:,35)*PCONC(:,3)+0& -&.05848*TPK%K095(:)*PCONC(:,39)*PCONC(:,3)+0.23419*TPK%K096(:)*PCONC(:,40)*PCON& -&C(:,3)+1.33*TPK%K104(:)*PCONC(:,32)*PCONC(:,32)+0.80556*TPK%K105(:)*PCONC(:,33& -&)*PCONC(:,32)+1.42894*TPK%K106(:)*PCONC(:,34)*PCONC(:,32)+1.09000*TPK%K107(:)*& -&PCONC(:,35)*PCONC(:,32)+TPK%K108(:)*PCONC(:,38)*PCONC(:,32)+0.95723*TPK%K109(:& -&)*PCONC(:,39)*PCONC(:,32)+0.88625*TPK%K110(:)*PCONC(:,40)*PCONC(:,32)+0.07600*& -&TPK%K111(:)*PCONC(:,33)*PCONC(:,39)+0.68192*TPK%K112(:)*PCONC(:,34)*PCONC(:,39& -&)+0.34000*TPK%K113(:)*PCONC(:,35)*PCONC(:,39)+0.03432*TPK%K115(:)*PCONC(:,39)*& -&PCONC(:,39)+0.13414*TPK%K116(:)*PCONC(:,40)*PCONC(:,39)+0.00000*TPK%K118(:)*PC& -&ONC(:,40)*PCONC(:,40)+TPK%K119(:)*PCONC(:,32)*PCONC(:,5)+0.03142*TPK%K120(:)*P& -&CONC(:,33)*PCONC(:,5)+1.40909*TPK%K121(:)*PCONC(:,34)*PCONC(:,5)+0.68600*TPK%K& -&122(:)*PCONC(:,35)*PCONC(:,5)+0.03175*TPK%K124(:)*PCONC(:,39)*PCONC(:,5)+0.207& -&40*TPK%K125(:)*PCONC(:,40)*PCONC(:,5)+TPK%K127(:)*PCONC(:,41)*PCONC(:,32)+TPK%& -&KTC36(:)*PCONC(:,57)+TPK%KTR36(:)*PCONC(:,82) + PPROD(:,23) = +TPK%K013(:)*PCONC(:,29)+0.06517*TPK%K016(:)*PCONC(:,26)+0.05*TP& +&K%K054(:)*PCONC(:,21)*TPK%O3P(:)+0.00140*TPK%K058(:)*PCONC(:,19)*PCONC(:,15)+0& +&.00000*TPK%K065(:)*PCONC(:,26)*PCONC(:,15)+0.35*TPK%K068(:)*PCONC(:,29)*PCONC(& +&:,15)+0.02915*TPK%K069(:)*PCONC(:,30)*PCONC(:,15)+0.57839*TPK%K070(:)*PCONC(:,& +&28)*PCONC(:,15)+0.40*TPK%K078(:)*PCONC(:,28)*PCONC(:,5)+0.48290*TPK%K079(:)*PC& +&ONC(:,20)*PCONC(:,1)+0.90000*TPK%K080(:)*PCONC(:,21)*PCONC(:,1)+0.00000*TPK%K0& +&81(:)*PCONC(:,26)*PCONC(:,1)+0.70*TPK%K082(:)*PCONC(:,28)*PCONC(:,1)+TPK%K090(& +&:)*PCONC(:,33)*PCONC(:,3)+0.03002*TPK%K091(:)*PCONC(:,34)*PCONC(:,3)+1.39870*T& +&PK%K092(:)*PCONC(:,35)*PCONC(:,3)+0.60600*TPK%K093(:)*PCONC(:,36)*PCONC(:,3)+0& +&.05848*TPK%K095(:)*PCONC(:,40)*PCONC(:,3)+0.23419*TPK%K096(:)*PCONC(:,41)*PCON& +&C(:,3)+1.33*TPK%K104(:)*PCONC(:,33)*PCONC(:,33)+0.80556*TPK%K105(:)*PCONC(:,34& +&)*PCONC(:,33)+1.42894*TPK%K106(:)*PCONC(:,35)*PCONC(:,33)+1.09000*TPK%K107(:)*& +&PCONC(:,36)*PCONC(:,33)+TPK%K108(:)*PCONC(:,39)*PCONC(:,33)+0.95723*TPK%K109(:& +&)*PCONC(:,40)*PCONC(:,33)+0.88625*TPK%K110(:)*PCONC(:,41)*PCONC(:,33)+0.07600*& +&TPK%K111(:)*PCONC(:,34)*PCONC(:,40)+0.68192*TPK%K112(:)*PCONC(:,35)*PCONC(:,40& +&)+0.34000*TPK%K113(:)*PCONC(:,36)*PCONC(:,40)+0.03432*TPK%K115(:)*PCONC(:,40)*& +&PCONC(:,40)+0.13414*TPK%K116(:)*PCONC(:,41)*PCONC(:,40)+0.00000*TPK%K118(:)*PC& +&ONC(:,41)*PCONC(:,41)+TPK%K119(:)*PCONC(:,33)*PCONC(:,5)+0.03142*TPK%K120(:)*P& +&CONC(:,34)*PCONC(:,5)+1.40909*TPK%K121(:)*PCONC(:,35)*PCONC(:,5)+0.68600*TPK%K& +&122(:)*PCONC(:,36)*PCONC(:,5)+0.03175*TPK%K124(:)*PCONC(:,40)*PCONC(:,5)+0.207& +&40*TPK%K125(:)*PCONC(:,41)*PCONC(:,5)+TPK%K127(:)*PCONC(:,42)*PCONC(:,33)+TPK%& +&KTC36(:)*PCONC(:,58)+TPK%KTR36(:)*PCONC(:,83) !PLOSS(HCHO) = +K010+K011+K062*<OH>+K072*<NO3>+KTC16+KTR16 - PLOSS(:,22) = +TPK%K010(:)+TPK%K011(:)+TPK%K062(:)*PCONC(:,14)+TPK%K072(:)*PCO& + PLOSS(:,23) = +TPK%K010(:)+TPK%K011(:)+TPK%K062(:)*PCONC(:,15)+TPK%K072(:)*PCO& &NC(:,5)+TPK%KTC16(:)+TPK%KTR16(:) ! !PPROD(ALD) = +0.96205*K014*<OP2>+0.20*K017*<ONIT>+K055*<CARBO>*<O3P>+0.08173*K @@ -4375,26 +4417,26 @@ SUBROUTINE SUB2 !P>+0.42122*K116*<OLN>*<CARBOP>+0.00000*K118*<OLN>*<OLN>+0.33743*K120*<ALKAP>*< !NO3>+0.43039*K121*<ALKEP>*<NO3>+0.00000*K122*<BIOP>*<NO3>+0.02936*K124*<CARBOP !>*<NO3>+0.91850*K125*<OLN>*<NO3> - PPROD(:,23) = +0.96205*TPK%K014(:)*PCONC(:,29)+0.20*TPK%K017(:)*PCONC(:,26)+TP& -&K%K055(:)*PCONC(:,25)*TPK%O3P(:)+0.08173*TPK%K058(:)*PCONC(:,18)*PCONC(:,14)+0& -&.06253*TPK%K065(:)*PCONC(:,25)*PCONC(:,14)+0.07335*TPK%K069(:)*PCONC(:,29)*PCO& -&NC(:,14)+0.05265*TPK%K074(:)*PCONC(:,25)*PCONC(:,5)+0.51468*TPK%K079(:)*PCONC(& -&:,19)*PCONC(:,1)+0.00000*TPK%K080(:)*PCONC(:,20)*PCONC(:,1)+0.15692*TPK%K081(:& -&)*PCONC(:,25)*PCONC(:,1)+0.33144*TPK%K091(:)*PCONC(:,33)*PCONC(:,3)+0.42125*TP& -&K%K092(:)*PCONC(:,34)*PCONC(:,3)+0.00000*TPK%K093(:)*PCONC(:,35)*PCONC(:,3)+0.& -&07368*TPK%K095(:)*PCONC(:,39)*PCONC(:,3)+1.01182*TPK%K096(:)*PCONC(:,40)*PCONC& -&(:,3)+0.56070*TPK%K105(:)*PCONC(:,33)*PCONC(:,32)+0.46413*TPK%K106(:)*PCONC(:,& -&34)*PCONC(:,32)+0.00000*TPK%K107(:)*PCONC(:,35)*PCONC(:,32)+0.08295*TPK%K109(:& -&)*PCONC(:,39)*PCONC(:,32)+0.41524*TPK%K110(:)*PCONC(:,40)*PCONC(:,32)+0.71461*& -&TPK%K111(:)*PCONC(:,33)*PCONC(:,39)+0.68374*TPK%K112(:)*PCONC(:,34)*PCONC(:,39& -&)+0.00000*TPK%K113(:)*PCONC(:,35)*PCONC(:,39)+0.06969*TPK%K115(:)*PCONC(:,39)*& -&PCONC(:,39)+0.42122*TPK%K116(:)*PCONC(:,40)*PCONC(:,39)+0.00000*TPK%K118(:)*PC& -&ONC(:,40)*PCONC(:,40)+0.33743*TPK%K120(:)*PCONC(:,33)*PCONC(:,5)+0.43039*TPK%K& -&121(:)*PCONC(:,34)*PCONC(:,5)+0.00000*TPK%K122(:)*PCONC(:,35)*PCONC(:,5)+0.029& -&36*TPK%K124(:)*PCONC(:,39)*PCONC(:,5)+0.91850*TPK%K125(:)*PCONC(:,40)*PCONC(:,& + PPROD(:,24) = +0.96205*TPK%K014(:)*PCONC(:,30)+0.20*TPK%K017(:)*PCONC(:,27)+TP& +&K%K055(:)*PCONC(:,26)*TPK%O3P(:)+0.08173*TPK%K058(:)*PCONC(:,19)*PCONC(:,15)+0& +&.06253*TPK%K065(:)*PCONC(:,26)*PCONC(:,15)+0.07335*TPK%K069(:)*PCONC(:,30)*PCO& +&NC(:,15)+0.05265*TPK%K074(:)*PCONC(:,26)*PCONC(:,5)+0.51468*TPK%K079(:)*PCONC(& +&:,20)*PCONC(:,1)+0.00000*TPK%K080(:)*PCONC(:,21)*PCONC(:,1)+0.15692*TPK%K081(:& +&)*PCONC(:,26)*PCONC(:,1)+0.33144*TPK%K091(:)*PCONC(:,34)*PCONC(:,3)+0.42125*TP& +&K%K092(:)*PCONC(:,35)*PCONC(:,3)+0.00000*TPK%K093(:)*PCONC(:,36)*PCONC(:,3)+0.& +&07368*TPK%K095(:)*PCONC(:,40)*PCONC(:,3)+1.01182*TPK%K096(:)*PCONC(:,41)*PCONC& +&(:,3)+0.56070*TPK%K105(:)*PCONC(:,34)*PCONC(:,33)+0.46413*TPK%K106(:)*PCONC(:,& +&35)*PCONC(:,33)+0.00000*TPK%K107(:)*PCONC(:,36)*PCONC(:,33)+0.08295*TPK%K109(:& +&)*PCONC(:,40)*PCONC(:,33)+0.41524*TPK%K110(:)*PCONC(:,41)*PCONC(:,33)+0.71461*& +&TPK%K111(:)*PCONC(:,34)*PCONC(:,40)+0.68374*TPK%K112(:)*PCONC(:,35)*PCONC(:,40& +&)+0.00000*TPK%K113(:)*PCONC(:,36)*PCONC(:,40)+0.06969*TPK%K115(:)*PCONC(:,40)*& +&PCONC(:,40)+0.42122*TPK%K116(:)*PCONC(:,41)*PCONC(:,40)+0.00000*TPK%K118(:)*PC& +&ONC(:,41)*PCONC(:,41)+0.33743*TPK%K120(:)*PCONC(:,34)*PCONC(:,5)+0.43039*TPK%K& +&121(:)*PCONC(:,35)*PCONC(:,5)+0.00000*TPK%K122(:)*PCONC(:,36)*PCONC(:,5)+0.029& +&36*TPK%K124(:)*PCONC(:,40)*PCONC(:,5)+0.91850*TPK%K125(:)*PCONC(:,41)*PCONC(:,& &5) !PLOSS(ALD) = +K012+K063*<OH>+K073*<NO3> - PLOSS(:,23) = +TPK%K012(:)+TPK%K063(:)*PCONC(:,14)+TPK%K073(:)*PCONC(:,5) + PLOSS(:,24) = +TPK%K012(:)+TPK%K063(:)*PCONC(:,15)+TPK%K073(:)*PCONC(:,5) ! !PPROD(KET) = +0.80*K017*<ONIT>+0.03498*K058*<ALKA>*<OH>+0.00853*K065*<CARBO>*< !OH>+0.37591*K069*<OP2>*<OH>+0.00632*K074*<CARBO>*<NO3>+0.07377*K079*<ALKE>*<O3 @@ -4405,22 +4447,22 @@ SUBROUTINE SUB2 !<CARBOP>+0.02190*K115*<CARBOP>*<CARBOP>+0.10822*K116*<OLN>*<CARBOP>+0.00000*K1 !18*<OLN>*<OLN>+0.62978*K120*<ALKAP>*<NO3>+0.02051*K121*<ALKEP>*<NO3>+0.00000*K !122*<BIOP>*<NO3>+0.34740*K125*<OLN>*<NO3> - PPROD(:,24) = +0.80*TPK%K017(:)*PCONC(:,26)+0.03498*TPK%K058(:)*PCONC(:,18)*PC& -&ONC(:,14)+0.00853*TPK%K065(:)*PCONC(:,25)*PCONC(:,14)+0.37591*TPK%K069(:)*PCON& -&C(:,29)*PCONC(:,14)+0.00632*TPK%K074(:)*PCONC(:,25)*PCONC(:,5)+0.07377*TPK%K07& -&9(:)*PCONC(:,19)*PCONC(:,1)+0.00000*TPK%K080(:)*PCONC(:,20)*PCONC(:,1)+0.54531& -&*TPK%K091(:)*PCONC(:,33)*PCONC(:,3)+0.05220*TPK%K092(:)*PCONC(:,34)*PCONC(:,3)& -&+0.00000*TPK%K093(:)*PCONC(:,35)*PCONC(:,3)+0.37862*TPK%K096(:)*PCONC(:,40)*PC& -&ONC(:,3)+0.09673*TPK%K105(:)*PCONC(:,33)*PCONC(:,32)+0.03814*TPK%K106(:)*PCONC& -&(:,34)*PCONC(:,32)+0.00000*TPK%K107(:)*PCONC(:,35)*PCONC(:,32)+0.09667*TPK%K11& -&0(:)*PCONC(:,40)*PCONC(:,32)+0.18819*TPK%K111(:)*PCONC(:,33)*PCONC(:,39)+0.065& -&79*TPK%K112(:)*PCONC(:,34)*PCONC(:,39)+0.00000*TPK%K113(:)*PCONC(:,35)*PCONC(:& -&,39)+0.02190*TPK%K115(:)*PCONC(:,39)*PCONC(:,39)+0.10822*TPK%K116(:)*PCONC(:,4& -&0)*PCONC(:,39)+0.00000*TPK%K118(:)*PCONC(:,40)*PCONC(:,40)+0.62978*TPK%K120(:)& -&*PCONC(:,33)*PCONC(:,5)+0.02051*TPK%K121(:)*PCONC(:,34)*PCONC(:,5)+0.00000*TPK& -&%K122(:)*PCONC(:,35)*PCONC(:,5)+0.34740*TPK%K125(:)*PCONC(:,40)*PCONC(:,5) + PPROD(:,25) = +0.80*TPK%K017(:)*PCONC(:,27)+0.03498*TPK%K058(:)*PCONC(:,19)*PC& +&ONC(:,15)+0.00853*TPK%K065(:)*PCONC(:,26)*PCONC(:,15)+0.37591*TPK%K069(:)*PCON& +&C(:,30)*PCONC(:,15)+0.00632*TPK%K074(:)*PCONC(:,26)*PCONC(:,5)+0.07377*TPK%K07& +&9(:)*PCONC(:,20)*PCONC(:,1)+0.00000*TPK%K080(:)*PCONC(:,21)*PCONC(:,1)+0.54531& +&*TPK%K091(:)*PCONC(:,34)*PCONC(:,3)+0.05220*TPK%K092(:)*PCONC(:,35)*PCONC(:,3)& +&+0.00000*TPK%K093(:)*PCONC(:,36)*PCONC(:,3)+0.37862*TPK%K096(:)*PCONC(:,41)*PC& +&ONC(:,3)+0.09673*TPK%K105(:)*PCONC(:,34)*PCONC(:,33)+0.03814*TPK%K106(:)*PCONC& +&(:,35)*PCONC(:,33)+0.00000*TPK%K107(:)*PCONC(:,36)*PCONC(:,33)+0.09667*TPK%K11& +&0(:)*PCONC(:,41)*PCONC(:,33)+0.18819*TPK%K111(:)*PCONC(:,34)*PCONC(:,40)+0.065& +&79*TPK%K112(:)*PCONC(:,35)*PCONC(:,40)+0.00000*TPK%K113(:)*PCONC(:,36)*PCONC(:& +&,40)+0.02190*TPK%K115(:)*PCONC(:,40)*PCONC(:,40)+0.10822*TPK%K116(:)*PCONC(:,4& +&1)*PCONC(:,40)+0.00000*TPK%K118(:)*PCONC(:,41)*PCONC(:,41)+0.62978*TPK%K120(:)& +&*PCONC(:,34)*PCONC(:,5)+0.02051*TPK%K121(:)*PCONC(:,35)*PCONC(:,5)+0.00000*TPK& +&%K122(:)*PCONC(:,36)*PCONC(:,5)+0.34740*TPK%K125(:)*PCONC(:,41)*PCONC(:,5) !PLOSS(KET) = +K015+K064*<OH> - PLOSS(:,24) = +TPK%K015(:)+TPK%K064(:)*PCONC(:,14) + PLOSS(:,25) = +TPK%K015(:)+TPK%K064(:)*PCONC(:,15) ! !PPROD(CARBO) = +0.13255*K054*<BIO>*<O3P>+0.00835*K058*<ALKA>*<OH>+0.16919*K065 !*<CARBO>*<OH>+0.21863*K070*<PAN>*<OH>+0.10530*K074*<CARBO>*<NO3>+0.00000*K076* @@ -4432,74 +4474,64 @@ SUBROUTINE SUB2 !K114*<AROP>*<CARBOP>+0.10777*K115*<CARBOP>*<CARBOP>+0.03531*K120*<ALKAP>*<NO3> !+0.61160*K122*<BIOP>*<NO3>+2.81904*K123*<AROP>*<NO3>+0.03455*K124*<CARBOP>*<NO !3> - PPROD(:,25) = +0.13255*TPK%K054(:)*PCONC(:,20)*TPK%O3P(:)+0.00835*TPK%K058(:)*& -&PCONC(:,18)*PCONC(:,14)+0.16919*TPK%K065(:)*PCONC(:,25)*PCONC(:,14)+0.21863*TP& -&K%K070(:)*PCONC(:,27)*PCONC(:,14)+0.10530*TPK%K074(:)*PCONC(:,25)*PCONC(:,5)+0& -&.00000*TPK%K076(:)*PCONC(:,19)*PCONC(:,5)+0.91741*TPK%K077(:)*PCONC(:,20)*PCON& -&C(:,5)+0.00000*TPK%K079(:)*PCONC(:,19)*PCONC(:,1)+0.39754*TPK%K080(:)*PCONC(:,& -&20)*PCONC(:,1)+1.07583*TPK%K081(:)*PCONC(:,25)*PCONC(:,1)+0.03407*TPK%K091(:)*& -&PCONC(:,33)*PCONC(:,3)+0.45463*TPK%K093(:)*PCONC(:,35)*PCONC(:,3)+2.06993*TPK%& -&K094(:)*PCONC(:,38)*PCONC(:,3)+0.08670*TPK%K095(:)*PCONC(:,39)*PCONC(:,3)+0.07& -&976*TPK%K105(:)*PCONC(:,33)*PCONC(:,32)+0.56064*TPK%K107(:)*PCONC(:,35)*PCONC(& -&:,32)+1.99461*TPK%K108(:)*PCONC(:,38)*PCONC(:,32)+0.15387*TPK%K109(:)*PCONC(:,& -&39)*PCONC(:,32)+0.06954*TPK%K111(:)*PCONC(:,33)*PCONC(:,39)+0.78591*TPK%K113(:& -&)*PCONC(:,35)*PCONC(:,39)+1.99455*TPK%K114(:)*PCONC(:,38)*PCONC(:,39)+0.10777*& -&TPK%K115(:)*PCONC(:,39)*PCONC(:,39)+0.03531*TPK%K120(:)*PCONC(:,33)*PCONC(:,5)& -&+0.61160*TPK%K122(:)*PCONC(:,35)*PCONC(:,5)+2.81904*TPK%K123(:)*PCONC(:,38)*PC& -&ONC(:,5)+0.03455*TPK%K124(:)*PCONC(:,39)*PCONC(:,5) + PPROD(:,26) = +0.13255*TPK%K054(:)*PCONC(:,21)*TPK%O3P(:)+0.00835*TPK%K058(:)*& +&PCONC(:,19)*PCONC(:,15)+0.16919*TPK%K065(:)*PCONC(:,26)*PCONC(:,15)+0.21863*TP& +&K%K070(:)*PCONC(:,28)*PCONC(:,15)+0.10530*TPK%K074(:)*PCONC(:,26)*PCONC(:,5)+0& +&.00000*TPK%K076(:)*PCONC(:,20)*PCONC(:,5)+0.91741*TPK%K077(:)*PCONC(:,21)*PCON& +&C(:,5)+0.00000*TPK%K079(:)*PCONC(:,20)*PCONC(:,1)+0.39754*TPK%K080(:)*PCONC(:,& +&21)*PCONC(:,1)+1.07583*TPK%K081(:)*PCONC(:,26)*PCONC(:,1)+0.03407*TPK%K091(:)*& +&PCONC(:,34)*PCONC(:,3)+0.45463*TPK%K093(:)*PCONC(:,36)*PCONC(:,3)+2.06993*TPK%& +&K094(:)*PCONC(:,39)*PCONC(:,3)+0.08670*TPK%K095(:)*PCONC(:,40)*PCONC(:,3)+0.07& +&976*TPK%K105(:)*PCONC(:,34)*PCONC(:,33)+0.56064*TPK%K107(:)*PCONC(:,36)*PCONC(& +&:,33)+1.99461*TPK%K108(:)*PCONC(:,39)*PCONC(:,33)+0.15387*TPK%K109(:)*PCONC(:,& +&40)*PCONC(:,33)+0.06954*TPK%K111(:)*PCONC(:,34)*PCONC(:,40)+0.78591*TPK%K113(:& +&)*PCONC(:,36)*PCONC(:,40)+1.99455*TPK%K114(:)*PCONC(:,39)*PCONC(:,40)+0.10777*& +&TPK%K115(:)*PCONC(:,40)*PCONC(:,40)+0.03531*TPK%K120(:)*PCONC(:,34)*PCONC(:,5)& +&+0.61160*TPK%K122(:)*PCONC(:,36)*PCONC(:,5)+2.81904*TPK%K123(:)*PCONC(:,39)*PC& +&ONC(:,5)+0.03455*TPK%K124(:)*PCONC(:,40)*PCONC(:,5) !PLOSS(CARBO) = +K016+K055*<O3P>+K065*<OH>+K074*<NO3>+K081*<O3> - PLOSS(:,25) = +TPK%K016(:)+TPK%K055(:)*TPK%O3P(:)+TPK%K065(:)*PCONC(:,14)+TPK%& + PLOSS(:,26) = +TPK%K016(:)+TPK%K055(:)*TPK%O3P(:)+TPK%K065(:)*PCONC(:,15)+TPK%& &K074(:)*PCONC(:,5)+TPK%K081(:)*PCONC(:,1) ! !PPROD(ONIT) = +0.60*K078*<PAN>*<NO3>+K083*<PHO>*<NO2>+0.08459*K091*<ALKAP>*<NO !>+0.15300*K093*<BIOP>*<NO>+0.04885*K094*<AROP>*<NO>+0.18401*K096*<OLN>*<NO>+K1 !03*<OLN>*<HO2>+0.67560*K110*<OLN>*<MO2>+0.66562*K116*<OLN>*<CARBOP>+2.00*K117* !<OLN>*<OLN>+0.00000*K118*<OLN>*<OLN>+0.25928*K125*<OLN>*<NO3> - PPROD(:,26) = +0.60*TPK%K078(:)*PCONC(:,27)*PCONC(:,5)+TPK%K083(:)*PCONC(:,36)& -&*PCONC(:,4)+0.08459*TPK%K091(:)*PCONC(:,33)*PCONC(:,3)+0.15300*TPK%K093(:)*PCO& -&NC(:,35)*PCONC(:,3)+0.04885*TPK%K094(:)*PCONC(:,38)*PCONC(:,3)+0.18401*TPK%K09& -&6(:)*PCONC(:,40)*PCONC(:,3)+TPK%K103(:)*PCONC(:,40)*PCONC(:,15)+0.67560*TPK%K1& -&10(:)*PCONC(:,40)*PCONC(:,32)+0.66562*TPK%K116(:)*PCONC(:,40)*PCONC(:,39)+2.00& -&*TPK%K117(:)*PCONC(:,40)*PCONC(:,40)+0.00000*TPK%K118(:)*PCONC(:,40)*PCONC(:,4& -&0)+0.25928*TPK%K125(:)*PCONC(:,40)*PCONC(:,5) + PPROD(:,27) = +0.60*TPK%K078(:)*PCONC(:,28)*PCONC(:,5)+TPK%K083(:)*PCONC(:,37)& +&*PCONC(:,4)+0.08459*TPK%K091(:)*PCONC(:,34)*PCONC(:,3)+0.15300*TPK%K093(:)*PCO& +&NC(:,36)*PCONC(:,3)+0.04885*TPK%K094(:)*PCONC(:,39)*PCONC(:,3)+0.18401*TPK%K09& +&6(:)*PCONC(:,41)*PCONC(:,3)+TPK%K103(:)*PCONC(:,41)*PCONC(:,16)+0.67560*TPK%K1& +&10(:)*PCONC(:,41)*PCONC(:,33)+0.66562*TPK%K116(:)*PCONC(:,41)*PCONC(:,40)+2.00& +&*TPK%K117(:)*PCONC(:,41)*PCONC(:,41)+0.00000*TPK%K118(:)*PCONC(:,41)*PCONC(:,4& +&1)+0.25928*TPK%K125(:)*PCONC(:,41)*PCONC(:,5) !PLOSS(ONIT) = +K017+K071*<OH> - PLOSS(:,26) = +TPK%K017(:)+TPK%K071(:)*PCONC(:,14) + PLOSS(:,27) = +TPK%K017(:)+TPK%K071(:)*PCONC(:,15) ! !PPROD(PAN) = +0.28107*K070*<PAN>*<OH>+0.40000*K078*<PAN>*<NO3>+0.30000*K082*<P !AN>*<O3>+1.00000*K088*<CARBOP>*<NO2> - PPROD(:,27) = +0.28107*TPK%K070(:)*PCONC(:,27)*PCONC(:,14)+0.40000*TPK%K078(:)& -&*PCONC(:,27)*PCONC(:,5)+0.30000*TPK%K082(:)*PCONC(:,27)*PCONC(:,1)+1.00000*TPK& -&%K088(:)*PCONC(:,39)*PCONC(:,4) + PPROD(:,28) = +0.28107*TPK%K070(:)*PCONC(:,28)*PCONC(:,15)+0.40000*TPK%K078(:)& +&*PCONC(:,28)*PCONC(:,5)+0.30000*TPK%K082(:)*PCONC(:,28)*PCONC(:,1)+1.00000*TPK& +&%K088(:)*PCONC(:,40)*PCONC(:,4) !PLOSS(PAN) = +K070*<OH>+K078*<NO3>+K082*<O3>+K089 - PLOSS(:,27) = +TPK%K070(:)*PCONC(:,14)+TPK%K078(:)*PCONC(:,5)+TPK%K082(:)*PCON& + PLOSS(:,28) = +TPK%K070(:)*PCONC(:,15)+TPK%K078(:)*PCONC(:,5)+TPK%K082(:)*PCON& &C(:,1)+TPK%K089(:) ! !PPROD(OP1) = +K097*<MO2>*<HO2>+KTC40*<WC_OP1>+KTR40*<WR_OP1> - PPROD(:,28) = +TPK%K097(:)*PCONC(:,32)*PCONC(:,15)+TPK%KTC40(:)*PCONC(:,61)+TP& -&K%KTR40(:)*PCONC(:,86) + PPROD(:,29) = +TPK%K097(:)*PCONC(:,33)*PCONC(:,16)+TPK%KTC40(:)*PCONC(:,62)+TP& +&K%KTR40(:)*PCONC(:,87) !PLOSS(OP1) = +K013+K068*<OH>+KTC20+KTR20 - PLOSS(:,28) = +TPK%K013(:)+TPK%K068(:)*PCONC(:,14)+TPK%KTC20(:)+TPK%KTR20(:) + PLOSS(:,29) = +TPK%K013(:)+TPK%K068(:)*PCONC(:,15)+TPK%KTC20(:)+TPK%KTR20(:) ! !PPROD(OP2) = +0.10149*K081*<CARBO>*<O3>+1.00524*K098*<ALKAP>*<HO2>+1.00524*K09 !9*<ALKEP>*<HO2>+1.00524*K0100*<BIOP>*<HO2>+1.00524*K0101*<AROP>*<HO2>+0.80904* !K0102*<CARBOP>*<HO2>+1.00524*K126*<XO2>*<HO2> - PPROD(:,29) = +0.10149*TPK%K081(:)*PCONC(:,25)*PCONC(:,1)+1.00524*TPK%K098(:)*& -&PCONC(:,33)*PCONC(:,15)+1.00524*TPK%K099(:)*PCONC(:,34)*PCONC(:,15)+1.00524*TP& -&K%K0100(:)*PCONC(:,35)*PCONC(:,15)+1.00524*TPK%K0101(:)*PCONC(:,38)*PCONC(:,15& -&)+0.80904*TPK%K0102(:)*PCONC(:,39)*PCONC(:,15)+1.00524*TPK%K126(:)*PCONC(:,41)& -&*PCONC(:,15) + PPROD(:,30) = +0.10149*TPK%K081(:)*PCONC(:,26)*PCONC(:,1)+1.00524*TPK%K098(:)*& +&PCONC(:,34)*PCONC(:,16)+1.00524*TPK%K099(:)*PCONC(:,35)*PCONC(:,16)+1.00524*TP& +&K%K0100(:)*PCONC(:,36)*PCONC(:,16)+1.00524*TPK%K0101(:)*PCONC(:,39)*PCONC(:,16& +&)+0.80904*TPK%K0102(:)*PCONC(:,40)*PCONC(:,16)+1.00524*TPK%K126(:)*PCONC(:,42)& +&*PCONC(:,16) !PLOSS(OP2) = +K014+K069*<OH> - PLOSS(:,29) = +TPK%K014(:)+TPK%K069(:)*PCONC(:,14) -! -!PPROD(ORA1) = +0.00878*K058*<ALKA>*<OH>+0.15343*K079*<ALKE>*<O3>+0.15000*K080* -!<BIO>*<O3>+0.10788*K081*<CARBO>*<O3>+0.11*K082*<PAN>*<O3>+KTC37*<WC_ORA1>+KTR3 -!7*<WR_ORA1> - PPROD(:,30) = +0.00878*TPK%K058(:)*PCONC(:,18)*PCONC(:,14)+0.15343*TPK%K079(:)& -&*PCONC(:,19)*PCONC(:,1)+0.15000*TPK%K080(:)*PCONC(:,20)*PCONC(:,1)+0.10788*TPK& -&%K081(:)*PCONC(:,25)*PCONC(:,1)+0.11*TPK%K082(:)*PCONC(:,27)*PCONC(:,1)+TPK%KT& -&C37(:)*PCONC(:,58)+TPK%KTR37(:)*PCONC(:,83) -!PLOSS(ORA1) = +K066*<OH>+KTC17+KTR17 - PLOSS(:,30) = +TPK%K066(:)*PCONC(:,14)+TPK%KTC17(:)+TPK%KTR17(:) + PLOSS(:,30) = +TPK%K014(:)+TPK%K069(:)*PCONC(:,15) ! RETURN END SUBROUTINE SUB2 @@ -4509,20 +4541,30 @@ SUBROUTINE SUB3 !Indices 31 a 40 ! ! +!PPROD(ORA1) = +0.00878*K058*<ALKA>*<OH>+0.15343*K079*<ALKE>*<O3>+0.15000*K080* +!<BIO>*<O3>+0.10788*K081*<CARBO>*<O3>+0.11*K082*<PAN>*<O3>+KTC37*<WC_ORA1>+KTR3 +!7*<WR_ORA1> + PPROD(:,31) = +0.00878*TPK%K058(:)*PCONC(:,19)*PCONC(:,15)+0.15343*TPK%K079(:)& +&*PCONC(:,20)*PCONC(:,1)+0.15000*TPK%K080(:)*PCONC(:,21)*PCONC(:,1)+0.10788*TPK& +&%K081(:)*PCONC(:,26)*PCONC(:,1)+0.11*TPK%K082(:)*PCONC(:,28)*PCONC(:,1)+TPK%KT& +&C37(:)*PCONC(:,59)+TPK%KTR37(:)*PCONC(:,84) +!PLOSS(ORA1) = +K066*<OH>+KTC17+KTR17 + PLOSS(:,31) = +TPK%K066(:)*PCONC(:,15)+TPK%KTC17(:)+TPK%KTR17(:) +! !PPROD(ORA2) = +0.08143*K079*<ALKE>*<O3>+0.00000*K080*<BIO>*<O3>+0.20595*K081*< !CARBO>*<O3>+0.17307*K0102*<CARBOP>*<HO2>+0.13684*K109*<CARBOP>*<MO2>+0.49810*K !111*<ALKAP>*<CARBOP>+0.49922*K112*<ALKEP>*<CARBOP>+0.49400*K113*<BIOP>*<CARBOP !>+0.09955*K115*<CARBOP>*<CARBOP>+0.48963*K116*<OLN>*<CARBOP>+KTC38*<WC_ORA2>+K !TR38*<WR_ORA2> - PPROD(:,31) = +0.08143*TPK%K079(:)*PCONC(:,19)*PCONC(:,1)+0.00000*TPK%K080(:)*& -&PCONC(:,20)*PCONC(:,1)+0.20595*TPK%K081(:)*PCONC(:,25)*PCONC(:,1)+0.17307*TPK%& -&K0102(:)*PCONC(:,39)*PCONC(:,15)+0.13684*TPK%K109(:)*PCONC(:,39)*PCONC(:,32)+0& -&.49810*TPK%K111(:)*PCONC(:,33)*PCONC(:,39)+0.49922*TPK%K112(:)*PCONC(:,34)*PCO& -&NC(:,39)+0.49400*TPK%K113(:)*PCONC(:,35)*PCONC(:,39)+0.09955*TPK%K115(:)*PCONC& -&(:,39)*PCONC(:,39)+0.48963*TPK%K116(:)*PCONC(:,40)*PCONC(:,39)+TPK%KTC38(:)*PC& -&ONC(:,59)+TPK%KTR38(:)*PCONC(:,84) + PPROD(:,32) = +0.08143*TPK%K079(:)*PCONC(:,20)*PCONC(:,1)+0.00000*TPK%K080(:)*& +&PCONC(:,21)*PCONC(:,1)+0.20595*TPK%K081(:)*PCONC(:,26)*PCONC(:,1)+0.17307*TPK%& +&K0102(:)*PCONC(:,40)*PCONC(:,16)+0.13684*TPK%K109(:)*PCONC(:,40)*PCONC(:,33)+0& +&.49810*TPK%K111(:)*PCONC(:,34)*PCONC(:,40)+0.49922*TPK%K112(:)*PCONC(:,35)*PCO& +&NC(:,40)+0.49400*TPK%K113(:)*PCONC(:,36)*PCONC(:,40)+0.09955*TPK%K115(:)*PCONC& +&(:,40)*PCONC(:,40)+0.48963*TPK%K116(:)*PCONC(:,41)*PCONC(:,40)+TPK%KTC38(:)*PC& +&ONC(:,60)+TPK%KTR38(:)*PCONC(:,85) !PLOSS(ORA2) = +K067*<OH>+KTC18+KTR18 - PLOSS(:,31) = +TPK%K067(:)*PCONC(:,14)+TPK%KTC18(:)+TPK%KTR18(:) + PLOSS(:,32) = +TPK%K067(:)*PCONC(:,15)+TPK%KTC18(:)+TPK%KTR18(:) ! !PPROD(MO2) = +K012*<ALD>+0.03795*K014*<OP2>+K056*<CH4>*<OH>+0.65*K068*<OP1>*<O !H>+0.13966*K079*<ALKE>*<O3>+0.03000*K080*<BIO>*<O3>+0.09016*K091*<ALKAP>*<NO>+ @@ -4531,71 +4573,71 @@ SUBROUTINE SUB3 !BIOP>*<CARBOP>+K114*<AROP>*<CARBOP>+1.66702*K115*<CARBOP>*<CARBOP>+0.51037*K11 !6*<OLN>*<CARBOP>+0.09731*K120*<ALKAP>*<NO3>+0.91910*K124*<CARBOP>*<NO3>+K128*< !XO2>*<CARBOP>+KTC39*<WC_MO2>+KTR39*<WR_MO2> - PPROD(:,32) = +TPK%K012(:)*PCONC(:,23)+0.03795*TPK%K014(:)*PCONC(:,29)+TPK%K05& -&6(:)*PCONC(:,16)*PCONC(:,14)+0.65*TPK%K068(:)*PCONC(:,28)*PCONC(:,14)+0.13966*& -&TPK%K079(:)*PCONC(:,19)*PCONC(:,1)+0.03000*TPK%K080(:)*PCONC(:,20)*PCONC(:,1)+& -&0.09016*TPK%K091(:)*PCONC(:,33)*PCONC(:,3)+0.78134*TPK%K095(:)*PCONC(:,39)*PCO& -&NC(:,3)+0.01390*TPK%K105(:)*PCONC(:,33)*PCONC(:,32)+0.56031*TPK%K109(:)*PCONC(& -&:,39)*PCONC(:,32)+0.51480*TPK%K111(:)*PCONC(:,33)*PCONC(:,39)+0.50078*TPK%K112& -&(:)*PCONC(:,34)*PCONC(:,39)+0.50600*TPK%K113(:)*PCONC(:,35)*PCONC(:,39)+TPK%K1& -&14(:)*PCONC(:,38)*PCONC(:,39)+1.66702*TPK%K115(:)*PCONC(:,39)*PCONC(:,39)+0.51& -&037*TPK%K116(:)*PCONC(:,40)*PCONC(:,39)+0.09731*TPK%K120(:)*PCONC(:,33)*PCONC(& -&:,5)+0.91910*TPK%K124(:)*PCONC(:,39)*PCONC(:,5)+TPK%K128(:)*PCONC(:,41)*PCONC(& -&:,39)+TPK%KTC39(:)*PCONC(:,60)+TPK%KTR39(:)*PCONC(:,85) + PPROD(:,33) = +TPK%K012(:)*PCONC(:,24)+0.03795*TPK%K014(:)*PCONC(:,30)+TPK%K05& +&6(:)*PCONC(:,17)*PCONC(:,15)+0.65*TPK%K068(:)*PCONC(:,29)*PCONC(:,15)+0.13966*& +&TPK%K079(:)*PCONC(:,20)*PCONC(:,1)+0.03000*TPK%K080(:)*PCONC(:,21)*PCONC(:,1)+& +&0.09016*TPK%K091(:)*PCONC(:,34)*PCONC(:,3)+0.78134*TPK%K095(:)*PCONC(:,40)*PCO& +&NC(:,3)+0.01390*TPK%K105(:)*PCONC(:,34)*PCONC(:,33)+0.56031*TPK%K109(:)*PCONC(& +&:,40)*PCONC(:,33)+0.51480*TPK%K111(:)*PCONC(:,34)*PCONC(:,40)+0.50078*TPK%K112& +&(:)*PCONC(:,35)*PCONC(:,40)+0.50600*TPK%K113(:)*PCONC(:,36)*PCONC(:,40)+TPK%K1& +&14(:)*PCONC(:,39)*PCONC(:,40)+1.66702*TPK%K115(:)*PCONC(:,40)*PCONC(:,40)+0.51& +&037*TPK%K116(:)*PCONC(:,41)*PCONC(:,40)+0.09731*TPK%K120(:)*PCONC(:,34)*PCONC(& +&:,5)+0.91910*TPK%K124(:)*PCONC(:,40)*PCONC(:,5)+TPK%K128(:)*PCONC(:,42)*PCONC(& +&:,40)+TPK%KTC39(:)*PCONC(:,61)+TPK%KTR39(:)*PCONC(:,86) !PLOSS(MO2) = +K090*<NO>+K097*<HO2>+K104*<MO2>+K104*<MO2>+K105*<ALKAP>+K106*<AL !KEP>+K107*<BIOP>+K108*<AROP>+K109*<CARBOP>+K110*<OLN>+K119*<NO3>+K127*<XO2>+KT !C19+KTR19 - PLOSS(:,32) = +TPK%K090(:)*PCONC(:,3)+TPK%K097(:)*PCONC(:,15)+TPK%K104(:)*PCON& -&C(:,32)+TPK%K104(:)*PCONC(:,32)+TPK%K105(:)*PCONC(:,33)+TPK%K106(:)*PCONC(:,34& -&)+TPK%K107(:)*PCONC(:,35)+TPK%K108(:)*PCONC(:,38)+TPK%K109(:)*PCONC(:,39)+TPK%& -&K110(:)*PCONC(:,40)+TPK%K119(:)*PCONC(:,5)+TPK%K127(:)*PCONC(:,41)+TPK%KTC19(:& + PLOSS(:,33) = +TPK%K090(:)*PCONC(:,3)+TPK%K097(:)*PCONC(:,16)+TPK%K104(:)*PCON& +&C(:,33)+TPK%K104(:)*PCONC(:,33)+TPK%K105(:)*PCONC(:,34)+TPK%K106(:)*PCONC(:,35& +&)+TPK%K107(:)*PCONC(:,36)+TPK%K108(:)*PCONC(:,39)+TPK%K109(:)*PCONC(:,40)+TPK%& +&K110(:)*PCONC(:,41)+TPK%K119(:)*PCONC(:,5)+TPK%K127(:)*PCONC(:,42)+TPK%KTC19(:& &)+TPK%KTR19(:) ! !PPROD(ALKAP) = +1.00000*K015*<KET>+K057*<ETH>*<OH>+0.87811*K058*<ALKA>*<OH>+0. !40341*K069*<OP2>*<OH>+1.00000*K071*<ONIT>*<OH>+0.09815*K079*<ALKE>*<O3>+0.0000 !0*K080*<BIO>*<O3>+0.08187*K091*<ALKAP>*<NO>+0.00385*K105*<ALKAP>*<MO2>+0.00828 !*K111*<ALKAP>*<CARBOP>+0.08994*K120*<ALKAP>*<NO3> - PPROD(:,33) = +1.00000*TPK%K015(:)*PCONC(:,24)+TPK%K057(:)*PCONC(:,17)*PCONC(:& -&,14)+0.87811*TPK%K058(:)*PCONC(:,18)*PCONC(:,14)+0.40341*TPK%K069(:)*PCONC(:,2& -&9)*PCONC(:,14)+1.00000*TPK%K071(:)*PCONC(:,26)*PCONC(:,14)+0.09815*TPK%K079(:)& -&*PCONC(:,19)*PCONC(:,1)+0.00000*TPK%K080(:)*PCONC(:,20)*PCONC(:,1)+0.08187*TPK& -&%K091(:)*PCONC(:,33)*PCONC(:,3)+0.00385*TPK%K105(:)*PCONC(:,33)*PCONC(:,32)+0.& -&00828*TPK%K111(:)*PCONC(:,33)*PCONC(:,39)+0.08994*TPK%K120(:)*PCONC(:,33)*PCON& + PPROD(:,34) = +1.00000*TPK%K015(:)*PCONC(:,25)+TPK%K057(:)*PCONC(:,18)*PCONC(:& +&,15)+0.87811*TPK%K058(:)*PCONC(:,19)*PCONC(:,15)+0.40341*TPK%K069(:)*PCONC(:,3& +&0)*PCONC(:,15)+1.00000*TPK%K071(:)*PCONC(:,27)*PCONC(:,15)+0.09815*TPK%K079(:)& +&*PCONC(:,20)*PCONC(:,1)+0.00000*TPK%K080(:)*PCONC(:,21)*PCONC(:,1)+0.08187*TPK& +&%K091(:)*PCONC(:,34)*PCONC(:,3)+0.00385*TPK%K105(:)*PCONC(:,34)*PCONC(:,33)+0.& +&00828*TPK%K111(:)*PCONC(:,34)*PCONC(:,40)+0.08994*TPK%K120(:)*PCONC(:,34)*PCON& &C(:,5) !PLOSS(ALKAP) = +K091*<NO>+K098*<HO2>+K105*<MO2>+K111*<CARBOP>+K120*<NO3> - PLOSS(:,33) = +TPK%K091(:)*PCONC(:,3)+TPK%K098(:)*PCONC(:,15)+TPK%K105(:)*PCON& -&C(:,32)+TPK%K111(:)*PCONC(:,39)+TPK%K120(:)*PCONC(:,5) + PLOSS(:,34) = +TPK%K091(:)*PCONC(:,3)+TPK%K098(:)*PCONC(:,16)+TPK%K105(:)*PCON& +&C(:,33)+TPK%K111(:)*PCONC(:,40)+TPK%K120(:)*PCONC(:,5) ! !PPROD(ALKEP) = +1.02529*K059*<ALKE>*<OH> - PPROD(:,34) = +1.02529*TPK%K059(:)*PCONC(:,19)*PCONC(:,14) + PPROD(:,35) = +1.02529*TPK%K059(:)*PCONC(:,20)*PCONC(:,15) !PLOSS(ALKEP) = +K092*<NO>+K099*<HO2>+K106*<MO2>+K112*<CARBOP>+K121*<NO3> - PLOSS(:,34) = +TPK%K092(:)*PCONC(:,3)+TPK%K099(:)*PCONC(:,15)+TPK%K106(:)*PCON& -&C(:,32)+TPK%K112(:)*PCONC(:,39)+TPK%K121(:)*PCONC(:,5) + PLOSS(:,35) = +TPK%K092(:)*PCONC(:,3)+TPK%K099(:)*PCONC(:,16)+TPK%K106(:)*PCON& +&C(:,33)+TPK%K112(:)*PCONC(:,40)+TPK%K121(:)*PCONC(:,5) ! !PPROD(BIOP) = +0.00000*K059*<ALKE>*<OH>+1.00000*K060*<BIO>*<OH> - PPROD(:,35) = +0.00000*TPK%K059(:)*PCONC(:,19)*PCONC(:,14)+1.00000*TPK%K060(:)& -&*PCONC(:,20)*PCONC(:,14) + PPROD(:,36) = +0.00000*TPK%K059(:)*PCONC(:,20)*PCONC(:,15)+1.00000*TPK%K060(:)& +&*PCONC(:,21)*PCONC(:,15) !PLOSS(BIOP) = +K093*<NO>+K0100*<HO2>+K107*<MO2>+K113*<CARBOP>+K122*<NO3> - PLOSS(:,35) = +TPK%K093(:)*PCONC(:,3)+TPK%K0100(:)*PCONC(:,15)+TPK%K107(:)*PCO& -&NC(:,32)+TPK%K113(:)*PCONC(:,39)+TPK%K122(:)*PCONC(:,5) + PLOSS(:,36) = +TPK%K093(:)*PCONC(:,3)+TPK%K0100(:)*PCONC(:,16)+TPK%K107(:)*PCO& +&NC(:,33)+TPK%K113(:)*PCONC(:,40)+TPK%K122(:)*PCONC(:,5) ! !PPROD(PHO) = +0.00276*K061*<ARO>*<OH>+K075*<ARO>*<NO3> - PPROD(:,36) = +0.00276*TPK%K061(:)*PCONC(:,21)*PCONC(:,14)+TPK%K075(:)*PCONC(:& -&,21)*PCONC(:,5) + PPROD(:,37) = +0.00276*TPK%K061(:)*PCONC(:,22)*PCONC(:,15)+TPK%K075(:)*PCONC(:& +&,22)*PCONC(:,5) !PLOSS(PHO) = +K083*<NO2>+K084*<HO2> - PLOSS(:,36) = +TPK%K083(:)*PCONC(:,4)+TPK%K084(:)*PCONC(:,15) + PLOSS(:,37) = +TPK%K083(:)*PCONC(:,4)+TPK%K084(:)*PCONC(:,16) ! !PPROD(ADD) = +0.93968*K061*<ARO>*<OH> - PPROD(:,37) = +0.93968*TPK%K061(:)*PCONC(:,21)*PCONC(:,14) + PPROD(:,38) = +0.93968*TPK%K061(:)*PCONC(:,22)*PCONC(:,15) !PLOSS(ADD) = +K085*<NO2>+K086*<O2>+K087*<O3> - PLOSS(:,37) = +TPK%K085(:)*PCONC(:,4)+TPK%K086(:)*TPK%O2(:)+TPK%K087(:)*PCONC(& + PLOSS(:,38) = +TPK%K085(:)*PCONC(:,4)+TPK%K086(:)*TPK%O2(:)+TPK%K087(:)*PCONC(& &:,1) ! !PPROD(AROP) = +0.98*K086*<ADD>*<O2> - PPROD(:,38) = +0.98*TPK%K086(:)*PCONC(:,37)*TPK%O2(:) + PPROD(:,39) = +0.98*TPK%K086(:)*PCONC(:,38)*TPK%O2(:) !PLOSS(AROP) = +K094*<NO>+K0101*<HO2>+K108*<MO2>+K114*<CARBOP>+K123*<NO3> - PLOSS(:,38) = +TPK%K094(:)*PCONC(:,3)+TPK%K0101(:)*PCONC(:,15)+TPK%K108(:)*PCO& -&NC(:,32)+TPK%K114(:)*PCONC(:,39)+TPK%K123(:)*PCONC(:,5) + PLOSS(:,39) = +TPK%K094(:)*PCONC(:,3)+TPK%K0101(:)*PCONC(:,16)+TPK%K108(:)*PCO& +&NC(:,33)+TPK%K114(:)*PCONC(:,40)+TPK%K123(:)*PCONC(:,5) ! !PPROD(CARBOP) = +1.00000*K015*<KET>+0.69622*K016*<CARBO>+1.00000*K063*<ALD>*<O !H>+1.00000*K064*<KET>*<OH>+0.51419*K065*<CARBO>*<OH>+0.05413*K069*<OP2>*<OH>+1 @@ -4603,34 +4645,24 @@ SUBROUTINE SUB3 !17000*K080*<BIO>*<O3>+0.27460*K081*<CARBO>*<O3>+0.70000*K082*<PAN>*<O3>+1.0000 !0*K089*<PAN>+0.09532*K095*<CARBOP>*<NO>+0.05954*K109*<CARBOP>*<MO2>+0.05821*K1 !15*<CARBOP>*<CARBOP>+0.03175*K124*<CARBOP>*<NO3> - PPROD(:,39) = +1.00000*TPK%K015(:)*PCONC(:,24)+0.69622*TPK%K016(:)*PCONC(:,25)& -&+1.00000*TPK%K063(:)*PCONC(:,23)*PCONC(:,14)+1.00000*TPK%K064(:)*PCONC(:,24)*P& -&CONC(:,14)+0.51419*TPK%K065(:)*PCONC(:,25)*PCONC(:,14)+0.05413*TPK%K069(:)*PCO& -&NC(:,29)*PCONC(:,14)+1.00000*TPK%K073(:)*PCONC(:,23)*PCONC(:,5)+0.38881*TPK%K0& -&74(:)*PCONC(:,25)*PCONC(:,5)+0.05705*TPK%K079(:)*PCONC(:,19)*PCONC(:,1)+0.1700& -&0*TPK%K080(:)*PCONC(:,20)*PCONC(:,1)+0.27460*TPK%K081(:)*PCONC(:,25)*PCONC(:,1& -&)+0.70000*TPK%K082(:)*PCONC(:,27)*PCONC(:,1)+1.00000*TPK%K089(:)*PCONC(:,27)+0& -&.09532*TPK%K095(:)*PCONC(:,39)*PCONC(:,3)+0.05954*TPK%K109(:)*PCONC(:,39)*PCON& -&C(:,32)+0.05821*TPK%K115(:)*PCONC(:,39)*PCONC(:,39)+0.03175*TPK%K124(:)*PCONC(& -&:,39)*PCONC(:,5) + PPROD(:,40) = +1.00000*TPK%K015(:)*PCONC(:,25)+0.69622*TPK%K016(:)*PCONC(:,26)& +&+1.00000*TPK%K063(:)*PCONC(:,24)*PCONC(:,15)+1.00000*TPK%K064(:)*PCONC(:,25)*P& +&CONC(:,15)+0.51419*TPK%K065(:)*PCONC(:,26)*PCONC(:,15)+0.05413*TPK%K069(:)*PCO& +&NC(:,30)*PCONC(:,15)+1.00000*TPK%K073(:)*PCONC(:,24)*PCONC(:,5)+0.38881*TPK%K0& +&74(:)*PCONC(:,26)*PCONC(:,5)+0.05705*TPK%K079(:)*PCONC(:,20)*PCONC(:,1)+0.1700& +&0*TPK%K080(:)*PCONC(:,21)*PCONC(:,1)+0.27460*TPK%K081(:)*PCONC(:,26)*PCONC(:,1& +&)+0.70000*TPK%K082(:)*PCONC(:,28)*PCONC(:,1)+1.00000*TPK%K089(:)*PCONC(:,28)+0& +&.09532*TPK%K095(:)*PCONC(:,40)*PCONC(:,3)+0.05954*TPK%K109(:)*PCONC(:,40)*PCON& +&C(:,33)+0.05821*TPK%K115(:)*PCONC(:,40)*PCONC(:,40)+0.03175*TPK%K124(:)*PCONC(& +&:,40)*PCONC(:,5) !PLOSS(CARBOP) = +K088*<NO2>+K095*<NO>+K0102*<HO2>+K109*<MO2>+K111*<ALKAP>+K112 !*<ALKEP>+K113*<BIOP>+K114*<AROP>+K115*<CARBOP>+K115*<CARBOP>+K116*<OLN>+K124*< !NO3>+K128*<XO2> - PLOSS(:,39) = +TPK%K088(:)*PCONC(:,4)+TPK%K095(:)*PCONC(:,3)+TPK%K0102(:)*PCON& -&C(:,15)+TPK%K109(:)*PCONC(:,32)+TPK%K111(:)*PCONC(:,33)+TPK%K112(:)*PCONC(:,34& -&)+TPK%K113(:)*PCONC(:,35)+TPK%K114(:)*PCONC(:,38)+TPK%K115(:)*PCONC(:,39)+TPK%& -&K115(:)*PCONC(:,39)+TPK%K116(:)*PCONC(:,40)+TPK%K124(:)*PCONC(:,5)+TPK%K128(:)& -&*PCONC(:,41) -! -!PPROD(OLN) = +0.00000*K074*<CARBO>*<NO3>+0.93768*K076*<ALKE>*<NO3>+1.00000*K07 -!7*<BIO>*<NO3> - PPROD(:,40) = +0.00000*TPK%K074(:)*PCONC(:,25)*PCONC(:,5)+0.93768*TPK%K076(:)*& -&PCONC(:,19)*PCONC(:,5)+1.00000*TPK%K077(:)*PCONC(:,20)*PCONC(:,5) -!PLOSS(OLN) = +K096*<NO>+K103*<HO2>+K110*<MO2>+K116*<CARBOP>+K117*<OLN>+K117*<O -!LN>+K118*<OLN>+K118*<OLN>+K125*<NO3> - PLOSS(:,40) = +TPK%K096(:)*PCONC(:,3)+TPK%K103(:)*PCONC(:,15)+TPK%K110(:)*PCON& -&C(:,32)+TPK%K116(:)*PCONC(:,39)+TPK%K117(:)*PCONC(:,40)+TPK%K117(:)*PCONC(:,40& -&)+TPK%K118(:)*PCONC(:,40)+TPK%K118(:)*PCONC(:,40)+TPK%K125(:)*PCONC(:,5) + PLOSS(:,40) = +TPK%K088(:)*PCONC(:,4)+TPK%K095(:)*PCONC(:,3)+TPK%K0102(:)*PCON& +&C(:,16)+TPK%K109(:)*PCONC(:,33)+TPK%K111(:)*PCONC(:,34)+TPK%K112(:)*PCONC(:,35& +&)+TPK%K113(:)*PCONC(:,36)+TPK%K114(:)*PCONC(:,39)+TPK%K115(:)*PCONC(:,40)+TPK%& +&K115(:)*PCONC(:,40)+TPK%K116(:)*PCONC(:,41)+TPK%K124(:)*PCONC(:,5)+TPK%K128(:)& +&*PCONC(:,42) ! RETURN END SUBROUTINE SUB3 @@ -4640,79 +4672,84 @@ SUBROUTINE SUB4 !Indices 41 a 50 ! ! +!PPROD(OLN) = +0.00000*K074*<CARBO>*<NO3>+0.93768*K076*<ALKE>*<NO3>+1.00000*K07 +!7*<BIO>*<NO3> + PPROD(:,41) = +0.00000*TPK%K074(:)*PCONC(:,26)*PCONC(:,5)+0.93768*TPK%K076(:)*& +&PCONC(:,20)*PCONC(:,5)+1.00000*TPK%K077(:)*PCONC(:,21)*PCONC(:,5) +!PLOSS(OLN) = +K096*<NO>+K103*<HO2>+K110*<MO2>+K116*<CARBOP>+K117*<OLN>+K117*<O +!LN>+K118*<OLN>+K118*<OLN>+K125*<NO3> + PLOSS(:,41) = +TPK%K096(:)*PCONC(:,3)+TPK%K103(:)*PCONC(:,16)+TPK%K110(:)*PCON& +&C(:,33)+TPK%K116(:)*PCONC(:,40)+TPK%K117(:)*PCONC(:,41)+TPK%K117(:)*PCONC(:,41& +&)+TPK%K118(:)*PCONC(:,41)+TPK%K118(:)*PCONC(:,41)+TPK%K125(:)*PCONC(:,5) +! !PPROD(XO2) = +0.15*K054*<BIO>*<O3P>+0.10318*K061*<ARO>*<OH>+0.10162*K065*<CARB !O>*<OH>+0.09333*K069*<OP2>*<OH>+K070*<PAN>*<OH>+0.10530*K074*<CARBO>*<NO3>+K07 !8*<PAN>*<NO3>+0.00000*K079*<ALKE>*<O3>+0.13000*K080*<BIO>*<O3>+0.13007*K091*<A !LKAP>*<NO>+0.02563*K095*<CARBOP>*<NO>+0.13370*K105*<ALKAP>*<MO2>+0.02212*K109* !<CARBOP>*<MO2>+0.11306*K111*<ALKAP>*<CARBOP>+0.01593*K115*<CARBOP>*<CARBOP>+0. !16271*K120*<ALKAP>*<NO3>+0.01021*K124*<CARBOP>*<NO3> - PPROD(:,41) = +0.15*TPK%K054(:)*PCONC(:,20)*TPK%O3P(:)+0.10318*TPK%K061(:)*PCO& -&NC(:,21)*PCONC(:,14)+0.10162*TPK%K065(:)*PCONC(:,25)*PCONC(:,14)+0.09333*TPK%K& -&069(:)*PCONC(:,29)*PCONC(:,14)+TPK%K070(:)*PCONC(:,27)*PCONC(:,14)+0.10530*TPK& -&%K074(:)*PCONC(:,25)*PCONC(:,5)+TPK%K078(:)*PCONC(:,27)*PCONC(:,5)+0.00000*TPK& -&%K079(:)*PCONC(:,19)*PCONC(:,1)+0.13000*TPK%K080(:)*PCONC(:,20)*PCONC(:,1)+0.1& -&3007*TPK%K091(:)*PCONC(:,33)*PCONC(:,3)+0.02563*TPK%K095(:)*PCONC(:,39)*PCONC(& -&:,3)+0.13370*TPK%K105(:)*PCONC(:,33)*PCONC(:,32)+0.02212*TPK%K109(:)*PCONC(:,3& -&9)*PCONC(:,32)+0.11306*TPK%K111(:)*PCONC(:,33)*PCONC(:,39)+0.01593*TPK%K115(:)& -&*PCONC(:,39)*PCONC(:,39)+0.16271*TPK%K120(:)*PCONC(:,33)*PCONC(:,5)+0.01021*TP& -&K%K124(:)*PCONC(:,39)*PCONC(:,5) + PPROD(:,42) = +0.15*TPK%K054(:)*PCONC(:,21)*TPK%O3P(:)+0.10318*TPK%K061(:)*PCO& +&NC(:,22)*PCONC(:,15)+0.10162*TPK%K065(:)*PCONC(:,26)*PCONC(:,15)+0.09333*TPK%K& +&069(:)*PCONC(:,30)*PCONC(:,15)+TPK%K070(:)*PCONC(:,28)*PCONC(:,15)+0.10530*TPK& +&%K074(:)*PCONC(:,26)*PCONC(:,5)+TPK%K078(:)*PCONC(:,28)*PCONC(:,5)+0.00000*TPK& +&%K079(:)*PCONC(:,20)*PCONC(:,1)+0.13000*TPK%K080(:)*PCONC(:,21)*PCONC(:,1)+0.1& +&3007*TPK%K091(:)*PCONC(:,34)*PCONC(:,3)+0.02563*TPK%K095(:)*PCONC(:,40)*PCONC(& +&:,3)+0.13370*TPK%K105(:)*PCONC(:,34)*PCONC(:,33)+0.02212*TPK%K109(:)*PCONC(:,4& +&0)*PCONC(:,33)+0.11306*TPK%K111(:)*PCONC(:,34)*PCONC(:,40)+0.01593*TPK%K115(:)& +&*PCONC(:,40)*PCONC(:,40)+0.16271*TPK%K120(:)*PCONC(:,34)*PCONC(:,5)+0.01021*TP& +&K%K124(:)*PCONC(:,40)*PCONC(:,5) !PLOSS(XO2) = +K126*<HO2>+K127*<MO2>+K128*<CARBOP>+K129*<XO2>+K129*<XO2>+K130*< !NO>+K131*<NO3> - PLOSS(:,41) = +TPK%K126(:)*PCONC(:,15)+TPK%K127(:)*PCONC(:,32)+TPK%K128(:)*PCO& -&NC(:,39)+TPK%K129(:)*PCONC(:,41)+TPK%K129(:)*PCONC(:,41)+TPK%K130(:)*PCONC(:,3& + PLOSS(:,42) = +TPK%K126(:)*PCONC(:,16)+TPK%K127(:)*PCONC(:,33)+TPK%K128(:)*PCO& +&NC(:,40)+TPK%K129(:)*PCONC(:,42)+TPK%K129(:)*PCONC(:,42)+TPK%K130(:)*PCONC(:,3& &)+TPK%K131(:)*PCONC(:,5) ! !PPROD(WC_O3) = +KTC1*<O3> - PPROD(:,42) = +TPK%KTC1(:)*PCONC(:,1) + PPROD(:,43) = +TPK%KTC1(:)*PCONC(:,1) !PLOSS(WC_O3) = +KTC21+KC6*<WC_HO2>+KC29*<WC_SO2> - PLOSS(:,42) = +TPK%KTC21(:)+TPK%KC6(:)*PCONC(:,53)+TPK%KC29(:)*PCONC(:,55) + PLOSS(:,43) = +TPK%KTC21(:)+TPK%KC6(:)*PCONC(:,54)+TPK%KC29(:)*PCONC(:,56) ! !PPROD(WC_H2O2) = +KTC2*<H2O2>+KC2*<WC_OH>*<WC_OH>+KC5*<WC_HO2>*<WC_HO2> - PPROD(:,43) = +TPK%KTC2(:)*PCONC(:,2)+TPK%KC2(:)*PCONC(:,52)*PCONC(:,52)+TPK%K& -&C5(:)*PCONC(:,53)*PCONC(:,53) + PPROD(:,44) = +TPK%KTC2(:)*PCONC(:,2)+TPK%KC2(:)*PCONC(:,53)*PCONC(:,53)+TPK%K& +&C5(:)*PCONC(:,54)*PCONC(:,54) !PLOSS(WC_H2O2) = +KTC22+KC1+KC4*<WC_OH>+KC30*<WC_SO2> - PLOSS(:,43) = +TPK%KTC22(:)+TPK%KC1(:)+TPK%KC4(:)*PCONC(:,52)+TPK%KC30(:)*PCON& -&C(:,55) + PLOSS(:,44) = +TPK%KTC22(:)+TPK%KC1(:)+TPK%KC4(:)*PCONC(:,53)+TPK%KC30(:)*PCON& +&C(:,56) ! !PPROD(WC_NO) = +KTC3*<NO> - PPROD(:,44) = +TPK%KTC3(:)*PCONC(:,3) + PPROD(:,45) = +TPK%KTC3(:)*PCONC(:,3) !PLOSS(WC_NO) = +KTC23 - PLOSS(:,44) = +TPK%KTC23(:) + PLOSS(:,45) = +TPK%KTC23(:) ! !PPROD(WC_NO2) = +KTC4*<NO2>+KC8*<WC_HONO>*<WC_OH>+KC10*<WC_HNO4>+KC13*<WC_HNO3 !> - PPROD(:,45) = +TPK%KTC4(:)*PCONC(:,4)+TPK%KC8(:)*PCONC(:,48)*PCONC(:,52)+TPK%K& -&C10(:)*PCONC(:,50)+TPK%KC13(:)*PCONC(:,49) + PPROD(:,46) = +TPK%KTC4(:)*PCONC(:,4)+TPK%KC8(:)*PCONC(:,49)*PCONC(:,53)+TPK%K& +&C10(:)*PCONC(:,51)+TPK%KC13(:)*PCONC(:,50) !PLOSS(WC_NO2) = +KTC24+KC9*<WC_HO2> - PLOSS(:,45) = +TPK%KTC24(:)+TPK%KC9(:)*PCONC(:,53) + PLOSS(:,46) = +TPK%KTC24(:)+TPK%KC9(:)*PCONC(:,54) ! !PPROD(WC_NO3) = +KTC5*<NO3> - PPROD(:,46) = +TPK%KTC5(:)*PCONC(:,5) + PPROD(:,47) = +TPK%KTC5(:)*PCONC(:,5) !PLOSS(WC_NO3) = +KTC25+KC15*<WC_SULF>+KC16*<WC_SO2> - PLOSS(:,46) = +TPK%KTC25(:)+TPK%KC15(:)*PCONC(:,56)+TPK%KC16(:)*PCONC(:,55) + PLOSS(:,47) = +TPK%KTC25(:)+TPK%KC15(:)*PCONC(:,57)+TPK%KC16(:)*PCONC(:,56) ! !PPROD(WC_N2O5) = +KTC6*<N2O5> - PPROD(:,47) = +TPK%KTC6(:)*PCONC(:,6) + PPROD(:,48) = +TPK%KTC6(:)*PCONC(:,6) !PLOSS(WC_N2O5) = +KTC26+KC14 - PLOSS(:,47) = +TPK%KTC26(:)+TPK%KC14(:) + PLOSS(:,48) = +TPK%KTC26(:)+TPK%KC14(:) ! !PPROD(WC_HONO) = +KTC7*<HONO>+KC11*<WC_HNO4> - PPROD(:,48) = +TPK%KTC7(:)*PCONC(:,7)+TPK%KC11(:)*PCONC(:,50) + PPROD(:,49) = +TPK%KTC7(:)*PCONC(:,7)+TPK%KC11(:)*PCONC(:,51) !PLOSS(WC_HONO) = +KTC27+KC8*<WC_OH> - PLOSS(:,48) = +TPK%KTC27(:)+TPK%KC8(:)*PCONC(:,52) + PLOSS(:,49) = +TPK%KTC27(:)+TPK%KC8(:)*PCONC(:,53) ! !PPROD(WC_HNO3) = +KTC8*<HNO3>+KC12*<WC_HNO4>*<WC_SO2>+KC14*<WC_N2O5>+KC14*<WC_ !N2O5>+KC15*<WC_NO3>*<WC_SULF>+KC16*<WC_NO3>*<WC_SO2> - PPROD(:,49) = +TPK%KTC8(:)*PCONC(:,8)+TPK%KC12(:)*PCONC(:,50)*PCONC(:,55)+TPK%& -&KC14(:)*PCONC(:,47)+TPK%KC14(:)*PCONC(:,47)+TPK%KC15(:)*PCONC(:,46)*PCONC(:,56& -&)+TPK%KC16(:)*PCONC(:,46)*PCONC(:,55) + PPROD(:,50) = +TPK%KTC8(:)*PCONC(:,8)+TPK%KC12(:)*PCONC(:,51)*PCONC(:,56)+TPK%& +&KC14(:)*PCONC(:,48)+TPK%KC14(:)*PCONC(:,48)+TPK%KC15(:)*PCONC(:,47)*PCONC(:,57& +&)+TPK%KC16(:)*PCONC(:,47)*PCONC(:,56) !PLOSS(WC_HNO3) = +KTC28+KC13 - PLOSS(:,49) = +TPK%KTC28(:)+TPK%KC13(:) -! -!PPROD(WC_HNO4) = +KTC9*<HNO4>+KC9*<WC_NO2>*<WC_HO2> - PPROD(:,50) = +TPK%KTC9(:)*PCONC(:,9)+TPK%KC9(:)*PCONC(:,45)*PCONC(:,53) -!PLOSS(WC_HNO4) = +KTC29+KC10+KC11+KC12*<WC_SO2> - PLOSS(:,50) = +TPK%KTC29(:)+TPK%KC10(:)+TPK%KC11(:)+TPK%KC12(:)*PCONC(:,55) + PLOSS(:,50) = +TPK%KTC28(:)+TPK%KC13(:) ! RETURN END SUBROUTINE SUB4 @@ -4722,80 +4759,79 @@ SUBROUTINE SUB5 !Indices 51 a 60 ! ! +!PPROD(WC_HNO4) = +KTC9*<HNO4>+KC9*<WC_NO2>*<WC_HO2> + PPROD(:,51) = +TPK%KTC9(:)*PCONC(:,9)+TPK%KC9(:)*PCONC(:,46)*PCONC(:,54) +!PLOSS(WC_HNO4) = +KTC29+KC10+KC11+KC12*<WC_SO2> + PLOSS(:,51) = +TPK%KTC29(:)+TPK%KC10(:)+TPK%KC11(:)+TPK%KC12(:)*PCONC(:,56) +! !PPROD(WC_NH3) = +KTC10*<NH3> - PPROD(:,51) = +TPK%KTC10(:)*PCONC(:,10) + PPROD(:,52) = +TPK%KTC10(:)*PCONC(:,10) !PLOSS(WC_NH3) = +KTC30 - PLOSS(:,51) = +TPK%KTC30(:) + PLOSS(:,52) = +TPK%KTC30(:) ! !PPROD(WC_OH) = +KTC11*<OH>+KC1*<WC_H2O2>+KC1*<WC_H2O2>+KC6*<WC_O3>*<WC_HO2>+KC !13*<WC_HNO3>+KC28*<WC_ASO4> - PPROD(:,52) = +TPK%KTC11(:)*PCONC(:,14)+TPK%KC1(:)*PCONC(:,43)+TPK%KC1(:)*PCON& -&C(:,43)+TPK%KC6(:)*PCONC(:,42)*PCONC(:,53)+TPK%KC13(:)*PCONC(:,49)+TPK%KC28(:)& -&*PCONC(:,63) + PPROD(:,53) = +TPK%KTC11(:)*PCONC(:,15)+TPK%KC1(:)*PCONC(:,44)+TPK%KC1(:)*PCON& +&C(:,44)+TPK%KC6(:)*PCONC(:,43)*PCONC(:,54)+TPK%KC13(:)*PCONC(:,50)+TPK%KC28(:)& +&*PCONC(:,64) !PLOSS(WC_OH) = +KTC31+KC2*<WC_OH>+KC2*<WC_OH>+KC3*<WC_HO2>+KC4*<WC_H2O2>+KC7*< !WC_SO2>+KC8*<WC_HONO>+KC19*<WC_HCHO>+KC20*<WC_ORA1>+KC23*<WC_AHMS> - PLOSS(:,52) = +TPK%KTC31(:)+TPK%KC2(:)*PCONC(:,52)+TPK%KC2(:)*PCONC(:,52)+TPK%& -&KC3(:)*PCONC(:,53)+TPK%KC4(:)*PCONC(:,43)+TPK%KC7(:)*PCONC(:,55)+TPK%KC8(:)*PC& -&ONC(:,48)+TPK%KC19(:)*PCONC(:,57)+TPK%KC20(:)*PCONC(:,58)+TPK%KC23(:)*PCONC(:,& -&66) + PLOSS(:,53) = +TPK%KTC31(:)+TPK%KC2(:)*PCONC(:,53)+TPK%KC2(:)*PCONC(:,53)+TPK%& +&KC3(:)*PCONC(:,54)+TPK%KC4(:)*PCONC(:,44)+TPK%KC7(:)*PCONC(:,56)+TPK%KC8(:)*PC& +&ONC(:,49)+TPK%KC19(:)*PCONC(:,58)+TPK%KC20(:)*PCONC(:,59)+TPK%KC23(:)*PCONC(:,& +&67) ! !PPROD(WC_HO2) = +KTC12*<HO2>+KC4*<WC_H2O2>*<WC_OH>+KC10*<WC_HNO4>+2.00*KC17*<W !C_MO2>*<WC_MO2>+KC19*<WC_HCHO>*<WC_OH>+KC20*<WC_ORA1>*<WC_OH>+KC23*<WC_AHMS>*< !WC_OH> - PPROD(:,53) = +TPK%KTC12(:)*PCONC(:,15)+TPK%KC4(:)*PCONC(:,43)*PCONC(:,52)+TPK& -&%KC10(:)*PCONC(:,50)+2.00*TPK%KC17(:)*PCONC(:,60)*PCONC(:,60)+TPK%KC19(:)*PCON& -&C(:,57)*PCONC(:,52)+TPK%KC20(:)*PCONC(:,58)*PCONC(:,52)+TPK%KC23(:)*PCONC(:,66& -&)*PCONC(:,52) + PPROD(:,54) = +TPK%KTC12(:)*PCONC(:,16)+TPK%KC4(:)*PCONC(:,44)*PCONC(:,53)+TPK& +&%KC10(:)*PCONC(:,51)+2.00*TPK%KC17(:)*PCONC(:,61)*PCONC(:,61)+TPK%KC19(:)*PCON& +&C(:,58)*PCONC(:,53)+TPK%KC20(:)*PCONC(:,59)*PCONC(:,53)+TPK%KC23(:)*PCONC(:,67& +&)*PCONC(:,53) !PLOSS(WC_HO2) = +KTC32+KC3*<WC_OH>+KC5*<WC_HO2>+KC5*<WC_HO2>+KC6*<WC_O3>+KC9*< !WC_NO2>+KC25*<WC_ASO5> - PLOSS(:,53) = +TPK%KTC32(:)+TPK%KC3(:)*PCONC(:,52)+TPK%KC5(:)*PCONC(:,53)+TPK%& -&KC5(:)*PCONC(:,53)+TPK%KC6(:)*PCONC(:,42)+TPK%KC9(:)*PCONC(:,45)+TPK%KC25(:)*P& -&CONC(:,64) + PLOSS(:,54) = +TPK%KTC32(:)+TPK%KC3(:)*PCONC(:,53)+TPK%KC5(:)*PCONC(:,54)+TPK%& +&KC5(:)*PCONC(:,54)+TPK%KC6(:)*PCONC(:,43)+TPK%KC9(:)*PCONC(:,46)+TPK%KC25(:)*P& +&CONC(:,65) ! !PPROD(WC_CO2) = +KTC13*<CO2>+KC20*<WC_ORA1>*<WC_OH> - PPROD(:,54) = +TPK%KTC13(:)*TPK%CO2(:)+TPK%KC20(:)*PCONC(:,58)*PCONC(:,52) + PPROD(:,55) = +TPK%KTC13(:)*TPK%CO2(:)+TPK%KC20(:)*PCONC(:,59)*PCONC(:,53) !PLOSS(WC_CO2) = +KTC33 - PLOSS(:,54) = +TPK%KTC33(:) + PLOSS(:,55) = +TPK%KTC33(:) ! !PPROD(WC_SO2) = +KTC14*<SO2>+KC22*<WC_AHMS>+KC23*<WC_AHMS>*<WC_OH> - PPROD(:,55) = +TPK%KTC14(:)*PCONC(:,11)+TPK%KC22(:)*PCONC(:,66)+TPK%KC23(:)*PC& -&ONC(:,66)*PCONC(:,52) + PPROD(:,56) = +TPK%KTC14(:)*PCONC(:,12)+TPK%KC22(:)*PCONC(:,67)+TPK%KC23(:)*PC& +&ONC(:,67)*PCONC(:,53) !PLOSS(WC_SO2) = +KTC34+KC7*<WC_OH>+KC12*<WC_HNO4>+KC16*<WC_NO3>+KC18*<WC_MO2>+ !KC21*<WC_HCHO>+KC27*<WC_AHSO5>+KC29*<WC_O3>+KC30*<WC_H2O2> - PLOSS(:,55) = +TPK%KTC34(:)+TPK%KC7(:)*PCONC(:,52)+TPK%KC12(:)*PCONC(:,50)+TPK& -&%KC16(:)*PCONC(:,46)+TPK%KC18(:)*PCONC(:,60)+TPK%KC21(:)*PCONC(:,57)+TPK%KC27(& -&:)*PCONC(:,65)+TPK%KC29(:)*PCONC(:,42)+TPK%KC30(:)*PCONC(:,43) + PLOSS(:,56) = +TPK%KTC34(:)+TPK%KC7(:)*PCONC(:,53)+TPK%KC12(:)*PCONC(:,51)+TPK& +&%KC16(:)*PCONC(:,47)+TPK%KC18(:)*PCONC(:,61)+TPK%KC21(:)*PCONC(:,58)+TPK%KC27(& +&:)*PCONC(:,66)+TPK%KC29(:)*PCONC(:,43)+TPK%KC30(:)*PCONC(:,44) ! !PPROD(WC_SULF) = +KTC15*<SULF>+KC12*<WC_HNO4>*<WC_SO2>+2.00*KC27*<WC_AHSO5>*<W !C_SO2>+KC28*<WC_ASO4>+KC29*<WC_SO2>*<WC_O3>+KC30*<WC_SO2>*<WC_H2O2> - PPROD(:,56) = +TPK%KTC15(:)*PCONC(:,12)+TPK%KC12(:)*PCONC(:,50)*PCONC(:,55)+2.& -&00*TPK%KC27(:)*PCONC(:,65)*PCONC(:,55)+TPK%KC28(:)*PCONC(:,63)+TPK%KC29(:)*PCO& -&NC(:,55)*PCONC(:,42)+TPK%KC30(:)*PCONC(:,55)*PCONC(:,43) + PPROD(:,57) = +TPK%KTC15(:)*PCONC(:,13)+TPK%KC12(:)*PCONC(:,51)*PCONC(:,56)+2.& +&00*TPK%KC27(:)*PCONC(:,66)*PCONC(:,56)+TPK%KC28(:)*PCONC(:,64)+TPK%KC29(:)*PCO& +&NC(:,56)*PCONC(:,43)+TPK%KC30(:)*PCONC(:,56)*PCONC(:,44) !PLOSS(WC_SULF) = +KTC35+KC15*<WC_NO3> - PLOSS(:,56) = +TPK%KTC35(:)+TPK%KC15(:)*PCONC(:,46) + PLOSS(:,57) = +TPK%KTC35(:)+TPK%KC15(:)*PCONC(:,47) ! !PPROD(WC_HCHO) = +KTC16*<HCHO>+2.00*KC17*<WC_MO2>*<WC_MO2>+KC22*<WC_AHMS> - PPROD(:,57) = +TPK%KTC16(:)*PCONC(:,22)+2.00*TPK%KC17(:)*PCONC(:,60)*PCONC(:,6& -&0)+TPK%KC22(:)*PCONC(:,66) + PPROD(:,58) = +TPK%KTC16(:)*PCONC(:,23)+2.00*TPK%KC17(:)*PCONC(:,61)*PCONC(:,6& +&1)+TPK%KC22(:)*PCONC(:,67) !PLOSS(WC_HCHO) = +KTC36+KC19*<WC_OH>+KC21*<WC_SO2> - PLOSS(:,57) = +TPK%KTC36(:)+TPK%KC19(:)*PCONC(:,52)+TPK%KC21(:)*PCONC(:,55) + PLOSS(:,58) = +TPK%KTC36(:)+TPK%KC19(:)*PCONC(:,53)+TPK%KC21(:)*PCONC(:,56) ! !PPROD(WC_ORA1) = +KTC17*<ORA1>+KC19*<WC_HCHO>*<WC_OH>+KC23*<WC_AHMS>*<WC_OH> - PPROD(:,58) = +TPK%KTC17(:)*PCONC(:,30)+TPK%KC19(:)*PCONC(:,57)*PCONC(:,52)+TP& -&K%KC23(:)*PCONC(:,66)*PCONC(:,52) + PPROD(:,59) = +TPK%KTC17(:)*PCONC(:,31)+TPK%KC19(:)*PCONC(:,58)*PCONC(:,53)+TP& +&K%KC23(:)*PCONC(:,67)*PCONC(:,53) !PLOSS(WC_ORA1) = +KTC37+KC20*<WC_OH> - PLOSS(:,58) = +TPK%KTC37(:)+TPK%KC20(:)*PCONC(:,52) + PLOSS(:,59) = +TPK%KTC37(:)+TPK%KC20(:)*PCONC(:,53) ! !PPROD(WC_ORA2) = +KTC18*<ORA2> - PPROD(:,59) = +TPK%KTC18(:)*PCONC(:,31) + PPROD(:,60) = +TPK%KTC18(:)*PCONC(:,32) !PLOSS(WC_ORA2) = +KTC38 - PLOSS(:,59) = +TPK%KTC38(:) -! -!PPROD(WC_MO2) = +KTC19*<MO2> - PPROD(:,60) = +TPK%KTC19(:)*PCONC(:,32) -!PLOSS(WC_MO2) = +KTC39+KC17*<WC_MO2>+KC17*<WC_MO2>+KC18*<WC_SO2> - PLOSS(:,60) = +TPK%KTC39(:)+TPK%KC17(:)*PCONC(:,60)+TPK%KC17(:)*PCONC(:,60)+TP& -&K%KC18(:)*PCONC(:,55) + PLOSS(:,60) = +TPK%KTC38(:) ! RETURN END SUBROUTINE SUB5 @@ -4805,64 +4841,63 @@ SUBROUTINE SUB6 !Indices 61 a 70 ! ! +!PPROD(WC_MO2) = +KTC19*<MO2> + PPROD(:,61) = +TPK%KTC19(:)*PCONC(:,33) +!PLOSS(WC_MO2) = +KTC39+KC17*<WC_MO2>+KC17*<WC_MO2>+KC18*<WC_SO2> + PLOSS(:,61) = +TPK%KTC39(:)+TPK%KC17(:)*PCONC(:,61)+TPK%KC17(:)*PCONC(:,61)+TP& +&K%KC18(:)*PCONC(:,56) +! !PPROD(WC_OP1) = +KTC20*<OP1>+KC18*<WC_MO2>*<WC_SO2> - PPROD(:,61) = +TPK%KTC20(:)*PCONC(:,28)+TPK%KC18(:)*PCONC(:,60)*PCONC(:,55) + PPROD(:,62) = +TPK%KTC20(:)*PCONC(:,29)+TPK%KC18(:)*PCONC(:,61)*PCONC(:,56) !PLOSS(WC_OP1) = +KTC40 - PLOSS(:,61) = +TPK%KTC40(:) + PLOSS(:,62) = +TPK%KTC40(:) ! !PPROD(WC_ASO3) = +KC7*<WC_OH>*<WC_SO2>+KC16*<WC_NO3>*<WC_SO2>+KC18*<WC_MO2>*<W !C_SO2> - PPROD(:,62) = +TPK%KC7(:)*PCONC(:,52)*PCONC(:,55)+TPK%KC16(:)*PCONC(:,46)*PCON& -&C(:,55)+TPK%KC18(:)*PCONC(:,60)*PCONC(:,55) + PPROD(:,63) = +TPK%KC7(:)*PCONC(:,53)*PCONC(:,56)+TPK%KC16(:)*PCONC(:,47)*PCON& +&C(:,56)+TPK%KC18(:)*PCONC(:,61)*PCONC(:,56) !PLOSS(WC_ASO3) = +KC24*<W_O2> - PLOSS(:,62) = +TPK%KC24(:)*TPK%W_O2(:) + PLOSS(:,63) = +TPK%KC24(:)*TPK%W_O2(:) ! !PPROD(WC_ASO4) = +KC15*<WC_NO3>*<WC_SULF>+KC26*<WC_ASO5>*<WC_ASO5>+KC26*<WC_AS !O5>*<WC_ASO5> - PPROD(:,63) = +TPK%KC15(:)*PCONC(:,46)*PCONC(:,56)+TPK%KC26(:)*PCONC(:,64)*PCO& -&NC(:,64)+TPK%KC26(:)*PCONC(:,64)*PCONC(:,64) + PPROD(:,64) = +TPK%KC15(:)*PCONC(:,47)*PCONC(:,57)+TPK%KC26(:)*PCONC(:,65)*PCO& +&NC(:,65)+TPK%KC26(:)*PCONC(:,65)*PCONC(:,65) !PLOSS(WC_ASO4) = +KC28 - PLOSS(:,63) = +TPK%KC28(:) + PLOSS(:,64) = +TPK%KC28(:) ! !PPROD(WC_ASO5) = +KC24*<WC_ASO3>*<W_O2> - PPROD(:,64) = +TPK%KC24(:)*PCONC(:,62)*TPK%W_O2(:) + PPROD(:,65) = +TPK%KC24(:)*PCONC(:,63)*TPK%W_O2(:) !PLOSS(WC_ASO5) = +KC25*<WC_HO2>+KC26*<WC_ASO5>+KC26*<WC_ASO5> - PLOSS(:,64) = +TPK%KC25(:)*PCONC(:,53)+TPK%KC26(:)*PCONC(:,64)+TPK%KC26(:)*PCO& -&NC(:,64) + PLOSS(:,65) = +TPK%KC25(:)*PCONC(:,54)+TPK%KC26(:)*PCONC(:,65)+TPK%KC26(:)*PCO& +&NC(:,65) ! !PPROD(WC_AHSO5) = +KC25*<WC_ASO5>*<WC_HO2> - PPROD(:,65) = +TPK%KC25(:)*PCONC(:,64)*PCONC(:,53) + PPROD(:,66) = +TPK%KC25(:)*PCONC(:,65)*PCONC(:,54) !PLOSS(WC_AHSO5) = +KC27*<WC_SO2> - PLOSS(:,65) = +TPK%KC27(:)*PCONC(:,55) + PLOSS(:,66) = +TPK%KC27(:)*PCONC(:,56) ! !PPROD(WC_AHMS) = +KC21*<WC_SO2>*<WC_HCHO> - PPROD(:,66) = +TPK%KC21(:)*PCONC(:,55)*PCONC(:,57) + PPROD(:,67) = +TPK%KC21(:)*PCONC(:,56)*PCONC(:,58) !PLOSS(WC_AHMS) = +KC22+KC23*<WC_OH> - PLOSS(:,66) = +TPK%KC22(:)+TPK%KC23(:)*PCONC(:,52) + PLOSS(:,67) = +TPK%KC22(:)+TPK%KC23(:)*PCONC(:,53) ! !PPROD(WR_O3) = +KTR1*<O3> - PPROD(:,67) = +TPK%KTR1(:)*PCONC(:,1) + PPROD(:,68) = +TPK%KTR1(:)*PCONC(:,1) !PLOSS(WR_O3) = +KTR21+KR6*<WR_HO2>+KR29*<WR_SO2> - PLOSS(:,67) = +TPK%KTR21(:)+TPK%KR6(:)*PCONC(:,78)+TPK%KR29(:)*PCONC(:,80) + PLOSS(:,68) = +TPK%KTR21(:)+TPK%KR6(:)*PCONC(:,79)+TPK%KR29(:)*PCONC(:,81) ! !PPROD(WR_H2O2) = +KTR2*<H2O2>+KR2*<WR_OH>*<WR_OH>+KR5*<WR_HO2>*<WR_HO2> - PPROD(:,68) = +TPK%KTR2(:)*PCONC(:,2)+TPK%KR2(:)*PCONC(:,77)*PCONC(:,77)+TPK%K& -&R5(:)*PCONC(:,78)*PCONC(:,78) + PPROD(:,69) = +TPK%KTR2(:)*PCONC(:,2)+TPK%KR2(:)*PCONC(:,78)*PCONC(:,78)+TPK%K& +&R5(:)*PCONC(:,79)*PCONC(:,79) !PLOSS(WR_H2O2) = +KTR22+KR1+KR4*<WR_OH>+KR30*<WR_SO2> - PLOSS(:,68) = +TPK%KTR22(:)+TPK%KR1(:)+TPK%KR4(:)*PCONC(:,77)+TPK%KR30(:)*PCON& -&C(:,80) + PLOSS(:,69) = +TPK%KTR22(:)+TPK%KR1(:)+TPK%KR4(:)*PCONC(:,78)+TPK%KR30(:)*PCON& +&C(:,81) ! !PPROD(WR_NO) = +KTR3*<NO> - PPROD(:,69) = +TPK%KTR3(:)*PCONC(:,3) + PPROD(:,70) = +TPK%KTR3(:)*PCONC(:,3) !PLOSS(WR_NO) = +KTR23 - PLOSS(:,69) = +TPK%KTR23(:) -! -!PPROD(WR_NO2) = +KTR4*<NO2>+KR8*<WR_HONO>*<WR_OH>+KR10*<WR_HNO4>+KR13*<WR_HNO3 -!> - PPROD(:,70) = +TPK%KTR4(:)*PCONC(:,4)+TPK%KR8(:)*PCONC(:,73)*PCONC(:,77)+TPK%K& -&R10(:)*PCONC(:,75)+TPK%KR13(:)*PCONC(:,74) -!PLOSS(WR_NO2) = +KTR24+KR9*<WR_HO2> - PLOSS(:,70) = +TPK%KTR24(:)+TPK%KR9(:)*PCONC(:,78) + PLOSS(:,70) = +TPK%KTR23(:) ! RETURN END SUBROUTINE SUB6 @@ -4872,77 +4907,75 @@ SUBROUTINE SUB7 !Indices 71 a 80 ! ! +!PPROD(WR_NO2) = +KTR4*<NO2>+KR8*<WR_HONO>*<WR_OH>+KR10*<WR_HNO4>+KR13*<WR_HNO3 +!> + PPROD(:,71) = +TPK%KTR4(:)*PCONC(:,4)+TPK%KR8(:)*PCONC(:,74)*PCONC(:,78)+TPK%K& +&R10(:)*PCONC(:,76)+TPK%KR13(:)*PCONC(:,75) +!PLOSS(WR_NO2) = +KTR24+KR9*<WR_HO2> + PLOSS(:,71) = +TPK%KTR24(:)+TPK%KR9(:)*PCONC(:,79) +! !PPROD(WR_NO3) = +KTR5*<NO3> - PPROD(:,71) = +TPK%KTR5(:)*PCONC(:,5) + PPROD(:,72) = +TPK%KTR5(:)*PCONC(:,5) !PLOSS(WR_NO3) = +KTR25+KR15*<WR_SULF>+KR16*<WR_SO2> - PLOSS(:,71) = +TPK%KTR25(:)+TPK%KR15(:)*PCONC(:,81)+TPK%KR16(:)*PCONC(:,80) + PLOSS(:,72) = +TPK%KTR25(:)+TPK%KR15(:)*PCONC(:,82)+TPK%KR16(:)*PCONC(:,81) ! !PPROD(WR_N2O5) = +KTR6*<N2O5> - PPROD(:,72) = +TPK%KTR6(:)*PCONC(:,6) + PPROD(:,73) = +TPK%KTR6(:)*PCONC(:,6) !PLOSS(WR_N2O5) = +KTR26+KR14 - PLOSS(:,72) = +TPK%KTR26(:)+TPK%KR14(:) + PLOSS(:,73) = +TPK%KTR26(:)+TPK%KR14(:) ! !PPROD(WR_HONO) = +KTR7*<HONO>+KR11*<WR_HNO4> - PPROD(:,73) = +TPK%KTR7(:)*PCONC(:,7)+TPK%KR11(:)*PCONC(:,75) + PPROD(:,74) = +TPK%KTR7(:)*PCONC(:,7)+TPK%KR11(:)*PCONC(:,76) !PLOSS(WR_HONO) = +KTR27+KR8*<WR_OH> - PLOSS(:,73) = +TPK%KTR27(:)+TPK%KR8(:)*PCONC(:,77) + PLOSS(:,74) = +TPK%KTR27(:)+TPK%KR8(:)*PCONC(:,78) ! !PPROD(WR_HNO3) = +KTR8*<HNO3>+KR12*<WR_HNO4>*<WR_SO2>+KR14*<WR_N2O5>+KR14*<WR_ !N2O5>+KR15*<WR_NO3>*<WR_SULF>+KR16*<WR_NO3>*<WR_SO2> - PPROD(:,74) = +TPK%KTR8(:)*PCONC(:,8)+TPK%KR12(:)*PCONC(:,75)*PCONC(:,80)+TPK%& -&KR14(:)*PCONC(:,72)+TPK%KR14(:)*PCONC(:,72)+TPK%KR15(:)*PCONC(:,71)*PCONC(:,81& -&)+TPK%KR16(:)*PCONC(:,71)*PCONC(:,80) + PPROD(:,75) = +TPK%KTR8(:)*PCONC(:,8)+TPK%KR12(:)*PCONC(:,76)*PCONC(:,81)+TPK%& +&KR14(:)*PCONC(:,73)+TPK%KR14(:)*PCONC(:,73)+TPK%KR15(:)*PCONC(:,72)*PCONC(:,82& +&)+TPK%KR16(:)*PCONC(:,72)*PCONC(:,81) !PLOSS(WR_HNO3) = +KTR28+KR13 - PLOSS(:,74) = +TPK%KTR28(:)+TPK%KR13(:) + PLOSS(:,75) = +TPK%KTR28(:)+TPK%KR13(:) ! !PPROD(WR_HNO4) = +KTR9*<HNO4>+KR9*<WR_NO2>*<WR_HO2> - PPROD(:,75) = +TPK%KTR9(:)*PCONC(:,9)+TPK%KR9(:)*PCONC(:,70)*PCONC(:,78) + PPROD(:,76) = +TPK%KTR9(:)*PCONC(:,9)+TPK%KR9(:)*PCONC(:,71)*PCONC(:,79) !PLOSS(WR_HNO4) = +KTR29+KR10+KR11+KR12*<WR_SO2> - PLOSS(:,75) = +TPK%KTR29(:)+TPK%KR10(:)+TPK%KR11(:)+TPK%KR12(:)*PCONC(:,80) + PLOSS(:,76) = +TPK%KTR29(:)+TPK%KR10(:)+TPK%KR11(:)+TPK%KR12(:)*PCONC(:,81) ! !PPROD(WR_NH3) = +KTR10*<NH3> - PPROD(:,76) = +TPK%KTR10(:)*PCONC(:,10) + PPROD(:,77) = +TPK%KTR10(:)*PCONC(:,10) !PLOSS(WR_NH3) = +KTR30 - PLOSS(:,76) = +TPK%KTR30(:) + PLOSS(:,77) = +TPK%KTR30(:) ! !PPROD(WR_OH) = +KTR11*<OH>+KR1*<WR_H2O2>+KR1*<WR_H2O2>+KR6*<WR_O3>*<WR_HO2>+KR !13*<WR_HNO3>+KR28*<WR_ASO4> - PPROD(:,77) = +TPK%KTR11(:)*PCONC(:,14)+TPK%KR1(:)*PCONC(:,68)+TPK%KR1(:)*PCON& -&C(:,68)+TPK%KR6(:)*PCONC(:,67)*PCONC(:,78)+TPK%KR13(:)*PCONC(:,74)+TPK%KR28(:)& -&*PCONC(:,88) + PPROD(:,78) = +TPK%KTR11(:)*PCONC(:,15)+TPK%KR1(:)*PCONC(:,69)+TPK%KR1(:)*PCON& +&C(:,69)+TPK%KR6(:)*PCONC(:,68)*PCONC(:,79)+TPK%KR13(:)*PCONC(:,75)+TPK%KR28(:)& +&*PCONC(:,89) !PLOSS(WR_OH) = +KTR31+KR2*<WR_OH>+KR2*<WR_OH>+KR3*<WR_HO2>+KR4*<WR_H2O2>+KR7*< !WR_SO2>+KR8*<WR_HONO>+KR19*<WR_HCHO>+KR20*<WR_ORA1>+KR23*<WR_AHMS> - PLOSS(:,77) = +TPK%KTR31(:)+TPK%KR2(:)*PCONC(:,77)+TPK%KR2(:)*PCONC(:,77)+TPK%& -&KR3(:)*PCONC(:,78)+TPK%KR4(:)*PCONC(:,68)+TPK%KR7(:)*PCONC(:,80)+TPK%KR8(:)*PC& -&ONC(:,73)+TPK%KR19(:)*PCONC(:,82)+TPK%KR20(:)*PCONC(:,83)+TPK%KR23(:)*PCONC(:,& -&91) + PLOSS(:,78) = +TPK%KTR31(:)+TPK%KR2(:)*PCONC(:,78)+TPK%KR2(:)*PCONC(:,78)+TPK%& +&KR3(:)*PCONC(:,79)+TPK%KR4(:)*PCONC(:,69)+TPK%KR7(:)*PCONC(:,81)+TPK%KR8(:)*PC& +&ONC(:,74)+TPK%KR19(:)*PCONC(:,83)+TPK%KR20(:)*PCONC(:,84)+TPK%KR23(:)*PCONC(:,& +&92) ! !PPROD(WR_HO2) = +KTR12*<HO2>+KR4*<WR_H2O2>*<WR_OH>+KR10*<WR_HNO4>+2.00*KR17*<W !R_MO2>*<WR_MO2>+KR19*<WR_HCHO>*<WR_OH>+KR20*<WR_ORA1>*<WR_OH>+KR23*<WR_AHMS>*< !WR_OH> - PPROD(:,78) = +TPK%KTR12(:)*PCONC(:,15)+TPK%KR4(:)*PCONC(:,68)*PCONC(:,77)+TPK& -&%KR10(:)*PCONC(:,75)+2.00*TPK%KR17(:)*PCONC(:,85)*PCONC(:,85)+TPK%KR19(:)*PCON& -&C(:,82)*PCONC(:,77)+TPK%KR20(:)*PCONC(:,83)*PCONC(:,77)+TPK%KR23(:)*PCONC(:,91& -&)*PCONC(:,77) + PPROD(:,79) = +TPK%KTR12(:)*PCONC(:,16)+TPK%KR4(:)*PCONC(:,69)*PCONC(:,78)+TPK& +&%KR10(:)*PCONC(:,76)+2.00*TPK%KR17(:)*PCONC(:,86)*PCONC(:,86)+TPK%KR19(:)*PCON& +&C(:,83)*PCONC(:,78)+TPK%KR20(:)*PCONC(:,84)*PCONC(:,78)+TPK%KR23(:)*PCONC(:,92& +&)*PCONC(:,78) !PLOSS(WR_HO2) = +KTR32+KR3*<WR_OH>+KR5*<WR_HO2>+KR5*<WR_HO2>+KR6*<WR_O3>+KR9*< !WR_NO2>+KR25*<WR_ASO5> - PLOSS(:,78) = +TPK%KTR32(:)+TPK%KR3(:)*PCONC(:,77)+TPK%KR5(:)*PCONC(:,78)+TPK%& -&KR5(:)*PCONC(:,78)+TPK%KR6(:)*PCONC(:,67)+TPK%KR9(:)*PCONC(:,70)+TPK%KR25(:)*P& -&CONC(:,89) + PLOSS(:,79) = +TPK%KTR32(:)+TPK%KR3(:)*PCONC(:,78)+TPK%KR5(:)*PCONC(:,79)+TPK%& +&KR5(:)*PCONC(:,79)+TPK%KR6(:)*PCONC(:,68)+TPK%KR9(:)*PCONC(:,71)+TPK%KR25(:)*P& +&CONC(:,90) ! !PPROD(WR_CO2) = +KTR13*<CO2>+KR20*<WR_ORA1>*<WR_OH> - PPROD(:,79) = +TPK%KTR13(:)*TPK%CO2(:)+TPK%KR20(:)*PCONC(:,83)*PCONC(:,77) + PPROD(:,80) = +TPK%KTR13(:)*TPK%CO2(:)+TPK%KR20(:)*PCONC(:,84)*PCONC(:,78) !PLOSS(WR_CO2) = +KTR33 - PLOSS(:,79) = +TPK%KTR33(:) -! -!PPROD(WR_SO2) = +KTR14*<SO2>+KR22*<WR_AHMS>+KR23*<WR_AHMS>*<WR_OH> - PPROD(:,80) = +TPK%KTR14(:)*PCONC(:,11)+TPK%KR22(:)*PCONC(:,91)+TPK%KR23(:)*PC& -&ONC(:,91)*PCONC(:,77) -!PLOSS(WR_SO2) = +KTR34+KR7*<WR_OH>+KR12*<WR_HNO4>+KR16*<WR_NO3>+KR18*<WR_MO2>+ -!KR21*<WR_HCHO>+KR27*<WR_AHSO5>+KR29*<WR_O3>+KR30*<WR_H2O2> - PLOSS(:,80) = +TPK%KTR34(:)+TPK%KR7(:)*PCONC(:,77)+TPK%KR12(:)*PCONC(:,75)+TPK& -&%KR16(:)*PCONC(:,71)+TPK%KR18(:)*PCONC(:,85)+TPK%KR21(:)*PCONC(:,82)+TPK%KR27(& -&:)*PCONC(:,90)+TPK%KR29(:)*PCONC(:,67)+TPK%KR30(:)*PCONC(:,68) + PLOSS(:,80) = +TPK%KTR33(:) ! RETURN END SUBROUTINE SUB7 @@ -4952,79 +4985,88 @@ SUBROUTINE SUB8 !Indices 81 a 90 ! ! +!PPROD(WR_SO2) = +KTR14*<SO2>+KR22*<WR_AHMS>+KR23*<WR_AHMS>*<WR_OH> + PPROD(:,81) = +TPK%KTR14(:)*PCONC(:,12)+TPK%KR22(:)*PCONC(:,92)+TPK%KR23(:)*PC& +&ONC(:,92)*PCONC(:,78) +!PLOSS(WR_SO2) = +KTR34+KR7*<WR_OH>+KR12*<WR_HNO4>+KR16*<WR_NO3>+KR18*<WR_MO2>+ +!KR21*<WR_HCHO>+KR27*<WR_AHSO5>+KR29*<WR_O3>+KR30*<WR_H2O2> + PLOSS(:,81) = +TPK%KTR34(:)+TPK%KR7(:)*PCONC(:,78)+TPK%KR12(:)*PCONC(:,76)+TPK& +&%KR16(:)*PCONC(:,72)+TPK%KR18(:)*PCONC(:,86)+TPK%KR21(:)*PCONC(:,83)+TPK%KR27(& +&:)*PCONC(:,91)+TPK%KR29(:)*PCONC(:,68)+TPK%KR30(:)*PCONC(:,69) +! !PPROD(WR_SULF) = +KTR15*<SULF>+KR12*<WR_HNO4>*<WR_SO2>+2.00*KR27*<WR_AHSO5>*<W !R_SO2>+KR28*<WR_ASO4>+KR29*<WR_SO2>*<WR_O3>+KR30*<WR_SO2>*<WR_H2O2> - PPROD(:,81) = +TPK%KTR15(:)*PCONC(:,12)+TPK%KR12(:)*PCONC(:,75)*PCONC(:,80)+2.& -&00*TPK%KR27(:)*PCONC(:,90)*PCONC(:,80)+TPK%KR28(:)*PCONC(:,88)+TPK%KR29(:)*PCO& -&NC(:,80)*PCONC(:,67)+TPK%KR30(:)*PCONC(:,80)*PCONC(:,68) + PPROD(:,82) = +TPK%KTR15(:)*PCONC(:,13)+TPK%KR12(:)*PCONC(:,76)*PCONC(:,81)+2.& +&00*TPK%KR27(:)*PCONC(:,91)*PCONC(:,81)+TPK%KR28(:)*PCONC(:,89)+TPK%KR29(:)*PCO& +&NC(:,81)*PCONC(:,68)+TPK%KR30(:)*PCONC(:,81)*PCONC(:,69) !PLOSS(WR_SULF) = +KTR35+KR15*<WR_NO3> - PLOSS(:,81) = +TPK%KTR35(:)+TPK%KR15(:)*PCONC(:,71) + PLOSS(:,82) = +TPK%KTR35(:)+TPK%KR15(:)*PCONC(:,72) ! !PPROD(WR_HCHO) = +KTR16*<HCHO>+2.00*KR17*<WR_MO2>*<WR_MO2>+KR22*<WR_AHMS> - PPROD(:,82) = +TPK%KTR16(:)*PCONC(:,22)+2.00*TPK%KR17(:)*PCONC(:,85)*PCONC(:,8& -&5)+TPK%KR22(:)*PCONC(:,91) + PPROD(:,83) = +TPK%KTR16(:)*PCONC(:,23)+2.00*TPK%KR17(:)*PCONC(:,86)*PCONC(:,8& +&6)+TPK%KR22(:)*PCONC(:,92) !PLOSS(WR_HCHO) = +KTR36+KR19*<WR_OH>+KR21*<WR_SO2> - PLOSS(:,82) = +TPK%KTR36(:)+TPK%KR19(:)*PCONC(:,77)+TPK%KR21(:)*PCONC(:,80) + PLOSS(:,83) = +TPK%KTR36(:)+TPK%KR19(:)*PCONC(:,78)+TPK%KR21(:)*PCONC(:,81) ! !PPROD(WR_ORA1) = +KTR17*<ORA1>+KR19*<WR_HCHO>*<WR_OH>+KR23*<WR_AHMS>*<WR_OH> - PPROD(:,83) = +TPK%KTR17(:)*PCONC(:,30)+TPK%KR19(:)*PCONC(:,82)*PCONC(:,77)+TP& -&K%KR23(:)*PCONC(:,91)*PCONC(:,77) + PPROD(:,84) = +TPK%KTR17(:)*PCONC(:,31)+TPK%KR19(:)*PCONC(:,83)*PCONC(:,78)+TP& +&K%KR23(:)*PCONC(:,92)*PCONC(:,78) !PLOSS(WR_ORA1) = +KTR37+KR20*<WR_OH> - PLOSS(:,83) = +TPK%KTR37(:)+TPK%KR20(:)*PCONC(:,77) + PLOSS(:,84) = +TPK%KTR37(:)+TPK%KR20(:)*PCONC(:,78) ! !PPROD(WR_ORA2) = +KTR18*<ORA2> - PPROD(:,84) = +TPK%KTR18(:)*PCONC(:,31) + PPROD(:,85) = +TPK%KTR18(:)*PCONC(:,32) !PLOSS(WR_ORA2) = +KTR38 - PLOSS(:,84) = +TPK%KTR38(:) + PLOSS(:,85) = +TPK%KTR38(:) ! !PPROD(WR_MO2) = +KTR19*<MO2> - PPROD(:,85) = +TPK%KTR19(:)*PCONC(:,32) + PPROD(:,86) = +TPK%KTR19(:)*PCONC(:,33) !PLOSS(WR_MO2) = +KTR39+KR17*<WR_MO2>+KR17*<WR_MO2>+KR18*<WR_SO2> - PLOSS(:,85) = +TPK%KTR39(:)+TPK%KR17(:)*PCONC(:,85)+TPK%KR17(:)*PCONC(:,85)+TP& -&K%KR18(:)*PCONC(:,80) + PLOSS(:,86) = +TPK%KTR39(:)+TPK%KR17(:)*PCONC(:,86)+TPK%KR17(:)*PCONC(:,86)+TP& +&K%KR18(:)*PCONC(:,81) ! !PPROD(WR_OP1) = +KTR20*<OP1>+KR18*<WR_MO2>*<WR_SO2> - PPROD(:,86) = +TPK%KTR20(:)*PCONC(:,28)+TPK%KR18(:)*PCONC(:,85)*PCONC(:,80) + PPROD(:,87) = +TPK%KTR20(:)*PCONC(:,29)+TPK%KR18(:)*PCONC(:,86)*PCONC(:,81) !PLOSS(WR_OP1) = +KTR40 - PLOSS(:,86) = +TPK%KTR40(:) + PLOSS(:,87) = +TPK%KTR40(:) ! !PPROD(WR_ASO3) = +KR7*<WR_OH>*<WR_SO2>+KR16*<WR_NO3>*<WR_SO2>+KR18*<WR_MO2>*<W !R_SO2> - PPROD(:,87) = +TPK%KR7(:)*PCONC(:,77)*PCONC(:,80)+TPK%KR16(:)*PCONC(:,71)*PCON& -&C(:,80)+TPK%KR18(:)*PCONC(:,85)*PCONC(:,80) + PPROD(:,88) = +TPK%KR7(:)*PCONC(:,78)*PCONC(:,81)+TPK%KR16(:)*PCONC(:,72)*PCON& +&C(:,81)+TPK%KR18(:)*PCONC(:,86)*PCONC(:,81) !PLOSS(WR_ASO3) = +KR24*<W_O2> - PLOSS(:,87) = +TPK%KR24(:)*TPK%W_O2(:) + PLOSS(:,88) = +TPK%KR24(:)*TPK%W_O2(:) ! !PPROD(WR_ASO4) = +KR15*<WR_NO3>*<WR_SULF>+KR26*<WR_ASO5>*<WR_ASO5>+KR26*<WR_AS !O5>*<WR_ASO5> - PPROD(:,88) = +TPK%KR15(:)*PCONC(:,71)*PCONC(:,81)+TPK%KR26(:)*PCONC(:,89)*PCO& -&NC(:,89)+TPK%KR26(:)*PCONC(:,89)*PCONC(:,89) + PPROD(:,89) = +TPK%KR15(:)*PCONC(:,72)*PCONC(:,82)+TPK%KR26(:)*PCONC(:,90)*PCO& +&NC(:,90)+TPK%KR26(:)*PCONC(:,90)*PCONC(:,90) !PLOSS(WR_ASO4) = +KR28 - PLOSS(:,88) = +TPK%KR28(:) + PLOSS(:,89) = +TPK%KR28(:) ! !PPROD(WR_ASO5) = +KR24*<WR_ASO3>*<W_O2> - PPROD(:,89) = +TPK%KR24(:)*PCONC(:,87)*TPK%W_O2(:) + PPROD(:,90) = +TPK%KR24(:)*PCONC(:,88)*TPK%W_O2(:) !PLOSS(WR_ASO5) = +KR25*<WR_HO2>+KR26*<WR_ASO5>+KR26*<WR_ASO5> - PLOSS(:,89) = +TPK%KR25(:)*PCONC(:,78)+TPK%KR26(:)*PCONC(:,89)+TPK%KR26(:)*PCO& -&NC(:,89) -! -!PPROD(WR_AHSO5) = +KR25*<WR_ASO5>*<WR_HO2> - PPROD(:,90) = +TPK%KR25(:)*PCONC(:,89)*PCONC(:,78) -!PLOSS(WR_AHSO5) = +KR27*<WR_SO2> - PLOSS(:,90) = +TPK%KR27(:)*PCONC(:,80) + PLOSS(:,90) = +TPK%KR25(:)*PCONC(:,79)+TPK%KR26(:)*PCONC(:,90)+TPK%KR26(:)*PCO& +&NC(:,90) ! RETURN END SUBROUTINE SUB8 ! SUBROUTINE SUB9 ! -!Indices 91 a 91 +!Indices 91 a 92 ! ! +!PPROD(WR_AHSO5) = +KR25*<WR_ASO5>*<WR_HO2> + PPROD(:,91) = +TPK%KR25(:)*PCONC(:,90)*PCONC(:,79) +!PLOSS(WR_AHSO5) = +KR27*<WR_SO2> + PLOSS(:,91) = +TPK%KR27(:)*PCONC(:,81) +! !PPROD(WR_AHMS) = +KR21*<WR_SO2>*<WR_HCHO> - PPROD(:,91) = +TPK%KR21(:)*PCONC(:,80)*PCONC(:,82) + PPROD(:,92) = +TPK%KR21(:)*PCONC(:,81)*PCONC(:,83) !PLOSS(WR_AHMS) = +KR22+KR23*<WR_OH> - PLOSS(:,91) = +TPK%KR22(:)+TPK%KR23(:)*PCONC(:,77) + PLOSS(:,92) = +TPK%KR22(:)+TPK%KR23(:)*PCONC(:,78) ! RETURN END SUBROUTINE SUB9 @@ -5116,7 +5158,7 @@ TPK%O3P(:)=(TPK%K001(:)*PCONC(:,JP_NO2)+TPK%K003(:)*PCONC(:,JP_O3)+TPK%K008(:)*P &0.09000*TPK%K080(:)*PCONC(:,JP_BIO)*PCONC(:,JP_O3))/& &(TPK%K018(:)*TPK%O2(:)+TPK%K019(:)*PCONC(:,JP_O3)+TPK%K029(:)*PCONC(:,JP_NO)+& &TPK%K030(:)*PCONC(:,JP_NO2)+TPK%K031(:)*PCONC(:,JP_NO2)+TPK%K054(:)*PCONC(:,JP_BIO)+& - &TPK%K055(:)*PCONC(:,JP_CARBO)) + &TPK%K055(:)*PCONC(:,JP_CARBO)+TPK%K134(:)*PCONC(:,JP_DMS)) ! /END_CODE/ CALL SUB0 CALL SUB1 @@ -5132,22 +5174,22 @@ SUBROUTINE SUB0 ! ! !PPROD(O3) = +K018*<O3P>*<O2>+0.17307*K0102*<CARBOP>*<HO2> - PPROD(:,1) = +TPK%K018(:)*TPK%O3P(:)*TPK%O2(:)+0.17307*TPK%K0102(:)*PCONC(:,39& -&)*PCONC(:,15) + PPROD(:,1) = +TPK%K018(:)*TPK%O3P(:)*TPK%O2(:)+0.17307*TPK%K0102(:)*PCONC(:,40& +&)*PCONC(:,16) !PLOSS(O3) = +K002+K003+K019*<O3P>+K023*<OH>+K024*<HO2>+K042*<NO>+K043*<NO2>+K0 !79*<ALKE>+K080*<BIO>+K081*<CARBO>+K082*<PAN>+K087*<ADD> PLOSS(:,1) = +TPK%K002(:)+TPK%K003(:)+TPK%K019(:)*TPK%O3P(:)+TPK%K023(:)*PCONC& -&(:,14)+TPK%K024(:)*PCONC(:,15)+TPK%K042(:)*PCONC(:,3)+TPK%K043(:)*PCONC(:,4)+T& -&PK%K079(:)*PCONC(:,19)+TPK%K080(:)*PCONC(:,20)+TPK%K081(:)*PCONC(:,25)+TPK%K08& -&2(:)*PCONC(:,27)+TPK%K087(:)*PCONC(:,37) +&(:,15)+TPK%K024(:)*PCONC(:,16)+TPK%K042(:)*PCONC(:,3)+TPK%K043(:)*PCONC(:,4)+T& +&PK%K079(:)*PCONC(:,20)+TPK%K080(:)*PCONC(:,21)+TPK%K081(:)*PCONC(:,26)+TPK%K08& +&2(:)*PCONC(:,28)+TPK%K087(:)*PCONC(:,38) ! !PPROD(H2O2) = +K027*<HO2>*<HO2>+K028*<HO2>*<HO2>*<H2O>+0.01833*K079*<ALKE>*<O3 !>+0.00100*K080*<BIO>*<O3> - PPROD(:,2) = +TPK%K027(:)*PCONC(:,15)*PCONC(:,15)+TPK%K028(:)*PCONC(:,15)*PCON& -&C(:,15)*TPK%H2O(:)+0.01833*TPK%K079(:)*PCONC(:,19)*PCONC(:,1)+0.00100*TPK%K080& -&(:)*PCONC(:,20)*PCONC(:,1) + PPROD(:,2) = +TPK%K027(:)*PCONC(:,16)*PCONC(:,16)+TPK%K028(:)*PCONC(:,16)*PCON& +&C(:,16)*TPK%H2O(:)+0.01833*TPK%K079(:)*PCONC(:,20)*PCONC(:,1)+0.00100*TPK%K080& +&(:)*PCONC(:,21)*PCONC(:,1) !PLOSS(H2O2) = +K009+K026*<OH> - PLOSS(:,2) = +TPK%K009(:)+TPK%K026(:)*PCONC(:,14) + PLOSS(:,2) = +TPK%K009(:)+TPK%K026(:)*PCONC(:,15) ! !PPROD(NO) = +K001*<NO2>+K004*<HONO>+K007*<NO3>+K030*<O3P>*<NO2>+K046*<NO3>*<NO !2> @@ -5156,11 +5198,11 @@ SUBROUTINE SUB0 !PLOSS(NO) = +K029*<O3P>+K032*<OH>+K035*<HO2>+K042*<O3>+K044*<NO>*<O2>+K044*<NO !>*<O2>+K045*<NO3>+K090*<MO2>+K091*<ALKAP>+K092*<ALKEP>+K093*<BIOP>+K094*<AROP> !+K095*<CARBOP>+K096*<OLN>+K130*<XO2> - PLOSS(:,3) = +TPK%K029(:)*TPK%O3P(:)+TPK%K032(:)*PCONC(:,14)+TPK%K035(:)*PCONC& -&(:,15)+TPK%K042(:)*PCONC(:,1)+TPK%K044(:)*PCONC(:,3)*TPK%O2(:)+TPK%K044(:)*PCO& -&NC(:,3)*TPK%O2(:)+TPK%K045(:)*PCONC(:,5)+TPK%K090(:)*PCONC(:,32)+TPK%K091(:)*P& -&CONC(:,33)+TPK%K092(:)*PCONC(:,34)+TPK%K093(:)*PCONC(:,35)+TPK%K094(:)*PCONC(:& -&,38)+TPK%K095(:)*PCONC(:,39)+TPK%K096(:)*PCONC(:,40)+TPK%K130(:)*PCONC(:,41) + PLOSS(:,3) = +TPK%K029(:)*TPK%O3P(:)+TPK%K032(:)*PCONC(:,15)+TPK%K035(:)*PCONC& +&(:,16)+TPK%K042(:)*PCONC(:,1)+TPK%K044(:)*PCONC(:,3)*TPK%O2(:)+TPK%K044(:)*PCO& +&NC(:,3)*TPK%O2(:)+TPK%K045(:)*PCONC(:,5)+TPK%K090(:)*PCONC(:,33)+TPK%K091(:)*P& +&CONC(:,34)+TPK%K092(:)*PCONC(:,35)+TPK%K093(:)*PCONC(:,36)+TPK%K094(:)*PCONC(:& +&,39)+TPK%K095(:)*PCONC(:,40)+TPK%K096(:)*PCONC(:,41)+TPK%K130(:)*PCONC(:,42) ! !PPROD(NO2) = +K005*<HNO3>+0.65*K006*<HNO4>+K008*<NO3>+K017*<ONIT>+K029*<O3P>*< !NO>+K034*<OH>*<NO3>+K035*<HO2>*<NO>+K037*<HNO4>+0.7*K038*<HO2>*<NO3>+K039*<OH> @@ -5172,53 +5214,53 @@ SUBROUTINE SUB0 !ARBOP>*<NO>+1.81599*K096*<OLN>*<NO>+0.32440*K110*<OLN>*<MO2>+0.00000*K116*<OLN !>*<CARBOP>+0.00000*K118*<OLN>*<OLN>+K119*<MO2>*<NO3>+K120*<ALKAP>*<NO3>+K121*< !ALKEP>*<NO3>+K122*<BIOP>*<NO3>+K123*<AROP>*<NO3>+K124*<CARBOP>*<NO3>+1.74072*K -!125*<OLN>*<NO3>+K130*<XO2>*<NO>+K131*<XO2>*<NO3> +!125*<OLN>*<NO3>+K130*<XO2>*<NO>+K131*<XO2>*<NO3>+K133*<DMS>*<NO3> PPROD(:,4) = +TPK%K005(:)*PCONC(:,8)+0.65*TPK%K006(:)*PCONC(:,9)+TPK%K008(:)*P& -&CONC(:,5)+TPK%K017(:)*PCONC(:,26)+TPK%K029(:)*TPK%O3P(:)*PCONC(:,3)+TPK%K034(:& -&)*PCONC(:,14)*PCONC(:,5)+TPK%K035(:)*PCONC(:,15)*PCONC(:,3)+TPK%K037(:)*PCONC(& -&:,9)+0.7*TPK%K038(:)*PCONC(:,15)*PCONC(:,5)+TPK%K039(:)*PCONC(:,14)*PCONC(:,7)& -&+TPK%K041(:)*PCONC(:,14)*PCONC(:,9)+TPK%K042(:)*PCONC(:,1)*PCONC(:,3)+TPK%K044& +&CONC(:,5)+TPK%K017(:)*PCONC(:,27)+TPK%K029(:)*TPK%O3P(:)*PCONC(:,3)+TPK%K034(:& +&)*PCONC(:,15)*PCONC(:,5)+TPK%K035(:)*PCONC(:,16)*PCONC(:,3)+TPK%K037(:)*PCONC(& +&:,9)+0.7*TPK%K038(:)*PCONC(:,16)*PCONC(:,5)+TPK%K039(:)*PCONC(:,15)*PCONC(:,7)& +&+TPK%K041(:)*PCONC(:,15)*PCONC(:,9)+TPK%K042(:)*PCONC(:,1)*PCONC(:,3)+TPK%K044& &(:)*PCONC(:,3)*PCONC(:,3)*TPK%O2(:)+TPK%K044(:)*PCONC(:,3)*PCONC(:,3)*TPK%O2(:& &)+TPK%K045(:)*PCONC(:,5)*PCONC(:,3)+TPK%K045(:)*PCONC(:,5)*PCONC(:,3)+TPK%K046& &(:)*PCONC(:,5)*PCONC(:,4)+TPK%K048(:)*PCONC(:,6)+TPK%K049(:)*PCONC(:,5)*PCONC(& -&:,5)+TPK%K049(:)*PCONC(:,5)*PCONC(:,5)+TPK%K071(:)*PCONC(:,26)*PCONC(:,14)+0.1& -&0530*TPK%K074(:)*PCONC(:,25)*PCONC(:,5)+0.40*TPK%K078(:)*PCONC(:,27)*PCONC(:,5& -&)+0.70*TPK%K082(:)*PCONC(:,27)*PCONC(:,1)+TPK%K089(:)*PCONC(:,27)+TPK%K090(:)*& -&PCONC(:,32)*PCONC(:,3)+0.91541*TPK%K091(:)*PCONC(:,33)*PCONC(:,3)+TPK%K092(:)*& -&PCONC(:,34)*PCONC(:,3)+0.84700*TPK%K093(:)*PCONC(:,35)*PCONC(:,3)+0.95115*TPK%& -&K094(:)*PCONC(:,38)*PCONC(:,3)+TPK%K095(:)*PCONC(:,39)*PCONC(:,3)+1.81599*TPK%& -&K096(:)*PCONC(:,40)*PCONC(:,3)+0.32440*TPK%K110(:)*PCONC(:,40)*PCONC(:,32)+0.0& -&0000*TPK%K116(:)*PCONC(:,40)*PCONC(:,39)+0.00000*TPK%K118(:)*PCONC(:,40)*PCONC& -&(:,40)+TPK%K119(:)*PCONC(:,32)*PCONC(:,5)+TPK%K120(:)*PCONC(:,33)*PCONC(:,5)+T& -&PK%K121(:)*PCONC(:,34)*PCONC(:,5)+TPK%K122(:)*PCONC(:,35)*PCONC(:,5)+TPK%K123(& -&:)*PCONC(:,38)*PCONC(:,5)+TPK%K124(:)*PCONC(:,39)*PCONC(:,5)+1.74072*TPK%K125(& -&:)*PCONC(:,40)*PCONC(:,5)+TPK%K130(:)*PCONC(:,41)*PCONC(:,3)+TPK%K131(:)*PCONC& -&(:,41)*PCONC(:,5) +&:,5)+TPK%K049(:)*PCONC(:,5)*PCONC(:,5)+TPK%K071(:)*PCONC(:,27)*PCONC(:,15)+0.1& +&0530*TPK%K074(:)*PCONC(:,26)*PCONC(:,5)+0.40*TPK%K078(:)*PCONC(:,28)*PCONC(:,5& +&)+0.70*TPK%K082(:)*PCONC(:,28)*PCONC(:,1)+TPK%K089(:)*PCONC(:,28)+TPK%K090(:)*& +&PCONC(:,33)*PCONC(:,3)+0.91541*TPK%K091(:)*PCONC(:,34)*PCONC(:,3)+TPK%K092(:)*& +&PCONC(:,35)*PCONC(:,3)+0.84700*TPK%K093(:)*PCONC(:,36)*PCONC(:,3)+0.95115*TPK%& +&K094(:)*PCONC(:,39)*PCONC(:,3)+TPK%K095(:)*PCONC(:,40)*PCONC(:,3)+1.81599*TPK%& +&K096(:)*PCONC(:,41)*PCONC(:,3)+0.32440*TPK%K110(:)*PCONC(:,41)*PCONC(:,33)+0.0& +&0000*TPK%K116(:)*PCONC(:,41)*PCONC(:,40)+0.00000*TPK%K118(:)*PCONC(:,41)*PCONC& +&(:,41)+TPK%K119(:)*PCONC(:,33)*PCONC(:,5)+TPK%K120(:)*PCONC(:,34)*PCONC(:,5)+T& +&PK%K121(:)*PCONC(:,35)*PCONC(:,5)+TPK%K122(:)*PCONC(:,36)*PCONC(:,5)+TPK%K123(& +&:)*PCONC(:,39)*PCONC(:,5)+TPK%K124(:)*PCONC(:,40)*PCONC(:,5)+1.74072*TPK%K125(& +&:)*PCONC(:,41)*PCONC(:,5)+TPK%K130(:)*PCONC(:,42)*PCONC(:,3)+TPK%K131(:)*PCONC& +&(:,42)*PCONC(:,5)+TPK%K133(:)*PCONC(:,11)*PCONC(:,5) !PLOSS(NO2) = +K001+K030*<O3P>+K031*<O3P>+K033*<OH>+K036*<HO2>+K043*<O3>+K046*< !NO3>+K047*<NO3>+K083*<PHO>+K085*<ADD>+K088*<CARBOP> PLOSS(:,4) = +TPK%K001(:)+TPK%K030(:)*TPK%O3P(:)+TPK%K031(:)*TPK%O3P(:)+TPK%K0& -&33(:)*PCONC(:,14)+TPK%K036(:)*PCONC(:,15)+TPK%K043(:)*PCONC(:,1)+TPK%K046(:)*P& -&CONC(:,5)+TPK%K047(:)*PCONC(:,5)+TPK%K083(:)*PCONC(:,36)+TPK%K085(:)*PCONC(:,3& -&7)+TPK%K088(:)*PCONC(:,39) +&33(:)*PCONC(:,15)+TPK%K036(:)*PCONC(:,16)+TPK%K043(:)*PCONC(:,1)+TPK%K046(:)*P& +&CONC(:,5)+TPK%K047(:)*PCONC(:,5)+TPK%K083(:)*PCONC(:,37)+TPK%K085(:)*PCONC(:,3& +&8)+TPK%K088(:)*PCONC(:,40) ! !PPROD(NO3) = +0.35*K006*<HNO4>+K031*<O3P>*<NO2>+K040*<OH>*<HNO3>+K043*<O3>*<NO !2>+K048*<N2O5>+0.71893*K070*<PAN>*<OH>+0.60*K078*<PAN>*<NO3> PPROD(:,5) = +0.35*TPK%K006(:)*PCONC(:,9)+TPK%K031(:)*TPK%O3P(:)*PCONC(:,4)+TP& -&K%K040(:)*PCONC(:,14)*PCONC(:,8)+TPK%K043(:)*PCONC(:,1)*PCONC(:,4)+TPK%K048(:)& -&*PCONC(:,6)+0.71893*TPK%K070(:)*PCONC(:,27)*PCONC(:,14)+0.60*TPK%K078(:)*PCONC& -&(:,27)*PCONC(:,5) +&K%K040(:)*PCONC(:,15)*PCONC(:,8)+TPK%K043(:)*PCONC(:,1)*PCONC(:,4)+TPK%K048(:)& +&*PCONC(:,6)+0.71893*TPK%K070(:)*PCONC(:,28)*PCONC(:,15)+0.60*TPK%K078(:)*PCONC& +&(:,28)*PCONC(:,5) !PLOSS(NO3) = +K007+K008+K034*<OH>+K038*<HO2>+K045*<NO>+K046*<NO2>+K047*<NO2>+K !049*<NO3>+K049*<NO3>+K072*<HCHO>+K073*<ALD>+K074*<CARBO>+K075*<ARO>+K076*<ALKE !>+K077*<BIO>+K078*<PAN>+K119*<MO2>+K120*<ALKAP>+K121*<ALKEP>+K122*<BIOP>+K123* -!<AROP>+K124*<CARBOP>+K125*<OLN>+K131*<XO2> - PLOSS(:,5) = +TPK%K007(:)+TPK%K008(:)+TPK%K034(:)*PCONC(:,14)+TPK%K038(:)*PCON& -&C(:,15)+TPK%K045(:)*PCONC(:,3)+TPK%K046(:)*PCONC(:,4)+TPK%K047(:)*PCONC(:,4)+T& -&PK%K049(:)*PCONC(:,5)+TPK%K049(:)*PCONC(:,5)+TPK%K072(:)*PCONC(:,22)+TPK%K073(& -&:)*PCONC(:,23)+TPK%K074(:)*PCONC(:,25)+TPK%K075(:)*PCONC(:,21)+TPK%K076(:)*PCO& -&NC(:,19)+TPK%K077(:)*PCONC(:,20)+TPK%K078(:)*PCONC(:,27)+TPK%K119(:)*PCONC(:,3& -&2)+TPK%K120(:)*PCONC(:,33)+TPK%K121(:)*PCONC(:,34)+TPK%K122(:)*PCONC(:,35)+TPK& -&%K123(:)*PCONC(:,38)+TPK%K124(:)*PCONC(:,39)+TPK%K125(:)*PCONC(:,40)+TPK%K131(& -&:)*PCONC(:,41) +!<AROP>+K124*<CARBOP>+K125*<OLN>+K131*<XO2>+K133*<DMS> + PLOSS(:,5) = +TPK%K007(:)+TPK%K008(:)+TPK%K034(:)*PCONC(:,15)+TPK%K038(:)*PCON& +&C(:,16)+TPK%K045(:)*PCONC(:,3)+TPK%K046(:)*PCONC(:,4)+TPK%K047(:)*PCONC(:,4)+T& +&PK%K049(:)*PCONC(:,5)+TPK%K049(:)*PCONC(:,5)+TPK%K072(:)*PCONC(:,23)+TPK%K073(& +&:)*PCONC(:,24)+TPK%K074(:)*PCONC(:,26)+TPK%K075(:)*PCONC(:,22)+TPK%K076(:)*PCO& +&NC(:,20)+TPK%K077(:)*PCONC(:,21)+TPK%K078(:)*PCONC(:,28)+TPK%K119(:)*PCONC(:,3& +&3)+TPK%K120(:)*PCONC(:,34)+TPK%K121(:)*PCONC(:,35)+TPK%K122(:)*PCONC(:,36)+TPK& +&%K123(:)*PCONC(:,39)+TPK%K124(:)*PCONC(:,40)+TPK%K125(:)*PCONC(:,41)+TPK%K131(& +&:)*PCONC(:,42)+TPK%K133(:)*PCONC(:,11) ! !PPROD(N2O5) = +K047*<NO3>*<NO2> PPROD(:,6) = +TPK%K047(:)*PCONC(:,5)*PCONC(:,4) @@ -5226,29 +5268,29 @@ SUBROUTINE SUB0 PLOSS(:,6) = +TPK%K048(:) ! !PPROD(HONO) = +K032*<OH>*<NO>+K085*<ADD>*<NO2> - PPROD(:,7) = +TPK%K032(:)*PCONC(:,14)*PCONC(:,3)+TPK%K085(:)*PCONC(:,37)*PCONC& + PPROD(:,7) = +TPK%K032(:)*PCONC(:,15)*PCONC(:,3)+TPK%K085(:)*PCONC(:,38)*PCONC& &(:,4) !PLOSS(HONO) = +K004+K039*<OH> - PLOSS(:,7) = +TPK%K004(:)+TPK%K039(:)*PCONC(:,14) + PLOSS(:,7) = +TPK%K004(:)+TPK%K039(:)*PCONC(:,15) ! !PPROD(HNO3) = +K033*<OH>*<NO2>+0.3*K038*<HO2>*<NO3>+K072*<HCHO>*<NO3>+K073*<AL !D>*<NO3>+0.91567*K074*<CARBO>*<NO3>+K075*<ARO>*<NO3> - PPROD(:,8) = +TPK%K033(:)*PCONC(:,14)*PCONC(:,4)+0.3*TPK%K038(:)*PCONC(:,15)*P& -&CONC(:,5)+TPK%K072(:)*PCONC(:,22)*PCONC(:,5)+TPK%K073(:)*PCONC(:,23)*PCONC(:,5& -&)+0.91567*TPK%K074(:)*PCONC(:,25)*PCONC(:,5)+TPK%K075(:)*PCONC(:,21)*PCONC(:,5& + PPROD(:,8) = +TPK%K033(:)*PCONC(:,15)*PCONC(:,4)+0.3*TPK%K038(:)*PCONC(:,16)*P& +&CONC(:,5)+TPK%K072(:)*PCONC(:,23)*PCONC(:,5)+TPK%K073(:)*PCONC(:,24)*PCONC(:,5& +&)+0.91567*TPK%K074(:)*PCONC(:,26)*PCONC(:,5)+TPK%K075(:)*PCONC(:,22)*PCONC(:,5& &) !PLOSS(HNO3) = +K005+K040*<OH> - PLOSS(:,8) = +TPK%K005(:)+TPK%K040(:)*PCONC(:,14) + PLOSS(:,8) = +TPK%K005(:)+TPK%K040(:)*PCONC(:,15) ! !PPROD(HNO4) = +K036*<HO2>*<NO2> - PPROD(:,9) = +TPK%K036(:)*PCONC(:,15)*PCONC(:,4) + PPROD(:,9) = +TPK%K036(:)*PCONC(:,16)*PCONC(:,4) !PLOSS(HNO4) = +K006+K037+K041*<OH> - PLOSS(:,9) = +TPK%K006(:)+TPK%K037(:)+TPK%K041(:)*PCONC(:,14) + PLOSS(:,9) = +TPK%K006(:)+TPK%K037(:)+TPK%K041(:)*PCONC(:,15) ! !PPROD(NH3) = 0.0 PPROD(:,10) = 0.0 !PLOSS(NH3) = +K050*<OH> - PLOSS(:,10) = +TPK%K050(:)*PCONC(:,14) + PLOSS(:,10) = +TPK%K050(:)*PCONC(:,15) ! RETURN END SUBROUTINE SUB0 @@ -5258,29 +5300,36 @@ SUBROUTINE SUB1 !Indices 11 a 20 ! ! -!PPROD(SO2) = 0.0 +!PPROD(DMS) = 0.0 PPROD(:,11) = 0.0 +!PLOSS(DMS) = +K133*<NO3>+K134*<O3P>+K135*<OH> + PLOSS(:,11) = +TPK%K133(:)*PCONC(:,5)+TPK%K134(:)*TPK%O3P(:)+TPK%K135(:)*PCONC& +&(:,15) +! +!PPROD(SO2) = +K133*<DMS>*<NO3>+K134*<DMS>*<O3P>+0.8*K135*<DMS>*<OH> + PPROD(:,12) = +TPK%K133(:)*PCONC(:,11)*PCONC(:,5)+TPK%K134(:)*PCONC(:,11)*TPK%& +&O3P(:)+0.8*TPK%K135(:)*PCONC(:,11)*PCONC(:,15) !PLOSS(SO2) = +K052*<OH> - PLOSS(:,11) = +TPK%K052(:)*PCONC(:,14) + PLOSS(:,12) = +TPK%K052(:)*PCONC(:,15) ! !PPROD(SULF) = +K052*<OH>*<SO2> - PPROD(:,12) = +TPK%K052(:)*PCONC(:,14)*PCONC(:,11) + PPROD(:,13) = +TPK%K052(:)*PCONC(:,15)*PCONC(:,12) !PLOSS(SULF) = +K132 - PLOSS(:,12) = +TPK%K132(:) + PLOSS(:,13) = +TPK%K132(:) ! !PPROD(CO) = +K010*<HCHO>+K011*<HCHO>+K012*<ALD>+0.91924*K016*<CARBO>+0.01*K054 !*<BIO>*<O3P>+0.00878*K058*<ALKA>*<OH>+K062*<HCHO>*<OH>+1.01732*K065*<CARBO>*<O !H>+K072*<HCHO>*<NO3>+1.33723*K074*<CARBO>*<NO3>+0.35120*K079*<ALKE>*<O3>+0.360 !00*K080*<BIO>*<O3>+0.64728*K081*<CARBO>*<O3>+0.13*K082*<PAN>*<O3> - PPROD(:,13) = +TPK%K010(:)*PCONC(:,22)+TPK%K011(:)*PCONC(:,22)+TPK%K012(:)*PCO& -&NC(:,23)+0.91924*TPK%K016(:)*PCONC(:,25)+0.01*TPK%K054(:)*PCONC(:,20)*TPK%O3P(& -&:)+0.00878*TPK%K058(:)*PCONC(:,18)*PCONC(:,14)+TPK%K062(:)*PCONC(:,22)*PCONC(:& -&,14)+1.01732*TPK%K065(:)*PCONC(:,25)*PCONC(:,14)+TPK%K072(:)*PCONC(:,22)*PCONC& -&(:,5)+1.33723*TPK%K074(:)*PCONC(:,25)*PCONC(:,5)+0.35120*TPK%K079(:)*PCONC(:,1& -&9)*PCONC(:,1)+0.36000*TPK%K080(:)*PCONC(:,20)*PCONC(:,1)+0.64728*TPK%K081(:)*P& -&CONC(:,25)*PCONC(:,1)+0.13*TPK%K082(:)*PCONC(:,27)*PCONC(:,1) + PPROD(:,14) = +TPK%K010(:)*PCONC(:,23)+TPK%K011(:)*PCONC(:,23)+TPK%K012(:)*PCO& +&NC(:,24)+0.91924*TPK%K016(:)*PCONC(:,26)+0.01*TPK%K054(:)*PCONC(:,21)*TPK%O3P(& +&:)+0.00878*TPK%K058(:)*PCONC(:,19)*PCONC(:,15)+TPK%K062(:)*PCONC(:,23)*PCONC(:& +&,15)+1.01732*TPK%K065(:)*PCONC(:,26)*PCONC(:,15)+TPK%K072(:)*PCONC(:,23)*PCONC& +&(:,5)+1.33723*TPK%K074(:)*PCONC(:,26)*PCONC(:,5)+0.35120*TPK%K079(:)*PCONC(:,2& +&0)*PCONC(:,1)+0.36000*TPK%K080(:)*PCONC(:,21)*PCONC(:,1)+0.64728*TPK%K081(:)*P& +&CONC(:,26)*PCONC(:,1)+0.13*TPK%K082(:)*PCONC(:,28)*PCONC(:,1) !PLOSS(CO) = +K053*<OH> - PLOSS(:,13) = +TPK%K053(:)*PCONC(:,14) + PLOSS(:,14) = +TPK%K053(:)*PCONC(:,15) ! !PPROD(OH) = +K004*<HONO>+K005*<HNO3>+0.35*K006*<HNO4>+K009*<H2O2>+K009*<H2O2>+ !K013*<OP1>+K014*<OP2>+K022*<O1D>*<H2O>+K022*<O1D>*<H2O>+K024*<O3>*<HO2>+K035*< @@ -5288,30 +5337,31 @@ SUBROUTINE SUB1 !0.35*K068*<OP1>*<OH>+0.44925*K069*<OP2>*<OH>+0.39435*K079*<ALKE>*<O3>+0.28000* !K080*<BIO>*<O3>+0.20595*K081*<CARBO>*<O3>+0.036*K082*<PAN>*<O3>+K087*<ADD>*<O3 !> - PPROD(:,14) = +TPK%K004(:)*PCONC(:,7)+TPK%K005(:)*PCONC(:,8)+0.35*TPK%K006(:)*& + PPROD(:,15) = +TPK%K004(:)*PCONC(:,7)+TPK%K005(:)*PCONC(:,8)+0.35*TPK%K006(:)*& &PCONC(:,9)+TPK%K009(:)*PCONC(:,2)+TPK%K009(:)*PCONC(:,2)+TPK%K013(:)*PCONC(:,2& -&8)+TPK%K014(:)*PCONC(:,29)+TPK%K022(:)*TPK%O1D(:)*TPK%H2O(:)+TPK%K022(:)*TPK%O& -&1D(:)*TPK%H2O(:)+TPK%K024(:)*PCONC(:,1)*PCONC(:,15)+TPK%K035(:)*PCONC(:,15)*PC& -&ONC(:,3)+0.7*TPK%K038(:)*PCONC(:,15)*PCONC(:,5)+0.02*TPK%K054(:)*PCONC(:,20)*T& -&PK%O3P(:)+0.00878*TPK%K058(:)*PCONC(:,18)*PCONC(:,14)+0.35*TPK%K068(:)*PCONC(:& -&,28)*PCONC(:,14)+0.44925*TPK%K069(:)*PCONC(:,29)*PCONC(:,14)+0.39435*TPK%K079(& -&:)*PCONC(:,19)*PCONC(:,1)+0.28000*TPK%K080(:)*PCONC(:,20)*PCONC(:,1)+0.20595*T& -&PK%K081(:)*PCONC(:,25)*PCONC(:,1)+0.036*TPK%K082(:)*PCONC(:,27)*PCONC(:,1)+TPK& -&%K087(:)*PCONC(:,37)*PCONC(:,1) +&9)+TPK%K014(:)*PCONC(:,30)+TPK%K022(:)*TPK%O1D(:)*TPK%H2O(:)+TPK%K022(:)*TPK%O& +&1D(:)*TPK%H2O(:)+TPK%K024(:)*PCONC(:,1)*PCONC(:,16)+TPK%K035(:)*PCONC(:,16)*PC& +&ONC(:,3)+0.7*TPK%K038(:)*PCONC(:,16)*PCONC(:,5)+0.02*TPK%K054(:)*PCONC(:,21)*T& +&PK%O3P(:)+0.00878*TPK%K058(:)*PCONC(:,19)*PCONC(:,15)+0.35*TPK%K068(:)*PCONC(:& +&,29)*PCONC(:,15)+0.44925*TPK%K069(:)*PCONC(:,30)*PCONC(:,15)+0.39435*TPK%K079(& +&:)*PCONC(:,20)*PCONC(:,1)+0.28000*TPK%K080(:)*PCONC(:,21)*PCONC(:,1)+0.20595*T& +&PK%K081(:)*PCONC(:,26)*PCONC(:,1)+0.036*TPK%K082(:)*PCONC(:,28)*PCONC(:,1)+TPK& +&%K087(:)*PCONC(:,38)*PCONC(:,1) !PLOSS(OH) = +K023*<O3>+K025*<HO2>+K026*<H2O2>+K032*<NO>+K033*<NO2>+K034*<NO3>+ !K039*<HONO>+K040*<HNO3>+K041*<HNO4>+K050*<NH3>+K051*<H2>+K052*<SO2>+K053*<CO>+ !K056*<CH4>+K057*<ETH>+K058*<ALKA>+K059*<ALKE>+K060*<BIO>+K061*<ARO>+K062*<HCHO !>+K063*<ALD>+K064*<KET>+K065*<CARBO>+K066*<ORA1>+K067*<ORA2>+K068*<OP1>+K069*< -!OP2>+K070*<PAN>+K071*<ONIT> - PLOSS(:,14) = +TPK%K023(:)*PCONC(:,1)+TPK%K025(:)*PCONC(:,15)+TPK%K026(:)*PCON& +!OP2>+K070*<PAN>+K071*<ONIT>+K135*<DMS> + PLOSS(:,15) = +TPK%K023(:)*PCONC(:,1)+TPK%K025(:)*PCONC(:,16)+TPK%K026(:)*PCON& &C(:,2)+TPK%K032(:)*PCONC(:,3)+TPK%K033(:)*PCONC(:,4)+TPK%K034(:)*PCONC(:,5)+TP& &K%K039(:)*PCONC(:,7)+TPK%K040(:)*PCONC(:,8)+TPK%K041(:)*PCONC(:,9)+TPK%K050(:)& -&*PCONC(:,10)+TPK%K051(:)*TPK%H2(:)+TPK%K052(:)*PCONC(:,11)+TPK%K053(:)*PCONC(:& -&,13)+TPK%K056(:)*PCONC(:,16)+TPK%K057(:)*PCONC(:,17)+TPK%K058(:)*PCONC(:,18)+T& -&PK%K059(:)*PCONC(:,19)+TPK%K060(:)*PCONC(:,20)+TPK%K061(:)*PCONC(:,21)+TPK%K06& -&2(:)*PCONC(:,22)+TPK%K063(:)*PCONC(:,23)+TPK%K064(:)*PCONC(:,24)+TPK%K065(:)*P& -&CONC(:,25)+TPK%K066(:)*PCONC(:,30)+TPK%K067(:)*PCONC(:,31)+TPK%K068(:)*PCONC(:& -&,28)+TPK%K069(:)*PCONC(:,29)+TPK%K070(:)*PCONC(:,27)+TPK%K071(:)*PCONC(:,26) +&*PCONC(:,10)+TPK%K051(:)*TPK%H2(:)+TPK%K052(:)*PCONC(:,12)+TPK%K053(:)*PCONC(:& +&,14)+TPK%K056(:)*PCONC(:,17)+TPK%K057(:)*PCONC(:,18)+TPK%K058(:)*PCONC(:,19)+T& +&PK%K059(:)*PCONC(:,20)+TPK%K060(:)*PCONC(:,21)+TPK%K061(:)*PCONC(:,22)+TPK%K06& +&2(:)*PCONC(:,23)+TPK%K063(:)*PCONC(:,24)+TPK%K064(:)*PCONC(:,25)+TPK%K065(:)*P& +&CONC(:,26)+TPK%K066(:)*PCONC(:,31)+TPK%K067(:)*PCONC(:,32)+TPK%K068(:)*PCONC(:& +&,29)+TPK%K069(:)*PCONC(:,30)+TPK%K070(:)*PCONC(:,28)+TPK%K071(:)*PCONC(:,27)+T& +&PK%K135(:)*PCONC(:,11) ! !PPROD(HO2) = +0.65*K006*<HNO4>+K011*<HCHO>+K011*<HCHO>+K012*<ALD>+K013*<OP1>+0 !.96205*K014*<OP2>+0.75830*K016*<CARBO>+K017*<ONIT>+K023*<O3>*<OH>+K026*<H2O2>* @@ -5330,79 +5380,73 @@ SUBROUTINE SUB1 !LN>+0.00000*K118*<OLN>*<OLN>+K119*<MO2>*<NO3>+0.81290*K120*<ALKAP>*<NO3>+K121* !<ALKEP>*<NO3>+K122*<BIOP>*<NO3>+K123*<AROP>*<NO3>+0.04915*K124*<CARBOP>*<NO3>+ !0.25928*K125*<OLN>*<NO3>+K127*<XO2>*<MO2> - PPROD(:,15) = +0.65*TPK%K006(:)*PCONC(:,9)+TPK%K011(:)*PCONC(:,22)+TPK%K011(:)& -&*PCONC(:,22)+TPK%K012(:)*PCONC(:,23)+TPK%K013(:)*PCONC(:,28)+0.96205*TPK%K014(& -&:)*PCONC(:,29)+0.75830*TPK%K016(:)*PCONC(:,25)+TPK%K017(:)*PCONC(:,26)+TPK%K02& -&3(:)*PCONC(:,1)*PCONC(:,14)+TPK%K026(:)*PCONC(:,2)*PCONC(:,14)+TPK%K034(:)*PCO& -&NC(:,14)*PCONC(:,5)+TPK%K037(:)*PCONC(:,9)+TPK%K051(:)*PCONC(:,14)*TPK%H2(:)+T& -&PK%K052(:)*PCONC(:,14)*PCONC(:,11)+TPK%K053(:)*PCONC(:,13)*PCONC(:,14)+0.28*TP& -&K%K054(:)*PCONC(:,20)*TPK%O3P(:)+0.12793*TPK%K058(:)*PCONC(:,18)*PCONC(:,14)+0& -&.10318*TPK%K061(:)*PCONC(:,21)*PCONC(:,14)+TPK%K062(:)*PCONC(:,22)*PCONC(:,14)& -&+0.51208*TPK%K065(:)*PCONC(:,25)*PCONC(:,14)+TPK%K066(:)*PCONC(:,30)*PCONC(:,1& -&4)+0.02915*TPK%K069(:)*PCONC(:,29)*PCONC(:,14)+0.28107*TPK%K070(:)*PCONC(:,27)& -&*PCONC(:,14)+TPK%K072(:)*PCONC(:,22)*PCONC(:,5)+0.63217*TPK%K074(:)*PCONC(:,25& -&)*PCONC(:,5)+0.23451*TPK%K079(:)*PCONC(:,19)*PCONC(:,1)+0.30000*TPK%K080(:)*PC& -&ONC(:,20)*PCONC(:,1)+0.28441*TPK%K081(:)*PCONC(:,25)*PCONC(:,1)+0.08*TPK%K082(& -&:)*PCONC(:,27)*PCONC(:,1)+0.02*TPK%K086(:)*PCONC(:,37)*TPK%O2(:)+TPK%K090(:)*P& -&CONC(:,32)*PCONC(:,3)+0.74265*TPK%K091(:)*PCONC(:,33)*PCONC(:,3)+TPK%K092(:)*P& -&CONC(:,34)*PCONC(:,3)+0.84700*TPK%K093(:)*PCONC(:,35)*PCONC(:,3)+0.95115*TPK%K& -&094(:)*PCONC(:,38)*PCONC(:,3)+0.12334*TPK%K095(:)*PCONC(:,39)*PCONC(:,3)+0.184& -&01*TPK%K096(:)*PCONC(:,40)*PCONC(:,3)+0.66*TPK%K104(:)*PCONC(:,32)*PCONC(:,32)& -&+0.98383*TPK%K105(:)*PCONC(:,33)*PCONC(:,32)+TPK%K106(:)*PCONC(:,34)*PCONC(:,3& -&2)+1.00000*TPK%K107(:)*PCONC(:,35)*PCONC(:,32)+1.02767*TPK%K108(:)*PCONC(:,38)& -&*PCONC(:,32)+0.82998*TPK%K109(:)*PCONC(:,39)*PCONC(:,32)+0.67560*TPK%K110(:)*P& -&CONC(:,40)*PCONC(:,32)+0.48079*TPK%K111(:)*PCONC(:,33)*PCONC(:,39)+0.50078*TPK& -&%K112(:)*PCONC(:,34)*PCONC(:,39)+0.50600*TPK%K113(:)*PCONC(:,35)*PCONC(:,39)+T& -&PK%K114(:)*PCONC(:,38)*PCONC(:,39)+0.07566*TPK%K115(:)*PCONC(:,39)*PCONC(:,39)& -&+0.17599*TPK%K116(:)*PCONC(:,40)*PCONC(:,39)+TPK%K117(:)*PCONC(:,40)*PCONC(:,4& -&0)+0.00000*TPK%K118(:)*PCONC(:,40)*PCONC(:,40)+TPK%K119(:)*PCONC(:,32)*PCONC(:& -&,5)+0.81290*TPK%K120(:)*PCONC(:,33)*PCONC(:,5)+TPK%K121(:)*PCONC(:,34)*PCONC(:& -&,5)+TPK%K122(:)*PCONC(:,35)*PCONC(:,5)+TPK%K123(:)*PCONC(:,38)*PCONC(:,5)+0.04& -&915*TPK%K124(:)*PCONC(:,39)*PCONC(:,5)+0.25928*TPK%K125(:)*PCONC(:,40)*PCONC(:& -&,5)+TPK%K127(:)*PCONC(:,41)*PCONC(:,32) + PPROD(:,16) = +0.65*TPK%K006(:)*PCONC(:,9)+TPK%K011(:)*PCONC(:,23)+TPK%K011(:)& +&*PCONC(:,23)+TPK%K012(:)*PCONC(:,24)+TPK%K013(:)*PCONC(:,29)+0.96205*TPK%K014(& +&:)*PCONC(:,30)+0.75830*TPK%K016(:)*PCONC(:,26)+TPK%K017(:)*PCONC(:,27)+TPK%K02& +&3(:)*PCONC(:,1)*PCONC(:,15)+TPK%K026(:)*PCONC(:,2)*PCONC(:,15)+TPK%K034(:)*PCO& +&NC(:,15)*PCONC(:,5)+TPK%K037(:)*PCONC(:,9)+TPK%K051(:)*PCONC(:,15)*TPK%H2(:)+T& +&PK%K052(:)*PCONC(:,15)*PCONC(:,12)+TPK%K053(:)*PCONC(:,14)*PCONC(:,15)+0.28*TP& +&K%K054(:)*PCONC(:,21)*TPK%O3P(:)+0.12793*TPK%K058(:)*PCONC(:,19)*PCONC(:,15)+0& +&.10318*TPK%K061(:)*PCONC(:,22)*PCONC(:,15)+TPK%K062(:)*PCONC(:,23)*PCONC(:,15)& +&+0.51208*TPK%K065(:)*PCONC(:,26)*PCONC(:,15)+TPK%K066(:)*PCONC(:,31)*PCONC(:,1& +&5)+0.02915*TPK%K069(:)*PCONC(:,30)*PCONC(:,15)+0.28107*TPK%K070(:)*PCONC(:,28)& +&*PCONC(:,15)+TPK%K072(:)*PCONC(:,23)*PCONC(:,5)+0.63217*TPK%K074(:)*PCONC(:,26& +&)*PCONC(:,5)+0.23451*TPK%K079(:)*PCONC(:,20)*PCONC(:,1)+0.30000*TPK%K080(:)*PC& +&ONC(:,21)*PCONC(:,1)+0.28441*TPK%K081(:)*PCONC(:,26)*PCONC(:,1)+0.08*TPK%K082(& +&:)*PCONC(:,28)*PCONC(:,1)+0.02*TPK%K086(:)*PCONC(:,38)*TPK%O2(:)+TPK%K090(:)*P& +&CONC(:,33)*PCONC(:,3)+0.74265*TPK%K091(:)*PCONC(:,34)*PCONC(:,3)+TPK%K092(:)*P& +&CONC(:,35)*PCONC(:,3)+0.84700*TPK%K093(:)*PCONC(:,36)*PCONC(:,3)+0.95115*TPK%K& +&094(:)*PCONC(:,39)*PCONC(:,3)+0.12334*TPK%K095(:)*PCONC(:,40)*PCONC(:,3)+0.184& +&01*TPK%K096(:)*PCONC(:,41)*PCONC(:,3)+0.66*TPK%K104(:)*PCONC(:,33)*PCONC(:,33)& +&+0.98383*TPK%K105(:)*PCONC(:,34)*PCONC(:,33)+TPK%K106(:)*PCONC(:,35)*PCONC(:,3& +&3)+1.00000*TPK%K107(:)*PCONC(:,36)*PCONC(:,33)+1.02767*TPK%K108(:)*PCONC(:,39)& +&*PCONC(:,33)+0.82998*TPK%K109(:)*PCONC(:,40)*PCONC(:,33)+0.67560*TPK%K110(:)*P& +&CONC(:,41)*PCONC(:,33)+0.48079*TPK%K111(:)*PCONC(:,34)*PCONC(:,40)+0.50078*TPK& +&%K112(:)*PCONC(:,35)*PCONC(:,40)+0.50600*TPK%K113(:)*PCONC(:,36)*PCONC(:,40)+T& +&PK%K114(:)*PCONC(:,39)*PCONC(:,40)+0.07566*TPK%K115(:)*PCONC(:,40)*PCONC(:,40)& +&+0.17599*TPK%K116(:)*PCONC(:,41)*PCONC(:,40)+TPK%K117(:)*PCONC(:,41)*PCONC(:,4& +&1)+0.00000*TPK%K118(:)*PCONC(:,41)*PCONC(:,41)+TPK%K119(:)*PCONC(:,33)*PCONC(:& +&,5)+0.81290*TPK%K120(:)*PCONC(:,34)*PCONC(:,5)+TPK%K121(:)*PCONC(:,35)*PCONC(:& +&,5)+TPK%K122(:)*PCONC(:,36)*PCONC(:,5)+TPK%K123(:)*PCONC(:,39)*PCONC(:,5)+0.04& +&915*TPK%K124(:)*PCONC(:,40)*PCONC(:,5)+0.25928*TPK%K125(:)*PCONC(:,41)*PCONC(:& +&,5)+TPK%K127(:)*PCONC(:,42)*PCONC(:,33) !PLOSS(HO2) = +K024*<O3>+K025*<OH>+K027*<HO2>+K027*<HO2>+K028*<HO2>*<H2O>+K028* !<HO2>*<H2O>+K035*<NO>+K036*<NO2>+K038*<NO3>+K084*<PHO>+K097*<MO2>+K098*<ALKAP> !+K099*<ALKEP>+K0100*<BIOP>+K0101*<AROP>+K0102*<CARBOP>+K103*<OLN>+K126*<XO2> - PLOSS(:,15) = +TPK%K024(:)*PCONC(:,1)+TPK%K025(:)*PCONC(:,14)+TPK%K027(:)*PCON& -&C(:,15)+TPK%K027(:)*PCONC(:,15)+TPK%K028(:)*PCONC(:,15)*TPK%H2O(:)+TPK%K028(:)& -&*PCONC(:,15)*TPK%H2O(:)+TPK%K035(:)*PCONC(:,3)+TPK%K036(:)*PCONC(:,4)+TPK%K038& -&(:)*PCONC(:,5)+TPK%K084(:)*PCONC(:,36)+TPK%K097(:)*PCONC(:,32)+TPK%K098(:)*PCO& -&NC(:,33)+TPK%K099(:)*PCONC(:,34)+TPK%K0100(:)*PCONC(:,35)+TPK%K0101(:)*PCONC(:& -&,38)+TPK%K0102(:)*PCONC(:,39)+TPK%K103(:)*PCONC(:,40)+TPK%K126(:)*PCONC(:,41) + PLOSS(:,16) = +TPK%K024(:)*PCONC(:,1)+TPK%K025(:)*PCONC(:,15)+TPK%K027(:)*PCON& +&C(:,16)+TPK%K027(:)*PCONC(:,16)+TPK%K028(:)*PCONC(:,16)*TPK%H2O(:)+TPK%K028(:)& +&*PCONC(:,16)*TPK%H2O(:)+TPK%K035(:)*PCONC(:,3)+TPK%K036(:)*PCONC(:,4)+TPK%K038& +&(:)*PCONC(:,5)+TPK%K084(:)*PCONC(:,37)+TPK%K097(:)*PCONC(:,33)+TPK%K098(:)*PCO& +&NC(:,34)+TPK%K099(:)*PCONC(:,35)+TPK%K0100(:)*PCONC(:,36)+TPK%K0101(:)*PCONC(:& +&,39)+TPK%K0102(:)*PCONC(:,40)+TPK%K103(:)*PCONC(:,41)+TPK%K126(:)*PCONC(:,42) ! !PPROD(CH4) = +0.04300*K079*<ALKE>*<O3> - PPROD(:,16) = +0.04300*TPK%K079(:)*PCONC(:,19)*PCONC(:,1) + PPROD(:,17) = +0.04300*TPK%K079(:)*PCONC(:,20)*PCONC(:,1) !PLOSS(CH4) = +K056*<OH> - PLOSS(:,16) = +TPK%K056(:)*PCONC(:,14) + PLOSS(:,17) = +TPK%K056(:)*PCONC(:,15) ! !PPROD(ETH) = +0.03196*K079*<ALKE>*<O3> - PPROD(:,17) = +0.03196*TPK%K079(:)*PCONC(:,19)*PCONC(:,1) + PPROD(:,18) = +0.03196*TPK%K079(:)*PCONC(:,20)*PCONC(:,1) !PLOSS(ETH) = +K057*<OH> - PLOSS(:,17) = +TPK%K057(:)*PCONC(:,14) + PLOSS(:,18) = +TPK%K057(:)*PCONC(:,15) ! !PPROD(ALKA) = 0.0 - PPROD(:,18) = 0.0 + PPROD(:,19) = 0.0 !PLOSS(ALKA) = +K058*<OH> - PLOSS(:,18) = +TPK%K058(:)*PCONC(:,14) + PLOSS(:,19) = +TPK%K058(:)*PCONC(:,15) ! !PPROD(ALKE) = +0.91868*K054*<BIO>*<O3P>+0.00000*K079*<ALKE>*<O3>+0.37388*K080* !<BIO>*<O3>+0.37815*K093*<BIOP>*<NO>+0.48074*K107*<BIOP>*<MO2>+0.24463*K113*<BI !OP>*<CARBOP>+0.42729*K122*<BIOP>*<NO3> - PPROD(:,19) = +0.91868*TPK%K054(:)*PCONC(:,20)*TPK%O3P(:)+0.00000*TPK%K079(:)*& -&PCONC(:,19)*PCONC(:,1)+0.37388*TPK%K080(:)*PCONC(:,20)*PCONC(:,1)+0.37815*TPK%& -&K093(:)*PCONC(:,35)*PCONC(:,3)+0.48074*TPK%K107(:)*PCONC(:,35)*PCONC(:,32)+0.2& -&4463*TPK%K113(:)*PCONC(:,35)*PCONC(:,39)+0.42729*TPK%K122(:)*PCONC(:,35)*PCONC& + PPROD(:,20) = +0.91868*TPK%K054(:)*PCONC(:,21)*TPK%O3P(:)+0.00000*TPK%K079(:)*& +&PCONC(:,20)*PCONC(:,1)+0.37388*TPK%K080(:)*PCONC(:,21)*PCONC(:,1)+0.37815*TPK%& +&K093(:)*PCONC(:,36)*PCONC(:,3)+0.48074*TPK%K107(:)*PCONC(:,36)*PCONC(:,33)+0.2& +&4463*TPK%K113(:)*PCONC(:,36)*PCONC(:,40)+0.42729*TPK%K122(:)*PCONC(:,36)*PCONC& &(:,5) !PLOSS(ALKE) = +K059*<OH>+K076*<NO3>+K079*<O3> - PLOSS(:,19) = +TPK%K059(:)*PCONC(:,14)+TPK%K076(:)*PCONC(:,5)+TPK%K079(:)*PCON& + PLOSS(:,20) = +TPK%K059(:)*PCONC(:,15)+TPK%K076(:)*PCONC(:,5)+TPK%K079(:)*PCON& &C(:,1) ! -!PPROD(BIO) = 0.0 - PPROD(:,20) = 0.0 -!PLOSS(BIO) = +K054*<O3P>+K060*<OH>+K077*<NO3>+K080*<O3> - PLOSS(:,20) = +TPK%K054(:)*TPK%O3P(:)+TPK%K060(:)*PCONC(:,14)+TPK%K077(:)*PCON& -&C(:,5)+TPK%K080(:)*PCONC(:,1) -! RETURN END SUBROUTINE SUB1 ! @@ -5411,13 +5455,19 @@ SUBROUTINE SUB2 !Indices 21 a 30 ! ! +!PPROD(BIO) = 0.0 + PPROD(:,21) = 0.0 +!PLOSS(BIO) = +K054*<O3P>+K060*<OH>+K077*<NO3>+K080*<O3> + PLOSS(:,21) = +TPK%K054(:)*TPK%O3P(:)+TPK%K060(:)*PCONC(:,15)+TPK%K077(:)*PCON& +&C(:,5)+TPK%K080(:)*PCONC(:,1) +! !PPROD(ARO) = +0.10670*K083*<PHO>*<NO2>+1.06698*K084*<PHO>*<HO2>+K085*<ADD>*<NO !2>+0.02*K086*<ADD>*<O2>+K087*<ADD>*<O3> - PPROD(:,21) = +0.10670*TPK%K083(:)*PCONC(:,36)*PCONC(:,4)+1.06698*TPK%K084(:)*& -&PCONC(:,36)*PCONC(:,15)+TPK%K085(:)*PCONC(:,37)*PCONC(:,4)+0.02*TPK%K086(:)*PC& -&ONC(:,37)*TPK%O2(:)+TPK%K087(:)*PCONC(:,37)*PCONC(:,1) + PPROD(:,22) = +0.10670*TPK%K083(:)*PCONC(:,37)*PCONC(:,4)+1.06698*TPK%K084(:)*& +&PCONC(:,37)*PCONC(:,16)+TPK%K085(:)*PCONC(:,38)*PCONC(:,4)+0.02*TPK%K086(:)*PC& +&ONC(:,38)*TPK%O2(:)+TPK%K087(:)*PCONC(:,38)*PCONC(:,1) !PLOSS(ARO) = +K061*<OH>+K075*<NO3> - PLOSS(:,21) = +TPK%K061(:)*PCONC(:,14)+TPK%K075(:)*PCONC(:,5) + PLOSS(:,22) = +TPK%K061(:)*PCONC(:,15)+TPK%K075(:)*PCONC(:,5) ! !PPROD(HCHO) = +K013*<OP1>+0.06517*K016*<CARBO>+0.05*K054*<BIO>*<O3P>+0.00140*K !058*<ALKA>*<OH>+0.00000*K065*<CARBO>*<OH>+0.35*K068*<OP1>*<OH>+0.02915*K069*<O @@ -5432,29 +5482,29 @@ SUBROUTINE SUB2 !K118*<OLN>*<OLN>+K119*<MO2>*<NO3>+0.03142*K120*<ALKAP>*<NO3>+1.40909*K121*<ALK !EP>*<NO3>+0.68600*K122*<BIOP>*<NO3>+0.03175*K124*<CARBOP>*<NO3>+0.20740*K125*< !OLN>*<NO3>+K127*<XO2>*<MO2> - PPROD(:,22) = +TPK%K013(:)*PCONC(:,28)+0.06517*TPK%K016(:)*PCONC(:,25)+0.05*TP& -&K%K054(:)*PCONC(:,20)*TPK%O3P(:)+0.00140*TPK%K058(:)*PCONC(:,18)*PCONC(:,14)+0& -&.00000*TPK%K065(:)*PCONC(:,25)*PCONC(:,14)+0.35*TPK%K068(:)*PCONC(:,28)*PCONC(& -&:,14)+0.02915*TPK%K069(:)*PCONC(:,29)*PCONC(:,14)+0.57839*TPK%K070(:)*PCONC(:,& -&27)*PCONC(:,14)+0.40*TPK%K078(:)*PCONC(:,27)*PCONC(:,5)+0.48290*TPK%K079(:)*PC& -&ONC(:,19)*PCONC(:,1)+0.90000*TPK%K080(:)*PCONC(:,20)*PCONC(:,1)+0.00000*TPK%K0& -&81(:)*PCONC(:,25)*PCONC(:,1)+0.70*TPK%K082(:)*PCONC(:,27)*PCONC(:,1)+TPK%K090(& -&:)*PCONC(:,32)*PCONC(:,3)+0.03002*TPK%K091(:)*PCONC(:,33)*PCONC(:,3)+1.39870*T& -&PK%K092(:)*PCONC(:,34)*PCONC(:,3)+0.60600*TPK%K093(:)*PCONC(:,35)*PCONC(:,3)+0& -&.05848*TPK%K095(:)*PCONC(:,39)*PCONC(:,3)+0.23419*TPK%K096(:)*PCONC(:,40)*PCON& -&C(:,3)+1.33*TPK%K104(:)*PCONC(:,32)*PCONC(:,32)+0.80556*TPK%K105(:)*PCONC(:,33& -&)*PCONC(:,32)+1.42894*TPK%K106(:)*PCONC(:,34)*PCONC(:,32)+1.09000*TPK%K107(:)*& -&PCONC(:,35)*PCONC(:,32)+TPK%K108(:)*PCONC(:,38)*PCONC(:,32)+0.95723*TPK%K109(:& -&)*PCONC(:,39)*PCONC(:,32)+0.88625*TPK%K110(:)*PCONC(:,40)*PCONC(:,32)+0.07600*& -&TPK%K111(:)*PCONC(:,33)*PCONC(:,39)+0.68192*TPK%K112(:)*PCONC(:,34)*PCONC(:,39& -&)+0.34000*TPK%K113(:)*PCONC(:,35)*PCONC(:,39)+0.03432*TPK%K115(:)*PCONC(:,39)*& -&PCONC(:,39)+0.13414*TPK%K116(:)*PCONC(:,40)*PCONC(:,39)+0.00000*TPK%K118(:)*PC& -&ONC(:,40)*PCONC(:,40)+TPK%K119(:)*PCONC(:,32)*PCONC(:,5)+0.03142*TPK%K120(:)*P& -&CONC(:,33)*PCONC(:,5)+1.40909*TPK%K121(:)*PCONC(:,34)*PCONC(:,5)+0.68600*TPK%K& -&122(:)*PCONC(:,35)*PCONC(:,5)+0.03175*TPK%K124(:)*PCONC(:,39)*PCONC(:,5)+0.207& -&40*TPK%K125(:)*PCONC(:,40)*PCONC(:,5)+TPK%K127(:)*PCONC(:,41)*PCONC(:,32) + PPROD(:,23) = +TPK%K013(:)*PCONC(:,29)+0.06517*TPK%K016(:)*PCONC(:,26)+0.05*TP& +&K%K054(:)*PCONC(:,21)*TPK%O3P(:)+0.00140*TPK%K058(:)*PCONC(:,19)*PCONC(:,15)+0& +&.00000*TPK%K065(:)*PCONC(:,26)*PCONC(:,15)+0.35*TPK%K068(:)*PCONC(:,29)*PCONC(& +&:,15)+0.02915*TPK%K069(:)*PCONC(:,30)*PCONC(:,15)+0.57839*TPK%K070(:)*PCONC(:,& +&28)*PCONC(:,15)+0.40*TPK%K078(:)*PCONC(:,28)*PCONC(:,5)+0.48290*TPK%K079(:)*PC& +&ONC(:,20)*PCONC(:,1)+0.90000*TPK%K080(:)*PCONC(:,21)*PCONC(:,1)+0.00000*TPK%K0& +&81(:)*PCONC(:,26)*PCONC(:,1)+0.70*TPK%K082(:)*PCONC(:,28)*PCONC(:,1)+TPK%K090(& +&:)*PCONC(:,33)*PCONC(:,3)+0.03002*TPK%K091(:)*PCONC(:,34)*PCONC(:,3)+1.39870*T& +&PK%K092(:)*PCONC(:,35)*PCONC(:,3)+0.60600*TPK%K093(:)*PCONC(:,36)*PCONC(:,3)+0& +&.05848*TPK%K095(:)*PCONC(:,40)*PCONC(:,3)+0.23419*TPK%K096(:)*PCONC(:,41)*PCON& +&C(:,3)+1.33*TPK%K104(:)*PCONC(:,33)*PCONC(:,33)+0.80556*TPK%K105(:)*PCONC(:,34& +&)*PCONC(:,33)+1.42894*TPK%K106(:)*PCONC(:,35)*PCONC(:,33)+1.09000*TPK%K107(:)*& +&PCONC(:,36)*PCONC(:,33)+TPK%K108(:)*PCONC(:,39)*PCONC(:,33)+0.95723*TPK%K109(:& +&)*PCONC(:,40)*PCONC(:,33)+0.88625*TPK%K110(:)*PCONC(:,41)*PCONC(:,33)+0.07600*& +&TPK%K111(:)*PCONC(:,34)*PCONC(:,40)+0.68192*TPK%K112(:)*PCONC(:,35)*PCONC(:,40& +&)+0.34000*TPK%K113(:)*PCONC(:,36)*PCONC(:,40)+0.03432*TPK%K115(:)*PCONC(:,40)*& +&PCONC(:,40)+0.13414*TPK%K116(:)*PCONC(:,41)*PCONC(:,40)+0.00000*TPK%K118(:)*PC& +&ONC(:,41)*PCONC(:,41)+TPK%K119(:)*PCONC(:,33)*PCONC(:,5)+0.03142*TPK%K120(:)*P& +&CONC(:,34)*PCONC(:,5)+1.40909*TPK%K121(:)*PCONC(:,35)*PCONC(:,5)+0.68600*TPK%K& +&122(:)*PCONC(:,36)*PCONC(:,5)+0.03175*TPK%K124(:)*PCONC(:,40)*PCONC(:,5)+0.207& +&40*TPK%K125(:)*PCONC(:,41)*PCONC(:,5)+TPK%K127(:)*PCONC(:,42)*PCONC(:,33) !PLOSS(HCHO) = +K010+K011+K062*<OH>+K072*<NO3> - PLOSS(:,22) = +TPK%K010(:)+TPK%K011(:)+TPK%K062(:)*PCONC(:,14)+TPK%K072(:)*PCO& + PLOSS(:,23) = +TPK%K010(:)+TPK%K011(:)+TPK%K062(:)*PCONC(:,15)+TPK%K072(:)*PCO& &NC(:,5) ! !PPROD(ALD) = +0.96205*K014*<OP2>+0.20*K017*<ONIT>+K055*<CARBO>*<O3P>+0.08173*K @@ -5468,26 +5518,26 @@ SUBROUTINE SUB2 !P>+0.42122*K116*<OLN>*<CARBOP>+0.00000*K118*<OLN>*<OLN>+0.33743*K120*<ALKAP>*< !NO3>+0.43039*K121*<ALKEP>*<NO3>+0.00000*K122*<BIOP>*<NO3>+0.02936*K124*<CARBOP !>*<NO3>+0.91850*K125*<OLN>*<NO3> - PPROD(:,23) = +0.96205*TPK%K014(:)*PCONC(:,29)+0.20*TPK%K017(:)*PCONC(:,26)+TP& -&K%K055(:)*PCONC(:,25)*TPK%O3P(:)+0.08173*TPK%K058(:)*PCONC(:,18)*PCONC(:,14)+0& -&.06253*TPK%K065(:)*PCONC(:,25)*PCONC(:,14)+0.07335*TPK%K069(:)*PCONC(:,29)*PCO& -&NC(:,14)+0.05265*TPK%K074(:)*PCONC(:,25)*PCONC(:,5)+0.51468*TPK%K079(:)*PCONC(& -&:,19)*PCONC(:,1)+0.00000*TPK%K080(:)*PCONC(:,20)*PCONC(:,1)+0.15692*TPK%K081(:& -&)*PCONC(:,25)*PCONC(:,1)+0.33144*TPK%K091(:)*PCONC(:,33)*PCONC(:,3)+0.42125*TP& -&K%K092(:)*PCONC(:,34)*PCONC(:,3)+0.00000*TPK%K093(:)*PCONC(:,35)*PCONC(:,3)+0.& -&07368*TPK%K095(:)*PCONC(:,39)*PCONC(:,3)+1.01182*TPK%K096(:)*PCONC(:,40)*PCONC& -&(:,3)+0.56070*TPK%K105(:)*PCONC(:,33)*PCONC(:,32)+0.46413*TPK%K106(:)*PCONC(:,& -&34)*PCONC(:,32)+0.00000*TPK%K107(:)*PCONC(:,35)*PCONC(:,32)+0.08295*TPK%K109(:& -&)*PCONC(:,39)*PCONC(:,32)+0.41524*TPK%K110(:)*PCONC(:,40)*PCONC(:,32)+0.71461*& -&TPK%K111(:)*PCONC(:,33)*PCONC(:,39)+0.68374*TPK%K112(:)*PCONC(:,34)*PCONC(:,39& -&)+0.00000*TPK%K113(:)*PCONC(:,35)*PCONC(:,39)+0.06969*TPK%K115(:)*PCONC(:,39)*& -&PCONC(:,39)+0.42122*TPK%K116(:)*PCONC(:,40)*PCONC(:,39)+0.00000*TPK%K118(:)*PC& -&ONC(:,40)*PCONC(:,40)+0.33743*TPK%K120(:)*PCONC(:,33)*PCONC(:,5)+0.43039*TPK%K& -&121(:)*PCONC(:,34)*PCONC(:,5)+0.00000*TPK%K122(:)*PCONC(:,35)*PCONC(:,5)+0.029& -&36*TPK%K124(:)*PCONC(:,39)*PCONC(:,5)+0.91850*TPK%K125(:)*PCONC(:,40)*PCONC(:,& + PPROD(:,24) = +0.96205*TPK%K014(:)*PCONC(:,30)+0.20*TPK%K017(:)*PCONC(:,27)+TP& +&K%K055(:)*PCONC(:,26)*TPK%O3P(:)+0.08173*TPK%K058(:)*PCONC(:,19)*PCONC(:,15)+0& +&.06253*TPK%K065(:)*PCONC(:,26)*PCONC(:,15)+0.07335*TPK%K069(:)*PCONC(:,30)*PCO& +&NC(:,15)+0.05265*TPK%K074(:)*PCONC(:,26)*PCONC(:,5)+0.51468*TPK%K079(:)*PCONC(& +&:,20)*PCONC(:,1)+0.00000*TPK%K080(:)*PCONC(:,21)*PCONC(:,1)+0.15692*TPK%K081(:& +&)*PCONC(:,26)*PCONC(:,1)+0.33144*TPK%K091(:)*PCONC(:,34)*PCONC(:,3)+0.42125*TP& +&K%K092(:)*PCONC(:,35)*PCONC(:,3)+0.00000*TPK%K093(:)*PCONC(:,36)*PCONC(:,3)+0.& +&07368*TPK%K095(:)*PCONC(:,40)*PCONC(:,3)+1.01182*TPK%K096(:)*PCONC(:,41)*PCONC& +&(:,3)+0.56070*TPK%K105(:)*PCONC(:,34)*PCONC(:,33)+0.46413*TPK%K106(:)*PCONC(:,& +&35)*PCONC(:,33)+0.00000*TPK%K107(:)*PCONC(:,36)*PCONC(:,33)+0.08295*TPK%K109(:& +&)*PCONC(:,40)*PCONC(:,33)+0.41524*TPK%K110(:)*PCONC(:,41)*PCONC(:,33)+0.71461*& +&TPK%K111(:)*PCONC(:,34)*PCONC(:,40)+0.68374*TPK%K112(:)*PCONC(:,35)*PCONC(:,40& +&)+0.00000*TPK%K113(:)*PCONC(:,36)*PCONC(:,40)+0.06969*TPK%K115(:)*PCONC(:,40)*& +&PCONC(:,40)+0.42122*TPK%K116(:)*PCONC(:,41)*PCONC(:,40)+0.00000*TPK%K118(:)*PC& +&ONC(:,41)*PCONC(:,41)+0.33743*TPK%K120(:)*PCONC(:,34)*PCONC(:,5)+0.43039*TPK%K& +&121(:)*PCONC(:,35)*PCONC(:,5)+0.00000*TPK%K122(:)*PCONC(:,36)*PCONC(:,5)+0.029& +&36*TPK%K124(:)*PCONC(:,40)*PCONC(:,5)+0.91850*TPK%K125(:)*PCONC(:,41)*PCONC(:,& &5) !PLOSS(ALD) = +K012+K063*<OH>+K073*<NO3> - PLOSS(:,23) = +TPK%K012(:)+TPK%K063(:)*PCONC(:,14)+TPK%K073(:)*PCONC(:,5) + PLOSS(:,24) = +TPK%K012(:)+TPK%K063(:)*PCONC(:,15)+TPK%K073(:)*PCONC(:,5) ! !PPROD(KET) = +0.80*K017*<ONIT>+0.03498*K058*<ALKA>*<OH>+0.00853*K065*<CARBO>*< !OH>+0.37591*K069*<OP2>*<OH>+0.00632*K074*<CARBO>*<NO3>+0.07377*K079*<ALKE>*<O3 @@ -5498,22 +5548,22 @@ SUBROUTINE SUB2 !<CARBOP>+0.02190*K115*<CARBOP>*<CARBOP>+0.10822*K116*<OLN>*<CARBOP>+0.00000*K1 !18*<OLN>*<OLN>+0.62978*K120*<ALKAP>*<NO3>+0.02051*K121*<ALKEP>*<NO3>+0.00000*K !122*<BIOP>*<NO3>+0.34740*K125*<OLN>*<NO3> - PPROD(:,24) = +0.80*TPK%K017(:)*PCONC(:,26)+0.03498*TPK%K058(:)*PCONC(:,18)*PC& -&ONC(:,14)+0.00853*TPK%K065(:)*PCONC(:,25)*PCONC(:,14)+0.37591*TPK%K069(:)*PCON& -&C(:,29)*PCONC(:,14)+0.00632*TPK%K074(:)*PCONC(:,25)*PCONC(:,5)+0.07377*TPK%K07& -&9(:)*PCONC(:,19)*PCONC(:,1)+0.00000*TPK%K080(:)*PCONC(:,20)*PCONC(:,1)+0.54531& -&*TPK%K091(:)*PCONC(:,33)*PCONC(:,3)+0.05220*TPK%K092(:)*PCONC(:,34)*PCONC(:,3)& -&+0.00000*TPK%K093(:)*PCONC(:,35)*PCONC(:,3)+0.37862*TPK%K096(:)*PCONC(:,40)*PC& -&ONC(:,3)+0.09673*TPK%K105(:)*PCONC(:,33)*PCONC(:,32)+0.03814*TPK%K106(:)*PCONC& -&(:,34)*PCONC(:,32)+0.00000*TPK%K107(:)*PCONC(:,35)*PCONC(:,32)+0.09667*TPK%K11& -&0(:)*PCONC(:,40)*PCONC(:,32)+0.18819*TPK%K111(:)*PCONC(:,33)*PCONC(:,39)+0.065& -&79*TPK%K112(:)*PCONC(:,34)*PCONC(:,39)+0.00000*TPK%K113(:)*PCONC(:,35)*PCONC(:& -&,39)+0.02190*TPK%K115(:)*PCONC(:,39)*PCONC(:,39)+0.10822*TPK%K116(:)*PCONC(:,4& -&0)*PCONC(:,39)+0.00000*TPK%K118(:)*PCONC(:,40)*PCONC(:,40)+0.62978*TPK%K120(:)& -&*PCONC(:,33)*PCONC(:,5)+0.02051*TPK%K121(:)*PCONC(:,34)*PCONC(:,5)+0.00000*TPK& -&%K122(:)*PCONC(:,35)*PCONC(:,5)+0.34740*TPK%K125(:)*PCONC(:,40)*PCONC(:,5) + PPROD(:,25) = +0.80*TPK%K017(:)*PCONC(:,27)+0.03498*TPK%K058(:)*PCONC(:,19)*PC& +&ONC(:,15)+0.00853*TPK%K065(:)*PCONC(:,26)*PCONC(:,15)+0.37591*TPK%K069(:)*PCON& +&C(:,30)*PCONC(:,15)+0.00632*TPK%K074(:)*PCONC(:,26)*PCONC(:,5)+0.07377*TPK%K07& +&9(:)*PCONC(:,20)*PCONC(:,1)+0.00000*TPK%K080(:)*PCONC(:,21)*PCONC(:,1)+0.54531& +&*TPK%K091(:)*PCONC(:,34)*PCONC(:,3)+0.05220*TPK%K092(:)*PCONC(:,35)*PCONC(:,3)& +&+0.00000*TPK%K093(:)*PCONC(:,36)*PCONC(:,3)+0.37862*TPK%K096(:)*PCONC(:,41)*PC& +&ONC(:,3)+0.09673*TPK%K105(:)*PCONC(:,34)*PCONC(:,33)+0.03814*TPK%K106(:)*PCONC& +&(:,35)*PCONC(:,33)+0.00000*TPK%K107(:)*PCONC(:,36)*PCONC(:,33)+0.09667*TPK%K11& +&0(:)*PCONC(:,41)*PCONC(:,33)+0.18819*TPK%K111(:)*PCONC(:,34)*PCONC(:,40)+0.065& +&79*TPK%K112(:)*PCONC(:,35)*PCONC(:,40)+0.00000*TPK%K113(:)*PCONC(:,36)*PCONC(:& +&,40)+0.02190*TPK%K115(:)*PCONC(:,40)*PCONC(:,40)+0.10822*TPK%K116(:)*PCONC(:,4& +&1)*PCONC(:,40)+0.00000*TPK%K118(:)*PCONC(:,41)*PCONC(:,41)+0.62978*TPK%K120(:)& +&*PCONC(:,34)*PCONC(:,5)+0.02051*TPK%K121(:)*PCONC(:,35)*PCONC(:,5)+0.00000*TPK& +&%K122(:)*PCONC(:,36)*PCONC(:,5)+0.34740*TPK%K125(:)*PCONC(:,41)*PCONC(:,5) !PLOSS(KET) = +K015+K064*<OH> - PLOSS(:,24) = +TPK%K015(:)+TPK%K064(:)*PCONC(:,14) + PLOSS(:,25) = +TPK%K015(:)+TPK%K064(:)*PCONC(:,15) ! !PPROD(CARBO) = +0.13255*K054*<BIO>*<O3P>+0.00835*K058*<ALKA>*<OH>+0.16919*K065 !*<CARBO>*<OH>+0.21863*K070*<PAN>*<OH>+0.10530*K074*<CARBO>*<NO3>+0.00000*K076* @@ -5525,71 +5575,63 @@ SUBROUTINE SUB2 !K114*<AROP>*<CARBOP>+0.10777*K115*<CARBOP>*<CARBOP>+0.03531*K120*<ALKAP>*<NO3> !+0.61160*K122*<BIOP>*<NO3>+2.81904*K123*<AROP>*<NO3>+0.03455*K124*<CARBOP>*<NO !3> - PPROD(:,25) = +0.13255*TPK%K054(:)*PCONC(:,20)*TPK%O3P(:)+0.00835*TPK%K058(:)*& -&PCONC(:,18)*PCONC(:,14)+0.16919*TPK%K065(:)*PCONC(:,25)*PCONC(:,14)+0.21863*TP& -&K%K070(:)*PCONC(:,27)*PCONC(:,14)+0.10530*TPK%K074(:)*PCONC(:,25)*PCONC(:,5)+0& -&.00000*TPK%K076(:)*PCONC(:,19)*PCONC(:,5)+0.91741*TPK%K077(:)*PCONC(:,20)*PCON& -&C(:,5)+0.00000*TPK%K079(:)*PCONC(:,19)*PCONC(:,1)+0.39754*TPK%K080(:)*PCONC(:,& -&20)*PCONC(:,1)+1.07583*TPK%K081(:)*PCONC(:,25)*PCONC(:,1)+0.03407*TPK%K091(:)*& -&PCONC(:,33)*PCONC(:,3)+0.45463*TPK%K093(:)*PCONC(:,35)*PCONC(:,3)+2.06993*TPK%& -&K094(:)*PCONC(:,38)*PCONC(:,3)+0.08670*TPK%K095(:)*PCONC(:,39)*PCONC(:,3)+0.07& -&976*TPK%K105(:)*PCONC(:,33)*PCONC(:,32)+0.56064*TPK%K107(:)*PCONC(:,35)*PCONC(& -&:,32)+1.99461*TPK%K108(:)*PCONC(:,38)*PCONC(:,32)+0.15387*TPK%K109(:)*PCONC(:,& -&39)*PCONC(:,32)+0.06954*TPK%K111(:)*PCONC(:,33)*PCONC(:,39)+0.78591*TPK%K113(:& -&)*PCONC(:,35)*PCONC(:,39)+1.99455*TPK%K114(:)*PCONC(:,38)*PCONC(:,39)+0.10777*& -&TPK%K115(:)*PCONC(:,39)*PCONC(:,39)+0.03531*TPK%K120(:)*PCONC(:,33)*PCONC(:,5)& -&+0.61160*TPK%K122(:)*PCONC(:,35)*PCONC(:,5)+2.81904*TPK%K123(:)*PCONC(:,38)*PC& -&ONC(:,5)+0.03455*TPK%K124(:)*PCONC(:,39)*PCONC(:,5) + PPROD(:,26) = +0.13255*TPK%K054(:)*PCONC(:,21)*TPK%O3P(:)+0.00835*TPK%K058(:)*& +&PCONC(:,19)*PCONC(:,15)+0.16919*TPK%K065(:)*PCONC(:,26)*PCONC(:,15)+0.21863*TP& +&K%K070(:)*PCONC(:,28)*PCONC(:,15)+0.10530*TPK%K074(:)*PCONC(:,26)*PCONC(:,5)+0& +&.00000*TPK%K076(:)*PCONC(:,20)*PCONC(:,5)+0.91741*TPK%K077(:)*PCONC(:,21)*PCON& +&C(:,5)+0.00000*TPK%K079(:)*PCONC(:,20)*PCONC(:,1)+0.39754*TPK%K080(:)*PCONC(:,& +&21)*PCONC(:,1)+1.07583*TPK%K081(:)*PCONC(:,26)*PCONC(:,1)+0.03407*TPK%K091(:)*& +&PCONC(:,34)*PCONC(:,3)+0.45463*TPK%K093(:)*PCONC(:,36)*PCONC(:,3)+2.06993*TPK%& +&K094(:)*PCONC(:,39)*PCONC(:,3)+0.08670*TPK%K095(:)*PCONC(:,40)*PCONC(:,3)+0.07& +&976*TPK%K105(:)*PCONC(:,34)*PCONC(:,33)+0.56064*TPK%K107(:)*PCONC(:,36)*PCONC(& +&:,33)+1.99461*TPK%K108(:)*PCONC(:,39)*PCONC(:,33)+0.15387*TPK%K109(:)*PCONC(:,& +&40)*PCONC(:,33)+0.06954*TPK%K111(:)*PCONC(:,34)*PCONC(:,40)+0.78591*TPK%K113(:& +&)*PCONC(:,36)*PCONC(:,40)+1.99455*TPK%K114(:)*PCONC(:,39)*PCONC(:,40)+0.10777*& +&TPK%K115(:)*PCONC(:,40)*PCONC(:,40)+0.03531*TPK%K120(:)*PCONC(:,34)*PCONC(:,5)& +&+0.61160*TPK%K122(:)*PCONC(:,36)*PCONC(:,5)+2.81904*TPK%K123(:)*PCONC(:,39)*PC& +&ONC(:,5)+0.03455*TPK%K124(:)*PCONC(:,40)*PCONC(:,5) !PLOSS(CARBO) = +K016+K055*<O3P>+K065*<OH>+K074*<NO3>+K081*<O3> - PLOSS(:,25) = +TPK%K016(:)+TPK%K055(:)*TPK%O3P(:)+TPK%K065(:)*PCONC(:,14)+TPK%& + PLOSS(:,26) = +TPK%K016(:)+TPK%K055(:)*TPK%O3P(:)+TPK%K065(:)*PCONC(:,15)+TPK%& &K074(:)*PCONC(:,5)+TPK%K081(:)*PCONC(:,1) ! !PPROD(ONIT) = +0.60*K078*<PAN>*<NO3>+K083*<PHO>*<NO2>+0.08459*K091*<ALKAP>*<NO !>+0.15300*K093*<BIOP>*<NO>+0.04885*K094*<AROP>*<NO>+0.18401*K096*<OLN>*<NO>+K1 !03*<OLN>*<HO2>+0.67560*K110*<OLN>*<MO2>+0.66562*K116*<OLN>*<CARBOP>+2.00*K117* !<OLN>*<OLN>+0.00000*K118*<OLN>*<OLN>+0.25928*K125*<OLN>*<NO3> - PPROD(:,26) = +0.60*TPK%K078(:)*PCONC(:,27)*PCONC(:,5)+TPK%K083(:)*PCONC(:,36)& -&*PCONC(:,4)+0.08459*TPK%K091(:)*PCONC(:,33)*PCONC(:,3)+0.15300*TPK%K093(:)*PCO& -&NC(:,35)*PCONC(:,3)+0.04885*TPK%K094(:)*PCONC(:,38)*PCONC(:,3)+0.18401*TPK%K09& -&6(:)*PCONC(:,40)*PCONC(:,3)+TPK%K103(:)*PCONC(:,40)*PCONC(:,15)+0.67560*TPK%K1& -&10(:)*PCONC(:,40)*PCONC(:,32)+0.66562*TPK%K116(:)*PCONC(:,40)*PCONC(:,39)+2.00& -&*TPK%K117(:)*PCONC(:,40)*PCONC(:,40)+0.00000*TPK%K118(:)*PCONC(:,40)*PCONC(:,4& -&0)+0.25928*TPK%K125(:)*PCONC(:,40)*PCONC(:,5) + PPROD(:,27) = +0.60*TPK%K078(:)*PCONC(:,28)*PCONC(:,5)+TPK%K083(:)*PCONC(:,37)& +&*PCONC(:,4)+0.08459*TPK%K091(:)*PCONC(:,34)*PCONC(:,3)+0.15300*TPK%K093(:)*PCO& +&NC(:,36)*PCONC(:,3)+0.04885*TPK%K094(:)*PCONC(:,39)*PCONC(:,3)+0.18401*TPK%K09& +&6(:)*PCONC(:,41)*PCONC(:,3)+TPK%K103(:)*PCONC(:,41)*PCONC(:,16)+0.67560*TPK%K1& +&10(:)*PCONC(:,41)*PCONC(:,33)+0.66562*TPK%K116(:)*PCONC(:,41)*PCONC(:,40)+2.00& +&*TPK%K117(:)*PCONC(:,41)*PCONC(:,41)+0.00000*TPK%K118(:)*PCONC(:,41)*PCONC(:,4& +&1)+0.25928*TPK%K125(:)*PCONC(:,41)*PCONC(:,5) !PLOSS(ONIT) = +K017+K071*<OH> - PLOSS(:,26) = +TPK%K017(:)+TPK%K071(:)*PCONC(:,14) + PLOSS(:,27) = +TPK%K017(:)+TPK%K071(:)*PCONC(:,15) ! !PPROD(PAN) = +0.28107*K070*<PAN>*<OH>+0.40000*K078*<PAN>*<NO3>+0.30000*K082*<P !AN>*<O3>+1.00000*K088*<CARBOP>*<NO2> - PPROD(:,27) = +0.28107*TPK%K070(:)*PCONC(:,27)*PCONC(:,14)+0.40000*TPK%K078(:)& -&*PCONC(:,27)*PCONC(:,5)+0.30000*TPK%K082(:)*PCONC(:,27)*PCONC(:,1)+1.00000*TPK& -&%K088(:)*PCONC(:,39)*PCONC(:,4) + PPROD(:,28) = +0.28107*TPK%K070(:)*PCONC(:,28)*PCONC(:,15)+0.40000*TPK%K078(:)& +&*PCONC(:,28)*PCONC(:,5)+0.30000*TPK%K082(:)*PCONC(:,28)*PCONC(:,1)+1.00000*TPK& +&%K088(:)*PCONC(:,40)*PCONC(:,4) !PLOSS(PAN) = +K070*<OH>+K078*<NO3>+K082*<O3>+K089 - PLOSS(:,27) = +TPK%K070(:)*PCONC(:,14)+TPK%K078(:)*PCONC(:,5)+TPK%K082(:)*PCON& + PLOSS(:,28) = +TPK%K070(:)*PCONC(:,15)+TPK%K078(:)*PCONC(:,5)+TPK%K082(:)*PCON& &C(:,1)+TPK%K089(:) ! !PPROD(OP1) = +K097*<MO2>*<HO2> - PPROD(:,28) = +TPK%K097(:)*PCONC(:,32)*PCONC(:,15) + PPROD(:,29) = +TPK%K097(:)*PCONC(:,33)*PCONC(:,16) !PLOSS(OP1) = +K013+K068*<OH> - PLOSS(:,28) = +TPK%K013(:)+TPK%K068(:)*PCONC(:,14) + PLOSS(:,29) = +TPK%K013(:)+TPK%K068(:)*PCONC(:,15) ! !PPROD(OP2) = +0.10149*K081*<CARBO>*<O3>+1.00524*K098*<ALKAP>*<HO2>+1.00524*K09 !9*<ALKEP>*<HO2>+1.00524*K0100*<BIOP>*<HO2>+1.00524*K0101*<AROP>*<HO2>+0.80904* !K0102*<CARBOP>*<HO2>+1.00524*K126*<XO2>*<HO2> - PPROD(:,29) = +0.10149*TPK%K081(:)*PCONC(:,25)*PCONC(:,1)+1.00524*TPK%K098(:)*& -&PCONC(:,33)*PCONC(:,15)+1.00524*TPK%K099(:)*PCONC(:,34)*PCONC(:,15)+1.00524*TP& -&K%K0100(:)*PCONC(:,35)*PCONC(:,15)+1.00524*TPK%K0101(:)*PCONC(:,38)*PCONC(:,15& -&)+0.80904*TPK%K0102(:)*PCONC(:,39)*PCONC(:,15)+1.00524*TPK%K126(:)*PCONC(:,41)& -&*PCONC(:,15) + PPROD(:,30) = +0.10149*TPK%K081(:)*PCONC(:,26)*PCONC(:,1)+1.00524*TPK%K098(:)*& +&PCONC(:,34)*PCONC(:,16)+1.00524*TPK%K099(:)*PCONC(:,35)*PCONC(:,16)+1.00524*TP& +&K%K0100(:)*PCONC(:,36)*PCONC(:,16)+1.00524*TPK%K0101(:)*PCONC(:,39)*PCONC(:,16& +&)+0.80904*TPK%K0102(:)*PCONC(:,40)*PCONC(:,16)+1.00524*TPK%K126(:)*PCONC(:,42)& +&*PCONC(:,16) !PLOSS(OP2) = +K014+K069*<OH> - PLOSS(:,29) = +TPK%K014(:)+TPK%K069(:)*PCONC(:,14) -! -!PPROD(ORA1) = +0.00878*K058*<ALKA>*<OH>+0.15343*K079*<ALKE>*<O3>+0.15000*K080* -!<BIO>*<O3>+0.10788*K081*<CARBO>*<O3>+0.11*K082*<PAN>*<O3> - PPROD(:,30) = +0.00878*TPK%K058(:)*PCONC(:,18)*PCONC(:,14)+0.15343*TPK%K079(:)& -&*PCONC(:,19)*PCONC(:,1)+0.15000*TPK%K080(:)*PCONC(:,20)*PCONC(:,1)+0.10788*TPK& -&%K081(:)*PCONC(:,25)*PCONC(:,1)+0.11*TPK%K082(:)*PCONC(:,27)*PCONC(:,1) -!PLOSS(ORA1) = +K066*<OH> - PLOSS(:,30) = +TPK%K066(:)*PCONC(:,14) + PLOSS(:,30) = +TPK%K014(:)+TPK%K069(:)*PCONC(:,15) ! RETURN END SUBROUTINE SUB2 @@ -5599,18 +5641,26 @@ SUBROUTINE SUB3 !Indices 31 a 40 ! ! +!PPROD(ORA1) = +0.00878*K058*<ALKA>*<OH>+0.15343*K079*<ALKE>*<O3>+0.15000*K080* +!<BIO>*<O3>+0.10788*K081*<CARBO>*<O3>+0.11*K082*<PAN>*<O3> + PPROD(:,31) = +0.00878*TPK%K058(:)*PCONC(:,19)*PCONC(:,15)+0.15343*TPK%K079(:)& +&*PCONC(:,20)*PCONC(:,1)+0.15000*TPK%K080(:)*PCONC(:,21)*PCONC(:,1)+0.10788*TPK& +&%K081(:)*PCONC(:,26)*PCONC(:,1)+0.11*TPK%K082(:)*PCONC(:,28)*PCONC(:,1) +!PLOSS(ORA1) = +K066*<OH> + PLOSS(:,31) = +TPK%K066(:)*PCONC(:,15) +! !PPROD(ORA2) = +0.08143*K079*<ALKE>*<O3>+0.00000*K080*<BIO>*<O3>+0.20595*K081*< !CARBO>*<O3>+0.17307*K0102*<CARBOP>*<HO2>+0.13684*K109*<CARBOP>*<MO2>+0.49810*K !111*<ALKAP>*<CARBOP>+0.49922*K112*<ALKEP>*<CARBOP>+0.49400*K113*<BIOP>*<CARBOP !>+0.09955*K115*<CARBOP>*<CARBOP>+0.48963*K116*<OLN>*<CARBOP> - PPROD(:,31) = +0.08143*TPK%K079(:)*PCONC(:,19)*PCONC(:,1)+0.00000*TPK%K080(:)*& -&PCONC(:,20)*PCONC(:,1)+0.20595*TPK%K081(:)*PCONC(:,25)*PCONC(:,1)+0.17307*TPK%& -&K0102(:)*PCONC(:,39)*PCONC(:,15)+0.13684*TPK%K109(:)*PCONC(:,39)*PCONC(:,32)+0& -&.49810*TPK%K111(:)*PCONC(:,33)*PCONC(:,39)+0.49922*TPK%K112(:)*PCONC(:,34)*PCO& -&NC(:,39)+0.49400*TPK%K113(:)*PCONC(:,35)*PCONC(:,39)+0.09955*TPK%K115(:)*PCONC& -&(:,39)*PCONC(:,39)+0.48963*TPK%K116(:)*PCONC(:,40)*PCONC(:,39) + PPROD(:,32) = +0.08143*TPK%K079(:)*PCONC(:,20)*PCONC(:,1)+0.00000*TPK%K080(:)*& +&PCONC(:,21)*PCONC(:,1)+0.20595*TPK%K081(:)*PCONC(:,26)*PCONC(:,1)+0.17307*TPK%& +&K0102(:)*PCONC(:,40)*PCONC(:,16)+0.13684*TPK%K109(:)*PCONC(:,40)*PCONC(:,33)+0& +&.49810*TPK%K111(:)*PCONC(:,34)*PCONC(:,40)+0.49922*TPK%K112(:)*PCONC(:,35)*PCO& +&NC(:,40)+0.49400*TPK%K113(:)*PCONC(:,36)*PCONC(:,40)+0.09955*TPK%K115(:)*PCONC& +&(:,40)*PCONC(:,40)+0.48963*TPK%K116(:)*PCONC(:,41)*PCONC(:,40) !PLOSS(ORA2) = +K067*<OH> - PLOSS(:,31) = +TPK%K067(:)*PCONC(:,14) + PLOSS(:,32) = +TPK%K067(:)*PCONC(:,15) ! !PPROD(MO2) = +K012*<ALD>+0.03795*K014*<OP2>+K056*<CH4>*<OH>+0.65*K068*<OP1>*<O !H>+0.13966*K079*<ALKE>*<O3>+0.03000*K080*<BIO>*<O3>+0.09016*K091*<ALKAP>*<NO>+ @@ -5619,69 +5669,69 @@ SUBROUTINE SUB3 !BIOP>*<CARBOP>+K114*<AROP>*<CARBOP>+1.66702*K115*<CARBOP>*<CARBOP>+0.51037*K11 !6*<OLN>*<CARBOP>+0.09731*K120*<ALKAP>*<NO3>+0.91910*K124*<CARBOP>*<NO3>+K128*< !XO2>*<CARBOP> - PPROD(:,32) = +TPK%K012(:)*PCONC(:,23)+0.03795*TPK%K014(:)*PCONC(:,29)+TPK%K05& -&6(:)*PCONC(:,16)*PCONC(:,14)+0.65*TPK%K068(:)*PCONC(:,28)*PCONC(:,14)+0.13966*& -&TPK%K079(:)*PCONC(:,19)*PCONC(:,1)+0.03000*TPK%K080(:)*PCONC(:,20)*PCONC(:,1)+& -&0.09016*TPK%K091(:)*PCONC(:,33)*PCONC(:,3)+0.78134*TPK%K095(:)*PCONC(:,39)*PCO& -&NC(:,3)+0.01390*TPK%K105(:)*PCONC(:,33)*PCONC(:,32)+0.56031*TPK%K109(:)*PCONC(& -&:,39)*PCONC(:,32)+0.51480*TPK%K111(:)*PCONC(:,33)*PCONC(:,39)+0.50078*TPK%K112& -&(:)*PCONC(:,34)*PCONC(:,39)+0.50600*TPK%K113(:)*PCONC(:,35)*PCONC(:,39)+TPK%K1& -&14(:)*PCONC(:,38)*PCONC(:,39)+1.66702*TPK%K115(:)*PCONC(:,39)*PCONC(:,39)+0.51& -&037*TPK%K116(:)*PCONC(:,40)*PCONC(:,39)+0.09731*TPK%K120(:)*PCONC(:,33)*PCONC(& -&:,5)+0.91910*TPK%K124(:)*PCONC(:,39)*PCONC(:,5)+TPK%K128(:)*PCONC(:,41)*PCONC(& -&:,39) + PPROD(:,33) = +TPK%K012(:)*PCONC(:,24)+0.03795*TPK%K014(:)*PCONC(:,30)+TPK%K05& +&6(:)*PCONC(:,17)*PCONC(:,15)+0.65*TPK%K068(:)*PCONC(:,29)*PCONC(:,15)+0.13966*& +&TPK%K079(:)*PCONC(:,20)*PCONC(:,1)+0.03000*TPK%K080(:)*PCONC(:,21)*PCONC(:,1)+& +&0.09016*TPK%K091(:)*PCONC(:,34)*PCONC(:,3)+0.78134*TPK%K095(:)*PCONC(:,40)*PCO& +&NC(:,3)+0.01390*TPK%K105(:)*PCONC(:,34)*PCONC(:,33)+0.56031*TPK%K109(:)*PCONC(& +&:,40)*PCONC(:,33)+0.51480*TPK%K111(:)*PCONC(:,34)*PCONC(:,40)+0.50078*TPK%K112& +&(:)*PCONC(:,35)*PCONC(:,40)+0.50600*TPK%K113(:)*PCONC(:,36)*PCONC(:,40)+TPK%K1& +&14(:)*PCONC(:,39)*PCONC(:,40)+1.66702*TPK%K115(:)*PCONC(:,40)*PCONC(:,40)+0.51& +&037*TPK%K116(:)*PCONC(:,41)*PCONC(:,40)+0.09731*TPK%K120(:)*PCONC(:,34)*PCONC(& +&:,5)+0.91910*TPK%K124(:)*PCONC(:,40)*PCONC(:,5)+TPK%K128(:)*PCONC(:,42)*PCONC(& +&:,40) !PLOSS(MO2) = +K090*<NO>+K097*<HO2>+K104*<MO2>+K104*<MO2>+K105*<ALKAP>+K106*<AL !KEP>+K107*<BIOP>+K108*<AROP>+K109*<CARBOP>+K110*<OLN>+K119*<NO3>+K127*<XO2> - PLOSS(:,32) = +TPK%K090(:)*PCONC(:,3)+TPK%K097(:)*PCONC(:,15)+TPK%K104(:)*PCON& -&C(:,32)+TPK%K104(:)*PCONC(:,32)+TPK%K105(:)*PCONC(:,33)+TPK%K106(:)*PCONC(:,34& -&)+TPK%K107(:)*PCONC(:,35)+TPK%K108(:)*PCONC(:,38)+TPK%K109(:)*PCONC(:,39)+TPK%& -&K110(:)*PCONC(:,40)+TPK%K119(:)*PCONC(:,5)+TPK%K127(:)*PCONC(:,41) + PLOSS(:,33) = +TPK%K090(:)*PCONC(:,3)+TPK%K097(:)*PCONC(:,16)+TPK%K104(:)*PCON& +&C(:,33)+TPK%K104(:)*PCONC(:,33)+TPK%K105(:)*PCONC(:,34)+TPK%K106(:)*PCONC(:,35& +&)+TPK%K107(:)*PCONC(:,36)+TPK%K108(:)*PCONC(:,39)+TPK%K109(:)*PCONC(:,40)+TPK%& +&K110(:)*PCONC(:,41)+TPK%K119(:)*PCONC(:,5)+TPK%K127(:)*PCONC(:,42) ! !PPROD(ALKAP) = +1.00000*K015*<KET>+K057*<ETH>*<OH>+0.87811*K058*<ALKA>*<OH>+0. !40341*K069*<OP2>*<OH>+1.00000*K071*<ONIT>*<OH>+0.09815*K079*<ALKE>*<O3>+0.0000 !0*K080*<BIO>*<O3>+0.08187*K091*<ALKAP>*<NO>+0.00385*K105*<ALKAP>*<MO2>+0.00828 !*K111*<ALKAP>*<CARBOP>+0.08994*K120*<ALKAP>*<NO3> - PPROD(:,33) = +1.00000*TPK%K015(:)*PCONC(:,24)+TPK%K057(:)*PCONC(:,17)*PCONC(:& -&,14)+0.87811*TPK%K058(:)*PCONC(:,18)*PCONC(:,14)+0.40341*TPK%K069(:)*PCONC(:,2& -&9)*PCONC(:,14)+1.00000*TPK%K071(:)*PCONC(:,26)*PCONC(:,14)+0.09815*TPK%K079(:)& -&*PCONC(:,19)*PCONC(:,1)+0.00000*TPK%K080(:)*PCONC(:,20)*PCONC(:,1)+0.08187*TPK& -&%K091(:)*PCONC(:,33)*PCONC(:,3)+0.00385*TPK%K105(:)*PCONC(:,33)*PCONC(:,32)+0.& -&00828*TPK%K111(:)*PCONC(:,33)*PCONC(:,39)+0.08994*TPK%K120(:)*PCONC(:,33)*PCON& + PPROD(:,34) = +1.00000*TPK%K015(:)*PCONC(:,25)+TPK%K057(:)*PCONC(:,18)*PCONC(:& +&,15)+0.87811*TPK%K058(:)*PCONC(:,19)*PCONC(:,15)+0.40341*TPK%K069(:)*PCONC(:,3& +&0)*PCONC(:,15)+1.00000*TPK%K071(:)*PCONC(:,27)*PCONC(:,15)+0.09815*TPK%K079(:)& +&*PCONC(:,20)*PCONC(:,1)+0.00000*TPK%K080(:)*PCONC(:,21)*PCONC(:,1)+0.08187*TPK& +&%K091(:)*PCONC(:,34)*PCONC(:,3)+0.00385*TPK%K105(:)*PCONC(:,34)*PCONC(:,33)+0.& +&00828*TPK%K111(:)*PCONC(:,34)*PCONC(:,40)+0.08994*TPK%K120(:)*PCONC(:,34)*PCON& &C(:,5) !PLOSS(ALKAP) = +K091*<NO>+K098*<HO2>+K105*<MO2>+K111*<CARBOP>+K120*<NO3> - PLOSS(:,33) = +TPK%K091(:)*PCONC(:,3)+TPK%K098(:)*PCONC(:,15)+TPK%K105(:)*PCON& -&C(:,32)+TPK%K111(:)*PCONC(:,39)+TPK%K120(:)*PCONC(:,5) + PLOSS(:,34) = +TPK%K091(:)*PCONC(:,3)+TPK%K098(:)*PCONC(:,16)+TPK%K105(:)*PCON& +&C(:,33)+TPK%K111(:)*PCONC(:,40)+TPK%K120(:)*PCONC(:,5) ! !PPROD(ALKEP) = +1.02529*K059*<ALKE>*<OH> - PPROD(:,34) = +1.02529*TPK%K059(:)*PCONC(:,19)*PCONC(:,14) + PPROD(:,35) = +1.02529*TPK%K059(:)*PCONC(:,20)*PCONC(:,15) !PLOSS(ALKEP) = +K092*<NO>+K099*<HO2>+K106*<MO2>+K112*<CARBOP>+K121*<NO3> - PLOSS(:,34) = +TPK%K092(:)*PCONC(:,3)+TPK%K099(:)*PCONC(:,15)+TPK%K106(:)*PCON& -&C(:,32)+TPK%K112(:)*PCONC(:,39)+TPK%K121(:)*PCONC(:,5) + PLOSS(:,35) = +TPK%K092(:)*PCONC(:,3)+TPK%K099(:)*PCONC(:,16)+TPK%K106(:)*PCON& +&C(:,33)+TPK%K112(:)*PCONC(:,40)+TPK%K121(:)*PCONC(:,5) ! !PPROD(BIOP) = +0.00000*K059*<ALKE>*<OH>+1.00000*K060*<BIO>*<OH> - PPROD(:,35) = +0.00000*TPK%K059(:)*PCONC(:,19)*PCONC(:,14)+1.00000*TPK%K060(:)& -&*PCONC(:,20)*PCONC(:,14) + PPROD(:,36) = +0.00000*TPK%K059(:)*PCONC(:,20)*PCONC(:,15)+1.00000*TPK%K060(:)& +&*PCONC(:,21)*PCONC(:,15) !PLOSS(BIOP) = +K093*<NO>+K0100*<HO2>+K107*<MO2>+K113*<CARBOP>+K122*<NO3> - PLOSS(:,35) = +TPK%K093(:)*PCONC(:,3)+TPK%K0100(:)*PCONC(:,15)+TPK%K107(:)*PCO& -&NC(:,32)+TPK%K113(:)*PCONC(:,39)+TPK%K122(:)*PCONC(:,5) + PLOSS(:,36) = +TPK%K093(:)*PCONC(:,3)+TPK%K0100(:)*PCONC(:,16)+TPK%K107(:)*PCO& +&NC(:,33)+TPK%K113(:)*PCONC(:,40)+TPK%K122(:)*PCONC(:,5) ! !PPROD(PHO) = +0.00276*K061*<ARO>*<OH>+K075*<ARO>*<NO3> - PPROD(:,36) = +0.00276*TPK%K061(:)*PCONC(:,21)*PCONC(:,14)+TPK%K075(:)*PCONC(:& -&,21)*PCONC(:,5) + PPROD(:,37) = +0.00276*TPK%K061(:)*PCONC(:,22)*PCONC(:,15)+TPK%K075(:)*PCONC(:& +&,22)*PCONC(:,5) !PLOSS(PHO) = +K083*<NO2>+K084*<HO2> - PLOSS(:,36) = +TPK%K083(:)*PCONC(:,4)+TPK%K084(:)*PCONC(:,15) + PLOSS(:,37) = +TPK%K083(:)*PCONC(:,4)+TPK%K084(:)*PCONC(:,16) ! !PPROD(ADD) = +0.93968*K061*<ARO>*<OH> - PPROD(:,37) = +0.93968*TPK%K061(:)*PCONC(:,21)*PCONC(:,14) + PPROD(:,38) = +0.93968*TPK%K061(:)*PCONC(:,22)*PCONC(:,15) !PLOSS(ADD) = +K085*<NO2>+K086*<O2>+K087*<O3> - PLOSS(:,37) = +TPK%K085(:)*PCONC(:,4)+TPK%K086(:)*TPK%O2(:)+TPK%K087(:)*PCONC(& + PLOSS(:,38) = +TPK%K085(:)*PCONC(:,4)+TPK%K086(:)*TPK%O2(:)+TPK%K087(:)*PCONC(& &:,1) ! !PPROD(AROP) = +0.98*K086*<ADD>*<O2> - PPROD(:,38) = +0.98*TPK%K086(:)*PCONC(:,37)*TPK%O2(:) + PPROD(:,39) = +0.98*TPK%K086(:)*PCONC(:,38)*TPK%O2(:) !PLOSS(AROP) = +K094*<NO>+K0101*<HO2>+K108*<MO2>+K114*<CARBOP>+K123*<NO3> - PLOSS(:,38) = +TPK%K094(:)*PCONC(:,3)+TPK%K0101(:)*PCONC(:,15)+TPK%K108(:)*PCO& -&NC(:,32)+TPK%K114(:)*PCONC(:,39)+TPK%K123(:)*PCONC(:,5) + PLOSS(:,39) = +TPK%K094(:)*PCONC(:,3)+TPK%K0101(:)*PCONC(:,16)+TPK%K108(:)*PCO& +&NC(:,33)+TPK%K114(:)*PCONC(:,40)+TPK%K123(:)*PCONC(:,5) ! !PPROD(CARBOP) = +1.00000*K015*<KET>+0.69622*K016*<CARBO>+1.00000*K063*<ALD>*<O !H>+1.00000*K064*<KET>*<OH>+0.51419*K065*<CARBO>*<OH>+0.05413*K069*<OP2>*<OH>+1 @@ -5689,42 +5739,42 @@ SUBROUTINE SUB3 !17000*K080*<BIO>*<O3>+0.27460*K081*<CARBO>*<O3>+0.70000*K082*<PAN>*<O3>+1.0000 !0*K089*<PAN>+0.09532*K095*<CARBOP>*<NO>+0.05954*K109*<CARBOP>*<MO2>+0.05821*K1 !15*<CARBOP>*<CARBOP>+0.03175*K124*<CARBOP>*<NO3> - PPROD(:,39) = +1.00000*TPK%K015(:)*PCONC(:,24)+0.69622*TPK%K016(:)*PCONC(:,25)& -&+1.00000*TPK%K063(:)*PCONC(:,23)*PCONC(:,14)+1.00000*TPK%K064(:)*PCONC(:,24)*P& -&CONC(:,14)+0.51419*TPK%K065(:)*PCONC(:,25)*PCONC(:,14)+0.05413*TPK%K069(:)*PCO& -&NC(:,29)*PCONC(:,14)+1.00000*TPK%K073(:)*PCONC(:,23)*PCONC(:,5)+0.38881*TPK%K0& -&74(:)*PCONC(:,25)*PCONC(:,5)+0.05705*TPK%K079(:)*PCONC(:,19)*PCONC(:,1)+0.1700& -&0*TPK%K080(:)*PCONC(:,20)*PCONC(:,1)+0.27460*TPK%K081(:)*PCONC(:,25)*PCONC(:,1& -&)+0.70000*TPK%K082(:)*PCONC(:,27)*PCONC(:,1)+1.00000*TPK%K089(:)*PCONC(:,27)+0& -&.09532*TPK%K095(:)*PCONC(:,39)*PCONC(:,3)+0.05954*TPK%K109(:)*PCONC(:,39)*PCON& -&C(:,32)+0.05821*TPK%K115(:)*PCONC(:,39)*PCONC(:,39)+0.03175*TPK%K124(:)*PCONC(& -&:,39)*PCONC(:,5) + PPROD(:,40) = +1.00000*TPK%K015(:)*PCONC(:,25)+0.69622*TPK%K016(:)*PCONC(:,26)& +&+1.00000*TPK%K063(:)*PCONC(:,24)*PCONC(:,15)+1.00000*TPK%K064(:)*PCONC(:,25)*P& +&CONC(:,15)+0.51419*TPK%K065(:)*PCONC(:,26)*PCONC(:,15)+0.05413*TPK%K069(:)*PCO& +&NC(:,30)*PCONC(:,15)+1.00000*TPK%K073(:)*PCONC(:,24)*PCONC(:,5)+0.38881*TPK%K0& +&74(:)*PCONC(:,26)*PCONC(:,5)+0.05705*TPK%K079(:)*PCONC(:,20)*PCONC(:,1)+0.1700& +&0*TPK%K080(:)*PCONC(:,21)*PCONC(:,1)+0.27460*TPK%K081(:)*PCONC(:,26)*PCONC(:,1& +&)+0.70000*TPK%K082(:)*PCONC(:,28)*PCONC(:,1)+1.00000*TPK%K089(:)*PCONC(:,28)+0& +&.09532*TPK%K095(:)*PCONC(:,40)*PCONC(:,3)+0.05954*TPK%K109(:)*PCONC(:,40)*PCON& +&C(:,33)+0.05821*TPK%K115(:)*PCONC(:,40)*PCONC(:,40)+0.03175*TPK%K124(:)*PCONC(& +&:,40)*PCONC(:,5) !PLOSS(CARBOP) = +K088*<NO2>+K095*<NO>+K0102*<HO2>+K109*<MO2>+K111*<ALKAP>+K112 !*<ALKEP>+K113*<BIOP>+K114*<AROP>+K115*<CARBOP>+K115*<CARBOP>+K116*<OLN>+K124*< !NO3>+K128*<XO2> - PLOSS(:,39) = +TPK%K088(:)*PCONC(:,4)+TPK%K095(:)*PCONC(:,3)+TPK%K0102(:)*PCON& -&C(:,15)+TPK%K109(:)*PCONC(:,32)+TPK%K111(:)*PCONC(:,33)+TPK%K112(:)*PCONC(:,34& -&)+TPK%K113(:)*PCONC(:,35)+TPK%K114(:)*PCONC(:,38)+TPK%K115(:)*PCONC(:,39)+TPK%& -&K115(:)*PCONC(:,39)+TPK%K116(:)*PCONC(:,40)+TPK%K124(:)*PCONC(:,5)+TPK%K128(:)& -&*PCONC(:,41) -! -!PPROD(OLN) = +0.00000*K074*<CARBO>*<NO3>+0.93768*K076*<ALKE>*<NO3>+1.00000*K07 -!7*<BIO>*<NO3> - PPROD(:,40) = +0.00000*TPK%K074(:)*PCONC(:,25)*PCONC(:,5)+0.93768*TPK%K076(:)*& -&PCONC(:,19)*PCONC(:,5)+1.00000*TPK%K077(:)*PCONC(:,20)*PCONC(:,5) -!PLOSS(OLN) = +K096*<NO>+K103*<HO2>+K110*<MO2>+K116*<CARBOP>+K117*<OLN>+K117*<O -!LN>+K118*<OLN>+K118*<OLN>+K125*<NO3> - PLOSS(:,40) = +TPK%K096(:)*PCONC(:,3)+TPK%K103(:)*PCONC(:,15)+TPK%K110(:)*PCON& -&C(:,32)+TPK%K116(:)*PCONC(:,39)+TPK%K117(:)*PCONC(:,40)+TPK%K117(:)*PCONC(:,40& -&)+TPK%K118(:)*PCONC(:,40)+TPK%K118(:)*PCONC(:,40)+TPK%K125(:)*PCONC(:,5) + PLOSS(:,40) = +TPK%K088(:)*PCONC(:,4)+TPK%K095(:)*PCONC(:,3)+TPK%K0102(:)*PCON& +&C(:,16)+TPK%K109(:)*PCONC(:,33)+TPK%K111(:)*PCONC(:,34)+TPK%K112(:)*PCONC(:,35& +&)+TPK%K113(:)*PCONC(:,36)+TPK%K114(:)*PCONC(:,39)+TPK%K115(:)*PCONC(:,40)+TPK%& +&K115(:)*PCONC(:,40)+TPK%K116(:)*PCONC(:,41)+TPK%K124(:)*PCONC(:,5)+TPK%K128(:)& +&*PCONC(:,42) ! RETURN END SUBROUTINE SUB3 ! SUBROUTINE SUB4 ! -!Indices 41 a 41 +!Indices 41 a 42 +! ! +!PPROD(OLN) = +0.00000*K074*<CARBO>*<NO3>+0.93768*K076*<ALKE>*<NO3>+1.00000*K07 +!7*<BIO>*<NO3> + PPROD(:,41) = +0.00000*TPK%K074(:)*PCONC(:,26)*PCONC(:,5)+0.93768*TPK%K076(:)*& +&PCONC(:,20)*PCONC(:,5)+1.00000*TPK%K077(:)*PCONC(:,21)*PCONC(:,5) +!PLOSS(OLN) = +K096*<NO>+K103*<HO2>+K110*<MO2>+K116*<CARBOP>+K117*<OLN>+K117*<O +!LN>+K118*<OLN>+K118*<OLN>+K125*<NO3> + PLOSS(:,41) = +TPK%K096(:)*PCONC(:,3)+TPK%K103(:)*PCONC(:,16)+TPK%K110(:)*PCON& +&C(:,33)+TPK%K116(:)*PCONC(:,40)+TPK%K117(:)*PCONC(:,41)+TPK%K117(:)*PCONC(:,41& +&)+TPK%K118(:)*PCONC(:,41)+TPK%K118(:)*PCONC(:,41)+TPK%K125(:)*PCONC(:,5) ! !PPROD(XO2) = +0.15*K054*<BIO>*<O3P>+0.10318*K061*<ARO>*<OH>+0.10162*K065*<CARB !O>*<OH>+0.09333*K069*<OP2>*<OH>+K070*<PAN>*<OH>+0.10530*K074*<CARBO>*<NO3>+K07 @@ -5732,20 +5782,20 @@ SUBROUTINE SUB4 !LKAP>*<NO>+0.02563*K095*<CARBOP>*<NO>+0.13370*K105*<ALKAP>*<MO2>+0.02212*K109* !<CARBOP>*<MO2>+0.11306*K111*<ALKAP>*<CARBOP>+0.01593*K115*<CARBOP>*<CARBOP>+0. !16271*K120*<ALKAP>*<NO3>+0.01021*K124*<CARBOP>*<NO3> - PPROD(:,41) = +0.15*TPK%K054(:)*PCONC(:,20)*TPK%O3P(:)+0.10318*TPK%K061(:)*PCO& -&NC(:,21)*PCONC(:,14)+0.10162*TPK%K065(:)*PCONC(:,25)*PCONC(:,14)+0.09333*TPK%K& -&069(:)*PCONC(:,29)*PCONC(:,14)+TPK%K070(:)*PCONC(:,27)*PCONC(:,14)+0.10530*TPK& -&%K074(:)*PCONC(:,25)*PCONC(:,5)+TPK%K078(:)*PCONC(:,27)*PCONC(:,5)+0.00000*TPK& -&%K079(:)*PCONC(:,19)*PCONC(:,1)+0.13000*TPK%K080(:)*PCONC(:,20)*PCONC(:,1)+0.1& -&3007*TPK%K091(:)*PCONC(:,33)*PCONC(:,3)+0.02563*TPK%K095(:)*PCONC(:,39)*PCONC(& -&:,3)+0.13370*TPK%K105(:)*PCONC(:,33)*PCONC(:,32)+0.02212*TPK%K109(:)*PCONC(:,3& -&9)*PCONC(:,32)+0.11306*TPK%K111(:)*PCONC(:,33)*PCONC(:,39)+0.01593*TPK%K115(:)& -&*PCONC(:,39)*PCONC(:,39)+0.16271*TPK%K120(:)*PCONC(:,33)*PCONC(:,5)+0.01021*TP& -&K%K124(:)*PCONC(:,39)*PCONC(:,5) + PPROD(:,42) = +0.15*TPK%K054(:)*PCONC(:,21)*TPK%O3P(:)+0.10318*TPK%K061(:)*PCO& +&NC(:,22)*PCONC(:,15)+0.10162*TPK%K065(:)*PCONC(:,26)*PCONC(:,15)+0.09333*TPK%K& +&069(:)*PCONC(:,30)*PCONC(:,15)+TPK%K070(:)*PCONC(:,28)*PCONC(:,15)+0.10530*TPK& +&%K074(:)*PCONC(:,26)*PCONC(:,5)+TPK%K078(:)*PCONC(:,28)*PCONC(:,5)+0.00000*TPK& +&%K079(:)*PCONC(:,20)*PCONC(:,1)+0.13000*TPK%K080(:)*PCONC(:,21)*PCONC(:,1)+0.1& +&3007*TPK%K091(:)*PCONC(:,34)*PCONC(:,3)+0.02563*TPK%K095(:)*PCONC(:,40)*PCONC(& +&:,3)+0.13370*TPK%K105(:)*PCONC(:,34)*PCONC(:,33)+0.02212*TPK%K109(:)*PCONC(:,4& +&0)*PCONC(:,33)+0.11306*TPK%K111(:)*PCONC(:,34)*PCONC(:,40)+0.01593*TPK%K115(:)& +&*PCONC(:,40)*PCONC(:,40)+0.16271*TPK%K120(:)*PCONC(:,34)*PCONC(:,5)+0.01021*TP& +&K%K124(:)*PCONC(:,40)*PCONC(:,5) !PLOSS(XO2) = +K126*<HO2>+K127*<MO2>+K128*<CARBOP>+K129*<XO2>+K129*<XO2>+K130*< !NO>+K131*<NO3> - PLOSS(:,41) = +TPK%K126(:)*PCONC(:,15)+TPK%K127(:)*PCONC(:,32)+TPK%K128(:)*PCO& -&NC(:,39)+TPK%K129(:)*PCONC(:,41)+TPK%K129(:)*PCONC(:,41)+TPK%K130(:)*PCONC(:,3& + PLOSS(:,42) = +TPK%K126(:)*PCONC(:,16)+TPK%K127(:)*PCONC(:,33)+TPK%K128(:)*PCO& +&NC(:,40)+TPK%K129(:)*PCONC(:,42)+TPK%K129(:)*PCONC(:,42)+TPK%K130(:)*PCONC(:,3& &)+TPK%K131(:)*PCONC(:,5) ! RETURN @@ -6019,7 +6069,7 @@ TPK%O3P(:)=(TPK%K001(:)*PCONC(:,JP_NO2)+TPK%K003(:)*PCONC(:,JP_O3)+TPK%K008(:)*P &0.09000*TPK%K080(:)*PCONC(:,JP_BIO)*PCONC(:,JP_O3))/& &(TPK%K018(:)*TPK%O2(:)+TPK%K019(:)*PCONC(:,JP_O3)+TPK%K029(:)*PCONC(:,JP_NO)+& &TPK%K030(:)*PCONC(:,JP_NO2)+TPK%K031(:)*PCONC(:,JP_NO2)+TPK%K054(:)*PCONC(:,JP_BIO)+& - &TPK%K055(:)*PCONC(:,JP_CARBO)) + &TPK%K055(:)*PCONC(:,JP_CARBO)+TPK%K134(:)*PCONC(:,JP_DMS)) ! /END_CODE/ PJAC(:,:,:) = 0.0 CALL SUBJ0 @@ -6053,9 +6103,9 @@ SUBROUTINE SUBJ0 !O3/O3=-K002-K003-K019*<O3P>-K023*<OH>-K024*<HO2>-K042*<NO>-K043*<NO2>-K079*<AL !KE>-K080*<BIO>-K081*<CARBO>-K082*<PAN>-K087*<ADD>-KTC1-KTR1 PJAC(:,1,1)=-TPK%K002(:)-TPK%K003(:)-TPK%K019(:)*TPK%O3P(:)-TPK%K023(:)*PCONC(& -&:,14)-TPK%K024(:)*PCONC(:,15)-TPK%K042(:)*PCONC(:,3)-TPK%K043(:)*PCONC(:,4)-TP& -&K%K079(:)*PCONC(:,19)-TPK%K080(:)*PCONC(:,20)-TPK%K081(:)*PCONC(:,25)-TPK%K082& -&(:)*PCONC(:,27)-TPK%K087(:)*PCONC(:,37)-TPK%KTC1(:)-TPK%KTR1(:) +&:,15)-TPK%K024(:)*PCONC(:,16)-TPK%K042(:)*PCONC(:,3)-TPK%K043(:)*PCONC(:,4)-TP& +&K%K079(:)*PCONC(:,20)-TPK%K080(:)*PCONC(:,21)-TPK%K081(:)*PCONC(:,26)-TPK%K082& +&(:)*PCONC(:,28)-TPK%K087(:)*PCONC(:,38)-TPK%KTC1(:)-TPK%KTR1(:) ! !O3/H2O2=0.0 ! @@ -6077,6 +6127,8 @@ SUBROUTINE SUBJ0 ! !O3/NH3=0.0 ! +!O3/DMS=0.0 +! !O3/SO2=0.0 ! !O3/SULF=0.0 @@ -6084,10 +6136,10 @@ SUBROUTINE SUBJ0 !O3/CO=0.0 ! !O3/OH=-K023*<O3> - PJAC(:,1,14)=-TPK%K023(:)*PCONC(:,1) + PJAC(:,1,15)=-TPK%K023(:)*PCONC(:,1) ! !O3/HO2=-K024*<O3>+0.17307*K0102*<CARBOP> - PJAC(:,1,15)=-TPK%K024(:)*PCONC(:,1)+0.17307*TPK%K0102(:)*PCONC(:,39) + PJAC(:,1,16)=-TPK%K024(:)*PCONC(:,1)+0.17307*TPK%K0102(:)*PCONC(:,40) ! !O3/CH4=0.0 ! @@ -6096,10 +6148,10 @@ SUBROUTINE SUBJ0 !O3/ALKA=0.0 ! !O3/ALKE=-K079*<O3> - PJAC(:,1,19)=-TPK%K079(:)*PCONC(:,1) + PJAC(:,1,20)=-TPK%K079(:)*PCONC(:,1) ! !O3/BIO=-K080*<O3> - PJAC(:,1,20)=-TPK%K080(:)*PCONC(:,1) + PJAC(:,1,21)=-TPK%K080(:)*PCONC(:,1) ! !O3/ARO=0.0 ! @@ -6110,12 +6162,12 @@ SUBROUTINE SUBJ0 !O3/KET=0.0 ! !O3/CARBO=-K081*<O3> - PJAC(:,1,25)=-TPK%K081(:)*PCONC(:,1) + PJAC(:,1,26)=-TPK%K081(:)*PCONC(:,1) ! !O3/ONIT=0.0 ! !O3/PAN=-K082*<O3> - PJAC(:,1,27)=-TPK%K082(:)*PCONC(:,1) + PJAC(:,1,28)=-TPK%K082(:)*PCONC(:,1) ! !O3/OP1=0.0 ! @@ -6136,19 +6188,19 @@ SUBROUTINE SUBJ0 !O3/PHO=0.0 ! !O3/ADD=-K087*<O3> - PJAC(:,1,37)=-TPK%K087(:)*PCONC(:,1) + PJAC(:,1,38)=-TPK%K087(:)*PCONC(:,1) ! !O3/AROP=0.0 ! !O3/CARBOP=+0.17307*K0102*<HO2> - PJAC(:,1,39)=+0.17307*TPK%K0102(:)*PCONC(:,15) + PJAC(:,1,40)=+0.17307*TPK%K0102(:)*PCONC(:,16) ! !O3/OLN=0.0 ! !O3/XO2=0.0 ! !O3/WC_O3=+KTC21 - PJAC(:,1,42)=+TPK%KTC21(:) + PJAC(:,1,43)=+TPK%KTC21(:) ! !O3/WC_H2O2=0.0 ! @@ -6199,7 +6251,7 @@ SUBROUTINE SUBJ0 !O3/WC_AHMS=0.0 ! !O3/WR_O3=+KTR21 - PJAC(:,1,67)=+TPK%KTR21(:) + PJAC(:,1,68)=+TPK%KTR21(:) ! !O3/WR_H2O2=0.0 ! @@ -6250,10 +6302,10 @@ SUBROUTINE SUBJ0 !O3/WR_AHMS=0.0 ! !H2O2/O3=+0.01833*K079*<ALKE>+0.00100*K080*<BIO> - PJAC(:,2,1)=+0.01833*TPK%K079(:)*PCONC(:,19)+0.00100*TPK%K080(:)*PCONC(:,20) + PJAC(:,2,1)=+0.01833*TPK%K079(:)*PCONC(:,20)+0.00100*TPK%K080(:)*PCONC(:,21) ! !H2O2/H2O2=-K009-K026*<OH>-KTC2-KTR2 - PJAC(:,2,2)=-TPK%K009(:)-TPK%K026(:)*PCONC(:,14)-TPK%KTC2(:)-TPK%KTR2(:) + PJAC(:,2,2)=-TPK%K009(:)-TPK%K026(:)*PCONC(:,15)-TPK%KTC2(:)-TPK%KTR2(:) ! !H2O2/NO=0.0 ! @@ -6271,6 +6323,8 @@ SUBROUTINE SUBJ0 ! !H2O2/NH3=0.0 ! +!H2O2/DMS=0.0 +! !H2O2/SO2=0.0 ! !H2O2/SULF=0.0 @@ -6278,11 +6332,11 @@ SUBROUTINE SUBJ0 !H2O2/CO=0.0 ! !H2O2/OH=-K026*<H2O2> - PJAC(:,2,14)=-TPK%K026(:)*PCONC(:,2) + PJAC(:,2,15)=-TPK%K026(:)*PCONC(:,2) ! !H2O2/HO2=+K027*<HO2>+K027*<HO2>+K028*<HO2>*<H2O>+K028*<HO2>*<H2O> - PJAC(:,2,15)=+TPK%K027(:)*PCONC(:,15)+TPK%K027(:)*PCONC(:,15)+TPK%K028(:)*PCON& -&C(:,15)*TPK%H2O(:)+TPK%K028(:)*PCONC(:,15)*TPK%H2O(:) + PJAC(:,2,16)=+TPK%K027(:)*PCONC(:,16)+TPK%K027(:)*PCONC(:,16)+TPK%K028(:)*PCON& +&C(:,16)*TPK%H2O(:)+TPK%K028(:)*PCONC(:,16)*TPK%H2O(:) ! !H2O2/CH4=0.0 ! @@ -6291,10 +6345,10 @@ SUBROUTINE SUBJ0 !H2O2/ALKA=0.0 ! !H2O2/ALKE=+0.01833*K079*<O3> - PJAC(:,2,19)=+0.01833*TPK%K079(:)*PCONC(:,1) + PJAC(:,2,20)=+0.01833*TPK%K079(:)*PCONC(:,1) ! !H2O2/BIO=+0.00100*K080*<O3> - PJAC(:,2,20)=+0.00100*TPK%K080(:)*PCONC(:,1) + PJAC(:,2,21)=+0.00100*TPK%K080(:)*PCONC(:,1) ! !H2O2/ARO=0.0 ! @@ -6341,7 +6395,7 @@ SUBROUTINE SUBJ0 !H2O2/WC_O3=0.0 ! !H2O2/WC_H2O2=+KTC22 - PJAC(:,2,43)=+TPK%KTC22(:) + PJAC(:,2,44)=+TPK%KTC22(:) ! !H2O2/WC_NO=0.0 ! @@ -6392,7 +6446,7 @@ SUBROUTINE SUBJ0 !H2O2/WR_O3=0.0 ! !H2O2/WR_H2O2=+KTR22 - PJAC(:,2,68)=+TPK%KTR22(:) + PJAC(:,2,69)=+TPK%KTR22(:) ! !H2O2/WR_NO=0.0 ! @@ -6448,12 +6502,12 @@ SUBROUTINE SUBJ0 !NO/NO=-K029*<O3P>-K032*<OH>-K035*<HO2>-K042*<O3>-K044*<NO>*<O2>-K044*<NO>*<O2> !-K044*<NO>*<O2>-K044*<NO>*<O2>-K045*<NO3>-K090*<MO2>-K091*<ALKAP>-K092*<ALKEP> !-K093*<BIOP>-K094*<AROP>-K095*<CARBOP>-K096*<OLN>-K130*<XO2>-KTC3-KTR3 - PJAC(:,3,3)=-TPK%K029(:)*TPK%O3P(:)-TPK%K032(:)*PCONC(:,14)-TPK%K035(:)*PCONC(& -&:,15)-TPK%K042(:)*PCONC(:,1)-TPK%K044(:)*PCONC(:,3)*TPK%O2(:)-TPK%K044(:)*PCON& + PJAC(:,3,3)=-TPK%K029(:)*TPK%O3P(:)-TPK%K032(:)*PCONC(:,15)-TPK%K035(:)*PCONC(& +&:,16)-TPK%K042(:)*PCONC(:,1)-TPK%K044(:)*PCONC(:,3)*TPK%O2(:)-TPK%K044(:)*PCON& &C(:,3)*TPK%O2(:)-TPK%K044(:)*PCONC(:,3)*TPK%O2(:)-TPK%K044(:)*PCONC(:,3)*TPK%O& -&2(:)-TPK%K045(:)*PCONC(:,5)-TPK%K090(:)*PCONC(:,32)-TPK%K091(:)*PCONC(:,33)-TP& -&K%K092(:)*PCONC(:,34)-TPK%K093(:)*PCONC(:,35)-TPK%K094(:)*PCONC(:,38)-TPK%K095& -&(:)*PCONC(:,39)-TPK%K096(:)*PCONC(:,40)-TPK%K130(:)*PCONC(:,41)-TPK%KTC3(:)-TP& +&2(:)-TPK%K045(:)*PCONC(:,5)-TPK%K090(:)*PCONC(:,33)-TPK%K091(:)*PCONC(:,34)-TP& +&K%K092(:)*PCONC(:,35)-TPK%K093(:)*PCONC(:,36)-TPK%K094(:)*PCONC(:,39)-TPK%K095& +&(:)*PCONC(:,40)-TPK%K096(:)*PCONC(:,41)-TPK%K130(:)*PCONC(:,42)-TPK%KTC3(:)-TP& &K%KTR3(:) ! !NO/NO2=+K001+K030*<O3P>+K046*<NO3> @@ -6473,6 +6527,8 @@ SUBROUTINE SUBJ0 ! !NO/NH3=0.0 ! +!NO/DMS=0.0 +! !NO/SO2=0.0 ! !NO/SULF=0.0 @@ -6480,10 +6536,10 @@ SUBROUTINE SUBJ0 !NO/CO=0.0 ! !NO/OH=-K032*<NO> - PJAC(:,3,14)=-TPK%K032(:)*PCONC(:,3) + PJAC(:,3,15)=-TPK%K032(:)*PCONC(:,3) ! !NO/HO2=-K035*<NO> - PJAC(:,3,15)=-TPK%K035(:)*PCONC(:,3) + PJAC(:,3,16)=-TPK%K035(:)*PCONC(:,3) ! !NO/CH4=0.0 ! @@ -6518,39 +6574,39 @@ SUBROUTINE SUBJ0 !NO/ORA2=0.0 ! !NO/MO2=-K090*<NO> - PJAC(:,3,32)=-TPK%K090(:)*PCONC(:,3) + PJAC(:,3,33)=-TPK%K090(:)*PCONC(:,3) ! !NO/ALKAP=-K091*<NO> - PJAC(:,3,33)=-TPK%K091(:)*PCONC(:,3) + PJAC(:,3,34)=-TPK%K091(:)*PCONC(:,3) ! !NO/ALKEP=-K092*<NO> - PJAC(:,3,34)=-TPK%K092(:)*PCONC(:,3) + PJAC(:,3,35)=-TPK%K092(:)*PCONC(:,3) ! !NO/BIOP=-K093*<NO> - PJAC(:,3,35)=-TPK%K093(:)*PCONC(:,3) + PJAC(:,3,36)=-TPK%K093(:)*PCONC(:,3) ! !NO/PHO=0.0 ! !NO/ADD=0.0 ! !NO/AROP=-K094*<NO> - PJAC(:,3,38)=-TPK%K094(:)*PCONC(:,3) + PJAC(:,3,39)=-TPK%K094(:)*PCONC(:,3) ! !NO/CARBOP=-K095*<NO> - PJAC(:,3,39)=-TPK%K095(:)*PCONC(:,3) + PJAC(:,3,40)=-TPK%K095(:)*PCONC(:,3) ! !NO/OLN=-K096*<NO> - PJAC(:,3,40)=-TPK%K096(:)*PCONC(:,3) + PJAC(:,3,41)=-TPK%K096(:)*PCONC(:,3) ! !NO/XO2=-K130*<NO> - PJAC(:,3,41)=-TPK%K130(:)*PCONC(:,3) + PJAC(:,3,42)=-TPK%K130(:)*PCONC(:,3) ! !NO/WC_O3=0.0 ! !NO/WC_H2O2=0.0 ! !NO/WC_NO=+KTC23 - PJAC(:,3,44)=+TPK%KTC23(:) + PJAC(:,3,45)=+TPK%KTC23(:) ! !NO/WC_NO2=0.0 ! @@ -6601,7 +6657,7 @@ SUBROUTINE SUBJ0 !NO/WR_H2O2=0.0 ! !NO/WR_NO=+KTR23 - PJAC(:,3,69)=+TPK%KTR23(:) + PJAC(:,3,70)=+TPK%KTR23(:) ! !NO/WR_NO2=0.0 ! @@ -6649,7 +6705,7 @@ SUBROUTINE SUBJ0 ! !NO2/O3=+K042*<NO>-K043*<NO2>+0.70*K082*<PAN> PJAC(:,4,1)=+TPK%K042(:)*PCONC(:,3)-TPK%K043(:)*PCONC(:,4)+0.70*TPK%K082(:)*PC& -&ONC(:,27) +&ONC(:,28) ! !NO2/H2O2=0.0 ! @@ -6657,47 +6713,51 @@ SUBROUTINE SUBJ0 !>*<O2>+K044*<NO>*<O2>+K045*<NO3>+K045*<NO3>+K090*<MO2>+0.91541*K091*<ALKAP>+K0 !92*<ALKEP>+0.84700*K093*<BIOP>+0.95115*K094*<AROP>+K095*<CARBOP>+1.81599*K096* !<OLN>+K130*<XO2> - PJAC(:,4,3)=+TPK%K029(:)*TPK%O3P(:)+TPK%K035(:)*PCONC(:,15)+TPK%K042(:)*PCONC(& + PJAC(:,4,3)=+TPK%K029(:)*TPK%O3P(:)+TPK%K035(:)*PCONC(:,16)+TPK%K042(:)*PCONC(& &:,1)+TPK%K044(:)*PCONC(:,3)*TPK%O2(:)+TPK%K044(:)*PCONC(:,3)*TPK%O2(:)+TPK%K04& &4(:)*PCONC(:,3)*TPK%O2(:)+TPK%K044(:)*PCONC(:,3)*TPK%O2(:)+TPK%K045(:)*PCONC(:& -&,5)+TPK%K045(:)*PCONC(:,5)+TPK%K090(:)*PCONC(:,32)+0.91541*TPK%K091(:)*PCONC(:& -&,33)+TPK%K092(:)*PCONC(:,34)+0.84700*TPK%K093(:)*PCONC(:,35)+0.95115*TPK%K094(& -&:)*PCONC(:,38)+TPK%K095(:)*PCONC(:,39)+1.81599*TPK%K096(:)*PCONC(:,40)+TPK%K13& -&0(:)*PCONC(:,41) +&,5)+TPK%K045(:)*PCONC(:,5)+TPK%K090(:)*PCONC(:,33)+0.91541*TPK%K091(:)*PCONC(:& +&,34)+TPK%K092(:)*PCONC(:,35)+0.84700*TPK%K093(:)*PCONC(:,36)+0.95115*TPK%K094(& +&:)*PCONC(:,39)+TPK%K095(:)*PCONC(:,40)+1.81599*TPK%K096(:)*PCONC(:,41)+TPK%K13& +&0(:)*PCONC(:,42) ! !NO2/NO2=-K001-K030*<O3P>-K031*<O3P>-K033*<OH>-K036*<HO2>-K043*<O3>+K046*<NO3>- !K046*<NO3>-K047*<NO3>-K083*<PHO>-K085*<ADD>-K088*<CARBOP>-KTC4-KTR4 PJAC(:,4,4)=-TPK%K001(:)-TPK%K030(:)*TPK%O3P(:)-TPK%K031(:)*TPK%O3P(:)-TPK%K03& -&3(:)*PCONC(:,14)-TPK%K036(:)*PCONC(:,15)-TPK%K043(:)*PCONC(:,1)+TPK%K046(:)*PC& -&ONC(:,5)-TPK%K046(:)*PCONC(:,5)-TPK%K047(:)*PCONC(:,5)-TPK%K083(:)*PCONC(:,36)& -&-TPK%K085(:)*PCONC(:,37)-TPK%K088(:)*PCONC(:,39)-TPK%KTC4(:)-TPK%KTR4(:) +&3(:)*PCONC(:,15)-TPK%K036(:)*PCONC(:,16)-TPK%K043(:)*PCONC(:,1)+TPK%K046(:)*PC& +&ONC(:,5)-TPK%K046(:)*PCONC(:,5)-TPK%K047(:)*PCONC(:,5)-TPK%K083(:)*PCONC(:,37)& +&-TPK%K085(:)*PCONC(:,38)-TPK%K088(:)*PCONC(:,40)-TPK%KTC4(:)-TPK%KTR4(:) ! !NO2/NO3=+K008+K034*<OH>+0.7*K038*<HO2>+K045*<NO>+K045*<NO>+K046*<NO2>-K046*<NO !2>-K047*<NO2>+K049*<NO3>+K049*<NO3>+K049*<NO3>+K049*<NO3>+0.10530*K074*<CARBO> !+0.40*K078*<PAN>+K119*<MO2>+K120*<ALKAP>+K121*<ALKEP>+K122*<BIOP>+K123*<AROP>+ -!K124*<CARBOP>+1.74072*K125*<OLN>+K131*<XO2> - PJAC(:,4,5)=+TPK%K008(:)+TPK%K034(:)*PCONC(:,14)+0.7*TPK%K038(:)*PCONC(:,15)+T& +!K124*<CARBOP>+1.74072*K125*<OLN>+K131*<XO2>+K133*<DMS> + PJAC(:,4,5)=+TPK%K008(:)+TPK%K034(:)*PCONC(:,15)+0.7*TPK%K038(:)*PCONC(:,16)+T& &PK%K045(:)*PCONC(:,3)+TPK%K045(:)*PCONC(:,3)+TPK%K046(:)*PCONC(:,4)-TPK%K046(:& &)*PCONC(:,4)-TPK%K047(:)*PCONC(:,4)+TPK%K049(:)*PCONC(:,5)+TPK%K049(:)*PCONC(:& &,5)+TPK%K049(:)*PCONC(:,5)+TPK%K049(:)*PCONC(:,5)+0.10530*TPK%K074(:)*PCONC(:,& -&25)+0.40*TPK%K078(:)*PCONC(:,27)+TPK%K119(:)*PCONC(:,32)+TPK%K120(:)*PCONC(:,3& -&3)+TPK%K121(:)*PCONC(:,34)+TPK%K122(:)*PCONC(:,35)+TPK%K123(:)*PCONC(:,38)+TPK& -&%K124(:)*PCONC(:,39)+1.74072*TPK%K125(:)*PCONC(:,40)+TPK%K131(:)*PCONC(:,41) +&26)+0.40*TPK%K078(:)*PCONC(:,28)+TPK%K119(:)*PCONC(:,33)+TPK%K120(:)*PCONC(:,3& +&4)+TPK%K121(:)*PCONC(:,35)+TPK%K122(:)*PCONC(:,36)+TPK%K123(:)*PCONC(:,39)+TPK& +&%K124(:)*PCONC(:,40)+1.74072*TPK%K125(:)*PCONC(:,41)+TPK%K131(:)*PCONC(:,42)+T& +&PK%K133(:)*PCONC(:,11) ! !NO2/N2O5=+K048 PJAC(:,4,6)=+TPK%K048(:) ! !NO2/HONO=+K039*<OH> - PJAC(:,4,7)=+TPK%K039(:)*PCONC(:,14) + PJAC(:,4,7)=+TPK%K039(:)*PCONC(:,15) ! !NO2/HNO3=+K005 PJAC(:,4,8)=+TPK%K005(:) ! !NO2/HNO4=+0.65*K006+K037+K041*<OH> - PJAC(:,4,9)=+0.65*TPK%K006(:)+TPK%K037(:)+TPK%K041(:)*PCONC(:,14) + PJAC(:,4,9)=+0.65*TPK%K006(:)+TPK%K037(:)+TPK%K041(:)*PCONC(:,15) ! !NO2/NH3=0.0 ! +!NO2/DMS=+K133*<NO3> + PJAC(:,4,11)=+TPK%K133(:)*PCONC(:,5) +! !NO2/SO2=0.0 ! !NO2/SULF=0.0 @@ -6705,11 +6765,11 @@ SUBROUTINE SUBJ0 !NO2/CO=0.0 ! !NO2/OH=-K033*<NO2>+K034*<NO3>+K039*<HONO>+K041*<HNO4>+K071*<ONIT> - PJAC(:,4,14)=-TPK%K033(:)*PCONC(:,4)+TPK%K034(:)*PCONC(:,5)+TPK%K039(:)*PCONC(& -&:,7)+TPK%K041(:)*PCONC(:,9)+TPK%K071(:)*PCONC(:,26) + PJAC(:,4,15)=-TPK%K033(:)*PCONC(:,4)+TPK%K034(:)*PCONC(:,5)+TPK%K039(:)*PCONC(& +&:,7)+TPK%K041(:)*PCONC(:,9)+TPK%K071(:)*PCONC(:,27) ! !NO2/HO2=+K035*<NO>-K036*<NO2>+0.7*K038*<NO3> - PJAC(:,4,15)=+TPK%K035(:)*PCONC(:,3)-TPK%K036(:)*PCONC(:,4)+0.7*TPK%K038(:)*PC& + PJAC(:,4,16)=+TPK%K035(:)*PCONC(:,3)-TPK%K036(:)*PCONC(:,4)+0.7*TPK%K038(:)*PC& &ONC(:,5) ! !NO2/CH4=0.0 @@ -6731,13 +6791,13 @@ SUBROUTINE SUBJ0 !NO2/KET=0.0 ! !NO2/CARBO=+0.10530*K074*<NO3> - PJAC(:,4,25)=+0.10530*TPK%K074(:)*PCONC(:,5) + PJAC(:,4,26)=+0.10530*TPK%K074(:)*PCONC(:,5) ! !NO2/ONIT=+K017+K071*<OH> - PJAC(:,4,26)=+TPK%K017(:)+TPK%K071(:)*PCONC(:,14) + PJAC(:,4,27)=+TPK%K017(:)+TPK%K071(:)*PCONC(:,15) ! !NO2/PAN=+0.40*K078*<NO3>+0.70*K082*<O3>+K089 - PJAC(:,4,27)=+0.40*TPK%K078(:)*PCONC(:,5)+0.70*TPK%K082(:)*PCONC(:,1)+TPK%K089& + PJAC(:,4,28)=+0.40*TPK%K078(:)*PCONC(:,5)+0.70*TPK%K082(:)*PCONC(:,1)+TPK%K089& &(:) ! !NO2/OP1=0.0 @@ -6749,39 +6809,39 @@ SUBROUTINE SUBJ0 !NO2/ORA2=0.0 ! !NO2/MO2=+K090*<NO>+0.32440*K110*<OLN>+K119*<NO3> - PJAC(:,4,32)=+TPK%K090(:)*PCONC(:,3)+0.32440*TPK%K110(:)*PCONC(:,40)+TPK%K119(& + PJAC(:,4,33)=+TPK%K090(:)*PCONC(:,3)+0.32440*TPK%K110(:)*PCONC(:,41)+TPK%K119(& &:)*PCONC(:,5) ! !NO2/ALKAP=+0.91541*K091*<NO>+K120*<NO3> - PJAC(:,4,33)=+0.91541*TPK%K091(:)*PCONC(:,3)+TPK%K120(:)*PCONC(:,5) + PJAC(:,4,34)=+0.91541*TPK%K091(:)*PCONC(:,3)+TPK%K120(:)*PCONC(:,5) ! !NO2/ALKEP=+K092*<NO>+K121*<NO3> - PJAC(:,4,34)=+TPK%K092(:)*PCONC(:,3)+TPK%K121(:)*PCONC(:,5) + PJAC(:,4,35)=+TPK%K092(:)*PCONC(:,3)+TPK%K121(:)*PCONC(:,5) ! !NO2/BIOP=+0.84700*K093*<NO>+K122*<NO3> - PJAC(:,4,35)=+0.84700*TPK%K093(:)*PCONC(:,3)+TPK%K122(:)*PCONC(:,5) + PJAC(:,4,36)=+0.84700*TPK%K093(:)*PCONC(:,3)+TPK%K122(:)*PCONC(:,5) ! !NO2/PHO=-K083*<NO2> - PJAC(:,4,36)=-TPK%K083(:)*PCONC(:,4) + PJAC(:,4,37)=-TPK%K083(:)*PCONC(:,4) ! !NO2/ADD=-K085*<NO2> - PJAC(:,4,37)=-TPK%K085(:)*PCONC(:,4) + PJAC(:,4,38)=-TPK%K085(:)*PCONC(:,4) ! !NO2/AROP=+0.95115*K094*<NO>+K123*<NO3> - PJAC(:,4,38)=+0.95115*TPK%K094(:)*PCONC(:,3)+TPK%K123(:)*PCONC(:,5) + PJAC(:,4,39)=+0.95115*TPK%K094(:)*PCONC(:,3)+TPK%K123(:)*PCONC(:,5) ! !NO2/CARBOP=-K088*<NO2>+K095*<NO>+0.00000*K116*<OLN>+K124*<NO3> - PJAC(:,4,39)=-TPK%K088(:)*PCONC(:,4)+TPK%K095(:)*PCONC(:,3)+0.00000*TPK%K116(:& -&)*PCONC(:,40)+TPK%K124(:)*PCONC(:,5) + PJAC(:,4,40)=-TPK%K088(:)*PCONC(:,4)+TPK%K095(:)*PCONC(:,3)+0.00000*TPK%K116(:& +&)*PCONC(:,41)+TPK%K124(:)*PCONC(:,5) ! !NO2/OLN=+1.81599*K096*<NO>+0.32440*K110*<MO2>+0.00000*K116*<CARBOP>+0.00000*K1 !18*<OLN>+0.00000*K118*<OLN>+1.74072*K125*<NO3> - PJAC(:,4,40)=+1.81599*TPK%K096(:)*PCONC(:,3)+0.32440*TPK%K110(:)*PCONC(:,32)+0& -&.00000*TPK%K116(:)*PCONC(:,39)+0.00000*TPK%K118(:)*PCONC(:,40)+0.00000*TPK%K11& -&8(:)*PCONC(:,40)+1.74072*TPK%K125(:)*PCONC(:,5) + PJAC(:,4,41)=+1.81599*TPK%K096(:)*PCONC(:,3)+0.32440*TPK%K110(:)*PCONC(:,33)+0& +&.00000*TPK%K116(:)*PCONC(:,40)+0.00000*TPK%K118(:)*PCONC(:,41)+0.00000*TPK%K11& +&8(:)*PCONC(:,41)+1.74072*TPK%K125(:)*PCONC(:,5) ! !NO2/XO2=+K130*<NO>+K131*<NO3> - PJAC(:,4,41)=+TPK%K130(:)*PCONC(:,3)+TPK%K131(:)*PCONC(:,5) + PJAC(:,4,42)=+TPK%K130(:)*PCONC(:,3)+TPK%K131(:)*PCONC(:,5) ! !NO2/WC_O3=0.0 ! @@ -6790,7 +6850,7 @@ SUBROUTINE SUBJ0 !NO2/WC_NO=0.0 ! !NO2/WC_NO2=+KTC24 - PJAC(:,4,45)=+TPK%KTC24(:) + PJAC(:,4,46)=+TPK%KTC24(:) ! !NO2/WC_NO3=0.0 ! @@ -6841,7 +6901,7 @@ SUBROUTINE SUBJ0 !NO2/WR_NO=0.0 ! !NO2/WR_NO2=+KTR24 - PJAC(:,4,70)=+TPK%KTR24(:) + PJAC(:,4,71)=+TPK%KTR24(:) ! !NO2/WR_NO3=0.0 ! @@ -6900,17 +6960,17 @@ SUBROUTINE SUBJ0 !NO3/NO3=-K007-K008-K034*<OH>-K038*<HO2>-K045*<NO>-K046*<NO2>-K047*<NO2>-K049*< !NO3>-K049*<NO3>-K049*<NO3>-K049*<NO3>-K072*<HCHO>-K073*<ALD>-K074*<CARBO>-K075 !*<ARO>-K076*<ALKE>-K077*<BIO>+0.60*K078*<PAN>-K078*<PAN>-K119*<MO2>-K120*<ALKA -!P>-K121*<ALKEP>-K122*<BIOP>-K123*<AROP>-K124*<CARBOP>-K125*<OLN>-K131*<XO2>-KT -!C5-KTR5 - PJAC(:,5,5)=-TPK%K007(:)-TPK%K008(:)-TPK%K034(:)*PCONC(:,14)-TPK%K038(:)*PCONC& -&(:,15)-TPK%K045(:)*PCONC(:,3)-TPK%K046(:)*PCONC(:,4)-TPK%K047(:)*PCONC(:,4)-TP& +!P>-K121*<ALKEP>-K122*<BIOP>-K123*<AROP>-K124*<CARBOP>-K125*<OLN>-K131*<XO2>-K1 +!33*<DMS>-KTC5-KTR5 + PJAC(:,5,5)=-TPK%K007(:)-TPK%K008(:)-TPK%K034(:)*PCONC(:,15)-TPK%K038(:)*PCONC& +&(:,16)-TPK%K045(:)*PCONC(:,3)-TPK%K046(:)*PCONC(:,4)-TPK%K047(:)*PCONC(:,4)-TP& &K%K049(:)*PCONC(:,5)-TPK%K049(:)*PCONC(:,5)-TPK%K049(:)*PCONC(:,5)-TPK%K049(:)& -&*PCONC(:,5)-TPK%K072(:)*PCONC(:,22)-TPK%K073(:)*PCONC(:,23)-TPK%K074(:)*PCONC(& -&:,25)-TPK%K075(:)*PCONC(:,21)-TPK%K076(:)*PCONC(:,19)-TPK%K077(:)*PCONC(:,20)+& -&0.60*TPK%K078(:)*PCONC(:,27)-TPK%K078(:)*PCONC(:,27)-TPK%K119(:)*PCONC(:,32)-T& -&PK%K120(:)*PCONC(:,33)-TPK%K121(:)*PCONC(:,34)-TPK%K122(:)*PCONC(:,35)-TPK%K12& -&3(:)*PCONC(:,38)-TPK%K124(:)*PCONC(:,39)-TPK%K125(:)*PCONC(:,40)-TPK%K131(:)*P& -&CONC(:,41)-TPK%KTC5(:)-TPK%KTR5(:) +&*PCONC(:,5)-TPK%K072(:)*PCONC(:,23)-TPK%K073(:)*PCONC(:,24)-TPK%K074(:)*PCONC(& +&:,26)-TPK%K075(:)*PCONC(:,22)-TPK%K076(:)*PCONC(:,20)-TPK%K077(:)*PCONC(:,21)+& +&0.60*TPK%K078(:)*PCONC(:,28)-TPK%K078(:)*PCONC(:,28)-TPK%K119(:)*PCONC(:,33)-T& +&PK%K120(:)*PCONC(:,34)-TPK%K121(:)*PCONC(:,35)-TPK%K122(:)*PCONC(:,36)-TPK%K12& +&3(:)*PCONC(:,39)-TPK%K124(:)*PCONC(:,40)-TPK%K125(:)*PCONC(:,41)-TPK%K131(:)*P& +&CONC(:,42)-TPK%K133(:)*PCONC(:,11)-TPK%KTC5(:)-TPK%KTR5(:) ! !NO3/N2O5=+K048 PJAC(:,5,6)=+TPK%K048(:) @@ -6918,13 +6978,16 @@ SUBROUTINE SUBJ0 !NO3/HONO=0.0 ! !NO3/HNO3=+K040*<OH> - PJAC(:,5,8)=+TPK%K040(:)*PCONC(:,14) + PJAC(:,5,8)=+TPK%K040(:)*PCONC(:,15) ! !NO3/HNO4=+0.35*K006 PJAC(:,5,9)=+0.35*TPK%K006(:) ! !NO3/NH3=0.0 ! +!NO3/DMS=-K133*<NO3> + PJAC(:,5,11)=-TPK%K133(:)*PCONC(:,5) +! !NO3/SO2=0.0 ! !NO3/SULF=0.0 @@ -6932,11 +6995,11 @@ SUBROUTINE SUBJ0 !NO3/CO=0.0 ! !NO3/OH=-K034*<NO3>+K040*<HNO3>+0.71893*K070*<PAN> - PJAC(:,5,14)=-TPK%K034(:)*PCONC(:,5)+TPK%K040(:)*PCONC(:,8)+0.71893*TPK%K070(:& -&)*PCONC(:,27) + PJAC(:,5,15)=-TPK%K034(:)*PCONC(:,5)+TPK%K040(:)*PCONC(:,8)+0.71893*TPK%K070(:& +&)*PCONC(:,28) ! !NO3/HO2=-K038*<NO3> - PJAC(:,5,15)=-TPK%K038(:)*PCONC(:,5) + PJAC(:,5,16)=-TPK%K038(:)*PCONC(:,5) ! !NO3/CH4=0.0 ! @@ -6945,29 +7008,29 @@ SUBROUTINE SUBJ0 !NO3/ALKA=0.0 ! !NO3/ALKE=-K076*<NO3> - PJAC(:,5,19)=-TPK%K076(:)*PCONC(:,5) + PJAC(:,5,20)=-TPK%K076(:)*PCONC(:,5) ! !NO3/BIO=-K077*<NO3> - PJAC(:,5,20)=-TPK%K077(:)*PCONC(:,5) + PJAC(:,5,21)=-TPK%K077(:)*PCONC(:,5) ! !NO3/ARO=-K075*<NO3> - PJAC(:,5,21)=-TPK%K075(:)*PCONC(:,5) + PJAC(:,5,22)=-TPK%K075(:)*PCONC(:,5) ! !NO3/HCHO=-K072*<NO3> - PJAC(:,5,22)=-TPK%K072(:)*PCONC(:,5) + PJAC(:,5,23)=-TPK%K072(:)*PCONC(:,5) ! !NO3/ALD=-K073*<NO3> - PJAC(:,5,23)=-TPK%K073(:)*PCONC(:,5) + PJAC(:,5,24)=-TPK%K073(:)*PCONC(:,5) ! !NO3/KET=0.0 ! !NO3/CARBO=-K074*<NO3> - PJAC(:,5,25)=-TPK%K074(:)*PCONC(:,5) + PJAC(:,5,26)=-TPK%K074(:)*PCONC(:,5) ! !NO3/ONIT=0.0 ! !NO3/PAN=+0.71893*K070*<OH>+0.60*K078*<NO3>-K078*<NO3> - PJAC(:,5,27)=+0.71893*TPK%K070(:)*PCONC(:,14)+0.60*TPK%K078(:)*PCONC(:,5)-TPK%& + PJAC(:,5,28)=+0.71893*TPK%K070(:)*PCONC(:,15)+0.60*TPK%K078(:)*PCONC(:,5)-TPK%& &K078(:)*PCONC(:,5) ! !NO3/OP1=0.0 @@ -6979,32 +7042,32 @@ SUBROUTINE SUBJ0 !NO3/ORA2=0.0 ! !NO3/MO2=-K119*<NO3> - PJAC(:,5,32)=-TPK%K119(:)*PCONC(:,5) + PJAC(:,5,33)=-TPK%K119(:)*PCONC(:,5) ! !NO3/ALKAP=-K120*<NO3> - PJAC(:,5,33)=-TPK%K120(:)*PCONC(:,5) + PJAC(:,5,34)=-TPK%K120(:)*PCONC(:,5) ! !NO3/ALKEP=-K121*<NO3> - PJAC(:,5,34)=-TPK%K121(:)*PCONC(:,5) + PJAC(:,5,35)=-TPK%K121(:)*PCONC(:,5) ! !NO3/BIOP=-K122*<NO3> - PJAC(:,5,35)=-TPK%K122(:)*PCONC(:,5) + PJAC(:,5,36)=-TPK%K122(:)*PCONC(:,5) ! !NO3/PHO=0.0 ! !NO3/ADD=0.0 ! !NO3/AROP=-K123*<NO3> - PJAC(:,5,38)=-TPK%K123(:)*PCONC(:,5) + PJAC(:,5,39)=-TPK%K123(:)*PCONC(:,5) ! !NO3/CARBOP=-K124*<NO3> - PJAC(:,5,39)=-TPK%K124(:)*PCONC(:,5) + PJAC(:,5,40)=-TPK%K124(:)*PCONC(:,5) ! !NO3/OLN=-K125*<NO3> - PJAC(:,5,40)=-TPK%K125(:)*PCONC(:,5) + PJAC(:,5,41)=-TPK%K125(:)*PCONC(:,5) ! !NO3/XO2=-K131*<NO3> - PJAC(:,5,41)=-TPK%K131(:)*PCONC(:,5) + PJAC(:,5,42)=-TPK%K131(:)*PCONC(:,5) ! !NO3/WC_O3=0.0 ! @@ -7015,7 +7078,7 @@ SUBROUTINE SUBJ0 !NO3/WC_NO2=0.0 ! !NO3/WC_NO3=+KTC25 - PJAC(:,5,46)=+TPK%KTC25(:) + PJAC(:,5,47)=+TPK%KTC25(:) ! !NO3/WC_N2O5=0.0 ! @@ -7066,7 +7129,7 @@ SUBROUTINE SUBJ0 !NO3/WR_NO2=0.0 ! !NO3/WR_NO3=+KTR25 - PJAC(:,5,71)=+TPK%KTR25(:) + PJAC(:,5,72)=+TPK%KTR25(:) ! !NO3/WR_N2O5=0.0 ! @@ -7139,6 +7202,8 @@ SUBROUTINE SUBJ1 ! !N2O5/NH3=0.0 ! +!N2O5/DMS=0.0 +! !N2O5/SO2=0.0 ! !N2O5/SULF=0.0 @@ -7212,7 +7277,7 @@ SUBROUTINE SUBJ1 !N2O5/WC_NO3=0.0 ! !N2O5/WC_N2O5=+KTC26 - PJAC(:,6,47)=+TPK%KTC26(:) + PJAC(:,6,48)=+TPK%KTC26(:) ! !N2O5/WC_HONO=0.0 ! @@ -7263,7 +7328,7 @@ SUBROUTINE SUBJ1 !N2O5/WR_NO3=0.0 ! !N2O5/WR_N2O5=+KTR26 - PJAC(:,6,72)=+TPK%KTR26(:) + PJAC(:,6,73)=+TPK%KTR26(:) ! !N2O5/WR_HONO=0.0 ! @@ -7308,17 +7373,17 @@ SUBROUTINE SUBJ1 !HONO/H2O2=0.0 ! !HONO/NO=+K032*<OH> - PJAC(:,7,3)=+TPK%K032(:)*PCONC(:,14) + PJAC(:,7,3)=+TPK%K032(:)*PCONC(:,15) ! !HONO/NO2=+K085*<ADD> - PJAC(:,7,4)=+TPK%K085(:)*PCONC(:,37) + PJAC(:,7,4)=+TPK%K085(:)*PCONC(:,38) ! !HONO/NO3=0.0 ! !HONO/N2O5=0.0 ! !HONO/HONO=-K004-K039*<OH>-KTC7-KTR7 - PJAC(:,7,7)=-TPK%K004(:)-TPK%K039(:)*PCONC(:,14)-TPK%KTC7(:)-TPK%KTR7(:) + PJAC(:,7,7)=-TPK%K004(:)-TPK%K039(:)*PCONC(:,15)-TPK%KTC7(:)-TPK%KTR7(:) ! !HONO/HNO3=0.0 ! @@ -7326,6 +7391,8 @@ SUBROUTINE SUBJ1 ! !HONO/NH3=0.0 ! +!HONO/DMS=0.0 +! !HONO/SO2=0.0 ! !HONO/SULF=0.0 @@ -7333,7 +7400,7 @@ SUBROUTINE SUBJ1 !HONO/CO=0.0 ! !HONO/OH=+K032*<NO>-K039*<HONO> - PJAC(:,7,14)=+TPK%K032(:)*PCONC(:,3)-TPK%K039(:)*PCONC(:,7) + PJAC(:,7,15)=+TPK%K032(:)*PCONC(:,3)-TPK%K039(:)*PCONC(:,7) ! !HONO/HO2=0.0 ! @@ -7380,7 +7447,7 @@ SUBROUTINE SUBJ1 !HONO/PHO=0.0 ! !HONO/ADD=+K085*<NO2> - PJAC(:,7,37)=+TPK%K085(:)*PCONC(:,4) + PJAC(:,7,38)=+TPK%K085(:)*PCONC(:,4) ! !HONO/AROP=0.0 ! @@ -7403,7 +7470,7 @@ SUBROUTINE SUBJ1 !HONO/WC_N2O5=0.0 ! !HONO/WC_HONO=+KTC27 - PJAC(:,7,48)=+TPK%KTC27(:) + PJAC(:,7,49)=+TPK%KTC27(:) ! !HONO/WC_HNO3=0.0 ! @@ -7454,7 +7521,7 @@ SUBROUTINE SUBJ1 !HONO/WR_N2O5=0.0 ! !HONO/WR_HONO=+KTR27 - PJAC(:,7,73)=+TPK%KTR27(:) + PJAC(:,7,74)=+TPK%KTR27(:) ! !HONO/WR_HNO3=0.0 ! @@ -7499,24 +7566,26 @@ SUBROUTINE SUBJ1 !HNO3/NO=0.0 ! !HNO3/NO2=+K033*<OH> - PJAC(:,8,4)=+TPK%K033(:)*PCONC(:,14) + PJAC(:,8,4)=+TPK%K033(:)*PCONC(:,15) ! !HNO3/NO3=+0.3*K038*<HO2>+K072*<HCHO>+K073*<ALD>+0.91567*K074*<CARBO>+K075*<ARO !> - PJAC(:,8,5)=+0.3*TPK%K038(:)*PCONC(:,15)+TPK%K072(:)*PCONC(:,22)+TPK%K073(:)*P& -&CONC(:,23)+0.91567*TPK%K074(:)*PCONC(:,25)+TPK%K075(:)*PCONC(:,21) + PJAC(:,8,5)=+0.3*TPK%K038(:)*PCONC(:,16)+TPK%K072(:)*PCONC(:,23)+TPK%K073(:)*P& +&CONC(:,24)+0.91567*TPK%K074(:)*PCONC(:,26)+TPK%K075(:)*PCONC(:,22) ! !HNO3/N2O5=0.0 ! !HNO3/HONO=0.0 ! !HNO3/HNO3=-K005-K040*<OH>-KTC8-KTR8 - PJAC(:,8,8)=-TPK%K005(:)-TPK%K040(:)*PCONC(:,14)-TPK%KTC8(:)-TPK%KTR8(:) + PJAC(:,8,8)=-TPK%K005(:)-TPK%K040(:)*PCONC(:,15)-TPK%KTC8(:)-TPK%KTR8(:) ! !HNO3/HNO4=0.0 ! !HNO3/NH3=0.0 ! +!HNO3/DMS=0.0 +! !HNO3/SO2=0.0 ! !HNO3/SULF=0.0 @@ -7524,10 +7593,10 @@ SUBROUTINE SUBJ1 !HNO3/CO=0.0 ! !HNO3/OH=+K033*<NO2>-K040*<HNO3> - PJAC(:,8,14)=+TPK%K033(:)*PCONC(:,4)-TPK%K040(:)*PCONC(:,8) + PJAC(:,8,15)=+TPK%K033(:)*PCONC(:,4)-TPK%K040(:)*PCONC(:,8) ! !HNO3/HO2=+0.3*K038*<NO3> - PJAC(:,8,15)=+0.3*TPK%K038(:)*PCONC(:,5) + PJAC(:,8,16)=+0.3*TPK%K038(:)*PCONC(:,5) ! !HNO3/CH4=0.0 ! @@ -7540,18 +7609,18 @@ SUBROUTINE SUBJ1 !HNO3/BIO=0.0 ! !HNO3/ARO=+K075*<NO3> - PJAC(:,8,21)=+TPK%K075(:)*PCONC(:,5) + PJAC(:,8,22)=+TPK%K075(:)*PCONC(:,5) ! !HNO3/HCHO=+K072*<NO3> - PJAC(:,8,22)=+TPK%K072(:)*PCONC(:,5) + PJAC(:,8,23)=+TPK%K072(:)*PCONC(:,5) ! !HNO3/ALD=+K073*<NO3> - PJAC(:,8,23)=+TPK%K073(:)*PCONC(:,5) + PJAC(:,8,24)=+TPK%K073(:)*PCONC(:,5) ! !HNO3/KET=0.0 ! !HNO3/CARBO=+0.91567*K074*<NO3> - PJAC(:,8,25)=+0.91567*TPK%K074(:)*PCONC(:,5) + PJAC(:,8,26)=+0.91567*TPK%K074(:)*PCONC(:,5) ! !HNO3/ONIT=0.0 ! @@ -7600,7 +7669,7 @@ SUBROUTINE SUBJ1 !HNO3/WC_HONO=0.0 ! !HNO3/WC_HNO3=+KTC28 - PJAC(:,8,49)=+TPK%KTC28(:) + PJAC(:,8,50)=+TPK%KTC28(:) ! !HNO3/WC_HNO4=0.0 ! @@ -7651,7 +7720,7 @@ SUBROUTINE SUBJ1 !HNO3/WR_HONO=0.0 ! !HNO3/WR_HNO3=+KTR28 - PJAC(:,8,74)=+TPK%KTR28(:) + PJAC(:,8,75)=+TPK%KTR28(:) ! !HNO3/WR_HNO4=0.0 ! @@ -7694,7 +7763,7 @@ SUBROUTINE SUBJ1 !HNO4/NO=0.0 ! !HNO4/NO2=+K036*<HO2> - PJAC(:,9,4)=+TPK%K036(:)*PCONC(:,15) + PJAC(:,9,4)=+TPK%K036(:)*PCONC(:,16) ! !HNO4/NO3=0.0 ! @@ -7705,11 +7774,13 @@ SUBROUTINE SUBJ1 !HNO4/HNO3=0.0 ! !HNO4/HNO4=-K006-K037-K041*<OH>-KTC9-KTR9 - PJAC(:,9,9)=-TPK%K006(:)-TPK%K037(:)-TPK%K041(:)*PCONC(:,14)-TPK%KTC9(:)-TPK%K& + PJAC(:,9,9)=-TPK%K006(:)-TPK%K037(:)-TPK%K041(:)*PCONC(:,15)-TPK%KTC9(:)-TPK%K& &TR9(:) ! !HNO4/NH3=0.0 ! +!HNO4/DMS=0.0 +! !HNO4/SO2=0.0 ! !HNO4/SULF=0.0 @@ -7717,10 +7788,10 @@ SUBROUTINE SUBJ1 !HNO4/CO=0.0 ! !HNO4/OH=-K041*<HNO4> - PJAC(:,9,14)=-TPK%K041(:)*PCONC(:,9) + PJAC(:,9,15)=-TPK%K041(:)*PCONC(:,9) ! !HNO4/HO2=+K036*<NO2> - PJAC(:,9,15)=+TPK%K036(:)*PCONC(:,4) + PJAC(:,9,16)=+TPK%K036(:)*PCONC(:,4) ! !HNO4/CH4=0.0 ! @@ -7791,7 +7862,7 @@ SUBROUTINE SUBJ1 !HNO4/WC_HNO3=0.0 ! !HNO4/WC_HNO4=+KTC29 - PJAC(:,9,50)=+TPK%KTC29(:) + PJAC(:,9,51)=+TPK%KTC29(:) ! !HNO4/WC_NH3=0.0 ! @@ -7842,7 +7913,7 @@ SUBROUTINE SUBJ1 !HNO4/WR_HNO3=0.0 ! !HNO4/WR_HNO4=+KTR29 - PJAC(:,9,75)=+TPK%KTR29(:) + PJAC(:,9,76)=+TPK%KTR29(:) ! !HNO4/WR_NH3=0.0 ! @@ -7895,7 +7966,9 @@ SUBROUTINE SUBJ1 !NH3/HNO4=0.0 ! !NH3/NH3=-K050*<OH>-KTC10-KTR10 - PJAC(:,10,10)=-TPK%K050(:)*PCONC(:,14)-TPK%KTC10(:)-TPK%KTR10(:) + PJAC(:,10,10)=-TPK%K050(:)*PCONC(:,15)-TPK%KTC10(:)-TPK%KTR10(:) +! +!NH3/DMS=0.0 ! !NH3/SO2=0.0 ! @@ -7904,7 +7977,7 @@ SUBROUTINE SUBJ1 !NH3/CO=0.0 ! !NH3/OH=-K050*<NH3> - PJAC(:,10,14)=-TPK%K050(:)*PCONC(:,10) + PJAC(:,10,15)=-TPK%K050(:)*PCONC(:,10) ! !NH3/HO2=0.0 ! @@ -7979,7 +8052,7 @@ SUBROUTINE SUBJ1 !NH3/WC_HNO4=0.0 ! !NH3/WC_NH3=+KTC30 - PJAC(:,10,51)=+TPK%KTC30(:) + PJAC(:,10,52)=+TPK%KTC30(:) ! !NH3/WC_OH=0.0 ! @@ -8030,7 +8103,7 @@ SUBROUTINE SUBJ1 !NH3/WR_HNO4=0.0 ! !NH3/WR_NH3=+KTR30 - PJAC(:,10,76)=+TPK%KTR30(:) + PJAC(:,10,77)=+TPK%KTR30(:) ! !NH3/WR_OH=0.0 ! @@ -8070,6 +8143,194 @@ SUBROUTINE SUBJ2 !Indices 11 a 15 ! ! +!DMS/O3=0.0 +! +!DMS/H2O2=0.0 +! +!DMS/NO=0.0 +! +!DMS/NO2=0.0 +! +!DMS/NO3=-K133*<DMS> + PJAC(:,11,5)=-TPK%K133(:)*PCONC(:,11) +! +!DMS/N2O5=0.0 +! +!DMS/HONO=0.0 +! +!DMS/HNO3=0.0 +! +!DMS/HNO4=0.0 +! +!DMS/NH3=0.0 +! +!DMS/DMS=-K133*<NO3>-K134*<O3P>-K135*<OH> + PJAC(:,11,11)=-TPK%K133(:)*PCONC(:,5)-TPK%K134(:)*TPK%O3P(:)-TPK%K135(:)*PCONC& +&(:,15) +! +!DMS/SO2=0.0 +! +!DMS/SULF=0.0 +! +!DMS/CO=0.0 +! +!DMS/OH=-K135*<DMS> + PJAC(:,11,15)=-TPK%K135(:)*PCONC(:,11) +! +!DMS/HO2=0.0 +! +!DMS/CH4=0.0 +! +!DMS/ETH=0.0 +! +!DMS/ALKA=0.0 +! +!DMS/ALKE=0.0 +! +!DMS/BIO=0.0 +! +!DMS/ARO=0.0 +! +!DMS/HCHO=0.0 +! +!DMS/ALD=0.0 +! +!DMS/KET=0.0 +! +!DMS/CARBO=0.0 +! +!DMS/ONIT=0.0 +! +!DMS/PAN=0.0 +! +!DMS/OP1=0.0 +! +!DMS/OP2=0.0 +! +!DMS/ORA1=0.0 +! +!DMS/ORA2=0.0 +! +!DMS/MO2=0.0 +! +!DMS/ALKAP=0.0 +! +!DMS/ALKEP=0.0 +! +!DMS/BIOP=0.0 +! +!DMS/PHO=0.0 +! +!DMS/ADD=0.0 +! +!DMS/AROP=0.0 +! +!DMS/CARBOP=0.0 +! +!DMS/OLN=0.0 +! +!DMS/XO2=0.0 +! +!DMS/WC_O3=0.0 +! +!DMS/WC_H2O2=0.0 +! +!DMS/WC_NO=0.0 +! +!DMS/WC_NO2=0.0 +! +!DMS/WC_NO3=0.0 +! +!DMS/WC_N2O5=0.0 +! +!DMS/WC_HONO=0.0 +! +!DMS/WC_HNO3=0.0 +! +!DMS/WC_HNO4=0.0 +! +!DMS/WC_NH3=0.0 +! +!DMS/WC_OH=0.0 +! +!DMS/WC_HO2=0.0 +! +!DMS/WC_CO2=0.0 +! +!DMS/WC_SO2=0.0 +! +!DMS/WC_SULF=0.0 +! +!DMS/WC_HCHO=0.0 +! +!DMS/WC_ORA1=0.0 +! +!DMS/WC_ORA2=0.0 +! +!DMS/WC_MO2=0.0 +! +!DMS/WC_OP1=0.0 +! +!DMS/WC_ASO3=0.0 +! +!DMS/WC_ASO4=0.0 +! +!DMS/WC_ASO5=0.0 +! +!DMS/WC_AHSO5=0.0 +! +!DMS/WC_AHMS=0.0 +! +!DMS/WR_O3=0.0 +! +!DMS/WR_H2O2=0.0 +! +!DMS/WR_NO=0.0 +! +!DMS/WR_NO2=0.0 +! +!DMS/WR_NO3=0.0 +! +!DMS/WR_N2O5=0.0 +! +!DMS/WR_HONO=0.0 +! +!DMS/WR_HNO3=0.0 +! +!DMS/WR_HNO4=0.0 +! +!DMS/WR_NH3=0.0 +! +!DMS/WR_OH=0.0 +! +!DMS/WR_HO2=0.0 +! +!DMS/WR_CO2=0.0 +! +!DMS/WR_SO2=0.0 +! +!DMS/WR_SULF=0.0 +! +!DMS/WR_HCHO=0.0 +! +!DMS/WR_ORA1=0.0 +! +!DMS/WR_ORA2=0.0 +! +!DMS/WR_MO2=0.0 +! +!DMS/WR_OP1=0.0 +! +!DMS/WR_ASO3=0.0 +! +!DMS/WR_ASO4=0.0 +! +!DMS/WR_ASO5=0.0 +! +!DMS/WR_AHSO5=0.0 +! +!DMS/WR_AHMS=0.0 +! !SO2/O3=0.0 ! !SO2/H2O2=0.0 @@ -8078,7 +8339,8 @@ SUBROUTINE SUBJ2 ! !SO2/NO2=0.0 ! -!SO2/NO3=0.0 +!SO2/NO3=+K133*<DMS> + PJAC(:,12,5)=+TPK%K133(:)*PCONC(:,11) ! !SO2/N2O5=0.0 ! @@ -8090,15 +8352,19 @@ SUBROUTINE SUBJ2 ! !SO2/NH3=0.0 ! +!SO2/DMS=+K133*<NO3>+K134*<O3P>+0.8*K135*<OH> + PJAC(:,12,11)=+TPK%K133(:)*PCONC(:,5)+TPK%K134(:)*TPK%O3P(:)+0.8*TPK%K135(:)*P& +&CONC(:,15) +! !SO2/SO2=-K052*<OH>-KTC14-KTR14 - PJAC(:,11,11)=-TPK%K052(:)*PCONC(:,14)-TPK%KTC14(:)-TPK%KTR14(:) + PJAC(:,12,12)=-TPK%K052(:)*PCONC(:,15)-TPK%KTC14(:)-TPK%KTR14(:) ! !SO2/SULF=0.0 ! !SO2/CO=0.0 ! -!SO2/OH=-K052*<SO2> - PJAC(:,11,14)=-TPK%K052(:)*PCONC(:,11) +!SO2/OH=-K052*<SO2>+0.8*K135*<DMS> + PJAC(:,12,15)=-TPK%K052(:)*PCONC(:,12)+0.8*TPK%K135(:)*PCONC(:,11) ! !SO2/HO2=0.0 ! @@ -8181,7 +8447,7 @@ SUBROUTINE SUBJ2 !SO2/WC_CO2=0.0 ! !SO2/WC_SO2=+KTC34 - PJAC(:,11,55)=+TPK%KTC34(:) + PJAC(:,12,56)=+TPK%KTC34(:) ! !SO2/WC_SULF=0.0 ! @@ -8232,7 +8498,7 @@ SUBROUTINE SUBJ2 !SO2/WR_CO2=0.0 ! !SO2/WR_SO2=+KTR34 - PJAC(:,11,80)=+TPK%KTR34(:) + PJAC(:,12,81)=+TPK%KTR34(:) ! !SO2/WR_SULF=0.0 ! @@ -8276,16 +8542,18 @@ SUBROUTINE SUBJ2 ! !SULF/NH3=0.0 ! +!SULF/DMS=0.0 +! !SULF/SO2=+K052*<OH> - PJAC(:,12,11)=+TPK%K052(:)*PCONC(:,14) + PJAC(:,13,12)=+TPK%K052(:)*PCONC(:,15) ! !SULF/SULF=-K132-KTC15-KTR15 - PJAC(:,12,12)=-TPK%K132(:)-TPK%KTC15(:)-TPK%KTR15(:) + PJAC(:,13,13)=-TPK%K132(:)-TPK%KTC15(:)-TPK%KTR15(:) ! !SULF/CO=0.0 ! !SULF/OH=+K052*<SO2> - PJAC(:,12,14)=+TPK%K052(:)*PCONC(:,11) + PJAC(:,13,15)=+TPK%K052(:)*PCONC(:,12) ! !SULF/HO2=0.0 ! @@ -8370,7 +8638,7 @@ SUBROUTINE SUBJ2 !SULF/WC_SO2=0.0 ! !SULF/WC_SULF=+KTC35 - PJAC(:,12,56)=+TPK%KTC35(:) + PJAC(:,13,57)=+TPK%KTC35(:) ! !SULF/WC_HCHO=0.0 ! @@ -8421,7 +8689,7 @@ SUBROUTINE SUBJ2 !SULF/WR_SO2=0.0 ! !SULF/WR_SULF=+KTR35 - PJAC(:,12,81)=+TPK%KTR35(:) + PJAC(:,13,82)=+TPK%KTR35(:) ! !SULF/WR_HCHO=0.0 ! @@ -8445,8 +8713,8 @@ SUBROUTINE SUBJ2 ! !CO/O3=+0.35120*K079*<ALKE>+0.36000*K080*<BIO>+0.64728*K081*<CARBO>+0.13*K082*< !PAN> - PJAC(:,13,1)=+0.35120*TPK%K079(:)*PCONC(:,19)+0.36000*TPK%K080(:)*PCONC(:,20)+& -&0.64728*TPK%K081(:)*PCONC(:,25)+0.13*TPK%K082(:)*PCONC(:,27) + PJAC(:,14,1)=+0.35120*TPK%K079(:)*PCONC(:,20)+0.36000*TPK%K080(:)*PCONC(:,21)+& +&0.64728*TPK%K081(:)*PCONC(:,26)+0.13*TPK%K082(:)*PCONC(:,28) ! !CO/H2O2=0.0 ! @@ -8455,7 +8723,7 @@ SUBROUTINE SUBJ2 !CO/NO2=0.0 ! !CO/NO3=+K072*<HCHO>+1.33723*K074*<CARBO> - PJAC(:,13,5)=+TPK%K072(:)*PCONC(:,22)+1.33723*TPK%K074(:)*PCONC(:,25) + PJAC(:,14,5)=+TPK%K072(:)*PCONC(:,23)+1.33723*TPK%K074(:)*PCONC(:,26) ! !CO/N2O5=0.0 ! @@ -8467,16 +8735,18 @@ SUBROUTINE SUBJ2 ! !CO/NH3=0.0 ! +!CO/DMS=0.0 +! !CO/SO2=0.0 ! !CO/SULF=0.0 ! !CO/CO=-K053*<OH> - PJAC(:,13,13)=-TPK%K053(:)*PCONC(:,14) + PJAC(:,14,14)=-TPK%K053(:)*PCONC(:,15) ! !CO/OH=-K053*<CO>+0.00878*K058*<ALKA>+K062*<HCHO>+1.01732*K065*<CARBO> - PJAC(:,13,14)=-TPK%K053(:)*PCONC(:,13)+0.00878*TPK%K058(:)*PCONC(:,18)+TPK%K06& -&2(:)*PCONC(:,22)+1.01732*TPK%K065(:)*PCONC(:,25) + PJAC(:,14,15)=-TPK%K053(:)*PCONC(:,14)+0.00878*TPK%K058(:)*PCONC(:,19)+TPK%K06& +&2(:)*PCONC(:,23)+1.01732*TPK%K065(:)*PCONC(:,26) ! !CO/HO2=0.0 ! @@ -8485,33 +8755,33 @@ SUBROUTINE SUBJ2 !CO/ETH=0.0 ! !CO/ALKA=+0.00878*K058*<OH> - PJAC(:,13,18)=+0.00878*TPK%K058(:)*PCONC(:,14) + PJAC(:,14,19)=+0.00878*TPK%K058(:)*PCONC(:,15) ! !CO/ALKE=+0.35120*K079*<O3> - PJAC(:,13,19)=+0.35120*TPK%K079(:)*PCONC(:,1) + PJAC(:,14,20)=+0.35120*TPK%K079(:)*PCONC(:,1) ! !CO/BIO=+0.01*K054*<O3P>+0.36000*K080*<O3> - PJAC(:,13,20)=+0.01*TPK%K054(:)*TPK%O3P(:)+0.36000*TPK%K080(:)*PCONC(:,1) + PJAC(:,14,21)=+0.01*TPK%K054(:)*TPK%O3P(:)+0.36000*TPK%K080(:)*PCONC(:,1) ! !CO/ARO=0.0 ! !CO/HCHO=+K010+K011+K062*<OH>+K072*<NO3> - PJAC(:,13,22)=+TPK%K010(:)+TPK%K011(:)+TPK%K062(:)*PCONC(:,14)+TPK%K072(:)*PCO& + PJAC(:,14,23)=+TPK%K010(:)+TPK%K011(:)+TPK%K062(:)*PCONC(:,15)+TPK%K072(:)*PCO& &NC(:,5) ! !CO/ALD=+K012 - PJAC(:,13,23)=+TPK%K012(:) + PJAC(:,14,24)=+TPK%K012(:) ! !CO/KET=0.0 ! !CO/CARBO=+0.91924*K016+1.01732*K065*<OH>+1.33723*K074*<NO3>+0.64728*K081*<O3> - PJAC(:,13,25)=+0.91924*TPK%K016(:)+1.01732*TPK%K065(:)*PCONC(:,14)+1.33723*TPK& + PJAC(:,14,26)=+0.91924*TPK%K016(:)+1.01732*TPK%K065(:)*PCONC(:,15)+1.33723*TPK& &%K074(:)*PCONC(:,5)+0.64728*TPK%K081(:)*PCONC(:,1) ! !CO/ONIT=0.0 ! !CO/PAN=+0.13*K082*<O3> - PJAC(:,13,27)=+0.13*TPK%K082(:)*PCONC(:,1) + PJAC(:,14,28)=+0.13*TPK%K082(:)*PCONC(:,1) ! !CO/OP1=0.0 ! @@ -8643,116 +8913,119 @@ SUBROUTINE SUBJ2 ! !OH/O3=-K023*<OH>+K024*<HO2>+0.39435*K079*<ALKE>+0.28000*K080*<BIO>+0.20595*K08 !1*<CARBO>+0.036*K082*<PAN>+K087*<ADD> - PJAC(:,14,1)=-TPK%K023(:)*PCONC(:,14)+TPK%K024(:)*PCONC(:,15)+0.39435*TPK%K079& -&(:)*PCONC(:,19)+0.28000*TPK%K080(:)*PCONC(:,20)+0.20595*TPK%K081(:)*PCONC(:,25& -&)+0.036*TPK%K082(:)*PCONC(:,27)+TPK%K087(:)*PCONC(:,37) + PJAC(:,15,1)=-TPK%K023(:)*PCONC(:,15)+TPK%K024(:)*PCONC(:,16)+0.39435*TPK%K079& +&(:)*PCONC(:,20)+0.28000*TPK%K080(:)*PCONC(:,21)+0.20595*TPK%K081(:)*PCONC(:,26& +&)+0.036*TPK%K082(:)*PCONC(:,28)+TPK%K087(:)*PCONC(:,38) ! !OH/H2O2=+K009+K009-K026*<OH> - PJAC(:,14,2)=+TPK%K009(:)+TPK%K009(:)-TPK%K026(:)*PCONC(:,14) + PJAC(:,15,2)=+TPK%K009(:)+TPK%K009(:)-TPK%K026(:)*PCONC(:,15) ! !OH/NO=-K032*<OH>+K035*<HO2> - PJAC(:,14,3)=-TPK%K032(:)*PCONC(:,14)+TPK%K035(:)*PCONC(:,15) + PJAC(:,15,3)=-TPK%K032(:)*PCONC(:,15)+TPK%K035(:)*PCONC(:,16) ! !OH/NO2=-K033*<OH> - PJAC(:,14,4)=-TPK%K033(:)*PCONC(:,14) + PJAC(:,15,4)=-TPK%K033(:)*PCONC(:,15) ! !OH/NO3=-K034*<OH>+0.7*K038*<HO2> - PJAC(:,14,5)=-TPK%K034(:)*PCONC(:,14)+0.7*TPK%K038(:)*PCONC(:,15) + PJAC(:,15,5)=-TPK%K034(:)*PCONC(:,15)+0.7*TPK%K038(:)*PCONC(:,16) ! !OH/N2O5=0.0 ! !OH/HONO=+K004-K039*<OH> - PJAC(:,14,7)=+TPK%K004(:)-TPK%K039(:)*PCONC(:,14) + PJAC(:,15,7)=+TPK%K004(:)-TPK%K039(:)*PCONC(:,15) ! !OH/HNO3=+K005-K040*<OH> - PJAC(:,14,8)=+TPK%K005(:)-TPK%K040(:)*PCONC(:,14) + PJAC(:,15,8)=+TPK%K005(:)-TPK%K040(:)*PCONC(:,15) ! !OH/HNO4=+0.35*K006-K041*<OH> - PJAC(:,14,9)=+0.35*TPK%K006(:)-TPK%K041(:)*PCONC(:,14) + PJAC(:,15,9)=+0.35*TPK%K006(:)-TPK%K041(:)*PCONC(:,15) ! !OH/NH3=-K050*<OH> - PJAC(:,14,10)=-TPK%K050(:)*PCONC(:,14) + PJAC(:,15,10)=-TPK%K050(:)*PCONC(:,15) +! +!OH/DMS=-K135*<OH> + PJAC(:,15,11)=-TPK%K135(:)*PCONC(:,15) ! !OH/SO2=-K052*<OH> - PJAC(:,14,11)=-TPK%K052(:)*PCONC(:,14) + PJAC(:,15,12)=-TPK%K052(:)*PCONC(:,15) ! !OH/SULF=0.0 ! !OH/CO=-K053*<OH> - PJAC(:,14,13)=-TPK%K053(:)*PCONC(:,14) + PJAC(:,15,14)=-TPK%K053(:)*PCONC(:,15) ! !OH/OH=-K023*<O3>-K025*<HO2>-K026*<H2O2>-K032*<NO>-K033*<NO2>-K034*<NO3>-K039*< !HONO>-K040*<HNO3>-K041*<HNO4>-K050*<NH3>-K051*<H2>-K052*<SO2>-K053*<CO>-K056*< !CH4>-K057*<ETH>+0.00878*K058*<ALKA>-K058*<ALKA>-K059*<ALKE>-K060*<BIO>-K061*<A !RO>-K062*<HCHO>-K063*<ALD>-K064*<KET>-K065*<CARBO>-K066*<ORA1>-K067*<ORA2>+0.3 !5*K068*<OP1>-K068*<OP1>+0.44925*K069*<OP2>-K069*<OP2>-K070*<PAN>-K071*<ONIT>-K -!TC11-KTR11 - PJAC(:,14,14)=-TPK%K023(:)*PCONC(:,1)-TPK%K025(:)*PCONC(:,15)-TPK%K026(:)*PCON& +!135*<DMS>-KTC11-KTR11 + PJAC(:,15,15)=-TPK%K023(:)*PCONC(:,1)-TPK%K025(:)*PCONC(:,16)-TPK%K026(:)*PCON& &C(:,2)-TPK%K032(:)*PCONC(:,3)-TPK%K033(:)*PCONC(:,4)-TPK%K034(:)*PCONC(:,5)-TP& &K%K039(:)*PCONC(:,7)-TPK%K040(:)*PCONC(:,8)-TPK%K041(:)*PCONC(:,9)-TPK%K050(:)& -&*PCONC(:,10)-TPK%K051(:)*TPK%H2(:)-TPK%K052(:)*PCONC(:,11)-TPK%K053(:)*PCONC(:& -&,13)-TPK%K056(:)*PCONC(:,16)-TPK%K057(:)*PCONC(:,17)+0.00878*TPK%K058(:)*PCONC& -&(:,18)-TPK%K058(:)*PCONC(:,18)-TPK%K059(:)*PCONC(:,19)-TPK%K060(:)*PCONC(:,20)& -&-TPK%K061(:)*PCONC(:,21)-TPK%K062(:)*PCONC(:,22)-TPK%K063(:)*PCONC(:,23)-TPK%K& -&064(:)*PCONC(:,24)-TPK%K065(:)*PCONC(:,25)-TPK%K066(:)*PCONC(:,30)-TPK%K067(:)& -&*PCONC(:,31)+0.35*TPK%K068(:)*PCONC(:,28)-TPK%K068(:)*PCONC(:,28)+0.44925*TPK%& -&K069(:)*PCONC(:,29)-TPK%K069(:)*PCONC(:,29)-TPK%K070(:)*PCONC(:,27)-TPK%K071(:& -&)*PCONC(:,26)-TPK%KTC11(:)-TPK%KTR11(:) +&*PCONC(:,10)-TPK%K051(:)*TPK%H2(:)-TPK%K052(:)*PCONC(:,12)-TPK%K053(:)*PCONC(:& +&,14)-TPK%K056(:)*PCONC(:,17)-TPK%K057(:)*PCONC(:,18)+0.00878*TPK%K058(:)*PCONC& +&(:,19)-TPK%K058(:)*PCONC(:,19)-TPK%K059(:)*PCONC(:,20)-TPK%K060(:)*PCONC(:,21)& +&-TPK%K061(:)*PCONC(:,22)-TPK%K062(:)*PCONC(:,23)-TPK%K063(:)*PCONC(:,24)-TPK%K& +&064(:)*PCONC(:,25)-TPK%K065(:)*PCONC(:,26)-TPK%K066(:)*PCONC(:,31)-TPK%K067(:)& +&*PCONC(:,32)+0.35*TPK%K068(:)*PCONC(:,29)-TPK%K068(:)*PCONC(:,29)+0.44925*TPK%& +&K069(:)*PCONC(:,30)-TPK%K069(:)*PCONC(:,30)-TPK%K070(:)*PCONC(:,28)-TPK%K071(:& +&)*PCONC(:,27)-TPK%K135(:)*PCONC(:,11)-TPK%KTC11(:)-TPK%KTR11(:) ! !OH/HO2=+K024*<O3>-K025*<OH>+K035*<NO>+0.7*K038*<NO3> - PJAC(:,14,15)=+TPK%K024(:)*PCONC(:,1)-TPK%K025(:)*PCONC(:,14)+TPK%K035(:)*PCON& + PJAC(:,15,16)=+TPK%K024(:)*PCONC(:,1)-TPK%K025(:)*PCONC(:,15)+TPK%K035(:)*PCON& &C(:,3)+0.7*TPK%K038(:)*PCONC(:,5) ! !OH/CH4=-K056*<OH> - PJAC(:,14,16)=-TPK%K056(:)*PCONC(:,14) + PJAC(:,15,17)=-TPK%K056(:)*PCONC(:,15) ! !OH/ETH=-K057*<OH> - PJAC(:,14,17)=-TPK%K057(:)*PCONC(:,14) + PJAC(:,15,18)=-TPK%K057(:)*PCONC(:,15) ! !OH/ALKA=+0.00878*K058*<OH>-K058*<OH> - PJAC(:,14,18)=+0.00878*TPK%K058(:)*PCONC(:,14)-TPK%K058(:)*PCONC(:,14) + PJAC(:,15,19)=+0.00878*TPK%K058(:)*PCONC(:,15)-TPK%K058(:)*PCONC(:,15) ! !OH/ALKE=-K059*<OH>+0.39435*K079*<O3> - PJAC(:,14,19)=-TPK%K059(:)*PCONC(:,14)+0.39435*TPK%K079(:)*PCONC(:,1) + PJAC(:,15,20)=-TPK%K059(:)*PCONC(:,15)+0.39435*TPK%K079(:)*PCONC(:,1) ! !OH/BIO=+0.02*K054*<O3P>-K060*<OH>+0.28000*K080*<O3> - PJAC(:,14,20)=+0.02*TPK%K054(:)*TPK%O3P(:)-TPK%K060(:)*PCONC(:,14)+0.28000*TPK& + PJAC(:,15,21)=+0.02*TPK%K054(:)*TPK%O3P(:)-TPK%K060(:)*PCONC(:,15)+0.28000*TPK& &%K080(:)*PCONC(:,1) ! !OH/ARO=-K061*<OH> - PJAC(:,14,21)=-TPK%K061(:)*PCONC(:,14) + PJAC(:,15,22)=-TPK%K061(:)*PCONC(:,15) ! !OH/HCHO=-K062*<OH> - PJAC(:,14,22)=-TPK%K062(:)*PCONC(:,14) + PJAC(:,15,23)=-TPK%K062(:)*PCONC(:,15) ! !OH/ALD=-K063*<OH> - PJAC(:,14,23)=-TPK%K063(:)*PCONC(:,14) + PJAC(:,15,24)=-TPK%K063(:)*PCONC(:,15) ! !OH/KET=-K064*<OH> - PJAC(:,14,24)=-TPK%K064(:)*PCONC(:,14) + PJAC(:,15,25)=-TPK%K064(:)*PCONC(:,15) ! !OH/CARBO=-K065*<OH>+0.20595*K081*<O3> - PJAC(:,14,25)=-TPK%K065(:)*PCONC(:,14)+0.20595*TPK%K081(:)*PCONC(:,1) + PJAC(:,15,26)=-TPK%K065(:)*PCONC(:,15)+0.20595*TPK%K081(:)*PCONC(:,1) ! !OH/ONIT=-K071*<OH> - PJAC(:,14,26)=-TPK%K071(:)*PCONC(:,14) + PJAC(:,15,27)=-TPK%K071(:)*PCONC(:,15) ! !OH/PAN=-K070*<OH>+0.036*K082*<O3> - PJAC(:,14,27)=-TPK%K070(:)*PCONC(:,14)+0.036*TPK%K082(:)*PCONC(:,1) + PJAC(:,15,28)=-TPK%K070(:)*PCONC(:,15)+0.036*TPK%K082(:)*PCONC(:,1) ! !OH/OP1=+K013+0.35*K068*<OH>-K068*<OH> - PJAC(:,14,28)=+TPK%K013(:)+0.35*TPK%K068(:)*PCONC(:,14)-TPK%K068(:)*PCONC(:,14& + PJAC(:,15,29)=+TPK%K013(:)+0.35*TPK%K068(:)*PCONC(:,15)-TPK%K068(:)*PCONC(:,15& &) ! !OH/OP2=+K014+0.44925*K069*<OH>-K069*<OH> - PJAC(:,14,29)=+TPK%K014(:)+0.44925*TPK%K069(:)*PCONC(:,14)-TPK%K069(:)*PCONC(:& -&,14) + PJAC(:,15,30)=+TPK%K014(:)+0.44925*TPK%K069(:)*PCONC(:,15)-TPK%K069(:)*PCONC(:& +&,15) ! !OH/ORA1=-K066*<OH> - PJAC(:,14,30)=-TPK%K066(:)*PCONC(:,14) + PJAC(:,15,31)=-TPK%K066(:)*PCONC(:,15) ! !OH/ORA2=-K067*<OH> - PJAC(:,14,31)=-TPK%K067(:)*PCONC(:,14) + PJAC(:,15,32)=-TPK%K067(:)*PCONC(:,15) ! !OH/MO2=0.0 ! @@ -8765,7 +9038,7 @@ SUBROUTINE SUBJ2 !OH/PHO=0.0 ! !OH/ADD=+K087*<O3> - PJAC(:,14,37)=+TPK%K087(:)*PCONC(:,1) + PJAC(:,15,38)=+TPK%K087(:)*PCONC(:,1) ! !OH/AROP=0.0 ! @@ -8796,7 +9069,7 @@ SUBROUTINE SUBJ2 !OH/WC_NH3=0.0 ! !OH/WC_OH=+KTC31 - PJAC(:,14,52)=+TPK%KTC31(:) + PJAC(:,15,53)=+TPK%KTC31(:) ! !OH/WC_HO2=0.0 ! @@ -8847,7 +9120,7 @@ SUBROUTINE SUBJ2 !OH/WR_NH3=0.0 ! !OH/WR_OH=+KTR31 - PJAC(:,14,77)=+TPK%KTR31(:) + PJAC(:,15,78)=+TPK%KTR31(:) ! !OH/WR_HO2=0.0 ! @@ -8877,32 +9150,40 @@ SUBROUTINE SUBJ2 ! !OH/WR_AHMS=0.0 ! +RETURN +END SUBROUTINE SUBJ2 +! +SUBROUTINE SUBJ3 +! +!Indices 16 a 20 +! +! !HO2/O3=+K023*<OH>-K024*<HO2>+0.23451*K079*<ALKE>+0.30000*K080*<BIO>+0.28441*K0 !81*<CARBO>+0.08*K082*<PAN> - PJAC(:,15,1)=+TPK%K023(:)*PCONC(:,14)-TPK%K024(:)*PCONC(:,15)+0.23451*TPK%K079& -&(:)*PCONC(:,19)+0.30000*TPK%K080(:)*PCONC(:,20)+0.28441*TPK%K081(:)*PCONC(:,25& -&)+0.08*TPK%K082(:)*PCONC(:,27) + PJAC(:,16,1)=+TPK%K023(:)*PCONC(:,15)-TPK%K024(:)*PCONC(:,16)+0.23451*TPK%K079& +&(:)*PCONC(:,20)+0.30000*TPK%K080(:)*PCONC(:,21)+0.28441*TPK%K081(:)*PCONC(:,26& +&)+0.08*TPK%K082(:)*PCONC(:,28) ! !HO2/H2O2=+K026*<OH> - PJAC(:,15,2)=+TPK%K026(:)*PCONC(:,14) + PJAC(:,16,2)=+TPK%K026(:)*PCONC(:,15) ! !HO2/NO=-K035*<HO2>+K090*<MO2>+0.74265*K091*<ALKAP>+K092*<ALKEP>+0.84700*K093*< !BIOP>+0.95115*K094*<AROP>+0.12334*K095*<CARBOP>+0.18401*K096*<OLN> - PJAC(:,15,3)=-TPK%K035(:)*PCONC(:,15)+TPK%K090(:)*PCONC(:,32)+0.74265*TPK%K091& -&(:)*PCONC(:,33)+TPK%K092(:)*PCONC(:,34)+0.84700*TPK%K093(:)*PCONC(:,35)+0.9511& -&5*TPK%K094(:)*PCONC(:,38)+0.12334*TPK%K095(:)*PCONC(:,39)+0.18401*TPK%K096(:)*& -&PCONC(:,40) + PJAC(:,16,3)=-TPK%K035(:)*PCONC(:,16)+TPK%K090(:)*PCONC(:,33)+0.74265*TPK%K091& +&(:)*PCONC(:,34)+TPK%K092(:)*PCONC(:,35)+0.84700*TPK%K093(:)*PCONC(:,36)+0.9511& +&5*TPK%K094(:)*PCONC(:,39)+0.12334*TPK%K095(:)*PCONC(:,40)+0.18401*TPK%K096(:)*& +&PCONC(:,41) ! !HO2/NO2=-K036*<HO2> - PJAC(:,15,4)=-TPK%K036(:)*PCONC(:,15) + PJAC(:,16,4)=-TPK%K036(:)*PCONC(:,16) ! !HO2/NO3=+K034*<OH>-K038*<HO2>+K072*<HCHO>+0.63217*K074*<CARBO>+K119*<MO2>+0.81 !290*K120*<ALKAP>+K121*<ALKEP>+K122*<BIOP>+K123*<AROP>+0.04915*K124*<CARBOP>+0. !25928*K125*<OLN> - PJAC(:,15,5)=+TPK%K034(:)*PCONC(:,14)-TPK%K038(:)*PCONC(:,15)+TPK%K072(:)*PCON& -&C(:,22)+0.63217*TPK%K074(:)*PCONC(:,25)+TPK%K119(:)*PCONC(:,32)+0.81290*TPK%K1& -&20(:)*PCONC(:,33)+TPK%K121(:)*PCONC(:,34)+TPK%K122(:)*PCONC(:,35)+TPK%K123(:)*& -&PCONC(:,38)+0.04915*TPK%K124(:)*PCONC(:,39)+0.25928*TPK%K125(:)*PCONC(:,40) + PJAC(:,16,5)=+TPK%K034(:)*PCONC(:,15)-TPK%K038(:)*PCONC(:,16)+TPK%K072(:)*PCON& +&C(:,23)+0.63217*TPK%K074(:)*PCONC(:,26)+TPK%K119(:)*PCONC(:,33)+0.81290*TPK%K1& +&20(:)*PCONC(:,34)+TPK%K121(:)*PCONC(:,35)+TPK%K122(:)*PCONC(:,36)+TPK%K123(:)*& +&PCONC(:,39)+0.04915*TPK%K124(:)*PCONC(:,40)+0.25928*TPK%K125(:)*PCONC(:,41) ! !HO2/N2O5=0.0 ! @@ -8911,141 +9192,143 @@ SUBROUTINE SUBJ2 !HO2/HNO3=0.0 ! !HO2/HNO4=+0.65*K006+K037 - PJAC(:,15,9)=+0.65*TPK%K006(:)+TPK%K037(:) + PJAC(:,16,9)=+0.65*TPK%K006(:)+TPK%K037(:) ! !HO2/NH3=0.0 ! +!HO2/DMS=0.0 +! !HO2/SO2=+K052*<OH> - PJAC(:,15,11)=+TPK%K052(:)*PCONC(:,14) + PJAC(:,16,12)=+TPK%K052(:)*PCONC(:,15) ! !HO2/SULF=0.0 ! !HO2/CO=+K053*<OH> - PJAC(:,15,13)=+TPK%K053(:)*PCONC(:,14) + PJAC(:,16,14)=+TPK%K053(:)*PCONC(:,15) ! !HO2/OH=+K023*<O3>-K025*<HO2>+K026*<H2O2>+K034*<NO3>+K051*<H2>+K052*<SO2>+K053* !<CO>+0.12793*K058*<ALKA>+0.10318*K061*<ARO>+K062*<HCHO>+0.51208*K065*<CARBO>+K !066*<ORA1>+0.02915*K069*<OP2>+0.28107*K070*<PAN> - PJAC(:,15,14)=+TPK%K023(:)*PCONC(:,1)-TPK%K025(:)*PCONC(:,15)+TPK%K026(:)*PCON& -&C(:,2)+TPK%K034(:)*PCONC(:,5)+TPK%K051(:)*TPK%H2(:)+TPK%K052(:)*PCONC(:,11)+TP& -&K%K053(:)*PCONC(:,13)+0.12793*TPK%K058(:)*PCONC(:,18)+0.10318*TPK%K061(:)*PCON& -&C(:,21)+TPK%K062(:)*PCONC(:,22)+0.51208*TPK%K065(:)*PCONC(:,25)+TPK%K066(:)*PC& -&ONC(:,30)+0.02915*TPK%K069(:)*PCONC(:,29)+0.28107*TPK%K070(:)*PCONC(:,27) + PJAC(:,16,15)=+TPK%K023(:)*PCONC(:,1)-TPK%K025(:)*PCONC(:,16)+TPK%K026(:)*PCON& +&C(:,2)+TPK%K034(:)*PCONC(:,5)+TPK%K051(:)*TPK%H2(:)+TPK%K052(:)*PCONC(:,12)+TP& +&K%K053(:)*PCONC(:,14)+0.12793*TPK%K058(:)*PCONC(:,19)+0.10318*TPK%K061(:)*PCON& +&C(:,22)+TPK%K062(:)*PCONC(:,23)+0.51208*TPK%K065(:)*PCONC(:,26)+TPK%K066(:)*PC& +&ONC(:,31)+0.02915*TPK%K069(:)*PCONC(:,30)+0.28107*TPK%K070(:)*PCONC(:,28) ! !HO2/HO2=-K024*<O3>-K025*<OH>-K027*<HO2>-K027*<HO2>-K027*<HO2>-K027*<HO2>-K028* !<HO2>*<H2O>-K028*<HO2>*<H2O>-K028*<HO2>*<H2O>-K028*<HO2>*<H2O>-K035*<NO>-K036* !<NO2>-K038*<NO3>-K084*<PHO>-K097*<MO2>-K098*<ALKAP>-K099*<ALKEP>-K0100*<BIOP>- !K0101*<AROP>-K0102*<CARBOP>-K103*<OLN>-K126*<XO2>-KTC12-KTR12 - PJAC(:,15,15)=-TPK%K024(:)*PCONC(:,1)-TPK%K025(:)*PCONC(:,14)-TPK%K027(:)*PCON& -&C(:,15)-TPK%K027(:)*PCONC(:,15)-TPK%K027(:)*PCONC(:,15)-TPK%K027(:)*PCONC(:,15& -&)-TPK%K028(:)*PCONC(:,15)*TPK%H2O(:)-TPK%K028(:)*PCONC(:,15)*TPK%H2O(:)-TPK%K0& -&28(:)*PCONC(:,15)*TPK%H2O(:)-TPK%K028(:)*PCONC(:,15)*TPK%H2O(:)-TPK%K035(:)*PC& -&ONC(:,3)-TPK%K036(:)*PCONC(:,4)-TPK%K038(:)*PCONC(:,5)-TPK%K084(:)*PCONC(:,36)& -&-TPK%K097(:)*PCONC(:,32)-TPK%K098(:)*PCONC(:,33)-TPK%K099(:)*PCONC(:,34)-TPK%K& -&0100(:)*PCONC(:,35)-TPK%K0101(:)*PCONC(:,38)-TPK%K0102(:)*PCONC(:,39)-TPK%K103& -&(:)*PCONC(:,40)-TPK%K126(:)*PCONC(:,41)-TPK%KTC12(:)-TPK%KTR12(:) + PJAC(:,16,16)=-TPK%K024(:)*PCONC(:,1)-TPK%K025(:)*PCONC(:,15)-TPK%K027(:)*PCON& +&C(:,16)-TPK%K027(:)*PCONC(:,16)-TPK%K027(:)*PCONC(:,16)-TPK%K027(:)*PCONC(:,16& +&)-TPK%K028(:)*PCONC(:,16)*TPK%H2O(:)-TPK%K028(:)*PCONC(:,16)*TPK%H2O(:)-TPK%K0& +&28(:)*PCONC(:,16)*TPK%H2O(:)-TPK%K028(:)*PCONC(:,16)*TPK%H2O(:)-TPK%K035(:)*PC& +&ONC(:,3)-TPK%K036(:)*PCONC(:,4)-TPK%K038(:)*PCONC(:,5)-TPK%K084(:)*PCONC(:,37)& +&-TPK%K097(:)*PCONC(:,33)-TPK%K098(:)*PCONC(:,34)-TPK%K099(:)*PCONC(:,35)-TPK%K& +&0100(:)*PCONC(:,36)-TPK%K0101(:)*PCONC(:,39)-TPK%K0102(:)*PCONC(:,40)-TPK%K103& +&(:)*PCONC(:,41)-TPK%K126(:)*PCONC(:,42)-TPK%KTC12(:)-TPK%KTR12(:) ! !HO2/CH4=0.0 ! !HO2/ETH=0.0 ! !HO2/ALKA=+0.12793*K058*<OH> - PJAC(:,15,18)=+0.12793*TPK%K058(:)*PCONC(:,14) + PJAC(:,16,19)=+0.12793*TPK%K058(:)*PCONC(:,15) ! !HO2/ALKE=+0.23451*K079*<O3> - PJAC(:,15,19)=+0.23451*TPK%K079(:)*PCONC(:,1) + PJAC(:,16,20)=+0.23451*TPK%K079(:)*PCONC(:,1) ! !HO2/BIO=+0.28*K054*<O3P>+0.30000*K080*<O3> - PJAC(:,15,20)=+0.28*TPK%K054(:)*TPK%O3P(:)+0.30000*TPK%K080(:)*PCONC(:,1) + PJAC(:,16,21)=+0.28*TPK%K054(:)*TPK%O3P(:)+0.30000*TPK%K080(:)*PCONC(:,1) ! !HO2/ARO=+0.10318*K061*<OH> - PJAC(:,15,21)=+0.10318*TPK%K061(:)*PCONC(:,14) + PJAC(:,16,22)=+0.10318*TPK%K061(:)*PCONC(:,15) ! !HO2/HCHO=+K011+K011+K062*<OH>+K072*<NO3> - PJAC(:,15,22)=+TPK%K011(:)+TPK%K011(:)+TPK%K062(:)*PCONC(:,14)+TPK%K072(:)*PCO& + PJAC(:,16,23)=+TPK%K011(:)+TPK%K011(:)+TPK%K062(:)*PCONC(:,15)+TPK%K072(:)*PCO& &NC(:,5) ! !HO2/ALD=+K012 - PJAC(:,15,23)=+TPK%K012(:) + PJAC(:,16,24)=+TPK%K012(:) ! !HO2/KET=0.0 ! !HO2/CARBO=+0.75830*K016+0.51208*K065*<OH>+0.63217*K074*<NO3>+0.28441*K081*<O3> - PJAC(:,15,25)=+0.75830*TPK%K016(:)+0.51208*TPK%K065(:)*PCONC(:,14)+0.63217*TPK& + PJAC(:,16,26)=+0.75830*TPK%K016(:)+0.51208*TPK%K065(:)*PCONC(:,15)+0.63217*TPK& &%K074(:)*PCONC(:,5)+0.28441*TPK%K081(:)*PCONC(:,1) ! !HO2/ONIT=+K017 - PJAC(:,15,26)=+TPK%K017(:) + PJAC(:,16,27)=+TPK%K017(:) ! !HO2/PAN=+0.28107*K070*<OH>+0.08*K082*<O3> - PJAC(:,15,27)=+0.28107*TPK%K070(:)*PCONC(:,14)+0.08*TPK%K082(:)*PCONC(:,1) + PJAC(:,16,28)=+0.28107*TPK%K070(:)*PCONC(:,15)+0.08*TPK%K082(:)*PCONC(:,1) ! !HO2/OP1=+K013 - PJAC(:,15,28)=+TPK%K013(:) + PJAC(:,16,29)=+TPK%K013(:) ! !HO2/OP2=+0.96205*K014+0.02915*K069*<OH> - PJAC(:,15,29)=+0.96205*TPK%K014(:)+0.02915*TPK%K069(:)*PCONC(:,14) + PJAC(:,16,30)=+0.96205*TPK%K014(:)+0.02915*TPK%K069(:)*PCONC(:,15) ! !HO2/ORA1=+K066*<OH> - PJAC(:,15,30)=+TPK%K066(:)*PCONC(:,14) + PJAC(:,16,31)=+TPK%K066(:)*PCONC(:,15) ! !HO2/ORA2=0.0 ! !HO2/MO2=+K090*<NO>-K097*<HO2>+0.66*K104*<MO2>+0.66*K104*<MO2>+0.98383*K105*<AL !KAP>+K106*<ALKEP>+1.00000*K107*<BIOP>+1.02767*K108*<AROP>+0.82998*K109*<CARBOP !>+0.67560*K110*<OLN>+K119*<NO3>+K127*<XO2> - PJAC(:,15,32)=+TPK%K090(:)*PCONC(:,3)-TPK%K097(:)*PCONC(:,15)+0.66*TPK%K104(:)& -&*PCONC(:,32)+0.66*TPK%K104(:)*PCONC(:,32)+0.98383*TPK%K105(:)*PCONC(:,33)+TPK%& -&K106(:)*PCONC(:,34)+1.00000*TPK%K107(:)*PCONC(:,35)+1.02767*TPK%K108(:)*PCONC(& -&:,38)+0.82998*TPK%K109(:)*PCONC(:,39)+0.67560*TPK%K110(:)*PCONC(:,40)+TPK%K119& -&(:)*PCONC(:,5)+TPK%K127(:)*PCONC(:,41) + PJAC(:,16,33)=+TPK%K090(:)*PCONC(:,3)-TPK%K097(:)*PCONC(:,16)+0.66*TPK%K104(:)& +&*PCONC(:,33)+0.66*TPK%K104(:)*PCONC(:,33)+0.98383*TPK%K105(:)*PCONC(:,34)+TPK%& +&K106(:)*PCONC(:,35)+1.00000*TPK%K107(:)*PCONC(:,36)+1.02767*TPK%K108(:)*PCONC(& +&:,39)+0.82998*TPK%K109(:)*PCONC(:,40)+0.67560*TPK%K110(:)*PCONC(:,41)+TPK%K119& +&(:)*PCONC(:,5)+TPK%K127(:)*PCONC(:,42) ! !HO2/ALKAP=+0.74265*K091*<NO>-K098*<HO2>+0.98383*K105*<MO2>+0.48079*K111*<CARBO !P>+0.81290*K120*<NO3> - PJAC(:,15,33)=+0.74265*TPK%K091(:)*PCONC(:,3)-TPK%K098(:)*PCONC(:,15)+0.98383*& -&TPK%K105(:)*PCONC(:,32)+0.48079*TPK%K111(:)*PCONC(:,39)+0.81290*TPK%K120(:)*PC& + PJAC(:,16,34)=+0.74265*TPK%K091(:)*PCONC(:,3)-TPK%K098(:)*PCONC(:,16)+0.98383*& +&TPK%K105(:)*PCONC(:,33)+0.48079*TPK%K111(:)*PCONC(:,40)+0.81290*TPK%K120(:)*PC& &ONC(:,5) ! !HO2/ALKEP=+K092*<NO>-K099*<HO2>+K106*<MO2>+0.50078*K112*<CARBOP>+K121*<NO3> - PJAC(:,15,34)=+TPK%K092(:)*PCONC(:,3)-TPK%K099(:)*PCONC(:,15)+TPK%K106(:)*PCON& -&C(:,32)+0.50078*TPK%K112(:)*PCONC(:,39)+TPK%K121(:)*PCONC(:,5) + PJAC(:,16,35)=+TPK%K092(:)*PCONC(:,3)-TPK%K099(:)*PCONC(:,16)+TPK%K106(:)*PCON& +&C(:,33)+0.50078*TPK%K112(:)*PCONC(:,40)+TPK%K121(:)*PCONC(:,5) ! !HO2/BIOP=+0.84700*K093*<NO>-K0100*<HO2>+1.00000*K107*<MO2>+0.50600*K113*<CARBO !P>+K122*<NO3> - PJAC(:,15,35)=+0.84700*TPK%K093(:)*PCONC(:,3)-TPK%K0100(:)*PCONC(:,15)+1.00000& -&*TPK%K107(:)*PCONC(:,32)+0.50600*TPK%K113(:)*PCONC(:,39)+TPK%K122(:)*PCONC(:,5& + PJAC(:,16,36)=+0.84700*TPK%K093(:)*PCONC(:,3)-TPK%K0100(:)*PCONC(:,16)+1.00000& +&*TPK%K107(:)*PCONC(:,33)+0.50600*TPK%K113(:)*PCONC(:,40)+TPK%K122(:)*PCONC(:,5& &) ! !HO2/PHO=-K084*<HO2> - PJAC(:,15,36)=-TPK%K084(:)*PCONC(:,15) + PJAC(:,16,37)=-TPK%K084(:)*PCONC(:,16) ! !HO2/ADD=+0.02*K086*<O2> - PJAC(:,15,37)=+0.02*TPK%K086(:)*TPK%O2(:) + PJAC(:,16,38)=+0.02*TPK%K086(:)*TPK%O2(:) ! !HO2/AROP=+0.95115*K094*<NO>-K0101*<HO2>+1.02767*K108*<MO2>+K114*<CARBOP>+K123* !<NO3> - PJAC(:,15,38)=+0.95115*TPK%K094(:)*PCONC(:,3)-TPK%K0101(:)*PCONC(:,15)+1.02767& -&*TPK%K108(:)*PCONC(:,32)+TPK%K114(:)*PCONC(:,39)+TPK%K123(:)*PCONC(:,5) + PJAC(:,16,39)=+0.95115*TPK%K094(:)*PCONC(:,3)-TPK%K0101(:)*PCONC(:,16)+1.02767& +&*TPK%K108(:)*PCONC(:,33)+TPK%K114(:)*PCONC(:,40)+TPK%K123(:)*PCONC(:,5) ! !HO2/CARBOP=+0.12334*K095*<NO>-K0102*<HO2>+0.82998*K109*<MO2>+0.48079*K111*<ALK !AP>+0.50078*K112*<ALKEP>+0.50600*K113*<BIOP>+K114*<AROP>+0.07566*K115*<CARBOP> !+0.07566*K115*<CARBOP>+0.17599*K116*<OLN>+0.04915*K124*<NO3> - PJAC(:,15,39)=+0.12334*TPK%K095(:)*PCONC(:,3)-TPK%K0102(:)*PCONC(:,15)+0.82998& -&*TPK%K109(:)*PCONC(:,32)+0.48079*TPK%K111(:)*PCONC(:,33)+0.50078*TPK%K112(:)*P& -&CONC(:,34)+0.50600*TPK%K113(:)*PCONC(:,35)+TPK%K114(:)*PCONC(:,38)+0.07566*TPK& -&%K115(:)*PCONC(:,39)+0.07566*TPK%K115(:)*PCONC(:,39)+0.17599*TPK%K116(:)*PCONC& -&(:,40)+0.04915*TPK%K124(:)*PCONC(:,5) + PJAC(:,16,40)=+0.12334*TPK%K095(:)*PCONC(:,3)-TPK%K0102(:)*PCONC(:,16)+0.82998& +&*TPK%K109(:)*PCONC(:,33)+0.48079*TPK%K111(:)*PCONC(:,34)+0.50078*TPK%K112(:)*P& +&CONC(:,35)+0.50600*TPK%K113(:)*PCONC(:,36)+TPK%K114(:)*PCONC(:,39)+0.07566*TPK& +&%K115(:)*PCONC(:,40)+0.07566*TPK%K115(:)*PCONC(:,40)+0.17599*TPK%K116(:)*PCONC& +&(:,41)+0.04915*TPK%K124(:)*PCONC(:,5) ! !HO2/OLN=+0.18401*K096*<NO>-K103*<HO2>+0.67560*K110*<MO2>+0.17599*K116*<CARBOP> !+K117*<OLN>+K117*<OLN>+0.00000*K118*<OLN>+0.00000*K118*<OLN>+0.25928*K125*<NO3 !> - PJAC(:,15,40)=+0.18401*TPK%K096(:)*PCONC(:,3)-TPK%K103(:)*PCONC(:,15)+0.67560*& -&TPK%K110(:)*PCONC(:,32)+0.17599*TPK%K116(:)*PCONC(:,39)+TPK%K117(:)*PCONC(:,40& -&)+TPK%K117(:)*PCONC(:,40)+0.00000*TPK%K118(:)*PCONC(:,40)+0.00000*TPK%K118(:)*& -&PCONC(:,40)+0.25928*TPK%K125(:)*PCONC(:,5) + PJAC(:,16,41)=+0.18401*TPK%K096(:)*PCONC(:,3)-TPK%K103(:)*PCONC(:,16)+0.67560*& +&TPK%K110(:)*PCONC(:,33)+0.17599*TPK%K116(:)*PCONC(:,40)+TPK%K117(:)*PCONC(:,41& +&)+TPK%K117(:)*PCONC(:,41)+0.00000*TPK%K118(:)*PCONC(:,41)+0.00000*TPK%K118(:)*& +&PCONC(:,41)+0.25928*TPK%K125(:)*PCONC(:,5) ! !HO2/XO2=-K126*<HO2>+K127*<MO2> - PJAC(:,15,41)=-TPK%K126(:)*PCONC(:,15)+TPK%K127(:)*PCONC(:,32) + PJAC(:,16,42)=-TPK%K126(:)*PCONC(:,16)+TPK%K127(:)*PCONC(:,33) ! !HO2/WC_O3=0.0 ! @@ -9070,7 +9353,7 @@ SUBROUTINE SUBJ2 !HO2/WC_OH=0.0 ! !HO2/WC_HO2=+KTC32 - PJAC(:,15,53)=+TPK%KTC32(:) + PJAC(:,16,54)=+TPK%KTC32(:) ! !HO2/WC_CO2=0.0 ! @@ -9121,7 +9404,7 @@ SUBROUTINE SUBJ2 !HO2/WR_OH=0.0 ! !HO2/WR_HO2=+KTR32 - PJAC(:,15,78)=+TPK%KTR32(:) + PJAC(:,16,79)=+TPK%KTR32(:) ! !HO2/WR_CO2=0.0 ! @@ -9149,16 +9432,8 @@ SUBROUTINE SUBJ2 ! !HO2/WR_AHMS=0.0 ! -RETURN -END SUBROUTINE SUBJ2 -! -SUBROUTINE SUBJ3 -! -!Indices 16 a 20 -! -! !CH4/O3=+0.04300*K079*<ALKE> - PJAC(:,16,1)=+0.04300*TPK%K079(:)*PCONC(:,19) + PJAC(:,17,1)=+0.04300*TPK%K079(:)*PCONC(:,20) ! !CH4/H2O2=0.0 ! @@ -9178,6 +9453,8 @@ SUBROUTINE SUBJ3 ! !CH4/NH3=0.0 ! +!CH4/DMS=0.0 +! !CH4/SO2=0.0 ! !CH4/SULF=0.0 @@ -9185,19 +9462,19 @@ SUBROUTINE SUBJ3 !CH4/CO=0.0 ! !CH4/OH=-K056*<CH4> - PJAC(:,16,14)=-TPK%K056(:)*PCONC(:,16) + PJAC(:,17,15)=-TPK%K056(:)*PCONC(:,17) ! !CH4/HO2=0.0 ! !CH4/CH4=-K056*<OH> - PJAC(:,16,16)=-TPK%K056(:)*PCONC(:,14) + PJAC(:,17,17)=-TPK%K056(:)*PCONC(:,15) ! !CH4/ETH=0.0 ! !CH4/ALKA=0.0 ! !CH4/ALKE=+0.04300*K079*<O3> - PJAC(:,16,19)=+0.04300*TPK%K079(:)*PCONC(:,1) + PJAC(:,17,20)=+0.04300*TPK%K079(:)*PCONC(:,1) ! !CH4/BIO=0.0 ! @@ -9344,7 +9621,7 @@ SUBROUTINE SUBJ3 !CH4/WR_AHMS=0.0 ! !ETH/O3=+0.03196*K079*<ALKE> - PJAC(:,17,1)=+0.03196*TPK%K079(:)*PCONC(:,19) + PJAC(:,18,1)=+0.03196*TPK%K079(:)*PCONC(:,20) ! !ETH/H2O2=0.0 ! @@ -9364,6 +9641,8 @@ SUBROUTINE SUBJ3 ! !ETH/NH3=0.0 ! +!ETH/DMS=0.0 +! !ETH/SO2=0.0 ! !ETH/SULF=0.0 @@ -9371,19 +9650,19 @@ SUBROUTINE SUBJ3 !ETH/CO=0.0 ! !ETH/OH=-K057*<ETH> - PJAC(:,17,14)=-TPK%K057(:)*PCONC(:,17) + PJAC(:,18,15)=-TPK%K057(:)*PCONC(:,18) ! !ETH/HO2=0.0 ! !ETH/CH4=0.0 ! !ETH/ETH=-K057*<OH> - PJAC(:,17,17)=-TPK%K057(:)*PCONC(:,14) + PJAC(:,18,18)=-TPK%K057(:)*PCONC(:,15) ! !ETH/ALKA=0.0 ! !ETH/ALKE=+0.03196*K079*<O3> - PJAC(:,17,19)=+0.03196*TPK%K079(:)*PCONC(:,1) + PJAC(:,18,20)=+0.03196*TPK%K079(:)*PCONC(:,1) ! !ETH/BIO=0.0 ! @@ -9549,6 +9828,8 @@ SUBROUTINE SUBJ3 ! !ALKA/NH3=0.0 ! +!ALKA/DMS=0.0 +! !ALKA/SO2=0.0 ! !ALKA/SULF=0.0 @@ -9556,7 +9837,7 @@ SUBROUTINE SUBJ3 !ALKA/CO=0.0 ! !ALKA/OH=-K058*<ALKA> - PJAC(:,18,14)=-TPK%K058(:)*PCONC(:,18) + PJAC(:,19,15)=-TPK%K058(:)*PCONC(:,19) ! !ALKA/HO2=0.0 ! @@ -9565,7 +9846,7 @@ SUBROUTINE SUBJ3 !ALKA/ETH=0.0 ! !ALKA/ALKA=-K058*<OH> - PJAC(:,18,18)=-TPK%K058(:)*PCONC(:,14) + PJAC(:,19,19)=-TPK%K058(:)*PCONC(:,15) ! !ALKA/ALKE=0.0 ! @@ -9714,18 +9995,18 @@ SUBROUTINE SUBJ3 !ALKA/WR_AHMS=0.0 ! !ALKE/O3=+0.00000*K079*<ALKE>-K079*<ALKE>+0.37388*K080*<BIO> - PJAC(:,19,1)=+0.00000*TPK%K079(:)*PCONC(:,19)-TPK%K079(:)*PCONC(:,19)+0.37388*& -&TPK%K080(:)*PCONC(:,20) + PJAC(:,20,1)=+0.00000*TPK%K079(:)*PCONC(:,20)-TPK%K079(:)*PCONC(:,20)+0.37388*& +&TPK%K080(:)*PCONC(:,21) ! !ALKE/H2O2=0.0 ! !ALKE/NO=+0.37815*K093*<BIOP> - PJAC(:,19,3)=+0.37815*TPK%K093(:)*PCONC(:,35) + PJAC(:,20,3)=+0.37815*TPK%K093(:)*PCONC(:,36) ! !ALKE/NO2=0.0 ! !ALKE/NO3=-K076*<ALKE>+0.42729*K122*<BIOP> - PJAC(:,19,5)=-TPK%K076(:)*PCONC(:,19)+0.42729*TPK%K122(:)*PCONC(:,35) + PJAC(:,20,5)=-TPK%K076(:)*PCONC(:,20)+0.42729*TPK%K122(:)*PCONC(:,36) ! !ALKE/N2O5=0.0 ! @@ -9737,6 +10018,8 @@ SUBROUTINE SUBJ3 ! !ALKE/NH3=0.0 ! +!ALKE/DMS=0.0 +! !ALKE/SO2=0.0 ! !ALKE/SULF=0.0 @@ -9744,7 +10027,7 @@ SUBROUTINE SUBJ3 !ALKE/CO=0.0 ! !ALKE/OH=-K059*<ALKE> - PJAC(:,19,14)=-TPK%K059(:)*PCONC(:,19) + PJAC(:,20,15)=-TPK%K059(:)*PCONC(:,20) ! !ALKE/HO2=0.0 ! @@ -9755,11 +10038,11 @@ SUBROUTINE SUBJ3 !ALKE/ALKA=0.0 ! !ALKE/ALKE=-K059*<OH>-K076*<NO3>+0.00000*K079*<O3>-K079*<O3> - PJAC(:,19,19)=-TPK%K059(:)*PCONC(:,14)-TPK%K076(:)*PCONC(:,5)+0.00000*TPK%K079& + PJAC(:,20,20)=-TPK%K059(:)*PCONC(:,15)-TPK%K076(:)*PCONC(:,5)+0.00000*TPK%K079& &(:)*PCONC(:,1)-TPK%K079(:)*PCONC(:,1) ! !ALKE/BIO=+0.91868*K054*<O3P>+0.37388*K080*<O3> - PJAC(:,19,20)=+0.91868*TPK%K054(:)*TPK%O3P(:)+0.37388*TPK%K080(:)*PCONC(:,1) + PJAC(:,20,21)=+0.91868*TPK%K054(:)*TPK%O3P(:)+0.37388*TPK%K080(:)*PCONC(:,1) ! !ALKE/ARO=0.0 ! @@ -9784,7 +10067,7 @@ SUBROUTINE SUBJ3 !ALKE/ORA2=0.0 ! !ALKE/MO2=+0.48074*K107*<BIOP> - PJAC(:,19,32)=+0.48074*TPK%K107(:)*PCONC(:,35) + PJAC(:,20,33)=+0.48074*TPK%K107(:)*PCONC(:,36) ! !ALKE/ALKAP=0.0 ! @@ -9792,8 +10075,8 @@ SUBROUTINE SUBJ3 ! !ALKE/BIOP=+0.37815*K093*<NO>+0.48074*K107*<MO2>+0.24463*K113*<CARBOP>+0.42729* !K122*<NO3> - PJAC(:,19,35)=+0.37815*TPK%K093(:)*PCONC(:,3)+0.48074*TPK%K107(:)*PCONC(:,32)+& -&0.24463*TPK%K113(:)*PCONC(:,39)+0.42729*TPK%K122(:)*PCONC(:,5) + PJAC(:,20,36)=+0.37815*TPK%K093(:)*PCONC(:,3)+0.48074*TPK%K107(:)*PCONC(:,33)+& +&0.24463*TPK%K113(:)*PCONC(:,40)+0.42729*TPK%K122(:)*PCONC(:,5) ! !ALKE/PHO=0.0 ! @@ -9802,7 +10085,7 @@ SUBROUTINE SUBJ3 !ALKE/AROP=0.0 ! !ALKE/CARBOP=+0.24463*K113*<BIOP> - PJAC(:,19,39)=+0.24463*TPK%K113(:)*PCONC(:,35) + PJAC(:,20,40)=+0.24463*TPK%K113(:)*PCONC(:,36) ! !ALKE/OLN=0.0 ! @@ -9908,8 +10191,16 @@ SUBROUTINE SUBJ3 ! !ALKE/WR_AHMS=0.0 ! +RETURN +END SUBROUTINE SUBJ3 +! +SUBROUTINE SUBJ4 +! +!Indices 21 a 25 +! +! !BIO/O3=-K080*<BIO> - PJAC(:,20,1)=-TPK%K080(:)*PCONC(:,20) + PJAC(:,21,1)=-TPK%K080(:)*PCONC(:,21) ! !BIO/H2O2=0.0 ! @@ -9918,7 +10209,7 @@ SUBROUTINE SUBJ3 !BIO/NO2=0.0 ! !BIO/NO3=-K077*<BIO> - PJAC(:,20,5)=-TPK%K077(:)*PCONC(:,20) + PJAC(:,21,5)=-TPK%K077(:)*PCONC(:,21) ! !BIO/N2O5=0.0 ! @@ -9930,6 +10221,8 @@ SUBROUTINE SUBJ3 ! !BIO/NH3=0.0 ! +!BIO/DMS=0.0 +! !BIO/SO2=0.0 ! !BIO/SULF=0.0 @@ -9937,7 +10230,7 @@ SUBROUTINE SUBJ3 !BIO/CO=0.0 ! !BIO/OH=-K060*<BIO> - PJAC(:,20,14)=-TPK%K060(:)*PCONC(:,20) + PJAC(:,21,15)=-TPK%K060(:)*PCONC(:,21) ! !BIO/HO2=0.0 ! @@ -9950,7 +10243,7 @@ SUBROUTINE SUBJ3 !BIO/ALKE=0.0 ! !BIO/BIO=-K054*<O3P>-K060*<OH>-K077*<NO3>-K080*<O3> - PJAC(:,20,20)=-TPK%K054(:)*TPK%O3P(:)-TPK%K060(:)*PCONC(:,14)-TPK%K077(:)*PCON& + PJAC(:,21,21)=-TPK%K054(:)*TPK%O3P(:)-TPK%K060(:)*PCONC(:,15)-TPK%K077(:)*PCON& &C(:,5)-TPK%K080(:)*PCONC(:,1) ! !BIO/ARO=0.0 @@ -10095,26 +10388,18 @@ SUBROUTINE SUBJ3 ! !BIO/WR_AHMS=0.0 ! -RETURN -END SUBROUTINE SUBJ3 -! -SUBROUTINE SUBJ4 -! -!Indices 21 a 25 -! -! !ARO/O3=+K087*<ADD> - PJAC(:,21,1)=+TPK%K087(:)*PCONC(:,37) + PJAC(:,22,1)=+TPK%K087(:)*PCONC(:,38) ! !ARO/H2O2=0.0 ! !ARO/NO=0.0 ! !ARO/NO2=+0.10670*K083*<PHO>+K085*<ADD> - PJAC(:,21,4)=+0.10670*TPK%K083(:)*PCONC(:,36)+TPK%K085(:)*PCONC(:,37) + PJAC(:,22,4)=+0.10670*TPK%K083(:)*PCONC(:,37)+TPK%K085(:)*PCONC(:,38) ! !ARO/NO3=-K075*<ARO> - PJAC(:,21,5)=-TPK%K075(:)*PCONC(:,21) + PJAC(:,22,5)=-TPK%K075(:)*PCONC(:,22) ! !ARO/N2O5=0.0 ! @@ -10126,6 +10411,8 @@ SUBROUTINE SUBJ4 ! !ARO/NH3=0.0 ! +!ARO/DMS=0.0 +! !ARO/SO2=0.0 ! !ARO/SULF=0.0 @@ -10133,10 +10420,10 @@ SUBROUTINE SUBJ4 !ARO/CO=0.0 ! !ARO/OH=-K061*<ARO> - PJAC(:,21,14)=-TPK%K061(:)*PCONC(:,21) + PJAC(:,22,15)=-TPK%K061(:)*PCONC(:,22) ! !ARO/HO2=+1.06698*K084*<PHO> - PJAC(:,21,15)=+1.06698*TPK%K084(:)*PCONC(:,36) + PJAC(:,22,16)=+1.06698*TPK%K084(:)*PCONC(:,37) ! !ARO/CH4=0.0 ! @@ -10149,7 +10436,7 @@ SUBROUTINE SUBJ4 !ARO/BIO=0.0 ! !ARO/ARO=-K061*<OH>-K075*<NO3> - PJAC(:,21,21)=-TPK%K061(:)*PCONC(:,14)-TPK%K075(:)*PCONC(:,5) + PJAC(:,22,22)=-TPK%K061(:)*PCONC(:,15)-TPK%K075(:)*PCONC(:,5) ! !ARO/HCHO=0.0 ! @@ -10180,10 +10467,10 @@ SUBROUTINE SUBJ4 !ARO/BIOP=0.0 ! !ARO/PHO=+0.10670*K083*<NO2>+1.06698*K084*<HO2> - PJAC(:,21,36)=+0.10670*TPK%K083(:)*PCONC(:,4)+1.06698*TPK%K084(:)*PCONC(:,15) + PJAC(:,22,37)=+0.10670*TPK%K083(:)*PCONC(:,4)+1.06698*TPK%K084(:)*PCONC(:,16) ! !ARO/ADD=+K085*<NO2>+0.02*K086*<O2>+K087*<O3> - PJAC(:,21,37)=+TPK%K085(:)*PCONC(:,4)+0.02*TPK%K086(:)*TPK%O2(:)+TPK%K087(:)*P& + PJAC(:,22,38)=+TPK%K085(:)*PCONC(:,4)+0.02*TPK%K086(:)*TPK%O2(:)+TPK%K087(:)*P& &CONC(:,1) ! !ARO/AROP=0.0 @@ -10296,25 +10583,25 @@ SUBROUTINE SUBJ4 ! !HCHO/O3=+0.48290*K079*<ALKE>+0.90000*K080*<BIO>+0.00000*K081*<CARBO>+0.70*K082 !*<PAN> - PJAC(:,22,1)=+0.48290*TPK%K079(:)*PCONC(:,19)+0.90000*TPK%K080(:)*PCONC(:,20)+& -&0.00000*TPK%K081(:)*PCONC(:,25)+0.70*TPK%K082(:)*PCONC(:,27) + PJAC(:,23,1)=+0.48290*TPK%K079(:)*PCONC(:,20)+0.90000*TPK%K080(:)*PCONC(:,21)+& +&0.00000*TPK%K081(:)*PCONC(:,26)+0.70*TPK%K082(:)*PCONC(:,28) ! !HCHO/H2O2=0.0 ! !HCHO/NO=+K090*<MO2>+0.03002*K091*<ALKAP>+1.39870*K092*<ALKEP>+0.60600*K093*<BI !OP>+0.05848*K095*<CARBOP>+0.23419*K096*<OLN> - PJAC(:,22,3)=+TPK%K090(:)*PCONC(:,32)+0.03002*TPK%K091(:)*PCONC(:,33)+1.39870*& -&TPK%K092(:)*PCONC(:,34)+0.60600*TPK%K093(:)*PCONC(:,35)+0.05848*TPK%K095(:)*PC& -&ONC(:,39)+0.23419*TPK%K096(:)*PCONC(:,40) + PJAC(:,23,3)=+TPK%K090(:)*PCONC(:,33)+0.03002*TPK%K091(:)*PCONC(:,34)+1.39870*& +&TPK%K092(:)*PCONC(:,35)+0.60600*TPK%K093(:)*PCONC(:,36)+0.05848*TPK%K095(:)*PC& +&ONC(:,40)+0.23419*TPK%K096(:)*PCONC(:,41) ! !HCHO/NO2=0.0 ! !HCHO/NO3=-K072*<HCHO>+0.40*K078*<PAN>+K119*<MO2>+0.03142*K120*<ALKAP>+1.40909* !K121*<ALKEP>+0.68600*K122*<BIOP>+0.03175*K124*<CARBOP>+0.20740*K125*<OLN> - PJAC(:,22,5)=-TPK%K072(:)*PCONC(:,22)+0.40*TPK%K078(:)*PCONC(:,27)+TPK%K119(:)& -&*PCONC(:,32)+0.03142*TPK%K120(:)*PCONC(:,33)+1.40909*TPK%K121(:)*PCONC(:,34)+0& -&.68600*TPK%K122(:)*PCONC(:,35)+0.03175*TPK%K124(:)*PCONC(:,39)+0.20740*TPK%K12& -&5(:)*PCONC(:,40) + PJAC(:,23,5)=-TPK%K072(:)*PCONC(:,23)+0.40*TPK%K078(:)*PCONC(:,28)+TPK%K119(:)& +&*PCONC(:,33)+0.03142*TPK%K120(:)*PCONC(:,34)+1.40909*TPK%K121(:)*PCONC(:,35)+0& +&.68600*TPK%K122(:)*PCONC(:,36)+0.03175*TPK%K124(:)*PCONC(:,40)+0.20740*TPK%K12& +&5(:)*PCONC(:,41) ! !HCHO/N2O5=0.0 ! @@ -10326,6 +10613,8 @@ SUBROUTINE SUBJ4 ! !HCHO/NH3=0.0 ! +!HCHO/DMS=0.0 +! !HCHO/SO2=0.0 ! !HCHO/SULF=0.0 @@ -10334,9 +10623,9 @@ SUBROUTINE SUBJ4 ! !HCHO/OH=+0.00140*K058*<ALKA>-K062*<HCHO>+0.00000*K065*<CARBO>+0.35*K068*<OP1>+ !0.02915*K069*<OP2>+0.57839*K070*<PAN> - PJAC(:,22,14)=+0.00140*TPK%K058(:)*PCONC(:,18)-TPK%K062(:)*PCONC(:,22)+0.00000& -&*TPK%K065(:)*PCONC(:,25)+0.35*TPK%K068(:)*PCONC(:,28)+0.02915*TPK%K069(:)*PCON& -&C(:,29)+0.57839*TPK%K070(:)*PCONC(:,27) + PJAC(:,23,15)=+0.00140*TPK%K058(:)*PCONC(:,19)-TPK%K062(:)*PCONC(:,23)+0.00000& +&*TPK%K065(:)*PCONC(:,26)+0.35*TPK%K068(:)*PCONC(:,29)+0.02915*TPK%K069(:)*PCON& +&C(:,30)+0.57839*TPK%K070(:)*PCONC(:,28) ! !HCHO/HO2=0.0 ! @@ -10345,18 +10634,18 @@ SUBROUTINE SUBJ4 !HCHO/ETH=0.0 ! !HCHO/ALKA=+0.00140*K058*<OH> - PJAC(:,22,18)=+0.00140*TPK%K058(:)*PCONC(:,14) + PJAC(:,23,19)=+0.00140*TPK%K058(:)*PCONC(:,15) ! !HCHO/ALKE=+0.48290*K079*<O3> - PJAC(:,22,19)=+0.48290*TPK%K079(:)*PCONC(:,1) + PJAC(:,23,20)=+0.48290*TPK%K079(:)*PCONC(:,1) ! !HCHO/BIO=+0.05*K054*<O3P>+0.90000*K080*<O3> - PJAC(:,22,20)=+0.05*TPK%K054(:)*TPK%O3P(:)+0.90000*TPK%K080(:)*PCONC(:,1) + PJAC(:,23,21)=+0.05*TPK%K054(:)*TPK%O3P(:)+0.90000*TPK%K080(:)*PCONC(:,1) ! !HCHO/ARO=0.0 ! !HCHO/HCHO=-K010-K011-K062*<OH>-K072*<NO3>-KTC16-KTR16 - PJAC(:,22,22)=-TPK%K010(:)-TPK%K011(:)-TPK%K062(:)*PCONC(:,14)-TPK%K072(:)*PCO& + PJAC(:,23,23)=-TPK%K010(:)-TPK%K011(:)-TPK%K062(:)*PCONC(:,15)-TPK%K072(:)*PCO& &NC(:,5)-TPK%KTC16(:)-TPK%KTR16(:) ! !HCHO/ALD=0.0 @@ -10364,20 +10653,20 @@ SUBROUTINE SUBJ4 !HCHO/KET=0.0 ! !HCHO/CARBO=+0.06517*K016+0.00000*K065*<OH>+0.00000*K081*<O3> - PJAC(:,22,25)=+0.06517*TPK%K016(:)+0.00000*TPK%K065(:)*PCONC(:,14)+0.00000*TPK& + PJAC(:,23,26)=+0.06517*TPK%K016(:)+0.00000*TPK%K065(:)*PCONC(:,15)+0.00000*TPK& &%K081(:)*PCONC(:,1) ! !HCHO/ONIT=0.0 ! !HCHO/PAN=+0.57839*K070*<OH>+0.40*K078*<NO3>+0.70*K082*<O3> - PJAC(:,22,27)=+0.57839*TPK%K070(:)*PCONC(:,14)+0.40*TPK%K078(:)*PCONC(:,5)+0.7& + PJAC(:,23,28)=+0.57839*TPK%K070(:)*PCONC(:,15)+0.40*TPK%K078(:)*PCONC(:,5)+0.7& &0*TPK%K082(:)*PCONC(:,1) ! !HCHO/OP1=+K013+0.35*K068*<OH> - PJAC(:,22,28)=+TPK%K013(:)+0.35*TPK%K068(:)*PCONC(:,14) + PJAC(:,23,29)=+TPK%K013(:)+0.35*TPK%K068(:)*PCONC(:,15) ! !HCHO/OP2=+0.02915*K069*<OH> - PJAC(:,22,29)=+0.02915*TPK%K069(:)*PCONC(:,14) + PJAC(:,23,30)=+0.02915*TPK%K069(:)*PCONC(:,15) ! !HCHO/ORA1=0.0 ! @@ -10386,50 +10675,50 @@ SUBROUTINE SUBJ4 !HCHO/MO2=+K090*<NO>+1.33*K104*<MO2>+1.33*K104*<MO2>+0.80556*K105*<ALKAP>+1.428 !94*K106*<ALKEP>+1.09000*K107*<BIOP>+K108*<AROP>+0.95723*K109*<CARBOP>+0.88625* !K110*<OLN>+K119*<NO3>+K127*<XO2> - PJAC(:,22,32)=+TPK%K090(:)*PCONC(:,3)+1.33*TPK%K104(:)*PCONC(:,32)+1.33*TPK%K1& -&04(:)*PCONC(:,32)+0.80556*TPK%K105(:)*PCONC(:,33)+1.42894*TPK%K106(:)*PCONC(:,& -&34)+1.09000*TPK%K107(:)*PCONC(:,35)+TPK%K108(:)*PCONC(:,38)+0.95723*TPK%K109(:& -&)*PCONC(:,39)+0.88625*TPK%K110(:)*PCONC(:,40)+TPK%K119(:)*PCONC(:,5)+TPK%K127(& -&:)*PCONC(:,41) + PJAC(:,23,33)=+TPK%K090(:)*PCONC(:,3)+1.33*TPK%K104(:)*PCONC(:,33)+1.33*TPK%K1& +&04(:)*PCONC(:,33)+0.80556*TPK%K105(:)*PCONC(:,34)+1.42894*TPK%K106(:)*PCONC(:,& +&35)+1.09000*TPK%K107(:)*PCONC(:,36)+TPK%K108(:)*PCONC(:,39)+0.95723*TPK%K109(:& +&)*PCONC(:,40)+0.88625*TPK%K110(:)*PCONC(:,41)+TPK%K119(:)*PCONC(:,5)+TPK%K127(& +&:)*PCONC(:,42) ! !HCHO/ALKAP=+0.03002*K091*<NO>+0.80556*K105*<MO2>+0.07600*K111*<CARBOP>+0.03142 !*K120*<NO3> - PJAC(:,22,33)=+0.03002*TPK%K091(:)*PCONC(:,3)+0.80556*TPK%K105(:)*PCONC(:,32)+& -&0.07600*TPK%K111(:)*PCONC(:,39)+0.03142*TPK%K120(:)*PCONC(:,5) + PJAC(:,23,34)=+0.03002*TPK%K091(:)*PCONC(:,3)+0.80556*TPK%K105(:)*PCONC(:,33)+& +&0.07600*TPK%K111(:)*PCONC(:,40)+0.03142*TPK%K120(:)*PCONC(:,5) ! !HCHO/ALKEP=+1.39870*K092*<NO>+1.42894*K106*<MO2>+0.68192*K112*<CARBOP>+1.40909 !*K121*<NO3> - PJAC(:,22,34)=+1.39870*TPK%K092(:)*PCONC(:,3)+1.42894*TPK%K106(:)*PCONC(:,32)+& -&0.68192*TPK%K112(:)*PCONC(:,39)+1.40909*TPK%K121(:)*PCONC(:,5) + PJAC(:,23,35)=+1.39870*TPK%K092(:)*PCONC(:,3)+1.42894*TPK%K106(:)*PCONC(:,33)+& +&0.68192*TPK%K112(:)*PCONC(:,40)+1.40909*TPK%K121(:)*PCONC(:,5) ! !HCHO/BIOP=+0.60600*K093*<NO>+1.09000*K107*<MO2>+0.34000*K113*<CARBOP>+0.68600* !K122*<NO3> - PJAC(:,22,35)=+0.60600*TPK%K093(:)*PCONC(:,3)+1.09000*TPK%K107(:)*PCONC(:,32)+& -&0.34000*TPK%K113(:)*PCONC(:,39)+0.68600*TPK%K122(:)*PCONC(:,5) + PJAC(:,23,36)=+0.60600*TPK%K093(:)*PCONC(:,3)+1.09000*TPK%K107(:)*PCONC(:,33)+& +&0.34000*TPK%K113(:)*PCONC(:,40)+0.68600*TPK%K122(:)*PCONC(:,5) ! !HCHO/PHO=0.0 ! !HCHO/ADD=0.0 ! !HCHO/AROP=+K108*<MO2> - PJAC(:,22,38)=+TPK%K108(:)*PCONC(:,32) + PJAC(:,23,39)=+TPK%K108(:)*PCONC(:,33) ! !HCHO/CARBOP=+0.05848*K095*<NO>+0.95723*K109*<MO2>+0.07600*K111*<ALKAP>+0.68192 !*K112*<ALKEP>+0.34000*K113*<BIOP>+0.03432*K115*<CARBOP>+0.03432*K115*<CARBOP>+ !0.13414*K116*<OLN>+0.03175*K124*<NO3> - PJAC(:,22,39)=+0.05848*TPK%K095(:)*PCONC(:,3)+0.95723*TPK%K109(:)*PCONC(:,32)+& -&0.07600*TPK%K111(:)*PCONC(:,33)+0.68192*TPK%K112(:)*PCONC(:,34)+0.34000*TPK%K1& -&13(:)*PCONC(:,35)+0.03432*TPK%K115(:)*PCONC(:,39)+0.03432*TPK%K115(:)*PCONC(:,& -&39)+0.13414*TPK%K116(:)*PCONC(:,40)+0.03175*TPK%K124(:)*PCONC(:,5) + PJAC(:,23,40)=+0.05848*TPK%K095(:)*PCONC(:,3)+0.95723*TPK%K109(:)*PCONC(:,33)+& +&0.07600*TPK%K111(:)*PCONC(:,34)+0.68192*TPK%K112(:)*PCONC(:,35)+0.34000*TPK%K1& +&13(:)*PCONC(:,36)+0.03432*TPK%K115(:)*PCONC(:,40)+0.03432*TPK%K115(:)*PCONC(:,& +&40)+0.13414*TPK%K116(:)*PCONC(:,41)+0.03175*TPK%K124(:)*PCONC(:,5) ! !HCHO/OLN=+0.23419*K096*<NO>+0.88625*K110*<MO2>+0.13414*K116*<CARBOP>+0.00000*K !118*<OLN>+0.00000*K118*<OLN>+0.20740*K125*<NO3> - PJAC(:,22,40)=+0.23419*TPK%K096(:)*PCONC(:,3)+0.88625*TPK%K110(:)*PCONC(:,32)+& -&0.13414*TPK%K116(:)*PCONC(:,39)+0.00000*TPK%K118(:)*PCONC(:,40)+0.00000*TPK%K1& -&18(:)*PCONC(:,40)+0.20740*TPK%K125(:)*PCONC(:,5) + PJAC(:,23,41)=+0.23419*TPK%K096(:)*PCONC(:,3)+0.88625*TPK%K110(:)*PCONC(:,33)+& +&0.13414*TPK%K116(:)*PCONC(:,40)+0.00000*TPK%K118(:)*PCONC(:,41)+0.00000*TPK%K1& +&18(:)*PCONC(:,41)+0.20740*TPK%K125(:)*PCONC(:,5) ! !HCHO/XO2=+K127*<MO2> - PJAC(:,22,41)=+TPK%K127(:)*PCONC(:,32) + PJAC(:,23,42)=+TPK%K127(:)*PCONC(:,33) ! !HCHO/WC_O3=0.0 ! @@ -10462,7 +10751,7 @@ SUBROUTINE SUBJ4 !HCHO/WC_SULF=0.0 ! !HCHO/WC_HCHO=+KTC36 - PJAC(:,22,57)=+TPK%KTC36(:) + PJAC(:,23,58)=+TPK%KTC36(:) ! !HCHO/WC_ORA1=0.0 ! @@ -10513,7 +10802,7 @@ SUBROUTINE SUBJ4 !HCHO/WR_SULF=0.0 ! !HCHO/WR_HCHO=+KTR36 - PJAC(:,22,82)=+TPK%KTR36(:) + PJAC(:,23,83)=+TPK%KTR36(:) ! !HCHO/WR_ORA1=0.0 ! @@ -10534,24 +10823,24 @@ SUBROUTINE SUBJ4 !HCHO/WR_AHMS=0.0 ! !ALD/O3=+0.51468*K079*<ALKE>+0.00000*K080*<BIO>+0.15692*K081*<CARBO> - PJAC(:,23,1)=+0.51468*TPK%K079(:)*PCONC(:,19)+0.00000*TPK%K080(:)*PCONC(:,20)+& -&0.15692*TPK%K081(:)*PCONC(:,25) + PJAC(:,24,1)=+0.51468*TPK%K079(:)*PCONC(:,20)+0.00000*TPK%K080(:)*PCONC(:,21)+& +&0.15692*TPK%K081(:)*PCONC(:,26) ! !ALD/H2O2=0.0 ! !ALD/NO=+0.33144*K091*<ALKAP>+0.42125*K092*<ALKEP>+0.00000*K093*<BIOP>+0.07368* !K095*<CARBOP>+1.01182*K096*<OLN> - PJAC(:,23,3)=+0.33144*TPK%K091(:)*PCONC(:,33)+0.42125*TPK%K092(:)*PCONC(:,34)+& -&0.00000*TPK%K093(:)*PCONC(:,35)+0.07368*TPK%K095(:)*PCONC(:,39)+1.01182*TPK%K0& -&96(:)*PCONC(:,40) + PJAC(:,24,3)=+0.33144*TPK%K091(:)*PCONC(:,34)+0.42125*TPK%K092(:)*PCONC(:,35)+& +&0.00000*TPK%K093(:)*PCONC(:,36)+0.07368*TPK%K095(:)*PCONC(:,40)+1.01182*TPK%K0& +&96(:)*PCONC(:,41) ! !ALD/NO2=0.0 ! !ALD/NO3=-K073*<ALD>+0.05265*K074*<CARBO>+0.33743*K120*<ALKAP>+0.43039*K121*<AL !KEP>+0.00000*K122*<BIOP>+0.02936*K124*<CARBOP>+0.91850*K125*<OLN> - PJAC(:,23,5)=-TPK%K073(:)*PCONC(:,23)+0.05265*TPK%K074(:)*PCONC(:,25)+0.33743*& -&TPK%K120(:)*PCONC(:,33)+0.43039*TPK%K121(:)*PCONC(:,34)+0.00000*TPK%K122(:)*PC& -&ONC(:,35)+0.02936*TPK%K124(:)*PCONC(:,39)+0.91850*TPK%K125(:)*PCONC(:,40) + PJAC(:,24,5)=-TPK%K073(:)*PCONC(:,24)+0.05265*TPK%K074(:)*PCONC(:,26)+0.33743*& +&TPK%K120(:)*PCONC(:,34)+0.43039*TPK%K121(:)*PCONC(:,35)+0.00000*TPK%K122(:)*PC& +&ONC(:,36)+0.02936*TPK%K124(:)*PCONC(:,40)+0.91850*TPK%K125(:)*PCONC(:,41) ! !ALD/N2O5=0.0 ! @@ -10563,6 +10852,8 @@ SUBROUTINE SUBJ4 ! !ALD/NH3=0.0 ! +!ALD/DMS=0.0 +! !ALD/SO2=0.0 ! !ALD/SULF=0.0 @@ -10570,8 +10861,8 @@ SUBROUTINE SUBJ4 !ALD/CO=0.0 ! !ALD/OH=+0.08173*K058*<ALKA>-K063*<ALD>+0.06253*K065*<CARBO>+0.07335*K069*<OP2> - PJAC(:,23,14)=+0.08173*TPK%K058(:)*PCONC(:,18)-TPK%K063(:)*PCONC(:,23)+0.06253& -&*TPK%K065(:)*PCONC(:,25)+0.07335*TPK%K069(:)*PCONC(:,29) + PJAC(:,24,15)=+0.08173*TPK%K058(:)*PCONC(:,19)-TPK%K063(:)*PCONC(:,24)+0.06253& +&*TPK%K065(:)*PCONC(:,26)+0.07335*TPK%K069(:)*PCONC(:,30) ! !ALD/HO2=0.0 ! @@ -10580,36 +10871,36 @@ SUBROUTINE SUBJ4 !ALD/ETH=0.0 ! !ALD/ALKA=+0.08173*K058*<OH> - PJAC(:,23,18)=+0.08173*TPK%K058(:)*PCONC(:,14) + PJAC(:,24,19)=+0.08173*TPK%K058(:)*PCONC(:,15) ! !ALD/ALKE=+0.51468*K079*<O3> - PJAC(:,23,19)=+0.51468*TPK%K079(:)*PCONC(:,1) + PJAC(:,24,20)=+0.51468*TPK%K079(:)*PCONC(:,1) ! !ALD/BIO=+0.00000*K080*<O3> - PJAC(:,23,20)=+0.00000*TPK%K080(:)*PCONC(:,1) + PJAC(:,24,21)=+0.00000*TPK%K080(:)*PCONC(:,1) ! !ALD/ARO=0.0 ! !ALD/HCHO=0.0 ! !ALD/ALD=-K012-K063*<OH>-K073*<NO3> - PJAC(:,23,23)=-TPK%K012(:)-TPK%K063(:)*PCONC(:,14)-TPK%K073(:)*PCONC(:,5) + PJAC(:,24,24)=-TPK%K012(:)-TPK%K063(:)*PCONC(:,15)-TPK%K073(:)*PCONC(:,5) ! !ALD/KET=0.0 ! !ALD/CARBO=+K055*<O3P>+0.06253*K065*<OH>+0.05265*K074*<NO3>+0.15692*K081*<O3> - PJAC(:,23,25)=+TPK%K055(:)*TPK%O3P(:)+0.06253*TPK%K065(:)*PCONC(:,14)+0.05265*& + PJAC(:,24,26)=+TPK%K055(:)*TPK%O3P(:)+0.06253*TPK%K065(:)*PCONC(:,15)+0.05265*& &TPK%K074(:)*PCONC(:,5)+0.15692*TPK%K081(:)*PCONC(:,1) ! !ALD/ONIT=+0.20*K017 - PJAC(:,23,26)=+0.20*TPK%K017(:) + PJAC(:,24,27)=+0.20*TPK%K017(:) ! !ALD/PAN=0.0 ! !ALD/OP1=0.0 ! !ALD/OP2=+0.96205*K014+0.07335*K069*<OH> - PJAC(:,23,29)=+0.96205*TPK%K014(:)+0.07335*TPK%K069(:)*PCONC(:,14) + PJAC(:,24,30)=+0.96205*TPK%K014(:)+0.07335*TPK%K069(:)*PCONC(:,15) ! !ALD/ORA1=0.0 ! @@ -10617,24 +10908,24 @@ SUBROUTINE SUBJ4 ! !ALD/MO2=+0.56070*K105*<ALKAP>+0.46413*K106*<ALKEP>+0.00000*K107*<BIOP>+0.08295 !*K109*<CARBOP>+0.41524*K110*<OLN> - PJAC(:,23,32)=+0.56070*TPK%K105(:)*PCONC(:,33)+0.46413*TPK%K106(:)*PCONC(:,34)& -&+0.00000*TPK%K107(:)*PCONC(:,35)+0.08295*TPK%K109(:)*PCONC(:,39)+0.41524*TPK%K& -&110(:)*PCONC(:,40) + PJAC(:,24,33)=+0.56070*TPK%K105(:)*PCONC(:,34)+0.46413*TPK%K106(:)*PCONC(:,35)& +&+0.00000*TPK%K107(:)*PCONC(:,36)+0.08295*TPK%K109(:)*PCONC(:,40)+0.41524*TPK%K& +&110(:)*PCONC(:,41) ! !ALD/ALKAP=+0.33144*K091*<NO>+0.56070*K105*<MO2>+0.71461*K111*<CARBOP>+0.33743* !K120*<NO3> - PJAC(:,23,33)=+0.33144*TPK%K091(:)*PCONC(:,3)+0.56070*TPK%K105(:)*PCONC(:,32)+& -&0.71461*TPK%K111(:)*PCONC(:,39)+0.33743*TPK%K120(:)*PCONC(:,5) + PJAC(:,24,34)=+0.33144*TPK%K091(:)*PCONC(:,3)+0.56070*TPK%K105(:)*PCONC(:,33)+& +&0.71461*TPK%K111(:)*PCONC(:,40)+0.33743*TPK%K120(:)*PCONC(:,5) ! !ALD/ALKEP=+0.42125*K092*<NO>+0.46413*K106*<MO2>+0.68374*K112*<CARBOP>+0.43039* !K121*<NO3> - PJAC(:,23,34)=+0.42125*TPK%K092(:)*PCONC(:,3)+0.46413*TPK%K106(:)*PCONC(:,32)+& -&0.68374*TPK%K112(:)*PCONC(:,39)+0.43039*TPK%K121(:)*PCONC(:,5) + PJAC(:,24,35)=+0.42125*TPK%K092(:)*PCONC(:,3)+0.46413*TPK%K106(:)*PCONC(:,33)+& +&0.68374*TPK%K112(:)*PCONC(:,40)+0.43039*TPK%K121(:)*PCONC(:,5) ! !ALD/BIOP=+0.00000*K093*<NO>+0.00000*K107*<MO2>+0.00000*K113*<CARBOP>+0.00000*K !122*<NO3> - PJAC(:,23,35)=+0.00000*TPK%K093(:)*PCONC(:,3)+0.00000*TPK%K107(:)*PCONC(:,32)+& -&0.00000*TPK%K113(:)*PCONC(:,39)+0.00000*TPK%K122(:)*PCONC(:,5) + PJAC(:,24,36)=+0.00000*TPK%K093(:)*PCONC(:,3)+0.00000*TPK%K107(:)*PCONC(:,33)+& +&0.00000*TPK%K113(:)*PCONC(:,40)+0.00000*TPK%K122(:)*PCONC(:,5) ! !ALD/PHO=0.0 ! @@ -10645,16 +10936,16 @@ SUBROUTINE SUBJ4 !ALD/CARBOP=+0.07368*K095*<NO>+0.08295*K109*<MO2>+0.71461*K111*<ALKAP>+0.68374* !K112*<ALKEP>+0.00000*K113*<BIOP>+0.06969*K115*<CARBOP>+0.06969*K115*<CARBOP>+0 !.42122*K116*<OLN>+0.02936*K124*<NO3> - PJAC(:,23,39)=+0.07368*TPK%K095(:)*PCONC(:,3)+0.08295*TPK%K109(:)*PCONC(:,32)+& -&0.71461*TPK%K111(:)*PCONC(:,33)+0.68374*TPK%K112(:)*PCONC(:,34)+0.00000*TPK%K1& -&13(:)*PCONC(:,35)+0.06969*TPK%K115(:)*PCONC(:,39)+0.06969*TPK%K115(:)*PCONC(:,& -&39)+0.42122*TPK%K116(:)*PCONC(:,40)+0.02936*TPK%K124(:)*PCONC(:,5) + PJAC(:,24,40)=+0.07368*TPK%K095(:)*PCONC(:,3)+0.08295*TPK%K109(:)*PCONC(:,33)+& +&0.71461*TPK%K111(:)*PCONC(:,34)+0.68374*TPK%K112(:)*PCONC(:,35)+0.00000*TPK%K1& +&13(:)*PCONC(:,36)+0.06969*TPK%K115(:)*PCONC(:,40)+0.06969*TPK%K115(:)*PCONC(:,& +&40)+0.42122*TPK%K116(:)*PCONC(:,41)+0.02936*TPK%K124(:)*PCONC(:,5) ! !ALD/OLN=+1.01182*K096*<NO>+0.41524*K110*<MO2>+0.42122*K116*<CARBOP>+0.00000*K1 !18*<OLN>+0.00000*K118*<OLN>+0.91850*K125*<NO3> - PJAC(:,23,40)=+1.01182*TPK%K096(:)*PCONC(:,3)+0.41524*TPK%K110(:)*PCONC(:,32)+& -&0.42122*TPK%K116(:)*PCONC(:,39)+0.00000*TPK%K118(:)*PCONC(:,40)+0.00000*TPK%K1& -&18(:)*PCONC(:,40)+0.91850*TPK%K125(:)*PCONC(:,5) + PJAC(:,24,41)=+1.01182*TPK%K096(:)*PCONC(:,3)+0.41524*TPK%K110(:)*PCONC(:,33)+& +&0.42122*TPK%K116(:)*PCONC(:,40)+0.00000*TPK%K118(:)*PCONC(:,41)+0.00000*TPK%K1& +&18(:)*PCONC(:,41)+0.91850*TPK%K125(:)*PCONC(:,5) ! !ALD/XO2=0.0 ! @@ -10759,22 +11050,22 @@ SUBROUTINE SUBJ4 !ALD/WR_AHMS=0.0 ! !KET/O3=+0.07377*K079*<ALKE>+0.00000*K080*<BIO> - PJAC(:,24,1)=+0.07377*TPK%K079(:)*PCONC(:,19)+0.00000*TPK%K080(:)*PCONC(:,20) + PJAC(:,25,1)=+0.07377*TPK%K079(:)*PCONC(:,20)+0.00000*TPK%K080(:)*PCONC(:,21) ! !KET/H2O2=0.0 ! !KET/NO=+0.54531*K091*<ALKAP>+0.05220*K092*<ALKEP>+0.00000*K093*<BIOP>+0.37862* !K096*<OLN> - PJAC(:,24,3)=+0.54531*TPK%K091(:)*PCONC(:,33)+0.05220*TPK%K092(:)*PCONC(:,34)+& -&0.00000*TPK%K093(:)*PCONC(:,35)+0.37862*TPK%K096(:)*PCONC(:,40) + PJAC(:,25,3)=+0.54531*TPK%K091(:)*PCONC(:,34)+0.05220*TPK%K092(:)*PCONC(:,35)+& +&0.00000*TPK%K093(:)*PCONC(:,36)+0.37862*TPK%K096(:)*PCONC(:,41) ! !KET/NO2=0.0 ! !KET/NO3=+0.00632*K074*<CARBO>+0.62978*K120*<ALKAP>+0.02051*K121*<ALKEP>+0.0000 !0*K122*<BIOP>+0.34740*K125*<OLN> - PJAC(:,24,5)=+0.00632*TPK%K074(:)*PCONC(:,25)+0.62978*TPK%K120(:)*PCONC(:,33)+& -&0.02051*TPK%K121(:)*PCONC(:,34)+0.00000*TPK%K122(:)*PCONC(:,35)+0.34740*TPK%K1& -&25(:)*PCONC(:,40) + PJAC(:,25,5)=+0.00632*TPK%K074(:)*PCONC(:,26)+0.62978*TPK%K120(:)*PCONC(:,34)+& +&0.02051*TPK%K121(:)*PCONC(:,35)+0.00000*TPK%K122(:)*PCONC(:,36)+0.34740*TPK%K1& +&25(:)*PCONC(:,41) ! !KET/N2O5=0.0 ! @@ -10786,6 +11077,8 @@ SUBROUTINE SUBJ4 ! !KET/NH3=0.0 ! +!KET/DMS=0.0 +! !KET/SO2=0.0 ! !KET/SULF=0.0 @@ -10793,8 +11086,8 @@ SUBROUTINE SUBJ4 !KET/CO=0.0 ! !KET/OH=+0.03498*K058*<ALKA>-K064*<KET>+0.00853*K065*<CARBO>+0.37591*K069*<OP2> - PJAC(:,24,14)=+0.03498*TPK%K058(:)*PCONC(:,18)-TPK%K064(:)*PCONC(:,24)+0.00853& -&*TPK%K065(:)*PCONC(:,25)+0.37591*TPK%K069(:)*PCONC(:,29) + PJAC(:,25,15)=+0.03498*TPK%K058(:)*PCONC(:,19)-TPK%K064(:)*PCONC(:,25)+0.00853& +&*TPK%K065(:)*PCONC(:,26)+0.37591*TPK%K069(:)*PCONC(:,30) ! !KET/HO2=0.0 ! @@ -10803,13 +11096,13 @@ SUBROUTINE SUBJ4 !KET/ETH=0.0 ! !KET/ALKA=+0.03498*K058*<OH> - PJAC(:,24,18)=+0.03498*TPK%K058(:)*PCONC(:,14) + PJAC(:,25,19)=+0.03498*TPK%K058(:)*PCONC(:,15) ! !KET/ALKE=+0.07377*K079*<O3> - PJAC(:,24,19)=+0.07377*TPK%K079(:)*PCONC(:,1) + PJAC(:,25,20)=+0.07377*TPK%K079(:)*PCONC(:,1) ! !KET/BIO=+0.00000*K080*<O3> - PJAC(:,24,20)=+0.00000*TPK%K080(:)*PCONC(:,1) + PJAC(:,25,21)=+0.00000*TPK%K080(:)*PCONC(:,1) ! !KET/ARO=0.0 ! @@ -10818,20 +11111,20 @@ SUBROUTINE SUBJ4 !KET/ALD=0.0 ! !KET/KET=-K015-K064*<OH> - PJAC(:,24,24)=-TPK%K015(:)-TPK%K064(:)*PCONC(:,14) + PJAC(:,25,25)=-TPK%K015(:)-TPK%K064(:)*PCONC(:,15) ! !KET/CARBO=+0.00853*K065*<OH>+0.00632*K074*<NO3> - PJAC(:,24,25)=+0.00853*TPK%K065(:)*PCONC(:,14)+0.00632*TPK%K074(:)*PCONC(:,5) + PJAC(:,25,26)=+0.00853*TPK%K065(:)*PCONC(:,15)+0.00632*TPK%K074(:)*PCONC(:,5) ! !KET/ONIT=+0.80*K017 - PJAC(:,24,26)=+0.80*TPK%K017(:) + PJAC(:,25,27)=+0.80*TPK%K017(:) ! !KET/PAN=0.0 ! !KET/OP1=0.0 ! !KET/OP2=+0.37591*K069*<OH> - PJAC(:,24,29)=+0.37591*TPK%K069(:)*PCONC(:,14) + PJAC(:,25,30)=+0.37591*TPK%K069(:)*PCONC(:,15) ! !KET/ORA1=0.0 ! @@ -10839,23 +11132,23 @@ SUBROUTINE SUBJ4 ! !KET/MO2=+0.09673*K105*<ALKAP>+0.03814*K106*<ALKEP>+0.00000*K107*<BIOP>+0.09667 !*K110*<OLN> - PJAC(:,24,32)=+0.09673*TPK%K105(:)*PCONC(:,33)+0.03814*TPK%K106(:)*PCONC(:,34)& -&+0.00000*TPK%K107(:)*PCONC(:,35)+0.09667*TPK%K110(:)*PCONC(:,40) + PJAC(:,25,33)=+0.09673*TPK%K105(:)*PCONC(:,34)+0.03814*TPK%K106(:)*PCONC(:,35)& +&+0.00000*TPK%K107(:)*PCONC(:,36)+0.09667*TPK%K110(:)*PCONC(:,41) ! !KET/ALKAP=+0.54531*K091*<NO>+0.09673*K105*<MO2>+0.18819*K111*<CARBOP>+0.62978* !K120*<NO3> - PJAC(:,24,33)=+0.54531*TPK%K091(:)*PCONC(:,3)+0.09673*TPK%K105(:)*PCONC(:,32)+& -&0.18819*TPK%K111(:)*PCONC(:,39)+0.62978*TPK%K120(:)*PCONC(:,5) + PJAC(:,25,34)=+0.54531*TPK%K091(:)*PCONC(:,3)+0.09673*TPK%K105(:)*PCONC(:,33)+& +&0.18819*TPK%K111(:)*PCONC(:,40)+0.62978*TPK%K120(:)*PCONC(:,5) ! !KET/ALKEP=+0.05220*K092*<NO>+0.03814*K106*<MO2>+0.06579*K112*<CARBOP>+0.02051* !K121*<NO3> - PJAC(:,24,34)=+0.05220*TPK%K092(:)*PCONC(:,3)+0.03814*TPK%K106(:)*PCONC(:,32)+& -&0.06579*TPK%K112(:)*PCONC(:,39)+0.02051*TPK%K121(:)*PCONC(:,5) + PJAC(:,25,35)=+0.05220*TPK%K092(:)*PCONC(:,3)+0.03814*TPK%K106(:)*PCONC(:,33)+& +&0.06579*TPK%K112(:)*PCONC(:,40)+0.02051*TPK%K121(:)*PCONC(:,5) ! !KET/BIOP=+0.00000*K093*<NO>+0.00000*K107*<MO2>+0.00000*K113*<CARBOP>+0.00000*K !122*<NO3> - PJAC(:,24,35)=+0.00000*TPK%K093(:)*PCONC(:,3)+0.00000*TPK%K107(:)*PCONC(:,32)+& -&0.00000*TPK%K113(:)*PCONC(:,39)+0.00000*TPK%K122(:)*PCONC(:,5) + PJAC(:,25,36)=+0.00000*TPK%K093(:)*PCONC(:,3)+0.00000*TPK%K107(:)*PCONC(:,33)+& +&0.00000*TPK%K113(:)*PCONC(:,40)+0.00000*TPK%K122(:)*PCONC(:,5) ! !KET/PHO=0.0 ! @@ -10865,15 +11158,15 @@ SUBROUTINE SUBJ4 ! !KET/CARBOP=+0.18819*K111*<ALKAP>+0.06579*K112*<ALKEP>+0.00000*K113*<BIOP>+0.02 !190*K115*<CARBOP>+0.02190*K115*<CARBOP>+0.10822*K116*<OLN> - PJAC(:,24,39)=+0.18819*TPK%K111(:)*PCONC(:,33)+0.06579*TPK%K112(:)*PCONC(:,34)& -&+0.00000*TPK%K113(:)*PCONC(:,35)+0.02190*TPK%K115(:)*PCONC(:,39)+0.02190*TPK%K& -&115(:)*PCONC(:,39)+0.10822*TPK%K116(:)*PCONC(:,40) + PJAC(:,25,40)=+0.18819*TPK%K111(:)*PCONC(:,34)+0.06579*TPK%K112(:)*PCONC(:,35)& +&+0.00000*TPK%K113(:)*PCONC(:,36)+0.02190*TPK%K115(:)*PCONC(:,40)+0.02190*TPK%K& +&115(:)*PCONC(:,40)+0.10822*TPK%K116(:)*PCONC(:,41) ! !KET/OLN=+0.37862*K096*<NO>+0.09667*K110*<MO2>+0.10822*K116*<CARBOP>+0.00000*K1 !18*<OLN>+0.00000*K118*<OLN>+0.34740*K125*<NO3> - PJAC(:,24,40)=+0.37862*TPK%K096(:)*PCONC(:,3)+0.09667*TPK%K110(:)*PCONC(:,32)+& -&0.10822*TPK%K116(:)*PCONC(:,39)+0.00000*TPK%K118(:)*PCONC(:,40)+0.00000*TPK%K1& -&18(:)*PCONC(:,40)+0.34740*TPK%K125(:)*PCONC(:,5) + PJAC(:,25,41)=+0.37862*TPK%K096(:)*PCONC(:,3)+0.09667*TPK%K110(:)*PCONC(:,33)+& +&0.10822*TPK%K116(:)*PCONC(:,40)+0.00000*TPK%K118(:)*PCONC(:,41)+0.00000*TPK%K1& +&18(:)*PCONC(:,41)+0.34740*TPK%K125(:)*PCONC(:,5) ! !KET/XO2=0.0 ! @@ -10977,27 +11270,35 @@ SUBROUTINE SUBJ4 ! !KET/WR_AHMS=0.0 ! +RETURN +END SUBROUTINE SUBJ4 +! +SUBROUTINE SUBJ5 +! +!Indices 26 a 30 +! +! !CARBO/O3=+0.00000*K079*<ALKE>+0.39754*K080*<BIO>+1.07583*K081*<CARBO>-K081*<CA !RBO> - PJAC(:,25,1)=+0.00000*TPK%K079(:)*PCONC(:,19)+0.39754*TPK%K080(:)*PCONC(:,20)+& -&1.07583*TPK%K081(:)*PCONC(:,25)-TPK%K081(:)*PCONC(:,25) + PJAC(:,26,1)=+0.00000*TPK%K079(:)*PCONC(:,20)+0.39754*TPK%K080(:)*PCONC(:,21)+& +&1.07583*TPK%K081(:)*PCONC(:,26)-TPK%K081(:)*PCONC(:,26) ! !CARBO/H2O2=0.0 ! !CARBO/NO=+0.03407*K091*<ALKAP>+0.45463*K093*<BIOP>+2.06993*K094*<AROP>+0.08670 !*K095*<CARBOP> - PJAC(:,25,3)=+0.03407*TPK%K091(:)*PCONC(:,33)+0.45463*TPK%K093(:)*PCONC(:,35)+& -&2.06993*TPK%K094(:)*PCONC(:,38)+0.08670*TPK%K095(:)*PCONC(:,39) + PJAC(:,26,3)=+0.03407*TPK%K091(:)*PCONC(:,34)+0.45463*TPK%K093(:)*PCONC(:,36)+& +&2.06993*TPK%K094(:)*PCONC(:,39)+0.08670*TPK%K095(:)*PCONC(:,40) ! !CARBO/NO2=0.0 ! !CARBO/NO3=+0.10530*K074*<CARBO>-K074*<CARBO>+0.00000*K076*<ALKE>+0.91741*K077* !<BIO>+0.03531*K120*<ALKAP>+0.61160*K122*<BIOP>+2.81904*K123*<AROP>+0.03455*K12 !4*<CARBOP> - PJAC(:,25,5)=+0.10530*TPK%K074(:)*PCONC(:,25)-TPK%K074(:)*PCONC(:,25)+0.00000*& -&TPK%K076(:)*PCONC(:,19)+0.91741*TPK%K077(:)*PCONC(:,20)+0.03531*TPK%K120(:)*PC& -&ONC(:,33)+0.61160*TPK%K122(:)*PCONC(:,35)+2.81904*TPK%K123(:)*PCONC(:,38)+0.03& -&455*TPK%K124(:)*PCONC(:,39) + PJAC(:,26,5)=+0.10530*TPK%K074(:)*PCONC(:,26)-TPK%K074(:)*PCONC(:,26)+0.00000*& +&TPK%K076(:)*PCONC(:,20)+0.91741*TPK%K077(:)*PCONC(:,21)+0.03531*TPK%K120(:)*PC& +&ONC(:,34)+0.61160*TPK%K122(:)*PCONC(:,36)+2.81904*TPK%K123(:)*PCONC(:,39)+0.03& +&455*TPK%K124(:)*PCONC(:,40) ! !CARBO/N2O5=0.0 ! @@ -11009,6 +11310,8 @@ SUBROUTINE SUBJ4 ! !CARBO/NH3=0.0 ! +!CARBO/DMS=0.0 +! !CARBO/SO2=0.0 ! !CARBO/SULF=0.0 @@ -11017,8 +11320,8 @@ SUBROUTINE SUBJ4 ! !CARBO/OH=+0.00835*K058*<ALKA>+0.16919*K065*<CARBO>-K065*<CARBO>+0.21863*K070*< !PAN> - PJAC(:,25,14)=+0.00835*TPK%K058(:)*PCONC(:,18)+0.16919*TPK%K065(:)*PCONC(:,25)& -&-TPK%K065(:)*PCONC(:,25)+0.21863*TPK%K070(:)*PCONC(:,27) + PJAC(:,26,15)=+0.00835*TPK%K058(:)*PCONC(:,19)+0.16919*TPK%K065(:)*PCONC(:,26)& +&-TPK%K065(:)*PCONC(:,26)+0.21863*TPK%K070(:)*PCONC(:,28) ! !CARBO/HO2=0.0 ! @@ -11027,13 +11330,13 @@ SUBROUTINE SUBJ4 !CARBO/ETH=0.0 ! !CARBO/ALKA=+0.00835*K058*<OH> - PJAC(:,25,18)=+0.00835*TPK%K058(:)*PCONC(:,14) + PJAC(:,26,19)=+0.00835*TPK%K058(:)*PCONC(:,15) ! !CARBO/ALKE=+0.00000*K076*<NO3>+0.00000*K079*<O3> - PJAC(:,25,19)=+0.00000*TPK%K076(:)*PCONC(:,5)+0.00000*TPK%K079(:)*PCONC(:,1) + PJAC(:,26,20)=+0.00000*TPK%K076(:)*PCONC(:,5)+0.00000*TPK%K079(:)*PCONC(:,1) ! !CARBO/BIO=+0.13255*K054*<O3P>+0.91741*K077*<NO3>+0.39754*K080*<O3> - PJAC(:,25,20)=+0.13255*TPK%K054(:)*TPK%O3P(:)+0.91741*TPK%K077(:)*PCONC(:,5)+0& + PJAC(:,26,21)=+0.13255*TPK%K054(:)*TPK%O3P(:)+0.91741*TPK%K077(:)*PCONC(:,5)+0& &.39754*TPK%K080(:)*PCONC(:,1) ! !CARBO/ARO=0.0 @@ -11046,14 +11349,14 @@ SUBROUTINE SUBJ4 ! !CARBO/CARBO=-K016-K055*<O3P>+0.16919*K065*<OH>-K065*<OH>+0.10530*K074*<NO3>-K0 !74*<NO3>+1.07583*K081*<O3>-K081*<O3> - PJAC(:,25,25)=-TPK%K016(:)-TPK%K055(:)*TPK%O3P(:)+0.16919*TPK%K065(:)*PCONC(:,& -&14)-TPK%K065(:)*PCONC(:,14)+0.10530*TPK%K074(:)*PCONC(:,5)-TPK%K074(:)*PCONC(:& + PJAC(:,26,26)=-TPK%K016(:)-TPK%K055(:)*TPK%O3P(:)+0.16919*TPK%K065(:)*PCONC(:,& +&15)-TPK%K065(:)*PCONC(:,15)+0.10530*TPK%K074(:)*PCONC(:,5)-TPK%K074(:)*PCONC(:& &,5)+1.07583*TPK%K081(:)*PCONC(:,1)-TPK%K081(:)*PCONC(:,1) ! !CARBO/ONIT=0.0 ! !CARBO/PAN=+0.21863*K070*<OH> - PJAC(:,25,27)=+0.21863*TPK%K070(:)*PCONC(:,14) + PJAC(:,26,28)=+0.21863*TPK%K070(:)*PCONC(:,15) ! !CARBO/OP1=0.0 ! @@ -11065,20 +11368,20 @@ SUBROUTINE SUBJ4 ! !CARBO/MO2=+0.07976*K105*<ALKAP>+0.56064*K107*<BIOP>+1.99461*K108*<AROP>+0.1538 !7*K109*<CARBOP> - PJAC(:,25,32)=+0.07976*TPK%K105(:)*PCONC(:,33)+0.56064*TPK%K107(:)*PCONC(:,35)& -&+1.99461*TPK%K108(:)*PCONC(:,38)+0.15387*TPK%K109(:)*PCONC(:,39) + PJAC(:,26,33)=+0.07976*TPK%K105(:)*PCONC(:,34)+0.56064*TPK%K107(:)*PCONC(:,36)& +&+1.99461*TPK%K108(:)*PCONC(:,39)+0.15387*TPK%K109(:)*PCONC(:,40) ! !CARBO/ALKAP=+0.03407*K091*<NO>+0.07976*K105*<MO2>+0.06954*K111*<CARBOP>+0.0353 !1*K120*<NO3> - PJAC(:,25,33)=+0.03407*TPK%K091(:)*PCONC(:,3)+0.07976*TPK%K105(:)*PCONC(:,32)+& -&0.06954*TPK%K111(:)*PCONC(:,39)+0.03531*TPK%K120(:)*PCONC(:,5) + PJAC(:,26,34)=+0.03407*TPK%K091(:)*PCONC(:,3)+0.07976*TPK%K105(:)*PCONC(:,33)+& +&0.06954*TPK%K111(:)*PCONC(:,40)+0.03531*TPK%K120(:)*PCONC(:,5) ! !CARBO/ALKEP=0.0 ! !CARBO/BIOP=+0.45463*K093*<NO>+0.56064*K107*<MO2>+0.78591*K113*<CARBOP>+0.61160 !*K122*<NO3> - PJAC(:,25,35)=+0.45463*TPK%K093(:)*PCONC(:,3)+0.56064*TPK%K107(:)*PCONC(:,32)+& -&0.78591*TPK%K113(:)*PCONC(:,39)+0.61160*TPK%K122(:)*PCONC(:,5) + PJAC(:,26,36)=+0.45463*TPK%K093(:)*PCONC(:,3)+0.56064*TPK%K107(:)*PCONC(:,33)+& +&0.78591*TPK%K113(:)*PCONC(:,40)+0.61160*TPK%K122(:)*PCONC(:,5) ! !CARBO/PHO=0.0 ! @@ -11086,16 +11389,16 @@ SUBROUTINE SUBJ4 ! !CARBO/AROP=+2.06993*K094*<NO>+1.99461*K108*<MO2>+1.99455*K114*<CARBOP>+2.81904 !*K123*<NO3> - PJAC(:,25,38)=+2.06993*TPK%K094(:)*PCONC(:,3)+1.99461*TPK%K108(:)*PCONC(:,32)+& -&1.99455*TPK%K114(:)*PCONC(:,39)+2.81904*TPK%K123(:)*PCONC(:,5) + PJAC(:,26,39)=+2.06993*TPK%K094(:)*PCONC(:,3)+1.99461*TPK%K108(:)*PCONC(:,33)+& +&1.99455*TPK%K114(:)*PCONC(:,40)+2.81904*TPK%K123(:)*PCONC(:,5) ! !CARBO/CARBOP=+0.08670*K095*<NO>+0.15387*K109*<MO2>+0.06954*K111*<ALKAP>+0.7859 !1*K113*<BIOP>+1.99455*K114*<AROP>+0.10777*K115*<CARBOP>+0.10777*K115*<CARBOP>+ !0.03455*K124*<NO3> - PJAC(:,25,39)=+0.08670*TPK%K095(:)*PCONC(:,3)+0.15387*TPK%K109(:)*PCONC(:,32)+& -&0.06954*TPK%K111(:)*PCONC(:,33)+0.78591*TPK%K113(:)*PCONC(:,35)+1.99455*TPK%K1& -&14(:)*PCONC(:,38)+0.10777*TPK%K115(:)*PCONC(:,39)+0.10777*TPK%K115(:)*PCONC(:,& -&39)+0.03455*TPK%K124(:)*PCONC(:,5) + PJAC(:,26,40)=+0.08670*TPK%K095(:)*PCONC(:,3)+0.15387*TPK%K109(:)*PCONC(:,33)+& +&0.06954*TPK%K111(:)*PCONC(:,34)+0.78591*TPK%K113(:)*PCONC(:,36)+1.99455*TPK%K1& +&14(:)*PCONC(:,39)+0.10777*TPK%K115(:)*PCONC(:,40)+0.10777*TPK%K115(:)*PCONC(:,& +&40)+0.03455*TPK%K124(:)*PCONC(:,5) ! !CARBO/OLN=0.0 ! @@ -11201,28 +11504,20 @@ SUBROUTINE SUBJ4 ! !CARBO/WR_AHMS=0.0 ! -RETURN -END SUBROUTINE SUBJ4 -! -SUBROUTINE SUBJ5 -! -!Indices 26 a 30 -! -! !ONIT/O3=0.0 ! !ONIT/H2O2=0.0 ! !ONIT/NO=+0.08459*K091*<ALKAP>+0.15300*K093*<BIOP>+0.04885*K094*<AROP>+0.18401* !K096*<OLN> - PJAC(:,26,3)=+0.08459*TPK%K091(:)*PCONC(:,33)+0.15300*TPK%K093(:)*PCONC(:,35)+& -&0.04885*TPK%K094(:)*PCONC(:,38)+0.18401*TPK%K096(:)*PCONC(:,40) + PJAC(:,27,3)=+0.08459*TPK%K091(:)*PCONC(:,34)+0.15300*TPK%K093(:)*PCONC(:,36)+& +&0.04885*TPK%K094(:)*PCONC(:,39)+0.18401*TPK%K096(:)*PCONC(:,41) ! !ONIT/NO2=+K083*<PHO> - PJAC(:,26,4)=+TPK%K083(:)*PCONC(:,36) + PJAC(:,27,4)=+TPK%K083(:)*PCONC(:,37) ! !ONIT/NO3=+0.60*K078*<PAN>+0.25928*K125*<OLN> - PJAC(:,26,5)=+0.60*TPK%K078(:)*PCONC(:,27)+0.25928*TPK%K125(:)*PCONC(:,40) + PJAC(:,27,5)=+0.60*TPK%K078(:)*PCONC(:,28)+0.25928*TPK%K125(:)*PCONC(:,41) ! !ONIT/N2O5=0.0 ! @@ -11234,6 +11529,8 @@ SUBROUTINE SUBJ5 ! !ONIT/NH3=0.0 ! +!ONIT/DMS=0.0 +! !ONIT/SO2=0.0 ! !ONIT/SULF=0.0 @@ -11241,10 +11538,10 @@ SUBROUTINE SUBJ5 !ONIT/CO=0.0 ! !ONIT/OH=-K071*<ONIT> - PJAC(:,26,14)=-TPK%K071(:)*PCONC(:,26) + PJAC(:,27,15)=-TPK%K071(:)*PCONC(:,27) ! !ONIT/HO2=+K103*<OLN> - PJAC(:,26,15)=+TPK%K103(:)*PCONC(:,40) + PJAC(:,27,16)=+TPK%K103(:)*PCONC(:,41) ! !ONIT/CH4=0.0 ! @@ -11267,10 +11564,10 @@ SUBROUTINE SUBJ5 !ONIT/CARBO=0.0 ! !ONIT/ONIT=-K017-K071*<OH> - PJAC(:,26,26)=-TPK%K017(:)-TPK%K071(:)*PCONC(:,14) + PJAC(:,27,27)=-TPK%K017(:)-TPK%K071(:)*PCONC(:,15) ! !ONIT/PAN=+0.60*K078*<NO3> - PJAC(:,26,27)=+0.60*TPK%K078(:)*PCONC(:,5) + PJAC(:,27,28)=+0.60*TPK%K078(:)*PCONC(:,5) ! !ONIT/OP1=0.0 ! @@ -11281,34 +11578,34 @@ SUBROUTINE SUBJ5 !ONIT/ORA2=0.0 ! !ONIT/MO2=+0.67560*K110*<OLN> - PJAC(:,26,32)=+0.67560*TPK%K110(:)*PCONC(:,40) + PJAC(:,27,33)=+0.67560*TPK%K110(:)*PCONC(:,41) ! !ONIT/ALKAP=+0.08459*K091*<NO> - PJAC(:,26,33)=+0.08459*TPK%K091(:)*PCONC(:,3) + PJAC(:,27,34)=+0.08459*TPK%K091(:)*PCONC(:,3) ! !ONIT/ALKEP=0.0 ! !ONIT/BIOP=+0.15300*K093*<NO> - PJAC(:,26,35)=+0.15300*TPK%K093(:)*PCONC(:,3) + PJAC(:,27,36)=+0.15300*TPK%K093(:)*PCONC(:,3) ! !ONIT/PHO=+K083*<NO2> - PJAC(:,26,36)=+TPK%K083(:)*PCONC(:,4) + PJAC(:,27,37)=+TPK%K083(:)*PCONC(:,4) ! !ONIT/ADD=0.0 ! !ONIT/AROP=+0.04885*K094*<NO> - PJAC(:,26,38)=+0.04885*TPK%K094(:)*PCONC(:,3) + PJAC(:,27,39)=+0.04885*TPK%K094(:)*PCONC(:,3) ! !ONIT/CARBOP=+0.66562*K116*<OLN> - PJAC(:,26,39)=+0.66562*TPK%K116(:)*PCONC(:,40) + PJAC(:,27,40)=+0.66562*TPK%K116(:)*PCONC(:,41) ! !ONIT/OLN=+0.18401*K096*<NO>+K103*<HO2>+0.67560*K110*<MO2>+0.66562*K116*<CARBOP !>+2.00*K117*<OLN>+2.00*K117*<OLN>+0.00000*K118*<OLN>+0.00000*K118*<OLN>+0.2592 !8*K125*<NO3> - PJAC(:,26,40)=+0.18401*TPK%K096(:)*PCONC(:,3)+TPK%K103(:)*PCONC(:,15)+0.67560*& -&TPK%K110(:)*PCONC(:,32)+0.66562*TPK%K116(:)*PCONC(:,39)+2.00*TPK%K117(:)*PCONC& -&(:,40)+2.00*TPK%K117(:)*PCONC(:,40)+0.00000*TPK%K118(:)*PCONC(:,40)+0.00000*TP& -&K%K118(:)*PCONC(:,40)+0.25928*TPK%K125(:)*PCONC(:,5) + PJAC(:,27,41)=+0.18401*TPK%K096(:)*PCONC(:,3)+TPK%K103(:)*PCONC(:,16)+0.67560*& +&TPK%K110(:)*PCONC(:,33)+0.66562*TPK%K116(:)*PCONC(:,40)+2.00*TPK%K117(:)*PCONC& +&(:,41)+2.00*TPK%K117(:)*PCONC(:,41)+0.00000*TPK%K118(:)*PCONC(:,41)+0.00000*TP& +&K%K118(:)*PCONC(:,41)+0.25928*TPK%K125(:)*PCONC(:,5) ! !ONIT/XO2=0.0 ! @@ -11413,17 +11710,17 @@ SUBROUTINE SUBJ5 !ONIT/WR_AHMS=0.0 ! !PAN/O3=+0.30000*K082*<PAN>-K082*<PAN> - PJAC(:,27,1)=+0.30000*TPK%K082(:)*PCONC(:,27)-TPK%K082(:)*PCONC(:,27) + PJAC(:,28,1)=+0.30000*TPK%K082(:)*PCONC(:,28)-TPK%K082(:)*PCONC(:,28) ! !PAN/H2O2=0.0 ! !PAN/NO=0.0 ! !PAN/NO2=+1.00000*K088*<CARBOP> - PJAC(:,27,4)=+1.00000*TPK%K088(:)*PCONC(:,39) + PJAC(:,28,4)=+1.00000*TPK%K088(:)*PCONC(:,40) ! !PAN/NO3=+0.40000*K078*<PAN>-K078*<PAN> - PJAC(:,27,5)=+0.40000*TPK%K078(:)*PCONC(:,27)-TPK%K078(:)*PCONC(:,27) + PJAC(:,28,5)=+0.40000*TPK%K078(:)*PCONC(:,28)-TPK%K078(:)*PCONC(:,28) ! !PAN/N2O5=0.0 ! @@ -11435,6 +11732,8 @@ SUBROUTINE SUBJ5 ! !PAN/NH3=0.0 ! +!PAN/DMS=0.0 +! !PAN/SO2=0.0 ! !PAN/SULF=0.0 @@ -11442,7 +11741,7 @@ SUBROUTINE SUBJ5 !PAN/CO=0.0 ! !PAN/OH=+0.28107*K070*<PAN>-K070*<PAN> - PJAC(:,27,14)=+0.28107*TPK%K070(:)*PCONC(:,27)-TPK%K070(:)*PCONC(:,27) + PJAC(:,28,15)=+0.28107*TPK%K070(:)*PCONC(:,28)-TPK%K070(:)*PCONC(:,28) ! !PAN/HO2=0.0 ! @@ -11470,7 +11769,7 @@ SUBROUTINE SUBJ5 ! !PAN/PAN=+0.28107*K070*<OH>-K070*<OH>+0.40000*K078*<NO3>-K078*<NO3>+0.30000*K08 !2*<O3>-K082*<O3>-K089 - PJAC(:,27,27)=+0.28107*TPK%K070(:)*PCONC(:,14)-TPK%K070(:)*PCONC(:,14)+0.40000& + PJAC(:,28,28)=+0.28107*TPK%K070(:)*PCONC(:,15)-TPK%K070(:)*PCONC(:,15)+0.40000& &*TPK%K078(:)*PCONC(:,5)-TPK%K078(:)*PCONC(:,5)+0.30000*TPK%K082(:)*PCONC(:,1)-& &TPK%K082(:)*PCONC(:,1)-TPK%K089(:) ! @@ -11497,7 +11796,7 @@ SUBROUTINE SUBJ5 !PAN/AROP=0.0 ! !PAN/CARBOP=+1.00000*K088*<NO2> - PJAC(:,27,39)=+1.00000*TPK%K088(:)*PCONC(:,4) + PJAC(:,28,40)=+1.00000*TPK%K088(:)*PCONC(:,4) ! !PAN/OLN=0.0 ! @@ -11623,6 +11922,8 @@ SUBROUTINE SUBJ5 ! !OP1/NH3=0.0 ! +!OP1/DMS=0.0 +! !OP1/SO2=0.0 ! !OP1/SULF=0.0 @@ -11630,10 +11931,10 @@ SUBROUTINE SUBJ5 !OP1/CO=0.0 ! !OP1/OH=-K068*<OP1> - PJAC(:,28,14)=-TPK%K068(:)*PCONC(:,28) + PJAC(:,29,15)=-TPK%K068(:)*PCONC(:,29) ! !OP1/HO2=+K097*<MO2> - PJAC(:,28,15)=+TPK%K097(:)*PCONC(:,32) + PJAC(:,29,16)=+TPK%K097(:)*PCONC(:,33) ! !OP1/CH4=0.0 ! @@ -11660,7 +11961,7 @@ SUBROUTINE SUBJ5 !OP1/PAN=0.0 ! !OP1/OP1=-K013-K068*<OH>-KTC20-KTR20 - PJAC(:,28,28)=-TPK%K013(:)-TPK%K068(:)*PCONC(:,14)-TPK%KTC20(:)-TPK%KTR20(:) + PJAC(:,29,29)=-TPK%K013(:)-TPK%K068(:)*PCONC(:,15)-TPK%KTC20(:)-TPK%KTR20(:) ! !OP1/OP2=0.0 ! @@ -11669,7 +11970,7 @@ SUBROUTINE SUBJ5 !OP1/ORA2=0.0 ! !OP1/MO2=+K097*<HO2> - PJAC(:,28,32)=+TPK%K097(:)*PCONC(:,15) + PJAC(:,29,33)=+TPK%K097(:)*PCONC(:,16) ! !OP1/ALKAP=0.0 ! @@ -11728,7 +12029,7 @@ SUBROUTINE SUBJ5 !OP1/WC_MO2=0.0 ! !OP1/WC_OP1=+KTC40 - PJAC(:,28,61)=+TPK%KTC40(:) + PJAC(:,29,62)=+TPK%KTC40(:) ! !OP1/WC_ASO3=0.0 ! @@ -11779,7 +12080,7 @@ SUBROUTINE SUBJ5 !OP1/WR_MO2=0.0 ! !OP1/WR_OP1=+KTR40 - PJAC(:,28,86)=+TPK%KTR40(:) + PJAC(:,29,87)=+TPK%KTR40(:) ! !OP1/WR_ASO3=0.0 ! @@ -11792,7 +12093,7 @@ SUBROUTINE SUBJ5 !OP1/WR_AHMS=0.0 ! !OP2/O3=+0.10149*K081*<CARBO> - PJAC(:,29,1)=+0.10149*TPK%K081(:)*PCONC(:,25) + PJAC(:,30,1)=+0.10149*TPK%K081(:)*PCONC(:,26) ! !OP2/H2O2=0.0 ! @@ -11812,6 +12113,8 @@ SUBROUTINE SUBJ5 ! !OP2/NH3=0.0 ! +!OP2/DMS=0.0 +! !OP2/SO2=0.0 ! !OP2/SULF=0.0 @@ -11819,13 +12122,13 @@ SUBROUTINE SUBJ5 !OP2/CO=0.0 ! !OP2/OH=-K069*<OP2> - PJAC(:,29,14)=-TPK%K069(:)*PCONC(:,29) + PJAC(:,30,15)=-TPK%K069(:)*PCONC(:,30) ! !OP2/HO2=+1.00524*K098*<ALKAP>+1.00524*K099*<ALKEP>+1.00524*K0100*<BIOP>+1.0052 !4*K0101*<AROP>+0.80904*K0102*<CARBOP>+1.00524*K126*<XO2> - PJAC(:,29,15)=+1.00524*TPK%K098(:)*PCONC(:,33)+1.00524*TPK%K099(:)*PCONC(:,34)& -&+1.00524*TPK%K0100(:)*PCONC(:,35)+1.00524*TPK%K0101(:)*PCONC(:,38)+0.80904*TPK& -&%K0102(:)*PCONC(:,39)+1.00524*TPK%K126(:)*PCONC(:,41) + PJAC(:,30,16)=+1.00524*TPK%K098(:)*PCONC(:,34)+1.00524*TPK%K099(:)*PCONC(:,35)& +&+1.00524*TPK%K0100(:)*PCONC(:,36)+1.00524*TPK%K0101(:)*PCONC(:,39)+0.80904*TPK& +&%K0102(:)*PCONC(:,40)+1.00524*TPK%K126(:)*PCONC(:,42) ! !OP2/CH4=0.0 ! @@ -11846,7 +12149,7 @@ SUBROUTINE SUBJ5 !OP2/KET=0.0 ! !OP2/CARBO=+0.10149*K081*<O3> - PJAC(:,29,25)=+0.10149*TPK%K081(:)*PCONC(:,1) + PJAC(:,30,26)=+0.10149*TPK%K081(:)*PCONC(:,1) ! !OP2/ONIT=0.0 ! @@ -11855,7 +12158,7 @@ SUBROUTINE SUBJ5 !OP2/OP1=0.0 ! !OP2/OP2=-K014-K069*<OH> - PJAC(:,29,29)=-TPK%K014(:)-TPK%K069(:)*PCONC(:,14) + PJAC(:,30,30)=-TPK%K014(:)-TPK%K069(:)*PCONC(:,15) ! !OP2/ORA1=0.0 ! @@ -11864,28 +12167,28 @@ SUBROUTINE SUBJ5 !OP2/MO2=0.0 ! !OP2/ALKAP=+1.00524*K098*<HO2> - PJAC(:,29,33)=+1.00524*TPK%K098(:)*PCONC(:,15) + PJAC(:,30,34)=+1.00524*TPK%K098(:)*PCONC(:,16) ! !OP2/ALKEP=+1.00524*K099*<HO2> - PJAC(:,29,34)=+1.00524*TPK%K099(:)*PCONC(:,15) + PJAC(:,30,35)=+1.00524*TPK%K099(:)*PCONC(:,16) ! !OP2/BIOP=+1.00524*K0100*<HO2> - PJAC(:,29,35)=+1.00524*TPK%K0100(:)*PCONC(:,15) + PJAC(:,30,36)=+1.00524*TPK%K0100(:)*PCONC(:,16) ! !OP2/PHO=0.0 ! !OP2/ADD=0.0 ! !OP2/AROP=+1.00524*K0101*<HO2> - PJAC(:,29,38)=+1.00524*TPK%K0101(:)*PCONC(:,15) + PJAC(:,30,39)=+1.00524*TPK%K0101(:)*PCONC(:,16) ! !OP2/CARBOP=+0.80904*K0102*<HO2> - PJAC(:,29,39)=+0.80904*TPK%K0102(:)*PCONC(:,15) + PJAC(:,30,40)=+0.80904*TPK%K0102(:)*PCONC(:,16) ! !OP2/OLN=0.0 ! !OP2/XO2=+1.00524*K126*<HO2> - PJAC(:,29,41)=+1.00524*TPK%K126(:)*PCONC(:,15) + PJAC(:,30,42)=+1.00524*TPK%K126(:)*PCONC(:,16) ! !OP2/WC_O3=0.0 ! @@ -11987,10 +12290,18 @@ SUBROUTINE SUBJ5 ! !OP2/WR_AHMS=0.0 ! +RETURN +END SUBROUTINE SUBJ5 +! +SUBROUTINE SUBJ6 +! +!Indices 31 a 35 +! +! !ORA1/O3=+0.15343*K079*<ALKE>+0.15000*K080*<BIO>+0.10788*K081*<CARBO>+0.11*K082 !*<PAN> - PJAC(:,30,1)=+0.15343*TPK%K079(:)*PCONC(:,19)+0.15000*TPK%K080(:)*PCONC(:,20)+& -&0.10788*TPK%K081(:)*PCONC(:,25)+0.11*TPK%K082(:)*PCONC(:,27) + PJAC(:,31,1)=+0.15343*TPK%K079(:)*PCONC(:,20)+0.15000*TPK%K080(:)*PCONC(:,21)+& +&0.10788*TPK%K081(:)*PCONC(:,26)+0.11*TPK%K082(:)*PCONC(:,28) ! !ORA1/H2O2=0.0 ! @@ -12010,6 +12321,8 @@ SUBROUTINE SUBJ5 ! !ORA1/NH3=0.0 ! +!ORA1/DMS=0.0 +! !ORA1/SO2=0.0 ! !ORA1/SULF=0.0 @@ -12017,7 +12330,7 @@ SUBROUTINE SUBJ5 !ORA1/CO=0.0 ! !ORA1/OH=+0.00878*K058*<ALKA>-K066*<ORA1> - PJAC(:,30,14)=+0.00878*TPK%K058(:)*PCONC(:,18)-TPK%K066(:)*PCONC(:,30) + PJAC(:,31,15)=+0.00878*TPK%K058(:)*PCONC(:,19)-TPK%K066(:)*PCONC(:,31) ! !ORA1/HO2=0.0 ! @@ -12026,13 +12339,13 @@ SUBROUTINE SUBJ5 !ORA1/ETH=0.0 ! !ORA1/ALKA=+0.00878*K058*<OH> - PJAC(:,30,18)=+0.00878*TPK%K058(:)*PCONC(:,14) + PJAC(:,31,19)=+0.00878*TPK%K058(:)*PCONC(:,15) ! !ORA1/ALKE=+0.15343*K079*<O3> - PJAC(:,30,19)=+0.15343*TPK%K079(:)*PCONC(:,1) + PJAC(:,31,20)=+0.15343*TPK%K079(:)*PCONC(:,1) ! !ORA1/BIO=+0.15000*K080*<O3> - PJAC(:,30,20)=+0.15000*TPK%K080(:)*PCONC(:,1) + PJAC(:,31,21)=+0.15000*TPK%K080(:)*PCONC(:,1) ! !ORA1/ARO=0.0 ! @@ -12043,19 +12356,19 @@ SUBROUTINE SUBJ5 !ORA1/KET=0.0 ! !ORA1/CARBO=+0.10788*K081*<O3> - PJAC(:,30,25)=+0.10788*TPK%K081(:)*PCONC(:,1) + PJAC(:,31,26)=+0.10788*TPK%K081(:)*PCONC(:,1) ! !ORA1/ONIT=0.0 ! !ORA1/PAN=+0.11*K082*<O3> - PJAC(:,30,27)=+0.11*TPK%K082(:)*PCONC(:,1) + PJAC(:,31,28)=+0.11*TPK%K082(:)*PCONC(:,1) ! !ORA1/OP1=0.0 ! !ORA1/OP2=0.0 ! !ORA1/ORA1=-K066*<OH>-KTC17-KTR17 - PJAC(:,30,30)=-TPK%K066(:)*PCONC(:,14)-TPK%KTC17(:)-TPK%KTR17(:) + PJAC(:,31,31)=-TPK%K066(:)*PCONC(:,15)-TPK%KTC17(:)-TPK%KTR17(:) ! !ORA1/ORA2=0.0 ! @@ -12112,7 +12425,7 @@ SUBROUTINE SUBJ5 !ORA1/WC_HCHO=0.0 ! !ORA1/WC_ORA1=+KTC37 - PJAC(:,30,58)=+TPK%KTC37(:) + PJAC(:,31,59)=+TPK%KTC37(:) ! !ORA1/WC_ORA2=0.0 ! @@ -12163,7 +12476,7 @@ SUBROUTINE SUBJ5 !ORA1/WR_HCHO=0.0 ! !ORA1/WR_ORA1=+KTR37 - PJAC(:,30,83)=+TPK%KTR37(:) + PJAC(:,31,84)=+TPK%KTR37(:) ! !ORA1/WR_ORA2=0.0 ! @@ -12181,17 +12494,9 @@ SUBROUTINE SUBJ5 ! !ORA1/WR_AHMS=0.0 ! -RETURN -END SUBROUTINE SUBJ5 -! -SUBROUTINE SUBJ6 -! -!Indices 31 a 35 -! -! !ORA2/O3=+0.08143*K079*<ALKE>+0.00000*K080*<BIO>+0.20595*K081*<CARBO> - PJAC(:,31,1)=+0.08143*TPK%K079(:)*PCONC(:,19)+0.00000*TPK%K080(:)*PCONC(:,20)+& -&0.20595*TPK%K081(:)*PCONC(:,25) + PJAC(:,32,1)=+0.08143*TPK%K079(:)*PCONC(:,20)+0.00000*TPK%K080(:)*PCONC(:,21)+& +&0.20595*TPK%K081(:)*PCONC(:,26) ! !ORA2/H2O2=0.0 ! @@ -12211,6 +12516,8 @@ SUBROUTINE SUBJ6 ! !ORA2/NH3=0.0 ! +!ORA2/DMS=0.0 +! !ORA2/SO2=0.0 ! !ORA2/SULF=0.0 @@ -12218,10 +12525,10 @@ SUBROUTINE SUBJ6 !ORA2/CO=0.0 ! !ORA2/OH=-K067*<ORA2> - PJAC(:,31,14)=-TPK%K067(:)*PCONC(:,31) + PJAC(:,32,15)=-TPK%K067(:)*PCONC(:,32) ! !ORA2/HO2=+0.17307*K0102*<CARBOP> - PJAC(:,31,15)=+0.17307*TPK%K0102(:)*PCONC(:,39) + PJAC(:,32,16)=+0.17307*TPK%K0102(:)*PCONC(:,40) ! !ORA2/CH4=0.0 ! @@ -12230,10 +12537,10 @@ SUBROUTINE SUBJ6 !ORA2/ALKA=0.0 ! !ORA2/ALKE=+0.08143*K079*<O3> - PJAC(:,31,19)=+0.08143*TPK%K079(:)*PCONC(:,1) + PJAC(:,32,20)=+0.08143*TPK%K079(:)*PCONC(:,1) ! !ORA2/BIO=+0.00000*K080*<O3> - PJAC(:,31,20)=+0.00000*TPK%K080(:)*PCONC(:,1) + PJAC(:,32,21)=+0.00000*TPK%K080(:)*PCONC(:,1) ! !ORA2/ARO=0.0 ! @@ -12244,7 +12551,7 @@ SUBROUTINE SUBJ6 !ORA2/KET=0.0 ! !ORA2/CARBO=+0.20595*K081*<O3> - PJAC(:,31,25)=+0.20595*TPK%K081(:)*PCONC(:,1) + PJAC(:,32,26)=+0.20595*TPK%K081(:)*PCONC(:,1) ! !ORA2/ONIT=0.0 ! @@ -12257,19 +12564,19 @@ SUBROUTINE SUBJ6 !ORA2/ORA1=0.0 ! !ORA2/ORA2=-K067*<OH>-KTC18-KTR18 - PJAC(:,31,31)=-TPK%K067(:)*PCONC(:,14)-TPK%KTC18(:)-TPK%KTR18(:) + PJAC(:,32,32)=-TPK%K067(:)*PCONC(:,15)-TPK%KTC18(:)-TPK%KTR18(:) ! !ORA2/MO2=+0.13684*K109*<CARBOP> - PJAC(:,31,32)=+0.13684*TPK%K109(:)*PCONC(:,39) + PJAC(:,32,33)=+0.13684*TPK%K109(:)*PCONC(:,40) ! !ORA2/ALKAP=+0.49810*K111*<CARBOP> - PJAC(:,31,33)=+0.49810*TPK%K111(:)*PCONC(:,39) + PJAC(:,32,34)=+0.49810*TPK%K111(:)*PCONC(:,40) ! !ORA2/ALKEP=+0.49922*K112*<CARBOP> - PJAC(:,31,34)=+0.49922*TPK%K112(:)*PCONC(:,39) + PJAC(:,32,35)=+0.49922*TPK%K112(:)*PCONC(:,40) ! !ORA2/BIOP=+0.49400*K113*<CARBOP> - PJAC(:,31,35)=+0.49400*TPK%K113(:)*PCONC(:,39) + PJAC(:,32,36)=+0.49400*TPK%K113(:)*PCONC(:,40) ! !ORA2/PHO=0.0 ! @@ -12280,13 +12587,13 @@ SUBROUTINE SUBJ6 !ORA2/CARBOP=+0.17307*K0102*<HO2>+0.13684*K109*<MO2>+0.49810*K111*<ALKAP>+0.499 !22*K112*<ALKEP>+0.49400*K113*<BIOP>+0.09955*K115*<CARBOP>+0.09955*K115*<CARBOP !>+0.48963*K116*<OLN> - PJAC(:,31,39)=+0.17307*TPK%K0102(:)*PCONC(:,15)+0.13684*TPK%K109(:)*PCONC(:,32& -&)+0.49810*TPK%K111(:)*PCONC(:,33)+0.49922*TPK%K112(:)*PCONC(:,34)+0.49400*TPK%& -&K113(:)*PCONC(:,35)+0.09955*TPK%K115(:)*PCONC(:,39)+0.09955*TPK%K115(:)*PCONC(& -&:,39)+0.48963*TPK%K116(:)*PCONC(:,40) + PJAC(:,32,40)=+0.17307*TPK%K0102(:)*PCONC(:,16)+0.13684*TPK%K109(:)*PCONC(:,33& +&)+0.49810*TPK%K111(:)*PCONC(:,34)+0.49922*TPK%K112(:)*PCONC(:,35)+0.49400*TPK%& +&K113(:)*PCONC(:,36)+0.09955*TPK%K115(:)*PCONC(:,40)+0.09955*TPK%K115(:)*PCONC(& +&:,40)+0.48963*TPK%K116(:)*PCONC(:,41) ! !ORA2/OLN=+0.48963*K116*<CARBOP> - PJAC(:,31,40)=+0.48963*TPK%K116(:)*PCONC(:,39) + PJAC(:,32,41)=+0.48963*TPK%K116(:)*PCONC(:,40) ! !ORA2/XO2=0.0 ! @@ -12325,7 +12632,7 @@ SUBROUTINE SUBJ6 !ORA2/WC_ORA1=0.0 ! !ORA2/WC_ORA2=+KTC38 - PJAC(:,31,59)=+TPK%KTC38(:) + PJAC(:,32,60)=+TPK%KTC38(:) ! !ORA2/WC_MO2=0.0 ! @@ -12376,7 +12683,7 @@ SUBROUTINE SUBJ6 !ORA2/WR_ORA1=0.0 ! !ORA2/WR_ORA2=+KTR38 - PJAC(:,31,84)=+TPK%KTR38(:) + PJAC(:,32,85)=+TPK%KTR38(:) ! !ORA2/WR_MO2=0.0 ! @@ -12393,19 +12700,19 @@ SUBROUTINE SUBJ6 !ORA2/WR_AHMS=0.0 ! !MO2/O3=+0.13966*K079*<ALKE>+0.03000*K080*<BIO> - PJAC(:,32,1)=+0.13966*TPK%K079(:)*PCONC(:,19)+0.03000*TPK%K080(:)*PCONC(:,20) + PJAC(:,33,1)=+0.13966*TPK%K079(:)*PCONC(:,20)+0.03000*TPK%K080(:)*PCONC(:,21) ! !MO2/H2O2=0.0 ! !MO2/NO=-K090*<MO2>+0.09016*K091*<ALKAP>+0.78134*K095*<CARBOP> - PJAC(:,32,3)=-TPK%K090(:)*PCONC(:,32)+0.09016*TPK%K091(:)*PCONC(:,33)+0.78134*& -&TPK%K095(:)*PCONC(:,39) + PJAC(:,33,3)=-TPK%K090(:)*PCONC(:,33)+0.09016*TPK%K091(:)*PCONC(:,34)+0.78134*& +&TPK%K095(:)*PCONC(:,40) ! !MO2/NO2=0.0 ! !MO2/NO3=-K119*<MO2>+0.09731*K120*<ALKAP>+0.91910*K124*<CARBOP> - PJAC(:,32,5)=-TPK%K119(:)*PCONC(:,32)+0.09731*TPK%K120(:)*PCONC(:,33)+0.91910*& -&TPK%K124(:)*PCONC(:,39) + PJAC(:,33,5)=-TPK%K119(:)*PCONC(:,33)+0.09731*TPK%K120(:)*PCONC(:,34)+0.91910*& +&TPK%K124(:)*PCONC(:,40) ! !MO2/N2O5=0.0 ! @@ -12417,6 +12724,8 @@ SUBROUTINE SUBJ6 ! !MO2/NH3=0.0 ! +!MO2/DMS=0.0 +! !MO2/SO2=0.0 ! !MO2/SULF=0.0 @@ -12424,30 +12733,30 @@ SUBROUTINE SUBJ6 !MO2/CO=0.0 ! !MO2/OH=+K056*<CH4>+0.65*K068*<OP1> - PJAC(:,32,14)=+TPK%K056(:)*PCONC(:,16)+0.65*TPK%K068(:)*PCONC(:,28) + PJAC(:,33,15)=+TPK%K056(:)*PCONC(:,17)+0.65*TPK%K068(:)*PCONC(:,29) ! !MO2/HO2=-K097*<MO2> - PJAC(:,32,15)=-TPK%K097(:)*PCONC(:,32) + PJAC(:,33,16)=-TPK%K097(:)*PCONC(:,33) ! !MO2/CH4=+K056*<OH> - PJAC(:,32,16)=+TPK%K056(:)*PCONC(:,14) + PJAC(:,33,17)=+TPK%K056(:)*PCONC(:,15) ! !MO2/ETH=0.0 ! !MO2/ALKA=0.0 ! !MO2/ALKE=+0.13966*K079*<O3> - PJAC(:,32,19)=+0.13966*TPK%K079(:)*PCONC(:,1) + PJAC(:,33,20)=+0.13966*TPK%K079(:)*PCONC(:,1) ! !MO2/BIO=+0.03000*K080*<O3> - PJAC(:,32,20)=+0.03000*TPK%K080(:)*PCONC(:,1) + PJAC(:,33,21)=+0.03000*TPK%K080(:)*PCONC(:,1) ! !MO2/ARO=0.0 ! !MO2/HCHO=0.0 ! !MO2/ALD=+K012 - PJAC(:,32,23)=+TPK%K012(:) + PJAC(:,33,24)=+TPK%K012(:) ! !MO2/KET=0.0 ! @@ -12458,10 +12767,10 @@ SUBROUTINE SUBJ6 !MO2/PAN=0.0 ! !MO2/OP1=+0.65*K068*<OH> - PJAC(:,32,28)=+0.65*TPK%K068(:)*PCONC(:,14) + PJAC(:,33,29)=+0.65*TPK%K068(:)*PCONC(:,15) ! !MO2/OP2=+0.03795*K014 - PJAC(:,32,29)=+0.03795*TPK%K014(:) + PJAC(:,33,30)=+0.03795*TPK%K014(:) ! !MO2/ORA1=0.0 ! @@ -12470,46 +12779,46 @@ SUBROUTINE SUBJ6 !MO2/MO2=-K090*<NO>-K097*<HO2>-K104*<MO2>-K104*<MO2>-K104*<MO2>-K104*<MO2>+0.01 !390*K105*<ALKAP>-K105*<ALKAP>-K106*<ALKEP>-K107*<BIOP>-K108*<AROP>+0.56031*K10 !9*<CARBOP>-K109*<CARBOP>-K110*<OLN>-K119*<NO3>-K127*<XO2>-KTC19-KTR19 - PJAC(:,32,32)=-TPK%K090(:)*PCONC(:,3)-TPK%K097(:)*PCONC(:,15)-TPK%K104(:)*PCON& -&C(:,32)-TPK%K104(:)*PCONC(:,32)-TPK%K104(:)*PCONC(:,32)-TPK%K104(:)*PCONC(:,32& -&)+0.01390*TPK%K105(:)*PCONC(:,33)-TPK%K105(:)*PCONC(:,33)-TPK%K106(:)*PCONC(:,& -&34)-TPK%K107(:)*PCONC(:,35)-TPK%K108(:)*PCONC(:,38)+0.56031*TPK%K109(:)*PCONC(& -&:,39)-TPK%K109(:)*PCONC(:,39)-TPK%K110(:)*PCONC(:,40)-TPK%K119(:)*PCONC(:,5)-T& -&PK%K127(:)*PCONC(:,41)-TPK%KTC19(:)-TPK%KTR19(:) + PJAC(:,33,33)=-TPK%K090(:)*PCONC(:,3)-TPK%K097(:)*PCONC(:,16)-TPK%K104(:)*PCON& +&C(:,33)-TPK%K104(:)*PCONC(:,33)-TPK%K104(:)*PCONC(:,33)-TPK%K104(:)*PCONC(:,33& +&)+0.01390*TPK%K105(:)*PCONC(:,34)-TPK%K105(:)*PCONC(:,34)-TPK%K106(:)*PCONC(:,& +&35)-TPK%K107(:)*PCONC(:,36)-TPK%K108(:)*PCONC(:,39)+0.56031*TPK%K109(:)*PCONC(& +&:,40)-TPK%K109(:)*PCONC(:,40)-TPK%K110(:)*PCONC(:,41)-TPK%K119(:)*PCONC(:,5)-T& +&PK%K127(:)*PCONC(:,42)-TPK%KTC19(:)-TPK%KTR19(:) ! !MO2/ALKAP=+0.09016*K091*<NO>+0.01390*K105*<MO2>-K105*<MO2>+0.51480*K111*<CARBO !P>+0.09731*K120*<NO3> - PJAC(:,32,33)=+0.09016*TPK%K091(:)*PCONC(:,3)+0.01390*TPK%K105(:)*PCONC(:,32)-& -&TPK%K105(:)*PCONC(:,32)+0.51480*TPK%K111(:)*PCONC(:,39)+0.09731*TPK%K120(:)*PC& + PJAC(:,33,34)=+0.09016*TPK%K091(:)*PCONC(:,3)+0.01390*TPK%K105(:)*PCONC(:,33)-& +&TPK%K105(:)*PCONC(:,33)+0.51480*TPK%K111(:)*PCONC(:,40)+0.09731*TPK%K120(:)*PC& &ONC(:,5) ! !MO2/ALKEP=-K106*<MO2>+0.50078*K112*<CARBOP> - PJAC(:,32,34)=-TPK%K106(:)*PCONC(:,32)+0.50078*TPK%K112(:)*PCONC(:,39) + PJAC(:,33,35)=-TPK%K106(:)*PCONC(:,33)+0.50078*TPK%K112(:)*PCONC(:,40) ! !MO2/BIOP=-K107*<MO2>+0.50600*K113*<CARBOP> - PJAC(:,32,35)=-TPK%K107(:)*PCONC(:,32)+0.50600*TPK%K113(:)*PCONC(:,39) + PJAC(:,33,36)=-TPK%K107(:)*PCONC(:,33)+0.50600*TPK%K113(:)*PCONC(:,40) ! !MO2/PHO=0.0 ! !MO2/ADD=0.0 ! !MO2/AROP=-K108*<MO2>+K114*<CARBOP> - PJAC(:,32,38)=-TPK%K108(:)*PCONC(:,32)+TPK%K114(:)*PCONC(:,39) + PJAC(:,33,39)=-TPK%K108(:)*PCONC(:,33)+TPK%K114(:)*PCONC(:,40) ! !MO2/CARBOP=+0.78134*K095*<NO>+0.56031*K109*<MO2>-K109*<MO2>+0.51480*K111*<ALKA !P>+0.50078*K112*<ALKEP>+0.50600*K113*<BIOP>+K114*<AROP>+1.66702*K115*<CARBOP>+ !1.66702*K115*<CARBOP>+0.51037*K116*<OLN>+0.91910*K124*<NO3>+K128*<XO2> - PJAC(:,32,39)=+0.78134*TPK%K095(:)*PCONC(:,3)+0.56031*TPK%K109(:)*PCONC(:,32)-& -&TPK%K109(:)*PCONC(:,32)+0.51480*TPK%K111(:)*PCONC(:,33)+0.50078*TPK%K112(:)*PC& -&ONC(:,34)+0.50600*TPK%K113(:)*PCONC(:,35)+TPK%K114(:)*PCONC(:,38)+1.66702*TPK%& -&K115(:)*PCONC(:,39)+1.66702*TPK%K115(:)*PCONC(:,39)+0.51037*TPK%K116(:)*PCONC(& -&:,40)+0.91910*TPK%K124(:)*PCONC(:,5)+TPK%K128(:)*PCONC(:,41) + PJAC(:,33,40)=+0.78134*TPK%K095(:)*PCONC(:,3)+0.56031*TPK%K109(:)*PCONC(:,33)-& +&TPK%K109(:)*PCONC(:,33)+0.51480*TPK%K111(:)*PCONC(:,34)+0.50078*TPK%K112(:)*PC& +&ONC(:,35)+0.50600*TPK%K113(:)*PCONC(:,36)+TPK%K114(:)*PCONC(:,39)+1.66702*TPK%& +&K115(:)*PCONC(:,40)+1.66702*TPK%K115(:)*PCONC(:,40)+0.51037*TPK%K116(:)*PCONC(& +&:,41)+0.91910*TPK%K124(:)*PCONC(:,5)+TPK%K128(:)*PCONC(:,42) ! !MO2/OLN=-K110*<MO2>+0.51037*K116*<CARBOP> - PJAC(:,32,40)=-TPK%K110(:)*PCONC(:,32)+0.51037*TPK%K116(:)*PCONC(:,39) + PJAC(:,33,41)=-TPK%K110(:)*PCONC(:,33)+0.51037*TPK%K116(:)*PCONC(:,40) ! !MO2/XO2=-K127*<MO2>+K128*<CARBOP> - PJAC(:,32,41)=-TPK%K127(:)*PCONC(:,32)+TPK%K128(:)*PCONC(:,39) + PJAC(:,33,42)=-TPK%K127(:)*PCONC(:,33)+TPK%K128(:)*PCONC(:,40) ! !MO2/WC_O3=0.0 ! @@ -12548,7 +12857,7 @@ SUBROUTINE SUBJ6 !MO2/WC_ORA2=0.0 ! !MO2/WC_MO2=+KTC39 - PJAC(:,32,60)=+TPK%KTC39(:) + PJAC(:,33,61)=+TPK%KTC39(:) ! !MO2/WC_OP1=0.0 ! @@ -12599,7 +12908,7 @@ SUBROUTINE SUBJ6 !MO2/WR_ORA2=0.0 ! !MO2/WR_MO2=+KTR39 - PJAC(:,32,85)=+TPK%KTR39(:) + PJAC(:,33,86)=+TPK%KTR39(:) ! !MO2/WR_OP1=0.0 ! @@ -12614,17 +12923,17 @@ SUBROUTINE SUBJ6 !MO2/WR_AHMS=0.0 ! !ALKAP/O3=+0.09815*K079*<ALKE>+0.00000*K080*<BIO> - PJAC(:,33,1)=+0.09815*TPK%K079(:)*PCONC(:,19)+0.00000*TPK%K080(:)*PCONC(:,20) + PJAC(:,34,1)=+0.09815*TPK%K079(:)*PCONC(:,20)+0.00000*TPK%K080(:)*PCONC(:,21) ! !ALKAP/H2O2=0.0 ! !ALKAP/NO=+0.08187*K091*<ALKAP>-K091*<ALKAP> - PJAC(:,33,3)=+0.08187*TPK%K091(:)*PCONC(:,33)-TPK%K091(:)*PCONC(:,33) + PJAC(:,34,3)=+0.08187*TPK%K091(:)*PCONC(:,34)-TPK%K091(:)*PCONC(:,34) ! !ALKAP/NO2=0.0 ! !ALKAP/NO3=+0.08994*K120*<ALKAP>-K120*<ALKAP> - PJAC(:,33,5)=+0.08994*TPK%K120(:)*PCONC(:,33)-TPK%K120(:)*PCONC(:,33) + PJAC(:,34,5)=+0.08994*TPK%K120(:)*PCONC(:,34)-TPK%K120(:)*PCONC(:,34) ! !ALKAP/N2O5=0.0 ! @@ -12636,6 +12945,8 @@ SUBROUTINE SUBJ6 ! !ALKAP/NH3=0.0 ! +!ALKAP/DMS=0.0 +! !ALKAP/SO2=0.0 ! !ALKAP/SULF=0.0 @@ -12644,25 +12955,25 @@ SUBROUTINE SUBJ6 ! !ALKAP/OH=+K057*<ETH>+0.87811*K058*<ALKA>+0.40341*K069*<OP2>+1.00000*K071*<ONIT !> - PJAC(:,33,14)=+TPK%K057(:)*PCONC(:,17)+0.87811*TPK%K058(:)*PCONC(:,18)+0.40341& -&*TPK%K069(:)*PCONC(:,29)+1.00000*TPK%K071(:)*PCONC(:,26) + PJAC(:,34,15)=+TPK%K057(:)*PCONC(:,18)+0.87811*TPK%K058(:)*PCONC(:,19)+0.40341& +&*TPK%K069(:)*PCONC(:,30)+1.00000*TPK%K071(:)*PCONC(:,27) ! !ALKAP/HO2=-K098*<ALKAP> - PJAC(:,33,15)=-TPK%K098(:)*PCONC(:,33) + PJAC(:,34,16)=-TPK%K098(:)*PCONC(:,34) ! !ALKAP/CH4=0.0 ! !ALKAP/ETH=+K057*<OH> - PJAC(:,33,17)=+TPK%K057(:)*PCONC(:,14) + PJAC(:,34,18)=+TPK%K057(:)*PCONC(:,15) ! !ALKAP/ALKA=+0.87811*K058*<OH> - PJAC(:,33,18)=+0.87811*TPK%K058(:)*PCONC(:,14) + PJAC(:,34,19)=+0.87811*TPK%K058(:)*PCONC(:,15) ! !ALKAP/ALKE=+0.09815*K079*<O3> - PJAC(:,33,19)=+0.09815*TPK%K079(:)*PCONC(:,1) + PJAC(:,34,20)=+0.09815*TPK%K079(:)*PCONC(:,1) ! !ALKAP/BIO=+0.00000*K080*<O3> - PJAC(:,33,20)=+0.00000*TPK%K080(:)*PCONC(:,1) + PJAC(:,34,21)=+0.00000*TPK%K080(:)*PCONC(:,1) ! !ALKAP/ARO=0.0 ! @@ -12671,32 +12982,32 @@ SUBROUTINE SUBJ6 !ALKAP/ALD=0.0 ! !ALKAP/KET=+1.00000*K015 - PJAC(:,33,24)=+1.00000*TPK%K015(:) + PJAC(:,34,25)=+1.00000*TPK%K015(:) ! !ALKAP/CARBO=0.0 ! !ALKAP/ONIT=+1.00000*K071*<OH> - PJAC(:,33,26)=+1.00000*TPK%K071(:)*PCONC(:,14) + PJAC(:,34,27)=+1.00000*TPK%K071(:)*PCONC(:,15) ! !ALKAP/PAN=0.0 ! !ALKAP/OP1=0.0 ! !ALKAP/OP2=+0.40341*K069*<OH> - PJAC(:,33,29)=+0.40341*TPK%K069(:)*PCONC(:,14) + PJAC(:,34,30)=+0.40341*TPK%K069(:)*PCONC(:,15) ! !ALKAP/ORA1=0.0 ! !ALKAP/ORA2=0.0 ! !ALKAP/MO2=+0.00385*K105*<ALKAP>-K105*<ALKAP> - PJAC(:,33,32)=+0.00385*TPK%K105(:)*PCONC(:,33)-TPK%K105(:)*PCONC(:,33) + PJAC(:,34,33)=+0.00385*TPK%K105(:)*PCONC(:,34)-TPK%K105(:)*PCONC(:,34) ! !ALKAP/ALKAP=+0.08187*K091*<NO>-K091*<NO>-K098*<HO2>+0.00385*K105*<MO2>-K105*<M !O2>+0.00828*K111*<CARBOP>-K111*<CARBOP>+0.08994*K120*<NO3>-K120*<NO3> - PJAC(:,33,33)=+0.08187*TPK%K091(:)*PCONC(:,3)-TPK%K091(:)*PCONC(:,3)-TPK%K098(& -&:)*PCONC(:,15)+0.00385*TPK%K105(:)*PCONC(:,32)-TPK%K105(:)*PCONC(:,32)+0.00828& -&*TPK%K111(:)*PCONC(:,39)-TPK%K111(:)*PCONC(:,39)+0.08994*TPK%K120(:)*PCONC(:,5& + PJAC(:,34,34)=+0.08187*TPK%K091(:)*PCONC(:,3)-TPK%K091(:)*PCONC(:,3)-TPK%K098(& +&:)*PCONC(:,16)+0.00385*TPK%K105(:)*PCONC(:,33)-TPK%K105(:)*PCONC(:,33)+0.00828& +&*TPK%K111(:)*PCONC(:,40)-TPK%K111(:)*PCONC(:,40)+0.08994*TPK%K120(:)*PCONC(:,5& &)-TPK%K120(:)*PCONC(:,5) ! !ALKAP/ALKEP=0.0 @@ -12710,7 +13021,7 @@ SUBROUTINE SUBJ6 !ALKAP/AROP=0.0 ! !ALKAP/CARBOP=+0.00828*K111*<ALKAP>-K111*<ALKAP> - PJAC(:,33,39)=+0.00828*TPK%K111(:)*PCONC(:,33)-TPK%K111(:)*PCONC(:,33) + PJAC(:,34,40)=+0.00828*TPK%K111(:)*PCONC(:,34)-TPK%K111(:)*PCONC(:,34) ! !ALKAP/OLN=0.0 ! @@ -12821,12 +13132,12 @@ SUBROUTINE SUBJ6 !ALKEP/H2O2=0.0 ! !ALKEP/NO=-K092*<ALKEP> - PJAC(:,34,3)=-TPK%K092(:)*PCONC(:,34) + PJAC(:,35,3)=-TPK%K092(:)*PCONC(:,35) ! !ALKEP/NO2=0.0 ! !ALKEP/NO3=-K121*<ALKEP> - PJAC(:,34,5)=-TPK%K121(:)*PCONC(:,34) + PJAC(:,35,5)=-TPK%K121(:)*PCONC(:,35) ! !ALKEP/N2O5=0.0 ! @@ -12838,6 +13149,8 @@ SUBROUTINE SUBJ6 ! !ALKEP/NH3=0.0 ! +!ALKEP/DMS=0.0 +! !ALKEP/SO2=0.0 ! !ALKEP/SULF=0.0 @@ -12845,10 +13158,10 @@ SUBROUTINE SUBJ6 !ALKEP/CO=0.0 ! !ALKEP/OH=+1.02529*K059*<ALKE> - PJAC(:,34,14)=+1.02529*TPK%K059(:)*PCONC(:,19) + PJAC(:,35,15)=+1.02529*TPK%K059(:)*PCONC(:,20) ! !ALKEP/HO2=-K099*<ALKEP> - PJAC(:,34,15)=-TPK%K099(:)*PCONC(:,34) + PJAC(:,35,16)=-TPK%K099(:)*PCONC(:,35) ! !ALKEP/CH4=0.0 ! @@ -12857,7 +13170,7 @@ SUBROUTINE SUBJ6 !ALKEP/ALKA=0.0 ! !ALKEP/ALKE=+1.02529*K059*<OH> - PJAC(:,34,19)=+1.02529*TPK%K059(:)*PCONC(:,14) + PJAC(:,35,20)=+1.02529*TPK%K059(:)*PCONC(:,15) ! !ALKEP/BIO=0.0 ! @@ -12884,13 +13197,13 @@ SUBROUTINE SUBJ6 !ALKEP/ORA2=0.0 ! !ALKEP/MO2=-K106*<ALKEP> - PJAC(:,34,32)=-TPK%K106(:)*PCONC(:,34) + PJAC(:,35,33)=-TPK%K106(:)*PCONC(:,35) ! !ALKEP/ALKAP=0.0 ! !ALKEP/ALKEP=-K092*<NO>-K099*<HO2>-K106*<MO2>-K112*<CARBOP>-K121*<NO3> - PJAC(:,34,34)=-TPK%K092(:)*PCONC(:,3)-TPK%K099(:)*PCONC(:,15)-TPK%K106(:)*PCON& -&C(:,32)-TPK%K112(:)*PCONC(:,39)-TPK%K121(:)*PCONC(:,5) + PJAC(:,35,35)=-TPK%K092(:)*PCONC(:,3)-TPK%K099(:)*PCONC(:,16)-TPK%K106(:)*PCON& +&C(:,33)-TPK%K112(:)*PCONC(:,40)-TPK%K121(:)*PCONC(:,5) ! !ALKEP/BIOP=0.0 ! @@ -12901,7 +13214,7 @@ SUBROUTINE SUBJ6 !ALKEP/AROP=0.0 ! !ALKEP/CARBOP=-K112*<ALKEP> - PJAC(:,34,39)=-TPK%K112(:)*PCONC(:,34) + PJAC(:,35,40)=-TPK%K112(:)*PCONC(:,35) ! !ALKEP/OLN=0.0 ! @@ -13007,17 +13320,25 @@ SUBROUTINE SUBJ6 ! !ALKEP/WR_AHMS=0.0 ! +RETURN +END SUBROUTINE SUBJ6 +! +SUBROUTINE SUBJ7 +! +!Indices 36 a 40 +! +! !BIOP/O3=0.0 ! !BIOP/H2O2=0.0 ! !BIOP/NO=-K093*<BIOP> - PJAC(:,35,3)=-TPK%K093(:)*PCONC(:,35) + PJAC(:,36,3)=-TPK%K093(:)*PCONC(:,36) ! !BIOP/NO2=0.0 ! !BIOP/NO3=-K122*<BIOP> - PJAC(:,35,5)=-TPK%K122(:)*PCONC(:,35) + PJAC(:,36,5)=-TPK%K122(:)*PCONC(:,36) ! !BIOP/N2O5=0.0 ! @@ -13029,6 +13350,8 @@ SUBROUTINE SUBJ6 ! !BIOP/NH3=0.0 ! +!BIOP/DMS=0.0 +! !BIOP/SO2=0.0 ! !BIOP/SULF=0.0 @@ -13036,10 +13359,10 @@ SUBROUTINE SUBJ6 !BIOP/CO=0.0 ! !BIOP/OH=+0.00000*K059*<ALKE>+1.00000*K060*<BIO> - PJAC(:,35,14)=+0.00000*TPK%K059(:)*PCONC(:,19)+1.00000*TPK%K060(:)*PCONC(:,20) + PJAC(:,36,15)=+0.00000*TPK%K059(:)*PCONC(:,20)+1.00000*TPK%K060(:)*PCONC(:,21) ! !BIOP/HO2=-K0100*<BIOP> - PJAC(:,35,15)=-TPK%K0100(:)*PCONC(:,35) + PJAC(:,36,16)=-TPK%K0100(:)*PCONC(:,36) ! !BIOP/CH4=0.0 ! @@ -13048,10 +13371,10 @@ SUBROUTINE SUBJ6 !BIOP/ALKA=0.0 ! !BIOP/ALKE=+0.00000*K059*<OH> - PJAC(:,35,19)=+0.00000*TPK%K059(:)*PCONC(:,14) + PJAC(:,36,20)=+0.00000*TPK%K059(:)*PCONC(:,15) ! !BIOP/BIO=+1.00000*K060*<OH> - PJAC(:,35,20)=+1.00000*TPK%K060(:)*PCONC(:,14) + PJAC(:,36,21)=+1.00000*TPK%K060(:)*PCONC(:,15) ! !BIOP/ARO=0.0 ! @@ -13076,15 +13399,15 @@ SUBROUTINE SUBJ6 !BIOP/ORA2=0.0 ! !BIOP/MO2=-K107*<BIOP> - PJAC(:,35,32)=-TPK%K107(:)*PCONC(:,35) + PJAC(:,36,33)=-TPK%K107(:)*PCONC(:,36) ! !BIOP/ALKAP=0.0 ! !BIOP/ALKEP=0.0 ! !BIOP/BIOP=-K093*<NO>-K0100*<HO2>-K107*<MO2>-K113*<CARBOP>-K122*<NO3> - PJAC(:,35,35)=-TPK%K093(:)*PCONC(:,3)-TPK%K0100(:)*PCONC(:,15)-TPK%K107(:)*PCO& -&NC(:,32)-TPK%K113(:)*PCONC(:,39)-TPK%K122(:)*PCONC(:,5) + PJAC(:,36,36)=-TPK%K093(:)*PCONC(:,3)-TPK%K0100(:)*PCONC(:,16)-TPK%K107(:)*PCO& +&NC(:,33)-TPK%K113(:)*PCONC(:,40)-TPK%K122(:)*PCONC(:,5) ! !BIOP/PHO=0.0 ! @@ -13093,7 +13416,7 @@ SUBROUTINE SUBJ6 !BIOP/AROP=0.0 ! !BIOP/CARBOP=-K113*<BIOP> - PJAC(:,35,39)=-TPK%K113(:)*PCONC(:,35) + PJAC(:,36,40)=-TPK%K113(:)*PCONC(:,36) ! !BIOP/OLN=0.0 ! @@ -13199,14 +13522,6 @@ SUBROUTINE SUBJ6 ! !BIOP/WR_AHMS=0.0 ! -RETURN -END SUBROUTINE SUBJ6 -! -SUBROUTINE SUBJ7 -! -!Indices 36 a 40 -! -! !PHO/O3=0.0 ! !PHO/H2O2=0.0 @@ -13214,10 +13529,10 @@ SUBROUTINE SUBJ7 !PHO/NO=0.0 ! !PHO/NO2=-K083*<PHO> - PJAC(:,36,4)=-TPK%K083(:)*PCONC(:,36) + PJAC(:,37,4)=-TPK%K083(:)*PCONC(:,37) ! !PHO/NO3=+K075*<ARO> - PJAC(:,36,5)=+TPK%K075(:)*PCONC(:,21) + PJAC(:,37,5)=+TPK%K075(:)*PCONC(:,22) ! !PHO/N2O5=0.0 ! @@ -13229,6 +13544,8 @@ SUBROUTINE SUBJ7 ! !PHO/NH3=0.0 ! +!PHO/DMS=0.0 +! !PHO/SO2=0.0 ! !PHO/SULF=0.0 @@ -13236,10 +13553,10 @@ SUBROUTINE SUBJ7 !PHO/CO=0.0 ! !PHO/OH=+0.00276*K061*<ARO> - PJAC(:,36,14)=+0.00276*TPK%K061(:)*PCONC(:,21) + PJAC(:,37,15)=+0.00276*TPK%K061(:)*PCONC(:,22) ! !PHO/HO2=-K084*<PHO> - PJAC(:,36,15)=-TPK%K084(:)*PCONC(:,36) + PJAC(:,37,16)=-TPK%K084(:)*PCONC(:,37) ! !PHO/CH4=0.0 ! @@ -13252,7 +13569,7 @@ SUBROUTINE SUBJ7 !PHO/BIO=0.0 ! !PHO/ARO=+0.00276*K061*<OH>+K075*<NO3> - PJAC(:,36,21)=+0.00276*TPK%K061(:)*PCONC(:,14)+TPK%K075(:)*PCONC(:,5) + PJAC(:,37,22)=+0.00276*TPK%K061(:)*PCONC(:,15)+TPK%K075(:)*PCONC(:,5) ! !PHO/HCHO=0.0 ! @@ -13283,7 +13600,7 @@ SUBROUTINE SUBJ7 !PHO/BIOP=0.0 ! !PHO/PHO=-K083*<NO2>-K084*<HO2> - PJAC(:,36,36)=-TPK%K083(:)*PCONC(:,4)-TPK%K084(:)*PCONC(:,15) + PJAC(:,37,37)=-TPK%K083(:)*PCONC(:,4)-TPK%K084(:)*PCONC(:,16) ! !PHO/ADD=0.0 ! @@ -13396,14 +13713,14 @@ SUBROUTINE SUBJ7 !PHO/WR_AHMS=0.0 ! !ADD/O3=-K087*<ADD> - PJAC(:,37,1)=-TPK%K087(:)*PCONC(:,37) + PJAC(:,38,1)=-TPK%K087(:)*PCONC(:,38) ! !ADD/H2O2=0.0 ! !ADD/NO=0.0 ! !ADD/NO2=-K085*<ADD> - PJAC(:,37,4)=-TPK%K085(:)*PCONC(:,37) + PJAC(:,38,4)=-TPK%K085(:)*PCONC(:,38) ! !ADD/NO3=0.0 ! @@ -13417,6 +13734,8 @@ SUBROUTINE SUBJ7 ! !ADD/NH3=0.0 ! +!ADD/DMS=0.0 +! !ADD/SO2=0.0 ! !ADD/SULF=0.0 @@ -13424,7 +13743,7 @@ SUBROUTINE SUBJ7 !ADD/CO=0.0 ! !ADD/OH=+0.93968*K061*<ARO> - PJAC(:,37,14)=+0.93968*TPK%K061(:)*PCONC(:,21) + PJAC(:,38,15)=+0.93968*TPK%K061(:)*PCONC(:,22) ! !ADD/HO2=0.0 ! @@ -13439,7 +13758,7 @@ SUBROUTINE SUBJ7 !ADD/BIO=0.0 ! !ADD/ARO=+0.93968*K061*<OH> - PJAC(:,37,21)=+0.93968*TPK%K061(:)*PCONC(:,14) + PJAC(:,38,22)=+0.93968*TPK%K061(:)*PCONC(:,15) ! !ADD/HCHO=0.0 ! @@ -13472,7 +13791,7 @@ SUBROUTINE SUBJ7 !ADD/PHO=0.0 ! !ADD/ADD=-K085*<NO2>-K086*<O2>-K087*<O3> - PJAC(:,37,37)=-TPK%K085(:)*PCONC(:,4)-TPK%K086(:)*TPK%O2(:)-TPK%K087(:)*PCONC(& + PJAC(:,38,38)=-TPK%K085(:)*PCONC(:,4)-TPK%K086(:)*TPK%O2(:)-TPK%K087(:)*PCONC(& &:,1) ! !ADD/AROP=0.0 @@ -13588,12 +13907,12 @@ SUBROUTINE SUBJ7 !AROP/H2O2=0.0 ! !AROP/NO=-K094*<AROP> - PJAC(:,38,3)=-TPK%K094(:)*PCONC(:,38) + PJAC(:,39,3)=-TPK%K094(:)*PCONC(:,39) ! !AROP/NO2=0.0 ! !AROP/NO3=-K123*<AROP> - PJAC(:,38,5)=-TPK%K123(:)*PCONC(:,38) + PJAC(:,39,5)=-TPK%K123(:)*PCONC(:,39) ! !AROP/N2O5=0.0 ! @@ -13605,6 +13924,8 @@ SUBROUTINE SUBJ7 ! !AROP/NH3=0.0 ! +!AROP/DMS=0.0 +! !AROP/SO2=0.0 ! !AROP/SULF=0.0 @@ -13614,7 +13935,7 @@ SUBROUTINE SUBJ7 !AROP/OH=0.0 ! !AROP/HO2=-K0101*<AROP> - PJAC(:,38,15)=-TPK%K0101(:)*PCONC(:,38) + PJAC(:,39,16)=-TPK%K0101(:)*PCONC(:,39) ! !AROP/CH4=0.0 ! @@ -13649,7 +13970,7 @@ SUBROUTINE SUBJ7 !AROP/ORA2=0.0 ! !AROP/MO2=-K108*<AROP> - PJAC(:,38,32)=-TPK%K108(:)*PCONC(:,38) + PJAC(:,39,33)=-TPK%K108(:)*PCONC(:,39) ! !AROP/ALKAP=0.0 ! @@ -13660,14 +13981,14 @@ SUBROUTINE SUBJ7 !AROP/PHO=0.0 ! !AROP/ADD=+0.98*K086*<O2> - PJAC(:,38,37)=+0.98*TPK%K086(:)*TPK%O2(:) + PJAC(:,39,38)=+0.98*TPK%K086(:)*TPK%O2(:) ! !AROP/AROP=-K094*<NO>-K0101*<HO2>-K108*<MO2>-K114*<CARBOP>-K123*<NO3> - PJAC(:,38,38)=-TPK%K094(:)*PCONC(:,3)-TPK%K0101(:)*PCONC(:,15)-TPK%K108(:)*PCO& -&NC(:,32)-TPK%K114(:)*PCONC(:,39)-TPK%K123(:)*PCONC(:,5) + PJAC(:,39,39)=-TPK%K094(:)*PCONC(:,3)-TPK%K0101(:)*PCONC(:,16)-TPK%K108(:)*PCO& +&NC(:,33)-TPK%K114(:)*PCONC(:,40)-TPK%K123(:)*PCONC(:,5) ! !AROP/CARBOP=-K114*<AROP> - PJAC(:,38,39)=-TPK%K114(:)*PCONC(:,38) + PJAC(:,39,40)=-TPK%K114(:)*PCONC(:,39) ! !AROP/OLN=0.0 ! @@ -13775,21 +14096,21 @@ SUBROUTINE SUBJ7 ! !CARBOP/O3=+0.05705*K079*<ALKE>+0.17000*K080*<BIO>+0.27460*K081*<CARBO>+0.70000 !*K082*<PAN> - PJAC(:,39,1)=+0.05705*TPK%K079(:)*PCONC(:,19)+0.17000*TPK%K080(:)*PCONC(:,20)+& -&0.27460*TPK%K081(:)*PCONC(:,25)+0.70000*TPK%K082(:)*PCONC(:,27) + PJAC(:,40,1)=+0.05705*TPK%K079(:)*PCONC(:,20)+0.17000*TPK%K080(:)*PCONC(:,21)+& +&0.27460*TPK%K081(:)*PCONC(:,26)+0.70000*TPK%K082(:)*PCONC(:,28) ! !CARBOP/H2O2=0.0 ! !CARBOP/NO=+0.09532*K095*<CARBOP>-K095*<CARBOP> - PJAC(:,39,3)=+0.09532*TPK%K095(:)*PCONC(:,39)-TPK%K095(:)*PCONC(:,39) + PJAC(:,40,3)=+0.09532*TPK%K095(:)*PCONC(:,40)-TPK%K095(:)*PCONC(:,40) ! !CARBOP/NO2=-K088*<CARBOP> - PJAC(:,39,4)=-TPK%K088(:)*PCONC(:,39) + PJAC(:,40,4)=-TPK%K088(:)*PCONC(:,40) ! !CARBOP/NO3=+1.00000*K073*<ALD>+0.38881*K074*<CARBO>+0.03175*K124*<CARBOP>-K124 !*<CARBOP> - PJAC(:,39,5)=+1.00000*TPK%K073(:)*PCONC(:,23)+0.38881*TPK%K074(:)*PCONC(:,25)+& -&0.03175*TPK%K124(:)*PCONC(:,39)-TPK%K124(:)*PCONC(:,39) + PJAC(:,40,5)=+1.00000*TPK%K073(:)*PCONC(:,24)+0.38881*TPK%K074(:)*PCONC(:,26)+& +&0.03175*TPK%K124(:)*PCONC(:,40)-TPK%K124(:)*PCONC(:,40) ! !CARBOP/N2O5=0.0 ! @@ -13801,6 +14122,8 @@ SUBROUTINE SUBJ7 ! !CARBOP/NH3=0.0 ! +!CARBOP/DMS=0.0 +! !CARBOP/SO2=0.0 ! !CARBOP/SULF=0.0 @@ -13809,11 +14132,11 @@ SUBROUTINE SUBJ7 ! !CARBOP/OH=+1.00000*K063*<ALD>+1.00000*K064*<KET>+0.51419*K065*<CARBO>+0.05413* !K069*<OP2> - PJAC(:,39,14)=+1.00000*TPK%K063(:)*PCONC(:,23)+1.00000*TPK%K064(:)*PCONC(:,24)& -&+0.51419*TPK%K065(:)*PCONC(:,25)+0.05413*TPK%K069(:)*PCONC(:,29) + PJAC(:,40,15)=+1.00000*TPK%K063(:)*PCONC(:,24)+1.00000*TPK%K064(:)*PCONC(:,25)& +&+0.51419*TPK%K065(:)*PCONC(:,26)+0.05413*TPK%K069(:)*PCONC(:,30) ! !CARBOP/HO2=-K0102*<CARBOP> - PJAC(:,39,15)=-TPK%K0102(:)*PCONC(:,39) + PJAC(:,40,16)=-TPK%K0102(:)*PCONC(:,40) ! !CARBOP/CH4=0.0 ! @@ -13822,76 +14145,76 @@ SUBROUTINE SUBJ7 !CARBOP/ALKA=0.0 ! !CARBOP/ALKE=+0.05705*K079*<O3> - PJAC(:,39,19)=+0.05705*TPK%K079(:)*PCONC(:,1) + PJAC(:,40,20)=+0.05705*TPK%K079(:)*PCONC(:,1) ! !CARBOP/BIO=+0.17000*K080*<O3> - PJAC(:,39,20)=+0.17000*TPK%K080(:)*PCONC(:,1) + PJAC(:,40,21)=+0.17000*TPK%K080(:)*PCONC(:,1) ! !CARBOP/ARO=0.0 ! !CARBOP/HCHO=0.0 ! !CARBOP/ALD=+1.00000*K063*<OH>+1.00000*K073*<NO3> - PJAC(:,39,23)=+1.00000*TPK%K063(:)*PCONC(:,14)+1.00000*TPK%K073(:)*PCONC(:,5) + PJAC(:,40,24)=+1.00000*TPK%K063(:)*PCONC(:,15)+1.00000*TPK%K073(:)*PCONC(:,5) ! !CARBOP/KET=+1.00000*K015+1.00000*K064*<OH> - PJAC(:,39,24)=+1.00000*TPK%K015(:)+1.00000*TPK%K064(:)*PCONC(:,14) + PJAC(:,40,25)=+1.00000*TPK%K015(:)+1.00000*TPK%K064(:)*PCONC(:,15) ! !CARBOP/CARBO=+0.69622*K016+0.51419*K065*<OH>+0.38881*K074*<NO3>+0.27460*K081*< !O3> - PJAC(:,39,25)=+0.69622*TPK%K016(:)+0.51419*TPK%K065(:)*PCONC(:,14)+0.38881*TPK& + PJAC(:,40,26)=+0.69622*TPK%K016(:)+0.51419*TPK%K065(:)*PCONC(:,15)+0.38881*TPK& &%K074(:)*PCONC(:,5)+0.27460*TPK%K081(:)*PCONC(:,1) ! !CARBOP/ONIT=0.0 ! !CARBOP/PAN=+0.70000*K082*<O3>+1.00000*K089 - PJAC(:,39,27)=+0.70000*TPK%K082(:)*PCONC(:,1)+1.00000*TPK%K089(:) + PJAC(:,40,28)=+0.70000*TPK%K082(:)*PCONC(:,1)+1.00000*TPK%K089(:) ! !CARBOP/OP1=0.0 ! !CARBOP/OP2=+0.05413*K069*<OH> - PJAC(:,39,29)=+0.05413*TPK%K069(:)*PCONC(:,14) + PJAC(:,40,30)=+0.05413*TPK%K069(:)*PCONC(:,15) ! !CARBOP/ORA1=0.0 ! !CARBOP/ORA2=0.0 ! !CARBOP/MO2=+0.05954*K109*<CARBOP>-K109*<CARBOP> - PJAC(:,39,32)=+0.05954*TPK%K109(:)*PCONC(:,39)-TPK%K109(:)*PCONC(:,39) + PJAC(:,40,33)=+0.05954*TPK%K109(:)*PCONC(:,40)-TPK%K109(:)*PCONC(:,40) ! !CARBOP/ALKAP=-K111*<CARBOP> - PJAC(:,39,33)=-TPK%K111(:)*PCONC(:,39) + PJAC(:,40,34)=-TPK%K111(:)*PCONC(:,40) ! !CARBOP/ALKEP=-K112*<CARBOP> - PJAC(:,39,34)=-TPK%K112(:)*PCONC(:,39) + PJAC(:,40,35)=-TPK%K112(:)*PCONC(:,40) ! !CARBOP/BIOP=-K113*<CARBOP> - PJAC(:,39,35)=-TPK%K113(:)*PCONC(:,39) + PJAC(:,40,36)=-TPK%K113(:)*PCONC(:,40) ! !CARBOP/PHO=0.0 ! !CARBOP/ADD=0.0 ! !CARBOP/AROP=-K114*<CARBOP> - PJAC(:,39,38)=-TPK%K114(:)*PCONC(:,39) + PJAC(:,40,39)=-TPK%K114(:)*PCONC(:,40) ! !CARBOP/CARBOP=-K088*<NO2>+0.09532*K095*<NO>-K095*<NO>-K0102*<HO2>+0.05954*K109 !*<MO2>-K109*<MO2>-K111*<ALKAP>-K112*<ALKEP>-K113*<BIOP>-K114*<AROP>+0.05821*K1 !15*<CARBOP>+0.05821*K115*<CARBOP>-K115*<CARBOP>-K115*<CARBOP>-K115*<CARBOP>-K1 !15*<CARBOP>-K116*<OLN>+0.03175*K124*<NO3>-K124*<NO3>-K128*<XO2> - PJAC(:,39,39)=-TPK%K088(:)*PCONC(:,4)+0.09532*TPK%K095(:)*PCONC(:,3)-TPK%K095(& -&:)*PCONC(:,3)-TPK%K0102(:)*PCONC(:,15)+0.05954*TPK%K109(:)*PCONC(:,32)-TPK%K10& -&9(:)*PCONC(:,32)-TPK%K111(:)*PCONC(:,33)-TPK%K112(:)*PCONC(:,34)-TPK%K113(:)*P& -&CONC(:,35)-TPK%K114(:)*PCONC(:,38)+0.05821*TPK%K115(:)*PCONC(:,39)+0.05821*TPK& -&%K115(:)*PCONC(:,39)-TPK%K115(:)*PCONC(:,39)-TPK%K115(:)*PCONC(:,39)-TPK%K115(& -&:)*PCONC(:,39)-TPK%K115(:)*PCONC(:,39)-TPK%K116(:)*PCONC(:,40)+0.03175*TPK%K12& -&4(:)*PCONC(:,5)-TPK%K124(:)*PCONC(:,5)-TPK%K128(:)*PCONC(:,41) + PJAC(:,40,40)=-TPK%K088(:)*PCONC(:,4)+0.09532*TPK%K095(:)*PCONC(:,3)-TPK%K095(& +&:)*PCONC(:,3)-TPK%K0102(:)*PCONC(:,16)+0.05954*TPK%K109(:)*PCONC(:,33)-TPK%K10& +&9(:)*PCONC(:,33)-TPK%K111(:)*PCONC(:,34)-TPK%K112(:)*PCONC(:,35)-TPK%K113(:)*P& +&CONC(:,36)-TPK%K114(:)*PCONC(:,39)+0.05821*TPK%K115(:)*PCONC(:,40)+0.05821*TPK& +&%K115(:)*PCONC(:,40)-TPK%K115(:)*PCONC(:,40)-TPK%K115(:)*PCONC(:,40)-TPK%K115(& +&:)*PCONC(:,40)-TPK%K115(:)*PCONC(:,40)-TPK%K116(:)*PCONC(:,41)+0.03175*TPK%K12& +&4(:)*PCONC(:,5)-TPK%K124(:)*PCONC(:,5)-TPK%K128(:)*PCONC(:,42) ! !CARBOP/OLN=-K116*<CARBOP> - PJAC(:,39,40)=-TPK%K116(:)*PCONC(:,39) + PJAC(:,40,41)=-TPK%K116(:)*PCONC(:,40) ! !CARBOP/XO2=-K128*<CARBOP> - PJAC(:,39,41)=-TPK%K128(:)*PCONC(:,39) + PJAC(:,40,42)=-TPK%K128(:)*PCONC(:,40) ! !CARBOP/WC_O3=0.0 ! @@ -13993,19 +14316,27 @@ SUBROUTINE SUBJ7 ! !CARBOP/WR_AHMS=0.0 ! +RETURN +END SUBROUTINE SUBJ7 +! +SUBROUTINE SUBJ8 +! +!Indices 41 a 45 +! +! !OLN/O3=0.0 ! !OLN/H2O2=0.0 ! !OLN/NO=-K096*<OLN> - PJAC(:,40,3)=-TPK%K096(:)*PCONC(:,40) + PJAC(:,41,3)=-TPK%K096(:)*PCONC(:,41) ! !OLN/NO2=0.0 ! !OLN/NO3=+0.00000*K074*<CARBO>+0.93768*K076*<ALKE>+1.00000*K077*<BIO>-K125*<OLN !> - PJAC(:,40,5)=+0.00000*TPK%K074(:)*PCONC(:,25)+0.93768*TPK%K076(:)*PCONC(:,19)+& -&1.00000*TPK%K077(:)*PCONC(:,20)-TPK%K125(:)*PCONC(:,40) + PJAC(:,41,5)=+0.00000*TPK%K074(:)*PCONC(:,26)+0.93768*TPK%K076(:)*PCONC(:,20)+& +&1.00000*TPK%K077(:)*PCONC(:,21)-TPK%K125(:)*PCONC(:,41) ! !OLN/N2O5=0.0 ! @@ -14017,6 +14348,8 @@ SUBROUTINE SUBJ7 ! !OLN/NH3=0.0 ! +!OLN/DMS=0.0 +! !OLN/SO2=0.0 ! !OLN/SULF=0.0 @@ -14026,7 +14359,7 @@ SUBROUTINE SUBJ7 !OLN/OH=0.0 ! !OLN/HO2=-K103*<OLN> - PJAC(:,40,15)=-TPK%K103(:)*PCONC(:,40) + PJAC(:,41,16)=-TPK%K103(:)*PCONC(:,41) ! !OLN/CH4=0.0 ! @@ -14035,10 +14368,10 @@ SUBROUTINE SUBJ7 !OLN/ALKA=0.0 ! !OLN/ALKE=+0.93768*K076*<NO3> - PJAC(:,40,19)=+0.93768*TPK%K076(:)*PCONC(:,5) + PJAC(:,41,20)=+0.93768*TPK%K076(:)*PCONC(:,5) ! !OLN/BIO=+1.00000*K077*<NO3> - PJAC(:,40,20)=+1.00000*TPK%K077(:)*PCONC(:,5) + PJAC(:,41,21)=+1.00000*TPK%K077(:)*PCONC(:,5) ! !OLN/ARO=0.0 ! @@ -14049,7 +14382,7 @@ SUBROUTINE SUBJ7 !OLN/KET=0.0 ! !OLN/CARBO=+0.00000*K074*<NO3> - PJAC(:,40,25)=+0.00000*TPK%K074(:)*PCONC(:,5) + PJAC(:,41,26)=+0.00000*TPK%K074(:)*PCONC(:,5) ! !OLN/ONIT=0.0 ! @@ -14064,7 +14397,7 @@ SUBROUTINE SUBJ7 !OLN/ORA2=0.0 ! !OLN/MO2=-K110*<OLN> - PJAC(:,40,32)=-TPK%K110(:)*PCONC(:,40) + PJAC(:,41,33)=-TPK%K110(:)*PCONC(:,41) ! !OLN/ALKAP=0.0 ! @@ -14079,14 +14412,14 @@ SUBROUTINE SUBJ7 !OLN/AROP=0.0 ! !OLN/CARBOP=-K116*<OLN> - PJAC(:,40,39)=-TPK%K116(:)*PCONC(:,40) + PJAC(:,41,40)=-TPK%K116(:)*PCONC(:,41) ! !OLN/OLN=-K096*<NO>-K103*<HO2>-K110*<MO2>-K116*<CARBOP>-K117*<OLN>-K117*<OLN>-K !117*<OLN>-K117*<OLN>-K118*<OLN>-K118*<OLN>-K118*<OLN>-K118*<OLN>-K125*<NO3> - PJAC(:,40,40)=-TPK%K096(:)*PCONC(:,3)-TPK%K103(:)*PCONC(:,15)-TPK%K110(:)*PCON& -&C(:,32)-TPK%K116(:)*PCONC(:,39)-TPK%K117(:)*PCONC(:,40)-TPK%K117(:)*PCONC(:,40& -&)-TPK%K117(:)*PCONC(:,40)-TPK%K117(:)*PCONC(:,40)-TPK%K118(:)*PCONC(:,40)-TPK%& -&K118(:)*PCONC(:,40)-TPK%K118(:)*PCONC(:,40)-TPK%K118(:)*PCONC(:,40)-TPK%K125(:& + PJAC(:,41,41)=-TPK%K096(:)*PCONC(:,3)-TPK%K103(:)*PCONC(:,16)-TPK%K110(:)*PCON& +&C(:,33)-TPK%K116(:)*PCONC(:,40)-TPK%K117(:)*PCONC(:,41)-TPK%K117(:)*PCONC(:,41& +&)-TPK%K117(:)*PCONC(:,41)-TPK%K117(:)*PCONC(:,41)-TPK%K118(:)*PCONC(:,41)-TPK%& +&K118(:)*PCONC(:,41)-TPK%K118(:)*PCONC(:,41)-TPK%K118(:)*PCONC(:,41)-TPK%K125(:& &)*PCONC(:,5) ! !OLN/XO2=0.0 @@ -14191,29 +14524,21 @@ SUBROUTINE SUBJ7 ! !OLN/WR_AHMS=0.0 ! -RETURN -END SUBROUTINE SUBJ7 -! -SUBROUTINE SUBJ8 -! -!Indices 41 a 45 -! -! !XO2/O3=+0.00000*K079*<ALKE>+0.13000*K080*<BIO> - PJAC(:,41,1)=+0.00000*TPK%K079(:)*PCONC(:,19)+0.13000*TPK%K080(:)*PCONC(:,20) + PJAC(:,42,1)=+0.00000*TPK%K079(:)*PCONC(:,20)+0.13000*TPK%K080(:)*PCONC(:,21) ! !XO2/H2O2=0.0 ! !XO2/NO=+0.13007*K091*<ALKAP>+0.02563*K095*<CARBOP>-K130*<XO2> - PJAC(:,41,3)=+0.13007*TPK%K091(:)*PCONC(:,33)+0.02563*TPK%K095(:)*PCONC(:,39)-& -&TPK%K130(:)*PCONC(:,41) + PJAC(:,42,3)=+0.13007*TPK%K091(:)*PCONC(:,34)+0.02563*TPK%K095(:)*PCONC(:,40)-& +&TPK%K130(:)*PCONC(:,42) ! !XO2/NO2=0.0 ! !XO2/NO3=+0.10530*K074*<CARBO>+K078*<PAN>+0.16271*K120*<ALKAP>+0.01021*K124*<CA !RBOP>-K131*<XO2> - PJAC(:,41,5)=+0.10530*TPK%K074(:)*PCONC(:,25)+TPK%K078(:)*PCONC(:,27)+0.16271*& -&TPK%K120(:)*PCONC(:,33)+0.01021*TPK%K124(:)*PCONC(:,39)-TPK%K131(:)*PCONC(:,41& + PJAC(:,42,5)=+0.10530*TPK%K074(:)*PCONC(:,26)+TPK%K078(:)*PCONC(:,28)+0.16271*& +&TPK%K120(:)*PCONC(:,34)+0.01021*TPK%K124(:)*PCONC(:,40)-TPK%K131(:)*PCONC(:,42& &) ! !XO2/N2O5=0.0 @@ -14226,6 +14551,8 @@ SUBROUTINE SUBJ8 ! !XO2/NH3=0.0 ! +!XO2/DMS=0.0 +! !XO2/SO2=0.0 ! !XO2/SULF=0.0 @@ -14233,11 +14560,11 @@ SUBROUTINE SUBJ8 !XO2/CO=0.0 ! !XO2/OH=+0.10318*K061*<ARO>+0.10162*K065*<CARBO>+0.09333*K069*<OP2>+K070*<PAN> - PJAC(:,41,14)=+0.10318*TPK%K061(:)*PCONC(:,21)+0.10162*TPK%K065(:)*PCONC(:,25)& -&+0.09333*TPK%K069(:)*PCONC(:,29)+TPK%K070(:)*PCONC(:,27) + PJAC(:,42,15)=+0.10318*TPK%K061(:)*PCONC(:,22)+0.10162*TPK%K065(:)*PCONC(:,26)& +&+0.09333*TPK%K069(:)*PCONC(:,30)+TPK%K070(:)*PCONC(:,28) ! !XO2/HO2=-K126*<XO2> - PJAC(:,41,15)=-TPK%K126(:)*PCONC(:,41) + PJAC(:,42,16)=-TPK%K126(:)*PCONC(:,42) ! !XO2/CH4=0.0 ! @@ -14246,13 +14573,13 @@ SUBROUTINE SUBJ8 !XO2/ALKA=0.0 ! !XO2/ALKE=+0.00000*K079*<O3> - PJAC(:,41,19)=+0.00000*TPK%K079(:)*PCONC(:,1) + PJAC(:,42,20)=+0.00000*TPK%K079(:)*PCONC(:,1) ! !XO2/BIO=+0.15*K054*<O3P>+0.13000*K080*<O3> - PJAC(:,41,20)=+0.15*TPK%K054(:)*TPK%O3P(:)+0.13000*TPK%K080(:)*PCONC(:,1) + PJAC(:,42,21)=+0.15*TPK%K054(:)*TPK%O3P(:)+0.13000*TPK%K080(:)*PCONC(:,1) ! !XO2/ARO=+0.10318*K061*<OH> - PJAC(:,41,21)=+0.10318*TPK%K061(:)*PCONC(:,14) + PJAC(:,42,22)=+0.10318*TPK%K061(:)*PCONC(:,15) ! !XO2/HCHO=0.0 ! @@ -14261,30 +14588,30 @@ SUBROUTINE SUBJ8 !XO2/KET=0.0 ! !XO2/CARBO=+0.10162*K065*<OH>+0.10530*K074*<NO3> - PJAC(:,41,25)=+0.10162*TPK%K065(:)*PCONC(:,14)+0.10530*TPK%K074(:)*PCONC(:,5) + PJAC(:,42,26)=+0.10162*TPK%K065(:)*PCONC(:,15)+0.10530*TPK%K074(:)*PCONC(:,5) ! !XO2/ONIT=0.0 ! !XO2/PAN=+K070*<OH>+K078*<NO3> - PJAC(:,41,27)=+TPK%K070(:)*PCONC(:,14)+TPK%K078(:)*PCONC(:,5) + PJAC(:,42,28)=+TPK%K070(:)*PCONC(:,15)+TPK%K078(:)*PCONC(:,5) ! !XO2/OP1=0.0 ! !XO2/OP2=+0.09333*K069*<OH> - PJAC(:,41,29)=+0.09333*TPK%K069(:)*PCONC(:,14) + PJAC(:,42,30)=+0.09333*TPK%K069(:)*PCONC(:,15) ! !XO2/ORA1=0.0 ! !XO2/ORA2=0.0 ! !XO2/MO2=+0.13370*K105*<ALKAP>+0.02212*K109*<CARBOP>-K127*<XO2> - PJAC(:,41,32)=+0.13370*TPK%K105(:)*PCONC(:,33)+0.02212*TPK%K109(:)*PCONC(:,39)& -&-TPK%K127(:)*PCONC(:,41) + PJAC(:,42,33)=+0.13370*TPK%K105(:)*PCONC(:,34)+0.02212*TPK%K109(:)*PCONC(:,40)& +&-TPK%K127(:)*PCONC(:,42) ! !XO2/ALKAP=+0.13007*K091*<NO>+0.13370*K105*<MO2>+0.11306*K111*<CARBOP>+0.16271* !K120*<NO3> - PJAC(:,41,33)=+0.13007*TPK%K091(:)*PCONC(:,3)+0.13370*TPK%K105(:)*PCONC(:,32)+& -&0.11306*TPK%K111(:)*PCONC(:,39)+0.16271*TPK%K120(:)*PCONC(:,5) + PJAC(:,42,34)=+0.13007*TPK%K091(:)*PCONC(:,3)+0.13370*TPK%K105(:)*PCONC(:,33)+& +&0.11306*TPK%K111(:)*PCONC(:,40)+0.16271*TPK%K120(:)*PCONC(:,5) ! !XO2/ALKEP=0.0 ! @@ -14298,17 +14625,17 @@ SUBROUTINE SUBJ8 ! !XO2/CARBOP=+0.02563*K095*<NO>+0.02212*K109*<MO2>+0.11306*K111*<ALKAP>+0.01593* !K115*<CARBOP>+0.01593*K115*<CARBOP>+0.01021*K124*<NO3>-K128*<XO2> - PJAC(:,41,39)=+0.02563*TPK%K095(:)*PCONC(:,3)+0.02212*TPK%K109(:)*PCONC(:,32)+& -&0.11306*TPK%K111(:)*PCONC(:,33)+0.01593*TPK%K115(:)*PCONC(:,39)+0.01593*TPK%K1& -&15(:)*PCONC(:,39)+0.01021*TPK%K124(:)*PCONC(:,5)-TPK%K128(:)*PCONC(:,41) + PJAC(:,42,40)=+0.02563*TPK%K095(:)*PCONC(:,3)+0.02212*TPK%K109(:)*PCONC(:,33)+& +&0.11306*TPK%K111(:)*PCONC(:,34)+0.01593*TPK%K115(:)*PCONC(:,40)+0.01593*TPK%K1& +&15(:)*PCONC(:,40)+0.01021*TPK%K124(:)*PCONC(:,5)-TPK%K128(:)*PCONC(:,42) ! !XO2/OLN=0.0 ! !XO2/XO2=-K126*<HO2>-K127*<MO2>-K128*<CARBOP>-K129*<XO2>-K129*<XO2>-K129*<XO2>- !K129*<XO2>-K130*<NO>-K131*<NO3> - PJAC(:,41,41)=-TPK%K126(:)*PCONC(:,15)-TPK%K127(:)*PCONC(:,32)-TPK%K128(:)*PCO& -&NC(:,39)-TPK%K129(:)*PCONC(:,41)-TPK%K129(:)*PCONC(:,41)-TPK%K129(:)*PCONC(:,4& -&1)-TPK%K129(:)*PCONC(:,41)-TPK%K130(:)*PCONC(:,3)-TPK%K131(:)*PCONC(:,5) + PJAC(:,42,42)=-TPK%K126(:)*PCONC(:,16)-TPK%K127(:)*PCONC(:,33)-TPK%K128(:)*PCO& +&NC(:,40)-TPK%K129(:)*PCONC(:,42)-TPK%K129(:)*PCONC(:,42)-TPK%K129(:)*PCONC(:,4& +&2)-TPK%K129(:)*PCONC(:,42)-TPK%K130(:)*PCONC(:,3)-TPK%K131(:)*PCONC(:,5) ! !XO2/WC_O3=0.0 ! @@ -14411,7 +14738,7 @@ SUBROUTINE SUBJ8 !XO2/WR_AHMS=0.0 ! !WC_O3/O3=+KTC1 - PJAC(:,42,1)=+TPK%KTC1(:) + PJAC(:,43,1)=+TPK%KTC1(:) ! !WC_O3/H2O2=0.0 ! @@ -14431,6 +14758,8 @@ SUBROUTINE SUBJ8 ! !WC_O3/NH3=0.0 ! +!WC_O3/DMS=0.0 +! !WC_O3/SO2=0.0 ! !WC_O3/SULF=0.0 @@ -14494,7 +14823,7 @@ SUBROUTINE SUBJ8 !WC_O3/XO2=0.0 ! !WC_O3/WC_O3=-KTC21-KC6*<WC_HO2>-KC29*<WC_SO2> - PJAC(:,42,42)=-TPK%KTC21(:)-TPK%KC6(:)*PCONC(:,53)-TPK%KC29(:)*PCONC(:,55) + PJAC(:,43,43)=-TPK%KTC21(:)-TPK%KC6(:)*PCONC(:,54)-TPK%KC29(:)*PCONC(:,56) ! !WC_O3/WC_H2O2=0.0 ! @@ -14517,12 +14846,12 @@ SUBROUTINE SUBJ8 !WC_O3/WC_OH=0.0 ! !WC_O3/WC_HO2=-KC6*<WC_O3> - PJAC(:,42,53)=-TPK%KC6(:)*PCONC(:,42) + PJAC(:,43,54)=-TPK%KC6(:)*PCONC(:,43) ! !WC_O3/WC_CO2=0.0 ! !WC_O3/WC_SO2=-KC29*<WC_O3> - PJAC(:,42,55)=-TPK%KC29(:)*PCONC(:,42) + PJAC(:,43,56)=-TPK%KC29(:)*PCONC(:,43) ! !WC_O3/WC_SULF=0.0 ! @@ -14599,7 +14928,7 @@ SUBROUTINE SUBJ8 !WC_H2O2/O3=0.0 ! !WC_H2O2/H2O2=+KTC2 - PJAC(:,43,2)=+TPK%KTC2(:) + PJAC(:,44,2)=+TPK%KTC2(:) ! !WC_H2O2/NO=0.0 ! @@ -14617,6 +14946,8 @@ SUBROUTINE SUBJ8 ! !WC_H2O2/NH3=0.0 ! +!WC_H2O2/DMS=0.0 +! !WC_H2O2/SO2=0.0 ! !WC_H2O2/SULF=0.0 @@ -14682,8 +15013,8 @@ SUBROUTINE SUBJ8 !WC_H2O2/WC_O3=0.0 ! !WC_H2O2/WC_H2O2=-KTC22-KC1-KC4*<WC_OH>-KC30*<WC_SO2> - PJAC(:,43,43)=-TPK%KTC22(:)-TPK%KC1(:)-TPK%KC4(:)*PCONC(:,52)-TPK%KC30(:)*PCON& -&C(:,55) + PJAC(:,44,44)=-TPK%KTC22(:)-TPK%KC1(:)-TPK%KC4(:)*PCONC(:,53)-TPK%KC30(:)*PCON& +&C(:,56) ! !WC_H2O2/WC_NO=0.0 ! @@ -14702,16 +15033,16 @@ SUBROUTINE SUBJ8 !WC_H2O2/WC_NH3=0.0 ! !WC_H2O2/WC_OH=+KC2*<WC_OH>+KC2*<WC_OH>-KC4*<WC_H2O2> - PJAC(:,43,52)=+TPK%KC2(:)*PCONC(:,52)+TPK%KC2(:)*PCONC(:,52)-TPK%KC4(:)*PCONC(& -&:,43) + PJAC(:,44,53)=+TPK%KC2(:)*PCONC(:,53)+TPK%KC2(:)*PCONC(:,53)-TPK%KC4(:)*PCONC(& +&:,44) ! !WC_H2O2/WC_HO2=+KC5*<WC_HO2>+KC5*<WC_HO2> - PJAC(:,43,53)=+TPK%KC5(:)*PCONC(:,53)+TPK%KC5(:)*PCONC(:,53) + PJAC(:,44,54)=+TPK%KC5(:)*PCONC(:,54)+TPK%KC5(:)*PCONC(:,54) ! !WC_H2O2/WC_CO2=0.0 ! !WC_H2O2/WC_SO2=-KC30*<WC_H2O2> - PJAC(:,43,55)=-TPK%KC30(:)*PCONC(:,43) + PJAC(:,44,56)=-TPK%KC30(:)*PCONC(:,44) ! !WC_H2O2/WC_SULF=0.0 ! @@ -14790,7 +15121,7 @@ SUBROUTINE SUBJ8 !WC_NO/H2O2=0.0 ! !WC_NO/NO=+KTC3 - PJAC(:,44,3)=+TPK%KTC3(:) + PJAC(:,45,3)=+TPK%KTC3(:) ! !WC_NO/NO2=0.0 ! @@ -14806,6 +15137,8 @@ SUBROUTINE SUBJ8 ! !WC_NO/NH3=0.0 ! +!WC_NO/DMS=0.0 +! !WC_NO/SO2=0.0 ! !WC_NO/SULF=0.0 @@ -14873,7 +15206,7 @@ SUBROUTINE SUBJ8 !WC_NO/WC_H2O2=0.0 ! !WC_NO/WC_NO=-KTC23 - PJAC(:,44,44)=-TPK%KTC23(:) + PJAC(:,45,45)=-TPK%KTC23(:) ! !WC_NO/WC_NO2=0.0 ! @@ -14969,6 +15302,14 @@ SUBROUTINE SUBJ8 ! !WC_NO/WR_AHMS=0.0 ! +RETURN +END SUBROUTINE SUBJ8 +! +SUBROUTINE SUBJ9 +! +!Indices 46 a 50 +! +! !WC_NO2/O3=0.0 ! !WC_NO2/H2O2=0.0 @@ -14976,7 +15317,7 @@ SUBROUTINE SUBJ8 !WC_NO2/NO=0.0 ! !WC_NO2/NO2=+KTC4 - PJAC(:,45,4)=+TPK%KTC4(:) + PJAC(:,46,4)=+TPK%KTC4(:) ! !WC_NO2/NO3=0.0 ! @@ -14990,6 +15331,8 @@ SUBROUTINE SUBJ8 ! !WC_NO2/NH3=0.0 ! +!WC_NO2/DMS=0.0 +! !WC_NO2/SO2=0.0 ! !WC_NO2/SULF=0.0 @@ -15059,28 +15402,28 @@ SUBROUTINE SUBJ8 !WC_NO2/WC_NO=0.0 ! !WC_NO2/WC_NO2=-KTC24-KC9*<WC_HO2> - PJAC(:,45,45)=-TPK%KTC24(:)-TPK%KC9(:)*PCONC(:,53) + PJAC(:,46,46)=-TPK%KTC24(:)-TPK%KC9(:)*PCONC(:,54) ! !WC_NO2/WC_NO3=0.0 ! !WC_NO2/WC_N2O5=0.0 ! !WC_NO2/WC_HONO=+KC8*<WC_OH> - PJAC(:,45,48)=+TPK%KC8(:)*PCONC(:,52) + PJAC(:,46,49)=+TPK%KC8(:)*PCONC(:,53) ! !WC_NO2/WC_HNO3=+KC13 - PJAC(:,45,49)=+TPK%KC13(:) + PJAC(:,46,50)=+TPK%KC13(:) ! !WC_NO2/WC_HNO4=+KC10 - PJAC(:,45,50)=+TPK%KC10(:) + PJAC(:,46,51)=+TPK%KC10(:) ! !WC_NO2/WC_NH3=0.0 ! !WC_NO2/WC_OH=+KC8*<WC_HONO> - PJAC(:,45,52)=+TPK%KC8(:)*PCONC(:,48) + PJAC(:,46,53)=+TPK%KC8(:)*PCONC(:,49) ! !WC_NO2/WC_HO2=-KC9*<WC_NO2> - PJAC(:,45,53)=-TPK%KC9(:)*PCONC(:,45) + PJAC(:,46,54)=-TPK%KC9(:)*PCONC(:,46) ! !WC_NO2/WC_CO2=0.0 ! @@ -15158,14 +15501,6 @@ SUBROUTINE SUBJ8 ! !WC_NO2/WR_AHMS=0.0 ! -RETURN -END SUBROUTINE SUBJ8 -! -SUBROUTINE SUBJ9 -! -!Indices 46 a 50 -! -! !WC_NO3/O3=0.0 ! !WC_NO3/H2O2=0.0 @@ -15175,7 +15510,7 @@ SUBROUTINE SUBJ9 !WC_NO3/NO2=0.0 ! !WC_NO3/NO3=+KTC5 - PJAC(:,46,5)=+TPK%KTC5(:) + PJAC(:,47,5)=+TPK%KTC5(:) ! !WC_NO3/N2O5=0.0 ! @@ -15187,6 +15522,8 @@ SUBROUTINE SUBJ9 ! !WC_NO3/NH3=0.0 ! +!WC_NO3/DMS=0.0 +! !WC_NO3/SO2=0.0 ! !WC_NO3/SULF=0.0 @@ -15258,7 +15595,7 @@ SUBROUTINE SUBJ9 !WC_NO3/WC_NO2=0.0 ! !WC_NO3/WC_NO3=-KTC25-KC15*<WC_SULF>-KC16*<WC_SO2> - PJAC(:,46,46)=-TPK%KTC25(:)-TPK%KC15(:)*PCONC(:,56)-TPK%KC16(:)*PCONC(:,55) + PJAC(:,47,47)=-TPK%KTC25(:)-TPK%KC15(:)*PCONC(:,57)-TPK%KC16(:)*PCONC(:,56) ! !WC_NO3/WC_N2O5=0.0 ! @@ -15277,10 +15614,10 @@ SUBROUTINE SUBJ9 !WC_NO3/WC_CO2=0.0 ! !WC_NO3/WC_SO2=-KC16*<WC_NO3> - PJAC(:,46,55)=-TPK%KC16(:)*PCONC(:,46) + PJAC(:,47,56)=-TPK%KC16(:)*PCONC(:,47) ! !WC_NO3/WC_SULF=-KC15*<WC_NO3> - PJAC(:,46,56)=-TPK%KC15(:)*PCONC(:,46) + PJAC(:,47,57)=-TPK%KC15(:)*PCONC(:,47) ! !WC_NO3/WC_HCHO=0.0 ! @@ -15363,7 +15700,7 @@ SUBROUTINE SUBJ9 !WC_N2O5/NO3=0.0 ! !WC_N2O5/N2O5=+KTC6 - PJAC(:,47,6)=+TPK%KTC6(:) + PJAC(:,48,6)=+TPK%KTC6(:) ! !WC_N2O5/HONO=0.0 ! @@ -15373,6 +15710,8 @@ SUBROUTINE SUBJ9 ! !WC_N2O5/NH3=0.0 ! +!WC_N2O5/DMS=0.0 +! !WC_N2O5/SO2=0.0 ! !WC_N2O5/SULF=0.0 @@ -15446,7 +15785,7 @@ SUBROUTINE SUBJ9 !WC_N2O5/WC_NO3=0.0 ! !WC_N2O5/WC_N2O5=-KTC26-KC14 - PJAC(:,47,47)=-TPK%KTC26(:)-TPK%KC14(:) + PJAC(:,48,48)=-TPK%KTC26(:)-TPK%KC14(:) ! !WC_N2O5/WC_HONO=0.0 ! @@ -15549,7 +15888,7 @@ SUBROUTINE SUBJ9 !WC_HONO/N2O5=0.0 ! !WC_HONO/HONO=+KTC7 - PJAC(:,48,7)=+TPK%KTC7(:) + PJAC(:,49,7)=+TPK%KTC7(:) ! !WC_HONO/HNO3=0.0 ! @@ -15557,6 +15896,8 @@ SUBROUTINE SUBJ9 ! !WC_HONO/NH3=0.0 ! +!WC_HONO/DMS=0.0 +! !WC_HONO/SO2=0.0 ! !WC_HONO/SULF=0.0 @@ -15632,17 +15973,17 @@ SUBROUTINE SUBJ9 !WC_HONO/WC_N2O5=0.0 ! !WC_HONO/WC_HONO=-KTC27-KC8*<WC_OH> - PJAC(:,48,48)=-TPK%KTC27(:)-TPK%KC8(:)*PCONC(:,52) + PJAC(:,49,49)=-TPK%KTC27(:)-TPK%KC8(:)*PCONC(:,53) ! !WC_HONO/WC_HNO3=0.0 ! !WC_HONO/WC_HNO4=+KC11 - PJAC(:,48,50)=+TPK%KC11(:) + PJAC(:,49,51)=+TPK%KC11(:) ! !WC_HONO/WC_NH3=0.0 ! !WC_HONO/WC_OH=-KC8*<WC_HONO> - PJAC(:,48,52)=-TPK%KC8(:)*PCONC(:,48) + PJAC(:,49,53)=-TPK%KC8(:)*PCONC(:,49) ! !WC_HONO/WC_HO2=0.0 ! @@ -15737,12 +16078,14 @@ SUBROUTINE SUBJ9 !WC_HNO3/HONO=0.0 ! !WC_HNO3/HNO3=+KTC8 - PJAC(:,49,8)=+TPK%KTC8(:) + PJAC(:,50,8)=+TPK%KTC8(:) ! !WC_HNO3/HNO4=0.0 ! !WC_HNO3/NH3=0.0 ! +!WC_HNO3/DMS=0.0 +! !WC_HNO3/SO2=0.0 ! !WC_HNO3/SULF=0.0 @@ -15814,18 +16157,18 @@ SUBROUTINE SUBJ9 !WC_HNO3/WC_NO2=0.0 ! !WC_HNO3/WC_NO3=+KC15*<WC_SULF>+KC16*<WC_SO2> - PJAC(:,49,46)=+TPK%KC15(:)*PCONC(:,56)+TPK%KC16(:)*PCONC(:,55) + PJAC(:,50,47)=+TPK%KC15(:)*PCONC(:,57)+TPK%KC16(:)*PCONC(:,56) ! !WC_HNO3/WC_N2O5=+KC14+KC14 - PJAC(:,49,47)=+TPK%KC14(:)+TPK%KC14(:) + PJAC(:,50,48)=+TPK%KC14(:)+TPK%KC14(:) ! !WC_HNO3/WC_HONO=0.0 ! !WC_HNO3/WC_HNO3=-KTC28-KC13 - PJAC(:,49,49)=-TPK%KTC28(:)-TPK%KC13(:) + PJAC(:,50,50)=-TPK%KTC28(:)-TPK%KC13(:) ! !WC_HNO3/WC_HNO4=+KC12*<WC_SO2> - PJAC(:,49,50)=+TPK%KC12(:)*PCONC(:,55) + PJAC(:,50,51)=+TPK%KC12(:)*PCONC(:,56) ! !WC_HNO3/WC_NH3=0.0 ! @@ -15836,10 +16179,10 @@ SUBROUTINE SUBJ9 !WC_HNO3/WC_CO2=0.0 ! !WC_HNO3/WC_SO2=+KC12*<WC_HNO4>+KC16*<WC_NO3> - PJAC(:,49,55)=+TPK%KC12(:)*PCONC(:,50)+TPK%KC16(:)*PCONC(:,46) + PJAC(:,50,56)=+TPK%KC12(:)*PCONC(:,51)+TPK%KC16(:)*PCONC(:,47) ! !WC_HNO3/WC_SULF=+KC15*<WC_NO3> - PJAC(:,49,56)=+TPK%KC15(:)*PCONC(:,46) + PJAC(:,50,57)=+TPK%KC15(:)*PCONC(:,47) ! !WC_HNO3/WC_HCHO=0.0 ! @@ -15911,6 +16254,14 @@ SUBROUTINE SUBJ9 ! !WC_HNO3/WR_AHMS=0.0 ! +RETURN +END SUBROUTINE SUBJ9 +! +SUBROUTINE SUBJ10 +! +!Indices 51 a 55 +! +! !WC_HNO4/O3=0.0 ! !WC_HNO4/H2O2=0.0 @@ -15928,10 +16279,12 @@ SUBROUTINE SUBJ9 !WC_HNO4/HNO3=0.0 ! !WC_HNO4/HNO4=+KTC9 - PJAC(:,50,9)=+TPK%KTC9(:) + PJAC(:,51,9)=+TPK%KTC9(:) ! !WC_HNO4/NH3=0.0 ! +!WC_HNO4/DMS=0.0 +! !WC_HNO4/SO2=0.0 ! !WC_HNO4/SULF=0.0 @@ -16001,7 +16354,7 @@ SUBROUTINE SUBJ9 !WC_HNO4/WC_NO=0.0 ! !WC_HNO4/WC_NO2=+KC9*<WC_HO2> - PJAC(:,50,45)=+TPK%KC9(:)*PCONC(:,53) + PJAC(:,51,46)=+TPK%KC9(:)*PCONC(:,54) ! !WC_HNO4/WC_NO3=0.0 ! @@ -16012,19 +16365,19 @@ SUBROUTINE SUBJ9 !WC_HNO4/WC_HNO3=0.0 ! !WC_HNO4/WC_HNO4=-KTC29-KC10-KC11-KC12*<WC_SO2> - PJAC(:,50,50)=-TPK%KTC29(:)-TPK%KC10(:)-TPK%KC11(:)-TPK%KC12(:)*PCONC(:,55) + PJAC(:,51,51)=-TPK%KTC29(:)-TPK%KC10(:)-TPK%KC11(:)-TPK%KC12(:)*PCONC(:,56) ! !WC_HNO4/WC_NH3=0.0 ! !WC_HNO4/WC_OH=0.0 ! !WC_HNO4/WC_HO2=+KC9*<WC_NO2> - PJAC(:,50,53)=+TPK%KC9(:)*PCONC(:,45) + PJAC(:,51,54)=+TPK%KC9(:)*PCONC(:,46) ! !WC_HNO4/WC_CO2=0.0 ! !WC_HNO4/WC_SO2=-KC12*<WC_HNO4> - PJAC(:,50,55)=-TPK%KC12(:)*PCONC(:,50) + PJAC(:,51,56)=-TPK%KC12(:)*PCONC(:,51) ! !WC_HNO4/WC_SULF=0.0 ! @@ -16098,14 +16451,6 @@ SUBROUTINE SUBJ9 ! !WC_HNO4/WR_AHMS=0.0 ! -RETURN -END SUBROUTINE SUBJ9 -! -SUBROUTINE SUBJ10 -! -!Indices 51 a 55 -! -! !WC_NH3/O3=0.0 ! !WC_NH3/H2O2=0.0 @@ -16125,7 +16470,9 @@ SUBROUTINE SUBJ10 !WC_NH3/HNO4=0.0 ! !WC_NH3/NH3=+KTC10 - PJAC(:,51,10)=+TPK%KTC10(:) + PJAC(:,52,10)=+TPK%KTC10(:) +! +!WC_NH3/DMS=0.0 ! !WC_NH3/SO2=0.0 ! @@ -16208,7 +16555,7 @@ SUBROUTINE SUBJ10 !WC_NH3/WC_HNO4=0.0 ! !WC_NH3/WC_NH3=-KTC30 - PJAC(:,51,51)=-TPK%KTC30(:) + PJAC(:,52,52)=-TPK%KTC30(:) ! !WC_NH3/WC_OH=0.0 ! @@ -16310,6 +16657,8 @@ SUBROUTINE SUBJ10 ! !WC_OH/NH3=0.0 ! +!WC_OH/DMS=0.0 +! !WC_OH/SO2=0.0 ! !WC_OH/SULF=0.0 @@ -16317,7 +16666,7 @@ SUBROUTINE SUBJ10 !WC_OH/CO=0.0 ! !WC_OH/OH=+KTC11 - PJAC(:,52,14)=+TPK%KTC11(:) + PJAC(:,53,15)=+TPK%KTC11(:) ! !WC_OH/HO2=0.0 ! @@ -16374,10 +16723,10 @@ SUBROUTINE SUBJ10 !WC_OH/XO2=0.0 ! !WC_OH/WC_O3=+KC6*<WC_HO2> - PJAC(:,52,42)=+TPK%KC6(:)*PCONC(:,53) + PJAC(:,53,43)=+TPK%KC6(:)*PCONC(:,54) ! !WC_OH/WC_H2O2=+KC1+KC1-KC4*<WC_OH> - PJAC(:,52,43)=+TPK%KC1(:)+TPK%KC1(:)-TPK%KC4(:)*PCONC(:,52) + PJAC(:,53,44)=+TPK%KC1(:)+TPK%KC1(:)-TPK%KC4(:)*PCONC(:,53) ! !WC_OH/WC_NO=0.0 ! @@ -16388,10 +16737,10 @@ SUBROUTINE SUBJ10 !WC_OH/WC_N2O5=0.0 ! !WC_OH/WC_HONO=-KC8*<WC_OH> - PJAC(:,52,48)=-TPK%KC8(:)*PCONC(:,52) + PJAC(:,53,49)=-TPK%KC8(:)*PCONC(:,53) ! !WC_OH/WC_HNO3=+KC13 - PJAC(:,52,49)=+TPK%KC13(:) + PJAC(:,53,50)=+TPK%KC13(:) ! !WC_OH/WC_HNO4=0.0 ! @@ -16400,26 +16749,26 @@ SUBROUTINE SUBJ10 !WC_OH/WC_OH=-KTC31-KC2*<WC_OH>-KC2*<WC_OH>-KC2*<WC_OH>-KC2*<WC_OH>-KC3*<WC_HO2 !>-KC4*<WC_H2O2>-KC7*<WC_SO2>-KC8*<WC_HONO>-KC19*<WC_HCHO>-KC20*<WC_ORA1>-KC23* !<WC_AHMS> - PJAC(:,52,52)=-TPK%KTC31(:)-TPK%KC2(:)*PCONC(:,52)-TPK%KC2(:)*PCONC(:,52)-TPK%& -&KC2(:)*PCONC(:,52)-TPK%KC2(:)*PCONC(:,52)-TPK%KC3(:)*PCONC(:,53)-TPK%KC4(:)*PC& -&ONC(:,43)-TPK%KC7(:)*PCONC(:,55)-TPK%KC8(:)*PCONC(:,48)-TPK%KC19(:)*PCONC(:,57& -&)-TPK%KC20(:)*PCONC(:,58)-TPK%KC23(:)*PCONC(:,66) + PJAC(:,53,53)=-TPK%KTC31(:)-TPK%KC2(:)*PCONC(:,53)-TPK%KC2(:)*PCONC(:,53)-TPK%& +&KC2(:)*PCONC(:,53)-TPK%KC2(:)*PCONC(:,53)-TPK%KC3(:)*PCONC(:,54)-TPK%KC4(:)*PC& +&ONC(:,44)-TPK%KC7(:)*PCONC(:,56)-TPK%KC8(:)*PCONC(:,49)-TPK%KC19(:)*PCONC(:,58& +&)-TPK%KC20(:)*PCONC(:,59)-TPK%KC23(:)*PCONC(:,67) ! !WC_OH/WC_HO2=-KC3*<WC_OH>+KC6*<WC_O3> - PJAC(:,52,53)=-TPK%KC3(:)*PCONC(:,52)+TPK%KC6(:)*PCONC(:,42) + PJAC(:,53,54)=-TPK%KC3(:)*PCONC(:,53)+TPK%KC6(:)*PCONC(:,43) ! !WC_OH/WC_CO2=0.0 ! !WC_OH/WC_SO2=-KC7*<WC_OH> - PJAC(:,52,55)=-TPK%KC7(:)*PCONC(:,52) + PJAC(:,53,56)=-TPK%KC7(:)*PCONC(:,53) ! !WC_OH/WC_SULF=0.0 ! !WC_OH/WC_HCHO=-KC19*<WC_OH> - PJAC(:,52,57)=-TPK%KC19(:)*PCONC(:,52) + PJAC(:,53,58)=-TPK%KC19(:)*PCONC(:,53) ! !WC_OH/WC_ORA1=-KC20*<WC_OH> - PJAC(:,52,58)=-TPK%KC20(:)*PCONC(:,52) + PJAC(:,53,59)=-TPK%KC20(:)*PCONC(:,53) ! !WC_OH/WC_ORA2=0.0 ! @@ -16430,14 +16779,14 @@ SUBROUTINE SUBJ10 !WC_OH/WC_ASO3=0.0 ! !WC_OH/WC_ASO4=+KC28 - PJAC(:,52,63)=+TPK%KC28(:) + PJAC(:,53,64)=+TPK%KC28(:) ! !WC_OH/WC_ASO5=0.0 ! !WC_OH/WC_AHSO5=0.0 ! !WC_OH/WC_AHMS=-KC23*<WC_OH> - PJAC(:,52,66)=-TPK%KC23(:)*PCONC(:,52) + PJAC(:,53,67)=-TPK%KC23(:)*PCONC(:,53) ! !WC_OH/WR_O3=0.0 ! @@ -16509,6 +16858,8 @@ SUBROUTINE SUBJ10 ! !WC_HO2/NH3=0.0 ! +!WC_HO2/DMS=0.0 +! !WC_HO2/SO2=0.0 ! !WC_HO2/SULF=0.0 @@ -16518,7 +16869,7 @@ SUBROUTINE SUBJ10 !WC_HO2/OH=0.0 ! !WC_HO2/HO2=+KTC12 - PJAC(:,53,15)=+TPK%KTC12(:) + PJAC(:,54,16)=+TPK%KTC12(:) ! !WC_HO2/CH4=0.0 ! @@ -16573,15 +16924,15 @@ SUBROUTINE SUBJ10 !WC_HO2/XO2=0.0 ! !WC_HO2/WC_O3=-KC6*<WC_HO2> - PJAC(:,53,42)=-TPK%KC6(:)*PCONC(:,53) + PJAC(:,54,43)=-TPK%KC6(:)*PCONC(:,54) ! !WC_HO2/WC_H2O2=+KC4*<WC_OH> - PJAC(:,53,43)=+TPK%KC4(:)*PCONC(:,52) + PJAC(:,54,44)=+TPK%KC4(:)*PCONC(:,53) ! !WC_HO2/WC_NO=0.0 ! !WC_HO2/WC_NO2=-KC9*<WC_HO2> - PJAC(:,53,45)=-TPK%KC9(:)*PCONC(:,53) + PJAC(:,54,46)=-TPK%KC9(:)*PCONC(:,54) ! !WC_HO2/WC_NO3=0.0 ! @@ -16592,20 +16943,20 @@ SUBROUTINE SUBJ10 !WC_HO2/WC_HNO3=0.0 ! !WC_HO2/WC_HNO4=+KC10 - PJAC(:,53,50)=+TPK%KC10(:) + PJAC(:,54,51)=+TPK%KC10(:) ! !WC_HO2/WC_NH3=0.0 ! !WC_HO2/WC_OH=-KC3*<WC_HO2>+KC4*<WC_H2O2>+KC19*<WC_HCHO>+KC20*<WC_ORA1>+KC23*<W !C_AHMS> - PJAC(:,53,52)=-TPK%KC3(:)*PCONC(:,53)+TPK%KC4(:)*PCONC(:,43)+TPK%KC19(:)*PCONC& -&(:,57)+TPK%KC20(:)*PCONC(:,58)+TPK%KC23(:)*PCONC(:,66) + PJAC(:,54,53)=-TPK%KC3(:)*PCONC(:,54)+TPK%KC4(:)*PCONC(:,44)+TPK%KC19(:)*PCONC& +&(:,58)+TPK%KC20(:)*PCONC(:,59)+TPK%KC23(:)*PCONC(:,67) ! !WC_HO2/WC_HO2=-KTC32-KC3*<WC_OH>-KC5*<WC_HO2>-KC5*<WC_HO2>-KC5*<WC_HO2>-KC5*<W !C_HO2>-KC6*<WC_O3>-KC9*<WC_NO2>-KC25*<WC_ASO5> - PJAC(:,53,53)=-TPK%KTC32(:)-TPK%KC3(:)*PCONC(:,52)-TPK%KC5(:)*PCONC(:,53)-TPK%& -&KC5(:)*PCONC(:,53)-TPK%KC5(:)*PCONC(:,53)-TPK%KC5(:)*PCONC(:,53)-TPK%KC6(:)*PC& -&ONC(:,42)-TPK%KC9(:)*PCONC(:,45)-TPK%KC25(:)*PCONC(:,64) + PJAC(:,54,54)=-TPK%KTC32(:)-TPK%KC3(:)*PCONC(:,53)-TPK%KC5(:)*PCONC(:,54)-TPK%& +&KC5(:)*PCONC(:,54)-TPK%KC5(:)*PCONC(:,54)-TPK%KC5(:)*PCONC(:,54)-TPK%KC6(:)*PC& +&ONC(:,43)-TPK%KC9(:)*PCONC(:,46)-TPK%KC25(:)*PCONC(:,65) ! !WC_HO2/WC_CO2=0.0 ! @@ -16614,15 +16965,15 @@ SUBROUTINE SUBJ10 !WC_HO2/WC_SULF=0.0 ! !WC_HO2/WC_HCHO=+KC19*<WC_OH> - PJAC(:,53,57)=+TPK%KC19(:)*PCONC(:,52) + PJAC(:,54,58)=+TPK%KC19(:)*PCONC(:,53) ! !WC_HO2/WC_ORA1=+KC20*<WC_OH> - PJAC(:,53,58)=+TPK%KC20(:)*PCONC(:,52) + PJAC(:,54,59)=+TPK%KC20(:)*PCONC(:,53) ! !WC_HO2/WC_ORA2=0.0 ! !WC_HO2/WC_MO2=+2.00*KC17*<WC_MO2>+2.00*KC17*<WC_MO2> - PJAC(:,53,60)=+2.00*TPK%KC17(:)*PCONC(:,60)+2.00*TPK%KC17(:)*PCONC(:,60) + PJAC(:,54,61)=+2.00*TPK%KC17(:)*PCONC(:,61)+2.00*TPK%KC17(:)*PCONC(:,61) ! !WC_HO2/WC_OP1=0.0 ! @@ -16631,12 +16982,12 @@ SUBROUTINE SUBJ10 !WC_HO2/WC_ASO4=0.0 ! !WC_HO2/WC_ASO5=-KC25*<WC_HO2> - PJAC(:,53,64)=-TPK%KC25(:)*PCONC(:,53) + PJAC(:,54,65)=-TPK%KC25(:)*PCONC(:,54) ! !WC_HO2/WC_AHSO5=0.0 ! !WC_HO2/WC_AHMS=+KC23*<WC_OH> - PJAC(:,53,66)=+TPK%KC23(:)*PCONC(:,52) + PJAC(:,54,67)=+TPK%KC23(:)*PCONC(:,53) ! !WC_HO2/WR_O3=0.0 ! @@ -16708,6 +17059,8 @@ SUBROUTINE SUBJ10 ! !WC_CO2/NH3=0.0 ! +!WC_CO2/DMS=0.0 +! !WC_CO2/SO2=0.0 ! !WC_CO2/SULF=0.0 @@ -16791,12 +17144,12 @@ SUBROUTINE SUBJ10 !WC_CO2/WC_NH3=0.0 ! !WC_CO2/WC_OH=+KC20*<WC_ORA1> - PJAC(:,54,52)=+TPK%KC20(:)*PCONC(:,58) + PJAC(:,55,53)=+TPK%KC20(:)*PCONC(:,59) ! !WC_CO2/WC_HO2=0.0 ! !WC_CO2/WC_CO2=-KTC33 - PJAC(:,54,54)=-TPK%KTC33(:) + PJAC(:,55,55)=-TPK%KTC33(:) ! !WC_CO2/WC_SO2=0.0 ! @@ -16805,7 +17158,7 @@ SUBROUTINE SUBJ10 !WC_CO2/WC_HCHO=0.0 ! !WC_CO2/WC_ORA1=+KC20*<WC_OH> - PJAC(:,54,58)=+TPK%KC20(:)*PCONC(:,52) + PJAC(:,55,59)=+TPK%KC20(:)*PCONC(:,53) ! !WC_CO2/WC_ORA2=0.0 ! @@ -16873,6 +17226,14 @@ SUBROUTINE SUBJ10 ! !WC_CO2/WR_AHMS=0.0 ! +RETURN +END SUBROUTINE SUBJ10 +! +SUBROUTINE SUBJ11 +! +!Indices 56 a 60 +! +! !WC_SO2/O3=0.0 ! !WC_SO2/H2O2=0.0 @@ -16893,8 +17254,10 @@ SUBROUTINE SUBJ10 ! !WC_SO2/NH3=0.0 ! +!WC_SO2/DMS=0.0 +! !WC_SO2/SO2=+KTC14 - PJAC(:,55,11)=+TPK%KTC14(:) + PJAC(:,56,12)=+TPK%KTC14(:) ! !WC_SO2/SULF=0.0 ! @@ -16957,17 +17320,17 @@ SUBROUTINE SUBJ10 !WC_SO2/XO2=0.0 ! !WC_SO2/WC_O3=-KC29*<WC_SO2> - PJAC(:,55,42)=-TPK%KC29(:)*PCONC(:,55) + PJAC(:,56,43)=-TPK%KC29(:)*PCONC(:,56) ! !WC_SO2/WC_H2O2=-KC30*<WC_SO2> - PJAC(:,55,43)=-TPK%KC30(:)*PCONC(:,55) + PJAC(:,56,44)=-TPK%KC30(:)*PCONC(:,56) ! !WC_SO2/WC_NO=0.0 ! !WC_SO2/WC_NO2=0.0 ! !WC_SO2/WC_NO3=-KC16*<WC_SO2> - PJAC(:,55,46)=-TPK%KC16(:)*PCONC(:,55) + PJAC(:,56,47)=-TPK%KC16(:)*PCONC(:,56) ! !WC_SO2/WC_N2O5=0.0 ! @@ -16976,12 +17339,12 @@ SUBROUTINE SUBJ10 !WC_SO2/WC_HNO3=0.0 ! !WC_SO2/WC_HNO4=-KC12*<WC_SO2> - PJAC(:,55,50)=-TPK%KC12(:)*PCONC(:,55) + PJAC(:,56,51)=-TPK%KC12(:)*PCONC(:,56) ! !WC_SO2/WC_NH3=0.0 ! !WC_SO2/WC_OH=-KC7*<WC_SO2>+KC23*<WC_AHMS> - PJAC(:,55,52)=-TPK%KC7(:)*PCONC(:,55)+TPK%KC23(:)*PCONC(:,66) + PJAC(:,56,53)=-TPK%KC7(:)*PCONC(:,56)+TPK%KC23(:)*PCONC(:,67) ! !WC_SO2/WC_HO2=0.0 ! @@ -16989,21 +17352,21 @@ SUBROUTINE SUBJ10 ! !WC_SO2/WC_SO2=-KTC34-KC7*<WC_OH>-KC12*<WC_HNO4>-KC16*<WC_NO3>-KC18*<WC_MO2>-KC !21*<WC_HCHO>-KC27*<WC_AHSO5>-KC29*<WC_O3>-KC30*<WC_H2O2> - PJAC(:,55,55)=-TPK%KTC34(:)-TPK%KC7(:)*PCONC(:,52)-TPK%KC12(:)*PCONC(:,50)-TPK& -&%KC16(:)*PCONC(:,46)-TPK%KC18(:)*PCONC(:,60)-TPK%KC21(:)*PCONC(:,57)-TPK%KC27(& -&:)*PCONC(:,65)-TPK%KC29(:)*PCONC(:,42)-TPK%KC30(:)*PCONC(:,43) + PJAC(:,56,56)=-TPK%KTC34(:)-TPK%KC7(:)*PCONC(:,53)-TPK%KC12(:)*PCONC(:,51)-TPK& +&%KC16(:)*PCONC(:,47)-TPK%KC18(:)*PCONC(:,61)-TPK%KC21(:)*PCONC(:,58)-TPK%KC27(& +&:)*PCONC(:,66)-TPK%KC29(:)*PCONC(:,43)-TPK%KC30(:)*PCONC(:,44) ! !WC_SO2/WC_SULF=0.0 ! !WC_SO2/WC_HCHO=-KC21*<WC_SO2> - PJAC(:,55,57)=-TPK%KC21(:)*PCONC(:,55) + PJAC(:,56,58)=-TPK%KC21(:)*PCONC(:,56) ! !WC_SO2/WC_ORA1=0.0 ! !WC_SO2/WC_ORA2=0.0 ! !WC_SO2/WC_MO2=-KC18*<WC_SO2> - PJAC(:,55,60)=-TPK%KC18(:)*PCONC(:,55) + PJAC(:,56,61)=-TPK%KC18(:)*PCONC(:,56) ! !WC_SO2/WC_OP1=0.0 ! @@ -17014,10 +17377,10 @@ SUBROUTINE SUBJ10 !WC_SO2/WC_ASO5=0.0 ! !WC_SO2/WC_AHSO5=-KC27*<WC_SO2> - PJAC(:,55,65)=-TPK%KC27(:)*PCONC(:,55) + PJAC(:,56,66)=-TPK%KC27(:)*PCONC(:,56) ! !WC_SO2/WC_AHMS=+KC22+KC23*<WC_OH> - PJAC(:,55,66)=+TPK%KC22(:)+TPK%KC23(:)*PCONC(:,52) + PJAC(:,56,67)=+TPK%KC22(:)+TPK%KC23(:)*PCONC(:,53) ! !WC_SO2/WR_O3=0.0 ! @@ -17069,14 +17432,6 @@ SUBROUTINE SUBJ10 ! !WC_SO2/WR_AHMS=0.0 ! -RETURN -END SUBROUTINE SUBJ10 -! -SUBROUTINE SUBJ11 -! -!Indices 56 a 60 -! -! !WC_SULF/O3=0.0 ! !WC_SULF/H2O2=0.0 @@ -17097,10 +17452,12 @@ SUBROUTINE SUBJ11 ! !WC_SULF/NH3=0.0 ! +!WC_SULF/DMS=0.0 +! !WC_SULF/SO2=0.0 ! !WC_SULF/SULF=+KTC15 - PJAC(:,56,12)=+TPK%KTC15(:) + PJAC(:,57,13)=+TPK%KTC15(:) ! !WC_SULF/CO=0.0 ! @@ -17161,17 +17518,17 @@ SUBROUTINE SUBJ11 !WC_SULF/XO2=0.0 ! !WC_SULF/WC_O3=+KC29*<WC_SO2> - PJAC(:,56,42)=+TPK%KC29(:)*PCONC(:,55) + PJAC(:,57,43)=+TPK%KC29(:)*PCONC(:,56) ! !WC_SULF/WC_H2O2=+KC30*<WC_SO2> - PJAC(:,56,43)=+TPK%KC30(:)*PCONC(:,55) + PJAC(:,57,44)=+TPK%KC30(:)*PCONC(:,56) ! !WC_SULF/WC_NO=0.0 ! !WC_SULF/WC_NO2=0.0 ! !WC_SULF/WC_NO3=-KC15*<WC_SULF> - PJAC(:,56,46)=-TPK%KC15(:)*PCONC(:,56) + PJAC(:,57,47)=-TPK%KC15(:)*PCONC(:,57) ! !WC_SULF/WC_N2O5=0.0 ! @@ -17180,7 +17537,7 @@ SUBROUTINE SUBJ11 !WC_SULF/WC_HNO3=0.0 ! !WC_SULF/WC_HNO4=+KC12*<WC_SO2> - PJAC(:,56,50)=+TPK%KC12(:)*PCONC(:,55) + PJAC(:,57,51)=+TPK%KC12(:)*PCONC(:,56) ! !WC_SULF/WC_NH3=0.0 ! @@ -17192,11 +17549,11 @@ SUBROUTINE SUBJ11 ! !WC_SULF/WC_SO2=+KC12*<WC_HNO4>+2.00*KC27*<WC_AHSO5>+KC29*<WC_O3>+KC30*<WC_H2O2 !> - PJAC(:,56,55)=+TPK%KC12(:)*PCONC(:,50)+2.00*TPK%KC27(:)*PCONC(:,65)+TPK%KC29(:& -&)*PCONC(:,42)+TPK%KC30(:)*PCONC(:,43) + PJAC(:,57,56)=+TPK%KC12(:)*PCONC(:,51)+2.00*TPK%KC27(:)*PCONC(:,66)+TPK%KC29(:& +&)*PCONC(:,43)+TPK%KC30(:)*PCONC(:,44) ! !WC_SULF/WC_SULF=-KTC35-KC15*<WC_NO3> - PJAC(:,56,56)=-TPK%KTC35(:)-TPK%KC15(:)*PCONC(:,46) + PJAC(:,57,57)=-TPK%KTC35(:)-TPK%KC15(:)*PCONC(:,47) ! !WC_SULF/WC_HCHO=0.0 ! @@ -17211,12 +17568,12 @@ SUBROUTINE SUBJ11 !WC_SULF/WC_ASO3=0.0 ! !WC_SULF/WC_ASO4=+KC28 - PJAC(:,56,63)=+TPK%KC28(:) + PJAC(:,57,64)=+TPK%KC28(:) ! !WC_SULF/WC_ASO5=0.0 ! !WC_SULF/WC_AHSO5=+2.00*KC27*<WC_SO2> - PJAC(:,56,65)=+2.00*TPK%KC27(:)*PCONC(:,55) + PJAC(:,57,66)=+2.00*TPK%KC27(:)*PCONC(:,56) ! !WC_SULF/WC_AHMS=0.0 ! @@ -17290,6 +17647,8 @@ SUBROUTINE SUBJ11 ! !WC_HCHO/NH3=0.0 ! +!WC_HCHO/DMS=0.0 +! !WC_HCHO/SO2=0.0 ! !WC_HCHO/SULF=0.0 @@ -17313,7 +17672,7 @@ SUBROUTINE SUBJ11 !WC_HCHO/ARO=0.0 ! !WC_HCHO/HCHO=+KTC16 - PJAC(:,57,22)=+TPK%KTC16(:) + PJAC(:,58,23)=+TPK%KTC16(:) ! !WC_HCHO/ALD=0.0 ! @@ -17374,26 +17733,26 @@ SUBROUTINE SUBJ11 !WC_HCHO/WC_NH3=0.0 ! !WC_HCHO/WC_OH=-KC19*<WC_HCHO> - PJAC(:,57,52)=-TPK%KC19(:)*PCONC(:,57) + PJAC(:,58,53)=-TPK%KC19(:)*PCONC(:,58) ! !WC_HCHO/WC_HO2=0.0 ! !WC_HCHO/WC_CO2=0.0 ! !WC_HCHO/WC_SO2=-KC21*<WC_HCHO> - PJAC(:,57,55)=-TPK%KC21(:)*PCONC(:,57) + PJAC(:,58,56)=-TPK%KC21(:)*PCONC(:,58) ! !WC_HCHO/WC_SULF=0.0 ! !WC_HCHO/WC_HCHO=-KTC36-KC19*<WC_OH>-KC21*<WC_SO2> - PJAC(:,57,57)=-TPK%KTC36(:)-TPK%KC19(:)*PCONC(:,52)-TPK%KC21(:)*PCONC(:,55) + PJAC(:,58,58)=-TPK%KTC36(:)-TPK%KC19(:)*PCONC(:,53)-TPK%KC21(:)*PCONC(:,56) ! !WC_HCHO/WC_ORA1=0.0 ! !WC_HCHO/WC_ORA2=0.0 ! !WC_HCHO/WC_MO2=+2.00*KC17*<WC_MO2>+2.00*KC17*<WC_MO2> - PJAC(:,57,60)=+2.00*TPK%KC17(:)*PCONC(:,60)+2.00*TPK%KC17(:)*PCONC(:,60) + PJAC(:,58,61)=+2.00*TPK%KC17(:)*PCONC(:,61)+2.00*TPK%KC17(:)*PCONC(:,61) ! !WC_HCHO/WC_OP1=0.0 ! @@ -17406,7 +17765,7 @@ SUBROUTINE SUBJ11 !WC_HCHO/WC_AHSO5=0.0 ! !WC_HCHO/WC_AHMS=+KC22 - PJAC(:,57,66)=+TPK%KC22(:) + PJAC(:,58,67)=+TPK%KC22(:) ! !WC_HCHO/WR_O3=0.0 ! @@ -17478,6 +17837,8 @@ SUBROUTINE SUBJ11 ! !WC_ORA1/NH3=0.0 ! +!WC_ORA1/DMS=0.0 +! !WC_ORA1/SO2=0.0 ! !WC_ORA1/SULF=0.0 @@ -17517,7 +17878,7 @@ SUBROUTINE SUBJ11 !WC_ORA1/OP2=0.0 ! !WC_ORA1/ORA1=+KTC17 - PJAC(:,58,30)=+TPK%KTC17(:) + PJAC(:,59,31)=+TPK%KTC17(:) ! !WC_ORA1/ORA2=0.0 ! @@ -17562,8 +17923,8 @@ SUBROUTINE SUBJ11 !WC_ORA1/WC_NH3=0.0 ! !WC_ORA1/WC_OH=+KC19*<WC_HCHO>-KC20*<WC_ORA1>+KC23*<WC_AHMS> - PJAC(:,58,52)=+TPK%KC19(:)*PCONC(:,57)-TPK%KC20(:)*PCONC(:,58)+TPK%KC23(:)*PCO& -&NC(:,66) + PJAC(:,59,53)=+TPK%KC19(:)*PCONC(:,58)-TPK%KC20(:)*PCONC(:,59)+TPK%KC23(:)*PCO& +&NC(:,67) ! !WC_ORA1/WC_HO2=0.0 ! @@ -17574,10 +17935,10 @@ SUBROUTINE SUBJ11 !WC_ORA1/WC_SULF=0.0 ! !WC_ORA1/WC_HCHO=+KC19*<WC_OH> - PJAC(:,58,57)=+TPK%KC19(:)*PCONC(:,52) + PJAC(:,59,58)=+TPK%KC19(:)*PCONC(:,53) ! !WC_ORA1/WC_ORA1=-KTC37-KC20*<WC_OH> - PJAC(:,58,58)=-TPK%KTC37(:)-TPK%KC20(:)*PCONC(:,52) + PJAC(:,59,59)=-TPK%KTC37(:)-TPK%KC20(:)*PCONC(:,53) ! !WC_ORA1/WC_ORA2=0.0 ! @@ -17594,7 +17955,7 @@ SUBROUTINE SUBJ11 !WC_ORA1/WC_AHSO5=0.0 ! !WC_ORA1/WC_AHMS=+KC23*<WC_OH> - PJAC(:,58,66)=+TPK%KC23(:)*PCONC(:,52) + PJAC(:,59,67)=+TPK%KC23(:)*PCONC(:,53) ! !WC_ORA1/WR_O3=0.0 ! @@ -17666,6 +18027,8 @@ SUBROUTINE SUBJ11 ! !WC_ORA2/NH3=0.0 ! +!WC_ORA2/DMS=0.0 +! !WC_ORA2/SO2=0.0 ! !WC_ORA2/SULF=0.0 @@ -17707,7 +18070,7 @@ SUBROUTINE SUBJ11 !WC_ORA2/ORA1=0.0 ! !WC_ORA2/ORA2=+KTC18 - PJAC(:,59,31)=+TPK%KTC18(:) + PJAC(:,60,32)=+TPK%KTC18(:) ! !WC_ORA2/MO2=0.0 ! @@ -17764,7 +18127,7 @@ SUBROUTINE SUBJ11 !WC_ORA2/WC_ORA1=0.0 ! !WC_ORA2/WC_ORA2=-KTC38 - PJAC(:,59,59)=-TPK%KTC38(:) + PJAC(:,60,60)=-TPK%KTC38(:) ! !WC_ORA2/WC_MO2=0.0 ! @@ -17830,6 +18193,14 @@ SUBROUTINE SUBJ11 ! !WC_ORA2/WR_AHMS=0.0 ! +RETURN +END SUBROUTINE SUBJ11 +! +SUBROUTINE SUBJ12 +! +!Indices 61 a 65 +! +! !WC_MO2/O3=0.0 ! !WC_MO2/H2O2=0.0 @@ -17850,6 +18221,8 @@ SUBROUTINE SUBJ11 ! !WC_MO2/NH3=0.0 ! +!WC_MO2/DMS=0.0 +! !WC_MO2/SO2=0.0 ! !WC_MO2/SULF=0.0 @@ -17893,7 +18266,7 @@ SUBROUTINE SUBJ11 !WC_MO2/ORA2=0.0 ! !WC_MO2/MO2=+KTC19 - PJAC(:,60,32)=+TPK%KTC19(:) + PJAC(:,61,33)=+TPK%KTC19(:) ! !WC_MO2/ALKAP=0.0 ! @@ -17940,7 +18313,7 @@ SUBROUTINE SUBJ11 !WC_MO2/WC_CO2=0.0 ! !WC_MO2/WC_SO2=-KC18*<WC_MO2> - PJAC(:,60,55)=-TPK%KC18(:)*PCONC(:,60) + PJAC(:,61,56)=-TPK%KC18(:)*PCONC(:,61) ! !WC_MO2/WC_SULF=0.0 ! @@ -17952,8 +18325,8 @@ SUBROUTINE SUBJ11 ! !WC_MO2/WC_MO2=-KTC39-KC17*<WC_MO2>-KC17*<WC_MO2>-KC17*<WC_MO2>-KC17*<WC_MO2>-K !C18*<WC_SO2> - PJAC(:,60,60)=-TPK%KTC39(:)-TPK%KC17(:)*PCONC(:,60)-TPK%KC17(:)*PCONC(:,60)-TP& -&K%KC17(:)*PCONC(:,60)-TPK%KC17(:)*PCONC(:,60)-TPK%KC18(:)*PCONC(:,55) + PJAC(:,61,61)=-TPK%KTC39(:)-TPK%KC17(:)*PCONC(:,61)-TPK%KC17(:)*PCONC(:,61)-TP& +&K%KC17(:)*PCONC(:,61)-TPK%KC17(:)*PCONC(:,61)-TPK%KC18(:)*PCONC(:,56) ! !WC_MO2/WC_OP1=0.0 ! @@ -18017,14 +18390,6 @@ SUBROUTINE SUBJ11 ! !WC_MO2/WR_AHMS=0.0 ! -RETURN -END SUBROUTINE SUBJ11 -! -SUBROUTINE SUBJ12 -! -!Indices 61 a 65 -! -! !WC_OP1/O3=0.0 ! !WC_OP1/H2O2=0.0 @@ -18045,6 +18410,8 @@ SUBROUTINE SUBJ12 ! !WC_OP1/NH3=0.0 ! +!WC_OP1/DMS=0.0 +! !WC_OP1/SO2=0.0 ! !WC_OP1/SULF=0.0 @@ -18080,7 +18447,7 @@ SUBROUTINE SUBJ12 !WC_OP1/PAN=0.0 ! !WC_OP1/OP1=+KTC20 - PJAC(:,61,28)=+TPK%KTC20(:) + PJAC(:,62,29)=+TPK%KTC20(:) ! !WC_OP1/OP2=0.0 ! @@ -18135,7 +18502,7 @@ SUBROUTINE SUBJ12 !WC_OP1/WC_CO2=0.0 ! !WC_OP1/WC_SO2=+KC18*<WC_MO2> - PJAC(:,61,55)=+TPK%KC18(:)*PCONC(:,60) + PJAC(:,62,56)=+TPK%KC18(:)*PCONC(:,61) ! !WC_OP1/WC_SULF=0.0 ! @@ -18146,10 +18513,10 @@ SUBROUTINE SUBJ12 !WC_OP1/WC_ORA2=0.0 ! !WC_OP1/WC_MO2=+KC18*<WC_SO2> - PJAC(:,61,60)=+TPK%KC18(:)*PCONC(:,55) + PJAC(:,62,61)=+TPK%KC18(:)*PCONC(:,56) ! !WC_OP1/WC_OP1=-KTC40 - PJAC(:,61,61)=-TPK%KTC40(:) + PJAC(:,62,62)=-TPK%KTC40(:) ! !WC_OP1/WC_ASO3=0.0 ! @@ -18231,6 +18598,8 @@ SUBROUTINE SUBJ12 ! !WC_ASO3/NH3=0.0 ! +!WC_ASO3/DMS=0.0 +! !WC_ASO3/SO2=0.0 ! !WC_ASO3/SULF=0.0 @@ -18302,7 +18671,7 @@ SUBROUTINE SUBJ12 !WC_ASO3/WC_NO2=0.0 ! !WC_ASO3/WC_NO3=+KC16*<WC_SO2> - PJAC(:,62,46)=+TPK%KC16(:)*PCONC(:,55) + PJAC(:,63,47)=+TPK%KC16(:)*PCONC(:,56) ! !WC_ASO3/WC_N2O5=0.0 ! @@ -18315,15 +18684,15 @@ SUBROUTINE SUBJ12 !WC_ASO3/WC_NH3=0.0 ! !WC_ASO3/WC_OH=+KC7*<WC_SO2> - PJAC(:,62,52)=+TPK%KC7(:)*PCONC(:,55) + PJAC(:,63,53)=+TPK%KC7(:)*PCONC(:,56) ! !WC_ASO3/WC_HO2=0.0 ! !WC_ASO3/WC_CO2=0.0 ! !WC_ASO3/WC_SO2=+KC7*<WC_OH>+KC16*<WC_NO3>+KC18*<WC_MO2> - PJAC(:,62,55)=+TPK%KC7(:)*PCONC(:,52)+TPK%KC16(:)*PCONC(:,46)+TPK%KC18(:)*PCON& -&C(:,60) + PJAC(:,63,56)=+TPK%KC7(:)*PCONC(:,53)+TPK%KC16(:)*PCONC(:,47)+TPK%KC18(:)*PCON& +&C(:,61) ! !WC_ASO3/WC_SULF=0.0 ! @@ -18334,12 +18703,12 @@ SUBROUTINE SUBJ12 !WC_ASO3/WC_ORA2=0.0 ! !WC_ASO3/WC_MO2=+KC18*<WC_SO2> - PJAC(:,62,60)=+TPK%KC18(:)*PCONC(:,55) + PJAC(:,63,61)=+TPK%KC18(:)*PCONC(:,56) ! !WC_ASO3/WC_OP1=0.0 ! !WC_ASO3/WC_ASO3=-KC24*<W_O2> - PJAC(:,62,62)=-TPK%KC24(:)*TPK%W_O2(:) + PJAC(:,63,63)=-TPK%KC24(:)*TPK%W_O2(:) ! !WC_ASO3/WC_ASO4=0.0 ! @@ -18419,6 +18788,8 @@ SUBROUTINE SUBJ12 ! !WC_ASO4/NH3=0.0 ! +!WC_ASO4/DMS=0.0 +! !WC_ASO4/SO2=0.0 ! !WC_ASO4/SULF=0.0 @@ -18490,7 +18861,7 @@ SUBROUTINE SUBJ12 !WC_ASO4/WC_NO2=0.0 ! !WC_ASO4/WC_NO3=+KC15*<WC_SULF> - PJAC(:,63,46)=+TPK%KC15(:)*PCONC(:,56) + PJAC(:,64,47)=+TPK%KC15(:)*PCONC(:,57) ! !WC_ASO4/WC_N2O5=0.0 ! @@ -18511,7 +18882,7 @@ SUBROUTINE SUBJ12 !WC_ASO4/WC_SO2=0.0 ! !WC_ASO4/WC_SULF=+KC15*<WC_NO3> - PJAC(:,63,56)=+TPK%KC15(:)*PCONC(:,46) + PJAC(:,64,57)=+TPK%KC15(:)*PCONC(:,47) ! !WC_ASO4/WC_HCHO=0.0 ! @@ -18526,11 +18897,11 @@ SUBROUTINE SUBJ12 !WC_ASO4/WC_ASO3=0.0 ! !WC_ASO4/WC_ASO4=-KC28 - PJAC(:,63,63)=-TPK%KC28(:) + PJAC(:,64,64)=-TPK%KC28(:) ! !WC_ASO4/WC_ASO5=+KC26*<WC_ASO5>+KC26*<WC_ASO5>+KC26*<WC_ASO5>+KC26*<WC_ASO5> - PJAC(:,63,64)=+TPK%KC26(:)*PCONC(:,64)+TPK%KC26(:)*PCONC(:,64)+TPK%KC26(:)*PCO& -&NC(:,64)+TPK%KC26(:)*PCONC(:,64) + PJAC(:,64,65)=+TPK%KC26(:)*PCONC(:,65)+TPK%KC26(:)*PCONC(:,65)+TPK%KC26(:)*PCO& +&NC(:,65)+TPK%KC26(:)*PCONC(:,65) ! !WC_ASO4/WC_AHSO5=0.0 ! @@ -18606,6 +18977,8 @@ SUBROUTINE SUBJ12 ! !WC_ASO5/NH3=0.0 ! +!WC_ASO5/DMS=0.0 +! !WC_ASO5/SO2=0.0 ! !WC_ASO5/SULF=0.0 @@ -18691,7 +19064,7 @@ SUBROUTINE SUBJ12 !WC_ASO5/WC_OH=0.0 ! !WC_ASO5/WC_HO2=-KC25*<WC_ASO5> - PJAC(:,64,53)=-TPK%KC25(:)*PCONC(:,64) + PJAC(:,65,54)=-TPK%KC25(:)*PCONC(:,65) ! !WC_ASO5/WC_CO2=0.0 ! @@ -18710,14 +19083,14 @@ SUBROUTINE SUBJ12 !WC_ASO5/WC_OP1=0.0 ! !WC_ASO5/WC_ASO3=+KC24*<W_O2> - PJAC(:,64,62)=+TPK%KC24(:)*TPK%W_O2(:) + PJAC(:,65,63)=+TPK%KC24(:)*TPK%W_O2(:) ! !WC_ASO5/WC_ASO4=0.0 ! !WC_ASO5/WC_ASO5=-KC25*<WC_HO2>-KC26*<WC_ASO5>-KC26*<WC_ASO5>-KC26*<WC_ASO5>-KC !26*<WC_ASO5> - PJAC(:,64,64)=-TPK%KC25(:)*PCONC(:,53)-TPK%KC26(:)*PCONC(:,64)-TPK%KC26(:)*PCO& -&NC(:,64)-TPK%KC26(:)*PCONC(:,64)-TPK%KC26(:)*PCONC(:,64) + PJAC(:,65,65)=-TPK%KC25(:)*PCONC(:,54)-TPK%KC26(:)*PCONC(:,65)-TPK%KC26(:)*PCO& +&NC(:,65)-TPK%KC26(:)*PCONC(:,65)-TPK%KC26(:)*PCONC(:,65) ! !WC_ASO5/WC_AHSO5=0.0 ! @@ -18773,6 +19146,14 @@ SUBROUTINE SUBJ12 ! !WC_ASO5/WR_AHMS=0.0 ! +RETURN +END SUBROUTINE SUBJ12 +! +SUBROUTINE SUBJ13 +! +!Indices 66 a 70 +! +! !WC_AHSO5/O3=0.0 ! !WC_AHSO5/H2O2=0.0 @@ -18793,6 +19174,8 @@ SUBROUTINE SUBJ12 ! !WC_AHSO5/NH3=0.0 ! +!WC_AHSO5/DMS=0.0 +! !WC_AHSO5/SO2=0.0 ! !WC_AHSO5/SULF=0.0 @@ -18878,12 +19261,12 @@ SUBROUTINE SUBJ12 !WC_AHSO5/WC_OH=0.0 ! !WC_AHSO5/WC_HO2=+KC25*<WC_ASO5> - PJAC(:,65,53)=+TPK%KC25(:)*PCONC(:,64) + PJAC(:,66,54)=+TPK%KC25(:)*PCONC(:,65) ! !WC_AHSO5/WC_CO2=0.0 ! !WC_AHSO5/WC_SO2=-KC27*<WC_AHSO5> - PJAC(:,65,55)=-TPK%KC27(:)*PCONC(:,65) + PJAC(:,66,56)=-TPK%KC27(:)*PCONC(:,66) ! !WC_AHSO5/WC_SULF=0.0 ! @@ -18902,10 +19285,10 @@ SUBROUTINE SUBJ12 !WC_AHSO5/WC_ASO4=0.0 ! !WC_AHSO5/WC_ASO5=+KC25*<WC_HO2> - PJAC(:,65,64)=+TPK%KC25(:)*PCONC(:,53) + PJAC(:,66,65)=+TPK%KC25(:)*PCONC(:,54) ! !WC_AHSO5/WC_AHSO5=-KC27*<WC_SO2> - PJAC(:,65,65)=-TPK%KC27(:)*PCONC(:,55) + PJAC(:,66,66)=-TPK%KC27(:)*PCONC(:,56) ! !WC_AHSO5/WC_AHMS=0.0 ! @@ -18959,14 +19342,6 @@ SUBROUTINE SUBJ12 ! !WC_AHSO5/WR_AHMS=0.0 ! -RETURN -END SUBROUTINE SUBJ12 -! -SUBROUTINE SUBJ13 -! -!Indices 66 a 70 -! -! !WC_AHMS/O3=0.0 ! !WC_AHMS/H2O2=0.0 @@ -18987,6 +19362,8 @@ SUBROUTINE SUBJ13 ! !WC_AHMS/NH3=0.0 ! +!WC_AHMS/DMS=0.0 +! !WC_AHMS/SO2=0.0 ! !WC_AHMS/SULF=0.0 @@ -19070,19 +19447,19 @@ SUBROUTINE SUBJ13 !WC_AHMS/WC_NH3=0.0 ! !WC_AHMS/WC_OH=-KC23*<WC_AHMS> - PJAC(:,66,52)=-TPK%KC23(:)*PCONC(:,66) + PJAC(:,67,53)=-TPK%KC23(:)*PCONC(:,67) ! !WC_AHMS/WC_HO2=0.0 ! !WC_AHMS/WC_CO2=0.0 ! !WC_AHMS/WC_SO2=+KC21*<WC_HCHO> - PJAC(:,66,55)=+TPK%KC21(:)*PCONC(:,57) + PJAC(:,67,56)=+TPK%KC21(:)*PCONC(:,58) ! !WC_AHMS/WC_SULF=0.0 ! !WC_AHMS/WC_HCHO=+KC21*<WC_SO2> - PJAC(:,66,57)=+TPK%KC21(:)*PCONC(:,55) + PJAC(:,67,58)=+TPK%KC21(:)*PCONC(:,56) ! !WC_AHMS/WC_ORA1=0.0 ! @@ -19101,7 +19478,7 @@ SUBROUTINE SUBJ13 !WC_AHMS/WC_AHSO5=0.0 ! !WC_AHMS/WC_AHMS=-KC22-KC23*<WC_OH> - PJAC(:,66,66)=-TPK%KC22(:)-TPK%KC23(:)*PCONC(:,52) + PJAC(:,67,67)=-TPK%KC22(:)-TPK%KC23(:)*PCONC(:,53) ! !WC_AHMS/WR_O3=0.0 ! @@ -19154,7 +19531,7 @@ SUBROUTINE SUBJ13 !WC_AHMS/WR_AHMS=0.0 ! !WR_O3/O3=+KTR1 - PJAC(:,67,1)=+TPK%KTR1(:) + PJAC(:,68,1)=+TPK%KTR1(:) ! !WR_O3/H2O2=0.0 ! @@ -19174,6 +19551,8 @@ SUBROUTINE SUBJ13 ! !WR_O3/NH3=0.0 ! +!WR_O3/DMS=0.0 +! !WR_O3/SO2=0.0 ! !WR_O3/SULF=0.0 @@ -19287,7 +19666,7 @@ SUBROUTINE SUBJ13 !WR_O3/WC_AHMS=0.0 ! !WR_O3/WR_O3=-KTR21-KR6*<WR_HO2>-KR29*<WR_SO2> - PJAC(:,67,67)=-TPK%KTR21(:)-TPK%KR6(:)*PCONC(:,78)-TPK%KR29(:)*PCONC(:,80) + PJAC(:,68,68)=-TPK%KTR21(:)-TPK%KR6(:)*PCONC(:,79)-TPK%KR29(:)*PCONC(:,81) ! !WR_O3/WR_H2O2=0.0 ! @@ -19310,12 +19689,12 @@ SUBROUTINE SUBJ13 !WR_O3/WR_OH=0.0 ! !WR_O3/WR_HO2=-KR6*<WR_O3> - PJAC(:,67,78)=-TPK%KR6(:)*PCONC(:,67) + PJAC(:,68,79)=-TPK%KR6(:)*PCONC(:,68) ! !WR_O3/WR_CO2=0.0 ! !WR_O3/WR_SO2=-KR29*<WR_O3> - PJAC(:,67,80)=-TPK%KR29(:)*PCONC(:,67) + PJAC(:,68,81)=-TPK%KR29(:)*PCONC(:,68) ! !WR_O3/WR_SULF=0.0 ! @@ -19342,7 +19721,7 @@ SUBROUTINE SUBJ13 !WR_H2O2/O3=0.0 ! !WR_H2O2/H2O2=+KTR2 - PJAC(:,68,2)=+TPK%KTR2(:) + PJAC(:,69,2)=+TPK%KTR2(:) ! !WR_H2O2/NO=0.0 ! @@ -19360,6 +19739,8 @@ SUBROUTINE SUBJ13 ! !WR_H2O2/NH3=0.0 ! +!WR_H2O2/DMS=0.0 +! !WR_H2O2/SO2=0.0 ! !WR_H2O2/SULF=0.0 @@ -19475,8 +19856,8 @@ SUBROUTINE SUBJ13 !WR_H2O2/WR_O3=0.0 ! !WR_H2O2/WR_H2O2=-KTR22-KR1-KR4*<WR_OH>-KR30*<WR_SO2> - PJAC(:,68,68)=-TPK%KTR22(:)-TPK%KR1(:)-TPK%KR4(:)*PCONC(:,77)-TPK%KR30(:)*PCON& -&C(:,80) + PJAC(:,69,69)=-TPK%KTR22(:)-TPK%KR1(:)-TPK%KR4(:)*PCONC(:,78)-TPK%KR30(:)*PCON& +&C(:,81) ! !WR_H2O2/WR_NO=0.0 ! @@ -19495,16 +19876,16 @@ SUBROUTINE SUBJ13 !WR_H2O2/WR_NH3=0.0 ! !WR_H2O2/WR_OH=+KR2*<WR_OH>+KR2*<WR_OH>-KR4*<WR_H2O2> - PJAC(:,68,77)=+TPK%KR2(:)*PCONC(:,77)+TPK%KR2(:)*PCONC(:,77)-TPK%KR4(:)*PCONC(& -&:,68) + PJAC(:,69,78)=+TPK%KR2(:)*PCONC(:,78)+TPK%KR2(:)*PCONC(:,78)-TPK%KR4(:)*PCONC(& +&:,69) ! !WR_H2O2/WR_HO2=+KR5*<WR_HO2>+KR5*<WR_HO2> - PJAC(:,68,78)=+TPK%KR5(:)*PCONC(:,78)+TPK%KR5(:)*PCONC(:,78) + PJAC(:,69,79)=+TPK%KR5(:)*PCONC(:,79)+TPK%KR5(:)*PCONC(:,79) ! !WR_H2O2/WR_CO2=0.0 ! !WR_H2O2/WR_SO2=-KR30*<WR_H2O2> - PJAC(:,68,80)=-TPK%KR30(:)*PCONC(:,68) + PJAC(:,69,81)=-TPK%KR30(:)*PCONC(:,69) ! !WR_H2O2/WR_SULF=0.0 ! @@ -19533,7 +19914,7 @@ SUBROUTINE SUBJ13 !WR_NO/H2O2=0.0 ! !WR_NO/NO=+KTR3 - PJAC(:,69,3)=+TPK%KTR3(:) + PJAC(:,70,3)=+TPK%KTR3(:) ! !WR_NO/NO2=0.0 ! @@ -19549,6 +19930,8 @@ SUBROUTINE SUBJ13 ! !WR_NO/NH3=0.0 ! +!WR_NO/DMS=0.0 +! !WR_NO/SO2=0.0 ! !WR_NO/SULF=0.0 @@ -19666,7 +20049,7 @@ SUBROUTINE SUBJ13 !WR_NO/WR_H2O2=0.0 ! !WR_NO/WR_NO=-KTR23 - PJAC(:,69,69)=-TPK%KTR23(:) + PJAC(:,70,70)=-TPK%KTR23(:) ! !WR_NO/WR_NO2=0.0 ! @@ -19712,6 +20095,14 @@ SUBROUTINE SUBJ13 ! !WR_NO/WR_AHMS=0.0 ! +RETURN +END SUBROUTINE SUBJ13 +! +SUBROUTINE SUBJ14 +! +!Indices 71 a 75 +! +! !WR_NO2/O3=0.0 ! !WR_NO2/H2O2=0.0 @@ -19719,7 +20110,7 @@ SUBROUTINE SUBJ13 !WR_NO2/NO=0.0 ! !WR_NO2/NO2=+KTR4 - PJAC(:,70,4)=+TPK%KTR4(:) + PJAC(:,71,4)=+TPK%KTR4(:) ! !WR_NO2/NO3=0.0 ! @@ -19733,6 +20124,8 @@ SUBROUTINE SUBJ13 ! !WR_NO2/NH3=0.0 ! +!WR_NO2/DMS=0.0 +! !WR_NO2/SO2=0.0 ! !WR_NO2/SULF=0.0 @@ -19852,28 +20245,28 @@ SUBROUTINE SUBJ13 !WR_NO2/WR_NO=0.0 ! !WR_NO2/WR_NO2=-KTR24-KR9*<WR_HO2> - PJAC(:,70,70)=-TPK%KTR24(:)-TPK%KR9(:)*PCONC(:,78) + PJAC(:,71,71)=-TPK%KTR24(:)-TPK%KR9(:)*PCONC(:,79) ! !WR_NO2/WR_NO3=0.0 ! !WR_NO2/WR_N2O5=0.0 ! !WR_NO2/WR_HONO=+KR8*<WR_OH> - PJAC(:,70,73)=+TPK%KR8(:)*PCONC(:,77) + PJAC(:,71,74)=+TPK%KR8(:)*PCONC(:,78) ! !WR_NO2/WR_HNO3=+KR13 - PJAC(:,70,74)=+TPK%KR13(:) + PJAC(:,71,75)=+TPK%KR13(:) ! !WR_NO2/WR_HNO4=+KR10 - PJAC(:,70,75)=+TPK%KR10(:) + PJAC(:,71,76)=+TPK%KR10(:) ! !WR_NO2/WR_NH3=0.0 ! !WR_NO2/WR_OH=+KR8*<WR_HONO> - PJAC(:,70,77)=+TPK%KR8(:)*PCONC(:,73) + PJAC(:,71,78)=+TPK%KR8(:)*PCONC(:,74) ! !WR_NO2/WR_HO2=-KR9*<WR_NO2> - PJAC(:,70,78)=-TPK%KR9(:)*PCONC(:,70) + PJAC(:,71,79)=-TPK%KR9(:)*PCONC(:,71) ! !WR_NO2/WR_CO2=0.0 ! @@ -19901,14 +20294,6 @@ SUBROUTINE SUBJ13 ! !WR_NO2/WR_AHMS=0.0 ! -RETURN -END SUBROUTINE SUBJ13 -! -SUBROUTINE SUBJ14 -! -!Indices 71 a 75 -! -! !WR_NO3/O3=0.0 ! !WR_NO3/H2O2=0.0 @@ -19918,7 +20303,7 @@ SUBROUTINE SUBJ14 !WR_NO3/NO2=0.0 ! !WR_NO3/NO3=+KTR5 - PJAC(:,71,5)=+TPK%KTR5(:) + PJAC(:,72,5)=+TPK%KTR5(:) ! !WR_NO3/N2O5=0.0 ! @@ -19930,6 +20315,8 @@ SUBROUTINE SUBJ14 ! !WR_NO3/NH3=0.0 ! +!WR_NO3/DMS=0.0 +! !WR_NO3/SO2=0.0 ! !WR_NO3/SULF=0.0 @@ -20051,7 +20438,7 @@ SUBROUTINE SUBJ14 !WR_NO3/WR_NO2=0.0 ! !WR_NO3/WR_NO3=-KTR25-KR15*<WR_SULF>-KR16*<WR_SO2> - PJAC(:,71,71)=-TPK%KTR25(:)-TPK%KR15(:)*PCONC(:,81)-TPK%KR16(:)*PCONC(:,80) + PJAC(:,72,72)=-TPK%KTR25(:)-TPK%KR15(:)*PCONC(:,82)-TPK%KR16(:)*PCONC(:,81) ! !WR_NO3/WR_N2O5=0.0 ! @@ -20070,10 +20457,10 @@ SUBROUTINE SUBJ14 !WR_NO3/WR_CO2=0.0 ! !WR_NO3/WR_SO2=-KR16*<WR_NO3> - PJAC(:,71,80)=-TPK%KR16(:)*PCONC(:,71) + PJAC(:,72,81)=-TPK%KR16(:)*PCONC(:,72) ! !WR_NO3/WR_SULF=-KR15*<WR_NO3> - PJAC(:,71,81)=-TPK%KR15(:)*PCONC(:,71) + PJAC(:,72,82)=-TPK%KR15(:)*PCONC(:,72) ! !WR_NO3/WR_HCHO=0.0 ! @@ -20106,7 +20493,7 @@ SUBROUTINE SUBJ14 !WR_N2O5/NO3=0.0 ! !WR_N2O5/N2O5=+KTR6 - PJAC(:,72,6)=+TPK%KTR6(:) + PJAC(:,73,6)=+TPK%KTR6(:) ! !WR_N2O5/HONO=0.0 ! @@ -20116,6 +20503,8 @@ SUBROUTINE SUBJ14 ! !WR_N2O5/NH3=0.0 ! +!WR_N2O5/DMS=0.0 +! !WR_N2O5/SO2=0.0 ! !WR_N2O5/SULF=0.0 @@ -20239,7 +20628,7 @@ SUBROUTINE SUBJ14 !WR_N2O5/WR_NO3=0.0 ! !WR_N2O5/WR_N2O5=-KTR26-KR14 - PJAC(:,72,72)=-TPK%KTR26(:)-TPK%KR14(:) + PJAC(:,73,73)=-TPK%KTR26(:)-TPK%KR14(:) ! !WR_N2O5/WR_HONO=0.0 ! @@ -20292,7 +20681,7 @@ SUBROUTINE SUBJ14 !WR_HONO/N2O5=0.0 ! !WR_HONO/HONO=+KTR7 - PJAC(:,73,7)=+TPK%KTR7(:) + PJAC(:,74,7)=+TPK%KTR7(:) ! !WR_HONO/HNO3=0.0 ! @@ -20300,6 +20689,8 @@ SUBROUTINE SUBJ14 ! !WR_HONO/NH3=0.0 ! +!WR_HONO/DMS=0.0 +! !WR_HONO/SO2=0.0 ! !WR_HONO/SULF=0.0 @@ -20425,17 +20816,17 @@ SUBROUTINE SUBJ14 !WR_HONO/WR_N2O5=0.0 ! !WR_HONO/WR_HONO=-KTR27-KR8*<WR_OH> - PJAC(:,73,73)=-TPK%KTR27(:)-TPK%KR8(:)*PCONC(:,77) + PJAC(:,74,74)=-TPK%KTR27(:)-TPK%KR8(:)*PCONC(:,78) ! !WR_HONO/WR_HNO3=0.0 ! !WR_HONO/WR_HNO4=+KR11 - PJAC(:,73,75)=+TPK%KR11(:) + PJAC(:,74,76)=+TPK%KR11(:) ! !WR_HONO/WR_NH3=0.0 ! !WR_HONO/WR_OH=-KR8*<WR_HONO> - PJAC(:,73,77)=-TPK%KR8(:)*PCONC(:,73) + PJAC(:,74,78)=-TPK%KR8(:)*PCONC(:,74) ! !WR_HONO/WR_HO2=0.0 ! @@ -20480,12 +20871,14 @@ SUBROUTINE SUBJ14 !WR_HNO3/HONO=0.0 ! !WR_HNO3/HNO3=+KTR8 - PJAC(:,74,8)=+TPK%KTR8(:) + PJAC(:,75,8)=+TPK%KTR8(:) ! !WR_HNO3/HNO4=0.0 ! !WR_HNO3/NH3=0.0 ! +!WR_HNO3/DMS=0.0 +! !WR_HNO3/SO2=0.0 ! !WR_HNO3/SULF=0.0 @@ -20607,18 +21000,18 @@ SUBROUTINE SUBJ14 !WR_HNO3/WR_NO2=0.0 ! !WR_HNO3/WR_NO3=+KR15*<WR_SULF>+KR16*<WR_SO2> - PJAC(:,74,71)=+TPK%KR15(:)*PCONC(:,81)+TPK%KR16(:)*PCONC(:,80) + PJAC(:,75,72)=+TPK%KR15(:)*PCONC(:,82)+TPK%KR16(:)*PCONC(:,81) ! !WR_HNO3/WR_N2O5=+KR14+KR14 - PJAC(:,74,72)=+TPK%KR14(:)+TPK%KR14(:) + PJAC(:,75,73)=+TPK%KR14(:)+TPK%KR14(:) ! !WR_HNO3/WR_HONO=0.0 ! !WR_HNO3/WR_HNO3=-KTR28-KR13 - PJAC(:,74,74)=-TPK%KTR28(:)-TPK%KR13(:) + PJAC(:,75,75)=-TPK%KTR28(:)-TPK%KR13(:) ! !WR_HNO3/WR_HNO4=+KR12*<WR_SO2> - PJAC(:,74,75)=+TPK%KR12(:)*PCONC(:,80) + PJAC(:,75,76)=+TPK%KR12(:)*PCONC(:,81) ! !WR_HNO3/WR_NH3=0.0 ! @@ -20629,10 +21022,10 @@ SUBROUTINE SUBJ14 !WR_HNO3/WR_CO2=0.0 ! !WR_HNO3/WR_SO2=+KR12*<WR_HNO4>+KR16*<WR_NO3> - PJAC(:,74,80)=+TPK%KR12(:)*PCONC(:,75)+TPK%KR16(:)*PCONC(:,71) + PJAC(:,75,81)=+TPK%KR12(:)*PCONC(:,76)+TPK%KR16(:)*PCONC(:,72) ! !WR_HNO3/WR_SULF=+KR15*<WR_NO3> - PJAC(:,74,81)=+TPK%KR15(:)*PCONC(:,71) + PJAC(:,75,82)=+TPK%KR15(:)*PCONC(:,72) ! !WR_HNO3/WR_HCHO=0.0 ! @@ -20654,6 +21047,14 @@ SUBROUTINE SUBJ14 ! !WR_HNO3/WR_AHMS=0.0 ! +RETURN +END SUBROUTINE SUBJ14 +! +SUBROUTINE SUBJ15 +! +!Indices 76 a 80 +! +! !WR_HNO4/O3=0.0 ! !WR_HNO4/H2O2=0.0 @@ -20671,10 +21072,12 @@ SUBROUTINE SUBJ14 !WR_HNO4/HNO3=0.0 ! !WR_HNO4/HNO4=+KTR9 - PJAC(:,75,9)=+TPK%KTR9(:) + PJAC(:,76,9)=+TPK%KTR9(:) ! !WR_HNO4/NH3=0.0 ! +!WR_HNO4/DMS=0.0 +! !WR_HNO4/SO2=0.0 ! !WR_HNO4/SULF=0.0 @@ -20794,7 +21197,7 @@ SUBROUTINE SUBJ14 !WR_HNO4/WR_NO=0.0 ! !WR_HNO4/WR_NO2=+KR9*<WR_HO2> - PJAC(:,75,70)=+TPK%KR9(:)*PCONC(:,78) + PJAC(:,76,71)=+TPK%KR9(:)*PCONC(:,79) ! !WR_HNO4/WR_NO3=0.0 ! @@ -20805,19 +21208,19 @@ SUBROUTINE SUBJ14 !WR_HNO4/WR_HNO3=0.0 ! !WR_HNO4/WR_HNO4=-KTR29-KR10-KR11-KR12*<WR_SO2> - PJAC(:,75,75)=-TPK%KTR29(:)-TPK%KR10(:)-TPK%KR11(:)-TPK%KR12(:)*PCONC(:,80) + PJAC(:,76,76)=-TPK%KTR29(:)-TPK%KR10(:)-TPK%KR11(:)-TPK%KR12(:)*PCONC(:,81) ! !WR_HNO4/WR_NH3=0.0 ! !WR_HNO4/WR_OH=0.0 ! !WR_HNO4/WR_HO2=+KR9*<WR_NO2> - PJAC(:,75,78)=+TPK%KR9(:)*PCONC(:,70) + PJAC(:,76,79)=+TPK%KR9(:)*PCONC(:,71) ! !WR_HNO4/WR_CO2=0.0 ! !WR_HNO4/WR_SO2=-KR12*<WR_HNO4> - PJAC(:,75,80)=-TPK%KR12(:)*PCONC(:,75) + PJAC(:,76,81)=-TPK%KR12(:)*PCONC(:,76) ! !WR_HNO4/WR_SULF=0.0 ! @@ -20841,14 +21244,6 @@ SUBROUTINE SUBJ14 ! !WR_HNO4/WR_AHMS=0.0 ! -RETURN -END SUBROUTINE SUBJ14 -! -SUBROUTINE SUBJ15 -! -!Indices 76 a 80 -! -! !WR_NH3/O3=0.0 ! !WR_NH3/H2O2=0.0 @@ -20868,7 +21263,9 @@ SUBROUTINE SUBJ15 !WR_NH3/HNO4=0.0 ! !WR_NH3/NH3=+KTR10 - PJAC(:,76,10)=+TPK%KTR10(:) + PJAC(:,77,10)=+TPK%KTR10(:) +! +!WR_NH3/DMS=0.0 ! !WR_NH3/SO2=0.0 ! @@ -21001,7 +21398,7 @@ SUBROUTINE SUBJ15 !WR_NH3/WR_HNO4=0.0 ! !WR_NH3/WR_NH3=-KTR30 - PJAC(:,76,76)=-TPK%KTR30(:) + PJAC(:,77,77)=-TPK%KTR30(:) ! !WR_NH3/WR_OH=0.0 ! @@ -21053,6 +21450,8 @@ SUBROUTINE SUBJ15 ! !WR_OH/NH3=0.0 ! +!WR_OH/DMS=0.0 +! !WR_OH/SO2=0.0 ! !WR_OH/SULF=0.0 @@ -21060,7 +21459,7 @@ SUBROUTINE SUBJ15 !WR_OH/CO=0.0 ! !WR_OH/OH=+KTR11 - PJAC(:,77,14)=+TPK%KTR11(:) + PJAC(:,78,15)=+TPK%KTR11(:) ! !WR_OH/HO2=0.0 ! @@ -21167,10 +21566,10 @@ SUBROUTINE SUBJ15 !WR_OH/WC_AHMS=0.0 ! !WR_OH/WR_O3=+KR6*<WR_HO2> - PJAC(:,77,67)=+TPK%KR6(:)*PCONC(:,78) + PJAC(:,78,68)=+TPK%KR6(:)*PCONC(:,79) ! !WR_OH/WR_H2O2=+KR1+KR1-KR4*<WR_OH> - PJAC(:,77,68)=+TPK%KR1(:)+TPK%KR1(:)-TPK%KR4(:)*PCONC(:,77) + PJAC(:,78,69)=+TPK%KR1(:)+TPK%KR1(:)-TPK%KR4(:)*PCONC(:,78) ! !WR_OH/WR_NO=0.0 ! @@ -21181,10 +21580,10 @@ SUBROUTINE SUBJ15 !WR_OH/WR_N2O5=0.0 ! !WR_OH/WR_HONO=-KR8*<WR_OH> - PJAC(:,77,73)=-TPK%KR8(:)*PCONC(:,77) + PJAC(:,78,74)=-TPK%KR8(:)*PCONC(:,78) ! !WR_OH/WR_HNO3=+KR13 - PJAC(:,77,74)=+TPK%KR13(:) + PJAC(:,78,75)=+TPK%KR13(:) ! !WR_OH/WR_HNO4=0.0 ! @@ -21193,26 +21592,26 @@ SUBROUTINE SUBJ15 !WR_OH/WR_OH=-KTR31-KR2*<WR_OH>-KR2*<WR_OH>-KR2*<WR_OH>-KR2*<WR_OH>-KR3*<WR_HO2 !>-KR4*<WR_H2O2>-KR7*<WR_SO2>-KR8*<WR_HONO>-KR19*<WR_HCHO>-KR20*<WR_ORA1>-KR23* !<WR_AHMS> - PJAC(:,77,77)=-TPK%KTR31(:)-TPK%KR2(:)*PCONC(:,77)-TPK%KR2(:)*PCONC(:,77)-TPK%& -&KR2(:)*PCONC(:,77)-TPK%KR2(:)*PCONC(:,77)-TPK%KR3(:)*PCONC(:,78)-TPK%KR4(:)*PC& -&ONC(:,68)-TPK%KR7(:)*PCONC(:,80)-TPK%KR8(:)*PCONC(:,73)-TPK%KR19(:)*PCONC(:,82& -&)-TPK%KR20(:)*PCONC(:,83)-TPK%KR23(:)*PCONC(:,91) + PJAC(:,78,78)=-TPK%KTR31(:)-TPK%KR2(:)*PCONC(:,78)-TPK%KR2(:)*PCONC(:,78)-TPK%& +&KR2(:)*PCONC(:,78)-TPK%KR2(:)*PCONC(:,78)-TPK%KR3(:)*PCONC(:,79)-TPK%KR4(:)*PC& +&ONC(:,69)-TPK%KR7(:)*PCONC(:,81)-TPK%KR8(:)*PCONC(:,74)-TPK%KR19(:)*PCONC(:,83& +&)-TPK%KR20(:)*PCONC(:,84)-TPK%KR23(:)*PCONC(:,92) ! !WR_OH/WR_HO2=-KR3*<WR_OH>+KR6*<WR_O3> - PJAC(:,77,78)=-TPK%KR3(:)*PCONC(:,77)+TPK%KR6(:)*PCONC(:,67) + PJAC(:,78,79)=-TPK%KR3(:)*PCONC(:,78)+TPK%KR6(:)*PCONC(:,68) ! !WR_OH/WR_CO2=0.0 ! !WR_OH/WR_SO2=-KR7*<WR_OH> - PJAC(:,77,80)=-TPK%KR7(:)*PCONC(:,77) + PJAC(:,78,81)=-TPK%KR7(:)*PCONC(:,78) ! !WR_OH/WR_SULF=0.0 ! !WR_OH/WR_HCHO=-KR19*<WR_OH> - PJAC(:,77,82)=-TPK%KR19(:)*PCONC(:,77) + PJAC(:,78,83)=-TPK%KR19(:)*PCONC(:,78) ! !WR_OH/WR_ORA1=-KR20*<WR_OH> - PJAC(:,77,83)=-TPK%KR20(:)*PCONC(:,77) + PJAC(:,78,84)=-TPK%KR20(:)*PCONC(:,78) ! !WR_OH/WR_ORA2=0.0 ! @@ -21223,14 +21622,14 @@ SUBROUTINE SUBJ15 !WR_OH/WR_ASO3=0.0 ! !WR_OH/WR_ASO4=+KR28 - PJAC(:,77,88)=+TPK%KR28(:) + PJAC(:,78,89)=+TPK%KR28(:) ! !WR_OH/WR_ASO5=0.0 ! !WR_OH/WR_AHSO5=0.0 ! !WR_OH/WR_AHMS=-KR23*<WR_OH> - PJAC(:,77,91)=-TPK%KR23(:)*PCONC(:,77) + PJAC(:,78,92)=-TPK%KR23(:)*PCONC(:,78) ! !WR_HO2/O3=0.0 ! @@ -21252,6 +21651,8 @@ SUBROUTINE SUBJ15 ! !WR_HO2/NH3=0.0 ! +!WR_HO2/DMS=0.0 +! !WR_HO2/SO2=0.0 ! !WR_HO2/SULF=0.0 @@ -21261,7 +21662,7 @@ SUBROUTINE SUBJ15 !WR_HO2/OH=0.0 ! !WR_HO2/HO2=+KTR12 - PJAC(:,78,15)=+TPK%KTR12(:) + PJAC(:,79,16)=+TPK%KTR12(:) ! !WR_HO2/CH4=0.0 ! @@ -21366,15 +21767,15 @@ SUBROUTINE SUBJ15 !WR_HO2/WC_AHMS=0.0 ! !WR_HO2/WR_O3=-KR6*<WR_HO2> - PJAC(:,78,67)=-TPK%KR6(:)*PCONC(:,78) + PJAC(:,79,68)=-TPK%KR6(:)*PCONC(:,79) ! !WR_HO2/WR_H2O2=+KR4*<WR_OH> - PJAC(:,78,68)=+TPK%KR4(:)*PCONC(:,77) + PJAC(:,79,69)=+TPK%KR4(:)*PCONC(:,78) ! !WR_HO2/WR_NO=0.0 ! !WR_HO2/WR_NO2=-KR9*<WR_HO2> - PJAC(:,78,70)=-TPK%KR9(:)*PCONC(:,78) + PJAC(:,79,71)=-TPK%KR9(:)*PCONC(:,79) ! !WR_HO2/WR_NO3=0.0 ! @@ -21385,20 +21786,20 @@ SUBROUTINE SUBJ15 !WR_HO2/WR_HNO3=0.0 ! !WR_HO2/WR_HNO4=+KR10 - PJAC(:,78,75)=+TPK%KR10(:) + PJAC(:,79,76)=+TPK%KR10(:) ! !WR_HO2/WR_NH3=0.0 ! !WR_HO2/WR_OH=-KR3*<WR_HO2>+KR4*<WR_H2O2>+KR19*<WR_HCHO>+KR20*<WR_ORA1>+KR23*<W !R_AHMS> - PJAC(:,78,77)=-TPK%KR3(:)*PCONC(:,78)+TPK%KR4(:)*PCONC(:,68)+TPK%KR19(:)*PCONC& -&(:,82)+TPK%KR20(:)*PCONC(:,83)+TPK%KR23(:)*PCONC(:,91) + PJAC(:,79,78)=-TPK%KR3(:)*PCONC(:,79)+TPK%KR4(:)*PCONC(:,69)+TPK%KR19(:)*PCONC& +&(:,83)+TPK%KR20(:)*PCONC(:,84)+TPK%KR23(:)*PCONC(:,92) ! !WR_HO2/WR_HO2=-KTR32-KR3*<WR_OH>-KR5*<WR_HO2>-KR5*<WR_HO2>-KR5*<WR_HO2>-KR5*<W !R_HO2>-KR6*<WR_O3>-KR9*<WR_NO2>-KR25*<WR_ASO5> - PJAC(:,78,78)=-TPK%KTR32(:)-TPK%KR3(:)*PCONC(:,77)-TPK%KR5(:)*PCONC(:,78)-TPK%& -&KR5(:)*PCONC(:,78)-TPK%KR5(:)*PCONC(:,78)-TPK%KR5(:)*PCONC(:,78)-TPK%KR6(:)*PC& -&ONC(:,67)-TPK%KR9(:)*PCONC(:,70)-TPK%KR25(:)*PCONC(:,89) + PJAC(:,79,79)=-TPK%KTR32(:)-TPK%KR3(:)*PCONC(:,78)-TPK%KR5(:)*PCONC(:,79)-TPK%& +&KR5(:)*PCONC(:,79)-TPK%KR5(:)*PCONC(:,79)-TPK%KR5(:)*PCONC(:,79)-TPK%KR6(:)*PC& +&ONC(:,68)-TPK%KR9(:)*PCONC(:,71)-TPK%KR25(:)*PCONC(:,90) ! !WR_HO2/WR_CO2=0.0 ! @@ -21407,15 +21808,15 @@ SUBROUTINE SUBJ15 !WR_HO2/WR_SULF=0.0 ! !WR_HO2/WR_HCHO=+KR19*<WR_OH> - PJAC(:,78,82)=+TPK%KR19(:)*PCONC(:,77) + PJAC(:,79,83)=+TPK%KR19(:)*PCONC(:,78) ! !WR_HO2/WR_ORA1=+KR20*<WR_OH> - PJAC(:,78,83)=+TPK%KR20(:)*PCONC(:,77) + PJAC(:,79,84)=+TPK%KR20(:)*PCONC(:,78) ! !WR_HO2/WR_ORA2=0.0 ! !WR_HO2/WR_MO2=+2.00*KR17*<WR_MO2>+2.00*KR17*<WR_MO2> - PJAC(:,78,85)=+2.00*TPK%KR17(:)*PCONC(:,85)+2.00*TPK%KR17(:)*PCONC(:,85) + PJAC(:,79,86)=+2.00*TPK%KR17(:)*PCONC(:,86)+2.00*TPK%KR17(:)*PCONC(:,86) ! !WR_HO2/WR_OP1=0.0 ! @@ -21424,12 +21825,12 @@ SUBROUTINE SUBJ15 !WR_HO2/WR_ASO4=0.0 ! !WR_HO2/WR_ASO5=-KR25*<WR_HO2> - PJAC(:,78,89)=-TPK%KR25(:)*PCONC(:,78) + PJAC(:,79,90)=-TPK%KR25(:)*PCONC(:,79) ! !WR_HO2/WR_AHSO5=0.0 ! !WR_HO2/WR_AHMS=+KR23*<WR_OH> - PJAC(:,78,91)=+TPK%KR23(:)*PCONC(:,77) + PJAC(:,79,92)=+TPK%KR23(:)*PCONC(:,78) ! !WR_CO2/O3=0.0 ! @@ -21451,6 +21852,8 @@ SUBROUTINE SUBJ15 ! !WR_CO2/NH3=0.0 ! +!WR_CO2/DMS=0.0 +! !WR_CO2/SO2=0.0 ! !WR_CO2/SULF=0.0 @@ -21584,12 +21987,12 @@ SUBROUTINE SUBJ15 !WR_CO2/WR_NH3=0.0 ! !WR_CO2/WR_OH=+KR20*<WR_ORA1> - PJAC(:,79,77)=+TPK%KR20(:)*PCONC(:,83) + PJAC(:,80,78)=+TPK%KR20(:)*PCONC(:,84) ! !WR_CO2/WR_HO2=0.0 ! !WR_CO2/WR_CO2=-KTR33 - PJAC(:,79,79)=-TPK%KTR33(:) + PJAC(:,80,80)=-TPK%KTR33(:) ! !WR_CO2/WR_SO2=0.0 ! @@ -21598,7 +22001,7 @@ SUBROUTINE SUBJ15 !WR_CO2/WR_HCHO=0.0 ! !WR_CO2/WR_ORA1=+KR20*<WR_OH> - PJAC(:,79,83)=+TPK%KR20(:)*PCONC(:,77) + PJAC(:,80,84)=+TPK%KR20(:)*PCONC(:,78) ! !WR_CO2/WR_ORA2=0.0 ! @@ -21616,6 +22019,14 @@ SUBROUTINE SUBJ15 ! !WR_CO2/WR_AHMS=0.0 ! +RETURN +END SUBROUTINE SUBJ15 +! +SUBROUTINE SUBJ16 +! +!Indices 81 a 85 +! +! !WR_SO2/O3=0.0 ! !WR_SO2/H2O2=0.0 @@ -21636,8 +22047,10 @@ SUBROUTINE SUBJ15 ! !WR_SO2/NH3=0.0 ! +!WR_SO2/DMS=0.0 +! !WR_SO2/SO2=+KTR14 - PJAC(:,80,11)=+TPK%KTR14(:) + PJAC(:,81,12)=+TPK%KTR14(:) ! !WR_SO2/SULF=0.0 ! @@ -21750,17 +22163,17 @@ SUBROUTINE SUBJ15 !WR_SO2/WC_AHMS=0.0 ! !WR_SO2/WR_O3=-KR29*<WR_SO2> - PJAC(:,80,67)=-TPK%KR29(:)*PCONC(:,80) + PJAC(:,81,68)=-TPK%KR29(:)*PCONC(:,81) ! !WR_SO2/WR_H2O2=-KR30*<WR_SO2> - PJAC(:,80,68)=-TPK%KR30(:)*PCONC(:,80) + PJAC(:,81,69)=-TPK%KR30(:)*PCONC(:,81) ! !WR_SO2/WR_NO=0.0 ! !WR_SO2/WR_NO2=0.0 ! !WR_SO2/WR_NO3=-KR16*<WR_SO2> - PJAC(:,80,71)=-TPK%KR16(:)*PCONC(:,80) + PJAC(:,81,72)=-TPK%KR16(:)*PCONC(:,81) ! !WR_SO2/WR_N2O5=0.0 ! @@ -21769,12 +22182,12 @@ SUBROUTINE SUBJ15 !WR_SO2/WR_HNO3=0.0 ! !WR_SO2/WR_HNO4=-KR12*<WR_SO2> - PJAC(:,80,75)=-TPK%KR12(:)*PCONC(:,80) + PJAC(:,81,76)=-TPK%KR12(:)*PCONC(:,81) ! !WR_SO2/WR_NH3=0.0 ! !WR_SO2/WR_OH=-KR7*<WR_SO2>+KR23*<WR_AHMS> - PJAC(:,80,77)=-TPK%KR7(:)*PCONC(:,80)+TPK%KR23(:)*PCONC(:,91) + PJAC(:,81,78)=-TPK%KR7(:)*PCONC(:,81)+TPK%KR23(:)*PCONC(:,92) ! !WR_SO2/WR_HO2=0.0 ! @@ -21782,21 +22195,21 @@ SUBROUTINE SUBJ15 ! !WR_SO2/WR_SO2=-KTR34-KR7*<WR_OH>-KR12*<WR_HNO4>-KR16*<WR_NO3>-KR18*<WR_MO2>-KR !21*<WR_HCHO>-KR27*<WR_AHSO5>-KR29*<WR_O3>-KR30*<WR_H2O2> - PJAC(:,80,80)=-TPK%KTR34(:)-TPK%KR7(:)*PCONC(:,77)-TPK%KR12(:)*PCONC(:,75)-TPK& -&%KR16(:)*PCONC(:,71)-TPK%KR18(:)*PCONC(:,85)-TPK%KR21(:)*PCONC(:,82)-TPK%KR27(& -&:)*PCONC(:,90)-TPK%KR29(:)*PCONC(:,67)-TPK%KR30(:)*PCONC(:,68) + PJAC(:,81,81)=-TPK%KTR34(:)-TPK%KR7(:)*PCONC(:,78)-TPK%KR12(:)*PCONC(:,76)-TPK& +&%KR16(:)*PCONC(:,72)-TPK%KR18(:)*PCONC(:,86)-TPK%KR21(:)*PCONC(:,83)-TPK%KR27(& +&:)*PCONC(:,91)-TPK%KR29(:)*PCONC(:,68)-TPK%KR30(:)*PCONC(:,69) ! !WR_SO2/WR_SULF=0.0 ! !WR_SO2/WR_HCHO=-KR21*<WR_SO2> - PJAC(:,80,82)=-TPK%KR21(:)*PCONC(:,80) + PJAC(:,81,83)=-TPK%KR21(:)*PCONC(:,81) ! !WR_SO2/WR_ORA1=0.0 ! !WR_SO2/WR_ORA2=0.0 ! !WR_SO2/WR_MO2=-KR18*<WR_SO2> - PJAC(:,80,85)=-TPK%KR18(:)*PCONC(:,80) + PJAC(:,81,86)=-TPK%KR18(:)*PCONC(:,81) ! !WR_SO2/WR_OP1=0.0 ! @@ -21807,18 +22220,10 @@ SUBROUTINE SUBJ15 !WR_SO2/WR_ASO5=0.0 ! !WR_SO2/WR_AHSO5=-KR27*<WR_SO2> - PJAC(:,80,90)=-TPK%KR27(:)*PCONC(:,80) + PJAC(:,81,91)=-TPK%KR27(:)*PCONC(:,81) ! !WR_SO2/WR_AHMS=+KR22+KR23*<WR_OH> - PJAC(:,80,91)=+TPK%KR22(:)+TPK%KR23(:)*PCONC(:,77) -! -RETURN -END SUBROUTINE SUBJ15 -! -SUBROUTINE SUBJ16 -! -!Indices 81 a 85 -! + PJAC(:,81,92)=+TPK%KR22(:)+TPK%KR23(:)*PCONC(:,78) ! !WR_SULF/O3=0.0 ! @@ -21840,10 +22245,12 @@ SUBROUTINE SUBJ16 ! !WR_SULF/NH3=0.0 ! +!WR_SULF/DMS=0.0 +! !WR_SULF/SO2=0.0 ! !WR_SULF/SULF=+KTR15 - PJAC(:,81,12)=+TPK%KTR15(:) + PJAC(:,82,13)=+TPK%KTR15(:) ! !WR_SULF/CO=0.0 ! @@ -21954,17 +22361,17 @@ SUBROUTINE SUBJ16 !WR_SULF/WC_AHMS=0.0 ! !WR_SULF/WR_O3=+KR29*<WR_SO2> - PJAC(:,81,67)=+TPK%KR29(:)*PCONC(:,80) + PJAC(:,82,68)=+TPK%KR29(:)*PCONC(:,81) ! !WR_SULF/WR_H2O2=+KR30*<WR_SO2> - PJAC(:,81,68)=+TPK%KR30(:)*PCONC(:,80) + PJAC(:,82,69)=+TPK%KR30(:)*PCONC(:,81) ! !WR_SULF/WR_NO=0.0 ! !WR_SULF/WR_NO2=0.0 ! !WR_SULF/WR_NO3=-KR15*<WR_SULF> - PJAC(:,81,71)=-TPK%KR15(:)*PCONC(:,81) + PJAC(:,82,72)=-TPK%KR15(:)*PCONC(:,82) ! !WR_SULF/WR_N2O5=0.0 ! @@ -21973,7 +22380,7 @@ SUBROUTINE SUBJ16 !WR_SULF/WR_HNO3=0.0 ! !WR_SULF/WR_HNO4=+KR12*<WR_SO2> - PJAC(:,81,75)=+TPK%KR12(:)*PCONC(:,80) + PJAC(:,82,76)=+TPK%KR12(:)*PCONC(:,81) ! !WR_SULF/WR_NH3=0.0 ! @@ -21985,11 +22392,11 @@ SUBROUTINE SUBJ16 ! !WR_SULF/WR_SO2=+KR12*<WR_HNO4>+2.00*KR27*<WR_AHSO5>+KR29*<WR_O3>+KR30*<WR_H2O2 !> - PJAC(:,81,80)=+TPK%KR12(:)*PCONC(:,75)+2.00*TPK%KR27(:)*PCONC(:,90)+TPK%KR29(:& -&)*PCONC(:,67)+TPK%KR30(:)*PCONC(:,68) + PJAC(:,82,81)=+TPK%KR12(:)*PCONC(:,76)+2.00*TPK%KR27(:)*PCONC(:,91)+TPK%KR29(:& +&)*PCONC(:,68)+TPK%KR30(:)*PCONC(:,69) ! !WR_SULF/WR_SULF=-KTR35-KR15*<WR_NO3> - PJAC(:,81,81)=-TPK%KTR35(:)-TPK%KR15(:)*PCONC(:,71) + PJAC(:,82,82)=-TPK%KTR35(:)-TPK%KR15(:)*PCONC(:,72) ! !WR_SULF/WR_HCHO=0.0 ! @@ -22004,12 +22411,12 @@ SUBROUTINE SUBJ16 !WR_SULF/WR_ASO3=0.0 ! !WR_SULF/WR_ASO4=+KR28 - PJAC(:,81,88)=+TPK%KR28(:) + PJAC(:,82,89)=+TPK%KR28(:) ! !WR_SULF/WR_ASO5=0.0 ! !WR_SULF/WR_AHSO5=+2.00*KR27*<WR_SO2> - PJAC(:,81,90)=+2.00*TPK%KR27(:)*PCONC(:,80) + PJAC(:,82,91)=+2.00*TPK%KR27(:)*PCONC(:,81) ! !WR_SULF/WR_AHMS=0.0 ! @@ -22033,6 +22440,8 @@ SUBROUTINE SUBJ16 ! !WR_HCHO/NH3=0.0 ! +!WR_HCHO/DMS=0.0 +! !WR_HCHO/SO2=0.0 ! !WR_HCHO/SULF=0.0 @@ -22056,7 +22465,7 @@ SUBROUTINE SUBJ16 !WR_HCHO/ARO=0.0 ! !WR_HCHO/HCHO=+KTR16 - PJAC(:,82,22)=+TPK%KTR16(:) + PJAC(:,83,23)=+TPK%KTR16(:) ! !WR_HCHO/ALD=0.0 ! @@ -22167,26 +22576,26 @@ SUBROUTINE SUBJ16 !WR_HCHO/WR_NH3=0.0 ! !WR_HCHO/WR_OH=-KR19*<WR_HCHO> - PJAC(:,82,77)=-TPK%KR19(:)*PCONC(:,82) + PJAC(:,83,78)=-TPK%KR19(:)*PCONC(:,83) ! !WR_HCHO/WR_HO2=0.0 ! !WR_HCHO/WR_CO2=0.0 ! !WR_HCHO/WR_SO2=-KR21*<WR_HCHO> - PJAC(:,82,80)=-TPK%KR21(:)*PCONC(:,82) + PJAC(:,83,81)=-TPK%KR21(:)*PCONC(:,83) ! !WR_HCHO/WR_SULF=0.0 ! !WR_HCHO/WR_HCHO=-KTR36-KR19*<WR_OH>-KR21*<WR_SO2> - PJAC(:,82,82)=-TPK%KTR36(:)-TPK%KR19(:)*PCONC(:,77)-TPK%KR21(:)*PCONC(:,80) + PJAC(:,83,83)=-TPK%KTR36(:)-TPK%KR19(:)*PCONC(:,78)-TPK%KR21(:)*PCONC(:,81) ! !WR_HCHO/WR_ORA1=0.0 ! !WR_HCHO/WR_ORA2=0.0 ! !WR_HCHO/WR_MO2=+2.00*KR17*<WR_MO2>+2.00*KR17*<WR_MO2> - PJAC(:,82,85)=+2.00*TPK%KR17(:)*PCONC(:,85)+2.00*TPK%KR17(:)*PCONC(:,85) + PJAC(:,83,86)=+2.00*TPK%KR17(:)*PCONC(:,86)+2.00*TPK%KR17(:)*PCONC(:,86) ! !WR_HCHO/WR_OP1=0.0 ! @@ -22199,7 +22608,7 @@ SUBROUTINE SUBJ16 !WR_HCHO/WR_AHSO5=0.0 ! !WR_HCHO/WR_AHMS=+KR22 - PJAC(:,82,91)=+TPK%KR22(:) + PJAC(:,83,92)=+TPK%KR22(:) ! !WR_ORA1/O3=0.0 ! @@ -22221,6 +22630,8 @@ SUBROUTINE SUBJ16 ! !WR_ORA1/NH3=0.0 ! +!WR_ORA1/DMS=0.0 +! !WR_ORA1/SO2=0.0 ! !WR_ORA1/SULF=0.0 @@ -22260,7 +22671,7 @@ SUBROUTINE SUBJ16 !WR_ORA1/OP2=0.0 ! !WR_ORA1/ORA1=+KTR17 - PJAC(:,83,30)=+TPK%KTR17(:) + PJAC(:,84,31)=+TPK%KTR17(:) ! !WR_ORA1/ORA2=0.0 ! @@ -22355,8 +22766,8 @@ SUBROUTINE SUBJ16 !WR_ORA1/WR_NH3=0.0 ! !WR_ORA1/WR_OH=+KR19*<WR_HCHO>-KR20*<WR_ORA1>+KR23*<WR_AHMS> - PJAC(:,83,77)=+TPK%KR19(:)*PCONC(:,82)-TPK%KR20(:)*PCONC(:,83)+TPK%KR23(:)*PCO& -&NC(:,91) + PJAC(:,84,78)=+TPK%KR19(:)*PCONC(:,83)-TPK%KR20(:)*PCONC(:,84)+TPK%KR23(:)*PCO& +&NC(:,92) ! !WR_ORA1/WR_HO2=0.0 ! @@ -22367,10 +22778,10 @@ SUBROUTINE SUBJ16 !WR_ORA1/WR_SULF=0.0 ! !WR_ORA1/WR_HCHO=+KR19*<WR_OH> - PJAC(:,83,82)=+TPK%KR19(:)*PCONC(:,77) + PJAC(:,84,83)=+TPK%KR19(:)*PCONC(:,78) ! !WR_ORA1/WR_ORA1=-KTR37-KR20*<WR_OH> - PJAC(:,83,83)=-TPK%KTR37(:)-TPK%KR20(:)*PCONC(:,77) + PJAC(:,84,84)=-TPK%KTR37(:)-TPK%KR20(:)*PCONC(:,78) ! !WR_ORA1/WR_ORA2=0.0 ! @@ -22387,7 +22798,7 @@ SUBROUTINE SUBJ16 !WR_ORA1/WR_AHSO5=0.0 ! !WR_ORA1/WR_AHMS=+KR23*<WR_OH> - PJAC(:,83,91)=+TPK%KR23(:)*PCONC(:,77) + PJAC(:,84,92)=+TPK%KR23(:)*PCONC(:,78) ! !WR_ORA2/O3=0.0 ! @@ -22409,6 +22820,8 @@ SUBROUTINE SUBJ16 ! !WR_ORA2/NH3=0.0 ! +!WR_ORA2/DMS=0.0 +! !WR_ORA2/SO2=0.0 ! !WR_ORA2/SULF=0.0 @@ -22450,7 +22863,7 @@ SUBROUTINE SUBJ16 !WR_ORA2/ORA1=0.0 ! !WR_ORA2/ORA2=+KTR18 - PJAC(:,84,31)=+TPK%KTR18(:) + PJAC(:,85,32)=+TPK%KTR18(:) ! !WR_ORA2/MO2=0.0 ! @@ -22557,7 +22970,7 @@ SUBROUTINE SUBJ16 !WR_ORA2/WR_ORA1=0.0 ! !WR_ORA2/WR_ORA2=-KTR38 - PJAC(:,84,84)=-TPK%KTR38(:) + PJAC(:,85,85)=-TPK%KTR38(:) ! !WR_ORA2/WR_MO2=0.0 ! @@ -22573,6 +22986,14 @@ SUBROUTINE SUBJ16 ! !WR_ORA2/WR_AHMS=0.0 ! +RETURN +END SUBROUTINE SUBJ16 +! +SUBROUTINE SUBJ17 +! +!Indices 86 a 90 +! +! !WR_MO2/O3=0.0 ! !WR_MO2/H2O2=0.0 @@ -22593,6 +23014,8 @@ SUBROUTINE SUBJ16 ! !WR_MO2/NH3=0.0 ! +!WR_MO2/DMS=0.0 +! !WR_MO2/SO2=0.0 ! !WR_MO2/SULF=0.0 @@ -22636,7 +23059,7 @@ SUBROUTINE SUBJ16 !WR_MO2/ORA2=0.0 ! !WR_MO2/MO2=+KTR19 - PJAC(:,85,32)=+TPK%KTR19(:) + PJAC(:,86,33)=+TPK%KTR19(:) ! !WR_MO2/ALKAP=0.0 ! @@ -22733,7 +23156,7 @@ SUBROUTINE SUBJ16 !WR_MO2/WR_CO2=0.0 ! !WR_MO2/WR_SO2=-KR18*<WR_MO2> - PJAC(:,85,80)=-TPK%KR18(:)*PCONC(:,85) + PJAC(:,86,81)=-TPK%KR18(:)*PCONC(:,86) ! !WR_MO2/WR_SULF=0.0 ! @@ -22745,8 +23168,8 @@ SUBROUTINE SUBJ16 ! !WR_MO2/WR_MO2=-KTR39-KR17*<WR_MO2>-KR17*<WR_MO2>-KR17*<WR_MO2>-KR17*<WR_MO2>-K !R18*<WR_SO2> - PJAC(:,85,85)=-TPK%KTR39(:)-TPK%KR17(:)*PCONC(:,85)-TPK%KR17(:)*PCONC(:,85)-TP& -&K%KR17(:)*PCONC(:,85)-TPK%KR17(:)*PCONC(:,85)-TPK%KR18(:)*PCONC(:,80) + PJAC(:,86,86)=-TPK%KTR39(:)-TPK%KR17(:)*PCONC(:,86)-TPK%KR17(:)*PCONC(:,86)-TP& +&K%KR17(:)*PCONC(:,86)-TPK%KR17(:)*PCONC(:,86)-TPK%KR18(:)*PCONC(:,81) ! !WR_MO2/WR_OP1=0.0 ! @@ -22760,14 +23183,6 @@ SUBROUTINE SUBJ16 ! !WR_MO2/WR_AHMS=0.0 ! -RETURN -END SUBROUTINE SUBJ16 -! -SUBROUTINE SUBJ17 -! -!Indices 86 a 90 -! -! !WR_OP1/O3=0.0 ! !WR_OP1/H2O2=0.0 @@ -22788,6 +23203,8 @@ SUBROUTINE SUBJ17 ! !WR_OP1/NH3=0.0 ! +!WR_OP1/DMS=0.0 +! !WR_OP1/SO2=0.0 ! !WR_OP1/SULF=0.0 @@ -22823,7 +23240,7 @@ SUBROUTINE SUBJ17 !WR_OP1/PAN=0.0 ! !WR_OP1/OP1=+KTR20 - PJAC(:,86,28)=+TPK%KTR20(:) + PJAC(:,87,29)=+TPK%KTR20(:) ! !WR_OP1/OP2=0.0 ! @@ -22928,7 +23345,7 @@ SUBROUTINE SUBJ17 !WR_OP1/WR_CO2=0.0 ! !WR_OP1/WR_SO2=+KR18*<WR_MO2> - PJAC(:,86,80)=+TPK%KR18(:)*PCONC(:,85) + PJAC(:,87,81)=+TPK%KR18(:)*PCONC(:,86) ! !WR_OP1/WR_SULF=0.0 ! @@ -22939,10 +23356,10 @@ SUBROUTINE SUBJ17 !WR_OP1/WR_ORA2=0.0 ! !WR_OP1/WR_MO2=+KR18*<WR_SO2> - PJAC(:,86,85)=+TPK%KR18(:)*PCONC(:,80) + PJAC(:,87,86)=+TPK%KR18(:)*PCONC(:,81) ! !WR_OP1/WR_OP1=-KTR40 - PJAC(:,86,86)=-TPK%KTR40(:) + PJAC(:,87,87)=-TPK%KTR40(:) ! !WR_OP1/WR_ASO3=0.0 ! @@ -22974,6 +23391,8 @@ SUBROUTINE SUBJ17 ! !WR_ASO3/NH3=0.0 ! +!WR_ASO3/DMS=0.0 +! !WR_ASO3/SO2=0.0 ! !WR_ASO3/SULF=0.0 @@ -23095,7 +23514,7 @@ SUBROUTINE SUBJ17 !WR_ASO3/WR_NO2=0.0 ! !WR_ASO3/WR_NO3=+KR16*<WR_SO2> - PJAC(:,87,71)=+TPK%KR16(:)*PCONC(:,80) + PJAC(:,88,72)=+TPK%KR16(:)*PCONC(:,81) ! !WR_ASO3/WR_N2O5=0.0 ! @@ -23108,15 +23527,15 @@ SUBROUTINE SUBJ17 !WR_ASO3/WR_NH3=0.0 ! !WR_ASO3/WR_OH=+KR7*<WR_SO2> - PJAC(:,87,77)=+TPK%KR7(:)*PCONC(:,80) + PJAC(:,88,78)=+TPK%KR7(:)*PCONC(:,81) ! !WR_ASO3/WR_HO2=0.0 ! !WR_ASO3/WR_CO2=0.0 ! !WR_ASO3/WR_SO2=+KR7*<WR_OH>+KR16*<WR_NO3>+KR18*<WR_MO2> - PJAC(:,87,80)=+TPK%KR7(:)*PCONC(:,77)+TPK%KR16(:)*PCONC(:,71)+TPK%KR18(:)*PCON& -&C(:,85) + PJAC(:,88,81)=+TPK%KR7(:)*PCONC(:,78)+TPK%KR16(:)*PCONC(:,72)+TPK%KR18(:)*PCON& +&C(:,86) ! !WR_ASO3/WR_SULF=0.0 ! @@ -23127,12 +23546,12 @@ SUBROUTINE SUBJ17 !WR_ASO3/WR_ORA2=0.0 ! !WR_ASO3/WR_MO2=+KR18*<WR_SO2> - PJAC(:,87,85)=+TPK%KR18(:)*PCONC(:,80) + PJAC(:,88,86)=+TPK%KR18(:)*PCONC(:,81) ! !WR_ASO3/WR_OP1=0.0 ! !WR_ASO3/WR_ASO3=-KR24*<W_O2> - PJAC(:,87,87)=-TPK%KR24(:)*TPK%W_O2(:) + PJAC(:,88,88)=-TPK%KR24(:)*TPK%W_O2(:) ! !WR_ASO3/WR_ASO4=0.0 ! @@ -23162,6 +23581,8 @@ SUBROUTINE SUBJ17 ! !WR_ASO4/NH3=0.0 ! +!WR_ASO4/DMS=0.0 +! !WR_ASO4/SO2=0.0 ! !WR_ASO4/SULF=0.0 @@ -23283,7 +23704,7 @@ SUBROUTINE SUBJ17 !WR_ASO4/WR_NO2=0.0 ! !WR_ASO4/WR_NO3=+KR15*<WR_SULF> - PJAC(:,88,71)=+TPK%KR15(:)*PCONC(:,81) + PJAC(:,89,72)=+TPK%KR15(:)*PCONC(:,82) ! !WR_ASO4/WR_N2O5=0.0 ! @@ -23304,7 +23725,7 @@ SUBROUTINE SUBJ17 !WR_ASO4/WR_SO2=0.0 ! !WR_ASO4/WR_SULF=+KR15*<WR_NO3> - PJAC(:,88,81)=+TPK%KR15(:)*PCONC(:,71) + PJAC(:,89,82)=+TPK%KR15(:)*PCONC(:,72) ! !WR_ASO4/WR_HCHO=0.0 ! @@ -23319,11 +23740,11 @@ SUBROUTINE SUBJ17 !WR_ASO4/WR_ASO3=0.0 ! !WR_ASO4/WR_ASO4=-KR28 - PJAC(:,88,88)=-TPK%KR28(:) + PJAC(:,89,89)=-TPK%KR28(:) ! !WR_ASO4/WR_ASO5=+KR26*<WR_ASO5>+KR26*<WR_ASO5>+KR26*<WR_ASO5>+KR26*<WR_ASO5> - PJAC(:,88,89)=+TPK%KR26(:)*PCONC(:,89)+TPK%KR26(:)*PCONC(:,89)+TPK%KR26(:)*PCO& -&NC(:,89)+TPK%KR26(:)*PCONC(:,89) + PJAC(:,89,90)=+TPK%KR26(:)*PCONC(:,90)+TPK%KR26(:)*PCONC(:,90)+TPK%KR26(:)*PCO& +&NC(:,90)+TPK%KR26(:)*PCONC(:,90) ! !WR_ASO4/WR_AHSO5=0.0 ! @@ -23349,6 +23770,8 @@ SUBROUTINE SUBJ17 ! !WR_ASO5/NH3=0.0 ! +!WR_ASO5/DMS=0.0 +! !WR_ASO5/SO2=0.0 ! !WR_ASO5/SULF=0.0 @@ -23484,7 +23907,7 @@ SUBROUTINE SUBJ17 !WR_ASO5/WR_OH=0.0 ! !WR_ASO5/WR_HO2=-KR25*<WR_ASO5> - PJAC(:,89,78)=-TPK%KR25(:)*PCONC(:,89) + PJAC(:,90,79)=-TPK%KR25(:)*PCONC(:,90) ! !WR_ASO5/WR_CO2=0.0 ! @@ -23503,19 +23926,27 @@ SUBROUTINE SUBJ17 !WR_ASO5/WR_OP1=0.0 ! !WR_ASO5/WR_ASO3=+KR24*<W_O2> - PJAC(:,89,87)=+TPK%KR24(:)*TPK%W_O2(:) + PJAC(:,90,88)=+TPK%KR24(:)*TPK%W_O2(:) ! !WR_ASO5/WR_ASO4=0.0 ! !WR_ASO5/WR_ASO5=-KR25*<WR_HO2>-KR26*<WR_ASO5>-KR26*<WR_ASO5>-KR26*<WR_ASO5>-KR !26*<WR_ASO5> - PJAC(:,89,89)=-TPK%KR25(:)*PCONC(:,78)-TPK%KR26(:)*PCONC(:,89)-TPK%KR26(:)*PCO& -&NC(:,89)-TPK%KR26(:)*PCONC(:,89)-TPK%KR26(:)*PCONC(:,89) + PJAC(:,90,90)=-TPK%KR25(:)*PCONC(:,79)-TPK%KR26(:)*PCONC(:,90)-TPK%KR26(:)*PCO& +&NC(:,90)-TPK%KR26(:)*PCONC(:,90)-TPK%KR26(:)*PCONC(:,90) ! !WR_ASO5/WR_AHSO5=0.0 ! !WR_ASO5/WR_AHMS=0.0 ! +RETURN +END SUBROUTINE SUBJ17 +! +SUBROUTINE SUBJ18 +! +!Indices 91 a 92 +! +! !WR_AHSO5/O3=0.0 ! !WR_AHSO5/H2O2=0.0 @@ -23536,6 +23967,8 @@ SUBROUTINE SUBJ17 ! !WR_AHSO5/NH3=0.0 ! +!WR_AHSO5/DMS=0.0 +! !WR_AHSO5/SO2=0.0 ! !WR_AHSO5/SULF=0.0 @@ -23671,12 +24104,12 @@ SUBROUTINE SUBJ17 !WR_AHSO5/WR_OH=0.0 ! !WR_AHSO5/WR_HO2=+KR25*<WR_ASO5> - PJAC(:,90,78)=+TPK%KR25(:)*PCONC(:,89) + PJAC(:,91,79)=+TPK%KR25(:)*PCONC(:,90) ! !WR_AHSO5/WR_CO2=0.0 ! !WR_AHSO5/WR_SO2=-KR27*<WR_AHSO5> - PJAC(:,90,80)=-TPK%KR27(:)*PCONC(:,90) + PJAC(:,91,81)=-TPK%KR27(:)*PCONC(:,91) ! !WR_AHSO5/WR_SULF=0.0 ! @@ -23695,21 +24128,13 @@ SUBROUTINE SUBJ17 !WR_AHSO5/WR_ASO4=0.0 ! !WR_AHSO5/WR_ASO5=+KR25*<WR_HO2> - PJAC(:,90,89)=+TPK%KR25(:)*PCONC(:,78) + PJAC(:,91,90)=+TPK%KR25(:)*PCONC(:,79) ! !WR_AHSO5/WR_AHSO5=-KR27*<WR_SO2> - PJAC(:,90,90)=-TPK%KR27(:)*PCONC(:,80) + PJAC(:,91,91)=-TPK%KR27(:)*PCONC(:,81) ! !WR_AHSO5/WR_AHMS=0.0 ! -RETURN -END SUBROUTINE SUBJ17 -! -SUBROUTINE SUBJ18 -! -!Indices 91 a 91 -! -! !WR_AHMS/O3=0.0 ! !WR_AHMS/H2O2=0.0 @@ -23730,6 +24155,8 @@ SUBROUTINE SUBJ18 ! !WR_AHMS/NH3=0.0 ! +!WR_AHMS/DMS=0.0 +! !WR_AHMS/SO2=0.0 ! !WR_AHMS/SULF=0.0 @@ -23863,19 +24290,19 @@ SUBROUTINE SUBJ18 !WR_AHMS/WR_NH3=0.0 ! !WR_AHMS/WR_OH=-KR23*<WR_AHMS> - PJAC(:,91,77)=-TPK%KR23(:)*PCONC(:,91) + PJAC(:,92,78)=-TPK%KR23(:)*PCONC(:,92) ! !WR_AHMS/WR_HO2=0.0 ! !WR_AHMS/WR_CO2=0.0 ! !WR_AHMS/WR_SO2=+KR21*<WR_HCHO> - PJAC(:,91,80)=+TPK%KR21(:)*PCONC(:,82) + PJAC(:,92,81)=+TPK%KR21(:)*PCONC(:,83) ! !WR_AHMS/WR_SULF=0.0 ! !WR_AHMS/WR_HCHO=+KR21*<WR_SO2> - PJAC(:,91,82)=+TPK%KR21(:)*PCONC(:,80) + PJAC(:,92,83)=+TPK%KR21(:)*PCONC(:,81) ! !WR_AHMS/WR_ORA1=0.0 ! @@ -23894,7 +24321,7 @@ SUBROUTINE SUBJ18 !WR_AHMS/WR_AHSO5=0.0 ! !WR_AHMS/WR_AHMS=-KR22-KR23*<WR_OH> - PJAC(:,91,91)=-TPK%KR22(:)-TPK%KR23(:)*PCONC(:,77) + PJAC(:,92,92)=-TPK%KR22(:)-TPK%KR23(:)*PCONC(:,78) ! RETURN END SUBROUTINE SUBJ18 @@ -23987,7 +24414,7 @@ TPK%O3P(:)=(TPK%K001(:)*PCONC(:,JP_NO2)+TPK%K003(:)*PCONC(:,JP_O3)+TPK%K008(:)*P &0.09000*TPK%K080(:)*PCONC(:,JP_BIO)*PCONC(:,JP_O3))/& &(TPK%K018(:)*TPK%O2(:)+TPK%K019(:)*PCONC(:,JP_O3)+TPK%K029(:)*PCONC(:,JP_NO)+& &TPK%K030(:)*PCONC(:,JP_NO2)+TPK%K031(:)*PCONC(:,JP_NO2)+TPK%K054(:)*PCONC(:,JP_BIO)+& - &TPK%K055(:)*PCONC(:,JP_CARBO)) + &TPK%K055(:)*PCONC(:,JP_CARBO)+TPK%K134(:)*PCONC(:,JP_DMS)) ! /END_CODE/ PJAC(:,:,:) = 0.0 CALL SUBJ0 @@ -24011,9 +24438,9 @@ SUBROUTINE SUBJ0 !O3/O3=-K002-K003-K019*<O3P>-K023*<OH>-K024*<HO2>-K042*<NO>-K043*<NO2>-K079*<AL !KE>-K080*<BIO>-K081*<CARBO>-K082*<PAN>-K087*<ADD> PJAC(:,1,1)=-TPK%K002(:)-TPK%K003(:)-TPK%K019(:)*TPK%O3P(:)-TPK%K023(:)*PCONC(& -&:,14)-TPK%K024(:)*PCONC(:,15)-TPK%K042(:)*PCONC(:,3)-TPK%K043(:)*PCONC(:,4)-TP& -&K%K079(:)*PCONC(:,19)-TPK%K080(:)*PCONC(:,20)-TPK%K081(:)*PCONC(:,25)-TPK%K082& -&(:)*PCONC(:,27)-TPK%K087(:)*PCONC(:,37) +&:,15)-TPK%K024(:)*PCONC(:,16)-TPK%K042(:)*PCONC(:,3)-TPK%K043(:)*PCONC(:,4)-TP& +&K%K079(:)*PCONC(:,20)-TPK%K080(:)*PCONC(:,21)-TPK%K081(:)*PCONC(:,26)-TPK%K082& +&(:)*PCONC(:,28)-TPK%K087(:)*PCONC(:,38) ! !O3/H2O2=0.0 ! @@ -24035,6 +24462,8 @@ SUBROUTINE SUBJ0 ! !O3/NH3=0.0 ! +!O3/DMS=0.0 +! !O3/SO2=0.0 ! !O3/SULF=0.0 @@ -24042,10 +24471,10 @@ SUBROUTINE SUBJ0 !O3/CO=0.0 ! !O3/OH=-K023*<O3> - PJAC(:,1,14)=-TPK%K023(:)*PCONC(:,1) + PJAC(:,1,15)=-TPK%K023(:)*PCONC(:,1) ! !O3/HO2=-K024*<O3>+0.17307*K0102*<CARBOP> - PJAC(:,1,15)=-TPK%K024(:)*PCONC(:,1)+0.17307*TPK%K0102(:)*PCONC(:,39) + PJAC(:,1,16)=-TPK%K024(:)*PCONC(:,1)+0.17307*TPK%K0102(:)*PCONC(:,40) ! !O3/CH4=0.0 ! @@ -24054,10 +24483,10 @@ SUBROUTINE SUBJ0 !O3/ALKA=0.0 ! !O3/ALKE=-K079*<O3> - PJAC(:,1,19)=-TPK%K079(:)*PCONC(:,1) + PJAC(:,1,20)=-TPK%K079(:)*PCONC(:,1) ! !O3/BIO=-K080*<O3> - PJAC(:,1,20)=-TPK%K080(:)*PCONC(:,1) + PJAC(:,1,21)=-TPK%K080(:)*PCONC(:,1) ! !O3/ARO=0.0 ! @@ -24068,12 +24497,12 @@ SUBROUTINE SUBJ0 !O3/KET=0.0 ! !O3/CARBO=-K081*<O3> - PJAC(:,1,25)=-TPK%K081(:)*PCONC(:,1) + PJAC(:,1,26)=-TPK%K081(:)*PCONC(:,1) ! !O3/ONIT=0.0 ! !O3/PAN=-K082*<O3> - PJAC(:,1,27)=-TPK%K082(:)*PCONC(:,1) + PJAC(:,1,28)=-TPK%K082(:)*PCONC(:,1) ! !O3/OP1=0.0 ! @@ -24094,22 +24523,22 @@ SUBROUTINE SUBJ0 !O3/PHO=0.0 ! !O3/ADD=-K087*<O3> - PJAC(:,1,37)=-TPK%K087(:)*PCONC(:,1) + PJAC(:,1,38)=-TPK%K087(:)*PCONC(:,1) ! !O3/AROP=0.0 ! !O3/CARBOP=+0.17307*K0102*<HO2> - PJAC(:,1,39)=+0.17307*TPK%K0102(:)*PCONC(:,15) + PJAC(:,1,40)=+0.17307*TPK%K0102(:)*PCONC(:,16) ! !O3/OLN=0.0 ! !O3/XO2=0.0 ! !H2O2/O3=+0.01833*K079*<ALKE>+0.00100*K080*<BIO> - PJAC(:,2,1)=+0.01833*TPK%K079(:)*PCONC(:,19)+0.00100*TPK%K080(:)*PCONC(:,20) + PJAC(:,2,1)=+0.01833*TPK%K079(:)*PCONC(:,20)+0.00100*TPK%K080(:)*PCONC(:,21) ! !H2O2/H2O2=-K009-K026*<OH> - PJAC(:,2,2)=-TPK%K009(:)-TPK%K026(:)*PCONC(:,14) + PJAC(:,2,2)=-TPK%K009(:)-TPK%K026(:)*PCONC(:,15) ! !H2O2/NO=0.0 ! @@ -24127,6 +24556,8 @@ SUBROUTINE SUBJ0 ! !H2O2/NH3=0.0 ! +!H2O2/DMS=0.0 +! !H2O2/SO2=0.0 ! !H2O2/SULF=0.0 @@ -24134,11 +24565,11 @@ SUBROUTINE SUBJ0 !H2O2/CO=0.0 ! !H2O2/OH=-K026*<H2O2> - PJAC(:,2,14)=-TPK%K026(:)*PCONC(:,2) + PJAC(:,2,15)=-TPK%K026(:)*PCONC(:,2) ! !H2O2/HO2=+K027*<HO2>+K027*<HO2>+K028*<HO2>*<H2O>+K028*<HO2>*<H2O> - PJAC(:,2,15)=+TPK%K027(:)*PCONC(:,15)+TPK%K027(:)*PCONC(:,15)+TPK%K028(:)*PCON& -&C(:,15)*TPK%H2O(:)+TPK%K028(:)*PCONC(:,15)*TPK%H2O(:) + PJAC(:,2,16)=+TPK%K027(:)*PCONC(:,16)+TPK%K027(:)*PCONC(:,16)+TPK%K028(:)*PCON& +&C(:,16)*TPK%H2O(:)+TPK%K028(:)*PCONC(:,16)*TPK%H2O(:) ! !H2O2/CH4=0.0 ! @@ -24147,10 +24578,10 @@ SUBROUTINE SUBJ0 !H2O2/ALKA=0.0 ! !H2O2/ALKE=+0.01833*K079*<O3> - PJAC(:,2,19)=+0.01833*TPK%K079(:)*PCONC(:,1) + PJAC(:,2,20)=+0.01833*TPK%K079(:)*PCONC(:,1) ! !H2O2/BIO=+0.00100*K080*<O3> - PJAC(:,2,20)=+0.00100*TPK%K080(:)*PCONC(:,1) + PJAC(:,2,21)=+0.00100*TPK%K080(:)*PCONC(:,1) ! !H2O2/ARO=0.0 ! @@ -24202,12 +24633,12 @@ SUBROUTINE SUBJ0 !NO/NO=-K029*<O3P>-K032*<OH>-K035*<HO2>-K042*<O3>-K044*<NO>*<O2>-K044*<NO>*<O2> !-K044*<NO>*<O2>-K044*<NO>*<O2>-K045*<NO3>-K090*<MO2>-K091*<ALKAP>-K092*<ALKEP> !-K093*<BIOP>-K094*<AROP>-K095*<CARBOP>-K096*<OLN>-K130*<XO2> - PJAC(:,3,3)=-TPK%K029(:)*TPK%O3P(:)-TPK%K032(:)*PCONC(:,14)-TPK%K035(:)*PCONC(& -&:,15)-TPK%K042(:)*PCONC(:,1)-TPK%K044(:)*PCONC(:,3)*TPK%O2(:)-TPK%K044(:)*PCON& + PJAC(:,3,3)=-TPK%K029(:)*TPK%O3P(:)-TPK%K032(:)*PCONC(:,15)-TPK%K035(:)*PCONC(& +&:,16)-TPK%K042(:)*PCONC(:,1)-TPK%K044(:)*PCONC(:,3)*TPK%O2(:)-TPK%K044(:)*PCON& &C(:,3)*TPK%O2(:)-TPK%K044(:)*PCONC(:,3)*TPK%O2(:)-TPK%K044(:)*PCONC(:,3)*TPK%O& -&2(:)-TPK%K045(:)*PCONC(:,5)-TPK%K090(:)*PCONC(:,32)-TPK%K091(:)*PCONC(:,33)-TP& -&K%K092(:)*PCONC(:,34)-TPK%K093(:)*PCONC(:,35)-TPK%K094(:)*PCONC(:,38)-TPK%K095& -&(:)*PCONC(:,39)-TPK%K096(:)*PCONC(:,40)-TPK%K130(:)*PCONC(:,41) +&2(:)-TPK%K045(:)*PCONC(:,5)-TPK%K090(:)*PCONC(:,33)-TPK%K091(:)*PCONC(:,34)-TP& +&K%K092(:)*PCONC(:,35)-TPK%K093(:)*PCONC(:,36)-TPK%K094(:)*PCONC(:,39)-TPK%K095& +&(:)*PCONC(:,40)-TPK%K096(:)*PCONC(:,41)-TPK%K130(:)*PCONC(:,42) ! !NO/NO2=+K001+K030*<O3P>+K046*<NO3> PJAC(:,3,4)=+TPK%K001(:)+TPK%K030(:)*TPK%O3P(:)+TPK%K046(:)*PCONC(:,5) @@ -24226,6 +24657,8 @@ SUBROUTINE SUBJ0 ! !NO/NH3=0.0 ! +!NO/DMS=0.0 +! !NO/SO2=0.0 ! !NO/SULF=0.0 @@ -24233,10 +24666,10 @@ SUBROUTINE SUBJ0 !NO/CO=0.0 ! !NO/OH=-K032*<NO> - PJAC(:,3,14)=-TPK%K032(:)*PCONC(:,3) + PJAC(:,3,15)=-TPK%K032(:)*PCONC(:,3) ! !NO/HO2=-K035*<NO> - PJAC(:,3,15)=-TPK%K035(:)*PCONC(:,3) + PJAC(:,3,16)=-TPK%K035(:)*PCONC(:,3) ! !NO/CH4=0.0 ! @@ -24271,36 +24704,36 @@ SUBROUTINE SUBJ0 !NO/ORA2=0.0 ! !NO/MO2=-K090*<NO> - PJAC(:,3,32)=-TPK%K090(:)*PCONC(:,3) + PJAC(:,3,33)=-TPK%K090(:)*PCONC(:,3) ! !NO/ALKAP=-K091*<NO> - PJAC(:,3,33)=-TPK%K091(:)*PCONC(:,3) + PJAC(:,3,34)=-TPK%K091(:)*PCONC(:,3) ! !NO/ALKEP=-K092*<NO> - PJAC(:,3,34)=-TPK%K092(:)*PCONC(:,3) + PJAC(:,3,35)=-TPK%K092(:)*PCONC(:,3) ! !NO/BIOP=-K093*<NO> - PJAC(:,3,35)=-TPK%K093(:)*PCONC(:,3) + PJAC(:,3,36)=-TPK%K093(:)*PCONC(:,3) ! !NO/PHO=0.0 ! !NO/ADD=0.0 ! !NO/AROP=-K094*<NO> - PJAC(:,3,38)=-TPK%K094(:)*PCONC(:,3) + PJAC(:,3,39)=-TPK%K094(:)*PCONC(:,3) ! !NO/CARBOP=-K095*<NO> - PJAC(:,3,39)=-TPK%K095(:)*PCONC(:,3) + PJAC(:,3,40)=-TPK%K095(:)*PCONC(:,3) ! !NO/OLN=-K096*<NO> - PJAC(:,3,40)=-TPK%K096(:)*PCONC(:,3) + PJAC(:,3,41)=-TPK%K096(:)*PCONC(:,3) ! !NO/XO2=-K130*<NO> - PJAC(:,3,41)=-TPK%K130(:)*PCONC(:,3) + PJAC(:,3,42)=-TPK%K130(:)*PCONC(:,3) ! !NO2/O3=+K042*<NO>-K043*<NO2>+0.70*K082*<PAN> PJAC(:,4,1)=+TPK%K042(:)*PCONC(:,3)-TPK%K043(:)*PCONC(:,4)+0.70*TPK%K082(:)*PC& -&ONC(:,27) +&ONC(:,28) ! !NO2/H2O2=0.0 ! @@ -24308,47 +24741,51 @@ SUBROUTINE SUBJ0 !>*<O2>+K044*<NO>*<O2>+K045*<NO3>+K045*<NO3>+K090*<MO2>+0.91541*K091*<ALKAP>+K0 !92*<ALKEP>+0.84700*K093*<BIOP>+0.95115*K094*<AROP>+K095*<CARBOP>+1.81599*K096* !<OLN>+K130*<XO2> - PJAC(:,4,3)=+TPK%K029(:)*TPK%O3P(:)+TPK%K035(:)*PCONC(:,15)+TPK%K042(:)*PCONC(& + PJAC(:,4,3)=+TPK%K029(:)*TPK%O3P(:)+TPK%K035(:)*PCONC(:,16)+TPK%K042(:)*PCONC(& &:,1)+TPK%K044(:)*PCONC(:,3)*TPK%O2(:)+TPK%K044(:)*PCONC(:,3)*TPK%O2(:)+TPK%K04& &4(:)*PCONC(:,3)*TPK%O2(:)+TPK%K044(:)*PCONC(:,3)*TPK%O2(:)+TPK%K045(:)*PCONC(:& -&,5)+TPK%K045(:)*PCONC(:,5)+TPK%K090(:)*PCONC(:,32)+0.91541*TPK%K091(:)*PCONC(:& -&,33)+TPK%K092(:)*PCONC(:,34)+0.84700*TPK%K093(:)*PCONC(:,35)+0.95115*TPK%K094(& -&:)*PCONC(:,38)+TPK%K095(:)*PCONC(:,39)+1.81599*TPK%K096(:)*PCONC(:,40)+TPK%K13& -&0(:)*PCONC(:,41) +&,5)+TPK%K045(:)*PCONC(:,5)+TPK%K090(:)*PCONC(:,33)+0.91541*TPK%K091(:)*PCONC(:& +&,34)+TPK%K092(:)*PCONC(:,35)+0.84700*TPK%K093(:)*PCONC(:,36)+0.95115*TPK%K094(& +&:)*PCONC(:,39)+TPK%K095(:)*PCONC(:,40)+1.81599*TPK%K096(:)*PCONC(:,41)+TPK%K13& +&0(:)*PCONC(:,42) ! !NO2/NO2=-K001-K030*<O3P>-K031*<O3P>-K033*<OH>-K036*<HO2>-K043*<O3>+K046*<NO3>- !K046*<NO3>-K047*<NO3>-K083*<PHO>-K085*<ADD>-K088*<CARBOP> PJAC(:,4,4)=-TPK%K001(:)-TPK%K030(:)*TPK%O3P(:)-TPK%K031(:)*TPK%O3P(:)-TPK%K03& -&3(:)*PCONC(:,14)-TPK%K036(:)*PCONC(:,15)-TPK%K043(:)*PCONC(:,1)+TPK%K046(:)*PC& -&ONC(:,5)-TPK%K046(:)*PCONC(:,5)-TPK%K047(:)*PCONC(:,5)-TPK%K083(:)*PCONC(:,36)& -&-TPK%K085(:)*PCONC(:,37)-TPK%K088(:)*PCONC(:,39) +&3(:)*PCONC(:,15)-TPK%K036(:)*PCONC(:,16)-TPK%K043(:)*PCONC(:,1)+TPK%K046(:)*PC& +&ONC(:,5)-TPK%K046(:)*PCONC(:,5)-TPK%K047(:)*PCONC(:,5)-TPK%K083(:)*PCONC(:,37)& +&-TPK%K085(:)*PCONC(:,38)-TPK%K088(:)*PCONC(:,40) ! !NO2/NO3=+K008+K034*<OH>+0.7*K038*<HO2>+K045*<NO>+K045*<NO>+K046*<NO2>-K046*<NO !2>-K047*<NO2>+K049*<NO3>+K049*<NO3>+K049*<NO3>+K049*<NO3>+0.10530*K074*<CARBO> !+0.40*K078*<PAN>+K119*<MO2>+K120*<ALKAP>+K121*<ALKEP>+K122*<BIOP>+K123*<AROP>+ -!K124*<CARBOP>+1.74072*K125*<OLN>+K131*<XO2> - PJAC(:,4,5)=+TPK%K008(:)+TPK%K034(:)*PCONC(:,14)+0.7*TPK%K038(:)*PCONC(:,15)+T& +!K124*<CARBOP>+1.74072*K125*<OLN>+K131*<XO2>+K133*<DMS> + PJAC(:,4,5)=+TPK%K008(:)+TPK%K034(:)*PCONC(:,15)+0.7*TPK%K038(:)*PCONC(:,16)+T& &PK%K045(:)*PCONC(:,3)+TPK%K045(:)*PCONC(:,3)+TPK%K046(:)*PCONC(:,4)-TPK%K046(:& &)*PCONC(:,4)-TPK%K047(:)*PCONC(:,4)+TPK%K049(:)*PCONC(:,5)+TPK%K049(:)*PCONC(:& &,5)+TPK%K049(:)*PCONC(:,5)+TPK%K049(:)*PCONC(:,5)+0.10530*TPK%K074(:)*PCONC(:,& -&25)+0.40*TPK%K078(:)*PCONC(:,27)+TPK%K119(:)*PCONC(:,32)+TPK%K120(:)*PCONC(:,3& -&3)+TPK%K121(:)*PCONC(:,34)+TPK%K122(:)*PCONC(:,35)+TPK%K123(:)*PCONC(:,38)+TPK& -&%K124(:)*PCONC(:,39)+1.74072*TPK%K125(:)*PCONC(:,40)+TPK%K131(:)*PCONC(:,41) +&26)+0.40*TPK%K078(:)*PCONC(:,28)+TPK%K119(:)*PCONC(:,33)+TPK%K120(:)*PCONC(:,3& +&4)+TPK%K121(:)*PCONC(:,35)+TPK%K122(:)*PCONC(:,36)+TPK%K123(:)*PCONC(:,39)+TPK& +&%K124(:)*PCONC(:,40)+1.74072*TPK%K125(:)*PCONC(:,41)+TPK%K131(:)*PCONC(:,42)+T& +&PK%K133(:)*PCONC(:,11) ! !NO2/N2O5=+K048 PJAC(:,4,6)=+TPK%K048(:) ! !NO2/HONO=+K039*<OH> - PJAC(:,4,7)=+TPK%K039(:)*PCONC(:,14) + PJAC(:,4,7)=+TPK%K039(:)*PCONC(:,15) ! !NO2/HNO3=+K005 PJAC(:,4,8)=+TPK%K005(:) ! !NO2/HNO4=+0.65*K006+K037+K041*<OH> - PJAC(:,4,9)=+0.65*TPK%K006(:)+TPK%K037(:)+TPK%K041(:)*PCONC(:,14) + PJAC(:,4,9)=+0.65*TPK%K006(:)+TPK%K037(:)+TPK%K041(:)*PCONC(:,15) ! !NO2/NH3=0.0 ! +!NO2/DMS=+K133*<NO3> + PJAC(:,4,11)=+TPK%K133(:)*PCONC(:,5) +! !NO2/SO2=0.0 ! !NO2/SULF=0.0 @@ -24356,11 +24793,11 @@ SUBROUTINE SUBJ0 !NO2/CO=0.0 ! !NO2/OH=-K033*<NO2>+K034*<NO3>+K039*<HONO>+K041*<HNO4>+K071*<ONIT> - PJAC(:,4,14)=-TPK%K033(:)*PCONC(:,4)+TPK%K034(:)*PCONC(:,5)+TPK%K039(:)*PCONC(& -&:,7)+TPK%K041(:)*PCONC(:,9)+TPK%K071(:)*PCONC(:,26) + PJAC(:,4,15)=-TPK%K033(:)*PCONC(:,4)+TPK%K034(:)*PCONC(:,5)+TPK%K039(:)*PCONC(& +&:,7)+TPK%K041(:)*PCONC(:,9)+TPK%K071(:)*PCONC(:,27) ! !NO2/HO2=+K035*<NO>-K036*<NO2>+0.7*K038*<NO3> - PJAC(:,4,15)=+TPK%K035(:)*PCONC(:,3)-TPK%K036(:)*PCONC(:,4)+0.7*TPK%K038(:)*PC& + PJAC(:,4,16)=+TPK%K035(:)*PCONC(:,3)-TPK%K036(:)*PCONC(:,4)+0.7*TPK%K038(:)*PC& &ONC(:,5) ! !NO2/CH4=0.0 @@ -24382,13 +24819,13 @@ SUBROUTINE SUBJ0 !NO2/KET=0.0 ! !NO2/CARBO=+0.10530*K074*<NO3> - PJAC(:,4,25)=+0.10530*TPK%K074(:)*PCONC(:,5) + PJAC(:,4,26)=+0.10530*TPK%K074(:)*PCONC(:,5) ! !NO2/ONIT=+K017+K071*<OH> - PJAC(:,4,26)=+TPK%K017(:)+TPK%K071(:)*PCONC(:,14) + PJAC(:,4,27)=+TPK%K017(:)+TPK%K071(:)*PCONC(:,15) ! !NO2/PAN=+0.40*K078*<NO3>+0.70*K082*<O3>+K089 - PJAC(:,4,27)=+0.40*TPK%K078(:)*PCONC(:,5)+0.70*TPK%K082(:)*PCONC(:,1)+TPK%K089& + PJAC(:,4,28)=+0.40*TPK%K078(:)*PCONC(:,5)+0.70*TPK%K082(:)*PCONC(:,1)+TPK%K089& &(:) ! !NO2/OP1=0.0 @@ -24400,39 +24837,39 @@ SUBROUTINE SUBJ0 !NO2/ORA2=0.0 ! !NO2/MO2=+K090*<NO>+0.32440*K110*<OLN>+K119*<NO3> - PJAC(:,4,32)=+TPK%K090(:)*PCONC(:,3)+0.32440*TPK%K110(:)*PCONC(:,40)+TPK%K119(& + PJAC(:,4,33)=+TPK%K090(:)*PCONC(:,3)+0.32440*TPK%K110(:)*PCONC(:,41)+TPK%K119(& &:)*PCONC(:,5) ! !NO2/ALKAP=+0.91541*K091*<NO>+K120*<NO3> - PJAC(:,4,33)=+0.91541*TPK%K091(:)*PCONC(:,3)+TPK%K120(:)*PCONC(:,5) + PJAC(:,4,34)=+0.91541*TPK%K091(:)*PCONC(:,3)+TPK%K120(:)*PCONC(:,5) ! !NO2/ALKEP=+K092*<NO>+K121*<NO3> - PJAC(:,4,34)=+TPK%K092(:)*PCONC(:,3)+TPK%K121(:)*PCONC(:,5) + PJAC(:,4,35)=+TPK%K092(:)*PCONC(:,3)+TPK%K121(:)*PCONC(:,5) ! !NO2/BIOP=+0.84700*K093*<NO>+K122*<NO3> - PJAC(:,4,35)=+0.84700*TPK%K093(:)*PCONC(:,3)+TPK%K122(:)*PCONC(:,5) + PJAC(:,4,36)=+0.84700*TPK%K093(:)*PCONC(:,3)+TPK%K122(:)*PCONC(:,5) ! !NO2/PHO=-K083*<NO2> - PJAC(:,4,36)=-TPK%K083(:)*PCONC(:,4) + PJAC(:,4,37)=-TPK%K083(:)*PCONC(:,4) ! !NO2/ADD=-K085*<NO2> - PJAC(:,4,37)=-TPK%K085(:)*PCONC(:,4) + PJAC(:,4,38)=-TPK%K085(:)*PCONC(:,4) ! !NO2/AROP=+0.95115*K094*<NO>+K123*<NO3> - PJAC(:,4,38)=+0.95115*TPK%K094(:)*PCONC(:,3)+TPK%K123(:)*PCONC(:,5) + PJAC(:,4,39)=+0.95115*TPK%K094(:)*PCONC(:,3)+TPK%K123(:)*PCONC(:,5) ! !NO2/CARBOP=-K088*<NO2>+K095*<NO>+0.00000*K116*<OLN>+K124*<NO3> - PJAC(:,4,39)=-TPK%K088(:)*PCONC(:,4)+TPK%K095(:)*PCONC(:,3)+0.00000*TPK%K116(:& -&)*PCONC(:,40)+TPK%K124(:)*PCONC(:,5) + PJAC(:,4,40)=-TPK%K088(:)*PCONC(:,4)+TPK%K095(:)*PCONC(:,3)+0.00000*TPK%K116(:& +&)*PCONC(:,41)+TPK%K124(:)*PCONC(:,5) ! !NO2/OLN=+1.81599*K096*<NO>+0.32440*K110*<MO2>+0.00000*K116*<CARBOP>+0.00000*K1 !18*<OLN>+0.00000*K118*<OLN>+1.74072*K125*<NO3> - PJAC(:,4,40)=+1.81599*TPK%K096(:)*PCONC(:,3)+0.32440*TPK%K110(:)*PCONC(:,32)+0& -&.00000*TPK%K116(:)*PCONC(:,39)+0.00000*TPK%K118(:)*PCONC(:,40)+0.00000*TPK%K11& -&8(:)*PCONC(:,40)+1.74072*TPK%K125(:)*PCONC(:,5) + PJAC(:,4,41)=+1.81599*TPK%K096(:)*PCONC(:,3)+0.32440*TPK%K110(:)*PCONC(:,33)+0& +&.00000*TPK%K116(:)*PCONC(:,40)+0.00000*TPK%K118(:)*PCONC(:,41)+0.00000*TPK%K11& +&8(:)*PCONC(:,41)+1.74072*TPK%K125(:)*PCONC(:,5) ! !NO2/XO2=+K130*<NO>+K131*<NO3> - PJAC(:,4,41)=+TPK%K130(:)*PCONC(:,3)+TPK%K131(:)*PCONC(:,5) + PJAC(:,4,42)=+TPK%K130(:)*PCONC(:,3)+TPK%K131(:)*PCONC(:,5) ! !NO3/O3=+K043*<NO2> PJAC(:,5,1)=+TPK%K043(:)*PCONC(:,4) @@ -24449,16 +24886,17 @@ SUBROUTINE SUBJ0 !NO3/NO3=-K007-K008-K034*<OH>-K038*<HO2>-K045*<NO>-K046*<NO2>-K047*<NO2>-K049*< !NO3>-K049*<NO3>-K049*<NO3>-K049*<NO3>-K072*<HCHO>-K073*<ALD>-K074*<CARBO>-K075 !*<ARO>-K076*<ALKE>-K077*<BIO>+0.60*K078*<PAN>-K078*<PAN>-K119*<MO2>-K120*<ALKA -!P>-K121*<ALKEP>-K122*<BIOP>-K123*<AROP>-K124*<CARBOP>-K125*<OLN>-K131*<XO2> - PJAC(:,5,5)=-TPK%K007(:)-TPK%K008(:)-TPK%K034(:)*PCONC(:,14)-TPK%K038(:)*PCONC& -&(:,15)-TPK%K045(:)*PCONC(:,3)-TPK%K046(:)*PCONC(:,4)-TPK%K047(:)*PCONC(:,4)-TP& +!P>-K121*<ALKEP>-K122*<BIOP>-K123*<AROP>-K124*<CARBOP>-K125*<OLN>-K131*<XO2>-K1 +!33*<DMS> + PJAC(:,5,5)=-TPK%K007(:)-TPK%K008(:)-TPK%K034(:)*PCONC(:,15)-TPK%K038(:)*PCONC& +&(:,16)-TPK%K045(:)*PCONC(:,3)-TPK%K046(:)*PCONC(:,4)-TPK%K047(:)*PCONC(:,4)-TP& &K%K049(:)*PCONC(:,5)-TPK%K049(:)*PCONC(:,5)-TPK%K049(:)*PCONC(:,5)-TPK%K049(:)& -&*PCONC(:,5)-TPK%K072(:)*PCONC(:,22)-TPK%K073(:)*PCONC(:,23)-TPK%K074(:)*PCONC(& -&:,25)-TPK%K075(:)*PCONC(:,21)-TPK%K076(:)*PCONC(:,19)-TPK%K077(:)*PCONC(:,20)+& -&0.60*TPK%K078(:)*PCONC(:,27)-TPK%K078(:)*PCONC(:,27)-TPK%K119(:)*PCONC(:,32)-T& -&PK%K120(:)*PCONC(:,33)-TPK%K121(:)*PCONC(:,34)-TPK%K122(:)*PCONC(:,35)-TPK%K12& -&3(:)*PCONC(:,38)-TPK%K124(:)*PCONC(:,39)-TPK%K125(:)*PCONC(:,40)-TPK%K131(:)*P& -&CONC(:,41) +&*PCONC(:,5)-TPK%K072(:)*PCONC(:,23)-TPK%K073(:)*PCONC(:,24)-TPK%K074(:)*PCONC(& +&:,26)-TPK%K075(:)*PCONC(:,22)-TPK%K076(:)*PCONC(:,20)-TPK%K077(:)*PCONC(:,21)+& +&0.60*TPK%K078(:)*PCONC(:,28)-TPK%K078(:)*PCONC(:,28)-TPK%K119(:)*PCONC(:,33)-T& +&PK%K120(:)*PCONC(:,34)-TPK%K121(:)*PCONC(:,35)-TPK%K122(:)*PCONC(:,36)-TPK%K12& +&3(:)*PCONC(:,39)-TPK%K124(:)*PCONC(:,40)-TPK%K125(:)*PCONC(:,41)-TPK%K131(:)*P& +&CONC(:,42)-TPK%K133(:)*PCONC(:,11) ! !NO3/N2O5=+K048 PJAC(:,5,6)=+TPK%K048(:) @@ -24466,13 +24904,16 @@ SUBROUTINE SUBJ0 !NO3/HONO=0.0 ! !NO3/HNO3=+K040*<OH> - PJAC(:,5,8)=+TPK%K040(:)*PCONC(:,14) + PJAC(:,5,8)=+TPK%K040(:)*PCONC(:,15) ! !NO3/HNO4=+0.35*K006 PJAC(:,5,9)=+0.35*TPK%K006(:) ! !NO3/NH3=0.0 ! +!NO3/DMS=-K133*<NO3> + PJAC(:,5,11)=-TPK%K133(:)*PCONC(:,5) +! !NO3/SO2=0.0 ! !NO3/SULF=0.0 @@ -24480,11 +24921,11 @@ SUBROUTINE SUBJ0 !NO3/CO=0.0 ! !NO3/OH=-K034*<NO3>+K040*<HNO3>+0.71893*K070*<PAN> - PJAC(:,5,14)=-TPK%K034(:)*PCONC(:,5)+TPK%K040(:)*PCONC(:,8)+0.71893*TPK%K070(:& -&)*PCONC(:,27) + PJAC(:,5,15)=-TPK%K034(:)*PCONC(:,5)+TPK%K040(:)*PCONC(:,8)+0.71893*TPK%K070(:& +&)*PCONC(:,28) ! !NO3/HO2=-K038*<NO3> - PJAC(:,5,15)=-TPK%K038(:)*PCONC(:,5) + PJAC(:,5,16)=-TPK%K038(:)*PCONC(:,5) ! !NO3/CH4=0.0 ! @@ -24493,29 +24934,29 @@ SUBROUTINE SUBJ0 !NO3/ALKA=0.0 ! !NO3/ALKE=-K076*<NO3> - PJAC(:,5,19)=-TPK%K076(:)*PCONC(:,5) + PJAC(:,5,20)=-TPK%K076(:)*PCONC(:,5) ! !NO3/BIO=-K077*<NO3> - PJAC(:,5,20)=-TPK%K077(:)*PCONC(:,5) + PJAC(:,5,21)=-TPK%K077(:)*PCONC(:,5) ! !NO3/ARO=-K075*<NO3> - PJAC(:,5,21)=-TPK%K075(:)*PCONC(:,5) + PJAC(:,5,22)=-TPK%K075(:)*PCONC(:,5) ! !NO3/HCHO=-K072*<NO3> - PJAC(:,5,22)=-TPK%K072(:)*PCONC(:,5) + PJAC(:,5,23)=-TPK%K072(:)*PCONC(:,5) ! !NO3/ALD=-K073*<NO3> - PJAC(:,5,23)=-TPK%K073(:)*PCONC(:,5) + PJAC(:,5,24)=-TPK%K073(:)*PCONC(:,5) ! !NO3/KET=0.0 ! !NO3/CARBO=-K074*<NO3> - PJAC(:,5,25)=-TPK%K074(:)*PCONC(:,5) + PJAC(:,5,26)=-TPK%K074(:)*PCONC(:,5) ! !NO3/ONIT=0.0 ! !NO3/PAN=+0.71893*K070*<OH>+0.60*K078*<NO3>-K078*<NO3> - PJAC(:,5,27)=+0.71893*TPK%K070(:)*PCONC(:,14)+0.60*TPK%K078(:)*PCONC(:,5)-TPK%& + PJAC(:,5,28)=+0.71893*TPK%K070(:)*PCONC(:,15)+0.60*TPK%K078(:)*PCONC(:,5)-TPK%& &K078(:)*PCONC(:,5) ! !NO3/OP1=0.0 @@ -24527,32 +24968,32 @@ SUBROUTINE SUBJ0 !NO3/ORA2=0.0 ! !NO3/MO2=-K119*<NO3> - PJAC(:,5,32)=-TPK%K119(:)*PCONC(:,5) + PJAC(:,5,33)=-TPK%K119(:)*PCONC(:,5) ! !NO3/ALKAP=-K120*<NO3> - PJAC(:,5,33)=-TPK%K120(:)*PCONC(:,5) + PJAC(:,5,34)=-TPK%K120(:)*PCONC(:,5) ! !NO3/ALKEP=-K121*<NO3> - PJAC(:,5,34)=-TPK%K121(:)*PCONC(:,5) + PJAC(:,5,35)=-TPK%K121(:)*PCONC(:,5) ! !NO3/BIOP=-K122*<NO3> - PJAC(:,5,35)=-TPK%K122(:)*PCONC(:,5) + PJAC(:,5,36)=-TPK%K122(:)*PCONC(:,5) ! !NO3/PHO=0.0 ! !NO3/ADD=0.0 ! !NO3/AROP=-K123*<NO3> - PJAC(:,5,38)=-TPK%K123(:)*PCONC(:,5) + PJAC(:,5,39)=-TPK%K123(:)*PCONC(:,5) ! !NO3/CARBOP=-K124*<NO3> - PJAC(:,5,39)=-TPK%K124(:)*PCONC(:,5) + PJAC(:,5,40)=-TPK%K124(:)*PCONC(:,5) ! !NO3/OLN=-K125*<NO3> - PJAC(:,5,40)=-TPK%K125(:)*PCONC(:,5) + PJAC(:,5,41)=-TPK%K125(:)*PCONC(:,5) ! !NO3/XO2=-K131*<NO3> - PJAC(:,5,41)=-TPK%K131(:)*PCONC(:,5) + PJAC(:,5,42)=-TPK%K131(:)*PCONC(:,5) ! RETURN END SUBROUTINE SUBJ0 @@ -24585,6 +25026,8 @@ SUBROUTINE SUBJ1 ! !N2O5/NH3=0.0 ! +!N2O5/DMS=0.0 +! !N2O5/SO2=0.0 ! !N2O5/SULF=0.0 @@ -24652,17 +25095,17 @@ SUBROUTINE SUBJ1 !HONO/H2O2=0.0 ! !HONO/NO=+K032*<OH> - PJAC(:,7,3)=+TPK%K032(:)*PCONC(:,14) + PJAC(:,7,3)=+TPK%K032(:)*PCONC(:,15) ! !HONO/NO2=+K085*<ADD> - PJAC(:,7,4)=+TPK%K085(:)*PCONC(:,37) + PJAC(:,7,4)=+TPK%K085(:)*PCONC(:,38) ! !HONO/NO3=0.0 ! !HONO/N2O5=0.0 ! !HONO/HONO=-K004-K039*<OH> - PJAC(:,7,7)=-TPK%K004(:)-TPK%K039(:)*PCONC(:,14) + PJAC(:,7,7)=-TPK%K004(:)-TPK%K039(:)*PCONC(:,15) ! !HONO/HNO3=0.0 ! @@ -24670,6 +25113,8 @@ SUBROUTINE SUBJ1 ! !HONO/NH3=0.0 ! +!HONO/DMS=0.0 +! !HONO/SO2=0.0 ! !HONO/SULF=0.0 @@ -24677,7 +25122,7 @@ SUBROUTINE SUBJ1 !HONO/CO=0.0 ! !HONO/OH=+K032*<NO>-K039*<HONO> - PJAC(:,7,14)=+TPK%K032(:)*PCONC(:,3)-TPK%K039(:)*PCONC(:,7) + PJAC(:,7,15)=+TPK%K032(:)*PCONC(:,3)-TPK%K039(:)*PCONC(:,7) ! !HONO/HO2=0.0 ! @@ -24724,7 +25169,7 @@ SUBROUTINE SUBJ1 !HONO/PHO=0.0 ! !HONO/ADD=+K085*<NO2> - PJAC(:,7,37)=+TPK%K085(:)*PCONC(:,4) + PJAC(:,7,38)=+TPK%K085(:)*PCONC(:,4) ! !HONO/AROP=0.0 ! @@ -24741,24 +25186,26 @@ SUBROUTINE SUBJ1 !HNO3/NO=0.0 ! !HNO3/NO2=+K033*<OH> - PJAC(:,8,4)=+TPK%K033(:)*PCONC(:,14) + PJAC(:,8,4)=+TPK%K033(:)*PCONC(:,15) ! !HNO3/NO3=+0.3*K038*<HO2>+K072*<HCHO>+K073*<ALD>+0.91567*K074*<CARBO>+K075*<ARO !> - PJAC(:,8,5)=+0.3*TPK%K038(:)*PCONC(:,15)+TPK%K072(:)*PCONC(:,22)+TPK%K073(:)*P& -&CONC(:,23)+0.91567*TPK%K074(:)*PCONC(:,25)+TPK%K075(:)*PCONC(:,21) + PJAC(:,8,5)=+0.3*TPK%K038(:)*PCONC(:,16)+TPK%K072(:)*PCONC(:,23)+TPK%K073(:)*P& +&CONC(:,24)+0.91567*TPK%K074(:)*PCONC(:,26)+TPK%K075(:)*PCONC(:,22) ! !HNO3/N2O5=0.0 ! !HNO3/HONO=0.0 ! !HNO3/HNO3=-K005-K040*<OH> - PJAC(:,8,8)=-TPK%K005(:)-TPK%K040(:)*PCONC(:,14) + PJAC(:,8,8)=-TPK%K005(:)-TPK%K040(:)*PCONC(:,15) ! !HNO3/HNO4=0.0 ! !HNO3/NH3=0.0 ! +!HNO3/DMS=0.0 +! !HNO3/SO2=0.0 ! !HNO3/SULF=0.0 @@ -24766,10 +25213,10 @@ SUBROUTINE SUBJ1 !HNO3/CO=0.0 ! !HNO3/OH=+K033*<NO2>-K040*<HNO3> - PJAC(:,8,14)=+TPK%K033(:)*PCONC(:,4)-TPK%K040(:)*PCONC(:,8) + PJAC(:,8,15)=+TPK%K033(:)*PCONC(:,4)-TPK%K040(:)*PCONC(:,8) ! !HNO3/HO2=+0.3*K038*<NO3> - PJAC(:,8,15)=+0.3*TPK%K038(:)*PCONC(:,5) + PJAC(:,8,16)=+0.3*TPK%K038(:)*PCONC(:,5) ! !HNO3/CH4=0.0 ! @@ -24782,18 +25229,18 @@ SUBROUTINE SUBJ1 !HNO3/BIO=0.0 ! !HNO3/ARO=+K075*<NO3> - PJAC(:,8,21)=+TPK%K075(:)*PCONC(:,5) + PJAC(:,8,22)=+TPK%K075(:)*PCONC(:,5) ! !HNO3/HCHO=+K072*<NO3> - PJAC(:,8,22)=+TPK%K072(:)*PCONC(:,5) + PJAC(:,8,23)=+TPK%K072(:)*PCONC(:,5) ! !HNO3/ALD=+K073*<NO3> - PJAC(:,8,23)=+TPK%K073(:)*PCONC(:,5) + PJAC(:,8,24)=+TPK%K073(:)*PCONC(:,5) ! !HNO3/KET=0.0 ! !HNO3/CARBO=+0.91567*K074*<NO3> - PJAC(:,8,25)=+0.91567*TPK%K074(:)*PCONC(:,5) + PJAC(:,8,26)=+0.91567*TPK%K074(:)*PCONC(:,5) ! !HNO3/ONIT=0.0 ! @@ -24834,7 +25281,7 @@ SUBROUTINE SUBJ1 !HNO4/NO=0.0 ! !HNO4/NO2=+K036*<HO2> - PJAC(:,9,4)=+TPK%K036(:)*PCONC(:,15) + PJAC(:,9,4)=+TPK%K036(:)*PCONC(:,16) ! !HNO4/NO3=0.0 ! @@ -24845,10 +25292,12 @@ SUBROUTINE SUBJ1 !HNO4/HNO3=0.0 ! !HNO4/HNO4=-K006-K037-K041*<OH> - PJAC(:,9,9)=-TPK%K006(:)-TPK%K037(:)-TPK%K041(:)*PCONC(:,14) + PJAC(:,9,9)=-TPK%K006(:)-TPK%K037(:)-TPK%K041(:)*PCONC(:,15) ! !HNO4/NH3=0.0 ! +!HNO4/DMS=0.0 +! !HNO4/SO2=0.0 ! !HNO4/SULF=0.0 @@ -24856,10 +25305,10 @@ SUBROUTINE SUBJ1 !HNO4/CO=0.0 ! !HNO4/OH=-K041*<HNO4> - PJAC(:,9,14)=-TPK%K041(:)*PCONC(:,9) + PJAC(:,9,15)=-TPK%K041(:)*PCONC(:,9) ! !HNO4/HO2=+K036*<NO2> - PJAC(:,9,15)=+TPK%K036(:)*PCONC(:,4) + PJAC(:,9,16)=+TPK%K036(:)*PCONC(:,4) ! !HNO4/CH4=0.0 ! @@ -24932,7 +25381,9 @@ SUBROUTINE SUBJ1 !NH3/HNO4=0.0 ! !NH3/NH3=-K050*<OH> - PJAC(:,10,10)=-TPK%K050(:)*PCONC(:,14) + PJAC(:,10,10)=-TPK%K050(:)*PCONC(:,15) +! +!NH3/DMS=0.0 ! !NH3/SO2=0.0 ! @@ -24941,7 +25392,7 @@ SUBROUTINE SUBJ1 !NH3/CO=0.0 ! !NH3/OH=-K050*<NH3> - PJAC(:,10,14)=-TPK%K050(:)*PCONC(:,10) + PJAC(:,10,15)=-TPK%K050(:)*PCONC(:,10) ! !NH3/HO2=0.0 ! @@ -25005,6 +25456,94 @@ SUBROUTINE SUBJ2 !Indices 11 a 15 ! ! +!DMS/O3=0.0 +! +!DMS/H2O2=0.0 +! +!DMS/NO=0.0 +! +!DMS/NO2=0.0 +! +!DMS/NO3=-K133*<DMS> + PJAC(:,11,5)=-TPK%K133(:)*PCONC(:,11) +! +!DMS/N2O5=0.0 +! +!DMS/HONO=0.0 +! +!DMS/HNO3=0.0 +! +!DMS/HNO4=0.0 +! +!DMS/NH3=0.0 +! +!DMS/DMS=-K133*<NO3>-K134*<O3P>-K135*<OH> + PJAC(:,11,11)=-TPK%K133(:)*PCONC(:,5)-TPK%K134(:)*TPK%O3P(:)-TPK%K135(:)*PCONC& +&(:,15) +! +!DMS/SO2=0.0 +! +!DMS/SULF=0.0 +! +!DMS/CO=0.0 +! +!DMS/OH=-K135*<DMS> + PJAC(:,11,15)=-TPK%K135(:)*PCONC(:,11) +! +!DMS/HO2=0.0 +! +!DMS/CH4=0.0 +! +!DMS/ETH=0.0 +! +!DMS/ALKA=0.0 +! +!DMS/ALKE=0.0 +! +!DMS/BIO=0.0 +! +!DMS/ARO=0.0 +! +!DMS/HCHO=0.0 +! +!DMS/ALD=0.0 +! +!DMS/KET=0.0 +! +!DMS/CARBO=0.0 +! +!DMS/ONIT=0.0 +! +!DMS/PAN=0.0 +! +!DMS/OP1=0.0 +! +!DMS/OP2=0.0 +! +!DMS/ORA1=0.0 +! +!DMS/ORA2=0.0 +! +!DMS/MO2=0.0 +! +!DMS/ALKAP=0.0 +! +!DMS/ALKEP=0.0 +! +!DMS/BIOP=0.0 +! +!DMS/PHO=0.0 +! +!DMS/ADD=0.0 +! +!DMS/AROP=0.0 +! +!DMS/CARBOP=0.0 +! +!DMS/OLN=0.0 +! +!DMS/XO2=0.0 +! !SO2/O3=0.0 ! !SO2/H2O2=0.0 @@ -25013,7 +25552,8 @@ SUBROUTINE SUBJ2 ! !SO2/NO2=0.0 ! -!SO2/NO3=0.0 +!SO2/NO3=+K133*<DMS> + PJAC(:,12,5)=+TPK%K133(:)*PCONC(:,11) ! !SO2/N2O5=0.0 ! @@ -25025,15 +25565,19 @@ SUBROUTINE SUBJ2 ! !SO2/NH3=0.0 ! +!SO2/DMS=+K133*<NO3>+K134*<O3P>+0.8*K135*<OH> + PJAC(:,12,11)=+TPK%K133(:)*PCONC(:,5)+TPK%K134(:)*TPK%O3P(:)+0.8*TPK%K135(:)*P& +&CONC(:,15) +! !SO2/SO2=-K052*<OH> - PJAC(:,11,11)=-TPK%K052(:)*PCONC(:,14) + PJAC(:,12,12)=-TPK%K052(:)*PCONC(:,15) ! !SO2/SULF=0.0 ! !SO2/CO=0.0 ! -!SO2/OH=-K052*<SO2> - PJAC(:,11,14)=-TPK%K052(:)*PCONC(:,11) +!SO2/OH=-K052*<SO2>+0.8*K135*<DMS> + PJAC(:,12,15)=-TPK%K052(:)*PCONC(:,12)+0.8*TPK%K135(:)*PCONC(:,11) ! !SO2/HO2=0.0 ! @@ -25109,16 +25653,18 @@ SUBROUTINE SUBJ2 ! !SULF/NH3=0.0 ! +!SULF/DMS=0.0 +! !SULF/SO2=+K052*<OH> - PJAC(:,12,11)=+TPK%K052(:)*PCONC(:,14) + PJAC(:,13,12)=+TPK%K052(:)*PCONC(:,15) ! !SULF/SULF=-K132 - PJAC(:,12,12)=-TPK%K132(:) + PJAC(:,13,13)=-TPK%K132(:) ! !SULF/CO=0.0 ! !SULF/OH=+K052*<SO2> - PJAC(:,12,14)=+TPK%K052(:)*PCONC(:,11) + PJAC(:,13,15)=+TPK%K052(:)*PCONC(:,12) ! !SULF/HO2=0.0 ! @@ -25176,8 +25722,8 @@ SUBROUTINE SUBJ2 ! !CO/O3=+0.35120*K079*<ALKE>+0.36000*K080*<BIO>+0.64728*K081*<CARBO>+0.13*K082*< !PAN> - PJAC(:,13,1)=+0.35120*TPK%K079(:)*PCONC(:,19)+0.36000*TPK%K080(:)*PCONC(:,20)+& -&0.64728*TPK%K081(:)*PCONC(:,25)+0.13*TPK%K082(:)*PCONC(:,27) + PJAC(:,14,1)=+0.35120*TPK%K079(:)*PCONC(:,20)+0.36000*TPK%K080(:)*PCONC(:,21)+& +&0.64728*TPK%K081(:)*PCONC(:,26)+0.13*TPK%K082(:)*PCONC(:,28) ! !CO/H2O2=0.0 ! @@ -25186,7 +25732,7 @@ SUBROUTINE SUBJ2 !CO/NO2=0.0 ! !CO/NO3=+K072*<HCHO>+1.33723*K074*<CARBO> - PJAC(:,13,5)=+TPK%K072(:)*PCONC(:,22)+1.33723*TPK%K074(:)*PCONC(:,25) + PJAC(:,14,5)=+TPK%K072(:)*PCONC(:,23)+1.33723*TPK%K074(:)*PCONC(:,26) ! !CO/N2O5=0.0 ! @@ -25198,16 +25744,18 @@ SUBROUTINE SUBJ2 ! !CO/NH3=0.0 ! +!CO/DMS=0.0 +! !CO/SO2=0.0 ! !CO/SULF=0.0 ! !CO/CO=-K053*<OH> - PJAC(:,13,13)=-TPK%K053(:)*PCONC(:,14) + PJAC(:,14,14)=-TPK%K053(:)*PCONC(:,15) ! !CO/OH=-K053*<CO>+0.00878*K058*<ALKA>+K062*<HCHO>+1.01732*K065*<CARBO> - PJAC(:,13,14)=-TPK%K053(:)*PCONC(:,13)+0.00878*TPK%K058(:)*PCONC(:,18)+TPK%K06& -&2(:)*PCONC(:,22)+1.01732*TPK%K065(:)*PCONC(:,25) + PJAC(:,14,15)=-TPK%K053(:)*PCONC(:,14)+0.00878*TPK%K058(:)*PCONC(:,19)+TPK%K06& +&2(:)*PCONC(:,23)+1.01732*TPK%K065(:)*PCONC(:,26) ! !CO/HO2=0.0 ! @@ -25216,33 +25764,33 @@ SUBROUTINE SUBJ2 !CO/ETH=0.0 ! !CO/ALKA=+0.00878*K058*<OH> - PJAC(:,13,18)=+0.00878*TPK%K058(:)*PCONC(:,14) + PJAC(:,14,19)=+0.00878*TPK%K058(:)*PCONC(:,15) ! !CO/ALKE=+0.35120*K079*<O3> - PJAC(:,13,19)=+0.35120*TPK%K079(:)*PCONC(:,1) + PJAC(:,14,20)=+0.35120*TPK%K079(:)*PCONC(:,1) ! !CO/BIO=+0.01*K054*<O3P>+0.36000*K080*<O3> - PJAC(:,13,20)=+0.01*TPK%K054(:)*TPK%O3P(:)+0.36000*TPK%K080(:)*PCONC(:,1) + PJAC(:,14,21)=+0.01*TPK%K054(:)*TPK%O3P(:)+0.36000*TPK%K080(:)*PCONC(:,1) ! !CO/ARO=0.0 ! !CO/HCHO=+K010+K011+K062*<OH>+K072*<NO3> - PJAC(:,13,22)=+TPK%K010(:)+TPK%K011(:)+TPK%K062(:)*PCONC(:,14)+TPK%K072(:)*PCO& + PJAC(:,14,23)=+TPK%K010(:)+TPK%K011(:)+TPK%K062(:)*PCONC(:,15)+TPK%K072(:)*PCO& &NC(:,5) ! !CO/ALD=+K012 - PJAC(:,13,23)=+TPK%K012(:) + PJAC(:,14,24)=+TPK%K012(:) ! !CO/KET=0.0 ! !CO/CARBO=+0.91924*K016+1.01732*K065*<OH>+1.33723*K074*<NO3>+0.64728*K081*<O3> - PJAC(:,13,25)=+0.91924*TPK%K016(:)+1.01732*TPK%K065(:)*PCONC(:,14)+1.33723*TPK& + PJAC(:,14,26)=+0.91924*TPK%K016(:)+1.01732*TPK%K065(:)*PCONC(:,15)+1.33723*TPK& &%K074(:)*PCONC(:,5)+0.64728*TPK%K081(:)*PCONC(:,1) ! !CO/ONIT=0.0 ! !CO/PAN=+0.13*K082*<O3> - PJAC(:,13,27)=+0.13*TPK%K082(:)*PCONC(:,1) + PJAC(:,14,28)=+0.13*TPK%K082(:)*PCONC(:,1) ! !CO/OP1=0.0 ! @@ -25274,115 +25822,119 @@ SUBROUTINE SUBJ2 ! !OH/O3=-K023*<OH>+K024*<HO2>+0.39435*K079*<ALKE>+0.28000*K080*<BIO>+0.20595*K08 !1*<CARBO>+0.036*K082*<PAN>+K087*<ADD> - PJAC(:,14,1)=-TPK%K023(:)*PCONC(:,14)+TPK%K024(:)*PCONC(:,15)+0.39435*TPK%K079& -&(:)*PCONC(:,19)+0.28000*TPK%K080(:)*PCONC(:,20)+0.20595*TPK%K081(:)*PCONC(:,25& -&)+0.036*TPK%K082(:)*PCONC(:,27)+TPK%K087(:)*PCONC(:,37) + PJAC(:,15,1)=-TPK%K023(:)*PCONC(:,15)+TPK%K024(:)*PCONC(:,16)+0.39435*TPK%K079& +&(:)*PCONC(:,20)+0.28000*TPK%K080(:)*PCONC(:,21)+0.20595*TPK%K081(:)*PCONC(:,26& +&)+0.036*TPK%K082(:)*PCONC(:,28)+TPK%K087(:)*PCONC(:,38) ! !OH/H2O2=+K009+K009-K026*<OH> - PJAC(:,14,2)=+TPK%K009(:)+TPK%K009(:)-TPK%K026(:)*PCONC(:,14) + PJAC(:,15,2)=+TPK%K009(:)+TPK%K009(:)-TPK%K026(:)*PCONC(:,15) ! !OH/NO=-K032*<OH>+K035*<HO2> - PJAC(:,14,3)=-TPK%K032(:)*PCONC(:,14)+TPK%K035(:)*PCONC(:,15) + PJAC(:,15,3)=-TPK%K032(:)*PCONC(:,15)+TPK%K035(:)*PCONC(:,16) ! !OH/NO2=-K033*<OH> - PJAC(:,14,4)=-TPK%K033(:)*PCONC(:,14) + PJAC(:,15,4)=-TPK%K033(:)*PCONC(:,15) ! !OH/NO3=-K034*<OH>+0.7*K038*<HO2> - PJAC(:,14,5)=-TPK%K034(:)*PCONC(:,14)+0.7*TPK%K038(:)*PCONC(:,15) + PJAC(:,15,5)=-TPK%K034(:)*PCONC(:,15)+0.7*TPK%K038(:)*PCONC(:,16) ! !OH/N2O5=0.0 ! !OH/HONO=+K004-K039*<OH> - PJAC(:,14,7)=+TPK%K004(:)-TPK%K039(:)*PCONC(:,14) + PJAC(:,15,7)=+TPK%K004(:)-TPK%K039(:)*PCONC(:,15) ! !OH/HNO3=+K005-K040*<OH> - PJAC(:,14,8)=+TPK%K005(:)-TPK%K040(:)*PCONC(:,14) + PJAC(:,15,8)=+TPK%K005(:)-TPK%K040(:)*PCONC(:,15) ! !OH/HNO4=+0.35*K006-K041*<OH> - PJAC(:,14,9)=+0.35*TPK%K006(:)-TPK%K041(:)*PCONC(:,14) + PJAC(:,15,9)=+0.35*TPK%K006(:)-TPK%K041(:)*PCONC(:,15) ! !OH/NH3=-K050*<OH> - PJAC(:,14,10)=-TPK%K050(:)*PCONC(:,14) + PJAC(:,15,10)=-TPK%K050(:)*PCONC(:,15) +! +!OH/DMS=-K135*<OH> + PJAC(:,15,11)=-TPK%K135(:)*PCONC(:,15) ! !OH/SO2=-K052*<OH> - PJAC(:,14,11)=-TPK%K052(:)*PCONC(:,14) + PJAC(:,15,12)=-TPK%K052(:)*PCONC(:,15) ! !OH/SULF=0.0 ! !OH/CO=-K053*<OH> - PJAC(:,14,13)=-TPK%K053(:)*PCONC(:,14) + PJAC(:,15,14)=-TPK%K053(:)*PCONC(:,15) ! !OH/OH=-K023*<O3>-K025*<HO2>-K026*<H2O2>-K032*<NO>-K033*<NO2>-K034*<NO3>-K039*< !HONO>-K040*<HNO3>-K041*<HNO4>-K050*<NH3>-K051*<H2>-K052*<SO2>-K053*<CO>-K056*< !CH4>-K057*<ETH>+0.00878*K058*<ALKA>-K058*<ALKA>-K059*<ALKE>-K060*<BIO>-K061*<A !RO>-K062*<HCHO>-K063*<ALD>-K064*<KET>-K065*<CARBO>-K066*<ORA1>-K067*<ORA2>+0.3 -!5*K068*<OP1>-K068*<OP1>+0.44925*K069*<OP2>-K069*<OP2>-K070*<PAN>-K071*<ONIT> - PJAC(:,14,14)=-TPK%K023(:)*PCONC(:,1)-TPK%K025(:)*PCONC(:,15)-TPK%K026(:)*PCON& +!5*K068*<OP1>-K068*<OP1>+0.44925*K069*<OP2>-K069*<OP2>-K070*<PAN>-K071*<ONIT>-K +!135*<DMS> + PJAC(:,15,15)=-TPK%K023(:)*PCONC(:,1)-TPK%K025(:)*PCONC(:,16)-TPK%K026(:)*PCON& &C(:,2)-TPK%K032(:)*PCONC(:,3)-TPK%K033(:)*PCONC(:,4)-TPK%K034(:)*PCONC(:,5)-TP& &K%K039(:)*PCONC(:,7)-TPK%K040(:)*PCONC(:,8)-TPK%K041(:)*PCONC(:,9)-TPK%K050(:)& -&*PCONC(:,10)-TPK%K051(:)*TPK%H2(:)-TPK%K052(:)*PCONC(:,11)-TPK%K053(:)*PCONC(:& -&,13)-TPK%K056(:)*PCONC(:,16)-TPK%K057(:)*PCONC(:,17)+0.00878*TPK%K058(:)*PCONC& -&(:,18)-TPK%K058(:)*PCONC(:,18)-TPK%K059(:)*PCONC(:,19)-TPK%K060(:)*PCONC(:,20)& -&-TPK%K061(:)*PCONC(:,21)-TPK%K062(:)*PCONC(:,22)-TPK%K063(:)*PCONC(:,23)-TPK%K& -&064(:)*PCONC(:,24)-TPK%K065(:)*PCONC(:,25)-TPK%K066(:)*PCONC(:,30)-TPK%K067(:)& -&*PCONC(:,31)+0.35*TPK%K068(:)*PCONC(:,28)-TPK%K068(:)*PCONC(:,28)+0.44925*TPK%& -&K069(:)*PCONC(:,29)-TPK%K069(:)*PCONC(:,29)-TPK%K070(:)*PCONC(:,27)-TPK%K071(:& -&)*PCONC(:,26) +&*PCONC(:,10)-TPK%K051(:)*TPK%H2(:)-TPK%K052(:)*PCONC(:,12)-TPK%K053(:)*PCONC(:& +&,14)-TPK%K056(:)*PCONC(:,17)-TPK%K057(:)*PCONC(:,18)+0.00878*TPK%K058(:)*PCONC& +&(:,19)-TPK%K058(:)*PCONC(:,19)-TPK%K059(:)*PCONC(:,20)-TPK%K060(:)*PCONC(:,21)& +&-TPK%K061(:)*PCONC(:,22)-TPK%K062(:)*PCONC(:,23)-TPK%K063(:)*PCONC(:,24)-TPK%K& +&064(:)*PCONC(:,25)-TPK%K065(:)*PCONC(:,26)-TPK%K066(:)*PCONC(:,31)-TPK%K067(:)& +&*PCONC(:,32)+0.35*TPK%K068(:)*PCONC(:,29)-TPK%K068(:)*PCONC(:,29)+0.44925*TPK%& +&K069(:)*PCONC(:,30)-TPK%K069(:)*PCONC(:,30)-TPK%K070(:)*PCONC(:,28)-TPK%K071(:& +&)*PCONC(:,27)-TPK%K135(:)*PCONC(:,11) ! !OH/HO2=+K024*<O3>-K025*<OH>+K035*<NO>+0.7*K038*<NO3> - PJAC(:,14,15)=+TPK%K024(:)*PCONC(:,1)-TPK%K025(:)*PCONC(:,14)+TPK%K035(:)*PCON& + PJAC(:,15,16)=+TPK%K024(:)*PCONC(:,1)-TPK%K025(:)*PCONC(:,15)+TPK%K035(:)*PCON& &C(:,3)+0.7*TPK%K038(:)*PCONC(:,5) ! !OH/CH4=-K056*<OH> - PJAC(:,14,16)=-TPK%K056(:)*PCONC(:,14) + PJAC(:,15,17)=-TPK%K056(:)*PCONC(:,15) ! !OH/ETH=-K057*<OH> - PJAC(:,14,17)=-TPK%K057(:)*PCONC(:,14) + PJAC(:,15,18)=-TPK%K057(:)*PCONC(:,15) ! !OH/ALKA=+0.00878*K058*<OH>-K058*<OH> - PJAC(:,14,18)=+0.00878*TPK%K058(:)*PCONC(:,14)-TPK%K058(:)*PCONC(:,14) + PJAC(:,15,19)=+0.00878*TPK%K058(:)*PCONC(:,15)-TPK%K058(:)*PCONC(:,15) ! !OH/ALKE=-K059*<OH>+0.39435*K079*<O3> - PJAC(:,14,19)=-TPK%K059(:)*PCONC(:,14)+0.39435*TPK%K079(:)*PCONC(:,1) + PJAC(:,15,20)=-TPK%K059(:)*PCONC(:,15)+0.39435*TPK%K079(:)*PCONC(:,1) ! !OH/BIO=+0.02*K054*<O3P>-K060*<OH>+0.28000*K080*<O3> - PJAC(:,14,20)=+0.02*TPK%K054(:)*TPK%O3P(:)-TPK%K060(:)*PCONC(:,14)+0.28000*TPK& + PJAC(:,15,21)=+0.02*TPK%K054(:)*TPK%O3P(:)-TPK%K060(:)*PCONC(:,15)+0.28000*TPK& &%K080(:)*PCONC(:,1) ! !OH/ARO=-K061*<OH> - PJAC(:,14,21)=-TPK%K061(:)*PCONC(:,14) + PJAC(:,15,22)=-TPK%K061(:)*PCONC(:,15) ! !OH/HCHO=-K062*<OH> - PJAC(:,14,22)=-TPK%K062(:)*PCONC(:,14) + PJAC(:,15,23)=-TPK%K062(:)*PCONC(:,15) ! !OH/ALD=-K063*<OH> - PJAC(:,14,23)=-TPK%K063(:)*PCONC(:,14) + PJAC(:,15,24)=-TPK%K063(:)*PCONC(:,15) ! !OH/KET=-K064*<OH> - PJAC(:,14,24)=-TPK%K064(:)*PCONC(:,14) + PJAC(:,15,25)=-TPK%K064(:)*PCONC(:,15) ! !OH/CARBO=-K065*<OH>+0.20595*K081*<O3> - PJAC(:,14,25)=-TPK%K065(:)*PCONC(:,14)+0.20595*TPK%K081(:)*PCONC(:,1) + PJAC(:,15,26)=-TPK%K065(:)*PCONC(:,15)+0.20595*TPK%K081(:)*PCONC(:,1) ! !OH/ONIT=-K071*<OH> - PJAC(:,14,26)=-TPK%K071(:)*PCONC(:,14) + PJAC(:,15,27)=-TPK%K071(:)*PCONC(:,15) ! !OH/PAN=-K070*<OH>+0.036*K082*<O3> - PJAC(:,14,27)=-TPK%K070(:)*PCONC(:,14)+0.036*TPK%K082(:)*PCONC(:,1) + PJAC(:,15,28)=-TPK%K070(:)*PCONC(:,15)+0.036*TPK%K082(:)*PCONC(:,1) ! !OH/OP1=+K013+0.35*K068*<OH>-K068*<OH> - PJAC(:,14,28)=+TPK%K013(:)+0.35*TPK%K068(:)*PCONC(:,14)-TPK%K068(:)*PCONC(:,14& + PJAC(:,15,29)=+TPK%K013(:)+0.35*TPK%K068(:)*PCONC(:,15)-TPK%K068(:)*PCONC(:,15& &) ! !OH/OP2=+K014+0.44925*K069*<OH>-K069*<OH> - PJAC(:,14,29)=+TPK%K014(:)+0.44925*TPK%K069(:)*PCONC(:,14)-TPK%K069(:)*PCONC(:& -&,14) + PJAC(:,15,30)=+TPK%K014(:)+0.44925*TPK%K069(:)*PCONC(:,15)-TPK%K069(:)*PCONC(:& +&,15) ! !OH/ORA1=-K066*<OH> - PJAC(:,14,30)=-TPK%K066(:)*PCONC(:,14) + PJAC(:,15,31)=-TPK%K066(:)*PCONC(:,15) ! !OH/ORA2=-K067*<OH> - PJAC(:,14,31)=-TPK%K067(:)*PCONC(:,14) + PJAC(:,15,32)=-TPK%K067(:)*PCONC(:,15) ! !OH/MO2=0.0 ! @@ -25395,7 +25947,7 @@ SUBROUTINE SUBJ2 !OH/PHO=0.0 ! !OH/ADD=+K087*<O3> - PJAC(:,14,37)=+TPK%K087(:)*PCONC(:,1) + PJAC(:,15,38)=+TPK%K087(:)*PCONC(:,1) ! !OH/AROP=0.0 ! @@ -25405,32 +25957,40 @@ SUBROUTINE SUBJ2 ! !OH/XO2=0.0 ! +RETURN +END SUBROUTINE SUBJ2 +! +SUBROUTINE SUBJ3 +! +!Indices 16 a 20 +! +! !HO2/O3=+K023*<OH>-K024*<HO2>+0.23451*K079*<ALKE>+0.30000*K080*<BIO>+0.28441*K0 !81*<CARBO>+0.08*K082*<PAN> - PJAC(:,15,1)=+TPK%K023(:)*PCONC(:,14)-TPK%K024(:)*PCONC(:,15)+0.23451*TPK%K079& -&(:)*PCONC(:,19)+0.30000*TPK%K080(:)*PCONC(:,20)+0.28441*TPK%K081(:)*PCONC(:,25& -&)+0.08*TPK%K082(:)*PCONC(:,27) + PJAC(:,16,1)=+TPK%K023(:)*PCONC(:,15)-TPK%K024(:)*PCONC(:,16)+0.23451*TPK%K079& +&(:)*PCONC(:,20)+0.30000*TPK%K080(:)*PCONC(:,21)+0.28441*TPK%K081(:)*PCONC(:,26& +&)+0.08*TPK%K082(:)*PCONC(:,28) ! !HO2/H2O2=+K026*<OH> - PJAC(:,15,2)=+TPK%K026(:)*PCONC(:,14) + PJAC(:,16,2)=+TPK%K026(:)*PCONC(:,15) ! !HO2/NO=-K035*<HO2>+K090*<MO2>+0.74265*K091*<ALKAP>+K092*<ALKEP>+0.84700*K093*< !BIOP>+0.95115*K094*<AROP>+0.12334*K095*<CARBOP>+0.18401*K096*<OLN> - PJAC(:,15,3)=-TPK%K035(:)*PCONC(:,15)+TPK%K090(:)*PCONC(:,32)+0.74265*TPK%K091& -&(:)*PCONC(:,33)+TPK%K092(:)*PCONC(:,34)+0.84700*TPK%K093(:)*PCONC(:,35)+0.9511& -&5*TPK%K094(:)*PCONC(:,38)+0.12334*TPK%K095(:)*PCONC(:,39)+0.18401*TPK%K096(:)*& -&PCONC(:,40) + PJAC(:,16,3)=-TPK%K035(:)*PCONC(:,16)+TPK%K090(:)*PCONC(:,33)+0.74265*TPK%K091& +&(:)*PCONC(:,34)+TPK%K092(:)*PCONC(:,35)+0.84700*TPK%K093(:)*PCONC(:,36)+0.9511& +&5*TPK%K094(:)*PCONC(:,39)+0.12334*TPK%K095(:)*PCONC(:,40)+0.18401*TPK%K096(:)*& +&PCONC(:,41) ! !HO2/NO2=-K036*<HO2> - PJAC(:,15,4)=-TPK%K036(:)*PCONC(:,15) + PJAC(:,16,4)=-TPK%K036(:)*PCONC(:,16) ! !HO2/NO3=+K034*<OH>-K038*<HO2>+K072*<HCHO>+0.63217*K074*<CARBO>+K119*<MO2>+0.81 !290*K120*<ALKAP>+K121*<ALKEP>+K122*<BIOP>+K123*<AROP>+0.04915*K124*<CARBOP>+0. !25928*K125*<OLN> - PJAC(:,15,5)=+TPK%K034(:)*PCONC(:,14)-TPK%K038(:)*PCONC(:,15)+TPK%K072(:)*PCON& -&C(:,22)+0.63217*TPK%K074(:)*PCONC(:,25)+TPK%K119(:)*PCONC(:,32)+0.81290*TPK%K1& -&20(:)*PCONC(:,33)+TPK%K121(:)*PCONC(:,34)+TPK%K122(:)*PCONC(:,35)+TPK%K123(:)*& -&PCONC(:,38)+0.04915*TPK%K124(:)*PCONC(:,39)+0.25928*TPK%K125(:)*PCONC(:,40) + PJAC(:,16,5)=+TPK%K034(:)*PCONC(:,15)-TPK%K038(:)*PCONC(:,16)+TPK%K072(:)*PCON& +&C(:,23)+0.63217*TPK%K074(:)*PCONC(:,26)+TPK%K119(:)*PCONC(:,33)+0.81290*TPK%K1& +&20(:)*PCONC(:,34)+TPK%K121(:)*PCONC(:,35)+TPK%K122(:)*PCONC(:,36)+TPK%K123(:)*& +&PCONC(:,39)+0.04915*TPK%K124(:)*PCONC(:,40)+0.25928*TPK%K125(:)*PCONC(:,41) ! !HO2/N2O5=0.0 ! @@ -25439,152 +25999,146 @@ SUBROUTINE SUBJ2 !HO2/HNO3=0.0 ! !HO2/HNO4=+0.65*K006+K037 - PJAC(:,15,9)=+0.65*TPK%K006(:)+TPK%K037(:) + PJAC(:,16,9)=+0.65*TPK%K006(:)+TPK%K037(:) ! !HO2/NH3=0.0 ! +!HO2/DMS=0.0 +! !HO2/SO2=+K052*<OH> - PJAC(:,15,11)=+TPK%K052(:)*PCONC(:,14) + PJAC(:,16,12)=+TPK%K052(:)*PCONC(:,15) ! !HO2/SULF=0.0 ! !HO2/CO=+K053*<OH> - PJAC(:,15,13)=+TPK%K053(:)*PCONC(:,14) + PJAC(:,16,14)=+TPK%K053(:)*PCONC(:,15) ! !HO2/OH=+K023*<O3>-K025*<HO2>+K026*<H2O2>+K034*<NO3>+K051*<H2>+K052*<SO2>+K053* !<CO>+0.12793*K058*<ALKA>+0.10318*K061*<ARO>+K062*<HCHO>+0.51208*K065*<CARBO>+K !066*<ORA1>+0.02915*K069*<OP2>+0.28107*K070*<PAN> - PJAC(:,15,14)=+TPK%K023(:)*PCONC(:,1)-TPK%K025(:)*PCONC(:,15)+TPK%K026(:)*PCON& -&C(:,2)+TPK%K034(:)*PCONC(:,5)+TPK%K051(:)*TPK%H2(:)+TPK%K052(:)*PCONC(:,11)+TP& -&K%K053(:)*PCONC(:,13)+0.12793*TPK%K058(:)*PCONC(:,18)+0.10318*TPK%K061(:)*PCON& -&C(:,21)+TPK%K062(:)*PCONC(:,22)+0.51208*TPK%K065(:)*PCONC(:,25)+TPK%K066(:)*PC& -&ONC(:,30)+0.02915*TPK%K069(:)*PCONC(:,29)+0.28107*TPK%K070(:)*PCONC(:,27) + PJAC(:,16,15)=+TPK%K023(:)*PCONC(:,1)-TPK%K025(:)*PCONC(:,16)+TPK%K026(:)*PCON& +&C(:,2)+TPK%K034(:)*PCONC(:,5)+TPK%K051(:)*TPK%H2(:)+TPK%K052(:)*PCONC(:,12)+TP& +&K%K053(:)*PCONC(:,14)+0.12793*TPK%K058(:)*PCONC(:,19)+0.10318*TPK%K061(:)*PCON& +&C(:,22)+TPK%K062(:)*PCONC(:,23)+0.51208*TPK%K065(:)*PCONC(:,26)+TPK%K066(:)*PC& +&ONC(:,31)+0.02915*TPK%K069(:)*PCONC(:,30)+0.28107*TPK%K070(:)*PCONC(:,28) ! !HO2/HO2=-K024*<O3>-K025*<OH>-K027*<HO2>-K027*<HO2>-K027*<HO2>-K027*<HO2>-K028* !<HO2>*<H2O>-K028*<HO2>*<H2O>-K028*<HO2>*<H2O>-K028*<HO2>*<H2O>-K035*<NO>-K036* !<NO2>-K038*<NO3>-K084*<PHO>-K097*<MO2>-K098*<ALKAP>-K099*<ALKEP>-K0100*<BIOP>- !K0101*<AROP>-K0102*<CARBOP>-K103*<OLN>-K126*<XO2> - PJAC(:,15,15)=-TPK%K024(:)*PCONC(:,1)-TPK%K025(:)*PCONC(:,14)-TPK%K027(:)*PCON& -&C(:,15)-TPK%K027(:)*PCONC(:,15)-TPK%K027(:)*PCONC(:,15)-TPK%K027(:)*PCONC(:,15& -&)-TPK%K028(:)*PCONC(:,15)*TPK%H2O(:)-TPK%K028(:)*PCONC(:,15)*TPK%H2O(:)-TPK%K0& -&28(:)*PCONC(:,15)*TPK%H2O(:)-TPK%K028(:)*PCONC(:,15)*TPK%H2O(:)-TPK%K035(:)*PC& -&ONC(:,3)-TPK%K036(:)*PCONC(:,4)-TPK%K038(:)*PCONC(:,5)-TPK%K084(:)*PCONC(:,36)& -&-TPK%K097(:)*PCONC(:,32)-TPK%K098(:)*PCONC(:,33)-TPK%K099(:)*PCONC(:,34)-TPK%K& -&0100(:)*PCONC(:,35)-TPK%K0101(:)*PCONC(:,38)-TPK%K0102(:)*PCONC(:,39)-TPK%K103& -&(:)*PCONC(:,40)-TPK%K126(:)*PCONC(:,41) + PJAC(:,16,16)=-TPK%K024(:)*PCONC(:,1)-TPK%K025(:)*PCONC(:,15)-TPK%K027(:)*PCON& +&C(:,16)-TPK%K027(:)*PCONC(:,16)-TPK%K027(:)*PCONC(:,16)-TPK%K027(:)*PCONC(:,16& +&)-TPK%K028(:)*PCONC(:,16)*TPK%H2O(:)-TPK%K028(:)*PCONC(:,16)*TPK%H2O(:)-TPK%K0& +&28(:)*PCONC(:,16)*TPK%H2O(:)-TPK%K028(:)*PCONC(:,16)*TPK%H2O(:)-TPK%K035(:)*PC& +&ONC(:,3)-TPK%K036(:)*PCONC(:,4)-TPK%K038(:)*PCONC(:,5)-TPK%K084(:)*PCONC(:,37)& +&-TPK%K097(:)*PCONC(:,33)-TPK%K098(:)*PCONC(:,34)-TPK%K099(:)*PCONC(:,35)-TPK%K& +&0100(:)*PCONC(:,36)-TPK%K0101(:)*PCONC(:,39)-TPK%K0102(:)*PCONC(:,40)-TPK%K103& +&(:)*PCONC(:,41)-TPK%K126(:)*PCONC(:,42) ! !HO2/CH4=0.0 ! !HO2/ETH=0.0 ! !HO2/ALKA=+0.12793*K058*<OH> - PJAC(:,15,18)=+0.12793*TPK%K058(:)*PCONC(:,14) + PJAC(:,16,19)=+0.12793*TPK%K058(:)*PCONC(:,15) ! !HO2/ALKE=+0.23451*K079*<O3> - PJAC(:,15,19)=+0.23451*TPK%K079(:)*PCONC(:,1) + PJAC(:,16,20)=+0.23451*TPK%K079(:)*PCONC(:,1) ! !HO2/BIO=+0.28*K054*<O3P>+0.30000*K080*<O3> - PJAC(:,15,20)=+0.28*TPK%K054(:)*TPK%O3P(:)+0.30000*TPK%K080(:)*PCONC(:,1) + PJAC(:,16,21)=+0.28*TPK%K054(:)*TPK%O3P(:)+0.30000*TPK%K080(:)*PCONC(:,1) ! !HO2/ARO=+0.10318*K061*<OH> - PJAC(:,15,21)=+0.10318*TPK%K061(:)*PCONC(:,14) + PJAC(:,16,22)=+0.10318*TPK%K061(:)*PCONC(:,15) ! !HO2/HCHO=+K011+K011+K062*<OH>+K072*<NO3> - PJAC(:,15,22)=+TPK%K011(:)+TPK%K011(:)+TPK%K062(:)*PCONC(:,14)+TPK%K072(:)*PCO& + PJAC(:,16,23)=+TPK%K011(:)+TPK%K011(:)+TPK%K062(:)*PCONC(:,15)+TPK%K072(:)*PCO& &NC(:,5) ! !HO2/ALD=+K012 - PJAC(:,15,23)=+TPK%K012(:) + PJAC(:,16,24)=+TPK%K012(:) ! !HO2/KET=0.0 ! !HO2/CARBO=+0.75830*K016+0.51208*K065*<OH>+0.63217*K074*<NO3>+0.28441*K081*<O3> - PJAC(:,15,25)=+0.75830*TPK%K016(:)+0.51208*TPK%K065(:)*PCONC(:,14)+0.63217*TPK& + PJAC(:,16,26)=+0.75830*TPK%K016(:)+0.51208*TPK%K065(:)*PCONC(:,15)+0.63217*TPK& &%K074(:)*PCONC(:,5)+0.28441*TPK%K081(:)*PCONC(:,1) ! !HO2/ONIT=+K017 - PJAC(:,15,26)=+TPK%K017(:) + PJAC(:,16,27)=+TPK%K017(:) ! !HO2/PAN=+0.28107*K070*<OH>+0.08*K082*<O3> - PJAC(:,15,27)=+0.28107*TPK%K070(:)*PCONC(:,14)+0.08*TPK%K082(:)*PCONC(:,1) + PJAC(:,16,28)=+0.28107*TPK%K070(:)*PCONC(:,15)+0.08*TPK%K082(:)*PCONC(:,1) ! !HO2/OP1=+K013 - PJAC(:,15,28)=+TPK%K013(:) + PJAC(:,16,29)=+TPK%K013(:) ! !HO2/OP2=+0.96205*K014+0.02915*K069*<OH> - PJAC(:,15,29)=+0.96205*TPK%K014(:)+0.02915*TPK%K069(:)*PCONC(:,14) + PJAC(:,16,30)=+0.96205*TPK%K014(:)+0.02915*TPK%K069(:)*PCONC(:,15) ! !HO2/ORA1=+K066*<OH> - PJAC(:,15,30)=+TPK%K066(:)*PCONC(:,14) + PJAC(:,16,31)=+TPK%K066(:)*PCONC(:,15) ! !HO2/ORA2=0.0 ! !HO2/MO2=+K090*<NO>-K097*<HO2>+0.66*K104*<MO2>+0.66*K104*<MO2>+0.98383*K105*<AL !KAP>+K106*<ALKEP>+1.00000*K107*<BIOP>+1.02767*K108*<AROP>+0.82998*K109*<CARBOP !>+0.67560*K110*<OLN>+K119*<NO3>+K127*<XO2> - PJAC(:,15,32)=+TPK%K090(:)*PCONC(:,3)-TPK%K097(:)*PCONC(:,15)+0.66*TPK%K104(:)& -&*PCONC(:,32)+0.66*TPK%K104(:)*PCONC(:,32)+0.98383*TPK%K105(:)*PCONC(:,33)+TPK%& -&K106(:)*PCONC(:,34)+1.00000*TPK%K107(:)*PCONC(:,35)+1.02767*TPK%K108(:)*PCONC(& -&:,38)+0.82998*TPK%K109(:)*PCONC(:,39)+0.67560*TPK%K110(:)*PCONC(:,40)+TPK%K119& -&(:)*PCONC(:,5)+TPK%K127(:)*PCONC(:,41) + PJAC(:,16,33)=+TPK%K090(:)*PCONC(:,3)-TPK%K097(:)*PCONC(:,16)+0.66*TPK%K104(:)& +&*PCONC(:,33)+0.66*TPK%K104(:)*PCONC(:,33)+0.98383*TPK%K105(:)*PCONC(:,34)+TPK%& +&K106(:)*PCONC(:,35)+1.00000*TPK%K107(:)*PCONC(:,36)+1.02767*TPK%K108(:)*PCONC(& +&:,39)+0.82998*TPK%K109(:)*PCONC(:,40)+0.67560*TPK%K110(:)*PCONC(:,41)+TPK%K119& +&(:)*PCONC(:,5)+TPK%K127(:)*PCONC(:,42) ! !HO2/ALKAP=+0.74265*K091*<NO>-K098*<HO2>+0.98383*K105*<MO2>+0.48079*K111*<CARBO !P>+0.81290*K120*<NO3> - PJAC(:,15,33)=+0.74265*TPK%K091(:)*PCONC(:,3)-TPK%K098(:)*PCONC(:,15)+0.98383*& -&TPK%K105(:)*PCONC(:,32)+0.48079*TPK%K111(:)*PCONC(:,39)+0.81290*TPK%K120(:)*PC& + PJAC(:,16,34)=+0.74265*TPK%K091(:)*PCONC(:,3)-TPK%K098(:)*PCONC(:,16)+0.98383*& +&TPK%K105(:)*PCONC(:,33)+0.48079*TPK%K111(:)*PCONC(:,40)+0.81290*TPK%K120(:)*PC& &ONC(:,5) ! !HO2/ALKEP=+K092*<NO>-K099*<HO2>+K106*<MO2>+0.50078*K112*<CARBOP>+K121*<NO3> - PJAC(:,15,34)=+TPK%K092(:)*PCONC(:,3)-TPK%K099(:)*PCONC(:,15)+TPK%K106(:)*PCON& -&C(:,32)+0.50078*TPK%K112(:)*PCONC(:,39)+TPK%K121(:)*PCONC(:,5) + PJAC(:,16,35)=+TPK%K092(:)*PCONC(:,3)-TPK%K099(:)*PCONC(:,16)+TPK%K106(:)*PCON& +&C(:,33)+0.50078*TPK%K112(:)*PCONC(:,40)+TPK%K121(:)*PCONC(:,5) ! !HO2/BIOP=+0.84700*K093*<NO>-K0100*<HO2>+1.00000*K107*<MO2>+0.50600*K113*<CARBO !P>+K122*<NO3> - PJAC(:,15,35)=+0.84700*TPK%K093(:)*PCONC(:,3)-TPK%K0100(:)*PCONC(:,15)+1.00000& -&*TPK%K107(:)*PCONC(:,32)+0.50600*TPK%K113(:)*PCONC(:,39)+TPK%K122(:)*PCONC(:,5& + PJAC(:,16,36)=+0.84700*TPK%K093(:)*PCONC(:,3)-TPK%K0100(:)*PCONC(:,16)+1.00000& +&*TPK%K107(:)*PCONC(:,33)+0.50600*TPK%K113(:)*PCONC(:,40)+TPK%K122(:)*PCONC(:,5& &) ! !HO2/PHO=-K084*<HO2> - PJAC(:,15,36)=-TPK%K084(:)*PCONC(:,15) + PJAC(:,16,37)=-TPK%K084(:)*PCONC(:,16) ! !HO2/ADD=+0.02*K086*<O2> - PJAC(:,15,37)=+0.02*TPK%K086(:)*TPK%O2(:) + PJAC(:,16,38)=+0.02*TPK%K086(:)*TPK%O2(:) ! !HO2/AROP=+0.95115*K094*<NO>-K0101*<HO2>+1.02767*K108*<MO2>+K114*<CARBOP>+K123* !<NO3> - PJAC(:,15,38)=+0.95115*TPK%K094(:)*PCONC(:,3)-TPK%K0101(:)*PCONC(:,15)+1.02767& -&*TPK%K108(:)*PCONC(:,32)+TPK%K114(:)*PCONC(:,39)+TPK%K123(:)*PCONC(:,5) + PJAC(:,16,39)=+0.95115*TPK%K094(:)*PCONC(:,3)-TPK%K0101(:)*PCONC(:,16)+1.02767& +&*TPK%K108(:)*PCONC(:,33)+TPK%K114(:)*PCONC(:,40)+TPK%K123(:)*PCONC(:,5) ! !HO2/CARBOP=+0.12334*K095*<NO>-K0102*<HO2>+0.82998*K109*<MO2>+0.48079*K111*<ALK !AP>+0.50078*K112*<ALKEP>+0.50600*K113*<BIOP>+K114*<AROP>+0.07566*K115*<CARBOP> !+0.07566*K115*<CARBOP>+0.17599*K116*<OLN>+0.04915*K124*<NO3> - PJAC(:,15,39)=+0.12334*TPK%K095(:)*PCONC(:,3)-TPK%K0102(:)*PCONC(:,15)+0.82998& -&*TPK%K109(:)*PCONC(:,32)+0.48079*TPK%K111(:)*PCONC(:,33)+0.50078*TPK%K112(:)*P& -&CONC(:,34)+0.50600*TPK%K113(:)*PCONC(:,35)+TPK%K114(:)*PCONC(:,38)+0.07566*TPK& -&%K115(:)*PCONC(:,39)+0.07566*TPK%K115(:)*PCONC(:,39)+0.17599*TPK%K116(:)*PCONC& -&(:,40)+0.04915*TPK%K124(:)*PCONC(:,5) + PJAC(:,16,40)=+0.12334*TPK%K095(:)*PCONC(:,3)-TPK%K0102(:)*PCONC(:,16)+0.82998& +&*TPK%K109(:)*PCONC(:,33)+0.48079*TPK%K111(:)*PCONC(:,34)+0.50078*TPK%K112(:)*P& +&CONC(:,35)+0.50600*TPK%K113(:)*PCONC(:,36)+TPK%K114(:)*PCONC(:,39)+0.07566*TPK& +&%K115(:)*PCONC(:,40)+0.07566*TPK%K115(:)*PCONC(:,40)+0.17599*TPK%K116(:)*PCONC& +&(:,41)+0.04915*TPK%K124(:)*PCONC(:,5) ! !HO2/OLN=+0.18401*K096*<NO>-K103*<HO2>+0.67560*K110*<MO2>+0.17599*K116*<CARBOP> !+K117*<OLN>+K117*<OLN>+0.00000*K118*<OLN>+0.00000*K118*<OLN>+0.25928*K125*<NO3 !> - PJAC(:,15,40)=+0.18401*TPK%K096(:)*PCONC(:,3)-TPK%K103(:)*PCONC(:,15)+0.67560*& -&TPK%K110(:)*PCONC(:,32)+0.17599*TPK%K116(:)*PCONC(:,39)+TPK%K117(:)*PCONC(:,40& -&)+TPK%K117(:)*PCONC(:,40)+0.00000*TPK%K118(:)*PCONC(:,40)+0.00000*TPK%K118(:)*& -&PCONC(:,40)+0.25928*TPK%K125(:)*PCONC(:,5) + PJAC(:,16,41)=+0.18401*TPK%K096(:)*PCONC(:,3)-TPK%K103(:)*PCONC(:,16)+0.67560*& +&TPK%K110(:)*PCONC(:,33)+0.17599*TPK%K116(:)*PCONC(:,40)+TPK%K117(:)*PCONC(:,41& +&)+TPK%K117(:)*PCONC(:,41)+0.00000*TPK%K118(:)*PCONC(:,41)+0.00000*TPK%K118(:)*& +&PCONC(:,41)+0.25928*TPK%K125(:)*PCONC(:,5) ! !HO2/XO2=-K126*<HO2>+K127*<MO2> - PJAC(:,15,41)=-TPK%K126(:)*PCONC(:,15)+TPK%K127(:)*PCONC(:,32) -! -RETURN -END SUBROUTINE SUBJ2 -! -SUBROUTINE SUBJ3 -! -!Indices 16 a 20 -! + PJAC(:,16,42)=-TPK%K126(:)*PCONC(:,16)+TPK%K127(:)*PCONC(:,33) ! !CH4/O3=+0.04300*K079*<ALKE> - PJAC(:,16,1)=+0.04300*TPK%K079(:)*PCONC(:,19) + PJAC(:,17,1)=+0.04300*TPK%K079(:)*PCONC(:,20) ! !CH4/H2O2=0.0 ! @@ -25604,6 +26158,8 @@ SUBROUTINE SUBJ3 ! !CH4/NH3=0.0 ! +!CH4/DMS=0.0 +! !CH4/SO2=0.0 ! !CH4/SULF=0.0 @@ -25611,19 +26167,19 @@ SUBROUTINE SUBJ3 !CH4/CO=0.0 ! !CH4/OH=-K056*<CH4> - PJAC(:,16,14)=-TPK%K056(:)*PCONC(:,16) + PJAC(:,17,15)=-TPK%K056(:)*PCONC(:,17) ! !CH4/HO2=0.0 ! !CH4/CH4=-K056*<OH> - PJAC(:,16,16)=-TPK%K056(:)*PCONC(:,14) + PJAC(:,17,17)=-TPK%K056(:)*PCONC(:,15) ! !CH4/ETH=0.0 ! !CH4/ALKA=0.0 ! !CH4/ALKE=+0.04300*K079*<O3> - PJAC(:,16,19)=+0.04300*TPK%K079(:)*PCONC(:,1) + PJAC(:,17,20)=+0.04300*TPK%K079(:)*PCONC(:,1) ! !CH4/BIO=0.0 ! @@ -25670,7 +26226,7 @@ SUBROUTINE SUBJ3 !CH4/XO2=0.0 ! !ETH/O3=+0.03196*K079*<ALKE> - PJAC(:,17,1)=+0.03196*TPK%K079(:)*PCONC(:,19) + PJAC(:,18,1)=+0.03196*TPK%K079(:)*PCONC(:,20) ! !ETH/H2O2=0.0 ! @@ -25690,6 +26246,8 @@ SUBROUTINE SUBJ3 ! !ETH/NH3=0.0 ! +!ETH/DMS=0.0 +! !ETH/SO2=0.0 ! !ETH/SULF=0.0 @@ -25697,19 +26255,19 @@ SUBROUTINE SUBJ3 !ETH/CO=0.0 ! !ETH/OH=-K057*<ETH> - PJAC(:,17,14)=-TPK%K057(:)*PCONC(:,17) + PJAC(:,18,15)=-TPK%K057(:)*PCONC(:,18) ! !ETH/HO2=0.0 ! !ETH/CH4=0.0 ! !ETH/ETH=-K057*<OH> - PJAC(:,17,17)=-TPK%K057(:)*PCONC(:,14) + PJAC(:,18,18)=-TPK%K057(:)*PCONC(:,15) ! !ETH/ALKA=0.0 ! !ETH/ALKE=+0.03196*K079*<O3> - PJAC(:,17,19)=+0.03196*TPK%K079(:)*PCONC(:,1) + PJAC(:,18,20)=+0.03196*TPK%K079(:)*PCONC(:,1) ! !ETH/BIO=0.0 ! @@ -25775,6 +26333,8 @@ SUBROUTINE SUBJ3 ! !ALKA/NH3=0.0 ! +!ALKA/DMS=0.0 +! !ALKA/SO2=0.0 ! !ALKA/SULF=0.0 @@ -25782,7 +26342,7 @@ SUBROUTINE SUBJ3 !ALKA/CO=0.0 ! !ALKA/OH=-K058*<ALKA> - PJAC(:,18,14)=-TPK%K058(:)*PCONC(:,18) + PJAC(:,19,15)=-TPK%K058(:)*PCONC(:,19) ! !ALKA/HO2=0.0 ! @@ -25791,7 +26351,7 @@ SUBROUTINE SUBJ3 !ALKA/ETH=0.0 ! !ALKA/ALKA=-K058*<OH> - PJAC(:,18,18)=-TPK%K058(:)*PCONC(:,14) + PJAC(:,19,19)=-TPK%K058(:)*PCONC(:,15) ! !ALKA/ALKE=0.0 ! @@ -25840,18 +26400,18 @@ SUBROUTINE SUBJ3 !ALKA/XO2=0.0 ! !ALKE/O3=+0.00000*K079*<ALKE>-K079*<ALKE>+0.37388*K080*<BIO> - PJAC(:,19,1)=+0.00000*TPK%K079(:)*PCONC(:,19)-TPK%K079(:)*PCONC(:,19)+0.37388*& -&TPK%K080(:)*PCONC(:,20) + PJAC(:,20,1)=+0.00000*TPK%K079(:)*PCONC(:,20)-TPK%K079(:)*PCONC(:,20)+0.37388*& +&TPK%K080(:)*PCONC(:,21) ! !ALKE/H2O2=0.0 ! !ALKE/NO=+0.37815*K093*<BIOP> - PJAC(:,19,3)=+0.37815*TPK%K093(:)*PCONC(:,35) + PJAC(:,20,3)=+0.37815*TPK%K093(:)*PCONC(:,36) ! !ALKE/NO2=0.0 ! !ALKE/NO3=-K076*<ALKE>+0.42729*K122*<BIOP> - PJAC(:,19,5)=-TPK%K076(:)*PCONC(:,19)+0.42729*TPK%K122(:)*PCONC(:,35) + PJAC(:,20,5)=-TPK%K076(:)*PCONC(:,20)+0.42729*TPK%K122(:)*PCONC(:,36) ! !ALKE/N2O5=0.0 ! @@ -25863,6 +26423,8 @@ SUBROUTINE SUBJ3 ! !ALKE/NH3=0.0 ! +!ALKE/DMS=0.0 +! !ALKE/SO2=0.0 ! !ALKE/SULF=0.0 @@ -25870,7 +26432,7 @@ SUBROUTINE SUBJ3 !ALKE/CO=0.0 ! !ALKE/OH=-K059*<ALKE> - PJAC(:,19,14)=-TPK%K059(:)*PCONC(:,19) + PJAC(:,20,15)=-TPK%K059(:)*PCONC(:,20) ! !ALKE/HO2=0.0 ! @@ -25881,11 +26443,11 @@ SUBROUTINE SUBJ3 !ALKE/ALKA=0.0 ! !ALKE/ALKE=-K059*<OH>-K076*<NO3>+0.00000*K079*<O3>-K079*<O3> - PJAC(:,19,19)=-TPK%K059(:)*PCONC(:,14)-TPK%K076(:)*PCONC(:,5)+0.00000*TPK%K079& + PJAC(:,20,20)=-TPK%K059(:)*PCONC(:,15)-TPK%K076(:)*PCONC(:,5)+0.00000*TPK%K079& &(:)*PCONC(:,1)-TPK%K079(:)*PCONC(:,1) ! !ALKE/BIO=+0.91868*K054*<O3P>+0.37388*K080*<O3> - PJAC(:,19,20)=+0.91868*TPK%K054(:)*TPK%O3P(:)+0.37388*TPK%K080(:)*PCONC(:,1) + PJAC(:,20,21)=+0.91868*TPK%K054(:)*TPK%O3P(:)+0.37388*TPK%K080(:)*PCONC(:,1) ! !ALKE/ARO=0.0 ! @@ -25910,7 +26472,7 @@ SUBROUTINE SUBJ3 !ALKE/ORA2=0.0 ! !ALKE/MO2=+0.48074*K107*<BIOP> - PJAC(:,19,32)=+0.48074*TPK%K107(:)*PCONC(:,35) + PJAC(:,20,33)=+0.48074*TPK%K107(:)*PCONC(:,36) ! !ALKE/ALKAP=0.0 ! @@ -25918,8 +26480,8 @@ SUBROUTINE SUBJ3 ! !ALKE/BIOP=+0.37815*K093*<NO>+0.48074*K107*<MO2>+0.24463*K113*<CARBOP>+0.42729* !K122*<NO3> - PJAC(:,19,35)=+0.37815*TPK%K093(:)*PCONC(:,3)+0.48074*TPK%K107(:)*PCONC(:,32)+& -&0.24463*TPK%K113(:)*PCONC(:,39)+0.42729*TPK%K122(:)*PCONC(:,5) + PJAC(:,20,36)=+0.37815*TPK%K093(:)*PCONC(:,3)+0.48074*TPK%K107(:)*PCONC(:,33)+& +&0.24463*TPK%K113(:)*PCONC(:,40)+0.42729*TPK%K122(:)*PCONC(:,5) ! !ALKE/PHO=0.0 ! @@ -25928,14 +26490,22 @@ SUBROUTINE SUBJ3 !ALKE/AROP=0.0 ! !ALKE/CARBOP=+0.24463*K113*<BIOP> - PJAC(:,19,39)=+0.24463*TPK%K113(:)*PCONC(:,35) + PJAC(:,20,40)=+0.24463*TPK%K113(:)*PCONC(:,36) ! !ALKE/OLN=0.0 ! !ALKE/XO2=0.0 ! +RETURN +END SUBROUTINE SUBJ3 +! +SUBROUTINE SUBJ4 +! +!Indices 21 a 25 +! +! !BIO/O3=-K080*<BIO> - PJAC(:,20,1)=-TPK%K080(:)*PCONC(:,20) + PJAC(:,21,1)=-TPK%K080(:)*PCONC(:,21) ! !BIO/H2O2=0.0 ! @@ -25944,7 +26514,7 @@ SUBROUTINE SUBJ3 !BIO/NO2=0.0 ! !BIO/NO3=-K077*<BIO> - PJAC(:,20,5)=-TPK%K077(:)*PCONC(:,20) + PJAC(:,21,5)=-TPK%K077(:)*PCONC(:,21) ! !BIO/N2O5=0.0 ! @@ -25956,6 +26526,8 @@ SUBROUTINE SUBJ3 ! !BIO/NH3=0.0 ! +!BIO/DMS=0.0 +! !BIO/SO2=0.0 ! !BIO/SULF=0.0 @@ -25963,7 +26535,7 @@ SUBROUTINE SUBJ3 !BIO/CO=0.0 ! !BIO/OH=-K060*<BIO> - PJAC(:,20,14)=-TPK%K060(:)*PCONC(:,20) + PJAC(:,21,15)=-TPK%K060(:)*PCONC(:,21) ! !BIO/HO2=0.0 ! @@ -25976,7 +26548,7 @@ SUBROUTINE SUBJ3 !BIO/ALKE=0.0 ! !BIO/BIO=-K054*<O3P>-K060*<OH>-K077*<NO3>-K080*<O3> - PJAC(:,20,20)=-TPK%K054(:)*TPK%O3P(:)-TPK%K060(:)*PCONC(:,14)-TPK%K077(:)*PCON& + PJAC(:,21,21)=-TPK%K054(:)*TPK%O3P(:)-TPK%K060(:)*PCONC(:,15)-TPK%K077(:)*PCON& &C(:,5)-TPK%K080(:)*PCONC(:,1) ! !BIO/ARO=0.0 @@ -26021,26 +26593,18 @@ SUBROUTINE SUBJ3 ! !BIO/XO2=0.0 ! -RETURN -END SUBROUTINE SUBJ3 -! -SUBROUTINE SUBJ4 -! -!Indices 21 a 25 -! -! !ARO/O3=+K087*<ADD> - PJAC(:,21,1)=+TPK%K087(:)*PCONC(:,37) + PJAC(:,22,1)=+TPK%K087(:)*PCONC(:,38) ! !ARO/H2O2=0.0 ! !ARO/NO=0.0 ! !ARO/NO2=+0.10670*K083*<PHO>+K085*<ADD> - PJAC(:,21,4)=+0.10670*TPK%K083(:)*PCONC(:,36)+TPK%K085(:)*PCONC(:,37) + PJAC(:,22,4)=+0.10670*TPK%K083(:)*PCONC(:,37)+TPK%K085(:)*PCONC(:,38) ! !ARO/NO3=-K075*<ARO> - PJAC(:,21,5)=-TPK%K075(:)*PCONC(:,21) + PJAC(:,22,5)=-TPK%K075(:)*PCONC(:,22) ! !ARO/N2O5=0.0 ! @@ -26052,6 +26616,8 @@ SUBROUTINE SUBJ4 ! !ARO/NH3=0.0 ! +!ARO/DMS=0.0 +! !ARO/SO2=0.0 ! !ARO/SULF=0.0 @@ -26059,10 +26625,10 @@ SUBROUTINE SUBJ4 !ARO/CO=0.0 ! !ARO/OH=-K061*<ARO> - PJAC(:,21,14)=-TPK%K061(:)*PCONC(:,21) + PJAC(:,22,15)=-TPK%K061(:)*PCONC(:,22) ! !ARO/HO2=+1.06698*K084*<PHO> - PJAC(:,21,15)=+1.06698*TPK%K084(:)*PCONC(:,36) + PJAC(:,22,16)=+1.06698*TPK%K084(:)*PCONC(:,37) ! !ARO/CH4=0.0 ! @@ -26075,7 +26641,7 @@ SUBROUTINE SUBJ4 !ARO/BIO=0.0 ! !ARO/ARO=-K061*<OH>-K075*<NO3> - PJAC(:,21,21)=-TPK%K061(:)*PCONC(:,14)-TPK%K075(:)*PCONC(:,5) + PJAC(:,22,22)=-TPK%K061(:)*PCONC(:,15)-TPK%K075(:)*PCONC(:,5) ! !ARO/HCHO=0.0 ! @@ -26106,10 +26672,10 @@ SUBROUTINE SUBJ4 !ARO/BIOP=0.0 ! !ARO/PHO=+0.10670*K083*<NO2>+1.06698*K084*<HO2> - PJAC(:,21,36)=+0.10670*TPK%K083(:)*PCONC(:,4)+1.06698*TPK%K084(:)*PCONC(:,15) + PJAC(:,22,37)=+0.10670*TPK%K083(:)*PCONC(:,4)+1.06698*TPK%K084(:)*PCONC(:,16) ! !ARO/ADD=+K085*<NO2>+0.02*K086*<O2>+K087*<O3> - PJAC(:,21,37)=+TPK%K085(:)*PCONC(:,4)+0.02*TPK%K086(:)*TPK%O2(:)+TPK%K087(:)*P& + PJAC(:,22,38)=+TPK%K085(:)*PCONC(:,4)+0.02*TPK%K086(:)*TPK%O2(:)+TPK%K087(:)*P& &CONC(:,1) ! !ARO/AROP=0.0 @@ -26122,25 +26688,25 @@ SUBROUTINE SUBJ4 ! !HCHO/O3=+0.48290*K079*<ALKE>+0.90000*K080*<BIO>+0.00000*K081*<CARBO>+0.70*K082 !*<PAN> - PJAC(:,22,1)=+0.48290*TPK%K079(:)*PCONC(:,19)+0.90000*TPK%K080(:)*PCONC(:,20)+& -&0.00000*TPK%K081(:)*PCONC(:,25)+0.70*TPK%K082(:)*PCONC(:,27) + PJAC(:,23,1)=+0.48290*TPK%K079(:)*PCONC(:,20)+0.90000*TPK%K080(:)*PCONC(:,21)+& +&0.00000*TPK%K081(:)*PCONC(:,26)+0.70*TPK%K082(:)*PCONC(:,28) ! !HCHO/H2O2=0.0 ! !HCHO/NO=+K090*<MO2>+0.03002*K091*<ALKAP>+1.39870*K092*<ALKEP>+0.60600*K093*<BI !OP>+0.05848*K095*<CARBOP>+0.23419*K096*<OLN> - PJAC(:,22,3)=+TPK%K090(:)*PCONC(:,32)+0.03002*TPK%K091(:)*PCONC(:,33)+1.39870*& -&TPK%K092(:)*PCONC(:,34)+0.60600*TPK%K093(:)*PCONC(:,35)+0.05848*TPK%K095(:)*PC& -&ONC(:,39)+0.23419*TPK%K096(:)*PCONC(:,40) + PJAC(:,23,3)=+TPK%K090(:)*PCONC(:,33)+0.03002*TPK%K091(:)*PCONC(:,34)+1.39870*& +&TPK%K092(:)*PCONC(:,35)+0.60600*TPK%K093(:)*PCONC(:,36)+0.05848*TPK%K095(:)*PC& +&ONC(:,40)+0.23419*TPK%K096(:)*PCONC(:,41) ! !HCHO/NO2=0.0 ! !HCHO/NO3=-K072*<HCHO>+0.40*K078*<PAN>+K119*<MO2>+0.03142*K120*<ALKAP>+1.40909* !K121*<ALKEP>+0.68600*K122*<BIOP>+0.03175*K124*<CARBOP>+0.20740*K125*<OLN> - PJAC(:,22,5)=-TPK%K072(:)*PCONC(:,22)+0.40*TPK%K078(:)*PCONC(:,27)+TPK%K119(:)& -&*PCONC(:,32)+0.03142*TPK%K120(:)*PCONC(:,33)+1.40909*TPK%K121(:)*PCONC(:,34)+0& -&.68600*TPK%K122(:)*PCONC(:,35)+0.03175*TPK%K124(:)*PCONC(:,39)+0.20740*TPK%K12& -&5(:)*PCONC(:,40) + PJAC(:,23,5)=-TPK%K072(:)*PCONC(:,23)+0.40*TPK%K078(:)*PCONC(:,28)+TPK%K119(:)& +&*PCONC(:,33)+0.03142*TPK%K120(:)*PCONC(:,34)+1.40909*TPK%K121(:)*PCONC(:,35)+0& +&.68600*TPK%K122(:)*PCONC(:,36)+0.03175*TPK%K124(:)*PCONC(:,40)+0.20740*TPK%K12& +&5(:)*PCONC(:,41) ! !HCHO/N2O5=0.0 ! @@ -26152,6 +26718,8 @@ SUBROUTINE SUBJ4 ! !HCHO/NH3=0.0 ! +!HCHO/DMS=0.0 +! !HCHO/SO2=0.0 ! !HCHO/SULF=0.0 @@ -26160,9 +26728,9 @@ SUBROUTINE SUBJ4 ! !HCHO/OH=+0.00140*K058*<ALKA>-K062*<HCHO>+0.00000*K065*<CARBO>+0.35*K068*<OP1>+ !0.02915*K069*<OP2>+0.57839*K070*<PAN> - PJAC(:,22,14)=+0.00140*TPK%K058(:)*PCONC(:,18)-TPK%K062(:)*PCONC(:,22)+0.00000& -&*TPK%K065(:)*PCONC(:,25)+0.35*TPK%K068(:)*PCONC(:,28)+0.02915*TPK%K069(:)*PCON& -&C(:,29)+0.57839*TPK%K070(:)*PCONC(:,27) + PJAC(:,23,15)=+0.00140*TPK%K058(:)*PCONC(:,19)-TPK%K062(:)*PCONC(:,23)+0.00000& +&*TPK%K065(:)*PCONC(:,26)+0.35*TPK%K068(:)*PCONC(:,29)+0.02915*TPK%K069(:)*PCON& +&C(:,30)+0.57839*TPK%K070(:)*PCONC(:,28) ! !HCHO/HO2=0.0 ! @@ -26171,18 +26739,18 @@ SUBROUTINE SUBJ4 !HCHO/ETH=0.0 ! !HCHO/ALKA=+0.00140*K058*<OH> - PJAC(:,22,18)=+0.00140*TPK%K058(:)*PCONC(:,14) + PJAC(:,23,19)=+0.00140*TPK%K058(:)*PCONC(:,15) ! !HCHO/ALKE=+0.48290*K079*<O3> - PJAC(:,22,19)=+0.48290*TPK%K079(:)*PCONC(:,1) + PJAC(:,23,20)=+0.48290*TPK%K079(:)*PCONC(:,1) ! !HCHO/BIO=+0.05*K054*<O3P>+0.90000*K080*<O3> - PJAC(:,22,20)=+0.05*TPK%K054(:)*TPK%O3P(:)+0.90000*TPK%K080(:)*PCONC(:,1) + PJAC(:,23,21)=+0.05*TPK%K054(:)*TPK%O3P(:)+0.90000*TPK%K080(:)*PCONC(:,1) ! !HCHO/ARO=0.0 ! !HCHO/HCHO=-K010-K011-K062*<OH>-K072*<NO3> - PJAC(:,22,22)=-TPK%K010(:)-TPK%K011(:)-TPK%K062(:)*PCONC(:,14)-TPK%K072(:)*PCO& + PJAC(:,23,23)=-TPK%K010(:)-TPK%K011(:)-TPK%K062(:)*PCONC(:,15)-TPK%K072(:)*PCO& &NC(:,5) ! !HCHO/ALD=0.0 @@ -26190,20 +26758,20 @@ SUBROUTINE SUBJ4 !HCHO/KET=0.0 ! !HCHO/CARBO=+0.06517*K016+0.00000*K065*<OH>+0.00000*K081*<O3> - PJAC(:,22,25)=+0.06517*TPK%K016(:)+0.00000*TPK%K065(:)*PCONC(:,14)+0.00000*TPK& + PJAC(:,23,26)=+0.06517*TPK%K016(:)+0.00000*TPK%K065(:)*PCONC(:,15)+0.00000*TPK& &%K081(:)*PCONC(:,1) ! !HCHO/ONIT=0.0 ! !HCHO/PAN=+0.57839*K070*<OH>+0.40*K078*<NO3>+0.70*K082*<O3> - PJAC(:,22,27)=+0.57839*TPK%K070(:)*PCONC(:,14)+0.40*TPK%K078(:)*PCONC(:,5)+0.7& + PJAC(:,23,28)=+0.57839*TPK%K070(:)*PCONC(:,15)+0.40*TPK%K078(:)*PCONC(:,5)+0.7& &0*TPK%K082(:)*PCONC(:,1) ! !HCHO/OP1=+K013+0.35*K068*<OH> - PJAC(:,22,28)=+TPK%K013(:)+0.35*TPK%K068(:)*PCONC(:,14) + PJAC(:,23,29)=+TPK%K013(:)+0.35*TPK%K068(:)*PCONC(:,15) ! !HCHO/OP2=+0.02915*K069*<OH> - PJAC(:,22,29)=+0.02915*TPK%K069(:)*PCONC(:,14) + PJAC(:,23,30)=+0.02915*TPK%K069(:)*PCONC(:,15) ! !HCHO/ORA1=0.0 ! @@ -26212,70 +26780,70 @@ SUBROUTINE SUBJ4 !HCHO/MO2=+K090*<NO>+1.33*K104*<MO2>+1.33*K104*<MO2>+0.80556*K105*<ALKAP>+1.428 !94*K106*<ALKEP>+1.09000*K107*<BIOP>+K108*<AROP>+0.95723*K109*<CARBOP>+0.88625* !K110*<OLN>+K119*<NO3>+K127*<XO2> - PJAC(:,22,32)=+TPK%K090(:)*PCONC(:,3)+1.33*TPK%K104(:)*PCONC(:,32)+1.33*TPK%K1& -&04(:)*PCONC(:,32)+0.80556*TPK%K105(:)*PCONC(:,33)+1.42894*TPK%K106(:)*PCONC(:,& -&34)+1.09000*TPK%K107(:)*PCONC(:,35)+TPK%K108(:)*PCONC(:,38)+0.95723*TPK%K109(:& -&)*PCONC(:,39)+0.88625*TPK%K110(:)*PCONC(:,40)+TPK%K119(:)*PCONC(:,5)+TPK%K127(& -&:)*PCONC(:,41) + PJAC(:,23,33)=+TPK%K090(:)*PCONC(:,3)+1.33*TPK%K104(:)*PCONC(:,33)+1.33*TPK%K1& +&04(:)*PCONC(:,33)+0.80556*TPK%K105(:)*PCONC(:,34)+1.42894*TPK%K106(:)*PCONC(:,& +&35)+1.09000*TPK%K107(:)*PCONC(:,36)+TPK%K108(:)*PCONC(:,39)+0.95723*TPK%K109(:& +&)*PCONC(:,40)+0.88625*TPK%K110(:)*PCONC(:,41)+TPK%K119(:)*PCONC(:,5)+TPK%K127(& +&:)*PCONC(:,42) ! !HCHO/ALKAP=+0.03002*K091*<NO>+0.80556*K105*<MO2>+0.07600*K111*<CARBOP>+0.03142 !*K120*<NO3> - PJAC(:,22,33)=+0.03002*TPK%K091(:)*PCONC(:,3)+0.80556*TPK%K105(:)*PCONC(:,32)+& -&0.07600*TPK%K111(:)*PCONC(:,39)+0.03142*TPK%K120(:)*PCONC(:,5) + PJAC(:,23,34)=+0.03002*TPK%K091(:)*PCONC(:,3)+0.80556*TPK%K105(:)*PCONC(:,33)+& +&0.07600*TPK%K111(:)*PCONC(:,40)+0.03142*TPK%K120(:)*PCONC(:,5) ! !HCHO/ALKEP=+1.39870*K092*<NO>+1.42894*K106*<MO2>+0.68192*K112*<CARBOP>+1.40909 !*K121*<NO3> - PJAC(:,22,34)=+1.39870*TPK%K092(:)*PCONC(:,3)+1.42894*TPK%K106(:)*PCONC(:,32)+& -&0.68192*TPK%K112(:)*PCONC(:,39)+1.40909*TPK%K121(:)*PCONC(:,5) + PJAC(:,23,35)=+1.39870*TPK%K092(:)*PCONC(:,3)+1.42894*TPK%K106(:)*PCONC(:,33)+& +&0.68192*TPK%K112(:)*PCONC(:,40)+1.40909*TPK%K121(:)*PCONC(:,5) ! !HCHO/BIOP=+0.60600*K093*<NO>+1.09000*K107*<MO2>+0.34000*K113*<CARBOP>+0.68600* !K122*<NO3> - PJAC(:,22,35)=+0.60600*TPK%K093(:)*PCONC(:,3)+1.09000*TPK%K107(:)*PCONC(:,32)+& -&0.34000*TPK%K113(:)*PCONC(:,39)+0.68600*TPK%K122(:)*PCONC(:,5) + PJAC(:,23,36)=+0.60600*TPK%K093(:)*PCONC(:,3)+1.09000*TPK%K107(:)*PCONC(:,33)+& +&0.34000*TPK%K113(:)*PCONC(:,40)+0.68600*TPK%K122(:)*PCONC(:,5) ! !HCHO/PHO=0.0 ! !HCHO/ADD=0.0 ! !HCHO/AROP=+K108*<MO2> - PJAC(:,22,38)=+TPK%K108(:)*PCONC(:,32) + PJAC(:,23,39)=+TPK%K108(:)*PCONC(:,33) ! !HCHO/CARBOP=+0.05848*K095*<NO>+0.95723*K109*<MO2>+0.07600*K111*<ALKAP>+0.68192 !*K112*<ALKEP>+0.34000*K113*<BIOP>+0.03432*K115*<CARBOP>+0.03432*K115*<CARBOP>+ !0.13414*K116*<OLN>+0.03175*K124*<NO3> - PJAC(:,22,39)=+0.05848*TPK%K095(:)*PCONC(:,3)+0.95723*TPK%K109(:)*PCONC(:,32)+& -&0.07600*TPK%K111(:)*PCONC(:,33)+0.68192*TPK%K112(:)*PCONC(:,34)+0.34000*TPK%K1& -&13(:)*PCONC(:,35)+0.03432*TPK%K115(:)*PCONC(:,39)+0.03432*TPK%K115(:)*PCONC(:,& -&39)+0.13414*TPK%K116(:)*PCONC(:,40)+0.03175*TPK%K124(:)*PCONC(:,5) + PJAC(:,23,40)=+0.05848*TPK%K095(:)*PCONC(:,3)+0.95723*TPK%K109(:)*PCONC(:,33)+& +&0.07600*TPK%K111(:)*PCONC(:,34)+0.68192*TPK%K112(:)*PCONC(:,35)+0.34000*TPK%K1& +&13(:)*PCONC(:,36)+0.03432*TPK%K115(:)*PCONC(:,40)+0.03432*TPK%K115(:)*PCONC(:,& +&40)+0.13414*TPK%K116(:)*PCONC(:,41)+0.03175*TPK%K124(:)*PCONC(:,5) ! !HCHO/OLN=+0.23419*K096*<NO>+0.88625*K110*<MO2>+0.13414*K116*<CARBOP>+0.00000*K !118*<OLN>+0.00000*K118*<OLN>+0.20740*K125*<NO3> - PJAC(:,22,40)=+0.23419*TPK%K096(:)*PCONC(:,3)+0.88625*TPK%K110(:)*PCONC(:,32)+& -&0.13414*TPK%K116(:)*PCONC(:,39)+0.00000*TPK%K118(:)*PCONC(:,40)+0.00000*TPK%K1& -&18(:)*PCONC(:,40)+0.20740*TPK%K125(:)*PCONC(:,5) + PJAC(:,23,41)=+0.23419*TPK%K096(:)*PCONC(:,3)+0.88625*TPK%K110(:)*PCONC(:,33)+& +&0.13414*TPK%K116(:)*PCONC(:,40)+0.00000*TPK%K118(:)*PCONC(:,41)+0.00000*TPK%K1& +&18(:)*PCONC(:,41)+0.20740*TPK%K125(:)*PCONC(:,5) ! !HCHO/XO2=+K127*<MO2> - PJAC(:,22,41)=+TPK%K127(:)*PCONC(:,32) + PJAC(:,23,42)=+TPK%K127(:)*PCONC(:,33) ! !ALD/O3=+0.51468*K079*<ALKE>+0.00000*K080*<BIO>+0.15692*K081*<CARBO> - PJAC(:,23,1)=+0.51468*TPK%K079(:)*PCONC(:,19)+0.00000*TPK%K080(:)*PCONC(:,20)+& -&0.15692*TPK%K081(:)*PCONC(:,25) + PJAC(:,24,1)=+0.51468*TPK%K079(:)*PCONC(:,20)+0.00000*TPK%K080(:)*PCONC(:,21)+& +&0.15692*TPK%K081(:)*PCONC(:,26) ! !ALD/H2O2=0.0 ! !ALD/NO=+0.33144*K091*<ALKAP>+0.42125*K092*<ALKEP>+0.00000*K093*<BIOP>+0.07368* !K095*<CARBOP>+1.01182*K096*<OLN> - PJAC(:,23,3)=+0.33144*TPK%K091(:)*PCONC(:,33)+0.42125*TPK%K092(:)*PCONC(:,34)+& -&0.00000*TPK%K093(:)*PCONC(:,35)+0.07368*TPK%K095(:)*PCONC(:,39)+1.01182*TPK%K0& -&96(:)*PCONC(:,40) + PJAC(:,24,3)=+0.33144*TPK%K091(:)*PCONC(:,34)+0.42125*TPK%K092(:)*PCONC(:,35)+& +&0.00000*TPK%K093(:)*PCONC(:,36)+0.07368*TPK%K095(:)*PCONC(:,40)+1.01182*TPK%K0& +&96(:)*PCONC(:,41) ! !ALD/NO2=0.0 ! !ALD/NO3=-K073*<ALD>+0.05265*K074*<CARBO>+0.33743*K120*<ALKAP>+0.43039*K121*<AL !KEP>+0.00000*K122*<BIOP>+0.02936*K124*<CARBOP>+0.91850*K125*<OLN> - PJAC(:,23,5)=-TPK%K073(:)*PCONC(:,23)+0.05265*TPK%K074(:)*PCONC(:,25)+0.33743*& -&TPK%K120(:)*PCONC(:,33)+0.43039*TPK%K121(:)*PCONC(:,34)+0.00000*TPK%K122(:)*PC& -&ONC(:,35)+0.02936*TPK%K124(:)*PCONC(:,39)+0.91850*TPK%K125(:)*PCONC(:,40) + PJAC(:,24,5)=-TPK%K073(:)*PCONC(:,24)+0.05265*TPK%K074(:)*PCONC(:,26)+0.33743*& +&TPK%K120(:)*PCONC(:,34)+0.43039*TPK%K121(:)*PCONC(:,35)+0.00000*TPK%K122(:)*PC& +&ONC(:,36)+0.02936*TPK%K124(:)*PCONC(:,40)+0.91850*TPK%K125(:)*PCONC(:,41) ! !ALD/N2O5=0.0 ! @@ -26287,6 +26855,8 @@ SUBROUTINE SUBJ4 ! !ALD/NH3=0.0 ! +!ALD/DMS=0.0 +! !ALD/SO2=0.0 ! !ALD/SULF=0.0 @@ -26294,8 +26864,8 @@ SUBROUTINE SUBJ4 !ALD/CO=0.0 ! !ALD/OH=+0.08173*K058*<ALKA>-K063*<ALD>+0.06253*K065*<CARBO>+0.07335*K069*<OP2> - PJAC(:,23,14)=+0.08173*TPK%K058(:)*PCONC(:,18)-TPK%K063(:)*PCONC(:,23)+0.06253& -&*TPK%K065(:)*PCONC(:,25)+0.07335*TPK%K069(:)*PCONC(:,29) + PJAC(:,24,15)=+0.08173*TPK%K058(:)*PCONC(:,19)-TPK%K063(:)*PCONC(:,24)+0.06253& +&*TPK%K065(:)*PCONC(:,26)+0.07335*TPK%K069(:)*PCONC(:,30) ! !ALD/HO2=0.0 ! @@ -26304,36 +26874,36 @@ SUBROUTINE SUBJ4 !ALD/ETH=0.0 ! !ALD/ALKA=+0.08173*K058*<OH> - PJAC(:,23,18)=+0.08173*TPK%K058(:)*PCONC(:,14) + PJAC(:,24,19)=+0.08173*TPK%K058(:)*PCONC(:,15) ! !ALD/ALKE=+0.51468*K079*<O3> - PJAC(:,23,19)=+0.51468*TPK%K079(:)*PCONC(:,1) + PJAC(:,24,20)=+0.51468*TPK%K079(:)*PCONC(:,1) ! !ALD/BIO=+0.00000*K080*<O3> - PJAC(:,23,20)=+0.00000*TPK%K080(:)*PCONC(:,1) + PJAC(:,24,21)=+0.00000*TPK%K080(:)*PCONC(:,1) ! !ALD/ARO=0.0 ! !ALD/HCHO=0.0 ! !ALD/ALD=-K012-K063*<OH>-K073*<NO3> - PJAC(:,23,23)=-TPK%K012(:)-TPK%K063(:)*PCONC(:,14)-TPK%K073(:)*PCONC(:,5) + PJAC(:,24,24)=-TPK%K012(:)-TPK%K063(:)*PCONC(:,15)-TPK%K073(:)*PCONC(:,5) ! !ALD/KET=0.0 ! !ALD/CARBO=+K055*<O3P>+0.06253*K065*<OH>+0.05265*K074*<NO3>+0.15692*K081*<O3> - PJAC(:,23,25)=+TPK%K055(:)*TPK%O3P(:)+0.06253*TPK%K065(:)*PCONC(:,14)+0.05265*& + PJAC(:,24,26)=+TPK%K055(:)*TPK%O3P(:)+0.06253*TPK%K065(:)*PCONC(:,15)+0.05265*& &TPK%K074(:)*PCONC(:,5)+0.15692*TPK%K081(:)*PCONC(:,1) ! !ALD/ONIT=+0.20*K017 - PJAC(:,23,26)=+0.20*TPK%K017(:) + PJAC(:,24,27)=+0.20*TPK%K017(:) ! !ALD/PAN=0.0 ! !ALD/OP1=0.0 ! !ALD/OP2=+0.96205*K014+0.07335*K069*<OH> - PJAC(:,23,29)=+0.96205*TPK%K014(:)+0.07335*TPK%K069(:)*PCONC(:,14) + PJAC(:,24,30)=+0.96205*TPK%K014(:)+0.07335*TPK%K069(:)*PCONC(:,15) ! !ALD/ORA1=0.0 ! @@ -26341,24 +26911,24 @@ SUBROUTINE SUBJ4 ! !ALD/MO2=+0.56070*K105*<ALKAP>+0.46413*K106*<ALKEP>+0.00000*K107*<BIOP>+0.08295 !*K109*<CARBOP>+0.41524*K110*<OLN> - PJAC(:,23,32)=+0.56070*TPK%K105(:)*PCONC(:,33)+0.46413*TPK%K106(:)*PCONC(:,34)& -&+0.00000*TPK%K107(:)*PCONC(:,35)+0.08295*TPK%K109(:)*PCONC(:,39)+0.41524*TPK%K& -&110(:)*PCONC(:,40) + PJAC(:,24,33)=+0.56070*TPK%K105(:)*PCONC(:,34)+0.46413*TPK%K106(:)*PCONC(:,35)& +&+0.00000*TPK%K107(:)*PCONC(:,36)+0.08295*TPK%K109(:)*PCONC(:,40)+0.41524*TPK%K& +&110(:)*PCONC(:,41) ! !ALD/ALKAP=+0.33144*K091*<NO>+0.56070*K105*<MO2>+0.71461*K111*<CARBOP>+0.33743* !K120*<NO3> - PJAC(:,23,33)=+0.33144*TPK%K091(:)*PCONC(:,3)+0.56070*TPK%K105(:)*PCONC(:,32)+& -&0.71461*TPK%K111(:)*PCONC(:,39)+0.33743*TPK%K120(:)*PCONC(:,5) + PJAC(:,24,34)=+0.33144*TPK%K091(:)*PCONC(:,3)+0.56070*TPK%K105(:)*PCONC(:,33)+& +&0.71461*TPK%K111(:)*PCONC(:,40)+0.33743*TPK%K120(:)*PCONC(:,5) ! !ALD/ALKEP=+0.42125*K092*<NO>+0.46413*K106*<MO2>+0.68374*K112*<CARBOP>+0.43039* !K121*<NO3> - PJAC(:,23,34)=+0.42125*TPK%K092(:)*PCONC(:,3)+0.46413*TPK%K106(:)*PCONC(:,32)+& -&0.68374*TPK%K112(:)*PCONC(:,39)+0.43039*TPK%K121(:)*PCONC(:,5) + PJAC(:,24,35)=+0.42125*TPK%K092(:)*PCONC(:,3)+0.46413*TPK%K106(:)*PCONC(:,33)+& +&0.68374*TPK%K112(:)*PCONC(:,40)+0.43039*TPK%K121(:)*PCONC(:,5) ! !ALD/BIOP=+0.00000*K093*<NO>+0.00000*K107*<MO2>+0.00000*K113*<CARBOP>+0.00000*K !122*<NO3> - PJAC(:,23,35)=+0.00000*TPK%K093(:)*PCONC(:,3)+0.00000*TPK%K107(:)*PCONC(:,32)+& -&0.00000*TPK%K113(:)*PCONC(:,39)+0.00000*TPK%K122(:)*PCONC(:,5) + PJAC(:,24,36)=+0.00000*TPK%K093(:)*PCONC(:,3)+0.00000*TPK%K107(:)*PCONC(:,33)+& +&0.00000*TPK%K113(:)*PCONC(:,40)+0.00000*TPK%K122(:)*PCONC(:,5) ! !ALD/PHO=0.0 ! @@ -26369,36 +26939,36 @@ SUBROUTINE SUBJ4 !ALD/CARBOP=+0.07368*K095*<NO>+0.08295*K109*<MO2>+0.71461*K111*<ALKAP>+0.68374* !K112*<ALKEP>+0.00000*K113*<BIOP>+0.06969*K115*<CARBOP>+0.06969*K115*<CARBOP>+0 !.42122*K116*<OLN>+0.02936*K124*<NO3> - PJAC(:,23,39)=+0.07368*TPK%K095(:)*PCONC(:,3)+0.08295*TPK%K109(:)*PCONC(:,32)+& -&0.71461*TPK%K111(:)*PCONC(:,33)+0.68374*TPK%K112(:)*PCONC(:,34)+0.00000*TPK%K1& -&13(:)*PCONC(:,35)+0.06969*TPK%K115(:)*PCONC(:,39)+0.06969*TPK%K115(:)*PCONC(:,& -&39)+0.42122*TPK%K116(:)*PCONC(:,40)+0.02936*TPK%K124(:)*PCONC(:,5) + PJAC(:,24,40)=+0.07368*TPK%K095(:)*PCONC(:,3)+0.08295*TPK%K109(:)*PCONC(:,33)+& +&0.71461*TPK%K111(:)*PCONC(:,34)+0.68374*TPK%K112(:)*PCONC(:,35)+0.00000*TPK%K1& +&13(:)*PCONC(:,36)+0.06969*TPK%K115(:)*PCONC(:,40)+0.06969*TPK%K115(:)*PCONC(:,& +&40)+0.42122*TPK%K116(:)*PCONC(:,41)+0.02936*TPK%K124(:)*PCONC(:,5) ! !ALD/OLN=+1.01182*K096*<NO>+0.41524*K110*<MO2>+0.42122*K116*<CARBOP>+0.00000*K1 !18*<OLN>+0.00000*K118*<OLN>+0.91850*K125*<NO3> - PJAC(:,23,40)=+1.01182*TPK%K096(:)*PCONC(:,3)+0.41524*TPK%K110(:)*PCONC(:,32)+& -&0.42122*TPK%K116(:)*PCONC(:,39)+0.00000*TPK%K118(:)*PCONC(:,40)+0.00000*TPK%K1& -&18(:)*PCONC(:,40)+0.91850*TPK%K125(:)*PCONC(:,5) + PJAC(:,24,41)=+1.01182*TPK%K096(:)*PCONC(:,3)+0.41524*TPK%K110(:)*PCONC(:,33)+& +&0.42122*TPK%K116(:)*PCONC(:,40)+0.00000*TPK%K118(:)*PCONC(:,41)+0.00000*TPK%K1& +&18(:)*PCONC(:,41)+0.91850*TPK%K125(:)*PCONC(:,5) ! !ALD/XO2=0.0 ! !KET/O3=+0.07377*K079*<ALKE>+0.00000*K080*<BIO> - PJAC(:,24,1)=+0.07377*TPK%K079(:)*PCONC(:,19)+0.00000*TPK%K080(:)*PCONC(:,20) + PJAC(:,25,1)=+0.07377*TPK%K079(:)*PCONC(:,20)+0.00000*TPK%K080(:)*PCONC(:,21) ! !KET/H2O2=0.0 ! !KET/NO=+0.54531*K091*<ALKAP>+0.05220*K092*<ALKEP>+0.00000*K093*<BIOP>+0.37862* !K096*<OLN> - PJAC(:,24,3)=+0.54531*TPK%K091(:)*PCONC(:,33)+0.05220*TPK%K092(:)*PCONC(:,34)+& -&0.00000*TPK%K093(:)*PCONC(:,35)+0.37862*TPK%K096(:)*PCONC(:,40) + PJAC(:,25,3)=+0.54531*TPK%K091(:)*PCONC(:,34)+0.05220*TPK%K092(:)*PCONC(:,35)+& +&0.00000*TPK%K093(:)*PCONC(:,36)+0.37862*TPK%K096(:)*PCONC(:,41) ! !KET/NO2=0.0 ! !KET/NO3=+0.00632*K074*<CARBO>+0.62978*K120*<ALKAP>+0.02051*K121*<ALKEP>+0.0000 !0*K122*<BIOP>+0.34740*K125*<OLN> - PJAC(:,24,5)=+0.00632*TPK%K074(:)*PCONC(:,25)+0.62978*TPK%K120(:)*PCONC(:,33)+& -&0.02051*TPK%K121(:)*PCONC(:,34)+0.00000*TPK%K122(:)*PCONC(:,35)+0.34740*TPK%K1& -&25(:)*PCONC(:,40) + PJAC(:,25,5)=+0.00632*TPK%K074(:)*PCONC(:,26)+0.62978*TPK%K120(:)*PCONC(:,34)+& +&0.02051*TPK%K121(:)*PCONC(:,35)+0.00000*TPK%K122(:)*PCONC(:,36)+0.34740*TPK%K1& +&25(:)*PCONC(:,41) ! !KET/N2O5=0.0 ! @@ -26410,6 +26980,8 @@ SUBROUTINE SUBJ4 ! !KET/NH3=0.0 ! +!KET/DMS=0.0 +! !KET/SO2=0.0 ! !KET/SULF=0.0 @@ -26417,8 +26989,8 @@ SUBROUTINE SUBJ4 !KET/CO=0.0 ! !KET/OH=+0.03498*K058*<ALKA>-K064*<KET>+0.00853*K065*<CARBO>+0.37591*K069*<OP2> - PJAC(:,24,14)=+0.03498*TPK%K058(:)*PCONC(:,18)-TPK%K064(:)*PCONC(:,24)+0.00853& -&*TPK%K065(:)*PCONC(:,25)+0.37591*TPK%K069(:)*PCONC(:,29) + PJAC(:,25,15)=+0.03498*TPK%K058(:)*PCONC(:,19)-TPK%K064(:)*PCONC(:,25)+0.00853& +&*TPK%K065(:)*PCONC(:,26)+0.37591*TPK%K069(:)*PCONC(:,30) ! !KET/HO2=0.0 ! @@ -26427,13 +26999,13 @@ SUBROUTINE SUBJ4 !KET/ETH=0.0 ! !KET/ALKA=+0.03498*K058*<OH> - PJAC(:,24,18)=+0.03498*TPK%K058(:)*PCONC(:,14) + PJAC(:,25,19)=+0.03498*TPK%K058(:)*PCONC(:,15) ! !KET/ALKE=+0.07377*K079*<O3> - PJAC(:,24,19)=+0.07377*TPK%K079(:)*PCONC(:,1) + PJAC(:,25,20)=+0.07377*TPK%K079(:)*PCONC(:,1) ! !KET/BIO=+0.00000*K080*<O3> - PJAC(:,24,20)=+0.00000*TPK%K080(:)*PCONC(:,1) + PJAC(:,25,21)=+0.00000*TPK%K080(:)*PCONC(:,1) ! !KET/ARO=0.0 ! @@ -26442,20 +27014,20 @@ SUBROUTINE SUBJ4 !KET/ALD=0.0 ! !KET/KET=-K015-K064*<OH> - PJAC(:,24,24)=-TPK%K015(:)-TPK%K064(:)*PCONC(:,14) + PJAC(:,25,25)=-TPK%K015(:)-TPK%K064(:)*PCONC(:,15) ! !KET/CARBO=+0.00853*K065*<OH>+0.00632*K074*<NO3> - PJAC(:,24,25)=+0.00853*TPK%K065(:)*PCONC(:,14)+0.00632*TPK%K074(:)*PCONC(:,5) + PJAC(:,25,26)=+0.00853*TPK%K065(:)*PCONC(:,15)+0.00632*TPK%K074(:)*PCONC(:,5) ! !KET/ONIT=+0.80*K017 - PJAC(:,24,26)=+0.80*TPK%K017(:) + PJAC(:,25,27)=+0.80*TPK%K017(:) ! !KET/PAN=0.0 ! !KET/OP1=0.0 ! !KET/OP2=+0.37591*K069*<OH> - PJAC(:,24,29)=+0.37591*TPK%K069(:)*PCONC(:,14) + PJAC(:,25,30)=+0.37591*TPK%K069(:)*PCONC(:,15) ! !KET/ORA1=0.0 ! @@ -26463,23 +27035,23 @@ SUBROUTINE SUBJ4 ! !KET/MO2=+0.09673*K105*<ALKAP>+0.03814*K106*<ALKEP>+0.00000*K107*<BIOP>+0.09667 !*K110*<OLN> - PJAC(:,24,32)=+0.09673*TPK%K105(:)*PCONC(:,33)+0.03814*TPK%K106(:)*PCONC(:,34)& -&+0.00000*TPK%K107(:)*PCONC(:,35)+0.09667*TPK%K110(:)*PCONC(:,40) + PJAC(:,25,33)=+0.09673*TPK%K105(:)*PCONC(:,34)+0.03814*TPK%K106(:)*PCONC(:,35)& +&+0.00000*TPK%K107(:)*PCONC(:,36)+0.09667*TPK%K110(:)*PCONC(:,41) ! !KET/ALKAP=+0.54531*K091*<NO>+0.09673*K105*<MO2>+0.18819*K111*<CARBOP>+0.62978* !K120*<NO3> - PJAC(:,24,33)=+0.54531*TPK%K091(:)*PCONC(:,3)+0.09673*TPK%K105(:)*PCONC(:,32)+& -&0.18819*TPK%K111(:)*PCONC(:,39)+0.62978*TPK%K120(:)*PCONC(:,5) + PJAC(:,25,34)=+0.54531*TPK%K091(:)*PCONC(:,3)+0.09673*TPK%K105(:)*PCONC(:,33)+& +&0.18819*TPK%K111(:)*PCONC(:,40)+0.62978*TPK%K120(:)*PCONC(:,5) ! !KET/ALKEP=+0.05220*K092*<NO>+0.03814*K106*<MO2>+0.06579*K112*<CARBOP>+0.02051* !K121*<NO3> - PJAC(:,24,34)=+0.05220*TPK%K092(:)*PCONC(:,3)+0.03814*TPK%K106(:)*PCONC(:,32)+& -&0.06579*TPK%K112(:)*PCONC(:,39)+0.02051*TPK%K121(:)*PCONC(:,5) + PJAC(:,25,35)=+0.05220*TPK%K092(:)*PCONC(:,3)+0.03814*TPK%K106(:)*PCONC(:,33)+& +&0.06579*TPK%K112(:)*PCONC(:,40)+0.02051*TPK%K121(:)*PCONC(:,5) ! !KET/BIOP=+0.00000*K093*<NO>+0.00000*K107*<MO2>+0.00000*K113*<CARBOP>+0.00000*K !122*<NO3> - PJAC(:,24,35)=+0.00000*TPK%K093(:)*PCONC(:,3)+0.00000*TPK%K107(:)*PCONC(:,32)+& -&0.00000*TPK%K113(:)*PCONC(:,39)+0.00000*TPK%K122(:)*PCONC(:,5) + PJAC(:,25,36)=+0.00000*TPK%K093(:)*PCONC(:,3)+0.00000*TPK%K107(:)*PCONC(:,33)+& +&0.00000*TPK%K113(:)*PCONC(:,40)+0.00000*TPK%K122(:)*PCONC(:,5) ! !KET/PHO=0.0 ! @@ -26489,39 +27061,47 @@ SUBROUTINE SUBJ4 ! !KET/CARBOP=+0.18819*K111*<ALKAP>+0.06579*K112*<ALKEP>+0.00000*K113*<BIOP>+0.02 !190*K115*<CARBOP>+0.02190*K115*<CARBOP>+0.10822*K116*<OLN> - PJAC(:,24,39)=+0.18819*TPK%K111(:)*PCONC(:,33)+0.06579*TPK%K112(:)*PCONC(:,34)& -&+0.00000*TPK%K113(:)*PCONC(:,35)+0.02190*TPK%K115(:)*PCONC(:,39)+0.02190*TPK%K& -&115(:)*PCONC(:,39)+0.10822*TPK%K116(:)*PCONC(:,40) + PJAC(:,25,40)=+0.18819*TPK%K111(:)*PCONC(:,34)+0.06579*TPK%K112(:)*PCONC(:,35)& +&+0.00000*TPK%K113(:)*PCONC(:,36)+0.02190*TPK%K115(:)*PCONC(:,40)+0.02190*TPK%K& +&115(:)*PCONC(:,40)+0.10822*TPK%K116(:)*PCONC(:,41) ! !KET/OLN=+0.37862*K096*<NO>+0.09667*K110*<MO2>+0.10822*K116*<CARBOP>+0.00000*K1 !18*<OLN>+0.00000*K118*<OLN>+0.34740*K125*<NO3> - PJAC(:,24,40)=+0.37862*TPK%K096(:)*PCONC(:,3)+0.09667*TPK%K110(:)*PCONC(:,32)+& -&0.10822*TPK%K116(:)*PCONC(:,39)+0.00000*TPK%K118(:)*PCONC(:,40)+0.00000*TPK%K1& -&18(:)*PCONC(:,40)+0.34740*TPK%K125(:)*PCONC(:,5) + PJAC(:,25,41)=+0.37862*TPK%K096(:)*PCONC(:,3)+0.09667*TPK%K110(:)*PCONC(:,33)+& +&0.10822*TPK%K116(:)*PCONC(:,40)+0.00000*TPK%K118(:)*PCONC(:,41)+0.00000*TPK%K1& +&18(:)*PCONC(:,41)+0.34740*TPK%K125(:)*PCONC(:,5) ! !KET/XO2=0.0 ! +RETURN +END SUBROUTINE SUBJ4 +! +SUBROUTINE SUBJ5 +! +!Indices 26 a 30 +! +! !CARBO/O3=+0.00000*K079*<ALKE>+0.39754*K080*<BIO>+1.07583*K081*<CARBO>-K081*<CA !RBO> - PJAC(:,25,1)=+0.00000*TPK%K079(:)*PCONC(:,19)+0.39754*TPK%K080(:)*PCONC(:,20)+& -&1.07583*TPK%K081(:)*PCONC(:,25)-TPK%K081(:)*PCONC(:,25) + PJAC(:,26,1)=+0.00000*TPK%K079(:)*PCONC(:,20)+0.39754*TPK%K080(:)*PCONC(:,21)+& +&1.07583*TPK%K081(:)*PCONC(:,26)-TPK%K081(:)*PCONC(:,26) ! !CARBO/H2O2=0.0 ! !CARBO/NO=+0.03407*K091*<ALKAP>+0.45463*K093*<BIOP>+2.06993*K094*<AROP>+0.08670 !*K095*<CARBOP> - PJAC(:,25,3)=+0.03407*TPK%K091(:)*PCONC(:,33)+0.45463*TPK%K093(:)*PCONC(:,35)+& -&2.06993*TPK%K094(:)*PCONC(:,38)+0.08670*TPK%K095(:)*PCONC(:,39) + PJAC(:,26,3)=+0.03407*TPK%K091(:)*PCONC(:,34)+0.45463*TPK%K093(:)*PCONC(:,36)+& +&2.06993*TPK%K094(:)*PCONC(:,39)+0.08670*TPK%K095(:)*PCONC(:,40) ! !CARBO/NO2=0.0 ! !CARBO/NO3=+0.10530*K074*<CARBO>-K074*<CARBO>+0.00000*K076*<ALKE>+0.91741*K077* !<BIO>+0.03531*K120*<ALKAP>+0.61160*K122*<BIOP>+2.81904*K123*<AROP>+0.03455*K12 !4*<CARBOP> - PJAC(:,25,5)=+0.10530*TPK%K074(:)*PCONC(:,25)-TPK%K074(:)*PCONC(:,25)+0.00000*& -&TPK%K076(:)*PCONC(:,19)+0.91741*TPK%K077(:)*PCONC(:,20)+0.03531*TPK%K120(:)*PC& -&ONC(:,33)+0.61160*TPK%K122(:)*PCONC(:,35)+2.81904*TPK%K123(:)*PCONC(:,38)+0.03& -&455*TPK%K124(:)*PCONC(:,39) + PJAC(:,26,5)=+0.10530*TPK%K074(:)*PCONC(:,26)-TPK%K074(:)*PCONC(:,26)+0.00000*& +&TPK%K076(:)*PCONC(:,20)+0.91741*TPK%K077(:)*PCONC(:,21)+0.03531*TPK%K120(:)*PC& +&ONC(:,34)+0.61160*TPK%K122(:)*PCONC(:,36)+2.81904*TPK%K123(:)*PCONC(:,39)+0.03& +&455*TPK%K124(:)*PCONC(:,40) ! !CARBO/N2O5=0.0 ! @@ -26533,6 +27113,8 @@ SUBROUTINE SUBJ4 ! !CARBO/NH3=0.0 ! +!CARBO/DMS=0.0 +! !CARBO/SO2=0.0 ! !CARBO/SULF=0.0 @@ -26541,8 +27123,8 @@ SUBROUTINE SUBJ4 ! !CARBO/OH=+0.00835*K058*<ALKA>+0.16919*K065*<CARBO>-K065*<CARBO>+0.21863*K070*< !PAN> - PJAC(:,25,14)=+0.00835*TPK%K058(:)*PCONC(:,18)+0.16919*TPK%K065(:)*PCONC(:,25)& -&-TPK%K065(:)*PCONC(:,25)+0.21863*TPK%K070(:)*PCONC(:,27) + PJAC(:,26,15)=+0.00835*TPK%K058(:)*PCONC(:,19)+0.16919*TPK%K065(:)*PCONC(:,26)& +&-TPK%K065(:)*PCONC(:,26)+0.21863*TPK%K070(:)*PCONC(:,28) ! !CARBO/HO2=0.0 ! @@ -26551,13 +27133,13 @@ SUBROUTINE SUBJ4 !CARBO/ETH=0.0 ! !CARBO/ALKA=+0.00835*K058*<OH> - PJAC(:,25,18)=+0.00835*TPK%K058(:)*PCONC(:,14) + PJAC(:,26,19)=+0.00835*TPK%K058(:)*PCONC(:,15) ! !CARBO/ALKE=+0.00000*K076*<NO3>+0.00000*K079*<O3> - PJAC(:,25,19)=+0.00000*TPK%K076(:)*PCONC(:,5)+0.00000*TPK%K079(:)*PCONC(:,1) + PJAC(:,26,20)=+0.00000*TPK%K076(:)*PCONC(:,5)+0.00000*TPK%K079(:)*PCONC(:,1) ! !CARBO/BIO=+0.13255*K054*<O3P>+0.91741*K077*<NO3>+0.39754*K080*<O3> - PJAC(:,25,20)=+0.13255*TPK%K054(:)*TPK%O3P(:)+0.91741*TPK%K077(:)*PCONC(:,5)+0& + PJAC(:,26,21)=+0.13255*TPK%K054(:)*TPK%O3P(:)+0.91741*TPK%K077(:)*PCONC(:,5)+0& &.39754*TPK%K080(:)*PCONC(:,1) ! !CARBO/ARO=0.0 @@ -26570,14 +27152,14 @@ SUBROUTINE SUBJ4 ! !CARBO/CARBO=-K016-K055*<O3P>+0.16919*K065*<OH>-K065*<OH>+0.10530*K074*<NO3>-K0 !74*<NO3>+1.07583*K081*<O3>-K081*<O3> - PJAC(:,25,25)=-TPK%K016(:)-TPK%K055(:)*TPK%O3P(:)+0.16919*TPK%K065(:)*PCONC(:,& -&14)-TPK%K065(:)*PCONC(:,14)+0.10530*TPK%K074(:)*PCONC(:,5)-TPK%K074(:)*PCONC(:& + PJAC(:,26,26)=-TPK%K016(:)-TPK%K055(:)*TPK%O3P(:)+0.16919*TPK%K065(:)*PCONC(:,& +&15)-TPK%K065(:)*PCONC(:,15)+0.10530*TPK%K074(:)*PCONC(:,5)-TPK%K074(:)*PCONC(:& &,5)+1.07583*TPK%K081(:)*PCONC(:,1)-TPK%K081(:)*PCONC(:,1) ! !CARBO/ONIT=0.0 ! !CARBO/PAN=+0.21863*K070*<OH> - PJAC(:,25,27)=+0.21863*TPK%K070(:)*PCONC(:,14) + PJAC(:,26,28)=+0.21863*TPK%K070(:)*PCONC(:,15) ! !CARBO/OP1=0.0 ! @@ -26589,20 +27171,20 @@ SUBROUTINE SUBJ4 ! !CARBO/MO2=+0.07976*K105*<ALKAP>+0.56064*K107*<BIOP>+1.99461*K108*<AROP>+0.1538 !7*K109*<CARBOP> - PJAC(:,25,32)=+0.07976*TPK%K105(:)*PCONC(:,33)+0.56064*TPK%K107(:)*PCONC(:,35)& -&+1.99461*TPK%K108(:)*PCONC(:,38)+0.15387*TPK%K109(:)*PCONC(:,39) + PJAC(:,26,33)=+0.07976*TPK%K105(:)*PCONC(:,34)+0.56064*TPK%K107(:)*PCONC(:,36)& +&+1.99461*TPK%K108(:)*PCONC(:,39)+0.15387*TPK%K109(:)*PCONC(:,40) ! !CARBO/ALKAP=+0.03407*K091*<NO>+0.07976*K105*<MO2>+0.06954*K111*<CARBOP>+0.0353 !1*K120*<NO3> - PJAC(:,25,33)=+0.03407*TPK%K091(:)*PCONC(:,3)+0.07976*TPK%K105(:)*PCONC(:,32)+& -&0.06954*TPK%K111(:)*PCONC(:,39)+0.03531*TPK%K120(:)*PCONC(:,5) + PJAC(:,26,34)=+0.03407*TPK%K091(:)*PCONC(:,3)+0.07976*TPK%K105(:)*PCONC(:,33)+& +&0.06954*TPK%K111(:)*PCONC(:,40)+0.03531*TPK%K120(:)*PCONC(:,5) ! !CARBO/ALKEP=0.0 ! !CARBO/BIOP=+0.45463*K093*<NO>+0.56064*K107*<MO2>+0.78591*K113*<CARBOP>+0.61160 !*K122*<NO3> - PJAC(:,25,35)=+0.45463*TPK%K093(:)*PCONC(:,3)+0.56064*TPK%K107(:)*PCONC(:,32)+& -&0.78591*TPK%K113(:)*PCONC(:,39)+0.61160*TPK%K122(:)*PCONC(:,5) + PJAC(:,26,36)=+0.45463*TPK%K093(:)*PCONC(:,3)+0.56064*TPK%K107(:)*PCONC(:,33)+& +&0.78591*TPK%K113(:)*PCONC(:,40)+0.61160*TPK%K122(:)*PCONC(:,5) ! !CARBO/PHO=0.0 ! @@ -26610,43 +27192,35 @@ SUBROUTINE SUBJ4 ! !CARBO/AROP=+2.06993*K094*<NO>+1.99461*K108*<MO2>+1.99455*K114*<CARBOP>+2.81904 !*K123*<NO3> - PJAC(:,25,38)=+2.06993*TPK%K094(:)*PCONC(:,3)+1.99461*TPK%K108(:)*PCONC(:,32)+& -&1.99455*TPK%K114(:)*PCONC(:,39)+2.81904*TPK%K123(:)*PCONC(:,5) + PJAC(:,26,39)=+2.06993*TPK%K094(:)*PCONC(:,3)+1.99461*TPK%K108(:)*PCONC(:,33)+& +&1.99455*TPK%K114(:)*PCONC(:,40)+2.81904*TPK%K123(:)*PCONC(:,5) ! !CARBO/CARBOP=+0.08670*K095*<NO>+0.15387*K109*<MO2>+0.06954*K111*<ALKAP>+0.7859 !1*K113*<BIOP>+1.99455*K114*<AROP>+0.10777*K115*<CARBOP>+0.10777*K115*<CARBOP>+ !0.03455*K124*<NO3> - PJAC(:,25,39)=+0.08670*TPK%K095(:)*PCONC(:,3)+0.15387*TPK%K109(:)*PCONC(:,32)+& -&0.06954*TPK%K111(:)*PCONC(:,33)+0.78591*TPK%K113(:)*PCONC(:,35)+1.99455*TPK%K1& -&14(:)*PCONC(:,38)+0.10777*TPK%K115(:)*PCONC(:,39)+0.10777*TPK%K115(:)*PCONC(:,& -&39)+0.03455*TPK%K124(:)*PCONC(:,5) + PJAC(:,26,40)=+0.08670*TPK%K095(:)*PCONC(:,3)+0.15387*TPK%K109(:)*PCONC(:,33)+& +&0.06954*TPK%K111(:)*PCONC(:,34)+0.78591*TPK%K113(:)*PCONC(:,36)+1.99455*TPK%K1& +&14(:)*PCONC(:,39)+0.10777*TPK%K115(:)*PCONC(:,40)+0.10777*TPK%K115(:)*PCONC(:,& +&40)+0.03455*TPK%K124(:)*PCONC(:,5) ! !CARBO/OLN=0.0 ! !CARBO/XO2=0.0 ! -RETURN -END SUBROUTINE SUBJ4 -! -SUBROUTINE SUBJ5 -! -!Indices 26 a 30 -! -! !ONIT/O3=0.0 ! !ONIT/H2O2=0.0 ! !ONIT/NO=+0.08459*K091*<ALKAP>+0.15300*K093*<BIOP>+0.04885*K094*<AROP>+0.18401* !K096*<OLN> - PJAC(:,26,3)=+0.08459*TPK%K091(:)*PCONC(:,33)+0.15300*TPK%K093(:)*PCONC(:,35)+& -&0.04885*TPK%K094(:)*PCONC(:,38)+0.18401*TPK%K096(:)*PCONC(:,40) + PJAC(:,27,3)=+0.08459*TPK%K091(:)*PCONC(:,34)+0.15300*TPK%K093(:)*PCONC(:,36)+& +&0.04885*TPK%K094(:)*PCONC(:,39)+0.18401*TPK%K096(:)*PCONC(:,41) ! !ONIT/NO2=+K083*<PHO> - PJAC(:,26,4)=+TPK%K083(:)*PCONC(:,36) + PJAC(:,27,4)=+TPK%K083(:)*PCONC(:,37) ! !ONIT/NO3=+0.60*K078*<PAN>+0.25928*K125*<OLN> - PJAC(:,26,5)=+0.60*TPK%K078(:)*PCONC(:,27)+0.25928*TPK%K125(:)*PCONC(:,40) + PJAC(:,27,5)=+0.60*TPK%K078(:)*PCONC(:,28)+0.25928*TPK%K125(:)*PCONC(:,41) ! !ONIT/N2O5=0.0 ! @@ -26658,6 +27232,8 @@ SUBROUTINE SUBJ5 ! !ONIT/NH3=0.0 ! +!ONIT/DMS=0.0 +! !ONIT/SO2=0.0 ! !ONIT/SULF=0.0 @@ -26665,10 +27241,10 @@ SUBROUTINE SUBJ5 !ONIT/CO=0.0 ! !ONIT/OH=-K071*<ONIT> - PJAC(:,26,14)=-TPK%K071(:)*PCONC(:,26) + PJAC(:,27,15)=-TPK%K071(:)*PCONC(:,27) ! !ONIT/HO2=+K103*<OLN> - PJAC(:,26,15)=+TPK%K103(:)*PCONC(:,40) + PJAC(:,27,16)=+TPK%K103(:)*PCONC(:,41) ! !ONIT/CH4=0.0 ! @@ -26691,10 +27267,10 @@ SUBROUTINE SUBJ5 !ONIT/CARBO=0.0 ! !ONIT/ONIT=-K017-K071*<OH> - PJAC(:,26,26)=-TPK%K017(:)-TPK%K071(:)*PCONC(:,14) + PJAC(:,27,27)=-TPK%K017(:)-TPK%K071(:)*PCONC(:,15) ! !ONIT/PAN=+0.60*K078*<NO3> - PJAC(:,26,27)=+0.60*TPK%K078(:)*PCONC(:,5) + PJAC(:,27,28)=+0.60*TPK%K078(:)*PCONC(:,5) ! !ONIT/OP1=0.0 ! @@ -26705,49 +27281,49 @@ SUBROUTINE SUBJ5 !ONIT/ORA2=0.0 ! !ONIT/MO2=+0.67560*K110*<OLN> - PJAC(:,26,32)=+0.67560*TPK%K110(:)*PCONC(:,40) + PJAC(:,27,33)=+0.67560*TPK%K110(:)*PCONC(:,41) ! !ONIT/ALKAP=+0.08459*K091*<NO> - PJAC(:,26,33)=+0.08459*TPK%K091(:)*PCONC(:,3) + PJAC(:,27,34)=+0.08459*TPK%K091(:)*PCONC(:,3) ! !ONIT/ALKEP=0.0 ! !ONIT/BIOP=+0.15300*K093*<NO> - PJAC(:,26,35)=+0.15300*TPK%K093(:)*PCONC(:,3) + PJAC(:,27,36)=+0.15300*TPK%K093(:)*PCONC(:,3) ! !ONIT/PHO=+K083*<NO2> - PJAC(:,26,36)=+TPK%K083(:)*PCONC(:,4) + PJAC(:,27,37)=+TPK%K083(:)*PCONC(:,4) ! !ONIT/ADD=0.0 ! !ONIT/AROP=+0.04885*K094*<NO> - PJAC(:,26,38)=+0.04885*TPK%K094(:)*PCONC(:,3) + PJAC(:,27,39)=+0.04885*TPK%K094(:)*PCONC(:,3) ! !ONIT/CARBOP=+0.66562*K116*<OLN> - PJAC(:,26,39)=+0.66562*TPK%K116(:)*PCONC(:,40) + PJAC(:,27,40)=+0.66562*TPK%K116(:)*PCONC(:,41) ! !ONIT/OLN=+0.18401*K096*<NO>+K103*<HO2>+0.67560*K110*<MO2>+0.66562*K116*<CARBOP !>+2.00*K117*<OLN>+2.00*K117*<OLN>+0.00000*K118*<OLN>+0.00000*K118*<OLN>+0.2592 !8*K125*<NO3> - PJAC(:,26,40)=+0.18401*TPK%K096(:)*PCONC(:,3)+TPK%K103(:)*PCONC(:,15)+0.67560*& -&TPK%K110(:)*PCONC(:,32)+0.66562*TPK%K116(:)*PCONC(:,39)+2.00*TPK%K117(:)*PCONC& -&(:,40)+2.00*TPK%K117(:)*PCONC(:,40)+0.00000*TPK%K118(:)*PCONC(:,40)+0.00000*TP& -&K%K118(:)*PCONC(:,40)+0.25928*TPK%K125(:)*PCONC(:,5) + PJAC(:,27,41)=+0.18401*TPK%K096(:)*PCONC(:,3)+TPK%K103(:)*PCONC(:,16)+0.67560*& +&TPK%K110(:)*PCONC(:,33)+0.66562*TPK%K116(:)*PCONC(:,40)+2.00*TPK%K117(:)*PCONC& +&(:,41)+2.00*TPK%K117(:)*PCONC(:,41)+0.00000*TPK%K118(:)*PCONC(:,41)+0.00000*TP& +&K%K118(:)*PCONC(:,41)+0.25928*TPK%K125(:)*PCONC(:,5) ! !ONIT/XO2=0.0 ! !PAN/O3=+0.30000*K082*<PAN>-K082*<PAN> - PJAC(:,27,1)=+0.30000*TPK%K082(:)*PCONC(:,27)-TPK%K082(:)*PCONC(:,27) + PJAC(:,28,1)=+0.30000*TPK%K082(:)*PCONC(:,28)-TPK%K082(:)*PCONC(:,28) ! !PAN/H2O2=0.0 ! !PAN/NO=0.0 ! !PAN/NO2=+1.00000*K088*<CARBOP> - PJAC(:,27,4)=+1.00000*TPK%K088(:)*PCONC(:,39) + PJAC(:,28,4)=+1.00000*TPK%K088(:)*PCONC(:,40) ! !PAN/NO3=+0.40000*K078*<PAN>-K078*<PAN> - PJAC(:,27,5)=+0.40000*TPK%K078(:)*PCONC(:,27)-TPK%K078(:)*PCONC(:,27) + PJAC(:,28,5)=+0.40000*TPK%K078(:)*PCONC(:,28)-TPK%K078(:)*PCONC(:,28) ! !PAN/N2O5=0.0 ! @@ -26759,6 +27335,8 @@ SUBROUTINE SUBJ5 ! !PAN/NH3=0.0 ! +!PAN/DMS=0.0 +! !PAN/SO2=0.0 ! !PAN/SULF=0.0 @@ -26766,7 +27344,7 @@ SUBROUTINE SUBJ5 !PAN/CO=0.0 ! !PAN/OH=+0.28107*K070*<PAN>-K070*<PAN> - PJAC(:,27,14)=+0.28107*TPK%K070(:)*PCONC(:,27)-TPK%K070(:)*PCONC(:,27) + PJAC(:,28,15)=+0.28107*TPK%K070(:)*PCONC(:,28)-TPK%K070(:)*PCONC(:,28) ! !PAN/HO2=0.0 ! @@ -26794,7 +27372,7 @@ SUBROUTINE SUBJ5 ! !PAN/PAN=+0.28107*K070*<OH>-K070*<OH>+0.40000*K078*<NO3>-K078*<NO3>+0.30000*K08 !2*<O3>-K082*<O3>-K089 - PJAC(:,27,27)=+0.28107*TPK%K070(:)*PCONC(:,14)-TPK%K070(:)*PCONC(:,14)+0.40000& + PJAC(:,28,28)=+0.28107*TPK%K070(:)*PCONC(:,15)-TPK%K070(:)*PCONC(:,15)+0.40000& &*TPK%K078(:)*PCONC(:,5)-TPK%K078(:)*PCONC(:,5)+0.30000*TPK%K082(:)*PCONC(:,1)-& &TPK%K082(:)*PCONC(:,1)-TPK%K089(:) ! @@ -26821,7 +27399,7 @@ SUBROUTINE SUBJ5 !PAN/AROP=0.0 ! !PAN/CARBOP=+1.00000*K088*<NO2> - PJAC(:,27,39)=+1.00000*TPK%K088(:)*PCONC(:,4) + PJAC(:,28,40)=+1.00000*TPK%K088(:)*PCONC(:,4) ! !PAN/OLN=0.0 ! @@ -26847,6 +27425,8 @@ SUBROUTINE SUBJ5 ! !OP1/NH3=0.0 ! +!OP1/DMS=0.0 +! !OP1/SO2=0.0 ! !OP1/SULF=0.0 @@ -26854,10 +27434,10 @@ SUBROUTINE SUBJ5 !OP1/CO=0.0 ! !OP1/OH=-K068*<OP1> - PJAC(:,28,14)=-TPK%K068(:)*PCONC(:,28) + PJAC(:,29,15)=-TPK%K068(:)*PCONC(:,29) ! !OP1/HO2=+K097*<MO2> - PJAC(:,28,15)=+TPK%K097(:)*PCONC(:,32) + PJAC(:,29,16)=+TPK%K097(:)*PCONC(:,33) ! !OP1/CH4=0.0 ! @@ -26884,7 +27464,7 @@ SUBROUTINE SUBJ5 !OP1/PAN=0.0 ! !OP1/OP1=-K013-K068*<OH> - PJAC(:,28,28)=-TPK%K013(:)-TPK%K068(:)*PCONC(:,14) + PJAC(:,29,29)=-TPK%K013(:)-TPK%K068(:)*PCONC(:,15) ! !OP1/OP2=0.0 ! @@ -26893,7 +27473,7 @@ SUBROUTINE SUBJ5 !OP1/ORA2=0.0 ! !OP1/MO2=+K097*<HO2> - PJAC(:,28,32)=+TPK%K097(:)*PCONC(:,15) + PJAC(:,29,33)=+TPK%K097(:)*PCONC(:,16) ! !OP1/ALKAP=0.0 ! @@ -26914,7 +27494,7 @@ SUBROUTINE SUBJ5 !OP1/XO2=0.0 ! !OP2/O3=+0.10149*K081*<CARBO> - PJAC(:,29,1)=+0.10149*TPK%K081(:)*PCONC(:,25) + PJAC(:,30,1)=+0.10149*TPK%K081(:)*PCONC(:,26) ! !OP2/H2O2=0.0 ! @@ -26934,6 +27514,8 @@ SUBROUTINE SUBJ5 ! !OP2/NH3=0.0 ! +!OP2/DMS=0.0 +! !OP2/SO2=0.0 ! !OP2/SULF=0.0 @@ -26941,13 +27523,13 @@ SUBROUTINE SUBJ5 !OP2/CO=0.0 ! !OP2/OH=-K069*<OP2> - PJAC(:,29,14)=-TPK%K069(:)*PCONC(:,29) + PJAC(:,30,15)=-TPK%K069(:)*PCONC(:,30) ! !OP2/HO2=+1.00524*K098*<ALKAP>+1.00524*K099*<ALKEP>+1.00524*K0100*<BIOP>+1.0052 !4*K0101*<AROP>+0.80904*K0102*<CARBOP>+1.00524*K126*<XO2> - PJAC(:,29,15)=+1.00524*TPK%K098(:)*PCONC(:,33)+1.00524*TPK%K099(:)*PCONC(:,34)& -&+1.00524*TPK%K0100(:)*PCONC(:,35)+1.00524*TPK%K0101(:)*PCONC(:,38)+0.80904*TPK& -&%K0102(:)*PCONC(:,39)+1.00524*TPK%K126(:)*PCONC(:,41) + PJAC(:,30,16)=+1.00524*TPK%K098(:)*PCONC(:,34)+1.00524*TPK%K099(:)*PCONC(:,35)& +&+1.00524*TPK%K0100(:)*PCONC(:,36)+1.00524*TPK%K0101(:)*PCONC(:,39)+0.80904*TPK& +&%K0102(:)*PCONC(:,40)+1.00524*TPK%K126(:)*PCONC(:,42) ! !OP2/CH4=0.0 ! @@ -26968,7 +27550,7 @@ SUBROUTINE SUBJ5 !OP2/KET=0.0 ! !OP2/CARBO=+0.10149*K081*<O3> - PJAC(:,29,25)=+0.10149*TPK%K081(:)*PCONC(:,1) + PJAC(:,30,26)=+0.10149*TPK%K081(:)*PCONC(:,1) ! !OP2/ONIT=0.0 ! @@ -26977,7 +27559,7 @@ SUBROUTINE SUBJ5 !OP2/OP1=0.0 ! !OP2/OP2=-K014-K069*<OH> - PJAC(:,29,29)=-TPK%K014(:)-TPK%K069(:)*PCONC(:,14) + PJAC(:,30,30)=-TPK%K014(:)-TPK%K069(:)*PCONC(:,15) ! !OP2/ORA1=0.0 ! @@ -26986,33 +27568,41 @@ SUBROUTINE SUBJ5 !OP2/MO2=0.0 ! !OP2/ALKAP=+1.00524*K098*<HO2> - PJAC(:,29,33)=+1.00524*TPK%K098(:)*PCONC(:,15) + PJAC(:,30,34)=+1.00524*TPK%K098(:)*PCONC(:,16) ! !OP2/ALKEP=+1.00524*K099*<HO2> - PJAC(:,29,34)=+1.00524*TPK%K099(:)*PCONC(:,15) + PJAC(:,30,35)=+1.00524*TPK%K099(:)*PCONC(:,16) ! !OP2/BIOP=+1.00524*K0100*<HO2> - PJAC(:,29,35)=+1.00524*TPK%K0100(:)*PCONC(:,15) + PJAC(:,30,36)=+1.00524*TPK%K0100(:)*PCONC(:,16) ! !OP2/PHO=0.0 ! !OP2/ADD=0.0 ! !OP2/AROP=+1.00524*K0101*<HO2> - PJAC(:,29,38)=+1.00524*TPK%K0101(:)*PCONC(:,15) + PJAC(:,30,39)=+1.00524*TPK%K0101(:)*PCONC(:,16) ! !OP2/CARBOP=+0.80904*K0102*<HO2> - PJAC(:,29,39)=+0.80904*TPK%K0102(:)*PCONC(:,15) + PJAC(:,30,40)=+0.80904*TPK%K0102(:)*PCONC(:,16) ! !OP2/OLN=0.0 ! !OP2/XO2=+1.00524*K126*<HO2> - PJAC(:,29,41)=+1.00524*TPK%K126(:)*PCONC(:,15) + PJAC(:,30,42)=+1.00524*TPK%K126(:)*PCONC(:,16) +! +RETURN +END SUBROUTINE SUBJ5 +! +SUBROUTINE SUBJ6 +! +!Indices 31 a 35 +! ! !ORA1/O3=+0.15343*K079*<ALKE>+0.15000*K080*<BIO>+0.10788*K081*<CARBO>+0.11*K082 !*<PAN> - PJAC(:,30,1)=+0.15343*TPK%K079(:)*PCONC(:,19)+0.15000*TPK%K080(:)*PCONC(:,20)+& -&0.10788*TPK%K081(:)*PCONC(:,25)+0.11*TPK%K082(:)*PCONC(:,27) + PJAC(:,31,1)=+0.15343*TPK%K079(:)*PCONC(:,20)+0.15000*TPK%K080(:)*PCONC(:,21)+& +&0.10788*TPK%K081(:)*PCONC(:,26)+0.11*TPK%K082(:)*PCONC(:,28) ! !ORA1/H2O2=0.0 ! @@ -27032,6 +27622,8 @@ SUBROUTINE SUBJ5 ! !ORA1/NH3=0.0 ! +!ORA1/DMS=0.0 +! !ORA1/SO2=0.0 ! !ORA1/SULF=0.0 @@ -27039,7 +27631,7 @@ SUBROUTINE SUBJ5 !ORA1/CO=0.0 ! !ORA1/OH=+0.00878*K058*<ALKA>-K066*<ORA1> - PJAC(:,30,14)=+0.00878*TPK%K058(:)*PCONC(:,18)-TPK%K066(:)*PCONC(:,30) + PJAC(:,31,15)=+0.00878*TPK%K058(:)*PCONC(:,19)-TPK%K066(:)*PCONC(:,31) ! !ORA1/HO2=0.0 ! @@ -27048,13 +27640,13 @@ SUBROUTINE SUBJ5 !ORA1/ETH=0.0 ! !ORA1/ALKA=+0.00878*K058*<OH> - PJAC(:,30,18)=+0.00878*TPK%K058(:)*PCONC(:,14) + PJAC(:,31,19)=+0.00878*TPK%K058(:)*PCONC(:,15) ! !ORA1/ALKE=+0.15343*K079*<O3> - PJAC(:,30,19)=+0.15343*TPK%K079(:)*PCONC(:,1) + PJAC(:,31,20)=+0.15343*TPK%K079(:)*PCONC(:,1) ! !ORA1/BIO=+0.15000*K080*<O3> - PJAC(:,30,20)=+0.15000*TPK%K080(:)*PCONC(:,1) + PJAC(:,31,21)=+0.15000*TPK%K080(:)*PCONC(:,1) ! !ORA1/ARO=0.0 ! @@ -27065,19 +27657,19 @@ SUBROUTINE SUBJ5 !ORA1/KET=0.0 ! !ORA1/CARBO=+0.10788*K081*<O3> - PJAC(:,30,25)=+0.10788*TPK%K081(:)*PCONC(:,1) + PJAC(:,31,26)=+0.10788*TPK%K081(:)*PCONC(:,1) ! !ORA1/ONIT=0.0 ! !ORA1/PAN=+0.11*K082*<O3> - PJAC(:,30,27)=+0.11*TPK%K082(:)*PCONC(:,1) + PJAC(:,31,28)=+0.11*TPK%K082(:)*PCONC(:,1) ! !ORA1/OP1=0.0 ! !ORA1/OP2=0.0 ! !ORA1/ORA1=-K066*<OH> - PJAC(:,30,30)=-TPK%K066(:)*PCONC(:,14) + PJAC(:,31,31)=-TPK%K066(:)*PCONC(:,15) ! !ORA1/ORA2=0.0 ! @@ -27101,17 +27693,9 @@ SUBROUTINE SUBJ5 ! !ORA1/XO2=0.0 ! -RETURN -END SUBROUTINE SUBJ5 -! -SUBROUTINE SUBJ6 -! -!Indices 31 a 35 -! -! !ORA2/O3=+0.08143*K079*<ALKE>+0.00000*K080*<BIO>+0.20595*K081*<CARBO> - PJAC(:,31,1)=+0.08143*TPK%K079(:)*PCONC(:,19)+0.00000*TPK%K080(:)*PCONC(:,20)+& -&0.20595*TPK%K081(:)*PCONC(:,25) + PJAC(:,32,1)=+0.08143*TPK%K079(:)*PCONC(:,20)+0.00000*TPK%K080(:)*PCONC(:,21)+& +&0.20595*TPK%K081(:)*PCONC(:,26) ! !ORA2/H2O2=0.0 ! @@ -27131,6 +27715,8 @@ SUBROUTINE SUBJ6 ! !ORA2/NH3=0.0 ! +!ORA2/DMS=0.0 +! !ORA2/SO2=0.0 ! !ORA2/SULF=0.0 @@ -27138,10 +27724,10 @@ SUBROUTINE SUBJ6 !ORA2/CO=0.0 ! !ORA2/OH=-K067*<ORA2> - PJAC(:,31,14)=-TPK%K067(:)*PCONC(:,31) + PJAC(:,32,15)=-TPK%K067(:)*PCONC(:,32) ! !ORA2/HO2=+0.17307*K0102*<CARBOP> - PJAC(:,31,15)=+0.17307*TPK%K0102(:)*PCONC(:,39) + PJAC(:,32,16)=+0.17307*TPK%K0102(:)*PCONC(:,40) ! !ORA2/CH4=0.0 ! @@ -27150,10 +27736,10 @@ SUBROUTINE SUBJ6 !ORA2/ALKA=0.0 ! !ORA2/ALKE=+0.08143*K079*<O3> - PJAC(:,31,19)=+0.08143*TPK%K079(:)*PCONC(:,1) + PJAC(:,32,20)=+0.08143*TPK%K079(:)*PCONC(:,1) ! !ORA2/BIO=+0.00000*K080*<O3> - PJAC(:,31,20)=+0.00000*TPK%K080(:)*PCONC(:,1) + PJAC(:,32,21)=+0.00000*TPK%K080(:)*PCONC(:,1) ! !ORA2/ARO=0.0 ! @@ -27164,7 +27750,7 @@ SUBROUTINE SUBJ6 !ORA2/KET=0.0 ! !ORA2/CARBO=+0.20595*K081*<O3> - PJAC(:,31,25)=+0.20595*TPK%K081(:)*PCONC(:,1) + PJAC(:,32,26)=+0.20595*TPK%K081(:)*PCONC(:,1) ! !ORA2/ONIT=0.0 ! @@ -27177,19 +27763,19 @@ SUBROUTINE SUBJ6 !ORA2/ORA1=0.0 ! !ORA2/ORA2=-K067*<OH> - PJAC(:,31,31)=-TPK%K067(:)*PCONC(:,14) + PJAC(:,32,32)=-TPK%K067(:)*PCONC(:,15) ! !ORA2/MO2=+0.13684*K109*<CARBOP> - PJAC(:,31,32)=+0.13684*TPK%K109(:)*PCONC(:,39) + PJAC(:,32,33)=+0.13684*TPK%K109(:)*PCONC(:,40) ! !ORA2/ALKAP=+0.49810*K111*<CARBOP> - PJAC(:,31,33)=+0.49810*TPK%K111(:)*PCONC(:,39) + PJAC(:,32,34)=+0.49810*TPK%K111(:)*PCONC(:,40) ! !ORA2/ALKEP=+0.49922*K112*<CARBOP> - PJAC(:,31,34)=+0.49922*TPK%K112(:)*PCONC(:,39) + PJAC(:,32,35)=+0.49922*TPK%K112(:)*PCONC(:,40) ! !ORA2/BIOP=+0.49400*K113*<CARBOP> - PJAC(:,31,35)=+0.49400*TPK%K113(:)*PCONC(:,39) + PJAC(:,32,36)=+0.49400*TPK%K113(:)*PCONC(:,40) ! !ORA2/PHO=0.0 ! @@ -27200,30 +27786,30 @@ SUBROUTINE SUBJ6 !ORA2/CARBOP=+0.17307*K0102*<HO2>+0.13684*K109*<MO2>+0.49810*K111*<ALKAP>+0.499 !22*K112*<ALKEP>+0.49400*K113*<BIOP>+0.09955*K115*<CARBOP>+0.09955*K115*<CARBOP !>+0.48963*K116*<OLN> - PJAC(:,31,39)=+0.17307*TPK%K0102(:)*PCONC(:,15)+0.13684*TPK%K109(:)*PCONC(:,32& -&)+0.49810*TPK%K111(:)*PCONC(:,33)+0.49922*TPK%K112(:)*PCONC(:,34)+0.49400*TPK%& -&K113(:)*PCONC(:,35)+0.09955*TPK%K115(:)*PCONC(:,39)+0.09955*TPK%K115(:)*PCONC(& -&:,39)+0.48963*TPK%K116(:)*PCONC(:,40) + PJAC(:,32,40)=+0.17307*TPK%K0102(:)*PCONC(:,16)+0.13684*TPK%K109(:)*PCONC(:,33& +&)+0.49810*TPK%K111(:)*PCONC(:,34)+0.49922*TPK%K112(:)*PCONC(:,35)+0.49400*TPK%& +&K113(:)*PCONC(:,36)+0.09955*TPK%K115(:)*PCONC(:,40)+0.09955*TPK%K115(:)*PCONC(& +&:,40)+0.48963*TPK%K116(:)*PCONC(:,41) ! !ORA2/OLN=+0.48963*K116*<CARBOP> - PJAC(:,31,40)=+0.48963*TPK%K116(:)*PCONC(:,39) + PJAC(:,32,41)=+0.48963*TPK%K116(:)*PCONC(:,40) ! !ORA2/XO2=0.0 ! !MO2/O3=+0.13966*K079*<ALKE>+0.03000*K080*<BIO> - PJAC(:,32,1)=+0.13966*TPK%K079(:)*PCONC(:,19)+0.03000*TPK%K080(:)*PCONC(:,20) + PJAC(:,33,1)=+0.13966*TPK%K079(:)*PCONC(:,20)+0.03000*TPK%K080(:)*PCONC(:,21) ! !MO2/H2O2=0.0 ! !MO2/NO=-K090*<MO2>+0.09016*K091*<ALKAP>+0.78134*K095*<CARBOP> - PJAC(:,32,3)=-TPK%K090(:)*PCONC(:,32)+0.09016*TPK%K091(:)*PCONC(:,33)+0.78134*& -&TPK%K095(:)*PCONC(:,39) + PJAC(:,33,3)=-TPK%K090(:)*PCONC(:,33)+0.09016*TPK%K091(:)*PCONC(:,34)+0.78134*& +&TPK%K095(:)*PCONC(:,40) ! !MO2/NO2=0.0 ! !MO2/NO3=-K119*<MO2>+0.09731*K120*<ALKAP>+0.91910*K124*<CARBOP> - PJAC(:,32,5)=-TPK%K119(:)*PCONC(:,32)+0.09731*TPK%K120(:)*PCONC(:,33)+0.91910*& -&TPK%K124(:)*PCONC(:,39) + PJAC(:,33,5)=-TPK%K119(:)*PCONC(:,33)+0.09731*TPK%K120(:)*PCONC(:,34)+0.91910*& +&TPK%K124(:)*PCONC(:,40) ! !MO2/N2O5=0.0 ! @@ -27235,6 +27821,8 @@ SUBROUTINE SUBJ6 ! !MO2/NH3=0.0 ! +!MO2/DMS=0.0 +! !MO2/SO2=0.0 ! !MO2/SULF=0.0 @@ -27242,30 +27830,30 @@ SUBROUTINE SUBJ6 !MO2/CO=0.0 ! !MO2/OH=+K056*<CH4>+0.65*K068*<OP1> - PJAC(:,32,14)=+TPK%K056(:)*PCONC(:,16)+0.65*TPK%K068(:)*PCONC(:,28) + PJAC(:,33,15)=+TPK%K056(:)*PCONC(:,17)+0.65*TPK%K068(:)*PCONC(:,29) ! !MO2/HO2=-K097*<MO2> - PJAC(:,32,15)=-TPK%K097(:)*PCONC(:,32) + PJAC(:,33,16)=-TPK%K097(:)*PCONC(:,33) ! !MO2/CH4=+K056*<OH> - PJAC(:,32,16)=+TPK%K056(:)*PCONC(:,14) + PJAC(:,33,17)=+TPK%K056(:)*PCONC(:,15) ! !MO2/ETH=0.0 ! !MO2/ALKA=0.0 ! !MO2/ALKE=+0.13966*K079*<O3> - PJAC(:,32,19)=+0.13966*TPK%K079(:)*PCONC(:,1) + PJAC(:,33,20)=+0.13966*TPK%K079(:)*PCONC(:,1) ! !MO2/BIO=+0.03000*K080*<O3> - PJAC(:,32,20)=+0.03000*TPK%K080(:)*PCONC(:,1) + PJAC(:,33,21)=+0.03000*TPK%K080(:)*PCONC(:,1) ! !MO2/ARO=0.0 ! !MO2/HCHO=0.0 ! !MO2/ALD=+K012 - PJAC(:,32,23)=+TPK%K012(:) + PJAC(:,33,24)=+TPK%K012(:) ! !MO2/KET=0.0 ! @@ -27276,10 +27864,10 @@ SUBROUTINE SUBJ6 !MO2/PAN=0.0 ! !MO2/OP1=+0.65*K068*<OH> - PJAC(:,32,28)=+0.65*TPK%K068(:)*PCONC(:,14) + PJAC(:,33,29)=+0.65*TPK%K068(:)*PCONC(:,15) ! !MO2/OP2=+0.03795*K014 - PJAC(:,32,29)=+0.03795*TPK%K014(:) + PJAC(:,33,30)=+0.03795*TPK%K014(:) ! !MO2/ORA1=0.0 ! @@ -27288,59 +27876,59 @@ SUBROUTINE SUBJ6 !MO2/MO2=-K090*<NO>-K097*<HO2>-K104*<MO2>-K104*<MO2>-K104*<MO2>-K104*<MO2>+0.01 !390*K105*<ALKAP>-K105*<ALKAP>-K106*<ALKEP>-K107*<BIOP>-K108*<AROP>+0.56031*K10 !9*<CARBOP>-K109*<CARBOP>-K110*<OLN>-K119*<NO3>-K127*<XO2> - PJAC(:,32,32)=-TPK%K090(:)*PCONC(:,3)-TPK%K097(:)*PCONC(:,15)-TPK%K104(:)*PCON& -&C(:,32)-TPK%K104(:)*PCONC(:,32)-TPK%K104(:)*PCONC(:,32)-TPK%K104(:)*PCONC(:,32& -&)+0.01390*TPK%K105(:)*PCONC(:,33)-TPK%K105(:)*PCONC(:,33)-TPK%K106(:)*PCONC(:,& -&34)-TPK%K107(:)*PCONC(:,35)-TPK%K108(:)*PCONC(:,38)+0.56031*TPK%K109(:)*PCONC(& -&:,39)-TPK%K109(:)*PCONC(:,39)-TPK%K110(:)*PCONC(:,40)-TPK%K119(:)*PCONC(:,5)-T& -&PK%K127(:)*PCONC(:,41) + PJAC(:,33,33)=-TPK%K090(:)*PCONC(:,3)-TPK%K097(:)*PCONC(:,16)-TPK%K104(:)*PCON& +&C(:,33)-TPK%K104(:)*PCONC(:,33)-TPK%K104(:)*PCONC(:,33)-TPK%K104(:)*PCONC(:,33& +&)+0.01390*TPK%K105(:)*PCONC(:,34)-TPK%K105(:)*PCONC(:,34)-TPK%K106(:)*PCONC(:,& +&35)-TPK%K107(:)*PCONC(:,36)-TPK%K108(:)*PCONC(:,39)+0.56031*TPK%K109(:)*PCONC(& +&:,40)-TPK%K109(:)*PCONC(:,40)-TPK%K110(:)*PCONC(:,41)-TPK%K119(:)*PCONC(:,5)-T& +&PK%K127(:)*PCONC(:,42) ! !MO2/ALKAP=+0.09016*K091*<NO>+0.01390*K105*<MO2>-K105*<MO2>+0.51480*K111*<CARBO !P>+0.09731*K120*<NO3> - PJAC(:,32,33)=+0.09016*TPK%K091(:)*PCONC(:,3)+0.01390*TPK%K105(:)*PCONC(:,32)-& -&TPK%K105(:)*PCONC(:,32)+0.51480*TPK%K111(:)*PCONC(:,39)+0.09731*TPK%K120(:)*PC& + PJAC(:,33,34)=+0.09016*TPK%K091(:)*PCONC(:,3)+0.01390*TPK%K105(:)*PCONC(:,33)-& +&TPK%K105(:)*PCONC(:,33)+0.51480*TPK%K111(:)*PCONC(:,40)+0.09731*TPK%K120(:)*PC& &ONC(:,5) ! !MO2/ALKEP=-K106*<MO2>+0.50078*K112*<CARBOP> - PJAC(:,32,34)=-TPK%K106(:)*PCONC(:,32)+0.50078*TPK%K112(:)*PCONC(:,39) + PJAC(:,33,35)=-TPK%K106(:)*PCONC(:,33)+0.50078*TPK%K112(:)*PCONC(:,40) ! !MO2/BIOP=-K107*<MO2>+0.50600*K113*<CARBOP> - PJAC(:,32,35)=-TPK%K107(:)*PCONC(:,32)+0.50600*TPK%K113(:)*PCONC(:,39) + PJAC(:,33,36)=-TPK%K107(:)*PCONC(:,33)+0.50600*TPK%K113(:)*PCONC(:,40) ! !MO2/PHO=0.0 ! !MO2/ADD=0.0 ! !MO2/AROP=-K108*<MO2>+K114*<CARBOP> - PJAC(:,32,38)=-TPK%K108(:)*PCONC(:,32)+TPK%K114(:)*PCONC(:,39) + PJAC(:,33,39)=-TPK%K108(:)*PCONC(:,33)+TPK%K114(:)*PCONC(:,40) ! !MO2/CARBOP=+0.78134*K095*<NO>+0.56031*K109*<MO2>-K109*<MO2>+0.51480*K111*<ALKA !P>+0.50078*K112*<ALKEP>+0.50600*K113*<BIOP>+K114*<AROP>+1.66702*K115*<CARBOP>+ !1.66702*K115*<CARBOP>+0.51037*K116*<OLN>+0.91910*K124*<NO3>+K128*<XO2> - PJAC(:,32,39)=+0.78134*TPK%K095(:)*PCONC(:,3)+0.56031*TPK%K109(:)*PCONC(:,32)-& -&TPK%K109(:)*PCONC(:,32)+0.51480*TPK%K111(:)*PCONC(:,33)+0.50078*TPK%K112(:)*PC& -&ONC(:,34)+0.50600*TPK%K113(:)*PCONC(:,35)+TPK%K114(:)*PCONC(:,38)+1.66702*TPK%& -&K115(:)*PCONC(:,39)+1.66702*TPK%K115(:)*PCONC(:,39)+0.51037*TPK%K116(:)*PCONC(& -&:,40)+0.91910*TPK%K124(:)*PCONC(:,5)+TPK%K128(:)*PCONC(:,41) + PJAC(:,33,40)=+0.78134*TPK%K095(:)*PCONC(:,3)+0.56031*TPK%K109(:)*PCONC(:,33)-& +&TPK%K109(:)*PCONC(:,33)+0.51480*TPK%K111(:)*PCONC(:,34)+0.50078*TPK%K112(:)*PC& +&ONC(:,35)+0.50600*TPK%K113(:)*PCONC(:,36)+TPK%K114(:)*PCONC(:,39)+1.66702*TPK%& +&K115(:)*PCONC(:,40)+1.66702*TPK%K115(:)*PCONC(:,40)+0.51037*TPK%K116(:)*PCONC(& +&:,41)+0.91910*TPK%K124(:)*PCONC(:,5)+TPK%K128(:)*PCONC(:,42) ! !MO2/OLN=-K110*<MO2>+0.51037*K116*<CARBOP> - PJAC(:,32,40)=-TPK%K110(:)*PCONC(:,32)+0.51037*TPK%K116(:)*PCONC(:,39) + PJAC(:,33,41)=-TPK%K110(:)*PCONC(:,33)+0.51037*TPK%K116(:)*PCONC(:,40) ! !MO2/XO2=-K127*<MO2>+K128*<CARBOP> - PJAC(:,32,41)=-TPK%K127(:)*PCONC(:,32)+TPK%K128(:)*PCONC(:,39) + PJAC(:,33,42)=-TPK%K127(:)*PCONC(:,33)+TPK%K128(:)*PCONC(:,40) ! !ALKAP/O3=+0.09815*K079*<ALKE>+0.00000*K080*<BIO> - PJAC(:,33,1)=+0.09815*TPK%K079(:)*PCONC(:,19)+0.00000*TPK%K080(:)*PCONC(:,20) + PJAC(:,34,1)=+0.09815*TPK%K079(:)*PCONC(:,20)+0.00000*TPK%K080(:)*PCONC(:,21) ! !ALKAP/H2O2=0.0 ! !ALKAP/NO=+0.08187*K091*<ALKAP>-K091*<ALKAP> - PJAC(:,33,3)=+0.08187*TPK%K091(:)*PCONC(:,33)-TPK%K091(:)*PCONC(:,33) + PJAC(:,34,3)=+0.08187*TPK%K091(:)*PCONC(:,34)-TPK%K091(:)*PCONC(:,34) ! !ALKAP/NO2=0.0 ! !ALKAP/NO3=+0.08994*K120*<ALKAP>-K120*<ALKAP> - PJAC(:,33,5)=+0.08994*TPK%K120(:)*PCONC(:,33)-TPK%K120(:)*PCONC(:,33) + PJAC(:,34,5)=+0.08994*TPK%K120(:)*PCONC(:,34)-TPK%K120(:)*PCONC(:,34) ! !ALKAP/N2O5=0.0 ! @@ -27352,6 +27940,8 @@ SUBROUTINE SUBJ6 ! !ALKAP/NH3=0.0 ! +!ALKAP/DMS=0.0 +! !ALKAP/SO2=0.0 ! !ALKAP/SULF=0.0 @@ -27360,25 +27950,25 @@ SUBROUTINE SUBJ6 ! !ALKAP/OH=+K057*<ETH>+0.87811*K058*<ALKA>+0.40341*K069*<OP2>+1.00000*K071*<ONIT !> - PJAC(:,33,14)=+TPK%K057(:)*PCONC(:,17)+0.87811*TPK%K058(:)*PCONC(:,18)+0.40341& -&*TPK%K069(:)*PCONC(:,29)+1.00000*TPK%K071(:)*PCONC(:,26) + PJAC(:,34,15)=+TPK%K057(:)*PCONC(:,18)+0.87811*TPK%K058(:)*PCONC(:,19)+0.40341& +&*TPK%K069(:)*PCONC(:,30)+1.00000*TPK%K071(:)*PCONC(:,27) ! !ALKAP/HO2=-K098*<ALKAP> - PJAC(:,33,15)=-TPK%K098(:)*PCONC(:,33) + PJAC(:,34,16)=-TPK%K098(:)*PCONC(:,34) ! !ALKAP/CH4=0.0 ! !ALKAP/ETH=+K057*<OH> - PJAC(:,33,17)=+TPK%K057(:)*PCONC(:,14) + PJAC(:,34,18)=+TPK%K057(:)*PCONC(:,15) ! !ALKAP/ALKA=+0.87811*K058*<OH> - PJAC(:,33,18)=+0.87811*TPK%K058(:)*PCONC(:,14) + PJAC(:,34,19)=+0.87811*TPK%K058(:)*PCONC(:,15) ! !ALKAP/ALKE=+0.09815*K079*<O3> - PJAC(:,33,19)=+0.09815*TPK%K079(:)*PCONC(:,1) + PJAC(:,34,20)=+0.09815*TPK%K079(:)*PCONC(:,1) ! !ALKAP/BIO=+0.00000*K080*<O3> - PJAC(:,33,20)=+0.00000*TPK%K080(:)*PCONC(:,1) + PJAC(:,34,21)=+0.00000*TPK%K080(:)*PCONC(:,1) ! !ALKAP/ARO=0.0 ! @@ -27387,32 +27977,32 @@ SUBROUTINE SUBJ6 !ALKAP/ALD=0.0 ! !ALKAP/KET=+1.00000*K015 - PJAC(:,33,24)=+1.00000*TPK%K015(:) + PJAC(:,34,25)=+1.00000*TPK%K015(:) ! !ALKAP/CARBO=0.0 ! !ALKAP/ONIT=+1.00000*K071*<OH> - PJAC(:,33,26)=+1.00000*TPK%K071(:)*PCONC(:,14) + PJAC(:,34,27)=+1.00000*TPK%K071(:)*PCONC(:,15) ! !ALKAP/PAN=0.0 ! !ALKAP/OP1=0.0 ! !ALKAP/OP2=+0.40341*K069*<OH> - PJAC(:,33,29)=+0.40341*TPK%K069(:)*PCONC(:,14) + PJAC(:,34,30)=+0.40341*TPK%K069(:)*PCONC(:,15) ! !ALKAP/ORA1=0.0 ! !ALKAP/ORA2=0.0 ! !ALKAP/MO2=+0.00385*K105*<ALKAP>-K105*<ALKAP> - PJAC(:,33,32)=+0.00385*TPK%K105(:)*PCONC(:,33)-TPK%K105(:)*PCONC(:,33) + PJAC(:,34,33)=+0.00385*TPK%K105(:)*PCONC(:,34)-TPK%K105(:)*PCONC(:,34) ! !ALKAP/ALKAP=+0.08187*K091*<NO>-K091*<NO>-K098*<HO2>+0.00385*K105*<MO2>-K105*<M !O2>+0.00828*K111*<CARBOP>-K111*<CARBOP>+0.08994*K120*<NO3>-K120*<NO3> - PJAC(:,33,33)=+0.08187*TPK%K091(:)*PCONC(:,3)-TPK%K091(:)*PCONC(:,3)-TPK%K098(& -&:)*PCONC(:,15)+0.00385*TPK%K105(:)*PCONC(:,32)-TPK%K105(:)*PCONC(:,32)+0.00828& -&*TPK%K111(:)*PCONC(:,39)-TPK%K111(:)*PCONC(:,39)+0.08994*TPK%K120(:)*PCONC(:,5& + PJAC(:,34,34)=+0.08187*TPK%K091(:)*PCONC(:,3)-TPK%K091(:)*PCONC(:,3)-TPK%K098(& +&:)*PCONC(:,16)+0.00385*TPK%K105(:)*PCONC(:,33)-TPK%K105(:)*PCONC(:,33)+0.00828& +&*TPK%K111(:)*PCONC(:,40)-TPK%K111(:)*PCONC(:,40)+0.08994*TPK%K120(:)*PCONC(:,5& &)-TPK%K120(:)*PCONC(:,5) ! !ALKAP/ALKEP=0.0 @@ -27426,7 +28016,7 @@ SUBROUTINE SUBJ6 !ALKAP/AROP=0.0 ! !ALKAP/CARBOP=+0.00828*K111*<ALKAP>-K111*<ALKAP> - PJAC(:,33,39)=+0.00828*TPK%K111(:)*PCONC(:,33)-TPK%K111(:)*PCONC(:,33) + PJAC(:,34,40)=+0.00828*TPK%K111(:)*PCONC(:,34)-TPK%K111(:)*PCONC(:,34) ! !ALKAP/OLN=0.0 ! @@ -27437,12 +28027,12 @@ SUBROUTINE SUBJ6 !ALKEP/H2O2=0.0 ! !ALKEP/NO=-K092*<ALKEP> - PJAC(:,34,3)=-TPK%K092(:)*PCONC(:,34) + PJAC(:,35,3)=-TPK%K092(:)*PCONC(:,35) ! !ALKEP/NO2=0.0 ! !ALKEP/NO3=-K121*<ALKEP> - PJAC(:,34,5)=-TPK%K121(:)*PCONC(:,34) + PJAC(:,35,5)=-TPK%K121(:)*PCONC(:,35) ! !ALKEP/N2O5=0.0 ! @@ -27454,6 +28044,8 @@ SUBROUTINE SUBJ6 ! !ALKEP/NH3=0.0 ! +!ALKEP/DMS=0.0 +! !ALKEP/SO2=0.0 ! !ALKEP/SULF=0.0 @@ -27461,10 +28053,10 @@ SUBROUTINE SUBJ6 !ALKEP/CO=0.0 ! !ALKEP/OH=+1.02529*K059*<ALKE> - PJAC(:,34,14)=+1.02529*TPK%K059(:)*PCONC(:,19) + PJAC(:,35,15)=+1.02529*TPK%K059(:)*PCONC(:,20) ! !ALKEP/HO2=-K099*<ALKEP> - PJAC(:,34,15)=-TPK%K099(:)*PCONC(:,34) + PJAC(:,35,16)=-TPK%K099(:)*PCONC(:,35) ! !ALKEP/CH4=0.0 ! @@ -27473,7 +28065,7 @@ SUBROUTINE SUBJ6 !ALKEP/ALKA=0.0 ! !ALKEP/ALKE=+1.02529*K059*<OH> - PJAC(:,34,19)=+1.02529*TPK%K059(:)*PCONC(:,14) + PJAC(:,35,20)=+1.02529*TPK%K059(:)*PCONC(:,15) ! !ALKEP/BIO=0.0 ! @@ -27500,13 +28092,13 @@ SUBROUTINE SUBJ6 !ALKEP/ORA2=0.0 ! !ALKEP/MO2=-K106*<ALKEP> - PJAC(:,34,32)=-TPK%K106(:)*PCONC(:,34) + PJAC(:,35,33)=-TPK%K106(:)*PCONC(:,35) ! !ALKEP/ALKAP=0.0 ! !ALKEP/ALKEP=-K092*<NO>-K099*<HO2>-K106*<MO2>-K112*<CARBOP>-K121*<NO3> - PJAC(:,34,34)=-TPK%K092(:)*PCONC(:,3)-TPK%K099(:)*PCONC(:,15)-TPK%K106(:)*PCON& -&C(:,32)-TPK%K112(:)*PCONC(:,39)-TPK%K121(:)*PCONC(:,5) + PJAC(:,35,35)=-TPK%K092(:)*PCONC(:,3)-TPK%K099(:)*PCONC(:,16)-TPK%K106(:)*PCON& +&C(:,33)-TPK%K112(:)*PCONC(:,40)-TPK%K121(:)*PCONC(:,5) ! !ALKEP/BIOP=0.0 ! @@ -27517,23 +28109,31 @@ SUBROUTINE SUBJ6 !ALKEP/AROP=0.0 ! !ALKEP/CARBOP=-K112*<ALKEP> - PJAC(:,34,39)=-TPK%K112(:)*PCONC(:,34) + PJAC(:,35,40)=-TPK%K112(:)*PCONC(:,35) ! !ALKEP/OLN=0.0 ! !ALKEP/XO2=0.0 ! +RETURN +END SUBROUTINE SUBJ6 +! +SUBROUTINE SUBJ7 +! +!Indices 36 a 40 +! +! !BIOP/O3=0.0 ! !BIOP/H2O2=0.0 ! !BIOP/NO=-K093*<BIOP> - PJAC(:,35,3)=-TPK%K093(:)*PCONC(:,35) + PJAC(:,36,3)=-TPK%K093(:)*PCONC(:,36) ! !BIOP/NO2=0.0 ! !BIOP/NO3=-K122*<BIOP> - PJAC(:,35,5)=-TPK%K122(:)*PCONC(:,35) + PJAC(:,36,5)=-TPK%K122(:)*PCONC(:,36) ! !BIOP/N2O5=0.0 ! @@ -27545,6 +28145,8 @@ SUBROUTINE SUBJ6 ! !BIOP/NH3=0.0 ! +!BIOP/DMS=0.0 +! !BIOP/SO2=0.0 ! !BIOP/SULF=0.0 @@ -27552,10 +28154,10 @@ SUBROUTINE SUBJ6 !BIOP/CO=0.0 ! !BIOP/OH=+0.00000*K059*<ALKE>+1.00000*K060*<BIO> - PJAC(:,35,14)=+0.00000*TPK%K059(:)*PCONC(:,19)+1.00000*TPK%K060(:)*PCONC(:,20) + PJAC(:,36,15)=+0.00000*TPK%K059(:)*PCONC(:,20)+1.00000*TPK%K060(:)*PCONC(:,21) ! !BIOP/HO2=-K0100*<BIOP> - PJAC(:,35,15)=-TPK%K0100(:)*PCONC(:,35) + PJAC(:,36,16)=-TPK%K0100(:)*PCONC(:,36) ! !BIOP/CH4=0.0 ! @@ -27564,10 +28166,10 @@ SUBROUTINE SUBJ6 !BIOP/ALKA=0.0 ! !BIOP/ALKE=+0.00000*K059*<OH> - PJAC(:,35,19)=+0.00000*TPK%K059(:)*PCONC(:,14) + PJAC(:,36,20)=+0.00000*TPK%K059(:)*PCONC(:,15) ! !BIOP/BIO=+1.00000*K060*<OH> - PJAC(:,35,20)=+1.00000*TPK%K060(:)*PCONC(:,14) + PJAC(:,36,21)=+1.00000*TPK%K060(:)*PCONC(:,15) ! !BIOP/ARO=0.0 ! @@ -27592,15 +28194,15 @@ SUBROUTINE SUBJ6 !BIOP/ORA2=0.0 ! !BIOP/MO2=-K107*<BIOP> - PJAC(:,35,32)=-TPK%K107(:)*PCONC(:,35) + PJAC(:,36,33)=-TPK%K107(:)*PCONC(:,36) ! !BIOP/ALKAP=0.0 ! !BIOP/ALKEP=0.0 ! !BIOP/BIOP=-K093*<NO>-K0100*<HO2>-K107*<MO2>-K113*<CARBOP>-K122*<NO3> - PJAC(:,35,35)=-TPK%K093(:)*PCONC(:,3)-TPK%K0100(:)*PCONC(:,15)-TPK%K107(:)*PCO& -&NC(:,32)-TPK%K113(:)*PCONC(:,39)-TPK%K122(:)*PCONC(:,5) + PJAC(:,36,36)=-TPK%K093(:)*PCONC(:,3)-TPK%K0100(:)*PCONC(:,16)-TPK%K107(:)*PCO& +&NC(:,33)-TPK%K113(:)*PCONC(:,40)-TPK%K122(:)*PCONC(:,5) ! !BIOP/PHO=0.0 ! @@ -27609,20 +28211,12 @@ SUBROUTINE SUBJ6 !BIOP/AROP=0.0 ! !BIOP/CARBOP=-K113*<BIOP> - PJAC(:,35,39)=-TPK%K113(:)*PCONC(:,35) + PJAC(:,36,40)=-TPK%K113(:)*PCONC(:,36) ! !BIOP/OLN=0.0 ! !BIOP/XO2=0.0 ! -RETURN -END SUBROUTINE SUBJ6 -! -SUBROUTINE SUBJ7 -! -!Indices 36 a 40 -! -! !PHO/O3=0.0 ! !PHO/H2O2=0.0 @@ -27630,10 +28224,10 @@ SUBROUTINE SUBJ7 !PHO/NO=0.0 ! !PHO/NO2=-K083*<PHO> - PJAC(:,36,4)=-TPK%K083(:)*PCONC(:,36) + PJAC(:,37,4)=-TPK%K083(:)*PCONC(:,37) ! !PHO/NO3=+K075*<ARO> - PJAC(:,36,5)=+TPK%K075(:)*PCONC(:,21) + PJAC(:,37,5)=+TPK%K075(:)*PCONC(:,22) ! !PHO/N2O5=0.0 ! @@ -27645,6 +28239,8 @@ SUBROUTINE SUBJ7 ! !PHO/NH3=0.0 ! +!PHO/DMS=0.0 +! !PHO/SO2=0.0 ! !PHO/SULF=0.0 @@ -27652,10 +28248,10 @@ SUBROUTINE SUBJ7 !PHO/CO=0.0 ! !PHO/OH=+0.00276*K061*<ARO> - PJAC(:,36,14)=+0.00276*TPK%K061(:)*PCONC(:,21) + PJAC(:,37,15)=+0.00276*TPK%K061(:)*PCONC(:,22) ! !PHO/HO2=-K084*<PHO> - PJAC(:,36,15)=-TPK%K084(:)*PCONC(:,36) + PJAC(:,37,16)=-TPK%K084(:)*PCONC(:,37) ! !PHO/CH4=0.0 ! @@ -27668,7 +28264,7 @@ SUBROUTINE SUBJ7 !PHO/BIO=0.0 ! !PHO/ARO=+0.00276*K061*<OH>+K075*<NO3> - PJAC(:,36,21)=+0.00276*TPK%K061(:)*PCONC(:,14)+TPK%K075(:)*PCONC(:,5) + PJAC(:,37,22)=+0.00276*TPK%K061(:)*PCONC(:,15)+TPK%K075(:)*PCONC(:,5) ! !PHO/HCHO=0.0 ! @@ -27699,7 +28295,7 @@ SUBROUTINE SUBJ7 !PHO/BIOP=0.0 ! !PHO/PHO=-K083*<NO2>-K084*<HO2> - PJAC(:,36,36)=-TPK%K083(:)*PCONC(:,4)-TPK%K084(:)*PCONC(:,15) + PJAC(:,37,37)=-TPK%K083(:)*PCONC(:,4)-TPK%K084(:)*PCONC(:,16) ! !PHO/ADD=0.0 ! @@ -27712,14 +28308,14 @@ SUBROUTINE SUBJ7 !PHO/XO2=0.0 ! !ADD/O3=-K087*<ADD> - PJAC(:,37,1)=-TPK%K087(:)*PCONC(:,37) + PJAC(:,38,1)=-TPK%K087(:)*PCONC(:,38) ! !ADD/H2O2=0.0 ! !ADD/NO=0.0 ! !ADD/NO2=-K085*<ADD> - PJAC(:,37,4)=-TPK%K085(:)*PCONC(:,37) + PJAC(:,38,4)=-TPK%K085(:)*PCONC(:,38) ! !ADD/NO3=0.0 ! @@ -27733,6 +28329,8 @@ SUBROUTINE SUBJ7 ! !ADD/NH3=0.0 ! +!ADD/DMS=0.0 +! !ADD/SO2=0.0 ! !ADD/SULF=0.0 @@ -27740,7 +28338,7 @@ SUBROUTINE SUBJ7 !ADD/CO=0.0 ! !ADD/OH=+0.93968*K061*<ARO> - PJAC(:,37,14)=+0.93968*TPK%K061(:)*PCONC(:,21) + PJAC(:,38,15)=+0.93968*TPK%K061(:)*PCONC(:,22) ! !ADD/HO2=0.0 ! @@ -27755,7 +28353,7 @@ SUBROUTINE SUBJ7 !ADD/BIO=0.0 ! !ADD/ARO=+0.93968*K061*<OH> - PJAC(:,37,21)=+0.93968*TPK%K061(:)*PCONC(:,14) + PJAC(:,38,22)=+0.93968*TPK%K061(:)*PCONC(:,15) ! !ADD/HCHO=0.0 ! @@ -27788,7 +28386,7 @@ SUBROUTINE SUBJ7 !ADD/PHO=0.0 ! !ADD/ADD=-K085*<NO2>-K086*<O2>-K087*<O3> - PJAC(:,37,37)=-TPK%K085(:)*PCONC(:,4)-TPK%K086(:)*TPK%O2(:)-TPK%K087(:)*PCONC(& + PJAC(:,38,38)=-TPK%K085(:)*PCONC(:,4)-TPK%K086(:)*TPK%O2(:)-TPK%K087(:)*PCONC(& &:,1) ! !ADD/AROP=0.0 @@ -27804,12 +28402,12 @@ SUBROUTINE SUBJ7 !AROP/H2O2=0.0 ! !AROP/NO=-K094*<AROP> - PJAC(:,38,3)=-TPK%K094(:)*PCONC(:,38) + PJAC(:,39,3)=-TPK%K094(:)*PCONC(:,39) ! !AROP/NO2=0.0 ! !AROP/NO3=-K123*<AROP> - PJAC(:,38,5)=-TPK%K123(:)*PCONC(:,38) + PJAC(:,39,5)=-TPK%K123(:)*PCONC(:,39) ! !AROP/N2O5=0.0 ! @@ -27821,6 +28419,8 @@ SUBROUTINE SUBJ7 ! !AROP/NH3=0.0 ! +!AROP/DMS=0.0 +! !AROP/SO2=0.0 ! !AROP/SULF=0.0 @@ -27830,7 +28430,7 @@ SUBROUTINE SUBJ7 !AROP/OH=0.0 ! !AROP/HO2=-K0101*<AROP> - PJAC(:,38,15)=-TPK%K0101(:)*PCONC(:,38) + PJAC(:,39,16)=-TPK%K0101(:)*PCONC(:,39) ! !AROP/CH4=0.0 ! @@ -27865,7 +28465,7 @@ SUBROUTINE SUBJ7 !AROP/ORA2=0.0 ! !AROP/MO2=-K108*<AROP> - PJAC(:,38,32)=-TPK%K108(:)*PCONC(:,38) + PJAC(:,39,33)=-TPK%K108(:)*PCONC(:,39) ! !AROP/ALKAP=0.0 ! @@ -27876,14 +28476,14 @@ SUBROUTINE SUBJ7 !AROP/PHO=0.0 ! !AROP/ADD=+0.98*K086*<O2> - PJAC(:,38,37)=+0.98*TPK%K086(:)*TPK%O2(:) + PJAC(:,39,38)=+0.98*TPK%K086(:)*TPK%O2(:) ! !AROP/AROP=-K094*<NO>-K0101*<HO2>-K108*<MO2>-K114*<CARBOP>-K123*<NO3> - PJAC(:,38,38)=-TPK%K094(:)*PCONC(:,3)-TPK%K0101(:)*PCONC(:,15)-TPK%K108(:)*PCO& -&NC(:,32)-TPK%K114(:)*PCONC(:,39)-TPK%K123(:)*PCONC(:,5) + PJAC(:,39,39)=-TPK%K094(:)*PCONC(:,3)-TPK%K0101(:)*PCONC(:,16)-TPK%K108(:)*PCO& +&NC(:,33)-TPK%K114(:)*PCONC(:,40)-TPK%K123(:)*PCONC(:,5) ! !AROP/CARBOP=-K114*<AROP> - PJAC(:,38,39)=-TPK%K114(:)*PCONC(:,38) + PJAC(:,39,40)=-TPK%K114(:)*PCONC(:,39) ! !AROP/OLN=0.0 ! @@ -27891,21 +28491,21 @@ SUBROUTINE SUBJ7 ! !CARBOP/O3=+0.05705*K079*<ALKE>+0.17000*K080*<BIO>+0.27460*K081*<CARBO>+0.70000 !*K082*<PAN> - PJAC(:,39,1)=+0.05705*TPK%K079(:)*PCONC(:,19)+0.17000*TPK%K080(:)*PCONC(:,20)+& -&0.27460*TPK%K081(:)*PCONC(:,25)+0.70000*TPK%K082(:)*PCONC(:,27) + PJAC(:,40,1)=+0.05705*TPK%K079(:)*PCONC(:,20)+0.17000*TPK%K080(:)*PCONC(:,21)+& +&0.27460*TPK%K081(:)*PCONC(:,26)+0.70000*TPK%K082(:)*PCONC(:,28) ! !CARBOP/H2O2=0.0 ! !CARBOP/NO=+0.09532*K095*<CARBOP>-K095*<CARBOP> - PJAC(:,39,3)=+0.09532*TPK%K095(:)*PCONC(:,39)-TPK%K095(:)*PCONC(:,39) + PJAC(:,40,3)=+0.09532*TPK%K095(:)*PCONC(:,40)-TPK%K095(:)*PCONC(:,40) ! !CARBOP/NO2=-K088*<CARBOP> - PJAC(:,39,4)=-TPK%K088(:)*PCONC(:,39) + PJAC(:,40,4)=-TPK%K088(:)*PCONC(:,40) ! !CARBOP/NO3=+1.00000*K073*<ALD>+0.38881*K074*<CARBO>+0.03175*K124*<CARBOP>-K124 !*<CARBOP> - PJAC(:,39,5)=+1.00000*TPK%K073(:)*PCONC(:,23)+0.38881*TPK%K074(:)*PCONC(:,25)+& -&0.03175*TPK%K124(:)*PCONC(:,39)-TPK%K124(:)*PCONC(:,39) + PJAC(:,40,5)=+1.00000*TPK%K073(:)*PCONC(:,24)+0.38881*TPK%K074(:)*PCONC(:,26)+& +&0.03175*TPK%K124(:)*PCONC(:,40)-TPK%K124(:)*PCONC(:,40) ! !CARBOP/N2O5=0.0 ! @@ -27917,6 +28517,8 @@ SUBROUTINE SUBJ7 ! !CARBOP/NH3=0.0 ! +!CARBOP/DMS=0.0 +! !CARBOP/SO2=0.0 ! !CARBOP/SULF=0.0 @@ -27925,11 +28527,11 @@ SUBROUTINE SUBJ7 ! !CARBOP/OH=+1.00000*K063*<ALD>+1.00000*K064*<KET>+0.51419*K065*<CARBO>+0.05413* !K069*<OP2> - PJAC(:,39,14)=+1.00000*TPK%K063(:)*PCONC(:,23)+1.00000*TPK%K064(:)*PCONC(:,24)& -&+0.51419*TPK%K065(:)*PCONC(:,25)+0.05413*TPK%K069(:)*PCONC(:,29) + PJAC(:,40,15)=+1.00000*TPK%K063(:)*PCONC(:,24)+1.00000*TPK%K064(:)*PCONC(:,25)& +&+0.51419*TPK%K065(:)*PCONC(:,26)+0.05413*TPK%K069(:)*PCONC(:,30) ! !CARBOP/HO2=-K0102*<CARBOP> - PJAC(:,39,15)=-TPK%K0102(:)*PCONC(:,39) + PJAC(:,40,16)=-TPK%K0102(:)*PCONC(:,40) ! !CARBOP/CH4=0.0 ! @@ -27938,90 +28540,98 @@ SUBROUTINE SUBJ7 !CARBOP/ALKA=0.0 ! !CARBOP/ALKE=+0.05705*K079*<O3> - PJAC(:,39,19)=+0.05705*TPK%K079(:)*PCONC(:,1) + PJAC(:,40,20)=+0.05705*TPK%K079(:)*PCONC(:,1) ! !CARBOP/BIO=+0.17000*K080*<O3> - PJAC(:,39,20)=+0.17000*TPK%K080(:)*PCONC(:,1) + PJAC(:,40,21)=+0.17000*TPK%K080(:)*PCONC(:,1) ! !CARBOP/ARO=0.0 ! !CARBOP/HCHO=0.0 ! !CARBOP/ALD=+1.00000*K063*<OH>+1.00000*K073*<NO3> - PJAC(:,39,23)=+1.00000*TPK%K063(:)*PCONC(:,14)+1.00000*TPK%K073(:)*PCONC(:,5) + PJAC(:,40,24)=+1.00000*TPK%K063(:)*PCONC(:,15)+1.00000*TPK%K073(:)*PCONC(:,5) ! !CARBOP/KET=+1.00000*K015+1.00000*K064*<OH> - PJAC(:,39,24)=+1.00000*TPK%K015(:)+1.00000*TPK%K064(:)*PCONC(:,14) + PJAC(:,40,25)=+1.00000*TPK%K015(:)+1.00000*TPK%K064(:)*PCONC(:,15) ! !CARBOP/CARBO=+0.69622*K016+0.51419*K065*<OH>+0.38881*K074*<NO3>+0.27460*K081*< !O3> - PJAC(:,39,25)=+0.69622*TPK%K016(:)+0.51419*TPK%K065(:)*PCONC(:,14)+0.38881*TPK& + PJAC(:,40,26)=+0.69622*TPK%K016(:)+0.51419*TPK%K065(:)*PCONC(:,15)+0.38881*TPK& &%K074(:)*PCONC(:,5)+0.27460*TPK%K081(:)*PCONC(:,1) ! !CARBOP/ONIT=0.0 ! !CARBOP/PAN=+0.70000*K082*<O3>+1.00000*K089 - PJAC(:,39,27)=+0.70000*TPK%K082(:)*PCONC(:,1)+1.00000*TPK%K089(:) + PJAC(:,40,28)=+0.70000*TPK%K082(:)*PCONC(:,1)+1.00000*TPK%K089(:) ! !CARBOP/OP1=0.0 ! !CARBOP/OP2=+0.05413*K069*<OH> - PJAC(:,39,29)=+0.05413*TPK%K069(:)*PCONC(:,14) + PJAC(:,40,30)=+0.05413*TPK%K069(:)*PCONC(:,15) ! !CARBOP/ORA1=0.0 ! !CARBOP/ORA2=0.0 ! !CARBOP/MO2=+0.05954*K109*<CARBOP>-K109*<CARBOP> - PJAC(:,39,32)=+0.05954*TPK%K109(:)*PCONC(:,39)-TPK%K109(:)*PCONC(:,39) + PJAC(:,40,33)=+0.05954*TPK%K109(:)*PCONC(:,40)-TPK%K109(:)*PCONC(:,40) ! !CARBOP/ALKAP=-K111*<CARBOP> - PJAC(:,39,33)=-TPK%K111(:)*PCONC(:,39) + PJAC(:,40,34)=-TPK%K111(:)*PCONC(:,40) ! !CARBOP/ALKEP=-K112*<CARBOP> - PJAC(:,39,34)=-TPK%K112(:)*PCONC(:,39) + PJAC(:,40,35)=-TPK%K112(:)*PCONC(:,40) ! !CARBOP/BIOP=-K113*<CARBOP> - PJAC(:,39,35)=-TPK%K113(:)*PCONC(:,39) + PJAC(:,40,36)=-TPK%K113(:)*PCONC(:,40) ! !CARBOP/PHO=0.0 ! !CARBOP/ADD=0.0 ! !CARBOP/AROP=-K114*<CARBOP> - PJAC(:,39,38)=-TPK%K114(:)*PCONC(:,39) + PJAC(:,40,39)=-TPK%K114(:)*PCONC(:,40) ! !CARBOP/CARBOP=-K088*<NO2>+0.09532*K095*<NO>-K095*<NO>-K0102*<HO2>+0.05954*K109 !*<MO2>-K109*<MO2>-K111*<ALKAP>-K112*<ALKEP>-K113*<BIOP>-K114*<AROP>+0.05821*K1 !15*<CARBOP>+0.05821*K115*<CARBOP>-K115*<CARBOP>-K115*<CARBOP>-K115*<CARBOP>-K1 !15*<CARBOP>-K116*<OLN>+0.03175*K124*<NO3>-K124*<NO3>-K128*<XO2> - PJAC(:,39,39)=-TPK%K088(:)*PCONC(:,4)+0.09532*TPK%K095(:)*PCONC(:,3)-TPK%K095(& -&:)*PCONC(:,3)-TPK%K0102(:)*PCONC(:,15)+0.05954*TPK%K109(:)*PCONC(:,32)-TPK%K10& -&9(:)*PCONC(:,32)-TPK%K111(:)*PCONC(:,33)-TPK%K112(:)*PCONC(:,34)-TPK%K113(:)*P& -&CONC(:,35)-TPK%K114(:)*PCONC(:,38)+0.05821*TPK%K115(:)*PCONC(:,39)+0.05821*TPK& -&%K115(:)*PCONC(:,39)-TPK%K115(:)*PCONC(:,39)-TPK%K115(:)*PCONC(:,39)-TPK%K115(& -&:)*PCONC(:,39)-TPK%K115(:)*PCONC(:,39)-TPK%K116(:)*PCONC(:,40)+0.03175*TPK%K12& -&4(:)*PCONC(:,5)-TPK%K124(:)*PCONC(:,5)-TPK%K128(:)*PCONC(:,41) + PJAC(:,40,40)=-TPK%K088(:)*PCONC(:,4)+0.09532*TPK%K095(:)*PCONC(:,3)-TPK%K095(& +&:)*PCONC(:,3)-TPK%K0102(:)*PCONC(:,16)+0.05954*TPK%K109(:)*PCONC(:,33)-TPK%K10& +&9(:)*PCONC(:,33)-TPK%K111(:)*PCONC(:,34)-TPK%K112(:)*PCONC(:,35)-TPK%K113(:)*P& +&CONC(:,36)-TPK%K114(:)*PCONC(:,39)+0.05821*TPK%K115(:)*PCONC(:,40)+0.05821*TPK& +&%K115(:)*PCONC(:,40)-TPK%K115(:)*PCONC(:,40)-TPK%K115(:)*PCONC(:,40)-TPK%K115(& +&:)*PCONC(:,40)-TPK%K115(:)*PCONC(:,40)-TPK%K116(:)*PCONC(:,41)+0.03175*TPK%K12& +&4(:)*PCONC(:,5)-TPK%K124(:)*PCONC(:,5)-TPK%K128(:)*PCONC(:,42) ! !CARBOP/OLN=-K116*<CARBOP> - PJAC(:,39,40)=-TPK%K116(:)*PCONC(:,39) + PJAC(:,40,41)=-TPK%K116(:)*PCONC(:,40) ! !CARBOP/XO2=-K128*<CARBOP> - PJAC(:,39,41)=-TPK%K128(:)*PCONC(:,39) + PJAC(:,40,42)=-TPK%K128(:)*PCONC(:,40) +! +RETURN +END SUBROUTINE SUBJ7 +! +SUBROUTINE SUBJ8 +! +!Indices 41 a 42 +! ! !OLN/O3=0.0 ! !OLN/H2O2=0.0 ! !OLN/NO=-K096*<OLN> - PJAC(:,40,3)=-TPK%K096(:)*PCONC(:,40) + PJAC(:,41,3)=-TPK%K096(:)*PCONC(:,41) ! !OLN/NO2=0.0 ! !OLN/NO3=+0.00000*K074*<CARBO>+0.93768*K076*<ALKE>+1.00000*K077*<BIO>-K125*<OLN !> - PJAC(:,40,5)=+0.00000*TPK%K074(:)*PCONC(:,25)+0.93768*TPK%K076(:)*PCONC(:,19)+& -&1.00000*TPK%K077(:)*PCONC(:,20)-TPK%K125(:)*PCONC(:,40) + PJAC(:,41,5)=+0.00000*TPK%K074(:)*PCONC(:,26)+0.93768*TPK%K076(:)*PCONC(:,20)+& +&1.00000*TPK%K077(:)*PCONC(:,21)-TPK%K125(:)*PCONC(:,41) ! !OLN/N2O5=0.0 ! @@ -28033,6 +28643,8 @@ SUBROUTINE SUBJ7 ! !OLN/NH3=0.0 ! +!OLN/DMS=0.0 +! !OLN/SO2=0.0 ! !OLN/SULF=0.0 @@ -28042,7 +28654,7 @@ SUBROUTINE SUBJ7 !OLN/OH=0.0 ! !OLN/HO2=-K103*<OLN> - PJAC(:,40,15)=-TPK%K103(:)*PCONC(:,40) + PJAC(:,41,16)=-TPK%K103(:)*PCONC(:,41) ! !OLN/CH4=0.0 ! @@ -28051,10 +28663,10 @@ SUBROUTINE SUBJ7 !OLN/ALKA=0.0 ! !OLN/ALKE=+0.93768*K076*<NO3> - PJAC(:,40,19)=+0.93768*TPK%K076(:)*PCONC(:,5) + PJAC(:,41,20)=+0.93768*TPK%K076(:)*PCONC(:,5) ! !OLN/BIO=+1.00000*K077*<NO3> - PJAC(:,40,20)=+1.00000*TPK%K077(:)*PCONC(:,5) + PJAC(:,41,21)=+1.00000*TPK%K077(:)*PCONC(:,5) ! !OLN/ARO=0.0 ! @@ -28065,7 +28677,7 @@ SUBROUTINE SUBJ7 !OLN/KET=0.0 ! !OLN/CARBO=+0.00000*K074*<NO3> - PJAC(:,40,25)=+0.00000*TPK%K074(:)*PCONC(:,5) + PJAC(:,41,26)=+0.00000*TPK%K074(:)*PCONC(:,5) ! !OLN/ONIT=0.0 ! @@ -28080,7 +28692,7 @@ SUBROUTINE SUBJ7 !OLN/ORA2=0.0 ! !OLN/MO2=-K110*<OLN> - PJAC(:,40,32)=-TPK%K110(:)*PCONC(:,40) + PJAC(:,41,33)=-TPK%K110(:)*PCONC(:,41) ! !OLN/ALKAP=0.0 ! @@ -28095,41 +28707,33 @@ SUBROUTINE SUBJ7 !OLN/AROP=0.0 ! !OLN/CARBOP=-K116*<OLN> - PJAC(:,40,39)=-TPK%K116(:)*PCONC(:,40) + PJAC(:,41,40)=-TPK%K116(:)*PCONC(:,41) ! !OLN/OLN=-K096*<NO>-K103*<HO2>-K110*<MO2>-K116*<CARBOP>-K117*<OLN>-K117*<OLN>-K !117*<OLN>-K117*<OLN>-K118*<OLN>-K118*<OLN>-K118*<OLN>-K118*<OLN>-K125*<NO3> - PJAC(:,40,40)=-TPK%K096(:)*PCONC(:,3)-TPK%K103(:)*PCONC(:,15)-TPK%K110(:)*PCON& -&C(:,32)-TPK%K116(:)*PCONC(:,39)-TPK%K117(:)*PCONC(:,40)-TPK%K117(:)*PCONC(:,40& -&)-TPK%K117(:)*PCONC(:,40)-TPK%K117(:)*PCONC(:,40)-TPK%K118(:)*PCONC(:,40)-TPK%& -&K118(:)*PCONC(:,40)-TPK%K118(:)*PCONC(:,40)-TPK%K118(:)*PCONC(:,40)-TPK%K125(:& + PJAC(:,41,41)=-TPK%K096(:)*PCONC(:,3)-TPK%K103(:)*PCONC(:,16)-TPK%K110(:)*PCON& +&C(:,33)-TPK%K116(:)*PCONC(:,40)-TPK%K117(:)*PCONC(:,41)-TPK%K117(:)*PCONC(:,41& +&)-TPK%K117(:)*PCONC(:,41)-TPK%K117(:)*PCONC(:,41)-TPK%K118(:)*PCONC(:,41)-TPK%& +&K118(:)*PCONC(:,41)-TPK%K118(:)*PCONC(:,41)-TPK%K118(:)*PCONC(:,41)-TPK%K125(:& &)*PCONC(:,5) ! !OLN/XO2=0.0 ! -RETURN -END SUBROUTINE SUBJ7 -! -SUBROUTINE SUBJ8 -! -!Indices 41 a 41 -! -! !XO2/O3=+0.00000*K079*<ALKE>+0.13000*K080*<BIO> - PJAC(:,41,1)=+0.00000*TPK%K079(:)*PCONC(:,19)+0.13000*TPK%K080(:)*PCONC(:,20) + PJAC(:,42,1)=+0.00000*TPK%K079(:)*PCONC(:,20)+0.13000*TPK%K080(:)*PCONC(:,21) ! !XO2/H2O2=0.0 ! !XO2/NO=+0.13007*K091*<ALKAP>+0.02563*K095*<CARBOP>-K130*<XO2> - PJAC(:,41,3)=+0.13007*TPK%K091(:)*PCONC(:,33)+0.02563*TPK%K095(:)*PCONC(:,39)-& -&TPK%K130(:)*PCONC(:,41) + PJAC(:,42,3)=+0.13007*TPK%K091(:)*PCONC(:,34)+0.02563*TPK%K095(:)*PCONC(:,40)-& +&TPK%K130(:)*PCONC(:,42) ! !XO2/NO2=0.0 ! !XO2/NO3=+0.10530*K074*<CARBO>+K078*<PAN>+0.16271*K120*<ALKAP>+0.01021*K124*<CA !RBOP>-K131*<XO2> - PJAC(:,41,5)=+0.10530*TPK%K074(:)*PCONC(:,25)+TPK%K078(:)*PCONC(:,27)+0.16271*& -&TPK%K120(:)*PCONC(:,33)+0.01021*TPK%K124(:)*PCONC(:,39)-TPK%K131(:)*PCONC(:,41& + PJAC(:,42,5)=+0.10530*TPK%K074(:)*PCONC(:,26)+TPK%K078(:)*PCONC(:,28)+0.16271*& +&TPK%K120(:)*PCONC(:,34)+0.01021*TPK%K124(:)*PCONC(:,40)-TPK%K131(:)*PCONC(:,42& &) ! !XO2/N2O5=0.0 @@ -28142,6 +28746,8 @@ SUBROUTINE SUBJ8 ! !XO2/NH3=0.0 ! +!XO2/DMS=0.0 +! !XO2/SO2=0.0 ! !XO2/SULF=0.0 @@ -28149,11 +28755,11 @@ SUBROUTINE SUBJ8 !XO2/CO=0.0 ! !XO2/OH=+0.10318*K061*<ARO>+0.10162*K065*<CARBO>+0.09333*K069*<OP2>+K070*<PAN> - PJAC(:,41,14)=+0.10318*TPK%K061(:)*PCONC(:,21)+0.10162*TPK%K065(:)*PCONC(:,25)& -&+0.09333*TPK%K069(:)*PCONC(:,29)+TPK%K070(:)*PCONC(:,27) + PJAC(:,42,15)=+0.10318*TPK%K061(:)*PCONC(:,22)+0.10162*TPK%K065(:)*PCONC(:,26)& +&+0.09333*TPK%K069(:)*PCONC(:,30)+TPK%K070(:)*PCONC(:,28) ! !XO2/HO2=-K126*<XO2> - PJAC(:,41,15)=-TPK%K126(:)*PCONC(:,41) + PJAC(:,42,16)=-TPK%K126(:)*PCONC(:,42) ! !XO2/CH4=0.0 ! @@ -28162,13 +28768,13 @@ SUBROUTINE SUBJ8 !XO2/ALKA=0.0 ! !XO2/ALKE=+0.00000*K079*<O3> - PJAC(:,41,19)=+0.00000*TPK%K079(:)*PCONC(:,1) + PJAC(:,42,20)=+0.00000*TPK%K079(:)*PCONC(:,1) ! !XO2/BIO=+0.15*K054*<O3P>+0.13000*K080*<O3> - PJAC(:,41,20)=+0.15*TPK%K054(:)*TPK%O3P(:)+0.13000*TPK%K080(:)*PCONC(:,1) + PJAC(:,42,21)=+0.15*TPK%K054(:)*TPK%O3P(:)+0.13000*TPK%K080(:)*PCONC(:,1) ! !XO2/ARO=+0.10318*K061*<OH> - PJAC(:,41,21)=+0.10318*TPK%K061(:)*PCONC(:,14) + PJAC(:,42,22)=+0.10318*TPK%K061(:)*PCONC(:,15) ! !XO2/HCHO=0.0 ! @@ -28177,30 +28783,30 @@ SUBROUTINE SUBJ8 !XO2/KET=0.0 ! !XO2/CARBO=+0.10162*K065*<OH>+0.10530*K074*<NO3> - PJAC(:,41,25)=+0.10162*TPK%K065(:)*PCONC(:,14)+0.10530*TPK%K074(:)*PCONC(:,5) + PJAC(:,42,26)=+0.10162*TPK%K065(:)*PCONC(:,15)+0.10530*TPK%K074(:)*PCONC(:,5) ! !XO2/ONIT=0.0 ! !XO2/PAN=+K070*<OH>+K078*<NO3> - PJAC(:,41,27)=+TPK%K070(:)*PCONC(:,14)+TPK%K078(:)*PCONC(:,5) + PJAC(:,42,28)=+TPK%K070(:)*PCONC(:,15)+TPK%K078(:)*PCONC(:,5) ! !XO2/OP1=0.0 ! !XO2/OP2=+0.09333*K069*<OH> - PJAC(:,41,29)=+0.09333*TPK%K069(:)*PCONC(:,14) + PJAC(:,42,30)=+0.09333*TPK%K069(:)*PCONC(:,15) ! !XO2/ORA1=0.0 ! !XO2/ORA2=0.0 ! !XO2/MO2=+0.13370*K105*<ALKAP>+0.02212*K109*<CARBOP>-K127*<XO2> - PJAC(:,41,32)=+0.13370*TPK%K105(:)*PCONC(:,33)+0.02212*TPK%K109(:)*PCONC(:,39)& -&-TPK%K127(:)*PCONC(:,41) + PJAC(:,42,33)=+0.13370*TPK%K105(:)*PCONC(:,34)+0.02212*TPK%K109(:)*PCONC(:,40)& +&-TPK%K127(:)*PCONC(:,42) ! !XO2/ALKAP=+0.13007*K091*<NO>+0.13370*K105*<MO2>+0.11306*K111*<CARBOP>+0.16271* !K120*<NO3> - PJAC(:,41,33)=+0.13007*TPK%K091(:)*PCONC(:,3)+0.13370*TPK%K105(:)*PCONC(:,32)+& -&0.11306*TPK%K111(:)*PCONC(:,39)+0.16271*TPK%K120(:)*PCONC(:,5) + PJAC(:,42,34)=+0.13007*TPK%K091(:)*PCONC(:,3)+0.13370*TPK%K105(:)*PCONC(:,33)+& +&0.11306*TPK%K111(:)*PCONC(:,40)+0.16271*TPK%K120(:)*PCONC(:,5) ! !XO2/ALKEP=0.0 ! @@ -28214,17 +28820,17 @@ SUBROUTINE SUBJ8 ! !XO2/CARBOP=+0.02563*K095*<NO>+0.02212*K109*<MO2>+0.11306*K111*<ALKAP>+0.01593* !K115*<CARBOP>+0.01593*K115*<CARBOP>+0.01021*K124*<NO3>-K128*<XO2> - PJAC(:,41,39)=+0.02563*TPK%K095(:)*PCONC(:,3)+0.02212*TPK%K109(:)*PCONC(:,32)+& -&0.11306*TPK%K111(:)*PCONC(:,33)+0.01593*TPK%K115(:)*PCONC(:,39)+0.01593*TPK%K1& -&15(:)*PCONC(:,39)+0.01021*TPK%K124(:)*PCONC(:,5)-TPK%K128(:)*PCONC(:,41) + PJAC(:,42,40)=+0.02563*TPK%K095(:)*PCONC(:,3)+0.02212*TPK%K109(:)*PCONC(:,33)+& +&0.11306*TPK%K111(:)*PCONC(:,34)+0.01593*TPK%K115(:)*PCONC(:,40)+0.01593*TPK%K1& +&15(:)*PCONC(:,40)+0.01021*TPK%K124(:)*PCONC(:,5)-TPK%K128(:)*PCONC(:,42) ! !XO2/OLN=0.0 ! !XO2/XO2=-K126*<HO2>-K127*<MO2>-K128*<CARBOP>-K129*<XO2>-K129*<XO2>-K129*<XO2>- !K129*<XO2>-K130*<NO>-K131*<NO3> - PJAC(:,41,41)=-TPK%K126(:)*PCONC(:,15)-TPK%K127(:)*PCONC(:,32)-TPK%K128(:)*PCO& -&NC(:,39)-TPK%K129(:)*PCONC(:,41)-TPK%K129(:)*PCONC(:,41)-TPK%K129(:)*PCONC(:,4& -&1)-TPK%K129(:)*PCONC(:,41)-TPK%K130(:)*PCONC(:,3)-TPK%K131(:)*PCONC(:,5) + PJAC(:,42,42)=-TPK%K126(:)*PCONC(:,16)-TPK%K127(:)*PCONC(:,33)-TPK%K128(:)*PCO& +&NC(:,40)-TPK%K129(:)*PCONC(:,42)-TPK%K129(:)*PCONC(:,42)-TPK%K129(:)*PCONC(:,4& +&2)-TPK%K129(:)*PCONC(:,42)-TPK%K130(:)*PCONC(:,3)-TPK%K131(:)*PCONC(:,5) ! RETURN END SUBROUTINE SUBJ8 @@ -28721,17 +29327,21 @@ END SUBROUTINE SUBSRG12 ! SUBROUTINE SUBSRG13 ! -!Indices 131 a 132 +!Indices 131 a 135 ! TPK%K131=1.20E-12 TPK%K132=1.00E-40 + TPK%K133=5.40E-13 + TPK%K134=1.30E-11*exp(-(400./TPK%T)) + TPK%K135=(TPK%T*exp(-234./TPK%T)+8.4E-10*exp(7230./TPK%T)+2.68E-10*exp(7810./T& +&PK%T))/(1.04E11*TPK%T+88.1*exp(7460./TPK%T)) ! RETURN END SUBROUTINE SUBSRG13 ! SUBROUTINE SUBSRW0 ! -!Indices 133 a 142 +!Indices 136 a 145 ! TPK%KTC1=KT(0.05,48.,TPK%T,TPK%RADC,KVECNPT)*TPK%LWC TPK%KTC2=KT(0.11,34.,TPK%T,TPK%RADC,KVECNPT)*TPK%LWC @@ -28749,7 +29359,7 @@ END SUBROUTINE SUBSRW0 ! SUBROUTINE SUBSRW1 ! -!Indices 143 a 152 +!Indices 146 a 155 ! TPK%KTC11=KT(0.05,17.,TPK%T,TPK%RADC,KVECNPT)*TPK%LWC TPK%KTC12=KT(0.2,30.,TPK%T,TPK%RADC,KVECNPT)*TPK%LWC @@ -28767,24 +29377,24 @@ END SUBROUTINE SUBSRW1 ! SUBROUTINE SUBSRW2 ! -!Indices 153 a 162 +!Indices 156 a 165 ! - TPK%KTC21=KT(0.05,48.,TPK%T,TPK%RADC,KVECNPT)/(HENRY(1.1e-2,-2830.,TPK%T,KVECN& -&PT)*TPK%RCH*TPK%T) - TPK%KTC22=KT(0.11,34.,TPK%T,TPK%RADC,KVECNPT)/(HENRY(7.73e4,-7310.,TPK%T,KVECN& + TPK%KTC21=KT(0.05,48.,TPK%T,TPK%RADC,KVECNPT)/(HENRY(1.03e-2,-2830.,TPK%T,KVEC& +&NPT)*TPK%RCH*TPK%T) + TPK%KTC22=KT(0.11,34.,TPK%T,TPK%RADC,KVECNPT)/(HENRY(8.44e4,-7600.,TPK%T,KVECN& &PT)*TPK%RCH*TPK%T) TPK%KTC23=KT(0.0001,30.,TPK%T,TPK%RADC,KVECNPT)/(HENRY(1.92e-3,-1790.,TPK%T,KV& &ECNPT)*TPK%RCH*TPK%T) - TPK%KTC24=KT(0.0015,46.,TPK%T,TPK%RADC,KVECNPT)/(HENRY(1.4e-2,0.,TPK%T,KVECNPT& -&)*TPK%RCH*TPK%T) + TPK%KTC24=KT(0.0015,46.,TPK%T,TPK%RADC,KVECNPT)/(HENRY(1.2e-2,-2400.,TPK%T,KVE& +&CNPT)*TPK%RCH*TPK%T) TPK%KTC25=KT(0.05,62.,TPK%T,TPK%RADC,KVECNPT)/(HENRY(3.8e-2,0.,TPK%T,KVECNPT)*& &TPK%RCH*TPK%T) - TPK%KTC26=KT(0.0037,108.,TPK%T,TPK%RADC,KVECNPT)/(HENRY(2.1,-3400.,TPK%T,KVECN& -&PT)*TPK%RCH*TPK%T) + TPK%KTC26=KT(0.0037,108.,TPK%T,TPK%RADC,KVECNPT)/(HENRY(8.8e-2,-3600.,TPK%T,KV& +&ECNPT)*TPK%RCH*TPK%T) TPK%KTC27=KT(0.05,47.,TPK%T,TPK%RADC,KVECNPT)/(HEFFA(5.0e1,-4880.,1.6e-3,1760.& &,0.,0.,TPK%PHC,TPK%T,KVECNPT)*TPK%RCH*TPK%T) - TPK%KTC28=KT(0.054,63.,TPK%T,TPK%RADC,KVECNPT)/(HEFFA(2.1e5,-8700.,2.2e1,0.,0.& -&,0.,TPK%PHC,TPK%T,KVECNPT)*TPK%RCH*TPK%T) + TPK%KTC28=KT(0.054,63.,TPK%T,TPK%RADC,KVECNPT)/(HEFFA(2.1e5,-10500.,2.2e1,0.,0& +&.,0.,TPK%PHC,TPK%T,KVECNPT)*TPK%RCH*TPK%T) TPK%KTC29=KT(0.05,79.,TPK%T,TPK%RADC,KVECNPT)/(HEFFA(1.2e4,-6900.,1.26e-6,0.,0& &.,0.,TPK%PHC,TPK%T,KVECNPT)*TPK%RCH*TPK%T) TPK%KTC30=KT(0.04,17.,TPK%T,TPK%RADC,KVECNPT)/(HEFFB(6.02e1,-4160.,1.7e-5,4350& @@ -28795,7 +29405,7 @@ END SUBROUTINE SUBSRW2 ! SUBROUTINE SUBSRW3 ! -!Indices 163 a 172 +!Indices 166 a 175 ! TPK%KTC31=KT(0.05,17.,TPK%T,TPK%RADC,KVECNPT)/(HENRY(3.9e1,0.,TPK%T,KVECNPT)*T& &PK%RCH*TPK%T) @@ -28813,8 +29423,8 @@ SUBROUTINE SUBSRW3 &,0.,0.,TPK%PHC,TPK%T,KVECNPT)*TPK%RCH*TPK%T) TPK%KTC38=KT(0.03,60.,TPK%T,TPK%RADC,KVECNPT)/(HEFFA(4.1e3,-6200.,1.74e-5,0.,0& &.,0.,TPK%PHC,TPK%T,KVECNPT)*TPK%RCH*TPK%T) - TPK%KTC39=KT(0.05,47.,TPK%T,TPK%RADC,KVECNPT)/(HENRY(2.7e0,-2030.,TPK%T,KVECNP& -&T)*TPK%RCH*TPK%T) + TPK%KTC39=KT(0.05,47.,TPK%T,TPK%RADC,KVECNPT)/(HENRY(2.45e0,-5280.,TPK%T,KVECN& +&PT)*TPK%RCH*TPK%T) TPK%KTC40=KT(0.007,48.,TPK%T,TPK%RADC,KVECNPT)/(HENRY(3.e2,-5280.,TPK%T,KVECNP& &T)*TPK%RCH*TPK%T) ! @@ -28823,7 +29433,7 @@ END SUBROUTINE SUBSRW3 ! SUBROUTINE SUBSRW4 ! -!Indices 173 a 182 +!Indices 176 a 185 ! TPK%KTR1=KT(0.05,48.,TPK%T,TPK%RADR,KVECNPT)*TPK%LWR TPK%KTR2=KT(0.11,34.,TPK%T,TPK%RADR,KVECNPT)*TPK%LWR @@ -28841,7 +29451,7 @@ END SUBROUTINE SUBSRW4 ! SUBROUTINE SUBSRW5 ! -!Indices 183 a 192 +!Indices 186 a 195 ! TPK%KTR11=KT(0.05,17.,TPK%T,TPK%RADR,KVECNPT)*TPK%LWR TPK%KTR12=KT(0.2,30.,TPK%T,TPK%RADR,KVECNPT)*TPK%LWR @@ -28859,24 +29469,24 @@ END SUBROUTINE SUBSRW5 ! SUBROUTINE SUBSRW6 ! -!Indices 193 a 202 +!Indices 196 a 205 ! - TPK%KTR21=KT(0.05,48.,TPK%T,TPK%RADR,KVECNPT)/(HENRY(1.1e-2,-2830.,TPK%T,KVECN& -&PT)*TPK%RCH*TPK%T) - TPK%KTR22=KT(0.11,34.,TPK%T,TPK%RADR,KVECNPT)/(HENRY(7.73e4,-7310.,TPK%T,KVECN& + TPK%KTR21=KT(0.05,48.,TPK%T,TPK%RADR,KVECNPT)/(HENRY(1.03e-2,-2830.,TPK%T,KVEC& +&NPT)*TPK%RCH*TPK%T) + TPK%KTR22=KT(0.11,34.,TPK%T,TPK%RADR,KVECNPT)/(HENRY(8.44e4,-7600.,TPK%T,KVECN& &PT)*TPK%RCH*TPK%T) TPK%KTR23=KT(0.0001,30.,TPK%T,TPK%RADR,KVECNPT)/(HENRY(1.92e-3,-1790.,TPK%T,KV& &ECNPT)*TPK%RCH*TPK%T) - TPK%KTR24=KT(0.0015,46.,TPK%T,TPK%RADR,KVECNPT)/(HENRY(1.4e-2,0.,TPK%T,KVECNPT& -&)*TPK%RCH*TPK%T) + TPK%KTR24=KT(0.0015,46.,TPK%T,TPK%RADR,KVECNPT)/(HENRY(1.2e-2,-2400.,TPK%T,KVE& +&CNPT)*TPK%RCH*TPK%T) TPK%KTR25=KT(0.05,62.,TPK%T,TPK%RADR,KVECNPT)/(HENRY(3.8e-2,0.,TPK%T,KVECNPT)*& &TPK%RCH*TPK%T) - TPK%KTR26=KT(0.0037,108.,TPK%T,TPK%RADR,KVECNPT)/(HENRY(2.1,-3400.,TPK%T,KVECN& -&PT)*TPK%RCH*TPK%T) + TPK%KTR26=KT(0.0037,108.,TPK%T,TPK%RADR,KVECNPT)/(HENRY(8.8e-2,-3600.,TPK%T,KV& +&ECNPT)*TPK%RCH*TPK%T) TPK%KTR27=KT(0.05,47.,TPK%T,TPK%RADR,KVECNPT)/(HEFFA(5.0e1,-4880.,1.6e-3,1760.& &,0.,0.,TPK%PHR,TPK%T,KVECNPT)*TPK%RCH*TPK%T) - TPK%KTR28=KT(0.054,63.,TPK%T,TPK%RADR,KVECNPT)/(HEFFA(2.1e5,-8700.,2.2e1,0.,0.& -&,0.,TPK%PHR,TPK%T,KVECNPT)*TPK%RCH*TPK%T) + TPK%KTR28=KT(0.054,63.,TPK%T,TPK%RADR,KVECNPT)/(HEFFA(2.1e5,-10500.,2.2e1,0.,0& +&.,0.,TPK%PHR,TPK%T,KVECNPT)*TPK%RCH*TPK%T) TPK%KTR29=KT(0.05,79.,TPK%T,TPK%RADR,KVECNPT)/(HEFFA(1.2e4,-6900.,1.26e-6,0.,0& &.,0.,TPK%PHR,TPK%T,KVECNPT)*TPK%RCH*TPK%T) TPK%KTR30=KT(0.04,17.,TPK%T,TPK%RADR,KVECNPT)/(HEFFB(6.02e1,-4160.,1.7e-5,4350& @@ -28887,7 +29497,7 @@ END SUBROUTINE SUBSRW6 ! SUBROUTINE SUBSRW7 ! -!Indices 203 a 212 +!Indices 206 a 215 ! TPK%KTR31=KT(0.05,17.,TPK%T,TPK%RADR,KVECNPT)/(HENRY(3.9e1,0.,TPK%T,KVECNPT)*T& &PK%RCH*TPK%T) @@ -28905,8 +29515,8 @@ SUBROUTINE SUBSRW7 &,0.,0.,TPK%PHR,TPK%T,KVECNPT)*TPK%RCH*TPK%T) TPK%KTR38=KT(0.03,60.,TPK%T,TPK%RADR,KVECNPT)/(HEFFA(4.1e3,-6200.,1.74e-5,0.,0& &.,0.,TPK%PHR,TPK%T,KVECNPT)*TPK%RCH*TPK%T) - TPK%KTR39=KT(0.05,47.,TPK%T,TPK%RADR,KVECNPT)/(HENRY(2.7e0,-2030.,TPK%T,KVECNP& -&T)*TPK%RCH*TPK%T) + TPK%KTR39=KT(0.05,47.,TPK%T,TPK%RADR,KVECNPT)/(HENRY(2.45e0,-5280.,TPK%T,KVECN& +&PT)*TPK%RCH*TPK%T) TPK%KTR40=KT(0.007,48.,TPK%T,TPK%RADR,KVECNPT)/(HENRY(3.e2,-5280.,TPK%T,KVECNP& &T)*TPK%RCH*TPK%T) ! @@ -28915,7 +29525,7 @@ END SUBROUTINE SUBSRW7 ! SUBROUTINE SUBSRW8 ! -!Indices 213 a 222 +!Indices 216 a 225 ! TPK%KC2=(3.6E+9*exp(-930.*(1./TPK%T-1./298.15)))/TPK%MOL2MOLECCLOUD TPK%KC3=((2.8E+10*10.**(-TPK%PHC)+3.5E+10*exp(-720.*(1./TPK%T-1./298.15))*1.6e& @@ -28941,7 +29551,7 @@ END SUBROUTINE SUBSRW8 ! SUBROUTINE SUBSRW9 ! -!Indices 223 a 232 +!Indices 226 a 235 ! TPK%KC11=1.1E0*1.26e-6/(1.26e-6+10.**(-TPK%PHC)) TPK%KC12=(3.3E+5*1.3e-2*exp(1965.*(1./TPK%T-1./298.15))*(10.**(-TPK%PHC))**2./& @@ -28971,7 +29581,7 @@ END SUBROUTINE SUBSRW9 ! SUBROUTINE SUBSRW10 ! -!Indices 233 a 242 +!Indices 236 a 245 ! TPK%KC21=((7.9E+2*exp(-2900.*(1./TPK%T-1./298.15))*1.3e-2*exp(1965.*(1./TPK%T-& &1./298.15))*10.**(-TPK%PHC)+2.5E+7*exp(-2450.*(1./TPK%T-1./298.15))*1.3e-2*exp& @@ -29006,7 +29616,7 @@ END SUBROUTINE SUBSRW10 ! SUBROUTINE SUBSRW11 ! -!Indices 243 a 252 +!Indices 246 a 255 ! TPK%KR2=(3.6E+9*exp(-930.*(1./TPK%T-1./298.15)))/TPK%MOL2MOLECRAIN TPK%KR3=((2.8E+10*10.**(-TPK%PHR)+3.5E+10*exp(-720.*(1./TPK%T-1./298.15))*1.6e& @@ -29032,7 +29642,7 @@ END SUBROUTINE SUBSRW11 ! SUBROUTINE SUBSRW12 ! -!Indices 253 a 262 +!Indices 256 a 265 ! TPK%KR11=1.1E0*1.26e-6/(1.26e-6+10.**(-TPK%PHR)) TPK%KR12=(3.3E+5*1.3e-2*exp(1965.*(1./TPK%T-1./298.15))*(10.**(-TPK%PHR))**2./& @@ -29062,7 +29672,7 @@ END SUBROUTINE SUBSRW12 ! SUBROUTINE SUBSRW13 ! -!Indices 263 a 272 +!Indices 266 a 275 ! TPK%KR21=((7.9E+2*exp(-2900.*(1./TPK%T-1./298.15))*1.3e-2*exp(1965.*(1./TPK%T-& &1./298.15))*10.**(-TPK%PHR)+2.5E+7*exp(-2450.*(1./TPK%T-1./298.15))*1.3e-2*exp& @@ -29188,7 +29798,7 @@ REAL,DIMENSION(:,:,:,:), INTENT(IN) :: PJVALUES ! Tuv coefficient ! parameter for use by subroutine JVALUES, ! contains the actual photolysis rates REAL, DIMENSION(KVECNPT,42) :: ZRATESIO ! TUV photolysis rates at one level -REAL, DIMENSION(KVECNPT,19) :: ZRATES ! photolysis rates of RACM (vector) +REAL, DIMENSION(KVECNPT,19) :: ZRATES ! photolysis rates of ReLACS (vector) INTEGER :: JITPK ! loop counter for J-Value transfer INTEGER :: IDTI,IDTJ INTEGER :: JITPKPLUS @@ -29495,147 +30105,150 @@ PRATE(:,129) = TPK%K129(:) PRATE(:,130) = TPK%K130(:) PRATE(:,131) = TPK%K131(:) PRATE(:,132) = TPK%K132(:) +PRATE(:,133) = TPK%K133(:) +PRATE(:,134) = TPK%K134(:) +PRATE(:,135) = TPK%K135(:) IF (TPK%LUSECHAQ) THEN - PRATE(:,133) = TPK%KTC1(:) - PRATE(:,134) = TPK%KTC2(:) - PRATE(:,135) = TPK%KTC3(:) - PRATE(:,136) = TPK%KTC4(:) - PRATE(:,137) = TPK%KTC5(:) - PRATE(:,138) = TPK%KTC6(:) - PRATE(:,139) = TPK%KTC7(:) - PRATE(:,140) = TPK%KTC8(:) - PRATE(:,141) = TPK%KTC9(:) - PRATE(:,142) = TPK%KTC10(:) - PRATE(:,143) = TPK%KTC11(:) - PRATE(:,144) = TPK%KTC12(:) - PRATE(:,145) = TPK%KTC13(:) - PRATE(:,146) = TPK%KTC14(:) - PRATE(:,147) = TPK%KTC15(:) - PRATE(:,148) = TPK%KTC16(:) - PRATE(:,149) = TPK%KTC17(:) - PRATE(:,150) = TPK%KTC18(:) - PRATE(:,151) = TPK%KTC19(:) - PRATE(:,152) = TPK%KTC20(:) - PRATE(:,153) = TPK%KTC21(:) - PRATE(:,154) = TPK%KTC22(:) - PRATE(:,155) = TPK%KTC23(:) - PRATE(:,156) = TPK%KTC24(:) - PRATE(:,157) = TPK%KTC25(:) - PRATE(:,158) = TPK%KTC26(:) - PRATE(:,159) = TPK%KTC27(:) - PRATE(:,160) = TPK%KTC28(:) - PRATE(:,161) = TPK%KTC29(:) - PRATE(:,162) = TPK%KTC30(:) - PRATE(:,163) = TPK%KTC31(:) - PRATE(:,164) = TPK%KTC32(:) - PRATE(:,165) = TPK%KTC33(:) - PRATE(:,166) = TPK%KTC34(:) - PRATE(:,167) = TPK%KTC35(:) - PRATE(:,168) = TPK%KTC36(:) - PRATE(:,169) = TPK%KTC37(:) - PRATE(:,170) = TPK%KTC38(:) - PRATE(:,171) = TPK%KTC39(:) - PRATE(:,172) = TPK%KTC40(:) - PRATE(:,173) = TPK%KTR1(:) - PRATE(:,174) = TPK%KTR2(:) - PRATE(:,175) = TPK%KTR3(:) - PRATE(:,176) = TPK%KTR4(:) - PRATE(:,177) = TPK%KTR5(:) - PRATE(:,178) = TPK%KTR6(:) - PRATE(:,179) = TPK%KTR7(:) - PRATE(:,180) = TPK%KTR8(:) - PRATE(:,181) = TPK%KTR9(:) - PRATE(:,182) = TPK%KTR10(:) - PRATE(:,183) = TPK%KTR11(:) - PRATE(:,184) = TPK%KTR12(:) - PRATE(:,185) = TPK%KTR13(:) - PRATE(:,186) = TPK%KTR14(:) - PRATE(:,187) = TPK%KTR15(:) - PRATE(:,188) = TPK%KTR16(:) - PRATE(:,189) = TPK%KTR17(:) - PRATE(:,190) = TPK%KTR18(:) - PRATE(:,191) = TPK%KTR19(:) - PRATE(:,192) = TPK%KTR20(:) - PRATE(:,193) = TPK%KTR21(:) - PRATE(:,194) = TPK%KTR22(:) - PRATE(:,195) = TPK%KTR23(:) - PRATE(:,196) = TPK%KTR24(:) - PRATE(:,197) = TPK%KTR25(:) - PRATE(:,198) = TPK%KTR26(:) - PRATE(:,199) = TPK%KTR27(:) - PRATE(:,200) = TPK%KTR28(:) - PRATE(:,201) = TPK%KTR29(:) - PRATE(:,202) = TPK%KTR30(:) - PRATE(:,203) = TPK%KTR31(:) - PRATE(:,204) = TPK%KTR32(:) - PRATE(:,205) = TPK%KTR33(:) - PRATE(:,206) = TPK%KTR34(:) - PRATE(:,207) = TPK%KTR35(:) - PRATE(:,208) = TPK%KTR36(:) - PRATE(:,209) = TPK%KTR37(:) - PRATE(:,210) = TPK%KTR38(:) - PRATE(:,211) = TPK%KTR39(:) - PRATE(:,212) = TPK%KTR40(:) - PRATE(:,213) = TPK%KC1(:) - PRATE(:,214) = TPK%KC2(:) - PRATE(:,215) = TPK%KC3(:) - PRATE(:,216) = TPK%KC4(:) - PRATE(:,217) = TPK%KC5(:) - PRATE(:,218) = TPK%KC6(:) - PRATE(:,219) = TPK%KC7(:) - PRATE(:,220) = TPK%KC8(:) - PRATE(:,221) = TPK%KC9(:) - PRATE(:,222) = TPK%KC10(:) - PRATE(:,223) = TPK%KC11(:) - PRATE(:,224) = TPK%KC12(:) - PRATE(:,225) = TPK%KC13(:) - PRATE(:,226) = TPK%KC14(:) - PRATE(:,227) = TPK%KC15(:) - PRATE(:,228) = TPK%KC16(:) - PRATE(:,229) = TPK%KC17(:) - PRATE(:,230) = TPK%KC18(:) - PRATE(:,231) = TPK%KC19(:) - PRATE(:,232) = TPK%KC20(:) - PRATE(:,233) = TPK%KC21(:) - PRATE(:,234) = TPK%KC22(:) - PRATE(:,235) = TPK%KC23(:) - PRATE(:,236) = TPK%KC24(:) - PRATE(:,237) = TPK%KC25(:) - PRATE(:,238) = TPK%KC26(:) - PRATE(:,239) = TPK%KC27(:) - PRATE(:,240) = TPK%KC28(:) - PRATE(:,241) = TPK%KC29(:) - PRATE(:,242) = TPK%KC30(:) - PRATE(:,243) = TPK%KR1(:) - PRATE(:,244) = TPK%KR2(:) - PRATE(:,245) = TPK%KR3(:) - PRATE(:,246) = TPK%KR4(:) - PRATE(:,247) = TPK%KR5(:) - PRATE(:,248) = TPK%KR6(:) - PRATE(:,249) = TPK%KR7(:) - PRATE(:,250) = TPK%KR8(:) - PRATE(:,251) = TPK%KR9(:) - PRATE(:,252) = TPK%KR10(:) - PRATE(:,253) = TPK%KR11(:) - PRATE(:,254) = TPK%KR12(:) - PRATE(:,255) = TPK%KR13(:) - PRATE(:,256) = TPK%KR14(:) - PRATE(:,257) = TPK%KR15(:) - PRATE(:,258) = TPK%KR16(:) - PRATE(:,259) = TPK%KR17(:) - PRATE(:,260) = TPK%KR18(:) - PRATE(:,261) = TPK%KR19(:) - PRATE(:,262) = TPK%KR20(:) - PRATE(:,263) = TPK%KR21(:) - PRATE(:,264) = TPK%KR22(:) - PRATE(:,265) = TPK%KR23(:) - PRATE(:,266) = TPK%KR24(:) - PRATE(:,267) = TPK%KR25(:) - PRATE(:,268) = TPK%KR26(:) - PRATE(:,269) = TPK%KR27(:) - PRATE(:,270) = TPK%KR28(:) - PRATE(:,271) = TPK%KR29(:) - PRATE(:,272) = TPK%KR30(:) + PRATE(:,136) = TPK%KTC1(:) + PRATE(:,137) = TPK%KTC2(:) + PRATE(:,138) = TPK%KTC3(:) + PRATE(:,139) = TPK%KTC4(:) + PRATE(:,140) = TPK%KTC5(:) + PRATE(:,141) = TPK%KTC6(:) + PRATE(:,142) = TPK%KTC7(:) + PRATE(:,143) = TPK%KTC8(:) + PRATE(:,144) = TPK%KTC9(:) + PRATE(:,145) = TPK%KTC10(:) + PRATE(:,146) = TPK%KTC11(:) + PRATE(:,147) = TPK%KTC12(:) + PRATE(:,148) = TPK%KTC13(:) + PRATE(:,149) = TPK%KTC14(:) + PRATE(:,150) = TPK%KTC15(:) + PRATE(:,151) = TPK%KTC16(:) + PRATE(:,152) = TPK%KTC17(:) + PRATE(:,153) = TPK%KTC18(:) + PRATE(:,154) = TPK%KTC19(:) + PRATE(:,155) = TPK%KTC20(:) + PRATE(:,156) = TPK%KTC21(:) + PRATE(:,157) = TPK%KTC22(:) + PRATE(:,158) = TPK%KTC23(:) + PRATE(:,159) = TPK%KTC24(:) + PRATE(:,160) = TPK%KTC25(:) + PRATE(:,161) = TPK%KTC26(:) + PRATE(:,162) = TPK%KTC27(:) + PRATE(:,163) = TPK%KTC28(:) + PRATE(:,164) = TPK%KTC29(:) + PRATE(:,165) = TPK%KTC30(:) + PRATE(:,166) = TPK%KTC31(:) + PRATE(:,167) = TPK%KTC32(:) + PRATE(:,168) = TPK%KTC33(:) + PRATE(:,169) = TPK%KTC34(:) + PRATE(:,170) = TPK%KTC35(:) + PRATE(:,171) = TPK%KTC36(:) + PRATE(:,172) = TPK%KTC37(:) + PRATE(:,173) = TPK%KTC38(:) + PRATE(:,174) = TPK%KTC39(:) + PRATE(:,175) = TPK%KTC40(:) + PRATE(:,176) = TPK%KTR1(:) + PRATE(:,177) = TPK%KTR2(:) + PRATE(:,178) = TPK%KTR3(:) + PRATE(:,179) = TPK%KTR4(:) + PRATE(:,180) = TPK%KTR5(:) + PRATE(:,181) = TPK%KTR6(:) + PRATE(:,182) = TPK%KTR7(:) + PRATE(:,183) = TPK%KTR8(:) + PRATE(:,184) = TPK%KTR9(:) + PRATE(:,185) = TPK%KTR10(:) + PRATE(:,186) = TPK%KTR11(:) + PRATE(:,187) = TPK%KTR12(:) + PRATE(:,188) = TPK%KTR13(:) + PRATE(:,189) = TPK%KTR14(:) + PRATE(:,190) = TPK%KTR15(:) + PRATE(:,191) = TPK%KTR16(:) + PRATE(:,192) = TPK%KTR17(:) + PRATE(:,193) = TPK%KTR18(:) + PRATE(:,194) = TPK%KTR19(:) + PRATE(:,195) = TPK%KTR20(:) + PRATE(:,196) = TPK%KTR21(:) + PRATE(:,197) = TPK%KTR22(:) + PRATE(:,198) = TPK%KTR23(:) + PRATE(:,199) = TPK%KTR24(:) + PRATE(:,200) = TPK%KTR25(:) + PRATE(:,201) = TPK%KTR26(:) + PRATE(:,202) = TPK%KTR27(:) + PRATE(:,203) = TPK%KTR28(:) + PRATE(:,204) = TPK%KTR29(:) + PRATE(:,205) = TPK%KTR30(:) + PRATE(:,206) = TPK%KTR31(:) + PRATE(:,207) = TPK%KTR32(:) + PRATE(:,208) = TPK%KTR33(:) + PRATE(:,209) = TPK%KTR34(:) + PRATE(:,210) = TPK%KTR35(:) + PRATE(:,211) = TPK%KTR36(:) + PRATE(:,212) = TPK%KTR37(:) + PRATE(:,213) = TPK%KTR38(:) + PRATE(:,214) = TPK%KTR39(:) + PRATE(:,215) = TPK%KTR40(:) + PRATE(:,216) = TPK%KC1(:) + PRATE(:,217) = TPK%KC2(:) + PRATE(:,218) = TPK%KC3(:) + PRATE(:,219) = TPK%KC4(:) + PRATE(:,220) = TPK%KC5(:) + PRATE(:,221) = TPK%KC6(:) + PRATE(:,222) = TPK%KC7(:) + PRATE(:,223) = TPK%KC8(:) + PRATE(:,224) = TPK%KC9(:) + PRATE(:,225) = TPK%KC10(:) + PRATE(:,226) = TPK%KC11(:) + PRATE(:,227) = TPK%KC12(:) + PRATE(:,228) = TPK%KC13(:) + PRATE(:,229) = TPK%KC14(:) + PRATE(:,230) = TPK%KC15(:) + PRATE(:,231) = TPK%KC16(:) + PRATE(:,232) = TPK%KC17(:) + PRATE(:,233) = TPK%KC18(:) + PRATE(:,234) = TPK%KC19(:) + PRATE(:,235) = TPK%KC20(:) + PRATE(:,236) = TPK%KC21(:) + PRATE(:,237) = TPK%KC22(:) + PRATE(:,238) = TPK%KC23(:) + PRATE(:,239) = TPK%KC24(:) + PRATE(:,240) = TPK%KC25(:) + PRATE(:,241) = TPK%KC26(:) + PRATE(:,242) = TPK%KC27(:) + PRATE(:,243) = TPK%KC28(:) + PRATE(:,244) = TPK%KC29(:) + PRATE(:,245) = TPK%KC30(:) + PRATE(:,246) = TPK%KR1(:) + PRATE(:,247) = TPK%KR2(:) + PRATE(:,248) = TPK%KR3(:) + PRATE(:,249) = TPK%KR4(:) + PRATE(:,250) = TPK%KR5(:) + PRATE(:,251) = TPK%KR6(:) + PRATE(:,252) = TPK%KR7(:) + PRATE(:,253) = TPK%KR8(:) + PRATE(:,254) = TPK%KR9(:) + PRATE(:,255) = TPK%KR10(:) + PRATE(:,256) = TPK%KR11(:) + PRATE(:,257) = TPK%KR12(:) + PRATE(:,258) = TPK%KR13(:) + PRATE(:,259) = TPK%KR14(:) + PRATE(:,260) = TPK%KR15(:) + PRATE(:,261) = TPK%KR16(:) + PRATE(:,262) = TPK%KR17(:) + PRATE(:,263) = TPK%KR18(:) + PRATE(:,264) = TPK%KR19(:) + PRATE(:,265) = TPK%KR20(:) + PRATE(:,266) = TPK%KR21(:) + PRATE(:,267) = TPK%KR22(:) + PRATE(:,268) = TPK%KR23(:) + PRATE(:,269) = TPK%KR24(:) + PRATE(:,270) = TPK%KR25(:) + PRATE(:,271) = TPK%KR26(:) + PRATE(:,272) = TPK%KR27(:) + PRATE(:,273) = TPK%KR28(:) + PRATE(:,274) = TPK%KR29(:) + PRATE(:,275) = TPK%KR30(:) END IF RETURN END SUBROUTINE CH_GET_RATES @@ -29808,7 +30421,7 @@ TPK%O3P(:)=(TPK%K001(:)*PCONC(:,JP_NO2)+TPK%K003(:)*PCONC(:,JP_O3)+TPK%K008(:)*P &0.09000*TPK%K080(:)*PCONC(:,JP_BIO)*PCONC(:,JP_O3))/& &(TPK%K018(:)*TPK%O2(:)+TPK%K019(:)*PCONC(:,JP_O3)+TPK%K029(:)*PCONC(:,JP_NO)+& &TPK%K030(:)*PCONC(:,JP_NO2)+TPK%K031(:)*PCONC(:,JP_NO2)+TPK%K054(:)*PCONC(:,JP_BIO)+& - &TPK%K055(:)*PCONC(:,JP_CARBO)) + &TPK%K055(:)*PCONC(:,JP_CARBO)+TPK%K134(:)*PCONC(:,JP_DMS)) ! /END_CODE/ PTERMS(:,:,:) = 0.0 CALL SUBT0 @@ -29886,7 +30499,7 @@ SUBROUTINE SUBT0 PTERMS(:,7,4) = -TPK%K004(:)*PCONC(:,7) ! !PTERMS(OH,K004) = +K004*<HONO> - PTERMS(:,14,4) = +TPK%K004(:)*PCONC(:,7) + PTERMS(:,15,4) = +TPK%K004(:)*PCONC(:,7) ! !PTERMS(NO2,K005) = +K005*<HNO3> PTERMS(:,4,5) = +TPK%K005(:)*PCONC(:,8) @@ -29895,7 +30508,7 @@ SUBROUTINE SUBT0 PTERMS(:,8,5) = -TPK%K005(:)*PCONC(:,8) ! !PTERMS(OH,K005) = +K005*<HNO3> - PTERMS(:,14,5) = +TPK%K005(:)*PCONC(:,8) + PTERMS(:,15,5) = +TPK%K005(:)*PCONC(:,8) ! !PTERMS(NO2,K006) = +0.65*K006*<HNO4> PTERMS(:,4,6) = +0.65*TPK%K006(:)*PCONC(:,9) @@ -29907,10 +30520,10 @@ SUBROUTINE SUBT0 PTERMS(:,9,6) = -TPK%K006(:)*PCONC(:,9) ! !PTERMS(OH,K006) = +0.35*K006*<HNO4> - PTERMS(:,14,6) = +0.35*TPK%K006(:)*PCONC(:,9) + PTERMS(:,15,6) = +0.35*TPK%K006(:)*PCONC(:,9) ! !PTERMS(HO2,K006) = +0.65*K006*<HNO4> - PTERMS(:,15,6) = +0.65*TPK%K006(:)*PCONC(:,9) + PTERMS(:,16,6) = +0.65*TPK%K006(:)*PCONC(:,9) ! !PTERMS(NO,K007) = +K007*<NO3> PTERMS(:,3,7) = +TPK%K007(:)*PCONC(:,5) @@ -29936,64 +30549,64 @@ SUBROUTINE SUBT1 !Indices 21 a 40 ! !PTERMS(OH,K009) = +K009*<H2O2> - PTERMS(:,14,9) = +TPK%K009(:)*PCONC(:,2) + PTERMS(:,15,9) = +TPK%K009(:)*PCONC(:,2) ! !PTERMS(CO,K010) = +K010*<HCHO> - PTERMS(:,13,10) = +TPK%K010(:)*PCONC(:,22) + PTERMS(:,14,10) = +TPK%K010(:)*PCONC(:,23) ! !PTERMS(HCHO,K010) = -K010*<HCHO> - PTERMS(:,22,10) = -TPK%K010(:)*PCONC(:,22) + PTERMS(:,23,10) = -TPK%K010(:)*PCONC(:,23) ! !PTERMS(CO,K011) = +K011*<HCHO> - PTERMS(:,13,11) = +TPK%K011(:)*PCONC(:,22) + PTERMS(:,14,11) = +TPK%K011(:)*PCONC(:,23) ! !PTERMS(HO2,K011) = +K011*<HCHO> - PTERMS(:,15,11) = +TPK%K011(:)*PCONC(:,22) + PTERMS(:,16,11) = +TPK%K011(:)*PCONC(:,23) ! !PTERMS(HCHO,K011) = -K011*<HCHO> - PTERMS(:,22,11) = -TPK%K011(:)*PCONC(:,22) + PTERMS(:,23,11) = -TPK%K011(:)*PCONC(:,23) ! !PTERMS(CO,K012) = +K012*<ALD> - PTERMS(:,13,12) = +TPK%K012(:)*PCONC(:,23) + PTERMS(:,14,12) = +TPK%K012(:)*PCONC(:,24) ! !PTERMS(HO2,K012) = +K012*<ALD> - PTERMS(:,15,12) = +TPK%K012(:)*PCONC(:,23) + PTERMS(:,16,12) = +TPK%K012(:)*PCONC(:,24) ! !PTERMS(ALD,K012) = -K012*<ALD> - PTERMS(:,23,12) = -TPK%K012(:)*PCONC(:,23) + PTERMS(:,24,12) = -TPK%K012(:)*PCONC(:,24) ! !PTERMS(MO2,K012) = +K012*<ALD> - PTERMS(:,32,12) = +TPK%K012(:)*PCONC(:,23) + PTERMS(:,33,12) = +TPK%K012(:)*PCONC(:,24) ! !PTERMS(OH,K013) = +K013*<OP1> - PTERMS(:,14,13) = +TPK%K013(:)*PCONC(:,28) + PTERMS(:,15,13) = +TPK%K013(:)*PCONC(:,29) ! !PTERMS(HO2,K013) = +K013*<OP1> - PTERMS(:,15,13) = +TPK%K013(:)*PCONC(:,28) + PTERMS(:,16,13) = +TPK%K013(:)*PCONC(:,29) ! !PTERMS(HCHO,K013) = +K013*<OP1> - PTERMS(:,22,13) = +TPK%K013(:)*PCONC(:,28) + PTERMS(:,23,13) = +TPK%K013(:)*PCONC(:,29) ! !PTERMS(OP1,K013) = -K013*<OP1> - PTERMS(:,28,13) = -TPK%K013(:)*PCONC(:,28) + PTERMS(:,29,13) = -TPK%K013(:)*PCONC(:,29) ! !PTERMS(OH,K014) = +K014*<OP2> - PTERMS(:,14,14) = +TPK%K014(:)*PCONC(:,29) + PTERMS(:,15,14) = +TPK%K014(:)*PCONC(:,30) ! !PTERMS(HO2,K014) = +0.96205*K014*<OP2> - PTERMS(:,15,14) = +0.96205*TPK%K014(:)*PCONC(:,29) + PTERMS(:,16,14) = +0.96205*TPK%K014(:)*PCONC(:,30) ! !PTERMS(ALD,K014) = +0.96205*K014*<OP2> - PTERMS(:,23,14) = +0.96205*TPK%K014(:)*PCONC(:,29) + PTERMS(:,24,14) = +0.96205*TPK%K014(:)*PCONC(:,30) ! !PTERMS(OP2,K014) = -K014*<OP2> - PTERMS(:,29,14) = -TPK%K014(:)*PCONC(:,29) + PTERMS(:,30,14) = -TPK%K014(:)*PCONC(:,30) ! !PTERMS(MO2,K014) = +0.03795*K014*<OP2> - PTERMS(:,32,14) = +0.03795*TPK%K014(:)*PCONC(:,29) + PTERMS(:,33,14) = +0.03795*TPK%K014(:)*PCONC(:,30) ! !PTERMS(KET,K015) = -K015*<KET> - PTERMS(:,24,15) = -TPK%K015(:)*PCONC(:,24) + PTERMS(:,25,15) = -TPK%K015(:)*PCONC(:,25) ! ! RETURN @@ -30004,40 +30617,40 @@ SUBROUTINE SUBT2 !Indices 41 a 60 ! !PTERMS(ALKAP,K015) = +1.00000*K015*<KET> - PTERMS(:,33,15) = +1.00000*TPK%K015(:)*PCONC(:,24) + PTERMS(:,34,15) = +1.00000*TPK%K015(:)*PCONC(:,25) ! !PTERMS(CARBOP,K015) = +1.00000*K015*<KET> - PTERMS(:,39,15) = +1.00000*TPK%K015(:)*PCONC(:,24) + PTERMS(:,40,15) = +1.00000*TPK%K015(:)*PCONC(:,25) ! !PTERMS(CO,K016) = +0.91924*K016*<CARBO> - PTERMS(:,13,16) = +0.91924*TPK%K016(:)*PCONC(:,25) + PTERMS(:,14,16) = +0.91924*TPK%K016(:)*PCONC(:,26) ! !PTERMS(HO2,K016) = +0.75830*K016*<CARBO> - PTERMS(:,15,16) = +0.75830*TPK%K016(:)*PCONC(:,25) + PTERMS(:,16,16) = +0.75830*TPK%K016(:)*PCONC(:,26) ! !PTERMS(HCHO,K016) = +0.06517*K016*<CARBO> - PTERMS(:,22,16) = +0.06517*TPK%K016(:)*PCONC(:,25) + PTERMS(:,23,16) = +0.06517*TPK%K016(:)*PCONC(:,26) ! !PTERMS(CARBO,K016) = -K016*<CARBO> - PTERMS(:,25,16) = -TPK%K016(:)*PCONC(:,25) + PTERMS(:,26,16) = -TPK%K016(:)*PCONC(:,26) ! !PTERMS(CARBOP,K016) = +0.69622*K016*<CARBO> - PTERMS(:,39,16) = +0.69622*TPK%K016(:)*PCONC(:,25) + PTERMS(:,40,16) = +0.69622*TPK%K016(:)*PCONC(:,26) ! !PTERMS(NO2,K017) = +K017*<ONIT> - PTERMS(:,4,17) = +TPK%K017(:)*PCONC(:,26) + PTERMS(:,4,17) = +TPK%K017(:)*PCONC(:,27) ! !PTERMS(HO2,K017) = +K017*<ONIT> - PTERMS(:,15,17) = +TPK%K017(:)*PCONC(:,26) + PTERMS(:,16,17) = +TPK%K017(:)*PCONC(:,27) ! !PTERMS(ALD,K017) = +0.20*K017*<ONIT> - PTERMS(:,23,17) = +0.20*TPK%K017(:)*PCONC(:,26) + PTERMS(:,24,17) = +0.20*TPK%K017(:)*PCONC(:,27) ! !PTERMS(KET,K017) = +0.80*K017*<ONIT> - PTERMS(:,24,17) = +0.80*TPK%K017(:)*PCONC(:,26) + PTERMS(:,25,17) = +0.80*TPK%K017(:)*PCONC(:,27) ! !PTERMS(ONIT,K017) = -K017*<ONIT> - PTERMS(:,26,17) = -TPK%K017(:)*PCONC(:,26) + PTERMS(:,27,17) = -TPK%K017(:)*PCONC(:,27) ! !PTERMS(O3,K018) = +K018*<O3P>*<O2> PTERMS(:,1,18) = +TPK%K018(:)*TPK%O3P(:)*TPK%O2(:) @@ -30046,22 +30659,22 @@ SUBROUTINE SUBT2 PTERMS(:,1,19) = -TPK%K019(:)*TPK%O3P(:)*PCONC(:,1) ! !PTERMS(OH,K022) = +K022*<O1D>*<H2O> - PTERMS(:,14,22) = +TPK%K022(:)*TPK%O1D(:)*TPK%H2O(:) + PTERMS(:,15,22) = +TPK%K022(:)*TPK%O1D(:)*TPK%H2O(:) ! !PTERMS(O3,K023) = -K023*<O3>*<OH> - PTERMS(:,1,23) = -TPK%K023(:)*PCONC(:,1)*PCONC(:,14) + PTERMS(:,1,23) = -TPK%K023(:)*PCONC(:,1)*PCONC(:,15) ! !PTERMS(OH,K023) = -K023*<O3>*<OH> - PTERMS(:,14,23) = -TPK%K023(:)*PCONC(:,1)*PCONC(:,14) + PTERMS(:,15,23) = -TPK%K023(:)*PCONC(:,1)*PCONC(:,15) ! !PTERMS(HO2,K023) = +K023*<O3>*<OH> - PTERMS(:,15,23) = +TPK%K023(:)*PCONC(:,1)*PCONC(:,14) + PTERMS(:,16,23) = +TPK%K023(:)*PCONC(:,1)*PCONC(:,15) ! !PTERMS(O3,K024) = -K024*<O3>*<HO2> - PTERMS(:,1,24) = -TPK%K024(:)*PCONC(:,1)*PCONC(:,15) + PTERMS(:,1,24) = -TPK%K024(:)*PCONC(:,1)*PCONC(:,16) ! !PTERMS(OH,K024) = +K024*<O3>*<HO2> - PTERMS(:,14,24) = +TPK%K024(:)*PCONC(:,1)*PCONC(:,15) + PTERMS(:,15,24) = +TPK%K024(:)*PCONC(:,1)*PCONC(:,16) ! ! RETURN @@ -30072,34 +30685,34 @@ SUBROUTINE SUBT3 !Indices 61 a 80 ! !PTERMS(HO2,K024) = -K024*<O3>*<HO2> - PTERMS(:,15,24) = -TPK%K024(:)*PCONC(:,1)*PCONC(:,15) + PTERMS(:,16,24) = -TPK%K024(:)*PCONC(:,1)*PCONC(:,16) ! !PTERMS(OH,K025) = -K025*<OH>*<HO2> - PTERMS(:,14,25) = -TPK%K025(:)*PCONC(:,14)*PCONC(:,15) + PTERMS(:,15,25) = -TPK%K025(:)*PCONC(:,15)*PCONC(:,16) ! !PTERMS(HO2,K025) = -K025*<OH>*<HO2> - PTERMS(:,15,25) = -TPK%K025(:)*PCONC(:,14)*PCONC(:,15) + PTERMS(:,16,25) = -TPK%K025(:)*PCONC(:,15)*PCONC(:,16) ! !PTERMS(H2O2,K026) = -K026*<H2O2>*<OH> - PTERMS(:,2,26) = -TPK%K026(:)*PCONC(:,2)*PCONC(:,14) + PTERMS(:,2,26) = -TPK%K026(:)*PCONC(:,2)*PCONC(:,15) ! !PTERMS(OH,K026) = -K026*<H2O2>*<OH> - PTERMS(:,14,26) = -TPK%K026(:)*PCONC(:,2)*PCONC(:,14) + PTERMS(:,15,26) = -TPK%K026(:)*PCONC(:,2)*PCONC(:,15) ! !PTERMS(HO2,K026) = +K026*<H2O2>*<OH> - PTERMS(:,15,26) = +TPK%K026(:)*PCONC(:,2)*PCONC(:,14) + PTERMS(:,16,26) = +TPK%K026(:)*PCONC(:,2)*PCONC(:,15) ! !PTERMS(H2O2,K027) = +K027*<HO2>*<HO2> - PTERMS(:,2,27) = +TPK%K027(:)*PCONC(:,15)*PCONC(:,15) + PTERMS(:,2,27) = +TPK%K027(:)*PCONC(:,16)*PCONC(:,16) ! !PTERMS(HO2,K027) = -K027*<HO2>*<HO2> - PTERMS(:,15,27) = -TPK%K027(:)*PCONC(:,15)*PCONC(:,15) + PTERMS(:,16,27) = -TPK%K027(:)*PCONC(:,16)*PCONC(:,16) ! !PTERMS(H2O2,K028) = +K028*<HO2>*<HO2>*<H2O> - PTERMS(:,2,28) = +TPK%K028(:)*PCONC(:,15)*PCONC(:,15)*TPK%H2O(:) + PTERMS(:,2,28) = +TPK%K028(:)*PCONC(:,16)*PCONC(:,16)*TPK%H2O(:) ! !PTERMS(HO2,K028) = -K028*<HO2>*<HO2>*<H2O> - PTERMS(:,15,28) = -TPK%K028(:)*PCONC(:,15)*PCONC(:,15)*TPK%H2O(:) + PTERMS(:,16,28) = -TPK%K028(:)*PCONC(:,16)*PCONC(:,16)*TPK%H2O(:) ! !PTERMS(NO,K029) = -K029*<O3P>*<NO> PTERMS(:,3,29) = -TPK%K029(:)*TPK%O3P(:)*PCONC(:,3) @@ -30120,16 +30733,16 @@ SUBROUTINE SUBT3 PTERMS(:,5,31) = +TPK%K031(:)*TPK%O3P(:)*PCONC(:,4) ! !PTERMS(NO,K032) = -K032*<OH>*<NO> - PTERMS(:,3,32) = -TPK%K032(:)*PCONC(:,14)*PCONC(:,3) + PTERMS(:,3,32) = -TPK%K032(:)*PCONC(:,15)*PCONC(:,3) ! !PTERMS(HONO,K032) = +K032*<OH>*<NO> - PTERMS(:,7,32) = +TPK%K032(:)*PCONC(:,14)*PCONC(:,3) + PTERMS(:,7,32) = +TPK%K032(:)*PCONC(:,15)*PCONC(:,3) ! !PTERMS(OH,K032) = -K032*<OH>*<NO> - PTERMS(:,14,32) = -TPK%K032(:)*PCONC(:,14)*PCONC(:,3) + PTERMS(:,15,32) = -TPK%K032(:)*PCONC(:,15)*PCONC(:,3) ! !PTERMS(NO2,K033) = -K033*<OH>*<NO2> - PTERMS(:,4,33) = -TPK%K033(:)*PCONC(:,14)*PCONC(:,4) + PTERMS(:,4,33) = -TPK%K033(:)*PCONC(:,15)*PCONC(:,4) ! ! RETURN @@ -30140,43 +30753,43 @@ SUBROUTINE SUBT4 !Indices 81 a 100 ! !PTERMS(HNO3,K033) = +K033*<OH>*<NO2> - PTERMS(:,8,33) = +TPK%K033(:)*PCONC(:,14)*PCONC(:,4) + PTERMS(:,8,33) = +TPK%K033(:)*PCONC(:,15)*PCONC(:,4) ! !PTERMS(OH,K033) = -K033*<OH>*<NO2> - PTERMS(:,14,33) = -TPK%K033(:)*PCONC(:,14)*PCONC(:,4) + PTERMS(:,15,33) = -TPK%K033(:)*PCONC(:,15)*PCONC(:,4) ! !PTERMS(NO2,K034) = +K034*<OH>*<NO3> - PTERMS(:,4,34) = +TPK%K034(:)*PCONC(:,14)*PCONC(:,5) + PTERMS(:,4,34) = +TPK%K034(:)*PCONC(:,15)*PCONC(:,5) ! !PTERMS(NO3,K034) = -K034*<OH>*<NO3> - PTERMS(:,5,34) = -TPK%K034(:)*PCONC(:,14)*PCONC(:,5) + PTERMS(:,5,34) = -TPK%K034(:)*PCONC(:,15)*PCONC(:,5) ! !PTERMS(OH,K034) = -K034*<OH>*<NO3> - PTERMS(:,14,34) = -TPK%K034(:)*PCONC(:,14)*PCONC(:,5) + PTERMS(:,15,34) = -TPK%K034(:)*PCONC(:,15)*PCONC(:,5) ! !PTERMS(HO2,K034) = +K034*<OH>*<NO3> - PTERMS(:,15,34) = +TPK%K034(:)*PCONC(:,14)*PCONC(:,5) + PTERMS(:,16,34) = +TPK%K034(:)*PCONC(:,15)*PCONC(:,5) ! !PTERMS(NO,K035) = -K035*<HO2>*<NO> - PTERMS(:,3,35) = -TPK%K035(:)*PCONC(:,15)*PCONC(:,3) + PTERMS(:,3,35) = -TPK%K035(:)*PCONC(:,16)*PCONC(:,3) ! !PTERMS(NO2,K035) = +K035*<HO2>*<NO> - PTERMS(:,4,35) = +TPK%K035(:)*PCONC(:,15)*PCONC(:,3) + PTERMS(:,4,35) = +TPK%K035(:)*PCONC(:,16)*PCONC(:,3) ! !PTERMS(OH,K035) = +K035*<HO2>*<NO> - PTERMS(:,14,35) = +TPK%K035(:)*PCONC(:,15)*PCONC(:,3) + PTERMS(:,15,35) = +TPK%K035(:)*PCONC(:,16)*PCONC(:,3) ! !PTERMS(HO2,K035) = -K035*<HO2>*<NO> - PTERMS(:,15,35) = -TPK%K035(:)*PCONC(:,15)*PCONC(:,3) + PTERMS(:,16,35) = -TPK%K035(:)*PCONC(:,16)*PCONC(:,3) ! !PTERMS(NO2,K036) = -K036*<HO2>*<NO2> - PTERMS(:,4,36) = -TPK%K036(:)*PCONC(:,15)*PCONC(:,4) + PTERMS(:,4,36) = -TPK%K036(:)*PCONC(:,16)*PCONC(:,4) ! !PTERMS(HNO4,K036) = +K036*<HO2>*<NO2> - PTERMS(:,9,36) = +TPK%K036(:)*PCONC(:,15)*PCONC(:,4) + PTERMS(:,9,36) = +TPK%K036(:)*PCONC(:,16)*PCONC(:,4) ! !PTERMS(HO2,K036) = -K036*<HO2>*<NO2> - PTERMS(:,15,36) = -TPK%K036(:)*PCONC(:,15)*PCONC(:,4) + PTERMS(:,16,36) = -TPK%K036(:)*PCONC(:,16)*PCONC(:,4) ! !PTERMS(NO2,K037) = +K037*<HNO4> PTERMS(:,4,37) = +TPK%K037(:)*PCONC(:,9) @@ -30185,19 +30798,19 @@ SUBROUTINE SUBT4 PTERMS(:,9,37) = -TPK%K037(:)*PCONC(:,9) ! !PTERMS(HO2,K037) = +K037*<HNO4> - PTERMS(:,15,37) = +TPK%K037(:)*PCONC(:,9) + PTERMS(:,16,37) = +TPK%K037(:)*PCONC(:,9) ! !PTERMS(NO2,K038) = +0.7*K038*<HO2>*<NO3> - PTERMS(:,4,38) = +0.7*TPK%K038(:)*PCONC(:,15)*PCONC(:,5) + PTERMS(:,4,38) = +0.7*TPK%K038(:)*PCONC(:,16)*PCONC(:,5) ! !PTERMS(NO3,K038) = -K038*<HO2>*<NO3> - PTERMS(:,5,38) = -TPK%K038(:)*PCONC(:,15)*PCONC(:,5) + PTERMS(:,5,38) = -TPK%K038(:)*PCONC(:,16)*PCONC(:,5) ! !PTERMS(HNO3,K038) = +0.3*K038*<HO2>*<NO3> - PTERMS(:,8,38) = +0.3*TPK%K038(:)*PCONC(:,15)*PCONC(:,5) + PTERMS(:,8,38) = +0.3*TPK%K038(:)*PCONC(:,16)*PCONC(:,5) ! !PTERMS(OH,K038) = +0.7*K038*<HO2>*<NO3> - PTERMS(:,14,38) = +0.7*TPK%K038(:)*PCONC(:,15)*PCONC(:,5) + PTERMS(:,15,38) = +0.7*TPK%K038(:)*PCONC(:,16)*PCONC(:,5) ! ! RETURN @@ -30208,34 +30821,34 @@ SUBROUTINE SUBT5 !Indices 101 a 120 ! !PTERMS(HO2,K038) = -K038*<HO2>*<NO3> - PTERMS(:,15,38) = -TPK%K038(:)*PCONC(:,15)*PCONC(:,5) + PTERMS(:,16,38) = -TPK%K038(:)*PCONC(:,16)*PCONC(:,5) ! !PTERMS(NO2,K039) = +K039*<OH>*<HONO> - PTERMS(:,4,39) = +TPK%K039(:)*PCONC(:,14)*PCONC(:,7) + PTERMS(:,4,39) = +TPK%K039(:)*PCONC(:,15)*PCONC(:,7) ! !PTERMS(HONO,K039) = -K039*<OH>*<HONO> - PTERMS(:,7,39) = -TPK%K039(:)*PCONC(:,14)*PCONC(:,7) + PTERMS(:,7,39) = -TPK%K039(:)*PCONC(:,15)*PCONC(:,7) ! !PTERMS(OH,K039) = -K039*<OH>*<HONO> - PTERMS(:,14,39) = -TPK%K039(:)*PCONC(:,14)*PCONC(:,7) + PTERMS(:,15,39) = -TPK%K039(:)*PCONC(:,15)*PCONC(:,7) ! !PTERMS(NO3,K040) = +K040*<OH>*<HNO3> - PTERMS(:,5,40) = +TPK%K040(:)*PCONC(:,14)*PCONC(:,8) + PTERMS(:,5,40) = +TPK%K040(:)*PCONC(:,15)*PCONC(:,8) ! !PTERMS(HNO3,K040) = -K040*<OH>*<HNO3> - PTERMS(:,8,40) = -TPK%K040(:)*PCONC(:,14)*PCONC(:,8) + PTERMS(:,8,40) = -TPK%K040(:)*PCONC(:,15)*PCONC(:,8) ! !PTERMS(OH,K040) = -K040*<OH>*<HNO3> - PTERMS(:,14,40) = -TPK%K040(:)*PCONC(:,14)*PCONC(:,8) + PTERMS(:,15,40) = -TPK%K040(:)*PCONC(:,15)*PCONC(:,8) ! !PTERMS(NO2,K041) = +K041*<OH>*<HNO4> - PTERMS(:,4,41) = +TPK%K041(:)*PCONC(:,14)*PCONC(:,9) + PTERMS(:,4,41) = +TPK%K041(:)*PCONC(:,15)*PCONC(:,9) ! !PTERMS(HNO4,K041) = -K041*<OH>*<HNO4> - PTERMS(:,9,41) = -TPK%K041(:)*PCONC(:,14)*PCONC(:,9) + PTERMS(:,9,41) = -TPK%K041(:)*PCONC(:,15)*PCONC(:,9) ! !PTERMS(OH,K041) = -K041*<OH>*<HNO4> - PTERMS(:,14,41) = -TPK%K041(:)*PCONC(:,14)*PCONC(:,9) + PTERMS(:,15,41) = -TPK%K041(:)*PCONC(:,15)*PCONC(:,9) ! !PTERMS(O3,K042) = -K042*<O3>*<NO> PTERMS(:,1,42) = -TPK%K042(:)*PCONC(:,1)*PCONC(:,3) @@ -30312,28 +30925,28 @@ SUBROUTINE SUBT6 PTERMS(:,5,49) = -TPK%K049(:)*PCONC(:,5)*PCONC(:,5) ! !PTERMS(NH3,K050) = -K050*<NH3>*<OH> - PTERMS(:,10,50) = -TPK%K050(:)*PCONC(:,10)*PCONC(:,14) + PTERMS(:,10,50) = -TPK%K050(:)*PCONC(:,10)*PCONC(:,15) ! !PTERMS(OH,K050) = -K050*<NH3>*<OH> - PTERMS(:,14,50) = -TPK%K050(:)*PCONC(:,10)*PCONC(:,14) + PTERMS(:,15,50) = -TPK%K050(:)*PCONC(:,10)*PCONC(:,15) ! !PTERMS(OH,K051) = -K051*<OH>*<H2> - PTERMS(:,14,51) = -TPK%K051(:)*PCONC(:,14)*TPK%H2(:) + PTERMS(:,15,51) = -TPK%K051(:)*PCONC(:,15)*TPK%H2(:) ! !PTERMS(HO2,K051) = +K051*<OH>*<H2> - PTERMS(:,15,51) = +TPK%K051(:)*PCONC(:,14)*TPK%H2(:) + PTERMS(:,16,51) = +TPK%K051(:)*PCONC(:,15)*TPK%H2(:) ! !PTERMS(SO2,K052) = -K052*<OH>*<SO2> - PTERMS(:,11,52) = -TPK%K052(:)*PCONC(:,14)*PCONC(:,11) + PTERMS(:,12,52) = -TPK%K052(:)*PCONC(:,15)*PCONC(:,12) ! !PTERMS(SULF,K052) = +K052*<OH>*<SO2> - PTERMS(:,12,52) = +TPK%K052(:)*PCONC(:,14)*PCONC(:,11) + PTERMS(:,13,52) = +TPK%K052(:)*PCONC(:,15)*PCONC(:,12) ! !PTERMS(OH,K052) = -K052*<OH>*<SO2> - PTERMS(:,14,52) = -TPK%K052(:)*PCONC(:,14)*PCONC(:,11) + PTERMS(:,15,52) = -TPK%K052(:)*PCONC(:,15)*PCONC(:,12) ! !PTERMS(HO2,K052) = +K052*<OH>*<SO2> - PTERMS(:,15,52) = +TPK%K052(:)*PCONC(:,14)*PCONC(:,11) + PTERMS(:,16,52) = +TPK%K052(:)*PCONC(:,15)*PCONC(:,12) ! ! RETURN @@ -30344,64 +30957,64 @@ SUBROUTINE SUBT7 !Indices 141 a 160 ! !PTERMS(CO,K053) = -K053*<CO>*<OH> - PTERMS(:,13,53) = -TPK%K053(:)*PCONC(:,13)*PCONC(:,14) + PTERMS(:,14,53) = -TPK%K053(:)*PCONC(:,14)*PCONC(:,15) ! !PTERMS(OH,K053) = -K053*<CO>*<OH> - PTERMS(:,14,53) = -TPK%K053(:)*PCONC(:,13)*PCONC(:,14) + PTERMS(:,15,53) = -TPK%K053(:)*PCONC(:,14)*PCONC(:,15) ! !PTERMS(HO2,K053) = +K053*<CO>*<OH> - PTERMS(:,15,53) = +TPK%K053(:)*PCONC(:,13)*PCONC(:,14) + PTERMS(:,16,53) = +TPK%K053(:)*PCONC(:,14)*PCONC(:,15) ! !PTERMS(CO,K054) = +0.01*K054*<BIO>*<O3P> - PTERMS(:,13,54) = +0.01*TPK%K054(:)*PCONC(:,20)*TPK%O3P(:) + PTERMS(:,14,54) = +0.01*TPK%K054(:)*PCONC(:,21)*TPK%O3P(:) ! !PTERMS(OH,K054) = +0.02*K054*<BIO>*<O3P> - PTERMS(:,14,54) = +0.02*TPK%K054(:)*PCONC(:,20)*TPK%O3P(:) + PTERMS(:,15,54) = +0.02*TPK%K054(:)*PCONC(:,21)*TPK%O3P(:) ! !PTERMS(HO2,K054) = +0.28*K054*<BIO>*<O3P> - PTERMS(:,15,54) = +0.28*TPK%K054(:)*PCONC(:,20)*TPK%O3P(:) + PTERMS(:,16,54) = +0.28*TPK%K054(:)*PCONC(:,21)*TPK%O3P(:) ! !PTERMS(ALKE,K054) = +0.91868*K054*<BIO>*<O3P> - PTERMS(:,19,54) = +0.91868*TPK%K054(:)*PCONC(:,20)*TPK%O3P(:) + PTERMS(:,20,54) = +0.91868*TPK%K054(:)*PCONC(:,21)*TPK%O3P(:) ! !PTERMS(BIO,K054) = -K054*<BIO>*<O3P> - PTERMS(:,20,54) = -TPK%K054(:)*PCONC(:,20)*TPK%O3P(:) + PTERMS(:,21,54) = -TPK%K054(:)*PCONC(:,21)*TPK%O3P(:) ! !PTERMS(HCHO,K054) = +0.05*K054*<BIO>*<O3P> - PTERMS(:,22,54) = +0.05*TPK%K054(:)*PCONC(:,20)*TPK%O3P(:) + PTERMS(:,23,54) = +0.05*TPK%K054(:)*PCONC(:,21)*TPK%O3P(:) ! !PTERMS(CARBO,K054) = +0.13255*K054*<BIO>*<O3P> - PTERMS(:,25,54) = +0.13255*TPK%K054(:)*PCONC(:,20)*TPK%O3P(:) + PTERMS(:,26,54) = +0.13255*TPK%K054(:)*PCONC(:,21)*TPK%O3P(:) ! !PTERMS(XO2,K054) = +0.15*K054*<BIO>*<O3P> - PTERMS(:,41,54) = +0.15*TPK%K054(:)*PCONC(:,20)*TPK%O3P(:) + PTERMS(:,42,54) = +0.15*TPK%K054(:)*PCONC(:,21)*TPK%O3P(:) ! !PTERMS(ALD,K055) = +K055*<CARBO>*<O3P> - PTERMS(:,23,55) = +TPK%K055(:)*PCONC(:,25)*TPK%O3P(:) + PTERMS(:,24,55) = +TPK%K055(:)*PCONC(:,26)*TPK%O3P(:) ! !PTERMS(CARBO,K055) = -K055*<CARBO>*<O3P> - PTERMS(:,25,55) = -TPK%K055(:)*PCONC(:,25)*TPK%O3P(:) + PTERMS(:,26,55) = -TPK%K055(:)*PCONC(:,26)*TPK%O3P(:) ! !PTERMS(OH,K056) = -K056*<CH4>*<OH> - PTERMS(:,14,56) = -TPK%K056(:)*PCONC(:,16)*PCONC(:,14) + PTERMS(:,15,56) = -TPK%K056(:)*PCONC(:,17)*PCONC(:,15) ! !PTERMS(CH4,K056) = -K056*<CH4>*<OH> - PTERMS(:,16,56) = -TPK%K056(:)*PCONC(:,16)*PCONC(:,14) + PTERMS(:,17,56) = -TPK%K056(:)*PCONC(:,17)*PCONC(:,15) ! !PTERMS(MO2,K056) = +K056*<CH4>*<OH> - PTERMS(:,32,56) = +TPK%K056(:)*PCONC(:,16)*PCONC(:,14) + PTERMS(:,33,56) = +TPK%K056(:)*PCONC(:,17)*PCONC(:,15) ! !PTERMS(OH,K057) = -K057*<ETH>*<OH> - PTERMS(:,14,57) = -TPK%K057(:)*PCONC(:,17)*PCONC(:,14) + PTERMS(:,15,57) = -TPK%K057(:)*PCONC(:,18)*PCONC(:,15) ! !PTERMS(ETH,K057) = -K057*<ETH>*<OH> - PTERMS(:,17,57) = -TPK%K057(:)*PCONC(:,17)*PCONC(:,14) + PTERMS(:,18,57) = -TPK%K057(:)*PCONC(:,18)*PCONC(:,15) ! !PTERMS(ALKAP,K057) = +K057*<ETH>*<OH> - PTERMS(:,33,57) = +TPK%K057(:)*PCONC(:,17)*PCONC(:,14) + PTERMS(:,34,57) = +TPK%K057(:)*PCONC(:,18)*PCONC(:,15) ! !PTERMS(CO,K058) = +0.00878*K058*<ALKA>*<OH> - PTERMS(:,13,58) = +0.00878*TPK%K058(:)*PCONC(:,18)*PCONC(:,14) + PTERMS(:,14,58) = +0.00878*TPK%K058(:)*PCONC(:,19)*PCONC(:,15) ! ! RETURN @@ -30412,64 +31025,64 @@ SUBROUTINE SUBT8 !Indices 161 a 180 ! !PTERMS(OH,K058) = -K058*<ALKA>*<OH> - PTERMS(:,14,58) = -TPK%K058(:)*PCONC(:,18)*PCONC(:,14) + PTERMS(:,15,58) = -TPK%K058(:)*PCONC(:,19)*PCONC(:,15) ! !PTERMS(HO2,K058) = +0.12793*K058*<ALKA>*<OH> - PTERMS(:,15,58) = +0.12793*TPK%K058(:)*PCONC(:,18)*PCONC(:,14) + PTERMS(:,16,58) = +0.12793*TPK%K058(:)*PCONC(:,19)*PCONC(:,15) ! !PTERMS(ALKA,K058) = -K058*<ALKA>*<OH> - PTERMS(:,18,58) = -TPK%K058(:)*PCONC(:,18)*PCONC(:,14) + PTERMS(:,19,58) = -TPK%K058(:)*PCONC(:,19)*PCONC(:,15) ! !PTERMS(HCHO,K058) = +0.00140*K058*<ALKA>*<OH> - PTERMS(:,22,58) = +0.00140*TPK%K058(:)*PCONC(:,18)*PCONC(:,14) + PTERMS(:,23,58) = +0.00140*TPK%K058(:)*PCONC(:,19)*PCONC(:,15) ! !PTERMS(ALD,K058) = +0.08173*K058*<ALKA>*<OH> - PTERMS(:,23,58) = +0.08173*TPK%K058(:)*PCONC(:,18)*PCONC(:,14) + PTERMS(:,24,58) = +0.08173*TPK%K058(:)*PCONC(:,19)*PCONC(:,15) ! !PTERMS(KET,K058) = +0.03498*K058*<ALKA>*<OH> - PTERMS(:,24,58) = +0.03498*TPK%K058(:)*PCONC(:,18)*PCONC(:,14) + PTERMS(:,25,58) = +0.03498*TPK%K058(:)*PCONC(:,19)*PCONC(:,15) ! !PTERMS(CARBO,K058) = +0.00835*K058*<ALKA>*<OH> - PTERMS(:,25,58) = +0.00835*TPK%K058(:)*PCONC(:,18)*PCONC(:,14) + PTERMS(:,26,58) = +0.00835*TPK%K058(:)*PCONC(:,19)*PCONC(:,15) ! !PTERMS(ORA1,K058) = +0.00878*K058*<ALKA>*<OH> - PTERMS(:,30,58) = +0.00878*TPK%K058(:)*PCONC(:,18)*PCONC(:,14) + PTERMS(:,31,58) = +0.00878*TPK%K058(:)*PCONC(:,19)*PCONC(:,15) ! !PTERMS(ALKAP,K058) = +0.87811*K058*<ALKA>*<OH> - PTERMS(:,33,58) = +0.87811*TPK%K058(:)*PCONC(:,18)*PCONC(:,14) + PTERMS(:,34,58) = +0.87811*TPK%K058(:)*PCONC(:,19)*PCONC(:,15) ! !PTERMS(OH,K059) = -K059*<ALKE>*<OH> - PTERMS(:,14,59) = -TPK%K059(:)*PCONC(:,19)*PCONC(:,14) + PTERMS(:,15,59) = -TPK%K059(:)*PCONC(:,20)*PCONC(:,15) ! !PTERMS(ALKE,K059) = -K059*<ALKE>*<OH> - PTERMS(:,19,59) = -TPK%K059(:)*PCONC(:,19)*PCONC(:,14) + PTERMS(:,20,59) = -TPK%K059(:)*PCONC(:,20)*PCONC(:,15) ! !PTERMS(ALKEP,K059) = +1.02529*K059*<ALKE>*<OH> - PTERMS(:,34,59) = +1.02529*TPK%K059(:)*PCONC(:,19)*PCONC(:,14) + PTERMS(:,35,59) = +1.02529*TPK%K059(:)*PCONC(:,20)*PCONC(:,15) ! !PTERMS(BIOP,K059) = +0.00000*K059*<ALKE>*<OH> - PTERMS(:,35,59) = +0.00000*TPK%K059(:)*PCONC(:,19)*PCONC(:,14) + PTERMS(:,36,59) = +0.00000*TPK%K059(:)*PCONC(:,20)*PCONC(:,15) ! !PTERMS(OH,K060) = -K060*<BIO>*<OH> - PTERMS(:,14,60) = -TPK%K060(:)*PCONC(:,20)*PCONC(:,14) + PTERMS(:,15,60) = -TPK%K060(:)*PCONC(:,21)*PCONC(:,15) ! !PTERMS(BIO,K060) = -K060*<BIO>*<OH> - PTERMS(:,20,60) = -TPK%K060(:)*PCONC(:,20)*PCONC(:,14) + PTERMS(:,21,60) = -TPK%K060(:)*PCONC(:,21)*PCONC(:,15) ! !PTERMS(BIOP,K060) = +1.00000*K060*<BIO>*<OH> - PTERMS(:,35,60) = +1.00000*TPK%K060(:)*PCONC(:,20)*PCONC(:,14) + PTERMS(:,36,60) = +1.00000*TPK%K060(:)*PCONC(:,21)*PCONC(:,15) ! !PTERMS(OH,K061) = -K061*<ARO>*<OH> - PTERMS(:,14,61) = -TPK%K061(:)*PCONC(:,21)*PCONC(:,14) + PTERMS(:,15,61) = -TPK%K061(:)*PCONC(:,22)*PCONC(:,15) ! !PTERMS(HO2,K061) = +0.10318*K061*<ARO>*<OH> - PTERMS(:,15,61) = +0.10318*TPK%K061(:)*PCONC(:,21)*PCONC(:,14) + PTERMS(:,16,61) = +0.10318*TPK%K061(:)*PCONC(:,22)*PCONC(:,15) ! !PTERMS(ARO,K061) = -K061*<ARO>*<OH> - PTERMS(:,21,61) = -TPK%K061(:)*PCONC(:,21)*PCONC(:,14) + PTERMS(:,22,61) = -TPK%K061(:)*PCONC(:,22)*PCONC(:,15) ! !PTERMS(PHO,K061) = +0.00276*K061*<ARO>*<OH> - PTERMS(:,36,61) = +0.00276*TPK%K061(:)*PCONC(:,21)*PCONC(:,14) + PTERMS(:,37,61) = +0.00276*TPK%K061(:)*PCONC(:,22)*PCONC(:,15) ! ! RETURN @@ -30480,64 +31093,64 @@ SUBROUTINE SUBT9 !Indices 181 a 200 ! !PTERMS(ADD,K061) = +0.93968*K061*<ARO>*<OH> - PTERMS(:,37,61) = +0.93968*TPK%K061(:)*PCONC(:,21)*PCONC(:,14) + PTERMS(:,38,61) = +0.93968*TPK%K061(:)*PCONC(:,22)*PCONC(:,15) ! !PTERMS(XO2,K061) = +0.10318*K061*<ARO>*<OH> - PTERMS(:,41,61) = +0.10318*TPK%K061(:)*PCONC(:,21)*PCONC(:,14) + PTERMS(:,42,61) = +0.10318*TPK%K061(:)*PCONC(:,22)*PCONC(:,15) ! !PTERMS(CO,K062) = +K062*<HCHO>*<OH> - PTERMS(:,13,62) = +TPK%K062(:)*PCONC(:,22)*PCONC(:,14) + PTERMS(:,14,62) = +TPK%K062(:)*PCONC(:,23)*PCONC(:,15) ! !PTERMS(OH,K062) = -K062*<HCHO>*<OH> - PTERMS(:,14,62) = -TPK%K062(:)*PCONC(:,22)*PCONC(:,14) + PTERMS(:,15,62) = -TPK%K062(:)*PCONC(:,23)*PCONC(:,15) ! !PTERMS(HO2,K062) = +K062*<HCHO>*<OH> - PTERMS(:,15,62) = +TPK%K062(:)*PCONC(:,22)*PCONC(:,14) + PTERMS(:,16,62) = +TPK%K062(:)*PCONC(:,23)*PCONC(:,15) ! !PTERMS(HCHO,K062) = -K062*<HCHO>*<OH> - PTERMS(:,22,62) = -TPK%K062(:)*PCONC(:,22)*PCONC(:,14) + PTERMS(:,23,62) = -TPK%K062(:)*PCONC(:,23)*PCONC(:,15) ! !PTERMS(OH,K063) = -K063*<ALD>*<OH> - PTERMS(:,14,63) = -TPK%K063(:)*PCONC(:,23)*PCONC(:,14) + PTERMS(:,15,63) = -TPK%K063(:)*PCONC(:,24)*PCONC(:,15) ! !PTERMS(ALD,K063) = -K063*<ALD>*<OH> - PTERMS(:,23,63) = -TPK%K063(:)*PCONC(:,23)*PCONC(:,14) + PTERMS(:,24,63) = -TPK%K063(:)*PCONC(:,24)*PCONC(:,15) ! !PTERMS(CARBOP,K063) = +1.00000*K063*<ALD>*<OH> - PTERMS(:,39,63) = +1.00000*TPK%K063(:)*PCONC(:,23)*PCONC(:,14) + PTERMS(:,40,63) = +1.00000*TPK%K063(:)*PCONC(:,24)*PCONC(:,15) ! !PTERMS(OH,K064) = -K064*<KET>*<OH> - PTERMS(:,14,64) = -TPK%K064(:)*PCONC(:,24)*PCONC(:,14) + PTERMS(:,15,64) = -TPK%K064(:)*PCONC(:,25)*PCONC(:,15) ! !PTERMS(KET,K064) = -K064*<KET>*<OH> - PTERMS(:,24,64) = -TPK%K064(:)*PCONC(:,24)*PCONC(:,14) + PTERMS(:,25,64) = -TPK%K064(:)*PCONC(:,25)*PCONC(:,15) ! !PTERMS(CARBOP,K064) = +1.00000*K064*<KET>*<OH> - PTERMS(:,39,64) = +1.00000*TPK%K064(:)*PCONC(:,24)*PCONC(:,14) + PTERMS(:,40,64) = +1.00000*TPK%K064(:)*PCONC(:,25)*PCONC(:,15) ! !PTERMS(CO,K065) = +1.01732*K065*<CARBO>*<OH> - PTERMS(:,13,65) = +1.01732*TPK%K065(:)*PCONC(:,25)*PCONC(:,14) + PTERMS(:,14,65) = +1.01732*TPK%K065(:)*PCONC(:,26)*PCONC(:,15) ! !PTERMS(OH,K065) = -K065*<CARBO>*<OH> - PTERMS(:,14,65) = -TPK%K065(:)*PCONC(:,25)*PCONC(:,14) + PTERMS(:,15,65) = -TPK%K065(:)*PCONC(:,26)*PCONC(:,15) ! !PTERMS(HO2,K065) = +0.51208*K065*<CARBO>*<OH> - PTERMS(:,15,65) = +0.51208*TPK%K065(:)*PCONC(:,25)*PCONC(:,14) + PTERMS(:,16,65) = +0.51208*TPK%K065(:)*PCONC(:,26)*PCONC(:,15) ! !PTERMS(HCHO,K065) = +0.00000*K065*<CARBO>*<OH> - PTERMS(:,22,65) = +0.00000*TPK%K065(:)*PCONC(:,25)*PCONC(:,14) + PTERMS(:,23,65) = +0.00000*TPK%K065(:)*PCONC(:,26)*PCONC(:,15) ! !PTERMS(ALD,K065) = +0.06253*K065*<CARBO>*<OH> - PTERMS(:,23,65) = +0.06253*TPK%K065(:)*PCONC(:,25)*PCONC(:,14) + PTERMS(:,24,65) = +0.06253*TPK%K065(:)*PCONC(:,26)*PCONC(:,15) ! !PTERMS(KET,K065) = +0.00853*K065*<CARBO>*<OH> - PTERMS(:,24,65) = +0.00853*TPK%K065(:)*PCONC(:,25)*PCONC(:,14) + PTERMS(:,25,65) = +0.00853*TPK%K065(:)*PCONC(:,26)*PCONC(:,15) ! !PTERMS(CARBO,K065) = -K065*<CARBO>*<OH> - PTERMS(:,25,65) = -TPK%K065(:)*PCONC(:,25)*PCONC(:,14) + PTERMS(:,26,65) = -TPK%K065(:)*PCONC(:,26)*PCONC(:,15) ! !PTERMS(CARBOP,K065) = +0.51419*K065*<CARBO>*<OH> - PTERMS(:,39,65) = +0.51419*TPK%K065(:)*PCONC(:,25)*PCONC(:,14) + PTERMS(:,40,65) = +0.51419*TPK%K065(:)*PCONC(:,26)*PCONC(:,15) ! ! RETURN @@ -30548,64 +31161,64 @@ SUBROUTINE SUBT10 !Indices 201 a 220 ! !PTERMS(XO2,K065) = +0.10162*K065*<CARBO>*<OH> - PTERMS(:,41,65) = +0.10162*TPK%K065(:)*PCONC(:,25)*PCONC(:,14) + PTERMS(:,42,65) = +0.10162*TPK%K065(:)*PCONC(:,26)*PCONC(:,15) ! !PTERMS(OH,K066) = -K066*<ORA1>*<OH> - PTERMS(:,14,66) = -TPK%K066(:)*PCONC(:,30)*PCONC(:,14) + PTERMS(:,15,66) = -TPK%K066(:)*PCONC(:,31)*PCONC(:,15) ! !PTERMS(HO2,K066) = +K066*<ORA1>*<OH> - PTERMS(:,15,66) = +TPK%K066(:)*PCONC(:,30)*PCONC(:,14) + PTERMS(:,16,66) = +TPK%K066(:)*PCONC(:,31)*PCONC(:,15) ! !PTERMS(ORA1,K066) = -K066*<ORA1>*<OH> - PTERMS(:,30,66) = -TPK%K066(:)*PCONC(:,30)*PCONC(:,14) + PTERMS(:,31,66) = -TPK%K066(:)*PCONC(:,31)*PCONC(:,15) ! !PTERMS(OH,K067) = -K067*<ORA2>*<OH> - PTERMS(:,14,67) = -TPK%K067(:)*PCONC(:,31)*PCONC(:,14) + PTERMS(:,15,67) = -TPK%K067(:)*PCONC(:,32)*PCONC(:,15) ! !PTERMS(ORA2,K067) = -K067*<ORA2>*<OH> - PTERMS(:,31,67) = -TPK%K067(:)*PCONC(:,31)*PCONC(:,14) + PTERMS(:,32,67) = -TPK%K067(:)*PCONC(:,32)*PCONC(:,15) ! !PTERMS(OH,K068) = -K068*<OP1>*<OH> - PTERMS(:,14,68) = -TPK%K068(:)*PCONC(:,28)*PCONC(:,14) + PTERMS(:,15,68) = -TPK%K068(:)*PCONC(:,29)*PCONC(:,15) ! !PTERMS(HCHO,K068) = +0.35*K068*<OP1>*<OH> - PTERMS(:,22,68) = +0.35*TPK%K068(:)*PCONC(:,28)*PCONC(:,14) + PTERMS(:,23,68) = +0.35*TPK%K068(:)*PCONC(:,29)*PCONC(:,15) ! !PTERMS(OP1,K068) = -K068*<OP1>*<OH> - PTERMS(:,28,68) = -TPK%K068(:)*PCONC(:,28)*PCONC(:,14) + PTERMS(:,29,68) = -TPK%K068(:)*PCONC(:,29)*PCONC(:,15) ! !PTERMS(MO2,K068) = +0.65*K068*<OP1>*<OH> - PTERMS(:,32,68) = +0.65*TPK%K068(:)*PCONC(:,28)*PCONC(:,14) + PTERMS(:,33,68) = +0.65*TPK%K068(:)*PCONC(:,29)*PCONC(:,15) ! !PTERMS(OH,K069) = -K069*<OP2>*<OH> - PTERMS(:,14,69) = -TPK%K069(:)*PCONC(:,29)*PCONC(:,14) + PTERMS(:,15,69) = -TPK%K069(:)*PCONC(:,30)*PCONC(:,15) ! !PTERMS(HO2,K069) = +0.02915*K069*<OP2>*<OH> - PTERMS(:,15,69) = +0.02915*TPK%K069(:)*PCONC(:,29)*PCONC(:,14) + PTERMS(:,16,69) = +0.02915*TPK%K069(:)*PCONC(:,30)*PCONC(:,15) ! !PTERMS(HCHO,K069) = +0.02915*K069*<OP2>*<OH> - PTERMS(:,22,69) = +0.02915*TPK%K069(:)*PCONC(:,29)*PCONC(:,14) + PTERMS(:,23,69) = +0.02915*TPK%K069(:)*PCONC(:,30)*PCONC(:,15) ! !PTERMS(ALD,K069) = +0.07335*K069*<OP2>*<OH> - PTERMS(:,23,69) = +0.07335*TPK%K069(:)*PCONC(:,29)*PCONC(:,14) + PTERMS(:,24,69) = +0.07335*TPK%K069(:)*PCONC(:,30)*PCONC(:,15) ! !PTERMS(KET,K069) = +0.37591*K069*<OP2>*<OH> - PTERMS(:,24,69) = +0.37591*TPK%K069(:)*PCONC(:,29)*PCONC(:,14) + PTERMS(:,25,69) = +0.37591*TPK%K069(:)*PCONC(:,30)*PCONC(:,15) ! !PTERMS(OP2,K069) = -K069*<OP2>*<OH> - PTERMS(:,29,69) = -TPK%K069(:)*PCONC(:,29)*PCONC(:,14) + PTERMS(:,30,69) = -TPK%K069(:)*PCONC(:,30)*PCONC(:,15) ! !PTERMS(ALKAP,K069) = +0.40341*K069*<OP2>*<OH> - PTERMS(:,33,69) = +0.40341*TPK%K069(:)*PCONC(:,29)*PCONC(:,14) + PTERMS(:,34,69) = +0.40341*TPK%K069(:)*PCONC(:,30)*PCONC(:,15) ! !PTERMS(CARBOP,K069) = +0.05413*K069*<OP2>*<OH> - PTERMS(:,39,69) = +0.05413*TPK%K069(:)*PCONC(:,29)*PCONC(:,14) + PTERMS(:,40,69) = +0.05413*TPK%K069(:)*PCONC(:,30)*PCONC(:,15) ! !PTERMS(XO2,K069) = +0.09333*K069*<OP2>*<OH> - PTERMS(:,41,69) = +0.09333*TPK%K069(:)*PCONC(:,29)*PCONC(:,14) + PTERMS(:,42,69) = +0.09333*TPK%K069(:)*PCONC(:,30)*PCONC(:,15) ! !PTERMS(NO3,K070) = +0.71893*K070*<PAN>*<OH> - PTERMS(:,5,70) = +0.71893*TPK%K070(:)*PCONC(:,27)*PCONC(:,14) + PTERMS(:,5,70) = +0.71893*TPK%K070(:)*PCONC(:,28)*PCONC(:,15) ! ! RETURN @@ -30616,64 +31229,64 @@ SUBROUTINE SUBT11 !Indices 221 a 240 ! !PTERMS(OH,K070) = -K070*<PAN>*<OH> - PTERMS(:,14,70) = -TPK%K070(:)*PCONC(:,27)*PCONC(:,14) + PTERMS(:,15,70) = -TPK%K070(:)*PCONC(:,28)*PCONC(:,15) ! !PTERMS(HO2,K070) = +0.28107*K070*<PAN>*<OH> - PTERMS(:,15,70) = +0.28107*TPK%K070(:)*PCONC(:,27)*PCONC(:,14) + PTERMS(:,16,70) = +0.28107*TPK%K070(:)*PCONC(:,28)*PCONC(:,15) ! !PTERMS(HCHO,K070) = +0.57839*K070*<PAN>*<OH> - PTERMS(:,22,70) = +0.57839*TPK%K070(:)*PCONC(:,27)*PCONC(:,14) + PTERMS(:,23,70) = +0.57839*TPK%K070(:)*PCONC(:,28)*PCONC(:,15) ! !PTERMS(CARBO,K070) = +0.21863*K070*<PAN>*<OH> - PTERMS(:,25,70) = +0.21863*TPK%K070(:)*PCONC(:,27)*PCONC(:,14) + PTERMS(:,26,70) = +0.21863*TPK%K070(:)*PCONC(:,28)*PCONC(:,15) ! !PTERMS(PAN,K070) = -K070*<PAN>*<OH> - PTERMS(:,27,70) = -TPK%K070(:)*PCONC(:,27)*PCONC(:,14) + PTERMS(:,28,70) = -TPK%K070(:)*PCONC(:,28)*PCONC(:,15) ! !PTERMS(XO2,K070) = +K070*<PAN>*<OH> - PTERMS(:,41,70) = +TPK%K070(:)*PCONC(:,27)*PCONC(:,14) + PTERMS(:,42,70) = +TPK%K070(:)*PCONC(:,28)*PCONC(:,15) ! !PTERMS(NO2,K071) = +K071*<ONIT>*<OH> - PTERMS(:,4,71) = +TPK%K071(:)*PCONC(:,26)*PCONC(:,14) + PTERMS(:,4,71) = +TPK%K071(:)*PCONC(:,27)*PCONC(:,15) ! !PTERMS(OH,K071) = -K071*<ONIT>*<OH> - PTERMS(:,14,71) = -TPK%K071(:)*PCONC(:,26)*PCONC(:,14) + PTERMS(:,15,71) = -TPK%K071(:)*PCONC(:,27)*PCONC(:,15) ! !PTERMS(ONIT,K071) = -K071*<ONIT>*<OH> - PTERMS(:,26,71) = -TPK%K071(:)*PCONC(:,26)*PCONC(:,14) + PTERMS(:,27,71) = -TPK%K071(:)*PCONC(:,27)*PCONC(:,15) ! !PTERMS(ALKAP,K071) = +1.00000*K071*<ONIT>*<OH> - PTERMS(:,33,71) = +1.00000*TPK%K071(:)*PCONC(:,26)*PCONC(:,14) + PTERMS(:,34,71) = +1.00000*TPK%K071(:)*PCONC(:,27)*PCONC(:,15) ! !PTERMS(NO3,K072) = -K072*<HCHO>*<NO3> - PTERMS(:,5,72) = -TPK%K072(:)*PCONC(:,22)*PCONC(:,5) + PTERMS(:,5,72) = -TPK%K072(:)*PCONC(:,23)*PCONC(:,5) ! !PTERMS(HNO3,K072) = +K072*<HCHO>*<NO3> - PTERMS(:,8,72) = +TPK%K072(:)*PCONC(:,22)*PCONC(:,5) + PTERMS(:,8,72) = +TPK%K072(:)*PCONC(:,23)*PCONC(:,5) ! !PTERMS(CO,K072) = +K072*<HCHO>*<NO3> - PTERMS(:,13,72) = +TPK%K072(:)*PCONC(:,22)*PCONC(:,5) + PTERMS(:,14,72) = +TPK%K072(:)*PCONC(:,23)*PCONC(:,5) ! !PTERMS(HO2,K072) = +K072*<HCHO>*<NO3> - PTERMS(:,15,72) = +TPK%K072(:)*PCONC(:,22)*PCONC(:,5) + PTERMS(:,16,72) = +TPK%K072(:)*PCONC(:,23)*PCONC(:,5) ! !PTERMS(HCHO,K072) = -K072*<HCHO>*<NO3> - PTERMS(:,22,72) = -TPK%K072(:)*PCONC(:,22)*PCONC(:,5) + PTERMS(:,23,72) = -TPK%K072(:)*PCONC(:,23)*PCONC(:,5) ! !PTERMS(NO3,K073) = -K073*<ALD>*<NO3> - PTERMS(:,5,73) = -TPK%K073(:)*PCONC(:,23)*PCONC(:,5) + PTERMS(:,5,73) = -TPK%K073(:)*PCONC(:,24)*PCONC(:,5) ! !PTERMS(HNO3,K073) = +K073*<ALD>*<NO3> - PTERMS(:,8,73) = +TPK%K073(:)*PCONC(:,23)*PCONC(:,5) + PTERMS(:,8,73) = +TPK%K073(:)*PCONC(:,24)*PCONC(:,5) ! !PTERMS(ALD,K073) = -K073*<ALD>*<NO3> - PTERMS(:,23,73) = -TPK%K073(:)*PCONC(:,23)*PCONC(:,5) + PTERMS(:,24,73) = -TPK%K073(:)*PCONC(:,24)*PCONC(:,5) ! !PTERMS(CARBOP,K073) = +1.00000*K073*<ALD>*<NO3> - PTERMS(:,39,73) = +1.00000*TPK%K073(:)*PCONC(:,23)*PCONC(:,5) + PTERMS(:,40,73) = +1.00000*TPK%K073(:)*PCONC(:,24)*PCONC(:,5) ! !PTERMS(NO2,K074) = +0.10530*K074*<CARBO>*<NO3> - PTERMS(:,4,74) = +0.10530*TPK%K074(:)*PCONC(:,25)*PCONC(:,5) + PTERMS(:,4,74) = +0.10530*TPK%K074(:)*PCONC(:,26)*PCONC(:,5) ! ! RETURN @@ -30684,64 +31297,64 @@ SUBROUTINE SUBT12 !Indices 241 a 260 ! !PTERMS(NO3,K074) = -K074*<CARBO>*<NO3> - PTERMS(:,5,74) = -TPK%K074(:)*PCONC(:,25)*PCONC(:,5) + PTERMS(:,5,74) = -TPK%K074(:)*PCONC(:,26)*PCONC(:,5) ! !PTERMS(HNO3,K074) = +0.91567*K074*<CARBO>*<NO3> - PTERMS(:,8,74) = +0.91567*TPK%K074(:)*PCONC(:,25)*PCONC(:,5) + PTERMS(:,8,74) = +0.91567*TPK%K074(:)*PCONC(:,26)*PCONC(:,5) ! !PTERMS(CO,K074) = +1.33723*K074*<CARBO>*<NO3> - PTERMS(:,13,74) = +1.33723*TPK%K074(:)*PCONC(:,25)*PCONC(:,5) + PTERMS(:,14,74) = +1.33723*TPK%K074(:)*PCONC(:,26)*PCONC(:,5) ! !PTERMS(HO2,K074) = +0.63217*K074*<CARBO>*<NO3> - PTERMS(:,15,74) = +0.63217*TPK%K074(:)*PCONC(:,25)*PCONC(:,5) + PTERMS(:,16,74) = +0.63217*TPK%K074(:)*PCONC(:,26)*PCONC(:,5) ! !PTERMS(ALD,K074) = +0.05265*K074*<CARBO>*<NO3> - PTERMS(:,23,74) = +0.05265*TPK%K074(:)*PCONC(:,25)*PCONC(:,5) + PTERMS(:,24,74) = +0.05265*TPK%K074(:)*PCONC(:,26)*PCONC(:,5) ! !PTERMS(KET,K074) = +0.00632*K074*<CARBO>*<NO3> - PTERMS(:,24,74) = +0.00632*TPK%K074(:)*PCONC(:,25)*PCONC(:,5) + PTERMS(:,25,74) = +0.00632*TPK%K074(:)*PCONC(:,26)*PCONC(:,5) ! !PTERMS(CARBO,K074) = -K074*<CARBO>*<NO3> - PTERMS(:,25,74) = -TPK%K074(:)*PCONC(:,25)*PCONC(:,5) + PTERMS(:,26,74) = -TPK%K074(:)*PCONC(:,26)*PCONC(:,5) ! !PTERMS(CARBOP,K074) = +0.38881*K074*<CARBO>*<NO3> - PTERMS(:,39,74) = +0.38881*TPK%K074(:)*PCONC(:,25)*PCONC(:,5) + PTERMS(:,40,74) = +0.38881*TPK%K074(:)*PCONC(:,26)*PCONC(:,5) ! !PTERMS(OLN,K074) = +0.00000*K074*<CARBO>*<NO3> - PTERMS(:,40,74) = +0.00000*TPK%K074(:)*PCONC(:,25)*PCONC(:,5) + PTERMS(:,41,74) = +0.00000*TPK%K074(:)*PCONC(:,26)*PCONC(:,5) ! !PTERMS(XO2,K074) = +0.10530*K074*<CARBO>*<NO3> - PTERMS(:,41,74) = +0.10530*TPK%K074(:)*PCONC(:,25)*PCONC(:,5) + PTERMS(:,42,74) = +0.10530*TPK%K074(:)*PCONC(:,26)*PCONC(:,5) ! !PTERMS(NO3,K075) = -K075*<ARO>*<NO3> - PTERMS(:,5,75) = -TPK%K075(:)*PCONC(:,21)*PCONC(:,5) + PTERMS(:,5,75) = -TPK%K075(:)*PCONC(:,22)*PCONC(:,5) ! !PTERMS(HNO3,K075) = +K075*<ARO>*<NO3> - PTERMS(:,8,75) = +TPK%K075(:)*PCONC(:,21)*PCONC(:,5) + PTERMS(:,8,75) = +TPK%K075(:)*PCONC(:,22)*PCONC(:,5) ! !PTERMS(ARO,K075) = -K075*<ARO>*<NO3> - PTERMS(:,21,75) = -TPK%K075(:)*PCONC(:,21)*PCONC(:,5) + PTERMS(:,22,75) = -TPK%K075(:)*PCONC(:,22)*PCONC(:,5) ! !PTERMS(PHO,K075) = +K075*<ARO>*<NO3> - PTERMS(:,36,75) = +TPK%K075(:)*PCONC(:,21)*PCONC(:,5) + PTERMS(:,37,75) = +TPK%K075(:)*PCONC(:,22)*PCONC(:,5) ! !PTERMS(NO3,K076) = -K076*<ALKE>*<NO3> - PTERMS(:,5,76) = -TPK%K076(:)*PCONC(:,19)*PCONC(:,5) + PTERMS(:,5,76) = -TPK%K076(:)*PCONC(:,20)*PCONC(:,5) ! !PTERMS(ALKE,K076) = -K076*<ALKE>*<NO3> - PTERMS(:,19,76) = -TPK%K076(:)*PCONC(:,19)*PCONC(:,5) + PTERMS(:,20,76) = -TPK%K076(:)*PCONC(:,20)*PCONC(:,5) ! !PTERMS(CARBO,K076) = +0.00000*K076*<ALKE>*<NO3> - PTERMS(:,25,76) = +0.00000*TPK%K076(:)*PCONC(:,19)*PCONC(:,5) + PTERMS(:,26,76) = +0.00000*TPK%K076(:)*PCONC(:,20)*PCONC(:,5) ! !PTERMS(OLN,K076) = +0.93768*K076*<ALKE>*<NO3> - PTERMS(:,40,76) = +0.93768*TPK%K076(:)*PCONC(:,19)*PCONC(:,5) + PTERMS(:,41,76) = +0.93768*TPK%K076(:)*PCONC(:,20)*PCONC(:,5) ! !PTERMS(NO3,K077) = -K077*<BIO>*<NO3> - PTERMS(:,5,77) = -TPK%K077(:)*PCONC(:,20)*PCONC(:,5) + PTERMS(:,5,77) = -TPK%K077(:)*PCONC(:,21)*PCONC(:,5) ! !PTERMS(BIO,K077) = -K077*<BIO>*<NO3> - PTERMS(:,20,77) = -TPK%K077(:)*PCONC(:,20)*PCONC(:,5) + PTERMS(:,21,77) = -TPK%K077(:)*PCONC(:,21)*PCONC(:,5) ! ! RETURN @@ -30752,64 +31365,64 @@ SUBROUTINE SUBT13 !Indices 261 a 280 ! !PTERMS(CARBO,K077) = +0.91741*K077*<BIO>*<NO3> - PTERMS(:,25,77) = +0.91741*TPK%K077(:)*PCONC(:,20)*PCONC(:,5) + PTERMS(:,26,77) = +0.91741*TPK%K077(:)*PCONC(:,21)*PCONC(:,5) ! !PTERMS(OLN,K077) = +1.00000*K077*<BIO>*<NO3> - PTERMS(:,40,77) = +1.00000*TPK%K077(:)*PCONC(:,20)*PCONC(:,5) + PTERMS(:,41,77) = +1.00000*TPK%K077(:)*PCONC(:,21)*PCONC(:,5) ! !PTERMS(NO2,K078) = +0.40*K078*<PAN>*<NO3> - PTERMS(:,4,78) = +0.40*TPK%K078(:)*PCONC(:,27)*PCONC(:,5) + PTERMS(:,4,78) = +0.40*TPK%K078(:)*PCONC(:,28)*PCONC(:,5) ! !PTERMS(NO3,K078) = -K078*<PAN>*<NO3> - PTERMS(:,5,78) = -TPK%K078(:)*PCONC(:,27)*PCONC(:,5) + PTERMS(:,5,78) = -TPK%K078(:)*PCONC(:,28)*PCONC(:,5) ! !PTERMS(HCHO,K078) = +0.40*K078*<PAN>*<NO3> - PTERMS(:,22,78) = +0.40*TPK%K078(:)*PCONC(:,27)*PCONC(:,5) + PTERMS(:,23,78) = +0.40*TPK%K078(:)*PCONC(:,28)*PCONC(:,5) ! !PTERMS(ONIT,K078) = +0.60*K078*<PAN>*<NO3> - PTERMS(:,26,78) = +0.60*TPK%K078(:)*PCONC(:,27)*PCONC(:,5) + PTERMS(:,27,78) = +0.60*TPK%K078(:)*PCONC(:,28)*PCONC(:,5) ! !PTERMS(PAN,K078) = -K078*<PAN>*<NO3> - PTERMS(:,27,78) = -TPK%K078(:)*PCONC(:,27)*PCONC(:,5) + PTERMS(:,28,78) = -TPK%K078(:)*PCONC(:,28)*PCONC(:,5) ! !PTERMS(XO2,K078) = +K078*<PAN>*<NO3> - PTERMS(:,41,78) = +TPK%K078(:)*PCONC(:,27)*PCONC(:,5) + PTERMS(:,42,78) = +TPK%K078(:)*PCONC(:,28)*PCONC(:,5) ! !PTERMS(O3,K079) = -K079*<ALKE>*<O3> - PTERMS(:,1,79) = -TPK%K079(:)*PCONC(:,19)*PCONC(:,1) + PTERMS(:,1,79) = -TPK%K079(:)*PCONC(:,20)*PCONC(:,1) ! !PTERMS(H2O2,K079) = +0.01833*K079*<ALKE>*<O3> - PTERMS(:,2,79) = +0.01833*TPK%K079(:)*PCONC(:,19)*PCONC(:,1) + PTERMS(:,2,79) = +0.01833*TPK%K079(:)*PCONC(:,20)*PCONC(:,1) ! !PTERMS(CO,K079) = +0.35120*K079*<ALKE>*<O3> - PTERMS(:,13,79) = +0.35120*TPK%K079(:)*PCONC(:,19)*PCONC(:,1) + PTERMS(:,14,79) = +0.35120*TPK%K079(:)*PCONC(:,20)*PCONC(:,1) ! !PTERMS(OH,K079) = +0.39435*K079*<ALKE>*<O3> - PTERMS(:,14,79) = +0.39435*TPK%K079(:)*PCONC(:,19)*PCONC(:,1) + PTERMS(:,15,79) = +0.39435*TPK%K079(:)*PCONC(:,20)*PCONC(:,1) ! !PTERMS(HO2,K079) = +0.23451*K079*<ALKE>*<O3> - PTERMS(:,15,79) = +0.23451*TPK%K079(:)*PCONC(:,19)*PCONC(:,1) + PTERMS(:,16,79) = +0.23451*TPK%K079(:)*PCONC(:,20)*PCONC(:,1) ! !PTERMS(CH4,K079) = +0.04300*K079*<ALKE>*<O3> - PTERMS(:,16,79) = +0.04300*TPK%K079(:)*PCONC(:,19)*PCONC(:,1) + PTERMS(:,17,79) = +0.04300*TPK%K079(:)*PCONC(:,20)*PCONC(:,1) ! !PTERMS(ETH,K079) = +0.03196*K079*<ALKE>*<O3> - PTERMS(:,17,79) = +0.03196*TPK%K079(:)*PCONC(:,19)*PCONC(:,1) + PTERMS(:,18,79) = +0.03196*TPK%K079(:)*PCONC(:,20)*PCONC(:,1) ! !PTERMS(ALKE,K079) = -K079*<ALKE>*<O3> - PTERMS(:,19,79) = -TPK%K079(:)*PCONC(:,19)*PCONC(:,1) + PTERMS(:,20,79) = -TPK%K079(:)*PCONC(:,20)*PCONC(:,1) ! !PTERMS(HCHO,K079) = +0.48290*K079*<ALKE>*<O3> - PTERMS(:,22,79) = +0.48290*TPK%K079(:)*PCONC(:,19)*PCONC(:,1) + PTERMS(:,23,79) = +0.48290*TPK%K079(:)*PCONC(:,20)*PCONC(:,1) ! !PTERMS(ALD,K079) = +0.51468*K079*<ALKE>*<O3> - PTERMS(:,23,79) = +0.51468*TPK%K079(:)*PCONC(:,19)*PCONC(:,1) + PTERMS(:,24,79) = +0.51468*TPK%K079(:)*PCONC(:,20)*PCONC(:,1) ! !PTERMS(KET,K079) = +0.07377*K079*<ALKE>*<O3> - PTERMS(:,24,79) = +0.07377*TPK%K079(:)*PCONC(:,19)*PCONC(:,1) + PTERMS(:,25,79) = +0.07377*TPK%K079(:)*PCONC(:,20)*PCONC(:,1) ! !PTERMS(CARBO,K079) = +0.00000*K079*<ALKE>*<O3> - PTERMS(:,25,79) = +0.00000*TPK%K079(:)*PCONC(:,19)*PCONC(:,1) + PTERMS(:,26,79) = +0.00000*TPK%K079(:)*PCONC(:,20)*PCONC(:,1) ! ! RETURN @@ -30820,64 +31433,64 @@ SUBROUTINE SUBT14 !Indices 281 a 300 ! !PTERMS(ORA1,K079) = +0.15343*K079*<ALKE>*<O3> - PTERMS(:,30,79) = +0.15343*TPK%K079(:)*PCONC(:,19)*PCONC(:,1) + PTERMS(:,31,79) = +0.15343*TPK%K079(:)*PCONC(:,20)*PCONC(:,1) ! !PTERMS(ORA2,K079) = +0.08143*K079*<ALKE>*<O3> - PTERMS(:,31,79) = +0.08143*TPK%K079(:)*PCONC(:,19)*PCONC(:,1) + PTERMS(:,32,79) = +0.08143*TPK%K079(:)*PCONC(:,20)*PCONC(:,1) ! !PTERMS(MO2,K079) = +0.13966*K079*<ALKE>*<O3> - PTERMS(:,32,79) = +0.13966*TPK%K079(:)*PCONC(:,19)*PCONC(:,1) + PTERMS(:,33,79) = +0.13966*TPK%K079(:)*PCONC(:,20)*PCONC(:,1) ! !PTERMS(ALKAP,K079) = +0.09815*K079*<ALKE>*<O3> - PTERMS(:,33,79) = +0.09815*TPK%K079(:)*PCONC(:,19)*PCONC(:,1) + PTERMS(:,34,79) = +0.09815*TPK%K079(:)*PCONC(:,20)*PCONC(:,1) ! !PTERMS(CARBOP,K079) = +0.05705*K079*<ALKE>*<O3> - PTERMS(:,39,79) = +0.05705*TPK%K079(:)*PCONC(:,19)*PCONC(:,1) + PTERMS(:,40,79) = +0.05705*TPK%K079(:)*PCONC(:,20)*PCONC(:,1) ! !PTERMS(XO2,K079) = +0.00000*K079*<ALKE>*<O3> - PTERMS(:,41,79) = +0.00000*TPK%K079(:)*PCONC(:,19)*PCONC(:,1) + PTERMS(:,42,79) = +0.00000*TPK%K079(:)*PCONC(:,20)*PCONC(:,1) ! !PTERMS(O3,K080) = -K080*<BIO>*<O3> - PTERMS(:,1,80) = -TPK%K080(:)*PCONC(:,20)*PCONC(:,1) + PTERMS(:,1,80) = -TPK%K080(:)*PCONC(:,21)*PCONC(:,1) ! !PTERMS(H2O2,K080) = +0.00100*K080*<BIO>*<O3> - PTERMS(:,2,80) = +0.00100*TPK%K080(:)*PCONC(:,20)*PCONC(:,1) + PTERMS(:,2,80) = +0.00100*TPK%K080(:)*PCONC(:,21)*PCONC(:,1) ! !PTERMS(CO,K080) = +0.36000*K080*<BIO>*<O3> - PTERMS(:,13,80) = +0.36000*TPK%K080(:)*PCONC(:,20)*PCONC(:,1) + PTERMS(:,14,80) = +0.36000*TPK%K080(:)*PCONC(:,21)*PCONC(:,1) ! !PTERMS(OH,K080) = +0.28000*K080*<BIO>*<O3> - PTERMS(:,14,80) = +0.28000*TPK%K080(:)*PCONC(:,20)*PCONC(:,1) + PTERMS(:,15,80) = +0.28000*TPK%K080(:)*PCONC(:,21)*PCONC(:,1) ! !PTERMS(HO2,K080) = +0.30000*K080*<BIO>*<O3> - PTERMS(:,15,80) = +0.30000*TPK%K080(:)*PCONC(:,20)*PCONC(:,1) + PTERMS(:,16,80) = +0.30000*TPK%K080(:)*PCONC(:,21)*PCONC(:,1) ! !PTERMS(ALKE,K080) = +0.37388*K080*<BIO>*<O3> - PTERMS(:,19,80) = +0.37388*TPK%K080(:)*PCONC(:,20)*PCONC(:,1) + PTERMS(:,20,80) = +0.37388*TPK%K080(:)*PCONC(:,21)*PCONC(:,1) ! !PTERMS(BIO,K080) = -K080*<BIO>*<O3> - PTERMS(:,20,80) = -TPK%K080(:)*PCONC(:,20)*PCONC(:,1) + PTERMS(:,21,80) = -TPK%K080(:)*PCONC(:,21)*PCONC(:,1) ! !PTERMS(HCHO,K080) = +0.90000*K080*<BIO>*<O3> - PTERMS(:,22,80) = +0.90000*TPK%K080(:)*PCONC(:,20)*PCONC(:,1) + PTERMS(:,23,80) = +0.90000*TPK%K080(:)*PCONC(:,21)*PCONC(:,1) ! !PTERMS(ALD,K080) = +0.00000*K080*<BIO>*<O3> - PTERMS(:,23,80) = +0.00000*TPK%K080(:)*PCONC(:,20)*PCONC(:,1) + PTERMS(:,24,80) = +0.00000*TPK%K080(:)*PCONC(:,21)*PCONC(:,1) ! !PTERMS(KET,K080) = +0.00000*K080*<BIO>*<O3> - PTERMS(:,24,80) = +0.00000*TPK%K080(:)*PCONC(:,20)*PCONC(:,1) + PTERMS(:,25,80) = +0.00000*TPK%K080(:)*PCONC(:,21)*PCONC(:,1) ! !PTERMS(CARBO,K080) = +0.39754*K080*<BIO>*<O3> - PTERMS(:,25,80) = +0.39754*TPK%K080(:)*PCONC(:,20)*PCONC(:,1) + PTERMS(:,26,80) = +0.39754*TPK%K080(:)*PCONC(:,21)*PCONC(:,1) ! !PTERMS(ORA1,K080) = +0.15000*K080*<BIO>*<O3> - PTERMS(:,30,80) = +0.15000*TPK%K080(:)*PCONC(:,20)*PCONC(:,1) + PTERMS(:,31,80) = +0.15000*TPK%K080(:)*PCONC(:,21)*PCONC(:,1) ! !PTERMS(ORA2,K080) = +0.00000*K080*<BIO>*<O3> - PTERMS(:,31,80) = +0.00000*TPK%K080(:)*PCONC(:,20)*PCONC(:,1) + PTERMS(:,32,80) = +0.00000*TPK%K080(:)*PCONC(:,21)*PCONC(:,1) ! !PTERMS(MO2,K080) = +0.03000*K080*<BIO>*<O3> - PTERMS(:,32,80) = +0.03000*TPK%K080(:)*PCONC(:,20)*PCONC(:,1) + PTERMS(:,33,80) = +0.03000*TPK%K080(:)*PCONC(:,21)*PCONC(:,1) ! ! RETURN @@ -30888,64 +31501,64 @@ SUBROUTINE SUBT15 !Indices 301 a 320 ! !PTERMS(ALKAP,K080) = +0.00000*K080*<BIO>*<O3> - PTERMS(:,33,80) = +0.00000*TPK%K080(:)*PCONC(:,20)*PCONC(:,1) + PTERMS(:,34,80) = +0.00000*TPK%K080(:)*PCONC(:,21)*PCONC(:,1) ! !PTERMS(CARBOP,K080) = +0.17000*K080*<BIO>*<O3> - PTERMS(:,39,80) = +0.17000*TPK%K080(:)*PCONC(:,20)*PCONC(:,1) + PTERMS(:,40,80) = +0.17000*TPK%K080(:)*PCONC(:,21)*PCONC(:,1) ! !PTERMS(XO2,K080) = +0.13000*K080*<BIO>*<O3> - PTERMS(:,41,80) = +0.13000*TPK%K080(:)*PCONC(:,20)*PCONC(:,1) + PTERMS(:,42,80) = +0.13000*TPK%K080(:)*PCONC(:,21)*PCONC(:,1) ! !PTERMS(O3,K081) = -K081*<CARBO>*<O3> - PTERMS(:,1,81) = -TPK%K081(:)*PCONC(:,25)*PCONC(:,1) + PTERMS(:,1,81) = -TPK%K081(:)*PCONC(:,26)*PCONC(:,1) ! !PTERMS(CO,K081) = +0.64728*K081*<CARBO>*<O3> - PTERMS(:,13,81) = +0.64728*TPK%K081(:)*PCONC(:,25)*PCONC(:,1) + PTERMS(:,14,81) = +0.64728*TPK%K081(:)*PCONC(:,26)*PCONC(:,1) ! !PTERMS(OH,K081) = +0.20595*K081*<CARBO>*<O3> - PTERMS(:,14,81) = +0.20595*TPK%K081(:)*PCONC(:,25)*PCONC(:,1) + PTERMS(:,15,81) = +0.20595*TPK%K081(:)*PCONC(:,26)*PCONC(:,1) ! !PTERMS(HO2,K081) = +0.28441*K081*<CARBO>*<O3> - PTERMS(:,15,81) = +0.28441*TPK%K081(:)*PCONC(:,25)*PCONC(:,1) + PTERMS(:,16,81) = +0.28441*TPK%K081(:)*PCONC(:,26)*PCONC(:,1) ! !PTERMS(HCHO,K081) = +0.00000*K081*<CARBO>*<O3> - PTERMS(:,22,81) = +0.00000*TPK%K081(:)*PCONC(:,25)*PCONC(:,1) + PTERMS(:,23,81) = +0.00000*TPK%K081(:)*PCONC(:,26)*PCONC(:,1) ! !PTERMS(ALD,K081) = +0.15692*K081*<CARBO>*<O3> - PTERMS(:,23,81) = +0.15692*TPK%K081(:)*PCONC(:,25)*PCONC(:,1) + PTERMS(:,24,81) = +0.15692*TPK%K081(:)*PCONC(:,26)*PCONC(:,1) ! !PTERMS(CARBO,K081) = -K081*<CARBO>*<O3> - PTERMS(:,25,81) = -TPK%K081(:)*PCONC(:,25)*PCONC(:,1) + PTERMS(:,26,81) = -TPK%K081(:)*PCONC(:,26)*PCONC(:,1) ! !PTERMS(OP2,K081) = +0.10149*K081*<CARBO>*<O3> - PTERMS(:,29,81) = +0.10149*TPK%K081(:)*PCONC(:,25)*PCONC(:,1) + PTERMS(:,30,81) = +0.10149*TPK%K081(:)*PCONC(:,26)*PCONC(:,1) ! !PTERMS(ORA1,K081) = +0.10788*K081*<CARBO>*<O3> - PTERMS(:,30,81) = +0.10788*TPK%K081(:)*PCONC(:,25)*PCONC(:,1) + PTERMS(:,31,81) = +0.10788*TPK%K081(:)*PCONC(:,26)*PCONC(:,1) ! !PTERMS(ORA2,K081) = +0.20595*K081*<CARBO>*<O3> - PTERMS(:,31,81) = +0.20595*TPK%K081(:)*PCONC(:,25)*PCONC(:,1) + PTERMS(:,32,81) = +0.20595*TPK%K081(:)*PCONC(:,26)*PCONC(:,1) ! !PTERMS(CARBOP,K081) = +0.27460*K081*<CARBO>*<O3> - PTERMS(:,39,81) = +0.27460*TPK%K081(:)*PCONC(:,25)*PCONC(:,1) + PTERMS(:,40,81) = +0.27460*TPK%K081(:)*PCONC(:,26)*PCONC(:,1) ! !PTERMS(O3,K082) = -K082*<PAN>*<O3> - PTERMS(:,1,82) = -TPK%K082(:)*PCONC(:,27)*PCONC(:,1) + PTERMS(:,1,82) = -TPK%K082(:)*PCONC(:,28)*PCONC(:,1) ! !PTERMS(NO2,K082) = +0.70*K082*<PAN>*<O3> - PTERMS(:,4,82) = +0.70*TPK%K082(:)*PCONC(:,27)*PCONC(:,1) + PTERMS(:,4,82) = +0.70*TPK%K082(:)*PCONC(:,28)*PCONC(:,1) ! !PTERMS(CO,K082) = +0.13*K082*<PAN>*<O3> - PTERMS(:,13,82) = +0.13*TPK%K082(:)*PCONC(:,27)*PCONC(:,1) + PTERMS(:,14,82) = +0.13*TPK%K082(:)*PCONC(:,28)*PCONC(:,1) ! !PTERMS(OH,K082) = +0.036*K082*<PAN>*<O3> - PTERMS(:,14,82) = +0.036*TPK%K082(:)*PCONC(:,27)*PCONC(:,1) + PTERMS(:,15,82) = +0.036*TPK%K082(:)*PCONC(:,28)*PCONC(:,1) ! !PTERMS(HO2,K082) = +0.08*K082*<PAN>*<O3> - PTERMS(:,15,82) = +0.08*TPK%K082(:)*PCONC(:,27)*PCONC(:,1) + PTERMS(:,16,82) = +0.08*TPK%K082(:)*PCONC(:,28)*PCONC(:,1) ! !PTERMS(HCHO,K082) = +0.70*K082*<PAN>*<O3> - PTERMS(:,22,82) = +0.70*TPK%K082(:)*PCONC(:,27)*PCONC(:,1) + PTERMS(:,23,82) = +0.70*TPK%K082(:)*PCONC(:,28)*PCONC(:,1) ! ! RETURN @@ -30956,64 +31569,64 @@ SUBROUTINE SUBT16 !Indices 321 a 340 ! !PTERMS(PAN,K082) = -K082*<PAN>*<O3> - PTERMS(:,27,82) = -TPK%K082(:)*PCONC(:,27)*PCONC(:,1) + PTERMS(:,28,82) = -TPK%K082(:)*PCONC(:,28)*PCONC(:,1) ! !PTERMS(ORA1,K082) = +0.11*K082*<PAN>*<O3> - PTERMS(:,30,82) = +0.11*TPK%K082(:)*PCONC(:,27)*PCONC(:,1) + PTERMS(:,31,82) = +0.11*TPK%K082(:)*PCONC(:,28)*PCONC(:,1) ! !PTERMS(CARBOP,K082) = +0.70000*K082*<PAN>*<O3> - PTERMS(:,39,82) = +0.70000*TPK%K082(:)*PCONC(:,27)*PCONC(:,1) + PTERMS(:,40,82) = +0.70000*TPK%K082(:)*PCONC(:,28)*PCONC(:,1) ! !PTERMS(NO2,K083) = -K083*<PHO>*<NO2> - PTERMS(:,4,83) = -TPK%K083(:)*PCONC(:,36)*PCONC(:,4) + PTERMS(:,4,83) = -TPK%K083(:)*PCONC(:,37)*PCONC(:,4) ! !PTERMS(ARO,K083) = +0.10670*K083*<PHO>*<NO2> - PTERMS(:,21,83) = +0.10670*TPK%K083(:)*PCONC(:,36)*PCONC(:,4) + PTERMS(:,22,83) = +0.10670*TPK%K083(:)*PCONC(:,37)*PCONC(:,4) ! !PTERMS(ONIT,K083) = +K083*<PHO>*<NO2> - PTERMS(:,26,83) = +TPK%K083(:)*PCONC(:,36)*PCONC(:,4) + PTERMS(:,27,83) = +TPK%K083(:)*PCONC(:,37)*PCONC(:,4) ! !PTERMS(PHO,K083) = -K083*<PHO>*<NO2> - PTERMS(:,36,83) = -TPK%K083(:)*PCONC(:,36)*PCONC(:,4) + PTERMS(:,37,83) = -TPK%K083(:)*PCONC(:,37)*PCONC(:,4) ! !PTERMS(HO2,K084) = -K084*<PHO>*<HO2> - PTERMS(:,15,84) = -TPK%K084(:)*PCONC(:,36)*PCONC(:,15) + PTERMS(:,16,84) = -TPK%K084(:)*PCONC(:,37)*PCONC(:,16) ! !PTERMS(ARO,K084) = +1.06698*K084*<PHO>*<HO2> - PTERMS(:,21,84) = +1.06698*TPK%K084(:)*PCONC(:,36)*PCONC(:,15) + PTERMS(:,22,84) = +1.06698*TPK%K084(:)*PCONC(:,37)*PCONC(:,16) ! !PTERMS(PHO,K084) = -K084*<PHO>*<HO2> - PTERMS(:,36,84) = -TPK%K084(:)*PCONC(:,36)*PCONC(:,15) + PTERMS(:,37,84) = -TPK%K084(:)*PCONC(:,37)*PCONC(:,16) ! !PTERMS(NO2,K085) = -K085*<ADD>*<NO2> - PTERMS(:,4,85) = -TPK%K085(:)*PCONC(:,37)*PCONC(:,4) + PTERMS(:,4,85) = -TPK%K085(:)*PCONC(:,38)*PCONC(:,4) ! !PTERMS(HONO,K085) = +K085*<ADD>*<NO2> - PTERMS(:,7,85) = +TPK%K085(:)*PCONC(:,37)*PCONC(:,4) + PTERMS(:,7,85) = +TPK%K085(:)*PCONC(:,38)*PCONC(:,4) ! !PTERMS(ARO,K085) = +K085*<ADD>*<NO2> - PTERMS(:,21,85) = +TPK%K085(:)*PCONC(:,37)*PCONC(:,4) + PTERMS(:,22,85) = +TPK%K085(:)*PCONC(:,38)*PCONC(:,4) ! !PTERMS(ADD,K085) = -K085*<ADD>*<NO2> - PTERMS(:,37,85) = -TPK%K085(:)*PCONC(:,37)*PCONC(:,4) + PTERMS(:,38,85) = -TPK%K085(:)*PCONC(:,38)*PCONC(:,4) ! !PTERMS(HO2,K086) = +0.02*K086*<ADD>*<O2> - PTERMS(:,15,86) = +0.02*TPK%K086(:)*PCONC(:,37)*TPK%O2(:) + PTERMS(:,16,86) = +0.02*TPK%K086(:)*PCONC(:,38)*TPK%O2(:) ! !PTERMS(ARO,K086) = +0.02*K086*<ADD>*<O2> - PTERMS(:,21,86) = +0.02*TPK%K086(:)*PCONC(:,37)*TPK%O2(:) + PTERMS(:,22,86) = +0.02*TPK%K086(:)*PCONC(:,38)*TPK%O2(:) ! !PTERMS(ADD,K086) = -K086*<ADD>*<O2> - PTERMS(:,37,86) = -TPK%K086(:)*PCONC(:,37)*TPK%O2(:) + PTERMS(:,38,86) = -TPK%K086(:)*PCONC(:,38)*TPK%O2(:) ! !PTERMS(AROP,K086) = +0.98*K086*<ADD>*<O2> - PTERMS(:,38,86) = +0.98*TPK%K086(:)*PCONC(:,37)*TPK%O2(:) + PTERMS(:,39,86) = +0.98*TPK%K086(:)*PCONC(:,38)*TPK%O2(:) ! !PTERMS(O3,K087) = -K087*<ADD>*<O3> - PTERMS(:,1,87) = -TPK%K087(:)*PCONC(:,37)*PCONC(:,1) + PTERMS(:,1,87) = -TPK%K087(:)*PCONC(:,38)*PCONC(:,1) ! !PTERMS(OH,K087) = +K087*<ADD>*<O3> - PTERMS(:,14,87) = +TPK%K087(:)*PCONC(:,37)*PCONC(:,1) + PTERMS(:,15,87) = +TPK%K087(:)*PCONC(:,38)*PCONC(:,1) ! ! RETURN @@ -31024,64 +31637,64 @@ SUBROUTINE SUBT17 !Indices 341 a 360 ! !PTERMS(ARO,K087) = +K087*<ADD>*<O3> - PTERMS(:,21,87) = +TPK%K087(:)*PCONC(:,37)*PCONC(:,1) + PTERMS(:,22,87) = +TPK%K087(:)*PCONC(:,38)*PCONC(:,1) ! !PTERMS(ADD,K087) = -K087*<ADD>*<O3> - PTERMS(:,37,87) = -TPK%K087(:)*PCONC(:,37)*PCONC(:,1) + PTERMS(:,38,87) = -TPK%K087(:)*PCONC(:,38)*PCONC(:,1) ! !PTERMS(NO2,K088) = -K088*<CARBOP>*<NO2> - PTERMS(:,4,88) = -TPK%K088(:)*PCONC(:,39)*PCONC(:,4) + PTERMS(:,4,88) = -TPK%K088(:)*PCONC(:,40)*PCONC(:,4) ! !PTERMS(PAN,K088) = +1.00000*K088*<CARBOP>*<NO2> - PTERMS(:,27,88) = +1.00000*TPK%K088(:)*PCONC(:,39)*PCONC(:,4) + PTERMS(:,28,88) = +1.00000*TPK%K088(:)*PCONC(:,40)*PCONC(:,4) ! !PTERMS(CARBOP,K088) = -K088*<CARBOP>*<NO2> - PTERMS(:,39,88) = -TPK%K088(:)*PCONC(:,39)*PCONC(:,4) + PTERMS(:,40,88) = -TPK%K088(:)*PCONC(:,40)*PCONC(:,4) ! !PTERMS(NO2,K089) = +K089*<PAN> - PTERMS(:,4,89) = +TPK%K089(:)*PCONC(:,27) + PTERMS(:,4,89) = +TPK%K089(:)*PCONC(:,28) ! !PTERMS(PAN,K089) = -K089*<PAN> - PTERMS(:,27,89) = -TPK%K089(:)*PCONC(:,27) + PTERMS(:,28,89) = -TPK%K089(:)*PCONC(:,28) ! !PTERMS(CARBOP,K089) = +1.00000*K089*<PAN> - PTERMS(:,39,89) = +1.00000*TPK%K089(:)*PCONC(:,27) + PTERMS(:,40,89) = +1.00000*TPK%K089(:)*PCONC(:,28) ! !PTERMS(NO,K090) = -K090*<MO2>*<NO> - PTERMS(:,3,90) = -TPK%K090(:)*PCONC(:,32)*PCONC(:,3) + PTERMS(:,3,90) = -TPK%K090(:)*PCONC(:,33)*PCONC(:,3) ! !PTERMS(NO2,K090) = +K090*<MO2>*<NO> - PTERMS(:,4,90) = +TPK%K090(:)*PCONC(:,32)*PCONC(:,3) + PTERMS(:,4,90) = +TPK%K090(:)*PCONC(:,33)*PCONC(:,3) ! !PTERMS(HO2,K090) = +K090*<MO2>*<NO> - PTERMS(:,15,90) = +TPK%K090(:)*PCONC(:,32)*PCONC(:,3) + PTERMS(:,16,90) = +TPK%K090(:)*PCONC(:,33)*PCONC(:,3) ! !PTERMS(HCHO,K090) = +K090*<MO2>*<NO> - PTERMS(:,22,90) = +TPK%K090(:)*PCONC(:,32)*PCONC(:,3) + PTERMS(:,23,90) = +TPK%K090(:)*PCONC(:,33)*PCONC(:,3) ! !PTERMS(MO2,K090) = -K090*<MO2>*<NO> - PTERMS(:,32,90) = -TPK%K090(:)*PCONC(:,32)*PCONC(:,3) + PTERMS(:,33,90) = -TPK%K090(:)*PCONC(:,33)*PCONC(:,3) ! !PTERMS(NO,K091) = -K091*<ALKAP>*<NO> - PTERMS(:,3,91) = -TPK%K091(:)*PCONC(:,33)*PCONC(:,3) + PTERMS(:,3,91) = -TPK%K091(:)*PCONC(:,34)*PCONC(:,3) ! !PTERMS(NO2,K091) = +0.91541*K091*<ALKAP>*<NO> - PTERMS(:,4,91) = +0.91541*TPK%K091(:)*PCONC(:,33)*PCONC(:,3) + PTERMS(:,4,91) = +0.91541*TPK%K091(:)*PCONC(:,34)*PCONC(:,3) ! !PTERMS(HO2,K091) = +0.74265*K091*<ALKAP>*<NO> - PTERMS(:,15,91) = +0.74265*TPK%K091(:)*PCONC(:,33)*PCONC(:,3) + PTERMS(:,16,91) = +0.74265*TPK%K091(:)*PCONC(:,34)*PCONC(:,3) ! !PTERMS(HCHO,K091) = +0.03002*K091*<ALKAP>*<NO> - PTERMS(:,22,91) = +0.03002*TPK%K091(:)*PCONC(:,33)*PCONC(:,3) + PTERMS(:,23,91) = +0.03002*TPK%K091(:)*PCONC(:,34)*PCONC(:,3) ! !PTERMS(ALD,K091) = +0.33144*K091*<ALKAP>*<NO> - PTERMS(:,23,91) = +0.33144*TPK%K091(:)*PCONC(:,33)*PCONC(:,3) + PTERMS(:,24,91) = +0.33144*TPK%K091(:)*PCONC(:,34)*PCONC(:,3) ! !PTERMS(KET,K091) = +0.54531*K091*<ALKAP>*<NO> - PTERMS(:,24,91) = +0.54531*TPK%K091(:)*PCONC(:,33)*PCONC(:,3) + PTERMS(:,25,91) = +0.54531*TPK%K091(:)*PCONC(:,34)*PCONC(:,3) ! !PTERMS(CARBO,K091) = +0.03407*K091*<ALKAP>*<NO> - PTERMS(:,25,91) = +0.03407*TPK%K091(:)*PCONC(:,33)*PCONC(:,3) + PTERMS(:,26,91) = +0.03407*TPK%K091(:)*PCONC(:,34)*PCONC(:,3) ! ! RETURN @@ -31092,64 +31705,64 @@ SUBROUTINE SUBT18 !Indices 361 a 380 ! !PTERMS(ONIT,K091) = +0.08459*K091*<ALKAP>*<NO> - PTERMS(:,26,91) = +0.08459*TPK%K091(:)*PCONC(:,33)*PCONC(:,3) + PTERMS(:,27,91) = +0.08459*TPK%K091(:)*PCONC(:,34)*PCONC(:,3) ! !PTERMS(MO2,K091) = +0.09016*K091*<ALKAP>*<NO> - PTERMS(:,32,91) = +0.09016*TPK%K091(:)*PCONC(:,33)*PCONC(:,3) + PTERMS(:,33,91) = +0.09016*TPK%K091(:)*PCONC(:,34)*PCONC(:,3) ! !PTERMS(ALKAP,K091) = -K091*<ALKAP>*<NO> - PTERMS(:,33,91) = -TPK%K091(:)*PCONC(:,33)*PCONC(:,3) + PTERMS(:,34,91) = -TPK%K091(:)*PCONC(:,34)*PCONC(:,3) ! !PTERMS(XO2,K091) = +0.13007*K091*<ALKAP>*<NO> - PTERMS(:,41,91) = +0.13007*TPK%K091(:)*PCONC(:,33)*PCONC(:,3) + PTERMS(:,42,91) = +0.13007*TPK%K091(:)*PCONC(:,34)*PCONC(:,3) ! !PTERMS(NO,K092) = -K092*<ALKEP>*<NO> - PTERMS(:,3,92) = -TPK%K092(:)*PCONC(:,34)*PCONC(:,3) + PTERMS(:,3,92) = -TPK%K092(:)*PCONC(:,35)*PCONC(:,3) ! !PTERMS(NO2,K092) = +K092*<ALKEP>*<NO> - PTERMS(:,4,92) = +TPK%K092(:)*PCONC(:,34)*PCONC(:,3) + PTERMS(:,4,92) = +TPK%K092(:)*PCONC(:,35)*PCONC(:,3) ! !PTERMS(HO2,K092) = +K092*<ALKEP>*<NO> - PTERMS(:,15,92) = +TPK%K092(:)*PCONC(:,34)*PCONC(:,3) + PTERMS(:,16,92) = +TPK%K092(:)*PCONC(:,35)*PCONC(:,3) ! !PTERMS(HCHO,K092) = +1.39870*K092*<ALKEP>*<NO> - PTERMS(:,22,92) = +1.39870*TPK%K092(:)*PCONC(:,34)*PCONC(:,3) + PTERMS(:,23,92) = +1.39870*TPK%K092(:)*PCONC(:,35)*PCONC(:,3) ! !PTERMS(ALD,K092) = +0.42125*K092*<ALKEP>*<NO> - PTERMS(:,23,92) = +0.42125*TPK%K092(:)*PCONC(:,34)*PCONC(:,3) + PTERMS(:,24,92) = +0.42125*TPK%K092(:)*PCONC(:,35)*PCONC(:,3) ! !PTERMS(KET,K092) = +0.05220*K092*<ALKEP>*<NO> - PTERMS(:,24,92) = +0.05220*TPK%K092(:)*PCONC(:,34)*PCONC(:,3) + PTERMS(:,25,92) = +0.05220*TPK%K092(:)*PCONC(:,35)*PCONC(:,3) ! !PTERMS(ALKEP,K092) = -K092*<ALKEP>*<NO> - PTERMS(:,34,92) = -TPK%K092(:)*PCONC(:,34)*PCONC(:,3) + PTERMS(:,35,92) = -TPK%K092(:)*PCONC(:,35)*PCONC(:,3) ! !PTERMS(NO,K093) = -K093*<BIOP>*<NO> - PTERMS(:,3,93) = -TPK%K093(:)*PCONC(:,35)*PCONC(:,3) + PTERMS(:,3,93) = -TPK%K093(:)*PCONC(:,36)*PCONC(:,3) ! !PTERMS(NO2,K093) = +0.84700*K093*<BIOP>*<NO> - PTERMS(:,4,93) = +0.84700*TPK%K093(:)*PCONC(:,35)*PCONC(:,3) + PTERMS(:,4,93) = +0.84700*TPK%K093(:)*PCONC(:,36)*PCONC(:,3) ! !PTERMS(HO2,K093) = +0.84700*K093*<BIOP>*<NO> - PTERMS(:,15,93) = +0.84700*TPK%K093(:)*PCONC(:,35)*PCONC(:,3) + PTERMS(:,16,93) = +0.84700*TPK%K093(:)*PCONC(:,36)*PCONC(:,3) ! !PTERMS(ALKE,K093) = +0.37815*K093*<BIOP>*<NO> - PTERMS(:,19,93) = +0.37815*TPK%K093(:)*PCONC(:,35)*PCONC(:,3) + PTERMS(:,20,93) = +0.37815*TPK%K093(:)*PCONC(:,36)*PCONC(:,3) ! !PTERMS(HCHO,K093) = +0.60600*K093*<BIOP>*<NO> - PTERMS(:,22,93) = +0.60600*TPK%K093(:)*PCONC(:,35)*PCONC(:,3) + PTERMS(:,23,93) = +0.60600*TPK%K093(:)*PCONC(:,36)*PCONC(:,3) ! !PTERMS(ALD,K093) = +0.00000*K093*<BIOP>*<NO> - PTERMS(:,23,93) = +0.00000*TPK%K093(:)*PCONC(:,35)*PCONC(:,3) + PTERMS(:,24,93) = +0.00000*TPK%K093(:)*PCONC(:,36)*PCONC(:,3) ! !PTERMS(KET,K093) = +0.00000*K093*<BIOP>*<NO> - PTERMS(:,24,93) = +0.00000*TPK%K093(:)*PCONC(:,35)*PCONC(:,3) + PTERMS(:,25,93) = +0.00000*TPK%K093(:)*PCONC(:,36)*PCONC(:,3) ! !PTERMS(CARBO,K093) = +0.45463*K093*<BIOP>*<NO> - PTERMS(:,25,93) = +0.45463*TPK%K093(:)*PCONC(:,35)*PCONC(:,3) + PTERMS(:,26,93) = +0.45463*TPK%K093(:)*PCONC(:,36)*PCONC(:,3) ! !PTERMS(ONIT,K093) = +0.15300*K093*<BIOP>*<NO> - PTERMS(:,26,93) = +0.15300*TPK%K093(:)*PCONC(:,35)*PCONC(:,3) + PTERMS(:,27,93) = +0.15300*TPK%K093(:)*PCONC(:,36)*PCONC(:,3) ! ! RETURN @@ -31160,64 +31773,64 @@ SUBROUTINE SUBT19 !Indices 381 a 400 ! !PTERMS(BIOP,K093) = -K093*<BIOP>*<NO> - PTERMS(:,35,93) = -TPK%K093(:)*PCONC(:,35)*PCONC(:,3) + PTERMS(:,36,93) = -TPK%K093(:)*PCONC(:,36)*PCONC(:,3) ! !PTERMS(NO,K094) = -K094*<AROP>*<NO> - PTERMS(:,3,94) = -TPK%K094(:)*PCONC(:,38)*PCONC(:,3) + PTERMS(:,3,94) = -TPK%K094(:)*PCONC(:,39)*PCONC(:,3) ! !PTERMS(NO2,K094) = +0.95115*K094*<AROP>*<NO> - PTERMS(:,4,94) = +0.95115*TPK%K094(:)*PCONC(:,38)*PCONC(:,3) + PTERMS(:,4,94) = +0.95115*TPK%K094(:)*PCONC(:,39)*PCONC(:,3) ! !PTERMS(HO2,K094) = +0.95115*K094*<AROP>*<NO> - PTERMS(:,15,94) = +0.95115*TPK%K094(:)*PCONC(:,38)*PCONC(:,3) + PTERMS(:,16,94) = +0.95115*TPK%K094(:)*PCONC(:,39)*PCONC(:,3) ! !PTERMS(CARBO,K094) = +2.06993*K094*<AROP>*<NO> - PTERMS(:,25,94) = +2.06993*TPK%K094(:)*PCONC(:,38)*PCONC(:,3) + PTERMS(:,26,94) = +2.06993*TPK%K094(:)*PCONC(:,39)*PCONC(:,3) ! !PTERMS(ONIT,K094) = +0.04885*K094*<AROP>*<NO> - PTERMS(:,26,94) = +0.04885*TPK%K094(:)*PCONC(:,38)*PCONC(:,3) + PTERMS(:,27,94) = +0.04885*TPK%K094(:)*PCONC(:,39)*PCONC(:,3) ! !PTERMS(AROP,K094) = -K094*<AROP>*<NO> - PTERMS(:,38,94) = -TPK%K094(:)*PCONC(:,38)*PCONC(:,3) + PTERMS(:,39,94) = -TPK%K094(:)*PCONC(:,39)*PCONC(:,3) ! !PTERMS(NO,K095) = -K095*<CARBOP>*<NO> - PTERMS(:,3,95) = -TPK%K095(:)*PCONC(:,39)*PCONC(:,3) + PTERMS(:,3,95) = -TPK%K095(:)*PCONC(:,40)*PCONC(:,3) ! !PTERMS(NO2,K095) = +K095*<CARBOP>*<NO> - PTERMS(:,4,95) = +TPK%K095(:)*PCONC(:,39)*PCONC(:,3) + PTERMS(:,4,95) = +TPK%K095(:)*PCONC(:,40)*PCONC(:,3) ! !PTERMS(HO2,K095) = +0.12334*K095*<CARBOP>*<NO> - PTERMS(:,15,95) = +0.12334*TPK%K095(:)*PCONC(:,39)*PCONC(:,3) + PTERMS(:,16,95) = +0.12334*TPK%K095(:)*PCONC(:,40)*PCONC(:,3) ! !PTERMS(HCHO,K095) = +0.05848*K095*<CARBOP>*<NO> - PTERMS(:,22,95) = +0.05848*TPK%K095(:)*PCONC(:,39)*PCONC(:,3) + PTERMS(:,23,95) = +0.05848*TPK%K095(:)*PCONC(:,40)*PCONC(:,3) ! !PTERMS(ALD,K095) = +0.07368*K095*<CARBOP>*<NO> - PTERMS(:,23,95) = +0.07368*TPK%K095(:)*PCONC(:,39)*PCONC(:,3) + PTERMS(:,24,95) = +0.07368*TPK%K095(:)*PCONC(:,40)*PCONC(:,3) ! !PTERMS(CARBO,K095) = +0.08670*K095*<CARBOP>*<NO> - PTERMS(:,25,95) = +0.08670*TPK%K095(:)*PCONC(:,39)*PCONC(:,3) + PTERMS(:,26,95) = +0.08670*TPK%K095(:)*PCONC(:,40)*PCONC(:,3) ! !PTERMS(MO2,K095) = +0.78134*K095*<CARBOP>*<NO> - PTERMS(:,32,95) = +0.78134*TPK%K095(:)*PCONC(:,39)*PCONC(:,3) + PTERMS(:,33,95) = +0.78134*TPK%K095(:)*PCONC(:,40)*PCONC(:,3) ! !PTERMS(CARBOP,K095) = -K095*<CARBOP>*<NO> - PTERMS(:,39,95) = -TPK%K095(:)*PCONC(:,39)*PCONC(:,3) + PTERMS(:,40,95) = -TPK%K095(:)*PCONC(:,40)*PCONC(:,3) ! !PTERMS(XO2,K095) = +0.02563*K095*<CARBOP>*<NO> - PTERMS(:,41,95) = +0.02563*TPK%K095(:)*PCONC(:,39)*PCONC(:,3) + PTERMS(:,42,95) = +0.02563*TPK%K095(:)*PCONC(:,40)*PCONC(:,3) ! !PTERMS(NO,K096) = -K096*<OLN>*<NO> - PTERMS(:,3,96) = -TPK%K096(:)*PCONC(:,40)*PCONC(:,3) + PTERMS(:,3,96) = -TPK%K096(:)*PCONC(:,41)*PCONC(:,3) ! !PTERMS(NO2,K096) = +1.81599*K096*<OLN>*<NO> - PTERMS(:,4,96) = +1.81599*TPK%K096(:)*PCONC(:,40)*PCONC(:,3) + PTERMS(:,4,96) = +1.81599*TPK%K096(:)*PCONC(:,41)*PCONC(:,3) ! !PTERMS(HO2,K096) = +0.18401*K096*<OLN>*<NO> - PTERMS(:,15,96) = +0.18401*TPK%K096(:)*PCONC(:,40)*PCONC(:,3) + PTERMS(:,16,96) = +0.18401*TPK%K096(:)*PCONC(:,41)*PCONC(:,3) ! !PTERMS(HCHO,K096) = +0.23419*K096*<OLN>*<NO> - PTERMS(:,22,96) = +0.23419*TPK%K096(:)*PCONC(:,40)*PCONC(:,3) + PTERMS(:,23,96) = +0.23419*TPK%K096(:)*PCONC(:,41)*PCONC(:,3) ! ! RETURN @@ -31228,64 +31841,64 @@ SUBROUTINE SUBT20 !Indices 401 a 420 ! !PTERMS(ALD,K096) = +1.01182*K096*<OLN>*<NO> - PTERMS(:,23,96) = +1.01182*TPK%K096(:)*PCONC(:,40)*PCONC(:,3) + PTERMS(:,24,96) = +1.01182*TPK%K096(:)*PCONC(:,41)*PCONC(:,3) ! !PTERMS(KET,K096) = +0.37862*K096*<OLN>*<NO> - PTERMS(:,24,96) = +0.37862*TPK%K096(:)*PCONC(:,40)*PCONC(:,3) + PTERMS(:,25,96) = +0.37862*TPK%K096(:)*PCONC(:,41)*PCONC(:,3) ! !PTERMS(ONIT,K096) = +0.18401*K096*<OLN>*<NO> - PTERMS(:,26,96) = +0.18401*TPK%K096(:)*PCONC(:,40)*PCONC(:,3) + PTERMS(:,27,96) = +0.18401*TPK%K096(:)*PCONC(:,41)*PCONC(:,3) ! !PTERMS(OLN,K096) = -K096*<OLN>*<NO> - PTERMS(:,40,96) = -TPK%K096(:)*PCONC(:,40)*PCONC(:,3) + PTERMS(:,41,96) = -TPK%K096(:)*PCONC(:,41)*PCONC(:,3) ! !PTERMS(HO2,K097) = -K097*<MO2>*<HO2> - PTERMS(:,15,97) = -TPK%K097(:)*PCONC(:,32)*PCONC(:,15) + PTERMS(:,16,97) = -TPK%K097(:)*PCONC(:,33)*PCONC(:,16) ! !PTERMS(OP1,K097) = +K097*<MO2>*<HO2> - PTERMS(:,28,97) = +TPK%K097(:)*PCONC(:,32)*PCONC(:,15) + PTERMS(:,29,97) = +TPK%K097(:)*PCONC(:,33)*PCONC(:,16) ! !PTERMS(MO2,K097) = -K097*<MO2>*<HO2> - PTERMS(:,32,97) = -TPK%K097(:)*PCONC(:,32)*PCONC(:,15) + PTERMS(:,33,97) = -TPK%K097(:)*PCONC(:,33)*PCONC(:,16) ! !PTERMS(HO2,K098) = -K098*<ALKAP>*<HO2> - PTERMS(:,15,98) = -TPK%K098(:)*PCONC(:,33)*PCONC(:,15) + PTERMS(:,16,98) = -TPK%K098(:)*PCONC(:,34)*PCONC(:,16) ! !PTERMS(OP2,K098) = +1.00524*K098*<ALKAP>*<HO2> - PTERMS(:,29,98) = +1.00524*TPK%K098(:)*PCONC(:,33)*PCONC(:,15) + PTERMS(:,30,98) = +1.00524*TPK%K098(:)*PCONC(:,34)*PCONC(:,16) ! !PTERMS(ALKAP,K098) = -K098*<ALKAP>*<HO2> - PTERMS(:,33,98) = -TPK%K098(:)*PCONC(:,33)*PCONC(:,15) + PTERMS(:,34,98) = -TPK%K098(:)*PCONC(:,34)*PCONC(:,16) ! !PTERMS(HO2,K099) = -K099*<ALKEP>*<HO2> - PTERMS(:,15,99) = -TPK%K099(:)*PCONC(:,34)*PCONC(:,15) + PTERMS(:,16,99) = -TPK%K099(:)*PCONC(:,35)*PCONC(:,16) ! !PTERMS(OP2,K099) = +1.00524*K099*<ALKEP>*<HO2> - PTERMS(:,29,99) = +1.00524*TPK%K099(:)*PCONC(:,34)*PCONC(:,15) + PTERMS(:,30,99) = +1.00524*TPK%K099(:)*PCONC(:,35)*PCONC(:,16) ! !PTERMS(ALKEP,K099) = -K099*<ALKEP>*<HO2> - PTERMS(:,34,99) = -TPK%K099(:)*PCONC(:,34)*PCONC(:,15) + PTERMS(:,35,99) = -TPK%K099(:)*PCONC(:,35)*PCONC(:,16) ! !PTERMS(HO2,K0100) = -K0100*<BIOP>*<HO2> - PTERMS(:,15,100) = -TPK%K0100(:)*PCONC(:,35)*PCONC(:,15) + PTERMS(:,16,100) = -TPK%K0100(:)*PCONC(:,36)*PCONC(:,16) ! !PTERMS(OP2,K0100) = +1.00524*K0100*<BIOP>*<HO2> - PTERMS(:,29,100) = +1.00524*TPK%K0100(:)*PCONC(:,35)*PCONC(:,15) + PTERMS(:,30,100) = +1.00524*TPK%K0100(:)*PCONC(:,36)*PCONC(:,16) ! !PTERMS(BIOP,K0100) = -K0100*<BIOP>*<HO2> - PTERMS(:,35,100) = -TPK%K0100(:)*PCONC(:,35)*PCONC(:,15) + PTERMS(:,36,100) = -TPK%K0100(:)*PCONC(:,36)*PCONC(:,16) ! !PTERMS(HO2,K0101) = -K0101*<AROP>*<HO2> - PTERMS(:,15,101) = -TPK%K0101(:)*PCONC(:,38)*PCONC(:,15) + PTERMS(:,16,101) = -TPK%K0101(:)*PCONC(:,39)*PCONC(:,16) ! !PTERMS(OP2,K0101) = +1.00524*K0101*<AROP>*<HO2> - PTERMS(:,29,101) = +1.00524*TPK%K0101(:)*PCONC(:,38)*PCONC(:,15) + PTERMS(:,30,101) = +1.00524*TPK%K0101(:)*PCONC(:,39)*PCONC(:,16) ! !PTERMS(AROP,K0101) = -K0101*<AROP>*<HO2> - PTERMS(:,38,101) = -TPK%K0101(:)*PCONC(:,38)*PCONC(:,15) + PTERMS(:,39,101) = -TPK%K0101(:)*PCONC(:,39)*PCONC(:,16) ! !PTERMS(O3,K0102) = +0.17307*K0102*<CARBOP>*<HO2> - PTERMS(:,1,102) = +0.17307*TPK%K0102(:)*PCONC(:,39)*PCONC(:,15) + PTERMS(:,1,102) = +0.17307*TPK%K0102(:)*PCONC(:,40)*PCONC(:,16) ! ! RETURN @@ -31296,64 +31909,64 @@ SUBROUTINE SUBT21 !Indices 421 a 440 ! !PTERMS(HO2,K0102) = -K0102*<CARBOP>*<HO2> - PTERMS(:,15,102) = -TPK%K0102(:)*PCONC(:,39)*PCONC(:,15) + PTERMS(:,16,102) = -TPK%K0102(:)*PCONC(:,40)*PCONC(:,16) ! !PTERMS(OP2,K0102) = +0.80904*K0102*<CARBOP>*<HO2> - PTERMS(:,29,102) = +0.80904*TPK%K0102(:)*PCONC(:,39)*PCONC(:,15) + PTERMS(:,30,102) = +0.80904*TPK%K0102(:)*PCONC(:,40)*PCONC(:,16) ! !PTERMS(ORA2,K0102) = +0.17307*K0102*<CARBOP>*<HO2> - PTERMS(:,31,102) = +0.17307*TPK%K0102(:)*PCONC(:,39)*PCONC(:,15) + PTERMS(:,32,102) = +0.17307*TPK%K0102(:)*PCONC(:,40)*PCONC(:,16) ! !PTERMS(CARBOP,K0102) = -K0102*<CARBOP>*<HO2> - PTERMS(:,39,102) = -TPK%K0102(:)*PCONC(:,39)*PCONC(:,15) + PTERMS(:,40,102) = -TPK%K0102(:)*PCONC(:,40)*PCONC(:,16) ! !PTERMS(HO2,K103) = -K103*<OLN>*<HO2> - PTERMS(:,15,103) = -TPK%K103(:)*PCONC(:,40)*PCONC(:,15) + PTERMS(:,16,103) = -TPK%K103(:)*PCONC(:,41)*PCONC(:,16) ! !PTERMS(ONIT,K103) = +K103*<OLN>*<HO2> - PTERMS(:,26,103) = +TPK%K103(:)*PCONC(:,40)*PCONC(:,15) + PTERMS(:,27,103) = +TPK%K103(:)*PCONC(:,41)*PCONC(:,16) ! !PTERMS(OLN,K103) = -K103*<OLN>*<HO2> - PTERMS(:,40,103) = -TPK%K103(:)*PCONC(:,40)*PCONC(:,15) + PTERMS(:,41,103) = -TPK%K103(:)*PCONC(:,41)*PCONC(:,16) ! !PTERMS(HO2,K104) = +0.66*K104*<MO2>*<MO2> - PTERMS(:,15,104) = +0.66*TPK%K104(:)*PCONC(:,32)*PCONC(:,32) + PTERMS(:,16,104) = +0.66*TPK%K104(:)*PCONC(:,33)*PCONC(:,33) ! !PTERMS(HCHO,K104) = +1.33*K104*<MO2>*<MO2> - PTERMS(:,22,104) = +1.33*TPK%K104(:)*PCONC(:,32)*PCONC(:,32) + PTERMS(:,23,104) = +1.33*TPK%K104(:)*PCONC(:,33)*PCONC(:,33) ! !PTERMS(MO2,K104) = -K104*<MO2>*<MO2> - PTERMS(:,32,104) = -TPK%K104(:)*PCONC(:,32)*PCONC(:,32) + PTERMS(:,33,104) = -TPK%K104(:)*PCONC(:,33)*PCONC(:,33) ! !PTERMS(HO2,K105) = +0.98383*K105*<ALKAP>*<MO2> - PTERMS(:,15,105) = +0.98383*TPK%K105(:)*PCONC(:,33)*PCONC(:,32) + PTERMS(:,16,105) = +0.98383*TPK%K105(:)*PCONC(:,34)*PCONC(:,33) ! !PTERMS(HCHO,K105) = +0.80556*K105*<ALKAP>*<MO2> - PTERMS(:,22,105) = +0.80556*TPK%K105(:)*PCONC(:,33)*PCONC(:,32) + PTERMS(:,23,105) = +0.80556*TPK%K105(:)*PCONC(:,34)*PCONC(:,33) ! !PTERMS(ALD,K105) = +0.56070*K105*<ALKAP>*<MO2> - PTERMS(:,23,105) = +0.56070*TPK%K105(:)*PCONC(:,33)*PCONC(:,32) + PTERMS(:,24,105) = +0.56070*TPK%K105(:)*PCONC(:,34)*PCONC(:,33) ! !PTERMS(KET,K105) = +0.09673*K105*<ALKAP>*<MO2> - PTERMS(:,24,105) = +0.09673*TPK%K105(:)*PCONC(:,33)*PCONC(:,32) + PTERMS(:,25,105) = +0.09673*TPK%K105(:)*PCONC(:,34)*PCONC(:,33) ! !PTERMS(CARBO,K105) = +0.07976*K105*<ALKAP>*<MO2> - PTERMS(:,25,105) = +0.07976*TPK%K105(:)*PCONC(:,33)*PCONC(:,32) + PTERMS(:,26,105) = +0.07976*TPK%K105(:)*PCONC(:,34)*PCONC(:,33) ! !PTERMS(MO2,K105) = -K105*<ALKAP>*<MO2> - PTERMS(:,32,105) = -TPK%K105(:)*PCONC(:,33)*PCONC(:,32) + PTERMS(:,33,105) = -TPK%K105(:)*PCONC(:,34)*PCONC(:,33) ! !PTERMS(ALKAP,K105) = -K105*<ALKAP>*<MO2> - PTERMS(:,33,105) = -TPK%K105(:)*PCONC(:,33)*PCONC(:,32) + PTERMS(:,34,105) = -TPK%K105(:)*PCONC(:,34)*PCONC(:,33) ! !PTERMS(XO2,K105) = +0.13370*K105*<ALKAP>*<MO2> - PTERMS(:,41,105) = +0.13370*TPK%K105(:)*PCONC(:,33)*PCONC(:,32) + PTERMS(:,42,105) = +0.13370*TPK%K105(:)*PCONC(:,34)*PCONC(:,33) ! !PTERMS(HO2,K106) = +K106*<ALKEP>*<MO2> - PTERMS(:,15,106) = +TPK%K106(:)*PCONC(:,34)*PCONC(:,32) + PTERMS(:,16,106) = +TPK%K106(:)*PCONC(:,35)*PCONC(:,33) ! !PTERMS(HCHO,K106) = +1.42894*K106*<ALKEP>*<MO2> - PTERMS(:,22,106) = +1.42894*TPK%K106(:)*PCONC(:,34)*PCONC(:,32) + PTERMS(:,23,106) = +1.42894*TPK%K106(:)*PCONC(:,35)*PCONC(:,33) ! ! RETURN @@ -31364,64 +31977,64 @@ SUBROUTINE SUBT22 !Indices 441 a 460 ! !PTERMS(ALD,K106) = +0.46413*K106*<ALKEP>*<MO2> - PTERMS(:,23,106) = +0.46413*TPK%K106(:)*PCONC(:,34)*PCONC(:,32) + PTERMS(:,24,106) = +0.46413*TPK%K106(:)*PCONC(:,35)*PCONC(:,33) ! !PTERMS(KET,K106) = +0.03814*K106*<ALKEP>*<MO2> - PTERMS(:,24,106) = +0.03814*TPK%K106(:)*PCONC(:,34)*PCONC(:,32) + PTERMS(:,25,106) = +0.03814*TPK%K106(:)*PCONC(:,35)*PCONC(:,33) ! !PTERMS(MO2,K106) = -K106*<ALKEP>*<MO2> - PTERMS(:,32,106) = -TPK%K106(:)*PCONC(:,34)*PCONC(:,32) + PTERMS(:,33,106) = -TPK%K106(:)*PCONC(:,35)*PCONC(:,33) ! !PTERMS(ALKEP,K106) = -K106*<ALKEP>*<MO2> - PTERMS(:,34,106) = -TPK%K106(:)*PCONC(:,34)*PCONC(:,32) + PTERMS(:,35,106) = -TPK%K106(:)*PCONC(:,35)*PCONC(:,33) ! !PTERMS(HO2,K107) = +1.00000*K107*<BIOP>*<MO2> - PTERMS(:,15,107) = +1.00000*TPK%K107(:)*PCONC(:,35)*PCONC(:,32) + PTERMS(:,16,107) = +1.00000*TPK%K107(:)*PCONC(:,36)*PCONC(:,33) ! !PTERMS(ALKE,K107) = +0.48074*K107*<BIOP>*<MO2> - PTERMS(:,19,107) = +0.48074*TPK%K107(:)*PCONC(:,35)*PCONC(:,32) + PTERMS(:,20,107) = +0.48074*TPK%K107(:)*PCONC(:,36)*PCONC(:,33) ! !PTERMS(HCHO,K107) = +1.09000*K107*<BIOP>*<MO2> - PTERMS(:,22,107) = +1.09000*TPK%K107(:)*PCONC(:,35)*PCONC(:,32) + PTERMS(:,23,107) = +1.09000*TPK%K107(:)*PCONC(:,36)*PCONC(:,33) ! !PTERMS(ALD,K107) = +0.00000*K107*<BIOP>*<MO2> - PTERMS(:,23,107) = +0.00000*TPK%K107(:)*PCONC(:,35)*PCONC(:,32) + PTERMS(:,24,107) = +0.00000*TPK%K107(:)*PCONC(:,36)*PCONC(:,33) ! !PTERMS(KET,K107) = +0.00000*K107*<BIOP>*<MO2> - PTERMS(:,24,107) = +0.00000*TPK%K107(:)*PCONC(:,35)*PCONC(:,32) + PTERMS(:,25,107) = +0.00000*TPK%K107(:)*PCONC(:,36)*PCONC(:,33) ! !PTERMS(CARBO,K107) = +0.56064*K107*<BIOP>*<MO2> - PTERMS(:,25,107) = +0.56064*TPK%K107(:)*PCONC(:,35)*PCONC(:,32) + PTERMS(:,26,107) = +0.56064*TPK%K107(:)*PCONC(:,36)*PCONC(:,33) ! !PTERMS(MO2,K107) = -K107*<BIOP>*<MO2> - PTERMS(:,32,107) = -TPK%K107(:)*PCONC(:,35)*PCONC(:,32) + PTERMS(:,33,107) = -TPK%K107(:)*PCONC(:,36)*PCONC(:,33) ! !PTERMS(BIOP,K107) = -K107*<BIOP>*<MO2> - PTERMS(:,35,107) = -TPK%K107(:)*PCONC(:,35)*PCONC(:,32) + PTERMS(:,36,107) = -TPK%K107(:)*PCONC(:,36)*PCONC(:,33) ! !PTERMS(HO2,K108) = +1.02767*K108*<AROP>*<MO2> - PTERMS(:,15,108) = +1.02767*TPK%K108(:)*PCONC(:,38)*PCONC(:,32) + PTERMS(:,16,108) = +1.02767*TPK%K108(:)*PCONC(:,39)*PCONC(:,33) ! !PTERMS(HCHO,K108) = +K108*<AROP>*<MO2> - PTERMS(:,22,108) = +TPK%K108(:)*PCONC(:,38)*PCONC(:,32) + PTERMS(:,23,108) = +TPK%K108(:)*PCONC(:,39)*PCONC(:,33) ! !PTERMS(CARBO,K108) = +1.99461*K108*<AROP>*<MO2> - PTERMS(:,25,108) = +1.99461*TPK%K108(:)*PCONC(:,38)*PCONC(:,32) + PTERMS(:,26,108) = +1.99461*TPK%K108(:)*PCONC(:,39)*PCONC(:,33) ! !PTERMS(MO2,K108) = -K108*<AROP>*<MO2> - PTERMS(:,32,108) = -TPK%K108(:)*PCONC(:,38)*PCONC(:,32) + PTERMS(:,33,108) = -TPK%K108(:)*PCONC(:,39)*PCONC(:,33) ! !PTERMS(AROP,K108) = -K108*<AROP>*<MO2> - PTERMS(:,38,108) = -TPK%K108(:)*PCONC(:,38)*PCONC(:,32) + PTERMS(:,39,108) = -TPK%K108(:)*PCONC(:,39)*PCONC(:,33) ! !PTERMS(HO2,K109) = +0.82998*K109*<CARBOP>*<MO2> - PTERMS(:,15,109) = +0.82998*TPK%K109(:)*PCONC(:,39)*PCONC(:,32) + PTERMS(:,16,109) = +0.82998*TPK%K109(:)*PCONC(:,40)*PCONC(:,33) ! !PTERMS(HCHO,K109) = +0.95723*K109*<CARBOP>*<MO2> - PTERMS(:,22,109) = +0.95723*TPK%K109(:)*PCONC(:,39)*PCONC(:,32) + PTERMS(:,23,109) = +0.95723*TPK%K109(:)*PCONC(:,40)*PCONC(:,33) ! !PTERMS(ALD,K109) = +0.08295*K109*<CARBOP>*<MO2> - PTERMS(:,23,109) = +0.08295*TPK%K109(:)*PCONC(:,39)*PCONC(:,32) + PTERMS(:,24,109) = +0.08295*TPK%K109(:)*PCONC(:,40)*PCONC(:,33) ! ! RETURN @@ -31432,64 +32045,64 @@ SUBROUTINE SUBT23 !Indices 461 a 480 ! !PTERMS(CARBO,K109) = +0.15387*K109*<CARBOP>*<MO2> - PTERMS(:,25,109) = +0.15387*TPK%K109(:)*PCONC(:,39)*PCONC(:,32) + PTERMS(:,26,109) = +0.15387*TPK%K109(:)*PCONC(:,40)*PCONC(:,33) ! !PTERMS(ORA2,K109) = +0.13684*K109*<CARBOP>*<MO2> - PTERMS(:,31,109) = +0.13684*TPK%K109(:)*PCONC(:,39)*PCONC(:,32) + PTERMS(:,32,109) = +0.13684*TPK%K109(:)*PCONC(:,40)*PCONC(:,33) ! !PTERMS(MO2,K109) = -K109*<CARBOP>*<MO2> - PTERMS(:,32,109) = -TPK%K109(:)*PCONC(:,39)*PCONC(:,32) + PTERMS(:,33,109) = -TPK%K109(:)*PCONC(:,40)*PCONC(:,33) ! !PTERMS(CARBOP,K109) = -K109*<CARBOP>*<MO2> - PTERMS(:,39,109) = -TPK%K109(:)*PCONC(:,39)*PCONC(:,32) + PTERMS(:,40,109) = -TPK%K109(:)*PCONC(:,40)*PCONC(:,33) ! !PTERMS(XO2,K109) = +0.02212*K109*<CARBOP>*<MO2> - PTERMS(:,41,109) = +0.02212*TPK%K109(:)*PCONC(:,39)*PCONC(:,32) + PTERMS(:,42,109) = +0.02212*TPK%K109(:)*PCONC(:,40)*PCONC(:,33) ! !PTERMS(NO2,K110) = +0.32440*K110*<OLN>*<MO2> - PTERMS(:,4,110) = +0.32440*TPK%K110(:)*PCONC(:,40)*PCONC(:,32) + PTERMS(:,4,110) = +0.32440*TPK%K110(:)*PCONC(:,41)*PCONC(:,33) ! !PTERMS(HO2,K110) = +0.67560*K110*<OLN>*<MO2> - PTERMS(:,15,110) = +0.67560*TPK%K110(:)*PCONC(:,40)*PCONC(:,32) + PTERMS(:,16,110) = +0.67560*TPK%K110(:)*PCONC(:,41)*PCONC(:,33) ! !PTERMS(HCHO,K110) = +0.88625*K110*<OLN>*<MO2> - PTERMS(:,22,110) = +0.88625*TPK%K110(:)*PCONC(:,40)*PCONC(:,32) + PTERMS(:,23,110) = +0.88625*TPK%K110(:)*PCONC(:,41)*PCONC(:,33) ! !PTERMS(ALD,K110) = +0.41524*K110*<OLN>*<MO2> - PTERMS(:,23,110) = +0.41524*TPK%K110(:)*PCONC(:,40)*PCONC(:,32) + PTERMS(:,24,110) = +0.41524*TPK%K110(:)*PCONC(:,41)*PCONC(:,33) ! !PTERMS(KET,K110) = +0.09667*K110*<OLN>*<MO2> - PTERMS(:,24,110) = +0.09667*TPK%K110(:)*PCONC(:,40)*PCONC(:,32) + PTERMS(:,25,110) = +0.09667*TPK%K110(:)*PCONC(:,41)*PCONC(:,33) ! !PTERMS(ONIT,K110) = +0.67560*K110*<OLN>*<MO2> - PTERMS(:,26,110) = +0.67560*TPK%K110(:)*PCONC(:,40)*PCONC(:,32) + PTERMS(:,27,110) = +0.67560*TPK%K110(:)*PCONC(:,41)*PCONC(:,33) ! !PTERMS(MO2,K110) = -K110*<OLN>*<MO2> - PTERMS(:,32,110) = -TPK%K110(:)*PCONC(:,40)*PCONC(:,32) + PTERMS(:,33,110) = -TPK%K110(:)*PCONC(:,41)*PCONC(:,33) ! !PTERMS(OLN,K110) = -K110*<OLN>*<MO2> - PTERMS(:,40,110) = -TPK%K110(:)*PCONC(:,40)*PCONC(:,32) + PTERMS(:,41,110) = -TPK%K110(:)*PCONC(:,41)*PCONC(:,33) ! !PTERMS(HO2,K111) = +0.48079*K111*<ALKAP>*<CARBOP> - PTERMS(:,15,111) = +0.48079*TPK%K111(:)*PCONC(:,33)*PCONC(:,39) + PTERMS(:,16,111) = +0.48079*TPK%K111(:)*PCONC(:,34)*PCONC(:,40) ! !PTERMS(HCHO,K111) = +0.07600*K111*<ALKAP>*<CARBOP> - PTERMS(:,22,111) = +0.07600*TPK%K111(:)*PCONC(:,33)*PCONC(:,39) + PTERMS(:,23,111) = +0.07600*TPK%K111(:)*PCONC(:,34)*PCONC(:,40) ! !PTERMS(ALD,K111) = +0.71461*K111*<ALKAP>*<CARBOP> - PTERMS(:,23,111) = +0.71461*TPK%K111(:)*PCONC(:,33)*PCONC(:,39) + PTERMS(:,24,111) = +0.71461*TPK%K111(:)*PCONC(:,34)*PCONC(:,40) ! !PTERMS(KET,K111) = +0.18819*K111*<ALKAP>*<CARBOP> - PTERMS(:,24,111) = +0.18819*TPK%K111(:)*PCONC(:,33)*PCONC(:,39) + PTERMS(:,25,111) = +0.18819*TPK%K111(:)*PCONC(:,34)*PCONC(:,40) ! !PTERMS(CARBO,K111) = +0.06954*K111*<ALKAP>*<CARBOP> - PTERMS(:,25,111) = +0.06954*TPK%K111(:)*PCONC(:,33)*PCONC(:,39) + PTERMS(:,26,111) = +0.06954*TPK%K111(:)*PCONC(:,34)*PCONC(:,40) ! !PTERMS(ORA2,K111) = +0.49810*K111*<ALKAP>*<CARBOP> - PTERMS(:,31,111) = +0.49810*TPK%K111(:)*PCONC(:,33)*PCONC(:,39) + PTERMS(:,32,111) = +0.49810*TPK%K111(:)*PCONC(:,34)*PCONC(:,40) ! !PTERMS(MO2,K111) = +0.51480*K111*<ALKAP>*<CARBOP> - PTERMS(:,32,111) = +0.51480*TPK%K111(:)*PCONC(:,33)*PCONC(:,39) + PTERMS(:,33,111) = +0.51480*TPK%K111(:)*PCONC(:,34)*PCONC(:,40) ! ! RETURN @@ -31500,64 +32113,64 @@ SUBROUTINE SUBT24 !Indices 481 a 500 ! !PTERMS(ALKAP,K111) = -K111*<ALKAP>*<CARBOP> - PTERMS(:,33,111) = -TPK%K111(:)*PCONC(:,33)*PCONC(:,39) + PTERMS(:,34,111) = -TPK%K111(:)*PCONC(:,34)*PCONC(:,40) ! !PTERMS(CARBOP,K111) = -K111*<ALKAP>*<CARBOP> - PTERMS(:,39,111) = -TPK%K111(:)*PCONC(:,33)*PCONC(:,39) + PTERMS(:,40,111) = -TPK%K111(:)*PCONC(:,34)*PCONC(:,40) ! !PTERMS(XO2,K111) = +0.11306*K111*<ALKAP>*<CARBOP> - PTERMS(:,41,111) = +0.11306*TPK%K111(:)*PCONC(:,33)*PCONC(:,39) + PTERMS(:,42,111) = +0.11306*TPK%K111(:)*PCONC(:,34)*PCONC(:,40) ! !PTERMS(HO2,K112) = +0.50078*K112*<ALKEP>*<CARBOP> - PTERMS(:,15,112) = +0.50078*TPK%K112(:)*PCONC(:,34)*PCONC(:,39) + PTERMS(:,16,112) = +0.50078*TPK%K112(:)*PCONC(:,35)*PCONC(:,40) ! !PTERMS(HCHO,K112) = +0.68192*K112*<ALKEP>*<CARBOP> - PTERMS(:,22,112) = +0.68192*TPK%K112(:)*PCONC(:,34)*PCONC(:,39) + PTERMS(:,23,112) = +0.68192*TPK%K112(:)*PCONC(:,35)*PCONC(:,40) ! !PTERMS(ALD,K112) = +0.68374*K112*<ALKEP>*<CARBOP> - PTERMS(:,23,112) = +0.68374*TPK%K112(:)*PCONC(:,34)*PCONC(:,39) + PTERMS(:,24,112) = +0.68374*TPK%K112(:)*PCONC(:,35)*PCONC(:,40) ! !PTERMS(KET,K112) = +0.06579*K112*<ALKEP>*<CARBOP> - PTERMS(:,24,112) = +0.06579*TPK%K112(:)*PCONC(:,34)*PCONC(:,39) + PTERMS(:,25,112) = +0.06579*TPK%K112(:)*PCONC(:,35)*PCONC(:,40) ! !PTERMS(ORA2,K112) = +0.49922*K112*<ALKEP>*<CARBOP> - PTERMS(:,31,112) = +0.49922*TPK%K112(:)*PCONC(:,34)*PCONC(:,39) + PTERMS(:,32,112) = +0.49922*TPK%K112(:)*PCONC(:,35)*PCONC(:,40) ! !PTERMS(MO2,K112) = +0.50078*K112*<ALKEP>*<CARBOP> - PTERMS(:,32,112) = +0.50078*TPK%K112(:)*PCONC(:,34)*PCONC(:,39) + PTERMS(:,33,112) = +0.50078*TPK%K112(:)*PCONC(:,35)*PCONC(:,40) ! !PTERMS(ALKEP,K112) = -K112*<ALKEP>*<CARBOP> - PTERMS(:,34,112) = -TPK%K112(:)*PCONC(:,34)*PCONC(:,39) + PTERMS(:,35,112) = -TPK%K112(:)*PCONC(:,35)*PCONC(:,40) ! !PTERMS(CARBOP,K112) = -K112*<ALKEP>*<CARBOP> - PTERMS(:,39,112) = -TPK%K112(:)*PCONC(:,34)*PCONC(:,39) + PTERMS(:,40,112) = -TPK%K112(:)*PCONC(:,35)*PCONC(:,40) ! !PTERMS(HO2,K113) = +0.50600*K113*<BIOP>*<CARBOP> - PTERMS(:,15,113) = +0.50600*TPK%K113(:)*PCONC(:,35)*PCONC(:,39) + PTERMS(:,16,113) = +0.50600*TPK%K113(:)*PCONC(:,36)*PCONC(:,40) ! !PTERMS(ALKE,K113) = +0.24463*K113*<BIOP>*<CARBOP> - PTERMS(:,19,113) = +0.24463*TPK%K113(:)*PCONC(:,35)*PCONC(:,39) + PTERMS(:,20,113) = +0.24463*TPK%K113(:)*PCONC(:,36)*PCONC(:,40) ! !PTERMS(HCHO,K113) = +0.34000*K113*<BIOP>*<CARBOP> - PTERMS(:,22,113) = +0.34000*TPK%K113(:)*PCONC(:,35)*PCONC(:,39) + PTERMS(:,23,113) = +0.34000*TPK%K113(:)*PCONC(:,36)*PCONC(:,40) ! !PTERMS(ALD,K113) = +0.00000*K113*<BIOP>*<CARBOP> - PTERMS(:,23,113) = +0.00000*TPK%K113(:)*PCONC(:,35)*PCONC(:,39) + PTERMS(:,24,113) = +0.00000*TPK%K113(:)*PCONC(:,36)*PCONC(:,40) ! !PTERMS(KET,K113) = +0.00000*K113*<BIOP>*<CARBOP> - PTERMS(:,24,113) = +0.00000*TPK%K113(:)*PCONC(:,35)*PCONC(:,39) + PTERMS(:,25,113) = +0.00000*TPK%K113(:)*PCONC(:,36)*PCONC(:,40) ! !PTERMS(CARBO,K113) = +0.78591*K113*<BIOP>*<CARBOP> - PTERMS(:,25,113) = +0.78591*TPK%K113(:)*PCONC(:,35)*PCONC(:,39) + PTERMS(:,26,113) = +0.78591*TPK%K113(:)*PCONC(:,36)*PCONC(:,40) ! !PTERMS(ORA2,K113) = +0.49400*K113*<BIOP>*<CARBOP> - PTERMS(:,31,113) = +0.49400*TPK%K113(:)*PCONC(:,35)*PCONC(:,39) + PTERMS(:,32,113) = +0.49400*TPK%K113(:)*PCONC(:,36)*PCONC(:,40) ! !PTERMS(MO2,K113) = +0.50600*K113*<BIOP>*<CARBOP> - PTERMS(:,32,113) = +0.50600*TPK%K113(:)*PCONC(:,35)*PCONC(:,39) + PTERMS(:,33,113) = +0.50600*TPK%K113(:)*PCONC(:,36)*PCONC(:,40) ! !PTERMS(BIOP,K113) = -K113*<BIOP>*<CARBOP> - PTERMS(:,35,113) = -TPK%K113(:)*PCONC(:,35)*PCONC(:,39) + PTERMS(:,36,113) = -TPK%K113(:)*PCONC(:,36)*PCONC(:,40) ! ! RETURN @@ -31568,64 +32181,64 @@ SUBROUTINE SUBT25 !Indices 501 a 520 ! !PTERMS(CARBOP,K113) = -K113*<BIOP>*<CARBOP> - PTERMS(:,39,113) = -TPK%K113(:)*PCONC(:,35)*PCONC(:,39) + PTERMS(:,40,113) = -TPK%K113(:)*PCONC(:,36)*PCONC(:,40) ! !PTERMS(HO2,K114) = +K114*<AROP>*<CARBOP> - PTERMS(:,15,114) = +TPK%K114(:)*PCONC(:,38)*PCONC(:,39) + PTERMS(:,16,114) = +TPK%K114(:)*PCONC(:,39)*PCONC(:,40) ! !PTERMS(CARBO,K114) = +1.99455*K114*<AROP>*<CARBOP> - PTERMS(:,25,114) = +1.99455*TPK%K114(:)*PCONC(:,38)*PCONC(:,39) + PTERMS(:,26,114) = +1.99455*TPK%K114(:)*PCONC(:,39)*PCONC(:,40) ! !PTERMS(MO2,K114) = +K114*<AROP>*<CARBOP> - PTERMS(:,32,114) = +TPK%K114(:)*PCONC(:,38)*PCONC(:,39) + PTERMS(:,33,114) = +TPK%K114(:)*PCONC(:,39)*PCONC(:,40) ! !PTERMS(AROP,K114) = -K114*<AROP>*<CARBOP> - PTERMS(:,38,114) = -TPK%K114(:)*PCONC(:,38)*PCONC(:,39) + PTERMS(:,39,114) = -TPK%K114(:)*PCONC(:,39)*PCONC(:,40) ! !PTERMS(CARBOP,K114) = -K114*<AROP>*<CARBOP> - PTERMS(:,39,114) = -TPK%K114(:)*PCONC(:,38)*PCONC(:,39) + PTERMS(:,40,114) = -TPK%K114(:)*PCONC(:,39)*PCONC(:,40) ! !PTERMS(HO2,K115) = +0.07566*K115*<CARBOP>*<CARBOP> - PTERMS(:,15,115) = +0.07566*TPK%K115(:)*PCONC(:,39)*PCONC(:,39) + PTERMS(:,16,115) = +0.07566*TPK%K115(:)*PCONC(:,40)*PCONC(:,40) ! !PTERMS(HCHO,K115) = +0.03432*K115*<CARBOP>*<CARBOP> - PTERMS(:,22,115) = +0.03432*TPK%K115(:)*PCONC(:,39)*PCONC(:,39) + PTERMS(:,23,115) = +0.03432*TPK%K115(:)*PCONC(:,40)*PCONC(:,40) ! !PTERMS(ALD,K115) = +0.06969*K115*<CARBOP>*<CARBOP> - PTERMS(:,23,115) = +0.06969*TPK%K115(:)*PCONC(:,39)*PCONC(:,39) + PTERMS(:,24,115) = +0.06969*TPK%K115(:)*PCONC(:,40)*PCONC(:,40) ! !PTERMS(KET,K115) = +0.02190*K115*<CARBOP>*<CARBOP> - PTERMS(:,24,115) = +0.02190*TPK%K115(:)*PCONC(:,39)*PCONC(:,39) + PTERMS(:,25,115) = +0.02190*TPK%K115(:)*PCONC(:,40)*PCONC(:,40) ! !PTERMS(CARBO,K115) = +0.10777*K115*<CARBOP>*<CARBOP> - PTERMS(:,25,115) = +0.10777*TPK%K115(:)*PCONC(:,39)*PCONC(:,39) + PTERMS(:,26,115) = +0.10777*TPK%K115(:)*PCONC(:,40)*PCONC(:,40) ! !PTERMS(ORA2,K115) = +0.09955*K115*<CARBOP>*<CARBOP> - PTERMS(:,31,115) = +0.09955*TPK%K115(:)*PCONC(:,39)*PCONC(:,39) + PTERMS(:,32,115) = +0.09955*TPK%K115(:)*PCONC(:,40)*PCONC(:,40) ! !PTERMS(MO2,K115) = +1.66702*K115*<CARBOP>*<CARBOP> - PTERMS(:,32,115) = +1.66702*TPK%K115(:)*PCONC(:,39)*PCONC(:,39) + PTERMS(:,33,115) = +1.66702*TPK%K115(:)*PCONC(:,40)*PCONC(:,40) ! !PTERMS(CARBOP,K115) = -K115*<CARBOP>*<CARBOP> - PTERMS(:,39,115) = -TPK%K115(:)*PCONC(:,39)*PCONC(:,39) + PTERMS(:,40,115) = -TPK%K115(:)*PCONC(:,40)*PCONC(:,40) ! !PTERMS(XO2,K115) = +0.01593*K115*<CARBOP>*<CARBOP> - PTERMS(:,41,115) = +0.01593*TPK%K115(:)*PCONC(:,39)*PCONC(:,39) + PTERMS(:,42,115) = +0.01593*TPK%K115(:)*PCONC(:,40)*PCONC(:,40) ! !PTERMS(NO2,K116) = +0.00000*K116*<OLN>*<CARBOP> - PTERMS(:,4,116) = +0.00000*TPK%K116(:)*PCONC(:,40)*PCONC(:,39) + PTERMS(:,4,116) = +0.00000*TPK%K116(:)*PCONC(:,41)*PCONC(:,40) ! !PTERMS(HO2,K116) = +0.17599*K116*<OLN>*<CARBOP> - PTERMS(:,15,116) = +0.17599*TPK%K116(:)*PCONC(:,40)*PCONC(:,39) + PTERMS(:,16,116) = +0.17599*TPK%K116(:)*PCONC(:,41)*PCONC(:,40) ! !PTERMS(HCHO,K116) = +0.13414*K116*<OLN>*<CARBOP> - PTERMS(:,22,116) = +0.13414*TPK%K116(:)*PCONC(:,40)*PCONC(:,39) + PTERMS(:,23,116) = +0.13414*TPK%K116(:)*PCONC(:,41)*PCONC(:,40) ! !PTERMS(ALD,K116) = +0.42122*K116*<OLN>*<CARBOP> - PTERMS(:,23,116) = +0.42122*TPK%K116(:)*PCONC(:,40)*PCONC(:,39) + PTERMS(:,24,116) = +0.42122*TPK%K116(:)*PCONC(:,41)*PCONC(:,40) ! !PTERMS(KET,K116) = +0.10822*K116*<OLN>*<CARBOP> - PTERMS(:,24,116) = +0.10822*TPK%K116(:)*PCONC(:,40)*PCONC(:,39) + PTERMS(:,25,116) = +0.10822*TPK%K116(:)*PCONC(:,41)*PCONC(:,40) ! ! RETURN @@ -31636,64 +32249,64 @@ SUBROUTINE SUBT26 !Indices 521 a 540 ! !PTERMS(ONIT,K116) = +0.66562*K116*<OLN>*<CARBOP> - PTERMS(:,26,116) = +0.66562*TPK%K116(:)*PCONC(:,40)*PCONC(:,39) + PTERMS(:,27,116) = +0.66562*TPK%K116(:)*PCONC(:,41)*PCONC(:,40) ! !PTERMS(ORA2,K116) = +0.48963*K116*<OLN>*<CARBOP> - PTERMS(:,31,116) = +0.48963*TPK%K116(:)*PCONC(:,40)*PCONC(:,39) + PTERMS(:,32,116) = +0.48963*TPK%K116(:)*PCONC(:,41)*PCONC(:,40) ! !PTERMS(MO2,K116) = +0.51037*K116*<OLN>*<CARBOP> - PTERMS(:,32,116) = +0.51037*TPK%K116(:)*PCONC(:,40)*PCONC(:,39) + PTERMS(:,33,116) = +0.51037*TPK%K116(:)*PCONC(:,41)*PCONC(:,40) ! !PTERMS(CARBOP,K116) = -K116*<OLN>*<CARBOP> - PTERMS(:,39,116) = -TPK%K116(:)*PCONC(:,40)*PCONC(:,39) + PTERMS(:,40,116) = -TPK%K116(:)*PCONC(:,41)*PCONC(:,40) ! !PTERMS(OLN,K116) = -K116*<OLN>*<CARBOP> - PTERMS(:,40,116) = -TPK%K116(:)*PCONC(:,40)*PCONC(:,39) + PTERMS(:,41,116) = -TPK%K116(:)*PCONC(:,41)*PCONC(:,40) ! !PTERMS(HO2,K117) = +K117*<OLN>*<OLN> - PTERMS(:,15,117) = +TPK%K117(:)*PCONC(:,40)*PCONC(:,40) + PTERMS(:,16,117) = +TPK%K117(:)*PCONC(:,41)*PCONC(:,41) ! !PTERMS(ONIT,K117) = +2.00*K117*<OLN>*<OLN> - PTERMS(:,26,117) = +2.00*TPK%K117(:)*PCONC(:,40)*PCONC(:,40) + PTERMS(:,27,117) = +2.00*TPK%K117(:)*PCONC(:,41)*PCONC(:,41) ! !PTERMS(OLN,K117) = -K117*<OLN>*<OLN> - PTERMS(:,40,117) = -TPK%K117(:)*PCONC(:,40)*PCONC(:,40) + PTERMS(:,41,117) = -TPK%K117(:)*PCONC(:,41)*PCONC(:,41) ! !PTERMS(NO2,K118) = +0.00000*K118*<OLN>*<OLN> - PTERMS(:,4,118) = +0.00000*TPK%K118(:)*PCONC(:,40)*PCONC(:,40) + PTERMS(:,4,118) = +0.00000*TPK%K118(:)*PCONC(:,41)*PCONC(:,41) ! !PTERMS(HO2,K118) = +0.00000*K118*<OLN>*<OLN> - PTERMS(:,15,118) = +0.00000*TPK%K118(:)*PCONC(:,40)*PCONC(:,40) + PTERMS(:,16,118) = +0.00000*TPK%K118(:)*PCONC(:,41)*PCONC(:,41) ! !PTERMS(HCHO,K118) = +0.00000*K118*<OLN>*<OLN> - PTERMS(:,22,118) = +0.00000*TPK%K118(:)*PCONC(:,40)*PCONC(:,40) + PTERMS(:,23,118) = +0.00000*TPK%K118(:)*PCONC(:,41)*PCONC(:,41) ! !PTERMS(ALD,K118) = +0.00000*K118*<OLN>*<OLN> - PTERMS(:,23,118) = +0.00000*TPK%K118(:)*PCONC(:,40)*PCONC(:,40) + PTERMS(:,24,118) = +0.00000*TPK%K118(:)*PCONC(:,41)*PCONC(:,41) ! !PTERMS(KET,K118) = +0.00000*K118*<OLN>*<OLN> - PTERMS(:,24,118) = +0.00000*TPK%K118(:)*PCONC(:,40)*PCONC(:,40) + PTERMS(:,25,118) = +0.00000*TPK%K118(:)*PCONC(:,41)*PCONC(:,41) ! !PTERMS(ONIT,K118) = +0.00000*K118*<OLN>*<OLN> - PTERMS(:,26,118) = +0.00000*TPK%K118(:)*PCONC(:,40)*PCONC(:,40) + PTERMS(:,27,118) = +0.00000*TPK%K118(:)*PCONC(:,41)*PCONC(:,41) ! !PTERMS(OLN,K118) = -K118*<OLN>*<OLN> - PTERMS(:,40,118) = -TPK%K118(:)*PCONC(:,40)*PCONC(:,40) + PTERMS(:,41,118) = -TPK%K118(:)*PCONC(:,41)*PCONC(:,41) ! !PTERMS(NO2,K119) = +K119*<MO2>*<NO3> - PTERMS(:,4,119) = +TPK%K119(:)*PCONC(:,32)*PCONC(:,5) + PTERMS(:,4,119) = +TPK%K119(:)*PCONC(:,33)*PCONC(:,5) ! !PTERMS(NO3,K119) = -K119*<MO2>*<NO3> - PTERMS(:,5,119) = -TPK%K119(:)*PCONC(:,32)*PCONC(:,5) + PTERMS(:,5,119) = -TPK%K119(:)*PCONC(:,33)*PCONC(:,5) ! !PTERMS(HO2,K119) = +K119*<MO2>*<NO3> - PTERMS(:,15,119) = +TPK%K119(:)*PCONC(:,32)*PCONC(:,5) + PTERMS(:,16,119) = +TPK%K119(:)*PCONC(:,33)*PCONC(:,5) ! !PTERMS(HCHO,K119) = +K119*<MO2>*<NO3> - PTERMS(:,22,119) = +TPK%K119(:)*PCONC(:,32)*PCONC(:,5) + PTERMS(:,23,119) = +TPK%K119(:)*PCONC(:,33)*PCONC(:,5) ! !PTERMS(MO2,K119) = -K119*<MO2>*<NO3> - PTERMS(:,32,119) = -TPK%K119(:)*PCONC(:,32)*PCONC(:,5) + PTERMS(:,33,119) = -TPK%K119(:)*PCONC(:,33)*PCONC(:,5) ! ! RETURN @@ -31704,64 +32317,64 @@ SUBROUTINE SUBT27 !Indices 541 a 560 ! !PTERMS(NO2,K120) = +K120*<ALKAP>*<NO3> - PTERMS(:,4,120) = +TPK%K120(:)*PCONC(:,33)*PCONC(:,5) + PTERMS(:,4,120) = +TPK%K120(:)*PCONC(:,34)*PCONC(:,5) ! !PTERMS(NO3,K120) = -K120*<ALKAP>*<NO3> - PTERMS(:,5,120) = -TPK%K120(:)*PCONC(:,33)*PCONC(:,5) + PTERMS(:,5,120) = -TPK%K120(:)*PCONC(:,34)*PCONC(:,5) ! !PTERMS(HO2,K120) = +0.81290*K120*<ALKAP>*<NO3> - PTERMS(:,15,120) = +0.81290*TPK%K120(:)*PCONC(:,33)*PCONC(:,5) + PTERMS(:,16,120) = +0.81290*TPK%K120(:)*PCONC(:,34)*PCONC(:,5) ! !PTERMS(HCHO,K120) = +0.03142*K120*<ALKAP>*<NO3> - PTERMS(:,22,120) = +0.03142*TPK%K120(:)*PCONC(:,33)*PCONC(:,5) + PTERMS(:,23,120) = +0.03142*TPK%K120(:)*PCONC(:,34)*PCONC(:,5) ! !PTERMS(ALD,K120) = +0.33743*K120*<ALKAP>*<NO3> - PTERMS(:,23,120) = +0.33743*TPK%K120(:)*PCONC(:,33)*PCONC(:,5) + PTERMS(:,24,120) = +0.33743*TPK%K120(:)*PCONC(:,34)*PCONC(:,5) ! !PTERMS(KET,K120) = +0.62978*K120*<ALKAP>*<NO3> - PTERMS(:,24,120) = +0.62978*TPK%K120(:)*PCONC(:,33)*PCONC(:,5) + PTERMS(:,25,120) = +0.62978*TPK%K120(:)*PCONC(:,34)*PCONC(:,5) ! !PTERMS(CARBO,K120) = +0.03531*K120*<ALKAP>*<NO3> - PTERMS(:,25,120) = +0.03531*TPK%K120(:)*PCONC(:,33)*PCONC(:,5) + PTERMS(:,26,120) = +0.03531*TPK%K120(:)*PCONC(:,34)*PCONC(:,5) ! !PTERMS(MO2,K120) = +0.09731*K120*<ALKAP>*<NO3> - PTERMS(:,32,120) = +0.09731*TPK%K120(:)*PCONC(:,33)*PCONC(:,5) + PTERMS(:,33,120) = +0.09731*TPK%K120(:)*PCONC(:,34)*PCONC(:,5) ! !PTERMS(ALKAP,K120) = -K120*<ALKAP>*<NO3> - PTERMS(:,33,120) = -TPK%K120(:)*PCONC(:,33)*PCONC(:,5) + PTERMS(:,34,120) = -TPK%K120(:)*PCONC(:,34)*PCONC(:,5) ! !PTERMS(XO2,K120) = +0.16271*K120*<ALKAP>*<NO3> - PTERMS(:,41,120) = +0.16271*TPK%K120(:)*PCONC(:,33)*PCONC(:,5) + PTERMS(:,42,120) = +0.16271*TPK%K120(:)*PCONC(:,34)*PCONC(:,5) ! !PTERMS(NO2,K121) = +K121*<ALKEP>*<NO3> - PTERMS(:,4,121) = +TPK%K121(:)*PCONC(:,34)*PCONC(:,5) + PTERMS(:,4,121) = +TPK%K121(:)*PCONC(:,35)*PCONC(:,5) ! !PTERMS(NO3,K121) = -K121*<ALKEP>*<NO3> - PTERMS(:,5,121) = -TPK%K121(:)*PCONC(:,34)*PCONC(:,5) + PTERMS(:,5,121) = -TPK%K121(:)*PCONC(:,35)*PCONC(:,5) ! !PTERMS(HO2,K121) = +K121*<ALKEP>*<NO3> - PTERMS(:,15,121) = +TPK%K121(:)*PCONC(:,34)*PCONC(:,5) + PTERMS(:,16,121) = +TPK%K121(:)*PCONC(:,35)*PCONC(:,5) ! !PTERMS(HCHO,K121) = +1.40909*K121*<ALKEP>*<NO3> - PTERMS(:,22,121) = +1.40909*TPK%K121(:)*PCONC(:,34)*PCONC(:,5) + PTERMS(:,23,121) = +1.40909*TPK%K121(:)*PCONC(:,35)*PCONC(:,5) ! !PTERMS(ALD,K121) = +0.43039*K121*<ALKEP>*<NO3> - PTERMS(:,23,121) = +0.43039*TPK%K121(:)*PCONC(:,34)*PCONC(:,5) + PTERMS(:,24,121) = +0.43039*TPK%K121(:)*PCONC(:,35)*PCONC(:,5) ! !PTERMS(KET,K121) = +0.02051*K121*<ALKEP>*<NO3> - PTERMS(:,24,121) = +0.02051*TPK%K121(:)*PCONC(:,34)*PCONC(:,5) + PTERMS(:,25,121) = +0.02051*TPK%K121(:)*PCONC(:,35)*PCONC(:,5) ! !PTERMS(ALKEP,K121) = -K121*<ALKEP>*<NO3> - PTERMS(:,34,121) = -TPK%K121(:)*PCONC(:,34)*PCONC(:,5) + PTERMS(:,35,121) = -TPK%K121(:)*PCONC(:,35)*PCONC(:,5) ! !PTERMS(NO2,K122) = +K122*<BIOP>*<NO3> - PTERMS(:,4,122) = +TPK%K122(:)*PCONC(:,35)*PCONC(:,5) + PTERMS(:,4,122) = +TPK%K122(:)*PCONC(:,36)*PCONC(:,5) ! !PTERMS(NO3,K122) = -K122*<BIOP>*<NO3> - PTERMS(:,5,122) = -TPK%K122(:)*PCONC(:,35)*PCONC(:,5) + PTERMS(:,5,122) = -TPK%K122(:)*PCONC(:,36)*PCONC(:,5) ! !PTERMS(HO2,K122) = +K122*<BIOP>*<NO3> - PTERMS(:,15,122) = +TPK%K122(:)*PCONC(:,35)*PCONC(:,5) + PTERMS(:,16,122) = +TPK%K122(:)*PCONC(:,36)*PCONC(:,5) ! ! RETURN @@ -31772,64 +32385,64 @@ SUBROUTINE SUBT28 !Indices 561 a 580 ! !PTERMS(ALKE,K122) = +0.42729*K122*<BIOP>*<NO3> - PTERMS(:,19,122) = +0.42729*TPK%K122(:)*PCONC(:,35)*PCONC(:,5) + PTERMS(:,20,122) = +0.42729*TPK%K122(:)*PCONC(:,36)*PCONC(:,5) ! !PTERMS(HCHO,K122) = +0.68600*K122*<BIOP>*<NO3> - PTERMS(:,22,122) = +0.68600*TPK%K122(:)*PCONC(:,35)*PCONC(:,5) + PTERMS(:,23,122) = +0.68600*TPK%K122(:)*PCONC(:,36)*PCONC(:,5) ! !PTERMS(ALD,K122) = +0.00000*K122*<BIOP>*<NO3> - PTERMS(:,23,122) = +0.00000*TPK%K122(:)*PCONC(:,35)*PCONC(:,5) + PTERMS(:,24,122) = +0.00000*TPK%K122(:)*PCONC(:,36)*PCONC(:,5) ! !PTERMS(KET,K122) = +0.00000*K122*<BIOP>*<NO3> - PTERMS(:,24,122) = +0.00000*TPK%K122(:)*PCONC(:,35)*PCONC(:,5) + PTERMS(:,25,122) = +0.00000*TPK%K122(:)*PCONC(:,36)*PCONC(:,5) ! !PTERMS(CARBO,K122) = +0.61160*K122*<BIOP>*<NO3> - PTERMS(:,25,122) = +0.61160*TPK%K122(:)*PCONC(:,35)*PCONC(:,5) + PTERMS(:,26,122) = +0.61160*TPK%K122(:)*PCONC(:,36)*PCONC(:,5) ! !PTERMS(BIOP,K122) = -K122*<BIOP>*<NO3> - PTERMS(:,35,122) = -TPK%K122(:)*PCONC(:,35)*PCONC(:,5) + PTERMS(:,36,122) = -TPK%K122(:)*PCONC(:,36)*PCONC(:,5) ! !PTERMS(NO2,K123) = +K123*<AROP>*<NO3> - PTERMS(:,4,123) = +TPK%K123(:)*PCONC(:,38)*PCONC(:,5) + PTERMS(:,4,123) = +TPK%K123(:)*PCONC(:,39)*PCONC(:,5) ! !PTERMS(NO3,K123) = -K123*<AROP>*<NO3> - PTERMS(:,5,123) = -TPK%K123(:)*PCONC(:,38)*PCONC(:,5) + PTERMS(:,5,123) = -TPK%K123(:)*PCONC(:,39)*PCONC(:,5) ! !PTERMS(HO2,K123) = +K123*<AROP>*<NO3> - PTERMS(:,15,123) = +TPK%K123(:)*PCONC(:,38)*PCONC(:,5) + PTERMS(:,16,123) = +TPK%K123(:)*PCONC(:,39)*PCONC(:,5) ! !PTERMS(CARBO,K123) = +2.81904*K123*<AROP>*<NO3> - PTERMS(:,25,123) = +2.81904*TPK%K123(:)*PCONC(:,38)*PCONC(:,5) + PTERMS(:,26,123) = +2.81904*TPK%K123(:)*PCONC(:,39)*PCONC(:,5) ! !PTERMS(AROP,K123) = -K123*<AROP>*<NO3> - PTERMS(:,38,123) = -TPK%K123(:)*PCONC(:,38)*PCONC(:,5) + PTERMS(:,39,123) = -TPK%K123(:)*PCONC(:,39)*PCONC(:,5) ! !PTERMS(NO2,K124) = +K124*<CARBOP>*<NO3> - PTERMS(:,4,124) = +TPK%K124(:)*PCONC(:,39)*PCONC(:,5) + PTERMS(:,4,124) = +TPK%K124(:)*PCONC(:,40)*PCONC(:,5) ! !PTERMS(NO3,K124) = -K124*<CARBOP>*<NO3> - PTERMS(:,5,124) = -TPK%K124(:)*PCONC(:,39)*PCONC(:,5) + PTERMS(:,5,124) = -TPK%K124(:)*PCONC(:,40)*PCONC(:,5) ! !PTERMS(HO2,K124) = +0.04915*K124*<CARBOP>*<NO3> - PTERMS(:,15,124) = +0.04915*TPK%K124(:)*PCONC(:,39)*PCONC(:,5) + PTERMS(:,16,124) = +0.04915*TPK%K124(:)*PCONC(:,40)*PCONC(:,5) ! !PTERMS(HCHO,K124) = +0.03175*K124*<CARBOP>*<NO3> - PTERMS(:,22,124) = +0.03175*TPK%K124(:)*PCONC(:,39)*PCONC(:,5) + PTERMS(:,23,124) = +0.03175*TPK%K124(:)*PCONC(:,40)*PCONC(:,5) ! !PTERMS(ALD,K124) = +0.02936*K124*<CARBOP>*<NO3> - PTERMS(:,23,124) = +0.02936*TPK%K124(:)*PCONC(:,39)*PCONC(:,5) + PTERMS(:,24,124) = +0.02936*TPK%K124(:)*PCONC(:,40)*PCONC(:,5) ! !PTERMS(CARBO,K124) = +0.03455*K124*<CARBOP>*<NO3> - PTERMS(:,25,124) = +0.03455*TPK%K124(:)*PCONC(:,39)*PCONC(:,5) + PTERMS(:,26,124) = +0.03455*TPK%K124(:)*PCONC(:,40)*PCONC(:,5) ! !PTERMS(MO2,K124) = +0.91910*K124*<CARBOP>*<NO3> - PTERMS(:,32,124) = +0.91910*TPK%K124(:)*PCONC(:,39)*PCONC(:,5) + PTERMS(:,33,124) = +0.91910*TPK%K124(:)*PCONC(:,40)*PCONC(:,5) ! !PTERMS(CARBOP,K124) = -K124*<CARBOP>*<NO3> - PTERMS(:,39,124) = -TPK%K124(:)*PCONC(:,39)*PCONC(:,5) + PTERMS(:,40,124) = -TPK%K124(:)*PCONC(:,40)*PCONC(:,5) ! !PTERMS(XO2,K124) = +0.01021*K124*<CARBOP>*<NO3> - PTERMS(:,41,124) = +0.01021*TPK%K124(:)*PCONC(:,39)*PCONC(:,5) + PTERMS(:,42,124) = +0.01021*TPK%K124(:)*PCONC(:,40)*PCONC(:,5) ! ! RETURN @@ -31840,64 +32453,64 @@ SUBROUTINE SUBT29 !Indices 581 a 600 ! !PTERMS(NO2,K125) = +1.74072*K125*<OLN>*<NO3> - PTERMS(:,4,125) = +1.74072*TPK%K125(:)*PCONC(:,40)*PCONC(:,5) + PTERMS(:,4,125) = +1.74072*TPK%K125(:)*PCONC(:,41)*PCONC(:,5) ! !PTERMS(NO3,K125) = -K125*<OLN>*<NO3> - PTERMS(:,5,125) = -TPK%K125(:)*PCONC(:,40)*PCONC(:,5) + PTERMS(:,5,125) = -TPK%K125(:)*PCONC(:,41)*PCONC(:,5) ! !PTERMS(HO2,K125) = +0.25928*K125*<OLN>*<NO3> - PTERMS(:,15,125) = +0.25928*TPK%K125(:)*PCONC(:,40)*PCONC(:,5) + PTERMS(:,16,125) = +0.25928*TPK%K125(:)*PCONC(:,41)*PCONC(:,5) ! !PTERMS(HCHO,K125) = +0.20740*K125*<OLN>*<NO3> - PTERMS(:,22,125) = +0.20740*TPK%K125(:)*PCONC(:,40)*PCONC(:,5) + PTERMS(:,23,125) = +0.20740*TPK%K125(:)*PCONC(:,41)*PCONC(:,5) ! !PTERMS(ALD,K125) = +0.91850*K125*<OLN>*<NO3> - PTERMS(:,23,125) = +0.91850*TPK%K125(:)*PCONC(:,40)*PCONC(:,5) + PTERMS(:,24,125) = +0.91850*TPK%K125(:)*PCONC(:,41)*PCONC(:,5) ! !PTERMS(KET,K125) = +0.34740*K125*<OLN>*<NO3> - PTERMS(:,24,125) = +0.34740*TPK%K125(:)*PCONC(:,40)*PCONC(:,5) + PTERMS(:,25,125) = +0.34740*TPK%K125(:)*PCONC(:,41)*PCONC(:,5) ! !PTERMS(ONIT,K125) = +0.25928*K125*<OLN>*<NO3> - PTERMS(:,26,125) = +0.25928*TPK%K125(:)*PCONC(:,40)*PCONC(:,5) + PTERMS(:,27,125) = +0.25928*TPK%K125(:)*PCONC(:,41)*PCONC(:,5) ! !PTERMS(OLN,K125) = -K125*<OLN>*<NO3> - PTERMS(:,40,125) = -TPK%K125(:)*PCONC(:,40)*PCONC(:,5) + PTERMS(:,41,125) = -TPK%K125(:)*PCONC(:,41)*PCONC(:,5) ! !PTERMS(HO2,K126) = -K126*<XO2>*<HO2> - PTERMS(:,15,126) = -TPK%K126(:)*PCONC(:,41)*PCONC(:,15) + PTERMS(:,16,126) = -TPK%K126(:)*PCONC(:,42)*PCONC(:,16) ! !PTERMS(OP2,K126) = +1.00524*K126*<XO2>*<HO2> - PTERMS(:,29,126) = +1.00524*TPK%K126(:)*PCONC(:,41)*PCONC(:,15) + PTERMS(:,30,126) = +1.00524*TPK%K126(:)*PCONC(:,42)*PCONC(:,16) ! !PTERMS(XO2,K126) = -K126*<XO2>*<HO2> - PTERMS(:,41,126) = -TPK%K126(:)*PCONC(:,41)*PCONC(:,15) + PTERMS(:,42,126) = -TPK%K126(:)*PCONC(:,42)*PCONC(:,16) ! !PTERMS(HO2,K127) = +K127*<XO2>*<MO2> - PTERMS(:,15,127) = +TPK%K127(:)*PCONC(:,41)*PCONC(:,32) + PTERMS(:,16,127) = +TPK%K127(:)*PCONC(:,42)*PCONC(:,33) ! !PTERMS(HCHO,K127) = +K127*<XO2>*<MO2> - PTERMS(:,22,127) = +TPK%K127(:)*PCONC(:,41)*PCONC(:,32) + PTERMS(:,23,127) = +TPK%K127(:)*PCONC(:,42)*PCONC(:,33) ! !PTERMS(MO2,K127) = -K127*<XO2>*<MO2> - PTERMS(:,32,127) = -TPK%K127(:)*PCONC(:,41)*PCONC(:,32) + PTERMS(:,33,127) = -TPK%K127(:)*PCONC(:,42)*PCONC(:,33) ! !PTERMS(XO2,K127) = -K127*<XO2>*<MO2> - PTERMS(:,41,127) = -TPK%K127(:)*PCONC(:,41)*PCONC(:,32) + PTERMS(:,42,127) = -TPK%K127(:)*PCONC(:,42)*PCONC(:,33) ! !PTERMS(MO2,K128) = +K128*<XO2>*<CARBOP> - PTERMS(:,32,128) = +TPK%K128(:)*PCONC(:,41)*PCONC(:,39) + PTERMS(:,33,128) = +TPK%K128(:)*PCONC(:,42)*PCONC(:,40) ! !PTERMS(CARBOP,K128) = -K128*<XO2>*<CARBOP> - PTERMS(:,39,128) = -TPK%K128(:)*PCONC(:,41)*PCONC(:,39) + PTERMS(:,40,128) = -TPK%K128(:)*PCONC(:,42)*PCONC(:,40) ! !PTERMS(XO2,K128) = -K128*<XO2>*<CARBOP> - PTERMS(:,41,128) = -TPK%K128(:)*PCONC(:,41)*PCONC(:,39) + PTERMS(:,42,128) = -TPK%K128(:)*PCONC(:,42)*PCONC(:,40) ! !PTERMS(XO2,K129) = -K129*<XO2>*<XO2> - PTERMS(:,41,129) = -TPK%K129(:)*PCONC(:,41)*PCONC(:,41) + PTERMS(:,42,129) = -TPK%K129(:)*PCONC(:,42)*PCONC(:,42) ! !PTERMS(NO,K130) = -K130*<XO2>*<NO> - PTERMS(:,3,130) = -TPK%K130(:)*PCONC(:,41)*PCONC(:,3) + PTERMS(:,3,130) = -TPK%K130(:)*PCONC(:,42)*PCONC(:,3) ! ! RETURN @@ -31908,1166 +32521,1193 @@ SUBROUTINE SUBT30 !Indices 601 a 620 ! !PTERMS(NO2,K130) = +K130*<XO2>*<NO> - PTERMS(:,4,130) = +TPK%K130(:)*PCONC(:,41)*PCONC(:,3) + PTERMS(:,4,130) = +TPK%K130(:)*PCONC(:,42)*PCONC(:,3) ! !PTERMS(XO2,K130) = -K130*<XO2>*<NO> - PTERMS(:,41,130) = -TPK%K130(:)*PCONC(:,41)*PCONC(:,3) + PTERMS(:,42,130) = -TPK%K130(:)*PCONC(:,42)*PCONC(:,3) ! !PTERMS(NO2,K131) = +K131*<XO2>*<NO3> - PTERMS(:,4,131) = +TPK%K131(:)*PCONC(:,41)*PCONC(:,5) + PTERMS(:,4,131) = +TPK%K131(:)*PCONC(:,42)*PCONC(:,5) ! !PTERMS(NO3,K131) = -K131*<XO2>*<NO3> - PTERMS(:,5,131) = -TPK%K131(:)*PCONC(:,41)*PCONC(:,5) + PTERMS(:,5,131) = -TPK%K131(:)*PCONC(:,42)*PCONC(:,5) ! !PTERMS(XO2,K131) = -K131*<XO2>*<NO3> - PTERMS(:,41,131) = -TPK%K131(:)*PCONC(:,41)*PCONC(:,5) + PTERMS(:,42,131) = -TPK%K131(:)*PCONC(:,42)*PCONC(:,5) ! !PTERMS(SULF,K132) = -K132*<SULF> - PTERMS(:,12,132) = -TPK%K132(:)*PCONC(:,12) + PTERMS(:,13,132) = -TPK%K132(:)*PCONC(:,13) +! +!PTERMS(NO2,K133) = +K133*<DMS>*<NO3> + PTERMS(:,4,133) = +TPK%K133(:)*PCONC(:,11)*PCONC(:,5) +! +!PTERMS(NO3,K133) = -K133*<DMS>*<NO3> + PTERMS(:,5,133) = -TPK%K133(:)*PCONC(:,11)*PCONC(:,5) +! +!PTERMS(DMS,K133) = -K133*<DMS>*<NO3> + PTERMS(:,11,133) = -TPK%K133(:)*PCONC(:,11)*PCONC(:,5) +! +!PTERMS(SO2,K133) = +K133*<DMS>*<NO3> + PTERMS(:,12,133) = +TPK%K133(:)*PCONC(:,11)*PCONC(:,5) +! +!PTERMS(DMS,K134) = -K134*<DMS>*<O3P> + PTERMS(:,11,134) = -TPK%K134(:)*PCONC(:,11)*TPK%O3P(:) +! +!PTERMS(SO2,K134) = +K134*<DMS>*<O3P> + PTERMS(:,12,134) = +TPK%K134(:)*PCONC(:,11)*TPK%O3P(:) +! +!PTERMS(DMS,K135) = -K135*<DMS>*<OH> + PTERMS(:,11,135) = -TPK%K135(:)*PCONC(:,11)*PCONC(:,15) +! +!PTERMS(SO2,K135) = +0.8*K135*<DMS>*<OH> + PTERMS(:,12,135) = +0.8*TPK%K135(:)*PCONC(:,11)*PCONC(:,15) +! +!PTERMS(OH,K135) = -K135*<DMS>*<OH> + PTERMS(:,15,135) = -TPK%K135(:)*PCONC(:,11)*PCONC(:,15) ! !PTERMS(O3,KTC1) = -KTC1*<O3> - PTERMS(:,1,133) = -TPK%KTC1(:)*PCONC(:,1) + PTERMS(:,1,136) = -TPK%KTC1(:)*PCONC(:,1) ! !PTERMS(WC_O3,KTC1) = +KTC1*<O3> - PTERMS(:,42,133) = +TPK%KTC1(:)*PCONC(:,1) + PTERMS(:,43,136) = +TPK%KTC1(:)*PCONC(:,1) ! !PTERMS(H2O2,KTC2) = -KTC2*<H2O2> - PTERMS(:,2,134) = -TPK%KTC2(:)*PCONC(:,2) + PTERMS(:,2,137) = -TPK%KTC2(:)*PCONC(:,2) ! !PTERMS(WC_H2O2,KTC2) = +KTC2*<H2O2> - PTERMS(:,43,134) = +TPK%KTC2(:)*PCONC(:,2) + PTERMS(:,44,137) = +TPK%KTC2(:)*PCONC(:,2) ! !PTERMS(NO,KTC3) = -KTC3*<NO> - PTERMS(:,3,135) = -TPK%KTC3(:)*PCONC(:,3) + PTERMS(:,3,138) = -TPK%KTC3(:)*PCONC(:,3) +! +! +RETURN +END SUBROUTINE SUBT30 +! +SUBROUTINE SUBT31 +! +!Indices 621 a 640 ! !PTERMS(WC_NO,KTC3) = +KTC3*<NO> - PTERMS(:,44,135) = +TPK%KTC3(:)*PCONC(:,3) + PTERMS(:,45,138) = +TPK%KTC3(:)*PCONC(:,3) ! !PTERMS(NO2,KTC4) = -KTC4*<NO2> - PTERMS(:,4,136) = -TPK%KTC4(:)*PCONC(:,4) + PTERMS(:,4,139) = -TPK%KTC4(:)*PCONC(:,4) ! !PTERMS(WC_NO2,KTC4) = +KTC4*<NO2> - PTERMS(:,45,136) = +TPK%KTC4(:)*PCONC(:,4) + PTERMS(:,46,139) = +TPK%KTC4(:)*PCONC(:,4) ! !PTERMS(NO3,KTC5) = -KTC5*<NO3> - PTERMS(:,5,137) = -TPK%KTC5(:)*PCONC(:,5) + PTERMS(:,5,140) = -TPK%KTC5(:)*PCONC(:,5) ! !PTERMS(WC_NO3,KTC5) = +KTC5*<NO3> - PTERMS(:,46,137) = +TPK%KTC5(:)*PCONC(:,5) + PTERMS(:,47,140) = +TPK%KTC5(:)*PCONC(:,5) ! !PTERMS(N2O5,KTC6) = -KTC6*<N2O5> - PTERMS(:,6,138) = -TPK%KTC6(:)*PCONC(:,6) + PTERMS(:,6,141) = -TPK%KTC6(:)*PCONC(:,6) ! !PTERMS(WC_N2O5,KTC6) = +KTC6*<N2O5> - PTERMS(:,47,138) = +TPK%KTC6(:)*PCONC(:,6) + PTERMS(:,48,141) = +TPK%KTC6(:)*PCONC(:,6) ! !PTERMS(HONO,KTC7) = -KTC7*<HONO> - PTERMS(:,7,139) = -TPK%KTC7(:)*PCONC(:,7) + PTERMS(:,7,142) = -TPK%KTC7(:)*PCONC(:,7) ! !PTERMS(WC_HONO,KTC7) = +KTC7*<HONO> - PTERMS(:,48,139) = +TPK%KTC7(:)*PCONC(:,7) -! -! -RETURN -END SUBROUTINE SUBT30 -! -SUBROUTINE SUBT31 -! -!Indices 621 a 640 + PTERMS(:,49,142) = +TPK%KTC7(:)*PCONC(:,7) ! !PTERMS(HNO3,KTC8) = -KTC8*<HNO3> - PTERMS(:,8,140) = -TPK%KTC8(:)*PCONC(:,8) + PTERMS(:,8,143) = -TPK%KTC8(:)*PCONC(:,8) ! !PTERMS(WC_HNO3,KTC8) = +KTC8*<HNO3> - PTERMS(:,49,140) = +TPK%KTC8(:)*PCONC(:,8) + PTERMS(:,50,143) = +TPK%KTC8(:)*PCONC(:,8) ! !PTERMS(HNO4,KTC9) = -KTC9*<HNO4> - PTERMS(:,9,141) = -TPK%KTC9(:)*PCONC(:,9) + PTERMS(:,9,144) = -TPK%KTC9(:)*PCONC(:,9) ! !PTERMS(WC_HNO4,KTC9) = +KTC9*<HNO4> - PTERMS(:,50,141) = +TPK%KTC9(:)*PCONC(:,9) + PTERMS(:,51,144) = +TPK%KTC9(:)*PCONC(:,9) ! !PTERMS(NH3,KTC10) = -KTC10*<NH3> - PTERMS(:,10,142) = -TPK%KTC10(:)*PCONC(:,10) + PTERMS(:,10,145) = -TPK%KTC10(:)*PCONC(:,10) ! !PTERMS(WC_NH3,KTC10) = +KTC10*<NH3> - PTERMS(:,51,142) = +TPK%KTC10(:)*PCONC(:,10) + PTERMS(:,52,145) = +TPK%KTC10(:)*PCONC(:,10) ! !PTERMS(OH,KTC11) = -KTC11*<OH> - PTERMS(:,14,143) = -TPK%KTC11(:)*PCONC(:,14) + PTERMS(:,15,146) = -TPK%KTC11(:)*PCONC(:,15) ! !PTERMS(WC_OH,KTC11) = +KTC11*<OH> - PTERMS(:,52,143) = +TPK%KTC11(:)*PCONC(:,14) + PTERMS(:,53,146) = +TPK%KTC11(:)*PCONC(:,15) ! !PTERMS(HO2,KTC12) = -KTC12*<HO2> - PTERMS(:,15,144) = -TPK%KTC12(:)*PCONC(:,15) + PTERMS(:,16,147) = -TPK%KTC12(:)*PCONC(:,16) ! !PTERMS(WC_HO2,KTC12) = +KTC12*<HO2> - PTERMS(:,53,144) = +TPK%KTC12(:)*PCONC(:,15) + PTERMS(:,54,147) = +TPK%KTC12(:)*PCONC(:,16) ! !PTERMS(WC_CO2,KTC13) = +KTC13*<CO2> - PTERMS(:,54,145) = +TPK%KTC13(:)*TPK%CO2(:) + PTERMS(:,55,148) = +TPK%KTC13(:)*TPK%CO2(:) +! +! +RETURN +END SUBROUTINE SUBT31 +! +SUBROUTINE SUBT32 +! +!Indices 641 a 660 ! !PTERMS(SO2,KTC14) = -KTC14*<SO2> - PTERMS(:,11,146) = -TPK%KTC14(:)*PCONC(:,11) + PTERMS(:,12,149) = -TPK%KTC14(:)*PCONC(:,12) ! !PTERMS(WC_SO2,KTC14) = +KTC14*<SO2> - PTERMS(:,55,146) = +TPK%KTC14(:)*PCONC(:,11) + PTERMS(:,56,149) = +TPK%KTC14(:)*PCONC(:,12) ! !PTERMS(SULF,KTC15) = -KTC15*<SULF> - PTERMS(:,12,147) = -TPK%KTC15(:)*PCONC(:,12) + PTERMS(:,13,150) = -TPK%KTC15(:)*PCONC(:,13) ! !PTERMS(WC_SULF,KTC15) = +KTC15*<SULF> - PTERMS(:,56,147) = +TPK%KTC15(:)*PCONC(:,12) + PTERMS(:,57,150) = +TPK%KTC15(:)*PCONC(:,13) ! !PTERMS(HCHO,KTC16) = -KTC16*<HCHO> - PTERMS(:,22,148) = -TPK%KTC16(:)*PCONC(:,22) + PTERMS(:,23,151) = -TPK%KTC16(:)*PCONC(:,23) ! !PTERMS(WC_HCHO,KTC16) = +KTC16*<HCHO> - PTERMS(:,57,148) = +TPK%KTC16(:)*PCONC(:,22) + PTERMS(:,58,151) = +TPK%KTC16(:)*PCONC(:,23) ! !PTERMS(ORA1,KTC17) = -KTC17*<ORA1> - PTERMS(:,30,149) = -TPK%KTC17(:)*PCONC(:,30) + PTERMS(:,31,152) = -TPK%KTC17(:)*PCONC(:,31) ! !PTERMS(WC_ORA1,KTC17) = +KTC17*<ORA1> - PTERMS(:,58,149) = +TPK%KTC17(:)*PCONC(:,30) + PTERMS(:,59,152) = +TPK%KTC17(:)*PCONC(:,31) ! !PTERMS(ORA2,KTC18) = -KTC18*<ORA2> - PTERMS(:,31,150) = -TPK%KTC18(:)*PCONC(:,31) -! -! -RETURN -END SUBROUTINE SUBT31 -! -SUBROUTINE SUBT32 -! -!Indices 641 a 660 + PTERMS(:,32,153) = -TPK%KTC18(:)*PCONC(:,32) ! !PTERMS(WC_ORA2,KTC18) = +KTC18*<ORA2> - PTERMS(:,59,150) = +TPK%KTC18(:)*PCONC(:,31) + PTERMS(:,60,153) = +TPK%KTC18(:)*PCONC(:,32) ! !PTERMS(MO2,KTC19) = -KTC19*<MO2> - PTERMS(:,32,151) = -TPK%KTC19(:)*PCONC(:,32) + PTERMS(:,33,154) = -TPK%KTC19(:)*PCONC(:,33) ! !PTERMS(WC_MO2,KTC19) = +KTC19*<MO2> - PTERMS(:,60,151) = +TPK%KTC19(:)*PCONC(:,32) + PTERMS(:,61,154) = +TPK%KTC19(:)*PCONC(:,33) ! !PTERMS(OP1,KTC20) = -KTC20*<OP1> - PTERMS(:,28,152) = -TPK%KTC20(:)*PCONC(:,28) + PTERMS(:,29,155) = -TPK%KTC20(:)*PCONC(:,29) ! !PTERMS(WC_OP1,KTC20) = +KTC20*<OP1> - PTERMS(:,61,152) = +TPK%KTC20(:)*PCONC(:,28) + PTERMS(:,62,155) = +TPK%KTC20(:)*PCONC(:,29) ! !PTERMS(O3,KTC21) = +KTC21*<WC_O3> - PTERMS(:,1,153) = +TPK%KTC21(:)*PCONC(:,42) + PTERMS(:,1,156) = +TPK%KTC21(:)*PCONC(:,43) ! !PTERMS(WC_O3,KTC21) = -KTC21*<WC_O3> - PTERMS(:,42,153) = -TPK%KTC21(:)*PCONC(:,42) + PTERMS(:,43,156) = -TPK%KTC21(:)*PCONC(:,43) ! !PTERMS(H2O2,KTC22) = +KTC22*<WC_H2O2> - PTERMS(:,2,154) = +TPK%KTC22(:)*PCONC(:,43) + PTERMS(:,2,157) = +TPK%KTC22(:)*PCONC(:,44) ! !PTERMS(WC_H2O2,KTC22) = -KTC22*<WC_H2O2> - PTERMS(:,43,154) = -TPK%KTC22(:)*PCONC(:,43) + PTERMS(:,44,157) = -TPK%KTC22(:)*PCONC(:,44) ! !PTERMS(NO,KTC23) = +KTC23*<WC_NO> - PTERMS(:,3,155) = +TPK%KTC23(:)*PCONC(:,44) + PTERMS(:,3,158) = +TPK%KTC23(:)*PCONC(:,45) ! !PTERMS(WC_NO,KTC23) = -KTC23*<WC_NO> - PTERMS(:,44,155) = -TPK%KTC23(:)*PCONC(:,44) + PTERMS(:,45,158) = -TPK%KTC23(:)*PCONC(:,45) +! +! +RETURN +END SUBROUTINE SUBT32 +! +SUBROUTINE SUBT33 +! +!Indices 661 a 680 ! !PTERMS(NO2,KTC24) = +KTC24*<WC_NO2> - PTERMS(:,4,156) = +TPK%KTC24(:)*PCONC(:,45) + PTERMS(:,4,159) = +TPK%KTC24(:)*PCONC(:,46) ! !PTERMS(WC_NO2,KTC24) = -KTC24*<WC_NO2> - PTERMS(:,45,156) = -TPK%KTC24(:)*PCONC(:,45) + PTERMS(:,46,159) = -TPK%KTC24(:)*PCONC(:,46) ! !PTERMS(NO3,KTC25) = +KTC25*<WC_NO3> - PTERMS(:,5,157) = +TPK%KTC25(:)*PCONC(:,46) + PTERMS(:,5,160) = +TPK%KTC25(:)*PCONC(:,47) ! !PTERMS(WC_NO3,KTC25) = -KTC25*<WC_NO3> - PTERMS(:,46,157) = -TPK%KTC25(:)*PCONC(:,46) + PTERMS(:,47,160) = -TPK%KTC25(:)*PCONC(:,47) ! !PTERMS(N2O5,KTC26) = +KTC26*<WC_N2O5> - PTERMS(:,6,158) = +TPK%KTC26(:)*PCONC(:,47) + PTERMS(:,6,161) = +TPK%KTC26(:)*PCONC(:,48) ! !PTERMS(WC_N2O5,KTC26) = -KTC26*<WC_N2O5> - PTERMS(:,47,158) = -TPK%KTC26(:)*PCONC(:,47) + PTERMS(:,48,161) = -TPK%KTC26(:)*PCONC(:,48) ! !PTERMS(HONO,KTC27) = +KTC27*<WC_HONO> - PTERMS(:,7,159) = +TPK%KTC27(:)*PCONC(:,48) + PTERMS(:,7,162) = +TPK%KTC27(:)*PCONC(:,49) ! !PTERMS(WC_HONO,KTC27) = -KTC27*<WC_HONO> - PTERMS(:,48,159) = -TPK%KTC27(:)*PCONC(:,48) + PTERMS(:,49,162) = -TPK%KTC27(:)*PCONC(:,49) ! !PTERMS(HNO3,KTC28) = +KTC28*<WC_HNO3> - PTERMS(:,8,160) = +TPK%KTC28(:)*PCONC(:,49) -! -! -RETURN -END SUBROUTINE SUBT32 -! -SUBROUTINE SUBT33 -! -!Indices 661 a 680 + PTERMS(:,8,163) = +TPK%KTC28(:)*PCONC(:,50) ! !PTERMS(WC_HNO3,KTC28) = -KTC28*<WC_HNO3> - PTERMS(:,49,160) = -TPK%KTC28(:)*PCONC(:,49) + PTERMS(:,50,163) = -TPK%KTC28(:)*PCONC(:,50) ! !PTERMS(HNO4,KTC29) = +KTC29*<WC_HNO4> - PTERMS(:,9,161) = +TPK%KTC29(:)*PCONC(:,50) + PTERMS(:,9,164) = +TPK%KTC29(:)*PCONC(:,51) ! !PTERMS(WC_HNO4,KTC29) = -KTC29*<WC_HNO4> - PTERMS(:,50,161) = -TPK%KTC29(:)*PCONC(:,50) + PTERMS(:,51,164) = -TPK%KTC29(:)*PCONC(:,51) ! !PTERMS(NH3,KTC30) = +KTC30*<WC_NH3> - PTERMS(:,10,162) = +TPK%KTC30(:)*PCONC(:,51) + PTERMS(:,10,165) = +TPK%KTC30(:)*PCONC(:,52) ! !PTERMS(WC_NH3,KTC30) = -KTC30*<WC_NH3> - PTERMS(:,51,162) = -TPK%KTC30(:)*PCONC(:,51) + PTERMS(:,52,165) = -TPK%KTC30(:)*PCONC(:,52) ! !PTERMS(OH,KTC31) = +KTC31*<WC_OH> - PTERMS(:,14,163) = +TPK%KTC31(:)*PCONC(:,52) + PTERMS(:,15,166) = +TPK%KTC31(:)*PCONC(:,53) ! !PTERMS(WC_OH,KTC31) = -KTC31*<WC_OH> - PTERMS(:,52,163) = -TPK%KTC31(:)*PCONC(:,52) + PTERMS(:,53,166) = -TPK%KTC31(:)*PCONC(:,53) ! !PTERMS(HO2,KTC32) = +KTC32*<WC_HO2> - PTERMS(:,15,164) = +TPK%KTC32(:)*PCONC(:,53) + PTERMS(:,16,167) = +TPK%KTC32(:)*PCONC(:,54) ! !PTERMS(WC_HO2,KTC32) = -KTC32*<WC_HO2> - PTERMS(:,53,164) = -TPK%KTC32(:)*PCONC(:,53) + PTERMS(:,54,167) = -TPK%KTC32(:)*PCONC(:,54) ! !PTERMS(WC_CO2,KTC33) = -KTC33*<WC_CO2> - PTERMS(:,54,165) = -TPK%KTC33(:)*PCONC(:,54) + PTERMS(:,55,168) = -TPK%KTC33(:)*PCONC(:,55) ! !PTERMS(SO2,KTC34) = +KTC34*<WC_SO2> - PTERMS(:,11,166) = +TPK%KTC34(:)*PCONC(:,55) + PTERMS(:,12,169) = +TPK%KTC34(:)*PCONC(:,56) +! +! +RETURN +END SUBROUTINE SUBT33 +! +SUBROUTINE SUBT34 +! +!Indices 681 a 700 ! !PTERMS(WC_SO2,KTC34) = -KTC34*<WC_SO2> - PTERMS(:,55,166) = -TPK%KTC34(:)*PCONC(:,55) + PTERMS(:,56,169) = -TPK%KTC34(:)*PCONC(:,56) ! !PTERMS(SULF,KTC35) = +KTC35*<WC_SULF> - PTERMS(:,12,167) = +TPK%KTC35(:)*PCONC(:,56) + PTERMS(:,13,170) = +TPK%KTC35(:)*PCONC(:,57) ! !PTERMS(WC_SULF,KTC35) = -KTC35*<WC_SULF> - PTERMS(:,56,167) = -TPK%KTC35(:)*PCONC(:,56) + PTERMS(:,57,170) = -TPK%KTC35(:)*PCONC(:,57) ! !PTERMS(HCHO,KTC36) = +KTC36*<WC_HCHO> - PTERMS(:,22,168) = +TPK%KTC36(:)*PCONC(:,57) + PTERMS(:,23,171) = +TPK%KTC36(:)*PCONC(:,58) ! !PTERMS(WC_HCHO,KTC36) = -KTC36*<WC_HCHO> - PTERMS(:,57,168) = -TPK%KTC36(:)*PCONC(:,57) + PTERMS(:,58,171) = -TPK%KTC36(:)*PCONC(:,58) ! !PTERMS(ORA1,KTC37) = +KTC37*<WC_ORA1> - PTERMS(:,30,169) = +TPK%KTC37(:)*PCONC(:,58) + PTERMS(:,31,172) = +TPK%KTC37(:)*PCONC(:,59) ! !PTERMS(WC_ORA1,KTC37) = -KTC37*<WC_ORA1> - PTERMS(:,58,169) = -TPK%KTC37(:)*PCONC(:,58) + PTERMS(:,59,172) = -TPK%KTC37(:)*PCONC(:,59) ! !PTERMS(ORA2,KTC38) = +KTC38*<WC_ORA2> - PTERMS(:,31,170) = +TPK%KTC38(:)*PCONC(:,59) + PTERMS(:,32,173) = +TPK%KTC38(:)*PCONC(:,60) ! !PTERMS(WC_ORA2,KTC38) = -KTC38*<WC_ORA2> - PTERMS(:,59,170) = -TPK%KTC38(:)*PCONC(:,59) -! -! -RETURN -END SUBROUTINE SUBT33 -! -SUBROUTINE SUBT34 -! -!Indices 681 a 700 + PTERMS(:,60,173) = -TPK%KTC38(:)*PCONC(:,60) ! !PTERMS(MO2,KTC39) = +KTC39*<WC_MO2> - PTERMS(:,32,171) = +TPK%KTC39(:)*PCONC(:,60) + PTERMS(:,33,174) = +TPK%KTC39(:)*PCONC(:,61) ! !PTERMS(WC_MO2,KTC39) = -KTC39*<WC_MO2> - PTERMS(:,60,171) = -TPK%KTC39(:)*PCONC(:,60) + PTERMS(:,61,174) = -TPK%KTC39(:)*PCONC(:,61) ! !PTERMS(OP1,KTC40) = +KTC40*<WC_OP1> - PTERMS(:,28,172) = +TPK%KTC40(:)*PCONC(:,61) + PTERMS(:,29,175) = +TPK%KTC40(:)*PCONC(:,62) ! !PTERMS(WC_OP1,KTC40) = -KTC40*<WC_OP1> - PTERMS(:,61,172) = -TPK%KTC40(:)*PCONC(:,61) + PTERMS(:,62,175) = -TPK%KTC40(:)*PCONC(:,62) ! !PTERMS(O3,KTR1) = -KTR1*<O3> - PTERMS(:,1,173) = -TPK%KTR1(:)*PCONC(:,1) + PTERMS(:,1,176) = -TPK%KTR1(:)*PCONC(:,1) ! !PTERMS(WR_O3,KTR1) = +KTR1*<O3> - PTERMS(:,67,173) = +TPK%KTR1(:)*PCONC(:,1) + PTERMS(:,68,176) = +TPK%KTR1(:)*PCONC(:,1) ! !PTERMS(H2O2,KTR2) = -KTR2*<H2O2> - PTERMS(:,2,174) = -TPK%KTR2(:)*PCONC(:,2) + PTERMS(:,2,177) = -TPK%KTR2(:)*PCONC(:,2) ! !PTERMS(WR_H2O2,KTR2) = +KTR2*<H2O2> - PTERMS(:,68,174) = +TPK%KTR2(:)*PCONC(:,2) + PTERMS(:,69,177) = +TPK%KTR2(:)*PCONC(:,2) ! !PTERMS(NO,KTR3) = -KTR3*<NO> - PTERMS(:,3,175) = -TPK%KTR3(:)*PCONC(:,3) + PTERMS(:,3,178) = -TPK%KTR3(:)*PCONC(:,3) ! !PTERMS(WR_NO,KTR3) = +KTR3*<NO> - PTERMS(:,69,175) = +TPK%KTR3(:)*PCONC(:,3) + PTERMS(:,70,178) = +TPK%KTR3(:)*PCONC(:,3) ! !PTERMS(NO2,KTR4) = -KTR4*<NO2> - PTERMS(:,4,176) = -TPK%KTR4(:)*PCONC(:,4) + PTERMS(:,4,179) = -TPK%KTR4(:)*PCONC(:,4) +! +! +RETURN +END SUBROUTINE SUBT34 +! +SUBROUTINE SUBT35 +! +!Indices 701 a 720 ! !PTERMS(WR_NO2,KTR4) = +KTR4*<NO2> - PTERMS(:,70,176) = +TPK%KTR4(:)*PCONC(:,4) + PTERMS(:,71,179) = +TPK%KTR4(:)*PCONC(:,4) ! !PTERMS(NO3,KTR5) = -KTR5*<NO3> - PTERMS(:,5,177) = -TPK%KTR5(:)*PCONC(:,5) + PTERMS(:,5,180) = -TPK%KTR5(:)*PCONC(:,5) ! !PTERMS(WR_NO3,KTR5) = +KTR5*<NO3> - PTERMS(:,71,177) = +TPK%KTR5(:)*PCONC(:,5) + PTERMS(:,72,180) = +TPK%KTR5(:)*PCONC(:,5) ! !PTERMS(N2O5,KTR6) = -KTR6*<N2O5> - PTERMS(:,6,178) = -TPK%KTR6(:)*PCONC(:,6) + PTERMS(:,6,181) = -TPK%KTR6(:)*PCONC(:,6) ! !PTERMS(WR_N2O5,KTR6) = +KTR6*<N2O5> - PTERMS(:,72,178) = +TPK%KTR6(:)*PCONC(:,6) + PTERMS(:,73,181) = +TPK%KTR6(:)*PCONC(:,6) ! !PTERMS(HONO,KTR7) = -KTR7*<HONO> - PTERMS(:,7,179) = -TPK%KTR7(:)*PCONC(:,7) + PTERMS(:,7,182) = -TPK%KTR7(:)*PCONC(:,7) ! !PTERMS(WR_HONO,KTR7) = +KTR7*<HONO> - PTERMS(:,73,179) = +TPK%KTR7(:)*PCONC(:,7) + PTERMS(:,74,182) = +TPK%KTR7(:)*PCONC(:,7) ! !PTERMS(HNO3,KTR8) = -KTR8*<HNO3> - PTERMS(:,8,180) = -TPK%KTR8(:)*PCONC(:,8) + PTERMS(:,8,183) = -TPK%KTR8(:)*PCONC(:,8) ! !PTERMS(WR_HNO3,KTR8) = +KTR8*<HNO3> - PTERMS(:,74,180) = +TPK%KTR8(:)*PCONC(:,8) -! -! -RETURN -END SUBROUTINE SUBT34 -! -SUBROUTINE SUBT35 -! -!Indices 701 a 720 + PTERMS(:,75,183) = +TPK%KTR8(:)*PCONC(:,8) ! !PTERMS(HNO4,KTR9) = -KTR9*<HNO4> - PTERMS(:,9,181) = -TPK%KTR9(:)*PCONC(:,9) + PTERMS(:,9,184) = -TPK%KTR9(:)*PCONC(:,9) ! !PTERMS(WR_HNO4,KTR9) = +KTR9*<HNO4> - PTERMS(:,75,181) = +TPK%KTR9(:)*PCONC(:,9) + PTERMS(:,76,184) = +TPK%KTR9(:)*PCONC(:,9) ! !PTERMS(NH3,KTR10) = -KTR10*<NH3> - PTERMS(:,10,182) = -TPK%KTR10(:)*PCONC(:,10) + PTERMS(:,10,185) = -TPK%KTR10(:)*PCONC(:,10) ! !PTERMS(WR_NH3,KTR10) = +KTR10*<NH3> - PTERMS(:,76,182) = +TPK%KTR10(:)*PCONC(:,10) + PTERMS(:,77,185) = +TPK%KTR10(:)*PCONC(:,10) ! !PTERMS(OH,KTR11) = -KTR11*<OH> - PTERMS(:,14,183) = -TPK%KTR11(:)*PCONC(:,14) + PTERMS(:,15,186) = -TPK%KTR11(:)*PCONC(:,15) ! !PTERMS(WR_OH,KTR11) = +KTR11*<OH> - PTERMS(:,77,183) = +TPK%KTR11(:)*PCONC(:,14) + PTERMS(:,78,186) = +TPK%KTR11(:)*PCONC(:,15) ! !PTERMS(HO2,KTR12) = -KTR12*<HO2> - PTERMS(:,15,184) = -TPK%KTR12(:)*PCONC(:,15) + PTERMS(:,16,187) = -TPK%KTR12(:)*PCONC(:,16) ! !PTERMS(WR_HO2,KTR12) = +KTR12*<HO2> - PTERMS(:,78,184) = +TPK%KTR12(:)*PCONC(:,15) + PTERMS(:,79,187) = +TPK%KTR12(:)*PCONC(:,16) ! !PTERMS(WR_CO2,KTR13) = +KTR13*<CO2> - PTERMS(:,79,185) = +TPK%KTR13(:)*TPK%CO2(:) + PTERMS(:,80,188) = +TPK%KTR13(:)*TPK%CO2(:) ! !PTERMS(SO2,KTR14) = -KTR14*<SO2> - PTERMS(:,11,186) = -TPK%KTR14(:)*PCONC(:,11) + PTERMS(:,12,189) = -TPK%KTR14(:)*PCONC(:,12) ! !PTERMS(WR_SO2,KTR14) = +KTR14*<SO2> - PTERMS(:,80,186) = +TPK%KTR14(:)*PCONC(:,11) + PTERMS(:,81,189) = +TPK%KTR14(:)*PCONC(:,12) +! +! +RETURN +END SUBROUTINE SUBT35 +! +SUBROUTINE SUBT36 +! +!Indices 721 a 740 ! !PTERMS(SULF,KTR15) = -KTR15*<SULF> - PTERMS(:,12,187) = -TPK%KTR15(:)*PCONC(:,12) + PTERMS(:,13,190) = -TPK%KTR15(:)*PCONC(:,13) ! !PTERMS(WR_SULF,KTR15) = +KTR15*<SULF> - PTERMS(:,81,187) = +TPK%KTR15(:)*PCONC(:,12) + PTERMS(:,82,190) = +TPK%KTR15(:)*PCONC(:,13) ! !PTERMS(HCHO,KTR16) = -KTR16*<HCHO> - PTERMS(:,22,188) = -TPK%KTR16(:)*PCONC(:,22) + PTERMS(:,23,191) = -TPK%KTR16(:)*PCONC(:,23) ! !PTERMS(WR_HCHO,KTR16) = +KTR16*<HCHO> - PTERMS(:,82,188) = +TPK%KTR16(:)*PCONC(:,22) + PTERMS(:,83,191) = +TPK%KTR16(:)*PCONC(:,23) ! !PTERMS(ORA1,KTR17) = -KTR17*<ORA1> - PTERMS(:,30,189) = -TPK%KTR17(:)*PCONC(:,30) + PTERMS(:,31,192) = -TPK%KTR17(:)*PCONC(:,31) ! !PTERMS(WR_ORA1,KTR17) = +KTR17*<ORA1> - PTERMS(:,83,189) = +TPK%KTR17(:)*PCONC(:,30) + PTERMS(:,84,192) = +TPK%KTR17(:)*PCONC(:,31) ! !PTERMS(ORA2,KTR18) = -KTR18*<ORA2> - PTERMS(:,31,190) = -TPK%KTR18(:)*PCONC(:,31) + PTERMS(:,32,193) = -TPK%KTR18(:)*PCONC(:,32) ! !PTERMS(WR_ORA2,KTR18) = +KTR18*<ORA2> - PTERMS(:,84,190) = +TPK%KTR18(:)*PCONC(:,31) + PTERMS(:,85,193) = +TPK%KTR18(:)*PCONC(:,32) ! !PTERMS(MO2,KTR19) = -KTR19*<MO2> - PTERMS(:,32,191) = -TPK%KTR19(:)*PCONC(:,32) -! -! -RETURN -END SUBROUTINE SUBT35 -! -SUBROUTINE SUBT36 -! -!Indices 721 a 740 + PTERMS(:,33,194) = -TPK%KTR19(:)*PCONC(:,33) ! !PTERMS(WR_MO2,KTR19) = +KTR19*<MO2> - PTERMS(:,85,191) = +TPK%KTR19(:)*PCONC(:,32) + PTERMS(:,86,194) = +TPK%KTR19(:)*PCONC(:,33) ! !PTERMS(OP1,KTR20) = -KTR20*<OP1> - PTERMS(:,28,192) = -TPK%KTR20(:)*PCONC(:,28) + PTERMS(:,29,195) = -TPK%KTR20(:)*PCONC(:,29) ! !PTERMS(WR_OP1,KTR20) = +KTR20*<OP1> - PTERMS(:,86,192) = +TPK%KTR20(:)*PCONC(:,28) + PTERMS(:,87,195) = +TPK%KTR20(:)*PCONC(:,29) ! !PTERMS(O3,KTR21) = +KTR21*<WR_O3> - PTERMS(:,1,193) = +TPK%KTR21(:)*PCONC(:,67) + PTERMS(:,1,196) = +TPK%KTR21(:)*PCONC(:,68) ! !PTERMS(WR_O3,KTR21) = -KTR21*<WR_O3> - PTERMS(:,67,193) = -TPK%KTR21(:)*PCONC(:,67) + PTERMS(:,68,196) = -TPK%KTR21(:)*PCONC(:,68) ! !PTERMS(H2O2,KTR22) = +KTR22*<WR_H2O2> - PTERMS(:,2,194) = +TPK%KTR22(:)*PCONC(:,68) + PTERMS(:,2,197) = +TPK%KTR22(:)*PCONC(:,69) ! !PTERMS(WR_H2O2,KTR22) = -KTR22*<WR_H2O2> - PTERMS(:,68,194) = -TPK%KTR22(:)*PCONC(:,68) + PTERMS(:,69,197) = -TPK%KTR22(:)*PCONC(:,69) ! !PTERMS(NO,KTR23) = +KTR23*<WR_NO> - PTERMS(:,3,195) = +TPK%KTR23(:)*PCONC(:,69) + PTERMS(:,3,198) = +TPK%KTR23(:)*PCONC(:,70) ! !PTERMS(WR_NO,KTR23) = -KTR23*<WR_NO> - PTERMS(:,69,195) = -TPK%KTR23(:)*PCONC(:,69) + PTERMS(:,70,198) = -TPK%KTR23(:)*PCONC(:,70) ! !PTERMS(NO2,KTR24) = +KTR24*<WR_NO2> - PTERMS(:,4,196) = +TPK%KTR24(:)*PCONC(:,70) + PTERMS(:,4,199) = +TPK%KTR24(:)*PCONC(:,71) ! !PTERMS(WR_NO2,KTR24) = -KTR24*<WR_NO2> - PTERMS(:,70,196) = -TPK%KTR24(:)*PCONC(:,70) + PTERMS(:,71,199) = -TPK%KTR24(:)*PCONC(:,71) +! +! +RETURN +END SUBROUTINE SUBT36 +! +SUBROUTINE SUBT37 +! +!Indices 741 a 760 ! !PTERMS(NO3,KTR25) = +KTR25*<WR_NO3> - PTERMS(:,5,197) = +TPK%KTR25(:)*PCONC(:,71) + PTERMS(:,5,200) = +TPK%KTR25(:)*PCONC(:,72) ! !PTERMS(WR_NO3,KTR25) = -KTR25*<WR_NO3> - PTERMS(:,71,197) = -TPK%KTR25(:)*PCONC(:,71) + PTERMS(:,72,200) = -TPK%KTR25(:)*PCONC(:,72) ! !PTERMS(N2O5,KTR26) = +KTR26*<WR_N2O5> - PTERMS(:,6,198) = +TPK%KTR26(:)*PCONC(:,72) + PTERMS(:,6,201) = +TPK%KTR26(:)*PCONC(:,73) ! !PTERMS(WR_N2O5,KTR26) = -KTR26*<WR_N2O5> - PTERMS(:,72,198) = -TPK%KTR26(:)*PCONC(:,72) + PTERMS(:,73,201) = -TPK%KTR26(:)*PCONC(:,73) ! !PTERMS(HONO,KTR27) = +KTR27*<WR_HONO> - PTERMS(:,7,199) = +TPK%KTR27(:)*PCONC(:,73) + PTERMS(:,7,202) = +TPK%KTR27(:)*PCONC(:,74) ! !PTERMS(WR_HONO,KTR27) = -KTR27*<WR_HONO> - PTERMS(:,73,199) = -TPK%KTR27(:)*PCONC(:,73) + PTERMS(:,74,202) = -TPK%KTR27(:)*PCONC(:,74) ! !PTERMS(HNO3,KTR28) = +KTR28*<WR_HNO3> - PTERMS(:,8,200) = +TPK%KTR28(:)*PCONC(:,74) + PTERMS(:,8,203) = +TPK%KTR28(:)*PCONC(:,75) ! !PTERMS(WR_HNO3,KTR28) = -KTR28*<WR_HNO3> - PTERMS(:,74,200) = -TPK%KTR28(:)*PCONC(:,74) + PTERMS(:,75,203) = -TPK%KTR28(:)*PCONC(:,75) ! !PTERMS(HNO4,KTR29) = +KTR29*<WR_HNO4> - PTERMS(:,9,201) = +TPK%KTR29(:)*PCONC(:,75) -! -! -RETURN -END SUBROUTINE SUBT36 -! -SUBROUTINE SUBT37 -! -!Indices 741 a 760 + PTERMS(:,9,204) = +TPK%KTR29(:)*PCONC(:,76) ! !PTERMS(WR_HNO4,KTR29) = -KTR29*<WR_HNO4> - PTERMS(:,75,201) = -TPK%KTR29(:)*PCONC(:,75) + PTERMS(:,76,204) = -TPK%KTR29(:)*PCONC(:,76) ! !PTERMS(NH3,KTR30) = +KTR30*<WR_NH3> - PTERMS(:,10,202) = +TPK%KTR30(:)*PCONC(:,76) + PTERMS(:,10,205) = +TPK%KTR30(:)*PCONC(:,77) ! !PTERMS(WR_NH3,KTR30) = -KTR30*<WR_NH3> - PTERMS(:,76,202) = -TPK%KTR30(:)*PCONC(:,76) + PTERMS(:,77,205) = -TPK%KTR30(:)*PCONC(:,77) ! !PTERMS(OH,KTR31) = +KTR31*<WR_OH> - PTERMS(:,14,203) = +TPK%KTR31(:)*PCONC(:,77) + PTERMS(:,15,206) = +TPK%KTR31(:)*PCONC(:,78) ! !PTERMS(WR_OH,KTR31) = -KTR31*<WR_OH> - PTERMS(:,77,203) = -TPK%KTR31(:)*PCONC(:,77) + PTERMS(:,78,206) = -TPK%KTR31(:)*PCONC(:,78) ! !PTERMS(HO2,KTR32) = +KTR32*<WR_HO2> - PTERMS(:,15,204) = +TPK%KTR32(:)*PCONC(:,78) + PTERMS(:,16,207) = +TPK%KTR32(:)*PCONC(:,79) ! !PTERMS(WR_HO2,KTR32) = -KTR32*<WR_HO2> - PTERMS(:,78,204) = -TPK%KTR32(:)*PCONC(:,78) + PTERMS(:,79,207) = -TPK%KTR32(:)*PCONC(:,79) ! !PTERMS(WR_CO2,KTR33) = -KTR33*<WR_CO2> - PTERMS(:,79,205) = -TPK%KTR33(:)*PCONC(:,79) + PTERMS(:,80,208) = -TPK%KTR33(:)*PCONC(:,80) ! !PTERMS(SO2,KTR34) = +KTR34*<WR_SO2> - PTERMS(:,11,206) = +TPK%KTR34(:)*PCONC(:,80) + PTERMS(:,12,209) = +TPK%KTR34(:)*PCONC(:,81) ! !PTERMS(WR_SO2,KTR34) = -KTR34*<WR_SO2> - PTERMS(:,80,206) = -TPK%KTR34(:)*PCONC(:,80) + PTERMS(:,81,209) = -TPK%KTR34(:)*PCONC(:,81) ! !PTERMS(SULF,KTR35) = +KTR35*<WR_SULF> - PTERMS(:,12,207) = +TPK%KTR35(:)*PCONC(:,81) + PTERMS(:,13,210) = +TPK%KTR35(:)*PCONC(:,82) +! +! +RETURN +END SUBROUTINE SUBT37 +! +SUBROUTINE SUBT38 +! +!Indices 761 a 780 ! !PTERMS(WR_SULF,KTR35) = -KTR35*<WR_SULF> - PTERMS(:,81,207) = -TPK%KTR35(:)*PCONC(:,81) + PTERMS(:,82,210) = -TPK%KTR35(:)*PCONC(:,82) ! !PTERMS(HCHO,KTR36) = +KTR36*<WR_HCHO> - PTERMS(:,22,208) = +TPK%KTR36(:)*PCONC(:,82) + PTERMS(:,23,211) = +TPK%KTR36(:)*PCONC(:,83) ! !PTERMS(WR_HCHO,KTR36) = -KTR36*<WR_HCHO> - PTERMS(:,82,208) = -TPK%KTR36(:)*PCONC(:,82) + PTERMS(:,83,211) = -TPK%KTR36(:)*PCONC(:,83) ! !PTERMS(ORA1,KTR37) = +KTR37*<WR_ORA1> - PTERMS(:,30,209) = +TPK%KTR37(:)*PCONC(:,83) + PTERMS(:,31,212) = +TPK%KTR37(:)*PCONC(:,84) ! !PTERMS(WR_ORA1,KTR37) = -KTR37*<WR_ORA1> - PTERMS(:,83,209) = -TPK%KTR37(:)*PCONC(:,83) + PTERMS(:,84,212) = -TPK%KTR37(:)*PCONC(:,84) ! !PTERMS(ORA2,KTR38) = +KTR38*<WR_ORA2> - PTERMS(:,31,210) = +TPK%KTR38(:)*PCONC(:,84) + PTERMS(:,32,213) = +TPK%KTR38(:)*PCONC(:,85) ! !PTERMS(WR_ORA2,KTR38) = -KTR38*<WR_ORA2> - PTERMS(:,84,210) = -TPK%KTR38(:)*PCONC(:,84) + PTERMS(:,85,213) = -TPK%KTR38(:)*PCONC(:,85) ! !PTERMS(MO2,KTR39) = +KTR39*<WR_MO2> - PTERMS(:,32,211) = +TPK%KTR39(:)*PCONC(:,85) + PTERMS(:,33,214) = +TPK%KTR39(:)*PCONC(:,86) ! !PTERMS(WR_MO2,KTR39) = -KTR39*<WR_MO2> - PTERMS(:,85,211) = -TPK%KTR39(:)*PCONC(:,85) -! -! -RETURN -END SUBROUTINE SUBT37 -! -SUBROUTINE SUBT38 -! -!Indices 761 a 780 + PTERMS(:,86,214) = -TPK%KTR39(:)*PCONC(:,86) ! !PTERMS(OP1,KTR40) = +KTR40*<WR_OP1> - PTERMS(:,28,212) = +TPK%KTR40(:)*PCONC(:,86) + PTERMS(:,29,215) = +TPK%KTR40(:)*PCONC(:,87) ! !PTERMS(WR_OP1,KTR40) = -KTR40*<WR_OP1> - PTERMS(:,86,212) = -TPK%KTR40(:)*PCONC(:,86) + PTERMS(:,87,215) = -TPK%KTR40(:)*PCONC(:,87) ! !PTERMS(WC_H2O2,KC1) = -KC1*<WC_H2O2> - PTERMS(:,43,213) = -TPK%KC1(:)*PCONC(:,43) + PTERMS(:,44,216) = -TPK%KC1(:)*PCONC(:,44) ! !PTERMS(WC_OH,KC1) = +KC1*<WC_H2O2> - PTERMS(:,52,213) = +TPK%KC1(:)*PCONC(:,43) + PTERMS(:,53,216) = +TPK%KC1(:)*PCONC(:,44) ! !PTERMS(WC_H2O2,KC2) = +KC2*<WC_OH>*<WC_OH> - PTERMS(:,43,214) = +TPK%KC2(:)*PCONC(:,52)*PCONC(:,52) + PTERMS(:,44,217) = +TPK%KC2(:)*PCONC(:,53)*PCONC(:,53) ! !PTERMS(WC_OH,KC2) = -KC2*<WC_OH>*<WC_OH> - PTERMS(:,52,214) = -TPK%KC2(:)*PCONC(:,52)*PCONC(:,52) + PTERMS(:,53,217) = -TPK%KC2(:)*PCONC(:,53)*PCONC(:,53) ! !PTERMS(WC_OH,KC3) = -KC3*<WC_OH>*<WC_HO2> - PTERMS(:,52,215) = -TPK%KC3(:)*PCONC(:,52)*PCONC(:,53) + PTERMS(:,53,218) = -TPK%KC3(:)*PCONC(:,53)*PCONC(:,54) ! !PTERMS(WC_HO2,KC3) = -KC3*<WC_OH>*<WC_HO2> - PTERMS(:,53,215) = -TPK%KC3(:)*PCONC(:,52)*PCONC(:,53) + PTERMS(:,54,218) = -TPK%KC3(:)*PCONC(:,53)*PCONC(:,54) ! !PTERMS(WC_H2O2,KC4) = -KC4*<WC_H2O2>*<WC_OH> - PTERMS(:,43,216) = -TPK%KC4(:)*PCONC(:,43)*PCONC(:,52) + PTERMS(:,44,219) = -TPK%KC4(:)*PCONC(:,44)*PCONC(:,53) ! !PTERMS(WC_OH,KC4) = -KC4*<WC_H2O2>*<WC_OH> - PTERMS(:,52,216) = -TPK%KC4(:)*PCONC(:,43)*PCONC(:,52) + PTERMS(:,53,219) = -TPK%KC4(:)*PCONC(:,44)*PCONC(:,53) ! !PTERMS(WC_HO2,KC4) = +KC4*<WC_H2O2>*<WC_OH> - PTERMS(:,53,216) = +TPK%KC4(:)*PCONC(:,43)*PCONC(:,52) + PTERMS(:,54,219) = +TPK%KC4(:)*PCONC(:,44)*PCONC(:,53) +! +! +RETURN +END SUBROUTINE SUBT38 +! +SUBROUTINE SUBT39 +! +!Indices 781 a 800 ! !PTERMS(WC_H2O2,KC5) = +KC5*<WC_HO2>*<WC_HO2> - PTERMS(:,43,217) = +TPK%KC5(:)*PCONC(:,53)*PCONC(:,53) + PTERMS(:,44,220) = +TPK%KC5(:)*PCONC(:,54)*PCONC(:,54) ! !PTERMS(WC_HO2,KC5) = -KC5*<WC_HO2>*<WC_HO2> - PTERMS(:,53,217) = -TPK%KC5(:)*PCONC(:,53)*PCONC(:,53) + PTERMS(:,54,220) = -TPK%KC5(:)*PCONC(:,54)*PCONC(:,54) ! !PTERMS(WC_O3,KC6) = -KC6*<WC_O3>*<WC_HO2> - PTERMS(:,42,218) = -TPK%KC6(:)*PCONC(:,42)*PCONC(:,53) + PTERMS(:,43,221) = -TPK%KC6(:)*PCONC(:,43)*PCONC(:,54) ! !PTERMS(WC_OH,KC6) = +KC6*<WC_O3>*<WC_HO2> - PTERMS(:,52,218) = +TPK%KC6(:)*PCONC(:,42)*PCONC(:,53) + PTERMS(:,53,221) = +TPK%KC6(:)*PCONC(:,43)*PCONC(:,54) ! !PTERMS(WC_HO2,KC6) = -KC6*<WC_O3>*<WC_HO2> - PTERMS(:,53,218) = -TPK%KC6(:)*PCONC(:,42)*PCONC(:,53) + PTERMS(:,54,221) = -TPK%KC6(:)*PCONC(:,43)*PCONC(:,54) ! !PTERMS(WC_OH,KC7) = -KC7*<WC_OH>*<WC_SO2> - PTERMS(:,52,219) = -TPK%KC7(:)*PCONC(:,52)*PCONC(:,55) + PTERMS(:,53,222) = -TPK%KC7(:)*PCONC(:,53)*PCONC(:,56) ! !PTERMS(WC_SO2,KC7) = -KC7*<WC_OH>*<WC_SO2> - PTERMS(:,55,219) = -TPK%KC7(:)*PCONC(:,52)*PCONC(:,55) + PTERMS(:,56,222) = -TPK%KC7(:)*PCONC(:,53)*PCONC(:,56) ! !PTERMS(WC_ASO3,KC7) = +KC7*<WC_OH>*<WC_SO2> - PTERMS(:,62,219) = +TPK%KC7(:)*PCONC(:,52)*PCONC(:,55) + PTERMS(:,63,222) = +TPK%KC7(:)*PCONC(:,53)*PCONC(:,56) ! !PTERMS(WC_NO2,KC8) = +KC8*<WC_HONO>*<WC_OH> - PTERMS(:,45,220) = +TPK%KC8(:)*PCONC(:,48)*PCONC(:,52) -! -! -RETURN -END SUBROUTINE SUBT38 -! -SUBROUTINE SUBT39 -! -!Indices 781 a 800 + PTERMS(:,46,223) = +TPK%KC8(:)*PCONC(:,49)*PCONC(:,53) ! !PTERMS(WC_HONO,KC8) = -KC8*<WC_HONO>*<WC_OH> - PTERMS(:,48,220) = -TPK%KC8(:)*PCONC(:,48)*PCONC(:,52) + PTERMS(:,49,223) = -TPK%KC8(:)*PCONC(:,49)*PCONC(:,53) ! !PTERMS(WC_OH,KC8) = -KC8*<WC_HONO>*<WC_OH> - PTERMS(:,52,220) = -TPK%KC8(:)*PCONC(:,48)*PCONC(:,52) + PTERMS(:,53,223) = -TPK%KC8(:)*PCONC(:,49)*PCONC(:,53) ! !PTERMS(WC_NO2,KC9) = -KC9*<WC_NO2>*<WC_HO2> - PTERMS(:,45,221) = -TPK%KC9(:)*PCONC(:,45)*PCONC(:,53) + PTERMS(:,46,224) = -TPK%KC9(:)*PCONC(:,46)*PCONC(:,54) ! !PTERMS(WC_HNO4,KC9) = +KC9*<WC_NO2>*<WC_HO2> - PTERMS(:,50,221) = +TPK%KC9(:)*PCONC(:,45)*PCONC(:,53) + PTERMS(:,51,224) = +TPK%KC9(:)*PCONC(:,46)*PCONC(:,54) ! !PTERMS(WC_HO2,KC9) = -KC9*<WC_NO2>*<WC_HO2> - PTERMS(:,53,221) = -TPK%KC9(:)*PCONC(:,45)*PCONC(:,53) + PTERMS(:,54,224) = -TPK%KC9(:)*PCONC(:,46)*PCONC(:,54) ! !PTERMS(WC_NO2,KC10) = +KC10*<WC_HNO4> - PTERMS(:,45,222) = +TPK%KC10(:)*PCONC(:,50) + PTERMS(:,46,225) = +TPK%KC10(:)*PCONC(:,51) ! !PTERMS(WC_HNO4,KC10) = -KC10*<WC_HNO4> - PTERMS(:,50,222) = -TPK%KC10(:)*PCONC(:,50) + PTERMS(:,51,225) = -TPK%KC10(:)*PCONC(:,51) ! !PTERMS(WC_HO2,KC10) = +KC10*<WC_HNO4> - PTERMS(:,53,222) = +TPK%KC10(:)*PCONC(:,50) + PTERMS(:,54,225) = +TPK%KC10(:)*PCONC(:,51) ! !PTERMS(WC_HONO,KC11) = +KC11*<WC_HNO4> - PTERMS(:,48,223) = +TPK%KC11(:)*PCONC(:,50) + PTERMS(:,49,226) = +TPK%KC11(:)*PCONC(:,51) ! !PTERMS(WC_HNO4,KC11) = -KC11*<WC_HNO4> - PTERMS(:,50,223) = -TPK%KC11(:)*PCONC(:,50) + PTERMS(:,51,226) = -TPK%KC11(:)*PCONC(:,51) ! !PTERMS(WC_HNO3,KC12) = +KC12*<WC_HNO4>*<WC_SO2> - PTERMS(:,49,224) = +TPK%KC12(:)*PCONC(:,50)*PCONC(:,55) + PTERMS(:,50,227) = +TPK%KC12(:)*PCONC(:,51)*PCONC(:,56) +! +! +RETURN +END SUBROUTINE SUBT39 +! +SUBROUTINE SUBT40 +! +!Indices 801 a 820 ! !PTERMS(WC_HNO4,KC12) = -KC12*<WC_HNO4>*<WC_SO2> - PTERMS(:,50,224) = -TPK%KC12(:)*PCONC(:,50)*PCONC(:,55) + PTERMS(:,51,227) = -TPK%KC12(:)*PCONC(:,51)*PCONC(:,56) ! !PTERMS(WC_SO2,KC12) = -KC12*<WC_HNO4>*<WC_SO2> - PTERMS(:,55,224) = -TPK%KC12(:)*PCONC(:,50)*PCONC(:,55) + PTERMS(:,56,227) = -TPK%KC12(:)*PCONC(:,51)*PCONC(:,56) ! !PTERMS(WC_SULF,KC12) = +KC12*<WC_HNO4>*<WC_SO2> - PTERMS(:,56,224) = +TPK%KC12(:)*PCONC(:,50)*PCONC(:,55) + PTERMS(:,57,227) = +TPK%KC12(:)*PCONC(:,51)*PCONC(:,56) ! !PTERMS(WC_NO2,KC13) = +KC13*<WC_HNO3> - PTERMS(:,45,225) = +TPK%KC13(:)*PCONC(:,49) + PTERMS(:,46,228) = +TPK%KC13(:)*PCONC(:,50) ! !PTERMS(WC_HNO3,KC13) = -KC13*<WC_HNO3> - PTERMS(:,49,225) = -TPK%KC13(:)*PCONC(:,49) + PTERMS(:,50,228) = -TPK%KC13(:)*PCONC(:,50) ! !PTERMS(WC_OH,KC13) = +KC13*<WC_HNO3> - PTERMS(:,52,225) = +TPK%KC13(:)*PCONC(:,49) + PTERMS(:,53,228) = +TPK%KC13(:)*PCONC(:,50) ! !PTERMS(WC_N2O5,KC14) = -KC14*<WC_N2O5> - PTERMS(:,47,226) = -TPK%KC14(:)*PCONC(:,47) + PTERMS(:,48,229) = -TPK%KC14(:)*PCONC(:,48) ! !PTERMS(WC_HNO3,KC14) = +KC14*<WC_N2O5> - PTERMS(:,49,226) = +TPK%KC14(:)*PCONC(:,47) + PTERMS(:,50,229) = +TPK%KC14(:)*PCONC(:,48) ! !PTERMS(WC_NO3,KC15) = -KC15*<WC_NO3>*<WC_SULF> - PTERMS(:,46,227) = -TPK%KC15(:)*PCONC(:,46)*PCONC(:,56) -! -! -RETURN -END SUBROUTINE SUBT39 -! -SUBROUTINE SUBT40 -! -!Indices 801 a 820 + PTERMS(:,47,230) = -TPK%KC15(:)*PCONC(:,47)*PCONC(:,57) ! !PTERMS(WC_HNO3,KC15) = +KC15*<WC_NO3>*<WC_SULF> - PTERMS(:,49,227) = +TPK%KC15(:)*PCONC(:,46)*PCONC(:,56) + PTERMS(:,50,230) = +TPK%KC15(:)*PCONC(:,47)*PCONC(:,57) ! !PTERMS(WC_SULF,KC15) = -KC15*<WC_NO3>*<WC_SULF> - PTERMS(:,56,227) = -TPK%KC15(:)*PCONC(:,46)*PCONC(:,56) + PTERMS(:,57,230) = -TPK%KC15(:)*PCONC(:,47)*PCONC(:,57) ! !PTERMS(WC_ASO4,KC15) = +KC15*<WC_NO3>*<WC_SULF> - PTERMS(:,63,227) = +TPK%KC15(:)*PCONC(:,46)*PCONC(:,56) + PTERMS(:,64,230) = +TPK%KC15(:)*PCONC(:,47)*PCONC(:,57) ! !PTERMS(WC_NO3,KC16) = -KC16*<WC_NO3>*<WC_SO2> - PTERMS(:,46,228) = -TPK%KC16(:)*PCONC(:,46)*PCONC(:,55) + PTERMS(:,47,231) = -TPK%KC16(:)*PCONC(:,47)*PCONC(:,56) ! !PTERMS(WC_HNO3,KC16) = +KC16*<WC_NO3>*<WC_SO2> - PTERMS(:,49,228) = +TPK%KC16(:)*PCONC(:,46)*PCONC(:,55) + PTERMS(:,50,231) = +TPK%KC16(:)*PCONC(:,47)*PCONC(:,56) ! !PTERMS(WC_SO2,KC16) = -KC16*<WC_NO3>*<WC_SO2> - PTERMS(:,55,228) = -TPK%KC16(:)*PCONC(:,46)*PCONC(:,55) + PTERMS(:,56,231) = -TPK%KC16(:)*PCONC(:,47)*PCONC(:,56) ! !PTERMS(WC_ASO3,KC16) = +KC16*<WC_NO3>*<WC_SO2> - PTERMS(:,62,228) = +TPK%KC16(:)*PCONC(:,46)*PCONC(:,55) + PTERMS(:,63,231) = +TPK%KC16(:)*PCONC(:,47)*PCONC(:,56) ! !PTERMS(WC_HO2,KC17) = +2.00*KC17*<WC_MO2>*<WC_MO2> - PTERMS(:,53,229) = +2.00*TPK%KC17(:)*PCONC(:,60)*PCONC(:,60) + PTERMS(:,54,232) = +2.00*TPK%KC17(:)*PCONC(:,61)*PCONC(:,61) ! !PTERMS(WC_HCHO,KC17) = +2.00*KC17*<WC_MO2>*<WC_MO2> - PTERMS(:,57,229) = +2.00*TPK%KC17(:)*PCONC(:,60)*PCONC(:,60) + PTERMS(:,58,232) = +2.00*TPK%KC17(:)*PCONC(:,61)*PCONC(:,61) ! !PTERMS(WC_MO2,KC17) = -KC17*<WC_MO2>*<WC_MO2> - PTERMS(:,60,229) = -TPK%KC17(:)*PCONC(:,60)*PCONC(:,60) + PTERMS(:,61,232) = -TPK%KC17(:)*PCONC(:,61)*PCONC(:,61) ! !PTERMS(WC_SO2,KC18) = -KC18*<WC_MO2>*<WC_SO2> - PTERMS(:,55,230) = -TPK%KC18(:)*PCONC(:,60)*PCONC(:,55) + PTERMS(:,56,233) = -TPK%KC18(:)*PCONC(:,61)*PCONC(:,56) +! +! +RETURN +END SUBROUTINE SUBT40 +! +SUBROUTINE SUBT41 +! +!Indices 821 a 840 ! !PTERMS(WC_MO2,KC18) = -KC18*<WC_MO2>*<WC_SO2> - PTERMS(:,60,230) = -TPK%KC18(:)*PCONC(:,60)*PCONC(:,55) + PTERMS(:,61,233) = -TPK%KC18(:)*PCONC(:,61)*PCONC(:,56) ! !PTERMS(WC_OP1,KC18) = +KC18*<WC_MO2>*<WC_SO2> - PTERMS(:,61,230) = +TPK%KC18(:)*PCONC(:,60)*PCONC(:,55) + PTERMS(:,62,233) = +TPK%KC18(:)*PCONC(:,61)*PCONC(:,56) ! !PTERMS(WC_ASO3,KC18) = +KC18*<WC_MO2>*<WC_SO2> - PTERMS(:,62,230) = +TPK%KC18(:)*PCONC(:,60)*PCONC(:,55) + PTERMS(:,63,233) = +TPK%KC18(:)*PCONC(:,61)*PCONC(:,56) ! !PTERMS(WC_OH,KC19) = -KC19*<WC_HCHO>*<WC_OH> - PTERMS(:,52,231) = -TPK%KC19(:)*PCONC(:,57)*PCONC(:,52) + PTERMS(:,53,234) = -TPK%KC19(:)*PCONC(:,58)*PCONC(:,53) ! !PTERMS(WC_HO2,KC19) = +KC19*<WC_HCHO>*<WC_OH> - PTERMS(:,53,231) = +TPK%KC19(:)*PCONC(:,57)*PCONC(:,52) + PTERMS(:,54,234) = +TPK%KC19(:)*PCONC(:,58)*PCONC(:,53) ! !PTERMS(WC_HCHO,KC19) = -KC19*<WC_HCHO>*<WC_OH> - PTERMS(:,57,231) = -TPK%KC19(:)*PCONC(:,57)*PCONC(:,52) + PTERMS(:,58,234) = -TPK%KC19(:)*PCONC(:,58)*PCONC(:,53) ! !PTERMS(WC_ORA1,KC19) = +KC19*<WC_HCHO>*<WC_OH> - PTERMS(:,58,231) = +TPK%KC19(:)*PCONC(:,57)*PCONC(:,52) + PTERMS(:,59,234) = +TPK%KC19(:)*PCONC(:,58)*PCONC(:,53) ! !PTERMS(WC_OH,KC20) = -KC20*<WC_ORA1>*<WC_OH> - PTERMS(:,52,232) = -TPK%KC20(:)*PCONC(:,58)*PCONC(:,52) + PTERMS(:,53,235) = -TPK%KC20(:)*PCONC(:,59)*PCONC(:,53) ! !PTERMS(WC_HO2,KC20) = +KC20*<WC_ORA1>*<WC_OH> - PTERMS(:,53,232) = +TPK%KC20(:)*PCONC(:,58)*PCONC(:,52) -! -! -RETURN -END SUBROUTINE SUBT40 -! -SUBROUTINE SUBT41 -! -!Indices 821 a 840 + PTERMS(:,54,235) = +TPK%KC20(:)*PCONC(:,59)*PCONC(:,53) ! !PTERMS(WC_CO2,KC20) = +KC20*<WC_ORA1>*<WC_OH> - PTERMS(:,54,232) = +TPK%KC20(:)*PCONC(:,58)*PCONC(:,52) + PTERMS(:,55,235) = +TPK%KC20(:)*PCONC(:,59)*PCONC(:,53) ! !PTERMS(WC_ORA1,KC20) = -KC20*<WC_ORA1>*<WC_OH> - PTERMS(:,58,232) = -TPK%KC20(:)*PCONC(:,58)*PCONC(:,52) + PTERMS(:,59,235) = -TPK%KC20(:)*PCONC(:,59)*PCONC(:,53) ! !PTERMS(WC_SO2,KC21) = -KC21*<WC_SO2>*<WC_HCHO> - PTERMS(:,55,233) = -TPK%KC21(:)*PCONC(:,55)*PCONC(:,57) + PTERMS(:,56,236) = -TPK%KC21(:)*PCONC(:,56)*PCONC(:,58) ! !PTERMS(WC_HCHO,KC21) = -KC21*<WC_SO2>*<WC_HCHO> - PTERMS(:,57,233) = -TPK%KC21(:)*PCONC(:,55)*PCONC(:,57) + PTERMS(:,58,236) = -TPK%KC21(:)*PCONC(:,56)*PCONC(:,58) ! !PTERMS(WC_AHMS,KC21) = +KC21*<WC_SO2>*<WC_HCHO> - PTERMS(:,66,233) = +TPK%KC21(:)*PCONC(:,55)*PCONC(:,57) + PTERMS(:,67,236) = +TPK%KC21(:)*PCONC(:,56)*PCONC(:,58) ! !PTERMS(WC_SO2,KC22) = +KC22*<WC_AHMS> - PTERMS(:,55,234) = +TPK%KC22(:)*PCONC(:,66) + PTERMS(:,56,237) = +TPK%KC22(:)*PCONC(:,67) ! !PTERMS(WC_HCHO,KC22) = +KC22*<WC_AHMS> - PTERMS(:,57,234) = +TPK%KC22(:)*PCONC(:,66) + PTERMS(:,58,237) = +TPK%KC22(:)*PCONC(:,67) ! !PTERMS(WC_AHMS,KC22) = -KC22*<WC_AHMS> - PTERMS(:,66,234) = -TPK%KC22(:)*PCONC(:,66) + PTERMS(:,67,237) = -TPK%KC22(:)*PCONC(:,67) ! !PTERMS(WC_OH,KC23) = -KC23*<WC_AHMS>*<WC_OH> - PTERMS(:,52,235) = -TPK%KC23(:)*PCONC(:,66)*PCONC(:,52) + PTERMS(:,53,238) = -TPK%KC23(:)*PCONC(:,67)*PCONC(:,53) ! !PTERMS(WC_HO2,KC23) = +KC23*<WC_AHMS>*<WC_OH> - PTERMS(:,53,235) = +TPK%KC23(:)*PCONC(:,66)*PCONC(:,52) + PTERMS(:,54,238) = +TPK%KC23(:)*PCONC(:,67)*PCONC(:,53) ! !PTERMS(WC_SO2,KC23) = +KC23*<WC_AHMS>*<WC_OH> - PTERMS(:,55,235) = +TPK%KC23(:)*PCONC(:,66)*PCONC(:,52) + PTERMS(:,56,238) = +TPK%KC23(:)*PCONC(:,67)*PCONC(:,53) +! +! +RETURN +END SUBROUTINE SUBT41 +! +SUBROUTINE SUBT42 +! +!Indices 841 a 860 ! !PTERMS(WC_ORA1,KC23) = +KC23*<WC_AHMS>*<WC_OH> - PTERMS(:,58,235) = +TPK%KC23(:)*PCONC(:,66)*PCONC(:,52) + PTERMS(:,59,238) = +TPK%KC23(:)*PCONC(:,67)*PCONC(:,53) ! !PTERMS(WC_AHMS,KC23) = -KC23*<WC_AHMS>*<WC_OH> - PTERMS(:,66,235) = -TPK%KC23(:)*PCONC(:,66)*PCONC(:,52) + PTERMS(:,67,238) = -TPK%KC23(:)*PCONC(:,67)*PCONC(:,53) ! !PTERMS(WC_ASO3,KC24) = -KC24*<WC_ASO3>*<W_O2> - PTERMS(:,62,236) = -TPK%KC24(:)*PCONC(:,62)*TPK%W_O2(:) + PTERMS(:,63,239) = -TPK%KC24(:)*PCONC(:,63)*TPK%W_O2(:) ! !PTERMS(WC_ASO5,KC24) = +KC24*<WC_ASO3>*<W_O2> - PTERMS(:,64,236) = +TPK%KC24(:)*PCONC(:,62)*TPK%W_O2(:) + PTERMS(:,65,239) = +TPK%KC24(:)*PCONC(:,63)*TPK%W_O2(:) ! !PTERMS(WC_HO2,KC25) = -KC25*<WC_ASO5>*<WC_HO2> - PTERMS(:,53,237) = -TPK%KC25(:)*PCONC(:,64)*PCONC(:,53) + PTERMS(:,54,240) = -TPK%KC25(:)*PCONC(:,65)*PCONC(:,54) ! !PTERMS(WC_ASO5,KC25) = -KC25*<WC_ASO5>*<WC_HO2> - PTERMS(:,64,237) = -TPK%KC25(:)*PCONC(:,64)*PCONC(:,53) + PTERMS(:,65,240) = -TPK%KC25(:)*PCONC(:,65)*PCONC(:,54) ! !PTERMS(WC_AHSO5,KC25) = +KC25*<WC_ASO5>*<WC_HO2> - PTERMS(:,65,237) = +TPK%KC25(:)*PCONC(:,64)*PCONC(:,53) + PTERMS(:,66,240) = +TPK%KC25(:)*PCONC(:,65)*PCONC(:,54) ! !PTERMS(WC_ASO4,KC26) = +KC26*<WC_ASO5>*<WC_ASO5> - PTERMS(:,63,238) = +TPK%KC26(:)*PCONC(:,64)*PCONC(:,64) + PTERMS(:,64,241) = +TPK%KC26(:)*PCONC(:,65)*PCONC(:,65) ! !PTERMS(WC_ASO5,KC26) = -KC26*<WC_ASO5>*<WC_ASO5> - PTERMS(:,64,238) = -TPK%KC26(:)*PCONC(:,64)*PCONC(:,64) -! -! -RETURN -END SUBROUTINE SUBT41 -! -SUBROUTINE SUBT42 -! -!Indices 841 a 860 + PTERMS(:,65,241) = -TPK%KC26(:)*PCONC(:,65)*PCONC(:,65) ! !PTERMS(WC_SO2,KC27) = -KC27*<WC_AHSO5>*<WC_SO2> - PTERMS(:,55,239) = -TPK%KC27(:)*PCONC(:,65)*PCONC(:,55) + PTERMS(:,56,242) = -TPK%KC27(:)*PCONC(:,66)*PCONC(:,56) ! !PTERMS(WC_SULF,KC27) = +2.00*KC27*<WC_AHSO5>*<WC_SO2> - PTERMS(:,56,239) = +2.00*TPK%KC27(:)*PCONC(:,65)*PCONC(:,55) + PTERMS(:,57,242) = +2.00*TPK%KC27(:)*PCONC(:,66)*PCONC(:,56) ! !PTERMS(WC_AHSO5,KC27) = -KC27*<WC_AHSO5>*<WC_SO2> - PTERMS(:,65,239) = -TPK%KC27(:)*PCONC(:,65)*PCONC(:,55) + PTERMS(:,66,242) = -TPK%KC27(:)*PCONC(:,66)*PCONC(:,56) ! !PTERMS(WC_OH,KC28) = +KC28*<WC_ASO4> - PTERMS(:,52,240) = +TPK%KC28(:)*PCONC(:,63) + PTERMS(:,53,243) = +TPK%KC28(:)*PCONC(:,64) ! !PTERMS(WC_SULF,KC28) = +KC28*<WC_ASO4> - PTERMS(:,56,240) = +TPK%KC28(:)*PCONC(:,63) + PTERMS(:,57,243) = +TPK%KC28(:)*PCONC(:,64) ! !PTERMS(WC_ASO4,KC28) = -KC28*<WC_ASO4> - PTERMS(:,63,240) = -TPK%KC28(:)*PCONC(:,63) + PTERMS(:,64,243) = -TPK%KC28(:)*PCONC(:,64) ! !PTERMS(WC_O3,KC29) = -KC29*<WC_SO2>*<WC_O3> - PTERMS(:,42,241) = -TPK%KC29(:)*PCONC(:,55)*PCONC(:,42) + PTERMS(:,43,244) = -TPK%KC29(:)*PCONC(:,56)*PCONC(:,43) ! !PTERMS(WC_SO2,KC29) = -KC29*<WC_SO2>*<WC_O3> - PTERMS(:,55,241) = -TPK%KC29(:)*PCONC(:,55)*PCONC(:,42) + PTERMS(:,56,244) = -TPK%KC29(:)*PCONC(:,56)*PCONC(:,43) ! !PTERMS(WC_SULF,KC29) = +KC29*<WC_SO2>*<WC_O3> - PTERMS(:,56,241) = +TPK%KC29(:)*PCONC(:,55)*PCONC(:,42) + PTERMS(:,57,244) = +TPK%KC29(:)*PCONC(:,56)*PCONC(:,43) ! !PTERMS(WC_H2O2,KC30) = -KC30*<WC_SO2>*<WC_H2O2> - PTERMS(:,43,242) = -TPK%KC30(:)*PCONC(:,55)*PCONC(:,43) + PTERMS(:,44,245) = -TPK%KC30(:)*PCONC(:,56)*PCONC(:,44) ! !PTERMS(WC_SO2,KC30) = -KC30*<WC_SO2>*<WC_H2O2> - PTERMS(:,55,242) = -TPK%KC30(:)*PCONC(:,55)*PCONC(:,43) + PTERMS(:,56,245) = -TPK%KC30(:)*PCONC(:,56)*PCONC(:,44) +! +! +RETURN +END SUBROUTINE SUBT42 +! +SUBROUTINE SUBT43 +! +!Indices 861 a 880 ! !PTERMS(WC_SULF,KC30) = +KC30*<WC_SO2>*<WC_H2O2> - PTERMS(:,56,242) = +TPK%KC30(:)*PCONC(:,55)*PCONC(:,43) + PTERMS(:,57,245) = +TPK%KC30(:)*PCONC(:,56)*PCONC(:,44) ! !PTERMS(WR_H2O2,KR1) = -KR1*<WR_H2O2> - PTERMS(:,68,243) = -TPK%KR1(:)*PCONC(:,68) + PTERMS(:,69,246) = -TPK%KR1(:)*PCONC(:,69) ! !PTERMS(WR_OH,KR1) = +KR1*<WR_H2O2> - PTERMS(:,77,243) = +TPK%KR1(:)*PCONC(:,68) + PTERMS(:,78,246) = +TPK%KR1(:)*PCONC(:,69) ! !PTERMS(WR_H2O2,KR2) = +KR2*<WR_OH>*<WR_OH> - PTERMS(:,68,244) = +TPK%KR2(:)*PCONC(:,77)*PCONC(:,77) + PTERMS(:,69,247) = +TPK%KR2(:)*PCONC(:,78)*PCONC(:,78) ! !PTERMS(WR_OH,KR2) = -KR2*<WR_OH>*<WR_OH> - PTERMS(:,77,244) = -TPK%KR2(:)*PCONC(:,77)*PCONC(:,77) + PTERMS(:,78,247) = -TPK%KR2(:)*PCONC(:,78)*PCONC(:,78) ! !PTERMS(WR_OH,KR3) = -KR3*<WR_OH>*<WR_HO2> - PTERMS(:,77,245) = -TPK%KR3(:)*PCONC(:,77)*PCONC(:,78) + PTERMS(:,78,248) = -TPK%KR3(:)*PCONC(:,78)*PCONC(:,79) ! !PTERMS(WR_HO2,KR3) = -KR3*<WR_OH>*<WR_HO2> - PTERMS(:,78,245) = -TPK%KR3(:)*PCONC(:,77)*PCONC(:,78) + PTERMS(:,79,248) = -TPK%KR3(:)*PCONC(:,78)*PCONC(:,79) ! !PTERMS(WR_H2O2,KR4) = -KR4*<WR_H2O2>*<WR_OH> - PTERMS(:,68,246) = -TPK%KR4(:)*PCONC(:,68)*PCONC(:,77) + PTERMS(:,69,249) = -TPK%KR4(:)*PCONC(:,69)*PCONC(:,78) ! !PTERMS(WR_OH,KR4) = -KR4*<WR_H2O2>*<WR_OH> - PTERMS(:,77,246) = -TPK%KR4(:)*PCONC(:,68)*PCONC(:,77) -! -! -RETURN -END SUBROUTINE SUBT42 -! -SUBROUTINE SUBT43 -! -!Indices 861 a 880 + PTERMS(:,78,249) = -TPK%KR4(:)*PCONC(:,69)*PCONC(:,78) ! !PTERMS(WR_HO2,KR4) = +KR4*<WR_H2O2>*<WR_OH> - PTERMS(:,78,246) = +TPK%KR4(:)*PCONC(:,68)*PCONC(:,77) + PTERMS(:,79,249) = +TPK%KR4(:)*PCONC(:,69)*PCONC(:,78) ! !PTERMS(WR_H2O2,KR5) = +KR5*<WR_HO2>*<WR_HO2> - PTERMS(:,68,247) = +TPK%KR5(:)*PCONC(:,78)*PCONC(:,78) + PTERMS(:,69,250) = +TPK%KR5(:)*PCONC(:,79)*PCONC(:,79) ! !PTERMS(WR_HO2,KR5) = -KR5*<WR_HO2>*<WR_HO2> - PTERMS(:,78,247) = -TPK%KR5(:)*PCONC(:,78)*PCONC(:,78) + PTERMS(:,79,250) = -TPK%KR5(:)*PCONC(:,79)*PCONC(:,79) ! !PTERMS(WR_O3,KR6) = -KR6*<WR_O3>*<WR_HO2> - PTERMS(:,67,248) = -TPK%KR6(:)*PCONC(:,67)*PCONC(:,78) + PTERMS(:,68,251) = -TPK%KR6(:)*PCONC(:,68)*PCONC(:,79) ! !PTERMS(WR_OH,KR6) = +KR6*<WR_O3>*<WR_HO2> - PTERMS(:,77,248) = +TPK%KR6(:)*PCONC(:,67)*PCONC(:,78) + PTERMS(:,78,251) = +TPK%KR6(:)*PCONC(:,68)*PCONC(:,79) ! !PTERMS(WR_HO2,KR6) = -KR6*<WR_O3>*<WR_HO2> - PTERMS(:,78,248) = -TPK%KR6(:)*PCONC(:,67)*PCONC(:,78) + PTERMS(:,79,251) = -TPK%KR6(:)*PCONC(:,68)*PCONC(:,79) ! !PTERMS(WR_OH,KR7) = -KR7*<WR_OH>*<WR_SO2> - PTERMS(:,77,249) = -TPK%KR7(:)*PCONC(:,77)*PCONC(:,80) + PTERMS(:,78,252) = -TPK%KR7(:)*PCONC(:,78)*PCONC(:,81) ! !PTERMS(WR_SO2,KR7) = -KR7*<WR_OH>*<WR_SO2> - PTERMS(:,80,249) = -TPK%KR7(:)*PCONC(:,77)*PCONC(:,80) + PTERMS(:,81,252) = -TPK%KR7(:)*PCONC(:,78)*PCONC(:,81) ! !PTERMS(WR_ASO3,KR7) = +KR7*<WR_OH>*<WR_SO2> - PTERMS(:,87,249) = +TPK%KR7(:)*PCONC(:,77)*PCONC(:,80) + PTERMS(:,88,252) = +TPK%KR7(:)*PCONC(:,78)*PCONC(:,81) ! !PTERMS(WR_NO2,KR8) = +KR8*<WR_HONO>*<WR_OH> - PTERMS(:,70,250) = +TPK%KR8(:)*PCONC(:,73)*PCONC(:,77) + PTERMS(:,71,253) = +TPK%KR8(:)*PCONC(:,74)*PCONC(:,78) ! !PTERMS(WR_HONO,KR8) = -KR8*<WR_HONO>*<WR_OH> - PTERMS(:,73,250) = -TPK%KR8(:)*PCONC(:,73)*PCONC(:,77) + PTERMS(:,74,253) = -TPK%KR8(:)*PCONC(:,74)*PCONC(:,78) +! +! +RETURN +END SUBROUTINE SUBT43 +! +SUBROUTINE SUBT44 +! +!Indices 881 a 900 ! !PTERMS(WR_OH,KR8) = -KR8*<WR_HONO>*<WR_OH> - PTERMS(:,77,250) = -TPK%KR8(:)*PCONC(:,73)*PCONC(:,77) + PTERMS(:,78,253) = -TPK%KR8(:)*PCONC(:,74)*PCONC(:,78) ! !PTERMS(WR_NO2,KR9) = -KR9*<WR_NO2>*<WR_HO2> - PTERMS(:,70,251) = -TPK%KR9(:)*PCONC(:,70)*PCONC(:,78) + PTERMS(:,71,254) = -TPK%KR9(:)*PCONC(:,71)*PCONC(:,79) ! !PTERMS(WR_HNO4,KR9) = +KR9*<WR_NO2>*<WR_HO2> - PTERMS(:,75,251) = +TPK%KR9(:)*PCONC(:,70)*PCONC(:,78) + PTERMS(:,76,254) = +TPK%KR9(:)*PCONC(:,71)*PCONC(:,79) ! !PTERMS(WR_HO2,KR9) = -KR9*<WR_NO2>*<WR_HO2> - PTERMS(:,78,251) = -TPK%KR9(:)*PCONC(:,70)*PCONC(:,78) + PTERMS(:,79,254) = -TPK%KR9(:)*PCONC(:,71)*PCONC(:,79) ! !PTERMS(WR_NO2,KR10) = +KR10*<WR_HNO4> - PTERMS(:,70,252) = +TPK%KR10(:)*PCONC(:,75) + PTERMS(:,71,255) = +TPK%KR10(:)*PCONC(:,76) ! !PTERMS(WR_HNO4,KR10) = -KR10*<WR_HNO4> - PTERMS(:,75,252) = -TPK%KR10(:)*PCONC(:,75) + PTERMS(:,76,255) = -TPK%KR10(:)*PCONC(:,76) ! !PTERMS(WR_HO2,KR10) = +KR10*<WR_HNO4> - PTERMS(:,78,252) = +TPK%KR10(:)*PCONC(:,75) + PTERMS(:,79,255) = +TPK%KR10(:)*PCONC(:,76) ! !PTERMS(WR_HONO,KR11) = +KR11*<WR_HNO4> - PTERMS(:,73,253) = +TPK%KR11(:)*PCONC(:,75) + PTERMS(:,74,256) = +TPK%KR11(:)*PCONC(:,76) ! !PTERMS(WR_HNO4,KR11) = -KR11*<WR_HNO4> - PTERMS(:,75,253) = -TPK%KR11(:)*PCONC(:,75) -! -! -RETURN -END SUBROUTINE SUBT43 -! -SUBROUTINE SUBT44 -! -!Indices 881 a 900 + PTERMS(:,76,256) = -TPK%KR11(:)*PCONC(:,76) ! !PTERMS(WR_HNO3,KR12) = +KR12*<WR_HNO4>*<WR_SO2> - PTERMS(:,74,254) = +TPK%KR12(:)*PCONC(:,75)*PCONC(:,80) + PTERMS(:,75,257) = +TPK%KR12(:)*PCONC(:,76)*PCONC(:,81) ! !PTERMS(WR_HNO4,KR12) = -KR12*<WR_HNO4>*<WR_SO2> - PTERMS(:,75,254) = -TPK%KR12(:)*PCONC(:,75)*PCONC(:,80) + PTERMS(:,76,257) = -TPK%KR12(:)*PCONC(:,76)*PCONC(:,81) ! !PTERMS(WR_SO2,KR12) = -KR12*<WR_HNO4>*<WR_SO2> - PTERMS(:,80,254) = -TPK%KR12(:)*PCONC(:,75)*PCONC(:,80) + PTERMS(:,81,257) = -TPK%KR12(:)*PCONC(:,76)*PCONC(:,81) ! !PTERMS(WR_SULF,KR12) = +KR12*<WR_HNO4>*<WR_SO2> - PTERMS(:,81,254) = +TPK%KR12(:)*PCONC(:,75)*PCONC(:,80) + PTERMS(:,82,257) = +TPK%KR12(:)*PCONC(:,76)*PCONC(:,81) ! !PTERMS(WR_NO2,KR13) = +KR13*<WR_HNO3> - PTERMS(:,70,255) = +TPK%KR13(:)*PCONC(:,74) + PTERMS(:,71,258) = +TPK%KR13(:)*PCONC(:,75) ! !PTERMS(WR_HNO3,KR13) = -KR13*<WR_HNO3> - PTERMS(:,74,255) = -TPK%KR13(:)*PCONC(:,74) + PTERMS(:,75,258) = -TPK%KR13(:)*PCONC(:,75) ! !PTERMS(WR_OH,KR13) = +KR13*<WR_HNO3> - PTERMS(:,77,255) = +TPK%KR13(:)*PCONC(:,74) + PTERMS(:,78,258) = +TPK%KR13(:)*PCONC(:,75) ! !PTERMS(WR_N2O5,KR14) = -KR14*<WR_N2O5> - PTERMS(:,72,256) = -TPK%KR14(:)*PCONC(:,72) + PTERMS(:,73,259) = -TPK%KR14(:)*PCONC(:,73) ! !PTERMS(WR_HNO3,KR14) = +KR14*<WR_N2O5> - PTERMS(:,74,256) = +TPK%KR14(:)*PCONC(:,72) + PTERMS(:,75,259) = +TPK%KR14(:)*PCONC(:,73) ! !PTERMS(WR_NO3,KR15) = -KR15*<WR_NO3>*<WR_SULF> - PTERMS(:,71,257) = -TPK%KR15(:)*PCONC(:,71)*PCONC(:,81) + PTERMS(:,72,260) = -TPK%KR15(:)*PCONC(:,72)*PCONC(:,82) ! !PTERMS(WR_HNO3,KR15) = +KR15*<WR_NO3>*<WR_SULF> - PTERMS(:,74,257) = +TPK%KR15(:)*PCONC(:,71)*PCONC(:,81) + PTERMS(:,75,260) = +TPK%KR15(:)*PCONC(:,72)*PCONC(:,82) +! +! +RETURN +END SUBROUTINE SUBT44 +! +SUBROUTINE SUBT45 +! +!Indices 901 a 920 ! !PTERMS(WR_SULF,KR15) = -KR15*<WR_NO3>*<WR_SULF> - PTERMS(:,81,257) = -TPK%KR15(:)*PCONC(:,71)*PCONC(:,81) + PTERMS(:,82,260) = -TPK%KR15(:)*PCONC(:,72)*PCONC(:,82) ! !PTERMS(WR_ASO4,KR15) = +KR15*<WR_NO3>*<WR_SULF> - PTERMS(:,88,257) = +TPK%KR15(:)*PCONC(:,71)*PCONC(:,81) + PTERMS(:,89,260) = +TPK%KR15(:)*PCONC(:,72)*PCONC(:,82) ! !PTERMS(WR_NO3,KR16) = -KR16*<WR_NO3>*<WR_SO2> - PTERMS(:,71,258) = -TPK%KR16(:)*PCONC(:,71)*PCONC(:,80) + PTERMS(:,72,261) = -TPK%KR16(:)*PCONC(:,72)*PCONC(:,81) ! !PTERMS(WR_HNO3,KR16) = +KR16*<WR_NO3>*<WR_SO2> - PTERMS(:,74,258) = +TPK%KR16(:)*PCONC(:,71)*PCONC(:,80) + PTERMS(:,75,261) = +TPK%KR16(:)*PCONC(:,72)*PCONC(:,81) ! !PTERMS(WR_SO2,KR16) = -KR16*<WR_NO3>*<WR_SO2> - PTERMS(:,80,258) = -TPK%KR16(:)*PCONC(:,71)*PCONC(:,80) + PTERMS(:,81,261) = -TPK%KR16(:)*PCONC(:,72)*PCONC(:,81) ! !PTERMS(WR_ASO3,KR16) = +KR16*<WR_NO3>*<WR_SO2> - PTERMS(:,87,258) = +TPK%KR16(:)*PCONC(:,71)*PCONC(:,80) + PTERMS(:,88,261) = +TPK%KR16(:)*PCONC(:,72)*PCONC(:,81) ! !PTERMS(WR_HO2,KR17) = +2.00*KR17*<WR_MO2>*<WR_MO2> - PTERMS(:,78,259) = +2.00*TPK%KR17(:)*PCONC(:,85)*PCONC(:,85) + PTERMS(:,79,262) = +2.00*TPK%KR17(:)*PCONC(:,86)*PCONC(:,86) ! !PTERMS(WR_HCHO,KR17) = +2.00*KR17*<WR_MO2>*<WR_MO2> - PTERMS(:,82,259) = +2.00*TPK%KR17(:)*PCONC(:,85)*PCONC(:,85) + PTERMS(:,83,262) = +2.00*TPK%KR17(:)*PCONC(:,86)*PCONC(:,86) ! !PTERMS(WR_MO2,KR17) = -KR17*<WR_MO2>*<WR_MO2> - PTERMS(:,85,259) = -TPK%KR17(:)*PCONC(:,85)*PCONC(:,85) -! -! -RETURN -END SUBROUTINE SUBT44 -! -SUBROUTINE SUBT45 -! -!Indices 901 a 920 + PTERMS(:,86,262) = -TPK%KR17(:)*PCONC(:,86)*PCONC(:,86) ! !PTERMS(WR_SO2,KR18) = -KR18*<WR_MO2>*<WR_SO2> - PTERMS(:,80,260) = -TPK%KR18(:)*PCONC(:,85)*PCONC(:,80) + PTERMS(:,81,263) = -TPK%KR18(:)*PCONC(:,86)*PCONC(:,81) ! !PTERMS(WR_MO2,KR18) = -KR18*<WR_MO2>*<WR_SO2> - PTERMS(:,85,260) = -TPK%KR18(:)*PCONC(:,85)*PCONC(:,80) + PTERMS(:,86,263) = -TPK%KR18(:)*PCONC(:,86)*PCONC(:,81) ! !PTERMS(WR_OP1,KR18) = +KR18*<WR_MO2>*<WR_SO2> - PTERMS(:,86,260) = +TPK%KR18(:)*PCONC(:,85)*PCONC(:,80) + PTERMS(:,87,263) = +TPK%KR18(:)*PCONC(:,86)*PCONC(:,81) ! !PTERMS(WR_ASO3,KR18) = +KR18*<WR_MO2>*<WR_SO2> - PTERMS(:,87,260) = +TPK%KR18(:)*PCONC(:,85)*PCONC(:,80) + PTERMS(:,88,263) = +TPK%KR18(:)*PCONC(:,86)*PCONC(:,81) ! !PTERMS(WR_OH,KR19) = -KR19*<WR_HCHO>*<WR_OH> - PTERMS(:,77,261) = -TPK%KR19(:)*PCONC(:,82)*PCONC(:,77) + PTERMS(:,78,264) = -TPK%KR19(:)*PCONC(:,83)*PCONC(:,78) ! !PTERMS(WR_HO2,KR19) = +KR19*<WR_HCHO>*<WR_OH> - PTERMS(:,78,261) = +TPK%KR19(:)*PCONC(:,82)*PCONC(:,77) + PTERMS(:,79,264) = +TPK%KR19(:)*PCONC(:,83)*PCONC(:,78) ! !PTERMS(WR_HCHO,KR19) = -KR19*<WR_HCHO>*<WR_OH> - PTERMS(:,82,261) = -TPK%KR19(:)*PCONC(:,82)*PCONC(:,77) + PTERMS(:,83,264) = -TPK%KR19(:)*PCONC(:,83)*PCONC(:,78) ! !PTERMS(WR_ORA1,KR19) = +KR19*<WR_HCHO>*<WR_OH> - PTERMS(:,83,261) = +TPK%KR19(:)*PCONC(:,82)*PCONC(:,77) + PTERMS(:,84,264) = +TPK%KR19(:)*PCONC(:,83)*PCONC(:,78) ! !PTERMS(WR_OH,KR20) = -KR20*<WR_ORA1>*<WR_OH> - PTERMS(:,77,262) = -TPK%KR20(:)*PCONC(:,83)*PCONC(:,77) + PTERMS(:,78,265) = -TPK%KR20(:)*PCONC(:,84)*PCONC(:,78) ! !PTERMS(WR_HO2,KR20) = +KR20*<WR_ORA1>*<WR_OH> - PTERMS(:,78,262) = +TPK%KR20(:)*PCONC(:,83)*PCONC(:,77) + PTERMS(:,79,265) = +TPK%KR20(:)*PCONC(:,84)*PCONC(:,78) ! !PTERMS(WR_CO2,KR20) = +KR20*<WR_ORA1>*<WR_OH> - PTERMS(:,79,262) = +TPK%KR20(:)*PCONC(:,83)*PCONC(:,77) + PTERMS(:,80,265) = +TPK%KR20(:)*PCONC(:,84)*PCONC(:,78) +! +! +RETURN +END SUBROUTINE SUBT45 +! +SUBROUTINE SUBT46 +! +!Indices 921 a 940 ! !PTERMS(WR_ORA1,KR20) = -KR20*<WR_ORA1>*<WR_OH> - PTERMS(:,83,262) = -TPK%KR20(:)*PCONC(:,83)*PCONC(:,77) + PTERMS(:,84,265) = -TPK%KR20(:)*PCONC(:,84)*PCONC(:,78) ! !PTERMS(WR_SO2,KR21) = -KR21*<WR_SO2>*<WR_HCHO> - PTERMS(:,80,263) = -TPK%KR21(:)*PCONC(:,80)*PCONC(:,82) + PTERMS(:,81,266) = -TPK%KR21(:)*PCONC(:,81)*PCONC(:,83) ! !PTERMS(WR_HCHO,KR21) = -KR21*<WR_SO2>*<WR_HCHO> - PTERMS(:,82,263) = -TPK%KR21(:)*PCONC(:,80)*PCONC(:,82) + PTERMS(:,83,266) = -TPK%KR21(:)*PCONC(:,81)*PCONC(:,83) ! !PTERMS(WR_AHMS,KR21) = +KR21*<WR_SO2>*<WR_HCHO> - PTERMS(:,91,263) = +TPK%KR21(:)*PCONC(:,80)*PCONC(:,82) + PTERMS(:,92,266) = +TPK%KR21(:)*PCONC(:,81)*PCONC(:,83) ! !PTERMS(WR_SO2,KR22) = +KR22*<WR_AHMS> - PTERMS(:,80,264) = +TPK%KR22(:)*PCONC(:,91) + PTERMS(:,81,267) = +TPK%KR22(:)*PCONC(:,92) ! !PTERMS(WR_HCHO,KR22) = +KR22*<WR_AHMS> - PTERMS(:,82,264) = +TPK%KR22(:)*PCONC(:,91) + PTERMS(:,83,267) = +TPK%KR22(:)*PCONC(:,92) ! !PTERMS(WR_AHMS,KR22) = -KR22*<WR_AHMS> - PTERMS(:,91,264) = -TPK%KR22(:)*PCONC(:,91) + PTERMS(:,92,267) = -TPK%KR22(:)*PCONC(:,92) ! !PTERMS(WR_OH,KR23) = -KR23*<WR_AHMS>*<WR_OH> - PTERMS(:,77,265) = -TPK%KR23(:)*PCONC(:,91)*PCONC(:,77) + PTERMS(:,78,268) = -TPK%KR23(:)*PCONC(:,92)*PCONC(:,78) ! !PTERMS(WR_HO2,KR23) = +KR23*<WR_AHMS>*<WR_OH> - PTERMS(:,78,265) = +TPK%KR23(:)*PCONC(:,91)*PCONC(:,77) -! -! -RETURN -END SUBROUTINE SUBT45 -! -SUBROUTINE SUBT46 -! -!Indices 921 a 940 + PTERMS(:,79,268) = +TPK%KR23(:)*PCONC(:,92)*PCONC(:,78) ! !PTERMS(WR_SO2,KR23) = +KR23*<WR_AHMS>*<WR_OH> - PTERMS(:,80,265) = +TPK%KR23(:)*PCONC(:,91)*PCONC(:,77) + PTERMS(:,81,268) = +TPK%KR23(:)*PCONC(:,92)*PCONC(:,78) ! !PTERMS(WR_ORA1,KR23) = +KR23*<WR_AHMS>*<WR_OH> - PTERMS(:,83,265) = +TPK%KR23(:)*PCONC(:,91)*PCONC(:,77) + PTERMS(:,84,268) = +TPK%KR23(:)*PCONC(:,92)*PCONC(:,78) ! !PTERMS(WR_AHMS,KR23) = -KR23*<WR_AHMS>*<WR_OH> - PTERMS(:,91,265) = -TPK%KR23(:)*PCONC(:,91)*PCONC(:,77) + PTERMS(:,92,268) = -TPK%KR23(:)*PCONC(:,92)*PCONC(:,78) ! !PTERMS(WR_ASO3,KR24) = -KR24*<WR_ASO3>*<W_O2> - PTERMS(:,87,266) = -TPK%KR24(:)*PCONC(:,87)*TPK%W_O2(:) + PTERMS(:,88,269) = -TPK%KR24(:)*PCONC(:,88)*TPK%W_O2(:) ! !PTERMS(WR_ASO5,KR24) = +KR24*<WR_ASO3>*<W_O2> - PTERMS(:,89,266) = +TPK%KR24(:)*PCONC(:,87)*TPK%W_O2(:) + PTERMS(:,90,269) = +TPK%KR24(:)*PCONC(:,88)*TPK%W_O2(:) ! !PTERMS(WR_HO2,KR25) = -KR25*<WR_ASO5>*<WR_HO2> - PTERMS(:,78,267) = -TPK%KR25(:)*PCONC(:,89)*PCONC(:,78) + PTERMS(:,79,270) = -TPK%KR25(:)*PCONC(:,90)*PCONC(:,79) ! !PTERMS(WR_ASO5,KR25) = -KR25*<WR_ASO5>*<WR_HO2> - PTERMS(:,89,267) = -TPK%KR25(:)*PCONC(:,89)*PCONC(:,78) + PTERMS(:,90,270) = -TPK%KR25(:)*PCONC(:,90)*PCONC(:,79) ! !PTERMS(WR_AHSO5,KR25) = +KR25*<WR_ASO5>*<WR_HO2> - PTERMS(:,90,267) = +TPK%KR25(:)*PCONC(:,89)*PCONC(:,78) + PTERMS(:,91,270) = +TPK%KR25(:)*PCONC(:,90)*PCONC(:,79) ! !PTERMS(WR_ASO4,KR26) = +KR26*<WR_ASO5>*<WR_ASO5> - PTERMS(:,88,268) = +TPK%KR26(:)*PCONC(:,89)*PCONC(:,89) + PTERMS(:,89,271) = +TPK%KR26(:)*PCONC(:,90)*PCONC(:,90) ! !PTERMS(WR_ASO5,KR26) = -KR26*<WR_ASO5>*<WR_ASO5> - PTERMS(:,89,268) = -TPK%KR26(:)*PCONC(:,89)*PCONC(:,89) + PTERMS(:,90,271) = -TPK%KR26(:)*PCONC(:,90)*PCONC(:,90) ! !PTERMS(WR_SO2,KR27) = -KR27*<WR_AHSO5>*<WR_SO2> - PTERMS(:,80,269) = -TPK%KR27(:)*PCONC(:,90)*PCONC(:,80) + PTERMS(:,81,272) = -TPK%KR27(:)*PCONC(:,91)*PCONC(:,81) +! +! +RETURN +END SUBROUTINE SUBT46 +! +SUBROUTINE SUBT47 +! +!Indices 941 a 951 ! !PTERMS(WR_SULF,KR27) = +2.00*KR27*<WR_AHSO5>*<WR_SO2> - PTERMS(:,81,269) = +2.00*TPK%KR27(:)*PCONC(:,90)*PCONC(:,80) + PTERMS(:,82,272) = +2.00*TPK%KR27(:)*PCONC(:,91)*PCONC(:,81) ! !PTERMS(WR_AHSO5,KR27) = -KR27*<WR_AHSO5>*<WR_SO2> - PTERMS(:,90,269) = -TPK%KR27(:)*PCONC(:,90)*PCONC(:,80) + PTERMS(:,91,272) = -TPK%KR27(:)*PCONC(:,91)*PCONC(:,81) ! !PTERMS(WR_OH,KR28) = +KR28*<WR_ASO4> - PTERMS(:,77,270) = +TPK%KR28(:)*PCONC(:,88) + PTERMS(:,78,273) = +TPK%KR28(:)*PCONC(:,89) ! !PTERMS(WR_SULF,KR28) = +KR28*<WR_ASO4> - PTERMS(:,81,270) = +TPK%KR28(:)*PCONC(:,88) + PTERMS(:,82,273) = +TPK%KR28(:)*PCONC(:,89) ! !PTERMS(WR_ASO4,KR28) = -KR28*<WR_ASO4> - PTERMS(:,88,270) = -TPK%KR28(:)*PCONC(:,88) + PTERMS(:,89,273) = -TPK%KR28(:)*PCONC(:,89) ! !PTERMS(WR_O3,KR29) = -KR29*<WR_SO2>*<WR_O3> - PTERMS(:,67,271) = -TPK%KR29(:)*PCONC(:,80)*PCONC(:,67) + PTERMS(:,68,274) = -TPK%KR29(:)*PCONC(:,81)*PCONC(:,68) ! !PTERMS(WR_SO2,KR29) = -KR29*<WR_SO2>*<WR_O3> - PTERMS(:,80,271) = -TPK%KR29(:)*PCONC(:,80)*PCONC(:,67) + PTERMS(:,81,274) = -TPK%KR29(:)*PCONC(:,81)*PCONC(:,68) ! !PTERMS(WR_SULF,KR29) = +KR29*<WR_SO2>*<WR_O3> - PTERMS(:,81,271) = +TPK%KR29(:)*PCONC(:,80)*PCONC(:,67) + PTERMS(:,82,274) = +TPK%KR29(:)*PCONC(:,81)*PCONC(:,68) ! !PTERMS(WR_H2O2,KR30) = -KR30*<WR_SO2>*<WR_H2O2> - PTERMS(:,68,272) = -TPK%KR30(:)*PCONC(:,80)*PCONC(:,68) -! -! -RETURN -END SUBROUTINE SUBT46 -! -SUBROUTINE SUBT47 -! -!Indices 941 a 942 + PTERMS(:,69,275) = -TPK%KR30(:)*PCONC(:,81)*PCONC(:,69) ! !PTERMS(WR_SO2,KR30) = -KR30*<WR_SO2>*<WR_H2O2> - PTERMS(:,80,272) = -TPK%KR30(:)*PCONC(:,80)*PCONC(:,68) + PTERMS(:,81,275) = -TPK%KR30(:)*PCONC(:,81)*PCONC(:,69) ! !PTERMS(WR_SULF,KR30) = +KR30*<WR_SO2>*<WR_H2O2> - PTERMS(:,81,272) = +TPK%KR30(:)*PCONC(:,80)*PCONC(:,68) + PTERMS(:,82,275) = +TPK%KR30(:)*PCONC(:,81)*PCONC(:,69) ! ! RETURN @@ -33159,7 +33799,7 @@ TPK%O3P(:)=(TPK%K001(:)*PCONC(:,JP_NO2)+TPK%K003(:)*PCONC(:,JP_O3)+TPK%K008(:)*P &0.09000*TPK%K080(:)*PCONC(:,JP_BIO)*PCONC(:,JP_O3))/& &(TPK%K018(:)*TPK%O2(:)+TPK%K019(:)*PCONC(:,JP_O3)+TPK%K029(:)*PCONC(:,JP_NO)+& &TPK%K030(:)*PCONC(:,JP_NO2)+TPK%K031(:)*PCONC(:,JP_NO2)+TPK%K054(:)*PCONC(:,JP_BIO)+& - &TPK%K055(:)*PCONC(:,JP_CARBO)) + &TPK%K055(:)*PCONC(:,JP_CARBO)+TPK%K134(:)*PCONC(:,JP_DMS)) ! /END_CODE/ PTERMS(:,:,:) = 0.0 CALL SUBT0 @@ -33220,7 +33860,7 @@ SUBROUTINE SUBT0 PTERMS(:,7,4) = -TPK%K004(:)*PCONC(:,7) ! !PTERMS(OH,K004) = +K004*<HONO> - PTERMS(:,14,4) = +TPK%K004(:)*PCONC(:,7) + PTERMS(:,15,4) = +TPK%K004(:)*PCONC(:,7) ! !PTERMS(NO2,K005) = +K005*<HNO3> PTERMS(:,4,5) = +TPK%K005(:)*PCONC(:,8) @@ -33229,7 +33869,7 @@ SUBROUTINE SUBT0 PTERMS(:,8,5) = -TPK%K005(:)*PCONC(:,8) ! !PTERMS(OH,K005) = +K005*<HNO3> - PTERMS(:,14,5) = +TPK%K005(:)*PCONC(:,8) + PTERMS(:,15,5) = +TPK%K005(:)*PCONC(:,8) ! !PTERMS(NO2,K006) = +0.65*K006*<HNO4> PTERMS(:,4,6) = +0.65*TPK%K006(:)*PCONC(:,9) @@ -33241,10 +33881,10 @@ SUBROUTINE SUBT0 PTERMS(:,9,6) = -TPK%K006(:)*PCONC(:,9) ! !PTERMS(OH,K006) = +0.35*K006*<HNO4> - PTERMS(:,14,6) = +0.35*TPK%K006(:)*PCONC(:,9) + PTERMS(:,15,6) = +0.35*TPK%K006(:)*PCONC(:,9) ! !PTERMS(HO2,K006) = +0.65*K006*<HNO4> - PTERMS(:,15,6) = +0.65*TPK%K006(:)*PCONC(:,9) + PTERMS(:,16,6) = +0.65*TPK%K006(:)*PCONC(:,9) ! !PTERMS(NO,K007) = +K007*<NO3> PTERMS(:,3,7) = +TPK%K007(:)*PCONC(:,5) @@ -33270,64 +33910,64 @@ SUBROUTINE SUBT1 !Indices 21 a 40 ! !PTERMS(OH,K009) = +K009*<H2O2> - PTERMS(:,14,9) = +TPK%K009(:)*PCONC(:,2) + PTERMS(:,15,9) = +TPK%K009(:)*PCONC(:,2) ! !PTERMS(CO,K010) = +K010*<HCHO> - PTERMS(:,13,10) = +TPK%K010(:)*PCONC(:,22) + PTERMS(:,14,10) = +TPK%K010(:)*PCONC(:,23) ! !PTERMS(HCHO,K010) = -K010*<HCHO> - PTERMS(:,22,10) = -TPK%K010(:)*PCONC(:,22) + PTERMS(:,23,10) = -TPK%K010(:)*PCONC(:,23) ! !PTERMS(CO,K011) = +K011*<HCHO> - PTERMS(:,13,11) = +TPK%K011(:)*PCONC(:,22) + PTERMS(:,14,11) = +TPK%K011(:)*PCONC(:,23) ! !PTERMS(HO2,K011) = +K011*<HCHO> - PTERMS(:,15,11) = +TPK%K011(:)*PCONC(:,22) + PTERMS(:,16,11) = +TPK%K011(:)*PCONC(:,23) ! !PTERMS(HCHO,K011) = -K011*<HCHO> - PTERMS(:,22,11) = -TPK%K011(:)*PCONC(:,22) + PTERMS(:,23,11) = -TPK%K011(:)*PCONC(:,23) ! !PTERMS(CO,K012) = +K012*<ALD> - PTERMS(:,13,12) = +TPK%K012(:)*PCONC(:,23) + PTERMS(:,14,12) = +TPK%K012(:)*PCONC(:,24) ! !PTERMS(HO2,K012) = +K012*<ALD> - PTERMS(:,15,12) = +TPK%K012(:)*PCONC(:,23) + PTERMS(:,16,12) = +TPK%K012(:)*PCONC(:,24) ! !PTERMS(ALD,K012) = -K012*<ALD> - PTERMS(:,23,12) = -TPK%K012(:)*PCONC(:,23) + PTERMS(:,24,12) = -TPK%K012(:)*PCONC(:,24) ! !PTERMS(MO2,K012) = +K012*<ALD> - PTERMS(:,32,12) = +TPK%K012(:)*PCONC(:,23) + PTERMS(:,33,12) = +TPK%K012(:)*PCONC(:,24) ! !PTERMS(OH,K013) = +K013*<OP1> - PTERMS(:,14,13) = +TPK%K013(:)*PCONC(:,28) + PTERMS(:,15,13) = +TPK%K013(:)*PCONC(:,29) ! !PTERMS(HO2,K013) = +K013*<OP1> - PTERMS(:,15,13) = +TPK%K013(:)*PCONC(:,28) + PTERMS(:,16,13) = +TPK%K013(:)*PCONC(:,29) ! !PTERMS(HCHO,K013) = +K013*<OP1> - PTERMS(:,22,13) = +TPK%K013(:)*PCONC(:,28) + PTERMS(:,23,13) = +TPK%K013(:)*PCONC(:,29) ! !PTERMS(OP1,K013) = -K013*<OP1> - PTERMS(:,28,13) = -TPK%K013(:)*PCONC(:,28) + PTERMS(:,29,13) = -TPK%K013(:)*PCONC(:,29) ! !PTERMS(OH,K014) = +K014*<OP2> - PTERMS(:,14,14) = +TPK%K014(:)*PCONC(:,29) + PTERMS(:,15,14) = +TPK%K014(:)*PCONC(:,30) ! !PTERMS(HO2,K014) = +0.96205*K014*<OP2> - PTERMS(:,15,14) = +0.96205*TPK%K014(:)*PCONC(:,29) + PTERMS(:,16,14) = +0.96205*TPK%K014(:)*PCONC(:,30) ! !PTERMS(ALD,K014) = +0.96205*K014*<OP2> - PTERMS(:,23,14) = +0.96205*TPK%K014(:)*PCONC(:,29) + PTERMS(:,24,14) = +0.96205*TPK%K014(:)*PCONC(:,30) ! !PTERMS(OP2,K014) = -K014*<OP2> - PTERMS(:,29,14) = -TPK%K014(:)*PCONC(:,29) + PTERMS(:,30,14) = -TPK%K014(:)*PCONC(:,30) ! !PTERMS(MO2,K014) = +0.03795*K014*<OP2> - PTERMS(:,32,14) = +0.03795*TPK%K014(:)*PCONC(:,29) + PTERMS(:,33,14) = +0.03795*TPK%K014(:)*PCONC(:,30) ! !PTERMS(KET,K015) = -K015*<KET> - PTERMS(:,24,15) = -TPK%K015(:)*PCONC(:,24) + PTERMS(:,25,15) = -TPK%K015(:)*PCONC(:,25) ! ! RETURN @@ -33338,40 +33978,40 @@ SUBROUTINE SUBT2 !Indices 41 a 60 ! !PTERMS(ALKAP,K015) = +1.00000*K015*<KET> - PTERMS(:,33,15) = +1.00000*TPK%K015(:)*PCONC(:,24) + PTERMS(:,34,15) = +1.00000*TPK%K015(:)*PCONC(:,25) ! !PTERMS(CARBOP,K015) = +1.00000*K015*<KET> - PTERMS(:,39,15) = +1.00000*TPK%K015(:)*PCONC(:,24) + PTERMS(:,40,15) = +1.00000*TPK%K015(:)*PCONC(:,25) ! !PTERMS(CO,K016) = +0.91924*K016*<CARBO> - PTERMS(:,13,16) = +0.91924*TPK%K016(:)*PCONC(:,25) + PTERMS(:,14,16) = +0.91924*TPK%K016(:)*PCONC(:,26) ! !PTERMS(HO2,K016) = +0.75830*K016*<CARBO> - PTERMS(:,15,16) = +0.75830*TPK%K016(:)*PCONC(:,25) + PTERMS(:,16,16) = +0.75830*TPK%K016(:)*PCONC(:,26) ! !PTERMS(HCHO,K016) = +0.06517*K016*<CARBO> - PTERMS(:,22,16) = +0.06517*TPK%K016(:)*PCONC(:,25) + PTERMS(:,23,16) = +0.06517*TPK%K016(:)*PCONC(:,26) ! !PTERMS(CARBO,K016) = -K016*<CARBO> - PTERMS(:,25,16) = -TPK%K016(:)*PCONC(:,25) + PTERMS(:,26,16) = -TPK%K016(:)*PCONC(:,26) ! !PTERMS(CARBOP,K016) = +0.69622*K016*<CARBO> - PTERMS(:,39,16) = +0.69622*TPK%K016(:)*PCONC(:,25) + PTERMS(:,40,16) = +0.69622*TPK%K016(:)*PCONC(:,26) ! !PTERMS(NO2,K017) = +K017*<ONIT> - PTERMS(:,4,17) = +TPK%K017(:)*PCONC(:,26) + PTERMS(:,4,17) = +TPK%K017(:)*PCONC(:,27) ! !PTERMS(HO2,K017) = +K017*<ONIT> - PTERMS(:,15,17) = +TPK%K017(:)*PCONC(:,26) + PTERMS(:,16,17) = +TPK%K017(:)*PCONC(:,27) ! !PTERMS(ALD,K017) = +0.20*K017*<ONIT> - PTERMS(:,23,17) = +0.20*TPK%K017(:)*PCONC(:,26) + PTERMS(:,24,17) = +0.20*TPK%K017(:)*PCONC(:,27) ! !PTERMS(KET,K017) = +0.80*K017*<ONIT> - PTERMS(:,24,17) = +0.80*TPK%K017(:)*PCONC(:,26) + PTERMS(:,25,17) = +0.80*TPK%K017(:)*PCONC(:,27) ! !PTERMS(ONIT,K017) = -K017*<ONIT> - PTERMS(:,26,17) = -TPK%K017(:)*PCONC(:,26) + PTERMS(:,27,17) = -TPK%K017(:)*PCONC(:,27) ! !PTERMS(O3,K018) = +K018*<O3P>*<O2> PTERMS(:,1,18) = +TPK%K018(:)*TPK%O3P(:)*TPK%O2(:) @@ -33380,22 +34020,22 @@ SUBROUTINE SUBT2 PTERMS(:,1,19) = -TPK%K019(:)*TPK%O3P(:)*PCONC(:,1) ! !PTERMS(OH,K022) = +K022*<O1D>*<H2O> - PTERMS(:,14,22) = +TPK%K022(:)*TPK%O1D(:)*TPK%H2O(:) + PTERMS(:,15,22) = +TPK%K022(:)*TPK%O1D(:)*TPK%H2O(:) ! !PTERMS(O3,K023) = -K023*<O3>*<OH> - PTERMS(:,1,23) = -TPK%K023(:)*PCONC(:,1)*PCONC(:,14) + PTERMS(:,1,23) = -TPK%K023(:)*PCONC(:,1)*PCONC(:,15) ! !PTERMS(OH,K023) = -K023*<O3>*<OH> - PTERMS(:,14,23) = -TPK%K023(:)*PCONC(:,1)*PCONC(:,14) + PTERMS(:,15,23) = -TPK%K023(:)*PCONC(:,1)*PCONC(:,15) ! !PTERMS(HO2,K023) = +K023*<O3>*<OH> - PTERMS(:,15,23) = +TPK%K023(:)*PCONC(:,1)*PCONC(:,14) + PTERMS(:,16,23) = +TPK%K023(:)*PCONC(:,1)*PCONC(:,15) ! !PTERMS(O3,K024) = -K024*<O3>*<HO2> - PTERMS(:,1,24) = -TPK%K024(:)*PCONC(:,1)*PCONC(:,15) + PTERMS(:,1,24) = -TPK%K024(:)*PCONC(:,1)*PCONC(:,16) ! !PTERMS(OH,K024) = +K024*<O3>*<HO2> - PTERMS(:,14,24) = +TPK%K024(:)*PCONC(:,1)*PCONC(:,15) + PTERMS(:,15,24) = +TPK%K024(:)*PCONC(:,1)*PCONC(:,16) ! ! RETURN @@ -33406,34 +34046,34 @@ SUBROUTINE SUBT3 !Indices 61 a 80 ! !PTERMS(HO2,K024) = -K024*<O3>*<HO2> - PTERMS(:,15,24) = -TPK%K024(:)*PCONC(:,1)*PCONC(:,15) + PTERMS(:,16,24) = -TPK%K024(:)*PCONC(:,1)*PCONC(:,16) ! !PTERMS(OH,K025) = -K025*<OH>*<HO2> - PTERMS(:,14,25) = -TPK%K025(:)*PCONC(:,14)*PCONC(:,15) + PTERMS(:,15,25) = -TPK%K025(:)*PCONC(:,15)*PCONC(:,16) ! !PTERMS(HO2,K025) = -K025*<OH>*<HO2> - PTERMS(:,15,25) = -TPK%K025(:)*PCONC(:,14)*PCONC(:,15) + PTERMS(:,16,25) = -TPK%K025(:)*PCONC(:,15)*PCONC(:,16) ! !PTERMS(H2O2,K026) = -K026*<H2O2>*<OH> - PTERMS(:,2,26) = -TPK%K026(:)*PCONC(:,2)*PCONC(:,14) + PTERMS(:,2,26) = -TPK%K026(:)*PCONC(:,2)*PCONC(:,15) ! !PTERMS(OH,K026) = -K026*<H2O2>*<OH> - PTERMS(:,14,26) = -TPK%K026(:)*PCONC(:,2)*PCONC(:,14) + PTERMS(:,15,26) = -TPK%K026(:)*PCONC(:,2)*PCONC(:,15) ! !PTERMS(HO2,K026) = +K026*<H2O2>*<OH> - PTERMS(:,15,26) = +TPK%K026(:)*PCONC(:,2)*PCONC(:,14) + PTERMS(:,16,26) = +TPK%K026(:)*PCONC(:,2)*PCONC(:,15) ! !PTERMS(H2O2,K027) = +K027*<HO2>*<HO2> - PTERMS(:,2,27) = +TPK%K027(:)*PCONC(:,15)*PCONC(:,15) + PTERMS(:,2,27) = +TPK%K027(:)*PCONC(:,16)*PCONC(:,16) ! !PTERMS(HO2,K027) = -K027*<HO2>*<HO2> - PTERMS(:,15,27) = -TPK%K027(:)*PCONC(:,15)*PCONC(:,15) + PTERMS(:,16,27) = -TPK%K027(:)*PCONC(:,16)*PCONC(:,16) ! !PTERMS(H2O2,K028) = +K028*<HO2>*<HO2>*<H2O> - PTERMS(:,2,28) = +TPK%K028(:)*PCONC(:,15)*PCONC(:,15)*TPK%H2O(:) + PTERMS(:,2,28) = +TPK%K028(:)*PCONC(:,16)*PCONC(:,16)*TPK%H2O(:) ! !PTERMS(HO2,K028) = -K028*<HO2>*<HO2>*<H2O> - PTERMS(:,15,28) = -TPK%K028(:)*PCONC(:,15)*PCONC(:,15)*TPK%H2O(:) + PTERMS(:,16,28) = -TPK%K028(:)*PCONC(:,16)*PCONC(:,16)*TPK%H2O(:) ! !PTERMS(NO,K029) = -K029*<O3P>*<NO> PTERMS(:,3,29) = -TPK%K029(:)*TPK%O3P(:)*PCONC(:,3) @@ -33454,16 +34094,16 @@ SUBROUTINE SUBT3 PTERMS(:,5,31) = +TPK%K031(:)*TPK%O3P(:)*PCONC(:,4) ! !PTERMS(NO,K032) = -K032*<OH>*<NO> - PTERMS(:,3,32) = -TPK%K032(:)*PCONC(:,14)*PCONC(:,3) + PTERMS(:,3,32) = -TPK%K032(:)*PCONC(:,15)*PCONC(:,3) ! !PTERMS(HONO,K032) = +K032*<OH>*<NO> - PTERMS(:,7,32) = +TPK%K032(:)*PCONC(:,14)*PCONC(:,3) + PTERMS(:,7,32) = +TPK%K032(:)*PCONC(:,15)*PCONC(:,3) ! !PTERMS(OH,K032) = -K032*<OH>*<NO> - PTERMS(:,14,32) = -TPK%K032(:)*PCONC(:,14)*PCONC(:,3) + PTERMS(:,15,32) = -TPK%K032(:)*PCONC(:,15)*PCONC(:,3) ! !PTERMS(NO2,K033) = -K033*<OH>*<NO2> - PTERMS(:,4,33) = -TPK%K033(:)*PCONC(:,14)*PCONC(:,4) + PTERMS(:,4,33) = -TPK%K033(:)*PCONC(:,15)*PCONC(:,4) ! ! RETURN @@ -33474,43 +34114,43 @@ SUBROUTINE SUBT4 !Indices 81 a 100 ! !PTERMS(HNO3,K033) = +K033*<OH>*<NO2> - PTERMS(:,8,33) = +TPK%K033(:)*PCONC(:,14)*PCONC(:,4) + PTERMS(:,8,33) = +TPK%K033(:)*PCONC(:,15)*PCONC(:,4) ! !PTERMS(OH,K033) = -K033*<OH>*<NO2> - PTERMS(:,14,33) = -TPK%K033(:)*PCONC(:,14)*PCONC(:,4) + PTERMS(:,15,33) = -TPK%K033(:)*PCONC(:,15)*PCONC(:,4) ! !PTERMS(NO2,K034) = +K034*<OH>*<NO3> - PTERMS(:,4,34) = +TPK%K034(:)*PCONC(:,14)*PCONC(:,5) + PTERMS(:,4,34) = +TPK%K034(:)*PCONC(:,15)*PCONC(:,5) ! !PTERMS(NO3,K034) = -K034*<OH>*<NO3> - PTERMS(:,5,34) = -TPK%K034(:)*PCONC(:,14)*PCONC(:,5) + PTERMS(:,5,34) = -TPK%K034(:)*PCONC(:,15)*PCONC(:,5) ! !PTERMS(OH,K034) = -K034*<OH>*<NO3> - PTERMS(:,14,34) = -TPK%K034(:)*PCONC(:,14)*PCONC(:,5) + PTERMS(:,15,34) = -TPK%K034(:)*PCONC(:,15)*PCONC(:,5) ! !PTERMS(HO2,K034) = +K034*<OH>*<NO3> - PTERMS(:,15,34) = +TPK%K034(:)*PCONC(:,14)*PCONC(:,5) + PTERMS(:,16,34) = +TPK%K034(:)*PCONC(:,15)*PCONC(:,5) ! !PTERMS(NO,K035) = -K035*<HO2>*<NO> - PTERMS(:,3,35) = -TPK%K035(:)*PCONC(:,15)*PCONC(:,3) + PTERMS(:,3,35) = -TPK%K035(:)*PCONC(:,16)*PCONC(:,3) ! !PTERMS(NO2,K035) = +K035*<HO2>*<NO> - PTERMS(:,4,35) = +TPK%K035(:)*PCONC(:,15)*PCONC(:,3) + PTERMS(:,4,35) = +TPK%K035(:)*PCONC(:,16)*PCONC(:,3) ! !PTERMS(OH,K035) = +K035*<HO2>*<NO> - PTERMS(:,14,35) = +TPK%K035(:)*PCONC(:,15)*PCONC(:,3) + PTERMS(:,15,35) = +TPK%K035(:)*PCONC(:,16)*PCONC(:,3) ! !PTERMS(HO2,K035) = -K035*<HO2>*<NO> - PTERMS(:,15,35) = -TPK%K035(:)*PCONC(:,15)*PCONC(:,3) + PTERMS(:,16,35) = -TPK%K035(:)*PCONC(:,16)*PCONC(:,3) ! !PTERMS(NO2,K036) = -K036*<HO2>*<NO2> - PTERMS(:,4,36) = -TPK%K036(:)*PCONC(:,15)*PCONC(:,4) + PTERMS(:,4,36) = -TPK%K036(:)*PCONC(:,16)*PCONC(:,4) ! !PTERMS(HNO4,K036) = +K036*<HO2>*<NO2> - PTERMS(:,9,36) = +TPK%K036(:)*PCONC(:,15)*PCONC(:,4) + PTERMS(:,9,36) = +TPK%K036(:)*PCONC(:,16)*PCONC(:,4) ! !PTERMS(HO2,K036) = -K036*<HO2>*<NO2> - PTERMS(:,15,36) = -TPK%K036(:)*PCONC(:,15)*PCONC(:,4) + PTERMS(:,16,36) = -TPK%K036(:)*PCONC(:,16)*PCONC(:,4) ! !PTERMS(NO2,K037) = +K037*<HNO4> PTERMS(:,4,37) = +TPK%K037(:)*PCONC(:,9) @@ -33519,19 +34159,19 @@ SUBROUTINE SUBT4 PTERMS(:,9,37) = -TPK%K037(:)*PCONC(:,9) ! !PTERMS(HO2,K037) = +K037*<HNO4> - PTERMS(:,15,37) = +TPK%K037(:)*PCONC(:,9) + PTERMS(:,16,37) = +TPK%K037(:)*PCONC(:,9) ! !PTERMS(NO2,K038) = +0.7*K038*<HO2>*<NO3> - PTERMS(:,4,38) = +0.7*TPK%K038(:)*PCONC(:,15)*PCONC(:,5) + PTERMS(:,4,38) = +0.7*TPK%K038(:)*PCONC(:,16)*PCONC(:,5) ! !PTERMS(NO3,K038) = -K038*<HO2>*<NO3> - PTERMS(:,5,38) = -TPK%K038(:)*PCONC(:,15)*PCONC(:,5) + PTERMS(:,5,38) = -TPK%K038(:)*PCONC(:,16)*PCONC(:,5) ! !PTERMS(HNO3,K038) = +0.3*K038*<HO2>*<NO3> - PTERMS(:,8,38) = +0.3*TPK%K038(:)*PCONC(:,15)*PCONC(:,5) + PTERMS(:,8,38) = +0.3*TPK%K038(:)*PCONC(:,16)*PCONC(:,5) ! !PTERMS(OH,K038) = +0.7*K038*<HO2>*<NO3> - PTERMS(:,14,38) = +0.7*TPK%K038(:)*PCONC(:,15)*PCONC(:,5) + PTERMS(:,15,38) = +0.7*TPK%K038(:)*PCONC(:,16)*PCONC(:,5) ! ! RETURN @@ -33542,34 +34182,34 @@ SUBROUTINE SUBT5 !Indices 101 a 120 ! !PTERMS(HO2,K038) = -K038*<HO2>*<NO3> - PTERMS(:,15,38) = -TPK%K038(:)*PCONC(:,15)*PCONC(:,5) + PTERMS(:,16,38) = -TPK%K038(:)*PCONC(:,16)*PCONC(:,5) ! !PTERMS(NO2,K039) = +K039*<OH>*<HONO> - PTERMS(:,4,39) = +TPK%K039(:)*PCONC(:,14)*PCONC(:,7) + PTERMS(:,4,39) = +TPK%K039(:)*PCONC(:,15)*PCONC(:,7) ! !PTERMS(HONO,K039) = -K039*<OH>*<HONO> - PTERMS(:,7,39) = -TPK%K039(:)*PCONC(:,14)*PCONC(:,7) + PTERMS(:,7,39) = -TPK%K039(:)*PCONC(:,15)*PCONC(:,7) ! !PTERMS(OH,K039) = -K039*<OH>*<HONO> - PTERMS(:,14,39) = -TPK%K039(:)*PCONC(:,14)*PCONC(:,7) + PTERMS(:,15,39) = -TPK%K039(:)*PCONC(:,15)*PCONC(:,7) ! !PTERMS(NO3,K040) = +K040*<OH>*<HNO3> - PTERMS(:,5,40) = +TPK%K040(:)*PCONC(:,14)*PCONC(:,8) + PTERMS(:,5,40) = +TPK%K040(:)*PCONC(:,15)*PCONC(:,8) ! !PTERMS(HNO3,K040) = -K040*<OH>*<HNO3> - PTERMS(:,8,40) = -TPK%K040(:)*PCONC(:,14)*PCONC(:,8) + PTERMS(:,8,40) = -TPK%K040(:)*PCONC(:,15)*PCONC(:,8) ! !PTERMS(OH,K040) = -K040*<OH>*<HNO3> - PTERMS(:,14,40) = -TPK%K040(:)*PCONC(:,14)*PCONC(:,8) + PTERMS(:,15,40) = -TPK%K040(:)*PCONC(:,15)*PCONC(:,8) ! !PTERMS(NO2,K041) = +K041*<OH>*<HNO4> - PTERMS(:,4,41) = +TPK%K041(:)*PCONC(:,14)*PCONC(:,9) + PTERMS(:,4,41) = +TPK%K041(:)*PCONC(:,15)*PCONC(:,9) ! !PTERMS(HNO4,K041) = -K041*<OH>*<HNO4> - PTERMS(:,9,41) = -TPK%K041(:)*PCONC(:,14)*PCONC(:,9) + PTERMS(:,9,41) = -TPK%K041(:)*PCONC(:,15)*PCONC(:,9) ! !PTERMS(OH,K041) = -K041*<OH>*<HNO4> - PTERMS(:,14,41) = -TPK%K041(:)*PCONC(:,14)*PCONC(:,9) + PTERMS(:,15,41) = -TPK%K041(:)*PCONC(:,15)*PCONC(:,9) ! !PTERMS(O3,K042) = -K042*<O3>*<NO> PTERMS(:,1,42) = -TPK%K042(:)*PCONC(:,1)*PCONC(:,3) @@ -33646,28 +34286,28 @@ SUBROUTINE SUBT6 PTERMS(:,5,49) = -TPK%K049(:)*PCONC(:,5)*PCONC(:,5) ! !PTERMS(NH3,K050) = -K050*<NH3>*<OH> - PTERMS(:,10,50) = -TPK%K050(:)*PCONC(:,10)*PCONC(:,14) + PTERMS(:,10,50) = -TPK%K050(:)*PCONC(:,10)*PCONC(:,15) ! !PTERMS(OH,K050) = -K050*<NH3>*<OH> - PTERMS(:,14,50) = -TPK%K050(:)*PCONC(:,10)*PCONC(:,14) + PTERMS(:,15,50) = -TPK%K050(:)*PCONC(:,10)*PCONC(:,15) ! !PTERMS(OH,K051) = -K051*<OH>*<H2> - PTERMS(:,14,51) = -TPK%K051(:)*PCONC(:,14)*TPK%H2(:) + PTERMS(:,15,51) = -TPK%K051(:)*PCONC(:,15)*TPK%H2(:) ! !PTERMS(HO2,K051) = +K051*<OH>*<H2> - PTERMS(:,15,51) = +TPK%K051(:)*PCONC(:,14)*TPK%H2(:) + PTERMS(:,16,51) = +TPK%K051(:)*PCONC(:,15)*TPK%H2(:) ! !PTERMS(SO2,K052) = -K052*<OH>*<SO2> - PTERMS(:,11,52) = -TPK%K052(:)*PCONC(:,14)*PCONC(:,11) + PTERMS(:,12,52) = -TPK%K052(:)*PCONC(:,15)*PCONC(:,12) ! !PTERMS(SULF,K052) = +K052*<OH>*<SO2> - PTERMS(:,12,52) = +TPK%K052(:)*PCONC(:,14)*PCONC(:,11) + PTERMS(:,13,52) = +TPK%K052(:)*PCONC(:,15)*PCONC(:,12) ! !PTERMS(OH,K052) = -K052*<OH>*<SO2> - PTERMS(:,14,52) = -TPK%K052(:)*PCONC(:,14)*PCONC(:,11) + PTERMS(:,15,52) = -TPK%K052(:)*PCONC(:,15)*PCONC(:,12) ! !PTERMS(HO2,K052) = +K052*<OH>*<SO2> - PTERMS(:,15,52) = +TPK%K052(:)*PCONC(:,14)*PCONC(:,11) + PTERMS(:,16,52) = +TPK%K052(:)*PCONC(:,15)*PCONC(:,12) ! ! RETURN @@ -33678,64 +34318,64 @@ SUBROUTINE SUBT7 !Indices 141 a 160 ! !PTERMS(CO,K053) = -K053*<CO>*<OH> - PTERMS(:,13,53) = -TPK%K053(:)*PCONC(:,13)*PCONC(:,14) + PTERMS(:,14,53) = -TPK%K053(:)*PCONC(:,14)*PCONC(:,15) ! !PTERMS(OH,K053) = -K053*<CO>*<OH> - PTERMS(:,14,53) = -TPK%K053(:)*PCONC(:,13)*PCONC(:,14) + PTERMS(:,15,53) = -TPK%K053(:)*PCONC(:,14)*PCONC(:,15) ! !PTERMS(HO2,K053) = +K053*<CO>*<OH> - PTERMS(:,15,53) = +TPK%K053(:)*PCONC(:,13)*PCONC(:,14) + PTERMS(:,16,53) = +TPK%K053(:)*PCONC(:,14)*PCONC(:,15) ! !PTERMS(CO,K054) = +0.01*K054*<BIO>*<O3P> - PTERMS(:,13,54) = +0.01*TPK%K054(:)*PCONC(:,20)*TPK%O3P(:) + PTERMS(:,14,54) = +0.01*TPK%K054(:)*PCONC(:,21)*TPK%O3P(:) ! !PTERMS(OH,K054) = +0.02*K054*<BIO>*<O3P> - PTERMS(:,14,54) = +0.02*TPK%K054(:)*PCONC(:,20)*TPK%O3P(:) + PTERMS(:,15,54) = +0.02*TPK%K054(:)*PCONC(:,21)*TPK%O3P(:) ! !PTERMS(HO2,K054) = +0.28*K054*<BIO>*<O3P> - PTERMS(:,15,54) = +0.28*TPK%K054(:)*PCONC(:,20)*TPK%O3P(:) + PTERMS(:,16,54) = +0.28*TPK%K054(:)*PCONC(:,21)*TPK%O3P(:) ! !PTERMS(ALKE,K054) = +0.91868*K054*<BIO>*<O3P> - PTERMS(:,19,54) = +0.91868*TPK%K054(:)*PCONC(:,20)*TPK%O3P(:) + PTERMS(:,20,54) = +0.91868*TPK%K054(:)*PCONC(:,21)*TPK%O3P(:) ! !PTERMS(BIO,K054) = -K054*<BIO>*<O3P> - PTERMS(:,20,54) = -TPK%K054(:)*PCONC(:,20)*TPK%O3P(:) + PTERMS(:,21,54) = -TPK%K054(:)*PCONC(:,21)*TPK%O3P(:) ! !PTERMS(HCHO,K054) = +0.05*K054*<BIO>*<O3P> - PTERMS(:,22,54) = +0.05*TPK%K054(:)*PCONC(:,20)*TPK%O3P(:) + PTERMS(:,23,54) = +0.05*TPK%K054(:)*PCONC(:,21)*TPK%O3P(:) ! !PTERMS(CARBO,K054) = +0.13255*K054*<BIO>*<O3P> - PTERMS(:,25,54) = +0.13255*TPK%K054(:)*PCONC(:,20)*TPK%O3P(:) + PTERMS(:,26,54) = +0.13255*TPK%K054(:)*PCONC(:,21)*TPK%O3P(:) ! !PTERMS(XO2,K054) = +0.15*K054*<BIO>*<O3P> - PTERMS(:,41,54) = +0.15*TPK%K054(:)*PCONC(:,20)*TPK%O3P(:) + PTERMS(:,42,54) = +0.15*TPK%K054(:)*PCONC(:,21)*TPK%O3P(:) ! !PTERMS(ALD,K055) = +K055*<CARBO>*<O3P> - PTERMS(:,23,55) = +TPK%K055(:)*PCONC(:,25)*TPK%O3P(:) + PTERMS(:,24,55) = +TPK%K055(:)*PCONC(:,26)*TPK%O3P(:) ! !PTERMS(CARBO,K055) = -K055*<CARBO>*<O3P> - PTERMS(:,25,55) = -TPK%K055(:)*PCONC(:,25)*TPK%O3P(:) + PTERMS(:,26,55) = -TPK%K055(:)*PCONC(:,26)*TPK%O3P(:) ! !PTERMS(OH,K056) = -K056*<CH4>*<OH> - PTERMS(:,14,56) = -TPK%K056(:)*PCONC(:,16)*PCONC(:,14) + PTERMS(:,15,56) = -TPK%K056(:)*PCONC(:,17)*PCONC(:,15) ! !PTERMS(CH4,K056) = -K056*<CH4>*<OH> - PTERMS(:,16,56) = -TPK%K056(:)*PCONC(:,16)*PCONC(:,14) + PTERMS(:,17,56) = -TPK%K056(:)*PCONC(:,17)*PCONC(:,15) ! !PTERMS(MO2,K056) = +K056*<CH4>*<OH> - PTERMS(:,32,56) = +TPK%K056(:)*PCONC(:,16)*PCONC(:,14) + PTERMS(:,33,56) = +TPK%K056(:)*PCONC(:,17)*PCONC(:,15) ! !PTERMS(OH,K057) = -K057*<ETH>*<OH> - PTERMS(:,14,57) = -TPK%K057(:)*PCONC(:,17)*PCONC(:,14) + PTERMS(:,15,57) = -TPK%K057(:)*PCONC(:,18)*PCONC(:,15) ! !PTERMS(ETH,K057) = -K057*<ETH>*<OH> - PTERMS(:,17,57) = -TPK%K057(:)*PCONC(:,17)*PCONC(:,14) + PTERMS(:,18,57) = -TPK%K057(:)*PCONC(:,18)*PCONC(:,15) ! !PTERMS(ALKAP,K057) = +K057*<ETH>*<OH> - PTERMS(:,33,57) = +TPK%K057(:)*PCONC(:,17)*PCONC(:,14) + PTERMS(:,34,57) = +TPK%K057(:)*PCONC(:,18)*PCONC(:,15) ! !PTERMS(CO,K058) = +0.00878*K058*<ALKA>*<OH> - PTERMS(:,13,58) = +0.00878*TPK%K058(:)*PCONC(:,18)*PCONC(:,14) + PTERMS(:,14,58) = +0.00878*TPK%K058(:)*PCONC(:,19)*PCONC(:,15) ! ! RETURN @@ -33746,64 +34386,64 @@ SUBROUTINE SUBT8 !Indices 161 a 180 ! !PTERMS(OH,K058) = -K058*<ALKA>*<OH> - PTERMS(:,14,58) = -TPK%K058(:)*PCONC(:,18)*PCONC(:,14) + PTERMS(:,15,58) = -TPK%K058(:)*PCONC(:,19)*PCONC(:,15) ! !PTERMS(HO2,K058) = +0.12793*K058*<ALKA>*<OH> - PTERMS(:,15,58) = +0.12793*TPK%K058(:)*PCONC(:,18)*PCONC(:,14) + PTERMS(:,16,58) = +0.12793*TPK%K058(:)*PCONC(:,19)*PCONC(:,15) ! !PTERMS(ALKA,K058) = -K058*<ALKA>*<OH> - PTERMS(:,18,58) = -TPK%K058(:)*PCONC(:,18)*PCONC(:,14) + PTERMS(:,19,58) = -TPK%K058(:)*PCONC(:,19)*PCONC(:,15) ! !PTERMS(HCHO,K058) = +0.00140*K058*<ALKA>*<OH> - PTERMS(:,22,58) = +0.00140*TPK%K058(:)*PCONC(:,18)*PCONC(:,14) + PTERMS(:,23,58) = +0.00140*TPK%K058(:)*PCONC(:,19)*PCONC(:,15) ! !PTERMS(ALD,K058) = +0.08173*K058*<ALKA>*<OH> - PTERMS(:,23,58) = +0.08173*TPK%K058(:)*PCONC(:,18)*PCONC(:,14) + PTERMS(:,24,58) = +0.08173*TPK%K058(:)*PCONC(:,19)*PCONC(:,15) ! !PTERMS(KET,K058) = +0.03498*K058*<ALKA>*<OH> - PTERMS(:,24,58) = +0.03498*TPK%K058(:)*PCONC(:,18)*PCONC(:,14) + PTERMS(:,25,58) = +0.03498*TPK%K058(:)*PCONC(:,19)*PCONC(:,15) ! !PTERMS(CARBO,K058) = +0.00835*K058*<ALKA>*<OH> - PTERMS(:,25,58) = +0.00835*TPK%K058(:)*PCONC(:,18)*PCONC(:,14) + PTERMS(:,26,58) = +0.00835*TPK%K058(:)*PCONC(:,19)*PCONC(:,15) ! !PTERMS(ORA1,K058) = +0.00878*K058*<ALKA>*<OH> - PTERMS(:,30,58) = +0.00878*TPK%K058(:)*PCONC(:,18)*PCONC(:,14) + PTERMS(:,31,58) = +0.00878*TPK%K058(:)*PCONC(:,19)*PCONC(:,15) ! !PTERMS(ALKAP,K058) = +0.87811*K058*<ALKA>*<OH> - PTERMS(:,33,58) = +0.87811*TPK%K058(:)*PCONC(:,18)*PCONC(:,14) + PTERMS(:,34,58) = +0.87811*TPK%K058(:)*PCONC(:,19)*PCONC(:,15) ! !PTERMS(OH,K059) = -K059*<ALKE>*<OH> - PTERMS(:,14,59) = -TPK%K059(:)*PCONC(:,19)*PCONC(:,14) + PTERMS(:,15,59) = -TPK%K059(:)*PCONC(:,20)*PCONC(:,15) ! !PTERMS(ALKE,K059) = -K059*<ALKE>*<OH> - PTERMS(:,19,59) = -TPK%K059(:)*PCONC(:,19)*PCONC(:,14) + PTERMS(:,20,59) = -TPK%K059(:)*PCONC(:,20)*PCONC(:,15) ! !PTERMS(ALKEP,K059) = +1.02529*K059*<ALKE>*<OH> - PTERMS(:,34,59) = +1.02529*TPK%K059(:)*PCONC(:,19)*PCONC(:,14) + PTERMS(:,35,59) = +1.02529*TPK%K059(:)*PCONC(:,20)*PCONC(:,15) ! !PTERMS(BIOP,K059) = +0.00000*K059*<ALKE>*<OH> - PTERMS(:,35,59) = +0.00000*TPK%K059(:)*PCONC(:,19)*PCONC(:,14) + PTERMS(:,36,59) = +0.00000*TPK%K059(:)*PCONC(:,20)*PCONC(:,15) ! !PTERMS(OH,K060) = -K060*<BIO>*<OH> - PTERMS(:,14,60) = -TPK%K060(:)*PCONC(:,20)*PCONC(:,14) + PTERMS(:,15,60) = -TPK%K060(:)*PCONC(:,21)*PCONC(:,15) ! !PTERMS(BIO,K060) = -K060*<BIO>*<OH> - PTERMS(:,20,60) = -TPK%K060(:)*PCONC(:,20)*PCONC(:,14) + PTERMS(:,21,60) = -TPK%K060(:)*PCONC(:,21)*PCONC(:,15) ! !PTERMS(BIOP,K060) = +1.00000*K060*<BIO>*<OH> - PTERMS(:,35,60) = +1.00000*TPK%K060(:)*PCONC(:,20)*PCONC(:,14) + PTERMS(:,36,60) = +1.00000*TPK%K060(:)*PCONC(:,21)*PCONC(:,15) ! !PTERMS(OH,K061) = -K061*<ARO>*<OH> - PTERMS(:,14,61) = -TPK%K061(:)*PCONC(:,21)*PCONC(:,14) + PTERMS(:,15,61) = -TPK%K061(:)*PCONC(:,22)*PCONC(:,15) ! !PTERMS(HO2,K061) = +0.10318*K061*<ARO>*<OH> - PTERMS(:,15,61) = +0.10318*TPK%K061(:)*PCONC(:,21)*PCONC(:,14) + PTERMS(:,16,61) = +0.10318*TPK%K061(:)*PCONC(:,22)*PCONC(:,15) ! !PTERMS(ARO,K061) = -K061*<ARO>*<OH> - PTERMS(:,21,61) = -TPK%K061(:)*PCONC(:,21)*PCONC(:,14) + PTERMS(:,22,61) = -TPK%K061(:)*PCONC(:,22)*PCONC(:,15) ! !PTERMS(PHO,K061) = +0.00276*K061*<ARO>*<OH> - PTERMS(:,36,61) = +0.00276*TPK%K061(:)*PCONC(:,21)*PCONC(:,14) + PTERMS(:,37,61) = +0.00276*TPK%K061(:)*PCONC(:,22)*PCONC(:,15) ! ! RETURN @@ -33814,64 +34454,64 @@ SUBROUTINE SUBT9 !Indices 181 a 200 ! !PTERMS(ADD,K061) = +0.93968*K061*<ARO>*<OH> - PTERMS(:,37,61) = +0.93968*TPK%K061(:)*PCONC(:,21)*PCONC(:,14) + PTERMS(:,38,61) = +0.93968*TPK%K061(:)*PCONC(:,22)*PCONC(:,15) ! !PTERMS(XO2,K061) = +0.10318*K061*<ARO>*<OH> - PTERMS(:,41,61) = +0.10318*TPK%K061(:)*PCONC(:,21)*PCONC(:,14) + PTERMS(:,42,61) = +0.10318*TPK%K061(:)*PCONC(:,22)*PCONC(:,15) ! !PTERMS(CO,K062) = +K062*<HCHO>*<OH> - PTERMS(:,13,62) = +TPK%K062(:)*PCONC(:,22)*PCONC(:,14) + PTERMS(:,14,62) = +TPK%K062(:)*PCONC(:,23)*PCONC(:,15) ! !PTERMS(OH,K062) = -K062*<HCHO>*<OH> - PTERMS(:,14,62) = -TPK%K062(:)*PCONC(:,22)*PCONC(:,14) + PTERMS(:,15,62) = -TPK%K062(:)*PCONC(:,23)*PCONC(:,15) ! !PTERMS(HO2,K062) = +K062*<HCHO>*<OH> - PTERMS(:,15,62) = +TPK%K062(:)*PCONC(:,22)*PCONC(:,14) + PTERMS(:,16,62) = +TPK%K062(:)*PCONC(:,23)*PCONC(:,15) ! !PTERMS(HCHO,K062) = -K062*<HCHO>*<OH> - PTERMS(:,22,62) = -TPK%K062(:)*PCONC(:,22)*PCONC(:,14) + PTERMS(:,23,62) = -TPK%K062(:)*PCONC(:,23)*PCONC(:,15) ! !PTERMS(OH,K063) = -K063*<ALD>*<OH> - PTERMS(:,14,63) = -TPK%K063(:)*PCONC(:,23)*PCONC(:,14) + PTERMS(:,15,63) = -TPK%K063(:)*PCONC(:,24)*PCONC(:,15) ! !PTERMS(ALD,K063) = -K063*<ALD>*<OH> - PTERMS(:,23,63) = -TPK%K063(:)*PCONC(:,23)*PCONC(:,14) + PTERMS(:,24,63) = -TPK%K063(:)*PCONC(:,24)*PCONC(:,15) ! !PTERMS(CARBOP,K063) = +1.00000*K063*<ALD>*<OH> - PTERMS(:,39,63) = +1.00000*TPK%K063(:)*PCONC(:,23)*PCONC(:,14) + PTERMS(:,40,63) = +1.00000*TPK%K063(:)*PCONC(:,24)*PCONC(:,15) ! !PTERMS(OH,K064) = -K064*<KET>*<OH> - PTERMS(:,14,64) = -TPK%K064(:)*PCONC(:,24)*PCONC(:,14) + PTERMS(:,15,64) = -TPK%K064(:)*PCONC(:,25)*PCONC(:,15) ! !PTERMS(KET,K064) = -K064*<KET>*<OH> - PTERMS(:,24,64) = -TPK%K064(:)*PCONC(:,24)*PCONC(:,14) + PTERMS(:,25,64) = -TPK%K064(:)*PCONC(:,25)*PCONC(:,15) ! !PTERMS(CARBOP,K064) = +1.00000*K064*<KET>*<OH> - PTERMS(:,39,64) = +1.00000*TPK%K064(:)*PCONC(:,24)*PCONC(:,14) + PTERMS(:,40,64) = +1.00000*TPK%K064(:)*PCONC(:,25)*PCONC(:,15) ! !PTERMS(CO,K065) = +1.01732*K065*<CARBO>*<OH> - PTERMS(:,13,65) = +1.01732*TPK%K065(:)*PCONC(:,25)*PCONC(:,14) + PTERMS(:,14,65) = +1.01732*TPK%K065(:)*PCONC(:,26)*PCONC(:,15) ! !PTERMS(OH,K065) = -K065*<CARBO>*<OH> - PTERMS(:,14,65) = -TPK%K065(:)*PCONC(:,25)*PCONC(:,14) + PTERMS(:,15,65) = -TPK%K065(:)*PCONC(:,26)*PCONC(:,15) ! !PTERMS(HO2,K065) = +0.51208*K065*<CARBO>*<OH> - PTERMS(:,15,65) = +0.51208*TPK%K065(:)*PCONC(:,25)*PCONC(:,14) + PTERMS(:,16,65) = +0.51208*TPK%K065(:)*PCONC(:,26)*PCONC(:,15) ! !PTERMS(HCHO,K065) = +0.00000*K065*<CARBO>*<OH> - PTERMS(:,22,65) = +0.00000*TPK%K065(:)*PCONC(:,25)*PCONC(:,14) + PTERMS(:,23,65) = +0.00000*TPK%K065(:)*PCONC(:,26)*PCONC(:,15) ! !PTERMS(ALD,K065) = +0.06253*K065*<CARBO>*<OH> - PTERMS(:,23,65) = +0.06253*TPK%K065(:)*PCONC(:,25)*PCONC(:,14) + PTERMS(:,24,65) = +0.06253*TPK%K065(:)*PCONC(:,26)*PCONC(:,15) ! !PTERMS(KET,K065) = +0.00853*K065*<CARBO>*<OH> - PTERMS(:,24,65) = +0.00853*TPK%K065(:)*PCONC(:,25)*PCONC(:,14) + PTERMS(:,25,65) = +0.00853*TPK%K065(:)*PCONC(:,26)*PCONC(:,15) ! !PTERMS(CARBO,K065) = -K065*<CARBO>*<OH> - PTERMS(:,25,65) = -TPK%K065(:)*PCONC(:,25)*PCONC(:,14) + PTERMS(:,26,65) = -TPK%K065(:)*PCONC(:,26)*PCONC(:,15) ! !PTERMS(CARBOP,K065) = +0.51419*K065*<CARBO>*<OH> - PTERMS(:,39,65) = +0.51419*TPK%K065(:)*PCONC(:,25)*PCONC(:,14) + PTERMS(:,40,65) = +0.51419*TPK%K065(:)*PCONC(:,26)*PCONC(:,15) ! ! RETURN @@ -33882,64 +34522,64 @@ SUBROUTINE SUBT10 !Indices 201 a 220 ! !PTERMS(XO2,K065) = +0.10162*K065*<CARBO>*<OH> - PTERMS(:,41,65) = +0.10162*TPK%K065(:)*PCONC(:,25)*PCONC(:,14) + PTERMS(:,42,65) = +0.10162*TPK%K065(:)*PCONC(:,26)*PCONC(:,15) ! !PTERMS(OH,K066) = -K066*<ORA1>*<OH> - PTERMS(:,14,66) = -TPK%K066(:)*PCONC(:,30)*PCONC(:,14) + PTERMS(:,15,66) = -TPK%K066(:)*PCONC(:,31)*PCONC(:,15) ! !PTERMS(HO2,K066) = +K066*<ORA1>*<OH> - PTERMS(:,15,66) = +TPK%K066(:)*PCONC(:,30)*PCONC(:,14) + PTERMS(:,16,66) = +TPK%K066(:)*PCONC(:,31)*PCONC(:,15) ! !PTERMS(ORA1,K066) = -K066*<ORA1>*<OH> - PTERMS(:,30,66) = -TPK%K066(:)*PCONC(:,30)*PCONC(:,14) + PTERMS(:,31,66) = -TPK%K066(:)*PCONC(:,31)*PCONC(:,15) ! !PTERMS(OH,K067) = -K067*<ORA2>*<OH> - PTERMS(:,14,67) = -TPK%K067(:)*PCONC(:,31)*PCONC(:,14) + PTERMS(:,15,67) = -TPK%K067(:)*PCONC(:,32)*PCONC(:,15) ! !PTERMS(ORA2,K067) = -K067*<ORA2>*<OH> - PTERMS(:,31,67) = -TPK%K067(:)*PCONC(:,31)*PCONC(:,14) + PTERMS(:,32,67) = -TPK%K067(:)*PCONC(:,32)*PCONC(:,15) ! !PTERMS(OH,K068) = -K068*<OP1>*<OH> - PTERMS(:,14,68) = -TPK%K068(:)*PCONC(:,28)*PCONC(:,14) + PTERMS(:,15,68) = -TPK%K068(:)*PCONC(:,29)*PCONC(:,15) ! !PTERMS(HCHO,K068) = +0.35*K068*<OP1>*<OH> - PTERMS(:,22,68) = +0.35*TPK%K068(:)*PCONC(:,28)*PCONC(:,14) + PTERMS(:,23,68) = +0.35*TPK%K068(:)*PCONC(:,29)*PCONC(:,15) ! !PTERMS(OP1,K068) = -K068*<OP1>*<OH> - PTERMS(:,28,68) = -TPK%K068(:)*PCONC(:,28)*PCONC(:,14) + PTERMS(:,29,68) = -TPK%K068(:)*PCONC(:,29)*PCONC(:,15) ! !PTERMS(MO2,K068) = +0.65*K068*<OP1>*<OH> - PTERMS(:,32,68) = +0.65*TPK%K068(:)*PCONC(:,28)*PCONC(:,14) + PTERMS(:,33,68) = +0.65*TPK%K068(:)*PCONC(:,29)*PCONC(:,15) ! !PTERMS(OH,K069) = -K069*<OP2>*<OH> - PTERMS(:,14,69) = -TPK%K069(:)*PCONC(:,29)*PCONC(:,14) + PTERMS(:,15,69) = -TPK%K069(:)*PCONC(:,30)*PCONC(:,15) ! !PTERMS(HO2,K069) = +0.02915*K069*<OP2>*<OH> - PTERMS(:,15,69) = +0.02915*TPK%K069(:)*PCONC(:,29)*PCONC(:,14) + PTERMS(:,16,69) = +0.02915*TPK%K069(:)*PCONC(:,30)*PCONC(:,15) ! !PTERMS(HCHO,K069) = +0.02915*K069*<OP2>*<OH> - PTERMS(:,22,69) = +0.02915*TPK%K069(:)*PCONC(:,29)*PCONC(:,14) + PTERMS(:,23,69) = +0.02915*TPK%K069(:)*PCONC(:,30)*PCONC(:,15) ! !PTERMS(ALD,K069) = +0.07335*K069*<OP2>*<OH> - PTERMS(:,23,69) = +0.07335*TPK%K069(:)*PCONC(:,29)*PCONC(:,14) + PTERMS(:,24,69) = +0.07335*TPK%K069(:)*PCONC(:,30)*PCONC(:,15) ! !PTERMS(KET,K069) = +0.37591*K069*<OP2>*<OH> - PTERMS(:,24,69) = +0.37591*TPK%K069(:)*PCONC(:,29)*PCONC(:,14) + PTERMS(:,25,69) = +0.37591*TPK%K069(:)*PCONC(:,30)*PCONC(:,15) ! !PTERMS(OP2,K069) = -K069*<OP2>*<OH> - PTERMS(:,29,69) = -TPK%K069(:)*PCONC(:,29)*PCONC(:,14) + PTERMS(:,30,69) = -TPK%K069(:)*PCONC(:,30)*PCONC(:,15) ! !PTERMS(ALKAP,K069) = +0.40341*K069*<OP2>*<OH> - PTERMS(:,33,69) = +0.40341*TPK%K069(:)*PCONC(:,29)*PCONC(:,14) + PTERMS(:,34,69) = +0.40341*TPK%K069(:)*PCONC(:,30)*PCONC(:,15) ! !PTERMS(CARBOP,K069) = +0.05413*K069*<OP2>*<OH> - PTERMS(:,39,69) = +0.05413*TPK%K069(:)*PCONC(:,29)*PCONC(:,14) + PTERMS(:,40,69) = +0.05413*TPK%K069(:)*PCONC(:,30)*PCONC(:,15) ! !PTERMS(XO2,K069) = +0.09333*K069*<OP2>*<OH> - PTERMS(:,41,69) = +0.09333*TPK%K069(:)*PCONC(:,29)*PCONC(:,14) + PTERMS(:,42,69) = +0.09333*TPK%K069(:)*PCONC(:,30)*PCONC(:,15) ! !PTERMS(NO3,K070) = +0.71893*K070*<PAN>*<OH> - PTERMS(:,5,70) = +0.71893*TPK%K070(:)*PCONC(:,27)*PCONC(:,14) + PTERMS(:,5,70) = +0.71893*TPK%K070(:)*PCONC(:,28)*PCONC(:,15) ! ! RETURN @@ -33950,64 +34590,64 @@ SUBROUTINE SUBT11 !Indices 221 a 240 ! !PTERMS(OH,K070) = -K070*<PAN>*<OH> - PTERMS(:,14,70) = -TPK%K070(:)*PCONC(:,27)*PCONC(:,14) + PTERMS(:,15,70) = -TPK%K070(:)*PCONC(:,28)*PCONC(:,15) ! !PTERMS(HO2,K070) = +0.28107*K070*<PAN>*<OH> - PTERMS(:,15,70) = +0.28107*TPK%K070(:)*PCONC(:,27)*PCONC(:,14) + PTERMS(:,16,70) = +0.28107*TPK%K070(:)*PCONC(:,28)*PCONC(:,15) ! !PTERMS(HCHO,K070) = +0.57839*K070*<PAN>*<OH> - PTERMS(:,22,70) = +0.57839*TPK%K070(:)*PCONC(:,27)*PCONC(:,14) + PTERMS(:,23,70) = +0.57839*TPK%K070(:)*PCONC(:,28)*PCONC(:,15) ! !PTERMS(CARBO,K070) = +0.21863*K070*<PAN>*<OH> - PTERMS(:,25,70) = +0.21863*TPK%K070(:)*PCONC(:,27)*PCONC(:,14) + PTERMS(:,26,70) = +0.21863*TPK%K070(:)*PCONC(:,28)*PCONC(:,15) ! !PTERMS(PAN,K070) = -K070*<PAN>*<OH> - PTERMS(:,27,70) = -TPK%K070(:)*PCONC(:,27)*PCONC(:,14) + PTERMS(:,28,70) = -TPK%K070(:)*PCONC(:,28)*PCONC(:,15) ! !PTERMS(XO2,K070) = +K070*<PAN>*<OH> - PTERMS(:,41,70) = +TPK%K070(:)*PCONC(:,27)*PCONC(:,14) + PTERMS(:,42,70) = +TPK%K070(:)*PCONC(:,28)*PCONC(:,15) ! !PTERMS(NO2,K071) = +K071*<ONIT>*<OH> - PTERMS(:,4,71) = +TPK%K071(:)*PCONC(:,26)*PCONC(:,14) + PTERMS(:,4,71) = +TPK%K071(:)*PCONC(:,27)*PCONC(:,15) ! !PTERMS(OH,K071) = -K071*<ONIT>*<OH> - PTERMS(:,14,71) = -TPK%K071(:)*PCONC(:,26)*PCONC(:,14) + PTERMS(:,15,71) = -TPK%K071(:)*PCONC(:,27)*PCONC(:,15) ! !PTERMS(ONIT,K071) = -K071*<ONIT>*<OH> - PTERMS(:,26,71) = -TPK%K071(:)*PCONC(:,26)*PCONC(:,14) + PTERMS(:,27,71) = -TPK%K071(:)*PCONC(:,27)*PCONC(:,15) ! !PTERMS(ALKAP,K071) = +1.00000*K071*<ONIT>*<OH> - PTERMS(:,33,71) = +1.00000*TPK%K071(:)*PCONC(:,26)*PCONC(:,14) + PTERMS(:,34,71) = +1.00000*TPK%K071(:)*PCONC(:,27)*PCONC(:,15) ! !PTERMS(NO3,K072) = -K072*<HCHO>*<NO3> - PTERMS(:,5,72) = -TPK%K072(:)*PCONC(:,22)*PCONC(:,5) + PTERMS(:,5,72) = -TPK%K072(:)*PCONC(:,23)*PCONC(:,5) ! !PTERMS(HNO3,K072) = +K072*<HCHO>*<NO3> - PTERMS(:,8,72) = +TPK%K072(:)*PCONC(:,22)*PCONC(:,5) + PTERMS(:,8,72) = +TPK%K072(:)*PCONC(:,23)*PCONC(:,5) ! !PTERMS(CO,K072) = +K072*<HCHO>*<NO3> - PTERMS(:,13,72) = +TPK%K072(:)*PCONC(:,22)*PCONC(:,5) + PTERMS(:,14,72) = +TPK%K072(:)*PCONC(:,23)*PCONC(:,5) ! !PTERMS(HO2,K072) = +K072*<HCHO>*<NO3> - PTERMS(:,15,72) = +TPK%K072(:)*PCONC(:,22)*PCONC(:,5) + PTERMS(:,16,72) = +TPK%K072(:)*PCONC(:,23)*PCONC(:,5) ! !PTERMS(HCHO,K072) = -K072*<HCHO>*<NO3> - PTERMS(:,22,72) = -TPK%K072(:)*PCONC(:,22)*PCONC(:,5) + PTERMS(:,23,72) = -TPK%K072(:)*PCONC(:,23)*PCONC(:,5) ! !PTERMS(NO3,K073) = -K073*<ALD>*<NO3> - PTERMS(:,5,73) = -TPK%K073(:)*PCONC(:,23)*PCONC(:,5) + PTERMS(:,5,73) = -TPK%K073(:)*PCONC(:,24)*PCONC(:,5) ! !PTERMS(HNO3,K073) = +K073*<ALD>*<NO3> - PTERMS(:,8,73) = +TPK%K073(:)*PCONC(:,23)*PCONC(:,5) + PTERMS(:,8,73) = +TPK%K073(:)*PCONC(:,24)*PCONC(:,5) ! !PTERMS(ALD,K073) = -K073*<ALD>*<NO3> - PTERMS(:,23,73) = -TPK%K073(:)*PCONC(:,23)*PCONC(:,5) + PTERMS(:,24,73) = -TPK%K073(:)*PCONC(:,24)*PCONC(:,5) ! !PTERMS(CARBOP,K073) = +1.00000*K073*<ALD>*<NO3> - PTERMS(:,39,73) = +1.00000*TPK%K073(:)*PCONC(:,23)*PCONC(:,5) + PTERMS(:,40,73) = +1.00000*TPK%K073(:)*PCONC(:,24)*PCONC(:,5) ! !PTERMS(NO2,K074) = +0.10530*K074*<CARBO>*<NO3> - PTERMS(:,4,74) = +0.10530*TPK%K074(:)*PCONC(:,25)*PCONC(:,5) + PTERMS(:,4,74) = +0.10530*TPK%K074(:)*PCONC(:,26)*PCONC(:,5) ! ! RETURN @@ -34018,64 +34658,64 @@ SUBROUTINE SUBT12 !Indices 241 a 260 ! !PTERMS(NO3,K074) = -K074*<CARBO>*<NO3> - PTERMS(:,5,74) = -TPK%K074(:)*PCONC(:,25)*PCONC(:,5) + PTERMS(:,5,74) = -TPK%K074(:)*PCONC(:,26)*PCONC(:,5) ! !PTERMS(HNO3,K074) = +0.91567*K074*<CARBO>*<NO3> - PTERMS(:,8,74) = +0.91567*TPK%K074(:)*PCONC(:,25)*PCONC(:,5) + PTERMS(:,8,74) = +0.91567*TPK%K074(:)*PCONC(:,26)*PCONC(:,5) ! !PTERMS(CO,K074) = +1.33723*K074*<CARBO>*<NO3> - PTERMS(:,13,74) = +1.33723*TPK%K074(:)*PCONC(:,25)*PCONC(:,5) + PTERMS(:,14,74) = +1.33723*TPK%K074(:)*PCONC(:,26)*PCONC(:,5) ! !PTERMS(HO2,K074) = +0.63217*K074*<CARBO>*<NO3> - PTERMS(:,15,74) = +0.63217*TPK%K074(:)*PCONC(:,25)*PCONC(:,5) + PTERMS(:,16,74) = +0.63217*TPK%K074(:)*PCONC(:,26)*PCONC(:,5) ! !PTERMS(ALD,K074) = +0.05265*K074*<CARBO>*<NO3> - PTERMS(:,23,74) = +0.05265*TPK%K074(:)*PCONC(:,25)*PCONC(:,5) + PTERMS(:,24,74) = +0.05265*TPK%K074(:)*PCONC(:,26)*PCONC(:,5) ! !PTERMS(KET,K074) = +0.00632*K074*<CARBO>*<NO3> - PTERMS(:,24,74) = +0.00632*TPK%K074(:)*PCONC(:,25)*PCONC(:,5) + PTERMS(:,25,74) = +0.00632*TPK%K074(:)*PCONC(:,26)*PCONC(:,5) ! !PTERMS(CARBO,K074) = -K074*<CARBO>*<NO3> - PTERMS(:,25,74) = -TPK%K074(:)*PCONC(:,25)*PCONC(:,5) + PTERMS(:,26,74) = -TPK%K074(:)*PCONC(:,26)*PCONC(:,5) ! !PTERMS(CARBOP,K074) = +0.38881*K074*<CARBO>*<NO3> - PTERMS(:,39,74) = +0.38881*TPK%K074(:)*PCONC(:,25)*PCONC(:,5) + PTERMS(:,40,74) = +0.38881*TPK%K074(:)*PCONC(:,26)*PCONC(:,5) ! !PTERMS(OLN,K074) = +0.00000*K074*<CARBO>*<NO3> - PTERMS(:,40,74) = +0.00000*TPK%K074(:)*PCONC(:,25)*PCONC(:,5) + PTERMS(:,41,74) = +0.00000*TPK%K074(:)*PCONC(:,26)*PCONC(:,5) ! !PTERMS(XO2,K074) = +0.10530*K074*<CARBO>*<NO3> - PTERMS(:,41,74) = +0.10530*TPK%K074(:)*PCONC(:,25)*PCONC(:,5) + PTERMS(:,42,74) = +0.10530*TPK%K074(:)*PCONC(:,26)*PCONC(:,5) ! !PTERMS(NO3,K075) = -K075*<ARO>*<NO3> - PTERMS(:,5,75) = -TPK%K075(:)*PCONC(:,21)*PCONC(:,5) + PTERMS(:,5,75) = -TPK%K075(:)*PCONC(:,22)*PCONC(:,5) ! !PTERMS(HNO3,K075) = +K075*<ARO>*<NO3> - PTERMS(:,8,75) = +TPK%K075(:)*PCONC(:,21)*PCONC(:,5) + PTERMS(:,8,75) = +TPK%K075(:)*PCONC(:,22)*PCONC(:,5) ! !PTERMS(ARO,K075) = -K075*<ARO>*<NO3> - PTERMS(:,21,75) = -TPK%K075(:)*PCONC(:,21)*PCONC(:,5) + PTERMS(:,22,75) = -TPK%K075(:)*PCONC(:,22)*PCONC(:,5) ! !PTERMS(PHO,K075) = +K075*<ARO>*<NO3> - PTERMS(:,36,75) = +TPK%K075(:)*PCONC(:,21)*PCONC(:,5) + PTERMS(:,37,75) = +TPK%K075(:)*PCONC(:,22)*PCONC(:,5) ! !PTERMS(NO3,K076) = -K076*<ALKE>*<NO3> - PTERMS(:,5,76) = -TPK%K076(:)*PCONC(:,19)*PCONC(:,5) + PTERMS(:,5,76) = -TPK%K076(:)*PCONC(:,20)*PCONC(:,5) ! !PTERMS(ALKE,K076) = -K076*<ALKE>*<NO3> - PTERMS(:,19,76) = -TPK%K076(:)*PCONC(:,19)*PCONC(:,5) + PTERMS(:,20,76) = -TPK%K076(:)*PCONC(:,20)*PCONC(:,5) ! !PTERMS(CARBO,K076) = +0.00000*K076*<ALKE>*<NO3> - PTERMS(:,25,76) = +0.00000*TPK%K076(:)*PCONC(:,19)*PCONC(:,5) + PTERMS(:,26,76) = +0.00000*TPK%K076(:)*PCONC(:,20)*PCONC(:,5) ! !PTERMS(OLN,K076) = +0.93768*K076*<ALKE>*<NO3> - PTERMS(:,40,76) = +0.93768*TPK%K076(:)*PCONC(:,19)*PCONC(:,5) + PTERMS(:,41,76) = +0.93768*TPK%K076(:)*PCONC(:,20)*PCONC(:,5) ! !PTERMS(NO3,K077) = -K077*<BIO>*<NO3> - PTERMS(:,5,77) = -TPK%K077(:)*PCONC(:,20)*PCONC(:,5) + PTERMS(:,5,77) = -TPK%K077(:)*PCONC(:,21)*PCONC(:,5) ! !PTERMS(BIO,K077) = -K077*<BIO>*<NO3> - PTERMS(:,20,77) = -TPK%K077(:)*PCONC(:,20)*PCONC(:,5) + PTERMS(:,21,77) = -TPK%K077(:)*PCONC(:,21)*PCONC(:,5) ! ! RETURN @@ -34086,64 +34726,64 @@ SUBROUTINE SUBT13 !Indices 261 a 280 ! !PTERMS(CARBO,K077) = +0.91741*K077*<BIO>*<NO3> - PTERMS(:,25,77) = +0.91741*TPK%K077(:)*PCONC(:,20)*PCONC(:,5) + PTERMS(:,26,77) = +0.91741*TPK%K077(:)*PCONC(:,21)*PCONC(:,5) ! !PTERMS(OLN,K077) = +1.00000*K077*<BIO>*<NO3> - PTERMS(:,40,77) = +1.00000*TPK%K077(:)*PCONC(:,20)*PCONC(:,5) + PTERMS(:,41,77) = +1.00000*TPK%K077(:)*PCONC(:,21)*PCONC(:,5) ! !PTERMS(NO2,K078) = +0.40*K078*<PAN>*<NO3> - PTERMS(:,4,78) = +0.40*TPK%K078(:)*PCONC(:,27)*PCONC(:,5) + PTERMS(:,4,78) = +0.40*TPK%K078(:)*PCONC(:,28)*PCONC(:,5) ! !PTERMS(NO3,K078) = -K078*<PAN>*<NO3> - PTERMS(:,5,78) = -TPK%K078(:)*PCONC(:,27)*PCONC(:,5) + PTERMS(:,5,78) = -TPK%K078(:)*PCONC(:,28)*PCONC(:,5) ! !PTERMS(HCHO,K078) = +0.40*K078*<PAN>*<NO3> - PTERMS(:,22,78) = +0.40*TPK%K078(:)*PCONC(:,27)*PCONC(:,5) + PTERMS(:,23,78) = +0.40*TPK%K078(:)*PCONC(:,28)*PCONC(:,5) ! !PTERMS(ONIT,K078) = +0.60*K078*<PAN>*<NO3> - PTERMS(:,26,78) = +0.60*TPK%K078(:)*PCONC(:,27)*PCONC(:,5) + PTERMS(:,27,78) = +0.60*TPK%K078(:)*PCONC(:,28)*PCONC(:,5) ! !PTERMS(PAN,K078) = -K078*<PAN>*<NO3> - PTERMS(:,27,78) = -TPK%K078(:)*PCONC(:,27)*PCONC(:,5) + PTERMS(:,28,78) = -TPK%K078(:)*PCONC(:,28)*PCONC(:,5) ! !PTERMS(XO2,K078) = +K078*<PAN>*<NO3> - PTERMS(:,41,78) = +TPK%K078(:)*PCONC(:,27)*PCONC(:,5) + PTERMS(:,42,78) = +TPK%K078(:)*PCONC(:,28)*PCONC(:,5) ! !PTERMS(O3,K079) = -K079*<ALKE>*<O3> - PTERMS(:,1,79) = -TPK%K079(:)*PCONC(:,19)*PCONC(:,1) + PTERMS(:,1,79) = -TPK%K079(:)*PCONC(:,20)*PCONC(:,1) ! !PTERMS(H2O2,K079) = +0.01833*K079*<ALKE>*<O3> - PTERMS(:,2,79) = +0.01833*TPK%K079(:)*PCONC(:,19)*PCONC(:,1) + PTERMS(:,2,79) = +0.01833*TPK%K079(:)*PCONC(:,20)*PCONC(:,1) ! !PTERMS(CO,K079) = +0.35120*K079*<ALKE>*<O3> - PTERMS(:,13,79) = +0.35120*TPK%K079(:)*PCONC(:,19)*PCONC(:,1) + PTERMS(:,14,79) = +0.35120*TPK%K079(:)*PCONC(:,20)*PCONC(:,1) ! !PTERMS(OH,K079) = +0.39435*K079*<ALKE>*<O3> - PTERMS(:,14,79) = +0.39435*TPK%K079(:)*PCONC(:,19)*PCONC(:,1) + PTERMS(:,15,79) = +0.39435*TPK%K079(:)*PCONC(:,20)*PCONC(:,1) ! !PTERMS(HO2,K079) = +0.23451*K079*<ALKE>*<O3> - PTERMS(:,15,79) = +0.23451*TPK%K079(:)*PCONC(:,19)*PCONC(:,1) + PTERMS(:,16,79) = +0.23451*TPK%K079(:)*PCONC(:,20)*PCONC(:,1) ! !PTERMS(CH4,K079) = +0.04300*K079*<ALKE>*<O3> - PTERMS(:,16,79) = +0.04300*TPK%K079(:)*PCONC(:,19)*PCONC(:,1) + PTERMS(:,17,79) = +0.04300*TPK%K079(:)*PCONC(:,20)*PCONC(:,1) ! !PTERMS(ETH,K079) = +0.03196*K079*<ALKE>*<O3> - PTERMS(:,17,79) = +0.03196*TPK%K079(:)*PCONC(:,19)*PCONC(:,1) + PTERMS(:,18,79) = +0.03196*TPK%K079(:)*PCONC(:,20)*PCONC(:,1) ! !PTERMS(ALKE,K079) = -K079*<ALKE>*<O3> - PTERMS(:,19,79) = -TPK%K079(:)*PCONC(:,19)*PCONC(:,1) + PTERMS(:,20,79) = -TPK%K079(:)*PCONC(:,20)*PCONC(:,1) ! !PTERMS(HCHO,K079) = +0.48290*K079*<ALKE>*<O3> - PTERMS(:,22,79) = +0.48290*TPK%K079(:)*PCONC(:,19)*PCONC(:,1) + PTERMS(:,23,79) = +0.48290*TPK%K079(:)*PCONC(:,20)*PCONC(:,1) ! !PTERMS(ALD,K079) = +0.51468*K079*<ALKE>*<O3> - PTERMS(:,23,79) = +0.51468*TPK%K079(:)*PCONC(:,19)*PCONC(:,1) + PTERMS(:,24,79) = +0.51468*TPK%K079(:)*PCONC(:,20)*PCONC(:,1) ! !PTERMS(KET,K079) = +0.07377*K079*<ALKE>*<O3> - PTERMS(:,24,79) = +0.07377*TPK%K079(:)*PCONC(:,19)*PCONC(:,1) + PTERMS(:,25,79) = +0.07377*TPK%K079(:)*PCONC(:,20)*PCONC(:,1) ! !PTERMS(CARBO,K079) = +0.00000*K079*<ALKE>*<O3> - PTERMS(:,25,79) = +0.00000*TPK%K079(:)*PCONC(:,19)*PCONC(:,1) + PTERMS(:,26,79) = +0.00000*TPK%K079(:)*PCONC(:,20)*PCONC(:,1) ! ! RETURN @@ -34154,64 +34794,64 @@ SUBROUTINE SUBT14 !Indices 281 a 300 ! !PTERMS(ORA1,K079) = +0.15343*K079*<ALKE>*<O3> - PTERMS(:,30,79) = +0.15343*TPK%K079(:)*PCONC(:,19)*PCONC(:,1) + PTERMS(:,31,79) = +0.15343*TPK%K079(:)*PCONC(:,20)*PCONC(:,1) ! !PTERMS(ORA2,K079) = +0.08143*K079*<ALKE>*<O3> - PTERMS(:,31,79) = +0.08143*TPK%K079(:)*PCONC(:,19)*PCONC(:,1) + PTERMS(:,32,79) = +0.08143*TPK%K079(:)*PCONC(:,20)*PCONC(:,1) ! !PTERMS(MO2,K079) = +0.13966*K079*<ALKE>*<O3> - PTERMS(:,32,79) = +0.13966*TPK%K079(:)*PCONC(:,19)*PCONC(:,1) + PTERMS(:,33,79) = +0.13966*TPK%K079(:)*PCONC(:,20)*PCONC(:,1) ! !PTERMS(ALKAP,K079) = +0.09815*K079*<ALKE>*<O3> - PTERMS(:,33,79) = +0.09815*TPK%K079(:)*PCONC(:,19)*PCONC(:,1) + PTERMS(:,34,79) = +0.09815*TPK%K079(:)*PCONC(:,20)*PCONC(:,1) ! !PTERMS(CARBOP,K079) = +0.05705*K079*<ALKE>*<O3> - PTERMS(:,39,79) = +0.05705*TPK%K079(:)*PCONC(:,19)*PCONC(:,1) + PTERMS(:,40,79) = +0.05705*TPK%K079(:)*PCONC(:,20)*PCONC(:,1) ! !PTERMS(XO2,K079) = +0.00000*K079*<ALKE>*<O3> - PTERMS(:,41,79) = +0.00000*TPK%K079(:)*PCONC(:,19)*PCONC(:,1) + PTERMS(:,42,79) = +0.00000*TPK%K079(:)*PCONC(:,20)*PCONC(:,1) ! !PTERMS(O3,K080) = -K080*<BIO>*<O3> - PTERMS(:,1,80) = -TPK%K080(:)*PCONC(:,20)*PCONC(:,1) + PTERMS(:,1,80) = -TPK%K080(:)*PCONC(:,21)*PCONC(:,1) ! !PTERMS(H2O2,K080) = +0.00100*K080*<BIO>*<O3> - PTERMS(:,2,80) = +0.00100*TPK%K080(:)*PCONC(:,20)*PCONC(:,1) + PTERMS(:,2,80) = +0.00100*TPK%K080(:)*PCONC(:,21)*PCONC(:,1) ! !PTERMS(CO,K080) = +0.36000*K080*<BIO>*<O3> - PTERMS(:,13,80) = +0.36000*TPK%K080(:)*PCONC(:,20)*PCONC(:,1) + PTERMS(:,14,80) = +0.36000*TPK%K080(:)*PCONC(:,21)*PCONC(:,1) ! !PTERMS(OH,K080) = +0.28000*K080*<BIO>*<O3> - PTERMS(:,14,80) = +0.28000*TPK%K080(:)*PCONC(:,20)*PCONC(:,1) + PTERMS(:,15,80) = +0.28000*TPK%K080(:)*PCONC(:,21)*PCONC(:,1) ! !PTERMS(HO2,K080) = +0.30000*K080*<BIO>*<O3> - PTERMS(:,15,80) = +0.30000*TPK%K080(:)*PCONC(:,20)*PCONC(:,1) + PTERMS(:,16,80) = +0.30000*TPK%K080(:)*PCONC(:,21)*PCONC(:,1) ! !PTERMS(ALKE,K080) = +0.37388*K080*<BIO>*<O3> - PTERMS(:,19,80) = +0.37388*TPK%K080(:)*PCONC(:,20)*PCONC(:,1) + PTERMS(:,20,80) = +0.37388*TPK%K080(:)*PCONC(:,21)*PCONC(:,1) ! !PTERMS(BIO,K080) = -K080*<BIO>*<O3> - PTERMS(:,20,80) = -TPK%K080(:)*PCONC(:,20)*PCONC(:,1) + PTERMS(:,21,80) = -TPK%K080(:)*PCONC(:,21)*PCONC(:,1) ! !PTERMS(HCHO,K080) = +0.90000*K080*<BIO>*<O3> - PTERMS(:,22,80) = +0.90000*TPK%K080(:)*PCONC(:,20)*PCONC(:,1) + PTERMS(:,23,80) = +0.90000*TPK%K080(:)*PCONC(:,21)*PCONC(:,1) ! !PTERMS(ALD,K080) = +0.00000*K080*<BIO>*<O3> - PTERMS(:,23,80) = +0.00000*TPK%K080(:)*PCONC(:,20)*PCONC(:,1) + PTERMS(:,24,80) = +0.00000*TPK%K080(:)*PCONC(:,21)*PCONC(:,1) ! !PTERMS(KET,K080) = +0.00000*K080*<BIO>*<O3> - PTERMS(:,24,80) = +0.00000*TPK%K080(:)*PCONC(:,20)*PCONC(:,1) + PTERMS(:,25,80) = +0.00000*TPK%K080(:)*PCONC(:,21)*PCONC(:,1) ! !PTERMS(CARBO,K080) = +0.39754*K080*<BIO>*<O3> - PTERMS(:,25,80) = +0.39754*TPK%K080(:)*PCONC(:,20)*PCONC(:,1) + PTERMS(:,26,80) = +0.39754*TPK%K080(:)*PCONC(:,21)*PCONC(:,1) ! !PTERMS(ORA1,K080) = +0.15000*K080*<BIO>*<O3> - PTERMS(:,30,80) = +0.15000*TPK%K080(:)*PCONC(:,20)*PCONC(:,1) + PTERMS(:,31,80) = +0.15000*TPK%K080(:)*PCONC(:,21)*PCONC(:,1) ! !PTERMS(ORA2,K080) = +0.00000*K080*<BIO>*<O3> - PTERMS(:,31,80) = +0.00000*TPK%K080(:)*PCONC(:,20)*PCONC(:,1) + PTERMS(:,32,80) = +0.00000*TPK%K080(:)*PCONC(:,21)*PCONC(:,1) ! !PTERMS(MO2,K080) = +0.03000*K080*<BIO>*<O3> - PTERMS(:,32,80) = +0.03000*TPK%K080(:)*PCONC(:,20)*PCONC(:,1) + PTERMS(:,33,80) = +0.03000*TPK%K080(:)*PCONC(:,21)*PCONC(:,1) ! ! RETURN @@ -34222,64 +34862,64 @@ SUBROUTINE SUBT15 !Indices 301 a 320 ! !PTERMS(ALKAP,K080) = +0.00000*K080*<BIO>*<O3> - PTERMS(:,33,80) = +0.00000*TPK%K080(:)*PCONC(:,20)*PCONC(:,1) + PTERMS(:,34,80) = +0.00000*TPK%K080(:)*PCONC(:,21)*PCONC(:,1) ! !PTERMS(CARBOP,K080) = +0.17000*K080*<BIO>*<O3> - PTERMS(:,39,80) = +0.17000*TPK%K080(:)*PCONC(:,20)*PCONC(:,1) + PTERMS(:,40,80) = +0.17000*TPK%K080(:)*PCONC(:,21)*PCONC(:,1) ! !PTERMS(XO2,K080) = +0.13000*K080*<BIO>*<O3> - PTERMS(:,41,80) = +0.13000*TPK%K080(:)*PCONC(:,20)*PCONC(:,1) + PTERMS(:,42,80) = +0.13000*TPK%K080(:)*PCONC(:,21)*PCONC(:,1) ! !PTERMS(O3,K081) = -K081*<CARBO>*<O3> - PTERMS(:,1,81) = -TPK%K081(:)*PCONC(:,25)*PCONC(:,1) + PTERMS(:,1,81) = -TPK%K081(:)*PCONC(:,26)*PCONC(:,1) ! !PTERMS(CO,K081) = +0.64728*K081*<CARBO>*<O3> - PTERMS(:,13,81) = +0.64728*TPK%K081(:)*PCONC(:,25)*PCONC(:,1) + PTERMS(:,14,81) = +0.64728*TPK%K081(:)*PCONC(:,26)*PCONC(:,1) ! !PTERMS(OH,K081) = +0.20595*K081*<CARBO>*<O3> - PTERMS(:,14,81) = +0.20595*TPK%K081(:)*PCONC(:,25)*PCONC(:,1) + PTERMS(:,15,81) = +0.20595*TPK%K081(:)*PCONC(:,26)*PCONC(:,1) ! !PTERMS(HO2,K081) = +0.28441*K081*<CARBO>*<O3> - PTERMS(:,15,81) = +0.28441*TPK%K081(:)*PCONC(:,25)*PCONC(:,1) + PTERMS(:,16,81) = +0.28441*TPK%K081(:)*PCONC(:,26)*PCONC(:,1) ! !PTERMS(HCHO,K081) = +0.00000*K081*<CARBO>*<O3> - PTERMS(:,22,81) = +0.00000*TPK%K081(:)*PCONC(:,25)*PCONC(:,1) + PTERMS(:,23,81) = +0.00000*TPK%K081(:)*PCONC(:,26)*PCONC(:,1) ! !PTERMS(ALD,K081) = +0.15692*K081*<CARBO>*<O3> - PTERMS(:,23,81) = +0.15692*TPK%K081(:)*PCONC(:,25)*PCONC(:,1) + PTERMS(:,24,81) = +0.15692*TPK%K081(:)*PCONC(:,26)*PCONC(:,1) ! !PTERMS(CARBO,K081) = -K081*<CARBO>*<O3> - PTERMS(:,25,81) = -TPK%K081(:)*PCONC(:,25)*PCONC(:,1) + PTERMS(:,26,81) = -TPK%K081(:)*PCONC(:,26)*PCONC(:,1) ! !PTERMS(OP2,K081) = +0.10149*K081*<CARBO>*<O3> - PTERMS(:,29,81) = +0.10149*TPK%K081(:)*PCONC(:,25)*PCONC(:,1) + PTERMS(:,30,81) = +0.10149*TPK%K081(:)*PCONC(:,26)*PCONC(:,1) ! !PTERMS(ORA1,K081) = +0.10788*K081*<CARBO>*<O3> - PTERMS(:,30,81) = +0.10788*TPK%K081(:)*PCONC(:,25)*PCONC(:,1) + PTERMS(:,31,81) = +0.10788*TPK%K081(:)*PCONC(:,26)*PCONC(:,1) ! !PTERMS(ORA2,K081) = +0.20595*K081*<CARBO>*<O3> - PTERMS(:,31,81) = +0.20595*TPK%K081(:)*PCONC(:,25)*PCONC(:,1) + PTERMS(:,32,81) = +0.20595*TPK%K081(:)*PCONC(:,26)*PCONC(:,1) ! !PTERMS(CARBOP,K081) = +0.27460*K081*<CARBO>*<O3> - PTERMS(:,39,81) = +0.27460*TPK%K081(:)*PCONC(:,25)*PCONC(:,1) + PTERMS(:,40,81) = +0.27460*TPK%K081(:)*PCONC(:,26)*PCONC(:,1) ! !PTERMS(O3,K082) = -K082*<PAN>*<O3> - PTERMS(:,1,82) = -TPK%K082(:)*PCONC(:,27)*PCONC(:,1) + PTERMS(:,1,82) = -TPK%K082(:)*PCONC(:,28)*PCONC(:,1) ! !PTERMS(NO2,K082) = +0.70*K082*<PAN>*<O3> - PTERMS(:,4,82) = +0.70*TPK%K082(:)*PCONC(:,27)*PCONC(:,1) + PTERMS(:,4,82) = +0.70*TPK%K082(:)*PCONC(:,28)*PCONC(:,1) ! !PTERMS(CO,K082) = +0.13*K082*<PAN>*<O3> - PTERMS(:,13,82) = +0.13*TPK%K082(:)*PCONC(:,27)*PCONC(:,1) + PTERMS(:,14,82) = +0.13*TPK%K082(:)*PCONC(:,28)*PCONC(:,1) ! !PTERMS(OH,K082) = +0.036*K082*<PAN>*<O3> - PTERMS(:,14,82) = +0.036*TPK%K082(:)*PCONC(:,27)*PCONC(:,1) + PTERMS(:,15,82) = +0.036*TPK%K082(:)*PCONC(:,28)*PCONC(:,1) ! !PTERMS(HO2,K082) = +0.08*K082*<PAN>*<O3> - PTERMS(:,15,82) = +0.08*TPK%K082(:)*PCONC(:,27)*PCONC(:,1) + PTERMS(:,16,82) = +0.08*TPK%K082(:)*PCONC(:,28)*PCONC(:,1) ! !PTERMS(HCHO,K082) = +0.70*K082*<PAN>*<O3> - PTERMS(:,22,82) = +0.70*TPK%K082(:)*PCONC(:,27)*PCONC(:,1) + PTERMS(:,23,82) = +0.70*TPK%K082(:)*PCONC(:,28)*PCONC(:,1) ! ! RETURN @@ -34290,64 +34930,64 @@ SUBROUTINE SUBT16 !Indices 321 a 340 ! !PTERMS(PAN,K082) = -K082*<PAN>*<O3> - PTERMS(:,27,82) = -TPK%K082(:)*PCONC(:,27)*PCONC(:,1) + PTERMS(:,28,82) = -TPK%K082(:)*PCONC(:,28)*PCONC(:,1) ! !PTERMS(ORA1,K082) = +0.11*K082*<PAN>*<O3> - PTERMS(:,30,82) = +0.11*TPK%K082(:)*PCONC(:,27)*PCONC(:,1) + PTERMS(:,31,82) = +0.11*TPK%K082(:)*PCONC(:,28)*PCONC(:,1) ! !PTERMS(CARBOP,K082) = +0.70000*K082*<PAN>*<O3> - PTERMS(:,39,82) = +0.70000*TPK%K082(:)*PCONC(:,27)*PCONC(:,1) + PTERMS(:,40,82) = +0.70000*TPK%K082(:)*PCONC(:,28)*PCONC(:,1) ! !PTERMS(NO2,K083) = -K083*<PHO>*<NO2> - PTERMS(:,4,83) = -TPK%K083(:)*PCONC(:,36)*PCONC(:,4) + PTERMS(:,4,83) = -TPK%K083(:)*PCONC(:,37)*PCONC(:,4) ! !PTERMS(ARO,K083) = +0.10670*K083*<PHO>*<NO2> - PTERMS(:,21,83) = +0.10670*TPK%K083(:)*PCONC(:,36)*PCONC(:,4) + PTERMS(:,22,83) = +0.10670*TPK%K083(:)*PCONC(:,37)*PCONC(:,4) ! !PTERMS(ONIT,K083) = +K083*<PHO>*<NO2> - PTERMS(:,26,83) = +TPK%K083(:)*PCONC(:,36)*PCONC(:,4) + PTERMS(:,27,83) = +TPK%K083(:)*PCONC(:,37)*PCONC(:,4) ! !PTERMS(PHO,K083) = -K083*<PHO>*<NO2> - PTERMS(:,36,83) = -TPK%K083(:)*PCONC(:,36)*PCONC(:,4) + PTERMS(:,37,83) = -TPK%K083(:)*PCONC(:,37)*PCONC(:,4) ! !PTERMS(HO2,K084) = -K084*<PHO>*<HO2> - PTERMS(:,15,84) = -TPK%K084(:)*PCONC(:,36)*PCONC(:,15) + PTERMS(:,16,84) = -TPK%K084(:)*PCONC(:,37)*PCONC(:,16) ! !PTERMS(ARO,K084) = +1.06698*K084*<PHO>*<HO2> - PTERMS(:,21,84) = +1.06698*TPK%K084(:)*PCONC(:,36)*PCONC(:,15) + PTERMS(:,22,84) = +1.06698*TPK%K084(:)*PCONC(:,37)*PCONC(:,16) ! !PTERMS(PHO,K084) = -K084*<PHO>*<HO2> - PTERMS(:,36,84) = -TPK%K084(:)*PCONC(:,36)*PCONC(:,15) + PTERMS(:,37,84) = -TPK%K084(:)*PCONC(:,37)*PCONC(:,16) ! !PTERMS(NO2,K085) = -K085*<ADD>*<NO2> - PTERMS(:,4,85) = -TPK%K085(:)*PCONC(:,37)*PCONC(:,4) + PTERMS(:,4,85) = -TPK%K085(:)*PCONC(:,38)*PCONC(:,4) ! !PTERMS(HONO,K085) = +K085*<ADD>*<NO2> - PTERMS(:,7,85) = +TPK%K085(:)*PCONC(:,37)*PCONC(:,4) + PTERMS(:,7,85) = +TPK%K085(:)*PCONC(:,38)*PCONC(:,4) ! !PTERMS(ARO,K085) = +K085*<ADD>*<NO2> - PTERMS(:,21,85) = +TPK%K085(:)*PCONC(:,37)*PCONC(:,4) + PTERMS(:,22,85) = +TPK%K085(:)*PCONC(:,38)*PCONC(:,4) ! !PTERMS(ADD,K085) = -K085*<ADD>*<NO2> - PTERMS(:,37,85) = -TPK%K085(:)*PCONC(:,37)*PCONC(:,4) + PTERMS(:,38,85) = -TPK%K085(:)*PCONC(:,38)*PCONC(:,4) ! !PTERMS(HO2,K086) = +0.02*K086*<ADD>*<O2> - PTERMS(:,15,86) = +0.02*TPK%K086(:)*PCONC(:,37)*TPK%O2(:) + PTERMS(:,16,86) = +0.02*TPK%K086(:)*PCONC(:,38)*TPK%O2(:) ! !PTERMS(ARO,K086) = +0.02*K086*<ADD>*<O2> - PTERMS(:,21,86) = +0.02*TPK%K086(:)*PCONC(:,37)*TPK%O2(:) + PTERMS(:,22,86) = +0.02*TPK%K086(:)*PCONC(:,38)*TPK%O2(:) ! !PTERMS(ADD,K086) = -K086*<ADD>*<O2> - PTERMS(:,37,86) = -TPK%K086(:)*PCONC(:,37)*TPK%O2(:) + PTERMS(:,38,86) = -TPK%K086(:)*PCONC(:,38)*TPK%O2(:) ! !PTERMS(AROP,K086) = +0.98*K086*<ADD>*<O2> - PTERMS(:,38,86) = +0.98*TPK%K086(:)*PCONC(:,37)*TPK%O2(:) + PTERMS(:,39,86) = +0.98*TPK%K086(:)*PCONC(:,38)*TPK%O2(:) ! !PTERMS(O3,K087) = -K087*<ADD>*<O3> - PTERMS(:,1,87) = -TPK%K087(:)*PCONC(:,37)*PCONC(:,1) + PTERMS(:,1,87) = -TPK%K087(:)*PCONC(:,38)*PCONC(:,1) ! !PTERMS(OH,K087) = +K087*<ADD>*<O3> - PTERMS(:,14,87) = +TPK%K087(:)*PCONC(:,37)*PCONC(:,1) + PTERMS(:,15,87) = +TPK%K087(:)*PCONC(:,38)*PCONC(:,1) ! ! RETURN @@ -34358,64 +34998,64 @@ SUBROUTINE SUBT17 !Indices 341 a 360 ! !PTERMS(ARO,K087) = +K087*<ADD>*<O3> - PTERMS(:,21,87) = +TPK%K087(:)*PCONC(:,37)*PCONC(:,1) + PTERMS(:,22,87) = +TPK%K087(:)*PCONC(:,38)*PCONC(:,1) ! !PTERMS(ADD,K087) = -K087*<ADD>*<O3> - PTERMS(:,37,87) = -TPK%K087(:)*PCONC(:,37)*PCONC(:,1) + PTERMS(:,38,87) = -TPK%K087(:)*PCONC(:,38)*PCONC(:,1) ! !PTERMS(NO2,K088) = -K088*<CARBOP>*<NO2> - PTERMS(:,4,88) = -TPK%K088(:)*PCONC(:,39)*PCONC(:,4) + PTERMS(:,4,88) = -TPK%K088(:)*PCONC(:,40)*PCONC(:,4) ! !PTERMS(PAN,K088) = +1.00000*K088*<CARBOP>*<NO2> - PTERMS(:,27,88) = +1.00000*TPK%K088(:)*PCONC(:,39)*PCONC(:,4) + PTERMS(:,28,88) = +1.00000*TPK%K088(:)*PCONC(:,40)*PCONC(:,4) ! !PTERMS(CARBOP,K088) = -K088*<CARBOP>*<NO2> - PTERMS(:,39,88) = -TPK%K088(:)*PCONC(:,39)*PCONC(:,4) + PTERMS(:,40,88) = -TPK%K088(:)*PCONC(:,40)*PCONC(:,4) ! !PTERMS(NO2,K089) = +K089*<PAN> - PTERMS(:,4,89) = +TPK%K089(:)*PCONC(:,27) + PTERMS(:,4,89) = +TPK%K089(:)*PCONC(:,28) ! !PTERMS(PAN,K089) = -K089*<PAN> - PTERMS(:,27,89) = -TPK%K089(:)*PCONC(:,27) + PTERMS(:,28,89) = -TPK%K089(:)*PCONC(:,28) ! !PTERMS(CARBOP,K089) = +1.00000*K089*<PAN> - PTERMS(:,39,89) = +1.00000*TPK%K089(:)*PCONC(:,27) + PTERMS(:,40,89) = +1.00000*TPK%K089(:)*PCONC(:,28) ! !PTERMS(NO,K090) = -K090*<MO2>*<NO> - PTERMS(:,3,90) = -TPK%K090(:)*PCONC(:,32)*PCONC(:,3) + PTERMS(:,3,90) = -TPK%K090(:)*PCONC(:,33)*PCONC(:,3) ! !PTERMS(NO2,K090) = +K090*<MO2>*<NO> - PTERMS(:,4,90) = +TPK%K090(:)*PCONC(:,32)*PCONC(:,3) + PTERMS(:,4,90) = +TPK%K090(:)*PCONC(:,33)*PCONC(:,3) ! !PTERMS(HO2,K090) = +K090*<MO2>*<NO> - PTERMS(:,15,90) = +TPK%K090(:)*PCONC(:,32)*PCONC(:,3) + PTERMS(:,16,90) = +TPK%K090(:)*PCONC(:,33)*PCONC(:,3) ! !PTERMS(HCHO,K090) = +K090*<MO2>*<NO> - PTERMS(:,22,90) = +TPK%K090(:)*PCONC(:,32)*PCONC(:,3) + PTERMS(:,23,90) = +TPK%K090(:)*PCONC(:,33)*PCONC(:,3) ! !PTERMS(MO2,K090) = -K090*<MO2>*<NO> - PTERMS(:,32,90) = -TPK%K090(:)*PCONC(:,32)*PCONC(:,3) + PTERMS(:,33,90) = -TPK%K090(:)*PCONC(:,33)*PCONC(:,3) ! !PTERMS(NO,K091) = -K091*<ALKAP>*<NO> - PTERMS(:,3,91) = -TPK%K091(:)*PCONC(:,33)*PCONC(:,3) + PTERMS(:,3,91) = -TPK%K091(:)*PCONC(:,34)*PCONC(:,3) ! !PTERMS(NO2,K091) = +0.91541*K091*<ALKAP>*<NO> - PTERMS(:,4,91) = +0.91541*TPK%K091(:)*PCONC(:,33)*PCONC(:,3) + PTERMS(:,4,91) = +0.91541*TPK%K091(:)*PCONC(:,34)*PCONC(:,3) ! !PTERMS(HO2,K091) = +0.74265*K091*<ALKAP>*<NO> - PTERMS(:,15,91) = +0.74265*TPK%K091(:)*PCONC(:,33)*PCONC(:,3) + PTERMS(:,16,91) = +0.74265*TPK%K091(:)*PCONC(:,34)*PCONC(:,3) ! !PTERMS(HCHO,K091) = +0.03002*K091*<ALKAP>*<NO> - PTERMS(:,22,91) = +0.03002*TPK%K091(:)*PCONC(:,33)*PCONC(:,3) + PTERMS(:,23,91) = +0.03002*TPK%K091(:)*PCONC(:,34)*PCONC(:,3) ! !PTERMS(ALD,K091) = +0.33144*K091*<ALKAP>*<NO> - PTERMS(:,23,91) = +0.33144*TPK%K091(:)*PCONC(:,33)*PCONC(:,3) + PTERMS(:,24,91) = +0.33144*TPK%K091(:)*PCONC(:,34)*PCONC(:,3) ! !PTERMS(KET,K091) = +0.54531*K091*<ALKAP>*<NO> - PTERMS(:,24,91) = +0.54531*TPK%K091(:)*PCONC(:,33)*PCONC(:,3) + PTERMS(:,25,91) = +0.54531*TPK%K091(:)*PCONC(:,34)*PCONC(:,3) ! !PTERMS(CARBO,K091) = +0.03407*K091*<ALKAP>*<NO> - PTERMS(:,25,91) = +0.03407*TPK%K091(:)*PCONC(:,33)*PCONC(:,3) + PTERMS(:,26,91) = +0.03407*TPK%K091(:)*PCONC(:,34)*PCONC(:,3) ! ! RETURN @@ -34426,64 +35066,64 @@ SUBROUTINE SUBT18 !Indices 361 a 380 ! !PTERMS(ONIT,K091) = +0.08459*K091*<ALKAP>*<NO> - PTERMS(:,26,91) = +0.08459*TPK%K091(:)*PCONC(:,33)*PCONC(:,3) + PTERMS(:,27,91) = +0.08459*TPK%K091(:)*PCONC(:,34)*PCONC(:,3) ! !PTERMS(MO2,K091) = +0.09016*K091*<ALKAP>*<NO> - PTERMS(:,32,91) = +0.09016*TPK%K091(:)*PCONC(:,33)*PCONC(:,3) + PTERMS(:,33,91) = +0.09016*TPK%K091(:)*PCONC(:,34)*PCONC(:,3) ! !PTERMS(ALKAP,K091) = -K091*<ALKAP>*<NO> - PTERMS(:,33,91) = -TPK%K091(:)*PCONC(:,33)*PCONC(:,3) + PTERMS(:,34,91) = -TPK%K091(:)*PCONC(:,34)*PCONC(:,3) ! !PTERMS(XO2,K091) = +0.13007*K091*<ALKAP>*<NO> - PTERMS(:,41,91) = +0.13007*TPK%K091(:)*PCONC(:,33)*PCONC(:,3) + PTERMS(:,42,91) = +0.13007*TPK%K091(:)*PCONC(:,34)*PCONC(:,3) ! !PTERMS(NO,K092) = -K092*<ALKEP>*<NO> - PTERMS(:,3,92) = -TPK%K092(:)*PCONC(:,34)*PCONC(:,3) + PTERMS(:,3,92) = -TPK%K092(:)*PCONC(:,35)*PCONC(:,3) ! !PTERMS(NO2,K092) = +K092*<ALKEP>*<NO> - PTERMS(:,4,92) = +TPK%K092(:)*PCONC(:,34)*PCONC(:,3) + PTERMS(:,4,92) = +TPK%K092(:)*PCONC(:,35)*PCONC(:,3) ! !PTERMS(HO2,K092) = +K092*<ALKEP>*<NO> - PTERMS(:,15,92) = +TPK%K092(:)*PCONC(:,34)*PCONC(:,3) + PTERMS(:,16,92) = +TPK%K092(:)*PCONC(:,35)*PCONC(:,3) ! !PTERMS(HCHO,K092) = +1.39870*K092*<ALKEP>*<NO> - PTERMS(:,22,92) = +1.39870*TPK%K092(:)*PCONC(:,34)*PCONC(:,3) + PTERMS(:,23,92) = +1.39870*TPK%K092(:)*PCONC(:,35)*PCONC(:,3) ! !PTERMS(ALD,K092) = +0.42125*K092*<ALKEP>*<NO> - PTERMS(:,23,92) = +0.42125*TPK%K092(:)*PCONC(:,34)*PCONC(:,3) + PTERMS(:,24,92) = +0.42125*TPK%K092(:)*PCONC(:,35)*PCONC(:,3) ! !PTERMS(KET,K092) = +0.05220*K092*<ALKEP>*<NO> - PTERMS(:,24,92) = +0.05220*TPK%K092(:)*PCONC(:,34)*PCONC(:,3) + PTERMS(:,25,92) = +0.05220*TPK%K092(:)*PCONC(:,35)*PCONC(:,3) ! !PTERMS(ALKEP,K092) = -K092*<ALKEP>*<NO> - PTERMS(:,34,92) = -TPK%K092(:)*PCONC(:,34)*PCONC(:,3) + PTERMS(:,35,92) = -TPK%K092(:)*PCONC(:,35)*PCONC(:,3) ! !PTERMS(NO,K093) = -K093*<BIOP>*<NO> - PTERMS(:,3,93) = -TPK%K093(:)*PCONC(:,35)*PCONC(:,3) + PTERMS(:,3,93) = -TPK%K093(:)*PCONC(:,36)*PCONC(:,3) ! !PTERMS(NO2,K093) = +0.84700*K093*<BIOP>*<NO> - PTERMS(:,4,93) = +0.84700*TPK%K093(:)*PCONC(:,35)*PCONC(:,3) + PTERMS(:,4,93) = +0.84700*TPK%K093(:)*PCONC(:,36)*PCONC(:,3) ! !PTERMS(HO2,K093) = +0.84700*K093*<BIOP>*<NO> - PTERMS(:,15,93) = +0.84700*TPK%K093(:)*PCONC(:,35)*PCONC(:,3) + PTERMS(:,16,93) = +0.84700*TPK%K093(:)*PCONC(:,36)*PCONC(:,3) ! !PTERMS(ALKE,K093) = +0.37815*K093*<BIOP>*<NO> - PTERMS(:,19,93) = +0.37815*TPK%K093(:)*PCONC(:,35)*PCONC(:,3) + PTERMS(:,20,93) = +0.37815*TPK%K093(:)*PCONC(:,36)*PCONC(:,3) ! !PTERMS(HCHO,K093) = +0.60600*K093*<BIOP>*<NO> - PTERMS(:,22,93) = +0.60600*TPK%K093(:)*PCONC(:,35)*PCONC(:,3) + PTERMS(:,23,93) = +0.60600*TPK%K093(:)*PCONC(:,36)*PCONC(:,3) ! !PTERMS(ALD,K093) = +0.00000*K093*<BIOP>*<NO> - PTERMS(:,23,93) = +0.00000*TPK%K093(:)*PCONC(:,35)*PCONC(:,3) + PTERMS(:,24,93) = +0.00000*TPK%K093(:)*PCONC(:,36)*PCONC(:,3) ! !PTERMS(KET,K093) = +0.00000*K093*<BIOP>*<NO> - PTERMS(:,24,93) = +0.00000*TPK%K093(:)*PCONC(:,35)*PCONC(:,3) + PTERMS(:,25,93) = +0.00000*TPK%K093(:)*PCONC(:,36)*PCONC(:,3) ! !PTERMS(CARBO,K093) = +0.45463*K093*<BIOP>*<NO> - PTERMS(:,25,93) = +0.45463*TPK%K093(:)*PCONC(:,35)*PCONC(:,3) + PTERMS(:,26,93) = +0.45463*TPK%K093(:)*PCONC(:,36)*PCONC(:,3) ! !PTERMS(ONIT,K093) = +0.15300*K093*<BIOP>*<NO> - PTERMS(:,26,93) = +0.15300*TPK%K093(:)*PCONC(:,35)*PCONC(:,3) + PTERMS(:,27,93) = +0.15300*TPK%K093(:)*PCONC(:,36)*PCONC(:,3) ! ! RETURN @@ -34494,64 +35134,64 @@ SUBROUTINE SUBT19 !Indices 381 a 400 ! !PTERMS(BIOP,K093) = -K093*<BIOP>*<NO> - PTERMS(:,35,93) = -TPK%K093(:)*PCONC(:,35)*PCONC(:,3) + PTERMS(:,36,93) = -TPK%K093(:)*PCONC(:,36)*PCONC(:,3) ! !PTERMS(NO,K094) = -K094*<AROP>*<NO> - PTERMS(:,3,94) = -TPK%K094(:)*PCONC(:,38)*PCONC(:,3) + PTERMS(:,3,94) = -TPK%K094(:)*PCONC(:,39)*PCONC(:,3) ! !PTERMS(NO2,K094) = +0.95115*K094*<AROP>*<NO> - PTERMS(:,4,94) = +0.95115*TPK%K094(:)*PCONC(:,38)*PCONC(:,3) + PTERMS(:,4,94) = +0.95115*TPK%K094(:)*PCONC(:,39)*PCONC(:,3) ! !PTERMS(HO2,K094) = +0.95115*K094*<AROP>*<NO> - PTERMS(:,15,94) = +0.95115*TPK%K094(:)*PCONC(:,38)*PCONC(:,3) + PTERMS(:,16,94) = +0.95115*TPK%K094(:)*PCONC(:,39)*PCONC(:,3) ! !PTERMS(CARBO,K094) = +2.06993*K094*<AROP>*<NO> - PTERMS(:,25,94) = +2.06993*TPK%K094(:)*PCONC(:,38)*PCONC(:,3) + PTERMS(:,26,94) = +2.06993*TPK%K094(:)*PCONC(:,39)*PCONC(:,3) ! !PTERMS(ONIT,K094) = +0.04885*K094*<AROP>*<NO> - PTERMS(:,26,94) = +0.04885*TPK%K094(:)*PCONC(:,38)*PCONC(:,3) + PTERMS(:,27,94) = +0.04885*TPK%K094(:)*PCONC(:,39)*PCONC(:,3) ! !PTERMS(AROP,K094) = -K094*<AROP>*<NO> - PTERMS(:,38,94) = -TPK%K094(:)*PCONC(:,38)*PCONC(:,3) + PTERMS(:,39,94) = -TPK%K094(:)*PCONC(:,39)*PCONC(:,3) ! !PTERMS(NO,K095) = -K095*<CARBOP>*<NO> - PTERMS(:,3,95) = -TPK%K095(:)*PCONC(:,39)*PCONC(:,3) + PTERMS(:,3,95) = -TPK%K095(:)*PCONC(:,40)*PCONC(:,3) ! !PTERMS(NO2,K095) = +K095*<CARBOP>*<NO> - PTERMS(:,4,95) = +TPK%K095(:)*PCONC(:,39)*PCONC(:,3) + PTERMS(:,4,95) = +TPK%K095(:)*PCONC(:,40)*PCONC(:,3) ! !PTERMS(HO2,K095) = +0.12334*K095*<CARBOP>*<NO> - PTERMS(:,15,95) = +0.12334*TPK%K095(:)*PCONC(:,39)*PCONC(:,3) + PTERMS(:,16,95) = +0.12334*TPK%K095(:)*PCONC(:,40)*PCONC(:,3) ! !PTERMS(HCHO,K095) = +0.05848*K095*<CARBOP>*<NO> - PTERMS(:,22,95) = +0.05848*TPK%K095(:)*PCONC(:,39)*PCONC(:,3) + PTERMS(:,23,95) = +0.05848*TPK%K095(:)*PCONC(:,40)*PCONC(:,3) ! !PTERMS(ALD,K095) = +0.07368*K095*<CARBOP>*<NO> - PTERMS(:,23,95) = +0.07368*TPK%K095(:)*PCONC(:,39)*PCONC(:,3) + PTERMS(:,24,95) = +0.07368*TPK%K095(:)*PCONC(:,40)*PCONC(:,3) ! !PTERMS(CARBO,K095) = +0.08670*K095*<CARBOP>*<NO> - PTERMS(:,25,95) = +0.08670*TPK%K095(:)*PCONC(:,39)*PCONC(:,3) + PTERMS(:,26,95) = +0.08670*TPK%K095(:)*PCONC(:,40)*PCONC(:,3) ! !PTERMS(MO2,K095) = +0.78134*K095*<CARBOP>*<NO> - PTERMS(:,32,95) = +0.78134*TPK%K095(:)*PCONC(:,39)*PCONC(:,3) + PTERMS(:,33,95) = +0.78134*TPK%K095(:)*PCONC(:,40)*PCONC(:,3) ! !PTERMS(CARBOP,K095) = -K095*<CARBOP>*<NO> - PTERMS(:,39,95) = -TPK%K095(:)*PCONC(:,39)*PCONC(:,3) + PTERMS(:,40,95) = -TPK%K095(:)*PCONC(:,40)*PCONC(:,3) ! !PTERMS(XO2,K095) = +0.02563*K095*<CARBOP>*<NO> - PTERMS(:,41,95) = +0.02563*TPK%K095(:)*PCONC(:,39)*PCONC(:,3) + PTERMS(:,42,95) = +0.02563*TPK%K095(:)*PCONC(:,40)*PCONC(:,3) ! !PTERMS(NO,K096) = -K096*<OLN>*<NO> - PTERMS(:,3,96) = -TPK%K096(:)*PCONC(:,40)*PCONC(:,3) + PTERMS(:,3,96) = -TPK%K096(:)*PCONC(:,41)*PCONC(:,3) ! !PTERMS(NO2,K096) = +1.81599*K096*<OLN>*<NO> - PTERMS(:,4,96) = +1.81599*TPK%K096(:)*PCONC(:,40)*PCONC(:,3) + PTERMS(:,4,96) = +1.81599*TPK%K096(:)*PCONC(:,41)*PCONC(:,3) ! !PTERMS(HO2,K096) = +0.18401*K096*<OLN>*<NO> - PTERMS(:,15,96) = +0.18401*TPK%K096(:)*PCONC(:,40)*PCONC(:,3) + PTERMS(:,16,96) = +0.18401*TPK%K096(:)*PCONC(:,41)*PCONC(:,3) ! !PTERMS(HCHO,K096) = +0.23419*K096*<OLN>*<NO> - PTERMS(:,22,96) = +0.23419*TPK%K096(:)*PCONC(:,40)*PCONC(:,3) + PTERMS(:,23,96) = +0.23419*TPK%K096(:)*PCONC(:,41)*PCONC(:,3) ! ! RETURN @@ -34562,64 +35202,64 @@ SUBROUTINE SUBT20 !Indices 401 a 420 ! !PTERMS(ALD,K096) = +1.01182*K096*<OLN>*<NO> - PTERMS(:,23,96) = +1.01182*TPK%K096(:)*PCONC(:,40)*PCONC(:,3) + PTERMS(:,24,96) = +1.01182*TPK%K096(:)*PCONC(:,41)*PCONC(:,3) ! !PTERMS(KET,K096) = +0.37862*K096*<OLN>*<NO> - PTERMS(:,24,96) = +0.37862*TPK%K096(:)*PCONC(:,40)*PCONC(:,3) + PTERMS(:,25,96) = +0.37862*TPK%K096(:)*PCONC(:,41)*PCONC(:,3) ! !PTERMS(ONIT,K096) = +0.18401*K096*<OLN>*<NO> - PTERMS(:,26,96) = +0.18401*TPK%K096(:)*PCONC(:,40)*PCONC(:,3) + PTERMS(:,27,96) = +0.18401*TPK%K096(:)*PCONC(:,41)*PCONC(:,3) ! !PTERMS(OLN,K096) = -K096*<OLN>*<NO> - PTERMS(:,40,96) = -TPK%K096(:)*PCONC(:,40)*PCONC(:,3) + PTERMS(:,41,96) = -TPK%K096(:)*PCONC(:,41)*PCONC(:,3) ! !PTERMS(HO2,K097) = -K097*<MO2>*<HO2> - PTERMS(:,15,97) = -TPK%K097(:)*PCONC(:,32)*PCONC(:,15) + PTERMS(:,16,97) = -TPK%K097(:)*PCONC(:,33)*PCONC(:,16) ! !PTERMS(OP1,K097) = +K097*<MO2>*<HO2> - PTERMS(:,28,97) = +TPK%K097(:)*PCONC(:,32)*PCONC(:,15) + PTERMS(:,29,97) = +TPK%K097(:)*PCONC(:,33)*PCONC(:,16) ! !PTERMS(MO2,K097) = -K097*<MO2>*<HO2> - PTERMS(:,32,97) = -TPK%K097(:)*PCONC(:,32)*PCONC(:,15) + PTERMS(:,33,97) = -TPK%K097(:)*PCONC(:,33)*PCONC(:,16) ! !PTERMS(HO2,K098) = -K098*<ALKAP>*<HO2> - PTERMS(:,15,98) = -TPK%K098(:)*PCONC(:,33)*PCONC(:,15) + PTERMS(:,16,98) = -TPK%K098(:)*PCONC(:,34)*PCONC(:,16) ! !PTERMS(OP2,K098) = +1.00524*K098*<ALKAP>*<HO2> - PTERMS(:,29,98) = +1.00524*TPK%K098(:)*PCONC(:,33)*PCONC(:,15) + PTERMS(:,30,98) = +1.00524*TPK%K098(:)*PCONC(:,34)*PCONC(:,16) ! !PTERMS(ALKAP,K098) = -K098*<ALKAP>*<HO2> - PTERMS(:,33,98) = -TPK%K098(:)*PCONC(:,33)*PCONC(:,15) + PTERMS(:,34,98) = -TPK%K098(:)*PCONC(:,34)*PCONC(:,16) ! !PTERMS(HO2,K099) = -K099*<ALKEP>*<HO2> - PTERMS(:,15,99) = -TPK%K099(:)*PCONC(:,34)*PCONC(:,15) + PTERMS(:,16,99) = -TPK%K099(:)*PCONC(:,35)*PCONC(:,16) ! !PTERMS(OP2,K099) = +1.00524*K099*<ALKEP>*<HO2> - PTERMS(:,29,99) = +1.00524*TPK%K099(:)*PCONC(:,34)*PCONC(:,15) + PTERMS(:,30,99) = +1.00524*TPK%K099(:)*PCONC(:,35)*PCONC(:,16) ! !PTERMS(ALKEP,K099) = -K099*<ALKEP>*<HO2> - PTERMS(:,34,99) = -TPK%K099(:)*PCONC(:,34)*PCONC(:,15) + PTERMS(:,35,99) = -TPK%K099(:)*PCONC(:,35)*PCONC(:,16) ! !PTERMS(HO2,K0100) = -K0100*<BIOP>*<HO2> - PTERMS(:,15,100) = -TPK%K0100(:)*PCONC(:,35)*PCONC(:,15) + PTERMS(:,16,100) = -TPK%K0100(:)*PCONC(:,36)*PCONC(:,16) ! !PTERMS(OP2,K0100) = +1.00524*K0100*<BIOP>*<HO2> - PTERMS(:,29,100) = +1.00524*TPK%K0100(:)*PCONC(:,35)*PCONC(:,15) + PTERMS(:,30,100) = +1.00524*TPK%K0100(:)*PCONC(:,36)*PCONC(:,16) ! !PTERMS(BIOP,K0100) = -K0100*<BIOP>*<HO2> - PTERMS(:,35,100) = -TPK%K0100(:)*PCONC(:,35)*PCONC(:,15) + PTERMS(:,36,100) = -TPK%K0100(:)*PCONC(:,36)*PCONC(:,16) ! !PTERMS(HO2,K0101) = -K0101*<AROP>*<HO2> - PTERMS(:,15,101) = -TPK%K0101(:)*PCONC(:,38)*PCONC(:,15) + PTERMS(:,16,101) = -TPK%K0101(:)*PCONC(:,39)*PCONC(:,16) ! !PTERMS(OP2,K0101) = +1.00524*K0101*<AROP>*<HO2> - PTERMS(:,29,101) = +1.00524*TPK%K0101(:)*PCONC(:,38)*PCONC(:,15) + PTERMS(:,30,101) = +1.00524*TPK%K0101(:)*PCONC(:,39)*PCONC(:,16) ! !PTERMS(AROP,K0101) = -K0101*<AROP>*<HO2> - PTERMS(:,38,101) = -TPK%K0101(:)*PCONC(:,38)*PCONC(:,15) + PTERMS(:,39,101) = -TPK%K0101(:)*PCONC(:,39)*PCONC(:,16) ! !PTERMS(O3,K0102) = +0.17307*K0102*<CARBOP>*<HO2> - PTERMS(:,1,102) = +0.17307*TPK%K0102(:)*PCONC(:,39)*PCONC(:,15) + PTERMS(:,1,102) = +0.17307*TPK%K0102(:)*PCONC(:,40)*PCONC(:,16) ! ! RETURN @@ -34630,64 +35270,64 @@ SUBROUTINE SUBT21 !Indices 421 a 440 ! !PTERMS(HO2,K0102) = -K0102*<CARBOP>*<HO2> - PTERMS(:,15,102) = -TPK%K0102(:)*PCONC(:,39)*PCONC(:,15) + PTERMS(:,16,102) = -TPK%K0102(:)*PCONC(:,40)*PCONC(:,16) ! !PTERMS(OP2,K0102) = +0.80904*K0102*<CARBOP>*<HO2> - PTERMS(:,29,102) = +0.80904*TPK%K0102(:)*PCONC(:,39)*PCONC(:,15) + PTERMS(:,30,102) = +0.80904*TPK%K0102(:)*PCONC(:,40)*PCONC(:,16) ! !PTERMS(ORA2,K0102) = +0.17307*K0102*<CARBOP>*<HO2> - PTERMS(:,31,102) = +0.17307*TPK%K0102(:)*PCONC(:,39)*PCONC(:,15) + PTERMS(:,32,102) = +0.17307*TPK%K0102(:)*PCONC(:,40)*PCONC(:,16) ! !PTERMS(CARBOP,K0102) = -K0102*<CARBOP>*<HO2> - PTERMS(:,39,102) = -TPK%K0102(:)*PCONC(:,39)*PCONC(:,15) + PTERMS(:,40,102) = -TPK%K0102(:)*PCONC(:,40)*PCONC(:,16) ! !PTERMS(HO2,K103) = -K103*<OLN>*<HO2> - PTERMS(:,15,103) = -TPK%K103(:)*PCONC(:,40)*PCONC(:,15) + PTERMS(:,16,103) = -TPK%K103(:)*PCONC(:,41)*PCONC(:,16) ! !PTERMS(ONIT,K103) = +K103*<OLN>*<HO2> - PTERMS(:,26,103) = +TPK%K103(:)*PCONC(:,40)*PCONC(:,15) + PTERMS(:,27,103) = +TPK%K103(:)*PCONC(:,41)*PCONC(:,16) ! !PTERMS(OLN,K103) = -K103*<OLN>*<HO2> - PTERMS(:,40,103) = -TPK%K103(:)*PCONC(:,40)*PCONC(:,15) + PTERMS(:,41,103) = -TPK%K103(:)*PCONC(:,41)*PCONC(:,16) ! !PTERMS(HO2,K104) = +0.66*K104*<MO2>*<MO2> - PTERMS(:,15,104) = +0.66*TPK%K104(:)*PCONC(:,32)*PCONC(:,32) + PTERMS(:,16,104) = +0.66*TPK%K104(:)*PCONC(:,33)*PCONC(:,33) ! !PTERMS(HCHO,K104) = +1.33*K104*<MO2>*<MO2> - PTERMS(:,22,104) = +1.33*TPK%K104(:)*PCONC(:,32)*PCONC(:,32) + PTERMS(:,23,104) = +1.33*TPK%K104(:)*PCONC(:,33)*PCONC(:,33) ! !PTERMS(MO2,K104) = -K104*<MO2>*<MO2> - PTERMS(:,32,104) = -TPK%K104(:)*PCONC(:,32)*PCONC(:,32) + PTERMS(:,33,104) = -TPK%K104(:)*PCONC(:,33)*PCONC(:,33) ! !PTERMS(HO2,K105) = +0.98383*K105*<ALKAP>*<MO2> - PTERMS(:,15,105) = +0.98383*TPK%K105(:)*PCONC(:,33)*PCONC(:,32) + PTERMS(:,16,105) = +0.98383*TPK%K105(:)*PCONC(:,34)*PCONC(:,33) ! !PTERMS(HCHO,K105) = +0.80556*K105*<ALKAP>*<MO2> - PTERMS(:,22,105) = +0.80556*TPK%K105(:)*PCONC(:,33)*PCONC(:,32) + PTERMS(:,23,105) = +0.80556*TPK%K105(:)*PCONC(:,34)*PCONC(:,33) ! !PTERMS(ALD,K105) = +0.56070*K105*<ALKAP>*<MO2> - PTERMS(:,23,105) = +0.56070*TPK%K105(:)*PCONC(:,33)*PCONC(:,32) + PTERMS(:,24,105) = +0.56070*TPK%K105(:)*PCONC(:,34)*PCONC(:,33) ! !PTERMS(KET,K105) = +0.09673*K105*<ALKAP>*<MO2> - PTERMS(:,24,105) = +0.09673*TPK%K105(:)*PCONC(:,33)*PCONC(:,32) + PTERMS(:,25,105) = +0.09673*TPK%K105(:)*PCONC(:,34)*PCONC(:,33) ! !PTERMS(CARBO,K105) = +0.07976*K105*<ALKAP>*<MO2> - PTERMS(:,25,105) = +0.07976*TPK%K105(:)*PCONC(:,33)*PCONC(:,32) + PTERMS(:,26,105) = +0.07976*TPK%K105(:)*PCONC(:,34)*PCONC(:,33) ! !PTERMS(MO2,K105) = -K105*<ALKAP>*<MO2> - PTERMS(:,32,105) = -TPK%K105(:)*PCONC(:,33)*PCONC(:,32) + PTERMS(:,33,105) = -TPK%K105(:)*PCONC(:,34)*PCONC(:,33) ! !PTERMS(ALKAP,K105) = -K105*<ALKAP>*<MO2> - PTERMS(:,33,105) = -TPK%K105(:)*PCONC(:,33)*PCONC(:,32) + PTERMS(:,34,105) = -TPK%K105(:)*PCONC(:,34)*PCONC(:,33) ! !PTERMS(XO2,K105) = +0.13370*K105*<ALKAP>*<MO2> - PTERMS(:,41,105) = +0.13370*TPK%K105(:)*PCONC(:,33)*PCONC(:,32) + PTERMS(:,42,105) = +0.13370*TPK%K105(:)*PCONC(:,34)*PCONC(:,33) ! !PTERMS(HO2,K106) = +K106*<ALKEP>*<MO2> - PTERMS(:,15,106) = +TPK%K106(:)*PCONC(:,34)*PCONC(:,32) + PTERMS(:,16,106) = +TPK%K106(:)*PCONC(:,35)*PCONC(:,33) ! !PTERMS(HCHO,K106) = +1.42894*K106*<ALKEP>*<MO2> - PTERMS(:,22,106) = +1.42894*TPK%K106(:)*PCONC(:,34)*PCONC(:,32) + PTERMS(:,23,106) = +1.42894*TPK%K106(:)*PCONC(:,35)*PCONC(:,33) ! ! RETURN @@ -34698,64 +35338,64 @@ SUBROUTINE SUBT22 !Indices 441 a 460 ! !PTERMS(ALD,K106) = +0.46413*K106*<ALKEP>*<MO2> - PTERMS(:,23,106) = +0.46413*TPK%K106(:)*PCONC(:,34)*PCONC(:,32) + PTERMS(:,24,106) = +0.46413*TPK%K106(:)*PCONC(:,35)*PCONC(:,33) ! !PTERMS(KET,K106) = +0.03814*K106*<ALKEP>*<MO2> - PTERMS(:,24,106) = +0.03814*TPK%K106(:)*PCONC(:,34)*PCONC(:,32) + PTERMS(:,25,106) = +0.03814*TPK%K106(:)*PCONC(:,35)*PCONC(:,33) ! !PTERMS(MO2,K106) = -K106*<ALKEP>*<MO2> - PTERMS(:,32,106) = -TPK%K106(:)*PCONC(:,34)*PCONC(:,32) + PTERMS(:,33,106) = -TPK%K106(:)*PCONC(:,35)*PCONC(:,33) ! !PTERMS(ALKEP,K106) = -K106*<ALKEP>*<MO2> - PTERMS(:,34,106) = -TPK%K106(:)*PCONC(:,34)*PCONC(:,32) + PTERMS(:,35,106) = -TPK%K106(:)*PCONC(:,35)*PCONC(:,33) ! !PTERMS(HO2,K107) = +1.00000*K107*<BIOP>*<MO2> - PTERMS(:,15,107) = +1.00000*TPK%K107(:)*PCONC(:,35)*PCONC(:,32) + PTERMS(:,16,107) = +1.00000*TPK%K107(:)*PCONC(:,36)*PCONC(:,33) ! !PTERMS(ALKE,K107) = +0.48074*K107*<BIOP>*<MO2> - PTERMS(:,19,107) = +0.48074*TPK%K107(:)*PCONC(:,35)*PCONC(:,32) + PTERMS(:,20,107) = +0.48074*TPK%K107(:)*PCONC(:,36)*PCONC(:,33) ! !PTERMS(HCHO,K107) = +1.09000*K107*<BIOP>*<MO2> - PTERMS(:,22,107) = +1.09000*TPK%K107(:)*PCONC(:,35)*PCONC(:,32) + PTERMS(:,23,107) = +1.09000*TPK%K107(:)*PCONC(:,36)*PCONC(:,33) ! !PTERMS(ALD,K107) = +0.00000*K107*<BIOP>*<MO2> - PTERMS(:,23,107) = +0.00000*TPK%K107(:)*PCONC(:,35)*PCONC(:,32) + PTERMS(:,24,107) = +0.00000*TPK%K107(:)*PCONC(:,36)*PCONC(:,33) ! !PTERMS(KET,K107) = +0.00000*K107*<BIOP>*<MO2> - PTERMS(:,24,107) = +0.00000*TPK%K107(:)*PCONC(:,35)*PCONC(:,32) + PTERMS(:,25,107) = +0.00000*TPK%K107(:)*PCONC(:,36)*PCONC(:,33) ! !PTERMS(CARBO,K107) = +0.56064*K107*<BIOP>*<MO2> - PTERMS(:,25,107) = +0.56064*TPK%K107(:)*PCONC(:,35)*PCONC(:,32) + PTERMS(:,26,107) = +0.56064*TPK%K107(:)*PCONC(:,36)*PCONC(:,33) ! !PTERMS(MO2,K107) = -K107*<BIOP>*<MO2> - PTERMS(:,32,107) = -TPK%K107(:)*PCONC(:,35)*PCONC(:,32) + PTERMS(:,33,107) = -TPK%K107(:)*PCONC(:,36)*PCONC(:,33) ! !PTERMS(BIOP,K107) = -K107*<BIOP>*<MO2> - PTERMS(:,35,107) = -TPK%K107(:)*PCONC(:,35)*PCONC(:,32) + PTERMS(:,36,107) = -TPK%K107(:)*PCONC(:,36)*PCONC(:,33) ! !PTERMS(HO2,K108) = +1.02767*K108*<AROP>*<MO2> - PTERMS(:,15,108) = +1.02767*TPK%K108(:)*PCONC(:,38)*PCONC(:,32) + PTERMS(:,16,108) = +1.02767*TPK%K108(:)*PCONC(:,39)*PCONC(:,33) ! !PTERMS(HCHO,K108) = +K108*<AROP>*<MO2> - PTERMS(:,22,108) = +TPK%K108(:)*PCONC(:,38)*PCONC(:,32) + PTERMS(:,23,108) = +TPK%K108(:)*PCONC(:,39)*PCONC(:,33) ! !PTERMS(CARBO,K108) = +1.99461*K108*<AROP>*<MO2> - PTERMS(:,25,108) = +1.99461*TPK%K108(:)*PCONC(:,38)*PCONC(:,32) + PTERMS(:,26,108) = +1.99461*TPK%K108(:)*PCONC(:,39)*PCONC(:,33) ! !PTERMS(MO2,K108) = -K108*<AROP>*<MO2> - PTERMS(:,32,108) = -TPK%K108(:)*PCONC(:,38)*PCONC(:,32) + PTERMS(:,33,108) = -TPK%K108(:)*PCONC(:,39)*PCONC(:,33) ! !PTERMS(AROP,K108) = -K108*<AROP>*<MO2> - PTERMS(:,38,108) = -TPK%K108(:)*PCONC(:,38)*PCONC(:,32) + PTERMS(:,39,108) = -TPK%K108(:)*PCONC(:,39)*PCONC(:,33) ! !PTERMS(HO2,K109) = +0.82998*K109*<CARBOP>*<MO2> - PTERMS(:,15,109) = +0.82998*TPK%K109(:)*PCONC(:,39)*PCONC(:,32) + PTERMS(:,16,109) = +0.82998*TPK%K109(:)*PCONC(:,40)*PCONC(:,33) ! !PTERMS(HCHO,K109) = +0.95723*K109*<CARBOP>*<MO2> - PTERMS(:,22,109) = +0.95723*TPK%K109(:)*PCONC(:,39)*PCONC(:,32) + PTERMS(:,23,109) = +0.95723*TPK%K109(:)*PCONC(:,40)*PCONC(:,33) ! !PTERMS(ALD,K109) = +0.08295*K109*<CARBOP>*<MO2> - PTERMS(:,23,109) = +0.08295*TPK%K109(:)*PCONC(:,39)*PCONC(:,32) + PTERMS(:,24,109) = +0.08295*TPK%K109(:)*PCONC(:,40)*PCONC(:,33) ! ! RETURN @@ -34766,64 +35406,64 @@ SUBROUTINE SUBT23 !Indices 461 a 480 ! !PTERMS(CARBO,K109) = +0.15387*K109*<CARBOP>*<MO2> - PTERMS(:,25,109) = +0.15387*TPK%K109(:)*PCONC(:,39)*PCONC(:,32) + PTERMS(:,26,109) = +0.15387*TPK%K109(:)*PCONC(:,40)*PCONC(:,33) ! !PTERMS(ORA2,K109) = +0.13684*K109*<CARBOP>*<MO2> - PTERMS(:,31,109) = +0.13684*TPK%K109(:)*PCONC(:,39)*PCONC(:,32) + PTERMS(:,32,109) = +0.13684*TPK%K109(:)*PCONC(:,40)*PCONC(:,33) ! !PTERMS(MO2,K109) = -K109*<CARBOP>*<MO2> - PTERMS(:,32,109) = -TPK%K109(:)*PCONC(:,39)*PCONC(:,32) + PTERMS(:,33,109) = -TPK%K109(:)*PCONC(:,40)*PCONC(:,33) ! !PTERMS(CARBOP,K109) = -K109*<CARBOP>*<MO2> - PTERMS(:,39,109) = -TPK%K109(:)*PCONC(:,39)*PCONC(:,32) + PTERMS(:,40,109) = -TPK%K109(:)*PCONC(:,40)*PCONC(:,33) ! !PTERMS(XO2,K109) = +0.02212*K109*<CARBOP>*<MO2> - PTERMS(:,41,109) = +0.02212*TPK%K109(:)*PCONC(:,39)*PCONC(:,32) + PTERMS(:,42,109) = +0.02212*TPK%K109(:)*PCONC(:,40)*PCONC(:,33) ! !PTERMS(NO2,K110) = +0.32440*K110*<OLN>*<MO2> - PTERMS(:,4,110) = +0.32440*TPK%K110(:)*PCONC(:,40)*PCONC(:,32) + PTERMS(:,4,110) = +0.32440*TPK%K110(:)*PCONC(:,41)*PCONC(:,33) ! !PTERMS(HO2,K110) = +0.67560*K110*<OLN>*<MO2> - PTERMS(:,15,110) = +0.67560*TPK%K110(:)*PCONC(:,40)*PCONC(:,32) + PTERMS(:,16,110) = +0.67560*TPK%K110(:)*PCONC(:,41)*PCONC(:,33) ! !PTERMS(HCHO,K110) = +0.88625*K110*<OLN>*<MO2> - PTERMS(:,22,110) = +0.88625*TPK%K110(:)*PCONC(:,40)*PCONC(:,32) + PTERMS(:,23,110) = +0.88625*TPK%K110(:)*PCONC(:,41)*PCONC(:,33) ! !PTERMS(ALD,K110) = +0.41524*K110*<OLN>*<MO2> - PTERMS(:,23,110) = +0.41524*TPK%K110(:)*PCONC(:,40)*PCONC(:,32) + PTERMS(:,24,110) = +0.41524*TPK%K110(:)*PCONC(:,41)*PCONC(:,33) ! !PTERMS(KET,K110) = +0.09667*K110*<OLN>*<MO2> - PTERMS(:,24,110) = +0.09667*TPK%K110(:)*PCONC(:,40)*PCONC(:,32) + PTERMS(:,25,110) = +0.09667*TPK%K110(:)*PCONC(:,41)*PCONC(:,33) ! !PTERMS(ONIT,K110) = +0.67560*K110*<OLN>*<MO2> - PTERMS(:,26,110) = +0.67560*TPK%K110(:)*PCONC(:,40)*PCONC(:,32) + PTERMS(:,27,110) = +0.67560*TPK%K110(:)*PCONC(:,41)*PCONC(:,33) ! !PTERMS(MO2,K110) = -K110*<OLN>*<MO2> - PTERMS(:,32,110) = -TPK%K110(:)*PCONC(:,40)*PCONC(:,32) + PTERMS(:,33,110) = -TPK%K110(:)*PCONC(:,41)*PCONC(:,33) ! !PTERMS(OLN,K110) = -K110*<OLN>*<MO2> - PTERMS(:,40,110) = -TPK%K110(:)*PCONC(:,40)*PCONC(:,32) + PTERMS(:,41,110) = -TPK%K110(:)*PCONC(:,41)*PCONC(:,33) ! !PTERMS(HO2,K111) = +0.48079*K111*<ALKAP>*<CARBOP> - PTERMS(:,15,111) = +0.48079*TPK%K111(:)*PCONC(:,33)*PCONC(:,39) + PTERMS(:,16,111) = +0.48079*TPK%K111(:)*PCONC(:,34)*PCONC(:,40) ! !PTERMS(HCHO,K111) = +0.07600*K111*<ALKAP>*<CARBOP> - PTERMS(:,22,111) = +0.07600*TPK%K111(:)*PCONC(:,33)*PCONC(:,39) + PTERMS(:,23,111) = +0.07600*TPK%K111(:)*PCONC(:,34)*PCONC(:,40) ! !PTERMS(ALD,K111) = +0.71461*K111*<ALKAP>*<CARBOP> - PTERMS(:,23,111) = +0.71461*TPK%K111(:)*PCONC(:,33)*PCONC(:,39) + PTERMS(:,24,111) = +0.71461*TPK%K111(:)*PCONC(:,34)*PCONC(:,40) ! !PTERMS(KET,K111) = +0.18819*K111*<ALKAP>*<CARBOP> - PTERMS(:,24,111) = +0.18819*TPK%K111(:)*PCONC(:,33)*PCONC(:,39) + PTERMS(:,25,111) = +0.18819*TPK%K111(:)*PCONC(:,34)*PCONC(:,40) ! !PTERMS(CARBO,K111) = +0.06954*K111*<ALKAP>*<CARBOP> - PTERMS(:,25,111) = +0.06954*TPK%K111(:)*PCONC(:,33)*PCONC(:,39) + PTERMS(:,26,111) = +0.06954*TPK%K111(:)*PCONC(:,34)*PCONC(:,40) ! !PTERMS(ORA2,K111) = +0.49810*K111*<ALKAP>*<CARBOP> - PTERMS(:,31,111) = +0.49810*TPK%K111(:)*PCONC(:,33)*PCONC(:,39) + PTERMS(:,32,111) = +0.49810*TPK%K111(:)*PCONC(:,34)*PCONC(:,40) ! !PTERMS(MO2,K111) = +0.51480*K111*<ALKAP>*<CARBOP> - PTERMS(:,32,111) = +0.51480*TPK%K111(:)*PCONC(:,33)*PCONC(:,39) + PTERMS(:,33,111) = +0.51480*TPK%K111(:)*PCONC(:,34)*PCONC(:,40) ! ! RETURN @@ -34834,64 +35474,64 @@ SUBROUTINE SUBT24 !Indices 481 a 500 ! !PTERMS(ALKAP,K111) = -K111*<ALKAP>*<CARBOP> - PTERMS(:,33,111) = -TPK%K111(:)*PCONC(:,33)*PCONC(:,39) + PTERMS(:,34,111) = -TPK%K111(:)*PCONC(:,34)*PCONC(:,40) ! !PTERMS(CARBOP,K111) = -K111*<ALKAP>*<CARBOP> - PTERMS(:,39,111) = -TPK%K111(:)*PCONC(:,33)*PCONC(:,39) + PTERMS(:,40,111) = -TPK%K111(:)*PCONC(:,34)*PCONC(:,40) ! !PTERMS(XO2,K111) = +0.11306*K111*<ALKAP>*<CARBOP> - PTERMS(:,41,111) = +0.11306*TPK%K111(:)*PCONC(:,33)*PCONC(:,39) + PTERMS(:,42,111) = +0.11306*TPK%K111(:)*PCONC(:,34)*PCONC(:,40) ! !PTERMS(HO2,K112) = +0.50078*K112*<ALKEP>*<CARBOP> - PTERMS(:,15,112) = +0.50078*TPK%K112(:)*PCONC(:,34)*PCONC(:,39) + PTERMS(:,16,112) = +0.50078*TPK%K112(:)*PCONC(:,35)*PCONC(:,40) ! !PTERMS(HCHO,K112) = +0.68192*K112*<ALKEP>*<CARBOP> - PTERMS(:,22,112) = +0.68192*TPK%K112(:)*PCONC(:,34)*PCONC(:,39) + PTERMS(:,23,112) = +0.68192*TPK%K112(:)*PCONC(:,35)*PCONC(:,40) ! !PTERMS(ALD,K112) = +0.68374*K112*<ALKEP>*<CARBOP> - PTERMS(:,23,112) = +0.68374*TPK%K112(:)*PCONC(:,34)*PCONC(:,39) + PTERMS(:,24,112) = +0.68374*TPK%K112(:)*PCONC(:,35)*PCONC(:,40) ! !PTERMS(KET,K112) = +0.06579*K112*<ALKEP>*<CARBOP> - PTERMS(:,24,112) = +0.06579*TPK%K112(:)*PCONC(:,34)*PCONC(:,39) + PTERMS(:,25,112) = +0.06579*TPK%K112(:)*PCONC(:,35)*PCONC(:,40) ! !PTERMS(ORA2,K112) = +0.49922*K112*<ALKEP>*<CARBOP> - PTERMS(:,31,112) = +0.49922*TPK%K112(:)*PCONC(:,34)*PCONC(:,39) + PTERMS(:,32,112) = +0.49922*TPK%K112(:)*PCONC(:,35)*PCONC(:,40) ! !PTERMS(MO2,K112) = +0.50078*K112*<ALKEP>*<CARBOP> - PTERMS(:,32,112) = +0.50078*TPK%K112(:)*PCONC(:,34)*PCONC(:,39) + PTERMS(:,33,112) = +0.50078*TPK%K112(:)*PCONC(:,35)*PCONC(:,40) ! !PTERMS(ALKEP,K112) = -K112*<ALKEP>*<CARBOP> - PTERMS(:,34,112) = -TPK%K112(:)*PCONC(:,34)*PCONC(:,39) + PTERMS(:,35,112) = -TPK%K112(:)*PCONC(:,35)*PCONC(:,40) ! !PTERMS(CARBOP,K112) = -K112*<ALKEP>*<CARBOP> - PTERMS(:,39,112) = -TPK%K112(:)*PCONC(:,34)*PCONC(:,39) + PTERMS(:,40,112) = -TPK%K112(:)*PCONC(:,35)*PCONC(:,40) ! !PTERMS(HO2,K113) = +0.50600*K113*<BIOP>*<CARBOP> - PTERMS(:,15,113) = +0.50600*TPK%K113(:)*PCONC(:,35)*PCONC(:,39) + PTERMS(:,16,113) = +0.50600*TPK%K113(:)*PCONC(:,36)*PCONC(:,40) ! !PTERMS(ALKE,K113) = +0.24463*K113*<BIOP>*<CARBOP> - PTERMS(:,19,113) = +0.24463*TPK%K113(:)*PCONC(:,35)*PCONC(:,39) + PTERMS(:,20,113) = +0.24463*TPK%K113(:)*PCONC(:,36)*PCONC(:,40) ! !PTERMS(HCHO,K113) = +0.34000*K113*<BIOP>*<CARBOP> - PTERMS(:,22,113) = +0.34000*TPK%K113(:)*PCONC(:,35)*PCONC(:,39) + PTERMS(:,23,113) = +0.34000*TPK%K113(:)*PCONC(:,36)*PCONC(:,40) ! !PTERMS(ALD,K113) = +0.00000*K113*<BIOP>*<CARBOP> - PTERMS(:,23,113) = +0.00000*TPK%K113(:)*PCONC(:,35)*PCONC(:,39) + PTERMS(:,24,113) = +0.00000*TPK%K113(:)*PCONC(:,36)*PCONC(:,40) ! !PTERMS(KET,K113) = +0.00000*K113*<BIOP>*<CARBOP> - PTERMS(:,24,113) = +0.00000*TPK%K113(:)*PCONC(:,35)*PCONC(:,39) + PTERMS(:,25,113) = +0.00000*TPK%K113(:)*PCONC(:,36)*PCONC(:,40) ! !PTERMS(CARBO,K113) = +0.78591*K113*<BIOP>*<CARBOP> - PTERMS(:,25,113) = +0.78591*TPK%K113(:)*PCONC(:,35)*PCONC(:,39) + PTERMS(:,26,113) = +0.78591*TPK%K113(:)*PCONC(:,36)*PCONC(:,40) ! !PTERMS(ORA2,K113) = +0.49400*K113*<BIOP>*<CARBOP> - PTERMS(:,31,113) = +0.49400*TPK%K113(:)*PCONC(:,35)*PCONC(:,39) + PTERMS(:,32,113) = +0.49400*TPK%K113(:)*PCONC(:,36)*PCONC(:,40) ! !PTERMS(MO2,K113) = +0.50600*K113*<BIOP>*<CARBOP> - PTERMS(:,32,113) = +0.50600*TPK%K113(:)*PCONC(:,35)*PCONC(:,39) + PTERMS(:,33,113) = +0.50600*TPK%K113(:)*PCONC(:,36)*PCONC(:,40) ! !PTERMS(BIOP,K113) = -K113*<BIOP>*<CARBOP> - PTERMS(:,35,113) = -TPK%K113(:)*PCONC(:,35)*PCONC(:,39) + PTERMS(:,36,113) = -TPK%K113(:)*PCONC(:,36)*PCONC(:,40) ! ! RETURN @@ -34902,64 +35542,64 @@ SUBROUTINE SUBT25 !Indices 501 a 520 ! !PTERMS(CARBOP,K113) = -K113*<BIOP>*<CARBOP> - PTERMS(:,39,113) = -TPK%K113(:)*PCONC(:,35)*PCONC(:,39) + PTERMS(:,40,113) = -TPK%K113(:)*PCONC(:,36)*PCONC(:,40) ! !PTERMS(HO2,K114) = +K114*<AROP>*<CARBOP> - PTERMS(:,15,114) = +TPK%K114(:)*PCONC(:,38)*PCONC(:,39) + PTERMS(:,16,114) = +TPK%K114(:)*PCONC(:,39)*PCONC(:,40) ! !PTERMS(CARBO,K114) = +1.99455*K114*<AROP>*<CARBOP> - PTERMS(:,25,114) = +1.99455*TPK%K114(:)*PCONC(:,38)*PCONC(:,39) + PTERMS(:,26,114) = +1.99455*TPK%K114(:)*PCONC(:,39)*PCONC(:,40) ! !PTERMS(MO2,K114) = +K114*<AROP>*<CARBOP> - PTERMS(:,32,114) = +TPK%K114(:)*PCONC(:,38)*PCONC(:,39) + PTERMS(:,33,114) = +TPK%K114(:)*PCONC(:,39)*PCONC(:,40) ! !PTERMS(AROP,K114) = -K114*<AROP>*<CARBOP> - PTERMS(:,38,114) = -TPK%K114(:)*PCONC(:,38)*PCONC(:,39) + PTERMS(:,39,114) = -TPK%K114(:)*PCONC(:,39)*PCONC(:,40) ! !PTERMS(CARBOP,K114) = -K114*<AROP>*<CARBOP> - PTERMS(:,39,114) = -TPK%K114(:)*PCONC(:,38)*PCONC(:,39) + PTERMS(:,40,114) = -TPK%K114(:)*PCONC(:,39)*PCONC(:,40) ! !PTERMS(HO2,K115) = +0.07566*K115*<CARBOP>*<CARBOP> - PTERMS(:,15,115) = +0.07566*TPK%K115(:)*PCONC(:,39)*PCONC(:,39) + PTERMS(:,16,115) = +0.07566*TPK%K115(:)*PCONC(:,40)*PCONC(:,40) ! !PTERMS(HCHO,K115) = +0.03432*K115*<CARBOP>*<CARBOP> - PTERMS(:,22,115) = +0.03432*TPK%K115(:)*PCONC(:,39)*PCONC(:,39) + PTERMS(:,23,115) = +0.03432*TPK%K115(:)*PCONC(:,40)*PCONC(:,40) ! !PTERMS(ALD,K115) = +0.06969*K115*<CARBOP>*<CARBOP> - PTERMS(:,23,115) = +0.06969*TPK%K115(:)*PCONC(:,39)*PCONC(:,39) + PTERMS(:,24,115) = +0.06969*TPK%K115(:)*PCONC(:,40)*PCONC(:,40) ! !PTERMS(KET,K115) = +0.02190*K115*<CARBOP>*<CARBOP> - PTERMS(:,24,115) = +0.02190*TPK%K115(:)*PCONC(:,39)*PCONC(:,39) + PTERMS(:,25,115) = +0.02190*TPK%K115(:)*PCONC(:,40)*PCONC(:,40) ! !PTERMS(CARBO,K115) = +0.10777*K115*<CARBOP>*<CARBOP> - PTERMS(:,25,115) = +0.10777*TPK%K115(:)*PCONC(:,39)*PCONC(:,39) + PTERMS(:,26,115) = +0.10777*TPK%K115(:)*PCONC(:,40)*PCONC(:,40) ! !PTERMS(ORA2,K115) = +0.09955*K115*<CARBOP>*<CARBOP> - PTERMS(:,31,115) = +0.09955*TPK%K115(:)*PCONC(:,39)*PCONC(:,39) + PTERMS(:,32,115) = +0.09955*TPK%K115(:)*PCONC(:,40)*PCONC(:,40) ! !PTERMS(MO2,K115) = +1.66702*K115*<CARBOP>*<CARBOP> - PTERMS(:,32,115) = +1.66702*TPK%K115(:)*PCONC(:,39)*PCONC(:,39) + PTERMS(:,33,115) = +1.66702*TPK%K115(:)*PCONC(:,40)*PCONC(:,40) ! !PTERMS(CARBOP,K115) = -K115*<CARBOP>*<CARBOP> - PTERMS(:,39,115) = -TPK%K115(:)*PCONC(:,39)*PCONC(:,39) + PTERMS(:,40,115) = -TPK%K115(:)*PCONC(:,40)*PCONC(:,40) ! !PTERMS(XO2,K115) = +0.01593*K115*<CARBOP>*<CARBOP> - PTERMS(:,41,115) = +0.01593*TPK%K115(:)*PCONC(:,39)*PCONC(:,39) + PTERMS(:,42,115) = +0.01593*TPK%K115(:)*PCONC(:,40)*PCONC(:,40) ! !PTERMS(NO2,K116) = +0.00000*K116*<OLN>*<CARBOP> - PTERMS(:,4,116) = +0.00000*TPK%K116(:)*PCONC(:,40)*PCONC(:,39) + PTERMS(:,4,116) = +0.00000*TPK%K116(:)*PCONC(:,41)*PCONC(:,40) ! !PTERMS(HO2,K116) = +0.17599*K116*<OLN>*<CARBOP> - PTERMS(:,15,116) = +0.17599*TPK%K116(:)*PCONC(:,40)*PCONC(:,39) + PTERMS(:,16,116) = +0.17599*TPK%K116(:)*PCONC(:,41)*PCONC(:,40) ! !PTERMS(HCHO,K116) = +0.13414*K116*<OLN>*<CARBOP> - PTERMS(:,22,116) = +0.13414*TPK%K116(:)*PCONC(:,40)*PCONC(:,39) + PTERMS(:,23,116) = +0.13414*TPK%K116(:)*PCONC(:,41)*PCONC(:,40) ! !PTERMS(ALD,K116) = +0.42122*K116*<OLN>*<CARBOP> - PTERMS(:,23,116) = +0.42122*TPK%K116(:)*PCONC(:,40)*PCONC(:,39) + PTERMS(:,24,116) = +0.42122*TPK%K116(:)*PCONC(:,41)*PCONC(:,40) ! !PTERMS(KET,K116) = +0.10822*K116*<OLN>*<CARBOP> - PTERMS(:,24,116) = +0.10822*TPK%K116(:)*PCONC(:,40)*PCONC(:,39) + PTERMS(:,25,116) = +0.10822*TPK%K116(:)*PCONC(:,41)*PCONC(:,40) ! ! RETURN @@ -34970,64 +35610,64 @@ SUBROUTINE SUBT26 !Indices 521 a 540 ! !PTERMS(ONIT,K116) = +0.66562*K116*<OLN>*<CARBOP> - PTERMS(:,26,116) = +0.66562*TPK%K116(:)*PCONC(:,40)*PCONC(:,39) + PTERMS(:,27,116) = +0.66562*TPK%K116(:)*PCONC(:,41)*PCONC(:,40) ! !PTERMS(ORA2,K116) = +0.48963*K116*<OLN>*<CARBOP> - PTERMS(:,31,116) = +0.48963*TPK%K116(:)*PCONC(:,40)*PCONC(:,39) + PTERMS(:,32,116) = +0.48963*TPK%K116(:)*PCONC(:,41)*PCONC(:,40) ! !PTERMS(MO2,K116) = +0.51037*K116*<OLN>*<CARBOP> - PTERMS(:,32,116) = +0.51037*TPK%K116(:)*PCONC(:,40)*PCONC(:,39) + PTERMS(:,33,116) = +0.51037*TPK%K116(:)*PCONC(:,41)*PCONC(:,40) ! !PTERMS(CARBOP,K116) = -K116*<OLN>*<CARBOP> - PTERMS(:,39,116) = -TPK%K116(:)*PCONC(:,40)*PCONC(:,39) + PTERMS(:,40,116) = -TPK%K116(:)*PCONC(:,41)*PCONC(:,40) ! !PTERMS(OLN,K116) = -K116*<OLN>*<CARBOP> - PTERMS(:,40,116) = -TPK%K116(:)*PCONC(:,40)*PCONC(:,39) + PTERMS(:,41,116) = -TPK%K116(:)*PCONC(:,41)*PCONC(:,40) ! !PTERMS(HO2,K117) = +K117*<OLN>*<OLN> - PTERMS(:,15,117) = +TPK%K117(:)*PCONC(:,40)*PCONC(:,40) + PTERMS(:,16,117) = +TPK%K117(:)*PCONC(:,41)*PCONC(:,41) ! !PTERMS(ONIT,K117) = +2.00*K117*<OLN>*<OLN> - PTERMS(:,26,117) = +2.00*TPK%K117(:)*PCONC(:,40)*PCONC(:,40) + PTERMS(:,27,117) = +2.00*TPK%K117(:)*PCONC(:,41)*PCONC(:,41) ! !PTERMS(OLN,K117) = -K117*<OLN>*<OLN> - PTERMS(:,40,117) = -TPK%K117(:)*PCONC(:,40)*PCONC(:,40) + PTERMS(:,41,117) = -TPK%K117(:)*PCONC(:,41)*PCONC(:,41) ! !PTERMS(NO2,K118) = +0.00000*K118*<OLN>*<OLN> - PTERMS(:,4,118) = +0.00000*TPK%K118(:)*PCONC(:,40)*PCONC(:,40) + PTERMS(:,4,118) = +0.00000*TPK%K118(:)*PCONC(:,41)*PCONC(:,41) ! !PTERMS(HO2,K118) = +0.00000*K118*<OLN>*<OLN> - PTERMS(:,15,118) = +0.00000*TPK%K118(:)*PCONC(:,40)*PCONC(:,40) + PTERMS(:,16,118) = +0.00000*TPK%K118(:)*PCONC(:,41)*PCONC(:,41) ! !PTERMS(HCHO,K118) = +0.00000*K118*<OLN>*<OLN> - PTERMS(:,22,118) = +0.00000*TPK%K118(:)*PCONC(:,40)*PCONC(:,40) + PTERMS(:,23,118) = +0.00000*TPK%K118(:)*PCONC(:,41)*PCONC(:,41) ! !PTERMS(ALD,K118) = +0.00000*K118*<OLN>*<OLN> - PTERMS(:,23,118) = +0.00000*TPK%K118(:)*PCONC(:,40)*PCONC(:,40) + PTERMS(:,24,118) = +0.00000*TPK%K118(:)*PCONC(:,41)*PCONC(:,41) ! !PTERMS(KET,K118) = +0.00000*K118*<OLN>*<OLN> - PTERMS(:,24,118) = +0.00000*TPK%K118(:)*PCONC(:,40)*PCONC(:,40) + PTERMS(:,25,118) = +0.00000*TPK%K118(:)*PCONC(:,41)*PCONC(:,41) ! !PTERMS(ONIT,K118) = +0.00000*K118*<OLN>*<OLN> - PTERMS(:,26,118) = +0.00000*TPK%K118(:)*PCONC(:,40)*PCONC(:,40) + PTERMS(:,27,118) = +0.00000*TPK%K118(:)*PCONC(:,41)*PCONC(:,41) ! !PTERMS(OLN,K118) = -K118*<OLN>*<OLN> - PTERMS(:,40,118) = -TPK%K118(:)*PCONC(:,40)*PCONC(:,40) + PTERMS(:,41,118) = -TPK%K118(:)*PCONC(:,41)*PCONC(:,41) ! !PTERMS(NO2,K119) = +K119*<MO2>*<NO3> - PTERMS(:,4,119) = +TPK%K119(:)*PCONC(:,32)*PCONC(:,5) + PTERMS(:,4,119) = +TPK%K119(:)*PCONC(:,33)*PCONC(:,5) ! !PTERMS(NO3,K119) = -K119*<MO2>*<NO3> - PTERMS(:,5,119) = -TPK%K119(:)*PCONC(:,32)*PCONC(:,5) + PTERMS(:,5,119) = -TPK%K119(:)*PCONC(:,33)*PCONC(:,5) ! !PTERMS(HO2,K119) = +K119*<MO2>*<NO3> - PTERMS(:,15,119) = +TPK%K119(:)*PCONC(:,32)*PCONC(:,5) + PTERMS(:,16,119) = +TPK%K119(:)*PCONC(:,33)*PCONC(:,5) ! !PTERMS(HCHO,K119) = +K119*<MO2>*<NO3> - PTERMS(:,22,119) = +TPK%K119(:)*PCONC(:,32)*PCONC(:,5) + PTERMS(:,23,119) = +TPK%K119(:)*PCONC(:,33)*PCONC(:,5) ! !PTERMS(MO2,K119) = -K119*<MO2>*<NO3> - PTERMS(:,32,119) = -TPK%K119(:)*PCONC(:,32)*PCONC(:,5) + PTERMS(:,33,119) = -TPK%K119(:)*PCONC(:,33)*PCONC(:,5) ! ! RETURN @@ -35038,64 +35678,64 @@ SUBROUTINE SUBT27 !Indices 541 a 560 ! !PTERMS(NO2,K120) = +K120*<ALKAP>*<NO3> - PTERMS(:,4,120) = +TPK%K120(:)*PCONC(:,33)*PCONC(:,5) + PTERMS(:,4,120) = +TPK%K120(:)*PCONC(:,34)*PCONC(:,5) ! !PTERMS(NO3,K120) = -K120*<ALKAP>*<NO3> - PTERMS(:,5,120) = -TPK%K120(:)*PCONC(:,33)*PCONC(:,5) + PTERMS(:,5,120) = -TPK%K120(:)*PCONC(:,34)*PCONC(:,5) ! !PTERMS(HO2,K120) = +0.81290*K120*<ALKAP>*<NO3> - PTERMS(:,15,120) = +0.81290*TPK%K120(:)*PCONC(:,33)*PCONC(:,5) + PTERMS(:,16,120) = +0.81290*TPK%K120(:)*PCONC(:,34)*PCONC(:,5) ! !PTERMS(HCHO,K120) = +0.03142*K120*<ALKAP>*<NO3> - PTERMS(:,22,120) = +0.03142*TPK%K120(:)*PCONC(:,33)*PCONC(:,5) + PTERMS(:,23,120) = +0.03142*TPK%K120(:)*PCONC(:,34)*PCONC(:,5) ! !PTERMS(ALD,K120) = +0.33743*K120*<ALKAP>*<NO3> - PTERMS(:,23,120) = +0.33743*TPK%K120(:)*PCONC(:,33)*PCONC(:,5) + PTERMS(:,24,120) = +0.33743*TPK%K120(:)*PCONC(:,34)*PCONC(:,5) ! !PTERMS(KET,K120) = +0.62978*K120*<ALKAP>*<NO3> - PTERMS(:,24,120) = +0.62978*TPK%K120(:)*PCONC(:,33)*PCONC(:,5) + PTERMS(:,25,120) = +0.62978*TPK%K120(:)*PCONC(:,34)*PCONC(:,5) ! !PTERMS(CARBO,K120) = +0.03531*K120*<ALKAP>*<NO3> - PTERMS(:,25,120) = +0.03531*TPK%K120(:)*PCONC(:,33)*PCONC(:,5) + PTERMS(:,26,120) = +0.03531*TPK%K120(:)*PCONC(:,34)*PCONC(:,5) ! !PTERMS(MO2,K120) = +0.09731*K120*<ALKAP>*<NO3> - PTERMS(:,32,120) = +0.09731*TPK%K120(:)*PCONC(:,33)*PCONC(:,5) + PTERMS(:,33,120) = +0.09731*TPK%K120(:)*PCONC(:,34)*PCONC(:,5) ! !PTERMS(ALKAP,K120) = -K120*<ALKAP>*<NO3> - PTERMS(:,33,120) = -TPK%K120(:)*PCONC(:,33)*PCONC(:,5) + PTERMS(:,34,120) = -TPK%K120(:)*PCONC(:,34)*PCONC(:,5) ! !PTERMS(XO2,K120) = +0.16271*K120*<ALKAP>*<NO3> - PTERMS(:,41,120) = +0.16271*TPK%K120(:)*PCONC(:,33)*PCONC(:,5) + PTERMS(:,42,120) = +0.16271*TPK%K120(:)*PCONC(:,34)*PCONC(:,5) ! !PTERMS(NO2,K121) = +K121*<ALKEP>*<NO3> - PTERMS(:,4,121) = +TPK%K121(:)*PCONC(:,34)*PCONC(:,5) + PTERMS(:,4,121) = +TPK%K121(:)*PCONC(:,35)*PCONC(:,5) ! !PTERMS(NO3,K121) = -K121*<ALKEP>*<NO3> - PTERMS(:,5,121) = -TPK%K121(:)*PCONC(:,34)*PCONC(:,5) + PTERMS(:,5,121) = -TPK%K121(:)*PCONC(:,35)*PCONC(:,5) ! !PTERMS(HO2,K121) = +K121*<ALKEP>*<NO3> - PTERMS(:,15,121) = +TPK%K121(:)*PCONC(:,34)*PCONC(:,5) + PTERMS(:,16,121) = +TPK%K121(:)*PCONC(:,35)*PCONC(:,5) ! !PTERMS(HCHO,K121) = +1.40909*K121*<ALKEP>*<NO3> - PTERMS(:,22,121) = +1.40909*TPK%K121(:)*PCONC(:,34)*PCONC(:,5) + PTERMS(:,23,121) = +1.40909*TPK%K121(:)*PCONC(:,35)*PCONC(:,5) ! !PTERMS(ALD,K121) = +0.43039*K121*<ALKEP>*<NO3> - PTERMS(:,23,121) = +0.43039*TPK%K121(:)*PCONC(:,34)*PCONC(:,5) + PTERMS(:,24,121) = +0.43039*TPK%K121(:)*PCONC(:,35)*PCONC(:,5) ! !PTERMS(KET,K121) = +0.02051*K121*<ALKEP>*<NO3> - PTERMS(:,24,121) = +0.02051*TPK%K121(:)*PCONC(:,34)*PCONC(:,5) + PTERMS(:,25,121) = +0.02051*TPK%K121(:)*PCONC(:,35)*PCONC(:,5) ! !PTERMS(ALKEP,K121) = -K121*<ALKEP>*<NO3> - PTERMS(:,34,121) = -TPK%K121(:)*PCONC(:,34)*PCONC(:,5) + PTERMS(:,35,121) = -TPK%K121(:)*PCONC(:,35)*PCONC(:,5) ! !PTERMS(NO2,K122) = +K122*<BIOP>*<NO3> - PTERMS(:,4,122) = +TPK%K122(:)*PCONC(:,35)*PCONC(:,5) + PTERMS(:,4,122) = +TPK%K122(:)*PCONC(:,36)*PCONC(:,5) ! !PTERMS(NO3,K122) = -K122*<BIOP>*<NO3> - PTERMS(:,5,122) = -TPK%K122(:)*PCONC(:,35)*PCONC(:,5) + PTERMS(:,5,122) = -TPK%K122(:)*PCONC(:,36)*PCONC(:,5) ! !PTERMS(HO2,K122) = +K122*<BIOP>*<NO3> - PTERMS(:,15,122) = +TPK%K122(:)*PCONC(:,35)*PCONC(:,5) + PTERMS(:,16,122) = +TPK%K122(:)*PCONC(:,36)*PCONC(:,5) ! ! RETURN @@ -35106,64 +35746,64 @@ SUBROUTINE SUBT28 !Indices 561 a 580 ! !PTERMS(ALKE,K122) = +0.42729*K122*<BIOP>*<NO3> - PTERMS(:,19,122) = +0.42729*TPK%K122(:)*PCONC(:,35)*PCONC(:,5) + PTERMS(:,20,122) = +0.42729*TPK%K122(:)*PCONC(:,36)*PCONC(:,5) ! !PTERMS(HCHO,K122) = +0.68600*K122*<BIOP>*<NO3> - PTERMS(:,22,122) = +0.68600*TPK%K122(:)*PCONC(:,35)*PCONC(:,5) + PTERMS(:,23,122) = +0.68600*TPK%K122(:)*PCONC(:,36)*PCONC(:,5) ! !PTERMS(ALD,K122) = +0.00000*K122*<BIOP>*<NO3> - PTERMS(:,23,122) = +0.00000*TPK%K122(:)*PCONC(:,35)*PCONC(:,5) + PTERMS(:,24,122) = +0.00000*TPK%K122(:)*PCONC(:,36)*PCONC(:,5) ! !PTERMS(KET,K122) = +0.00000*K122*<BIOP>*<NO3> - PTERMS(:,24,122) = +0.00000*TPK%K122(:)*PCONC(:,35)*PCONC(:,5) + PTERMS(:,25,122) = +0.00000*TPK%K122(:)*PCONC(:,36)*PCONC(:,5) ! !PTERMS(CARBO,K122) = +0.61160*K122*<BIOP>*<NO3> - PTERMS(:,25,122) = +0.61160*TPK%K122(:)*PCONC(:,35)*PCONC(:,5) + PTERMS(:,26,122) = +0.61160*TPK%K122(:)*PCONC(:,36)*PCONC(:,5) ! !PTERMS(BIOP,K122) = -K122*<BIOP>*<NO3> - PTERMS(:,35,122) = -TPK%K122(:)*PCONC(:,35)*PCONC(:,5) + PTERMS(:,36,122) = -TPK%K122(:)*PCONC(:,36)*PCONC(:,5) ! !PTERMS(NO2,K123) = +K123*<AROP>*<NO3> - PTERMS(:,4,123) = +TPK%K123(:)*PCONC(:,38)*PCONC(:,5) + PTERMS(:,4,123) = +TPK%K123(:)*PCONC(:,39)*PCONC(:,5) ! !PTERMS(NO3,K123) = -K123*<AROP>*<NO3> - PTERMS(:,5,123) = -TPK%K123(:)*PCONC(:,38)*PCONC(:,5) + PTERMS(:,5,123) = -TPK%K123(:)*PCONC(:,39)*PCONC(:,5) ! !PTERMS(HO2,K123) = +K123*<AROP>*<NO3> - PTERMS(:,15,123) = +TPK%K123(:)*PCONC(:,38)*PCONC(:,5) + PTERMS(:,16,123) = +TPK%K123(:)*PCONC(:,39)*PCONC(:,5) ! !PTERMS(CARBO,K123) = +2.81904*K123*<AROP>*<NO3> - PTERMS(:,25,123) = +2.81904*TPK%K123(:)*PCONC(:,38)*PCONC(:,5) + PTERMS(:,26,123) = +2.81904*TPK%K123(:)*PCONC(:,39)*PCONC(:,5) ! !PTERMS(AROP,K123) = -K123*<AROP>*<NO3> - PTERMS(:,38,123) = -TPK%K123(:)*PCONC(:,38)*PCONC(:,5) + PTERMS(:,39,123) = -TPK%K123(:)*PCONC(:,39)*PCONC(:,5) ! !PTERMS(NO2,K124) = +K124*<CARBOP>*<NO3> - PTERMS(:,4,124) = +TPK%K124(:)*PCONC(:,39)*PCONC(:,5) + PTERMS(:,4,124) = +TPK%K124(:)*PCONC(:,40)*PCONC(:,5) ! !PTERMS(NO3,K124) = -K124*<CARBOP>*<NO3> - PTERMS(:,5,124) = -TPK%K124(:)*PCONC(:,39)*PCONC(:,5) + PTERMS(:,5,124) = -TPK%K124(:)*PCONC(:,40)*PCONC(:,5) ! !PTERMS(HO2,K124) = +0.04915*K124*<CARBOP>*<NO3> - PTERMS(:,15,124) = +0.04915*TPK%K124(:)*PCONC(:,39)*PCONC(:,5) + PTERMS(:,16,124) = +0.04915*TPK%K124(:)*PCONC(:,40)*PCONC(:,5) ! !PTERMS(HCHO,K124) = +0.03175*K124*<CARBOP>*<NO3> - PTERMS(:,22,124) = +0.03175*TPK%K124(:)*PCONC(:,39)*PCONC(:,5) + PTERMS(:,23,124) = +0.03175*TPK%K124(:)*PCONC(:,40)*PCONC(:,5) ! !PTERMS(ALD,K124) = +0.02936*K124*<CARBOP>*<NO3> - PTERMS(:,23,124) = +0.02936*TPK%K124(:)*PCONC(:,39)*PCONC(:,5) + PTERMS(:,24,124) = +0.02936*TPK%K124(:)*PCONC(:,40)*PCONC(:,5) ! !PTERMS(CARBO,K124) = +0.03455*K124*<CARBOP>*<NO3> - PTERMS(:,25,124) = +0.03455*TPK%K124(:)*PCONC(:,39)*PCONC(:,5) + PTERMS(:,26,124) = +0.03455*TPK%K124(:)*PCONC(:,40)*PCONC(:,5) ! !PTERMS(MO2,K124) = +0.91910*K124*<CARBOP>*<NO3> - PTERMS(:,32,124) = +0.91910*TPK%K124(:)*PCONC(:,39)*PCONC(:,5) + PTERMS(:,33,124) = +0.91910*TPK%K124(:)*PCONC(:,40)*PCONC(:,5) ! !PTERMS(CARBOP,K124) = -K124*<CARBOP>*<NO3> - PTERMS(:,39,124) = -TPK%K124(:)*PCONC(:,39)*PCONC(:,5) + PTERMS(:,40,124) = -TPK%K124(:)*PCONC(:,40)*PCONC(:,5) ! !PTERMS(XO2,K124) = +0.01021*K124*<CARBOP>*<NO3> - PTERMS(:,41,124) = +0.01021*TPK%K124(:)*PCONC(:,39)*PCONC(:,5) + PTERMS(:,42,124) = +0.01021*TPK%K124(:)*PCONC(:,40)*PCONC(:,5) ! ! RETURN @@ -35174,64 +35814,64 @@ SUBROUTINE SUBT29 !Indices 581 a 600 ! !PTERMS(NO2,K125) = +1.74072*K125*<OLN>*<NO3> - PTERMS(:,4,125) = +1.74072*TPK%K125(:)*PCONC(:,40)*PCONC(:,5) + PTERMS(:,4,125) = +1.74072*TPK%K125(:)*PCONC(:,41)*PCONC(:,5) ! !PTERMS(NO3,K125) = -K125*<OLN>*<NO3> - PTERMS(:,5,125) = -TPK%K125(:)*PCONC(:,40)*PCONC(:,5) + PTERMS(:,5,125) = -TPK%K125(:)*PCONC(:,41)*PCONC(:,5) ! !PTERMS(HO2,K125) = +0.25928*K125*<OLN>*<NO3> - PTERMS(:,15,125) = +0.25928*TPK%K125(:)*PCONC(:,40)*PCONC(:,5) + PTERMS(:,16,125) = +0.25928*TPK%K125(:)*PCONC(:,41)*PCONC(:,5) ! !PTERMS(HCHO,K125) = +0.20740*K125*<OLN>*<NO3> - PTERMS(:,22,125) = +0.20740*TPK%K125(:)*PCONC(:,40)*PCONC(:,5) + PTERMS(:,23,125) = +0.20740*TPK%K125(:)*PCONC(:,41)*PCONC(:,5) ! !PTERMS(ALD,K125) = +0.91850*K125*<OLN>*<NO3> - PTERMS(:,23,125) = +0.91850*TPK%K125(:)*PCONC(:,40)*PCONC(:,5) + PTERMS(:,24,125) = +0.91850*TPK%K125(:)*PCONC(:,41)*PCONC(:,5) ! !PTERMS(KET,K125) = +0.34740*K125*<OLN>*<NO3> - PTERMS(:,24,125) = +0.34740*TPK%K125(:)*PCONC(:,40)*PCONC(:,5) + PTERMS(:,25,125) = +0.34740*TPK%K125(:)*PCONC(:,41)*PCONC(:,5) ! !PTERMS(ONIT,K125) = +0.25928*K125*<OLN>*<NO3> - PTERMS(:,26,125) = +0.25928*TPK%K125(:)*PCONC(:,40)*PCONC(:,5) + PTERMS(:,27,125) = +0.25928*TPK%K125(:)*PCONC(:,41)*PCONC(:,5) ! !PTERMS(OLN,K125) = -K125*<OLN>*<NO3> - PTERMS(:,40,125) = -TPK%K125(:)*PCONC(:,40)*PCONC(:,5) + PTERMS(:,41,125) = -TPK%K125(:)*PCONC(:,41)*PCONC(:,5) ! !PTERMS(HO2,K126) = -K126*<XO2>*<HO2> - PTERMS(:,15,126) = -TPK%K126(:)*PCONC(:,41)*PCONC(:,15) + PTERMS(:,16,126) = -TPK%K126(:)*PCONC(:,42)*PCONC(:,16) ! !PTERMS(OP2,K126) = +1.00524*K126*<XO2>*<HO2> - PTERMS(:,29,126) = +1.00524*TPK%K126(:)*PCONC(:,41)*PCONC(:,15) + PTERMS(:,30,126) = +1.00524*TPK%K126(:)*PCONC(:,42)*PCONC(:,16) ! !PTERMS(XO2,K126) = -K126*<XO2>*<HO2> - PTERMS(:,41,126) = -TPK%K126(:)*PCONC(:,41)*PCONC(:,15) + PTERMS(:,42,126) = -TPK%K126(:)*PCONC(:,42)*PCONC(:,16) ! !PTERMS(HO2,K127) = +K127*<XO2>*<MO2> - PTERMS(:,15,127) = +TPK%K127(:)*PCONC(:,41)*PCONC(:,32) + PTERMS(:,16,127) = +TPK%K127(:)*PCONC(:,42)*PCONC(:,33) ! !PTERMS(HCHO,K127) = +K127*<XO2>*<MO2> - PTERMS(:,22,127) = +TPK%K127(:)*PCONC(:,41)*PCONC(:,32) + PTERMS(:,23,127) = +TPK%K127(:)*PCONC(:,42)*PCONC(:,33) ! !PTERMS(MO2,K127) = -K127*<XO2>*<MO2> - PTERMS(:,32,127) = -TPK%K127(:)*PCONC(:,41)*PCONC(:,32) + PTERMS(:,33,127) = -TPK%K127(:)*PCONC(:,42)*PCONC(:,33) ! !PTERMS(XO2,K127) = -K127*<XO2>*<MO2> - PTERMS(:,41,127) = -TPK%K127(:)*PCONC(:,41)*PCONC(:,32) + PTERMS(:,42,127) = -TPK%K127(:)*PCONC(:,42)*PCONC(:,33) ! !PTERMS(MO2,K128) = +K128*<XO2>*<CARBOP> - PTERMS(:,32,128) = +TPK%K128(:)*PCONC(:,41)*PCONC(:,39) + PTERMS(:,33,128) = +TPK%K128(:)*PCONC(:,42)*PCONC(:,40) ! !PTERMS(CARBOP,K128) = -K128*<XO2>*<CARBOP> - PTERMS(:,39,128) = -TPK%K128(:)*PCONC(:,41)*PCONC(:,39) + PTERMS(:,40,128) = -TPK%K128(:)*PCONC(:,42)*PCONC(:,40) ! !PTERMS(XO2,K128) = -K128*<XO2>*<CARBOP> - PTERMS(:,41,128) = -TPK%K128(:)*PCONC(:,41)*PCONC(:,39) + PTERMS(:,42,128) = -TPK%K128(:)*PCONC(:,42)*PCONC(:,40) ! !PTERMS(XO2,K129) = -K129*<XO2>*<XO2> - PTERMS(:,41,129) = -TPK%K129(:)*PCONC(:,41)*PCONC(:,41) + PTERMS(:,42,129) = -TPK%K129(:)*PCONC(:,42)*PCONC(:,42) ! !PTERMS(NO,K130) = -K130*<XO2>*<NO> - PTERMS(:,3,130) = -TPK%K130(:)*PCONC(:,41)*PCONC(:,3) + PTERMS(:,3,130) = -TPK%K130(:)*PCONC(:,42)*PCONC(:,3) ! ! RETURN @@ -35239,25 +35879,52 @@ END SUBROUTINE SUBT29 ! SUBROUTINE SUBT30 ! -!Indices 601 a 606 +!Indices 601 a 615 ! !PTERMS(NO2,K130) = +K130*<XO2>*<NO> - PTERMS(:,4,130) = +TPK%K130(:)*PCONC(:,41)*PCONC(:,3) + PTERMS(:,4,130) = +TPK%K130(:)*PCONC(:,42)*PCONC(:,3) ! !PTERMS(XO2,K130) = -K130*<XO2>*<NO> - PTERMS(:,41,130) = -TPK%K130(:)*PCONC(:,41)*PCONC(:,3) + PTERMS(:,42,130) = -TPK%K130(:)*PCONC(:,42)*PCONC(:,3) ! !PTERMS(NO2,K131) = +K131*<XO2>*<NO3> - PTERMS(:,4,131) = +TPK%K131(:)*PCONC(:,41)*PCONC(:,5) + PTERMS(:,4,131) = +TPK%K131(:)*PCONC(:,42)*PCONC(:,5) ! !PTERMS(NO3,K131) = -K131*<XO2>*<NO3> - PTERMS(:,5,131) = -TPK%K131(:)*PCONC(:,41)*PCONC(:,5) + PTERMS(:,5,131) = -TPK%K131(:)*PCONC(:,42)*PCONC(:,5) ! !PTERMS(XO2,K131) = -K131*<XO2>*<NO3> - PTERMS(:,41,131) = -TPK%K131(:)*PCONC(:,41)*PCONC(:,5) + PTERMS(:,42,131) = -TPK%K131(:)*PCONC(:,42)*PCONC(:,5) ! !PTERMS(SULF,K132) = -K132*<SULF> - PTERMS(:,12,132) = -TPK%K132(:)*PCONC(:,12) + PTERMS(:,13,132) = -TPK%K132(:)*PCONC(:,13) +! +!PTERMS(NO2,K133) = +K133*<DMS>*<NO3> + PTERMS(:,4,133) = +TPK%K133(:)*PCONC(:,11)*PCONC(:,5) +! +!PTERMS(NO3,K133) = -K133*<DMS>*<NO3> + PTERMS(:,5,133) = -TPK%K133(:)*PCONC(:,11)*PCONC(:,5) +! +!PTERMS(DMS,K133) = -K133*<DMS>*<NO3> + PTERMS(:,11,133) = -TPK%K133(:)*PCONC(:,11)*PCONC(:,5) +! +!PTERMS(SO2,K133) = +K133*<DMS>*<NO3> + PTERMS(:,12,133) = +TPK%K133(:)*PCONC(:,11)*PCONC(:,5) +! +!PTERMS(DMS,K134) = -K134*<DMS>*<O3P> + PTERMS(:,11,134) = -TPK%K134(:)*PCONC(:,11)*TPK%O3P(:) +! +!PTERMS(SO2,K134) = +K134*<DMS>*<O3P> + PTERMS(:,12,134) = +TPK%K134(:)*PCONC(:,11)*TPK%O3P(:) +! +!PTERMS(DMS,K135) = -K135*<DMS>*<OH> + PTERMS(:,11,135) = -TPK%K135(:)*PCONC(:,11)*PCONC(:,15) +! +!PTERMS(SO2,K135) = +0.8*K135*<DMS>*<OH> + PTERMS(:,12,135) = +0.8*TPK%K135(:)*PCONC(:,11)*PCONC(:,15) +! +!PTERMS(OH,K135) = -K135*<DMS>*<OH> + PTERMS(:,15,135) = -TPK%K135(:)*PCONC(:,11)*PCONC(:,15) ! ! RETURN @@ -35371,7 +36038,7 @@ CONTAINS !! !! EXTERNAL !! -------- -use mode_msg +!! none !! !! IMPLICIT ARGUMENTS !! ------------------ @@ -35381,8 +36048,8 @@ use mode_msg !! ------------------ IMPLICIT NONE ! check if output array is large enough -IF (KINDEXDIM.LT.942) THEN - call Print_msg( NVERB_FATAL, 'GEN', 'CH_NONZEROTERMS_AQ', 'array KINDEX is too small' ) +IF (KINDEXDIM.LT.951) THEN + STOP 'CH_NONZEROTERMS ERROR: array KINDEX is too small!' END IF KINDEX(1, 1)=3 KINDEX(2, 1)=1 @@ -35396,13 +36063,13 @@ END IF KINDEX(2, 5)=4 KINDEX(1, 6)=7 KINDEX(2, 6)=4 - KINDEX(1, 7)=14 + KINDEX(1, 7)=15 KINDEX(2, 7)=4 KINDEX(1, 8)=4 KINDEX(2, 8)=5 KINDEX(1, 9)=8 KINDEX(2, 9)=5 - KINDEX(1, 10)=14 + KINDEX(1, 10)=15 KINDEX(2, 10)=5 KINDEX(1, 11)=4 KINDEX(2, 11)=6 @@ -35410,9 +36077,9 @@ END IF KINDEX(2, 12)=6 KINDEX(1, 13)=9 KINDEX(2, 13)=6 - KINDEX(1, 14)=14 + KINDEX(1, 14)=15 KINDEX(2, 14)=6 - KINDEX(1, 15)=15 + KINDEX(1, 15)=16 KINDEX(2, 15)=6 KINDEX(1, 16)=3 KINDEX(2, 16)=7 @@ -35424,105 +36091,105 @@ END IF KINDEX(2, 19)=8 KINDEX(1, 20)=2 KINDEX(2, 20)=9 - KINDEX(1, 21)=14 + KINDEX(1, 21)=15 KINDEX(2, 21)=9 - KINDEX(1, 22)=13 + KINDEX(1, 22)=14 KINDEX(2, 22)=10 - KINDEX(1, 23)=22 + KINDEX(1, 23)=23 KINDEX(2, 23)=10 - KINDEX(1, 24)=13 + KINDEX(1, 24)=14 KINDEX(2, 24)=11 - KINDEX(1, 25)=15 + KINDEX(1, 25)=16 KINDEX(2, 25)=11 - KINDEX(1, 26)=22 + KINDEX(1, 26)=23 KINDEX(2, 26)=11 - KINDEX(1, 27)=13 + KINDEX(1, 27)=14 KINDEX(2, 27)=12 - KINDEX(1, 28)=15 + KINDEX(1, 28)=16 KINDEX(2, 28)=12 - KINDEX(1, 29)=23 + KINDEX(1, 29)=24 KINDEX(2, 29)=12 - KINDEX(1, 30)=32 + KINDEX(1, 30)=33 KINDEX(2, 30)=12 - KINDEX(1, 31)=14 + KINDEX(1, 31)=15 KINDEX(2, 31)=13 - KINDEX(1, 32)=15 + KINDEX(1, 32)=16 KINDEX(2, 32)=13 - KINDEX(1, 33)=22 + KINDEX(1, 33)=23 KINDEX(2, 33)=13 - KINDEX(1, 34)=28 + KINDEX(1, 34)=29 KINDEX(2, 34)=13 - KINDEX(1, 35)=14 + KINDEX(1, 35)=15 KINDEX(2, 35)=14 - KINDEX(1, 36)=15 + KINDEX(1, 36)=16 KINDEX(2, 36)=14 - KINDEX(1, 37)=23 + KINDEX(1, 37)=24 KINDEX(2, 37)=14 - KINDEX(1, 38)=29 + KINDEX(1, 38)=30 KINDEX(2, 38)=14 - KINDEX(1, 39)=32 + KINDEX(1, 39)=33 KINDEX(2, 39)=14 - KINDEX(1, 40)=24 + KINDEX(1, 40)=25 KINDEX(2, 40)=15 - KINDEX(1, 41)=33 + KINDEX(1, 41)=34 KINDEX(2, 41)=15 - KINDEX(1, 42)=39 + KINDEX(1, 42)=40 KINDEX(2, 42)=15 - KINDEX(1, 43)=13 + KINDEX(1, 43)=14 KINDEX(2, 43)=16 - KINDEX(1, 44)=15 + KINDEX(1, 44)=16 KINDEX(2, 44)=16 - KINDEX(1, 45)=22 + KINDEX(1, 45)=23 KINDEX(2, 45)=16 - KINDEX(1, 46)=25 + KINDEX(1, 46)=26 KINDEX(2, 46)=16 - KINDEX(1, 47)=39 + KINDEX(1, 47)=40 KINDEX(2, 47)=16 KINDEX(1, 48)=4 KINDEX(2, 48)=17 - KINDEX(1, 49)=15 + KINDEX(1, 49)=16 KINDEX(2, 49)=17 - KINDEX(1, 50)=23 + KINDEX(1, 50)=24 KINDEX(2, 50)=17 - KINDEX(1, 51)=24 + KINDEX(1, 51)=25 KINDEX(2, 51)=17 - KINDEX(1, 52)=26 + KINDEX(1, 52)=27 KINDEX(2, 52)=17 KINDEX(1, 53)=1 KINDEX(2, 53)=18 KINDEX(1, 54)=1 KINDEX(2, 54)=19 - KINDEX(1, 55)=14 + KINDEX(1, 55)=15 KINDEX(2, 55)=22 KINDEX(1, 56)=1 KINDEX(2, 56)=23 - KINDEX(1, 57)=14 + KINDEX(1, 57)=15 KINDEX(2, 57)=23 - KINDEX(1, 58)=15 + KINDEX(1, 58)=16 KINDEX(2, 58)=23 KINDEX(1, 59)=1 KINDEX(2, 59)=24 - KINDEX(1, 60)=14 + KINDEX(1, 60)=15 KINDEX(2, 60)=24 - KINDEX(1, 61)=15 + KINDEX(1, 61)=16 KINDEX(2, 61)=24 - KINDEX(1, 62)=14 + KINDEX(1, 62)=15 KINDEX(2, 62)=25 - KINDEX(1, 63)=15 + KINDEX(1, 63)=16 KINDEX(2, 63)=25 KINDEX(1, 64)=2 KINDEX(2, 64)=26 - KINDEX(1, 65)=14 + KINDEX(1, 65)=15 KINDEX(2, 65)=26 - KINDEX(1, 66)=15 + KINDEX(1, 66)=16 KINDEX(2, 66)=26 KINDEX(1, 67)=2 KINDEX(2, 67)=27 - KINDEX(1, 68)=15 + KINDEX(1, 68)=16 KINDEX(2, 68)=27 KINDEX(1, 69)=2 KINDEX(2, 69)=28 - KINDEX(1, 70)=15 + KINDEX(1, 70)=16 KINDEX(2, 70)=28 KINDEX(1, 71)=3 KINDEX(2, 71)=29 @@ -35540,41 +36207,41 @@ END IF KINDEX(2, 77)=32 KINDEX(1, 78)=7 KINDEX(2, 78)=32 - KINDEX(1, 79)=14 + KINDEX(1, 79)=15 KINDEX(2, 79)=32 KINDEX(1, 80)=4 KINDEX(2, 80)=33 KINDEX(1, 81)=8 KINDEX(2, 81)=33 - KINDEX(1, 82)=14 + KINDEX(1, 82)=15 KINDEX(2, 82)=33 KINDEX(1, 83)=4 KINDEX(2, 83)=34 KINDEX(1, 84)=5 KINDEX(2, 84)=34 - KINDEX(1, 85)=14 + KINDEX(1, 85)=15 KINDEX(2, 85)=34 - KINDEX(1, 86)=15 + KINDEX(1, 86)=16 KINDEX(2, 86)=34 KINDEX(1, 87)=3 KINDEX(2, 87)=35 KINDEX(1, 88)=4 KINDEX(2, 88)=35 - KINDEX(1, 89)=14 + KINDEX(1, 89)=15 KINDEX(2, 89)=35 - KINDEX(1, 90)=15 + KINDEX(1, 90)=16 KINDEX(2, 90)=35 KINDEX(1, 91)=4 KINDEX(2, 91)=36 KINDEX(1, 92)=9 KINDEX(2, 92)=36 - KINDEX(1, 93)=15 + KINDEX(1, 93)=16 KINDEX(2, 93)=36 KINDEX(1, 94)=4 KINDEX(2, 94)=37 KINDEX(1, 95)=9 KINDEX(2, 95)=37 - KINDEX(1, 96)=15 + KINDEX(1, 96)=16 KINDEX(2, 96)=37 KINDEX(1, 97)=4 KINDEX(2, 97)=38 @@ -35582,27 +36249,27 @@ END IF KINDEX(2, 98)=38 KINDEX(1, 99)=8 KINDEX(2, 99)=38 - KINDEX(1, 100)=14 + KINDEX(1, 100)=15 KINDEX(2, 100)=38 - KINDEX(1, 101)=15 + KINDEX(1, 101)=16 KINDEX(2, 101)=38 KINDEX(1, 102)=4 KINDEX(2, 102)=39 KINDEX(1, 103)=7 KINDEX(2, 103)=39 - KINDEX(1, 104)=14 + KINDEX(1, 104)=15 KINDEX(2, 104)=39 KINDEX(1, 105)=5 KINDEX(2, 105)=40 KINDEX(1, 106)=8 KINDEX(2, 106)=40 - KINDEX(1, 107)=14 + KINDEX(1, 107)=15 KINDEX(2, 107)=40 KINDEX(1, 108)=4 KINDEX(2, 108)=41 KINDEX(1, 109)=9 KINDEX(2, 109)=41 - KINDEX(1, 110)=14 + KINDEX(1, 110)=15 KINDEX(2, 110)=41 KINDEX(1, 111)=1 KINDEX(2, 111)=42 @@ -35650,217 +36317,217 @@ END IF KINDEX(2, 132)=49 KINDEX(1, 133)=10 KINDEX(2, 133)=50 - KINDEX(1, 134)=14 + KINDEX(1, 134)=15 KINDEX(2, 134)=50 - KINDEX(1, 135)=14 + KINDEX(1, 135)=15 KINDEX(2, 135)=51 - KINDEX(1, 136)=15 + KINDEX(1, 136)=16 KINDEX(2, 136)=51 - KINDEX(1, 137)=11 + KINDEX(1, 137)=12 KINDEX(2, 137)=52 - KINDEX(1, 138)=12 + KINDEX(1, 138)=13 KINDEX(2, 138)=52 - KINDEX(1, 139)=14 + KINDEX(1, 139)=15 KINDEX(2, 139)=52 - KINDEX(1, 140)=15 + KINDEX(1, 140)=16 KINDEX(2, 140)=52 - KINDEX(1, 141)=13 + KINDEX(1, 141)=14 KINDEX(2, 141)=53 - KINDEX(1, 142)=14 + KINDEX(1, 142)=15 KINDEX(2, 142)=53 - KINDEX(1, 143)=15 + KINDEX(1, 143)=16 KINDEX(2, 143)=53 - KINDEX(1, 144)=13 + KINDEX(1, 144)=14 KINDEX(2, 144)=54 - KINDEX(1, 145)=14 + KINDEX(1, 145)=15 KINDEX(2, 145)=54 - KINDEX(1, 146)=15 + KINDEX(1, 146)=16 KINDEX(2, 146)=54 - KINDEX(1, 147)=19 + KINDEX(1, 147)=20 KINDEX(2, 147)=54 - KINDEX(1, 148)=20 + KINDEX(1, 148)=21 KINDEX(2, 148)=54 - KINDEX(1, 149)=22 + KINDEX(1, 149)=23 KINDEX(2, 149)=54 - KINDEX(1, 150)=25 + KINDEX(1, 150)=26 KINDEX(2, 150)=54 - KINDEX(1, 151)=41 + KINDEX(1, 151)=42 KINDEX(2, 151)=54 - KINDEX(1, 152)=23 + KINDEX(1, 152)=24 KINDEX(2, 152)=55 - KINDEX(1, 153)=25 + KINDEX(1, 153)=26 KINDEX(2, 153)=55 - KINDEX(1, 154)=14 + KINDEX(1, 154)=15 KINDEX(2, 154)=56 - KINDEX(1, 155)=16 + KINDEX(1, 155)=17 KINDEX(2, 155)=56 - KINDEX(1, 156)=32 + KINDEX(1, 156)=33 KINDEX(2, 156)=56 - KINDEX(1, 157)=14 + KINDEX(1, 157)=15 KINDEX(2, 157)=57 - KINDEX(1, 158)=17 + KINDEX(1, 158)=18 KINDEX(2, 158)=57 - KINDEX(1, 159)=33 + KINDEX(1, 159)=34 KINDEX(2, 159)=57 - KINDEX(1, 160)=13 + KINDEX(1, 160)=14 KINDEX(2, 160)=58 - KINDEX(1, 161)=14 + KINDEX(1, 161)=15 KINDEX(2, 161)=58 - KINDEX(1, 162)=15 + KINDEX(1, 162)=16 KINDEX(2, 162)=58 - KINDEX(1, 163)=18 + KINDEX(1, 163)=19 KINDEX(2, 163)=58 - KINDEX(1, 164)=22 + KINDEX(1, 164)=23 KINDEX(2, 164)=58 - KINDEX(1, 165)=23 + KINDEX(1, 165)=24 KINDEX(2, 165)=58 - KINDEX(1, 166)=24 + KINDEX(1, 166)=25 KINDEX(2, 166)=58 - KINDEX(1, 167)=25 + KINDEX(1, 167)=26 KINDEX(2, 167)=58 - KINDEX(1, 168)=30 + KINDEX(1, 168)=31 KINDEX(2, 168)=58 - KINDEX(1, 169)=33 + KINDEX(1, 169)=34 KINDEX(2, 169)=58 - KINDEX(1, 170)=14 + KINDEX(1, 170)=15 KINDEX(2, 170)=59 - KINDEX(1, 171)=19 + KINDEX(1, 171)=20 KINDEX(2, 171)=59 - KINDEX(1, 172)=34 + KINDEX(1, 172)=35 KINDEX(2, 172)=59 - KINDEX(1, 173)=35 + KINDEX(1, 173)=36 KINDEX(2, 173)=59 - KINDEX(1, 174)=14 + KINDEX(1, 174)=15 KINDEX(2, 174)=60 - KINDEX(1, 175)=20 + KINDEX(1, 175)=21 KINDEX(2, 175)=60 - KINDEX(1, 176)=35 + KINDEX(1, 176)=36 KINDEX(2, 176)=60 - KINDEX(1, 177)=14 + KINDEX(1, 177)=15 KINDEX(2, 177)=61 - KINDEX(1, 178)=15 + KINDEX(1, 178)=16 KINDEX(2, 178)=61 - KINDEX(1, 179)=21 + KINDEX(1, 179)=22 KINDEX(2, 179)=61 - KINDEX(1, 180)=36 + KINDEX(1, 180)=37 KINDEX(2, 180)=61 - KINDEX(1, 181)=37 + KINDEX(1, 181)=38 KINDEX(2, 181)=61 - KINDEX(1, 182)=41 + KINDEX(1, 182)=42 KINDEX(2, 182)=61 - KINDEX(1, 183)=13 + KINDEX(1, 183)=14 KINDEX(2, 183)=62 - KINDEX(1, 184)=14 + KINDEX(1, 184)=15 KINDEX(2, 184)=62 - KINDEX(1, 185)=15 + KINDEX(1, 185)=16 KINDEX(2, 185)=62 - KINDEX(1, 186)=22 + KINDEX(1, 186)=23 KINDEX(2, 186)=62 - KINDEX(1, 187)=14 + KINDEX(1, 187)=15 KINDEX(2, 187)=63 - KINDEX(1, 188)=23 + KINDEX(1, 188)=24 KINDEX(2, 188)=63 - KINDEX(1, 189)=39 + KINDEX(1, 189)=40 KINDEX(2, 189)=63 - KINDEX(1, 190)=14 + KINDEX(1, 190)=15 KINDEX(2, 190)=64 - KINDEX(1, 191)=24 + KINDEX(1, 191)=25 KINDEX(2, 191)=64 - KINDEX(1, 192)=39 + KINDEX(1, 192)=40 KINDEX(2, 192)=64 - KINDEX(1, 193)=13 + KINDEX(1, 193)=14 KINDEX(2, 193)=65 - KINDEX(1, 194)=14 + KINDEX(1, 194)=15 KINDEX(2, 194)=65 - KINDEX(1, 195)=15 + KINDEX(1, 195)=16 KINDEX(2, 195)=65 - KINDEX(1, 196)=22 + KINDEX(1, 196)=23 KINDEX(2, 196)=65 - KINDEX(1, 197)=23 + KINDEX(1, 197)=24 KINDEX(2, 197)=65 - KINDEX(1, 198)=24 + KINDEX(1, 198)=25 KINDEX(2, 198)=65 - KINDEX(1, 199)=25 + KINDEX(1, 199)=26 KINDEX(2, 199)=65 - KINDEX(1, 200)=39 + KINDEX(1, 200)=40 KINDEX(2, 200)=65 - KINDEX(1, 201)=41 + KINDEX(1, 201)=42 KINDEX(2, 201)=65 - KINDEX(1, 202)=14 + KINDEX(1, 202)=15 KINDEX(2, 202)=66 - KINDEX(1, 203)=15 + KINDEX(1, 203)=16 KINDEX(2, 203)=66 - KINDEX(1, 204)=30 + KINDEX(1, 204)=31 KINDEX(2, 204)=66 - KINDEX(1, 205)=14 + KINDEX(1, 205)=15 KINDEX(2, 205)=67 - KINDEX(1, 206)=31 + KINDEX(1, 206)=32 KINDEX(2, 206)=67 - KINDEX(1, 207)=14 + KINDEX(1, 207)=15 KINDEX(2, 207)=68 - KINDEX(1, 208)=22 + KINDEX(1, 208)=23 KINDEX(2, 208)=68 - KINDEX(1, 209)=28 + KINDEX(1, 209)=29 KINDEX(2, 209)=68 - KINDEX(1, 210)=32 + KINDEX(1, 210)=33 KINDEX(2, 210)=68 - KINDEX(1, 211)=14 + KINDEX(1, 211)=15 KINDEX(2, 211)=69 - KINDEX(1, 212)=15 + KINDEX(1, 212)=16 KINDEX(2, 212)=69 - KINDEX(1, 213)=22 + KINDEX(1, 213)=23 KINDEX(2, 213)=69 - KINDEX(1, 214)=23 + KINDEX(1, 214)=24 KINDEX(2, 214)=69 - KINDEX(1, 215)=24 + KINDEX(1, 215)=25 KINDEX(2, 215)=69 - KINDEX(1, 216)=29 + KINDEX(1, 216)=30 KINDEX(2, 216)=69 - KINDEX(1, 217)=33 + KINDEX(1, 217)=34 KINDEX(2, 217)=69 - KINDEX(1, 218)=39 + KINDEX(1, 218)=40 KINDEX(2, 218)=69 - KINDEX(1, 219)=41 + KINDEX(1, 219)=42 KINDEX(2, 219)=69 KINDEX(1, 220)=5 KINDEX(2, 220)=70 - KINDEX(1, 221)=14 + KINDEX(1, 221)=15 KINDEX(2, 221)=70 - KINDEX(1, 222)=15 + KINDEX(1, 222)=16 KINDEX(2, 222)=70 - KINDEX(1, 223)=22 + KINDEX(1, 223)=23 KINDEX(2, 223)=70 - KINDEX(1, 224)=25 + KINDEX(1, 224)=26 KINDEX(2, 224)=70 - KINDEX(1, 225)=27 + KINDEX(1, 225)=28 KINDEX(2, 225)=70 - KINDEX(1, 226)=41 + KINDEX(1, 226)=42 KINDEX(2, 226)=70 KINDEX(1, 227)=4 KINDEX(2, 227)=71 - KINDEX(1, 228)=14 + KINDEX(1, 228)=15 KINDEX(2, 228)=71 - KINDEX(1, 229)=26 + KINDEX(1, 229)=27 KINDEX(2, 229)=71 - KINDEX(1, 230)=33 + KINDEX(1, 230)=34 KINDEX(2, 230)=71 KINDEX(1, 231)=5 KINDEX(2, 231)=72 KINDEX(1, 232)=8 KINDEX(2, 232)=72 - KINDEX(1, 233)=13 + KINDEX(1, 233)=14 KINDEX(2, 233)=72 - KINDEX(1, 234)=15 + KINDEX(1, 234)=16 KINDEX(2, 234)=72 - KINDEX(1, 235)=22 + KINDEX(1, 235)=23 KINDEX(2, 235)=72 KINDEX(1, 236)=5 KINDEX(2, 236)=73 KINDEX(1, 237)=8 KINDEX(2, 237)=73 - KINDEX(1, 238)=23 + KINDEX(1, 238)=24 KINDEX(2, 238)=73 - KINDEX(1, 239)=39 + KINDEX(1, 239)=40 KINDEX(2, 239)=73 KINDEX(1, 240)=4 KINDEX(2, 240)=74 @@ -35868,1406 +36535,1424 @@ END IF KINDEX(2, 241)=74 KINDEX(1, 242)=8 KINDEX(2, 242)=74 - KINDEX(1, 243)=13 + KINDEX(1, 243)=14 KINDEX(2, 243)=74 - KINDEX(1, 244)=15 + KINDEX(1, 244)=16 KINDEX(2, 244)=74 - KINDEX(1, 245)=23 + KINDEX(1, 245)=24 KINDEX(2, 245)=74 - KINDEX(1, 246)=24 + KINDEX(1, 246)=25 KINDEX(2, 246)=74 - KINDEX(1, 247)=25 + KINDEX(1, 247)=26 KINDEX(2, 247)=74 - KINDEX(1, 248)=39 + KINDEX(1, 248)=40 KINDEX(2, 248)=74 - KINDEX(1, 249)=40 + KINDEX(1, 249)=41 KINDEX(2, 249)=74 - KINDEX(1, 250)=41 + KINDEX(1, 250)=42 KINDEX(2, 250)=74 KINDEX(1, 251)=5 KINDEX(2, 251)=75 KINDEX(1, 252)=8 KINDEX(2, 252)=75 - KINDEX(1, 253)=21 + KINDEX(1, 253)=22 KINDEX(2, 253)=75 - KINDEX(1, 254)=36 + KINDEX(1, 254)=37 KINDEX(2, 254)=75 KINDEX(1, 255)=5 KINDEX(2, 255)=76 - KINDEX(1, 256)=19 + KINDEX(1, 256)=20 KINDEX(2, 256)=76 - KINDEX(1, 257)=25 + KINDEX(1, 257)=26 KINDEX(2, 257)=76 - KINDEX(1, 258)=40 + KINDEX(1, 258)=41 KINDEX(2, 258)=76 KINDEX(1, 259)=5 KINDEX(2, 259)=77 - KINDEX(1, 260)=20 + KINDEX(1, 260)=21 KINDEX(2, 260)=77 - KINDEX(1, 261)=25 + KINDEX(1, 261)=26 KINDEX(2, 261)=77 - KINDEX(1, 262)=40 + KINDEX(1, 262)=41 KINDEX(2, 262)=77 KINDEX(1, 263)=4 KINDEX(2, 263)=78 KINDEX(1, 264)=5 KINDEX(2, 264)=78 - KINDEX(1, 265)=22 + KINDEX(1, 265)=23 KINDEX(2, 265)=78 - KINDEX(1, 266)=26 + KINDEX(1, 266)=27 KINDEX(2, 266)=78 - KINDEX(1, 267)=27 + KINDEX(1, 267)=28 KINDEX(2, 267)=78 - KINDEX(1, 268)=41 + KINDEX(1, 268)=42 KINDEX(2, 268)=78 KINDEX(1, 269)=1 KINDEX(2, 269)=79 KINDEX(1, 270)=2 KINDEX(2, 270)=79 - KINDEX(1, 271)=13 + KINDEX(1, 271)=14 KINDEX(2, 271)=79 - KINDEX(1, 272)=14 + KINDEX(1, 272)=15 KINDEX(2, 272)=79 - KINDEX(1, 273)=15 + KINDEX(1, 273)=16 KINDEX(2, 273)=79 - KINDEX(1, 274)=16 + KINDEX(1, 274)=17 KINDEX(2, 274)=79 - KINDEX(1, 275)=17 + KINDEX(1, 275)=18 KINDEX(2, 275)=79 - KINDEX(1, 276)=19 + KINDEX(1, 276)=20 KINDEX(2, 276)=79 - KINDEX(1, 277)=22 + KINDEX(1, 277)=23 KINDEX(2, 277)=79 - KINDEX(1, 278)=23 + KINDEX(1, 278)=24 KINDEX(2, 278)=79 - KINDEX(1, 279)=24 + KINDEX(1, 279)=25 KINDEX(2, 279)=79 - KINDEX(1, 280)=25 + KINDEX(1, 280)=26 KINDEX(2, 280)=79 - KINDEX(1, 281)=30 + KINDEX(1, 281)=31 KINDEX(2, 281)=79 - KINDEX(1, 282)=31 + KINDEX(1, 282)=32 KINDEX(2, 282)=79 - KINDEX(1, 283)=32 + KINDEX(1, 283)=33 KINDEX(2, 283)=79 - KINDEX(1, 284)=33 + KINDEX(1, 284)=34 KINDEX(2, 284)=79 - KINDEX(1, 285)=39 + KINDEX(1, 285)=40 KINDEX(2, 285)=79 - KINDEX(1, 286)=41 + KINDEX(1, 286)=42 KINDEX(2, 286)=79 KINDEX(1, 287)=1 KINDEX(2, 287)=80 KINDEX(1, 288)=2 KINDEX(2, 288)=80 - KINDEX(1, 289)=13 + KINDEX(1, 289)=14 KINDEX(2, 289)=80 - KINDEX(1, 290)=14 + KINDEX(1, 290)=15 KINDEX(2, 290)=80 - KINDEX(1, 291)=15 + KINDEX(1, 291)=16 KINDEX(2, 291)=80 - KINDEX(1, 292)=19 + KINDEX(1, 292)=20 KINDEX(2, 292)=80 - KINDEX(1, 293)=20 + KINDEX(1, 293)=21 KINDEX(2, 293)=80 - KINDEX(1, 294)=22 + KINDEX(1, 294)=23 KINDEX(2, 294)=80 - KINDEX(1, 295)=23 + KINDEX(1, 295)=24 KINDEX(2, 295)=80 - KINDEX(1, 296)=24 + KINDEX(1, 296)=25 KINDEX(2, 296)=80 - KINDEX(1, 297)=25 + KINDEX(1, 297)=26 KINDEX(2, 297)=80 - KINDEX(1, 298)=30 + KINDEX(1, 298)=31 KINDEX(2, 298)=80 - KINDEX(1, 299)=31 + KINDEX(1, 299)=32 KINDEX(2, 299)=80 - KINDEX(1, 300)=32 + KINDEX(1, 300)=33 KINDEX(2, 300)=80 - KINDEX(1, 301)=33 + KINDEX(1, 301)=34 KINDEX(2, 301)=80 - KINDEX(1, 302)=39 + KINDEX(1, 302)=40 KINDEX(2, 302)=80 - KINDEX(1, 303)=41 + KINDEX(1, 303)=42 KINDEX(2, 303)=80 KINDEX(1, 304)=1 KINDEX(2, 304)=81 - KINDEX(1, 305)=13 + KINDEX(1, 305)=14 KINDEX(2, 305)=81 - KINDEX(1, 306)=14 + KINDEX(1, 306)=15 KINDEX(2, 306)=81 - KINDEX(1, 307)=15 + KINDEX(1, 307)=16 KINDEX(2, 307)=81 - KINDEX(1, 308)=22 + KINDEX(1, 308)=23 KINDEX(2, 308)=81 - KINDEX(1, 309)=23 + KINDEX(1, 309)=24 KINDEX(2, 309)=81 - KINDEX(1, 310)=25 + KINDEX(1, 310)=26 KINDEX(2, 310)=81 - KINDEX(1, 311)=29 + KINDEX(1, 311)=30 KINDEX(2, 311)=81 - KINDEX(1, 312)=30 + KINDEX(1, 312)=31 KINDEX(2, 312)=81 - KINDEX(1, 313)=31 + KINDEX(1, 313)=32 KINDEX(2, 313)=81 - KINDEX(1, 314)=39 + KINDEX(1, 314)=40 KINDEX(2, 314)=81 KINDEX(1, 315)=1 KINDEX(2, 315)=82 KINDEX(1, 316)=4 KINDEX(2, 316)=82 - KINDEX(1, 317)=13 + KINDEX(1, 317)=14 KINDEX(2, 317)=82 - KINDEX(1, 318)=14 + KINDEX(1, 318)=15 KINDEX(2, 318)=82 - KINDEX(1, 319)=15 + KINDEX(1, 319)=16 KINDEX(2, 319)=82 - KINDEX(1, 320)=22 + KINDEX(1, 320)=23 KINDEX(2, 320)=82 - KINDEX(1, 321)=27 + KINDEX(1, 321)=28 KINDEX(2, 321)=82 - KINDEX(1, 322)=30 + KINDEX(1, 322)=31 KINDEX(2, 322)=82 - KINDEX(1, 323)=39 + KINDEX(1, 323)=40 KINDEX(2, 323)=82 KINDEX(1, 324)=4 KINDEX(2, 324)=83 - KINDEX(1, 325)=21 + KINDEX(1, 325)=22 KINDEX(2, 325)=83 - KINDEX(1, 326)=26 + KINDEX(1, 326)=27 KINDEX(2, 326)=83 - KINDEX(1, 327)=36 + KINDEX(1, 327)=37 KINDEX(2, 327)=83 - KINDEX(1, 328)=15 + KINDEX(1, 328)=16 KINDEX(2, 328)=84 - KINDEX(1, 329)=21 + KINDEX(1, 329)=22 KINDEX(2, 329)=84 - KINDEX(1, 330)=36 + KINDEX(1, 330)=37 KINDEX(2, 330)=84 KINDEX(1, 331)=4 KINDEX(2, 331)=85 KINDEX(1, 332)=7 KINDEX(2, 332)=85 - KINDEX(1, 333)=21 + KINDEX(1, 333)=22 KINDEX(2, 333)=85 - KINDEX(1, 334)=37 + KINDEX(1, 334)=38 KINDEX(2, 334)=85 - KINDEX(1, 335)=15 + KINDEX(1, 335)=16 KINDEX(2, 335)=86 - KINDEX(1, 336)=21 + KINDEX(1, 336)=22 KINDEX(2, 336)=86 - KINDEX(1, 337)=37 + KINDEX(1, 337)=38 KINDEX(2, 337)=86 - KINDEX(1, 338)=38 + KINDEX(1, 338)=39 KINDEX(2, 338)=86 KINDEX(1, 339)=1 KINDEX(2, 339)=87 - KINDEX(1, 340)=14 + KINDEX(1, 340)=15 KINDEX(2, 340)=87 - KINDEX(1, 341)=21 + KINDEX(1, 341)=22 KINDEX(2, 341)=87 - KINDEX(1, 342)=37 + KINDEX(1, 342)=38 KINDEX(2, 342)=87 KINDEX(1, 343)=4 KINDEX(2, 343)=88 - KINDEX(1, 344)=27 + KINDEX(1, 344)=28 KINDEX(2, 344)=88 - KINDEX(1, 345)=39 + KINDEX(1, 345)=40 KINDEX(2, 345)=88 KINDEX(1, 346)=4 KINDEX(2, 346)=89 - KINDEX(1, 347)=27 + KINDEX(1, 347)=28 KINDEX(2, 347)=89 - KINDEX(1, 348)=39 + KINDEX(1, 348)=40 KINDEX(2, 348)=89 KINDEX(1, 349)=3 KINDEX(2, 349)=90 KINDEX(1, 350)=4 KINDEX(2, 350)=90 - KINDEX(1, 351)=15 + KINDEX(1, 351)=16 KINDEX(2, 351)=90 - KINDEX(1, 352)=22 + KINDEX(1, 352)=23 KINDEX(2, 352)=90 - KINDEX(1, 353)=32 + KINDEX(1, 353)=33 KINDEX(2, 353)=90 KINDEX(1, 354)=3 KINDEX(2, 354)=91 KINDEX(1, 355)=4 KINDEX(2, 355)=91 - KINDEX(1, 356)=15 + KINDEX(1, 356)=16 KINDEX(2, 356)=91 - KINDEX(1, 357)=22 + KINDEX(1, 357)=23 KINDEX(2, 357)=91 - KINDEX(1, 358)=23 + KINDEX(1, 358)=24 KINDEX(2, 358)=91 - KINDEX(1, 359)=24 + KINDEX(1, 359)=25 KINDEX(2, 359)=91 - KINDEX(1, 360)=25 + KINDEX(1, 360)=26 KINDEX(2, 360)=91 - KINDEX(1, 361)=26 + KINDEX(1, 361)=27 KINDEX(2, 361)=91 - KINDEX(1, 362)=32 + KINDEX(1, 362)=33 KINDEX(2, 362)=91 - KINDEX(1, 363)=33 + KINDEX(1, 363)=34 KINDEX(2, 363)=91 - KINDEX(1, 364)=41 + KINDEX(1, 364)=42 KINDEX(2, 364)=91 KINDEX(1, 365)=3 KINDEX(2, 365)=92 KINDEX(1, 366)=4 KINDEX(2, 366)=92 - KINDEX(1, 367)=15 + KINDEX(1, 367)=16 KINDEX(2, 367)=92 - KINDEX(1, 368)=22 + KINDEX(1, 368)=23 KINDEX(2, 368)=92 - KINDEX(1, 369)=23 + KINDEX(1, 369)=24 KINDEX(2, 369)=92 - KINDEX(1, 370)=24 + KINDEX(1, 370)=25 KINDEX(2, 370)=92 - KINDEX(1, 371)=34 + KINDEX(1, 371)=35 KINDEX(2, 371)=92 KINDEX(1, 372)=3 KINDEX(2, 372)=93 KINDEX(1, 373)=4 KINDEX(2, 373)=93 - KINDEX(1, 374)=15 + KINDEX(1, 374)=16 KINDEX(2, 374)=93 - KINDEX(1, 375)=19 + KINDEX(1, 375)=20 KINDEX(2, 375)=93 - KINDEX(1, 376)=22 + KINDEX(1, 376)=23 KINDEX(2, 376)=93 - KINDEX(1, 377)=23 + KINDEX(1, 377)=24 KINDEX(2, 377)=93 - KINDEX(1, 378)=24 + KINDEX(1, 378)=25 KINDEX(2, 378)=93 - KINDEX(1, 379)=25 + KINDEX(1, 379)=26 KINDEX(2, 379)=93 - KINDEX(1, 380)=26 + KINDEX(1, 380)=27 KINDEX(2, 380)=93 - KINDEX(1, 381)=35 + KINDEX(1, 381)=36 KINDEX(2, 381)=93 KINDEX(1, 382)=3 KINDEX(2, 382)=94 KINDEX(1, 383)=4 KINDEX(2, 383)=94 - KINDEX(1, 384)=15 + KINDEX(1, 384)=16 KINDEX(2, 384)=94 - KINDEX(1, 385)=25 + KINDEX(1, 385)=26 KINDEX(2, 385)=94 - KINDEX(1, 386)=26 + KINDEX(1, 386)=27 KINDEX(2, 386)=94 - KINDEX(1, 387)=38 + KINDEX(1, 387)=39 KINDEX(2, 387)=94 KINDEX(1, 388)=3 KINDEX(2, 388)=95 KINDEX(1, 389)=4 KINDEX(2, 389)=95 - KINDEX(1, 390)=15 + KINDEX(1, 390)=16 KINDEX(2, 390)=95 - KINDEX(1, 391)=22 + KINDEX(1, 391)=23 KINDEX(2, 391)=95 - KINDEX(1, 392)=23 + KINDEX(1, 392)=24 KINDEX(2, 392)=95 - KINDEX(1, 393)=25 + KINDEX(1, 393)=26 KINDEX(2, 393)=95 - KINDEX(1, 394)=32 + KINDEX(1, 394)=33 KINDEX(2, 394)=95 - KINDEX(1, 395)=39 + KINDEX(1, 395)=40 KINDEX(2, 395)=95 - KINDEX(1, 396)=41 + KINDEX(1, 396)=42 KINDEX(2, 396)=95 KINDEX(1, 397)=3 KINDEX(2, 397)=96 KINDEX(1, 398)=4 KINDEX(2, 398)=96 - KINDEX(1, 399)=15 + KINDEX(1, 399)=16 KINDEX(2, 399)=96 - KINDEX(1, 400)=22 + KINDEX(1, 400)=23 KINDEX(2, 400)=96 - KINDEX(1, 401)=23 + KINDEX(1, 401)=24 KINDEX(2, 401)=96 - KINDEX(1, 402)=24 + KINDEX(1, 402)=25 KINDEX(2, 402)=96 - KINDEX(1, 403)=26 + KINDEX(1, 403)=27 KINDEX(2, 403)=96 - KINDEX(1, 404)=40 + KINDEX(1, 404)=41 KINDEX(2, 404)=96 - KINDEX(1, 405)=15 + KINDEX(1, 405)=16 KINDEX(2, 405)=97 - KINDEX(1, 406)=28 + KINDEX(1, 406)=29 KINDEX(2, 406)=97 - KINDEX(1, 407)=32 + KINDEX(1, 407)=33 KINDEX(2, 407)=97 - KINDEX(1, 408)=15 + KINDEX(1, 408)=16 KINDEX(2, 408)=98 - KINDEX(1, 409)=29 + KINDEX(1, 409)=30 KINDEX(2, 409)=98 - KINDEX(1, 410)=33 + KINDEX(1, 410)=34 KINDEX(2, 410)=98 - KINDEX(1, 411)=15 + KINDEX(1, 411)=16 KINDEX(2, 411)=99 - KINDEX(1, 412)=29 + KINDEX(1, 412)=30 KINDEX(2, 412)=99 - KINDEX(1, 413)=34 + KINDEX(1, 413)=35 KINDEX(2, 413)=99 - KINDEX(1, 414)=15 + KINDEX(1, 414)=16 KINDEX(2, 414)=100 - KINDEX(1, 415)=29 + KINDEX(1, 415)=30 KINDEX(2, 415)=100 - KINDEX(1, 416)=35 + KINDEX(1, 416)=36 KINDEX(2, 416)=100 - KINDEX(1, 417)=15 + KINDEX(1, 417)=16 KINDEX(2, 417)=101 - KINDEX(1, 418)=29 + KINDEX(1, 418)=30 KINDEX(2, 418)=101 - KINDEX(1, 419)=38 + KINDEX(1, 419)=39 KINDEX(2, 419)=101 KINDEX(1, 420)=1 KINDEX(2, 420)=102 - KINDEX(1, 421)=15 + KINDEX(1, 421)=16 KINDEX(2, 421)=102 - KINDEX(1, 422)=29 + KINDEX(1, 422)=30 KINDEX(2, 422)=102 - KINDEX(1, 423)=31 + KINDEX(1, 423)=32 KINDEX(2, 423)=102 - KINDEX(1, 424)=39 + KINDEX(1, 424)=40 KINDEX(2, 424)=102 - KINDEX(1, 425)=15 + KINDEX(1, 425)=16 KINDEX(2, 425)=103 - KINDEX(1, 426)=26 + KINDEX(1, 426)=27 KINDEX(2, 426)=103 - KINDEX(1, 427)=40 + KINDEX(1, 427)=41 KINDEX(2, 427)=103 - KINDEX(1, 428)=15 + KINDEX(1, 428)=16 KINDEX(2, 428)=104 - KINDEX(1, 429)=22 + KINDEX(1, 429)=23 KINDEX(2, 429)=104 - KINDEX(1, 430)=32 + KINDEX(1, 430)=33 KINDEX(2, 430)=104 - KINDEX(1, 431)=15 + KINDEX(1, 431)=16 KINDEX(2, 431)=105 - KINDEX(1, 432)=22 + KINDEX(1, 432)=23 KINDEX(2, 432)=105 - KINDEX(1, 433)=23 + KINDEX(1, 433)=24 KINDEX(2, 433)=105 - KINDEX(1, 434)=24 + KINDEX(1, 434)=25 KINDEX(2, 434)=105 - KINDEX(1, 435)=25 + KINDEX(1, 435)=26 KINDEX(2, 435)=105 - KINDEX(1, 436)=32 + KINDEX(1, 436)=33 KINDEX(2, 436)=105 - KINDEX(1, 437)=33 + KINDEX(1, 437)=34 KINDEX(2, 437)=105 - KINDEX(1, 438)=41 + KINDEX(1, 438)=42 KINDEX(2, 438)=105 - KINDEX(1, 439)=15 + KINDEX(1, 439)=16 KINDEX(2, 439)=106 - KINDEX(1, 440)=22 + KINDEX(1, 440)=23 KINDEX(2, 440)=106 - KINDEX(1, 441)=23 + KINDEX(1, 441)=24 KINDEX(2, 441)=106 - KINDEX(1, 442)=24 + KINDEX(1, 442)=25 KINDEX(2, 442)=106 - KINDEX(1, 443)=32 + KINDEX(1, 443)=33 KINDEX(2, 443)=106 - KINDEX(1, 444)=34 + KINDEX(1, 444)=35 KINDEX(2, 444)=106 - KINDEX(1, 445)=15 + KINDEX(1, 445)=16 KINDEX(2, 445)=107 - KINDEX(1, 446)=19 + KINDEX(1, 446)=20 KINDEX(2, 446)=107 - KINDEX(1, 447)=22 + KINDEX(1, 447)=23 KINDEX(2, 447)=107 - KINDEX(1, 448)=23 + KINDEX(1, 448)=24 KINDEX(2, 448)=107 - KINDEX(1, 449)=24 + KINDEX(1, 449)=25 KINDEX(2, 449)=107 - KINDEX(1, 450)=25 + KINDEX(1, 450)=26 KINDEX(2, 450)=107 - KINDEX(1, 451)=32 + KINDEX(1, 451)=33 KINDEX(2, 451)=107 - KINDEX(1, 452)=35 + KINDEX(1, 452)=36 KINDEX(2, 452)=107 - KINDEX(1, 453)=15 + KINDEX(1, 453)=16 KINDEX(2, 453)=108 - KINDEX(1, 454)=22 + KINDEX(1, 454)=23 KINDEX(2, 454)=108 - KINDEX(1, 455)=25 + KINDEX(1, 455)=26 KINDEX(2, 455)=108 - KINDEX(1, 456)=32 + KINDEX(1, 456)=33 KINDEX(2, 456)=108 - KINDEX(1, 457)=38 + KINDEX(1, 457)=39 KINDEX(2, 457)=108 - KINDEX(1, 458)=15 + KINDEX(1, 458)=16 KINDEX(2, 458)=109 - KINDEX(1, 459)=22 + KINDEX(1, 459)=23 KINDEX(2, 459)=109 - KINDEX(1, 460)=23 + KINDEX(1, 460)=24 KINDEX(2, 460)=109 - KINDEX(1, 461)=25 + KINDEX(1, 461)=26 KINDEX(2, 461)=109 - KINDEX(1, 462)=31 + KINDEX(1, 462)=32 KINDEX(2, 462)=109 - KINDEX(1, 463)=32 + KINDEX(1, 463)=33 KINDEX(2, 463)=109 - KINDEX(1, 464)=39 + KINDEX(1, 464)=40 KINDEX(2, 464)=109 - KINDEX(1, 465)=41 + KINDEX(1, 465)=42 KINDEX(2, 465)=109 KINDEX(1, 466)=4 KINDEX(2, 466)=110 - KINDEX(1, 467)=15 + KINDEX(1, 467)=16 KINDEX(2, 467)=110 - KINDEX(1, 468)=22 + KINDEX(1, 468)=23 KINDEX(2, 468)=110 - KINDEX(1, 469)=23 + KINDEX(1, 469)=24 KINDEX(2, 469)=110 - KINDEX(1, 470)=24 + KINDEX(1, 470)=25 KINDEX(2, 470)=110 - KINDEX(1, 471)=26 + KINDEX(1, 471)=27 KINDEX(2, 471)=110 - KINDEX(1, 472)=32 + KINDEX(1, 472)=33 KINDEX(2, 472)=110 - KINDEX(1, 473)=40 + KINDEX(1, 473)=41 KINDEX(2, 473)=110 - KINDEX(1, 474)=15 + KINDEX(1, 474)=16 KINDEX(2, 474)=111 - KINDEX(1, 475)=22 + KINDEX(1, 475)=23 KINDEX(2, 475)=111 - KINDEX(1, 476)=23 + KINDEX(1, 476)=24 KINDEX(2, 476)=111 - KINDEX(1, 477)=24 + KINDEX(1, 477)=25 KINDEX(2, 477)=111 - KINDEX(1, 478)=25 + KINDEX(1, 478)=26 KINDEX(2, 478)=111 - KINDEX(1, 479)=31 + KINDEX(1, 479)=32 KINDEX(2, 479)=111 - KINDEX(1, 480)=32 + KINDEX(1, 480)=33 KINDEX(2, 480)=111 - KINDEX(1, 481)=33 + KINDEX(1, 481)=34 KINDEX(2, 481)=111 - KINDEX(1, 482)=39 + KINDEX(1, 482)=40 KINDEX(2, 482)=111 - KINDEX(1, 483)=41 + KINDEX(1, 483)=42 KINDEX(2, 483)=111 - KINDEX(1, 484)=15 + KINDEX(1, 484)=16 KINDEX(2, 484)=112 - KINDEX(1, 485)=22 + KINDEX(1, 485)=23 KINDEX(2, 485)=112 - KINDEX(1, 486)=23 + KINDEX(1, 486)=24 KINDEX(2, 486)=112 - KINDEX(1, 487)=24 + KINDEX(1, 487)=25 KINDEX(2, 487)=112 - KINDEX(1, 488)=31 + KINDEX(1, 488)=32 KINDEX(2, 488)=112 - KINDEX(1, 489)=32 + KINDEX(1, 489)=33 KINDEX(2, 489)=112 - KINDEX(1, 490)=34 + KINDEX(1, 490)=35 KINDEX(2, 490)=112 - KINDEX(1, 491)=39 + KINDEX(1, 491)=40 KINDEX(2, 491)=112 - KINDEX(1, 492)=15 + KINDEX(1, 492)=16 KINDEX(2, 492)=113 - KINDEX(1, 493)=19 + KINDEX(1, 493)=20 KINDEX(2, 493)=113 - KINDEX(1, 494)=22 + KINDEX(1, 494)=23 KINDEX(2, 494)=113 - KINDEX(1, 495)=23 + KINDEX(1, 495)=24 KINDEX(2, 495)=113 - KINDEX(1, 496)=24 + KINDEX(1, 496)=25 KINDEX(2, 496)=113 - KINDEX(1, 497)=25 + KINDEX(1, 497)=26 KINDEX(2, 497)=113 - KINDEX(1, 498)=31 + KINDEX(1, 498)=32 KINDEX(2, 498)=113 - KINDEX(1, 499)=32 + KINDEX(1, 499)=33 KINDEX(2, 499)=113 - KINDEX(1, 500)=35 + KINDEX(1, 500)=36 KINDEX(2, 500)=113 - KINDEX(1, 501)=39 + KINDEX(1, 501)=40 KINDEX(2, 501)=113 - KINDEX(1, 502)=15 + KINDEX(1, 502)=16 KINDEX(2, 502)=114 - KINDEX(1, 503)=25 + KINDEX(1, 503)=26 KINDEX(2, 503)=114 - KINDEX(1, 504)=32 + KINDEX(1, 504)=33 KINDEX(2, 504)=114 - KINDEX(1, 505)=38 + KINDEX(1, 505)=39 KINDEX(2, 505)=114 - KINDEX(1, 506)=39 + KINDEX(1, 506)=40 KINDEX(2, 506)=114 - KINDEX(1, 507)=15 + KINDEX(1, 507)=16 KINDEX(2, 507)=115 - KINDEX(1, 508)=22 + KINDEX(1, 508)=23 KINDEX(2, 508)=115 - KINDEX(1, 509)=23 + KINDEX(1, 509)=24 KINDEX(2, 509)=115 - KINDEX(1, 510)=24 + KINDEX(1, 510)=25 KINDEX(2, 510)=115 - KINDEX(1, 511)=25 + KINDEX(1, 511)=26 KINDEX(2, 511)=115 - KINDEX(1, 512)=31 + KINDEX(1, 512)=32 KINDEX(2, 512)=115 - KINDEX(1, 513)=32 + KINDEX(1, 513)=33 KINDEX(2, 513)=115 - KINDEX(1, 514)=39 + KINDEX(1, 514)=40 KINDEX(2, 514)=115 - KINDEX(1, 515)=41 + KINDEX(1, 515)=42 KINDEX(2, 515)=115 KINDEX(1, 516)=4 KINDEX(2, 516)=116 - KINDEX(1, 517)=15 + KINDEX(1, 517)=16 KINDEX(2, 517)=116 - KINDEX(1, 518)=22 + KINDEX(1, 518)=23 KINDEX(2, 518)=116 - KINDEX(1, 519)=23 + KINDEX(1, 519)=24 KINDEX(2, 519)=116 - KINDEX(1, 520)=24 + KINDEX(1, 520)=25 KINDEX(2, 520)=116 - KINDEX(1, 521)=26 + KINDEX(1, 521)=27 KINDEX(2, 521)=116 - KINDEX(1, 522)=31 + KINDEX(1, 522)=32 KINDEX(2, 522)=116 - KINDEX(1, 523)=32 + KINDEX(1, 523)=33 KINDEX(2, 523)=116 - KINDEX(1, 524)=39 + KINDEX(1, 524)=40 KINDEX(2, 524)=116 - KINDEX(1, 525)=40 + KINDEX(1, 525)=41 KINDEX(2, 525)=116 - KINDEX(1, 526)=15 + KINDEX(1, 526)=16 KINDEX(2, 526)=117 - KINDEX(1, 527)=26 + KINDEX(1, 527)=27 KINDEX(2, 527)=117 - KINDEX(1, 528)=40 + KINDEX(1, 528)=41 KINDEX(2, 528)=117 KINDEX(1, 529)=4 KINDEX(2, 529)=118 - KINDEX(1, 530)=15 + KINDEX(1, 530)=16 KINDEX(2, 530)=118 - KINDEX(1, 531)=22 + KINDEX(1, 531)=23 KINDEX(2, 531)=118 - KINDEX(1, 532)=23 + KINDEX(1, 532)=24 KINDEX(2, 532)=118 - KINDEX(1, 533)=24 + KINDEX(1, 533)=25 KINDEX(2, 533)=118 - KINDEX(1, 534)=26 + KINDEX(1, 534)=27 KINDEX(2, 534)=118 - KINDEX(1, 535)=40 + KINDEX(1, 535)=41 KINDEX(2, 535)=118 KINDEX(1, 536)=4 KINDEX(2, 536)=119 KINDEX(1, 537)=5 KINDEX(2, 537)=119 - KINDEX(1, 538)=15 + KINDEX(1, 538)=16 KINDEX(2, 538)=119 - KINDEX(1, 539)=22 + KINDEX(1, 539)=23 KINDEX(2, 539)=119 - KINDEX(1, 540)=32 + KINDEX(1, 540)=33 KINDEX(2, 540)=119 KINDEX(1, 541)=4 KINDEX(2, 541)=120 KINDEX(1, 542)=5 KINDEX(2, 542)=120 - KINDEX(1, 543)=15 + KINDEX(1, 543)=16 KINDEX(2, 543)=120 - KINDEX(1, 544)=22 + KINDEX(1, 544)=23 KINDEX(2, 544)=120 - KINDEX(1, 545)=23 + KINDEX(1, 545)=24 KINDEX(2, 545)=120 - KINDEX(1, 546)=24 + KINDEX(1, 546)=25 KINDEX(2, 546)=120 - KINDEX(1, 547)=25 + KINDEX(1, 547)=26 KINDEX(2, 547)=120 - KINDEX(1, 548)=32 + KINDEX(1, 548)=33 KINDEX(2, 548)=120 - KINDEX(1, 549)=33 + KINDEX(1, 549)=34 KINDEX(2, 549)=120 - KINDEX(1, 550)=41 + KINDEX(1, 550)=42 KINDEX(2, 550)=120 KINDEX(1, 551)=4 KINDEX(2, 551)=121 KINDEX(1, 552)=5 KINDEX(2, 552)=121 - KINDEX(1, 553)=15 + KINDEX(1, 553)=16 KINDEX(2, 553)=121 - KINDEX(1, 554)=22 + KINDEX(1, 554)=23 KINDEX(2, 554)=121 - KINDEX(1, 555)=23 + KINDEX(1, 555)=24 KINDEX(2, 555)=121 - KINDEX(1, 556)=24 + KINDEX(1, 556)=25 KINDEX(2, 556)=121 - KINDEX(1, 557)=34 + KINDEX(1, 557)=35 KINDEX(2, 557)=121 KINDEX(1, 558)=4 KINDEX(2, 558)=122 KINDEX(1, 559)=5 KINDEX(2, 559)=122 - KINDEX(1, 560)=15 + KINDEX(1, 560)=16 KINDEX(2, 560)=122 - KINDEX(1, 561)=19 + KINDEX(1, 561)=20 KINDEX(2, 561)=122 - KINDEX(1, 562)=22 + KINDEX(1, 562)=23 KINDEX(2, 562)=122 - KINDEX(1, 563)=23 + KINDEX(1, 563)=24 KINDEX(2, 563)=122 - KINDEX(1, 564)=24 + KINDEX(1, 564)=25 KINDEX(2, 564)=122 - KINDEX(1, 565)=25 + KINDEX(1, 565)=26 KINDEX(2, 565)=122 - KINDEX(1, 566)=35 + KINDEX(1, 566)=36 KINDEX(2, 566)=122 KINDEX(1, 567)=4 KINDEX(2, 567)=123 KINDEX(1, 568)=5 KINDEX(2, 568)=123 - KINDEX(1, 569)=15 + KINDEX(1, 569)=16 KINDEX(2, 569)=123 - KINDEX(1, 570)=25 + KINDEX(1, 570)=26 KINDEX(2, 570)=123 - KINDEX(1, 571)=38 + KINDEX(1, 571)=39 KINDEX(2, 571)=123 KINDEX(1, 572)=4 KINDEX(2, 572)=124 KINDEX(1, 573)=5 KINDEX(2, 573)=124 - KINDEX(1, 574)=15 + KINDEX(1, 574)=16 KINDEX(2, 574)=124 - KINDEX(1, 575)=22 + KINDEX(1, 575)=23 KINDEX(2, 575)=124 - KINDEX(1, 576)=23 + KINDEX(1, 576)=24 KINDEX(2, 576)=124 - KINDEX(1, 577)=25 + KINDEX(1, 577)=26 KINDEX(2, 577)=124 - KINDEX(1, 578)=32 + KINDEX(1, 578)=33 KINDEX(2, 578)=124 - KINDEX(1, 579)=39 + KINDEX(1, 579)=40 KINDEX(2, 579)=124 - KINDEX(1, 580)=41 + KINDEX(1, 580)=42 KINDEX(2, 580)=124 KINDEX(1, 581)=4 KINDEX(2, 581)=125 KINDEX(1, 582)=5 KINDEX(2, 582)=125 - KINDEX(1, 583)=15 + KINDEX(1, 583)=16 KINDEX(2, 583)=125 - KINDEX(1, 584)=22 + KINDEX(1, 584)=23 KINDEX(2, 584)=125 - KINDEX(1, 585)=23 + KINDEX(1, 585)=24 KINDEX(2, 585)=125 - KINDEX(1, 586)=24 + KINDEX(1, 586)=25 KINDEX(2, 586)=125 - KINDEX(1, 587)=26 + KINDEX(1, 587)=27 KINDEX(2, 587)=125 - KINDEX(1, 588)=40 + KINDEX(1, 588)=41 KINDEX(2, 588)=125 - KINDEX(1, 589)=15 + KINDEX(1, 589)=16 KINDEX(2, 589)=126 - KINDEX(1, 590)=29 + KINDEX(1, 590)=30 KINDEX(2, 590)=126 - KINDEX(1, 591)=41 + KINDEX(1, 591)=42 KINDEX(2, 591)=126 - KINDEX(1, 592)=15 + KINDEX(1, 592)=16 KINDEX(2, 592)=127 - KINDEX(1, 593)=22 + KINDEX(1, 593)=23 KINDEX(2, 593)=127 - KINDEX(1, 594)=32 + KINDEX(1, 594)=33 KINDEX(2, 594)=127 - KINDEX(1, 595)=41 + KINDEX(1, 595)=42 KINDEX(2, 595)=127 - KINDEX(1, 596)=32 + KINDEX(1, 596)=33 KINDEX(2, 596)=128 - KINDEX(1, 597)=39 + KINDEX(1, 597)=40 KINDEX(2, 597)=128 - KINDEX(1, 598)=41 + KINDEX(1, 598)=42 KINDEX(2, 598)=128 - KINDEX(1, 599)=41 + KINDEX(1, 599)=42 KINDEX(2, 599)=129 KINDEX(1, 600)=3 KINDEX(2, 600)=130 KINDEX(1, 601)=4 KINDEX(2, 601)=130 - KINDEX(1, 602)=41 + KINDEX(1, 602)=42 KINDEX(2, 602)=130 KINDEX(1, 603)=4 KINDEX(2, 603)=131 KINDEX(1, 604)=5 KINDEX(2, 604)=131 - KINDEX(1, 605)=41 + KINDEX(1, 605)=42 KINDEX(2, 605)=131 - KINDEX(1, 606)=12 + KINDEX(1, 606)=13 KINDEX(2, 606)=132 - KINDEX(1, 607)=1 + KINDEX(1, 607)=4 KINDEX(2, 607)=133 - KINDEX(1, 608)=42 + KINDEX(1, 608)=5 KINDEX(2, 608)=133 - KINDEX(1, 609)=2 - KINDEX(2, 609)=134 - KINDEX(1, 610)=43 - KINDEX(2, 610)=134 - KINDEX(1, 611)=3 - KINDEX(2, 611)=135 - KINDEX(1, 612)=44 - KINDEX(2, 612)=135 - KINDEX(1, 613)=4 - KINDEX(2, 613)=136 - KINDEX(1, 614)=45 - KINDEX(2, 614)=136 - KINDEX(1, 615)=5 - KINDEX(2, 615)=137 - KINDEX(1, 616)=46 - KINDEX(2, 616)=137 - KINDEX(1, 617)=6 - KINDEX(2, 617)=138 - KINDEX(1, 618)=47 - KINDEX(2, 618)=138 - KINDEX(1, 619)=7 - KINDEX(2, 619)=139 - KINDEX(1, 620)=48 - KINDEX(2, 620)=139 - KINDEX(1, 621)=8 - KINDEX(2, 621)=140 - KINDEX(1, 622)=49 - KINDEX(2, 622)=140 - KINDEX(1, 623)=9 - KINDEX(2, 623)=141 - KINDEX(1, 624)=50 - KINDEX(2, 624)=141 - KINDEX(1, 625)=10 - KINDEX(2, 625)=142 - KINDEX(1, 626)=51 - KINDEX(2, 626)=142 - KINDEX(1, 627)=14 - KINDEX(2, 627)=143 - KINDEX(1, 628)=52 - KINDEX(2, 628)=143 - KINDEX(1, 629)=15 - KINDEX(2, 629)=144 - KINDEX(1, 630)=53 - KINDEX(2, 630)=144 - KINDEX(1, 631)=54 - KINDEX(2, 631)=145 - KINDEX(1, 632)=11 - KINDEX(2, 632)=146 - KINDEX(1, 633)=55 - KINDEX(2, 633)=146 - KINDEX(1, 634)=12 - KINDEX(2, 634)=147 - KINDEX(1, 635)=56 - KINDEX(2, 635)=147 - KINDEX(1, 636)=22 - KINDEX(2, 636)=148 - KINDEX(1, 637)=57 - KINDEX(2, 637)=148 - KINDEX(1, 638)=30 - KINDEX(2, 638)=149 - KINDEX(1, 639)=58 - KINDEX(2, 639)=149 - KINDEX(1, 640)=31 - KINDEX(2, 640)=150 - KINDEX(1, 641)=59 - KINDEX(2, 641)=150 - KINDEX(1, 642)=32 - KINDEX(2, 642)=151 - KINDEX(1, 643)=60 - KINDEX(2, 643)=151 - KINDEX(1, 644)=28 - KINDEX(2, 644)=152 - KINDEX(1, 645)=61 - KINDEX(2, 645)=152 - KINDEX(1, 646)=1 - KINDEX(2, 646)=153 - KINDEX(1, 647)=42 - KINDEX(2, 647)=153 - KINDEX(1, 648)=2 - KINDEX(2, 648)=154 - KINDEX(1, 649)=43 - KINDEX(2, 649)=154 - KINDEX(1, 650)=3 - KINDEX(2, 650)=155 - KINDEX(1, 651)=44 - KINDEX(2, 651)=155 - KINDEX(1, 652)=4 - KINDEX(2, 652)=156 - KINDEX(1, 653)=45 - KINDEX(2, 653)=156 - KINDEX(1, 654)=5 - KINDEX(2, 654)=157 - KINDEX(1, 655)=46 - KINDEX(2, 655)=157 - KINDEX(1, 656)=6 - KINDEX(2, 656)=158 - KINDEX(1, 657)=47 - KINDEX(2, 657)=158 - KINDEX(1, 658)=7 - KINDEX(2, 658)=159 - KINDEX(1, 659)=48 - KINDEX(2, 659)=159 - KINDEX(1, 660)=8 - KINDEX(2, 660)=160 - KINDEX(1, 661)=49 - KINDEX(2, 661)=160 - KINDEX(1, 662)=9 - KINDEX(2, 662)=161 - KINDEX(1, 663)=50 - KINDEX(2, 663)=161 - KINDEX(1, 664)=10 - KINDEX(2, 664)=162 - KINDEX(1, 665)=51 - KINDEX(2, 665)=162 - KINDEX(1, 666)=14 - KINDEX(2, 666)=163 - KINDEX(1, 667)=52 - KINDEX(2, 667)=163 - KINDEX(1, 668)=15 - KINDEX(2, 668)=164 - KINDEX(1, 669)=53 - KINDEX(2, 669)=164 - KINDEX(1, 670)=54 - KINDEX(2, 670)=165 - KINDEX(1, 671)=11 - KINDEX(2, 671)=166 - KINDEX(1, 672)=55 - KINDEX(2, 672)=166 - KINDEX(1, 673)=12 - KINDEX(2, 673)=167 - KINDEX(1, 674)=56 - KINDEX(2, 674)=167 - KINDEX(1, 675)=22 - KINDEX(2, 675)=168 - KINDEX(1, 676)=57 - KINDEX(2, 676)=168 - KINDEX(1, 677)=30 - KINDEX(2, 677)=169 - KINDEX(1, 678)=58 - KINDEX(2, 678)=169 - KINDEX(1, 679)=31 - KINDEX(2, 679)=170 - KINDEX(1, 680)=59 - KINDEX(2, 680)=170 - KINDEX(1, 681)=32 - KINDEX(2, 681)=171 - KINDEX(1, 682)=60 - KINDEX(2, 682)=171 - KINDEX(1, 683)=28 - KINDEX(2, 683)=172 - KINDEX(1, 684)=61 - KINDEX(2, 684)=172 - KINDEX(1, 685)=1 - KINDEX(2, 685)=173 - KINDEX(1, 686)=67 - KINDEX(2, 686)=173 - KINDEX(1, 687)=2 - KINDEX(2, 687)=174 - KINDEX(1, 688)=68 - KINDEX(2, 688)=174 - KINDEX(1, 689)=3 - KINDEX(2, 689)=175 - KINDEX(1, 690)=69 - KINDEX(2, 690)=175 - KINDEX(1, 691)=4 - KINDEX(2, 691)=176 - KINDEX(1, 692)=70 - KINDEX(2, 692)=176 - KINDEX(1, 693)=5 - KINDEX(2, 693)=177 - KINDEX(1, 694)=71 - KINDEX(2, 694)=177 - KINDEX(1, 695)=6 - KINDEX(2, 695)=178 - KINDEX(1, 696)=72 - KINDEX(2, 696)=178 - KINDEX(1, 697)=7 - KINDEX(2, 697)=179 - KINDEX(1, 698)=73 - KINDEX(2, 698)=179 - KINDEX(1, 699)=8 - KINDEX(2, 699)=180 - KINDEX(1, 700)=74 - KINDEX(2, 700)=180 - KINDEX(1, 701)=9 - KINDEX(2, 701)=181 - KINDEX(1, 702)=75 - KINDEX(2, 702)=181 - KINDEX(1, 703)=10 - KINDEX(2, 703)=182 - KINDEX(1, 704)=76 - KINDEX(2, 704)=182 - KINDEX(1, 705)=14 - KINDEX(2, 705)=183 - KINDEX(1, 706)=77 - KINDEX(2, 706)=183 - KINDEX(1, 707)=15 - KINDEX(2, 707)=184 - KINDEX(1, 708)=78 - KINDEX(2, 708)=184 - KINDEX(1, 709)=79 - KINDEX(2, 709)=185 - KINDEX(1, 710)=11 - KINDEX(2, 710)=186 - KINDEX(1, 711)=80 - KINDEX(2, 711)=186 - KINDEX(1, 712)=12 - KINDEX(2, 712)=187 - KINDEX(1, 713)=81 - KINDEX(2, 713)=187 - KINDEX(1, 714)=22 - KINDEX(2, 714)=188 - KINDEX(1, 715)=82 - KINDEX(2, 715)=188 - KINDEX(1, 716)=30 - KINDEX(2, 716)=189 - KINDEX(1, 717)=83 - KINDEX(2, 717)=189 - KINDEX(1, 718)=31 - KINDEX(2, 718)=190 - KINDEX(1, 719)=84 - KINDEX(2, 719)=190 - KINDEX(1, 720)=32 - KINDEX(2, 720)=191 - KINDEX(1, 721)=85 - KINDEX(2, 721)=191 - KINDEX(1, 722)=28 - KINDEX(2, 722)=192 - KINDEX(1, 723)=86 - KINDEX(2, 723)=192 - KINDEX(1, 724)=1 - KINDEX(2, 724)=193 - KINDEX(1, 725)=67 - KINDEX(2, 725)=193 - KINDEX(1, 726)=2 - KINDEX(2, 726)=194 - KINDEX(1, 727)=68 - KINDEX(2, 727)=194 - KINDEX(1, 728)=3 - KINDEX(2, 728)=195 - KINDEX(1, 729)=69 - KINDEX(2, 729)=195 - KINDEX(1, 730)=4 - KINDEX(2, 730)=196 - KINDEX(1, 731)=70 - KINDEX(2, 731)=196 - KINDEX(1, 732)=5 - KINDEX(2, 732)=197 - KINDEX(1, 733)=71 - KINDEX(2, 733)=197 - KINDEX(1, 734)=6 - KINDEX(2, 734)=198 - KINDEX(1, 735)=72 - KINDEX(2, 735)=198 - KINDEX(1, 736)=7 - KINDEX(2, 736)=199 - KINDEX(1, 737)=73 - KINDEX(2, 737)=199 - KINDEX(1, 738)=8 - KINDEX(2, 738)=200 - KINDEX(1, 739)=74 - KINDEX(2, 739)=200 - KINDEX(1, 740)=9 - KINDEX(2, 740)=201 - KINDEX(1, 741)=75 - KINDEX(2, 741)=201 - KINDEX(1, 742)=10 - KINDEX(2, 742)=202 - KINDEX(1, 743)=76 - KINDEX(2, 743)=202 - KINDEX(1, 744)=14 - KINDEX(2, 744)=203 - KINDEX(1, 745)=77 - KINDEX(2, 745)=203 - KINDEX(1, 746)=15 - KINDEX(2, 746)=204 - KINDEX(1, 747)=78 - KINDEX(2, 747)=204 - KINDEX(1, 748)=79 - KINDEX(2, 748)=205 - KINDEX(1, 749)=11 - KINDEX(2, 749)=206 - KINDEX(1, 750)=80 - KINDEX(2, 750)=206 - KINDEX(1, 751)=12 - KINDEX(2, 751)=207 - KINDEX(1, 752)=81 - KINDEX(2, 752)=207 - KINDEX(1, 753)=22 - KINDEX(2, 753)=208 - KINDEX(1, 754)=82 - KINDEX(2, 754)=208 - KINDEX(1, 755)=30 - KINDEX(2, 755)=209 - KINDEX(1, 756)=83 - KINDEX(2, 756)=209 - KINDEX(1, 757)=31 - KINDEX(2, 757)=210 - KINDEX(1, 758)=84 - KINDEX(2, 758)=210 - KINDEX(1, 759)=32 - KINDEX(2, 759)=211 - KINDEX(1, 760)=85 - KINDEX(2, 760)=211 - KINDEX(1, 761)=28 - KINDEX(2, 761)=212 - KINDEX(1, 762)=86 - KINDEX(2, 762)=212 - KINDEX(1, 763)=43 - KINDEX(2, 763)=213 - KINDEX(1, 764)=52 - KINDEX(2, 764)=213 - KINDEX(1, 765)=43 - KINDEX(2, 765)=214 - KINDEX(1, 766)=52 - KINDEX(2, 766)=214 - KINDEX(1, 767)=52 - KINDEX(2, 767)=215 - KINDEX(1, 768)=53 - KINDEX(2, 768)=215 - KINDEX(1, 769)=43 - KINDEX(2, 769)=216 - KINDEX(1, 770)=52 - KINDEX(2, 770)=216 - KINDEX(1, 771)=53 - KINDEX(2, 771)=216 - KINDEX(1, 772)=43 - KINDEX(2, 772)=217 + KINDEX(1, 609)=11 + KINDEX(2, 609)=133 + KINDEX(1, 610)=12 + KINDEX(2, 610)=133 + KINDEX(1, 611)=11 + KINDEX(2, 611)=134 + KINDEX(1, 612)=12 + KINDEX(2, 612)=134 + KINDEX(1, 613)=11 + KINDEX(2, 613)=135 + KINDEX(1, 614)=12 + KINDEX(2, 614)=135 + KINDEX(1, 615)=15 + KINDEX(2, 615)=135 + KINDEX(1, 616)=1 + KINDEX(2, 616)=136 + KINDEX(1, 617)=43 + KINDEX(2, 617)=136 + KINDEX(1, 618)=2 + KINDEX(2, 618)=137 + KINDEX(1, 619)=44 + KINDEX(2, 619)=137 + KINDEX(1, 620)=3 + KINDEX(2, 620)=138 + KINDEX(1, 621)=45 + KINDEX(2, 621)=138 + KINDEX(1, 622)=4 + KINDEX(2, 622)=139 + KINDEX(1, 623)=46 + KINDEX(2, 623)=139 + KINDEX(1, 624)=5 + KINDEX(2, 624)=140 + KINDEX(1, 625)=47 + KINDEX(2, 625)=140 + KINDEX(1, 626)=6 + KINDEX(2, 626)=141 + KINDEX(1, 627)=48 + KINDEX(2, 627)=141 + KINDEX(1, 628)=7 + KINDEX(2, 628)=142 + KINDEX(1, 629)=49 + KINDEX(2, 629)=142 + KINDEX(1, 630)=8 + KINDEX(2, 630)=143 + KINDEX(1, 631)=50 + KINDEX(2, 631)=143 + KINDEX(1, 632)=9 + KINDEX(2, 632)=144 + KINDEX(1, 633)=51 + KINDEX(2, 633)=144 + KINDEX(1, 634)=10 + KINDEX(2, 634)=145 + KINDEX(1, 635)=52 + KINDEX(2, 635)=145 + KINDEX(1, 636)=15 + KINDEX(2, 636)=146 + KINDEX(1, 637)=53 + KINDEX(2, 637)=146 + KINDEX(1, 638)=16 + KINDEX(2, 638)=147 + KINDEX(1, 639)=54 + KINDEX(2, 639)=147 + KINDEX(1, 640)=55 + KINDEX(2, 640)=148 + KINDEX(1, 641)=12 + KINDEX(2, 641)=149 + KINDEX(1, 642)=56 + KINDEX(2, 642)=149 + KINDEX(1, 643)=13 + KINDEX(2, 643)=150 + KINDEX(1, 644)=57 + KINDEX(2, 644)=150 + KINDEX(1, 645)=23 + KINDEX(2, 645)=151 + KINDEX(1, 646)=58 + KINDEX(2, 646)=151 + KINDEX(1, 647)=31 + KINDEX(2, 647)=152 + KINDEX(1, 648)=59 + KINDEX(2, 648)=152 + KINDEX(1, 649)=32 + KINDEX(2, 649)=153 + KINDEX(1, 650)=60 + KINDEX(2, 650)=153 + KINDEX(1, 651)=33 + KINDEX(2, 651)=154 + KINDEX(1, 652)=61 + KINDEX(2, 652)=154 + KINDEX(1, 653)=29 + KINDEX(2, 653)=155 + KINDEX(1, 654)=62 + KINDEX(2, 654)=155 + KINDEX(1, 655)=1 + KINDEX(2, 655)=156 + KINDEX(1, 656)=43 + KINDEX(2, 656)=156 + KINDEX(1, 657)=2 + KINDEX(2, 657)=157 + KINDEX(1, 658)=44 + KINDEX(2, 658)=157 + KINDEX(1, 659)=3 + KINDEX(2, 659)=158 + KINDEX(1, 660)=45 + KINDEX(2, 660)=158 + KINDEX(1, 661)=4 + KINDEX(2, 661)=159 + KINDEX(1, 662)=46 + KINDEX(2, 662)=159 + KINDEX(1, 663)=5 + KINDEX(2, 663)=160 + KINDEX(1, 664)=47 + KINDEX(2, 664)=160 + KINDEX(1, 665)=6 + KINDEX(2, 665)=161 + KINDEX(1, 666)=48 + KINDEX(2, 666)=161 + KINDEX(1, 667)=7 + KINDEX(2, 667)=162 + KINDEX(1, 668)=49 + KINDEX(2, 668)=162 + KINDEX(1, 669)=8 + KINDEX(2, 669)=163 + KINDEX(1, 670)=50 + KINDEX(2, 670)=163 + KINDEX(1, 671)=9 + KINDEX(2, 671)=164 + KINDEX(1, 672)=51 + KINDEX(2, 672)=164 + KINDEX(1, 673)=10 + KINDEX(2, 673)=165 + KINDEX(1, 674)=52 + KINDEX(2, 674)=165 + KINDEX(1, 675)=15 + KINDEX(2, 675)=166 + KINDEX(1, 676)=53 + KINDEX(2, 676)=166 + KINDEX(1, 677)=16 + KINDEX(2, 677)=167 + KINDEX(1, 678)=54 + KINDEX(2, 678)=167 + KINDEX(1, 679)=55 + KINDEX(2, 679)=168 + KINDEX(1, 680)=12 + KINDEX(2, 680)=169 + KINDEX(1, 681)=56 + KINDEX(2, 681)=169 + KINDEX(1, 682)=13 + KINDEX(2, 682)=170 + KINDEX(1, 683)=57 + KINDEX(2, 683)=170 + KINDEX(1, 684)=23 + KINDEX(2, 684)=171 + KINDEX(1, 685)=58 + KINDEX(2, 685)=171 + KINDEX(1, 686)=31 + KINDEX(2, 686)=172 + KINDEX(1, 687)=59 + KINDEX(2, 687)=172 + KINDEX(1, 688)=32 + KINDEX(2, 688)=173 + KINDEX(1, 689)=60 + KINDEX(2, 689)=173 + KINDEX(1, 690)=33 + KINDEX(2, 690)=174 + KINDEX(1, 691)=61 + KINDEX(2, 691)=174 + KINDEX(1, 692)=29 + KINDEX(2, 692)=175 + KINDEX(1, 693)=62 + KINDEX(2, 693)=175 + KINDEX(1, 694)=1 + KINDEX(2, 694)=176 + KINDEX(1, 695)=68 + KINDEX(2, 695)=176 + KINDEX(1, 696)=2 + KINDEX(2, 696)=177 + KINDEX(1, 697)=69 + KINDEX(2, 697)=177 + KINDEX(1, 698)=3 + KINDEX(2, 698)=178 + KINDEX(1, 699)=70 + KINDEX(2, 699)=178 + KINDEX(1, 700)=4 + KINDEX(2, 700)=179 + KINDEX(1, 701)=71 + KINDEX(2, 701)=179 + KINDEX(1, 702)=5 + KINDEX(2, 702)=180 + KINDEX(1, 703)=72 + KINDEX(2, 703)=180 + KINDEX(1, 704)=6 + KINDEX(2, 704)=181 + KINDEX(1, 705)=73 + KINDEX(2, 705)=181 + KINDEX(1, 706)=7 + KINDEX(2, 706)=182 + KINDEX(1, 707)=74 + KINDEX(2, 707)=182 + KINDEX(1, 708)=8 + KINDEX(2, 708)=183 + KINDEX(1, 709)=75 + KINDEX(2, 709)=183 + KINDEX(1, 710)=9 + KINDEX(2, 710)=184 + KINDEX(1, 711)=76 + KINDEX(2, 711)=184 + KINDEX(1, 712)=10 + KINDEX(2, 712)=185 + KINDEX(1, 713)=77 + KINDEX(2, 713)=185 + KINDEX(1, 714)=15 + KINDEX(2, 714)=186 + KINDEX(1, 715)=78 + KINDEX(2, 715)=186 + KINDEX(1, 716)=16 + KINDEX(2, 716)=187 + KINDEX(1, 717)=79 + KINDEX(2, 717)=187 + KINDEX(1, 718)=80 + KINDEX(2, 718)=188 + KINDEX(1, 719)=12 + KINDEX(2, 719)=189 + KINDEX(1, 720)=81 + KINDEX(2, 720)=189 + KINDEX(1, 721)=13 + KINDEX(2, 721)=190 + KINDEX(1, 722)=82 + KINDEX(2, 722)=190 + KINDEX(1, 723)=23 + KINDEX(2, 723)=191 + KINDEX(1, 724)=83 + KINDEX(2, 724)=191 + KINDEX(1, 725)=31 + KINDEX(2, 725)=192 + KINDEX(1, 726)=84 + KINDEX(2, 726)=192 + KINDEX(1, 727)=32 + KINDEX(2, 727)=193 + KINDEX(1, 728)=85 + KINDEX(2, 728)=193 + KINDEX(1, 729)=33 + KINDEX(2, 729)=194 + KINDEX(1, 730)=86 + KINDEX(2, 730)=194 + KINDEX(1, 731)=29 + KINDEX(2, 731)=195 + KINDEX(1, 732)=87 + KINDEX(2, 732)=195 + KINDEX(1, 733)=1 + KINDEX(2, 733)=196 + KINDEX(1, 734)=68 + KINDEX(2, 734)=196 + KINDEX(1, 735)=2 + KINDEX(2, 735)=197 + KINDEX(1, 736)=69 + KINDEX(2, 736)=197 + KINDEX(1, 737)=3 + KINDEX(2, 737)=198 + KINDEX(1, 738)=70 + KINDEX(2, 738)=198 + KINDEX(1, 739)=4 + KINDEX(2, 739)=199 + KINDEX(1, 740)=71 + KINDEX(2, 740)=199 + KINDEX(1, 741)=5 + KINDEX(2, 741)=200 + KINDEX(1, 742)=72 + KINDEX(2, 742)=200 + KINDEX(1, 743)=6 + KINDEX(2, 743)=201 + KINDEX(1, 744)=73 + KINDEX(2, 744)=201 + KINDEX(1, 745)=7 + KINDEX(2, 745)=202 + KINDEX(1, 746)=74 + KINDEX(2, 746)=202 + KINDEX(1, 747)=8 + KINDEX(2, 747)=203 + KINDEX(1, 748)=75 + KINDEX(2, 748)=203 + KINDEX(1, 749)=9 + KINDEX(2, 749)=204 + KINDEX(1, 750)=76 + KINDEX(2, 750)=204 + KINDEX(1, 751)=10 + KINDEX(2, 751)=205 + KINDEX(1, 752)=77 + KINDEX(2, 752)=205 + KINDEX(1, 753)=15 + KINDEX(2, 753)=206 + KINDEX(1, 754)=78 + KINDEX(2, 754)=206 + KINDEX(1, 755)=16 + KINDEX(2, 755)=207 + KINDEX(1, 756)=79 + KINDEX(2, 756)=207 + KINDEX(1, 757)=80 + KINDEX(2, 757)=208 + KINDEX(1, 758)=12 + KINDEX(2, 758)=209 + KINDEX(1, 759)=81 + KINDEX(2, 759)=209 + KINDEX(1, 760)=13 + KINDEX(2, 760)=210 + KINDEX(1, 761)=82 + KINDEX(2, 761)=210 + KINDEX(1, 762)=23 + KINDEX(2, 762)=211 + KINDEX(1, 763)=83 + KINDEX(2, 763)=211 + KINDEX(1, 764)=31 + KINDEX(2, 764)=212 + KINDEX(1, 765)=84 + KINDEX(2, 765)=212 + KINDEX(1, 766)=32 + KINDEX(2, 766)=213 + KINDEX(1, 767)=85 + KINDEX(2, 767)=213 + KINDEX(1, 768)=33 + KINDEX(2, 768)=214 + KINDEX(1, 769)=86 + KINDEX(2, 769)=214 + KINDEX(1, 770)=29 + KINDEX(2, 770)=215 + KINDEX(1, 771)=87 + KINDEX(2, 771)=215 + KINDEX(1, 772)=44 + KINDEX(2, 772)=216 KINDEX(1, 773)=53 - KINDEX(2, 773)=217 - KINDEX(1, 774)=42 - KINDEX(2, 774)=218 - KINDEX(1, 775)=52 - KINDEX(2, 775)=218 + KINDEX(2, 773)=216 + KINDEX(1, 774)=44 + KINDEX(2, 774)=217 + KINDEX(1, 775)=53 + KINDEX(2, 775)=217 KINDEX(1, 776)=53 KINDEX(2, 776)=218 - KINDEX(1, 777)=52 - KINDEX(2, 777)=219 - KINDEX(1, 778)=55 + KINDEX(1, 777)=54 + KINDEX(2, 777)=218 + KINDEX(1, 778)=44 KINDEX(2, 778)=219 - KINDEX(1, 779)=62 + KINDEX(1, 779)=53 KINDEX(2, 779)=219 - KINDEX(1, 780)=45 - KINDEX(2, 780)=220 - KINDEX(1, 781)=48 + KINDEX(1, 780)=54 + KINDEX(2, 780)=219 + KINDEX(1, 781)=44 KINDEX(2, 781)=220 - KINDEX(1, 782)=52 + KINDEX(1, 782)=54 KINDEX(2, 782)=220 - KINDEX(1, 783)=45 + KINDEX(1, 783)=43 KINDEX(2, 783)=221 - KINDEX(1, 784)=50 + KINDEX(1, 784)=53 KINDEX(2, 784)=221 - KINDEX(1, 785)=53 + KINDEX(1, 785)=54 KINDEX(2, 785)=221 - KINDEX(1, 786)=45 + KINDEX(1, 786)=53 KINDEX(2, 786)=222 - KINDEX(1, 787)=50 + KINDEX(1, 787)=56 KINDEX(2, 787)=222 - KINDEX(1, 788)=53 + KINDEX(1, 788)=63 KINDEX(2, 788)=222 - KINDEX(1, 789)=48 + KINDEX(1, 789)=46 KINDEX(2, 789)=223 - KINDEX(1, 790)=50 + KINDEX(1, 790)=49 KINDEX(2, 790)=223 - KINDEX(1, 791)=49 - KINDEX(2, 791)=224 - KINDEX(1, 792)=50 + KINDEX(1, 791)=53 + KINDEX(2, 791)=223 + KINDEX(1, 792)=46 KINDEX(2, 792)=224 - KINDEX(1, 793)=55 + KINDEX(1, 793)=51 KINDEX(2, 793)=224 - KINDEX(1, 794)=56 + KINDEX(1, 794)=54 KINDEX(2, 794)=224 - KINDEX(1, 795)=45 + KINDEX(1, 795)=46 KINDEX(2, 795)=225 - KINDEX(1, 796)=49 + KINDEX(1, 796)=51 KINDEX(2, 796)=225 - KINDEX(1, 797)=52 + KINDEX(1, 797)=54 KINDEX(2, 797)=225 - KINDEX(1, 798)=47 + KINDEX(1, 798)=49 KINDEX(2, 798)=226 - KINDEX(1, 799)=49 + KINDEX(1, 799)=51 KINDEX(2, 799)=226 - KINDEX(1, 800)=46 + KINDEX(1, 800)=50 KINDEX(2, 800)=227 - KINDEX(1, 801)=49 + KINDEX(1, 801)=51 KINDEX(2, 801)=227 KINDEX(1, 802)=56 KINDEX(2, 802)=227 - KINDEX(1, 803)=63 + KINDEX(1, 803)=57 KINDEX(2, 803)=227 KINDEX(1, 804)=46 KINDEX(2, 804)=228 - KINDEX(1, 805)=49 + KINDEX(1, 805)=50 KINDEX(2, 805)=228 - KINDEX(1, 806)=55 + KINDEX(1, 806)=53 KINDEX(2, 806)=228 - KINDEX(1, 807)=62 - KINDEX(2, 807)=228 - KINDEX(1, 808)=53 + KINDEX(1, 807)=48 + KINDEX(2, 807)=229 + KINDEX(1, 808)=50 KINDEX(2, 808)=229 - KINDEX(1, 809)=57 - KINDEX(2, 809)=229 - KINDEX(1, 810)=60 - KINDEX(2, 810)=229 - KINDEX(1, 811)=55 + KINDEX(1, 809)=47 + KINDEX(2, 809)=230 + KINDEX(1, 810)=50 + KINDEX(2, 810)=230 + KINDEX(1, 811)=57 KINDEX(2, 811)=230 - KINDEX(1, 812)=60 + KINDEX(1, 812)=64 KINDEX(2, 812)=230 - KINDEX(1, 813)=61 - KINDEX(2, 813)=230 - KINDEX(1, 814)=62 - KINDEX(2, 814)=230 - KINDEX(1, 815)=52 + KINDEX(1, 813)=47 + KINDEX(2, 813)=231 + KINDEX(1, 814)=50 + KINDEX(2, 814)=231 + KINDEX(1, 815)=56 KINDEX(2, 815)=231 - KINDEX(1, 816)=53 + KINDEX(1, 816)=63 KINDEX(2, 816)=231 - KINDEX(1, 817)=57 - KINDEX(2, 817)=231 + KINDEX(1, 817)=54 + KINDEX(2, 817)=232 KINDEX(1, 818)=58 - KINDEX(2, 818)=231 - KINDEX(1, 819)=52 + KINDEX(2, 818)=232 + KINDEX(1, 819)=61 KINDEX(2, 819)=232 - KINDEX(1, 820)=53 - KINDEX(2, 820)=232 - KINDEX(1, 821)=54 - KINDEX(2, 821)=232 - KINDEX(1, 822)=58 - KINDEX(2, 822)=232 - KINDEX(1, 823)=55 + KINDEX(1, 820)=56 + KINDEX(2, 820)=233 + KINDEX(1, 821)=61 + KINDEX(2, 821)=233 + KINDEX(1, 822)=62 + KINDEX(2, 822)=233 + KINDEX(1, 823)=63 KINDEX(2, 823)=233 - KINDEX(1, 824)=57 - KINDEX(2, 824)=233 - KINDEX(1, 825)=66 - KINDEX(2, 825)=233 - KINDEX(1, 826)=55 + KINDEX(1, 824)=53 + KINDEX(2, 824)=234 + KINDEX(1, 825)=54 + KINDEX(2, 825)=234 + KINDEX(1, 826)=58 KINDEX(2, 826)=234 - KINDEX(1, 827)=57 + KINDEX(1, 827)=59 KINDEX(2, 827)=234 - KINDEX(1, 828)=66 - KINDEX(2, 828)=234 - KINDEX(1, 829)=52 + KINDEX(1, 828)=53 + KINDEX(2, 828)=235 + KINDEX(1, 829)=54 KINDEX(2, 829)=235 - KINDEX(1, 830)=53 + KINDEX(1, 830)=55 KINDEX(2, 830)=235 - KINDEX(1, 831)=55 + KINDEX(1, 831)=59 KINDEX(2, 831)=235 - KINDEX(1, 832)=58 - KINDEX(2, 832)=235 - KINDEX(1, 833)=66 - KINDEX(2, 833)=235 - KINDEX(1, 834)=62 + KINDEX(1, 832)=56 + KINDEX(2, 832)=236 + KINDEX(1, 833)=58 + KINDEX(2, 833)=236 + KINDEX(1, 834)=67 KINDEX(2, 834)=236 - KINDEX(1, 835)=64 - KINDEX(2, 835)=236 - KINDEX(1, 836)=53 + KINDEX(1, 835)=56 + KINDEX(2, 835)=237 + KINDEX(1, 836)=58 KINDEX(2, 836)=237 - KINDEX(1, 837)=64 + KINDEX(1, 837)=67 KINDEX(2, 837)=237 - KINDEX(1, 838)=65 - KINDEX(2, 838)=237 - KINDEX(1, 839)=63 + KINDEX(1, 838)=53 + KINDEX(2, 838)=238 + KINDEX(1, 839)=54 KINDEX(2, 839)=238 - KINDEX(1, 840)=64 + KINDEX(1, 840)=56 KINDEX(2, 840)=238 - KINDEX(1, 841)=55 - KINDEX(2, 841)=239 - KINDEX(1, 842)=56 - KINDEX(2, 842)=239 - KINDEX(1, 843)=65 + KINDEX(1, 841)=59 + KINDEX(2, 841)=238 + KINDEX(1, 842)=67 + KINDEX(2, 842)=238 + KINDEX(1, 843)=63 KINDEX(2, 843)=239 - KINDEX(1, 844)=52 - KINDEX(2, 844)=240 - KINDEX(1, 845)=56 + KINDEX(1, 844)=65 + KINDEX(2, 844)=239 + KINDEX(1, 845)=54 KINDEX(2, 845)=240 - KINDEX(1, 846)=63 + KINDEX(1, 846)=65 KINDEX(2, 846)=240 - KINDEX(1, 847)=42 - KINDEX(2, 847)=241 - KINDEX(1, 848)=55 + KINDEX(1, 847)=66 + KINDEX(2, 847)=240 + KINDEX(1, 848)=64 KINDEX(2, 848)=241 - KINDEX(1, 849)=56 + KINDEX(1, 849)=65 KINDEX(2, 849)=241 - KINDEX(1, 850)=43 + KINDEX(1, 850)=56 KINDEX(2, 850)=242 - KINDEX(1, 851)=55 + KINDEX(1, 851)=57 KINDEX(2, 851)=242 - KINDEX(1, 852)=56 + KINDEX(1, 852)=66 KINDEX(2, 852)=242 - KINDEX(1, 853)=68 + KINDEX(1, 853)=53 KINDEX(2, 853)=243 - KINDEX(1, 854)=77 + KINDEX(1, 854)=57 KINDEX(2, 854)=243 - KINDEX(1, 855)=68 - KINDEX(2, 855)=244 - KINDEX(1, 856)=77 + KINDEX(1, 855)=64 + KINDEX(2, 855)=243 + KINDEX(1, 856)=43 KINDEX(2, 856)=244 - KINDEX(1, 857)=77 - KINDEX(2, 857)=245 - KINDEX(1, 858)=78 - KINDEX(2, 858)=245 - KINDEX(1, 859)=68 - KINDEX(2, 859)=246 - KINDEX(1, 860)=77 - KINDEX(2, 860)=246 - KINDEX(1, 861)=78 - KINDEX(2, 861)=246 - KINDEX(1, 862)=68 - KINDEX(2, 862)=247 + KINDEX(1, 857)=56 + KINDEX(2, 857)=244 + KINDEX(1, 858)=57 + KINDEX(2, 858)=244 + KINDEX(1, 859)=44 + KINDEX(2, 859)=245 + KINDEX(1, 860)=56 + KINDEX(2, 860)=245 + KINDEX(1, 861)=57 + KINDEX(2, 861)=245 + KINDEX(1, 862)=69 + KINDEX(2, 862)=246 KINDEX(1, 863)=78 - KINDEX(2, 863)=247 - KINDEX(1, 864)=67 - KINDEX(2, 864)=248 - KINDEX(1, 865)=77 - KINDEX(2, 865)=248 + KINDEX(2, 863)=246 + KINDEX(1, 864)=69 + KINDEX(2, 864)=247 + KINDEX(1, 865)=78 + KINDEX(2, 865)=247 KINDEX(1, 866)=78 KINDEX(2, 866)=248 - KINDEX(1, 867)=77 - KINDEX(2, 867)=249 - KINDEX(1, 868)=80 + KINDEX(1, 867)=79 + KINDEX(2, 867)=248 + KINDEX(1, 868)=69 KINDEX(2, 868)=249 - KINDEX(1, 869)=87 + KINDEX(1, 869)=78 KINDEX(2, 869)=249 - KINDEX(1, 870)=70 - KINDEX(2, 870)=250 - KINDEX(1, 871)=73 + KINDEX(1, 870)=79 + KINDEX(2, 870)=249 + KINDEX(1, 871)=69 KINDEX(2, 871)=250 - KINDEX(1, 872)=77 + KINDEX(1, 872)=79 KINDEX(2, 872)=250 - KINDEX(1, 873)=70 + KINDEX(1, 873)=68 KINDEX(2, 873)=251 - KINDEX(1, 874)=75 + KINDEX(1, 874)=78 KINDEX(2, 874)=251 - KINDEX(1, 875)=78 + KINDEX(1, 875)=79 KINDEX(2, 875)=251 - KINDEX(1, 876)=70 + KINDEX(1, 876)=78 KINDEX(2, 876)=252 - KINDEX(1, 877)=75 + KINDEX(1, 877)=81 KINDEX(2, 877)=252 - KINDEX(1, 878)=78 + KINDEX(1, 878)=88 KINDEX(2, 878)=252 - KINDEX(1, 879)=73 + KINDEX(1, 879)=71 KINDEX(2, 879)=253 - KINDEX(1, 880)=75 + KINDEX(1, 880)=74 KINDEX(2, 880)=253 - KINDEX(1, 881)=74 - KINDEX(2, 881)=254 - KINDEX(1, 882)=75 + KINDEX(1, 881)=78 + KINDEX(2, 881)=253 + KINDEX(1, 882)=71 KINDEX(2, 882)=254 - KINDEX(1, 883)=80 + KINDEX(1, 883)=76 KINDEX(2, 883)=254 - KINDEX(1, 884)=81 + KINDEX(1, 884)=79 KINDEX(2, 884)=254 - KINDEX(1, 885)=70 + KINDEX(1, 885)=71 KINDEX(2, 885)=255 - KINDEX(1, 886)=74 + KINDEX(1, 886)=76 KINDEX(2, 886)=255 - KINDEX(1, 887)=77 + KINDEX(1, 887)=79 KINDEX(2, 887)=255 - KINDEX(1, 888)=72 + KINDEX(1, 888)=74 KINDEX(2, 888)=256 - KINDEX(1, 889)=74 + KINDEX(1, 889)=76 KINDEX(2, 889)=256 - KINDEX(1, 890)=71 + KINDEX(1, 890)=75 KINDEX(2, 890)=257 - KINDEX(1, 891)=74 + KINDEX(1, 891)=76 KINDEX(2, 891)=257 KINDEX(1, 892)=81 KINDEX(2, 892)=257 - KINDEX(1, 893)=88 + KINDEX(1, 893)=82 KINDEX(2, 893)=257 KINDEX(1, 894)=71 KINDEX(2, 894)=258 - KINDEX(1, 895)=74 + KINDEX(1, 895)=75 KINDEX(2, 895)=258 - KINDEX(1, 896)=80 + KINDEX(1, 896)=78 KINDEX(2, 896)=258 - KINDEX(1, 897)=87 - KINDEX(2, 897)=258 - KINDEX(1, 898)=78 + KINDEX(1, 897)=73 + KINDEX(2, 897)=259 + KINDEX(1, 898)=75 KINDEX(2, 898)=259 - KINDEX(1, 899)=82 - KINDEX(2, 899)=259 - KINDEX(1, 900)=85 - KINDEX(2, 900)=259 - KINDEX(1, 901)=80 + KINDEX(1, 899)=72 + KINDEX(2, 899)=260 + KINDEX(1, 900)=75 + KINDEX(2, 900)=260 + KINDEX(1, 901)=82 KINDEX(2, 901)=260 - KINDEX(1, 902)=85 + KINDEX(1, 902)=89 KINDEX(2, 902)=260 - KINDEX(1, 903)=86 - KINDEX(2, 903)=260 - KINDEX(1, 904)=87 - KINDEX(2, 904)=260 - KINDEX(1, 905)=77 + KINDEX(1, 903)=72 + KINDEX(2, 903)=261 + KINDEX(1, 904)=75 + KINDEX(2, 904)=261 + KINDEX(1, 905)=81 KINDEX(2, 905)=261 - KINDEX(1, 906)=78 + KINDEX(1, 906)=88 KINDEX(2, 906)=261 - KINDEX(1, 907)=82 - KINDEX(2, 907)=261 + KINDEX(1, 907)=79 + KINDEX(2, 907)=262 KINDEX(1, 908)=83 - KINDEX(2, 908)=261 - KINDEX(1, 909)=77 + KINDEX(2, 908)=262 + KINDEX(1, 909)=86 KINDEX(2, 909)=262 - KINDEX(1, 910)=78 - KINDEX(2, 910)=262 - KINDEX(1, 911)=79 - KINDEX(2, 911)=262 - KINDEX(1, 912)=83 - KINDEX(2, 912)=262 - KINDEX(1, 913)=80 + KINDEX(1, 910)=81 + KINDEX(2, 910)=263 + KINDEX(1, 911)=86 + KINDEX(2, 911)=263 + KINDEX(1, 912)=87 + KINDEX(2, 912)=263 + KINDEX(1, 913)=88 KINDEX(2, 913)=263 - KINDEX(1, 914)=82 - KINDEX(2, 914)=263 - KINDEX(1, 915)=91 - KINDEX(2, 915)=263 - KINDEX(1, 916)=80 + KINDEX(1, 914)=78 + KINDEX(2, 914)=264 + KINDEX(1, 915)=79 + KINDEX(2, 915)=264 + KINDEX(1, 916)=83 KINDEX(2, 916)=264 - KINDEX(1, 917)=82 + KINDEX(1, 917)=84 KINDEX(2, 917)=264 - KINDEX(1, 918)=91 - KINDEX(2, 918)=264 - KINDEX(1, 919)=77 + KINDEX(1, 918)=78 + KINDEX(2, 918)=265 + KINDEX(1, 919)=79 KINDEX(2, 919)=265 - KINDEX(1, 920)=78 + KINDEX(1, 920)=80 KINDEX(2, 920)=265 - KINDEX(1, 921)=80 + KINDEX(1, 921)=84 KINDEX(2, 921)=265 - KINDEX(1, 922)=83 - KINDEX(2, 922)=265 - KINDEX(1, 923)=91 - KINDEX(2, 923)=265 - KINDEX(1, 924)=87 + KINDEX(1, 922)=81 + KINDEX(2, 922)=266 + KINDEX(1, 923)=83 + KINDEX(2, 923)=266 + KINDEX(1, 924)=92 KINDEX(2, 924)=266 - KINDEX(1, 925)=89 - KINDEX(2, 925)=266 - KINDEX(1, 926)=78 + KINDEX(1, 925)=81 + KINDEX(2, 925)=267 + KINDEX(1, 926)=83 KINDEX(2, 926)=267 - KINDEX(1, 927)=89 + KINDEX(1, 927)=92 KINDEX(2, 927)=267 - KINDEX(1, 928)=90 - KINDEX(2, 928)=267 - KINDEX(1, 929)=88 + KINDEX(1, 928)=78 + KINDEX(2, 928)=268 + KINDEX(1, 929)=79 KINDEX(2, 929)=268 - KINDEX(1, 930)=89 + KINDEX(1, 930)=81 KINDEX(2, 930)=268 - KINDEX(1, 931)=80 - KINDEX(2, 931)=269 - KINDEX(1, 932)=81 - KINDEX(2, 932)=269 - KINDEX(1, 933)=90 + KINDEX(1, 931)=84 + KINDEX(2, 931)=268 + KINDEX(1, 932)=92 + KINDEX(2, 932)=268 + KINDEX(1, 933)=88 KINDEX(2, 933)=269 - KINDEX(1, 934)=77 - KINDEX(2, 934)=270 - KINDEX(1, 935)=81 + KINDEX(1, 934)=90 + KINDEX(2, 934)=269 + KINDEX(1, 935)=79 KINDEX(2, 935)=270 - KINDEX(1, 936)=88 + KINDEX(1, 936)=90 KINDEX(2, 936)=270 - KINDEX(1, 937)=67 - KINDEX(2, 937)=271 - KINDEX(1, 938)=80 + KINDEX(1, 937)=91 + KINDEX(2, 937)=270 + KINDEX(1, 938)=89 KINDEX(2, 938)=271 - KINDEX(1, 939)=81 + KINDEX(1, 939)=90 KINDEX(2, 939)=271 - KINDEX(1, 940)=68 + KINDEX(1, 940)=81 KINDEX(2, 940)=272 - KINDEX(1, 941)=80 + KINDEX(1, 941)=82 KINDEX(2, 941)=272 - KINDEX(1, 942)=81 + KINDEX(1, 942)=91 KINDEX(2, 942)=272 + KINDEX(1, 943)=78 + KINDEX(2, 943)=273 + KINDEX(1, 944)=82 + KINDEX(2, 944)=273 + KINDEX(1, 945)=89 + KINDEX(2, 945)=273 + KINDEX(1, 946)=68 + KINDEX(2, 946)=274 + KINDEX(1, 947)=81 + KINDEX(2, 947)=274 + KINDEX(1, 948)=82 + KINDEX(2, 948)=274 + KINDEX(1, 949)=69 + KINDEX(2, 949)=275 + KINDEX(1, 950)=81 + KINDEX(2, 950)=275 + KINDEX(1, 951)=82 + KINDEX(2, 951)=275 RETURN END SUBROUTINE CH_NONZEROTERMS_AQ !! @@ -37307,7 +37992,7 @@ END SUBROUTINE CH_NONZEROTERMS_AQ !! !! EXTERNAL !! -------- -use mode_msg +!! none !! !! IMPLICIT ARGUMENTS !! ------------------ @@ -37317,8 +38002,8 @@ use mode_msg !! ------------------ IMPLICIT NONE ! check if output array is large enough -IF (KINDEXDIM.LT.606) THEN - call Print_msg( NVERB_FATAL, 'GEN', 'CH_NONZEROTERMS_GAZ', 'array KINDEX is too small' ) +IF (KINDEXDIM.LT.615) THEN + STOP 'CH_NONZEROTERMS ERROR: array KINDEX is too small!' END IF KINDEX(1, 1)=3 KINDEX(2, 1)=1 @@ -37332,13 +38017,13 @@ END IF KINDEX(2, 5)=4 KINDEX(1, 6)=7 KINDEX(2, 6)=4 - KINDEX(1, 7)=14 + KINDEX(1, 7)=15 KINDEX(2, 7)=4 KINDEX(1, 8)=4 KINDEX(2, 8)=5 KINDEX(1, 9)=8 KINDEX(2, 9)=5 - KINDEX(1, 10)=14 + KINDEX(1, 10)=15 KINDEX(2, 10)=5 KINDEX(1, 11)=4 KINDEX(2, 11)=6 @@ -37346,9 +38031,9 @@ END IF KINDEX(2, 12)=6 KINDEX(1, 13)=9 KINDEX(2, 13)=6 - KINDEX(1, 14)=14 + KINDEX(1, 14)=15 KINDEX(2, 14)=6 - KINDEX(1, 15)=15 + KINDEX(1, 15)=16 KINDEX(2, 15)=6 KINDEX(1, 16)=3 KINDEX(2, 16)=7 @@ -37360,105 +38045,105 @@ END IF KINDEX(2, 19)=8 KINDEX(1, 20)=2 KINDEX(2, 20)=9 - KINDEX(1, 21)=14 + KINDEX(1, 21)=15 KINDEX(2, 21)=9 - KINDEX(1, 22)=13 + KINDEX(1, 22)=14 KINDEX(2, 22)=10 - KINDEX(1, 23)=22 + KINDEX(1, 23)=23 KINDEX(2, 23)=10 - KINDEX(1, 24)=13 + KINDEX(1, 24)=14 KINDEX(2, 24)=11 - KINDEX(1, 25)=15 + KINDEX(1, 25)=16 KINDEX(2, 25)=11 - KINDEX(1, 26)=22 + KINDEX(1, 26)=23 KINDEX(2, 26)=11 - KINDEX(1, 27)=13 + KINDEX(1, 27)=14 KINDEX(2, 27)=12 - KINDEX(1, 28)=15 + KINDEX(1, 28)=16 KINDEX(2, 28)=12 - KINDEX(1, 29)=23 + KINDEX(1, 29)=24 KINDEX(2, 29)=12 - KINDEX(1, 30)=32 + KINDEX(1, 30)=33 KINDEX(2, 30)=12 - KINDEX(1, 31)=14 + KINDEX(1, 31)=15 KINDEX(2, 31)=13 - KINDEX(1, 32)=15 + KINDEX(1, 32)=16 KINDEX(2, 32)=13 - KINDEX(1, 33)=22 + KINDEX(1, 33)=23 KINDEX(2, 33)=13 - KINDEX(1, 34)=28 + KINDEX(1, 34)=29 KINDEX(2, 34)=13 - KINDEX(1, 35)=14 + KINDEX(1, 35)=15 KINDEX(2, 35)=14 - KINDEX(1, 36)=15 + KINDEX(1, 36)=16 KINDEX(2, 36)=14 - KINDEX(1, 37)=23 + KINDEX(1, 37)=24 KINDEX(2, 37)=14 - KINDEX(1, 38)=29 + KINDEX(1, 38)=30 KINDEX(2, 38)=14 - KINDEX(1, 39)=32 + KINDEX(1, 39)=33 KINDEX(2, 39)=14 - KINDEX(1, 40)=24 + KINDEX(1, 40)=25 KINDEX(2, 40)=15 - KINDEX(1, 41)=33 + KINDEX(1, 41)=34 KINDEX(2, 41)=15 - KINDEX(1, 42)=39 + KINDEX(1, 42)=40 KINDEX(2, 42)=15 - KINDEX(1, 43)=13 + KINDEX(1, 43)=14 KINDEX(2, 43)=16 - KINDEX(1, 44)=15 + KINDEX(1, 44)=16 KINDEX(2, 44)=16 - KINDEX(1, 45)=22 + KINDEX(1, 45)=23 KINDEX(2, 45)=16 - KINDEX(1, 46)=25 + KINDEX(1, 46)=26 KINDEX(2, 46)=16 - KINDEX(1, 47)=39 + KINDEX(1, 47)=40 KINDEX(2, 47)=16 KINDEX(1, 48)=4 KINDEX(2, 48)=17 - KINDEX(1, 49)=15 + KINDEX(1, 49)=16 KINDEX(2, 49)=17 - KINDEX(1, 50)=23 + KINDEX(1, 50)=24 KINDEX(2, 50)=17 - KINDEX(1, 51)=24 + KINDEX(1, 51)=25 KINDEX(2, 51)=17 - KINDEX(1, 52)=26 + KINDEX(1, 52)=27 KINDEX(2, 52)=17 KINDEX(1, 53)=1 KINDEX(2, 53)=18 KINDEX(1, 54)=1 KINDEX(2, 54)=19 - KINDEX(1, 55)=14 + KINDEX(1, 55)=15 KINDEX(2, 55)=22 KINDEX(1, 56)=1 KINDEX(2, 56)=23 - KINDEX(1, 57)=14 + KINDEX(1, 57)=15 KINDEX(2, 57)=23 - KINDEX(1, 58)=15 + KINDEX(1, 58)=16 KINDEX(2, 58)=23 KINDEX(1, 59)=1 KINDEX(2, 59)=24 - KINDEX(1, 60)=14 + KINDEX(1, 60)=15 KINDEX(2, 60)=24 - KINDEX(1, 61)=15 + KINDEX(1, 61)=16 KINDEX(2, 61)=24 - KINDEX(1, 62)=14 + KINDEX(1, 62)=15 KINDEX(2, 62)=25 - KINDEX(1, 63)=15 + KINDEX(1, 63)=16 KINDEX(2, 63)=25 KINDEX(1, 64)=2 KINDEX(2, 64)=26 - KINDEX(1, 65)=14 + KINDEX(1, 65)=15 KINDEX(2, 65)=26 - KINDEX(1, 66)=15 + KINDEX(1, 66)=16 KINDEX(2, 66)=26 KINDEX(1, 67)=2 KINDEX(2, 67)=27 - KINDEX(1, 68)=15 + KINDEX(1, 68)=16 KINDEX(2, 68)=27 KINDEX(1, 69)=2 KINDEX(2, 69)=28 - KINDEX(1, 70)=15 + KINDEX(1, 70)=16 KINDEX(2, 70)=28 KINDEX(1, 71)=3 KINDEX(2, 71)=29 @@ -37476,41 +38161,41 @@ END IF KINDEX(2, 77)=32 KINDEX(1, 78)=7 KINDEX(2, 78)=32 - KINDEX(1, 79)=14 + KINDEX(1, 79)=15 KINDEX(2, 79)=32 KINDEX(1, 80)=4 KINDEX(2, 80)=33 KINDEX(1, 81)=8 KINDEX(2, 81)=33 - KINDEX(1, 82)=14 + KINDEX(1, 82)=15 KINDEX(2, 82)=33 KINDEX(1, 83)=4 KINDEX(2, 83)=34 KINDEX(1, 84)=5 KINDEX(2, 84)=34 - KINDEX(1, 85)=14 + KINDEX(1, 85)=15 KINDEX(2, 85)=34 - KINDEX(1, 86)=15 + KINDEX(1, 86)=16 KINDEX(2, 86)=34 KINDEX(1, 87)=3 KINDEX(2, 87)=35 KINDEX(1, 88)=4 KINDEX(2, 88)=35 - KINDEX(1, 89)=14 + KINDEX(1, 89)=15 KINDEX(2, 89)=35 - KINDEX(1, 90)=15 + KINDEX(1, 90)=16 KINDEX(2, 90)=35 KINDEX(1, 91)=4 KINDEX(2, 91)=36 KINDEX(1, 92)=9 KINDEX(2, 92)=36 - KINDEX(1, 93)=15 + KINDEX(1, 93)=16 KINDEX(2, 93)=36 KINDEX(1, 94)=4 KINDEX(2, 94)=37 KINDEX(1, 95)=9 KINDEX(2, 95)=37 - KINDEX(1, 96)=15 + KINDEX(1, 96)=16 KINDEX(2, 96)=37 KINDEX(1, 97)=4 KINDEX(2, 97)=38 @@ -37518,27 +38203,27 @@ END IF KINDEX(2, 98)=38 KINDEX(1, 99)=8 KINDEX(2, 99)=38 - KINDEX(1, 100)=14 + KINDEX(1, 100)=15 KINDEX(2, 100)=38 - KINDEX(1, 101)=15 + KINDEX(1, 101)=16 KINDEX(2, 101)=38 KINDEX(1, 102)=4 KINDEX(2, 102)=39 KINDEX(1, 103)=7 KINDEX(2, 103)=39 - KINDEX(1, 104)=14 + KINDEX(1, 104)=15 KINDEX(2, 104)=39 KINDEX(1, 105)=5 KINDEX(2, 105)=40 KINDEX(1, 106)=8 KINDEX(2, 106)=40 - KINDEX(1, 107)=14 + KINDEX(1, 107)=15 KINDEX(2, 107)=40 KINDEX(1, 108)=4 KINDEX(2, 108)=41 KINDEX(1, 109)=9 KINDEX(2, 109)=41 - KINDEX(1, 110)=14 + KINDEX(1, 110)=15 KINDEX(2, 110)=41 KINDEX(1, 111)=1 KINDEX(2, 111)=42 @@ -37586,217 +38271,217 @@ END IF KINDEX(2, 132)=49 KINDEX(1, 133)=10 KINDEX(2, 133)=50 - KINDEX(1, 134)=14 + KINDEX(1, 134)=15 KINDEX(2, 134)=50 - KINDEX(1, 135)=14 + KINDEX(1, 135)=15 KINDEX(2, 135)=51 - KINDEX(1, 136)=15 + KINDEX(1, 136)=16 KINDEX(2, 136)=51 - KINDEX(1, 137)=11 + KINDEX(1, 137)=12 KINDEX(2, 137)=52 - KINDEX(1, 138)=12 + KINDEX(1, 138)=13 KINDEX(2, 138)=52 - KINDEX(1, 139)=14 + KINDEX(1, 139)=15 KINDEX(2, 139)=52 - KINDEX(1, 140)=15 + KINDEX(1, 140)=16 KINDEX(2, 140)=52 - KINDEX(1, 141)=13 + KINDEX(1, 141)=14 KINDEX(2, 141)=53 - KINDEX(1, 142)=14 + KINDEX(1, 142)=15 KINDEX(2, 142)=53 - KINDEX(1, 143)=15 + KINDEX(1, 143)=16 KINDEX(2, 143)=53 - KINDEX(1, 144)=13 + KINDEX(1, 144)=14 KINDEX(2, 144)=54 - KINDEX(1, 145)=14 + KINDEX(1, 145)=15 KINDEX(2, 145)=54 - KINDEX(1, 146)=15 + KINDEX(1, 146)=16 KINDEX(2, 146)=54 - KINDEX(1, 147)=19 + KINDEX(1, 147)=20 KINDEX(2, 147)=54 - KINDEX(1, 148)=20 + KINDEX(1, 148)=21 KINDEX(2, 148)=54 - KINDEX(1, 149)=22 + KINDEX(1, 149)=23 KINDEX(2, 149)=54 - KINDEX(1, 150)=25 + KINDEX(1, 150)=26 KINDEX(2, 150)=54 - KINDEX(1, 151)=41 + KINDEX(1, 151)=42 KINDEX(2, 151)=54 - KINDEX(1, 152)=23 + KINDEX(1, 152)=24 KINDEX(2, 152)=55 - KINDEX(1, 153)=25 + KINDEX(1, 153)=26 KINDEX(2, 153)=55 - KINDEX(1, 154)=14 + KINDEX(1, 154)=15 KINDEX(2, 154)=56 - KINDEX(1, 155)=16 + KINDEX(1, 155)=17 KINDEX(2, 155)=56 - KINDEX(1, 156)=32 + KINDEX(1, 156)=33 KINDEX(2, 156)=56 - KINDEX(1, 157)=14 + KINDEX(1, 157)=15 KINDEX(2, 157)=57 - KINDEX(1, 158)=17 + KINDEX(1, 158)=18 KINDEX(2, 158)=57 - KINDEX(1, 159)=33 + KINDEX(1, 159)=34 KINDEX(2, 159)=57 - KINDEX(1, 160)=13 + KINDEX(1, 160)=14 KINDEX(2, 160)=58 - KINDEX(1, 161)=14 + KINDEX(1, 161)=15 KINDEX(2, 161)=58 - KINDEX(1, 162)=15 + KINDEX(1, 162)=16 KINDEX(2, 162)=58 - KINDEX(1, 163)=18 + KINDEX(1, 163)=19 KINDEX(2, 163)=58 - KINDEX(1, 164)=22 + KINDEX(1, 164)=23 KINDEX(2, 164)=58 - KINDEX(1, 165)=23 + KINDEX(1, 165)=24 KINDEX(2, 165)=58 - KINDEX(1, 166)=24 + KINDEX(1, 166)=25 KINDEX(2, 166)=58 - KINDEX(1, 167)=25 + KINDEX(1, 167)=26 KINDEX(2, 167)=58 - KINDEX(1, 168)=30 + KINDEX(1, 168)=31 KINDEX(2, 168)=58 - KINDEX(1, 169)=33 + KINDEX(1, 169)=34 KINDEX(2, 169)=58 - KINDEX(1, 170)=14 + KINDEX(1, 170)=15 KINDEX(2, 170)=59 - KINDEX(1, 171)=19 + KINDEX(1, 171)=20 KINDEX(2, 171)=59 - KINDEX(1, 172)=34 + KINDEX(1, 172)=35 KINDEX(2, 172)=59 - KINDEX(1, 173)=35 + KINDEX(1, 173)=36 KINDEX(2, 173)=59 - KINDEX(1, 174)=14 + KINDEX(1, 174)=15 KINDEX(2, 174)=60 - KINDEX(1, 175)=20 + KINDEX(1, 175)=21 KINDEX(2, 175)=60 - KINDEX(1, 176)=35 + KINDEX(1, 176)=36 KINDEX(2, 176)=60 - KINDEX(1, 177)=14 + KINDEX(1, 177)=15 KINDEX(2, 177)=61 - KINDEX(1, 178)=15 + KINDEX(1, 178)=16 KINDEX(2, 178)=61 - KINDEX(1, 179)=21 + KINDEX(1, 179)=22 KINDEX(2, 179)=61 - KINDEX(1, 180)=36 + KINDEX(1, 180)=37 KINDEX(2, 180)=61 - KINDEX(1, 181)=37 + KINDEX(1, 181)=38 KINDEX(2, 181)=61 - KINDEX(1, 182)=41 + KINDEX(1, 182)=42 KINDEX(2, 182)=61 - KINDEX(1, 183)=13 + KINDEX(1, 183)=14 KINDEX(2, 183)=62 - KINDEX(1, 184)=14 + KINDEX(1, 184)=15 KINDEX(2, 184)=62 - KINDEX(1, 185)=15 + KINDEX(1, 185)=16 KINDEX(2, 185)=62 - KINDEX(1, 186)=22 + KINDEX(1, 186)=23 KINDEX(2, 186)=62 - KINDEX(1, 187)=14 + KINDEX(1, 187)=15 KINDEX(2, 187)=63 - KINDEX(1, 188)=23 + KINDEX(1, 188)=24 KINDEX(2, 188)=63 - KINDEX(1, 189)=39 + KINDEX(1, 189)=40 KINDEX(2, 189)=63 - KINDEX(1, 190)=14 + KINDEX(1, 190)=15 KINDEX(2, 190)=64 - KINDEX(1, 191)=24 + KINDEX(1, 191)=25 KINDEX(2, 191)=64 - KINDEX(1, 192)=39 + KINDEX(1, 192)=40 KINDEX(2, 192)=64 - KINDEX(1, 193)=13 + KINDEX(1, 193)=14 KINDEX(2, 193)=65 - KINDEX(1, 194)=14 + KINDEX(1, 194)=15 KINDEX(2, 194)=65 - KINDEX(1, 195)=15 + KINDEX(1, 195)=16 KINDEX(2, 195)=65 - KINDEX(1, 196)=22 + KINDEX(1, 196)=23 KINDEX(2, 196)=65 - KINDEX(1, 197)=23 + KINDEX(1, 197)=24 KINDEX(2, 197)=65 - KINDEX(1, 198)=24 + KINDEX(1, 198)=25 KINDEX(2, 198)=65 - KINDEX(1, 199)=25 + KINDEX(1, 199)=26 KINDEX(2, 199)=65 - KINDEX(1, 200)=39 + KINDEX(1, 200)=40 KINDEX(2, 200)=65 - KINDEX(1, 201)=41 + KINDEX(1, 201)=42 KINDEX(2, 201)=65 - KINDEX(1, 202)=14 + KINDEX(1, 202)=15 KINDEX(2, 202)=66 - KINDEX(1, 203)=15 + KINDEX(1, 203)=16 KINDEX(2, 203)=66 - KINDEX(1, 204)=30 + KINDEX(1, 204)=31 KINDEX(2, 204)=66 - KINDEX(1, 205)=14 + KINDEX(1, 205)=15 KINDEX(2, 205)=67 - KINDEX(1, 206)=31 + KINDEX(1, 206)=32 KINDEX(2, 206)=67 - KINDEX(1, 207)=14 + KINDEX(1, 207)=15 KINDEX(2, 207)=68 - KINDEX(1, 208)=22 + KINDEX(1, 208)=23 KINDEX(2, 208)=68 - KINDEX(1, 209)=28 + KINDEX(1, 209)=29 KINDEX(2, 209)=68 - KINDEX(1, 210)=32 + KINDEX(1, 210)=33 KINDEX(2, 210)=68 - KINDEX(1, 211)=14 + KINDEX(1, 211)=15 KINDEX(2, 211)=69 - KINDEX(1, 212)=15 + KINDEX(1, 212)=16 KINDEX(2, 212)=69 - KINDEX(1, 213)=22 + KINDEX(1, 213)=23 KINDEX(2, 213)=69 - KINDEX(1, 214)=23 + KINDEX(1, 214)=24 KINDEX(2, 214)=69 - KINDEX(1, 215)=24 + KINDEX(1, 215)=25 KINDEX(2, 215)=69 - KINDEX(1, 216)=29 + KINDEX(1, 216)=30 KINDEX(2, 216)=69 - KINDEX(1, 217)=33 + KINDEX(1, 217)=34 KINDEX(2, 217)=69 - KINDEX(1, 218)=39 + KINDEX(1, 218)=40 KINDEX(2, 218)=69 - KINDEX(1, 219)=41 + KINDEX(1, 219)=42 KINDEX(2, 219)=69 KINDEX(1, 220)=5 KINDEX(2, 220)=70 - KINDEX(1, 221)=14 + KINDEX(1, 221)=15 KINDEX(2, 221)=70 - KINDEX(1, 222)=15 + KINDEX(1, 222)=16 KINDEX(2, 222)=70 - KINDEX(1, 223)=22 + KINDEX(1, 223)=23 KINDEX(2, 223)=70 - KINDEX(1, 224)=25 + KINDEX(1, 224)=26 KINDEX(2, 224)=70 - KINDEX(1, 225)=27 + KINDEX(1, 225)=28 KINDEX(2, 225)=70 - KINDEX(1, 226)=41 + KINDEX(1, 226)=42 KINDEX(2, 226)=70 KINDEX(1, 227)=4 KINDEX(2, 227)=71 - KINDEX(1, 228)=14 + KINDEX(1, 228)=15 KINDEX(2, 228)=71 - KINDEX(1, 229)=26 + KINDEX(1, 229)=27 KINDEX(2, 229)=71 - KINDEX(1, 230)=33 + KINDEX(1, 230)=34 KINDEX(2, 230)=71 KINDEX(1, 231)=5 KINDEX(2, 231)=72 KINDEX(1, 232)=8 KINDEX(2, 232)=72 - KINDEX(1, 233)=13 + KINDEX(1, 233)=14 KINDEX(2, 233)=72 - KINDEX(1, 234)=15 + KINDEX(1, 234)=16 KINDEX(2, 234)=72 - KINDEX(1, 235)=22 + KINDEX(1, 235)=23 KINDEX(2, 235)=72 KINDEX(1, 236)=5 KINDEX(2, 236)=73 KINDEX(1, 237)=8 KINDEX(2, 237)=73 - KINDEX(1, 238)=23 + KINDEX(1, 238)=24 KINDEX(2, 238)=73 - KINDEX(1, 239)=39 + KINDEX(1, 239)=40 KINDEX(2, 239)=73 KINDEX(1, 240)=4 KINDEX(2, 240)=74 @@ -37804,734 +38489,752 @@ END IF KINDEX(2, 241)=74 KINDEX(1, 242)=8 KINDEX(2, 242)=74 - KINDEX(1, 243)=13 + KINDEX(1, 243)=14 KINDEX(2, 243)=74 - KINDEX(1, 244)=15 + KINDEX(1, 244)=16 KINDEX(2, 244)=74 - KINDEX(1, 245)=23 + KINDEX(1, 245)=24 KINDEX(2, 245)=74 - KINDEX(1, 246)=24 + KINDEX(1, 246)=25 KINDEX(2, 246)=74 - KINDEX(1, 247)=25 + KINDEX(1, 247)=26 KINDEX(2, 247)=74 - KINDEX(1, 248)=39 + KINDEX(1, 248)=40 KINDEX(2, 248)=74 - KINDEX(1, 249)=40 + KINDEX(1, 249)=41 KINDEX(2, 249)=74 - KINDEX(1, 250)=41 + KINDEX(1, 250)=42 KINDEX(2, 250)=74 KINDEX(1, 251)=5 KINDEX(2, 251)=75 KINDEX(1, 252)=8 KINDEX(2, 252)=75 - KINDEX(1, 253)=21 + KINDEX(1, 253)=22 KINDEX(2, 253)=75 - KINDEX(1, 254)=36 + KINDEX(1, 254)=37 KINDEX(2, 254)=75 KINDEX(1, 255)=5 KINDEX(2, 255)=76 - KINDEX(1, 256)=19 + KINDEX(1, 256)=20 KINDEX(2, 256)=76 - KINDEX(1, 257)=25 + KINDEX(1, 257)=26 KINDEX(2, 257)=76 - KINDEX(1, 258)=40 + KINDEX(1, 258)=41 KINDEX(2, 258)=76 KINDEX(1, 259)=5 KINDEX(2, 259)=77 - KINDEX(1, 260)=20 + KINDEX(1, 260)=21 KINDEX(2, 260)=77 - KINDEX(1, 261)=25 + KINDEX(1, 261)=26 KINDEX(2, 261)=77 - KINDEX(1, 262)=40 + KINDEX(1, 262)=41 KINDEX(2, 262)=77 KINDEX(1, 263)=4 KINDEX(2, 263)=78 KINDEX(1, 264)=5 KINDEX(2, 264)=78 - KINDEX(1, 265)=22 + KINDEX(1, 265)=23 KINDEX(2, 265)=78 - KINDEX(1, 266)=26 + KINDEX(1, 266)=27 KINDEX(2, 266)=78 - KINDEX(1, 267)=27 + KINDEX(1, 267)=28 KINDEX(2, 267)=78 - KINDEX(1, 268)=41 + KINDEX(1, 268)=42 KINDEX(2, 268)=78 KINDEX(1, 269)=1 KINDEX(2, 269)=79 KINDEX(1, 270)=2 KINDEX(2, 270)=79 - KINDEX(1, 271)=13 + KINDEX(1, 271)=14 KINDEX(2, 271)=79 - KINDEX(1, 272)=14 + KINDEX(1, 272)=15 KINDEX(2, 272)=79 - KINDEX(1, 273)=15 + KINDEX(1, 273)=16 KINDEX(2, 273)=79 - KINDEX(1, 274)=16 + KINDEX(1, 274)=17 KINDEX(2, 274)=79 - KINDEX(1, 275)=17 + KINDEX(1, 275)=18 KINDEX(2, 275)=79 - KINDEX(1, 276)=19 + KINDEX(1, 276)=20 KINDEX(2, 276)=79 - KINDEX(1, 277)=22 + KINDEX(1, 277)=23 KINDEX(2, 277)=79 - KINDEX(1, 278)=23 + KINDEX(1, 278)=24 KINDEX(2, 278)=79 - KINDEX(1, 279)=24 + KINDEX(1, 279)=25 KINDEX(2, 279)=79 - KINDEX(1, 280)=25 + KINDEX(1, 280)=26 KINDEX(2, 280)=79 - KINDEX(1, 281)=30 + KINDEX(1, 281)=31 KINDEX(2, 281)=79 - KINDEX(1, 282)=31 + KINDEX(1, 282)=32 KINDEX(2, 282)=79 - KINDEX(1, 283)=32 + KINDEX(1, 283)=33 KINDEX(2, 283)=79 - KINDEX(1, 284)=33 + KINDEX(1, 284)=34 KINDEX(2, 284)=79 - KINDEX(1, 285)=39 + KINDEX(1, 285)=40 KINDEX(2, 285)=79 - KINDEX(1, 286)=41 + KINDEX(1, 286)=42 KINDEX(2, 286)=79 KINDEX(1, 287)=1 KINDEX(2, 287)=80 KINDEX(1, 288)=2 KINDEX(2, 288)=80 - KINDEX(1, 289)=13 + KINDEX(1, 289)=14 KINDEX(2, 289)=80 - KINDEX(1, 290)=14 + KINDEX(1, 290)=15 KINDEX(2, 290)=80 - KINDEX(1, 291)=15 + KINDEX(1, 291)=16 KINDEX(2, 291)=80 - KINDEX(1, 292)=19 + KINDEX(1, 292)=20 KINDEX(2, 292)=80 - KINDEX(1, 293)=20 + KINDEX(1, 293)=21 KINDEX(2, 293)=80 - KINDEX(1, 294)=22 + KINDEX(1, 294)=23 KINDEX(2, 294)=80 - KINDEX(1, 295)=23 + KINDEX(1, 295)=24 KINDEX(2, 295)=80 - KINDEX(1, 296)=24 + KINDEX(1, 296)=25 KINDEX(2, 296)=80 - KINDEX(1, 297)=25 + KINDEX(1, 297)=26 KINDEX(2, 297)=80 - KINDEX(1, 298)=30 + KINDEX(1, 298)=31 KINDEX(2, 298)=80 - KINDEX(1, 299)=31 + KINDEX(1, 299)=32 KINDEX(2, 299)=80 - KINDEX(1, 300)=32 + KINDEX(1, 300)=33 KINDEX(2, 300)=80 - KINDEX(1, 301)=33 + KINDEX(1, 301)=34 KINDEX(2, 301)=80 - KINDEX(1, 302)=39 + KINDEX(1, 302)=40 KINDEX(2, 302)=80 - KINDEX(1, 303)=41 + KINDEX(1, 303)=42 KINDEX(2, 303)=80 KINDEX(1, 304)=1 KINDEX(2, 304)=81 - KINDEX(1, 305)=13 + KINDEX(1, 305)=14 KINDEX(2, 305)=81 - KINDEX(1, 306)=14 + KINDEX(1, 306)=15 KINDEX(2, 306)=81 - KINDEX(1, 307)=15 + KINDEX(1, 307)=16 KINDEX(2, 307)=81 - KINDEX(1, 308)=22 + KINDEX(1, 308)=23 KINDEX(2, 308)=81 - KINDEX(1, 309)=23 + KINDEX(1, 309)=24 KINDEX(2, 309)=81 - KINDEX(1, 310)=25 + KINDEX(1, 310)=26 KINDEX(2, 310)=81 - KINDEX(1, 311)=29 + KINDEX(1, 311)=30 KINDEX(2, 311)=81 - KINDEX(1, 312)=30 + KINDEX(1, 312)=31 KINDEX(2, 312)=81 - KINDEX(1, 313)=31 + KINDEX(1, 313)=32 KINDEX(2, 313)=81 - KINDEX(1, 314)=39 + KINDEX(1, 314)=40 KINDEX(2, 314)=81 KINDEX(1, 315)=1 KINDEX(2, 315)=82 KINDEX(1, 316)=4 KINDEX(2, 316)=82 - KINDEX(1, 317)=13 + KINDEX(1, 317)=14 KINDEX(2, 317)=82 - KINDEX(1, 318)=14 + KINDEX(1, 318)=15 KINDEX(2, 318)=82 - KINDEX(1, 319)=15 + KINDEX(1, 319)=16 KINDEX(2, 319)=82 - KINDEX(1, 320)=22 + KINDEX(1, 320)=23 KINDEX(2, 320)=82 - KINDEX(1, 321)=27 + KINDEX(1, 321)=28 KINDEX(2, 321)=82 - KINDEX(1, 322)=30 + KINDEX(1, 322)=31 KINDEX(2, 322)=82 - KINDEX(1, 323)=39 + KINDEX(1, 323)=40 KINDEX(2, 323)=82 KINDEX(1, 324)=4 KINDEX(2, 324)=83 - KINDEX(1, 325)=21 + KINDEX(1, 325)=22 KINDEX(2, 325)=83 - KINDEX(1, 326)=26 + KINDEX(1, 326)=27 KINDEX(2, 326)=83 - KINDEX(1, 327)=36 + KINDEX(1, 327)=37 KINDEX(2, 327)=83 - KINDEX(1, 328)=15 + KINDEX(1, 328)=16 KINDEX(2, 328)=84 - KINDEX(1, 329)=21 + KINDEX(1, 329)=22 KINDEX(2, 329)=84 - KINDEX(1, 330)=36 + KINDEX(1, 330)=37 KINDEX(2, 330)=84 KINDEX(1, 331)=4 KINDEX(2, 331)=85 KINDEX(1, 332)=7 KINDEX(2, 332)=85 - KINDEX(1, 333)=21 + KINDEX(1, 333)=22 KINDEX(2, 333)=85 - KINDEX(1, 334)=37 + KINDEX(1, 334)=38 KINDEX(2, 334)=85 - KINDEX(1, 335)=15 + KINDEX(1, 335)=16 KINDEX(2, 335)=86 - KINDEX(1, 336)=21 + KINDEX(1, 336)=22 KINDEX(2, 336)=86 - KINDEX(1, 337)=37 + KINDEX(1, 337)=38 KINDEX(2, 337)=86 - KINDEX(1, 338)=38 + KINDEX(1, 338)=39 KINDEX(2, 338)=86 KINDEX(1, 339)=1 KINDEX(2, 339)=87 - KINDEX(1, 340)=14 + KINDEX(1, 340)=15 KINDEX(2, 340)=87 - KINDEX(1, 341)=21 + KINDEX(1, 341)=22 KINDEX(2, 341)=87 - KINDEX(1, 342)=37 + KINDEX(1, 342)=38 KINDEX(2, 342)=87 KINDEX(1, 343)=4 KINDEX(2, 343)=88 - KINDEX(1, 344)=27 + KINDEX(1, 344)=28 KINDEX(2, 344)=88 - KINDEX(1, 345)=39 + KINDEX(1, 345)=40 KINDEX(2, 345)=88 KINDEX(1, 346)=4 KINDEX(2, 346)=89 - KINDEX(1, 347)=27 + KINDEX(1, 347)=28 KINDEX(2, 347)=89 - KINDEX(1, 348)=39 + KINDEX(1, 348)=40 KINDEX(2, 348)=89 KINDEX(1, 349)=3 KINDEX(2, 349)=90 KINDEX(1, 350)=4 KINDEX(2, 350)=90 - KINDEX(1, 351)=15 + KINDEX(1, 351)=16 KINDEX(2, 351)=90 - KINDEX(1, 352)=22 + KINDEX(1, 352)=23 KINDEX(2, 352)=90 - KINDEX(1, 353)=32 + KINDEX(1, 353)=33 KINDEX(2, 353)=90 KINDEX(1, 354)=3 KINDEX(2, 354)=91 KINDEX(1, 355)=4 KINDEX(2, 355)=91 - KINDEX(1, 356)=15 + KINDEX(1, 356)=16 KINDEX(2, 356)=91 - KINDEX(1, 357)=22 + KINDEX(1, 357)=23 KINDEX(2, 357)=91 - KINDEX(1, 358)=23 + KINDEX(1, 358)=24 KINDEX(2, 358)=91 - KINDEX(1, 359)=24 + KINDEX(1, 359)=25 KINDEX(2, 359)=91 - KINDEX(1, 360)=25 + KINDEX(1, 360)=26 KINDEX(2, 360)=91 - KINDEX(1, 361)=26 + KINDEX(1, 361)=27 KINDEX(2, 361)=91 - KINDEX(1, 362)=32 + KINDEX(1, 362)=33 KINDEX(2, 362)=91 - KINDEX(1, 363)=33 + KINDEX(1, 363)=34 KINDEX(2, 363)=91 - KINDEX(1, 364)=41 + KINDEX(1, 364)=42 KINDEX(2, 364)=91 KINDEX(1, 365)=3 KINDEX(2, 365)=92 KINDEX(1, 366)=4 KINDEX(2, 366)=92 - KINDEX(1, 367)=15 + KINDEX(1, 367)=16 KINDEX(2, 367)=92 - KINDEX(1, 368)=22 + KINDEX(1, 368)=23 KINDEX(2, 368)=92 - KINDEX(1, 369)=23 + KINDEX(1, 369)=24 KINDEX(2, 369)=92 - KINDEX(1, 370)=24 + KINDEX(1, 370)=25 KINDEX(2, 370)=92 - KINDEX(1, 371)=34 + KINDEX(1, 371)=35 KINDEX(2, 371)=92 KINDEX(1, 372)=3 KINDEX(2, 372)=93 KINDEX(1, 373)=4 KINDEX(2, 373)=93 - KINDEX(1, 374)=15 + KINDEX(1, 374)=16 KINDEX(2, 374)=93 - KINDEX(1, 375)=19 + KINDEX(1, 375)=20 KINDEX(2, 375)=93 - KINDEX(1, 376)=22 + KINDEX(1, 376)=23 KINDEX(2, 376)=93 - KINDEX(1, 377)=23 + KINDEX(1, 377)=24 KINDEX(2, 377)=93 - KINDEX(1, 378)=24 + KINDEX(1, 378)=25 KINDEX(2, 378)=93 - KINDEX(1, 379)=25 + KINDEX(1, 379)=26 KINDEX(2, 379)=93 - KINDEX(1, 380)=26 + KINDEX(1, 380)=27 KINDEX(2, 380)=93 - KINDEX(1, 381)=35 + KINDEX(1, 381)=36 KINDEX(2, 381)=93 KINDEX(1, 382)=3 KINDEX(2, 382)=94 KINDEX(1, 383)=4 KINDEX(2, 383)=94 - KINDEX(1, 384)=15 + KINDEX(1, 384)=16 KINDEX(2, 384)=94 - KINDEX(1, 385)=25 + KINDEX(1, 385)=26 KINDEX(2, 385)=94 - KINDEX(1, 386)=26 + KINDEX(1, 386)=27 KINDEX(2, 386)=94 - KINDEX(1, 387)=38 + KINDEX(1, 387)=39 KINDEX(2, 387)=94 KINDEX(1, 388)=3 KINDEX(2, 388)=95 KINDEX(1, 389)=4 KINDEX(2, 389)=95 - KINDEX(1, 390)=15 + KINDEX(1, 390)=16 KINDEX(2, 390)=95 - KINDEX(1, 391)=22 + KINDEX(1, 391)=23 KINDEX(2, 391)=95 - KINDEX(1, 392)=23 + KINDEX(1, 392)=24 KINDEX(2, 392)=95 - KINDEX(1, 393)=25 + KINDEX(1, 393)=26 KINDEX(2, 393)=95 - KINDEX(1, 394)=32 + KINDEX(1, 394)=33 KINDEX(2, 394)=95 - KINDEX(1, 395)=39 + KINDEX(1, 395)=40 KINDEX(2, 395)=95 - KINDEX(1, 396)=41 + KINDEX(1, 396)=42 KINDEX(2, 396)=95 KINDEX(1, 397)=3 KINDEX(2, 397)=96 KINDEX(1, 398)=4 KINDEX(2, 398)=96 - KINDEX(1, 399)=15 + KINDEX(1, 399)=16 KINDEX(2, 399)=96 - KINDEX(1, 400)=22 + KINDEX(1, 400)=23 KINDEX(2, 400)=96 - KINDEX(1, 401)=23 + KINDEX(1, 401)=24 KINDEX(2, 401)=96 - KINDEX(1, 402)=24 + KINDEX(1, 402)=25 KINDEX(2, 402)=96 - KINDEX(1, 403)=26 + KINDEX(1, 403)=27 KINDEX(2, 403)=96 - KINDEX(1, 404)=40 + KINDEX(1, 404)=41 KINDEX(2, 404)=96 - KINDEX(1, 405)=15 + KINDEX(1, 405)=16 KINDEX(2, 405)=97 - KINDEX(1, 406)=28 + KINDEX(1, 406)=29 KINDEX(2, 406)=97 - KINDEX(1, 407)=32 + KINDEX(1, 407)=33 KINDEX(2, 407)=97 - KINDEX(1, 408)=15 + KINDEX(1, 408)=16 KINDEX(2, 408)=98 - KINDEX(1, 409)=29 + KINDEX(1, 409)=30 KINDEX(2, 409)=98 - KINDEX(1, 410)=33 + KINDEX(1, 410)=34 KINDEX(2, 410)=98 - KINDEX(1, 411)=15 + KINDEX(1, 411)=16 KINDEX(2, 411)=99 - KINDEX(1, 412)=29 + KINDEX(1, 412)=30 KINDEX(2, 412)=99 - KINDEX(1, 413)=34 + KINDEX(1, 413)=35 KINDEX(2, 413)=99 - KINDEX(1, 414)=15 + KINDEX(1, 414)=16 KINDEX(2, 414)=100 - KINDEX(1, 415)=29 + KINDEX(1, 415)=30 KINDEX(2, 415)=100 - KINDEX(1, 416)=35 + KINDEX(1, 416)=36 KINDEX(2, 416)=100 - KINDEX(1, 417)=15 + KINDEX(1, 417)=16 KINDEX(2, 417)=101 - KINDEX(1, 418)=29 + KINDEX(1, 418)=30 KINDEX(2, 418)=101 - KINDEX(1, 419)=38 + KINDEX(1, 419)=39 KINDEX(2, 419)=101 KINDEX(1, 420)=1 KINDEX(2, 420)=102 - KINDEX(1, 421)=15 + KINDEX(1, 421)=16 KINDEX(2, 421)=102 - KINDEX(1, 422)=29 + KINDEX(1, 422)=30 KINDEX(2, 422)=102 - KINDEX(1, 423)=31 + KINDEX(1, 423)=32 KINDEX(2, 423)=102 - KINDEX(1, 424)=39 + KINDEX(1, 424)=40 KINDEX(2, 424)=102 - KINDEX(1, 425)=15 + KINDEX(1, 425)=16 KINDEX(2, 425)=103 - KINDEX(1, 426)=26 + KINDEX(1, 426)=27 KINDEX(2, 426)=103 - KINDEX(1, 427)=40 + KINDEX(1, 427)=41 KINDEX(2, 427)=103 - KINDEX(1, 428)=15 + KINDEX(1, 428)=16 KINDEX(2, 428)=104 - KINDEX(1, 429)=22 + KINDEX(1, 429)=23 KINDEX(2, 429)=104 - KINDEX(1, 430)=32 + KINDEX(1, 430)=33 KINDEX(2, 430)=104 - KINDEX(1, 431)=15 + KINDEX(1, 431)=16 KINDEX(2, 431)=105 - KINDEX(1, 432)=22 + KINDEX(1, 432)=23 KINDEX(2, 432)=105 - KINDEX(1, 433)=23 + KINDEX(1, 433)=24 KINDEX(2, 433)=105 - KINDEX(1, 434)=24 + KINDEX(1, 434)=25 KINDEX(2, 434)=105 - KINDEX(1, 435)=25 + KINDEX(1, 435)=26 KINDEX(2, 435)=105 - KINDEX(1, 436)=32 + KINDEX(1, 436)=33 KINDEX(2, 436)=105 - KINDEX(1, 437)=33 + KINDEX(1, 437)=34 KINDEX(2, 437)=105 - KINDEX(1, 438)=41 + KINDEX(1, 438)=42 KINDEX(2, 438)=105 - KINDEX(1, 439)=15 + KINDEX(1, 439)=16 KINDEX(2, 439)=106 - KINDEX(1, 440)=22 + KINDEX(1, 440)=23 KINDEX(2, 440)=106 - KINDEX(1, 441)=23 + KINDEX(1, 441)=24 KINDEX(2, 441)=106 - KINDEX(1, 442)=24 + KINDEX(1, 442)=25 KINDEX(2, 442)=106 - KINDEX(1, 443)=32 + KINDEX(1, 443)=33 KINDEX(2, 443)=106 - KINDEX(1, 444)=34 + KINDEX(1, 444)=35 KINDEX(2, 444)=106 - KINDEX(1, 445)=15 + KINDEX(1, 445)=16 KINDEX(2, 445)=107 - KINDEX(1, 446)=19 + KINDEX(1, 446)=20 KINDEX(2, 446)=107 - KINDEX(1, 447)=22 + KINDEX(1, 447)=23 KINDEX(2, 447)=107 - KINDEX(1, 448)=23 + KINDEX(1, 448)=24 KINDEX(2, 448)=107 - KINDEX(1, 449)=24 + KINDEX(1, 449)=25 KINDEX(2, 449)=107 - KINDEX(1, 450)=25 + KINDEX(1, 450)=26 KINDEX(2, 450)=107 - KINDEX(1, 451)=32 + KINDEX(1, 451)=33 KINDEX(2, 451)=107 - KINDEX(1, 452)=35 + KINDEX(1, 452)=36 KINDEX(2, 452)=107 - KINDEX(1, 453)=15 + KINDEX(1, 453)=16 KINDEX(2, 453)=108 - KINDEX(1, 454)=22 + KINDEX(1, 454)=23 KINDEX(2, 454)=108 - KINDEX(1, 455)=25 + KINDEX(1, 455)=26 KINDEX(2, 455)=108 - KINDEX(1, 456)=32 + KINDEX(1, 456)=33 KINDEX(2, 456)=108 - KINDEX(1, 457)=38 + KINDEX(1, 457)=39 KINDEX(2, 457)=108 - KINDEX(1, 458)=15 + KINDEX(1, 458)=16 KINDEX(2, 458)=109 - KINDEX(1, 459)=22 + KINDEX(1, 459)=23 KINDEX(2, 459)=109 - KINDEX(1, 460)=23 + KINDEX(1, 460)=24 KINDEX(2, 460)=109 - KINDEX(1, 461)=25 + KINDEX(1, 461)=26 KINDEX(2, 461)=109 - KINDEX(1, 462)=31 + KINDEX(1, 462)=32 KINDEX(2, 462)=109 - KINDEX(1, 463)=32 + KINDEX(1, 463)=33 KINDEX(2, 463)=109 - KINDEX(1, 464)=39 + KINDEX(1, 464)=40 KINDEX(2, 464)=109 - KINDEX(1, 465)=41 + KINDEX(1, 465)=42 KINDEX(2, 465)=109 KINDEX(1, 466)=4 KINDEX(2, 466)=110 - KINDEX(1, 467)=15 + KINDEX(1, 467)=16 KINDEX(2, 467)=110 - KINDEX(1, 468)=22 + KINDEX(1, 468)=23 KINDEX(2, 468)=110 - KINDEX(1, 469)=23 + KINDEX(1, 469)=24 KINDEX(2, 469)=110 - KINDEX(1, 470)=24 + KINDEX(1, 470)=25 KINDEX(2, 470)=110 - KINDEX(1, 471)=26 + KINDEX(1, 471)=27 KINDEX(2, 471)=110 - KINDEX(1, 472)=32 + KINDEX(1, 472)=33 KINDEX(2, 472)=110 - KINDEX(1, 473)=40 + KINDEX(1, 473)=41 KINDEX(2, 473)=110 - KINDEX(1, 474)=15 + KINDEX(1, 474)=16 KINDEX(2, 474)=111 - KINDEX(1, 475)=22 + KINDEX(1, 475)=23 KINDEX(2, 475)=111 - KINDEX(1, 476)=23 + KINDEX(1, 476)=24 KINDEX(2, 476)=111 - KINDEX(1, 477)=24 + KINDEX(1, 477)=25 KINDEX(2, 477)=111 - KINDEX(1, 478)=25 + KINDEX(1, 478)=26 KINDEX(2, 478)=111 - KINDEX(1, 479)=31 + KINDEX(1, 479)=32 KINDEX(2, 479)=111 - KINDEX(1, 480)=32 + KINDEX(1, 480)=33 KINDEX(2, 480)=111 - KINDEX(1, 481)=33 + KINDEX(1, 481)=34 KINDEX(2, 481)=111 - KINDEX(1, 482)=39 + KINDEX(1, 482)=40 KINDEX(2, 482)=111 - KINDEX(1, 483)=41 + KINDEX(1, 483)=42 KINDEX(2, 483)=111 - KINDEX(1, 484)=15 + KINDEX(1, 484)=16 KINDEX(2, 484)=112 - KINDEX(1, 485)=22 + KINDEX(1, 485)=23 KINDEX(2, 485)=112 - KINDEX(1, 486)=23 + KINDEX(1, 486)=24 KINDEX(2, 486)=112 - KINDEX(1, 487)=24 + KINDEX(1, 487)=25 KINDEX(2, 487)=112 - KINDEX(1, 488)=31 + KINDEX(1, 488)=32 KINDEX(2, 488)=112 - KINDEX(1, 489)=32 + KINDEX(1, 489)=33 KINDEX(2, 489)=112 - KINDEX(1, 490)=34 + KINDEX(1, 490)=35 KINDEX(2, 490)=112 - KINDEX(1, 491)=39 + KINDEX(1, 491)=40 KINDEX(2, 491)=112 - KINDEX(1, 492)=15 + KINDEX(1, 492)=16 KINDEX(2, 492)=113 - KINDEX(1, 493)=19 + KINDEX(1, 493)=20 KINDEX(2, 493)=113 - KINDEX(1, 494)=22 + KINDEX(1, 494)=23 KINDEX(2, 494)=113 - KINDEX(1, 495)=23 + KINDEX(1, 495)=24 KINDEX(2, 495)=113 - KINDEX(1, 496)=24 + KINDEX(1, 496)=25 KINDEX(2, 496)=113 - KINDEX(1, 497)=25 + KINDEX(1, 497)=26 KINDEX(2, 497)=113 - KINDEX(1, 498)=31 + KINDEX(1, 498)=32 KINDEX(2, 498)=113 - KINDEX(1, 499)=32 + KINDEX(1, 499)=33 KINDEX(2, 499)=113 - KINDEX(1, 500)=35 + KINDEX(1, 500)=36 KINDEX(2, 500)=113 - KINDEX(1, 501)=39 + KINDEX(1, 501)=40 KINDEX(2, 501)=113 - KINDEX(1, 502)=15 + KINDEX(1, 502)=16 KINDEX(2, 502)=114 - KINDEX(1, 503)=25 + KINDEX(1, 503)=26 KINDEX(2, 503)=114 - KINDEX(1, 504)=32 + KINDEX(1, 504)=33 KINDEX(2, 504)=114 - KINDEX(1, 505)=38 + KINDEX(1, 505)=39 KINDEX(2, 505)=114 - KINDEX(1, 506)=39 + KINDEX(1, 506)=40 KINDEX(2, 506)=114 - KINDEX(1, 507)=15 + KINDEX(1, 507)=16 KINDEX(2, 507)=115 - KINDEX(1, 508)=22 + KINDEX(1, 508)=23 KINDEX(2, 508)=115 - KINDEX(1, 509)=23 + KINDEX(1, 509)=24 KINDEX(2, 509)=115 - KINDEX(1, 510)=24 + KINDEX(1, 510)=25 KINDEX(2, 510)=115 - KINDEX(1, 511)=25 + KINDEX(1, 511)=26 KINDEX(2, 511)=115 - KINDEX(1, 512)=31 + KINDEX(1, 512)=32 KINDEX(2, 512)=115 - KINDEX(1, 513)=32 + KINDEX(1, 513)=33 KINDEX(2, 513)=115 - KINDEX(1, 514)=39 + KINDEX(1, 514)=40 KINDEX(2, 514)=115 - KINDEX(1, 515)=41 + KINDEX(1, 515)=42 KINDEX(2, 515)=115 KINDEX(1, 516)=4 KINDEX(2, 516)=116 - KINDEX(1, 517)=15 + KINDEX(1, 517)=16 KINDEX(2, 517)=116 - KINDEX(1, 518)=22 + KINDEX(1, 518)=23 KINDEX(2, 518)=116 - KINDEX(1, 519)=23 + KINDEX(1, 519)=24 KINDEX(2, 519)=116 - KINDEX(1, 520)=24 + KINDEX(1, 520)=25 KINDEX(2, 520)=116 - KINDEX(1, 521)=26 + KINDEX(1, 521)=27 KINDEX(2, 521)=116 - KINDEX(1, 522)=31 + KINDEX(1, 522)=32 KINDEX(2, 522)=116 - KINDEX(1, 523)=32 + KINDEX(1, 523)=33 KINDEX(2, 523)=116 - KINDEX(1, 524)=39 + KINDEX(1, 524)=40 KINDEX(2, 524)=116 - KINDEX(1, 525)=40 + KINDEX(1, 525)=41 KINDEX(2, 525)=116 - KINDEX(1, 526)=15 + KINDEX(1, 526)=16 KINDEX(2, 526)=117 - KINDEX(1, 527)=26 + KINDEX(1, 527)=27 KINDEX(2, 527)=117 - KINDEX(1, 528)=40 + KINDEX(1, 528)=41 KINDEX(2, 528)=117 KINDEX(1, 529)=4 KINDEX(2, 529)=118 - KINDEX(1, 530)=15 + KINDEX(1, 530)=16 KINDEX(2, 530)=118 - KINDEX(1, 531)=22 + KINDEX(1, 531)=23 KINDEX(2, 531)=118 - KINDEX(1, 532)=23 + KINDEX(1, 532)=24 KINDEX(2, 532)=118 - KINDEX(1, 533)=24 + KINDEX(1, 533)=25 KINDEX(2, 533)=118 - KINDEX(1, 534)=26 + KINDEX(1, 534)=27 KINDEX(2, 534)=118 - KINDEX(1, 535)=40 + KINDEX(1, 535)=41 KINDEX(2, 535)=118 KINDEX(1, 536)=4 KINDEX(2, 536)=119 KINDEX(1, 537)=5 KINDEX(2, 537)=119 - KINDEX(1, 538)=15 + KINDEX(1, 538)=16 KINDEX(2, 538)=119 - KINDEX(1, 539)=22 + KINDEX(1, 539)=23 KINDEX(2, 539)=119 - KINDEX(1, 540)=32 + KINDEX(1, 540)=33 KINDEX(2, 540)=119 KINDEX(1, 541)=4 KINDEX(2, 541)=120 KINDEX(1, 542)=5 KINDEX(2, 542)=120 - KINDEX(1, 543)=15 + KINDEX(1, 543)=16 KINDEX(2, 543)=120 - KINDEX(1, 544)=22 + KINDEX(1, 544)=23 KINDEX(2, 544)=120 - KINDEX(1, 545)=23 + KINDEX(1, 545)=24 KINDEX(2, 545)=120 - KINDEX(1, 546)=24 + KINDEX(1, 546)=25 KINDEX(2, 546)=120 - KINDEX(1, 547)=25 + KINDEX(1, 547)=26 KINDEX(2, 547)=120 - KINDEX(1, 548)=32 + KINDEX(1, 548)=33 KINDEX(2, 548)=120 - KINDEX(1, 549)=33 + KINDEX(1, 549)=34 KINDEX(2, 549)=120 - KINDEX(1, 550)=41 + KINDEX(1, 550)=42 KINDEX(2, 550)=120 KINDEX(1, 551)=4 KINDEX(2, 551)=121 KINDEX(1, 552)=5 KINDEX(2, 552)=121 - KINDEX(1, 553)=15 + KINDEX(1, 553)=16 KINDEX(2, 553)=121 - KINDEX(1, 554)=22 + KINDEX(1, 554)=23 KINDEX(2, 554)=121 - KINDEX(1, 555)=23 + KINDEX(1, 555)=24 KINDEX(2, 555)=121 - KINDEX(1, 556)=24 + KINDEX(1, 556)=25 KINDEX(2, 556)=121 - KINDEX(1, 557)=34 + KINDEX(1, 557)=35 KINDEX(2, 557)=121 KINDEX(1, 558)=4 KINDEX(2, 558)=122 KINDEX(1, 559)=5 KINDEX(2, 559)=122 - KINDEX(1, 560)=15 + KINDEX(1, 560)=16 KINDEX(2, 560)=122 - KINDEX(1, 561)=19 + KINDEX(1, 561)=20 KINDEX(2, 561)=122 - KINDEX(1, 562)=22 + KINDEX(1, 562)=23 KINDEX(2, 562)=122 - KINDEX(1, 563)=23 + KINDEX(1, 563)=24 KINDEX(2, 563)=122 - KINDEX(1, 564)=24 + KINDEX(1, 564)=25 KINDEX(2, 564)=122 - KINDEX(1, 565)=25 + KINDEX(1, 565)=26 KINDEX(2, 565)=122 - KINDEX(1, 566)=35 + KINDEX(1, 566)=36 KINDEX(2, 566)=122 KINDEX(1, 567)=4 KINDEX(2, 567)=123 KINDEX(1, 568)=5 KINDEX(2, 568)=123 - KINDEX(1, 569)=15 + KINDEX(1, 569)=16 KINDEX(2, 569)=123 - KINDEX(1, 570)=25 + KINDEX(1, 570)=26 KINDEX(2, 570)=123 - KINDEX(1, 571)=38 + KINDEX(1, 571)=39 KINDEX(2, 571)=123 KINDEX(1, 572)=4 KINDEX(2, 572)=124 KINDEX(1, 573)=5 KINDEX(2, 573)=124 - KINDEX(1, 574)=15 + KINDEX(1, 574)=16 KINDEX(2, 574)=124 - KINDEX(1, 575)=22 + KINDEX(1, 575)=23 KINDEX(2, 575)=124 - KINDEX(1, 576)=23 + KINDEX(1, 576)=24 KINDEX(2, 576)=124 - KINDEX(1, 577)=25 + KINDEX(1, 577)=26 KINDEX(2, 577)=124 - KINDEX(1, 578)=32 + KINDEX(1, 578)=33 KINDEX(2, 578)=124 - KINDEX(1, 579)=39 + KINDEX(1, 579)=40 KINDEX(2, 579)=124 - KINDEX(1, 580)=41 + KINDEX(1, 580)=42 KINDEX(2, 580)=124 KINDEX(1, 581)=4 KINDEX(2, 581)=125 KINDEX(1, 582)=5 KINDEX(2, 582)=125 - KINDEX(1, 583)=15 + KINDEX(1, 583)=16 KINDEX(2, 583)=125 - KINDEX(1, 584)=22 + KINDEX(1, 584)=23 KINDEX(2, 584)=125 - KINDEX(1, 585)=23 + KINDEX(1, 585)=24 KINDEX(2, 585)=125 - KINDEX(1, 586)=24 + KINDEX(1, 586)=25 KINDEX(2, 586)=125 - KINDEX(1, 587)=26 + KINDEX(1, 587)=27 KINDEX(2, 587)=125 - KINDEX(1, 588)=40 + KINDEX(1, 588)=41 KINDEX(2, 588)=125 - KINDEX(1, 589)=15 + KINDEX(1, 589)=16 KINDEX(2, 589)=126 - KINDEX(1, 590)=29 + KINDEX(1, 590)=30 KINDEX(2, 590)=126 - KINDEX(1, 591)=41 + KINDEX(1, 591)=42 KINDEX(2, 591)=126 - KINDEX(1, 592)=15 + KINDEX(1, 592)=16 KINDEX(2, 592)=127 - KINDEX(1, 593)=22 + KINDEX(1, 593)=23 KINDEX(2, 593)=127 - KINDEX(1, 594)=32 + KINDEX(1, 594)=33 KINDEX(2, 594)=127 - KINDEX(1, 595)=41 + KINDEX(1, 595)=42 KINDEX(2, 595)=127 - KINDEX(1, 596)=32 + KINDEX(1, 596)=33 KINDEX(2, 596)=128 - KINDEX(1, 597)=39 + KINDEX(1, 597)=40 KINDEX(2, 597)=128 - KINDEX(1, 598)=41 + KINDEX(1, 598)=42 KINDEX(2, 598)=128 - KINDEX(1, 599)=41 + KINDEX(1, 599)=42 KINDEX(2, 599)=129 KINDEX(1, 600)=3 KINDEX(2, 600)=130 KINDEX(1, 601)=4 KINDEX(2, 601)=130 - KINDEX(1, 602)=41 + KINDEX(1, 602)=42 KINDEX(2, 602)=130 KINDEX(1, 603)=4 KINDEX(2, 603)=131 KINDEX(1, 604)=5 KINDEX(2, 604)=131 - KINDEX(1, 605)=41 + KINDEX(1, 605)=42 KINDEX(2, 605)=131 - KINDEX(1, 606)=12 + KINDEX(1, 606)=13 KINDEX(2, 606)=132 + KINDEX(1, 607)=4 + KINDEX(2, 607)=133 + KINDEX(1, 608)=5 + KINDEX(2, 608)=133 + KINDEX(1, 609)=11 + KINDEX(2, 609)=133 + KINDEX(1, 610)=12 + KINDEX(2, 610)=133 + KINDEX(1, 611)=11 + KINDEX(2, 611)=134 + KINDEX(1, 612)=12 + KINDEX(2, 612)=134 + KINDEX(1, 613)=11 + KINDEX(2, 613)=135 + KINDEX(1, 614)=12 + KINDEX(2, 614)=135 + KINDEX(1, 615)=15 + KINDEX(2, 615)=135 RETURN END SUBROUTINE CH_NONZEROTERMS_GAZ !! @@ -38645,7 +39348,7 @@ CONTAINS !! !! EXTERNAL !! -------- -use mode_msg +!! none !! !! IMPLICIT ARGUMENTS !! ------------------ @@ -38663,8 +39366,8 @@ IMPLICIT NONE !! EXECUTABLE STATEMENTS !! --------------------- ! check if output array is large enough -IF (KSPARSEDIM.LT.745) THEN - call Print_msg( NVERB_FATAL, 'GEN', 'CH_SPARSE_AQ', 'array KSPARSE is too small' ) +IF (KSPARSEDIM.LT.753) THEN + STOP 'CH_SPARSE ERROR: array KSPARSE is too small!' END IF !O3/O3 KSPARSE(1, 1)=1 @@ -38677,34 +39380,34 @@ END IF KSPARSE(2, 3)=4 !O3/OH KSPARSE(1, 4)=1 - KSPARSE(2, 4)=14 + KSPARSE(2, 4)=15 !O3/HO2 KSPARSE(1, 5)=1 - KSPARSE(2, 5)=15 + KSPARSE(2, 5)=16 !O3/ALKE KSPARSE(1, 6)=1 - KSPARSE(2, 6)=19 + KSPARSE(2, 6)=20 !O3/BIO KSPARSE(1, 7)=1 - KSPARSE(2, 7)=20 + KSPARSE(2, 7)=21 !O3/CARBO KSPARSE(1, 8)=1 - KSPARSE(2, 8)=25 + KSPARSE(2, 8)=26 !O3/PAN KSPARSE(1, 9)=1 - KSPARSE(2, 9)=27 + KSPARSE(2, 9)=28 !O3/ADD KSPARSE(1, 10)=1 - KSPARSE(2, 10)=37 + KSPARSE(2, 10)=38 !O3/CARBOP KSPARSE(1, 11)=1 - KSPARSE(2, 11)=39 + KSPARSE(2, 11)=40 !O3/WC_O3 KSPARSE(1, 12)=1 - KSPARSE(2, 12)=42 + KSPARSE(2, 12)=43 !O3/WR_O3 KSPARSE(1, 13)=1 - KSPARSE(2, 13)=67 + KSPARSE(2, 13)=68 !H2O2/O3 KSPARSE(1, 14)=2 KSPARSE(2, 14)=1 @@ -38713,22 +39416,22 @@ END IF KSPARSE(2, 15)=2 !H2O2/OH KSPARSE(1, 16)=2 - KSPARSE(2, 16)=14 + KSPARSE(2, 16)=15 !H2O2/HO2 KSPARSE(1, 17)=2 - KSPARSE(2, 17)=15 + KSPARSE(2, 17)=16 !H2O2/ALKE KSPARSE(1, 18)=2 - KSPARSE(2, 18)=19 + KSPARSE(2, 18)=20 !H2O2/BIO KSPARSE(1, 19)=2 - KSPARSE(2, 19)=20 + KSPARSE(2, 19)=21 !H2O2/WC_H2O2 KSPARSE(1, 20)=2 - KSPARSE(2, 20)=43 + KSPARSE(2, 20)=44 !H2O2/WR_H2O2 KSPARSE(1, 21)=2 - KSPARSE(2, 21)=68 + KSPARSE(2, 21)=69 !NO/O3 KSPARSE(1, 22)=3 KSPARSE(2, 22)=1 @@ -38746,40 +39449,40 @@ END IF KSPARSE(2, 26)=7 !NO/OH KSPARSE(1, 27)=3 - KSPARSE(2, 27)=14 + KSPARSE(2, 27)=15 !NO/HO2 KSPARSE(1, 28)=3 - KSPARSE(2, 28)=15 + KSPARSE(2, 28)=16 !NO/MO2 KSPARSE(1, 29)=3 - KSPARSE(2, 29)=32 + KSPARSE(2, 29)=33 !NO/ALKAP KSPARSE(1, 30)=3 - KSPARSE(2, 30)=33 + KSPARSE(2, 30)=34 !NO/ALKEP KSPARSE(1, 31)=3 - KSPARSE(2, 31)=34 + KSPARSE(2, 31)=35 !NO/BIOP KSPARSE(1, 32)=3 - KSPARSE(2, 32)=35 + KSPARSE(2, 32)=36 !NO/AROP KSPARSE(1, 33)=3 - KSPARSE(2, 33)=38 + KSPARSE(2, 33)=39 !NO/CARBOP KSPARSE(1, 34)=3 - KSPARSE(2, 34)=39 + KSPARSE(2, 34)=40 !NO/OLN KSPARSE(1, 35)=3 - KSPARSE(2, 35)=40 + KSPARSE(2, 35)=41 !NO/XO2 KSPARSE(1, 36)=3 - KSPARSE(2, 36)=41 + KSPARSE(2, 36)=42 !NO/WC_NO KSPARSE(1, 37)=3 - KSPARSE(2, 37)=44 + KSPARSE(2, 37)=45 !NO/WR_NO KSPARSE(1, 38)=3 - KSPARSE(2, 38)=69 + KSPARSE(2, 38)=70 !NO2/O3 KSPARSE(1, 39)=4 KSPARSE(2, 39)=1 @@ -38804,2104 +39507,2128 @@ END IF !NO2/HNO4 KSPARSE(1, 46)=4 KSPARSE(2, 46)=9 -!NO2/OH +!NO2/DMS KSPARSE(1, 47)=4 - KSPARSE(2, 47)=14 -!NO2/HO2 + KSPARSE(2, 47)=11 +!NO2/OH KSPARSE(1, 48)=4 KSPARSE(2, 48)=15 -!NO2/CARBO +!NO2/HO2 KSPARSE(1, 49)=4 - KSPARSE(2, 49)=25 -!NO2/ONIT + KSPARSE(2, 49)=16 +!NO2/CARBO KSPARSE(1, 50)=4 KSPARSE(2, 50)=26 -!NO2/PAN +!NO2/ONIT KSPARSE(1, 51)=4 KSPARSE(2, 51)=27 -!NO2/MO2 +!NO2/PAN KSPARSE(1, 52)=4 - KSPARSE(2, 52)=32 -!NO2/ALKAP + KSPARSE(2, 52)=28 +!NO2/MO2 KSPARSE(1, 53)=4 KSPARSE(2, 53)=33 -!NO2/ALKEP +!NO2/ALKAP KSPARSE(1, 54)=4 KSPARSE(2, 54)=34 -!NO2/BIOP +!NO2/ALKEP KSPARSE(1, 55)=4 KSPARSE(2, 55)=35 -!NO2/PHO +!NO2/BIOP KSPARSE(1, 56)=4 KSPARSE(2, 56)=36 -!NO2/ADD +!NO2/PHO KSPARSE(1, 57)=4 KSPARSE(2, 57)=37 -!NO2/AROP +!NO2/ADD KSPARSE(1, 58)=4 KSPARSE(2, 58)=38 -!NO2/CARBOP +!NO2/AROP KSPARSE(1, 59)=4 KSPARSE(2, 59)=39 -!NO2/OLN +!NO2/CARBOP KSPARSE(1, 60)=4 KSPARSE(2, 60)=40 -!NO2/XO2 +!NO2/OLN KSPARSE(1, 61)=4 KSPARSE(2, 61)=41 -!NO2/WC_NO2 +!NO2/XO2 KSPARSE(1, 62)=4 - KSPARSE(2, 62)=45 -!NO2/WR_NO2 + KSPARSE(2, 62)=42 +!NO2/WC_NO2 KSPARSE(1, 63)=4 - KSPARSE(2, 63)=70 + KSPARSE(2, 63)=46 +!NO2/WR_NO2 + KSPARSE(1, 64)=4 + KSPARSE(2, 64)=71 !NO3/O3 - KSPARSE(1, 64)=5 - KSPARSE(2, 64)=1 -!NO3/NO KSPARSE(1, 65)=5 - KSPARSE(2, 65)=3 -!NO3/NO2 + KSPARSE(2, 65)=1 +!NO3/NO KSPARSE(1, 66)=5 - KSPARSE(2, 66)=4 -!NO3/NO3 + KSPARSE(2, 66)=3 +!NO3/NO2 KSPARSE(1, 67)=5 - KSPARSE(2, 67)=5 -!NO3/N2O5 + KSPARSE(2, 67)=4 +!NO3/NO3 KSPARSE(1, 68)=5 - KSPARSE(2, 68)=6 -!NO3/HNO3 + KSPARSE(2, 68)=5 +!NO3/N2O5 KSPARSE(1, 69)=5 - KSPARSE(2, 69)=8 -!NO3/HNO4 + KSPARSE(2, 69)=6 +!NO3/HNO3 KSPARSE(1, 70)=5 - KSPARSE(2, 70)=9 -!NO3/OH + KSPARSE(2, 70)=8 +!NO3/HNO4 KSPARSE(1, 71)=5 - KSPARSE(2, 71)=14 -!NO3/HO2 + KSPARSE(2, 71)=9 +!NO3/DMS KSPARSE(1, 72)=5 - KSPARSE(2, 72)=15 -!NO3/ALKE + KSPARSE(2, 72)=11 +!NO3/OH KSPARSE(1, 73)=5 - KSPARSE(2, 73)=19 -!NO3/BIO + KSPARSE(2, 73)=15 +!NO3/HO2 KSPARSE(1, 74)=5 - KSPARSE(2, 74)=20 -!NO3/ARO + KSPARSE(2, 74)=16 +!NO3/ALKE KSPARSE(1, 75)=5 - KSPARSE(2, 75)=21 -!NO3/HCHO + KSPARSE(2, 75)=20 +!NO3/BIO KSPARSE(1, 76)=5 - KSPARSE(2, 76)=22 -!NO3/ALD + KSPARSE(2, 76)=21 +!NO3/ARO KSPARSE(1, 77)=5 - KSPARSE(2, 77)=23 -!NO3/CARBO + KSPARSE(2, 77)=22 +!NO3/HCHO KSPARSE(1, 78)=5 - KSPARSE(2, 78)=25 -!NO3/PAN + KSPARSE(2, 78)=23 +!NO3/ALD KSPARSE(1, 79)=5 - KSPARSE(2, 79)=27 -!NO3/MO2 + KSPARSE(2, 79)=24 +!NO3/CARBO KSPARSE(1, 80)=5 - KSPARSE(2, 80)=32 -!NO3/ALKAP + KSPARSE(2, 80)=26 +!NO3/PAN KSPARSE(1, 81)=5 - KSPARSE(2, 81)=33 -!NO3/ALKEP + KSPARSE(2, 81)=28 +!NO3/MO2 KSPARSE(1, 82)=5 - KSPARSE(2, 82)=34 -!NO3/BIOP + KSPARSE(2, 82)=33 +!NO3/ALKAP KSPARSE(1, 83)=5 - KSPARSE(2, 83)=35 -!NO3/AROP + KSPARSE(2, 83)=34 +!NO3/ALKEP KSPARSE(1, 84)=5 - KSPARSE(2, 84)=38 -!NO3/CARBOP + KSPARSE(2, 84)=35 +!NO3/BIOP KSPARSE(1, 85)=5 - KSPARSE(2, 85)=39 -!NO3/OLN + KSPARSE(2, 85)=36 +!NO3/AROP KSPARSE(1, 86)=5 - KSPARSE(2, 86)=40 -!NO3/XO2 + KSPARSE(2, 86)=39 +!NO3/CARBOP KSPARSE(1, 87)=5 - KSPARSE(2, 87)=41 -!NO3/WC_NO3 + KSPARSE(2, 87)=40 +!NO3/OLN KSPARSE(1, 88)=5 - KSPARSE(2, 88)=46 -!NO3/WR_NO3 + KSPARSE(2, 88)=41 +!NO3/XO2 KSPARSE(1, 89)=5 - KSPARSE(2, 89)=71 + KSPARSE(2, 89)=42 +!NO3/WC_NO3 + KSPARSE(1, 90)=5 + KSPARSE(2, 90)=47 +!NO3/WR_NO3 + KSPARSE(1, 91)=5 + KSPARSE(2, 91)=72 !N2O5/NO2 - KSPARSE(1, 90)=6 - KSPARSE(2, 90)=4 + KSPARSE(1, 92)=6 + KSPARSE(2, 92)=4 !N2O5/NO3 - KSPARSE(1, 91)=6 - KSPARSE(2, 91)=5 + KSPARSE(1, 93)=6 + KSPARSE(2, 93)=5 !N2O5/N2O5 - KSPARSE(1, 92)=6 - KSPARSE(2, 92)=6 + KSPARSE(1, 94)=6 + KSPARSE(2, 94)=6 !N2O5/WC_N2O5 - KSPARSE(1, 93)=6 - KSPARSE(2, 93)=47 + KSPARSE(1, 95)=6 + KSPARSE(2, 95)=48 !N2O5/WR_N2O5 - KSPARSE(1, 94)=6 - KSPARSE(2, 94)=72 + KSPARSE(1, 96)=6 + KSPARSE(2, 96)=73 !HONO/NO - KSPARSE(1, 95)=7 - KSPARSE(2, 95)=3 + KSPARSE(1, 97)=7 + KSPARSE(2, 97)=3 !HONO/NO2 - KSPARSE(1, 96)=7 - KSPARSE(2, 96)=4 + KSPARSE(1, 98)=7 + KSPARSE(2, 98)=4 !HONO/HONO - KSPARSE(1, 97)=7 - KSPARSE(2, 97)=7 + KSPARSE(1, 99)=7 + KSPARSE(2, 99)=7 !HONO/OH - KSPARSE(1, 98)=7 - KSPARSE(2, 98)=14 + KSPARSE(1, 100)=7 + KSPARSE(2, 100)=15 !HONO/ADD - KSPARSE(1, 99)=7 - KSPARSE(2, 99)=37 + KSPARSE(1, 101)=7 + KSPARSE(2, 101)=38 !HONO/WC_HONO - KSPARSE(1, 100)=7 - KSPARSE(2, 100)=48 + KSPARSE(1, 102)=7 + KSPARSE(2, 102)=49 !HONO/WR_HONO - KSPARSE(1, 101)=7 - KSPARSE(2, 101)=73 + KSPARSE(1, 103)=7 + KSPARSE(2, 103)=74 !HNO3/NO2 - KSPARSE(1, 102)=8 - KSPARSE(2, 102)=4 + KSPARSE(1, 104)=8 + KSPARSE(2, 104)=4 !HNO3/NO3 - KSPARSE(1, 103)=8 - KSPARSE(2, 103)=5 + KSPARSE(1, 105)=8 + KSPARSE(2, 105)=5 !HNO3/HNO3 - KSPARSE(1, 104)=8 - KSPARSE(2, 104)=8 + KSPARSE(1, 106)=8 + KSPARSE(2, 106)=8 !HNO3/OH - KSPARSE(1, 105)=8 - KSPARSE(2, 105)=14 + KSPARSE(1, 107)=8 + KSPARSE(2, 107)=15 !HNO3/HO2 - KSPARSE(1, 106)=8 - KSPARSE(2, 106)=15 + KSPARSE(1, 108)=8 + KSPARSE(2, 108)=16 !HNO3/ARO - KSPARSE(1, 107)=8 - KSPARSE(2, 107)=21 + KSPARSE(1, 109)=8 + KSPARSE(2, 109)=22 !HNO3/HCHO - KSPARSE(1, 108)=8 - KSPARSE(2, 108)=22 + KSPARSE(1, 110)=8 + KSPARSE(2, 110)=23 !HNO3/ALD - KSPARSE(1, 109)=8 - KSPARSE(2, 109)=23 + KSPARSE(1, 111)=8 + KSPARSE(2, 111)=24 !HNO3/CARBO - KSPARSE(1, 110)=8 - KSPARSE(2, 110)=25 + KSPARSE(1, 112)=8 + KSPARSE(2, 112)=26 !HNO3/WC_HNO3 - KSPARSE(1, 111)=8 - KSPARSE(2, 111)=49 + KSPARSE(1, 113)=8 + KSPARSE(2, 113)=50 !HNO3/WR_HNO3 - KSPARSE(1, 112)=8 - KSPARSE(2, 112)=74 + KSPARSE(1, 114)=8 + KSPARSE(2, 114)=75 !HNO4/NO2 - KSPARSE(1, 113)=9 - KSPARSE(2, 113)=4 + KSPARSE(1, 115)=9 + KSPARSE(2, 115)=4 !HNO4/HNO4 - KSPARSE(1, 114)=9 - KSPARSE(2, 114)=9 + KSPARSE(1, 116)=9 + KSPARSE(2, 116)=9 !HNO4/OH - KSPARSE(1, 115)=9 - KSPARSE(2, 115)=14 + KSPARSE(1, 117)=9 + KSPARSE(2, 117)=15 !HNO4/HO2 - KSPARSE(1, 116)=9 - KSPARSE(2, 116)=15 + KSPARSE(1, 118)=9 + KSPARSE(2, 118)=16 !HNO4/WC_HNO4 - KSPARSE(1, 117)=9 - KSPARSE(2, 117)=50 + KSPARSE(1, 119)=9 + KSPARSE(2, 119)=51 !HNO4/WR_HNO4 - KSPARSE(1, 118)=9 - KSPARSE(2, 118)=75 + KSPARSE(1, 120)=9 + KSPARSE(2, 120)=76 !NH3/NH3 - KSPARSE(1, 119)=10 - KSPARSE(2, 119)=10 + KSPARSE(1, 121)=10 + KSPARSE(2, 121)=10 !NH3/OH - KSPARSE(1, 120)=10 - KSPARSE(2, 120)=14 + KSPARSE(1, 122)=10 + KSPARSE(2, 122)=15 !NH3/WC_NH3 - KSPARSE(1, 121)=10 - KSPARSE(2, 121)=51 + KSPARSE(1, 123)=10 + KSPARSE(2, 123)=52 !NH3/WR_NH3 - KSPARSE(1, 122)=10 - KSPARSE(2, 122)=76 + KSPARSE(1, 124)=10 + KSPARSE(2, 124)=77 +!DMS/NO3 + KSPARSE(1, 125)=11 + KSPARSE(2, 125)=5 +!DMS/DMS + KSPARSE(1, 126)=11 + KSPARSE(2, 126)=11 +!DMS/OH + KSPARSE(1, 127)=11 + KSPARSE(2, 127)=15 +!SO2/NO3 + KSPARSE(1, 128)=12 + KSPARSE(2, 128)=5 +!SO2/DMS + KSPARSE(1, 129)=12 + KSPARSE(2, 129)=11 !SO2/SO2 - KSPARSE(1, 123)=11 - KSPARSE(2, 123)=11 + KSPARSE(1, 130)=12 + KSPARSE(2, 130)=12 !SO2/OH - KSPARSE(1, 124)=11 - KSPARSE(2, 124)=14 + KSPARSE(1, 131)=12 + KSPARSE(2, 131)=15 !SO2/WC_SO2 - KSPARSE(1, 125)=11 - KSPARSE(2, 125)=55 + KSPARSE(1, 132)=12 + KSPARSE(2, 132)=56 !SO2/WR_SO2 - KSPARSE(1, 126)=11 - KSPARSE(2, 126)=80 + KSPARSE(1, 133)=12 + KSPARSE(2, 133)=81 !SULF/SO2 - KSPARSE(1, 127)=12 - KSPARSE(2, 127)=11 + KSPARSE(1, 134)=13 + KSPARSE(2, 134)=12 !SULF/SULF - KSPARSE(1, 128)=12 - KSPARSE(2, 128)=12 + KSPARSE(1, 135)=13 + KSPARSE(2, 135)=13 !SULF/OH - KSPARSE(1, 129)=12 - KSPARSE(2, 129)=14 + KSPARSE(1, 136)=13 + KSPARSE(2, 136)=15 !SULF/WC_SULF - KSPARSE(1, 130)=12 - KSPARSE(2, 130)=56 + KSPARSE(1, 137)=13 + KSPARSE(2, 137)=57 !SULF/WR_SULF - KSPARSE(1, 131)=12 - KSPARSE(2, 131)=81 + KSPARSE(1, 138)=13 + KSPARSE(2, 138)=82 !CO/O3 - KSPARSE(1, 132)=13 - KSPARSE(2, 132)=1 + KSPARSE(1, 139)=14 + KSPARSE(2, 139)=1 !CO/NO3 - KSPARSE(1, 133)=13 - KSPARSE(2, 133)=5 + KSPARSE(1, 140)=14 + KSPARSE(2, 140)=5 !CO/CO - KSPARSE(1, 134)=13 - KSPARSE(2, 134)=13 + KSPARSE(1, 141)=14 + KSPARSE(2, 141)=14 !CO/OH - KSPARSE(1, 135)=13 - KSPARSE(2, 135)=14 + KSPARSE(1, 142)=14 + KSPARSE(2, 142)=15 !CO/ALKA - KSPARSE(1, 136)=13 - KSPARSE(2, 136)=18 + KSPARSE(1, 143)=14 + KSPARSE(2, 143)=19 !CO/ALKE - KSPARSE(1, 137)=13 - KSPARSE(2, 137)=19 + KSPARSE(1, 144)=14 + KSPARSE(2, 144)=20 !CO/BIO - KSPARSE(1, 138)=13 - KSPARSE(2, 138)=20 + KSPARSE(1, 145)=14 + KSPARSE(2, 145)=21 !CO/HCHO - KSPARSE(1, 139)=13 - KSPARSE(2, 139)=22 + KSPARSE(1, 146)=14 + KSPARSE(2, 146)=23 !CO/ALD - KSPARSE(1, 140)=13 - KSPARSE(2, 140)=23 + KSPARSE(1, 147)=14 + KSPARSE(2, 147)=24 !CO/CARBO - KSPARSE(1, 141)=13 - KSPARSE(2, 141)=25 + KSPARSE(1, 148)=14 + KSPARSE(2, 148)=26 !CO/PAN - KSPARSE(1, 142)=13 - KSPARSE(2, 142)=27 + KSPARSE(1, 149)=14 + KSPARSE(2, 149)=28 !OH/O3 - KSPARSE(1, 143)=14 - KSPARSE(2, 143)=1 + KSPARSE(1, 150)=15 + KSPARSE(2, 150)=1 !OH/H2O2 - KSPARSE(1, 144)=14 - KSPARSE(2, 144)=2 + KSPARSE(1, 151)=15 + KSPARSE(2, 151)=2 !OH/NO - KSPARSE(1, 145)=14 - KSPARSE(2, 145)=3 + KSPARSE(1, 152)=15 + KSPARSE(2, 152)=3 !OH/NO2 - KSPARSE(1, 146)=14 - KSPARSE(2, 146)=4 + KSPARSE(1, 153)=15 + KSPARSE(2, 153)=4 !OH/NO3 - KSPARSE(1, 147)=14 - KSPARSE(2, 147)=5 + KSPARSE(1, 154)=15 + KSPARSE(2, 154)=5 !OH/HONO - KSPARSE(1, 148)=14 - KSPARSE(2, 148)=7 + KSPARSE(1, 155)=15 + KSPARSE(2, 155)=7 !OH/HNO3 - KSPARSE(1, 149)=14 - KSPARSE(2, 149)=8 + KSPARSE(1, 156)=15 + KSPARSE(2, 156)=8 !OH/HNO4 - KSPARSE(1, 150)=14 - KSPARSE(2, 150)=9 + KSPARSE(1, 157)=15 + KSPARSE(2, 157)=9 !OH/NH3 - KSPARSE(1, 151)=14 - KSPARSE(2, 151)=10 + KSPARSE(1, 158)=15 + KSPARSE(2, 158)=10 +!OH/DMS + KSPARSE(1, 159)=15 + KSPARSE(2, 159)=11 !OH/SO2 - KSPARSE(1, 152)=14 - KSPARSE(2, 152)=11 + KSPARSE(1, 160)=15 + KSPARSE(2, 160)=12 !OH/CO - KSPARSE(1, 153)=14 - KSPARSE(2, 153)=13 + KSPARSE(1, 161)=15 + KSPARSE(2, 161)=14 !OH/OH - KSPARSE(1, 154)=14 - KSPARSE(2, 154)=14 + KSPARSE(1, 162)=15 + KSPARSE(2, 162)=15 !OH/HO2 - KSPARSE(1, 155)=14 - KSPARSE(2, 155)=15 + KSPARSE(1, 163)=15 + KSPARSE(2, 163)=16 !OH/CH4 - KSPARSE(1, 156)=14 - KSPARSE(2, 156)=16 + KSPARSE(1, 164)=15 + KSPARSE(2, 164)=17 !OH/ETH - KSPARSE(1, 157)=14 - KSPARSE(2, 157)=17 + KSPARSE(1, 165)=15 + KSPARSE(2, 165)=18 !OH/ALKA - KSPARSE(1, 158)=14 - KSPARSE(2, 158)=18 + KSPARSE(1, 166)=15 + KSPARSE(2, 166)=19 !OH/ALKE - KSPARSE(1, 159)=14 - KSPARSE(2, 159)=19 + KSPARSE(1, 167)=15 + KSPARSE(2, 167)=20 !OH/BIO - KSPARSE(1, 160)=14 - KSPARSE(2, 160)=20 + KSPARSE(1, 168)=15 + KSPARSE(2, 168)=21 !OH/ARO - KSPARSE(1, 161)=14 - KSPARSE(2, 161)=21 + KSPARSE(1, 169)=15 + KSPARSE(2, 169)=22 !OH/HCHO - KSPARSE(1, 162)=14 - KSPARSE(2, 162)=22 + KSPARSE(1, 170)=15 + KSPARSE(2, 170)=23 !OH/ALD - KSPARSE(1, 163)=14 - KSPARSE(2, 163)=23 + KSPARSE(1, 171)=15 + KSPARSE(2, 171)=24 !OH/KET - KSPARSE(1, 164)=14 - KSPARSE(2, 164)=24 + KSPARSE(1, 172)=15 + KSPARSE(2, 172)=25 !OH/CARBO - KSPARSE(1, 165)=14 - KSPARSE(2, 165)=25 + KSPARSE(1, 173)=15 + KSPARSE(2, 173)=26 !OH/ONIT - KSPARSE(1, 166)=14 - KSPARSE(2, 166)=26 + KSPARSE(1, 174)=15 + KSPARSE(2, 174)=27 !OH/PAN - KSPARSE(1, 167)=14 - KSPARSE(2, 167)=27 + KSPARSE(1, 175)=15 + KSPARSE(2, 175)=28 !OH/OP1 - KSPARSE(1, 168)=14 - KSPARSE(2, 168)=28 + KSPARSE(1, 176)=15 + KSPARSE(2, 176)=29 !OH/OP2 - KSPARSE(1, 169)=14 - KSPARSE(2, 169)=29 + KSPARSE(1, 177)=15 + KSPARSE(2, 177)=30 !OH/ORA1 - KSPARSE(1, 170)=14 - KSPARSE(2, 170)=30 + KSPARSE(1, 178)=15 + KSPARSE(2, 178)=31 !OH/ORA2 - KSPARSE(1, 171)=14 - KSPARSE(2, 171)=31 + KSPARSE(1, 179)=15 + KSPARSE(2, 179)=32 !OH/ADD - KSPARSE(1, 172)=14 - KSPARSE(2, 172)=37 + KSPARSE(1, 180)=15 + KSPARSE(2, 180)=38 !OH/WC_OH - KSPARSE(1, 173)=14 - KSPARSE(2, 173)=52 + KSPARSE(1, 181)=15 + KSPARSE(2, 181)=53 !OH/WR_OH - KSPARSE(1, 174)=14 - KSPARSE(2, 174)=77 + KSPARSE(1, 182)=15 + KSPARSE(2, 182)=78 !HO2/O3 - KSPARSE(1, 175)=15 - KSPARSE(2, 175)=1 + KSPARSE(1, 183)=16 + KSPARSE(2, 183)=1 !HO2/H2O2 - KSPARSE(1, 176)=15 - KSPARSE(2, 176)=2 + KSPARSE(1, 184)=16 + KSPARSE(2, 184)=2 !HO2/NO - KSPARSE(1, 177)=15 - KSPARSE(2, 177)=3 + KSPARSE(1, 185)=16 + KSPARSE(2, 185)=3 !HO2/NO2 - KSPARSE(1, 178)=15 - KSPARSE(2, 178)=4 + KSPARSE(1, 186)=16 + KSPARSE(2, 186)=4 !HO2/NO3 - KSPARSE(1, 179)=15 - KSPARSE(2, 179)=5 + KSPARSE(1, 187)=16 + KSPARSE(2, 187)=5 !HO2/HNO4 - KSPARSE(1, 180)=15 - KSPARSE(2, 180)=9 + KSPARSE(1, 188)=16 + KSPARSE(2, 188)=9 !HO2/SO2 - KSPARSE(1, 181)=15 - KSPARSE(2, 181)=11 + KSPARSE(1, 189)=16 + KSPARSE(2, 189)=12 !HO2/CO - KSPARSE(1, 182)=15 - KSPARSE(2, 182)=13 + KSPARSE(1, 190)=16 + KSPARSE(2, 190)=14 !HO2/OH - KSPARSE(1, 183)=15 - KSPARSE(2, 183)=14 + KSPARSE(1, 191)=16 + KSPARSE(2, 191)=15 !HO2/HO2 - KSPARSE(1, 184)=15 - KSPARSE(2, 184)=15 + KSPARSE(1, 192)=16 + KSPARSE(2, 192)=16 !HO2/ALKA - KSPARSE(1, 185)=15 - KSPARSE(2, 185)=18 + KSPARSE(1, 193)=16 + KSPARSE(2, 193)=19 !HO2/ALKE - KSPARSE(1, 186)=15 - KSPARSE(2, 186)=19 + KSPARSE(1, 194)=16 + KSPARSE(2, 194)=20 !HO2/BIO - KSPARSE(1, 187)=15 - KSPARSE(2, 187)=20 + KSPARSE(1, 195)=16 + KSPARSE(2, 195)=21 !HO2/ARO - KSPARSE(1, 188)=15 - KSPARSE(2, 188)=21 + KSPARSE(1, 196)=16 + KSPARSE(2, 196)=22 !HO2/HCHO - KSPARSE(1, 189)=15 - KSPARSE(2, 189)=22 + KSPARSE(1, 197)=16 + KSPARSE(2, 197)=23 !HO2/ALD - KSPARSE(1, 190)=15 - KSPARSE(2, 190)=23 + KSPARSE(1, 198)=16 + KSPARSE(2, 198)=24 !HO2/CARBO - KSPARSE(1, 191)=15 - KSPARSE(2, 191)=25 + KSPARSE(1, 199)=16 + KSPARSE(2, 199)=26 !HO2/ONIT - KSPARSE(1, 192)=15 - KSPARSE(2, 192)=26 + KSPARSE(1, 200)=16 + KSPARSE(2, 200)=27 !HO2/PAN - KSPARSE(1, 193)=15 - KSPARSE(2, 193)=27 + KSPARSE(1, 201)=16 + KSPARSE(2, 201)=28 !HO2/OP1 - KSPARSE(1, 194)=15 - KSPARSE(2, 194)=28 + KSPARSE(1, 202)=16 + KSPARSE(2, 202)=29 !HO2/OP2 - KSPARSE(1, 195)=15 - KSPARSE(2, 195)=29 + KSPARSE(1, 203)=16 + KSPARSE(2, 203)=30 !HO2/ORA1 - KSPARSE(1, 196)=15 - KSPARSE(2, 196)=30 + KSPARSE(1, 204)=16 + KSPARSE(2, 204)=31 !HO2/MO2 - KSPARSE(1, 197)=15 - KSPARSE(2, 197)=32 + KSPARSE(1, 205)=16 + KSPARSE(2, 205)=33 !HO2/ALKAP - KSPARSE(1, 198)=15 - KSPARSE(2, 198)=33 + KSPARSE(1, 206)=16 + KSPARSE(2, 206)=34 !HO2/ALKEP - KSPARSE(1, 199)=15 - KSPARSE(2, 199)=34 + KSPARSE(1, 207)=16 + KSPARSE(2, 207)=35 !HO2/BIOP - KSPARSE(1, 200)=15 - KSPARSE(2, 200)=35 + KSPARSE(1, 208)=16 + KSPARSE(2, 208)=36 !HO2/PHO - KSPARSE(1, 201)=15 - KSPARSE(2, 201)=36 + KSPARSE(1, 209)=16 + KSPARSE(2, 209)=37 !HO2/ADD - KSPARSE(1, 202)=15 - KSPARSE(2, 202)=37 + KSPARSE(1, 210)=16 + KSPARSE(2, 210)=38 !HO2/AROP - KSPARSE(1, 203)=15 - KSPARSE(2, 203)=38 + KSPARSE(1, 211)=16 + KSPARSE(2, 211)=39 !HO2/CARBOP - KSPARSE(1, 204)=15 - KSPARSE(2, 204)=39 + KSPARSE(1, 212)=16 + KSPARSE(2, 212)=40 !HO2/OLN - KSPARSE(1, 205)=15 - KSPARSE(2, 205)=40 + KSPARSE(1, 213)=16 + KSPARSE(2, 213)=41 !HO2/XO2 - KSPARSE(1, 206)=15 - KSPARSE(2, 206)=41 + KSPARSE(1, 214)=16 + KSPARSE(2, 214)=42 !HO2/WC_HO2 - KSPARSE(1, 207)=15 - KSPARSE(2, 207)=53 + KSPARSE(1, 215)=16 + KSPARSE(2, 215)=54 !HO2/WR_HO2 - KSPARSE(1, 208)=15 - KSPARSE(2, 208)=78 + KSPARSE(1, 216)=16 + KSPARSE(2, 216)=79 !CH4/O3 - KSPARSE(1, 209)=16 - KSPARSE(2, 209)=1 + KSPARSE(1, 217)=17 + KSPARSE(2, 217)=1 !CH4/OH - KSPARSE(1, 210)=16 - KSPARSE(2, 210)=14 + KSPARSE(1, 218)=17 + KSPARSE(2, 218)=15 !CH4/CH4 - KSPARSE(1, 211)=16 - KSPARSE(2, 211)=16 + KSPARSE(1, 219)=17 + KSPARSE(2, 219)=17 !CH4/ALKE - KSPARSE(1, 212)=16 - KSPARSE(2, 212)=19 + KSPARSE(1, 220)=17 + KSPARSE(2, 220)=20 !ETH/O3 - KSPARSE(1, 213)=17 - KSPARSE(2, 213)=1 + KSPARSE(1, 221)=18 + KSPARSE(2, 221)=1 !ETH/OH - KSPARSE(1, 214)=17 - KSPARSE(2, 214)=14 + KSPARSE(1, 222)=18 + KSPARSE(2, 222)=15 !ETH/ETH - KSPARSE(1, 215)=17 - KSPARSE(2, 215)=17 + KSPARSE(1, 223)=18 + KSPARSE(2, 223)=18 !ETH/ALKE - KSPARSE(1, 216)=17 - KSPARSE(2, 216)=19 + KSPARSE(1, 224)=18 + KSPARSE(2, 224)=20 !ALKA/OH - KSPARSE(1, 217)=18 - KSPARSE(2, 217)=14 + KSPARSE(1, 225)=19 + KSPARSE(2, 225)=15 !ALKA/ALKA - KSPARSE(1, 218)=18 - KSPARSE(2, 218)=18 + KSPARSE(1, 226)=19 + KSPARSE(2, 226)=19 !ALKE/O3 - KSPARSE(1, 219)=19 - KSPARSE(2, 219)=1 + KSPARSE(1, 227)=20 + KSPARSE(2, 227)=1 !ALKE/NO - KSPARSE(1, 220)=19 - KSPARSE(2, 220)=3 + KSPARSE(1, 228)=20 + KSPARSE(2, 228)=3 !ALKE/NO3 - KSPARSE(1, 221)=19 - KSPARSE(2, 221)=5 + KSPARSE(1, 229)=20 + KSPARSE(2, 229)=5 !ALKE/OH - KSPARSE(1, 222)=19 - KSPARSE(2, 222)=14 + KSPARSE(1, 230)=20 + KSPARSE(2, 230)=15 !ALKE/ALKE - KSPARSE(1, 223)=19 - KSPARSE(2, 223)=19 + KSPARSE(1, 231)=20 + KSPARSE(2, 231)=20 !ALKE/BIO - KSPARSE(1, 224)=19 - KSPARSE(2, 224)=20 + KSPARSE(1, 232)=20 + KSPARSE(2, 232)=21 !ALKE/MO2 - KSPARSE(1, 225)=19 - KSPARSE(2, 225)=32 + KSPARSE(1, 233)=20 + KSPARSE(2, 233)=33 !ALKE/BIOP - KSPARSE(1, 226)=19 - KSPARSE(2, 226)=35 + KSPARSE(1, 234)=20 + KSPARSE(2, 234)=36 !ALKE/CARBOP - KSPARSE(1, 227)=19 - KSPARSE(2, 227)=39 + KSPARSE(1, 235)=20 + KSPARSE(2, 235)=40 !BIO/O3 - KSPARSE(1, 228)=20 - KSPARSE(2, 228)=1 + KSPARSE(1, 236)=21 + KSPARSE(2, 236)=1 !BIO/NO3 - KSPARSE(1, 229)=20 - KSPARSE(2, 229)=5 + KSPARSE(1, 237)=21 + KSPARSE(2, 237)=5 !BIO/OH - KSPARSE(1, 230)=20 - KSPARSE(2, 230)=14 + KSPARSE(1, 238)=21 + KSPARSE(2, 238)=15 !BIO/BIO - KSPARSE(1, 231)=20 - KSPARSE(2, 231)=20 + KSPARSE(1, 239)=21 + KSPARSE(2, 239)=21 !ARO/O3 - KSPARSE(1, 232)=21 - KSPARSE(2, 232)=1 + KSPARSE(1, 240)=22 + KSPARSE(2, 240)=1 !ARO/NO2 - KSPARSE(1, 233)=21 - KSPARSE(2, 233)=4 + KSPARSE(1, 241)=22 + KSPARSE(2, 241)=4 !ARO/NO3 - KSPARSE(1, 234)=21 - KSPARSE(2, 234)=5 + KSPARSE(1, 242)=22 + KSPARSE(2, 242)=5 !ARO/OH - KSPARSE(1, 235)=21 - KSPARSE(2, 235)=14 + KSPARSE(1, 243)=22 + KSPARSE(2, 243)=15 !ARO/HO2 - KSPARSE(1, 236)=21 - KSPARSE(2, 236)=15 + KSPARSE(1, 244)=22 + KSPARSE(2, 244)=16 !ARO/ARO - KSPARSE(1, 237)=21 - KSPARSE(2, 237)=21 + KSPARSE(1, 245)=22 + KSPARSE(2, 245)=22 !ARO/PHO - KSPARSE(1, 238)=21 - KSPARSE(2, 238)=36 + KSPARSE(1, 246)=22 + KSPARSE(2, 246)=37 !ARO/ADD - KSPARSE(1, 239)=21 - KSPARSE(2, 239)=37 + KSPARSE(1, 247)=22 + KSPARSE(2, 247)=38 !HCHO/O3 - KSPARSE(1, 240)=22 - KSPARSE(2, 240)=1 + KSPARSE(1, 248)=23 + KSPARSE(2, 248)=1 !HCHO/NO - KSPARSE(1, 241)=22 - KSPARSE(2, 241)=3 + KSPARSE(1, 249)=23 + KSPARSE(2, 249)=3 !HCHO/NO3 - KSPARSE(1, 242)=22 - KSPARSE(2, 242)=5 + KSPARSE(1, 250)=23 + KSPARSE(2, 250)=5 !HCHO/OH - KSPARSE(1, 243)=22 - KSPARSE(2, 243)=14 + KSPARSE(1, 251)=23 + KSPARSE(2, 251)=15 !HCHO/ALKA - KSPARSE(1, 244)=22 - KSPARSE(2, 244)=18 + KSPARSE(1, 252)=23 + KSPARSE(2, 252)=19 !HCHO/ALKE - KSPARSE(1, 245)=22 - KSPARSE(2, 245)=19 + KSPARSE(1, 253)=23 + KSPARSE(2, 253)=20 !HCHO/BIO - KSPARSE(1, 246)=22 - KSPARSE(2, 246)=20 + KSPARSE(1, 254)=23 + KSPARSE(2, 254)=21 !HCHO/HCHO - KSPARSE(1, 247)=22 - KSPARSE(2, 247)=22 + KSPARSE(1, 255)=23 + KSPARSE(2, 255)=23 !HCHO/CARBO - KSPARSE(1, 248)=22 - KSPARSE(2, 248)=25 + KSPARSE(1, 256)=23 + KSPARSE(2, 256)=26 !HCHO/PAN - KSPARSE(1, 249)=22 - KSPARSE(2, 249)=27 + KSPARSE(1, 257)=23 + KSPARSE(2, 257)=28 !HCHO/OP1 - KSPARSE(1, 250)=22 - KSPARSE(2, 250)=28 + KSPARSE(1, 258)=23 + KSPARSE(2, 258)=29 !HCHO/OP2 - KSPARSE(1, 251)=22 - KSPARSE(2, 251)=29 + KSPARSE(1, 259)=23 + KSPARSE(2, 259)=30 !HCHO/MO2 - KSPARSE(1, 252)=22 - KSPARSE(2, 252)=32 + KSPARSE(1, 260)=23 + KSPARSE(2, 260)=33 !HCHO/ALKAP - KSPARSE(1, 253)=22 - KSPARSE(2, 253)=33 + KSPARSE(1, 261)=23 + KSPARSE(2, 261)=34 !HCHO/ALKEP - KSPARSE(1, 254)=22 - KSPARSE(2, 254)=34 + KSPARSE(1, 262)=23 + KSPARSE(2, 262)=35 !HCHO/BIOP - KSPARSE(1, 255)=22 - KSPARSE(2, 255)=35 + KSPARSE(1, 263)=23 + KSPARSE(2, 263)=36 !HCHO/AROP - KSPARSE(1, 256)=22 - KSPARSE(2, 256)=38 + KSPARSE(1, 264)=23 + KSPARSE(2, 264)=39 !HCHO/CARBOP - KSPARSE(1, 257)=22 - KSPARSE(2, 257)=39 + KSPARSE(1, 265)=23 + KSPARSE(2, 265)=40 !HCHO/OLN - KSPARSE(1, 258)=22 - KSPARSE(2, 258)=40 + KSPARSE(1, 266)=23 + KSPARSE(2, 266)=41 !HCHO/XO2 - KSPARSE(1, 259)=22 - KSPARSE(2, 259)=41 + KSPARSE(1, 267)=23 + KSPARSE(2, 267)=42 !HCHO/WC_HCHO - KSPARSE(1, 260)=22 - KSPARSE(2, 260)=57 + KSPARSE(1, 268)=23 + KSPARSE(2, 268)=58 !HCHO/WR_HCHO - KSPARSE(1, 261)=22 - KSPARSE(2, 261)=82 + KSPARSE(1, 269)=23 + KSPARSE(2, 269)=83 !ALD/O3 - KSPARSE(1, 262)=23 - KSPARSE(2, 262)=1 + KSPARSE(1, 270)=24 + KSPARSE(2, 270)=1 !ALD/NO - KSPARSE(1, 263)=23 - KSPARSE(2, 263)=3 + KSPARSE(1, 271)=24 + KSPARSE(2, 271)=3 !ALD/NO3 - KSPARSE(1, 264)=23 - KSPARSE(2, 264)=5 + KSPARSE(1, 272)=24 + KSPARSE(2, 272)=5 !ALD/OH - KSPARSE(1, 265)=23 - KSPARSE(2, 265)=14 + KSPARSE(1, 273)=24 + KSPARSE(2, 273)=15 !ALD/ALKA - KSPARSE(1, 266)=23 - KSPARSE(2, 266)=18 + KSPARSE(1, 274)=24 + KSPARSE(2, 274)=19 !ALD/ALKE - KSPARSE(1, 267)=23 - KSPARSE(2, 267)=19 + KSPARSE(1, 275)=24 + KSPARSE(2, 275)=20 !ALD/BIO - KSPARSE(1, 268)=23 - KSPARSE(2, 268)=20 + KSPARSE(1, 276)=24 + KSPARSE(2, 276)=21 !ALD/ALD - KSPARSE(1, 269)=23 - KSPARSE(2, 269)=23 + KSPARSE(1, 277)=24 + KSPARSE(2, 277)=24 !ALD/CARBO - KSPARSE(1, 270)=23 - KSPARSE(2, 270)=25 + KSPARSE(1, 278)=24 + KSPARSE(2, 278)=26 !ALD/ONIT - KSPARSE(1, 271)=23 - KSPARSE(2, 271)=26 + KSPARSE(1, 279)=24 + KSPARSE(2, 279)=27 !ALD/OP2 - KSPARSE(1, 272)=23 - KSPARSE(2, 272)=29 + KSPARSE(1, 280)=24 + KSPARSE(2, 280)=30 !ALD/MO2 - KSPARSE(1, 273)=23 - KSPARSE(2, 273)=32 + KSPARSE(1, 281)=24 + KSPARSE(2, 281)=33 !ALD/ALKAP - KSPARSE(1, 274)=23 - KSPARSE(2, 274)=33 + KSPARSE(1, 282)=24 + KSPARSE(2, 282)=34 !ALD/ALKEP - KSPARSE(1, 275)=23 - KSPARSE(2, 275)=34 + KSPARSE(1, 283)=24 + KSPARSE(2, 283)=35 !ALD/BIOP - KSPARSE(1, 276)=23 - KSPARSE(2, 276)=35 + KSPARSE(1, 284)=24 + KSPARSE(2, 284)=36 !ALD/CARBOP - KSPARSE(1, 277)=23 - KSPARSE(2, 277)=39 + KSPARSE(1, 285)=24 + KSPARSE(2, 285)=40 !ALD/OLN - KSPARSE(1, 278)=23 - KSPARSE(2, 278)=40 + KSPARSE(1, 286)=24 + KSPARSE(2, 286)=41 !KET/O3 - KSPARSE(1, 279)=24 - KSPARSE(2, 279)=1 + KSPARSE(1, 287)=25 + KSPARSE(2, 287)=1 !KET/NO - KSPARSE(1, 280)=24 - KSPARSE(2, 280)=3 + KSPARSE(1, 288)=25 + KSPARSE(2, 288)=3 !KET/NO3 - KSPARSE(1, 281)=24 - KSPARSE(2, 281)=5 + KSPARSE(1, 289)=25 + KSPARSE(2, 289)=5 !KET/OH - KSPARSE(1, 282)=24 - KSPARSE(2, 282)=14 + KSPARSE(1, 290)=25 + KSPARSE(2, 290)=15 !KET/ALKA - KSPARSE(1, 283)=24 - KSPARSE(2, 283)=18 + KSPARSE(1, 291)=25 + KSPARSE(2, 291)=19 !KET/ALKE - KSPARSE(1, 284)=24 - KSPARSE(2, 284)=19 + KSPARSE(1, 292)=25 + KSPARSE(2, 292)=20 !KET/BIO - KSPARSE(1, 285)=24 - KSPARSE(2, 285)=20 + KSPARSE(1, 293)=25 + KSPARSE(2, 293)=21 !KET/KET - KSPARSE(1, 286)=24 - KSPARSE(2, 286)=24 + KSPARSE(1, 294)=25 + KSPARSE(2, 294)=25 !KET/CARBO - KSPARSE(1, 287)=24 - KSPARSE(2, 287)=25 + KSPARSE(1, 295)=25 + KSPARSE(2, 295)=26 !KET/ONIT - KSPARSE(1, 288)=24 - KSPARSE(2, 288)=26 + KSPARSE(1, 296)=25 + KSPARSE(2, 296)=27 !KET/OP2 - KSPARSE(1, 289)=24 - KSPARSE(2, 289)=29 + KSPARSE(1, 297)=25 + KSPARSE(2, 297)=30 !KET/MO2 - KSPARSE(1, 290)=24 - KSPARSE(2, 290)=32 + KSPARSE(1, 298)=25 + KSPARSE(2, 298)=33 !KET/ALKAP - KSPARSE(1, 291)=24 - KSPARSE(2, 291)=33 + KSPARSE(1, 299)=25 + KSPARSE(2, 299)=34 !KET/ALKEP - KSPARSE(1, 292)=24 - KSPARSE(2, 292)=34 + KSPARSE(1, 300)=25 + KSPARSE(2, 300)=35 !KET/BIOP - KSPARSE(1, 293)=24 - KSPARSE(2, 293)=35 + KSPARSE(1, 301)=25 + KSPARSE(2, 301)=36 !KET/CARBOP - KSPARSE(1, 294)=24 - KSPARSE(2, 294)=39 + KSPARSE(1, 302)=25 + KSPARSE(2, 302)=40 !KET/OLN - KSPARSE(1, 295)=24 - KSPARSE(2, 295)=40 + KSPARSE(1, 303)=25 + KSPARSE(2, 303)=41 !CARBO/O3 - KSPARSE(1, 296)=25 - KSPARSE(2, 296)=1 + KSPARSE(1, 304)=26 + KSPARSE(2, 304)=1 !CARBO/NO - KSPARSE(1, 297)=25 - KSPARSE(2, 297)=3 + KSPARSE(1, 305)=26 + KSPARSE(2, 305)=3 !CARBO/NO3 - KSPARSE(1, 298)=25 - KSPARSE(2, 298)=5 + KSPARSE(1, 306)=26 + KSPARSE(2, 306)=5 !CARBO/OH - KSPARSE(1, 299)=25 - KSPARSE(2, 299)=14 + KSPARSE(1, 307)=26 + KSPARSE(2, 307)=15 !CARBO/ALKA - KSPARSE(1, 300)=25 - KSPARSE(2, 300)=18 + KSPARSE(1, 308)=26 + KSPARSE(2, 308)=19 !CARBO/ALKE - KSPARSE(1, 301)=25 - KSPARSE(2, 301)=19 + KSPARSE(1, 309)=26 + KSPARSE(2, 309)=20 !CARBO/BIO - KSPARSE(1, 302)=25 - KSPARSE(2, 302)=20 + KSPARSE(1, 310)=26 + KSPARSE(2, 310)=21 !CARBO/CARBO - KSPARSE(1, 303)=25 - KSPARSE(2, 303)=25 + KSPARSE(1, 311)=26 + KSPARSE(2, 311)=26 !CARBO/PAN - KSPARSE(1, 304)=25 - KSPARSE(2, 304)=27 + KSPARSE(1, 312)=26 + KSPARSE(2, 312)=28 !CARBO/MO2 - KSPARSE(1, 305)=25 - KSPARSE(2, 305)=32 + KSPARSE(1, 313)=26 + KSPARSE(2, 313)=33 !CARBO/ALKAP - KSPARSE(1, 306)=25 - KSPARSE(2, 306)=33 + KSPARSE(1, 314)=26 + KSPARSE(2, 314)=34 !CARBO/BIOP - KSPARSE(1, 307)=25 - KSPARSE(2, 307)=35 + KSPARSE(1, 315)=26 + KSPARSE(2, 315)=36 !CARBO/AROP - KSPARSE(1, 308)=25 - KSPARSE(2, 308)=38 + KSPARSE(1, 316)=26 + KSPARSE(2, 316)=39 !CARBO/CARBOP - KSPARSE(1, 309)=25 - KSPARSE(2, 309)=39 + KSPARSE(1, 317)=26 + KSPARSE(2, 317)=40 !ONIT/NO - KSPARSE(1, 310)=26 - KSPARSE(2, 310)=3 + KSPARSE(1, 318)=27 + KSPARSE(2, 318)=3 !ONIT/NO2 - KSPARSE(1, 311)=26 - KSPARSE(2, 311)=4 + KSPARSE(1, 319)=27 + KSPARSE(2, 319)=4 !ONIT/NO3 - KSPARSE(1, 312)=26 - KSPARSE(2, 312)=5 + KSPARSE(1, 320)=27 + KSPARSE(2, 320)=5 !ONIT/OH - KSPARSE(1, 313)=26 - KSPARSE(2, 313)=14 + KSPARSE(1, 321)=27 + KSPARSE(2, 321)=15 !ONIT/HO2 - KSPARSE(1, 314)=26 - KSPARSE(2, 314)=15 + KSPARSE(1, 322)=27 + KSPARSE(2, 322)=16 !ONIT/ONIT - KSPARSE(1, 315)=26 - KSPARSE(2, 315)=26 + KSPARSE(1, 323)=27 + KSPARSE(2, 323)=27 !ONIT/PAN - KSPARSE(1, 316)=26 - KSPARSE(2, 316)=27 + KSPARSE(1, 324)=27 + KSPARSE(2, 324)=28 !ONIT/MO2 - KSPARSE(1, 317)=26 - KSPARSE(2, 317)=32 + KSPARSE(1, 325)=27 + KSPARSE(2, 325)=33 !ONIT/ALKAP - KSPARSE(1, 318)=26 - KSPARSE(2, 318)=33 + KSPARSE(1, 326)=27 + KSPARSE(2, 326)=34 !ONIT/BIOP - KSPARSE(1, 319)=26 - KSPARSE(2, 319)=35 + KSPARSE(1, 327)=27 + KSPARSE(2, 327)=36 !ONIT/PHO - KSPARSE(1, 320)=26 - KSPARSE(2, 320)=36 + KSPARSE(1, 328)=27 + KSPARSE(2, 328)=37 !ONIT/AROP - KSPARSE(1, 321)=26 - KSPARSE(2, 321)=38 + KSPARSE(1, 329)=27 + KSPARSE(2, 329)=39 !ONIT/CARBOP - KSPARSE(1, 322)=26 - KSPARSE(2, 322)=39 + KSPARSE(1, 330)=27 + KSPARSE(2, 330)=40 !ONIT/OLN - KSPARSE(1, 323)=26 - KSPARSE(2, 323)=40 + KSPARSE(1, 331)=27 + KSPARSE(2, 331)=41 !PAN/O3 - KSPARSE(1, 324)=27 - KSPARSE(2, 324)=1 + KSPARSE(1, 332)=28 + KSPARSE(2, 332)=1 !PAN/NO2 - KSPARSE(1, 325)=27 - KSPARSE(2, 325)=4 + KSPARSE(1, 333)=28 + KSPARSE(2, 333)=4 !PAN/NO3 - KSPARSE(1, 326)=27 - KSPARSE(2, 326)=5 + KSPARSE(1, 334)=28 + KSPARSE(2, 334)=5 !PAN/OH - KSPARSE(1, 327)=27 - KSPARSE(2, 327)=14 + KSPARSE(1, 335)=28 + KSPARSE(2, 335)=15 !PAN/PAN - KSPARSE(1, 328)=27 - KSPARSE(2, 328)=27 + KSPARSE(1, 336)=28 + KSPARSE(2, 336)=28 !PAN/CARBOP - KSPARSE(1, 329)=27 - KSPARSE(2, 329)=39 + KSPARSE(1, 337)=28 + KSPARSE(2, 337)=40 !OP1/OH - KSPARSE(1, 330)=28 - KSPARSE(2, 330)=14 + KSPARSE(1, 338)=29 + KSPARSE(2, 338)=15 !OP1/HO2 - KSPARSE(1, 331)=28 - KSPARSE(2, 331)=15 + KSPARSE(1, 339)=29 + KSPARSE(2, 339)=16 !OP1/OP1 - KSPARSE(1, 332)=28 - KSPARSE(2, 332)=28 + KSPARSE(1, 340)=29 + KSPARSE(2, 340)=29 !OP1/MO2 - KSPARSE(1, 333)=28 - KSPARSE(2, 333)=32 + KSPARSE(1, 341)=29 + KSPARSE(2, 341)=33 !OP1/WC_OP1 - KSPARSE(1, 334)=28 - KSPARSE(2, 334)=61 + KSPARSE(1, 342)=29 + KSPARSE(2, 342)=62 !OP1/WR_OP1 - KSPARSE(1, 335)=28 - KSPARSE(2, 335)=86 + KSPARSE(1, 343)=29 + KSPARSE(2, 343)=87 !OP2/O3 - KSPARSE(1, 336)=29 - KSPARSE(2, 336)=1 + KSPARSE(1, 344)=30 + KSPARSE(2, 344)=1 !OP2/OH - KSPARSE(1, 337)=29 - KSPARSE(2, 337)=14 + KSPARSE(1, 345)=30 + KSPARSE(2, 345)=15 !OP2/HO2 - KSPARSE(1, 338)=29 - KSPARSE(2, 338)=15 + KSPARSE(1, 346)=30 + KSPARSE(2, 346)=16 !OP2/CARBO - KSPARSE(1, 339)=29 - KSPARSE(2, 339)=25 + KSPARSE(1, 347)=30 + KSPARSE(2, 347)=26 !OP2/OP2 - KSPARSE(1, 340)=29 - KSPARSE(2, 340)=29 + KSPARSE(1, 348)=30 + KSPARSE(2, 348)=30 !OP2/ALKAP - KSPARSE(1, 341)=29 - KSPARSE(2, 341)=33 + KSPARSE(1, 349)=30 + KSPARSE(2, 349)=34 !OP2/ALKEP - KSPARSE(1, 342)=29 - KSPARSE(2, 342)=34 + KSPARSE(1, 350)=30 + KSPARSE(2, 350)=35 !OP2/BIOP - KSPARSE(1, 343)=29 - KSPARSE(2, 343)=35 + KSPARSE(1, 351)=30 + KSPARSE(2, 351)=36 !OP2/AROP - KSPARSE(1, 344)=29 - KSPARSE(2, 344)=38 + KSPARSE(1, 352)=30 + KSPARSE(2, 352)=39 !OP2/CARBOP - KSPARSE(1, 345)=29 - KSPARSE(2, 345)=39 + KSPARSE(1, 353)=30 + KSPARSE(2, 353)=40 !OP2/XO2 - KSPARSE(1, 346)=29 - KSPARSE(2, 346)=41 + KSPARSE(1, 354)=30 + KSPARSE(2, 354)=42 !ORA1/O3 - KSPARSE(1, 347)=30 - KSPARSE(2, 347)=1 + KSPARSE(1, 355)=31 + KSPARSE(2, 355)=1 !ORA1/OH - KSPARSE(1, 348)=30 - KSPARSE(2, 348)=14 + KSPARSE(1, 356)=31 + KSPARSE(2, 356)=15 !ORA1/ALKA - KSPARSE(1, 349)=30 - KSPARSE(2, 349)=18 + KSPARSE(1, 357)=31 + KSPARSE(2, 357)=19 !ORA1/ALKE - KSPARSE(1, 350)=30 - KSPARSE(2, 350)=19 + KSPARSE(1, 358)=31 + KSPARSE(2, 358)=20 !ORA1/BIO - KSPARSE(1, 351)=30 - KSPARSE(2, 351)=20 + KSPARSE(1, 359)=31 + KSPARSE(2, 359)=21 !ORA1/CARBO - KSPARSE(1, 352)=30 - KSPARSE(2, 352)=25 + KSPARSE(1, 360)=31 + KSPARSE(2, 360)=26 !ORA1/PAN - KSPARSE(1, 353)=30 - KSPARSE(2, 353)=27 + KSPARSE(1, 361)=31 + KSPARSE(2, 361)=28 !ORA1/ORA1 - KSPARSE(1, 354)=30 - KSPARSE(2, 354)=30 + KSPARSE(1, 362)=31 + KSPARSE(2, 362)=31 !ORA1/WC_ORA1 - KSPARSE(1, 355)=30 - KSPARSE(2, 355)=58 + KSPARSE(1, 363)=31 + KSPARSE(2, 363)=59 !ORA1/WR_ORA1 - KSPARSE(1, 356)=30 - KSPARSE(2, 356)=83 + KSPARSE(1, 364)=31 + KSPARSE(2, 364)=84 !ORA2/O3 - KSPARSE(1, 357)=31 - KSPARSE(2, 357)=1 + KSPARSE(1, 365)=32 + KSPARSE(2, 365)=1 !ORA2/OH - KSPARSE(1, 358)=31 - KSPARSE(2, 358)=14 + KSPARSE(1, 366)=32 + KSPARSE(2, 366)=15 !ORA2/HO2 - KSPARSE(1, 359)=31 - KSPARSE(2, 359)=15 + KSPARSE(1, 367)=32 + KSPARSE(2, 367)=16 !ORA2/ALKE - KSPARSE(1, 360)=31 - KSPARSE(2, 360)=19 + KSPARSE(1, 368)=32 + KSPARSE(2, 368)=20 !ORA2/BIO - KSPARSE(1, 361)=31 - KSPARSE(2, 361)=20 + KSPARSE(1, 369)=32 + KSPARSE(2, 369)=21 !ORA2/CARBO - KSPARSE(1, 362)=31 - KSPARSE(2, 362)=25 + KSPARSE(1, 370)=32 + KSPARSE(2, 370)=26 !ORA2/ORA2 - KSPARSE(1, 363)=31 - KSPARSE(2, 363)=31 + KSPARSE(1, 371)=32 + KSPARSE(2, 371)=32 !ORA2/MO2 - KSPARSE(1, 364)=31 - KSPARSE(2, 364)=32 + KSPARSE(1, 372)=32 + KSPARSE(2, 372)=33 !ORA2/ALKAP - KSPARSE(1, 365)=31 - KSPARSE(2, 365)=33 + KSPARSE(1, 373)=32 + KSPARSE(2, 373)=34 !ORA2/ALKEP - KSPARSE(1, 366)=31 - KSPARSE(2, 366)=34 + KSPARSE(1, 374)=32 + KSPARSE(2, 374)=35 !ORA2/BIOP - KSPARSE(1, 367)=31 - KSPARSE(2, 367)=35 + KSPARSE(1, 375)=32 + KSPARSE(2, 375)=36 !ORA2/CARBOP - KSPARSE(1, 368)=31 - KSPARSE(2, 368)=39 + KSPARSE(1, 376)=32 + KSPARSE(2, 376)=40 !ORA2/OLN - KSPARSE(1, 369)=31 - KSPARSE(2, 369)=40 + KSPARSE(1, 377)=32 + KSPARSE(2, 377)=41 !ORA2/WC_ORA2 - KSPARSE(1, 370)=31 - KSPARSE(2, 370)=59 + KSPARSE(1, 378)=32 + KSPARSE(2, 378)=60 !ORA2/WR_ORA2 - KSPARSE(1, 371)=31 - KSPARSE(2, 371)=84 + KSPARSE(1, 379)=32 + KSPARSE(2, 379)=85 !MO2/O3 - KSPARSE(1, 372)=32 - KSPARSE(2, 372)=1 + KSPARSE(1, 380)=33 + KSPARSE(2, 380)=1 !MO2/NO - KSPARSE(1, 373)=32 - KSPARSE(2, 373)=3 + KSPARSE(1, 381)=33 + KSPARSE(2, 381)=3 !MO2/NO3 - KSPARSE(1, 374)=32 - KSPARSE(2, 374)=5 + KSPARSE(1, 382)=33 + KSPARSE(2, 382)=5 !MO2/OH - KSPARSE(1, 375)=32 - KSPARSE(2, 375)=14 + KSPARSE(1, 383)=33 + KSPARSE(2, 383)=15 !MO2/HO2 - KSPARSE(1, 376)=32 - KSPARSE(2, 376)=15 + KSPARSE(1, 384)=33 + KSPARSE(2, 384)=16 !MO2/CH4 - KSPARSE(1, 377)=32 - KSPARSE(2, 377)=16 + KSPARSE(1, 385)=33 + KSPARSE(2, 385)=17 !MO2/ALKE - KSPARSE(1, 378)=32 - KSPARSE(2, 378)=19 + KSPARSE(1, 386)=33 + KSPARSE(2, 386)=20 !MO2/BIO - KSPARSE(1, 379)=32 - KSPARSE(2, 379)=20 + KSPARSE(1, 387)=33 + KSPARSE(2, 387)=21 !MO2/ALD - KSPARSE(1, 380)=32 - KSPARSE(2, 380)=23 + KSPARSE(1, 388)=33 + KSPARSE(2, 388)=24 !MO2/OP1 - KSPARSE(1, 381)=32 - KSPARSE(2, 381)=28 + KSPARSE(1, 389)=33 + KSPARSE(2, 389)=29 !MO2/OP2 - KSPARSE(1, 382)=32 - KSPARSE(2, 382)=29 + KSPARSE(1, 390)=33 + KSPARSE(2, 390)=30 !MO2/MO2 - KSPARSE(1, 383)=32 - KSPARSE(2, 383)=32 + KSPARSE(1, 391)=33 + KSPARSE(2, 391)=33 !MO2/ALKAP - KSPARSE(1, 384)=32 - KSPARSE(2, 384)=33 + KSPARSE(1, 392)=33 + KSPARSE(2, 392)=34 !MO2/ALKEP - KSPARSE(1, 385)=32 - KSPARSE(2, 385)=34 + KSPARSE(1, 393)=33 + KSPARSE(2, 393)=35 !MO2/BIOP - KSPARSE(1, 386)=32 - KSPARSE(2, 386)=35 + KSPARSE(1, 394)=33 + KSPARSE(2, 394)=36 !MO2/AROP - KSPARSE(1, 387)=32 - KSPARSE(2, 387)=38 + KSPARSE(1, 395)=33 + KSPARSE(2, 395)=39 !MO2/CARBOP - KSPARSE(1, 388)=32 - KSPARSE(2, 388)=39 + KSPARSE(1, 396)=33 + KSPARSE(2, 396)=40 !MO2/OLN - KSPARSE(1, 389)=32 - KSPARSE(2, 389)=40 + KSPARSE(1, 397)=33 + KSPARSE(2, 397)=41 !MO2/XO2 - KSPARSE(1, 390)=32 - KSPARSE(2, 390)=41 + KSPARSE(1, 398)=33 + KSPARSE(2, 398)=42 !MO2/WC_MO2 - KSPARSE(1, 391)=32 - KSPARSE(2, 391)=60 + KSPARSE(1, 399)=33 + KSPARSE(2, 399)=61 !MO2/WR_MO2 - KSPARSE(1, 392)=32 - KSPARSE(2, 392)=85 + KSPARSE(1, 400)=33 + KSPARSE(2, 400)=86 !ALKAP/O3 - KSPARSE(1, 393)=33 - KSPARSE(2, 393)=1 + KSPARSE(1, 401)=34 + KSPARSE(2, 401)=1 !ALKAP/NO - KSPARSE(1, 394)=33 - KSPARSE(2, 394)=3 + KSPARSE(1, 402)=34 + KSPARSE(2, 402)=3 !ALKAP/NO3 - KSPARSE(1, 395)=33 - KSPARSE(2, 395)=5 + KSPARSE(1, 403)=34 + KSPARSE(2, 403)=5 !ALKAP/OH - KSPARSE(1, 396)=33 - KSPARSE(2, 396)=14 + KSPARSE(1, 404)=34 + KSPARSE(2, 404)=15 !ALKAP/HO2 - KSPARSE(1, 397)=33 - KSPARSE(2, 397)=15 + KSPARSE(1, 405)=34 + KSPARSE(2, 405)=16 !ALKAP/ETH - KSPARSE(1, 398)=33 - KSPARSE(2, 398)=17 + KSPARSE(1, 406)=34 + KSPARSE(2, 406)=18 !ALKAP/ALKA - KSPARSE(1, 399)=33 - KSPARSE(2, 399)=18 + KSPARSE(1, 407)=34 + KSPARSE(2, 407)=19 !ALKAP/ALKE - KSPARSE(1, 400)=33 - KSPARSE(2, 400)=19 + KSPARSE(1, 408)=34 + KSPARSE(2, 408)=20 !ALKAP/BIO - KSPARSE(1, 401)=33 - KSPARSE(2, 401)=20 + KSPARSE(1, 409)=34 + KSPARSE(2, 409)=21 !ALKAP/KET - KSPARSE(1, 402)=33 - KSPARSE(2, 402)=24 + KSPARSE(1, 410)=34 + KSPARSE(2, 410)=25 !ALKAP/ONIT - KSPARSE(1, 403)=33 - KSPARSE(2, 403)=26 + KSPARSE(1, 411)=34 + KSPARSE(2, 411)=27 !ALKAP/OP2 - KSPARSE(1, 404)=33 - KSPARSE(2, 404)=29 + KSPARSE(1, 412)=34 + KSPARSE(2, 412)=30 !ALKAP/MO2 - KSPARSE(1, 405)=33 - KSPARSE(2, 405)=32 + KSPARSE(1, 413)=34 + KSPARSE(2, 413)=33 !ALKAP/ALKAP - KSPARSE(1, 406)=33 - KSPARSE(2, 406)=33 + KSPARSE(1, 414)=34 + KSPARSE(2, 414)=34 !ALKAP/CARBOP - KSPARSE(1, 407)=33 - KSPARSE(2, 407)=39 + KSPARSE(1, 415)=34 + KSPARSE(2, 415)=40 !ALKEP/NO - KSPARSE(1, 408)=34 - KSPARSE(2, 408)=3 + KSPARSE(1, 416)=35 + KSPARSE(2, 416)=3 !ALKEP/NO3 - KSPARSE(1, 409)=34 - KSPARSE(2, 409)=5 + KSPARSE(1, 417)=35 + KSPARSE(2, 417)=5 !ALKEP/OH - KSPARSE(1, 410)=34 - KSPARSE(2, 410)=14 + KSPARSE(1, 418)=35 + KSPARSE(2, 418)=15 !ALKEP/HO2 - KSPARSE(1, 411)=34 - KSPARSE(2, 411)=15 + KSPARSE(1, 419)=35 + KSPARSE(2, 419)=16 !ALKEP/ALKE - KSPARSE(1, 412)=34 - KSPARSE(2, 412)=19 + KSPARSE(1, 420)=35 + KSPARSE(2, 420)=20 !ALKEP/MO2 - KSPARSE(1, 413)=34 - KSPARSE(2, 413)=32 + KSPARSE(1, 421)=35 + KSPARSE(2, 421)=33 !ALKEP/ALKEP - KSPARSE(1, 414)=34 - KSPARSE(2, 414)=34 + KSPARSE(1, 422)=35 + KSPARSE(2, 422)=35 !ALKEP/CARBOP - KSPARSE(1, 415)=34 - KSPARSE(2, 415)=39 + KSPARSE(1, 423)=35 + KSPARSE(2, 423)=40 !BIOP/NO - KSPARSE(1, 416)=35 - KSPARSE(2, 416)=3 + KSPARSE(1, 424)=36 + KSPARSE(2, 424)=3 !BIOP/NO3 - KSPARSE(1, 417)=35 - KSPARSE(2, 417)=5 + KSPARSE(1, 425)=36 + KSPARSE(2, 425)=5 !BIOP/OH - KSPARSE(1, 418)=35 - KSPARSE(2, 418)=14 + KSPARSE(1, 426)=36 + KSPARSE(2, 426)=15 !BIOP/HO2 - KSPARSE(1, 419)=35 - KSPARSE(2, 419)=15 + KSPARSE(1, 427)=36 + KSPARSE(2, 427)=16 !BIOP/ALKE - KSPARSE(1, 420)=35 - KSPARSE(2, 420)=19 + KSPARSE(1, 428)=36 + KSPARSE(2, 428)=20 !BIOP/BIO - KSPARSE(1, 421)=35 - KSPARSE(2, 421)=20 + KSPARSE(1, 429)=36 + KSPARSE(2, 429)=21 !BIOP/MO2 - KSPARSE(1, 422)=35 - KSPARSE(2, 422)=32 + KSPARSE(1, 430)=36 + KSPARSE(2, 430)=33 !BIOP/BIOP - KSPARSE(1, 423)=35 - KSPARSE(2, 423)=35 + KSPARSE(1, 431)=36 + KSPARSE(2, 431)=36 !BIOP/CARBOP - KSPARSE(1, 424)=35 - KSPARSE(2, 424)=39 + KSPARSE(1, 432)=36 + KSPARSE(2, 432)=40 !PHO/NO2 - KSPARSE(1, 425)=36 - KSPARSE(2, 425)=4 + KSPARSE(1, 433)=37 + KSPARSE(2, 433)=4 !PHO/NO3 - KSPARSE(1, 426)=36 - KSPARSE(2, 426)=5 + KSPARSE(1, 434)=37 + KSPARSE(2, 434)=5 !PHO/OH - KSPARSE(1, 427)=36 - KSPARSE(2, 427)=14 + KSPARSE(1, 435)=37 + KSPARSE(2, 435)=15 !PHO/HO2 - KSPARSE(1, 428)=36 - KSPARSE(2, 428)=15 + KSPARSE(1, 436)=37 + KSPARSE(2, 436)=16 !PHO/ARO - KSPARSE(1, 429)=36 - KSPARSE(2, 429)=21 + KSPARSE(1, 437)=37 + KSPARSE(2, 437)=22 !PHO/PHO - KSPARSE(1, 430)=36 - KSPARSE(2, 430)=36 + KSPARSE(1, 438)=37 + KSPARSE(2, 438)=37 !ADD/O3 - KSPARSE(1, 431)=37 - KSPARSE(2, 431)=1 + KSPARSE(1, 439)=38 + KSPARSE(2, 439)=1 !ADD/NO2 - KSPARSE(1, 432)=37 - KSPARSE(2, 432)=4 + KSPARSE(1, 440)=38 + KSPARSE(2, 440)=4 !ADD/OH - KSPARSE(1, 433)=37 - KSPARSE(2, 433)=14 + KSPARSE(1, 441)=38 + KSPARSE(2, 441)=15 !ADD/ARO - KSPARSE(1, 434)=37 - KSPARSE(2, 434)=21 + KSPARSE(1, 442)=38 + KSPARSE(2, 442)=22 !ADD/ADD - KSPARSE(1, 435)=37 - KSPARSE(2, 435)=37 + KSPARSE(1, 443)=38 + KSPARSE(2, 443)=38 !AROP/NO - KSPARSE(1, 436)=38 - KSPARSE(2, 436)=3 + KSPARSE(1, 444)=39 + KSPARSE(2, 444)=3 !AROP/NO3 - KSPARSE(1, 437)=38 - KSPARSE(2, 437)=5 + KSPARSE(1, 445)=39 + KSPARSE(2, 445)=5 !AROP/HO2 - KSPARSE(1, 438)=38 - KSPARSE(2, 438)=15 + KSPARSE(1, 446)=39 + KSPARSE(2, 446)=16 !AROP/MO2 - KSPARSE(1, 439)=38 - KSPARSE(2, 439)=32 + KSPARSE(1, 447)=39 + KSPARSE(2, 447)=33 !AROP/ADD - KSPARSE(1, 440)=38 - KSPARSE(2, 440)=37 + KSPARSE(1, 448)=39 + KSPARSE(2, 448)=38 !AROP/AROP - KSPARSE(1, 441)=38 - KSPARSE(2, 441)=38 + KSPARSE(1, 449)=39 + KSPARSE(2, 449)=39 !AROP/CARBOP - KSPARSE(1, 442)=38 - KSPARSE(2, 442)=39 + KSPARSE(1, 450)=39 + KSPARSE(2, 450)=40 !CARBOP/O3 - KSPARSE(1, 443)=39 - KSPARSE(2, 443)=1 + KSPARSE(1, 451)=40 + KSPARSE(2, 451)=1 !CARBOP/NO - KSPARSE(1, 444)=39 - KSPARSE(2, 444)=3 + KSPARSE(1, 452)=40 + KSPARSE(2, 452)=3 !CARBOP/NO2 - KSPARSE(1, 445)=39 - KSPARSE(2, 445)=4 + KSPARSE(1, 453)=40 + KSPARSE(2, 453)=4 !CARBOP/NO3 - KSPARSE(1, 446)=39 - KSPARSE(2, 446)=5 + KSPARSE(1, 454)=40 + KSPARSE(2, 454)=5 !CARBOP/OH - KSPARSE(1, 447)=39 - KSPARSE(2, 447)=14 + KSPARSE(1, 455)=40 + KSPARSE(2, 455)=15 !CARBOP/HO2 - KSPARSE(1, 448)=39 - KSPARSE(2, 448)=15 + KSPARSE(1, 456)=40 + KSPARSE(2, 456)=16 !CARBOP/ALKE - KSPARSE(1, 449)=39 - KSPARSE(2, 449)=19 + KSPARSE(1, 457)=40 + KSPARSE(2, 457)=20 !CARBOP/BIO - KSPARSE(1, 450)=39 - KSPARSE(2, 450)=20 + KSPARSE(1, 458)=40 + KSPARSE(2, 458)=21 !CARBOP/ALD - KSPARSE(1, 451)=39 - KSPARSE(2, 451)=23 + KSPARSE(1, 459)=40 + KSPARSE(2, 459)=24 !CARBOP/KET - KSPARSE(1, 452)=39 - KSPARSE(2, 452)=24 + KSPARSE(1, 460)=40 + KSPARSE(2, 460)=25 !CARBOP/CARBO - KSPARSE(1, 453)=39 - KSPARSE(2, 453)=25 + KSPARSE(1, 461)=40 + KSPARSE(2, 461)=26 !CARBOP/PAN - KSPARSE(1, 454)=39 - KSPARSE(2, 454)=27 + KSPARSE(1, 462)=40 + KSPARSE(2, 462)=28 !CARBOP/OP2 - KSPARSE(1, 455)=39 - KSPARSE(2, 455)=29 + KSPARSE(1, 463)=40 + KSPARSE(2, 463)=30 !CARBOP/MO2 - KSPARSE(1, 456)=39 - KSPARSE(2, 456)=32 + KSPARSE(1, 464)=40 + KSPARSE(2, 464)=33 !CARBOP/ALKAP - KSPARSE(1, 457)=39 - KSPARSE(2, 457)=33 + KSPARSE(1, 465)=40 + KSPARSE(2, 465)=34 !CARBOP/ALKEP - KSPARSE(1, 458)=39 - KSPARSE(2, 458)=34 + KSPARSE(1, 466)=40 + KSPARSE(2, 466)=35 !CARBOP/BIOP - KSPARSE(1, 459)=39 - KSPARSE(2, 459)=35 + KSPARSE(1, 467)=40 + KSPARSE(2, 467)=36 !CARBOP/AROP - KSPARSE(1, 460)=39 - KSPARSE(2, 460)=38 + KSPARSE(1, 468)=40 + KSPARSE(2, 468)=39 !CARBOP/CARBOP - KSPARSE(1, 461)=39 - KSPARSE(2, 461)=39 + KSPARSE(1, 469)=40 + KSPARSE(2, 469)=40 !CARBOP/OLN - KSPARSE(1, 462)=39 - KSPARSE(2, 462)=40 + KSPARSE(1, 470)=40 + KSPARSE(2, 470)=41 !CARBOP/XO2 - KSPARSE(1, 463)=39 - KSPARSE(2, 463)=41 + KSPARSE(1, 471)=40 + KSPARSE(2, 471)=42 !OLN/NO - KSPARSE(1, 464)=40 - KSPARSE(2, 464)=3 + KSPARSE(1, 472)=41 + KSPARSE(2, 472)=3 !OLN/NO3 - KSPARSE(1, 465)=40 - KSPARSE(2, 465)=5 + KSPARSE(1, 473)=41 + KSPARSE(2, 473)=5 !OLN/HO2 - KSPARSE(1, 466)=40 - KSPARSE(2, 466)=15 + KSPARSE(1, 474)=41 + KSPARSE(2, 474)=16 !OLN/ALKE - KSPARSE(1, 467)=40 - KSPARSE(2, 467)=19 + KSPARSE(1, 475)=41 + KSPARSE(2, 475)=20 !OLN/BIO - KSPARSE(1, 468)=40 - KSPARSE(2, 468)=20 + KSPARSE(1, 476)=41 + KSPARSE(2, 476)=21 !OLN/CARBO - KSPARSE(1, 469)=40 - KSPARSE(2, 469)=25 + KSPARSE(1, 477)=41 + KSPARSE(2, 477)=26 !OLN/MO2 - KSPARSE(1, 470)=40 - KSPARSE(2, 470)=32 + KSPARSE(1, 478)=41 + KSPARSE(2, 478)=33 !OLN/CARBOP - KSPARSE(1, 471)=40 - KSPARSE(2, 471)=39 + KSPARSE(1, 479)=41 + KSPARSE(2, 479)=40 !OLN/OLN - KSPARSE(1, 472)=40 - KSPARSE(2, 472)=40 + KSPARSE(1, 480)=41 + KSPARSE(2, 480)=41 !XO2/O3 - KSPARSE(1, 473)=41 - KSPARSE(2, 473)=1 + KSPARSE(1, 481)=42 + KSPARSE(2, 481)=1 !XO2/NO - KSPARSE(1, 474)=41 - KSPARSE(2, 474)=3 + KSPARSE(1, 482)=42 + KSPARSE(2, 482)=3 !XO2/NO3 - KSPARSE(1, 475)=41 - KSPARSE(2, 475)=5 + KSPARSE(1, 483)=42 + KSPARSE(2, 483)=5 !XO2/OH - KSPARSE(1, 476)=41 - KSPARSE(2, 476)=14 + KSPARSE(1, 484)=42 + KSPARSE(2, 484)=15 !XO2/HO2 - KSPARSE(1, 477)=41 - KSPARSE(2, 477)=15 + KSPARSE(1, 485)=42 + KSPARSE(2, 485)=16 !XO2/ALKE - KSPARSE(1, 478)=41 - KSPARSE(2, 478)=19 + KSPARSE(1, 486)=42 + KSPARSE(2, 486)=20 !XO2/BIO - KSPARSE(1, 479)=41 - KSPARSE(2, 479)=20 + KSPARSE(1, 487)=42 + KSPARSE(2, 487)=21 !XO2/ARO - KSPARSE(1, 480)=41 - KSPARSE(2, 480)=21 + KSPARSE(1, 488)=42 + KSPARSE(2, 488)=22 !XO2/CARBO - KSPARSE(1, 481)=41 - KSPARSE(2, 481)=25 + KSPARSE(1, 489)=42 + KSPARSE(2, 489)=26 !XO2/PAN - KSPARSE(1, 482)=41 - KSPARSE(2, 482)=27 + KSPARSE(1, 490)=42 + KSPARSE(2, 490)=28 !XO2/OP2 - KSPARSE(1, 483)=41 - KSPARSE(2, 483)=29 + KSPARSE(1, 491)=42 + KSPARSE(2, 491)=30 !XO2/MO2 - KSPARSE(1, 484)=41 - KSPARSE(2, 484)=32 + KSPARSE(1, 492)=42 + KSPARSE(2, 492)=33 !XO2/ALKAP - KSPARSE(1, 485)=41 - KSPARSE(2, 485)=33 + KSPARSE(1, 493)=42 + KSPARSE(2, 493)=34 !XO2/CARBOP - KSPARSE(1, 486)=41 - KSPARSE(2, 486)=39 + KSPARSE(1, 494)=42 + KSPARSE(2, 494)=40 !XO2/XO2 - KSPARSE(1, 487)=41 - KSPARSE(2, 487)=41 + KSPARSE(1, 495)=42 + KSPARSE(2, 495)=42 !WC_O3/O3 - KSPARSE(1, 488)=42 - KSPARSE(2, 488)=1 + KSPARSE(1, 496)=43 + KSPARSE(2, 496)=1 !WC_O3/WC_O3 - KSPARSE(1, 489)=42 - KSPARSE(2, 489)=42 + KSPARSE(1, 497)=43 + KSPARSE(2, 497)=43 !WC_O3/WC_HO2 - KSPARSE(1, 490)=42 - KSPARSE(2, 490)=53 + KSPARSE(1, 498)=43 + KSPARSE(2, 498)=54 !WC_O3/WC_SO2 - KSPARSE(1, 491)=42 - KSPARSE(2, 491)=55 + KSPARSE(1, 499)=43 + KSPARSE(2, 499)=56 !WC_H2O2/H2O2 - KSPARSE(1, 492)=43 - KSPARSE(2, 492)=2 + KSPARSE(1, 500)=44 + KSPARSE(2, 500)=2 !WC_H2O2/WC_H2O2 - KSPARSE(1, 493)=43 - KSPARSE(2, 493)=43 + KSPARSE(1, 501)=44 + KSPARSE(2, 501)=44 !WC_H2O2/WC_OH - KSPARSE(1, 494)=43 - KSPARSE(2, 494)=52 + KSPARSE(1, 502)=44 + KSPARSE(2, 502)=53 !WC_H2O2/WC_HO2 - KSPARSE(1, 495)=43 - KSPARSE(2, 495)=53 + KSPARSE(1, 503)=44 + KSPARSE(2, 503)=54 !WC_H2O2/WC_SO2 - KSPARSE(1, 496)=43 - KSPARSE(2, 496)=55 + KSPARSE(1, 504)=44 + KSPARSE(2, 504)=56 !WC_NO/NO - KSPARSE(1, 497)=44 - KSPARSE(2, 497)=3 + KSPARSE(1, 505)=45 + KSPARSE(2, 505)=3 !WC_NO/WC_NO - KSPARSE(1, 498)=44 - KSPARSE(2, 498)=44 + KSPARSE(1, 506)=45 + KSPARSE(2, 506)=45 !WC_NO2/NO2 - KSPARSE(1, 499)=45 - KSPARSE(2, 499)=4 + KSPARSE(1, 507)=46 + KSPARSE(2, 507)=4 !WC_NO2/WC_NO2 - KSPARSE(1, 500)=45 - KSPARSE(2, 500)=45 + KSPARSE(1, 508)=46 + KSPARSE(2, 508)=46 !WC_NO2/WC_HONO - KSPARSE(1, 501)=45 - KSPARSE(2, 501)=48 + KSPARSE(1, 509)=46 + KSPARSE(2, 509)=49 !WC_NO2/WC_HNO3 - KSPARSE(1, 502)=45 - KSPARSE(2, 502)=49 + KSPARSE(1, 510)=46 + KSPARSE(2, 510)=50 !WC_NO2/WC_HNO4 - KSPARSE(1, 503)=45 - KSPARSE(2, 503)=50 + KSPARSE(1, 511)=46 + KSPARSE(2, 511)=51 !WC_NO2/WC_OH - KSPARSE(1, 504)=45 - KSPARSE(2, 504)=52 + KSPARSE(1, 512)=46 + KSPARSE(2, 512)=53 !WC_NO2/WC_HO2 - KSPARSE(1, 505)=45 - KSPARSE(2, 505)=53 + KSPARSE(1, 513)=46 + KSPARSE(2, 513)=54 !WC_NO3/NO3 - KSPARSE(1, 506)=46 - KSPARSE(2, 506)=5 + KSPARSE(1, 514)=47 + KSPARSE(2, 514)=5 !WC_NO3/WC_NO3 - KSPARSE(1, 507)=46 - KSPARSE(2, 507)=46 + KSPARSE(1, 515)=47 + KSPARSE(2, 515)=47 !WC_NO3/WC_SO2 - KSPARSE(1, 508)=46 - KSPARSE(2, 508)=55 + KSPARSE(1, 516)=47 + KSPARSE(2, 516)=56 !WC_NO3/WC_SULF - KSPARSE(1, 509)=46 - KSPARSE(2, 509)=56 + KSPARSE(1, 517)=47 + KSPARSE(2, 517)=57 !WC_N2O5/N2O5 - KSPARSE(1, 510)=47 - KSPARSE(2, 510)=6 + KSPARSE(1, 518)=48 + KSPARSE(2, 518)=6 !WC_N2O5/WC_N2O5 - KSPARSE(1, 511)=47 - KSPARSE(2, 511)=47 + KSPARSE(1, 519)=48 + KSPARSE(2, 519)=48 !WC_HONO/HONO - KSPARSE(1, 512)=48 - KSPARSE(2, 512)=7 + KSPARSE(1, 520)=49 + KSPARSE(2, 520)=7 !WC_HONO/WC_HONO - KSPARSE(1, 513)=48 - KSPARSE(2, 513)=48 + KSPARSE(1, 521)=49 + KSPARSE(2, 521)=49 !WC_HONO/WC_HNO4 - KSPARSE(1, 514)=48 - KSPARSE(2, 514)=50 + KSPARSE(1, 522)=49 + KSPARSE(2, 522)=51 !WC_HONO/WC_OH - KSPARSE(1, 515)=48 - KSPARSE(2, 515)=52 + KSPARSE(1, 523)=49 + KSPARSE(2, 523)=53 !WC_HNO3/HNO3 - KSPARSE(1, 516)=49 - KSPARSE(2, 516)=8 + KSPARSE(1, 524)=50 + KSPARSE(2, 524)=8 !WC_HNO3/WC_NO3 - KSPARSE(1, 517)=49 - KSPARSE(2, 517)=46 + KSPARSE(1, 525)=50 + KSPARSE(2, 525)=47 !WC_HNO3/WC_N2O5 - KSPARSE(1, 518)=49 - KSPARSE(2, 518)=47 + KSPARSE(1, 526)=50 + KSPARSE(2, 526)=48 !WC_HNO3/WC_HNO3 - KSPARSE(1, 519)=49 - KSPARSE(2, 519)=49 + KSPARSE(1, 527)=50 + KSPARSE(2, 527)=50 !WC_HNO3/WC_HNO4 - KSPARSE(1, 520)=49 - KSPARSE(2, 520)=50 + KSPARSE(1, 528)=50 + KSPARSE(2, 528)=51 !WC_HNO3/WC_SO2 - KSPARSE(1, 521)=49 - KSPARSE(2, 521)=55 + KSPARSE(1, 529)=50 + KSPARSE(2, 529)=56 !WC_HNO3/WC_SULF - KSPARSE(1, 522)=49 - KSPARSE(2, 522)=56 + KSPARSE(1, 530)=50 + KSPARSE(2, 530)=57 !WC_HNO4/HNO4 - KSPARSE(1, 523)=50 - KSPARSE(2, 523)=9 + KSPARSE(1, 531)=51 + KSPARSE(2, 531)=9 !WC_HNO4/WC_NO2 - KSPARSE(1, 524)=50 - KSPARSE(2, 524)=45 + KSPARSE(1, 532)=51 + KSPARSE(2, 532)=46 !WC_HNO4/WC_HNO4 - KSPARSE(1, 525)=50 - KSPARSE(2, 525)=50 + KSPARSE(1, 533)=51 + KSPARSE(2, 533)=51 !WC_HNO4/WC_HO2 - KSPARSE(1, 526)=50 - KSPARSE(2, 526)=53 + KSPARSE(1, 534)=51 + KSPARSE(2, 534)=54 !WC_HNO4/WC_SO2 - KSPARSE(1, 527)=50 - KSPARSE(2, 527)=55 + KSPARSE(1, 535)=51 + KSPARSE(2, 535)=56 !WC_NH3/NH3 - KSPARSE(1, 528)=51 - KSPARSE(2, 528)=10 + KSPARSE(1, 536)=52 + KSPARSE(2, 536)=10 !WC_NH3/WC_NH3 - KSPARSE(1, 529)=51 - KSPARSE(2, 529)=51 + KSPARSE(1, 537)=52 + KSPARSE(2, 537)=52 !WC_OH/OH - KSPARSE(1, 530)=52 - KSPARSE(2, 530)=14 + KSPARSE(1, 538)=53 + KSPARSE(2, 538)=15 !WC_OH/WC_O3 - KSPARSE(1, 531)=52 - KSPARSE(2, 531)=42 + KSPARSE(1, 539)=53 + KSPARSE(2, 539)=43 !WC_OH/WC_H2O2 - KSPARSE(1, 532)=52 - KSPARSE(2, 532)=43 + KSPARSE(1, 540)=53 + KSPARSE(2, 540)=44 !WC_OH/WC_HONO - KSPARSE(1, 533)=52 - KSPARSE(2, 533)=48 + KSPARSE(1, 541)=53 + KSPARSE(2, 541)=49 !WC_OH/WC_HNO3 - KSPARSE(1, 534)=52 - KSPARSE(2, 534)=49 + KSPARSE(1, 542)=53 + KSPARSE(2, 542)=50 !WC_OH/WC_OH - KSPARSE(1, 535)=52 - KSPARSE(2, 535)=52 + KSPARSE(1, 543)=53 + KSPARSE(2, 543)=53 !WC_OH/WC_HO2 - KSPARSE(1, 536)=52 - KSPARSE(2, 536)=53 + KSPARSE(1, 544)=53 + KSPARSE(2, 544)=54 !WC_OH/WC_SO2 - KSPARSE(1, 537)=52 - KSPARSE(2, 537)=55 + KSPARSE(1, 545)=53 + KSPARSE(2, 545)=56 !WC_OH/WC_HCHO - KSPARSE(1, 538)=52 - KSPARSE(2, 538)=57 + KSPARSE(1, 546)=53 + KSPARSE(2, 546)=58 !WC_OH/WC_ORA1 - KSPARSE(1, 539)=52 - KSPARSE(2, 539)=58 + KSPARSE(1, 547)=53 + KSPARSE(2, 547)=59 !WC_OH/WC_ASO4 - KSPARSE(1, 540)=52 - KSPARSE(2, 540)=63 + KSPARSE(1, 548)=53 + KSPARSE(2, 548)=64 !WC_OH/WC_AHMS - KSPARSE(1, 541)=52 - KSPARSE(2, 541)=66 + KSPARSE(1, 549)=53 + KSPARSE(2, 549)=67 !WC_HO2/HO2 - KSPARSE(1, 542)=53 - KSPARSE(2, 542)=15 + KSPARSE(1, 550)=54 + KSPARSE(2, 550)=16 !WC_HO2/WC_O3 - KSPARSE(1, 543)=53 - KSPARSE(2, 543)=42 + KSPARSE(1, 551)=54 + KSPARSE(2, 551)=43 !WC_HO2/WC_H2O2 - KSPARSE(1, 544)=53 - KSPARSE(2, 544)=43 + KSPARSE(1, 552)=54 + KSPARSE(2, 552)=44 !WC_HO2/WC_NO2 - KSPARSE(1, 545)=53 - KSPARSE(2, 545)=45 + KSPARSE(1, 553)=54 + KSPARSE(2, 553)=46 !WC_HO2/WC_HNO4 - KSPARSE(1, 546)=53 - KSPARSE(2, 546)=50 + KSPARSE(1, 554)=54 + KSPARSE(2, 554)=51 !WC_HO2/WC_OH - KSPARSE(1, 547)=53 - KSPARSE(2, 547)=52 + KSPARSE(1, 555)=54 + KSPARSE(2, 555)=53 !WC_HO2/WC_HO2 - KSPARSE(1, 548)=53 - KSPARSE(2, 548)=53 + KSPARSE(1, 556)=54 + KSPARSE(2, 556)=54 !WC_HO2/WC_HCHO - KSPARSE(1, 549)=53 - KSPARSE(2, 549)=57 + KSPARSE(1, 557)=54 + KSPARSE(2, 557)=58 !WC_HO2/WC_ORA1 - KSPARSE(1, 550)=53 - KSPARSE(2, 550)=58 + KSPARSE(1, 558)=54 + KSPARSE(2, 558)=59 !WC_HO2/WC_MO2 - KSPARSE(1, 551)=53 - KSPARSE(2, 551)=60 + KSPARSE(1, 559)=54 + KSPARSE(2, 559)=61 !WC_HO2/WC_ASO5 - KSPARSE(1, 552)=53 - KSPARSE(2, 552)=64 + KSPARSE(1, 560)=54 + KSPARSE(2, 560)=65 !WC_HO2/WC_AHMS - KSPARSE(1, 553)=53 - KSPARSE(2, 553)=66 + KSPARSE(1, 561)=54 + KSPARSE(2, 561)=67 !WC_CO2/WC_OH - KSPARSE(1, 554)=54 - KSPARSE(2, 554)=52 + KSPARSE(1, 562)=55 + KSPARSE(2, 562)=53 !WC_CO2/WC_CO2 - KSPARSE(1, 555)=54 - KSPARSE(2, 555)=54 + KSPARSE(1, 563)=55 + KSPARSE(2, 563)=55 !WC_CO2/WC_ORA1 - KSPARSE(1, 556)=54 - KSPARSE(2, 556)=58 + KSPARSE(1, 564)=55 + KSPARSE(2, 564)=59 !WC_SO2/SO2 - KSPARSE(1, 557)=55 - KSPARSE(2, 557)=11 + KSPARSE(1, 565)=56 + KSPARSE(2, 565)=12 !WC_SO2/WC_O3 - KSPARSE(1, 558)=55 - KSPARSE(2, 558)=42 + KSPARSE(1, 566)=56 + KSPARSE(2, 566)=43 !WC_SO2/WC_H2O2 - KSPARSE(1, 559)=55 - KSPARSE(2, 559)=43 + KSPARSE(1, 567)=56 + KSPARSE(2, 567)=44 !WC_SO2/WC_NO3 - KSPARSE(1, 560)=55 - KSPARSE(2, 560)=46 + KSPARSE(1, 568)=56 + KSPARSE(2, 568)=47 !WC_SO2/WC_HNO4 - KSPARSE(1, 561)=55 - KSPARSE(2, 561)=50 + KSPARSE(1, 569)=56 + KSPARSE(2, 569)=51 !WC_SO2/WC_OH - KSPARSE(1, 562)=55 - KSPARSE(2, 562)=52 + KSPARSE(1, 570)=56 + KSPARSE(2, 570)=53 !WC_SO2/WC_SO2 - KSPARSE(1, 563)=55 - KSPARSE(2, 563)=55 + KSPARSE(1, 571)=56 + KSPARSE(2, 571)=56 !WC_SO2/WC_HCHO - KSPARSE(1, 564)=55 - KSPARSE(2, 564)=57 + KSPARSE(1, 572)=56 + KSPARSE(2, 572)=58 !WC_SO2/WC_MO2 - KSPARSE(1, 565)=55 - KSPARSE(2, 565)=60 + KSPARSE(1, 573)=56 + KSPARSE(2, 573)=61 !WC_SO2/WC_AHSO5 - KSPARSE(1, 566)=55 - KSPARSE(2, 566)=65 + KSPARSE(1, 574)=56 + KSPARSE(2, 574)=66 !WC_SO2/WC_AHMS - KSPARSE(1, 567)=55 - KSPARSE(2, 567)=66 + KSPARSE(1, 575)=56 + KSPARSE(2, 575)=67 !WC_SULF/SULF - KSPARSE(1, 568)=56 - KSPARSE(2, 568)=12 + KSPARSE(1, 576)=57 + KSPARSE(2, 576)=13 !WC_SULF/WC_O3 - KSPARSE(1, 569)=56 - KSPARSE(2, 569)=42 + KSPARSE(1, 577)=57 + KSPARSE(2, 577)=43 !WC_SULF/WC_H2O2 - KSPARSE(1, 570)=56 - KSPARSE(2, 570)=43 + KSPARSE(1, 578)=57 + KSPARSE(2, 578)=44 !WC_SULF/WC_NO3 - KSPARSE(1, 571)=56 - KSPARSE(2, 571)=46 + KSPARSE(1, 579)=57 + KSPARSE(2, 579)=47 !WC_SULF/WC_HNO4 - KSPARSE(1, 572)=56 - KSPARSE(2, 572)=50 + KSPARSE(1, 580)=57 + KSPARSE(2, 580)=51 !WC_SULF/WC_SO2 - KSPARSE(1, 573)=56 - KSPARSE(2, 573)=55 + KSPARSE(1, 581)=57 + KSPARSE(2, 581)=56 !WC_SULF/WC_SULF - KSPARSE(1, 574)=56 - KSPARSE(2, 574)=56 + KSPARSE(1, 582)=57 + KSPARSE(2, 582)=57 !WC_SULF/WC_ASO4 - KSPARSE(1, 575)=56 - KSPARSE(2, 575)=63 + KSPARSE(1, 583)=57 + KSPARSE(2, 583)=64 !WC_SULF/WC_AHSO5 - KSPARSE(1, 576)=56 - KSPARSE(2, 576)=65 + KSPARSE(1, 584)=57 + KSPARSE(2, 584)=66 !WC_HCHO/HCHO - KSPARSE(1, 577)=57 - KSPARSE(2, 577)=22 + KSPARSE(1, 585)=58 + KSPARSE(2, 585)=23 !WC_HCHO/WC_OH - KSPARSE(1, 578)=57 - KSPARSE(2, 578)=52 + KSPARSE(1, 586)=58 + KSPARSE(2, 586)=53 !WC_HCHO/WC_SO2 - KSPARSE(1, 579)=57 - KSPARSE(2, 579)=55 + KSPARSE(1, 587)=58 + KSPARSE(2, 587)=56 !WC_HCHO/WC_HCHO - KSPARSE(1, 580)=57 - KSPARSE(2, 580)=57 + KSPARSE(1, 588)=58 + KSPARSE(2, 588)=58 !WC_HCHO/WC_MO2 - KSPARSE(1, 581)=57 - KSPARSE(2, 581)=60 + KSPARSE(1, 589)=58 + KSPARSE(2, 589)=61 !WC_HCHO/WC_AHMS - KSPARSE(1, 582)=57 - KSPARSE(2, 582)=66 + KSPARSE(1, 590)=58 + KSPARSE(2, 590)=67 !WC_ORA1/ORA1 - KSPARSE(1, 583)=58 - KSPARSE(2, 583)=30 + KSPARSE(1, 591)=59 + KSPARSE(2, 591)=31 !WC_ORA1/WC_OH - KSPARSE(1, 584)=58 - KSPARSE(2, 584)=52 + KSPARSE(1, 592)=59 + KSPARSE(2, 592)=53 !WC_ORA1/WC_HCHO - KSPARSE(1, 585)=58 - KSPARSE(2, 585)=57 + KSPARSE(1, 593)=59 + KSPARSE(2, 593)=58 !WC_ORA1/WC_ORA1 - KSPARSE(1, 586)=58 - KSPARSE(2, 586)=58 + KSPARSE(1, 594)=59 + KSPARSE(2, 594)=59 !WC_ORA1/WC_AHMS - KSPARSE(1, 587)=58 - KSPARSE(2, 587)=66 + KSPARSE(1, 595)=59 + KSPARSE(2, 595)=67 !WC_ORA2/ORA2 - KSPARSE(1, 588)=59 - KSPARSE(2, 588)=31 + KSPARSE(1, 596)=60 + KSPARSE(2, 596)=32 !WC_ORA2/WC_ORA2 - KSPARSE(1, 589)=59 - KSPARSE(2, 589)=59 + KSPARSE(1, 597)=60 + KSPARSE(2, 597)=60 !WC_MO2/MO2 - KSPARSE(1, 590)=60 - KSPARSE(2, 590)=32 + KSPARSE(1, 598)=61 + KSPARSE(2, 598)=33 !WC_MO2/WC_SO2 - KSPARSE(1, 591)=60 - KSPARSE(2, 591)=55 + KSPARSE(1, 599)=61 + KSPARSE(2, 599)=56 !WC_MO2/WC_MO2 - KSPARSE(1, 592)=60 - KSPARSE(2, 592)=60 + KSPARSE(1, 600)=61 + KSPARSE(2, 600)=61 !WC_OP1/OP1 - KSPARSE(1, 593)=61 - KSPARSE(2, 593)=28 + KSPARSE(1, 601)=62 + KSPARSE(2, 601)=29 !WC_OP1/WC_SO2 - KSPARSE(1, 594)=61 - KSPARSE(2, 594)=55 + KSPARSE(1, 602)=62 + KSPARSE(2, 602)=56 !WC_OP1/WC_MO2 - KSPARSE(1, 595)=61 - KSPARSE(2, 595)=60 + KSPARSE(1, 603)=62 + KSPARSE(2, 603)=61 !WC_OP1/WC_OP1 - KSPARSE(1, 596)=61 - KSPARSE(2, 596)=61 + KSPARSE(1, 604)=62 + KSPARSE(2, 604)=62 !WC_ASO3/WC_NO3 - KSPARSE(1, 597)=62 - KSPARSE(2, 597)=46 + KSPARSE(1, 605)=63 + KSPARSE(2, 605)=47 !WC_ASO3/WC_OH - KSPARSE(1, 598)=62 - KSPARSE(2, 598)=52 + KSPARSE(1, 606)=63 + KSPARSE(2, 606)=53 !WC_ASO3/WC_SO2 - KSPARSE(1, 599)=62 - KSPARSE(2, 599)=55 + KSPARSE(1, 607)=63 + KSPARSE(2, 607)=56 !WC_ASO3/WC_MO2 - KSPARSE(1, 600)=62 - KSPARSE(2, 600)=60 + KSPARSE(1, 608)=63 + KSPARSE(2, 608)=61 !WC_ASO3/WC_ASO3 - KSPARSE(1, 601)=62 - KSPARSE(2, 601)=62 + KSPARSE(1, 609)=63 + KSPARSE(2, 609)=63 !WC_ASO4/WC_NO3 - KSPARSE(1, 602)=63 - KSPARSE(2, 602)=46 + KSPARSE(1, 610)=64 + KSPARSE(2, 610)=47 !WC_ASO4/WC_SULF - KSPARSE(1, 603)=63 - KSPARSE(2, 603)=56 + KSPARSE(1, 611)=64 + KSPARSE(2, 611)=57 !WC_ASO4/WC_ASO4 - KSPARSE(1, 604)=63 - KSPARSE(2, 604)=63 + KSPARSE(1, 612)=64 + KSPARSE(2, 612)=64 !WC_ASO4/WC_ASO5 - KSPARSE(1, 605)=63 - KSPARSE(2, 605)=64 + KSPARSE(1, 613)=64 + KSPARSE(2, 613)=65 !WC_ASO5/WC_HO2 - KSPARSE(1, 606)=64 - KSPARSE(2, 606)=53 + KSPARSE(1, 614)=65 + KSPARSE(2, 614)=54 !WC_ASO5/WC_ASO3 - KSPARSE(1, 607)=64 - KSPARSE(2, 607)=62 + KSPARSE(1, 615)=65 + KSPARSE(2, 615)=63 !WC_ASO5/WC_ASO5 - KSPARSE(1, 608)=64 - KSPARSE(2, 608)=64 + KSPARSE(1, 616)=65 + KSPARSE(2, 616)=65 !WC_AHSO5/WC_HO2 - KSPARSE(1, 609)=65 - KSPARSE(2, 609)=53 + KSPARSE(1, 617)=66 + KSPARSE(2, 617)=54 !WC_AHSO5/WC_SO2 - KSPARSE(1, 610)=65 - KSPARSE(2, 610)=55 + KSPARSE(1, 618)=66 + KSPARSE(2, 618)=56 !WC_AHSO5/WC_ASO5 - KSPARSE(1, 611)=65 - KSPARSE(2, 611)=64 + KSPARSE(1, 619)=66 + KSPARSE(2, 619)=65 !WC_AHSO5/WC_AHSO5 - KSPARSE(1, 612)=65 - KSPARSE(2, 612)=65 + KSPARSE(1, 620)=66 + KSPARSE(2, 620)=66 !WC_AHMS/WC_OH - KSPARSE(1, 613)=66 - KSPARSE(2, 613)=52 + KSPARSE(1, 621)=67 + KSPARSE(2, 621)=53 !WC_AHMS/WC_SO2 - KSPARSE(1, 614)=66 - KSPARSE(2, 614)=55 + KSPARSE(1, 622)=67 + KSPARSE(2, 622)=56 !WC_AHMS/WC_HCHO - KSPARSE(1, 615)=66 - KSPARSE(2, 615)=57 + KSPARSE(1, 623)=67 + KSPARSE(2, 623)=58 !WC_AHMS/WC_AHMS - KSPARSE(1, 616)=66 - KSPARSE(2, 616)=66 + KSPARSE(1, 624)=67 + KSPARSE(2, 624)=67 !WR_O3/O3 - KSPARSE(1, 617)=67 - KSPARSE(2, 617)=1 + KSPARSE(1, 625)=68 + KSPARSE(2, 625)=1 !WR_O3/WR_O3 - KSPARSE(1, 618)=67 - KSPARSE(2, 618)=67 + KSPARSE(1, 626)=68 + KSPARSE(2, 626)=68 !WR_O3/WR_HO2 - KSPARSE(1, 619)=67 - KSPARSE(2, 619)=78 + KSPARSE(1, 627)=68 + KSPARSE(2, 627)=79 !WR_O3/WR_SO2 - KSPARSE(1, 620)=67 - KSPARSE(2, 620)=80 + KSPARSE(1, 628)=68 + KSPARSE(2, 628)=81 !WR_H2O2/H2O2 - KSPARSE(1, 621)=68 - KSPARSE(2, 621)=2 + KSPARSE(1, 629)=69 + KSPARSE(2, 629)=2 !WR_H2O2/WR_H2O2 - KSPARSE(1, 622)=68 - KSPARSE(2, 622)=68 + KSPARSE(1, 630)=69 + KSPARSE(2, 630)=69 !WR_H2O2/WR_OH - KSPARSE(1, 623)=68 - KSPARSE(2, 623)=77 + KSPARSE(1, 631)=69 + KSPARSE(2, 631)=78 !WR_H2O2/WR_HO2 - KSPARSE(1, 624)=68 - KSPARSE(2, 624)=78 + KSPARSE(1, 632)=69 + KSPARSE(2, 632)=79 !WR_H2O2/WR_SO2 - KSPARSE(1, 625)=68 - KSPARSE(2, 625)=80 + KSPARSE(1, 633)=69 + KSPARSE(2, 633)=81 !WR_NO/NO - KSPARSE(1, 626)=69 - KSPARSE(2, 626)=3 + KSPARSE(1, 634)=70 + KSPARSE(2, 634)=3 !WR_NO/WR_NO - KSPARSE(1, 627)=69 - KSPARSE(2, 627)=69 + KSPARSE(1, 635)=70 + KSPARSE(2, 635)=70 !WR_NO2/NO2 - KSPARSE(1, 628)=70 - KSPARSE(2, 628)=4 + KSPARSE(1, 636)=71 + KSPARSE(2, 636)=4 !WR_NO2/WR_NO2 - KSPARSE(1, 629)=70 - KSPARSE(2, 629)=70 + KSPARSE(1, 637)=71 + KSPARSE(2, 637)=71 !WR_NO2/WR_HONO - KSPARSE(1, 630)=70 - KSPARSE(2, 630)=73 + KSPARSE(1, 638)=71 + KSPARSE(2, 638)=74 !WR_NO2/WR_HNO3 - KSPARSE(1, 631)=70 - KSPARSE(2, 631)=74 + KSPARSE(1, 639)=71 + KSPARSE(2, 639)=75 !WR_NO2/WR_HNO4 - KSPARSE(1, 632)=70 - KSPARSE(2, 632)=75 + KSPARSE(1, 640)=71 + KSPARSE(2, 640)=76 !WR_NO2/WR_OH - KSPARSE(1, 633)=70 - KSPARSE(2, 633)=77 + KSPARSE(1, 641)=71 + KSPARSE(2, 641)=78 !WR_NO2/WR_HO2 - KSPARSE(1, 634)=70 - KSPARSE(2, 634)=78 + KSPARSE(1, 642)=71 + KSPARSE(2, 642)=79 !WR_NO3/NO3 - KSPARSE(1, 635)=71 - KSPARSE(2, 635)=5 + KSPARSE(1, 643)=72 + KSPARSE(2, 643)=5 !WR_NO3/WR_NO3 - KSPARSE(1, 636)=71 - KSPARSE(2, 636)=71 + KSPARSE(1, 644)=72 + KSPARSE(2, 644)=72 !WR_NO3/WR_SO2 - KSPARSE(1, 637)=71 - KSPARSE(2, 637)=80 + KSPARSE(1, 645)=72 + KSPARSE(2, 645)=81 !WR_NO3/WR_SULF - KSPARSE(1, 638)=71 - KSPARSE(2, 638)=81 + KSPARSE(1, 646)=72 + KSPARSE(2, 646)=82 !WR_N2O5/N2O5 - KSPARSE(1, 639)=72 - KSPARSE(2, 639)=6 + KSPARSE(1, 647)=73 + KSPARSE(2, 647)=6 !WR_N2O5/WR_N2O5 - KSPARSE(1, 640)=72 - KSPARSE(2, 640)=72 + KSPARSE(1, 648)=73 + KSPARSE(2, 648)=73 !WR_HONO/HONO - KSPARSE(1, 641)=73 - KSPARSE(2, 641)=7 + KSPARSE(1, 649)=74 + KSPARSE(2, 649)=7 !WR_HONO/WR_HONO - KSPARSE(1, 642)=73 - KSPARSE(2, 642)=73 + KSPARSE(1, 650)=74 + KSPARSE(2, 650)=74 !WR_HONO/WR_HNO4 - KSPARSE(1, 643)=73 - KSPARSE(2, 643)=75 + KSPARSE(1, 651)=74 + KSPARSE(2, 651)=76 !WR_HONO/WR_OH - KSPARSE(1, 644)=73 - KSPARSE(2, 644)=77 + KSPARSE(1, 652)=74 + KSPARSE(2, 652)=78 !WR_HNO3/HNO3 - KSPARSE(1, 645)=74 - KSPARSE(2, 645)=8 + KSPARSE(1, 653)=75 + KSPARSE(2, 653)=8 !WR_HNO3/WR_NO3 - KSPARSE(1, 646)=74 - KSPARSE(2, 646)=71 + KSPARSE(1, 654)=75 + KSPARSE(2, 654)=72 !WR_HNO3/WR_N2O5 - KSPARSE(1, 647)=74 - KSPARSE(2, 647)=72 + KSPARSE(1, 655)=75 + KSPARSE(2, 655)=73 !WR_HNO3/WR_HNO3 - KSPARSE(1, 648)=74 - KSPARSE(2, 648)=74 + KSPARSE(1, 656)=75 + KSPARSE(2, 656)=75 !WR_HNO3/WR_HNO4 - KSPARSE(1, 649)=74 - KSPARSE(2, 649)=75 + KSPARSE(1, 657)=75 + KSPARSE(2, 657)=76 !WR_HNO3/WR_SO2 - KSPARSE(1, 650)=74 - KSPARSE(2, 650)=80 + KSPARSE(1, 658)=75 + KSPARSE(2, 658)=81 !WR_HNO3/WR_SULF - KSPARSE(1, 651)=74 - KSPARSE(2, 651)=81 + KSPARSE(1, 659)=75 + KSPARSE(2, 659)=82 !WR_HNO4/HNO4 - KSPARSE(1, 652)=75 - KSPARSE(2, 652)=9 + KSPARSE(1, 660)=76 + KSPARSE(2, 660)=9 !WR_HNO4/WR_NO2 - KSPARSE(1, 653)=75 - KSPARSE(2, 653)=70 + KSPARSE(1, 661)=76 + KSPARSE(2, 661)=71 !WR_HNO4/WR_HNO4 - KSPARSE(1, 654)=75 - KSPARSE(2, 654)=75 + KSPARSE(1, 662)=76 + KSPARSE(2, 662)=76 !WR_HNO4/WR_HO2 - KSPARSE(1, 655)=75 - KSPARSE(2, 655)=78 + KSPARSE(1, 663)=76 + KSPARSE(2, 663)=79 !WR_HNO4/WR_SO2 - KSPARSE(1, 656)=75 - KSPARSE(2, 656)=80 + KSPARSE(1, 664)=76 + KSPARSE(2, 664)=81 !WR_NH3/NH3 - KSPARSE(1, 657)=76 - KSPARSE(2, 657)=10 + KSPARSE(1, 665)=77 + KSPARSE(2, 665)=10 !WR_NH3/WR_NH3 - KSPARSE(1, 658)=76 - KSPARSE(2, 658)=76 + KSPARSE(1, 666)=77 + KSPARSE(2, 666)=77 !WR_OH/OH - KSPARSE(1, 659)=77 - KSPARSE(2, 659)=14 + KSPARSE(1, 667)=78 + KSPARSE(2, 667)=15 !WR_OH/WR_O3 - KSPARSE(1, 660)=77 - KSPARSE(2, 660)=67 + KSPARSE(1, 668)=78 + KSPARSE(2, 668)=68 !WR_OH/WR_H2O2 - KSPARSE(1, 661)=77 - KSPARSE(2, 661)=68 + KSPARSE(1, 669)=78 + KSPARSE(2, 669)=69 !WR_OH/WR_HONO - KSPARSE(1, 662)=77 - KSPARSE(2, 662)=73 + KSPARSE(1, 670)=78 + KSPARSE(2, 670)=74 !WR_OH/WR_HNO3 - KSPARSE(1, 663)=77 - KSPARSE(2, 663)=74 + KSPARSE(1, 671)=78 + KSPARSE(2, 671)=75 !WR_OH/WR_OH - KSPARSE(1, 664)=77 - KSPARSE(2, 664)=77 + KSPARSE(1, 672)=78 + KSPARSE(2, 672)=78 !WR_OH/WR_HO2 - KSPARSE(1, 665)=77 - KSPARSE(2, 665)=78 + KSPARSE(1, 673)=78 + KSPARSE(2, 673)=79 !WR_OH/WR_SO2 - KSPARSE(1, 666)=77 - KSPARSE(2, 666)=80 + KSPARSE(1, 674)=78 + KSPARSE(2, 674)=81 !WR_OH/WR_HCHO - KSPARSE(1, 667)=77 - KSPARSE(2, 667)=82 + KSPARSE(1, 675)=78 + KSPARSE(2, 675)=83 !WR_OH/WR_ORA1 - KSPARSE(1, 668)=77 - KSPARSE(2, 668)=83 + KSPARSE(1, 676)=78 + KSPARSE(2, 676)=84 !WR_OH/WR_ASO4 - KSPARSE(1, 669)=77 - KSPARSE(2, 669)=88 + KSPARSE(1, 677)=78 + KSPARSE(2, 677)=89 !WR_OH/WR_AHMS - KSPARSE(1, 670)=77 - KSPARSE(2, 670)=91 + KSPARSE(1, 678)=78 + KSPARSE(2, 678)=92 !WR_HO2/HO2 - KSPARSE(1, 671)=78 - KSPARSE(2, 671)=15 + KSPARSE(1, 679)=79 + KSPARSE(2, 679)=16 !WR_HO2/WR_O3 - KSPARSE(1, 672)=78 - KSPARSE(2, 672)=67 + KSPARSE(1, 680)=79 + KSPARSE(2, 680)=68 !WR_HO2/WR_H2O2 - KSPARSE(1, 673)=78 - KSPARSE(2, 673)=68 + KSPARSE(1, 681)=79 + KSPARSE(2, 681)=69 !WR_HO2/WR_NO2 - KSPARSE(1, 674)=78 - KSPARSE(2, 674)=70 + KSPARSE(1, 682)=79 + KSPARSE(2, 682)=71 !WR_HO2/WR_HNO4 - KSPARSE(1, 675)=78 - KSPARSE(2, 675)=75 + KSPARSE(1, 683)=79 + KSPARSE(2, 683)=76 !WR_HO2/WR_OH - KSPARSE(1, 676)=78 - KSPARSE(2, 676)=77 + KSPARSE(1, 684)=79 + KSPARSE(2, 684)=78 !WR_HO2/WR_HO2 - KSPARSE(1, 677)=78 - KSPARSE(2, 677)=78 + KSPARSE(1, 685)=79 + KSPARSE(2, 685)=79 !WR_HO2/WR_HCHO - KSPARSE(1, 678)=78 - KSPARSE(2, 678)=82 + KSPARSE(1, 686)=79 + KSPARSE(2, 686)=83 !WR_HO2/WR_ORA1 - KSPARSE(1, 679)=78 - KSPARSE(2, 679)=83 + KSPARSE(1, 687)=79 + KSPARSE(2, 687)=84 !WR_HO2/WR_MO2 - KSPARSE(1, 680)=78 - KSPARSE(2, 680)=85 + KSPARSE(1, 688)=79 + KSPARSE(2, 688)=86 !WR_HO2/WR_ASO5 - KSPARSE(1, 681)=78 - KSPARSE(2, 681)=89 + KSPARSE(1, 689)=79 + KSPARSE(2, 689)=90 !WR_HO2/WR_AHMS - KSPARSE(1, 682)=78 - KSPARSE(2, 682)=91 + KSPARSE(1, 690)=79 + KSPARSE(2, 690)=92 !WR_CO2/WR_OH - KSPARSE(1, 683)=79 - KSPARSE(2, 683)=77 + KSPARSE(1, 691)=80 + KSPARSE(2, 691)=78 !WR_CO2/WR_CO2 - KSPARSE(1, 684)=79 - KSPARSE(2, 684)=79 + KSPARSE(1, 692)=80 + KSPARSE(2, 692)=80 !WR_CO2/WR_ORA1 - KSPARSE(1, 685)=79 - KSPARSE(2, 685)=83 + KSPARSE(1, 693)=80 + KSPARSE(2, 693)=84 !WR_SO2/SO2 - KSPARSE(1, 686)=80 - KSPARSE(2, 686)=11 + KSPARSE(1, 694)=81 + KSPARSE(2, 694)=12 !WR_SO2/WR_O3 - KSPARSE(1, 687)=80 - KSPARSE(2, 687)=67 + KSPARSE(1, 695)=81 + KSPARSE(2, 695)=68 !WR_SO2/WR_H2O2 - KSPARSE(1, 688)=80 - KSPARSE(2, 688)=68 + KSPARSE(1, 696)=81 + KSPARSE(2, 696)=69 !WR_SO2/WR_NO3 - KSPARSE(1, 689)=80 - KSPARSE(2, 689)=71 + KSPARSE(1, 697)=81 + KSPARSE(2, 697)=72 !WR_SO2/WR_HNO4 - KSPARSE(1, 690)=80 - KSPARSE(2, 690)=75 + KSPARSE(1, 698)=81 + KSPARSE(2, 698)=76 !WR_SO2/WR_OH - KSPARSE(1, 691)=80 - KSPARSE(2, 691)=77 + KSPARSE(1, 699)=81 + KSPARSE(2, 699)=78 !WR_SO2/WR_SO2 - KSPARSE(1, 692)=80 - KSPARSE(2, 692)=80 + KSPARSE(1, 700)=81 + KSPARSE(2, 700)=81 !WR_SO2/WR_HCHO - KSPARSE(1, 693)=80 - KSPARSE(2, 693)=82 + KSPARSE(1, 701)=81 + KSPARSE(2, 701)=83 !WR_SO2/WR_MO2 - KSPARSE(1, 694)=80 - KSPARSE(2, 694)=85 + KSPARSE(1, 702)=81 + KSPARSE(2, 702)=86 !WR_SO2/WR_AHSO5 - KSPARSE(1, 695)=80 - KSPARSE(2, 695)=90 + KSPARSE(1, 703)=81 + KSPARSE(2, 703)=91 !WR_SO2/WR_AHMS - KSPARSE(1, 696)=80 - KSPARSE(2, 696)=91 + KSPARSE(1, 704)=81 + KSPARSE(2, 704)=92 !WR_SULF/SULF - KSPARSE(1, 697)=81 - KSPARSE(2, 697)=12 + KSPARSE(1, 705)=82 + KSPARSE(2, 705)=13 !WR_SULF/WR_O3 - KSPARSE(1, 698)=81 - KSPARSE(2, 698)=67 + KSPARSE(1, 706)=82 + KSPARSE(2, 706)=68 !WR_SULF/WR_H2O2 - KSPARSE(1, 699)=81 - KSPARSE(2, 699)=68 + KSPARSE(1, 707)=82 + KSPARSE(2, 707)=69 !WR_SULF/WR_NO3 - KSPARSE(1, 700)=81 - KSPARSE(2, 700)=71 + KSPARSE(1, 708)=82 + KSPARSE(2, 708)=72 !WR_SULF/WR_HNO4 - KSPARSE(1, 701)=81 - KSPARSE(2, 701)=75 + KSPARSE(1, 709)=82 + KSPARSE(2, 709)=76 !WR_SULF/WR_SO2 - KSPARSE(1, 702)=81 - KSPARSE(2, 702)=80 + KSPARSE(1, 710)=82 + KSPARSE(2, 710)=81 !WR_SULF/WR_SULF - KSPARSE(1, 703)=81 - KSPARSE(2, 703)=81 + KSPARSE(1, 711)=82 + KSPARSE(2, 711)=82 !WR_SULF/WR_ASO4 - KSPARSE(1, 704)=81 - KSPARSE(2, 704)=88 + KSPARSE(1, 712)=82 + KSPARSE(2, 712)=89 !WR_SULF/WR_AHSO5 - KSPARSE(1, 705)=81 - KSPARSE(2, 705)=90 + KSPARSE(1, 713)=82 + KSPARSE(2, 713)=91 !WR_HCHO/HCHO - KSPARSE(1, 706)=82 - KSPARSE(2, 706)=22 + KSPARSE(1, 714)=83 + KSPARSE(2, 714)=23 !WR_HCHO/WR_OH - KSPARSE(1, 707)=82 - KSPARSE(2, 707)=77 + KSPARSE(1, 715)=83 + KSPARSE(2, 715)=78 !WR_HCHO/WR_SO2 - KSPARSE(1, 708)=82 - KSPARSE(2, 708)=80 + KSPARSE(1, 716)=83 + KSPARSE(2, 716)=81 !WR_HCHO/WR_HCHO - KSPARSE(1, 709)=82 - KSPARSE(2, 709)=82 + KSPARSE(1, 717)=83 + KSPARSE(2, 717)=83 !WR_HCHO/WR_MO2 - KSPARSE(1, 710)=82 - KSPARSE(2, 710)=85 + KSPARSE(1, 718)=83 + KSPARSE(2, 718)=86 !WR_HCHO/WR_AHMS - KSPARSE(1, 711)=82 - KSPARSE(2, 711)=91 + KSPARSE(1, 719)=83 + KSPARSE(2, 719)=92 !WR_ORA1/ORA1 - KSPARSE(1, 712)=83 - KSPARSE(2, 712)=30 + KSPARSE(1, 720)=84 + KSPARSE(2, 720)=31 !WR_ORA1/WR_OH - KSPARSE(1, 713)=83 - KSPARSE(2, 713)=77 + KSPARSE(1, 721)=84 + KSPARSE(2, 721)=78 !WR_ORA1/WR_HCHO - KSPARSE(1, 714)=83 - KSPARSE(2, 714)=82 + KSPARSE(1, 722)=84 + KSPARSE(2, 722)=83 !WR_ORA1/WR_ORA1 - KSPARSE(1, 715)=83 - KSPARSE(2, 715)=83 + KSPARSE(1, 723)=84 + KSPARSE(2, 723)=84 !WR_ORA1/WR_AHMS - KSPARSE(1, 716)=83 - KSPARSE(2, 716)=91 + KSPARSE(1, 724)=84 + KSPARSE(2, 724)=92 !WR_ORA2/ORA2 - KSPARSE(1, 717)=84 - KSPARSE(2, 717)=31 + KSPARSE(1, 725)=85 + KSPARSE(2, 725)=32 !WR_ORA2/WR_ORA2 - KSPARSE(1, 718)=84 - KSPARSE(2, 718)=84 + KSPARSE(1, 726)=85 + KSPARSE(2, 726)=85 !WR_MO2/MO2 - KSPARSE(1, 719)=85 - KSPARSE(2, 719)=32 + KSPARSE(1, 727)=86 + KSPARSE(2, 727)=33 !WR_MO2/WR_SO2 - KSPARSE(1, 720)=85 - KSPARSE(2, 720)=80 + KSPARSE(1, 728)=86 + KSPARSE(2, 728)=81 !WR_MO2/WR_MO2 - KSPARSE(1, 721)=85 - KSPARSE(2, 721)=85 + KSPARSE(1, 729)=86 + KSPARSE(2, 729)=86 !WR_OP1/OP1 - KSPARSE(1, 722)=86 - KSPARSE(2, 722)=28 + KSPARSE(1, 730)=87 + KSPARSE(2, 730)=29 !WR_OP1/WR_SO2 - KSPARSE(1, 723)=86 - KSPARSE(2, 723)=80 + KSPARSE(1, 731)=87 + KSPARSE(2, 731)=81 !WR_OP1/WR_MO2 - KSPARSE(1, 724)=86 - KSPARSE(2, 724)=85 + KSPARSE(1, 732)=87 + KSPARSE(2, 732)=86 !WR_OP1/WR_OP1 - KSPARSE(1, 725)=86 - KSPARSE(2, 725)=86 + KSPARSE(1, 733)=87 + KSPARSE(2, 733)=87 !WR_ASO3/WR_NO3 - KSPARSE(1, 726)=87 - KSPARSE(2, 726)=71 + KSPARSE(1, 734)=88 + KSPARSE(2, 734)=72 !WR_ASO3/WR_OH - KSPARSE(1, 727)=87 - KSPARSE(2, 727)=77 + KSPARSE(1, 735)=88 + KSPARSE(2, 735)=78 !WR_ASO3/WR_SO2 - KSPARSE(1, 728)=87 - KSPARSE(2, 728)=80 + KSPARSE(1, 736)=88 + KSPARSE(2, 736)=81 !WR_ASO3/WR_MO2 - KSPARSE(1, 729)=87 - KSPARSE(2, 729)=85 + KSPARSE(1, 737)=88 + KSPARSE(2, 737)=86 !WR_ASO3/WR_ASO3 - KSPARSE(1, 730)=87 - KSPARSE(2, 730)=87 + KSPARSE(1, 738)=88 + KSPARSE(2, 738)=88 !WR_ASO4/WR_NO3 - KSPARSE(1, 731)=88 - KSPARSE(2, 731)=71 + KSPARSE(1, 739)=89 + KSPARSE(2, 739)=72 !WR_ASO4/WR_SULF - KSPARSE(1, 732)=88 - KSPARSE(2, 732)=81 + KSPARSE(1, 740)=89 + KSPARSE(2, 740)=82 !WR_ASO4/WR_ASO4 - KSPARSE(1, 733)=88 - KSPARSE(2, 733)=88 + KSPARSE(1, 741)=89 + KSPARSE(2, 741)=89 !WR_ASO4/WR_ASO5 - KSPARSE(1, 734)=88 - KSPARSE(2, 734)=89 + KSPARSE(1, 742)=89 + KSPARSE(2, 742)=90 !WR_ASO5/WR_HO2 - KSPARSE(1, 735)=89 - KSPARSE(2, 735)=78 + KSPARSE(1, 743)=90 + KSPARSE(2, 743)=79 !WR_ASO5/WR_ASO3 - KSPARSE(1, 736)=89 - KSPARSE(2, 736)=87 + KSPARSE(1, 744)=90 + KSPARSE(2, 744)=88 !WR_ASO5/WR_ASO5 - KSPARSE(1, 737)=89 - KSPARSE(2, 737)=89 + KSPARSE(1, 745)=90 + KSPARSE(2, 745)=90 !WR_AHSO5/WR_HO2 - KSPARSE(1, 738)=90 - KSPARSE(2, 738)=78 + KSPARSE(1, 746)=91 + KSPARSE(2, 746)=79 !WR_AHSO5/WR_SO2 - KSPARSE(1, 739)=90 - KSPARSE(2, 739)=80 + KSPARSE(1, 747)=91 + KSPARSE(2, 747)=81 !WR_AHSO5/WR_ASO5 - KSPARSE(1, 740)=90 - KSPARSE(2, 740)=89 + KSPARSE(1, 748)=91 + KSPARSE(2, 748)=90 !WR_AHSO5/WR_AHSO5 - KSPARSE(1, 741)=90 - KSPARSE(2, 741)=90 + KSPARSE(1, 749)=91 + KSPARSE(2, 749)=91 !WR_AHMS/WR_OH - KSPARSE(1, 742)=91 - KSPARSE(2, 742)=77 + KSPARSE(1, 750)=92 + KSPARSE(2, 750)=78 !WR_AHMS/WR_SO2 - KSPARSE(1, 743)=91 - KSPARSE(2, 743)=80 + KSPARSE(1, 751)=92 + KSPARSE(2, 751)=81 !WR_AHMS/WR_HCHO - KSPARSE(1, 744)=91 - KSPARSE(2, 744)=82 + KSPARSE(1, 752)=92 + KSPARSE(2, 752)=83 !WR_AHMS/WR_AHMS - KSPARSE(1, 745)=91 - KSPARSE(2, 745)=91 -KSPARSEDIM = 745 + KSPARSE(1, 753)=92 + KSPARSE(2, 753)=92 +KSPARSEDIM = 753 RETURN END SUBROUTINE CH_SPARSE_AQ !! @@ -40937,7 +41664,7 @@ END SUBROUTINE CH_SPARSE_AQ !! !! EXTERNAL !! -------- -use mode_msg +!! none !! !! IMPLICIT ARGUMENTS !! ------------------ @@ -40955,8 +41682,8 @@ IMPLICIT NONE !! EXECUTABLE STATEMENTS !! --------------------- ! check if output array is large enough -IF (KSPARSEDIM.LT.449) THEN - call Print_msg( NVERB_FATAL, 'GEN', 'CH_SPARSE_GAZ', 'array KSPARSE is too small' ) +IF (KSPARSEDIM.LT.457) THEN + STOP 'CH_SPARSE ERROR: array KSPARSE is too small!' END IF !O3/O3 KSPARSE(1, 1)=1 @@ -40969,28 +41696,28 @@ END IF KSPARSE(2, 3)=4 !O3/OH KSPARSE(1, 4)=1 - KSPARSE(2, 4)=14 + KSPARSE(2, 4)=15 !O3/HO2 KSPARSE(1, 5)=1 - KSPARSE(2, 5)=15 + KSPARSE(2, 5)=16 !O3/ALKE KSPARSE(1, 6)=1 - KSPARSE(2, 6)=19 + KSPARSE(2, 6)=20 !O3/BIO KSPARSE(1, 7)=1 - KSPARSE(2, 7)=20 + KSPARSE(2, 7)=21 !O3/CARBO KSPARSE(1, 8)=1 - KSPARSE(2, 8)=25 + KSPARSE(2, 8)=26 !O3/PAN KSPARSE(1, 9)=1 - KSPARSE(2, 9)=27 + KSPARSE(2, 9)=28 !O3/ADD KSPARSE(1, 10)=1 - KSPARSE(2, 10)=37 + KSPARSE(2, 10)=38 !O3/CARBOP KSPARSE(1, 11)=1 - KSPARSE(2, 11)=39 + KSPARSE(2, 11)=40 !H2O2/O3 KSPARSE(1, 12)=2 KSPARSE(2, 12)=1 @@ -40999,16 +41726,16 @@ END IF KSPARSE(2, 13)=2 !H2O2/OH KSPARSE(1, 14)=2 - KSPARSE(2, 14)=14 + KSPARSE(2, 14)=15 !H2O2/HO2 KSPARSE(1, 15)=2 - KSPARSE(2, 15)=15 + KSPARSE(2, 15)=16 !H2O2/ALKE KSPARSE(1, 16)=2 - KSPARSE(2, 16)=19 + KSPARSE(2, 16)=20 !H2O2/BIO KSPARSE(1, 17)=2 - KSPARSE(2, 17)=20 + KSPARSE(2, 17)=21 !NO/O3 KSPARSE(1, 18)=3 KSPARSE(2, 18)=1 @@ -41026,34 +41753,34 @@ END IF KSPARSE(2, 22)=7 !NO/OH KSPARSE(1, 23)=3 - KSPARSE(2, 23)=14 + KSPARSE(2, 23)=15 !NO/HO2 KSPARSE(1, 24)=3 - KSPARSE(2, 24)=15 + KSPARSE(2, 24)=16 !NO/MO2 KSPARSE(1, 25)=3 - KSPARSE(2, 25)=32 + KSPARSE(2, 25)=33 !NO/ALKAP KSPARSE(1, 26)=3 - KSPARSE(2, 26)=33 + KSPARSE(2, 26)=34 !NO/ALKEP KSPARSE(1, 27)=3 - KSPARSE(2, 27)=34 + KSPARSE(2, 27)=35 !NO/BIOP KSPARSE(1, 28)=3 - KSPARSE(2, 28)=35 + KSPARSE(2, 28)=36 !NO/AROP KSPARSE(1, 29)=3 - KSPARSE(2, 29)=38 + KSPARSE(2, 29)=39 !NO/CARBOP KSPARSE(1, 30)=3 - KSPARSE(2, 30)=39 + KSPARSE(2, 30)=40 !NO/OLN KSPARSE(1, 31)=3 - KSPARSE(2, 31)=40 + KSPARSE(2, 31)=41 !NO/XO2 KSPARSE(1, 32)=3 - KSPARSE(2, 32)=41 + KSPARSE(2, 32)=42 !NO2/O3 KSPARSE(1, 33)=4 KSPARSE(2, 33)=1 @@ -41078,1234 +41805,1258 @@ END IF !NO2/HNO4 KSPARSE(1, 40)=4 KSPARSE(2, 40)=9 -!NO2/OH +!NO2/DMS KSPARSE(1, 41)=4 - KSPARSE(2, 41)=14 -!NO2/HO2 + KSPARSE(2, 41)=11 +!NO2/OH KSPARSE(1, 42)=4 KSPARSE(2, 42)=15 -!NO2/CARBO +!NO2/HO2 KSPARSE(1, 43)=4 - KSPARSE(2, 43)=25 -!NO2/ONIT + KSPARSE(2, 43)=16 +!NO2/CARBO KSPARSE(1, 44)=4 KSPARSE(2, 44)=26 -!NO2/PAN +!NO2/ONIT KSPARSE(1, 45)=4 KSPARSE(2, 45)=27 -!NO2/MO2 +!NO2/PAN KSPARSE(1, 46)=4 - KSPARSE(2, 46)=32 -!NO2/ALKAP + KSPARSE(2, 46)=28 +!NO2/MO2 KSPARSE(1, 47)=4 KSPARSE(2, 47)=33 -!NO2/ALKEP +!NO2/ALKAP KSPARSE(1, 48)=4 KSPARSE(2, 48)=34 -!NO2/BIOP +!NO2/ALKEP KSPARSE(1, 49)=4 KSPARSE(2, 49)=35 -!NO2/PHO +!NO2/BIOP KSPARSE(1, 50)=4 KSPARSE(2, 50)=36 -!NO2/ADD +!NO2/PHO KSPARSE(1, 51)=4 KSPARSE(2, 51)=37 -!NO2/AROP +!NO2/ADD KSPARSE(1, 52)=4 KSPARSE(2, 52)=38 -!NO2/CARBOP +!NO2/AROP KSPARSE(1, 53)=4 KSPARSE(2, 53)=39 -!NO2/OLN +!NO2/CARBOP KSPARSE(1, 54)=4 KSPARSE(2, 54)=40 -!NO2/XO2 +!NO2/OLN KSPARSE(1, 55)=4 KSPARSE(2, 55)=41 +!NO2/XO2 + KSPARSE(1, 56)=4 + KSPARSE(2, 56)=42 !NO3/O3 - KSPARSE(1, 56)=5 - KSPARSE(2, 56)=1 -!NO3/NO KSPARSE(1, 57)=5 - KSPARSE(2, 57)=3 -!NO3/NO2 + KSPARSE(2, 57)=1 +!NO3/NO KSPARSE(1, 58)=5 - KSPARSE(2, 58)=4 -!NO3/NO3 + KSPARSE(2, 58)=3 +!NO3/NO2 KSPARSE(1, 59)=5 - KSPARSE(2, 59)=5 -!NO3/N2O5 + KSPARSE(2, 59)=4 +!NO3/NO3 KSPARSE(1, 60)=5 - KSPARSE(2, 60)=6 -!NO3/HNO3 + KSPARSE(2, 60)=5 +!NO3/N2O5 KSPARSE(1, 61)=5 - KSPARSE(2, 61)=8 -!NO3/HNO4 + KSPARSE(2, 61)=6 +!NO3/HNO3 KSPARSE(1, 62)=5 - KSPARSE(2, 62)=9 -!NO3/OH + KSPARSE(2, 62)=8 +!NO3/HNO4 KSPARSE(1, 63)=5 - KSPARSE(2, 63)=14 -!NO3/HO2 + KSPARSE(2, 63)=9 +!NO3/DMS KSPARSE(1, 64)=5 - KSPARSE(2, 64)=15 -!NO3/ALKE + KSPARSE(2, 64)=11 +!NO3/OH KSPARSE(1, 65)=5 - KSPARSE(2, 65)=19 -!NO3/BIO + KSPARSE(2, 65)=15 +!NO3/HO2 KSPARSE(1, 66)=5 - KSPARSE(2, 66)=20 -!NO3/ARO + KSPARSE(2, 66)=16 +!NO3/ALKE KSPARSE(1, 67)=5 - KSPARSE(2, 67)=21 -!NO3/HCHO + KSPARSE(2, 67)=20 +!NO3/BIO KSPARSE(1, 68)=5 - KSPARSE(2, 68)=22 -!NO3/ALD + KSPARSE(2, 68)=21 +!NO3/ARO KSPARSE(1, 69)=5 - KSPARSE(2, 69)=23 -!NO3/CARBO + KSPARSE(2, 69)=22 +!NO3/HCHO KSPARSE(1, 70)=5 - KSPARSE(2, 70)=25 -!NO3/PAN + KSPARSE(2, 70)=23 +!NO3/ALD KSPARSE(1, 71)=5 - KSPARSE(2, 71)=27 -!NO3/MO2 + KSPARSE(2, 71)=24 +!NO3/CARBO KSPARSE(1, 72)=5 - KSPARSE(2, 72)=32 -!NO3/ALKAP + KSPARSE(2, 72)=26 +!NO3/PAN KSPARSE(1, 73)=5 - KSPARSE(2, 73)=33 -!NO3/ALKEP + KSPARSE(2, 73)=28 +!NO3/MO2 KSPARSE(1, 74)=5 - KSPARSE(2, 74)=34 -!NO3/BIOP + KSPARSE(2, 74)=33 +!NO3/ALKAP KSPARSE(1, 75)=5 - KSPARSE(2, 75)=35 -!NO3/AROP + KSPARSE(2, 75)=34 +!NO3/ALKEP KSPARSE(1, 76)=5 - KSPARSE(2, 76)=38 -!NO3/CARBOP + KSPARSE(2, 76)=35 +!NO3/BIOP KSPARSE(1, 77)=5 - KSPARSE(2, 77)=39 -!NO3/OLN + KSPARSE(2, 77)=36 +!NO3/AROP KSPARSE(1, 78)=5 - KSPARSE(2, 78)=40 -!NO3/XO2 + KSPARSE(2, 78)=39 +!NO3/CARBOP KSPARSE(1, 79)=5 - KSPARSE(2, 79)=41 + KSPARSE(2, 79)=40 +!NO3/OLN + KSPARSE(1, 80)=5 + KSPARSE(2, 80)=41 +!NO3/XO2 + KSPARSE(1, 81)=5 + KSPARSE(2, 81)=42 !N2O5/NO2 - KSPARSE(1, 80)=6 - KSPARSE(2, 80)=4 + KSPARSE(1, 82)=6 + KSPARSE(2, 82)=4 !N2O5/NO3 - KSPARSE(1, 81)=6 - KSPARSE(2, 81)=5 + KSPARSE(1, 83)=6 + KSPARSE(2, 83)=5 !N2O5/N2O5 - KSPARSE(1, 82)=6 - KSPARSE(2, 82)=6 + KSPARSE(1, 84)=6 + KSPARSE(2, 84)=6 !HONO/NO - KSPARSE(1, 83)=7 - KSPARSE(2, 83)=3 + KSPARSE(1, 85)=7 + KSPARSE(2, 85)=3 !HONO/NO2 - KSPARSE(1, 84)=7 - KSPARSE(2, 84)=4 + KSPARSE(1, 86)=7 + KSPARSE(2, 86)=4 !HONO/HONO - KSPARSE(1, 85)=7 - KSPARSE(2, 85)=7 + KSPARSE(1, 87)=7 + KSPARSE(2, 87)=7 !HONO/OH - KSPARSE(1, 86)=7 - KSPARSE(2, 86)=14 + KSPARSE(1, 88)=7 + KSPARSE(2, 88)=15 !HONO/ADD - KSPARSE(1, 87)=7 - KSPARSE(2, 87)=37 + KSPARSE(1, 89)=7 + KSPARSE(2, 89)=38 !HNO3/NO2 - KSPARSE(1, 88)=8 - KSPARSE(2, 88)=4 + KSPARSE(1, 90)=8 + KSPARSE(2, 90)=4 !HNO3/NO3 - KSPARSE(1, 89)=8 - KSPARSE(2, 89)=5 + KSPARSE(1, 91)=8 + KSPARSE(2, 91)=5 !HNO3/HNO3 - KSPARSE(1, 90)=8 - KSPARSE(2, 90)=8 + KSPARSE(1, 92)=8 + KSPARSE(2, 92)=8 !HNO3/OH - KSPARSE(1, 91)=8 - KSPARSE(2, 91)=14 + KSPARSE(1, 93)=8 + KSPARSE(2, 93)=15 !HNO3/HO2 - KSPARSE(1, 92)=8 - KSPARSE(2, 92)=15 + KSPARSE(1, 94)=8 + KSPARSE(2, 94)=16 !HNO3/ARO - KSPARSE(1, 93)=8 - KSPARSE(2, 93)=21 + KSPARSE(1, 95)=8 + KSPARSE(2, 95)=22 !HNO3/HCHO - KSPARSE(1, 94)=8 - KSPARSE(2, 94)=22 + KSPARSE(1, 96)=8 + KSPARSE(2, 96)=23 !HNO3/ALD - KSPARSE(1, 95)=8 - KSPARSE(2, 95)=23 + KSPARSE(1, 97)=8 + KSPARSE(2, 97)=24 !HNO3/CARBO - KSPARSE(1, 96)=8 - KSPARSE(2, 96)=25 + KSPARSE(1, 98)=8 + KSPARSE(2, 98)=26 !HNO4/NO2 - KSPARSE(1, 97)=9 - KSPARSE(2, 97)=4 + KSPARSE(1, 99)=9 + KSPARSE(2, 99)=4 !HNO4/HNO4 - KSPARSE(1, 98)=9 - KSPARSE(2, 98)=9 + KSPARSE(1, 100)=9 + KSPARSE(2, 100)=9 !HNO4/OH - KSPARSE(1, 99)=9 - KSPARSE(2, 99)=14 + KSPARSE(1, 101)=9 + KSPARSE(2, 101)=15 !HNO4/HO2 - KSPARSE(1, 100)=9 - KSPARSE(2, 100)=15 + KSPARSE(1, 102)=9 + KSPARSE(2, 102)=16 !NH3/NH3 - KSPARSE(1, 101)=10 - KSPARSE(2, 101)=10 + KSPARSE(1, 103)=10 + KSPARSE(2, 103)=10 !NH3/OH - KSPARSE(1, 102)=10 - KSPARSE(2, 102)=14 + KSPARSE(1, 104)=10 + KSPARSE(2, 104)=15 +!DMS/NO3 + KSPARSE(1, 105)=11 + KSPARSE(2, 105)=5 +!DMS/DMS + KSPARSE(1, 106)=11 + KSPARSE(2, 106)=11 +!DMS/OH + KSPARSE(1, 107)=11 + KSPARSE(2, 107)=15 +!SO2/NO3 + KSPARSE(1, 108)=12 + KSPARSE(2, 108)=5 +!SO2/DMS + KSPARSE(1, 109)=12 + KSPARSE(2, 109)=11 !SO2/SO2 - KSPARSE(1, 103)=11 - KSPARSE(2, 103)=11 + KSPARSE(1, 110)=12 + KSPARSE(2, 110)=12 !SO2/OH - KSPARSE(1, 104)=11 - KSPARSE(2, 104)=14 + KSPARSE(1, 111)=12 + KSPARSE(2, 111)=15 !SULF/SO2 - KSPARSE(1, 105)=12 - KSPARSE(2, 105)=11 + KSPARSE(1, 112)=13 + KSPARSE(2, 112)=12 !SULF/SULF - KSPARSE(1, 106)=12 - KSPARSE(2, 106)=12 + KSPARSE(1, 113)=13 + KSPARSE(2, 113)=13 !SULF/OH - KSPARSE(1, 107)=12 - KSPARSE(2, 107)=14 + KSPARSE(1, 114)=13 + KSPARSE(2, 114)=15 !CO/O3 - KSPARSE(1, 108)=13 - KSPARSE(2, 108)=1 + KSPARSE(1, 115)=14 + KSPARSE(2, 115)=1 !CO/NO3 - KSPARSE(1, 109)=13 - KSPARSE(2, 109)=5 + KSPARSE(1, 116)=14 + KSPARSE(2, 116)=5 !CO/CO - KSPARSE(1, 110)=13 - KSPARSE(2, 110)=13 + KSPARSE(1, 117)=14 + KSPARSE(2, 117)=14 !CO/OH - KSPARSE(1, 111)=13 - KSPARSE(2, 111)=14 + KSPARSE(1, 118)=14 + KSPARSE(2, 118)=15 !CO/ALKA - KSPARSE(1, 112)=13 - KSPARSE(2, 112)=18 + KSPARSE(1, 119)=14 + KSPARSE(2, 119)=19 !CO/ALKE - KSPARSE(1, 113)=13 - KSPARSE(2, 113)=19 + KSPARSE(1, 120)=14 + KSPARSE(2, 120)=20 !CO/BIO - KSPARSE(1, 114)=13 - KSPARSE(2, 114)=20 + KSPARSE(1, 121)=14 + KSPARSE(2, 121)=21 !CO/HCHO - KSPARSE(1, 115)=13 - KSPARSE(2, 115)=22 + KSPARSE(1, 122)=14 + KSPARSE(2, 122)=23 !CO/ALD - KSPARSE(1, 116)=13 - KSPARSE(2, 116)=23 + KSPARSE(1, 123)=14 + KSPARSE(2, 123)=24 !CO/CARBO - KSPARSE(1, 117)=13 - KSPARSE(2, 117)=25 + KSPARSE(1, 124)=14 + KSPARSE(2, 124)=26 !CO/PAN - KSPARSE(1, 118)=13 - KSPARSE(2, 118)=27 + KSPARSE(1, 125)=14 + KSPARSE(2, 125)=28 !OH/O3 - KSPARSE(1, 119)=14 - KSPARSE(2, 119)=1 + KSPARSE(1, 126)=15 + KSPARSE(2, 126)=1 !OH/H2O2 - KSPARSE(1, 120)=14 - KSPARSE(2, 120)=2 + KSPARSE(1, 127)=15 + KSPARSE(2, 127)=2 !OH/NO - KSPARSE(1, 121)=14 - KSPARSE(2, 121)=3 + KSPARSE(1, 128)=15 + KSPARSE(2, 128)=3 !OH/NO2 - KSPARSE(1, 122)=14 - KSPARSE(2, 122)=4 + KSPARSE(1, 129)=15 + KSPARSE(2, 129)=4 !OH/NO3 - KSPARSE(1, 123)=14 - KSPARSE(2, 123)=5 + KSPARSE(1, 130)=15 + KSPARSE(2, 130)=5 !OH/HONO - KSPARSE(1, 124)=14 - KSPARSE(2, 124)=7 + KSPARSE(1, 131)=15 + KSPARSE(2, 131)=7 !OH/HNO3 - KSPARSE(1, 125)=14 - KSPARSE(2, 125)=8 + KSPARSE(1, 132)=15 + KSPARSE(2, 132)=8 !OH/HNO4 - KSPARSE(1, 126)=14 - KSPARSE(2, 126)=9 + KSPARSE(1, 133)=15 + KSPARSE(2, 133)=9 !OH/NH3 - KSPARSE(1, 127)=14 - KSPARSE(2, 127)=10 + KSPARSE(1, 134)=15 + KSPARSE(2, 134)=10 +!OH/DMS + KSPARSE(1, 135)=15 + KSPARSE(2, 135)=11 !OH/SO2 - KSPARSE(1, 128)=14 - KSPARSE(2, 128)=11 + KSPARSE(1, 136)=15 + KSPARSE(2, 136)=12 !OH/CO - KSPARSE(1, 129)=14 - KSPARSE(2, 129)=13 + KSPARSE(1, 137)=15 + KSPARSE(2, 137)=14 !OH/OH - KSPARSE(1, 130)=14 - KSPARSE(2, 130)=14 + KSPARSE(1, 138)=15 + KSPARSE(2, 138)=15 !OH/HO2 - KSPARSE(1, 131)=14 - KSPARSE(2, 131)=15 + KSPARSE(1, 139)=15 + KSPARSE(2, 139)=16 !OH/CH4 - KSPARSE(1, 132)=14 - KSPARSE(2, 132)=16 + KSPARSE(1, 140)=15 + KSPARSE(2, 140)=17 !OH/ETH - KSPARSE(1, 133)=14 - KSPARSE(2, 133)=17 + KSPARSE(1, 141)=15 + KSPARSE(2, 141)=18 !OH/ALKA - KSPARSE(1, 134)=14 - KSPARSE(2, 134)=18 + KSPARSE(1, 142)=15 + KSPARSE(2, 142)=19 !OH/ALKE - KSPARSE(1, 135)=14 - KSPARSE(2, 135)=19 + KSPARSE(1, 143)=15 + KSPARSE(2, 143)=20 !OH/BIO - KSPARSE(1, 136)=14 - KSPARSE(2, 136)=20 + KSPARSE(1, 144)=15 + KSPARSE(2, 144)=21 !OH/ARO - KSPARSE(1, 137)=14 - KSPARSE(2, 137)=21 + KSPARSE(1, 145)=15 + KSPARSE(2, 145)=22 !OH/HCHO - KSPARSE(1, 138)=14 - KSPARSE(2, 138)=22 + KSPARSE(1, 146)=15 + KSPARSE(2, 146)=23 !OH/ALD - KSPARSE(1, 139)=14 - KSPARSE(2, 139)=23 + KSPARSE(1, 147)=15 + KSPARSE(2, 147)=24 !OH/KET - KSPARSE(1, 140)=14 - KSPARSE(2, 140)=24 + KSPARSE(1, 148)=15 + KSPARSE(2, 148)=25 !OH/CARBO - KSPARSE(1, 141)=14 - KSPARSE(2, 141)=25 + KSPARSE(1, 149)=15 + KSPARSE(2, 149)=26 !OH/ONIT - KSPARSE(1, 142)=14 - KSPARSE(2, 142)=26 + KSPARSE(1, 150)=15 + KSPARSE(2, 150)=27 !OH/PAN - KSPARSE(1, 143)=14 - KSPARSE(2, 143)=27 + KSPARSE(1, 151)=15 + KSPARSE(2, 151)=28 !OH/OP1 - KSPARSE(1, 144)=14 - KSPARSE(2, 144)=28 + KSPARSE(1, 152)=15 + KSPARSE(2, 152)=29 !OH/OP2 - KSPARSE(1, 145)=14 - KSPARSE(2, 145)=29 + KSPARSE(1, 153)=15 + KSPARSE(2, 153)=30 !OH/ORA1 - KSPARSE(1, 146)=14 - KSPARSE(2, 146)=30 + KSPARSE(1, 154)=15 + KSPARSE(2, 154)=31 !OH/ORA2 - KSPARSE(1, 147)=14 - KSPARSE(2, 147)=31 + KSPARSE(1, 155)=15 + KSPARSE(2, 155)=32 !OH/ADD - KSPARSE(1, 148)=14 - KSPARSE(2, 148)=37 + KSPARSE(1, 156)=15 + KSPARSE(2, 156)=38 !HO2/O3 - KSPARSE(1, 149)=15 - KSPARSE(2, 149)=1 + KSPARSE(1, 157)=16 + KSPARSE(2, 157)=1 !HO2/H2O2 - KSPARSE(1, 150)=15 - KSPARSE(2, 150)=2 + KSPARSE(1, 158)=16 + KSPARSE(2, 158)=2 !HO2/NO - KSPARSE(1, 151)=15 - KSPARSE(2, 151)=3 + KSPARSE(1, 159)=16 + KSPARSE(2, 159)=3 !HO2/NO2 - KSPARSE(1, 152)=15 - KSPARSE(2, 152)=4 + KSPARSE(1, 160)=16 + KSPARSE(2, 160)=4 !HO2/NO3 - KSPARSE(1, 153)=15 - KSPARSE(2, 153)=5 + KSPARSE(1, 161)=16 + KSPARSE(2, 161)=5 !HO2/HNO4 - KSPARSE(1, 154)=15 - KSPARSE(2, 154)=9 + KSPARSE(1, 162)=16 + KSPARSE(2, 162)=9 !HO2/SO2 - KSPARSE(1, 155)=15 - KSPARSE(2, 155)=11 + KSPARSE(1, 163)=16 + KSPARSE(2, 163)=12 !HO2/CO - KSPARSE(1, 156)=15 - KSPARSE(2, 156)=13 + KSPARSE(1, 164)=16 + KSPARSE(2, 164)=14 !HO2/OH - KSPARSE(1, 157)=15 - KSPARSE(2, 157)=14 + KSPARSE(1, 165)=16 + KSPARSE(2, 165)=15 !HO2/HO2 - KSPARSE(1, 158)=15 - KSPARSE(2, 158)=15 + KSPARSE(1, 166)=16 + KSPARSE(2, 166)=16 !HO2/ALKA - KSPARSE(1, 159)=15 - KSPARSE(2, 159)=18 + KSPARSE(1, 167)=16 + KSPARSE(2, 167)=19 !HO2/ALKE - KSPARSE(1, 160)=15 - KSPARSE(2, 160)=19 + KSPARSE(1, 168)=16 + KSPARSE(2, 168)=20 !HO2/BIO - KSPARSE(1, 161)=15 - KSPARSE(2, 161)=20 + KSPARSE(1, 169)=16 + KSPARSE(2, 169)=21 !HO2/ARO - KSPARSE(1, 162)=15 - KSPARSE(2, 162)=21 + KSPARSE(1, 170)=16 + KSPARSE(2, 170)=22 !HO2/HCHO - KSPARSE(1, 163)=15 - KSPARSE(2, 163)=22 + KSPARSE(1, 171)=16 + KSPARSE(2, 171)=23 !HO2/ALD - KSPARSE(1, 164)=15 - KSPARSE(2, 164)=23 + KSPARSE(1, 172)=16 + KSPARSE(2, 172)=24 !HO2/CARBO - KSPARSE(1, 165)=15 - KSPARSE(2, 165)=25 + KSPARSE(1, 173)=16 + KSPARSE(2, 173)=26 !HO2/ONIT - KSPARSE(1, 166)=15 - KSPARSE(2, 166)=26 + KSPARSE(1, 174)=16 + KSPARSE(2, 174)=27 !HO2/PAN - KSPARSE(1, 167)=15 - KSPARSE(2, 167)=27 + KSPARSE(1, 175)=16 + KSPARSE(2, 175)=28 !HO2/OP1 - KSPARSE(1, 168)=15 - KSPARSE(2, 168)=28 + KSPARSE(1, 176)=16 + KSPARSE(2, 176)=29 !HO2/OP2 - KSPARSE(1, 169)=15 - KSPARSE(2, 169)=29 + KSPARSE(1, 177)=16 + KSPARSE(2, 177)=30 !HO2/ORA1 - KSPARSE(1, 170)=15 - KSPARSE(2, 170)=30 + KSPARSE(1, 178)=16 + KSPARSE(2, 178)=31 !HO2/MO2 - KSPARSE(1, 171)=15 - KSPARSE(2, 171)=32 + KSPARSE(1, 179)=16 + KSPARSE(2, 179)=33 !HO2/ALKAP - KSPARSE(1, 172)=15 - KSPARSE(2, 172)=33 + KSPARSE(1, 180)=16 + KSPARSE(2, 180)=34 !HO2/ALKEP - KSPARSE(1, 173)=15 - KSPARSE(2, 173)=34 + KSPARSE(1, 181)=16 + KSPARSE(2, 181)=35 !HO2/BIOP - KSPARSE(1, 174)=15 - KSPARSE(2, 174)=35 + KSPARSE(1, 182)=16 + KSPARSE(2, 182)=36 !HO2/PHO - KSPARSE(1, 175)=15 - KSPARSE(2, 175)=36 + KSPARSE(1, 183)=16 + KSPARSE(2, 183)=37 !HO2/ADD - KSPARSE(1, 176)=15 - KSPARSE(2, 176)=37 + KSPARSE(1, 184)=16 + KSPARSE(2, 184)=38 !HO2/AROP - KSPARSE(1, 177)=15 - KSPARSE(2, 177)=38 + KSPARSE(1, 185)=16 + KSPARSE(2, 185)=39 !HO2/CARBOP - KSPARSE(1, 178)=15 - KSPARSE(2, 178)=39 + KSPARSE(1, 186)=16 + KSPARSE(2, 186)=40 !HO2/OLN - KSPARSE(1, 179)=15 - KSPARSE(2, 179)=40 + KSPARSE(1, 187)=16 + KSPARSE(2, 187)=41 !HO2/XO2 - KSPARSE(1, 180)=15 - KSPARSE(2, 180)=41 + KSPARSE(1, 188)=16 + KSPARSE(2, 188)=42 !CH4/O3 - KSPARSE(1, 181)=16 - KSPARSE(2, 181)=1 + KSPARSE(1, 189)=17 + KSPARSE(2, 189)=1 !CH4/OH - KSPARSE(1, 182)=16 - KSPARSE(2, 182)=14 + KSPARSE(1, 190)=17 + KSPARSE(2, 190)=15 !CH4/CH4 - KSPARSE(1, 183)=16 - KSPARSE(2, 183)=16 + KSPARSE(1, 191)=17 + KSPARSE(2, 191)=17 !CH4/ALKE - KSPARSE(1, 184)=16 - KSPARSE(2, 184)=19 + KSPARSE(1, 192)=17 + KSPARSE(2, 192)=20 !ETH/O3 - KSPARSE(1, 185)=17 - KSPARSE(2, 185)=1 + KSPARSE(1, 193)=18 + KSPARSE(2, 193)=1 !ETH/OH - KSPARSE(1, 186)=17 - KSPARSE(2, 186)=14 + KSPARSE(1, 194)=18 + KSPARSE(2, 194)=15 !ETH/ETH - KSPARSE(1, 187)=17 - KSPARSE(2, 187)=17 + KSPARSE(1, 195)=18 + KSPARSE(2, 195)=18 !ETH/ALKE - KSPARSE(1, 188)=17 - KSPARSE(2, 188)=19 + KSPARSE(1, 196)=18 + KSPARSE(2, 196)=20 !ALKA/OH - KSPARSE(1, 189)=18 - KSPARSE(2, 189)=14 + KSPARSE(1, 197)=19 + KSPARSE(2, 197)=15 !ALKA/ALKA - KSPARSE(1, 190)=18 - KSPARSE(2, 190)=18 + KSPARSE(1, 198)=19 + KSPARSE(2, 198)=19 !ALKE/O3 - KSPARSE(1, 191)=19 - KSPARSE(2, 191)=1 + KSPARSE(1, 199)=20 + KSPARSE(2, 199)=1 !ALKE/NO - KSPARSE(1, 192)=19 - KSPARSE(2, 192)=3 + KSPARSE(1, 200)=20 + KSPARSE(2, 200)=3 !ALKE/NO3 - KSPARSE(1, 193)=19 - KSPARSE(2, 193)=5 + KSPARSE(1, 201)=20 + KSPARSE(2, 201)=5 !ALKE/OH - KSPARSE(1, 194)=19 - KSPARSE(2, 194)=14 + KSPARSE(1, 202)=20 + KSPARSE(2, 202)=15 !ALKE/ALKE - KSPARSE(1, 195)=19 - KSPARSE(2, 195)=19 + KSPARSE(1, 203)=20 + KSPARSE(2, 203)=20 !ALKE/BIO - KSPARSE(1, 196)=19 - KSPARSE(2, 196)=20 + KSPARSE(1, 204)=20 + KSPARSE(2, 204)=21 !ALKE/MO2 - KSPARSE(1, 197)=19 - KSPARSE(2, 197)=32 + KSPARSE(1, 205)=20 + KSPARSE(2, 205)=33 !ALKE/BIOP - KSPARSE(1, 198)=19 - KSPARSE(2, 198)=35 + KSPARSE(1, 206)=20 + KSPARSE(2, 206)=36 !ALKE/CARBOP - KSPARSE(1, 199)=19 - KSPARSE(2, 199)=39 + KSPARSE(1, 207)=20 + KSPARSE(2, 207)=40 !BIO/O3 - KSPARSE(1, 200)=20 - KSPARSE(2, 200)=1 + KSPARSE(1, 208)=21 + KSPARSE(2, 208)=1 !BIO/NO3 - KSPARSE(1, 201)=20 - KSPARSE(2, 201)=5 + KSPARSE(1, 209)=21 + KSPARSE(2, 209)=5 !BIO/OH - KSPARSE(1, 202)=20 - KSPARSE(2, 202)=14 + KSPARSE(1, 210)=21 + KSPARSE(2, 210)=15 !BIO/BIO - KSPARSE(1, 203)=20 - KSPARSE(2, 203)=20 + KSPARSE(1, 211)=21 + KSPARSE(2, 211)=21 !ARO/O3 - KSPARSE(1, 204)=21 - KSPARSE(2, 204)=1 + KSPARSE(1, 212)=22 + KSPARSE(2, 212)=1 !ARO/NO2 - KSPARSE(1, 205)=21 - KSPARSE(2, 205)=4 + KSPARSE(1, 213)=22 + KSPARSE(2, 213)=4 !ARO/NO3 - KSPARSE(1, 206)=21 - KSPARSE(2, 206)=5 + KSPARSE(1, 214)=22 + KSPARSE(2, 214)=5 !ARO/OH - KSPARSE(1, 207)=21 - KSPARSE(2, 207)=14 + KSPARSE(1, 215)=22 + KSPARSE(2, 215)=15 !ARO/HO2 - KSPARSE(1, 208)=21 - KSPARSE(2, 208)=15 + KSPARSE(1, 216)=22 + KSPARSE(2, 216)=16 !ARO/ARO - KSPARSE(1, 209)=21 - KSPARSE(2, 209)=21 + KSPARSE(1, 217)=22 + KSPARSE(2, 217)=22 !ARO/PHO - KSPARSE(1, 210)=21 - KSPARSE(2, 210)=36 + KSPARSE(1, 218)=22 + KSPARSE(2, 218)=37 !ARO/ADD - KSPARSE(1, 211)=21 - KSPARSE(2, 211)=37 + KSPARSE(1, 219)=22 + KSPARSE(2, 219)=38 !HCHO/O3 - KSPARSE(1, 212)=22 - KSPARSE(2, 212)=1 + KSPARSE(1, 220)=23 + KSPARSE(2, 220)=1 !HCHO/NO - KSPARSE(1, 213)=22 - KSPARSE(2, 213)=3 + KSPARSE(1, 221)=23 + KSPARSE(2, 221)=3 !HCHO/NO3 - KSPARSE(1, 214)=22 - KSPARSE(2, 214)=5 + KSPARSE(1, 222)=23 + KSPARSE(2, 222)=5 !HCHO/OH - KSPARSE(1, 215)=22 - KSPARSE(2, 215)=14 + KSPARSE(1, 223)=23 + KSPARSE(2, 223)=15 !HCHO/ALKA - KSPARSE(1, 216)=22 - KSPARSE(2, 216)=18 + KSPARSE(1, 224)=23 + KSPARSE(2, 224)=19 !HCHO/ALKE - KSPARSE(1, 217)=22 - KSPARSE(2, 217)=19 + KSPARSE(1, 225)=23 + KSPARSE(2, 225)=20 !HCHO/BIO - KSPARSE(1, 218)=22 - KSPARSE(2, 218)=20 + KSPARSE(1, 226)=23 + KSPARSE(2, 226)=21 !HCHO/HCHO - KSPARSE(1, 219)=22 - KSPARSE(2, 219)=22 + KSPARSE(1, 227)=23 + KSPARSE(2, 227)=23 !HCHO/CARBO - KSPARSE(1, 220)=22 - KSPARSE(2, 220)=25 + KSPARSE(1, 228)=23 + KSPARSE(2, 228)=26 !HCHO/PAN - KSPARSE(1, 221)=22 - KSPARSE(2, 221)=27 + KSPARSE(1, 229)=23 + KSPARSE(2, 229)=28 !HCHO/OP1 - KSPARSE(1, 222)=22 - KSPARSE(2, 222)=28 + KSPARSE(1, 230)=23 + KSPARSE(2, 230)=29 !HCHO/OP2 - KSPARSE(1, 223)=22 - KSPARSE(2, 223)=29 + KSPARSE(1, 231)=23 + KSPARSE(2, 231)=30 !HCHO/MO2 - KSPARSE(1, 224)=22 - KSPARSE(2, 224)=32 + KSPARSE(1, 232)=23 + KSPARSE(2, 232)=33 !HCHO/ALKAP - KSPARSE(1, 225)=22 - KSPARSE(2, 225)=33 + KSPARSE(1, 233)=23 + KSPARSE(2, 233)=34 !HCHO/ALKEP - KSPARSE(1, 226)=22 - KSPARSE(2, 226)=34 + KSPARSE(1, 234)=23 + KSPARSE(2, 234)=35 !HCHO/BIOP - KSPARSE(1, 227)=22 - KSPARSE(2, 227)=35 + KSPARSE(1, 235)=23 + KSPARSE(2, 235)=36 !HCHO/AROP - KSPARSE(1, 228)=22 - KSPARSE(2, 228)=38 + KSPARSE(1, 236)=23 + KSPARSE(2, 236)=39 !HCHO/CARBOP - KSPARSE(1, 229)=22 - KSPARSE(2, 229)=39 + KSPARSE(1, 237)=23 + KSPARSE(2, 237)=40 !HCHO/OLN - KSPARSE(1, 230)=22 - KSPARSE(2, 230)=40 + KSPARSE(1, 238)=23 + KSPARSE(2, 238)=41 !HCHO/XO2 - KSPARSE(1, 231)=22 - KSPARSE(2, 231)=41 + KSPARSE(1, 239)=23 + KSPARSE(2, 239)=42 !ALD/O3 - KSPARSE(1, 232)=23 - KSPARSE(2, 232)=1 + KSPARSE(1, 240)=24 + KSPARSE(2, 240)=1 !ALD/NO - KSPARSE(1, 233)=23 - KSPARSE(2, 233)=3 + KSPARSE(1, 241)=24 + KSPARSE(2, 241)=3 !ALD/NO3 - KSPARSE(1, 234)=23 - KSPARSE(2, 234)=5 + KSPARSE(1, 242)=24 + KSPARSE(2, 242)=5 !ALD/OH - KSPARSE(1, 235)=23 - KSPARSE(2, 235)=14 + KSPARSE(1, 243)=24 + KSPARSE(2, 243)=15 !ALD/ALKA - KSPARSE(1, 236)=23 - KSPARSE(2, 236)=18 + KSPARSE(1, 244)=24 + KSPARSE(2, 244)=19 !ALD/ALKE - KSPARSE(1, 237)=23 - KSPARSE(2, 237)=19 + KSPARSE(1, 245)=24 + KSPARSE(2, 245)=20 !ALD/BIO - KSPARSE(1, 238)=23 - KSPARSE(2, 238)=20 + KSPARSE(1, 246)=24 + KSPARSE(2, 246)=21 !ALD/ALD - KSPARSE(1, 239)=23 - KSPARSE(2, 239)=23 + KSPARSE(1, 247)=24 + KSPARSE(2, 247)=24 !ALD/CARBO - KSPARSE(1, 240)=23 - KSPARSE(2, 240)=25 + KSPARSE(1, 248)=24 + KSPARSE(2, 248)=26 !ALD/ONIT - KSPARSE(1, 241)=23 - KSPARSE(2, 241)=26 + KSPARSE(1, 249)=24 + KSPARSE(2, 249)=27 !ALD/OP2 - KSPARSE(1, 242)=23 - KSPARSE(2, 242)=29 + KSPARSE(1, 250)=24 + KSPARSE(2, 250)=30 !ALD/MO2 - KSPARSE(1, 243)=23 - KSPARSE(2, 243)=32 + KSPARSE(1, 251)=24 + KSPARSE(2, 251)=33 !ALD/ALKAP - KSPARSE(1, 244)=23 - KSPARSE(2, 244)=33 + KSPARSE(1, 252)=24 + KSPARSE(2, 252)=34 !ALD/ALKEP - KSPARSE(1, 245)=23 - KSPARSE(2, 245)=34 + KSPARSE(1, 253)=24 + KSPARSE(2, 253)=35 !ALD/BIOP - KSPARSE(1, 246)=23 - KSPARSE(2, 246)=35 + KSPARSE(1, 254)=24 + KSPARSE(2, 254)=36 !ALD/CARBOP - KSPARSE(1, 247)=23 - KSPARSE(2, 247)=39 + KSPARSE(1, 255)=24 + KSPARSE(2, 255)=40 !ALD/OLN - KSPARSE(1, 248)=23 - KSPARSE(2, 248)=40 + KSPARSE(1, 256)=24 + KSPARSE(2, 256)=41 !KET/O3 - KSPARSE(1, 249)=24 - KSPARSE(2, 249)=1 + KSPARSE(1, 257)=25 + KSPARSE(2, 257)=1 !KET/NO - KSPARSE(1, 250)=24 - KSPARSE(2, 250)=3 + KSPARSE(1, 258)=25 + KSPARSE(2, 258)=3 !KET/NO3 - KSPARSE(1, 251)=24 - KSPARSE(2, 251)=5 + KSPARSE(1, 259)=25 + KSPARSE(2, 259)=5 !KET/OH - KSPARSE(1, 252)=24 - KSPARSE(2, 252)=14 + KSPARSE(1, 260)=25 + KSPARSE(2, 260)=15 !KET/ALKA - KSPARSE(1, 253)=24 - KSPARSE(2, 253)=18 + KSPARSE(1, 261)=25 + KSPARSE(2, 261)=19 !KET/ALKE - KSPARSE(1, 254)=24 - KSPARSE(2, 254)=19 + KSPARSE(1, 262)=25 + KSPARSE(2, 262)=20 !KET/BIO - KSPARSE(1, 255)=24 - KSPARSE(2, 255)=20 + KSPARSE(1, 263)=25 + KSPARSE(2, 263)=21 !KET/KET - KSPARSE(1, 256)=24 - KSPARSE(2, 256)=24 + KSPARSE(1, 264)=25 + KSPARSE(2, 264)=25 !KET/CARBO - KSPARSE(1, 257)=24 - KSPARSE(2, 257)=25 + KSPARSE(1, 265)=25 + KSPARSE(2, 265)=26 !KET/ONIT - KSPARSE(1, 258)=24 - KSPARSE(2, 258)=26 + KSPARSE(1, 266)=25 + KSPARSE(2, 266)=27 !KET/OP2 - KSPARSE(1, 259)=24 - KSPARSE(2, 259)=29 + KSPARSE(1, 267)=25 + KSPARSE(2, 267)=30 !KET/MO2 - KSPARSE(1, 260)=24 - KSPARSE(2, 260)=32 + KSPARSE(1, 268)=25 + KSPARSE(2, 268)=33 !KET/ALKAP - KSPARSE(1, 261)=24 - KSPARSE(2, 261)=33 + KSPARSE(1, 269)=25 + KSPARSE(2, 269)=34 !KET/ALKEP - KSPARSE(1, 262)=24 - KSPARSE(2, 262)=34 + KSPARSE(1, 270)=25 + KSPARSE(2, 270)=35 !KET/BIOP - KSPARSE(1, 263)=24 - KSPARSE(2, 263)=35 + KSPARSE(1, 271)=25 + KSPARSE(2, 271)=36 !KET/CARBOP - KSPARSE(1, 264)=24 - KSPARSE(2, 264)=39 + KSPARSE(1, 272)=25 + KSPARSE(2, 272)=40 !KET/OLN - KSPARSE(1, 265)=24 - KSPARSE(2, 265)=40 + KSPARSE(1, 273)=25 + KSPARSE(2, 273)=41 !CARBO/O3 - KSPARSE(1, 266)=25 - KSPARSE(2, 266)=1 + KSPARSE(1, 274)=26 + KSPARSE(2, 274)=1 !CARBO/NO - KSPARSE(1, 267)=25 - KSPARSE(2, 267)=3 + KSPARSE(1, 275)=26 + KSPARSE(2, 275)=3 !CARBO/NO3 - KSPARSE(1, 268)=25 - KSPARSE(2, 268)=5 + KSPARSE(1, 276)=26 + KSPARSE(2, 276)=5 !CARBO/OH - KSPARSE(1, 269)=25 - KSPARSE(2, 269)=14 + KSPARSE(1, 277)=26 + KSPARSE(2, 277)=15 !CARBO/ALKA - KSPARSE(1, 270)=25 - KSPARSE(2, 270)=18 + KSPARSE(1, 278)=26 + KSPARSE(2, 278)=19 !CARBO/ALKE - KSPARSE(1, 271)=25 - KSPARSE(2, 271)=19 + KSPARSE(1, 279)=26 + KSPARSE(2, 279)=20 !CARBO/BIO - KSPARSE(1, 272)=25 - KSPARSE(2, 272)=20 + KSPARSE(1, 280)=26 + KSPARSE(2, 280)=21 !CARBO/CARBO - KSPARSE(1, 273)=25 - KSPARSE(2, 273)=25 + KSPARSE(1, 281)=26 + KSPARSE(2, 281)=26 !CARBO/PAN - KSPARSE(1, 274)=25 - KSPARSE(2, 274)=27 + KSPARSE(1, 282)=26 + KSPARSE(2, 282)=28 !CARBO/MO2 - KSPARSE(1, 275)=25 - KSPARSE(2, 275)=32 + KSPARSE(1, 283)=26 + KSPARSE(2, 283)=33 !CARBO/ALKAP - KSPARSE(1, 276)=25 - KSPARSE(2, 276)=33 + KSPARSE(1, 284)=26 + KSPARSE(2, 284)=34 !CARBO/BIOP - KSPARSE(1, 277)=25 - KSPARSE(2, 277)=35 + KSPARSE(1, 285)=26 + KSPARSE(2, 285)=36 !CARBO/AROP - KSPARSE(1, 278)=25 - KSPARSE(2, 278)=38 + KSPARSE(1, 286)=26 + KSPARSE(2, 286)=39 !CARBO/CARBOP - KSPARSE(1, 279)=25 - KSPARSE(2, 279)=39 + KSPARSE(1, 287)=26 + KSPARSE(2, 287)=40 !ONIT/NO - KSPARSE(1, 280)=26 - KSPARSE(2, 280)=3 + KSPARSE(1, 288)=27 + KSPARSE(2, 288)=3 !ONIT/NO2 - KSPARSE(1, 281)=26 - KSPARSE(2, 281)=4 + KSPARSE(1, 289)=27 + KSPARSE(2, 289)=4 !ONIT/NO3 - KSPARSE(1, 282)=26 - KSPARSE(2, 282)=5 + KSPARSE(1, 290)=27 + KSPARSE(2, 290)=5 !ONIT/OH - KSPARSE(1, 283)=26 - KSPARSE(2, 283)=14 + KSPARSE(1, 291)=27 + KSPARSE(2, 291)=15 !ONIT/HO2 - KSPARSE(1, 284)=26 - KSPARSE(2, 284)=15 + KSPARSE(1, 292)=27 + KSPARSE(2, 292)=16 !ONIT/ONIT - KSPARSE(1, 285)=26 - KSPARSE(2, 285)=26 + KSPARSE(1, 293)=27 + KSPARSE(2, 293)=27 !ONIT/PAN - KSPARSE(1, 286)=26 - KSPARSE(2, 286)=27 + KSPARSE(1, 294)=27 + KSPARSE(2, 294)=28 !ONIT/MO2 - KSPARSE(1, 287)=26 - KSPARSE(2, 287)=32 + KSPARSE(1, 295)=27 + KSPARSE(2, 295)=33 !ONIT/ALKAP - KSPARSE(1, 288)=26 - KSPARSE(2, 288)=33 + KSPARSE(1, 296)=27 + KSPARSE(2, 296)=34 !ONIT/BIOP - KSPARSE(1, 289)=26 - KSPARSE(2, 289)=35 + KSPARSE(1, 297)=27 + KSPARSE(2, 297)=36 !ONIT/PHO - KSPARSE(1, 290)=26 - KSPARSE(2, 290)=36 + KSPARSE(1, 298)=27 + KSPARSE(2, 298)=37 !ONIT/AROP - KSPARSE(1, 291)=26 - KSPARSE(2, 291)=38 + KSPARSE(1, 299)=27 + KSPARSE(2, 299)=39 !ONIT/CARBOP - KSPARSE(1, 292)=26 - KSPARSE(2, 292)=39 + KSPARSE(1, 300)=27 + KSPARSE(2, 300)=40 !ONIT/OLN - KSPARSE(1, 293)=26 - KSPARSE(2, 293)=40 + KSPARSE(1, 301)=27 + KSPARSE(2, 301)=41 !PAN/O3 - KSPARSE(1, 294)=27 - KSPARSE(2, 294)=1 + KSPARSE(1, 302)=28 + KSPARSE(2, 302)=1 !PAN/NO2 - KSPARSE(1, 295)=27 - KSPARSE(2, 295)=4 + KSPARSE(1, 303)=28 + KSPARSE(2, 303)=4 !PAN/NO3 - KSPARSE(1, 296)=27 - KSPARSE(2, 296)=5 + KSPARSE(1, 304)=28 + KSPARSE(2, 304)=5 !PAN/OH - KSPARSE(1, 297)=27 - KSPARSE(2, 297)=14 + KSPARSE(1, 305)=28 + KSPARSE(2, 305)=15 !PAN/PAN - KSPARSE(1, 298)=27 - KSPARSE(2, 298)=27 + KSPARSE(1, 306)=28 + KSPARSE(2, 306)=28 !PAN/CARBOP - KSPARSE(1, 299)=27 - KSPARSE(2, 299)=39 + KSPARSE(1, 307)=28 + KSPARSE(2, 307)=40 !OP1/OH - KSPARSE(1, 300)=28 - KSPARSE(2, 300)=14 + KSPARSE(1, 308)=29 + KSPARSE(2, 308)=15 !OP1/HO2 - KSPARSE(1, 301)=28 - KSPARSE(2, 301)=15 + KSPARSE(1, 309)=29 + KSPARSE(2, 309)=16 !OP1/OP1 - KSPARSE(1, 302)=28 - KSPARSE(2, 302)=28 + KSPARSE(1, 310)=29 + KSPARSE(2, 310)=29 !OP1/MO2 - KSPARSE(1, 303)=28 - KSPARSE(2, 303)=32 + KSPARSE(1, 311)=29 + KSPARSE(2, 311)=33 !OP2/O3 - KSPARSE(1, 304)=29 - KSPARSE(2, 304)=1 + KSPARSE(1, 312)=30 + KSPARSE(2, 312)=1 !OP2/OH - KSPARSE(1, 305)=29 - KSPARSE(2, 305)=14 + KSPARSE(1, 313)=30 + KSPARSE(2, 313)=15 !OP2/HO2 - KSPARSE(1, 306)=29 - KSPARSE(2, 306)=15 + KSPARSE(1, 314)=30 + KSPARSE(2, 314)=16 !OP2/CARBO - KSPARSE(1, 307)=29 - KSPARSE(2, 307)=25 + KSPARSE(1, 315)=30 + KSPARSE(2, 315)=26 !OP2/OP2 - KSPARSE(1, 308)=29 - KSPARSE(2, 308)=29 + KSPARSE(1, 316)=30 + KSPARSE(2, 316)=30 !OP2/ALKAP - KSPARSE(1, 309)=29 - KSPARSE(2, 309)=33 + KSPARSE(1, 317)=30 + KSPARSE(2, 317)=34 !OP2/ALKEP - KSPARSE(1, 310)=29 - KSPARSE(2, 310)=34 + KSPARSE(1, 318)=30 + KSPARSE(2, 318)=35 !OP2/BIOP - KSPARSE(1, 311)=29 - KSPARSE(2, 311)=35 + KSPARSE(1, 319)=30 + KSPARSE(2, 319)=36 !OP2/AROP - KSPARSE(1, 312)=29 - KSPARSE(2, 312)=38 + KSPARSE(1, 320)=30 + KSPARSE(2, 320)=39 !OP2/CARBOP - KSPARSE(1, 313)=29 - KSPARSE(2, 313)=39 + KSPARSE(1, 321)=30 + KSPARSE(2, 321)=40 !OP2/XO2 - KSPARSE(1, 314)=29 - KSPARSE(2, 314)=41 + KSPARSE(1, 322)=30 + KSPARSE(2, 322)=42 !ORA1/O3 - KSPARSE(1, 315)=30 - KSPARSE(2, 315)=1 + KSPARSE(1, 323)=31 + KSPARSE(2, 323)=1 !ORA1/OH - KSPARSE(1, 316)=30 - KSPARSE(2, 316)=14 + KSPARSE(1, 324)=31 + KSPARSE(2, 324)=15 !ORA1/ALKA - KSPARSE(1, 317)=30 - KSPARSE(2, 317)=18 + KSPARSE(1, 325)=31 + KSPARSE(2, 325)=19 !ORA1/ALKE - KSPARSE(1, 318)=30 - KSPARSE(2, 318)=19 + KSPARSE(1, 326)=31 + KSPARSE(2, 326)=20 !ORA1/BIO - KSPARSE(1, 319)=30 - KSPARSE(2, 319)=20 + KSPARSE(1, 327)=31 + KSPARSE(2, 327)=21 !ORA1/CARBO - KSPARSE(1, 320)=30 - KSPARSE(2, 320)=25 + KSPARSE(1, 328)=31 + KSPARSE(2, 328)=26 !ORA1/PAN - KSPARSE(1, 321)=30 - KSPARSE(2, 321)=27 + KSPARSE(1, 329)=31 + KSPARSE(2, 329)=28 !ORA1/ORA1 - KSPARSE(1, 322)=30 - KSPARSE(2, 322)=30 + KSPARSE(1, 330)=31 + KSPARSE(2, 330)=31 !ORA2/O3 - KSPARSE(1, 323)=31 - KSPARSE(2, 323)=1 + KSPARSE(1, 331)=32 + KSPARSE(2, 331)=1 !ORA2/OH - KSPARSE(1, 324)=31 - KSPARSE(2, 324)=14 + KSPARSE(1, 332)=32 + KSPARSE(2, 332)=15 !ORA2/HO2 - KSPARSE(1, 325)=31 - KSPARSE(2, 325)=15 + KSPARSE(1, 333)=32 + KSPARSE(2, 333)=16 !ORA2/ALKE - KSPARSE(1, 326)=31 - KSPARSE(2, 326)=19 + KSPARSE(1, 334)=32 + KSPARSE(2, 334)=20 !ORA2/BIO - KSPARSE(1, 327)=31 - KSPARSE(2, 327)=20 + KSPARSE(1, 335)=32 + KSPARSE(2, 335)=21 !ORA2/CARBO - KSPARSE(1, 328)=31 - KSPARSE(2, 328)=25 + KSPARSE(1, 336)=32 + KSPARSE(2, 336)=26 !ORA2/ORA2 - KSPARSE(1, 329)=31 - KSPARSE(2, 329)=31 + KSPARSE(1, 337)=32 + KSPARSE(2, 337)=32 !ORA2/MO2 - KSPARSE(1, 330)=31 - KSPARSE(2, 330)=32 + KSPARSE(1, 338)=32 + KSPARSE(2, 338)=33 !ORA2/ALKAP - KSPARSE(1, 331)=31 - KSPARSE(2, 331)=33 + KSPARSE(1, 339)=32 + KSPARSE(2, 339)=34 !ORA2/ALKEP - KSPARSE(1, 332)=31 - KSPARSE(2, 332)=34 + KSPARSE(1, 340)=32 + KSPARSE(2, 340)=35 !ORA2/BIOP - KSPARSE(1, 333)=31 - KSPARSE(2, 333)=35 + KSPARSE(1, 341)=32 + KSPARSE(2, 341)=36 !ORA2/CARBOP - KSPARSE(1, 334)=31 - KSPARSE(2, 334)=39 + KSPARSE(1, 342)=32 + KSPARSE(2, 342)=40 !ORA2/OLN - KSPARSE(1, 335)=31 - KSPARSE(2, 335)=40 + KSPARSE(1, 343)=32 + KSPARSE(2, 343)=41 !MO2/O3 - KSPARSE(1, 336)=32 - KSPARSE(2, 336)=1 + KSPARSE(1, 344)=33 + KSPARSE(2, 344)=1 !MO2/NO - KSPARSE(1, 337)=32 - KSPARSE(2, 337)=3 + KSPARSE(1, 345)=33 + KSPARSE(2, 345)=3 !MO2/NO3 - KSPARSE(1, 338)=32 - KSPARSE(2, 338)=5 + KSPARSE(1, 346)=33 + KSPARSE(2, 346)=5 !MO2/OH - KSPARSE(1, 339)=32 - KSPARSE(2, 339)=14 + KSPARSE(1, 347)=33 + KSPARSE(2, 347)=15 !MO2/HO2 - KSPARSE(1, 340)=32 - KSPARSE(2, 340)=15 + KSPARSE(1, 348)=33 + KSPARSE(2, 348)=16 !MO2/CH4 - KSPARSE(1, 341)=32 - KSPARSE(2, 341)=16 + KSPARSE(1, 349)=33 + KSPARSE(2, 349)=17 !MO2/ALKE - KSPARSE(1, 342)=32 - KSPARSE(2, 342)=19 + KSPARSE(1, 350)=33 + KSPARSE(2, 350)=20 !MO2/BIO - KSPARSE(1, 343)=32 - KSPARSE(2, 343)=20 + KSPARSE(1, 351)=33 + KSPARSE(2, 351)=21 !MO2/ALD - KSPARSE(1, 344)=32 - KSPARSE(2, 344)=23 + KSPARSE(1, 352)=33 + KSPARSE(2, 352)=24 !MO2/OP1 - KSPARSE(1, 345)=32 - KSPARSE(2, 345)=28 + KSPARSE(1, 353)=33 + KSPARSE(2, 353)=29 !MO2/OP2 - KSPARSE(1, 346)=32 - KSPARSE(2, 346)=29 + KSPARSE(1, 354)=33 + KSPARSE(2, 354)=30 !MO2/MO2 - KSPARSE(1, 347)=32 - KSPARSE(2, 347)=32 + KSPARSE(1, 355)=33 + KSPARSE(2, 355)=33 !MO2/ALKAP - KSPARSE(1, 348)=32 - KSPARSE(2, 348)=33 + KSPARSE(1, 356)=33 + KSPARSE(2, 356)=34 !MO2/ALKEP - KSPARSE(1, 349)=32 - KSPARSE(2, 349)=34 + KSPARSE(1, 357)=33 + KSPARSE(2, 357)=35 !MO2/BIOP - KSPARSE(1, 350)=32 - KSPARSE(2, 350)=35 + KSPARSE(1, 358)=33 + KSPARSE(2, 358)=36 !MO2/AROP - KSPARSE(1, 351)=32 - KSPARSE(2, 351)=38 + KSPARSE(1, 359)=33 + KSPARSE(2, 359)=39 !MO2/CARBOP - KSPARSE(1, 352)=32 - KSPARSE(2, 352)=39 + KSPARSE(1, 360)=33 + KSPARSE(2, 360)=40 !MO2/OLN - KSPARSE(1, 353)=32 - KSPARSE(2, 353)=40 + KSPARSE(1, 361)=33 + KSPARSE(2, 361)=41 !MO2/XO2 - KSPARSE(1, 354)=32 - KSPARSE(2, 354)=41 + KSPARSE(1, 362)=33 + KSPARSE(2, 362)=42 !ALKAP/O3 - KSPARSE(1, 355)=33 - KSPARSE(2, 355)=1 + KSPARSE(1, 363)=34 + KSPARSE(2, 363)=1 !ALKAP/NO - KSPARSE(1, 356)=33 - KSPARSE(2, 356)=3 + KSPARSE(1, 364)=34 + KSPARSE(2, 364)=3 !ALKAP/NO3 - KSPARSE(1, 357)=33 - KSPARSE(2, 357)=5 + KSPARSE(1, 365)=34 + KSPARSE(2, 365)=5 !ALKAP/OH - KSPARSE(1, 358)=33 - KSPARSE(2, 358)=14 + KSPARSE(1, 366)=34 + KSPARSE(2, 366)=15 !ALKAP/HO2 - KSPARSE(1, 359)=33 - KSPARSE(2, 359)=15 + KSPARSE(1, 367)=34 + KSPARSE(2, 367)=16 !ALKAP/ETH - KSPARSE(1, 360)=33 - KSPARSE(2, 360)=17 + KSPARSE(1, 368)=34 + KSPARSE(2, 368)=18 !ALKAP/ALKA - KSPARSE(1, 361)=33 - KSPARSE(2, 361)=18 + KSPARSE(1, 369)=34 + KSPARSE(2, 369)=19 !ALKAP/ALKE - KSPARSE(1, 362)=33 - KSPARSE(2, 362)=19 + KSPARSE(1, 370)=34 + KSPARSE(2, 370)=20 !ALKAP/BIO - KSPARSE(1, 363)=33 - KSPARSE(2, 363)=20 + KSPARSE(1, 371)=34 + KSPARSE(2, 371)=21 !ALKAP/KET - KSPARSE(1, 364)=33 - KSPARSE(2, 364)=24 + KSPARSE(1, 372)=34 + KSPARSE(2, 372)=25 !ALKAP/ONIT - KSPARSE(1, 365)=33 - KSPARSE(2, 365)=26 + KSPARSE(1, 373)=34 + KSPARSE(2, 373)=27 !ALKAP/OP2 - KSPARSE(1, 366)=33 - KSPARSE(2, 366)=29 + KSPARSE(1, 374)=34 + KSPARSE(2, 374)=30 !ALKAP/MO2 - KSPARSE(1, 367)=33 - KSPARSE(2, 367)=32 + KSPARSE(1, 375)=34 + KSPARSE(2, 375)=33 !ALKAP/ALKAP - KSPARSE(1, 368)=33 - KSPARSE(2, 368)=33 + KSPARSE(1, 376)=34 + KSPARSE(2, 376)=34 !ALKAP/CARBOP - KSPARSE(1, 369)=33 - KSPARSE(2, 369)=39 + KSPARSE(1, 377)=34 + KSPARSE(2, 377)=40 !ALKEP/NO - KSPARSE(1, 370)=34 - KSPARSE(2, 370)=3 + KSPARSE(1, 378)=35 + KSPARSE(2, 378)=3 !ALKEP/NO3 - KSPARSE(1, 371)=34 - KSPARSE(2, 371)=5 + KSPARSE(1, 379)=35 + KSPARSE(2, 379)=5 !ALKEP/OH - KSPARSE(1, 372)=34 - KSPARSE(2, 372)=14 + KSPARSE(1, 380)=35 + KSPARSE(2, 380)=15 !ALKEP/HO2 - KSPARSE(1, 373)=34 - KSPARSE(2, 373)=15 + KSPARSE(1, 381)=35 + KSPARSE(2, 381)=16 !ALKEP/ALKE - KSPARSE(1, 374)=34 - KSPARSE(2, 374)=19 + KSPARSE(1, 382)=35 + KSPARSE(2, 382)=20 !ALKEP/MO2 - KSPARSE(1, 375)=34 - KSPARSE(2, 375)=32 + KSPARSE(1, 383)=35 + KSPARSE(2, 383)=33 !ALKEP/ALKEP - KSPARSE(1, 376)=34 - KSPARSE(2, 376)=34 + KSPARSE(1, 384)=35 + KSPARSE(2, 384)=35 !ALKEP/CARBOP - KSPARSE(1, 377)=34 - KSPARSE(2, 377)=39 + KSPARSE(1, 385)=35 + KSPARSE(2, 385)=40 !BIOP/NO - KSPARSE(1, 378)=35 - KSPARSE(2, 378)=3 + KSPARSE(1, 386)=36 + KSPARSE(2, 386)=3 !BIOP/NO3 - KSPARSE(1, 379)=35 - KSPARSE(2, 379)=5 + KSPARSE(1, 387)=36 + KSPARSE(2, 387)=5 !BIOP/OH - KSPARSE(1, 380)=35 - KSPARSE(2, 380)=14 + KSPARSE(1, 388)=36 + KSPARSE(2, 388)=15 !BIOP/HO2 - KSPARSE(1, 381)=35 - KSPARSE(2, 381)=15 + KSPARSE(1, 389)=36 + KSPARSE(2, 389)=16 !BIOP/ALKE - KSPARSE(1, 382)=35 - KSPARSE(2, 382)=19 + KSPARSE(1, 390)=36 + KSPARSE(2, 390)=20 !BIOP/BIO - KSPARSE(1, 383)=35 - KSPARSE(2, 383)=20 + KSPARSE(1, 391)=36 + KSPARSE(2, 391)=21 !BIOP/MO2 - KSPARSE(1, 384)=35 - KSPARSE(2, 384)=32 + KSPARSE(1, 392)=36 + KSPARSE(2, 392)=33 !BIOP/BIOP - KSPARSE(1, 385)=35 - KSPARSE(2, 385)=35 + KSPARSE(1, 393)=36 + KSPARSE(2, 393)=36 !BIOP/CARBOP - KSPARSE(1, 386)=35 - KSPARSE(2, 386)=39 + KSPARSE(1, 394)=36 + KSPARSE(2, 394)=40 !PHO/NO2 - KSPARSE(1, 387)=36 - KSPARSE(2, 387)=4 + KSPARSE(1, 395)=37 + KSPARSE(2, 395)=4 !PHO/NO3 - KSPARSE(1, 388)=36 - KSPARSE(2, 388)=5 + KSPARSE(1, 396)=37 + KSPARSE(2, 396)=5 !PHO/OH - KSPARSE(1, 389)=36 - KSPARSE(2, 389)=14 + KSPARSE(1, 397)=37 + KSPARSE(2, 397)=15 !PHO/HO2 - KSPARSE(1, 390)=36 - KSPARSE(2, 390)=15 + KSPARSE(1, 398)=37 + KSPARSE(2, 398)=16 !PHO/ARO - KSPARSE(1, 391)=36 - KSPARSE(2, 391)=21 + KSPARSE(1, 399)=37 + KSPARSE(2, 399)=22 !PHO/PHO - KSPARSE(1, 392)=36 - KSPARSE(2, 392)=36 + KSPARSE(1, 400)=37 + KSPARSE(2, 400)=37 !ADD/O3 - KSPARSE(1, 393)=37 - KSPARSE(2, 393)=1 + KSPARSE(1, 401)=38 + KSPARSE(2, 401)=1 !ADD/NO2 - KSPARSE(1, 394)=37 - KSPARSE(2, 394)=4 + KSPARSE(1, 402)=38 + KSPARSE(2, 402)=4 !ADD/OH - KSPARSE(1, 395)=37 - KSPARSE(2, 395)=14 + KSPARSE(1, 403)=38 + KSPARSE(2, 403)=15 !ADD/ARO - KSPARSE(1, 396)=37 - KSPARSE(2, 396)=21 + KSPARSE(1, 404)=38 + KSPARSE(2, 404)=22 !ADD/ADD - KSPARSE(1, 397)=37 - KSPARSE(2, 397)=37 + KSPARSE(1, 405)=38 + KSPARSE(2, 405)=38 !AROP/NO - KSPARSE(1, 398)=38 - KSPARSE(2, 398)=3 + KSPARSE(1, 406)=39 + KSPARSE(2, 406)=3 !AROP/NO3 - KSPARSE(1, 399)=38 - KSPARSE(2, 399)=5 + KSPARSE(1, 407)=39 + KSPARSE(2, 407)=5 !AROP/HO2 - KSPARSE(1, 400)=38 - KSPARSE(2, 400)=15 + KSPARSE(1, 408)=39 + KSPARSE(2, 408)=16 !AROP/MO2 - KSPARSE(1, 401)=38 - KSPARSE(2, 401)=32 + KSPARSE(1, 409)=39 + KSPARSE(2, 409)=33 !AROP/ADD - KSPARSE(1, 402)=38 - KSPARSE(2, 402)=37 + KSPARSE(1, 410)=39 + KSPARSE(2, 410)=38 !AROP/AROP - KSPARSE(1, 403)=38 - KSPARSE(2, 403)=38 + KSPARSE(1, 411)=39 + KSPARSE(2, 411)=39 !AROP/CARBOP - KSPARSE(1, 404)=38 - KSPARSE(2, 404)=39 + KSPARSE(1, 412)=39 + KSPARSE(2, 412)=40 !CARBOP/O3 - KSPARSE(1, 405)=39 - KSPARSE(2, 405)=1 + KSPARSE(1, 413)=40 + KSPARSE(2, 413)=1 !CARBOP/NO - KSPARSE(1, 406)=39 - KSPARSE(2, 406)=3 + KSPARSE(1, 414)=40 + KSPARSE(2, 414)=3 !CARBOP/NO2 - KSPARSE(1, 407)=39 - KSPARSE(2, 407)=4 + KSPARSE(1, 415)=40 + KSPARSE(2, 415)=4 !CARBOP/NO3 - KSPARSE(1, 408)=39 - KSPARSE(2, 408)=5 + KSPARSE(1, 416)=40 + KSPARSE(2, 416)=5 !CARBOP/OH - KSPARSE(1, 409)=39 - KSPARSE(2, 409)=14 + KSPARSE(1, 417)=40 + KSPARSE(2, 417)=15 !CARBOP/HO2 - KSPARSE(1, 410)=39 - KSPARSE(2, 410)=15 + KSPARSE(1, 418)=40 + KSPARSE(2, 418)=16 !CARBOP/ALKE - KSPARSE(1, 411)=39 - KSPARSE(2, 411)=19 + KSPARSE(1, 419)=40 + KSPARSE(2, 419)=20 !CARBOP/BIO - KSPARSE(1, 412)=39 - KSPARSE(2, 412)=20 + KSPARSE(1, 420)=40 + KSPARSE(2, 420)=21 !CARBOP/ALD - KSPARSE(1, 413)=39 - KSPARSE(2, 413)=23 + KSPARSE(1, 421)=40 + KSPARSE(2, 421)=24 !CARBOP/KET - KSPARSE(1, 414)=39 - KSPARSE(2, 414)=24 + KSPARSE(1, 422)=40 + KSPARSE(2, 422)=25 !CARBOP/CARBO - KSPARSE(1, 415)=39 - KSPARSE(2, 415)=25 + KSPARSE(1, 423)=40 + KSPARSE(2, 423)=26 !CARBOP/PAN - KSPARSE(1, 416)=39 - KSPARSE(2, 416)=27 + KSPARSE(1, 424)=40 + KSPARSE(2, 424)=28 !CARBOP/OP2 - KSPARSE(1, 417)=39 - KSPARSE(2, 417)=29 + KSPARSE(1, 425)=40 + KSPARSE(2, 425)=30 !CARBOP/MO2 - KSPARSE(1, 418)=39 - KSPARSE(2, 418)=32 + KSPARSE(1, 426)=40 + KSPARSE(2, 426)=33 !CARBOP/ALKAP - KSPARSE(1, 419)=39 - KSPARSE(2, 419)=33 + KSPARSE(1, 427)=40 + KSPARSE(2, 427)=34 !CARBOP/ALKEP - KSPARSE(1, 420)=39 - KSPARSE(2, 420)=34 + KSPARSE(1, 428)=40 + KSPARSE(2, 428)=35 !CARBOP/BIOP - KSPARSE(1, 421)=39 - KSPARSE(2, 421)=35 + KSPARSE(1, 429)=40 + KSPARSE(2, 429)=36 !CARBOP/AROP - KSPARSE(1, 422)=39 - KSPARSE(2, 422)=38 + KSPARSE(1, 430)=40 + KSPARSE(2, 430)=39 !CARBOP/CARBOP - KSPARSE(1, 423)=39 - KSPARSE(2, 423)=39 + KSPARSE(1, 431)=40 + KSPARSE(2, 431)=40 !CARBOP/OLN - KSPARSE(1, 424)=39 - KSPARSE(2, 424)=40 + KSPARSE(1, 432)=40 + KSPARSE(2, 432)=41 !CARBOP/XO2 - KSPARSE(1, 425)=39 - KSPARSE(2, 425)=41 + KSPARSE(1, 433)=40 + KSPARSE(2, 433)=42 !OLN/NO - KSPARSE(1, 426)=40 - KSPARSE(2, 426)=3 + KSPARSE(1, 434)=41 + KSPARSE(2, 434)=3 !OLN/NO3 - KSPARSE(1, 427)=40 - KSPARSE(2, 427)=5 + KSPARSE(1, 435)=41 + KSPARSE(2, 435)=5 !OLN/HO2 - KSPARSE(1, 428)=40 - KSPARSE(2, 428)=15 + KSPARSE(1, 436)=41 + KSPARSE(2, 436)=16 !OLN/ALKE - KSPARSE(1, 429)=40 - KSPARSE(2, 429)=19 + KSPARSE(1, 437)=41 + KSPARSE(2, 437)=20 !OLN/BIO - KSPARSE(1, 430)=40 - KSPARSE(2, 430)=20 + KSPARSE(1, 438)=41 + KSPARSE(2, 438)=21 !OLN/CARBO - KSPARSE(1, 431)=40 - KSPARSE(2, 431)=25 + KSPARSE(1, 439)=41 + KSPARSE(2, 439)=26 !OLN/MO2 - KSPARSE(1, 432)=40 - KSPARSE(2, 432)=32 + KSPARSE(1, 440)=41 + KSPARSE(2, 440)=33 !OLN/CARBOP - KSPARSE(1, 433)=40 - KSPARSE(2, 433)=39 + KSPARSE(1, 441)=41 + KSPARSE(2, 441)=40 !OLN/OLN - KSPARSE(1, 434)=40 - KSPARSE(2, 434)=40 + KSPARSE(1, 442)=41 + KSPARSE(2, 442)=41 !XO2/O3 - KSPARSE(1, 435)=41 - KSPARSE(2, 435)=1 + KSPARSE(1, 443)=42 + KSPARSE(2, 443)=1 !XO2/NO - KSPARSE(1, 436)=41 - KSPARSE(2, 436)=3 + KSPARSE(1, 444)=42 + KSPARSE(2, 444)=3 !XO2/NO3 - KSPARSE(1, 437)=41 - KSPARSE(2, 437)=5 + KSPARSE(1, 445)=42 + KSPARSE(2, 445)=5 !XO2/OH - KSPARSE(1, 438)=41 - KSPARSE(2, 438)=14 + KSPARSE(1, 446)=42 + KSPARSE(2, 446)=15 !XO2/HO2 - KSPARSE(1, 439)=41 - KSPARSE(2, 439)=15 + KSPARSE(1, 447)=42 + KSPARSE(2, 447)=16 !XO2/ALKE - KSPARSE(1, 440)=41 - KSPARSE(2, 440)=19 + KSPARSE(1, 448)=42 + KSPARSE(2, 448)=20 !XO2/BIO - KSPARSE(1, 441)=41 - KSPARSE(2, 441)=20 + KSPARSE(1, 449)=42 + KSPARSE(2, 449)=21 !XO2/ARO - KSPARSE(1, 442)=41 - KSPARSE(2, 442)=21 + KSPARSE(1, 450)=42 + KSPARSE(2, 450)=22 !XO2/CARBO - KSPARSE(1, 443)=41 - KSPARSE(2, 443)=25 + KSPARSE(1, 451)=42 + KSPARSE(2, 451)=26 !XO2/PAN - KSPARSE(1, 444)=41 - KSPARSE(2, 444)=27 + KSPARSE(1, 452)=42 + KSPARSE(2, 452)=28 !XO2/OP2 - KSPARSE(1, 445)=41 - KSPARSE(2, 445)=29 + KSPARSE(1, 453)=42 + KSPARSE(2, 453)=30 !XO2/MO2 - KSPARSE(1, 446)=41 - KSPARSE(2, 446)=32 + KSPARSE(1, 454)=42 + KSPARSE(2, 454)=33 !XO2/ALKAP - KSPARSE(1, 447)=41 - KSPARSE(2, 447)=33 + KSPARSE(1, 455)=42 + KSPARSE(2, 455)=34 !XO2/CARBOP - KSPARSE(1, 448)=41 - KSPARSE(2, 448)=39 + KSPARSE(1, 456)=42 + KSPARSE(2, 456)=40 !XO2/XO2 - KSPARSE(1, 449)=41 - KSPARSE(2, 449)=41 -KSPARSEDIM = 449 + KSPARSE(1, 457)=42 + KSPARSE(2, 457)=42 +KSPARSEDIM = 457 RETURN END SUBROUTINE CH_SPARSE_GAZ ! diff --git a/src/MNH/aer2lima.f90 b/src/MNH/aer2lima.f90 new file mode 100644 index 0000000000000000000000000000000000000000..eaf03fa5b74ef44d11d605c55c6d4f3e7d0a693f --- /dev/null +++ b/src/MNH/aer2lima.f90 @@ -0,0 +1,378 @@ +!MNH_LIC Copyright 1994-2019 CNRS, Meteo-France and Universite Paul Sabatier +!MNH_LIC This is part of the Meso-NH software governed by the CeCILL-C licence +!MNH_LIC version 1. See LICENSE, CeCILL-C_V1-en.txt and CeCILL-C_V1-fr.txt +!MNH_LIC for details. version 1. +!----------------------------------------------------------------- +! ######################## + MODULE MODI_AER2LIMA +! ######################## +! +INTERFACE + SUBROUTINE AER2LIMA(PSVT, PRHODREF,PRV, PPABST, PTHT, PZZ) +! +USE MODD_CH_AEROSOL +USE MODD_DUST +USE MODD_SALT +USE MODD_NSV +USE MODD_CST +USE MODD_CONF, ONLY : CPROGRAM +USE MODD_PARAM_n, ONLY : CACTCCN +USE MODD_PARAM_LIMA +USE MODE_AERO_PSD +USE MODE_SALT_PSD +USE MODE_DUST_PSD +USE MODI_CH_AER_EQSAM +USE MODI_DUSTLFI_n +USE MODI_SALTLFI_n +! +REAL, DIMENSION(:,:,:,:), INTENT(INOUT) :: PSVT +REAL, DIMENSION(:,:,:), INTENT(IN) :: PRHODREF, PRV, PPABST, PTHT, PZZ +! +END SUBROUTINE AER2LIMA +! +END INTERFACE +! +END MODULE MODI_AER2LIMA + +! ############################################ + SUBROUTINE AER2LIMA(PSVT, PRHODREF, PRV, PPABST, PTHT, PZZ) +! ############################################ +! +! +!!**** *AER2LIMA* lima CCN and IFN fields in case of orilam aerosols +!! +!! PURPOSE +!! ------- +!! +!! EXTERNAL +!! -------- +!! +!! IMPLICIT ARGUMENTS +!! ------------------ +!! +!! REFERENCE +!! --------- +!! +!! AUTHOR +!! ------ +!! P. Tulet +!! +!! MODIFICATIONS +!! ------------- +!! Original 20/01/22 +!! -------------------------------------------------------------------------- +! +!* 0. DECLARATIONS +! ------------ +! +USE MODD_CH_AEROSOL +USE MODD_DUST +USE MODD_SALT +USE MODD_NSV +USE MODD_CST +USE MODD_CONF, ONLY : CPROGRAM +USE MODD_PARAM_n, ONLY : CACTCCN +USE MODD_PARAM_LIMA +USE MODD_CH_M9_n, ONLY : CNAMES +USE MODE_AERO_PSD +USE MODE_SALT_PSD +USE MODE_DUST_PSD +USE MODI_CH_AER_EQSAM +USE MODI_DUSTLFI_n +USE MODI_SALTLFI_n +! +! +IMPLICIT NONE +! +!* 0.1 Declarations of dummy arguments : + +REAL, DIMENSION(:,:,:,:), INTENT(INOUT) :: PSVT +REAL, DIMENSION(:,:,:), INTENT(IN) :: PRHODREF, PRV, PPABST, PTHT, PZZ + +! 0.2 declaration of local variables + +REAL, DIMENSION(SIZE(PSVT,1), SIZE(PSVT,2), SIZE(PSVT,3), NSP+NCARB+NSOA,JPMODE) :: ZCTOTA +REAL, DIMENSION(SIZE(PSVT,1), SIZE(PSVT,2), SIZE(PSVT,3)) :: ZSUM, ZSUM2, ZRATH2O, ZRATSO4, ZRATDST +REAL, DIMENSION(SIZE(PSVT,1), SIZE(PSVT,2), SIZE(PSVT,3),JPMODE) :: ZSIG_AER, ZRG_AER, ZN0_AER +REAL, DIMENSION(SIZE(PSVT,1), SIZE(PSVT,2), SIZE(PSVT,3),NMODE_SLT) :: ZSIG_SLT, ZRG_SLT, ZN0_SLT +REAL, DIMENSION(SIZE(PSVT,1), SIZE(PSVT,2), SIZE(PSVT,3),NMODE_DST) :: ZSIG_DST, ZRG_DST, ZN0_DST +REAL, DIMENSION(SIZE(PSVT,1), SIZE(PSVT,2), SIZE(PSVT,3),NMOD_CCN) :: ZCCN_SUM +REAL, DIMENSION(SIZE(PSVT,1), SIZE(PSVT,2), SIZE(PSVT,3),NMOD_IFN) :: ZIFN_SUM +REAL, DIMENSION(SIZE(PSVT,1), SIZE(PSVT,2), SIZE(PSVT,3)) :: ZPKM, ZPKH2O, ZTEMP, ZSAT, ZRH +REAL, DIMENSION(SIZE(PSVT,1), SIZE(PSVT,2), SIZE(PSVT,3),6) :: ZAER +REAL, DIMENSION(SIZE(PSVT,1), SIZE(PSVT,2), SIZE(PSVT,3),NSV) :: ZTOT +REAL, DIMENSION(SIZE(PSVT,1), SIZE(PSVT,2), SIZE(PSVT,3),JPMODE) :: ZOM +REAL, DIMENSION(NSV) :: ZMI +INTEGER :: JSV, JJ, JI, II, IJ, IK, JK +REAL :: ZCCNRADIUS, ZRATMASSH2O + +ZCCNRADIUS = 0.04 ! to suppress the aitken mode (µm) + +IF ((CPROGRAM=="REAL ").OR.(CPROGRAM=="IDEAL ")) CMINERAL = "EQSAM" +IF (CMINERAL /= 'NONE') THEN + ZRATMASSH2O = 0.05 +ELSE + ZRATMASSH2O = 0. +END IF +ZMI(:) = 250. +ZMI(JP_AER_SO4) = 98. +ZMI(JP_AER_NO3) = 63. +ZMI(JP_AER_NH3) = 17. +ZMI(JP_AER_H2O) = 18. +ZCCN_SUM(:,:,:,:) = 0. +ZIFN_SUM(:,:,:,:) = 0. + +! Anthopogenic part (orilam scheme) +! +IF (LORILAM) THEN + +! moments (PSVT;ppp) --> concentration (PN3D;#/m3) +CALL PPP2AERO(PSVT(:,:,:,NSV_AERBEG:NSV_AEREND),PRHODREF,& + PSIG3D=ZSIG_AER,PRG3D=ZRG_AER,PN3D=ZN0_AER,PCTOTA=ZCTOTA) + +ZCTOTA=MAX(ZCTOTA,XMNH_TINY) + + IF ((CPROGRAM=="REAL ").OR.(CPROGRAM=="IDEAL ")) THEN + JP_CH_HNO3 = 0 + JP_CH_NH3 = 0 + DO JJ=1,SIZE(CNAMES) + IF (CNAMES(JJ) == "HNO3") JP_CH_HNO3 = JJ + IF (CNAMES(JJ) == "NH3") JP_CH_NH3 = JJ + END DO + ZPKM(:,:,:) = 1E-3*PRHODREF(:,:,:) * 6.0221367E+23 / 28.9644 + ZPKH2O(:,:,:) = ZPKM(:,:,:)*1.6077*PRV(:,:,:) +! +! compute air temperature + ZTEMP(:,:,:) = PTHT(:,:,:)*((PPABST(:,:,:)/XP00)**(XRD/XCPD)) + +! compute relative humidity + ZSAT(:,:,:)=0.611*EXP(17.2694*(ZTEMP(:,:,:)-273.16)/(ZTEMP(:,:,:)-35.86)) + ZSAT(:,:,:)=ZSAT(:,:,:)*1000. + ZRH(:,:,:)=(ZPKH2O(:,:,:)/(ZPKM(:,:,:)*1.6077))*PPABST(:,:,:)/& + &(0.622+(ZPKH2O(:,:,:)/(ZPKM(:,:,:)*1.6077)))/ZSAT(:,:,:) + ZRH(:,:,:) = MIN(0.95, MAX(ZRH(:,:,:), .01)) ! until 0.95 thermodynamic code is not valid + +! Gas-particles equilibrium => H2O, SO4 aerosol mass + DO JI=1,NSP + ZTOT(:,:,:,JI)=ZCTOTA(:,:,:,JI,1)+ZCTOTA(:,:,:,JI,2) + ZTOT(:,:,:,JI) = MAX(ZTOT(:,:,:,JI),XMNH_TINY) + ENDDO +! + ZAER(:,:,:,:) = 0. + ZAER(:,:,:,1)=ZTOT(:,:,:,JP_AER_SO4) + +! conversion ppp to µg/m3 + IF (JP_CH_NH3 .NE. 0) ZAER(:,:,:,2)=PSVT(:,:,:,NSV_CHEMBEG-1+JP_CH_NH3)*XNH3*1E-3*PRHODREF(:,:,:)/XMD +! conversion ppp to µg/m3 + IF (JP_CH_HNO3 .NE. 0) ZAER(:,:,:,3)=PSVT(:,:,:,NSV_CHEMBEG-1+JP_CH_HNO3)*XHNO3*1E-3*PRHODREF(:,:,:)/XMD + ZAER(:,:,:,4)=ZTOT(:,:,:,JP_AER_H2O) + ZAER(:,:,:,5)=ZTOT(:,:,:,JP_AER_NO3) + ZAER(:,:,:,6)=ZTOT(:,:,:,JP_AER_NH3) + ZAER(:,:,:,:)=MAX(ZAER(:,:,:,:),0.) + + DO IK=1,SIZE(PSVT,3) + DO IJ=1,SIZE(PSVT,2) + CALL CH_AER_EQSAM(ZAER(:,IJ,IK,:),ZRH(:,IJ,IK),PPABST(:,IJ,IK),ZTEMP(:,IJ,IK)) + END DO + END DO + ZTOT(:,:,:,JP_AER_SO4) = ZAER(:,:,:,1) + ZTOT(:,:,:,JP_AER_H2O) = ZAER(:,:,:,4) + ZTOT(:,:,:,JP_AER_NO3) = ZAER(:,:,:,5) + ZTOT(:,:,:,JP_AER_NH3) = ZAER(:,:,:,6) + +! Balance the mass according to size + ZSUM(:,:,:) = 0. + ZOM(:,:,:,:) = 0. + DO JSV=1,JPMODE + DO JJ=1,NSP + ZSUM(:,:,:) = ZSUM(:,:,:) + ZCTOTA(:,:,:,JJ,JSV) + ZOM(:,:,:,JSV) = ZOM(:,:,:,JSV) + ZCTOTA(:,:,:,JJ,JSV) + ENDDO + ENDDO + + DO JSV=1,JPMODE + ZOM(:,:,:,JSV) = ZOM(:,:,:,JSV) / ZSUM(:,:,:) + ENDDO + + DO JSV=1,JPMODE + DO JJ=1,NSP + ZCTOTA(:,:,:,JJ,JSV)=MAX(XMNH_TINY,ZTOT(:,:,:,JJ)*ZOM(:,:,:,JSV)) + END DO + END DO + +END IF !end part of init in case of IDEAL or REAL + +! Compute mass ratio of sulfates, water and dusts +DO JSV=1,JPMODE + ZRATH2O(:,:,:) = 0. + ZRATSO4(:,:,:) = 0. + ZRATDST(:,:,:) = 0. + ZSUM(:,:,:) = 0. + ZSUM2(:,:,:) = 0. + + DO II=1,NSP+NCARB+NSOA + ZSUM(:,:,:) = ZSUM(:,:,:) + ZCTOTA(:,:,:,II,JSV) + END DO + + ZSUM2(:,:,:) = ZSUM(:,:,:) - ZCTOTA(:,:,:,JP_AER_H2O,JSV) + + WHERE (ZSUM(:,:,:) .GT. 0.) + ZRATH2O(:,:,:) = ZCTOTA(:,:,:,JP_AER_H2O,JSV) / ZSUM(:,:,:) + END WHERE + + WHERE (ZSUM2(:,:,:) .GT. 0.) + ZRATSO4(:,:,:) = ZCTOTA(:,:,:,JP_AER_SO4,JSV) / ZSUM2(:,:,:) + END WHERE + + WHERE (ZSUM2(:,:,:) .GT. 0.) + ZRATDST(:,:,:) = ZCTOTA(:,:,:,JP_AER_DST,JSV) / ZSUM2(:,:,:) + END WHERE + +! #/m3 --> #/kg + ZN0_AER(:,:,:,JSV) = ZN0_AER(:,:,:,JSV) / PRHODREF(:,:,:) + +! CCN_FREE initialization +! aerosol radius greater than ZCCNRADIUS µm to be considers as CCN +! water mass greater than ZRATMASSH2O % + + IF (CACTCCN=="ABRK") THEN +! only one CCN_FREE mode (activation is not performed upon aerosol class but by physical paramters) +! + WHERE (ZRG_AER(:,:,:,JSV) .GT. ZCCNRADIUS) + !WHERE ((ZRG_AER(:,:,:,JSV) .GT. ZCCNRADIUS).AND.(ZRATH2O(:,:,:).GT.ZRATMASSH2O)) + ZCCN_SUM(:,:,:,1) = ZCCN_SUM(:,:,:,1) + ZN0_AER(:,:,:,JSV) + END WHERE + + ELSE + ! Sulfates + IF (NMOD_CCN .GE. 2) THEN + WHERE ((ZRG_AER(:,:,:,JSV) .GT. ZCCNRADIUS).AND.(ZRATH2O(:,:,:).GT.ZRATMASSH2O)) + ZCCN_SUM(:,:,:,2) = ZCCN_SUM(:,:,:,2) + ZN0_AER(:,:,:,JSV) * ZRATSO4(:,:,:) + END WHERE + END IF + + ! Hyrdophylic aerosols + IF (NMOD_CCN .GE. 3) THEN + WHERE ((ZRG_AER(:,:,:,JSV) .GT. ZCCNRADIUS).AND.(ZRATH2O(:,:,:).GT.ZRATMASSH2O)) + ZCCN_SUM(:,:,:,3) = ZCCN_SUM(:,:,:,3) + ZN0_AER(:,:,:,JSV) * (1.-ZRATSO4(:,:,:)) + END WHERE + END IF + +END IF + +! IFN_FREE initialization + WHERE (ZRATH2O(:,:,:) .LE. ZRATMASSH2O) ! fraction of dust if low water + ZIFN_SUM(:,:,:,1) = ZIFN_SUM(:,:,:,1) + ZN0_AER(:,:,:,JSV) * ZRATDST(:,:,:) + END WHERE + +! hydrophobic aerosols water mass less than 20% + IF (NMOD_IFN .GE. 2) THEN + WHERE (ZRATH2O(:,:,:) .LE. ZRATMASSH2O) ! hydrophobic aerosols can act as IFN + ZIFN_SUM(:,:,:,2) = ZIFN_SUM(:,:,:,2) + ZN0_AER(:,:,:,JSV) * (1.- ZRATSO4(:,:,:)) + END WHERE + END IF + +END DO + + +ELSE ! keep lima class intiatialization + IF (CACTCCN=="ABRK") THEN +! only one CCN_FREE mode (activation is not performed upon aerosol class but by physical paramters) + IF (NMOD_CCN .GE. 2) THEN + DO JI = 2, NMOD_CCN + ZCCN_SUM(:,:,:,1) = ZCCN_SUM(:,:,:,1) + & + PSVT(:,:,:,NSV_LIMA_CCN_FREE+JI-1) + PSVT(:,:,:,NSV_LIMA_CCN_ACTI+JI-1) + END DO + END IF + ELSE + IF (NMOD_CCN .GE. 2) THEN + DO JI = 2, NMOD_CCN + ZCCN_SUM(:,:,:,JI) = PSVT(:,:,:,NSV_LIMA_CCN_FREE+JI-1) + PSVT(:,:,:,NSV_LIMA_CCN_ACTI+JI-1) + END DO + END IF + END IF + + IF (.NOT.(LDUST) .AND. NMOD_IFN.GE.1) & + ZIFN_SUM(:,:,:,1) = PSVT(:,:,:,NSV_LIMA_IFN_FREE) + PSVT(:,:,:,NSV_LIMA_IFN_NUCL) + + IF (NMOD_IFN .GE. 2) THEN + DO JI = 2, NMOD_IFN + ZIFN_SUM(:,:,:,JI) = PSVT(:,:,:,NSV_LIMA_IFN_FREE+JI-1) + PSVT(:,:,:,NSV_LIMA_IFN_NUCL+JI-1) + END DO + END IF +END IF ! end if sur LORILAM +! +! +! Sea Salt part +IF (LSALT) THEN +! + IF (((CPROGRAM=="REAL ").AND.(LSLTINIT).AND.(.NOT.LSLTCAMS)).OR.(CPROGRAM=="IDEAL ")) THEN + CALL SALTLFI_n(PSVT(:,:,:,NSV_SLTBEG:NSV_SLTEND), PRHODREF, PZZ) + END IF + +! moments (PSVT;ppp) --> concentration (PN3D;#/m3) + CALL PPP2SALT(PSVT(:,:,:,NSV_SLTBEG:NSV_SLTEND),PRHODREF,& + PSIG3D=ZSIG_SLT,PRG3D=ZRG_SLT,PN3D=ZN0_SLT) +! + DO JSV=1,NMODE_SLT +! #/m3 --> #/kg + ZN0_SLT(:,:,:,JSV) = ZN0_SLT(:,:,:,JSV) / PRHODREF(:,:,:) + +! CCN_FREE initialization +! + WHERE (ZRG_SLT(:,:,:,JSV) .GT. ZCCNRADIUS) + ZCCN_SUM(:,:,:,1) = ZCCN_SUM(:,:,:,1) + ZN0_SLT(:,:,:,JSV) + END WHERE + END DO + +ELSE ! keep lima class intiatialization for sea salt + ccn from orilam + + +ZCCN_SUM(:,:,:,1) = PSVT(:,:,:,NSV_LIMA_CCN_FREE) + PSVT(:,:,:,NSV_LIMA_CCN_ACTI) + +END IF ! end if sur LSALT +! +! +! Dust part +IF (LDUST) THEN + ! initatialization of dust if not macc + IF (((CPROGRAM=="REAL ").AND.(LDSTINIT).AND.(.NOT.LDSTCAMS)).OR.(CPROGRAM=="IDEAL ")) THEN + CALL DUSTLFI_n(PSVT(:,:,:,NSV_DSTBEG:NSV_DSTEND), PRHODREF) + END IF + +! moments (PSVT;ppp) --> concentration (PN3D;#/m3) + CALL PPP2DUST(PSVT(:,:,:,NSV_DSTBEG:NSV_DSTEND),PRHODREF,& + PSIG3D=ZSIG_DST,PRG3D=ZRG_DST,PN3D=ZN0_DST) +! + DO JSV=1,NMODE_DST + +! #/m3 --> #/kg + ZN0_DST(:,:,:,JSV) = ZN0_DST(:,:,:,JSV) / PRHODREF(:,:,:) + +! IFN_FREE initialization (all dusts) + ZIFN_SUM(:,:,:,1) = ZIFN_SUM(:,:,:,1) + ZN0_DST(:,:,:,JSV) + + END DO + +ELSE ! keep lima class intiatialization + IF (NMOD_IFN.GE.1) & + ZIFN_SUM(:,:,:,1) = PSVT(:,:,:,NSV_LIMA_IFN_FREE) + PSVT(:,:,:,NSV_LIMA_IFN_NUCL) + +END IF ! endif sur LDUST +! +! +! +IF (NMOD_CCN .GE. 1) THEN + DO JI=1,NMOD_CCN + PSVT(:,:,:,NSV_LIMA_CCN_FREE+JI-1) = MAX(ZCCN_SUM(:,:,:,JI) - PSVT(:,:,:,NSV_LIMA_CCN_ACTI+JI-1), 0.) + END DO +END IF +! +IF (NMOD_IFN .GE. 1) THEN + DO JI=1,NMOD_IFN + PSVT(:,:,:,NSV_LIMA_IFN_FREE+JI-1) = MAX(ZIFN_SUM(:,:,:,JI) - PSVT(:,:,:,NSV_LIMA_IFN_NUCL+JI-1), 0.) + END DO +END IF +! +! +END SUBROUTINE AER2LIMA diff --git a/src/MNH/aerocamsn.f90 b/src/MNH/aerocamsn.f90 new file mode 100644 index 0000000000000000000000000000000000000000..b3ceb1d48989bf77722b0996b3845d3735e14c80 --- /dev/null +++ b/src/MNH/aerocamsn.f90 @@ -0,0 +1,82 @@ +!ORILAM_LIC Copyright 1994-2014 CNRS, Meteo-France and Universite Paul Sabatier +!ORILAM_LIC This is part of the ORILAM software governed by the CeCILL-C licence +!ORILAM_LIC version 1. See LICENSE, CeCILL-C_V1-en.txt and CeCILL-C_V1-fr.txt +!ORILAM_LIC for details. +!----------------------------------------------------------------- +!--------------- special set of characters for RCS information +!----------------------------------------------------------------- +! $Source$ $Revision$ +! MASDEV4_7 chimie 2006/06/16 13:28:57 +!----------------------------------------------------------------- +!! ######################## + MODULE MODI_AEROCAMS_n +!! ######################## +!! +INTERFACE +!! +SUBROUTINE AEROCAMS_n(PSV, PRHODREF) +IMPLICIT NONE +REAL, DIMENSION(:,:,:,:), INTENT(INOUT) :: PSV +REAL, DIMENSION(:,:,:), INTENT(IN) :: PRHODREF +END SUBROUTINE AEROCAMS_n +!! +END INTERFACE +!! +END MODULE MODI_AEROCAMS_n +!! +!! +!! ############################################################ + SUBROUTINE AEROCAMS_n(PSV, PRHODREF) +!! ############################################################ +!! +!! PURPOSE +!! ------- +!! Converti les masses aerosols issues de CMAS (kg/kg) en variables aerosols (ppv) +!! Realise l'équilibre des moments à partir du sigma et du diametre moyen +!! +!! REFERENCE +!! --------- +!! none +!! +!! AUTHOR +!! ------ +!! Pierre TULET (LA) +!! +!! MODIFICATIONS +!! ------------- +!! +!! +!! EXTERNAL +!! -------- +!! None +!! + +USE MODE_AERO_PSD +!! +IMPLICIT NONE +!! +!------------------------------------------------------------------------------- +! +!* 0. DECLARATIONS +! ------------ +! +!* 0.1 declarations of arguments +! +REAL, DIMENSION(:,:,:,:), INTENT(INOUT) :: PSV +REAL, DIMENSION(:,:,:), INTENT(IN) :: PRHODREF +! +! +INTEGER :: JN +! +! SV conversion from kg.kg-3 --> µg/m3 ) + +DO JN =1,SIZE(PSV, 4) + PSV(:,:,:,JN) = PSV(:,:,:,JN) * 1E9 / PRHODREF(:,:,:) +ENDDO + +! Compute moment from aerosol mass and conversion SV aerosols variables into ppv + +CALL CON2MIX (PSV, PRHODREF) +! +! +END SUBROUTINE AEROCAMS_n diff --git a/src/MNH/aircraft_balloon_evol.f90 b/src/MNH/aircraft_balloon_evol.f90 index 930b6e37ebfff8a3b52f2f66fb6ac95fdd495b3e..452113c95439e64ed6de56aec3ca1d3d1aa3bebe 100644 --- a/src/MNH/aircraft_balloon_evol.f90 +++ b/src/MNH/aircraft_balloon_evol.f90 @@ -144,22 +144,24 @@ USE MODD_NSV, ONLY : NSV_LIMA_NI,NSV_LIMA_NR,NSV_LIMA_NC USE MODD_PARAMETERS USE MODD_PARAM_LIMA, ONLY: XALPHAR_L=>XALPHAR,XNUR_L=>XNUR,XALPHAS_L=>XALPHAS,XNUS_L=>XNUS,& XALPHAG_L=>XALPHAG,XNUG_L=>XNUG, XALPHAI_L=>XALPHAI,XNUI_L=>XNUI,& - XRTMIN_L=>XRTMIN,XALPHAC_L=>XALPHAC,XNUC_L=>XNUC + XRTMIN_L=>XRTMIN,XALPHAC_L=>XALPHAC,XNUC_L=>XNUC,LSNOW_T_L=>LSNOW_T USE MODD_PARAM_LIMA_COLD, ONLY: XDI_L=>XDI,XLBEXI_L=>XLBEXI,XLBI_L=>XLBI,XAI_L=>XAI,XBI_L=>XBI,XC_I_L=>XC_I,& XLBEXS_L=>XLBEXS,XLBS_L=>XLBS,XCCS_L=>XCCS,& - XAS_L=>XAS,XBS_L=>XBS,XCXS_L=>XCXS + XAS_L=>XAS,XBS_L=>XBS,XCXS_L=>XCXS,XNS_L=>XNS, & + XLBDAS_MAX,XLBDAS_MIN USE MODD_PARAM_LIMA_MIXED, ONLY: XDG_L=>XDG,XLBEXG_L=>XLBEXG,XLBG_L=>XLBG,XCCG_L=>XCCG,& XAG_L=>XAG,XBG_L=>XBG,XCXG_L=>XCXG,XCG_L=>XCG USE MODD_PARAM_LIMA_WARM, ONLY: XLBEXR_L=>XLBEXR,XLBR_L=>XLBR,XBR_L=>XBR,XAR_L=>XAR,& XBC_L=>XBC,XAC_L=>XAC USE MODD_PARAM_n, ONLY: CCLOUD, CSURF +USE MODD_PARAM_ICE, ONLY: LSNOW_T_I=>LSNOW_T USE MODD_RAIN_ICE_DESCR, ONLY: XALPHAR_I=>XALPHAR,XNUR_I=>XNUR,XLBEXR_I=>XLBEXR,& XLBR_I=>XLBR,XCCR_I=>XCCR,XBR_I=>XBR,XAR_I=>XAR,& XALPHAC_I=>XALPHAC,XNUC_I=>XNUC,& XLBC_I=>XLBC,XBC_I=>XBC,XAC_I=>XAC,& XALPHAC2_I=>XALPHAC2,XNUC2_I=>XNUC2,& XALPHAS_I=>XALPHAS,XNUS_I=>XNUS,XLBEXS_I=>XLBEXS,& - XLBS_I=>XLBS,XCCS_I=>XCCS,XAS_I=>XAS,XBS_I=>XBS,XCXS_I=>XCXS,& + XLBS_I=>XLBS,XCCS_I=>XCCS,XAS_I=>XAS,XBS_I=>XBS,XCXS_I=>XCXS,XNS_I=>XNS,& XALPHAG_I=>XALPHAG,XNUG_I=>XNUG,XDG_I=>XDG,XLBEXG_I=>XLBEXG,& XLBG_I=>XLBG,XCCG_I=>XCCG,XAG_I=>XAG,XBG_I=>XBG,XCXG_I=>XCXG,XCG_I=>XCG,& XALPHAI_I=>XALPHAI,XNUI_I=>XNUI,XDI_I=>XDI,XLBEXI_I=>XLBEXI,& @@ -311,13 +313,14 @@ REAL, DIMENSION(SIZE(PR,3)) :: ZCIT ! pristine ice concentration REAL, DIMENSION(SIZE(PR,3)) :: ZCCI,ZCCR,ZCCC ! ICE,RAIN CLOUD concentration (LIMA) REAL, DIMENSION(SIZE(PR,1),SIZE(PR,2),SIZE(PR,3)) :: ZR REAL, DIMENSION(SIZE(PR,3),SIZE(PR,4)+1) :: ZRZ ! vertical profile of hydrometeor mixing ratios -REAL :: ZA,ZB,ZCC,ZCX,ZALPHA,ZNU,ZLB,ZLBEX,ZRHOHYD ! generic microphysical parameters +REAL :: ZA,ZB,ZCC,ZCX,ZALPHA,ZNU,ZLB,ZLBEX,ZNS,ZRHOHYD ! generic microphysical parameters INTEGER :: JJ ! loop counter for quadrature COMPLEX :: QMW,QMI,QM,QB,QEPSIW,QEPSWI ! dielectric parameter REAL :: ZAETOT,ZAETMP,ZREFLOC,ZQSCA,ZQBACK,ZQEXT ! temporary scattering parameters REAL,DIMENSION(:),ALLOCATABLE :: ZAELOC,ZZMZ ! temporary arrays INTEGER :: JPTS_GAULAG=7 ! number of points for Gauss-Laguerre quadrature REAL :: ZLBDA ! slope distribution parameter +REAL :: ZN ! number concentration REAL :: ZFRAC_ICE ! ice water fraction REAL :: ZDELTA_EQUIV ! mass-equivalent Gauss-Laguerre point REAL :: ZFW ! liquid fraction @@ -1114,6 +1117,7 @@ IF ( TPFLYER%FLY) THEN ZCX=XCXS_L ZALPHA=XALPHAS_L ZNU=XNUS_L + ZNS=XNS_L ZLB=XLBS_L ZLBEX=XLBEXS_L ZFW=0 @@ -1124,6 +1128,7 @@ IF ( TPFLYER%FLY) THEN ZCX=XCXS_I ZALPHA=XALPHAS_I ZNU=XNUS_I + ZNS=XNS_I ZLB=XLBS_I ZLBEX=XLBEXS_I ZFW=0 @@ -1177,7 +1182,18 @@ IF ( TPFLYER%FLY) THEN ZLB=( ZA*ZCC*MOMG(ZALPHA,ZNU,ZB) )**(-ZLBEX) ENDIF END SELECT - ZLBDA=ZLB*(ZRHODREFZ(JK)*ZRZ(JK,JLOOP))**ZLBEX + IF (JLOOP.EQ.5 .AND. ( (CCLOUD=='LIMA'.AND.LSNOW_T_L).OR. & + (CCLOUD=='ICE3'.AND.LSNOW_T_I) ) ) THEN + IF (ZTEMPZ(JK)>-10.) THEN + ZLBDA = MAX(MIN(XLBDAS_MAX, 10**(14.554-0.0423*(ZTEMPZ(JK)+273.15))),XLBDAS_MIN) + ELSE + ZLBDA = MAX(MIN(XLBDAS_MAX, 10**(6.226-0.0106*(ZTEMPZ(JK)+273.15))),XLBDAS_MIN) + END IF + ZN=ZNS*ZRHODREFZ(JK)*ZRZ(JK,JLOOP)*ZLBDA**ZB + ELSE + ZLBDA=ZLB*(ZRHODREFZ(JK)*ZRZ(JK,JLOOP))**ZLBEX + ZN=ZCC*ZLBDA**ZCX + END IF ZREFLOC=0. ZAETMP=0. DO JJ=1,JPTS_GAULAG ! Gauss-Laguerre quadrature @@ -1209,8 +1225,8 @@ IF ( TPFLYER%FLY) THEN ZREFLOC=ZREFLOC+ZQBACK*ZX(JJ)**(ZNU-1)*ZDELTA_EQUIV**2*ZW(JJ) ZAETMP =ZAETMP +ZQEXT *ZX(JJ)**(ZNU-1)*ZDELTA_EQUIV**2*ZW(JJ) END DO - ZREFLOC=ZREFLOC*(XLAM_CRAD/XPI)**4*ZCC*ZLBDA**ZCX/(4.*GAMMA(ZNU)*.93) - ZAETMP=ZAETMP * XPI *ZCC*ZLBDA**ZCX/(4.*GAMMA(ZNU)) + ZREFLOC=ZREFLOC*(XLAM_CRAD/XPI)**4*ZN/(4.*GAMMA(ZNU)*.93) + ZAETMP=ZAETMP * XPI *ZN/(4.*GAMMA(ZNU)) TPFLYER%CRARE(IN,JK)=TPFLYER%CRARE(IN,JK)+ZREFLOC ZAELOC(JK)=ZAELOC(JK)+ZAETMP END IF diff --git a/src/MNH/ch_aer_cond.f90 b/src/MNH/ch_aer_cond.f90 new file mode 100644 index 0000000000000000000000000000000000000000..2424b153b21cd54b13bad875b36e70f96ffc1529 --- /dev/null +++ b/src/MNH/ch_aer_cond.f90 @@ -0,0 +1,124 @@ +!ORILAM_LIC Copyright 1994-2014 CNRS, Meteo-France and Universite Paul Sabatier +!ORILAM_LIC This is part of the ORILAM software governed by the CeCILL-C licence +!ORILAM_LIC version 1. See LICENSE, CeCILL-C_V1-en.txt and CeCILL-C_V1-fr.txt +!ORILAM_LIC for details. +!----------------------------------------------------------------- +!--------------- special set of characters for RCS information +!----------------------------------------------------------------- +! $Source: /home/cvsroot/MNH-VX-Y-Z/src/MNH/ch_aer_growth.f90,v $ $Revision: 1.1.4.1.2.1 $ +! MASDEV4_7 chimie 2006/05/18 13:07:25 +!----------------------------------------------------------------- +!! ######################### + MODULE MODI_CH_AER_COND +!! ######################### +!! +INTERFACE +!! +SUBROUTINE CH_AER_COND(PM, PLNSIG, PRG, PPRESSURE, PTEMP, & + PDM3CDT, PDM6CDT ) +IMPLICIT NONE +REAL, DIMENSION(:,:), INTENT(IN) :: PM, PLNSIG, PRG +REAL, DIMENSION(:), INTENT(IN) :: PPRESSURE, PTEMP +REAL, DIMENSION(:,:), INTENT(INOUT) :: PDM3CDT, PDM6CDT +END SUBROUTINE CH_AER_COND +!! +END INTERFACE +!! +END MODULE MODI_CH_AER_COND +!! +!! ################################################################# + SUBROUTINE CH_AER_COND(PM, PLNSIG, PRG, PPRESSURE, PTEMP, & + PDM3CDT, PDM6CDT ) +!! ################################################################# +!! +!! PURPOSE +!! ------- +!! +!! This routine computes the condensated mass and tendencies. +!! Note that dM0_cond/dt = 0 : The condensation doesn't create particles. +!! Only moments 3 and 6 are computed. +!! +!! REFERENCE +!! --------- +!! +!! Method from CMAQ model: +!! +!! Binkowski, F.S. and U. Shankar, The regional particulate matter +!! model 1. Model description and preliminary results, J. Geophys. +!! Res., Vol 100, No D12, 26101-26209, 1995. +!! +!! +!! AUTHOR +!! ------ +!! Joris Pianezze (2018) * LACy * +!! +!! MODIFICATIONS +!! ------------- +!! +!! IMPLICIT ARGUMENTS +!! ------------------ +!! +!------------------------------------------------------------------------------- +! +!* 0. DECLARATIONS +! ------------ +! +USE MODD_CH_AEROSOL +USE MODD_CST, ONLY : XPI, XBOLTZ, XAVOGADRO +USE MODD_CONF, ONLY : NVERB +!! +IMPLICIT NONE +! +!* 0.1 Declarations of arguments +! +REAL, DIMENSION(:,:), INTENT(IN) :: PM, PLNSIG, PRG +REAL, DIMENSION(:), INTENT(IN) :: PPRESSURE, PTEMP +REAL, DIMENSION(:,:), INTENT(INOUT) :: PDM3CDT, PDM6CDT +! +!* 0.2 Declarations of local variables +! +INTEGER :: JI,JK +REAL :: ZALPHA +REAL, DIMENSION(SIZE(PM,1)) :: ZDIFFSULF, ZDIFFCORR, ZDV +REAL, DIMENSION(SIZE(PM,1)) :: ZCBAR +REAL, DIMENSION(SIZE(PM,1)) :: ZGNC3, ZGNC6, ZGFM3, ZGFM6 +REAL, DIMENSION(SIZE(PM,1),6,JPMODE) :: ZMOM +! +! +!------------------------------------------------------------------------------- +! +!* 1. INITIALIZATION +! -------------- +! +ZALPHA = 0.1 +ZDIFFSULF = 9.36E-6 ! molecular diffusivity of sulfuric acid +ZDIFFCORR = (101325.0/PPRESSURE) * (PTEMP/273.15)**(1.75) ! correction factor for atmospheric conditions +ZDV = ZDIFFSULF * ZDIFFCORR ! corrected molecural diffusivity of sulfuric acid +ZCBAR = SQRT(8.0*XBOLTZ*XAVOGADRO*PTEMP/(XPI*XH2SO4*1E-3)) ! molecular velocitie (temperature dependent) +! +! +!------------------------------------------------------------------------------- +! +!* 2. COMPUTE CONDENSATED MASS AND TENDENCIES +! --------------------------------------- +! +DO JI=1,JPMODE + ! + ! ZMOM = Equation (after integration) for every moment (JK order): Tulet 2005 + ! ZMOM = m**k.m**-3 + DO JK=1,6 + ZMOM(:,JK,JI) = PM(:,NM0(JI))*((PRG(:,JI)*1E-6)**JK)* & + EXP(((REAL(JK)**2)/2.)*(PLNSIG(:,JI)**2.0)) + ENDDO + ! + ZGNC3 = 2 * XPI * ZDV * ZMOM(:,1,JI) ! 3rd moment, near-continuum + ZGNC6 = 2 * XPI * ZDV * ZMOM(:,4,JI) ! 6th moment, near-continuum + ZGFM3 = (XPI / 4.0) * ZALPHA * ZCBAR * ZMOM(:,2,JI) ! 3rd moment, free-molecular + ZGFM6 = (XPI / 4.0) * ZALPHA * ZCBAR * ZMOM(:,5,JI) ! 6th moment, free-molecular + ! + PDM3CDT(:,JI) = ZGNC3 * ZGFM3 / ( ZGNC3 + ZGFM3 ) ! 3rd moment : m**3 / m**3 s + PDM6CDT(:,JI) = ZGNC6 * ZGFM6 / ( ZGNC6 + ZGFM6 ) ! 6th moment : m**6 / m**3 s + ! +END DO +! +END SUBROUTINE CH_AER_COND diff --git a/src/MNH/ch_aer_driver.f90 b/src/MNH/ch_aer_driver.f90 index 819eb0ae1dc7a596adf413576e4949e517908041..2b0537ab79be212579de036e4691c662b2754482 100644 --- a/src/MNH/ch_aer_driver.f90 +++ b/src/MNH/ch_aer_driver.f90 @@ -8,23 +8,30 @@ ! INTERFACE ! -SUBROUTINE CH_AER_DRIVER(PM, PSIG0, PRG0, PN0, PCTOTG, PCTOTA,& - PCCTOT, PDTACT, PSEDA,& - PMU, PLAMBDA, PRHOP0, POM, PSO4RAT, & - PRV, PDENAIR, PPRESSURE, PTEMP, PRC, PMASK,& - PTIME, PSOLORG) +SUBROUTINE CH_AER_DRIVER(PM, PLNSIG, PRG, PN, PCTOTG, PCTOTA, & + PCCTOT, PDTACT, PSEDA, & + PRHOP, PSO4RAT, & + PRV, PDENAIR, PPRESSURE, PTEMP, PRC, PMASK, & + PTIME, PSOLORG, & + PJNUC, PJ2RAT, PMBEG, PMINT, PMEND, & + PDMINTRA, PDMINTER, PDMCOND, PDMNUCL, PDMMERG, & + PCONC_MASS, PCOND_MASS_I, PCOND_MASS_J, PNUCL_MASS) IMPLICIT NONE -REAL, INTENT(IN) :: PDTACT, PTIME -REAL, DIMENSION(:,:), INTENT(INOUT) :: PRHOP0, POM -REAL, DIMENSION(:), INTENT(INOUT) :: PLAMBDA, PMU, PSO4RAT -REAL, DIMENSION(:,:), INTENT(INOUT) :: PM -REAL, DIMENSION(:,:), INTENT(INOUT) :: PSIG0, PRG0, PN0 -REAL, DIMENSION(:,:), INTENT(INOUT) :: PCTOTG -REAL, DIMENSION(:,:), INTENT(INOUT) :: PSOLORG -REAL, DIMENSION(:,:), INTENT(INOUT) :: PSEDA -REAL, DIMENSION(:,:), INTENT(INOUT) :: PMASK -REAL, DIMENSION(:,:,:), INTENT(INOUT) :: PCTOTA, PCCTOT -REAL, DIMENSION(:), INTENT(IN) :: PRV, PDENAIR, PPRESSURE, PTEMP, PRC +REAL, INTENT(IN) :: PDTACT, PTIME +REAL, DIMENSION(:,:), INTENT(INOUT) :: PRHOP +REAL, DIMENSION(:), INTENT(INOUT) :: PSO4RAT +REAL, DIMENSION(:,:), INTENT(INOUT) :: PM +REAL, DIMENSION(:,:), INTENT(INOUT) :: PLNSIG, PRG, PN +REAL, DIMENSION(:,:), INTENT(INOUT) :: PCTOTG +REAL, DIMENSION(:,:), INTENT(INOUT) :: PSOLORG +REAL, DIMENSION(:,:), INTENT(INOUT) :: PSEDA +REAL, DIMENSION(:,:), INTENT(INOUT) :: PMASK +REAL, DIMENSION(:,:,:), INTENT(INOUT) :: PCTOTA, PCCTOT +REAL, DIMENSION(:), INTENT(IN) :: PRV, PDENAIR, PPRESSURE, PTEMP, PRC +REAL, DIMENSION(:), INTENT(INOUT) :: PJNUC, PJ2RAT +REAL, DIMENSION(:,:), INTENT(INOUT) :: PMBEG,PMINT,PMEND +REAL, DIMENSION(:,:), INTENT(INOUT) :: PDMINTRA,PDMINTER,PDMCOND,PDMNUCL,PDMMERG +REAL, DIMENSION(:), INTENT(INOUT) :: PCONC_MASS,PCOND_MASS_I,PCOND_MASS_J,PNUCL_MASS END SUBROUTINE CH_AER_DRIVER ! END INTERFACE @@ -32,17 +39,31 @@ END INTERFACE END MODULE MODI_CH_AER_DRIVER ! !##################################################################################### -SUBROUTINE CH_AER_DRIVER(PM, PSIG0, PRG0, PN0, PCTOTG, PCTOTA,& - PCCTOT, PDTACT, PSEDA,& - PMU, PLAMBDA, PRHOP0, POM, PSO4RAT, & - PRV, PDENAIR, PPRESSURE, PTEMP, PRC, PMASK,& - PTIME, PSOLORG) +SUBROUTINE CH_AER_DRIVER(PM, PLNSIG, PRG, PN, PCTOTG, PCTOTA, & + PCCTOT, PDTACT, PSEDA, & + PRHOP, PSO4RAT, & + PRV, PDENAIR, PPRESSURE, PTEMP, PRC, PMASK, & + PTIME, PSOLORG, & + PJNUC,PJ2RAT,PMBEG,PMINT,PMEND, & + PDMINTRA,PDMINTER,PDMCOND,PDMNUCL,PDMMERG, & + PCONC_MASS,PCOND_MASS_I,PCOND_MASS_J,PNUCL_MASS) !##################################################################################### !! !! PURPOSE !! ------- +!! Compute the right hand side of the moment equations and solve the moment equations !! -!! compute the right hand side of the moment equations +!! EXTERNAL +!! -------- +!! Subroutine CH_AER_COAG : compute coagulation moment tendency terms +!! Subroutine CH_AER_COND : compute condensation from CMAQ model +!! Subroutine CH_AER_NUCL : compute nucleation rate +!! Subroutine CH_AER_MODE_MERGING : adjust tendency terms in case of mode i > mode j +!! Subroutine CH_AER_SOLV : solve moment equations +!! +!! IMPLICIT ARGUMENTS +!! ------------------ +!! MODD_CH_AEROSOL !! !! REFERENCE !! --------- @@ -54,124 +75,283 @@ SUBROUTINE CH_AER_DRIVER(PM, PSIG0, PRG0, PN0, PCTOTG, PCTOTA,& !! !! MODIFICATIONS !! ------------- -!! Original -!! M.Leriche 2015 Calcul de la fraction massique entre les modes -!! M.Leriche 08/16 suppress moments index declaration already in modd_aerosol -!! -!! EXTERNAL -!! -------- +!! Original +!! M. Leriche (??/2015) Calcul de la fraction massique entre les modes +!! M. Leriche (08/2016) Suppress moments index declaration already in modd_aerosol +!! J. Pianezze (06/2018) ... +!------------------------------------------------------------------------------- +! +! * 0. DECLARATIONS +! ------------ +! USE MODI_CH_AER_COAG -USE MODI_CH_AER_GROWTH +USE MODI_CH_AER_COND +USE MODI_CH_AER_NUCL +USE MODI_CH_AER_MODE_MERGING USE MODI_CH_AER_SOLV -!! -!! IMPLICIT ARGUMENTS -!! ------------------ -!! -USE MODD_CH_AEROSOL ! +USE MODD_CH_AEROSOL +USE MODD_CONF, ONLY : NVERB +USE MODD_CST, ONLY : XAVOGADRO ! IMPLICIT NONE -! Declaration arguments -REAL, INTENT(IN) :: PDTACT, PTIME -REAL, DIMENSION(:,:), INTENT(INOUT) :: PRHOP0, POM -REAL, DIMENSION(:), INTENT(INOUT) :: PLAMBDA, PMU, PSO4RAT -REAL, DIMENSION(:,:), INTENT(INOUT) :: PM -REAL, DIMENSION(:,:), INTENT(INOUT) :: PSIG0, PRG0, PN0 -REAL, DIMENSION(:,:), INTENT(INOUT) :: PCTOTG -REAL, DIMENSION(:,:), INTENT(INOUT) :: PSOLORG -REAL, DIMENSION(:,:), INTENT(INOUT) :: PSEDA -REAL, DIMENSION(:,:), INTENT(INOUT) :: PMASK -REAL, DIMENSION(:,:,:), INTENT(INOUT) :: PCTOTA, PCCTOT -REAL, DIMENSION(:), INTENT(IN) :: PRV, PDENAIR, PPRESSURE, PTEMP, PRC -! -! Declarations variables internes -! -INTEGER :: II, JI, JJ - -! Variables utilisees pour le tranfert de moment de chaque espece -! pour la condensation -!---------------------------------------------------------------- - -REAL, DIMENSION(SIZE(PM,1),(JPMODE)*3) :: ZDMINTRA,ZDMINTER,ZDMCOND - -REAL :: ZGASMW ! Molecular weight of background - ! gas (g/mol) -REAL, DIMENSION(SIZE(PM,1)) :: ZPGAS ! background gas pressure (Pa) -REAL, DIMENSION(SIZE(PM,1)) :: ZRH,PSAT ! Relative humidity -REAL :: ZDT ! Pas de temps -REAL, DIMENSION(SIZE(PM,1)) :: ZPKM, ZPKH2O, ZSUM - -!----------------------------------------------------------------------------- - -ZDT=PDTACT - -!************************************************************* -! Calcul de la fraction massique entre les modes -!************************************************************* -ZSUM (:) = 0. -DO JI=1,JPMODE - DO JJ=1,NSP+NCARB+NSOA - ZSUM (:) = ZSUM (:) + PCTOTA(:,JJ,JI) - ENDDO +! +! * 0.1 declarations of arguments +! +REAL, INTENT(IN) :: PDTACT, PTIME +REAL, DIMENSION(:,:), INTENT(INOUT) :: PRHOP +REAL, DIMENSION(:), INTENT(INOUT) :: PSO4RAT +REAL, DIMENSION(:,:), INTENT(INOUT) :: PM +REAL, DIMENSION(:,:), INTENT(INOUT) :: PLNSIG, PRG, PN +REAL, DIMENSION(:,:), INTENT(INOUT) :: PCTOTG +REAL, DIMENSION(:,:), INTENT(INOUT) :: PSOLORG +REAL, DIMENSION(:,:), INTENT(INOUT) :: PSEDA +REAL, DIMENSION(:,:), INTENT(INOUT) :: PMASK +REAL, DIMENSION(:,:,:), INTENT(INOUT) :: PCTOTA, PCCTOT +REAL, DIMENSION(:), INTENT(IN) :: PRV, PDENAIR, PPRESSURE, PTEMP, PRC +REAL, DIMENSION(:), INTENT(INOUT) :: PJNUC, PJ2RAT +REAL, DIMENSION(:,:), INTENT(INOUT) :: PMBEG,PMINT,PMEND +REAL, DIMENSION(:,:), INTENT(INOUT) :: PDMINTRA,PDMINTER,PDMCOND,PDMNUCL,PDMMERG +REAL, DIMENSION(:), INTENT(INOUT) :: PCONC_MASS,PCOND_MASS_I,PCOND_MASS_J,PNUCL_MASS +! +! * 0.2 declarations of local variables +! +INTEGER :: JI, JJ +! +REAL :: ZGASMW ! Molecular weight of background gas (g/mol) +REAL, DIMENSION(SIZE(PM,1)) :: ZRH,ZPSAT ! Relative humidity, ? +REAL, DIMENSION(SIZE(PM,1)) :: ZPKM, ZPKH2O +REAL, DIMENSION(SIZE(PM,1)) :: ZMU, ZLAMBDA +! +REAL, DIMENSION(SIZE(PM,1)) :: ZDMNDT, ZDM3DT, ZDM6DT, ZDMN3DT, ZDMN6DT +REAL, DIMENSION(SIZE(PM,1),JPMODE) :: ZDMC0DT, ZDMC3DT, ZDMC6DT +REAL, DIMENSION(SIZE(PM,1),3*JPMODE) :: ZDMGROW +REAL, DIMENSION(SIZE(PM,1)) :: ZSULF +! +!------------------------------------------------------------------------------- +! +! * 1. INITIALIZATION +! -------------- +! +PDMINTRA(:,:) = 0.0 +PDMINTER(:,:) = 0.0 +PDMCOND(:,:) = 0.0 +PDMNUCL(:,:) = 0.0 +PDMMERG(:,:) = 0.0 +! +ZDMGROW(:,:) = 0.0 +! +ZDMC0DT(:,:) = 0.0 +ZDMC3DT(:,:) = 0.0 +ZDMC6DT(:,:) = 0.0 +! +ZDMN3DT(:) = 0.0 +ZDMN6DT(:) = 0.0 +! +! * Compute relative humidity +! +ZPKM (:) = 1E-3*PDENAIR(:) * XAVOGADRO / 28.9644 +ZPKH2O(:) = ZPKM(:)*1.6077*PRV(:) +ZPSAT (:) = 0.611*EXP(17.2694*(PTEMP(:)-273.16)/(PTEMP(:)-35.86)) +ZPSAT (:) = ZPSAT(:)*1000. +ZRH (:) = (ZPKH2O(:)/(ZPKM(:)*1.6077))*PPRESSURE(:)/& + & (0.622+(ZPKH2O(:)/(ZPKM(:)*1.6077)))/ZPSAT(:) +ZGASMW = 29.0 +! +! * gas viscosity +ZMU(:) = 0.003661*PTEMP(:) +ZMU(:) = 0.0066164*ZMU(:)*sqrt(ZMU(:))/(PTEMP(:)+114.d0) +! * mean free path +ZLAMBDA(:)=ZMU(:)/PDENAIR(:)*sqrt(1.89d-4*ZGASMW/PTEMP(:))*1.e6 +! +! +! [ug.m-3.s-1] = [molec.cm-3.s-1] * *XH2SO4 / (XAVOGADRO*1.E-12) +PSO4RAT(:) = PSO4RAT(:) * XH2SO4 / (XAVOGADRO*1.E-12) +! +! ZSULF [ug.m-3.s-1] = production rate of sulfuric acid +ZSULF(:) = PSO4RAT(:) +! +! Stock value for diag +PCONC_MASS(:) = ZSULF(:) * PDTACT +! +!------------------------------------------------------- +! +! * 2. COMPUTE COAGULATION TERMS +! ------------------------------------------ +! +IF (LCOAGULATION) THEN + CALL CH_AER_COAG(PM, PLNSIG, PRG, PN, PDMINTRA, PDMINTER, & + PTEMP, ZMU, ZLAMBDA, PRHOP ) +ELSE + PDMINTRA(:,:) = 0.0 + PDMINTER(:,:) = 0.0 +ENDIF +! +!------------------------------------------------------- +! +! * 3. COMPUTE NUCLEATION +! -------------------------------------------- +! +! +! * 2.0 Compute sulfuric acid concentration available for nucleation +! ----------------------------------------------------------- +! +! dC / dt = P - Cs / time +! +CALL CH_AER_COND(PM, PLNSIG, PRG, PPRESSURE, PTEMP, & + ZDMC3DT, ZDMC6DT ) +! +ZSULF(:) = ZSULF(:) / (ZDMC3DT(:,1)+ZDMC3DT(:,2)) +! +! +!* 2.1 NUCLEATION +! ---------- +! +! +IF (CNUCLEATION == 'NONE') THEN + PJNUC = 0.0 +ELSE + CALL CH_AER_NUCL(ZRH,PTEMP,ZSULF,PJNUC,PJ2RAT) +END IF +! +! Convert nucleation rate +! [ug.m-3.s-1] = [molec.cm-3.s-1] * XH2SO4 / (XAVOGADRO*1.E-12) +! +ZDMNDT(:) = PJNUC(:) * XH2SO4 / (XAVOGADRO*1.E-12) +! +! H2SO4 final [ug.m-3] = H2SO4 initial [ug.m-3] +! - H2SO4 rate consumed by nucleation [ug.m-3.s-1] * Time step [s] +! +DO JI=1, SIZE(PM(:,1)) + ! + IF ( ZDMNDT(JI) .GT. PSO4RAT(JI) ) THEN + ! + ZDMNDT(JI) = PSO4RAT(JI) + PJNUC (JI) = ZDMNDT (JI) / XH2SO4 * (XAVOGADRO*1.E-12) + ! + END IF ENDDO -POM(:,:) = 0. +! +ZSULF(:) = (PSO4RAT(:)-ZDMNDT(:)) * PDTACT +! +PNUCL_MASS(:) = ZDMNDT(:) * PDTACT +! +! +! Update moment tendencies for nucleation +! +PDMNUCL(:,NM0(1)) = ZDMNDT(:)/(XFAC(JP_AER_SO4)*( (XRADIUS_NUCL)**3)*EXP(4.5 * LOG(XSIGMA_NUCL)**2)) +PDMNUCL(:,NM3(1)) = ZDMNDT(:)/XFAC(JP_AER_SO4) +PDMNUCL(:,NM6(1)) = PDMNUCL(:,NM0(1))*( (XRADIUS_NUCL)**6*EXP(18.*LOG(XSIGMA_NUCL)**2)) +PDMNUCL(:,NM0(2)) = 0.0 +PDMNUCL(:,NM3(2)) = 0.0 +PDMNUCL(:,NM6(2)) = 0.0 +! +!------------------------------------------------------- +! +! * 3. COMPUTE CONDENSATION +! -------------------- +! +! +IF (LCONDENSATION) THEN + ! + ! Update dM0_cond / dt + PDMCOND(:,NM0(1)) = 0.0 + PDMCOND(:,NM0(2)) = 0.0 + ! + ! Update of dM3_cond/dt from new dMass_cond/dt + ! + PDMCOND(:,NM3(1)) = (ZSULF(:)/PDTACT) / XFAC(JP_AER_SO4) * (ZDMC3DT(:,1) / (ZDMC3DT(:,1)+ZDMC3DT(:,2) )) + PDMCOND(:,NM3(2)) = (ZSULF(:)/PDTACT) / XFAC(JP_AER_SO4) * (ZDMC3DT(:,2) / (ZDMC3DT(:,1)+ZDMC3DT(:,2) )) + ! + ! Compute dM0_cond/dt --> usefull for calculation of dM6_cond/dt + ! + ZDMC0DT(:,1) = PDMCOND(:,NM3(1)) / (( (PRG(:,1))**3 ) * EXP(4.5 * PLNSIG(:,1)**2)) + ZDMC0DT(:,2) = PDMCOND(:,NM3(2)) / (( (PRG(:,2))**3 ) * EXP(4.5 * PLNSIG(:,2)**2)) + ! + PDMCOND(:,NM6(1)) = ZDMC0DT(:,1) * (( (PRG(:,1))**6 ) * EXP(18. * PLNSIG(:,1)**2)) + PDMCOND(:,NM6(2)) = ZDMC0DT(:,2) * (( (PRG(:,2))**6 ) * EXP(18. * PLNSIG(:,2)**2)) + ! +ELSE + ! + ZDMC0DT(:,:) = 0.0 + ZDMC3DT(:,:) = 0.0 + ZDMC6DT(:,:) = 0.0 + PDMCOND(:,:) = 0.0 + ! +ENDIF +! +! Stock new values of condensated mass for diagnostic +! +! [ug.m-3] = [um3.m-3.s-1]*[s]*XFAC +PCOND_MASS_I(:) = PDMCOND(:,NM3(1)) * PDTACT * XFAC(JP_AER_SO4) +PCOND_MASS_J(:) = PDMCOND(:,NM3(2)) * PDTACT * XFAC(JP_AER_SO4) +! +!------------------------------------------------------------------------------- +! +! * 4. MODE MERGING +! ------------ +! +! This code implements Section 1.5 of Binkowski and Roselle (2003). +! If the Aitken mode mass is growing faster than accumulation mode +! mass and the Aitken mode number concentration exceeds the +! accumulation mode number concentration, then moments tendency +! are adjusted. +! +IF (LMODE_MERGING) THEN + ZDMGROW(:,NM0(1)) = PDMCOND(:,NM0(1)) + PDMINTER(:,NM0(1)) + PDMINTRA(:,NM0(1)) + ZDMGROW(:,NM3(1)) = PDMCOND(:,NM3(1)) + PDMINTER(:,NM3(1)) + PDMINTRA(:,NM3(1)) + ZDMGROW(:,NM6(1)) = PDMCOND(:,NM6(1)) + PDMINTER(:,NM6(1)) + PDMINTRA(:,NM6(1)) + ZDMGROW(:,NM0(2)) = PDMCOND(:,NM0(2)) + PDMINTER(:,NM0(2)) + PDMINTRA(:,NM0(2)) + ZDMGROW(:,NM3(2)) = PDMCOND(:,NM3(2)) + PDMINTER(:,NM3(2)) + PDMINTRA(:,NM3(2)) + ZDMGROW(:,NM6(2)) = PDMCOND(:,NM6(2)) + PDMINTER(:,NM6(2)) + PDMINTRA(:,NM6(2)) + CALL CH_AER_MODE_MERGING(PM, PLNSIG, PRG, ZDMGROW, PDMMERG) +ELSE + PDMMERG(:,:)=0.0 +ENDIF +! +!------------------------------------------------------------------------------- +! +! * 5. UPDATE OF SULFURIC ACID CONCENTRATION +! ------------------------------------- +! +PCTOTG(:,JP_AER_SO4g)=PCTOTG(:,JP_AER_SO4g)-PCOND_MASS_I(:)-PCOND_MASS_J(:)-PNUCL_MASS(:) +! +!------------------------------------------------------- +! +! * 6. MASK DIFFERENT TERMS +! -------------------- +! +! DIRE A QUOI SERVENT CES MASKS.... ? +! DO JI=1,JPMODE - DO JJ=1,NSP+NCARB+NSOA - POM(:,JI) = POM(:,JI) + PCTOTA(:,JJ,JI) / ZSUM (:) - ENDDO -ENDDO - - -!****************************************************** -! Thermodynamic variables initialization -! from Meso-NHC -!****************************************************** - -ZPKM(:) = 1E-3*PDENAIR(:) * 6.0221367E+23 / 28.9644 -ZPKH2O(:) = ZPKM(:)*1.6077*PRV(:) -PSAT(:)=0.611*EXP(17.2694*(PTEMP(:)-273.16)/(PTEMP(:)-35.86)) -PSAT(:)=PSAT(:)*1000. -ZRH(:)=(ZPKH2O(:)/(ZPKM(:)*1.6077))*PPRESSURE(:)/& - &(0.622+(ZPKH2O(:)/(ZPKM(:)*1.6077)))/PSAT(:) - -ZPGAS(:)=PPRESSURE(:) -ZGASMW=29. - -!****************************************************** -! calculate gas viscosity and mean free path -!****************************************************** -PMU(:)=0.003661*PTEMP(:) -PMU(:)=.0066164*PMU(:)*sqrt(PMU(:))/(PTEMP(:)+114.d0) - -PLAMBDA(:)=PMU(:)/PDENAIR(:)*sqrt(1.89d-4*ZGASMW/PTEMP(:))*1.e6 - -CALL CH_AER_COAG(PM, PSIG0, PRG0, PN0,ZDMINTRA,ZDMINTER,& - PTEMP,PMU,PLAMBDA,PRHOP0) - - -CALL CH_AER_GROWTH(PM, PSIG0, PRG0, ZDMCOND,PDENAIR,ZGASMW,& - ZPGAS,PTEMP,ZRH,POM,PSO4RAT,PDTACT) - -DO II=1,JPMODE -ZDMINTRA(:,NM0(II)) = ZDMINTRA(:,NM0(II)) * PMASK(:,II) -ZDMINTRA(:,NM3(II)) = ZDMINTRA(:,NM3(II)) * PMASK(:,II) -ZDMINTRA(:,NM6(II)) = ZDMINTRA(:,NM6(II)) * PMASK(:,II) -ZDMINTER(:,NM0(II)) = ZDMINTER(:,NM0(II)) * PMASK(:,II) -ZDMINTER(:,NM3(II)) = ZDMINTER(:,NM3(II)) * PMASK(:,II) -ZDMINTER(:,NM6(II)) = ZDMINTER(:,NM6(II)) * PMASK(:,II) -ZDMCOND(:,NM0(II)) = ZDMCOND(:,NM0(II)) * PMASK(:,II) -ZDMCOND(:,NM3(II)) = ZDMCOND(:,NM3(II)) * PMASK(:,II) -ZDMCOND(:,NM6(II)) = ZDMCOND(:,NM6(II)) * PMASK(:,II) -POM(:,II) = POM(:,II) * PMASK(:,II) -PSEDA(:,NM0(II)) = PSEDA(:,NM0(II)) * PMASK(:,II) -PSEDA(:,NM3(II)) = PSEDA(:,NM3(II)) * PMASK(:,II) -PSEDA(:,NM6(II)) = PSEDA(:,NM6(II)) * PMASK(:,II) + PDMINTRA(:,NM0(JI)) = PDMINTRA(:,NM0(JI)) * PMASK(:,JI) + PDMINTRA(:,NM3(JI)) = PDMINTRA(:,NM3(JI)) * PMASK(:,JI) + PDMINTRA(:,NM6(JI)) = PDMINTRA(:,NM6(JI)) * PMASK(:,JI) + PDMINTER(:,NM0(JI)) = PDMINTER(:,NM0(JI)) * PMASK(:,JI) + PDMINTER(:,NM3(JI)) = PDMINTER(:,NM3(JI)) * PMASK(:,JI) + PDMINTER(:,NM6(JI)) = PDMINTER(:,NM6(JI)) * PMASK(:,JI) + PDMCOND (:,NM0(JI)) = PDMCOND (:,NM0(JI)) * PMASK(:,JI) + PDMCOND (:,NM3(JI)) = PDMCOND (:,NM3(JI)) * PMASK(:,JI) + PDMCOND (:,NM6(JI)) = PDMCOND (:,NM6(JI)) * PMASK(:,JI) + PDMNUCL (:,NM0(JI)) = PDMNUCL (:,NM0(JI)) * PMASK(:,JI) + PDMNUCL (:,NM3(JI)) = PDMNUCL (:,NM3(JI)) * PMASK(:,JI) + PDMNUCL (:,NM6(JI)) = PDMNUCL (:,NM6(JI)) * PMASK(:,JI) + PDMMERG (:,NM0(JI)) = PDMMERG (:,NM0(JI)) * PMASK(:,JI) + PDMMERG (:,NM3(JI)) = PDMMERG (:,NM3(JI)) * PMASK(:,JI) + PDMMERG (:,NM6(JI)) = PDMMERG (:,NM6(JI)) * PMASK(:,JI) + PSEDA (:,NM0(JI)) = PSEDA (:,NM0(JI)) * PMASK(:,JI) + PSEDA (:,NM3(JI)) = PSEDA (:,NM3(JI)) * PMASK(:,JI) + PSEDA (:,NM6(JI)) = PSEDA (:,NM6(JI)) * PMASK(:,JI) END DO - - -CALL CH_AER_SOLV(PM, PSIG0, PRG0, PN0,PCTOTG, PCTOTA, PCCTOT, & - ZDMINTRA,ZDMINTER,ZDMCOND,PSEDA,ZDT,POM,& - PRV, PDENAIR, PPRESSURE, PTEMP, PRC, PTIME, PSOLORG) - - +! +!------------------------------------------------------- +! +! * 7. SOLVE MOMENT EQUATIONS +! ---------------------- +! +CALL CH_AER_SOLV(PM, PLNSIG, PRG, PN, PCTOTG, PCTOTA, PCCTOT, & + PDMINTRA, PDMINTER, PDMCOND, PDMNUCL, PDMMERG, PSEDA, & + PDTACT, PRV, PDENAIR, PPRESSURE, PTEMP, PRC, PTIME, & + PSOLORG, PMBEG, PMINT, PMEND) +! END SUBROUTINE CH_AER_DRIVER diff --git a/src/MNH/ch_aer_eqm_initn.f90 b/src/MNH/ch_aer_eqm_initn.f90 index 59447b81236c921d80262a9251c899e68d17b5a8..0759d63cebf4fb9ecacb825551b4dc67bb1bec1e 100644 --- a/src/MNH/ch_aer_eqm_initn.f90 +++ b/src/MNH/ch_aer_eqm_initn.f90 @@ -53,7 +53,7 @@ END MODULE MODI_CH_AER_EQM_INIT_n USE MODD_CH_AEROSOL USE MODD_CSTS_DUST, ONLY : XDENSITY_DUST USE MODD_CH_AERO_n -USE MODD_CH_M9_n, ONLY : CNAMES +USE MODD_CH_M9_n, ONLY : CNAMES, NEQ USE MODD_CH_MNHC_n, ONLY : LCH_INIT_FIELD USE MODD_NSV USE MODD_CONF @@ -131,6 +131,10 @@ IF (.NOT.(ASSOCIATED(XSOLORG))) THEN ALLOCATE(XSOLORG(SIZE(PCHEM,1),SIZE(PCHEM,2),SIZE(PCHEM,3),10)) XSOLORG(:,:,:,:) = 0. END IF +IF (.NOT.(ALLOCATED(XFAC))) ALLOCATE(XFAC(NSP+NSOA+NCARB)) +IF (.NOT.(ALLOCATED(XRHOI))) ALLOCATE(XRHOI(NSP+NSOA+NCARB)) +IF (.NOT.(ASSOCIATED(XFRAC))) ALLOCATE(XFRAC(SIZE(PCHEM,1),SIZE(PCHEM,2),SIZE(PCHEM,3),NEQ)) +IF (.NOT.(ASSOCIATED(XSEDA))) ALLOCATE(XSEDA(SIZE(PCHEM,1),SIZE(PCHEM,2),SIZE(PCHEM,3),JPMODE*3)) ! ! Default values of molar mass @@ -170,8 +174,8 @@ ELSE ZINIRADIUSI = XINIRADIUSI ZINIRADIUSJ = XINIRADIUSJ END IF -ZMINRGI = ZINIRADIUSI * XCOEFRADIMIN -ZMINRGJ = ZINIRADIUSJ * XCOEFRADJMIN +ZMINRGI = ZINIRADIUSI ! * XCOEFRADIMIN +ZMINRGJ = ZINIRADIUSJ ! * XCOEFRADJMIN ! Aerosol Density @@ -401,19 +405,17 @@ XSVMIN(NSV_CHEMBEG-1+JP_CH_CO) = 1E-10 ZRHODREFMIN = MAX_ll( PRHODREF(:,:,:), IINFO_ll) ZMASS = XN0IMIN * ((ZMINRGI**3)*EXP(4.5 * (LOG(XSIGIMIN))**2)) ZM6MIN = XN0IMIN * ((ZMINRGI**6)*EXP(18. * (LOG(XSIGIMIN))**2)) -XSVMIN(NSV_AERBEG-1+JP_CH_BCi) = ZMASS * XFAC(JP_AER_BC) * 6.0221367E+11/(ZDEN2MOL*12.*ZRHODREFMIN) -XSVMIN(NSV_AERBEG-1+JP_CH_DSTi) = ZMASS * XFAC(JP_AER_DST) * 6.0221367E+11/(ZDEN2MOL*12.*ZRHODREFMIN) +XSVMIN(NSV_AERBEG-1+JP_CH_BCi) = 0.5*ZMASS * XFAC(JP_AER_BC) * 6.0221367E+11/(ZDEN2MOL*12.*ZRHODREFMIN) +XSVMIN(NSV_AERBEG-1+JP_CH_OCi) = 0.5*ZMASS * XFAC(JP_AER_OC) * 6.0221367E+11/(ZDEN2MOL*12.*ZRHODREFMIN) XSVMIN(NSV_AERBEG-1+JP_CH_M0i) = XN0IMIN * 1E-6 / (ZDEN2MOL*ZRHODREFMIN) IF (LVARSIGI) XSVMIN(NSV_AERBEG-1+JP_CH_M6i) = ZM6MIN / (ZDEN2MOL*ZRHODREFMIN) ! ! For j mode ZMASS = XN0JMIN * ((ZMINRGJ**3)*EXP(4.5 * (LOG(XSIGJMIN))**2)) ZM6MIN = XN0JMIN * ((ZMINRGJ**6)*EXP(18. * (LOG(XSIGJMIN))**2)) -XSVMIN(NSV_AERBEG-1+JP_CH_BCj) = ZMASS * XFAC(JP_AER_BC) * 6.0221367E+11/(ZDEN2MOL*12.*ZRHODREFMIN) -XSVMIN(NSV_AERBEG-1+JP_CH_DSTj) = ZMASS * XFAC(JP_AER_DST) * 6.0221367E+11/(ZDEN2MOL*12.*ZRHODREFMIN) +XSVMIN(NSV_AERBEG-1+JP_CH_BCj) = 0.5*ZMASS * XFAC(JP_AER_BC) * 6.0221367E+11/(ZDEN2MOL*12.*ZRHODREFMIN) +XSVMIN(NSV_AERBEG-1+JP_CH_OCj) = 0.5*ZMASS * XFAC(JP_AER_OC) * 6.0221367E+11/(ZDEN2MOL*12.*ZRHODREFMIN) XSVMIN(NSV_AERBEG-1+JP_CH_M0j) = XN0JMIN * 1E-6 / (ZDEN2MOL*ZRHODREFMIN) IF (LVARSIGJ) XSVMIN(NSV_AERBEG-1+JP_CH_M6j) = ZM6MIN / (ZDEN2MOL*ZRHODREFMIN) ! -XSVMIN(NSV_AERBEG:NSV_AEREND) = 0. -! END SUBROUTINE CH_AER_EQM_INIT_n diff --git a/src/MNH/ch_aer_growth.f90 b/src/MNH/ch_aer_growth.f90 index 855ef7440eb1d8b553e3987cfcfc5d06c67d6ff6..2417a53affda4b6a1b29325a6e58766a0cf5edb9 100644 --- a/src/MNH/ch_aer_growth.f90 +++ b/src/MNH/ch_aer_growth.f90 @@ -12,265 +12,15 @@ MODULE MODI_CH_AER_GROWTH !! ######################### !! -INTERFACE -!! -SUBROUTINE CH_AER_GROWTH(PM,PSIG0, PRG0, PDMCOND,PDENAIR,PGASMW,PPGAS,PTGAS,PRH, POM,& - PSO4RAT, PDT) -IMPLICIT NONE -REAL, DIMENSION(:,:), INTENT(INOUT) :: PM -REAL, DIMENSION(:,:), INTENT(INOUT) :: PDMCOND, POM -REAL, DIMENSION(:), INTENT(IN) :: PDENAIR,PPGAS,PTGAS -REAL, DIMENSION(:), INTENT(INOUT) :: PRH, PSO4RAT -REAL, DIMENSION(:,:), INTENT(INOUT) :: PSIG0, PRG0 -REAL, INTENT(INOUT) :: PGASMW -REAL, INTENT(IN) :: PDT -END SUBROUTINE CH_AER_GROWTH -!! -END INTERFACE !! END MODULE MODI_CH_AER_GROWTH !! !! ############################################## - SUBROUTINE CH_AER_GROWTH(PM,PSIG0, PRG0, PDMCOND,PDENAIR,& - PGASMW,PPGAS,PTGAS,PRH, POM,& - PSO4RAT, PDT) + SUBROUTINE CH_AER_GROWTH() !! ############################################## !! !! PURPOSE !! ------- !! -!! This routine computes the rate of change due to condensation -!! and homogene nucleation -!! -!!************************************************************* -!! -!! Sans test pour savoir si toute la vapeur est utilisee -!! -!! REFERENCE -!! --------- -!! none -!! -!! AUTHOR -!! ------ -!! Vincent Crassier (LA) -!! -!! MODIFICATIONS -!! ------------- -!! Tulet P. ajout nucleation Kulmala, 1998 -!! -!************************************************************* -! Entry variables: -! -! PM(JPIN) -Array of moments -! ZT -Present time in the scheme -! -!************************************************************* -! Exit variables: -! -! ZCOEFM(JPIN) -Array of moment variation due to condensation -! and homogeneous nucleation -! -!************************************************************* -! Variables used during the condensation calculation -! -! ZALPHA - accomodation coefficient -! ZCBAR - kinetic velocity of vapor molecules (m/s) -! ZDV - vapor diffusivity (m2/s) -! ZPSIT - size-independant component of the growth law -! ZSATUR - saturation ratio of condensed species -!************************************************************* -! Variables used during nucleation calculation -! -! ZCCRIT -Critical concentration for production of new -! particles (kg/m3) -! ZC0 -Initial monomer concentration (kg/m3) -! ZG0 -Critical cluster number -! ZP -Rate of gas phase production of sulfuric acid -! concentration C (kg/m3) -! ZSURTEN -Surface tension (N/m) -! ZTHETA -Dimensionless surface energy -! ZW0 -Dimensionless energy barrier to nucleation -! ************************************************************ -!! -!! IMPLICIT ARGUMENTS -!! ------------------ -!! -USE MODD_CH_AEROSOL -USE MODI_CH_AER_NUCL -USE MODD_CST, ONLY : XPI -!! -IMPLICIT NONE -! -! -!* 0.1 Declarations of arguments -! -REAL, DIMENSION(:,:), INTENT(INOUT) :: PM -REAL, DIMENSION(:,:), INTENT(INOUT) :: PDMCOND, POM -REAL, DIMENSION(:), INTENT(IN) :: PDENAIR,PPGAS,PTGAS -REAL, DIMENSION(:), INTENT(INOUT) :: PRH, PSO4RAT -REAL, DIMENSION(:,:), INTENT(INOUT) :: PSIG0, PRG0 -REAL, INTENT(INOUT) :: PGASMW -REAL, INTENT(IN) :: PDT -! -!* 0.2 Declarations of local variables -! -INTEGER :: JI,JJ - -REAL, DIMENSION(SIZE(PM,1),JPMODE,2) :: ZRIK -REAL, DIMENSION(SIZE(PM,1)) :: ZRG,ZLN2S - -REAL, DIMENSION(SIZE(PM,1)) :: ZRIKNC,ZRIKFM -REAL, DIMENSION(SIZE(PM,1)) :: ZSIGGAS,ZSIGAIR -REAL, DIMENSION(SIZE(PM,1)) :: ZSIG -REAL, DIMENSION(SIZE(PM,1)) :: ZCBAR -REAL, DIMENSION(SIZE(PM,1),(JPMODE)*3) :: ZMOM -REAL, DIMENSION(SIZE(PM,1)) :: ZCCRIT -REAL, DIMENSION(SIZE(PM,1)) :: ZDTD,ZTINF,ZCSO4SS -REAL, DIMENSION(SIZE(PM,1)) :: ZDMDT,ZDNDT,ZDM3DT,ZDM6DT -REAL, DIMENSION(SIZE(PM,1)) :: ZAL, ZJA, ZSULF - -REAL :: ZDV,ZALPHA - -REAL :: ZMSO4 - -ZALPHA=0.05 -ZMSO4 = 98. -PDMCOND(:,:)=0.d0 -! -!------------------------------------------------------------------------------- -! -! Pour l'instant seul H2SO4 peut nucleer, d'une part -! de facon homogene (creation de nouvelles particules) -! d'autre part de facon heterogene (sur les particules -! d'aerosol deja existante) - -!******************************************************* -! Compute the binary diffusivity of the gaseous species -!******************************************************* -ZSIGAIR(:)=(PGASMW/1000.*3./(6.023e23*4.*XPI*PDENAIR(:)))**(1./3.) - -ZSIGGAS(:)=(ZMSO4/1000.*3./(6.023e23*4.*XPI*XRHOI(2)))**(1./3.) -ZSIG(:)=(ZSIGGAS(:)+ZSIGAIR(:))/2. -ZCBAR(:)=SQRT(8.*PTGAS(:)*8.31441/(XPI*ZMSO4*1.e-3)) -ZDV=0.08e-4 - -!************************* -! Compute the Omega terms -!************************* - -DO JI=1,JPMODE - - ZRG(:)=PRG0(:,JI)*1.e-6 - ZLN2S(:)=PSIG0(:,JI)**2 - - DO JJ=1,6 - - ZMOM(:,JJ)=PM(:,NM0(JI))*ZRG(:)**JJ*exp(real(JJ)**2*ZLN2S(:)/2.) - - ENDDO - - - ZRIKFM(:)=XPI*ZALPHA*ZCBAR(:)/8.*ZMOM(:,2) - ZRIKNC(:)=XPI*ZDV/2.*ZMOM(:,1) - - ZRIK(:,JI,1)=ZRIKFM(:)*(ZRIKNC(:)/(ZRIKFM(:)+ZRIKNC(:))) - - ZRIKFM(:)=XPI*ZALPHA*ZCBAR(:)/8.*ZMOM(:,5) - ZRIKNC(:)=XPI*ZDV/2.*ZMOM(:,4) - - ZRIK(:,JI,2)=ZRIKFM(:)*(ZRIKNC(:)/(ZRIKFM(:)+ZRIKNC(:))) - -ENDDO -POM(:,1)=(ZRIK(:,1,1)/(ZRIK(:,1,1)+ZRIK(:,2,1))) -POM(:,2)=(ZRIK(:,2,1)/(ZRIK(:,1,1)+ZRIK(:,2,1))) -! -IF (CNUCLEATION=='KERMINEN') THEN -!****************************************************************** -! Debut de la partie nucleation homogene en utilisant l'approche de -! Kerminen et Wexler (1994) -!****************************************************************** - - ZCCRIT(:)=0.16*exp(0.1*PTGAS(:)-3.5*PRH(:)-27.7) -!KS: suppress nucleation -! ZCCRIT(:)=1E20 - -! ZTINF, the time constant for particles to condense onto -! existing particles is given by Tinf=1/(dM3i/dt+dm3j/dt) -! where M3i and M3j are in third moment par CM3 - - ZDTD(:)=8.*(ZRIK(:,1,1)+ZRIK(:,2,1)) - ZTINF(:)=1./ZDTD(:) - - ZCSO4SS(:)=PSO4RAT(:)*(ZMSO4/6.0221367E+11)*ZTINF(:) - - DO JI = 1,SIZE(PM,1) - - IF (ZCSO4SS(JI) <= ZCCRIT(JI)) THEN !No nucleation - ZDNDT(JI)=0. - ZDMDT(JI)=0. - ZDM6DT(JI)=0. - ELSE !Calculate nucleation - -! Nucleation of particles from excess mass concentration of sulfuric acid -! above critical mass concentration of sulfuric acid -! and condensation of the remaining mass - - ZDMDT(JI)=ZDTD(JI)*(ZCSO4SS(JI)-ZCCRIT(JI)) -! Les nouvelles particules fraichement crees sont inclues dans le mode -! d'aitken avec les parametres d'initialisation au niveau de la distribution - ZDNDT(JI)=ZDMDT(JI)*1.e-18/XFAC(JP_AER_SO4)/((0.0025e-6)**3*exp(9./2.*log(1.5)**2)) - ZDM6DT(JI)=ZDNDT(JI)*(0.0025)**6*exp(18.*log(1.5)**2) -! write(*,*) 'Nucleation: ','DNDT= ',ZDNDT,' DM6DT= ',ZDM6DT - - ENDIF - - ENDDO -ELSE - ZDNDT(:)=0. - ZDMDT(:)=0. - ZDM6DT(:)=0. -ENDIF -! -IF (CNUCLEATION=='KULMALA') THEN -! compute nucleation rate -! - ZSULF(:) = PSO4RAT(:) * PDT -! - CALL CH_AER_NUCL(PRH,PTGAS,ZSULF,ZJA,ZAL,SIZE(PSO4RAT,1)) -! -! new mass in molec.cm-3.s-1 - ZDMDT(:)= ZAL(:)*ZJA(:) -! convert into microgram.m-3.s-1 - ZDMDT(:)= ZDMDT(:) * ZMSO4/6.0221367E+11 -! -! Les nouvelles particules fraichement crees sont inclues dans le mode -! d'aitken avec les parametres d'initialisation au niveau de la distribution -! - ZDNDT(:) = ZDMDT(:)/(XFAC(JP_AER_SO4)*(PRG0(:,1)**3)*EXP(4.5 * PSIG0(:,1)**2)) - ZDM6DT(:) = ZDNDT(:)*(PRG0(:,1)**6*EXP(18.*PSIG0(:,1)**2)) - -ELSE - ZDNDT(:)=0. - ZDMDT(:)=0. - ZDM6DT(:)=0. -ENDIF -! -! condensation des sulfates -ZDM3DT(:)=PSO4RAT(:)*(ZMSO4/6.0221367E+11)/XFAC(JP_AER_SO4)*1.e-18 -! -! Enlever la quantite de 3e moment deja consommee pour la nucleation homogene -ZDM3DT(:)=ZDM3DT(:)-ZDMDT(:)/XFAC(JP_AER_SO4)*1.e-18 -! -! -PDMCOND(:,1)=ZDNDT(:) -PDMCOND(:,2)=ZDMDT(:)/XFAC(JP_AER_SO4) -PDMCOND(:,3)=ZDM6DT(:) -! -DO JI=1,JPMODE - PDMCOND(:,NM3(JI))=PDMCOND(:,NM3(JI))+ZDM3DT(:)*POM(:,JI)*1.e18 - PDMCOND(:,NM6(JI))=PDMCOND(:,NM6(JI))+ZDM3DT(:)*POM(:,JI)*ZRIK(:,JI,2)/ZRIK(:,JI,1)*1.e36 - -ENDDO -! END SUBROUTINE CH_AER_GROWTH diff --git a/src/MNH/ch_aer_kulmala.f90 b/src/MNH/ch_aer_kulmala.f90 new file mode 100644 index 0000000000000000000000000000000000000000..78da267c096807e7ac376730965a1f9d8690186e --- /dev/null +++ b/src/MNH/ch_aer_kulmala.f90 @@ -0,0 +1,178 @@ +!ORILAM_LIC Copyright 1994-2014 CNRS, Meteo-France and Universite Paul Sabatier +!ORILAM_LIC This is part of the ORILAM software governed by the CeCILL-C licence +!ORILAM_LIC version 1. See LICENSE, CeCILL-C_V1-en.txt and CeCILL-C_V1-fr.txt +!ORILAM_LIC for details. +!----------------------------------------------------------------- +!--------------- special set of characters for RCS information +!----------------------------------------------------------------- +! $Source: /home/cvsroot/MNH-VX-Y-Z/src/MNH/ch_aer_nucl.f90,v $ $Revision: 1.1.4.1.18.1 $ +! MASDEV4_7 chimie 2006/05/18 13:07:25 +!----------------------------------------------------------------- +!! ################################ +MODULE MODI_CH_AER_KULMALA +!! ################################ +!! +INTERFACE + !! + SUBROUTINE CH_AER_KULMALA(PRH,PTEMP,PSULF,PJNUC,PRC) + IMPLICIT NONE + !! + REAL, DIMENSION(:), INTENT(IN) :: PRH, PTEMP, PSULF + REAL, DIMENSION(:), INTENT(INOUT) :: PJNUC, PRC + !! + END SUBROUTINE CH_AER_KULMALA + !! +END INTERFACE +! +END MODULE MODI_CH_AER_KULMALA +!! +!! ######################################################################### +SUBROUTINE CH_AER_KULMALA(PRH,PTEMP,PSULF,PJNUC,PRC) +!########################################################### +!! +!! PURPOSE +!! ------- +!! +!! Compute nucleation rate for binary sulfate/H2O +!! This is the Kulmala parametrization (1998) +!! +!! Valid for : +!! 233.15 < T < 298.15 (K) +!! 10 < RH < 100 (%) +!! 1.10¹Ⱐ< [H2SO4]gas < 3.10¹Ⱐ(molec/cm3) +!! +!! AUTHOR +!! ------ +!! B. Foucart * LACy * +!! +!! MODIFICATIONS +!! ------------- +!! B. Foucart (18/06/2018) * LACy * +!! +!---------------------------------------------------------------------------- +! +!* 0. DECLARATIONS +! ------------ +! +USE MODD_CH_AEROSOL +USE MODD_CST, ONLY : XAVOGADRO +! +IMPLICIT NONE +! +!* 0.1 Declarations of dummy arguments : +! +REAL, DIMENSION(:), INTENT(IN) :: PRH, PTEMP ! Relative humidity (%), Temp (kelvin) +REAL, DIMENSION(:), INTENT(IN) :: PSULF ! Available acid mass (ug./m3) +REAL, DIMENSION(:), INTENT(INOUT) :: PJNUC ! Nucleation rate (#/cm3/s) +REAL, DIMENSION(:), INTENT(INOUT) :: PRC ! Rayon du cluster critique en nm définit pour ch_aer_nucl +INTEGER :: II +! +!* 0.2 Declarations of local variables : +! +REAL, DIMENSION(SIZE(PSULF,1)) :: ZSULF ! Sulfuric acid concentration (molec/cm3) +REAL, DIMENSION(SIZE(PSULF,1)) :: ZAL ! Mole fraction of H2SO4 in the critical cluster +REAL, DIMENSION(SIZE(PSULF,1)) :: ZRA ! Relative acidity +REAL, DIMENSION(SIZE(PSULF,1)) :: ZH2O ! Water concentration (molec/cm3) +REAL, DIMENSION(SIZE(PSULF,1)) :: ZPVH2O ! Saturation vapor pressure for water (N/m2, T in K) +REAL, DIMENSION(SIZE(PSULF,1)) :: ZPVH2SO4 ! Saturation vapor pressure for sulfuric acid (N/m2, T in K) +REAL, DIMENSION(SIZE(PSULF,1)) :: ZKHI,ZSIG,ZNSULFC,ZNSULF ! Terms for nucleation rate calculation +! +REAL, PARAMETER :: ZKB=1.381E-23 ! Boltzman cste (m2 kg s-2 K-1) +! +PJNUC(:)=0. +ZAL(:)=1E-5 +ZRA(:)=0. +ZSULF(:)=0. +ZPVH2SO4(:)=0. +ZH2O(:)=0. +ZRA(:)=0. +ZSIG(:)=0. +ZNSULFC(:)=0. +ZKHI(:)=0. +! +! a. Sulfuric acid concentration definition: ZSULF from ug/m3 to molec/cm3 +! +ZSULF(:) = PSULF(:) +ZSULF(:) = ZSULF(:)*(XAVOGADRO*1.E-12) / XH2SO4 +! +! b. Conditions on sulfuric acid concentration to use Kulmala +! + ZSULF(:) = MAX(MIN(ZSULF(:), 3.E11), 0.) +! +! c. Restrictions for parametrization +! + WHERE(((PTEMP(:)>=223.).OR.(PTEMP(:)<=298)).AND.(PRH(:)>=0.1)) + ! + ! 1. Saturation vapor pressure for H2SO4 over a flat surface (N/m-2, T in K) + ! + ! a. Ayers et al., 1980 + ! + ZPVH2SO4(:)=EXP(27.78492066-10156.0/PTEMP(:)) + ! + ! b. Kulmala and Laaksonen., 1990 + ! + ! ZPVH2SO4(:)=EXP(-10156./ZT0+16.259+10156.*(-1./PTGAS(:)+1./ZT0+0.38/(ZTC-ZT0)*& + ! (1.+LOG(ZT0/PTGAS(:))-ZT0/PTGAS(:))))*101325. + ! + ! c. Noppel et al., 2002 + ! + ! ZPVH2SO4(:)=EXP(-11.94+10156*((1/360.15)-(1/PTGAS(:))+(0.38/545)*& + ! (1+LOG((360.15/PTGAS(:))-(360.15/PTGAS(:)))))) + ! + ! 2. Saturation vapor pressure for water over a flat surface (N/m2, T in K) + ! (Preining et al, 1981) + ! + ZPVH2O(:) = EXP(77.344913-7235.4247/PTEMP(:)-8.2*LOG(PTEMP(:))+0.0057113*PTEMP(:)) + ! + ! 3. Water concentration (molec/cm3) + ! + ZH2O(:) = PRH(:)*ZPVH2O(:)/(ZKB*PTEMP(:))/1.E6 + ! + ! 4. Relative Acidity + ! + ZRA(:)=ZSULF(:)*1.E6*(ZKB*PTEMP(:))/ZPVH2SO4(:) + ! + END WHERE +! +! 5. H2SO4 mole fraction in the critical nucleous (no unity) +! + WHERE ((ZSULF(:)>0.).AND.(ZH2O(:)>0.).AND.(ZRA(:)/=0.)) + ! + ZAL(:)=1.2233-(0.0154*ZRA(:))/(ZRA(:)+PRH(:))+0.0102*& ! (eq 17) + LOG(ZSULF(:))-0.0415*LOG(ZH2O(:))+0.0016*PTEMP(:) + ! + END WHERE +! + WHERE (((PTEMP(:)>=223.).OR.(PTEMP(:)<=298)).AND.(PRH(:)>=0.1).AND.ZAL(:)>1E-5) + ! + ! 6. Sulfuric nucleation rate (molec/cm3/s) + ! + ! a. Sulfuric acid vapor needed to produce jnuc = 1 cm-3.s-1 + ! + ZNSULFC(:)=EXP(-14.5125+0.1335*PTEMP(:)-10.5462*PRH(:)+1958.4*PRH(:)/PTEMP(:)) ! (eq 18) + ! + ! b. Sigma term + ! + ZSIG(:) = 1.+(PTEMP(:)-273.15)/273.15 ! (eq 22) + ! + ! c. Sulfuric acid vapor ratio term + ! + ZNSULF(:)=LOG(ZSULF(:)/ZNSULFC(:)) ! (eq 21) + ! + ! + ! d. Exponential term + ! + ZKHI(:)=25.1289*ZNSULF(:)-4890.8*ZNSULF(:)/PTEMP(:)-1743.3/PTEMP(:)-2.2479*ZSIG(:)*ZNSULF(:)*PRH(:)+& + 7643.4*ZAL(:)/PTEMP(:)-1.9712*ZAL(:)*ZSIG(:)/PRH(:) ! (eq 20) + ! + ! e. Nucleation rate + ! + PJNUC(:)=EXP(ZKHI(:)) ! (eq 19) + ! + END WHERE +! +PRC(:) = 0.5 ! The critical radius (nm) calculation is not given in Kulmala so we fix the values as 0.5 +! +RETURN +! +END SUBROUTINE CH_AER_KULMALA diff --git a/src/MNH/ch_aer_maattanen_ionind.f90 b/src/MNH/ch_aer_maattanen_ionind.f90 new file mode 100644 index 0000000000000000000000000000000000000000..f29afa3c421efab4ff67ec999e69dda311dc41cc --- /dev/null +++ b/src/MNH/ch_aer_maattanen_ionind.f90 @@ -0,0 +1,644 @@ +!ORILAM_LIC Copyright 1994-2014 CNRS, Meteo-France and Universite Paul Sabatier +!ORILAM_LIC This is part of the ORILAM software governed by the CeCILL-C licence +!ORILAM_LIC version 1. See LICENSE, CeCILL-C_V1-en.txt and CeCILL-C_V1-fr.txt +!ORILAM_LIC for details. +!----------------------------------------------------------------- +!--------------- special set of characters for RCS information +!----------------------------------------------------------------- +! $Source: /home/cvsroot/MNH-VX-Y-Z/src/MNH/ch_aer_nucl.f90,v $ $Revision: 1.1.4.1.18.1 $ +! MASDEV4_7 chimie 2006/05/18 13:07:25 +!----------------------------------------------------------------- +!! ################################ +MODULE MODI_CH_AER_MAATTANEN_IONIND +!! ################################ +!! +INTERFACE + !! + SUBROUTINE CH_AER_MAATTANEN_IONIND(PRH,PTEMP,PSULF,PJNUCI,PRCI) + IMPLICIT NONE + !! + REAL, DIMENSION(:), INTENT(IN) :: PRH,PTEMP,PSULF + REAL, DIMENSION(:), INTENT(INOUT) :: PJNUCI, PRCI + !! + !! + END SUBROUTINE CH_AER_MAATTANEN_IONIND + !! +END INTERFACE +!! +END MODULE MODI_CH_AER_MAATTANEN_IONIND +!! +!! ######################################################################### +SUBROUTINE CH_AER_MAATTANEN_IONIND(PRH,PTEMP,PSULF,PJNUCI,PRCI) +!########################################################### +! +!! +!! PURPOSE +!! ------- +!! +!! Compute nucleation rate for binary H2SO4/H2O +!! This is the Määttänen parametrization (2018) +!! This is the ion-induced particle formation part +!! +!! Valid for : +!! 195 < T < 400 (K) +!! 10â»âµ < RH < 100 (%) +!! 10â´ < [H2SO4]gas < 10¹ⶠ(molec/cm3) +!! +!! +!! AUTHOR +!! ------ +!! B. Foucart * LACy * +!! +!! MODIFICATIONS +!! ------------- +!! B. Foucart (18/06/2018) * LACy * +!! +!---------------------------------------------------------------------------- +! +!* 0. DECLARATIONS +! ------------ +! +USE MODD_CST, ONLY : XAVOGADRO +USE MODD_CONF, ONLY : NVERB +USE MODD_CH_AEROSOL +! +IMPLICIT NONE +! +!* 0.1 Declarations of dummy arguments : +! +REAL, DIMENSION(:), INTENT(IN) :: PRH, PTEMP, PSULF ! Relative humidity (%), Temp (kelvin) +REAL, DIMENSION(:), INTENT(INOUT) :: PJNUCI, PRCI ! Nucleation rate (#/cm3/s) , Critical cluster radius (nm) +! +!* 0.2 Declarations of local variables : +! +REAL, DIMENSION(SIZE(PSULF,1)) :: ZSULF ! Sulfuric acid concentration (molec/cm3) +REAL, DIMENSION(SIZE(PSULF,1)) :: ZAL ! Mole fraction of H2SO4 in the critical cluster +REAL, DIMENSION(SIZE(PSULF,1)) :: ZNTOTI ! Total number of molec in the critical cluster +REAL, DIMENSION(SIZE(PSULF,1)) :: ZKINTRI ! Threshold sulfuric acid for charged kinetic nucleation +REAL, DIMENSION(SIZE(PSULF,1)) :: ZNACI ! Sulfuric acid molecules in the charged critical cluster +REAL, DIMENSION(SIZE(PSULF,1)) :: ZIPR ! Ion pair production rate (cm-3 .s-1) +REAL, DIMENSION(SIZE(PSULF,1)) :: ZXLOSS ! Ion loss rate +REAL, DIMENSION(SIZE(PSULF,1)) :: ZCSI ! Ion condensation sink (s-1) +REAL, DIMENSION(SIZE(PSULF,1)) :: ZAIRN ! Air molecule concentration in (cm-3) +REAL, DIMENSION(SIZE(PSULF,1)) :: ZRECOMB ! Ion-ion recombination rate +REAL, DIMENSION(SIZE(PSULF,1)) :: ZNIPAIR ! Number of ion pairs in air (cm-3) +! +LOGICAL :: GKINETICI ! True if kinetic neutral nucleation +! +INTEGER :: II, ITEST ! Tests +! +IF (NVERB .GE. 10) WRITE(*,*) '~~~~ CH_AER_MAATT_ION : PSULF =',MINVAL(PSULF), MAXVAL(PSULF) +IF (NVERB .GE. 10) WRITE(*,*) '~~~~ CH_AER_MAATT_ION : (XAVOGADRO*1.E-12) =',(XAVOGADRO*1.E-12) +IF (NVERB .GE. 10) WRITE(*,*) '~~~~ CH_AER_MAATT_ION : XH2SO4=', XH2SO4 +IF (NVERB .GE. 10) WRITE(*,*) '~~~~ CH_AER_MAATT_ION : PTEMP =',MINVAL(PTEMP), MAXVAL(PTEMP) +IF (NVERB .GE. 10) WRITE(*,*) '~~~~ CH_AER_MAATT_ION : PRH =',MINVAL(PRH), MAXVAL(PRH) +! +!---------------------------------------------------------------------------- +! +! Parameters initialization +! +ZAL(:) = 0.17 ! must vary between 0 and 1 +PJNUCI(:) = 1E-7 ! must vary between 10E-7 and 10E10 cm3.s-1 +PRCI(:) = 2.8E-10 ! (meters) must vary between 0.28 and 1.2 nm +ZNACI(:) = 0. +ZNTOTI(:) = 10. ! must vary between 1 and 200 molecules +ZKINTRI(:) = 0. +ZIPR(:) = 20. +GKINETICI = .FALSE. ! Logical: if kinetic ion-induced nucleation (FALSE by default) +ZCSI(:) = 1.0/480. ! Inverse lifetime of ions +! +! a. Air molecule concentration calculation +! +ZAIRN(:) = 6.023E23 * 1.013E5 / 8.31 / PTEMP(:) / 1.E6 ! Air molecule concentration in (cm-3) +! +! b. Sulfuric acid concentration definition: ZSULF from ug/m3 to molec/cm3 +! +ZSULF(:) = PSULF(:)*(XAVOGADRO*1.E-12) / XH2SO4 +! +! c. Restrictions for parametrization +! +ITEST = 0. +! +DO II = 1, SIZE(PSULF,1) + IF ((PRH(II) > 1E-5).AND.(PTEMP(II)>195.).AND.(ZSULF(II)>1E4)) THEN + ITEST = ITEST+1 + END IF +END DO +! +IF (NVERB .GE. 10) WRITE(*,*) '~~ CH_AER_MAATT_ION (deb): ZSULF',MINVAL(ZSULF(:)), MAXVAL(ZSULF(:)) +IF (NVERB .GE. 10) WRITE(*,*) '~~ CH_AER_MAATT_ION (deb): PSULF',MINVAL(PSULF(:)), MAXVAL(PSULF(:)) + +! + +DO II = 1, SIZE(PSULF,1) + ! + IF ((PRH(II) > 1E-5).AND.(PTEMP(II)>195.).AND.(ZSULF(II)>1E4)) THEN + ! + ! 1. Mole fraction of H2SO4 in the critical cluster (eq 1): composition + ! + ZAL(II) = 7.9036365428891719E-1-2.8414059650092153E-3*PTEMP(II)+& + 1.4976802556584141E-2*LOG(PRH(II))-2.4511581740839115E-4*PTEMP(II)*LOG(PRH(II))+& + 3.4319869471066424E-3*(LOG(PRH(II)))**2-2.8799393617748428E-5*PTEMP(II)*(LOG(PRH(II)))**2+& + 3.0174314126331765E-4*(LOG(PRH(II)))**3-2.2673492408841294E-6*PTEMP(II)*(LOG(PRH(II)))**3-& + 4.3948464567032377E-3*LOG(ZSULF(II))+5.3305314722492146E-5*PTEMP(II)*LOG(ZSULF(II)) + ! + IF (ZIPR(II).GT.0.0) THEN ! if the ion production rate is above zero + ! + ! Calculate the ion induced nucleation rate wrt. concentration of 1 ion/cm3 + ! + ZKINTRI(II) = 5.3742280876674478e1 - & + & 6.6837931590012266e-3 *log(PRH(II))**(-2) & + & - 1.0142598385422842e-01 * log(PRH(II))**(-1) - & + & 6.4170597272606873e+00 * log(PRH(II)) & + & - 6.4315798914824518e-01 * log(PRH(II))**2 - & + & 2.4428391714772721e-02 * log(PRH(II))**3 & + & - 3.5356658734539019e-04 * log(PRH(II))**4 + & + & 2.5400015099140506e-05 * PTEMP(II) * log(PRH(II))**(-2) & + & - 2.7928900816637790e-04 * PTEMP(II) * log(PRH(II))**(-1) + & + & 4.4108573484923690e-02 * PTEMP(II) * log(PRH(II)) & + & + 6.3943789012475532e-03 * PTEMP(II) * log(PRH(II))**(2) + & + & 2.3164296174966580e-04 * PTEMP(II) * log(PRH(II))**(3) & + & + 3.0372070669934950e-06 * PTEMP(II) * log(PRH(II))**4 + & + & 3.8255873977423475e-06 * PTEMP(II)**2 * log(PRH(II))**(-1) & + & - 1.2344793083561629e-04 * PTEMP(II)**2 * log(PRH(II)) - & + & 1.7959048869810192e-05 * PTEMP(II)**2 * log(PRH(II))**(2) & + & - 3.2165622558722767e-07 * PTEMP(II)**2 * log(PRH(II))**3 - & + & 4.7136923780988659e-09 * PTEMP(II)**3 * log(PRH(II))**(-1) & + & + 1.1873317184482216e-07 * PTEMP(II)**3 * log(PRH(II)) + & + & 1.5685860354866621e-08 * PTEMP(II)**3 * log(PRH(II))**2 & + & - 1.4329645891059557e+04 * PTEMP(II)**(-1) + & + & 1.3842599842575321e-01 * PTEMP(II) & + & - 4.1376265912842938e-04 * PTEMP(II)**(2) + & + & 3.9147639775826004e-07 * PTEMP(II)**3 + ! + ZKINTRI(II)=exp(ZKINTRI(II)) !1/cm3 + ! + IF( ZKINTRI(II).LT.ZSULF(II)) GKINETICI=.TRUE. + ! + IF (GKINETICI) THEN + ! + ! + PJNUCI(II) = 1.0E6 * (0.3E-9 + 0.487E-9)**2. * sqrt(8. * 3.141593*1.38E-23 * & + & (1. / (1.661e-27 * 98.07)+1. / (1.661e-27*98.07))) * & + & sqrt(PTEMP(II))*ZSULF(II) !1/cm3s + ! + ZNTOTI(II) = 1. !set to 1 + ! + ZNACI(II) = 1. + ! + ZAL(II) = ZNACI(II) / ZNTOTI(II) ! so also set this to 1 + ! + PRCI(II) = 0.487E-9 + ! + ELSE + ! + PJNUCI(II) = 3.0108954259038608e+01 + PTEMP(II) * & + 6.1176722090512577e+01 + PTEMP(II)**2 * & + 8.7240333618891663e-01 + PTEMP(II)**3* & + (-4.6191788649375719e-03) + PTEMP(II)**(-1) * & + 8.3537059107024481e-01 + PJNUCI(II) = PJNUCI(II) + & + (1.5028549216690628e+01 + PTEMP(II) * & + (-1.9310989753720623e-01) + PTEMP(II)**2 * & + 8.0155514634860480e-04 + PTEMP(II)**3 * & + (-1.0832730707799128e-06) + PTEMP(II)**(-1) * & + 1.7577660457989019) * (LOG(PRH(II))**(-2)) + PJNUCI(II) = PJNUCI(II) + & + (-2.0487870170216488e-01 + PTEMP(II) * & + 1.3263949252910405e-03 + PTEMP(II)**2 * & + (-8.4195688402450274e-06) + PTEMP(II)**3 * & + 1.6154895940993287e-08 + PTEMP(II)**(-1) * & + 3.8734212545203874e+01) * (LOG(PRH(II))**(-2) * LOG(ZSULF(II))) + PJNUCI(II) = PJNUCI(II) + & + (1.4955918863858371 + PTEMP(II) * & + 9.2290004245522454e+01 + PTEMP(II)**2 * & + (-8.9006965195392618e-01) + PTEMP(II)**3 * & + 2.2319123411013099e-03 + PTEMP(II)**(-1) * & + 4.0180079996840852e-03) * (LOG(PRH(II))**(-1) * LOG(ZSULF(II))**(-1)) + PJNUCI(II) = PJNUCI(II) + & + (7.9018031228561085 + PTEMP(II) * & + (-1.1649433968658949e+01) + PTEMP(II)**2 * & + 1.1400827854910951e-01 + PTEMP(II)**3 * & + (-3.1941526492127755e-04) + PTEMP(II)**(-1) * & + (-3.7662115740271446e-01)) * (LOG(PRH(II))**(-1)) + PJNUCI(II) = PJNUCI(II) + & + (1.5725237111225979e+02 + PTEMP(II) * & + (-1.0051649979836277) + PTEMP(II)**2 * & + 1.1866484014507624e-03 + PTEMP(II)**3 * & + 7.3557614998540389e-06 + PTEMP(II)**(-1) * & + 2.6270197023115189) * (LOG(PRH(II))**(-1) * LOG(ZSULF(II))) + PJNUCI(II) = PJNUCI(II) + & + (-1.6973840122470968e+01 + PTEMP(II) * & + 1.1258423691432135e-01 + PTEMP(II)**2 * & + (-2.9850139351463793e-04) + PTEMP(II)**3 * & + 1.4301286324827064e-07 + PTEMP(II)**(-1) * & + 1.3163389235253725e+01) * (LOG(PRH(II))**(-1) * LOG(ZSULF(II))**2) + PJNUCI(II) = PJNUCI(II) + & + (-1.0399591631839757 + PTEMP(II) * & + 2.7022055588257691e-03 + PTEMP(II)**2 * & + (-2.1507467231330936e-06) + PTEMP(II)**3 * & + 3.8059489037584171e-10 + PTEMP(II)**(-1) * & + 1.5000492788553410e+02) * (LOG(PRH(II))**(-1) * LOG(ZSULF(II))**3) + PJNUCI(II) = PJNUCI(II) + & + (1.2250990965305315 + PTEMP(II) * & + 3.0495946490079444e+01 + PTEMP(II)**2 * & + 2.1051563135187106e+01 + PTEMP(II)**3 * & + (-8.2200682916580878e-02) + PTEMP(II)**(-1) * & + 2.9965871386685029e-02) * (LOG(ZSULF(II))**(-2)) + PJNUCI(II) = PJNUCI(II) + & + (4.8281605955680433 + PTEMP(II) * & + 1.7346551710836445e+02 + PTEMP(II)**2 * & + (-1.0113602140796010e+01) + PTEMP(II)**3 * & + 3.7482518458685089e-02 + PTEMP(II)**(-1) * & + (-1.4449998158558205e-01)) * (LOG(ZSULF(II))**(-1)) + PJNUCI(II) = PJNUCI(II) + & + (2.3399230964451237e+02 + PTEMP(II) * & + (-2.3099267235261948e+01) + PTEMP(II)**2 * & + 8.0122962140916354e-02 + PTEMP(II)**3 * & + 6.1542576994557088e-05 + PTEMP(II)**(-1) * & + 5.3718413254843007) * (LOG(ZSULF(II))) + PJNUCI(II) = PJNUCI(II) + & + (1.0299715519499360e+02 + PTEMP(II) * & + (-6.4663357203364136e-02) + PTEMP(II)**2 * & + (-2.0487150565050316e-03) + PTEMP(II)**3 * & + 8.7935289055530897e-07 + PTEMP(II)**(-1) * & + 3.6013204601215229e+01) * (LOG(ZSULF(II))**2) + PJNUCI(II) = PJNUCI(II) + & + (-3.5452115439584042 + PTEMP(II) * & + 1.7083445731159330e-02 + PTEMP(II)**2 * & + (-1.2552625290862626e-05) + PTEMP(II)**3 * & + 1.2968447449182847e-09 + PTEMP(II)**(-1) * & + 1.5748687512056560e+02) * (LOG(ZSULF(II))**3) + PJNUCI(II) = PJNUCI(II) + & + (2.2338490119517975 + PTEMP(II) * & + 1.0229410216045540e+02 + PTEMP(II)**2 * & + (-3.2103611955174052) + PTEMP(II)**3 * & + 1.3397152304977591e-02 + PTEMP(II)**(-1) * & + (-2.4155187776460030e-02)) * (LOG(PRH(II))* LOG(ZSULF(II))**(-2)) + PJNUCI(II) = PJNUCI(II) + & + (3.7592282990713963 + PTEMP(II) * & + (-1.5257988769009816e+02) + PTEMP(II)**2 * & + 2.6113805420558802 + PTEMP(II)**3 * & + (-9.0380721653694363e-03) + PTEMP(II)**(-1) * & + (-1.3974197138171082e-01)) * (LOG(PRH(II))* LOG(ZSULF(II))**(-1)) + PJNUCI(II) = PJNUCI(II) + & + (1.8293600730573988e+01 + PTEMP(II) * & + 1.8344728606002992e+01 + PTEMP(II)**2 * & + (-4.0063363221106751e-01) + PTEMP(II)**3 * & + 1.4842749371258522e-03 + PTEMP(II)**(-1) * & + 1.1848846003282287) * (LOG(PRH(II))) + PJNUCI(II) = PJNUCI(II) + & + (-1.7634531623032314e+02 + PTEMP(II) * & + 4.9011762441271278 + PTEMP(II)**2 * & + (-1.3195821562746339e-02) + PTEMP(II)**3 * & + (-2.8668619526430859e-05) + PTEMP(II)**(-1) * & + (-2.9823396976393551e-01)) * (LOG(PRH(II))* LOG(ZSULF(II))) + PJNUCI(II) = PJNUCI(II) + & + (-3.2944043694275727e+01 + PTEMP(II) * & + 1.2517571921051887e-01 + PTEMP(II)**2 * & + 8.3239769771186714e-05 + PTEMP(II)**3 * & + 2.8191859341519507e-07 + PTEMP(II)**(-1) * & + (-2.7352880736682319e+01)) * (LOG(PRH(II))* LOG(ZSULF(II))**2) + PJNUCI(II) = PJNUCI(II) + & + (-1.1451811137553243 + PTEMP(II) * & + 2.0625997485732494e-03 + PTEMP(II)**2 * & + (-3.4225389469233624e-06) + PTEMP(II)**3 * & + 4.4437613496984567e-10 + PTEMP(II)**(-1) * & + 1.8666644332606754e+02) * (LOG(PRH(II))* LOG(ZSULF(II))**3) + PJNUCI(II) = PJNUCI(II) + & + (3.2270897099493567e+01 + PTEMP(II) * & + 7.7898447327513687e-01 + PTEMP(II)**2 * & + (-6.5662738484679626e-03) + PTEMP(II)**3 * & + 3.7899330796456790e-06 + PTEMP(II)**(-1) * & + 7.1106427501756542e-01) * (LOG(PRH(II))**2 * LOG(ZSULF(II))**(-1)) + PJNUCI(II) = PJNUCI(II) + & + (-2.8901906781697811e+01 + PTEMP(II) * & + (-1.5356398793054860) + PTEMP(II)**2 * & + 1.9267271774384788e-02 + PTEMP(II)**3 * & + (-5.3886270475516162e-05) + PTEMP(II)**(-1) * & + 5.0490415975693426e-01) * (LOG(PRH(II))**2) + PJNUCI(II) = PJNUCI(II) + & + (3.3365683645733924e+01 + PTEMP(II) * & + (-3.6114561564894537e-01) + PTEMP(II)**2 * & + 9.2977354471929262e-04 + PTEMP(II)**3 * & + 1.9549769069511355e-07 + PTEMP(II)**(-1) * & + (-8.8865930095112855)) * (LOG(PRH(II))**2 * LOG(ZSULF(II))) + PJNUCI(II) = PJNUCI(II) + & + (2.4592563042806375 + PTEMP(II) * & + (-8.3227071743101084e-03) + PTEMP(II)**2 * & + 8.2563338043447783e-06 + PTEMP(II)**3 * & + (-8.4374976698593496e-09) + PTEMP(II)**(-1) * & + (-2.0938173949893473e+02)) * (LOG(PRH(II))**2 * LOG(ZSULF(II))**2) + PJNUCI(II) = PJNUCI(II) + & + (4.4099823444352317e+01 + PTEMP(II) * & + 2.5915665826835252 + PTEMP(II)**2 * & + (-1.6449091819482634e-02) + PTEMP(II)**3 * & + 2.6797249816144721e-05 + PTEMP(II)**(-1) * & + 5.5045672663909995e-01) * PRH(II) + ! + PJNUCI(II) = EXP(PJNUCI(II)) + ! + ZNTOTI(II) = (-4.8324296064013375e+04 + PTEMP(II) * & + 5.0469120697428906e+02 + PTEMP(II)**2 * & + (-1.1528940488496042e+00) + PTEMP(II)**(-1) * & + (-8.6892744676239192e+02) + (PTEMP(II)**(3)) * & + 4.0030302028120469e-04) + ZNTOTI(II) = ZNTOTI(II) + & + (-6.7259105232039847e+03 + PTEMP(II) * & + 1.9197488157452008e+02 + PTEMP(II)**2 * & + (-1.3602976930126354e+00) + PTEMP(II)**(-1) * & + (-1.1212637938360332e+02) + (PTEMP(II)**(3)) * & + 2.8515597265933207e-03) * LOG(PRH(II))**(-2) * LOG(ZSULF(II))**(-2) + ZNTOTI(II) = ZNTOTI(II) + & + (2.6216455217763342e+02 + PTEMP(II) * & + (-2.3687553252750821e+00) + PTEMP(II)**2 * & + 7.4074554767517521e-03 + PTEMP(II)**(-1) * & + (-1.9213956820114927e+03) + (PTEMP(II)**(3)) * & + (-9.3839114856129453e-06)) * LOG(PRH(II))**(-2) + ZNTOTI(II) = ZNTOTI(II) + & + (3.9652478944137344e+00 + PTEMP(II) * & + 1.2469375098256536e-02 + PTEMP(II)**2 * & + (-9.9837754694045633e-05) + PTEMP(II)**(-1) * & + (-5.1919499210175138e+02) + (PTEMP(II)**(3)) * & + 1.6489001324583862e-07) * LOG(PRH(II))**(-2) * LOG(ZSULF(II)) + ZNTOTI(II) = ZNTOTI(II) + & + (2.4975714429096206e+02 + PTEMP(II) * & + 1.7107594562445172e+02 + PTEMP(II)**2 * & + (-7.8988711365135289e-01) + PTEMP(II)**(-1) * & + (-2.2243599782483177e+01) + (PTEMP(II)**(3)) * & + (-1.6291523004095427e-04)) * LOG(PRH(II))**(-1) * LOG(ZSULF(II))**(-2) + ZNTOTI(II) = ZNTOTI(II) + & + (-8.9270715592533611e+02 + PTEMP(II) * & + 1.2053538883338946e+02 + PTEMP(II)**2 * & + (-1.5490408828541018e+00) + PTEMP(II)**(-1) * & + (-1.1243275579419826e+01) + (PTEMP(II)**(3)) * & + 4.8053105606904655e-03) * LOG(PRH(II))**(-1) * LOG(ZSULF(II))**(-1) + ZNTOTI(II) = ZNTOTI(II) + & + (7.6426441642091631e+03 + PTEMP(II) * & + (-7.1785462414656578e+01) + PTEMP(II)**2 * & + 2.3851864923199523e-01 + PTEMP(II)**(-1) * & + 8.5591775688708395e+01 + (PTEMP(II)**(3)) * & + (-3.7000473243342858e-04)) * LOG(PRH(II))**(-1) + ZNTOTI(II) = ZNTOTI(II) + & + (-5.1516826398607911e+01 + PTEMP(II) * & + 9.1385720811460558e-01 + PTEMP(II)**2 * & + (-3.5477100262158974e-03) + PTEMP(II)**(-1) * & + 2.7545544507625586e+03 + (PTEMP(II)**(3)) * & + 5.4708262093640928e-06) * LOG(PRH(II))**(-1) * LOG(ZSULF(II)) + ZNTOTI(II) = ZNTOTI(II) + & + (-3.0386767129196176e+02 + PTEMP(II) * & + (-1.1033438883583569e+04) + PTEMP(II)**2 * & + 8.1296859732896067e+01 + PTEMP(II)**(-1) * & + 1.2625883141097162e+01 + (PTEMP(II)**(3)) * & + (-1.2728497822219101e-01)) * LOG(ZSULF(II))**(-2) + ZNTOTI(II) = ZNTOTI(II) + & + (-3.3763494256461472e+03 + PTEMP(II) * & + 3.1916579136391006e+03 + PTEMP(II)**2 * & + (-2.7234339474441143e+01) + PTEMP(II)**(-1) * & + (-2.1897653262707397e+01) + (PTEMP(II)**(3)) * & + 5.1788505812259071e-02) * LOG(ZSULF(II))**(-1) + ZNTOTI(II) = ZNTOTI(II) + & + (-1.8817843873687068e+03 + PTEMP(II) * & + 4.3038072285882070e+00 + PTEMP(II)**2 * & + 6.6244087689671860e-03 + PTEMP(II)**(-1) * & + (-2.7133073605696295e+03) + (PTEMP(II)**(3)) * & + (-1.7951557394285043e-05)) * LOG(ZSULF(II)) + ZNTOTI(II) = ZNTOTI(II) + & + (-1.7668827539244447e+02 + PTEMP(II) * & + 4.8160932330629913e-01 + PTEMP(II)**2 * & + (-6.3133007671100293e-04) + PTEMP(II)**(-1) * & + 2.5631774669873157e+04 + (PTEMP(II)**(3)) * & + 4.1534484127873519e-07) * LOG(ZSULF(II))**(2) + ZNTOTI(II) = ZNTOTI(II) + & + (-1.6661835889222382e+03 + PTEMP(II) * & + 1.3708900504682877e+03 + PTEMP(II)**2 * & + (-1.7919060052198969e+01) + PTEMP(II)**(-1) * & + (-3.5145029804436405e+01) + (PTEMP(II)**(3)) * & + 5.1047240947371224e-02) * LOG(PRH(II))* LOG(ZSULF(II))**(-2) + ZNTOTI(II) = ZNTOTI(II) + & + (1.0843549363030939e+04 + PTEMP(II) * & + (-7.3557073636139577e+01) + PTEMP(II)**2 * & + 1.2054625131778862e+00 + PTEMP(II)**(-1) * & + 1.9358737917864391e+02 + (PTEMP(II)**(3)) * & + (-4.2871620775911338e-03)) * LOG(PRH(II))* LOG(ZSULF(II))**(-1) + ZNTOTI(II) = ZNTOTI(II) + & + (-2.4269802549752835e+03 + PTEMP(II) * & + 1.1348265061941714e+01 + PTEMP(II)**2 * & + (-5.0430423939495157e-02) + PTEMP(II)**(-1) * & + 2.3709874548950634e+03 + (PTEMP(II)**(3)) * & + 1.4091851828620244e-04) * LOG(PRH(II)) + ZNTOTI(II) = ZNTOTI(II) + & + (5.2745372575251588e+02 + PTEMP(II) * & + (-2.6080675912627314e+00) + PTEMP(II)**2 * & + 5.6902218056670145e-03 + PTEMP(II)**(-1) * & + (-3.2149319482897838e+04) + (PTEMP(II)**(3)) * & + (-5.4121996056745853e-06)) * LOG(PRH(II))* LOG(ZSULF(II)) + ZNTOTI(II) = ZNTOTI(II) + & + (-1.6401959518360403e+01 + PTEMP(II) * & + 2.4322962162439640e-01 + PTEMP(II)**2 * & + 1.1744366627725344e-03 + PTEMP(II)**(-1) * & + (-8.2694427518413195e+03) + (PTEMP(II)**(3)) * & + (-5.0028379203873102e-06)) * LOG(PRH(II))**(2) + ZNTOTI(II) = ZNTOTI(II) + & + (-2.7556572017167782e+03 + PTEMP(II) * & + 4.9293344495058264e+01 + PTEMP(II)**2 * & + (-2.6503456520676050e-01) + PTEMP(II)**(-1) * & + 1.2130698030982167e+03 + (PTEMP(II)**(3)) * & + 4.3530610668042957e-04) * LOG(PRH(II))**2 * LOG(ZSULF(II))**(-1) + ZNTOTI(II) = ZNTOTI(II) + & + (-6.3419182228959192e+00 + PTEMP(II) * & + 4.0636212834605827e-02 + PTEMP(II)**2 * & + (-1.0450112687842742e-04) + PTEMP(II)**(-1) * & + 3.1035882189759656e+02 +(PTEMP(II)**(3)) * & + 9.4328418657873500e-08) * LOG(PRH(II))**(-3) + ZNTOTI(II) = ZNTOTI(II) + & + (3.0189213304689042e+03 + PTEMP(II) * & + (-2.3804654203861684e+01) + PTEMP(II)**2 * & + 6.8113013411972942e-02 + PTEMP(II)**(-1) * & + 6.3112071081188913e+02 + (PTEMP(II)**(3)) * & + (-9.4460854261685723e-05)) * (PRH(II)) * LOG(ZSULF(II)) + ZNTOTI(II) = ZNTOTI(II) + & + (1.1924791930673702e+04 + PTEMP(II) * & + (-1.1973824959206000e+02) + PTEMP(II)**2 * & + 1.6888713097971020e-01 + PTEMP(II)**(-1) * & + 1.8735938211539585e+02 + (PTEMP(II)**(3)) * & + 5.0974564680442852e-04) * (PRH(II)) + ZNTOTI(II) = ZNTOTI(II) + & + (3.6409071302482083e+01 + PTEMP(II) * & + 1.7919859306449623e-01 + PTEMP(II)**2 * & + (-1.0020116255895206e-03) + PTEMP(II)**(-1) * & + (-8.3521083354432303e+03) + (PTEMP(II)**(3)) * & + 1.5879900546795635e-06) * PRH(II) * LOG(ZSULF(II))**(2) + ! + ZNTOTI(II) = abs(ZNTOTI(II)) + ! + PRCI(II) = (-3.6318550637865524e-08 + PTEMP(II) * & + 2.1740704135789128e-09 + PTEMP(II)**2 * & + (-8.5521429066506161e-12) + PTEMP(II)**3 * & + (-9.3538647454573390e-15)) + PRCI(II) = PRCI(II) + & + (2.1366936839394922e-08 + PTEMP(II) * & + (-2.4087168827395623e-10) + PTEMP(II)**2 * & + 8.7969869277074319e-13 + PTEMP(II)**3 * & + (-1.0294466881303291e-15)) * LOG(PRH(II))**(-2) * LOG(ZSULF(II))**(-1) + PRCI(II) = PRCI(II) + & + (-7.7804007761164303e-10 + PTEMP(II) * & + 1.0327058173517932e-11 + PTEMP(II)**2 * & + (-4.2557697639692428e-14) + PTEMP(II)**3 * & + 5.4082507061618662e-17) * LOG(PRH(II))**(-2) + PRCI(II) = PRCI(II) + & + (3.2628927397420860e-12 + PTEMP(II) * & + (-7.6475692919751066e-14) + PTEMP(II)**2 * & + 4.1985816845259788e-16 + PTEMP(II)**3 * & + (-6.2281395889592719e-19)) * LOG(PRH(II))**(-2) * LOG(ZSULF(II)) + PRCI(II) = PRCI(II) + & + (2.0442205540818555e-09 + PTEMP(II) * & + 4.0441858911249830e-08 + PTEMP(II)**2 * & + (-3.3423487629482825e-10) + PTEMP(II)**3 * & + 6.8000404742985678e-13) * LOG(PRH(II))**(-1) * LOG(ZSULF(II))**(-2) + PRCI(II) = PRCI(II) + & + (1.8381489183824627e-08 + PTEMP(II) * & + (-8.9853322951518919e-09) + PTEMP(II)**2 * & + 7.5888799566036185e-11 + PTEMP(II)**3 * & + (-1.5823457864755549e-13)) * LOG(PRH(II))**(-1) * LOG(ZSULF(II))**(-1) + PRCI(II) = PRCI(II) + & + (1.1795760639695057e-07 + PTEMP(II) * & + (-8.1046722896375875e-10) + PTEMP(II)**2 * & + 9.1868604369041857e-14 + PTEMP(II)**3 * & + 4.7882428237444610e-15) * LOG(PRH(II))**(-1) + PRCI(II) = PRCI(II) + & + (-4.4028846582545952e-09 + PTEMP(II) * & + 4.6541269232626618e-11 + PTEMP(II)**2 * & + (-1.1939929984285194e-13) + PTEMP(II)**3 * & + 2.3602037016614437e-17) * LOG(PRH(II))**(-1) * LOG(ZSULF(II)) + PRCI(II) = PRCI(II) + & + (2.7885056884209128e-11 + PTEMP(II) * & + (-4.5167129624119121e-13) + PTEMP(II)**2 * & + 1.6558404997394422e-15 + PTEMP(II)**3 * & + (-1.2037336621218054e-18)) * LOG(PRH(II))**(-1) * LOG(ZSULF(II))**2 + PRCI(II) = PRCI(II) + & + (-2.3719627171699983e-09 + PTEMP(II) * & + (-1.5260127909292053e-07) + PTEMP(II)**2 * & + 1.7177017944754134e-09 + PTEMP(II)**3 * & + (-4.7031737537526395e-12)) * LOG(ZSULF(II))**(-2) + PRCI(II) = PRCI(II) + & + (-5.6946433724699646e-09 + PTEMP(II) * & + 8.4629788237081735e-09 + PTEMP(II)**2 * & + (-1.7674135187061521e-10) + PTEMP(II)**3 * & + 6.6236547903091862e-13) * LOG(ZSULF(II))**(-1) + PRCI(II) = PRCI(II) + & + (-2.2808617930606012e-08 + PTEMP(II) * & + 1.4773376696847775e-10 + PTEMP(II)**2 * & + (-1.3076953119957355e-13) + PTEMP(II)**3 * & + 2.3625301497914000e-16) * LOG(ZSULF(II)) + PRCI(II) = PRCI(II) + & + (1.4014269939947841e-10 + PTEMP(II) * & + (-2.3675117757377632e-12) + PTEMP(II)**2 * & + 5.1514033966707879e-15 + PTEMP(II)**3 * & + (-4.8864233454747856e-18)) * LOG(ZSULF(II))**2 + PRCI(II) = PRCI(II) + & + (6.5464943868885886e-11 + PTEMP(II) * & + 1.6494354816942769e-08 + PTEMP(II)**2 * & + (-1.7480097393483653e-10) + PTEMP(II)**3 * & + 4.7460075628523984e-13) * LOG(PRH(II))* LOG(ZSULF(II))**(-2) + PRCI(II) = PRCI(II) + & + (8.4737893183927871e-09 + PTEMP(II) * & + (-6.0243327445597118e-09) + PTEMP(II)**2 * & + 5.8766070529814883e-11 + PTEMP(II)**3 * & + (-1.4926748560042018e-13)) * LOG(PRH(II))* LOG(ZSULF(II))**(-1) + PRCI(II) = PRCI(II) + & + (1.0761964135701397e-07 + PTEMP(II) * & + (-1.0142496009071148e-09) + PTEMP(II)**2 * & + 2.1337312466519190e-12 + PTEMP(II)**3 * & + 1.6376014957685404e-15) * LOG(PRH(II)) + PRCI(II) = PRCI(II) + & + (-3.5621571395968670e-09 + PTEMP(II) * & + 4.1175339587760905e-11 + PTEMP(II)**2 * & + (-1.3535372357998504e-13) + PTEMP(II)**3 * & + 8.9334219536920720e-17) * LOG(PRH(II))* LOG(ZSULF(II)) + PRCI(II) = PRCI(II) + & + (2.0700482083136289e-11 + PTEMP(II) * & + (-3.9238944562717421e-13) + PTEMP(II)**2 * & + 1.5850961422040196e-15 + PTEMP(II)**3 * & + (-1.5336775610911665e-18)) * LOG(PRH(II))* LOG(ZSULF(II))**2 + PRCI(II) = PRCI(II) + & + (1.8524255464416206e-09 + PTEMP(II) * & + (-2.1959816152743264e-11) + PTEMP(II)**2 * & + (-6.4478119501677012e-14) + PTEMP(II)**3 * & + 5.5135243833766056e-16)* LOG(PRH(II))**2 * LOG(ZSULF(II))**(-1) + PRCI(II) = PRCI(II) + & + (1.9349488650922679e-09 + PTEMP(II) * & + (-2.2647295919976428e-11) + PTEMP(II)**2 * & + 9.2917479748268751e-14 + PTEMP(II)**3 * & + (-1.2741959892173170e-16))* LOG(PRH(II))**2 + PRCI(II) = PRCI(II) + & + (2.1484978031650972e-11 + PTEMP(II) * & + (-9.3976642475838013e-14) + PTEMP(II)**2 * & + (-4.8892738002751923e-16) + PTEMP(II)**3 * & + 1.4676120441783832e-18)* LOG(PRH(II))**2 * LOG(ZSULF(II)) + PRCI(II) = PRCI(II) + & + (6.7565715216420310e-13 + PTEMP(II) * & + (-3.5421162549480807e-15) + PTEMP(II)**2 * & + (-3.4201196868693569e-18) + PTEMP(II)**3 * & + 2.2260187650412392e-20)* LOG(PRH(II))**3 * LOG(ZSULF(II)) + ! + ZNACI(II) = ZAL(II) * ZNTOTI(II) + ! + IF (ZNACI(II) .LT. 1.) THEN + ! + ! + ZNACI(II)=1.0 + ! + END IF + ! + END IF + ! + ! Ion loss rate (1/s) + ! + ZXLOSS(II) = ZCSI(II) + PJNUCI(II) + ! + ! Recombination (here following Brasseur and Chatel, 1983) + ! + ZRECOMB(II) = 6.0e-8 * sqrt(300./PTEMP(II)) + & + 6.0e-26 * ZAIRN(II) * (300./PTEMP(II))**4 + ! + ! Small ion concentration in air (1/cm3) (following Dunne et al., 2016) + ! max function is to avoid n_i to go practically zero at very high J_ion + ! + ZNIPAIR(II) = max(0.01,(sqrt(ZXLOSS(II)**2.0 + & + 4.0 * ZRECOMB(II) * ZIPR(II)) - ZXLOSS(II)) / (2.0 * ZRECOMB(II))) + ! + ! Ion-induced nucleation rate + ! Min function is to ensure that max function above does not cause J_ion to overshoot + ! + PJNUCI(II) = min(ZIPR(II),ZNIPAIR(II)*PJNUCI(II)) + ! + IF (PJNUCI(II).LT.1.E-7) THEN + ! + PJNUCI(II) = 0.0 + ! + END IF + ! + END IF + ! + END IF + ! +END DO +! +! +IF (NVERB .GE. 10) WRITE(*,*) '~~ CH_AER_MAATT_ION (fin): PRH =',MINVAL(PRH), MAXVAL(PRH) +IF (NVERB .GE. 10) WRITE(*,*) '~~ CH_AER_MAATT_ION (fin): PTEMP =',MINVAL(PTEMP), MAXVAL(PTEMP) +IF (NVERB .GE. 10) WRITE(*,*) '~~ CH_AER_MAATT_ION (fin): ZSULF =',MINVAL(ZSULF), MAXVAL(ZSULF) +IF (NVERB .GE. 10) WRITE(*,*) '~~ CH_AER_MAATT_ION (fin): PJNUCI =',MINVAL(PJNUCI), MAXVAL(PJNUCI) +IF (NVERB .GE. 10) WRITE(*,*) '~~ CH_AER_MAATT_ION (fin): ZKINTRI =',MINVAL(ZKINTRI), MAXVAL(ZKINTRI) +IF (NVERB .GE. 10) WRITE(*,*) '~~ CH_AER_MAATT_ION (fin): ZAL =',MINVAL(ZAL), MAXVAL(ZAL) +IF (NVERB .GE. 10) WRITE(*,*) '~~ CH_AER_MAATT_ION (fin): ZNTOTI =',MINVAL(ZNTOTI), MAXVAL(ZNTOTI) +IF (NVERB .GE. 10) WRITE(*,*) '~~ CH_AER_MAATT_ION (fin): PRCI =',MINVAL(PRCI), MAXVAL(PRCI) +IF (NVERB .GE. 10) WRITE(*,*) '~~ CH_AER_MAATT_ION (fin): ZXLOSS =',MINVAL(ZXLOSS), MAXVAL(ZXLOSS) +IF (NVERB .GE. 10) WRITE(*,*) '~~ CH_AER_MAATT_ION (fin): ZRECOMB =',MINVAL(ZRECOMB), MAXVAL(ZRECOMB) +IF (NVERB .GE. 10) WRITE(*,*) '~~ CH_AER_MAATT_ION (fin): ZNIPAIR =',MINVAL(ZNIPAIR), MAXVAL(ZNIPAIR) +! +RETURN +! +END SUBROUTINE CH_AER_MAATTANEN_IONIND + diff --git a/src/MNH/ch_aer_maattanen_neutral.f90 b/src/MNH/ch_aer_maattanen_neutral.f90 new file mode 100644 index 0000000000000000000000000000000000000000..8a9c8b5d3ed298541696d6f7eca74e11fe77a0a9 --- /dev/null +++ b/src/MNH/ch_aer_maattanen_neutral.f90 @@ -0,0 +1,335 @@ +!ORILAM_LIC Copyright 1994-2014 CNRS, Meteo-France and Universite Paul Sabatier +!ORILAM_LIC This is part of the ORILAM software governed by the CeCILL-C licence +!ORILAM_LIC version 1. See LICENSE, CeCILL-C_V1-en.txt and CeCILL-C_V1-fr.txt +!ORILAM_LIC for details. +!----------------------------------------------------------------- +!--------------- special set of characters for RCS information +!----------------------------------------------------------------- +! $Source: /home/cvsroot/MNH-VX-Y-Z/src/MNH/ch_aer_nucl.f90,v $ $Revision: 1.1.4.1.18.1 $ +! MASDEV4_7 chimie 2006/05/18 13:07:25 +!----------------------------------------------------------------- +!! ################################ +MODULE MODI_CH_AER_MAATTANEN_NEUTRAL +!! ################################ +!! +INTERFACE + !! + SUBROUTINE CH_AER_MAATTANEN_NEUTRAL(PRH,PTEMP,PSULF,PJNUCN,PRCN) + IMPLICIT NONE + !! + REAL, DIMENSION(:), INTENT(IN) :: PRH,PTEMP,PSULF + REAL, DIMENSION(:), INTENT(INOUT) :: PJNUCN, PRCN + !! + !! + END SUBROUTINE CH_AER_MAATTANEN_NEUTRAL + !! +END INTERFACE +!! +END MODULE MODI_CH_AER_MAATTANEN_NEUTRAL +!! +!! ######################################################################### +SUBROUTINE CH_AER_MAATTANEN_NEUTRAL(PRH,PTEMP,PSULF,PJNUCN,PRCN) +!########################################################### +! +!! +!! PURPOSE +!! ------- +!! +!! Compute nucleation rate for binary H2SO4/H2O +!! This is the Määttänen parametrization (2018) +!! This is the neutral particle formation part +!! +!! Valid for : +!! 165 < T < 400 (K) +!! 0.001 < RH < 100 (%) +!! 10â´ < [H2SO4]gas < 10¹³ (molec/cm3) +!! +!! +!! AUTHOR +!! ------ +!! B. Foucart * LACy * +!! +!! MODIFICATIONS +!! ------------- +!! B. Foucart (18/06/2018) * LACy * +!! +!---------------------------------------------------------------------------- +! +!* 0. DECLARATIONS +! ------------ +! +USE MODD_CST, ONLY : XAVOGADRO +USE MODD_CONF, ONLY : NVERB +USE MODD_CH_AEROSOL +! +IMPLICIT NONE +! +!* 0.1 Declarations of dummy arguments : +! +REAL, DIMENSION(:), INTENT(IN) :: PRH, PTEMP, PSULF ! Relative humidity (%), Temp (kelvin) +REAL, DIMENSION(:), INTENT(INOUT) :: PJNUCN, PRCN ! Nucleation rate (#/cm3/s) , Critical cluster radius (nm) +! +!* 0.2 Declarations of local variables : +! +REAL, DIMENSION(SIZE(PSULF,1)) :: ZSULF ! Sulfuric acid concentration (molec/cm3) +REAL, DIMENSION(SIZE(PSULF,1)) :: ZAL ! Mole fraction of H2SO4 in the critical cluster +REAL, DIMENSION(SIZE(PSULF,1)) :: ZNTOTN ! Total number of molec in the neutral critical cluster +REAL, DIMENSION(SIZE(PSULF,1)) :: ZKINTRN ! Threshold sulfuric acid for neutral kinetic nucleation +REAL, DIMENSION(SIZE(PSULF,1)) :: ZNACN ! Sulfuric acid molecules in the neutral critical cluster +! +LOGICAL :: GKINETICN ! True if kinetic neutral nucleation +! +INTEGER :: II, ITEST ! Tests +! +IF (NVERB .GE. 10) WRITE(*,*) '~~ CH_AER_MAATT_NEUT (deb): PSULF =',MINVAL(PSULF), MAXVAL(PSULF) +IF (NVERB .GE. 10) WRITE(*,*) '~~ CH_AER_MAATT_NEUT (deb): (XAVOGADRO*1.E-12) =',(XAVOGADRO*1.E-12) +IF (NVERB .GE. 10) WRITE(*,*) '~~ CH_AER_MAATT_NEUT (deb): XH2SO4=', XH2SO4 +IF (NVERB .GE. 10) WRITE(*,*) '~~ CH_AER_MAATT_NEUT (deb): PTEMP =',MINVAL(PTEMP), MAXVAL(PTEMP) +IF (NVERB .GE. 10) WRITE(*,*) '~~ CH_AER_MAATT_NEUT (deb): PRH =',MINVAL(PRH), MAXVAL(PRH) +! +!---------------------------------------------------------------------------- +! +! Parameters initialization +! +ZAL(:) = 0.17 ! must vary between 0 and 1 +PJNUCN(:) = 1E-7 ! must vary between 10E-7 and 10E10 cm3.s-1 +PRCN(:) = 2.8E-10 ! (meters) must vary between 0.28 and 1.2 nm +ZNACN(:) = 0. +ZNTOTN(:) = 10. ! must vary between 1 and 200 molecules +ZKINTRN(:) = 0. +GKINETICN = .FALSE. +! +! a. Sulfuric acid concentration definition: ZSULF from ug/m3 to molec/cm3 +! +ZSULF(:) = PSULF(:)*(XAVOGADRO*1.E-12) / XH2SO4 +! +! b. Restrictions for parametrization +! +! +ITEST = 0. +! +DO II = 1, SIZE(PSULF,1) + IF ((PRH(II) > 0.001).AND.(PTEMP(II)>165.).AND.(ZSULF(II)>1E4)) THEN + ITEST = ITEST+1 + END IF +END DO +! +DO II = 1, SIZE(PSULF,1) + ! + IF ( (PRH(II)>0.001) .AND. (PTEMP(II)>165.) .AND. (ZSULF(II)>1E4) ) THEN + ! + ! 1. Mole fraction of H2SO4 in the critical cluster (eq 1): composition + ! + ZAL(II) = 7.9036365428891719E-1-2.8414059650092153E-3*PTEMP(II)+& + 1.4976802556584141E-2*LOG(PRH(II))-2.4511581740839115E-4*PTEMP(II)*LOG(PRH(II))+& + 3.4319869471066424E-3*(LOG(PRH(II)))**2-2.8799393617748428E-5*PTEMP(II)*(LOG(PRH(II)))**2+& + 3.0174314126331765E-4*(LOG(PRH(II)))**3-2.2673492408841294E-6*PTEMP(II)*(LOG(PRH(II)))**3-& + 4.3948464567032377E-3*LOG(ZSULF(II))+5.3305314722492146E-5*PTEMP(II)*LOG(ZSULF(II)) + ! + ! 2. Nucleation rate calculation in part.cm-3.s-1 (eq 2) + ! + ! a) Kinetic limit check + ! + IF (PRH(II) .GE. 1.e-2 .AND. PRH(II) .LE. 1.) THEN + ! + ZKINTRN(II) = exp(7.8920778706888086e+1 + 7.3665492897447082*PRH(II) - 1.2420166571163805e+4/PTEMP(II) & + & + (-6.1831234251470971e+2*PRH(II))/PTEMP(II) - 2.4501159970109945e-2*PTEMP(II) & + & -1.3463066443605762e-2*PRH(II)*PTEMP(II) + 8.3736373989909194e-06*PTEMP(II)**2 & + & -1.4673887785408892*Log(PRH(II)) + (-3.2141890006517094e+1*Log(PRH(II)))/PTEMP(II) & + & + 2.7137429081917556e-3*PTEMP(II)*Log(PRH(II))) !1/cm3 + ! + IF (ZKINTRN(II).LT.ZSULF(II)) GKINETICN = .TRUE. + ! + END IF + ! + IF (PRH(II) .GE. 1.e-4 .AND. PRH(II) .LT. 1.e-2) THEN + ! + ZKINTRN(II) = exp(7.9074383049843647e+1 - 2.8746005462158347e+1*PRH(II) - 1.2070272068458380e+4/PTEMP(II) & + & + (-5.9205040320056632e+3*PRH(II))/PTEMP(II) - 2.4800372593452726e-2*PTEMP(II) & + & -4.3983007681295948e-2*PRH(II)*PTEMP(II) + 2.5943854791342071e-5*PTEMP(II)**2 & + & -2.3141363245211317*Log(PRH(II)) + (9.9186787997857735e+1*Log(PRH(II)))/PTEMP(II) & + & + 5.6819382556144681e-3*PTEMP(II)*Log(PRH(II))) !1/cm3 + ! + IF (ZKINTRN(II).LT.ZSULF(II)) GKINETICN = .TRUE. + ! + END IF + ! + IF (PRH(II) .GE. 5.e-6 .AND. PRH(II) .LT. 1.e-4) THEN + ! + ZKINTRN(II) = exp(8.5599712000361677e+1 + 2.7335119660796581e+3*PRH(II) - 1.1842350246291651e+4/PTEMP(II) & + & + (-1.2439843468881438e+6*PRH(II))/PTEMP(II) - 5.4536964974944230e-2*PTEMP(II) & + & + 5.0886987425326087*PRH(II)*PTEMP(II) + 7.1964722655507067e-5*PTEMP(II)**2 & + & -2.4472627526306372*Log(PRH(II)) + (1.7561478001423779e+2*Log(PRH(II)))/PTEMP(II) & + & + 6.2640132818141811e-3*PTEMP(II)*Log(PRH(II))) !1/cm3 + ! + IF(ZKINTRN(II).LT.ZSULF(II)) GKINETICN = .TRUE. + ! + END IF + ! + IF (GKINETICN) THEN + ! + ! Nucleation rate calculation if dimer + ! + PJNUCN(II) = 1.E6*(2.*0.3E-9)**2.*sqrt(8.*3.141593*1.38E-23*(1./(1.661e-27*98.07)+1./(1.661e-27*98.07))) & + & /2.*sqrt(PTEMP(II))*ZSULF(II)**2. + ! + ZNTOTN(II) = 1. !set to 1 + ! + ZNACN(II) = 1. ! The critical cluster contains one molecule, but the produced cluster contains 2 molecules + ! + ZAL(II) = ZNACN(II) / ZNTOTN(II) ! so also set this to 1 + ! + PRCN(II) = 0.3E-9 + ! + ELSE + ! + ! c) Nucleation rate calculation if not dimer + ! + PJNUCN(II) = 2.1361182605986115e-1 + & + & 3.3827029855551838 * PTEMP(II) - & + & 3.2423555796175563e-2 * PTEMP(II)**2 + & + & 7.0120069477221989e-5 * PTEMP(II)**3 + & + & 8.0286874752695141 / ZAL(II) + & + & -2.6939840579762231e-1 * LOG(PRH(II)) + & + & 1.6079879299099518 * PTEMP(II) * LOG(PRH(II)) + & + & -1.9667486968141933e-2 * PTEMP(II)**2 * LOG(PRH(II)) + & + & 5.5244755979770844e-5 * PTEMP(II)**3 * LOG(PRH(II)) + & + & (7.8884704837892468 * LOG(PRH(II))) / ZAL(II) + & + & 4.6374659198909596 * LOG(PRH(II))**2 - & + & 8.2002809894792153e-2 * PTEMP(II) * LOG(PRH(II))**2 + & + & 8.5077424451172196e-4 * PTEMP(II)**2 * LOG(PRH(II))**2 + & + & -2.6518510168987462e-6 * PTEMP(II)**3 * LOG(PRH(II))**2 + & + & (-1.4625482500575278 * LOG(PRH(II))**2)/ZAL(II) - & + & 5.2413002989192037e-1 * LOG(PRH(II))**3 + & + & 5.2755117653715865e-3 * PTEMP(II) * LOG(PRH(II))**3 + & + & -2.9491061332113830e-6 * PTEMP(II)**2 * LOG(PRH(II))**3 + & + & -2.4815454194486752e-8 * PTEMP(II)**3 * LOG(PRH(II))**3 + & + & (-5.2663760117394626e-2 * LOG(PRH(II))**3) / ZAL(II) + & + & 1.6496664658266762 * LOG(ZSULF(II)) + & + & -8.0809397859218401e-1 * PTEMP(II) * LOG(ZSULF(II)) + & + & 8.9302927091946642e-3 * PTEMP(II)**2 * LOG(ZSULF(II)) + & + & -1.9583649496497497e-5 * PTEMP(II)**3 * LOG(ZSULF(II)) + & + & (-8.9505572676891685 * LOG(ZSULF(II))) / ZAL(II) + & + & -3.0025283601622881e+1 * LOG(PRH(II)) * LOG(ZSULF(II)) + & + & 3.0783365644763633e-1 * PTEMP(II) * LOG(PRH(II)) * LOG(ZSULF(II)) + & + & -7.4521756337984706e-4 * PTEMP(II)**2 * LOG(PRH(II)) * LOG(ZSULF(II)) + & + & -5.7651433870681853e-7 * PTEMP(II)**3 * LOG(PRH(II)) * LOG(ZSULF(II)) + & + & (1.2872868529673207 * LOG(PRH(II)) * LOG(ZSULF(II))) / ZAL(II) + & + & -6.1739867501526535e-1 * LOG(PRH(II))**2 * LOG(ZSULF(II)) + & + & 7.2347385705333975e-3 * PTEMP(II) * LOG(PRH(II))**2 * LOG(ZSULF(II)) + & + & -3.0640494530822439e-5 * PTEMP(II)**2 * LOG(PRH(II))**2 * LOG(ZSULF(II)) + & + & 6.5944609194346214e-8 * PTEMP(II)**3 * LOG(PRH(II))**2 * LOG(ZSULF(II)) + & + & (-2.8681650332461055e-2 * LOG(PRH(II))**2 * LOG(ZSULF(II))) / ZAL(II) + & + & 6.5213802375160306 * LOG(ZSULF(II))**2 + & + & -4.7907162004793016e-2 * PTEMP(II) * LOG(ZSULF(II))**2 + & + & -1.0727890114215117e-4 * PTEMP(II)**2 * LOG(ZSULF(II))**2 + & + & 5.6401818280534507e-7 * PTEMP(II)**3 * LOG(ZSULF(II))**2 + & + & (5.4113070888923009e-1 * LOG(ZSULF(II))**2) / ZAL(II) + & + & 5.2062808476476330e-1 * LOG(PRH(II)) * LOG(ZSULF(II))**2 + & + & -6.0696882500824584e-3 * PTEMP(II) * LOG(PRH(II)) * LOG(ZSULF(II))**2 + & + & 2.3851383302608477e-5 * PTEMP(II)**2 * LOG(PRH(II)) * LOG(ZSULF(II))**2 + & + & -1.5243837103067096e-8 * PTEMP(II)**3 * LOG(PRH(II)) * LOG(ZSULF(II))**2 + & + & (-5.6543192378015687e-2 * LOG(PRH(II)) * LOG(ZSULF(II))**2) / ZAL(II) + & + & -1.1630806410696815e-1 * LOG(ZSULF(II))**3 + & + & 1.3806404273119610e-3 * PTEMP(II) * LOG(ZSULF(II))**3 + & + & -2.0199865087650833e-6 * PTEMP(II)**2 * LOG(ZSULF(II))**3 + & + & -3.0200284885763192e-9 * PTEMP(II)**3 * LOG(ZSULF(II))**3 + & + & (-6.9425267104126316e-3 * LOG(ZSULF(II))**3) / ZAL(II) + ! + PJNUCN(II)=MIN(5.0E1,PJNUCN(II)) + PJNUCN(II)=EXP(PJNUCN(II)) + ! + ! 3. Molecules number in the cluster calculation + ! + ZNTOTN(II) = -3.5863435141979573e-3 - & + & 1.0098670235841110e-1*PTEMP(II) + & + & 8.9741268319259721e-4*PTEMP(II)**2 - & + & 1.4855098605195757e-6*PTEMP(II)**3 & + & - 1.2080330016937095e-1/ZAL(II) + & + & 1.1902674923928015e-3*LOG(PRH(II)) - & + & 1.9211358507172177e-2*PTEMP(II)*LOG(PRH(II)) + & + & 2.4648094311204255e-4*PTEMP(II)**2*LOG(PRH(II))- & + & 7.5641448594711666e-7*PTEMP(II)**3*LOG(PRH(II)) + & + & (-2.0668639384228818e-02*LOG(PRH(II)))/ZAL(II) - & + & 3.7593072011595188e-2*LOG(PRH(II))**2 + & + & 8.0993182774415718e-4*PTEMP(II)*LOG(PRH(II))**2 + & + & -9.5698412164297149e-6*PTEMP(II)**2*LOG(PRH(II))**2 + & + & 3.7163166416110421e-8*PTEMP(II)**3*LOG(PRH(II))**2 + & + & (1.1026579525210847e-2*LOG(PRH(II))**2)/ZAL(II) + & + & 1.1530844115561925e-2*LOG(PRH(II))**3 + & + & - 1.8083253906466668e-4*PTEMP(II)*LOG(PRH(II))**3 +& + & 8.0213604053330654e-7*PTEMP(II)**2*LOG(PRH(II))**3 + & + & -8.5797885383051337e-10*PTEMP(II)**3*LOG(PRH(II))**3 + & + & (1.0243693899717402e-3*LOG(PRH(II))**3)/ZAL(II) + & + & -1.7248695296299649e-2*LOG(ZSULF(II)) + & + & 1.1294004162437157e-2*PTEMP(II)*LOG(ZSULF(II)) + & + & -1.2283640163189278e-4*PTEMP(II)**2*LOG(ZSULF(II)) + & + & 2.7391732258259009e-7*PTEMP(II)**3*LOG(ZSULF(II)) + & + & (6.8505583974029602e-2*LOG(ZSULF(II)))/ZAL(II) + & + & 2.9750968179523635e-1*LOG(PRH(II))*LOG(ZSULF(II)) + & + & -3.6681154503992296e-3*PTEMP(II)*LOG(PRH(II))*LOG(ZSULF(II)) + & + & 1.0636473034653114e-5*PTEMP(II)**2*LOG(PRH(II))*LOG(ZSULF(II)) + & + & 5.8687098466515866e-9*PTEMP(II)**3*LOG(PRH(II))*LOG(ZSULF(II)) + & + & (-5.2028866094191509e-3*LOG(PRH(II))*LOG(ZSULF(II)))/ZAL(II) + & + & 7.6971988880587231e-4*LOG(PRH(II))**2*LOG(ZSULF(II)) - & + & 2.4605575820433763e-5*PTEMP(II)*LOG(PRH(II))**2*LOG(ZSULF(II)) + & + & 2.3818484400893008e-7*PTEMP(II)**2*LOG(PRH(II))**2*LOG(ZSULF(II)) + & + & -8.8474102392445200e-10*PTEMP(II)**3*LOG(PRH(II))**2*LOG(ZSULF(II)) + & + & (-1.6640566678168968e-4*LOG(PRH(II))**2*LOG(ZSULF(II)))/ZAL(II) - & + & 7.7390093776705471e-2*LOG(ZSULF(II))**2 + & + & 5.8220163188828482e-4*PTEMP(II)*LOG(ZSULF(II))**2 + & + & 1.2291679321523287e-6*PTEMP(II)**2*LOG(ZSULF(II))**2 + & + & -7.4690997508075749e-9*PTEMP(II)**3*LOG(ZSULF(II))**2 + & + & (-5.6357941220497648e-3*LOG(ZSULF(II))**2)/ZAL(II) + & + & -4.7170109625089768e-3*LOG(PRH(II))*LOG(ZSULF(II))**2 + & + & 6.9828868534370193e-5*PTEMP(II)*LOG(PRH(II))*LOG(ZSULF(II))**2 + & + & -3.1738912157036403e-7*PTEMP(II)**2*LOG(PRH(II))*LOG(ZSULF(II))**2 + & + & 2.3975538706787416e-10*PTEMP(II)**3*LOG(PRH(II))*LOG(ZSULF(II))**2 + & + & (4.2304213386288567e-4*LOG(PRH(II))*LOG(ZSULF(II))**2)/ZAL(II) + & + & 1.3696520973423231e-3*LOG(ZSULF(II))**3 + & + & -1.6863387574788199e-5*PTEMP(II)*LOG(ZSULF(II))**3 + & + & 2.7959499278844516e-8*PTEMP(II)**2*LOG(ZSULF(II))**3 + & + & 3.9423927013227455e-11*PTEMP(II)**3*LOG(ZSULF(II))**3 + & + & (8.6136359966337272e-5*LOG(ZSULF(II))**3)/ZAL(II) + ! + ZNTOTN(II)=EXP(ZNTOTN(II)) + ! + ! 4. Critical cluster size calculation (in meters) + ! + PRCN(II) = EXP(-22.378268374023630 + 0.44462953606125100 *ZAL(II) + 0.33499495707849131 * LOG(ZNTOTN(II))) + ! + ! 5. Acid molecules in nucleation regime + ! + ZNACN(II) = ZAL(II) * ZNTOTN(II) + ! + IF (ZNACN(II) .lt. 1.) THEN + ! + ! print *, 'Warning: number of acid molecules < 1 in nucleation regime, setting na_n=1' + ! + ZNACN(II)=1.0 + ! + END IF + ! + END IF + ! + ! 3. Restrictions for nucleation rates + ! + IF (PJNUCN(II) .LT. 1.0E-7) PJNUCN(II) = 0.0 + ! + ! + END IF +END DO +! +! +IF (NVERB .GE. 10) WRITE(*,*) '~~ CH_AER_MAATT_NEUT (fin): PRH =',MINVAL(PRH), MAXVAL(PRH) +IF (NVERB .GE. 10) WRITE(*,*) '~~ CH_AER_MAATT_NEUT (fin): PTEMP =',MINVAL(PRH), MAXVAL(PRH) +IF (NVERB .GE. 10) WRITE(*,*) '~~ CH_AER_MAATT_NEUT (fin): ZSULF =',MINVAL(ZSULF), MAXVAL(ZSULF) +IF (NVERB .GE. 10) WRITE(*,*) '~~ CH_AER_MAATT_NEUT (fin): PJNUCN =',MINVAL(PJNUCN), MAXVAL(PJNUCN) +IF (NVERB .GE. 10) WRITE(*,*) '~~ CH_AER_MAATT_NEUT (fin): ZAL =',MINVAL(ZAL), MAXVAL(ZAL) +IF (NVERB .GE. 10) WRITE(*,*) '~~ CH_AER_MAATT_NEUT (fin): ZNTOTN =',MINVAL(ZNTOTN), MAXVAL(ZNTOTN) +IF (NVERB .GE. 10) WRITE(*,*) '~~ CH_AER_MAATT_NEUT (fin): PRCN =',MINVAL(PRCN), MAXVAL(PRCN) +! +RETURN +! +END SUBROUTINE CH_AER_MAATTANEN_NEUTRAL + diff --git a/src/MNH/ch_aer_mineral.f90 b/src/MNH/ch_aer_mineral.f90 index bdb08046e9aa1fdf677e649502b6ad29356bca0f..646453544615d47e43b4318722c7f081e0f3dcfc 100644 --- a/src/MNH/ch_aer_mineral.f90 +++ b/src/MNH/ch_aer_mineral.f90 @@ -2,69 +2,64 @@ !ORILAM_LIC This is part of the ORILAM software governed by the CeCILL-C licence !ORILAM_LIC version 1. See LICENSE, CeCILL-C_V1-en.txt and CeCILL-C_V1-fr.txt !ORILAM_LIC for details. -!----------------------------------------------------------------- -!--------------- special set of characters for RCS information -!----------------------------------------------------------------- -! $Source$ $Revision$ -! MASDEV4_7 chimie 2006/05/18 13:07:25 -!----------------------------------------------------------------- -!! ####################### +!! ########################## MODULE MODI_CH_AER_MINERAL -!! ####################### +!! ########################## !! INTERFACE -! +!! SUBROUTINE CH_AER_MINERAL(PCTOTG, PCTOTA, PRV, PDENAIR, PPRESSURE, PTEMP, PRC, POM,& - PCCTOT,PSIG0, PRG0, PDT) + PCCTOT) IMPLICIT NONE REAL, DIMENSION(:,:), INTENT(INOUT) :: PCTOTG, POM REAL, DIMENSION(:,:,:), INTENT(INOUT) :: PCTOTA, PCCTOT REAL, DIMENSION(:), INTENT(IN) :: PRV, PDENAIR, PPRESSURE, PTEMP, PRC -REAL, DIMENSION(:,:), INTENT(INOUT) :: PSIG0, PRG0 -REAL, INTENT(IN) :: PDT -! +!! END SUBROUTINE CH_AER_MINERAL -! +!! END INTERFACE -! +!! END MODULE MODI_CH_AER_MINERAL !! !! -!########################################################################################## - SUBROUTINE CH_AER_MINERAL(PCTOTG, PCTOTA, PRV, PDENAIR, PPRESSURE, PTEMP, PRC, POM,& - PCCTOT,PSIG0, PRG0,PDT) -!########################################################################################### +!! ##################################################################################### + SUBROUTINE CH_AER_MINERAL(PCTOTG, PCTOTA, PRV, PDENAIR, PPRESSURE, PTEMP, PRC, POM, & + PCCTOT) +!! ##################################################################################### !! !! PURPOSE !! ------- !! solve the mineral thermodynamic balance !! -!! REFERENCE -!! --------- -!! none +!! REFERENCE +!! --------- +!! None !! -!! AUTHOR -!! ------ -!! P. Tulet (GMEI) +!! AUTHOR +!! ------ +!! P. Tulet (GMEI) !! -!! MODIFICATIONS -!! ------------- +!! MODIFICATIONS +!! ------------- !! -!! EXTERNAL -!! -------- -!! None +!! EXTERNAL +!! -------- +!! None !! !------------------------------------------------------------------------------- ! +!* 0. DECLARATIONS +! ------------ +! USE MODD_CH_AEROSOL USE MODI_CH_NNARES USE MODI_CH_ARES USE MODI_CH_ISOROPIA USE MODI_CH_AER_THERMO USE MODI_CH_AER_EQSAM -USE MODD_CST, ONLY : XMNH_TINY -!USE MODI_CH_AER_DIFF -!! +USE MODD_CST, ONLY : XMNH_TINY +USE MODD_CONF, ONLY : NVERB +! IMPLICIT NONE ! !* 0.1 Declarations of arguments @@ -72,38 +67,40 @@ IMPLICIT NONE REAL, DIMENSION(:,:), INTENT(INOUT) :: PCTOTG, POM REAL, DIMENSION(:,:,:), INTENT(INOUT) :: PCTOTA, PCCTOT REAL, DIMENSION(:), INTENT(IN) :: PRV, PDENAIR, PPRESSURE, PTEMP, PRC -REAL, DIMENSION(:,:), INTENT(INOUT) :: PSIG0, PRG0 -REAL, INTENT(IN) :: PDT ! !* 0.2 Declarations of local variables ! INTEGER :: JI,JJ -REAL, DIMENSION(SIZE(PCTOTA,1),NSP,JPMODE) :: ZFRAC -REAL, DIMENSION(SIZE(PCTOTA,1),NSP) :: ZTOT,ZTOTNEW, ZTOTGNEW +REAL, DIMENSION(SIZE(PCTOTA,1),NSP,JPMODE) :: ZFRAC +REAL, DIMENSION(SIZE(PCTOTA,1),NSP) :: ZTOT,ZTOTNEW, ZTOTGNEW REAL, DIMENSION(SIZE(PCTOTA,1),NSP+NCARB+NSOA) :: ZDEL -REAL, DIMENSION(SIZE(PCTOTA,1),6) :: ZAER -REAL, DIMENSION(SIZE(PCTOTA,1)) :: ZPKM, ZPKH2O, ZSAT, ZRH - -!***************************************************************** -!***************************************************************** -! SOLVEUR DE L'EQUILIBRE CHIMIQUE MINERAL -!***************************************************************** -!***************************************************************** - -ZPKM(:) = 1E-3*PDENAIR(:) * 6.0221367E+23 / 28.9644 -ZPKH2O(:) = ZPKM(:)*1.6077*PRV(:) +REAL, DIMENSION(SIZE(PCTOTA,1),6) :: ZAER +REAL, DIMENSION(SIZE(PCTOTA,1)) :: ZPKM, ZPKH2O, ZSAT, ZRH +! +!------------------------------------------------------------------------------- +! +!* 1. INITIALIZATION +! -------------- +! +ZPKM (:) = 1E-3 * PDENAIR(:) * 6.0221367E+23 / 28.9644 +ZPKH2O(:) = ZPKM(:) * 1.6077 * PRV(:) ! ! compute relative humidity -ZSAT(:)=0.611*EXP(17.2694*(PTEMP(:)-273.16)/(PTEMP(:)-35.86)) -ZSAT(:)=ZSAT(:)*1000. -ZRH(:)=(ZPKH2O(:)/(ZPKM(:)*1.6077))*PPRESSURE(:)/& - &(0.622+(ZPKH2O(:)/(ZPKM(:)*1.6077)))/ZSAT(:) -ZRH(:) = MIN(0.95, MAX(ZRH(:), .1)) ! until 0.95 thermodynamic code is not valid +ZSAT(:) = 0.611*EXP(17.2694*(PTEMP(:)-273.16)/(PTEMP(:)-35.86)) +ZSAT(:) = ZSAT(:)*1000. +ZRH (:) = (ZPKH2O(:)/(ZPKM(:)*1.6077))*PPRESSURE(:)/& + & (0.622+(ZPKH2O(:)/(ZPKM(:)*1.6077)))/ZSAT(:) +ZRH(:) = MIN(0.95, MAX(ZRH(:), .1)) ! until 0.95 thermodynamic code is not valid ! ! Mass need to be positive -PCTOTA(:,:,:)= MAX (PCTOTA(:,:,:),0.) -PCTOTG(:,:)= MAX (PCTOTG(:,:),0.) -ZTOTGNEW(:,:)= 0. +PCTOTA(:,:,:) = MAX(PCTOTA(:,:,:),0.) +PCTOTG(:,:) = MAX(PCTOTG(:,:), 0.) +ZTOTGNEW(:,:) = 0. +! +!------------------------------------------------------------------------------- +! +!* 2. COMPUTE MINERAL CHEMICAL EQUILIBRIUM +! ------------------------------------ ! !****************************************************************** ! Calcul de la repartition des differentes especes entre les modes @@ -112,9 +109,12 @@ ZTOTGNEW(:,:)= 0. DO JI=1,NSP ZTOTNEW(:,JI)=0. ZTOT(:,JI)=PCTOTA(:,JI,1)+PCTOTA(:,JI,2) - ZTOT(:,JI) = MAX(ZTOT(:,JI),1.E-40) + ZTOT(:,JI) = MAX(ZTOT(:,JI),1.E-40) ZFRAC(:,JI,1)=PCTOTA(:,JI,1)/(ZTOT(:,JI)+1E-25) ZFRAC(:,JI,2)=1.-ZFRAC(:,JI,1) + ! use SO4 fraction for all species (clean this up later) + ZFRAC(:,JI,1)=ZFRAC(:,1,1) + ZFRAC(:,JI,2)=1.-ZFRAC(:,JI,1) ENDDO ! ZTOTNEW(:,:) = ZTOT(:,:) @@ -193,9 +193,9 @@ ELSE IF (CMINERAL == 'EQSAM') THEN ! ELSE -PRINT *,' WARNING WARNING WARNING WARNING WARNING WARNING' -PRINT *,' PAS D EQUILIBRE THERMODYNAMIQUE ENTRE LES MINERAUX' -PRINT *,' WARNING WARNING WARNING WARNING WARNING WARNING' +IF (NVERB==10) PRINT *,' WARNING WARNING WARNING WARNING WARNING WARNING' +IF (NVERB==10) PRINT *,' PAS D EQUILIBRE THERMODYNAMIQUE ENTRE LES MINERAUX' +IF (NVERB==10) PRINT *,' WARNING WARNING WARNING WARNING WARNING WARNING' ZTOTNEW(:,:) = MAX(0.,ZTOT(:,:)) ENDIF @@ -209,16 +209,18 @@ ZDEL(:,1:NSP)=ZTOTNEW(:,1:NSP)-ZTOT(:,1:NSP) ! ! Calcul de la nouvelle composition chimique ! de chacun des modes apres equilibre chimique +! DO JI=1,JPMODE DO JJ=1,NSP - !PCTOTA(:,JJ,JI)=MAX(XMNH_TINY,PCTOTA(:,JJ,JI)+ZFRAC(:,JJ,JI)*ZDEL(:,JJ)) + PCTOTA(:,JJ,JI)=MAX(XMNH_TINY,PCTOTA(:,JJ,JI)+ZFRAC(:,JJ,JI)*ZDEL(:,JJ)) ! répartition entre les modes en fonction de la surface des aerosols (facteur ! omega) ! PCTOTA(:,JJ,JI)=MAX(XMNH_TINY,PCTOTA(:,JJ,JI)+ZDEL(:,JJ)*POM(:,JI)) - PCTOTA(:,JJ,JI)=MAX(XMNH_TINY,ZTOTNEW(:,JJ)*POM(:,JI)) + ! PCTOTA(:,JJ,JI)=MAX(XMNH_TINY,ZTOTNEW(:,JJ)*POM(:,JI)) ENDDO -ENDDO + !PCTOTA(:,JP_AER_SO4,JI) = ZCTOTA(:,JP_AER_SO4,JI) +ENDDO ! DO JJ=1,NSP PCTOTG(:,JJ)=MAX(XMNH_TINY,PCTOTG(:,JJ)-ZDEL(:,JJ)) diff --git a/src/MNH/ch_aer_mode_merging.f90 b/src/MNH/ch_aer_mode_merging.f90 new file mode 100644 index 0000000000000000000000000000000000000000..25ef16b27e110cadc87664dd971930032911e2e8 --- /dev/null +++ b/src/MNH/ch_aer_mode_merging.f90 @@ -0,0 +1,176 @@ +!ORILAM_LIC Copyright 1994-2014 CNRS, Meteo-France and Universite Paul Sabatier +!ORILAM_LIC This is part of the ORILAM software governed by the CeCILL-C licence +!ORILAM_LIC version 1. See LICENSE, CeCILL-C_V1-en.txt and CeCILL-C_V1-fr.txt +!ORILAM_LIC for details. +!! ######################### + MODULE MODI_CH_AER_MODE_MERGING +!! ######################### +!! +INTERFACE +!! + SUBROUTINE CH_AER_MODE_MERGING(PM, PLNSIG, PRG, PDMGROW, PDMMERG) + !! + IMPLICIT NONE + REAL, DIMENSION(:,:), INTENT(IN) :: PM, PLNSIG, PRG + REAL, DIMENSION(:,:), INTENT(INOUT) :: PDMGROW + REAL, DIMENSION(:,:), INTENT(INOUT) :: PDMMERG + !! + END SUBROUTINE CH_AER_MODE_MERGING +!! +END INTERFACE +!! +END MODULE MODI_CH_AER_MODE_MERGING +!! +!! ############################################## + SUBROUTINE CH_AER_MODE_MERGING(PM, PLNSIG, PRG, PDMGROW, PDMMERG) +!! ############################################## +!! +!! PURPOSE +!! ------- +!! If the Aitken mode mass is growing faster than accumulation mode +!! mass and the Aitken mode number concentration exceeds the +!! accumulation mode number concentration, then moments tendency +!! are adjusted. In the present developpement only moments 3 and 6 +!! based on the condensated moments are modified. +!! +!! METHOD +!! ------ +!! +!! EXTERNAL +!! -------- +!! none +!! +!! IMPLICIT ARGUMENTS +!! ------------------ +!! USE MODD_CH_AEROSOL +!! +!! REFERENCE +!! --------- +!! implementation adapted from +!! +!! Binkowski and Roselle (2003). Models-3 Community Multiscale Air Quality (CMAQ) model +!! aerosol component: 1, Model description. J. Geophys. Res., 108(D6), 4183. +!! doi:10.1029/2001JD001409 +!! +!! for M3 and M6 tendencies. +!! +!! AUTHOR +!! ------ +!! Joris Pianezze (LACy) +!! +!! MODIFICATIONS +!! ------------- +!! Original 06/2018 +!! +!------------------------------------------------------------------------------- +! +!* 0. DECLARATIONS +! ------------ +! +USE MODD_CH_AEROSOL +USE MODD_CONF, ONLY : NVERB +! +IMPLICIT NONE +! +!* 0.1 Declarations of arguments +! +REAL, DIMENSION(:,:), INTENT(IN) :: PM, PLNSIG, PRG +REAL, DIMENSION(:,:), INTENT(INOUT) :: PDMGROW +REAL, DIMENSION(:,:), INTENT(INOUT) :: PDMMERG +! +!* 0.2 Declarations of local variables +! +INTEGER :: JI,JJ +REAL :: ZA, ZB, ZC, ZDELTA +REAL :: ZC3, ZC2, ZC1, ZQ +REAL :: ZXNUM +REAL :: ZXM0, ZXM6, ZXM3 +REAL :: ZFNUM, ZFM0, ZFM3, ZFM6 +REAL :: ZPHNUM, ZPHM0, ZPHM3, ZPHM6 +! +!------------------------------------------------------------------------------- +! +!* 1. MODE MERGING +! ------------ +! +DO JI=1,SIZE(PM,1) + ! +! IF ( PDMGROW( JI , NM3(1) ) .GT. PDMGROW( JI , NM3(2) ) ) THEN + ! + ! + !* 1.1 CALCULATE XNUM + ! -------------- + ! + ! Solve equation of Ackermann et al. 1998 + ! with xnum = ln (d/d_i) / (sqrt(2)*ln(sig_i)) + ! + ZC1 = PLNSIG(JI,1) / PLNSIG(JI,2) + ZC2 = LOG( PRG(JI,2) / PRG(JI,1) ) / ( SQRT(2.0) * PLNSIG(JI,1) ) + ZC3 = LOG( ZC1 * PM(JI,NM0(2)) / PM(JI,NM0(1)) ) + ! + ! Calculate quadratic equation coefficients & discriminant + ! Resolution with Press et al. algorithm : page 208 + ZA = 1.0 - ZC1 * ZC1 + ZB = 2.0 * ZC2 * ZC1 * ZC1 + ZC = ZC3 - ZC2 * ZC2 * ZC1 * ZC1 + ZDELTA = ZB * ZB - 4.0 * ZA * ZC + ! + ! If roots are imaginary, no mode merging takes place. + ! + IF ( ZDELTA .LT. 0.0 ) THEN + ZQ = - 5.0 + ZXNUM = 0.0 + ELSE + ZQ = - 0.5 * ( ZB + SIGN( 1.0, ZB ) * SQRT( ZDELTA ) ) + ZXNUM = ZC / ZQ + END IF + ! + !----------------------------------------------------------------------- + ! Ensure that Xnum is large enough so that no more than half of + ! the Aitken mode mass is merged into the accumulation mode during + ! any given time step. This criterion is described in Paragraph 26 + ! of Binkowski and Roselle (2003). + ! + ZXNUM = MAX( ZXNUM, 3.0 * PLNSIG(JI,1) / SQRT(2.0) ) + ! + ! + !* 1.2 MODIFCATION OF MOMENTS TENDENCY + ! ------------------------------- + ! + ZXM0 = ZXNUM + ZXM3 = ZXNUM - 3.0 * PLNSIG(JI,1) / SQRT(2.0) + ZXM6 = ZXNUM - 6.0 * PLNSIG(JI,1) / SQRT(2.0) + ! + ! Calculate the fractions of the moments 0, 3 and 6 + ! distributions with diameter greater than the intersection diameter + ! + ZFM0 = 0.5 * ERFC( ZXM0 ) ! Eq 10a of B&R 2003 + ZFM3 = 0.5 * ERFC( ZXM3 ) ! Eq 10b of B&R 2003 + ZFM6 = 0.5 * ERFC( ZXM6 ) ! Adapted to 6th moment + ! + ! Calculate the fractions of the moments 0, 3 and 6 + ! distributions with diameters less than the intersection diameter. + ! + ZPHM0 = 0.5 * ( 1.0 + ERF( ZXM0 ) ) ! Eq 10c of B&R 2003 + ZPHM3 = 0.5 * ( 1.0 + ERF( ZXM3 ) ) ! Eq 10d of B&R 2003 + ZPHM6 = 0.5 * ( 1.0 + ERF( ZXM6 ) ) ! Adapted to 6th moment + ! + ! Update accumulation-mode moment tendencies using + ! Equations 11a - 11c of Binkowski and Roselle (2003). + ! + PDMMERG(JI,NM0(2)) = PDMGROW(JI,NM0(1)) * ZFM0 + PDMMERG(JI,NM3(2)) = PDMGROW(JI,NM3(1)) * ZFM3 + PDMMERG(JI,NM6(2)) = PDMGROW(JI,NM6(1)) * ZFM6 + ! + ! Update Aitken-mode moment tendencies using + ! Equations 11d - 11f of Binkowski and Roselle (2003). + ! + PDMMERG(JI,NM0(1)) = PDMGROW(JI,NM0(1)) * (ZPHM0 - 1.0) + PDMMERG(JI,NM3(1)) = PDMGROW(JI,NM3(1)) * (ZPHM3 - 1.0) + PDMMERG(JI,NM6(1)) = PDMGROW(JI,NM6(1)) * (ZPHM3 - 1.0) + ! +! END IF + ! +END DO +! +END SUBROUTINE CH_AER_MODE_MERGING diff --git a/src/MNH/ch_aer_nucl.f90 b/src/MNH/ch_aer_nucl.f90 index 738f80a9c069ff80aed1f47365f7b07840940b39..9f566ed1d23356bc270c8b66f50b70604f494e76 100644 --- a/src/MNH/ch_aer_nucl.f90 +++ b/src/MNH/ch_aer_nucl.f90 @@ -2,26 +2,19 @@ !ORILAM_LIC This is part of the ORILAM software governed by the CeCILL-C licence !ORILAM_LIC version 1. See LICENSE, CeCILL-C_V1-en.txt and CeCILL-C_V1-fr.txt !ORILAM_LIC for details. -!----------------------------------------------------------------- -!--------------- special set of characters for RCS information -!----------------------------------------------------------------- -! $Source$ $Revision$ -! MASDEV4_7 chimie 2006/05/18 13:07:25 -!----------------------------------------------------------------- -!! ################################ -MODULE MODI_CH_AER_NUCL -!! ################################ +!! ######################### + MODULE MODI_CH_AER_NUCL +!! ######################### !! INTERFACE !! - SUBROUTINE CH_AER_NUCL(ZRH,ZT,ZCONC,ZJ,ZAL,KVECNPT) + SUBROUTINE CH_AER_NUCL(PRH,PTEMP,PSULF,PJNUC,PJ2RAT) IMPLICIT NONE !! -REAL, DIMENSION(:), INTENT(INOUT) :: ZJ,ZAL -REAL, DIMENSION(:), INTENT(IN) :: ZRH,ZT -REAL, DIMENSION(:), INTENT(INOUT) :: ZCONC -INTEGER, INTENT(IN) :: KVECNPT - !! + REAL, DIMENSION(:), INTENT(IN) :: PRH,PTEMP + REAL, DIMENSION(:), INTENT(INOUT) :: PSULF + REAL, DIMENSION(:), INTENT(INOUT) :: PJNUC + REAL, DIMENSION(:), INTENT(INOUT) :: PJ2RAT !! END SUBROUTINE CH_AER_NUCL !! @@ -29,95 +22,228 @@ END INTERFACE !! END MODULE MODI_CH_AER_NUCL !! -!! ######################################################################### -SUBROUTINE CH_AER_NUCL(ZRH,ZT,ZCONC,ZJ,ZAL,KVECNPT) -!########################################################### -! -!! -!! +!! ############################################## + SUBROUTINE CH_AER_NUCL(PRH,PTEMP,PSULF,PJNUC,PJ2RAT) +!! ############################################## +!! +!! PURPOSE +!! ------- +!! +!! METHOD +!! ------ +!! +!! EXTERNAL +!! -------- +!! Subroutine CH_AER_KULMALA : compute nucleation rate from Kulmala et al. 1998 parametrization +!! Subroutine CH_AER_VEHKAMAKI : compute nucleation rate from Vehkamaki et al. 2002 parametrization +!! Subroutine CH_AER_MAATTANEN_NEUTRAL : compute nucleation rate from Neural Maattanen et al. 2018 parametrization +!! Subroutine CH_AER_MAATTANEN_IONIND : compute nucleation rate from Ion-induced Maattanen et al. 2018 parametrization +!! +!! IMPLICIT ARGUMENTS +!! ------------------ +!! USE MODD_CH_AEROSOL !! -!! PURPOSE -!! ------- -!! -!! compute nucleation rate for binary sulfate/H2O -!! (Kulmala 1998) +!! REFERENCE +!! --------- !! -!! AUTHOR -!! ------ -!! F.Cousin * Laboratoire d'Aerologie* +!! AUTHOR +!! ------ +!! Brice Foucart & Joris Pianezze (LACy) !! -!! MODIFICATIONS -!! ------------- -!! P. Tulet 05/01/04 -!! M.Leriche 2015 : correction bug -!---------------------------------------------------------------------------- +!! MODIFICATIONS +!! ------------- +!! Original 06/2018 +!! +!------------------------------------------------------------------------------- ! -!* 0. DECLARATIONS -! ------------ +!* 0. DECLARATIONS +! ------------ +! +USE MODD_CST, ONLY : XAVOGADRO +USE MODI_CH_AER_KULMALA +USE MODI_CH_AER_VEHKAMAKI +USE MODI_CH_AER_MAATTANEN_NEUTRAL +USE MODI_CH_AER_MAATTANEN_IONIND +USE MODI_CH_AER_MODE_MERGING +! +USE MODD_CH_AEROSOL +USE MODD_CONF, ONLY : NVERB ! -! IMPLICIT NONE ! -!* 0.1 Declarations of dummy arguments : +!* 0.1 Declarations of arguments ! -REAL, DIMENSION(:), INTENT(INOUT) :: ZJ,ZAL -REAL, DIMENSION(:), INTENT(IN) :: ZRH,ZT -REAL, DIMENSION(:), INTENT(INOUT) :: ZCONC -INTEGER, INTENT(IN) :: KVECNPT -INTEGER :: II -REAL, DIMENSION(KVECNPT) :: RA,XH2O,PVH2O,PVH2SO4,KHI,SIG,XNSULFC,XNSULF -REAL :: Kb,TC,T0 - - -Kb=1.381E-23 -TC = 905.15 -T0 = 360.15 -! 1. Saturation vapor pressure for water (N/m2, T in K) -! (Preining et al, 1981) -PVH2O(:) = EXP(77.344913-7235.4247/ZT(:)-8.2*LOG(ZT(:))+0.0057113*ZT(:)) -! 2. Water concentration (molec/cm3) -XH2O(:) = ZRH(:)*PVH2O(:)/(Kb*ZT(:))/1.E6 - -ZJ(:)=0. -ZAL(:)=0. -RA(:)=0. - -WHERE(((ZT(:)>=223.).OR.(ZT(:)<=298)).AND.(ZRH(:)>=0.1)) -! 1. Saturation vapor pressure for water (N/m2, T in K) -! (Preining et al, 1981) - PVH2O(:) = EXP(77.344913-7235.4247/ZT(:)-8.2*LOG(ZT(:))+0.0057113*ZT(:)) -! 2. Water concentration (molec/cm3) - XH2O(:) = ZRH(:)*PVH2O(:)/(Kb*ZT(:))/1.E6 -! 3. Saturation vapor pressure for H2SO4 -! (Kulmala et al 1990, Seinfeld 577p) -!PVH2SO4 = 1./T-1./T0+0.38*T0*(1./T-1./T0)/(TC-T0) -!PVH2SO4 = PVH2SO4 + 0.38/(TC-T0)*LOG(T/T0) -!PVH2SO4 = -10156.0*PVH2SO4 - 0.414 -!PVH2SO4= EXP(PVH2SO4) - PVH2SO4(:)=EXP(-10156./T0+16.259+10156.*(-1./ZT(:)+1./T0+0.38/(TC-T0)*& - (1.+LOG(T0/ZT(:))-T0/ZT(:))))*101325. - -! 4. Relative Acidity - RA(:)=ZCONC(:)*1.E6*(Kb*ZT(:))/PVH2SO4(:) - -END WHERE -! 5. H2SO4 mole fraction in the critical nucleous - DO II=1,SIZE(ZCONC,1) - IF((ZCONC(II)>0.).AND.(XH2O(II)>0.).AND.(RA(II)/=0.)) THEN - ZAL(II)=1.2233-0.0154*RA(II)/(RA(II)+ZRH(II))+0.0102*& - LOG(ZCONC(II))-0.0415*LOG(XH2O(II))+0.0016*ZT(II) - END IF - END DO - -WHERE(((ZT(:)>=223.).OR.(ZT(:)<=298)).AND.(ZRH(:)>=0.1).AND.ZAL(:)/=0.) - ! 6. Sulfuric nucleation rate (molec/cm3/s) - XNSULFC(:)=EXP(-14.5125+0.1335*ZT(:)-10.5462*ZRH(:)+1958.4*ZRH(:)/ZT(:)) - SIG(:) = 1.+(ZT(:)-273.15)/273.15 - XNSULF(:)=LOG(ZCONC(:)/XNSULFC(:)) - KHI(:)=25.1289*XNSULF(:)-4890.8*XNSULF(:)/ZT(:)-1743.3/ZT(:)-2.2479*SIG(:)*XNSULF(:)*ZRH(:)+& - 7643.4*ZAL(:)/ZT(:)-1.9712*ZAL(:)*SIG(:)/ZRH(:) - ZJ(:)=EXP(KHI(:)) -END WHERE +REAL, DIMENSION(:), INTENT(IN) :: PRH,PTEMP +REAL, DIMENSION(:), INTENT(INOUT) :: PSULF +REAL, DIMENSION(:), INTENT(INOUT) :: PJNUC +REAL, DIMENSION(:), INTENT(INOUT) :: PJ2RAT +! +!* 0.2 Declarations of local variables +! +REAL, DIMENSION(SIZE(PSULF,1)) :: ZRCN, ZRCI ! Critical cluster in m (neutral and ion-ind) +REAL, DIMENSION(SIZE(PSULF,1)) :: ZRCN2, ZRCI2 ! Diameter of critical cluster in nm (neutral and ion-ind) +REAL, DIMENSION(SIZE(PSULF,1)) :: ZLKKN, ZLKKI ! Final scaling factor from Lehtinen et al., 2007 (neutral and ion-ind) +REAL, DIMENSION(SIZE(PSULF,1)) :: ZJNUCN, ZJNUCI ! Nucleation rate in part.cm-3.s-1 (neutral and ion-ind) +REAL, DIMENSION(SIZE(PSULF,1)) :: ZJ2RATN, ZJ2RATI ! Nucleation rate for 2 nm in part.cm-3.s-1 (neutral and ion-ind) +REAL, DIMENSION(SIZE(PSULF,1)) :: ZSULF ! Sulfuric acid concentration in molec.cm-3 +REAL, DIMENSION(SIZE(PSULF,1)) :: ZGR ! Particle Growth Rate according to Nieminen et al., 2010 (nm.h-1) +REAL, DIMENSION(SIZE(PSULF,1)) :: ZGAMMA ! Gamma +REAL :: ZCS ! Typical CS value in atmosphere in 1/h +REAL :: ZMAV ! Average m-value according to Lehtinen et al., 2007 +REAL :: ZTSIZE ! Target size (in geometric diameter = mobility diameter -0.3nm). +! +!------------------------------------------------------------------------------- +! +!* 1. DEFINE VARIABLES FOR J2 (particle formation rate) +! ----------------------------------------------- +! +! [ Please, note that these calculations can fe found in the supplementary Fortran code of Maattanen et al., 2018 ] +! +! a) H2SO4 conversion from ug.m-3 to molec.cm-3 +! +!ZSULF(:) = PSULF(:)*(XAVOGADRO*1.E-12) / XH2SO4 +! +! b) Growth rate calculation +! +!ZMAV = -1.6 ! It can also be calculated +! +! +!ZGR(:) = ZSULF(:) / (661.1 * (PRH(:) * 100)**2 - 1.129E5 * (PRH(:)*100) + 1.549E7) +! +! +! c) Condensation sink imposition +! +!ZCS = 22. ! It can also be calculated +! +! d) Target size (here 2 so 2 - 0.3 = 1.7) +! +!ZTSIZE = 1.7 ! We want a J2nm so 2nm -0.3 = 1.7 nm +! +! +!* 2. NUCLEATION PARAMETRIZATIONS +! --------------------------- +! +! [ Please, note that Kulmala et al., 1998 and Vehkamaki et al., 2002 are neutral parametrizations ] +! +! +!IF (NVERB .GE. 10) WRITE(*,*) '~~ CH_AER_NUCL PSULF (deb) =',PSULF +! +IF (CNUCLEATION == 'KULMALA') THEN + ! + CALL CH_AER_KULMALA(PRH, PTEMP, PSULF, PJNUC, ZRCN) + ! + ! J2 (J2RAT) calculation for Kulmala: + ! + !ZRCN2(:) = 2. * ZRCN(:) * 1.E9 + ! + !ZGAMMA(:) = max( 0.0, 1.0 / (ZMAV+1) * ((ZTSIZE /(ZRCN2(:)))**(ZMAV+1) -1) ) + ! + !ZLKKN(:) = exp(-ZGAMMA(:) * ZRCN2(:) * ZCS / ZGR(:)) ! Final scaling factor + ! + !PJ2RAT(:) = PJNUC(:) * ZLKKN(:) + ! +ELSE IF (CNUCLEATION == 'VEHKAMAKI') THEN + ! + CALL CH_AER_VEHKAMAKI(PRH, PTEMP, PSULF, PJNUC, ZRCN) + ! + ! J2 (J2RAT) calculation for Vehkamaki: + ! + !ZRCN2(:) = 2. * ZRCN(:) * 1.E9 + ! + !ZGAMMA(:) = max( 0.0, 1.0 / (ZMAV+1) * ((ZTSIZE /(ZRCN2(:)))**(ZMAV+1) -1) ) + ! + !ZLKKN(:) = exp(-ZGAMMA(:) * ZRCN2(:) * ZCS / ZGR(:)) ! Final scaling factor + ! + !PJ2RAT(:) = PJNUC(:) * ZLKKN(:) + ! +ELSE IF (CNUCLEATION == 'MAATTANEN_NEUTRAL') THEN + ! + ! Define ZJNUCN + ! + ZJNUCN(:) = PJNUC(:) + ! + CALL CH_AER_MAATTANEN_NEUTRAL(PRH, PTEMP, PSULF, ZJNUCN, ZRCN) + ! + PJNUC(:) = ZJNUCN(:) + ! + ! J2 (J2RAT) calculation for Maattanen neutral: + ! + !ZRCN2(:) = 2. * ZRCN(:) * 1.E9 + ! + !ZGAMMA(:) = max( 0.0, 1.0 / (ZMAV+1) * ((ZTSIZE /(ZRCN2(:)))**(ZMAV+1) -1) ) + ! + !ZLKKN(:) = exp(-ZGAMMA(:) * ZRCN2(:) * ZCS / ZGR(:)) ! Final scaling factor + ! + !PJ2RAT(:) = PJNUC(:) * ZLKKN(:) + ! +ELSE IF (CNUCLEATION == 'MAATTANEN_IONIND') THEN + ! + ! Define ZJNUCI + ! + ZJNUCI(:) = PJNUC(:) + ! + CALL CH_AER_MAATTANEN_IONIND(PRH, PTEMP, PSULF, ZJNUCI, ZRCI) + ! + PJNUC(:) = ZJNUCI(:) + ! + ! J2 (J2RAT) calculation for Maattanen ion-ind: + ! + !ZRCI2(:) = 2. * ZRCI(:) * 1.E9 + ! + !ZGAMMA(:) = max( 0.0, 1.0 / (ZMAV+1) * ((ZTSIZE /(ZRCI2(:)))**(ZMAV+1) -1) ) + ! + !ZLKKI(:) = exp(-ZGAMMA(:) * ZRCI2(:) * ZCS / ZGR(:)) ! Final scaling factor + ! + !PJ2RAT(:) = PJNUC(:) * ZLKKI(:) + ! +ELSE IF (CNUCLEATION == 'MAATTANEN_BOTH') THEN + ! + ! Define ZJNUCN + ! + ZJNUCN(:) = PJNUC(:) + ! + CALL CH_AER_MAATTANEN_NEUTRAL(PRH, PTEMP, PSULF, ZJNUCN, ZRCN) + ! + ! J2 (J2RAT) calculation for Maattanen neutral: + ! + !ZRCN2(:) = 2. * ZRCN(:) * 1.E9 + ! + !ZGAMMA(:) = max( 0.0, 1.0 / (ZMAV+1) * ((ZTSIZE /(ZRCN2(:)))**(ZMAV+1) -1) ) + ! + !ZLKKN(:) = exp(-ZGAMMA(:) * ZRCN2(:) * ZCS / ZGR(:)) ! Final scaling factor + ! + !ZJ2RATN(:) = ZJNUCN(:) * ZLKKN(:) + ! + ! Define ZJNUCI + ! + ZJNUCI(:) = PJNUC(:) + ! + CALL CH_AER_MAATTANEN_IONIND(PRH, PTEMP, PSULF, ZJNUCI, ZRCI) + ! + ! J2 (J2RAT) calculation for Maattanen ion-ind: + ! + !ZRCI2(:) = 2. * ZRCI(:) * 1.E9 + ! + !ZGAMMA(:) = max( 0.0, 1.0 / (ZMAV+1) * ((ZTSIZE /(ZRCI2(:)))**(ZMAV+1) -1) ) + ! + !ZLKKI(:) = exp(-ZGAMMA(:) * ZRCI2(:) * ZCS / ZGR(:)) ! Final scaling factor + ! + !ZJ2RATI(:) = ZJNUCI(:) * ZLKKI(:) + ! + ! New particle formation rates addition + ! + PJNUC(:) = ZJNUCN(:) + ZJNUCI(:) + ! + !PJ2RAT(:) = ZJ2RATN(:) + ZJ2RATI(:) + ! +END IF +! +PJ2RAT(:) = 1E-7 +! +IF (NVERB .GE. 10) WRITE(*,*) '~~ CH_AER_NUCL PJNUC =',PJNUC +IF (NVERB .GE. 10) WRITE(*,*) '~~ CH_AER_NUCL PSULF (fin) =',PSULF +IF (NVERB .GE. 10) WRITE(*,*) '~~ CH_AER_NUCL ZJNUCI =',ZJNUCI +IF (NVERB .GE. 10) WRITE(*,*) '~~ CH_AER_NUCL ZJNUCN =',ZJNUCN -RETURN +! END SUBROUTINE CH_AER_NUCL diff --git a/src/MNH/ch_aer_solv.f90 b/src/MNH/ch_aer_solv.f90 index 22d84df38ff5c22925e18d6d71de7c0c3dc6f97f..e64c026e9da18e94be101f7e94afe4e1d600f9c4 100644 --- a/src/MNH/ch_aer_solv.f90 +++ b/src/MNH/ch_aer_solv.f90 @@ -14,24 +14,25 @@ !! INTERFACE !! -SUBROUTINE CH_AER_SOLV(PM, PSIG0, PRG0, PN0,PCTOTG, PCTOTA, PCCTOT, & - PDMINTRA,PDMINTER,PDMCOND, PSEDA,PDT,& - POM, PRV, PDENAIR, PPRESSURE, PTEMP, PRC, PTIME,PSOLORG) +SUBROUTINE CH_AER_SOLV(PM, PLNSIG, PRG, PN,PCTOTG, PCTOTA, PCCTOT, & + PDMINTRA,PDMINTER,PDMCOND, PDMNUCL, PDMMERG, PSEDA,PDT, & + PRV, PDENAIR, PPRESSURE, PTEMP, PRC, PTIME,PSOLORG, & + PMBEG,PMINT,PMEND) IMPLICIT NONE REAL, DIMENSION(:,:), INTENT(INOUT) :: PM -REAL, DIMENSION(:,:), INTENT(INOUT) :: POM REAL, DIMENSION(:,:), INTENT(INOUT) :: PSEDA REAL, DIMENSION(:,:), INTENT(INOUT) :: PDMINTRA REAL, DIMENSION(:,:), INTENT(INOUT) :: PDMINTER REAL, DIMENSION(:,:), INTENT(INOUT) :: PDMCOND -REAL, DIMENSION(:,:), INTENT(INOUT) :: PSIG0, PRG0, PN0 +REAL, DIMENSION(:,:), INTENT(INOUT) :: PDMNUCL +REAL, DIMENSION(:,:), INTENT(INOUT) :: PDMMERG +REAL, DIMENSION(:,:), INTENT(INOUT) :: PLNSIG, PRG, PN REAL, DIMENSION(:,:), INTENT(INOUT) :: PCTOTG REAL, DIMENSION(:,:,:), INTENT(INOUT) :: PCTOTA, PCCTOT REAL, DIMENSION(:,:), INTENT(INOUT) :: PSOLORG REAL, INTENT(IN) :: PDT, PTIME REAL, DIMENSION(:), INTENT(IN) :: PRV, PDENAIR, PPRESSURE, PTEMP, PRC - - +REAL, DIMENSION(:,:), INTENT(INOUT) :: PMBEG,PMINT,PMEND END SUBROUTINE CH_AER_SOLV !! END INTERFACE @@ -39,9 +40,10 @@ END INTERFACE END MODULE MODI_CH_AER_SOLV !! !! ############################################################################## - SUBROUTINE CH_AER_SOLV(PM, PSIG0, PRG0, PN0,PCTOTG, PCTOTA, PCCTOT, & - PDMINTRA,PDMINTER,PDMCOND,PSEDA, PDT, POM, & - PRV, PDENAIR, PPRESSURE, PTEMP, PRC, PTIME,PSOLORG) + SUBROUTINE CH_AER_SOLV(PM, PLNSIG, PRG, PN,PCTOTG, PCTOTA, PCCTOT, & + PDMINTRA,PDMINTER,PDMCOND,PDMNUCL,PDMMERG,PSEDA, PDT, & + PRV, PDENAIR, PPRESSURE, PTEMP, PRC, PTIME,PSOLORG, & + PMBEG,PMINT,PMEND) !! ############################################################################## !! !! PURPOSE @@ -66,6 +68,7 @@ END MODULE MODI_CH_AER_SOLV !! M. Leriche 08/16 suppress moments index declaration already in modd_aerosol !! M. Leriche 08/16 add an other particular case for the M0 resolution to !! avoid a division by zero (when ZK = 1) +!! J. Pianezze : 10/2018 add comments and simplification !! !! EXTERNAL !! -------- @@ -76,181 +79,183 @@ END MODULE MODI_CH_AER_SOLV ! ------------ ! USE MODD_CH_AEROSOL -USE MODD_CST, ONLY : XMNH_TINY +USE MODD_CST, ONLY : XMNH_TINY +USE MODD_CONF, ONLY : NVERB USE MODI_CH_AER_MINERAL USE MODI_CH_AER_ORGANIC USE MODI_CH_AER_MPMPO ! -! IMPLICIT NONE ! !* 0.1 declarations of arguments ! REAL, DIMENSION(:,:), INTENT(INOUT) :: PM -REAL, DIMENSION(:,:), INTENT(INOUT) :: POM REAL, DIMENSION(:,:), INTENT(INOUT) :: PSEDA REAL, DIMENSION(:,:), INTENT(INOUT) :: PDMINTRA REAL, DIMENSION(:,:), INTENT(INOUT) :: PDMINTER REAL, DIMENSION(:,:), INTENT(INOUT) :: PDMCOND -REAL, DIMENSION(:,:), INTENT(INOUT) :: PSIG0, PRG0, PN0 +REAL, DIMENSION(:,:), INTENT(INOUT) :: PDMNUCL +REAL, DIMENSION(:,:), INTENT(INOUT) :: PDMMERG +REAL, DIMENSION(:,:), INTENT(INOUT) :: PLNSIG, PRG, PN REAL, DIMENSION(:,:), INTENT(INOUT) :: PCTOTG REAL, DIMENSION(:,:,:), INTENT(INOUT) :: PCTOTA, PCCTOT REAL, INTENT(IN) :: PDT, PTIME REAL, DIMENSION(:), INTENT(IN) :: PRV, PDENAIR, PPRESSURE, PTEMP, PRC REAL, DIMENSION(:,:), INTENT(INOUT) :: PSOLORG +REAL, DIMENSION(:,:), INTENT(INOUT) :: PMBEG,PMINT,PMEND ! !* 0.2 declarations of local variables ! -INTEGER :: JI,JJ,JK, JN, IDT -REAL, DIMENSION(SIZE(PM,1)) :: ZSUM -REAL, DIMENSION(SIZE(PM,1),JPMODE) :: ZNEWM, ZMASK -REAL, DIMENSION(SIZE(PM,1)) :: ZSIGMA - -REAL, DIMENSION(SIZE(PM,1)) :: ZA,ZB,ZC,ZD -REAL, DIMENSION(SIZE(PM,1)) :: ZCONST1,ZCONST2 -REAL, DIMENSION(SIZE(PM,1)) :: Z0,ZK,ZKEXP - -REAL, SAVE, DIMENSION(JPMODE*3) :: ZPMIN -REAL, SAVE, DIMENSION(JPMODE) :: ZRATIOBC, ZRATIOOC -REAL :: ZINIRADIUSI, ZINIRADIUSJ -REAL, SAVE, DIMENSION(JPMODE) :: ZRGMIN, ZRGMAX -LOGICAL, SAVE :: GPHYSLIM = .TRUE. ! flag +INTEGER :: JI,JJ,JK, JN, IDT +REAL, DIMENSION(SIZE(PM,1)) :: ZSUM +REAL, DIMENSION(SIZE(PM,1),JPMODE) :: ZOM,ZMASK +REAL, DIMENSION(SIZE(PM,1)) :: ZSIGMA +! +REAL, DIMENSION(SIZE(PM,1)) :: ZA,ZB,ZC,ZD +REAL, DIMENSION(SIZE(PM,1)) :: ZCONST1,ZCONST2 +REAL, DIMENSION(SIZE(PM,1)) :: Z0,ZK,ZKEXP +! +REAL, SAVE, DIMENSION(JPMODE*3) :: ZPMIN +REAL, SAVE, DIMENSION(JPMODE) :: ZRATIOBC, ZRATIOOC +REAL :: ZINIRADIUSI, ZINIRADIUSJ ! !------------------------------------------------------------------------------- ! +!* 1. INITIALIZATION +! -------------- +! +PMBEG(:,:)=PM(:,:) +! +IF (CRGUNIT=="MASS") THEN + ZINIRADIUSI = XINIRADIUSI * EXP(-3.*(LOG(XINISIGI))**2) + ZINIRADIUSJ = XINIRADIUSJ * EXP(-3.*(LOG(XINISIGJ))**2) +ELSE + ZINIRADIUSI = XINIRADIUSI + ZINIRADIUSJ = XINIRADIUSJ +END IF +! +ZPMIN(1) = XN0IMIN +ZPMIN(2) = ZPMIN(1) * (ZINIRADIUSI**3)*EXP(4.5 * LOG(XINISIGI)**2) +ZPMIN(3) = ZPMIN(1) * (ZINIRADIUSI**6)*EXP(18. * LOG(XINISIGI)**2) +! +ZPMIN(4) = XN0JMIN +ZPMIN(5) = ZPMIN(4) * (ZINIRADIUSJ**3)*EXP(4.5 * LOG(XINISIGJ)**2) +ZPMIN(6) = ZPMIN(4) * (ZINIRADIUSJ**6)*EXP(18. * LOG(XINISIGJ)**2) +! +!------------------------------------------------------------------------------- +! +!* 2. SOLVE MOMENT DYNAMIC EQUATIONS +! ------------------------------ +! +DO JI=1,JPMODE ! - IF (CRGUNIT=="MASS") THEN - ZINIRADIUSI = XINIRADIUSI * EXP(-3.*(LOG(XINISIGI))**2) - ZINIRADIUSJ = XINIRADIUSJ * EXP(-3.*(LOG(XINISIGJ))**2) - ELSE - ZINIRADIUSI = XINIRADIUSI - ZINIRADIUSJ = XINIRADIUSJ - END IF + !* 2.1 MOMENT 0 + ! + !************************************************************* + ! Resolution du moment d'ordre 0: pour cela il faut resoudre + ! une equation differentielle du type dY/dt=-AY^2-BY+C + ! these Crassier page 42 + !************************************************************* ! - ZPMIN(1) = XN0IMIN - ZPMIN(2) = ZPMIN(1) * (ZINIRADIUSI**3)*EXP(4.5 * LOG(XSIGIMIN)**2) - ZPMIN(3) = ZPMIN(1) * (ZINIRADIUSI**6)*EXP(18. * LOG(XSIGIMIN)**2) + ! Pour la resolution plusieurs cas particuliers seront traites + ZA(:) = 0.0 + ZB(:) = 0.0 + ZC(:) = 0.0 + ZA(:) = -PDMINTRA(:,NM0(JI)) / (PM(:,NM0(JI))**2.0) + ZB(:) = -PDMINTER(:,NM0(JI)) / PM(:,NM0(JI)) + ZC(:) = PDMCOND (:,NM0(JI)) + PDMNUCL(:,NM0(JI)) ! - ZPMIN(4) = XN0JMIN - ZPMIN(5) = ZPMIN(4) * (ZINIRADIUSJ**3)*EXP(4.5 * LOG(XSIGJMIN)**2) - ZPMIN(6) = ZPMIN(4) * (ZINIRADIUSJ**6)*EXP(18. * LOG(XSIGJMIN)**2) + DO JK=1,SIZE(PM,1) + IF ( (ZA(JK) == 0.) .AND. (ZB(JK) == 0.) ) THEN + IF (NVERB .GE. 10) WRITE(*,*) '~~~ CH_AER_SOLV 1.1 : IF 2' + PM(JK,NM0(JI)) = PM(JK,NM0(JI)) + ZC(JK) * PDT + ELSE IF ((ZB(JK) == 0. .AND. ZC(JK)/PM(JK,NM0(JI)) <= 1.e-10).OR. & + (ZC(JK) <= 1.e-10 .AND. ZB(JK)/ZA(JK) <= 1.e-3)) THEN + IF (NVERB .GE. 10) WRITE(*,*) '~~~ CH_AER_SOLV 1.1 : IF 1' + ! type dY/dt=-AY^2 + Z0(JK)=PM(JK,NM0(JI)) + PM(JK,NM0(JI))=Z0(JK)/(1.+ZA(JK)*Z0(JK)*PDT) + ELSE + IF (NVERB .GE. 10) WRITE(*,*) '~~~ CH_AER_SOLV 1.1 : IF 3' + ZCONST1(JK)=ZB(JK)/(2.*ZA(JK)) + Z0(JK)=PM(JK,NM0(JI))+ZCONST1(JK) + IF (((ZB(JK)**2+4.*ZA(JK)*ZC(JK))) < 0.) THEN + ZD(JK)=SQRT(ABS(ZB(JK)**2+4.*ZA(JK)*ZC(JK))) + PM(JK,NM0(JI))=-ZCONST1(JK)+ZD(JK)*TAN(ATAN(Z0(JK)/ZD(JK))-ZA(JK)*ZD(JK)*PDT) + ELSE + ZD(JK)=SQRT(ZB(JK)**2+4.*ZA(JK)*ZC(JK)) + ZCONST2(JK)=ZD(JK)/(2.*ABS(ZA(JK))) + ZKEXP(JK)=EXP(-2.*ZA(JK)*ZCONST2(JK)*PDT) + ZK(JK)=(Z0(JK)-ZCONST2(JK))/(Z0(JK)+ZCONST2(JK))*ZKEXP(JK) + PM(JK,NM0(JI))=-ZCONST1(JK)+ZCONST2(JK)*(1.+ZK(JK))/(1.-ZK(JK)) + ENDIF + ENDIF + ENDDO + ! + PM(:,NM0(JI)) = PM(:,NM0(JI)) + (PDMMERG(:,NM0(JI)) + PSEDA(:,NM0(JI))) * PDT + PM(:,NM0(JI))= MAX(PM(:,NM0(JI)), XMNH_TINY ) + ! + !************************************************************* + ! Resolution du moment d'ordre 3 + ! eq. diff. de type dY/dt = K + !************************************************************* + ! + PM(:,NM3(JI))=PM(:,NM3(JI))+ & + (PDMINTRA(:,NM3(JI))+PDMINTER(:,NM3(JI))+PDMCOND(:,NM3(JI))+& + PDMNUCL(:,NM3(JI))+PDMMERG(:,NM3(JI))+PSEDA(:,NM3(JI)))*PDT + ! + PM(:,NM3(JI))= MAX(PM(:,NM3(JI)), XMNH_TINY) + ! + !************************************************************* + ! Resolution du moment d'ordre 6 + ! eq. diff. de type dY/dt = K + !************************************************************* + ! + PM(:,NM6(JI))=PM(:,NM6(JI))+ & + (PDMINTRA(:,NM6(JI))+PDMINTER(:,NM6(JI))+PDMCOND(:,NM6(JI))+& + PDMNUCL(:,NM6(JI))+PDMMERG(:,NM6(JI))+PSEDA(:,NM6(JI)) )*PDT + ! + PM(:,NM6(JI))= MAX(PM(:,NM6(JI)), XMNH_TINY) ! -!write(*,*) -!write(*,*) '******************************************' -!write(*,*) ' Debut Solveur Aerosol ' -!write(*,*) '******************************************' -!write(*,*) -!write(*,*) 'Pas de temps:',PDT,'s' - -!***************************************************************** -!***************************************************************** -! SOLVEUR DE lA PARTIE MICROPHYSIQUE -!***************************************************************** -!***************************************************************** -! -DO JI=1,JPMODE - -!************************************************************* -! Resolution du moment d'ordre 0: pour cela il faut resoudre -! une equation differentielle du type dY/dt=-AY^2-BY+C -!************************************************************* - - -! Pour la resolution plusieurs cas particuliers seront traites -ZA(:)=0. -ZB(:)=0. -ZC(:)=0. -ZA(:)=PDMINTRA(:,NM0(JI)) -ZB(:)=PDMINTER(:,NM0(JI)) -ZC(:)=PDMCOND(:,NM0(JI)) - - -DO JK=1,SIZE(PM,1) - IF ((ZB(JK) == 0. .AND. ZC(JK)/PM(JK,NM0(JI)) <= 1.e-10).OR. & - (ZC(JK) <= 1.e-10 .AND. ZB(JK)/ZA(JK) <= 1.e-3)) THEN -! type dY/dt=-AY^2 - Z0(JK)=PM(JK,NM0(JI)) - PM(JK,NM0(JI))=Z0(JK)/(1.+ZA(JK)*Z0(JK)*PDT) - ELSE - ZCONST1(JK)=ZB(JK)/(2.*ZA(JK)) - Z0(JK)=PM(JK,NM0(JI))+ZCONST1(JK) - IF (((ZB(JK)**2+4.*ZA(JK)*ZC(JK))) < 0.) THEN - ZD(JK)=SQRT(ABS(ZB(JK)**2+4.*ZA(JK)*ZC(JK))) - PM(JK,NM0(JI))=-ZCONST1(JK)+ZD(JK)*TAN(ATAN(Z0(JK)/ZD(JK))-ZA(JK)*ZD(JK)*PDT) - ELSE - ZD(JK)=SQRT(ZB(JK)**2+4.*ZA(JK)*ZC(JK)) - ZCONST2(JK)=ZD(JK)/(2.*ABS(ZA(JK))) - ZKEXP(JK)=EXP(-2.*ZA(JK)*ZCONST2(JK)*PDT) - ZK(JK)=(Z0(JK)-ZCONST2(JK))/(Z0(JK)+ZCONST2(JK))*ZKEXP(JK) - PM(JK,NM0(JI))=-ZCONST1(JK)+ZCONST2(JK)*(1.+ZK(JK))/(1.-ZK(JK)) - ENDIF - ENDIF -ENDDO - - ! Sedimentation for particules number - -PM(:,NM0(JI))= PM(:,NM0(JI)) + PSEDA(:,NM0(JI)) * PDT -PM(:,NM0(JI))= MAX(PM(:,NM0(JI)), XMNH_TINY ) - - -!************************************************************* -! Resolution du moment d'ordre 3 -!************************************************************* - -PM(:,NM3(JI))=PM(:,NM3(JI))+ & - (PDMINTRA(:,NM3(JI))+PDMINTER(:,NM3(JI))+PDMCOND(:,NM3(JI))+& - PSEDA(:,NM3(JI)))*PDT -PM(:,NM3(JI))= MAX(PM(:,NM3(JI)), XMNH_TINY) - -!************************************************************* -! Resolution du moment d'ordre 6 -!************************************************************* - -PM(:,NM6(JI))=PM(:,NM6(JI))+ (PM(:,NM0(JI))**2*PDMINTRA(:,NM6(JI))+& - PDMINTER(:,NM6(JI))+PDMCOND(:,NM6(JI)) + PSEDA(:,NM6(JI)) )*PDT - -PM(:,NM6(JI))= MAX(PM(:,NM6(JI)), XMNH_TINY) ENDDO - - -!***************************************************************** -!***************************************************************** -! SOLVEUR DE L'EQUILIBRE CHIMIQUE (MARS sera utilise) -!***************************************************************** -!***************************************************************** - +! +!------------------------------------------------------------------------------- +! +!* 3. CHEMICAL EQUILIBRIUM +! -------------------- +! !****************************************************************** ! Calcul de la variation de concentration des differents ! composes pour trouver le nouveau moment d'ordre 3 !****************************************************************** - +! DO JI=1,JPMODE - -! Coagulation intermodale -!------------------------- - -DO JJ=1,NSP+NCARB+NSOA - - PCTOTA(:,JJ,JI)=PCTOTA(:,JJ,JI) & + ! + ! Coagulation intermodale + !------------------------- + ! + DO JJ=1,NSP+NCARB+NSOA + ! + PCTOTA(:,JJ,JI)=PCTOTA(:,JJ,JI) & +(PCCTOT(:,JJ,1)*PDMINTER(:,NM3(JI)) + PCCTOT(:,JJ,JI)* PDMINTRA(:,NM3(JI))) & *XFAC(JJ)*PDT - -! Sedimentation -!-------------- - PCTOTA(:,JJ,JI)= PCTOTA(:,JJ,JI) + PCCTOT(:,JJ,JI)*PSEDA(:,NM3(JI))*XFAC(JJ)*PDT - PCTOTA(:,JJ,JI)= MAX(PCTOTA(:,JJ,JI), XMNH_TINY) - - -ENDDO + ! + ! Sedimentation + !-------------- + PCTOTA(:,JJ,JI)= PCTOTA(:,JJ,JI) + PCCTOT(:,JJ,JI)*PSEDA(:,NM3(JI))*XFAC(JJ)*PDT + PCTOTA(:,JJ,JI)= MAX(PCTOTA(:,JJ,JI), XMNH_TINY) + ! + ENDDO + ! ENDDO - +! ! H2SO4 Condensation + Nucleation !--------------------------------- - - PCTOTA(:,JP_AER_SO4,1)=PCTOTA(:,JP_AER_SO4,1) & - +PDMCOND(:,NM3(1))*XFAC(JP_AER_SO4)*PDT - PCTOTA(:,JP_AER_SO4,2)=PCTOTA(:,JP_AER_SO4,2) & - +PDMCOND(:,NM3(2))*XFAC(JP_AER_SO4)*PDT +! +PCTOTA(:,JP_AER_SO4,1)=PCTOTA(:,JP_AER_SO4,1) & + +(PDMCOND(:,NM3(1))+PDMNUCL(:,NM3(1))+PDMMERG(:,NM3(1)))*XFAC(JP_AER_SO4)*PDT +PCTOTA(:,JP_AER_SO4,2)=PCTOTA(:,JP_AER_SO4,2) & + +(PDMCOND(:,NM3(2))+PDMNUCL(:,NM3(2))+PDMMERG(:,NM3(2)))*XFAC(JP_AER_SO4)*PDT ! !************************************************************* ! Calcul de la fraction massique entre les modes @@ -261,141 +266,152 @@ DO JI=1,JPMODE ZSUM (:) = ZSUM (:) + PCTOTA(:,JJ,JI) ENDDO ENDDO -POM(:,:) = 0. +ZOM(:,:) = 0. DO JI=1,JPMODE DO JJ=1,NSP+NCARB+NSOA - POM(:,JI) = POM(:,JI) + PCTOTA(:,JJ,JI) / ZSUM (:) + ZOM(:,JI) = ZOM(:,JI) + PCTOTA(:,JJ,JI) / ZSUM (:) ENDDO ENDDO - - +! ! Equilibre mineraux !------------------- - +! IDT = INT(MAX(5.*PDT,1.)) +! IF ((PDT .GT. 0.).AND.( MOD(INT(PTIME) , IDT) .EQ. 0)) THEN -!IF (PDT .GT. 0.) THEN - CALL CH_AER_MINERAL(PCTOTG, PCTOTA,PRV, PDENAIR, PPRESSURE, PTEMP, PRC, POM,& - PCCTOT,PSIG0, PRG0, PDT) - -! Equilibre Organiques -!--------------------- - + CALL CH_AER_MINERAL(PCTOTG, PCTOTA,PRV, PDENAIR, PPRESSURE, PTEMP, PRC, ZOM,& + PCCTOT) + ! + ! Equilibre Organiques + !--------------------- + ! IF (NSOA .EQ. 10) CALL CH_AER_ORGANIC(PCTOTG, PCTOTA,PRV, PDENAIR, & PPRESSURE, PTEMP,& - PRC, POM, PCCTOT,PSIG0, PRG0, PDT, PSOLORG) + PRC, ZOM, PCCTOT,PLNSIG, PRG, PDT, PSOLORG) + ! END IF - -! Mass need to be positive -PCTOTA(:,:,:)= MAX (PCTOTA(:,:,:),0.) -PCTOTG(:,:)= MAX (PCTOTG(:,:),0.) - +! +! Forced mass need to be positive +PCTOTA(:,:,:) = MAX(PCTOTA(:,:,:), 0.0) +PCTOTG(:,:) = MAX(PCTOTG(:,:) , 0.0) +! DO JI=1,JPMODE ZSUM(:)=0. DO JJ=1,NSP+NCARB+NSOA - ZSUM(:)=ZSUM(:)+PCTOTA(:,JJ,JI)/XRHOI(JJ) + ZSUM(:)=ZSUM(:)+PCTOTA(:,JJ,JI)/XRHOI(JJ) ENDDO - + ! DO JJ=1,NSP+NCARB+NSOA - PCCTOT(:,JJ,JI)=PCTOTA(:,JJ,JI)/XRHOI(JJ)/ZSUM(:) - + PCCTOT(:,JJ,JI)=PCTOTA(:,JJ,JI)/XRHOI(JJ)/ZSUM(:) ENDDO ENDDO - +! +PMINT(:,:)=PM(:,:) +! +! +!------------------------------------------------------------------------------- +! +!* 4. ADJUSTEMENT OF AEROSOL DISTRIBUTION AFTER CHEMICAL EQUILIBRIUM +! -------------------------------------------------------------- +! +! !****************************************************************************** ! Calcul des nouveaux moments d'ordre 3 et 6 ! Le moment d'ordre 3 est recalcule a partir de la composition de chaque mode ! Le moment d'ordre 6 est calcule pour garder sigma constant pendant l'equilibre chimique !****************************************************************************** -DO JN=1,JPMODE ! - +! 4.1 COMPUTATION OF THE NEW SIGMA +! ---------------------------- +! +DO JN=1,JPMODE + ! IF (JN .EQ. 1) THEN - + ! IF (LVARSIGI) THEN ! variable dispersion for mode 1 - - ZSIGMA(:)=PM(:,NM3(JN))**2./(PM(:,NM0(JN))*PM(:,NM6(JN))) - ZSIGMA(:)=MIN(1-1E-10,ZSIGMA(:)) - ZSIGMA(:)=MAX(1E-10,ZSIGMA(:)) - ZSIGMA(:)= LOG(ZSIGMA(:)) - ZSIGMA(:)= EXP(1./3.*SQRT(-ZSIGMA(:))) + ! + ZSIGMA(:) = PM(:,NM3(JN))**2./(PM(:,NM0(JN))*PM(:,NM6(JN))) + ZSIGMA(:) = MIN(1-1E-10,ZSIGMA(:)) + ZSIGMA(:) = MAX(1E-10,ZSIGMA(:)) + ZSIGMA(:) = LOG(ZSIGMA(:)) + ZSIGMA(:) = EXP(1./3.*SQRT(-ZSIGMA(:))) + ! WHERE (ZSIGMA(:) > XSIGIMAX) - ZSIGMA(:) = XSIGIMAX + ZSIGMA(:) = XSIGIMAX END WHERE + ! WHERE (ZSIGMA(:) < XSIGIMIN) - ZSIGMA(:) = XSIGIMIN + ZSIGMA(:) = XSIGIMIN END WHERE - + ! ELSE ! fixed dispersion for mode 1 ZSIGMA(:) = XINISIGI END IF END IF -! + ! IF (JN .EQ. 2) THEN - + ! IF (LVARSIGJ) THEN ! variable dispersion for mode 2 - - ZSIGMA(:)=PM(:,NM3(JN))**2./(PM(:,NM0(JN))*PM(:,NM6(JN))) - ZSIGMA(:)=MIN(1-1E-10,ZSIGMA(:)) - ZSIGMA(:)=MAX(1E-10,ZSIGMA(:)) - ZSIGMA(:)= LOG(ZSIGMA(:)) - ZSIGMA(:)= EXP(1./3.*SQRT(-ZSIGMA(:))) + ! + ZSIGMA(:) = PM(:,NM3(JN))**2./(PM(:,NM0(JN))*PM(:,NM6(JN))) + ZSIGMA(:) = MIN(1-1E-10,ZSIGMA(:)) + ZSIGMA(:) = MAX(1E-10,ZSIGMA(:)) + ZSIGMA(:) = LOG(ZSIGMA(:)) + ZSIGMA(:) = EXP(1./3.*SQRT(-ZSIGMA(:))) + ! WHERE (ZSIGMA(:) > XSIGJMAX) - ZSIGMA(:) = XSIGJMAX + ZSIGMA(:) = XSIGJMAX END WHERE + ! WHERE (ZSIGMA(:) < XSIGJMIN) - ZSIGMA(:) = XSIGJMIN + ZSIGMA(:) = XSIGJMIN END WHERE - + ! ELSE ! fixed dispersion for mode 2 ZSIGMA(:) = XINISIGJ END IF END IF - - PSIG0(:,JN) = LOG(ZSIGMA(:)) - - PN0(:,JN) = PM(:,NM0(JN)) - + ! + PLNSIG(:,JN) = LOG(ZSIGMA(:)) + ! END DO - +! +! +! 4.2 COMPUTATION OF THE MOMENT 3 AFTER CHEMICAL EQUILIBRIUM +! ------------------------------------------------------ +! DO JN=1,JPMODE -! Calcul du nouveau moment d'ordre 3 - ZNEWM(:,JN)=0. + ZSUM(:)=0.0 DO JJ=1,NSP+NCARB+NSOA - PCTOTA(:,JJ,JN) = MAX(PCTOTA(:,JJ,JN),0.) - ZNEWM(:,JN)=ZNEWM(:,JN)+PCTOTA(:,JJ,JN)/XFAC(JJ) + ZSUM(:) = ZSUM(:)+PCTOTA(:,JJ,JN)/XFAC(JJ) ENDDO - PM(:,NM3(JN))=ZNEWM(:,JN) + PM(:,NM3(JN))=ZSUM(:) END DO - +! +! +! 4.2 COMPUTATION OF THE MOMENT 6 AFTER CHEMICAL EQUILIBRIUM +! ------------------------------------------------------ +! DO JN=1,JPMODE PM(:,NM6(JN)) = PM(:,NM0(JN)) & - * ( (PM(:,NM3(JN))/PM(:,NM0(JN)))**(1./3.) * exp(-(3./2.)*PSIG0(:,JN)**2))**6 & - * exp(18.*PSIG0(:,JN)**2) - - PRG0(:,JN)= (PM(:,NM3(JN))**4/(PM(:,NM6(JN)) * PM(:,NM0(JN))**3))**(1./6.) + * ( (PM(:,NM3(JN))/PM(:,NM0(JN)))**(1./3.) * EXP(-(3./2.)*PLNSIG(:,JN)**2))**6 & + * EXP(18.*PLNSIG(:,JN)**2) ENDDO +! +!------------------------------------------------------------------------------- +! +!* 5. TO AVOID VALUES BELOW MINIMUM REQUIRED +! -------------------------------------- +! !************************************************************* ! Blindages pour valeurs inferieurs au mininmum accepte !************************************************************* -! ratio selon ch_aer_reallfin.f90 ((modifiable) -ZRATIOBC(1) = 5.84E-3 / (5.84E-3+2.336E-2) -ZRATIOOC(1) = 2.336E-2 / (5.84E-3+2.336E-2) -ZRATIOBC(2) = 1.46E-3 / (1.46E-3+5.84E-3) -ZRATIOOC(2) = 5.84E-3 / (1.46E-3+5.84E-3) -ZRGMIN(1) = ZINIRADIUSI / XCOEFRADIMIN -ZRGMIN(2) = ZINIRADIUSJ / XCOEFRADJMIN -ZRGMAX(1) = XCOEFRADIMAX * ZINIRADIUSI -ZRGMAX(2) = XCOEFRADJMAX * ZINIRADIUSJ - +! DO JN=1,JPMODE ZMASK(:,JN) = 1. WHERE ((PM(:,NM0(JN)) .LT. ZPMIN(NM0(JN))).OR.& (PM(:,NM3(JN)) .LT. ZPMIN(NM3(JN))).OR.& (PM(:,NM6(JN)) .LT. ZPMIN(NM6(JN)))) -! (PM(:,NM6(JN)) .LE. ZPMIN(NM6(JN))).OR.& -! (PRG0(:,JN)) .LE. ZRGMIN(JN).OR.& -! (PRG0(:,JN)) .GT. ZRGMAX(JN)) PM(:,NM0(JN)) = ZPMIN(NM0(JN)) PM(:,NM3(JN)) = ZPMIN(NM3(JN)) @@ -407,11 +423,12 @@ DO JN=1,JPMODE PCTOTA(:,JJ,JN) = PCTOTA(:,JJ,JN) * ZMASK(:,JN) ENDDO WHERE (ZMASK(:,JN) == 0.) - PCTOTA(:,JP_AER_BC,JN) = ZRATIOBC(JN) * ZPMIN(NM3(JN)) * XFAC(JP_AER_BC) - PCTOTA(:,JP_AER_OC,JN) = ZRATIOOC(JN) * ZPMIN(NM3(JN)) * XFAC(JP_AER_OC) + PCTOTA(:,JP_AER_BC,JN) = 0.5 * ZPMIN(NM3(JN)) * XFAC(JP_AER_BC) + PCTOTA(:,JP_AER_OC,JN) = 0.5 * ZPMIN(NM3(JN)) * XFAC(JP_AER_OC) END WHERE - + ! ENDDO ! +PMEND(:,:)=PM(:,:) ! END SUBROUTINE CH_AER_SOLV diff --git a/src/MNH/ch_aer_vehkamaki.f90 b/src/MNH/ch_aer_vehkamaki.f90 new file mode 100644 index 0000000000000000000000000000000000000000..1ffc4e276b1986ccb50e4604894f7f3ae46fec18 --- /dev/null +++ b/src/MNH/ch_aer_vehkamaki.f90 @@ -0,0 +1,216 @@ +!ORILAM_LIC Copyright 1994-2014 CNRS, Meteo-France and Universite Paul Sabatier +!ORILAM_LIC This is part of the ORILAM software governed by the CeCILL-C licence +!ORILAM_LIC version 1. See LICENSE, CeCILL-C_V1-en.txt and CeCILL-C_V1-fr.txt +!ORILAM_LIC for details. +!----------------------------------------------------------------- +!--------------- special set of characters for RCS information +!----------------------------------------------------------------- +! $Source: /home/cvsroot/MNH-VX-Y-Z/src/MNH/ch_aer_nucl.f90,v $ $Revision: 1.1.4.1.18.1 $ +! MASDEV4_7 chimie 2006/05/18 13:07:25 +!----------------------------------------------------------------- +!! ################################ +MODULE MODI_CH_AER_VEHKAMAKI +!! ################################ +!! +INTERFACE + !! + SUBROUTINE CH_AER_VEHKAMAKI(PRH,PTEMP,PSULF,PJNUC,PRC) + IMPLICIT NONE + !! + REAL, DIMENSION(:), INTENT(IN) :: PRH, PTEMP, PSULF + REAL, DIMENSION(:), INTENT(INOUT) :: PJNUC, PRC + !! + END SUBROUTINE CH_AER_VEHKAMAKI + !! +END INTERFACE +!! +END MODULE MODI_CH_AER_VEHKAMAKI +!! +!! ######################################################################### +SUBROUTINE CH_AER_VEHKAMAKI(PRH,PTEMP,PSULF,PJNUC,PRC) +!! ######################################################################### +!! +!! PURPOSE +!! ------- +!! +!! Compute nucleation rate for binary sulfate/H2O +!! This is the Vhekamaki parametrization (2002) +!! +!! Valid for : +!! 230.15 < T < 305.15 (K) +!! 0.01 < RH < 100 (%) +!! 10â´ < [H2SO4]gas < 10¹¹ (molec/cm3) +!! +!! +!! AUTHOR +!! ------ +!! B. Foucart (18/06/2018) +!! +!! MODIFICATIONS +!! ------------- +!! +!---------------------------------------------------------------------------- +! +!* 0. DECLARATIONS +! ------------ +! +USE MODD_CONF , ONLY : NVERB +USE MODD_CH_AEROSOL +! +! +IMPLICIT NONE +! +!* 0.1 Declarations of arguments : +! +REAL, DIMENSION(:), INTENT(IN) :: PRH,PTEMP, PSULF +REAL, DIMENSION(:), INTENT(INOUT) :: PJNUC, PRC ! Nucleation rate (#/cm3/s) , Radius of the critical cluster (nm) +! +!* 0.2 Declarations of local variables : +! +REAL, DIMENSION(SIZE(PSULF,1)) :: ZCOJA,ZCOJB,ZCOJC,ZCOJD,ZCOJE,ZCOJF,ZCOJG,ZCOJH,ZCOJI,ZCOJJ +REAL, DIMENSION(SIZE(PSULF,1)) :: ZCOENA,ZCOENB,ZCOENC,ZCOEND,ZCOENE,ZCOENF,ZCOENG,ZCOENH,ZCOENI,ZCOENJ +REAL, DIMENSION(SIZE(PSULF,1)) :: ZSULF +REAL, DIMENSION(SIZE(PSULF,1)) :: ZNTOT,ZRC,ZAL +REAL, PARAMETER :: ZCSTAVOG = 6.0221367E+11 ! Avogadro number +INTEGER :: II, ITEST +! +!---------------------------------------------------------------------------- +! +! Parameters initialization +! +ZSULF(:) = 1.E4 ! must vary between 10E4 and 10E11 +ZAL(:) = 0.17 ! must vary between 0.17 and 0.62 +PJNUC(:) = 1E-7 ! must vary between 10E-7 and 10E9 cm3.s-1 +PRC(:) = 0.35 ! must vary between 0.35 and 0.92 nm +ZNTOT(:) = 10. ! must vary between 4 and 70 molecules +ZCOJA(:) = 0. +ZCOJB(:) = 0. +ZCOJC(:) = 0. +ZCOJD(:) = 0. +ZCOJE(:) = 0. +ZCOJF(:) = 0. +ZCOJG(:) = 0. +ZCOJH(:) = 0. +ZCOJI(:) = 0. +ZCOJJ(:) = 0. +ZCOENA(:) = 0. +ZCOENB(:) = 0. +ZCOENC(:) = 0. +ZCOEND(:) = 0. +ZCOENE(:) = 0. +ZCOENF(:) = 0. +ZCOENG(:) = 0. +ZCOENH(:) = 0. +ZCOENI(:) = 0. +ZCOENJ(:) = 0. +! +! **** Define a local variable for PSUFL that we convert in to molec/cm3 for calculations **** +! +! a. Restrictions for nucleation + +! +! ZSULF(:) = MAX(MIN(PSULF(:),1.E11), 0.) +! + ZSULF(:) = PSULF(:) +! +! b. ZSULF from ug/m3 to molec/cm3 +! + ZSULF(:) = ZSULF(:)*ZCSTAVOG / XH2SO4 +! +!---------------------------------------------------------------------------- +! +!! **** START Vehkamaki calculations **** +! +ITEST = 0. +! +! Conditions +! +WHERE ((ZSULF(:) > 1.E4 .AND. ZSULF(:) < 1.E11).AND.(PRH(:) > 0.01).AND.(PTEMP(:)>230.15)) +! +! 1) Mole fraction of H2SO4 in the critical cluster (no unity) +! +ZAL(:) = 0.740997-0.00266379*PTEMP(:)-& + 0.00349998*LOG(ZSULF(:))+0.0000504022*PTEMP(:)*LOG(ZSULF(:))+& + 0.00201048*LOG(PRH(:))-0.000183289*PTEMP(:)*LOG(PRH(:))+& + 0.00157407*(LOG(PRH(:)))**2-0.0000179059*PTEMP(:)*(LOG(PRH(:)))**2+& + 0.000184403*(LOG(PRH(:)))**3-1.50345E-6*PTEMP(:)*LOG(PRH(:))**3 +! +! 2) Coefficient calculations for the NUCLEATION RATE (function of temperature and mole fraction) +! +ZCOJA(:) = 0.14309+2.21956*PTEMP(:)-0.0273911*(PTEMP(:))**2+& + 0.0000722811*(PTEMP(:))**3+(5.91822/ZAL(:)) +! +ZCOJB(:) = 0.117489+0.462532*PTEMP(:)-0.0118059*(PTEMP(:))**2+& + 0.0000404196*(PTEMP(:))**3+(15.7963/ZAL(:)) +! +ZCOJC(:) = -0.21554-0.0810269*PTEMP(:)+0.001143581*(PTEMP(:))**2-& + 4.7758E-6*(PTEMP(:))**3-(2.91297/ZAL(:)) +! +ZCOJD(:) = -3.58856+0.049508*PTEMP(:)-0.00021382*(PTEMP(:))**2+& + 3.10801E-7*(PTEMP(:))**3-(0.0293333/ZAL(:)) +! +ZCOJE(:) = 1.14598-0.600796*PTEMP(:)+0.00864245*(PTEMP(:))**2-& + 0.0000228947*(PTEMP(:))**3-(8.44985/ZAL(:)) +! +ZCOJF(:) = 2.15855+0.0808121*PTEMP(:)-0.000407382*(PTEMP(:))**2-& + 4.01957E-7*(PTEMP(:))**3+(0.721326/ZAL(:)) +! +ZCOJG(:) = 1.6241-0.0160106*PTEMP(:)+0.0000377124*(PTEMP(:))**2+& + 3.21794E-8*(PTEMP(:))**3-(0.0113255/ZAL(:)) +! +ZCOJH(:) = 9.71682-0.115048*PTEMP(:)+0.000157098*(PTEMP(:))**2+& + 4.00914E-7*(PTEMP(:))**3+(0.71186/ZAL(:)) +! +ZCOJI(:) = -1.05611+0.00903378*PTEMP(:)-0.0000198417*(PTEMP(:))**2+& + 2.46048E-8*(PTEMP(:))**3-(0.0579087/ZAL(:)) +! +ZCOJJ(:) = -0.148712+0.00283508*PTEMP(:)-9.24619E-6*(PTEMP(:))**2+& + 5.00427E-9*(PTEMP(:))**3-(0.0127081/ZAL(:)) +! +! 3) NUCLEATION RATE calculation (part.cm-3.s-1) +! +PJNUC(:) = EXP(ZCOJA(:)+ZCOJB(:)*LOG(PRH(:))+& + ZCOJC(:)*(LOG(PRH(:)))**2+ZCOJD(:)*(LOG(PRH(:)))**3+& + ZCOJE(:)*LOG(ZSULF(:))+ZCOJF(:)*LOG(PRH(:))*LOG(ZSULF(:))+& + ZCOJG(:)*(LOG(PRH(:)))**2*LOG(ZSULF(:))+ZCOJH(:)*(LOG(ZSULF(:)))**2+& + ZCOJI(:)*LOG(PRH(:))*(LOG(ZSULF(:)))**2+ZCOJJ(:)*(LOG(ZSULF(:)))**3) +! +! 4) Coefficient calculations for the MOLECULE NUMBER in the critical cluster (function of temperature and mole fraction) +! +ZCOENA(:) = -0.00295413-0.0976834*PTEMP(:)+0.00102485*(PTEMP(:))**2-2.18646E-6*(PTEMP(:))**3-(0.101717/ZAL(:)) +! +ZCOENB(:) = -0.00205064-0.00758504*PTEMP(:)+0.000192654*(PTEMP(:))**2-6.7043E-7*(PTEMP(:))**3-(0.255774/ZAL(:)) +! +ZCOENC(:) = 0.00322308+0.000852637*PTEMP(:)-0.0000154757*(PTEMP(:))**2+5.66661E-8*(PTEMP(:))**3+(0.0338444/ZAL(:)) +! +ZCOEND(:) = 0.0474323-0.000625104*PTEMP(:)+2.65066E-6*(PTEMP(:))**2-3.67471E-9*(PTEMP(:))**3-(0.000267251/ZAL(:)) +! +ZCOENE(:) = -0.0125211+0.00580655*PTEMP(:)-0.000101674*(PTEMP(:))**2+2.88195E-7*(PTEMP(:))**3+(0.0942243/ZAL(:)) +! +ZCOENF(:) = -0.038546-0.000672316*PTEMP(:)+2.60288E-6*(PTEMP(:))**2+1.19416E-8*(PTEMP(:))**3-(0.00851515/ZAL(:)) +! +ZCOENG(:) = -0.0183749+0.000172072*PTEMP(:)-3.71766E-7*(PTEMP(:))**2-5.14875E-10*(PTEMP(:))**3+(0.00026866/ZAL(:)) +! +ZCOENH(:) = -0.0619974+0.000906958*PTEMP(:)-9.11728E-7*(PTEMP(:))**2-5.36796E-9*(PTEMP(:))**3-(0.00774234/ZAL(:)) +! +ZCOENI(:) = 0.0121827-0.00010665*PTEMP(:)+2.5346E-7*(PTEMP(:))**2-3.63519E-10*(PTEMP(:))**3+(0.000610065/ZAL(:)) +! +ZCOENJ(:) = 0.000320184-0.0000174762*PTEMP(:)+6.06504E-8*(PTEMP(:))**2-1.42177E-11*(PTEMP(:))**3+(0.000135751/ZAL(:)) +! +! 5) MOLECULE NUMBER in the critical cluster calculation (should be between 4 +! and 70) +! +ZNTOT(:) = EXP(ZCOENA(:)+ZCOENB(:)*LOG(PRH(:))+ZCOENC(:)*(LOG(PRH(:)))**2+ZCOEND(:)*(LOG(PRH(:)))**3+& + ZCOENE(:)*LOG(ZSULF(:))+ZCOENF(:)*LOG(PRH(:))*LOG(ZSULF(:))+ZCOENG(:)*(LOG(PRH(:)))**2*LOG(ZSULF(:))+& + ZCOENH(:)*(LOG(ZSULF(:)))**2+ZCOENI(:)*LOG(PRH(:))*(LOG(ZSULF(:)))**2+ZCOENJ(:)*(LOG(ZSULF(:)))**3) +! +! 6) Cluster's radius in nm (should be between 0.35 and 0.92) +! +PRC(:) = EXP(-1.6524245 + 0.42316402 * ZAL(:) + 0.3346648 * LOG(ZNTOT(:))) +! +END WHERE + +! +! +RETURN +END SUBROUTINE CH_AER_VEHKAMAKI diff --git a/src/MNH/ch_ini_orilam.f90 b/src/MNH/ch_ini_orilam.f90 index a317f49cb71b239f231abcf4ada36fa7c681a3b6..38a1f31f78be4392ac61536b8ba75ca7b948fed7 100644 --- a/src/MNH/ch_ini_orilam.f90 +++ b/src/MNH/ch_ini_orilam.f90 @@ -1,18 +1,18 @@ -!ORILAM_LIC Copyright 1994-2019 CNRS, Meteo-France and Universite Paul Sabatier +!ORILAM_LIC Copyright 1994-2014 CNRS, Meteo-France and Universite Paul Sabatier !ORILAM_LIC This is part of the ORILAM software governed by the CeCILL-C licence !ORILAM_LIC version 1. See LICENSE, CeCILL-C_V1-en.txt and CeCILL-C_V1-fr.txt !ORILAM_LIC for details. -!----------------------------------------------------------------- -!! ########################### +!! ######################### MODULE MODI_CH_INI_ORILAM -!! ########################### +!! ######################### !! INTERFACE - SUBROUTINE CH_INI_ORILAM(PM, PSIG0, PRG0, PN0,PCTOTG, PCTOTA, PCCTOT, & - PSEDA, POM, PRHOP0, PAERO,PCHEM,PRV, PDENAIR,& - PPRESSURE, PTEMP, PRC, PFRAC, PMI, GSCHEME) +!! +SUBROUTINE CH_INI_ORILAM(PM, PSIG0, PRG0, PN0,PCTOTG, PCTOTA, PCCTOT, & + PSEDA, PRHOP0, PAERO,PCHEM,PRV, PDENAIR, & + PPRESSURE, PTEMP, PRC, PFRAC, PMI, GSCHEME ) IMPLICIT NONE -REAL, DIMENSION(:,:), INTENT(INOUT) :: PM, POM +REAL, DIMENSION(:,:), INTENT(INOUT) :: PM REAL, DIMENSION(:,:), INTENT(INOUT) :: PSEDA REAL, DIMENSION(:,:), INTENT(INOUT) :: PSIG0, PRG0, PN0 REAL, DIMENSION(:,:), INTENT(INOUT) :: PCTOTG @@ -23,28 +23,25 @@ REAL, DIMENSION(:,:), INTENT(INOUT) :: PFRAC REAL, DIMENSION(:,:), INTENT(INOUT) :: PMI REAL, DIMENSION(:), INTENT(IN) :: PRV, PDENAIR, PPRESSURE, PTEMP, PRC CHARACTER(LEN=10), INTENT(IN) :: GSCHEME - - - END SUBROUTINE CH_INI_ORILAM +!! END INTERFACE !! END MODULE MODI_CH_INI_ORILAM !! -!! -!! ########################################## +!! ####################################################################### SUBROUTINE CH_INI_ORILAM(PM, PSIG0, PRG0, PN0,PCTOTG, PCTOTA, PCCTOT, & - PSEDA, POM, PRHOP0, PAERO, PCHEM, PRV, PDENAIR,& - PPRESSURE, PTEMP, PRC, PFRAC, PMI, GSCHEME) -!! ########################################## + PSEDA, PRHOP0, PAERO, PCHEM, PRV, PDENAIR, & + PPRESSURE, PTEMP, PRC, PFRAC, PMI, GSCHEME ) +!! ####################################################################### !! !! PURPOSE !! ------- -!! initialize the aerosol variables (vectorwise) by calling NNARES +!! initialize the aerosol variables (vectorwise) by calling NNARES !! !! METHOD !! ------- -!! call the solver with zero coag/growth/cond terms +!! call the solver with zero coag/growth/cond terms !! then only ares should be active and we won't need to recode everyting !! here ;-) !! @@ -59,39 +56,36 @@ END MODULE MODI_CH_INI_ORILAM !! MODIFICATIONS !! ------------- !! Original -! P. Wautelet 10/04/2019: replace ABORT and STOP calls by Print_msg -!! +!! !! EXTERNAL !! -------- !! -!! IMPLICIT ARGUMENTS -!! ------------------ -USE MODD_CH_AEROSOL -USE MODD_CH_M9_n, ONLY : CNAMES -USE MODD_CST, ONLY : & - XPI & !Definition of pi - ,XBOLTZ & ! Boltzman constant - ,XAVOGADRO & ![molec/mol] avogadros number - ,XG & ! Gravity constant - ,XP00 & ! Reference pressure - ,XMD & ![kg/mol] molar weight of air - ,XRD & ! Gaz constant for dry air - ,XCPD ! Cpd (dry air) -USE MODD_CSTS_DUST, ONLY : XDENSITY_DUST +!------------------------------------------------------------------------------- ! -use mode_msg +!* 0. DECLARATIONS +! ------------ ! USE MODI_CH_AER_SOLV USE MODI_CH_AER_TRANS -! -!* 0. DECLARATIONS -! ------------ +USE MODD_CH_AEROSOL +USE MODD_CSTS_DUST, ONLY : XDENSITY_DUST +USE MODD_CH_M9_n, ONLY : CNAMES +USE MODD_CST, ONLY : & + XPI & ! Definition of pi + ,XBOLTZ & ! Boltzman constant + ,XAVOGADRO & ! [molec/mol] avogadros number + ,XG & ! Gravity constant + ,XP00 & ! Reference pressure + ,XMD & ! [kg/mol] molar weight of air + ,XRD & ! Gaz constant for dry air + ,XCPD ! Cpd (dry air) +USE MODD_CONF, ONLY : NVERB ! IMPLICIT NONE ! !* 0.1 declarations of arguments ! -REAL, DIMENSION(:,:), INTENT(INOUT) :: PM, POM +REAL, DIMENSION(:,:), INTENT(INOUT) :: PM REAL, DIMENSION(:,:), INTENT(INOUT) :: PSEDA REAL, DIMENSION(:,:), INTENT(INOUT) :: PSIG0, PRG0, PN0 REAL, DIMENSION(:,:), INTENT(INOUT) :: PCTOTG @@ -105,32 +99,43 @@ CHARACTER(LEN=10), INTENT(IN) :: GSCHEME ! !* 0.2 declarations of local variables ! -character(len=10) :: yspec ! String for error message -REAL, DIMENSION(SIZE(PM,1),(JPMODE)*3) :: ZDMINTRA, ZDMINTER, ZDMCOND +REAL, DIMENSION(SIZE(PM,1),(JPMODE)*3) :: ZDMINTRA, ZDMINTER, ZDMCOND, ZDMNUCL, ZDMMERG REAL, DIMENSION(SIZE(PM,1),JPMODE) :: ZMASK, ZSOLORG - +REAL, DIMENSION(SIZE(PM,1),(JPMODE)*3) :: ZMBEG, ZMINT, ZMEND +! INTEGER :: JJ, JI ! -POM(:,:) = 0. +!------------------------------------------------------------------------------- +! +!* 1. INITIALIZATION +! -------------- +! PFRAC(:,:) = 0. PSEDA(:,:) = 0. ZDMINTRA(:,:) = 0. ZDMINTER(:,:) = 0. ZDMCOND(:,:) = 0. +ZDMNUCL(:,:) = 0. +ZDMMERG(:,:) = 0. ZSOLORG(:,:) = 0. ZMASK(:,:) = 1. +ZMBEG(:,:) = 0. +ZMINT(:,:) = 0. +ZMEND(:,:) = 0. ! ! Initialization of constants -XPI = 2.*ASIN(1.) -XBOLTZ = 1.380658E-23 +! +XPI = 2.*ASIN(1.) +XBOLTZ = 1.380658E-23 XAVOGADRO = 6.0221367E+23 -XG = 9.80665 -XP00 = 1.E5 -XMD = 28.9644E-3 -XRD = XAVOGADRO * XBOLTZ / XMD -XCPD = 7.* XRD /2. +XG = 9.80665 +XP00 = 1.E5 +XMD = 28.9644E-3 +XRD = XAVOGADRO * XBOLTZ / XMD +XCPD = 7.* XRD /2. ! ! Moments index +! NM0(1) = 1 NM3(1) = 2 NM6(1) = 3 @@ -140,19 +145,23 @@ NM6(2) = 6 ! ! Aerosol Density ! Cf Ackermann (all to black carbon except water) -XRHOI(:) = 1.8e3 +XRHOI(:) = 1.8e3 XRHOI(JP_AER_H2O) = 1.0e3 ! water XRHOI(JP_AER_DST) = XDENSITY_DUST ! water ! +! Facteur de conversion : +! [um3_aer/m3_air] = [ug_aer/m3_air] / XFAC DO JJ=1,NSP+NCARB+NSOA - XFAC(JJ)=(4./3.)*XPI*XRHOI(JJ)*1.e-9 + XFAC(JJ)=(4./3.)*XPI*XRHOI(JJ)*1.E-9 ENDDO ! ! verify that all array elements are defined DO JI = 1, SIZE(XRHOI) IF (XRHOI(JI) .LE. 0.0) THEN - write( yspec, '( I10 )' ) JI - call Print_msg( NVERB_FATAL, 'GEN', 'CH_AER_MOD_INIT', 'density for species '//trim(yspec)//' not defined' ) + PRINT *, 'CH_AER_MOD_INIT ERROR: density for species ', JI, ' not defined' + ! callabortstop + CALL ABORT + STOP 'CH_AER_MOD_INIT ERROR: density not defined' END IF ENDDO ! @@ -161,107 +170,118 @@ ENDDO JP_CH_SO42M = 0 ! unuse in many schemes ! DO JJ=1,SIZE(CNAMES) -! for heterogeneous chemistry -IF (CNAMES(JJ) == "O3") JP_CH_O3 = JJ -IF (CNAMES(JJ) == "SO2") JP_CH_SO2 = JJ -IF (CNAMES(JJ) == "SO42M") JP_CH_SO42M = JJ -IF (CNAMES(JJ) == "H2O2") JP_CH_H2O2 = JJ - -! Inorganics -IF (CNAMES(JJ) == "HNO3") JP_CH_HNO3 = JJ -IF (CNAMES(JJ) == "NH3") JP_CH_NH3 = JJ -IF ((CNAMES(JJ) == "H2SO4").OR.(CNAMES(JJ) == "SULF")) JP_CH_H2SO4 = JJ - -! SOA group 1 -IF (CNAMES(JJ) == "URG1") JP_CH_URG1 = JJ -IF (CNAMES(JJ) == "UR21") JP_CH_UR21 = JJ -IF (CNAMES(JJ) == "UR28") JP_CH_UR28 = JJ - -! SOA group 2 -IF (CNAMES(JJ) == "URG2") JP_CH_URG2 = JJ -IF (CNAMES(JJ) == "RPG2") JP_CH_RPG2 = JJ -IF (CNAMES(JJ) == "RP18") JP_CH_RP18 = JJ -IF (CNAMES(JJ) == "UR29") JP_CH_UR29 = JJ -IF (CNAMES(JJ) == "UR30") JP_CH_UR30 = JJ -IF (CNAMES(JJ) == "RP13") JP_CH_RP13 = JJ -IF (CNAMES(JJ) == "RP17") JP_CH_RP17 = JJ - -! SOA group 3 -IF (CNAMES(JJ) == "RPG3") JP_CH_RPG3 = JJ -IF (CNAMES(JJ) == "RPR9") JP_CH_RPR9 = JJ -IF (CNAMES(JJ) == "RP12") JP_CH_RP12 = JJ - -! SOA group 4 -IF (CNAMES(JJ) == "URG4") JP_CH_URG4 = JJ -IF (CNAMES(JJ) == "UR8") JP_CH_UR8 = JJ ! only for MPMPO (for PUN it is group 10) -IF (CNAMES(JJ) == "UR3") JP_CH_UR3 = JJ -IF (CNAMES(JJ) == "UR23") JP_CH_UR23 = JJ - -! SOA group 5 -IF (CNAMES(JJ) == "UR17") JP_CH_UR17 = JJ -IF (CNAMES(JJ) == "AP7") JP_CH_AP7 = JJ -IF (CNAMES(JJ) == "UR7") JP_CH_UR7 = JJ ! only for MPMPO (for PUN it is group 10) -IF (CNAMES(JJ) == "RPR3") JP_CH_RPR3 = JJ ! only for PUN (for MPMPO it is not a SOA precursor) - -! SOA group 6 -IF (CNAMES(JJ) == "URG6") JP_CH_URG6 = JJ -IF (CNAMES(JJ) == "ARAC") JP_CH_ARAC = JJ -IF (CNAMES(JJ) == "UR22") JP_CH_UR22 = JJ ! only for PUN (for MPMPO it is not a SOA precursor) -IF (CNAMES(JJ) == "UR31") JP_CH_UR31 = JJ -IF (CNAMES(JJ) == "AP1") JP_CH_AP1 = JJ -IF (CNAMES(JJ) == "AP6") JP_CH_AP6 = JJ - -! SOA group 7 -IF (CNAMES(JJ) == "URG7") JP_CH_URG7 = JJ -IF (CNAMES(JJ) == "RPG7") JP_CH_RPG7 = JJ -IF (CNAMES(JJ) == "RPR7") JP_CH_RPR7 = JJ -IF (CNAMES(JJ) == "RPR4") JP_CH_RPR4 = JJ ! only for PUN (for MPMPO it is not a SOA precursor) -IF (CNAMES(JJ) == "RP14") JP_CH_RP14 = JJ ! only for PUN (for MPMPO it is not a SOA precursor) -IF (CNAMES(JJ) == "RP19") JP_CH_RP19 = JJ ! only for PUN (for MPMPO it is not a SOA precursor) -IF (CNAMES(JJ) == "ADAC") JP_CH_ADAC = JJ -IF (CNAMES(JJ) == "UR2") JP_CH_UR2 = JJ -IF (CNAMES(JJ) == "UR14") JP_CH_UR14 = JJ -IF (CNAMES(JJ) == "UR27") JP_CH_UR27 = JJ - -! SOA group 8 -IF (CNAMES(JJ) == "URG8") JP_CH_URG8 = JJ -IF (CNAMES(JJ) == "UR19") JP_CH_UR19 = JJ ! only for MPMPO (for PUN it is not a SOA precursor) -IF (CNAMES(JJ) == "UR11") JP_CH_UR11 = JJ -IF (CNAMES(JJ) == "UR15") JP_CH_UR15 = JJ -IF (CNAMES(JJ) == "AP10") JP_CH_AP10 = JJ - -! SOA group 9 -IF (CNAMES(JJ) == "URG9") JP_CH_URG9 = JJ -IF (CNAMES(JJ) == "UR20") JP_CH_UR20 = JJ -IF (CNAMES(JJ) == "UR34") JP_CH_UR34 = JJ -IF (CNAMES(JJ) == "AP11") JP_CH_AP11 = JJ -IF (CNAMES(JJ) == "AP12") JP_CH_AP12 = JJ -IF (CNAMES(JJ) == "UR26") JP_CH_UR26 = JJ - -! SOA group 10 -IF (CNAMES(JJ) == "URG10") JP_CH_URG10 = JJ -IF (CNAMES(JJ) == "PAN8") JP_CH_PAN8 = JJ ! only for PUN (for MPMPO it is not a SOA precursor) -IF (CNAMES(JJ) == "UR5") JP_CH_UR5 = JJ -IF (CNAMES(JJ) == "UR6") JP_CH_UR6 = JJ -IF (CNAMES(JJ) == "UR7") JP_CH_UR7 = JJ -IF (CNAMES(JJ) == "UR8") JP_CH_UR8 = JJ -IF (CNAMES(JJ) == "AP8") JP_CH_AP8 = JJ - + ! + ! for heterogeneous chemistry + ! + IF (CNAMES(JJ) == "O3") JP_CH_O3 = JJ + IF (CNAMES(JJ) == "SO2") JP_CH_SO2 = JJ + IF (CNAMES(JJ) == "SO42M") JP_CH_SO42M = JJ + IF (CNAMES(JJ) == "H2O2") JP_CH_H2O2 = JJ + ! + ! Inorganics + ! + IF (CNAMES(JJ) == "HNO3") JP_CH_HNO3 = JJ + IF (CNAMES(JJ) == "NH3") JP_CH_NH3 = JJ + IF ((CNAMES(JJ) == "H2SO4").OR.(CNAMES(JJ) == "SULF")) JP_CH_H2SO4 = JJ + ! + ! SOA group 1 + ! + IF (CNAMES(JJ) == "URG1") JP_CH_URG1 = JJ + IF (CNAMES(JJ) == "UR21") JP_CH_UR21 = JJ + IF (CNAMES(JJ) == "UR28") JP_CH_UR28 = JJ + ! + ! SOA group 2 + ! + IF (CNAMES(JJ) == "URG2") JP_CH_URG2 = JJ + IF (CNAMES(JJ) == "RPG2") JP_CH_RPG2 = JJ + IF (CNAMES(JJ) == "RP18") JP_CH_RP18 = JJ + IF (CNAMES(JJ) == "UR29") JP_CH_UR29 = JJ + IF (CNAMES(JJ) == "UR30") JP_CH_UR30 = JJ + IF (CNAMES(JJ) == "RP13") JP_CH_RP13 = JJ + IF (CNAMES(JJ) == "RP17") JP_CH_RP17 = JJ + ! + ! SOA group 3 + ! + IF (CNAMES(JJ) == "RPG3") JP_CH_RPG3 = JJ + IF (CNAMES(JJ) == "RPR9") JP_CH_RPR9 = JJ + IF (CNAMES(JJ) == "RP12") JP_CH_RP12 = JJ + ! + ! SOA group 4 + ! + IF (CNAMES(JJ) == "URG4") JP_CH_URG4 = JJ + IF (CNAMES(JJ) == "UR8") JP_CH_UR8 = JJ ! only for MPMPO (for PUN it is group 10) + IF (CNAMES(JJ) == "UR3") JP_CH_UR3 = JJ + IF (CNAMES(JJ) == "UR23") JP_CH_UR23 = JJ + ! + ! SOA group 5 + ! + IF (CNAMES(JJ) == "UR17") JP_CH_UR17 = JJ + IF (CNAMES(JJ) == "AP7") JP_CH_AP7 = JJ + IF (CNAMES(JJ) == "UR7") JP_CH_UR7 = JJ ! only for MPMPO (for PUN it is group 10) + IF (CNAMES(JJ) == "RPR3") JP_CH_RPR3 = JJ ! only for PUN (for MPMPO it is not a SOA precursor) + ! + ! SOA group 6 + ! + IF (CNAMES(JJ) == "URG6") JP_CH_URG6 = JJ + IF (CNAMES(JJ) == "ARAC") JP_CH_ARAC = JJ + IF (CNAMES(JJ) == "UR22") JP_CH_UR22 = JJ ! only for PUN (for MPMPO it is not a SOA precursor) + IF (CNAMES(JJ) == "UR31") JP_CH_UR31 = JJ + IF (CNAMES(JJ) == "AP1") JP_CH_AP1 = JJ + IF (CNAMES(JJ) == "AP6") JP_CH_AP6 = JJ + ! + ! SOA group 7 + ! + IF (CNAMES(JJ) == "URG7") JP_CH_URG7 = JJ + IF (CNAMES(JJ) == "RPG7") JP_CH_RPG7 = JJ + IF (CNAMES(JJ) == "RPR7") JP_CH_RPR7 = JJ + IF (CNAMES(JJ) == "RPR4") JP_CH_RPR4 = JJ ! only for PUN (for MPMPO it is not a SOA precursor) + IF (CNAMES(JJ) == "RP14") JP_CH_RP14 = JJ ! only for PUN (for MPMPO it is not a SOA precursor) + IF (CNAMES(JJ) == "RP19") JP_CH_RP19 = JJ ! only for PUN (for MPMPO it is not a SOA precursor) + IF (CNAMES(JJ) == "ADAC") JP_CH_ADAC = JJ + IF (CNAMES(JJ) == "UR2") JP_CH_UR2 = JJ + IF (CNAMES(JJ) == "UR14") JP_CH_UR14 = JJ + IF (CNAMES(JJ) == "UR27") JP_CH_UR27 = JJ + ! + ! SOA group 8 + ! + IF (CNAMES(JJ) == "URG8") JP_CH_URG8 = JJ + IF (CNAMES(JJ) == "UR19") JP_CH_UR19 = JJ ! only for MPMPO (for PUN it is not a SOA precursor) + IF (CNAMES(JJ) == "UR11") JP_CH_UR11 = JJ + IF (CNAMES(JJ) == "UR15") JP_CH_UR15 = JJ + IF (CNAMES(JJ) == "AP10") JP_CH_AP10 = JJ + ! + ! SOA group 9 + ! + IF (CNAMES(JJ) == "URG9") JP_CH_URG9 = JJ + IF (CNAMES(JJ) == "UR20") JP_CH_UR20 = JJ + IF (CNAMES(JJ) == "UR34") JP_CH_UR34 = JJ + IF (CNAMES(JJ) == "AP11") JP_CH_AP11 = JJ + IF (CNAMES(JJ) == "AP12") JP_CH_AP12 = JJ + IF (CNAMES(JJ) == "UR26") JP_CH_UR26 = JJ + ! + ! SOA group 10 + ! + IF (CNAMES(JJ) == "URG10") JP_CH_URG10 = JJ + IF (CNAMES(JJ) == "PAN8") JP_CH_PAN8 = JJ ! only for PUN (for MPMPO it is not a SOA precursor) + IF (CNAMES(JJ) == "UR5") JP_CH_UR5 = JJ + IF (CNAMES(JJ) == "UR6") JP_CH_UR6 = JJ + IF (CNAMES(JJ) == "UR7") JP_CH_UR7 = JJ + IF (CNAMES(JJ) == "UR8") JP_CH_UR8 = JJ + IF (CNAMES(JJ) == "AP8") JP_CH_AP8 = JJ + ! END DO ! -! !* 0.4 initialization aerosol solveur -CALL CH_AER_TRANS(0, PM, PSIG0, PRG0, PN0, PRHOP0, PAERO,& +! +CALL CH_AER_TRANS(0, PM, PSIG0, PRG0, PN0, PRHOP0, PAERO, & PCHEM, PCTOTG, PCTOTA, PCCTOT, PFRAC, PMI, ZMASK, GSCHEME ) - -CALL CH_AER_SOLV(PM,PSIG0, PRG0, PN0, PCTOTG, PCTOTA, PCCTOT, & - ZDMINTRA,ZDMINTER,ZDMCOND,PSEDA,0.,POM,& - PRV, PDENAIR, PPRESSURE, PTEMP, PRC, 0., ZSOLORG) - -CALL CH_AER_TRANS(1, PM, PSIG0, PRG0, PN0, PRHOP0, PAERO,& - PCHEM, PCTOTG, PCTOTA, PCCTOT, PFRAC, PMI, ZMASK, GSCHEME) - ! -RETURN +CALL CH_AER_SOLV(PM,PSIG0, PRG0, PN0, PCTOTG, PCTOTA, PCCTOT, & + ZDMINTRA,ZDMINTER,ZDMCOND,ZDMNUCL,ZDMMERG,PSEDA,0., & + PRV, PDENAIR, PPRESSURE, PTEMP, PRC, 0., ZSOLORG, & + ZMBEG,ZMINT,ZMEND ) +! +CALL CH_AER_TRANS(1, PM, PSIG0, PRG0, PN0, PRHOP0, PAERO, & + PCHEM, PCTOTG, PCTOTA, PCCTOT, PFRAC, PMI, ZMASK, GSCHEME) ! END SUBROUTINE CH_INI_ORILAM diff --git a/src/MNH/ch_init_fieldn.f90 b/src/MNH/ch_init_fieldn.f90 index e71d31f36c583398e88c6f77e19ca4b4a565e060..4c9853b05ee3d38f3634bbcb7b0a8390349eaf45 100644 --- a/src/MNH/ch_init_fieldn.f90 +++ b/src/MNH/ch_init_fieldn.f90 @@ -71,6 +71,7 @@ END MODULE MODI_CH_INIT_FIELD_n !! 04/06/07 (M. Leriche & JP Pinty) add pH initialization !! 20/04/10 (M. Leriche) remove pH initialization to ini_modeln ! P. Wautelet 20/05/2019: add name argument to ADDnFIELD_ll + new ADD4DFIELD_ll subroutine +! P. Tulet 20/05/2021: correction for CON to MIX transformation unit (aerosols only) !! !! EXTERNAL !! -------- @@ -83,6 +84,7 @@ USE MODI_CH_FIELD_VALUE_n ! returns value of chemical species at each grid point USE MODI_CH_INIT_CONST_n USE MODI_CH_AER_EQM_INIT_n USE MODE_ll +USE MODE_AERO_PSD !! !! IMPLICIT ARGUMENTS !! ------------------ @@ -232,6 +234,40 @@ IF (LORILAM) THEN IF (.NOT.(ASSOCIATED(XMI))) THEN ALLOCATE(XMI(SIZE(XSVT,1),SIZE(XSVT,2),IKU,NSP+NCARB+NSOA)) END IF + IF (.NOT.(ASSOCIATED(XJNUC))) ALLOCATE(XJNUC(SIZE(XSVT,1),SIZE(XSVT,2),IKU)) + IF (.NOT.(ASSOCIATED(XJ2RAT))) ALLOCATE(XJ2RAT(SIZE(XSVT,1),SIZE(XSVT,2),IKU)) + IF (.NOT.(ASSOCIATED(XCONC_MASS))) ALLOCATE(XCONC_MASS(SIZE(XSVT,1),SIZE(XSVT,2),IKU)) + IF (.NOT.(ASSOCIATED(XCOND_MASS_I))) ALLOCATE(XCOND_MASS_I(SIZE(XSVT,1),SIZE(XSVT,2),IKU)) + IF (.NOT.(ASSOCIATED(XCOND_MASS_J))) ALLOCATE(XCOND_MASS_J(SIZE(XSVT,1),SIZE(XSVT,2),IKU)) + IF (.NOT.(ASSOCIATED(XNUCL_MASS))) ALLOCATE(XNUCL_MASS(SIZE(XSVT,1),SIZE(XSVT,2),IKU)) + + IF (.NOT.(ASSOCIATED(XMBEG))) ALLOCATE(XMBEG(SIZE(XSVT,1),SIZE(XSVT,2),IKU,JPIN)) + IF (.NOT.(ASSOCIATED(XMINT))) ALLOCATE(XMINT(SIZE(XSVT,1),SIZE(XSVT,2),IKU,JPIN)) + IF (.NOT.(ASSOCIATED(XMEND))) ALLOCATE(XMEND(SIZE(XSVT,1),SIZE(XSVT,2),IKU,JPIN)) + + IF (.NOT.(ASSOCIATED(XDMINTRA))) ALLOCATE(XDMINTRA(SIZE(XSVT,1),SIZE(XSVT,2),IKU,JPIN)) + IF (.NOT.(ASSOCIATED(XDMINTER))) ALLOCATE(XDMINTER(SIZE(XSVT,1),SIZE(XSVT,2),IKU,JPIN)) + IF (.NOT.(ASSOCIATED(XDMCOND))) ALLOCATE(XDMCOND(SIZE(XSVT,1),SIZE(XSVT,2),IKU,JPIN)) + IF (.NOT.(ASSOCIATED(XDMNUCL))) ALLOCATE(XDMNUCL(SIZE(XSVT,1),SIZE(XSVT,2),IKU,JPIN)) + IF (.NOT.(ASSOCIATED(XDMMERG))) ALLOCATE(XDMMERG(SIZE(XSVT,1),SIZE(XSVT,2),IKU,JPIN)) + ! + XJNUC(:,:,:) = 1.0E-7 + XJ2RAT(:,:,:) = 0. + XCONC_MASS(:,:,:) = 0. + XCOND_MASS_I(:,:,:) = 0. + XCOND_MASS_J(:,:,:) = 0. + XNUCL_MASS(:,:,:) = 0. + ! + XMBEG(:,:,:,:) = 0. + XMINT(:,:,:,:) = 0. + XMEND(:,:,:,:) = 0. + ! + XDMINTRA(:,:,:,:) = 0. + XDMINTER(:,:,:,:) = 0. + XDMCOND(:,:,:,:) = 0. + XDMNUCL(:,:,:,:) = 0. + XDMMERG(:,:,:,:) = 0. + END IF ! !* print info for user @@ -268,6 +304,12 @@ IF ((LCH_INIT_FIELD).AND.(CPROGRAM/='DIAG ')) THEN DO JK=1,JPVEXT XSVT(:,:,IKB-JPVEXT,JN) = XSVT(:,:,IKB,JN) XSVT(:,:,IKE+JPVEXT,JN) = XSVT(:,:,IKE,JN) + + XSVT(IIB-JPHEXT,:,:,JN) = XSVT(IIB,:,:,JN) + XSVT(IIU,:,:,JN) = XSVT(IIU-JPHEXT,:,:,JN) + + XSVT(:,IJB-JPHEXT,:,JN) = XSVT(:,IJB,:,JN) + XSVT(:,IJU,:,JN) = XSVT(:,IJU-JPHEXT,:,JN) END DO END DO ! @@ -310,17 +352,22 @@ IF ((LCH_INIT_FIELD).AND.(CPROGRAM/='DIAG ')) THEN DO JK=1,JPVEXT XSVT(:,:,IKB-JPVEXT,JN) = XSVT(:,:,IKB,JN) XSVT(:,:,IKE+JPVEXT,JN) = XSVT(:,:,IKE,JN) + + XSVT(IIB-JPHEXT,:,:,JN) = XSVT(IIB,:,:,JN) + XSVT(IIU,:,:,JN) = XSVT(IIU-JPHEXT,:,:,JN) + + XSVT(:,IJB-JPHEXT,:,JN) = XSVT(:,IJB,:,JN) + XSVT(:,IJU,:,JN) = XSVT(:,IJU-JPHEXT,:,JN) END DO END DO ! IF (YUNIT .EQ. "CON") THEN - WRITE(KLUOUT,*) "CH_INIT_FIELD_n (ORILAM): converting initial values to mixing ratio" - DO JN = NSV_AERBEG,NSV_AEREND - XSVT(:,:,:,JN) = XSVT(:,:,:,JN)/(XRHODREF(:,:,:)*ZDEN2MOL) - ENDDO + WRITE(KLUOUT,*) "CH_INIT_FIELD_n (ORILAM): converting initial values µg/m3 to mixing ratio" + CALL CON2MIX (XSVT(:,:,:,NSV_AERBEG:NSV_AEREND), XRHODREF) ELSE WRITE(KLUOUT,*)"CH_INIT_FIELD_n (ORILAM): initial values are used as is (mixing ratio)" ENDIF + ! ENDIF !LORILAM ! diff --git a/src/MNH/ch_meteo_trans_lima.f90 b/src/MNH/ch_meteo_trans_lima.f90 new file mode 100644 index 0000000000000000000000000000000000000000..42e2a500630b5b82c539460acd672771c8052919 --- /dev/null +++ b/src/MNH/ch_meteo_trans_lima.f90 @@ -0,0 +1,348 @@ +!MNH_LIC Copyright 1994-2014 CNRS, Meteo-France and Universite Paul Sabatier +!MNH_LIC This is part of the Meso-NH software governed by the CeCILL-C licence +!MNH_LIC version 1. See LICENSE, CeCILL-C_V1-en.txt and CeCILL-C_V1-fr.txt +!MNH_LIC for details. version 1. +!----------------------------------------------------------------- +!--------------- special set of characters for RCS information +!----------------------------------------------------------------- +! $Source$ $Revision$ $Date$ +!----------------------------------------------------------------- +!! ############################### + MODULE MODI_CH_METEO_TRANS_LIMA +!! ############################### +!! +! +INTERFACE +!! +SUBROUTINE CH_METEO_TRANS_LIMA(KL, PRHODJ, PRHODREF, PRTSM, PCCTSM, PCRTSM, & + PTHT, PABST, KVECNPT, KVECMASK, TPM, KDAY, & + KMONTH, KYEAR, PLAT, PLON, PLAT0, PLON0, & + OUSERV, OUSERC, OUSERR, KLUOUT, HCLOUD, PTSTEP ) +! +USE MODD_CH_M9_n, ONLY: METEOTRANSTYPE +! +IMPLICIT NONE +REAL, INTENT(IN), OPTIONAL :: PTSTEP ! Double timestep +CHARACTER (LEN=4), INTENT(IN) :: HCLOUD ! Cloud parameterization +REAL, DIMENSION(:,:,:), INTENT(IN) :: PRHODJ ! Dry density * Jacobian +REAL, DIMENSION(:,:,:), INTENT(IN) :: PRHODREF ! air density +REAL, DIMENSION(:,:,:,:), INTENT(IN) :: PRTSM ! moist variables at t or t-dt or water m.r. source +REAL, DIMENSION(:,:,:), INTENT(IN) :: PCCTSM ! Cloud water C. at t or t-dt or water m.r. +REAL, DIMENSION(:,:,:), INTENT(IN) :: PCRTSM ! Rain water C. at t or t-dt or water m.r. +REAL, DIMENSION(:,:,:), INTENT(IN) :: PTHT, PABST ! theta and pressure at t +INTEGER, DIMENSION(:,:), INTENT(IN) :: KVECMASK +! +TYPE(METEOTRANSTYPE), DIMENSION(:), INTENT(INOUT) :: TPM + ! meteo variable for CCS +INTEGER, INTENT(IN) :: KYEAR ! Current Year +INTEGER, INTENT(IN) :: KMONTH ! Current Month +INTEGER, INTENT(IN) :: KDAY ! Current Day +INTEGER, INTENT(IN) :: KLUOUT ! channel for output listing +INTEGER, INTENT(IN) :: KL, KVECNPT +REAL, DIMENSION(:,:), INTENT(IN) :: PLAT, PLON +REAL, INTENT(IN) :: PLAT0, PLON0 +LOGICAL, INTENT(IN) :: OUSERV, OUSERC, OUSERR +END SUBROUTINE CH_METEO_TRANS_LIMA +!! +END INTERFACE +!! +END MODULE MODI_CH_METEO_TRANS_LIMA +!! +!! ######################################################################### +SUBROUTINE CH_METEO_TRANS_LIMA(KL, PRHODJ, PRHODREF, PRTSM, PCCTSM, PCRTSM, & + PTHT, PABST, KVECNPT, KVECMASK, TPM, KDAY, & + KMONTH, KYEAR, PLAT, PLON, PLAT0, PLON0, & + OUSERV, OUSERC, OUSERR, KLUOUT, HCLOUD, PTSTEP ) +!! ######################################################################### +!! +!!*** *CH_METEO_TRANS* +!! +!! PURPOSE +!! ------- +! Transfer of meteorological data, such as temperature, pressure +! and water vapor mixing ratio for one point into the variable TPM(JM+1) +! here LWC, LWR and mean radius computed from LIMA or KHKO schemes +!! +!! METHOD +!! ------ +!! For the given grid-point KI,KJ,KK, the meteorological parameters +!! will be transfered for use by CH_SET_RATES and CH_SET_PHOTO_RATES. +!! Presently, the variables altitude, air density, temperature, +!! water vapor mixing ratio, cloud water, longitude, latitude and date +!! will be transfered. In the chemical definition file (.chf) +!! these variables have to be transfered into variables like O2, H2O etc. +!! Also, consistency is checked between the number of +!! variables expected by the CCS (as defined in the .chf file) and +!! the number of variables to be transfered here. If you change +!! the meaning of XMETEOVARS in your .chf file, make sure to modify +!! this subroutine accordingly. +!! If the model is run in 1D mode, the model level instead of altitude +!! is passed. In 2D and 3D, altitude is passed with a negative sign +!! so that the radiation scheme TUV can make the difference between +!! model levels and altitude. +!! +!! AUTHOR +!! ------ +!! K. Suhre *Laboratoire d'Aerologie* +!! +!! MODIFICATIONS +!! ------------- +!! Original 24/05/95 +!! 04/08/96 (K. Suhre) restructured +!! 21/02/97 (K. Suhre) add XLAT0 and XLON0 for LCARTESIAN=T case +!! 27/08/98 (P. Tulet) add temperature at t for kinetic coefficient +!! 09/03/99 (V. Crassier & K. Suhre) vectorization +!! 09/03/99 (K. Suhre) modification for TUV +!! 09/03/99 (C. Mari & J. Escobar) Code optimization +!! 01/12/03 (D. Gazen) change Chemical scheme interface +!! 01/12/03 (D. Gazen) change Chemical scheme interface +!! 01/12/04 (P. Tulet) update ch_meteo_transn.f90 for Arome +!! 01/12/07 (M. Leriche) include rain +!! 14/05/08 (M. Leriche) include raindrops and cloud droplets mean radius +!! 05/06/08 (M. Leriche) calculate LWC and LWR in coherence with time spliting scheme +!! 05/11/08 (M. Leriche) split in two routines for 1-moment and 2-moment cloud schemes +!! +!! EXTERNAL +!! -------- +!! GAMMA : gamma function +!! +!! IMPLICIT ARGUMENTS +!! ------------------ +!! +!! +USE MODD_CH_M9_n, ONLY: NMETEOVARS, &! number of meteorological variables + METEOTRANSTYPE !type for meteo . transfer +!! +USE MODD_CST, ONLY: XP00, &! Surface pressure + XRD, &! R gas constant + XCPD !specific heat for dry air +!! +USE MODD_CONF, ONLY: LCARTESIAN ! Logical for cartesian geometry +!! +USE MODD_PARAM_LIMA, ONLY: XNUC, XALPHAC, & ! Cloud droplets distrib. param. + XNUR, XALPHAR, & ! Raindrops distrib. param. + XRTMIN, & ! min values of the water m. r. + XCTMIN ! min values of the drop C. +USE MODD_PARAM_LIMA_WARM, ONLY: XLBC, XLBEXC, & !shape param. of the cloud droplets + XLBR, XLBEXR !shape param. of the raindrops +!! +USE MODI_GAMMA +! +!------------------------------------------------------------------------------- +! +!* 0. DECLARATIONS +! ------------ +IMPLICIT NONE +! +!* 0.1 declarations of arguments +! +REAL, INTENT(IN), OPTIONAL :: PTSTEP ! Double timestep +CHARACTER (LEN=4), INTENT(IN) :: HCLOUD ! Cloud parameterization +REAL, DIMENSION(:,:,:), INTENT(IN) :: PRHODJ ! Dry density * Jacobian +REAL, DIMENSION(:,:,:), INTENT(IN) :: PRHODREF ! air density +REAL, DIMENSION(:,:,:,:), INTENT(IN) :: PRTSM ! moist variables at t or t-dt or water m.r. source +REAL, DIMENSION(:,:,:), INTENT(IN) :: PCCTSM ! Cloud water C. at t or t-dt or water m.r. +REAL, DIMENSION(:,:,:), INTENT(IN) :: PCRTSM ! Rain water C. at t or t-dt or water m.r. +REAL, DIMENSION(:,:,:), INTENT(IN) :: PTHT, PABST ! theta and pressure at t +INTEGER, DIMENSION(:,:), INTENT(IN) :: KVECMASK +! +TYPE(METEOTRANSTYPE), DIMENSION(:), INTENT(INOUT) :: TPM + ! meteo variable for CCS +INTEGER, INTENT(IN) :: KYEAR ! Current Year +INTEGER, INTENT(IN) :: KMONTH ! Current Month +INTEGER, INTENT(IN) :: KDAY ! Current Day +INTEGER, INTENT(IN) :: KLUOUT ! channel for output listing +INTEGER, INTENT(IN) :: KL, KVECNPT +REAL, DIMENSION(:,:), INTENT(IN) :: PLAT, PLON +REAL, INTENT(IN) :: PLAT0, PLON0 +LOGICAL, INTENT(IN) :: OUSERV, OUSERC, OUSERR +! +!* 0.2 declarations of local variables +! +REAL,DIMENSION(SIZE(PRTSM,1),SIZE(PRTSM,2),SIZE(PRTSM,3),3) :: ZRTSM +REAL,DIMENSION(SIZE(PRTSM,1),SIZE(PRTSM,2)) :: ZLAT, ZLON +REAL,DIMENSION(SIZE(PRTSM,1),SIZE(PRTSM,2),SIZE(PRTSM,3)) :: ZCCTSM, ZCRTSM +REAL,DIMENSION(SIZE(PRTSM,1),SIZE(PRTSM,2),SIZE(PRTSM,3)) :: ZRAYC, ZWLBDC, ZWLBDC3 +REAL,DIMENSION(SIZE(PRTSM,1),SIZE(PRTSM,2),SIZE(PRTSM,3)) :: ZRAYR, ZWLBDR, ZWLBDR3 +LOGICAL, SAVE :: GSFIRSTCALL = .TRUE. +INTEGER :: JI,JJ,JK,JM +INTEGER :: IDTI,IDTJ,IDTK +! +! +!------------------------------------------------------------------------------- +! +!* 1. INITIALIZE METEO VARIABLE TRANSFER +! ---------------------------------- +! +firstcall : IF (GSFIRSTCALL) THEN +! + GSFIRSTCALL = .FALSE. +! +!* 1.1 check if number of variables NMETEOVARS +! corresponds to what the CCS expects +! + IF (NMETEOVARS /= 13) THEN + WRITE(KLUOUT,*) "CH_METEO_TRANS ERROR: number of meteovars to transfer" + WRITE(KLUOUT,*) "does not correspond to the number expected by the CCS:" + WRITE(KLUOUT,*) " meteovars to transfer: ", 13 + WRITE(KLUOUT,*) " NMETEOVARS expected: ", NMETEOVARS + WRITE(KLUOUT,*) "Check the definition of NMETEOVARS in your .chf file." + WRITE(KLUOUT,*) "The program will be stopped now!" + STOP 1 + END IF +! +!* 1.2 initialize names of meteo vars +! + TPM(:)%CMETEOVAR(1) = "Model level" + TPM(:)%CMETEOVAR(2) = "Air density (kg/m3)" + TPM(:)%CMETEOVAR(3) = "Temperature (K)" + TPM(:)%CMETEOVAR(4) = "Water vapor (kg/kg)" + TPM(:)%CMETEOVAR(5) = "Cloud water (kg/kg)" + TPM(:)%CMETEOVAR(6) = "Latitude (rad)" + TPM(:)%CMETEOVAR(7) = "Longitude (rad)" + TPM(:)%CMETEOVAR(8) = "Current date (year)" + TPM(:)%CMETEOVAR(9) = "Current date (month)" + TPM(:)%CMETEOVAR(10)= "Current date (day)" + TPM(:)%CMETEOVAR(11)= "Rain water (kg/kg)" + TPM(:)%CMETEOVAR(12)= "Mean cloud droplets radius (m)" + TPM(:)%CMETEOVAR(13)= "Mean raindrops radius (m)" +! +ENDIF firstcall +! +! "Water vapor (kg/kg)" +! +IF (OUSERV) THEN +! if split option, use tendency + IF (PRESENT(PTSTEP)) THEN + ZRTSM(:,:,:,1) = (PRTSM(:,:,:, 1)/ PRHODJ(:,:,:))*PTSTEP + ELSE + ZRTSM(:,:,:,1) = PRTSM(:,:,:, 1) + ENDIF +ELSE + ZRTSM(:,:,:,1) = 0.0 +ENDIF +! +! "Cloud water (kg/kg)" and "Mean cloud droplets radius (m)" +! +IF (OUSERC) THEN + IF (PRESENT(PTSTEP)) THEN + ZRTSM(:,:,:,2) = (PRTSM(:,:,:, 2)/ PRHODJ(:,:,:))*PTSTEP + ZCCTSM(:,:,:) = (PCCTSM(:,:,:)/ PRHODJ(:,:,:))*PTSTEP + ELSE + ZRTSM(:,:,:,2) = PRTSM(:,:,:, 2) + ZCCTSM(:,:,:) = PCCTSM(:,:,:) + ENDIF + ZWLBDC3(:,:,:) = 1.E30 + ZWLBDC(:,:,:) = 1.E10 + ZRAYC(:,:,:) = 10.e-6 ! avoid division by zero + WHERE (ZRTSM(:,:,:, 2)>XRTMIN(2) .AND. ZCCTSM(:,:,:)>XCTMIN(2)) + ZWLBDC3(:,:,:) = XLBC * ZCCTSM(:,:,:) / (PRHODREF(:,:,:) * ZRTSM(:,:,:, 2)) + ZWLBDC(:,:,:) = ZWLBDC3(:,:,:)**XLBEXC + ZRAYC(:,:,:) = 0.5*GAMMA(XNUC+1./XALPHAC)/(GAMMA(XNUC)*ZWLBDC(:,:,:)) + END WHERE +ELSE + ZRTSM(:,:,:,2) = 0.0 + ZCCTSM(:,:,:) = 0.0 + ZRAYC(:,:,:) = 10.e-6 ! avoid division by zero +ENDIF +! +! "Rain water (kg/kg)" and "Mean raindrops radius (m)" +! +IF (OUSERR) THEN + IF (PRESENT(PTSTEP)) THEN + ZRTSM(:,:,:,3) = (PRTSM(:,:,:, 3)/ PRHODJ(:,:,:))*PTSTEP + ZCRTSM(:,:,:) = (PCRTSM(:,:,:)/ PRHODJ(:,:,:))*PTSTEP + ELSE + ZRTSM(:,:,:,3) = PRTSM(:,:,:, 3) + ZCRTSM(:,:,:) = PCRTSM(:,:,:) + ENDIF + ZWLBDR3(:,:,:) = 1.E30 + ZWLBDR(:,:,:) = 1.E10 + ZRAYR(:,:,:) = 500.e-6 ! avoid division by zero + WHERE (ZRTSM(:,:,:, 3)>XRTMIN(3) .AND. ZCRTSM(:,:,:)>XCTMIN(3)) + ZWLBDR3(:,:,:) = XLBR * ZCRTSM(:,:,:) / (PRHODREF(:,:,:) * ZRTSM(:,:,:, 3)) + ZWLBDR(:,:,:) = ZWLBDR3(:,:,:)**XLBEXR + ZRAYR(:,:,:) = 0.5*GAMMA(XNUR+1./XALPHAR)/(GAMMA(XNUR)*ZWLBDR(:,:,:)) + END WHERE +ELSE + ZRTSM(:,:,:,3) = 0.0 + ZCRTSM(:,:,:) = 0.0 + ZRAYR(:,:,:) = 500.e-6 ! avoid division by zero +ENDIF + +IF(LCARTESIAN) THEN +! "Latitude (rad)" + ZLAT(:,:) = PLAT0 +! "Longitude (rad)" + ZLON(:,:) = PLON0 +ELSE +! "Latitude (rad)" + ZLAT(:,:) = PLAT(:,:) +! "Longitude (rad)" + ZLON(:,:) = PLON(:,:) +END IF +!! +!* 2. TRANSFER METEO VARIABLES +! ------------------------ +! +IDTI=KVECMASK(2,KL)-KVECMASK(1,KL)+1 +IDTJ=KVECMASK(4,KL)-KVECMASK(3,KL)+1 +IDTK=KVECMASK(6,KL)-KVECMASK(5,KL)+1 +!Vectorization: +!ocl novrec +!cdir nodep +DO JM=0,KVECNPT-1 + JI=JM-IDTI*(JM/IDTI)+KVECMASK(1,KL) + JJ=JM/IDTI-IDTJ*(JM/(IDTI*IDTJ))+KVECMASK(3,KL) + JK=JM/(IDTI*IDTJ)-IDTK*(JM/(IDTI*IDTJ*IDTK))+KVECMASK(5,KL) +! +!"Model Altitude" +! + TPM(JM+1)%XMETEOVAR(1) = JK-1 ! assuming first model level is level 2 +! TPM(JM+1)%XMETEOVAR(1) = JK ! assuming first model level is level 1 +! +! "Air density (kg/m3)" +! + TPM(JM+1)%XMETEOVAR(2) = PRHODREF(JI, JJ, JK) +! +! "Temperature (K)" +! + TPM(JM+1)%XMETEOVAR(3) = PTHT(JI,JJ,JK)*((PABST(JI,JJ,JK)/XP00)**(XRD/XCPD)) +! +! "Water vapor (kg/kg)" +! + TPM(JM+1)%XMETEOVAR(4) = ZRTSM(JI, JJ, JK, 1) +! +! "Cloud water (kg/kg)" +! + TPM(JM+1)%XMETEOVAR(5) = ZRTSM(JI, JJ, JK, 2) +! +! "Latitude (rad)" +! + TPM(JM+1)%XMETEOVAR(6) = ZLAT(JI, JJ) +! +! "Longitude (rad)" +! + TPM(JM+1)%XMETEOVAR(7) = ZLON(JI, JJ) +! +! "Current date" +! + TPM(JM+1)%XMETEOVAR(8) = FLOAT(KYEAR) + TPM(JM+1)%XMETEOVAR(9) = FLOAT(KMONTH) + TPM(JM+1)%XMETEOVAR(10)= FLOAT(KDAY) +! +! "Rain water (kg/kg)" +! + TPM(JM+1)%XMETEOVAR(11) = ZRTSM(JI, JJ, JK, 3) +! +! "Mean cloud droplets radius (m)" +! + TPM(JM+1)%XMETEOVAR(12) = ZRAYC(JI, JJ, JK) +! +! "Mean raindrops radius (m)" +! + TPM(JM+1)%XMETEOVAR(13) = ZRAYR(JI, JJ, JK) +! +ENDDO +! +END SUBROUTINE CH_METEO_TRANS_LIMA diff --git a/src/MNH/ch_monitorn.f90 b/src/MNH/ch_monitorn.f90 index eee756dfbcdba0278206e33b4255e2cd1212b6c1..be5f6033ef8145d515efaf3632b09e4133dcec12 100644 --- a/src/MNH/ch_monitorn.f90 +++ b/src/MNH/ch_monitorn.f90 @@ -1,23 +1,22 @@ -!MNH_LIC Copyright 1995-2021 CNRS, Meteo-France and Universite Paul Sabatier +!MNH_LIC Copyright 1994-2014 CNRS, Meteo-France and Universite Paul Sabatier !MNH_LIC This is part of the Meso-NH software governed by the CeCILL-C licence -!MNH_LIC version 1. See LICENSE, CeCILL-C_V1-en.txt and CeCILL-C_V1-fr.txt +!MNH_LIC version 1. See LICENSE, CeCILL-C_V1-en.txt and CeCILL-C_V1-fr.txt !MNH_LIC for details. version 1. -!----------------------------------------------------------------- !! ######################## MODULE MODI_CH_MONITOR_n !! ######################## !! -! +!! INTERFACE !! SUBROUTINE CH_MONITOR_n(PWETDEPAER, KTCOUNT,PTSTEP, KLUOUT, KVERB) IMPLICIT NONE -REAL, DIMENSION(:,:,:,:), INTENT(IN) :: PWETDEPAER ! tendency of aerosol wet depostion -INTEGER, INTENT(IN) :: KTCOUNT ! iteration count -REAL, INTENT(IN) :: PTSTEP ! Double timestep except - ! for the first time step (single one) -INTEGER, INTENT(IN) :: KLUOUT ! unit for output listing count -INTEGER, INTENT(IN) :: KVERB ! verbosity level +REAL, DIMENSION(:,:,:,:), INTENT(IN) :: PWETDEPAER ! tendency of aerosol wet depostion +INTEGER, INTENT(IN) :: KTCOUNT ! iteration count +REAL, INTENT(IN) :: PTSTEP ! Double timestep except + ! for the first time step (single one) +INTEGER, INTENT(IN) :: KLUOUT ! unit for output listing count +INTEGER, INTENT(IN) :: KVERB ! verbosity level END SUBROUTINE CH_MONITOR_n !! END INTERFACE @@ -28,8 +27,6 @@ END MODULE MODI_CH_MONITOR_n SUBROUTINE CH_MONITOR_n(PWETDEPAER, KTCOUNT,PTSTEP, KLUOUT, KVERB) !! ####################################################### !! -!!*** *CH_MONITOR_n* monitor of the chemical module -!! !! PURPOSE !! ------- !! The purpose of this subroutine is to control the chemical module @@ -111,9 +108,7 @@ END MODULE MODI_CH_MONITOR_n !! 11/12/15 (M. Leriche & P. Tulet) add ch_init_ice initialise index for ice chem. !! 18/01/16 (M Leriche) for sedimentation fusion C2R2 and khko !! 15/02/16 (M Leriche) call ch_init_rosenbrock only one time -!! 20/01/17 (G.Delautier) bug if CPROGRAM/=DIAG !! 01/10/17 (C.Lac) add correction of negativity -!! Philippe Wautelet: 05/2016-04/2018: new data structures and calls for I/O ! P. Wautelet 12/02/2019: bugfix: ZINPRR was not initialized all the time ! P. Wautelet 10/04/2019: replace ABORT and STOP calls by Print_msg ! P. Wautelet 02/2020: use the new data structures and subroutines for budgets @@ -122,10 +117,12 @@ END MODULE MODI_CH_MONITOR_n !! -------- USE MODI_CH_METEO_TRANS_KESS USE MODI_CH_METEO_TRANS_C2R2 +USE MODI_CH_METEO_TRANS_LIMA USE MODI_CH_SET_RATES USE MODI_CH_SET_PHOTO_RATES USE MODI_CH_SOLVER_n USE MODI_CH_UPDATE_JVALUES +use modd_budget, only: lbudget_sv, NBUDGET_SV1, tbudgets USE MODI_CH_INIT_ICE USE MODI_CH_AQUEOUS_TMICICE USE MODI_CH_AQUEOUS_TMICKESS @@ -161,7 +158,7 @@ USE MODD_NSV, ONLY : NSV_CHEMBEG,NSV_CHEMEND,NSV_CHEM,& ! index for chemical SV NSV_CHACBEG,NSV_CHACEND,NSV_CHAC,& ! index for aqueous SV NSV_CHGSBEG,NSV_CHGSEND, & ! index for gas phase SV NSV_CHICBEG,NSV_CHICEND, & ! index for ice phase SV - NSV_C2R2BEG, & ! index for number concentration + NSV_C2R2BEG,NSV_LIMA_NC,NSV_LIMA_NR, & ! index for number concentration NSV_AERBEG, NSV_AEREND, NSV_AER, & ! index for aerosols SV XSVMIN ! @@ -218,7 +215,7 @@ USE MODD_TIME, ONLY: TDTEXP ! USE MODD_TIME_n, ONLY: TDTCUR ! Current Time and Date ! -USE MODD_CONF, ONLY: CPROGRAM, L1D +USE MODD_CONF, ONLY: CPROGRAM, L1D, NVERB USE MODD_PARAM_n, ONLY: CCLOUD ! USE MODD_PARAMETERS,ONLY: JPHEXT, &! number of horizontal External points @@ -294,17 +291,17 @@ IMPLICIT NONE ! !* 0.1 declarations of arguments ! -REAL, DIMENSION(:,:,:,:), INTENT(IN) :: PWETDEPAER ! tendency of aerosol wet depostion -INTEGER, INTENT(IN) :: KTCOUNT ! iteration count -REAL, INTENT(IN) :: PTSTEP ! Double timestep except - ! for the first time step (single one) -INTEGER, INTENT(IN) :: KLUOUT ! unit for output listing count -INTEGER, INTENT(IN) :: KVERB ! verbosity level +REAL, DIMENSION(:,:,:,:), INTENT(IN) :: PWETDEPAER ! tendency of aerosol wet depostion +INTEGER, INTENT(IN) :: KTCOUNT ! iteration count +REAL, INTENT(IN) :: PTSTEP ! Double timestep except + ! for the first time step (single one) +INTEGER, INTENT(IN) :: KLUOUT ! unit for output listing count +INTEGER, INTENT(IN) :: KVERB ! verbosity level ! !* 0.2 declarations of local variables ! INTEGER :: JI,JJ,JK,JL,JM,JN ! loop counters -REAL :: ZDTSOLVER ! timestep for the solver +REAL :: ZDTSOLVER ! timestep for the solver ! REAL, DIMENSION(:,:), ALLOCATABLE :: ZCHEM, ZOLDCHEM, ZNEWCHEM REAL, DIMENSION(:,:), ALLOCATABLE :: ZAERO, ZOLDAERO, ZNEWAERO @@ -380,18 +377,22 @@ INTEGER :: IMI ! model index !------------------------------------------------------------------------------- ! variables for the aerosol module ! -REAL :: ZTIME ! current time -REAL, ALLOCATABLE, DIMENSION(:,:) :: ZM, ZSIG0, ZN0, ZRG0, & ! work array - ZCTOTG, ZSEDA, ZFRAC, ZMI ! for aerosols +REAL :: ZTIME ! current time +REAL, ALLOCATABLE, DIMENSION(:,:) :: ZM, ZLNSIG, ZN, ZRG, & ! work array + ZCTOTG, ZSEDA, ZFRAC, ZMI, & ! for aerosols + ZMBEG,ZMINT,ZMEND,& + ZDMINTRA,ZDMINTER,ZDMCOND,ZDMNUCL,ZDMMERG REAL, ALLOCATABLE, DIMENSION(:,:,:) :: ZCTOTA, ZCCTOT ! first dimension is vectorization, ! second dim. are the modes*moments +REAL, ALLOCATABLE, DIMENSION(:) :: ZCONC_MASS,ZCOND_MASS_I,ZCOND_MASS_J,ZNUCL_MASS REAL, DIMENSION(:), ALLOCATABLE :: ZRV, ZDENAIR, ZPRESSURE, ZTEMP, ZRC -REAL, DIMENSION(:,:), ALLOCATABLE :: ZRHOP0, ZOM, ZSOLORG -REAL, DIMENSION(:), ALLOCATABLE :: ZLAMBDA, ZMU, ZSO4RAT +REAL, DIMENSION(:,:), ALLOCATABLE :: ZRHOP, ZSOLORG +REAL, DIMENSION(:), ALLOCATABLE :: ZSO4RAT +REAL, DIMENSION(:), ALLOCATABLE :: ZJNUC, ZJ2RAT -REAL,DIMENSION(:,:,:,:), ALLOCATABLE :: ZSVT -REAL,DIMENSION(:,:,:,:), ALLOCATABLE :: ZCWETAERO +REAL,DIMENSION(SIZE(XSVT,1),SIZE(XSVT,2),SIZE(XSVT,3),SIZE(XSVT,4)) :: ZSVT +REAL,DIMENSION(SIZE(XSVT,1),SIZE(XSVT,2),SIZE(XSVT,3),NSV_AER) :: ZCWETAERO ! !------------------------------------------------------------------------------- ! variables for AQueous/NAQueous cases @@ -405,13 +406,16 @@ REAL, DIMENSION(SIZE(XRT,1), SIZE(XRT,2)) :: ZINPRR! Rain instant precip ! ! get model index IMI = GET_CURRENT_MODEL_INDEX() - +! if ( lbudget_sv ) then do jsv = nsv_chembeg, nsv_chemend call Budget_store_init( tbudgets(NBUDGET_SV1 - 1 + jsv), 'CHEM', xrsvs(:, :, :, jsv) ) enddo + do jsv = nsv_aerbeg, nsv_aerend + call Budget_store_init( tbudgets(NBUDGET_SV1 - 1 + jsv), 'AER', xrsvs(:, :, :, jsv) ) + enddo endif -! + !* 1. PREPARE MONITOR ! --------------- ! @@ -608,15 +612,15 @@ ZDTSOLVER = PTSTEP / NCH_SUBSTEPS ! ! IF (LORILAM) THEN - ALLOCATE( ZSVT(SIZE(XSVT,1),SIZE(XSVT,2),SIZE(XSVT,3),SIZE(XSVT,4)) ) - IF (CPROGRAM /='DIAG ') THEN - DO JSV = 1, SIZE(XSVT,4) - ZSVT(:,:,:,JSV) = XRSVS(:,:,:,JSV) *PTSTEP / XRHODJ(:,:,:) - END DO + + IF (CPROGRAM/='DIAG ') THEN + DO JSV = 1, SIZE(XSVT,4) + ZSVT(:,:,:,JSV) = XRSVS(:,:,:,JSV) *PTSTEP / XRHODJ(:,:,:) + END DO ELSE - DO JSV = 1, SIZE(XSVT,4) - ZSVT(:,:,:,JSV) = XSVT(:,:,:,JSV) - END DO + DO JSV = 1, SIZE(XSVT,4) + ZSVT(:,:,:,JSV) = XSVT(:,:,:,JSV) + END DO END IF ZSVT(:,:,:,NSV_CHEMBEG:NSV_CHEMEND) = MAX(ZSVT(:,:,:,NSV_CHEMBEG:NSV_CHEMEND), XMNH_TINY) ZSVT(:,:,:,NSV_AERBEG:NSV_AEREND) = MAX(ZSVT(:,:,:,NSV_AERBEG:NSV_AEREND), XMNH_TINY) @@ -641,10 +645,13 @@ SELECT CASE (CCH_TDISCRETIZATION) IF (KVERB >= 10) WRITE(KLUOUT,*) "CH_MONITOR_n: using LAGGED option" CASE DEFAULT ! the following line should never be reached: - call Print_msg( NVERB_FATAL, 'GEN', 'CH_MONITOR_n', 'invalid CCH_TDISCRETIZATION option ('//trim(CCH_TDISCRETIZATION)//')' ) + ! callabortstop + CALL ABORT + STOP "CH_MONITOR_n: CCH_TDISCRETIZATION option not valid" END SELECT ! ! +IF (LEN_TRIM(CSPEC_BU_DIAG)/=0.OR.LEN_TRIM(CSPEC_DIAG)/=0) GSPLIT=.FALSE. ! Modif. for DIAG IF (CPROGRAM=='DIAG ') GSPLIT=.FALSE. ! Modif. for DIAG ! ! @@ -680,16 +687,21 @@ IF (LORILAM) THEN ALLOCATE(ZOLDAERO(ISVECNPT,NSV_AER)) ALLOCATE(ZM(ISVECNPT,JPIN)) ALLOCATE(ZSEDA(ISVECNPT,JPIN)) - ALLOCATE(ZRHOP0(ISVECNPT,JPMODE)) - ALLOCATE(ZSIG0(ISVECNPT,JPMODE)) - ALLOCATE(ZRG0(ISVECNPT,JPMODE)) - ALLOCATE(ZN0(ISVECNPT,JPMODE)) + ALLOCATE(ZMBEG(ISVECNPT,JPIN)) + ALLOCATE(ZMINT(ISVECNPT,JPIN)) + ALLOCATE(ZMEND(ISVECNPT,JPIN)) + ALLOCATE(ZDMINTRA(ISVECNPT,JPIN)) + ALLOCATE(ZDMINTER(ISVECNPT,JPIN)) + ALLOCATE(ZDMCOND(ISVECNPT,JPIN)) + ALLOCATE(ZDMNUCL(ISVECNPT,JPIN)) + ALLOCATE(ZDMMERG(ISVECNPT,JPIN)) + ALLOCATE(ZRHOP(ISVECNPT,JPMODE)) + ALLOCATE(ZLNSIG(ISVECNPT,JPMODE)) + ALLOCATE(ZRG(ISVECNPT,JPMODE)) + ALLOCATE(ZN(ISVECNPT,JPMODE)) ALLOCATE(ZCTOTA(ISVECNPT,NSP+NCARB+NSOA,JPMODE)) ALLOCATE(ZCCTOT(ISVECNPT,NSP+NCARB+NSOA,JPMODE)) ALLOCATE(ZCTOTG(ISVECNPT,NSP+NCARB+NSOA)) - ALLOCATE(ZMU(ISVECNPT)) - ALLOCATE(ZLAMBDA(ISVECNPT)) - ALLOCATE(ZOM(ISVECNPT,JPMODE)) ALLOCATE(ZSO4RAT(ISVECNPT)) ALLOCATE(ZRV(ISVECNPT)) ALLOCATE(ZRC(ISVECNPT)) @@ -701,6 +713,12 @@ IF (LORILAM) THEN ALLOCATE(ZSOLORG(ISVECNPT,NSOA)) ALLOCATE(XSURF(ISVECNPT,JPMODE)) ALLOCATE(XDP(ISVECNPT,JPMODE)) + ALLOCATE(ZJNUC(ISVECNPT)) + ALLOCATE(ZJ2RAT(ISVECNPT)) + ALLOCATE(ZCONC_MASS(ISVECNPT)) + ALLOCATE(ZCOND_MASS_I(ISVECNPT)) + ALLOCATE(ZCOND_MASS_J(ISVECNPT)) + ALLOCATE(ZNUCL_MASS(ISVECNPT)) END IF ! !------------------------------------------------------------------------------- @@ -716,6 +734,11 @@ IF (KTCOUNT==1 .OR. & IF (.NOT.ASSOCIATED(XJVALUES)) & ALLOCATE(XJVALUES(SIZE(XSVT,1),SIZE(XSVT,2),SIZE(XSVT,3),JPJVMAX)) XJVALUES(:,:,:,:) = 0. + + IF (NVERB .GE. 20) THEN + WRITE(*,*) 'min max XALBUV =', MINVAL(XALBUV), MAXVAL(XALBUV) + ENDIF + CALL CH_UPDATE_JVALUES(KLUOUT, XZENITH, XRT, & XALBUV, XZS, XZZ, XLAT0, XLON0, & SIZE(XZZ,1), SIZE(XZZ,2), SIZE(XZZ,3), NRR, & @@ -735,10 +758,20 @@ ISTCOUNT = ISTCOUNT + 1 !* 3.1 sedimentation term and wet deposition for aerosols tendency (XSEDA) ! IF (LORILAM) THEN - ZTIME = TDTCUR%xtime ! need for ch_orilam - XSEDA(:,:,:,:) = 0. - ZSEDA(:,:) = 0. -! dry sedimentation + ZTIME = TDTCUR%xtime ! need for ch_orilam + XSEDA(:,:,:,:) = 0.0 + ZSEDA(:,:) = 0.0 + ZMBEG(:,:) = 0.0 + ZMINT(:,:) = 0.0 + ZMEND(:,:) = 0.0 + ZDMINTRA(:,:) = 0.0 + ZDMINTER(:,:) = 0.0 + ZDMCOND(:,:) = 0.0 + ZDMNUCL(:,:) = 0.0 + ZDMMERG(:,:) = 0.0 + ! + ! dry sedimentation + ! IF ((LSEDIMAERO).AND.(CPROGRAM/='DIAG ')) THEN CALL CH_AER_SEDIM_n(PTSTEP, & ZSVT(IIB:IIE,IJB:IJE,IKB:IKE,NSV_AERBEG:NSV_AEREND), & @@ -748,7 +781,6 @@ IF (LORILAM) THEN ENDIF ! implicit wet deposition IF ((LCH_CONV_SCAV).AND.(CPROGRAM/='DIAG ')) THEN - ALLOCATE( ZCWETAERO(SIZE(XSVT,1),SIZE(XSVT,2),SIZE(XSVT,3),NSV_AER) ) DO JN=1,NSV_AER ZCWETAERO(:,:,:,JN) = (XRSVS(:,:,:,JN+NSV_AERBEG-1)+PWETDEPAER(:,:,:,JN))*PTSTEP / XRHODJ(:,:,:) END DO @@ -757,7 +789,6 @@ IF (LORILAM) THEN CALL CH_AER_WETDEP_n(PTSTEP, ZSVT(IIB:IIE,IJB:IJE,IKB:IKE,NSV_AERBEG:NSV_AEREND), & ZCWETAERO(IIB:IIE,IJB:IJE,IKB:IKE,:), XRHODREF(IIB:IIE,IJB:IJE,IKB:IKE), & XSEDA(IIB:IIE,IJB:IJE,IKB:IKE,:)) - DEALLOCATE( ZCWETAERO ) ENDIF ! explicit wet deposition IF ((LDEPOS_AER(IMI)).AND.(CPROGRAM/='DIAG ')) THEN @@ -779,8 +810,6 @@ IF (LORILAM) THEN DO JSV = 1, SIZE(XSVT,4) XRSVS(:,:,:,JSV) = ZSVT(:,:,:,JSV) * XRHODJ(:,:,:) / PTSTEP END DO - - DEALLOCATE( ZSVT ) ENDIF ! !* 3.2 check where aqueous concentration>0 + micropÄ¥ysics term @@ -861,9 +890,8 @@ IF (LUSECHAQ.AND.(NRRL>=2) ) THEN XSVT(:,:,:,NSV_CHACBEG+NEQAQ/2:NSV_CHACEND), & XRSVS(:,:,:,NSV_CHACBEG+NEQAQ/2:NSV_CHACEND),& ZINPRR(:,:) ) + END SELECT - ELSE - ZINPRR(:,:) = 0. END IF ELSE IF (LUSECHAQ.AND.(NRRL==1) ) THEN CALL CH_AQUEOUS_CHECK (PTSTEP, XRHODREF, XRHODJ, XRRS, XRSVS, NRRL, & @@ -891,6 +919,12 @@ DO JL=1,ISVECNMASK IF (LORILAM) THEN ZRV(:) = 0. ZRC(:) = 0. + ZJNUC(:) = 0. + ZJ2RAT(:) = 0. + ZCONC_MASS = 0. + ZCOND_MASS_I = 0. + ZCOND_MASS_J = 0. + ZNUCL_MASS = 0. !ocl novrec !cdir nodep DO JM=0,ISVECNPT-1 @@ -912,9 +946,9 @@ DO JL=1,ISVECNMASK ZMI(JM+1,:) = XMI(JI, JJ, JK, :) !Moments (ppp) ZM(JM+1,:) = XM3D(JI,JJ,JK,:) - ZSIG0(JM+1,:) = LOG(XSIG3D(JI,JJ,JK,:)) - ZRG0(JM+1,:) = XRG3D(JI,JJ,JK,:) - ZN0(JM+1,:) = XN3D(JI,JJ,JK,:) + ZLNSIG(JM+1,:) = LOG(XSIG3D(JI,JJ,JK,:)) + ZRG(JM+1,:) = XRG3D(JI,JJ,JK,:) + ZN(JM+1,:) = XN3D(JI,JJ,JK,:) IF (NSOA > 0) ZSOLORG(JM+1,:) = XSOLORG(JI,JJ,JK,:) ENDDO DO JN = 1, NSV_AER @@ -937,8 +971,8 @@ DO JL=1,ISVECNMASK ! !* initialize aerosol surface and aerosol diameter ! - CALL CH_AER_SURF(ZM, ZRG0, ZSIG0, XSURF) ! Compute aerosol surface (m2/cc) - XDP(:,:) = 2.E-6 * ZRG0(:,:) ! Mean diameter in meter + CALL CH_AER_SURF(ZM, ZRG, ZLNSIG, XSURF) ! Compute aerosol surface (m2/cc) + XDP(:,:) = 2.E-6 * ZRG(:,:) ! Mean diameter in meter END IF ! ! @@ -1024,6 +1058,20 @@ DO JL=1,ISVECNMASK TDTCUR%nyear, XLAT,XLON, XLAT0, XLON0, LUSERV, & LUSERC, LUSERR, KLUOUT, CCLOUD ) ENDIF + CASE ('LIMA') !add cloud and rain C. for mean radius + IF (GSPLIT) THEN ! LWC and LWR computed from tendencies + CALL CH_METEO_TRANS_LIMA(JL, XRHODJ, XRHODREF, XRRS, XRSVS(:,:,:,NSV_LIMA_NC), & + XRSVS(:,:,:,NSV_LIMA_NR), XTHT, XPABST, ISVECNPT, & + ISVECMASK, TZM, TDTCUR%nday, TDTCUR%nmonth, & + TDTCUR%nyear, XLAT,XLON, XLAT0, XLON0, LUSERV, & + LUSERC, LUSERR, KLUOUT, CCLOUD, PTSTEP ) + ELSE + CALL CH_METEO_TRANS_LIMA(JL, XRHODJ, XRHODREF, XRT, XSVT(:,:,:,NSV_LIMA_NC), & + XSVT(:,:,:,NSV_LIMA_NR), XTHT, XPABST, ISVECNPT, & + ISVECMASK, TZM, TDTCUR%nday, TDTCUR%nmonth, & + TDTCUR%nyear, XLAT,XLON, XLAT0, XLON0, LUSERV, & + LUSERC, LUSERR, KLUOUT, CCLOUD ) + ENDIF END SELECT ! !* 4.3 calculate reaction and photolysis rates and current pH value @@ -1061,8 +1109,8 @@ DO JL=1,ISVECNMASK ! IF (LORILAM) THEN IF (KTCOUNT == 1) THEN - CALL CH_INI_ORILAM(ZM, ZSIG0, ZRG0, ZN0, ZCTOTG, ZCTOTA, ZCCTOT, & - ZSEDA, ZOM, ZRHOP0, ZAERO, ZCHEM, ZRV, ZDENAIR, & + CALL CH_INI_ORILAM(ZM, ZLNSIG, ZRG, ZN, ZCTOTG, ZCTOTA, ZCCTOT, & + ZSEDA, ZRHOP, ZAERO, ZCHEM, ZRV, ZDENAIR, & ZPRESSURE, ZTEMP, ZRC, ZFRAC, ZMI,CCH_SCHEME) END IF ! transfer non-volatile species from aerosol to gas-phase variables @@ -1089,13 +1137,16 @@ DO JL=1,ISVECNMASK !* 4.6 solve aerosol system ! IF (LORILAM) THEN - ZSO4RAT(:) = (ZNEWCHEM(:,JP_CH_H2SO4)-ZOLDCHEM(:,JP_CH_H2SO4)) / PTSTEP + !ZSO4RAT(:) = (ZNEWCHEM(:,JP_CH_H2SO4)-ZOLDCHEM(:,JP_CH_H2SO4)) / PTSTEP + ZSO4RAT(:) = (ZNEWCHEM(:,JP_CH_H2SO4)) / PTSTEP ZOLDAERO(:,:) = ZAERO(:,:) - CALL CH_ORILAM(ZAERO,ZNEWCHEM, ZM, ZSIG0, ZRG0, ZN0, ZCTOTG, & + CALL CH_ORILAM(ZAERO,ZNEWCHEM, ZM, ZLNSIG, ZRG, ZN, ZCTOTG, & ZCTOTA, ZCCTOT, PTSTEP, ZSEDA, & - ZMU, ZLAMBDA, ZRHOP0, ZOM, ZSO4RAT, & + ZRHOP, ZSO4RAT, & ZRV, ZDENAIR,ZPRESSURE, ZTEMP, ZRC, ZFRAC, ZMI, & - ZTIME,CCH_SCHEME,ZSOLORG ) + ZTIME,CCH_SCHEME,ZSOLORG, ZJNUC, ZJ2RAT, ZMBEG,ZMINT,ZMEND,& + ZDMINTRA,ZDMINTER,ZDMCOND,ZDMNUCL,ZDMMERG,& + ZCONC_MASS,ZCOND_MASS_I,ZCOND_MASS_J,ZNUCL_MASS) ZNEWAERO(:,:) = ZAERO(:,:) ! !* 4.7 return results to MesoNH scalar variables - aerosols @@ -1108,14 +1159,29 @@ DO JL=1,ISVECNMASK JJ=JM/IDTI-IDTJ*(JM/(IDTI*IDTJ))+ISVECMASK(3,JL) JK=JM/(IDTI*IDTJ)-IDTK*(JM/(IDTI*IDTJ*IDTK))+ISVECMASK(5,JL) ! - XSIG3D(JI,JJ,JK,:) = EXP(ZSIG0(JM+1,:)) - XRG3D(JI,JJ,JK,:) = ZRG0(JM+1,:) - XN3D(JI,JJ,JK,:) = ZN0(JM+1,:) - XRHOP3D(JI,JJ,JK,:) = ZRHOP0(JM+1,:) + XSIG3D(JI,JJ,JK,:) = EXP(ZLNSIG(JM+1,:)) + XRG3D(JI,JJ,JK,:) = ZRG(JM+1,:) + XN3D(JI,JJ,JK,:) = ZN(JM+1,:) + XRHOP3D(JI,JJ,JK,:) = ZRHOP(JM+1,:) XCTOTA3D(JI,JJ,JK,:,:) = ZCTOTA(JM+1,:,:) XM3D(JI,JJ,JK,:) = ZM(JM+1,:) XFRAC(JI,JJ,JK,:) = ZFRAC(JM+1,:) XMI(JI,JJ,JK,:) = ZMI(JM+1,:) + ! + XJNUC(JI,JJ,JK) = ZJNUC(JM+1) + XJ2RAT(JI,JJ,JK) = ZJ2RAT(JM+1) + XCONC_MASS(JI,JJ,JK) = ZCONC_MASS(JM+1) + XCOND_MASS_I(JI,JJ,JK) = ZCOND_MASS_I(JM+1) + XCOND_MASS_J(JI,JJ,JK) = ZCOND_MASS_J(JM+1) + XNUCL_MASS(JI,JJ,JK) = ZNUCL_MASS(JM+1) + XMBEG(JI,JJ,JK,:) = ZMBEG(JM+1,:) + XMINT(JI,JJ,JK,:) = ZMINT(JM+1,:) + XMEND(JI,JJ,JK,:) = ZMEND(JM+1,:) + XDMINTRA(JI,JJ,JK,:) = ZDMINTRA(JM+1,:) + XDMINTER(JI,JJ,JK,:) = ZDMINTER(JM+1,:) + XDMCOND(JI,JJ,JK,:) = ZDMCOND(JM+1,:) + XDMNUCL(JI,JJ,JK,:) = ZDMNUCL(JM+1,:) + XDMMERG(JI,JJ,JK,:) = ZDMMERG(JM+1,:) END DO DO JN = 1, NSV_AER !Vectorization: @@ -1295,8 +1361,12 @@ if ( lbudget_sv ) then do jsv = nsv_chembeg, nsv_chemend call Budget_store_end( tbudgets(NBUDGET_SV1 - 1 + jsv), 'CHEM', xrsvs(:, :, :, jsv) ) enddo + do jsv = nsv_aerbeg, nsv_aerend + call Budget_store_end( tbudgets(NBUDGET_SV1 - 1 + jsv), 'AER', xrsvs(:, :, :, jsv) ) + enddo endif +! !---------------------------------------------------------------------- ! IF ((CPROGRAM =='DIAG ').OR.(L1D)) THEN @@ -1328,16 +1398,13 @@ IF (LORILAM) THEN DEALLOCATE(ZOLDAERO) DEALLOCATE(ZM) DEALLOCATE(ZSEDA) - DEALLOCATE(ZN0) - DEALLOCATE(ZRG0) - DEALLOCATE(ZSIG0) - DEALLOCATE(ZRHOP0) + DEALLOCATE(ZN) + DEALLOCATE(ZRG) + DEALLOCATE(ZLNSIG) + DEALLOCATE(ZRHOP) DEALLOCATE(ZCTOTA) DEALLOCATE(ZCCTOT) DEALLOCATE(ZCTOTG) - DEALLOCATE(ZMU) - DEALLOCATE(ZLAMBDA) - DEALLOCATE(ZOM) DEALLOCATE(ZSO4RAT) DEALLOCATE(ZRV) DEALLOCATE(ZRC) @@ -1349,6 +1416,14 @@ IF (LORILAM) THEN DEALLOCATE(ZSOLORG) DEALLOCATE(XDP) DEALLOCATE(XSURF) + DEALLOCATE(ZMBEG) + DEALLOCATE(ZMINT) + DEALLOCATE(ZMEND) + DEALLOCATE(ZDMINTRA) + DEALLOCATE(ZDMINTER) + DEALLOCATE(ZDMCOND) + DEALLOCATE(ZDMNUCL) + DEALLOCATE(ZDMMERG) END IF !------------------------------------------------------------------------------- ! diff --git a/src/MNH/ch_orilam.f90 b/src/MNH/ch_orilam.f90 index 3e4e1219db5865ec837ded090bd7eb733a73ceaa..22c7764e791fd0c5b08059208ca88054013e2281 100644 --- a/src/MNH/ch_orilam.f90 +++ b/src/MNH/ch_orilam.f90 @@ -3,28 +3,28 @@ !ORILAM_LIC version 1. See LICENSE, CeCILL-C_V1-en.txt and CeCILL-C_V1-fr.txt !ORILAM_LIC for details. !----------------------------------------------------------------- -!--------------- special set of characters for RCS information -!----------------------------------------------------------------- -! $Source: /home/cvsroot/MNH-VX-Y-Z/src/MNH/ch_orilam.f90,v $ $Revision: 1.1.2.1.2.1.18.1 $ -! MASDEV4_7 chimie 2007/03/02 13:59:37 -!----------------------------------------------------------------- -!! ######################### +!! ##################### MODULE MODI_CH_ORILAM -!! ######################### +!! ##################### !! INTERFACE !! -SUBROUTINE CH_ORILAM(PAERO, PCHEM, PM, PSIG0, PRG0, PN0, PCTOTG, PCTOTA,& - PCCTOT, PDTACT, PSEDA,& - PMU, PLAMBDA, PRHOP0, POM, PSO4RAT, & - PRV, PDENAIR, PPRESSURE, PTEMP, PRC, PFRAC, PMI,& - PTIME, GSCHEME, PSOLORG) +SUBROUTINE CH_ORILAM(PAERO, PCHEM, PM, PLNSIG, PRG, PN, PCTOTG, PCTOTA, & + PCCTOT, PDTACT, PSEDA, & + PRHOP, PSO4RAT, & + PRV, PDENAIR, PPRESSURE, PTEMP, PRC, PFRAC, PMI, & + PTIME, GSCHEME, PSOLORG, & + PJNUC,PJ2RAT,PMBEG,PMINT,PMEND,PDMINTRA, & + PDMINTER,PDMCOND,PDMNUCL,PDMMERG, & + PCONC_MASS,PCOND_MASS_I,PCOND_MASS_J,PNUCL_MASS) +!! IMPLICIT NONE REAL, INTENT(IN) :: PDTACT, PTIME -REAL, DIMENSION(:,:), INTENT(INOUT) :: PRHOP0, POM -REAL, DIMENSION(:), INTENT(INOUT) :: PLAMBDA, PMU, PSO4RAT +REAL, DIMENSION(:,:), INTENT(INOUT) :: PRHOP +REAL, DIMENSION(:), INTENT(INOUT) :: PSO4RAT +REAL, DIMENSION(:), INTENT(INOUT) :: PJNUC, PJ2RAT REAL, DIMENSION(:,:), INTENT(INOUT) :: PM -REAL, DIMENSION(:,:), INTENT(INOUT) :: PSIG0, PRG0, PN0 +REAL, DIMENSION(:,:), INTENT(INOUT) :: PLNSIG, PRG, PN REAL, DIMENSION(:,:), INTENT(INOUT) :: PCTOTG REAL, DIMENSION(:,:), INTENT(INOUT) :: PSEDA REAL, DIMENSION(:,:), INTENT(INOUT) :: PCHEM @@ -35,35 +35,30 @@ REAL, DIMENSION(:,:,:), INTENT(INOUT) :: PCTOTA, PCCTOT REAL, DIMENSION(:,:), INTENT(INOUT) :: PSOLORG REAL, DIMENSION(:), INTENT(IN) :: PRV, PDENAIR, PPRESSURE, PTEMP, PRC CHARACTER(LEN=10), INTENT(IN) :: GSCHEME - - +REAL, DIMENSION(:,:), INTENT(INOUT) :: PMBEG,PMINT,PMEND +REAL, DIMENSION(:,:), INTENT(INOUT) :: PDMINTRA,PDMINTER,PDMCOND,PDMNUCL,PDMMERG +REAL, DIMENSION(:), INTENT(INOUT) :: PCONC_MASS,PCOND_MASS_I,PCOND_MASS_J,PNUCL_MASS +!! END SUBROUTINE CH_ORILAM !! END INTERFACE !! END MODULE MODI_CH_ORILAM !! -!! ##################################################################################### -SUBROUTINE CH_ORILAM(PAERO, PCHEM, PM, PSIG0, PRG0, PN0, PCTOTG, PCTOTA,& - PCCTOT, PDTACT, PSEDA,& - PMU, PLAMBDA, PRHOP0, POM, PSO4RAT, & - PRV, PDENAIR, PPRESSURE, PTEMP, PRC, PFRAC, PMI,& - PTIME, GSCHEME, PSOLORG) -!! ##################################################################################### +!! ####################################################################### +SUBROUTINE CH_ORILAM(PAERO, PCHEM, PM, PLNSIG, PRG, PN, PCTOTG, PCTOTA, & + PCCTOT, PDTACT, PSEDA, & + PRHOP, PSO4RAT, & + PRV, PDENAIR, PPRESSURE, PTEMP, PRC, PFRAC, PMI, & + PTIME, GSCHEME, PSOLORG, & + PJNUC, PJ2RAT, PMBEG, PMINT, PMEND, PDMINTRA, & + PDMINTER, PDMCOND, PDMNUCL, PDMMERG, & + PCONC_MASS, PCOND_MASS_I, PCOND_MASS_J, PNUCL_MASS) +!! ####################################################################### !! !! PURPOSE !! ------- -!! !! ORILAM aerosol Code -!! -!! -!! Inputs: -!! PCHEM : Chemical (gaseous and aerosol) species (in molec./cm3) -!! PSEDA : Moments -!! -!! Outputs: -!! -!! !! !! REFERENCE !! --------- @@ -84,56 +79,77 @@ SUBROUTINE CH_ORILAM(PAERO, PCHEM, PM, PSIG0, PRG0, PN0, PCTOTG, PCTOTA,& !! !! EXTERNAL !! -------- -USE MODI_CH_AER_TRANS -USE MODI_CH_AER_DRIVER - +!! MODI_CH_AER_TRANS +!! MODI_CH_AER_DRIVER !! -!! IMPLICIT ARGUMENTS -!! ------------------ +!! IMPLICIT ARGUMENTS +!! ------------------ +!! MODD_CH_AEROSOL !! -USE MODD_CH_AEROSOL -! !------------------------------------------------------------------------------- ! !* 0. DECLARATIONS ! ------------ ! +USE MODI_CH_AER_TRANS +USE MODI_CH_AER_DRIVER +! +USE MODD_CH_AEROSOL +! IMPLICIT NONE +! +! +!* 0.1 declarations of arguments +! REAL, INTENT(IN) :: PDTACT, PTIME REAL, DIMENSION(:,:), INTENT(INOUT) :: PM -REAL, DIMENSION(:,:), INTENT(INOUT) :: PRHOP0, POM -REAL, DIMENSION(:), INTENT(INOUT) :: PLAMBDA, PMU, PSO4RAT +REAL, DIMENSION(:,:), INTENT(INOUT) :: PRHOP +REAL, DIMENSION(:), INTENT(INOUT) :: PSO4RAT +REAL, DIMENSION(:), INTENT(INOUT) :: PJNUC, PJ2RAT REAL, DIMENSION(:,:), INTENT(INOUT) :: PSEDA REAL, DIMENSION(:,:), INTENT(INOUT) :: PCHEM REAL, DIMENSION(:,:), INTENT(INOUT) :: PAERO REAL, DIMENSION(:,:), INTENT(INOUT) :: PFRAC REAL, DIMENSION(:,:), INTENT(INOUT) :: PMI -REAL, DIMENSION(:,:), INTENT(INOUT) :: PSIG0, PRG0, PN0 +REAL, DIMENSION(:,:), INTENT(INOUT) :: PLNSIG, PRG, PN REAL, DIMENSION(:,:), INTENT(INOUT) :: PCTOTG REAL, DIMENSION(:,:,:), INTENT(INOUT) :: PCTOTA, PCCTOT REAL, DIMENSION(:,:), INTENT(INOUT) :: PSOLORG REAL, DIMENSION(:), INTENT(IN) :: PRV, PDENAIR, PPRESSURE, PTEMP, PRC CHARACTER(LEN=10), INTENT(IN) :: GSCHEME - +REAL, DIMENSION(:,:), INTENT(INOUT) :: PMBEG,PMINT,PMEND +REAL, DIMENSION(:,:), INTENT(INOUT) :: PDMINTRA,PDMINTER,PDMCOND,PDMNUCL,PDMMERG +REAL, DIMENSION(:), INTENT(INOUT) :: PCONC_MASS,PCOND_MASS_I,PCOND_MASS_J,PNUCL_MASS +! +!* 0.2 declarations of local variables +! REAL, DIMENSION(SIZE(PAERO,1),JPMODE) :: ZMASK +REAL, DIMENSION(SIZE(PAERO,1)) :: ZSULF ! !------------------------------------------------------------------------------- -!initialize ZMASK +! +!* 1. COMPUTATION +! ----------- +! ZMASK(:,:) = 1. ! -! transfer gas phase variables into aerosol variables -CALL CH_AER_TRANS(0, PM, PSIG0, PRG0, PN0, PRHOP0,PAERO, PCHEM, PCTOTG, PCTOTA, PCCTOT,& - PFRAC, PMI, ZMASK,GSCHEME) - -! integrate aerosol variables -CALL CH_AER_DRIVER(PM,PSIG0, PRG0, PN0, PCTOTG, PCTOTA, PCCTOT, & - PDTACT, PSEDA, PMU, PLAMBDA, PRHOP0, POM, PSO4RAT, & +!* 1.1 transfer gas phase variables into aerosol variables +! +CALL CH_AER_TRANS(0, PM, PLNSIG, PRG, PN, PRHOP,PAERO, PCHEM, PCTOTG, PCTOTA, PCCTOT, & + PFRAC, PMI, ZMASK, GSCHEME) +! +!* 1.2 integrate aerosol variables +! +CALL CH_AER_DRIVER(PM,PLNSIG, PRG, PN, PCTOTG, PCTOTA, PCCTOT, & + PDTACT, PSEDA, PRHOP, PSO4RAT, & PRV, PDENAIR, PPRESSURE, PTEMP, PRC, ZMASK, PTIME, & - PSOLORG) + PSOLORG,PJNUC,PJ2RAT,PMBEG,PMINT,PMEND,PDMINTRA, & + PDMINTER,PDMCOND,PDMNUCL,PDMMERG, & + PCONC_MASS,PCOND_MASS_I,PCOND_MASS_J,PNUCL_MASS ) ! -! transfer aerosol variables back into gas phase variables - CALL CH_AER_TRANS(1, PM, PSIG0, PRG0, PN0, PRHOP0, PAERO, PCHEM, PCTOTG, PCTOTA, PCCTOT,& - PFRAC, PMI, ZMASK,GSCHEME) +!* 1.3 transfer aerosol variables back into gas phase variables ! +CALL CH_AER_TRANS(1, PM, PLNSIG, PRG, PN, PRHOP, PAERO, PCHEM, PCTOTG, PCTOTA, PCCTOT, & + PFRAC, PMI, ZMASK,GSCHEME) ! END SUBROUTINE CH_ORILAM diff --git a/src/MNH/coupling_dmsn.F90 b/src/MNH/coupling_dmsn.F90 new file mode 100644 index 0000000000000000000000000000000000000000..f9804bd588969ac3d6be6424ae31bca7e94f626c --- /dev/null +++ b/src/MNH/coupling_dmsn.F90 @@ -0,0 +1,58 @@ +SUBROUTINE COUPLING_DMS_n(KI,& !! number of sea points + PWIND, & !! wind (m s-1) + PSST,& !! sea surface temperature (K) + DMS_OCEANIC,& !! DMS oceanic content (mol m-3) + PSFDMS) !! DMS emssion flux (mol m-2 s-1) +! + implicit none + +integer, intent(in) :: KI !! number of sea points +real,dimension(KI), intent(in) :: PWIND !! wind (m s-1) +real, dimension(KI), intent(in) :: PSST !! sea surface temperature (K) +real, dimension(KI), intent(in) :: DMS_OCEANIC !! DMS ocenanic content (mol m-3) +real,dimension(KI), intent(out) :: PSFDMS !! DMS emission flux (mol m-2 s-1) + +!!! local variables + +real,dimension(KI) :: sc_dms !! Schmidt number for DMS +real,parameter :: sc_co2 = 600. !! Schmidt number for CO2 +real,dimension(KI) :: zsst !! sea surface temperature (°C) +real,dimension(KI) :: k600 !! standard air-sea exchange coefficient for CO2 (m s-1) +real,dimension(KI) :: k_dms !! air-sea exchange coefficient for DMS (m s-1) + +! sea surface temperature (in °C) must be comprised between 5 and 30 °C + +ZSST(:) = PSST(:) - 273.15 +where (ZSST(:) < 5.) + ZSST(:) = 5. +endwhere + +where (ZSST(:) > 30.) + ZSST(:) = 30. +endwhere + + +! Schmidt number for DMS, using the sst in celsius, from +! Saltzman et al., 1993 (without unit) + +sc_dms(:) = 2674.0 - (147.12*ZSST(:)) + (3.726*(ZSST(:)**2.0)) - (0.038*(ZSST(:)**3.0)) + +! k600: Sea - air exchange coefficient from Nightingale et al. 2000 (in cm/hour) +! k600 is the standard air-sea exchange coefficient for CO2 gas, related to +! a Schmidt number of 600 + +k600(:) = 0.222*(PWIND(:)**2.0) + 0.333*PWIND(:) +! conversion into m s-1 +k600(:) = k600(:) *1.0e-2/3600. + + +! k_dms : air-sea exchange coefficient for DMS in m s-1 + +k_dms(:) = k600(:)*(sc_dms(:)/sc_co2)**(-0.5) + +! DMS emsission flux in mol m-2 s-1 + +PSFDMS(:) = k_dms(:) * DMS_OCEANIC(:) + +END SUBROUTINE COUPLING_DMS_n + diff --git a/src/MNH/deallocate_model1.f90 b/src/MNH/deallocate_model1.f90 index 3b0b4673893c19604b474aa94d5979f9d97c7b50..f73c628c8730c1f457010036351ef1b7263477b3 100644 --- a/src/MNH/deallocate_model1.f90 +++ b/src/MNH/deallocate_model1.f90 @@ -198,6 +198,10 @@ IF ( ASSOCIATED(XCLDFR) .AND. KCALL==2 ) THEN DEALLOCATE(XCLDFR) END IF ! +IF ( ASSOCIATED(XICEFR) .AND. KCALL==2 ) THEN + DEALLOCATE(XICEFR) +END IF +! IF ( ASSOCIATED(XRAINFR) .AND. KCALL==2 ) THEN DEALLOCATE(XRAINFR) END IF diff --git a/src/MNH/default_desfmn.f90 b/src/MNH/default_desfmn.f90 index c656a19af214c8c32027fdd699cc8e3d6842b52a..51b902548ce2544ef0f8ee84e7409faab45b4fd0 100644 --- a/src/MNH/default_desfmn.f90 +++ b/src/MNH/default_desfmn.f90 @@ -219,6 +219,8 @@ END MODULE MODI_DEFAULT_DESFM_n ! Q. Rodier 06/2021: modify default value to LGZ=F (grey-zone corr.), LSEDI and OSEDC=T (LIMA sedimentation) ! F. Couvreux 06/2021: add LRELAX_UVMEAN_FRC ! Q. Rodier 07/2021: modify XPOND=1 +! C. Barthe 03/2022: add CIBU and RDSF options in LIMA +! Delbeke/Vie 03/2022 : KHKO option in LIMA !------------------------------------------------------------------------------- ! !* 0. DECLARATIONS @@ -274,12 +276,12 @@ USE MODD_ALLSTATION_n ! ! USE MODD_PARAM_LIMA, ONLY : LCOLD, LNUCL, LSEDI, LHHONI, LSNOW, LHAIL, LMEYERS, & - NMOD_IFN, XIFN_CONC, LIFN_HOM, CIFN_SPECIES, & - CINT_MIXING, NMOD_IMM, NIND_SPECIE, & - CPRISTINE_ICE_LIMA, CHEVRIMED_ICE_LIMA, & + NMOD_IFN, NMOM_I, XIFN_CONC, LIFN_HOM, CIFN_SPECIES, & + CINT_MIXING, NMOD_IMM, NIND_SPECIE, LMURAKAMI, & + YSNOW_T=>LSNOW_T, CPRISTINE_ICE_LIMA, CHEVRIMED_ICE_LIMA, & XFACTNUC_DEP, XFACTNUC_CON, & OWARM=>LWARM, LACTI, ORAIN=>LRAIN, OSEDC=>LSEDC, & - OACTIT=>LACTIT, LBOUND, LSPRO, LADJ, & + OACTIT=>LACTIT, LBOUND, LSPRO, LADJ, LKHKO, & NMOD_CCN, XCCN_CONC, & LCCN_HOM, CCCN_MODES, & YALPHAR=>XALPHAR, YNUR=>XNUR, & @@ -288,6 +290,7 @@ USE MODD_PARAM_LIMA, ONLY : LCOLD, LNUCL, LSEDI, LHHONI, LSNOW, LHAIL, LMEYERS, YACTEMP_CCN=>XACTEMP_CCN, YAERDIFF=>XAERDIFF, & YAERHEIGHT=>XAERHEIGHT, & LSCAV, LAERO_MASS, NPHILLIPS, & + LCIBU, XNDEBRIS_CIBU, LRDSF, & ODEPOC=>LDEPOC, OVDEPOC=>XVDEPOC, OACTTKE=>LACTTKE, & LPTSPLIT, L_LFEEDBACKT=>LFEEDBACKT, L_NMAXITER=>NMAXITER, & L_XMRSTEP=>XMRSTEP, L_XTSTEP_TS=>XTSTEP_TS @@ -871,7 +874,8 @@ IF (KMI == 1) THEN CFRAC_ICE_SHALLOW_MF = 'S' LSEDIM_AFTER = .FALSE. LDEPOSC = .FALSE. - XVDEPOSC= 0.02 ! 2 cm/s + XVDEPOSC= 0.02 ! 2 cm/s + LSNOW_T=.FALSE. END IF ! !------------------------------------------------------------------------------- @@ -991,6 +995,7 @@ IF (KMI == 1) THEN OACTIT = .FALSE. LADJ = .TRUE. LSPRO = .FALSE. + LKHKO = .FALSE. ODEPOC = .FALSE. LBOUND = .FALSE. OACTTKE = .TRUE. @@ -1024,10 +1029,13 @@ IF (KMI == 1) THEN LSEDI = .TRUE. LSNOW = .TRUE. LHAIL = .FALSE. + YSNOW_T = .TRUE. + LMURAKAMI = .TRUE. CPRISTINE_ICE_LIMA = 'PLAT' CHEVRIMED_ICE_LIMA = 'GRAU' XFACTNUC_DEP = 1.0 XFACTNUC_CON = 1.0 + NMOM_I = 2 NMOD_IFN = 1 NIND_SPECIE = 1 LMEYERS = .FALSE. @@ -1037,6 +1045,9 @@ IF (KMI == 1) THEN XIFN_CONC(:) = 100. NMOD_IMM = 0 NPHILLIPS=8 + LCIBU = .FALSE. + XNDEBRIS_CIBU = 50.0 + LRDSF = .FALSE. ENDIF ! !------------------------------------------------------------------------------- diff --git a/src/MNH/dustcamsn.f90 b/src/MNH/dustcamsn.f90 new file mode 100644 index 0000000000000000000000000000000000000000..33966adfd96f0d7b3e6d5684f374c77cc7721e38 --- /dev/null +++ b/src/MNH/dustcamsn.f90 @@ -0,0 +1,214 @@ + +!--------------- special set of characters for RCS information +!----------------------------------------------------------------- +! $Source: /home/cvsroot/MNH-VX-Y-Z/src/MNH/dustlfin.f90,v $ $Revision: 1.1.2.2.2.1.2.1 $ +! MASDEV4_7 newsrc 2007/01/25 13:13:15 +!----------------------------------------------------------------- +! ######################## + MODULE MODI_DUSTCAMS_n +! ######################## +! +INTERFACE +! +SUBROUTINE DUSTCAMS_n(PSV, PMASSCAMS, PRHODREF) +IMPLICIT NONE +REAL, DIMENSION(:,:,:,:),INTENT(INOUT) :: PSV +REAL, DIMENSION(:,:,:,:), INTENT(IN) :: PMASSCAMS +REAL, DIMENSION(:,:,:), INTENT(IN) :: PRHODREF +END SUBROUTINE DUSTCAMS_n +! +END INTERFACE +! +END MODULE MODI_DUSTCAMS_n +! +! +! ############################################################ + SUBROUTINE DUSTCAMS_n(PSV, PMASSCAMS,PRHODREF) +! ############################################################ +! +!! PURPOSE +!! ------- +!! Initialise le champs de dusts à partir des analyses CAMS +!! +!! REFERENCE +!! --------- +!! none +!! +!! AUTHOR +!! ------ +!! Pierre TULET (LACy) +!! +!! MODIFICATIONS +!! ------------- +!! none +!! +!! EXTERNAL +!! -------- +!! None +!! +!------------------------------------------------------------------------------- +! +!* 0. DECLARATIONS +! ------------ +! +USE MODD_DUST +USE MODD_NSV +USE MODD_CSTS_DUST +USE MODE_DUST_PSD +! +IMPLICIT NONE +! +!* 0.1 declarations of arguments +! +REAL, DIMENSION(:,:,:,:), INTENT(INOUT) :: PSV +REAL, DIMENSION(:,:,:,:), INTENT(IN) :: PMASSCAMS +REAL, DIMENSION(:,:,:), INTENT(IN) :: PRHODREF +! +! +!* 0.2 declarations local variables +! +REAL :: ZDEN2MOL, ZRHOI, ZMI, ZFAC, ZRGMIN +REAL,DIMENSION(:,:,:,:), ALLOCATABLE :: ZCTOTA +REAL,DIMENSION(:,:,:,:), ALLOCATABLE :: ZM +REAL,DIMENSION(:,:,:), ALLOCATABLE :: ZSIGMA +REAL,DIMENSION(:,:,:,:), ALLOCATABLE :: ZMASS +INTEGER,DIMENSION(:), ALLOCATABLE :: IM0, IM3, IM6 +REAL,DIMENSION(:), ALLOCATABLE :: ZMMIN +REAL,DIMENSION(:), ALLOCATABLE :: ZINIRADIUS, ZINISIGMA +REAL :: ZRHOMIN +INTEGER :: IKU, IMOMENTS +INTEGER :: JJ, JN, JK ! loop counter +INTEGER :: IMODEIDX ! index mode +! +!------------------------------------------------------------------------------- +! +!* 1. TRANSFER FROM GAS TO AEROSOL MODULE +! ----------------------------------- +! +! 1.1 initialisation +! +IKU = SIZE(PSV,3) +ZRHOMIN=MINVAL(PRHODREF) +! +ALLOCATE (IM0(NMODE_DST)) +ALLOCATE (IM3(NMODE_DST)) +ALLOCATE (IM6(NMODE_DST)) +ALLOCATE (ZCTOTA(SIZE(PSV,1), SIZE(PSV,2), SIZE(PSV,3), NMODE_DST)) +ALLOCATE (ZM(SIZE(PSV,1), SIZE(PSV,2), SIZE(PSV,3), NMODE_DST*3)) +ALLOCATE (ZSIGMA(SIZE(PSV,1), SIZE(PSV,2), SIZE(PSV,3))) +ALLOCATE (ZINIRADIUS(NMODE_DST)) +ALLOCATE (ZINISIGMA(NMODE_DST)) +ALLOCATE (ZMMIN(NMODE_DST*3)) +ALLOCATE (ZMASS(SIZE(PSV,1), SIZE(PSV,2), SIZE(PSV,3),NMODE_DST)) +! +! +DO JN = 1, NMODE_DST + IM0(JN) = 1 + (JN - 1) * 3 + IM3(JN) = 2 + (JN - 1) * 3 + IM6(JN) = 3 + (JN - 1) * 3 + ! + !Get the dust mode we are talking about, MODE 2 is treated first, then mode 3, then 1 + !This index is only needed to get the right radius out of the XINIRADIUS array and the + !right XINISIG out of the XINISIG-array + IMODEIDX = JPDUSTORDER(JN) + ! + !Convert initial mass median radius to number median radius + IF (CRGUNITD=="MASS") THEN + ZINIRADIUS(JN) = XINIRADIUS(IMODEIDX) * EXP(-3.*(LOG(XINISIG(IMODEIDX)))**2) + ELSE + ZINIRADIUS(JN) = XINIRADIUS(IMODEIDX) + END IF + ZINISIGMA(JN) = XINISIG(IMODEIDX) + ! + ZMMIN(IM0(JN)) = XN0MIN(IMODEIDX) + ZRGMIN = ZINIRADIUS(JN) + ZMMIN(IM3(JN)) = XN0MIN(IMODEIDX) * (ZRGMIN**3)*EXP(4.5 * LOG(ZINISIGMA(JN))**2) + ZMMIN(IM6(JN)) = XN0MIN(IMODEIDX) * (ZRGMIN**6)*EXP(18. * LOG(ZINISIGMA(JN))**2) + + IF (JPDUSTORDER(JN) == 1) ZMASS(:,:,:,JN) = PMASSCAMS(:,:,:,1) ! fin mode + IF (JPDUSTORDER(JN) == 2) ZMASS(:,:,:,JN) = PMASSCAMS(:,:,:,2) ! median mode + IF (JPDUSTORDER(JN) == 3) ZMASS(:,:,:,JN) = PMASSCAMS(:,:,:,3) ! large mode + +ENDDO + +ZMASS(:,:,:,:) = MAX(ZMASS(:,:,:,:), 1E-40) +! +! +ZRHOI = XDENSITY_DUST !1.8e3 !++changed alfgr +ZMI = XMOLARWEIGHT_DUST +ZDEN2MOL = 1E-6 * XAVOGADRO / XMD +ZFAC = (4. / 3.) * XPI * ZRHOI * 1.e-9 + +! +DO JN = 1, NMODE_DST + +!* 1.1 calculate moment 0 from ZMASS +! + ZM(:,:,:,IM0(JN)) = ZMASS(:,:,:,JN) &![kg_{dust}/kg_{air} + / XDENSITY_DUST &![kg__{dust}/m3_{dust}==>m3_{dust}/m3{air} + * (6.d0 / XPI) & + / (2.d0 * ZINIRADIUS(JN) * 1.d-6)**3 &![particle/m_dust^{-3}]==> particle/m3 + * EXP(-4.5*(LOG(ZINISIGMA(JN)))**2) !Take into account distribution +! + ZM(:,:,:,IM0(JN)) = MAX(ZMMIN(IM0(JN)), ZM(:,:,:,IM0(JN))) +! +!* 1.2 calculate moment 3 from m0, RG and SIG +! + ZM(:,:,:,IM3(JN)) = ZM(:,:,:,IM0(JN)) * & + (ZINIRADIUS(JN)**3) * & + EXP(4.5*LOG(ZINISIGMA(JN))**2) + + ZM(:,:,:,IM3(JN)) = MAX(ZMMIN(IM3(JN)), ZM(:,:,:,IM3(JN))) +! +!* 1.3 calculate moment 6 from m0, RG and SIG +! + ZM(:,:,:,IM6(JN))= ZM(:,:,:,IM0(JN)) * ((ZINIRADIUS(JN)**6) * & + EXP(18.*(LOG(ZINISIGMA(JN)))**2)) +! + ZM(:,:,:,IM6(JN)) = MAX(ZMMIN(IM6(JN)), ZM(:,:,:,IM6(JN))) +! +!* 1.4 output concentration +! + IMOMENTS = INT(NSV_DSTEND - NSV_DSTBEG+1) / NMODE_DST + IF (IMOMENTS == 3) THEN + PSV(:,:,:,1+(JN-1)*3) = ZM(:,:,:,IM0(JN)) * XMD / (XAVOGADRO*PRHODREF(:,:,:)) + XSVMIN(NSV_DSTBEG-1+1+(JN-1)*3) = ZMMIN(IM0(JN)) * XMD / (XAVOGADRO*ZRHOMIN) + + PSV(:,:,:,2+(JN-1)*3) = ZM(:,:,:,IM3(JN)) * XMD*XPI * 4./3. * ZRHOI / & + (ZMI*XM3TOUM3*PRHODREF(:,:,:)) + XSVMIN(NSV_DSTBEG-1+2+(JN-1)*3) = ZMMIN(IM3(JN)) * XMD * XPI * 4. / 3. * ZRHOI / & + (ZMI*XM3TOUM3**ZRHOMIN) + + PSV(:,:,:,3+(JN-1)*3) = ZM(:,:,:,IM6(JN)) * XMD / (XAVOGADRO*1.d-6*PRHODREF(:,:,:)) + XSVMIN(NSV_DSTBEG-1+3+(JN-1)*3) = ZMMIN(IM6(JN)) * XMD / (XAVOGADRO*1.d-6* ZRHOMIN) + + ELSE IF (IMOMENTS == 2) THEN + PSV(:,:,:,1+(JN-1)*2) = ZM(:,:,:,IM0(JN)) * XMD / (XAVOGADRO*PRHODREF(:,:,:)) + XSVMIN(NSV_DSTBEG-1+1+(JN-1)*2) = ZMMIN(IM0(JN)) * XMD / (XAVOGADRO*ZRHOMIN) + + PSV(:,:,:,2+(JN-1)*2) = ZM(:,:,:,IM3(JN)) * XMD*XPI * 4./3. * ZRHOI / & + (ZMI*XM3TOUM3*PRHODREF(:,:,:)) + XSVMIN(NSV_DSTBEG-1+2+(JN-1)*2) = ZMMIN(IM3(JN)) * XMD * XPI * 4. / 3. * ZRHOI / & + (ZMI*XM3TOUM3**ZRHOMIN) + ELSE + PSV(:,:,:,JN) = ZM(:,:,:,IM3(JN)) * XMD*XPI * 4./3. * ZRHOI / & + (ZMI*XM3TOUM3*PRHODREF(:,:,:)) + XSVMIN(NSV_DSTBEG-1+JN) = ZMMIN(IM3(JN)) * XMD * XPI * 4. / 3. * ZRHOI / & + (ZMI*XM3TOUM3**ZRHOMIN) + + END IF +END DO + +! +DEALLOCATE(ZMMIN) +DEALLOCATE(ZINISIGMA) +DEALLOCATE(ZINIRADIUS) +DEALLOCATE(ZSIGMA) +DEALLOCATE(ZM) +DEALLOCATE(ZCTOTA) +DEALLOCATE(IM6) +DEALLOCATE(IM3) +DEALLOCATE(IM0) +DEALLOCATE(ZMASS) +! +END SUBROUTINE DUSTCAMS_n diff --git a/src/MNH/endstep.f90 b/src/MNH/endstep.f90 index d082702865c12623d57e9895f020bf120c4bccce..e5e616fed1d33286852a06d3ef41b0e023b2f777 100644 --- a/src/MNH/endstep.f90 +++ b/src/MNH/endstep.f90 @@ -192,6 +192,7 @@ END MODULE MODI_ENDSTEP !! J.Escobar : 15/09/2015 : WENO5 & JPHEXT <> 1 !! 02/2019 (S. Bielli) Sea salt : significant sea wave height influences salt emission; 5 salt modes ! P. Wautelet 02/2020: use the new data structures and subroutines for budgets +! P. Wautelet 02/2022: add sea salt !------------------------------------------------------------------------------ ! !* 0. DECLARATIONS @@ -208,12 +209,14 @@ USE MODD_CH_AEROSOL, ONLY: LORILAM USE MODD_CONF USE MODD_CTURB USE MODD_DUST, ONLY: LDUST +USE MODD_SALT, ONLY: LSALT USE MODD_DYN USE MODD_GRID_n USE MODD_LBC_n, ONLY: CLBCX, CLBCY USE MODD_NSV, ONLY: XSVMIN, NSV_CHEMBEG, NSV_CHEMEND, & NSV_AERBEG, NSV_AEREND,& NSV_DSTBEG, NSV_DSTEND,& + NSV_SLTBEG, NSV_SLTEND,& NSV_SNWBEG, NSV_SNWEND USE MODD_PARAM_C2R2, ONLY: LACTIT USE MODD_PARAM_LIMA, ONLY: LACTIT_LIMA=>LACTIT @@ -516,7 +519,24 @@ END IF ! !------------------------------------------------------------------------------ ! -!* 10. STORAGE IN BUDGET ARRAYS +!* 9. MINIMUM VALUE FOR SEA SALTS +! +IF (LSALT) THEN + IF ((SIZE(PLBXSVM,4) > NSV_SLTEND-1).AND.(SIZE(PLBXSVM,1) /= 0)) THEN + DO JSV=NSV_SLTBEG, NSV_SLTEND + PLBXSVM(:,:,:,JSV) = MAX(PLBXSVM(:,:,:,JSV), XSVMIN(JSV)) + END DO + END IF + IF ((SIZE(PLBYSVM,4) > NSV_SLTEND-1).AND.(SIZE(PLBYSVM,1) /= 0)) THEN + DO JSV=NSV_SLTBEG, NSV_SLTEND + PLBYSVM(:,:,:,JSV) = MAX(PLBYSVM(:,:,:,JSV), XSVMIN(JSV)) + END DO + END IF +END IF +! +!------------------------------------------------------------------------------ +! +!* 11. STORAGE IN BUDGET ARRAYS ! IF (LBU_ENABLE) THEN !Division by nbustep to compute average on the selected time period @@ -637,7 +657,7 @@ END IF ! !------------------------------------------------------------------------------ ! -!* 11. COMPUTATION OF PHASE VELOCITY +!* 12. COMPUTATION OF PHASE VELOCITY ! ----------------------------- ! ! It is temporarily set to a constant value diff --git a/src/MNH/endstep_budget.f90 b/src/MNH/endstep_budget.f90 index eef2796be9394b7317e9bd82c6a46ff3d417a344..947c0770403adadd9a59248a206102c50046cca6 100644 --- a/src/MNH/endstep_budget.f90 +++ b/src/MNH/endstep_budget.f90 @@ -105,7 +105,6 @@ integer :: jbu, jgrp ! call Print_msg( NVERB_DEBUG, 'BUD', 'Endstep_budget', 'called' ) -!Do not call Write_budget at the beginning of the simulation (this is necessary in the case were xbulen = xtstep) IF ( KTCOUNT == 1 ) RETURN SELECT CASE(CBUTYPE) diff --git a/src/MNH/ground_paramn.f90 b/src/MNH/ground_paramn.f90 index e876a5fbea13aacac9b51e447d8568e8cf44ddde..c438ead7fe900e3a1748ab41a9ca0656ccee065b 100644 --- a/src/MNH/ground_paramn.f90 +++ b/src/MNH/ground_paramn.f90 @@ -132,6 +132,7 @@ USE MODD_CST, ONLY : XP00, XCPD, XRD, XRV,XRHOLW, XDAY, XPI, XLVTT, XMD, USE MODD_PARAMETERS, ONLY : JPVEXT, XUNDEF USE MODD_DYN_n, ONLY : XTSTEP USE MODD_CH_MNHC_n, ONLY : LUSECHEM +USE MODD_CH_M9_n, ONLY : CNAMES USE MODD_FIELD_n, ONLY : XUT, XVT, XWT, XTHT, XRT, XPABST, XSVT, XTKET, XZWS USE MODD_METRICS_n, ONLY : XDXX, XDYY, XDZZ USE MODD_DIM_n, ONLY : NKMAX @@ -591,6 +592,7 @@ END IF ! ! Call to surface schemes ! + CALL COUPLING_SURF_ATM_n(YSURF_CUR,'MESONH', 'E',ZTIMEC, & XTSTEP, TDTCUR%nyear, TDTCUR%nmonth, TDTCUR%nday, TDTCUR%xtime, & IDIM1D,KSV_SURF,SIZE(XSW_BANDS), & @@ -687,7 +689,7 @@ END IF IF (LUSECHEM) THEN DO JSV=NSV_CHEMBEG,NSV_CHEMEND PSFSV(:,:,JSV) = ZSFTS(:,:,JSV) * XMD / ( XAVOGADRO * XRHODREF(:,:,IKB)) - IF ((LCHEMDIAG).AND.(CPROGRAM == 'DIAG ')) XCHFLX(:,:,JSV) = PSFSV(:,:,JSV) + IF ((LCHEMDIAG).AND.(CPROGRAM == 'DIAG ')) XCHFLX(:,:,JSV-NSV_CHEMBEG+1) = PSFSV(:,:,JSV) END DO ELSE PSFSV(:,:,NSV_CHEMBEG:NSV_CHEMEND) = 0. diff --git a/src/MNH/ice4_fast_rg.f90 b/src/MNH/ice4_fast_rg.f90 index b84dda857e7a679561f062eabbe0570f7fc22408..0f7dea2179ad05277f16065f54b35c893dbb4deb 100644 --- a/src/MNH/ice4_fast_rg.f90 +++ b/src/MNH/ice4_fast_rg.f90 @@ -94,6 +94,7 @@ SUBROUTINE ICE4_FAST_RG(KSIZE, LDSOFT, PCOMPUTE, KRR, & !! ! P. Wautelet 26/04/2019: replace non-standard FLOAT function by REAL function ! P. Wautelet 29/05/2019: remove PACK/UNPACK intrinsics (to get more performance and better OpenACC support) +! J. Wurtz 03/2022: New snow characteristics with LSNOW_T ! ! !* 0. DECLARATIONS @@ -337,10 +338,10 @@ ELSE WHERE(GDRY(:)) PRG_TEND(:, IRSWETG)=XFSDRYG*ZZW(:) & ! RSDRYG / XCOLSG & - *(PLBDAS(:)**(XCXS-XBS))*( PLBDAG(:)**XCXG ) & - *(PRHODREF(:)**(-XCEXVT-1.)) & - *( XLBSDRYG1/( PLBDAG(:)**2 ) + & - XLBSDRYG2/( PLBDAG(:) * PLBDAS(:) ) + & + *(PRST(:))*( PLBDAG(:)**XCXG ) & + *(PRHODREF(:)**(-XCEXVT)) & + *( XLBSDRYG1/( PLBDAG(:)**2 ) + & ! Il s'agit de moments (?) + XLBSDRYG2/( PLBDAG(:) * PLBDAS(:) ) + & XLBSDRYG3/( PLBDAS(:)**2)) PRG_TEND(:, IRSDRYG)=PRG_TEND(:, IRSWETG)*XCOLSG*EXP(XCOLEXSG*(PT(:)-XTT)) END WHERE diff --git a/src/MNH/ice4_fast_rh.f90 b/src/MNH/ice4_fast_rh.f90 index fcac937485414ba29fd691cb0774a32cb3ea4a3c..a21c85f19308cffede426f7b2510f52ef5cd447a 100644 --- a/src/MNH/ice4_fast_rh.f90 +++ b/src/MNH/ice4_fast_rh.f90 @@ -84,6 +84,7 @@ SUBROUTINE ICE4_FAST_RH(KSIZE, LDSOFT, PCOMPUTE, PWETG, & !! ! P. Wautelet 26/04/2019: replace non-standard FLOAT function by REAL function ! P. Wautelet 29/05/2019: remove PACK/UNPACK intrinsics (to get more performance and better OpenACC support) +! J. Wurtz 03/2022: New snow characteristics with LSNOW_T ! ! !* 0. DECLARATIONS @@ -269,9 +270,9 @@ ELSE END DO ! WHERE(GWET(:)) - PRH_TEND(:, IRSWETH)=XFSWETH*ZZW(:) & ! RSWETH - *( PLBDAS(:)**(XCXS-XBS) )*( PLBDAH(:)**XCXH ) & - *( PRHODREF(:)**(-XCEXVT-1.) ) & + PRH_TEND(:, IRSWETH)=XFSWETH*ZZW(:) & + *( PRST(:))*( PLBDAH(:)**XCXH ) & + *( PRHODREF(:)**(-XCEXVT) ) & *( XLBSWETH1/( PLBDAH(:)**2 ) + & XLBSWETH2/( PLBDAH(:) * PLBDAS(:) ) + & XLBSWETH3/( PLBDAS(:)**2) ) diff --git a/src/MNH/ice4_fast_rs.f90 b/src/MNH/ice4_fast_rs.f90 index 6d71c7b61b8188969aa488a3b22d65ad15d7cc26..d44b1bcc74d9c632b038c8a3937c3c3d4fbc1efa 100644 --- a/src/MNH/ice4_fast_rs.f90 +++ b/src/MNH/ice4_fast_rs.f90 @@ -77,6 +77,7 @@ SUBROUTINE ICE4_FAST_RS(KSIZE, LDSOFT, PCOMPUTE, & !! ! P. Wautelet 26/04/2019: replace non-standard FLOAT function by REAL function ! P. Wautelet 29/05/2019: remove PACK/UNPACK intrinsics (to get more performance and better OpenACC support) +! J. Wurtz 03/2022: New snow characteristics with LSNOW_T ! ! !* 0. DECLARATIONS @@ -85,7 +86,7 @@ SUBROUTINE ICE4_FAST_RS(KSIZE, LDSOFT, PCOMPUTE, & USE MODD_CST, ONLY: XALPI,XALPW,XBETAI,XBETAW,XCI,XCL,XCPV,XESTT,XGAMI,XGAMW,XLMTT,XLVTT,XMD,XMV,XRV,XTT, & XEPSILO USE MODD_PARAM_ICE, ONLY: LEVLIMIT, CSNOWRIMING -USE MODD_RAIN_ICE_DESCR, ONLY: XBS,XCEXVT,XCXS,XRTMIN +USE MODD_RAIN_ICE_DESCR, ONLY: XBS,XCEXVT,XCXS,XRTMIN,XALPHAS,XNUS,XFVELOS USE MODD_RAIN_ICE_PARAM, ONLY: NACCLBDAR,NACCLBDAS,NGAMINC,X0DEPS,X1DEPS,XACCINTP1R,XACCINTP1S,XACCINTP2R,XACCINTP2S, & XCRIMSG,XCRIMSS,XEX0DEPS,XEX1DEPS,XEXCRIMSG,XEXCRIMSS,XEXSRIMCG,XEXSRIMCG2,XFRACCSS, & XFSACCRG,XFSCVMG,XGAMINC_RIM1,XGAMINC_RIM1,XGAMINC_RIM2,XGAMINC_RIM4,XKER_RACCS, & @@ -170,9 +171,10 @@ ELSE PRS_TEND(:, IFREEZ1)=PKA(:)*(XTT-PT(:)) + & (PDV(:)*(XLVTT+(XCPV-XCL)*(PT(:)-XTT)) & *(XESTT-PRS_TEND(:, IFREEZ1))/(XRV*PT(:)) ) - PRS_TEND(:, IFREEZ1)=PRS_TEND(:, IFREEZ1)* ( X0DEPS* PLBDAS(:)**XEX0DEPS + & - X1DEPS*PCJ(:)*PLBDAS(:)**XEX1DEPS )/ & - ( PRHODREF(:)*(XLMTT-XCL*(XTT-PT(:))) ) + PRS_TEND(:, IFREEZ1)=PRS_TEND(:, IFREEZ1)* PRST(:) * ( X0DEPS* PLBDAS(:)**XEX0DEPS + & + X1DEPS*PCJ(:)*PLBDAS(:) **(XBS+XEX1DEPS)* & + (1+0.5*(XFVELOS/PLBDAS(:))**XALPHAS)**(-XNUS+XEX1DEPS/XALPHAS))/ & + ( PRHODREF(:)*(XLMTT-XCL*(XTT-PT(:))) ) PRS_TEND(:, IFREEZ2)=(PRHODREF(:)*(XLMTT+(XCI-XCL)*(XTT-PT(:))) ) / & ( PRHODREF(:)*(XLMTT-XCL*(XTT-PT(:))) ) END WHERE @@ -218,7 +220,7 @@ ELSE ! 5.1.1 select the PLBDAS ! DO JJ = 1, IGRIM - ZVEC1(JJ) = PLBDAS(I1(JJ)) + ZVEC1(JJ) = (PLBDAS(I1(JJ))**XALPHAS + XFVELOS**XALPHAS)**(1./XALPHAS) END DO ! ! 5.1.2 find the next lower indice for the PLBDAS in the geometrical @@ -244,8 +246,9 @@ ELSE ! WHERE (GRIM(:)) PRS_TEND(:, IRCRIMSS) = XCRIMSS * ZZW(:) * PRCT(:) & ! RCRIMSS - * PLBDAS(:)**XEXCRIMSS & - * PRHODREF(:)**(-XCEXVT) + * PRST(:)*(1+(XFVELOS/PLBDAS(:))**XALPHAS)**(-XNUS+XEXCRIMSS/XALPHAS) & + * PRHODREF(:)**(-XCEXVT+1.) & + * (PLBDAS(:)) ** (XEXCRIMSS+XBS) END WHERE ! ! 5.1.5 perform the linear interpolation of the normalized @@ -270,19 +273,21 @@ ELSE ! ! WHERE(GRIM(:)) - PRS_TEND(:, IRCRIMS)=XCRIMSG * PRCT(:) & ! RCRIMS - * PLBDAS(:)**XEXCRIMSG & - * PRHODREF(:)**(-XCEXVT) + PRS_TEND(:, IRCRIMS) = XCRIMSG * PRCT(:) & ! RCRIMS + * PRST(:)*(1+(XFVELOS/PLBDAS(:))**(XALPHAS))**(-XNUS+XEXCRIMSG/XALPHAS) & + * PRHODREF(:)**(-XCEXVT+1.) & + * PLBDAS(:)**(XBS+XEXCRIMSG) ZZW6(:) = PRS_TEND(:, IRCRIMS) - PRS_TEND(:, IRCRIMSS) ! RCRIMSG END WHERE IF(CSNOWRIMING=='M90 ')THEN !Murakami 1990 WHERE(GRIM(:)) - PRS_TEND(:, IRSRIMCG)=XSRIMCG * PLBDAS(:)**XEXSRIMCG*(1.0-ZZW(:)) + PRS_TEND(:, IRSRIMCG)=XSRIMCG * PRST(:)*PRHODREF(:)*PLBDAS(:)**(XEXSRIMCG+XBS)*(1.0-ZZW(:)) + PRS_TEND(:, IRSRIMCG)=ZZW6(:)*PRS_TEND(:, IRSRIMCG)/ & MAX(1.E-20, & - XSRIMCG3*XSRIMCG2*PLBDAS(:)**XEXSRIMCG2*(1.-ZZW2(:)) - & + XSRIMCG3*XSRIMCG2*PRST(:)*PRHODREF(:)*PLBDAS(:)**XEXSRIMCG2*(1.-ZZW2(:)) - & XSRIMCG3*PRS_TEND(:, IRSRIMCG)) END WHERE ELSE @@ -384,7 +389,7 @@ ELSE ! WHERE(GACC(:)) ZZW6(:) = & !! coef of RRACCS - XFRACCSS*( PLBDAS(:)**XCXS )*( PRHODREF(:)**(-XCEXVT-1.) ) & + XFRACCSS*( PRST(:)*PLBDAS(:)**XBS )*( PRHODREF(:)**(-XCEXVT) ) & *( XLBRACCS1/((PLBDAS(:)**2) ) + & XLBRACCS2/( PLBDAS(:) * PLBDAR(:) ) + & XLBRACCS3/( (PLBDAR(:)**2)) )/PLBDAR(:)**4 @@ -430,7 +435,7 @@ ELSE ! WHERE(GACC(:)) PRS_TEND(:, IRSACCRG) = XFSACCRG*ZZW(:)* & ! RSACCRG - ( PLBDAS(:)**(XCXS-XBS) )*( PRHODREF(:)**(-XCEXVT-1.) ) & + ( PRST(:))*( PRHODREF(:)**(-XCEXVT) ) & *( XLBSACCR1/((PLBDAR(:)**2) ) + & XLBSACCR2/( PLBDAR(:) * PLBDAS(:) ) + & XLBSACCR3/( (PLBDAS(:)**2)) )/PLBDAR(:) @@ -496,11 +501,16 @@ ELSE ! compute RSMLT ! PRSMLTG(:) = XFSCVMG*MAX( 0.0,( -PRSMLTG(:) * & - ( X0DEPS* PLBDAS(:)**XEX0DEPS + & - X1DEPS*PCJ(:)*PLBDAS(:)**XEX1DEPS ) - & - ( PRS_TEND(:, IRCRIMS) + PRS_TEND(:, IRRACCS) ) * & - ( PRHODREF(:)*XCL*(XTT-PT(:))) ) / & - ( PRHODREF(:)*XLMTT ) ) + PRST(:)*PRHODREF(:) * & + ( X0DEPS *PLBDAS(:)**XEX0DEPS + & + X1DEPS*PCJ(:)*(1+0.5*(XFVELOS/PLBDAS(:))**XALPHAS)**(XNUS+XEX1DEPS/XALPHAS)*PLBDAS(:)**(XBS+XEX1DEPS)) - & + ( PRS_TEND(:, IRCRIMS) + PRS_TEND(:, IRRACCS)) * & + ( PRHODREF(:)*XCL*(XTT-PT(:))) ) / & + ( PRHODREF(:)*XLMTT ) ) + ! + ! note that RSCVMG = RSMLT*XFSCVMG but no heat is exchanged (at the rate RSMLT) + ! because the graupeln produced by this process are still icy!!! + ! ! When T < XTT, rc is collected by snow (riming) to produce snow and graupel ! When T > XTT, if riming was still enabled, rc would produce snow and graupel with snow becomming graupel (conversion/melting) and graupel becomming rain (melting) ! To insure consistency when crossing T=XTT, rc collected with T>XTT must be transformed in rain. diff --git a/src/MNH/ice4_rsrimcg_old.f90 b/src/MNH/ice4_rsrimcg_old.f90 index cf88792b1b42827bdce381c4e2ad5644b3fed376..d250ddc0e38953cbec90d1615655ba1eb291b313 100644 --- a/src/MNH/ice4_rsrimcg_old.f90 +++ b/src/MNH/ice4_rsrimcg_old.f90 @@ -44,6 +44,7 @@ SUBROUTINE ICE4_RSRIMCG_OLD(KSIZE, ODSOFT, ODCOMPUTE, & !! ! P. Wautelet 26/04/2019: replace non-standard FLOAT function by REAL function ! P. Wautelet 29/05/2019: remove PACK/UNPACK intrinsics (to get more performance and better OpenACC support) +! J. Wurtz 03/2022: New snow characteristics with LSNOW_T ! ! !* 0. DECLARATIONS @@ -132,7 +133,7 @@ IF(.NOT. ODSOFT) THEN ! WHERE(GRIM(:)) PRSRIMCG_MR(:) = XSRIMCG * PLBDAS(:)**XEXSRIMCG & ! RSRIMCG - * (1.0 - ZZW(:) )/PRHODREF(:) + * (1.0 - ZZW(:) )*PRST(:) PRSRIMCG_MR(:)=MIN(PRST(:), PRSRIMCG_MR(:)) END WHERE END IF diff --git a/src/MNH/ice4_sedimentation_split.f90 b/src/MNH/ice4_sedimentation_split.f90 index cb0a147d070b865e8e9391bacf7ef143c3727311..90729a15c2f966083bdb5e81bbd3cf80032e7760 100644 --- a/src/MNH/ice4_sedimentation_split.f90 +++ b/src/MNH/ice4_sedimentation_split.f90 @@ -6,11 +6,11 @@ MODULE MODI_ICE4_SEDIMENTATION_SPLIT INTERFACE SUBROUTINE ICE4_SEDIMENTATION_SPLIT(KIB, KIE, KIT, KJB, KJE, KJT, KKB, KKE, KKTB, KKTE, KKT, KKL, & - &PTSTEP, KRR, OSEDIC, ODEPOSC, PVDEPOSC, PDZZ, & - &PRHODREF, PPABST, PTHT, PRHODJ, & - &PRCS, PRCT, PRRS, PRRT, PRIS, PRIT, PRSS, PRST, PRGS, PRGT,& - &PINPRC, PINDEP, PINPRR, PINPRI, PINPRS, PINPRG, & - &PSEA, PTOWN, & + &PTSTEP, KRR, OSEDIC, ODEPOSC, PVDEPOSC, PDZZ, & + &PRHODREF, PPABST, PTHT, PT, PRHODJ, & + &PRCS, PRCT, PRRS, PRRT, PRIS, PRIT, PRSS, PRST, PRGS, PRGT, & + &PINPRC, PINDEP, PINPRR, PINPRI, PINPRS, PINPRG, & + &PSEA, PTOWN, & &PINPRH, PRHT, PRHS, PFPR) IMPLICIT NONE INTEGER, INTENT(IN) :: KIB, KIE, KIT, KJB, KJE, KJT, KKB, KKE, KKTB, KKTE, KKT @@ -24,6 +24,7 @@ REAL, DIMENSION(KIT,KJT,KKT), INTENT(IN) :: PDZZ ! Layer thiknes REAL, DIMENSION(KIT,KJT,KKT), INTENT(IN) :: PRHODREF! Reference density REAL, DIMENSION(KIT,KJT,KKT), INTENT(IN) :: PPABST ! absolute pressure at t REAL, DIMENSION(KIT,KJT,KKT), INTENT(IN) :: PTHT ! Theta at time t +REAL, DIMENSION(KIT,KJT,KKT), INTENT(IN) :: PT ! Theta at time t REAL, DIMENSION(KIT,KJT,KKT), INTENT(IN) :: PRHODJ ! Dry density * Jacobian REAL, DIMENSION(KIT,KJT,KKT), INTENT(INOUT) :: PRCS ! Cloud water m.r. source REAL, DIMENSION(KIT,KJT,KKT), INTENT(IN) :: PRCT ! Cloud water m.r. at t @@ -51,11 +52,11 @@ END SUBROUTINE ICE4_SEDIMENTATION_SPLIT END INTERFACE END MODULE MODI_ICE4_SEDIMENTATION_SPLIT SUBROUTINE ICE4_SEDIMENTATION_SPLIT(KIB, KIE, KIT, KJB, KJE, KJT, KKB, KKE, KKTB, KKTE, KKT, KKL, & - &PTSTEP, KRR, OSEDIC, ODEPOSC, PVDEPOSC, PDZZ, & - &PRHODREF, PPABST, PTHT, PRHODJ, & - &PRCS, PRCT, PRRS, PRRT, PRIS, PRIT, PRSS, PRST, PRGS, PRGT,& - &PINPRC, PINDEP, PINPRR, PINPRI, PINPRS, PINPRG, & - &PSEA, PTOWN, & + &PTSTEP, KRR, OSEDIC, ODEPOSC, PVDEPOSC, PDZZ, & + &PRHODREF, PPABST, PTHT, PT, PRHODJ, & + &PRCS, PRCT, PRRS, PRRT, PRIS, PRIT, PRSS, PRST, PRGS, PRGT, & + &PINPRC, PINDEP, PINPRR, PINPRI, PINPRS, PINPRG, & + &PSEA, PTOWN, & &PINPRH, PRHT, PRHS, PFPR) !! !!** PURPOSE @@ -72,6 +73,7 @@ SUBROUTINE ICE4_SEDIMENTATION_SPLIT(KIB, KIE, KIT, KJB, KJE, KJT, KKB, KKE, KKTB !! ! P. Wautelet 11/02/2019: dimensions of PINPRC and PINDEP not necessarily KIT,KJT ! P. Wautelet 10/04/2019: replace ABORT and STOP calls by Print_msg +! J. Wurtz 03/2022: New snow characteristics with LSNOW_T ! ! !* 0. DECLARATIONS @@ -101,6 +103,7 @@ REAL, DIMENSION(KIT,KJT,KKT), INTENT(IN) :: PDZZ ! Layer thiknes REAL, DIMENSION(KIT,KJT,KKT), INTENT(IN) :: PRHODREF! Reference density REAL, DIMENSION(KIT,KJT,KKT), INTENT(IN) :: PPABST ! absolute pressure at t REAL, DIMENSION(KIT,KJT,KKT), INTENT(IN) :: PTHT ! Theta at time t +REAL, DIMENSION(KIT,KJT,KKT), INTENT(IN) :: PT ! Theta at time t REAL, DIMENSION(KIT,KJT,KKT), INTENT(IN) :: PRHODJ ! Dry density * Jacobian REAL, DIMENSION(KIT,KJT,KKT), INTENT(INOUT) :: PRCS ! Cloud water m.r. source REAL, DIMENSION(KIT,KJT,KKT), INTENT(IN) :: PRCT ! Cloud water m.r. at t @@ -237,7 +240,7 @@ ZW(:,:,KKTB:KKTE) =1./(PRHODREF(:,:,KKTB:KKTE)* PDZZ(:,:,KKTB:KKTE)) IF (GSEDIC) THEN CALL INTERNAL_SEDIM_SPLI(KIB,KIE,KIT,KJB,KJE,KJT, KKB, KKTB, KKTE, KKT, KKL, KRR, & &XSPLIT_MAXCFL, & - &PRHODREF, ZW, PDZZ, PPABST, PTHT, PTSTEP, & + &PRHODREF, ZW, PDZZ, PPABST, PTHT, PT, PTSTEP, & &2, & &ZRCT, PRCS, PINPRC, ZPRCS, & &ZRAY, ZLBC, ZFSEDC, ZCONC3D, PFPR=PFPR) @@ -263,16 +266,16 @@ END IF ! CALL INTERNAL_SEDIM_SPLI(KIB,KIE,KIT,KJB,KJE,KJT, KKB, KKTB, KKTE, KKT, KKL, KRR, & &XSPLIT_MAXCFL, & - &PRHODREF, ZW, PDZZ, PPABST, PTHT, PTSTEP, & + &PRHODREF, ZW, PDZZ, PPABST, PTHT, PT, PTSTEP, & &3, & &ZRRT, PRRS, PINPRR, ZPRRS, & - PFPR=PFPR) + &PFPR=PFPR) ! !* 2.3 for pristine ice ! CALL INTERNAL_SEDIM_SPLI(KIB,KIE,KIT,KJB,KJE,KJT, KKB, KKTB, KKTE, KKT, KKL, KRR, & &XSPLIT_MAXCFL, & - &PRHODREF, ZW, PDZZ, PPABST, PTHT, PTSTEP, & + &PRHODREF, ZW, PDZZ, PPABST, PTHT, PT, PTSTEP, & &4, & &ZRIT, PRIS, PINPRI, ZPRIS, & PFPR=PFPR) @@ -281,7 +284,7 @@ END IF ! CALL INTERNAL_SEDIM_SPLI(KIB,KIE,KIT,KJB,KJE,KJT, KKB, KKTB, KKTE, KKT, KKL, KRR, & &XSPLIT_MAXCFL, & - &PRHODREF, ZW, PDZZ, PPABST, PTHT, PTSTEP, & + &PRHODREF, ZW, PDZZ, PPABST, PTHT, PT, PTSTEP, & &5, & &ZRST, PRSS, PINPRS, ZPRSS, & PFPR=PFPR) @@ -290,7 +293,7 @@ END IF ! CALL INTERNAL_SEDIM_SPLI(KIB,KIE,KIT,KJB,KJE,KJT, KKB, KKTB, KKTE, KKT, KKL, KRR, & &XSPLIT_MAXCFL, & - &PRHODREF, ZW, PDZZ, PPABST, PTHT, PTSTEP, & + &PRHODREF, ZW, PDZZ, PPABST, PTHT, PT, PTSTEP, & &6, & &ZRGT, PRGS, PINPRG, ZPRGS, & PFPR=PFPR) @@ -300,7 +303,7 @@ END IF IF (IRR==7) THEN CALL INTERNAL_SEDIM_SPLI(KIB,KIE,KIT,KJB,KJE,KJT, KKB, KKTB, KKTE, KKT, KKL, KRR, & &XSPLIT_MAXCFL, & - &PRHODREF, ZW, PDZZ, PPABST, PTHT, PTSTEP, & + &PRHODREF, ZW, PDZZ, PPABST, PTHT, PT, PTSTEP, & &7, & &ZRHT, PRHS, PINPRH, ZPRHS, & PFPR=PFPR) @@ -313,17 +316,19 @@ CONTAINS !------------------------------------------------------------------------------- ! ! -SUBROUTINE INTERNAL_SEDIM_SPLI(KIB,KIE,KIT,KJB,KJE,KJT,KKB,KKTB,KKTE,KKT,KKL,KRR, & - &PMAXCFL,PRHODREF,POORHODZ,PDZZ,PPABST,PTHT,PTSTEP, & - &KSPE,PRXT,PRXS,PINPRX,PPRXS, & +SUBROUTINE INTERNAL_SEDIM_SPLI(KIB,KIE,KIT,KJB,KJE,KJT,KKB,KKTB,KKTE,KKT,KKL,KRR, & + &PMAXCFL,PRHODREF,POORHODZ,PDZZ,PPABST,PTHT,PT,PTSTEP, & + &KSPE,PRXT,PRXS,PINPRX,PPRXS, & &PRAY,PLBC,PFSEDC,PCONC3D,PFPR) ! !* 0. DECLARATIONS ! ------------ ! USE MODD_CST, ONLY: XCPD,XP00,XRD -USE MODD_RAIN_ICE_DESCR, ONLY: XCC,XCEXVT,XDC,XLBEXC,XRTMIN +USE MODD_RAIN_ICE_DESCR, ONLY: XCC,XCEXVT,XDC,XLBEXC,XRTMIN,XALPHAS,XNUS,XBS,XFVELOS, & + XLBDAS_MAX,XLBDAS_MIN,XLBEXS,XLBS USE MODD_RAIN_ICE_PARAM, ONLY: XEXCSEDI,XEXSEDG,XEXSEDH,XEXSEDR,XEXSEDS,XFSEDG,XFSEDH,XFSEDI,XFSEDR,XFSEDS +USE MODD_PARAM_ICE, ONLY: LSNOW_T ! IMPLICIT NONE ! @@ -336,6 +341,7 @@ REAL, DIMENSION(KIT,KJT,KKTB:KKTE), INTENT(IN) :: POORHODZ ! One Over (Rh REAL, DIMENSION(KIT,KJT,KKT), INTENT(IN) :: PDZZ ! layer thikness (m) REAL, DIMENSION(KIT,KJT,KKT), INTENT(IN) :: PPABST REAL, DIMENSION(KIT,KJT,KKT), INTENT(IN) :: PTHT +REAL, DIMENSION(KIT,KJT,KKT), INTENT(IN) :: PT REAL, INTENT(IN) :: PTSTEP ! total timestep INTEGER, INTENT(IN) :: KSPE ! 1 for rc, 2 for rr... REAL, DIMENSION(KIT,KJT,KKT), INTENT(INOUT) :: PRXT ! mr of specy X @@ -354,6 +360,7 @@ INTEGER, DIMENSION(KIT*KJT*KKT) :: I1,I2,I3 ! Used to replace the COUNT LOGICAL :: GPRESENT_PFPR REAL :: ZINVTSTEP REAL :: ZZWLBDC, ZRAY, ZZT, ZZWLBDA, ZZCC +REAL :: ZLBDA REAL :: ZFSED, ZEXSED REAL, DIMENSION(KIT, KJT) :: ZMRCHANGE REAL, DIMENSION(KIT, KJT) :: ZMAX_TSTEP ! Maximum CFL in column @@ -433,15 +440,35 @@ DO WHILE (ANY(ZREMAINT>0.)) & ALOG(PRHODREF(JI,JJ,JK)*PRXT(JI,JJ,JK)) )**XEXCSEDI ENDIF ENDDO + ELSEIF(KSPE==5) THEN + ! ******* for snow + ZWSED(:,:,:) = 0. + DO JL=1, ISEDIM + JI=I1(JL) + JJ=I2(JL) + JK=I3(JL) + IF(PRXT(JI,JJ,JK)> XRTMIN(KSPE)) THEN + IF (LSNOW_T .AND. PT(JI,JJ,JK)>263.15) THEN + ZLBDA = MAX(MIN(XLBDAS_MAX, 10**(14.554-0.0423*PT(JI,JJ,JK))),XLBDAS_MIN) + ELSE IF (LSNOW_T) THEN + ZLBDA = MAX(MIN(XLBDAS_MAX, 10**(6.226 -0.0106*PT(JI,JJ,JK))),XLBDAS_MIN) + ELSE + ZLBDA=MAX(MIN(XLBDAS_MAX, XLBS * ( PRHODREF(JI,JJ,JK) * PRXT(JI,JJ,JK) )**XLBEXS),XLBDAS_MIN) + END IF + ZWSED(JI, JJ, JK) = XFSEDS * & + & PRXT(JI,JJ,JK)* & + & PRHODREF(JI,JJ,JK)**(1-XCEXVT) * & + & (1 + (XFVELOS/ZLBDA)**XALPHAS)** (-XNUS+XEXSEDS/XALPHAS) * & + & ZLBDA ** (XBS+XEXSEDS) + + ENDIF + ENDDO ELSE ! ******* for other species SELECT CASE(KSPE) CASE(3) ZFSED=XFSEDR ZEXSED=XEXSEDR - CASE(5) - ZFSED=XFSEDS - ZEXSED=XEXSEDS CASE(6) ZFSED=XFSEDG ZEXSED=XEXSEDG diff --git a/src/MNH/ice4_sedimentation_stat.f90 b/src/MNH/ice4_sedimentation_stat.f90 index 3cbb31493eac8295e718f2e1438e4e3a269520e7..891223920fd73ea2bbbeed059ce1669aeebd2d51 100644 --- a/src/MNH/ice4_sedimentation_stat.f90 +++ b/src/MNH/ice4_sedimentation_stat.f90 @@ -8,6 +8,7 @@ INTERFACE SUBROUTINE ICE4_SEDIMENTATION_STAT(KIB, KIE, KIT, KJB, KJE, KJT, KKB, KKE, KKTB, KKTE, KKT, KKL, & &PTSTEP, KRR, OSEDIC, ODEPOSC, PVDEPOSC, PDZZ, & &PRHODREF, PPABST, PTHT, PRHODJ, & + & PLBDAS, & &PRCS, PRCT, PRRS, PRRT, PRIS, PRIT,& &PRSS, PRST, PRGS, PRGT,& &PINPRC, PINDEP, PINPRR, PINPRI, PINPRS, PINPRG, & @@ -26,6 +27,7 @@ REAL, DIMENSION(KIT,KJT,KKT), INTENT(IN) :: PRHODREF! Reference den REAL, DIMENSION(KIT,KJT,KKT), INTENT(IN) :: PPABST ! absolute pressure at t REAL, DIMENSION(KIT,KJT,KKT), INTENT(IN) :: PTHT ! Theta at time t REAL, DIMENSION(KIT,KJT,KKT), INTENT(IN) :: PRHODJ ! Dry density * Jacobian +REAL, DIMENSION(KIT,KJT,KKT), INTENT(IN) :: PLBDAS ! lambda parameter for snow REAL, DIMENSION(KIT,KJT,KKT), INTENT(INOUT) :: PRCS ! Cloud water m.r. source REAL, DIMENSION(KIT,KJT,KKT), INTENT(IN) :: PRCT ! Cloud water m.r. at t REAL, DIMENSION(KIT,KJT,KKT), INTENT(INOUT) :: PRRS ! Rain water m.r. source @@ -54,6 +56,7 @@ END MODULE MODI_ICE4_SEDIMENTATION_STAT SUBROUTINE ICE4_SEDIMENTATION_STAT(KIB, KIE, KIT, KJB, KJE, KJT, KKB, KKE, KKTB, KKTE, KKT, KKL, & &PTSTEP, KRR, OSEDIC, ODEPOSC, PVDEPOSC, PDZZ, & &PRHODREF, PPABST, PTHT, PRHODJ, & + & PLBDAS, & &PRCS, PRCT, PRRS, PRRT, PRIS, PRIT, & &PRSS, PRST, PRGS, PRGT,& &PINPRC, PINDEP, PINPRR, PINPRI, PINPRS, PINPRG, & @@ -75,6 +78,7 @@ SUBROUTINE ICE4_SEDIMENTATION_STAT(KIB, KIE, KIT, KJB, KJE, KJT, KKB, KKE, KKTB, ! P. Wautelet 10/04/2019: replace ABORT and STOP calls by Print_msg ! P. Wautelet 28/05/2019: move COUNTJV function to tools.f90 ! P. Wautelet 21/01/2021: initialize untouched part of PFPR +! J. Wurtz 03/2022: New snow characteristics with LSNOW_T ! ! !* 0. DECLARATIONS @@ -83,7 +87,8 @@ SUBROUTINE ICE4_SEDIMENTATION_STAT(KIB, KIE, KIT, KJB, KJE, KJT, KKB, KKE, KKTB, USE MODD_CST USE MODE_MSG - +USE MODD_RAIN_ICE_DESCR +! IMPLICIT NONE ! !* 0.1 Declarations of dummy arguments : @@ -100,6 +105,7 @@ REAL, DIMENSION(KIT,KJT,KKT), INTENT(IN) :: PRHODREF! Reference den REAL, DIMENSION(KIT,KJT,KKT), INTENT(IN) :: PPABST ! absolute pressure at t REAL, DIMENSION(KIT,KJT,KKT), INTENT(IN) :: PTHT ! Theta at time t REAL, DIMENSION(KIT,KJT,KKT), INTENT(IN) :: PRHODJ ! Dry density * Jacobian +REAL, DIMENSION(KIT,KJT,KKT), INTENT(IN) :: PLBDAS ! lambda parameter for snow REAL, DIMENSION(KIT,KJT,KKT), INTENT(INOUT) :: PRCS ! Cloud water m.r. source REAL, DIMENSION(KIT,KJT,KKT), INTENT(IN) :: PRCT ! Cloud water m.r. at t REAL, DIMENSION(KIT,KJT,KKT), INTENT(INOUT) :: PRRS ! Rain water m.r. source @@ -160,6 +166,7 @@ IF (OSEDIC) THEN CALL INTERNAL_SEDIM_STAT(KIB, KIE, KIT, KJB, KJE, KJT, KKB, KKE, KKT, KKTB, KKTE, KKL, & &PRHODREF, PDZZ, ZW, PPABST, PTHT, PTSTEP, & &2, & + &PLBDAS, &!Modif Wurtz &PRCT, PRCS, ZWSED, PSEA, PTOWN) IF (PRESENT(PFPR)) THEN DO JK = KKTB , KKTE @@ -187,6 +194,7 @@ END IF CALL INTERNAL_SEDIM_STAT(KIB, KIE, KIT, KJB, KJE, KJT, KKB, KKE, KKT, KKTB, KKTE, KKL, & &PRHODREF, PDZZ, ZW, PPABST, PTHT, PTSTEP, & &3, & + &PLBDAS, & &PRRT, PRRS, ZWSED) IF (PRESENT(PFPR)) THEN DO JK = KKTB , KKTE @@ -200,6 +208,7 @@ PINPRR(:,:) = ZWSED(:,:,KKB)/XRHOLW ! in m/s CALL INTERNAL_SEDIM_STAT(KIB, KIE, KIT, KJB, KJE, KJT, KKB, KKE, KKT, KKTB, KKTE, KKL, & &PRHODREF, PDZZ, ZW, PPABST, PTHT, PTSTEP, & &4, & + &PLBDAS, & &PRIT, PRIS, ZWSED) IF (PRESENT(PFPR)) THEN DO JK = KKTB , KKTE @@ -213,6 +222,7 @@ PINPRI(:,:) = ZWSED(:,:,KKB)/XRHOLW ! in m/s CALL INTERNAL_SEDIM_STAT(KIB, KIE, KIT, KJB, KJE, KJT, KKB, KKE, KKT, KKTB, KKTE, KKL, & &PRHODREF, PDZZ, ZW, PPABST, PTHT, PTSTEP, & &5, & + &PLBDAS, & &PRST, PRSS, ZWSED) IF (PRESENT(PFPR)) THEN DO JK = KKTB , KKTE @@ -226,6 +236,7 @@ PINPRS(:,:) = ZWSED(:,:,KKB)/XRHOLW ! in m/s CALL INTERNAL_SEDIM_STAT(KIB, KIE, KIT, KJB, KJE, KJT, KKB, KKE, KKT, KKTB, KKTE, KKL, & &PRHODREF, PDZZ, ZW, PPABST, PTHT, PTSTEP, & &6, & + &PLBDAS, & &PRGT, PRGS, ZWSED) IF (PRESENT(PFPR)) THEN DO JK = KKTB , KKTE @@ -240,6 +251,7 @@ IF ( KRR == 7 ) THEN CALL INTERNAL_SEDIM_STAT(KIB, KIE, KIT, KJB, KJE, KJT, KKB, KKE, KKT, KKTB, KKTE, KKL, & &PRHODREF, PDZZ, ZW, PPABST, PTHT, PTSTEP, & &7, & + &PLBDAS, & &PRHT, PRHS, ZWSED) IF (PRESENT(PFPR)) THEN DO JK = KKTB , KKTE @@ -254,6 +266,7 @@ CONTAINS SUBROUTINE INTERNAL_SEDIM_STAT(KIB, KIE, KIT, KJB, KJE, KJT, KKB, KKE, KKT, KKTB, KKTE, KKL, & &PRHODREF, PDZZ, PTSORHODZ, PPABST, PTHT, PTSTEP, & &KSPE, & + &PLBDAS, & &PRXT, PRXS, PWSED, PSEA, PTOWN) ! !* 0. DECLARATIONS @@ -272,6 +285,7 @@ CONTAINS ! INTEGER, INTENT(IN) :: KIB, KIE, KIT, KJB, KJE, KJT, KKB, KKT, KKE, KKTB, KKTE, KKL REAL, DIMENSION(KIT,KJT,KKT), INTENT(IN) :: PRHODREF ! Reference density + REAL, DIMENSION(KIT,KJT,KKT), INTENT(IN) :: PLBDAS ! lambda parameter for snow REAL, DIMENSION(KIT,KJT,KKT), INTENT(IN) :: PDZZ ! Layer thikness (m) REAL, DIMENSION(KIT,KJT,KKT), INTENT(IN) :: PTSORHODZ ! TimeStep Over (Rhodref times delta Z) REAL, DIMENSION(KIT,KJT,KKT), INTENT(IN) :: PPABST @@ -386,14 +400,34 @@ CONTAINS & ALOG(PRHODREF(JI,JJ,JK)*ZQP(JI,JJ)) )**XEXCSEDI ENDIF ENDDO + + ELSEIF(KSPE==5) THEN + ! ******* for snow + DO JL=1, JCOUNT + JI=I1(JL) + JJ=I2(JL) + !calculation of w + + IF(PRXT(JI,JJ,JK) > XRTMIN(KSPE)) THEN + ZWSEDW1(JI,JJ,JK)= XFSEDS * & + & PRHODREF(JI,JJ,JK)**(-XCEXVT) * & + & (1+(XFVELOS/PLBDAS(JI,JJ,JK))**XALPHAS)**(-XNUS+XEXSEDS/XALPHAS) * & + & PLBDAS(JI,JJ,JK)**(XBS+XEXSEDS) + ENDIF + IF ( ZQP(JI,JJ) > XRTMIN(KSPE)) THEN + ZWSEDW2(JI,JJ,JK)= XFSEDS * & + & PRHODREF(JI,JJ,JK)**(-XCEXVT) * & + & (1+(XFVELOS/PLBDAS(JI,JJ,JK))**XALPHAS)**(-XNUS+XEXSEDS/XALPHAS) * & + & PLBDAS(JI,JJ,JK)**(XBS+XEXSEDS) + + ENDIF + ENDDO + ELSE ! ******* for other species IF(KSPE==3) THEN ZFSED=XFSEDR ZEXSED=XEXSEDR - ELSEIF(KSPE==5) THEN - ZFSED=XFSEDS - ZEXSED=XEXSEDS ELSEIF(KSPE==6) THEN ZFSED=XFSEDG ZEXSED=XEXSEDG diff --git a/src/MNH/ice4_slow.f90 b/src/MNH/ice4_slow.f90 index 15d0cd78e495cb255015fb6ed29fbfdb5361c748..b9325050f16faa13ba945c3624755d55b89672bc 100644 --- a/src/MNH/ice4_slow.f90 +++ b/src/MNH/ice4_slow.f90 @@ -65,13 +65,14 @@ SUBROUTINE ICE4_SLOW(KSIZE, LDSOFT, PCOMPUTE, PRHODREF, PT, & !! MODIFICATIONS !! ------------- !! +! J. Wurtz 03/2022: New snow characteristics with LSNOW_T ! ! !* 0. DECLARATIONS ! ------------ ! USE MODD_CST, ONLY: XTT -USE MODD_RAIN_ICE_DESCR, ONLY: XCEXVT,XRTMIN +USE MODD_RAIN_ICE_DESCR, ONLY: XCEXVT,XRTMIN,XALPHAS,XNUS,XBS,XFVELOS USE MODD_RAIN_ICE_PARAM, ONLY: X0DEPG,X0DEPS,X1DEPG,X1DEPS,XACRIAUTI,XALPHA3,XBCRIAUTI,XBETA3,XCOLEXIS,XCRIAUTI, & XEX0DEPG,XEX0DEPS,XEX1DEPG,XEX1DEPS,XEXIAGGS,XFIAGGS,XHON,XTEXAUTI,XTIMAUTI ! @@ -172,10 +173,13 @@ IF(LDSOFT) THEN ENDDO ELSE PRVDEPS(:) = 0. - WHERE(ZMASK(:)==1.) - PRVDEPS(:) = ( PSSI(:)/(PRHODREF(:)*PAI(:)) ) * & - ( X0DEPS*PLBDAS(:)**XEX0DEPS + X1DEPS*PCJ(:)*PLBDAS(:)**XEX1DEPS ) - END WHERE + DO JL=1, KSIZE + IF (ZMASK(JL)==1.) THEN + PRVDEPS(JL) = ( PRST(JL)*PSSI(JL)/PAI(JL) ) * & + ( X0DEPS*PLBDAS(JL)**XEX0DEPS + X1DEPS*PCJ(JL) * (1+0.5*(XFVELOS/PLBDAS(JL))**XALPHAS)**(-XNUS+XEX1DEPS/XALPHAS) & + *(PLBDAS(JL))**(XBS+XEX1DEPS) ) + END IF + END DO ENDIF DO JL=1, KSIZE PA_RS(JL) = PA_RS(JL) + PRVDEPS(JL) @@ -197,10 +201,11 @@ IF(LDSOFT) THEN ELSE PRIAGGS(:) = 0. WHERE(ZMASK(:)==1) - PRIAGGS(:) = XFIAGGS * EXP( XCOLEXIS*(PT(:)-XTT) ) & + PRIAGGS(:) = XFIAGGS * EXP( XCOLEXIS*(PT(:)-XTT) ) & * PRIT(:) & - * PLBDAS(:)**XEXIAGGS & - * PRHODREF(:)**(-XCEXVT) + * PRST(:) * (1+(XFVELOS/PLBDAS(:))**XALPHAS)**(-XNUS+XEXIAGGS/XALPHAS) & + * PRHODREF(:)**(-XCEXVT+1.) & + * ((PLBDAS(:))**(XBS+XEXIAGGS)) END WHERE ENDIF DO JL=1, KSIZE diff --git a/src/MNH/ice4_tendencies.f90 b/src/MNH/ice4_tendencies.f90 index 133153d96e8f6f22129294ac623620888076ad63..a80e037aab72dc9260224f09ad5d4453957573b3 100644 --- a/src/MNH/ice4_tendencies.f90 +++ b/src/MNH/ice4_tendencies.f90 @@ -174,14 +174,16 @@ SUBROUTINE ICE4_TENDENCIES(KSIZE, KIB, KIE, KIT, KJB, KJE, KJT, KKB, KKE, KKT, K !! ------------- ! ! P. Wautelet 29/05/2019: remove PACK/UNPACK intrinsics (to get more performance and better OpenACC support) +! J. Wurtz 03/2022: New snow characteristics with LSNOW_T ! ! !* 0. DECLARATIONS ! ------------ ! USE MODD_CST, ONLY: XALPI,XBETAI,XCI,XCPV,XEPSILO,XGAMI,XLSTT,XMD,XMV,XP00,XRV,XTT -USE MODD_PARAM_ICE, ONLY: CSNOWRIMING -USE MODD_RAIN_ICE_DESCR, ONLY: XLBDAS_MAX,XLBEXG,XLBEXH,XLBEXR,XLBEXS,XLBG,XLBH,XLBR,XLBS,XRTMIN +USE MODD_PARAM_ICE, ONLY: CSNOWRIMING,LSNOW_T +USE MODD_RAIN_ICE_DESCR, ONLY: XLBDAS_MIN,XLBDAS_MAX,XLBEXG,XLBEXH,XLBEXR,XLBEXS,& + XLBG,XLBH,XLBR,XLBS,XRTMIN,XTRANS_MP_GAMMAS USE MODD_RAIN_ICE_PARAM, ONLY: XSCFAC ! USE MODI_ICE4_COMPUTE_PDF @@ -400,21 +402,30 @@ ELSE ! 5.1.6 riming-conversion of the large sized aggregates into graupel (old parametrisation) ! IF(CSNOWRIMING=='OLD ') THEN - ZLBDAS(:)=0. - WHERE(ZRST(:)>0.) - ZLBDAS(:) = MIN(XLBDAS_MAX, XLBS*(PRHODREF(:)*MAX(ZRST(:), XRTMIN(5)))**XLBEXS) - END WHERE - CALL ICE4_RSRIMCG_OLD(KSIZE, ODSOFT, PCOMPUTE==1., & - &PRHODREF, & - &ZLBDAS, & - &ZT, ZRCT, ZRST, & - &PRSRIMCG_MR, PB_RS, PB_RG) - DO JL=1, KSIZE - ZRST(JL) = ZRST(JL) - PRSRIMCG_MR(JL) - ZRGT(JL) = ZRGT(JL) + PRSRIMCG_MR(JL) - ENDDO + ZLBDAS(:)=0. + IF (LSNOW_T) THEN + WHERE (ZRST(:)>XRTMIN(5) .AND. ZT(:)>263.15) + ZLBDAS(:) = MAX(MIN(XLBDAS_MAX, 10**(14.554-0.0423*ZT(:))),XLBDAS_MIN)*XTRANS_MP_GAMMAS + END WHERE + WHERE (ZRST(:)>XRTMIN(5) .AND. ZT(:)<=263.15) + ZLBDAS(:) = MAX(MIN(XLBDAS_MAX, 10**(6.226-0.0106*ZT(:))),XLBDAS_MIN)*XTRANS_MP_GAMMAS + END WHERE + ELSE + WHERE (ZRST(:).GE.XRTMIN(5)) + ZLBDAS(:) = MAX(MIN(XLBDAS_MAX,XLBS*(PRHODREF(:)*ZRST(:))**XLBEXS),XLBDAS_MIN) + END WHERE + END IF + CALL ICE4_RSRIMCG_OLD(KSIZE, ODSOFT, PCOMPUTE==1., & + &PRHODREF, & + &ZLBDAS, & + &ZT, ZRCT, ZRST, & + &PRSRIMCG_MR, PB_RS, PB_RG) + DO JL=1, KSIZE + ZRST(JL) = ZRST(JL) - PRSRIMCG_MR(JL) + ZRGT(JL) = ZRGT(JL) + PRSRIMCG_MR(JL) + ENDDO ELSE - PRSRIMCG_MR(:) = 0. + PRSRIMCG_MR(:) = 0. ENDIF ENDIF ! @@ -473,9 +484,18 @@ IF(KSIZE>0) THEN !* compute the slope parameters ! ZLBDAS(:)=0. - WHERE(ZRST(:)>0.) - ZLBDAS(:) = MIN(XLBDAS_MAX, XLBS*(PRHODREF(:)*MAX(ZRST(:), XRTMIN(5)))**XLBEXS) - END WHERE + IF (LSNOW_T) THEN + WHERE (ZRST(:)>XRTMIN(5) .AND. ZT(:)>263.15) + ZLBDAS(:) = MAX(MIN(XLBDAS_MAX, 10**(14.554-0.0423*ZT(:))),XLBDAS_MIN)*XTRANS_MP_GAMMAS + END WHERE + WHERE (ZRST(:)>XRTMIN(5) .AND. ZT(:)<=263.15) + ZLBDAS(:) = MAX(MIN(XLBDAS_MAX, 10**(6.226-0.0106*ZT(:))),XLBDAS_MIN)*XTRANS_MP_GAMMAS + END WHERE + ELSE + WHERE (ZRST(:).GE.XRTMIN(5)) + ZLBDAS(:) = MAX(MIN(XLBDAS_MAX,XLBS*(PRHODREF(:)*ZRST(:))**XLBEXS),XLBDAS_MIN) + END WHERE + END IF ZLBDAG(:)=0. WHERE(ZRGT(:)>0.) ZLBDAG(:) = XLBG*(PRHODREF(:)*MAX(ZRGT(:), XRTMIN(6)))**XLBEXG diff --git a/src/MNH/ini_budget.f90 b/src/MNH/ini_budget.f90 index 3152cb6e5e17022fc128393ad806dff7b7a08fa6..91461134c79e9fb4f617f306e3ca9f7c1b23c30b 100644 --- a/src/MNH/ini_budget.f90 +++ b/src/MNH/ini_budget.f90 @@ -208,6 +208,7 @@ end subroutine Budget_preallocate ! P. Wautelet 02/03/2021: budgets: add terms for blowing snow ! P. Wautelet 04/03/2021: budgets: add terms for drag due to buildings ! P. Wautelet 17/03/2021: choose source terms for budgets with character strings instead of multiple integer variables +! C. Barthe 14/03/2022: budgets: add terms for CIBU and RDSF in LIMA !------------------------------------------------------------------------------- ! !* 0. DECLARATIONS @@ -248,7 +249,7 @@ use modd_param_lima, only: laero_mass_lima => laero_mass, lacti_lima => lacti, lhail_lima => lhail, lhhoni_lima => lhhoni, lmeyers_lima => lmeyers, lnucl_lima => lnucl, & lptsplit, & lrain_lima => lrain, lscav_lima => lscav, lsedc_lima => lsedc, lsedi_lima => lsedi, & - lsnow_lima => lsnow, lspro_lima => lspro, lwarm_lima => lwarm, & + lsnow_lima => lsnow, lspro_lima => lspro, lwarm_lima => lwarm, lcibu, lrdsf, nmom_i, & nmod_ccn, nmod_ifn, nmod_imm use modd_ref, only: lcouples use modd_salt, only: lsalt @@ -524,7 +525,6 @@ if ( lbu_rth .or. lbu_rtke .or. lbu_rrv .or. lbu_rrc .or. lbu_rrr .or. & tburhodj%xdata(:, :, :) = 0. end if - tzsource%ntype = TYPEREAL tzsource%ndims = 3 @@ -1097,7 +1097,6 @@ if ( lbu_rth ) then gtmp = cactccn == 'ABRK' .and. (lorilam .or. ldust .or. lsalt ) tzsource%lavailable = ( hcloud == 'LIMA' .and. lwarm_lima .and. lacti_lima .and. nmod_ccn >= 1 & .and. ( .not.lptsplit .or. .not.lsubg_cond ) ) & - .or. hcloud(1:3) == 'ICE' & .or. ( hcloud == 'C2R2' .and. ( gtmp .or. .not.lsupsat_c2r2 ) ) & .or. ( hcloud == 'KHKO' .and. ( gtmp .or. .not.lsupsat_c2r2 ) ) call Budget_source_add( tbudgets(NBUDGET_TH), tzsource ) @@ -1111,6 +1110,11 @@ if ( lbu_rth ) then .or. hcloud == 'KESS' call Budget_source_add( tbudgets(NBUDGET_TH), tzsource ) + tzsource%cmnhname = 'HIN' + tzsource%clongname = 'heterogeneous ice nucleation' + tzsource%lavailable = hcloud(1:3) == 'ICE' .or. (hcloud == 'LIMA' .and. nmom_i == 1) + call Budget_source_add( tbudgets(NBUDGET_TH), tzsource ) + tzsource%cmnhname = 'HIND' tzsource%clongname = 'heterogeneous nucleation by deposition' tzsource%lavailable = hcloud == 'LIMA' .and. lcold_lima .and. lnucl_lima @@ -1495,7 +1499,6 @@ if ( tbudgets(NBUDGET_RV)%lenabled ) then gtmp = cactccn == 'ABRK' .and. (lorilam .or. ldust .or. lsalt ) tzsource%lavailable = ( hcloud == 'LIMA' .and. lwarm_lima .and. lacti_lima .and. nmod_ccn >= 1 & .and. ( .not.lptsplit .or. .not.lsubg_cond ) ) & - .or. hcloud(1:3) == 'ICE' & .or. ( hcloud == 'C2R2' .and. ( gtmp .or. .not.lsupsat_c2r2 ) ) & .or. ( hcloud == 'KHKO' .and. ( gtmp .or. .not.lsupsat_c2r2 ) ) call Budget_source_add( tbudgets(NBUDGET_RV), tzsource ) @@ -1510,6 +1513,11 @@ if ( tbudgets(NBUDGET_RV)%lenabled ) then .or. hcloud == 'KESS' call Budget_source_add( tbudgets(NBUDGET_RV), tzsource ) + tzsource%cmnhname = 'HIN' + tzsource%clongname = 'heterogeneous ice nucleation' + tzsource%lavailable = hcloud(1:3) == 'ICE' .or. ( hcloud == 'LIMA' .and. nmom_i == 1 ) + call Budget_source_add( tbudgets(NBUDGET_RV), tzsource ) + tzsource%cmnhname = 'HIND' tzsource%clongname = 'heterogeneous nucleation by deposition' tzsource%lavailable = hcloud == 'LIMA' .and. lcold_lima .and. lnucl_lima @@ -2199,9 +2207,9 @@ if ( tbudgets(NBUDGET_RI)%lenabled ) then .or. hcloud(1:3) == 'ICE' call Budget_source_add( tbudgets(NBUDGET_RI), tzsource ) - tzsource%cmnhname = 'HENU' - tzsource%clongname = 'heterogeneous nucleation' - tzsource%lavailable = hcloud(1:3) == 'ICE' + tzsource%cmnhname = 'HIN' + tzsource%clongname = 'heterogeneous ice nucleation' + tzsource%lavailable = hcloud(1:3) == 'ICE' .or. ( hcloud == 'LIMA' .and. nmom_i == 1) call Budget_source_add( tbudgets(NBUDGET_RI), tzsource ) tzsource%cmnhname = 'HIND' @@ -2264,12 +2272,22 @@ if ( tbudgets(NBUDGET_RI)%lenabled ) then tzsource%lavailable = hcloud == 'LIMA' .and. ( lptsplit .or. ( lcold_lima .and. lwarm_lima .and. lsnow_lima ) ) call Budget_source_add( tbudgets(NBUDGET_RI), tzsource ) + tzsource%cmnhname = 'CIBU' + tzsource%clongname = 'ice multiplication process due to ice collisional breakup' + tzsource%lavailable = hcloud == 'LIMA' .and. ( lptsplit .or. ( lcold_lima .and. lwarm_lima .and. lsnow_lima .and. lcibu ) ) + call Budget_source_add( tbudgets(NBUDGET_RI), tzsource ) + tzsource%cmnhname = 'CFRZ' tzsource%clongname = 'conversion freezing of rain' tzsource%lavailable = ( hcloud == 'LIMA' .and. ( lptsplit .or. ( lcold_lima .and. lwarm_lima .and. lsnow_lima ) ) ) & .or. hcloud(1:3) == 'ICE' call Budget_source_add( tbudgets(NBUDGET_RI), tzsource ) + tzsource%cmnhname = 'RDSF' + tzsource%clongname = 'ice multiplication process following rain contact freezing' + tzsource%lavailable = hcloud == 'LIMA' .and. ( lptsplit .or. ( lcold_lima .and. lwarm_lima .and. lsnow_lima .and. lrdsf ) ) + call Budget_source_add( tbudgets(NBUDGET_RI), tzsource ) + tzsource%cmnhname = 'WETG' tzsource%clongname = 'wet growth of graupel' tzsource%lavailable = ( hcloud == 'LIMA' .and. ( lptsplit .or. ( lcold_lima .and. lwarm_lima .and. lsnow_lima ) ) ) & @@ -2463,6 +2481,11 @@ if ( tbudgets(NBUDGET_RS)%lenabled ) then tzsource%lavailable = hcloud == 'LIMA' .and. ( lptsplit .or. (lcold_lima .and. lwarm_lima .and. lsnow_lima ) ) call Budget_source_add( tbudgets(NBUDGET_RS), tzsource ) + tzsource%cmnhname = 'CIBU' + tzsource%clongname = 'ice multiplication process due to ice collisional breakup' + tzsource%lavailable = hcloud == 'LIMA' .and. ( lptsplit .or. ( lcold_lima .and. lwarm_lima .and. lsnow_lima .and. lcibu ) ) + call Budget_source_add( tbudgets(NBUDGET_RS), tzsource ) + tzsource%cmnhname = 'ACC' tzsource%clongname = 'accretion of rain on snow' tzsource%lavailable = ( hcloud == 'LIMA' .and. ( lptsplit .or. ( lcold_lima .and. lwarm_lima & @@ -2651,6 +2674,11 @@ if ( tbudgets(NBUDGET_RG)%lenabled ) then .or. hcloud(1:3) == 'ICE' call Budget_source_add( tbudgets(NBUDGET_RG), tzsource ) + tzsource%cmnhname = 'RDSF' + tzsource%clongname = 'ice multiplication process following rain contact freezing' + tzsource%lavailable = hcloud == 'LIMA' .and. ( lptsplit .or. ( lcold_lima .and. lwarm_lima .and. lsnow_lima .and. lrdsf ) ) + call Budget_source_add( tbudgets(NBUDGET_RG), tzsource ) + tzsource%cmnhname = 'WETG' tzsource%clongname = 'wet growth of graupel' tzsource%lavailable = ( hcloud == 'LIMA' .and. ( lptsplit .or. (lcold_lima .and. lwarm_lima .and. lsnow_lima) ) ) & @@ -3422,11 +3450,21 @@ SV_BUDGETS: do jsv = 1, ksv tzsource%lavailable = lptsplit .or. ( lcold_lima .and. lwarm_lima .and. lsnow_lima ) call Budget_source_add( tbudgets(ibudget), tzsource ) + tzsource%cmnhname = 'CIBU' + tzsource%clongname = 'ice multiplication process due to ice collisional breakup' + tzsource%lavailable = lptsplit .or. ( lcold_lima .and. lwarm_lima .and. lsnow_lima .and. lcibu ) + call Budget_source_add( tbudgets(ibudget), tzsource ) + tzsource%cmnhname = 'CFRZ' tzsource%clongname = 'conversion freezing of rain' tzsource%lavailable = lptsplit .or. ( lcold_lima .and. lwarm_lima .and. lsnow_lima ) call Budget_source_add( tbudgets(ibudget), tzsource ) + tzsource%cmnhname = 'RDSF' + tzsource%clongname = 'ice multiplication process following rain contact freezing' + tzsource%lavailable = lptsplit .or. ( lcold_lima .and. lwarm_lima .and. lsnow_lima .and. lrdsf ) + call Budget_source_add( tbudgets(ibudget), tzsource ) + tzsource%cmnhname = 'WETG' tzsource%clongname = 'wet growth of graupel' tzsource%lavailable = lptsplit .or. ( lcold_lima .and. lwarm_lima .and. lsnow_lima ) @@ -4068,31 +4106,6 @@ SV_BUDGETS: do jsv = 1, ksv end if end do SV_BUDGETS -IF (CBUTYPE=='CART') THEN - WRITE(UNIT=KLUOUT, FMT= '(2/,"DESCRIPTION OF THE BUDGET BOX")' ) - WRITE(UNIT=KLUOUT, FMT= '("BUIL = ",I4.4)' ) NBUIL - WRITE(UNIT=KLUOUT, FMT= '("BUIH = ",I4.4)' ) NBUIH - WRITE(UNIT=KLUOUT, FMT= '("BUJL = ",I4.4)' ) NBUJL - WRITE(UNIT=KLUOUT, FMT= '("BUJH = ",I4.4)' ) NBUJH - WRITE(UNIT=KLUOUT, FMT= '("BUKL = ",I4.4)' ) NBUKL - WRITE(UNIT=KLUOUT, FMT= '("BUKH = ",I4.4)' ) NBUKH - WRITE(UNIT=KLUOUT, FMT= '("BUIMAX = ",I4.4)' ) NBUIMAX - WRITE(UNIT=KLUOUT, FMT= '("BUJMAX = ",I4.4)' ) NBUJMAX - WRITE(UNIT=KLUOUT, FMT= '("BUKMAX = ",I4.4)' ) NBUKMAX -END IF -IF (CBUTYPE=='MASK') THEN - WRITE(UNIT=KLUOUT, FMT= '(2/,"DESCRIPTION OF THE BUDGET MASK")' ) - WRITE(UNIT=KLUOUT, FMT= '("BUIL = ",I4.4)' ) NBUIL - WRITE(UNIT=KLUOUT, FMT= '("BUIH = ",I4.4)' ) NBUIH - WRITE(UNIT=KLUOUT, FMT= '("BUJL = ",I4.4)' ) NBUJL - WRITE(UNIT=KLUOUT, FMT= '("BUJH = ",I4.4)' ) NBUJH - WRITE(UNIT=KLUOUT, FMT= '("BUKL = ",I4.4)' ) NBUKL - WRITE(UNIT=KLUOUT, FMT= '("BUKH = ",I4.4)' ) NBUKH - WRITE(UNIT=KLUOUT, FMT= '("BUKMAX = ",I4.4)' ) NBUKMAX - WRITE(UNIT=KLUOUT, FMT= '("BUSUBWRITE = ",I4.4)' ) NBUSUBWRITE - WRITE(UNIT=KLUOUT, FMT= '("BUMASK = ",I4.4)' ) NBUMASK -END IF - call Ini_budget_groups( tbudgets, ibudim1, ibudim2, ibudim3 ) if ( tbudgets(NBUDGET_U) %lenabled ) call Sourcelist_nml_compact( tbudgets(NBUDGET_U), cbulist_ru ) diff --git a/src/MNH/ini_ice_c1r3.f90 b/src/MNH/ini_ice_c1r3.f90 index b0a35554a88837b36dc5ae44119426abe6a482a6..d04e1335813234391e13b0504dda31e1a8abeac8 100644 --- a/src/MNH/ini_ice_c1r3.f90 +++ b/src/MNH/ini_ice_c1r3.f90 @@ -90,6 +90,7 @@ END MODULE MODI_INI_ICE_C1R3 !! Philippe Wautelet: 05/2016-04/2018: new data structures and calls for I/O ! P. Wautelet 10/04/2019: replace ABORT and STOP calls by Print_msg ! P. Wautelet 26/04/2019: replace non-standard FLOAT function by REAL function +! J. Wurtz 03/2022: new snow characteristics ! !------------------------------------------------------------------------------- ! @@ -109,6 +110,8 @@ USE MODD_REF ! use mode_msg ! +USE MODD_RAIN_ICE_DESCR, ONLY : XFVELOS +! USE MODI_GAMMA USE MODI_GAMMA_INC USE MODI_READ_XKER_RACCS @@ -725,15 +728,15 @@ IF( (KACCLBDAS/=NACCLBDAS) .OR. (KACCLBDAR/=NACCLBDAR) .OR. (KND/=IND) .OR. & (PACCLBDAS_MIN/=XACCLBDAS_MIN) .OR. (PACCLBDAR_MIN/=XACCLBDAR_MIN) .OR. & (PFDINFTY/=ZFDINFTY) ) THEN CALL RRCOLSS ( IND, XALPHAS, XNUS, XALPHAR, XNUR, & - ZESR, XBR, XCS, XDS, XCR, XDR, & + ZESR, XBR, XCS, XDS, XFVELOS, XCR, XDR, & XACCLBDAS_MAX, XACCLBDAR_MAX, XACCLBDAS_MIN, XACCLBDAR_MIN, & ZFDINFTY, XKER_RACCSS, XAG, XBS, XAS ) CALL RZCOLX ( IND, XALPHAS, XNUS, XALPHAR, XNUR, & - ZESR, XBR, XCS, XDS, XCR, XDR, & + ZESR, XBR, XCS, XDS, XFVELOS, XCR, XDR, 0., & XACCLBDAS_MAX, XACCLBDAR_MAX, XACCLBDAS_MIN, XACCLBDAR_MIN, & ZFDINFTY, XKER_RACCS ) CALL RSCOLRG ( IND, XALPHAS, XNUS, XALPHAR, XNUR, & - ZESR, XBS, XCS, XDS, XCR, XDR, & + ZESR, XBS, XCS, XDS, XFVELOS, XCR, XDR, & XACCLBDAS_MAX, XACCLBDAR_MAX, XACCLBDAS_MIN, XACCLBDAR_MIN, & ZFDINFTY, XKER_SACCRG,XAG, XBS, XAS ) WRITE(UNIT=ILUOUT0,FMT='("*****************************************")') @@ -938,7 +941,7 @@ IF( (KDRYLBDAG/=NDRYLBDAG) .OR. (KDRYLBDAS/=NDRYLBDAS) .OR. (KND/=IND) .OR. & (PDRYLBDAG_MIN/=XDRYLBDAG_MIN) .OR. (PDRYLBDAS_MIN/=XDRYLBDAS_MIN) .OR. & (PFDINFTY/=ZFDINFTY) ) THEN CALL RZCOLX ( IND, XALPHAG, XNUG, XALPHAS, XNUS, & - ZEGS, XBS, XCG, XDG, XCS, XDS, & + ZEGS, XBS, XCG, XDG, 0., XCS, XDS, XFVELOS, & XDRYLBDAG_MAX, XDRYLBDAS_MAX, XDRYLBDAG_MIN, XDRYLBDAS_MIN, & ZFDINFTY, XKER_SDRYG ) WRITE(UNIT=ILUOUT0,FMT='("*****************************************")') @@ -1004,7 +1007,7 @@ IF( (KDRYLBDAG/=NDRYLBDAG) .OR. (KDRYLBDAR/=NDRYLBDAR) .OR. (KND/=IND) .OR. & (PDRYLBDAG_MIN/=XDRYLBDAG_MIN) .OR. (PDRYLBDAR_MIN/=XDRYLBDAR_MIN) .OR. & (PFDINFTY/=ZFDINFTY) ) THEN CALL RZCOLX ( IND, XALPHAG, XNUG, XALPHAR, XNUR, & - ZEGR, XBR, XCG, XDG, XCR, XDR, & + ZEGR, XBR, XCG, XDG, 0., XCR, XDR, 0., & XDRYLBDAG_MAX, XDRYLBDAR_MAX, XDRYLBDAG_MIN, XDRYLBDAR_MIN, & ZFDINFTY, XKER_RDRYG ) WRITE(UNIT=ILUOUT0,FMT='("*****************************************")') diff --git a/src/MNH/ini_lb.f90 b/src/MNH/ini_lb.f90 index 79eac4a6e755e814bc908f200675fb50b5707275..054d5f50f820b58ba72a593a6c0b91591a6eda3b 100644 --- a/src/MNH/ini_lb.f90 +++ b/src/MNH/ini_lb.f90 @@ -693,7 +693,7 @@ IF (CCLOUD=='LIMA' ) THEN .OR. ( TPINIFILE%NMNHVERSION(1) == 5 .AND. TPINIFILE%NMNHVERSION(2) < 5 ) & .OR. ( TPINIFILE%NMNHVERSION(1) == 5 .AND. TPINIFILE%NMNHVERSION(2) == 5 & .AND. TPINIFILE%NMNHVERSION(3) < 1 ) ) THEN - TZFIELD%CMNHNAME = 'LBX_'//TRIM(UPCASE(CLIMA_WARM_NAMES(3))//INDICE) + TZFIELD%CMNHNAME = 'LBX_'//TRIM(UPCASE(CLIMA_WARM_NAMES(3)))//INDICE ELSE TZFIELD%CMNHNAME = 'LBX_'//TRIM(UPCASE(CLIMA_WARM_NAMES(3)))//INDICE END IF @@ -719,7 +719,7 @@ IF (CCLOUD=='LIMA' ) THEN .OR. ( TPINIFILE%NMNHVERSION(1) == 5 .AND. TPINIFILE%NMNHVERSION(2) < 5 ) & .OR. ( TPINIFILE%NMNHVERSION(1) == 5 .AND. TPINIFILE%NMNHVERSION(2) == 5 & .AND. TPINIFILE%NMNHVERSION(3) < 1 ) ) THEN - TZFIELD%CMNHNAME = 'LBY_'//TRIM(UPCASE(CLIMA_WARM_NAMES(3))//INDICE) + TZFIELD%CMNHNAME = 'LBY_'//TRIM(UPCASE(CLIMA_WARM_NAMES(3)))//INDICE ELSE TZFIELD%CMNHNAME = 'LBY_'//TRIM(UPCASE(CLIMA_WARM_NAMES(3)))//INDICE END IF @@ -764,7 +764,7 @@ IF (CCLOUD=='LIMA' ) THEN .OR. ( TPINIFILE%NMNHVERSION(1) == 5 .AND. TPINIFILE%NMNHVERSION(2) < 5 ) & .OR. ( TPINIFILE%NMNHVERSION(1) == 5 .AND. TPINIFILE%NMNHVERSION(2) == 5 & .AND. TPINIFILE%NMNHVERSION(3) < 1 ) ) THEN - TZFIELD%CMNHNAME = 'LBX_'//TRIM(UPCASE(CLIMA_COLD_NAMES(2))//INDICE) + TZFIELD%CMNHNAME = 'LBX_'//TRIM(UPCASE(CLIMA_COLD_NAMES(2)))//INDICE ELSE TZFIELD%CMNHNAME = 'LBX_'//TRIM(UPCASE(CLIMA_COLD_NAMES(2)))//INDICE END IF @@ -790,7 +790,7 @@ IF (CCLOUD=='LIMA' ) THEN .OR. ( TPINIFILE%NMNHVERSION(1) == 5 .AND. TPINIFILE%NMNHVERSION(2) < 5 ) & .OR. ( TPINIFILE%NMNHVERSION(1) == 5 .AND. TPINIFILE%NMNHVERSION(2) == 5 & .AND. TPINIFILE%NMNHVERSION(3) < 1 ) ) THEN - TZFIELD%CMNHNAME = 'LBY_'//TRIM(UPCASE(CLIMA_COLD_NAMES(2))//INDICE) + TZFIELD%CMNHNAME = 'LBY_'//TRIM(UPCASE(CLIMA_COLD_NAMES(2)))//INDICE ELSE TZFIELD%CMNHNAME = 'LBY_'//TRIM(UPCASE(CLIMA_COLD_NAMES(2)))//INDICE END IF diff --git a/src/MNH/ini_lesn.f90 b/src/MNH/ini_lesn.f90 index 84f90dba5a61e12523a215ab1e7f07ae3627a66d..ff089c8c480444dd13b575e408294467283ff8c4 100644 --- a/src/MNH/ini_lesn.f90 +++ b/src/MNH/ini_lesn.f90 @@ -584,8 +584,10 @@ ELSE END IF IF (LUSERI ) THEN ALLOCATE(XLES_MEAN_Ri (NLES_K,NLES_TIMES,NLES_MASKS)) + ALLOCATE(XLES_MEAN_If (NLES_K,NLES_TIMES,NLES_MASKS)) ELSE ALLOCATE(XLES_MEAN_Ri (0,0,0)) + ALLOCATE(XLES_MEAN_If (0,0,0)) END IF IF (LUSERS ) THEN ALLOCATE(XLES_MEAN_Rs (NLES_K,NLES_TIMES,NLES_MASKS)) @@ -691,6 +693,7 @@ IF (LUSERC ) XLES_MEAN_INDCf = XUNDEF IF (LUSERC ) XLES_MEAN_INDCf2 = XUNDEF IF (LUSERR ) XLES_MEAN_Rr = XUNDEF IF (LUSERI ) XLES_MEAN_Ri = XUNDEF +IF (LUSERI ) XLES_MEAN_If = XUNDEF IF (LUSERS ) XLES_MEAN_Rs = XUNDEF IF (LUSERG ) XLES_MEAN_Rg = XUNDEF IF (LUSERH ) XLES_MEAN_Rh = XUNDEF diff --git a/src/MNH/ini_lima_cold_mixed.f90 b/src/MNH/ini_lima_cold_mixed.f90 index cb427cdb434982b229095adb417eee3d1071b73e..8aaa67fb33df1ede4e7acbb8228c7fade4bb052d 100644 --- a/src/MNH/ini_lima_cold_mixed.f90 +++ b/src/MNH/ini_lima_cold_mixed.f90 @@ -41,6 +41,8 @@ END MODULE MODI_INI_LIMA_COLD_MIXED !! Philippe Wautelet: 05/2016-04/2018: new data structures and calls for I/O ! P. Wautelet 10/04/2019: replace ABORT and STOP calls by Print_msg ! P. Wautelet 26/04/2019: replace non-standard FLOAT function by REAL function +! C. Barthe 14/03/2022: add CIBU and RDSF +! J. Wurtz 03/2022: new snow characteristics ! !------------------------------------------------------------------------------- ! @@ -54,6 +56,7 @@ USE MODD_PARAM_LIMA USE MODD_PARAM_LIMA_WARM USE MODD_PARAM_LIMA_COLD USE MODD_PARAM_LIMA_MIXED +use MODD_RAIN_ICE_PARAM, only: XALPHA1, XALPHA2, XBETA1, XBETA2, IMNU0=>XMNU0, XNU10, XNU20 USE MODD_REF ! use mode_msg @@ -124,7 +127,21 @@ REAL :: PWETLBDAH_MAX,PWETLBDAH_MIN INTEGER :: KWETLBDAS,KWETLBDAG,KWETLBDAH ! REAL :: ZFAC_ZRNIC ! Zrnic factor used to decrease Long Kernels -! +! +REAL :: ZBOUND_CIBU_SMIN ! XDCSLIM*Lbda_s : lower & upper bound used +REAL :: ZBOUND_CIBU_SMAX ! in the tabulated function +REAL :: ZBOUND_CIBU_GMIN ! XDCGLIM*Lbda_g : lower & upper bound used +REAL :: ZBOUND_CIBU_GMAX ! in the tabulated function +REAL :: ZRATE_S ! Geometrical growth of Lbda_s in the tabulated function +REAL :: ZRATE_G ! Geometrical growth of Lbda_g in the tabulated function +! +REAL :: ZBOUND_RDSF_RMIN ! XDCRLIM*Lbda_r : lower & upper bound used +REAL :: ZBOUND_RDSF_RMAX ! in the tabulated function +REAL :: ZRATE_R ! Geometrical growth of Lbda_r in the tabulated function +REAL :: ZKHI_LWM ! Coefficient of Lawson et al. (2015) +! +REAL :: ZRHOIW ! ice density +! !------------------------------------------------------------------------------- ! ! @@ -171,12 +188,27 @@ XF1IS = 0.28 ! XAS = 0.02 XBS = 1.9 + +IF (LSNOW_T) THEN +!Cas Gamma generalisee +XCS = 11.52 +XDS = 0.39 +XFVELOS =0.097 +!Cas MP +!XCS = 13.2 +!XDS = 0.423 +!XFVELOS = 25.14 +ELSE XCS = 5. XDS = 0.27 -! -XCCS = 5.0 -XCXS = 1.0 -! +XFVELOS = 0. +END IF + +IF (.NOT. LSNOW_T) THEN + XCCS = 5.0 + XCXS = 1.0 +END IF + XF0S = 0.86 XF1S = 0.28 ! @@ -234,8 +266,17 @@ XC1H = 1./2. XALPHAI = 3.0 ! Gamma law for the ice crystal volume XNUI = 3.0 ! Gamma law with little dispersion ! -XALPHAS = 1.0 ! Exponential law -XNUS = 1.0 ! Exponential law +IF (LSNOW_T) THEN +!Cas GAMMAGEN + XALPHAS = .214 ! Generalized gamma law + XNUS = 43.7 ! Generalized gamma law + XTRANS_MP_GAMMAS = SQRT( ( GAMMA(XNUS + 2./XALPHAS)*GAMMA(XNUS + 4./XALPHAS) ) / & + ( 8.* GAMMA(XNUS + 1./XALPHAS)*GAMMA(XNUS + 3./XALPHAS) ) ) +ELSE + XALPHAS = 1.0 ! Exponential law + XNUS = 1.0 ! Exponential law + XTRANS_MP_GAMMAS = 1. +END IF ! XALPHAG = 1.0 ! Exponential law XNUG = 1.0 ! Exponential law @@ -248,6 +289,7 @@ XNUH = 8.0 ! Gamma law with little dispersion XLBEXI = 1.0/XBI XLBI = XAI*MOMG(XALPHAI,XNUI,XBI) ! +XNS = 1.0/(XAS*MOMG(XALPHAS,XNUS,XBS)) XLBEXS = 1.0/(XCXS-XBS) XLBS = ( XAS*XCCS*MOMG(XALPHAS,XNUS,XBS) )**(-XLBEXS) ! @@ -266,7 +308,8 @@ IF (GFLAG) THEN WRITE(UNIT=ILUOUT0,FMT='(" XLBEXH =",E13.6," XLBH =",E13.6)') XLBEXH,XLBH END IF ! -XLBDAS_MAX = 500000 +XLBDAS_MAX = 500000. ! LBDAS_MAX doit être compare avec LBDAS avec une forme de Marshall-Palmer +XLBDAS_MIN = 1000. XLBDAG_MAX = 100000.0 ! ZCONC_MAX = 1.E6 ! Maximal concentration for falling particules set to 1 per cc @@ -312,9 +355,20 @@ XFSEDRI = XC_I*GAMMA_X0D(XNUI+(XDI+XBI)/XALPHAI)/GAMMA_X0D(XNUI+XBI/XALPHAI)* XFSEDCI = XC_I*GAMMA_X0D(XNUI+XDI/XALPHAI)/GAMMA_X0D(XNUI)* & (ZRHO00)**XCEXVT ! -XEXSEDS = (XBS+XDS-XCXS)/(XBS-XCXS) -XFSEDS = XCS*XAS*XCCS*MOMG(XALPHAS,XNUS,XBS+XDS)* & +IF (LSNOW_T) THEN +!HOUZE/HAIC + !XEXSEDS = -XDS !(2*XBS+XDS) + !XFSEDS = XCS*MOMG(XALPHAS,XNUS,XBS+XDS)/(MOMG(XALPHAS,XNUS,XBS)) & + ! *(ZRHO00)**XCEXVT +!LH_EXTENDED + XEXSEDS = -XDS-XBS + XFSEDS = XCS*MOMG(XALPHAS,XNUS,XBS+XDS)/(MOMG(XALPHAS,XNUS,XBS)) & + *(ZRHO00)**XCEXVT +ELSE + XEXSEDS = (XBS+XDS-XCXS)/(XBS-XCXS) + XFSEDS = XCS*XAS*XCCS*MOMG(XALPHAS,XNUS,XBS+XDS)* & (XAS*XCCS*MOMG(XALPHAS,XNUS,XBS))**(-XEXSEDS)*(ZRHO00)**XCEXVT +END IF ! XEXSEDG = (XBG+XDG-XCXG)/(XBG-XCXG) XFSEDG = XCG*XAG*XCCG*MOMG(XALPHAG,XNUG,XBG+XDG)* & @@ -324,8 +378,6 @@ XEXSEDH = (XBH+XDH-XCXH)/(XBH-XCXH) XFSEDH = XCH*XAH*XCCH*MOMG(XALPHAH,XNUH,XBH+XDH)* & (XAH*XCCH*MOMG(XALPHAH,XNUH,XBH))**(-XEXSEDH)*(ZRHO00)**XCEXVT ! -! -! XLB(4) = XLBI XLBEX(4) = XLBEXI XD(4) = XDI @@ -488,7 +540,20 @@ IF (LMEYERS) THEN XNUC_CON,XEXTT_CON,XEX_CON WRITE(UNIT=ILUOUT0,FMT='(" mass of embryo XMNU0=",E13.6)') XMNU0 END IF -! +! +! ***************** +!* 4.3 NUCLEATION for NMOM_I=1 +! ***************** +! +XNU10 = 50.*ZFACT_NUCL +XALPHA1 = 4.5 +XBETA1 = 0.6 +! +XNU20 = 1000.*ZFACT_NUCL +XALPHA2 = 12.96 +XBETA2 = 0.639 +! +IMNU0 = 6.88E-13 !------------------------------------------------------------------------------- ! ! @@ -561,7 +626,7 @@ XR1DEPIS = XC1DEPIS *(XAI*XDICNVS_LIM**XBI) ! ! Harrington parameterization for snow to ice conversion ! -XLBDASCNVI_MAX = 6000. ! lbdas max after Field (1999) +XLBDASCNVI_MAX = 6000.*XTRANS_MP_GAMMAS ! lbdas max after Field (1999) ! XDSCNVI_LIM = 125.E-6 ! size in microns XLBDASCNVI_LIM = (50.0**(1.0/(XALPHAS)))/XDSCNVI_LIM ! ZLBDAS Limitation @@ -574,10 +639,10 @@ XR1DEPSI = XC1DEPSI *(XAS*XDSCNVI_LIM**XBS) ! ! Vapor deposition on snow and graupel and hail ! -X0DEPS = (4.0*XPI)*XCCS*XC1S*XF0S*MOMG(XALPHAS,XNUS,1.) -X1DEPS = (4.0*XPI)*XCCS*XC1S*XF1S*SQRT(XCS)*MOMG(XALPHAS,XNUS,0.5*XDS+1.5) -XEX0DEPS = XCXS-1.0 -XEX1DEPS = XCXS-0.5*(XDS+3.0) +X0DEPS = XNS*(4.0*XPI)*XC1S*XF0S*MOMG(XALPHAS,XNUS,1.) +X1DEPS = XNS*(4.0*XPI)*XC1S*XF1S*SQRT(XCS)*MOMG(XALPHAS,XNUS,0.5*XDS+1.5) +XEX0DEPS = XBS-1.0 +XEX1DEPS = -0.5*(XDS+3.0) ! X0DEPG = (4.0*XPI)*XCCG*XC1G*XF0G*MOMG(XALPHAG,XNUG,1.) X1DEPG = (4.0*XPI)*XCCG*XC1G*XF1G*SQRT(XCG)*MOMG(XALPHAG,XNUG,0.5*XDG+1.5) @@ -647,6 +712,8 @@ XITAUTS_THRESHOLD = 7.5 !* 6.4 Constants for snow aggregation ! XCOLEXIS = 0.05 ! Temperature factor of the I+S collection efficiency +XFIAGGS = XNS*(XPI/4.0)*0.25*XCS*(ZRHO00**XCEXVT)*MOMG(XALPHAS,XNUS,XDS+2.0) +XEXIAGGS = -XDS - 2.0 XAGGS_CLARGE1 = XKER_ZRNIC_A2*ZGAMI(2) XAGGS_CLARGE2 = XKER_ZRNIC_A2*ZGAMS(2) XAGGS_RLARGE1 = XKER_ZRNIC_A2*ZGAMI(6)*XAI @@ -669,13 +736,18 @@ END IF ! XDCSLIM = 0.007 ! D_cs^lim = 7 mm as suggested by Farley et al. (1989) XCOLCS = 1.0 -XEXCRIMSS= XCXS-XDS-2.0 -XCRIMSS = (XPI/4.0)*XCOLCS*XCCS*XCS*(ZRHO00**XCEXVT)*MOMG(XALPHAS,XNUS,XDS+2.0) +XEXCRIMSS = -XDS-2.0 +XCRIMSS = XNS * (XPI/4.0)*XCOLCS*XCS*(ZRHO00**XCEXVT)*MOMG(XALPHAS,XNUS,XDS+2.0) + XEXCRIMSG= XEXCRIMSS XCRIMSG = XCRIMSS -XSRIMCG = XCCS*XAS*MOMG(XALPHAS,XNUS,XBS) -XEXSRIMCG= XCXS-XBS +XSRIMCG = XNS*XAS*MOMG(XALPHAS,XNUS,XBS) +XEXSRIMCG= -XBS ! +!Pour Murakami 1990 +XSRIMCG2 = XNS*XAG*MOMG(XALPHAS,XNUS,XBG) +XSRIMCG3 = 0.1 +XEXSRIMCG2=XBS-XBG GFLAG = .TRUE. IF (GFLAG) THEN WRITE(UNIT=ILUOUT0,FMT='(" riming of the aggregates")') @@ -684,17 +756,19 @@ IF (GFLAG) THEN END IF ! NGAMINC = 80 -XGAMINC_BOUND_MIN = 1.0E-1 ! Minimal value of (Lbda * D_cs^lim)**alpha -XGAMINC_BOUND_MAX = 1.0E7 ! Maximal value of (Lbda * D_cs^lim)**alpha -ZRATE = EXP(LOG(XGAMINC_BOUND_MAX/XGAMINC_BOUND_MIN)/REAL(NGAMINC-1)) +XGAMINC_BOUND_MIN = (1000.*XTRANS_MP_GAMMAS*XDCSLIM)**XALPHAS !1.0E-1 ! Minimal value of (Lbda * D_cs^lim)**alpha +XGAMINC_BOUND_MAX = (50000.*XTRANS_MP_GAMMAS*XDCSLIM)**XALPHAS !1.0E7 ! Maximal value of (Lbda * D_cs^lim)**alpha +ZRATE = EXP(LOG(XGAMINC_BOUND_MAX/XGAMINC_BOUND_MIN)/FLOAT(NGAMINC-1)) ! ALLOCATE( XGAMINC_RIM1(NGAMINC) ) ALLOCATE( XGAMINC_RIM2(NGAMINC) ) +ALLOCATE( XGAMINC_RIM4(NGAMINC) ) ! DO J1=1,NGAMINC ZBOUND = XGAMINC_BOUND_MIN*ZRATE**(J1-1) XGAMINC_RIM1(J1) = GAMMA_INC(XNUS+(2.0+XDS)/XALPHAS,ZBOUND) XGAMINC_RIM2(J1) = GAMMA_INC(XNUS+XBS/XALPHAS ,ZBOUND) + XGAMINC_RIM4(J1) = GAMMA_INC(XNUS+XBG/XALPHAS ,ZBOUND) ! Pour Murakami 1990 END DO ! XRIMINTP1 = XALPHAS / LOG(ZRATE) @@ -732,13 +806,13 @@ XHMLINTP2 = 1.0 + XHMLINTP1*LOG( 25.E-6/(XGAMINC_HMC_BOUND_MIN)**(1.0/XALPHAC) ) ! !* 7.2 Constants for the accretion of raindrops onto aggregates ! -XFRACCSS = ((XPI**2)/24.0)*XCCS*XRHOLW*(ZRHO00**XCEXVT) +XFRACCSS = XNS*XPI/4.0*XAR*(ZRHO00**XCEXVT) ! XLBRACCS1 = MOMG(XALPHAS,XNUS,2.)*MOMG(XALPHAR,XNUR,3.) XLBRACCS2 = 2.*MOMG(XALPHAS,XNUS,1.)*MOMG(XALPHAR,XNUR,4.) XLBRACCS3 = MOMG(XALPHAR,XNUR,5.) ! -XFSACCRG = (XPI/4.0)*XAS*XCCS*(ZRHO00**XCEXVT) +XFSACCRG = XNS*(XPI/4.0)*XAS*(ZRHO00**XCEXVT) ! XLBSACCR1 = MOMG(XALPHAR,XNUR,2.)*MOMG(XALPHAS,XNUS,XBS) XLBSACCR2 = 2.*MOMG(XALPHAR,XNUR,1.)*MOMG(XALPHAS,XNUS,XBS+1.) @@ -750,9 +824,9 @@ XLBSACCR3 = MOMG(XALPHAS,XNUS,XBS+2.) ! Notice: One magnitude of lambda discretized over 10 points for snow ! NACCLBDAS = 40 -XACCLBDAS_MIN = 5.0E1 ! Minimal value of Lbda_s to tabulate XKER_RACCS -XACCLBDAS_MAX = 5.0E5 ! Maximal value of Lbda_s to tabulate XKER_RACCS -ZRATE = LOG(XACCLBDAS_MAX/XACCLBDAS_MIN)/REAL(NACCLBDAS-1) +XACCLBDAS_MIN = 5.0E2*XTRANS_MP_GAMMAS !5.0E1*XTRANS_MP_GAMMAS ! Minimal value of Lbda_s to tabulate XKER_RACCS +XACCLBDAS_MAX = 1.0E5*XTRANS_MP_GAMMAS !5.0E5*XTRANS_MP_GAMMAS ! Maximal value of Lbda_s to tabulate XKER_RACCS +ZRATE = LOG(XACCLBDAS_MAX/XACCLBDAS_MIN)/FLOAT(NACCLBDAS-1) XACCINTP1S = 1.0 / ZRATE XACCINTP2S = 1.0 - LOG( XACCLBDAS_MIN ) / ZRATE NACCLBDAR = 40 @@ -785,15 +859,15 @@ IF( (KACCLBDAS/=NACCLBDAS) .OR. (KACCLBDAR/=NACCLBDAR) .OR. (KND/=IND) .OR. & (PACCLBDAS_MIN/=XACCLBDAS_MIN) .OR. (PACCLBDAR_MIN/=XACCLBDAR_MIN) .OR. & (PFDINFTY/=ZFDINFTY) ) THEN CALL RRCOLSS ( IND, XALPHAS, XNUS, XALPHAR, XNUR, & - ZESR, XBR, XCS, XDS, XCR, XDR, & + ZESR, XBR, XCS, XDS, XFVELOS, XCR, XDR, & XACCLBDAS_MAX, XACCLBDAR_MAX, XACCLBDAS_MIN, XACCLBDAR_MIN, & ZFDINFTY, XKER_RACCSS, XAG, XBS, XAS ) CALL RZCOLX ( IND, XALPHAS, XNUS, XALPHAR, XNUR, & - ZESR, XBR, XCS, XDS, XCR, XDR, & + ZESR, XBR, XCS, XDS, XFVELOS, XCR, XDR, 0., & XACCLBDAS_MAX, XACCLBDAR_MAX, XACCLBDAS_MIN, XACCLBDAR_MIN, & ZFDINFTY, XKER_RACCS ) CALL RSCOLRG ( IND, XALPHAS, XNUS, XALPHAR, XNUR, & - ZESR, XBS, XCS, XDS, XCR, XDR, & + ZESR, XBS, XCS, XDS, XFVELOS, XCR, XDR, & XACCLBDAS_MAX, XACCLBDAR_MAX, XACCLBDAS_MIN, XACCLBDAR_MIN, & ZFDINFTY, XKER_SACCRG,XAG, XBS, XAS ) WRITE(UNIT=ILUOUT0,FMT='("*****************************************")') @@ -872,7 +946,108 @@ IF (GFLAG) THEN WRITE(UNIT=ILUOUT0,FMT='(" conversion-melting of the aggregates")') WRITE(UNIT=ILUOUT0,FMT='(" Conv. factor XFSCVMG=",E13.6)') XFSCVMG END IF -! +! +! +!* 7.4 Constants for Ice-Ice collision process (CIBU) +! +XDCSLIM_CIBU_MIN = 2.0E-4 ! D_cs lim min +XDCSLIM_CIBU_MAX = 1.0E-3 ! D_cs lim max +XDCGLIM_CIBU_MIN = 2.0E-3 ! D_cg lim min +! +GFLAG = .TRUE. +IF (GFLAG) THEN + WRITE(UNIT=ILUOUT0,FMT='(" Ice-ice collision process")') + WRITE(UNIT=ILUOUT0,FMT='(" D_cs^lim min-max =",E13.6)') XDCSLIM_CIBU_MIN,XDCSLIM_CIBU_MAX + WRITE(UNIT=ILUOUT0,FMT='(" D_cg^lim min =",E13.6)') XDCGLIM_CIBU_MIN +END IF +! +NGAMINC = 80 +! +!Note : Boundaries are rounded at 5.0 or 1.0 (down for Bound_min and up for Bound_max) +XGAMINC_BOUND_CIBU_SMIN = 1.0E-5 ! Minimal value of (Lbda_s * D_cs^lim)**alpha) 0.2 mm +XGAMINC_BOUND_CIBU_SMAX = 5.0E-3 ! Maximal value of (Lbda_s * D_cs^lim)**alpha) 1 mm +XGAMINC_BOUND_CIBU_SMIN = 1.0E-5 ! Minimal value of (Lbda_s * D_cs^lim)**alpha) 0.2 mm +XGAMINC_BOUND_CIBU_SMAX = 5.0E+2 ! Maximal value of (Lbda_s * D_cs^lim)**alpha) 1 mm +ZRATE_S = EXP(LOG(XGAMINC_BOUND_CIBU_SMAX/XGAMINC_BOUND_CIBU_SMIN)/FLOAT(NGAMINC-1)) +! +XGAMINC_BOUND_CIBU_GMIN = 1.0E-1 ! Minimal value of (Lbda_g * D_cg^lim)**alpha) 2 mm +XGAMINC_BOUND_CIBU_GMAX = 1.0E0 ! Maximal value of (Lbda_g * D_cg^lim)**alpha) 2 mm +XGAMINC_BOUND_CIBU_GMIN = 1.0E-1 ! Minimal value of (Lbda_g * D_cg^lim)**alpha) 2 mm +XGAMINC_BOUND_CIBU_GMAX = 5.0E+1 ! Maximal value of (Lbda_g * D_cg^lim)**alpha) 2 mm +ZRATE_G = EXP(LOG(XGAMINC_BOUND_CIBU_GMAX/XGAMINC_BOUND_CIBU_GMIN)/FLOAT(NGAMINC-1)) +! +ALLOCATE( XGAMINC_CIBU_S(4,NGAMINC) ) +ALLOCATE( XGAMINC_CIBU_G(2,NGAMINC) ) +! +DO J1 = 1, NGAMINC + ZBOUND_CIBU_SMIN = XGAMINC_BOUND_CIBU_SMIN * ZRATE_S**(J1-1) + ZBOUND_CIBU_GMIN = XGAMINC_BOUND_CIBU_GMIN * ZRATE_G**(J1-1) +! +! For ZNI_CIBU + XGAMINC_CIBU_S(1,J1) = GAMMA_INC(XNUS,ZBOUND_CIBU_SMIN) + XGAMINC_CIBU_S(2,J1) = GAMMA_INC(XNUS+(XDS/XALPHAS),ZBOUND_CIBU_SMIN) +! + XGAMINC_CIBU_G(1,J1) = GAMMA_INC(XNUG+((2.0+XDG)/XALPHAG),ZBOUND_CIBU_GMIN) + XGAMINC_CIBU_G(2,J1) = GAMMA_INC(XNUG+(2.0/XALPHAG),ZBOUND_CIBU_GMIN) +! +! For ZRI_CIBU + XGAMINC_CIBU_S(3,J1) = GAMMA_INC(XNUS+(XBS/XALPHAS),ZBOUND_CIBU_SMIN) + XGAMINC_CIBU_S(4,J1) = GAMMA_INC(XNUS+((XBS+XDS)/XALPHAS),ZBOUND_CIBU_SMIN) +END DO +! +XCIBUINTP_S = XALPHAS / LOG(ZRATE_S) +XCIBUINTP1_S = 1.0 + XCIBUINTP_S * LOG(XDCSLIM_CIBU_MIN/(XGAMINC_BOUND_CIBU_SMIN)**(1.0/XALPHAS)) +XCIBUINTP2_S = 1.0 + XCIBUINTP_S * LOG(XDCSLIM_CIBU_MAX/(XGAMINC_BOUND_CIBU_SMIN)**(1.0/XALPHAS)) +! +XCIBUINTP_G = XALPHAG / LOG(ZRATE_G) +XCIBUINTP1_G = 1.0 + XCIBUINTP_G * LOG(XDCGLIM_CIBU_MIN/(XGAMINC_BOUND_CIBU_GMIN)**(1.0/XALPHAG)) +! +! For ZNI_CIBU +XFACTOR_CIBU_NI = XNS * (XPI / 4.0) * XCCG * (ZRHO00**XCEXVT) +XMOMGG_CIBU_1 = MOMG(XALPHAG,XNUG,2.0+XDG) +XMOMGG_CIBU_2 = MOMG(XALPHAG,XNUG,2.0) +XMOMGS_CIBU_1 = MOMG(XALPHAS,XNUS,XDS) +! +! For ZRI_CIBU +XFACTOR_CIBU_RI = XNS * XAS * (XPI / 4.0) * XCCG * (ZRHO00**XCEXVT) +XMOMGS_CIBU_2 = MOMG(XALPHAS,XNUS,XBS) +XMOMGS_CIBU_3 = MOMG(XALPHAS,XNUS,XBS+XDS) +! +! +!* 7.5 Constants for raindrop shattering by freezing process (RDSF) +! +XDCRLIM_RDSF_MIN = 0.1E-3 ! D_cr lim min +! +GFLAG = .TRUE. +IF (GFLAG) THEN + WRITE(UNIT=ILUOUT0,FMT='(" Ice-rain collision process")') + WRITE(UNIT=ILUOUT0,FMT='(" D_cr^lim min =",E13.6)') XDCRLIM_RDSF_MIN +END IF +! +NGAMINC = 80 +! +XGAMINC_BOUND_RDSF_RMIN = 1.0E-5 ! Minimal value of (Lbda_r * D_cr^lim)**alpha) 0.1 mm +XGAMINC_BOUND_RDSF_RMAX = 5.0E-3 ! Maximal value of (Lbda_r * D_cr^lim)**alpha) 1 mm +ZRATE_R = EXP(LOG(XGAMINC_BOUND_RDSF_RMAX/XGAMINC_BOUND_RDSF_RMIN)/FLOAT(NGAMINC-1)) +! +ALLOCATE( XGAMINC_RDSF_R(NGAMINC) ) +! +DO J1 = 1, NGAMINC + ZBOUND_RDSF_RMIN = XGAMINC_BOUND_RDSF_RMIN * ZRATE_R**(J1-1) +! +! For ZNI_RDSF + XGAMINC_RDSF_R(J1) = GAMMA_INC(XNUR+((6.0+XDR)/XALPHAR),ZBOUND_RDSF_RMIN) +END DO +! +XRDSFINTP_R = XALPHAR / LOG(ZRATE_R) +XRDSFINTP1_R = 1.0 + XRDSFINTP_R * LOG( XDCRLIM_RDSF_MIN/(XGAMINC_BOUND_RDSF_RMIN)**(1.0/XALPHAR) ) +! +! For ZNI_RDSF +ZKHI_LWM = 2.5E13 ! Coeff. in Lawson-Woods-Morrison for the number of splinters + ! N_DF = XKHI_LWM * D_R**4 +XFACTOR_RDSF_NI = ZKHI_LWM * (XPI / 4.0) * XCR * (ZRHO00**XCEXVT) +XMOMGR_RDSF = MOMG(XALPHAR,XNUR,6.0+XDR) +! !------------------------------------------------------------------------------- ! ! @@ -936,7 +1111,7 @@ XCOLSG = 0.01 ! Collection efficiency of S+G XCOLEXSG = 0.1 ! Temperature factor of the S+G collection efficiency WRITE (ILUOUT0, FMT=*) ' NEW Constants for the aggregate collection by the graupeln' WRITE (ILUOUT0, FMT=*) ' XCOLSG, XCOLEXSG = ',XCOLSG,XCOLEXSG -XFSDRYG = (XPI/4.0)*XCOLSG*XCCG*XCCS*XAS*(ZRHO00**XCEXVT) +XFSDRYG = XNS*(XPI/4.0)*XCOLSG*XCCG*XAS*(ZRHO00**XCEXVT) ! XLBSDRYG1 = MOMG(XALPHAG,XNUG,2.)*MOMG(XALPHAS,XNUS,XBS) XLBSDRYG2 = 2.*MOMG(XALPHAG,XNUG,1.)*MOMG(XALPHAS,XNUS,XBS+1.) @@ -966,8 +1141,8 @@ ZRATE = LOG(XDRYLBDAR_MAX/XDRYLBDAR_MIN)/REAL(NDRYLBDAR-1) XDRYINTP1R = 1.0 / ZRATE XDRYINTP2R = 1.0 - LOG( XDRYLBDAR_MIN ) / ZRATE NDRYLBDAS = 80 -XDRYLBDAS_MIN = 2.5E1 ! Minimal value of Lbda_s to tabulate XKER_SDRYG -XDRYLBDAS_MAX = 2.5E9 ! Maximal value of Lbda_s to tabulate XKER_SDRYG +XDRYLBDAS_MIN = 5.0E2*XTRANS_MP_GAMMAS ! Minimal value of Lbda_s to tabulate XKER_SDRYG +XDRYLBDAS_MAX = 1.0E5*XTRANS_MP_GAMMAS ! Maximal value of Lbda_s to tabulate XKER_SDRYG ZRATE = LOG(XDRYLBDAS_MAX/XDRYLBDAS_MIN)/REAL(NDRYLBDAS-1) XDRYINTP1S = 1.0 / ZRATE XDRYINTP2S = 1.0 - LOG( XDRYLBDAS_MIN ) / ZRATE @@ -999,7 +1174,7 @@ IF( (KDRYLBDAG/=NDRYLBDAG) .OR. (KDRYLBDAS/=NDRYLBDAS) .OR. (KND/=IND) .OR. & (PDRYLBDAG_MIN/=XDRYLBDAG_MIN) .OR. (PDRYLBDAS_MIN/=XDRYLBDAS_MIN) .OR. & (PFDINFTY/=ZFDINFTY) ) THEN CALL RZCOLX ( IND, XALPHAG, XNUG, XALPHAS, XNUS, & - ZEGS, XBS, XCG, XDG, XCS, XDS, & + ZEGS, XBS, XCG, XDG, 0., XCS, XDS, XFVELOS, & XDRYLBDAG_MAX, XDRYLBDAS_MAX, XDRYLBDAG_MIN, XDRYLBDAS_MIN, & ZFDINFTY, XKER_SDRYG ) WRITE(UNIT=ILUOUT0,FMT='("*****************************************")') @@ -1065,7 +1240,7 @@ IF( (KDRYLBDAG/=NDRYLBDAG) .OR. (KDRYLBDAR/=NDRYLBDAR) .OR. (KND/=IND) .OR. & (PDRYLBDAG_MIN/=XDRYLBDAG_MIN) .OR. (PDRYLBDAR_MIN/=XDRYLBDAR_MIN) .OR. & (PFDINFTY/=ZFDINFTY) ) THEN CALL RZCOLX ( IND, XALPHAG, XNUG, XALPHAR, XNUR, & - ZEGR, XBR, XCG, XDG, XCR, XDR, & + ZEGR, XBR, XCG, XDG,0., XCR, XDR, 0., & XDRYLBDAG_MAX, XDRYLBDAR_MAX, XDRYLBDAG_MIN, XDRYLBDAR_MIN, & ZFDINFTY, XKER_RDRYG ) WRITE(UNIT=ILUOUT0,FMT='("*****************************************")') @@ -1126,7 +1301,8 @@ XFWETH = (XPI/4.0)*XCCH*XCH*(ZRHO00**XCEXVT)*MOMG(XALPHAH,XNUH,XDH+2.0) ! !* 9.2.2 Constants for the aggregate collection by the hailstones ! -XFSWETH = (XPI/4.0)*XCCH*XCCS*XAS*(ZRHO00**XCEXVT) +!XFSWETH = (XPI/4.0)*XCCH*XCCS*XAS*(ZRHO00**XCEXVT) +XFSWETH = XNS*(XPI/4.0)*XCCH*XAS*(ZRHO00**XCEXVT) ! Wurtz ! XLBSWETH1 = MOMG(XALPHAH,XNUH,2.)*MOMG(XALPHAS,XNUS,XBS) XLBSWETH2 = 2.*MOMG(XALPHAH,XNUH,1.)*MOMG(XALPHAS,XNUS,XBS+1.) @@ -1143,8 +1319,8 @@ XLBGWETH3 = MOMG(XALPHAG,XNUG,XBG+2.) ! Notice: One magnitude of lambda discretized over 10 points ! NWETLBDAS = 80 -XWETLBDAS_MIN = 2.5E1 ! Minimal value of Lbda_s to tabulate XKER_SWETH -XWETLBDAS_MAX = 2.5E9 ! Maximal value of Lbda_s to tabulate XKER_SWETH +XWETLBDAS_MIN = 5.0E2*XTRANS_MP_GAMMAS ! Minimal value of Lbda_s to tabulate XKER_SWETH +XWETLBDAS_MAX = 1.0E5*XTRANS_MP_GAMMAS ! Maximal value of Lbda_s to tabulate XKER_SWETH ZRATE = LOG(XWETLBDAS_MAX/XWETLBDAS_MIN)/REAL(NWETLBDAS-1) XWETINTP1S = 1.0 / ZRATE XWETINTP2S = 1.0 - LOG( XWETLBDAS_MIN ) / ZRATE @@ -1182,7 +1358,7 @@ IF( (KWETLBDAH/=NWETLBDAH) .OR. (KWETLBDAS/=NWETLBDAS) .OR. (KND/=IND) .OR. & (PWETLBDAH_MIN/=XWETLBDAH_MIN) .OR. (PWETLBDAS_MIN/=XWETLBDAS_MIN) .OR. & (PFDINFTY/=ZFDINFTY) ) THEN CALL RZCOLX ( IND, XALPHAH, XNUH, XALPHAS, XNUS, & - ZEHS, XBS, XCH, XDH, XCS, XDS, & + ZEHS, XBS, XCH, XDH,0., XCS, XDS, XFVELOS, & XWETLBDAH_MAX, XWETLBDAS_MAX, XWETLBDAH_MIN, XWETLBDAS_MIN, & ZFDINFTY, XKER_SWETH ) WRITE(UNIT=ILUOUT0,FMT='("*****************************************")') @@ -1248,7 +1424,7 @@ IF( (KWETLBDAH/=NWETLBDAH) .OR. (KWETLBDAG/=NWETLBDAG) .OR. (KND/=IND) .OR. & (PWETLBDAH_MIN/=XWETLBDAH_MIN) .OR. (PWETLBDAG_MIN/=XWETLBDAG_MIN) .OR. & (PFDINFTY/=ZFDINFTY) ) THEN CALL RZCOLX ( IND, XALPHAH, XNUH, XALPHAG, XNUG, & - ZEHG, XBG, XCH, XDH, XCG, XDG, & + ZEHG, XBG, XCH, XDH,0., XCG, XDG, 0., & XWETLBDAH_MAX, XWETLBDAG_MAX, XWETLBDAH_MIN, XWETLBDAG_MIN, & ZFDINFTY, XKER_GWETH ) WRITE(UNIT=ILUOUT0,FMT='("*****************************************")') diff --git a/src/MNH/ini_lima_warm.f90 b/src/MNH/ini_lima_warm.f90 index 3fac15aaefe54e303ddb025473017407a5a60b6d..842552d8131dbe99f954f8c1aeaae70b8ea8f353 100644 --- a/src/MNH/ini_lima_warm.f90 +++ b/src/MNH/ini_lima_warm.f90 @@ -334,6 +334,7 @@ XLAUTR_THRESHOLD = 0.4 XITAUTR= 0.27 ! (Notice that T2 of BR74 is uncorrect and that 0.27=1./3.7 XITAUTR_THRESHOLD = 7.5 XCAUTR = 3.5E9 +XR0 = 25.0E-6 ! ! Cst for the accretion process ! @@ -405,6 +406,7 @@ X0EVAR = (12.0)*XF0R*GAMMA_X0D(XNUR+1./XALPHAR)/GAMMA_X0D(XNUR+3./XALPHAR) X1EVAR = (12.0)*XF1R*((ZRHO00)**(XCEXVT)*(XCR/0.15E-4))**0.5* & GAMMA_X0D(XNUR+(XDR+3.0)/(2.0*XALPHAR))/GAMMA_X0D(XNUR+3./XALPHAR) ! +XCEVAP = 0.86 ! !------------------------------------------------------------------------------ ! diff --git a/src/MNH/ini_modeln.f90 b/src/MNH/ini_modeln.f90 index d5a6ffa05b054a5ebe8d8ef848ec4cf44b3cef0e..42447401a055a7354fec871864ee0e837084522b 100644 --- a/src/MNH/ini_modeln.f90 +++ b/src/MNH/ini_modeln.f90 @@ -712,7 +712,6 @@ END IF ! ! CALL UPDATE_NSV(KMI) -! !------------------------------------------------------------------------------- ! !* 3. ALLOCATE MEMORY @@ -959,9 +958,11 @@ END IF ! IF (NRR>1) THEN ALLOCATE(XCLDFR(IIU,IJU,IKU)); XCLDFR (:, :, :) = 0. + ALLOCATE(XICEFR(IIU,IJU,IKU)); XICEFR (:, :, :) = 0. ALLOCATE(XRAINFR(IIU,IJU,IKU)); XRAINFR(:, :, :) = 0. ELSE ALLOCATE(XCLDFR(0,0,0)) + ALLOCATE(XICEFR(0,0,0)) ALLOCATE(XRAINFR(0,0,0)) END IF ! @@ -1906,7 +1907,7 @@ CALL MPPDB_CHECK3D(XUT,"INI_MODEL_N-before read_field::XUT",PRECISION) CALL READ_FIELD(KMI,TPINIFILE,IIU,IJU,IKU, & CGETTKET,CGETRVT,CGETRCT,CGETRRT,CGETRIT,CGETCIT,CGETZWS, & CGETRST,CGETRGT,CGETRHT,CGETSVT,CGETSRCT,CGETSIGS,CGETCLDFR, & - CGETBL_DEPTH,CGETSBL_DEPTH,CGETPHC,CGETPHR, & + CGETICEFR, CGETBL_DEPTH,CGETSBL_DEPTH,CGETPHC,CGETPHR, & CUVW_ADV_SCHEME, CTEMP_SCHEME, & NSIZELBX_ll, NSIZELBXU_ll, NSIZELBY_ll, NSIZELBYV_ll, & NSIZELBXTKE_ll,NSIZELBYTKE_ll, & @@ -1914,8 +1915,8 @@ CALL READ_FIELD(KMI,TPINIFILE,IIU,IJU,IKU, & XUM,XVM,XWM,XDUM,XDVM,XDWM, & XUT,XVT,XWT,XTHT,XPABST,XTKET,XRTKEMS, & XRT,XSVT,XZWS,XCIT,XDRYMASST,XDRYMASSS, & - XSIGS,XSRCT,XCLDFR,XBL_DEPTH,XSBL_DEPTH,XWTHVMF,XPHC,XPHR, & - XLSUM,XLSVM,XLSWM,XLSTHM,XLSRVM,XLSZWSM, & + XSIGS,XSRCT,XCLDFR,XICEFR, XBL_DEPTH,XSBL_DEPTH,XWTHVMF, & + XPHC,XPHR, XLSUM,XLSVM,XLSWM,XLSTHM,XLSRVM,XLSZWSM, & XLBXUM,XLBXVM,XLBXWM,XLBXTHM,XLBXTKEM, & XLBXRM,XLBXSVM, & XLBYUM,XLBYVM,XLBYWM,XLBYTHM,XLBYTKEM, & diff --git a/src/MNH/ini_nsv.f90 b/src/MNH/ini_nsv.f90 index c49362598ed17e813c213a643ce5474e8711d5d1..9ea8633fc038654987a6994537da2f0b521c672e 100644 --- a/src/MNH/ini_nsv.f90 +++ b/src/MNH/ini_nsv.f90 @@ -726,7 +726,7 @@ END IF ! Initialize scalar variable names for salt IF ( LSALT ) THEN - IF ( NMODE_SLT < 1 .OR. NMODE_SLT > 5 ) CALL Print_msg( NVERB_FATAL, 'GEN', 'INI_NSV', 'NMODE_SLT must in the 1 to 5 interval' ) + IF ( NMODE_SLT < 1 .OR. NMODE_SLT > 8 ) CALL Print_msg( NVERB_FATAL, 'GEN', 'INI_NSV', 'NMODE_SLT must in the 1 to 8 interval' ) IF( .NOT. ALLOCATED( CSALTNAMES ) ) THEN IMOMENTS = ( NSV_SLTEND_A(KMI) - NSV_SLTBEG_A(KMI) + 1 ) / NMODE_SLT diff --git a/src/MNH/ini_param_elec.f90 b/src/MNH/ini_param_elec.f90 index bdbd3c6d90293a6d4fde0fd28e4d9187e4712642..02a8b1578cfe2608304c04ccd8d8ebff6fd9025d 100644 --- a/src/MNH/ini_param_elec.f90 +++ b/src/MNH/ini_param_elec.f90 @@ -85,6 +85,7 @@ END MODULE MODI_INI_PARAM_ELEC !! J. Escobar 8/01/2016 bug , missing YDIR='XY' in READ !! Philippe Wautelet: 05/2016-04/2018: new data structures and calls for I/O ! P. Wautelet 26/04/2019: replace non-standard FLOAT function by REAL function +! J. Wurtz 03/2022: new snow characteristics ! !------------------------------------------------------------------------------- ! @@ -846,17 +847,17 @@ XLBQSACCRG3 = MOMG(XALPHAS,XNUS,XFS) * MOMG(XALPHAR,XNUR,2.) ZESR = 1.0 ! CALL RRCOLSS (KND, XALPHAS, XNUS, XALPHAR, XNUR, & - ZESR, XFR, XCS, XDS, XCR, XDR, & + ZESR, XFR, XCS, XDS, 0., XCR, XDR, & XACCLBDAS_MAX, XACCLBDAR_MAX, XACCLBDAS_MIN, XACCLBDAR_MIN, & PFDINFTY, XKER_Q_RACCSS, XAG, XBS, XAS ) ! CALL RZCOLX (KND, XALPHAS, XNUS, XALPHAR, XNUR, & - ZESR, XFR, XCS, XDS, XCR, XDR, & + ZESR, XFR, XCS, XDS, 0., XCR, XDR, 0., & XACCLBDAS_MAX, XACCLBDAR_MAX, XACCLBDAS_MIN, XACCLBDAR_MIN, & PFDINFTY, XKER_Q_RACCS ) ! CALL RSCOLRG (KND, XALPHAS, XNUS, XALPHAR, XNUR, & - ZESR, XFS, XCS, XDS, XCR, XDR, & + ZESR, XFS, XCS, XDS, 0., XCR, XDR, & XACCLBDAS_MAX, XACCLBDAR_MAX, XACCLBDAS_MIN, XACCLBDAR_MIN, & PFDINFTY, XKER_Q_SACCRG, XAG, XBS, XAS ) ! @@ -878,7 +879,7 @@ XLBQSDRYG3 = MOMG(XALPHAS,XNUS,XFS) * MOMG(XALPHAG,XNUG,2.) ZEGS = 1. ! also initialized in ini_rain_ice_elec ! CALL RZCOLX (KND, XALPHAG, XNUG, XALPHAS, XNUS, & - ZEGS, XFS, XCG, XDG, XCS, XDS, & + ZEGS, XFS, XCG, XDG, 0., XCS, XDS, 0., & XDRYLBDAG_MAX, XDRYLBDAS_MAX, XDRYLBDAG_MIN, XDRYLBDAS_MIN, & PFDINFTY, XKER_Q_SDRYG ) ! @@ -897,7 +898,7 @@ IF (CNI_CHARGING == 'HELFA') THEN ! IF( .NOT.ALLOCATED(XKER_Q_SDRYGB)) ALLOCATE( XKER_Q_SDRYGB(NDRYLBDAG,NDRYLBDAS) ) CALL RZCOLX (KND, XALPHAG, XNUG, XALPHAS, XNUS, & - ZEGS, 0., XCG, XDG, XCS, XDS, & + ZEGS, 0., XCG, XDG, 0., XCS, XDS, 0., & XDRYLBDAG_MAX, XDRYLBDAS_MAX, XDRYLBDAG_MIN, XDRYLBDAS_MIN, & PFDINFTY, XKER_Q_SDRYGB ) ! Delta vqb1_sg @@ -999,7 +1000,7 @@ IF (CNI_CHARGING == 'TAKAH' .OR. CNI_CHARGING == 'SAP98' .OR. & XAUX_LIM3 = MOMG(XALPHAG,XNUG,2.) IF( .NOT.ALLOCATED(XKER_Q_LIMSG)) ALLOCATE( XKER_Q_LIMSG(NDRYLBDAG,NDRYLBDAS) ) CALL RZCOLX (KND, XALPHAG, XNUG, XALPHAS, XNUS, & - ZEGS, 0., XCG, XDG, XCS, XDS, & + ZEGS, 0., XCG, XDG, 0., XCS, XDS, 0., & XDRYLBDAG_MAX, XDRYLBDAS_MAX, XDRYLBDAG_MIN, XDRYLBDAS_MIN, & PFDINFTY, XKER_Q_LIMSG) ENDIF @@ -1021,7 +1022,7 @@ XLBQRDRYG3 = MOMG(XALPHAR,XNUR,XFR) * MOMG(XALPHAG,XNUG,2.) ZEGR = 1.0 ! CALL RZCOLX (KND, XALPHAG, XNUG, XALPHAR, XNUR, & - ZEGR, XFR, XCG, XDG, XCR, XDR, & + ZEGR, XFR, XCG, XDG, 0., XCR, XDR, 0., & XDRYLBDAG_MAX, XDRYLBDAR_MAX, XDRYLBDAG_MIN, XDRYLBDAR_MIN, & PFDINFTY, XKER_Q_RDRYG ) ! diff --git a/src/MNH/ini_prog_var.f90 b/src/MNH/ini_prog_var.f90 index 1f099672e93eb078161e9b0a29070dfb7e01f295..24a1b3c83415ae7ff519b31c14d320f7781c9ac0 100644 --- a/src/MNH/ini_prog_var.f90 +++ b/src/MNH/ini_prog_var.f90 @@ -124,6 +124,10 @@ USE MODD_PARAM_n USE MODD_PARAMETERS USE MODD_SALT USE MODD_TURB_n +!UPG*PT +USE MODD_REF_n, ONLY : XRHODREF +USE MODD_CH_AERO_n +!UPG*PT ! USE MODE_IO_FIELD_READ, only: IO_Field_read USE MODE_IO_FILE, ONLY: IO_File_close, IO_File_open @@ -131,6 +135,10 @@ USE MODE_IO_MANAGE_STRUCT, ONLY: IO_File_add2list USE MODE_MODELN_HANDLER USE MODE_MSG USE MODE_POS +!UPG*PT +USE MODE_DUST_PSD +USE MODE_SALT_PSD +!UPG*PT use mode_tools_ll, only: GET_INDICE_ll ! USE MODI_PGDFILTER @@ -248,9 +256,10 @@ IF(PRESENT(HCHEMFILE)) THEN !callabortstop CALL PRINT_MSG(NVERB_FATAL,'GEN','INI_PROG_VAR','') END IF ! IIMAX - IF (.NOT.LDUST) THEN +!! UPG*PT pourquoi LDUST intervient ici ?? +!! IF (.NOT.LDUST) THEN LUSECHEM = .TRUE. - END IF +!! END IF IF (LORILAM) THEN CALL POSNAM(ILUDES,'NAM_CH_ORILAM',GFOUND,ILUOUT) IF (GFOUND) READ(UNIT=ILUDES,NML=NAM_CH_ORILAM) @@ -272,7 +281,8 @@ IF(PRESENT(HCHEMFILE)) THEN ALLOCATE(XSVT(IIU,IJU,IKU,NSV)) ! Read scalars in chem file - IF (.NOT.LDUST) THEN +!! UPG*PT ??? +!! IF (.NOT.LDUST) THEN TZFIELD%CSTDNAME = '' TZFIELD%CUNITS = 'ppp' TZFIELD%CDIR = 'XY' @@ -295,7 +305,7 @@ IF(PRESENT(HCHEMFILE)) THEN LUSECHEM=.FALSE. NEQ = 0 END IF - END IF +!! END IF IF (LORILAM) THEN TZFIELD%CSTDNAME = '' @@ -337,6 +347,7 @@ IF(PRESENT(HCHEMFILE)) THEN END IF !IRESP END DO ! JSV END IF ! ldepos_aer + END IF ! lorilam IF (LDUST) THEN diff --git a/src/MNH/ini_radar.f90 b/src/MNH/ini_radar.f90 index a53621e5ef2703ed201dc34183c1d47f3f2e6cd3..ae1ddf69d658c950c407f0bb8dc9614684b692bb 100644 --- a/src/MNH/ini_radar.f90 +++ b/src/MNH/ini_radar.f90 @@ -177,6 +177,7 @@ XLBR = ( XAR*XCCR*MOMG(XALPHAR,XNUR,XBR) )**(-XLBEXR) XLBEXI = 1.0/(-XBI) XLBI = ( XAI*MOMG(XALPHAI,XNUI,XBI) )**(-XLBEXI) ! +XNS = 1.0/(XAS*MOMG(XALPHAS,XNUS,XBS)) XLBEXS = 1.0/(XCXS-XBS) XLBS = ( XAS*XCCS*MOMG(XALPHAS,XNUS,XBS) )**(-XLBEXS) ! diff --git a/src/MNH/ini_rain_ice.f90 b/src/MNH/ini_rain_ice.f90 index 62cabad5b587f48a6cd6d443c088c8c7cea8c2ca..9f984f940bf7f14e574995b1659cbfe3086887ec 100644 --- a/src/MNH/ini_rain_ice.f90 +++ b/src/MNH/ini_rain_ice.f90 @@ -102,6 +102,7 @@ END MODULE MODI_INI_RAIN_ICE !! S. Riette 2016-11: new ICE3/ICE4 options !! P. Wautelet 22/01/2019 bug correction: incorrect write ! P. Wautelet 26/04/2019: replace non-standard FLOAT function by REAL function +! J. Wurtz 03/2022: New snow characteristics with LSNOW_T ! !------------------------------------------------------------------------------- ! @@ -297,11 +298,25 @@ XF2I = 0.14 ! XAS = 0.02 XBS = 1.9 -XCS = 5.1 +IF (LSNOW_T) THEN +!Cas Gamma generalisee +XCS = 11.52 +XDS = 0.39 +XFVELOS =0.097 +!Cas MP +!XCS = 13.2 +!XDS = 0.423 +!XFVELOS = 25.14 +ELSE +XCS = 5. XDS = 0.27 +XFVELOS = 0. +END IF ! +IF (.NOT. LSNOW_T) THEN XCCS = 5.0 XCXS = 1.0 +END IF ! XF0S = 0.86 XF1S = 0.28 @@ -377,8 +392,17 @@ XNUR = 1.0 ! Exponential law XALPHAI = 3.0 ! Gamma law for the ice crystal volume XNUI = 3.0 ! Gamma law with little dispersion ! -XALPHAS = 1.0 ! Exponential law -XNUS = 1.0 ! Exponential law +IF (LSNOW_T) THEN +!Cas GAMMAGEN + XALPHAS = .214 ! Generalized gamma law + XNUS = 43.7 ! Generalized gamma law + XTRANS_MP_GAMMAS = SQRT( ( GAMMA(XNUS + 2./XALPHAS)*GAMMA(XNUS + 4./XALPHAS) ) / & + ( 8.* GAMMA(XNUS + 1./XALPHAS)*GAMMA(XNUS + 3./XALPHAS) ) ) +ELSE + XALPHAS = 1.0 ! Exponential law + XNUS = 1.0 ! Exponential law + XTRANS_MP_GAMMAS = 1. +END IF ! XALPHAG = 1.0 ! Exponential law XNUG = 1.0 ! Exponential law @@ -400,6 +424,7 @@ XLBR = ( XAR*XCCR*MOMG(XALPHAR,XNUR,XBR) )**(-XLBEXR) XLBEXI = 1.0/(-XBI) XLBI = ( XAI*MOMG(XALPHAI,XNUI,XBI) )**(-XLBEXI) ! +XNS = 1.0/(XAS*MOMG(XALPHAS,XNUS,XBS)) XLBEXS = 1.0/(XCXS-XBS) XLBS = ( XAS*XCCS*MOMG(XALPHAS,XNUS,XBS) )**(-XLBEXS) ! @@ -414,7 +439,8 @@ XLBH = ( XAH*XCCH*MOMG(XALPHAH,XNUH,XBH) )**(-XLBEXH) XLBDAS_MAX = 100000.0 ! ZCONC_MAX = 1.E6 ! Maximal concentration for falling particules set to 1 per cc -XLBDAS_MAX = ( ZCONC_MAX/XCCS )**(1./XCXS) +XLBDAS_MAX = 1.E6 +XLBDAS_MIN = 1000. ! IF (HCLOUD == 'ICE4') THEN ALLOCATE( XRTMIN(7) ) @@ -481,9 +507,20 @@ XEXCSEDI =-0.9324*3.0 WRITE (KLUOUT,FMT=*)' PRISTINE ICE SEDIMENTATION for columns XFSEDI =',XFSEDI ! ! -XEXSEDS = (XBS+XDS-XCXS)/(XBS-XCXS) -XFSEDS = XCS*XAS*XCCS*MOMG(XALPHAS,XNUS,XBS+XDS)* & - (XAS*XCCS*MOMG(XALPHAS,XNUS,XBS))**(-XEXSEDS)*(ZRHO00)**XCEXVT +!IF (LSNOW_T) THEN +!HOUZE/HAIC + !XEXSEDS = -XDS !(2*XBS+XDS) + !XFSEDS = XCS*MOMG(XALPHAS,XNUS,XBS+XDS)/(MOMG(XALPHAS,XNUS,XBS)) & + ! *(ZRHO00)**XCEXVT +!LH_EXTENDED + XEXSEDS = -XDS-XBS + XFSEDS = XCS*MOMG(XALPHAS,XNUS,XBS+XDS)/(MOMG(XALPHAS,XNUS,XBS)) & + *(ZRHO00)**XCEXVT +!ELSE +! XEXSEDS = (XBS+XDS-XCXS)/(XBS-XCXS) +! XFSEDS = XCS*XAS*XCCS*MOMG(XALPHAS,XNUS,XBS+XDS)* & +! (XAS*XCCS*MOMG(XALPHAS,XNUS,XBS))**(-XEXSEDS)*(ZRHO00)**XCEXVT +!END IF ! XEXSEDG = (XBG+XDG-XCXG)/(XBG-XCXG) XFSEDG = XCG*XAG*XCCG*MOMG(XALPHAG,XNUG,XBG+XDG)* & @@ -556,10 +593,10 @@ XSCFAC = (0.63**(1./3.))*SQRT((ZRHO00)**XCEXVT) ! One assumes Sc=0.63 X0DEPI = (4.0*XPI)*XC1I*XF0I*MOMG(XALPHAI,XNUI,1.) X2DEPI = (4.0*XPI)*XC1I*XF2I*XC_I*MOMG(XALPHAI,XNUI,XDI+2.0) ! -X0DEPS = (4.0*XPI)*XCCS*XC1S*XF0S*MOMG(XALPHAS,XNUS,1.) -X1DEPS = (4.0*XPI)*XCCS*XC1S*XF1S*SQRT(XCS)*MOMG(XALPHAS,XNUS,0.5*XDS+1.5) -XEX0DEPS = XCXS-1.0 -XEX1DEPS = XCXS-0.5*(XDS+3.0) +X0DEPS = XNS*(4.0*XPI)*XC1S*XF0S*MOMG(XALPHAS,XNUS,1.) +X1DEPS = XNS*(4.0*XPI)*XC1S*XF1S*SQRT(XCS)*MOMG(XALPHAS,XNUS,0.5*XDS+1.5) +XEX0DEPS = XBS-1.0 +XEX1DEPS = -0.5*(XDS+3.0) ! X0DEPG = (4.0*XPI)*XCCG*XC1G*XF0G*MOMG(XALPHAG,XNUG,1.) X1DEPG = (4.0*XPI)*XCCG*XC1G*XF1G*SQRT(XCG)*MOMG(XALPHAG,XNUG,0.5*XDG+1.5) @@ -599,8 +636,8 @@ END IF ! XCOLIS = 0.25 ! Collection efficiency of I+S XCOLEXIS = 0.05 ! Temperature factor of the I+S collection efficiency -XFIAGGS = (XPI/4.0)*XCOLIS*XCCS*XCS*(ZRHO00**XCEXVT)*MOMG(XALPHAS,XNUS,XDS+2.0) -XEXIAGGS = XCXS-XDS-2.0 +XFIAGGS = XNS*(XPI/4.0)*XCOLIS*XCS*(ZRHO00**XCEXVT)*MOMG(XALPHAS,XNUS,XDS+2.0) +XEXIAGGS = -XDS - 2.0 ! GAMMGEN LH_EXTENDED ! GFLAG = .TRUE. IF (GFLAG) THEN @@ -651,15 +688,15 @@ XEX1EVAR = -1.0-0.5*(XDR+3.0) ! XDCSLIM = 0.007 ! D_cs^lim = 7 mm as suggested by Farley et al. (1989) XCOLCS = 1.0 -XEXCRIMSS= XCXS-XDS-2.0 -XCRIMSS = (XPI/4.0)*XCOLCS*XCCS*XCS*(ZRHO00**XCEXVT)*MOMG(XALPHAS,XNUS,XDS+2.0) +XEXCRIMSS= -XDS-2.0 +XCRIMSS = XNS * (XPI/4.0)*XCOLCS*XCS*(ZRHO00**XCEXVT)*MOMG(XALPHAS,XNUS,XDS+2.0) XEXCRIMSG= XEXCRIMSS XCRIMSG = XCRIMSS -XSRIMCG = XCCS*XAS*MOMG(XALPHAS,XNUS,XBS) -XEXSRIMCG= XCXS-XBS -XSRIMCG2 = XCCS*XAG*MOMG(XALPHAS,XNUS,XBG) +XSRIMCG = XNS*XAS*MOMG(XALPHAS,XNUS,XBS) +XEXSRIMCG = -XBS +XSRIMCG2 = XNS*XAG*MOMG(XALPHAS,XNUS,XBG) XSRIMCG3 = XFRACM90 -XEXSRIMCG2=XCXS-XBG +XEXSRIMCG2=XBS-XBG ! GFLAG = .TRUE. IF (GFLAG) THEN @@ -689,13 +726,13 @@ XRIMINTP2 = 1.0 + XRIMINTP1*LOG( XDCSLIM/(XGAMINC_BOUND_MIN)**(1.0/XALPHAS) ) ! !* 7.2 Constants for the accretion of raindrops onto aggregates ! -XFRACCSS = ((XPI**2)/24.0)*XCCS*XCCR*XRHOLW*(ZRHO00**XCEXVT) +XFRACCSS = XNS*((XPI**2)/24.0)*XCCR*XRHOLW*(ZRHO00**XCEXVT) ! XLBRACCS1 = MOMG(XALPHAS,XNUS,2.)*MOMG(XALPHAR,XNUR,3.) XLBRACCS2 = 2.*MOMG(XALPHAS,XNUS,1.)*MOMG(XALPHAR,XNUR,4.) XLBRACCS3 = MOMG(XALPHAR,XNUR,5.) ! -XFSACCRG = (XPI/4.0)*XAS*XCCS*XCCR*(ZRHO00**XCEXVT) +XFSACCRG = XNS*(XPI/4.0)*XAS*XCCR*(ZRHO00**XCEXVT) ! XLBSACCR1 = MOMG(XALPHAR,XNUR,2.)*MOMG(XALPHAS,XNUS,XBS) XLBSACCR2 = 2.*MOMG(XALPHAR,XNUR,1.)*MOMG(XALPHAS,XNUS,XBS+1.) @@ -742,15 +779,15 @@ IF( (KACCLBDAS/=NACCLBDAS) .OR. (KACCLBDAR/=NACCLBDAR) .OR. (KND/=IND) .OR. & (PACCLBDAS_MIN/=XACCLBDAS_MIN) .OR. (PACCLBDAR_MIN/=XACCLBDAR_MIN) .OR. & (PFDINFTY/=ZFDINFTY) ) THEN CALL RRCOLSS ( IND, XALPHAS, XNUS, XALPHAR, XNUR, & - ZESR, XBR, XCS, XDS, XCR, XDR, & + ZESR, XBR, XCS, XDS, XFVELOS, XCR, XDR, & XACCLBDAS_MAX, XACCLBDAR_MAX, XACCLBDAS_MIN, XACCLBDAR_MIN, & ZFDINFTY, XKER_RACCSS, XAG, XBS, XAS ) CALL RZCOLX ( IND, XALPHAS, XNUS, XALPHAR, XNUR, & - ZESR, XBR, XCS, XDS, XCR, XDR, & + ZESR, XBR, XCS, XDS, XFVELOS, XCR, XDR, 0., & XACCLBDAS_MAX, XACCLBDAR_MAX, XACCLBDAS_MIN, XACCLBDAR_MIN, & ZFDINFTY, XKER_RACCS ) CALL RSCOLRG ( IND, XALPHAS, XNUS, XALPHAR, XNUR, & - ZESR, XBS, XCS, XDS, XCR, XDR, & + ZESR, XBS, XCS, XDS, XFVELOS, XCR, XDR, & XACCLBDAS_MAX, XACCLBDAR_MAX, XACCLBDAS_MIN, XACCLBDAR_MIN, & ZFDINFTY, XKER_SACCRG, XAG, XBS, XAS ) WRITE(UNIT=KLUOUT,FMT='("*****************************************")') @@ -887,7 +924,7 @@ XCOLSG = 0.01 ! Collection efficiency of S+G XCOLEXSG = 0.1 ! Temperature factor of the S+G collection efficiency WRITE (KLUOUT, FMT=*) ' NEW Constants for the aggregate collection by the graupeln' WRITE (KLUOUT, FMT=*) ' XCOLSG, XCOLEXSG = ',XCOLSG,XCOLEXSG -XFSDRYG = (XPI/4.0)*XCOLSG*XCCG*XCCS*XAS*(ZRHO00**XCEXVT) +XFSDRYG = XNS*(XPI/4.0)*XCOLSG*XCCG*XAS*(ZRHO00**XCEXVT) ! XLBSDRYG1 = MOMG(XALPHAG,XNUG,2.)*MOMG(XALPHAS,XNUS,XBS) XLBSDRYG2 = 2.*MOMG(XALPHAG,XNUG,1.)*MOMG(XALPHAS,XNUS,XBS+1.) @@ -950,7 +987,7 @@ IF( (KDRYLBDAG/=NDRYLBDAG) .OR. (KDRYLBDAS/=NDRYLBDAS) .OR. (KND/=IND) .OR. & (PDRYLBDAG_MIN/=XDRYLBDAG_MIN) .OR. (PDRYLBDAS_MIN/=XDRYLBDAS_MIN) .OR. & (PFDINFTY/=ZFDINFTY) ) THEN CALL RZCOLX ( IND, XALPHAG, XNUG, XALPHAS, XNUS, & - ZEGS, XBS, XCG, XDG, XCS, XDS, & + ZEGS, XBS, XCG, XDG, 0., XCS, XDS, XFVELOS, & XDRYLBDAG_MAX, XDRYLBDAS_MAX, XDRYLBDAG_MIN, XDRYLBDAS_MIN, & ZFDINFTY, XKER_SDRYG ) WRITE(UNIT=KLUOUT,FMT='("*****************************************")') @@ -1016,7 +1053,7 @@ IF( (KDRYLBDAG/=NDRYLBDAG) .OR. (KDRYLBDAR/=NDRYLBDAR) .OR. (KND/=IND) .OR. & (PDRYLBDAG_MIN/=XDRYLBDAG_MIN) .OR. (PDRYLBDAR_MIN/=XDRYLBDAR_MIN) .OR. & (PFDINFTY/=ZFDINFTY) ) THEN CALL RZCOLX ( IND, XALPHAG, XNUG, XALPHAR, XNUR, & - ZEGR, XBR, XCG, XDG, XCR, XDR, & + ZEGR, XBR, XCG, XDG, 0., XCR, XDR, 0., & XDRYLBDAG_MAX, XDRYLBDAR_MAX, XDRYLBDAG_MIN, XDRYLBDAR_MIN, & ZFDINFTY, XKER_RDRYG ) WRITE(UNIT=KLUOUT,FMT='("*****************************************")') @@ -1082,7 +1119,8 @@ XFWETH = (XPI/4.0)*XCCH*XCH*(ZRHO00**XCEXVT)*MOMG(XALPHAH,XNUH,XDH+2.0) ! XCOLSH = 0.01 ! Collection efficiency of S+H XCOLEXSH = 0.1 ! Temperature factor of the S+H collection efficiency -XFSWETH = (XPI/4.0)*XCCH*XCCS*XAS*(ZRHO00**XCEXVT) +!XFSWETH = (XPI/4.0)*XCCH*XCCS*XAS*(ZRHO00**XCEXVT) +XFSWETH = XNS*(XPI/4.0)*XCCH*XAS*(ZRHO00**XCEXVT) ! Wurtz ! XLBSWETH1 = MOMG(XALPHAH,XNUH,2.)*MOMG(XALPHAS,XNUS,XBS) XLBSWETH2 = 2.*MOMG(XALPHAH,XNUH,1.)*MOMG(XALPHAS,XNUS,XBS+1.) @@ -1154,7 +1192,7 @@ IF( (KWETLBDAH/=NWETLBDAH) .OR. (KWETLBDAS/=NWETLBDAS) .OR. (KND/=IND) .OR. & (PWETLBDAH_MIN/=XWETLBDAH_MIN) .OR. (PWETLBDAS_MIN/=XWETLBDAS_MIN) .OR. & (PFDINFTY/=ZFDINFTY) ) THEN CALL RZCOLX ( IND, XALPHAH, XNUH, XALPHAS, XNUS, & - ZEHS, XBS, XCH, XDH, XCS, XDS, & + ZEHS, XBS, XCH, XDH, 0., XCS, XDS, XFVELOS, & XWETLBDAH_MAX, XWETLBDAS_MAX, XWETLBDAH_MIN, XWETLBDAS_MIN, & ZFDINFTY, XKER_SWETH ) WRITE(UNIT=KLUOUT,FMT='("*****************************************")') @@ -1220,7 +1258,7 @@ IF( (KWETLBDAH/=NWETLBDAH) .OR. (KWETLBDAG/=NWETLBDAG) .OR. (KND/=IND) .OR. & (PWETLBDAH_MIN/=XWETLBDAH_MIN) .OR. (PWETLBDAG_MIN/=XWETLBDAG_MIN) .OR. & (PFDINFTY/=ZFDINFTY) ) THEN CALL RZCOLX ( IND, XALPHAH, XNUH, XALPHAG, XNUG, & - ZEHG, XBG, XCH, XDH, XCG, XDG, & + ZEHG, XBG, XCH, XDH, 0., XCG, XDG, 0., & XWETLBDAH_MAX, XWETLBDAG_MAX, XWETLBDAH_MIN, XWETLBDAG_MIN, & ZFDINFTY, XKER_GWETH ) WRITE(UNIT=KLUOUT,FMT='("*****************************************")') @@ -1286,7 +1324,7 @@ IF( (KWETLBDAH/=NWETLBDAH) .OR. (KWETLBDAR/=NWETLBDAR) .OR. (KND/=IND) .OR. & (PWETLBDAH_MIN/=XWETLBDAH_MIN) .OR. (PWETLBDAR_MIN/=XWETLBDAR_MIN) .OR. & (PFDINFTY/=ZFDINFTY) ) THEN CALL RZCOLX ( IND, XALPHAH, XNUH, XALPHAR, XNUR, & - ZEHR, XBR, XCH, XDH, XCR, XDR, & + ZEHR, XBR, XCH, XDH, 0., XCR, XDR, 0., & XWETLBDAH_MAX, XWETLBDAR_MAX, XWETLBDAH_MIN, XWETLBDAR_MIN, & ZFDINFTY, XKER_RWETH ) WRITE(UNIT=KLUOUT,FMT='("*****************************************")') diff --git a/src/MNH/ini_rain_ice_elec.f90 b/src/MNH/ini_rain_ice_elec.f90 index 940caeaeefc96dcda0800b7678b8be775815c116..add17924b62d35cfce8de422a822442887e51937 100644 --- a/src/MNH/ini_rain_ice_elec.f90 +++ b/src/MNH/ini_rain_ice_elec.f90 @@ -87,6 +87,7 @@ END MODULE MODI_INI_RAIN_ICE_ELEC !! Modifications: !! C. Barthe 20/11/09 update to version 4.8.1 ! P. Wautelet 26/04/2019: replace non-standard FLOAT function by REAL function +! J. Wurtz 03/2022: New snow characteristics with LSNOW_T ! !------------------------------------------------------------------------------- ! @@ -271,11 +272,25 @@ XF2I = 0.14 ! XAS = 0.02 XBS = 1.9 -XCS = 5.1 +IF (LSNOW_T) THEN +!Cas Gamma generalisee +XCS = 11.52 +XDS = 0.39 +XFVELOS =0.097 +!Cas MP +!XCS = 13.2 +!XDS = 0.423 +!XFVELOS = 25.14 +ELSE +XCS = 5. XDS = 0.27 +XFVELOS = 0. +END IF ! +IF (.NOT. LSNOW_T) THEN XCCS = 5.0 XCXS = 1.0 +END IF ! XF0S = 0.86 XF1S = 0.28 @@ -342,8 +357,17 @@ XNUR = 1.0 ! Exponential law XALPHAI = 3.0 ! Gamma law for the ice crystal volume XNUI = 3.0 ! Gamma law with little dispersion ! -XALPHAS = 1.0 ! Exponential law -XNUS = 1.0 ! Exponential law +IF (LSNOW_T) THEN +!Cas GAMMAGEN + XALPHAS = .214 ! Generalized gamma law + XNUS = 43.7 ! Generalized gamma law + XTRANS_MP_GAMMAS = SQRT( ( GAMMA(XNUS + 2./XALPHAS)*GAMMA(XNUS + 4./XALPHAS) ) / & + ( 8.* GAMMA(XNUS + 1./XALPHAS)*GAMMA(XNUS + 3./XALPHAS) ) ) +ELSE + XALPHAS = 1.0 ! Exponential law + XNUS = 1.0 ! Exponential law + XTRANS_MP_GAMMAS = 1. +END IF ! XALPHAG = 1.0 ! Exponential law XNUG = 1.0 ! Exponential law @@ -365,8 +389,9 @@ XLBR = (XAR * XCCR * MOMG(XALPHAR,XNUR,XBR))**(-XLBEXR) XLBEXI = 1.0 / (-XBI) XLBI = (XAI * MOMG(XALPHAI,XNUI,XBI))**(-XLBEXI) ! -XLBEXS = 1.0 / (XCXS - XBS) -XLBS = (XAS * XCCS * MOMG(XALPHAS,XNUS,XBS))**(-XLBEXS) +XNS = 1.0/(XAS*MOMG(XALPHAS,XNUS,XBS)) +XLBEXS = 1.0/(XCXS-XBS) +XLBS = ( XAS*XCCS*MOMG(XALPHAS,XNUS,XBS) )**(-XLBEXS) ! XLBEXG = 1.0 / (XCXG - XBG) XLBG = (XAG * XCCG * MOMG(XALPHAG,XNUG,XBG))**(-XLBEXG) @@ -381,7 +406,8 @@ XLBDAS_MAX = 100000.0 XLBDAG_MAX = 100000.0 ! ZCONC_MAX = 1.E6 ! Maximal concentration for falling particules set to 1 per cc -XLBDAS_MAX = (ZCONC_MAX / XCCS)**(1./XCXS) +XLBDAS_MAX = 1.E6 +XLBDAS_MIN = 1000. ! IF (HCLOUD == 'ICE4') THEN ALLOCATE( XRTMIN(7) ) @@ -441,17 +467,29 @@ XFSEDI = 3.89745E11 * MOMG(XALPHAI,XNUI,3.285) * & XEXCSEDI =-0.9324 * 3.0 WRITE (KLUOUT,FMT=*)' PRISTINE ICE SEDIMENTATION for columns XFSEDI =',XFSEDI ! -XEXSEDS = (XBS + XDS - XCXS) / (XBS - XCXS) -XFSEDS = XCS * XAS * XCCS * MOMG(XALPHAS,XNUS,XBS+XDS) * & - (XAS * XCCS * MOMG(XALPHAS,XNUS,XBS))**(-XEXSEDS) * (ZRHO00)**XCEXVT ! -XEXSEDG = (XBG + XDG - XCXG) / (XBG - XCXG) -XFSEDG = XCG * XAG * XCCG * MOMG(XALPHAG,XNUG,XBG+XDG) * & - (XAG * XCCG * MOMG(XALPHAG,XNUG,XBG))**(-XEXSEDG) * (ZRHO00)**XCEXVT +IF (LSNOW_T) THEN +!HOUZE/HAIC + !XEXSEDS = -XDS !(2*XBS+XDS) + !XFSEDS = XCS*MOMG(XALPHAS,XNUS,XBS+XDS)/(MOMG(XALPHAS,XNUS,XBS)) & + ! *(ZRHO00)**XCEXVT +!LH_EXTENDED + XEXSEDS = -XDS-XBS + XFSEDS = XCS*MOMG(XALPHAS,XNUS,XBS+XDS)/(MOMG(XALPHAS,XNUS,XBS)) & + *(ZRHO00)**XCEXVT +ELSE + XEXSEDS = (XBS+XDS-XCXS)/(XBS-XCXS) + XFSEDS = XCS*XAS*XCCS*MOMG(XALPHAS,XNUS,XBS+XDS)* & + (XAS*XCCS*MOMG(XALPHAS,XNUS,XBS))**(-XEXSEDS)*(ZRHO00)**XCEXVT +END IF ! -XEXSEDH = (XBH + XDH - XCXH) / (XBH - XCXH) -XFSEDH = XCH * XAH * XCCH * MOMG(XALPHAH,XNUH,XBH+XDH) * & - (XAH * XCCH * MOMG(XALPHAH,XNUH,XBH))**(-XEXSEDH) * (ZRHO00)**XCEXVT +XEXSEDG = (XBG+XDG-XCXG)/(XBG-XCXG) +XFSEDG = XCG*XAG*XCCG*MOMG(XALPHAG,XNUG,XBG+XDG)* & + (XAG*XCCG*MOMG(XALPHAG,XNUG,XBG))**(-XEXSEDG)*(ZRHO00)**XCEXVT +! +XEXSEDH = (XBH+XDH-XCXH)/(XBH-XCXH) +XFSEDH = XCH*XAH*XCCH*MOMG(XALPHAH,XNUH,XBH+XDH)* & + (XAH*XCCH*MOMG(XALPHAH,XNUH,XBH))**(-XEXSEDH)*(ZRHO00)**XCEXVT ! ! !------------------------------------------------------------------------------- @@ -516,10 +554,10 @@ XSCFAC = (0.63**(1./3.)) * SQRT((ZRHO00)**XCEXVT) ! One assumes Sc=0.63 X0DEPI = (4.0 * XPI) * XC1I * XF0I * MOMG(XALPHAI,XNUI,1.) X2DEPI = (4.0 * XPI) * XC1I * XF2I * XC_I * MOMG(XALPHAI,XNUI,XDI+2.0) ! -X0DEPS = (4.0 * XPI) * XCCS * XC1S * XF0S * MOMG(XALPHAS,XNUS,1.) -X1DEPS = (4.0 * XPI) * XCCS * XC1S * XF1S * SQRT(XCS) * MOMG(XALPHAS,XNUS,0.5*XDS+1.5) -XEX0DEPS = XCXS - 1.0 -XEX1DEPS = XCXS - 0.5 * (XDS + 3.0) +X0DEPS = XNS*(4.0*XPI)*XC1S*XF0S*MOMG(XALPHAS,XNUS,1.) +X1DEPS = XNS*(4.0*XPI)*XC1S*XF1S*SQRT(XCS)*MOMG(XALPHAS,XNUS,0.5*XDS+1.5) +XEX0DEPS = XBS-1.0 +XEX1DEPS = -0.5*(XDS+3.0) ! X0DEPG = (4.0 * XPI) * XCCG * XC1G * XF0G * MOMG(XALPHAG,XNUG,1.) X1DEPG = (4.0 * XPI) * XCCG * XC1G * XF1G * SQRT(XCG) * MOMG(XALPHAG,XNUG,0.5*XDG+1.5) @@ -552,9 +590,8 @@ END IF ! XCOLIS = 0.25 ! Collection efficiency of I+S XCOLEXIS = 0.05 ! Temperature factor of the I+S collection efficiency -XFIAGGS = (XPI / 4.0) * XCOLIS * XCCS * XCS * (ZRHO00**XCEXVT) * & - MOMG(XALPHAS,XNUS,XDS+2.0) -XEXIAGGS = XCXS - XDS - 2.0 +XFIAGGS = XNS*(XPI/4.0)*XCOLIS*XCS*(ZRHO00**XCEXVT)*MOMG(XALPHAS,XNUS,XDS+2.0) +XEXIAGGS = -XDS - 2.0 ! GAMMGEN LH_EXTENDED ! GFLAG = .TRUE. IF (GFLAG) THEN @@ -604,12 +641,15 @@ XEX1EVAR = -1.0 - 0.5 * (XDR + 3.0) ! XDCSLIM = 0.007 ! D_cs^lim = 7 mm as suggested by Farley et al. (1989) XCOLCS = 1.0 -XEXCRIMSS= XCXS - XDS - 2.0 -XCRIMSS = (XPI / 4.0) * XCOLCS * XCCS * XCS * (ZRHO00**XCEXVT) * MOMG(XALPHAS,XNUS,XDS+2.0) +XEXCRIMSS= -XDS-2.0 +XCRIMSS = XNS * (XPI/4.0)*XCOLCS*XCS*(ZRHO00**XCEXVT)*MOMG(XALPHAS,XNUS,XDS+2.0) XEXCRIMSG= XEXCRIMSS XCRIMSG = XCRIMSS -XSRIMCG = XCCS * XAS * MOMG(XALPHAS,XNUS,XBS) -XEXSRIMCG= XCXS - XBS +XSRIMCG = XNS*XAS*MOMG(XALPHAS,XNUS,XBS) +XEXSRIMCG = -XBS +XSRIMCG2 = XNS*XAG*MOMG(XALPHAS,XNUS,XBG) +XSRIMCG3 = XFRACM90 +XEXSRIMCG2=XBS-XBG ! GFLAG = .TRUE. IF (GFLAG) THEN @@ -640,13 +680,13 @@ XRIMINTP2 = 1.0 + XRIMINTP1 * LOG(XDCSLIM/(XGAMINC_BOUND_MIN)**(1.0/XALPHAS)) ! !* 7.2 Constants for the accretion of raindrops onto aggregates ! -XFRACCSS = ((XPI**2) / 24.0) * XCCS * XCCR * XRHOLW * (ZRHO00**XCEXVT) +XFRACCSS = XNS*((XPI**2)/24.0)*XCCR*XRHOLW*(ZRHO00**XCEXVT) ! XLBRACCS1 = MOMG(XALPHAS,XNUS,2.) * MOMG(XALPHAR,XNUR,3.) XLBRACCS2 = 2. * MOMG(XALPHAS,XNUS,1.) * MOMG(XALPHAR,XNUR,4.) XLBRACCS3 = MOMG(XALPHAR,XNUR,5.) ! -XFSACCRG = (XPI / 4.0) * XAS * XCCS * XCCR * (ZRHO00**XCEXVT) +XFSACCRG = XNS*(XPI/4.0)*XAS*XCCR*(ZRHO00**XCEXVT) ! XLBSACCR1 = MOMG(XALPHAR,XNUR,2.) * MOMG(XALPHAS,XNUS,XBS) XLBSACCR2 = 2. * MOMG(XALPHAR,XNUR,1.) * MOMG(XALPHAS,XNUS,XBS+1.) @@ -694,15 +734,15 @@ IF( (KACCLBDAS/=NACCLBDAS) .OR. (KACCLBDAR/=NACCLBDAR) .OR. (KND/=IND) .OR. & (PACCLBDAS_MIN/=XACCLBDAS_MIN) .OR. (PACCLBDAR_MIN/=XACCLBDAR_MIN) .OR. & (PFDINFTY/=ZFDINFTY) ) THEN CALL RRCOLSS ( IND, XALPHAS, XNUS, XALPHAR, XNUR, & - ZESR, XBR, XCS, XDS, XCR, XDR, & + ZESR, XBR, XCS, XDS, XFVELOS, XCR, XDR, & XACCLBDAS_MAX, XACCLBDAR_MAX, XACCLBDAS_MIN, XACCLBDAR_MIN, & ZFDINFTY, XKER_RACCSS, XAG, XBS, XAS ) CALL RZCOLX ( IND, XALPHAS, XNUS, XALPHAR, XNUR, & - ZESR, XBR, XCS, XDS, XCR, XDR, & + ZESR, XBR, XCS, XDS, XFVELOS, XCR, XDR, 0., & XACCLBDAS_MAX, XACCLBDAR_MAX, XACCLBDAS_MIN, XACCLBDAR_MIN, & ZFDINFTY, XKER_RACCS ) CALL RSCOLRG ( IND, XALPHAS, XNUS, XALPHAR, XNUR, & - ZESR, XBS, XCS, XDS, XCR, XDR, & + ZESR, XBS, XCS, XDS, XFVELOS, XCR, XDR, & XACCLBDAS_MAX, XACCLBDAR_MAX, XACCLBDAS_MIN, XACCLBDAR_MIN, & ZFDINFTY, XKER_SACCRG, XAG, XBS, XAS ) WRITE(UNIT=KLUOUT,FMT='("*****************************************")') @@ -820,9 +860,9 @@ XCOLIG = 0.01 ! Collection efficiency of I+G XCOLEXIG = 0.1 ! Temperature factor of the I+G collection efficiency WRITE (KLUOUT, FMT=*) ' NEW Constants for the cloud ice collection by the graupeln' WRITE (KLUOUT, FMT=*) ' XCOLIG, XCOLEXIG = ',XCOLIG,XCOLEXIG -! -XFIDRYG = (XPI / 4.0) * XCOLIG * XCCG * XCG * (ZRHO00**XCEXVT) * & - MOMG(XALPHAG,XNUG,XDG+2.0) +XFIDRYG = (XPI/4.0)*XCOLIG*XCCG*XCG*(ZRHO00**XCEXVT)*MOMG(XALPHAG,XNUG,XDG+2.0) +XEXFIDRYG=(XCXG-XDG-2.)/(XCXG-XBG) +XFIDRYG2=XFIDRYG/XCOLIG*(XAG*XCCG*MOMG(XALPHAG,XNUG,XBG))**(-XEXFIDRYG) ! GFLAG = .TRUE. IF (GFLAG) THEN @@ -839,8 +879,7 @@ XCOLSG = 0.01 ! Collection efficiency of S+G XCOLEXSG = 0.1 ! Temperature factor of the S+G collection efficiency WRITE (KLUOUT, FMT=*) ' NEW Constants for the aggregate collection by the graupeln' WRITE (KLUOUT, FMT=*) ' XCOLSG, XCOLEXSG = ',XCOLSG,XCOLEXSG -! -XFSDRYG = (XPI / 4.0) * XCOLSG * XCCG * XCCS * XAS * (ZRHO00**XCEXVT) +XFSDRYG = XNS*(XPI/4.0)*XCOLSG*XCCG*XAS*(ZRHO00**XCEXVT) ! XLBSDRYG1 = MOMG(XALPHAG,XNUG,2.) * MOMG(XALPHAS,XNUS,XBS) XLBSDRYG2 = 2. * MOMG(XALPHAG,XNUG,1.) * MOMG(XALPHAS,XNUS,XBS+1.) @@ -905,7 +944,7 @@ IF( (KDRYLBDAG/=NDRYLBDAG) .OR. (KDRYLBDAS/=NDRYLBDAS) .OR. (KND/=IND) .OR. & (PDRYLBDAG_MIN/=XDRYLBDAG_MIN) .OR. (PDRYLBDAS_MIN/=XDRYLBDAS_MIN) .OR. & (PFDINFTY/=ZFDINFTY) ) THEN CALL RZCOLX ( IND, XALPHAG, XNUG, XALPHAS, XNUS, & - ZEGS, XBS, XCG, XDG, XCS, XDS, & + ZEGS, XBS, XCG, XDG,0., XCS, XDS, XFVELOS, & XDRYLBDAG_MAX, XDRYLBDAS_MAX, XDRYLBDAG_MIN, XDRYLBDAS_MIN, & ZFDINFTY, XKER_SDRYG ) WRITE(UNIT=KLUOUT,FMT='("*****************************************")') @@ -971,7 +1010,7 @@ IF( (KDRYLBDAG/=NDRYLBDAG) .OR. (KDRYLBDAR/=NDRYLBDAR) .OR. (KND/=IND) .OR. & (PDRYLBDAG_MIN/=XDRYLBDAG_MIN) .OR. (PDRYLBDAR_MIN/=XDRYLBDAR_MIN) .OR. & (PFDINFTY/=ZFDINFTY) ) THEN CALL RZCOLX ( IND, XALPHAG, XNUG, XALPHAR, XNUR, & - ZEGR, XBR, XCG, XDG, XCR, XDR, & + ZEGR, XBR, XCG, XDG, 0., XCR, XDR, 0., & XDRYLBDAG_MAX, XDRYLBDAR_MAX, XDRYLBDAG_MIN, XDRYLBDAR_MIN, & ZFDINFTY, XKER_RDRYG ) WRITE(UNIT=KLUOUT,FMT='("*****************************************")') @@ -1033,7 +1072,10 @@ XFWETH = (XPI / 4.0) * XCCH * XCH * (ZRHO00**XCEXVT) * MOMG(XALPHAH,XNUH,XDH+2.0 ! !* 9.2.2 Constants for the aggregate collection by the hailstones ! -XFSWETH = (XPI/4.0) * XCCH * XCCS * XAS * (ZRHO00**XCEXVT) +XCOLSH = 0.01 ! Collection efficiency of S+H +XCOLEXSH = 0.1 ! Temperature factor of the S+H collection efficiency +!XFSWETH = (XPI/4.0)*XCCH*XCCS*XAS*(ZRHO00**XCEXVT) +XFSWETH = XNS*(XPI/4.0)*XCCH*XAS*(ZRHO00**XCEXVT) ! Wurtz ! XLBSWETH1 = MOMG(XALPHAH,XNUH,2.) * MOMG(XALPHAS,XNUS,XBS) XLBSWETH2 = 2. * MOMG(XALPHAH,XNUH,1.) * MOMG(XALPHAS,XNUS,XBS+1.) @@ -1089,7 +1131,7 @@ IF( (KWETLBDAH/=NWETLBDAH) .OR. (KWETLBDAS/=NWETLBDAS) .OR. (KND/=IND) .OR. & (PWETLBDAH_MIN/=XWETLBDAH_MIN) .OR. (PWETLBDAS_MIN/=XWETLBDAS_MIN) .OR. & (PFDINFTY/=ZFDINFTY) ) THEN CALL RZCOLX ( IND, XALPHAH, XNUH, XALPHAS, XNUS, & - ZEHS, XBS, XCH, XDH, XCS, XDS, & + ZEHS, XBS, XCH, XDH,0., XCS, XDS, XFVELOS, & XWETLBDAH_MAX, XWETLBDAS_MAX, XWETLBDAH_MIN, XWETLBDAS_MIN, & ZFDINFTY, XKER_SWETH ) WRITE(UNIT=KLUOUT,FMT='("*****************************************")') @@ -1155,7 +1197,7 @@ IF( (KWETLBDAH/=NWETLBDAH) .OR. (KWETLBDAG/=NWETLBDAG) .OR. (KND/=IND) .OR. & (PWETLBDAH_MIN/=XWETLBDAH_MIN) .OR. (PWETLBDAG_MIN/=XWETLBDAG_MIN) .OR. & (PFDINFTY/=ZFDINFTY) ) THEN CALL RZCOLX ( IND, XALPHAH, XNUH, XALPHAG, XNUG, & - ZEHG, XBG, XCH, XDH, XCG, XDG, & + ZEHG, XBG, XCH, XDH, 0., XCG, XDG, 0., & XWETLBDAH_MAX, XWETLBDAG_MAX, XWETLBDAH_MIN, XWETLBDAG_MIN, & ZFDINFTY, XKER_GWETH ) WRITE(UNIT=KLUOUT,FMT='("*****************************************")') diff --git a/src/MNH/init_aerosol_concentration.f90 b/src/MNH/init_aerosol_concentration.f90 index e86998c4b18e3a4f712a57c016ea1cbb7e9c14d0..32494739c32a42c280773d7510b518e518d2089b 100644 --- a/src/MNH/init_aerosol_concentration.f90 +++ b/src/MNH/init_aerosol_concentration.f90 @@ -54,7 +54,7 @@ END MODULE MODI_INIT_AEROSOL_CONCENTRATION USE MODD_NSV USE MODD_PARAM_n, ONLY : CCLOUD USE MODD_PARAM_LIMA, ONLY : LWARM, LACTI, NMOD_CCN, LSCAV, LAERO_MASS, & - XCCN_CONC, LCCN_HOM, & + XCCN_CONC, LCCN_HOM, & LCOLD, LNUCL, NMOD_IFN, LMEYERS, & XIFN_CONC, LIFN_HOM USE MODD_PARAMETERS, ONLY : JPVEXT @@ -79,7 +79,7 @@ INTEGER :: IKB, IKE ! ! IF ( LWARM .AND. LACTI ) THEN - DO JSV = NSV_LIMA_CCN_FREE, NSV_LIMA_CCN_ACTI+NMOD_CCN-1 + DO JSV = NSV_LIMA_CCN_FREE, NSV_LIMA_CCN_ACTI+NMOD_CCN-1 PSVT(:,:,:,JSV) = 0.0 ENDDO IKB = 1+JPVEXT @@ -112,7 +112,7 @@ END IF ! LWARM AND LACTI ! Initialisation des concentrations en IFN ! IF ( LCOLD .AND. LNUCL .AND. (.NOT. LMEYERS) ) THEN - DO JSV = NSV_LIMA_IFN_FREE, NSV_LIMA_IFN_NUCL+NMOD_IFN-1 + DO JSV = NSV_LIMA_IFN_FREE, NSV_LIMA_IFN_NUCL+NMOD_IFN-1 PSVT(:,:,:,JSV) = 0.0 ENDDO IKB = 1+JPVEXT @@ -127,7 +127,7 @@ IF ( LCOLD .AND. LNUCL .AND. (.NOT. LMEYERS) ) THEN ELSE ! concentration décroissante selon z DO JSV = 1, NMOD_IFN - WHERE (PZZ(:,:,:) .LE. 1000.) + WHERE (PZZ(:,:,:) .LE. 1000.) PSVT(:,:,:,NSV_LIMA_IFN_FREE+JSV-1) = XIFN_CONC(JSV)*1.0E3 / PRHODREF(:,:,:) ELSEWHERE (PZZ(:,:,:) .LE. 10000.) PSVT(:,:,:,NSV_LIMA_IFN_FREE+JSV-1) = XIFN_CONC(JSV)*1.0E3 & diff --git a/src/MNH/init_salt.f90 b/src/MNH/init_salt.f90 index 8576133e95103e1c696a7ff7482cb590ddfdfa4a..ab14998b35e89dc56ce1e4b224b74877ce471401 100644 --- a/src/MNH/init_salt.f90 +++ b/src/MNH/init_salt.f90 @@ -24,26 +24,28 @@ !! AUTHOR !! ------ !! Marine Claeys (CNRM) -!! -!! MODIFICATIONS -!! ------------- -!! -!! Bielli S. 02/2019 Sea salt : significant sea wave height influences salt emission; 5 salt modes -! + + USE MODD_SALT ! IMPLICIT NONE -IF(NMODE_SLT == 5) THEN - -!JPSALTORDER = (/5, 4, 3, 2, 1 /) +! Default NMODE_SLT == 5 !Initial dry number median radius (um) from Ova et al., 2014 -XINIRADIUS_SLT= (/0.009, 0.021, 0.045, 0.115, 0.415/) +XINIRADIUS_SLT= (/0.009, 0.021, 0.045, 0.115, 0.415,0.0,0.0,0.0/) !Initial, standard deviation from Ova et al., 2014 -XINISIG_SLT = (/ 1.37, 1.5, 1.42, 1.53, 1.85 /) +XINISIG_SLT = (/ 1.37, 1.5, 1.42, 1.53, 1.85, 0.0, 0.0, 0.0 /) !Minimum allowed number concentration for any mode (#/m3) -XN0MIN_SLT = (/1. , 1., 1., 1., 1. /) +XN0MIN_SLT = (/1.e1 , 1.e1, 1.e1, 1., 1.e-4, 0.0, 0.0, 0.0 /) +IF ( NMODE_SLT == 8) THEN +!JPSALTORDER = (/5, 4, 3, 2, 1 /) +!Initial dry number median radius (um) from Ova et al., 2014 + MB21 (Bruch et al., 2022). +XINIRADIUS_SLT= (/0.009, 0.021, 0.045, 0.115, 0.415,2.5, 7.0, 25.0/) +!Initial, standard deviation from Ova et al., 2014 +XINISIG_SLT = (/ 1.37, 1.5, 1.42, 1.53, 1.85,1.7, 1.8, 2.1 /) +!Minimum allowed number concentration for any mode (#/m3) +XN0MIN_SLT = (/1.e1 , 1.e1, 1.e1, 1., 1.e-4,1.e-20 , 1.e-20, 1.e-20 /) ELSE IF ( NMODE_SLT == 3) THEN @@ -51,23 +53,15 @@ ELSE IF ( NMODE_SLT == 3) THEN !This means that if a user choses 1 mode it will have characteristics of mode 2 !2 modes will be mode 2 & 3, whereas 3 modes will modes 1, 2 and 3 !JPSALTORDER = (/3, 2, 1, 4, 5/) -! - !Initial dry number median radius (um) from Vignati et al., 2001 - ! XINIRADIUS_SLT= (/0.2, 2., 12./) - !Initial, standard deviation from Vignati et al., 2001 - ! XINISIG_SLT = (/1.9, 2., 3./) - !Minimum allowed number concentration for any mode (#/m3) - ! XN0MIN_SLT = (/1.e1 , 1. , 1.e-4 /) - - -!Pour 3 modes Schultz +! !Initial dry number median radius (um) from Schultz et al., 2004 - XINIRADIUS_SLT= 0.5*(/0.28, 2.25, 15.32, 0., 0. /) + XINIRADIUS_SLT= 0.5*(/0.28, 2.25, 15.32, 0., 0.,0.,0.,0. /) !Initial, standard deviation from Schultz et al., 2004 - XINISIG_SLT = (/1.9, 2., 2., 0., 0./) + XINISIG_SLT = (/1.9, 2., 2., 0., 0.,0.,0.,0./) !Minimum allowed number concentration for any mode (#/m3) - XN0MIN_SLT = (/1.e1 , 1. , 1.e-4, 0., 0. /) + XN0MIN_SLT = (/1.e1 , 1. , 1.e-4, 0., 0.,0.,0.,0. /) ! + END IF diff --git a/src/MNH/lesn.f90 b/src/MNH/lesn.f90 index 129929246495bee84d57526e482a17fc9b4e52b7..c23dc91b3ec93bfe41659dd8e9a69c8ee54cbd53 100644 --- a/src/MNH/lesn.f90 +++ b/src/MNH/lesn.f90 @@ -107,6 +107,7 @@ REAL, DIMENSION(:,:,:), ALLOCATABLE :: ZEW REAL, DIMENSION(:,:,:), ALLOCATABLE :: ZINDCLD !indice cloud si rc>0 REAL, DIMENSION(:,:,:), ALLOCATABLE :: ZINDCLD2 !indice cloud rc>1E-5 REAL, DIMENSION(:,:,:), ALLOCATABLE :: ZCLDFR_LES! CLDFR on LES vertical grid +REAL, DIMENSION(:,:,:), ALLOCATABLE :: ZICEFR_LES! ICEFR on LES vertical grid REAL, DIMENSION(:,:,:), ALLOCATABLE :: ZRAINFR_LES! RAINFR on LES vertical grid REAL, DIMENSION(:,:,:), ALLOCATABLE :: ZMASSF ! massflux=rho*w REAL, DIMENSION(:,:,:), ALLOCATABLE :: ZREHU ! relative humidity @@ -345,9 +346,11 @@ END IF IF (LUSERI) THEN ALLOCATE(ZRI_LES (IIU,IJU,NLES_K)) ALLOCATE(ZIWP_LES(IIU,IJU)) + ALLOCATE(ZICEFR_LES(IIU,IJU,NLES_K)) ELSE ALLOCATE(ZRI_LES (0,0,0)) ALLOCATE(ZIWP_LES(0,0)) + ALLOCATE(ZICEFR_LES(0,0,0)) END IF IF (LUSERS) THEN ALLOCATE(ZRS_LES (IIU,IJU,NLES_K)) @@ -598,6 +601,7 @@ IF (LUSERI) THEN END DO CALL LES_MEAN_ll ( ZIWP_LES, LLES_CURRENT_CART_MASK(:,:,1), & XLES_IWP(NLES_CURRENT_TCOUNT) ) + CALL LES_VER_INT( XICEFR(:,:,:) ,ZICEFR_LES ) END IF IF (LUSERS) THEN IRR = IRR + 1 @@ -812,6 +816,8 @@ END IF IF (LUSERI) & CALL LES_MEAN_ll ( ZRI_LES, LLES_CURRENT_CART_MASK, & XLES_MEAN_Ri(:,NLES_CURRENT_TCOUNT,1) ) + CALL LES_MEAN_ll ( ZICEFR_LES, LLES_CURRENT_CART_MASK, & + XLES_MEAN_If(:,NLES_CURRENT_TCOUNT,1) ) ! IF (LUSERS) & CALL LES_MEAN_ll ( ZRS_LES, LLES_CURRENT_CART_MASK, & @@ -1046,6 +1052,7 @@ DEALLOCATE(ZINDCLD2 ) DEALLOCATE(ZINDCLD2D ) DEALLOCATE(ZINDCLD2D2) DEALLOCATE(ZCLDFR_LES) +DEALLOCATE(ZICEFR_LES) DEALLOCATE(ZRAINFR_LES) DEALLOCATE(ZMASSF ) DEALLOCATE(ZTEMP ) diff --git a/src/MNH/lidar.f90 b/src/MNH/lidar.f90 index 4a3d987e8873486c7ce58e984cf78dc6b21a49da..be6756c48b54a2549553ce70e6dc6b068d66b30a 100644 --- a/src/MNH/lidar.f90 +++ b/src/MNH/lidar.f90 @@ -8,7 +8,7 @@ ! ################# ! INTERFACE - SUBROUTINE LIDAR(HCLOUD,HVIEW,PALT,PWVL,PZZ,PRHO,PCLDFR,PRT, & + SUBROUTINE LIDAR(HCLOUD,HVIEW,PALT,PWVL,PZZ,PRHO,PT,PCLDFR,PRT, & PLIDAROUT,PLIPAROUT,PCT,PDSTC,PDSTD,PDSTS) ! CHARACTER(LEN=*), INTENT(IN) :: HCLOUD ! Name of the cloud scheme @@ -17,6 +17,7 @@ REAL, INTENT(IN) :: PALT ! Altitude of the lidar source REAL, INTENT(IN) :: PWVL ! Wavelength of the lidar source REAL, DIMENSION(:,:,:), INTENT(IN) :: PZZ ! Altitude REAL, DIMENSION(:,:,:), INTENT(IN) :: PRHO ! Air density +REAL, DIMENSION(:,:,:), INTENT(IN) :: PT ! Air temperature (C) REAL, DIMENSION(:,:,:), INTENT(IN) :: PCLDFR ! Cloud fraction REAL, DIMENSION(:,:,:,:), INTENT(IN) :: PRT ! Moist variables at t REAL, DIMENSION(:,:,:), INTENT(OUT) :: PLIDAROUT ! Lidar output @@ -36,7 +37,7 @@ END INTERFACE ! END MODULE MODI_LIDAR ! ######################################################### - SUBROUTINE LIDAR(HCLOUD,HVIEW,PALT,PWVL,PZZ,PRHO,PCLDFR,PRT, & + SUBROUTINE LIDAR(HCLOUD,HVIEW,PALT,PWVL,PZZ,PRHO,PT,PCLDFR,PRT, & PLIDAROUT,PLIPAROUT,PCT,PDSTC,PDSTD,PDSTS) ! ######################################################### ! @@ -98,8 +99,9 @@ USE MODD_RAIN_C2R2_DESCR, ONLY : XLBEXC, XLBEXR, & XRTMIN, XCTMIN USE MODD_PARAM_C2R2, ONLY : YALPHAC=>XALPHAC,YNUC=>XNUC, & YALPHAR=>XALPHAR,YNUR=>XNUR +USE MODD_PARAM_ICE, ONLY: WSNOW_T=>LSNOW_T USE MODD_RAIN_ICE_DESCR, ONLY : XCCR, WLBEXR=>XLBEXR, XLBR, & - XCCS, XCXS, XLBEXS, XLBS, & + XCCS, XCXS, XLBEXS, XLBS, XNS, & XCCG, XCXG, XLBEXG, XLBG, & XCCH, XCXH, XLBEXH, XLBH, & WRTMIN=>XRTMIN @@ -109,9 +111,11 @@ USE MODD_ICE_C1R3_DESCR, ONLY : XLBEXI, & USE MODD_PARAM_LIMA, ONLY : URTMIN=>XRTMIN, UCTMIN=>XCTMIN, & UALPHAC=>XALPHAC,UNUC=>XNUC, & UALPHAR=>XALPHAR,UNUR=>XNUR, & - UALPHAI=>XALPHAI,UNUI=>XNUI + UALPHAI=>XALPHAI,UNUI=>XNUI, & + USNOW_T=>LSNOW_T USE MODD_PARAM_LIMA_COLD, ONLY : UCCS=>XCCS, UCXS=>XCXS, ULBEXS=>XLBEXS, & - ULBS=>XLBS + ULBS=>XLBS, UNS=>XNS, & + XLBDAS_MAX,XLBDAS_MIN, UBS=>XBS USE MODD_PARAM_LIMA_MIXED,ONLY : UCCG=>XCCG, UCXG=>XCXG, ULBEXG=>XLBEXG, & ULBG=>XLBG @@ -130,6 +134,7 @@ REAL, INTENT(IN) :: PALT ! Altitude of the lidar source REAL, INTENT(IN) :: PWVL ! Wavelength of the lidar source REAL, DIMENSION(:,:,:), INTENT(IN) :: PZZ ! Altitude REAL, DIMENSION(:,:,:), INTENT(IN) :: PRHO ! Air density +REAL, DIMENSION(:,:,:), INTENT(IN) :: PT ! Air temperature (C) REAL, DIMENSION(:,:,:), INTENT(IN) :: PCLDFR ! Cloud fraction REAL, DIMENSION(:,:,:,:), INTENT(IN) :: PRT ! Moist variables at t REAL, DIMENSION(:,:,:), INTENT(OUT) :: PLIDAROUT ! Lidar output @@ -215,7 +220,7 @@ REAL :: ZLBEXR ! INTEGER :: JL REAL :: ZALPHAC, ZNUC, ZALPHAR, ZNUR, ZALPHAI, ZNUI -REAL :: ZCCS, ZCXS, ZLBEXS, ZLBS +REAL :: ZCCS, ZCXS, ZLBEXS, ZLBS, ZNS REAL :: ZCCG, ZCXG, ZLBEXG, ZLBG ! ! ----------------------------------------------------------------------------- @@ -268,6 +273,7 @@ SELECT CASE ( HCLOUD ) ZCXS = XCXS ZLBEXS = XLBEXS ZLBS = XLBS + ZNS = XNS ZCCG = XCCG ZCXG = XCXG ZLBEXG = XLBEXG @@ -310,6 +316,7 @@ SELECT CASE ( HCLOUD ) ZCXS = UCXS ZLBEXS = ULBEXS ZLBS = ULBS + ZNS = UNS ZCCG = UCCG ZCXG = UCXG ZLBEXG = ULBEXG @@ -523,9 +530,19 @@ SELECT CASE ( HCLOUD ) ! YDSD = 'MONOD' ZIWC = PRHO(JI,JJ,JK)*PRT(JI,JJ,JK,5) - ZLBDAS = ZLBS*(ZIWC)**ZLBEXS + IF ( (HCLOUD=='LIMA' .AND. USNOW_T) .OR. & + (HCLOUD=='ICE3' .AND. WSNOW_T) ) THEN + IF (PT(JI,JJ,JK)>-10.) THEN + ZLBDAS = MAX(MIN(XLBDAS_MAX, 10**(14.554-0.0423*(PT(JI,JJ,JK)+273.15))),XLBDAS_MIN) + ELSE + ZLBDAS = MAX(MIN(XLBDAS_MAX, 10**(6.226-0.0106*(PT(JI,JJ,JK)+273.15))),XLBDAS_MIN) + END IF + ZCONC=ZNS*ZIWC*ZLBDAS**UBS + ELSE + ZLBDAS = ZLBS*(ZIWC)**ZLBEXS + ZCONC = ZCCS*(ZLBDAS)**ZCXS + END IF IF (ZLBDAS .GT. 0) THEN - ZCONC = ZCCS*(ZLBDAS)**ZCXS ZRADIUS = 0.5*(3.0/ZLBDAS) ! Assume Marshall-Palmer law for Reff IANGLE = 11 CALL BHMIE_WATER( ZWAVE_LENGTH, ZZREFIND_ICE, YDSD, ZCONC, & diff --git a/src/MNH/lima.f90 b/src/MNH/lima.f90 index c248f1acf5366d8bea72fab2055770f2562e5cc4..74d60c4ff3433b39da42c27bdef43af05e107777 100644 --- a/src/MNH/lima.f90 +++ b/src/MNH/lima.f90 @@ -233,7 +233,7 @@ REAL, DIMENSION(:), ALLOCATABLE :: & Z_RC_ACCR, Z_CC_ACCR, & ! accretion of droplets by rain drops (ACCR) : rc, Nc, rr=-rr Z_CR_SCBU, & ! self collectio break up of drops (SCBU) : Nr ! Z_TH_EVAP, Z_RC_EVAP, Z_CC_EVAP, Z_RR_EVAP, Z_CR_EVAP, & ! evaporation of rain drops (EVAP) : rv=-rr-rc, rc, Nc, rr, Nr, th - Z_TH_EVAP, Z_RR_EVAP, & ! evaporation of rain drops (EVAP) : rv=-rr-rc, rc, Nc, rr, Nr, th + Z_TH_EVAP, Z_RR_EVAP, Z_CR_EVAP, & ! evaporation of rain drops (EVAP) : rv=-rr-rc, rc, Nc, rr, Nr, th Z_RI_CNVI, Z_CI_CNVI, & ! conversion snow -> ice (CNVI) : ri, Ni, rs=-ri Z_TH_DEPS, Z_RS_DEPS, & ! deposition of vapor on snow (DEPS) : rv=-rs, rs, th Z_TH_DEPI, Z_RI_DEPI, & ! deposition of vapor on ice (DEPI) : rv=-ri, ri, th @@ -246,6 +246,8 @@ REAL, DIMENSION(:), ALLOCATABLE :: & Z_TH_ACC, Z_RR_ACC, Z_CR_ACC, Z_RS_ACC, Z_RG_ACC, & ! rain accretion on aggregates (ACC) : rr, Nr, rs, rg, th Z_RS_CMEL, & ! conversion-melting (CMEL) : rs, rg=-rs Z_TH_CFRZ, Z_RR_CFRZ, Z_CR_CFRZ, Z_RI_CFRZ, Z_CI_CFRZ, & ! rain freezing (CFRZ) : rr, Nr, ri, Ni, rg=-rr-ri, th + Z_RI_CIBU, Z_CI_CIBU, & ! collisional ice break-up (CIBU) : ri, Ni, rs=-ri + Z_RI_RDSF, Z_CI_RDSF, & ! rain drops freezing shattering (RDSF) : ri, Ni, rg=-ri Z_TH_WETG, Z_RC_WETG, Z_CC_WETG, Z_RR_WETG, Z_CR_WETG, & ! wet growth of graupel (WETG) : rc, NC, rr, Nr, ri, Ni, rs, rg, rh, th Z_RI_WETG, Z_CI_WETG, Z_RS_WETG, Z_RG_WETG, Z_RH_WETG, & ! wet growth of graupel (WETG) : rc, NC, rr, Nr, ri, Ni, rs, rg, rh, th Z_TH_DRYG, Z_RC_DRYG, Z_CC_DRYG, Z_RR_DRYG, Z_CR_DRYG, & ! dry growth of graupel (DRYG) : rc, Nc, rr, Nr, ri, Ni, rs, rg, th @@ -284,7 +286,7 @@ REAL, DIMENSION(:,:,:), ALLOCATABLE :: & ZTOT_RC_ACCR, ZTOT_CC_ACCR, & ! accretion of droplets by rain drops (ACCR) ZTOT_CR_SCBU, & ! self collectio break up of drops (SCBU) ! ZTOT_TH_EVAP, ZTOT_RC_EVAP, ZTOT_CC_EVAP, ZTOT_RR_EVAP, ZTOT_CR_EVAP, & ! evaporation of rain drops (EVAP) - ZTOT_TH_EVAP, ZTOT_RR_EVAP, & ! evaporation of rain drops (EVAP) + ZTOT_TH_EVAP, ZTOT_RR_EVAP, ZTOT_CR_EVAP, & ! evaporation of rain drops (EVAP) ZTOT_RI_CNVI, ZTOT_CI_CNVI, & ! conversion snow -> ice (CNVI) ZTOT_TH_DEPS, ZTOT_RS_DEPS, & ! deposition of vapor on snow (DEPS) ZTOT_TH_DEPI, ZTOT_RI_DEPI, & ! deposition of vapor on ice (DEPI) @@ -297,6 +299,8 @@ REAL, DIMENSION(:,:,:), ALLOCATABLE :: & ZTOT_TH_ACC, ZTOT_RR_ACC, ZTOT_CR_ACC, ZTOT_RS_ACC, ZTOT_RG_ACC, & ! rain accretion on aggregates (ACC) ZTOT_RS_CMEL, & ! conversion-melting (CMEL) ZTOT_TH_CFRZ, ZTOT_RR_CFRZ, ZTOT_CR_CFRZ, ZTOT_RI_CFRZ, ZTOT_CI_CFRZ, & ! rain freezing (CFRZ) + ZTOT_RI_CIBU, ZTOT_CI_CIBU, & ! collisional ice break-up (CIBU) + ZTOT_RI_RDSF, ZTOT_CI_RDSF, & ! rain drops freezing shattering (RDSF) ZTOT_TH_WETG, ZTOT_RC_WETG, ZTOT_CC_WETG, ZTOT_RR_WETG, ZTOT_CR_WETG, & ! wet growth of graupel (WETG) ZTOT_RI_WETG, ZTOT_CI_WETG, ZTOT_RS_WETG, ZTOT_RG_WETG, ZTOT_RH_WETG, & ! wet growth of graupel (WETG) ZTOT_TH_DRYG, ZTOT_RC_DRYG, ZTOT_CC_DRYG, ZTOT_RR_DRYG, ZTOT_CR_DRYG, & ! dry growth of graupel (DRYG) @@ -428,7 +432,7 @@ if ( lbu_enable ) then ! allocate( ZTOT_RC_EVAP (size( ptht, 1), size( ptht, 2), size( ptht, 3) ) ); ZTOT_RC_EVAP(:,:,:) = 0. ! allocate( ZTOT_CC_EVAP (size( ptht, 1), size( ptht, 2), size( ptht, 3) ) ); ZTOT_CC_EVAP(:,:,:) = 0. allocate( ZTOT_RR_EVAP (size( ptht, 1), size( ptht, 2), size( ptht, 3) ) ); ZTOT_RR_EVAP(:,:,:) = 0. -! allocate( ZTOT_CR_EVAP (size( ptht, 1), size( ptht, 2), size( ptht, 3) ) ); ZTOT_CR_EVAP(:,:,:) = 0. + allocate( ZTOT_CR_EVAP (size( ptht, 1), size( ptht, 2), size( ptht, 3) ) ); ZTOT_CR_EVAP(:,:,:) = 0. allocate( ZTOT_RI_CNVI (size( ptht, 1), size( ptht, 2), size( ptht, 3) ) ); ZTOT_RI_CNVI(:,:,:) = 0. allocate( ZTOT_CI_CNVI (size( ptht, 1), size( ptht, 2), size( ptht, 3) ) ); ZTOT_CI_CNVI(:,:,:) = 0. allocate( ZTOT_TH_DEPS (size( ptht, 1), size( ptht, 2), size( ptht, 3) ) ); ZTOT_TH_DEPS(:,:,:) = 0. @@ -462,6 +466,10 @@ if ( lbu_enable ) then allocate( ZTOT_CR_CFRZ (size( ptht, 1), size( ptht, 2), size( ptht, 3) ) ); ZTOT_CR_CFRZ(:,:,:) = 0. allocate( ZTOT_RI_CFRZ (size( ptht, 1), size( ptht, 2), size( ptht, 3) ) ); ZTOT_RI_CFRZ(:,:,:) = 0. allocate( ZTOT_CI_CFRZ (size( ptht, 1), size( ptht, 2), size( ptht, 3) ) ); ZTOT_CI_CFRZ(:,:,:) = 0. + allocate( ZTOT_RI_CIBU (size( ptht, 1), size( ptht, 2), size( ptht, 3) ) ); ZTOT_RI_CIBU(:,:,:) = 0. + allocate( ZTOT_CI_CIBU (size( ptht, 1), size( ptht, 2), size( ptht, 3) ) ); ZTOT_CI_CIBU(:,:,:) = 0. + allocate( ZTOT_RI_RDSF (size( ptht, 1), size( ptht, 2), size( ptht, 3) ) ); ZTOT_RI_RDSF(:,:,:) = 0. + allocate( ZTOT_CI_RDSF (size( ptht, 1), size( ptht, 2), size( ptht, 3) ) ); ZTOT_CI_RDSF(:,:,:) = 0. allocate( ZTOT_TH_WETG (size( ptht, 1), size( ptht, 2), size( ptht, 3) ) ); ZTOT_TH_WETG(:,:,:) = 0. allocate( ZTOT_RC_WETG (size( ptht, 1), size( ptht, 2), size( ptht, 3) ) ); ZTOT_RC_WETG(:,:,:) = 0. allocate( ZTOT_CC_WETG (size( ptht, 1), size( ptht, 2), size( ptht, 3) ) ); ZTOT_CC_WETG(:,:,:) = 0. @@ -768,18 +776,12 @@ IF ( LCOLD ) ZCIT(:,:,:) = ZCIS(:,:,:) * PTSTEP !* 2. Compute cloud, ice and precipitation fractions ! ---------------------------------------------- ! -IF (LSUBG_COND) THEN - CALL LIMA_COMPUTE_CLOUD_FRACTIONS (IIB, IIE, IJB, IJE, IKB, IKE, KKL, & - ZCCT, ZRCT, & - ZCRT, ZRRT, & - ZCIT, ZRIT, & - ZRST, ZRGT, ZRHT, & - PCLDFR, PICEFR, PPRCFR ) -ELSE - PCLDFR(:,:,:)=1. - PICEFR(:,:,:)=1. - PPRCFR(:,:,:)=1. -END IF +CALL LIMA_COMPUTE_CLOUD_FRACTIONS (IIB, IIE, IJB, IJE, IKB, IKE, KKL, & + ZCCT, ZRCT, & + ZCRT, ZRRT, & + ZCIT, ZRIT, & + ZRST, ZRGT, ZRHT, & + PCLDFR, PICEFR, PPRCFR ) ! !------------------------------------------------------------------------------- ! @@ -994,6 +996,7 @@ DO WHILE(ANY(ZTIME(IIB:IIE,IJB:IJE,IKTB:IKTE)<PTSTEP)) ALLOCATE(Z_CR_SCBU(IPACK)) ; Z_CR_SCBU(:) = 0. ALLOCATE(Z_TH_EVAP(IPACK)) ; Z_TH_EVAP(:) = 0. ALLOCATE(Z_RR_EVAP(IPACK)) ; Z_RR_EVAP(:) = 0. + ALLOCATE(Z_CR_EVAP(IPACK)) ; Z_CR_EVAP(:) = 0. ALLOCATE(Z_RI_CNVI(IPACK)) ; Z_RI_CNVI(:) = 0. ALLOCATE(Z_CI_CNVI(IPACK)) ; Z_CI_CNVI(:) = 0. ALLOCATE(Z_TH_DEPS(IPACK)) ; Z_TH_DEPS(:) = 0. @@ -1027,6 +1030,10 @@ DO WHILE(ANY(ZTIME(IIB:IIE,IJB:IJE,IKTB:IKTE)<PTSTEP)) ALLOCATE(Z_CR_CFRZ(IPACK)) ; Z_CR_CFRZ = 0. ALLOCATE(Z_RI_CFRZ(IPACK)) ; Z_RI_CFRZ = 0. ALLOCATE(Z_CI_CFRZ(IPACK)) ; Z_CI_CFRZ = 0. + ALLOCATE(Z_RI_CIBU(IPACK)) ; Z_RI_CIBU = 0. + ALLOCATE(Z_CI_CIBU(IPACK)) ; Z_CI_CIBU = 0. + ALLOCATE(Z_RI_RDSF(IPACK)) ; Z_RI_RDSF = 0. + ALLOCATE(Z_CI_RDSF(IPACK)) ; Z_CI_RDSF = 0. ALLOCATE(Z_TH_WETG(IPACK)) ; Z_TH_WETG = 0. ALLOCATE(Z_RC_WETG(IPACK)) ; Z_RC_WETG = 0. ALLOCATE(Z_CC_WETG(IPACK)) ; Z_CC_WETG = 0. @@ -1086,7 +1093,7 @@ DO WHILE(ANY(ZTIME(IIB:IIE,IJB:IJE,IKTB:IKTE)<PTSTEP)) Z_RC_AUTO, Z_CC_AUTO, Z_CR_AUTO, & Z_RC_ACCR, Z_CC_ACCR, & Z_CR_SCBU, & - Z_TH_EVAP, Z_RR_EVAP, & + Z_TH_EVAP, Z_RR_EVAP, Z_CR_EVAP, & Z_RI_CNVI, Z_CI_CNVI, & Z_TH_DEPS, Z_RS_DEPS, & Z_TH_DEPI, Z_RI_DEPI, & @@ -1099,6 +1106,8 @@ DO WHILE(ANY(ZTIME(IIB:IIE,IJB:IJE,IKTB:IKTE)<PTSTEP)) Z_TH_ACC, Z_RR_ACC, Z_CR_ACC, Z_RS_ACC, Z_RG_ACC, & Z_RS_CMEL, & Z_TH_CFRZ, Z_RR_CFRZ, Z_CR_CFRZ, Z_RI_CFRZ, Z_CI_CFRZ, & + Z_RI_CIBU, Z_CI_CIBU, & + Z_RI_RDSF, Z_CI_RDSF, & Z_TH_WETG, Z_RC_WETG, Z_CC_WETG, Z_RR_WETG, Z_CR_WETG, & Z_RI_WETG, Z_CI_WETG, Z_RS_WETG, Z_RG_WETG, Z_RH_WETG, & Z_TH_DRYG, Z_RC_DRYG, Z_CC_DRYG, Z_RR_DRYG, Z_CR_DRYG, & @@ -1370,7 +1379,7 @@ DO WHILE(ANY(ZTIME(IIB:IIE,IJB:IJE,IKTB:IKTE)<PTSTEP)) !!$ ZTOT_RC_EVAP(I1(II),I2(II),I3(II)) = ZTOT_RC_EVAP(I1(II),I2(II),I3(II)) + Z_RC_EVAP(II) * ZMAXTIME(II) !!$ ZTOT_CC_EVAP(I1(II),I2(II),I3(II)) = ZTOT_CC_EVAP(I1(II),I2(II),I3(II)) + Z_CC_EVAP(II) * ZMAXTIME(II) ZTOT_RR_EVAP(I1(II),I2(II),I3(II)) = ZTOT_RR_EVAP(I1(II),I2(II),I3(II)) + Z_RR_EVAP(II) * ZMAXTIME(II) -!!$ ZTOT_CR_EVAP(I1(II),I2(II),I3(II)) = ZTOT_CR_EVAP(I1(II),I2(II),I3(II)) + Z_CR_EVAP(II) * ZMAXTIME(II) + ZTOT_CR_EVAP(I1(II),I2(II),I3(II)) = ZTOT_CR_EVAP(I1(II),I2(II),I3(II)) + Z_CR_EVAP(II) * ZMAXTIME(II) ZTOT_RI_CNVI(I1(II),I2(II),I3(II)) = ZTOT_RI_CNVI(I1(II),I2(II),I3(II)) + Z_RI_CNVI(II) * ZMAXTIME(II) ZTOT_CI_CNVI(I1(II),I2(II),I3(II)) = ZTOT_CI_CNVI(I1(II),I2(II),I3(II)) + Z_CI_CNVI(II) * ZMAXTIME(II) ZTOT_TH_DEPS(I1(II),I2(II),I3(II)) = ZTOT_TH_DEPS(I1(II),I2(II),I3(II)) + Z_TH_DEPS(II) * ZMAXTIME(II) @@ -1404,6 +1413,10 @@ DO WHILE(ANY(ZTIME(IIB:IIE,IJB:IJE,IKTB:IKTE)<PTSTEP)) ZTOT_CR_CFRZ(I1(II),I2(II),I3(II)) = ZTOT_CR_CFRZ(I1(II),I2(II),I3(II)) + Z_CR_CFRZ(II) * ZMAXTIME(II) ZTOT_RI_CFRZ(I1(II),I2(II),I3(II)) = ZTOT_RI_CFRZ(I1(II),I2(II),I3(II)) + Z_RI_CFRZ(II) * ZMAXTIME(II) ZTOT_CI_CFRZ(I1(II),I2(II),I3(II)) = ZTOT_CI_CFRZ(I1(II),I2(II),I3(II)) + Z_CI_CFRZ(II) * ZMAXTIME(II) + ZTOT_RI_CIBU(I1(II),I2(II),I3(II)) = ZTOT_RI_CIBU(I1(II),I2(II),I3(II)) + Z_RI_CIBU(II) * ZMAXTIME(II) + ZTOT_CI_CIBU(I1(II),I2(II),I3(II)) = ZTOT_CI_CIBU(I1(II),I2(II),I3(II)) + Z_CI_CIBU(II) * ZMAXTIME(II) + ZTOT_RI_RDSF(I1(II),I2(II),I3(II)) = ZTOT_RI_RDSF(I1(II),I2(II),I3(II)) + Z_RI_RDSF(II) * ZMAXTIME(II) + ZTOT_CI_RDSF(I1(II),I2(II),I3(II)) = ZTOT_CI_RDSF(I1(II),I2(II),I3(II)) + Z_CI_RDSF(II) * ZMAXTIME(II) ZTOT_TH_WETG(I1(II),I2(II),I3(II)) = ZTOT_TH_WETG(I1(II),I2(II),I3(II)) + Z_TH_WETG(II) * ZMAXTIME(II) ZTOT_RC_WETG(I1(II),I2(II),I3(II)) = ZTOT_RC_WETG(I1(II),I2(II),I3(II)) + Z_RC_WETG(II) * ZMAXTIME(II) ZTOT_CC_WETG(I1(II),I2(II),I3(II)) = ZTOT_CC_WETG(I1(II),I2(II),I3(II)) + Z_CC_WETG(II) * ZMAXTIME(II) @@ -1537,6 +1550,7 @@ DO WHILE(ANY(ZTIME(IIB:IIE,IJB:IJE,IKTB:IKTE)<PTSTEP)) DEALLOCATE(Z_CR_SCBU) DEALLOCATE(Z_TH_EVAP) DEALLOCATE(Z_RR_EVAP) + DEALLOCATE(Z_CR_EVAP) DEALLOCATE(Z_RI_CNVI) DEALLOCATE(Z_CI_CNVI) DEALLOCATE(Z_TH_DEPS) @@ -1570,6 +1584,10 @@ DO WHILE(ANY(ZTIME(IIB:IIE,IJB:IJE,IKTB:IKTE)<PTSTEP)) DEALLOCATE(Z_CR_CFRZ) DEALLOCATE(Z_RI_CFRZ) DEALLOCATE(Z_CI_CFRZ) + DEALLOCATE(Z_RI_CIBU) + DEALLOCATE(Z_CI_CIBU) + DEALLOCATE(Z_RI_RDSF) + DEALLOCATE(Z_CI_RDSF) DEALLOCATE(Z_TH_WETG) DEALLOCATE(Z_RC_WETG) DEALLOCATE(Z_CC_WETG) @@ -1706,6 +1724,8 @@ if ( lbu_enable ) then call Budget_store_add( tbudgets(NBUDGET_RI), 'HMS', ztot_ri_hms (:, :, :) * zrhodjontstep(:, :, :) ) call Budget_store_add( tbudgets(NBUDGET_RI), 'CFRZ', ztot_ri_cfrz (:, :, :) * zrhodjontstep(:, :, :) ) call Budget_store_add( tbudgets(NBUDGET_RI), 'DEPI', ztot_ri_depi (:, :, :) * zrhodjontstep(:, :, :) ) + call Budget_store_add( tbudgets(NBUDGET_RI), 'CIBU', ztot_ri_cibu (:, :, :) * zrhodjontstep(:, :, :) ) + call Budget_store_add( tbudgets(NBUDGET_RI), 'RDSF', ztot_ri_rdsf (:, :, :) * zrhodjontstep(:, :, :) ) call Budget_store_add( tbudgets(NBUDGET_RI), 'WETG', ztot_ri_wetg (:, :, :) * zrhodjontstep(:, :, :) ) call Budget_store_add( tbudgets(NBUDGET_RI), 'DRYG', ztot_ri_dryg (:, :, :) * zrhodjontstep(:, :, :) ) call Budget_store_add( tbudgets(NBUDGET_RI), 'HMG', ztot_ri_hmg (:, :, :) * zrhodjontstep(:, :, :) ) @@ -1721,6 +1741,7 @@ if ( lbu_enable ) then call Budget_store_add( tbudgets(NBUDGET_RS), 'HMS', ztot_rs_hms (:, :, :) * zrhodjontstep(:, :, :) ) call Budget_store_add( tbudgets(NBUDGET_RS), 'ACC', ztot_rs_acc (:, :, :) * zrhodjontstep(:, :, :) ) call Budget_store_add( tbudgets(NBUDGET_RS), 'CMEL', ztot_rs_cmel(:, :, :) * zrhodjontstep(:, :, :) ) + call Budget_store_add( tbudgets(NBUDGET_RS), 'CIBU', -ztot_ri_cibu(:, :, :) * zrhodjontstep(:, :, :) ) call Budget_store_add( tbudgets(NBUDGET_RS), 'WETG', ztot_rs_wetg(:, :, :) * zrhodjontstep(:, :, :) ) call Budget_store_add( tbudgets(NBUDGET_RS), 'DRYG', ztot_rs_dryg(:, :, :) * zrhodjontstep(:, :, :) ) end if @@ -1733,6 +1754,7 @@ if ( lbu_enable ) then call Budget_store_add( tbudgets(NBUDGET_RG), 'CMEL', -ztot_rs_cmel(:, :, :) * zrhodjontstep(:, :, :) ) call Budget_store_add( tbudgets(NBUDGET_RG), 'CFRZ', ( -ztot_rr_cfrz(:, :, :) - ztot_ri_cfrz(:, :, :) ) & * zrhodjontstep(:, :, :) ) + call Budget_store_add( tbudgets(NBUDGET_RG), 'RDSF', -ztot_ri_rdsf(:, :, :) * zrhodjontstep(:, :, :) ) call Budget_store_add( tbudgets(NBUDGET_RG), 'WETG', ztot_rg_wetg(:, :, :) * zrhodjontstep(:, :, :) ) call Budget_store_add( tbudgets(NBUDGET_RG), 'DRYG', ztot_rg_dryg(:, :, :) * zrhodjontstep(:, :, :) ) call Budget_store_add( tbudgets(NBUDGET_RG), 'HMG', ztot_rg_hmg (:, :, :) * zrhodjontstep(:, :, :) ) @@ -1765,7 +1787,7 @@ if ( lbu_enable ) then idx = NBUDGET_SV1 - 1 + nsv_lima_nr call Budget_store_add( tbudgets(idx), 'AUTO', ztot_cr_auto(:, :, :) * zrhodjontstep(:, :, :) ) call Budget_store_add( tbudgets(idx), 'SCBU', ztot_cr_scbu(:, :, :) * zrhodjontstep(:, :, :) ) - !call Budget_store_add( tbudgets(idx), 'REVA', 0. ) + call Budget_store_add( tbudgets(idx), 'REVA', ztot_cr_evap(:, :, :) * zrhodjontstep(:, :, :) ) call Budget_store_add( tbudgets(idx), 'BRKU', ztot_cr_brku(:, :, :) * zrhodjontstep(:, :, :) ) call Budget_store_add( tbudgets(idx), 'HONR', ztot_cr_honr(:, :, :) * zrhodjontstep(:, :, :) ) call Budget_store_add( tbudgets(idx), 'ACC', ztot_cr_acc (:, :, :) * zrhodjontstep(:, :, :) ) @@ -1786,13 +1808,15 @@ if ( lbu_enable ) then call Budget_store_add( tbudgets(idx), 'IMLT', -ztot_cc_imlt (:, :, :) * zrhodjontstep(:, :, :) ) call Budget_store_add( tbudgets(idx), 'HMS', ztot_ci_hms (:, :, :) * zrhodjontstep(:, :, :) ) call Budget_store_add( tbudgets(idx), 'CFRZ', ztot_ci_cfrz (:, :, :) * zrhodjontstep(:, :, :) ) + call Budget_store_add( tbudgets(idx), 'CIBU', ztot_ci_cibu (:, :, :) * zrhodjontstep(:, :, :) ) + call Budget_store_add( tbudgets(idx), 'RDSF', ztot_ci_rdsf (:, :, :) * zrhodjontstep(:, :, :) ) call Budget_store_add( tbudgets(idx), 'WETG', ztot_ci_wetg (:, :, :) * zrhodjontstep(:, :, :) ) call Budget_store_add( tbudgets(idx), 'DRYG', ztot_ci_dryg (:, :, :) * zrhodjontstep(:, :, :) ) call Budget_store_add( tbudgets(idx), 'HMG', ztot_ci_hmg (:, :, :) * zrhodjontstep(:, :, :) ) call Budget_store_add( tbudgets(idx), 'CORR2', ztot_ci_corr2(:, :, :) * zrhodjontstep(:, :, :) ) do ii = 1, nmod_ifn - idx = nsv_lima_ifn_nucl + ii - 1 + idx = NBUDGET_SV1 - 1 + nsv_lima_ifn_nucl + ii - 1 call Budget_store_add( tbudgets(idx), 'IMLT', ztot_ifnn_imlt(:, :, :, ii) * zrhodjontstep(:, :, :) ) end do end if diff --git a/src/MNH/lima_adjust.f90 b/src/MNH/lima_adjust.f90 index 31ea1fefa3f64de70ef37019f48128354ae84871..410c9a92043c33866f2c5b8205598815e12bae59 100644 --- a/src/MNH/lima_adjust.f90 +++ b/src/MNH/lima_adjust.f90 @@ -9,12 +9,12 @@ ! INTERFACE ! - SUBROUTINE LIMA_ADJUST(KRR, KMI, TPFILE, & - OSUBG_COND, PTSTEP, & - PRHODREF, PRHODJ, PEXNREF, PPABSM, & - PPABST, & - PRT, PRS, PSVT, PSVS, & - PTHS, PSRCS, PCLDFR ) + SUBROUTINE LIMA_ADJUST(KRR, KMI, TPFILE, & + OSUBG_COND, PTSTEP, & + PRHODREF, PRHODJ, PEXNREF, PPABSM, & + PPABST, & + PRT, PRS, PSVT, PSVS, & + PTHS, PSRCS, PCLDFR, PICEFR, PRAINFR ) ! USE MODD_IO, ONLY: TFILEDATA USE MODD_NSV, only: NSV_LIMA_BEG @@ -47,6 +47,8 @@ REAL, DIMENSION(:,:,:), INTENT(OUT) :: PSRCS ! Second-order flux ! s'rc'/2Sigma_s2 at time t+1 ! multiplied by Lambda_3 REAL, DIMENSION(:,:,:), INTENT(INOUT) :: PCLDFR ! Cloud fraction +REAL, DIMENSION(:,:,:), INTENT(INOUT) :: PICEFR ! Cloud fraction +REAL, DIMENSION(:,:,:), INTENT(INOUT) :: PRAINFR ! Cloud fraction ! END SUBROUTINE LIMA_ADJUST ! @@ -54,14 +56,14 @@ END INTERFACE ! END MODULE MODI_LIMA_ADJUST ! -! ########################################################### - SUBROUTINE LIMA_ADJUST(KRR, KMI, TPFILE, & - OSUBG_COND, PTSTEP, & - PRHODREF, PRHODJ, PEXNREF, PPABSM, & - PPABST, & - PRT, PRS, PSVT, PSVS, & - PTHS, PSRCS, PCLDFR ) -! ########################################################### +! ############################################################# + SUBROUTINE LIMA_ADJUST(KRR, KMI, TPFILE, & + OSUBG_COND, PTSTEP, & + PRHODREF, PRHODJ, PEXNREF, PPABSM, & + PPABST, & + PRT, PRS, PSVT, PSVS, & + PTHS, PSRCS, PCLDFR, PICEFR, PRAINFR ) +! ############################################################# ! !!**** *MIMA_ADJUST* - compute the fast microphysical sources !! @@ -202,6 +204,8 @@ REAL, DIMENSION(:,:,:), INTENT(OUT) :: PSRCS ! Second-order flux ! s'rc'/2Sigma_s2 at time t+1 ! multiplied by Lambda_3 REAL, DIMENSION(:,:,:), INTENT(INOUT) :: PCLDFR ! Cloud fraction +REAL, DIMENSION(:,:,:), INTENT(INOUT) :: PICEFR ! Cloud fraction +REAL, DIMENSION(:,:,:), INTENT(INOUT) :: PRAINFR ! Cloud fraction ! ! !* 0.2 Declarations of local variables : @@ -1171,11 +1175,21 @@ END DO !* 5.2 compute the cloud fraction PCLDFR (binary !!!!!!!) ! IF ( .NOT. OSUBG_COND ) THEN - WHERE (PRCS(:,:,:) + PRIS(:,:,:) + PRSS(:,:,:) > 1.E-12 / ZDT) + WHERE (PRCS(:,:,:) + PRIS(:,:,:) + PRSS(:,:,:) > 1.E-12 / ZDT) PCLDFR(:,:,:) = 1. ELSEWHERE PCLDFR(:,:,:) = 0. ENDWHERE + WHERE (PRIS(:,:,:) > 1.E-12 / ZDT) + PICEFR(:,:,:) = 1. + ELSEWHERE + PICEFR(:,:,:) = 0. + ENDWHERE + WHERE (PRRS(:,:,:)+PRSS(:,:,:)+PRGS(:,:,:) > 1.E-12 / ZDT) + PRAINFR(:,:,:) = 1. + ELSEWHERE + PRAINFR(:,:,:) = 0. + ENDWHERE END IF ! IF ( SIZE(PSRCS,3) /= 0 ) THEN diff --git a/src/MNH/lima_adjust_split.f90 b/src/MNH/lima_adjust_split.f90 index 6f7dbb738c7ebbe213c1145f31eba74964ecf3c4..19b6b3778d1b2307dbc608d1f3125e1f5ccf694c 100644 --- a/src/MNH/lima_adjust_split.f90 +++ b/src/MNH/lima_adjust_split.f90 @@ -14,7 +14,7 @@ INTERFACE PRHODREF, PRHODJ, PEXNREF, PPABSM, PSIGS, PMFCONV, & PPABST, PZZ, PDTHRAD, PW_NU, & PRT, PRS, PSVT, PSVS, & - PTHS, PSRCS, PCLDFR, PRC_MF, PCF_MF ) + PTHS, PSRCS, PCLDFR, PICEFR, PRC_MF, PRI_MF, PCF_MF) ! USE MODD_IO, ONLY: TFILEDATA USE MODD_NSV, only: NSV_LIMA_BEG @@ -58,7 +58,9 @@ REAL, DIMENSION(:,:,:), INTENT(OUT) :: PSRCS ! Second-order flux ! s'rc'/2Sigma_s2 at time t+1 ! multiplied by Lambda_3 REAL, DIMENSION(:,:,:), INTENT(INOUT) :: PCLDFR ! Cloud fraction +REAL, DIMENSION(:,:,:), INTENT(INOUT) :: PICEFR ! Cloud fraction REAL, DIMENSION(:,:,:), INTENT(IN) :: PRC_MF! Convective Mass Flux liquid mixing ratio +REAL, DIMENSION(:,:,:), INTENT(IN) :: PRI_MF! Convective Mass Flux ice mixing ratio REAL, DIMENSION(:,:,:), INTENT(IN) :: PCF_MF! Convective Mass Flux Cloud fraction ! END SUBROUTINE LIMA_ADJUST_SPLIT @@ -73,7 +75,7 @@ END MODULE MODI_LIMA_ADJUST_SPLIT PRHODREF, PRHODJ, PEXNREF, PPABSM, PSIGS, PMFCONV, & PPABST, PZZ, PDTHRAD, PW_NU, & PRT, PRS, PSVT, PSVS, & - PTHS, PSRCS, PCLDFR, PRC_MF, PCF_MF ) + PTHS, PSRCS, PCLDFR, PICEFR, PRC_MF, PRI_MF, PCF_MF) ! ########################################################################### ! !!**** *MIMA_ADJUST* - compute the fast microphysical sources @@ -142,6 +144,7 @@ END MODULE MODI_LIMA_ADJUST_SPLIT !! ------------- !! Original 06/2021 forked from lima_adjust.f90 ! P. Wautelet 23/07/2021: replace non-standard FLOAT function by REAL function +! B. Vie 03/2022: Add option for 1-moment pristine ice !------------------------------------------------------------------------------- ! !* 0. DECLARATIONS @@ -217,7 +220,9 @@ REAL, DIMENSION(:,:,:), INTENT(OUT) :: PSRCS ! Second-order flux ! s'rc'/2Sigma_s2 at time t+1 ! multiplied by Lambda_3 REAL, DIMENSION(:,:,:), INTENT(INOUT) :: PCLDFR ! Cloud fraction +REAL, DIMENSION(:,:,:), INTENT(INOUT) :: PICEFR ! Cloud fraction REAL, DIMENSION(:,:,:), INTENT(IN) :: PRC_MF! Convective Mass Flux liquid mixing ratio +REAL, DIMENSION(:,:,:), INTENT(IN) :: PRI_MF! Convective Mass Flux ice mixing ratio REAL, DIMENSION(:,:,:), INTENT(IN) :: PCF_MF! Convective Mass Flux Cloud fraction ! ! @@ -273,22 +278,11 @@ REAL, DIMENSION(SIZE(PRHODJ,1),SIZE(PRHODJ,2),SIZE(PRHODJ,3)) & ZRV, ZRV2, & ZRC, ZRC2, & ZRI, & - ZSIGS, & - ZW_MF -LOGICAL, DIMENSION(SIZE(PRHODJ,1),SIZE(PRHODJ,2),SIZE(PRHODJ,3)) & - :: GMICRO ! Test where to compute cond/dep proc. -INTEGER :: IMICRO -REAL, DIMENSION(:), ALLOCATABLE & - :: ZRVT, ZRCT, ZRIT, ZRVS, ZRCS, ZRIS, ZTHS, & - ZCCT, ZCIT, ZCCS, ZCIS, & - ZRHODREF, ZZT, ZPRES, ZEXNREF, ZZCPH, & - ZZW, ZLVFACT, ZLSFACT, & - ZRVSATW, ZRVSATI, ZRVSATW_PRIME, ZRVSATI_PRIME, & - ZAW, ZAI, ZCJ, ZKA, ZDV, ZITW, ZITI, ZAWW, ZAIW, & - ZAWI, ZAII, ZFACT, ZDELTW, & - ZDELTI, ZDELT1, ZDELT2, ZCND, ZDEP, ZS, ZVEC1, ZZW2 -! -INTEGER, DIMENSION(:), ALLOCATABLE :: IVEC1 + Z_SIGS, Z_SRCS, & + ZW_MF, & + ZCND, ZS, ZVEC1 +! +INTEGER, DIMENSION(SIZE(PRHODJ,1),SIZE(PRHODJ,2),SIZE(PRHODJ,3)) :: IVEC1 ! INTEGER :: IRESP ! Return code of FM routines INTEGER :: IIU,IJU,IKU! dimensions of dummy arrays @@ -304,12 +298,12 @@ REAL, DIMENSION(:), ALLOCATABLE :: ZRTMIN REAL, DIMENSION(:), ALLOCATABLE :: ZCTMIN ! integer :: idx -INTEGER , DIMENSION(SIZE(GMICRO)) :: I1,I2,I3 ! Used to replace the COUNT -INTEGER :: JL ! and PACK intrinsics +integer :: JI, JJ, JK, jl INTEGER :: JMOD, JMOD_IFN, JMOD_IMM ! -INTEGER , DIMENSION(3) :: BV TYPE(TFIELDDATA) :: TZFIELD +LOGICAL :: G_SIGMAS, GUSERI +REAL :: Z_SIGQSAT ! !------------------------------------------------------------------------------- ! @@ -497,234 +491,183 @@ DO JITER =1,ITERMAX !* 3. FIRST ORDER SUBGRID CONDENSATION SCHEME ! --------------------------------------- ! - IF ( OSUBG_COND ) THEN - ! - ZRV=PRVS*PTSTEP - ZRC=PRCS*PTSTEP - ZRV2=PRVT - ZRC2=PRCT + ZRV=PRVS*PTSTEP + ZRC=PRCS*PTSTEP + ZRV2=PRVT + ZRC2=PRCT + IF (NMOM_I.EQ.1) THEN + ZRI=PRIS*PTSTEP + GUSERI=.TRUE. + ELSE ZRI=0. - ZSIGS=PSIGS + GUSERI=.FALSE. + END IF + IF (OSUBG_COND) THEN + Z_SIGS=PSIGS + G_SIGMAS=OSIGMAS + Z_SIGQSAT=PSIGQSAT + ELSE + Z_SIGS=0. + G_SIGMAS=.TRUE. + Z_SIGQSAT=0. + END IF + + IF (LADJ) THEN CALL CONDENSATION(IIU, IJU, IKU, IIB, IIE, IJB, IJE, IKB, IKE, 1, 'S', & - HCONDENS, HLAMBDA3, & + HCONDENS, HLAMBDA3, & PPABST, PZZ, PRHODREF, ZT, ZRV, ZRC, ZRI, PRSS*PTSTEP, PRGS*PTSTEP, & - ZSIGS, PMFCONV, PCLDFR, PSRCS, .FALSE., OSIGMAS, & - PSIGQSAT, PLV=ZLV, PLS=ZLS, PCPH=ZCPH ) - PCLDFR(:,:,:) = MIN(PCLDFR(:,:,:) + PCF_MF(:,:,:) , 1.) - ZRV(:,:,:) = ZRV(:,:,:) - MAX(MIN(PRC_MF(:,:,:), ZRV(:,:,:)),0.) - ZRC(:,:,:) = ZRC(:,:,:) + MAX(MIN(PRC_MF(:,:,:), ZRV(:,:,:)),0.) + Z_SIGS, PMFCONV, PCLDFR, Z_SRCS, GUSERI, G_SIGMAS, & + Z_SIGQSAT, PLV=ZLV, PLS=ZLS, PCPH=ZCPH ) + END IF + IF (OSUBG_COND) THEN + PSRCS=Z_SRCS ZW_MF=0. - CALL LIMA_CCN_ACTIVATION (TPFILE, & + CALL LIMA_CCN_ACTIVATION (TPFILE, & PRHODREF, PEXNREF, PPABST, ZT2, PDTHRAD, PW_NU+ZW_MF, & - PTHT, ZRV2, ZRC2, PCCT, PRRT, PNFT, PNAT, & - PCLDFR ) -! - ELSE -! -!------------------------------------------------------------------------------- -! + PTHT, ZRV2, ZRC2, PCCT, PRRT, PNFT, PNAT, & + PCLDFR ) + END IF + +END DO ! +!* 5.1 compute the sources ! -!* FULLY IMPLICIT CONDENSATION SCHEME -! --------------------------------- -! -!* select cases where r_c>0 -! +IF (LADJ) THEN + ! Rc - Rc* + ZW1(:,:,:) = (ZRC(:,:,:) - PRCS(:,:,:)*PTSTEP) / PTSTEP ! Pcon = ---------- + ! 2 Delta t + WHERE( ZW1(:,:,:) < 0.0 ) + ZW1(:,:,:) = MAX ( ZW1(:,:,:), -PRCS(:,:,:) ) + ELSEWHERE + ZW1(:,:,:) = MIN ( ZW1(:,:,:), PRVS(:,:,:) ) + END WHERE + PRVS(:,:,:) = PRVS(:,:,:) - ZW1(:,:,:) + PRCS(:,:,:) = PRCS(:,:,:) + ZW1(:,:,:) + PTHS(:,:,:) = PTHS(:,:,:) + & + ZW1(:,:,:) * ZLV(:,:,:) / (ZCPH(:,:,:) * PEXNREF(:,:,:)) +ELSE + DO JI=1,SIZE(PRCS,1) + DO JJ=1,SIZE(PRCS,2) + DO JK=1,SIZE(PRCS,3) + IF (PRCS(JI,JJ,JK).GE.XRTMIN(2) .AND. PCCS(JI,JJ,JK).GE.XCTMIN(2)) THEN + ZVEC1(JI,JJ,JK) = MAX( 1.0001, MIN( FLOAT(NAHEN)-0.0001, XAHENINTP1 * ZT(JI,JJ,JK) + XAHENINTP2 ) ) + IVEC1(JI,JJ,JK) = INT( ZVEC1(JI,JJ,JK) ) + ZVEC1(JI,JJ,JK) = ZVEC1(JI,JJ,JK) - FLOAT( IVEC1(JI,JJ,JK) ) + ZW(JI,JJ,JK)=EXP( XALPW - XBETAW/ZT(JI,JJ,JK) - XGAMW*ALOG(ZT(JI,JJ,JK) ) ) ! es_w + ZW(JI,JJ,JK)=ZEPS*ZW(JI,JJ,JK) / ( PPABST(JI,JJ,JK)-ZW(JI,JJ,JK) ) + ZS(JI,JJ,JK) = PRVS(JI,JJ,JK)*PTSTEP / ZW(JI,JJ,JK) - 1. + ZW(JI,JJ,JK) = PCCS(JI,JJ,JK)*PTSTEP/(XLBC*PCCS(JI,JJ,JK)/PRCS(JI,JJ,JK))**XLBEXC + ZW2(JI,JJ,JK) = XAHENG3(IVEC1(JI,JJ,JK)+1)*ZVEC1(JI,JJ,JK)-XAHENG3(IVEC1(JI,JJ,JK))*(ZVEC1(JI,JJ,JK)-1.) + ZCND(JI,JJ,JK) = 2.*3.14*1000.*ZW2(JI,JJ,JK)*ZS(JI,JJ,JK)*ZW(JI,JJ,JK) + IF(ZCND(JI,JJ,JK).LE.0.) THEN + ZCND(JI,JJ,JK) = MAX ( ZCND(JI,JJ,JK), -PRCS(JI,JJ,JK) ) + ELSE + ZCND(JI,JJ,JK) = MIN ( ZCND(JI,JJ,JK), PRVS(JI,JJ,JK) ) + END IF + PRVS(JI,JJ,JK) = PRVS(JI,JJ,JK) - ZCND(JI,JJ,JK) + PRCS(JI,JJ,JK) = PRCS(JI,JJ,JK) + ZCND(JI,JJ,JK) + PTHS(JI,JJ,JK) = PTHS(JI,JJ,JK) + ZCND(JI,JJ,JK) * ZLV(JI,JJ,JK) / (ZCPH(JI,JJ,JK) * PEXNREF(JI,JJ,JK)) + END IF + END DO + END DO + END DO +END IF ! - GMICRO(:,:,:) = .FALSE. - GMICRO(IIB:IIE,IJB:IJE,IKB:IKE) =( PRCS(IIB:IIE,IJB:IJE,IKB:IKE)>0. .AND. & - PCCS(IIB:IIE,IJB:IJE,IKB:IKE)>0. ) - IMICRO = COUNTJV( GMICRO(:,:,:),I1(:),I2(:),I3(:)) - IF( IMICRO >= 1 ) THEN - ALLOCATE(ZRVT(IMICRO)) - ALLOCATE(ZRCT(IMICRO)) -! - ALLOCATE(ZRVS(IMICRO)) - ALLOCATE(ZRCS(IMICRO)) - ALLOCATE(ZCCS(IMICRO)) - ALLOCATE(ZTHS(IMICRO)) -! - ALLOCATE(ZRHODREF(IMICRO)) - ALLOCATE(ZZT(IMICRO)) - ALLOCATE(ZPRES(IMICRO)) - ALLOCATE(ZEXNREF(IMICRO)) - ALLOCATE(ZZCPH(IMICRO)) - DO JL=1,IMICRO - ZRVT(JL) = PRVT(I1(JL),I2(JL),I3(JL)) - ZRCT(JL) = PRCT(I1(JL),I2(JL),I3(JL)) - ! - ZRVS(JL) = PRVS(I1(JL),I2(JL),I3(JL)) - ZRCS(JL) = PRCS(I1(JL),I2(JL),I3(JL)) - ZCCS(JL) = PCCS(I1(JL),I2(JL),I3(JL)) - ZTHS(JL) = PTHS(I1(JL),I2(JL),I3(JL)) - ! - ZRHODREF(JL) = PRHODREF(I1(JL),I2(JL),I3(JL)) - ZZT(JL) = ZT(I1(JL),I2(JL),I3(JL)) - ZPRES(JL) = 2.0*PPABST(I1(JL),I2(JL),I3(JL))-PPABSM(I1(JL),I2(JL),I3(JL)) - ZEXNREF(JL) = PEXNREF(I1(JL),I2(JL),I3(JL)) - ZZCPH(JL) = ZCPH(I1(JL),I2(JL),I3(JL)) - ENDDO - ALLOCATE(ZZW(IMICRO)) - ALLOCATE(ZLVFACT(IMICRO)) - ALLOCATE(ZRVSATW(IMICRO)) - ALLOCATE(ZCND(IMICRO)) - ZLVFACT(:) = (XLVTT+(XCPV-XCL)*(ZZT(:)-XTT))/ZZCPH(:) ! L_v/C_ph - ZZW(:) = EXP( XALPW - XBETAW/ZZT(:) - XGAMW*ALOG(ZZT(:) ) ) ! es_w - ZRVSATW(:) = ZEPS*ZZW(:) / ( ZPRES(:)-ZZW(:) ) ! r_sw - - IF (LADJ) THEN - ALLOCATE(ZRVSATW_PRIME(IMICRO)) - ALLOCATE(ZAWW(IMICRO)) - ALLOCATE(ZDELT1(IMICRO)) - ALLOCATE(ZDELT2(IMICRO)) - ZRVSATW_PRIME(:) = (( XBETAW/ZZT(:) - XGAMW ) / ZZT(:)) & ! r'_sw - * ZRVSATW(:) * ( 1. + ZRVSATW(:)/ZEPS ) - ZAWW(:) = 1.0 + ZRVSATW_PRIME(:)*ZLVFACT(:) - ZDELT2(:) = (ZRVSATW_PRIME(:)*ZLVFACT(:)/ZAWW(:)) * & - ( ((-2.*XBETAW+XGAMW*ZZT(:))/(XBETAW-XGAMW*ZZT(:)) & - + (XBETAW/ZZT(:)-XGAMW)*(1.0+2.0*ZRVSATW(:)/ZEPS))/ZZT(:) ) - ZDELT1(:) = (ZLVFACT(:)/ZAWW(:)) * ( ZRVSATW(:) - ZRVS(:)*ZDT ) - ZCND(:) = - ZDELT1(:)*( 1.0 + 0.5*ZDELT1(:)*ZDELT2(:) ) / (ZLVFACT(:)*ZDT) - DEALLOCATE(ZRVSATW_PRIME) - DEALLOCATE(ZAWW) - DEALLOCATE(ZDELT1) - DEALLOCATE(ZDELT2) - ELSE - ALLOCATE(ZS(IMICRO)) - ALLOCATE(ZZW2(IMICRO)) - ALLOCATE(ZVEC1(IMICRO)) - ALLOCATE(IVEC1(IMICRO)) - ZVEC1(:) = MAX( 1.0001, MIN( REAL(NAHEN)-0.0001, XAHENINTP1 * ZZT(:) + XAHENINTP2 ) ) - IVEC1(:) = INT( ZVEC1(:) ) - ZVEC1(:) = ZVEC1(:) - REAL( IVEC1(:) ) - ZS(:) = ZRVS(:)*PTSTEP / ZRVSATW(:) - 1. - ZZW(:) = ZCCS(:)*PTSTEP/(XLBC*ZCCS(:)/ZRCS(:))**XLBEXC - ZZW2(:) = XAHENG3(IVEC1(:)+1)*ZVEC1(:)-XAHENG3(IVEC1(:))*(ZVEC1(:)-1.) - ZCND(:) = 2.*3.14*1000.*ZZW2(:)*ZS(:)*ZZW(:) - DEALLOCATE(ZS) - DEALLOCATE(ZZW2) - DEALLOCATE(ZVEC1) - DEALLOCATE(IVEC1) - END IF -! -! -! Integration -! - WHERE( ZCND(:) < 0.0 ) - ZCND(:) = MAX ( ZCND(:), -ZRCS(:) ) - ELSEWHERE - ZCND(:) = MIN ( ZCND(:), ZRVS(:) ) - END WHERE - ZRVS(:) = ZRVS(:) - ZCND(:) - ZRCS(:) = ZRCS(:) + ZCND(:) - ZTHS(:) = ZTHS(:) + ZCND(:) * ZLVFACT(:) / ZEXNREF(:) -! - ZW(:,:,:) = PRVS(:,:,:) - PRVS(:,:,:) = UNPACK( ZRVS(:),MASK=GMICRO(:,:,:),FIELD=ZW(:,:,:) ) - ZW(:,:,:) = PRCS(:,:,:) - PRCS(:,:,:) = UNPACK( ZRCS(:),MASK=GMICRO(:,:,:),FIELD=ZW(:,:,:) ) - ZW(:,:,:) = PTHS(:,:,:) - PTHS(:,:,:) = UNPACK( ZTHS(:),MASK=GMICRO(:,:,:),FIELD=ZW(:,:,:) ) -! - DEALLOCATE(ZRVT) - DEALLOCATE(ZRCT) - DEALLOCATE(ZRVS) - DEALLOCATE(ZRCS) - DEALLOCATE(ZTHS) - DEALLOCATE(ZRHODREF) - DEALLOCATE(ZZT) - DEALLOCATE(ZPRES) - DEALLOCATE(ZEXNREF) - DEALLOCATE(ZZCPH) - DEALLOCATE(ZZW) - DEALLOCATE(ZLVFACT) - DEALLOCATE(ZRVSATW) - DEALLOCATE(ZCND) - END IF ! IMICRO -! - END IF ! end of adjustment procedure (test on OSUBG_COND) +IF (NMOM_I.EQ.1) THEN + ZW2(:,:,:) = (ZRI(:,:,:) - PRIS(:,:,:)*PTSTEP) / PTSTEP ! idem ZW1 but for Ri ! -! Remove cloud droplets if there are few - - ZMASK(:,:,:) = 0.0 - ZW(:,:,:) = 0. - WHERE (PRCS(:,:,:) <= ZRTMIN(2) .OR. PCCS(:,:,:) <= ZCTMIN(2)) - PRVS(:,:,:) = PRVS(:,:,:) + PRCS(:,:,:) - PTHS(:,:,:) = PTHS(:,:,:) - PRCS(:,:,:)*ZLV(:,:,:)/(ZCPH(:,:,:)*ZEXNS(:,:,:)) - PRCS(:,:,:) = 0.0 - ZW(:,:,:) = MAX(PCCS(:,:,:),0.) - PCCS(:,:,:) = 0.0 + WHERE( ZW2(:,:,:) < 0.0 ) + ZW2(:,:,:) = MAX ( ZW2(:,:,:), -PRIS(:,:,:) ) + ELSEWHERE + ZW2(:,:,:) = MIN ( ZW2(:,:,:), PRVS(:,:,:) ) END WHERE + PRVS(:,:,:) = PRVS(:,:,:) - ZW2(:,:,:) + PRIS(:,:,:) = PRIS(:,:,:) + ZW2(:,:,:) + PTHS(:,:,:) = PTHS(:,:,:) + & + ZW2(:,:,:) * ZLS(:,:,:) / (ZCPH(:,:,:) * PEXNREF(:,:,:)) +END IF ! - ZW1(:,:,:) = 0. - IF (LWARM .AND. NMOD_CCN.GE.1) ZW1(:,:,:) = SUM(PNAS,DIM=4) - ZW (:,:,:) = MIN( ZW(:,:,:), ZW1(:,:,:) ) - ZW2(:,:,:) = 0. - WHERE ( ZW(:,:,:) > 0. ) - ZMASK(:,:,:) = 1.0 - ZW2(:,:,:) = ZW(:,:,:) / ZW1(:,:,:) - ENDWHERE +!* 5.2 compute the cloud fraction PCLDFR ! - IF (LWARM .AND. NMOD_CCN.GE.1) THEN - DO JMOD = 1, NMOD_CCN - PNFS(:,:,:,JMOD) = PNFS(:,:,:,JMOD) + & - ZMASK(:,:,:) * PNAS(:,:,:,JMOD) * ZW2(:,:,:) - PNAS(:,:,:,JMOD) = PNAS(:,:,:,JMOD) - & - ZMASK(:,:,:) * PNAS(:,:,:,JMOD) * ZW2(:,:,:) - PNAS(:,:,:,JMOD) = MAX( 0.0 , PNAS(:,:,:,JMOD) ) - ENDDO +IF ( .NOT. OSUBG_COND ) THEN + WHERE (PRCS(:,:,:) + PRIS(:,:,:) > 1.E-12 / PTSTEP) + PCLDFR(:,:,:) = 1. + ELSEWHERE + PCLDFR(:,:,:) = 0. + ENDWHERE + IF ( SIZE(PSRCS,3) /= 0 ) THEN + WHERE (PRCS(:,:,:) + PRIS(:,:,:) > 1.E-12 / ZDT) + PSRCS(:,:,:) = 1. + ELSEWHERE + PSRCS(:,:,:) = 0. + ENDWHERE + END IF +ELSE +! We limit PRC_MF+PRI_MF to PRVS*PTSTEP to avoid negative humidity + ZW1(:,:,:)=PRC_MF(:,:,:)/PTSTEP + IF (NMOM_I.EQ.1) THEN + ZW2(:,:,:)=PRI_MF(:,:,:)/PTSTEP + ELSE + ZW2(:,:,:)=0. END IF + WHERE(ZW1(:,:,:)+ZW2(:,:,:)>PRVS(:,:,:)) + ZW1(:,:,:)=ZW1(:,:,:)*PRVS(:,:,:)/(ZW1(:,:,:)+ZW2(:,:,:)) + ZW2(:,:,:)=PRVS(:,:,:)-ZW1(:,:,:) + ENDWHERE +! Compute CF and update rc, ri from MF scheme + PRVS(:,:,:) = PRVS(:,:,:) - ZW1(:,:,:) -ZW2(:,:,:) + PRCS(:,:,:) = PRCS(:,:,:) + ZW1(:,:,:) + PRIS(:,:,:) = PRIS(:,:,:) + ZW2(:,:,:) + PCCS(:,:,:) = PCCT(:,:,:) / PTSTEP + PNFS(:,:,:,:) = PNFT(:,:,:,:) / PTSTEP + PNAS(:,:,:,:) = PNAT(:,:,:,:) / PTSTEP + PTHS(:,:,:) = PTHS(:,:,:) + & + (ZW1(:,:,:) * ZLV(:,:,:) + ZW2 * ZLS(:,:,:)) / ZCPH(:,:,:) & + / PEXNREF(:,:,:) +END IF ! - IF (LSCAV .AND. LAERO_MASS) PMAS(:,:,:) = PMAS(:,:,:) * (1-ZMASK(:,:,:)) +! Remove cloud droplets if there are few ! +ZMASK(:,:,:) = 0.0 +ZW(:,:,:) = 0. +WHERE (PRCS(:,:,:) <= ZRTMIN(2) .OR. PCCS(:,:,:) <= ZCTMIN(2)) + PRVS(:,:,:) = PRVS(:,:,:) + PRCS(:,:,:) + PTHS(:,:,:) = PTHS(:,:,:) - PRCS(:,:,:)*ZLV(:,:,:)/(ZCPH(:,:,:)*ZEXNS(:,:,:)) + PRCS(:,:,:) = 0.0 + ZW(:,:,:) = MAX(PCCS(:,:,:),0.) + PCCS(:,:,:) = 0.0 +END WHERE ! -END DO ! end of the iterative loop +ZW1(:,:,:) = 0. +IF (LWARM .AND. NMOD_CCN.GE.1) ZW1(:,:,:) = SUM(PNAS,DIM=4) +ZW (:,:,:) = MIN( ZW(:,:,:), ZW1(:,:,:) ) +ZW2(:,:,:) = 0. +WHERE ( ZW(:,:,:) > 0. ) + ZMASK(:,:,:) = 1.0 + ZW2(:,:,:) = ZW(:,:,:) / ZW1(:,:,:) +ENDWHERE +! +IF (LWARM .AND. NMOD_CCN.GE.1) THEN + DO JMOD = 1, NMOD_CCN + PNFS(:,:,:,JMOD) = PNFS(:,:,:,JMOD) + & + ZMASK(:,:,:) * PNAS(:,:,:,JMOD) * ZW2(:,:,:) + PNAS(:,:,:,JMOD) = PNAS(:,:,:,JMOD) - & + ZMASK(:,:,:) * PNAS(:,:,:,JMOD) * ZW2(:,:,:) + PNAS(:,:,:,JMOD) = MAX( 0.0 , PNAS(:,:,:,JMOD) ) + ENDDO +END IF ! +IF (LSCAV .AND. LAERO_MASS) PMAS(:,:,:) = PMAS(:,:,:) * (1-ZMASK(:,:,:)) ! -!* 5.2 compute the cloud fraction PCLDFR (binary !!!!!!!) ! -IF ( .NOT. OSUBG_COND ) THEN - WHERE (PRCS(:,:,:) + PRIS(:,:,:) + PRSS(:,:,:) > 1.E-12 / ZDT) - PCLDFR(:,:,:) = 1. - ELSEWHERE - PCLDFR(:,:,:) = 0. - ENDWHERE -END IF ! -IF ( SIZE(PSRCS,3) /= 0 ) THEN - WHERE (PRCS(:,:,:) + PRIS(:,:,:) > 1.E-12 / ZDT) - PSRCS(:,:,:) = 1. - ELSEWHERE - PSRCS(:,:,:) = 0. - ENDWHERE +PICEFR(:,:,:)=0. +IF (NMOM_I.EQ.1) THEN + WHERE(PICEFR(:,:,:)<1.E-10 .AND. PRIT(:,:,:)>XRTMIN(4) .AND. PCIT(:,:,:)>XCTMIN(4)) PICEFR(:,:,:)=PCLDFR(:,:,:) +ELSE + WHERE(PICEFR(:,:,:)<1.E-10 .AND. PRIT(:,:,:)>XRTMIN(4) .AND. PCIT(:,:,:)>XCTMIN(4)) PICEFR(:,:,:)=1. END IF ! -IF ( OSUBG_COND ) THEN - ! - ! Mixing ratio change (cloud liquid water) - ! - ZW1(:,:,:) = (ZRC(:,:,:) - PRCS(:,:,:)*PTSTEP) / PTSTEP - WHERE( ZW1(:,:,:) < 0.0 ) - ZW1(:,:,:) = MAX ( ZW1(:,:,:), -PRCS(:,:,:) ) - ELSEWHERE - ZW1(:,:,:) = MIN ( ZW1(:,:,:), PRVS(:,:,:) ) - END WHERE - - WHERE (PCCT(:,:,:) < PCLDFR(:,:,:)*XCTMIN(2) .OR. ZRC(:,:,:)<PCLDFR(:,:,:)*XRTMIN(2)) - ZW1=-PRCS - PCCS=0. - PCLDFR=0. - END WHERE - - PRVS(:,:,:) = PRVS(:,:,:) - ZW1(:,:,:) - PRCS(:,:,:) = PRCS(:,:,:) + ZW1(:,:,:) - PCCS(:,:,:) = PCCT(:,:,:) / PTSTEP - PNFS(:,:,:,:) = PNFT(:,:,:,:) / PTSTEP - PNAS(:,:,:,:) = PNAT(:,:,:,:) / PTSTEP - PTHS(:,:,:) = PTHS(:,:,:) + & - ZW1(:,:,:) * ZLV(:,:,:) / (ZCPH(:,:,:) * PEXNREF(:,:,:)) -END IF ! fin test OSUBG_COND - IF ( tpfile%lopened ) THEN TZFIELD%CMNHNAME = 'NEB' TZFIELD%CSTDNAME = '' @@ -743,7 +686,6 @@ END IF !* 6. SAVE CHANGES IN PRS AND PSVS ! ---------------------------- ! -! ! Prepare 3D water mixing ratios PRS(:,:,:,1) = PRVS(:,:,:) IF ( KRR .GE. 2 ) PRS(:,:,:,2) = PRCS(:,:,:) @@ -802,7 +744,6 @@ if ( nbumod == kmi .and. lbu_enable ) then if ( lbudget_th ) call Budget_store_end( tbudgets(NBUDGET_TH), 'CEDS', pths(:, :, :) * prhodj(:, :, :) ) if ( lbudget_rv ) call Budget_store_end( tbudgets(NBUDGET_RV), 'CEDS', prvs(:, :, :) * prhodj(:, :, :) ) if ( lbudget_rc ) call Budget_store_end( tbudgets(NBUDGET_RC), 'CEDS', prcs(:, :, :) * prhodj(:, :, :) ) - !Remark: PRIS is not modified but source term kept for better coherence with lima_adjust and lima_notadjust if ( lbudget_ri ) call Budget_store_end( tbudgets(NBUDGET_RI), 'CEDS', pris(:, :, :) * prhodj(:, :, :) ) if ( lbudget_sv ) then if ( lwarm ) & diff --git a/src/MNH/lima_bergeron.f90 b/src/MNH/lima_bergeron.f90 index 9105c78d6f07be74f84fce86c33fe2c3a240f6e5..7a4967708e09ec8b49e850a2583fd47a7c04ee6d 100644 --- a/src/MNH/lima_bergeron.f90 +++ b/src/MNH/lima_bergeron.f90 @@ -10,8 +10,7 @@ INTERFACE SUBROUTINE LIMA_BERGERON (LDCOMPUTE, & PRCT, PRIT, PCIT, PLBDI, & PSSIW, PAI, PCJ, PLVFACT, PLSFACT, & - P_TH_BERFI, P_RC_BERFI, & - PA_TH, PA_RC, PA_RI ) + P_TH_BERFI, P_RC_BERFI ) ! LOGICAL, DIMENSION(:),INTENT(IN) :: LDCOMPUTE ! @@ -28,10 +27,6 @@ REAL, DIMENSION(:), INTENT(IN) :: PLSFACT ! ! REAL, DIMENSION(:), INTENT(INOUT) :: P_TH_BERFI REAL, DIMENSION(:), INTENT(INOUT) :: P_RC_BERFI -! -REAL, DIMENSION(:), INTENT(INOUT) :: PA_TH -REAL, DIMENSION(:), INTENT(INOUT) :: PA_RC -REAL, DIMENSION(:), INTENT(INOUT) :: PA_RI !! END SUBROUTINE LIMA_BERGERON END INTERFACE @@ -41,8 +36,7 @@ END MODULE MODI_LIMA_BERGERON SUBROUTINE LIMA_BERGERON( LDCOMPUTE, & PRCT, PRIT, PCIT, PLBDI, & PSSIW, PAI, PCJ, PLVFACT, PLSFACT, & - P_TH_BERFI, P_RC_BERFI, & - PA_TH, PA_RC, PA_RI ) + P_TH_BERFI, P_RC_BERFI ) ! ############################################################# ! !! PURPOSE @@ -89,18 +83,9 @@ REAL, DIMENSION(:), INTENT(IN) :: PLSFACT ! REAL, DIMENSION(:), INTENT(INOUT) :: P_TH_BERFI REAL, DIMENSION(:), INTENT(INOUT) :: P_RC_BERFI ! -REAL, DIMENSION(:), INTENT(INOUT) :: PA_TH -REAL, DIMENSION(:), INTENT(INOUT) :: PA_RC -REAL, DIMENSION(:), INTENT(INOUT) :: PA_RI -! -!* 0.2 Declarations of local variables : -! -! !------------------------------------------------------------------------------- ! -! -!* 1. Bergeron-Findeisen process -! -------------------------- +! Bergeron-Findeisen process ! P_TH_BERFI(:) = 0.0 P_RC_BERFI(:) = 0.0 @@ -111,11 +96,6 @@ WHERE( (PRCT(:)>XRTMIN(2)) .AND. (PRIT(:)>XRTMIN(4)) .AND. (PCIT(:)>XCTMIN(4)) . P_TH_BERFI(:) = - P_RC_BERFI(:)*(PLSFACT(:)-PLVFACT(:)) END WHERE ! -PA_RC(:) = PA_RC(:) + P_RC_BERFI(:) -PA_RI(:) = PA_RI(:) - P_RC_BERFI(:) -PA_TH(:) = PA_TH(:) + P_TH_BERFI(:) -! -! !------------------------------------------------------------------------------- ! END SUBROUTINE LIMA_BERGERON diff --git a/src/MNH/lima_ccn_activation.f90 b/src/MNH/lima_ccn_activation.f90 index b7786ea4f056c16c1f632f33e51df67f572c71d1..fa0a276ebcc591f7dc6dbdbdaf505f044d97c6ba 100644 --- a/src/MNH/lima_ccn_activation.f90 +++ b/src/MNH/lima_ccn_activation.f90 @@ -102,7 +102,7 @@ use modd_field, only: TFIELDDATA, TYPEREAL USE MODD_IO, ONLY: TFILEDATA USE MODD_LUNIT_n, ONLY: TLUOUT USE MODD_PARAMETERS, ONLY: JPHEXT, JPVEXT -USE MODD_PARAM_LIMA, ONLY: LACTIT, NMOD_CCN, XCTMIN, XKHEN_MULTI, XRTMIN, XLIMIT_FACTOR +USE MODD_PARAM_LIMA, ONLY: LADJ, LACTIT, NMOD_CCN, XCTMIN, XKHEN_MULTI, XRTMIN, XLIMIT_FACTOR USE MODD_PARAM_LIMA_WARM, ONLY: XWMIN, NAHEN, NHYP, XAHENINTP1, XAHENINTP2, XCSTDCRIT, XHYPF12, & XHYPINTP1, XHYPINTP2, XTMIN, XHYPF32, XPSI3, XAHENG, XAHENG2, XPSI1, & XLBC, XLBEXC @@ -167,7 +167,7 @@ REAL, DIMENSION(:), ALLOCATABLE :: ZZW1, ZZW2, ZZW3, ZZW4, ZZW5, ZZW6, & REAL, DIMENSION(:,:), ALLOCATABLE :: ZTMP, ZCHEN_MULTI ! REAL, DIMENSION(SIZE(PRHODREF,1),SIZE(PRHODREF,2),SIZE(PRHODREF,3)) & - :: ZTDT, ZDRC, ZRVSAT, ZW, ZW2 + :: ZTDT, ZDRC, ZRVSAT, ZW, ZW2, ZCLDFR REAL, DIMENSION(SIZE(PNFT,1),SIZE(PNFT,2),SIZE(PNFT,3)) & :: ZCONC_TOT ! total CCN C. available ! @@ -215,22 +215,32 @@ ENDDO ! GNUCT(:,:,:) = .FALSE. ! -GNUCT(IIB:IIE,IJB:IJE,IKB:IKE) = PW_NU(IIB:IIE,IJB:IJE,IKB:IKE)>XWMIN & - .OR. PRVT(IIB:IIE,IJB:IJE,IKB:IKE)>ZRVSAT(IIB:IIE,IJB:IJE,IKB:IKE) -IF (LACTIT) GNUCT(IIB:IIE,IJB:IJE,IKB:IKE) = GNUCT(IIB:IIE,IJB:IJE,IKB:IKE) & - .OR. ZTDT(IIB:IIE,IJB:IJE,IKB:IKE)<XTMIN -! -GNUCT(IIB:IIE,IJB:IJE,IKB:IKE) = GNUCT(IIB:IIE,IJB:IJE,IKB:IKE) & - .AND. PT(IIB:IIE,IJB:IJE,IKB:IKE)>(XTT-22.) & - .AND. ZCONC_TOT(IIB:IIE,IJB:IJE,IKB:IKE)>XCTMIN(2) +IF (LADJ) THEN + GNUCT(IIB:IIE,IJB:IJE,IKB:IKE) = PW_NU(IIB:IIE,IJB:IJE,IKB:IKE)>XWMIN & + .OR. PRVT(IIB:IIE,IJB:IJE,IKB:IKE)>ZRVSAT(IIB:IIE,IJB:IJE,IKB:IKE) + IF (LACTIT) GNUCT(IIB:IIE,IJB:IJE,IKB:IKE) = GNUCT(IIB:IIE,IJB:IJE,IKB:IKE) & + .OR. ZTDT(IIB:IIE,IJB:IJE,IKB:IKE)<XTMIN +! + GNUCT(IIB:IIE,IJB:IJE,IKB:IKE) = GNUCT(IIB:IIE,IJB:IJE,IKB:IKE) & + .AND. PT(IIB:IIE,IJB:IJE,IKB:IKE)>(XTT-22.) & + .AND. ZCONC_TOT(IIB:IIE,IJB:IJE,IKB:IKE)>XCTMIN(2) +! + IF (LSUBG_COND) GNUCT(IIB:IIE,IJB:IJE,IKB:IKE) = GNUCT(IIB:IIE,IJB:IJE,IKB:IKE) & + .AND. PCLDFR(IIB:IIE,IJB:IJE,IKB:IKE)>0.01 + IF (.NOT. LSUBG_COND) GNUCT(IIB:IIE,IJB:IJE,IKB:IKE) = GNUCT(IIB:IIE,IJB:IJE,IKB:IKE) & + .AND. PRVT(IIB:IIE,IJB:IJE,IKB:IKE).GE.ZRVSAT(IIB:IIE,IJB:IJE,IKB:IKE) +ELSE + GNUCT(IIB:IIE,IJB:IJE,IKB:IKE) = PRVT(IIB:IIE,IJB:IJE,IKB:IKE).GE.ZRVSAT(IIB:IIE,IJB:IJE,IKB:IKE) & + .AND. PT(IIB:IIE,IJB:IJE,IKB:IKE)>(XTT-22.) & + .AND. ZCONC_TOT(IIB:IIE,IJB:IJE,IKB:IKE)>XCTMIN(2) +END IF ! -IF (LSUBG_COND) GNUCT(IIB:IIE,IJB:IJE,IKB:IKE) = GNUCT(IIB:IIE,IJB:IJE,IKB:IKE) & - .AND. PCLDFR(IIB:IIE,IJB:IJE,IKB:IKE)>0.01 -IF (.NOT. LSUBG_COND) GNUCT(IIB:IIE,IJB:IJE,IKB:IKE) = GNUCT(IIB:IIE,IJB:IJE,IKB:IKE) & - .AND. PRVT(IIB:IIE,IJB:IJE,IKB:IKE).GE.ZRVSAT(IIB:IIE,IJB:IJE,IKB:IKE) +IF (.NOT. LSUBG_COND) THEN + ZCLDFR(:,:,:) = 1. +ELSE + ZCLDFR(:,:,:) = PCLDFR(:,:,:) +END IF ! - - INUCT = COUNTJV( GNUCT(:,:,:),I1(:),I2(:),I3(:)) ! IF( INUCT >= 1 ) THEN @@ -255,8 +265,8 @@ IF( INUCT >= 1 ) THEN ALLOCATE(ZRHODREF(INUCT)) ALLOCATE(ZEXNREF(INUCT)) DO JL=1,INUCT - ZRCT(JL) = PRCT(I1(JL),I2(JL),I3(JL))/PCLDFR(I1(JL),I2(JL),I3(JL)) - ZCCT(JL) = PCCT(I1(JL),I2(JL),I3(JL))/PCLDFR(I1(JL),I2(JL),I3(JL)) + ZRCT(JL) = PRCT(I1(JL),I2(JL),I3(JL))/ZCLDFR(I1(JL),I2(JL),I3(JL)) + ZCCT(JL) = PCCT(I1(JL),I2(JL),I3(JL))/ZCLDFR(I1(JL),I2(JL),I3(JL)) ZZT(JL) = PT(I1(JL),I2(JL),I3(JL)) ZZW1(JL) = ZRVSAT(I1(JL),I2(JL),I3(JL)) ZZW2(JL) = PW_NU(I1(JL),I2(JL),I3(JL)) @@ -272,8 +282,10 @@ IF( INUCT >= 1 ) THEN ENDDO ENDDO ! - ZZW1(:) = 1.0/ZEPS + 1.0/ZZW1(:) & - + (((XLVTT+(XCPV-XCL)*(ZZT(:)-XTT))/ZZT(:))**2)/(XCPD*XRV) ! Psi2 + ALLOCATE(ZSMAX(INUCT)) + IF (LADJ) THEN + ZZW1(:) = 1.0/ZEPS + 1.0/ZZW1(:) & + + (((XLVTT+(XCPV-XCL)*(ZZT(:)-XTT))/ZZT(:))**2)/(XCPD*XRV) ! Psi2 ! ! !------------------------------------------------------------------------------- @@ -285,13 +297,12 @@ IF( INUCT >= 1 ) THEN ! Remark : in LIMA's nucleation parameterization, Smax=0.01 for a supersaturation of 1% ! ! ! - ZVEC1(:) = MAX( 1.0001, MIN( REAL(NAHEN)-0.0001, XAHENINTP1 * ZZT(:) + XAHENINTP2 ) ) - IVEC1(:) = INT( ZVEC1(:) ) - ZVEC1(:) = ZVEC1(:) - REAL( IVEC1(:) ) - ALLOCATE(ZSMAX(INUCT)) + ZVEC1(:) = MAX( 1.0001, MIN( REAL(NAHEN)-0.0001, XAHENINTP1 * ZZT(:) + XAHENINTP2 ) ) + IVEC1(:) = INT( ZVEC1(:) ) + ZVEC1(:) = ZVEC1(:) - REAL( IVEC1(:) ) ! ! - IF (LACTIT) THEN ! including a cooling rate + IF (LACTIT) THEN ! including a cooling rate ! ! Compute the tabulation of function of ZZW3 : ! @@ -300,20 +311,20 @@ IF( INUCT >= 1 ) THEN ! 2*pi*rho_l*G**(3/2) ! ! - ZZW4(:)=XPSI1( IVEC1(:)+1)*ZZW2(:)+XPSI3(IVEC1(:)+1)*ZZTDT(:) - ZZW5(:)=XPSI1( IVEC1(:) )*ZZW2(:)+XPSI3(IVEC1(:) )*ZZTDT(:) - WHERE (ZZW4(:) < 0. .OR. ZZW5(:) < 0.) - ZZW4(:) = 0. - ZZW5(:) = 0. - END WHERE - ZZW3(:) = XAHENG( IVEC1(:)+1)*(ZZW4(:)**1.5)* ZVEC1(:) & - - XAHENG( IVEC1(:) )*(ZZW5(:)**1.5)*(ZVEC1(:) - 1.0) + ZZW4(:)=XPSI1( IVEC1(:)+1)*ZZW2(:)+XPSI3(IVEC1(:)+1)*ZZTDT(:) + ZZW5(:)=XPSI1( IVEC1(:) )*ZZW2(:)+XPSI3(IVEC1(:) )*ZZTDT(:) + WHERE (ZZW4(:) < 0. .OR. ZZW5(:) < 0.) + ZZW4(:) = 0. + ZZW5(:) = 0. + END WHERE + ZZW3(:) = XAHENG( IVEC1(:)+1)*(ZZW4(:)**1.5)* ZVEC1(:) & + - XAHENG( IVEC1(:) )*(ZZW5(:)**1.5)*(ZVEC1(:) - 1.0) ! Cste*((Psi1*w+Psi3*dT/dt)/(G))**1.5 - ZZW6(:) = XAHENG2( IVEC1(:)+1)*(ZZW4(:)**0.5)* ZVEC1(:) & - - XAHENG2( IVEC1(:) )*(ZZW5(:)**0.5)*(ZVEC1(:) - 1.0) + ZZW6(:) = XAHENG2( IVEC1(:)+1)*(ZZW4(:)**0.5)* ZVEC1(:) & + - XAHENG2( IVEC1(:) )*(ZZW5(:)**0.5)*(ZVEC1(:) - 1.0) ! ! - ELSE ! LACTIT , for clouds + ELSE ! LACTIT , for clouds ! ! ! Compute the tabulation of function of ZZW3 : @@ -323,32 +334,32 @@ IF( INUCT >= 1 ) THEN ! 2 pi rho_l * G**(3/2) ! ! - ZZW2(:)=MAX(ZZW2(:),0.) - ZZW3(:)=XAHENG(IVEC1(:)+1)*((XPSI1(IVEC1(:)+1)*ZZW2(:))**1.5)* ZVEC1(:) & - -XAHENG(IVEC1(:) )*((XPSI1(IVEC1(:) )*ZZW2(:))**1.5)*(ZVEC1(:)-1.0) + ZZW2(:)=MAX(ZZW2(:),0.) + ZZW3(:)=XAHENG(IVEC1(:)+1)*((XPSI1(IVEC1(:)+1)*ZZW2(:))**1.5)* ZVEC1(:) & + -XAHENG(IVEC1(:) )*((XPSI1(IVEC1(:) )*ZZW2(:))**1.5)*(ZVEC1(:)-1.0) ! - ZZW6(:)=XAHENG2(IVEC1(:)+1)*((XPSI1(IVEC1(:)+1)*ZZW2(:))**0.5)* ZVEC1(:) & - -XAHENG2(IVEC1(:) )*((XPSI1(IVEC1(:) )*ZZW2(:))**0.5)*(ZVEC1(:)-1.0) + ZZW6(:)=XAHENG2(IVEC1(:)+1)*((XPSI1(IVEC1(:)+1)*ZZW2(:))**0.5)* ZVEC1(:) & + -XAHENG2(IVEC1(:) )*((XPSI1(IVEC1(:) )*ZZW2(:))**0.5)*(ZVEC1(:)-1.0) ! - END IF ! LACTIT + END IF ! LACTIT ! ! ! (Psi1*w+Psi3*DT/Dt)**1.5 rho_air ! ZZW3 = ------------------------ * ------- ! 2*pi*rho_l*G**(3/2) Psi2 ! - ZZW5(:) = 1. - ZZW3(:) = (ZZW3(:)/ZZW1(:))*ZRHODREF(:) ! R.H.S. of Eq 9 of CPB 98 but - ! for multiple aerosol modes - WHERE (ZRCT(:) > XRTMIN(2) .AND. ZCCT(:) > XCTMIN(2)) - ZZW6(:) = ZZW6(:) * ZRHODREF(:) * ZCCT(:) / (XLBC*ZCCT(:)/ZRCT(:))**XLBEXC - ELSEWHERE - ZZW6(:)=0. - END WHERE + ZZW5(:) = 1. + ZZW3(:) = (ZZW3(:)/ZZW1(:))*ZRHODREF(:) ! R.H.S. of Eq 9 of CPB 98 but + ! for multiple aerosol modes + WHERE (ZRCT(:) > XRTMIN(2) .AND. ZCCT(:) > XCTMIN(2)) + ZZW6(:) = ZZW6(:) * ZRHODREF(:) * ZCCT(:) / (XLBC*ZCCT(:)/ZRCT(:))**XLBEXC + ELSEWHERE + ZZW6(:)=0. + END WHERE - WHERE (ZZW3(:) == 0. .AND. .NOT.(ZSW>0.)) - ZZW5(:) = -1. - END WHERE + WHERE (ZZW3(:) == 0. .AND. .NOT.(ZSW>0.)) + ZZW5(:) = -1. + END WHERE ! !------------------------------------------------------------------------------- ! @@ -362,13 +373,17 @@ IF( INUCT >= 1 ) THEN ! ! Interval bounds to tabulate sursaturation Smax ! Check with values used for tabulation in ini_lima_warm.f90 - ZS1 = 1.0E-5 ! corresponds to 0.001% supersaturation - ZS2 = 5.0E-2 ! corresponds to 5.0% supersaturation - ZXACC = 1.0E-10 ! Accuracy needed for the search in [NO UNITS] -! - ZSMAX(:) = ZRIDDR(ZS1,ZS2,ZXACC,ZZW3(:),ZZW6(:),INUCT) ! ZSMAX(:) is in [NO UNITS] - ZSMAX(:) = MIN(MAX(ZSMAX(:), ZSW(:)),ZS2) + ZS1 = 1.0E-5 ! corresponds to 0.001% supersaturation + ZS2 = 5.0E-2 ! corresponds to 5.0% supersaturation + ZXACC = 1.0E-10 ! Accuracy needed for the search in [NO UNITS] ! + ZSMAX(:) = ZRIDDR(ZS1,ZS2,ZXACC,ZZW3(:),ZZW6(:),INUCT) ! ZSMAX(:) is in [NO UNITS] + ZSMAX(:) = MIN(MAX(ZSMAX(:), ZSW(:)),ZS2) + ! + ELSE + ZSMAX(:) = ZSW(:) + ZZW5(:) = 1. + END IF ! !------------------------------------------------------------------------------- ! @@ -637,7 +652,7 @@ DO JL = 1, NPTS fl(JL)=fnew(JL) else if (PX2 .lt. 0.05) then PX2 = PX2 + 1.0E-2 - PRINT*, 'PX2 ALWAYS too small, we put a greater one : PX2 =',PX2 +! PRINT*, 'PX2 ALWAYS too small, we put a greater one : PX2 =',PX2 fh(JL) = SINGL_FUNCSMAX(PX2,PZZW3(JL),PZZW6(JL),JL) go to 100 end if @@ -658,7 +673,7 @@ DO JL = 1, NPTS PZRIDDR(JL)=PX2 else if (PX2 .lt. 0.05) then PX2 = PX2 + 1.0E-2 - PRINT*, 'PX2 too small, we put a greater one : PX2 =',PX2 +! PRINT*, 'PX2 too small, we put a greater one : PX2 =',PX2 fh(JL) = SINGL_FUNCSMAX(PX2,PZZW3(JL),PZZW6(JL),JL) go to 100 else diff --git a/src/MNH/lima_cold_slow_processes.f90 b/src/MNH/lima_cold_slow_processes.f90 index 9fcacdd5a39b10fc469e99ffba04621f848456a7..29c1aecbe47c04efb136d3175a07def0a5d552e9 100644 --- a/src/MNH/lima_cold_slow_processes.f90 +++ b/src/MNH/lima_cold_slow_processes.f90 @@ -80,6 +80,7 @@ END MODULE MODI_LIMA_COLD_SLOW_PROCESSES ! P. Wautelet 05/2016-04/2018: new data structures and calls for I/O ! P. Wautelet 28/05/2019: move COUNTJV function to tools.f90 ! P. Wautelet 03/2020: use the new data structures and subroutines for budgets +! J. Wurtz 03/2022: new snow characteristics ! !------------------------------------------------------------------------------- ! @@ -94,16 +95,17 @@ USE MODD_CST, ONLY: XP00, XRD, XRV, XMV, XMD, XCPD, XCPV, & XCL, XCI, XTT, XLSTT, XALPI, XBETAI, XGAMI USE MODD_NSV, ONLY: NSV_LIMA_NI USE MODD_PARAMETERS, ONLY: JPHEXT, JPVEXT -USE MODD_PARAM_LIMA, ONLY: LSNOW, XRTMIN, XCTMIN, XALPHAI, XALPHAS, & - XNUI -USE MODD_PARAM_LIMA_COLD, ONLY: XLBI, XLBEXI, XLBS, XLBEXS, XBI, XCXS, XCCS, & +USE MODD_PARAM_LIMA, ONLY: LSNOW, LSNOW_T, XRTMIN, XCTMIN, & + XALPHAI, XALPHAS, XNUI, XNUS +USE MODD_PARAM_LIMA_COLD, ONLY: XLBI, XLBEXI, XLBS, XLBEXS, XNS, XBI, XCXS, XCCS, & XLBDAS_MAX, XDSCNVI_LIM, XLBDASCNVI_MAX, & XC0DEPSI, XC1DEPSI, XR0DEPSI, XR1DEPSI, & XSCFAC, X1DEPS, X0DEPS, XEX1DEPS, XEX0DEPS, & XDICNVS_LIM, XLBDAICNVS_LIM, & XC0DEPIS, XC1DEPIS, XR0DEPIS, XR1DEPIS, & XCOLEXIS, XAGGS_CLARGE1, XAGGS_CLARGE2, & - XAGGS_RLARGE1, XAGGS_RLARGE2 + XAGGS_RLARGE1, XAGGS_RLARGE2, XBS, & + XLBDAS_MIN,XFVELOS,XTRANS_MP_GAMMAS use mode_budget, only: Budget_store_init, Budget_store_end use mode_tools, only: Countjv @@ -316,9 +318,19 @@ IF( IMICRO >= 1 ) THEN ZLBDAI(:) = ( XLBI*ZCIT(:) / ZRIT(:) )**XLBEXI END WHERE ZLBDAS(:) = 1.E10 - WHERE (ZRST(:)>XRTMIN(5) ) - ZLBDAS(:) = XLBS*( ZRHODREF(:)*ZRST(:) )**XLBEXS - END WHERE + IF (LSNOW_T) THEN + WHERE(ZZT(:)>263.15 .AND. ZRST(:)>XRTMIN(5)) + ZLBDAS(:) = MAX(MIN(XLBDAS_MAX, 10**(14.554-0.0423*ZZT(:))),XLBDAS_MIN) + END WHERE + WHERE(ZZT(:)<=263.15 .AND. ZRST(:)>XRTMIN(5)) + ZLBDAS(:) = MAX(MIN(XLBDAS_MAX, 10**(6.226-0.0106*ZZT(:))),XLBDAS_MIN) + END WHERE + ZLBDAS(:) = ZLBDAS(:) * XTRANS_MP_GAMMAS + ELSE + WHERE (ZRST(:)>XRTMIN(5) ) + ZLBDAS(:) = MAX(MIN(XLBDAS_MAX,XLBS*( ZRHODREF(:)*ZRST(:) )**XLBEXS),XLBDAS_MIN) + END WHERE + END IF ! ZKA(:) = 2.38E-2 + 0.0071E-2 * ( ZZT(:) - XTT ) ! k_a ZDV(:) = 0.211E-4 * (ZZT(:)/XTT)**1.94 * (XP00/ZPRES(:)) ! D_v @@ -342,16 +354,11 @@ IF( IMICRO >= 1 ) THEN call Budget_store_init( tbudgets(NBUDGET_SV1 - 1 + nsv_lima_ni), 'CNVI', pcis(:, :, :) * prhodj(:, :, :) ) end if - WHERE ( ZRST(:)>XRTMIN(5) ) - ZLBDAS(:) = MIN( XLBDAS_MAX, & - XLBS*( ZRHODREF(:)*MAX( ZRST(:),XRTMIN(5) ) )**XLBEXS ) - END WHERE ZZW(:) = 0.0 WHERE ( ZLBDAS(:)<XLBDASCNVI_MAX .AND. (ZRST(:)>XRTMIN(5)) & .AND. (ZSSI(:)<0.0) ) ZZW(:) = (ZLBDAS(:)*XDSCNVI_LIM)**(XALPHAS) - ZZX(:) = ( -ZSSI(:)/ZAI(:) ) * (XCCS*ZLBDAS(:)**XCXS)/ZRHODREF(:) * (ZZW(:)**XNUI) & - * EXP(-ZZW(:)) + ZZX(:) = ( -ZSSI(:)/ZAI(:) ) * (XNS*ZRST(:)*ZLBDAS(:)**XBS) * (ZZW(:)**XNUS) * EXP(-ZZW(:)) ! ZZW(:) = MIN( ( XR0DEPSI+XR1DEPSI*ZCJ(:) )*ZZX(:),ZRSS(:) ) ZRIS(:) = ZRIS(:) + ZZW(:) @@ -384,8 +391,11 @@ IF( IMICRO >= 1 ) THEN ZZW(:) = 0.0 WHERE ( (ZRST(:)>XRTMIN(5)) .AND. (ZRSS(:)>ZRTMIN(5)) ) - ZZW(:) = ( ZSSI(:)/(ZRHODREF(:)*ZAI(:)) ) * & - ( X0DEPS*ZLBDAS(:)**XEX0DEPS + X1DEPS*ZCJ(:)*ZLBDAS(:)**XEX1DEPS ) + ZZW(:) = ( ZRST(:)*ZSSI(:)/(ZAI(:)) ) * & + ( X0DEPS*ZLBDAS(:)**XEX0DEPS + & + (X1DEPS*ZCJ(:)*(1+0.5*(XFVELOS/ZLBDAS(:))**XALPHAS)**(-XNUS+XEX1DEPS/XALPHAS) * & + (ZLBDAS(:))**(XEX1DEPS+XBS))) + ZZW(:) = MIN( ZRVS(:),ZZW(:) )*(0.5+SIGN(0.5,ZZW(:))) & - MIN( ZRSS(:),ABS(ZZW(:)) )*(0.5-SIGN(0.5,ZZW(:))) ZRSS(:) = ZRSS(:) + ZZW(:) @@ -420,8 +430,6 @@ IF( IMICRO >= 1 ) THEN ZZW(:) = (ZLBDAI(:)*XDICNVS_LIM)**(XALPHAI) ZZX(:) = ( ZSSI(:)/ZAI(:) )*ZCIT(:) * (ZZW(:)**XNUI) *EXP(-ZZW(:)) ! -! Correction BVIE -! ZZW(:) = MAX( MIN( ( XR0DEPIS + XR1DEPIS*ZCJ(:) )*ZZX(:)/ZRHODREF(:) & ZZW(:) = MAX( MIN( ( XR0DEPIS + XR1DEPIS*ZCJ(:) )*ZZX(:) & ,ZRIS(:) ) + ZRTMIN(5), ZRTMIN(5) ) - ZRTMIN(5) ZRIS(:) = ZRIS(:) - ZZW(:) @@ -458,7 +466,7 @@ IF( IMICRO >= 1 ) THEN WHERE ( (ZRIT(:)>XRTMIN(4)) .AND. (ZRST(:)>XRTMIN(5)) .AND. (ZRIS(:)>ZRTMIN(4)) & .AND. (ZCIS(:)>ZCTMIN(4)) ) ZZW1(:,3) = (ZLBDAI(:) / ZLBDAS(:))**3 - ZZW1(:,1) = (ZCIT(:)*(XCCS*ZLBDAS(:)**XCXS)/ZRHODREF(:)*EXP( XCOLEXIS*(ZZT(:)-XTT) )) & + ZZW1(:,1) = (ZCIT(:)*(XNS*ZRST(:)*ZLBDAS(:)**XBS)*EXP(XCOLEXIS*(ZZT(:)-XTT) ))*ZRHODREF(:) & / (ZLBDAI(:)**3) ZZW1(:,2) = MIN( ZZW1(:,1)*(XAGGS_CLARGE1+XAGGS_CLARGE2*ZZW1(:,3)),ZCIS(:) ) ZCIS(:) = ZCIS(:) - ZZW1(:,2) diff --git a/src/MNH/lima_collisional_ice_breakup.f90 b/src/MNH/lima_collisional_ice_breakup.f90 new file mode 100644 index 0000000000000000000000000000000000000000..c5afbb5914fe20f4a7c18761b3fa0e1c6318391a --- /dev/null +++ b/src/MNH/lima_collisional_ice_breakup.f90 @@ -0,0 +1,388 @@ +!MNH_LIC Copyright 2018-2021 CNRS, Meteo-France and Universite Paul Sabatier +!MNH_LIC This is part of the Meso-NH software governed by the CeCILL-C licence +!MNH_LIC version 1. See LICENSE, CeCILL-C_V1-en.txt and CeCILL-C_V1-fr.txt +!MNH_LIC for details. version 1. +!------------------------------------------------------------------------------- +! ######################################## + MODULE MODI_LIMA_COLLISIONAL_ICE_BREAKUP +! ######################################## +! +INTERFACE + SUBROUTINE LIMA_COLLISIONAL_ICE_BREAKUP (LDCOMPUTE, & + PRHODREF, & + PRIT, PRST, PRGT, PCIT, & + PLBDS, PLBDG, & + P_RI_CIBU, P_CI_CIBU ) +! +LOGICAL, DIMENSION(:),INTENT(IN) :: LDCOMPUTE +! +REAL, DIMENSION(:), INTENT(IN) :: PRHODREF +! +REAL, DIMENSION(:), INTENT(IN) :: PRIT +REAL, DIMENSION(:), INTENT(IN) :: PRST +REAL, DIMENSION(:), INTENT(IN) :: PRGT +REAL, DIMENSION(:), INTENT(IN) :: PCIT +REAL, DIMENSION(:), INTENT(IN) :: PLBDS +REAL, DIMENSION(:), INTENT(IN) :: PLBDG +! +REAL, DIMENSION(:), INTENT(OUT) :: P_RI_CIBU +REAL, DIMENSION(:), INTENT(OUT) :: P_CI_CIBU +! +END SUBROUTINE LIMA_COLLISIONAL_ICE_BREAKUP +END INTERFACE +END MODULE MODI_LIMA_COLLISIONAL_ICE_BREAKUP +! +! ####################################################################### + SUBROUTINE LIMA_COLLISIONAL_ICE_BREAKUP (LDCOMPUTE, & + PRHODREF, & + PRIT, PRST, PRGT, PCIT, & + PLBDS, PLBDG, & + P_RI_CIBU, P_CI_CIBU ) +! ####################################################################### +! +!! PURPOSE +!! ------- +!! Compute the collisional ice break-up (secondary ice production process) +!! +!! AUTHOR +!! ------ +!! J.-P. Pinty * Laboratoire d'Aerologie* +!! T. Hoarau * Laboratoire d'Aerologie* +!! +!! MODIFICATIONS +!! ------------- +!! Original 04/2022 duplicate from original for LIMA_SPLIT +! B. Vié 04/2022 Adapt to the new snow characteristics +! +!------------------------------------------------------------------------------- +! +!* 0. DECLARATIONS +! ------------ +! +USE MODD_PARAM_LIMA, ONLY : LCIBU, XRTMIN, XCTMIN, XCEXVT, XALPHAS, XNUS, XNDEBRIS_CIBU + +USE MODD_PARAM_LIMA_COLD, ONLY : XBS, XCS, XDS, XFVELOS, XMNU0 +USE MODD_PARAM_LIMA_MIXED, ONLY : XCG, XDG, XCXG, & + XCIBUINTP_S, XCIBUINTP1_S, XCIBUINTP2_S, & + XCIBUINTP_G, XCIBUINTP1_G, & + XFACTOR_CIBU_NI, XFACTOR_CIBU_RI, & + XMOMGG_CIBU_1, XMOMGG_CIBU_2, & + XMOMGS_CIBU_1, XMOMGS_CIBU_2, XMOMGS_CIBU_3, & + NGAMINC, XGAMINC_CIBU_S, XGAMINC_CIBU_G +! +IMPLICIT NONE +! +!* 0.1 Declarations of dummy arguments : +! +! +LOGICAL, DIMENSION(:),INTENT(IN) :: LDCOMPUTE +! +REAL, DIMENSION(:), INTENT(IN) :: PRHODREF +! +REAL, DIMENSION(:), INTENT(IN) :: PRIT +REAL, DIMENSION(:), INTENT(IN) :: PRST +REAL, DIMENSION(:), INTENT(IN) :: PRGT +REAL, DIMENSION(:), INTENT(IN) :: PCIT +REAL, DIMENSION(:), INTENT(IN) :: PLBDS +REAL, DIMENSION(:), INTENT(IN) :: PLBDG +! +REAL, DIMENSION(:), INTENT(OUT) :: P_RI_CIBU +REAL, DIMENSION(:), INTENT(OUT) :: P_CI_CIBU +! +! +!* 0.2 Declarations of local variables : +! +LOGICAL, DIMENSION(SIZE(PRST)) :: GCIBU ! Test where to compute collision process +LOGICAL, SAVE :: GFIRSTCALL = .TRUE. ! control switch for the first call +! +INTEGER :: ICIBU +INTEGER, DIMENSION(:), ALLOCATABLE :: IVEC2_S1,IVEC2_S2 ! Snow indice vector +INTEGER, DIMENSION(:), ALLOCATABLE :: IVEC2_G ! Graupel indice vector +INTEGER, PARAMETER :: I_SEED_PARAM = 26032012 +INTEGER, DIMENSION(:), ALLOCATABLE :: I_SEED +INTEGER :: NI_SEED +! +REAL, DIMENSION(:), ALLOCATABLE :: ZVEC1_S, ZVEC1_S1, ZVEC1_S2, & ! Work vectors + ZVEC1_S3, ZVEC1_S4, & + ZVEC1_S11, ZVEC1_S12, & ! for snow + ZVEC1_S21, ZVEC1_S22, & + ZVEC1_S31, ZVEC1_S32, & + ZVEC1_S41, ZVEC1_S42, & + ZVEC2_S1, ZVEC2_S2 +REAL, DIMENSION(:), ALLOCATABLE :: ZVEC1_G, ZVEC1_G1, ZVEC1_G2, & ! Work vectors + ZVEC2_G ! for graupel +REAL, DIMENSION(:), ALLOCATABLE :: ZFRAGMENTS, ZHARVEST +REAL, DIMENSION(SIZE(PRST)) :: ZINTG_SNOW_1, & ! incomplete gamma function + ZINTG_SNOW_2, & ! for snow + ZINTG_SNOW_3, & + ZINTG_SNOW_4 +REAL, DIMENSION(SIZE(PRST)) :: ZINTG_GRAUPEL_1, & ! incomplete gamma + ZINTG_GRAUPEL_2 ! function for graupel +REAL, DIMENSION(SIZE(PRST)) :: ZNI_CIBU, ZRI_CIBU ! CIBU rates +REAL, DIMENSION(SIZE(PRST)) :: ZFRAG_CIBU +REAL :: ZFACT1_XNDEBRIS, ZFACT2_XNDEBRIS +! +!------------------------------------------------------------------------------- + +GCIBU(:) = LCIBU .AND. (PRST(:)>XRTMIN(5)) .AND. (PRGT(:)>XRTMIN(6)) .AND. LDCOMPUTE(:) +ICIBU = COUNT( GCIBU(:) ) +! +P_RI_CIBU(:)=0. +P_CI_CIBU(:)=0. +! +IF (ICIBU > 0) THEN +! +! 1.3.0 randomization of XNDEBRIS_CIBU values +! + IF (GFIRSTCALL) THEN + CALL RANDOM_SEED(SIZE=NI_SEED) ! get size of seed + ALLOCATE(I_SEED(NI_SEED)) + I_SEED(:) = I_SEED_PARAM ! + CALL RANDOM_SEED(PUT=I_SEED) + GFIRSTCALL = .FALSE. + END IF +! + ALLOCATE(ZFRAGMENTS(ICIBU)) +! + IF (XNDEBRIS_CIBU >= 0.0) THEN + ZFRAGMENTS(:) = XNDEBRIS_CIBU + ELSE +! +! Mantissa gives the mean value (randomization around 10**MANTISSA) +! First digit after the comma provides the full range around 10**MANTISSA +! + ALLOCATE(ZHARVEST(ICIBU)) +! + ZFACT1_XNDEBRIS = AINT(XNDEBRIS_CIBU) + ZFACT2_XNDEBRIS = ABS(ANINT(10.0*(XNDEBRIS_CIBU - ZFACT1_XNDEBRIS))) +! + CALL RANDOM_NUMBER(ZHARVEST(:)) +! + ZFRAGMENTS(:) = 10.0**(ZFACT2_XNDEBRIS*ZHARVEST(:) + ZFACT1_XNDEBRIS) +! + DEALLOCATE(ZHARVEST) +! +! ZFRAGMENTS is a random variable containing the number of fragments per collision +! For XNDEBRIS_CIBU=-1.2345 => ZFRAGMENTS(:) = 10.0**(2.0*RANDOM_NUMBER(ZHARVEST(:)) - 1.0) +! and ZFRAGMENTS=[0.1, 10.0] centered around 1.0 +! + END IF +! +! +! 1.3.1 To compute the partial integration of snow gamma function +! +! 1.3.1.0 allocations +! + ALLOCATE(ZVEC1_S(ICIBU)) + ALLOCATE(ZVEC1_S1(ICIBU)) + ALLOCATE(ZVEC1_S2(ICIBU)) + ALLOCATE(ZVEC1_S3(ICIBU)) + ALLOCATE(ZVEC1_S4(ICIBU)) + ALLOCATE(ZVEC1_S11(ICIBU)) + ALLOCATE(ZVEC1_S12(ICIBU)) + ALLOCATE(ZVEC1_S21(ICIBU)) + ALLOCATE(ZVEC1_S22(ICIBU)) + ALLOCATE(ZVEC1_S31(ICIBU)) + ALLOCATE(ZVEC1_S32(ICIBU)) + ALLOCATE(ZVEC1_S41(ICIBU)) + ALLOCATE(ZVEC1_S42(ICIBU)) + ALLOCATE(ZVEC2_S1(ICIBU)) + ALLOCATE(IVEC2_S1(ICIBU)) + ALLOCATE(ZVEC2_S2(ICIBU)) + ALLOCATE(IVEC2_S2(ICIBU)) +! +! +! 1.3.1.1 select the PLBDS +! + ZVEC1_S(:) = PACK( PLBDS(:),MASK=GCIBU(:) ) +! +! +! 1.3.1.2 find the next lower indice for the PLBDS in the +! geometrical set of Lbda_s used to tabulate some moments of the +! incomplete gamma function, for boundary 1 (0.2 mm) +! + ZVEC2_S1(1:ICIBU) = MAX( 1.0001, MIN( FLOAT(NGAMINC)-0.0001,XCIBUINTP_S & + * LOG( ZVEC1_S(1:ICIBU) ) + XCIBUINTP1_S ) ) + IVEC2_S1(1:ICIBU) = INT( ZVEC2_S1(1:ICIBU) ) + ZVEC2_S1(1:ICIBU) = ZVEC2_S1(1:ICIBU) - FLOAT( IVEC2_S1(1:ICIBU) ) +! +! +! 1.3.1.3 find the next lower indice for the PLBDS in the +! geometrical set of Lbda_s used to tabulate some moments of the +! incomplete gamma function, for boundary 2 (1 mm) +! + ZVEC2_S2(1:ICIBU) = MAX( 1.0001, MIN( FLOAT(NGAMINC)-0.0001,XCIBUINTP_S & + * LOG( ZVEC1_S(1:ICIBU) ) + XCIBUINTP2_S ) ) + IVEC2_S2(1:ICIBU) = INT( ZVEC2_S2(1:ICIBU) ) + ZVEC2_S2(1:ICIBU) = ZVEC2_S2(1:ICIBU) - FLOAT( IVEC2_S2(1:ICIBU) ) +! +! +! 1.3.1.4 perform the linear interpolation of the +! normalized "0"-moment of the incomplete gamma function +! +! For lower boundary (0.2 mm) + ZVEC1_S11(1:ICIBU) = XGAMINC_CIBU_S(1,IVEC2_S1(1:ICIBU)+1) * ZVEC2_S1(1:ICIBU) & + - XGAMINC_CIBU_S(1,IVEC2_S1(1:ICIBU)) * (ZVEC2_S1(1:ICIBU)-1.0) +! +! For upper boundary (1 mm) + ZVEC1_S12(1:ICIBU) = XGAMINC_CIBU_S(1,IVEC2_S2(1:ICIBU)+1) * ZVEC2_S2(1:ICIBU) & + - XGAMINC_CIBU_S(1,IVEC2_S2(1:ICIBU)) * (ZVEC2_S2(1:ICIBU)-1.0) +! +! Computation of spectrum from 0.2 mm to 1 mm + ZVEC1_S1(1:ICIBU) = ZVEC1_S12(1:ICIBU) - ZVEC1_S11(1:ICIBU) +! +! +! 1.3.1.5 perform the linear interpolation of the +! normalized "XDS"-moment of the incomplete gamma function +! +! For lower boundary (0.2 mm) + ZVEC1_S21(1:ICIBU) = XGAMINC_CIBU_S(2,IVEC2_S1(1:ICIBU)+1) * ZVEC2_S1(1:ICIBU) & + - XGAMINC_CIBU_S(2,IVEC2_S1(1:ICIBU)) * (ZVEC2_S1(1:ICIBU)-1.0) +! +! For upper boundary (1 mm) + ZVEC1_S22(1:ICIBU) = XGAMINC_CIBU_S(2,IVEC2_S2(1:ICIBU)+1) * ZVEC2_S2(1:ICIBU) & + - XGAMINC_CIBU_S(2,IVEC2_S2(1:ICIBU)) * (ZVEC2_S2(1:ICIBU)-1.0) +! +! From 0.2 mm to 1 mm we need + ZVEC1_S2(1:ICIBU) = XMOMGS_CIBU_1 * (ZVEC1_S22(1:ICIBU) - ZVEC1_S21(1:ICIBU)) +! +! For lower boundary (0.2 mm) + ZVEC1_S31(1:ICIBU) = XGAMINC_CIBU_S(3,IVEC2_S1(1:ICIBU)+1) * ZVEC2_S1(1:ICIBU) & + - XGAMINC_CIBU_S(3,IVEC2_S1(1:ICIBU)) * (ZVEC2_S1(1:ICIBU)-1.0) +! +! For upper boundary (1 mm) + ZVEC1_S32(1:ICIBU) = XGAMINC_CIBU_S(3,IVEC2_S2(1:ICIBU)+1) * ZVEC2_S2(1:ICIBU) & + - XGAMINC_CIBU_S(3,IVEC2_S2(1:ICIBU)) * (ZVEC2_S2(1:ICIBU)-1.0) +! +! From 0.2 mm to 1 mm we need + ZVEC1_S3(1:ICIBU) = XMOMGS_CIBU_2 * (ZVEC1_S32(1:ICIBU) - ZVEC1_S31(1:ICIBU)) +! +! +! 1.3.1.6 perform the linear interpolation of the +! normalized "XBS+XDS"-moment of the incomplete gamma function +! +! For lower boundary (0.2 mm) + ZVEC1_S41(1:ICIBU) = XGAMINC_CIBU_S(4,IVEC2_S1(1:ICIBU)+1) * ZVEC2_S1(1:ICIBU) & + - XGAMINC_CIBU_S(4,IVEC2_S1(1:ICIBU)) * (ZVEC2_S1(1:ICIBU)-1.0) +! +! For upper boundary (1 mm) + ZVEC1_S42(1:ICIBU) = XGAMINC_CIBU_S(4,IVEC2_S2(1:ICIBU)+1) * ZVEC2_S2(1:ICIBU) & + - XGAMINC_CIBU_S(4,IVEC2_S2(1:ICIBU)) * (ZVEC2_S2(1:ICIBU)-1.0) +! +! From 0.2 mm to 1 mm we need + ZVEC1_S4(1:ICIBU) = XMOMGS_CIBU_3 * (ZVEC1_S42(1:ICIBU) - ZVEC1_S41(1:ICIBU)) +! + ZINTG_SNOW_1(:) = UNPACK ( VECTOR=ZVEC1_S1(:),MASK=GCIBU,FIELD=0.0 ) + ZINTG_SNOW_2(:) = UNPACK ( VECTOR=ZVEC1_S2(:),MASK=GCIBU,FIELD=0.0 ) + ZINTG_SNOW_3(:) = UNPACK ( VECTOR=ZVEC1_S3(:),MASK=GCIBU,FIELD=0.0 ) + ZINTG_SNOW_4(:) = UNPACK ( VECTOR=ZVEC1_S4(:),MASK=GCIBU,FIELD=0.0 ) +! +! +! 1.3.2 Compute the partial integration of graupel gamma function +! +! 1.3.2.0 allocations +! + ALLOCATE(ZVEC1_G(ICIBU)) + ALLOCATE(ZVEC1_G1(ICIBU)) + ALLOCATE(ZVEC1_G2(ICIBU)) + ALLOCATE(ZVEC2_G(ICIBU)) + ALLOCATE(IVEC2_G(ICIBU)) +! +! +! 1.3.2.1 select the PLBDG +! + ZVEC1_G(:) = PACK( PLBDG(:),MASK=GCIBU(:) ) +! +! +! 1.3.2.2 find the next lower indice for the PLBDG in the +! geometrical set of Lbda_g used to tabulate some moments of the +! incomplete gamma function, for the "2mm" boundary +! + ZVEC2_G(1:ICIBU) = MAX( 1.0001, MIN( FLOAT(NGAMINC)-0.0001,XCIBUINTP_G & + * LOG( ZVEC1_G(1:ICIBU) ) + XCIBUINTP1_G ) ) + IVEC2_G(1:ICIBU) = INT( ZVEC2_G(1:ICIBU) ) + ZVEC2_G(1:ICIBU) = ZVEC2_G(1:ICIBU) - FLOAT( IVEC2_G(1:ICIBU) ) +! +! +! 1.3.2.3 perform the linear interpolation of the +! normalized "2+XDG"-moment of the incomplete gamma function +! + ZVEC1_G1(1:ICIBU) = XGAMINC_CIBU_G(1,IVEC2_G(1:ICIBU)+1) * ZVEC2_G(1:ICIBU) & + - XGAMINC_CIBU_G(1,IVEC2_G(1:ICIBU)) * (ZVEC2_G(1:ICIBU)-1.0) +! +! From 2 mm to infinity we need + ZVEC1_G1(1:ICIBU) = XMOMGG_CIBU_1 * (1.0 - ZVEC1_G1(1:ICIBU)) +! +! +! 1.3.2.4 perform the linear interpolation of the +! normalized "2.0"-moment of the incomplete gamma function +! + ZVEC1_G2(1:ICIBU) = XGAMINC_CIBU_G(2,IVEC2_G(1:ICIBU)+1) * ZVEC2_G(1:ICIBU) & + - XGAMINC_CIBU_G(2,IVEC2_G(1:ICIBU)) * (ZVEC2_G(1:ICIBU)-1.0) +! +! From 2 mm to infinity we need + ZVEC1_G2(1:ICIBU) = XMOMGG_CIBU_2 * (1.0 - ZVEC1_G2(1:ICIBU)) +! +! + ZINTG_GRAUPEL_1(:) = UNPACK ( VECTOR=ZVEC1_G1(:),MASK=GCIBU,FIELD=0.0 ) + ZINTG_GRAUPEL_2(:) = UNPACK ( VECTOR=ZVEC1_G2(:),MASK=GCIBU,FIELD=0.0 ) +! +! +! 1.3.3 To compute final "CIBU" contributions +! + ZFRAG_CIBU(:) = UNPACK ( VECTOR=ZFRAGMENTS(:),MASK=GCIBU,FIELD=0.0 ) + ZNI_CIBU(:) = ZFRAG_CIBU(:) * (XFACTOR_CIBU_NI * PRST(:) / (PRHODREF(:)**XCEXVT)) * & + (XCG * ZINTG_GRAUPEL_1(:) * ZINTG_SNOW_1(:) * & + PLBDS(:)**(XBS) * PLBDG(:)**(XCXG-(XDG+2.0)) & + - XCS * ZINTG_GRAUPEL_2(:) * ZINTG_SNOW_2(:) * & + PLBDS(:)**(-XDS+XBS) * PLBDG(:)**(XCXG-2.0) * & + (1+(XFVELOS/PLBDS(:))**XALPHAS)**(-XNUS-XDS/XALPHAS) ) + + P_CI_CIBU(:) = MAX(ZNI_CIBU(:),0.) +! + DEALLOCATE(ZFRAGMENTS) +! +! Max value of rs removed by CIBU + ZRI_CIBU(:) = (XFACTOR_CIBU_RI * PRST(:) / (PRHODREF(:)**XCEXVT)) * & + (XCG * ZINTG_GRAUPEL_1(:) * ZINTG_SNOW_3(:) * & + PLBDG(:)**(XCXG-(XDG+2.0)) & + - XCS * ZINTG_GRAUPEL_2(:) * ZINTG_SNOW_4(:) * & + PLBDS(:)**(-XDS) * PLBDG(:)**(XCXG-2.0) * & + (1+(XFVELOS/PLBDS(:))**XALPHAS)**(-XNUS-(XBS+XDS)/XALPHAS) ) +! +! The value of rs removed by CIBU is determined by the mean mass of pristine ice + WHERE( PRIT(:)>XRTMIN(4) .AND. PCIT(:)>XCTMIN(4) ) + ZRI_CIBU(:) = MIN( ZRI_CIBU(:), ZNI_CIBU(:)*PRIT(:)/PCIT(:) ) + ELSE WHERE + ZRI_CIBU(:) = MIN( ZRI_CIBU(:), MAX( ZNI_CIBU(:)*XMNU0,XRTMIN(4) ) ) + END WHERE +! + P_RI_CIBU(:) = MAX(ZRI_CIBU(:), 0.) +! + DEALLOCATE(ZVEC1_S) + DEALLOCATE(ZVEC1_S1) + DEALLOCATE(ZVEC1_S2) + DEALLOCATE(ZVEC1_S3) + DEALLOCATE(ZVEC1_S4) + DEALLOCATE(ZVEC1_S11) + DEALLOCATE(ZVEC1_S12) + DEALLOCATE(ZVEC1_S21) + DEALLOCATE(ZVEC1_S22) + DEALLOCATE(ZVEC1_S31) + DEALLOCATE(ZVEC1_S32) + DEALLOCATE(ZVEC1_S41) + DEALLOCATE(ZVEC1_S42) + DEALLOCATE(ZVEC2_S1) + DEALLOCATE(IVEC2_S1) + DEALLOCATE(ZVEC2_S2) + DEALLOCATE(IVEC2_S2) + DEALLOCATE(ZVEC1_G) + DEALLOCATE(ZVEC1_G1) + DEALLOCATE(ZVEC1_G2) + DEALLOCATE(ZVEC2_G) + DEALLOCATE(IVEC2_G) +END IF +! +!------------------------------------------------------------------------------- +! +END SUBROUTINE LIMA_COLLISIONAL_ICE_BREAKUP diff --git a/src/MNH/lima_conversion_melting_snow.f90 b/src/MNH/lima_conversion_melting_snow.f90 index ff5a691461b7a5de36d44febb6c320ce909eee12..d1aa60aa4bce5b2f8b976da30a763c994472b5f6 100644 --- a/src/MNH/lima_conversion_melting_snow.f90 +++ b/src/MNH/lima_conversion_melting_snow.f90 @@ -55,15 +55,16 @@ END MODULE MODI_LIMA_CONVERSION_MELTING_SNOW !! ------------- !! Original 15/03/2018 !! +! J. Wurtz 03/2022: new snow characteristics !------------------------------------------------------------------------------- ! !* 0. DECLARATIONS ! ------------ ! USE MODD_CST, ONLY : XTT, XMV, XMD, XLVTT, XCPV, XCL, XESTT, XRV -USE MODD_PARAM_LIMA, ONLY : XRTMIN +USE MODD_PARAM_LIMA, ONLY : XRTMIN, XNUS, XALPHAS USE MODD_PARAM_LIMA_MIXED, ONLY : XFSCVMG -USE MODD_PARAM_LIMA_COLD, ONLY : X0DEPS, XEX0DEPS, X1DEPS, XEX1DEPS +USE MODD_PARAM_LIMA_COLD, ONLY : X0DEPS, XEX0DEPS, X1DEPS, XEX1DEPS, XBS, XFVELOS ! IMPLICIT NONE ! @@ -106,9 +107,10 @@ WHERE( (PRST(:)>XRTMIN(5)) .AND. (PT(:)>XTT) .AND. LDCOMPUTE(:) ) ! ! compute RSMLT ! - ZW(:) = XFSCVMG*MAX( 0.0,( -ZW(:) * & - ( X0DEPS* PLBDS(:)**XEX0DEPS + & - X1DEPS*PCJ(:)*PLBDS(:)**XEX1DEPS ) ))!- & + ZW(:) = XFSCVMG*MAX( 0.0,( -ZW(:) * PRST(:) * & + ( X0DEPS*PLBDS(:)**XEX0DEPS + & + X1DEPS*PCJ(:)*PLBDS(:)**(XEX1DEPS+XBS)* & + (1+0.5*(XFVELOS/PLBDS(:))**XALPHAS)**(-XNUS+XEX1DEPS/XALPHAS)) )) ! On ne tient pas compte de la collection de pluie et gouttelettes par la neige si T>0 !!!! ! Note that no heat is exchanged because the graupeln produced are still icy!!! P_RS_CMEL(:) = - ZW(:) diff --git a/src/MNH/lima_droplets_accretion.f90 b/src/MNH/lima_droplets_accretion.f90 index 8996b5425b8282ae43f1676dd6b09e55661b8787..d97d99d3ed0e10522453e5d3043f15d819a102f8 100644 --- a/src/MNH/lima_droplets_accretion.f90 +++ b/src/MNH/lima_droplets_accretion.f90 @@ -58,12 +58,13 @@ END MODULE MODI_LIMA_DROPLETS_ACCRETION !! ------------- !! Original 15/03/2018 !! +! Delbeke/Vie 03/2022 : KHKO option !------------------------------------------------------------------------------- ! !* 0. DECLARATIONS ! ------------ ! -USE MODD_PARAM_LIMA, ONLY : XRTMIN, XCTMIN +USE MODD_PARAM_LIMA, ONLY : XRTMIN, XCTMIN, LKHKO USE MODD_PARAM_LIMA_WARM, ONLY : XLAUTR, XAUTO1, XLAUTR_THRESHOLD, & XACCR4, XACCR5, XACCR3, XACCR2, XACCR1, & XACCR_CLARGE1, XACCR_CLARGE2, XACCR_RLARGE1, XACCR_RLARGE2, & @@ -109,50 +110,71 @@ ZW2(:) = 0.0 ZW3(:) = 0.0 ZW4(:) = 0.0 ! -WHERE( PRCT(:)>XRTMIN(2) .AND. PCCT(:)>XCTMIN(2) .AND. PRRT(:)>XRTMIN(3) .AND. PCRT(:)>XCTMIN(3) .AND. LDCOMPUTE(:) ) - ZW2(:) = MAX( 0.0,XLAUTR*PRHODREF(:)*PRCT(:)*(XAUTO1/PLBDC(:)**4-XLAUTR_THRESHOLD) ) ! L - ZW4(:) = XACCR1/PLBDR(:) -END WHERE -! -GACCR(:) = LDCOMPUTE(:) .AND. & - PRRT(:)>XRTMIN(3) .AND. & - PCRT(:)>XCTMIN(3) .AND. & - PRCT(:)>XRTMIN(2) .AND. & - PCCT(:)>XCTMIN(2) .AND. & - (PRRT(:)>1.2*ZW2(:)/PRHODREF(:) .OR. & +! +! +IF ( LKHKO ) THEN +! + GACCR(:) = PRRT(:)>XRTMIN(3) .AND. & + PRCT(:)>XRTMIN(2) .AND. & + PCCT(:)>XCTMIN(2) +! + WHERE ( GACCR(:) ) +! + ZW1(:) = 67.0 * ( PRCT(:) * PRRT(:) )**1.15 + P_RC_ACCR(:) = - ZW1(:) +! + ZW2(:) = ZW1(:) * PCCT(:) / PRCT(:) + P_CC_ACCR(:) = - ZW2(:) +! + END WHERE +! +ELSE +! + WHERE( PRCT(:)>XRTMIN(2) .AND. PCCT(:)>XCTMIN(2) .AND. PRRT(:)>XRTMIN(3) .AND. PCRT(:)>XCTMIN(3) .AND. LDCOMPUTE(:) ) + ZW2(:) = MAX( 0.0,XLAUTR*PRHODREF(:)*PRCT(:)*(XAUTO1/PLBDC(:)**4-XLAUTR_THRESHOLD) ) ! L + ZW4(:) = XACCR1/PLBDR(:) + END WHERE +! + GACCR(:) = LDCOMPUTE(:) .AND. & + PRRT(:)>XRTMIN(3) .AND. & + PCRT(:)>XCTMIN(3) .AND. & + PRCT(:)>XRTMIN(2) .AND. & + PCCT(:)>XCTMIN(2) .AND. & + (PRRT(:)>1.2*ZW2(:)/PRHODREF(:) .OR. & ZW4(:)>=MAX(XACCR2,XACCR3/(XACCR4/PLBDC(:)-XACCR5)) ) ! ! Accretion for D>100 10-6 m -WHERE( GACCR(:).AND.(ZW4(:)>1.E-4) ) - ZW3(:) = MIN(PLBDC3(:) / PLBDR3(:),1.E15) - ZW1(:) = ( PCCT(:)*PCRT(:) / PLBDC3(:) )*PRHODREF(:) - ZW2(:) = ZW1(:)*(XACCR_CLARGE1+XACCR_CLARGE2*ZW3(:)) + WHERE( GACCR(:).AND.(ZW4(:)>1.E-4) ) + ZW3(:) = MIN(PLBDC3(:) / PLBDR3(:),1.E15) + ZW1(:) = ( PCCT(:)*PCRT(:) / PLBDC3(:) )*PRHODREF(:) + ZW2(:) = ZW1(:)*(XACCR_CLARGE1+XACCR_CLARGE2*ZW3(:)) ! - P_CC_ACCR(:) = - ZW2(:) + P_CC_ACCR(:) = - ZW2(:) ! - ZW1(:) = ( ZW1(:) / PLBDC3(:) ) - ZW2(:) = ZW1(:)*(XACCR_RLARGE1+XACCR_RLARGE2*ZW3(:)) + ZW1(:) = ( ZW1(:) / PLBDC3(:) ) + ZW2(:) = ZW1(:)*(XACCR_RLARGE1+XACCR_RLARGE2*ZW3(:)) ! - P_RC_ACCR(:) = - ZW2(:) -END WHERE + P_RC_ACCR(:) = - ZW2(:) + END WHERE ! ! Accretion for D<100 10-6 m -WHERE( GACCR(:).AND.(ZW4(:)<=1.E-4) ) - ZW3(:) = MIN(PLBDC3(:) / PLBDR3(:), 1.E8) - ZW1(:) = ( PCCT(:)*PCRT(:) / PLBDC3(:) )*PRHODREF(:) - ZW1(:) = ZW1(:)/PLBDC3(:) + WHERE( GACCR(:).AND.(ZW4(:)<=1.E-4) ) + ZW3(:) = MIN(PLBDC3(:) / PLBDR3(:), 1.E8) + ZW1(:) = ( PCCT(:)*PCRT(:) / PLBDC3(:) )*PRHODREF(:) + ZW1(:) = ZW1(:)/PLBDC3(:) - ZW3(:) = ZW3(:)**2 - ZW2(:) = ZW1(:)*(XACCR_CSMALL1+XACCR_CSMALL2*ZW3(:)) + ZW3(:) = ZW3(:)**2 + ZW2(:) = ZW1(:)*(XACCR_CSMALL1+XACCR_CSMALL2*ZW3(:)) ! - P_CC_ACCR(:) = - ZW2(:) + P_CC_ACCR(:) = - ZW2(:) ! - ZW1(:) = ZW1(:) / PLBDC3(:) - ZW2(:) = ZW1(:)*(XACCR_RSMALL1+XACCR_RSMALL2*ZW3(:)) + ZW1(:) = ZW1(:) / PLBDC3(:) + ZW2(:) = ZW1(:)*(XACCR_RSMALL1+XACCR_RSMALL2*ZW3(:)) ! - P_RC_ACCR(:) = - ZW2(:) -END WHERE + P_RC_ACCR(:) = - ZW2(:) + END WHERE ! +END IF ! ! !------------------------------------------------------------------------------- diff --git a/src/MNH/lima_droplets_autoconversion.f90 b/src/MNH/lima_droplets_autoconversion.f90 index 044030f792dd2b64affa03bd8407470d8486691b..27090666289087303630e97d95b1c7836fd33d07 100644 --- a/src/MNH/lima_droplets_autoconversion.f90 +++ b/src/MNH/lima_droplets_autoconversion.f90 @@ -53,15 +53,17 @@ END MODULE MODI_LIMA_DROPLETS_AUTOCONVERSION !! ------------- !! Original 15/03/2018 !! B. Vie 02/03/2020 : missing CC process +! Delbeke/Vie 03/2022 : KHKO option !------------------------------------------------------------------------------- ! !* 0. DECLARATIONS ! ------------ ! -USE MODD_PARAM_LIMA, ONLY : XRTMIN, XCTMIN +USE MODD_PARAM_LIMA, ONLY : XRTMIN, XCTMIN, LKHKO USE MODD_PARAM_LIMA_WARM, ONLY : XLAUTR, XAUTO1, XLAUTR_THRESHOLD, & XITAUTR, XAUTO2, XITAUTR_THRESHOLD, & - XACCR4, XACCR5, XACCR3, XACCR1, XAC + XACCR4, XACCR5, XACCR3, XACCR1, XAC, XR0 +USE MODD_CST, ONLY : XPI, XRHOLW ! IMPLICIT NONE ! @@ -86,13 +88,6 @@ REAL, DIMENSION(SIZE(PRCT)) :: ZW1, ZW2, ZW3 ! work arrays ! !------------------------------------------------------------------------------- ! -! -! -!* 1. Autoconversion of cloud droplets (Berry-Reinhardt parameterization) -! ---------------------------------------------------------------------- -! -! -! P_RC_AUTO(:) = 0.0 P_CC_AUTO(:) = 0.0 P_CR_AUTO(:) = 0.0 @@ -100,27 +95,53 @@ P_CR_AUTO(:) = 0.0 ZW3(:) = 0.0 ZW2(:) = 0.0 ZW1(:) = 0.0 -WHERE( PRCT(:)>XRTMIN(2) .AND. PCCT(:)>XCTMIN(2) .AND. PLBDC(:)>0. .AND. LDCOMPUTE(:) ) - ZW2(:) = MAX( 0.0, & +! +IF (LKHKO) THEN +! +! 1. Autoconversion of cloud droplets (Berry-Reinhardt parameterization) +! ---------------------------------------------------------------------- +! + WHERE ( PRCT(:)>XRTMIN(2) .AND. PCCT(:)>XCTMIN(2) .AND. LDCOMPUTE(:) ) +! + ZW1(:)= 1350.0 * PRCT(:)**(2.47) * (PCCT(:)* PRHODREF(:)/1.0E6)**(-1.79) ! ZCCT in cm-3 +! + P_RC_AUTO(:) = - ZW1(:) +! + ZW2(:) = ZW1(:) * 3./(4.*XPI*XRHOLW*(XR0)**(3.)) + P_CR_AUTO(:) = ZW2(:) +! + ZW3(:) = - ZW1(:) * PCCT(:) / PRCT(:) + P_CC_AUTO(:) = ZW3(:) +! + END WHERE +! +ELSE +! +! 2. Autoconversion of cloud droplets (Berry-Reinhardt parameterization) +! ---------------------------------------------------------------------- +! + WHERE( PRCT(:)>XRTMIN(2) .AND. PCCT(:)>XCTMIN(2) .AND. PLBDC(:)>0. .AND. LDCOMPUTE(:) ) + ZW2(:) = MAX( 0.0, & XLAUTR*PRHODREF(:)*PRCT(:)*(XAUTO1/min(PLBDC(:),1.e9)**4-XLAUTR_THRESHOLD) ) ! L ! - ZW3(:) = MAX( 0.0, & + ZW3(:) = MAX( 0.0, & XITAUTR*ZW2(:)*PRCT(:)*(XAUTO2/PLBDC(:)-XITAUTR_THRESHOLD) ) ! L/tau ! - P_RC_AUTO(:) = - ZW3(:) + P_RC_AUTO(:) = - ZW3(:) ! - ZW1(:) = MIN( MIN( 1.2E4, & - (XACCR4/PLBDC(:)-XACCR5)/XACCR3 ), & - PLBDR(:)/XACCR1 ) ! D**-1 threshold diameter for - ! switching the autoconversion regimes - ! min (80 microns, D_h, D_r) - ZW3(:) = ZW3(:) * MAX( 0.0,ZW1(:) )**3 / XAC + ZW1(:) = MIN( MIN( 1.2E4, & + (XACCR4/PLBDC(:)-XACCR5)/XACCR3 ), & + PLBDR(:)/XACCR1 ) ! D**-1 threshold diameter for + ! switching the autoconversion regimes + ! min (80 microns, D_h, D_r) + ZW3(:) = ZW3(:) * MAX( 0.0,ZW1(:) )**3 / XAC ! - P_CC_AUTO(:) = -ZW3(:) - P_CR_AUTO(:) = ZW3(:) + P_CC_AUTO(:) = -ZW3(:) + P_CR_AUTO(:) = ZW3(:) ! -END WHERE + END WHERE ! +END IF ! !------------------------------------------------------------------------------- ! diff --git a/src/MNH/lima_droplets_riming_snow.f90 b/src/MNH/lima_droplets_riming_snow.f90 index 6bef29df3bfac250078b40d9c8f45d2d00cc4dfa..d5d32ad8f7a5cb3b01f7a46d415a5fcc91f6f9e4 100644 --- a/src/MNH/lima_droplets_riming_snow.f90 +++ b/src/MNH/lima_droplets_riming_snow.f90 @@ -66,6 +66,7 @@ END MODULE MODI_LIMA_DROPLETS_RIMING_SNOW !! ------------- !! Original 15/03/2018 ! P. Wautelet 26/04/2019: replace non-standard FLOAT function by REAL function +! J. Wurtz 03/2022: new snow characteristics ! !------------------------------------------------------------------------------- ! @@ -73,11 +74,11 @@ END MODULE MODI_LIMA_DROPLETS_RIMING_SNOW ! ------------ ! USE MODD_CST, ONLY : XTT -USE MODD_PARAM_LIMA, ONLY : XRTMIN, XCEXVT -USE MODD_PARAM_LIMA_MIXED, ONLY : NGAMINC, XRIMINTP1, XRIMINTP2, XGAMINC_RIM1, XGAMINC_RIM2, & - XCRIMSS, XEXCRIMSS, XSRIMCG, XEXSRIMCG, & +USE MODD_PARAM_LIMA, ONLY : XRTMIN, XCEXVT, XNUS, XALPHAS, LMURAKAMI +USE MODD_PARAM_LIMA_MIXED, ONLY : NGAMINC, XRIMINTP1, XRIMINTP2, XGAMINC_RIM1, XGAMINC_RIM2, XGAMINC_RIM4, & + XCRIMSS, XEXCRIMSS, XSRIMCG, XEXSRIMCG, XSRIMCG2, XSRIMCG3, XEXSRIMCG2, & XHMLINTP1, XHMLINTP2, XGAMINC_HMC, XHM_FACTS, XHMTMIN, XHMTMAX -USE MODD_PARAM_LIMA_COLD, ONLY : XMNU0 +USE MODD_PARAM_LIMA_COLD, ONLY : XMNU0, XBS, XFVELOS ! IMPLICIT NONE ! @@ -109,117 +110,120 @@ REAL, DIMENSION(:), INTENT(OUT) :: P_RS_HMS ! !* 0.2 Declarations of local variables : ! -LOGICAL, DIMENSION(SIZE(PRCT)) :: GRIM -! -REAL, DIMENSION(SIZE(PRCT)) :: ZZW1, ZZW2, ZZW3, ZZW4 +REAL, DIMENSION(SIZE(PRCT)) :: ZZW1, ZZW2, ZZW3, ZZW4, ZZW5 ! INTEGER, DIMENSION(SIZE(PRCT)) :: IVEC1,IVEC2 ! Vectors of indices REAL, DIMENSION(SIZE(PRCT)) :: ZVEC1,ZVEC2 ! Work vectors +INTEGER :: JI ! !------------------------------------------------------------------------------- ! ! -P_TH_RIM(:) = 0. -P_RC_RIM(:) = 0. -P_CC_RIM(:) = 0. -P_RS_RIM(:) = 0. -P_RG_RIM(:) = 0. -! -P_RI_HMS(:) = 0. -P_CI_HMS(:) = 0. -P_RS_HMS(:) = 0. ! -ZZW1(:) = 0. -ZZW2(:) = 0. -ZZW3(:) = 0. -ZZW4(:) = 0. +DO JI = 1, SIZE(PRCT) ! !* Cloud droplet riming of the aggregates ! -------------------------------------- ! + IF ( PRCT(JI)>XRTMIN(2) .AND. PRST(JI)>XRTMIN(5) .AND. PT(JI)<XTT .AND. LDCOMPUTE(JI) ) THEN ! -GRIM(:) = .False. -GRIM(:) = (PRCT(:)>XRTMIN(2)) .AND. (PRST(:)>XRTMIN(5)) .AND. (PT(:)<XTT) .AND. LDCOMPUTE(:) -! -WHERE( GRIM ) -! - ZVEC1(:) = PLBDS(:) + ZVEC1(JI) = PLBDS(JI) ! ! 1. find the next lower indice for the ZLBDAS in the geometrical ! set of Lbda_s used to tabulate some moments of the incomplete ! gamma function ! - ZVEC2(:) = MAX( 1.0001, MIN( REAL(NGAMINC)-0.0001, & - XRIMINTP1 * LOG( ZVEC1(:) ) + XRIMINTP2 ) ) - IVEC2(:) = INT( ZVEC2(:) ) - ZVEC2(:) = ZVEC2(:) - REAL( IVEC2(:) ) + ZVEC2(JI) = MAX( 1.0001, MIN( REAL(NGAMINC)-0.0001, & + XRIMINTP1 * LOG( ZVEC1(JI) ) + XRIMINTP2 ) ) + IVEC2(JI) = INT( ZVEC2(JI) ) + ZVEC2(JI) = ZVEC2(JI) - REAL( IVEC2(JI) ) ! ! 2. perform the linear interpolation of the normalized ! "2+XDS"-moment of the incomplete gamma function ! - ZVEC1(:) = XGAMINC_RIM1( IVEC2(:)+1 )* ZVEC2(:) & - - XGAMINC_RIM1( IVEC2(:) )*(ZVEC2(:) - 1.0) - ZZW1(:) = ZVEC1(:) + ZVEC1(JI) = XGAMINC_RIM1( IVEC2(JI)+1 )* ZVEC2(JI) & + - XGAMINC_RIM1( IVEC2(JI) )*(ZVEC2(JI) - 1.0) + ZZW1(JI) = ZVEC1(JI) ! ! 3. perform the linear interpolation of the normalized ! "XBS"-moment of the incomplete gamma function ! - ZVEC1(:) = XGAMINC_RIM2( IVEC2(:)+1 )* ZVEC2(:) & - - XGAMINC_RIM2( IVEC2(:) )*(ZVEC2(:) - 1.0) - ZZW2(:) = ZVEC1(:) + ZVEC1(JI) = XGAMINC_RIM2( IVEC2(JI)+1 )* ZVEC2(JI) & + - XGAMINC_RIM2( IVEC2(JI) )*(ZVEC2(JI) - 1.0) + ZZW2(JI) = ZVEC1(JI) ! ! 4. riming ! ! Cloud droplets collected - P_RC_RIM(:) = - XCRIMSS * PRCT(:) * PLBDS(:)**XEXCRIMSS * PRHODREF(:)**(-XCEXVT) - P_CC_RIM(:) = P_RC_RIM(:) *(PCCT(:)/PRCT(:)) ! Lambda_c**3 + P_RC_RIM(JI) = - XCRIMSS * PRCT(JI) * PRST(JI)*(1+(XFVELOS/PLBDS(JI))**XALPHAS)**(-XNUS+XEXCRIMSS/XALPHAS) & + * PRHODREF(JI)**(-XCEXVT+1) & + * (PLBDS(JI)) ** (XEXCRIMSS+XBS) + P_CC_RIM(JI) = P_RC_RIM(JI) *(PCCT(JI)/PRCT(JI)) ! Lambda_c**3 ! ! Cloud droplets collected on small aggregates add to snow - P_RS_RIM(:) = - P_RC_RIM(:) * ZZW1(:) + P_RS_RIM(JI) = - P_RC_RIM(JI) * ZZW1(JI) ! ! Cloud droplets collected on large aggregates add to graupel - P_RG_RIM(:) = - P_RC_RIM(:) - P_RS_RIM(:) + P_RG_RIM(JI) = - P_RC_RIM(JI) - P_RS_RIM(JI) ! - ! Large aggregates collecting droplets add to graupel (instant process ???) - ZZW3(:) = XSRIMCG * PLBDS(:)**XEXSRIMCG * (1.0 - ZZW2(:))/(PTSTEP*PRHODREF(:)) - P_RS_RIM(:) = P_RS_RIM(:) - ZZW3(:) - P_RG_RIM(:) = P_RG_RIM(:) + ZZW3(:) + IF (LMURAKAMI) THEN + ! Graupel formation based on Murakami + ZVEC1(JI) = XGAMINC_RIM4( IVEC2(JI)+1 )* ZVEC2(JI) & + - XGAMINC_RIM4( IVEC2(JI) )*(ZVEC2(JI) - 1.0) + ZZW5(JI) = ZVEC1(JI) + ZZW3(JI) = XSRIMCG *PRHODREF(JI)*PRST(JI)* PLBDS(JI)**(XEXSRIMCG+XBS) * (1.0 - ZZW2(JI))!/(PTSTEP*PRHODREF(JI)) + ZZW3(JI) = (P_RG_RIM(JI))*ZZW3(JI)/ & + MAX(1.E-10, & !-20 + XSRIMCG3*XSRIMCG2*PRST(JI)*PRHODREF(JI)*PLBDS(JI)**(XEXSRIMCG2)*(1.-ZZW5(JI))- & + XSRIMCG3*ZZW3(JI)) + ELSE + ! Large aggregates collecting droplets add to graupel (instant process ???) + ZZW3(JI) = PRST(JI)*(1.0 - ZZW2(JI))/PTSTEP + END IF + P_RS_RIM(JI) = P_RS_RIM(JI) - ZZW3(JI) + P_RG_RIM(JI) = P_RG_RIM(JI) + ZZW3(JI) ! - P_TH_RIM(:) = - P_RC_RIM(:)*(PLSFACT(:)-PLVFACT(:)) -END WHERE -! + P_TH_RIM(JI) = - P_RC_RIM(JI)*(PLSFACT(JI)-PLVFACT(JI)) + ELSE + P_TH_RIM(:) = 0. + P_RC_RIM(:) = 0. + P_CC_RIM(:) = 0. + P_RS_RIM(:) = 0. + P_RG_RIM(:) = 0. + END IF ! !* Hallett-Mossop ice production (HMS) ! ----------------------------------- ! -! -GRIM(:) = .False. -GRIM(:) = (PT(:)<XHMTMAX) .AND. (PT(:)>XHMTMIN) .AND. & - (PRST(:)>XRTMIN(5)) .AND. (PRCT(:)>XRTMIN(2)) .AND. & - LDCOMPUTE(:) -! -WHERE ( GRIM ) -! - ZVEC1(:) = PLBDC(:) - ZVEC2(:) = MAX( 1.0001, MIN( REAL(NGAMINC)-0.0001, & - XHMLINTP1 * LOG( ZVEC1(:) ) + XHMLINTP2 ) ) - IVEC2(:) = INT( ZVEC2(:) ) - ZVEC2(:) = ZVEC2(:) - REAL( IVEC2(:) ) - ZVEC1(:) = XGAMINC_HMC( IVEC2(:)+1 )* ZVEC2(:) & - - XGAMINC_HMC( IVEC2(:) )*(ZVEC2(:) - 1.0) - ZZW4(:) = ZVEC1(:) ! Large droplets -! - WHERE ( ZZW4(:)<0.99 ) - P_CI_HMS(:) = - P_RC_RIM(:) * (PCCT(:)/PRCT(:)) * (1.0-ZZW4(:)) * XHM_FACTS * & - MAX( 0.0, MIN( (PT(:)-XHMTMIN)/3.0,(XHMTMAX-PT(:))/2.0 ) ) ! CCHMSI -! - P_RI_HMS(:) = P_CI_HMS(:) * XMNU0 ! RCHMSI - P_RS_HMS(:) = - P_RI_HMS(:) - END WHERE - -END WHERE -! -! + IF ( PT(JI)<XHMTMAX .AND. PT(JI)>XHMTMIN .AND. & + PRST(JI)>XRTMIN(5) .AND. PRCT(JI)>XRTMIN(2) .AND. LDCOMPUTE(JI) ) THEN +! + ZVEC1(JI) = PLBDC(JI) + ZVEC2(JI) = MAX( 1.0001, MIN( REAL(NGAMINC)-0.0001, & + XHMLINTP1 * LOG( ZVEC1(JI) ) + XHMLINTP2 ) ) + IVEC2(JI) = INT( ZVEC2(JI) ) + ZVEC2(JI) = ZVEC2(JI) - REAL( IVEC2(JI) ) + ZVEC1(JI) = XGAMINC_HMC( IVEC2(JI)+1 )* ZVEC2(JI) & + - XGAMINC_HMC( IVEC2(JI) )*(ZVEC2(JI) - 1.0) + ZZW4(JI) = ZVEC1(JI) ! Large droplets +! + IF ( ZZW4(JI)<0.99 ) THEN + P_CI_HMS(JI) = - P_RC_RIM(JI) * (PCCT(JI)/PRCT(JI)) * (1.0-ZZW4(JI)) * XHM_FACTS * & + MAX( 0.0, MIN( (PT(JI)-XHMTMIN)/3.0,(XHMTMAX-PT(JI))/2.0 ) ) ! CCHMSI +! + P_RI_HMS(JI) = P_CI_HMS(JI) * XMNU0 ! RCHMSI + P_RS_HMS(JI) = - P_RI_HMS(JI) + ELSE + P_RI_HMS(:) = 0. + P_CI_HMS(:) = 0. + P_RS_HMS(:) = 0. + END IF + ELSE + P_RI_HMS(:) = 0. + P_CI_HMS(:) = 0. + P_RS_HMS(:) = 0. + END IF +END DO ! !------------------------------------------------------------------------------- ! diff --git a/src/MNH/lima_graupel.f90 b/src/MNH/lima_graupel.f90 index ad114da363f6c1616ce45ee6534f929d64845e2f..1883891a1a537d02e912df06c08e33cb07c15406 100644 --- a/src/MNH/lima_graupel.f90 +++ b/src/MNH/lima_graupel.f90 @@ -129,6 +129,7 @@ END MODULE MODI_LIMA_GRAUPEL !! ------------- !! Original 15/03/2018 ! P. Wautelet 26/04/2019: replace non-standard FLOAT function by REAL function +! J. Wurtz 03/2022: new snow characteristics ! !------------------------------------------------------------------------------- ! @@ -330,12 +331,12 @@ WHERE( GDRY ) * (ZVEC1(:) - 1.0) ZZW(:) = ZVEC3(:) ! - ZZW3(:) = XFSDRYG * ZZW(:) * EXP( XCOLEXSG*(PT(:)-XTT) ) & ! RSDRYG - rs collected by graupel in dry mode - *( PLBDS(:)**(XCXS-XBS) )*( PLBDG(:)**XCXG ) & - *( PRHODREF(:)**(-XCEXVT-1.) ) & - *( XLBSDRYG1/( PLBDG(:)**2 ) + & - XLBSDRYG2/( PLBDG(:) * PLBDS(:) ) + & - XLBSDRYG3/( PLBDS(:)**2) ) + ZZW3(:) = XFSDRYG * ZZW(:) * EXP( XCOLEXSG*(PT(:)-XTT) ) & ! RSDRYG - rs collected by graupel in dry mode + *( PRST(:))*( PLBDG(:)**XCXG ) & + *( PRHODREF(:)**(-XCEXVT) ) & + *( XLBSDRYG1/( PLBDG(:)**2 ) + & + XLBSDRYG2/( PLBDG(:) * PLBDS(:) ) + & + XLBSDRYG3/( PLBDS(:)**2) ) END WHERE ! !* 1.c Collection of rr in the dry mode @@ -413,6 +414,8 @@ WHERE( PRGT(:)>XRTMIN(6) .AND. LDCOMPUTE(:) ) ( ZZW5(:)+ZZW6(:) ) * & ( PRHODREF(:)*(XLMTT+(XCI-XCL)*(XTT-PT(:))) ) ) / & ( PRHODREF(:)*(XLMTT-XCL*(XTT-PT(:))) ) ) + !We must agregate, at least, the cold species + ZRWETG(:)=MAX(ZRWETG(:), ZZW5(:)+ZZW6(:)) END WHERE ! ! 1.f Wet mode and partial conversion to hail @@ -421,8 +424,8 @@ END WHERE ZZW(:) = 0.0 NHAIL = 0. IF (LHAIL) NHAIL = 1. -WHERE( LDCOMPUTE(:) .AND. PRGT(:)>XRTMIN(6) .AND. PT(:)<XTT & - .AND. ZRDRYG(:)>=ZRWETG(:) .AND. ZRWETG(:)>0.0 ) +WHERE( LDCOMPUTE(:) .AND. PRGT(:)>XRTMIN(6) .AND. PT(:)<XTT .AND. & + (ZRDRYG(:)-ZZW2(:)-ZZW3(:))>=(ZRWETG(:)-ZZW5(:)-ZZW6(:)) .AND. ZRWETG(:)>0.0 ) ! ! Mass of rain and cloud droplets frozen by graupel in wet mode : RCWETG + RRWETG = RWETG - RIWETG - RSWETG ZZW7(:) = ZRWETG(:) - ZZW5(:) - ZZW6(:) @@ -448,8 +451,8 @@ END WHERE ! 1.g Dry mode ! ------------ ! -WHERE( LDCOMPUTE(:) .AND. PRGT(:)>XRTMIN(6) .AND. PT(:)<XTT & - .AND. ZRDRYG(:)<ZRWETG(:) .AND. ZRDRYG(:)>0.0 ) +WHERE( LDCOMPUTE(:) .AND. PRGT(:)>XRTMIN(6) .AND. PT(:)<XTT .AND. & + (ZRDRYG(:)-ZZW2(:)-ZZW3(:))<(ZRWETG(:)-ZZW5(:)-ZZW6(:)) .AND. ZRDRYG(:)>0.0 ) ! P_RC_DRYG(:) = - ZZW1(:) P_CC_DRYG(:) = P_RC_DRYG(:) * PCCT(:)/MAX(PRCT(:),XRTMIN(2)) @@ -469,8 +472,8 @@ END WHERE ! ! BVIE test ZRDRYG<ZZW ????????????????????????? !GDRY(:) = (PT(:)<XHMTMAX) .AND. (PT(:)>XHMTMIN) .AND. (ZRDRYG(:)<ZZW(:))& -GDRY(:) = (PT(:)<XHMTMAX) .AND. (PT(:)>XHMTMIN) .AND. (ZRDRYG(:)<ZRWETG(:))& - .AND. (PRGT(:)>XRTMIN(6)) .AND. (PRCT(:)>XRTMIN(2)) .AND. LDCOMPUTE(:) +GDRY(:) = PT(:)<XHMTMAX .AND. PT(:)>XHMTMIN .AND. PRGT(:)>XRTMIN(6) .AND. PRCT(:)>XRTMIN(2) .AND. LDCOMPUTE(:) .AND. & + (ZRDRYG(:)-ZZW2(:)-ZZW3(:))<(ZRWETG(:)-ZZW5(:)-ZZW6(:)) ZZX(:)=9999. ZVEC1(:)=0. diff --git a/src/MNH/lima_ice_aggregation_snow.f90 b/src/MNH/lima_ice_aggregation_snow.f90 index 15e01ec84b33a508d8b30285ea944540185b1015..af815a498702f7fab7fe73ea159f7bb2c272b2f6 100644 --- a/src/MNH/lima_ice_aggregation_snow.f90 +++ b/src/MNH/lima_ice_aggregation_snow.f90 @@ -52,16 +52,18 @@ END MODULE MODI_LIMA_ICE_AGGREGATION_SNOW !! MODIFICATIONS !! ------------- !! Original 15/03/2018 -!! +! J. Wurtz 03/2022: new snow characteristics +! B. Vie 03/2022: Add option for 1-moment pristine ice +! !------------------------------------------------------------------------------- ! !* 0. DECLARATIONS ! ------------ ! USE MODD_CST, ONLY : XTT -USE MODD_PARAM_LIMA, ONLY : XRTMIN, XCTMIN +USE MODD_PARAM_LIMA, ONLY : XRTMIN, XCTMIN, XCEXVT, NMOM_I, XNUS, XALPHAS, XCEXVT USE MODD_PARAM_LIMA_COLD, ONLY : XBI, XCCS, XCXS, XCOLEXIS, XAGGS_CLARGE1, XAGGS_CLARGE2, & - XAGGS_RLARGE1, XAGGS_RLARGE2 + XAGGS_RLARGE1, XAGGS_RLARGE2, XFIAGGS, XBS, XNS, XFVELOS, XEXIAGGS ! IMPLICIT NONE ! @@ -99,19 +101,31 @@ P_RI_AGGS(:) = 0. P_CI_AGGS(:) = 0. ! ! -WHERE ( (PRIT(:)>XRTMIN(4)) .AND. (PRST(:)>XRTMIN(5)) .AND. LDCOMPUTE(:) ) - ZZW1(:) = (PLBDI(:) / PLBDS(:))**3 - ZZW2(:) = (PCIT(:)*(XCCS*PLBDS(:)**XCXS)/PRHODREF(:)*EXP( XCOLEXIS*(PT(:)-XTT) )) & - / (PLBDI(:)**3) - ZZW3(:) = ZZW2(:)*(XAGGS_CLARGE1+XAGGS_CLARGE2*ZZW1(:)) +IF (NMOM_I.EQ.1) THEN + WHERE ( (PRIT(:)>XRTMIN(4)) .AND. (PRST(:)>XRTMIN(5)) .AND. LDCOMPUTE(:) ) + ZZW1(:) = XFIAGGS * EXP( XCOLEXIS*(PT(:)-XTT) ) & + * PRIT(:) & + * PRST(:) * (1+(XFVELOS/PLBDS(:))**XALPHAS)**(-XNUS+XEXIAGGS/XALPHAS) & + * PRHODREF(:)**(-XCEXVT+1.) & + * ((PLBDS(:))**(XBS+XEXIAGGS)) +! + P_RI_AGGS(:) = - ZZW1(:) + END WHERE +ELSE + WHERE ( (PRIT(:)>XRTMIN(4)) .AND. (PRST(:)>XRTMIN(5)) .AND. LDCOMPUTE(:) ) + ZZW1(:) = (PLBDI(:) / PLBDS(:))**3 + ZZW2(:) = (PCIT(:)*(XNS*PRST(:)*PLBDS(:)**XBS)*EXP(XCOLEXIS*(PT(:)-XTT) ))*PRHODREF(:) & + / (PLBDI(:)**3) + ZZW3(:) = ZZW2(:)*(XAGGS_CLARGE1+XAGGS_CLARGE2*ZZW1(:)) ! - P_CI_AGGS(:) = - ZZW3(:) + P_CI_AGGS(:) = - ZZW3(:) ! - ZZW2(:) = ZZW2(:) / PLBDI(:)**XBI - ZZW2(:) = ZZW2(:)*(XAGGS_RLARGE1+XAGGS_RLARGE2*ZZW1(:)) + ZZW2(:) = ZZW2(:) / PLBDI(:)**XBI + ZZW2(:) = ZZW2(:)*(XAGGS_RLARGE1+XAGGS_RLARGE2*ZZW1(:)) ! - P_RI_AGGS(:) = - ZZW2(:) -END WHERE + P_RI_AGGS(:) = - ZZW2(:) + END WHERE +END IF ! ! !------------------------------------------------------------------------------- diff --git a/src/MNH/lima_ice_deposition.f90 b/src/MNH/lima_ice_deposition.f90 index 8c7c57e4091305b31d8906cec050cd18427f63cb..2b46227b80ded9618b03c77b75eb75ce0a90a458 100644 --- a/src/MNH/lima_ice_deposition.f90 +++ b/src/MNH/lima_ice_deposition.f90 @@ -8,16 +8,17 @@ ! ##################### ! INTERFACE - SUBROUTINE LIMA_ICE_DEPOSITION (PTSTEP, LDCOMPUTE, & - PRHODREF, PSSI, PAI, PCJ, PLSFACT, & - PRIT, PCIT, PLBDI, & - P_TH_DEPI, P_RI_DEPI, & - P_RI_CNVS, P_CI_CNVS ) + SUBROUTINE LIMA_ICE_DEPOSITION (PTSTEP, LDCOMPUTE, & + PRHODREF, PT, PSSI, PAI, PCJ, PLSFACT, & + PRIT, PCIT, PLBDI, & + P_TH_DEPI, P_RI_DEPI, & + P_RI_CNVS, P_CI_CNVS ) ! REAL, INTENT(IN) :: PTSTEP LOGICAL, DIMENSION(:),INTENT(IN) :: LDCOMPUTE ! REAL, DIMENSION(:), INTENT(IN) :: PRHODREF! Reference density +REAL, DIMENSION(:), INTENT(IN) :: PT ! abs. pressure at time t REAL, DIMENSION(:), INTENT(IN) :: PSSI ! abs. pressure at time t REAL, DIMENSION(:), INTENT(IN) :: PAI ! abs. pressure at time t REAL, DIMENSION(:), INTENT(IN) :: PCJ ! abs. pressure at time t @@ -40,7 +41,7 @@ END MODULE MODI_LIMA_ICE_DEPOSITION ! ! ########################################################################## SUBROUTINE LIMA_ICE_DEPOSITION (PTSTEP, LDCOMPUTE, & - PRHODREF, PSSI, PAI, PCJ, PLSFACT, & + PRHODREF, PT, PSSI, PAI, PCJ, PLSFACT, & PRIT, PCIT, PLBDI, & P_TH_DEPI, P_RI_DEPI, & P_RI_CNVS, P_CI_CNVS ) @@ -65,14 +66,16 @@ SUBROUTINE LIMA_ICE_DEPOSITION (PTSTEP, LDCOMPUTE, & !! MODIFICATIONS !! ------------- !! Original 15/03/2018 -!! +!! B. Vié 30/08/2021 Disable CNVS if LSNOW=F +!! B. Vie 03/2022 Add option for 1-moment pristine ice !------------------------------------------------------------------------------- ! !* 0. DECLARATIONS ! ------------ ! -USE MODD_PARAM_LIMA, ONLY : XRTMIN, XCTMIN, XALPHAI, XALPHAS, XNUI, XNUS -USE MODD_PARAM_LIMA_COLD, ONLY : XCXS, XCCS, & +USE MODD_PARAM_LIMA, ONLY : XRTMIN, XCTMIN, XALPHAI, XALPHAS, XNUI, XNUS,& + LSNOW, NMOM_I +USE MODD_PARAM_LIMA_COLD, ONLY : XCXS, XCCS, & XLBDAS_MAX, XDSCNVI_LIM, XLBDASCNVI_MAX, & XC0DEPSI, XC1DEPSI, XR0DEPSI, XR1DEPSI, & XSCFAC, X1DEPS, X0DEPS, XEX1DEPS, XEX0DEPS, & @@ -81,7 +84,7 @@ USE MODD_PARAM_LIMA_COLD, ONLY : XCXS, XCCS, & XCOLEXIS, XAGGS_CLARGE1, XAGGS_CLARGE2, & XAGGS_RLARGE1, XAGGS_RLARGE2, & XDI, X0DEPI, X2DEPI - +USE MODD_CST, ONLY : XTT ! IMPLICIT NONE ! @@ -91,6 +94,7 @@ REAL, INTENT(IN) :: PTSTEP LOGICAL, DIMENSION(:),INTENT(IN) :: LDCOMPUTE ! REAL, DIMENSION(:), INTENT(IN) :: PRHODREF! Reference density +REAL, DIMENSION(:), INTENT(IN) :: PT ! abs. pressure at time t REAL, DIMENSION(:), INTENT(IN) :: PSSI ! abs. pressure at time t REAL, DIMENSION(:), INTENT(IN) :: PAI ! abs. pressure at time t REAL, DIMENSION(:), INTENT(IN) :: PCJ ! abs. pressure at time t @@ -110,7 +114,7 @@ REAL, DIMENSION(:), INTENT(OUT) :: P_CI_CNVS !* 0.2 Declarations of local variables : ! LOGICAL, DIMENSION(SIZE(PRHODREF)) :: GMICRO ! Computations only where necessary -REAL, DIMENSION(SIZE(PRHODREF)) :: ZZW, ZZW2, ZZX ! Work array +REAL, DIMENSION(SIZE(PRHODREF)) :: ZZW, ZZW2, ZZX, ZCRIAUTI ! Work array ! ! !------------------------------------------------------------------------------- @@ -128,48 +132,55 @@ P_CI_CNVS(:) = 0. GMICRO(:) = LDCOMPUTE(:) .AND. PRIT(:)>XRTMIN(4) ! ! -WHERE( GMICRO ) -! +IF (NMOM_I.EQ.1) THEN + WHERE( GMICRO ) ! -!* 2.2 Deposition of water vapor on r_i: RVDEPI -! ----------------------------------------------- +!* Conversion of pristine ice to r_s: RICNVS +! ----------------------------------------- ! + ZCRIAUTI(:)=MIN(0.2E-4,10**(0.06*(PT(:)-XTT)-3.5)) + ZZW(:) = 0.0 + WHERE ( (PRIT(:)>XRTMIN(4))) + ZZW(:) = 1.E-3 * EXP( 0.015*(PT(:)-XTT) ) * MAX( PRIT(:)-ZCRIAUTI(:),0.0 ) + END WHERE ! - ZZW(:) = 0.0 - WHERE ( (PRIT(:)>XRTMIN(4)) .AND. (PCIT(:)>XCTMIN(4)) ) - ZZW(:) = ( PSSI(:) / PAI(:) ) * PCIT(:) * & - ( X0DEPI/PLBDI(:)+X2DEPI*PCJ(:)*PCJ(:)/PLBDI(:)**(XDI+2.0) ) + P_RI_CNVS(:) = - ZZW(:) END WHERE -! - P_RI_DEPI(:) = ZZW(:) -!!$ P_TH_DEPI(:) = P_RI_DEPI(:) * PLSFACT(:) -! -!!$ PA_TH(:) = PA_TH(:) + P_TH_DEPI(:) -!!$ PA_RV(:) = PA_RV(:) - P_RI_DEPI(:) -!!$ PA_RI(:) = PA_RI(:) + P_RI_DEPI(:) -! -! -!* 2.3 Conversion of pristine ice to r_s: RICNVS -! ------------------------------------------------ -! -! - ZZW(:) = 0.0 - ZZW2(:) = 0.0 - WHERE ( (PLBDI(:)<XLBDAICNVS_LIM) .AND. (PCIT(:)>XCTMIN(4)) & - .AND. (PSSI(:)>0.0) ) - ZZW(:) = (PLBDI(:)*XDICNVS_LIM)**(XALPHAI) - ZZX(:) = ( PSSI(:)/PAI(:) )*PCIT(:) * (ZZW(:)**XNUI) *EXP(-ZZW(:)) -! - ZZW(:) = ( XR0DEPIS + XR1DEPIS*PCJ(:) )*ZZX(:) -! - ZZW2(:) = ZZW(:) * (XC0DEPIS+XC1DEPIS*PCJ(:)) / (XR0DEPIS+XR1DEPIS*PCJ(:)) +ELSE + WHERE( GMICRO ) +! +!* Deposition of water vapor on r_i: RVDEPI +! ---------------------------------------- +! + ZZW(:) = 0.0 + WHERE ( (PRIT(:)>XRTMIN(4)) .AND. (PCIT(:)>XCTMIN(4)) ) + ZZW(:) = ( PSSI(:) / PAI(:) ) * PCIT(:) * & + ( X0DEPI/PLBDI(:)+X2DEPI*PCJ(:)*PCJ(:)/PLBDI(:)**(XDI+2.0) ) + END WHERE + P_RI_DEPI(:) = ZZW(:) +! +!* Conversion of pristine ice to r_s: RICNVS +! ----------------------------------------- +! + ZZW(:) = 0.0 + ZZW2(:) = 0.0 + WHERE ( (PLBDI(:)<XLBDAICNVS_LIM) .AND. (PCIT(:)>XCTMIN(4)) & + .AND. (PSSI(:)>0.0) ) + ZZW(:) = (PLBDI(:)*XDICNVS_LIM)**(XALPHAI) + ZZX(:) = (PSSI(:)/PAI(:))*PCIT(:) * (ZZW(:)**XNUI) *EXP(-ZZW(:)) +! + ZZW(:) = (XR0DEPIS + XR1DEPIS*PCJ(:))*ZZX(:) +! + ZZW2(:) = ZZW(:) * (XC0DEPIS+XC1DEPIS*PCJ(:)) / (XR0DEPIS+XR1DEPIS*PCJ(:)) + END WHERE + P_RI_CNVS(:) = - ZZW(:) + P_CI_CNVS(:) = - ZZW2(:) END WHERE +END IF ! -P_RI_CNVS(:) = - ZZW(:) -P_CI_CNVS(:) = - ZZW2(:) -! -! -END WHERE -! +IF (.NOT.LSNOW) THEN + P_RI_CNVS(:) = 0. + P_CI_CNVS(:) = 0. +END IF ! END SUBROUTINE LIMA_ICE_DEPOSITION diff --git a/src/MNH/lima_ice_snow_deposition.f90 b/src/MNH/lima_ice_snow_deposition.f90 deleted file mode 100644 index 4d92b528ac9aabb0224e61ae9de0c23a5b50f0fb..0000000000000000000000000000000000000000 --- a/src/MNH/lima_ice_snow_deposition.f90 +++ /dev/null @@ -1,230 +0,0 @@ -!MNH_LIC Copyright 2013-2018 CNRS, Meteo-France and Universite Paul Sabatier -!MNH_LIC This is part of the Meso-NH software governed by the CeCILL-C licence -!MNH_LIC version 1. See LICENSE, CeCILL-C_V1-en.txt and CeCILL-C_V1-fr.txt -!MNH_LIC for details. version 1. -! ##################### - MODULE MODI_LIMA_ICE_SNOW_DEPOSITION -! ##################### -! -INTERFACE - SUBROUTINE LIMA_ICE_SNOW_DEPOSITION (PTSTEP, LDCOMPUTE, & - PRHODREF, PSSI, PAI, PCJ, PLSFACT, & - PRIT, PRST, PCIT, PLBDI, PLBDS, & - P_RI_CNVI, P_CI_CNVI, & - P_TH_DEPS, P_RS_DEPS, & - P_RI_CNVS, P_CI_CNVS, & - PA_TH, PA_RV, PA_RI, PA_CI, PA_RS ) -! -REAL, INTENT(IN) :: PTSTEP -LOGICAL, DIMENSION(:),INTENT(IN) :: LDCOMPUTE -! -REAL, DIMENSION(:), INTENT(IN) :: PRHODREF! Reference density -REAL, DIMENSION(:), INTENT(IN) :: PSSI ! abs. pressure at time t -REAL, DIMENSION(:), INTENT(IN) :: PAI ! abs. pressure at time t -REAL, DIMENSION(:), INTENT(IN) :: PCJ ! abs. pressure at time t -REAL, DIMENSION(:), INTENT(IN) :: PLSFACT ! abs. pressure at time t -! -REAL, DIMENSION(:), INTENT(IN) :: PRIT ! Cloud ice m.r. at t -REAL, DIMENSION(:), INTENT(IN) :: PRST ! Snow/aggregate m.r. at t -! -REAL, DIMENSION(:), INTENT(IN) :: PCIT ! Ice crystal C. at t -! -REAL, DIMENSION(:), INTENT(IN) :: PLBDI ! Graupel m.r. at t -REAL, DIMENSION(:), INTENT(IN) :: PLBDS ! Graupel m.r. at t -! -REAL, DIMENSION(:), INTENT(INOUT) :: P_RI_CNVI -REAL, DIMENSION(:), INTENT(INOUT) :: P_CI_CNVI -REAL, DIMENSION(:), INTENT(INOUT) :: P_TH_DEPS -REAL, DIMENSION(:), INTENT(INOUT) :: P_RS_DEPS -REAL, DIMENSION(:), INTENT(INOUT) :: P_RI_CNVS -REAL, DIMENSION(:), INTENT(INOUT) :: P_CI_CNVS -! -REAL, DIMENSION(:), INTENT(INOUT) :: PA_TH -REAL, DIMENSION(:), INTENT(INOUT) :: PA_RV -REAL, DIMENSION(:), INTENT(INOUT) :: PA_RI -REAL, DIMENSION(:), INTENT(INOUT) :: PA_CI -REAL, DIMENSION(:), INTENT(INOUT) :: PA_RS -! -END SUBROUTINE LIMA_ICE_SNOW_DEPOSITION -END INTERFACE -END MODULE MODI_LIMA_ICE_SNOW_DEPOSITION -! -! ########################################################################## -SUBROUTINE LIMA_ICE_SNOW_DEPOSITION (PTSTEP, LDCOMPUTE, & - PRHODREF, PSSI, PAI, PCJ, PLSFACT, & - PRIT, PRST, PCIT, PLBDI, PLBDS, & - P_RI_CNVI, P_CI_CNVI, & - P_TH_DEPS, P_RS_DEPS, & - P_RI_CNVS, P_CI_CNVS, & - PA_TH, PA_RV, PA_RI, PA_CI, PA_RS ) -! ########################################################################## -! -!! PURPOSE -!! ------- -!! The purpose of this routine is to compute the microphysical sources -!! for slow cold processes : -!! - conversion of snow to ice -!! - deposition of vapor on snow -!! - conversion of ice to snow (Harrington 1995) -!! -!! -!! AUTHOR -!! ------ -!! J.-M. Cohard * Laboratoire d'Aerologie* -!! J.-P. Pinty * Laboratoire d'Aerologie* -!! S. Berthet * Laboratoire d'Aerologie* -!! B. Vié * CNRM * -!! -!! MODIFICATIONS -!! ------------- -!! Original 15/03/2018 -!! -!------------------------------------------------------------------------------- -! -!* 0. DECLARATIONS -! ------------ -! -USE MODD_PARAM_LIMA, ONLY : XRTMIN, XCTMIN, XALPHAI, XALPHAS, XNUI, XNUS -USE MODD_PARAM_LIMA_COLD, ONLY : XCXS, XCCS, & - XLBDAS_MAX, XDSCNVI_LIM, XLBDASCNVI_MAX, & - XC0DEPSI, XC1DEPSI, XR0DEPSI, XR1DEPSI, & - XSCFAC, X1DEPS, X0DEPS, XEX1DEPS, XEX0DEPS, & - XDICNVS_LIM, XLBDAICNVS_LIM, & - XC0DEPIS, XC1DEPIS, XR0DEPIS, XR1DEPIS, & - XCOLEXIS, XAGGS_CLARGE1, XAGGS_CLARGE2, & - XAGGS_RLARGE1, XAGGS_RLARGE2 - -! -IMPLICIT NONE -! -!* 0.1 Declarations of dummy arguments : -! -REAL, INTENT(IN) :: PTSTEP -LOGICAL, DIMENSION(:),INTENT(IN) :: LDCOMPUTE -! -REAL, DIMENSION(:), INTENT(IN) :: PRHODREF! Reference density -REAL, DIMENSION(:), INTENT(IN) :: PSSI ! abs. pressure at time t -REAL, DIMENSION(:), INTENT(IN) :: PAI ! abs. pressure at time t -REAL, DIMENSION(:), INTENT(IN) :: PCJ ! abs. pressure at time t -REAL, DIMENSION(:), INTENT(IN) :: PLSFACT ! abs. pressure at time t -! -REAL, DIMENSION(:), INTENT(IN) :: PRIT ! Cloud ice m.r. at t -REAL, DIMENSION(:), INTENT(IN) :: PRST ! Snow/aggregate m.r. at t -! -REAL, DIMENSION(:), INTENT(IN) :: PCIT ! Ice crystal C. at t -! -REAL, DIMENSION(:), INTENT(IN) :: PLBDI ! Graupel m.r. at t -REAL, DIMENSION(:), INTENT(IN) :: PLBDS ! Graupel m.r. at t -! -REAL, DIMENSION(:), INTENT(INOUT) :: P_RI_CNVI -REAL, DIMENSION(:), INTENT(INOUT) :: P_CI_CNVI -REAL, DIMENSION(:), INTENT(INOUT) :: P_TH_DEPS -REAL, DIMENSION(:), INTENT(INOUT) :: P_RS_DEPS -REAL, DIMENSION(:), INTENT(INOUT) :: P_RI_CNVS -REAL, DIMENSION(:), INTENT(INOUT) :: P_CI_CNVS -! -REAL, DIMENSION(:), INTENT(INOUT) :: PA_TH -REAL, DIMENSION(:), INTENT(INOUT) :: PA_RV -REAL, DIMENSION(:), INTENT(INOUT) :: PA_RI -REAL, DIMENSION(:), INTENT(INOUT) :: PA_CI -REAL, DIMENSION(:), INTENT(INOUT) :: PA_RS -! -!* 0.2 Declarations of local variables : -! -LOGICAL, DIMENSION(SIZE(PRHODREF)) :: GMICRO ! Computations only where necessary -REAL, DIMENSION(SIZE(PRHODREF)) :: ZZW, ZZW2, ZZX ! Work array -! -! -!------------------------------------------------------------------------------- -! -P_RI_CNVI(:) = 0. -P_CI_CNVI(:) = 0. -P_TH_DEPS(:) = 0. -P_RS_DEPS(:) = 0. -P_RI_CNVS(:) = 0. -P_CI_CNVS(:) = 0. -! -! Physical limitations -! -! -! Looking for regions where computations are necessary -! -GMICRO(:) = .FALSE. -GMICRO(:) = LDCOMPUTE(:) .AND. & - (PRIT(:)>XRTMIN(4) .OR. & - PRST(:)>XRTMIN(5)) -! -! -WHERE( GMICRO ) -! -!* 2.1 Conversion of snow to r_i: RSCNVI -! ---------------------------------------- -! -! - ZZW2(:) = 0.0 - ZZW(:) = 0.0 - WHERE ( PLBDS(:)<XLBDASCNVI_MAX .AND. (PRST(:)>XRTMIN(5)) & - .AND. (PSSI(:)<0.0) ) - ZZW(:) = (PLBDS(:)*XDSCNVI_LIM)**(XALPHAS) - ZZX(:) = ( -PSSI(:)/PAI(:) ) * (XCCS*PLBDS(:)**XCXS)/PRHODREF(:) * (ZZW(:)**XNUS) * EXP(-ZZW(:)) -! - ZZW(:) = ( XR0DEPSI+XR1DEPSI*PCJ(:) )*ZZX(:) -! - ZZW2(:) = ZZW(:)*( XC0DEPSI+XC1DEPSI*PCJ(:) )/( XR0DEPSI+XR1DEPSI*PCJ(:) ) - END WHERE -! - P_RI_CNVI(:) = ZZW(:) - P_CI_CNVI(:) = ZZW2(:) -! - PA_RI(:) = PA_RI(:) + P_RI_CNVI(:) - PA_CI(:) = PA_CI(:) + P_CI_CNVI(:) - PA_RS(:) = PA_RS(:) - P_RI_CNVI(:) -! -! -!* 2.2 Deposition of water vapor on r_s: RVDEPS -! ----------------------------------------------- -! -! - ZZW(:) = 0.0 - WHERE ( (PRST(:)>XRTMIN(5)) ) - ZZW(:) = ( PSSI(:)/(PAI(:))/PRHODREF(:) ) * & - ( X0DEPS*PLBDS(:)**XEX0DEPS + X1DEPS*PCJ(:)*PLBDS(:)**XEX1DEPS ) - ZZW(:) = ZZW(:)*(0.5+SIGN(0.5,ZZW(:))) - ABS(ZZW(:))*(0.5-SIGN(0.5,ZZW(:))) - END WHERE -! - P_RS_DEPS(:) = ZZW(:) - P_TH_DEPS(:) = P_RS_DEPS(:) * PLSFACT(:) -! - PA_TH(:) = PA_TH(:) + P_TH_DEPS(:) - PA_RV(:) = PA_RV(:) - P_RS_DEPS(:) - PA_RS(:) = PA_RS(:) + P_RS_DEPS(:) -! -! -!* 2.3 Conversion of pristine ice to r_s: RICNVS -! ------------------------------------------------ -! -! - ZZW(:) = 0.0 - ZZW2(:) = 0.0 - WHERE ( (PLBDI(:)<XLBDAICNVS_LIM) .AND. (PCIT(:)>XCTMIN(4)) & - .AND. (PSSI(:)>0.0) ) - ZZW(:) = (PLBDI(:)*XDICNVS_LIM)**(XALPHAI) - ZZX(:) = ( PSSI(:)/PAI(:) )*PCIT(:) * (ZZW(:)**XNUI) *EXP(-ZZW(:)) -! - ZZW(:) = ( XR0DEPIS + XR1DEPIS*PCJ(:) )*ZZX(:) -! - ZZW2(:) = ZZW(:) * (XC0DEPIS+XC1DEPIS*PCJ(:)) / (XR0DEPIS+XR1DEPIS*PCJ(:)) - END WHERE -! -P_RI_CNVS(:) = - ZZW(:) -P_CI_CNVS(:) = - ZZW2(:) -! -PA_RI(:) = PA_RI(:) + P_RI_CNVS(:) -PA_CI(:) = PA_CI(:) + P_CI_CNVS(:) -PA_RS(:) = PA_RS(:) - P_RI_CNVS(:) -! -! -END WHERE -! -! -END SUBROUTINE LIMA_ICE_SNOW_DEPOSITION diff --git a/src/MNH/lima_init_ccn_activation_spectrum.f90 b/src/MNH/lima_init_ccn_activation_spectrum.f90 index 16a5617407f80b8bd99fd57dc25b5687ed6433db..4403f97025e2c04b8f823efd603eec3accbb28ef 100644 --- a/src/MNH/lima_init_ccn_activation_spectrum.f90 +++ b/src/MNH/lima_init_ccn_activation_spectrum.f90 @@ -287,7 +287,7 @@ fh = DSDD(PX2,XDDRY,XKAPPA,XT) fl=fnew else if (PX2 .lt. 0.05) then PX2 = PX2 + 1.0E-2 - PRINT*, 'PX2 ALWAYS too small, we put a greater one : PX2 =',PX2 +! PRINT*, 'PX2 ALWAYS too small, we put a greater one : PX2 =',PX2 fh = DSDD(PX2,XDDRY,XKAPPA,XT) go to 100 STOP @@ -303,7 +303,7 @@ fh = DSDD(PX2,XDDRY,XKAPPA,XT) PZRIDDR=PX2 else if (PX2 .lt. 0.05) then PX2 = PX2 + 1.0E-2 - PRINT*, 'PX2 too small, we put a greater one : PX2 =',PX2 +! PRINT*, 'PX2 too small, we put a greater one : PX2 =',PX2 fh = DSDD(PX2,XDDRY,XKAPPA,XT) go to 100 else diff --git a/src/MNH/lima_mixed.f90 b/src/MNH/lima_mixed.f90 index 49024b7b518893f1b9b101175676fb8a5d18f558..4d558eb1da83e2eb5d500c0ee18dbce977d80c42 100644 --- a/src/MNH/lima_mixed.f90 +++ b/src/MNH/lima_mixed.f90 @@ -96,6 +96,7 @@ END MODULE MODI_LIMA_MIXED ! P. Wautelet 03/2020: use the new data structures and subroutines for budgets (no more call to budget in this subroutine) ! P. Wautelet 28/05/2020: bugfix: correct array start for PSVT and PSVS ! P. Wautelet 02/02/2021: budgets: add missing source terms for SV budgets in LIMA +! J. Wurtz 03/2022: new snow characteristics !------------------------------------------------------------------------------- ! !* 0. DECLARATIONS @@ -108,9 +109,9 @@ USE MODD_CST, ONLY: XP00, XRD, XRV, XMV, XMD, XCPD, XCPV, & USE MODD_NSV USE MODD_PARAMETERS, ONLY: JPHEXT, JPVEXT USE MODD_PARAM_LIMA, ONLY: NMOD_IFN, XRTMIN, XCTMIN, LWARM, LCOLD, & - NMOD_CCN, NMOD_IMM, LRAIN, LSNOW, LHAIL + NMOD_CCN, NMOD_IMM, LRAIN, LSNOW, LHAIL, LSNOW_T USE MODD_PARAM_LIMA_WARM, ONLY: XLBC, XLBEXC, XLBR, XLBEXR -USE MODD_PARAM_LIMA_COLD, ONLY: XLBI, XLBEXI, XLBS, XLBEXS, XSCFAC +USE MODD_PARAM_LIMA_COLD, ONLY: XLBI, XLBEXI, XLBS, XLBEXS, XSCFAC, XLBDAS_MAX, XLBDAS_MIN, XTRANS_MP_GAMMAS USE MODD_PARAM_LIMA_MIXED, ONLY: XLBG, XLBEXG, XLBH, XLBEXH use mode_tools, only: Countjv @@ -467,9 +468,19 @@ IF( IMICRO >= 1 ) THEN ZLBDAI(:) = ( XLBI*ZCIT(:) / ZRIT(:) )**XLBEXI END WHERE ZLBDAS(:) = 1.E10 - WHERE (ZRST(:)>XRTMIN(5) ) - ZLBDAS(:) = XLBS*( ZRHODREF(:)*ZRST(:) )**XLBEXS - END WHERE + IF (LSNOW_T) THEN + WHERE(ZZT(:)>263.15 .AND. ZRST(:)>XRTMIN(5)) + ZLBDAS(:) = MAX(MIN(XLBDAS_MAX, 10**(14.554-0.0423*ZZT(:))),XLBDAS_MIN) + END WHERE + WHERE(ZZT(:)<=263.15 .AND. ZRST(:)>XRTMIN(5)) + ZLBDAS(:) = MAX(MIN(XLBDAS_MAX, 10**(6.226-0.0106*ZZT(:))),XLBDAS_MIN) + END WHERE + ZLBDAS(:) = ZLBDAS(:)*XTRANS_MP_GAMMAS + ELSE + WHERE (ZRST(:)>XRTMIN(5)) + ZLBDAS(:) = MAX(MIN(XLBDAS_MAX, XLBS*( ZRHODREF(:)*ZRST(:) )**XLBEXS),XLBDAS_MIN) + END WHERE + END IF ZLBDAG(:) = 1.E10 WHERE (ZRGT(:)>XRTMIN(6) ) ZLBDAG(:) = XLBG*( ZRHODREF(:)*ZRGT(:) )**XLBEXG diff --git a/src/MNH/lima_mixed_fast_processes.f90 b/src/MNH/lima_mixed_fast_processes.f90 index 09c86c8a20e23fb9cd16adb859604d1aae2c37e5..056386015b61db1bb4f7b0292e01bebeacae45cf 100644 --- a/src/MNH/lima_mixed_fast_processes.f90 +++ b/src/MNH/lima_mixed_fast_processes.f90 @@ -8,58 +8,58 @@ ! ##################################### ! INTERFACE - SUBROUTINE LIMA_MIXED_FAST_PROCESSES (ZRHODREF, ZZT, ZPRES, PTSTEP, & - ZLSFACT, ZLVFACT, ZKA, ZDV, ZCJ, & - ZRVT, ZRCT, ZRRT, ZRIT, ZRST, ZRGT, & - ZRHT, ZCCT, ZCRT, ZCIT, & - ZRCS, ZRRS, ZRIS, ZRSS, ZRGS, ZRHS, & - ZTHS, ZCCS, ZCRS, ZCIS, & - ZLBDAC, ZLBDAR, ZLBDAS, ZLBDAG, ZLBDAH, & + SUBROUTINE LIMA_MIXED_FAST_PROCESSES (PRHODREF, PZT, PPRES, PTSTEP, & + PLSFACT, PLVFACT, PKA, PDV, PCJ, & + PRVT1D, PRCT1D, PRRT1D, PRIT1D, PRST1D, & + PRGT1D, PRTH1D, PCCT1D, PCRT1D, PCIT1D, & + PRCS1D, PRRS1D, PRIS1D, PRSS1D, PRGS1D, & + PRHS1D, PTHS1D, PCCS1D, PCRS1D, PCIS1D, & + PLBDAC, PLBDAR, PLBDAS, PLBDAG, PLBDAH, & PRHODJ1D, GMICRO, PRHODJ, KMI, PTHS, & PRCS, PRRS, PRIS, PRSS, PRGS, PRHS, & PCCS, PCRS, PCIS ) ! -REAL, DIMENSION(:), INTENT(IN) :: ZRHODREF ! RHO Dry REFerence -REAL, DIMENSION(:), INTENT(IN) :: ZZT ! Temperature -REAL, DIMENSION(:), INTENT(IN) :: ZPRES ! Pressure +REAL, DIMENSION(:), INTENT(IN) :: PRHODREF ! RHO Dry REFerence +REAL, DIMENSION(:), INTENT(IN) :: PZT ! Temperature +REAL, DIMENSION(:), INTENT(IN) :: PPRES ! Pressure REAL, INTENT(IN) :: PTSTEP ! Time step ! -REAL, DIMENSION(:), INTENT(IN) :: ZLSFACT ! L_s/(Pi_ref*C_ph) -REAL, DIMENSION(:), INTENT(IN) :: ZLVFACT ! L_v/(Pi_ref*C_ph) -REAL, DIMENSION(:), INTENT(IN) :: ZKA ! Thermal conductivity of the air -REAL, DIMENSION(:), INTENT(IN) :: ZDV ! Diffusivity of water vapor in the air -REAL, DIMENSION(:), INTENT(IN) :: ZCJ ! Ventilation coefficient ? -! -REAL, DIMENSION(:), INTENT(IN) :: ZRVT ! Water vapor m.r. at t -REAL, DIMENSION(:), INTENT(IN) :: ZRCT ! Cloud water m.r. at t -REAL, DIMENSION(:), INTENT(IN) :: ZRRT ! Rain water m.r. at t -REAL, DIMENSION(:), INTENT(IN) :: ZRIT ! Pristine ice m.r. at t -REAL, DIMENSION(:), INTENT(IN) :: ZRST ! Snow/aggregate m.r. at t -REAL, DIMENSION(:), INTENT(IN) :: ZRGT ! Graupel m.r. at t -REAL, DIMENSION(:), INTENT(IN) :: ZRHT ! Hail m.r. at t -! -REAL, DIMENSION(:), INTENT(IN) :: ZCCT ! Cloud water conc. at t -REAL, DIMENSION(:), INTENT(IN) :: ZCRT ! Rain water conc. at t -REAL, DIMENSION(:), INTENT(IN) :: ZCIT ! Pristine ice conc. at t -! -REAL, DIMENSION(:), INTENT(INOUT) :: ZRCS ! Cloud water m.r. source -REAL, DIMENSION(:), INTENT(INOUT) :: ZRRS ! Rain water m.r. source -REAL, DIMENSION(:), INTENT(INOUT) :: ZRIS ! Pristine ice m.r. source -REAL, DIMENSION(:), INTENT(INOUT) :: ZRSS ! Snow/aggregate m.r. source -REAL, DIMENSION(:), INTENT(INOUT) :: ZRGS ! Graupel/hail m.r. source -REAL, DIMENSION(:), INTENT(INOUT) :: ZRHS ! Hail m.r. source -! -REAL, DIMENSION(:), INTENT(INOUT) :: ZTHS ! Theta source -! -REAL, DIMENSION(:), INTENT(INOUT) :: ZCCS ! Cloud water conc. source -REAL, DIMENSION(:), INTENT(INOUT) :: ZCRS ! Rain water conc. source -REAL, DIMENSION(:), INTENT(INOUT) :: ZCIS ! Pristine ice conc. source -! -REAL, DIMENSION(:), INTENT(IN) :: ZLBDAC ! Slope param of the cloud droplet distr. -REAL, DIMENSION(:), INTENT(IN) :: ZLBDAR ! Slope param of the raindrop distr -REAL, DIMENSION(:), INTENT(IN) :: ZLBDAS ! Slope param of the aggregate distr. -REAL, DIMENSION(:), INTENT(IN) :: ZLBDAG ! Slope param of the graupel distr. -REAL, DIMENSION(:), INTENT(IN) :: ZLBDAH ! Slope param of the hail distr. +REAL, DIMENSION(:), INTENT(IN) :: PLSFACT ! L_s/(Pi_ref*C_ph) +REAL, DIMENSION(:), INTENT(IN) :: PLVFACT ! L_v/(Pi_ref*C_ph) +REAL, DIMENSION(:), INTENT(IN) :: PKA ! Thermal conductivity of the air +REAL, DIMENSION(:), INTENT(IN) :: PDV ! Diffusivity of water vapor in the air +REAL, DIMENSION(:), INTENT(IN) :: PCJ ! Ventilation coefficient ? +! +REAL, DIMENSION(:), INTENT(IN) :: PRVT1D ! Water vapor m.r. at t +REAL, DIMENSION(:), INTENT(IN) :: PRCT1D ! Cloud water m.r. at t +REAL, DIMENSION(:), INTENT(IN) :: PRRT1D ! Rain water m.r. at t +REAL, DIMENSION(:), INTENT(IN) :: PRIT1D ! Pristine ice m.r. at t +REAL, DIMENSION(:), INTENT(IN) :: PRST1D ! Snow/aggregate m.r. at t +REAL, DIMENSION(:), INTENT(IN) :: PRGT1D ! Graupel m.r. at t +REAL, DIMENSION(:), INTENT(IN) :: PRTH1D ! Hail m.r. at t +! +REAL, DIMENSION(:), INTENT(IN) :: PCCT1D ! Cloud water conc. at t +REAL, DIMENSION(:), INTENT(IN) :: PCRT1D ! Rain water conc. at t +REAL, DIMENSION(:), INTENT(IN) :: PCIT1D ! Pristine ice conc. at t +! +REAL, DIMENSION(:), INTENT(INOUT) :: PRCS1D ! Cloud water m.r. source +REAL, DIMENSION(:), INTENT(INOUT) :: PRRS1D ! Rain water m.r. source +REAL, DIMENSION(:), INTENT(INOUT) :: PRIS1D ! Pristine ice m.r. source +REAL, DIMENSION(:), INTENT(INOUT) :: PRSS1D ! Snow/aggregate m.r. source +REAL, DIMENSION(:), INTENT(INOUT) :: PRGS1D ! Graupel/hail m.r. source +REAL, DIMENSION(:), INTENT(INOUT) :: PRHS1D ! Hail m.r. source +! +REAL, DIMENSION(:), INTENT(INOUT) :: PTHS1D ! Theta source +! +REAL, DIMENSION(:), INTENT(INOUT) :: PCCS1D ! Cloud water conc. source +REAL, DIMENSION(:), INTENT(INOUT) :: PCRS1D ! Rain water conc. source +REAL, DIMENSION(:), INTENT(INOUT) :: PCIS1D ! Pristine ice conc. source +! +REAL, DIMENSION(:), INTENT(IN) :: PLBDAC ! Slope param of the cloud droplet distr. +REAL, DIMENSION(:), INTENT(IN) :: PLBDAR ! Slope param of the raindrop distr +REAL, DIMENSION(:), INTENT(IN) :: PLBDAS ! Slope param of the aggregate distr. +REAL, DIMENSION(:), INTENT(IN) :: PLBDAG ! Slope param of the graupel distr. +REAL, DIMENSION(:), INTENT(IN) :: PLBDAH ! Slope param of the hail distr. ! ! used for budget storage REAL, DIMENSION(:), INTENT(IN) :: PRHODJ1D @@ -81,18 +81,18 @@ END SUBROUTINE LIMA_MIXED_FAST_PROCESSES END INTERFACE END MODULE MODI_LIMA_MIXED_FAST_PROCESSES ! -! ####################################################################### - SUBROUTINE LIMA_MIXED_FAST_PROCESSES (ZRHODREF, ZZT, ZPRES, PTSTEP, & - ZLSFACT, ZLVFACT, ZKA, ZDV, ZCJ, & - ZRVT, ZRCT, ZRRT, ZRIT, ZRST, ZRGT, & - ZRHT, ZCCT, ZCRT, ZCIT, & - ZRCS, ZRRS, ZRIS, ZRSS, ZRGS, ZRHS, & - ZTHS, ZCCS, ZCRS, ZCIS, & - ZLBDAC, ZLBDAR, ZLBDAS, ZLBDAG, ZLBDAH, & +! ############################################################################### + SUBROUTINE LIMA_MIXED_FAST_PROCESSES (PRHODREF, PZT, PPRES, PTSTEP, & + PLSFACT, PLVFACT, PKA, PDV, PCJ, & + PRVT1D, PRCT1D, PRRT1D, PRIT1D, PRST1D, & + PRGT1D, PRTH1D, PCCT1D, PCRT1D, PCIT1D, & + PRCS1D, PRRS1D, PRIS1D, PRSS1D, PRGS1D, & + PRHS1D, PTHS1D, PCCS1D, PCRS1D, PCIS1D, & + PLBDAC, PLBDAR, PLBDAS, PLBDAG, PLBDAH, & PRHODJ1D, GMICRO, PRHODJ, KMI, PTHS, & PRCS, PRRS, PRIS, PRSS, PRGS, PRHS, & PCCS, PCRS, PCIS ) -! ####################################################################### +! ############################################################################### ! !! !! PURPOSE @@ -142,6 +142,10 @@ END MODULE MODI_LIMA_MIXED_FAST_PROCESSES !! C. Barthe * LACy * jan. 2014 add budgets ! P. Wautelet 26/04/2019: replace non-standard FLOAT function by REAL function ! P. Wautelet 03/2020: use the new data structures and subroutines for budgets +! C. Barthe 14/03/2022: - add CIBU (from T. Hoarau's work) and RDSF (from J.P. Pinty's work) +! - change the name of some arguments to match the DOCTOR norm +! - change conditions for HMG to occur +! J. Wurtz 03/2022: new snow characteristics !------------------------------------------------------------------------------- ! !* 0. DECLARATIONS @@ -156,6 +160,7 @@ USE MODD_NSV USE MODD_PARAM_LIMA USE MODD_PARAM_LIMA_COLD USE MODD_PARAM_LIMA_MIXED +USE MODD_PARAM_LIMA_WARM, ONLY : XBR, XDR use mode_budget, only: Budget_store_init, Budget_store_end @@ -163,47 +168,47 @@ IMPLICIT NONE ! !* 0.1 Declarations of dummy arguments : ! -REAL, DIMENSION(:), INTENT(IN) :: ZRHODREF ! RHO Dry REFerence -REAL, DIMENSION(:), INTENT(IN) :: ZZT ! Temperature -REAL, DIMENSION(:), INTENT(IN) :: ZPRES ! Pressure +REAL, DIMENSION(:), INTENT(IN) :: PRHODREF ! RHO Dry REFerence +REAL, DIMENSION(:), INTENT(IN) :: PZT ! Temperature +REAL, DIMENSION(:), INTENT(IN) :: PPRES ! Pressure REAL, INTENT(IN) :: PTSTEP ! Time step ! -REAL, DIMENSION(:), INTENT(IN) :: ZLSFACT ! L_s/(Pi_ref*C_ph) -REAL, DIMENSION(:), INTENT(IN) :: ZLVFACT ! L_v/(Pi_ref*C_ph) -REAL, DIMENSION(:), INTENT(IN) :: ZKA ! Thermal conductivity of the air -REAL, DIMENSION(:), INTENT(IN) :: ZDV ! Diffusivity of water vapor in the air -REAL, DIMENSION(:), INTENT(IN) :: ZCJ ! Ventilation coefficient ? -! -REAL, DIMENSION(:), INTENT(IN) :: ZRVT ! Water vapor m.r. at t -REAL, DIMENSION(:), INTENT(IN) :: ZRCT ! Cloud water m.r. at t -REAL, DIMENSION(:), INTENT(IN) :: ZRRT ! Rain water m.r. at t -REAL, DIMENSION(:), INTENT(IN) :: ZRIT ! Pristine ice m.r. at t -REAL, DIMENSION(:), INTENT(IN) :: ZRST ! Snow/aggregate m.r. at t -REAL, DIMENSION(:), INTENT(IN) :: ZRGT ! Graupel/hail m.r. at t -REAL, DIMENSION(:), INTENT(IN) :: ZRHT ! Hail m.r. at t -! -REAL, DIMENSION(:), INTENT(IN) :: ZCCT ! Cloud water conc. at t -REAL, DIMENSION(:), INTENT(IN) :: ZCRT ! Rain water conc. at t -REAL, DIMENSION(:), INTENT(IN) :: ZCIT ! Pristine ice conc. at t -! -REAL, DIMENSION(:), INTENT(INOUT) :: ZRCS ! Cloud water m.r. source -REAL, DIMENSION(:), INTENT(INOUT) :: ZRRS ! Rain water m.r. source -REAL, DIMENSION(:), INTENT(INOUT) :: ZRIS ! Pristine ice m.r. source -REAL, DIMENSION(:), INTENT(INOUT) :: ZRSS ! Snow/aggregate m.r. source -REAL, DIMENSION(:), INTENT(INOUT) :: ZRGS ! Graupel/hail m.r. source -REAL, DIMENSION(:), INTENT(INOUT) :: ZRHS ! Hail m.r. source -! -REAL, DIMENSION(:), INTENT(INOUT) :: ZTHS ! Theta source -! -REAL, DIMENSION(:), INTENT(INOUT) :: ZCCS ! Cloud water conc. source -REAL, DIMENSION(:), INTENT(INOUT) :: ZCRS ! Rain water conc. source -REAL, DIMENSION(:), INTENT(INOUT) :: ZCIS ! Pristine ice conc. source -! -REAL, DIMENSION(:), INTENT(IN) :: ZLBDAC ! Slope param of the cloud droplet distr. -REAL, DIMENSION(:), INTENT(IN) :: ZLBDAR ! Slope param of the raindrop distr -REAL, DIMENSION(:), INTENT(IN) :: ZLBDAS ! Slope param of the aggregate distr. -REAL, DIMENSION(:), INTENT(IN) :: ZLBDAG ! Slope param of the graupel distr. -REAL, DIMENSION(:), INTENT(IN) :: ZLBDAH ! Slope param of the hail distr. +REAL, DIMENSION(:), INTENT(IN) :: PLSFACT ! L_s/(Pi_ref*C_ph) +REAL, DIMENSION(:), INTENT(IN) :: PLVFACT ! L_v/(Pi_ref*C_ph) +REAL, DIMENSION(:), INTENT(IN) :: PKA ! Thermal conductivity of the air +REAL, DIMENSION(:), INTENT(IN) :: PDV ! Diffusivity of water vapor in the air +REAL, DIMENSION(:), INTENT(IN) :: PCJ ! Ventilation coefficient ? +! +REAL, DIMENSION(:), INTENT(IN) :: PRVT1D ! Water vapor m.r. at t +REAL, DIMENSION(:), INTENT(IN) :: PRCT1D ! Cloud water m.r. at t +REAL, DIMENSION(:), INTENT(IN) :: PRRT1D ! Rain water m.r. at t +REAL, DIMENSION(:), INTENT(IN) :: PRIT1D ! Pristine ice m.r. at t +REAL, DIMENSION(:), INTENT(IN) :: PRST1D ! Snow/aggregate m.r. at t +REAL, DIMENSION(:), INTENT(IN) :: PRGT1D ! Graupel/hail m.r. at t +REAL, DIMENSION(:), INTENT(IN) :: PRTH1D ! Hail m.r. at t +! +REAL, DIMENSION(:), INTENT(IN) :: PCCT1D ! Cloud water conc. at t +REAL, DIMENSION(:), INTENT(IN) :: PCRT1D ! Rain water conc. at t +REAL, DIMENSION(:), INTENT(IN) :: PCIT1D ! Pristine ice conc. at t +! +REAL, DIMENSION(:), INTENT(INOUT) :: PRCS1D ! Cloud water m.r. source +REAL, DIMENSION(:), INTENT(INOUT) :: PRRS1D ! Rain water m.r. source +REAL, DIMENSION(:), INTENT(INOUT) :: PRIS1D ! Pristine ice m.r. source +REAL, DIMENSION(:), INTENT(INOUT) :: PRSS1D ! Snow/aggregate m.r. source +REAL, DIMENSION(:), INTENT(INOUT) :: PRGS1D ! Graupel/hail m.r. source +REAL, DIMENSION(:), INTENT(INOUT) :: PRHS1D ! Hail m.r. source +! +REAL, DIMENSION(:), INTENT(INOUT) :: PTHS1D ! Theta source +! +REAL, DIMENSION(:), INTENT(INOUT) :: PCCS1D ! Cloud water conc. source +REAL, DIMENSION(:), INTENT(INOUT) :: PCRS1D ! Rain water conc. source +REAL, DIMENSION(:), INTENT(INOUT) :: PCIS1D ! Pristine ice conc. source +! +REAL, DIMENSION(:), INTENT(IN) :: PLBDAC ! Slope param of the cloud droplet distr. +REAL, DIMENSION(:), INTENT(IN) :: PLBDAR ! Slope param of the raindrop distr +REAL, DIMENSION(:), INTENT(IN) :: PLBDAS ! Slope param of the aggregate distr. +REAL, DIMENSION(:), INTENT(IN) :: PLBDAG ! Slope param of the graupel distr. +REAL, DIMENSION(:), INTENT(IN) :: PLBDAH ! Slope param of the hail distr. ! ! used for budget storage REAL, DIMENSION(:), INTENT(IN) :: PRHODJ1D @@ -224,17 +229,61 @@ REAL, DIMENSION(:,:,:), INTENT(IN) :: PCIS ! !* 0.2 Declarations of local variables : ! -LOGICAL, DIMENSION(SIZE(ZZT)) :: GRIM, GACC, GDRY, GWET, GHAIL ! Test where to compute +LOGICAL, DIMENSION(SIZE(PZT)) :: GRIM, GACC, GDRY, GWET, GHAIL ! Test where to compute INTEGER :: IGRIM, IGACC, IGDRY, IGWET, IHAIL INTEGER :: JJ INTEGER, DIMENSION(:), ALLOCATABLE :: IVEC1,IVEC2 ! Vectors of indices REAL, DIMENSION(:), ALLOCATABLE :: ZVEC1,ZVEC2, ZVEC3 ! Work vectors -REAL, DIMENSION(SIZE(ZZT)) :: ZZW, ZZX -REAL, DIMENSION(SIZE(ZZT)) :: ZRDRYG, ZRWETG -REAL, DIMENSION(SIZE(ZZT),7) :: ZZW1 +REAL, DIMENSION(SIZE(PZT)) :: ZZW, ZZX +REAL, DIMENSION(SIZE(PZT)) :: ZRDRYG, ZRWETG +REAL, DIMENSION(SIZE(PZT),7) :: ZZW1 REAL :: NHAIL REAL :: ZTHRH, ZTHRC ! +! Variables for CIBU +LOGICAL, DIMENSION(SIZE(PZT)) :: GCIBU ! Test where to compute collision process +LOGICAL, SAVE :: GFIRSTCALL = .TRUE. ! control switch for the first call +! +INTEGER :: ICIBU +INTEGER, DIMENSION(:), ALLOCATABLE :: IVEC2_S1,IVEC2_S2 ! Snow indice vector +INTEGER, DIMENSION(:), ALLOCATABLE :: IVEC2_G ! Graupel indice vector +INTEGER, PARAMETER :: I_SEED_PARAM = 26032012 +INTEGER, DIMENSION(:), ALLOCATABLE :: I_SEED +INTEGER :: NI_SEED +! +REAL, DIMENSION(:), ALLOCATABLE :: ZVEC1_S, ZVEC1_S1, ZVEC1_S2, & ! Work vectors + ZVEC1_S3, ZVEC1_S4, & + ZVEC1_S11, ZVEC1_S12, & ! for snow + ZVEC1_S21, ZVEC1_S22, & + ZVEC1_S31, ZVEC1_S32, & + ZVEC1_S41, ZVEC1_S42, & + ZVEC2_S1, ZVEC2_S2 +REAL, DIMENSION(:), ALLOCATABLE :: ZVEC1_G, ZVEC1_G1, ZVEC1_G2, & ! Work vectors + ZVEC2_G ! for graupel +REAL, DIMENSION(:), ALLOCATABLE :: ZINTG_SNOW_1, & ! incomplete gamma function + ZINTG_SNOW_2, & ! for snow + ZINTG_SNOW_3, & + ZINTG_SNOW_4 +REAL, DIMENSION(:), ALLOCATABLE :: ZINTG_GRAUPEL_1, & ! incomplete gamma + ZINTG_GRAUPEL_2 ! function for graupel +REAL, DIMENSION(:), ALLOCATABLE :: ZNI_CIBU, ZRI_CIBU ! CIBU rates +REAL, DIMENSION(:), ALLOCATABLE :: ZFRAGMENTS, ZHARVEST, ZFRAG_CIBU +REAL :: ZFACT1_XNDEBRIS, ZFACT2_XNDEBRIS +! +LOGICAL, DIMENSION(SIZE(PZT)) :: GRDSF ! Test where to compute collision process +INTEGER :: IRDSF +REAL, DIMENSION(:), ALLOCATABLE :: ZVEC1_R ! Work vectors for rain +REAL, DIMENSION(:), ALLOCATABLE :: ZVEC1_R1 ! Work vectors for rain +REAL, DIMENSION(:), ALLOCATABLE :: ZVEC2_R ! Work vectors for rain +INTEGER, DIMENSION(:), ALLOCATABLE :: IVEC2_R ! Rain indice vector +REAL, DIMENSION(:), ALLOCATABLE :: ZINTG_RAIN ! incomplete gamma function for rain +REAL, DIMENSION(:), ALLOCATABLE :: ZNI_RDSF,ZRI_RDSF ! RDSF rates +! +REAL, DIMENSION(:), ALLOCATABLE :: ZAUX ! used to distribute +REAL, DIMENSION(:,:), ALLOCATABLE :: ZFACT ! the total concentration in each shape +REAL, DIMENSION(:), ALLOCATABLE :: ZONEOVER_VAR ! for optimization +! +! !------------------------------------------------------------------------------- ! ! ################# @@ -249,349 +298,651 @@ SNOW: IF (LSNOW) THEN ! ZZW1(:,:) = 0.0 ! -GRIM(:) = (ZRCT(:)>XRTMIN(2)) .AND. (ZRST(:)>XRTMIN(5)) .AND. (ZRCS(:)>XRTMIN(2)/PTSTEP) .AND. (ZZT(:)<XTT) +GRIM(:) = (PRCT1D(:)>XRTMIN(2)) .AND. (PRST1D(:)>XRTMIN(5)) .AND. (PRCS1D(:)>XRTMIN(2)/PTSTEP) .AND. (PZT(:)<XTT) IGRIM = COUNT( GRIM(:) ) ! IF( IGRIM>0 ) THEN if ( nbumod == kmi .and. lbu_enable ) then if ( lbudget_th ) call Budget_store_init( tbudgets(NBUDGET_TH), 'RIM', & - Unpack( zths(:), mask = gmicro(:, :, :), field = pths(:, :, :) ) * prhodj(:, :, :) ) + Unpack( pths1d(:), mask = gmicro(:, :, :), field = pths(:, :, :) ) * prhodj(:, :, :) ) if ( lbudget_rc ) call Budget_store_init( tbudgets(NBUDGET_RC), 'RIM', & - Unpack( zrcs(:), mask = gmicro(:, :, :), field = prcs(:, :, :) ) * prhodj(:, :, :) ) + Unpack( prcs1d(:), mask = gmicro(:, :, :), field = prcs(:, :, :) ) * prhodj(:, :, :) ) if ( lbudget_rs ) call Budget_store_init( tbudgets(NBUDGET_RS), 'RIM', & - Unpack( zrss(:), mask = gmicro(:, :, :), field = prss(:, :, :) ) * prhodj(:, :, :) ) + Unpack( prss1d(:), mask = gmicro(:, :, :), field = prss(:, :, :) ) * prhodj(:, :, :) ) if ( lbudget_rg ) call Budget_store_init( tbudgets(NBUDGET_RG), 'RIM', & - Unpack( zrgs(:), mask = gmicro(:, :, :), field = prgs(:, :, :) ) * prhodj(:, :, :) ) + Unpack( prgs1d(:), mask = gmicro(:, :, :), field = prgs(:, :, :) ) * prhodj(:, :, :) ) if ( lbudget_sv ) call Budget_store_init( tbudgets(NBUDGET_SV1 - 1 + nsv_lima_nc), 'RIM', & - Unpack( zccs(:), mask = gmicro(:, :, :), field = pccs(:, :, :) ) * prhodj(:, :, :) ) + Unpack( pccs1d(:), mask = gmicro(:, :, :), field = pccs(:, :, :) ) * prhodj(:, :, :) ) end if ! ! 1.1.0 allocations ! - ALLOCATE(ZVEC1(IGRIM)) - ALLOCATE(ZVEC2(IGRIM)) - ALLOCATE(IVEC1(IGRIM)) - ALLOCATE(IVEC2(IGRIM)) + ALLOCATE(ZVEC1(IGRIM)) + ALLOCATE(ZVEC2(IGRIM)) + ALLOCATE(IVEC1(IGRIM)) + ALLOCATE(IVEC2(IGRIM)) ! -! 1.1.1 select the ZLBDAS +! 1.1.1 select the PLBDAS ! - ZVEC1(:) = PACK( ZLBDAS(:),MASK=GRIM(:) ) + ZVEC1(:) = PACK( PLBDAS(:),MASK=GRIM(:) ) ! -! 1.1.2 find the next lower indice for the ZLBDAS in the geometrical +! 1.1.2 find the next lower indice for the PLBDAS in the geometrical ! set of Lbda_s used to tabulate some moments of the incomplete ! gamma function ! - ZVEC2(1:IGRIM) = MAX( 1.0001, MIN( REAL(NGAMINC)-0.0001, & + ZVEC2(1:IGRIM) = MAX( 1.0001, MIN( REAL(NGAMINC)-0.0001, & XRIMINTP1 * LOG( ZVEC1(1:IGRIM) ) + XRIMINTP2 ) ) - IVEC2(1:IGRIM) = INT( ZVEC2(1:IGRIM) ) - ZVEC2(1:IGRIM) = ZVEC2(1:IGRIM) - REAL( IVEC2(1:IGRIM) ) + IVEC2(1:IGRIM) = INT( ZVEC2(1:IGRIM) ) + ZVEC2(1:IGRIM) = ZVEC2(1:IGRIM) - REAL( IVEC2(1:IGRIM) ) ! ! 1.1.3 perform the linear interpolation of the normalized ! "2+XDS"-moment of the incomplete gamma function ! - ZVEC1(1:IGRIM) = XGAMINC_RIM1( IVEC2(1:IGRIM)+1 )* ZVEC2(1:IGRIM) & - - XGAMINC_RIM1( IVEC2(1:IGRIM) )*(ZVEC2(1:IGRIM) - 1.0) - ZZW(:) = UNPACK( VECTOR=ZVEC1(:),MASK=GRIM,FIELD=0.0 ) + ZVEC1(1:IGRIM) = XGAMINC_RIM1( IVEC2(1:IGRIM)+1 )* ZVEC2(1:IGRIM) & + - XGAMINC_RIM1( IVEC2(1:IGRIM) )*(ZVEC2(1:IGRIM) - 1.0) + ZZW(:) = UNPACK( VECTOR=ZVEC1(:),MASK=GRIM,FIELD=0.0 ) ! ! 1.1.4 riming of the small sized aggregates ! - WHERE ( GRIM(:) ) - ZZW1(:,1) = MIN( ZRCS(:), & - XCRIMSS * ZZW(:) * ZRCT(:) & ! RCRIMSS - * ZLBDAS(:)**XEXCRIMSS & - * ZRHODREF(:)**(-XCEXVT) ) - ZRCS(:) = ZRCS(:) - ZZW1(:,1) - ZRSS(:) = ZRSS(:) + ZZW1(:,1) - ZTHS(:) = ZTHS(:) + ZZW1(:,1)*(ZLSFACT(:)-ZLVFACT(:)) ! f(L_f*(RCRIMSS)) + WHERE ( GRIM(:) ) + ZZW1(:,1) = MIN( PRCS1D(:), & + XCRIMSS * ZZW(:) * PRCT1D(:) & ! RCRIMSS + * PRST1D(:)*(1+(XFVELOS/PLBDAS(:))**XALPHAS)**(-XNUS+XEXCRIMSS/XALPHAS) & + * PRHODREF(:)**(-XCEXVT+1) & + * (PLBDAS(:)) ** (XEXCRIMSS+XBS) ) + PRCS1D(:) = PRCS1D(:) - ZZW1(:,1) + PRSS1D(:) = PRSS1D(:) + ZZW1(:,1) + PTHS1D(:) = PTHS1D(:) + ZZW1(:,1) * (PLSFACT(:) - PLVFACT(:)) ! f(L_f*(RCRIMSS)) ! - ZCCS(:) = MAX( ZCCS(:)-ZZW1(:,1)*(ZCCT(:)/ZRCT(:)),0.0 ) ! Lambda_c**3 - END WHERE + PCCS1D(:) = MAX( PCCS1D(:)-ZZW1(:,1)*(PCCT1D(:)/PRCT1D(:)),0.0 ) ! Lambda_c**3 + END WHERE ! ! 1.1.5 perform the linear interpolation of the normalized ! "XBS"-moment of the incomplete gamma function ! - ZVEC1(1:IGRIM) = XGAMINC_RIM2( IVEC2(1:IGRIM)+1 )* ZVEC2(1:IGRIM) & - - XGAMINC_RIM2( IVEC2(1:IGRIM) )*(ZVEC2(1:IGRIM) - 1.0) - ZZW(:) = UNPACK( VECTOR=ZVEC1(:),MASK=GRIM,FIELD=0.0 ) + ZVEC1(1:IGRIM) = XGAMINC_RIM2( IVEC2(1:IGRIM)+1 )* ZVEC2(1:IGRIM) & + - XGAMINC_RIM2( IVEC2(1:IGRIM) )*(ZVEC2(1:IGRIM) - 1.0) + ZZW(:) = UNPACK( VECTOR=ZVEC1(:),MASK=GRIM,FIELD=0.0 ) ! ! 1.1.6 riming-conversion of the large sized aggregates into graupeln ! -! - WHERE ( GRIM(:) .AND. (ZRSS(:)>XRTMIN(5)/PTSTEP) ) - ZZW1(:,2) = MIN( ZRCS(:), & - XCRIMSG * ZRCT(:) & ! RCRIMSG - * ZLBDAS(:)**XEXCRIMSG & - * ZRHODREF(:)**(-XCEXVT) & - - ZZW1(:,1) ) - ZZW1(:,3) = MIN( ZRSS(:), & - XSRIMCG * ZLBDAS(:)**XEXSRIMCG & ! RSRIMCG - * (1.0 - ZZW(:) )/(PTSTEP*ZRHODREF(:))) - ZRCS(:) = ZRCS(:) - ZZW1(:,2) - ZRSS(:) = ZRSS(:) - ZZW1(:,3) - ZRGS(:) = ZRGS(:) + ZZW1(:,2) + ZZW1(:,3) - ZTHS(:) = ZTHS(:) + ZZW1(:,2)*(ZLSFACT(:)-ZLVFACT(:)) ! f(L_f*(RCRIMSG)) -! - ZCCS(:) = MAX( ZCCS(:)-ZZW1(:,2)*(ZCCT(:)/ZRCT(:)),0.0 ) ! Lambda_c**3 - END WHERE - DEALLOCATE(IVEC2) - DEALLOCATE(IVEC1) - DEALLOCATE(ZVEC2) - DEALLOCATE(ZVEC1) - + WHERE ( GRIM(:) .AND. (PRSS1D(:)>XRTMIN(5)/PTSTEP) ) + ZZW1(:,2) = MIN( PRCS1D(:), & + XCRIMSG * PRCT1D(:)* PRST1D(:) & ! RCRIMSG + *(1+(XFVELOS/PLBDAS(:))**XALPHAS)**(-XNUS+XEXCRIMSG/XALPHAS)*PLBDAS(:)**(XBS+XEXCRIMSG) & + * PRHODREF(:)**(-XCEXVT+1) & + - ZZW1(:,1) ) + ZZW1(:,3) = MIN( PRSS1D(:), & + XSRIMCG * XNS * PRST1D(:) * (1.0 - ZZW(:))/PTSTEP ) + PRCS1D(:) = PRCS1D(:) - ZZW1(:,2) + PRSS1D(:) = PRSS1D(:) - ZZW1(:,3) + PRGS1D(:) = PRGS1D(:) + ZZW1(:,2) + ZZW1(:,3) + PTHS1D(:) = PTHS1D(:) + ZZW1(:,2) * (PLSFACT(:) - PLVFACT(:)) ! f(L_f*(RCRIMSG)) + ! + PCCS1D(:) = MAX( PCCS1D(:)-ZZW1(:,2)*(PCCT1D(:)/PRCT1D(:)),0.0 ) ! Lambda_c**3 + END WHERE + DEALLOCATE(IVEC2) + DEALLOCATE(IVEC1) + DEALLOCATE(ZVEC2) + DEALLOCATE(ZVEC1) + ! ! Budget storage if ( nbumod == kmi .and. lbu_enable ) then if ( lbudget_th ) call Budget_store_end( tbudgets(NBUDGET_TH), 'RIM', & - Unpack( zths(:), mask = gmicro(:, :, :), field = pths(:, :, :) ) * prhodj(:, :, :) ) + Unpack( pths1d(:), mask = gmicro(:, :, :), field = pths(:, :, :) ) * prhodj(:, :, :) ) if ( lbudget_rc ) call Budget_store_end( tbudgets(NBUDGET_RC), 'RIM', & - Unpack( zrcs(:), mask = gmicro(:, :, :), field = prcs(:, :, :) ) * prhodj(:, :, :) ) + Unpack( prcs1d(:), mask = gmicro(:, :, :), field = prcs(:, :, :) ) * prhodj(:, :, :) ) if ( lbudget_rs ) call Budget_store_end( tbudgets(NBUDGET_RS), 'RIM', & - Unpack( zrss(:), mask = gmicro(:, :, :), field = prss(:, :, :) ) * prhodj(:, :, :) ) + Unpack( prss1d(:), mask = gmicro(:, :, :), field = prss(:, :, :) ) * prhodj(:, :, :) ) if ( lbudget_rg ) call Budget_store_end( tbudgets(NBUDGET_RG), 'RIM', & - Unpack( zrgs(:), mask = gmicro(:, :, :), field = prgs(:, :, :) ) * prhodj(:, :, :) ) + Unpack( prgs1d(:), mask = gmicro(:, :, :), field = prgs(:, :, :) ) * prhodj(:, :, :) ) if ( lbudget_sv ) call Budget_store_end( tbudgets(NBUDGET_SV1 - 1 + nsv_lima_nc), 'RIM', & - Unpack( zccs(:), mask = gmicro(:, :, :), field = pccs(:, :, :) ) * prhodj(:, :, :) ) + Unpack( pccs1d(:), mask = gmicro(:, :, :), field = pccs(:, :, :) ) * prhodj(:, :, :) ) end if END IF ! +! !* 1.2 Hallett-Mossop ice multiplication process due to snow riming ! ----------------------------------------------------------------- ! -! -GRIM(:) = (ZZT(:)<XHMTMAX) .AND. (ZZT(:)>XHMTMIN) & - .AND. (ZRST(:)>XRTMIN(5)) .AND. (ZRCT(:)>XRTMIN(2)) +GRIM(:) = (PZT(:)<XHMTMAX) .AND. (PZT(:)>XHMTMIN) & + .AND. (PRST1D(:)>XRTMIN(5)) .AND. (PRCT1D(:)>XRTMIN(2)) IGRIM = COUNT( GRIM(:) ) IF( IGRIM>0 ) THEN ! Budget storage if ( nbumod == kmi .and. lbu_enable ) then if ( lbudget_ri ) call Budget_store_init( tbudgets(NBUDGET_RI), 'HMS', & - Unpack( zris(:), mask = gmicro(:, :, :), field = pris(:, :, :) ) * prhodj(:, :, :) ) + Unpack( pris1d(:), mask = gmicro(:, :, :), field = pris(:, :, :) ) * prhodj(:, :, :) ) if ( lbudget_rs ) call Budget_store_init( tbudgets(NBUDGET_RS), 'HMS', & - Unpack( zrss(:), mask = gmicro(:, :, :), field = prss(:, :, :) ) * prhodj(:, :, :) ) + Unpack( prss1d(:), mask = gmicro(:, :, :), field = prss(:, :, :) ) * prhodj(:, :, :) ) if ( lbudget_sv ) call Budget_store_init( tbudgets(NBUDGET_SV1 - 1 + nsv_lima_ni), 'HMS', & - Unpack( zcis(:), mask = gmicro(:, :, :), field = pcis(:, :, :) ) * prhodj(:, :, :) ) + Unpack( pcis1d(:), mask = gmicro(:, :, :), field = pcis(:, :, :) ) * prhodj(:, :, :) ) end if - ALLOCATE(ZVEC1(IGRIM)) - ALLOCATE(ZVEC2(IGRIM)) - ALLOCATE(IVEC2(IGRIM)) -! - ZVEC1(:) = PACK( ZLBDAC(:),MASK=GRIM(:) ) - ZVEC2(1:IGRIM) = MAX( 1.0001, MIN( REAL(NGAMINC)-0.0001, & - XHMLINTP1 * LOG( ZVEC1(1:IGRIM) ) + XHMLINTP2 ) ) - IVEC2(1:IGRIM) = INT( ZVEC2(1:IGRIM) ) - ZVEC2(1:IGRIM) = ZVEC2(1:IGRIM) - REAL( IVEC2(1:IGRIM) ) - ZVEC1(1:IGRIM) = XGAMINC_HMC( IVEC2(1:IGRIM)+1 )* ZVEC2(1:IGRIM) & - - XGAMINC_HMC( IVEC2(1:IGRIM) )*(ZVEC2(1:IGRIM) - 1.0) - ZZX(:) = UNPACK( VECTOR=ZVEC1(:),MASK=GRIM,FIELD=0.0 ) ! Large droplets -! - WHERE ( GRIM(:) .AND. ZZX(:)<0.99 ) - ZZW1(:,5) = (ZZW1(:,1)+ZZW1(:,2))*(ZCCT(:)/ZRCT(:))*(1.0-ZZX(:))* & - XHM_FACTS* & - MAX( 0.0, MIN( (ZZT(:)-XHMTMIN)/3.0,(XHMTMAX-ZZT(:))/2.0 ) ) ! CCHMSI - ZCIS(:) = ZCIS(:) + ZZW1(:,5) -! - ZZW1(:,6) = ZZW1(:,5) * XMNU0 ! RCHMSI - ZRIS(:) = ZRIS(:) + ZZW1(:,6) - ZRSS(:) = ZRSS(:) - ZZW1(:,6) - END WHERE - DEALLOCATE(IVEC2) - DEALLOCATE(ZVEC2) - DEALLOCATE(ZVEC1) - + ALLOCATE(ZVEC1(IGRIM)) + ALLOCATE(ZVEC2(IGRIM)) + ALLOCATE(IVEC2(IGRIM)) +! + ZVEC1(:) = PACK( PLBDAC(:),MASK=GRIM(:) ) + ZVEC2(1:IGRIM) = MAX( 1.0001, MIN( REAL(NGAMINC)-0.0001, & + XHMLINTP1 * LOG( ZVEC1(1:IGRIM) ) + XHMLINTP2 ) ) + IVEC2(1:IGRIM) = INT( ZVEC2(1:IGRIM) ) + ZVEC2(1:IGRIM) = ZVEC2(1:IGRIM) - REAL( IVEC2(1:IGRIM) ) + ZVEC1(1:IGRIM) = XGAMINC_HMC( IVEC2(1:IGRIM)+1 )* ZVEC2(1:IGRIM) & + - XGAMINC_HMC( IVEC2(1:IGRIM) )*(ZVEC2(1:IGRIM) - 1.0) + ZZX(:) = UNPACK( VECTOR=ZVEC1(:),MASK=GRIM,FIELD=0.0 ) ! Large droplets +! + WHERE ( GRIM(:) .AND. ZZX(:)<0.99 ) + ZZW1(:,5) = (ZZW1(:,1)+ZZW1(:,2))*(PCCT1D(:)/PRCT1D(:))*(1.0-ZZX(:))* & + XHM_FACTS* & + MAX( 0.0, MIN( (PZT(:)-XHMTMIN)/3.0,(XHMTMAX-PZT(:))/2.0 ) ) ! CCHMSI + PCIS1D(:) = PCIS1D(:) + ZZW1(:,5) +! + ZZW1(:,6) = ZZW1(:,5) * XMNU0 ! RCHMSI + PRIS1D(:) = PRIS1D(:) + ZZW1(:,6) + PRSS1D(:) = PRSS1D(:) - ZZW1(:,6) + END WHERE + DEALLOCATE(IVEC2) + DEALLOCATE(ZVEC2) + DEALLOCATE(ZVEC1) + ! ! Budget storage if ( nbumod == kmi .and. lbu_enable ) then if ( lbudget_ri ) call Budget_store_end( tbudgets(NBUDGET_RI), 'HMS', & - Unpack( zris(:), mask = gmicro(:, :, :), field = pris(:, :, :) ) * prhodj(:, :, :) ) + Unpack( pris1d(:), mask = gmicro(:, :, :), field = pris(:, :, :) ) * prhodj(:, :, :) ) if ( lbudget_rs ) call Budget_store_end( tbudgets(NBUDGET_RS), 'HMS', & - Unpack( zrss(:), mask = gmicro(:, :, :), field = prss(:, :, :) ) * prhodj(:, :, :) ) + Unpack( prss1d(:), mask = gmicro(:, :, :), field = prss(:, :, :) ) * prhodj(:, :, :) ) if ( lbudget_sv ) call Budget_store_end( tbudgets(NBUDGET_SV1 - 1 + nsv_lima_ni), 'HMS', & - Unpack( zcis(:), mask = gmicro(:, :, :), field = pcis(:, :, :) ) * prhodj(:, :, :) ) + Unpack( pcis1d(:), mask = gmicro(:, :, :), field = pcis(:, :, :) ) * prhodj(:, :, :) ) end if END IF ! ! -!* 1.3 Rain accretion onto the aggregates +!* 1.3 Ice multiplication process due to ice-ice collisions +! --------------------------------------------------------- +! +GCIBU(:) = LCIBU .AND. (PRST1D(:)>XRTMIN(5)) .AND. (PRGT1D(:)>XRTMIN(6)) +ICIBU = COUNT( GCIBU(:) ) +! +IF (ICIBU > 0) THEN +! + ! Budget storage + if ( nbumod == kmi .and. lbu_enable ) then + if ( lbudget_ri ) call Budget_store_init( tbudgets(NBUDGET_RI), 'CIBU', & + Unpack( pris1d(:), mask = gmicro(:, :, :), field = pris(:, :, :) ) * prhodj(:, :, :) ) + if ( lbudget_rs ) call Budget_store_init( tbudgets(NBUDGET_RS), 'CIBU', & + Unpack( prss1d(:), mask = gmicro(:, :, :), field = prss(:, :, :) ) * prhodj(:, :, :) ) + if ( lbudget_sv ) call Budget_store_init( tbudgets(NBUDGET_SV1 - 1 + nsv_lima_ni), 'CIBU', & + Unpack( pcis1d(:), mask = gmicro(:, :, :), field = pcis(:, :, :) ) * prhodj(:, :, :) ) + end if +! +! 1.3.0 randomization of XNDEBRIS_CIBU values +! + IF (GFIRSTCALL) THEN + CALL RANDOM_SEED(SIZE=NI_SEED) ! get size of seed + ALLOCATE(I_SEED(NI_SEED)) + I_SEED(:) = I_SEED_PARAM ! + CALL RANDOM_SEED(PUT=I_SEED) + GFIRSTCALL = .FALSE. + END IF +! + ALLOCATE(ZFRAGMENTS(ICIBU)) +! + IF (XNDEBRIS_CIBU >= 0.0) THEN + ZFRAGMENTS(:) = XNDEBRIS_CIBU + ELSE +! +! Mantissa gives the mean value (randomization around 10**MANTISSA) +! First digit after the comma provides the full range around 10**MANTISSA +! + ALLOCATE(ZHARVEST(ICIBU)) +! + ZFACT1_XNDEBRIS = AINT(XNDEBRIS_CIBU) + ZFACT2_XNDEBRIS = ABS(ANINT(10.0*(XNDEBRIS_CIBU - ZFACT1_XNDEBRIS))) +! + CALL RANDOM_NUMBER(ZHARVEST(:)) +! + ZFRAGMENTS(:) = 10.0**(ZFACT2_XNDEBRIS*ZHARVEST(:) + ZFACT1_XNDEBRIS) +! + DEALLOCATE(ZHARVEST) +! +! ZFRAGMENTS is a random variable containing the number of fragments per collision +! For XNDEBRIS_CIBU=-1.2345 => ZFRAGMENTS(:) = 10.0**(2.0*RANDOM_NUMBER(ZHARVEST(:)) - 1.0) +! and ZFRAGMENTS=[0.1, 10.0] centered around 1.0 +! + END IF +! +! +! 1.3.1 To compute the partial integration of snow gamma function +! +! 1.3.1.0 allocations +! + ALLOCATE(ZVEC1_S(ICIBU)) + ALLOCATE(ZVEC1_S1(ICIBU)) + ALLOCATE(ZVEC1_S2(ICIBU)) + ALLOCATE(ZVEC1_S3(ICIBU)) + ALLOCATE(ZVEC1_S4(ICIBU)) + ALLOCATE(ZVEC1_S11(ICIBU)) + ALLOCATE(ZVEC1_S12(ICIBU)) + ALLOCATE(ZVEC1_S21(ICIBU)) + ALLOCATE(ZVEC1_S22(ICIBU)) + ALLOCATE(ZVEC1_S31(ICIBU)) + ALLOCATE(ZVEC1_S32(ICIBU)) + ALLOCATE(ZVEC1_S41(ICIBU)) + ALLOCATE(ZVEC1_S42(ICIBU)) + ALLOCATE(ZVEC2_S1(ICIBU)) + ALLOCATE(IVEC2_S1(ICIBU)) + ALLOCATE(ZVEC2_S2(ICIBU)) + ALLOCATE(IVEC2_S2(ICIBU)) +! +! +! 1.3.1.1 select the PLBDAS +! + ZVEC1_S(:) = PACK( PLBDAS(:),MASK=GCIBU(:) ) +! +! +! 1.3.1.2 find the next lower indice for the PLBDAS in the +! geometrical set of Lbda_s used to tabulate some moments of the +! incomplete gamma function, for boundary 1 (0.2 mm) +! + ZVEC2_S1(1:ICIBU) = MAX( 1.0001, MIN( FLOAT(NGAMINC)-0.0001,XCIBUINTP_S & + * LOG( ZVEC1_S(1:ICIBU) ) + XCIBUINTP1_S ) ) + IVEC2_S1(1:ICIBU) = INT( ZVEC2_S1(1:ICIBU) ) + ZVEC2_S1(1:ICIBU) = ZVEC2_S1(1:ICIBU) - FLOAT( IVEC2_S1(1:ICIBU) ) +! +! +! 1.3.1.3 find the next lower indice for the PLBDAS in the +! geometrical set of Lbda_s used to tabulate some moments of the +! incomplete gamma function, for boundary 2 (1 mm) +! + ZVEC2_S2(1:ICIBU) = MAX( 1.0001, MIN( FLOAT(NGAMINC)-0.0001,XCIBUINTP_S & + * LOG( ZVEC1_S(1:ICIBU) ) + XCIBUINTP2_S ) ) + IVEC2_S2(1:ICIBU) = INT( ZVEC2_S2(1:ICIBU) ) + ZVEC2_S2(1:ICIBU) = ZVEC2_S2(1:ICIBU) - FLOAT( IVEC2_S2(1:ICIBU) ) +! +! +! 1.3.1.4 perform the linear interpolation of the +! normalized "0"-moment of the incomplete gamma function +! +! For lower boundary (0.2 mm) + ZVEC1_S11(1:ICIBU) = XGAMINC_CIBU_S(1,IVEC2_S1(1:ICIBU)+1) * ZVEC2_S1(1:ICIBU) & + - XGAMINC_CIBU_S(1,IVEC2_S1(1:ICIBU)) * (ZVEC2_S1(1:ICIBU)-1.0) +! +! For upper boundary (1 mm) + ZVEC1_S12(1:ICIBU) = XGAMINC_CIBU_S(1,IVEC2_S2(1:ICIBU)+1) * ZVEC2_S2(1:ICIBU) & + - XGAMINC_CIBU_S(1,IVEC2_S2(1:ICIBU)) * (ZVEC2_S2(1:ICIBU)-1.0) +! +! Computation of spectrum from 0.2 mm to 1 mm + ZVEC1_S1(1:ICIBU) = ZVEC1_S12(1:ICIBU) - ZVEC1_S11(1:ICIBU) +! +! +! 1.3.1.5 perform the linear interpolation of the +! normalized "XDS"-moment of the incomplete gamma function +! +! For lower boundary (0.2 mm) + ZVEC1_S21(1:ICIBU) = XGAMINC_CIBU_S(2,IVEC2_S1(1:ICIBU)+1) * ZVEC2_S1(1:ICIBU) & + - XGAMINC_CIBU_S(2,IVEC2_S1(1:ICIBU)) * (ZVEC2_S1(1:ICIBU)-1.0) +! +! For upper boundary (1 mm) + ZVEC1_S22(1:ICIBU) = XGAMINC_CIBU_S(2,IVEC2_S2(1:ICIBU)+1) * ZVEC2_S2(1:ICIBU) & + - XGAMINC_CIBU_S(2,IVEC2_S2(1:ICIBU)) * (ZVEC2_S2(1:ICIBU)-1.0) +! +! From 0.2 mm to 1 mm we need + ZVEC1_S2(1:ICIBU) = XMOMGS_CIBU_1 * (ZVEC1_S22(1:ICIBU) - ZVEC1_S21(1:ICIBU)) +! +! For lower boundary (0.2 mm) + ZVEC1_S31(1:ICIBU) = XGAMINC_CIBU_S(3,IVEC2_S1(1:ICIBU)+1) * ZVEC2_S1(1:ICIBU) & + - XGAMINC_CIBU_S(3,IVEC2_S1(1:ICIBU)) * (ZVEC2_S1(1:ICIBU)-1.0) +! +! For upper boundary (1 mm) + ZVEC1_S32(1:ICIBU) = XGAMINC_CIBU_S(3,IVEC2_S2(1:ICIBU)+1) * ZVEC2_S2(1:ICIBU) & + - XGAMINC_CIBU_S(3,IVEC2_S2(1:ICIBU)) * (ZVEC2_S2(1:ICIBU)-1.0) +! +! From 0.2 mm to 1 mm we need + ZVEC1_S3(1:ICIBU) = XMOMGS_CIBU_2 * (ZVEC1_S32(1:ICIBU) - ZVEC1_S31(1:ICIBU)) +! +! +! 1.3.1.6 perform the linear interpolation of the +! normalized "XBS+XDS"-moment of the incomplete gamma function +! +! For lower boundary (0.2 mm) + ZVEC1_S41(1:ICIBU) = XGAMINC_CIBU_S(4,IVEC2_S1(1:ICIBU)+1) * ZVEC2_S1(1:ICIBU) & + - XGAMINC_CIBU_S(4,IVEC2_S1(1:ICIBU)) * (ZVEC2_S1(1:ICIBU)-1.0) +! +! For upper boundary (1 mm) + ZVEC1_S42(1:ICIBU) = XGAMINC_CIBU_S(4,IVEC2_S2(1:ICIBU)+1) * ZVEC2_S2(1:ICIBU) & + - XGAMINC_CIBU_S(4,IVEC2_S2(1:ICIBU)) * (ZVEC2_S2(1:ICIBU)-1.0) +! +! From 0.2 mm to 1 mm we need + ZVEC1_S4(1:ICIBU) = XMOMGS_CIBU_3 * (ZVEC1_S42(1:ICIBU) - ZVEC1_S41(1:ICIBU)) +! + ALLOCATE(ZINTG_SNOW_1(SIZE(PZT))) + ALLOCATE(ZINTG_SNOW_2(SIZE(PZT))) + ALLOCATE(ZINTG_SNOW_3(SIZE(PZT))) + ALLOCATE(ZINTG_SNOW_4(SIZE(PZT))) +! + ZINTG_SNOW_1(:) = UNPACK ( VECTOR=ZVEC1_S1(:),MASK=GCIBU,FIELD=0.0 ) + ZINTG_SNOW_2(:) = UNPACK ( VECTOR=ZVEC1_S2(:),MASK=GCIBU,FIELD=0.0 ) + ZINTG_SNOW_3(:) = UNPACK ( VECTOR=ZVEC1_S3(:),MASK=GCIBU,FIELD=0.0 ) + ZINTG_SNOW_4(:) = UNPACK ( VECTOR=ZVEC1_S4(:),MASK=GCIBU,FIELD=0.0 ) +! +! +! 1.3.2 Compute the partial integration of graupel gamma function +! +! 1.3.2.0 allocations +! + ALLOCATE(ZVEC1_G(ICIBU)) + ALLOCATE(ZVEC1_G1(ICIBU)) + ALLOCATE(ZVEC1_G2(ICIBU)) + ALLOCATE(ZVEC2_G(ICIBU)) + ALLOCATE(IVEC2_G(ICIBU)) +! +! +! 1.3.2.1 select the PLBDAG +! + ZVEC1_G(:) = PACK( PLBDAG(:),MASK=GCIBU(:) ) +! +! +! 1.3.2.2 find the next lower indice for the PLBDAG in the +! geometrical set of Lbda_g used to tabulate some moments of the +! incomplete gamma function, for the "2mm" boundary +! + ZVEC2_G(1:ICIBU) = MAX( 1.0001, MIN( FLOAT(NGAMINC)-0.0001,XCIBUINTP_G & + * LOG( ZVEC1_G(1:ICIBU) ) + XCIBUINTP1_G ) ) + IVEC2_G(1:ICIBU) = INT( ZVEC2_G(1:ICIBU) ) + ZVEC2_G(1:ICIBU) = ZVEC2_G(1:ICIBU) - FLOAT( IVEC2_G(1:ICIBU) ) +! +! +! 1.3.2.3 perform the linear interpolation of the +! normalized "2+XDG"-moment of the incomplete gamma function +! + ZVEC1_G1(1:ICIBU) = XGAMINC_CIBU_G(1,IVEC2_G(1:ICIBU)+1) * ZVEC2_G(1:ICIBU) & + - XGAMINC_CIBU_G(1,IVEC2_G(1:ICIBU)) * (ZVEC2_G(1:ICIBU)-1.0) +! +! From 2 mm to infinity we need + ZVEC1_G1(1:ICIBU) = XMOMGG_CIBU_1 * (1.0 - ZVEC1_G1(1:ICIBU)) +! +! +! 1.3.2.4 perform the linear interpolation of the +! normalized "2.0"-moment of the incomplete gamma function +! + ZVEC1_G2(1:ICIBU) = XGAMINC_CIBU_G(2,IVEC2_G(1:ICIBU)+1) * ZVEC2_G(1:ICIBU) & + - XGAMINC_CIBU_G(2,IVEC2_G(1:ICIBU)) * (ZVEC2_G(1:ICIBU)-1.0) +! +! From 2 mm to infinity we need + ZVEC1_G2(1:ICIBU) = XMOMGG_CIBU_2 * (1.0 - ZVEC1_G2(1:ICIBU)) +! +! + ALLOCATE(ZINTG_GRAUPEL_1(SIZE(PZT))) + ALLOCATE(ZINTG_GRAUPEL_2(SIZE(PZT))) +! + ZINTG_GRAUPEL_1(:) = UNPACK ( VECTOR=ZVEC1_G1(:),MASK=GCIBU,FIELD=0.0 ) + ZINTG_GRAUPEL_2(:) = UNPACK ( VECTOR=ZVEC1_G2(:),MASK=GCIBU,FIELD=0.0 ) +! +! +! 1.3.3 To compute final "CIBU" contributions +! + ALLOCATE(ZNI_CIBU(SIZE(PZT))) + ALLOCATE(ZFRAG_CIBU(SIZE(PZT))) +! + ZFRAG_CIBU(:) = UNPACK ( VECTOR=ZFRAGMENTS(:),MASK=GCIBU,FIELD=0.0 ) + ZNI_CIBU(:) = ZFRAG_CIBU(:) * (XFACTOR_CIBU_NI * PRST1D(:) / (PRHODREF(:)**XCEXVT)) * & + (XCG * ZINTG_GRAUPEL_1(:) * ZINTG_SNOW_1(:) * & + PLBDAS(:)**(XBS) * PLBDAG(:)**(XCXG-(XDG+2.0)) & + - XCS * ZINTG_GRAUPEL_2(:) * ZINTG_SNOW_2(:) * & + PLBDAS(:)**(-XDS+XBS) * PLBDAG(:)**(XCXG-2.0) * & + (1+(XFVELOS/PLBDAS(:))**XALPHAS)**(-XNUS-XDS/XALPHAS) ) + PCIS1D(:) = PCIS1D(:) + MAX(ZNI_CIBU(:), 0.) +! + DEALLOCATE(ZFRAG_CIBU) + DEALLOCATE(ZFRAGMENTS) +! +! Max value of rs removed by CIBU + ALLOCATE(ZRI_CIBU(SIZE(PZT))) + ZRI_CIBU(:) = (XFACTOR_CIBU_RI * PRST1D(:) / (PRHODREF(:)**XCEXVT)) * & + (XCG * ZINTG_GRAUPEL_1(:) * ZINTG_SNOW_3(:) * & + PLBDAG(:)**(XCXG-(XDG+2.0)) & + - XCS * ZINTG_GRAUPEL_2(:) * ZINTG_SNOW_4(:) * & + PLBDAS(:)**(-XDS) * PLBDAG(:)**(XCXG-2.0) * & + (1+(XFVELOS/PLBDAS(:))**XALPHAS)**(-XNUS-(XBS+XDS)/XALPHAS) ) +! +! The value of rs removed by CIBU is determined by the mean mass of pristine ice + WHERE( PRIT1D(:)>XRTMIN(4) .AND. PCIT1D(:)>XCTMIN(4) ) + ZRI_CIBU(:) = MIN( ZRI_CIBU(:), PRSS1D(:), ZNI_CIBU(:)*PRIT1D(:)/PCIT1D(:) ) + ELSE WHERE + ZRI_CIBU(:) = MIN( ZRI_CIBU(:), PRSS1D(:), MAX( ZNI_CIBU(:)*XMNU0,XRTMIN(4) ) ) + END WHERE +! + PRIS1D(:) = PRIS1D(:) + MAX(ZRI_CIBU(:), 0.) ! + PRSS1D(:) = PRSS1D(:) - MAX(ZRI_CIBU(:), 0.) ! +! + DEALLOCATE(ZVEC1_S) + DEALLOCATE(ZVEC1_S1) + DEALLOCATE(ZVEC1_S2) + DEALLOCATE(ZVEC1_S3) + DEALLOCATE(ZVEC1_S4) + DEALLOCATE(ZVEC1_S11) + DEALLOCATE(ZVEC1_S12) + DEALLOCATE(ZVEC1_S21) + DEALLOCATE(ZVEC1_S22) + DEALLOCATE(ZVEC1_S31) + DEALLOCATE(ZVEC1_S32) + DEALLOCATE(ZVEC1_S41) + DEALLOCATE(ZVEC1_S42) + DEALLOCATE(ZVEC2_S1) + DEALLOCATE(IVEC2_S1) + DEALLOCATE(ZVEC2_S2) + DEALLOCATE(IVEC2_S2) + DEALLOCATE(ZVEC1_G) + DEALLOCATE(ZVEC1_G1) + DEALLOCATE(ZVEC1_G2) + DEALLOCATE(ZVEC2_G) + DEALLOCATE(IVEC2_G) + DEALLOCATE(ZINTG_SNOW_1) + DEALLOCATE(ZINTG_SNOW_2) + DEALLOCATE(ZINTG_SNOW_3) + DEALLOCATE(ZINTG_SNOW_4) + DEALLOCATE(ZINTG_GRAUPEL_1) + DEALLOCATE(ZINTG_GRAUPEL_2) + DEALLOCATE(ZNI_CIBU) + DEALLOCATE(ZRI_CIBU) + ! + ! Budget storage + if ( nbumod == kmi .and. lbu_enable ) then + if ( lbudget_ri ) call Budget_store_end( tbudgets(NBUDGET_RI), 'CIBU', & + Unpack( pris1d(:), mask = gmicro(:, :, :), field = pris(:, :, :) ) * prhodj(:, :, :) ) + if ( lbudget_rs ) call Budget_store_end( tbudgets(NBUDGET_RS), 'CIBU', & + Unpack( prss1d(:), mask = gmicro(:, :, :), field = prss(:, :, :) ) * prhodj(:, :, :) ) + if ( lbudget_sv ) call Budget_store_end( tbudgets(NBUDGET_SV1 - 1 + nsv_lima_ni), 'CIBU', & + Unpack( pcis1d(:), mask = gmicro(:, :, :), field = pcis(:, :, :) ) * prhodj(:, :, :) ) + end if +END IF +! +! +!* 1.4 Rain accretion onto the aggregates ! --------------------------------------- ! ! ZZW1(:,2:3) = 0.0 -GACC(:) = (ZRRT(:)>XRTMIN(3)) .AND. (ZRST(:)>XRTMIN(5)) .AND. (ZRRS(:)>XRTMIN(3)/PTSTEP) .AND. (ZZT(:)<XTT) +GACC(:) = (PRRT1D(:)>XRTMIN(3)) .AND. (PRST1D(:)>XRTMIN(5)) .AND. (PRRS1D(:)>XRTMIN(3)/PTSTEP) .AND. (PZT(:)<XTT) IGACC = COUNT( GACC(:) ) ! IF( IGACC>0 .AND. LRAIN) THEN ! Budget storage if ( nbumod == kmi .and. lbu_enable ) then if ( lbudget_th ) call Budget_store_init( tbudgets(NBUDGET_TH), 'ACC', & - Unpack( zths(:), mask = gmicro(:, :, :), field = pths(:, :, :) ) * prhodj(:, :, :) ) + Unpack( pths1d(:), mask = gmicro(:, :, :), field = pths(:, :, :) ) * prhodj(:, :, :) ) if ( lbudget_rr ) call Budget_store_init( tbudgets(NBUDGET_RR), 'ACC', & - Unpack( zrrs(:), mask = gmicro(:, :, :), field = prrs(:, :, :) ) * prhodj(:, :, :) ) + Unpack( prrs1d(:), mask = gmicro(:, :, :), field = prrs(:, :, :) ) * prhodj(:, :, :) ) if ( lbudget_rs ) call Budget_store_init( tbudgets(NBUDGET_RS), 'ACC', & - Unpack( zrss(:), mask = gmicro(:, :, :), field = prss(:, :, :) ) * prhodj(:, :, :) ) + Unpack( prss1d(:), mask = gmicro(:, :, :), field = prss(:, :, :) ) * prhodj(:, :, :) ) if ( lbudget_rg ) call Budget_store_init( tbudgets(NBUDGET_RG), 'ACC', & - Unpack( zrgs(:), mask = gmicro(:, :, :), field = prgs(:, :, :) ) * prhodj(:, :, :) ) + Unpack( prgs1d(:), mask = gmicro(:, :, :), field = prgs(:, :, :) ) * prhodj(:, :, :) ) if ( lbudget_sv ) call Budget_store_init( tbudgets(NBUDGET_SV1 - 1 + nsv_lima_nr), 'ACC', & - Unpack( zcrs(:), mask = gmicro(:, :, :), field = pcrs(:, :, :) ) * prhodj(:, :, :) ) + Unpack( pcrs1d(:), mask = gmicro(:, :, :), field = pcrs(:, :, :) ) * prhodj(:, :, :) ) end if ! -! 1.3.0 allocations +! 1.4.0 allocations ! - ALLOCATE(ZVEC1(IGACC)) - ALLOCATE(ZVEC2(IGACC)) - ALLOCATE(ZVEC3(IGACC)) - ALLOCATE(IVEC1(IGACC)) - ALLOCATE(IVEC2(IGACC)) + ALLOCATE(ZVEC1(IGACC)) + ALLOCATE(ZVEC2(IGACC)) + ALLOCATE(ZVEC3(IGACC)) + ALLOCATE(IVEC1(IGACC)) + ALLOCATE(IVEC2(IGACC)) ! -! 1.3.1 select the (ZLBDAS,ZLBDAR) couplet +! 1.4.1 select the (PLBDAS,PLBDAR) couplet ! - ZVEC1(:) = PACK( ZLBDAS(:),MASK=GACC(:) ) - ZVEC2(:) = PACK( ZLBDAR(:),MASK=GACC(:) ) + ZVEC1(:) = PACK( PLBDAS(:),MASK=GACC(:) ) + ZVEC2(:) = PACK( PLBDAR(:),MASK=GACC(:) ) ! -! 1.3.2 find the next lower indice for the ZLBDAS and for the ZLBDAR +! 1.4.2 find the next lower indice for the PLBDAS and for the PLBDAR ! in the geometrical set of (Lbda_s,Lbda_r) couplet use to ! tabulate the RACCSS-kernel ! - ZVEC1(1:IGACC) = MAX( 1.0001, MIN( REAL(NACCLBDAS)-0.0001, & - XACCINTP1S * LOG( ZVEC1(1:IGACC) ) + XACCINTP2S ) ) - IVEC1(1:IGACC) = INT( ZVEC1(1:IGACC) ) - ZVEC1(1:IGACC) = ZVEC1(1:IGACC) - REAL( IVEC1(1:IGACC) ) + ZVEC1(1:IGACC) = MAX( 1.0001, MIN( REAL(NACCLBDAS)-0.0001, & + XACCINTP1S * LOG( ZVEC1(1:IGACC) ) + XACCINTP2S ) ) + IVEC1(1:IGACC) = INT( ZVEC1(1:IGACC) ) + ZVEC1(1:IGACC) = ZVEC1(1:IGACC) - REAL( IVEC1(1:IGACC) ) ! - ZVEC2(1:IGACC) = MAX( 1.0001, MIN( REAL(NACCLBDAR)-0.0001, & - XACCINTP1R * LOG( ZVEC2(1:IGACC) ) + XACCINTP2R ) ) - IVEC2(1:IGACC) = INT( ZVEC2(1:IGACC) ) - ZVEC2(1:IGACC) = ZVEC2(1:IGACC) - REAL( IVEC2(1:IGACC) ) + ZVEC2(1:IGACC) = MAX( 1.0001, MIN( REAL(NACCLBDAR)-0.0001, & + XACCINTP1R * LOG( ZVEC2(1:IGACC) ) + XACCINTP2R ) ) + IVEC2(1:IGACC) = INT( ZVEC2(1:IGACC) ) + ZVEC2(1:IGACC) = ZVEC2(1:IGACC) - REAL( IVEC2(1:IGACC) ) ! -! 1.3.3 perform the bilinear interpolation of the normalized +! 1.4.3 perform the bilinear interpolation of the normalized ! RACCSS-kernel ! - DO JJ = 1,IGACC - ZVEC3(JJ) = ( XKER_RACCSS(IVEC1(JJ)+1,IVEC2(JJ)+1)* ZVEC2(JJ) & - - XKER_RACCSS(IVEC1(JJ)+1,IVEC2(JJ) )*(ZVEC2(JJ) - 1.0) ) & - * ZVEC1(JJ) & - - ( XKER_RACCSS(IVEC1(JJ) ,IVEC2(JJ)+1)* ZVEC2(JJ) & - - XKER_RACCSS(IVEC1(JJ) ,IVEC2(JJ) )*(ZVEC2(JJ) - 1.0) ) & - * (ZVEC1(JJ) - 1.0) - END DO - ZZW(:) = UNPACK( VECTOR=ZVEC3(:),MASK=GACC,FIELD=0.0 ) -! -! 1.3.4 raindrop accretion on the small sized aggregates -! - WHERE ( GACC(:) ) - ZZW1(:,2) = ZCRT(:) * & !! coef of RRACCS - XFRACCSS*( ZLBDAS(:)**XCXS )*( ZRHODREF(:)**(-XCEXVT-1.) ) & - *( XLBRACCS1/((ZLBDAS(:)**2) ) + & - XLBRACCS2/( ZLBDAS(:) * ZLBDAR(:) ) + & - XLBRACCS3/( (ZLBDAR(:)**2)) )/ZLBDAR(:)**3 - ZZW1(:,4) = MIN( ZRRS(:),ZZW1(:,2)*ZZW(:) ) ! RRACCSS - ZRRS(:) = ZRRS(:) - ZZW1(:,4) - ZRSS(:) = ZRSS(:) + ZZW1(:,4) - ZTHS(:) = ZTHS(:) + ZZW1(:,4)*(ZLSFACT(:)-ZLVFACT(:)) ! f(L_f*(RRACCSS)) -! - ZCRS(:) = MAX( ZCRS(:)-ZZW1(:,4)*(ZCRT(:)/ZRRT(:)),0.0 ) ! Lambda_r**3 - END WHERE -! -! 1.3.4b perform the bilinear interpolation of the normalized + DO JJ = 1,IGACC + ZVEC3(JJ) = ( XKER_RACCSS(IVEC1(JJ)+1,IVEC2(JJ)+1) * ZVEC2(JJ) & + - XKER_RACCSS(IVEC1(JJ)+1,IVEC2(JJ) ) * (ZVEC2(JJ) - 1.0) ) & + * ZVEC1(JJ) & + - ( XKER_RACCSS(IVEC1(JJ) ,IVEC2(JJ)+1) * ZVEC2(JJ) & + - XKER_RACCSS(IVEC1(JJ) ,IVEC2(JJ) ) * (ZVEC2(JJ) - 1.0) ) & + * (ZVEC1(JJ) - 1.0) + END DO + ZZW(:) = UNPACK( VECTOR=ZVEC3(:),MASK=GACC,FIELD=0.0 ) +! +! 1.4.4 raindrop accretion on the small sized aggregates +! + WHERE ( GACC(:) ) + ZZW1(:,2) = PCRT1D(:) * & !! coef of RRACCS + XFRACCSS*( PRST1D(:)*PLBDAS(:)**XBS )*( PRHODREF(:)**(1-XCEXVT) ) & + *( XLBRACCS1/((PLBDAS(:)**2) ) + & + XLBRACCS2/( PLBDAS(:) * PLBDAR(:) ) + & + XLBRACCS3/( (PLBDAR(:)**2)) )/PLBDAR(:)**XBR + ZZW1(:,4) = MIN( PRRS1D(:),ZZW1(:,2)*ZZW(:) ) ! RRACCSS + PRRS1D(:) = PRRS1D(:) - ZZW1(:,4) + PRSS1D(:) = PRSS1D(:) + ZZW1(:,4) + PTHS1D(:) = PTHS1D(:) + ZZW1(:,4) * (PLSFACT(:) - PLVFACT(:)) ! f(L_f*(RRACCSS)) +! + PCRS1D(:) = MAX( PCRS1D(:)-ZZW1(:,4)*(PCRT1D(:)/PRRT1D(:)),0.0 ) ! Lambda_r**3 + END WHERE +! +! 1.4.4b perform the bilinear interpolation of the normalized ! RACCS-kernel ! - DO JJ = 1,IGACC - ZVEC3(JJ) = ( XKER_RACCS(IVEC1(JJ)+1,IVEC2(JJ)+1)* ZVEC2(JJ) & - - XKER_RACCS(IVEC1(JJ)+1,IVEC2(JJ) )*(ZVEC2(JJ) - 1.0) ) & - * ZVEC1(JJ) & - - ( XKER_RACCS(IVEC1(JJ) ,IVEC2(JJ)+1)* ZVEC2(JJ) & - - XKER_RACCS(IVEC1(JJ) ,IVEC2(JJ) )*(ZVEC2(JJ) - 1.0) ) & - * (ZVEC1(JJ) - 1.0) - END DO - ZZW1(:,2) = ZZW1(:,2)*UNPACK( VECTOR=ZVEC3(:),MASK=GACC(:),FIELD=0.0 ) !! RRACCS -! -! 1.3.5 perform the bilinear interpolation of the normalized + DO JJ = 1,IGACC + ZVEC3(JJ) = ( XKER_RACCS(IVEC1(JJ)+1,IVEC2(JJ)+1) * ZVEC2(JJ) & + - XKER_RACCS(IVEC1(JJ)+1,IVEC2(JJ) ) * (ZVEC2(JJ) - 1.0) ) & + * ZVEC1(JJ) & + - ( XKER_RACCS(IVEC1(JJ) ,IVEC2(JJ)+1) * ZVEC2(JJ) & + - XKER_RACCS(IVEC1(JJ) ,IVEC2(JJ) ) * (ZVEC2(JJ) - 1.0) ) & + * (ZVEC1(JJ) - 1.0) + END DO + ZZW1(:,2) = ZZW1(:,2)*UNPACK( VECTOR=ZVEC3(:),MASK=GACC(:),FIELD=0.0 ) !! RRACCS +! +! 1.4.5 perform the bilinear interpolation of the normalized ! SACCRG-kernel ! - DO JJ = 1,IGACC - ZVEC3(JJ) = ( XKER_SACCRG(IVEC2(JJ)+1,IVEC1(JJ)+1)* ZVEC1(JJ) & - - XKER_SACCRG(IVEC2(JJ)+1,IVEC1(JJ) )*(ZVEC1(JJ) - 1.0) ) & - * ZVEC2(JJ) & - - ( XKER_SACCRG(IVEC2(JJ) ,IVEC1(JJ)+1)* ZVEC1(JJ) & - - XKER_SACCRG(IVEC2(JJ) ,IVEC1(JJ) )*(ZVEC1(JJ) - 1.0) ) & - * (ZVEC2(JJ) - 1.0) - END DO - ZZW(:) = UNPACK( VECTOR=ZVEC3(:),MASK=GACC,FIELD=0.0 ) -! -! 1.3.6 raindrop accretion-conversion of the large sized aggregates + DO JJ = 1,IGACC + ZVEC3(JJ) = ( XKER_SACCRG(IVEC2(JJ)+1,IVEC1(JJ)+1) * ZVEC1(JJ) & + - XKER_SACCRG(IVEC2(JJ)+1,IVEC1(JJ) ) * (ZVEC1(JJ) - 1.0) ) & + * ZVEC2(JJ) & + - ( XKER_SACCRG(IVEC2(JJ) ,IVEC1(JJ)+1) * ZVEC1(JJ) & + - XKER_SACCRG(IVEC2(JJ) ,IVEC1(JJ) ) * (ZVEC1(JJ) - 1.0) ) & + * (ZVEC2(JJ) - 1.0) + END DO + ZZW(:) = UNPACK( VECTOR=ZVEC3(:),MASK=GACC,FIELD=0.0 ) +! +! 1.4.6 raindrop accretion-conversion of the large sized aggregates ! into graupeln ! - WHERE ( GACC(:) .AND. (ZRSS(:)>XRTMIN(5)/PTSTEP) ) - ZZW1(:,2) = MAX( MIN( ZRRS(:),ZZW1(:,2)-ZZW1(:,4) ) , 0. ) ! RRACCSG - ZZW1(:,3) = MIN( ZRSS(:),XFSACCRG*ZZW(:)* & ! RSACCRG - ( ZLBDAS(:)**(XCXS-XBS) )*( ZRHODREF(:)**(-XCEXVT-1.) ) & - *( XLBSACCR1/((ZLBDAR(:)**2) ) + & - XLBSACCR2/( ZLBDAR(:) * ZLBDAS(:) ) + & - XLBSACCR3/( (ZLBDAS(:)**2)) ) ) - ZRRS(:) = ZRRS(:) - ZZW1(:,2) - ZRSS(:) = ZRSS(:) - ZZW1(:,3) - ZRGS(:) = ZRGS(:) + ZZW1(:,2)+ZZW1(:,3) - ZTHS(:) = ZTHS(:) + ZZW1(:,2)*(ZLSFACT(:)-ZLVFACT(:)) ! f(L_f*(RRACCSG)) -! - ZCRS(:) = MAX( ZCRS(:)-ZZW1(:,2)*(ZCRT(:)/ZRRT(:)),0.0 ) ! Lambda_r**3 - END WHERE - DEALLOCATE(IVEC2) - DEALLOCATE(IVEC1) - DEALLOCATE(ZVEC3) - DEALLOCATE(ZVEC2) - DEALLOCATE(ZVEC1) - + WHERE ( GACC(:) .AND. (PRSS1D(:)>XRTMIN(5)/PTSTEP) ) + ZZW1(:,2) = MAX( MIN( PRRS1D(:),ZZW1(:,2)-ZZW1(:,4) ) , 0. ) ! RRACCSG + ZZW1(:,3) = MIN( PRSS1D(:),XFSACCRG*ZZW(:)* & ! RSACCRG + ( PRST1D(:) )*( PRHODREF(:)**(1-XCEXVT) ) & + *( XLBSACCR1/((PLBDAR(:)**2) ) + & + XLBSACCR2/( PLBDAR(:) * PLBDAS(:) ) + & + XLBSACCR3/( (PLBDAS(:)**2)) ) ) + PRRS1D(:) = PRRS1D(:) - ZZW1(:,2) + PRSS1D(:) = PRSS1D(:) - ZZW1(:,3) + PRGS1D(:) = PRGS1D(:) + ZZW1(:,2) + ZZW1(:,3) + PTHS1D(:) = PTHS1D(:) + ZZW1(:,2) * (PLSFACT(:) - PLVFACT(:)) ! f(L_f*(RRACCSG)) +! + PCRS1D(:) = MAX( PCRS1D(:)-ZZW1(:,2)*(PCRT1D(:)/PRRT1D(:)),0.0 ) ! Lambda_r**3 + END WHERE + DEALLOCATE(IVEC2) + DEALLOCATE(IVEC1) + DEALLOCATE(ZVEC3) + DEALLOCATE(ZVEC2) + DEALLOCATE(ZVEC1) + ! ! Budget storage if ( nbumod == kmi .and. lbu_enable ) then if ( lbudget_th ) call Budget_store_end( tbudgets(NBUDGET_TH), 'ACC', & - Unpack( zths(:), mask = gmicro(:, :, :), field = pths(:, :, :) ) * prhodj(:, :, :) ) + Unpack( pths1d(:), mask = gmicro(:, :, :), field = pths(:, :, :) ) * prhodj(:, :, :) ) if ( lbudget_rr ) call Budget_store_end( tbudgets(NBUDGET_RR), 'ACC', & - Unpack( zrrs(:), mask = gmicro(:, :, :), field = prrs(:, :, :) ) * prhodj(:, :, :) ) + Unpack( prrs1d(:), mask = gmicro(:, :, :), field = prrs(:, :, :) ) * prhodj(:, :, :) ) if ( lbudget_rs ) call Budget_store_end( tbudgets(NBUDGET_RS), 'ACC', & - Unpack( zrss(:), mask = gmicro(:, :, :), field = prss(:, :, :) ) * prhodj(:, :, :) ) + Unpack( prss1d(:), mask = gmicro(:, :, :), field = prss(:, :, :) ) * prhodj(:, :, :) ) if ( lbudget_rg ) call Budget_store_end( tbudgets(NBUDGET_RG), 'ACC', & - Unpack( zrgs(:), mask = gmicro(:, :, :), field = prgs(:, :, :) ) * prhodj(:, :, :) ) + Unpack( prgs1d(:), mask = gmicro(:, :, :), field = prgs(:, :, :) ) * prhodj(:, :, :) ) if ( lbudget_sv ) call Budget_store_end( tbudgets(NBUDGET_SV1 - 1 + nsv_lima_nr), 'ACC', & - Unpack( zcrs(:), mask = gmicro(:, :, :), field = pcrs(:, :, :) ) * prhodj(:, :, :) ) + Unpack( pcrs1d(:), mask = gmicro(:, :, :), field = pcrs(:, :, :) ) * prhodj(:, :, :) ) end if END IF ! -!* 1.4 Conversion-Melting of the aggregates +! +!* 1.5 Conversion-Melting of the aggregates ! ----------------------------------------- ! if ( nbumod == kmi .and. lbu_enable ) then if ( lbudget_rs ) call Budget_store_init( tbudgets(NBUDGET_RS), 'CMEL', & - Unpack( zrss(:), mask = gmicro(:, :, :), field = prss(:, :, :) ) * prhodj(:, :, :) ) + Unpack( prss1d(:), mask = gmicro(:, :, :), field = prss(:, :, :) ) * prhodj(:, :, :) ) if ( lbudget_rg ) call Budget_store_init( tbudgets(NBUDGET_RG), 'CMEL', & - Unpack( zrgs(:), mask = gmicro(:, :, :), field = prgs(:, :, :) ) * prhodj(:, :, :) ) + Unpack( prgs1d(:), mask = gmicro(:, :, :), field = prgs(:, :, :) ) * prhodj(:, :, :) ) end if - +! ZZW(:) = 0.0 -WHERE( (ZRST(:)>XRTMIN(5)) .AND. (ZRSS(:)>XRTMIN(5)/PTSTEP) .AND. (ZZT(:)>XTT) ) - ZZW(:) = ZRVT(:)*ZPRES(:)/((XMV/XMD)+ZRVT(:)) ! Vapor pressure - ZZW(:) = ZKA(:)*(XTT-ZZT(:)) + & - ( ZDV(:)*(XLVTT + ( XCPV - XCL ) * ( ZZT(:) - XTT )) & - *(XESTT-ZZW(:))/(XRV*ZZT(:)) ) +WHERE( (PRST1D(:)>XRTMIN(5)) .AND. (PRSS1D(:)>XRTMIN(5)/PTSTEP) .AND. (PZT(:)>XTT) ) + ZZW(:) = PRVT1D(:) * PPRES(:) / ((XMV / XMD) + PRVT1D(:)) ! Vapor pressure + ZZW(:) = PKA(:) * (XTT - PZT(:)) + & + ( PDV(:) * (XLVTT + ( XCPV - XCL ) * ( PZT(:) - XTT )) & + * (XESTT-ZZW(:))/(XRV*PZT(:)) ) ! ! compute RSMLT ! - ZZW(:) = MIN( ZRSS(:), XFSCVMG*MAX( 0.0,( -ZZW(:) * & - ( X0DEPS* ZLBDAS(:)**XEX0DEPS + & - X1DEPS*ZCJ(:)*ZLBDAS(:)**XEX1DEPS ) - & + ZZW(:) = MIN( PRSS1D(:), XFSCVMG*MAX( 0.0,( -ZZW(:) * & + PRST1D(:)*( X0DEPS* PLBDAS(:)**XEX0DEPS + & + X1DEPS*PCJ(:)*(1+0.5*(XFVELOS/PLBDAS(:))**XALPHAS) & + **(-XNUS+XEX1DEPS/XALPHAS)*(PLBDAS(:))**(XEX1DEPS+XBS))- & ( ZZW1(:,1)+ZZW1(:,4) ) * & - ( ZRHODREF(:)*XCL*(XTT-ZZT(:))) ) / & - ( ZRHODREF(:)*XLMTT ) ) ) + ( PRHODREF(:)*XCL*(XTT-PZT(:))) ) / & + ( PRHODREF(:)*XLMTT ) ) ) ! ! note that RSCVMG = RSMLT*XFSCVMG but no heat is exchanged (at the rate RSMLT) ! because the graupeln produced by this process are still icy!!! ! - ZRSS(:) = ZRSS(:) - ZZW(:) - ZRGS(:) = ZRGS(:) + ZZW(:) + PRSS1D(:) = PRSS1D(:) - ZZW(:) + PRGS1D(:) = PRGS1D(:) + ZZW(:) END WHERE ! ! Budget storage if ( nbumod == kmi .and. lbu_enable ) then if ( lbudget_rs ) call Budget_store_end( tbudgets(NBUDGET_RS), 'CMEL', & - Unpack( zrss(:), mask = gmicro(:, :, :), field = prss(:, :, :) ) * prhodj(:, :, :) ) + Unpack( prss1d(:), mask = gmicro(:, :, :), field = prss(:, :, :) ) * prhodj(:, :, :) ) if ( lbudget_rg ) call Budget_store_end( tbudgets(NBUDGET_RG), 'CMEL', & - Unpack( zrgs(:), mask = gmicro(:, :, :), field = prgs(:, :, :) ) * prhodj(:, :, :) ) + Unpack( prgs1d(:), mask = gmicro(:, :, :), field = prgs(:, :, :) ) * prhodj(:, :, :) ) end if END IF SNOW @@ -608,311 +959,397 @@ END IF SNOW ! if ( nbumod == kmi .and. lbu_enable ) then if ( lbudget_th ) call Budget_store_init( tbudgets(NBUDGET_TH), 'CFRZ', & - Unpack( zths(:), mask = gmicro(:, :, :), field = pths(:, :, :) ) * prhodj(:, :, :) ) + Unpack( pths1d(:), mask = gmicro(:, :, :), field = pths(:, :, :) ) * prhodj(:, :, :) ) if ( lbudget_rr ) call Budget_store_init( tbudgets(NBUDGET_RR), 'CFRZ', & - Unpack( zrrs(:), mask = gmicro(:, :, :), field = prrs(:, :, :) ) * prhodj(:, :, :) ) + Unpack( prrs1d(:), mask = gmicro(:, :, :), field = prrs(:, :, :) ) * prhodj(:, :, :) ) if ( lbudget_ri ) call Budget_store_init( tbudgets(NBUDGET_RI), 'CFRZ', & - Unpack( zris(:), mask = gmicro(:, :, :), field = pris(:, :, :) ) * prhodj(:, :, :) ) + Unpack( pris1d(:), mask = gmicro(:, :, :), field = pris(:, :, :) ) * prhodj(:, :, :) ) if ( lbudget_rg ) call Budget_store_init( tbudgets(NBUDGET_RG), 'CFRZ', & - Unpack( zrgs(:), mask = gmicro(:, :, :), field = prgs(:, :, :) ) * prhodj(:, :, :) ) + Unpack( prgs1d(:), mask = gmicro(:, :, :), field = prgs(:, :, :) ) * prhodj(:, :, :) ) if ( lbudget_sv ) call Budget_store_init( tbudgets(NBUDGET_SV1 - 1 + nsv_lima_nr), 'CFRZ', & - Unpack( zcrs(:), mask = gmicro(:, :, :), field = pcrs(:, :, :) ) * prhodj(:, :, :) ) + Unpack( pcrs1d(:), mask = gmicro(:, :, :), field = pcrs(:, :, :) ) * prhodj(:, :, :) ) if ( lbudget_sv ) call Budget_store_init( tbudgets(NBUDGET_SV1 - 1 + nsv_lima_ni), 'CFRZ', & - Unpack( zcis(:), mask = gmicro(:, :, :), field = pcis(:, :, :) ) * prhodj(:, :, :) ) + Unpack( pcis1d(:), mask = gmicro(:, :, :), field = pcis(:, :, :) ) * prhodj(:, :, :) ) end if ZZW1(:,3:4) = 0.0 -WHERE( (ZRIT(:)>XRTMIN(4)) .AND. (ZRRT(:)>XRTMIN(3)) .AND. (ZRIS(:)>XRTMIN(4)/PTSTEP) .AND. (ZRRS(:)>XRTMIN(3)/PTSTEP) ) - ZZW1(:,3) = MIN( ZRIS(:),XICFRR * ZRIT(:) * ZCRT(:) & ! RICFRRG - * ZLBDAR(:)**XEXICFRR & - * ZRHODREF(:)**(-XCEXVT-1.0) ) -! - ZZW1(:,4) = MIN( ZRRS(:),XRCFRI * ZCIT(:) * ZCRT(:) & ! RRCFRIG - * ZLBDAR(:)**XEXRCFRI & - * ZRHODREF(:)**(-XCEXVT-2.0) ) - ZRIS(:) = ZRIS(:) - ZZW1(:,3) - ZRRS(:) = ZRRS(:) - ZZW1(:,4) - ZRGS(:) = ZRGS(:) + ZZW1(:,3)+ZZW1(:,4) - ZTHS(:) = ZTHS(:) + ZZW1(:,4)*(ZLSFACT(:)-ZLVFACT(:)) ! f(L_f*RRCFRIG) -! - ZCIS(:) = MAX( ZCIS(:)-ZZW1(:,3)*(ZCIT(:)/ZRIT(:)),0.0 ) ! CICFRRG - ZCRS(:) = MAX( ZCRS(:)-ZZW1(:,4)*(ZCRT(:)/ZRRT(:)),0.0 ) ! CRCFRIG +WHERE( (PRIT1D(:)>XRTMIN(4)) .AND. (PRRT1D(:)>XRTMIN(3)) .AND. (PRIS1D(:)>XRTMIN(4)/PTSTEP) .AND. (PRRS1D(:)>XRTMIN(3)/PTSTEP) ) + ZZW1(:,3) = MIN( PRIS1D(:),XICFRR * PRIT1D(:) * PCRT1D(:) & ! RICFRRG + * PLBDAR(:)**XEXICFRR & + * PRHODREF(:)**(-XCEXVT-1.0) ) +! + ZZW1(:,4) = MIN( PRRS1D(:),XRCFRI * PCIT1D(:) * PCRT1D(:) & ! RRCFRIG + * PLBDAR(:)**XEXRCFRI & + * PRHODREF(:)**(-XCEXVT-2.0) ) + PRIS1D(:) = PRIS1D(:) - ZZW1(:,3) + PRRS1D(:) = PRRS1D(:) - ZZW1(:,4) + PRGS1D(:) = PRGS1D(:) + ZZW1(:,3) + ZZW1(:,4) + PTHS1D(:) = PTHS1D(:) + ZZW1(:,4) * (PLSFACT(:) - PLVFACT(:)) ! f(L_f*RRCFRIG) +! + PCIS1D(:) = MAX( PCIS1D(:)-ZZW1(:,3)*(PCIT1D(:)/PRIT1D(:)),0.0 ) ! CICFRRG + PCRS1D(:) = MAX( PCRS1D(:)-ZZW1(:,4)*(PCRT1D(:)/PRRT1D(:)),0.0 ) ! CRCFRIG END WHERE - +! if ( nbumod == kmi .and. lbu_enable ) then if ( lbudget_th ) call Budget_store_end( tbudgets(NBUDGET_TH), 'CFRZ', & - Unpack( zths(:), mask = gmicro(:, :, :), field = pths(:, :, :) ) * prhodj(:, :, :) ) + Unpack( pths1d(:), mask = gmicro(:, :, :), field = pths(:, :, :) ) * prhodj(:, :, :) ) if ( lbudget_rr ) call Budget_store_end( tbudgets(NBUDGET_RR), 'CFRZ', & - Unpack( zrrs(:), mask = gmicro(:, :, :), field = prrs(:, :, :) ) * prhodj(:, :, :) ) + Unpack( prrs1d(:), mask = gmicro(:, :, :), field = prrs(:, :, :) ) * prhodj(:, :, :) ) if ( lbudget_ri ) call Budget_store_end( tbudgets(NBUDGET_RI), 'CFRZ', & - Unpack( zris(:), mask = gmicro(:, :, :), field = pris(:, :, :) ) * prhodj(:, :, :) ) + Unpack( pris1d(:), mask = gmicro(:, :, :), field = pris(:, :, :) ) * prhodj(:, :, :) ) if ( lbudget_rg ) call Budget_store_end( tbudgets(NBUDGET_RG), 'CFRZ', & - Unpack( zrgs(:), mask = gmicro(:, :, :), field = prgs(:, :, :) ) * prhodj(:, :, :) ) + Unpack( prgs1d(:), mask = gmicro(:, :, :), field = prgs(:, :, :) ) * prhodj(:, :, :) ) if ( lbudget_sv ) call Budget_store_end( tbudgets(NBUDGET_SV1 - 1 + nsv_lima_nr), 'CFRZ', & - Unpack( zcrs(:), mask = gmicro(:, :, :), field = pcrs(:, :, :) ) * prhodj(:, :, :) ) + Unpack( pcrs1d(:), mask = gmicro(:, :, :), field = pcrs(:, :, :) ) * prhodj(:, :, :) ) if ( lbudget_sv ) call Budget_store_end( tbudgets(NBUDGET_SV1 - 1 + nsv_lima_ni), 'CFRZ', & - Unpack( zcis(:), mask = gmicro(:, :, :), field = pcis(:, :, :) ) * prhodj(:, :, :) ) + Unpack( pcis1d(:), mask = gmicro(:, :, :), field = pcis(:, :, :) ) * prhodj(:, :, :) ) end if ! -!* 2.2 Compute the Dry growth case +! +!* 2.2 Ice multiplication process following rain contact freezing +! --------------------------------------------------------------- +! +GRDSF(:) = LRDSF .AND. (PRIT1D(:)>0.0) .AND. (PRRT1D(:)>0.0) .AND. & + (PRIS1D(:)>0.0) .AND. (PRRS1D(:)>0.0) +IRDSF = COUNT( GRDSF(:) ) +! +IF (IRDSF > 0) THEN +! + ! Budget storage + if ( nbumod == kmi .and. lbu_enable ) then + if ( lbudget_ri ) call Budget_store_init( tbudgets(NBUDGET_RI), 'RDSF', & + Unpack( pris1d(:), mask = gmicro(:, :, :), field = pris(:, :, :) ) * prhodj(:, :, :) ) + if ( lbudget_rg ) call Budget_store_init( tbudgets(NBUDGET_RG), 'RDSF', & + Unpack( prgs1d(:), mask = gmicro(:, :, :), field = prgs(:, :, :) ) * prhodj(:, :, :) ) + if ( lbudget_sv ) call Budget_store_init( tbudgets(NBUDGET_SV1 - 1 + nsv_lima_ni), 'RDSF', & + Unpack( pcis1d(:), mask = gmicro(:, :, :), field = pcis(:, :, :) ) * prhodj(:, :, :) ) + end if +! + ALLOCATE(ZVEC1_R(IRDSF)) + ALLOCATE(ZVEC1_R1(IRDSF)) + ALLOCATE(ZVEC2_R(IRDSF)) + ALLOCATE(IVEC2_R(IRDSF)) +! +!* 2.2.1 select the ZLBDAR +! + ZVEC1_R(:) = PACK( PLBDAR(:),MASK=GRDSF(:) ) +! +!* 2.2.2 find the next lower indice for the ZLBDAR in the +! geometrical set of Lbda_r used to tabulate some moments of the +! incomplete gamma function, for the lower boundary (0.1 mm) +! + ZVEC2_R(1:IRDSF) = MAX( 1.00001, MIN( FLOAT(NGAMINC)-0.00001,XRDSFINTP_R & + * LOG( ZVEC1_R(1:IRDSF) ) + XRDSFINTP1_R ) ) + IVEC2_R(1:IRDSF) = INT( ZVEC2_R(1:IRDSF) ) + ZVEC2_R(1:IRDSF) = ZVEC2_R(1:IRDSF) - FLOAT( IVEC2_R(1:IRDSF) ) +! +!* 2.2.3 perform the linear interpolation of the +! normalized "2+XDR"-moment of the incomplete gamma function +! + ZVEC1_R1(1:IRDSF) = XGAMINC_RDSF_R(IVEC2_R(1:IRDSF)+1) * ZVEC2_R(1:IRDSF) & + - XGAMINC_RDSF_R(IVEC2_R(1:IRDSF)) * (ZVEC2_R(1:IRDSF) - 1.0) +! +! From 0.1 mm to infinity we need + ZVEC1_R1(1:IRDSF) = XMOMGR_RDSF * (1.0 - ZVEC1_R1(1:IRDSF)) +! + ALLOCATE(ZINTG_RAIN(SIZE(PZT))) + ZINTG_RAIN(:) = UNPACK ( VECTOR=ZVEC1_R1(:),MASK=GRDSF,FIELD=0.0 ) +! +!* 2.2.4 To compute final "RDSF" contributions +! + ALLOCATE(ZNI_RDSF(SIZE(PZT))) + ZNI_RDSF(:) = (XFACTOR_RDSF_NI / (PRHODREF(:)**(XCEXVT-1.0))) * ( & + PCIT1D(:) * PCRT1D(:) * ZINTG_RAIN(:) * PLBDAR(:)**(-(XDR+6.0)) ) +! + PCIS1D(:) = PCIS1D(:) + ZNI_RDSF(:) +! +! The value of rg removed by RDSF is determined by the mean mass of pristine ice + ALLOCATE(ZRI_RDSF(SIZE(PZT))) + ZRI_RDSF(:) = MIN( PRGS1D(:), MAX( ZNI_RDSF(:)*XMNU0,XRTMIN(5) ) ) +! + PRIS1D(:) = PRIS1D(:) + ZRI_RDSF(:) + PRGS1D(:) = PRGS1D(:) - ZRI_RDSF(:) +! + DEALLOCATE(ZINTG_RAIN) + DEALLOCATE(ZVEC1_R) + DEALLOCATE(ZVEC1_R1) + DEALLOCATE(ZVEC2_R) + DEALLOCATE(IVEC2_R) + DEALLOCATE(ZNI_RDSF) + DEALLOCATE(ZRI_RDSF) + ! + ! Budget storage + if ( nbumod == kmi .and. lbu_enable ) then + if ( lbudget_ri ) call Budget_store_end( tbudgets(NBUDGET_RI), 'RDSF', & + Unpack( pris1d(:), mask = gmicro(:, :, :), field = pris(:, :, :) ) * prhodj(:, :, :) ) + if ( lbudget_ri ) call Budget_store_end( tbudgets(NBUDGET_RG), 'RDSF', & + Unpack( prgs1d(:), mask = gmicro(:, :, :), field = prgs(:, :, :) ) * prhodj(:, :, :) ) + if ( lbudget_sv ) call Budget_store_end( tbudgets(NBUDGET_SV1 - 1 + nsv_lima_ni), 'RDSF', & + Unpack( pcis1d(:), mask = gmicro(:, :, :), field = pcis(:, :, :) ) * prhodj(:, :, :) ) + end if +ENDIF +! +! +!* 2.3 Compute the Dry growth case ! -------------------------------- +! if ( nbumod == kmi .and. lbu_enable ) then if ( lbudget_th ) call Budget_store_init( tbudgets(NBUDGET_TH), 'WETG', & - Unpack( zths(:), mask = gmicro(:, :, :), field = pths(:, :, :) ) * prhodj(:, :, :) ) + Unpack( pths1d(:), mask = gmicro(:, :, :), field = pths(:, :, :) ) * prhodj(:, :, :) ) if ( lbudget_rc ) call Budget_store_init( tbudgets(NBUDGET_RC), 'WETG', & - Unpack( zrcs(:), mask = gmicro(:, :, :), field = prcs(:, :, :) ) * prhodj(:, :, :) ) + Unpack( prcs1d(:), mask = gmicro(:, :, :), field = prcs(:, :, :) ) * prhodj(:, :, :) ) if ( lbudget_rr ) call Budget_store_init( tbudgets(NBUDGET_RR), 'WETG', & - Unpack( zrrs(:), mask = gmicro(:, :, :), field = prrs(:, :, :) ) * prhodj(:, :, :) ) + Unpack( prrs1d(:), mask = gmicro(:, :, :), field = prrs(:, :, :) ) * prhodj(:, :, :) ) if ( lbudget_ri ) call Budget_store_init( tbudgets(NBUDGET_RI), 'WETG', & - Unpack( zris(:), mask = gmicro(:, :, :), field = pris(:, :, :) ) * prhodj(:, :, :) ) + Unpack( pris1d(:), mask = gmicro(:, :, :), field = pris(:, :, :) ) * prhodj(:, :, :) ) if ( lbudget_rs ) call Budget_store_init( tbudgets(NBUDGET_RS), 'WETG', & - Unpack( zrss(:), mask = gmicro(:, :, :), field = prss(:, :, :) ) * prhodj(:, :, :) ) + Unpack( prss1d(:), mask = gmicro(:, :, :), field = prss(:, :, :) ) * prhodj(:, :, :) ) if ( lbudget_rg ) call Budget_store_init( tbudgets(NBUDGET_RG), 'WETG', & - Unpack( zrgs(:), mask = gmicro(:, :, :), field = prgs(:, :, :) ) * prhodj(:, :, :) ) + Unpack( prgs1d(:), mask = gmicro(:, :, :), field = prgs(:, :, :) ) * prhodj(:, :, :) ) if ( lbudget_rh ) call Budget_store_init( tbudgets(NBUDGET_RH), 'WETG', & - Unpack( zrhs(:), mask = gmicro(:, :, :), field = prgs(:, :, :) ) * prhodj(:, :, :) ) + Unpack( prhs1d(:), mask = gmicro(:, :, :), field = prgs(:, :, :) ) * prhodj(:, :, :) ) if ( lbudget_sv ) then call Budget_store_init( tbudgets(NBUDGET_SV1 - 1 + nsv_lima_nc), 'WETG', & - Unpack( zccs(:), mask = gmicro(:, :, :), field = pccs(:, :, :) ) * prhodj(:, :, :) ) + Unpack( pccs1d(:), mask = gmicro(:, :, :), field = pccs(:, :, :) ) * prhodj(:, :, :) ) call Budget_store_init( tbudgets(NBUDGET_SV1 - 1 + nsv_lima_nr), 'WETG', & - Unpack( zcrs(:), mask = gmicro(:, :, :), field = pcrs(:, :, :) ) * prhodj(:, :, :) ) + Unpack( pcrs1d(:), mask = gmicro(:, :, :), field = pcrs(:, :, :) ) * prhodj(:, :, :) ) call Budget_store_init( tbudgets(NBUDGET_SV1 - 1 + nsv_lima_ni), 'WETG', & - Unpack( zcis(:), mask = gmicro(:, :, :), field = pcis(:, :, :) ) * prhodj(:, :, :) ) + Unpack( pcis1d(:), mask = gmicro(:, :, :), field = pcis(:, :, :) ) * prhodj(:, :, :) ) end if end if ! ZZW1(:,:) = 0.0 -WHERE( ((ZRCT(:)>XRTMIN(2)) .AND. (ZRGT(:)>XRTMIN(6)) .AND. (ZRCS(:)>XRTMIN(2)/PTSTEP)) .OR. & - ((ZRIT(:)>XRTMIN(4)) .AND. (ZRGT(:)>XRTMIN(6)) .AND. (ZRIS(:)>XRTMIN(4)/PTSTEP)) ) - ZZW(:) = ZLBDAG(:)**(XCXG-XDG-2.0) * ZRHODREF(:)**(-XCEXVT) - ZZW1(:,1) = MIN( ZRCS(:),XFCDRYG * ZRCT(:) * ZZW(:) ) ! RCDRYG - ZZW1(:,2) = MIN( ZRIS(:),XFIDRYG * EXP( XCOLEXIG*(ZZT(:)-XTT) ) & - * ZRIT(:) * ZZW(:) ) ! RIDRYG +WHERE( ((PRCT1D(:)>XRTMIN(2)) .AND. (PRGT1D(:)>XRTMIN(6)) .AND. (PRCS1D(:)>XRTMIN(2)/PTSTEP)) .OR. & + ((PRIT1D(:)>XRTMIN(4)) .AND. (PRGT1D(:)>XRTMIN(6)) .AND. (PRIS1D(:)>XRTMIN(4)/PTSTEP)) ) + ZZW(:) = PLBDAG(:)**(XCXG-XDG-2.0) * PRHODREF(:)**(-XCEXVT) + ZZW1(:,1) = MIN( PRCS1D(:),XFCDRYG * PRCT1D(:) * ZZW(:) ) ! RCDRYG + ZZW1(:,2) = MIN( PRIS1D(:),XFIDRYG * EXP( XCOLEXIG*(PZT(:)-XTT) ) & + * PRIT1D(:) * ZZW(:) ) ! RIDRYG END WHERE ! -!* 2.2.1 accretion of aggregates on the graupeln +!* 2.3.1 accretion of aggregates on the graupeln ! ---------------------------------------------- ! -GDRY(:) = (ZRST(:)>XRTMIN(5)) .AND. (ZRGT(:)>XRTMIN(6)) .AND. (ZRSS(:)>XRTMIN(5)/PTSTEP) +GDRY(:) = (PRST1D(:)>XRTMIN(5)) .AND. (PRGT1D(:)>XRTMIN(6)) .AND. (PRSS1D(:)>XRTMIN(5)/PTSTEP) IGDRY = COUNT( GDRY(:) ) ! IF( IGDRY>0 ) THEN ! -!* 2.2.2 allocations +!* 2.3.2 allocations ! - ALLOCATE(ZVEC1(IGDRY)) - ALLOCATE(ZVEC2(IGDRY)) - ALLOCATE(ZVEC3(IGDRY)) - ALLOCATE(IVEC1(IGDRY)) - ALLOCATE(IVEC2(IGDRY)) + ALLOCATE(ZVEC1(IGDRY)) + ALLOCATE(ZVEC2(IGDRY)) + ALLOCATE(ZVEC3(IGDRY)) + ALLOCATE(IVEC1(IGDRY)) + ALLOCATE(IVEC2(IGDRY)) ! -!* 2.2.3 select the (ZLBDAG,ZLBDAS) couplet +!* 2.3.3 select the (PLBDAG,PLBDAS) couplet ! - ZVEC1(:) = PACK( ZLBDAG(:),MASK=GDRY(:) ) - ZVEC2(:) = PACK( ZLBDAS(:),MASK=GDRY(:) ) + ZVEC1(:) = PACK( PLBDAG(:),MASK=GDRY(:) ) + ZVEC2(:) = PACK( PLBDAS(:),MASK=GDRY(:) ) ! -!* 2.2.4 find the next lower indice for the ZLBDAG and for the ZLBDAS +!* 2.3.4 find the next lower indice for the PLBDAG and for the PLBDAS ! in the geometrical set of (Lbda_g,Lbda_s) couplet use to ! tabulate the SDRYG-kernel ! - ZVEC1(1:IGDRY) = MAX( 1.0001, MIN( REAL(NDRYLBDAG)-0.0001, & - XDRYINTP1G * LOG( ZVEC1(1:IGDRY) ) + XDRYINTP2G ) ) - IVEC1(1:IGDRY) = INT( ZVEC1(1:IGDRY) ) - ZVEC1(1:IGDRY) = ZVEC1(1:IGDRY) - REAL( IVEC1(1:IGDRY) ) + ZVEC1(1:IGDRY) = MAX( 1.0001, MIN( REAL(NDRYLBDAG)-0.0001, & + XDRYINTP1G * LOG( ZVEC1(1:IGDRY) ) + XDRYINTP2G ) ) + IVEC1(1:IGDRY) = INT( ZVEC1(1:IGDRY) ) + ZVEC1(1:IGDRY) = ZVEC1(1:IGDRY) - REAL( IVEC1(1:IGDRY) ) ! - ZVEC2(1:IGDRY) = MAX( 1.0001, MIN( REAL(NDRYLBDAS)-0.0001, & - XDRYINTP1S * LOG( ZVEC2(1:IGDRY) ) + XDRYINTP2S ) ) - IVEC2(1:IGDRY) = INT( ZVEC2(1:IGDRY) ) - ZVEC2(1:IGDRY) = ZVEC2(1:IGDRY) - REAL( IVEC2(1:IGDRY) ) + ZVEC2(1:IGDRY) = MAX( 1.0001, MIN( REAL(NDRYLBDAS)-0.0001, & + XDRYINTP1S * LOG( ZVEC2(1:IGDRY) ) + XDRYINTP2S ) ) + IVEC2(1:IGDRY) = INT( ZVEC2(1:IGDRY) ) + ZVEC2(1:IGDRY) = ZVEC2(1:IGDRY) - REAL( IVEC2(1:IGDRY) ) ! -!* 2.2.5 perform the bilinear interpolation of the normalized +!* 2.3.5 perform the bilinear interpolation of the normalized ! SDRYG-kernel ! - DO JJ = 1,IGDRY - ZVEC3(JJ) = ( XKER_SDRYG(IVEC1(JJ)+1,IVEC2(JJ)+1)* ZVEC2(JJ) & - - XKER_SDRYG(IVEC1(JJ)+1,IVEC2(JJ) )*(ZVEC2(JJ) - 1.0) ) & - * ZVEC1(JJ) & - - ( XKER_SDRYG(IVEC1(JJ) ,IVEC2(JJ)+1)* ZVEC2(JJ) & - - XKER_SDRYG(IVEC1(JJ) ,IVEC2(JJ) )*(ZVEC2(JJ) - 1.0) ) & - * (ZVEC1(JJ) - 1.0) - END DO - ZZW(:) = UNPACK( VECTOR=ZVEC3(:),MASK=GDRY,FIELD=0.0 ) -! - WHERE( GDRY(:) ) - ZZW1(:,3) = MIN( ZRSS(:),XFSDRYG*ZZW(:) & ! RSDRYG - * EXP( XCOLEXSG*(ZZT(:)-XTT) ) & - *( ZLBDAS(:)**(XCXS-XBS) )*( ZLBDAG(:)**XCXG ) & - *( ZRHODREF(:)**(-XCEXVT-1.) ) & - *( XLBSDRYG1/( ZLBDAG(:)**2 ) + & - XLBSDRYG2/( ZLBDAG(:) * ZLBDAS(:) ) + & - XLBSDRYG3/( ZLBDAS(:)**2) ) ) - END WHERE - DEALLOCATE(IVEC2) - DEALLOCATE(IVEC1) - DEALLOCATE(ZVEC3) - DEALLOCATE(ZVEC2) - DEALLOCATE(ZVEC1) + DO JJ = 1,IGDRY + ZVEC3(JJ) = ( XKER_SDRYG(IVEC1(JJ)+1,IVEC2(JJ)+1) * ZVEC2(JJ) & + - XKER_SDRYG(IVEC1(JJ)+1,IVEC2(JJ) ) * (ZVEC2(JJ) - 1.0) ) & + * ZVEC1(JJ) & + - ( XKER_SDRYG(IVEC1(JJ) ,IVEC2(JJ)+1) * ZVEC2(JJ) & + - XKER_SDRYG(IVEC1(JJ) ,IVEC2(JJ) ) * (ZVEC2(JJ) - 1.0) ) & + * (ZVEC1(JJ) - 1.0) + END DO + ZZW(:) = UNPACK( VECTOR=ZVEC3(:),MASK=GDRY,FIELD=0.0 ) +! + WHERE( GDRY(:) ) + ZZW1(:,3) = MIN( PRSS1D(:),XFSDRYG*ZZW(:) & ! RSDRYG + * EXP( XCOLEXSG*(PZT(:)-XTT) ) & + *( PRST1D(:)) )*( PLBDAG(:)**XCXG ) & + *( PRHODREF(:)**(-XCEXVT) ) & + *( XLBSDRYG1/( PLBDAG(:)**2 ) + & + XLBSDRYG2/( PLBDAG(:) * PLBDAS(:) ) + & + XLBSDRYG3/( PLBDAS(:)**2) ) + END WHERE + DEALLOCATE(IVEC2) + DEALLOCATE(IVEC1) + DEALLOCATE(ZVEC3) + DEALLOCATE(ZVEC2) + DEALLOCATE(ZVEC1) END IF ! -!* 2.2.6 accretion of raindrops on the graupeln +!* 2.3.6 accretion of raindrops on the graupeln ! --------------------------------------------- ! -GDRY(:) = (ZRRT(:)>XRTMIN(3)) .AND. (ZRGT(:)>XRTMIN(6)) .AND. (ZRRS(:)>XRTMIN(3)) +GDRY(:) = (PRRT1D(:)>XRTMIN(3)) .AND. (PRGT1D(:)>XRTMIN(6)) .AND. (PRRS1D(:)>XRTMIN(3)) IGDRY = COUNT( GDRY(:) ) ! IF( IGDRY>0 ) THEN ! -!* 2.2.7 allocations +!* 2.3.7 allocations ! - ALLOCATE(ZVEC1(IGDRY)) - ALLOCATE(ZVEC2(IGDRY)) - ALLOCATE(ZVEC3(IGDRY)) - ALLOCATE(IVEC1(IGDRY)) - ALLOCATE(IVEC2(IGDRY)) + ALLOCATE(ZVEC1(IGDRY)) + ALLOCATE(ZVEC2(IGDRY)) + ALLOCATE(ZVEC3(IGDRY)) + ALLOCATE(IVEC1(IGDRY)) + ALLOCATE(IVEC2(IGDRY)) ! -!* 2.2.8 select the (ZLBDAG,ZLBDAR) couplet +!* 2.3.8 select the (PLBDAG,PLBDAR) couplet ! - ZVEC1(:) = PACK( ZLBDAG(:),MASK=GDRY(:) ) - ZVEC2(:) = PACK( ZLBDAR(:),MASK=GDRY(:) ) + ZVEC1(:) = PACK( PLBDAG(:),MASK=GDRY(:) ) + ZVEC2(:) = PACK( PLBDAR(:),MASK=GDRY(:) ) ! -!* 2.2.9 find the next lower indice for the ZLBDAG and for the ZLBDAR +!* 2.3.9 find the next lower indice for the PLBDAG and for the PLBDAR ! in the geometrical set of (Lbda_g,Lbda_r) couplet use to ! tabulate the RDRYG-kernel ! - ZVEC1(1:IGDRY) = MAX( 1.0001, MIN( REAL(NDRYLBDAG)-0.0001, & - XDRYINTP1G * LOG( ZVEC1(1:IGDRY) ) + XDRYINTP2G ) ) - IVEC1(1:IGDRY) = INT( ZVEC1(1:IGDRY) ) - ZVEC1(1:IGDRY) = ZVEC1(1:IGDRY) - REAL( IVEC1(1:IGDRY) ) + ZVEC1(1:IGDRY) = MAX( 1.0001, MIN( REAL(NDRYLBDAG)-0.0001, & + XDRYINTP1G * LOG( ZVEC1(1:IGDRY) ) + XDRYINTP2G ) ) + IVEC1(1:IGDRY) = INT( ZVEC1(1:IGDRY) ) + ZVEC1(1:IGDRY) = ZVEC1(1:IGDRY) - REAL( IVEC1(1:IGDRY) ) ! - ZVEC2(1:IGDRY) = MAX( 1.0001, MIN( REAL(NDRYLBDAR)-0.0001, & - XDRYINTP1R * LOG( ZVEC2(1:IGDRY) ) + XDRYINTP2R ) ) - IVEC2(1:IGDRY) = INT( ZVEC2(1:IGDRY) ) - ZVEC2(1:IGDRY) = ZVEC2(1:IGDRY) - REAL( IVEC2(1:IGDRY) ) + ZVEC2(1:IGDRY) = MAX( 1.0001, MIN( REAL(NDRYLBDAR)-0.0001, & + XDRYINTP1R * LOG( ZVEC2(1:IGDRY) ) + XDRYINTP2R ) ) + IVEC2(1:IGDRY) = INT( ZVEC2(1:IGDRY) ) + ZVEC2(1:IGDRY) = ZVEC2(1:IGDRY) - REAL( IVEC2(1:IGDRY) ) ! -!* 2.2.10 perform the bilinear interpolation of the normalized +!* 2.3.10 perform the bilinear interpolation of the normalized ! RDRYG-kernel ! - DO JJ = 1,IGDRY - ZVEC3(JJ) = ( XKER_RDRYG(IVEC1(JJ)+1,IVEC2(JJ)+1)* ZVEC2(JJ) & - - XKER_RDRYG(IVEC1(JJ)+1,IVEC2(JJ) )*(ZVEC2(JJ) - 1.0) ) & - * ZVEC1(JJ) & - - ( XKER_RDRYG(IVEC1(JJ) ,IVEC2(JJ)+1)* ZVEC2(JJ) & - - XKER_RDRYG(IVEC1(JJ) ,IVEC2(JJ) )*(ZVEC2(JJ) - 1.0) ) & - * (ZVEC1(JJ) - 1.0) - END DO - ZZW(:) = UNPACK( VECTOR=ZVEC3(:),MASK=GDRY,FIELD=0.0 ) -! - WHERE( GDRY(:) ) - ZZW1(:,4) = MIN( ZRRS(:),XFRDRYG*ZZW(:) * ZCRT(:) & ! RRDRYG - *( ZLBDAR(:)**(-3) )*( ZLBDAG(:)**XCXG ) & - *( ZRHODREF(:)**(-XCEXVT-1.) ) & - *( XLBRDRYG1/( ZLBDAG(:)**2 ) + & - XLBRDRYG2/( ZLBDAG(:) * ZLBDAR(:) ) + & - XLBRDRYG3/( ZLBDAR(:)**2) ) ) - END WHERE - DEALLOCATE(IVEC2) - DEALLOCATE(IVEC1) - DEALLOCATE(ZVEC3) - DEALLOCATE(ZVEC2) - DEALLOCATE(ZVEC1) + DO JJ = 1,IGDRY + ZVEC3(JJ) = ( XKER_RDRYG(IVEC1(JJ)+1,IVEC2(JJ)+1) * ZVEC2(JJ) & + - XKER_RDRYG(IVEC1(JJ)+1,IVEC2(JJ) ) * (ZVEC2(JJ) - 1.0) ) & + * ZVEC1(JJ) & + - ( XKER_RDRYG(IVEC1(JJ) ,IVEC2(JJ)+1) * ZVEC2(JJ) & + - XKER_RDRYG(IVEC1(JJ) ,IVEC2(JJ) ) * (ZVEC2(JJ) - 1.0) ) & + * (ZVEC1(JJ) - 1.0) + END DO + ZZW(:) = UNPACK( VECTOR=ZVEC3(:),MASK=GDRY,FIELD=0.0 ) +! + WHERE( GDRY(:) ) + ZZW1(:,4) = MIN( PRRS1D(:),XFRDRYG*ZZW(:) * PCRT1D(:) & ! RRDRYG + *( PLBDAR(:)**(-3) )*( PLBDAG(:)**XCXG ) & + *( PRHODREF(:)**(-XCEXVT-1.) ) & + *( XLBRDRYG1/( PLBDAG(:)**2 ) + & + XLBRDRYG2/( PLBDAG(:) * PLBDAR(:) ) + & + XLBRDRYG3/( PLBDAR(:)**2) ) ) + END WHERE + DEALLOCATE(IVEC2) + DEALLOCATE(IVEC1) + DEALLOCATE(ZVEC3) + DEALLOCATE(ZVEC2) + DEALLOCATE(ZVEC1) END IF ! ZRDRYG(:) = ZZW1(:,1) + ZZW1(:,2) + ZZW1(:,3) + ZZW1(:,4) ! ! -!* 2.3 Compute the Wet growth case +!* 2.4 Compute the Wet growth case ! -------------------------------- ! -! ZZW(:) = 0.0 ZRWETG(:) = 0.0 -WHERE( ZRGT(:)>XRTMIN(6) ) - ZZW1(:,5) = MIN( ZRIS(:), & - ZZW1(:,2) / (XCOLIG*EXP(XCOLEXIG*(ZZT(:)-XTT)) ) ) ! RIWETG - ZZW1(:,6) = MIN( ZRSS(:), & - ZZW1(:,3) / (XCOLSG*EXP(XCOLEXSG*(ZZT(:)-XTT)) ) ) ! RSWETG +WHERE( PRGT1D(:)>XRTMIN(6) ) + ZZW1(:,5) = MIN( PRIS1D(:), & + ZZW1(:,2) / (XCOLIG*EXP(XCOLEXIG*(PZT(:)-XTT)) ) ) ! RIWETG + ZZW1(:,6) = MIN( PRSS1D(:), & + ZZW1(:,3) / (XCOLSG*EXP(XCOLEXSG*(PZT(:)-XTT)) ) ) ! RSWETG ! - ZZW(:) = ZRVT(:)*ZPRES(:)/((XMV/XMD)+ZRVT(:)) ! Vapor pressure - ZZW(:) = ZKA(:)*(XTT-ZZT(:)) + & - ( ZDV(:)*(XLVTT + ( XCPV - XCL ) * ( ZZT(:) - XTT )) & - *(XESTT-ZZW(:))/(XRV*ZZT(:)) ) + ZZW(:) = PRVT1D(:)*PPRES(:)/((XMV/XMD)+PRVT1D(:)) ! Vapor pressure + ZZW(:) = PKA(:)*(XTT-PZT(:)) + & + ( PDV(:)*(XLVTT + ( XCPV - XCL ) * ( PZT(:) - XTT )) & + *(XESTT-ZZW(:))/(XRV*PZT(:)) ) ! ! compute RWETG ! - ZRWETG(:) = MAX( 0.0, & - ( ZZW(:) * ( X0DEPG* ZLBDAG(:)**XEX0DEPG + & - X1DEPG*ZCJ(:)*ZLBDAG(:)**XEX1DEPG ) + & - ( ZZW1(:,5)+ZZW1(:,6) ) * & - ( ZRHODREF(:)*(XLMTT+(XCI-XCL)*(XTT-ZZT(:))) ) ) / & - ( ZRHODREF(:)*(XLMTT-XCL*(XTT-ZZT(:))) ) ) + ZRWETG(:) = MAX( 0.0, & + ( ZZW(:) * ( X0DEPG* PLBDAG(:)**XEX0DEPG + & + X1DEPG*PCJ(:)*PLBDAG(:)**XEX1DEPG ) + & + ( ZZW1(:,5)+ZZW1(:,6) ) * & + ( PRHODREF(:)*(XLMTT+(XCI-XCL)*(XTT-PZT(:))) ) ) / & + ( PRHODREF(:)*(XLMTT-XCL*(XTT-PZT(:))) ) ) + !We must agregate, at least, the cold species + ZRWETG(:)=MAX(ZRWETG(:), ZZW1(:,5)+ZZW1(:,6)) END WHERE ! ! -!* 2.4 Select Wet or Dry case +!* 2.5 Select Wet or Dry case ! --------------------------- ! -! ! Wet case and partial conversion to hail ! ZZW(:) = 0.0 NHAIL = 0. IF (LHAIL) NHAIL = 1. -WHERE( ZRGT(:)>XRTMIN(6) .AND. ZZT(:)<XTT & - .AND. ZRDRYG(:)>=ZRWETG(:) .AND. ZRWETG(:)>0.0 ) +WHERE( PRGT1D(:)>XRTMIN(6) .AND. PZT(:)<XTT .AND. & + (ZRDRYG(:)-ZZW1(:,2)-ZZW1(:,3))>=(ZRWETG(:)-ZZW1(:,5)-ZZW1(:,6)) .AND. ZRWETG(:)>0.0 ) ! - ZZW(:) = ZRWETG(:) - ZZW1(:,5) - ZZW1(:,6) ! RCWETG+RRWETG + ZZW(:) = ZRWETG(:) - ZZW1(:,5) - ZZW1(:,6) ! RCWETG+RRWETG ! ! limitation of the available rainwater mixing ratio (RRWETH < RRS !) ! - ZZW1(:,7) = MAX( 0.0,MIN( ZZW(:),ZRRS(:)+ZZW1(:,1) ) ) - ZZX(:) = ZZW1(:,7) / ZZW(:) - ZZW1(:,5) = ZZW1(:,5)*ZZX(:) - ZZW1(:,6) = ZZW1(:,6)*ZZX(:) - ZRWETG(:) = ZZW1(:,7) + ZZW1(:,5) + ZZW1(:,6) + ZZW1(:,7) = MAX( 0.0,MIN( ZZW(:),PRRS1D(:)+ZZW1(:,1) ) ) + ZZX(:) = ZZW1(:,7) / ZZW(:) + ZZW1(:,5) = ZZW1(:,5)*ZZX(:) + ZZW1(:,6) = ZZW1(:,6)*ZZX(:) + ZRWETG(:) = ZZW1(:,7) + ZZW1(:,5) + ZZW1(:,6) ! - ZRCS(:) = ZRCS(:) - ZZW1(:,1) - ZRIS(:) = ZRIS(:) - ZZW1(:,5) - ZRSS(:) = ZRSS(:) - ZZW1(:,6) + PRCS1D(:) = PRCS1D(:) - ZZW1(:,1) + PRIS1D(:) = PRIS1D(:) - ZZW1(:,5) + PRSS1D(:) = PRSS1D(:) - ZZW1(:,6) ! ! assume a linear percent of conversion of graupel into hail ! - ZRGS(:) = ZRGS(:) + ZRWETG(:) - ZZW(:) = ZRGS(:)*ZRDRYG(:)*NHAIL/(ZRWETG(:)+ZRDRYG(:)) - ZRGS(:) = ZRGS(:) - ZZW(:) - ZRHS(:) = ZRHS(:) + ZZW(:) - ZRRS(:) = MAX( 0.0,ZRRS(:) - ZZW1(:,7) + ZZW1(:,1) ) - ZTHS(:) = ZTHS(:) + ZZW1(:,7)*(ZLSFACT(:)-ZLVFACT(:)) - ! f(L_f*(RCWETG+RRWETG)) -! - ZCCS(:) = MAX( ZCCS(:)-ZZW1(:,1)*(ZCCT(:)/MAX(ZRCT(:),XRTMIN(2))),0.0 ) - ZCIS(:) = MAX( ZCIS(:)-ZZW1(:,5)*(ZCIT(:)/MAX(ZRIT(:),XRTMIN(4))),0.0 ) - ZCRS(:) = MAX( ZCRS(:)-MAX( ZZW1(:,7)-ZZW1(:,1),0.0 ) & - *(ZCRT(:)/MAX(ZRRT(:),XRTMIN(3))),0.0 ) + PRGS1D(:) = PRGS1D(:) + ZRWETG(:) + ZZW(:) = PRGS1D(:)*ZRDRYG(:)*NHAIL/(ZRWETG(:)+ZRDRYG(:)) + PRGS1D(:) = PRGS1D(:) - ZZW(:) + PRHS1D(:) = PRHS1D(:) + ZZW(:) + PRRS1D(:) = MAX( 0.0,PRRS1D(:) - ZZW1(:,7) + ZZW1(:,1) ) + PTHS1D(:) = PTHS1D(:) + ZZW1(:,7) * (PLSFACT(:) - PLVFACT(:)) + ! f(L_f*(RCWETG+RRWETG)) +! + PCCS1D(:) = MAX( PCCS1D(:)-ZZW1(:,1)*(PCCT1D(:)/MAX(PRCT1D(:),XRTMIN(2))),0.0 ) + PCIS1D(:) = MAX( PCIS1D(:)-ZZW1(:,5)*(PCIT1D(:)/MAX(PRIT1D(:),XRTMIN(4))),0.0 ) + PCRS1D(:) = MAX( PCRS1D(:)-MAX( ZZW1(:,7)-ZZW1(:,1),0.0 ) & + *(PCRT1D(:)/MAX(PRRT1D(:),XRTMIN(3))),0.0 ) END WHERE ! ! Budget storage if ( nbumod == kmi .and. lbu_enable ) then if ( lbudget_th ) call Budget_store_end( tbudgets(NBUDGET_TH), 'WETG', & - Unpack( zths(:), mask = gmicro(:, :, :), field = pths(:, :, :) ) * prhodj(:, :, :) ) + Unpack( pths1d(:), mask = gmicro(:, :, :), field = pths(:, :, :) ) * prhodj(:, :, :) ) if ( lbudget_rc ) call Budget_store_end( tbudgets(NBUDGET_RC), 'WETG', & - Unpack( zrcs(:), mask = gmicro(:, :, :), field = prcs(:, :, :) ) * prhodj(:, :, :) ) + Unpack( prcs1d(:), mask = gmicro(:, :, :), field = prcs(:, :, :) ) * prhodj(:, :, :) ) if ( lbudget_rr ) call Budget_store_end( tbudgets(NBUDGET_RR), 'WETG', & - Unpack( zrrs(:), mask = gmicro(:, :, :), field = prrs(:, :, :) ) * prhodj(:, :, :) ) + Unpack( prrs1d(:), mask = gmicro(:, :, :), field = prrs(:, :, :) ) * prhodj(:, :, :) ) if ( lbudget_ri ) call Budget_store_end( tbudgets(NBUDGET_RI), 'WETG', & - Unpack( zris(:), mask = gmicro(:, :, :), field = pris(:, :, :) ) * prhodj(:, :, :) ) + Unpack( pris1d(:), mask = gmicro(:, :, :), field = pris(:, :, :) ) * prhodj(:, :, :) ) if ( lbudget_rs ) call Budget_store_end( tbudgets(NBUDGET_RS), 'WETG', & - Unpack( zrss(:), mask = gmicro(:, :, :), field = prss(:, :, :) ) * prhodj(:, :, :) ) + Unpack( prss1d(:), mask = gmicro(:, :, :), field = prss(:, :, :) ) * prhodj(:, :, :) ) if ( lbudget_rg ) call Budget_store_end( tbudgets(NBUDGET_RG), 'WETG', & - Unpack( zrgs(:), mask = gmicro(:, :, :), field = prgs(:, :, :) ) * prhodj(:, :, :) ) + Unpack( prgs1d(:), mask = gmicro(:, :, :), field = prgs(:, :, :) ) * prhodj(:, :, :) ) if ( lbudget_rh ) call Budget_store_end( tbudgets(NBUDGET_RH), 'WETG', & - Unpack( zrhs(:), mask = gmicro(:, :, :), field = prhs(:, :, :) ) * prhodj(:, :, :) ) + Unpack( prhs1d(:), mask = gmicro(:, :, :), field = prhs(:, :, :) ) * prhodj(:, :, :) ) if ( lbudget_sv ) then call Budget_store_end( tbudgets(NBUDGET_SV1 - 1 + nsv_lima_nc), 'WETG', & - Unpack( zccs(:), mask = gmicro(:, :, :), field = pccs(:, :, :) ) * prhodj(:, :, :) ) + Unpack( pccs1d(:), mask = gmicro(:, :, :), field = pccs(:, :, :) ) * prhodj(:, :, :) ) call Budget_store_end( tbudgets(NBUDGET_SV1 - 1 + nsv_lima_nr), 'WETG', & - Unpack( zcrs(:), mask = gmicro(:, :, :), field = pcrs(:, :, :) ) * prhodj(:, :, :) ) + Unpack( pcrs1d(:), mask = gmicro(:, :, :), field = pcrs(:, :, :) ) * prhodj(:, :, :) ) call Budget_store_end( tbudgets(NBUDGET_SV1 - 1 + nsv_lima_ni), 'WETG', & - Unpack( zcis(:), mask = gmicro(:, :, :), field = pcis(:, :, :) ) * prhodj(:, :, :) ) + Unpack( pcis1d(:), mask = gmicro(:, :, :), field = pcis(:, :, :) ) * prhodj(:, :, :) ) end if end if ! @@ -920,168 +1357,169 @@ end if ! if ( nbumod == kmi .and. lbu_enable ) then if ( lbudget_th ) call Budget_store_init( tbudgets(NBUDGET_TH), 'DRYG', & - Unpack( zths(:), mask = gmicro(:, :, :), field = pths(:, :, :) ) * prhodj(:, :, :) ) + Unpack( pths1d(:), mask = gmicro(:, :, :), field = pths(:, :, :) ) * prhodj(:, :, :) ) if ( lbudget_rc ) call Budget_store_init( tbudgets(NBUDGET_RC), 'DRYG', & - Unpack( zrcs(:), mask = gmicro(:, :, :), field = prcs(:, :, :) ) * prhodj(:, :, :) ) + Unpack( prcs1d(:), mask = gmicro(:, :, :), field = prcs(:, :, :) ) * prhodj(:, :, :) ) if ( lbudget_rr ) call Budget_store_init( tbudgets(NBUDGET_RR), 'DRYG', & - Unpack( zrrs(:), mask = gmicro(:, :, :), field = prrs(:, :, :) ) * prhodj(:, :, :) ) + Unpack( prrs1d(:), mask = gmicro(:, :, :), field = prrs(:, :, :) ) * prhodj(:, :, :) ) if ( lbudget_ri ) call Budget_store_init( tbudgets(NBUDGET_RI), 'DRYG', & - Unpack( zris(:), mask = gmicro(:, :, :), field = pris(:, :, :) ) * prhodj(:, :, :) ) + Unpack( pris1d(:), mask = gmicro(:, :, :), field = pris(:, :, :) ) * prhodj(:, :, :) ) if ( lbudget_rs ) call Budget_store_init( tbudgets(NBUDGET_RS), 'DRYG', & - Unpack( zrss(:), mask = gmicro(:, :, :), field = prss(:, :, :) ) * prhodj(:, :, :) ) + Unpack( prss1d(:), mask = gmicro(:, :, :), field = prss(:, :, :) ) * prhodj(:, :, :) ) if ( lbudget_rg ) call Budget_store_init( tbudgets(NBUDGET_RG), 'DRYG', & - Unpack( zrgs(:), mask = gmicro(:, :, :), field = prgs(:, :, :) ) * prhodj(:, :, :) ) + Unpack( prgs1d(:), mask = gmicro(:, :, :), field = prgs(:, :, :) ) * prhodj(:, :, :) ) if ( lbudget_sv ) then call Budget_store_init( tbudgets(NBUDGET_SV1 - 1 + nsv_lima_nc), 'DRYG', & - Unpack( zccs(:), mask = gmicro(:, :, :), field = pccs(:, :, :) ) * prhodj(:, :, :) ) + Unpack( pccs1d(:), mask = gmicro(:, :, :), field = pccs(:, :, :) ) * prhodj(:, :, :) ) call Budget_store_init( tbudgets(NBUDGET_SV1 - 1 + nsv_lima_nr), 'DRYG', & - Unpack( zcrs(:), mask = gmicro(:, :, :), field = pcrs(:, :, :) ) * prhodj(:, :, :) ) + Unpack( pcrs1d(:), mask = gmicro(:, :, :), field = pcrs(:, :, :) ) * prhodj(:, :, :) ) call Budget_store_init( tbudgets(NBUDGET_SV1 - 1 + nsv_lima_ni), 'DRYG', & - Unpack( zcis(:), mask = gmicro(:, :, :), field = pcis(:, :, :) ) * prhodj(:, :, :) ) + Unpack( pcis1d(:), mask = gmicro(:, :, :), field = pcis(:, :, :) ) * prhodj(:, :, :) ) end if end if - -WHERE( ZRGT(:)>XRTMIN(6) .AND. ZZT(:)<XTT & - .AND. ZRDRYG(:)<ZRWETG(:) .AND. ZRDRYG(:)>0.0 ) ! case - ZRCS(:) = ZRCS(:) - ZZW1(:,1) - ZRIS(:) = ZRIS(:) - ZZW1(:,2) - ZRSS(:) = ZRSS(:) - ZZW1(:,3) - ZRRS(:) = ZRRS(:) - ZZW1(:,4) - ZRGS(:) = ZRGS(:) + ZRDRYG(:) - ZTHS(:) = ZTHS(:) + (ZZW1(:,1)+ZZW1(:,4))*(ZLSFACT(:)-ZLVFACT(:)) ! - ! f(L_f*(RCDRYG+RRDRYG)) -! - ZCCS(:) = MAX( ZCCS(:)-ZZW1(:,1)*(ZCCT(:)/MAX(ZRCT(:),XRTMIN(2))),0.0 ) - ZCIS(:) = MAX( ZCIS(:)-ZZW1(:,2)*(ZCIT(:)/MAX(ZRIT(:),XRTMIN(4))),0.0 ) - ZCRS(:) = MAX( ZCRS(:)-ZZW1(:,4)*(ZCRT(:)/MAX(ZRRT(:),XRTMIN(3))),0.0 ) - ! Approximate rates +! +WHERE( PRGT1D(:)>XRTMIN(6) .AND. PZT(:)<XTT .AND. & + (ZRDRYG(:)-ZZW1(:,2)-ZZW1(:,3))<(ZRWETG(:)-ZZW1(:,5)-ZZW1(:,6)) .AND. ZRDRYG(:)>0.0 ) + PRCS1D(:) = PRCS1D(:) - ZZW1(:,1) + PRIS1D(:) = PRIS1D(:) - ZZW1(:,2) + PRSS1D(:) = PRSS1D(:) - ZZW1(:,3) + PRRS1D(:) = PRRS1D(:) - ZZW1(:,4) + PRGS1D(:) = PRGS1D(:) + ZRDRYG(:) + PTHS1D(:) = PTHS1D(:) + (ZZW1(:,1)+ZZW1(:,4)) * (PLSFACT(:) - PLVFACT(:)) ! + ! f(L_f*(RCDRYG+RRDRYG)) +! + PCCS1D(:) = MAX( PCCS1D(:)-ZZW1(:,1)*(PCCT1D(:)/MAX(PRCT1D(:),XRTMIN(2))),0.0 ) + PCIS1D(:) = MAX( PCIS1D(:)-ZZW1(:,2)*(PCIT1D(:)/MAX(PRIT1D(:),XRTMIN(4))),0.0 ) + PCRS1D(:) = MAX( PCRS1D(:)-ZZW1(:,4)*(PCRT1D(:)/MAX(PRRT1D(:),XRTMIN(3))),0.0 ) + ! Approximate rates END WHERE ! ! Budget storage if ( nbumod == kmi .and. lbu_enable ) then if ( lbudget_th ) call Budget_store_end( tbudgets(NBUDGET_TH), 'DRYG', & - Unpack( zths(:), mask = gmicro(:, :, :), field = pths(:, :, :) ) * prhodj(:, :, :) ) + Unpack( pths1d(:), mask = gmicro(:, :, :), field = pths(:, :, :) ) * prhodj(:, :, :) ) if ( lbudget_rc ) call Budget_store_end( tbudgets(NBUDGET_RC), 'DRYG', & - Unpack( zrcs(:), mask = gmicro(:, :, :), field = prcs(:, :, :) ) * prhodj(:, :, :) ) + Unpack( prcs1d(:), mask = gmicro(:, :, :), field = prcs(:, :, :) ) * prhodj(:, :, :) ) if ( lbudget_rr ) call Budget_store_end( tbudgets(NBUDGET_RR), 'DRYG', & - Unpack( zrrs(:), mask = gmicro(:, :, :), field = prrs(:, :, :) ) * prhodj(:, :, :) ) + Unpack( prrs1d(:), mask = gmicro(:, :, :), field = prrs(:, :, :) ) * prhodj(:, :, :) ) if ( lbudget_ri ) call Budget_store_end( tbudgets(NBUDGET_RI), 'DRYG', & - Unpack( zris(:), mask = gmicro(:, :, :), field = pris(:, :, :) ) * prhodj(:, :, :) ) + Unpack( pris1d(:), mask = gmicro(:, :, :), field = pris(:, :, :) ) * prhodj(:, :, :) ) if ( lbudget_rs ) call Budget_store_end( tbudgets(NBUDGET_RS), 'DRYG', & - Unpack( zrss(:), mask = gmicro(:, :, :), field = prss(:, :, :) ) * prhodj(:, :, :) ) + Unpack( prss1d(:), mask = gmicro(:, :, :), field = prss(:, :, :) ) * prhodj(:, :, :) ) if ( lbudget_rg ) call Budget_store_end( tbudgets(NBUDGET_RG), 'DRYG', & - Unpack( zrgs(:), mask = gmicro(:, :, :), field = prgs(:, :, :) ) * prhodj(:, :, :) ) + Unpack( prgs1d(:), mask = gmicro(:, :, :), field = prgs(:, :, :) ) * prhodj(:, :, :) ) if ( lbudget_sv ) then call Budget_store_end( tbudgets(NBUDGET_SV1 - 1 + nsv_lima_nc), 'DRYG', & - Unpack( zccs(:), mask = gmicro(:, :, :), field = pccs(:, :, :) ) * prhodj(:, :, :) ) + Unpack( pccs1d(:), mask = gmicro(:, :, :), field = pccs(:, :, :) ) * prhodj(:, :, :) ) call Budget_store_end( tbudgets(NBUDGET_SV1 - 1 + nsv_lima_nr), 'DRYG', & - Unpack( zcrs(:), mask = gmicro(:, :, :), field = pcrs(:, :, :) ) * prhodj(:, :, :) ) + Unpack( pcrs1d(:), mask = gmicro(:, :, :), field = pcrs(:, :, :) ) * prhodj(:, :, :) ) call Budget_store_end( tbudgets(NBUDGET_SV1 - 1 + nsv_lima_ni), 'DRYG', & - Unpack( zcis(:), mask = gmicro(:, :, :), field = pcis(:, :, :) ) * prhodj(:, :, :) ) + Unpack( pcis1d(:), mask = gmicro(:, :, :), field = pcis(:, :, :) ) * prhodj(:, :, :) ) end if end if ! ! -!* 2.5 Hallett-Mossop ice multiplication process due to graupel riming +!* 2.6 Hallett-Mossop ice multiplication process due to graupel riming ! -------------------------------------------------------------------- ! if ( nbumod == kmi .and. lbu_enable ) then if ( lbudget_ri ) call Budget_store_init( tbudgets(NBUDGET_RI), 'HMG', & - Unpack( zris(:), mask = gmicro(:, :, :), field = pris(:, :, :) ) * prhodj(:, :, :) ) + Unpack( pris1d(:), mask = gmicro(:, :, :), field = pris(:, :, :) ) * prhodj(:, :, :) ) if ( lbudget_rg ) call Budget_store_init( tbudgets(NBUDGET_RG), 'HMG', & - Unpack( zrgs(:), mask = gmicro(:, :, :), field = prgs(:, :, :) ) * prhodj(:, :, :) ) + Unpack( prgs1d(:), mask = gmicro(:, :, :), field = prgs(:, :, :) ) * prhodj(:, :, :) ) if ( lbudget_sv ) call Budget_store_init( tbudgets(NBUDGET_SV1 - 1 + nsv_lima_ni), 'HMG', & - Unpack( zcis(:), mask = gmicro(:, :, :), field = pcis(:, :, :) ) * prhodj(:, :, :) ) + Unpack( pcis1d(:), mask = gmicro(:, :, :), field = pcis(:, :, :) ) * prhodj(:, :, :) ) end if -GDRY(:) = (ZZT(:)<XHMTMAX) .AND. (ZZT(:)>XHMTMIN) .AND. (ZRDRYG(:)<ZZW(:))& - .AND. (ZRGT(:)>XRTMIN(6)) .AND. (ZRCT(:)>XRTMIN(2)) +GDRY(:) = (PZT(:)<XHMTMAX) .AND. (PZT(:)>XHMTMIN) & + .AND. (PRGT1D(:)>XRTMIN(6)) .AND. (PRCT1D(:)>XRTMIN(2)) & + .AND. (ZRDRYG(:)-ZZW1(:,2)-ZZW1(:,3))<(ZRWETG(:)-ZZW1(:,5)-ZZW1(:,6)) IGDRY = COUNT( GDRY(:) ) IF( IGDRY>0 ) THEN - ALLOCATE(ZVEC1(IGDRY)) - ALLOCATE(ZVEC2(IGDRY)) - ALLOCATE(IVEC2(IGDRY)) -! - ZVEC1(:) = PACK( ZLBDAC(:),MASK=GDRY(:) ) - ZVEC2(1:IGDRY) = MAX( 1.0001, MIN( REAL(NGAMINC)-0.0001, & - XHMLINTP1 * LOG( ZVEC1(1:IGDRY) ) + XHMLINTP2 ) ) - IVEC2(1:IGDRY) = INT( ZVEC2(1:IGDRY) ) - ZVEC2(1:IGDRY) = ZVEC2(1:IGDRY) - REAL( IVEC2(1:IGDRY) ) - ZVEC1(1:IGDRY) = XGAMINC_HMC( IVEC2(1:IGDRY)+1 )* ZVEC2(1:IGDRY) & - - XGAMINC_HMC( IVEC2(1:IGDRY) )*(ZVEC2(1:IGDRY) - 1.0) - ZZX(:) = UNPACK( VECTOR=ZVEC1(:),MASK=GDRY,FIELD=0.0 ) ! Large droplets -! - WHERE ( GDRY(:) .AND. ZZX(:)<0.99 ) ! Dry case - ZZW1(:,5) = ZZW1(:,1)*(ZCCT(:)/ZRCT(:))*(1.0-ZZX(:))*XHM_FACTG* & - MAX( 0.0, MIN( (ZZT(:)-XHMTMIN)/3.0,(XHMTMAX-ZZT(:))/2.0 ) ) ! CCHMGI - ZCIS(:) = ZCIS(:) + ZZW1(:,5) -! - ZZW1(:,6) = ZZW1(:,5) * XMNU0 ! RCHMGI - ZRIS(:) = ZRIS(:) + ZZW1(:,6) - ZRGS(:) = ZRGS(:) - ZZW1(:,6) - END WHERE - DEALLOCATE(IVEC2) - DEALLOCATE(ZVEC2) - DEALLOCATE(ZVEC1) + ALLOCATE(ZVEC1(IGDRY)) + ALLOCATE(ZVEC2(IGDRY)) + ALLOCATE(IVEC2(IGDRY)) +! + ZVEC1(:) = PACK( PLBDAC(:),MASK=GDRY(:) ) + ZVEC2(1:IGDRY) = MAX( 1.0001, MIN( REAL(NGAMINC)-0.0001, & + XHMLINTP1 * LOG( ZVEC1(1:IGDRY) ) + XHMLINTP2 ) ) + IVEC2(1:IGDRY) = INT( ZVEC2(1:IGDRY) ) + ZVEC2(1:IGDRY) = ZVEC2(1:IGDRY) - REAL( IVEC2(1:IGDRY) ) + ZVEC1(1:IGDRY) = XGAMINC_HMC( IVEC2(1:IGDRY)+1 )* ZVEC2(1:IGDRY) & + - XGAMINC_HMC( IVEC2(1:IGDRY) )*(ZVEC2(1:IGDRY) - 1.0) + ZZX(:) = UNPACK( VECTOR=ZVEC1(:),MASK=GDRY,FIELD=0.0 ) ! Large droplets +! + WHERE ( GDRY(:) .AND. ZZX(:)<0.99 ) ! Dry case + ZZW1(:,5) = ZZW1(:,1)*(PCCT1D(:)/PRCT1D(:))*(1.0-ZZX(:))*XHM_FACTG* & + MAX( 0.0, MIN( (PZT(:)-XHMTMIN)/3.0,(XHMTMAX-PZT(:))/2.0 ) ) ! CCHMGI + PCIS1D(:) = PCIS1D(:) + ZZW1(:,5) +! + ZZW1(:,6) = ZZW1(:,5) * XMNU0 ! RCHMGI + PRIS1D(:) = PRIS1D(:) + ZZW1(:,6) + PRGS1D(:) = PRGS1D(:) - ZZW1(:,6) + END WHERE + DEALLOCATE(IVEC2) + DEALLOCATE(ZVEC2) + DEALLOCATE(ZVEC1) END IF ! ! Budget storage if ( nbumod == kmi .and. lbu_enable ) then if ( lbudget_ri ) call Budget_store_end( tbudgets(NBUDGET_RI), 'HMG', & - Unpack( zris(:), mask = gmicro(:, :, :), field = pris(:, :, :) ) * prhodj(:, :, :) ) + Unpack( pris1d(:), mask = gmicro(:, :, :), field = pris(:, :, :) ) * prhodj(:, :, :) ) if ( lbudget_rg ) call Budget_store_end( tbudgets(NBUDGET_RG), 'HMG', & - Unpack( zrgs(:), mask = gmicro(:, :, :), field = prgs(:, :, :) ) * prhodj(:, :, :) ) + Unpack( prgs1d(:), mask = gmicro(:, :, :), field = prgs(:, :, :) ) * prhodj(:, :, :) ) if ( lbudget_sv ) call Budget_store_end( tbudgets(NBUDGET_SV1 - 1 + nsv_lima_ni), 'HMG', & - Unpack( zcis(:), mask = gmicro(:, :, :), field = pcis(:, :, :) ) * prhodj(:, :, :) ) + Unpack( pcis1d(:), mask = gmicro(:, :, :), field = pcis(:, :, :) ) * prhodj(:, :, :) ) end if ! -!* 2.6 Melting of the graupeln +!* 2.7 Melting of the graupeln ! ---------------------------- ! if ( nbumod == kmi .and. lbu_enable ) then if ( lbudget_th ) call Budget_store_init( tbudgets(NBUDGET_TH), 'GMLT', & - Unpack( zths(:), mask = gmicro(:, :, :), field = pths(:, :, :) ) * prhodj(:, :, :) ) + Unpack( pths1d(:), mask = gmicro(:, :, :), field = pths(:, :, :) ) * prhodj(:, :, :) ) if ( lbudget_rr ) call Budget_store_init( tbudgets(NBUDGET_RR), 'GMLT', & - Unpack( zrrs(:), mask = gmicro(:, :, :), field = prrs(:, :, :) ) * prhodj(:, :, :) ) + Unpack( prrs1d(:), mask = gmicro(:, :, :), field = prrs(:, :, :) ) * prhodj(:, :, :) ) if ( lbudget_rg ) call Budget_store_init( tbudgets(NBUDGET_RG), 'GMLT', & - Unpack( zrgs(:), mask = gmicro(:, :, :), field = prgs(:, :, :) ) * prhodj(:, :, :) ) + Unpack( prgs1d(:), mask = gmicro(:, :, :), field = prgs(:, :, :) ) * prhodj(:, :, :) ) if ( lbudget_sv ) call Budget_store_init( tbudgets(NBUDGET_SV1 - 1 + nsv_lima_nr), 'GMLT', & - Unpack( zcrs(:), mask = gmicro(:, :, :), field = pcrs(:, :, :) ) * prhodj(:, :, :) ) + Unpack( pcrs1d(:), mask = gmicro(:, :, :), field = pcrs(:, :, :) ) * prhodj(:, :, :) ) end if ZZW(:) = 0.0 -WHERE( (ZRGT(:)>XRTMIN(6)) .AND. (ZRGS(:)>XRTMIN(6)/PTSTEP) .AND. (ZZT(:)>XTT) ) - ZZW(:) = ZRVT(:)*ZPRES(:)/((XMV/XMD)+ZRVT(:)) ! Vapor pressure - ZZW(:) = ZKA(:)*(XTT-ZZT(:)) + & - ( ZDV(:)*(XLVTT + ( XCPV - XCL ) * ( ZZT(:) - XTT )) & - *(XESTT-ZZW(:))/(XRV*ZZT(:)) ) +WHERE( (PRGT1D(:)>XRTMIN(6)) .AND. (PRGS1D(:)>XRTMIN(6)/PTSTEP) .AND. (PZT(:)>XTT) ) + ZZW(:) = PRVT1D(:)*PPRES(:)/((XMV/XMD)+PRVT1D(:)) ! Vapor pressure + ZZW(:) = PKA(:)*(XTT-PZT(:)) + & + ( PDV(:)*(XLVTT + ( XCPV - XCL ) * ( PZT(:) - XTT )) & + *(XESTT-ZZW(:))/(XRV*PZT(:)) ) ! ! compute RGMLTR ! - ZZW(:) = MIN( ZRGS(:), MAX( 0.0,( -ZZW(:) * & - ( X0DEPG* ZLBDAG(:)**XEX0DEPG + & - X1DEPG*ZCJ(:)*ZLBDAG(:)**XEX1DEPG ) - & - ( ZZW1(:,1)+ZZW1(:,4) ) * & - ( ZRHODREF(:)*XCL*(XTT-ZZT(:))) ) / & - ( ZRHODREF(:)*XLMTT ) ) ) - ZRRS(:) = ZRRS(:) + ZZW(:) - ZRGS(:) = ZRGS(:) - ZZW(:) - ZTHS(:) = ZTHS(:) - ZZW(:)*(ZLSFACT(:)-ZLVFACT(:)) ! f(L_f*(-RGMLTR)) -! -! ZCRS(:) = MAX( ZCRS(:) + ZZW(:)*(XCCG*ZLBDAG(:)**XCXG/ZRGT(:)),0.0 ) - ZCRS(:) = ZCRS(:) + ZZW(:)*5.0E6 ! obtained after averaging - ! Dshed=1mm and 500 microns + ZZW(:) = MIN( PRGS1D(:), MAX( 0.0,( -ZZW(:) * & + ( X0DEPG* PLBDAG(:)**XEX0DEPG + & + X1DEPG*PCJ(:)*PLBDAG(:)**XEX1DEPG ) - & + ( ZZW1(:,1)+ZZW1(:,4) ) * & + ( PRHODREF(:)*XCL*(XTT-PZT(:))) ) / & + ( PRHODREF(:)*XLMTT ) ) ) + PRRS1D(:) = PRRS1D(:) + ZZW(:) + PRGS1D(:) = PRGS1D(:) - ZZW(:) + PTHS1D(:) = PTHS1D(:) - ZZW(:) * (PLSFACT(:) - PLVFACT(:)) ! f(L_f*(-RGMLTR)) +! +! PCRS1D(:) = MAX( PCRS1D(:) + ZZW(:)*(XCCG*PLBDAG(:)**XCXG/PRGT1D(:)),0.0 ) + PCRS1D(:) = PCRS1D(:) + ZZW(:)*5.0E6 ! obtained after averaging + ! Dshed=1mm and 500 microns END WHERE ! if ( nbumod == kmi .and. lbu_enable ) then if ( lbudget_th ) call Budget_store_end( tbudgets(NBUDGET_TH), 'GMLT', & - Unpack( zths(:), mask = gmicro(:, :, :), field = pths(:, :, :) ) * prhodj(:, :, :) ) + Unpack( pths1d(:), mask = gmicro(:, :, :), field = pths(:, :, :) ) * prhodj(:, :, :) ) if ( lbudget_rr ) call Budget_store_end( tbudgets(NBUDGET_RR), 'GMLT', & - Unpack( zrrs(:), mask = gmicro(:, :, :), field = prrs(:, :, :) ) * prhodj(:, :, :) ) + Unpack( prrs1d(:), mask = gmicro(:, :, :), field = prrs(:, :, :) ) * prhodj(:, :, :) ) if ( lbudget_rg ) call Budget_store_end( tbudgets(NBUDGET_RG), 'GMLT', & - Unpack( zrgs(:), mask = gmicro(:, :, :), field = prgs(:, :, :) ) * prhodj(:, :, :) ) + Unpack( prgs1d(:), mask = gmicro(:, :, :), field = prgs(:, :, :) ) * prhodj(:, :, :) ) if ( lbudget_sv ) call Budget_store_end( tbudgets(NBUDGET_SV1 - 1 + nsv_lima_nr), 'GMLT', & - Unpack( zcrs(:), mask = gmicro(:, :, :), field = pcrs(:, :, :) ) * prhodj(:, :, :) ) + Unpack( pcrs1d(:), mask = gmicro(:, :, :), field = pcrs(:, :, :) ) * prhodj(:, :, :) ) end if ! ! @@ -1094,7 +1532,7 @@ end if ! HAIL: IF (LHAIL) THEN ! -GHAIL(:) = ZRHT(:)>XRTMIN(7) +GHAIL(:) = PRTH1D(:)>XRTMIN(7) IHAIL = COUNT(GHAIL(:)) ! IF( IHAIL>0 ) THEN @@ -1104,233 +1542,235 @@ IF( IHAIL>0 ) THEN ! if ( nbumod == kmi .and. lbu_enable ) then if ( lbudget_th ) call Budget_store_init( tbudgets(NBUDGET_TH), 'WETH', & - Unpack( zths(:), mask = gmicro(:, :, :), field = pths(:, :, :) ) * prhodj(:, :, :) ) + Unpack( pths1d(:), mask = gmicro(:, :, :), field = pths(:, :, :) ) * prhodj(:, :, :) ) if ( lbudget_rc ) call Budget_store_init( tbudgets(NBUDGET_RC), 'WETH', & - Unpack( zrcs(:), mask = gmicro(:, :, :), field = prcs(:, :, :) ) * prhodj(:, :, :) ) + Unpack( prcs1d(:), mask = gmicro(:, :, :), field = prcs(:, :, :) ) * prhodj(:, :, :) ) if ( lbudget_rr ) call Budget_store_init( tbudgets(NBUDGET_RR), 'WETH', & - Unpack( zrrs(:), mask = gmicro(:, :, :), field = prrs(:, :, :) ) * prhodj(:, :, :) ) + Unpack( prrs1d(:), mask = gmicro(:, :, :), field = prrs(:, :, :) ) * prhodj(:, :, :) ) if ( lbudget_ri ) call Budget_store_init( tbudgets(NBUDGET_RI), 'WETH', & - Unpack( zris(:), mask = gmicro(:, :, :), field = pris(:, :, :) ) * prhodj(:, :, :) ) + Unpack( pris1d(:), mask = gmicro(:, :, :), field = pris(:, :, :) ) * prhodj(:, :, :) ) if ( lbudget_rs ) call Budget_store_init( tbudgets(NBUDGET_RS), 'WETH', & - Unpack( zrss(:), mask = gmicro(:, :, :), field = prss(:, :, :) ) * prhodj(:, :, :) ) + Unpack( prss1d(:), mask = gmicro(:, :, :), field = prss(:, :, :) ) * prhodj(:, :, :) ) if ( lbudget_rg ) call Budget_store_init( tbudgets(NBUDGET_RG), 'WETH', & - Unpack( zrgs(:), mask = gmicro(:, :, :), field = prgs(:, :, :) ) * prhodj(:, :, :) ) + Unpack( prgs1d(:), mask = gmicro(:, :, :), field = prgs(:, :, :) ) * prhodj(:, :, :) ) if ( lbudget_rh ) call Budget_store_init( tbudgets(NBUDGET_RH), 'WETH', & - Unpack( zrhs(:), mask = gmicro(:, :, :), field = prhs(:, :, :) ) * prhodj(:, :, :) ) + Unpack( prhs1d(:), mask = gmicro(:, :, :), field = prhs(:, :, :) ) * prhodj(:, :, :) ) if ( lbudget_sv ) then call Budget_store_init( tbudgets(NBUDGET_SV1 - 1 + nsv_lima_nc), 'WETH', & - Unpack( zccs(:), mask = gmicro(:, :, :), field = pccs(:, :, :) ) * prhodj(:, :, :) ) + Unpack( pccs1d(:), mask = gmicro(:, :, :), field = pccs(:, :, :) ) * prhodj(:, :, :) ) call Budget_store_init( tbudgets(NBUDGET_SV1 - 1 + nsv_lima_nr), 'WETH', & - Unpack( zcrs(:), mask = gmicro(:, :, :), field = pcrs(:, :, :) ) * prhodj(:, :, :) ) + Unpack( pcrs1d(:), mask = gmicro(:, :, :), field = pcrs(:, :, :) ) * prhodj(:, :, :) ) call Budget_store_init( tbudgets(NBUDGET_SV1 - 1 + nsv_lima_ni), 'WETH', & - Unpack( zcis(:), mask = gmicro(:, :, :), field = pcis(:, :, :) ) * prhodj(:, :, :) ) + Unpack( pcis1d(:), mask = gmicro(:, :, :), field = pcis(:, :, :) ) * prhodj(:, :, :) ) end if end if - ZZW1(:,:) = 0.0 - WHERE( GHAIL(:) .AND. ( (ZRCT(:)>XRTMIN(2) .AND. ZRCS(:)>XRTMIN(2)/PTSTEP) .OR. & - (ZRIT(:)>XRTMIN(4) .AND. ZRIS(:)>XRTMIN(4)/PTSTEP) ) ) - ZZW(:) = ZLBDAH(:)**(XCXH-XDH-2.0) * ZRHODREF(:)**(-XCEXVT) - ZZW1(:,1) = MIN( ZRCS(:),XFWETH * ZRCT(:) * ZZW(:) ) ! RCWETH - ZZW1(:,2) = MIN( ZRIS(:),XFWETH * ZRIT(:) * ZZW(:) ) ! RIWETH - END WHERE + ZZW1(:,:) = 0.0 + WHERE( GHAIL(:) .AND. ( (PRCT1D(:)>XRTMIN(2) .AND. PRCS1D(:)>XRTMIN(2)/PTSTEP) .OR. & + (PRIT1D(:)>XRTMIN(4) .AND. PRIS1D(:)>XRTMIN(4)/PTSTEP) ) ) + ZZW(:) = PLBDAH(:)**(XCXH-XDH-2.0) * PRHODREF(:)**(-XCEXVT) + ZZW1(:,1) = MIN( PRCS1D(:),XFWETH * PRCT1D(:) * ZZW(:) ) ! RCWETH + ZZW1(:,2) = MIN( PRIS1D(:),XFWETH * PRIT1D(:) * ZZW(:) ) ! RIWETH + END WHERE ! !* 3.1.1 accretion of aggregates on the hailstones ! ------------------------------------------------ ! - GWET(:) = GHAIL(:) .AND. (ZRST(:)>XRTMIN(5) .AND. ZRSS(:)>XRTMIN(5)/PTSTEP) - IGWET = COUNT( GWET(:) ) + GWET(:) = GHAIL(:) .AND. (PRST1D(:)>XRTMIN(5) .AND. PRSS1D(:)>XRTMIN(5)/PTSTEP) + IGWET = COUNT( GWET(:) ) ! - IF( IGWET>0 ) THEN + IF( IGWET>0 ) THEN ! !* 3.1.2 allocations ! - ALLOCATE(ZVEC1(IGWET)) - ALLOCATE(ZVEC2(IGWET)) - ALLOCATE(ZVEC3(IGWET)) - ALLOCATE(IVEC1(IGWET)) - ALLOCATE(IVEC2(IGWET)) + ALLOCATE(ZVEC1(IGWET)) + ALLOCATE(ZVEC2(IGWET)) + ALLOCATE(ZVEC3(IGWET)) + ALLOCATE(IVEC1(IGWET)) + ALLOCATE(IVEC2(IGWET)) ! -!* 3.1.3 select the (ZLBDAH,ZLBDAS) couplet +!* 3.1.3 select the (PLBDAH,PLBDAS) couplet ! - ZVEC1(:) = PACK( ZLBDAH(:),MASK=GWET(:) ) - ZVEC2(:) = PACK( ZLBDAS(:),MASK=GWET(:) ) + ZVEC1(:) = PACK( PLBDAH(:),MASK=GWET(:) ) + ZVEC2(:) = PACK( PLBDAS(:),MASK=GWET(:) ) ! -!* 3.1.4 find the next lower indice for the ZLBDAG and for the ZLBDAS +!* 3.1.4 find the next lower indice for the PLBDAG and for the PLBDAS ! in the geometrical set of (Lbda_h,Lbda_s) couplet use to ! tabulate the SWETH-kernel ! - ZVEC1(1:IGWET) = MAX( 1.0001, MIN( REAL(NWETLBDAH)-0.0001, & - XWETINTP1H * LOG( ZVEC1(1:IGWET) ) + XWETINTP2H ) ) - IVEC1(1:IGWET) = INT( ZVEC1(1:IGWET) ) - ZVEC1(1:IGWET) = ZVEC1(1:IGWET) - REAL( IVEC1(1:IGWET) ) + ZVEC1(1:IGWET) = MAX( 1.0001, MIN( REAL(NWETLBDAH)-0.0001, & + XWETINTP1H * LOG( ZVEC1(1:IGWET) ) + XWETINTP2H ) ) + IVEC1(1:IGWET) = INT( ZVEC1(1:IGWET) ) + ZVEC1(1:IGWET) = ZVEC1(1:IGWET) - REAL( IVEC1(1:IGWET) ) ! - ZVEC2(1:IGWET) = MAX( 1.0001, MIN( REAL(NWETLBDAS)-0.0001, & - XWETINTP1S * LOG( ZVEC2(1:IGWET) ) + XWETINTP2S ) ) - IVEC2(1:IGWET) = INT( ZVEC2(1:IGWET) ) - ZVEC2(1:IGWET) = ZVEC2(1:IGWET) - REAL( IVEC2(1:IGWET) ) + ZVEC2(1:IGWET) = MAX( 1.0001, MIN( REAL(NWETLBDAS)-0.0001, & + XWETINTP1S * LOG( ZVEC2(1:IGWET) ) + XWETINTP2S ) ) + IVEC2(1:IGWET) = INT( ZVEC2(1:IGWET) ) + ZVEC2(1:IGWET) = ZVEC2(1:IGWET) - REAL( IVEC2(1:IGWET) ) ! !* 3.1.5 perform the bilinear interpolation of the normalized ! SWETH-kernel ! - DO JJ = 1,IGWET - ZVEC3(JJ) = ( XKER_SWETH(IVEC1(JJ)+1,IVEC2(JJ)+1)* ZVEC2(JJ) & - - XKER_SWETH(IVEC1(JJ)+1,IVEC2(JJ) )*(ZVEC2(JJ) - 1.0) ) & - * ZVEC1(JJ) & - - ( XKER_SWETH(IVEC1(JJ) ,IVEC2(JJ)+1)* ZVEC2(JJ) & - - XKER_SWETH(IVEC1(JJ) ,IVEC2(JJ) )*(ZVEC2(JJ) - 1.0) ) & - * (ZVEC1(JJ) - 1.0) - END DO - ZZW(:) = UNPACK( VECTOR=ZVEC3(:),MASK=GWET,FIELD=0.0 ) -! - WHERE( GWET(:) ) - ZZW1(:,3) = MIN( ZRSS(:),XFSWETH*ZZW(:) & ! RSWETH - *( ZLBDAS(:)**(XCXS-XBS) )*( ZLBDAH(:)**XCXH ) & - *( ZRHODREF(:)**(-XCEXVT-1.) ) & - *( XLBSWETH1/( ZLBDAH(:)**2 ) + & - XLBSWETH2/( ZLBDAH(:) * ZLBDAS(:) ) + & - XLBSWETH3/( ZLBDAS(:)**2) ) ) - END WHERE - DEALLOCATE(IVEC2) - DEALLOCATE(IVEC1) - DEALLOCATE(ZVEC3) - DEALLOCATE(ZVEC2) - DEALLOCATE(ZVEC1) - END IF + DO JJ = 1,IGWET + ZVEC3(JJ) = ( XKER_SWETH(IVEC1(JJ)+1,IVEC2(JJ)+1) * ZVEC2(JJ) & + - XKER_SWETH(IVEC1(JJ)+1,IVEC2(JJ) ) * (ZVEC2(JJ) - 1.0) ) & + * ZVEC1(JJ) & + - ( XKER_SWETH(IVEC1(JJ) ,IVEC2(JJ)+1) * ZVEC2(JJ) & + - XKER_SWETH(IVEC1(JJ) ,IVEC2(JJ) ) * (ZVEC2(JJ) - 1.0) ) & + * (ZVEC1(JJ) - 1.0) + END DO + ZZW(:) = UNPACK( VECTOR=ZVEC3(:),MASK=GWET,FIELD=0.0 ) +! + WHERE( GWET(:) ) + ZZW1(:,3) = MIN( PRSS1D(:),XFSWETH*ZZW(:) & ! RSWETH + *( PRST1D(:))*( PLBDAH(:)**XCXH ) & + *( PRHODREF(:)**(-XCEXVT) ) & + *( XLBSWETH1/( PLBDAH(:)**2 ) + & + XLBSWETH2/( PLBDAH(:) * PLBDAS(:) ) + & + XLBSWETH3/( PLBDAS(:)**2) ) ) + END WHERE + DEALLOCATE(IVEC2) + DEALLOCATE(IVEC1) + DEALLOCATE(ZVEC3) + DEALLOCATE(ZVEC2) + DEALLOCATE(ZVEC1) + END IF ! !* 3.1.6 accretion of graupeln on the hailstones ! ---------------------------------------------- ! - GWET(:) = GHAIL(:) .AND. (ZRGT(:)>XRTMIN(6) .AND. ZRGS(:)>XRTMIN(6)/PTSTEP) - IGWET = COUNT( GWET(:) ) + GWET(:) = GHAIL(:) .AND. (PRGT1D(:)>XRTMIN(6) .AND. PRGS1D(:)>XRTMIN(6)/PTSTEP) + IGWET = COUNT( GWET(:) ) ! - IF( IGWET>0 ) THEN + IF( IGWET>0 ) THEN ! !* 3.1.7 allocations ! - ALLOCATE(ZVEC1(IGWET)) - ALLOCATE(ZVEC2(IGWET)) - ALLOCATE(ZVEC3(IGWET)) - ALLOCATE(IVEC1(IGWET)) - ALLOCATE(IVEC2(IGWET)) + ALLOCATE(ZVEC1(IGWET)) + ALLOCATE(ZVEC2(IGWET)) + ALLOCATE(ZVEC3(IGWET)) + ALLOCATE(IVEC1(IGWET)) + ALLOCATE(IVEC2(IGWET)) ! -!* 3.1.8 select the (ZLBDAH,ZLBDAG) couplet +!* 3.1.8 select the (PLBDAH,PLBDAG) couplet ! - ZVEC1(:) = PACK( ZLBDAH(:),MASK=GWET(:) ) - ZVEC2(:) = PACK( ZLBDAG(:),MASK=GWET(:) ) + ZVEC1(:) = PACK( PLBDAH(:),MASK=GWET(:) ) + ZVEC2(:) = PACK( PLBDAG(:),MASK=GWET(:) ) ! -!* 3.1.9 find the next lower indice for the ZLBDAH and for the ZLBDAG +!* 3.1.9 find the next lower indice for the PLBDAH and for the PLBDAG ! in the geometrical set of (Lbda_h,Lbda_g) couplet use to ! tabulate the GWETH-kernel ! - ZVEC1(1:IGWET) = MAX( 1.0001, MIN( REAL(NWETLBDAG)-0.0001, & - XWETINTP1H * LOG( ZVEC1(1:IGWET) ) + XWETINTP2H ) ) - IVEC1(1:IGWET) = INT( ZVEC1(1:IGWET) ) - ZVEC1(1:IGWET) = ZVEC1(1:IGWET) - REAL( IVEC1(1:IGWET) ) + ZVEC1(1:IGWET) = MAX( 1.0001, MIN( REAL(NWETLBDAG)-0.0001, & + XWETINTP1H * LOG( ZVEC1(1:IGWET) ) + XWETINTP2H ) ) + IVEC1(1:IGWET) = INT( ZVEC1(1:IGWET) ) + ZVEC1(1:IGWET) = ZVEC1(1:IGWET) - REAL( IVEC1(1:IGWET) ) ! - ZVEC2(1:IGWET) = MAX( 1.0001, MIN( REAL(NWETLBDAG)-0.0001, & - XWETINTP1G * LOG( ZVEC2(1:IGWET) ) + XWETINTP2G ) ) - IVEC2(1:IGWET) = INT( ZVEC2(1:IGWET) ) - ZVEC2(1:IGWET) = ZVEC2(1:IGWET) - REAL( IVEC2(1:IGWET) ) + ZVEC2(1:IGWET) = MAX( 1.0001, MIN( REAL(NWETLBDAG)-0.0001, & + XWETINTP1G * LOG( ZVEC2(1:IGWET) ) + XWETINTP2G ) ) + IVEC2(1:IGWET) = INT( ZVEC2(1:IGWET) ) + ZVEC2(1:IGWET) = ZVEC2(1:IGWET) - REAL( IVEC2(1:IGWET) ) ! !* 3.1.10 perform the bilinear interpolation of the normalized ! GWETH-kernel ! - DO JJ = 1,IGWET - ZVEC3(JJ) = ( XKER_GWETH(IVEC1(JJ)+1,IVEC2(JJ)+1)* ZVEC2(JJ) & - - XKER_GWETH(IVEC1(JJ)+1,IVEC2(JJ) )*(ZVEC2(JJ) - 1.0) ) & - * ZVEC1(JJ) & - - ( XKER_GWETH(IVEC1(JJ) ,IVEC2(JJ)+1)* ZVEC2(JJ) & - - XKER_GWETH(IVEC1(JJ) ,IVEC2(JJ) )*(ZVEC2(JJ) - 1.0) ) & - * (ZVEC1(JJ) - 1.0) - END DO - ZZW(:) = UNPACK( VECTOR=ZVEC3(:),MASK=GWET,FIELD=0.0 ) -! - WHERE( GWET(:) ) - ZZW1(:,5) = MAX(MIN( ZRGS(:),XFGWETH*ZZW(:) & ! RGWETH - *( ZLBDAG(:)**(XCXG-XBG) )*( ZLBDAH(:)**XCXH ) & - *( ZRHODREF(:)**(-XCEXVT-1.) ) & - *( XLBGWETH1/( ZLBDAH(:)**2 ) + & - XLBGWETH2/( ZLBDAH(:) * ZLBDAG(:) ) + & - XLBGWETH3/( ZLBDAG(:)**2) ) ),0. ) - END WHERE - DEALLOCATE(IVEC2) - DEALLOCATE(IVEC1) - DEALLOCATE(ZVEC3) - DEALLOCATE(ZVEC2) - DEALLOCATE(ZVEC1) - END IF + DO JJ = 1,IGWET + ZVEC3(JJ) = ( XKER_GWETH(IVEC1(JJ)+1,IVEC2(JJ)+1) * ZVEC2(JJ) & + - XKER_GWETH(IVEC1(JJ)+1,IVEC2(JJ) ) * (ZVEC2(JJ) - 1.0) ) & + * ZVEC1(JJ) & + - ( XKER_GWETH(IVEC1(JJ) ,IVEC2(JJ)+1) * ZVEC2(JJ) & + - XKER_GWETH(IVEC1(JJ) ,IVEC2(JJ) ) * (ZVEC2(JJ) - 1.0) ) & + * (ZVEC1(JJ) - 1.0) + END DO + ZZW(:) = UNPACK( VECTOR=ZVEC3(:),MASK=GWET,FIELD=0.0 ) +! + WHERE( GWET(:) ) + ZZW1(:,5) = MAX(MIN( PRGS1D(:),XFGWETH*ZZW(:) & ! RGWETH + *( PLBDAG(:)**(XCXG-XBG) )*( PLBDAH(:)**XCXH ) & + *( PRHODREF(:)**(-XCEXVT-1.) ) & + *( XLBGWETH1/( PLBDAH(:)**2 ) + & + XLBGWETH2/( PLBDAH(:) * PLBDAG(:) ) + & + XLBGWETH3/( PLBDAG(:)**2) ) ),0. ) + END WHERE + DEALLOCATE(IVEC2) + DEALLOCATE(IVEC1) + DEALLOCATE(ZVEC3) + DEALLOCATE(ZVEC2) + DEALLOCATE(ZVEC1) + END IF +! ! !* 3.2 compute the Wet growth of hail ! ------------------------------------- ! - ZZW(:) = 0.0 - WHERE( GHAIL(:) .AND. ZZT(:)<XTT ) - ZZW(:) = ZRVT(:)*ZPRES(:)/((XMV/XMD)+ZRVT(:)) ! Vapor pressure - ZZW(:) = ZKA(:)*(XTT-ZZT(:)) + & - ( ZDV(:)*(XLVTT + ( XCPV - XCL ) * ( ZZT(:) - XTT )) & - *(XESTT-ZZW(:))/(XRV*ZZT(:)) ) + ZZW(:) = 0.0 + WHERE( GHAIL(:) .AND. PZT(:)<XTT ) + ZZW(:) = PRVT1D(:) * PPRES(:) / ((XMV / XMD) + PRVT1D(:)) ! Vapor pressure + ZZW(:) = PKA(:) * (XTT - PZT(:)) + & + ( PDV(:) * (XLVTT + ( XCPV - XCL ) * ( PZT(:) - XTT )) & + * (XESTT-ZZW(:))/(XRV*PZT(:)) ) ! ! compute RWETH ! - ZZW(:) = MAX(0., ( ZZW(:) * ( X0DEPH* ZLBDAH(:)**XEX0DEPH + & - X1DEPH*ZCJ(:)*ZLBDAH(:)**XEX1DEPH ) + & - ( ZZW1(:,2)+ZZW1(:,3)+ZZW1(:,5) ) * & - ( ZRHODREF(:)*(XLMTT+(XCI-XCL)*(XTT-ZZT(:))) ) ) / & - ( ZRHODREF(:)*(XLMTT-XCL*(XTT-ZZT(:))) ) ) + ZZW(:) = MAX(0., ( ZZW(:) * ( X0DEPH* PLBDAH(:)**XEX0DEPH + & + X1DEPH*PCJ(:)*PLBDAH(:)**XEX1DEPH ) + & + ( ZZW1(:,2)+ZZW1(:,3)+ZZW1(:,5) ) * & + ( PRHODREF(:)*(XLMTT+(XCI-XCL)*(XTT-PZT(:))) ) ) / & + ( PRHODREF(:)*(XLMTT-XCL*(XTT-PZT(:))) ) ) ! - ZZW1(:,6) = MAX( ZZW(:) - ZZW1(:,2) - ZZW1(:,3) - ZZW1(:,5),0.) ! RCWETH+RRWETH - END WHERE - WHERE ( GHAIL(:) .AND. ZZT(:)<XTT .AND. ZZW1(:,6)/=0.) + ZZW1(:,6) = MAX( ZZW(:) - ZZW1(:,2) - ZZW1(:,3) - ZZW1(:,5),0.) ! RCWETH+RRWETH + END WHERE + ! + WHERE ( GHAIL(:) .AND. PZT(:)<XTT .AND. ZZW1(:,6)/=0.) ! ! limitation of the available rainwater mixing ratio (RRWETH < RRS !) ! - ZZW1(:,4) = MAX( 0.0,MIN( ZZW1(:,6),ZRRS(:)+ZZW1(:,1) ) ) - ZZX(:) = ZZW1(:,4) / ZZW1(:,6) - ZZW1(:,2) = ZZW1(:,2)*ZZX(:) - ZZW1(:,3) = ZZW1(:,3)*ZZX(:) - ZZW1(:,5) = ZZW1(:,5)*ZZX(:) - ZZW(:) = ZZW1(:,4) + ZZW1(:,2) + ZZW1(:,3) + ZZW1(:,5) + ZZW1(:,4) = MAX( 0.0,MIN( ZZW1(:,6),PRRS1D(:)+ZZW1(:,1) ) ) + ZZX(:) = ZZW1(:,4) / ZZW1(:,6) + ZZW1(:,2) = ZZW1(:,2) * ZZX(:) + ZZW1(:,3) = ZZW1(:,3) * ZZX(:) + ZZW1(:,5) = ZZW1(:,5) * ZZX(:) + ZZW(:) = ZZW1(:,4) + ZZW1(:,2) + ZZW1(:,3) + ZZW1(:,5) ! !* 3.2.1 integrate the Wet growth of hail ! - ZRCS(:) = ZRCS(:) - ZZW1(:,1) - ZRIS(:) = ZRIS(:) - ZZW1(:,2) - ZRSS(:) = ZRSS(:) - ZZW1(:,3) - ZRGS(:) = ZRGS(:) - ZZW1(:,5) - ZRHS(:) = ZRHS(:) + ZZW(:) - ZRRS(:) = MAX( 0.0,ZRRS(:) - ZZW1(:,4) + ZZW1(:,1) ) - ZTHS(:) = ZTHS(:) + ZZW1(:,4)*(ZLSFACT(:)-ZLVFACT(:)) - ! f(L_f*(RCWETH+RRWETH)) -! - ZCCS(:) = MAX( ZCCS(:)-ZZW1(:,1)*(ZCCT(:)/MAX(ZRCT(:),XRTMIN(2))),0.0 ) - ZCIS(:) = MAX( ZCIS(:)-ZZW1(:,2)*(ZCIT(:)/MAX(ZRIT(:),XRTMIN(4))),0.0 ) - ZCRS(:) = MAX( ZCRS(:)-MAX( ZZW1(:,4)-ZZW1(:,1),0.0 ) & - *(ZCRT(:)/MAX(ZRRT(:),XRTMIN(3))),0.0 ) - END WHERE - + PRCS1D(:) = PRCS1D(:) - ZZW1(:,1) + PRIS1D(:) = PRIS1D(:) - ZZW1(:,2) + PRSS1D(:) = PRSS1D(:) - ZZW1(:,3) + PRGS1D(:) = PRGS1D(:) - ZZW1(:,5) + PRHS1D(:) = PRHS1D(:) + ZZW(:) + PRRS1D(:) = MAX( 0.0,PRRS1D(:) - ZZW1(:,4) + ZZW1(:,1) ) + PTHS1D(:) = PTHS1D(:) + ZZW1(:,4) * (PLSFACT(:) - PLVFACT(:)) + ! f(L_f*(RCWETH+RRWETH)) +! + PCCS1D(:) = MAX( PCCS1D(:)-ZZW1(:,1)*(PCCT1D(:)/MAX(PRCT1D(:),XRTMIN(2))),0.0 ) + PCIS1D(:) = MAX( PCIS1D(:)-ZZW1(:,2)*(PCIT1D(:)/MAX(PRIT1D(:),XRTMIN(4))),0.0 ) + PCRS1D(:) = MAX( PCRS1D(:)-MAX( ZZW1(:,4)-ZZW1(:,1),0.0 ) & + *(PCRT1D(:)/MAX(PRRT1D(:),XRTMIN(3))),0.0 ) + END WHERE +! if ( nbumod == kmi .and. lbu_enable ) then if ( lbudget_th ) call Budget_store_end( tbudgets(NBUDGET_TH), 'WETH', & - Unpack( zths(:), mask = gmicro(:, :, :), field = pths(:, :, :) ) * prhodj(:, :, :) ) + Unpack( pths1d(:), mask = gmicro(:, :, :), field = pths(:, :, :) ) * prhodj(:, :, :) ) if ( lbudget_rc ) call Budget_store_end( tbudgets(NBUDGET_RC), 'WETH', & - Unpack( zrcs(:), mask = gmicro(:, :, :), field = prcs(:, :, :) ) * prhodj(:, :, :) ) + Unpack( prcs1d(:), mask = gmicro(:, :, :), field = prcs(:, :, :) ) * prhodj(:, :, :) ) if ( lbudget_rr ) call Budget_store_end( tbudgets(NBUDGET_RR), 'WETH', & - Unpack( zrrs(:), mask = gmicro(:, :, :), field = prrs(:, :, :) ) * prhodj(:, :, :) ) + Unpack( prrs1d(:), mask = gmicro(:, :, :), field = prrs(:, :, :) ) * prhodj(:, :, :) ) if ( lbudget_ri ) call Budget_store_end( tbudgets(NBUDGET_RI), 'WETH', & - Unpack( zris(:), mask = gmicro(:, :, :), field = pris(:, :, :) ) * prhodj(:, :, :) ) + Unpack( pris1d(:), mask = gmicro(:, :, :), field = pris(:, :, :) ) * prhodj(:, :, :) ) if ( lbudget_rs ) call Budget_store_end( tbudgets(NBUDGET_RS), 'WETH', & - Unpack( zrss(:), mask = gmicro(:, :, :), field = prss(:, :, :) ) * prhodj(:, :, :) ) + Unpack( prss1d(:), mask = gmicro(:, :, :), field = prss(:, :, :) ) * prhodj(:, :, :) ) if ( lbudget_rg ) call Budget_store_end( tbudgets(NBUDGET_RG), 'WETH', & - Unpack( zrgs(:), mask = gmicro(:, :, :), field = prgs(:, :, :) ) * prhodj(:, :, :) ) + Unpack( prgs1d(:), mask = gmicro(:, :, :), field = prgs(:, :, :) ) * prhodj(:, :, :) ) if ( lbudget_rh ) call Budget_store_end( tbudgets(NBUDGET_RH), 'WETH', & - Unpack( zrhs(:), mask = gmicro(:, :, :), field = prhs(:, :, :) ) * prhodj(:, :, :) ) + Unpack( prhs1d(:), mask = gmicro(:, :, :), field = prhs(:, :, :) ) * prhodj(:, :, :) ) if ( lbudget_sv ) then call Budget_store_end( tbudgets(NBUDGET_SV1 - 1 + nsv_lima_nc), 'WETH', & - Unpack( zccs(:), mask = gmicro(:, :, :), field = pccs(:, :, :) ) * prhodj(:, :, :) ) + Unpack( pccs1d(:), mask = gmicro(:, :, :), field = pccs(:, :, :) ) * prhodj(:, :, :) ) call Budget_store_end( tbudgets(NBUDGET_SV1 - 1 + nsv_lima_nr), 'WETH', & - Unpack( zcrs(:), mask = gmicro(:, :, :), field = pcrs(:, :, :) ) * prhodj(:, :, :) ) + Unpack( pcrs1d(:), mask = gmicro(:, :, :), field = pcrs(:, :, :) ) * prhodj(:, :, :) ) call Budget_store_end( tbudgets(NBUDGET_SV1 - 1 + nsv_lima_ni), 'WETH', & - Unpack( zcis(:), mask = gmicro(:, :, :), field = pcis(:, :, :) ) * prhodj(:, :, :) ) + Unpack( pcis1d(:), mask = gmicro(:, :, :), field = pcis(:, :, :) ) * prhodj(:, :, :) ) end if end if END IF ! IHAIL>0 @@ -1344,81 +1784,81 @@ END IF ! IHAIL>0 IF ( IHAIL>0 ) THEN if ( nbumod == kmi .and. lbu_enable ) then if ( lbudget_rg ) call Budget_store_init( tbudgets(NBUDGET_RG), 'COHG', & - Unpack( zrgs(:), mask = gmicro(:, :, :), field = prgs(:, :, :) ) * prhodj(:, :, :) ) + Unpack( prgs1d(:), mask = gmicro(:, :, :), field = prgs(:, :, :) ) * prhodj(:, :, :) ) if ( lbudget_rh ) call Budget_store_init( tbudgets(NBUDGET_RH), 'COHG', & - Unpack( zrhs(:), mask = gmicro(:, :, :), field = prhs(:, :, :) ) * prhodj(:, :, :) ) + Unpack( prhs1d(:), mask = gmicro(:, :, :), field = prhs(:, :, :) ) * prhodj(:, :, :) ) end if - - ZTHRH=0.01E-3 - ZTHRC=0.001E-3 - ZZW(:) = 0.0 - WHERE( ZRHT(:)<ZTHRH .AND. ZRCT(:)<ZTHRC .AND. ZZT(:)<XTT ) - ZZW(:) = MIN( 1.0,MAX( 0.0,1.0-(ZRCT(:)/ZTHRC) ) ) +! + ZTHRH = 0.01E-3 + ZTHRC = 0.001E-3 + ZZW(:) = 0.0 +! + WHERE( PRTH1D(:)<ZTHRH .AND. PRCT1D(:)<ZTHRC .AND. PZT(:)<XTT ) + ZZW(:) = MIN( 1.0,MAX( 0.0,1.0-(PRCT1D(:)/ZTHRC) ) ) ! ! assume a linear percent conversion rate of hail into graupel ! - ZZW(:) = ZRHS(:)*ZZW(:) - ZRGS(:) = ZRGS(:) + ZZW(:) ! partial conversion - ZRHS(:) = ZRHS(:) - ZZW(:) ! of hail into graupel + ZZW(:) = PRHS1D(:) * ZZW(:) + PRGS1D(:) = PRGS1D(:) + ZZW(:) ! partial conversion + PRHS1D(:) = PRHS1D(:) - ZZW(:) ! of hail into graupel + END WHERE ! - END WHERE - if ( nbumod == kmi .and. lbu_enable ) then if ( lbudget_rg ) call Budget_store_end( tbudgets(NBUDGET_RG), 'COHG', & - Unpack( zrgs(:), mask = gmicro(:, :, :), field = prgs(:, :, :) ) * prhodj(:, :, :) ) + Unpack( prgs1d(:), mask = gmicro(:, :, :), field = prgs(:, :, :) ) * prhodj(:, :, :) ) if ( lbudget_rh ) call Budget_store_end( tbudgets(NBUDGET_RH), 'COHG', & - Unpack( zrhs(:), mask = gmicro(:, :, :), field = prhs(:, :, :) ) * prhodj(:, :, :) ) + Unpack( prhs1d(:), mask = gmicro(:, :, :), field = prhs(:, :, :) ) * prhodj(:, :, :) ) end if END IF ! +! !* 3.4 Melting of the hailstones ! IF ( IHAIL>0 ) THEN if ( nbumod == kmi .and. lbu_enable ) then if ( lbudget_th ) call Budget_store_init( tbudgets(NBUDGET_TH), 'HMLT', & - Unpack( zths(:), mask = gmicro(:, :, :), field = pths(:, :, :) ) * prhodj(:, :, :) ) + Unpack( pths1d(:), mask = gmicro(:, :, :), field = pths(:, :, :) ) * prhodj(:, :, :) ) if ( lbudget_rr ) call Budget_store_init( tbudgets(NBUDGET_RR), 'HMLT', & - Unpack( zrrs(:), mask = gmicro(:, :, :), field = prrs(:, :, :) ) * prhodj(:, :, :) ) + Unpack( prrs1d(:), mask = gmicro(:, :, :), field = prrs(:, :, :) ) * prhodj(:, :, :) ) if ( lbudget_rh ) call Budget_store_init( tbudgets(NBUDGET_RH), 'HMLT', & - Unpack( zrhs(:), mask = gmicro(:, :, :), field = prhs(:, :, :) ) * prhodj(:, :, :) ) + Unpack( prhs1d(:), mask = gmicro(:, :, :), field = prhs(:, :, :) ) * prhodj(:, :, :) ) if ( lbudget_sv ) call Budget_store_init( tbudgets(NBUDGET_SV1 - 1 + nsv_lima_nr), 'HMLT', & - Unpack( zcrs(:), mask = gmicro(:, :, :), field = pcrs(:, :, :) ) * prhodj(:, :, :) ) + Unpack( pcrs1d(:), mask = gmicro(:, :, :), field = pcrs(:, :, :) ) * prhodj(:, :, :) ) end if - - ZZW(:) = 0.0 - WHERE( GHAIL(:) .AND. (ZRHS(:)>XRTMIN(7)/PTSTEP) .AND. (ZRHT(:)>XRTMIN(7)) .AND. (ZZT(:)>XTT) ) - ZZW(:) = ZRVT(:)*ZPRES(:)/((XMV/XMD)+ZRVT(:)) ! Vapor pressure - ZZW(:) = ZKA(:)*(XTT-ZZT(:)) + & - ( ZDV(:)*(XLVTT + ( XCPV - XCL ) * ( ZZT(:) - XTT )) & - *(XESTT-ZZW(:))/(XRV*ZZT(:)) ) +! + ZZW(:) = 0.0 + WHERE( GHAIL(:) .AND. (PRHS1D(:)>XRTMIN(7)/PTSTEP) .AND. (PRTH1D(:)>XRTMIN(7)) .AND. (PZT(:)>XTT) ) + ZZW(:) = PRVT1D(:) * PPRES(:) / ((XMV / XMD) + PRVT1D(:)) ! Vapor pressure + ZZW(:) = PKA(:) * (XTT - PZT(:)) + & + ( PDV(:) * (XLVTT + ( XCPV - XCL ) * ( PZT(:) - XTT )) & + * (XESTT - ZZW(:)) / (XRV * PZT(:)) ) ! ! compute RHMLTR ! - ZZW(:) = MIN( ZRHS(:), MAX( 0.0,( -ZZW(:) * & - ( X0DEPH* ZLBDAH(:)**XEX0DEPH + & - X1DEPH*ZCJ(:)*ZLBDAH(:)**XEX1DEPH ) - & - ZZW1(:,6)*( ZRHODREF(:)*XCL*(XTT-ZZT(:))) ) / & - ( ZRHODREF(:)*XLMTT ) ) ) - ZRRS(:) = ZRRS(:) + ZZW(:) - ZRHS(:) = ZRHS(:) - ZZW(:) - ZTHS(:) = ZTHS(:) - ZZW(:)*(ZLSFACT(:)-ZLVFACT(:)) ! f(L_f*(-RHMLTR)) + ZZW(:) = MIN( PRHS1D(:), MAX( 0.0,( -ZZW(:) * & + ( X0DEPH* PLBDAH(:)**XEX0DEPH + & + X1DEPH*PCJ(:)*PLBDAH(:)**XEX1DEPH ) - & + ZZW1(:,6)*( PRHODREF(:)*XCL*(XTT-PZT(:))) ) / & + ( PRHODREF(:)*XLMTT ) ) ) + PRRS1D(:) = PRRS1D(:) + ZZW(:) + PRHS1D(:) = PRHS1D(:) - ZZW(:) + PTHS1D(:) = PTHS1D(:) - ZZW(:) * (PLSFACT(:) - PLVFACT(:)) ! f(L_f*(-RHMLTR)) ! - ZCRS(:) = MAX( ZCRS(:) + ZZW(:)*(XCCH*ZLBDAH(:)**XCXH/ZRHT(:)),0.0 ) + PCRS1D(:) = MAX( PCRS1D(:) + ZZW(:)*(XCCH*PLBDAH(:)**XCXH/PRTH1D(:)),0.0 ) + END WHERE ! - END WHERE - if ( nbumod == kmi .and. lbu_enable ) then if ( lbudget_th ) call Budget_store_end( tbudgets(NBUDGET_TH), 'HMLT', & - Unpack( zths(:), mask = gmicro(:, :, :), field = pths(:, :, :) ) * prhodj(:, :, :) ) + Unpack( pths1d(:), mask = gmicro(:, :, :), field = pths(:, :, :) ) * prhodj(:, :, :) ) if ( lbudget_rr ) call Budget_store_end( tbudgets(NBUDGET_RR), 'HMLT', & - Unpack( zrrs(:), mask = gmicro(:, :, :), field = prrs(:, :, :) ) * prhodj(:, :, :) ) + Unpack( prrs1d(:), mask = gmicro(:, :, :), field = prrs(:, :, :) ) * prhodj(:, :, :) ) if ( lbudget_rh ) call Budget_store_end( tbudgets(NBUDGET_RH), 'HMLT', & - Unpack( zrhs(:), mask = gmicro(:, :, :), field = prhs(:, :, :) ) * prhodj(:, :, :) ) + Unpack( prhs1d(:), mask = gmicro(:, :, :), field = prhs(:, :, :) ) * prhodj(:, :, :) ) if ( lbudget_sv ) call Budget_store_end( tbudgets(NBUDGET_SV1 - 1 + nsv_lima_nr), 'HMLT', & - Unpack( zcrs(:), mask = gmicro(:, :, :), field = pcrs(:, :, :) ) * prhodj(:, :, :) ) + Unpack( pcrs1d(:), mask = gmicro(:, :, :), field = pcrs(:, :, :) ) * prhodj(:, :, :) ) end if END IF - +! END IF HAIL ! !------------------------------------------------------------------------------ diff --git a/src/MNH/lima_notadjust.f90 b/src/MNH/lima_notadjust.f90 index 94ea1f4fdac0f3df7143f867cdd9e28740f8a5b6..48e97a2f32c15557758f71eddfe2c2f8517c9364 100644 --- a/src/MNH/lima_notadjust.f90 +++ b/src/MNH/lima_notadjust.f90 @@ -11,7 +11,7 @@ INTERFACE ! SUBROUTINE LIMA_NOTADJUST(KMI, TPFILE, HRAD, & PTSTEP, PRHODJ, PPABSM, PPABST, PRHODREF, PEXNREF, PZZ, & - PTHT,PRT, PSVT, PTHS, PRS,PSVS, PCLDFR, PSRCS ) + PTHT,PRT, PSVT, PTHS, PRS,PSVS, PCLDFR, PICEFR, PRAINFR, PSRCS ) ! USE MODD_IO, ONLY: TFILEDATA ! @@ -38,6 +38,8 @@ REAL, DIMENSION(:,:,:), INTENT(OUT) :: PSRCS ! Second-order flux ! s'rc'/2Sigma_s2 at time t+1 ! multiplied by Lambda_3 REAL, DIMENSION(:,:,:), INTENT(OUT) :: PCLDFR ! Cloud fraction +REAL, DIMENSION(:,:,:), INTENT(INOUT) :: PICEFR ! Cloud fraction +REAL, DIMENSION(:,:,:), INTENT(INOUT) :: PRAINFR ! Cloud fraction ! ! END SUBROUTINE LIMA_NOTADJUST @@ -49,7 +51,7 @@ END MODULE MODI_LIMA_NOTADJUST ! #################################################################################### SUBROUTINE LIMA_NOTADJUST(KMI, TPFILE, HRAD, & PTSTEP, PRHODJ, PPABSM, PPABST, PRHODREF, PEXNREF, PZZ, & - PTHT,PRT, PSVT, PTHS, PRS,PSVS, PCLDFR, PSRCS ) + PTHT,PRT, PSVT, PTHS, PRS,PSVS, PCLDFR, PICEFR, PRAINFR, PSRCS ) ! #################################################################################### ! !!**** * - compute pseudo-prognostic of supersaturation according to Thouron @@ -126,6 +128,8 @@ REAL, DIMENSION(:,:,:), INTENT(OUT) :: PSRCS ! Second-order flux ! s'rc'/2Sigma_s2 at time t+1 ! multiplied by Lambda_3 REAL, DIMENSION(:,:,:), INTENT(OUT) :: PCLDFR ! Cloud fraction +REAL, DIMENSION(:,:,:), INTENT(INOUT) :: PICEFR ! Cloud fraction +REAL, DIMENSION(:,:,:), INTENT(INOUT) :: PRAINFR ! Cloud fraction ! ! !* 0.2 Declarations of local variables : @@ -447,9 +451,10 @@ GNUCT(:,:,:) = .FALSE. !GNUCT(IIB:IIE,IJB:IJE,IKB:IKE) = ZSAT(IIB:IIE,IJB:IJE,IKB:IKE)>0.0 .OR. & ! ZCCS(IIB:IIE,IJB:IJE,IKB:IKE)>0.0 !GNUCT(IIB:IIE,IJB:IJE,IKB:IKE) = ZSAT(IIB:IIE,IJB:IJE,IKB:IKE)>0.0 -GNUCT(IIB:IIE,IJB:IJE,IKB:IKE) = ZSAT(IIB:IIE,IJB:IJE,IKB:IKE)>0.0 .OR. & +GNUCT(IIB:IIE,IJB:IJE,IKB:IKE) = ZSAT(IIB:IIE,IJB:IJE,IKB:IKE)>-1.0 .AND. & + ( ZSAT(IIB:IIE,IJB:IJE,IKB:IKE)>0.0 .OR. & ! ZCCS(IIB:IIE,IJB:IJE,IKB:IKE)>1.E+05 - ZCCS(IIB:IIE,IJB:IJE,IKB:IKE)>XCTMIN(2) + ZCCS(IIB:IIE,IJB:IJE,IKB:IKE)>XCTMIN(2) ) INUCT = COUNTJV( GNUCT(:,:,:),I1(:),I2(:),I3(:)) !3D array to 1D array ! @@ -564,6 +569,23 @@ IF ( HRAD /= 'NONE' ) THEN PCLDFR(:,:,:) = ZW1(:,:,:) END IF ! +ZW1(:,:,:)=0. +IF (SIZE(PRS,4)>3) ZW1(:,:,:)=ZW1(:,:,:) + PRS(:,:,:,4) +WHERE (ZW1(:,:,:) > 1.E-15) + PICEFR(:,:,:) = 1. +ELSEWHERE + PICEFR(:,:,:) = 0. +ENDWHERE +ZW1(:,:,:)=0. +IF (SIZE(PRS,4)>2) ZW1(:,:,:)=ZW1(:,:,:) + PRS(:,:,:,3) +IF (SIZE(PRS,4)>4) ZW1(:,:,:)=ZW1(:,:,:) + PRS(:,:,:,5) +IF (SIZE(PRS,4)>5) ZW1(:,:,:)=ZW1(:,:,:) + PRS(:,:,:,6) +WHERE (ZW1(:,:,:) > 1.E-15) + PRAINFR(:,:,:) = 1. +ELSEWHERE + PRAINFR(:,:,:) = 0. +ENDWHERE +! IF ( tpfile%lopened ) THEN ZW(:,:,:)=SUM(ZNAS,4)-ZW(:,:,:) TZFIELD%CMNHNAME = 'NACT' diff --git a/src/MNH/lima_nucleation_procs.f90 b/src/MNH/lima_nucleation_procs.f90 index 122d4b3c867f2e98af5b9d6461a492df26a45e5e..b28c91cb6cabe68aaecef7a782fba5e1038cc24d 100644 --- a/src/MNH/lima_nucleation_procs.f90 +++ b/src/MNH/lima_nucleation_procs.f90 @@ -79,6 +79,7 @@ SUBROUTINE LIMA_NUCLEATION_PROCS (PTSTEP, TPFILE, PRHODJ, ! P. Wautelet 27/02/2020: add Z_TH_HINC variable (for budgets) ! P. Wautelet 02/2020: use the new data structures and subroutines for budgets ! B. Vie 03/03/2020: use DTHRAD instead of dT/dt in Smax diagnostic computation +! B. Vie 03/2022: Add option for 1-moment pristine ice !------------------------------------------------------------------------------- ! use modd_budget, only: lbu_enable, lbudget_th, lbudget_rv, lbudget_rc, lbudget_rr, & @@ -86,10 +87,11 @@ use modd_budget, only: lbu_enable, lbudget_th, lbudget_rv, lbudget_rc, lbudg NBUDGET_TH, NBUDGET_RV, NBUDGET_RC, NBUDGET_RI, NBUDGET_SV1, & tbudgets USE MODD_IO, ONLY: TFILEDATA +USE MODD_PARAMETERS, ONLY : JPHEXT, JPVEXT USE MODD_NSV, ONLY : NSV_LIMA_NC, NSV_LIMA_NR, NSV_LIMA_CCN_FREE, NSV_LIMA_CCN_ACTI, & NSV_LIMA_NI, NSV_LIMA_IFN_FREE, NSV_LIMA_IFN_NUCL, NSV_LIMA_IMM_NUCL, NSV_LIMA_HOM_HAZE USE MODD_PARAM_LIMA, ONLY : LCOLD, LNUCL, LMEYERS, LSNOW, LWARM, LACTI, LRAIN, LHHONI, & - NMOD_CCN, NMOD_IFN, NMOD_IMM, XCTMIN, XRTMIN, LSPRO + NMOD_CCN, NMOD_IFN, NMOD_IMM, XCTMIN, XRTMIN, LSPRO, NMOM_I USE MODD_TURB_n, ONLY : LSUBG_COND use mode_budget, only: Budget_store_add, Budget_store_init, Budget_store_end @@ -98,6 +100,7 @@ USE MODI_LIMA_CCN_ACTIVATION USE MODI_LIMA_CCN_HOM_FREEZING USE MODI_LIMA_MEYERS_NUCLEATION USE MODI_LIMA_PHILLIPS_IFN_NUCLEATION +USE MODE_RAIN_ICE_NUCLEATION ! !------------------------------------------------------------------------------- ! @@ -142,6 +145,7 @@ REAL, DIMENSION(:,:,:), INTENT(INOUT) :: PPRCFR ! Precipitation fraction !------------------------------------------------------------------------------- ! REAL, DIMENSION(SIZE(PT,1),SIZE(PT,2),SIZE(PT,3)) :: Z_TH_HIND, Z_RI_HIND, Z_CI_HIND, Z_TH_HINC, Z_RC_HINC, Z_CC_HINC +REAL, DIMENSION(SIZE(PT,1),SIZE(PT,2),SIZE(PT,3)) :: ZTHS, ZRIS, ZRVS, ZRHT, ZCIT, ZT ! integer :: idx INTEGER :: JL @@ -193,7 +197,7 @@ END IF ! !------------------------------------------------------------------------------- ! -IF ( LCOLD .AND. LNUCL .AND. .NOT.LMEYERS .AND. NMOD_IFN >= 1 ) THEN +IF ( LCOLD .AND. LNUCL .AND. NMOM_I>=2 .AND. .NOT.LMEYERS .AND. NMOD_IFN >= 1 ) THEN if ( lbu_enable ) then if ( lbudget_sv ) then do jl = 1, nmod_ifn @@ -257,7 +261,7 @@ END IF ! !------------------------------------------------------------------------------- ! -IF (LCOLD .AND. LNUCL .AND. LMEYERS) THEN +IF (LCOLD .AND. LNUCL .AND. NMOM_I>=2 .AND. LMEYERS) THEN CALL LIMA_MEYERS_NUCLEATION (PTSTEP, & PRHODREF, PEXNREF, PPABST, & PTHT, PRVT, PRCT, PRRT, PRIT, PRST, PRGT, & @@ -266,7 +270,7 @@ IF (LCOLD .AND. LNUCL .AND. LMEYERS) THEN Z_TH_HINC, Z_RC_HINC, Z_CC_HINC, & PICEFR ) WHERE(PICEFR(:,:,:)<1.E-10 .AND. PRIT(:,:,:)>XRTMIN(4) .AND. PCIT(:,:,:)>XCTMIN(4)) PICEFR(:,:,:)=1. -! + ! if ( lbu_enable ) then if ( lbudget_th ) call Budget_store_add( tbudgets(NBUDGET_TH), 'HIND', z_th_hind(:, :, :) * prhodj(:, :, :) / ptstep ) if ( lbudget_rv ) call Budget_store_add( tbudgets(NBUDGET_RV), 'HIND', -z_ri_hind(:, :, :) * prhodj(:, :, :) / ptstep ) @@ -293,6 +297,56 @@ END IF ! !------------------------------------------------------------------------------- ! +IF (LCOLD .AND. LNUCL .AND. NMOM_I.EQ.1) THEN + WHERE(PICEFR(:,:,:)<1.E-10 .AND. PRIT(:,:,:)>XRTMIN(4) .AND. PCIT(:,:,:)>XCTMIN(4)) PICEFR(:,:,:)=1. + ! + ZTHS=PTHT/PTSTEP + ZRVS=PRVT/PTSTEP + ZRIS=PRIT/PTSTEP + ZRHT=0. + ZCIT=PCIT + ZT=PT + CALL RAIN_ICE_NUCLEATION(1+JPHEXT, SIZE(PT,1)-JPHEXT, 1+JPHEXT, SIZE(PT,2)-JPHEXT, 1+JPVEXT, SIZE(PT,3)-JPVEXT, 6, & + PTSTEP, PTHT, PPABST, PRHODJ, PRHODREF, PRVT, PRCT, PRRT, PRIT, PRST, PRGT, & + ZCIT, PEXNREF, ZTHS, ZRVS, ZRIS, ZT, ZRHT) + ! +! Z_TH_HIND=ZTHS*PTSTEP-PTHT +! Z_RI_HIND=ZRIS*PTSTEP-PRIT +! Z_CI_HIND=ZCIT-PCIT + PCIT=ZCIT + PRIT=ZRIS*PTSTEP + PTHT=ZTHS*PTSTEP + PRVT=ZRVS*PTSTEP +! Z_TH_HINC=0. +! Z_RC_HINC=0. +! Z_CC_HINC=0. +! ! +! if ( lbu_enable ) then +! if ( lbudget_th ) call Budget_store_add( tbudgets(NBUDGET_TH), 'HIND', z_th_hind(:, :, :) * prhodj(:, :, :) / ptstep ) +! if ( lbudget_rv ) call Budget_store_add( tbudgets(NBUDGET_RV), 'HIND', -z_ri_hind(:, :, :) * prhodj(:, :, :) / ptstep ) +! if ( lbudget_ri ) call Budget_store_add( tbudgets(NBUDGET_RI), 'HIND', z_ri_hind(:, :, :) * prhodj(:, :, :) / ptstep ) +! if ( lbudget_sv ) then +! call Budget_store_add( tbudgets(NBUDGET_SV1 - 1 + nsv_lima_ni), 'HIND', z_ci_hind(:, :, :) * prhodj(:, :, :) / ptstep ) +! if (nmod_ifn > 0 ) & +! call Budget_store_add( tbudgets(NBUDGET_SV1 - 1 + nsv_lima_ifn_nucl), 'HIND', & +! z_ci_hind(:, :, :) * prhodj(:, :, :) / ptstep ) +! end if +! +! if ( lbudget_th ) call Budget_store_add( tbudgets(NBUDGET_TH), 'HINC', z_th_hinc(:, :, :) * prhodj(:, :, :) / ptstep ) +! if ( lbudget_rc ) call Budget_store_add( tbudgets(NBUDGET_RC), 'HINC', z_rc_hinc(:, :, :) * prhodj(:, :, :) / ptstep ) +! if ( lbudget_ri ) call Budget_store_add( tbudgets(NBUDGET_RI), 'HINC', -z_rc_hinc(:, :, :) * prhodj(:, :, :) / ptstep ) +! if ( lbudget_sv ) then +! call Budget_store_add( tbudgets(NBUDGET_SV1 - 1 + nsv_lima_nc), 'HINC', z_cc_hinc(:, :, :) * prhodj(:, :, :) / ptstep ) +! call Budget_store_add( tbudgets(NBUDGET_SV1 - 1 + nsv_lima_ni), 'HINC', -z_cc_hinc(:, :, :) * prhodj(:, :, :) / ptstep ) +! if (nmod_ifn > 0 ) & +! call Budget_store_add( tbudgets(NBUDGET_SV1 - 1 + nsv_lima_ifn_nucl), 'HINC', & +! -z_cc_hinc(:, :, :) * prhodj(:, :, :) / ptstep ) +! end if +! end if +END IF +! +!------------------------------------------------------------------------------- +! IF ( LCOLD .AND. LNUCL .AND. LHHONI .AND. NMOD_CCN >= 1) THEN if ( lbu_enable ) then if ( lbudget_th ) call Budget_store_init( tbudgets(NBUDGET_TH), 'HONH', PTHT(:, :, :) * prhodj(:, :, :) / ptstep ) diff --git a/src/MNH/lima_rain_accr_snow.f90 b/src/MNH/lima_rain_accr_snow.f90 index 01c31afbe3ff0152065142f33475281538a3c6ac..5ece49ac93b856337d711e5ac276a38bcb39fdfd 100644 --- a/src/MNH/lima_rain_accr_snow.f90 +++ b/src/MNH/lima_rain_accr_snow.f90 @@ -60,6 +60,7 @@ END MODULE MODI_LIMA_RAIN_ACCR_SNOW !! ------------- !! Original 15/03/2018 ! P. Wautelet 26/04/2019: replace non-standard FLOAT function by REAL function +! J. Wurtz 03/2022: new snow characteristics ! !------------------------------------------------------------------------------- ! @@ -68,7 +69,8 @@ END MODULE MODI_LIMA_RAIN_ACCR_SNOW ! USE MODD_CST, ONLY : XTT USE MODD_PARAM_LIMA, ONLY : XRTMIN, XCEXVT -USE MODD_PARAM_LIMA_COLD, ONLY : XBS, XCXS +USE MODD_PARAM_LIMA_WARM, ONLY : XBR +USE MODD_PARAM_LIMA_COLD, ONLY : XBS, XTRANS_MP_GAMMAS USE MODD_PARAM_LIMA_MIXED, ONLY : NACCLBDAS, XACCINTP1S, XACCINTP2S, & NACCLBDAR, XACCINTP1R, XACCINTP2R, & XKER_RACCSS, XKER_RACCS, XKER_SACCRG, & @@ -141,7 +143,7 @@ WHERE( GACC ) ! ! 1.3.1 select the (ZLBDAS,ZLBDAR) couplet ! - ZVEC1(:) = MAX(MIN(PLBDS(:),5.E5),5.E1) + ZVEC1(:) = MAX(MIN(PLBDS(:),5.E5*XTRANS_MP_GAMMAS),5.E1*XTRANS_MP_GAMMAS) ZVEC2(:) = PLBDR(:) ! ! 1.3.2 find the next lower indice for the ZLBDAS and for the ZLBDAR @@ -210,44 +212,28 @@ WHERE( GACC ) ! ! 1.3.4 raindrop accretion on the small sized aggregates ! -! BVIE manque PCRT ??????????????????????????????????? -! ZZW4(:) = & !! coef of RRACCS and RRACCS - ZZW4(:) = PCRT(:) & !! coef of RRACCS and RRACCS - * XFRACCSS *( PLBDS(:)**XCXS )*( PRHODREF(:)**(-XCEXVT-1.) ) & - *( XLBRACCS1/( PLBDS(:)**2 ) + & - XLBRACCS2/( PLBDS(:) * PLBDR(:) ) + & - XLBRACCS3/( PLBDR(:)**2 ) ) / PLBDR(:)**3 + ZZW4(:) = PCRT(:) * & !! coef of RRACCS and RRACCS + XFRACCSS *( PRST(:)*PLBDS(:)**XBS )*( PRHODREF(:)**(1-XCEXVT) ) & + *( XLBRACCS1/( PLBDS(:)**2 ) + & + XLBRACCS2/( PLBDS(:) * PLBDR(:) ) + & + XLBRACCS3/( PLBDR(:)**2 ) ) / PLBDR(:)**XBR -! ZRRS(:) = ZRRS(:) - ZZW1(:,4) -! ZRSS(:) = ZRSS(:) + ZZW1(:,4) -! ZTHS(:) = ZTHS(:) + ZZW1(:,4)*(ZLSFACT(:)-ZLVFACT(:)) ! f(L_f*(RRACCSS)) -! -! ZCRS(:) = MAX( ZCRS(:)-ZZW1(:,4)*(ZCRT(:)/ZRRT(:)),0.0 ) ! Lambda_r**3 ! ! 1.3.6 raindrop accretion-conversion of the large sized aggregates ! into graupeln ! - ZZW5(:) = XFSACCRG*ZZW3(:) * & ! RSACCRG - ( PLBDS(:)**(XCXS-XBS) )*( PRHODREF(:)**(-XCEXVT-1.) ) & - *( XLBSACCR1/((PLBDR(:)**2) ) + & - XLBSACCR2/( PLBDR(:) * PLBDS(:) ) + & - XLBSACCR3/( (PLBDS(:)**2)) ) - ! -! P_RR_ACC(:) = - ZZW4(:) * ZZW1(:) ! RRACCSS -! P_CR_ACC(:) = P_RR_ACC(:) * PCRT(:)/PRRT(:) ! Lambda_r**3 -! P_RS_ACC(:) = - P_RR_ACC(:) - ! -! P_RR_ACC(:) = P_RR_ACC(:) - ( ZZW2(:)-P_RS_ACC(:) ) -! P_CR_ACC(:) = P_CR_ACC(:) - ( ZZW2(:)-P_RS_ACC(:) ) * PCRT(:)/PRRT(:) ! Lambda_r**3 -! P_RS_ACC(:) = P_RS_ACC(:) - ZZW5(:) -! P_RG_ACC(:) = ( ZZW2(:)-P_RS_ACC(:) ) + ZZW5(:) - ! + ZZW5(:) = XFSACCRG * ZZW3(:) * PCRT(:) * & ! RSACCRG + ( PRST(:) )*( PRHODREF(:)**(1-XCEXVT) ) * & + ( XLBSACCR1/( PLBDR(:)**2 ) + & + XLBSACCR2/( PLBDR(:) * PLBDS(:) ) + & + XLBSACCR3/( PLBDS(:)**2 ) ) +! P_RR_ACC(:) = - ZZW4(:) * ZZW2(:) P_CR_ACC(:) = P_RR_ACC(:) * PCRT(:)/PRRT(:) P_RS_ACC(:) = ZZW4(:) * ZZW1(:) - ZZW5(:) P_RG_ACC(:) = ZZW4(:) * ( ZZW2(:) - ZZW1(:) ) + ZZW5(:) P_TH_ACC(:) = - P_RR_ACC(:) * (PLSFACT(:)-PLVFACT(:)) - ! +! END WHERE ! ! diff --git a/src/MNH/lima_rain_evaporation.f90 b/src/MNH/lima_rain_evaporation.f90 index 2970e027d0ae5d8b380a0c9348ddc7de249fe049..f4c0df7d033880a071937fc0c696bacc2899879a 100644 --- a/src/MNH/lima_rain_evaporation.f90 +++ b/src/MNH/lima_rain_evaporation.f90 @@ -10,8 +10,8 @@ INTERFACE SUBROUTINE LIMA_RAIN_EVAPORATION (PTSTEP, LDCOMPUTE, & PRHODREF, PT, PLV, PLVFACT, PEVSAT, PRVSAT, & - PRVT, PRCT, PRRT, PLBDR, & - P_TH_EVAP, P_RR_EVAP, & + PRVT, PRCT, PRRT, PCRT, PLBDR, & + P_TH_EVAP, P_RR_EVAP, P_CR_EVAP, & PEVAP3D ) ! REAL, INTENT(IN) :: PTSTEP ! Time step @@ -27,10 +27,12 @@ REAL, DIMENSION(:), INTENT(IN) :: PRVSAT ! REAL, DIMENSION(:), INTENT(IN) :: PRVT ! Water vapor m.r. at t REAL, DIMENSION(:), INTENT(IN) :: PRCT ! Cloud water m.r. at t REAL, DIMENSION(:), INTENT(IN) :: PRRT ! Rain water m.r. at t +REAL, DIMENSION(:), INTENT(IN) :: PCRT ! Rain water conc at t REAL, DIMENSION(:), INTENT(IN) :: PLBDR ! Lambda(rain) ! REAL, DIMENSION(:), INTENT(OUT) :: P_TH_EVAP REAL, DIMENSION(:), INTENT(OUT) :: P_RR_EVAP +REAL, DIMENSION(:), INTENT(OUT) :: P_CR_EVAP ! REAL, DIMENSION(:), INTENT(INOUT) :: PEVAP3D ! Rain evap profile ! @@ -40,8 +42,8 @@ END MODULE MODI_LIMA_RAIN_EVAPORATION ! ############################################################################### SUBROUTINE LIMA_RAIN_EVAPORATION (PTSTEP, LDCOMPUTE, & PRHODREF, PT, PLV, PLVFACT, PEVSAT, PRVSAT, & - PRVT, PRCT, PRRT, PLBDR, & - P_TH_EVAP, P_RR_EVAP, & + PRVT, PRCT, PRRT, PCRT, PLBDR, & + P_TH_EVAP, P_RR_EVAP, P_CR_EVAP, & PEVAP3D ) ! ############################################################################### ! @@ -63,14 +65,15 @@ END MODULE MODI_LIMA_RAIN_EVAPORATION !! ------------- !! Original 15/03/2018 !! +! Delbeke/Vie 03/2022 : KHKO option !------------------------------------------------------------------------------- ! !* 0. DECLARATIONS ! ------------ ! -USE MODD_CST, ONLY : XRHOLW, XRV -USE MODD_PARAM_LIMA, ONLY : XRTMIN -USE MODD_PARAM_LIMA_WARM, ONLY : X0EVAR, XEX0EVAR, X1EVAR, XEX2EVAR, XEX1EVAR, XTHCO, XDIVA +USE MODD_CST, ONLY : XRHOLW, XRV, XPI +USE MODD_PARAM_LIMA, ONLY : XRTMIN, XCTMIN, LKHKO +USE MODD_PARAM_LIMA_WARM, ONLY : X0EVAR, XEX0EVAR, X1EVAR, XEX2EVAR, XEX1EVAR, XTHCO, XDIVA, XCEVAP ! IMPLICIT NONE ! @@ -89,10 +92,12 @@ REAL, DIMENSION(:), INTENT(IN) :: PRVSAT ! REAL, DIMENSION(:), INTENT(IN) :: PRVT ! Water vapor m.r. at t REAL, DIMENSION(:), INTENT(IN) :: PRCT ! Cloud water m.r. at t REAL, DIMENSION(:), INTENT(IN) :: PRRT ! Rain water m.r. at t -REAL, DIMENSION(:), INTENT(IN) :: PLBDR ! Lambda(rain) +REAL, DIMENSION(:), INTENT(IN) :: PCRT ! Rain water conc at t +REAL, DIMENSION(:), INTENT(IN) :: PLBDR ! Lambda(rain) ! REAL, DIMENSION(:), INTENT(OUT) :: P_TH_EVAP REAL, DIMENSION(:), INTENT(OUT) :: P_RR_EVAP +REAL, DIMENSION(:), INTENT(OUT) :: P_CR_EVAP ! REAL, DIMENSION(:), INTENT(INOUT) :: PEVAP3D ! Rain evap profile ! @@ -110,40 +115,57 @@ REAL, DIMENSION(SIZE(PRHODREF)) :: ZZW1, ZZW2 ! P_TH_EVAP(:) = 0. P_RR_EVAP(:) = 0. +P_CR_EVAP(:) = 0. +! +ZZW1(:) = 0. +ZZW2(:) = 0. ! GEVAP(:) = .FALSE. GEVAP(:) = LDCOMPUTE(:) .AND. & PRRT(:)>XRTMIN(3) .AND. & - PRVT(:)<PRVSAT(:) -! -WHERE ( GEVAP ) -! -!------------------------------------------------------------------------------- + PRVT(:)<PRVSAT(:) .AND. & + PCRT(:)>XCTMIN(3) ! ! -!* 2. compute the evaporation of rain drops -! ---------------------------------------- ! +IF (LKHKO) THEN + + ZZW1(:) = MAX((1.0 - PRVT(:)/ZZW1(:)),0.0) ! Subsaturation + + ZZW2(:) = 1. / ( XRHOLW*((((PLV(:)/PT(:))**2)/(XTHCO*XRV)) + & ! G + (XRV*PT(:))/(XDIVA*PEVSAT(:)))) + + ZZW2(:) = 3.0 * XCEVAP * ZZW2(:) * (4.*XPI*XRHOLW/(3.))**(2./3.) * & + (PRRT(:))**(1./3.) * (PCRT(:))**(2./3.) * ZZW1(:) + P_RR_EVAP(:) = - ZZW2(:) + + ZZW2(:) = ZZW2(:) * PCRT(:)/PRRT(:) + P_CR_EVAP = - ZZW2(:) + +ELSE + + WHERE ( GEVAP ) ! - ZZW1(:) = MAX((1.0 - PRVT(:)/PRVSAT(:)),0.0) ! Subsaturation + ZZW1(:) = MAX((1.0 - PRVT(:)/PRVSAT(:)),0.0) ! Subsaturation ! ! Compute the function G(T) ! - ZZW2(:) = 1. / ( XRHOLW*((((PLV(:)/PT(:))**2)/(XTHCO*XRV)) + & ! G - (XRV*PT(:))/(XDIVA*PEVSAT(:)))) + ZZW2(:) = 1. / ( XRHOLW*((((PLV(:)/PT(:))**2)/(XTHCO*XRV)) + & ! G + (XRV*PT(:))/(XDIVA*PEVSAT(:)))) ! ! Compute the evaporation tendency ! - ZZW2(:) = ZZW2(:) * ZZW1(:) * PRRT(:) * & - (X0EVAR * PLBDR(:)**XEX0EVAR + X1EVAR * PRHODREF(:)**XEX2EVAR * PLBDR(:)**XEX1EVAR) - ZZW2(:) = MAX(ZZW2(:),0.0) + ZZW2(:) = ZZW2(:) * ZZW1(:) * PRRT(:) * & + (X0EVAR * PLBDR(:)**XEX0EVAR + X1EVAR * PRHODREF(:)**XEX2EVAR * PLBDR(:)**XEX1EVAR) + ZZW2(:) = MAX(ZZW2(:),0.0) ! - P_RR_EVAP(:) = - ZZW2(:) + P_RR_EVAP(:) = - ZZW2(:) ! P_TH_EVAP(:) = P_RR_EVAP(:) * PLVFACT(:) ! PEVAP3D(:) = - P_RR_EVAP(:) ! -END WHERE + END WHERE ! +END IF !----------------------------------------------------------------------------- ! END SUBROUTINE LIMA_RAIN_EVAPORATION diff --git a/src/MNH/lima_raindrop_shattering_freezing.f90 b/src/MNH/lima_raindrop_shattering_freezing.f90 new file mode 100644 index 0000000000000000000000000000000000000000..dc7c14066214dfb589ad8428291dbc1c9262706d --- /dev/null +++ b/src/MNH/lima_raindrop_shattering_freezing.f90 @@ -0,0 +1,159 @@ +!MNH_LIC Copyright 2018-2021 CNRS, Meteo-France and Universite Paul Sabatier +!MNH_LIC This is part of the Meso-NH software governed by the CeCILL-C licence +!MNH_LIC version 1. See LICENSE, CeCILL-C_V1-en.txt and CeCILL-C_V1-fr.txt +!MNH_LIC for details. version 1. +!------------------------------------------------------------------------------- +! ############################################# + MODULE MODI_LIMA_RAINDROP_SHATTERING_FREEZING +! ############################################# +! +INTERFACE + SUBROUTINE LIMA_RAINDROP_SHATTERING_FREEZING (LDCOMPUTE, & + PRHODREF, & + PRRT, PCRT, PRIT, PCIT, PRGT, & + PLBDR, & + P_RI_RDSF, P_CI_RDSF ) +! +LOGICAL, DIMENSION(:),INTENT(IN) :: LDCOMPUTE +! +REAL, DIMENSION(:), INTENT(IN) :: PRHODREF +! +REAL, DIMENSION(:), INTENT(IN) :: PRRT +REAL, DIMENSION(:), INTENT(IN) :: PCRT +REAL, DIMENSION(:), INTENT(IN) :: PRIT +REAL, DIMENSION(:), INTENT(IN) :: PCIT +REAL, DIMENSION(:), INTENT(IN) :: PRGT +REAL, DIMENSION(:), INTENT(IN) :: PLBDR +! +REAL, DIMENSION(:), INTENT(OUT) :: P_RI_RDSF +REAL, DIMENSION(:), INTENT(OUT) :: P_CI_RDSF +! +END SUBROUTINE LIMA_RAINDROP_SHATTERING_FREEZING +END INTERFACE +END MODULE MODI_LIMA_RAINDROP_SHATTERING_FREEZING +! +! ####################################################################### + SUBROUTINE LIMA_RAINDROP_SHATTERING_FREEZING (LDCOMPUTE, & + PRHODREF, & + PRRT, PCRT, PRIT, PCIT, PRGT, & + PLBDR, & + P_RI_RDSF, P_CI_RDSF ) +! ####################################################################### +! +!! PURPOSE +!! ------- +!! Compute the raindrop shattering when freezing (secondary ice production process) +!! +!! AUTHOR +!! ------ +!! J.-P. Pinty * Laboratoire d'Aerologie* +!! +!! MODIFICATIONS +!! ------------- +!! Original 04/2022 duplicate from original for LIMA_SPLIT +! +!------------------------------------------------------------------------------- +! +!* 0. DECLARATIONS +! ------------ +! +USE MODD_PARAM_LIMA, ONLY : XRTMIN, XCTMIN, LRDSF, XCEXVT +USE MODD_PARAM_LIMA_COLD, ONLY : XMNU0 +USE MODD_PARAM_LIMA_WARM, ONLY : XDR +USE MODD_PARAM_LIMA_MIXED, ONLY : NGAMINC, XGAMINC_RDSF_R, & + XFACTOR_RDSF_NI, XMOMGR_RDSF, XRDSFINTP1_R, XRDSFINTP_R +! +IMPLICIT NONE +! +!* 0.1 Declarations of dummy arguments : +! +! +LOGICAL, DIMENSION(:),INTENT(IN) :: LDCOMPUTE +! +REAL, DIMENSION(:), INTENT(IN) :: PRHODREF +! +REAL, DIMENSION(:), INTENT(IN) :: PRRT +REAL, DIMENSION(:), INTENT(IN) :: PCRT +REAL, DIMENSION(:), INTENT(IN) :: PRIT +REAL, DIMENSION(:), INTENT(IN) :: PCIT +REAL, DIMENSION(:), INTENT(IN) :: PRGT +REAL, DIMENSION(:), INTENT(IN) :: PLBDR +! +REAL, DIMENSION(:), INTENT(OUT) :: P_RI_RDSF +REAL, DIMENSION(:), INTENT(OUT) :: P_CI_RDSF +! +! +!* 0.2 Declarations of local variables : +! +LOGICAL, DIMENSION(SIZE(PRRT)) :: GRDSF ! Test where to compute collision process +INTEGER :: IRDSF +REAL, DIMENSION(:), ALLOCATABLE :: ZVEC1_R ! Work vectors for rain +REAL, DIMENSION(:), ALLOCATABLE :: ZVEC1_R1 ! Work vectors for rain +REAL, DIMENSION(:), ALLOCATABLE :: ZVEC2_R ! Work vectors for rain +INTEGER, DIMENSION(:), ALLOCATABLE :: IVEC2_R ! Rain indice vector +REAL, DIMENSION(SIZE(PRRT)) :: ZINTG_RAIN ! incomplete gamma function for rain +REAL, DIMENSION(SIZE(PRRT)) :: ZNI_RDSF,ZRI_RDSF ! RDSF rates +! +!------------------------------------------------------------------------------- +P_RI_RDSF(:)=0. +P_CI_RDSF(:)=0. +! +GRDSF(:) = LRDSF .AND. LDCOMPUTE .AND. (PRIT(:)>XRTMIN(4)) .AND. (PRRT(:)>XRTMIN(3)) & + .AND. (PCIT(:)>XCTMIN(4)) .AND. (PCRT(:)>XCTMIN(3)) & + .AND. (PRGT(:)>XRTMIN(6)) + +IRDSF = COUNT( GRDSF(:) ) +! +IF (IRDSF > 0) THEN +! + ALLOCATE(ZVEC1_R(IRDSF)) + ALLOCATE(ZVEC1_R1(IRDSF)) + ALLOCATE(ZVEC2_R(IRDSF)) + ALLOCATE(IVEC2_R(IRDSF)) +! +!* 2.2.1 select the ZLBDAR +! + ZVEC1_R(:) = PACK( PLBDR(:),MASK=GRDSF(:) ) +! +!* 2.2.2 find the next lower indice for the ZLBDAR in the +! geometrical set of Lbda_r used to tabulate some moments of the +! incomplete gamma function, for the lower boundary (0.1 mm) +! + ZVEC2_R(1:IRDSF) = MAX( 1.00001, MIN( FLOAT(NGAMINC)-0.00001,XRDSFINTP_R & + * LOG( ZVEC1_R(1:IRDSF) ) + XRDSFINTP1_R ) ) + IVEC2_R(1:IRDSF) = INT( ZVEC2_R(1:IRDSF) ) + ZVEC2_R(1:IRDSF) = ZVEC2_R(1:IRDSF) - FLOAT( IVEC2_R(1:IRDSF) ) +! +!* 2.2.3 perform the linear interpolation of the +! normalized "2+XDR"-moment of the incomplete gamma function +! + ZVEC1_R1(1:IRDSF) = XGAMINC_RDSF_R(IVEC2_R(1:IRDSF)+1) * ZVEC2_R(1:IRDSF) & + - XGAMINC_RDSF_R(IVEC2_R(1:IRDSF)) * (ZVEC2_R(1:IRDSF) - 1.0) +! +! From 0.1 mm to infinity we need + ZVEC1_R1(1:IRDSF) = XMOMGR_RDSF * (1.0 - ZVEC1_R1(1:IRDSF)) +! + ZINTG_RAIN(:) = UNPACK ( VECTOR=ZVEC1_R1(:),MASK=GRDSF,FIELD=0.0 ) +! +!* 2.2.4 To compute final "RDSF" contributions +! + ZNI_RDSF(:) = (XFACTOR_RDSF_NI / (PRHODREF(:)**(XCEXVT-1.0))) * ( & + PCIT(:) * PCRT(:) * ZINTG_RAIN(:) * PLBDR(:)**(-(XDR+6.0)) ) +! + P_CI_RDSF(:) = MAX(ZNI_RDSF(:),0.) +! +! The value of rg removed by RDSF is determined by the mean mass of pristine ice + ZRI_RDSF(:) = MAX( ZNI_RDSF(:)*XMNU0,XRTMIN(5) ) +! + P_RI_RDSF(:) = ZRI_RDSF(:) +! + DEALLOCATE(ZVEC1_R) + DEALLOCATE(ZVEC1_R1) + DEALLOCATE(ZVEC2_R) + DEALLOCATE(IVEC2_R) + ! +ENDIF +! +!------------------------------------------------------------------------------- +! +END SUBROUTINE LIMA_RAINDROP_SHATTERING_FREEZING diff --git a/src/MNH/lima_sedimentation.f90 b/src/MNH/lima_sedimentation.f90 index 365ae0f23362e17a84e8f9ab1682d8dc165f38dd..cd90504a16afa3c292a32916c8014c6c856d3918 100644 --- a/src/MNH/lima_sedimentation.f90 +++ b/src/MNH/lima_sedimentation.f90 @@ -66,6 +66,7 @@ END MODULE MODI_LIMA_SEDIMENTATION ! P. Wautelet 26/04/2019: replace non-standard FLOAT function by REAL function ! P. Wautelet 28/05/2019: move COUNTJV function to tools.f90 ! B. Vie 03/2020: disable temperature change of droplets by air temperature +! J. Wurtz 03/2022: new snow characteristics !------------------------------------------------------------------------------- ! !* 0. DECLARATIONS @@ -73,10 +74,11 @@ END MODULE MODI_LIMA_SEDIMENTATION ! USE MODD_CST, ONLY: XRHOLW, XCL, XCI USE MODD_PARAMETERS, ONLY: JPHEXT, JPVEXT -USE MODD_PARAM_LIMA, ONLY: XCEXVT, XRTMIN, XCTMIN, NSPLITSED, & - XLB, XLBEX, XD, XFSEDR, XFSEDC, & - XALPHAC, XNUC -USE MODD_PARAM_LIMA_COLD, ONLY: XLBEXI, XLBI, XDI +USE MODD_PARAM_LIMA, ONLY: XCEXVT, XRTMIN, XCTMIN, NSPLITSED, & + XLB, XLBEX, XD, XFSEDR, XFSEDC, & + XALPHAC, XNUC, XALPHAS, XNUS, LSNOW_T +USE MODD_PARAM_LIMA_COLD, ONLY: XLBEXI, XLBI, XDI, XLBDAS_MAX, XBS, XEXSEDS, & + XLBDAS_MIN, XTRANS_MP_GAMMAS, XFVELOS use mode_tools, only: Countjv @@ -183,11 +185,24 @@ DO JN = 1 , NSPLITSED(KID) IF (KMOMENTS==2) ZCS(JL) = PCS(I1(JL),I2(JL),I3(JL)) END DO ! - IF (KMOMENTS==1) ZLBDA(:) = XLB(KID) * ( ZRHODREF(:) * ZRS(:) )**XLBEX(KID) - IF (KMOMENTS==2) ZLBDA(:) = ( XLB(KID)*ZCS(:) / ZRS(:) )**XLBEX(KID) + IF (KID == 5 .AND. LSNOW_T) THEN + ZLBDA(:) = 1.E10 + WHERE(ZT(:)>263.15 .AND. ZRS(:)>XRTMIN(5)) + ZLBDA(:) = MAX(MIN(XLBDAS_MAX, 10**(14.554-0.0423*ZT(:))),XLBDAS_MIN) + END WHERE + WHERE(ZT(:)<=263.15 .AND. ZRS(:)>XRTMIN(5)) + ZLBDA(:) = MAX(MIN(XLBDAS_MAX, 10**(6.226-0.0106*ZT(:))),XLBDAS_MIN) + END WHERE + ZLBDA(:) = ZLBDA(:)*XTRANS_MP_GAMMAS + ZZW(:) = XFSEDR(KID) * ZRHODREF(:)**(1.-XCEXVT)*ZRS(:)* & + (1 + (XFVELOS/ZLBDA(:))**XALPHAS)**(-XNUS-(XD(KID)+XBS)/XALPHAS) * ZLBDA(:)**(-XD(KID)) + ELSE + IF (KMOMENTS==1) ZLBDA(:) = XLB(KID) * ( ZRHODREF(:) * ZRS(:) )**XLBEX(KID) + IF (KMOMENTS==2) ZLBDA(:) = ( XLB(KID)*ZCS(:) / ZRS(:) )**XLBEX(KID) + ZZY(:) = ZRHODREF(:)**(-XCEXVT) * ZLBDA(:)**(-XD(KID)) + ZZW(:) = XFSEDR(KID) * ZRS(:) * ZZY(:) * ZRHODREF(:) + END IF ! Wurtz ! - ZZY(:) = ZRHODREF(:)**(-XCEXVT) * ZLBDA(:)**(-XD(KID)) - ZZW(:) = XFSEDR(KID) * ZRS(:) * ZZY(:) * ZRHODREF(:) IF (KMOMENTS==2) ZZX(:) = XFSEDC(KID) * ZCS(:) * ZZY(:) * ZRHODREF(:) IF (KID==2) THEN diff --git a/src/MNH/lima_snow_deposition.f90 b/src/MNH/lima_snow_deposition.f90 index 697f9ee74f5f9101579f9724421e76ee6f93d614..5a6ec35cae5f6ad959acebd6acd776277c2d067a 100644 --- a/src/MNH/lima_snow_deposition.f90 +++ b/src/MNH/lima_snow_deposition.f90 @@ -63,20 +63,22 @@ SUBROUTINE LIMA_SNOW_DEPOSITION (LDCOMPUTE, & !! ------------- !! Original 15/03/2018 !! +! J. Wurtz 03/2022: new snow characteristics +! B. Vie 03/2022: Add option for 1-moment pristine ice !------------------------------------------------------------------------------- ! !* 0. DECLARATIONS ! ------------ ! -USE MODD_PARAM_LIMA, ONLY : XRTMIN, XCTMIN, XALPHAI, XALPHAS, XNUI, XNUS -USE MODD_PARAM_LIMA_COLD, ONLY : XCXS, XCCS, & +USE MODD_PARAM_LIMA, ONLY : XRTMIN, XCTMIN, XALPHAI, XALPHAS, XNUI, XNUS, NMOM_I +USE MODD_PARAM_LIMA_COLD, ONLY : XNS,XBS, & XLBDAS_MAX, XDSCNVI_LIM, XLBDASCNVI_MAX, & XC0DEPSI, XC1DEPSI, XR0DEPSI, XR1DEPSI, & XSCFAC, X1DEPS, X0DEPS, XEX1DEPS, XEX0DEPS, & XDICNVS_LIM, XLBDAICNVS_LIM, & XC0DEPIS, XC1DEPIS, XR0DEPIS, XR1DEPIS, & XCOLEXIS, XAGGS_CLARGE1, XAGGS_CLARGE2, & - XAGGS_RLARGE1, XAGGS_RLARGE2 + XAGGS_RLARGE1, XAGGS_RLARGE2, XFVELOS ! IMPLICIT NONE @@ -113,51 +115,64 @@ P_CI_CNVI(:) = 0. P_TH_DEPS(:) = 0. P_RS_DEPS(:) = 0. ! -! Physical limitations -! -! ! Looking for regions where computations are necessary -! GMICRO(:) = LDCOMPUTE(:) .AND. PRST(:)>XRTMIN(5) ! +IF (NMOM_I.EQ.1) THEN + WHERE( GMICRO ) ! -WHERE( GMICRO ) +! Deposition of water vapor on r_s: RVDEPS +! + ZZW(:) = 0.0 + WHERE ( (PRST(:)>XRTMIN(5)) ) + ZZW(:) = PRST(:) * PSSI(:) / PAI(:) * & + ( X0DEPS*PLBDS(:)**XEX0DEPS + & + X1DEPS*PLBDS(:)**(XEX1DEPS+XBS)*PCJ(:) * & + (1+0.5*(XFVELOS/PLBDS(:))**XALPHAS)**(-XNUS+XEX1DEPS/XALPHAS) ) + ZZW(:) = ZZW(:)*(0.5+SIGN(0.5,ZZW(:))) - ABS(ZZW(:))*(0.5-SIGN(0.5,ZZW(:))) + END WHERE + P_RS_DEPS(:) = ZZW(:) + END WHERE +ELSE + WHERE( GMICRO ) ! !* 2.1 Conversion of snow to r_i: RSCNVI ! ---------------------------------------- ! ! - ZZW2(:) = 0.0 - ZZW(:) = 0.0 - WHERE ( PLBDS(:)<XLBDASCNVI_MAX .AND. (PRST(:)>XRTMIN(5)) & - .AND. (PSSI(:)<0.0) ) - ZZW(:) = (PLBDS(:)*XDSCNVI_LIM)**(XALPHAS) - ZZX(:) = ( -PSSI(:)/PAI(:) ) * (XCCS*PLBDS(:)**XCXS) * (ZZW(:)**XNUS) * EXP(-ZZW(:)) + ZZW2(:) = 0.0 + ZZW(:) = 0.0 + WHERE ( PLBDS(:)<XLBDASCNVI_MAX .AND. (PRST(:)>XRTMIN(5)) & + .AND. (PSSI(:)<0.0) ) + ZZW(:) = (PLBDS(:)*XDSCNVI_LIM)**(XALPHAS) + ZZX(:) = ( -PSSI(:)/PAI(:) ) * (XNS*PRST(:)*PLBDS(:)**XBS) * (ZZW(:)**XNUS) * EXP(-ZZW(:)) ! - ZZW(:) = ( XR0DEPSI+XR1DEPSI*PCJ(:) )*ZZX(:) + ZZW(:) = ( XR0DEPSI+XR1DEPSI*PCJ(:) )*ZZX(:) ! - ZZW2(:) = ZZW(:)*( XC0DEPSI+XC1DEPSI*PCJ(:) )/( XR0DEPSI+XR1DEPSI*PCJ(:) ) - END WHERE + ZZW2(:)= ( XC0DEPSI+XC1DEPSI*PCJ(:) )*ZZX(:) + END WHERE ! - P_RI_CNVI(:) = ZZW(:) - P_CI_CNVI(:) = ZZW2(:) + P_RI_CNVI(:) = ZZW(:) + P_CI_CNVI(:) = ZZW2(:) ! ! !* 2.2 Deposition of water vapor on r_s: RVDEPS ! ----------------------------------------------- ! ! - ZZW(:) = 0.0 - WHERE ( (PRST(:)>XRTMIN(5)) ) - ZZW(:) = ( PSSI(:)/(PAI(:)) ) * & - ( X0DEPS*PLBDS(:)**XEX0DEPS + X1DEPS*PCJ(:)*PLBDS(:)**XEX1DEPS ) - ZZW(:) = ZZW(:)*(0.5+SIGN(0.5,ZZW(:))) - ABS(ZZW(:))*(0.5-SIGN(0.5,ZZW(:))) - END WHERE + ZZW(:) = 0.0 + WHERE ( (PRST(:)>XRTMIN(5)) ) + ZZW(:) = ( PRST(:)*PSSI(:)/(PAI(:)) ) * & + ( X0DEPS*PLBDS(:)**XEX0DEPS + & + ( X1DEPS*PCJ(:)*(PLBDS(:))**(XBS+XEX1DEPS) * & + (1+0.5*(XFVELOS/PLBDS(:))**XALPHAS)**(-XNUS+XEX1DEPS/XALPHAS)) ) + ZZW(:) = ZZW(:)*(0.5+SIGN(0.5,ZZW(:))) - ABS(ZZW(:))*(0.5-SIGN(0.5,ZZW(:))) + END WHERE ! - P_RS_DEPS(:) = ZZW(:) + P_RS_DEPS(:) = ZZW(:) !!$ P_TH_DEPS(:) = P_RS_DEPS(:) * PLSFACT(:) ! -END WHERE -! + END WHERE +END IF ! END SUBROUTINE LIMA_SNOW_DEPOSITION diff --git a/src/MNH/lima_tendencies.f90 b/src/MNH/lima_tendencies.f90 index bd98d503c551fc74862ea85aeb1a80795beea2ce..938657e146f95a7a64e0b83bcedec5fdd5a5f3f5 100644 --- a/src/MNH/lima_tendencies.f90 +++ b/src/MNH/lima_tendencies.f90 @@ -16,7 +16,7 @@ MODULE MODI_LIMA_TENDENCIES P_RC_AUTO, P_CC_AUTO, P_CR_AUTO, & P_RC_ACCR, P_CC_ACCR, & P_CR_SCBU, & - P_TH_EVAP, P_RR_EVAP, & + P_TH_EVAP, P_RR_EVAP, P_CR_EVAP, & P_RI_CNVI, P_CI_CNVI, & P_TH_DEPS, P_RS_DEPS, & P_TH_DEPI, P_RI_DEPI, & @@ -29,6 +29,8 @@ MODULE MODI_LIMA_TENDENCIES P_TH_ACC, P_RR_ACC, P_CR_ACC, P_RS_ACC, P_RG_ACC, & P_RS_CMEL, & P_TH_CFRZ, P_RR_CFRZ, P_CR_CFRZ, P_RI_CFRZ, P_CI_CFRZ, & + P_RI_CIBU, P_CI_CIBU, & + P_RI_RDSF, P_CI_RDSF, & P_TH_WETG, P_RC_WETG, P_CC_WETG, P_RR_WETG, P_CR_WETG, & P_RI_WETG, P_CI_WETG, P_RS_WETG, P_RG_WETG, P_RH_WETG, & P_TH_DRYG, P_RC_DRYG, P_CC_DRYG, P_RR_DRYG, P_CR_DRYG, & @@ -80,7 +82,8 @@ REAL, DIMENSION(:), INTENT(INOUT) :: P_CC_ACCR ! accretion of droplets by rain REAL, DIMENSION(:), INTENT(INOUT) :: P_CR_SCBU ! self collectio break up of drops (SCBU) : Nr ! REAL, DIMENSION(:), INTENT(INOUT) :: P_TH_EVAP -REAL, DIMENSION(:), INTENT(INOUT) :: P_RR_EVAP ! evaporation of rain drops (EVAP) : rr, rv=-rr +REAL, DIMENSION(:), INTENT(INOUT) :: P_RR_EVAP +REAL, DIMENSION(:), INTENT(INOUT) :: P_CR_EVAP ! evaporation of rain drops (EVAP) : rr, Nr, rv=-rr ! REAL, DIMENSION(:), INTENT(INOUT) :: P_RI_CNVI REAL, DIMENSION(:), INTENT(INOUT) :: P_CI_CNVI ! conversion snow -> ice (CNVI) : ri, Ni, rs=-ri @@ -127,6 +130,12 @@ REAL, DIMENSION(:), INTENT(INOUT) :: P_CR_CFRZ REAL, DIMENSION(:), INTENT(INOUT) :: P_RI_CFRZ REAL, DIMENSION(:), INTENT(INOUT) :: P_CI_CFRZ ! rain freezing (CFRZ) : rr, Nr, ri, Ni, rg=-rr-ri, th ! +REAL, DIMENSION(:), INTENT(INOUT) :: P_RI_CIBU +REAL, DIMENSION(:), INTENT(INOUT) :: P_CI_CIBU ! collisional ice break-up (CIBU) : ri, Ni, rs=-ri +! +REAL, DIMENSION(:), INTENT(INOUT) :: P_RI_RDSF +REAL, DIMENSION(:), INTENT(INOUT) :: P_CI_RDSF ! rain drops freezing shattering (RDSF) : ri, Ni, rg=-ri +! REAL, DIMENSION(:), INTENT(INOUT) :: P_TH_WETG REAL, DIMENSION(:), INTENT(INOUT) :: P_RC_WETG REAL, DIMENSION(:), INTENT(INOUT) :: P_CC_WETG @@ -189,7 +198,7 @@ SUBROUTINE LIMA_TENDENCIES (PTSTEP, LDCOMPUTE, P_RC_AUTO, P_CC_AUTO, P_CR_AUTO, & P_RC_ACCR, P_CC_ACCR, & P_CR_SCBU, & - P_TH_EVAP, P_RR_EVAP, & + P_TH_EVAP, P_RR_EVAP, P_CR_EVAP, & P_RI_CNVI, P_CI_CNVI, & P_TH_DEPS, P_RS_DEPS, & P_TH_DEPI, P_RI_DEPI, & @@ -202,6 +211,8 @@ SUBROUTINE LIMA_TENDENCIES (PTSTEP, LDCOMPUTE, P_TH_ACC, P_RR_ACC, P_CR_ACC, P_RS_ACC, P_RG_ACC, & P_RS_CMEL, & P_TH_CFRZ, P_RR_CFRZ, P_CR_CFRZ, P_RI_CFRZ, P_CI_CFRZ, & + P_RI_CIBU, P_CI_CIBU, & + P_RI_RDSF, P_CI_RDSF, & P_TH_WETG, P_RC_WETG, P_CC_WETG, P_RR_WETG, P_CR_WETG, & P_RI_WETG, P_CI_WETG, P_RS_WETG, P_RG_WETG, P_RH_WETG, & P_TH_DRYG, P_RC_DRYG, P_CC_DRYG, P_RR_DRYG, P_CR_DRYG, & @@ -231,6 +242,9 @@ SUBROUTINE LIMA_TENDENCIES (PTSTEP, LDCOMPUTE, !! ------------- !! Original 15/03/2018 !! +! Delbeke/Vie 03/2022 : KHKO option +! J. Wurtz 03/2022 : new snow characteristics +! B. Vie 03/2022: Add option for 1-moment pristine ice !------------------------------------------------------------------------------- ! !* 0. DECLARATIONS @@ -238,11 +252,12 @@ SUBROUTINE LIMA_TENDENCIES (PTSTEP, LDCOMPUTE, ! USE MODD_CST, ONLY : XP00, XRD, XRV, XMD, XMV, XCPD, XCPV, XCL, XCI, XLVTT, XLSTT, XTT, & XALPW, XBETAW, XGAMW, XALPI, XBETAI, XGAMI -USE MODD_PARAM_LIMA, ONLY : XRTMIN, XCTMIN, & - LCOLD, LNUCL, LSNOW, LHAIL, LWARM, LACTI, LRAIN +USE MODD_PARAM_LIMA, ONLY : XRTMIN, XCTMIN, XNUS, LCIBU, LRDSF, & + LCOLD, LNUCL, LSNOW, LHAIL, LWARM, LACTI, LRAIN, LKHKO, LSNOW_T, NMOM_I USE MODD_PARAM_LIMA_WARM, ONLY : XLBC, XLBEXC, XLBR, XLBEXR USE MODD_PARAM_LIMA_MIXED, ONLY : XLBG, XLBEXG, XLBH, XLBEXH, XLBDAG_MAX -USE MODD_PARAM_LIMA_COLD, ONLY : XSCFAC, XLBI, XLBEXI, XLBS, XLBEXS, XLBDAS_MAX +USE MODD_PARAM_LIMA_COLD, ONLY : XSCFAC, XLBI, XLBEXI, XLBS, XLBEXS, XLBDAS_MAX, XTRANS_MP_GAMMAS, & + XFVELOS, XLBDAS_MIN ! USE MODI_LIMA_DROPLETS_HOM_FREEZING USE MODI_LIMA_DROPLETS_SELF_COLLECTION @@ -258,8 +273,12 @@ USE MODI_LIMA_DROPLETS_RIMING_SNOW USE MODI_LIMA_RAIN_ACCR_SNOW USE MODI_LIMA_CONVERSION_MELTING_SNOW USE MODI_LIMA_RAIN_FREEZING +USE MODI_LIMA_COLLISIONAL_ICE_BREAKUP +USE MODI_LIMA_RAINDROP_SHATTERING_FREEZING USE MODI_LIMA_GRAUPEL ! +USE MODI_LIMA_BERGERON +! IMPLICIT NONE ! !* 0.1 Declarations of dummy arguments : @@ -300,7 +319,8 @@ REAL, DIMENSION(:), INTENT(INOUT) :: P_CC_ACCR ! accretion of droplets by rain REAL, DIMENSION(:), INTENT(INOUT) :: P_CR_SCBU ! self collectio break up of drops (SCBU) : Nr ! REAL, DIMENSION(:), INTENT(INOUT) :: P_TH_EVAP -REAL, DIMENSION(:), INTENT(INOUT) :: P_RR_EVAP ! evaporation of rain drops (EVAP) : rr, rv=-rr +REAL, DIMENSION(:), INTENT(INOUT) :: P_RR_EVAP +REAL, DIMENSION(:), INTENT(INOUT) :: P_CR_EVAP ! evaporation of rain drops (EVAP) : rr, Nr, rv=-rr ! REAL, DIMENSION(:), INTENT(INOUT) :: P_RI_CNVI REAL, DIMENSION(:), INTENT(INOUT) :: P_CI_CNVI ! conversion snow -> ice (CNVI) : ri, Ni, rs=-ri @@ -347,6 +367,12 @@ REAL, DIMENSION(:), INTENT(INOUT) :: P_CR_CFRZ REAL, DIMENSION(:), INTENT(INOUT) :: P_RI_CFRZ REAL, DIMENSION(:), INTENT(INOUT) :: P_CI_CFRZ ! rain freezing (CFRZ) : rr, Nr, ri, Ni, rg=-rr-ri, th ! +REAL, DIMENSION(:), INTENT(INOUT) :: P_RI_CIBU +REAL, DIMENSION(:), INTENT(INOUT) :: P_CI_CIBU ! collisional ice break-up (CIBU) : ri, Ni, rs=-ri +! +REAL, DIMENSION(:), INTENT(INOUT) :: P_RI_RDSF +REAL, DIMENSION(:), INTENT(INOUT) :: P_CI_RDSF ! rain drops freezing shattering (RDSF) : ri, Ni, rg=-ri +! REAL, DIMENSION(:), INTENT(INOUT) :: P_TH_WETG REAL, DIMENSION(:), INTENT(INOUT) :: P_RC_WETG REAL, DIMENSION(:), INTENT(INOUT) :: P_CC_WETG @@ -502,9 +528,21 @@ WHERE (PRIT(:)>XRTMIN(4) .AND. PCIT(:)>XCTMIN(4) .AND. LDCOMPUTE(:)) ZLBDI(:) = ( XLBI*PCIT(:) / PRIT(:) )**XLBEXI END WHERE ZLBDS(:) = 1.E10 -WHERE (PRST(:)>XRTMIN(5) .AND. LDCOMPUTE(:) ) - ZLBDS(:) = XLBS*( PRHODREF(:)*PRST(:) )**XLBEXS -END WHERE +IF (LSNOW_T) THEN + WHERE (PRST(:)>XRTMIN(5) .AND. LDCOMPUTE(:) ) + WHERE(ZT(:)>263.15) + ZLBDS(:) = MAX(MIN(XLBDAS_MAX, 10**(14.554-0.0423*ZT(:))),XLBDAS_MIN) + END WHERE + WHERE(ZT(:)<=263.15) + ZLBDS(:) = MAX(MIN(XLBDAS_MAX, 10**(6.226-0.0106*ZT(:))),XLBDAS_MIN) + END WHERE + END WHERE + ZLBDS(:) = ZLBDS(:) * XTRANS_MP_GAMMAS +ELSE + WHERE (PRST(:)>XRTMIN(5) .AND. LDCOMPUTE(:) ) + ZLBDS(:) = XLBS*( PRHODREF(:)*PRST(:) )**XLBEXS + END WHERE +END IF ZLBDG(:) = 1.E10 WHERE (PRGT(:)>XRTMIN(6) .AND. LDCOMPUTE(:) ) ZLBDG(:) = XLBG*( PRHODREF(:)*PRGT(:) )**XLBEXG @@ -525,7 +563,7 @@ IF (LCOLD .AND. LWARM) THEN PA_TH, PA_RC, PA_CC, PA_RI, PA_CI ) END IF ! -IF (LWARM .AND. LRAIN) THEN +IF (LWARM .AND. LRAIN .AND. (.NOT. LKHKO)) THEN CALL LIMA_DROPLETS_SELF_COLLECTION (LDCOMPUTE, & ! depends on CF PRHODREF, & PCCT/ZCF1D, ZLBDC3, & @@ -564,7 +602,7 @@ IF (LWARM .AND. LRAIN) THEN PA_RR(:) = PA_RR(:) - P_RC_ACCR(:) END IF ! -IF (LWARM .AND. LRAIN) THEN +IF (LWARM .AND. LRAIN .AND. (.NOT. LKHKO)) THEN CALL LIMA_DROPS_SELF_COLLECTION (LDCOMPUTE, & ! depends on PF PRHODREF, & PCRT/ZPF1D(:), ZLBDR, ZLBDR3, & @@ -576,18 +614,20 @@ IF (LWARM .AND. LRAIN) THEN END IF ! IF (LWARM .AND. LRAIN) THEN - CALL LIMA_RAIN_EVAPORATION (PTSTEP, LDCOMPUTE, & ! depends on PF > CF - PRHODREF, ZT, ZLV, ZLVFACT, ZEVSAT, ZRVSAT, & - PRVT, PRCT/ZPF1D, PRRT/ZPF1D, ZLBDR, & - P_TH_EVAP, P_RR_EVAP, & - PEVAP3D ) + CALL LIMA_RAIN_EVAPORATION (PTSTEP, LDCOMPUTE, & ! depends on PF > CF + PRHODREF, ZT, ZLV, ZLVFACT, ZEVSAT, ZRVSAT, & + PRVT, PRCT/ZPF1D, PRRT/ZPF1D, PCRT/ZPF1D, ZLBDR, & + P_TH_EVAP, P_RR_EVAP, P_CR_EVAP, & + PEVAP3D ) P_RR_EVAP(:) = P_RR_EVAP(:) * MAX((ZPF1D(:) - ZCF1D(:)),0.) + P_CR_EVAP(:) = P_RR_EVAP(:) * MAX((ZPF1D(:) - ZCF1D(:)),0.) P_TH_EVAP(:) = P_RR_EVAP(:) * ZLVFACT(:) PEVAP3D(:) = - P_RR_EVAP(:) ! PA_TH(:) = PA_TH(:) + P_TH_EVAP(:) PA_RV(:) = PA_RV(:) - P_RR_EVAP(:) PA_RR(:) = PA_RR(:) + P_RR_EVAP(:) + PA_CR(:) = PA_CR(:) + P_CR_EVAP(:) END IF ! IF (LCOLD) THEN @@ -595,7 +635,7 @@ IF (LCOLD) THEN ! Includes vapour deposition on ice, ice -> snow conversion ! CALL LIMA_ICE_DEPOSITION (PTSTEP, LDCOMPUTE, & ! depends on IF, PF - PRHODREF, ZSSI, ZAI, ZCJ, ZLSFACT, & + PRHODREF, ZT, ZSSI, ZAI, ZCJ, ZLSFACT, & PRIT/ZIF1D, PCIT/ZIF1D, ZLBDI, & P_TH_DEPI, P_RI_DEPI, & P_RI_CNVS, P_CI_CNVS ) @@ -639,7 +679,7 @@ END IF ! Lambda_s limited for collection processes to prevent too high concentrations ! must be changed or removed if C and x modified ! -ZLBDS(:) = MIN( XLBDAS_MAX, ZLBDS(:)) +!ZLBDS(:) = MIN( XLBDAS_MAX, ZLBDS(:)) ! ! IF (LCOLD .AND. LSNOW) THEN @@ -667,16 +707,18 @@ IF (LWARM .AND. LCOLD) THEN PA_TH(:) = PA_TH(:) + P_TH_DEPG(:) END IF ! -!!$IF (LWARM .AND. LCOLD) THEN -!!$ CALL LIMA_BERGERON (LDCOMPUTE, & ! depends on CF, IF -!!$ PRCT, PRIT, PCIT, ZLBDI, & -!!$ ZSSIW, ZAI, ZCJ, ZLVFACT, ZLSFACT, & -!!$ P_TH_BERFI, P_RC_BERFI, & -!!$ PA_TH, PA_RC, PA_RI ) -!!$END IF -P_TH_BERFI(:) = 0. -P_RC_BERFI(:) = 0. -! +IF (LWARM .AND. LCOLD .AND. NMOM_I.EQ.1) THEN + CALL LIMA_BERGERON (LDCOMPUTE, & ! depends on CF, IF + PRCT/ZCF1D, PRIT/ZIF1D, PCIT/ZIF1D, ZLBDI, & + ZSSIW, ZAI, ZCJ, ZLVFACT, ZLSFACT, & + P_TH_BERFI, P_RC_BERFI ) + P_TH_BERFI(:) = P_TH_BERFI(:) * MIN(ZCF1D,ZIF1D) + P_RC_BERFI(:) = P_RC_BERFI(:) * MIN(ZCF1D,ZIF1D) +! + PA_RC(:) = PA_RC(:) + P_RC_BERFI(:) + PA_RI(:) = PA_RI(:) - P_RC_BERFI(:) + PA_TH(:) = PA_TH(:) + P_TH_BERFI(:) +END IF ! IF (LWARM .AND. LCOLD .AND. LSNOW) THEN ! @@ -760,6 +802,44 @@ IF (LWARM .AND. LRAIN .AND. LCOLD ) THEN PA_CI(:) = PA_CI(:) + P_CI_CFRZ(:) PA_RG(:) = PA_RG(:) - P_RR_CFRZ(:) - P_RI_CFRZ(:) +END IF +! +IF (LWARM .AND. LCOLD .AND. LSNOW .AND. LCIBU) THEN + ! + ! Conversion melting of snow should account for collected droplets and drops where T>0C, but does not ! + ! Some thermodynamical computations inside, to externalize ? + ! + CALL LIMA_COLLISIONAL_ICE_BREAKUP (LDCOMPUTE, & ! depends on PF (IF for fragments size) + PRHODREF, & + PRIT/ZIF1D, PRST/ZPF1D, PRGT/ZPF1D, PCIT/ZIF1D, & + ZLBDS, ZLBDG, & + P_RI_CIBU, P_CI_CIBU ) + P_RI_CIBU(:) = P_RI_CIBU(:) * ZPF1D(:) + P_CI_CIBU(:) = P_CI_CIBU(:) * ZPF1D(:) + ! + PA_RI(:) = PA_RI(:) + P_RI_CIBU(:) + PA_CI(:) = PA_CI(:) + P_CI_CIBU(:) + PA_RS(:) = PA_RS(:) - P_RI_CIBU(:) + +END IF +! +IF (LWARM .AND. LRAIN .AND. LCOLD .AND. LSNOW .AND. LRDSF) THEN + ! + ! Conversion melting of snow should account for collected droplets and drops where T>0C, but does not ! + ! Some thermodynamical computations inside, to externalize ? + ! + CALL LIMA_RAINDROP_SHATTERING_FREEZING (LDCOMPUTE, & ! depends on PF, IF + PRHODREF, & + PRRT/ZPF1D, PCRT/ZPF1D, PRIT/ZIF1D, PCIT/ZIF1D, PRGT/ZPF1D, & + ZLBDR, & + P_RI_RDSF, P_CI_RDSF ) + P_RI_RDSF(:) = P_RI_RDSF(:) * ZIF1D(:) + P_CI_RDSF(:) = P_CI_RDSF(:) * ZIF1D(:) + ! + PA_RI(:) = PA_RI(:) + P_RI_RDSF(:) + PA_CI(:) = PA_CI(:) + P_CI_RDSF(:) + PA_RG(:) = PA_RG(:) - P_RI_RDSF(:) + END IF ! IF (LWARM .AND. LCOLD) THEN diff --git a/src/MNH/lima_warm_coal.f90 b/src/MNH/lima_warm_coal.f90 index 4ec69ac5823e786c1dc06b9149d655e772db9e40..66c83de670a5fe35ad95e050c64363f9d6dff4c1 100644 --- a/src/MNH/lima_warm_coal.f90 +++ b/src/MNH/lima_warm_coal.f90 @@ -98,12 +98,14 @@ END MODULE MODI_LIMA_WARM_COAL ! P. Wautelet 05/2016-04/2018: new data structures and calls for I/O ! P. Wautelet 28/05/2019: move COUNTJV function to tools.f90 ! P. Wautelet 02/2020: use the new data structures and subroutines for budgets (no more budget calls in this subroutine) +! Delbeke/Vie 03/2022 : KHKO option !------------------------------------------------------------------------------- ! !* 0. DECLARATIONS ! ------------ ! use modd_budget, only: lbudget_rc, lbudget_rr, lbudget_sv, NBUDGET_RC, NBUDGET_RR, NBUDGET_SV1, tbudgets +USE MODD_CST, ONLY: XPI, XRHOLW USE MODD_NSV, ONLY: NSV_LIMA_NC, NSV_LIMA_NR USE MODD_PARAMETERS, ONLY: JPHEXT, JPVEXT USE MODD_PARAM_LIMA @@ -252,7 +254,7 @@ IF (LRAIN) THEN GSELF(:) = ZCCT(:)>XCTMIN(2) ISELF = COUNT(GSELF(:)) - IF( ISELF>0 ) THEN + IF( ISELF>0 .AND. .NOT.LKHKO) THEN ZZW1(:) = XSELFC*(ZCCT(:)/ZLBDC3(:))**2 * ZRHODREF(:) ! analytical integration WHERE( GSELF(:) ) ZCCS(:) = ZCCS(:) - MIN( ZCCS(:),ZZW1(:) ) @@ -273,38 +275,54 @@ IF (LRAIN) THEN if ( lbudget_rc ) call Budget_store_init( tbudgets(NBUDGET_RC), 'AUTO', prcs(:, :, :) * prhodj(:, :, :) ) if ( lbudget_rr ) call Budget_store_init( tbudgets(NBUDGET_RR), 'AUTO', prrs(:, :, :) * prhodj(:, :, :) ) if ( lbudget_sv ) then - !call Budget_store_init( tbudgets(NBUDGET_SV1 - 1 + nsv_lima_nc), 'AUTO', pccs(:, :, :) * prhodj(:, :, :) ) + call Budget_store_init( tbudgets(NBUDGET_SV1 - 1 + nsv_lima_nc), 'AUTO', pccs(:, :, :) * prhodj(:, :, :) ) call Budget_store_init( tbudgets(NBUDGET_SV1 - 1 + nsv_lima_nr), 'AUTO', pcrs(:, :, :) * prhodj(:, :, :) ) end if ZZW2(:) = 0.0 ZZW1(:) = 0.0 - WHERE( ZRCT(:)>XRTMIN(2) ) - ZZW2(:) = MAX( 0.0,XLAUTR*ZRHODREF(:)*ZRCT(:)* & + IF (LKHKO) THEN + WHERE ( ZRCT(:) .GT. XRTMIN(2) .AND. ZCCT(:) .GT. XCTMIN(2) & + .AND. (ZRCS(:) .GT. 0.0) .AND. (ZCCS(:) .GT. 0.0)) +! + ZZW1(:)= 1350.0 * ZRCT(:)**(2.47) * (ZCCT(:)/1.0E6)**(-1.79) ! ZCCT in cm-3 + ZZW1(:) = min (ZRCS(:), ZZW1(:)) + ZRCS(:) = ZRCS(:) - ZZW1(:) + ZRRS(:) = ZRRS(:) + ZZW1(:) +! + ZCRS(:) = ZCRS(:) + ZZW1(:) * 3. * ZRHODREF(:)/(4.*XPI*XRHOLW*(XR0)**(3.)) +! + ZZW1(:) = min ( ZCCS(:),ZZW1(:) * ZCCT(:) / ZRCT(:)) + ZCCS(:) = ZCCS(:) - ZZW1(:) +! + END WHERE + ELSE + WHERE( ZRCT(:)>XRTMIN(2) ) + ZZW2(:) = MAX( 0.0,XLAUTR*ZRHODREF(:)*ZRCT(:)* & (XAUTO1/min(ZLBDC(:),1.e9)**4-XLAUTR_THRESHOLD) ) ! L ! - ZZW3(:) = MIN( ZRCS(:), MAX( 0.0,XITAUTR*ZZW2(:)*ZRCT(:)* & + ZZW3(:) = MIN( ZRCS(:), MAX( 0.0,XITAUTR*ZZW2(:)*ZRCT(:)* & (XAUTO2/ZLBDC(:)-XITAUTR_THRESHOLD) ) ) ! L/tau ! - ZRCS(:) = ZRCS(:) - ZZW3(:) - ZRRS(:) = ZRRS(:) + ZZW3(:) + ZRCS(:) = ZRCS(:) - ZZW3(:) + ZRRS(:) = ZRRS(:) + ZZW3(:) ! - ZZW1(:) = MIN( MIN( 1.2E4,(XACCR4/ZLBDC(:)-XACCR5)/XACCR3), & + ZZW1(:) = MIN( MIN( 1.2E4,(XACCR4/ZLBDC(:)-XACCR5)/XACCR3), & ZLBDR(:)/XACCR1 ) ! D**-1 threshold diameter for ! switching the autoconversion regimes ! min (80 microns, D_h, D_r) - ZZW3(:) = ZZW3(:) * MAX( 0.0,ZZW1(:) )**3 / XAC - ZCRS(:) = ZCRS(:) + ZZW3(:) - END WHERE - + ZZW3(:) = ZZW3(:) * MAX( 0.0,ZZW1(:) )**3 / XAC + ZCRS(:) = ZCRS(:) + ZZW3(:) + END WHERE + END IF if ( lbudget_rc ) call Budget_store_end( tbudgets(NBUDGET_RC), 'AUTO', & Unpack( zrcs(:), mask = gmicro(:, :, :), field = prcs(:, :, :) ) * prhodj(:, :, :) ) if ( lbudget_rr ) call Budget_store_end( tbudgets(NBUDGET_RR), 'AUTO', & Unpack( zrrs(:), mask = gmicro(:, :, :), field = prrs(:, :, :) ) * prhodj(:, :, :) ) if ( lbudget_sv ) then !This budget is = 0 for nsv_lima_nc => not necessary to call it (ZCCS is not modified in this part) - !call Budget_store_end( tbudgets(NBUDGET_SV1 - 1 + nsv_lima_nc), 'AUTO', & - ! Unpack( zccs(:), mask = gmicro(:, :, :), field = pccs(:, :, :) ) * prhodj(:, :, :) ) + call Budget_store_end( tbudgets(NBUDGET_SV1 - 1 + nsv_lima_nc), 'AUTO', & + Unpack( zccs(:), mask = gmicro(:, :, :), field = pccs(:, :, :) ) * prhodj(:, :, :) ) call Budget_store_end( tbudgets(NBUDGET_SV1 - 1 + nsv_lima_nr), 'AUTO', & Unpack( zcrs(:), mask = gmicro(:, :, :), field = pcrs(:, :, :) ) * prhodj(:, :, :) ) end if @@ -334,31 +352,45 @@ IF (LRAIN) THEN Unpack( zrrs(:), mask = gmicro(:, :, :), field = prrs(:, :, :) ) * prhodj(:, :, :) ) if ( lbudget_sv ) call Budget_store_init( tbudgets(NBUDGET_SV1 - 1 + nsv_lima_nc), 'ACCR', & Unpack( zccs(:), mask = gmicro(:, :, :), field = pccs(:, :, :) ) * prhodj(:, :, :) ) - WHERE( GACCR(:).AND.(ZZW4(:)>1.E-4) ) ! Accretion for D>100 10-6 m - ZZW3(:) = ZLBDC3(:) / ZLBDR3(:) - ZZW1(:) = ( ZCCT(:)*ZCRT(:) / ZLBDC3(:) )*ZRHODREF(:) - ZZW2(:) = MIN( ZZW1(:)*(XACCR_CLARGE1+XACCR_CLARGE2*ZZW3(:)),ZCCS(:) ) - ZCCS(:) = ZCCS(:) - ZZW2(:) -! - ZZW1(:) = ( ZZW1(:) / ZLBDC3(:) ) - ZZW2(:) = MIN( ZZW1(:)*(XACCR_RLARGE1+XACCR_RLARGE2*ZZW3(:)),ZRCS(:) ) - ZRCS(:) = ZRCS(:) - ZZW2(:) - ZRRS(:) = ZRRS(:) + ZZW2(:) - END WHERE - WHERE( GACCR(:).AND.(ZZW4(:)<=1.E-4) ) ! Accretion for D<100 10-6 m - ZZW3(:) = MIN(ZLBDC3(:) / ZLBDR3(:), 1.E8) - ZZW1(:) = ( ZCCT(:)*ZCRT(:) / ZLBDC3(:) )*ZRHODREF(:) - ZZW1(:) = ZZW1(:) / ZLBDC3(:) - ZZW3(:) = ZZW3(:)**2 - ZZW2(:) = MIN( ZZW1(:)*(XACCR_CSMALL1+XACCR_CSMALL2*ZZW3(:)),ZCCS(:) ) - ZCCS(:) = ZCCS(:) - ZZW2(:) -! - ZZW1(:) = ZZW1(:) / ZLBDC3(:) - ZZW2(:) = MIN( ZZW1(:)*(XACCR_RSMALL1+XACCR_RSMALL2*ZZW3(:)) & + IF (LKHKO) THEN + WHERE ( (ZRCT(:) .GT. XRTMIN(2)) .AND. (ZRRT(:) .GT. XRTMIN(3)) & + .AND. (ZRCS(:) .GT. 0.0) .AND. (ZCCS(:) .GT. 0.0)) + ZZW1(:) = 67.0 * ( ZRCT(:) * ZRRT(:) )**1.15 + ZZW1(:) = MIN (ZRCS(:),ZZW1(:)) + ZRCS(:) = ZRCS(:) - ZZW1(:) + ZRRS(:) = ZRRS(:) + ZZW1(:) +! + ZZW1(:) = MIN (ZCCS(:),ZZW1(:) * ZCCT(:) / ZRCT(:)) + ZCCS(:) = ZCCS(:) - ZZW1(:) +! + END WHERE + ELSE + WHERE( GACCR(:).AND.(ZZW4(:)>1.E-4) ) ! Accretion for D>100 10-6 m + ZZW3(:) = ZLBDC3(:) / ZLBDR3(:) + ZZW1(:) = ( ZCCT(:)*ZCRT(:) / ZLBDC3(:) )*ZRHODREF(:) + ZZW2(:) = MIN( ZZW1(:)*(XACCR_CLARGE1+XACCR_CLARGE2*ZZW3(:)),ZCCS(:) ) + ZCCS(:) = ZCCS(:) - ZZW2(:) +! + ZZW1(:) = ( ZZW1(:) / ZLBDC3(:) ) + ZZW2(:) = MIN( ZZW1(:)*(XACCR_RLARGE1+XACCR_RLARGE2*ZZW3(:)),ZRCS(:) ) + ZRCS(:) = ZRCS(:) - ZZW2(:) + ZRRS(:) = ZRRS(:) + ZZW2(:) + END WHERE + WHERE( GACCR(:).AND.(ZZW4(:)<=1.E-4) ) ! Accretion for D<100 10-6 m + ZZW3(:) = MIN(ZLBDC3(:) / ZLBDR3(:), 1.E8) + ZZW1(:) = ( ZCCT(:)*ZCRT(:) / ZLBDC3(:) )*ZRHODREF(:) + ZZW1(:) = ZZW1(:) / ZLBDC3(:) + ZZW3(:) = ZZW3(:)**2 + ZZW2(:) = MIN( ZZW1(:)*(XACCR_CSMALL1+XACCR_CSMALL2*ZZW3(:)),ZCCS(:) ) + ZCCS(:) = ZCCS(:) - ZZW2(:) +! + ZZW1(:) = ZZW1(:) / ZLBDC3(:) + ZZW2(:) = MIN( ZZW1(:)*(XACCR_RSMALL1+XACCR_RSMALL2*ZZW3(:)) & ,ZRCS(:) ) - ZRCS(:) = ZRCS(:) - ZZW2(:) - ZRRS(:) = ZRRS(:) + ZZW2(:) - END WHERE + ZRCS(:) = ZRCS(:) - ZZW2(:) + ZRRS(:) = ZRRS(:) + ZZW2(:) + END WHERE + END IF if ( lbudget_rc ) call Budget_store_end( tbudgets(NBUDGET_RC), 'ACCR', & Unpack( zrcs(:), mask = gmicro(:, :, :), field = prcs(:, :, :) ) * prhodj(:, :, :) ) @@ -380,7 +412,7 @@ IF (LRAIN) THEN ELSE ISCBU = 0.0 END IF - IF( ISCBU>0 ) THEN + IF( ISCBU>0 .AND. .NOT.LKHKO) THEN if ( lbudget_sv ) call Budget_store_init( tbudgets(NBUDGET_SV1 - 1 + nsv_lima_nr), 'SCBU', & Unpack( zcrs(:), mask = gmicro(:, :, :), field = pcrs(:, :, :) ) * prhodj(:, :, :) ) ! diff --git a/src/MNH/lima_warm_evap.f90 b/src/MNH/lima_warm_evap.f90 index 9a67a4b824bf150485226d9ad53037131418c1a9..e62660ecdb41c18ec7da4ac2c8d9110384f7bbbb 100644 --- a/src/MNH/lima_warm_evap.f90 +++ b/src/MNH/lima_warm_evap.f90 @@ -75,6 +75,7 @@ END MODULE MODI_LIMA_WARM_EVAP !! Original ??/??/13 !! Philippe Wautelet: 05/2016-04/2018: new data structures and calls for I/O ! P. Wautelet 28/05/2019: move COUNTJV function to tools.f90 +! Delbeke/Vie 03/2022 : KHKO option ! !------------------------------------------------------------------------------- ! @@ -137,6 +138,7 @@ REAL, DIMENSION(:) , ALLOCATABLE :: ZCRT ! rain conc. at t ! REAL, DIMENSION(:) , ALLOCATABLE :: ZRVS ! Water vapor m.r. source REAL, DIMENSION(:) , ALLOCATABLE :: ZRRS ! Rain water m.r. source +REAL, DIMENSION(:) , ALLOCATABLE :: ZCRS ! Rain water m.r. source REAL, DIMENSION(:) , ALLOCATABLE :: ZTHS ! Theta source ! ! Other packed variables @@ -151,7 +153,7 @@ REAL, DIMENSION(:), ALLOCATABLE :: ZZW1, ZZW2, ZZW3, & ZZLV ! Latent heat of vaporization at T ! REAL, DIMENSION(SIZE(PRHODREF,1),SIZE(PRHODREF,2),SIZE(PRHODREF,3)) & - :: ZW, ZW2, ZRVSAT, ZDR + :: ZW, ZW2, ZRVSAT, ZDR, ZLV ! ! REAL :: ZEPS, ZFACT @@ -179,11 +181,14 @@ ZCTMIN(:) = XCTMIN(:) / PTSTEP ZEPS= XMV / XMD ZRVSAT(:,:,:) = ZEPS / (PPABST(:,:,:) * & EXP(-XALPW+XBETAW/ZT(:,:,:)+XGAMW*ALOG(ZT(:,:,:))) - 1.0) - +ZLV(:,:,:) = XLVTT + (XCPV-XCL)*(ZT(:,:,:)-XTT) ! GEVAP(:,:,:) = .FALSE. GEVAP(IIB:IIE,IJB:IJE,IKB:IKE) = & - PRRS(IIB:IIE,IJB:IJE,IKB:IKE)>ZRTMIN(3) .AND. & + PRRS(IIB:IIE,IJB:IJE,IKB:IKE)>ZRTMIN(3) .AND. & + PCRS(IIB:IIE,IJB:IJE,IKB:IKE)>ZCTMIN(3) .AND. & + PRRT(IIB:IIE,IJB:IJE,IKB:IKE)>ZRTMIN(3) .AND. & + PCRT(IIB:IIE,IJB:IJE,IKB:IKE)>ZCTMIN(3) .AND. & PRVT(IIB:IIE,IJB:IJE,IKB:IKE)<ZRVSAT(IIB:IIE,IJB:IJE,IKB:IKE) ! IEVAP = COUNTJV( GEVAP(:,:,:),I1(:),I2(:),I3(:)) @@ -196,6 +201,7 @@ IF( IEVAP >= 1 ) THEN ! ALLOCATE(ZRVS(IEVAP)) ALLOCATE(ZRRS(IEVAP)) + ALLOCATE(ZCRS(IEVAP)) ALLOCATE(ZTHS(IEVAP)) ! ALLOCATE(ZLBDR(IEVAP)) @@ -212,6 +218,7 @@ IF( IEVAP >= 1 ) THEN ZRRT(JL) = PRRT(I1(JL),I2(JL),I3(JL)) ZCRT(JL) = PCRT(I1(JL),I2(JL),I3(JL)) ZRRS(JL) = PRRS(I1(JL),I2(JL),I3(JL)) + ZCRS(JL) = PCRS(I1(JL),I2(JL),I3(JL)) ZRVS(JL) = PRVS(I1(JL),I2(JL),I3(JL)) ZTHS(JL) = PTHS(I1(JL),I2(JL),I3(JL)) ZZT(JL) = ZT(I1(JL),I2(JL),I3(JL)) @@ -219,8 +226,8 @@ IF( IEVAP >= 1 ) THEN ZLBDR(JL) = ZWLBDR(I1(JL),I2(JL),I3(JL)) ZRHODREF(JL) = PRHODREF(I1(JL),I2(JL),I3(JL)) ZEXNREF(JL) = PEXNREF(I1(JL),I2(JL),I3(JL)) + ZZLV(JL) = ZLV(I1(JL),I2(JL),I3(JL)) END DO - ZZLV(:) = XLVTT + (XCPV-XCL)*(ZZT(:)-XTT) ! ALLOCATE(ZZW2(IEVAP)) ALLOCATE(ZZW3(IEVAP)) @@ -242,10 +249,16 @@ IF( IEVAP >= 1 ) THEN ! ! Compute the evaporation tendency ! - ZZW2(:) = MIN( ZZW2(:) * ZZW3(:) * ZRRT(:) * & + IF (LKHKO) THEN + ZZW2(:) = 3.0 * XCEVAP * ZZW2(:) * (4.*XPI*XRHOLW/(3.*ZRHODREF(:)))**(2./3.) * & + (ZRRT(:))**(1./3.) * (ZCRT(:))**(2./3.) * ZZW3(:) + ZZW2(:) = MIN(ZZW2(:),ZRRS(:)) + ELSE + ZZW2(:) = MIN( ZZW2(:) * ZZW3(:) * ZRRT(:) * & (X0EVAR*ZLBDR(:)**XEX0EVAR + X1EVAR*ZRHODREF(:)**XEX2EVAR* & ZLBDR(:)**XEX1EVAR),ZRRS(:) ) - ZZW2(:) = MAX(ZZW2(:),0.0) + ZZW2(:) = MAX(ZZW2(:),0.0) + END IF ! ! Adjust sources ! @@ -271,12 +284,20 @@ IF( IEVAP >= 1 ) THEN ZW(:,:,:)= PEVAP3D(:,:,:) PEVAP3D(:,:,:) = UNPACK( ZZW2(:),MASK=GEVAP(:,:,:),FIELD=ZW(:,:,:) ) ! + IF (LKHKO) THEN + ZZW2(:) = MIN(ZZW2(:) * ZCRT(:)/ZRRT(:),ZCRS(:)) + ZCRS(:) = ZCRS(:) - ZZW2(:) + ZW(:,:,:) = PCRS(:,:,:) + PCRS(:,:,:) = UNPACK( ZCRS(:),MASK=GEVAP(:,:,:),FIELD=ZW(:,:,:) ) + ENDIF + DEALLOCATE(ZRCT) DEALLOCATE(ZRRT) DEALLOCATE(ZRVT) DEALLOCATE(ZCRT) DEALLOCATE(ZRVS) DEALLOCATE(ZRRS) + DEALLOCATE(ZCRS) DEALLOCATE(ZTHS) DEALLOCATE(ZZLV) DEALLOCATE(ZZT) @@ -295,21 +316,40 @@ IF( IEVAP >= 1 ) THEN ! --------------------------------------- ! ! - GEVAP(:,:,:) = PRRS(:,:,:)>ZRTMIN(3) .AND. PCRS(:,:,:)>ZCTMIN(3) - ZDR(:,:,:) = 9999. - WHERE (GEVAP(:,:,:)) - ZDR(:,:,:)=(6.*PRRS(:,:,:)/XPI/XRHOLW/PCRS(:,:,:))**0.33 - ZWLBDR3(:,:,:) = XLBR * PCRS(:,:,:) / PRRS(:,:,:) - ZWLBDR(:,:,:) = ZWLBDR3(:,:,:)**XLBEXR - END WHERE + IF (LKHKO) THEN +!* correct negative values for rain +! -------------------------------- +! + WHERE (PRRS(:,:,:)<0.) + PRCS(:,:,:) = PRCS(:,:,:)+PRRS(:,:,:) + PRRS(:,:,:) = 0. + PCRS(:,:,:) = 0. + END WHERE +! +!* REMOVES NON-PHYSICAL LOW VALUES + GEVAP(:,:,:) = PRRS(:,:,:)<ZRTMIN(3) .AND. PCRS(:,:,:)< ZCTMIN(3) + WHERE (GEVAP(:,:,:)) + PRVS(:,:,:) = PRVS(:,:,:) + PRRS(:,:,:) + PTHS(:,:,:) = PTHS(:,:,:) - PRRS(:,:,:) * ZLV(:,:,:) / & + ( PEXNREF(:,:,:)*(XCPD + XCPV*PRVT(:,:,:) + XCL*(PRCT(:,:,:) + PRRT(:,:,:)) ) ) + PCRS(:,:,:) = 0.0 + PRRS(:,:,:) = 0.0 + END WHERE + ELSE + GEVAP(:,:,:) = PRRS(:,:,:)>ZRTMIN(3) .AND. PCRS(:,:,:)>ZCTMIN(3) + ZDR(:,:,:) = 9999. + WHERE (GEVAP(:,:,:)) + ZDR(:,:,:)=(6.*PRRS(:,:,:)/XPI/XRHOLW/PCRS(:,:,:))**0.33 + ZWLBDR3(:,:,:) = XLBR * PCRS(:,:,:) / PRRS(:,:,:) + ZWLBDR(:,:,:) = ZWLBDR3(:,:,:)**XLBEXR + END WHERE ! - WHERE (GEVAP(:,:,:) .AND. ZDR(:,:,:).LT.82.E-6) - PCCS(:,:,:) = PCCS(:,:,:)+PCRS(:,:,:) - PCRS(:,:,:) = 0. - PRCS(:,:,:) = PRCS(:,:,:)+PRRS(:,:,:) - PRRS(:,:,:) = 0. - END WHERE - + WHERE (GEVAP(:,:,:) .AND. ZDR(:,:,:).LT.82.E-6) + PCCS(:,:,:) = PCCS(:,:,:)+PCRS(:,:,:) + PCRS(:,:,:) = 0. + PRCS(:,:,:) = PRCS(:,:,:)+PRRS(:,:,:) + PRRS(:,:,:) = 0. + END WHERE !!$ GMICRO(:,:,:) = GEVAP(:,:,:) .AND. ZWLBDR(:,:,:)/XACCR1>ZWLBDC3(:,:,:) !!$ ! the raindrops are too small, that is lower than D_h !!$ ZFACT = 1.2E4*XACCR1 @@ -341,6 +381,8 @@ IF( IEVAP >= 1 ) THEN !!$ PRRS(:,:,:) = 0.0 !!$ END WHERE ! + END IF ! LKHKO + ! END IF ! IEVAP ! !++cb++ diff --git a/src/MNH/lima_warm_nucl.f90 b/src/MNH/lima_warm_nucl.f90 index 549a5fc8460f4ac857a2171b64b324f9aec84b95..d62e4f790ca42ab792afdcfa66b970171f83b2e8 100644 --- a/src/MNH/lima_warm_nucl.f90 +++ b/src/MNH/lima_warm_nucl.f90 @@ -662,7 +662,7 @@ DO JL = 1, NPTS fl(JL)=fnew(JL) else if (PX2 .lt. 0.05) then PX2 = PX2 + 1.0E-2 - PRINT*, 'PX2 ALWAYS too small, we put a greater one : PX2 =',PX2 +! PRINT*, 'PX2 ALWAYS too small, we put a greater one : PX2 =',PX2 fh(JL) = SINGL_FUNCSMAX(PX2,PZZW3(JL),PZZW6(JL),JL) go to 100 end if @@ -683,7 +683,7 @@ DO JL = 1, NPTS PZRIDDR(JL)=PX2 else if (PX2 .lt. 0.05) then PX2 = PX2 + 1.0E-2 - PRINT*, 'PX2 too small, we put a greater one : PX2 =',PX2 +! PRINT*, 'PX2 too small, we put a greater one : PX2 =',PX2 fh(JL) = SINGL_FUNCSMAX(PX2,PZZW3(JL),PZZW6(JL),JL) go to 100 else diff --git a/src/MNH/mnh_oasis_recv.F90 b/src/MNH/mnh_oasis_recv.F90 index 7050f2d5f83c8629468812b117fd1945e97afce6..0295401a56a897fb828448ad88cf66b4ce576e79 100644 --- a/src/MNH/mnh_oasis_recv.F90 +++ b/src/MNH/mnh_oasis_recv.F90 @@ -241,6 +241,7 @@ GRECV_FLOOD=(GRECV_LAND.AND.LCPL_FLOOD) IF(GRECV_SEA.OR.GRECV_FLOOD)THEN CALL UPDATE_ESM_SURF_ATM_n(YSURF_CUR%FM%F, YSURF_CUR%IM, YSURF_CUR%SM%S, & YSURF_CUR%U, YSURF_CUR%WM%W, & + YSURF_CUR%TM, YSURF_CUR%GDM, YSURF_CUR%GRM, & HPROGRAM, KI, KSW, PZENITH(:), PSW_BANDS, & PTSRAD(:), PDIR_ALB(:,:), & PSCA_ALB(:,:), PEMIS(:), & diff --git a/src/MNH/modd_ch_aeron.f90 b/src/MNH/modd_ch_aeron.f90 index 2d45e946077be75a6e01c305b8e7fe0aa51d0a03..121c2373d86ea997d29a2b099ee217c475438395 100644 --- a/src/MNH/modd_ch_aeron.f90 +++ b/src/MNH/modd_ch_aeron.f90 @@ -2,126 +2,143 @@ !ORILAM_LIC This is part of the ORILAM software governed by the CeCILL-C licence !ORILAM_LIC version 1. See LICENSE, CeCILL-C_V1-en.txt and CeCILL-C_V1-fr.txt !ORILAM_LIC for details. -!----------------------------------------------------------------- -!--------------- special set of characters for RCS information -!----------------------------------------------------------------- -! $Source$ $Revision$ $Date$ -!----------------------------------------------------------------- -!! ###################### +!! ##################### MODULE MODD_CH_AERO_n -!! ###################### +!! ##################### !! !! PURPOSE !! ------- -!! !! declaration of variables and types for the aerosol system !! !! METHOD !! ------ !! -!! !! REFERENCE !! --------- !! none !! -!! !! AUTHOR !! ------ !! P. Tulet (LA) !! -!! !! MODIFICATIONS !! ------------- !! (30-01-01) P.Tulet (LA) * modifications for secondary biogenics aerosols !! -!!-------------------------------------------------------------------- -!! DECLARATIONS -!! ------------ +!------------------------------------------------------------------------------- +! +!* 0. DECLARATIONS +! ------------ +! USE MODD_PARAMETERS, ONLY: JPMODELMAX -IMPLICIT NONE - -TYPE CH_AERO_t ! -!* normalisation parameters +IMPLICIT NONE ! - REAL, DIMENSION(:,:), POINTER :: XN0=>NULL() ! Number concentration - REAL, DIMENSION(:,:), POINTER :: XRG0=>NULL() ! Geometric mean size - REAL, DIMENSION(:,:), POINTER :: XSIG0=>NULL() ! Dispersion ln(sigma) - REAL, DIMENSION(:,:,:,:), POINTER :: XN3D=>NULL() ! Number concentration - REAL, DIMENSION(:,:,:,:), POINTER :: XRG3D=>NULL() ! Geometric mean size - REAL, DIMENSION(:,:,:,:), POINTER :: XSIG3D=>NULL() ! dispersion (sigma) - REAL, DIMENSION(:,:,:,:), POINTER :: XM3D=>NULL() ! moments - REAL, DIMENSION(:,:,:,:), POINTER :: XSEDA=>NULL() ! sedimentation - REAL, DIMENSION(:,:,:), POINTER :: XVDEPAERO=>NULL() ! aerosol dry deposition +TYPE CH_AERO_t + ! + !* normalisation parameters + ! + REAL, DIMENSION(:,:), POINTER :: XN0=>NULL() ! Number concentration + REAL, DIMENSION(:,:), POINTER :: XRG0=>NULL() ! Geometric mean size + REAL, DIMENSION(:,:), POINTER :: XSIG0=>NULL() ! Dispersion ln(sigma) + REAL, DIMENSION(:,:,:,:), POINTER :: XN3D=>NULL() ! Number concentration + REAL, DIMENSION(:,:,:,:), POINTER :: XRG3D=>NULL() ! Geometric mean size + REAL, DIMENSION(:,:,:,:), POINTER :: XSIG3D=>NULL() ! dispersion (sigma) + REAL, DIMENSION(:,:,:,:), POINTER :: XM3D=>NULL() ! moments + REAL, DIMENSION(:,:,:,:), POINTER :: XSEDA=>NULL() ! sedimentation + REAL, DIMENSION(:,:,:), POINTER :: XVDEPAERO=>NULL() ! aerosol dry deposition REAL, DIMENSION(:,:,:,:,:), POINTER :: XCTOTA3D=>NULL() ! Total concentration of species -! - REAL, DIMENSION(:,:,:), POINTER :: XFTEST=>NULL() - REAL, DIMENSION(:,:,:), POINTER :: XCTOTA=>NULL() ! Total concentration of species - ! (HNO3, ! H2SO4, NH3) present in - ! each of the aerosol mode (ug/m3) - REAL, DIMENSION(:,:,:), POINTER :: XCCTOT=>NULL() ! Composition of 3rd Moment (%) - REAL, DIMENSION(:,:), POINTER :: XCTOTG=>NULL() ! Total concentration of volatile - ! species (HNO3, NH3) (ug/m3) in - ! the air - REAL, DIMENSION(:,:,:,:), POINTER :: XFRAC=>NULL() ! Gas fraction into organic species - REAL, DIMENSION(:,:,:,:), POINTER :: XMI=>NULL() ! Molar mass of aerosol species (g/mol) - REAL, DIMENSION(:,:,:,:), POINTER :: XSOLORG=>NULL() ! Solubility fraction of SOA (%) - REAL, DIMENSION(:,:), POINTER :: XRHOP0=>NULL() ! Condensed phase density (kg/m3) - REAL, DIMENSION(:,:,:,:), POINTER :: XRHOP3D=>NULL() ! Condensed phase density (kg/m3) - REAL, DIMENSION(:), POINTER :: XLAMBDA=>NULL() ! Mean free path of background + ! + REAL, DIMENSION(:,:,:), POINTER :: XFTEST=>NULL() + REAL, DIMENSION(:,:,:), POINTER :: XCTOTA=>NULL() ! Total concentration of species + ! (HNO3, ! H2SO4, NH3) present in + ! each of the aerosol mode (ug/m3) + REAL, DIMENSION(:,:,:), POINTER :: XCCTOT=>NULL() ! Composition of 3rd Moment (%) + REAL, DIMENSION(:,:), POINTER :: XCTOTG=>NULL() ! Total concentration of volatile + ! species (HNO3, NH3) (ug/m3) in + ! the air + REAL, DIMENSION(:,:,:,:), POINTER :: XFRAC=>NULL() ! Gas fraction into organic species + REAL, DIMENSION(:,:,:,:), POINTER :: XMI=>NULL() ! Molar mass of aerosol species (g/mol) + REAL, DIMENSION(:,:,:,:), POINTER :: XSOLORG=>NULL() ! Solubility fraction of SOA (%) + REAL, DIMENSION(:,:), POINTER :: XRHOP0=>NULL() ! Condensed phase density (kg/m3) + REAL, DIMENSION(:,:,:,:), POINTER :: XRHOP3D=>NULL() ! Condensed phase density (kg/m3) + REAL, DIMENSION(:), POINTER :: XLAMBDA=>NULL() ! Mean free path of background ! gas molecules - REAL, DIMENSION(:), POINTER :: XMU=>NULL() ! Gas viscosity (kg/(ms)) -! -!-------------------------------------------------------------------------- -! -!* Growth parameters -! + REAL, DIMENSION(:), POINTER :: XMU=>NULL() ! gas viscosity (kg/(ms)) + REAL, DIMENSION(:,:,:), POINTER :: XJNUC=>NULL() ! nucleation rate (molec.cm-3.s-1) + REAL, DIMENSION(:,:,:), POINTER :: XJ2RAT=>NULL() ! particle formation rate for 2 nm + REAL, DIMENSION(:,:,:), POINTER :: XCONC_MASS=>NULL() ! available mass (ug.m-3) + REAL, DIMENSION(:,:,:), POINTER :: XCOND_MASS_I=>NULL() ! condensated mass mode i (ug.m-3) + REAL, DIMENSION(:,:,:), POINTER :: XCOND_MASS_J=>NULL() ! condensated mass mode j (ug.m-3) + REAL, DIMENSION(:,:,:), POINTER :: XNUCL_MASS=>NULL() ! nucleation mass (ug.m-3) + ! + REAL, DIMENSION(:,:,:,:), POINTER :: XMBEG=>NULL() + REAL, DIMENSION(:,:,:,:), POINTER :: XMINT=>NULL() + REAL, DIMENSION(:,:,:,:), POINTER :: XMEND=>NULL() + ! + REAL, DIMENSION(:,:,:,:), POINTER :: XDMINTRA=>NULL() + REAL, DIMENSION(:,:,:,:), POINTER :: XDMINTER=>NULL() + REAL, DIMENSION(:,:,:,:), POINTER :: XDMCOND=>NULL() + REAL, DIMENSION(:,:,:,:), POINTER :: XDMNUCL=>NULL() + REAL, DIMENSION(:,:,:,:), POINTER :: XDMMERG=>NULL() + ! + !* Growth parameters + ! REAL, DIMENSION(:,:), POINTER :: XOM=>NULL() - -! -!---------------------------------------------------------------------------- -! -!* Nucleation/cond. growth parameters -! + ! + !* Nucleation/cond. growth parameters + ! REAL, DIMENSION(:), POINTER :: XSO4RAT=>NULL() ! Rate of gas phase production of ! sulfuric acid (molec./cm3/s) -! -!---------------------------------------------------------------------------- -! + ! LOGICAL :: GSEDFIX = .TRUE. ! flag used in CH_AER_SEDIM_n routine -! + ! END TYPE CH_AERO_t - +! TYPE(CH_AERO_t), DIMENSION(JPMODELMAX), TARGET, SAVE :: CH_AERO_MODEL - -REAL, DIMENSION(:,:), POINTER :: XN0=>NULL() -REAL, DIMENSION(:,:), POINTER :: XRG0=>NULL() -REAL, DIMENSION(:,:), POINTER :: XSIG0=>NULL() -REAL, DIMENSION(:,:,:,:), POINTER :: XN3D=>NULL() -REAL, DIMENSION(:,:,:,:), POINTER :: XRG3D=>NULL() -REAL, DIMENSION(:,:,:,:), POINTER :: XSIG3D=>NULL() -REAL, DIMENSION(:,:,:,:), POINTER :: XM3D=>NULL() -REAL, DIMENSION(:,:,:,:), POINTER :: XSEDA=>NULL() -REAL, DIMENSION(:,:,:), POINTER :: XVDEPAERO=>NULL() +! +REAL, DIMENSION(:,:), POINTER :: XN0=>NULL() +REAL, DIMENSION(:,:), POINTER :: XRG0=>NULL() +REAL, DIMENSION(:,:), POINTER :: XSIG0=>NULL() +REAL, DIMENSION(:,:,:,:), POINTER :: XN3D=>NULL() +REAL, DIMENSION(:,:,:,:), POINTER :: XRG3D=>NULL() +REAL, DIMENSION(:,:,:,:), POINTER :: XSIG3D=>NULL() +REAL, DIMENSION(:,:,:,:), POINTER :: XM3D=>NULL() +REAL, DIMENSION(:,:,:,:), POINTER :: XSEDA=>NULL() +REAL, DIMENSION(:,:,:), POINTER :: XVDEPAERO=>NULL() REAL, DIMENSION(:,:,:,:,:), POINTER :: XCTOTA3D=>NULL() -REAL, DIMENSION(:,:,:), POINTER :: XFTEST=>NULL() -REAL, DIMENSION(:,:,:), POINTER :: XCTOTA=>NULL() -REAL, DIMENSION(:,:,:), POINTER :: XCCTOT=>NULL() -REAL, DIMENSION(:,:), POINTER :: XCTOTG=>NULL() -REAL, DIMENSION(:,:,:,:), POINTER :: XFRAC=>NULL() -REAL, DIMENSION(:,:,:,:), POINTER :: XMI=>NULL() -REAL, DIMENSION(:,:,:,:), POINTER :: XSOLORG=>NULL() -REAL, DIMENSION(:,:), POINTER :: XRHOP0=>NULL() -REAL, DIMENSION(:,:,:,:), POINTER :: XRHOP3D=>NULL() -REAL, DIMENSION(:), POINTER :: XLAMBDA=>NULL() -REAL, DIMENSION(:), POINTER :: XMU=>NULL() -REAL, DIMENSION(:,:), POINTER :: XOM=>NULL() -REAL, DIMENSION(:), POINTER :: XSO4RAT=>NULL() -LOGICAL, POINTER :: GSEDFIX=>NULL() - +REAL, DIMENSION(:,:,:), POINTER :: XFTEST=>NULL() +REAL, DIMENSION(:,:,:), POINTER :: XCTOTA=>NULL() +REAL, DIMENSION(:,:,:), POINTER :: XCCTOT=>NULL() +REAL, DIMENSION(:,:), POINTER :: XCTOTG=>NULL() +REAL, DIMENSION(:,:,:,:), POINTER :: XFRAC=>NULL() +REAL, DIMENSION(:,:,:,:), POINTER :: XMI=>NULL() +REAL, DIMENSION(:,:,:,:), POINTER :: XSOLORG=>NULL() +REAL, DIMENSION(:,:), POINTER :: XRHOP0=>NULL() +REAL, DIMENSION(:,:,:,:), POINTER :: XRHOP3D=>NULL() +REAL, DIMENSION(:), POINTER :: XLAMBDA=>NULL() +REAL, DIMENSION(:), POINTER :: XMU=>NULL() +REAL, DIMENSION(:,:), POINTER :: XOM=>NULL() +REAL, DIMENSION(:), POINTER :: XSO4RAT=>NULL() +LOGICAL, POINTER :: GSEDFIX=>NULL() +REAL, DIMENSION(:,:,:), POINTER :: XJNUC=>NULL() +REAL, DIMENSION(:,:,:), POINTER :: XJ2RAT=>NULL() +REAL, DIMENSION(:,:,:), POINTER :: XCONC_MASS=>NULL() ! Available mass (ug.m-3) +REAL, DIMENSION(:,:,:), POINTER :: XCOND_MASS_I=>NULL() ! Condensated mass mode i (ug.m-3) +REAL, DIMENSION(:,:,:), POINTER :: XCOND_MASS_J=>NULL() ! Condensated mass mode j (ug.m-3) +REAL, DIMENSION(:,:,:), POINTER :: XNUCL_MASS=>NULL() ! Nucleation mass (ug.m-3) +REAL, DIMENSION(:,:,:,:), POINTER :: XMBEG=>NULL() +REAL, DIMENSION(:,:,:,:), POINTER :: XMINT=>NULL() +REAL, DIMENSION(:,:,:,:), POINTER :: XMEND=>NULL() +REAL, DIMENSION(:,:,:,:), POINTER :: XDMINTRA=>NULL() +REAL, DIMENSION(:,:,:,:), POINTER :: XDMINTER=>NULL() +REAL, DIMENSION(:,:,:,:), POINTER :: XDMCOND=>NULL() +REAL, DIMENSION(:,:,:,:), POINTER :: XDMNUCL=>NULL() +REAL, DIMENSION(:,:,:,:), POINTER :: XDMMERG=>NULL() +! CONTAINS - +! SUBROUTINE CH_AERO_GOTO_MODEL(KFROM, KTO) INTEGER, INTENT(IN) :: KFROM, KTO ! @@ -149,6 +166,20 @@ CH_AERO_MODEL(KFROM)%XLAMBDA=>XLAMBDA CH_AERO_MODEL(KFROM)%XMU=>XMU CH_AERO_MODEL(KFROM)%XOM=>XOM CH_AERO_MODEL(KFROM)%XSO4RAT=>XSO4RAT +CH_AERO_MODEL(KFROM)%XJNUC=>XJNUC +CH_AERO_MODEL(KFROM)%XJ2RAT=>XJ2RAT +CH_AERO_MODEL(KFROM)%XCONC_MASS=>XCONC_MASS +CH_AERO_MODEL(KFROM)%XCOND_MASS_I=>XCOND_MASS_I +CH_AERO_MODEL(KFROM)%XCOND_MASS_J=>XCOND_MASS_J +CH_AERO_MODEL(KFROM)%XNUCL_MASS=>XNUCL_MASS +CH_AERO_MODEL(KFROM)%XMBEG=>XMBEG +CH_AERO_MODEL(KFROM)%XMINT=>XMINT +CH_AERO_MODEL(KFROM)%XMEND=>XMEND +CH_AERO_MODEL(KFROM)%XDMINTRA=>XDMINTRA +CH_AERO_MODEL(KFROM)%XDMINTER=>XDMINTER +CH_AERO_MODEL(KFROM)%XDMCOND=>XDMCOND +CH_AERO_MODEL(KFROM)%XDMNUCL=>XDMNUCL +CH_AERO_MODEL(KFROM)%XDMMERG=>XDMMERG ! ! Current model is set to model KTO XN0=>CH_AERO_MODEL(KTO)%XN0 @@ -175,6 +206,20 @@ XMU=>CH_AERO_MODEL(KTO)%XMU XOM=>CH_AERO_MODEL(KTO)%XOM XSO4RAT=>CH_AERO_MODEL(KTO)%XSO4RAT GSEDFIX=>CH_AERO_MODEL(KTO)%GSEDFIX +XJNUC=>CH_AERO_MODEL(KTO)%XJNUC +XJ2RAT=>CH_AERO_MODEL(KTO)%XJ2RAT +XCONC_MASS=>CH_AERO_MODEL(KTO)%XCONC_MASS +XCOND_MASS_I=>CH_AERO_MODEL(KTO)%XCOND_MASS_I +XCOND_MASS_J=>CH_AERO_MODEL(KTO)%XCOND_MASS_J +XNUCL_MASS=>CH_AERO_MODEL(KTO)%XNUCL_MASS +XMBEG=>CH_AERO_MODEL(KTO)%XMBEG +XMINT=>CH_AERO_MODEL(KTO)%XMINT +XMEND=>CH_AERO_MODEL(KTO)%XMEND +XDMINTRA=>CH_AERO_MODEL(KTO)%XDMINTRA +XDMINTER=>CH_AERO_MODEL(KTO)%XDMINTER +XDMCOND=>CH_AERO_MODEL(KTO)%XDMCOND +XDMNUCL=>CH_AERO_MODEL(KTO)%XDMNUCL +XDMMERG=>CH_AERO_MODEL(KTO)%XDMMERG END SUBROUTINE CH_AERO_GOTO_MODEL - +! END MODULE MODD_CH_AERO_n diff --git a/src/MNH/modd_ch_aerosol.f90 b/src/MNH/modd_ch_aerosol.f90 index defa8f71ac910543930848a11f9c6d01494b0a62..78e61cb5f8b8f9aa30ff32715c03cb9903d39444 100644 --- a/src/MNH/modd_ch_aerosol.f90 +++ b/src/MNH/modd_ch_aerosol.f90 @@ -1,8 +1,7 @@ -!ORILAM_LIC Copyright 2006-2021 CNRS, Meteo-France and Universite Paul Sabatier +!ORILAM_LIC Copyright 1994-2014 CNRS, Meteo-France and Universite Paul Sabatier !ORILAM_LIC This is part of the ORILAM software governed by the CeCILL-C licence !ORILAM_LIC version 1. See LICENSE, CeCILL-C_V1-en.txt and CeCILL-C_V1-fr.txt !ORILAM_LIC for details. -!----------------------------------------------------------------- !! ###################### MODULE MODD_CH_AEROSOL !! ###################### @@ -30,23 +29,17 @@ !! ------------- !! (30-01-01) P.Tulet (LA) * modifications for secondary biogenics aerosols !! (25-08-16) M.Leriche (LA) * NM6_AER is now in SAVE and assign in ini_nsv -! P. Wautelet 07/06/2019: allocate weights only when needed -! P. Wautelet 09/03/2021: simplify allocation of scalar variable names -!!-------------------------------------------------------------------- -!! DECLARATIONS -!! ------------ +!! +!------------------------------------------------------------------------------- +! +!* 0. DECLARATIONS +! ------------ +! USE MODD_PARAMETERS, ONLY: JPMODELMAX, JPSVNAMELGTMAX ! IMPLICIT NONE ! ! aerosol mode parameters -! -LOGICAL :: LORILAM = .FALSE. ! switch to active aerosols fluxes -LOGICAL :: LINITPM = .TRUE. ! switch to initialize BC -LOGICAL :: LAERINIT = .FALSE. ! switch to initialize aerosols - -LOGICAL,DIMENSION(JPMODELMAX) :: LDEPOS_AER = .FALSE. ! switch to AER wet depositon - ! and OC from CO concentration (real_case) INTEGER, PARAMETER :: JPMODE=2 ! number of modes INTEGER, PARAMETER :: JPIN=JPMODE*3 ! number of differential equations @@ -56,6 +49,14 @@ CHARACTER(LEN=JPSVNAMELGTMAX), DIMENSION(JPMODE*2), PARAMETER :: CDEAERNAMES = & (/'DEAERM31C','DEAERM32C' & ,'DEAERM31R','DEAERM32R' /) ! + +LOGICAL :: LORILAM = .FALSE. ! switch to active aerosols fluxes +LOGICAL :: LINITPM = .TRUE. ! switch to initialize BC +LOGICAL :: LAERINIT = .FALSE. ! switch to initialize aerosols +! +LOGICAL,DIMENSION(JPMODELMAX) :: LDEPOS_AER = .FALSE. ! switch to AER wet depositon + ! and OC from CO concentration (real_case) +! !* indices of Aerosol chemical parameters ! INTEGER, PARAMETER :: NSP=4 ! number of chemical species @@ -74,7 +75,7 @@ INTEGER, PARAMETER :: NCARB=3 ! number of chemically inert species INTEGER, PARAMETER :: JP_AER_OC = 5 INTEGER, PARAMETER :: JP_AER_BC = 6 INTEGER, PARAMETER :: JP_AER_DST = 7 - +! INTEGER :: NSOA = 10 ! number of condensable species that may form ! secondary aerosols INTEGER, SAVE :: NM6_AER ! number of mode for which M6 is computed define in ini_sv @@ -89,23 +90,23 @@ INTEGER :: JP_AER_SOA7 = 14 INTEGER :: JP_AER_SOA8 = 15 INTEGER :: JP_AER_SOA9 = 16 INTEGER :: JP_AER_SOA10 = 17 - +! CHARACTER(LEN=32),DIMENSION(:), ALLOCATABLE :: CAERONAMES - -INTEGER :: JP_CH_SO4I = 1 -INTEGER :: JP_CH_SO4J = 2 -INTEGER :: JP_CH_NO3I = 3 -INTEGER :: JP_CH_NO3J = 4 -INTEGER :: JP_CH_NH3I = 5 -INTEGER :: JP_CH_NH3J = 6 -INTEGER :: JP_CH_H2OI = 7 -INTEGER :: JP_CH_H2OJ = 8 -INTEGER :: JP_CH_OCI = 9 -INTEGER :: JP_CH_OCJ = 10 -INTEGER :: JP_CH_BCI = 11 -INTEGER :: JP_CH_BCJ = 12 -INTEGER :: JP_CH_DSTI = 13 -INTEGER :: JP_CH_DSTJ = 14 +! +INTEGER :: JP_CH_SO4I = 1 +INTEGER :: JP_CH_SO4J = 2 +INTEGER :: JP_CH_NO3I = 3 +INTEGER :: JP_CH_NO3J = 4 +INTEGER :: JP_CH_NH3I = 5 +INTEGER :: JP_CH_NH3J = 6 +INTEGER :: JP_CH_H2OI = 7 +INTEGER :: JP_CH_H2OJ = 8 +INTEGER :: JP_CH_OCI = 9 +INTEGER :: JP_CH_OCJ = 10 +INTEGER :: JP_CH_BCI = 11 +INTEGER :: JP_CH_BCJ = 12 +INTEGER :: JP_CH_DSTI = 13 +INTEGER :: JP_CH_DSTJ = 14 INTEGER :: JP_CH_SOA1I = 15 INTEGER :: JP_CH_SOA1J = 16 INTEGER :: JP_CH_SOA2I = 17 @@ -126,106 +127,106 @@ INTEGER :: JP_CH_SOA9I = 31 INTEGER :: JP_CH_SOA9J = 32 INTEGER :: JP_CH_SOA10I = 33 INTEGER :: JP_CH_SOA10J = 34 -INTEGER :: JP_CH_M0I = 35 -INTEGER :: JP_CH_M0J = 36 -INTEGER :: JP_CH_M6I = 37 -INTEGER :: JP_CH_M6J = 38 - -!INTEGER, PARAMETER :: JPNN=NSP+NSOA+NCARB - +INTEGER :: JP_CH_M0I = 35 +INTEGER :: JP_CH_M0J = 36 +INTEGER :: JP_CH_M6I = 37 +INTEGER :: JP_CH_M6J = 38 +! ! Index for gas species which interact with aerosols -INTEGER :: JP_CH_HNO3, JP_CH_H2SO4, JP_CH_NH3, JP_CH_O3, JP_CH_CO, & - JP_CH_URG1, JP_CH_URG2, JP_CH_RPG2, JP_CH_RP18, JP_CH_UR26,& - JP_CH_RPG3, JP_CH_URG4, JP_CH_UR8, JP_CH_UR17, JP_CH_UR7, JP_CH_URG6, & +INTEGER :: JP_CH_HNO3, JP_CH_H2SO4, JP_CH_NH3, JP_CH_O3, JP_CH_CO, & + JP_CH_URG1, JP_CH_URG2, JP_CH_RPG2, JP_CH_RP18, JP_CH_UR26, & + JP_CH_RPG3, JP_CH_URG4, JP_CH_UR8, JP_CH_UR17, JP_CH_UR7, JP_CH_URG6, & JP_CH_ARAC, JP_CH_URG7, JP_CH_RPG7, JP_CH_RPR7, JP_CH_URG8, JP_CH_UR19, & JP_CH_URG9, JP_CH_URG10, JP_CH_PAN8, JP_CH_UR22, JP_CH_RPR4, JP_CH_AP7, & - JP_CH_RPR3, JP_CH_UR21, JP_CH_UR28, JP_CH_UR29, JP_CH_UR30, & - JP_CH_RPR9, JP_CH_RP12, JP_CH_UR3, JP_CH_UR23, JP_CH_UR31, JP_CH_AP1, & - JP_CH_AP6, JP_CH_ADAC, JP_CH_UR2, JP_CH_UR14, JP_CH_UR27, JP_CH_RP14, & + JP_CH_RPR3, JP_CH_UR21, JP_CH_UR28, JP_CH_UR29, JP_CH_UR30, & + JP_CH_RPR9, JP_CH_RP12, JP_CH_UR3, JP_CH_UR23, JP_CH_UR31, JP_CH_AP1, & + JP_CH_AP6, JP_CH_ADAC, JP_CH_UR2, JP_CH_UR14, JP_CH_UR27, JP_CH_RP14, & JP_CH_RP19, JP_CH_UR11, JP_CH_UR15, JP_CH_AP10, JP_CH_UR20, JP_CH_UR34, & - JP_CH_AP11, JP_CH_AP12, JP_CH_UR5, JP_CH_UR6, JP_CH_AP8, JP_CH_RP17,& + JP_CH_AP11, JP_CH_AP12, JP_CH_UR5, JP_CH_UR6, JP_CH_AP8, JP_CH_RP17, & JP_CH_RP13 - +! INTEGER :: JP_CH_H2O2, JP_CH_SO2, JP_CH_SO42M ! -REAL, SAVE, DIMENSION(:), ALLOCATABLE :: XRHOI ! volumar mass of species i (kg/m3) - -REAL, SAVE, DIMENSION(:), ALLOCATABLE :: XFAC ! conversion factor um3/m3 -> ug/cm3 - ! for each chemical species - - -! Molar mass of each aerosols parents (in kg/mol) -REAL, PARAMETER :: XHNO3=63.01287 -REAL, PARAMETER :: XH2SO4=98.079 -REAL, PARAMETER :: XNH3 =17.03061 -REAL, PARAMETER :: XURG1=88. -REAL, PARAMETER :: XURG2=1.76981E+02 -REAL, PARAMETER :: XRPG2=1.68000E+02 -REAL, PARAMETER :: XRP18=1.84000E+02 -REAL, PARAMETER :: XRPG3=1.53772E+02 -REAL, PARAMETER :: XURG4=1.95867E+02 -REAL, PARAMETER :: XUR17=1.72000E+02 -REAL, PARAMETER :: XRPR3=1.86000E+02 -REAL, PARAMETER :: XAP7 =2.33000E+02 -REAL, PARAMETER :: XURG6=1.89153E+02 -REAL, PARAMETER :: XUR22=2.12000E+02 -REAL, PARAMETER :: XURG7=1.56781E+02 -REAL, PARAMETER :: XADAC=1.56781E+02 -REAL, PARAMETER :: XRPR4=1.67000E+02 -REAL, PARAMETER :: XRPR7=1.50000E+02 -REAL, PARAMETER :: XRPG7=1.96059E+02 -REAL, PARAMETER :: XURG8=1.73777E+02 -REAL, PARAMETER :: XURG9=2.61676E+02 -REAL, PARAMETER :: XUR26=1.68000E+02 -REAL, PARAMETER :: XURG10=2.14834E+02 -REAL, PARAMETER :: XUR7=1.68000E+02 -REAL, PARAMETER :: XUR8=1.84000E+02 -REAL, PARAMETER :: XPAN8=2.63000E+02 -REAL, PARAMETER :: XARAC=1.66000E+02 -REAL, PARAMETER :: XUR19=1.70000E+02 -REAL, PARAMETER :: XUR21=88. -REAL, PARAMETER :: XUR28=90. -REAL, PARAMETER :: XUR29=186.0 -REAL, PARAMETER :: XUR30=200.0 -REAL, PARAMETER :: XRP13=168. -REAL, PARAMETER :: XRP17=170.0 -REAL, PARAMETER :: XRPR9=154.0 -REAL, PARAMETER :: XRP12=152.0 -REAL, PARAMETER :: XUR3=202.0 -REAL, PARAMETER :: XUR23=144.0 -REAL, PARAMETER :: XUR31=220.0 -REAL, PARAMETER :: XAP1=183.0 -REAL, PARAMETER :: XAP6=197.0 -REAL, PARAMETER :: XRP14=188.0 -REAL, PARAMETER :: XRP19=204.0 -REAL, PARAMETER :: XUR2=152.0 -REAL, PARAMETER :: XUR14=181.0 -REAL, PARAMETER :: XUR27=164.0 -REAL, PARAMETER :: XUR11=172.0 -REAL, PARAMETER :: XUR15=201.0 -REAL, PARAMETER :: XAP10=217.0 -REAL, PARAMETER :: XUR20=256.0 -REAL, PARAMETER :: XUR34=240.0 -REAL, PARAMETER :: XAP11=287.0 -REAL, PARAMETER :: XAP12=303.0 -REAL, PARAMETER :: XUR5=170.0 -REAL, PARAMETER :: XUR6=170.0 -REAL, PARAMETER :: XAP8=215.0 - - +! volumar mass of species i [kg/m3] +REAL, SAVE, DIMENSION(:), ALLOCATABLE :: XRHOI +! +! conversion factor : +! ------------------- +! moment3 [um3_aer/m3_air] = conc[ug_aer/m3_air]/XFAC +! +REAL, SAVE, DIMENSION(:), ALLOCATABLE :: XFAC +! +! Molar mass of each aerosols parents [g/mol] +REAL, PARAMETER :: XHNO3 = 63.01287 +REAL, PARAMETER :: XH2SO4 = 98.079 +REAL, PARAMETER :: XNH3 = 17.03061 +REAL, PARAMETER :: XURG1 = 88. +REAL, PARAMETER :: XURG2 = 1.76981E+02 +REAL, PARAMETER :: XRPG2 = 1.68000E+02 +REAL, PARAMETER :: XRP18 = 1.84000E+02 +REAL, PARAMETER :: XRPG3 = 1.53772E+02 +REAL, PARAMETER :: XURG4 = 1.95867E+02 +REAL, PARAMETER :: XUR17 = 1.72000E+02 +REAL, PARAMETER :: XRPR3 = 1.86000E+02 +REAL, PARAMETER :: XAP7 = 2.33000E+02 +REAL, PARAMETER :: XURG6 = 1.89153E+02 +REAL, PARAMETER :: XUR22 = 2.12000E+02 +REAL, PARAMETER :: XURG7 = 1.56781E+02 +REAL, PARAMETER :: XADAC = 1.56781E+02 +REAL, PARAMETER :: XRPR4 = 1.67000E+02 +REAL, PARAMETER :: XRPR7 = 1.50000E+02 +REAL, PARAMETER :: XRPG7 = 1.96059E+02 +REAL, PARAMETER :: XURG8 = 1.73777E+02 +REAL, PARAMETER :: XURG9 = 2.61676E+02 +REAL, PARAMETER :: XUR26 = 1.68000E+02 +REAL, PARAMETER :: XURG10 = 2.14834E+02 +REAL, PARAMETER :: XUR7 = 1.68000E+02 +REAL, PARAMETER :: XUR8 = 1.84000E+02 +REAL, PARAMETER :: XPAN8 = 2.63000E+02 +REAL, PARAMETER :: XARAC = 1.66000E+02 +REAL, PARAMETER :: XUR19 = 1.70000E+02 +REAL, PARAMETER :: XUR21 = 88. +REAL, PARAMETER :: XUR28 = 90. +REAL, PARAMETER :: XUR29 = 186.0 +REAL, PARAMETER :: XUR30 = 200.0 +REAL, PARAMETER :: XRP13 = 168. +REAL, PARAMETER :: XRP17 = 170.0 +REAL, PARAMETER :: XRPR9 = 154.0 +REAL, PARAMETER :: XRP12 = 152.0 +REAL, PARAMETER :: XUR3 = 202.0 +REAL, PARAMETER :: XUR23 = 144.0 +REAL, PARAMETER :: XUR31 = 220.0 +REAL, PARAMETER :: XAP1 = 183.0 +REAL, PARAMETER :: XAP6 = 197.0 +REAL, PARAMETER :: XRP14 = 188.0 +REAL, PARAMETER :: XRP19 = 204.0 +REAL, PARAMETER :: XUR2 = 152.0 +REAL, PARAMETER :: XUR14 = 181.0 +REAL, PARAMETER :: XUR27 = 164.0 +REAL, PARAMETER :: XUR11 = 172.0 +REAL, PARAMETER :: XUR15 = 201.0 +REAL, PARAMETER :: XAP10 = 217.0 +REAL, PARAMETER :: XUR20 = 256.0 +REAL, PARAMETER :: XUR34 = 240.0 +REAL, PARAMETER :: XAP11 = 287.0 +REAL, PARAMETER :: XAP12 = 303.0 +REAL, PARAMETER :: XUR5 = 170.0 +REAL, PARAMETER :: XUR6 = 170.0 +REAL, PARAMETER :: XAP8 = 215.0 +! !---------------------------------------------------------------------------- ! REAL, SAVE, DIMENSION(:,:), ALLOCATABLE :: XSURF REAL, SAVE, DIMENSION(:,:), ALLOCATABLE :: XDP - +! ! Declaration for the Bessagnet tabulation REAL, SAVE, DIMENSION(:), ALLOCATABLE :: rhi REAL, SAVE, DIMENSION(:), ALLOCATABLE :: tempi REAL, SAVE, DIMENSION(:), ALLOCATABLE :: zsu, znh, zni REAL, SAVE, DIMENSION(:,:,:,:,:,:), ALLOCATABLE :: zf - +! ! Declaration of the neuronal coefficients - +! ! .. weights REAL, SAVE, DIMENSION(:,:), ALLOCATABLE :: W1IJA,W1JKA,W2IJA,W2JKA REAL, SAVE, DIMENSION(:,:), ALLOCATABLE :: W1IJB,W1JKB,W2IJB,W2JKB @@ -234,40 +235,44 @@ REAL, SAVE, DIMENSION(:,:), ALLOCATABLE :: X1MINA,X1MAXA,X1MODA,X2MINA,X2MAXA,X2 REAL, SAVE, DIMENSION(:,:), ALLOCATABLE :: X1MINB,X1MAXB,X1MODB,X2MINB,X2MAXB,X2MODB REAL, SAVE, DIMENSION(:,:), ALLOCATABLE :: X1MINC,X1MAXC,X1MODC,X2MINC,X2MAXC,X2MODC +! ! .. counters and indices INTEGER, SAVE :: I1IA,J1JA,K1KA,I2IA,J2JA,K2KA INTEGER, SAVE :: I1IB,J1JB,K1KB,I2IB,J2JB,K2KB INTEGER, SAVE :: I1IC,J1JC,K1KC,I2IC,J2JC,K2KC - +! !---------------------------------------------------------------------------- -! aerosol lognormal parameterization -CHARACTER(LEN=4) :: CRGUNIT = 'NUMB' ! type of log-normal geometric mean radius -! !given in namelist (mass on number) - -LOGICAL :: LVARSIGI = .FALSE. ! switch to active pronostic dispersion for I mode -LOGICAL :: LVARSIGJ = .FALSE. ! switch to active pronostic dispersion for J mode -LOGICAL :: LVARSIGK = .FALSE. ! switch to active pronostic dispersion for J mode -LOGICAL :: LHETEROSO4 = .FALSE. ! switch to active sulfates heteronegeous - ! production -LOGICAL :: LRGFIX = .FALSE. ! switch to active aerosol sedimentation -LOGICAL :: LSEDIMAERO = .FALSE. ! switch to active aerosol sedimentation -REAL :: XN0IMIN = 1.E6 ! minimum particule number value for I mode / m3 -REAL :: XN0JMIN = 0.01E6 ! minimum particule number value for J mode / m3 -REAL :: XINIRADIUSI= 0.039 ! mean radius initialization for I mode (um) -REAL :: XINIRADIUSJ= 0.321 ! mean radius initialization for J mode (um) -REAL :: XINISIGI = 1.75 ! dispersion initialization for I mode -REAL :: XINISIGJ = 1.76 ! dispersion initialization for J mode -REAL :: XSIGIMIN = 1.10 ! minimum dispersion value for I mode -REAL :: XSIGJMIN = 1.10 ! minimum dispersion value for J mode -REAL :: XSIGIMAX = 3.60 ! maximum dispersion value for I mode -REAL :: XSIGJMAX = 3.60 ! maximum dispersion value for J mode -REAL :: XCOEFRADIMAX = 30. ! maximum increasement for Rg mode I -REAL :: XCOEFRADIMIN = 3. ! maximum decreasement for Rg mode I -REAL :: XCOEFRADJMAX = 30. ! maximum increasement for Rg mode J -REAL :: XCOEFRADJMIN = 10. ! maximum decreasement for Rg mode J -CHARACTER(LEN=5) :: CMINERAL = "NONE" ! mineral equilibrium scheme -CHARACTER(LEN=5) :: CORGANIC = "NONE" ! organic equilibrium scheme -CHARACTER(LEN=80) :: CNUCLEATION = "NONE" ! sulfates nucleation scheme +! aerosol lognormal parameterizations ! +CHARACTER(LEN=4) :: CRGUNIT = 'NUMB' ! type of log-normal geometric mean radius +! ! given in namelist (mass on number) +LOGICAL :: LVARSIGI = .FALSE. ! switch to active pronostic dispersion for I mode +LOGICAL :: LVARSIGJ = .FALSE. ! switch to active pronostic dispersion for J mode +LOGICAL :: LVARSIGK = .FALSE. ! switch to active pronostic dispersion for K mode, not used +LOGICAL :: LHETEROSO4 = .FALSE. ! switch to active sulfates heteronegeous production +LOGICAL :: LRGFIX = .FALSE. ! switch to active aerosol sedimentation +LOGICAL :: LSEDIMAERO = .FALSE. ! switch to active aerosol sedimentation +REAL :: XN0IMIN = 1.E4 ! minimum particule number value for I mode / m3 +REAL :: XN0JMIN = 0.01E4 ! minimum particule number value for J mode / m3 +REAL :: XINIRADIUSI = 0.030 ! mean radius initialization for I mode (um) +REAL :: XINIRADIUSJ = 0.200 ! mean radius initialization for J mode (um) +REAL :: XINISIGI = 1.75 ! dispersion initialization for I mode +REAL :: XINISIGJ = 1.76 ! dispersion initialization for J mode +REAL :: XSIGIMIN = 1.10 ! minimum dispersion value for I mode +REAL :: XSIGJMIN = 1.10 ! minimum dispersion value for J mode +REAL :: XSIGIMAX = 3.60 ! maximum dispersion value for I mode +REAL :: XSIGJMAX = 3.60 ! maximum dispersion value for J mode +REAL :: XCOEFRADIMAX = 30. ! maximum increasement for Rg mode I +REAL :: XCOEFRADIMIN = 10. ! maximum decreasement for Rg mode I +REAL :: XCOEFRADJMAX = 30. ! maximum increasement for Rg mode J +REAL :: XCOEFRADJMIN = 10. ! maximum decreasement for Rg mode J +REAL :: XRADIUS_NUCL = 2E-3 ! Radius of new particles created by nucleation [um] +REAL :: XSIGMA_NUCL = 1.5 ! Sigma of new particles created by nucleation [um] +CHARACTER(LEN=5) :: CMINERAL = "NONE" ! mineral equilibrium scheme +CHARACTER(LEN=5) :: CORGANIC = "NONE" ! organic equilibrium scheme +CHARACTER(LEN=80) :: CNUCLEATION = "NONE" ! sulfates nucleation scheme +LOGICAL :: LCONDENSATION = .TRUE. ! sulfates condensation scheme +LOGICAL :: LCOAGULATION = .TRUE. ! coagulation scheme +LOGICAL :: LMODE_MERGING = .TRUE. ! mode merging ! END MODULE MODD_CH_AEROSOL diff --git a/src/MNH/modd_csts_salt.f90 b/src/MNH/modd_csts_salt.f90 index 9db26edacaf63aa95a8388e544ed9eacf29f6308..7e8cbfe45952804f55955f49e5e50803d813fd9a 100644 --- a/src/MNH/modd_csts_salt.f90 +++ b/src/MNH/modd_csts_salt.f90 @@ -44,7 +44,8 @@ IMPLICIT NONE ! !densité salt a introduire ! ++ PIERRE / MARINE SSA DUST - MODIF ++ -REAL, PARAMETER :: XDENSITY_SALT = 2.2e3 ![kg/m3] density of dust +REAL, PARAMETER :: XDENSITY_DRYSALT = 2.160e3 ![kg/m3] density of sea salt (dry NaCl 2.160E3) +REAL, PARAMETER :: XDENSITY_SALT = 1.173e3 ![kg/m3] density of wet sea salt (Saltwater at RH80: 1.17e3) ! -- PIERRE / MARINE SSA DUST - MODIF -- REAL, PARAMETER :: XMOLARWEIGHT_SALT = 58.e-3 ![kg/mol] molar weight dust REAL, PARAMETER :: XM3TOUM3_SALT = 1.d18 ![um3/m3] conversion factor diff --git a/src/MNH/modd_dms_surf_fieldsn.F90 b/src/MNH/modd_dms_surf_fieldsn.F90 new file mode 100644 index 0000000000000000000000000000000000000000..524a1d0d01dac5720a96ad1c332727bc2df8ae0d --- /dev/null +++ b/src/MNH/modd_dms_surf_fieldsn.F90 @@ -0,0 +1,74 @@ +!SFX_LIC Copyright 1994-2014 CNRS, Meteo-France and Universite Paul Sabatier +!SFX_LIC This is part of the SURFEX software governed by the CeCILL-C licence +!SFX_LIC version 1. See LICENSE, CeCILL-C_V1-en.txt and CeCILL-C_V1-fr.txt +!SFX_LIC for details. version 1. +! #################### + MODULE MODD_DMS_SURF_FIELDS_n +! #################### +! +!!**** *MODD_DMS_SURF_FIELDS* - declaration of megan physiographic data arrays +!! +!! PURPOSE +!! ------- +! The purpose of this declarative module is to specify the +! megan physiographic data arrays. +! +!! +!! AUTHOR +!! ------ +!! P. Tulet & M. Leriche *LACy & LA* +!! +!! MODIFICATIONS +!! ------------- +!! Original 06/2017 +!------------------------------------------------------------------------------- +! +!* 0. DECLARATIONS +! ------------ +! +! +USE YOMHOOK ,ONLY : LHOOK, DR_HOOK +USE PARKIND1 ,ONLY : JPRB +! +IMPLICIT NONE + +TYPE DMS_SURF_FIELDS_t +! + INTEGER :: NDMS_NBR +! ! number of megan pgd fields chosen by user + CHARACTER(LEN=3) , DIMENSION(:), POINTER :: CDMS_AREA +! ! areas where megan pgd fields are defined +! ! 'ALL' : everywhere +! ! 'SEA' : where sea exists +! ! 'LAN' : where land exists +! ! 'WAT' : where inland water exists +! ! 'NAT' : where natural or agricultural areas exist +! ! 'TWN' : where town areas exist +! ! 'STR' : where streets are present +! ! 'BLD' : where buildings are present +! ! + CHARACTER(LEN=20), DIMENSION(:), POINTER :: CDMS_NAME +! ! name of the megan pgd fields (for information) + REAL, DIMENSION(:,:), POINTER :: XDMS_FIELDS +! ! megan pgd fields themselves +! +!------------------------------------------------------------------------------- +! +END TYPE DMS_SURF_FIELDS_t + + CONTAINS +! +! +SUBROUTINE DMS_SURF_FIELDS_INIT(YDMS_SURF_FIELDS) +TYPE(DMS_SURF_FIELDS_t), INTENT(INOUT) :: YDMS_SURF_FIELDS +REAL(KIND=JPRB) :: ZHOOK_HANDLE +IF (LHOOK) CALL DR_HOOK("MODD_DMS_SURF_FIELDS_N:DMS_SURF_FIELDS_INIT",0,ZHOOK_HANDLE) +NULLIFY(YDMS_SURF_FIELDS%CDMS_NAME) +NULLIFY(YDMS_SURF_FIELDS%CDMS_AREA) +NULLIFY(YDMS_SURF_FIELDS%XDMS_FIELDS) +YDMS_SURF_FIELDS%NDMS_NBR=0 +IF (LHOOK) CALL DR_HOOK("MODD_DMS_SURF_FIELDS_N:DMS_SURF_FIELDS_INIT",1,ZHOOK_HANDLE) +END SUBROUTINE DMS_SURF_FIELDS_INIT + + +END MODULE MODD_DMS_SURF_FIELDS_n diff --git a/src/MNH/modd_dmsn.F90 b/src/MNH/modd_dmsn.F90 new file mode 100644 index 0000000000000000000000000000000000000000..2dbb652664fda4fc18e0e1292a4ca5277ceafd9b --- /dev/null +++ b/src/MNH/modd_dmsn.F90 @@ -0,0 +1,55 @@ +!SFX_LIC Copyright 1994-2014 CNRS, Meteo-France and Universite Paul Sabatier +!SFX_LIC This is part of the SURFEX software governed by the CeCILL-C licence +!SFX_LIC version 1. See LICENSE, CeCILL-C_V1-en.txt and CeCILL-C_V1-fr.txt +!SFX_LIC for details. version 1. +! ##################### + MODULE MODD_DMS_n +! ###################### +! +!! +!! PURPOSE +!! ------- +! +! +! +!! +!!** IMPLICIT ARGUMENTS +!! ------------------ +!! None +!! +! +!! AUTHOR +!! ------ +!! P. Tulet *LAERO +!! +!! MODIFICATIONS +!! ------------- +!------------------------------------------------------------------------------ +! +!* 0. DECLARATIONS +! ------------ +! +! +USE YOMHOOK ,ONLY : LHOOK, DR_HOOK +USE PARKIND1 ,ONLY : JPRB +! +IMPLICIT NONE +! +TYPE DMS_t +! + REAL, POINTER, DIMENSION(:) :: XDMS ! contenu en DMS marin (nmole.dm-3) +! +END TYPE DMS_t + + CONTAINS +! +SUBROUTINE DMS_INIT(YDMS) +TYPE(DMS_t), INTENT(INOUT) :: YDMS +REAL(KIND=JPRB) :: ZHOOK_HANDLE +IF (LHOOK) CALL DR_HOOK("MODD_DMS_n:DMS_INIT",0,ZHOOK_HANDLE) +NULLIFY(YDMS%XDMS) +IF (LHOOK) CALL DR_HOOK("MODD_DMS_n:DMS_INIT",1,ZHOOK_HANDLE) +END SUBROUTINE DMS_INIT + + +END MODULE MODD_DMS_n diff --git a/src/MNH/modd_dust.f90 b/src/MNH/modd_dust.f90 index a99fc6f4e4a12587769ecf713b8628a525f17f96..540de108e225683892178339a0ca054f7064f0c2 100644 --- a/src/MNH/modd_dust.f90 +++ b/src/MNH/modd_dust.f90 @@ -33,7 +33,7 @@ !! !! MODIFICATIONS !! ------------- -!! +!! T. Hoarau 03/2019 add a switch for initialisation from MACC !!-------------------------------------------------------------------- !! DECLARATIONS !! ------------ @@ -42,9 +42,10 @@ USE MODD_PARAMETERS, ONLY: JPMODELMAX IMPLICIT NONE ! LOGICAL :: LDUST = .FALSE. ! switch to active pronostic dusts +LOGICAL :: LDSTCAMS = .FALSE. ! switch to active pronostic dusts from MACC LOGICAL :: LDSTINIT = .FALSE. ! switch to initialize pronostic dusts LOGICAL :: LDSTPRES = .FALSE. ! switch to know if pronostic dusts exist -LOGICAL,DIMENSION(JPMODELMAX) :: LDEPOS_DST = .FALSE. ! switch to DST wet depositon +LOGICAL,DIMENSION(JPMODELMAX) :: LDEPOS_DST = .FALSE. ! switch to DST wet deposition INTEGER :: NMODE_DST= 3 ! number of dust modes (max 3; default = 3) ! CHARACTER(LEN=6),DIMENSION(:),ALLOCATABLE :: CDUSTNAMES diff --git a/src/MNH/modd_fieldn.f90 b/src/MNH/modd_fieldn.f90 index 2e28feeae0e88d68dc7de3d6d189917ddcc66dfa..49cd8d3e5860b3a96468052aabae09bc6f79be44 100644 --- a/src/MNH/modd_fieldn.f90 +++ b/src/MNH/modd_fieldn.f90 @@ -165,6 +165,7 @@ REAL, DIMENSION(:,:,:), POINTER :: XHLI_HRI=>NULL() REAL, DIMENSION(:,:,:), POINTER :: XHLI_HCF=>NULL() REAL, DIMENSION(:,:,:), POINTER :: XSIGS=>NULL() REAL, DIMENSION(:,:,:), POINTER :: XCLDFR=>NULL() +REAL, DIMENSION(:,:,:), POINTER :: XICEFR=>NULL() REAL, DIMENSION(:,:,:), POINTER :: XRAINFR=>NULL() REAL, DIMENSION(:,:,:), POINTER :: XCIT=>NULL() REAL, DIMENSION(:,:,:), POINTER :: XTHM=>NULL() diff --git a/src/MNH/modd_getn.f90 b/src/MNH/modd_getn.f90 index f6531c4f82818662547b4332cfd7e6e2559a28f2..5978b7c2f6aafcf4f7a061d8938fab84360284f3 100644 --- a/src/MNH/modd_getn.f90 +++ b/src/MNH/modd_getn.f90 @@ -86,6 +86,8 @@ TYPE GET_t ! and SRC related to the subgrid condensation CHARACTER (LEN=4) :: CGETCLDFR ! Get indicator for the ! CLouD FRaction + CHARACTER (LEN=4) :: CGETICEFR ! Get indicator for the + ! CLouD FRaction CHARACTER (LEN=4) :: CGETSRCT ! Get indicator for SRCM ! and SRCT related to the subgrid condensation CHARACTER (LEN=4) :: CGETHL ! Get indicator for HighLow cloud @@ -123,6 +125,7 @@ CHARACTER (LEN=4), POINTER :: CGETLSUM=>NULL(), CGETLSVM=>NULL(), CGETLSWM=>NULL CHARACTER (LEN=4), POINTER :: CGETLSTHM=>NULL(), CGETLSRVM=>NULL() CHARACTER (LEN=4), POINTER :: CGETSIGS=>NULL(),CGETSRC=>NULL() CHARACTER (LEN=4), POINTER :: CGETCLDFR=>NULL() +CHARACTER (LEN=4), POINTER :: CGETICEFR=>NULL() CHARACTER (LEN=4), POINTER :: CGETSRCT=>NULL() CHARACTER (LEN=4), POINTER :: CGETHL=>NULL() CHARACTER (LEN=4), POINTER :: CGETCIT=>NULL() @@ -178,6 +181,7 @@ CGETLSRVM=>GET_MODEL(KTO)%CGETLSRVM CGETSIGS=>GET_MODEL(KTO)%CGETSIGS CGETSRC=>GET_MODEL(KTO)%CGETSRC CGETCLDFR=>GET_MODEL(KTO)%CGETCLDFR +CGETICEFR=>GET_MODEL(KTO)%CGETICEFR CGETSRCT=>GET_MODEL(KTO)%CGETSRCT CGETHL=>GET_MODEL(KTO)%CGETHL CGETCIT=>GET_MODEL(KTO)%CGETCIT diff --git a/src/MNH/modd_lesn.f90 b/src/MNH/modd_lesn.f90 index c7b54dd8d4922ec77317e5abaa5711ca49f32e11..2d2009b060cd4742732796d94958bd006eb20704 100644 --- a/src/MNH/modd_lesn.f90 +++ b/src/MNH/modd_lesn.f90 @@ -118,6 +118,7 @@ TYPE LES_t REAL, DIMENSION(:,:,:), POINTER :: XLES_MEAN_Qs=>NULL() ! saturated spec h REAL, DIMENSION(:,:,:), POINTER :: XLES_MEAN_Rc=>NULL() ! <Rc> REAL, DIMENSION(:,:,:), POINTER :: XLES_MEAN_Cf=>NULL() ! <CLDFR> + REAL, DIMENSION(:,:,:), POINTER :: XLES_MEAN_If=>NULL() ! <CLDFR> REAL, DIMENSION(:,:,:), POINTER :: XLES_MEAN_INDCf=>NULL() ! <Cf> tq rc>0 (0 OU 1) REAL, DIMENSION(:,:,:), POINTER :: XLES_MEAN_INDCf2=>NULL() ! <Cf> tq rc>1E-5 (0 OU 1) REAL, DIMENSION(:,:,:), POINTER :: XLES_MEAN_RF=>NULL() ! <RAINFR> @@ -695,6 +696,7 @@ REAL, DIMENSION(:,:,:), POINTER :: XLES_MEAN_Rehu=>NULL() REAL, DIMENSION(:,:,:), POINTER :: XLES_MEAN_Qs=>NULL() REAL, DIMENSION(:,:,:), POINTER :: XLES_MEAN_Rc=>NULL() REAL, DIMENSION(:,:,:), POINTER :: XLES_MEAN_Cf=>NULL() +REAL, DIMENSION(:,:,:), POINTER :: XLES_MEAN_If=>NULL() REAL, DIMENSION(:,:,:), POINTER :: XLES_MEAN_INDCf=>NULL() REAL, DIMENSION(:,:,:), POINTER :: XLES_MEAN_INDCf2=>NULL() REAL, DIMENSION(:,:,:), POINTER :: XLES_MEAN_RF=>NULL() @@ -1119,6 +1121,7 @@ LES_MODEL(KFROM)%XLES_MEAN_Rehu=>XLES_MEAN_Rehu LES_MODEL(KFROM)%XLES_MEAN_Qs=>XLES_MEAN_Qs LES_MODEL(KFROM)%XLES_MEAN_Rc=>XLES_MEAN_Rc LES_MODEL(KFROM)%XLES_MEAN_Cf=>XLES_MEAN_Cf +LES_MODEL(KFROM)%XLES_MEAN_If=>XLES_MEAN_If LES_MODEL(KFROM)%XLES_MEAN_INDCf=>XLES_MEAN_INDCf LES_MODEL(KFROM)%XLES_MEAN_INDCf2=>XLES_MEAN_INDCf2 LES_MODEL(KFROM)%XLES_MEAN_RF=>XLES_MEAN_RF @@ -1548,6 +1551,7 @@ XLES_MEAN_Rehu=>LES_MODEL(KTO)%XLES_MEAN_Rehu XLES_MEAN_Qs=>LES_MODEL(KTO)%XLES_MEAN_Qs XLES_MEAN_Rc=>LES_MODEL(KTO)%XLES_MEAN_Rc XLES_MEAN_Cf=>LES_MODEL(KTO)%XLES_MEAN_Cf +XLES_MEAN_If=>LES_MODEL(KTO)%XLES_MEAN_If XLES_MEAN_INDCf=>LES_MODEL(KTO)%XLES_MEAN_INDCf XLES_MEAN_INDCf2=>LES_MODEL(KTO)%XLES_MEAN_INDCf2 XLES_MEAN_RF=>LES_MODEL(KTO)%XLES_MEAN_RF diff --git a/src/MNH/modd_param_ice.f90 b/src/MNH/modd_param_ice.f90 index ddafd7516ed3313d0295d5c0b69fed2851f71783..ade107121eeb6c60d406147a6a09d104b67b59f6 100644 --- a/src/MNH/modd_param_ice.f90 +++ b/src/MNH/modd_param_ice.f90 @@ -78,6 +78,7 @@ LOGICAL, SAVE :: LSEDIM_AFTER ! sedimentation done before (.FALSE.) or after (.T ! REAL, SAVE :: XSPLIT_MAXCFL ! Maximum CFL number allowed for SPLIT scheme ! +LOGICAL,SAVE :: LSNOW_T ! Snow parameterization from Wurtz (2021) !------------------------------------------------------------------------------- ! END MODULE MODD_PARAM_ICE diff --git a/src/MNH/modd_param_lima.f90 b/src/MNH/modd_param_lima.f90 index 66156a05620e98e2662a314f7338b2453cdb5e51..cb12356ec2fc80a1ba6268b923f486edc1020b6b 100644 --- a/src/MNH/modd_param_lima.f90 +++ b/src/MNH/modd_param_lima.f90 @@ -31,6 +31,7 @@ !! MODIFICATIONS !! ------------- !! Original ??/??/13 +!! C. Barthe 14/03/2022 add CIBU and RDSF !! !------------------------------------------------------------------------------- ! @@ -58,10 +59,13 @@ LOGICAL, SAVE :: LHHONI ! TRUE to enable freezing of haze partic LOGICAL, SAVE :: LSNOW ! TRUE to enable snow and graupel LOGICAL, SAVE :: LHAIL ! TRUE to enable hail LOGICAL, SAVE :: LMEYERS ! TRUE to use Meyers nucleation +LOGICAL, SAVE :: LCIBU ! TRUE to use collisional ice breakup +LOGICAL, SAVE :: LRDSF ! TRUE to use rain drop shattering by freezing ! ! 1.2 IFN initialisation ! INTEGER, SAVE :: NMOD_IFN ! Number of IFN modes +INTEGER, SAVE :: NMOM_I ! Number of moments for pristine ice REAL, DIMENSION(JPLIMAIFNMAX), SAVE :: XIFN_CONC ! Ref. concentration of IFN(#/L) LOGICAL, SAVE :: LIFN_HOM ! True for z-homogeneous IFN concentrations CHARACTER(LEN=8), SAVE :: CIFN_SPECIES ! Internal mixing species definitions @@ -80,11 +84,13 @@ REAL, DIMENSION(:), SAVE, ALLOCATABLE :: XFRAC_REF ! AP compostion in P ! ! 1.3 Ice characteristics ! +LOGICAL, SAVE :: LSNOW_T ! TRUE to enable snow param. after Wurtz 2021 +LOGICAL, SAVE :: LMURAKAMI ! snow + liq -> graupel after Murakami (as in RAIN_ICE_RED) CHARACTER(LEN=4), SAVE :: CPRISTINE_ICE_LIMA ! Pristine type PLAT, COLU or BURO CHARACTER(LEN=4), SAVE :: CHEVRIMED_ICE_LIMA ! Heavily rimed type GRAU or HAIL REAL,SAVE :: XALPHAI,XNUI, & ! Pristine ice distribution parameters - XALPHAS,XNUS, & ! Snow/aggregate distribution parameters - XALPHAG,XNUG ! Graupel distribution parameters + XALPHAS,XNUS, & ! Snow/aggregate distribution parameters + XALPHAG,XNUG ! Graupel distribution parameters ! ! 1.4 Phillips (2013) nucleation parameterization ! @@ -113,6 +119,11 @@ REAL,SAVE :: XFACTNUC_DEP,XFACTNUC_CON ! Amplification factor for IN conc. ! DEP refers to DEPosition mode ! CON refers to CONtact mode ! +! 1.6 Collisional Ice Break Up parameterization +! +REAL,SAVE :: XNDEBRIS_CIBU ! Number of ice crystal debris produced + ! by the break up of aggregate particles +! !------------------------------------------------------------------------------- ! ! @@ -133,6 +144,7 @@ LOGICAL, SAVE :: LDEPOC ! Deposition of rc at 1st level above ground LOGICAL, SAVE :: LACTTKE ! TRUE to take into account TKE in W for activation LOGICAL, SAVE :: LADJ ! TRUE for adjustment procedure + Smax (false for diagnostic supersaturation) LOGICAL, SAVE :: LSPRO ! TRUE for prognostic supersaturation +LOGICAL, SAVE :: LKHKO ! TRUE for Scu simulation (replicates the previous KHKO scheme) ! ! 2.2 CCN initialisation ! diff --git a/src/MNH/modd_param_lima_cold.f90 b/src/MNH/modd_param_lima_cold.f90 index 64494219e13b43678a4600d0f3de3c5a3291241c..3ae77bb7637db4a10218305d0eecd76301297067 100644 --- a/src/MNH/modd_param_lima_cold.f90 +++ b/src/MNH/modd_param_lima_cold.f90 @@ -19,6 +19,8 @@ !! MODIFICATIONS !! ------------- !! Original ??/??/13 +!! C. Barthe 14/03/2022 add CIBU and RDSF +! J. Wurtz 03/2022: new snow characteristics !! !------------------------------------------------------------------------------- USE MODD_PARAMETERS, ONLY: JPSVNAMELGTMAX @@ -45,14 +47,15 @@ IMPLICIT NONE ! distribution law ! REAL,SAVE :: XLBEXI,XLBI ! Prist. ice distribution parameters -REAL,SAVE :: XLBEXS,XLBS ! Snow/agg. distribution parameters +REAL,SAVE :: XLBEXS,XLBS,XNS ! Snow/agg. distribution parameters ! REAL,SAVE :: XAI,XBI,XC_I,XDI ,XF0I,XF2I,XC1I ! Cloud ice charact. REAL,SAVE :: XF0IS,XF1IS ! (large Di vent. coef.) REAL,SAVE :: XAS,XBS,XCS,XDS,XCCS,XCXS,XF0S,XF1S,XC1S ! Snow/agg. charact. ! -REAL,SAVE :: XLBDAS_MAX ! Max values allowed for the shape - ! parameter of snow +REAL,SAVE :: XLBDAS_MIN, XLBDAS_MAX ! Max values allowed for the shape parameter of snow +REAL,SAVE :: XFVELOS ! Wurtz - snow fall speed parameterizaed after Thompson 2008 +REAL,SAVE :: XTRANS_MP_GAMMAS ! Wurtz - change between lambda value for MP and gen. gamma ! CHARACTER(LEN=JPSVNAMELGTMAX),DIMENSION(5),PARAMETER & :: CLIMA_COLD_NAMES=(/'CICE ','CIFNFREE','CIFNNUCL', & @@ -72,11 +75,11 @@ CHARACTER(LEN=JPSVNAMELGTMAX),DIMENSION(5),PARAMETER & ! --------------------- ! REAL,SAVE :: XFSEDRI,XFSEDCI, & ! Constants for sedimentation - XFSEDS, XEXSEDS ! fluxes of ice and snow + XFSEDS, XEXSEDS ! fluxes of ice and snow ! REAL,SAVE :: XNUC_DEP,XEXSI_DEP,XEX_DEP, & ! Constants for heterogeneous - XNUC_CON,XEXTT_CON,XEX_CON, & ! ice nucleation : DEP et CON - XMNU0 ! mass of nucleated ice crystal + XNUC_CON,XEXTT_CON,XEX_CON, & ! ice nucleation : DEP et CON + XMNU0 ! mass of nucleated ice crystal ! REAL,SAVE :: XRHOI_HONH,XCEXP_DIFVAP_HONH, & ! Constants for homogeneous XCOEF_DIFVAP_HONH,XRCOEF_HONH, & ! haze freezing : HHONI @@ -86,7 +89,7 @@ REAL,SAVE :: XRHOI_HONH,XCEXP_DIFVAP_HONH, & ! Constants for homogeneous XC1_HONH,XC2_HONH,XC3_HONH ! REAL,SAVE :: XC_HONC,XR_HONC, & ! Constants for homogeneous - XTEXP1_HONC,XTEXP2_HONC, & ! droplet freezing : CHONI + XTEXP1_HONC,XTEXP2_HONC, & ! droplet freezing : CHONI XTEXP3_HONC,XTEXP4_HONC, & XTEXP5_HONC ! @@ -97,7 +100,7 @@ REAL,SAVE :: XCSCNVI_MAX, XLBDASCNVI_MAX, & XR0DEPSI,XR1DEPSI ! pristine ice : SCNVI ! REAL,SAVE :: XSCFAC, & ! Constants for the Bergeron - X0DEPI,X2DEPI, & ! Findeisen process and + X0DEPI,X2DEPI, & ! Findeisen process and X0DEPS,X1DEPS,XEX0DEPS,XEX1DEPS ! deposition ! REAL,SAVE :: XDICNVS_LIM, XLBDAICNVS_LIM, & ! Constants for pristine ice @@ -106,7 +109,8 @@ REAL,SAVE :: XDICNVS_LIM, XLBDAICNVS_LIM, & ! Constants for pristine ice ! REAL,SAVE :: XCOLEXIS, & ! Constants for snow XAGGS_CLARGE1,XAGGS_CLARGE2, & ! aggregation : AGG - XAGGS_RLARGE1,XAGGS_RLARGE2 + XAGGS_RLARGE1,XAGGS_RLARGE2, & + XFIAGGS,XEXIAGGS ! !?????????????????? REAL,SAVE :: XKER_ZRNIC_A1,XKER_ZRNIC_A2 ! Long-Zrnic Kernels (ini_ice_coma) diff --git a/src/MNH/modd_param_lima_mixed.f90 b/src/MNH/modd_param_lima_mixed.f90 index f13accfc669e88fca83566c2eb72f5c2cc6f4945..6074d09fbc9df88464f18c6cf44873fa0c239477 100644 --- a/src/MNH/modd_param_lima_mixed.f90 +++ b/src/MNH/modd_param_lima_mixed.f90 @@ -14,6 +14,8 @@ !! MODIFICATIONS !! ------------- !! Original ??/??/13 +!! C. Barthe 14/03/2022 add CIBU and RDSF +! J. Wurtz 03/2022: new snow characteristics !! !------------------------------------------------------------------------------- ! @@ -48,7 +50,44 @@ REAL,SAVE :: XALPHAH,XNUH,XLBEXH,XLBH ! Hail distribution parameters ! !------------------------------------------------------------------------------- ! -!* 2. MICROPHYSICAL FACTORS - Graupel +!* 2. MICROPHYSICAL FACTORS - CIBU and RDSF +! ------------------------------------- +! +! Constants for ice-ice collision : CIBU +! +REAL, SAVE :: XDCSLIM_CIBU_MIN, & ! aggregates min diam. : 0.2 mm + XDCSLIM_CIBU_MAX, & ! aggregates max diam. : 1.0 mm + XDCGLIM_CIBU_MIN, & ! graupel min diam. : 2 mm + XGAMINC_BOUND_CIBU_SMIN, & ! Min val. of Lbda_s*dlim + XGAMINC_BOUND_CIBU_SMAX, & ! Max val. of Lbda_s*dlim + XGAMINC_BOUND_CIBU_GMIN, & ! Min val. of Lbda_g*dlim + XGAMINC_BOUND_CIBU_GMAX, & ! Max val. of Lbda_g*dlim + XCIBUINTP_S,XCIBUINTP1_S, & ! + XCIBUINTP2_S, & ! + XCIBUINTP_G,XCIBUINTP1_G, & ! + XFACTOR_CIBU_NI,XFACTOR_CIBU_RI, & ! Factor for final CIBU Eq. + XMOMGG_CIBU_1,XMOMGG_CIBU_2, & ! Moment computation + XMOMGS_CIBU_1,XMOMGS_CIBU_2, & + XMOMGS_CIBU_3 +! +REAL, DIMENSION(:,:), SAVE, ALLOCATABLE & + :: XGAMINC_CIBU_S, & ! Tab.incomplete Gamma function + XGAMINC_CIBU_G ! Tab.incomplete Gamma function +! +! Constants for raindrop shattering : RDSF +! +REAL, SAVE :: XDCRLIM_RDSF_MIN, & ! Raindrops min diam. : 0.2 mm + XGAMINC_BOUND_RDSF_RMIN, & ! Min val. of Lbda_r*dlim + XGAMINC_BOUND_RDSF_RMAX, & ! Max val. of Lbda_r*dlim + XRDSFINTP_R,XRDSFINTP1_R, & ! + XFACTOR_RDSF_NI, & ! Factor for final RDSF Eq. + XMOMGR_RDSF +! +REAL, DIMENSION(:), SAVE, ALLOCATABLE & + :: XGAMINC_RDSF_R ! Tab.incomplete Gamma function +! +! +!* 3. MICROPHYSICAL FACTORS - Graupel ! ------------------------------- ! REAL,SAVE :: XFSEDG, XEXSEDG ! Sedimentation fluxes of Graupel @@ -67,6 +106,7 @@ REAL,SAVE :: XDCSLIM,XCOLCS, & ! Constants for the riming of XEXCRIMSS,XCRIMSS, & ! the aggregates : RIM XEXCRIMSG,XCRIMSG, & ! XEXSRIMCG,XSRIMCG, & ! + XSRIMCG2, XSRIMCG3, XEXSRIMCG2, & ! Murakami 1990 XGAMINC_BOUND_MIN, & ! Min val. of Lbda_s for RIM XGAMINC_BOUND_MAX, & ! Max val. of Lbda_s for RIM XRIMINTP1,XRIMINTP2 ! Csts for lin. interpol. of @@ -75,6 +115,7 @@ INTEGER,SAVE :: NGAMINC ! Number of tab. Lbda_s REAL, DIMENSION(:), SAVE, ALLOCATABLE & :: XGAMINC_RIM1, & ! Tab. incomplete Gamma funct. XGAMINC_RIM2, & ! for XDS+2 and for XBS + XGAMINC_RIM4, & ! Murakami XGAMINC_HMC ! and for the HM process ! REAL,SAVE :: XFRACCSS, & ! Constants for the accretion @@ -132,7 +173,7 @@ REAL,DIMENSION(:,:), SAVE, ALLOCATABLE & ! !------------------------------------------------------------------------------- ! -!* 2. MICROPHYSICAL FACTORS - Hail +!* 4. MICROPHYSICAL FACTORS - Hail ! ---------------------------- ! REAL,SAVE :: XFSEDH,XEXSEDH ! Constants for sedimentation diff --git a/src/MNH/modd_param_lima_warm.f90 b/src/MNH/modd_param_lima_warm.f90 index 65a3d10279364cb382048f19ed657c7eca2d2c39..2c182b6e986a346fb9d61594316501cba7577cd9 100644 --- a/src/MNH/modd_param_lima_warm.f90 +++ b/src/MNH/modd_param_lima_warm.f90 @@ -90,8 +90,8 @@ REAL,SAVE :: XSELFC ! Constants for cloud droplet ! selfcollection : SELF ! REAL,SAVE :: XAUTO1, XAUTO2, XCAUTR, & ! Constants for cloud droplet - XLAUTR, XLAUTR_THRESHOLD, & ! autoconversion : AUT - XITAUTR, XITAUTR_THRESHOLD + XLAUTR, XLAUTR_THRESHOLD, & ! autoconversion : AUT + XITAUTR, XITAUTR_THRESHOLD, XR0 ! XR0 for KHKO autoconversion ! REAL,SAVE :: XACCR1, XACCR2, XACCR3, & ! Constants for the accretion XACCR4, XACCR5, XACCR6, & ! process @@ -105,7 +105,8 @@ REAL,SAVE :: XSPONBUD1,XSPONBUD2,XSPONBUD3, & ! Spontaneous Break-up XSPONCOEF2 ! (drop size limiter) ! REAL,SAVE :: X0EVAR, X1EVAR, & ! Constants for raindrop - XEX0EVAR, XEX1EVAR, XEX2EVAR ! evaporation: EVA + XEX0EVAR, XEX1EVAR, XEX2EVAR, & ! evaporation: EVA + XCEVAP ! for KHKO ! REAL,DIMENSION(:,:,:,:), SAVE, ALLOCATABLE :: XCONCC_INI REAL,SAVE :: XCONCR_PARAM_INI diff --git a/src/MNH/modd_prep_real.f90 b/src/MNH/modd_prep_real.f90 index 6933ae26a8f64486b93121fa44923c6a8a67774a..8fdd4cebd49d774fee350b89ea77218126d763e7 100644 --- a/src/MNH/modd_prep_real.f90 +++ b/src/MNH/modd_prep_real.f90 @@ -78,6 +78,9 @@ REAL,DIMENSION(:,:,:), ALLOCATABLE :: XPMHP_LS ! pressure minus hyd. pressure REAL,DIMENSION(:,:,:), ALLOCATABLE :: XTHV_LS ! virtual potential temperature REAL,DIMENSION(:,:,:,:), ALLOCATABLE :: XR_LS ! water mixing ratios REAL,DIMENSION(:,:,:,:), ALLOCATABLE :: XSV_LS ! scalar mixing ratios +!UPG*PT +REAL,DIMENSION(:,:,:,:), ALLOCATABLE :: XSV_LS_LIMA ! scalar mixing ratios for lima +!UPG*PT REAL,DIMENSION(:,:,:), ALLOCATABLE :: XHU_LS ! relative humidity REAL,DIMENSION(:,:,:), ALLOCATABLE :: XTKE_LS ! turbulence kinetic energy REAL,DIMENSION(:,:,:), ALLOCATABLE :: XU_LS ! pseudo zonal wind component diff --git a/src/MNH/modd_rain_ice_descr.f90 b/src/MNH/modd_rain_ice_descr.f90 index 96295e4e7841c57028903c03f50731d03b9a9c6c..6487e6e6db57f2a6fa14cee4f933cb081958b86b 100644 --- a/src/MNH/modd_rain_ice_descr.f90 +++ b/src/MNH/modd_rain_ice_descr.f90 @@ -72,11 +72,14 @@ REAL,SAVE :: XALPHAC,XNUC,XALPHAC2,XNUC2, XLBEXC ! Cloud droplet distribut REAL,DIMENSION(2), SAVE :: XLBC ! Cloud droplet distribution parameters REAL,SAVE :: XALPHAR,XNUR,XLBEXR,XLBR ! Raindrop distribution parameters REAL,SAVE :: XALPHAI,XNUI,XLBEXI,XLBI ! Cloud ice distribution parameters -REAL,SAVE :: XALPHAS,XNUS,XLBEXS,XLBS ! Snow/agg. distribution parameters +REAL,SAVE :: XALPHAS,XNUS,XLBEXS,XLBS,XNS ! Snow/agg. distribution parameters REAL,SAVE :: XALPHAG,XNUG,XLBEXG,XLBG ! Graupel distribution parameters REAL,SAVE :: XALPHAH,XNUH,XLBEXH,XLBH ! Hail distribution parameters ! -REAL,SAVE :: XLBDAR_MAX,XLBDAS_MAX,XLBDAG_MAX ! Max values allowed for the shape +REAL,SAVE :: XFVELOS ! factor for snow fall speed after Thompson (2008) +REAL,SAVE :: XTRANS_MP_GAMMAS ! coefficient to convert lambdas for gamma function +! +REAL,SAVE :: XLBDAR_MAX,XLBDAS_MIN,XLBDAS_MAX,XLBDAG_MAX ! Max values allowed for the shape ! parameters (rain,snow,graupeln) ! REAL,DIMENSION(:),SAVE,ALLOCATABLE :: XRTMIN ! Min values allowed for the mixing ratios diff --git a/src/MNH/modd_rain_ice_param.f90 b/src/MNH/modd_rain_ice_param.f90 index 7568e2a68efc91b9081f88ca55d426724038c3fc..434c4bc761d351bc6756fbdd6b5026d1a38141a3 100644 --- a/src/MNH/modd_rain_ice_param.f90 +++ b/src/MNH/modd_rain_ice_param.f90 @@ -39,7 +39,6 @@ ! ------------ ! IMPLICIT NONE -! REAL,DIMENSION(2),SAVE :: XFSEDC ! Constants for sedimentation fluxes of C REAL,SAVE :: XFSEDR,XEXSEDR, & ! Constants for sedimentation XFSEDI,XEXCSEDI,XEXRSEDI, & ! fluxes of R, I, S and G diff --git a/src/MNH/modd_salt.f90 b/src/MNH/modd_salt.f90 index 769ca39f17c464c2cf8503115eb4542dd04b9b07..e111b15db085287e012c5afaf137f9be3bd03185 100644 --- a/src/MNH/modd_salt.f90 +++ b/src/MNH/modd_salt.f90 @@ -35,16 +35,16 @@ !! ------------- !! !! 2014 P.Tulet modif XINIRADIUS_SLT and XN0MIN_SLT -!! Bielli S. 02/2019 Sea salt : significant sea wave height influences salt emission; 5 salt modes !! USE MODD_PARAMETERS, ONLY: JPMODELMAX +!USE MODD_SLT_n, ONLY : SLT_t !!-------------------------------------------------------------------- !! DECLARATIONS !! ------------ IMPLICIT NONE ! ! ++ PIERRE / MARINE SSA DUST - MODIF ++ -LOGICAL :: LSLTMACC = .FALSE. ! switch to active pronostic sea salts from MACC +LOGICAL :: LSLTCAMS = .FALSE. ! switch to active pronostic sea salts from CAMS LOGICAL :: LSALT = .FALSE. ! switch to active pronostic sea salts LOGICAL :: LONLY = .FALSE. LOGICAL :: LREAD_ONLY_HS_MACC = .FALSE. @@ -52,37 +52,39 @@ LOGICAL :: LSLTINIT = .FALSE. ! switch to initialize pronostic sea salts LOGICAL :: LSLTPRES = .FALSE. ! switch to know if pronostic salts exist LOGICAL,DIMENSION(JPMODELMAX) :: LDEPOS_SLT = .FALSE. ! switch to SLT wet depositon -!INTEGER :: NMODE_SLT= 3 ! number of sea salt modes (max 3; default = 3) -INTEGER :: NMODE_SLT= 5 ! number of sea salt modes (max 5; default = 3) -! CHARACTER(LEN=9),DIMENSION(:),ALLOCATABLE :: CDESLTNAMES CHARACTER(LEN=6),DIMENSION(:), ALLOCATABLE :: CSALTNAMES -CHARACTER(LEN=9),DIMENSION(10), PARAMETER :: YPDESLT_INI = & - (/'DESLTM31C','DESLTM32C','DESLTM33C','DESLTM34C', 'DESLTM35C', & - 'DESLTM31R','DESLTM32R','DESLTM33R', 'DESLTM34R','DESLTM35R' /) +CHARACTER(LEN=9),DIMENSION(16), PARAMETER :: YPDESLT_INI = & + (/'DESLTM31C','DESLTM32C','DESLTM33C','DESLTM34C', 'DESLTM35C','DESLTM36C', & + 'DESLTM37C','DESLTM38C',& + 'DESLTM31R','DESLTM32R','DESLTM33R', 'DESLTM34R','DESLTM35R','DESLTM36R','DESLTM37R','DESLTM38R' /) -CHARACTER(LEN=6),DIMENSION(15), PARAMETER :: YPSALT_INI = & +CHARACTER(LEN=6),DIMENSION(24), PARAMETER :: YPSALT_INI = & (/'SLTM01','SLTM31','SLTM61',& 'SLTM02','SLTM32','SLTM62',& 'SLTM03','SLTM33','SLTM63',& 'SLTM04','SLTM34','SLTM64',& - 'SLTM05','SLTM35','SLTM65' /) + 'SLTM05','SLTM35','SLTM65',& + 'SLTM06','SLTM36','SLTM66',& + 'SLTM07','SLTM37','SLTM67',& + 'SLTM08','SLTM38','SLTM68'/) + -INTEGER, DIMENSION(5),PARAMETER :: JPSALTORDER = (/1, 2, 3, 4, 5/) +INTEGER, DIMENSION(8),PARAMETER :: JPSALTORDER = (/1,2,3,4,5,6,7,8/) +INTEGER :: NMODE_SLT= 8 ! number of sea salt modes (default = 8) !Test Thomas (definir rayons et sigma ici si on veut desactiver initialisation MACC) !REAL, DIMENSION(5) :: XINIRADIUS_SLT,XINISIG_SLT,XN0MIN_SLT !Initial dry number median radius (um) from Ova et al., 2014 -REAL,DIMENSION(5) :: XINIRADIUS_SLT= (/0.009, 0.021, 0.045, 0.115, 0.415/) +REAL,DIMENSION(8) :: XINIRADIUS_SLT= (/0.009, 0.021, 0.045, 0.115,0.415,2.5, 7.0, 20.0/) !Initial, standard deviation from Ova et al., 2014 -REAL,DIMENSION(5) :: XINISIG_SLT = (/ 1.37, 1.5, 1.42, 1.53, 1.85 /) -!Minimum allowed number concentration for any mode (#/m3) -REAL,DIMENSION(5) :: XN0MIN_SLT = (/1. , 1., 1., 1., 1. /) +REAL,DIMENSION(8) :: XINISIG_SLT = (/ 1.37, 1.5, 1.42, 1.53, 1.85,1.7,1.8, 2.9 /) +!Minimum allowed number concentration for any mode (#/m3) +REAL,DIMENSION(8) :: XN0MIN_SLT = (/1.e1 , 1.e1, 1.e1, 1., 1.e-4,1.e-20, 1.e-20,1.e-20 /) !Test Thomas - REAL, DIMENSION(:,:,:), ALLOCATABLE :: XSLTMSS ! [kg/m3] total mass concentration of sea salt ! ! aerosol lognormal parameterization diff --git a/src/MNH/mode_aero_psd.f90 b/src/MNH/mode_aero_psd.f90 index cb09f546176b0effd10743502914fd36741e346f..7a18e45152de412d236f0f35c820cabb92b3d311 100644 --- a/src/MNH/mode_aero_psd.f90 +++ b/src/MNH/mode_aero_psd.f90 @@ -17,11 +17,14 @@ MODULE MODE_AERO_PSD !! to understandable aerosol variables, e.g. #/m3, kg/m3, sigma, R_{n} USE MODD_CH_AEROSOL +USE MODD_CONF, ONLY : CPROGRAM +USE MODD_CH_MNHC_n, ONLY : LCH_INIT_FIELD USE MODD_CST, ONLY : & XPI & !Definition of pi ,XAVOGADRO & ![molec/mol] avogadros number ,XMD ![kg/mol] molar weight of air USE MODD_CST, ONLY : XMNH_TINY +USE MODD_CSTS_DUST, ONLY : XDENSITY_DUST ! IMPLICIT NONE ! @@ -91,16 +94,17 @@ REAL, DIMENSION(:,:,:,:), OPTIONAL, INTENT(IN) :: PMI ! molecular weight !* 0.2 declarations local variables ! REAL, DIMENSION(SIZE(PSVT,1), SIZE(PSVT,2), SIZE(PSVT,3),NSP+NCARB+NSOA):: ZMI ! [g/mol] molar weight of aerosol -REAL :: ZRGMIN ! [um] minimum radius accepted REAL,DIMENSION(SIZE(PSVT,1), SIZE(PSVT,2), SIZE(PSVT,3),SIZE(PSVT,4)) :: ZSV ! [aerosol concentration] REAL,DIMENSION(SIZE(PSVT,1), SIZE(PSVT,2), SIZE(PSVT,3)) :: ZSIGMA ! [-] standard deviation REAL,DIMENSION(SIZE(PSVT,1),SIZE(PSVT,2),SIZE(PSVT,3),NSP+NCARB+NSOA,JPMODE):: ZCTOTA REAL,DIMENSION(SIZE(PSVT,1),SIZE(PSVT,2),SIZE(PSVT,3),JPMODE*3) :: ZM +REAL,DIMENSION(SIZE(PSVT,1),SIZE(PSVT,2),SIZE(PSVT,3),JPMODE) :: ZMASK, ZRG -REAL,DIMENSION(NSP+NCARB+NSOA) :: ZFAC ! M3 / mass conversion factor +REAL,DIMENSION(NSP+NCARB+NSOA) :: ZFAC ! M3 / mass conversion factor +REAL,DIMENSION(NSP+NCARB+NSOA) :: ZRHOI ! aerosol density REAL :: ZDEN2MOL REAL,DIMENSION(JPMODE*3) :: ZPMIN ! [aerosol units] minimum values for N, sigma, M -INTEGER :: JJ, JN ! [idx] loop counters +INTEGER :: JI,JJ,JK,JSV, JN ! [idx] loop counters REAL :: ZINIRADIUSI, ZINIRADIUSJ ! !------------------------------------------------------------------------------- @@ -114,20 +118,29 @@ ELSE ZINIRADIUSI = XINIRADIUSI ZINIRADIUSJ = XINIRADIUSJ END IF - +! Moments index +NM0(1) = 1 +NM3(1) = 2 +NM6(1) = 3 +NM0(2) = 4 +NM3(2) = 5 +NM6(2) = 6 !Get minimum values possible ZPMIN(1) = XN0IMIN - ZRGMIN = XCOEFRADIMIN * ZINIRADIUSI - ZPMIN(2) = ZPMIN(1) * (ZRGMIN**3)*EXP(4.5 * LOG(XSIGIMIN)**2) - ZPMIN(3) = ZPMIN(1) * (ZRGMIN**6)*EXP(18. * LOG(XSIGIMIN)**2) + ZPMIN(2) = ZPMIN(1) * (ZINIRADIUSI**3)*EXP(4.5 * LOG(XINISIGI)**2) + ZPMIN(3) = ZPMIN(1) * (ZINIRADIUSI**6)*EXP(18. * LOG(XINISIGI)**2) ZPMIN(4) = XN0JMIN - ZRGMIN = XCOEFRADJMIN * ZINIRADIUSJ - ZPMIN(5) = ZPMIN(4) * (ZRGMIN**3)*EXP(4.5 * LOG(XSIGJMIN)**2) - ZPMIN(6) = ZPMIN(4) * (ZRGMIN**6)*EXP(18. * LOG(XSIGJMIN)**2) + ZPMIN(5) = ZPMIN(4) * (ZINIRADIUSJ**3)*EXP(4.5 * LOG(XINISIGJ)**2) + ZPMIN(6) = ZPMIN(4) * (ZINIRADIUSJ**6)*EXP(18. * LOG(XINISIGJ)**2) +! Cf Ackermann (all to black carbon except water) !Set molecular weightn g/mol +ZRHOI(:) = 1.8e3 +ZRHOI(JP_AER_H2O) = 1.0e3 ! water +ZRHOI(JP_AER_DST) = XDENSITY_DUST ! dusts + IF(PRESENT(PMI)) THEN ZMI(:,:,:,:) = PMI(:,:,:,:) ELSE @@ -137,6 +150,7 @@ ELSE ZMI(:,:,:,JP_AER_NH3) = 17. ZMI(:,:,:,JP_AER_H2O) = 18. ZMI(:,:,:,JP_AER_BC) = 12. + ZMI(:,:,:,JP_AER_DST) = 100. IF (NSOA .EQ. 10) THEN ZMI(:,:,:,JP_AER_SOA1) = 88. ZMI(:,:,:,JP_AER_SOA2) = 180. @@ -156,9 +170,10 @@ ZDEN2MOL = 1E-6 * XAVOGADRO / XMD DO JJ=1, SIZE(PSVT,4) ZSV(:,:,:,JJ) = PSVT(:,:,:,JJ) * ZDEN2MOL * PRHODREF(:,:,:) ENDDO +ZSV(:,:,:,:) = MAX(ZSV(:,:,:,:), XMNH_TINY) ! DO JJ=1,NSP+NCARB+NSOA - ZFAC(JJ)=(4./3.)*XPI*XRHOI(JJ)*1.e-9 + ZFAC(JJ)=(4./3.)*XPI*ZRHOI(JJ)*1.e-9 ENDDO ! !------------------------------------------------------------------------------- @@ -188,6 +203,9 @@ ZCTOTA(:,:,:,:,:) = 0. ! primary black carbon ZCTOTA(:,:,:,JP_AER_BC,1) = ZSV(:,:,:,JP_CH_BCi)*ZMI(:,:,:,JP_AER_BC)/6.0221367E+11 ZCTOTA(:,:,:,JP_AER_BC,2) = ZSV(:,:,:,JP_CH_BCj)*ZMI(:,:,:,JP_AER_BC)/6.0221367E+11 +!dust + ZCTOTA(:,:,:,JP_AER_DST,1) = ZSV(:,:,:,JP_CH_DSTi)*ZMI(:,:,:,JP_AER_DST)/6.0221367E+11 + ZCTOTA(:,:,:,JP_AER_DST,2) = ZSV(:,:,:,JP_CH_DSTj)*ZMI(:,:,:,JP_AER_DST)/6.0221367E+11 ! IF (NSOA .EQ. 10) THEN ZCTOTA(:,:,:,JP_AER_SOA1,1) = ZSV(:,:,:,JP_CH_SOA1i)*ZMI(:,:,:,JP_AER_SOA1)/6.0221367E+11 @@ -228,14 +246,22 @@ ENDDO ! !* 4 set moment 0 ! - ZM(:,:,:,1)= MAX(ZSV(:,:,:,JP_CH_M0i) * 1E+6, XMNH_TINY) ! molec_{aer}/m3_{air} - ZM(:,:,:,4)= MAX(ZSV(:,:,:,JP_CH_M0j) * 1E+6, XMNH_TINY) ! molec_{aer}/m3_{air} +IF ((CPROGRAM=="REAL ").OR.(CPROGRAM=="IDEAL ")) THEN + ZM(:,:,:,1)= ZM(:,:,:,2) / ((ZINIRADIUSI**3)*EXP(4.5 * LOG(XINISIGI)**2)) + ZM(:,:,:,4)= ZM(:,:,:,5) / ((ZINIRADIUSJ**3)*EXP(4.5 * LOG(XINISIGJ)**2)) +ELSE + ZM(:,:,:,1)= MAX(ZSV(:,:,:,JP_CH_M0i) * 1E+6, XMNH_TINY) ! molec_{aer}/m3_{air} + ZM(:,:,:,4)= MAX(ZSV(:,:,:,JP_CH_M0j) * 1E+6, XMNH_TINY) ! molec_{aer}/m3_{air} +END IF ! !------------------------------------------------------------------------------- ! !* 5 set moment 6 ==> um6_{aer}/m3_{air} ! IF (LVARSIGI) THEN ! set M6 variable standard deviation + IF ((CPROGRAM=="REAL ").OR.(CPROGRAM=="IDEAL ")) THEN + ZM(:,:,:,3)= ZM(:,:,:,1) * (ZINIRADIUSJ**6)*EXP(18. * LOG(XINISIGJ)**2) + ELSE ZM(:,:,:,3) = MAX(ZSV(:,:,:,JP_CH_M6i), XMNH_TINY) ZSIGMA(:,:,:)=ZM(:,:,:,2)**2/(ZM(:,:,:,1)*ZM(:,:,:,3)) @@ -243,17 +269,13 @@ IF (LVARSIGI) THEN ! set M6 variable standard deviation ZSIGMA(:,:,:)=MAX(1E-10,ZSIGMA(:,:,:)) ZSIGMA(:,:,:)= LOG(ZSIGMA(:,:,:)) ZSIGMA(:,:,:)= EXP(1./3.*SQRT(-ZSIGMA(:,:,:))) - WHERE (ZSIGMA(:,:,:) > XSIGIMAX) - ZSIGMA(:,:,:) = XSIGIMAX - END WHERE - WHERE (ZSIGMA(:,:,:) < XSIGIMIN) - ZSIGMA(:,:,:) = XSIGIMIN - END WHERE + ZM(:,:,:,3) = ZM(:,:,:,1) & * ( (ZM(:,:,:,2)/ZM(:,:,:,1))**(1./3.) & * exp(-(3./2.)*log(ZSIGMA(:,:,:))**2))**6 & * exp(18.*log(ZSIGMA(:,:,:))**2) + END IF IF(PRESENT(PSIG3D)) PSIG3D(:,:,:,1) = ZSIGMA(:,:,:) ELSE ! fixed standard deviation @@ -266,6 +288,9 @@ ELSE ! fixed standard deviation END IF IF (LVARSIGJ) THEN ! set M6 variable standard deviation + IF ((CPROGRAM=="REAL ").OR.(CPROGRAM=="IDEAL ")) THEN + ZM(:,:,:,6)= ZM(:,:,:,4) * (ZINIRADIUSJ**6)*EXP(18. * LOG(XINISIGJ)**2) + ELSE ZM(:,:,:,6) = MAX(ZSV(:,:,:,JP_CH_M6j), XMNH_TINY) ZSIGMA(:,:,:)=ZM(:,:,:,5)**2/(ZM(:,:,:,4)*ZM(:,:,:,6)) @@ -273,17 +298,12 @@ IF (LVARSIGJ) THEN ! set M6 variable standard deviation ZSIGMA(:,:,:)=MAX(1E-10,ZSIGMA(:,:,:)) ZSIGMA(:,:,:)= LOG(ZSIGMA(:,:,:)) ZSIGMA(:,:,:)= EXP(1./3.*SQRT(-ZSIGMA(:,:,:))) - WHERE (ZSIGMA(:,:,:) > XSIGJMAX) - ZSIGMA(:,:,:) = XSIGJMAX - END WHERE - WHERE (ZSIGMA(:,:,:) < XSIGJMIN) - ZSIGMA(:,:,:) = XSIGJMIN - END WHERE ZM(:,:,:,6) = ZM(:,:,:,4) & * ( (ZM(:,:,:,5)/ZM(:,:,:,4))**(1./3.) & * exp(-(3./2.)*log(ZSIGMA(:,:,:))**2))**6 & * exp(18.*log(ZSIGMA(:,:,:))**2) + END IF IF(PRESENT(PSIG3D)) PSIG3D(:,:,:,2) = ZSIGMA(:,:,:) @@ -304,6 +324,10 @@ END IF DO JN=1,JPMODE IF(PRESENT(PN3D)) PN3D(:,:,:,JN) = ZM(:,:,:,NM0(JN)) + ZRG(:,:,:,JN) = (ZM(:,:,:,NM3(JN))**4. & + / (ZM(:,:,:,NM6(JN))*ZM(:,:,:,NM0(JN))**3.))**(1./6.) + + IF(PRESENT(PRG3D)) PRG3D(:,:,:,JN)=(ZM(:,:,:,NM3(JN))**4. & / (ZM(:,:,:,NM6(JN))*ZM(:,:,:,NM0(JN))**3.))**(1./6.) @@ -315,6 +339,223 @@ IF(PRESENT(PM3D)) PM3D(:,:,:,:) = ZM(:,:,:,:) ! END SUBROUTINE PPP2AERO ! +! ############################################################ + SUBROUTINE CON2MIX (PSVT & !I [µg/m3] O [ppp] input scalar variables (moment of distribution) + ,PRHODREF ) !I [kg/m3] density of air + +! +!! PURPOSE +!! ------- +!! conversion from µg/m3 to moments (ppp) to init aerosol profile (ch_init_field) +!! +!! REFERENCE +!! --------- +!! none +!! +!! AUTHOR +!! ------ +!! Pierre TULET (LA) +!! +!! EXTERNAL +!! -------- +!! + IMPLICIT NONE +!! +REAL, DIMENSION(:,:,:,:), INTENT(INOUT) :: PSVT !I [#/molec_{air}] first moment + !I [molec_{aer}/molec_{air} 3rd moment + !I [um6/molec_{air}*(cm3/m3)] 6th moment +REAL, DIMENSION(:,:,:), INTENT(IN) :: PRHODREF !I [kg/m3] density of air + +!* 0.2 declarations local variables +! +REAL,DIMENSION(SIZE(PSVT,1), SIZE(PSVT,2), SIZE(PSVT,3), JPMODE*3) :: ZM ! aerosols moments +REAL,DIMENSION(SIZE(PSVT,1),SIZE(PSVT,2),SIZE(PSVT,3),NSP+NCARB+NSOA,JPMODE):: ZCTOTA + +REAL,DIMENSION(NSP+NCARB+NSOA) :: ZFAC ! M3 / mass conversion factor +REAL,DIMENSION(NSP+NCARB+NSOA) :: ZRHOI ! aerosol density +REAL,DIMENSION(NSP+NCARB+NSOA) :: ZMI ! molecular weight +INTEGER :: JJ ! [idx] loop counters +REAL :: ZDEN2MOL +REAL :: ZINIRADIUSI, ZINIRADIUSJ +! +!------------------------------------------------------------------------------- +! +! 1. initialisation + +ZRHOI(:) = 1.8e3 +ZRHOI(JP_AER_H2O) = 1.0e3 ! water +ZRHOI(JP_AER_DST) = XDENSITY_DUST ! dusts +ZMI(:) = 250. +ZMI(JP_AER_SO4) = 98. +ZMI(JP_AER_NO3) = 63. +ZMI(JP_AER_NH3) = 17. +ZMI(JP_AER_H2O) = 18. +ZMI(JP_AER_BC) = 12. +ZMI(JP_AER_DST) = 100. +IF (NSOA .EQ. 10) THEN + ZMI(JP_AER_SOA1) = 88. + ZMI(JP_AER_SOA2) = 180. + ZMI(JP_AER_SOA3) = 1.5374857E2 + ZMI(JP_AER_SOA4) = 1.9586780E2 + ZMI(JP_AER_SOA5) = 195. + ZMI(JP_AER_SOA6) = 195. + ZMI(JP_AER_SOA7) = 165. + ZMI(JP_AER_SOA8) = 195. + ZMI(JP_AER_SOA9) = 270. + ZMI(JP_AER_SOA10) = 210. +END IF + + +IF (CRGUNIT=="MASS") THEN + ZINIRADIUSI = XINIRADIUSI * EXP(-3.*(LOG(XINISIGI))**2) + ZINIRADIUSJ = XINIRADIUSJ * EXP(-3.*(LOG(XINISIGJ))**2) +ELSE + ZINIRADIUSI = XINIRADIUSI + ZINIRADIUSJ = XINIRADIUSJ +END IF + +! conversion into mol.cm-3 +ZDEN2MOL = 1E-6 * XAVOGADRO / XMD + + +DO JJ=1,NSP+NCARB+NSOA + ZFAC(JJ)=(4./3.)*XPI*ZRHOI(JJ)*1.e-9 +ENDDO +! +! inorganic phase + ZCTOTA(:,:,:,JP_AER_SO4,1) = PSVT(:,:,:,JP_CH_SO4i) + ZCTOTA(:,:,:,JP_AER_SO4,2) = PSVT(:,:,:,JP_CH_SO4j) + ZCTOTA(:,:,:,JP_AER_NO3,1) = PSVT(:,:,:,JP_CH_NO3i) + ZCTOTA(:,:,:,JP_AER_NO3,2) = PSVT(:,:,:,JP_CH_NO3j) + ZCTOTA(:,:,:,JP_AER_NH3,1) = PSVT(:,:,:,JP_CH_NH3i) + ZCTOTA(:,:,:,JP_AER_NH3,2) = PSVT(:,:,:,JP_CH_NH3j) +! +! water + ZCTOTA(:,:,:,JP_AER_H2O,1) = PSVT(:,:,:,JP_CH_H2Oi) + ZCTOTA(:,:,:,JP_AER_H2O,2) = PSVT(:,:,:,JP_CH_H2Oj) +! +! primary organic carbon + ZCTOTA(:,:,:,JP_AER_OC,1) = PSVT(:,:,:,JP_CH_OCi) + ZCTOTA(:,:,:,JP_AER_OC,2) = PSVT(:,:,:,JP_CH_OCj) +! +! primary black carbon + ZCTOTA(:,:,:,JP_AER_BC,1) = PSVT(:,:,:,JP_CH_BCi) + ZCTOTA(:,:,:,JP_AER_BC,2) = PSVT(:,:,:,JP_CH_BCj) +!dust + ZCTOTA(:,:,:,JP_AER_DST,1) = PSVT(:,:,:,JP_CH_DSTi) + ZCTOTA(:,:,:,JP_AER_DST,2) = PSVT(:,:,:,JP_CH_DSTj) +! + IF (NSOA .EQ. 10) THEN + ZCTOTA(:,:,:,JP_AER_SOA1,1) = PSVT(:,:,:,JP_CH_SOA1i) + ZCTOTA(:,:,:,JP_AER_SOA1,2) = PSVT(:,:,:,JP_CH_SOA1j) + ZCTOTA(:,:,:,JP_AER_SOA2,1) = PSVT(:,:,:,JP_CH_SOA2i) + ZCTOTA(:,:,:,JP_AER_SOA2,2) = PSVT(:,:,:,JP_CH_SOA2j) + ZCTOTA(:,:,:,JP_AER_SOA3,1) = PSVT(:,:,:,JP_CH_SOA3i) + ZCTOTA(:,:,:,JP_AER_SOA3,2) = PSVT(:,:,:,JP_CH_SOA3j) + ZCTOTA(:,:,:,JP_AER_SOA4,1) = PSVT(:,:,:,JP_CH_SOA4i) + ZCTOTA(:,:,:,JP_AER_SOA4,2) = PSVT(:,:,:,JP_CH_SOA4j) + ZCTOTA(:,:,:,JP_AER_SOA5,1) = PSVT(:,:,:,JP_CH_SOA5i) + ZCTOTA(:,:,:,JP_AER_SOA5,2) = PSVT(:,:,:,JP_CH_SOA5j) + + ZCTOTA(:,:,:,JP_AER_SOA6,1) = PSVT(:,:,:,JP_CH_SOA6i) + ZCTOTA(:,:,:,JP_AER_SOA6,2) = PSVT(:,:,:,JP_CH_SOA6j) + ZCTOTA(:,:,:,JP_AER_SOA7,1) = PSVT(:,:,:,JP_CH_SOA7i) + ZCTOTA(:,:,:,JP_AER_SOA7,2) = PSVT(:,:,:,JP_CH_SOA7j) + ZCTOTA(:,:,:,JP_AER_SOA8,1) = PSVT(:,:,:,JP_CH_SOA8i) + ZCTOTA(:,:,:,JP_AER_SOA8,2) = PSVT(:,:,:,JP_CH_SOA8j) + ZCTOTA(:,:,:,JP_AER_SOA9,1) = PSVT(:,:,:,JP_CH_SOA9i) + ZCTOTA(:,:,:,JP_AER_SOA9,2) = PSVT(:,:,:,JP_CH_SOA9j) + ZCTOTA(:,:,:,JP_AER_SOA10,1) = PSVT(:,:,:,JP_CH_SOA10i) + ZCTOTA(:,:,:,JP_AER_SOA10,2) = PSVT(:,:,:,JP_CH_SOA10j) + END IF + ZCTOTA(:,:,:,:,:) = MAX(ZCTOTA(:,:,:,:,:),XMNH_TINY) + +! +!* 3 calculate moment 3 from total aerosol mass +! +ZM(:,:,:,2) = 0. +ZM(:,:,:,5) = 0. + DO JJ = 1,NSP+NCARB+NSOA + ZM(:,:,:,2) = ZM(:,:,:,2)+ZCTOTA(:,:,:,JJ,1)/ZFAC(JJ) + ZM(:,:,:,5) = ZM(:,:,:,5)+ZCTOTA(:,:,:,JJ,2)/ZFAC(JJ) + ENDDO +! +! +!* 4 calculate moment 0 from dispersion and mean radius +! +ZM(:,:,:,1)= ZM(:,:,:,2)/ & + ( (ZINIRADIUSI**3)*EXP(4.5 * LOG(XINISIGI)**2) ) + +ZM(:,:,:,4)= ZM(:,:,:,5)/ & + ( (ZINIRADIUSJ**3)*EXP(4.5 * LOG(XINISIGJ)**2) ) +! + +!* 5 calculate moment 6 from dispersion and mean radius +! +ZM(:,:,:,3) = ZM(:,:,:,1)*(ZINIRADIUSI**6) * EXP(18 *(LOG(XINISIGI))**2) +ZM(:,:,:,6) = ZM(:,:,:,4)*(ZINIRADIUSJ**6) * EXP(18 *(LOG(XINISIGJ))**2) + +!* 6 return to ppp +! inorganic phase + PSVT(:,:,:,JP_CH_SO4i) = ZCTOTA(:,:,:,JP_AER_SO4,1)*6.0221367E+11/ZMI(JP_AER_SO4) + PSVT(:,:,:,JP_CH_SO4j) = ZCTOTA(:,:,:,JP_AER_SO4,2)*6.0221367E+11/ZMI(JP_AER_SO4) + PSVT(:,:,:,JP_CH_NO3i) = ZCTOTA(:,:,:,JP_AER_NO3,1)*6.0221367E+11/ZMI(JP_AER_NO3) + PSVT(:,:,:,JP_CH_NO3j) = ZCTOTA(:,:,:,JP_AER_NO3,2)*6.0221367E+11/ZMI(JP_AER_NO3) + PSVT(:,:,:,JP_CH_NH3i) = ZCTOTA(:,:,:,JP_AER_NH3,1)*6.0221367E+11/ZMI(JP_AER_NH3) + PSVT(:,:,:,JP_CH_NH3j) = ZCTOTA(:,:,:,JP_AER_NH3,2)*6.0221367E+11/ZMI(JP_AER_NH3) +! +! water + PSVT(:,:,:,JP_CH_H2Oi) = ZCTOTA(:,:,:,JP_AER_H2O,1)*6.0221367E+11/ZMI(JP_AER_H2O) + PSVT(:,:,:,JP_CH_H2Oj) = ZCTOTA(:,:,:,JP_AER_H2O,2)*6.0221367E+11/ZMI(JP_AER_H2O) +! +! primary organic carbon + PSVT(:,:,:,JP_CH_OCi) = ZCTOTA(:,:,:,JP_AER_OC,1)*6.0221367E+11/ZMI(JP_AER_OC) + PSVT(:,:,:,JP_CH_OCj) = ZCTOTA(:,:,:,JP_AER_OC,2)*6.0221367E+11/ZMI(JP_AER_OC) +! +! primary black carbon + PSVT(:,:,:,JP_CH_BCi) = ZCTOTA(:,:,:,JP_AER_BC,1)*6.0221367E+11/ZMI(JP_AER_BC) + PSVT(:,:,:,JP_CH_BCj) = ZCTOTA(:,:,:,JP_AER_BC,2)*6.0221367E+11/ZMI(JP_AER_BC) +!dust + PSVT(:,:,:,JP_CH_DSTi) = ZCTOTA(:,:,:,JP_AER_DST,1)*6.0221367E+11/ZMI(JP_AER_DST) + PSVT(:,:,:,JP_CH_DSTj) = ZCTOTA(:,:,:,JP_AER_DST,2)*6.0221367E+11/ZMI(JP_AER_DST) +! + IF (NSOA .EQ. 10) THEN + PSVT(:,:,:,JP_CH_SOA1i) = ZCTOTA(:,:,:,JP_AER_SOA1,1)*6.0221367E+11/ZMI(JP_AER_SOA1) + PSVT(:,:,:,JP_CH_SOA1j) = ZCTOTA(:,:,:,JP_AER_SOA1,2)*6.0221367E+11/ZMI(JP_AER_SOA1) + PSVT(:,:,:,JP_CH_SOA2i) = ZCTOTA(:,:,:,JP_AER_SOA2,1)*6.0221367E+11/ZMI(JP_AER_SOA2) + PSVT(:,:,:,JP_CH_SOA2j) = ZCTOTA(:,:,:,JP_AER_SOA2,2)*6.0221367E+11/ZMI(JP_AER_SOA2) + PSVT(:,:,:,JP_CH_SOA3i) = ZCTOTA(:,:,:,JP_AER_SOA3,1)*6.0221367E+11/ZMI(JP_AER_SOA3) + PSVT(:,:,:,JP_CH_SOA3j) = ZCTOTA(:,:,:,JP_AER_SOA3,2)*6.0221367E+11/ZMI(JP_AER_SOA3) + PSVT(:,:,:,JP_CH_SOA4i) = ZCTOTA(:,:,:,JP_AER_SOA4,1)*6.0221367E+11/ZMI(JP_AER_SOA4) + PSVT(:,:,:,JP_CH_SOA4j) = ZCTOTA(:,:,:,JP_AER_SOA4,2)*6.0221367E+11/ZMI(JP_AER_SOA4) + PSVT(:,:,:,JP_CH_SOA5i) = ZCTOTA(:,:,:,JP_AER_SOA5,1)*6.0221367E+11/ZMI(JP_AER_SOA5) + PSVT(:,:,:,JP_CH_SOA5j) = ZCTOTA(:,:,:,JP_AER_SOA5,2)*6.0221367E+11/ZMI(JP_AER_SOA5) + PSVT(:,:,:,JP_CH_SOA6i) = ZCTOTA(:,:,:,JP_AER_SOA6,1)*6.0221367E+11/ZMI(JP_AER_SOA6) + PSVT(:,:,:,JP_CH_SOA6j) = ZCTOTA(:,:,:,JP_AER_SOA6,2)*6.0221367E+11/ZMI(JP_AER_SOA6) + PSVT(:,:,:,JP_CH_SOA7i) = ZCTOTA(:,:,:,JP_AER_SOA7,1)*6.0221367E+11/ZMI(JP_AER_SOA7) + PSVT(:,:,:,JP_CH_SOA7j) = ZCTOTA(:,:,:,JP_AER_SOA7,2)*6.0221367E+11/ZMI(JP_AER_SOA7) + PSVT(:,:,:,JP_CH_SOA8i) = ZCTOTA(:,:,:,JP_AER_SOA8,1)*6.0221367E+11/ZMI(JP_AER_SOA8) + PSVT(:,:,:,JP_CH_SOA8j) = ZCTOTA(:,:,:,JP_AER_SOA8,2)*6.0221367E+11/ZMI(JP_AER_SOA8) + PSVT(:,:,:,JP_CH_SOA9i) = ZCTOTA(:,:,:,JP_AER_SOA9,1)*6.0221367E+11/ZMI(JP_AER_SOA9) + PSVT(:,:,:,JP_CH_SOA9j) = ZCTOTA(:,:,:,JP_AER_SOA9,2)*6.0221367E+11/ZMI(JP_AER_SOA9) + PSVT(:,:,:,JP_CH_SOA10i) = ZCTOTA(:,:,:,JP_AER_SOA10,1)*6.0221367E+11/ZMI(JP_AER_SOA10) + PSVT(:,:,:,JP_CH_SOA10j) = ZCTOTA(:,:,:,JP_AER_SOA10,2)*6.0221367E+11/ZMI(JP_AER_SOA10) + END IF + +! +PSVT(:,:,:,JP_CH_M0i) = ZM(:,:,:,1) * 1E-6 +PSVT(:,:,:,JP_CH_M0j) = ZM(:,:,:,4) * 1E-6 + +IF (LVARSIGI) PSVT(:,:,:,JP_CH_M6i) = ZM(:,:,:,3) +IF (LVARSIGJ) PSVT(:,:,:,JP_CH_M6j) = ZM(:,:,:,6) + +DO JJ=1,SIZE(PSVT,4) + PSVT(:,:,:,JJ) = PSVT(:,:,:,JJ) / (ZDEN2MOL * PRHODREF(:,:,:)) +ENDDO + + +END SUBROUTINE CON2MIX + ! ############################################################ SUBROUTINE AERO2PPP( & PSVT & !IO [ppp] input scalar variables (moment of distribution) @@ -367,12 +608,12 @@ REAL, DIMENSION(:,:,:,:), OPTIONAL, INTENT(IN) :: PMI !O molecular weight !* 0.2 declarations local variables ! REAL,DIMENSION(SIZE(PSVT,1),SIZE(PSVT,2),SIZE(PSVT,3),NSP+NCARB+NSOA) :: ZMI ! [g/mol] molar weight of aerosol -REAL :: ZRGMIN ! [um] minimum radius accepted REAL,DIMENSION(:,:,:,:), ALLOCATABLE :: ZM ! [aerosol units] local array which goes to output later REAL,DIMENSION(JPMODE*3) :: ZPMIN ! [aerosol units] minimum values for N, sigma, M REAL,DIMENSION(SIZE(PSVT,1),SIZE(PSVT,2),SIZE(PSVT,3),NSP+NCARB+NSOA,JPMODE):: ZCTOTA REAL,DIMENSION(NSP+NCARB+NSOA) :: ZFAC ! M3 / mass conversion factor +REAL,DIMENSION(NSP+NCARB+NSOA) :: ZRHOI ! aerosol density INTEGER :: JJ ! [idx] loop counters REAL :: ZDEN2MOL REAL :: ZINIRADIUSI, ZINIRADIUSJ @@ -393,13 +634,11 @@ END IF !Get minimum values possible ZPMIN(1) = XN0IMIN -ZRGMIN = ZINIRADIUSI -ZPMIN(2) = ZPMIN(1) * (ZRGMIN**3)*EXP(4.5 * LOG(XSIGIMIN)**2) -ZPMIN(3) = ZPMIN(1) * (ZRGMIN**6)*EXP(18. * LOG(XSIGIMIN)**2) +ZPMIN(2) = ZPMIN(1) * (ZINIRADIUSI**3)*EXP(4.5 * LOG(XINISIGI)**2) +ZPMIN(3) = ZPMIN(1) * (ZINIRADIUSI**6)*EXP(18. * LOG(XINISIGI)**2) ZPMIN(4) = XN0JMIN -ZRGMIN = ZINIRADIUSJ -ZPMIN(5) = ZPMIN(4) * (ZRGMIN**3)*EXP(4.5 * LOG(XSIGJMIN)**2) -ZPMIN(6) = ZPMIN(4) * (ZRGMIN**6)*EXP(18. * LOG(XSIGJMIN)**2) +ZPMIN(5) = ZPMIN(4) * (ZINIRADIUSJ**3)*EXP(4.5 * LOG(XINISIGJ)**2) +ZPMIN(6) = ZPMIN(4) * (ZINIRADIUSJ**6)*EXP(18. * LOG(XINISIGJ)**2) ALLOCATE (ZM(SIZE(PSVT,1), SIZE(PSVT,2), SIZE(PSVT,3), JPMODE*3)) @@ -435,7 +674,7 @@ DO JJ=1, SIZE(PSVT, 4) ENDDO ! DO JJ=1,NSP+NCARB+NSOA - ZFAC(JJ)=(4./3.)*XPI*XRHOI(JJ)*1.e-9 + ZFAC(JJ)=(4./3.)*XPI*ZRHOI(JJ)*1.e-9 ENDDO ! ! @@ -500,8 +739,8 @@ ZCTOTA(:,:,:,:,:) = 0. ZM(:,:,:,2) = ZM(:,:,:,2)+ZCTOTA(:,:,:,JJ,1)/ZFAC(JJ) ZM(:,:,:,5) = ZM(:,:,:,5)+ZCTOTA(:,:,:,JJ,2)/ZFAC(JJ) ENDDO - ZM(:,:,:,2) = MAX(ZM(:,:,:,2), ZPMIN(2)) - ZM(:,:,:,5) = MAX(ZM(:,:,:,5), ZPMIN(5)) +! ZM(:,:,:,2) = MAX(ZM(:,:,:,2), ZPMIN(2)) +! ZM(:,:,:,5) = MAX(ZM(:,:,:,5), ZPMIN(5)) ! ! !* 4 calculate moment 0 from dispersion and mean radius @@ -597,17 +836,19 @@ REAL, DIMENSION(:,:), OPTIONAL, INTENT(OUT) :: PM1D !O moments 0,3 and ! !* 0.2 declarations local variables ! -REAL, DIMENSION(SIZE(PSVT,1),NSP+NCARB+NSOA) :: ZMI ! [kg/mol] molar weight of aerosol -REAL :: ZRGMIN ! [um] minimum radius accepted -REAL,DIMENSION(SIZE(PSVT,1), SIZE(PSVT,2)) :: ZSV ! [aerosol concentration] -REAL,DIMENSION(SIZE(PSVT,1)) :: ZSIGMA ! [-] standard deviation +REAL, DIMENSION(SIZE(PSVT,1),NSP+NCARB+NSOA) :: ZMI ! [kg/mol] molar weight of aerosol +REAL,DIMENSION(SIZE(PSVT,1), SIZE(PSVT,2)) :: ZSV ! [aerosol concentration] +REAL,DIMENSION(SIZE(PSVT,1)) :: ZSIGMA ! [-] standard deviation +REAL,DIMENSION(SIZE(PSVT,1),JPMODE) :: ZMASK REAL,DIMENSION(SIZE(PSVT,1),NSP+NCARB+NSOA,JPMODE):: ZCTOTA REAL,DIMENSION(SIZE(PSVT,1),JPMODE*3) :: ZM -REAL,DIMENSION(NSP+NCARB+NSOA) :: ZFAC ! M3 / mass conversion factor +REAL,DIMENSION(NSP+NCARB+NSOA) :: ZFAC ! M3 / mass conversion factor +REAL,DIMENSION(NSP+NCARB+NSOA) :: ZRHOI ! aerosol density REAL :: ZDEN2MOL -REAL,DIMENSION(JPMODE*3) :: ZPMIN ! [aerosol units] minimum values for N, sigma, M -INTEGER :: JJ, JN ! [idx] loop counters +REAL,DIMENSION(JPMODE*3) :: ZPMIN ! [aerosol units] minimum values for N, sigma, M +REAL,DIMENSION(JPMODE) :: ZRATIOBC, ZRATIOOC +INTEGER :: JJ, JN ! [idx] loop counters REAL :: ZINIRADIUSI, ZINIRADIUSJ ! !------------------------------------------------------------------------------- @@ -626,14 +867,12 @@ END IF !Get minimum values possible ZPMIN(1) = XN0IMIN - ZRGMIN = XCOEFRADIMIN * ZINIRADIUSI - ZPMIN(2) = ZPMIN(1) * (ZRGMIN**3)*EXP(4.5 * LOG(XSIGIMIN)**2) - ZPMIN(3) = ZPMIN(1) * (ZRGMIN**6)*EXP(18. * LOG(XSIGIMIN)**2) + ZPMIN(2) = ZPMIN(1) * (ZINIRADIUSI**3)*EXP(4.5 * LOG(XINISIGI)**2) + ZPMIN(3) = ZPMIN(1) * (ZINIRADIUSI**6)*EXP(18. * LOG(XINISIGI)**2) ZPMIN(4) = XN0JMIN - ZRGMIN = XCOEFRADJMIN * ZINIRADIUSJ - ZPMIN(5) = ZPMIN(4) * (ZRGMIN**3)*EXP(4.5 * LOG(XSIGJMIN)**2) - ZPMIN(6) = ZPMIN(4) * (ZRGMIN**6)*EXP(18. * LOG(XSIGJMIN)**2) + ZPMIN(5) = ZPMIN(4) * (ZINIRADIUSJ**3)*EXP(4.5 * LOG(XINISIGJ)**2) + ZPMIN(6) = ZPMIN(4) * (ZINIRADIUSJ**6)*EXP(18. * LOG(XINISIGJ)**2) !Set molecular weightn g/mol IF(PRESENT(PMI)) THEN @@ -667,7 +906,7 @@ DO JJ=1, SIZE(PSVT,2) ENDDO ! DO JJ=1,NSP+NCARB+NSOA - ZFAC(JJ)=(4./3.)*XPI*XRHOI(JJ)*1.e-9 + ZFAC(JJ)=(4./3.)*XPI*ZRHOI(JJ)*1.e-9 ENDDO ! !------------------------------------------------------------------------------- @@ -811,6 +1050,28 @@ END IF !* 6 calculate modal parameters from moments ! DO JN=1,JPMODE +!************************************************************* +! Blindages pour valeurs inferieurs au mininmum accepte +!************************************************************* + ZMASK(:,JN) = 1. + WHERE ((ZM(:,NM0(JN)) .LT. ZPMIN(NM0(JN))).OR.& + (ZM(:,NM3(JN)) .LT. ZPMIN(NM3(JN))).OR.& + (ZM(:,NM6(JN)) .LT. ZPMIN(NM6(JN)))) + + ZM(:,NM0(JN)) = ZPMIN(NM0(JN)) + ZM(:,NM3(JN)) = ZPMIN(NM3(JN)) + ZM(:,NM6(JN)) = ZPMIN(NM6(JN)) + + ZMASK(:,JN) = 0. + END WHERE + DO JJ=1,NSP+NCARB+NSOA + ZCTOTA(:,JJ,JN) = ZCTOTA(:,JJ,JN) * ZMASK(:,JN) + ENDDO + WHERE (ZMASK(:,JN) == 0.) + ZCTOTA(:,JP_AER_BC,JN) = 0.5 * ZPMIN(NM3(JN)) * ZFAC(JP_AER_BC) + ZCTOTA(:,JP_AER_OC,JN) = 0.5 * ZPMIN(NM3(JN)) * ZFAC(JP_AER_OC) + END WHERE + ! IF(PRESENT(PN1D)) PN1D(:,JN) = ZM(:,NM0(JN)) IF(PRESENT(PRG1D)) PRG1D(:,JN)=(ZM(:,NM3(JN))**4. & diff --git a/src/MNH/mode_dust_psd.f90 b/src/MNH/mode_dust_psd.f90 index 70e078f5e3cfbb18ccb941b251d86fcbc5531338..016abf4f5c41b1bdd3d86c030a9dfecfbdda06df 100644 --- a/src/MNH/mode_dust_psd.f90 +++ b/src/MNH/mode_dust_psd.f90 @@ -135,7 +135,8 @@ ALLOCATE (ZRG(SIZE(PSVT,1), SIZE(PSVT,2), SIZE(PSVT,3))) ALLOCATE (ZSV(SIZE(PSVT,1), SIZE(PSVT,2), SIZE(PSVT,3), SIZE(PSVT,4))) ALLOCATE (ZINIRADIUS(NMODE_DST)) -ZSV(:,:,:,:) = MAX(PSVT(:,:,:,:), XMNH_TINY) +!ZSV(:,:,:,:) = MAX(PSVT(:,:,:,:), XMNH_TINY) +ZSV(:,:,:,:) = PSVT(:,:,:,:) DO JN=1,NMODE_DST IMODEIDX = JPDUSTORDER(JN) @@ -154,7 +155,8 @@ DO JN=1,NMODE_DST ZMMIN(NM0(JN)) = XN0MIN(IMODEIDX) ZRGMIN = ZINIRADIUS(JN) IF (LVARSIG) THEN - ZSIGMIN = XSIGMIN +! ZSIGMIN = XSIGMIN + ZSIGMIN = XINISIG(IMODEIDX) ELSE ZSIGMIN = XINISIG(IMODEIDX) ENDIF @@ -188,7 +190,7 @@ DO JN=1,NMODE_DST * XM3TOUM3 & !==>um3_{aer}/m3_{air} / (XPI * 4./3.) !==>um3_{aer}/m3_{air} (volume ==> 3rd moment) !Limit mass concentration to minimum value - ZM(:,:,:,NM3(JN)) = MAX(ZM(:,:,:,NM3(JN)), ZMMIN(NM3(JN))) +! ZM(:,:,:,NM3(JN)) = MAX(ZM(:,:,:,NM3(JN)), ZMMIN(NM3(JN))) ! ZM(:,:,:,NM6(JN)) = ZSV(:,:,:,3+(JN-1)*3) & !um6/molec_{air}*(cm3/m3) * 1.d-6 & !==> um6/molec_{air} @@ -196,7 +198,7 @@ DO JN=1,NMODE_DST / XMD & !==> um6/kg_{air} * PRHODREF(:,:,:) !==> um6/m3_{air} !Limit m6 concentration to minimum value - ZM(:,:,:,NM6(JN)) = MAX(ZM(:,:,:,NM6(JN)), ZMMIN(NM6(JN))) +! ZM(:,:,:,NM6(JN)) = MAX(ZM(:,:,:,NM6(JN)), ZMMIN(NM6(JN))) ! !Get sigma (only if sigma is allowed to vary) !Get intermediate values for sigma M3^2/(M0*M6) (ORILAM paper, eqn 8) @@ -235,7 +237,7 @@ DO JN=1,NMODE_DST * XM3TOUM3 & !==>um3_{aer}/m3_{air} / (XPI * 4./3.) !==>um3_{aer}/m3_{air} (volume ==> 3rd moment) - ZM(:,:,:,NM3(JN)) = MAX(ZM(:,:,:,NM3(JN)), ZMMIN(NM3(JN))) +! ZM(:,:,:,NM3(JN)) = MAX(ZM(:,:,:,NM3(JN)), ZMMIN(NM3(JN))) ZM(:,:,:,NM0(JN))= ZM(:,:,:,NM3(JN))/& ((ZINIRADIUS(JN)**3)*EXP(4.5 * LOG(XINISIG(JPDUSTORDER(JN)))**2)) @@ -258,15 +260,15 @@ DO JN=1,NMODE_DST * PRHODREF(:,:,:) !==>#/m3 ! Limit concentration to minimum values - WHERE ((ZM(:,:,:,NM0(JN)) < ZMMIN(NM0(JN)) ).OR. & - (ZM(:,:,:,NM3(JN)) < ZMMIN(NM3(JN)) )) - ZM(:,:,:,NM0(JN)) = ZMMIN(NM0(JN)) - ZM(:,:,:,NM3(JN)) = ZMMIN(NM3(JN)) - PSVT(:,:,:,1+(JN-1)*2) = ZM(:,:,:,NM0(JN)) * XMD / & - (XAVOGADRO * PRHODREF(:,:,:) ) - PSVT(:,:,:,2+(JN-1)*2) = ZM(:,:,:,NM3(JN)) * XMD * XPI * 4./3. * ZRHOI / & - (ZMI*PRHODREF(:,:,:)*XM3TOUM3) - ENDWHERE +! WHERE ((ZM(:,:,:,NM0(JN)) < ZMMIN(NM0(JN)) ).OR. & +! (ZM(:,:,:,NM3(JN)) < ZMMIN(NM3(JN)) )) +! ZM(:,:,:,NM0(JN)) = ZMMIN(NM0(JN)) +! ZM(:,:,:,NM3(JN)) = ZMMIN(NM3(JN)) +! PSVT(:,:,:,1+(JN-1)*2) = ZM(:,:,:,NM0(JN)) * XMD / & +! (XAVOGADRO * PRHODREF(:,:,:) ) +! PSVT(:,:,:,2+(JN-1)*2) = ZM(:,:,:,NM3(JN)) * XMD * XPI * 4./3. * ZRHOI / & +! (ZMI*PRHODREF(:,:,:)*XM3TOUM3) +! ENDWHERE END IF ! @@ -413,7 +415,7 @@ END SUBROUTINE PPP2DUST ! ! PSVT need to be positive - PSVT(:,:,:,:) = MAX(PSVT(:,:,:,:), XMNH_TINY) +! PSVT(:,:,:,:) = MAX(PSVT(:,:,:,:), XMNH_TINY) DO JN=1,NMODE_DST IMODEIDX = JPDUSTORDER(JN) @@ -433,7 +435,8 @@ END SUBROUTINE PPP2DUST ZMMIN(NM0(JN)) = XN0MIN(IMODEIDX) ZRGMIN = ZINIRADIUS(JN) IF (LVARSIG) THEN - ZSIGMIN = XSIGMIN + ZSIGMIN = XINISIG(IMODEIDX) + ! ZSIGMIN = XSIGMIN ELSE ZSIGMIN = XINISIG(IMODEIDX) ENDIF @@ -465,7 +468,7 @@ END SUBROUTINE PPP2DUST * (1.d0/ZRHOI) & !==>m3_{aer}/m3_{air} * XM3TOUM3 & !==>um3_{aer}/m3_{air} / (XPI * 4./3.) !==>um3_{aer}/m3_{air} (volume ==> 3rd moment) - ZM(:,:,:,NM3(JN)) = MAX(ZM(:,:,:,NM3(JN)), ZMMIN(NM3(JN))) + ! ZM(:,:,:,NM3(JN)) = MAX(ZM(:,:,:,NM3(JN)), ZMMIN(NM3(JN))) ELSE ZM(:,:,:,NM3(JN)) = & PSVT(:,:,:,2+(JN-1)*2) & !molec_{aer}/molec_{aer} @@ -485,23 +488,23 @@ END SUBROUTINE PPP2DUST ZM(:,:,:,NM6(JN)) = ZM(:,:,:,NM0(JN)) * (PRG3D(:,:,:,JN)**6) * & EXP(18 *(LOG(PSIG3D(:,:,:,JN)))**2) - IF (LVARSIG) THEN - WHERE ((ZM(:,:,:,NM0(JN)) .LT. ZMMIN(NM0(JN))).OR.& - (ZM(:,:,:,NM3(JN)) .LT. ZMMIN(NM3(JN))).OR.& - (ZM(:,:,:,NM6(JN)) .LT. ZMMIN(NM6(JN)))) - ZM(:,:,:,NM0(JN)) = ZMMIN(NM0(JN)) - ZM(:,:,:,NM3(JN)) = ZMMIN(NM3(JN)) - ZM(:,:,:,NM6(JN)) = ZMMIN(NM6(JN)) - END WHERE - - ELSE IF (.NOT.(LRGFIX_DST)) THEN - - WHERE ((ZM(:,:,:,NM0(JN)) .LT. ZMMIN(NM0(JN))).OR.& - (ZM(:,:,:,NM3(JN)) .LT. ZMMIN(NM3(JN)))) - ZM(:,:,:,NM0(JN)) = ZMMIN(NM0(JN)) - ZM(:,:,:,NM3(JN)) = ZMMIN(NM3(JN)) - END WHERE - ENDIF +! IF (LVARSIG) THEN +! WHERE ((ZM(:,:,:,NM0(JN)) .LT. ZMMIN(NM0(JN))).OR.& +! (ZM(:,:,:,NM3(JN)) .LT. ZMMIN(NM3(JN))).OR.& +! (ZM(:,:,:,NM6(JN)) .LT. ZMMIN(NM6(JN)))) +! ZM(:,:,:,NM0(JN)) = ZMMIN(NM0(JN)) +! ZM(:,:,:,NM3(JN)) = ZMMIN(NM3(JN)) +! ZM(:,:,:,NM6(JN)) = ZMMIN(NM6(JN)) +! END WHERE +! +! ELSE IF (.NOT.(LRGFIX_DST)) THEN +! +! WHERE ((ZM(:,:,:,NM0(JN)) .LT. ZMMIN(NM0(JN))).OR.& +! (ZM(:,:,:,NM3(JN)) .LT. ZMMIN(NM3(JN)))) +! ZM(:,:,:,NM0(JN)) = ZMMIN(NM0(JN)) +! ZM(:,:,:,NM3(JN)) = ZMMIN(NM3(JN)) +! END WHERE +! ENDIF ! return to concentration #/m3 => (#/molec_{air} @@ -629,7 +632,8 @@ ALLOCATE (ZRG(SIZE(PSVT,1))) ALLOCATE (ZSV(SIZE(PSVT,1),SIZE(PSVT,2))) ALLOCATE (ZINIRADIUS(NMODE_DST)) -ZSV(:,:) = MAX(PSVT(:,:), XMNH_TINY) +!ZSV(:,:) = MAX(PSVT(:,:), XMNH_TINY) +ZSV(:,:) = PSVT(:,:) DO JN=1,NMODE_DST IMODEIDX = JPDUSTORDER(JN) @@ -648,7 +652,8 @@ DO JN=1,NMODE_DST ZMMIN(NM0(JN)) = XN0MIN(IMODEIDX) ZRGMIN = ZINIRADIUS(JN) IF (LVARSIG) THEN - ZSIGMIN = XSIGMIN + !ZSIGMIN = XSIGMIN + ZSIGMIN = XINISIG(IMODEIDX) ELSE ZSIGMIN = XINISIG(IMODEIDX) ENDIF @@ -682,7 +687,7 @@ DO JN=1,NMODE_DST * XM3TOUM3 & !==>um3_{aer}/m3_{air} / (XPI * 4./3.) !==>um3_{aer}/m3_{air} (volume ==> 3rd moment) !Limit mass concentration to minimum value - ZM(:,NM3(JN)) = MAX(ZM(:,NM3(JN)), ZMMIN(NM3(JN))) +! ZM(:,NM3(JN)) = MAX(ZM(:,NM3(JN)), ZMMIN(NM3(JN))) ! ZM(:,NM6(JN)) = ZSV(:,3+(JN-1)*3) & !um6/molec_{air}*(cm3/m3) * 1.d-6 & !==> um6/molec_{air} @@ -690,7 +695,7 @@ DO JN=1,NMODE_DST / XMD & !==> um6/kg_{air} * PRHODREF(:) !==> um6/m3_{air} !Limit m6 concentration to minimum value - ZM(:,NM6(JN)) = MAX(ZM(:,NM6(JN)), ZMMIN(NM6(JN))) +! ZM(:,NM6(JN)) = MAX(ZM(:,NM6(JN)), ZMMIN(NM6(JN))) ! !Get sigma (only if sigma is allowed to vary) !Get intermediate values for sigma M3^2/(M0*M6) (ORILAM paper, eqn 8) @@ -729,7 +734,7 @@ DO JN=1,NMODE_DST * XM3TOUM3 & !==>um3_{aer}/m3_{air} / (XPI * 4./3.) !==>um3_{aer}/m3_{air} (volume ==> 3rd moment) - ZM(:,NM3(JN)) = MAX(ZM(:,NM3(JN)), ZMMIN(NM3(JN))) +! ZM(:,NM3(JN)) = MAX(ZM(:,NM3(JN)), ZMMIN(NM3(JN))) ZM(:,NM0(JN))= ZM(:,NM3(JN))/& ((ZINIRADIUS(JN)**3)*EXP(4.5 * LOG(XINISIG(JPDUSTORDER(JN)))**2)) @@ -752,15 +757,15 @@ DO JN=1,NMODE_DST * PRHODREF(:) !==>#/m3 ! Limit concentration to minimum values - WHERE ((ZM(:,NM0(JN)) < ZMMIN(NM0(JN)) ).OR. & - (ZM(:,NM3(JN)) < ZMMIN(NM3(JN)) )) - ZM(:,NM0(JN)) = ZMMIN(NM0(JN)) - ZM(:,NM3(JN)) = ZMMIN(NM3(JN)) - PSVT(:,1+(JN-1)*2) = ZM(:,NM0(JN)) * XMD / & - (XAVOGADRO * PRHODREF(:) ) - PSVT(:,2+(JN-1)*2) = ZM(:,NM3(JN)) * XMD * XPI * 4./3. * ZRHOI / & - (ZMI*PRHODREF(:)*XM3TOUM3) - ENDWHERE +! WHERE ((ZM(:,NM0(JN)) < ZMMIN(NM0(JN)) ).OR. & +! (ZM(:,NM3(JN)) < ZMMIN(NM3(JN)) )) +! ZM(:,NM0(JN)) = ZMMIN(NM0(JN)) +! ZM(:,NM3(JN)) = ZMMIN(NM3(JN)) +! PSVT(:,1+(JN-1)*2) = ZM(:,NM0(JN)) * XMD / & +! (XAVOGADRO * PRHODREF(:) ) +! PSVT(:,2+(JN-1)*2) = ZM(:,NM3(JN)) * XMD * XPI * 4./3. * ZRHOI / & +! (ZMI*PRHODREF(:)*XM3TOUM3) +! ENDWHERE END IF ! diff --git a/src/MNH/mode_salt_psd.f90 b/src/MNH/mode_salt_psd.f90 index dc5a8611ef01cbc1505633c4b5a97c2a9848e699..1a4a9e799d5a6928e53e50f988b2f2f540cd86ad 100644 --- a/src/MNH/mode_salt_psd.f90 +++ b/src/MNH/mode_salt_psd.f90 @@ -140,12 +140,9 @@ ALLOCATE (ZRG(SIZE(PSVT,1), SIZE(PSVT,2), SIZE(PSVT,3))) ALLOCATE (ZSV(SIZE(PSVT,1), SIZE(PSVT,2), SIZE(PSVT,3), SIZE(PSVT,4))) ALLOCATE (ZINIRADIUS(NMODE_SLT)) -ZSV(:,:,:,:) = MAX(PSVT(:,:,:,:), XMNH_TINY) - -! ++ JORIS DBG ++ +ZSV(:,:,:,:) = PSVT(:,:,:,:) ZRG(:,:,:)= XMNH_TINY ZM(:,:,:,:)= XMNH_TINY -! -- JORIS DBG -- DO JN=1,NMODE_SLT IMODEIDX = JPSALTORDER(JN) @@ -164,7 +161,8 @@ DO JN=1,NMODE_SLT ZMMIN(NM0(JN)) = XN0MIN_SLT(IMODEIDX) ZRGMIN = ZINIRADIUS(JN) IF (LVARSIG_SLT) THEN - ZSIGMIN = XSIGMIN_SLT + ZSIGMIN = XINISIG_SLT(IMODEIDX) + ! ZSIGMIN = XSIGMIN_SLT ELSE ZSIGMIN = XINISIG_SLT(IMODEIDX) ENDIF @@ -197,8 +195,6 @@ DO JN=1,NMODE_SLT * (1.d0/ZRHOI) & !==>m3_{aer}/m3_{air} * XM3TOUM3_SALT & !==>um3_{aer}/m3_{air} / (XPI * 4./3.) !==>um3_{aer}/m3_{air} (volume ==> 3rd moment) - !Limit mass concentration to minimum value - ZM(:,:,:,NM3(JN)) = MAX(ZM(:,:,:,NM3(JN)), ZMMIN(NM3(JN))) ! ZM(:,:,:,NM6(JN)) = ZSV(:,:,:,3+(JN-1)*3) & !um6/molec_{air}*(cm3/m3) * 1.d-6 & !==> um6/molec_{air} @@ -206,7 +202,7 @@ DO JN=1,NMODE_SLT / XMD & !==> um6/kg_{air} * PRHODREF(:,:,:) !==> um6/m3_{air} !Limit m6 concentration to minimum value - ZM(:,:,:,NM6(JN)) = MAX(ZM(:,:,:,NM6(JN)), ZMMIN(NM6(JN))) +! ZM(:,:,:,NM6(JN)) = MAX(ZM(:,:,:,NM6(JN)), ZMMIN(NM6(JN))) ! !Get sigma (only if sigma is allowed to vary) !Get intermediate values for sigma M3^2/(M0*M6) (ORILAM paper, eqn 8) @@ -244,7 +240,7 @@ DO JN=1,NMODE_SLT * (1.d0/ZRHOI) & !==>m3_{aer}/m3_{air} * XM3TOUM3_SALT & !==>um3_{aer}/m3_{air} / (XPI * 4./3.) !==>um3_{aer}/m3_{air} (volume ==> 3rd moment) - ZM(:,:,:,NM3(JN)) = MAX(ZM(:,:,:,NM3(JN)), ZMMIN(NM3(JN))) +! ZM(:,:,:,NM3(JN)) = MAX(ZM(:,:,:,NM3(JN)), ZMMIN(NM3(JN))) !Modif salt/dust 5.1. beg PSVT(:,:,:,JN) = ZM(:,:,:,NM3(JN)) * XMD * XPI * 4./3. * ZRHOI / & (ZMI*PRHODREF(:,:,:)*XM3TOUM3_SALT) @@ -265,6 +261,7 @@ DO JN=1,NMODE_SLT / (XPI * 4./3.) !==>um3_{aer}/m3_{air} (volume ==> 3rd moment) + !Get number concentration (#/molec_{air}==>#/m3) ZM(:,:,:,NM0(JN))= & ZSV(:,:,:,1+(JN-1)*2) & !#/molec_{air} @@ -272,17 +269,6 @@ DO JN=1,NMODE_SLT / XMD & !==>#/kg_{air} * PRHODREF(:,:,:) !==>#/m3 - ! Limit concentration to minimum values - WHERE ((ZM(:,:,:,NM0(JN)) < ZMMIN(NM0(JN)) ).OR. & - (ZM(:,:,:,NM3(JN)) < ZMMIN(NM3(JN)) )) - ZM(:,:,:,NM0(JN)) = ZMMIN(NM0(JN)) - ZM(:,:,:,NM3(JN)) = ZMMIN(NM3(JN)) - PSVT(:,:,:,1+(JN-1)*2) = ZM(:,:,:,NM0(JN)) * XMD / & - (XAVOGADRO * PRHODREF(:,:,:) ) - PSVT(:,:,:,2+(JN-1)*2) = ZM(:,:,:,NM3(JN)) * XMD * XPI * 4./3. * ZRHOI / & - (ZMI*PRHODREF(:,:,:)*XM3TOUM3_SALT) - ENDWHERE - END IF ZM(:,:,:,NM6(JN)) = ZM(:,:,:,NM0(JN)) & @@ -315,7 +301,7 @@ DO JN=1,NMODE_SLT /(ZM(:,:,:,NM6(JN))*ZM(:,:,:,NM0(JN))*ZM(:,:,:,NM0(JN))*ZM(:,:,:,NM0(JN))) & ) & ** XSIXTH_SALT - !ZRG(:,:,:)=MIN(ZRG(:,:,:),ZINIRADIUS(JN)) + !Give the sigma-values to the passed array IF(PRESENT(PSIG3D)) PSIG3D(:,:,:,JN) = ZSIGMA(:,:,:) ! @@ -441,12 +427,6 @@ END SUBROUTINE PPP2SALT !Set molecular weight of sea salt !NOTE THAT THIS IS NOW IN KG ZMI = XMOLARWEIGHT_SALT ! - - ! PSVT need to be positive -!Modif salt/dust 5.1. beg -! PSVT(:,:,:,:) = MAX(PSVT(:,:,:,:), XMNH_TINY) -!Modif salt/dust 5.1. end - DO JN=1,NMODE_SLT IMODEIDX = JPSALTORDER(JN) !Calculations here are for one mode only @@ -465,7 +445,8 @@ END SUBROUTINE PPP2SALT ZMMIN(NM0(JN)) = XN0MIN_SLT(IMODEIDX) ZRGMIN = ZINIRADIUS(JN) IF (LVARSIG_SLT) THEN - ZSIGMIN = XSIGMIN_SLT + ZSIGMIN = XINISIG_SLT(IMODEIDX) +! ZSIGMIN = XSIGMIN_SLT ELSE ZSIGMIN = XINISIG_SLT(IMODEIDX) ENDIF @@ -517,22 +498,22 @@ END SUBROUTINE PPP2SALT ZM(:,:,:,NM6(JN)) = ZM(:,:,:,NM0(JN)) * (PRG3D(:,:,:,JN)**6) * & EXP(18 *(LOG(PSIG3D(:,:,:,JN)))**2) - IF (LVARSIG_SLT) THEN - WHERE ((ZM(:,:,:,NM0(JN)) .LT. ZMMIN(NM0(JN))).OR.& - (ZM(:,:,:,NM3(JN)) .LT. ZMMIN(NM3(JN))).OR.& - (ZM(:,:,:,NM6(JN)) .LT. ZMMIN(NM6(JN)))) - ZM(:,:,:,NM0(JN)) = ZMMIN(NM0(JN)) - ZM(:,:,:,NM3(JN)) = ZMMIN(NM3(JN)) - ZM(:,:,:,NM6(JN)) = ZMMIN(NM6(JN)) - END WHERE - ELSE IF (.NOT.(LRGFIX_SLT)) THEN - - WHERE ((ZM(:,:,:,NM0(JN)) .LT. ZMMIN(NM0(JN))).OR.& - (ZM(:,:,:,NM3(JN)) .LT. ZMMIN(NM3(JN)))) - ZM(:,:,:,NM0(JN)) = ZMMIN(NM0(JN)) - ZM(:,:,:,NM3(JN)) = ZMMIN(NM3(JN)) - END WHERE - ENDIF +! IF (LVARSIG_SLT) THEN +! WHERE ((ZM(:,:,:,NM0(JN)) .LT. ZMMIN(NM0(JN))).OR.& +! (ZM(:,:,:,NM3(JN)) .LT. ZMMIN(NM3(JN))).OR.& +! (ZM(:,:,:,NM6(JN)) .LT. ZMMIN(NM6(JN)))) +! ZM(:,:,:,NM0(JN)) = ZMMIN(NM0(JN)) +! ZM(:,:,:,NM3(JN)) = ZMMIN(NM3(JN)) +! ZM(:,:,:,NM6(JN)) = ZMMIN(NM6(JN)) +! END WHERE +! ELSE IF (.NOT.(LRGFIX_SLT)) THEN + +! WHERE ((ZM(:,:,:,NM0(JN)) .LT. ZMMIN(NM0(JN))).OR.& +! (ZM(:,:,:,NM3(JN)) .LT. ZMMIN(NM3(JN)))) +! ZM(:,:,:,NM0(JN)) = ZMMIN(NM0(JN)) +! ZM(:,:,:,NM3(JN)) = ZMMIN(NM3(JN)) +! END WHERE +! ENDIF ! return to concentration #/m3 => (#/molec_{air} diff --git a/src/MNH/modeln.f90 b/src/MNH/modeln.f90 index 9fd9da5c079211d190a13c6ae956eba9bc110075..1e183f9a4a6ff16e98568d5084adc43b94316561 100644 --- a/src/MNH/modeln.f90 +++ b/src/MNH/modeln.f90 @@ -272,6 +272,7 @@ END MODULE MODI_MODEL_n ! T. Nagel 01/02/2021: add turbulence recycling ! P. Wautelet 19/02/2021: add NEGA2 term for SV budgets ! J.L. Redelsperger 03/2021: add Call NHOA_COUPLN (coupling O & A LES version) +! C. Barthe 07/04/2022: deallocation of ZSEA !!------------------------------------------------------------------------------- ! !* 0. DECLARATIONS @@ -1807,7 +1808,7 @@ IF ((LDUST).OR.(LSALT)) THEN ! GCLD=.TRUE. IF (GCLD .AND. NRR.LE.3 ) THEN - IF( MAXVAL(XCLDFR(:,:,:)).LE. 1.E-10 .AND. GCLOUD_ONLY ) THEN + IF( MAX(MAXVAL(XCLDFR(:,:,:)),MAXVAL(XICEFR(:,:,:))).LE. 1.E-10 .AND. GCLOUD_ONLY ) THEN GCLD = .FALSE. ! only the cloudy verticals would be ! refreshed but there is no clouds END IF @@ -1895,7 +1896,7 @@ IF (CCLOUD /= 'NONE' .AND. CELEC == 'NONE') THEN ZPABST, XTHT,XRT,XSIGS,VSIGQSAT,XMFCONV,XTHM,XRCM, & XPABSM, XWT_ACT_NUC,XDTHRAD, XRTHS, XRRS, & XSVT, XRSVS, & - XSRCT, XCLDFR,XCIT, & + XSRCT, XCLDFR,XICEFR, XCIT, & LSEDIC,KACTIT, KSEDC, KSEDI, KRAIN, KWARM, KHHONI, & LCONVHG, XCF_MF,XRC_MF, XRI_MF, & XINPRC,ZINPRC3D,XINPRR, XINPRR3D, XEVAP3D, & @@ -1915,7 +1916,7 @@ IF (CCLOUD /= 'NONE' .AND. CELEC == 'NONE') THEN ZPABST, XTHT,XRT,XSIGS,VSIGQSAT,XMFCONV,XTHM,XRCM, & XPABSM, XWT_ACT_NUC,XDTHRAD, XRTHS, XRRS, & XSVT, XRSVS, & - XSRCT, XCLDFR,XCIT, & + XSRCT, XCLDFR, XICEFR, XCIT, & LSEDIC,KACTIT, KSEDC, KSEDI, KRAIN, KWARM, KHHONI, & LCONVHG, XCF_MF,XRC_MF, XRI_MF, & XINPRC,ZINPRC3D,XINPRR, XINPRR3D, XEVAP3D, & @@ -2147,16 +2148,17 @@ IF (LPROFILER) THEN CALL PROFILER_n(XTSTEP, & XXHAT, XYHAT, XZZ,XRHODREF, & XUT, XVT, XWT, XTHT, XRT, XSVT, XTKET, XTSRAD, XPABST, & - XAER, XCLDFR, XCIT,PSEA=ZSEA(:,:)) + XAER, MAX(XCLDFR,XICEFR), XCIT,PSEA=ZSEA(:,:)) DEALLOCATE(ZSEA) ELSE CALL PROFILER_n(XTSTEP, & XXHAT, XYHAT, XZZ,XRHODREF, & XUT, XVT, XWT, XTHT, XRT, XSVT, XTKET, XTSRAD, XPABST, & - XAER, XCLDFR, XCIT) + XAER, MAX(XCLDFR,XICEFR), XCIT) END IF END IF ! +IF (ALLOCATED(ZSEA)) DEALLOCATE (ZSEA) ! CALL SECOND_MNH2(ZTIME2) ! diff --git a/src/MNH/modn_ch_orilam.f90 b/src/MNH/modn_ch_orilam.f90 index f8bd5d35ea91f4c0e0e5b90a5390496931ece784..5fad03c5278e186ddb0a95cd06c6d07c9ff2bb63 100644 --- a/src/MNH/modn_ch_orilam.f90 +++ b/src/MNH/modn_ch_orilam.f90 @@ -12,42 +12,43 @@ MODULE MODN_CH_ORILAM !! ##################### !! -!!*** *MODN_CH_ORILAM* -!! !! PURPOSE !! ------- -! Namelist for ORILAM aerosol scheme parameters +!! Namelist for ORILAM aerosol scheme parameters !! -!!** AUTHOR +!! AUTHOR !! ------ !! P. Tulet *CNRM* -! +!! !! MODIFICATIONS !! ------------- -!! Original 24/02/05 -!! -!! IMPLICIT ARGUMENTS -!! ------------------ -USE MODD_CH_AEROSOL, ONLY: LORILAM, XN0IMIN, XN0JMIN, LSEDIMAERO, LAERINIT,& - LHETEROSO4, CNUCLEATION, XINISIGI, XINISIGJ, & - XINIRADIUSI, XINIRADIUSJ, LVARSIGI,& - LVARSIGJ, CMINERAL, CORGANIC,& - XSIGIMIN, XSIGIMAX,XSIGJMIN, XSIGJMAX, & - XCOEFRADIMAX, XCOEFRADIMIN, XCOEFRADJMAX, XCOEFRADJMIN,& - CRGUNIT, LRGFIX, LDEPOS_AER +!! Original 24/02/2005 !! !----------------------------------------------------------------------------- ! !* 0. DECLARATIONS ! ----------------- +! +USE MODD_CH_AEROSOL, ONLY: LORILAM, XN0IMIN, XN0JMIN, LSEDIMAERO, LAERINIT, & + LHETEROSO4, CNUCLEATION, LCONDENSATION, LMODE_MERGING, & + XRADIUS_NUCL, XSIGMA_NUCL, & + LCOAGULATION, XINISIGI, XINISIGJ, & + XINIRADIUSI, XINIRADIUSJ, LVARSIGI, & + LVARSIGJ, CMINERAL, CORGANIC, & + XSIGIMIN, XSIGIMAX,XSIGJMIN, XSIGJMAX, & + XCOEFRADIMAX, XCOEFRADIMIN, XCOEFRADJMAX, XCOEFRADJMIN, & + CRGUNIT, LRGFIX, LDEPOS_AER +! IMPLICIT NONE -SAVE -NAMELIST /NAM_CH_ORILAM/ LORILAM, XN0IMIN, XN0JMIN, LSEDIMAERO, LAERINIT, & - LHETEROSO4, CNUCLEATION, XINISIGI, XINISIGJ, & - XINIRADIUSI, XINIRADIUSJ, LVARSIGI,& - LVARSIGJ, CMINERAL, CORGANIC, & - XSIGIMIN, XSIGIMAX,XSIGJMIN, XSIGJMAX, & - XCOEFRADIMAX, XCOEFRADIMIN, XCOEFRADJMAX, XCOEFRADJMIN,& +! +NAMELIST /NAM_CH_ORILAM/ LORILAM, XN0IMIN, XN0JMIN, LSEDIMAERO, LAERINIT, & + LHETEROSO4, CNUCLEATION, LCONDENSATION, LMODE_MERGING, & + XRADIUS_NUCL, XSIGMA_NUCL, & + LCOAGULATION, XINISIGI, XINISIGJ, & + XINIRADIUSI, XINIRADIUSJ, LVARSIGI, & + LVARSIGJ, CMINERAL, CORGANIC, & + XSIGIMIN, XSIGIMAX,XSIGJMIN, XSIGJMAX, & + XCOEFRADIMAX, XCOEFRADIMIN, XCOEFRADJMAX, XCOEFRADJMIN, & CRGUNIT, LRGFIX, LDEPOS_AER ! diff --git a/src/MNH/modn_param_ice.f90 b/src/MNH/modn_param_ice.f90 index b64633ab8a18c3d5830538a63c6740fa72be9781..5f669897704cbd6fc0adee895d96c432b4b68327 100644 --- a/src/MNH/modn_param_ice.f90 +++ b/src/MNH/modn_param_ice.f90 @@ -27,6 +27,6 @@ NAMELIST/NAM_PARAM_ICE/LWARM,LSEDIC,LCONVHG,CPRISTINE_ICE,CSEDIM,LDEPOSC,XVDEPOS CSNOWRIMING,XFRACM90,NMAXITER,XMRSTEP,XTSTEP_TS, & LADJ_BEFORE, LADJ_AFTER, CFRAC_ICE_ADJUST, LCRFLIMIT, & XSPLIT_MAXCFL, CFRAC_ICE_SHALLOW_MF, LSEDIM_AFTER, & - CSUBG_RC_RR_ACCR, CSUBG_RR_EVAP, CSUBG_PR_PDF + CSUBG_RC_RR_ACCR, CSUBG_RR_EVAP, CSUBG_PR_PDF, LSNOW_T ! END MODULE MODN_PARAM_ICE diff --git a/src/MNH/modn_param_lima.f90 b/src/MNH/modn_param_lima.f90 index f86b1add06cd8ac04da64b6bac6556d924bbc223..e516ad088c7c2e6af4260abccd5bba28c0abe424 100644 --- a/src/MNH/modn_param_lima.f90 +++ b/src/MNH/modn_param_lima.f90 @@ -18,14 +18,14 @@ IMPLICIT NONE ! ! NAMELIST/NAM_PARAM_LIMA/LCOLD, LNUCL, LSEDI, LSNOW, LHAIL, LHHONI, LMEYERS,& - NMOD_IFN, XIFN_CONC, LIFN_HOM, & + NMOD_IFN, NMOM_I, XIFN_CONC, LIFN_HOM, & CIFN_SPECIES, CINT_MIXING, NMOD_IMM, NIND_SPECIE, & - CPRISTINE_ICE_LIMA, CHEVRIMED_ICE_LIMA, & + LSNOW_T, CPRISTINE_ICE_LIMA, CHEVRIMED_ICE_LIMA, & XALPHAI, XNUI, XALPHAS, XNUS, XALPHAG, XNUG, & XFACTNUC_DEP, XFACTNUC_CON, NPHILLIPS, & -! + LCIBU, XNDEBRIS_CIBU, LRDSF, LMURAKAMI, & LWARM, LACTI, LRAIN, LSEDC, LACTIT, LBOUND, LSPRO, & - LADJ, & + LADJ, LKHKO, & NMOD_CCN, XCCN_CONC, & LCCN_HOM, CCCN_MODES, HINI_CCN, HTYPE_CCN, & XALPHAC, XNUC, XALPHAR, XNUR, & diff --git a/src/MNH/phys_paramn.f90 b/src/MNH/phys_paramn.f90 index be5d47e97df870f165baa47c3b3efb1d37f95961..ef08a0077d4ee244a144c6cf400e1545f9c71316 100644 --- a/src/MNH/phys_paramn.f90 +++ b/src/MNH/phys_paramn.f90 @@ -624,7 +624,7 @@ IF (CRAD /='NONE') THEN ! IF (CRAD =='ECMW' .OR. CRAD =='ECRA') THEN IF (GRAD .AND. NRR.LE.3 ) THEN - IF( MAXVAL(XCLDFR(:,:,:)).LE. 1.E-10 .AND. OCLOUD_ONLY ) THEN + IF( MAX(MAXVAL(XCLDFR(:,:,:)),MAXVAL(XICEFR(:,:,:))).LE. 1.E-10 .AND. OCLOUD_ONLY ) THEN GRAD = .FALSE. ! only the cloudy verticals would be ! refreshed but there is no clouds END IF @@ -739,7 +739,7 @@ CALL SUNPOS_n ( XZENITH, ZCOSZEN, ZSINZEN, ZAZIMSOL ) COPWLW, COPILW, XFUDG, & NDLON, NFLEV, NRAD_DIAG, NFLUX, NRAD, NAER, NSWB_OLD, NSWB_MNH, NLWB_MNH, & NSTATM, NRAD_COLNBR, ZCOSZEN, XSEA, XCORSOL, & - XDIR_ALB, XSCA_ALB, XEMIS, XCLDFR, XCCO2, XTSRAD, XSTATM, XTHT, XRT, & + XDIR_ALB, XSCA_ALB, XEMIS, MAX(XCLDFR,XICEFR), XCCO2, XTSRAD, XSTATM, XTHT, XRT, & XPABST, XOZON, XAER,XDST_WL, XAER_CLIM, XSVT, & XDTHRAD, XFLALWD, XDIRFLASWD, XSCAFLASWD, XRHODREF, XZZ , & XRADEFF, XSWU, XSWD, XLWU, XLWD, XDTHRADSW, XDTHRADLW ) diff --git a/src/MNH/prep_ideal_case.f90 b/src/MNH/prep_ideal_case.f90 index 370e214120d671ca8fd809fd3b69ee93a26c2e6b..016f888a5973d485ff552e1eb14a990f1efc2c06 100644 --- a/src/MNH/prep_ideal_case.f90 +++ b/src/MNH/prep_ideal_case.f90 @@ -409,6 +409,11 @@ USE MODI_PGD_SURF_ATM USE MODI_ICE_ADJUST_BIS USE MODI_WRITE_PGD_SURF_ATM_n USE MODI_PREP_SURF_MNH +!UPG*PT +USE MODI_INIT_SALT +USE MODI_AER2LIMA +USE MODD_PARAM_LIMA +!UPG*PT ! !JUAN USE MODE_SPLITTINGZ_ll @@ -715,6 +720,11 @@ IF (GFOUND) READ(UNIT=NLUPRE,NML=NAM_IBM_LSF ) CALL INI_FIELD_LIST(1) ! CALL INI_FIELD_SCALARS() +!UPG*PT +! Sea salt +CALL INIT_SALT +!UPG*PT + ! IF( LEN_TRIM(CPGD_FILE) /= 0 ) THEN ! open the PGD_FILE @@ -1730,6 +1740,11 @@ CALL IO_File_close(TZEXPREFILE) ! Close the EXPRE file ! IF ( LCH_INIT_FIELD ) CALL CH_INIT_FIELD_n(1, NLUOUT, NVERB) ! +!UPG*PT +! Initialization LIMA variables by ORILAM +IF (CCLOUD == 'LIMA' .AND. ((LORILAM).OR.(LDUST).OR.(LSALT))) & + CALL AER2LIMA(XSVT, XRHODREF, XRT(:,:,:,1), XPABST, XTHT, XZZ) +!UPG*PT !------------------------------------------------------------------------------- ! !* 7. INITIALIZE LEVELSET FOR IBM diff --git a/src/MNH/prep_real_case.f90 b/src/MNH/prep_real_case.f90 index 2796da451deead2db67096d5ba9ddc2c5ffcb954..7d8dc30d52d9f6dc5a7a32ecad275580c0ad6813 100644 --- a/src/MNH/prep_real_case.f90 +++ b/src/MNH/prep_real_case.f90 @@ -391,19 +391,25 @@ ! P. Wautelet 20/05/2019: add name argument to ADDnFIELD_ll + new ADD4DFIELD_ll subroutine ! T.Nagel 02/2021: add IBM ! P. Wautelet 06/07/2021: use FINALIZE_MNH +!! M. Leriche 26/01/2022: add reading of CAMS reanalysis for chemistry +!! and/or for LIMA !------------------------------------------------------------------------------- ! !* 0. DECLARATIONS ! ------------ ! -USE MODD_CH_AEROSOL, ONLY: LORILAM, LINITPM, XINIRADIUSI, XINIRADIUSJ, & - XINISIGI, XINISIGJ, XN0IMIN, XN0JMIN, CRGUNIT +USE MODD_CH_M9_n USE MODD_CH_MNHC_n, ONLY: LUSECHAQ_n=>LUSECHAQ,LUSECHIC_n=>LUSECHIC, LUSECHEM_n=>LUSECHEM USE MODD_CONF USE MODD_CONF_n USE MODD_CST USE MODD_DIM_n -USE MODD_DUST, ONLY: LDUST, NMODE_DST, CRGUNITD, XINISIG, XINIRADIUS, XN0MIN +!UPG*PT +USE MODD_CH_AEROSOL +USE MODD_DUST, ONLY: LDUST, NMODE_DST, CRGUNITD, XINISIG, XINIRADIUS, XN0MIN,& + LDSTCAMS +!UPG*PT + USE MODD_DYN_n, CPRESOPT_n=>CPRESOPT, LRES_n=>LRES, XRES_n=>XRES , NITR_n=>NITR USE MODD_FIELD_n USE MODD_GR_FIELD_n @@ -425,7 +431,11 @@ USE MODD_PARAMETERS USE MODD_PARAM_n USE MODD_PREP_REAL USE MODD_REF_n -USE MODD_SALT, ONLY: LSALT, NMODE_SLT, CRGUNITS, XINISIG_SLT, XINIRADIUS_SLT, XN0MIN_SLT +!UPG*PT +USE MODD_SALT, ONLY: LSALT, NMODE_SLT, CRGUNITS, XINISIG_SLT, XINIRADIUS_SLT, XN0MIN_SLT,& + LSLTCAMS +USE MODD_CH_AERO_n, ONLY: XM3D, XRHOP3D, XSIG3D, XRG3D, XN3D, XCTOTA3D +!UPG*PT USE MODD_TURB_n ! USE MODE_EXTRAPOL @@ -464,8 +474,15 @@ USE MODI_PRESSURE_IN_PREP USE MODI_READ_ALL_DATA_GRIB_CASE USE MODI_READ_ALL_DATA_MESONH_CASE USE MODI_READ_ALL_NAMELISTS -USE MODI_READ_CAMS_DATA_NETCDF_CASE -USE MODI_READ_CHEM_DATA_NETCDF_CASE +!UPG*PT +!USE MODI_READ_CAMS_DATA_NETCDF_CASE +!USE MODI_READ_CHEM_DATA_NETCDF_CASE +USE MODI_READ_CHEM_DATA_MOZART_CASE +USE MODI_READ_CHEM_DATA_CAMS_CASE +USE MODI_READ_LIMA_DATA_NETCDF_CASE +USE MODI_AER2LIMA +USE MODI_CH_AER_EQM_INIT_n +!UPG*PT USE MODI_READ_VER_GRID USE MODI_SECOND_MNH USE MODI_SET_REF @@ -492,8 +509,12 @@ CHARACTER(LEN=28) :: YATMFILE ! name of the Atmospheric file CHARACTER(LEN=6) :: YATMFILETYPE! type of the Atmospheric file CHARACTER(LEN=28) :: YCHEMFILE ! name of the Chemical file CHARACTER(LEN=6) :: YCHEMFILETYPE! type of the Chemical file -CHARACTER(LEN=28) :: YCAMSFILE ! name of the input CAMS file -CHARACTER(LEN=6) :: YCAMSFILETYPE! type of the input CAMS file +!UP*PT +!CHARACTER(LEN=28) :: YCAMSFILE ! name of the input CAMS file +!CHARACTER(LEN=6) :: YCAMSFILETYPE! type of the input CAMS file +CHARACTER(LEN=28) :: YLIMAFILE ! name of the input MACC file +CHARACTER(LEN=6) :: YLIMAFILETYPE! type of the input MACC file +!UP*PT CHARACTER(LEN=28) :: YSURFFILE ! name of the Surface file CHARACTER(LEN=6) :: YSURFFILETYPE! type of the Surface file CHARACTER(LEN=28) :: YPGDFILE ! name of the physiographic data @@ -529,6 +550,7 @@ INTEGER :: JRR ! loop counter for moist var. LOGICAL :: LUSECHAQ LOGICAL :: LUSECHIC LOGICAL :: LUSECHEM +INTEGER :: JN ! TYPE(TFILEDATA),POINTER :: TZATMFILE => NULL() TYPE(TFILEDATA),POINTER :: TZPRE_REAL1FILE => NULL() @@ -550,7 +572,11 @@ XANGCONV0, XANGCONV1000, XANGCONV2000, & NAMELIST/NAM_AERO_CONF/ LORILAM, LINITPM, LDUST, XINIRADIUSI, XINIRADIUSJ,& XINISIGI, XINISIGJ, XN0IMIN, XN0JMIN, CRGUNIT, CRGUNITD,& LSALT, CRGUNITS, NMODE_DST, XINISIG, XINIRADIUS, XN0MIN,& - XINISIG_SLT, XINIRADIUS_SLT, XN0MIN_SLT, NMODE_SLT +!UPG*PT + XINISIG_SLT, XINIRADIUS_SLT, XN0MIN_SLT, NMODE_SLT, & + LDSTCAMS, LSLTCAMS,CACTCCN,CCLOUD, NMOD_IFN, NMOD_CCN +!UPG*PT + NAMELIST/NAM_CH_CONF/ LUSECHAQ,LUSECHIC,LUSECHEM ! NAMELIST/NAM_IBM_LSF/ LIBM_LSF, CIBM_TYPE, NIBM_SMOOTH, XIBM_SMOOTH @@ -559,6 +585,12 @@ NAMELIST/NAM_IBM_LSF/ LIBM_LSF, CIBM_TYPE, NIBM_SMOOTH, XIBM_SMOOTH INTEGER :: II, IJ, IGRID, ILENGTH CHARACTER (LEN=100) :: HCOMMENT TYPE(LIST_ll), POINTER :: TZFIELDS_ll=>NULL() ! list of fields to exchange +!UPG*PT +REAL, DIMENSION(:,:,:), ALLOCATABLE :: ZLBXRHO, ZLBYRHO +REAL, DIMENSION(:,:,:), ALLOCATABLE :: ZLBXZZ, ZLBYZZ +REAL, DIMENSION(:,:,:), ALLOCATABLE :: ZLBXPABST, ZLBYPABST +INTEGER :: ILBX,ILBY,IIB,IJB,IIE,IJE +!UPG*PT !------------------------------------------------------------------------------- ! @@ -595,7 +627,10 @@ CALL OPEN_PRC_FILES(TZPRE_REAL1FILE,YATMFILE, YATMFILETYPE,TZATMFILE & ,YCHEMFILE,YCHEMFILETYPE & ,YSURFFILE,YSURFFILETYPE & ,YPGDFILE,TPGDFILE & - ,YCAMSFILE,YCAMSFILETYPE) +!UPG*PT +! ,YCAMSFILE,YCAMSFILETYPE) + ,YLIMAFILE,YLIMAFILETYPE) +!UPG*PT ILUOUT0 = TLUOUT0%NLU TLUOUT => TLUOUT0 ! @@ -761,27 +796,57 @@ ELSE L2D=.FALSE. END IF ! +! UPG*PT !* 5.1 reading of the input chemical data ! +!IF(LEN_TRIM(YCHEMFILE)>0)THEN +! ! read again Nam_aero_conf +! CALL POSNAM(IPRE_REAL1,'NAM_AERO_CONF',GFOUND,ILUOUT0) +! IF (GFOUND) READ(IPRE_REAL1,NAM_AERO_CONF) +! IF(YCHEMFILETYPE=='GRIBEX') & +! CALL READ_ALL_DATA_GRIB_CASE('CHEM',TZPRE_REAL1FILE,YCHEMFILE,TPGDFILE,ZHORI,NVERB,LDUMMY_REAL) +! IF (YCHEMFILETYPE=='NETCDF') & +! CALL READ_CHEM_DATA_NETCDF_CASE(TZPRE_REAL1FILE,YCHEMFILE,TPGDFILE,ZHORI,NVERB,LDUMMY_REAL) +!END IF +! +!* 5.2 reading the input CAMS data +! +!IF(LEN_TRIM(YCAMSFILE)>0)THEN +! IF(YCAMSFILETYPE=='NETCDF') THEN +! CALL READ_CAMS_DATA_NETCDF_CASE(TZPRE_REAL1FILE,YCAMSFILE,TPGDFILE,ZHORI,NVERB,LDUMMY_REAL) +! ELSE +! CALL PRINT_MSG(NVERB_FATAL,'GEN','PREP_REAL_CASE','CANNOT READ CAMS GRIB FILES YET') +! END IF +!END IF +!* 5.1 reading CAMS or MACC files for init LIMA +! +IF(LEN_TRIM(YLIMAFILE)>0)THEN + IF(YLIMAFILETYPE=='NETCDF') THEN + CALL READ_LIMA_DATA_NETCDF_CASE(TZPRE_REAL1FILE,YLIMAFILE,TPGDFILE,ZHORI,NVERB,LDUMMY_REAL) + ELSE + WRITE(ILUOUT0,FMT=*) + !callabortstop + CALL PRINT_MSG(NVERB_FATAL,'GEN','PREP_REAL_CASE','Pb in MACC/CAMS file') + STOP + END IF +END IF +! +!* 5.2 reading of the input chemical data + dusts + salts if needed +! IF(LEN_TRIM(YCHEMFILE)>0)THEN ! read again Nam_aero_conf CALL POSNAM(IPRE_REAL1,'NAM_AERO_CONF',GFOUND,ILUOUT0) IF (GFOUND) READ(IPRE_REAL1,NAM_AERO_CONF) IF(YCHEMFILETYPE=='GRIBEX') & CALL READ_ALL_DATA_GRIB_CASE('CHEM',TZPRE_REAL1FILE,YCHEMFILE,TPGDFILE,ZHORI,NVERB,LDUMMY_REAL) - IF (YCHEMFILETYPE=='NETCDF') & - CALL READ_CHEM_DATA_NETCDF_CASE(TZPRE_REAL1FILE,YCHEMFILE,TPGDFILE,ZHORI,NVERB,LDUMMY_REAL) -END IF -! -!* 5.2 reading the input CAMS data -! -IF(LEN_TRIM(YCAMSFILE)>0)THEN - IF(YCAMSFILETYPE=='NETCDF') THEN - CALL READ_CAMS_DATA_NETCDF_CASE(TZPRE_REAL1FILE,YCAMSFILE,TPGDFILE,ZHORI,NVERB,LDUMMY_REAL) - ELSE - CALL PRINT_MSG(NVERB_FATAL,'GEN','PREP_REAL_CASE','CANNOT READ CAMS GRIB FILES YET') - END IF + IF (YCHEMFILETYPE=='MOZART') & + CALL READ_CHEM_DATA_MOZART_CASE(TZPRE_REAL1FILE,YCHEMFILE,TPGDFILE,ZHORI,NVERB,LDUMMY_REAL) + IF (YCHEMFILETYPE=='CAMSEU') & + CALL READ_CHEM_DATA_CAMS_CASE(TZPRE_REAL1FILE,YCHEMFILE,TPGDFILE,ZHORI,NVERB, & + LDUMMY_REAL,LUSECHEM) END IF + +!UPG*PT ! CALL IO_File_close(TZPRE_REAL1FILE) ! @@ -921,10 +986,23 @@ END IF IF (LEN_TRIM(YCHEMFILE)>0 .AND. YCHEMFILETYPE=='GRIBEX') THEN CALL VER_PREP_GRIBEX_CASE('CHEM',ZDG) END IF -IF ((LEN_TRIM(YCHEMFILE)>0 .AND. YCHEMFILETYPE=='NETCDF') .OR. & - (LEN_TRIM(YCAMSFILE)>0 .AND. YCAMSFILETYPE=='NETCDF')) THEN - CALL VER_PREP_NETCDF_CASE(ZDG) +!UPG*PT +!IF ((LEN_TRIM(YCHEMFILE)>0 .AND. YCHEMFILETYPE=='NETCDF') .OR. & +! (LEN_TRIM(YCAMSFILE)>0 .AND. YCAMSFILETYPE=='NETCDF')) THEN +! CALL VER_PREP_NETCDF_CASE(ZDG) +!END IF +IF (LEN_TRIM(YCHEMFILE)>0 .AND. ((YCHEMFILETYPE=='MOZART').OR. & + (YCHEMFILETYPE=='CAMSEU'))) THEN + CALL VER_PREP_NETCDF_CASE(ZDG,XSV_LS) + + DEALLOCATE(XSV_LS) +END IF +! +IF (LEN_TRIM(YLIMAFILE)>0 .AND. YLIMAFILETYPE=='NETCDF') THEN + CALL VER_PREP_NETCDF_CASE(ZDG,XSV_LS_LIMA) + DEALLOCATE(XSV_LS_LIMA) END IF +!UPG*PT ! CALL SECOND_MNH(ZTIME2) ZPREP = ZTIME2 - ZTIME1 - ZDG @@ -1011,13 +1089,77 @@ IF(LEN_TRIM(YCHEMFILE)>0 .AND. YCHEMFILETYPE=='MESONH')THEN LHORELAX_SVAER = (NSV_AER > 0) ELSE ! -IF (LEN_TRIM(YCAMSFILE)>0 .AND. YCAMSFILETYPE=='NETCDF') THEN +!UPG*PT +!IF (LEN_TRIM(YCAMSFILE)>0 .AND. YCAMSFILETYPE=='NETCDF') THEN +IF (LEN_TRIM(YLIMAFILE)>0 .AND. YLIMAFILETYPE=='NETCDF') THEN +!UPG*PT CALL LIMA_MIXRAT_TO_NCONC(XPABST, XTHT, XRT(:,:,:,1), XSV_MX) END IF ! CALL INI_PROG_VAR(XTKE_MX,XSV_MX) END IF ! + +! Initialization of ORILAM variables +IF (LORILAM) THEN + IF (.NOT.(ASSOCIATED(XN3D))) ALLOCATE(XN3D(SIZE(XSVT,1),SIZE(XSVT,2),SIZE(XSVT,3),JPMODE)) + IF (.NOT.(ASSOCIATED(XRG3D))) ALLOCATE(XRG3D(SIZE(XSVT,1),SIZE(XSVT,2),SIZE(XSVT,3),JPMODE)) + IF (.NOT.(ASSOCIATED(XSIG3D))) ALLOCATE(XSIG3D(SIZE(XSVT,1),SIZE(XSVT,2),SIZE(XSVT,3),JPMODE)) + IF (.NOT.(ASSOCIATED(XRHOP3D))) ALLOCATE(XRHOP3D(SIZE(XSVT,1),SIZE(XSVT,2),SIZE(XSVT,3),JPMODE)) + IF (.NOT.(ASSOCIATED(XM3D))) ALLOCATE(XM3D(SIZE(XSVT,1),SIZE(XSVT,2),SIZE(XSVT,3),JPMODE*3)) + IF (.NOT.(ASSOCIATED(XCTOTA3D))) & + ALLOCATE(XCTOTA3D(SIZE(XSVT,1),SIZE(XSVT,2),SIZE(XSVT,3),NSP+NCARB+NSOA,JPMODE)) + + CALL CH_AER_EQM_INIT_n(XSVT(:,:,:,NSV_CHEMBEG:NSV_CHEMEND),& + XSVT(:,:,:,NSV_AERBEG:NSV_AEREND),& + XM3D,XRHOP3D,XSIG3D,& + XRG3D,XN3D, XRHODREF, XCTOTA3D) +END IF +! +! Initialization LIMA variables by ORILAM +IF (CCLOUD == 'LIMA' .AND. ((LORILAM).OR.(LDUST).OR.(LSALT))) THEN + + ! Init LIMA by ORILAM + CALL AER2LIMA(XSVT, XRHODREF, XRT(:,:,:,1), XPABST, XTHT,XZZ) + + ! Init LB LIMA by ORILAM + ALLOCATE(ZLBXRHO(SIZE(XLBXSVM,1), SIZE(XLBXSVM,2), SIZE(XLBXSVM,3))) + ALLOCATE(ZLBYRHO(SIZE(XLBYSVM,1), SIZE(XLBYSVM,2), SIZE(XLBYSVM,3))) + ALLOCATE(ZLBXPABST(SIZE(XLBXSVM,1), SIZE(XLBXSVM,2), SIZE(XLBXSVM,3))) + ALLOCATE(ZLBYPABST(SIZE(XLBYSVM,1), SIZE(XLBYSVM,2), SIZE(XLBYSVM,3))) + ALLOCATE(ZLBXZZ(SIZE(XLBXSVM,1), SIZE(XLBXSVM,2), SIZE(XLBXSVM,3))) + ALLOCATE(ZLBYZZ(SIZE(XLBYSVM,1), SIZE(XLBYSVM,2), SIZE(XLBYSVM,3))) + + ILBX=SIZE(XLBXSVM,1)/2-JPHEXT + ILBY=SIZE(XLBYSVM,2)/2-JPHEXT + + CALL GET_INDICE_ll (IIB,IJB,IIE,IJE) + + ZLBXRHO(1:ILBX+1,:,:) = XRHODREF(IIB-1:IIB-1+ILBX,:,:) + ZLBXRHO(ILBX+2:2*ILBX+2,:,:) = XRHODREF(IIE+1-ILBX:IIE+1,:,:) + ZLBYRHO(:,1:ILBY+1,:) = XRHODREF(:,IJB-1:IJB-1+ILBY,:) + ZLBYRHO(:,ILBY+2:2*ILBY+2,:) = XRHODREF(:,IJE+1-ILBY:IJE+1,:) + ZLBXPABST(1:ILBX+1,:,:) = XPABST(IIB-1:IIB-1+ILBX,:,:) + ZLBXPABST(ILBX+2:2*ILBX+2,:,:) = XPABST(IIE+1-ILBX:IIE+1,:,:) + ZLBYPABST(:,1:ILBY+1,:) = XPABST(:,IJB-1:IJB-1+ILBY,:) + ZLBYPABST(:,ILBY+2:2*ILBY+2,:) = XPABST(:,IJE+1-ILBY:IJE+1,:) + ZLBXZZ(1:ILBX+1,:,:) = XZZ(IIB-1:IIB-1+ILBX,:,:) + ZLBXZZ(ILBX+2:2*ILBX+2,:,:) = XZZ(IIE+1-ILBX:IIE+1,:,:) + ZLBYZZ(:,1:ILBY+1,:) = XZZ(:,IJB-1:IJB-1+ILBY,:) + ZLBYZZ(:,ILBY+2:2*ILBY+2,:) = XZZ(:,IJE+1-ILBY:IJE+1,:) + + CALL AER2LIMA(XLBXSVM, ZLBXRHO, XLBXRM(:,:,:,1), ZLBXPABST, XLBXTHM, ZLBXZZ) + CALL AER2LIMA(XLBYSVM, ZLBYRHO, XLBYRM(:,:,:,1), ZLBYPABST, XLBYTHM, ZLBYZZ) + + DEALLOCATE(ZLBXRHO) + DEALLOCATE(ZLBYRHO) + DEALLOCATE(ZLBXPABST) + DEALLOCATE(ZLBYPABST) + DEALLOCATE(ZLBXZZ) + DEALLOCATE(ZLBYZZ) + +END IF +! IF (ALLOCATED(XSV_MX)) DEALLOCATE(XSV_MX) IF (ALLOCATED(XTKE_MX)) DEALLOCATE(XTKE_MX) ! diff --git a/src/MNH/profilern.f90 b/src/MNH/profilern.f90 index cd276826f40564aab3c831b571789555869614fc..1e307b9eaa5f86571552630438a476abab2cc7c7 100644 --- a/src/MNH/profilern.f90 +++ b/src/MNH/profilern.f90 @@ -116,21 +116,23 @@ USE MODE_FGAU, ONLY : GAULAG USE MODE_FSCATTER, ONLY: QEPSW,QEPSI,BHMIE,MOMG,MG USE MODD_PARAM_LIMA, ONLY: XALPHAR_L=>XALPHAR,XNUR_L=>XNUR,XALPHAS_L=>XALPHAS,XNUS_L=>XNUS,& XALPHAG_L=>XALPHAG,XNUG_L=>XNUG, XALPHAI_L=>XALPHAI,XNUI_L=>XNUI,& - XRTMIN_L=>XRTMIN,XALPHAC_L=>XALPHAC,XNUC_L=>XNUC + XRTMIN_L=>XRTMIN,XALPHAC_L=>XALPHAC,XNUC_L=>XNUC, LSNOW_T_L=>LSNOW_T USE MODD_PARAM_LIMA_COLD, ONLY: XDI_L=>XDI,XLBEXI_L=>XLBEXI,XLBI_L=>XLBI,XAI_L=>XAI,XBI_L=>XBI,XC_I_L=>XC_I,& - XLBEXS_L=>XLBEXS,XLBS_L=>XLBS,XCCS_L=>XCCS,& - XAS_L=>XAS,XBS_L=>XBS,XCXS_L=>XCXS + XLBEXS_L=>XLBEXS,XLBS_L=>XLBS,XCCS_L=>XCCS,XNS_L=>XNS,& + XAS_L=>XAS,XBS_L=>XBS,XCXS_L=>XCXS, & + XLBDAS_MIN,XLBDAS_MAX USE MODD_PARAM_LIMA_MIXED, ONLY: XDG_L=>XDG,XLBEXG_L=>XLBEXG,XLBG_L=>XLBG,XCCG_L=>XCCG,& XAG_L=>XAG,XBG_L=>XBG,XCXG_L=>XCXG,XCG_L=>XCG USE MODD_PARAM_LIMA_WARM, ONLY: XLBEXR_L=>XLBEXR,XLBR_L=>XLBR,XBR_L=>XBR,XAR_L=>XAR,& XBC_L=>XBC,XAC_L=>XAC +USE MODD_PARAM_ICE, ONLY: LSNOW_T_I=>LSNOW_T USE MODD_RAIN_ICE_DESCR, ONLY: XALPHAR_I=>XALPHAR,XNUR_I=>XNUR,XLBEXR_I=>XLBEXR,& XLBR_I=>XLBR,XCCR_I=>XCCR,XBR_I=>XBR,XAR_I=>XAR,& XALPHAC_I=>XALPHAC,XNUC_I=>XNUC,& XLBC_I=>XLBC,XBC_I=>XBC,XAC_I=>XAC,& XALPHAC2_I=>XALPHAC2,XNUC2_I=>XNUC2,& XALPHAS_I=>XALPHAS,XNUS_I=>XNUS,XLBEXS_I=>XLBEXS,& - XLBS_I=>XLBS,XCCS_I=>XCCS,XAS_I=>XAS,XBS_I=>XBS,XCXS_I=>XCXS,& + XLBS_I=>XLBS,XCCS_I=>XCCS,XNS_I=>XNS,XAS_I=>XAS,XBS_I=>XBS,XCXS_I=>XCXS,& XALPHAG_I=>XALPHAG,XNUG_I=>XNUG,XDG_I=>XDG,XLBEXG_I=>XLBEXG,& XLBG_I=>XLBG,XCCG_I=>XCCG,XAG_I=>XAG,XBG_I=>XBG,XCXG_I=>XCXG,XCG_I=>XCG,& XALPHAI_I=>XALPHAI,XNUI_I=>XNUI,XDI_I=>XDI,XLBEXI_I=>XLBEXI,& @@ -239,13 +241,14 @@ REAL, DIMENSION(SIZE(PR,3)) :: ZCIT ! pristine ice concentration REAL, DIMENSION(SIZE(PR,3)) :: ZCCI,ZCCR,ZCCC ! ICE,RAIN CLOUD concentration (LIMA) REAL, DIMENSION(SIZE(PR,1),SIZE(PR,2),SIZE(PR,3)) :: ZR REAL, DIMENSION(SIZE(PR,3),SIZE(PR,4)+1) :: ZRZ ! vertical profile of hydrometeor mixing ratios -REAL :: ZA,ZB,ZCC,ZCX,ZALPHA,ZNU,ZLB,ZLBEX,ZRHOHYD,XLAM_CRAD ! generic microphysical parameters +REAL :: ZA,ZB,ZCC,ZCX,ZALPHA,ZNU,ZLB,ZLBEX,ZRHOHYD,XLAM_CRAD,ZNS ! generic microphysical parameters INTEGER :: JJ ! loop counter for quadrature COMPLEX :: QMW,QMI,QM,QB,QEPSIW,QEPSWI ! dielectric parameter REAL :: ZAETOT,ZAETMP,ZREFLOC,ZQSCA,ZQBACK,ZQEXT ! temporary scattering parameters REAL,DIMENSION(:),ALLOCATABLE :: ZAELOC,ZZMZ ! temporary arrays INTEGER :: JPTS_GAULAG=9 ! number of points for Gauss-Laguerre quadrature REAL :: ZLBDA ! slope distribution parameter +REAL :: ZN ! number cocentration REAL :: ZFRAC_ICE ! ice water fraction REAL :: ZDELTA_EQUIV ! mass-equivalent Gauss-Laguerre point REAL :: ZFW ! liquid fraction @@ -676,6 +679,7 @@ IF (GSTORE) THEN ZCX=XCXS_L ZALPHA=XALPHAS_L ZNU=XNUS_L + ZNS=XNS_L ZLB=XLBS_L ZLBEX=XLBEXS_L ZFW=0 @@ -686,6 +690,7 @@ IF (GSTORE) THEN ZCX=XCXS_I ZALPHA=XALPHAS_I ZNU=XNUS_I + ZNS=XNS_I ZLB=XLBS_I ZLBEX=XLBEXS_I ZFW=0 @@ -741,7 +746,18 @@ IF (GSTORE) THEN ZLB=( ZA*ZCC*MOMG(ZALPHA,ZNU,ZB) )**(-ZLBEX) ENDIF END SELECT - ZLBDA=ZLB*(ZRHODREFZ(JK)*ZRZ(JK,JLOOP))**ZLBEX + IF (JLOOP.EQ.5 .AND. ( (CCLOUD=='LIMA'.AND.LSNOW_T_L).OR. & + (CCLOUD=='ICE3'.AND.LSNOW_T_I) ) ) THEN + IF (ZTEMPZ(JK)>-10.) THEN + ZLBDA = MAX(MIN(XLBDAS_MAX, 10**(14.554-0.0423*(ZTEMPZ(JK)+273.15))),XLBDAS_MIN) + ELSE + ZLBDA = MAX(MIN(XLBDAS_MAX, 10**(6.226-0.0106*(ZTEMPZ(JK)+273.15))),XLBDAS_MIN) + END IF + ZN=ZNS*ZRHODREFZ(JK)*ZRZ(JK,JLOOP)*ZLBDA**ZB + ELSE + ZLBDA=ZLB*(ZRHODREFZ(JK)*ZRZ(JK,JLOOP))**ZLBEX + ZN=ZCC*ZLBDA**ZCX + END IF ZREFLOC=0. ZAETMP=0. DO JJ=1,JPTS_GAULAG ! Gauss-Laguerre quadrature @@ -771,8 +787,8 @@ IF (GSTORE) THEN ZREFLOC=ZREFLOC+ZQBACK*ZX(JJ)**(ZNU-1)*ZDELTA_EQUIV**2*ZW(JJ) ZAETMP =ZAETMP +ZQEXT *ZX(JJ)**(ZNU-1)*ZDELTA_EQUIV**2*ZW(JJ) END DO - ZREFLOC=ZREFLOC*(XLAM_CRAD/XPI)**4*ZCC*ZLBDA**ZCX/(4.*GAMMA(ZNU)*.93) - ZAETMP=ZAETMP * XPI *ZCC*ZLBDA**ZCX/(4.*GAMMA(ZNU)) + ZREFLOC=ZREFLOC*(XLAM_CRAD/XPI)**4*ZN/(4.*GAMMA(ZNU)*.93) + ZAETMP=ZAETMP * XPI *ZN/(4.*GAMMA(ZNU)) TPROFILER%CRARE(IN,JK,I)=TPROFILER%CRARE(IN,JK,I)+ZREFLOC ZAELOC(JK)=ZAELOC(JK)+ZAETMP END IF diff --git a/src/MNH/radar_rain_ice.f90 b/src/MNH/radar_rain_ice.f90 index eddac2294d8c62054116b7be77081b610e72aefb..027372e4426fc224a8c39ca365a009cf7e1636fa 100644 --- a/src/MNH/radar_rain_ice.f90 +++ b/src/MNH/radar_rain_ice.f90 @@ -96,13 +96,14 @@ END MODULE MODI_RADAR_RAIN_ICE ! USE MODD_CST USE MODD_REF +USE MODD_PARAM_ICE, ONLY: LSNOW_T_I=>LSNOW_T USE MODD_RAIN_ICE_DESCR, ONLY: XALPHAR_I=>XALPHAR,XNUR_I=>XNUR,XLBEXR_I=>XLBEXR,& XLBR_I=>XLBR,XCCR_I=>XCCR,XBR_I=>XBR,XAR_I=>XAR,& XALPHAC_I=>XALPHAC,XNUC_I=>XNUC,& XLBC_I=>XLBC,XBC_I=>XBC,XAC_I=>XAC,& XALPHAC2_I=>XALPHAC2,XNUC2_I=>XNUC2,& XALPHAS_I=>XALPHAS,XNUS_I=>XNUS,XLBEXS_I=>XLBEXS,& - XLBS_I=>XLBS,XCCS_I=>XCCS,XAS_I=>XAS,XBS_I=>XBS,XCXS_I=>XCXS,& + XLBS_I=>XLBS,XCCS_I=>XCCS,XNS_I=>XNS,XAS_I=>XAS,XBS_I=>XBS,XCXS_I=>XCXS,& XALPHAG_I=>XALPHAG,XNUG_I=>XNUG,XDG_I=>XDG,XLBEXG_I=>XLBEXG,& XLBG_I=>XLBG,XCCG_I=>XCCG,XAG_I=>XAG,XBG_I=>XBG,XCXG_I=>XCXG,XCG_I=>XCG,& XALPHAI_I=>XALPHAI,XNUI_I=>XNUI,XDI_I=>XDI,XLBEXI_I=>XLBEXI,& @@ -113,8 +114,9 @@ USE MODD_RAIN_ICE_DESCR, ONLY: XALPHAR_I=>XALPHAR,XNUR_I=>XNUR,XLBEXR_I=>XLBEXR, USE MODD_PARAM_LIMA_WARM, ONLY: XLBEXR_L=>XLBEXR,XLBR_L=>XLBR,XBR_L=>XBR,XAR_L=>XAR,& XBC_L=>XBC,XAC_L=>XAC,XCR_L=>XCR,XDR_L=>XDR USE MODD_PARAM_LIMA_COLD, ONLY: XDI_L=>XDI,XLBEXI_L=>XLBEXI,XLBI_L=>XLBI,XAI_L=>XAI,XBI_L=>XBI,XC_I_L=>XC_I,& - XLBEXS_L=>XLBEXS,XLBS_L=>XLBS,XCCS_L=>XCCS,& - XAS_L=>XAS,XBS_L=>XBS,XCXS_L=>XCXS,XCS_L=>XCS,XDS_L=>XDS + XLBEXS_L=>XLBEXS,XLBS_L=>XLBS,XCCS_L=>XCCS,XNS_L=>XNS,& + XAS_L=>XAS,XBS_L=>XBS,XCXS_L=>XCXS,XCS_L=>XCS,XDS_L=>XDS,& + XLBDAS_MIN,XLBDAS_MAX USE MODD_PARAM_LIMA_MIXED, ONLY:XDG_L=>XDG,XLBEXG_L=>XLBEXG,XLBG_L=>XLBG,XCCG_L=>XCCG,& XAG_L=>XAG,XBG_L=>XBG,XCXG_L=>XCXG,XCG_L=>XCG,& @@ -123,7 +125,7 @@ USE MODD_PARAM_LIMA_MIXED, ONLY:XDG_L=>XDG,XLBEXG_L=>XLBEXG,XLBG_L=>XLBG,XCCG_L= USE MODD_PARAM_LIMA, ONLY: XALPHAR_L=>XALPHAR,XNUR_L=>XNUR,XALPHAS_L=>XALPHAS,XNUS_L=>XNUS,& XALPHAG_L=>XALPHAG,XNUG_L=>XNUG, XALPHAI_L=>XALPHAI,XNUI_L=>XNUI,& - XRTMIN_L=>XRTMIN,XALPHAC_L=>XALPHAC,XNUC_L=>XNUC + XRTMIN_L=>XRTMIN,XALPHAC_L=>XALPHAC,XNUC_L=>XNUC, LSNOW_T_L=>LSNOW_T USE MODD_PARAMETERS USE MODD_PARAM_n, ONLY : CCLOUD USE MODD_LUNIT @@ -169,6 +171,8 @@ REAL :: ZRHO00 ! Surface reference air density LOGICAL, DIMENSION(SIZE(PTEMP,1),SIZE(PTEMP,2),SIZE(PTEMP,3)) :: GRAIN REAL, DIMENSION(SIZE(PTEMP,1),SIZE(PTEMP,2),SIZE(PTEMP,3)) :: ZLBDA ! slope distribution parameter +REAL, DIMENSION(SIZE(PTEMP,1),SIZE(PTEMP,2),SIZE(PTEMP,3)) :: ZN + ! number concentration REAL, DIMENSION(SIZE(PTEMP,1),SIZE(PTEMP,2),SIZE(PTEMP,3)) :: ZW REAL, DIMENSION(SIZE(PTEMP,1),SIZE(PTEMP,2),SIZE(PTEMP,3)) :: ZREFL_MELT_CONV INTEGER :: JLBDA @@ -325,7 +329,41 @@ END IF ! --------------- ! IF (SIZE(PRT,4) >= 5) THEN - IF (CCLOUD=='LIMA') THEN + IF ( (CCLOUD=='LIMA' .AND. LSNOW_T_L) ) THEN + ZDMELT_FACT = ( (6.0*XAS_L)/(XPI*XRHOLW) )**(2.0) + ZEXP = 2.0*XBS_L + WHERE(PTEMP(:,:,:)>-10. .AND. PRT(:,:,:,5).GT.XRTMIN_L(5)) + ZLBDA(:,:,:) = MAX(MIN(XLBDAS_MAX, 10**(14.554-0.0423*(PTEMP(:,:,:)+273.15))),XLBDAS_MIN) + END WHERE + WHERE(PTEMP(:,:,:)<=-10 .AND. PRT(:,:,:,5).GT.XRTMIN_L(5)) + ZLBDA(:,:,:) = MAX(MIN(XLBDAS_MAX, 10**(6.226-0.0106*(PTEMP(:,:,:)+273.15))),XLBDAS_MIN) + END WHERE + ZN(:,:,:)=XNS_L*PRHODREF(:,:,:)*PRT(:,:,:,5)*ZLBDA(:,:,:)**XBS_L + WHERE( PRT(:,:,:,5).GT.XRTMIN_L(5) ) + ZW(:,:,:) = ZEQICE*ZDMELT_FACT & + *1.E18*ZN(:,:,:)*(ZLBDA(:,:,:)**(-ZEXP))*MOMG(XALPHAS_L,XNUS_L,ZEXP) + PVDOP(:,:,:) = PVDOP(:,:,:)+ZEQICE*ZDMELT_FACT*MOMG(XALPHAS_L,XNUS_L,ZEXP+XDS_L) & + *1.E18*ZN(:,:,:)*XCS_L*(ZLBDA(:,:,:)**(-ZEXP-XDS_L)) + PRARE(:,:,:) = PRARE(:,:,:) + ZW(:,:,:) + END WHERE + ELSEIF ( (CCLOUD=='ICE3' .AND. LSNOW_T_I) ) THEN + ZDMELT_FACT = ( (6.0*XAS_I)/(XPI*XRHOLW) )**(2.0) + ZEXP = 2.0*XBS_I + WHERE(PTEMP(:,:,:)>-10. .AND. PRT(:,:,:,5).GT.XRTMIN_I(5)) + ZLBDA(:,:,:) = MAX(MIN(XLBDAS_MAX, 10**(14.554-0.0423*(PTEMP(:,:,:)+273.15))),XLBDAS_MIN) + END WHERE + WHERE(PTEMP(:,:,:)<=-10 .AND. PRT(:,:,:,5).GT.XRTMIN_I(5)) + ZLBDA(:,:,:) = MAX(MIN(XLBDAS_MAX, 10**(6.226-0.0106*(PTEMP(:,:,:)+273.15))),XLBDAS_MIN) + END WHERE + ZN(:,:,:)=XNS_I*PRHODREF(:,:,:)*PRT(:,:,:,5)*ZLBDA(:,:,:)**XBS_I + WHERE( PRT(:,:,:,5).GT.XRTMIN_I(5) ) + ZW(:,:,:) = ZEQICE*ZDMELT_FACT & + *1.E18*ZN(:,:,:)*(ZLBDA(:,:,:)**(-ZEXP))*MOMG(XALPHAS_I,XNUS_I,ZEXP) + PVDOP(:,:,:) = PVDOP(:,:,:)+ZEQICE*ZDMELT_FACT*MOMG(XALPHAS_I,XNUS_I,ZEXP+XDS_I) & + *1.E18*ZN(:,:,:)*XCS_I*(ZLBDA(:,:,:)**(-ZEXP-XDS_I)) + PRARE(:,:,:) = PRARE(:,:,:) + ZW(:,:,:) + END WHERE + ELSEIF (CCLOUD=='LIMA') THEN ZDMELT_FACT = ( (6.0*XAS_L)/(XPI*XRHOLW) )**(2.0) ZEXP = 2.0*XBS_L WHERE( PRT(:,:,:,5).GT.XRTMIN_L(5) ) diff --git a/src/MNH/radar_scattering.f90 b/src/MNH/radar_scattering.f90 index dc3ddc1e5027eed57ce8610829eef632598ac9ac..2aa752e759dc9864de5a4b3cb350e0e26b833a25 100644 --- a/src/MNH/radar_scattering.f90 +++ b/src/MNH/radar_scattering.f90 @@ -105,10 +105,11 @@ USE MODD_CST USE MODD_IO, ONLY: TFILEDATA USE MODD_LUNIT USE MODD_PARAMETERS +USE MODD_PARAM_ICE, ONLY: LSNOW_T_I=>LSNOW_T USE MODD_RAIN_ICE_DESCR, ONLY: XALPHAR_I=>XALPHAR,XNUR_I=>XNUR,XDR_I=>XDR,XLBEXR_I=>XLBEXR,& XLBR_I=>XLBR,XCCR_I=>XCCR,XBR_I=>XBR,XCR_I=>XCR,& XALPHAS_I=>XALPHAS,XNUS_I=>XNUS,XDS_I=>XDS,XLBEXS_I=>XLBEXS,& - XLBS_I=>XLBS,XCCS_I=>XCCS,XAS_I=>XAS,XBS_I=>XBS,XCXS_I=>XCXS,XCS_I=>XCS,& + XLBS_I=>XLBS,XCCS_I=>XCCS,XNS_I=>XNS,XAS_I=>XAS,XBS_I=>XBS,XCXS_I=>XCXS,XCS_I=>XCS,& XALPHAG_I=>XALPHAG,XNUG_I=>XNUG,XDG_I=>XDG,XLBEXG_I=>XLBEXG,& XLBG_I=>XLBG,XCCG_I=>XCCG,XAG_I=>XAG,XBG_I=>XBG,XCXG_I=>XCXG,XCG_I=>XCG,& XALPHAH_I=>XALPHAH,XNUH_I=>XNUH,XDH_I=>XDH,XLBEXH_I=>XLBEXH,& @@ -119,12 +120,13 @@ USE MODD_RAIN_ICE_DESCR, ONLY: XALPHAR_I=>XALPHAR,XNUR_I=>XNUR,XDR_I=>XDR,XLBEXR !!LIMA USE MODD_PARAM_LIMA_WARM, ONLY: XDR_L=>XDR,XLBEXR_L=>XLBEXR,XLBR_L=>XLBR,XBR_L=>XBR,XCR_L=>XCR USE MODD_PARAM_LIMA_COLD, ONLY: XDI_L=>XDI,XLBEXI_L=>XLBEXI,XLBI_L=>XLBI,XAI_L=>XAI,XBI_L=>XBI,XC_I_L=>XC_I,& - XDS_L=>XDS,XLBEXS_L=>XLBEXS,XLBS_L=>XLBS,XCCS_L=>XCCS,XAS_L=>XAS,XBS_L=>XBS,XCXS_L=>XCXS,XCS_L=>XCS + XDS_L=>XDS,XLBEXS_L=>XLBEXS,XLBS_L=>XLBS,XCCS_L=>XCCS,XNS_L=>XNS,XAS_L=>XAS,XBS_L=>XBS,& + XCXS_L=>XCXS,XCS_L=>XCS,XLBDAS_MIN,XLBDAS_MAX USE MODD_PARAM_LIMA_MIXED, ONLY:XDG_L=>XDG,XLBEXG_L=>XLBEXG,XLBG_L=>XLBG,XCCG_L=>XCCG,XAG_L=>XAG,XBG_L=>XBG,XCXG_L=>XCXG,XCG_L=>XCG USE MODD_PARAM_LIMA, ONLY: XALPHAR_L=>XALPHAR,XNUR_L=>XNUR,XALPHAS_L=>XALPHAS,XNUS_L=>XNUS,& XALPHAG_L=>XALPHAG,XNUG_L=>XNUG, XALPHAI_L=>XALPHAI,XNUI_L=>XNUI,& - XRTMIN_L=>XRTMIN + XRTMIN_L=>XRTMIN, LSNOW_T_L=>LSNOW_T !!LIMA USE MODD_RADAR, ONLY:XLAM_RAD,XSTEP_RAD,NBELEV,NDIFF,LATT,NPTS_GAULAG,LQUAD,XVALGROUND,NDGS, & LFALL,LWBSCS,LWREFL,XREFLVDOPMIN,XREFLMIN,LSNRT,XSNRMIN @@ -192,6 +194,7 @@ REAL :: ZDMELT_FACT ! factor used to compute the equivalent melted diameter REAL :: ZEQICE=0.224! factor used to convert the ice crystals reflectivity into an equivalent liquid water reflectivity (from Smith, JCAM 84) REAL :: ZEXP ! anciliary parameter REAL :: ZLBDA ! slope distribution parameter +REAL :: ZN ! Number concentration REAL :: ZFRAC_ICE,ZD,ZDE ! auxiliary variables REAL :: ZQSCA REAL,DIMENSION(2) :: ZQEXT @@ -281,7 +284,7 @@ REAL, DIMENSION(:,:,:,:,:,:),ALLOCATABLE :: ZM_6D,ZCC_6D REAL :: ZC ! REAL :: ZCCR,ZLBR,ZLBEXR,ZDR,ZALPHAR,ZNUR,ZBR -REAL :: ZCCS,ZLBS,ZLBEXS,ZDS,ZALPHAS,ZNUS,ZAS,ZBS,ZCXS +REAL :: ZCCS,ZLBS,ZLBEXS,ZDS,ZALPHAS,ZNUS,ZAS,ZBS,ZCXS,ZNS REAL :: ZCCG,ZLBG,ZLBEXG,ZDG,ZALPHAG,ZNUG,ZAG,ZBG,ZCXG REAL :: ZCCH,ZLBH,ZLBEXH,ZDH,ZALPHAH,ZNUH,ZAH,ZBH,ZCXH REAL :: ZLBI,ZLBEXI,ZDI,ZALPHAI,ZNUI,ZAI,ZBI @@ -339,6 +342,7 @@ IF (GLIMA) THEN ! LIMA ZCXS=XCXS_L ZLBS=XLBS_L ZLBEXS=XLBEXS_L + ZNS=XNS_L ZDS=XDS_L ZALPHAS=XALPHAS_L ZNUS=XNUS_L @@ -374,6 +378,7 @@ ELSE ! ICE3 ZCXS=XCXS_I ZLBS=XLBS_I ZLBEXS=XLBEXS_I + ZNS=XNS_I ZDS=XDS_I ZALPHAS=XALPHAS_I ZNUS=XNUS_I @@ -1282,28 +1287,37 @@ DO JI=1,INBRAD ZDMELT_FACT=6.*ZAS/(XPI*.92*XRHOLW) ZEXP=2.*ZBS !XBS = 1.9 in ini_radar.f90 (bj tab 2.1 p24) !dans ini_rain_ice.f90 : - ZLBDA= ZLBS*(ZM)**ZLBEXS - + IF ( (GLIMA .AND. LSNOW_T_L) .OR. (.NOT.GLIMA .AND. LSNOW_T_I) ) THEN + IF (PT_RAY(JI,JEL,JAZ,JL,JH,JV)>-10.) THEN + ZLBDA = MAX(MIN(XLBDAS_MAX, 10**(14.554-0.0423*(PT_RAY(JI,JEL,JAZ,JL,JH,JV)+273.15))),XLBDAS_MIN) + ELSE + ZLBDA = MAX(MIN(XLBDAS_MAX, 10**(6.226-0.0106*(PT_RAY(JI,JEL,JAZ,JL,JH,JV)+273.15))),XLBDAS_MIN) + END IF + ZN=ZNS*ZM*ZLBDA**ZBS + ELSE + ZLBDA= ZLBS*(ZM)**ZLBEXS + ZN=ZCCS*ZLBDA**ZCXS + END IF ! Rayleigh or Rayleigh-Gans or Rayleigh with 6th order for attenuation IF(NDIFF==0.OR.NDIFF==3.OR.NDIFF==4) THEN - ZREFLOC(1:2)=ZEQICE*.92**2*ZDMELT_FACT**2*1.E18*ZCCS*ZLBDA**(ZCXS-ZEXP)*MOMG(ZALPHAS,ZNUS,ZEXP) + ZREFLOC(1:2)=ZEQICE*.92**2*ZDMELT_FACT**2*1.E18*ZN*ZLBDA**(ZEXP)*MOMG(ZALPHAS,ZNUS,ZEXP) ZREFLOC(3)=0. IF(LWREFL) THEN ! weighting by reflectivities ZREFL(JI,JEL,JAZ,JL,JH,JV,IVDOP)=ZREFL(JI,JEL,JAZ,JL,JH,JV,IVDOP)& -ZCS*SIN(PELEV(JI,JEL,JL,JV))*ZEQICE*.92**2*ZDMELT_FACT**2& - *1.E18*ZCCS*ZLBDA**(ZCXS-ZEXP-ZDS)*MOMG(ZALPHAS,ZNUS,ZEXP+ZDS) + *1.E18*ZN*ZLBDA**(ZEXP-ZDS)*MOMG(ZALPHAS,ZNUS,ZEXP+ZDS) ELSE - ZREFL(JI,JEL,JAZ,JL,JH,JV,IMAX)=ZREFL(JI,JEL,JAZ,JL,JH,JV,IMAX)+ZCCS*ZLBDA**ZCXS + ZREFL(JI,JEL,JAZ,JL,JH,JV,IMAX)=ZREFL(JI,JEL,JAZ,JL,JH,JV,IMAX)+ZN ZREFL(JI,JEL,JAZ,JL,JH,JV,IVDOP)=ZREFL(JI,JEL,JAZ,JL,JH,JV,IVDOP)& -ZCS*SIN(PELEV(JI,JEL,JL,JV))& - *ZCCS*ZLBDA**(ZCXS-ZDS)*MOMG(ZALPHAS,ZNUS,ZDS) + *ZN*ZLBDA**(ZDS)*MOMG(ZALPHAS,ZNUS,ZDS) END IF IF(LATT) THEN IF(NDIFF==0.OR.NDIFF==3) THEN - ZAETMP(:)=ZCCS*ZLBDA**ZCXS*(ZDMELT_FACT*XPI**2/XLAM_RAD(JI)*AIMAG(ZQK)& + ZAETMP(:)=ZN*(ZDMELT_FACT*XPI**2/XLAM_RAD(JI)*AIMAG(ZQK)& *MOMG(ZALPHAS,ZNUS,ZBS)/ZLBDA**ZBS) ELSE - ZAETMP(:)=ZCCS*ZLBDA**ZCXS*(ZDMELT_FACT*XPI**2/XLAM_RAD(JI)*AIMAG(ZQK) & + ZAETMP(:)=ZN*(ZDMELT_FACT*XPI**2/XLAM_RAD(JI)*AIMAG(ZQK) & *MOMG(ZALPHAS,ZNUS,ZBS)/ZLBDA**ZBS & +ZDMELT_FACT**(5./3.)*XPI**4/15./XLAM_RAD(JI)**3 & *AIMAG(ZQK**2*(ZQMI**4+27.*ZQMI**2+38.) & @@ -1355,7 +1369,7 @@ DO JI=1,INBRAD ZREFLOC(3)=180.E3/XPI*XLAM_RAD(JI)*ZRE_S22FMS11F ZREFL(JI,JEL,JAZ,JL,JH,JV,IVDOP)=PVDOP_RAY(JI,JEL,JAZ,JL,JH,JV)*ZREFLOC(1) & -ZCS*SIN(PELEV(JI,JEL,JL,JV))*ZREFLOC(1) & - *1.E18*(XLAM_RAD(JI)/XPI)**4/.93*ZCCS/4./ZLBDA**(3+ZDS) + *1.E18*(XLAM_RAD(JI)/XPI)**4/.93*(ZN*ZLBDA**(-ZCXS))/4./ZLBDA**(3+ZDS) IF(LATT) THEN ZAETMP(1)=ZIM_S22FT*XLAM_RAD(JI)*2 ZAETMP(2)=ZIM_S11FT*XLAM_RAD(JI)*2 @@ -1374,15 +1388,15 @@ DO JI=1,INBRAD ZREFLOC(4)=ZREFLOC(4)+ZQBACK(1)*ZX(JJ)**(ZNUS-1.+2.*ZBS/3./ZALPHAS+ZDS/ZALPHAS)*ZW(JJ) IF(LATT) ZAETMP(:)=ZAETMP(:)+ZQEXT(:)*ZX(JJ)**(ZNUS-1.+2.*ZBS/3./ZALPHAS)*ZW(JJ) END DO ! ****** end loop Gauss-Laguerre quadrature - ZREFLOC(1:2)=1.E18*(XLAM_RAD(JI)/XPI)**4*ZCCS*ZLBDA**(ZCXS-2.*ZBS/3.)/& + ZREFLOC(1:2)=1.E18*(XLAM_RAD(JI)/XPI)**4*ZN*ZLBDA**(-2.*ZBS/3.)/& (4.*GAMMA(ZNUS)*.93)*ZDMELT_FACT**(2./3.)*ZREFLOC(1:2) ZREFL(JI,JEL,JAZ,JL,JH,JV,IVDOP)=ZREFL(JI,JEL,JAZ,JL,JH,JV,IVDOP)& +PVDOP_RAY(JI,JEL,JAZ,JL,JH,JV)*ZREFLOC(1) & -ZCS*SIN(PELEV(JI,JEL,JL,JV))*ZREFLOC(4) & - *1.E18*(XLAM_RAD(JI)/XPI)**4*ZCCS & - *ZLBDA**(ZCXS-2.*ZBS/3.-ZDS)/ & + *1.E18*(XLAM_RAD(JI)/XPI)**4*ZN & + *ZLBDA**(2.*ZBS/3.-ZDS)/ & (4.*GAMMA(ZNUS)*.93)*ZDMELT_FACT**(2./3.) - IF(LATT) ZAETMP(:)=ZAETMP(:)*XPI*ZCCS*ZLBDA**(ZCXS-2.*ZBS/3.)/(4.*GAMMA(ZNUS))& + IF(LATT) ZAETMP(:)=ZAETMP(:)*XPI*ZN*ZLBDA**(-2.*ZBS/3.)/(4.*GAMMA(ZNUS))& *ZDMELT_FACT**(2./3.) ZRE_S22S11_S=0 ZIM_S22S11_S=0 diff --git a/src/MNH/rain_ice_elec.f90 b/src/MNH/rain_ice_elec.f90 index b82bed489109f0474b87bf53e43671787df81599..d1a432f20b26e1f371778fd54366e65bb2e0c784 100644 --- a/src/MNH/rain_ice_elec.f90 +++ b/src/MNH/rain_ice_elec.f90 @@ -198,6 +198,7 @@ END MODULE MODI_RAIN_ICE_ELEC ! P. Wautelet 28/05/2019: move COUNTJV function to tools.f90 ! P. Wautelet 03/2020: use the new data structures and subroutines for budgets ! P .Wautelet 09/03/2020: add missing budgets for electricity +! C. Barthe 07/04/2022: correction of budget for CMEL !------------------------------------------------------------------------------- ! !* 0. DECLARATIONS @@ -2274,9 +2275,9 @@ GNEGT(IIB:IIE,IJB:IJE,IKB:IKE) = ZT(IIB:IIE,IJB:IJE,IKB:IKE) < XTT INEGT = COUNTJV( GNEGT(:,:,:),I1(:),I2(:),I3(:)) ! IF( INEGT >= 1 ) THEN - if ( lbudget_th ) call Budget_store_init( tbudgets(NBUDGET_TH), 'HENU', pths(:, :, :) * prhodj(:, :, :) ) - if ( lbudget_rv ) call Budget_store_init( tbudgets(NBUDGET_RV), 'HENU', prvs(:, :, :) * prhodj(:, :, :) ) - if ( lbudget_ri ) call Budget_store_init( tbudgets(NBUDGET_RI), 'HENU', pris(:, :, :) * prhodj(:, :, :) ) + if ( lbudget_th ) call Budget_store_init( tbudgets(NBUDGET_TH), 'HIN', pths(:, :, :) * prhodj(:, :, :) ) + if ( lbudget_rv ) call Budget_store_init( tbudgets(NBUDGET_RV), 'HIN', prvs(:, :, :) * prhodj(:, :, :) ) + if ( lbudget_ri ) call Budget_store_init( tbudgets(NBUDGET_RI), 'HIN', pris(:, :, :) * prhodj(:, :, :) ) ALLOCATE(ZRVT(INEGT)) ALLOCATE(ZCIT(INEGT)) @@ -2350,9 +2351,9 @@ IF( INEGT >= 1 ) THEN DEALLOCATE(ZCIT) DEALLOCATE(ZRVT) - if ( lbudget_th ) call Budget_store_end( tbudgets(NBUDGET_TH), 'HENU', pths(:, :, :) * prhodj(:, :, :) ) - if ( lbudget_rv ) call Budget_store_end( tbudgets(NBUDGET_RV), 'HENU', prvs(:, :, :) * prhodj(:, :, :) ) - if ( lbudget_ri ) call Budget_store_end( tbudgets(NBUDGET_RI), 'HENU', pris(:, :, :) * prhodj(:, :, :) ) + if ( lbudget_th ) call Budget_store_end( tbudgets(NBUDGET_TH), 'HIN', pths(:, :, :) * prhodj(:, :, :) ) + if ( lbudget_rv ) call Budget_store_end( tbudgets(NBUDGET_RV), 'HIN', prvs(:, :, :) * prhodj(:, :, :) ) + if ( lbudget_ri ) call Budget_store_end( tbudgets(NBUDGET_RI), 'HIN', pris(:, :, :) * prhodj(:, :, :) ) END IF diff --git a/src/MNH/rain_ice_nucleation.f90 b/src/MNH/rain_ice_nucleation.f90 index 97bfaf1f87e16eed809b73b085d2c3886f514225..701e30282f15c6c3083767192f3d33f07f177d02 100644 --- a/src/MNH/rain_ice_nucleation.f90 +++ b/src/MNH/rain_ice_nucleation.f90 @@ -81,9 +81,9 @@ REAL, DIMENSION(SIZE(PEXNREF,1),SIZE(PEXNREF,2),SIZE(PEXNREF,3)) & ! !------------------------------------------------------------------------------- -if ( lbudget_th ) call Budget_store_init( tbudgets(NBUDGET_TH), 'HENU', pths(:, :, :) * prhodj(:, :, :) ) -if ( lbudget_rv ) call Budget_store_init( tbudgets(NBUDGET_RV), 'HENU', prvs(:, :, :) * prhodj(:, :, :) ) -if ( lbudget_ri ) call Budget_store_init( tbudgets(NBUDGET_RI), 'HENU', pris(:, :, :) * prhodj(:, :, :) ) +if ( lbudget_th ) call Budget_store_init( tbudgets(NBUDGET_TH), 'HIN', pths(:, :, :) * prhodj(:, :, :) ) +if ( lbudget_rv ) call Budget_store_init( tbudgets(NBUDGET_RV), 'HIN', prvs(:, :, :) * prhodj(:, :, :) ) +if ( lbudget_ri ) call Budget_store_init( tbudgets(NBUDGET_RI), 'HIN', pris(:, :, :) * prhodj(:, :, :) ) ! ! compute the temperature and the pressure ! @@ -171,9 +171,9 @@ END IF ! !* 3.1.3 budget storage ! -if ( lbudget_th ) call Budget_store_end( tbudgets(NBUDGET_TH), 'HENU', pths(:, :, :) * prhodj(:, :, :) ) -if ( lbudget_rv ) call Budget_store_end( tbudgets(NBUDGET_RV), 'HENU', prvs(:, :, :) * prhodj(:, :, :) ) -if ( lbudget_ri ) call Budget_store_end( tbudgets(NBUDGET_RI), 'HENU', pris(:, :, :) * prhodj(:, :, :) ) +if ( lbudget_th ) call Budget_store_end( tbudgets(NBUDGET_TH), 'HIN', pths(:, :, :) * prhodj(:, :, :) ) +if ( lbudget_rv ) call Budget_store_end( tbudgets(NBUDGET_RV), 'HIN', prvs(:, :, :) * prhodj(:, :, :) ) +if ( lbudget_ri ) call Budget_store_end( tbudgets(NBUDGET_RI), 'HIN', pris(:, :, :) * prhodj(:, :, :) ) END SUBROUTINE RAIN_ICE_NUCLEATION diff --git a/src/MNH/rain_ice_red.f90 b/src/MNH/rain_ice_red.f90 index 2416326653944702f6e731bfda3d47c2f2f7d9d3..32b08c2d26ec8b7618006ee0bf57bee0e63bce81 100644 --- a/src/MNH/rain_ice_red.f90 +++ b/src/MNH/rain_ice_red.f90 @@ -257,6 +257,7 @@ END MODULE MODI_RAIN_ICE_RED ! P. Wautelet 17/01/2020: move Quicksort to tools.f90 ! P. Wautelet 02/2020: use the new data structures and subroutines for budgets ! P. Wautelet 25/02/2020: bugfix: add missing budget: WETH_BU_RRG +! J. Wurtz 03/2022: New snow characteristics with LSNOW_T !----------------------------------------------------------------- ! !* 0. DECLARATIONS @@ -272,8 +273,8 @@ use modd_budget, only: lbu_enable, USE MODD_CST, ONLY: XCI,XCL,XCPD,XCPV,XLSTT,XLVTT,XTT USE MODD_PARAMETERS, ONLY: JPVEXT,XUNDEF USE MODD_PARAM_ICE, ONLY: CSUBG_PR_PDF,CSUBG_RC_RR_ACCR,CSUBG_RR_EVAP,LDEPOSC,LFEEDBACKT,LSEDIM_AFTER, & - NMAXITER,XMRSTEP,XTSTEP_TS,XVDEPOSC -USE MODD_RAIN_ICE_DESCR, ONLY: XRTMIN + NMAXITER,XMRSTEP,XTSTEP_TS,XVDEPOSC,LSNOW_T +USE MODD_RAIN_ICE_DESCR, ONLY: XRTMIN,XLBDAS_MIN,XLBDAS_MAX,XTRANS_MP_GAMMAS,XLBS,XLBEXS USE MODD_VAR_ll, ONLY: IP use mode_budget, only: Budget_store_add, Budget_store_init, Budget_store_end @@ -356,6 +357,8 @@ REAL, DIMENSION(KIT,KJT,KKT,KRR), OPTIONAL, INTENT(OUT) :: PFPR ! upper-air pre ! !* 0.2 Declarations of local variables : ! +REAL, DIMENSION(SIZE(PRST,1),SIZE(PRST,2),SIZE(PRST,3)) :: ZLBDAS ! Modif !lbda parameter snow + INTEGER :: IIB ! Define the domain where is INTEGER :: IIE ! the microphysical sources have to be computed INTEGER :: IJB ! @@ -524,8 +527,8 @@ REAL, DIMENSION(SIZE(PTHT,1),SIZE(PTHT,2),SIZE(PTHT,3)) :: & ! !------------------------------------------------------------------------------- if ( lbu_enable ) then - if ( lbudget_th ) call Budget_store_init( tbudgets(NBUDGET_TH), 'HENU', pths(:, :, :) * prhodj(:, :, :) ) - if ( lbudget_rv ) call Budget_store_init( tbudgets(NBUDGET_RV), 'HENU', prvs(:, :, :) * prhodj(:, :, :) ) + if ( lbudget_th ) call Budget_store_init( tbudgets(NBUDGET_TH), 'HIN', pths(:, :, :) * prhodj(:, :, :) ) + if ( lbudget_rv ) call Budget_store_init( tbudgets(NBUDGET_RV), 'HIN', prvs(:, :, :) * prhodj(:, :, :) ) end if !------------------------------------------------------------------------------- ! @@ -571,6 +574,29 @@ ELSE ENDDO ENDDO ENDIF + +!Compute lambda_snow parameter +!ZT en KELVIN +ZLBDAS(:,:,:)=1000. +DO JK = 1, KKT + DO JJ = 1, KJT + DO JI = 1, KIT + IF (LSNOW_T) THEN + IF (PRST(JI,JJ,JK)>XRTMIN(5)) THEN + IF(ZT(JI,JJ,JK)>263.15) THEN + ZLBDAS(JI,JJ,JK) = MAX(MIN(XLBDAS_MAX, 10**(14.554-0.0423*ZT(JI,JJ,JK))),XLBDAS_MIN)*XTRANS_MP_GAMMAS + ELSE + ZLBDAS(JI,JJ,JK) = MAX(MIN(XLBDAS_MAX, 10**(6.226-0.0106*ZT(JI,JJ,JK))),XLBDAS_MIN)*XTRANS_MP_GAMMAS + END IF + END IF + ELSE + IF (PRST(JI,JJ,JK).GT.XRTMIN(5)) THEN + ZLBDAS(JI,JJ,JK) = MAX(MIN(XLBDAS_MAX,XLBS*(PRHODREF(JI,JJ,JK)*PRST(JI,JJ,JK))**XLBEXS),XLBDAS_MIN) + END IF + END IF + END DO + END DO +END DO ! !------------------------------------------------------------------------------- ! @@ -600,6 +626,7 @@ IF(.NOT. LSEDIM_AFTER) THEN CALL ICE4_SEDIMENTATION_STAT(IIB, IIE, KIT, IJB, IJE, KJT, IKB, IKE, IKTB, IKTE, KKT, KKL, & &PTSTEP, KRR, OSEDIC, LDEPOSC, XVDEPOSC, PDZZ, & &PRHODREF, PPABST, PTHT, PRHODJ, & + &ZLBDAS, & &PRCS, PRCS*PTSTEP, PRRS, PRRS*PTSTEP, PRIS, PRIS*PTSTEP,& &PRSS, PRSS*PTSTEP, PRGS, PRGS*PTSTEP,& &PINPRC, PINDEP, PINPRR, ZINPRI, PINPRS, PINPRG, & @@ -609,6 +636,7 @@ IF(.NOT. LSEDIM_AFTER) THEN CALL ICE4_SEDIMENTATION_STAT(IIB, IIE, KIT, IJB, IJE, KJT, IKB, IKE, IKTB, IKTE, KKT, KKL, & &PTSTEP, KRR, OSEDIC, LDEPOSC, XVDEPOSC, PDZZ, & &PRHODREF, PPABST, PTHT, PRHODJ, & + &ZLBDAS, & &PRCS, PRCS*PTSTEP, PRRS, PRRS*PTSTEP, PRIS, PRIS*PTSTEP,& &PRSS, PRSS*PTSTEP, PRGS, PRGS*PTSTEP,& &PINPRC, PINDEP, PINPRR, ZINPRI, PINPRS, PINPRG, & @@ -622,7 +650,7 @@ IF(.NOT. LSEDIM_AFTER) THEN IF(KRR==7) THEN CALL ICE4_SEDIMENTATION_SPLIT(IIB, IIE, KIT, IJB, IJE, KJT, IKB, IKE, IKTB, IKTE, KKT, KKL, & &PTSTEP, KRR, OSEDIC, LDEPOSC, XVDEPOSC, PDZZ, & - &PRHODREF, PPABST, PTHT, PRHODJ, & + &PRHODREF, PPABST, PTHT, ZT, PRHODJ, & &PRCS, PRCT, PRRS, PRRT, PRIS, PRIT, PRSS, PRST, PRGS, PRGT,& &PINPRC, PINDEP, PINPRR, ZINPRI, PINPRS, PINPRG, & &PSEA=PSEA, PTOWN=PTOWN, & @@ -630,7 +658,7 @@ IF(.NOT. LSEDIM_AFTER) THEN ELSE CALL ICE4_SEDIMENTATION_SPLIT(IIB, IIE, KIT, IJB, IJE, KJT, IKB, IKE, IKTB, IKTE, KKT, KKL, & &PTSTEP, KRR, OSEDIC, LDEPOSC, XVDEPOSC, PDZZ, & - &PRHODREF, PPABST, PTHT, PRHODJ, & + &PRHODREF, PPABST, PTHT, ZT, PRHODJ, & &PRCS, PRCT, PRRS, PRRT, PRIS, PRIT, PRSS, PRST, PRGS, PRGT,& &PINPRC, PINDEP, PINPRR, ZINPRI, PINPRS, PINPRG, & &PSEA=PSEA, PTOWN=PTOWN, & @@ -1216,10 +1244,10 @@ DO JK = 1, KKT ENDDO ! if ( lbu_enable ) then - !Note: there is an other contribution for HENU later - if ( lbudget_th ) call Budget_store_end( tbudgets(NBUDGET_TH), 'HENU', pths(:, :, :) * prhodj(:, :, :) ) - if ( lbudget_rv ) call Budget_store_end( tbudgets(NBUDGET_RV), 'HENU', prvs(:, :, :) * prhodj(:, :, :) ) - if ( lbudget_ri ) call Budget_store_add( tbudgets(NBUDGET_RI), 'HENU', zz_rvheni(:, :, :) * prhodj(:, :, :) ) + !Note: there is an other contribution for HIN later + if ( lbudget_th ) call Budget_store_end( tbudgets(NBUDGET_TH), 'HIN', pths(:, :, :) * prhodj(:, :, :) ) + if ( lbudget_rv ) call Budget_store_end( tbudgets(NBUDGET_RV), 'HIN', prvs(:, :, :) * prhodj(:, :, :) ) + if ( lbudget_ri ) call Budget_store_add( tbudgets(NBUDGET_RI), 'HIN', zz_rvheni(:, :, :) * prhodj(:, :, :) ) end if !------------------------------------------------------------------------------- ! @@ -1325,9 +1353,9 @@ IF(LBU_ENABLE) THEN DO JL=1,IMICRO ZW(I1(JL), I2(JL), I3(JL)) = ZTOT_RVHENI(JL) * ZINV_TSTEP END DO - if ( lbudget_th ) call Budget_store_add( tbudgets(NBUDGET_TH), 'HENU', zw(:, :, :) * zz_lsfact(:, :, :) * prhodj(:, :, :) ) - if ( lbudget_rv ) call Budget_store_add( tbudgets(NBUDGET_RV), 'HENU', -zw(:, :, :) * prhodj(:, :, :) ) - if ( lbudget_ri ) call Budget_store_add( tbudgets(NBUDGET_RI), 'HENU', zw(:, :, :) * prhodj(:, :, :) ) + if ( lbudget_th ) call Budget_store_add( tbudgets(NBUDGET_TH), 'HIN', zw(:, :, :) * zz_lsfact(:, :, :) * prhodj(:, :, :) ) + if ( lbudget_rv ) call Budget_store_add( tbudgets(NBUDGET_RV), 'HIN', -zw(:, :, :) * prhodj(:, :, :) ) + if ( lbudget_ri ) call Budget_store_add( tbudgets(NBUDGET_RI), 'HIN', zw(:, :, :) * prhodj(:, :, :) ) ZW(:,:,:) = 0. DO JL=1,IMICRO @@ -1684,6 +1712,7 @@ IF(LSEDIM_AFTER) THEN CALL ICE4_SEDIMENTATION_STAT(IIB, IIE, KIT, IJB, IJE, KJT, IKB, IKE, IKTB, IKTE, KKT, KKL, & &PTSTEP, KRR, OSEDIC, LDEPOSC, XVDEPOSC, PDZZ, & &PRHODREF, PPABST, PTHT, PRHODJ, & + &ZLBDAS, & &PRCS, PRCS*PTSTEP, PRRS, PRRS*PTSTEP, PRIS, PRIS*PTSTEP,& &PRSS, PRSS*PTSTEP, PRGS, PRGS*PTSTEP,& &PINPRC, PINDEP, PINPRR, ZINPRI, PINPRS, PINPRG, & @@ -1693,6 +1722,7 @@ IF(LSEDIM_AFTER) THEN CALL ICE4_SEDIMENTATION_STAT(IIB, IIE, KIT, IJB, IJE, KJT, IKB, IKE, IKTB, IKTE, KKT, KKL, & &PTSTEP, KRR, OSEDIC, LDEPOSC, XVDEPOSC, PDZZ,& &PRHODREF, PPABST, PTHT, PRHODJ, & + &ZLBDAS, & &PRCS, PRCS*PTSTEP, PRRS, PRRS*PTSTEP, PRIS, PRIS*PTSTEP,& &PRSS, PRSS*PTSTEP, PRGS, PRGS*PTSTEP,& &PINPRC, PINDEP, PINPRR, ZINPRI, PINPRS, PINPRG, & @@ -1707,6 +1737,7 @@ IF(LSEDIM_AFTER) THEN CALL ICE4_SEDIMENTATION_SPLIT(IIB, IIE, KIT, IJB, IJE, KJT, IKB, IKE, IKTB, IKTE, KKT, KKL, & &PTSTEP, KRR, OSEDIC, LDEPOSC, XVDEPOSC, PDZZ, & &PRHODREF, PPABST, PTHT, PRHODJ, & + &ZLBDAS, & &PRCS, PRCT, PRRS, PRRT, PRIS, PRIT, PRSS, PRST, PRGS, PRGT,& &PINPRC, PINDEP, PINPRR, ZINPRI, PINPRS, PINPRG, & &PSEA=PSEA, PTOWN=PTOWN, & @@ -1715,6 +1746,7 @@ IF(LSEDIM_AFTER) THEN CALL ICE4_SEDIMENTATION_SPLIT(IIB, IIE, KIT, IJB, IJE, KJT, IKB, IKE, IKTB, IKTE, KKT, KKL, & &PTSTEP, KRR, OSEDIC, LDEPOSC, XVDEPOSC, PDZZ, & &PRHODREF, PPABST, PTHT, PRHODJ, & + &ZLBDAS, & &PRCS, PRCT, PRRS, PRRT, PRIS, PRIT, PRSS, PRST, PRGS, PRGT,& &PINPRC, PINDEP, PINPRR, ZINPRI, PINPRS, PINPRG, & &PSEA=PSEA, PTOWN=PTOWN, & diff --git a/src/MNH/read_chem_data_cams_case.f90 b/src/MNH/read_chem_data_cams_case.f90 new file mode 100644 index 0000000000000000000000000000000000000000..a8487d33a27efaee4ef57ad814a09cc6de188ccc --- /dev/null +++ b/src/MNH/read_chem_data_cams_case.f90 @@ -0,0 +1,1108 @@ +!iMNH_LIC Copyright 2012-2017 CNRS, Meteo-France and Universite Paul Sabatier +!MNH_LIC This is part of the Meso-NH software governed by the CeCILL-C licence +!MNH_LIC version 1. See LICENSE, CeCILL-C_V1-en.txt and CeCILL-C_V1-fr.txt +!MNH_LIC for details. version 1. +!----------------------------------------------------------------- +! #################################### + MODULE MODI_READ_CHEM_DATA_CAMS_CASE +! #################################### +INTERFACE +SUBROUTINE READ_CHEM_DATA_CAMS_CASE(TPPRE_REAL1,HFILE,TPPGDFILE,PTIME_HORI, & + KVERB,ODUMMY_REAL,OUSECHEM ) +! +USE MODD_IO, ONLY: TFILEDATA +! +TYPE(TFILEDATA),POINTER,INTENT(IN) :: TPPRE_REAL1 ! PRE_REAL1 file +CHARACTER(LEN=28), INTENT(IN) :: HFILE ! name of the NETCDF file +TYPE(TFILEDATA), INTENT(IN) :: TPPGDFILE ! physiographic data file +REAL, INTENT(INOUT) :: PTIME_HORI ! time spent in hor. interpolations +INTEGER, INTENT(IN) :: KVERB ! verbosity level +LOGICAL, INTENT(IN) :: ODUMMY_REAL! flag to interpolate dummy fields +LOGICAL, INTENT(IN) :: OUSECHEM ! flag to initialize chemistry +END SUBROUTINE READ_CHEM_DATA_CAMS_CASE +! +END INTERFACE +END MODULE MODI_READ_CHEM_DATA_CAMS_CASE +! ############################################################################# + SUBROUTINE READ_CHEM_DATA_CAMS_CASE(TPPRE_REAL1,HFILE,TPPGDFILE,PTIME_HORI, & + KVERB,ODUMMY_REAL,OUSECHEM ) +! ############################################################################# +! +!!**** *READ_CHEM_DATA_CAMS_CASE* - reads data for the initialization of real cases. +!! +!! PURPOSE +!! ------- +! This routine reads the two input files : +! The PGD which is closed after reading +! The CAMS file +! Projection is read in READ_LFIFM_PGD (MODD_GRID). +! Grid and definition of large domain are read in PGD file and +! NETCDF files. +! The PGD files are also read in READ_LFIFM_PGD. +! The PGD file is closed. +! Vertical grid is defined in READ_VER_GRID. +! PGD fields are stored on MESO-NH domain (in TRUNC_PGD). +!! +!!** METHOD +!! ------ +!! 0. Declarations +!! 1. Declaration of arguments +!! 2. Declaration of local variables +!! 1. Read PGD file +!! 1. Domain restriction +!! 2. Coordinate conversion to lat,lon system +!! 2. Read Netcdf fields and transfer CAMS var. in MNH var. +!! 3. Vertical grid +!! 4. Free all temporary allocations +!! +!! EXTERNAL +!! -------- +!! subroutine READ_LFIFM_PGD : to read PGD file +!! subroutine READ_VER_GRID : to read the vertical grid in namelist file. +!! subroutine HORIBL : horizontal bilinear interpolation +!! subroutine XYTOLATLON : projection from conformal to lat,lon +!! +!! Module MODI_READ_VER_GRID : interface for subroutine READ_VER_GRID +!! Module MODI_HORIBL : interface for subroutine HORIBL +!! Module MODI_XYTOLATLON : interface for subroutine XYTOLATLON +!! +!! IMPLICIT ARGUMENTS +!! ------------------ +!! +!! Module MODD_CONF : contains configuration variables for all models. +!! NVERB : verbosity level for output-listing +!! Module MODD_LUNIT : contains logical unit names for all models +!! CLUOUT0 : name of output-listing +!! Module MODD_PGDDIM : contains dimension of PGD fields +!! NPGDIMAX: dimension along x (no external point) +!! NPGDJMAX: dimension along y (no external point) +!! Module MODD_PARAMETERS +!! JPHEXT +!! +!! MODIFICATIONS +!! ------------- +!! Original 23/01/12 (C. Mari) +!! A. Berger 20/03/12 adapt whatever the chemical mechanism in BASIC +!! P. Wautelet 30/10/17 use F90 module for netCDF +!! J.Pianezzej 13/02/2019 : correction for use of MEGAN +!! M. Leriche 26/01/2021 : adapt to CAMS reanalysis file +!! M. Leriche 26/02/2021 : add initialization for dust and sea salt +!! P. Tulet 01/02/2022 : unit conversion for aerosols (SALTCAMn, AEROCAMn, DUSTCAMn) +!! M. Leriche 02/02/2022 : compute air density from CAMS +!------------------------------------------------------------------------------- +! +!* 0. DECLARATIONS +! ------------ +! +USE MODD_BLANK_n +USE MODD_CH_AEROSOL, ONLY: CORGANIC, NCARB, NSOA, NSP, LORILAM,& + JPMODE, LVARSIGI, LVARSIGJ,CAERONAMES,LAERINIT +USE MODD_CH_M9_n, ONLY: NEQ , CNAMES +USE MODD_CH_MNHC_n, ONLY: LUSECHEM,LUSECHAQ,LUSECHIC,LCH_PH +USE MODD_DUST, ONLY : LDUST, LDSTCAMS +USE MODD_SALT, ONLY : LSALT, LSLTCAMS +USE MODD_CONF +USE MODD_CONF_n +USE MODD_CST +USE MODD_DIM_n +USE MODD_GRID +USE MODD_GRID_n +USE MODD_IO, ONLY: TFILEDATA +USE MODD_LUNIT, ONLY: TLUOUT0 +USE MODE_MODELN_HANDLER +USE MODD_NETCDF, ONLY:CDFINT +USE MODD_NSV +USE MODD_PARAMETERS +USE MODD_PREP_REAL +USE MODD_TIME +USE MODD_TIME_n +! +!UPG*PT +!USE MODE_FM +!USE MODE_IO +USE MODE_TOOLS, ONLY: UPCASE +USE MODE_TOOLS_ll +USE MODE_IO_FILE, only: IO_File_close +!UPG*PT +USE MODE_MPPDB +USE MODE_THERMO +USE MODE_TIME +! +USE MODI_CH_AER_INIT_SOA +USE MODI_CH_INIT_SCHEME_n +USE MODI_CH_OPEN_INPUT +USE MODI_DUSTCAMS_n +USE MODI_HORIBL +USE MODI_INI_NSV +USE MODI_READ_HGRID_n +USE MODI_READ_VER_GRID +USE MODI_SALTCAMS_n +USE MODI_XYTOLATLON +USE MODI_AEROCAMS_n +! +USE NETCDF +! +IMPLICIT NONE +! +!* 0.1. Declaration of arguments +! ------------------------ +! +TYPE(TFILEDATA),POINTER,INTENT(IN) :: TPPRE_REAL1 ! PRE_REAL1 file +CHARACTER(LEN=28), INTENT(IN) :: HFILE ! name of the NETCDF file +TYPE(TFILEDATA), INTENT(IN) :: TPPGDFILE ! physiographic data file +REAL, INTENT(INOUT) :: PTIME_HORI ! time spent in hor. interpolations +INTEGER, INTENT(IN) :: KVERB ! verbosity level +LOGICAL, INTENT(IN) :: ODUMMY_REAL! flag to interpolate dummy fields +LOGICAL, INTENT(IN) :: OUSECHEM ! flag to initialize chemistry +! +!* 0.2 Declaration of local variables +! ------------------------------ +! General purpose variables +INTEGER :: ILUOUT0 ! Unit used for output msg. +INTEGER :: IRET ! Return code from subroutines +INTEGER :: JI,JJ,JK ! Dummy counters +INTEGER :: JLOOP1 ! +INTEGER :: JN ! conter of dust/SS modes +INTEGER :: JNCHEM, JNAER ! conters of chemical species in BASIC +! Variables used by the PGD reader +CHARACTER(LEN=28) :: YPGD_NAME ! not used - dummy argument +CHARACTER(LEN=28) :: YPGD_DAD_NAME ! not used - dummy argument +CHARACTER(LEN=2) :: YPGD_TYPE ! not used - dummy argument +! PGD Grib definition variables +INTEGER :: INO ! Number of points of the grid +INTEGER :: IIU ! Number of points along X +INTEGER :: IJU ! Number of points along Y +REAL, DIMENSION(:), ALLOCATABLE :: ZLONOUT ! mapping PGD -> Grib (lon.) +REAL, DIMENSION(:), ALLOCATABLE :: ZLATOUT ! mapping PGD -> Grib (lat.) +REAL, DIMENSION(:,:), ALLOCATABLE :: ZXM ! X of PGD mass points +REAL, DIMENSION(:,:), ALLOCATABLE :: ZYM ! Y of PGD mass points +REAL, DIMENSION(:,:), ALLOCATABLE :: ZLATM ! Lat of PGD mass points +REAL, DIMENSION(:,:), ALLOCATABLE :: ZLONM ! Lon of PGD mass points +! Variable involved in the task of reading the netcdf file +REAL,DIMENSION(:,:),ALLOCATABLE :: ZVALUE ! Intermediate array +REAL,DIMENSION(:),ALLOCATABLE :: ZVALUE1D ! Intermediate array +REAL,DIMENSION(:,:),ALLOCATABLE :: ZOUT ! Intermediate arrays +REAL,DIMENSION(:),ALLOCATABLE :: ZOUT1D ! Intermediate arrays +INTEGER :: ind_netcdf ! Indice for netcdf var. +!chemistry field infile CAM1.nam +INTEGER :: ICHANNEL +CHARACTER(LEN=8) :: YCAM="CAM1.nam" +integer :: ICAM +CHARACTER(LEN=100) :: YFORMAT +CHARACTER(LEN=40), DIMENSION(:), ALLOCATABLE :: YSPCMNH +integer, dimension(:), ALLOCATABLE :: ISPCCAM +CHARACTER(LEN=9) :: YA +REAL,DIMENSION(:,:),ALLOCATABLE :: ZCOEFCAMSEU +REAL,DIMENSION(:,:),ALLOCATABLE :: ZMASMOLCAMSEU +CHARACTER(LEN=18),dimension(:,:),ALLOCATABLE :: YSPCCAMSEU +type TZCAM +real :: ZCOEFCAM, ZMASMOLCAM +character(16) :: YSPCCAM +end type TZCAM +type(TZCAM), DIMENSION(:,:),ALLOCATABLE :: TZSTOC +! model indice +INTEGER :: IMI +TYPE(TFILEDATA),POINTER :: TZFILE +! for dust and sea salt +REAL, DIMENSION(:,:,:,:), ALLOCATABLE :: ZMASS1, ZMASS2 +! +! For netcdf +! +integer(kind=CDFINT) :: status, ncid, varid +integer(kind=CDFINT) :: lat_varid, lon_varid, lev_varid +integer(kind=CDFINT) :: t_varid, q_varid, ps_varid +integer(kind=CDFINT) :: recid, latid, lonid, levid +integer(kind=CDFINT) :: latlen, lonlen, levlen +integer(kind=CDFINT) :: KILEN +integer :: mmr_dust1_varid, mmr_dust2_varid, mmr_dust3_varid ! for init. dust +integer :: mmr_seasalt1_varid, mmr_seasalt2_varid, mmr_seasalt3_varid ! for init sea salt +CHARACTER(LEN=40) :: recname +REAL, DIMENSION(:), ALLOCATABLE :: lats +REAL, DIMENSION(:), ALLOCATABLE :: lons +REAL, DIMENSION(:), ALLOCATABLE :: levs +INTEGER, DIMENSION(:), ALLOCATABLE :: count3d, start3d +INTEGER, DIMENSION(:), ALLOCATABLE :: count2d, start2d +INTEGER, DIMENSION(:), ALLOCATABLE :: kinlo +REAL, DIMENSION(:,:,:), ALLOCATABLE :: vartemp3d,vartemp3dbis,vartemp3dter +REAL, DIMENSION(:,:,:), ALLOCATABLE :: vartemp3dquater +REAL, DIMENSION(:,:,:), ALLOCATABLE :: ZCHEMCAM, ZTCAM, ZQCAM, ZPRESSCAM +REAL, DIMENSION(:,:), ALLOCATABLE :: ZPSCAM +REAL, DIMENSION(:,:,:), ALLOCATABLE :: mmr_dust1, mmr_dust2, mmr_dust3 +REAL, DIMENSION(:,:,:), ALLOCATABLE :: mmr_seasalt1, mmr_seasalt2, mmr_seasalt3 +REAL :: scale, offset +! for reverse altitude +REAL, DIMENSION(:), ALLOCATABLE :: TMP1, TMP2 +REAL, DIMENSION(:,:,:), ALLOCATABLE :: TMP3 +REAL, DIMENSION(:,:,:,:), ALLOCATABLE :: TMP4,TMP5 +REAL, DIMENSION(:,:,:), ALLOCATABLE :: ZPRESS_SV_LS, ZRHO_SV_LS +! +!---------------------------------------------------------------------- +TZFILE => NULL() +! +IMI = GET_CURRENT_MODEL_INDEX() +! +!* 1. READ PGD FILE +! ------------- +! +ILUOUT0 = TLUOUT0%NLU +CALL READ_HGRID_n(TPPGDFILE,YPGD_NAME,YPGD_DAD_NAME,YPGD_TYPE) +! +!* 1.1 Domain restriction +! +CALL GET_DIM_EXT_ll('B',IIU,IJU) +INO = IIU * IJU +! +!* 1.2 Coordinate conversion to lat,lon system +! +ALLOCATE (ZXM(IIU,IJU)) +ALLOCATE (ZYM(IIU,IJU)) +ALLOCATE (ZLONM(IIU,IJU)) +ALLOCATE (ZLATM(IIU,IJU)) +ZXM(1:IIU-1,1) = (XXHAT(1:IIU-1) + XXHAT(2:IIU) ) / 2. +ZXM(IIU,1) = XXHAT(IIU) - XXHAT(IIU-1) + ZXM(IIU-1,1) +ZXM(:,2:IJU) = SPREAD(ZXM(:,1),2,IJU-1) +ZYM(1,1:IJU-1) = (XYHAT(1:IJU-1) + XYHAT(2:IJU)) / 2. +ZYM(1,IJU) = XYHAT(IJU) - XYHAT(IJU-1) + ZYM(1,IJU-1) +ZYM(2:IIU,:) = SPREAD(ZYM(1,:),1,IIU-1) +CALL SM_XYTOLATLON_A (XLAT0,XLON0,XRPK,XLATORI,XLONORI,ZXM,ZYM,ZLATM,ZLONM, & + IIU,IJU) +ALLOCATE (ZLONOUT(INO)) +ALLOCATE (ZLATOUT(INO)) +JLOOP1 = 0 +DO JJ = 1, IJU + ZLONOUT(JLOOP1+1:JLOOP1+IIU) = ZLONM(1:IIU,JJ) + ZLATOUT(JLOOP1+1:JLOOP1+IIU) = ZLATM(1:IIU,JJ) + JLOOP1 = JLOOP1 + IIU +ENDDO +DEALLOCATE (ZYM) +DEALLOCATE (ZXM) +DEALLOCATE (ZLONM) +DEALLOCATE (ZLATM) +! +! +!* 2. READ NETCDF FIELDS +! ------------------ +! +!* 2.1 Open netcdf files +! +status = nf90_open(HFILE, nf90_nowrite, ncid) +if (status /= nf90_noerr) call handle_err(status) +! +!* 2.2 Read netcdf files +! +! get dimension IDs +! +!* get dimension ID of unlimited variable in netcdf file +!status = nf90_inquire(ncid, unlimitedDimId = recid) +!if (status /= nf90_noerr) call handle_err(status) +status = nf90_inq_dimid(ncid, "latitude", latid) +if (status /= nf90_noerr) call handle_err(status) +status = nf90_inq_dimid(ncid, "longitude", lonid) +if (status /= nf90_noerr) call handle_err(status) +status = nf90_inq_dimid(ncid, "level", levid) +if (status /= nf90_noerr) call handle_err(status) +! +! get dimensions +! +!* get dimension and name of unlimited variable in netcdf file +!status = nf90_inquire_dimension(ncid, recid, name=recname, len=nrecs) +!if (status /= nf90_noerr) call handle_err(status) +status = nf90_inquire_dimension(ncid, latid, len=latlen) +if (status /= nf90_noerr) call handle_err(status) +status = nf90_inquire_dimension(ncid, lonid, len=lonlen) +if (status /= nf90_noerr) call handle_err(status) +status = nf90_inquire_dimension(ncid, levid, len=levlen) +if (status /= nf90_noerr) call handle_err(status) +! +! get variable IDs +! +status = nf90_inq_varid(ncid, "latitude", lat_varid) +if (status /= nf90_noerr) call handle_err(status) +status = nf90_inq_varid(ncid, "longitude", lon_varid) +if (status /= nf90_noerr) call handle_err(status) +status = nf90_inq_varid(ncid, "level", lev_varid) +if (status /= nf90_noerr) call handle_err(status) +status = nf90_inq_varid(ncid, "t", t_varid) +if (status /= nf90_noerr) call handle_err(status) +status = nf90_inq_varid(ncid, "q", q_varid) +if (status /= nf90_noerr) call handle_err(status) +status = nf90_inq_varid(ncid, "sp", ps_varid) +if (status /= nf90_noerr) call handle_err(status) +IF (LDUST .AND. LDSTCAMS) THEN + status = nf90_inq_varid(ncid, "aermr04", mmr_dust1_varid) + if (status /= nf90_noerr) call handle_err(status) + status = nf90_inq_varid(ncid, "aermr05", mmr_dust2_varid) + if (status /= nf90_noerr) call handle_err(status) + status = nf90_inq_varid(ncid, "aermr06", mmr_dust3_varid) + if (status /= nf90_noerr) call handle_err(status) +ENDIF +IF (LSALT .AND. LSLTCAMS) THEN + status = nf90_inq_varid(ncid, "aermr01", mmr_seasalt1_varid) + if (status /= nf90_noerr) call handle_err(status) + status = nf90_inq_varid(ncid, "aermr02", mmr_seasalt2_varid) + if (status /= nf90_noerr) call handle_err(status) + status = nf90_inq_varid(ncid, "aermr03", mmr_seasalt3_varid) + if (status /= nf90_noerr) call handle_err(status) +ENDIF + +! +KILEN = latlen * lonlen +! +!* 2.3 Read data. +! +ALLOCATE (count3d(4)) +ALLOCATE (start3d(4)) +ALLOCATE (count2d(3)) +ALLOCATE (start2d(3)) +ALLOCATE (lats(latlen)) +ALLOCATE (lons(lonlen)) +ALLOCATE (levs(levlen)) +ALLOCATE (kinlo(latlen)) +kinlo(:) = lonlen +IF (OUSECHEM) THEN ! chem and possibly orilam + ALLOCATE (vartemp3d(lonlen,latlen,levlen)) + ALLOCATE (vartemp3dbis(lonlen,latlen,levlen)) + ALLOCATE (vartemp3dter(lonlen,latlen,levlen)) + ALLOCATE (vartemp3dquater(lonlen,latlen,levlen)) + ALLOCATE (ZCHEMCAM(lonlen,latlen,levlen)) +ENDIF +IF (LDUST .AND. LDSTCAMS) THEN + ALLOCATE (mmr_dust1(lonlen,latlen,levlen)) + ALLOCATE (mmr_dust2(lonlen,latlen,levlen)) + ALLOCATE (mmr_dust3(lonlen,latlen,levlen)) +ENDIF +IF (LSALT .AND. LSLTCAMS) THEN + ALLOCATE (mmr_seasalt1(lonlen,latlen,levlen)) + ALLOCATE (mmr_seasalt2(lonlen,latlen,levlen)) + ALLOCATE (mmr_seasalt3(lonlen,latlen,levlen)) +ENDIF +ALLOCATE (ZTCAM(lonlen,latlen,levlen)) +ALLOCATE (ZQCAM(lonlen,latlen,levlen)) +ALLOCATE (ZPSCAM(lonlen,latlen)) +ALLOCATE (ZPRESSCAM(lonlen,latlen,levlen)) +ALLOCATE (XA_SV_LS(levlen)) +ALLOCATE (XB_SV_LS(levlen)) +ALLOCATE (XT_SV_LS(IIU,IJU,levlen)) +ALLOCATE (XQ_SV_LS(IIU,IJU,levlen,1)) +ALLOCATE (XPS_SV_LS(IIU,IJU)) +ALLOCATE (XZS_SV_LS(IIU,IJU)) +ALLOCATE (ZPRESS_SV_LS(IIU,IJU,levlen)) +ALLOCATE (ZRHO_SV_LS(IIU,IJU,levlen)) +! take the orography from ECMWF +XZS_SV_LS(:,:) = XZS_LS(:,:) +! +! get values of variables +! +status = nf90_get_var(ncid, lat_varid, lats(:)) +if (status /= nf90_noerr) call handle_err(status) +status = nf90_get_var(ncid, lon_varid, lons(:)) +if (status /= nf90_noerr) call handle_err(status) +status = nf90_get_var(ncid, lev_varid, levs(:)) +if (status /= nf90_noerr) call handle_err(status) +! +! +! Reference pressure (needed for the vertical interpolation) +!!! XP00_SV_LS = p0 +XP00_SV_LS = 101325.0 +! +! a and b coefficients (needed for the vertical interpolation) +! +XA_SV_LS(:) = (/ 20.000000000, 38.425343000, 63.647804000, 95.636963000, 134.48330700, & + 180.58435100, 234.77905300, 298.49578900, 373.97192400, 464.61813400, & + 575.65100100, 713.21807900, 883.66052200, 1094.8347170, 1356.4746090, & + 1680.6402590, 2082.2739260, 2579.8886720, 3196.4216310, 3960.2915040, & + 4906.7084960, 6018.0195310, 7306.6313480, 8765.0537110, 10376.126953, & + 12077.446289, 13775.325195, 15379.805664, 16819.474609, 18045.183594, & + 19027.695313, 19755.109375, 20222.205078, 20429.863281, 20384.480469, & + 20097.402344, 19584.330078, 18864.750000, 17961.357422, 16899.468750, & + 15706.447266, 14411.124023, 13043.218750, 11632.758789, 10209.500977, & + 8802.3564450, 7438.8032230, 6144.3149410, 4941.7783200, 3850.9133300, & + 2887.6965330, 2063.7797850, 1385.9125980, 855.36175500, 467.33358800, & + 210.39389000, 65.889244000, 7.3677430000, 0.0000000000, 0.0000000000 /) + +XB_SV_LS(:) = (/ 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, & + 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, & + 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, & + 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, & + 0.00000000, 0.00000000, 0.00000000, 0.00007600, 0.00046100, & + 0.00181500, 0.00508100, 0.01114300, 0.02067800, 0.03412100, & + 0.05169000, 0.07353400, 0.09967500, 0.13002300, 0.16438400, & + 0.20247600, 0.24393300, 0.28832300, 0.33515500, 0.38389200, & + 0.43396300, 0.48477200, 0.53571000, 0.58616800, 0.63554700, & + 0.68326900, 0.72878600, 0.77159700, 0.81125300, 0.84737500, & + 0.87965700, 0.90788400, 0.93194000, 0.95182200, 0.96764500, & + 0.97966300, 0.98827000, 0.99401900, 0.99763000, 1.00000000 /) +! +! Read 1 record of lon*lat values, starting at the +! beginning of the record (the (1, 1, rec=time) element in the netCDF +! file). +count2d(1) = lonlen +count2d(2) = latlen +count2d(3) = 1 +start2d(1) = 1 +start2d(2) = 1 +start2d(3) = 1 +! Read 1 record of lon*lat*lev values, starting at the +! beginning of the record (the (1, 1, 1, rec) element in the netCDF +! file). +count3d(1) = lonlen +count3d(2) = latlen +count3d(3) = levlen +count3d(4) = 1 +start3d(1) = 1 +start3d(2) = 1 +start3d(3) = 1 +start3d(4) = 1 +! +! +ALLOCATE(ZVALUE(levlen,KILEN)) +ALLOCATE(ZOUT(levlen,INO)) +ALLOCATE(ZVALUE1D(KILEN)) +ALLOCATE(ZOUT1D(INO)) +! +!* 2.3.1 read meteo veriables +! temperature, spec. hum. and surface pressure +! needed for the vertical interpolation +! +status = nf90_get_var(ncid, t_varid, ZTCAM(:,:,:), start=start3d, count=count3d) +if (status /= nf90_noerr) call handle_err(status) +status = nf90_get_att(ncid, t_varid, "scale_factor", scale) +status = nf90_get_att(ncid, t_varid, "add_offset", offset) +ZTCAM(:,:,:) = offset + scale * ZTCAM(:,:,:) +! +status = nf90_get_var(ncid, q_varid, ZQCAM(:,:,:), start=start3d, count=count3d) +if (status /= nf90_noerr) call handle_err(status) +status = nf90_get_att(ncid, q_varid, "scale_factor", scale) +status = nf90_get_att(ncid, q_varid, "add_offset", offset) +ZQCAM(:,:,:) = offset + scale * ZQCAM(:,:,:) +! +status = nf90_get_var(ncid, ps_varid, ZPSCAM(:,:), start=start2d, count=count2d) +if (status /= nf90_noerr) call handle_err(status) +status = nf90_get_att(ncid, ps_varid, "scale_factor", scale) +status = nf90_get_att(ncid, ps_varid, "add_offset", offset) +ZPSCAM(:,:) = offset + scale * ZPSCAM(:,:) +! +DO JK = 1, levlen + IF (JK.EQ.1) THEN + ZPRESSCAM(:,:,JK) = (XA_SV_LS(JK) + XB_SV_LS(JK)*ZPSCAM(:,:)) ! ZPRESCAM = 0. for n=0 + ELSE + ZPRESSCAM(:,:,JK) = ( XA_SV_LS(JK) + XA_SV_LS(JK-1) + & + ( XB_SV_LS(JK) + XB_SV_LS(JK-1))*ZPSCAM(:,:)) / 2. + ENDIF +END DO + +! +where (ZLONOUT(:) < 0.) ZLONOUT(:) = ZLONOUT(:) + 360. ! correct longitudes +! +!* 2.3.2 meteo. variables horizontal interpolation +! +DO JK = 1, levlen + JLOOP1 = 0 + DO JJ = 1, latlen + ZVALUE(JK,JLOOP1+1:JLOOP1+lonlen) = ZTCAM(1:lonlen,JJ,JK) + JLOOP1 = JLOOP1 + lonlen + ENDDO + CALL HORIBL(lats(1),lons(1),lats(latlen),lons(lonlen), & + latlen,kinlo,KILEN, & + ZVALUE(JK,:),INO,ZLONOUT,ZLATOUT, & + ZOUT(JK,:),.FALSE.,PTIME_HORI,.FALSE.) +! + CALL ARRAY_1D_TO_2D(INO,ZOUT(JK,:),IIU,IJU, & + XT_SV_LS(:,:,JK)) +ENDDO +! +DO JK = 1, levlen + JLOOP1 = 0 + DO JJ = 1, latlen + ZVALUE(JK,JLOOP1+1:JLOOP1+lonlen) = ZQCAM(1:lonlen,JJ,JK) + JLOOP1 = JLOOP1 + lonlen + ENDDO + CALL HORIBL(lats(1),lons(1),lats(latlen),lons(lonlen), & + latlen,kinlo,KILEN, & + ZVALUE(JK,:),INO,ZLONOUT,ZLATOUT, & + ZOUT(JK,:),.FALSE.,PTIME_HORI,.FALSE.) +! + CALL ARRAY_1D_TO_2D(INO,ZOUT(JK,:),IIU,IJU, & + XQ_SV_LS(:,:,JK,1)) +ENDDO +! +DO JK = 1, levlen + JLOOP1 = 0 + DO JJ = 1, latlen + ZVALUE(JK,JLOOP1+1:JLOOP1+lonlen) = ZPRESSCAM(1:lonlen,JJ,JK) + JLOOP1 = JLOOP1 + lonlen + ENDDO + CALL HORIBL(lats(1),lons(1),lats(latlen),lons(lonlen), & + latlen,kinlo,KILEN, & + ZVALUE(JK,:),INO,ZLONOUT,ZLATOUT, & + ZOUT(JK,:),.FALSE.,PTIME_HORI,.FALSE.) +! + CALL ARRAY_1D_TO_2D(INO,ZOUT(JK,:),IIU,IJU, & + ZPRESS_SV_LS(:,:,JK)) +ENDDO +! +JLOOP1 = 0 +DO JJ = 1, latlen + ZVALUE1D(JLOOP1+1:JLOOP1+lonlen) = ZPSCAM(1:lonlen,JJ) + JLOOP1 = JLOOP1 + lonlen +ENDDO +CALL HORIBL(lats(1),lons(1),lats(latlen),lons(lonlen), & + latlen,kinlo,KILEN, & + ZVALUE1D(:),INO,ZLONOUT,ZLATOUT, & + ZOUT1D(:),.FALSE.,PTIME_HORI,.FALSE.) +! +CALL ARRAY_1D_TO_2D(INO,ZOUT1D(:),IIU,IJU, & + XPS_SV_LS(:,:)) +! +! air density in kg/m3 RHO=PM/RT +ZRHO_SV_LS(:,:,:) = (ZPRESS_SV_LS(:,:,:))/(XRD*XT_SV_LS(:,:,:)) + +! +!* 2.3.3 correct negative values produced by the horizontal interpolations +! +XPS_SV_LS(:,:) = MAX(XPS_SV_LS(:,:),0.) +XT_SV_LS(:,:,:) = MAX(XT_SV_LS(:,:,:),0.) +XQ_SV_LS(:,:,:,1) = MAX(XQ_SV_LS(:,:,:,1),0.) +ZRHO_SV_LS(:,:,:) = MAX(ZRHO_SV_LS(:,:,:),0.) +! +! +!* 2.4 initialize NSV variables +! +! Always initialize chemical scheme variables before INI_NSV call ! +CALL CH_INIT_SCHEME_n(IMI,LUSECHAQ,LUSECHIC,LCH_PH,ILUOUT0,KVERB) +IF (LORILAM) THEN + CORGANIC = "MPMPO" + LVARSIGI = .TRUE. + LVARSIGJ = .TRUE. + CALL CH_AER_INIT_SOA(ILUOUT0, KVERB) +END IF +IF (OUSECHEM) LUSECHEM = .TRUE. +! initialise NSV_* variables +CALL INI_NSV(1) +IF (ALLOCATED(XSV_LS)) DEALLOCATE(XSV_LS) +ALLOCATE (XSV_LS(IIU,IJU,levlen,NSV)) +XSV_LS(:,:,:,:) = 0. +! +!* 2.5 read chem. variables and convert them into MNH variables +! +IF (OUSECHEM) THEN + WRITE (ILUOUT0,'(A,A4,A)') ' | Reading CAMS species (ppp) from ',HFILE,'file' +! +! read CAMS species from the file CAM1.nam +! +! open input file + CALL CH_OPEN_INPUT(YCAM,"CAM2MESONH",TZFILE,ILUOUT0,KVERB) + ICHANNEL = TZFILE%NLU +! +!read number of cams species to transfer into mesonh + READ(ICHANNEL, *) ICAM + IF (KVERB >= 5) WRITE (ILUOUT0,*) "number of cams species to transfer into & + & mesonh : ", ICAM +! +!read data input format + READ(ICHANNEL,"(A)") YFORMAT + YFORMAT=UPCASE(YFORMAT) + IF (KVERB >= 5) WRITE (ILUOUT0,*) "input format is: ", YFORMAT +! +!allocate fields + ALLOCATE(YSPCMNH(ICAM)) !MESONH species + ALLOCATE(TZSTOC(ICAM,4)) !CAMS coefficient and CAMS species associated + ALLOCATE(ISPCCAM(ICAM)) !number of CAMS species into each MESONH species + ALLOCATE(ZCOEFCAMSEU(ICAM,4))!Coef stoich of each CAMS species + ALLOCATE(ZMASMOLCAMSEU(ICAM,4))!molar mass of each CAMS species + ALLOCATE(YSPCCAMSEU(ICAM,4)) !CAMS species name +!read MESONH variable names and CAMS variable names associated + DO JI = 1,ICAM !for every MNH species existing in CAM1.nam + READ(ICHANNEL,YFORMAT) YSPCMNH(JI), ISPCCAM(JI), & !reading line by line + TZSTOC(JI,1)%ZCOEFCAM, TZSTOC(JI,1)%YSPCCAM, TZSTOC(JI,1)%ZMASMOLCAM, & + TZSTOC(JI,2)%ZCOEFCAM, TZSTOC(JI,2)%YSPCCAM, TZSTOC(JI,2)%ZMASMOLCAM, & + TZSTOC(JI,3)%ZCOEFCAM, TZSTOC(JI,3)%YSPCCAM, TZSTOC(JI,3)%ZMASMOLCAM, & + TZSTOC(JI,4)%ZCOEFCAM, TZSTOC(JI,4)%YSPCCAM, TZSTOC(JI,4)%ZMASMOLCAM + WRITE(ILUOUT0,YFORMAT) YSPCMNH(JI), ISPCCAM(JI),& +!writing in arrays + TZSTOC(JI,1)%ZCOEFCAM, TZSTOC(JI,1)%YSPCCAM, TZSTOC(JI,1)%ZMASMOLCAM, & + TZSTOC(JI,2)%ZCOEFCAM, TZSTOC(JI,2)%YSPCCAM, TZSTOC(JI,2)%ZMASMOLCAM, & + TZSTOC(JI,3)%ZCOEFCAM, TZSTOC(JI,3)%YSPCCAM, TZSTOC(JI,3)%ZMASMOLCAM, & + TZSTOC(JI,4)%ZCOEFCAM, TZSTOC(JI,4)%YSPCCAM, TZSTOC(JI,4)%ZMASMOLCAM +! + ZCOEFCAMSEU(JI,1) = (TZSTOC(JI,1)%ZCOEFCAM) !coef stoich of each CAMS species set into an array + ZCOEFCAMSEU(JI,2) = (TZSTOC(JI,2)%ZCOEFCAM) + ZCOEFCAMSEU(JI,3) = (TZSTOC(JI,3)%ZCOEFCAM) + ZCOEFCAMSEU(JI,4) = (TZSTOC(JI,4)%ZCOEFCAM) +! + YSPCCAMSEU(JI,1)=trim(TZSTOC(JI,1)%YSPCCAM) !specie name of each CAMS specie set into an array + YSPCCAMSEU(JI,2)=trim(TZSTOC(JI,2)%YSPCCAM) + YSPCCAMSEU(JI,3)=trim(TZSTOC(JI,3)%YSPCCAM) + YSPCCAMSEU(JI,4)=trim(TZSTOC(JI,4)%YSPCCAM) +! + ZMASMOLCAMSEU(JI,1)= (TZSTOC(JI,1)%ZMASMOLCAM) ! molar mass to convert kg/kg to ppp + ZMASMOLCAMSEU(JI,2)= (TZSTOC(JI,2)%ZMASMOLCAM) + ZMASMOLCAMSEU(JI,3)= (TZSTOC(JI,3)%ZMASMOLCAM) + ZMASMOLCAMSEU(JI,4)= (TZSTOC(JI,4)%ZMASMOLCAM) +! +! read chem. variables and exchange CAMS values onto prognostic variables XSV_LS +! convert CAMS fields to 2D for use in horizontal interpolation routine HORIBL.f90 +! + DO JNCHEM = NSV_CHEMBEG, NSV_CHEMEND !loop on all MNH species + IF (trim(CNAMES(JNCHEM-NSV_CHEMBEG+1))==trim(YSPCMNH(JI))) THEN !MNH mechanism species + IF (ISPCCAM(JI)==1) THEN + status = nf90_inq_varid(ncid, trim(YSPCCAMSEU(JI,1)), ind_netcdf) + if (status /= nf90_noerr) call handle_err(status) + status = nf90_get_var(ncid, ind_netcdf, vartemp3d, start=start3d, count=count3d) + if (status /= nf90_noerr) call handle_err(status) + status = nf90_get_att(ncid, ind_netcdf, "scale_factor", scale) + status = nf90_get_att(ncid, ind_netcdf, "add_offset", offset) + vartemp3d(:,:,:)=offset + scale * vartemp3d(:,:,:) + ZCHEMCAM(:,:,:)=ZCOEFCAMSEU(JI,1)*vartemp3d(:,:,:)*XMD*1E3/ZMASMOLCAMSEU(JI,1) + ELSE IF (ISPCCAM(JI)==2) THEN + status = nf90_inq_varid(ncid, trim(YSPCCAMSEU(JI,1)), ind_netcdf) + if (status /= nf90_noerr) call handle_err(status) + status = nf90_get_var(ncid, ind_netcdf, vartemp3d, start=start3d, count=count3d) + if (status /= nf90_noerr) call handle_err(status) + status = nf90_get_att(ncid, ind_netcdf, "scale_factor", scale) + status = nf90_get_att(ncid, ind_netcdf, "add_offset", offset) + vartemp3d(:,:,:)=offset + scale*vartemp3d(:,:,:) + status = nf90_inq_varid(ncid, trim(YSPCCAMSEU(JI,2)), ind_netcdf) + if (status /= nf90_noerr) call handle_err(status) + status = nf90_get_var(ncid, ind_netcdf, vartemp3dbis, start=start3d, count=count3d) + if (status /= nf90_noerr) call handle_err(status) + status = nf90_get_att(ncid, ind_netcdf, "scale_factor", scale) + status = nf90_get_att(ncid, ind_netcdf, "add_offset", offset) + vartemp3dbis(:,:,:)=offset + scale*vartemp3dbis(:,:,:) + ZCHEMCAM(:,:,:)=ZCOEFCAMSEU(JI,1)*vartemp3d(:,:,:)*XMD*1E3/ZMASMOLCAMSEU(JI,1) + & + ZCOEFCAMSEU(JI,2)*vartemp3dbis(:,:,:)*XMD*1E3/ZMASMOLCAMSEU(JI,2) + ELSE IF (ISPCCAM(JI)==3) THEN + status = nf90_inq_varid(ncid, trim(YSPCCAMSEU(JI,1)), ind_netcdf) + if (status /= nf90_noerr) call handle_err(status) + status = nf90_get_var(ncid, ind_netcdf, vartemp3d, start=start3d, count=count3d) + if (status /= nf90_noerr) call handle_err(status) + status = nf90_get_att(ncid, ind_netcdf, "scale_factor", scale) + status = nf90_get_att(ncid, ind_netcdf, "add_offset", offset) + vartemp3d(:,:,:)=offset + scale*vartemp3d(:,:,:) + status = nf90_inq_varid(ncid, trim(YSPCCAMSEU(JI,2)), ind_netcdf) + if (status /= nf90_noerr) call handle_err(status) + status = nf90_get_var(ncid, ind_netcdf, vartemp3dbis, start=start3d, count=count3d) + if (status /= nf90_noerr) call handle_err(status) + status = nf90_get_att(ncid, ind_netcdf, "scale_factor", scale) + status = nf90_get_att(ncid, ind_netcdf, "add_offset", offset) + vartemp3dbis(:,:,:)=offset + scale*vartemp3dbis(:,:,:) + status = nf90_inq_varid(ncid, trim(YSPCCAMSEU(JI,3)), ind_netcdf) + if (status /= nf90_noerr) call handle_err(status) + status = nf90_get_var(ncid, ind_netcdf, vartemp3dter, start=start3d, count=count3d) + if (status /= nf90_noerr) call handle_err(status) + status = nf90_get_att(ncid, ind_netcdf, "scale_factor", scale) + status = nf90_get_att(ncid, ind_netcdf, "add_offset", offset) + vartemp3dter(:,:,:)=offset + scale*vartemp3dter(:,:,:) + ZCHEMCAM(:,:,:)=ZCOEFCAMSEU(JI,1)*vartemp3d(:,:,:)*XMD*1E3/ZMASMOLCAMSEU(JI,1) +& + ZCOEFCAMSEU(JI,2)*vartemp3dbis(:,:,:)*XMD*1E3/ZMASMOLCAMSEU(JI,2) +& + ZCOEFCAMSEU(JI,3)*vartemp3dter(:,:,:)*XMD*1E3/ZMASMOLCAMSEU(JI,3) + ELSE IF (ISPCCAM(JI)==4) THEN + status = nf90_inq_varid(ncid, trim(YSPCCAMSEU(JI,1)), ind_netcdf) + if (status /= nf90_noerr) call handle_err(status) + status = nf90_get_var(ncid, ind_netcdf, vartemp3d, start=start3d, count=count3d) + if (status /= nf90_noerr) call handle_err(status) + status = nf90_get_att(ncid, ind_netcdf, "scale_factor", scale) + status = nf90_get_att(ncid, ind_netcdf, "add_offset", offset) + vartemp3d(:,:,:)=offset + scale*vartemp3d(:,:,:) + status = nf90_inq_varid(ncid, trim(YSPCCAMSEU(JI,2)), ind_netcdf) + if (status /= nf90_noerr) call handle_err(status) + status = nf90_get_var(ncid, ind_netcdf, vartemp3dbis, start=start3d, count=count3d) + if (status /= nf90_noerr) call handle_err(status) + status = nf90_get_att(ncid, ind_netcdf, "scale_factor", scale) + status = nf90_get_att(ncid, ind_netcdf, "add_offset", offset) + vartemp3dbis(:,:,:)=offset + scale*vartemp3dbis(:,:,:) + status = nf90_inq_varid(ncid, trim(YSPCCAMSEU(JI,3)), ind_netcdf) + if (status /= nf90_noerr) call handle_err(status) + status = nf90_get_var(ncid, ind_netcdf, vartemp3dter, start=start3d, count=count3d) + if (status /= nf90_noerr) call handle_err(status) + status = nf90_get_att(ncid, ind_netcdf, "scale_factor", scale) + status = nf90_get_att(ncid, ind_netcdf, "add_offset", offset) + vartemp3dter(:,:,:)=offset + scale*vartemp3dter(:,:,:) + status = nf90_inq_varid(ncid, trim(YSPCCAMSEU(JI,4)), ind_netcdf) + if (status /= nf90_noerr) call handle_err(status) + status = nf90_get_var(ncid, ind_netcdf, vartemp3dquater, start=start3d, count=count3d) + if (status /= nf90_noerr) call handle_err(status) + status = nf90_get_att(ncid, ind_netcdf, "scale_factor", scale) + status = nf90_get_att(ncid, ind_netcdf, "add_offset", offset) + vartemp3dquater(:,:,:)=offset + scale*vartemp3dquater(:,:,:) + ZCHEMCAM(:,:,:)=ZCOEFCAMSEU(JI,1)*vartemp3d(:,:,:)*XMD*1E3/ZMASMOLCAMSEU(JI,1)+& + ZCOEFCAMSEU(JI,2)*vartemp3dbis(:,:,:)*XMD*1E3/ZMASMOLCAMSEU(JI,2)+& + ZCOEFCAMSEU(JI,3)*vartemp3dter(:,:,:)*XMD*1E3/ZMASMOLCAMSEU(JI,3)+& + ZCOEFCAMSEU(JI,4)*vartemp3dquater(:,:,:)*XMD*1E3/ZMASMOLCAMSEU(JI,4) + ENDIF + DO JK = 1, levlen + JLOOP1 = 0 + DO JJ = 1, latlen + ZVALUE(JK,JLOOP1+1:JLOOP1+lonlen) = ZCHEMCAM(1:lonlen,JJ,JK) + JLOOP1 = JLOOP1+lonlen + ENDDO + CALL HORIBL(lats(1),lons(1),lats(latlen),lons(lonlen), & + latlen,kinlo,KILEN, & + ZVALUE(JK,:),INO,ZLONOUT,ZLATOUT, & + ZOUT(JK,:),.FALSE.,PTIME_HORI,.TRUE.) + CALL ARRAY_1D_TO_2D(INO,ZOUT(JK,:),IIU,IJU, & + XSV_LS(:,:,JK,JNCHEM) ) + ENDDO ! levlen + ENDIF + XSV_LS(:,:,:,JNCHEM) = MAX(XSV_LS(:,:,:,JNCHEM), 0.) + ENDDO ! JNCHEM +! + DO JNAER = NSV_AERBEG, NSV_AEREND ! no need to convert to ppp + IF (trim(CAERONAMES(JNAER-NSV_AERBEG+1))==trim(YSPCMNH(JI))) THEN !MNH mechanism species + + IF (ISPCCAM(JI)==1) THEN + status = nf90_inq_varid(ncid, trim(YSPCCAMSEU(JI,1)), ind_netcdf) + if (status /= nf90_noerr) call handle_err(status) + status = nf90_get_var(ncid, ind_netcdf, vartemp3d, start=start3d, count=count3d) + if (status /= nf90_noerr) call handle_err(status) + status = nf90_get_att(ncid, ind_netcdf, "scale_factor", scale) + status = nf90_get_att(ncid, ind_netcdf, "add_offset", offset) + ZCHEMCAM(:,:,:)=ZCOEFCAMSEU(JI,1)*(offset + scale*vartemp3d(:,:,:)) + ELSE IF (ISPCCAM(JI)==2) THEN + status = nf90_inq_varid(ncid, trim(YSPCCAMSEU(JI,1)), ind_netcdf) + if (status /= nf90_noerr) call handle_err(status) + status = nf90_get_var(ncid, ind_netcdf, vartemp3d, start=start3d, count=count3d) + if (status /= nf90_noerr) call handle_err(status) + status = nf90_get_att(ncid, ind_netcdf, "scale_factor", scale) + status = nf90_get_att(ncid, ind_netcdf, "add_offset", offset) + vartemp3d(:,:,:)=offset + scale*vartemp3d(:,:,:) + status = nf90_inq_varid(ncid, trim(YSPCCAMSEU(JI,2)), ind_netcdf) + if (status /= nf90_noerr) call handle_err(status) + status = nf90_get_var(ncid, ind_netcdf, vartemp3dbis, start=start3d, count=count3d) + if (status /= nf90_noerr) call handle_err(status) + status = nf90_get_att(ncid, ind_netcdf, "scale_factor", scale) + status = nf90_get_att(ncid, ind_netcdf, "add_offset", offset) + vartemp3dbis(:,:,:)=offset + scale*vartemp3dbis(:,:,:) + ZCHEMCAM(:,:,:)=ZCOEFCAMSEU(JI,1)*vartemp3d(:,:,:) + & + ZCOEFCAMSEU(JI,2)*vartemp3dbis(:,:,:) + ELSE IF (ISPCCAM(JI)==3) THEN + status = nf90_inq_varid(ncid, trim(YSPCCAMSEU(JI,1)), ind_netcdf) + if (status /= nf90_noerr) call handle_err(status) + status = nf90_get_var(ncid, ind_netcdf, vartemp3d, start=start3d, count=count3d) + if (status /= nf90_noerr) call handle_err(status) + status = nf90_get_att(ncid, ind_netcdf, "scale_factor", scale) + status = nf90_get_att(ncid, ind_netcdf, "add_offset", offset) + vartemp3d(:,:,:)=offset + scale*vartemp3d(:,:,:) + status = nf90_inq_varid(ncid, trim(YSPCCAMSEU(JI,2)), ind_netcdf) + if (status /= nf90_noerr) call handle_err(status) + status = nf90_get_var(ncid, ind_netcdf, vartemp3dbis, start=start3d, count=count3d) + if (status /= nf90_noerr) call handle_err(status) + status = nf90_get_att(ncid, ind_netcdf, "scale_factor", scale) + status = nf90_get_att(ncid, ind_netcdf, "add_offset", offset) + vartemp3dbis(:,:,:)=offset + scale*vartemp3dbis(:,:,:) + status = nf90_inq_varid(ncid, trim(YSPCCAMSEU(JI,3)), ind_netcdf) + if (status /= nf90_noerr) call handle_err(status) + status = nf90_get_var(ncid, ind_netcdf, vartemp3dter, start=start3d, count=count3d) + if (status /= nf90_noerr) call handle_err(status) + status = nf90_get_att(ncid, ind_netcdf, "scale_factor", scale) + status = nf90_get_att(ncid, ind_netcdf, "add_offset", offset) + vartemp3dter(:,:,:)=offset + scale*vartemp3dter(:,:,:) + ZCHEMCAM(:,:,:)=ZCOEFCAMSEU(JI,1)*vartemp3d(:,:,:)+& + ZCOEFCAMSEU(JI,2)*vartemp3dbis(:,:,:)+& + ZCOEFCAMSEU(JI,3)*vartemp3dter(:,:,:) + ELSE IF (ISPCCAM(JI)==4) THEN + status = nf90_inq_varid(ncid, trim(YSPCCAMSEU(JI,1)), ind_netcdf) + if (status /= nf90_noerr) call handle_err(status) + status = nf90_get_var(ncid, ind_netcdf, vartemp3d, start=start3d, count=count3d) + if (status /= nf90_noerr) call handle_err(status) + status = nf90_get_att(ncid, ind_netcdf, "scale_factor", scale) + status = nf90_get_att(ncid, ind_netcdf, "add_offset", offset) + vartemp3d(:,:,:)=offset + scale*vartemp3d(:,:,:) + status = nf90_inq_varid(ncid, trim(YSPCCAMSEU(JI,2)), ind_netcdf) + if (status /= nf90_noerr) call handle_err(status) + status = nf90_get_var(ncid, ind_netcdf, vartemp3dbis, start=start3d, count=count3d) + if (status /= nf90_noerr) call handle_err(status) + status = nf90_get_att(ncid, ind_netcdf, "scale_factor", scale) + status = nf90_get_att(ncid, ind_netcdf, "add_offset", offset) + vartemp3dbis(:,:,:)=offset + scale*vartemp3dbis(:,:,:) + status = nf90_inq_varid(ncid, trim(YSPCCAMSEU(JI,3)), ind_netcdf) + if (status /= nf90_noerr) call handle_err(status) + status = nf90_get_var(ncid, ind_netcdf, vartemp3dter, start=start3d, count=count3d) + if (status /= nf90_noerr) call handle_err(status) + status = nf90_get_att(ncid, ind_netcdf, "scale_factor", scale) + status = nf90_get_att(ncid, ind_netcdf, "add_offset", offset) + vartemp3dter(:,:,:)=offset + scale*vartemp3dter(:,:,:) + status = nf90_inq_varid(ncid, trim(YSPCCAMSEU(JI,4)), ind_netcdf) + if (status /= nf90_noerr) call handle_err(status) + status = nf90_get_var(ncid, ind_netcdf, vartemp3dquater, start=start3d, count=count3d) + if (status /= nf90_noerr) call handle_err(status) + status = nf90_get_att(ncid, ind_netcdf, "scale_factor", scale) + status = nf90_get_att(ncid, ind_netcdf, "add_offset", offset) + vartemp3dquater(:,:,:)=offset + scale*vartemp3dquater(:,:,:) + ZCHEMCAM(:,:,:)=ZCOEFCAMSEU(JI,1)*vartemp3d(:,:,:)+& + ZCOEFCAMSEU(JI,2)*vartemp3dbis(:,:,:)+& + ZCOEFCAMSEU(JI,3)*vartemp3dter(:,:,:)+& + ZCOEFCAMSEU(JI,4)*vartemp3dquater(:,:,:) + ENDIF + DO JK = 1, levlen + JLOOP1 = 0 + DO JJ = 1, latlen + ZVALUE(JK,JLOOP1+1:JLOOP1+lonlen) = ZCHEMCAM(1:lonlen,JJ,JK) + JLOOP1 = JLOOP1+lonlen + ENDDO + CALL HORIBL(lats(1),lons(1),lats(latlen),lons(lonlen), & + latlen,kinlo,KILEN, & + ZVALUE(JK,:),INO,ZLONOUT,ZLATOUT, & + ZOUT(JK,:),.FALSE.,PTIME_HORI,.TRUE.) + CALL ARRAY_1D_TO_2D(INO,ZOUT(JK,:),IIU,IJU, & + XSV_LS(:,:,JK,JNAER) ) + ENDDO ! levlen + ENDIF + XSV_LS(:,:,:,JNAER) = MAX(XSV_LS(:,:,:,JNAER), 1E-40) + ENDDO ! JNAER + ENDDO ! ICAM loop on MNH species in CAM1.nam + DEALLOCATE(YSPCMNH) + DEALLOCATE(TZSTOC) + DEALLOCATE(ISPCCAM) + DEALLOCATE(ZCOEFCAMSEU) + DEALLOCATE(ZMASMOLCAMSEU) + DEALLOCATE(YSPCCAMSEU) +! + IF (LORILAM) THEN ! convert kg/kg into ppv and moments + CALL AEROCAMS_n(XSV_LS(:,:,:,NSV_AERBEG:NSV_AEREND), ZRHO_SV_LS) + LAERINIT = .FALSE. ! to avoid enter in the routine ch_reallfin + ENDIF +ENDIF ! OUSECHEM +! +!* 2.6 read dust variables and convert them into MNH variables +! +IF (LDUST .AND. LDSTCAMS) THEN + WRITE (ILUOUT0,'(A)') ' | Reading CAMS dust (kg/kg)' + ! + status = nf90_get_var(ncid, mmr_dust1_varid, mmr_dust1(:,:,:), start=start3d, count=count3d) + if (status /= nf90_noerr) call handle_err(status) + status = nf90_get_att(ncid, mmr_dust1_varid, "scale_factor", scale) + status = nf90_get_att(ncid, mmr_dust1_varid, "add_offset", offset) + mmr_dust1(:,:,:) = offset + scale * mmr_dust1(:,:,:) + ! + status = nf90_get_var(ncid, mmr_dust2_varid, mmr_dust2(:,:,:), start=start3d, count=count3d) + if (status /= nf90_noerr) call handle_err(status) + status = nf90_get_att(ncid, mmr_dust2_varid, "scale_factor", scale) + status = nf90_get_att(ncid, mmr_dust2_varid, "add_offset", offset) + mmr_dust2(:,:,:) = offset + scale * mmr_dust2(:,:,:) + ! + status = nf90_get_var(ncid, mmr_dust3_varid, mmr_dust3(:,:,:), start=start3d, count=count3d) + if (status /= nf90_noerr) call handle_err(status) + status = nf90_get_att(ncid, mmr_dust3_varid, "scale_factor", scale) + status = nf90_get_att(ncid, mmr_dust3_varid, "add_offset", offset) + mmr_dust3(:,:,:) = offset + scale * mmr_dust3(:,:,:) + ! + ALLOCATE (ZMASS1(lonlen,latlen,levlen,3)) + ALLOCATE (ZMASS2(SIZE(XSV_LS,1), SIZE(XSV_LS,2), SIZE(XSV_LS,3),3)) +! + ZMASS1(:,:,:,1) = mmr_dust1(:,:,:) + ZMASS1(:,:,:,2) = mmr_dust2(:,:,:) + ZMASS1(:,:,:,3) = mmr_dust3(:,:,:) + + ZMASS1(:,:,:,:) = MAX(ZMASS1(:,:,:,:),1E-40) + + DO JN=1,3 + DO JK = 1, levlen + JLOOP1 = 0 + DO JJ = 1, latlen + ZVALUE(JK,JLOOP1+1:JLOOP1+lonlen) = ZMASS1(1:lonlen,JJ,JK,JN) + JLOOP1 = JLOOP1 + lonlen + ENDDO + CALL HORIBL(lats(1),lons(1),lats(latlen),lons(lonlen), & + latlen,kinlo,KILEN, & + ZVALUE(JK,:),INO,ZLONOUT,ZLATOUT, & + ZOUT(JK,:),.FALSE.,PTIME_HORI,.TRUE. ) + CALL ARRAY_1D_TO_2D(INO,ZOUT(JK,:),IIU,IJU,ZMASS2(:,:,JK,JN)) + ENDDO + ENDDO +! + ! conversion kg/kg into moment units (ppv) + CALL DUSTCAMS_n(XSV_LS(:,:,:,NSV_DSTBEG:NSV_DSTEND), ZMASS2(:,:,:,:), ZRHO_SV_LS(:,:,:)) + + DEALLOCATE (ZMASS1) + DEALLOCATE (ZMASS2) +END IF +! +!* 2.7 read sea salt variables and convert them into MNH variables +! +IF (LSALT .AND. LSLTCAMS) THEN + WRITE (ILUOUT0,'(A)') ' | Reading CAMS sea salt (kg/kg)' + ! + status = nf90_get_var(ncid, mmr_seasalt1_varid, mmr_seasalt1(:,:,:), start=start3d, count=count3d) + if (status /= nf90_noerr) call handle_err(status) + status = nf90_get_att(ncid, mmr_seasalt1_varid, "scale_factor", scale) + status = nf90_get_att(ncid, mmr_seasalt1_varid, "add_offset", offset) + mmr_seasalt1(:,:,:) = offset + scale * mmr_seasalt1(:,:,:) + ! + status = nf90_get_var(ncid, mmr_seasalt2_varid, mmr_seasalt2(:,:,:), start=start3d, count=count3d) + if (status /= nf90_noerr) call handle_err(status) + status = nf90_get_att(ncid, mmr_seasalt2_varid, "scale_factor", scale) + status = nf90_get_att(ncid, mmr_seasalt2_varid, "add_offset", offset) + mmr_seasalt2(:,:,:) = offset + scale * mmr_seasalt2(:,:,:) + ! + status = nf90_get_var(ncid, mmr_seasalt3_varid, mmr_seasalt3(:,:,:), start=start3d, count=count3d) + if (status /= nf90_noerr) call handle_err(status) + status = nf90_get_att(ncid, mmr_seasalt3_varid, "scale_factor", scale) + status = nf90_get_att(ncid, mmr_seasalt3_varid, "add_offset", offset) + mmr_seasalt3(:,:,:) = offset + scale * mmr_seasalt3(:,:,:) + ! + ALLOCATE (ZMASS1(lonlen,latlen,levlen,3)) + ALLOCATE (ZMASS2(SIZE(XSV_LS,1), SIZE(XSV_LS,2), SIZE(XSV_LS,3),3)) +! + ZMASS1(:,:,:,1) = mmr_seasalt1(:,:,:) + ZMASS1(:,:,:,2) = mmr_seasalt2(:,:,:) + ZMASS1(:,:,:,3) = mmr_seasalt3(:,:,:) + ZMASS1(:,:,:,:) = MAX(ZMASS1(:,:,:,:),1E-40) + DO JN=1,3 + DO JK = 1, levlen + JLOOP1 = 0 + DO JJ = 1, latlen + ZVALUE(JK,JLOOP1+1:JLOOP1+lonlen) = ZMASS1(1:lonlen,JJ,JK,JN) + JLOOP1 = JLOOP1 + lonlen + ENDDO + CALL HORIBL(lats(1),lons(1),lats(latlen),lons(lonlen), & + latlen,kinlo,KILEN, & + ZVALUE(JK,:),INO,ZLONOUT,ZLATOUT, & + ZOUT(JK,:),.FALSE.,PTIME_HORI,.TRUE. ) + CALL ARRAY_1D_TO_2D(INO,ZOUT(JK,:),IIU,IJU,ZMASS2(:,:,JK,JN)) + ENDDO + ENDDO +! + ! conversion kg/kg into moment units (ppv) + CALL SALTCAMS_n(XSV_LS(:,:,:,NSV_SLTBEG:NSV_SLTEND),ZMASS2(:,:,:,:), ZRHO_SV_LS(:,:,:)) + ! + DEALLOCATE (ZMASS1) + DEALLOCATE (ZMASS2) +ENDIF +! +! +!* 3. If netcdf vertical levels have to be reversed +! +ALLOCATE(TMP1(levlen)) +ALLOCATE(TMP2(levlen)) +ALLOCATE(TMP3(IIU,IJU,levlen)) +ALLOCATE(TMP4(IIU,IJU,levlen,NRR)) +ALLOCATE(TMP5(IIU,IJU,levlen,NSV)) +! +XA_SV_LS(:) = XA_SV_LS(:) / XP00_SV_LS +! +DO JJ=1,levlen +! inv. lev + TMP1(JJ) = XA_SV_LS(levlen+1-JJ) + TMP2(JJ) = XB_SV_LS(levlen+1-JJ) + TMP3(:,:,JJ) = XT_SV_LS(:,:,levlen+1-JJ) + TMP4(:,:,JJ,:) = XQ_SV_LS(:,:,levlen+1-JJ,:) + TMP5(:,:,JJ,:) = XSV_LS(:,:,levlen+1-JJ,:) +ENDDO +! +XA_SV_LS(:) = TMP1(:) +XB_SV_LS(:) = TMP2(:) +XT_SV_LS(:,:,:) = TMP3(:,:,:) +XQ_SV_LS(:,:,:,:) = TMP4(:,:,:,:) +XSV_LS(:,:,:,:) = TMP5(:,:,:,:) + +DEALLOCATE(TMP1) +DEALLOCATE(TMP2) +DEALLOCATE(TMP3) +DEALLOCATE(TMP4) +DEALLOCATE(TMP5) +! +!* 4 close the netcdf file +! +status = nf90_close(ncid) +if (status /= nf90_noerr) call handle_err(status) +! +DEALLOCATE(ZVALUE) +DEALLOCATE(ZOUT) +IF (ALLOCATED(ZVALUE1D)) DEALLOCATE(ZVALUE1D) +IF (ALLOCATED(ZOUT1D)) DEALLOCATE(ZOUT1D) +! +! close +! file +IF (OUSECHEM) CALL IO_FILE_CLOSE(TZFILE) +! +! +!------------------------------------------------------------- +! +!* 5. VERTICAL GRID +! ------------- +! +!* 5.1 Read VERTICAL GRID +! +WRITE (ILUOUT0,'(A)') ' | Reading of vertical grid in progress' +CALL READ_VER_GRID(TPPRE_REAL1) +! +!-------------------------------------------------------------- +! +!* 6. Free all temporary allocations +! ------------------------------ +! +DEALLOCATE (count3d) +DEALLOCATE (count2d) +DEALLOCATE (start3d) +DEALLOCATE (start2d) +DEALLOCATE (lats) +DEALLOCATE (lons) +DEALLOCATE (levs) +DEALLOCATE (kinlo) +DEALLOCATE (ZLATOUT) +DEALLOCATE (ZLONOUT) +DEALLOCATE (ZTCAM) +DEALLOCATE (ZQCAM) +DEALLOCATE (ZPSCAM) +DEALLOCATE (ZPRESSCAM) +DEALLOCATE (ZPRESS_SV_LS) +DEALLOCATE (ZRHO_SV_LS) +IF (ALLOCATED(ZCHEMCAM)) DEALLOCATE(ZCHEMCAM) +IF (ALLOCATED(vartemp3d)) DEALLOCATE(vartemp3d) +IF (ALLOCATED(vartemp3dbis)) DEALLOCATE(vartemp3dbis) +IF (ALLOCATED(vartemp3dter)) DEALLOCATE(vartemp3dter) +IF (ALLOCATED(vartemp3dquater)) DEALLOCATE(vartemp3dquater) +IF (ALLOCATED(mmr_dust1)) DEALLOCATE(mmr_dust1) +IF (ALLOCATED(mmr_dust2)) DEALLOCATE(mmr_dust2) +IF (ALLOCATED(mmr_dust3)) DEALLOCATE(mmr_dust3) +IF (ALLOCATED(mmr_seasalt1)) DEALLOCATE(mmr_seasalt1) +IF (ALLOCATED(mmr_seasalt2)) DEALLOCATE(mmr_seasalt2) +IF (ALLOCATED(mmr_seasalt3)) DEALLOCATE(mmr_seasalt3) +! +WRITE (ILUOUT0,'(A,A4,A)') ' -- netcdf decoder for ',HFILE,' file ended successfully' +! + +CONTAINS +! +! ############################# + SUBROUTINE HANDLE_ERR(STATUS) +! ############################# + INTEGER(KIND=CDFINT) STATUS + IF (STATUS .NE. NF90_NOERR) THEN + PRINT *, NF90_STRERROR(STATUS) + STOP 'Stopped' + ENDIF + END SUBROUTINE HANDLE_ERR +! +! +! ############################################# + SUBROUTINE ARRAY_1D_TO_2D (KN1,P1,KL1,KL2,P2) +! ############################################# +! +! Small routine used to store a linear array into a 2 dimension array +! +USE MODE_MSG +IMPLICIT NONE +INTEGER, INTENT(IN) :: KN1 +REAL,DIMENSION(KN1), INTENT(IN) :: P1 +INTEGER, INTENT(IN) :: KL1 +INTEGER, INTENT(IN) :: KL2 +REAL,DIMENSION(KL1,KL2),INTENT(OUT) :: P2 +INTEGER :: JLOOP1_A1T2 +INTEGER :: JLOOP2_A1T2 +INTEGER :: JPOS_A1T2 +! +IF (KN1 < KL1*KL2) THEN + CALL PRINT_MSG(NVERB_FATAL,'GEN','ARRAY_1D_TO_2D','sizes do not match') +END IF +JPOS_A1T2 = 1 +DO JLOOP2_A1T2 = 1, KL2 + DO JLOOP1_A1T2 = 1, KL1 + P2(JLOOP1_A1T2,JLOOP2_A1T2) = P1(JPOS_A1T2) + JPOS_A1T2 = JPOS_A1T2 + 1 + END DO +END DO +END SUBROUTINE ARRAY_1D_TO_2D +! +END SUBROUTINE READ_CHEM_DATA_CAMS_CASE diff --git a/src/MNH/read_chem_data_mozart_case.f90 b/src/MNH/read_chem_data_mozart_case.f90 new file mode 100644 index 0000000000000000000000000000000000000000..e8a65c705587d0c61bb0276aa206c1f2b6d35312 --- /dev/null +++ b/src/MNH/read_chem_data_mozart_case.f90 @@ -0,0 +1,812 @@ +!MNH_LIC Copyright 2012-2017 CNRS, Meteo-France and Universite Paul Sabatier +!MNH_LIC This is part of the Meso-NH software governed by the CeCILL-C licence +!MNH_LIC version 1. See LICENSE, CeCILL-C_V1-en.txt and CeCILL-C_V1-fr.txt +!MNH_LIC for details. version 1. +!----------------------------------------------------------------- +! ################################ + MODULE MODI_READ_CHEM_DATA_MOZART_CASE +! ################################# +INTERFACE +SUBROUTINE READ_CHEM_DATA_MOZART_CASE(TPPRE_REAL1,HFILE,TPPGDFILE, & + PTIME_HORI,KVERB,ODUMMY_REAL ) +! +USE MODD_IO, ONLY: TFILEDATA +! +TYPE(TFILEDATA),POINTER,INTENT(IN) :: TPPRE_REAL1 ! PRE_REAL1 file +CHARACTER(LEN=28), INTENT(IN) :: HFILE ! name of the NETCDF file +TYPE(TFILEDATA), INTENT(IN) :: TPPGDFILE ! physiographic data file +REAL, INTENT(INOUT) :: PTIME_HORI ! time spent in hor. interpolations +INTEGER, INTENT(IN) :: KVERB ! verbosity level +LOGICAL, INTENT(IN) :: ODUMMY_REAL! flag to interpolate dummy fields +END SUBROUTINE READ_CHEM_DATA_MOZART_CASE +! +END INTERFACE +END MODULE MODI_READ_CHEM_DATA_MOZART_CASE +! #################################################################### + SUBROUTINE READ_CHEM_DATA_MOZART_CASE(TPPRE_REAL1,HFILE,TPPGDFILE, & + PTIME_HORI,KVERB,ODUMMY_REAL ) +! #################################################################### +! +!!**** *READ_CHEM_DATA_MOZART_CASE* - reads data for the initialization of real cases. +!! +!! PURPOSE +!! ------- +! This routine reads the two input files : +! The PGD which is closed after reading +! The MOZART file +! Projection is read in READ_LFIFM_PGD (MODD_GRID). +! Grid and definition of large domain are read in PGD file and +! MOZART files. +! The PGD files are also read in READ_LFIFM_PGD. +! The PGD file is closed. +! Vertical grid is defined in READ_VER_GRID. +! PGD fields are stored on MESO-NH domain (in TRUNC_PGD). +!! +!!** METHOD +!! ------ +!! 0. Declarations +!! 1. Declaration of arguments +!! 2. Declaration of local variables +!! 1. Read PGD file +!! 1. Domain restriction +!! 2. Coordinate conversion to lat,lon system +!! 2. Read Netcdf fields +!! 3. Vertical grid +!! 4. Free all temporary allocations +!! +!! EXTERNAL +!! -------- +!! subroutine READ_LFIFM_PGD : to read PGD file +!! subroutine READ_VER_GRID : to read the vertical grid in namelist file. +!! subroutine HORIBL : horizontal bilinear interpolation +!! subroutine XYTOLATLON : projection from conformal to lat,lon +!! +!! Module MODI_READ_VER_GRID : interface for subroutine READ_VER_GRID +!! Module MODI_HORIBL : interface for subroutine HORIBL +!! Module MODI_XYTOLATLON : interface for subroutine XYTOLATLON +!! +!! IMPLICIT ARGUMENTS +!! ------------------ +!! +!! Module MODD_CONF : contains configuration variables for all models. +!! NVERB : verbosity level for output-listing +!! Module MODD_LUNIT : contains logical unit names for all models +!! CLUOUT0 : name of output-listing +!! Module MODD_PGDDIM : contains dimension of PGD fields +!! NPGDIMAX: dimension along x (no external point) +!! NPGDJMAX: dimension along y (no external point) +!! Module MODD_PARAMETERS +!! JPHEXT +!! +!! MODIFICATIONS +!! ------------- +!! Original 23/01/12 (C. Mari) +!! A. Berger 20/03/12 adapt whatever the chemical mechanism in BASIC +!! P. Wautelet 30/10/17 use F90 module for netCDF +!! J.Pianezzej 13/02/2019 : correction for use of MEGAN +! P. Wautelet 18/09/2019: correct support of 64bit integers (MNH_INT=8) +!------------------------------------------------------------------------------- +! +!* 0. DECLARATIONS +!------------ +! +USE MODD_BLANK_n +USE MODD_CH_AEROSOL, ONLY: CORGANIC, NCARB, NSOA, NSP, LORILAM,& + JPMODE, LVARSIGI, LVARSIGJ,CAERONAMES +USE MODD_CH_M9_n, ONLY: NEQ , CNAMES +USE MODD_CH_MNHC_n, ONLY: LUSECHEM,LUSECHAQ,LUSECHIC,LCH_PH +USE MODD_CONF +USE MODD_CONF_n +USE MODD_CST +USE MODD_DIM_n +USE MODD_GRID +USE MODD_GRID_n +USE MODD_IO, ONLY: TFILEDATA +USE MODD_LUNIT, ONLY: TLUOUT0 +USE MODE_MODELN_HANDLER +USE MODD_NETCDF, ONLY:CDFINT +USE MODD_NSV +USE MODD_PARAMETERS +USE MODD_PARAM_n, ONLY : CTURB +USE MODD_PREP_REAL +USE MODD_TIME +USE MODD_TIME_n +! +!UPG*PT +!USE MODE_FM +!USE MODE_IO_ll +USE MODE_TOOLS, ONLY: UPCASE +use MODE_TOOLS_ll +USE MODE_IO_FILE, only: IO_File_close +!UPG*PT + +USE MODE_MPPDB +USE MODE_THERMO +USE MODE_TIME +! +USE MODI_CH_AER_INIT_SOA +USE MODI_CH_INIT_SCHEME_n +USE MODI_CH_OPEN_INPUT +USE MODI_HORIBL +USE MODI_INI_NSV +USE MODI_READ_HGRID_n +USE MODI_READ_VER_GRID +USE MODI_XYTOLATLON +! +USE NETCDF +! +IMPLICIT NONE +! +!* 0.1. Declaration of arguments +! ------------------------ +! +TYPE(TFILEDATA),POINTER,INTENT(IN) :: TPPRE_REAL1 ! PRE_REAL1 file +CHARACTER(LEN=28), INTENT(IN) :: HFILE ! name of the MOZART file +TYPE(TFILEDATA), INTENT(IN) :: TPPGDFILE ! physiographic data file +REAL, INTENT(INOUT) :: PTIME_HORI ! time spent in hor. interpolations +INTEGER, INTENT(IN) :: KVERB ! verbosity level +LOGICAL, INTENT(IN) :: ODUMMY_REAL! flag to interpolate dummy fields +! +!* 0.2 Declaration of local variables +! ------------------------------ +! General purpose variables +INTEGER :: ILUOUT0 ! Unit used for output msg. +INTEGER :: IRET ! Return code from subroutines +INTEGER :: JI,JJ,JK ! Dummy counters +INTEGER :: JLOOP1 ! | +INTEGER :: JNCHEM, JNAER ! conters of chemical species in BASIC +! Variables used by the PGD reader +CHARACTER(LEN=28) :: YPGD_NAME ! not used - dummy argument +CHARACTER(LEN=28) :: YPGD_DAD_NAME ! not used - dummy argument +CHARACTER(LEN=2) :: YPGD_TYPE ! not used - dummy argument +! PGD Grib definition variables +INTEGER :: INO ! Number of points of the grid +INTEGER :: IIU ! Number of points along X +INTEGER :: IJU ! Number of points along Y +REAL, DIMENSION(:), ALLOCATABLE :: ZLONOUT ! mapping PGD -> Grib (lon.) +REAL, DIMENSION(:), ALLOCATABLE :: ZLATOUT ! mapping PGD -> Grib (lat.) +REAL, DIMENSION(:,:), ALLOCATABLE :: ZXM ! X of PGD mass points +REAL, DIMENSION(:,:), ALLOCATABLE :: ZYM ! Y of PGD mass points +REAL, DIMENSION(:,:), ALLOCATABLE :: ZLATM ! Lat of PGD mass points +REAL, DIMENSION(:,:), ALLOCATABLE :: ZLONM ! Lon of PGD mass points +! Variable involved in the task of reading the netcdf file +REAL,DIMENSION(:,:),ALLOCATABLE :: ZVALUE ! Intermediate array +REAL,DIMENSION(:),ALLOCATABLE :: ZVALUE1D ! Intermediate array +REAL,DIMENSION(:,:),ALLOCATABLE :: ZOUT ! Intermediate arrays +REAL,DIMENSION(:),ALLOCATABLE :: ZOUT1D ! Intermediate arrays +INTEGER(kind=CDFINT) :: ind_netcdf ! Indice for netcdf var. +!chemistry field infile MOZ1.nam +INTEGER :: ICHANNEL +CHARACTER(LEN=8) :: YMOZ="MOZ1.nam" +integer :: IMOZ +CHARACTER(LEN=100) :: YFORMAT +CHARACTER(LEN=40), DIMENSION(:), ALLOCATABLE :: YSPCMNH +integer, dimension(:), ALLOCATABLE :: ISPCMOZ +CHARACTER(LEN=9) :: YA +REAL,DIMENSION(:,:),ALLOCATABLE :: ZCOEFMOZART +CHARACTER(LEN=18),dimension(:,:),ALLOCATABLE :: YCHANGE +type TZMOZ +real :: ZCOEFMOZ +character(16) :: YSPCMOZ +end type TZMOZ +type(TZMOZ), DIMENSION(:,:),ALLOCATABLE :: TZSTOC +! model indice +INTEGER :: IMI +TYPE(TFILEDATA),POINTER :: TZFILE +! +! For netcdf +! +integer(kind=CDFINT) :: status, ncid, varid +integer(kind=CDFINT) :: lat_varid, lon_varid, lev_varid, time_varid +integer(kind=CDFINT) :: hyam_varid, hybm_varid, p0_varid, t_varid, q_varid, ps_varid +integer(kind=CDFINT) :: recid, latid, lonid, levid, timeid +integer(kind=CDFINT) :: latlen, lonlen, levlen, nrecs,timelen +integer(kind=CDFINT) :: itimeindex +integer :: KILEN +CHARACTER(LEN=40) :: recname +REAL, DIMENSION(:), ALLOCATABLE :: lats +REAL, DIMENSION(:), ALLOCATABLE :: lons +REAL, DIMENSION(:), ALLOCATABLE :: levs +INTEGER(kind=CDFINT), DIMENSION(:), ALLOCATABLE :: count3d, start3d +INTEGER(kind=CDFINT), DIMENSION(:), ALLOCATABLE :: count2d, start2d +REAL, DIMENSION(:), ALLOCATABLE :: time, hyam, hybm +REAL :: p0 +INTEGER, DIMENSION(:), ALLOCATABLE :: kinlo +REAL, DIMENSION(:,:,:), ALLOCATABLE :: vartemp3d,vartemp3dbis,vartemp3dter +REAL, DIMENSION(:,:,:), ALLOCATABLE :: vartemp3dquater +REAL, DIMENSION(:,:,:), ALLOCATABLE :: ZCHEMMOZ, ZTMOZ, ZQMOZ +REAL, DIMENSION(:,:), ALLOCATABLE :: ZPSMOZ + +real ::a,b + +!---------------------------------------------------------------------- +TZFILE => NULL() +! +IMI = GET_CURRENT_MODEL_INDEX() +! +!* 1. READ PGD FILE +! ------------- +! +ILUOUT0 = TLUOUT0%NLU +CALL READ_HGRID_n(TPPGDFILE,YPGD_NAME,YPGD_DAD_NAME,YPGD_TYPE) +! +! 1.1 Domain restriction +! +CALL GET_DIM_EXT_ll('B',IIU,IJU) +INO = IIU * IJU +! +! +! 1.2 Coordinate conversion to lat,lon system +! +ALLOCATE (ZXM(IIU,IJU)) +ALLOCATE (ZYM(IIU,IJU)) +ALLOCATE (ZLONM(IIU,IJU)) +ALLOCATE (ZLATM(IIU,IJU)) +ZXM(1:IIU-1,1) = (XXHAT(1:IIU-1) + XXHAT(2:IIU) ) / 2. +ZXM(IIU,1) = XXHAT(IIU) - XXHAT(IIU-1) + ZXM(IIU-1,1) +ZXM(:,2:IJU) = SPREAD(ZXM(:,1),2,IJU-1) +ZYM(1,1:IJU-1) = (XYHAT(1:IJU-1) + XYHAT(2:IJU)) / 2. +ZYM(1,IJU) = XYHAT(IJU) - XYHAT(IJU-1) + ZYM(1,IJU-1) +ZYM(2:IIU,:) = SPREAD(ZYM(1,:),1,IIU-1) +CALL SM_XYTOLATLON_A (XLAT0,XLON0,XRPK,XLATORI,XLONORI,ZXM,ZYM,ZLATM,ZLONM, & + IIU,IJU) +ALLOCATE (ZLONOUT(INO)) +ALLOCATE (ZLATOUT(INO)) +JLOOP1 = 0 +DO JJ = 1, IJU + ZLONOUT(JLOOP1+1:JLOOP1+IIU) = ZLONM(1:IIU,JJ) + ZLATOUT(JLOOP1+1:JLOOP1+IIU) = ZLATM(1:IIU,JJ) + JLOOP1 = JLOOP1 + IIU +ENDDO +DEALLOCATE (ZYM) +DEALLOCATE (ZXM) +! +! +!* 2. READ NETCDF FIELDS +! ------------------ +! +! 2.1 Open netcdf files +! +status = nf90_open(HFILE, nf90_nowrite, ncid) +if (status /= nf90_noerr) call handle_err(status) +! +! 2.2 Read netcdf files +! +! get dimension IDs +! +!* get dimension ID of unlimited variable in netcdf file +status = nf90_inquire(ncid, unlimitedDimId = recid) +if (status /= nf90_noerr) call handle_err(status) +status = nf90_inq_dimid(ncid, "lat", latid) +if (status /= nf90_noerr) call handle_err(status) +status = nf90_inq_dimid(ncid, "lon", lonid) +if (status /= nf90_noerr) call handle_err(status) +status = nf90_inq_dimid(ncid, "lev", levid) +if (status /= nf90_noerr) call handle_err(status) +! +! get dimensions +! +!* get dimension and name of unlimited variable in netcdf file +status = nf90_inquire_dimension(ncid, recid, name=recname, len=nrecs) +if (status /= nf90_noerr) call handle_err(status) +status = nf90_inquire_dimension(ncid, latid, len=latlen) +if (status /= nf90_noerr) call handle_err(status) +status = nf90_inquire_dimension(ncid, lonid, len=lonlen) +if (status /= nf90_noerr) call handle_err(status) +status = nf90_inquire_dimension(ncid, levid, len=levlen) +if (status /= nf90_noerr) call handle_err(status) +! +! get variable IDs +! +status = nf90_inq_varid(ncid, "lat", lat_varid) +if (status /= nf90_noerr) call handle_err(status) +status = nf90_inq_varid(ncid, "lon", lon_varid) +if (status /= nf90_noerr) call handle_err(status) +status = nf90_inq_varid(ncid, "lev", lev_varid) +if (status /= nf90_noerr) call handle_err(status) +status = nf90_inq_varid(ncid, "time", time_varid) +if (status /= nf90_noerr) call handle_err(status) +status = nf90_inq_varid(ncid, "P0", p0_varid) +if (status /= nf90_noerr) call handle_err(status) +status = nf90_inq_varid(ncid, "hyam", hyam_varid) +if (status /= nf90_noerr) call handle_err(status) +status = nf90_inq_varid(ncid, "hybm", hybm_varid) +if (status /= nf90_noerr) call handle_err(status) +status = nf90_inq_varid(ncid, "T", t_varid) +if (status /= nf90_noerr) call handle_err(status) +status = nf90_inq_varid(ncid, "Q", q_varid) +if (status /= nf90_noerr) call handle_err(status) +status = nf90_inq_varid(ncid, "PS", ps_varid) +if (status /= nf90_noerr) call handle_err(status) +! +KILEN = latlen * lonlen +! +! 2.3 Read data. +! +ALLOCATE (count3d(4)) +ALLOCATE (start3d(4)) +ALLOCATE (count2d(3)) +ALLOCATE (start2d(3)) +ALLOCATE (lats(latlen)) +ALLOCATE (lons(lonlen)) +ALLOCATE (levs(levlen)) +ALLOCATE (time(nrecs)) +ALLOCATE (kinlo(latlen)) +kinlo(:) = lonlen +ALLOCATE (vartemp3d(lonlen,latlen,levlen)) +ALLOCATE (vartemp3dbis(lonlen,latlen,levlen)) +ALLOCATE (vartemp3dter(lonlen,latlen,levlen)) +ALLOCATE (vartemp3dquater(lonlen,latlen,levlen)) +ALLOCATE (ZCHEMMOZ(lonlen,latlen,levlen)) +ALLOCATE (ZTMOZ(lonlen,latlen,levlen)) +ALLOCATE (ZQMOZ(lonlen,latlen,levlen)) +ALLOCATE (ZPSMOZ(lonlen,latlen)) +ALLOCATE (XA_SV_LS(levlen)) +ALLOCATE (hyam(levlen)) +ALLOCATE (XB_SV_LS(levlen)) +ALLOCATE (hybm(levlen)) +ALLOCATE (XT_SV_LS(IIU,IJU,levlen)) +ALLOCATE (XQ_SV_LS(IIU,IJU,levlen,1)) +ALLOCATE (XPS_SV_LS(IIU,IJU)) +ALLOCATE (XZS_SV_LS(IIU,IJU)) +! take the orography from ECMWF +XZS_SV_LS(:,:) = XZS_LS(:,:) +! +! get values of variables +! +status = nf90_get_var(ncid, lat_varid, lats(:)) +if (status /= nf90_noerr) call handle_err(status) +status = nf90_get_var(ncid, lon_varid, lons(:)) +if (status /= nf90_noerr) call handle_err(status) +status = nf90_get_var(ncid, lev_varid, levs(:)) +if (status /= nf90_noerr) call handle_err(status) +status = nf90_get_var(ncid, time_varid, time(:)) +if (status /= nf90_noerr) call handle_err(status) +status = nf90_get_var(ncid, hyam_varid, hyam) +if (status /= nf90_noerr) call handle_err(status) +status = nf90_get_var(ncid, hybm_varid, hybm) +if (status /= nf90_noerr) call handle_err(status) +status = nf90_get_var(ncid, p0_varid, p0) +if (status /= nf90_noerr) call handle_err(status) +XP00_SV_LS = p0 +! +! hyam and hybm coefficients for pressure calculations have to be reversed +! from top-bottom to bottom-up direction +do JJ = 1, levlen + XA_SV_LS(JJ) = hyam(levlen+1-JJ) + XB_SV_LS(JJ) = hybm(levlen+1-JJ) +end do +! +! +! Read 1 record of lon*lat*lev values, starting at the +! beginning of the record (the (1, 1, 1, rec) element in the netCDF +! file). + count3d(1) = lonlen + count3d(2) = latlen + count3d(3) = levlen + count3d(4) = 1 + start3d(1) = 1 + start3d(2) = 1 + start3d(3) = 1 +! Choose time index according to the chosen time in namelist +! 1 for 06h - 2 for 12h - 3 for 18h - 4 for 24h +IF (CDUMMY1=="06") THEN + itimeindex=1 +ELSEIF (CDUMMY1=="12") THEN + itimeindex=2 +ELSEIF (CDUMMY1=="18") THEN + itimeindex=3 +ELSEIF ((CDUMMY1=="24").OR.(CDUMMY1=="00")) THEN + itimeindex=4 +ENDIF + start3d(4) = itimeindex +! + status = nf90_get_var(ncid, t_varid, vartemp3d, start=start3d, count=count3d) + if (status /= nf90_noerr) call handle_err(status) +! +do JJ=1,levlen +! lev, lat, lon + ZTMOZ(:,:,JJ) = vartemp3d(:,:,levlen+1-JJ) +enddo +! + status = nf90_get_var(ncid, q_varid, vartemp3d, start=start3d, count=count3d) + if (status /= nf90_noerr) call handle_err(status) +! +do JJ=1,levlen +! lev, lat, lon + ZQMOZ(:,:,JJ) = vartemp3d(:,:,levlen+1-JJ) +enddo +! + count2d(1) = lonlen + count2d(2) = latlen + count2d(3) = 1 + start2d(1) = 1 + start2d(2) = 1 + start2d(3) = itimeindex + status = nf90_get_var(ncid, ps_varid, ZPSMOZ(:,:), start=start2d, count=count2d) + if (status /= nf90_noerr) call handle_err(status) + + +!------------------------------------------------------------------------ +!* 3 Interpolation of MOZART variable +!--------------------------------------------------------------------- + ! Always initialize chemical scheme variables before INI_NSV call ! + CALL CH_INIT_SCHEME_n(IMI,LUSECHAQ,LUSECHIC,LCH_PH,ILUOUT0,KVERB) + LUSECHEM = .TRUE. + IF (LORILAM) THEN + CORGANIC = "MPMPO" + LVARSIGI = .TRUE. + LVARSIGJ = .TRUE. + CALL CH_AER_INIT_SOA(ILUOUT0, KVERB) + END IF + ! initialise NSV_* variables + CALL INI_NSV(1) + DEALLOCATE(XSV_LS) + ALLOCATE (XSV_LS(IIU,IJU,levlen,NSV)) + XSV_LS(:,:,:,:) = 0. +! + WRITE (ILUOUT0,'(A,A4,A)') ' | Reading MOZART species (ppp) from ',HFILE,' file' + +where (ZLONOUT(:) < 0.) ZLONOUT(:) = ZLONOUT(:) + 360. +! +ALLOCATE(ZVALUE(levlen,KILEN)) +ALLOCATE(ZOUT(levlen,INO)) +ALLOCATE(ZVALUE1D(KILEN)) +ALLOCATE(ZOUT1D(INO)) + +! +!* 2.6.1 read MOZART species from the file MOZ1.nam +! +! open input file +CALL CH_OPEN_INPUT(YMOZ,"MOZ2MESONH",TZFILE,ILUOUT0,KVERB) +ICHANNEL = TZFILE%NLU +! +!read number of mocage species to transfer into mesonh +READ(ICHANNEL, *) IMOZ +IF (KVERB >= 5) WRITE (ILUOUT0,*) "number of mozart species to transfer into & +& mesonh : ", IMOZ +! +!read data input format +READ(ICHANNEL,"(A)") YFORMAT +YFORMAT=UPCASE(YFORMAT) +IF (KVERB >= 5) WRITE (ILUOUT0,*) "input format is: ", YFORMAT + +! +!allocate fields +ALLOCATE(YSPCMNH(IMOZ)) !MESONH species +ALLOCATE(TZSTOC(IMOZ,4)) !MOZART coefficient and MOZART species associated +ALLOCATE(ISPCMOZ(IMOZ)) !MOZART species number into MESONH species +ALLOCATE(ZCOEFMOZART(IMOZ,4))!Coef stoich of each MOZART species +ALLOCATE(YCHANGE(IMOZ,4)) !MOZART species with _VMR_inst +!read MESONH variable names and MOZART variable names associated +DO JI = 1,IMOZ !for every MNH species existing in MOZ1.nam + + READ(ICHANNEL,YFORMAT) YSPCMNH(JI), ISPCMOZ(JI), TZSTOC(JI,1)%ZCOEFMOZ,& !reading line by line + TZSTOC(JI,1)%YSPCMOZ, TZSTOC(JI,2)%ZCOEFMOZ,& !of string + TZSTOC(JI,2)%YSPCMOZ, TZSTOC(JI,3)%ZCOEFMOZ,& + TZSTOC(JI,3)%YSPCMOZ, TZSTOC(JI,4)%ZCOEFMOZ,& + TZSTOC(JI,4)%YSPCMOZ + WRITE(ILUOUT0,YFORMAT) YSPCMNH(JI), ISPCMOZ(JI),& !writing in arrays + TZSTOC(JI,1)%ZCOEFMOZ, TZSTOC(JI,1)%YSPCMOZ,& + TZSTOC(JI,2)%ZCOEFMOZ, TZSTOC(JI,2)%YSPCMOZ,& + TZSTOC(JI,3)%ZCOEFMOZ, TZSTOC(JI,3)%YSPCMOZ,& + TZSTOC(JI,4)%ZCOEFMOZ, TZSTOC(JI,4)%YSPCMOZ +! + ZCOEFMOZART(JI,1) = (TZSTOC(JI,1)%ZCOEFMOZ) !coef stoich of each MOZART species set into an array + ZCOEFMOZART(JI,2) = (TZSTOC(JI,2)%ZCOEFMOZ) + ZCOEFMOZART(JI,3) = (TZSTOC(JI,3)%ZCOEFMOZ) + ZCOEFMOZART(JI,4) = (TZSTOC(JI,4)%ZCOEFMOZ) +! + YA="_VMR_inst" + YCHANGE(JI,1)=trim(TZSTOC(JI,1)%YSPCMOZ)//YA !set into an array MOZART species with _VMR_inst + YCHANGE(JI,2)=trim(TZSTOC(JI,2)%YSPCMOZ)//YA + YCHANGE(JI,3)=trim(TZSTOC(JI,3)%YSPCMOZ)//YA + YCHANGE(JI,4)=trim(TZSTOC(JI,4)%YSPCMOZ)//YA +! +!* exchange mozart values onto prognostic variables XSV_LS +! and convert MOZART fields to 2D for use in horizontal interpolation +! routine HORIBL.f90 +! + DO JNCHEM = NSV_CHEMBEG, NSV_CHEMEND !loop on all MNH species + IF (trim(CNAMES(JNCHEM-NSV_CHEMBEG+1))==trim(YSPCMNH(JI))) THEN !MNH mechanism species + IF (ISPCMOZ(JI)==1) THEN + status = nf90_inq_varid(ncid, trim(YCHANGE(JI,1)), ind_netcdf) + if (status /= nf90_noerr) call handle_err(status) + status = nf90_get_var(ncid, ind_netcdf, vartemp3d, start=start3d, count=count3d) + if (status /= nf90_noerr) call handle_err(status) + DO JJ=1,levlen ! lev, lat, lon + ZCHEMMOZ(:,:,JJ)=ZCOEFMOZART(JI,1)*vartemp3d(:,:,levlen+1-JJ) + ENDDO + ELSE IF (ISPCMOZ(JI)==2) THEN + status = nf90_inq_varid(ncid, trim(YCHANGE(JI,1)), ind_netcdf) + if (status /= nf90_noerr) call handle_err(status) + status = nf90_get_var(ncid, ind_netcdf, vartemp3d, start=start3d, count=count3d) + if (status /= nf90_noerr) call handle_err(status) + status = nf90_inq_varid(ncid, trim(YCHANGE(JI,2)), ind_netcdf) + if (status /= nf90_noerr) call handle_err(status) + status = nf90_get_var(ncid, ind_netcdf, vartemp3dbis, start=start3d, count=count3d) + if (status /= nf90_noerr) call handle_err(status) + DO JJ=1,levlen ! lev, lat, lon + ZCHEMMOZ(:,:,JJ)=ZCOEFMOZART(JI,1)*vartemp3d(:,:,levlen+1-JJ) + & + ZCOEFMOZART(JI,2)*vartemp3dbis(:,:,levlen+1-JJ) + ENDDO + ELSE IF (ISPCMOZ(JI)==3) THEN + status = nf90_inq_varid(ncid, trim(YCHANGE(JI,1)), ind_netcdf) + if (status /= nf90_noerr) call handle_err(status) + status = nf90_get_var(ncid, ind_netcdf, vartemp3d, start=start3d, count=count3d) + if (status /= nf90_noerr) call handle_err(status) + status = nf90_inq_varid(ncid, trim(YCHANGE(JI,2)), ind_netcdf) + if (status /= nf90_noerr) call handle_err(status) + status = nf90_get_var(ncid, ind_netcdf, vartemp3dbis, start=start3d, count=count3d) + if (status /= nf90_noerr) call handle_err(status) + status = nf90_inq_varid(ncid, trim(YCHANGE(JI,3)), ind_netcdf) + if (status /= nf90_noerr) call handle_err(status) + status = nf90_get_var(ncid, ind_netcdf, vartemp3dter, start=start3d, count=count3d) + if (status /= nf90_noerr) call handle_err(status) + DO JJ=1,levlen ! lev, lat, lon + ZCHEMMOZ(:,:,JJ)=ZCOEFMOZART(JI,1)*vartemp3d(:,:,levlen+1-JJ)+& + ZCOEFMOZART(JI,2)*vartemp3dbis(:,:,levlen+1-JJ)+& + ZCOEFMOZART(JI,3)*vartemp3dter(:,:,levlen+1-JJ) + ENDDO + ELSE IF (ISPCMOZ(JI)==4) THEN + status = nf90_inq_varid(ncid, trim(YCHANGE(JI,1)), ind_netcdf) + if (status /= nf90_noerr) call handle_err(status) + status = nf90_get_var(ncid, ind_netcdf, vartemp3d, start=start3d, count=count3d) + if (status /= nf90_noerr) call handle_err(status) + status = nf90_inq_varid(ncid, trim(YCHANGE(JI,2)), ind_netcdf) + if (status /= nf90_noerr) call handle_err(status) + status = nf90_get_var(ncid, ind_netcdf, vartemp3dbis, start=start3d, count=count3d) + if (status /= nf90_noerr) call handle_err(status) + status = nf90_inq_varid(ncid, trim(YCHANGE(JI,3)), ind_netcdf) + if (status /= nf90_noerr) call handle_err(status) + status = nf90_get_var(ncid, ind_netcdf, vartemp3dter, start=start3d, count=count3d) + if (status /= nf90_noerr) call handle_err(status) + status = nf90_inq_varid(ncid, trim(YCHANGE(JI,4)), ind_netcdf) + if (status /= nf90_noerr) call handle_err(status) + status = nf90_get_var(ncid, ind_netcdf, vartemp3dquater, start=start3d, count=count3d) + if (status /= nf90_noerr) call handle_err(status) + DO JJ=1,levlen ! lev, lat, lon + ZCHEMMOZ(:,:,JJ)=ZCOEFMOZART(JI,1)*vartemp3d(:,:,levlen+1-JJ)+& + ZCOEFMOZART(JI,2)*vartemp3dbis(:,:,levlen+1-JJ)+& + ZCOEFMOZART(JI,3)*vartemp3dter(:,:,levlen+1-JJ)+& + ZCOEFMOZART(JI,4)*vartemp3dquater(:,:,levlen+1-JJ) + ENDDO + ENDIF + DO JK = 1, levlen + JLOOP1 = 0 + DO JJ = 1, latlen + ZVALUE(JK,JLOOP1+1:JLOOP1+lonlen) = ZCHEMMOZ(1:lonlen,JJ,JK) + JLOOP1 = JLOOP1+lonlen + ENDDO + CALL HORIBL(lats(1),lons(1),lats(latlen),lons(lonlen), & + int(latlen,kind=kind(1)),kinlo,KILEN, & + ZVALUE(JK,:),INO,ZLONOUT,ZLATOUT, & + ZOUT(JK,:),.FALSE.,PTIME_HORI,.TRUE.) + CALL ARRAY_1D_TO_2D(INO,ZOUT(JK,:),IIU,IJU, & + XSV_LS(:,:,JK,JNCHEM) ) + ENDDO ! levlen + ENDIF + + ENDDO ! JNCHEM + DO JNAER = NSV_AERBEG, NSV_AEREND + IF (trim(CAERONAMES(JNAER-NSV_AERBEG+1))==trim(YSPCMNH(JI))) THEN !MNH mechanism species + IF (ISPCMOZ(JI)==1) THEN + status = nf90_inq_varid(ncid, trim(YCHANGE(JI,1)), ind_netcdf) + if (status /= nf90_noerr) call handle_err(status) + status = nf90_get_var(ncid, ind_netcdf, vartemp3d, start=start3d, count=count3d) + if (status /= nf90_noerr) call handle_err(status) + DO JJ=1,levlen ! lev, lat, lon + ZCHEMMOZ(:,:,JJ)=ZCOEFMOZART(JI,1)*vartemp3d(:,:,levlen+1-JJ) + ENDDO + ELSE IF (ISPCMOZ(JI)==2) THEN + status = nf90_inq_varid(ncid, trim(YCHANGE(JI,1)), ind_netcdf) + if (status /= nf90_noerr) call handle_err(status) + status = nf90_get_var(ncid, ind_netcdf, vartemp3d, start=start3d, count=count3d) + if (status /= nf90_noerr) call handle_err(status) + status = nf90_inq_varid(ncid, trim(YCHANGE(JI,2)), ind_netcdf) + if (status /= nf90_noerr) call handle_err(status) + status = nf90_get_var(ncid, ind_netcdf, vartemp3dbis, start=start3d, count=count3d) + if (status /= nf90_noerr) call handle_err(status) + DO JJ=1,levlen ! lev, lat, lon + ZCHEMMOZ(:,:,JJ)=ZCOEFMOZART(JI,1)*vartemp3d(:,:,levlen+1-JJ) + & + ZCOEFMOZART(JI,2)*vartemp3dbis(:,:,levlen+1-JJ) + ENDDO + ELSE IF (ISPCMOZ(JI)==3) THEN + status = nf90_inq_varid(ncid, trim(YCHANGE(JI,1)), ind_netcdf) + if (status /= nf90_noerr) call handle_err(status) + status = nf90_get_var(ncid, ind_netcdf, vartemp3d, start=start3d, count=count3d) + if (status /= nf90_noerr) call handle_err(status) + status = nf90_inq_varid(ncid, trim(YCHANGE(JI,2)), ind_netcdf) + if (status /= nf90_noerr) call handle_err(status) + status = nf90_get_var(ncid, ind_netcdf, vartemp3dbis, start=start3d, count=count3d) + if (status /= nf90_noerr) call handle_err(status) + status = nf90_inq_varid(ncid, trim(YCHANGE(JI,3)), ind_netcdf) + if (status /= nf90_noerr) call handle_err(status) + status = nf90_get_var(ncid, ind_netcdf, vartemp3dter, start=start3d, count=count3d) + if (status /= nf90_noerr) call handle_err(status) + DO JJ=1,levlen ! lev, lat, lon + ZCHEMMOZ(:,:,JJ)=ZCOEFMOZART(JI,1)*vartemp3d(:,:,levlen+1-JJ)+& + ZCOEFMOZART(JI,2)*vartemp3dbis(:,:,levlen+1-JJ)+& + ZCOEFMOZART(JI,3)*vartemp3dter(:,:,levlen+1-JJ) + ENDDO + ELSE IF (ISPCMOZ(JI)==4) THEN + status = nf90_inq_varid(ncid, trim(YCHANGE(JI,1)), ind_netcdf) + if (status /= nf90_noerr) call handle_err(status) + status = nf90_get_var(ncid, ind_netcdf, vartemp3d, start=start3d, count=count3d) + if (status /= nf90_noerr) call handle_err(status) + status = nf90_inq_varid(ncid, trim(YCHANGE(JI,2)), ind_netcdf) + if (status /= nf90_noerr) call handle_err(status) + status = nf90_get_var(ncid, ind_netcdf, vartemp3dbis, start=start3d, count=count3d) + if (status /= nf90_noerr) call handle_err(status) + status = nf90_inq_varid(ncid, trim(YCHANGE(JI,3)), ind_netcdf) + if (status /= nf90_noerr) call handle_err(status) + status = nf90_get_var(ncid, ind_netcdf, vartemp3dter, start=start3d, count=count3d) + if (status /= nf90_noerr) call handle_err(status) + status = nf90_inq_varid(ncid, trim(YCHANGE(JI,4)), ind_netcdf) + if (status /= nf90_noerr) call handle_err(status) + status = nf90_get_var(ncid, ind_netcdf, vartemp3dquater, start=start3d, count=count3d) + if (status /= nf90_noerr) call handle_err(status) + DO JJ=1,levlen ! lev, lat, lon + ZCHEMMOZ(:,:,JJ)=ZCOEFMOZART(JI,1)*vartemp3d(:,:,levlen+1-JJ)+& + ZCOEFMOZART(JI,2)*vartemp3dbis(:,:,levlen+1-JJ)+& + ZCOEFMOZART(JI,3)*vartemp3dter(:,:,levlen+1-JJ)+& + ZCOEFMOZART(JI,4)*vartemp3dquater(:,:,levlen+1-JJ) + ENDDO + ENDIF + DO JK = 1, levlen + JLOOP1 = 0 + DO JJ = 1, latlen + ZVALUE(JK,JLOOP1+1:JLOOP1+lonlen) = ZCHEMMOZ(1:lonlen,JJ,JK) + JLOOP1 = JLOOP1+lonlen + ENDDO + CALL HORIBL(lats(1),lons(1),lats(latlen),lons(lonlen), & + int(latlen,kind=kind(1)),kinlo,KILEN, & + ZVALUE(JK,:),INO,ZLONOUT,ZLATOUT, & + ZOUT(JK,:),.FALSE.,PTIME_HORI,.TRUE.) + CALL ARRAY_1D_TO_2D(INO,ZOUT(JK,:),IIU,IJU, & + XSV_LS(:,:,JK,JNAER) ) + ENDDO ! levlen + ENDIF + ENDDO ! JNAER +ENDDO ! JIDO JNCHEM = NSV_CHEMBEG, NSV_CHEMEND !loop on all MNH species +DEALLOCATE(YSPCMNH) +DEALLOCATE(TZSTOC) +DEALLOCATE(ISPCMOZ) +DEALLOCATE(ZCOEFMOZART) +DEALLOCATE(YCHANGE) +! +XSV_LS(:,:,:,:) = MAX(XSV_LS(:,:,:,:),0.) +! +DO JK = 1, levlen + JLOOP1 = 0 + DO JJ = 1, latlen + ZVALUE(JK,JLOOP1+1:JLOOP1+lonlen) = ZTMOZ(1:lonlen,JJ,JK) + JLOOP1 = JLOOP1 + lonlen + ENDDO + CALL HORIBL(lats(1),lons(1),lats(latlen),lons(lonlen), & + int(latlen,kind=kind(1)),kinlo,KILEN, & + ZVALUE(JK,:),INO,ZLONOUT,ZLATOUT, & + ZOUT(JK,:),.FALSE.,PTIME_HORI,.FALSE.) +! + CALL ARRAY_1D_TO_2D(INO,ZOUT(JK,:),IIU,IJU, & + XT_SV_LS(:,:,JK)) +ENDDO +XT_SV_LS(:,:,:) = MAX(XT_SV_LS(:,:,:),0.) +! +DO JK = 1, levlen + JLOOP1 = 0 + DO JJ = 1, latlen + ZVALUE(JK,JLOOP1+1:JLOOP1+lonlen) = ZQMOZ(1:lonlen,JJ,JK) + JLOOP1 = JLOOP1 + lonlen + ENDDO + CALL HORIBL(lats(1),lons(1),lats(latlen),lons(lonlen), & + int(latlen,kind=kind(1)),kinlo,KILEN, & + ZVALUE(JK,:),INO,ZLONOUT,ZLATOUT, & + ZOUT(JK,:),.FALSE.,PTIME_HORI,.FALSE.) +! + CALL ARRAY_1D_TO_2D(INO,ZOUT(JK,:),IIU,IJU, & + XQ_SV_LS(:,:,JK,1)) +ENDDO +XQ_SV_LS(:,:,:,1) = MAX(XQ_SV_LS(:,:,:,1),0.) +! +JLOOP1 = 0 +DO JJ = 1, latlen + ZVALUE1D(JLOOP1+1:JLOOP1+lonlen) = ZPSMOZ(1:lonlen,JJ) + JLOOP1 = JLOOP1 + lonlen +ENDDO +CALL HORIBL(lats(1),lons(1),lats(latlen),lons(lonlen), & + int(latlen,kind=kind(1)),kinlo,KILEN, & + ZVALUE1D(:),INO,ZLONOUT,ZLATOUT, & + ZOUT1D(:),.FALSE.,PTIME_HORI,.FALSE.) +! +CALL ARRAY_1D_TO_2D(INO,ZOUT1D(:),IIU,IJU, & + XPS_SV_LS(:,:)) +XPS_SV_LS(:,:) = MAX(XPS_SV_LS(:,:),0.) +! +! +! +! close the netcdf file +status = nf90_close(ncid) +if (status /= nf90_noerr) call handle_err(status) +! + DEALLOCATE (ZVALUE) + DEALLOCATE (ZOUT) + DEALLOCATE (ZVALUE1D) + DEALLOCATE (ZOUT1D) +!! + +! close +! file +CALL IO_File_close(TZFILE) + + +!------------------------------------------------------------- +! +!* 4. VERTICAL GRID +! +!* 4.1 Read VERTICAL GRID +! +WRITE (ILUOUT0,'(A)') ' | Reading of vertical grid in progress' +CALL READ_VER_GRID(TPPRE_REAL1) +! +!-------------------------------------------------------------- +! +!* 4.2 Interpolate on Meso-NH VERTICAL GRID +! +!* 4.3 Free all temporary allocations +! +DEALLOCATE (ZLATOUT) +DEALLOCATE (ZLONOUT) +DEALLOCATE (hyam) +DEALLOCATE (hybm) +DEALLOCATE (vartemp3d) +DEALLOCATE (vartemp3dbis) +DEALLOCATE (vartemp3dter) +DEALLOCATE (vartemp3dquater) +! +WRITE (ILUOUT0,'(A,A4,A)') ' -- netcdf decoder for ',HFILE,' file ended successfully' +! +! +CONTAINS +! +! ############################# + SUBROUTINE HANDLE_ERR(STATUS) +! ############################# + INTEGER(KIND=CDFINT) STATUS + IF (STATUS .NE. NF90_NOERR) THEN + PRINT *, NF90_STRERROR(STATUS) + STOP 'Stopped' + ENDIF + END SUBROUTINE HANDLE_ERR +! +! +! ############################################# + SUBROUTINE ARRAY_1D_TO_2D (KN1,P1,KL1,KL2,P2) +! ############################################# +! +! Small routine used to store a linear array into a 2 dimension array +! +USE MODE_MSG +IMPLICIT NONE +INTEGER, INTENT(IN) :: KN1 +REAL,DIMENSION(KN1), INTENT(IN) :: P1 +INTEGER, INTENT(IN) :: KL1 +INTEGER, INTENT(IN) :: KL2 +REAL,DIMENSION(KL1,KL2),INTENT(OUT) :: P2 +INTEGER :: JLOOP1_A1T2 +INTEGER :: JLOOP2_A1T2 +INTEGER :: JPOS_A1T2 +! +IF (KN1 < KL1*KL2) THEN + CALL PRINT_MSG(NVERB_FATAL,'GEN','ARRAY_1D_TO_2D','sizes do not match') +END IF +JPOS_A1T2 = 1 +DO JLOOP2_A1T2 = 1, KL2 + DO JLOOP1_A1T2 = 1, KL1 + P2(JLOOP1_A1T2,JLOOP2_A1T2) = P1(JPOS_A1T2) + JPOS_A1T2 = JPOS_A1T2 + 1 + END DO +END DO +END SUBROUTINE ARRAY_1D_TO_2D +! +END SUBROUTINE READ_CHEM_DATA_MOZART_CASE diff --git a/src/MNH/read_dmsn.F90 b/src/MNH/read_dmsn.F90 new file mode 100644 index 0000000000000000000000000000000000000000..c5a34c3177c84916ef25c7174b282be4a0bd3cf4 --- /dev/null +++ b/src/MNH/read_dmsn.F90 @@ -0,0 +1,102 @@ +!SFX_LIC Copyright 1994-2014 CNRS, Meteo-France and Universite Paul Sabatier +!SFX_LIC This is part of the SURFEX software governed by the CeCILL-C licence +!SFX_LIC version 1. See LICENSE, CeCILL-C_V1-en.txt and CeCILL-C_V1-fr.txt +!SFX_LIC for details. version 1. +! ######### + SUBROUTINE READ_DMS_n(DSF, U, HPROGRAM) +! ################################# +! +!!**** *READ_DMS_n* - routine to read oceanic DMS surface fields +!! +!! PURPOSE +!! ------- +!! +!! AUTHOR +!! ------ +!! P. Tulet *LAERO* +!! +!! MODIFICATIONS +!! ------------- +!! Original 06/2021 +!------------------------------------------------------------------------------- +! +!* 0. DECLARATIONS +! ------------ +! +USE MODD_DMS_SURF_FIELDS_n, ONLY : DMS_SURF_FIELDS_t +USE MODD_SURF_ATM_n, ONLY : SURF_ATM_t +! +USE MODI_READ_SURF +! +USE YOMHOOK ,ONLY : LHOOK, DR_HOOK +USE PARKIND1 ,ONLY : JPRB +! +IMPLICIT NONE +! +!* 0.1 Declarations of arguments +! ------------------------- +! +TYPE(DMS_SURF_FIELDS_t), INTENT(INOUT) :: DSF +TYPE(SURF_ATM_t), INTENT(INOUT) :: U +! + CHARACTER(LEN=6), INTENT(IN) :: HPROGRAM ! +! +!* 0.2 Declarations of local variables +! ------------------------------- +! +INTEGER :: JDMS ! loop counter +CHARACTER(LEN=3) :: YDMS +! + CHARACTER(LEN=20 ):: YSTRING20 ! string + CHARACTER(LEN=3 ):: YSTRING03 ! string +! +INTEGER :: IRESP ! IRESP : return-code if a problem appears + CHARACTER(LEN=LEN_HREC) :: YRECFM ! Name of the article to be read + CHARACTER(LEN=100):: YCOMMENT ! Comment string +REAL(KIND=JPRB) :: ZHOOK_HANDLE +! +!------------------------------------------------------------------------------- +! +!* 2. Number of dummy fields : +! ---------------------- +! +IF (LHOOK) CALL DR_HOOK('READ_DMS_N',0,ZHOOK_HANDLE) +! +YRECFM='DMS_GR_NBR' +YCOMMENT=' ' +! + CALL READ_SURF(HPROGRAM,YRECFM,DSF%NDMS_NBR,IRESP,HCOMMENT=YCOMMENT) +! +!------------------------------------------------------------------------------- +! +!* 3. Dummy fields : +! ------------ +! +ALLOCATE(DSF%CDMS_NAME(DSF%NDMS_NBR)) +ALLOCATE(DSF%CDMS_AREA(DSF%NDMS_NBR)) +ALLOCATE(DSF%XDMS_FIELDS(U%NSIZE_FULL,DSF%NDMS_NBR)) +DSF%CDMS_NAME(:) = ' ' +DSF%CDMS_AREA(:) = 'SEA' +! +! +DO JDMS=1,DSF%NDMS_NBR + ! + WRITE(YDMS,'(I3.3)') (JDMS) + YRECFM='DMS_NB'//ADJUSTL(YDMS(:LEN_TRIM(YDMS))) + YSTRING20=DSF%CDMS_NAME(JDMS) + YSTRING03=DSF%CDMS_AREA(JDMS) + YCOMMENT='X_Y_'//ADJUSTL(YRECFM(:LEN_TRIM(YRECFM)))//'_'//ADJUSTL(YSTRING20(:LEN_TRIM(YSTRING20)))//& + '_'//ADJUSTL(YSTRING03(:LEN_TRIM(YSTRING03))) + + CALL READ_SURF(HPROGRAM,YRECFM,DSF%XDMS_FIELDS(:,JDMS),IRESP,HCOMMENT=YCOMMENT) + + YRECFM='DMS_NAME'//ADJUSTL(YDMS(:LEN_TRIM(YDMS))) + CALL READ_SURF(HPROGRAM,YRECFM,DSF%CDMS_NAME(JDMS),IRESP,HCOMMENT=YCOMMENT) + ! +END DO +! +IF (LHOOK) CALL DR_HOOK('READ_DMS_N',1,ZHOOK_HANDLE) +! +!------------------------------------------------------------------------------- +! +END SUBROUTINE READ_DMS_n diff --git a/src/MNH/read_exsegn.f90 b/src/MNH/read_exsegn.f90 index 4d52929004a0bf4506d4a90b8ca46a503e7a5f59..29b1f57918a3ee48bdc268c7f4e69d3cab8d3ba8 100644 --- a/src/MNH/read_exsegn.f90 +++ b/src/MNH/read_exsegn.f90 @@ -1284,28 +1284,30 @@ SELECT CASE ( CCLOUD ) WRITE(UNIT=ILUOUT,FMT=*) ' WITH A 2-MOMENT MICROPHYSICAL SCHEME "LIMA"' END IF - IF (LUSECHEM ) THEN - WRITE(UNIT=ILUOUT,FMT=*) 'YOU WANT TO USE BOTH LIMA MICROPHYS. SCHEME AND CHEMISTRY' - WRITE(UNIT=ILUOUT,FMT=*) 'THIS IS NOT YET AVAILABLE. SET LUSECHEM ' - WRITE(UNIT=ILUOUT,FMT=*) 'TO FALSE OR CCLOUD TO "ICE3" ' - !callabortstop - CALL PRINT_MSG(NVERB_FATAL,'GEN','READ_EXSEG_n','') - END IF - IF (LDUST ) THEN - WRITE(UNIT=ILUOUT,FMT=*) 'YOU WANT TO USE BOTH LIMA MICROPHYS. SCHEME AND DUSTS ' - WRITE(UNIT=ILUOUT,FMT=*) 'THIS IS NOT YET AVAILABLE. SET LDUST ' - WRITE(UNIT=ILUOUT,FMT=*) 'TO FALSE OR CCLOUD TO "ICE3" ' - !callabortstop - CALL PRINT_MSG(NVERB_FATAL,'GEN','READ_EXSEG_n','') - END IF - IF (LSALT ) THEN - WRITE(UNIT=ILUOUT,FMT=*) 'YOU WANT TO USE BOTH LIMA MICROPHYS. SCHEME AND SEA SALTS ' - WRITE(UNIT=ILUOUT,FMT=*) 'THIS IS NOT YET AVAILABLE. SET LSALT ' - WRITE(UNIT=ILUOUT,FMT=*) 'TO FALSE OR CCLOUD TO "ICE3" ' - !callabortstop - CALL PRINT_MSG(NVERB_FATAL,'GEN','READ_EXSEG_n','') - END IF -! +!UPG*PT +! IF (LUSECHEM ) THEN +! WRITE(UNIT=ILUOUT,FMT=*) 'YOU WANT TO USE BOTH LIMA MICROPHYS. SCHEME AND CHEMISTRY' +! WRITE(UNIT=ILUOUT,FMT=*) 'THIS IS NOT YET AVAILABLE. SET LUSECHEM ' +! WRITE(UNIT=ILUOUT,FMT=*) 'TO FALSE OR CCLOUD TO "ICE3" ' +! !callabortstop +! CALL PRINT_MSG(NVERB_FATAL,'GEN','READ_EXSEG_n','') +! END IF +! IF (LDUST ) THEN +! WRITE(UNIT=ILUOUT,FMT=*) 'YOU WANT TO USE BOTH LIMA MICROPHYS. SCHEME AND DUSTS ' +! WRITE(UNIT=ILUOUT,FMT=*) 'THIS IS NOT YET AVAILABLE. SET LDUST ' +! WRITE(UNIT=ILUOUT,FMT=*) 'TO FALSE OR CCLOUD TO "ICE3" ' +! !callabortstop +! CALL PRINT_MSG(NVERB_FATAL,'GEN','READ_EXSEG_n','') +! END IF +! IF (LSALT ) THEN +! WRITE(UNIT=ILUOUT,FMT=*) 'YOU WANT TO USE BOTH LIMA MICROPHYS. SCHEME AND SEA SALTS ' +! WRITE(UNIT=ILUOUT,FMT=*) 'THIS IS NOT YET AVAILABLE. SET LSALT ' +! WRITE(UNIT=ILUOUT,FMT=*) 'TO FALSE OR CCLOUD TO "ICE3" ' +! !callabortstop +! CALL PRINT_MSG(NVERB_FATAL,'GEN','READ_EXSEG_n','') +! END IF +! +!UPG*PT END SELECT ! LUSERV_G(KMI) = LUSERV @@ -1604,6 +1606,20 @@ ELSE END IF END IF ! +IF (LUSERI.AND. (.NOT.OUSERI)) THEN + WRITE(UNIT=ILUOUT,FMT=9001) KMI + WRITE(UNIT=ILUOUT,FMT=*) 'THE ICE CLOUD FRACTION WILL BE INITIALIZED ACCORDING' + WRITE(UNIT=ILUOUT,FMT=*) 'TO CLOUD MIXING RATIO VALUE OR SET TO 0' + CGETICEFR = 'INIT' +ELSE + IF ( LUSERI ) THEN + CGETICEFR = 'READ' + IF ( (CCONF=='START') .AND. CPROGRAM /= 'DIAG') CGETICEFR='INIT' + ELSE + CGETICEFR = 'SKIP' + END IF +END IF +! IF(CTURBLEN=='RM17' .OR. CTURBLEN=='ADAP') THEN XCEDIS=0.34 ELSE @@ -1858,12 +1874,14 @@ IF (LDUST) THEN END IF IF (LDEPOS_DST(KMI)) THEN + !UPG *PT IF((CCLOUD /= 'ICE3').AND.(CCLOUD /= 'ICE4').AND.(CCLOUD /= 'KESS')& - .AND.(CCLOUD /= 'KHKO').AND.(CCLOUD /= 'C2R2').AND. & + .AND.(CCLOUD /= 'KHKO').AND.(CCLOUD /= 'C2R2').AND.(CCLOUD /= 'LIMA').AND. & (CPROGRAM/='SPAWN').AND.(CPROGRAM/='REAL')) THEN WRITE(UNIT=ILUOUT,FMT=9003) KMI WRITE(UNIT=ILUOUT,FMT='("ERROR: WET DEPOSITION OF DUST IS ONLY CODED FOR THE",/,& - & "MICROPHYSICAL SCHEME as ICE3, ICE4, KESS, KHKO and C2R2")') + & "MICROPHYSICAL SCHEME as ICE3, ICE4, KESS, KHKO, LIMA and C2R2")') + !UPG *PT !callabortstop CALL PRINT_MSG(NVERB_FATAL,'GEN','READ_EXSEG_n','') END IF @@ -1905,12 +1923,15 @@ IF (LSALT) THEN END IF IF (LDEPOS_SLT(KMI)) THEN + !UPG*PT IF((CCLOUD /= 'ICE3').AND.(CCLOUD /= 'ICE4').AND.(CCLOUD /= 'KESS')& - .AND.(CCLOUD /= 'KHKO').AND.(CCLOUD /= 'C2R2').AND. & + !.AND.(CCLOUD /= 'KHKO').AND.(CCLOUD /= 'C2R2').AND. & + .AND.(CCLOUD /= 'KHKO').AND.(CCLOUD /= 'C2R2').AND.(CCLOUD /= 'LIMA').AND. & (CPROGRAM/='SPAWN').AND.(CPROGRAM/='REAL')) THEN WRITE(UNIT=ILUOUT,FMT=9003) KMI WRITE(UNIT=ILUOUT,FMT='("ERROR: WET DEPOSITION OF SEA SALT AEROSOLS IS ONLY CODED FOR THE",/,& - & "MICROPHYSICAL SCHEME as ICE3, ICE4, KESS, KHKO and C2R2")') + & "MICROPHYSICAL SCHEME as ICE3, ICE4, KESS, KHKO, LIMA and C2R2")') + !UPG*PT !callabortstop CALL PRINT_MSG(NVERB_FATAL,'GEN','READ_EXSEG_n','') END IF @@ -1926,9 +1947,9 @@ IF (LSALT) THEN CGETSVT(NSV_SLTDEPBEG:NSV_SLTDEPEND)='INIT' END IF END IF - IF(NMODE_SLT.GT.5 .OR. NMODE_SLT.LT.1) THEN + IF(NMODE_SLT.GT.8 .OR. NMODE_SLT.LT.1) THEN WRITE(UNIT=ILUOUT,FMT=9003) KMI - WRITE(UNIT=ILUOUT,FMT='("SALT MODES MUST BE BETWEEN 1 and 5 ")') + WRITE(UNIT=ILUOUT,FMT='("SALT MODES MUST BE BETWEEN 1 and 8 ")') !callabortstop CALL PRINT_MSG(NVERB_FATAL,'GEN','READ_EXSEG_n','') END IF @@ -1949,12 +1970,15 @@ IF (LORILAM) THEN END IF IF (LDEPOS_AER(KMI)) THEN + !UPG*PT IF((CCLOUD /= 'ICE3').AND.(CCLOUD /= 'ICE4').AND.(CCLOUD /= 'KESS')& - .AND.(CCLOUD /= 'KHKO').AND.(CCLOUD /= 'C2R2').AND. & + .AND.(CCLOUD /= 'KHKO').AND.(CCLOUD /= 'C2R2').AND.(CCLOUD /= 'LIMA').AND. & + !.AND.(CCLOUD /= 'KHKO').AND.(CCLOUD /= 'C2R2').AND. & (CPROGRAM/='SPAWN').AND.(CPROGRAM/='REAL')) THEN WRITE(UNIT=ILUOUT,FMT=9003) KMI WRITE(UNIT=ILUOUT,FMT='("ERROR: WET DEPOSITION OF ORILAM AEROSOLS IS ONLY CODED FOR THE",/,& - & "MICROPHYSICAL SCHEME as ICE3, ICE4, KESS, KHKO and C2R2")') + & "MICROPHYSICAL SCHEME as ICE3, ICE4, KESS, KHKO, LIMA and C2R2")') + !UPG*PT !callabortstop CALL PRINT_MSG(NVERB_FATAL,'GEN','READ_EXSEG_n','') END IF diff --git a/src/MNH/read_field.f90 b/src/MNH/read_field.f90 index f7ccb114e6c605c3aad6f3585688b88e4f2b6b8b..d83171513705eb2621407b89d55801859dcf9749 100644 --- a/src/MNH/read_field.f90 +++ b/src/MNH/read_field.f90 @@ -11,7 +11,7 @@ INTERFACE ! SUBROUTINE READ_FIELD(KOCEMI,TPINIFILE,KIU,KJU,KKU, & HGETTKET,HGETRVT,HGETRCT,HGETRRT,HGETRIT,HGETCIT,HGETZWS, & - HGETRST,HGETRGT,HGETRHT,HGETSVT,HGETSRCT,HGETSIGS,HGETCLDFR, & + HGETRST,HGETRGT,HGETRHT,HGETSVT,HGETSRCT,HGETSIGS,HGETCLDFR,HGETICEFR, & HGETBL_DEPTH,HGETSBL_DEPTH,HGETPHC,HGETPHR,HUVW_ADV_SCHEME, & HTEMP_SCHEME,KSIZELBX_ll,KSIZELBXU_ll,KSIZELBY_ll,KSIZELBYV_ll, & KSIZELBXTKE_ll,KSIZELBYTKE_ll, & @@ -19,7 +19,7 @@ INTERFACE PUM,PVM,PWM,PDUM,PDVM,PDWM, & PUT,PVT,PWT,PTHT,PPABST,PTKET,PRTKEMS, & PRT,PSVT,PZWS,PCIT,PDRYMASST,PDRYMASSS, & - PSIGS,PSRCT,PCLDFR,PBL_DEPTH,PSBL_DEPTH,PWTHVMF,PPHC,PPHR, & + PSIGS,PSRCT,PCLDFR,PICEFR,PBL_DEPTH,PSBL_DEPTH,PWTHVMF,PPHC,PPHR, & PLSUM,PLSVM,PLSWM,PLSTHM,PLSRVM, PLSZWSM, & PLBXUM,PLBXVM,PLBXWM,PLBXTHM,PLBXTKEM,PLBXRM,PLBXSVM, & PLBYUM,PLBYVM,PLBYWM,PLBYTHM,PLBYTKEM,PLBYRM,PLBYSVM, & @@ -46,7 +46,7 @@ CHARACTER (LEN=*), INTENT(IN) :: HGETTKET, & HGETRVT,HGETRCT,HGETRRT, & HGETRIT,HGETRST,HGETRGT,HGETRHT, & HGETCIT,HGETSRCT, HGETZWS, & - HGETSIGS,HGETCLDFR,HGETBL_DEPTH, & + HGETSIGS,HGETCLDFR,HGETICEFR,HGETBL_DEPTH, & HGETSBL_DEPTH,HGETPHC,HGETPHR CHARACTER (LEN=*), DIMENSION(:),INTENT(IN) :: HGETSVT ! @@ -85,6 +85,7 @@ REAL, INTENT(OUT) :: PDRYMASSS ! d Md(t) / dt REAL, DIMENSION(:,:,:), INTENT(OUT) :: PSIGS ! =sqrt(<s's'>) for the ! Subgrid Condensation REAL, DIMENSION(:,:,:), INTENT(OUT) :: PCLDFR ! cloud fraction +REAL, DIMENSION(:,:,:), INTENT(OUT) :: PICEFR ! cloud fraction REAL, DIMENSION(:,:,:), INTENT(OUT) :: PPHC ! pH value in cloud water REAL, DIMENSION(:,:,:), INTENT(OUT) :: PPHR ! pH value in rainwater ! Larger Scale fields @@ -135,7 +136,7 @@ END MODULE MODI_READ_FIELD ! ######################################################################## SUBROUTINE READ_FIELD(KOCEMI,TPINIFILE,KIU,KJU,KKU, & HGETTKET,HGETRVT,HGETRCT,HGETRRT,HGETRIT,HGETCIT,HGETZWS, & - HGETRST,HGETRGT,HGETRHT,HGETSVT,HGETSRCT,HGETSIGS,HGETCLDFR, & + HGETRST,HGETRGT,HGETRHT,HGETSVT,HGETSRCT,HGETSIGS,HGETCLDFR,HGETICEFR, & HGETBL_DEPTH,HGETSBL_DEPTH,HGETPHC,HGETPHR,HUVW_ADV_SCHEME, & HTEMP_SCHEME,KSIZELBX_ll,KSIZELBXU_ll,KSIZELBY_ll,KSIZELBYV_ll, & KSIZELBXTKE_ll,KSIZELBYTKE_ll, & @@ -143,7 +144,7 @@ END MODULE MODI_READ_FIELD PUM,PVM,PWM,PDUM,PDVM,PDWM, & PUT,PVT,PWT,PTHT,PPABST,PTKET,PRTKEMS, & PRT,PSVT,PZWS,PCIT,PDRYMASST,PDRYMASSS, & - PSIGS,PSRCT,PCLDFR,PBL_DEPTH,PSBL_DEPTH,PWTHVMF,PPHC,PPHR, & + PSIGS,PSRCT,PCLDFR,PICEFR,PBL_DEPTH,PSBL_DEPTH,PWTHVMF,PPHC,PPHR, & PLSUM,PLSVM,PLSWM,PLSTHM,PLSRVM,PLSZWSM, & PLBXUM,PLBXVM,PLBXWM,PLBXTHM,PLBXTKEM,PLBXRM,PLBXSVM, & PLBYUM,PLBYVM,PLBYWM,PLBYTHM,PLBYTKEM,PLBYRM,PLBYSVM, & @@ -325,7 +326,7 @@ CHARACTER (LEN=*), INTENT(IN) :: HGETTKET, & HGETRVT,HGETRCT,HGETRRT, & HGETRIT,HGETRST,HGETRGT,HGETRHT, & HGETCIT,HGETSRCT,HGETZWS, & - HGETSIGS,HGETCLDFR,HGETBL_DEPTH, & + HGETSIGS,HGETCLDFR,HGETICEFR,HGETBL_DEPTH, & HGETSBL_DEPTH,HGETPHC,HGETPHR CHARACTER (LEN=*), DIMENSION(:),INTENT(IN) :: HGETSVT ! @@ -366,6 +367,7 @@ REAL, INTENT(OUT) :: PDRYMASSS ! d Md(t) / dt REAL, DIMENSION(:,:,:), INTENT(OUT) :: PSIGS ! =sqrt(<s's'>) for the ! Subgrid Condensation REAL, DIMENSION(:,:,:), INTENT(OUT) :: PCLDFR ! cloud fraction +REAL, DIMENSION(:,:,:), INTENT(OUT) :: PICEFR ! cloud fraction REAL, DIMENSION(:,:,:), INTENT(OUT) :: PPHC ! pH value in cloud water REAL, DIMENSION(:,:,:), INTENT(OUT) :: PPHR ! pH value in rainwater ! @@ -1520,6 +1522,22 @@ IF(HGETCLDFR=='INIT' .OR. IRESP /= 0) THEN ENDIF ENDIF ! +IRESP=0 +IF(HGETICEFR=='READ') THEN ! cloud fraction + CALL IO_Field_read(TPINIFILE,'ICEFR',PICEFR,IRESP) +ENDIF +IF(HGETCLDFR=='INIT' .OR. IRESP /= 0) THEN + IF(SIZE(PRT,4) > 3) THEN + WHERE(PRT(:,:,:,4) > 1.E-30) + PICEFR(:,:,:) = 1. + ELSEWHERE + PICEFR(:,:,:) = 0. + ENDWHERE + ELSE + PICEFR(:,:,:) = 0. + ENDIF +ENDIF +! !* boundary layer depth ! IF (HGETBL_DEPTH=='READ') THEN diff --git a/src/MNH/read_lima_data_netcdf_case.f90 b/src/MNH/read_lima_data_netcdf_case.f90 new file mode 100644 index 0000000000000000000000000000000000000000..e6ffb4742d02808fa6f2a3a24e1b1ee022b3b5e1 --- /dev/null +++ b/src/MNH/read_lima_data_netcdf_case.f90 @@ -0,0 +1,898 @@ +!MNH_LIC Copyright 2012-2017 CNRS, Meteo-France and Universite Paul Sabatier +!MNH_LIC This is part of the Meso-NH software governed by the CeCILL-C licence +!MNH_LIC version 1. See LICENSE, CeCILL-C_V1-en.txt and CeCILL-C_V1-fr.txt +!MNH_LIC for details. version 1. +!----------------------------------------------------------------- +! ################################ + MODULE MODI_READ_LIMA_DATA_NETCDF_CASE +! ################################# +INTERFACE +SUBROUTINE READ_LIMA_DATA_NETCDF_CASE(TPPRE_REAL1,HFILE,TPPGDFILE, & + PTIME_HORI,KVERB,ODUMMY_REAL ) +! +USE MODD_IO, ONLY: TFILEDATA +! +TYPE(TFILEDATA),POINTER,INTENT(IN) :: TPPRE_REAL1 ! PRE_REAL1 file +CHARACTER(LEN=28), INTENT(IN) :: HFILE ! name of the NETCDF file +TYPE(TFILEDATA), INTENT(IN) :: TPPGDFILE ! physiographic data file +REAL, INTENT(INOUT) :: PTIME_HORI ! time spent in hor. interpolations +INTEGER, INTENT(IN) :: KVERB ! verbosity level +LOGICAL, INTENT(IN) :: ODUMMY_REAL! flag to interpolate dummy fields +END SUBROUTINE READ_LIMA_DATA_NETCDF_CASE +! +END INTERFACE +END MODULE MODI_READ_LIMA_DATA_NETCDF_CASE +! #################################################################### + SUBROUTINE READ_LIMA_DATA_NETCDF_CASE(TPPRE_REAL1,HFILE,TPPGDFILE, & + PTIME_HORI,KVERB,ODUMMY_REAL ) +! #################################################################### +! +!!**** *READ_LIMA_DATA_NETCDF_CASE* - reads data for the initialization of real cases. +!! +!! PURPOSE +!! ------- +! This routine reads the two input files : +! The PGD which is closed after reading +! The NETCDF file +! Projection is read in READ_LFIFM_PGD (MODD_GRID). +! Grid and definition of large domain are read in PGD file and +! NETCDF files. +! The PGD files are also read in READ_LFIFM_PGD. +! The PGD file is closed. +! Vertical grid is defined in READ_VER_GRID. +! PGD fields are stored on MESO-NH domain (in TRUNC_PGD). +!! +!!** METHOD +!! ------ +!! 0. Declarations +!! 1. Declaration of arguments +!! 2. Declaration of local variables +!! 1. Read PGD file +!! 1. Domain restriction +!! 2. Coordinate conversion to lat,lon system +!! 2. Read Netcdf fields +!! 3. Vertical grid +!! 4. Free all temporary allocations +!! +!! EXTERNAL +!! -------- +!! subroutine READ_LFIFM_PGD : to read PGD file +!! subroutine READ_VER_GRID : to read the vertical grid in namelist file. +!! subroutine HORIBL : horizontal bilinear interpolation +!! subroutine XYTOLATLON : projection from conformal to lat,lon +!! +!! Module MODI_READ_VER_GRID : interface for subroutine READ_VER_GRID +!! Module MODI_HORIBL : interface for subroutine HORIBL +!! Module MODI_XYTOLATLON : interface for subroutine XYTOLATLON +!! +!! IMPLICIT ARGUMENTS +!! ------------------ +!! +!! Module MODD_CONF : contains configuration variables for all models. +!! NVERB : verbosity level for output-listing +!! Module MODD_LUNIT : contains logical unit names for all models +!! CLUOUT0 : name of output-listing +!! Module MODD_PGDDIM : contains dimension of PGD fields +!! NPGDIMAX: dimension along x (no external point) +!! NPGDJMAX: dimension along y (no external point) +!! Module MODD_PARAMETERS +!! JPHEXT +!! +!! MODIFICATIONS +!! ------------- +!! Original 23/01/12 (C. Mari) +!! P. Wautelet 30/10/17 use F90 module for netCDF +!------------------------------------------------------------------------------- +! +!* 0. DECLARATIONS +! ------------ +! +USE MODD_BLANK_n +USE MODD_CH_AEROSOL, ONLY: CORGANIC, NCARB, NSOA, NSP, LORILAM,& + JPMODE, LVARSIGI, LVARSIGJ,CAERONAMES +USE MODD_CH_M9_n, ONLY: NEQ , CNAMES +USE MODD_CH_MNHC_n, ONLY: LUSECHEM,LUSECHAQ,LUSECHIC,LCH_PH +USE MODD_CONF +USE MODD_CONF_n +USE MODD_CST +USE MODD_DIM_n +USE MODD_GRID +USE MODD_GRID_n +USE MODD_IO, ONLY: TFILEDATA +USE MODD_LUNIT, ONLY: TLUOUT0 +USE MODE_MODELN_HANDLER +USE MODD_NETCDF, ONLY:CDFINT +USE MODD_NSV +USE MODD_PARAMETERS +USE MODD_PARAM_n, ONLY : CTURB +USE MODD_PREP_REAL +USE MODD_TIME +USE MODD_TIME_n +! +!UPG*PT +!USE MODE_FM +!USE MODE_IO_ll +USE MODE_IO +USE MODE_TOOLS_ll +!UPG*PT +USE MODE_MPPDB +USE MODE_THERMO +USE MODE_TIME +! +USE MODI_CH_AER_INIT_SOA +USE MODI_CH_INIT_SCHEME_n +USE MODI_CH_OPEN_INPUT +USE MODI_HORIBL +USE MODI_INI_NSV +USE MODI_READ_HGRID_n +USE MODI_READ_VER_GRID +USE MODI_XYTOLATLON +! +USE NETCDF +! +USE MODD_PARAM_n, ONLY : CCLOUD +USE MODD_PARAM_LIMA, ONLY : NMOD_CCN, LSCAV, LAERO_MASS, HINI_CCN, HTYPE_CCN, & + NMOD_IFN, NMOD_IMM, LHHONI, NINDICE_CCN_IMM +! +IMPLICIT NONE +! +!* 0.1. Declaration of arguments +! ------------------------ +! +TYPE(TFILEDATA),POINTER,INTENT(IN) :: TPPRE_REAL1 ! PRE_REAL1 file +CHARACTER(LEN=28), INTENT(IN) :: HFILE ! name of the NETCDF file +TYPE(TFILEDATA), INTENT(IN) :: TPPGDFILE ! physiographic data file +REAL, INTENT(INOUT) :: PTIME_HORI ! time spent in hor. interpolations +INTEGER, INTENT(IN) :: KVERB ! verbosity level +LOGICAL, INTENT(IN) :: ODUMMY_REAL! flag to interpolate dummy fields +! +!* 0.2 Declaration of local variables +! ------------------------------ +! General purpose variables +INTEGER :: ILUOUT0 ! Unit used for output msg. +INTEGER :: JI,JJ,JK ! Dummy counters +INTEGER :: JLOOP1 +! Variables used by the PGD reader +CHARACTER(LEN=28) :: YPGD_NAME ! not used - dummy argument +CHARACTER(LEN=28) :: YPGD_DAD_NAME ! not used - dummy argument +CHARACTER(LEN=2) :: YPGD_TYPE ! not used - dummy argument +! PGD Grib definition variables +INTEGER :: INO ! Number of points of the grid +INTEGER :: IIU ! Number of points along X +INTEGER :: IJU ! Number of points along Y +REAL, DIMENSION(:), ALLOCATABLE :: ZLONOUT ! mapping PGD -> Grib (lon.) +REAL, DIMENSION(:), ALLOCATABLE :: ZLATOUT ! mapping PGD -> Grib (lat.) +REAL, DIMENSION(:,:), ALLOCATABLE :: ZXM ! X of PGD mass points +REAL, DIMENSION(:,:), ALLOCATABLE :: ZYM ! Y of PGD mass points +REAL, DIMENSION(:,:), ALLOCATABLE :: ZLATM ! Lat of PGD mass points +REAL, DIMENSION(:,:), ALLOCATABLE :: ZLONM ! Lon of PGD mass points +! Variable involved in the task of reading the netcdf file +REAL,DIMENSION(:,:),ALLOCATABLE :: ZVALUE ! Intermediate array +REAL,DIMENSION(:),ALLOCATABLE :: ZVALUE1D ! Intermediate array +REAL,DIMENSION(:,:),ALLOCATABLE :: ZOUT ! Intermediate arrays +REAL,DIMENSION(:),ALLOCATABLE :: ZOUT1D ! Intermediate arrays +! model indice +INTEGER :: IMI +TYPE(TFILEDATA),POINTER :: TZFILE +! +! For netcdf +! +integer(kind=CDFINT) :: status, ncid, varid +integer(kind=CDFINT) :: lat_varid, lon_varid, lev_varid, time_varid +integer(kind=CDFINT) :: a_varid, b_varid, p0_varid, ps_varid, t_varid, q_varid +integer(kind=CDFINT) :: mmr_dust1_varid, mmr_dust2_varid, mmr_dust3_varid +integer(kind=CDFINT) :: mmr_seasalt1_varid, mmr_seasalt2_varid, mmr_seasalt3_varid +integer(kind=CDFINT) :: mmr_bc_hydrophilic_varid, mmr_bc_hydrophobic_varid +integer(kind=CDFINT) :: mmr_oc_hydrophilic_varid, mmr_oc_hydrophobic_varid +integer(kind=CDFINT) :: mmr_sulfaer_varid +integer(kind=CDFINT) :: recid, latid, lonid, levid, timeid +integer(kind=CDFINT) :: latlen, lonlen, levlen, nrecs,timelen +integer(kind=CDFINT) :: KILEN +CHARACTER(LEN=40) :: recname +REAL, DIMENSION(:), ALLOCATABLE :: lats +REAL, DIMENSION(:), ALLOCATABLE :: lons +REAL, DIMENSION(:), ALLOCATABLE :: levs +INTEGER, DIMENSION(:), ALLOCATABLE :: count3d, start3d +INTEGER, DIMENSION(:), ALLOCATABLE :: count2d, start2d +REAL, DIMENSION(:), ALLOCATABLE :: time, a, b +REAL :: p0 +INTEGER, DIMENSION(:), ALLOCATABLE :: kinlo +REAL, DIMENSION(:,:,:), ALLOCATABLE :: mmr_dust1, mmr_dust2, mmr_dust3 +REAL, DIMENSION(:,:,:), ALLOCATABLE :: mmr_seasalt1, mmr_seasalt2, mmr_seasalt3 +REAL, DIMENSION(:,:,:), ALLOCATABLE :: mmr_bc_hydrophilic, mmr_bc_hydrophobic +REAL, DIMENSION(:,:,:), ALLOCATABLE :: mmr_oc_hydrophilic, mmr_oc_hydrophobic +REAL, DIMENSION(:,:,:), ALLOCATABLE :: mmr_sulfaer +REAL, DIMENSION(:,:,:), ALLOCATABLE :: ZWORK +!REAL, DIMENSION(:,:,:), ALLOCATABLE :: TMOZ, QMOZ, PSMOZ +REAL, DIMENSION(:,:,:), ALLOCATABLE :: ZTCAM, ZQCAM +REAL, DIMENSION(:,:), ALLOCATABLE :: ZPSCAM +REAL :: scale, offset +! for reverse altitude +REAL, DIMENSION(:), ALLOCATABLE :: TMP1, TMP2 +REAL, DIMENSION(:,:,:), ALLOCATABLE :: TMP3 +REAL, DIMENSION(:,:,:,:), ALLOCATABLE :: TMP4,TMP5 +!---------------------------------------------------------------------- +TZFILE => NULL() +! +IMI = GET_CURRENT_MODEL_INDEX() +! +!-------------------------------------------------------------- +! +!* 1. READ PGD FILE +! ------------- +! +ILUOUT0 = TLUOUT0%NLU +CALL READ_HGRID_n(TPPGDFILE,YPGD_NAME,YPGD_DAD_NAME,YPGD_TYPE) +! +! 1.1 Domain restriction +! +CALL GET_DIM_EXT_ll('B',IIU,IJU) +INO = IIU * IJU +! +! +! 1.2 Coordinate conversion to lat,lon system +! +ALLOCATE (ZXM(IIU,IJU)) +ALLOCATE (ZYM(IIU,IJU)) +ALLOCATE (ZLONM(IIU,IJU)) +ALLOCATE (ZLATM(IIU,IJU)) +ZXM(1:IIU-1,1) = (XXHAT(1:IIU-1) + XXHAT(2:IIU) ) / 2. +ZXM(IIU,1) = XXHAT(IIU) - XXHAT(IIU-1) + ZXM(IIU-1,1) +ZXM(:,2:IJU) = SPREAD(ZXM(:,1),2,IJU-1) +ZYM(1,1:IJU-1) = (XYHAT(1:IJU-1) + XYHAT(2:IJU)) / 2. +ZYM(1,IJU) = XYHAT(IJU) - XYHAT(IJU-1) + ZYM(1,IJU-1) +ZYM(2:IIU,:) = SPREAD(ZYM(1,:),1,IIU-1) +CALL SM_XYTOLATLON_A (XLAT0,XLON0,XRPK,XLATORI,XLONORI,ZXM,ZYM,ZLATM,ZLONM, & + IIU,IJU) +ALLOCATE (ZLONOUT(INO)) +ALLOCATE (ZLATOUT(INO)) +JLOOP1 = 0 +DO JJ = 1, IJU + ZLONOUT(JLOOP1+1:JLOOP1+IIU) = ZLONM(1:IIU,JJ) + ZLATOUT(JLOOP1+1:JLOOP1+IIU) = ZLATM(1:IIU,JJ) + JLOOP1 = JLOOP1 + IIU +ENDDO +DEALLOCATE (ZYM) +DEALLOCATE (ZXM) +! +!-------------------------------------------------------------- +! +!* 2. READ NETCDF FIELDS +! ------------------ +! +! 2.1 Open netcdf files +! +status = nf90_open(HFILE, nf90_nowrite, ncid) +if (status /= nf90_noerr) call handle_err(status) +! +! 2.2 Read netcdf files +! +! get dimension IDs +! +!* get dimension ID of unlimited variable in netcdf file +status = nf90_inquire(ncid, unlimitedDimId = recid) +!status = nf90_inq_dimid(ncid, "time", timeid) +if (status /= nf90_noerr) call handle_err(status) +status = nf90_inq_dimid(ncid, "latitude", latid) +if (status /= nf90_noerr) call handle_err(status) +status = nf90_inq_dimid(ncid, "longitude", lonid) +if (status /= nf90_noerr) call handle_err(status) +status = nf90_inq_dimid(ncid, "level", levid) +if (status /= nf90_noerr) call handle_err(status) +! +! get dimensions +! +!* get dimension and name of unlimited variable in netcdf file +status = nf90_inquire_dimension(ncid, recid, name=recname, len=nrecs) +!status = nf90_inquire_dimension(ncid, timeid, len=nrecs) +if (status /= nf90_noerr) call handle_err(status) +status = nf90_inquire_dimension(ncid, latid, len=latlen) +if (status /= nf90_noerr) call handle_err(status) +status = nf90_inquire_dimension(ncid, lonid, len=lonlen) +if (status /= nf90_noerr) call handle_err(status) +status = nf90_inquire_dimension(ncid, levid, len=levlen) +if (status /= nf90_noerr) call handle_err(status) +! +! get variable IDs +! +status = nf90_inq_varid(ncid, "latitude", lat_varid) +if (status /= nf90_noerr) call handle_err(status) +status = nf90_inq_varid(ncid, "longitude", lon_varid) +if (status /= nf90_noerr) call handle_err(status) +status = nf90_inq_varid(ncid, "level", lev_varid) +if (status /= nf90_noerr) call handle_err(status) +status = nf90_inq_varid(ncid, "time", time_varid) +if (status /= nf90_noerr) call handle_err(status) +! +!!! status = nf90_inq_varid(ncid, "a", a_varid) +!!! if (status /= nf90_noerr) call handle_err(status) +!!! status = nf90_inq_varid(ncid, "b", b_varid) +!!! if (status /= nf90_noerr) call handle_err(status) +! +status = nf90_inq_varid(ncid, "aermr04", mmr_dust1_varid) +if (status /= nf90_noerr) call handle_err(status) +status = nf90_inq_varid(ncid, "aermr05", mmr_dust2_varid) +if (status /= nf90_noerr) call handle_err(status) +status = nf90_inq_varid(ncid, "aermr06", mmr_dust3_varid) +if (status /= nf90_noerr) call handle_err(status) +! +status = nf90_inq_varid(ncid, "aermr01", mmr_seasalt1_varid) +if (status /= nf90_noerr) call handle_err(status) +status = nf90_inq_varid(ncid, "aermr02", mmr_seasalt2_varid) +if (status /= nf90_noerr) call handle_err(status) +status = nf90_inq_varid(ncid, "aermr03", mmr_seasalt3_varid) +if (status /= nf90_noerr) call handle_err(status) +! +status = nf90_inq_varid(ncid, "aermr10", mmr_bc_hydrophilic_varid) +if (status /= nf90_noerr) call handle_err(status) +status = nf90_inq_varid(ncid, "aermr09", mmr_bc_hydrophobic_varid) +if (status /= nf90_noerr) call handle_err(status) +! +status = nf90_inq_varid(ncid, "aermr08", mmr_oc_hydrophilic_varid) +if (status /= nf90_noerr) call handle_err(status) +status = nf90_inq_varid(ncid, "aermr07", mmr_oc_hydrophobic_varid) +if (status /= nf90_noerr) call handle_err(status) +! +status = nf90_inq_varid(ncid, "aermr11", mmr_sulfaer_varid) +if (status /= nf90_noerr) call handle_err(status) +! +!!! status = nf90_inq_varid(ncid, "p0", p0_varid) +!!! if (status /= nf90_noerr) call handle_err(status) +status = nf90_inq_varid(ncid, "sp", ps_varid) +if (status /= nf90_noerr) call handle_err(status) +status = nf90_inq_varid(ncid, "t", t_varid) +if (status /= nf90_noerr) call handle_err(status) +status = nf90_inq_varid(ncid, "q", q_varid) +if (status /= nf90_noerr) call handle_err(status) +! + +KILEN = latlen * lonlen +! +! 2.3 Read data. +! +ALLOCATE (count3d(4)) +ALLOCATE (start3d(4)) +ALLOCATE (count2d(3)) +ALLOCATE (start2d(3)) +ALLOCATE (lats(latlen)) +ALLOCATE (lons(lonlen)) +ALLOCATE (levs(levlen)) +ALLOCATE (kinlo(latlen)) +kinlo(:) = lonlen +!ALLOCATE (time(nrecs)) +!ALLOCATE (a(levlen)) +!ALLOCATE (b(levlen)) +! T, Q, Ps : +ALLOCATE (ZTCAM(lonlen,latlen,levlen)) +ALLOCATE (ZQCAM(lonlen,latlen,levlen)) +!ALLOCATE (ZPSCAM(lonlen,latlen,levlen)) +ALLOCATE (ZPSCAM(lonlen,latlen)) +! transformed a, b : +ALLOCATE (XA_SV_LS(levlen)) +ALLOCATE (XB_SV_LS(levlen)) +! meteo var +ALLOCATE (XT_SV_LS(IIU,IJU,levlen)) +ALLOCATE (XQ_SV_LS(IIU,IJU,levlen,1)) +ALLOCATE (XPS_SV_LS(IIU,IJU)) +ALLOCATE (XZS_SV_LS(IIU,IJU)) +! take the orography from ECMWF +XZS_SV_LS(:,:) = XZS_LS(:,:) +! aerosol mr from CAMS or MACC +ALLOCATE (mmr_dust1(lonlen,latlen,levlen)) +ALLOCATE (mmr_dust2(lonlen,latlen,levlen)) +ALLOCATE (mmr_dust3(lonlen,latlen,levlen)) +! +ALLOCATE (mmr_seasalt1(lonlen,latlen,levlen)) +ALLOCATE (mmr_seasalt2(lonlen,latlen,levlen)) +ALLOCATE (mmr_seasalt3(lonlen,latlen,levlen)) +! +ALLOCATE (mmr_bc_hydrophilic(lonlen,latlen,levlen)) +ALLOCATE (mmr_bc_hydrophobic(lonlen,latlen,levlen)) +! +ALLOCATE (mmr_oc_hydrophilic(lonlen,latlen,levlen)) +ALLOCATE (mmr_oc_hydrophobic(lonlen,latlen,levlen)) +! +ALLOCATE (mmr_sulfaer(lonlen,latlen,levlen)) +! +ALLOCATE (ZWORK(lonlen,latlen,levlen)) +! +! get values of variables +! +status = nf90_get_var(ncid, lat_varid, lats(:)) +if (status /= nf90_noerr) call handle_err(status) +status = nf90_get_var(ncid, lon_varid, lons(:)) +if (status /= nf90_noerr) call handle_err(status) +status = nf90_get_var(ncid, lev_varid, levs(:)) +if (status /= nf90_noerr) call handle_err(status) +!!! status = nf90_get_var(ncid, time_varid, time(:)) +!!! if (status /= nf90_noerr) call handle_err(status) +!!! status = nf90_get_var(ncid, a_varid, a(:)) +!!! if (status /= nf90_noerr) call handle_err(status) +!!! status = nf90_get_var(ncid, b_varid, b(:)) +!!! if (status /= nf90_noerr) call handle_err(status) +!!! status = nf90_get_var(ncid, p0_varid, p0) +!!! if (status /= nf90_noerr) call handle_err(status) +! +! Reference pressure (needed for the vertical interpolation) +! +!!! XP00_SV_LS = p0 +XP00_SV_LS = 101325.0 +! +! a and b coefficients (needed for the vertical interpolation) +! +XA_SV_LS(:) = (/ 20.000000000, 38.425343000, 63.647804000, 95.636963000, 134.48330700, & + 180.58435100, 234.77905300, 298.49578900, 373.97192400, 464.61813400, & + 575.65100100, 713.21807900, 883.66052200, 1094.8347170, 1356.4746090, & + 1680.6402590, 2082.2739260, 2579.8886720, 3196.4216310, 3960.2915040, & + 4906.7084960, 6018.0195310, 7306.6313480, 8765.0537110, 10376.126953, & + 12077.446289, 13775.325195, 15379.805664, 16819.474609, 18045.183594, & + 19027.695313, 19755.109375, 20222.205078, 20429.863281, 20384.480469, & + 20097.402344, 19584.330078, 18864.750000, 17961.357422, 16899.468750, & + 15706.447266, 14411.124023, 13043.218750, 11632.758789, 10209.500977, & + 8802.3564450, 7438.8032230, 6144.3149410, 4941.7783200, 3850.9133300, & + 2887.6965330, 2063.7797850, 1385.9125980, 855.36175500, 467.33358800, & + 210.39389000, 65.889244000, 7.3677430000, 0.0000000000, 0.0000000000 /) + +XA_SV_LS(:) = XA_SV_LS(:) / XP00_SV_LS + +XB_SV_LS(:) = (/ 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, & + 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, & + 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, & + 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, & + 0.00000000, 0.00000000, 0.00000000, 0.00007582, 0.00046139, & + 0.00181516, 0.00508112, 0.01114291, 0.02067788, 0.03412116, & + 0.05169041, 0.07353383, 0.09967469, 0.13002251, 0.16438432, & + 0.20247594, 0.24393314, 0.28832296, 0.33515489, 0.38389215, & + 0.43396294, 0.48477158, 0.53570992, 0.58616841, 0.63554746, & + 0.68326861, 0.72878581, 0.77159661, 0.81125343, 0.84737492, & + 0.87965691, 0.90788388, 0.93194032, 0.95182151, 0.96764523, & + 0.97966272, 0.98827010, 0.99401945, 0.99763012, 1.00000000 /) +! +! Read 1 record of lon*lat values, starting at the +! beginning of the record (the (1, 1, rec=time) element in the netCDF +! file). +count2d(1) = lonlen +count2d(2) = latlen +count2d(3) = 1 +start2d(1) = 1 +start2d(2) = 1 +start2d(3) = 1 +! +! Read 1 record of lon*lat*lev values, starting at the +! beginning of the record (the (1, 1, 1, rec=time) element in the netCDF +! file). +count3d(1) = lonlen +count3d(2) = latlen +count3d(3) = levlen +count3d(4) = 1 +start3d(1) = 1 +start3d(2) = 1 +start3d(3) = 1 +start3d(4) = 1 +! +! Temperature and spec. hum. (needed for the vertical interpolation) +! +status = nf90_get_var(ncid, t_varid, ZTCAM(:,:,:), start=start3d, count=count3d) +if (status /= nf90_noerr) call handle_err(status) +status = nf90_get_att(ncid, t_varid, "scale_factor", scale) +status = nf90_get_att(ncid, t_varid, "add_offset", offset) +ZTCAM(:,:,:) = offset + scale * ZTCAM(:,:,:) +! +status = nf90_get_var(ncid, q_varid, ZQCAM(:,:,:), start=start3d, count=count3d) +if (status /= nf90_noerr) call handle_err(status) +status = nf90_get_att(ncid, q_varid, "scale_factor", scale) +status = nf90_get_att(ncid, q_varid, "add_offset", offset) +ZQCAM(:,:,:) = offset + scale * ZQCAM(:,:,:) +! +status = nf90_get_var(ncid, ps_varid, ZPSCAM(:,:), start=start2d, count=count2d) +if (status /= nf90_noerr) call handle_err(status) +status = nf90_get_att(ncid, ps_varid, "scale_factor", scale) +status = nf90_get_att(ncid, ps_varid, "add_offset", offset) +ZPSCAM(:,:) = offset + scale * ZPSCAM(:,:) +!ZPSCAM(:,:) = EXP( ZPSCAM(:,:) ) +! +! Aerosol concentrations +! +status = nf90_get_var(ncid, mmr_dust1_varid, mmr_dust1(:,:,:), start=start3d, count=count3d) +if (status /= nf90_noerr) call handle_err(status) +status = nf90_get_att(ncid, mmr_dust1_varid, "scale_factor", scale) +status = nf90_get_att(ncid, mmr_dust1_varid, "add_offset", offset) +mmr_dust1(:,:,:) = offset + scale * mmr_dust1(:,:,:) +! +status = nf90_get_var(ncid, mmr_dust2_varid, mmr_dust2(:,:,:), start=start3d, count=count3d) +if (status /= nf90_noerr) call handle_err(status) +status = nf90_get_att(ncid, mmr_dust2_varid, "scale_factor", scale) +status = nf90_get_att(ncid, mmr_dust2_varid, "add_offset", offset) +mmr_dust2(:,:,:) = offset + scale * mmr_dust2(:,:,:) +! +status = nf90_get_var(ncid, mmr_dust3_varid, mmr_dust3(:,:,:), start=start3d, count=count3d) +if (status /= nf90_noerr) call handle_err(status) +status = nf90_get_att(ncid, mmr_dust3_varid, "scale_factor", scale) +status = nf90_get_att(ncid, mmr_dust3_varid, "add_offset", offset) +mmr_dust3(:,:,:) = offset + scale * mmr_dust3(:,:,:) +! +! +status = nf90_get_var(ncid, mmr_seasalt1_varid, mmr_seasalt1(:,:,:), start=start3d, count=count3d) +if (status /= nf90_noerr) call handle_err(status) +status = nf90_get_att(ncid, mmr_seasalt1_varid, "scale_factor", scale) +status = nf90_get_att(ncid, mmr_seasalt1_varid, "add_offset", offset) +mmr_seasalt1(:,:,:) = offset + scale * mmr_seasalt1(:,:,:) +! +status = nf90_get_var(ncid, mmr_seasalt2_varid, mmr_seasalt2(:,:,:), start=start3d, count=count3d) +if (status /= nf90_noerr) call handle_err(status) +status = nf90_get_att(ncid, mmr_seasalt2_varid, "scale_factor", scale) +status = nf90_get_att(ncid, mmr_seasalt2_varid, "add_offset", offset) +mmr_seasalt2(:,:,:) = offset + scale * mmr_seasalt2(:,:,:) +! +status = nf90_get_var(ncid, mmr_seasalt3_varid, mmr_seasalt3(:,:,:), start=start3d, count=count3d) +if (status /= nf90_noerr) call handle_err(status) +status = nf90_get_att(ncid, mmr_seasalt3_varid, "scale_factor", scale) +status = nf90_get_att(ncid, mmr_seasalt3_varid, "add_offset", offset) +mmr_seasalt3(:,:,:) = offset + scale * mmr_seasalt3(:,:,:) +! +! +status = nf90_get_var(ncid, mmr_bc_hydrophilic_varid, mmr_bc_hydrophilic(:,:,:), start=start3d, count=count3d) +if (status /= nf90_noerr) call handle_err(status) +status = nf90_get_att(ncid, mmr_bc_hydrophilic_varid, "scale_factor", scale) +status = nf90_get_att(ncid, mmr_bc_hydrophilic_varid, "add_offset", offset) +mmr_bc_hydrophilic(:,:,:) = offset + scale * mmr_bc_hydrophilic(:,:,:) +! +status = nf90_get_var(ncid, mmr_bc_hydrophobic_varid, mmr_bc_hydrophobic(:,:,:), start=start3d, count=count3d) +if (status /= nf90_noerr) call handle_err(status) +status = nf90_get_att(ncid, mmr_bc_hydrophobic_varid, "scale_factor", scale) +status = nf90_get_att(ncid, mmr_bc_hydrophobic_varid, "add_offset", offset) +mmr_bc_hydrophobic(:,:,:) = offset + scale * mmr_bc_hydrophobic(:,:,:) +! +! +status = nf90_get_var(ncid, mmr_oc_hydrophilic_varid, mmr_oc_hydrophilic(:,:,:), start=start3d, count=count3d) +if (status /= nf90_noerr) call handle_err(status) +status = nf90_get_att(ncid, mmr_oc_hydrophilic_varid, "scale_factor", scale) +status = nf90_get_att(ncid, mmr_oc_hydrophilic_varid, "add_offset", offset) +mmr_oc_hydrophilic(:,:,:) = offset + scale * mmr_oc_hydrophilic(:,:,:) +! +status = nf90_get_var(ncid, mmr_oc_hydrophobic_varid, mmr_oc_hydrophobic(:,:,:), start=start3d, count=count3d) +if (status /= nf90_noerr) call handle_err(status) +status = nf90_get_att(ncid, mmr_oc_hydrophobic_varid, "scale_factor", scale) +status = nf90_get_att(ncid, mmr_oc_hydrophobic_varid, "add_offset", offset) +mmr_oc_hydrophobic(:,:,:) = offset + scale * mmr_oc_hydrophobic(:,:,:) +! +! +status = nf90_get_var(ncid, mmr_sulfaer_varid, mmr_sulfaer(:,:,:), start=start3d, count=count3d) +if (status /= nf90_noerr) call handle_err(status) +status = nf90_get_att(ncid, mmr_sulfaer_varid, "scale_factor", scale) +status = nf90_get_att(ncid, mmr_sulfaer_varid, "add_offset", offset) +mmr_sulfaer(:,:,:) = offset + scale * mmr_sulfaer(:,:,:) +! +!-------------------------------------------------------------- +! +!* 3 Conversion of MACC or CAMS variables into LIMA variables +! ------------------------------------------------ +! +! initialise NSV_* variables +! cas simple : 3 modes de CCN (dont 1 actif par immersion), 2 modes IFN +! CCN1 : seasalt +! CCN2 : sulfates +! CCN3 (IMM) : hydrophilic OM and BC +! IFN1 : dust +! IFN2 : hydrophobic OM and BC +! +! XSV : Nc, Nr, 3 CCN free, 3 CCN activés, Ni, 2 IN free, 2 IN activé = 11 variables +! +! Concentrations en nombre par kilo ! +! +CCLOUD='LIMA' +NMOD_CCN=3 +LSCAV=.FALSE. +LAERO_MASS=.FALSE. +NMOD_IFN=2 +NMOD_IMM=1 +LHHONI=.FALSE. +HINI_CCN='AER' +HTYPE_CCN(1)='M' +HTYPE_CCN(2)='C' +HTYPE_CCN(3)='C' +! +! 3.1 initialize lima sv var. +! +! Always initialize chemical scheme variables before INI_NSV call ! +CALL CH_INIT_SCHEME_n(IMI,LUSECHAQ,LUSECHIC,LCH_PH,ILUOUT0,KVERB) +IF (LORILAM) THEN + CORGANIC = "MPMPO" + LVARSIGI = .TRUE. + LVARSIGJ = .TRUE. + CALL CH_AER_INIT_SOA(ILUOUT0, KVERB) +END IF +! +CALL INI_NSV(1) +DEALLOCATE(XSV_LS_LIMA) +ALLOCATE (XSV_LS_LIMA(IIU,IJU,levlen,NSV)) +XSV_LS_LIMA(:,:,:,:) = 0. +! +ALLOCATE(NINDICE_CCN_IMM(1)) +NINDICE_CCN_IMM(1)=3 +! +! Define work arrays +! +ALLOCATE(ZVALUE(levlen,KILEN)) +ALLOCATE(ZVALUE1D(KILEN)) +ALLOCATE(ZOUT(levlen,INO)) +ALLOCATE(ZOUT1D(INO)) +! +where (ZLONOUT(:) < 0.) ZLONOUT(:) = ZLONOUT(:) + 360. ! correct longitudes +! +! +! 3.2 Select CAMS/MACC mixing ratios and perform the horizontal interpolation +! +! Free CCN concentration (mode 1) +! +ZWORK(:,:,:)=mmr_seasalt1(:,:,:)+mmr_seasalt2(:,:,:)+mmr_seasalt3(:,:,:) +!!! ZWORK(:,:,:)=mmr_seasalt2(:,:,:) +!!!JPP ZWORK(:,:,:)=ZWORK(:,:,:)*1.E18/3620. +DO JK = 1, levlen + JLOOP1 = 0 + DO JJ = 1, latlen + ZVALUE(JK,JLOOP1+1:JLOOP1+lonlen) = ZWORK(1:lonlen,JJ,JK) + JLOOP1 = JLOOP1 + lonlen + ENDDO + CALL HORIBL(lats(1),lons(1),lats(latlen),lons(lonlen), & + latlen,kinlo,KILEN, & + ZVALUE(JK,:),INO,ZLONOUT,ZLATOUT, & + ZOUT(JK,:),.FALSE.,PTIME_HORI,.TRUE. ) + CALL ARRAY_1D_TO_2D(INO,ZOUT(JK,:),IIU,IJU,XSV_LS_LIMA(:,:,JK,NSV_LIMA_CCN_FREE)) +ENDDO +! +! Free CCN concentration (mode 2) +! +!!!JPP ZWORK(:,:,:)=mmr_sulfaer(:,:,:)*1.E18/345 +ZWORK(:,:,:)=mmr_sulfaer(:,:,:) +DO JK = 1, levlen + JLOOP1 = 0 + DO JJ = 1, latlen + ZVALUE(JK,JLOOP1+1:JLOOP1+lonlen) = ZWORK(1:lonlen,JJ,JK) + JLOOP1 = JLOOP1 + lonlen + ENDDO + CALL HORIBL(lats(1),lons(1),lats(latlen),lons(lonlen), & + latlen,kinlo,KILEN, & + ZVALUE(JK,:),INO,ZLONOUT,ZLATOUT, & + ZOUT(JK,:),.FALSE.,PTIME_HORI,.TRUE. ) + CALL ARRAY_1D_TO_2D(INO,ZOUT(JK,:),IIU,IJU,XSV_LS_LIMA(:,:,JK,NSV_LIMA_CCN_FREE + 1)) +ENDDO +! +! Free CCN concentration (mode 3, IMM) +! +!!!JPP ZWORK(:,:,:)=mmr_bc_hydrophilic(:,:,:)*1.E18/20. +!!!JPP ZWORK(:,:,:)=ZWORK(:,:,:) + mmr_oc_hydrophilic(:,:,:)*1.E18/16. +ZWORK(:,:,:)=mmr_bc_hydrophilic(:,:,:)+mmr_oc_hydrophilic(:,:,:) +DO JK = 1, levlen + JLOOP1 = 0 + DO JJ = 1, latlen + ZVALUE(JK,JLOOP1+1:JLOOP1+lonlen) = ZWORK(1:lonlen,JJ,JK) + JLOOP1 = JLOOP1 + lonlen + ENDDO + CALL HORIBL(lats(1),lons(1),lats(latlen),lons(lonlen), & + latlen,kinlo,KILEN, & + ZVALUE(JK,:),INO,ZLONOUT,ZLATOUT, & + ZOUT(JK,:),.FALSE.,PTIME_HORI,.TRUE. ) + CALL ARRAY_1D_TO_2D(INO,ZOUT(JK,:),IIU,IJU,XSV_LS_LIMA(:,:,JK,NSV_LIMA_CCN_FREE + 2)) +ENDDO +! +! Free IFN concentration (mode 1) +! +!!!JPP ZWORK(:,:,:)=mmr_dust2(:,:,:)*1.E18/(1204.*0.58) +!!!JPP ZWORK2(:,:,:)=max(0.,(mmr_dust3(:,:,:)*1.E18/1204.-2.4*ZWORK(:,:,:))/70.) +ZWORK(:,:,:)=mmr_dust1(:,:,:) + mmr_dust2(:,:,:) + mmr_dust3(:,:,:) +DO JK = 1, levlen + JLOOP1 = 0 + DO JJ = 1, latlen + ZVALUE(JK,JLOOP1+1:JLOOP1+lonlen) = ZWORK(1:lonlen,JJ,JK) + JLOOP1 = JLOOP1 + lonlen + ENDDO + CALL HORIBL(lats(1),lons(1),lats(latlen),lons(lonlen), & + latlen,kinlo,KILEN, & + ZVALUE(JK,:),INO,ZLONOUT,ZLATOUT, & + ZOUT(JK,:),.FALSE.,PTIME_HORI,.TRUE. ) + CALL ARRAY_1D_TO_2D(INO,ZOUT(JK,:),IIU,IJU,XSV_LS_LIMA(:,:,JK,NSV_LIMA_IFN_FREE)) +ENDDO +! +! Free IFN concentration (mode 2) +! +!!!JPP ZWORK(:,:,:)=mmr_bc_hydrophobic(:,:,:)*1.E18/20. +!!!JPP ZWORK(:,:,:)=ZWORK(:,:,:) + mmr_oc_hydrophobic(:,:,:)*1.E18/16. +ZWORK(:,:,:)=mmr_bc_hydrophobic(:,:,:)+mmr_oc_hydrophobic(:,:,:) +DO JK = 1, levlen + JLOOP1 = 0 + DO JJ = 1, latlen + ZVALUE(JK,JLOOP1+1:JLOOP1+lonlen) = ZWORK(1:lonlen,JJ,JK) + JLOOP1 = JLOOP1 + lonlen + ENDDO + CALL HORIBL(lats(1),lons(1),lats(latlen),lons(lonlen), & + latlen,kinlo,KILEN, & + ZVALUE(JK,:),INO,ZLONOUT,ZLATOUT, & + ZOUT(JK,:),.FALSE.,PTIME_HORI,.TRUE. ) + CALL ARRAY_1D_TO_2D(INO,ZOUT(JK,:),IIU,IJU,XSV_LS_LIMA(:,:,JK,NSV_LIMA_IFN_FREE + 1)) +ENDDO +! +! 3.3 Meteo ver. perform the horizontal interpolation +! +! Temperature (needed for the vertical interpolation) +! +DO JK = 1, levlen + JLOOP1 = 0 + DO JJ = 1, latlen + ZVALUE(JK,JLOOP1+1:JLOOP1+lonlen) = ZTCAM(1:lonlen,JJ,JK) + JLOOP1 = JLOOP1 + lonlen + ENDDO + CALL HORIBL(lats(1),lons(1),lats(latlen),lons(lonlen), & + latlen,kinlo,KILEN, & + ZVALUE(JK,:),INO,ZLONOUT,ZLATOUT, & + ZOUT(JK,:),.FALSE.,PTIME_HORI,.TRUE. ) + CALL ARRAY_1D_TO_2D(INO,ZOUT(JK,:),IIU,IJU,XT_SV_LS(:,:,JK)) +ENDDO ! levlen +! +! Spec. Humidity (needed for the vertical interpolation) +! +DO JK = 1, levlen + JLOOP1 = 0 + DO JJ = 1, latlen + ZVALUE(JK,JLOOP1+1:JLOOP1+lonlen) = ZQCAM(1:lonlen,JJ,JK) + JLOOP1 = JLOOP1 + lonlen + ENDDO + CALL HORIBL(lats(1),lons(1),lats(latlen),lons(lonlen), & + latlen,kinlo,KILEN, & + ZVALUE(JK,:),INO,ZLONOUT,ZLATOUT, & + ZOUT(JK,:),.FALSE.,PTIME_HORI,.TRUE. ) + CALL ARRAY_1D_TO_2D(INO,ZOUT(JK,:),IIU,IJU,XQ_SV_LS(:,:,JK,1)) +ENDDO ! levlen +! +! Surface pressure (needed for the vertical interpolation) +! +JLOOP1 = 0 +DO JJ = 1, latlen + ZVALUE1D(JLOOP1+1:JLOOP1+lonlen) = ZPSCAM(1:lonlen,JJ) + JLOOP1 = JLOOP1 + lonlen +ENDDO +CALL HORIBL(lats(1),lons(1),lats(latlen),lons(lonlen), & + latlen,kinlo,KILEN, & + ZVALUE1D(:),INO,ZLONOUT,ZLATOUT, & + ZOUT1D(:),.FALSE.,PTIME_HORI,.TRUE. ) +CALL ARRAY_1D_TO_2D(INO,ZOUT1D(:),IIU,IJU,XPS_SV_LS(:,:)) +! +! 3.4 Correct negative values produced by the horizontal interpolations +! +XSV_LS_LIMA(:,:,:,:) = MAX(XSV_LS_LIMA(:,:,:,:),0.) +XPS_SV_LS(:,:) = MAX(XPS_SV_LS(:,:),0.) +XT_SV_LS(:,:,:) = MAX(XT_SV_LS(:,:,:),0.) +XQ_SV_LS(:,:,:,1) = MAX(XQ_SV_LS(:,:,:,1),0.) +! +! 3.5 If Netcdf vertical levels have to be reversed : +! +ALLOCATE(TMP1(levlen)) +ALLOCATE(TMP2(levlen)) +ALLOCATE(TMP3(IIU,IJU,levlen)) +ALLOCATE(TMP4(IIU,IJU,levlen,NRR)) +ALLOCATE(TMP5(IIU,IJU,levlen,NSV)) +DO JJ=1,levlen + ! inv. lev + TMP1(JJ) = XA_SV_LS(levlen+1-JJ) + TMP2(JJ) = XB_SV_LS(levlen+1-JJ) + TMP3(:,:,JJ) = XT_SV_LS(:,:,levlen+1-JJ) + TMP4(:,:,JJ,:) = XQ_SV_LS(:,:,levlen+1-JJ,:) + TMP5(:,:,JJ,:) = XSV_LS(:,:,levlen+1-JJ,:) +ENDDO +XA_SV_LS(:) = TMP1(:) +XB_SV_LS(:) = TMP2(:) +XT_SV_LS(:,:,:) = TMP3(:,:,:) +XQ_SV_LS(:,:,:,:) = TMP4(:,:,:,:) +XSV_LS(:,:,:,:) = TMP5(:,:,:,:) +DEALLOCATE(TMP1) +DEALLOCATE(TMP2) +DEALLOCATE(TMP3) +DEALLOCATE(TMP4) +DEALLOCATE(TMP5) +! +! 3.6 close the netcdf file +! +status = nf90_close(ncid) +if (status /= nf90_noerr) call handle_err(status) +! +DEALLOCATE (ZVALUE) +DEALLOCATE (ZOUT) +!! +!------------------------------------------------------------- +! +!* 4. VERTICAL GRID +! ------------- +! +! 4.1 Read VERTICAL GRID +! +WRITE (ILUOUT0,'(A)') ' | Reading of vertical grid in progress' +CALL READ_VER_GRID(TPPRE_REAL1) +! +!-------------------------------------------------------------- +! +! 5. Free all temporary allocations +! ------------------------------ +! +DEALLOCATE (ZLATOUT) +DEALLOCATE (ZLONOUT) +DEALLOCATE (count3d) +DEALLOCATE (start3d) +DEALLOCATE (count2d) +DEALLOCATE (start2d) +! +DEALLOCATE (lats) +DEALLOCATE (lons) +DEALLOCATE (levs) +!DEALLOCATE (time) +!DEALLOCATE (a) +!DEALLOCATE (b) +! ps, T, Q : +DEALLOCATE (ZPSCAM) +DEALLOCATE (ZTCAM) +DEALLOCATE (ZQCAM) +! +DEALLOCATE (mmr_dust1) +DEALLOCATE (mmr_dust2) +DEALLOCATE (mmr_dust3) +! +DEALLOCATE (mmr_seasalt1) +DEALLOCATE (mmr_seasalt2) +DEALLOCATE (mmr_seasalt3) +! +DEALLOCATE (mmr_bc_hydrophilic) +DEALLOCATE (mmr_bc_hydrophobic) +! +DEALLOCATE (mmr_oc_hydrophilic) +DEALLOCATE (mmr_oc_hydrophobic) +! +DEALLOCATE (mmr_sulfaer) +! +DEALLOCATE (ZWORK) +! +WRITE (ILUOUT0,'(A,A4,A)') ' -- netcdf decoder for ',HFILE,' file ended successfully' +WRITE (ILUOUT0,'(A,A4,A)') 'MACC mixing ratios are interpolated horizontally' +! +! +CONTAINS +! +! ############################# + SUBROUTINE HANDLE_ERR(STATUS) +! ############################# + INTEGER(KIND=CDFINT) STATUS + IF (STATUS .NE. NF90_NOERR) THEN + PRINT *, NF90_STRERROR(STATUS) + STOP 'Stopped' + ENDIF + END SUBROUTINE HANDLE_ERR +! +! +! ############################################# + SUBROUTINE ARRAY_1D_TO_2D (KN1,P1,KL1,KL2,P2) +! ############################################# +! +! Small routine used to store a linear array into a 2 dimension array +! +USE MODE_MSG +IMPLICIT NONE +INTEGER, INTENT(IN) :: KN1 +REAL,DIMENSION(KN1), INTENT(IN) :: P1 +INTEGER, INTENT(IN) :: KL1 +INTEGER, INTENT(IN) :: KL2 +REAL,DIMENSION(KL1,KL2),INTENT(OUT) :: P2 +INTEGER :: JLOOP1_A1T2 +INTEGER :: JLOOP2_A1T2 +INTEGER :: JPOS_A1T2 +! +IF (KN1 < KL1*KL2) THEN + CALL PRINT_MSG(NVERB_FATAL,'GEN','ARRAY_1D_TO_2D','sizes do not match') +END IF +JPOS_A1T2 = 1 +DO JLOOP2_A1T2 = 1, KL2 + DO JLOOP1_A1T2 = 1, KL1 + P2(JLOOP1_A1T2,JLOOP2_A1T2) = P1(JPOS_A1T2) + JPOS_A1T2 = JPOS_A1T2 + 1 + END DO +END DO +END SUBROUTINE ARRAY_1D_TO_2D +! +END SUBROUTINE READ_LIMA_DATA_NETCDF_CASE diff --git a/src/MNH/resolved_cloud.f90 b/src/MNH/resolved_cloud.f90 index 30616e6c57314d97e5f5e032bf5f4b6e77d89c87..de986a0cd5eb891a956958436988b5cb6cc85432 100644 --- a/src/MNH/resolved_cloud.f90 +++ b/src/MNH/resolved_cloud.f90 @@ -14,7 +14,7 @@ INTERFACE PTSTEP, PZZ, PRHODJ, PRHODREF, PEXNREF, & PPABST, PTHT, PRT, PSIGS, PSIGQSAT, PMFCONV, & PTHM, PRCM, PPABSM, & - PW_ACT,PDTHRAD, PTHS, PRS, PSVT, PSVS, PSRCS, PCLDFR,& + PW_ACT,PDTHRAD, PTHS, PRS, PSVT, PSVS, PSRCS, PCLDFR, PICEFR,& PCIT, OSEDIC, OACTIT, OSEDC, OSEDI, & ORAIN, OWARM, OHHONI, OCONVHG, & PCF_MF,PRC_MF, PRI_MF, & @@ -83,6 +83,7 @@ REAL, DIMENSION(:,:,:), INTENT(OUT) :: PSRCS ! Second-order flux ! s'rc'/2Sigma_s2 at time t+1 ! multiplied by Lambda_3 REAL, DIMENSION(:,:,:), INTENT(INOUT) :: PCLDFR! Cloud fraction +REAL, DIMENSION(:,:,:), INTENT(INOUT) :: PICEFR! Cloud fraction REAL, DIMENSION(:,:,:), INTENT(INOUT) :: PCIT ! Pristine ice number ! concentration at time t LOGICAL, INTENT(IN) :: OSEDIC! Switch to activate the @@ -152,7 +153,7 @@ END MODULE MODI_RESOLVED_CLOUD PTSTEP, PZZ, PRHODJ, PRHODREF, PEXNREF, & PPABST, PTHT, PRT, PSIGS, PSIGQSAT, PMFCONV, & PTHM, PRCM, PPABSM, & - PW_ACT,PDTHRAD, PTHS, PRS, PSVT, PSVS, PSRCS, PCLDFR,& + PW_ACT,PDTHRAD, PTHS, PRS, PSVT, PSVS, PSRCS, PCLDFR,PICEFR,& PCIT, OSEDIC, OACTIT, OSEDC, OSEDI, & ORAIN, OWARM, OHHONI, OCONVHG, & PCF_MF,PRC_MF, PRI_MF, & @@ -288,11 +289,14 @@ END MODULE MODI_RESOLVED_CLOUD USE MODD_CH_AEROSOL, ONLY: LORILAM USE MODD_DUST, ONLY: LDUST use modd_cst, only: xcpd, xrd, xp00, xrholw -USE MODD_DUST , ONLY: LDUST USE MODD_IO, ONLY: TFILEDATA -USE MODD_NSV, ONLY: NSV_C1R3END, NSV_C2R2BEG, NSV_C2R2END, & - NSV_LIMA_BEG, NSV_LIMA_END, NSV_LIMA_CCN_FREE, NSV_LIMA_IFN_FREE, & - NSV_LIMA_NC, NSV_LIMA_NI, NSV_LIMA_NR +!UPG*PT +USE MODD_NSV +!USE MODD_NSV, ONLY: NSV_C1R3END, NSV_C2R2BEG, NSV_C2R2END, & +! NSV_LIMA_BEG, NSV_LIMA_END, NSV_LIMA_CCN_FREE, NSV_LIMA_IFN_FREE, & +! NSV_LIMA_NC, NSV_LIMA_NI, NSV_LIMA_NR +! NSV_LIMA_NC, NSV_LIMA_NI, NSV_LIMA_NR +!UPG*PT USE MODD_PARAM_C2R2, ONLY: LSUPSAT USE MODD_PARAMETERS, ONLY: JPHEXT, JPVEXT USE MODD_PARAM_ICE, ONLY: CSEDIM, LADJ_BEFORE, LADJ_AFTER, CFRAC_ICE_ADJUST, LRED @@ -321,6 +325,9 @@ USE MODI_RAIN_ICE USE MODI_RAIN_ICE_RED USE MODI_SHUMAN USE MODI_SLOW_TERMS +!UPG*PT +USE MODI_AER2LIMA +!UPG*PT ! IMPLICIT NONE ! @@ -382,6 +389,7 @@ REAL, DIMENSION(:,:,:), INTENT(OUT) :: PSRCS ! Second-order flux ! s'rc'/2Sigma_s2 at time t+1 ! multiplied by Lambda_3 REAL, DIMENSION(:,:,:), INTENT(INOUT) :: PCLDFR! Cloud fraction +REAL, DIMENSION(:,:,:), INTENT(INOUT) :: PICEFR! Cloud fraction REAL, DIMENSION(:,:,:), INTENT(INOUT) :: PCIT ! Pristine ice number ! concentration at time t LOGICAL, INTENT(IN) :: OSEDIC! Switch to activate the @@ -450,7 +458,8 @@ INTEGER :: IKB ! INTEGER :: IKE ! INTEGER :: IKU INTEGER :: IINFO_ll ! return code of parallel routine -INTEGER :: JK,JI,JL + +INTEGER :: JK,JI,JL,II ! ! ! @@ -467,6 +476,10 @@ REAL, DIMENSION(SIZE(PZZ,1),SIZE(PZZ,2),SIZE(PZZ,3)):: ZZZ INTEGER :: ISVBEG ! first scalar index for microphysics INTEGER :: ISVEND ! last scalar index for microphysics REAL, DIMENSION(:), ALLOCATABLE :: ZRSMIN ! Minimum value for tendencies +!UPG*PT +REAL, DIMENSION(:,:,:,:), ALLOCATABLE :: ZSVT ! scalar variable for microphysics only +!UPG*PT + LOGICAL, DIMENSION(SIZE(PZZ,1),SIZE(PZZ,2),SIZE(PZZ,3)):: LLMICRO ! mask to limit computation REAL, DIMENSION(SIZE(PZZ,1),SIZE(PZZ,2),SIZE(PZZ,3), KRR) :: ZFPR ! @@ -474,9 +487,6 @@ INTEGER :: JMOD, JMOD_IFN LOGICAL :: GWEST,GEAST,GNORTH,GSOUTH ! BVIE work array waiting for PINPRI REAL, DIMENSION(SIZE(PZZ,1),SIZE(PZZ,2)):: ZINPRI -REAL, DIMENSION(SIZE(PZZ,1),SIZE(PZZ,2),SIZE(PZZ,3)):: ZICEFR -REAL, DIMENSION(SIZE(PZZ,1),SIZE(PZZ,2),SIZE(PZZ,3)):: ZPRCFR -REAL, DIMENSION(SIZE(PZZ,1),SIZE(PZZ,2),SIZE(PZZ,3)):: ZTM ! !------------------------------------------------------------------------------ ! @@ -501,11 +511,61 @@ ELSE IF (HCLOUD == 'C3R5') THEN ISVEND = NSV_C1R3END ELSE IF (HCLOUD == 'LIMA') THEN ISVBEG = NSV_LIMA_BEG - ISVEND = NSV_LIMA_END +!UPG*PT + IF (.NOT. LDUST .AND. .NOT. LSALT .AND. .NOT. LORILAM) THEN + ISVEND = NSV_LIMA_END + ELSE + IF (LORILAM) THEN + ISVEND = NSV_AEREND + END IF + IF (LDUST) THEN + ISVEND = NSV_DSTEND + END IF + IF (LSALT) THEN + ISVEND = NSV_SLTEND + END IF + END IF ELSE ISVBEG = 0 - ISVEND = -1 + ISVEND = 0 +END IF +! +! +! +!* 1. From ORILAM to LIMA: +! +!IF (HCLOUD == 'LIMA') THEN +IF (HCLOUD == 'LIMA' .AND. ((LORILAM).OR.(LDUST).OR.(LSALT))) THEN +! ORILAM : tendance s --> variable instant t +ALLOCATE(ZSVT(SIZE(PZZ,1),SIZE(PZZ,2),SIZE(PZZ,3),NSV)) + DO II = 1, NSV + ZSVT(:,:,:,II) = PSVS(:,:,:,II) * PTSTEP / PRHODJ(:,:,:) + END DO + +CALL AER2LIMA(ZSVT(IIB:IIE,IJB:IJE,IKB:IKE,:),& + PRHODREF(IIB:IIE,IJB:IJE,IKB:IKE), & + PRT(IIB:IIE,IJB:IJE,IKB:IKE,1),& + PPABST(IIB:IIE,IJB:IJE,IKB:IKE),& + PTHT(IIB:IIE,IJB:IJE,IKB:IKE), & + PZZ(IIB:IIE,IJB:IJE,IKB:IKE)) + +! LIMA : variable instant t --> tendance s + PSVS(:,:,:,NSV_LIMA_CCN_FREE) = ZSVT(:,:,:,NSV_LIMA_CCN_FREE) * & + PRHODJ(:,:,:) / PTSTEP + PSVS(:,:,:,NSV_LIMA_CCN_FREE+1) = ZSVT(:,:,:,NSV_LIMA_CCN_FREE+1) * & + PRHODJ(:,:,:) / PTSTEP + PSVS(:,:,:,NSV_LIMA_CCN_FREE+2) = ZSVT(:,:,:,NSV_LIMA_CCN_FREE+2) * & + PRHODJ(:,:,:) / PTSTEP + + PSVS(:,:,:,NSV_LIMA_IFN_FREE) = ZSVT(:,:,:,NSV_LIMA_IFN_FREE) * & + PRHODJ(:,:,:) / PTSTEP + PSVS(:,:,:,NSV_LIMA_IFN_FREE+1) = ZSVT(:,:,:,NSV_LIMA_IFN_FREE+1) * & + PRHODJ(:,:,:) / PTSTEP + +DEALLOCATE(ZSVT) END IF + +!UPG*PT ! IF (HCLOUD(1:3)=='ICE' .AND. LRED) THEN ALLOCATE(ZRSMIN(SIZE(XRTMIN))) @@ -939,7 +999,7 @@ SELECT CASE ( HCLOUD ) PSVT(:,:,:,NSV_LIMA_BEG:NSV_LIMA_END), PW_ACT, & PTHS, PRS, PSVS(:,:,:,NSV_LIMA_BEG:NSV_LIMA_END), & PINPRC, PINDEP, PINPRR, ZINPRI, PINPRS, PINPRG, PINPRH, & - PEVAP3D, PCLDFR, ZICEFR, ZPRCFR ) + PEVAP3D, PCLDFR, PICEFR, PRAINFR ) ELSE IF (OWARM) CALL LIMA_WARM(OACTIT, OSEDC, ORAIN, KSPLITR, PTSTEP, KMI, & @@ -973,7 +1033,7 @@ SELECT CASE ( HCLOUD ) PTSTEP, PRHODJ, PPABSM, PPABST, PRHODREF, PEXNREF, PZZ, & PTHT,PRT, PSVT(:,:,:,NSV_LIMA_BEG:NSV_LIMA_END), & PTHS,PRS, PSVS(:,:,:,NSV_LIMA_BEG:NSV_LIMA_END), & - PCLDFR, PSRCS ) + PCLDFR, PICEFR, PRAINFR, PSRCS ) ELSE IF (LPTSPLIT) THEN CALL LIMA_ADJUST_SPLIT(KRR, KMI, TPFILE, CCONDENS, CLAMBDA3, & OSUBG_COND, OSIGMAS, PTSTEP, PSIGQSAT, & @@ -981,14 +1041,14 @@ SELECT CASE ( HCLOUD ) PDTHRAD, PW_ACT, & PRT, PRS, PSVT(:,:,:,NSV_LIMA_BEG:NSV_LIMA_END), & PSVS(:,:,:,NSV_LIMA_BEG:NSV_LIMA_END), & - PTHS, PSRCS, PCLDFR, PRC_MF, PCF_MF ) + PTHS, PSRCS, PCLDFR, PICEFR, PRC_MF, PRI_MF, PCF_MF ) ELSE CALL LIMA_ADJUST(KRR, KMI, TPFILE, & OSUBG_COND, PTSTEP, & PRHODREF, PRHODJ, PEXNREF, PPABST, PPABST, & PRT, PRS, PSVT(:,:,:,NSV_LIMA_BEG:NSV_LIMA_END), & PSVS(:,:,:,NSV_LIMA_BEG:NSV_LIMA_END), & - PTHS, PSRCS, PCLDFR ) + PTHS, PSRCS, PCLDFR, PICEFR, PRAINFR ) ENDIF ! END SELECT diff --git a/src/MNH/rrcolss.f90 b/src/MNH/rrcolss.f90 index 527165111ecf4d225ce5ec0117c09846d2116b9e..83249d7f1573cc471ca0bbde3ba033c3e056fa39 100644 --- a/src/MNH/rrcolss.f90 +++ b/src/MNH/rrcolss.f90 @@ -10,7 +10,7 @@ INTERFACE ! SUBROUTINE RRCOLSS( KND, PALPHAS, PNUS, PALPHAR, PNUR, & - PESR, PEXMASSR, PFALLS, PEXFALLS, PFALLR, PEXFALLR, & + PESR, PEXMASSR, PFALLS, PEXFALLS, PFALLEXPS, PFALLR, PEXFALLR, & PLBDASMAX, PLBDARMAX, PLBDASMIN, PLBDARMIN, & PDINFTY, PRRCOLSS, PAG, PBS, PAS ) ! @@ -28,6 +28,7 @@ REAL, INTENT(IN) :: PESR ! Efficiency of aggregates collecting rain REAL, INTENT(IN) :: PEXMASSR ! Mass exponent of rain REAL, INTENT(IN) :: PFALLS ! Fall speed constant of aggregates REAL, INTENT(IN) :: PEXFALLS ! Fall speed exponent of aggregates +REAL, INTENT(IN) :: PFALLEXPS ! Fall speed exponential of aggregates (Thompson 2008) REAL, INTENT(IN) :: PFALLR ! Fall speed constant of rain REAL, INTENT(IN) :: PEXFALLR ! Fall speed exponent of rain REAL, INTENT(IN) :: PLBDASMAX ! Maximun slope of size distribution of aggregates @@ -49,7 +50,7 @@ END INTERFACE END MODULE MODI_RRCOLSS ! ######################################################################## SUBROUTINE RRCOLSS( KND, PALPHAS, PNUS, PALPHAR, PNUR, & - PESR, PEXMASSR, PFALLS, PEXFALLS, PFALLR, PEXFALLR, & + PESR, PEXMASSR, PFALLS, PEXFALLS, PFALLEXPS, PFALLR, PEXFALLR, & PLBDASMAX, PLBDARMAX, PLBDASMIN, PLBDARMIN, & PDINFTY, PRRCOLSS, PAG, PBS, PAS ) ! ######################################################################## @@ -117,6 +118,7 @@ END INTERFACE !! Original 8/11/95 !! ! P. Wautelet 26/04/2019: replace non-standard FLOAT function by REAL function +! J. Wurtz 03/2022: new snow characteristics ! !------------------------------------------------------------------------------- ! @@ -151,6 +153,7 @@ REAL, INTENT(IN) :: PESR ! Efficiency of aggregates collecting rain REAL, INTENT(IN) :: PEXMASSR ! Mass exponent of rain REAL, INTENT(IN) :: PFALLS ! Fall speed constant of aggregates REAL, INTENT(IN) :: PEXFALLS ! Fall speed exponent of aggregates +REAL, INTENT(IN) :: PFALLEXPS ! Fall speed exponential of aggregates (Thompson 2008) REAL, INTENT(IN) :: PFALLR ! Fall speed constant of rain REAL, INTENT(IN) :: PEXFALLR ! Fall speed exponent of rain REAL, INTENT(IN) :: PLBDASMAX ! Maximun slope of size distribution of aggregates @@ -277,11 +280,11 @@ DO JLBDAS = 1,SIZE(PRRCOLSS(:,:),1) DO JDR = 1,INR-1 ZDR = ZDDCOLLR * REAL(JDR) ZCOLLR = ZCOLLR + (ZDS+ZDR)**2 * ZDR**PEXMASSR & - * PESR * ABS(PFALLS*ZDS**PEXFALLS-PFALLR*ZDR**PEXFALLR) & + * PESR * ABS(PFALLS*ZDS**PEXFALLS * EXP(-(PFALLEXPS*ZDS)**PALPHAS)-PFALLR*ZDR**PEXFALLR) & * GENERAL_GAMMA(PALPHAR,PNUR,ZLBDAR,ZDR) END DO ZCOLLDRMAX = (ZDS+ZDRMAX)**2 * ZDRMAX**PEXMASSR & - * PESR * ABS(PFALLS*ZDS**PEXFALLS-PFALLR*ZDRMAX**PEXFALLR) & + * PESR * ABS(PFALLS*ZDS**PEXFALLS* EXP(-(PFALLEXPS*ZDS)**PALPHAS)-PFALLR*ZDRMAX**PEXFALLR) & * GENERAL_GAMMA(PALPHAR,PNUR,ZLBDAR,ZDRMAX) ZCOLLR = (ZCOLLR + 0.5*ZCOLLDRMAX)*(ZDDCOLLR/ZDDSCALR) ! diff --git a/src/MNH/rscolrg.f90 b/src/MNH/rscolrg.f90 index caa868e91d39cbe12010bfa2c265ffe35304dba4..210df03805b8189e969d1712d411b6f7540e07d8 100644 --- a/src/MNH/rscolrg.f90 +++ b/src/MNH/rscolrg.f90 @@ -10,7 +10,7 @@ INTERFACE ! SUBROUTINE RSCOLRG( KND, PALPHAS, PZNUS, PALPHAR, PNUR, & - PESR, PEXMASSS, PFALLS, PEXFALLS, PFALLR, PEXFALLR, & + PESR, PEXMASSS, PFALLS, PEXFALLS, PFALLEXPS, PFALLR, PEXFALLR, & PLBDASMAX, PLBDARMAX, PLBDASMIN, PLBDARMIN, & PDINFTY, PRSCOLRG,PAG, PBS, PAS ) ! @@ -28,6 +28,7 @@ REAL, INTENT(IN) :: PESR ! Efficiency of the aggregates collecting rain REAL, INTENT(IN) :: PEXMASSS ! Mass exponent of the aggregates REAL, INTENT(IN) :: PFALLS ! Fall speed constant of the aggregates REAL, INTENT(IN) :: PEXFALLS ! Fall speed exponent of the aggregates +REAL, INTENT(IN) :: PFALLEXPS ! Fall speed exponential constant of the aggregates REAL, INTENT(IN) :: PFALLR ! Fall speed constant of rain REAL, INTENT(IN) :: PEXFALLR ! Fall speed exponent of rain REAL, INTENT(IN) :: PLBDASMAX ! Maximun slope of size distribution of the aggregates @@ -49,7 +50,7 @@ END INTERFACE END MODULE MODI_RSCOLRG ! ######################################################################## SUBROUTINE RSCOLRG( KND, PALPHAS, PZNUS, PALPHAR, PNUR, & - PESR, PEXMASSS, PFALLS, PEXFALLS, PFALLR, PEXFALLR, & + PESR, PEXMASSS, PFALLS, PEXFALLS, PFALLEXPS, PFALLR, PEXFALLR, & PLBDASMAX, PLBDARMAX, PLBDASMIN, PLBDARMIN, & PDINFTY, PRSCOLRG,PAG, PBS, PAS ) ! ######################################################################## @@ -117,6 +118,7 @@ END INTERFACE !! Original 8/11/95 !! ! P. Wautelet 26/04/2019: replace non-standard FLOAT function by REAL function +! J. Wurtz 03/2022: new snow characteristics ! !------------------------------------------------------------------------------- ! @@ -149,6 +151,7 @@ REAL, INTENT(IN) :: PESR ! Efficiency of the aggregates collecting rain REAL, INTENT(IN) :: PEXMASSS ! Mass exponent of the aggregates REAL, INTENT(IN) :: PFALLS ! Fall speed constant of the aggregates REAL, INTENT(IN) :: PEXFALLS ! Fall speed exponent of the aggregates +REAL, INTENT(IN) :: PFALLEXPS ! Fall speed exponential constant of the aggregates REAL, INTENT(IN) :: PFALLR ! Fall speed constant of rain REAL, INTENT(IN) :: PEXFALLR ! Fall speed exponent of rain REAL, INTENT(IN) :: PLBDASMAX ! Maximun slope of size distribution of the aggregates @@ -271,12 +274,12 @@ DO JLBDAR = 1,SIZE(PRSCOLRG(:,:),1) ZDR = ZDDCOLLR * REAL(JDR) + ZDRMIN ZCOLLR = ZCOLLR + (ZDS+ZDR)**2 & * GENERAL_GAMMA(PALPHAR,PNUR,ZLBDAR,ZDR) & - * PESR * ABS(PFALLS*ZDS**PEXFALLS-PFALLR*ZDR**PEXFALLR) + * PESR * ABS(PFALLS*ZDS**PEXFALLS*EXP(-(ZDS*PFALLEXPS)**PALPHAS)-PFALLR*ZDR**PEXFALLR) END DO IF( ZDRMIN>0.0 ) THEN ZCOLLDRMIN = (ZDS+ZDRMIN)**2 & * GENERAL_GAMMA(PALPHAR,PNUR,ZLBDAR,ZDRMIN) & - * PESR * ABS(PFALLS*ZDS**PEXFALLS-PFALLR*ZDRMIN**PEXFALLR) + * PESR * ABS(PFALLS*ZDS**PEXFALLS*EXP(-(ZDS*PFALLEXPS)**PALPHAS)-PFALLR*ZDRMIN**PEXFALLR) ELSE ZCOLLDRMIN = 0.0 END IF diff --git a/src/MNH/rzcolx.f90 b/src/MNH/rzcolx.f90 index 28658241cf1021a29de694cd5a99b85e9c3340d9..de0fc723a1598394e512fafa67b808ff469ad670 100644 --- a/src/MNH/rzcolx.f90 +++ b/src/MNH/rzcolx.f90 @@ -10,7 +10,8 @@ INTERFACE ! SUBROUTINE RZCOLX( KND, PALPHAX, PNUX, PALPHAZ, PNUZ, & - PEXZ, PEXMASSZ, PFALLX, PEXFALLX, PFALLZ, PEXFALLZ, & + PEXZ, PEXMASSZ, PFALLX, PEXFALLX, PFALLEXPX, & + PFALLZ, PEXFALLZ, PFALLEXPZ, & PLBDAXMAX, PLBDAZMAX, PLBDAXMIN, PLBDAZMIN, & PDINFTY, PRZCOLX ) ! @@ -29,8 +30,10 @@ REAL, INTENT(IN) :: PEXZ ! Efficiency of specy X collecting specy Z REAL, INTENT(IN) :: PEXMASSZ ! Mass exponent of specy Z REAL, INTENT(IN) :: PFALLX ! Fall speed constant of specy X REAL, INTENT(IN) :: PEXFALLX ! Fall speed exponent of specy X +REAL, INTENT(IN) :: PFALLEXPX ! Fall speed exponential constant of specy X REAL, INTENT(IN) :: PFALLZ ! Fall speed constant of specy Z REAL, INTENT(IN) :: PEXFALLZ ! Fall speed exponent of specy Z +REAL, INTENT(IN) :: PFALLEXPZ ! Fall speed exponential constant of specy Z REAL, INTENT(IN) :: PLBDAXMAX ! Maximun slope of size distribution of specy X REAL, INTENT(IN) :: PLBDAZMAX ! Maximun slope of size distribution of specy Z REAL, INTENT(IN) :: PLBDAXMIN ! Minimun slope of size distribution of specy X @@ -49,7 +52,8 @@ END INTERFACE END MODULE MODI_RZCOLX ! ######################################################################## SUBROUTINE RZCOLX( KND, PALPHAX, PNUX, PALPHAZ, PNUZ, & - PEXZ, PEXMASSZ, PFALLX, PEXFALLX, PFALLZ, PEXFALLZ, & + PEXZ, PEXMASSZ, PFALLX, PEXFALLX, PFALLEXPX, & + PFALLZ, PEXFALLZ, PFALLEXPZ, & PLBDAXMAX, PLBDAZMAX, PLBDAXMIN, PLBDAZMIN, & PDINFTY, PRZCOLX ) ! ######################################################################## @@ -121,6 +125,7 @@ END INTERFACE !! Original 8/11/95 !! ! P. Wautelet 26/04/2019: replace non-standard FLOAT function by REAL function +! J. Wurtz 03/2022: new snow characteristics ! !------------------------------------------------------------------------------- ! @@ -152,8 +157,10 @@ REAL, INTENT(IN) :: PEXZ ! Efficiency of specy X collecting specy Z REAL, INTENT(IN) :: PEXMASSZ ! Mass exponent of specy Z REAL, INTENT(IN) :: PFALLX ! Fall speed constant of specy X REAL, INTENT(IN) :: PEXFALLX ! Fall speed exponent of specy X +REAL, INTENT(IN) :: PFALLEXPX ! Fall speed exponential constant of specy X REAL, INTENT(IN) :: PFALLZ ! Fall speed constant of specy Z REAL, INTENT(IN) :: PEXFALLZ ! Fall speed exponent of specy Z +REAL, INTENT(IN) :: PFALLEXPZ ! Fall speed exponential constant of specy Z REAL, INTENT(IN) :: PLBDAXMAX ! Maximun slope of size distribution of specy X REAL, INTENT(IN) :: PLBDAZMAX ! Maximun slope of size distribution of specy Z REAL, INTENT(IN) :: PLBDAXMIN ! Minimun slope of size distribution of specy X @@ -234,20 +241,20 @@ DO JLBDAX = 1,SIZE(PRZCOLX(:,:),1) ZSCALZ = 0.0 ZCOLLZ = 0.0 DO JDZ = 1,KND-1 - ZDZ = ZDDZ * REAL(JDZ) + ZDZ = ZDDZ * REAL(JDZ) ! !* 1.6 Compute the normalization factor by integration over the ! dimensional spectrum of specy Z ! - ZFUNC = (ZDX+ZDZ)**2 * ZDZ**PEXMASSZ & - * GENERAL_GAMMA(PALPHAZ,PNUZ,ZLBDAZ,ZDZ) - ZSCALZ = ZSCALZ + ZFUNC + ZFUNC = (ZDX+ZDZ)**2 * ZDZ**PEXMASSZ & + * GENERAL_GAMMA(PALPHAZ,PNUZ,ZLBDAZ,ZDZ) + ZSCALZ = ZSCALZ + ZFUNC ! !* 1.7 Compute the scaled fall speed difference by integration over ! the dimensional spectrum of specy Z ! - ZCOLLZ = ZCOLLZ + ZFUNC & - * PEXZ * ABS(PFALLX*ZDX**PEXFALLX-PFALLZ*ZDZ**PEXFALLZ) + ZCOLLZ = ZCOLLZ + ZFUNC * PEXZ * ABS( PFALLX*ZDX**PEXFALLX * EXP(-(ZDX*PFALLEXPX)**PALPHAX) & + - PFALLZ*ZDZ**PEXFALLZ * EXP(-(ZDZ*PFALLEXPZ)**PALPHAZ)) END DO ! !* 1.8 Compute the normalization factor by integration over the diff --git a/src/MNH/saltcamsn.f90 b/src/MNH/saltcamsn.f90 new file mode 100644 index 0000000000000000000000000000000000000000..1747bddc7934c3ada4267f7df353af05de3ab6e1 --- /dev/null +++ b/src/MNH/saltcamsn.f90 @@ -0,0 +1,281 @@ +!----------------------------------------------------------------- +!--------------- special set of characters for RCS information +!----------------------------------------------------------------- +! $Source: /home/cvsroot/MNH-VX-Y-Z/src/MNH/saltlfin.f90,v $ $Revision: 1.1.2.2.2.1.2.1 $ +! MASDEV4_7 newsrc 2007/01/25 13:13:15 +!----------------------------------------------------------------- +! ######################## + MODULE MODI_SALTCAMS_n +! ######################## +! +INTERFACE +! +SUBROUTINE SALTCAMS_n(PSV,PMASSCAMS,PRHODREF) +IMPLICIT NONE +REAL, DIMENSION(:,:,:,:),INTENT(INOUT) :: PSV +REAL, DIMENSION(:,:,:,:),INTENT(IN) :: PMASSCAMS +REAL, DIMENSION(:,:,:),INTENT(IN) :: PRHODREF +END SUBROUTINE SALTCAMS_n +! +END INTERFACE +! +END MODULE MODI_SALTCAMS_n +! +! +! ############################################################ + SUBROUTINE SALTCAMS_n(PSV, PMASSCAMS, PRHODREF) +! ############################################################ +! +!! PURPOSE +!! ------- +!! Initialise le champs de salts à partir des analyses CAMS +!! +!! REFERENCE +!! --------- +!! none +!! +!! AUTHOR +!! ------ +!! Pierre TULET (LACy) +!! +!! MODIFICATIONS +!! ------------- +!! none +!! +!! EXTERNAL +!! -------- +!! None +!! +!------------------------------------------------------------------------------- +! +!* 0. DECLARATIONS +! ------------ +! +USE MODD_SALT +USE MODD_NSV +USE MODD_CSTS_SALT +USE MODE_SALT_PSD +USE MODI_INIT_SALT +! +IMPLICIT NONE +! +!* 0.1 declarations of arguments +! +REAL, DIMENSION(:,:,:,:), INTENT(INOUT) :: PSV +REAL, DIMENSION(:,:,:,:),INTENT(IN) :: PMASSCAMS ! macc salt concentration (kg.kg-1) +REAL, DIMENSION(:,:,:),INTENT(IN) :: PRHODREF +! +! +!* 0.2 declarations local variables +! +REAL :: ZDEN2MOL, ZRHOI, ZMI, ZFAC, ZRGMIN +REAL,DIMENSION(:,:,:,:), ALLOCATABLE :: ZCTOTA +REAL,DIMENSION(:,:,:,:), ALLOCATABLE :: ZM +REAL,DIMENSION(:,:,:), ALLOCATABLE :: ZSIGMA +REAL,DIMENSION(:,:,:,:), ALLOCATABLE :: ZMASS +INTEGER,DIMENSION(:), ALLOCATABLE :: IM0, IM3, IM6 +REAL,DIMENSION(:), ALLOCATABLE :: ZMMIN +REAL,DIMENSION(:), ALLOCATABLE :: ZINIRADIUS, ZINISIGMA +INTEGER :: IKU, IMOMENTS +INTEGER :: JJ, JN, JK ! loop counter +INTEGER :: IMODEIDX ! index mode +REAL :: ZRHOMIN + +REAL :: DELTA_1,DELTA_2,DELTA_3,DELTA_4,DELTA_5,DELTA_6,DELTA_7 +REAL :: RATIO_1,RATIO_2,RATIO_3,RATIO_4,RATIO_5, RATIO_6,RATIO_7 +REAL :: DELTA_CAMS_1,DELTA_CAMS_2,DELTA_CAMS_3 +REAL :: RAY_CAMS_1,RAY_CAMS_2,RAY_CAMS_3,RAY_CAMS_4 +REAL :: RAY_2,RAY_3,RAY_4 +REAL,DIMENSION(:,:,:,:), ALLOCATABLE :: ZMASS_TEST +! +!------------------------------------------------------------------------------- +! +!* 1. TRANSFER FROM GAS TO AEROSOL MODULE +! ----------------------------------- +! +! 1.1 initialisation +! +CALL INIT_SALT +IKU = SIZE(PSV,3) +ZRHOMIN=MINVAL(PRHODREF) +! +ALLOCATE (IM0(NMODE_SLT)) +ALLOCATE (IM3(NMODE_SLT)) +ALLOCATE (IM6(NMODE_SLT)) +ALLOCATE (ZCTOTA(SIZE(PSV,1), SIZE(PSV,2), SIZE(PSV,3), NMODE_SLT)) +ALLOCATE (ZM(SIZE(PSV,1), SIZE(PSV,2), SIZE(PSV,3), NMODE_SLT*3)) +ALLOCATE (ZSIGMA(SIZE(PSV,1), SIZE(PSV,2), SIZE(PSV,3))) +ALLOCATE (ZINIRADIUS(NMODE_SLT)) +ALLOCATE (ZINISIGMA(NMODE_SLT)) +ALLOCATE (ZMMIN(NMODE_SLT*3)) +ALLOCATE (ZMASS(SIZE(PSV,1), SIZE(PSV,2), SIZE(PSV,3),NMODE_SLT)) +! +! Rayons des bins CAMS + +RAY_CAMS_1 = 0.03 +RAY_CAMS_2 = 0.5 +RAY_CAMS_3 = 5 +RAY_CAMS_4 = 20 + +! Choix des diametres de separation (selon Ovadnevaite et al., 2014) + +RAY_2 = 0.045 +RAY_3 = 0.11 +RAY_4 = 0.41 + +! Calcul des proportions + +! Calcul des écarts bin CAMS + +DELTA_CAMS_1 = RAY_CAMS_2 - RAY_CAMS_1 +DELTA_CAMS_2 = RAY_CAMS_3 - RAY_CAMS_2 +DELTA_CAMS_3 = RAY_CAMS_4 - RAY_CAMS_3 + +! Calcul des ecarts par mode en fonction des rayons de separation +! puis calcul de la masse correspondante avec facteur correctif pour eviter +! la surestimation des concentrations en aerosols + +DELTA_1 = RAY_2 - RAY_CAMS_1 +RATIO_1 = DELTA_1 / DELTA_CAMS_1 +ZMASS(:,:,:,2) = PMASSCAMS(:,:,:,1) * RATIO_1 ! * 1E-2 ! Attribution Mode 2 ORILAM + +DELTA_2 = RAY_3 - RAY_2 +RATIO_2 = DELTA_2 / DELTA_CAMS_1 +ZMASS(:,:,:,3) = PMASSCAMS(:,:,:,1) * RATIO_2 ! * 1E-2 ! Attribution Mode 3 ORILAM + +DELTA_3 = RAY_4 - RAY_3 +RATIO_3 = DELTA_3 / DELTA_CAMS_1 +ZMASS(:,:,:,4) = PMASSCAMS(:,:,:,1) * RATIO_3 ! * 1E-1 ! Attribution Mode 4 ORILAM + +DELTA_4 = RAY_CAMS_2 - RAY_4 +RATIO_4 = DELTA_4 / DELTA_CAMS_1 +ZMASS(:,:,:,5) = PMASSCAMS(:,:,:,1) * RATIO_4 ! Attribution Mode 5 ORILAM + +DELTA_5 = RAY_CAMS_3 - RAY_CAMS_2 +RATIO_5 = DELTA_5 / DELTA_CAMS_2 +ZMASS(:,:,:,5) = (PMASSCAMS(:,:,:,2) * RATIO_5) + ZMASS(:,:,:,5) ! Attribution Mode 5 bis ORILAM + +DELTA_6 = 10 - RAY_CAMS_3 +RATIO_6 = DELTA_3 / DELTA_CAMS_1 +ZMASS(:,:,:,5) = (PMASSCAMS(:,:,:,3) * RATIO_6) + ZMASS(:,:,:,5) ! Attribution Mode 5 ter ORILAM + +ZMASS(:,:,:,5) = ZMASS(:,:,:,5) * 1E-1 + +! Hyp : the ultrafine mode is neglected for orilam-lima coupling +ZMASS(:,:,:,1) = PMASSCAMS(:,:,:,1) * 1E-5 ! ultrafin mode +! +!======================================================== +! Adjust the mass / SSA emissions after a few hours +ZMASS(:,:,:,1) = ZMASS(:,:,:,1) * 1. +ZMASS(:,:,:,2) = ZMASS(:,:,:,2) * 1. +ZMASS(:,:,:,3) = ZMASS(:,:,:,3) * 1. +ZMASS(:,:,:,4) = ZMASS(:,:,:,4) * 1. +ZMASS(:,:,:,5) = ZMASS(:,:,:,5) * 1. +!======================================================== + +DO JN = 1, NMODE_SLT + IM0(JN) = 1 + (JN - 1) * 3 + IM3(JN) = 2 + (JN - 1) * 3 + IM6(JN) = 3 + (JN - 1) * 3 + ! + !Get the salt mode we are talking about, MODE 2 is treated first, then mode 3, then 1 + !This index is only needed to get the right radius out of the XINIRADIUS array and the + !right XINISIG out of the XINISIG-array + IMODEIDX = JPSALTORDER(JN) + ! + !Convert initial mass median radius to number median radius + IF (CRGUNITS=="MASS") THEN + ZINIRADIUS(JN) = XINIRADIUS_SLT(IMODEIDX) * EXP(-3.*(LOG(XINISIG_SLT(IMODEIDX)))**2) + ELSE + ZINIRADIUS(JN) = XINIRADIUS_SLT(IMODEIDX) + END IF + ZINISIGMA(JN) = XINISIG_SLT(IMODEIDX) + ! + ZMMIN(IM0(JN)) = XN0MIN_SLT(IMODEIDX) + ZRGMIN = ZINIRADIUS(JN) + ZMMIN(IM3(JN)) = XN0MIN_SLT(IMODEIDX) * (ZRGMIN**3)*EXP(4.5 * LOG(ZINISIGMA(JN))**2) + ZMMIN(IM6(JN)) = XN0MIN_SLT(IMODEIDX) * (ZRGMIN**6)*EXP(18. * LOG(ZINISIGMA(JN))**2) + +END DO + +ZMASS(:,:,:,:) = MAX(ZMASS(:,:,:,:), 1E-40) +! +! +ZRHOI = XDENSITY_SALT +ZMI = XMOLARWEIGHT_SALT +ZDEN2MOL = 1E-6 * XAVOGADRO / XMD +ZFAC = (4. / 3.) * XPI * ZRHOI * 1.e-9 + +! +DO JN = 1, NMODE_SLT + +!* 1.1 calculate moment 0 from ZMASS +! + ZM(:,:,:,IM0(JN)) = ZMASS(:,:,:,JPSALTORDER(JN)) &![kg_{salt}/kg_{air} + / XDENSITY_SALT &![kg__{salt}/m3_{salt}==>m3_{salt}/m3{air} + * (6.d0 / XPI) & + / (2.d0 * ZINIRADIUS(JN) * 1.d-6)**3 &![particle/m_salt^{-3}]==> particle/m3 + * EXP(-4.5*(LOG(ZINISIGMA(JN)))**2) !Take into account distribution + + ZM(:,:,:,IM0(JN)) = MAX(ZMMIN(IM0(JN)), ZM(:,:,:,IM0(JN))) +! +!* 1.2 calculate moment 3 from m0, RG and SIG +! + ZM(:,:,:,IM3(JN)) = ZM(:,:,:,IM0(JN)) * & + (ZINIRADIUS(JN)**3) * & + EXP(4.5*LOG(ZINISIGMA(JN))**2) + + ZM(:,:,:,IM3(JN)) = MAX(ZMMIN(IM3(JN)), ZM(:,:,:,IM3(JN))) +! +!* 1.3 calculate moment 6 from m0, RG and SIG +! + ZM(:,:,:,IM6(JN))= ZM(:,:,:,IM0(JN)) * ((ZINIRADIUS(JN)**6)*& + EXP(18. * (LOG(ZINISIGMA(JN)))**2)) + ZM(:,:,:,IM6(JN)) = MAX(ZMMIN(IM6(JN)), ZM(:,:,:,IM6(JN))) +! +!* 1.4 output concentration (in ppv) +! + IMOMENTS = INT(NSV_SLTEND - NSV_SLTBEG+1) / NMODE_SLT + IF (IMOMENTS == 3) THEN + PSV(:,:,:,1+(JN-1)*3) = ZM(:,:,:,IM0(JN)) * XMD / (XAVOGADRO*PRHODREF(:,:,:)) + XSVMIN(NSV_SLTBEG-1+1+(JN-1)*3) = ZMMIN(IM0(JN)) * XMD / (XAVOGADRO*ZRHOMIN) + + PSV(:,:,:,2+(JN-1)*3) = ZM(:,:,:,IM3(JN)) * XMD * XPI * 4. / 3. * ZRHOI / & + (ZMI*XM3TOUM3_SALT*PRHODREF(:,:,:)) + XSVMIN(NSV_SLTBEG-1+2+(JN-1)*3) = ZMMIN(IM3(JN)) * XMD * XPI * 4. / 3. * ZRHOI / & + (ZMI*XM3TOUM3_SALT**ZRHOMIN) + + PSV(:,:,:,3+(JN-1)*3) = ZM(:,:,:,IM6(JN)) * XMD / (XAVOGADRO*1.d-6*PRHODREF(:,:,:)) + XSVMIN(NSV_SLTBEG-1+3+(JN-1)*3) = ZMMIN(IM6(JN)) * XMD / (XAVOGADRO*1.d-6* ZRHOMIN) + ELSE IF (IMOMENTS == 2) THEN + PSV(:,:,:,1+(JN-1)*2) = ZM(:,:,:,IM0(JN)) * XMD / (XAVOGADRO*PRHODREF(:,:,:)) + XSVMIN(NSV_SLTBEG-1+1+(JN-1)*2) = ZMMIN(IM0(JN)) * XMD / (XAVOGADRO*ZRHOMIN) + + PSV(:,:,:,2+(JN-1)*2) = ZM(:,:,:,IM3(JN)) * XMD * XPI * 4./3. * ZRHOI / & + (ZMI*XM3TOUM3_SALT*PRHODREF(:,:,:)) + XSVMIN(NSV_SLTBEG-1+2+(JN-1)*2) = ZMMIN(IM3(JN)) * XMD * XPI * 4. / 3. * ZRHOI / & + (ZMI*XM3TOUM3_SALT**ZRHOMIN) + + ELSE + PSV(:,:,:,JN) = ZM(:,:,:,IM3(JN)) * XMD * XPI * 4. / 3. * ZRHOI / & + (ZMI * XM3TOUM3_SALT*PRHODREF(:,:,:)) + XSVMIN(NSV_SLTBEG-1+JN) = ZMMIN(IM3(JN)) * XMD * XPI * 4. / 3. * ZRHOI / & + (ZMI*XM3TOUM3_SALT**ZRHOMIN) + + END IF +END DO + +! +DEALLOCATE(ZMMIN) +DEALLOCATE(ZINISIGMA) +DEALLOCATE(ZINIRADIUS) +DEALLOCATE(ZSIGMA) +DEALLOCATE(ZM) +DEALLOCATE(ZCTOTA) +DEALLOCATE(IM6) +DEALLOCATE(IM3) +DEALLOCATE(IM0) +DEALLOCATE(ZMASS) +! +! +END SUBROUTINE SALTCAMS_n diff --git a/src/MNH/saltlfin.f90 b/src/MNH/saltlfin.f90 index e99be7c7ae28aaa87a751dbbee645ab9dbde10f6..76b538358b85158743e6685b299e1a14a465b505 100644 --- a/src/MNH/saltlfin.f90 +++ b/src/MNH/saltlfin.f90 @@ -48,9 +48,9 @@ END MODULE MODI_SALTLFI_n !! !! MODIFICATIONS !! ------------- +!! none +!! !! 2014 P.Tulet modif calcul ZM -!! Bielli S. 02/2019 Sea salt : significant sea wave height influences salt emission; 5 salt modes - !! EXTERNAL !! -------- !! None @@ -101,7 +101,7 @@ INTEGER :: IMOMENTS !-Marine INTEGER :: JI, JJ, JN, JK ! loop counter INTEGER :: IMODEIDX ! index mode -REAL, PARAMETER :: ZN_SALT=1E4 ! multiplcative factor for X0MIN +REAL, PARAMETER :: ZN_SALT=0.1 ! particles of sea salt/cm3 {air} REAL, PARAMETER :: ZCLM=800. ! Marine Salt layer (m) REAL :: ZN_SALTN ! @@ -160,14 +160,12 @@ DO JN = 1, NMODE_SLT ZINISIGMA(JN) = XINISIG_SLT(IMODEIDX) ! ZMMIN(IM0(JN)) = XN0MIN_SLT(IMODEIDX) -! ZRGMIN = XCOEFRADMIN * ZINIRADIUS(JN) ZRGMIN = ZINIRADIUS(JN) ZMMIN(IM3(JN)) = XN0MIN_SLT(IMODEIDX) * (ZRGMIN**3)*EXP(4.5 * LOG(ZINISIGMA(JN))**2) ZMMIN(IM6(JN)) = XN0MIN_SLT(IMODEIDX) * (ZRGMIN**6)*EXP(18. * LOG(ZINISIGMA(JN))**2) ENDDO ! ! -!XDENSITY_SALT est fixé dans modd_csts_salt.f90 ZRHOI = XDENSITY_SALT ZMI = XMOLARWEIGHT_SALT ZDEN2MOL = 1E-6 * XAVOGADRO / XMD @@ -182,18 +180,19 @@ DO JN=1,NMODE_SLT !+Marine : (reprendre XN0MIN_SLT de modd_salt.f90). ! Pas plus simple de fixer une dimension à ZN_SALT qui dépend de JN pour ne pas ! avoir à rappeler le schéma d'émission? - IF(NMODE_SLT == 5)THEN - IF (JN == 1) ZN_SALTN = XN0MIN_SLT(JPSALTORDER(JN)) * ZN_SALT - IF (JN == 2) ZN_SALTN = XN0MIN_SLT(JPSALTORDER(JN)) * ZN_SALT - IF (JN == 3) ZN_SALTN = XN0MIN_SLT(JPSALTORDER(JN)) * ZN_SALT - IF (JN == 4) ZN_SALTN = XN0MIN_SLT(JPSALTORDER(JN)) * ZN_SALT - IF (JN == 5) ZN_SALTN = XN0MIN_SLT(JPSALTORDER(JN)) * ZN_SALT - ELSE - IF (JN == 1) ZN_SALTN = XN0MIN_SLT(JPSALTORDER(JN)) * ZN_SALT - IF (JN == 2) ZN_SALTN = XN0MIN_SLT(JPSALTORDER(JN)) * ZN_SALT - IF (JN == 3) ZN_SALTN = XN0MIN_SLT(JPSALTORDER(JN)) * ZN_SALT - END IF + + IF (JN == 1) ZN_SALTN = XN0MIN_SLT(JPSALTORDER(JN)) * ZN_SALT *1E6 + IF (JN == 2) ZN_SALTN = XN0MIN_SLT(JPSALTORDER(JN)) * ZN_SALT *1E6 + IF (JN == 3) ZN_SALTN = XN0MIN_SLT(JPSALTORDER(JN)) * ZN_SALT *1E6 + IF (JN == 4) ZN_SALTN = XN0MIN_SLT(JPSALTORDER(JN)) * ZN_SALT *1E6 + IF (JN == 5) ZN_SALTN = XN0MIN_SLT(JPSALTORDER(JN)) * ZN_SALT *1E6 + IF (JN == 6) ZN_SALTN = XN0MIN_SLT(JPSALTORDER(JN)) * ZN_SALT *1E6 + IF (JN == 7) ZN_SALTN = XN0MIN_SLT(JPSALTORDER(JN)) * ZN_SALT *1E6 + IF (JN == 8) ZN_SALTN = XN0MIN_SLT(JPSALTORDER(JN)) * ZN_SALT *1E6 + + !-Marine + DO JK=1, SIZE(PSV,3) DO JJ=1, SIZE(PSV,2) DO JI=1, SIZE(PSV,1) diff --git a/src/MNH/set_mask.f90 b/src/MNH/set_mask.f90 index 36300b07e7020d88a8a605c4812d5416d1ad93f9..b4077f482973eae9d4a477d9cb2d91f89aef9411 100644 --- a/src/MNH/set_mask.f90 +++ b/src/MNH/set_mask.f90 @@ -1,8 +1,13 @@ -!MNH_LIC Copyright 1995-2021 CNRS, Meteo-France and Universite Paul Sabatier +!MNH_LIC Copyright 1994-2014 CNRS, Meteo-France and Universite Paul Sabatier !MNH_LIC This is part of the Meso-NH software governed by the CeCILL-C licence -!MNH_LIC version 1. See LICENSE, CeCILL-C_V1-en.txt and CeCILL-C_V1-fr.txt +!MNH_LIC version 1. See LICENSE, CeCILL-C_V1-en.txt and CeCILL-C_V1-fr.txt !MNH_LIC for details. version 1. !----------------------------------------------------------------- +!--------------- special set of characters for RCS information +!----------------------------------------------------------------- +! $Source: /home/cvsroot/MNH-VX-Y-Z/src/MNH/set_mask.f90,v $ $Revision: 1.2.2.1.2.1.18.2 $ +! MASDEV4_7 budget 2006/09/08 10:35:15 +!----------------------------------------------------------------- ! ################### SUBROUTINE SET_MASK ! ################### @@ -21,7 +26,7 @@ !! According to each criterion associated to one zone, the mask is !! set to TRUE at each point where the criterion is confirmed, at each !! time step of the model. Finally, The number of occurence of this criteria is -!! increased by 1 and stored in the array NBUSURF. +!! increased by 1 and stored in the array XBUSURF. !! Caution : The mask is defined on the inner domain. !! !! @@ -34,7 +39,7 @@ !! Module MODD_BUDGET !! LBU_MASK : logical array mask defining the zones !! NBUTIME : number of the budget step -!! NBUSURF : mask tracer array (surface array) +!! XBUSURF : mask tracer array (surface array) !! !! REFERENCE !! --------- @@ -60,8 +65,13 @@ ! USE MODD_BUDGET USE MODE_ll -USE MODD_FIELD_n , ONLY : XWT , XRT +USE MODD_FIELD_n, ONLY : XWT, XRT ! +USE MODD_PRECIP_n, ONLY : XINPRR +USE MODD_PARAMETERS, ONLY : JPHEXT, JPVEXT +USE MODD_REF_n, ONLY : XRHODREF +USE MODD_GRID_n, ONLY : XZZ +USE MODD_CST, ONLY : XRHOLW ! IMPLICIT NONE ! @@ -72,6 +82,15 @@ INTEGER :: IIB,IJB ! Lower bounds of the physical ! sub-domain in x and y directions INTEGER :: IIE,IJE ! Upper bounds of the physical ! sub-domain in x and y directions +! +INTEGER :: IKB, IKE +INTEGER :: IIU, IJU ! Array sizes in i,j directions +! +REAL, DIMENSION(:,:), ALLOCATABLE :: ZTHIC, ZTHRW, ZTHCW, ZTHSN, ZTHGR +REAL, DIMENSION(:,:), ALLOCATABLE :: ZTH_LIQ, ZTH_ICE +REAL, DIMENSION(:,:), ALLOCATABLE :: ZDUM +INTEGER :: JK ! loop index +! !------------------------------------------------------------------------------- ! !* 1. COMPUTES THE PHYSICAL SUBDOMAIN BOUNDS @@ -88,12 +107,65 @@ LBU_MASK(:,:,:)=.FALSE. !============================================================================== ! Change the following lines to set the criterion for each of the NBUMASK masks ! -! 1st mask on vertical velocity at level k=10 -LBU_MASK(IIB:IIE,IJB:IJE,1)=XWT(IIB:IIE,IJB:IJE,10)>0. -! -!2rd mask on rain mixing ratio at level k=2 -IF (NBUMASK>=2) & - LBU_MASK(IIB:IIE,IJB:IJE,2)=XRT(IIB:IIE,IJB:IJE,2,3)>1.E-8 +IKB = 1 + JPVEXT +IKE = SIZE(XRHODREF,3) - JPVEXT +IIU = IIE + JPHEXT +IJU = IJE + JPHEXT +! +ALLOCATE(ZTHIC(IIU,IJU)) ; ZTHIC(:,:) = 0.0 +ALLOCATE(ZTHRW(IIU,IJU)) ; ZTHRW(:,:) = 0.0 +ALLOCATE(ZTHCW(IIU,IJU)) ; ZTHCW(:,:) = 0.0 +ALLOCATE(ZTHSN(IIU,IJU)) ; ZTHSN(:,:) = 0.0 +ALLOCATE(ZTHGR(IIU,IJU)) ; ZTHGR(:,:) = 0.0 +ALLOCATE(ZDUM(IIU,IJU)) ; ZDUM(:,:) = 0.0 +! +DO JK = IKB, IKE + ZDUM(:,:) = XRHODREF(:,:,JK) * (XZZ(:,:,JK+1) - XZZ(:,:,JK)) / XRHOLW + ZTHIC(:,:) = ZTHIC(:,:) + XRT(:,:,JK,4) * ZDUM(:,:) + ZTHRW(:,:) = ZTHRW(:,:) + XRT(:,:,JK,3) * ZDUM(:,:) + ZTHCW(:,:) = ZTHCW(:,:) + XRT(:,:,JK,2) * ZDUM(:,:) + ZTHSN(:,:) = ZTHSN(:,:) + XRT(:,:,JK,5) * ZDUM(:,:) + ZTHGR(:,:) = ZTHGR(:,:) + XRT(:,:,JK,6) * ZDUM(:,:) +END DO +! +! m --> mm +ZTHIC(:,:) = ZTHIC(:,:) * 1000. +ZTHRW(:,:) = ZTHRW(:,:) * 1000. +ZTHCW(:,:) = ZTHCW(:,:) * 1000. +ZTHSN(:,:) = ZTHSN(:,:) * 1000. +ZTHGR(:,:) = ZTHGR(:,:) * 1000. +! +ALLOCATE(ZTH_LIQ(IIU,IJU)) ; ZTH_LIQ(:,:) = 0.0 +ALLOCATE(ZTH_ICE(IIU,IJU)) ; ZTH_ICE(:,:) = 0.0 +! +ZTH_LIQ(:,:) = ZTHCW(:,:) + ZTHRW(:,:) +ZTH_ICE(:,:) = ZTHIC(:,:) + ZTHSN(:,:) + ZTHGR(:,:) +!print*, nbutime, ' - min-max inprr = ', minval(xinprr*3600.), maxval(xinprr*3600.) +!print*, nbutime, ' - min-max zth_liq = ', minval(zth_liq), maxval(zth_liq) +!print*, nbutime, ' - min-max zth_ice = ', minval(zth_ice), maxval(zth_ice) +! +LBU_MASK(IIB:IIE,IJB:IJE,1) = (XINPRR(IIB:IIE,IJB:IJE)*3.6E6) >= 5. +!LBU_MASK(IIB:IIE,IJB:IJE,2) = .NOT.(LBU_MASK(IIB:IIE,IJB:IJE,1)) .AND. & +! (XINPRR(IIB:IIE,IJB:IJE)*3.6E6) >= 0.5 .AND. & +! ZTH_LIQ(IIB:IIE,IJB:IJE) >= 0.01 .AND. & +! ZTH_ICE(IIB:IIE,IJB:IJE) >= 0.1 +LBU_MASK(IIB:IIE,IJB:IJE,2) = .NOT.(LBU_MASK(IIB:IIE,IJB:IJE,1)) .AND. & + ((XINPRR(IIB:IIE,IJB:IJE)*3.6E6) >= 0.5 .OR. & + ZTH_LIQ(IIB:IIE,IJB:IJE) >= 0.01 .AND. & + ZTH_ICE(IIB:IIE,IJB:IJE) >= 0.1) +LBU_MASK(IIB:IIE,IJB:IJE,3) = .NOT.(LBU_MASK(IIB:IIE,IJB:IJE,1)) .AND. & + .NOT.(LBU_MASK(IIB:IIE,IJB:IJE,2)) .AND. & + ZTH_LIQ(IIB:IIE,IJB:IJE) < 0.01 .AND. & + ZTH_ICE(IIB:IIE,IJB:IJE) >= 0.01 +! +DEALLOCATE(ZTHIC) +DEALLOCATE(ZTHRW) +DEALLOCATE(ZTHCW) +DEALLOCATE(ZTHSN) +DEALLOCATE(ZTHGR) +DEALLOCATE(ZTH_LIQ) +DEALLOCATE(ZTH_ICE) +DEALLOCATE(ZDUM) ! !============================================================================== ! @@ -101,7 +173,7 @@ IF (NBUMASK>=2) & ! ------------------------- ! WHERE (LBU_MASK(:,:,:)) - NBUSURF(:,:,:,NBUTIME) = NBUSURF(:,:,:,NBUTIME) + 1 + NBUSURF(:,:,:,NBUTIME)=NBUSURF(:,:,:,NBUTIME)+1 END WHERE ! !------------------------------------------------------------------------------- diff --git a/src/MNH/ver_prep_netcdf_case.f90 b/src/MNH/ver_prep_netcdf_case.f90 index c17a1c963ebd775319412d8f7a485a27625b09d4..9cc6fab5852d49e1b9a290b3fcc19bd5b9269716 100644 --- a/src/MNH/ver_prep_netcdf_case.f90 +++ b/src/MNH/ver_prep_netcdf_case.f90 @@ -7,15 +7,16 @@ MODULE MODI_VER_PREP_NETCDF_CASE ! ################################ INTERFACE - SUBROUTINE VER_PREP_NETCDF_CASE(PDIAG) + SUBROUTINE VER_PREP_NETCDF_CASE(PDIAG, PSV_LS) ! -REAL, INTENT(OUT) :: PDIAG ! diagnostics computing time +REAL, INTENT(OUT) :: PDIAG ! diagnostics computing time +REAL, DIMENSION(:,:,:,:), INTENT(INOUT) :: PSV_LS ! sv var. ! END SUBROUTINE VER_PREP_NETCDF_CASE END INTERFACE END MODULE MODI_VER_PREP_NETCDF_CASE ! #################################################################### - SUBROUTINE VER_PREP_NETCDF_CASE(PDIAG) + SUBROUTINE VER_PREP_NETCDF_CASE(PDIAG, PSV_LS) ! #################################################################### ! !!**** *VER_PREP_NETCDF_CASE* - monitors the preparation to orographic change @@ -85,6 +86,8 @@ END MODULE MODI_VER_PREP_NETCDF_CASE !! Oct 2017 (J.Escobar) minor, missing USE MODI_SECOND_MNH !! Philippe Wautelet: 05/2016-04/2018: new data structures and calls for I/O !! Mars 2019 (Q. Rodier): missing SECOND_MNH(ZTIME1) +!! Fevruary 2021 (M. Leriche) : XSV_LS in argument to avoid +!! duplicate the routine !------------------------------------------------------------------------------- ! !* 0. DECLARATIONS @@ -112,7 +115,8 @@ IMPLICIT NONE !* 0.1 Declaration of arguments ! ------------------------ ! -REAL, INTENT(OUT) :: PDIAG ! diagnostics computing time +REAL, INTENT(OUT) :: PDIAG ! diagnostics computing time +REAL, DIMENSION(:,:,:,:), INTENT(INOUT) :: PSV_LS ! sv var. ! !* 0.2 Declaration of local variables ! ------------------------------ @@ -167,7 +171,7 @@ CALL SECOND_MNH(ZTIME1) ! vertical interpolation programs with all ILU physical points ! ALLOCATE(ZZMASS_LS(IIU,IJU,ILU+2*JPVEXT)) -ALLOCATE(ZSV_LS(IIU,IJU,ILU+2*JPVEXT,SIZE(XSV_LS,4))) +ALLOCATE(ZSV_LS(IIU,IJU,ILU+2*JPVEXT,SIZE(PSV_LS,4))) ! ZZMASS_LS (:,:,JPVEXT+1:JPVEXT+ILU) = XZMASS_SV_LS(:,:,:) DO JK=1,JPVEXT @@ -178,8 +182,8 @@ END DO !ZSV_LS = XUNDEF ZSV_LS = -999. ! -DO JSV=1,SIZE(XSV_LS,4) - ZSV_LS (:,:,JPVEXT+1:JPVEXT+ILU,JSV) = XSV_LS (:,:,:,JSV) +DO JSV=1,SIZE(PSV_LS,4) + ZSV_LS (:,:,JPVEXT+1:JPVEXT+ILU,JSV) = PSV_LS (:,:,:,JSV) END DO ! CALL VER_INTERP_TO_MIXED_GRID('CHEM',.TRUE.,XZS_SV_LS,XZS_SV_LS,& @@ -209,7 +213,6 @@ PDIAG = ZTIME2 - ZTIME1 DEALLOCATE(XTHV_SV_LS) DEALLOCATE(XR_SV_LS) DEALLOCATE(XHU_SV_LS) - DEALLOCATE(XSV_LS) ! ! !------------------------------------------------------------------------------- diff --git a/src/MNH/write_lbn.f90 b/src/MNH/write_lbn.f90 index 52a15c509b2ab998b81b2789cbaf8be390212636..b06f5bc8e3134b7e671d0242579a7d689c21ba40 100644 --- a/src/MNH/write_lbn.f90 +++ b/src/MNH/write_lbn.f90 @@ -597,7 +597,7 @@ IF (NSV >=1) THEN XLBXSVM(:,:,:,NSV_DSTDEPBEG:NSV_DSTDEPEND) = MAX(XLBXSVM(:,:,:,NSV_DSTDEPBEG:NSV_DSTDEPEND), 0.) IF (LDEPOS_DST(IMI).AND.(NSIZELBYSV_ll /= 0)) & XLBYSVM(:,:,:,NSV_DSTDEPBEG:NSV_DSTDEPEND) = MAX(XLBYSVM(:,:,:,NSV_DSTDEPBEG:NSV_DSTDEPEND), 0.) - IF ((LDSTINIT).OR.(LDSTPRES)) THEN ! GRIBEX case (dust initialization) + IF ((LDSTINIT).AND.(.NOT.LDSTCAMS)) THEN ! GRIBEX case (dust initialization) IF ((NSIZELBXSV_ll /= 0).AND.(CPROGRAM == 'REAL ').AND.(NSV_DST > 1)) THEN CALL DUSTLFI_n(XLBXSVM(:,:,:,NSV_DSTBEG:NSV_DSTEND), ZRHODREFX) END IF @@ -684,7 +684,7 @@ IF (NSV >=1) THEN XLBXSVM(:,:,:,NSV_SLTDEPBEG:NSV_SLTDEPEND) = MAX(XLBXSVM(:,:,:,NSV_SLTDEPBEG:NSV_SLTDEPEND), 0.) IF (LDEPOS_SLT(IMI).AND.(NSIZELBYSV_ll /= 0)) & XLBYSVM(:,:,:,NSV_SLTDEPBEG:NSV_SLTDEPEND) = MAX(XLBYSVM(:,:,:,NSV_SLTDEPBEG:NSV_SLTDEPEND), 0.) - IF ((LSLTINIT).OR.(LSLTPRES)) THEN ! GRIBEX case (dust initialization) + IF ((LSLTINIT).AND.(.NOT.LSLTCAMS)) THEN ! GRIBEX case (dust initialization) IF ((NSIZELBXSV_ll /= 0).AND.(CPROGRAM == 'REAL ').AND.(NSV_SLT > 1)) THEN CALL SALTLFI_n(XLBXSVM(:,:,:,NSV_SLTBEG:NSV_SLTEND), ZRHODREFX, ZLBXZZ) END IF diff --git a/src/MNH/write_lesn.f90 b/src/MNH/write_lesn.f90 index e4adb2045bd0fc24bbcf5f685c34fd7051a53ba7..d1fedaada44a7c8cbbd0ce15dcc9358a6c038d15 100644 --- a/src/MNH/write_lesn.f90 +++ b/src/MNH/write_lesn.f90 @@ -87,6 +87,7 @@ use modd_grid_n, only: xdxhat, xdyhat use modd_nsv, only: nsv use modd_les use modd_les_n +use modd_param_n, only: ccloud use modd_param_c2r2, only: ldepoc use modd_param_ice, only: ldeposc use modd_parameters, only: XUNDEF @@ -126,6 +127,7 @@ INTEGER :: IMI ! Current model inde ! IF (.NOT. LLES) RETURN ! +! !* 1. Initializations ! --------------- ! @@ -355,6 +357,8 @@ if ( luserr ) & call Les_diachro_write( tpdiafile, XLES_MEAN_RF, 'MEAN_RF', 'Mean RF Profile', '1', ymasks ) if ( luseri ) & call Les_diachro_write( tpdiafile, XLES_MEAN_Ri, 'MEAN_RI', 'Mean Ri Profile', 'kg kg-1', ymasks ) +if ( luseri ) & +call Les_diachro_write( tpdiafile, XLES_MEAN_If, 'MEAN_IF', 'Mean If Profile', '1', ymasks ) if ( lusers ) & call Les_diachro_write( tpdiafile, XLES_MEAN_Rs, 'MEAN_RS', 'Mean Rs Profile', 'kg kg-1', ymasks ) if ( luserg ) & diff --git a/src/MNH/write_lfifm1_for_diag.f90 b/src/MNH/write_lfifm1_for_diag.f90 index 0a16f3078ac75dfbe27e09ebcd0088176eb15fbe..d5245ba54d095d621d195ba13b24627dbd94927b 100644 --- a/src/MNH/write_lfifm1_for_diag.f90 +++ b/src/MNH/write_lfifm1_for_diag.f90 @@ -1904,13 +1904,13 @@ IF ((LCHEMDIAG).AND.(LORILAM).AND.(LUSECHEM)) THEN CALL PPP2AERO(XSVT(:,:,:,NSV_AERBEG:NSV_AEREND), XRHODREF, & PSIG3D=XSIG3D, PRG3D=XRG3D, PN3D=XN3D, PCTOTA=ZPTOTA) DO JJ=1,JPMODE - TZFIELD%CMNHNAME = 'RGA' + WRITE(TZFIELD%CMNHNAME,'(A3,I1)')'RGA',JJ TZFIELD%CLONGNAME = 'RGA' TZFIELD%CUNITS = 'um' WRITE(TZFIELD%CCOMMENT,'(A21,I1)')'RG (nb) AEROSOL MODE ',JJ CALL IO_Field_write(TPFILE,TZFIELD,XRG3D(:,:,:,JJ)) ! - TZFIELD%CMNHNAME = 'RGAM' + WRITE(TZFIELD%CMNHNAME,'(A4,I1)')'RGAM',JJ TZFIELD%CLONGNAME = 'RGAM' TZFIELD%CUNITS = 'um' WRITE(TZFIELD%CCOMMENT,'(A20,I1)')'RG (m) AEROSOL MODE ',JJ @@ -3926,20 +3926,20 @@ IF (LLIDAR) THEN ZTMP3(:,:,:,1)=ZSIG_DST(:,:,:,IACCMODE) SELECT CASE ( CCLOUD ) CASE('KESS''ICE3','ICE4') - CALL LIDAR(CCLOUD, YVIEW, XALT_LIDAR, XWVL_LIDAR, XZZ, XRHODREF, XCLDFR, & + CALL LIDAR(CCLOUD, YVIEW, XALT_LIDAR, XWVL_LIDAR, XZZ, XRHODREF, ZTEMP, XCLDFR, & XRT, ZWORK31, ZWORK32, & PDSTC=ZTMP1, & PDSTD=ZTMP2, & PDSTS=ZTMP3) CASE('C2R2') - CALL LIDAR(CCLOUD, YVIEW, XALT_LIDAR, XWVL_LIDAR, XZZ, XRHODREF, XCLDFR, & + CALL LIDAR(CCLOUD, YVIEW, XALT_LIDAR, XWVL_LIDAR, XZZ, XRHODREF, ZTEMP, XCLDFR, & XRT, ZWORK31, ZWORK32, & PCT=XSVT(:,:,:,NSV_C2R2BEG+1:NSV_C2R2END), & PDSTC=ZTMP1, & PDSTD=ZTMP2, & PDSTS=ZTMP3) CASE('C3R5') - CALL LIDAR(CCLOUD, YVIEW, XALT_LIDAR, XWVL_LIDAR, XZZ, XRHODREF, XCLDFR, & + CALL LIDAR(CCLOUD, YVIEW, XALT_LIDAR, XWVL_LIDAR, XZZ, XRHODREF, ZTEMP, XCLDFR, & XRT, ZWORK31, ZWORK32, & PCT=XSVT(:,:,:,NSV_C2R2BEG+1:NSV_C1R3END-1), & PDSTC=ZTMP1, & @@ -3953,7 +3953,7 @@ IF (LLIDAR) THEN ZTMP4(:,:,:,3)=XSVT(:,:,:,NSV_LIMA_NR) ZTMP4(:,:,:,4)=XSVT(:,:,:,NSV_LIMA_NI) ! - CALL LIDAR(CCLOUD, YVIEW, XALT_LIDAR, XWVL_LIDAR, XZZ, XRHODREF, XCLDFR,& + CALL LIDAR(CCLOUD, YVIEW, XALT_LIDAR, XWVL_LIDAR, XZZ, XRHODREF, ZTEMP, MAX(XCLDFR,XICEFR),& XRT, ZWORK31, ZWORK32, & PCT=ZTMP4, & PDSTC=ZTMP1, & @@ -3964,14 +3964,14 @@ IF (LLIDAR) THEN ELSE SELECT CASE ( CCLOUD ) CASE('KESS','ICE3','ICE4') - CALL LIDAR(CCLOUD, YVIEW, XALT_LIDAR, XWVL_LIDAR, XZZ, XRHODREF, XCLDFR, & + CALL LIDAR(CCLOUD, YVIEW, XALT_LIDAR, XWVL_LIDAR, XZZ, XRHODREF, ZTEMP, XCLDFR, & XRT, ZWORK31, ZWORK32) CASE('C2R2') - CALL LIDAR(CCLOUD, YVIEW, XALT_LIDAR, XWVL_LIDAR, XZZ, XRHODREF, XCLDFR, & + CALL LIDAR(CCLOUD, YVIEW, XALT_LIDAR, XWVL_LIDAR, XZZ, XRHODREF, ZTEMP, XCLDFR, & XRT, ZWORK31, ZWORK32, & PCT=XSVT(:,:,:,NSV_C2R2BEG+1:NSV_C2R2END)) CASE('C3R5') - CALL LIDAR(CCLOUD, YVIEW, XALT_LIDAR, XWVL_LIDAR, XZZ, XRHODREF, XCLDFR, & + CALL LIDAR(CCLOUD, YVIEW, XALT_LIDAR, XWVL_LIDAR, XZZ, XRHODREF, ZTEMP, XCLDFR, & XRT, ZWORK31, ZWORK32, & PCT=XSVT(:,:,:,NSV_C2R2BEG+1:NSV_C1R3END-1)) CASE('LIMA') @@ -3982,7 +3982,7 @@ IF (LLIDAR) THEN ZTMP4(:,:,:,3)=XSVT(:,:,:,NSV_LIMA_NR) ZTMP4(:,:,:,4)=XSVT(:,:,:,NSV_LIMA_NI) ! - CALL LIDAR(CCLOUD, YVIEW, XALT_LIDAR, XWVL_LIDAR, XZZ, XRHODREF, XCLDFR,& + CALL LIDAR(CCLOUD, YVIEW, XALT_LIDAR, XWVL_LIDAR, XZZ, XRHODREF, ZTEMP, MAX(XCLDFR,XICEFR),& XRT, ZWORK31, ZWORK32, & PCT=ZTMP4) END SELECT diff --git a/src/MNH/write_lfifm1_for_diag_supp.f90 b/src/MNH/write_lfifm1_for_diag_supp.f90 index 526af333a17489d73929c629d63a5c0f82552fe8..c067e62189f73bf435dff6b1160824cd1c3edc74 100644 --- a/src/MNH/write_lfifm1_for_diag_supp.f90 +++ b/src/MNH/write_lfifm1_for_diag_supp.f90 @@ -519,6 +519,7 @@ IF (LCLD_COV .AND. LUSERC) THEN CALL IO_Field_write(TPFILE,TZFIELD,ZWORK22) ! CALL IO_Field_write(TPFILE,'CLDFR',XCLDFR) + CALL IO_Field_write(TPFILE,'ICEFR',XICEFR) ! ! Visibility ! @@ -808,7 +809,7 @@ IF (LEN_TRIM(CRAD_SAT) /= 0 .AND. NRR /=0) THEN CALL RADTR_SATEL( TDTCUR%nyear, TDTCUR%nmonth, TDTCUR%nday, TDTCUR%xtime, & NDLON, NFLEV, NSTATM, NRAD_COLNBR, XEMIS(:,:,1), & XCCO2, XTSRAD, XSTATM, XTHT, XRT, XPABST, XZZ, & - XSIGS, XMFCONV, XCLDFR, LUSERI, LSIGMAS, & + XSIGS, XMFCONV, MAX(XCLDFR,XICEFR), LUSERI, LSIGMAS, & LSUBG_COND, LRAD_SUBG_COND, ZIRBT, ZWVBT, & INDGEO(JI), VSIGQSAT ) ! @@ -848,15 +849,15 @@ IF (NRTTOVINFO(1,1) /= NUNDEF) THEN ! PRINT*,'YOU ASK FOR BRIGHTNESS TEMPERATURE COMPUTED BY THE RTTOV CODE' #if defined(MNH_RTTOV_8) CALL CALL_RTTOV8(NDLON, NFLEV, NSTATM, XEMIS(:,:,1), XTSRAD, XSTATM, XTHT, XRT, & - XPABST, XZZ, XMFCONV, XCLDFR, XUT(:,:,IKB), XVT(:,:,IKB), & + XPABST, XZZ, XMFCONV, MAX(XCLDFR,XICEFR), XUT(:,:,IKB), XVT(:,:,IKB), & LUSERI, NRTTOVINFO, TPFILE ) #elif defined(MNH_RTTOV_11) CALL CALL_RTTOV11(NDLON, NFLEV, XEMIS(:,:,1), XTSRAD, XTHT, XRT, & - XPABST, XZZ, XMFCONV, XCLDFR, XUT(:,:,IKB), XVT(:,:,IKB), & + XPABST, XZZ, XMFCONV, MAX(XCLDFR,XICEFR), XUT(:,:,IKB), XVT(:,:,IKB), & LUSERI, NRTTOVINFO, TPFILE ) #elif defined(MNH_RTTOV_13) CALL CALL_RTTOV13(NDLON, NFLEV, XEMIS(:,:,1), XTSRAD, XTHT, XRT, & - XPABST, XZZ, XMFCONV, XCLDFR, XUT(:,:,IKB), XVT(:,:,IKB), & + XPABST, XZZ, XMFCONV, MAX(XCLDFR,XICEFR), XUT(:,:,IKB), XVT(:,:,IKB), & LUSERI, NRTTOVINFO, TPFILE ) #else PRINT *, "RTTOV LIBRARY NOT AVAILABLE = ###CALL_RTTOV####" diff --git a/src/MNH/write_lfin.f90 b/src/MNH/write_lfin.f90 index e9bab27c0a30fccb9d0b8fbb61d500a8fa9e84a9..b7264511f1367d679341ab8df25eed39b70cd275 100644 --- a/src/MNH/write_lfin.f90 +++ b/src/MNH/write_lfin.f90 @@ -238,6 +238,8 @@ USE MODD_FOREFIRE #endif USE MODD_CONDSAMP USE MODD_CH_AEROSOL +USE MODD_CH_AERO_n +USE MODE_AERO_PSD USE MODD_BLOWSNOW USE MODD_BLOWSNOW_n USE MODD_PAST_FIELD_n @@ -1368,6 +1370,15 @@ IF (NSV >=1) THEN IF (JSV==NSV_AEREND) WRITE(ILUOUT,*)'MNHC: write_lfin:NSV_AEREND ',JSV YCHNAMES(JSV-JSA)= TZFIELD%CMNHNAME(1:LEN_TRIM(TZFIELD%CMNHNAME)-1) END DO + IF (.NOT.(ASSOCIATED(XN3D))) & + ALLOCATE(XN3D(SIZE(XSVT,1),SIZE(XSVT,2),SIZE(XSVT,3),JPMODE)) + IF (.NOT.(ASSOCIATED(XRG3D))) & + ALLOCATE(XRG3D(SIZE(XSVT,1),SIZE(XSVT,2),SIZE(XSVT,3),JPMODE)) + IF (.NOT.(ASSOCIATED(XSIG3D))) & + ALLOCATE(XSIG3D(SIZE(XSVT,1),SIZE(XSVT,2),SIZE(XSVT,3),JPMODE)) + CALL PPP2AERO(XSVT(:,:,:,NSV_AERBEG:NSV_AEREND), XRHODREF, & + PSIG3D=XSIG3D, PRG3D=XRG3D, PN3D=XN3D) + END IF IF (LDEPOS_AER(IMI)) THEN TZFIELD%CSTDNAME = '' @@ -1391,7 +1402,9 @@ IF (NSV >=1) THEN END IF ! dust scalar variables IF (LDUST) THEN - IF ((CPROGRAM == 'REAL ').AND.(NSV_DST > 1).AND.(IMI==1).AND.(LDSTINIT)) & +! IF ((CPROGRAM == 'REAL ').AND.(NSV_DST > 1).AND.(IMI==1).AND.(LDSTINIT)) & + IF ((CPROGRAM == 'REAL ').AND.(NSV_DST > 1).AND.(IMI==1).AND.(LDSTINIT).AND.(.NOT.LDSTCAMS)) & +!UPG*PT CALL DUSTLFI_n(XSVT(:,:,:,NSV_DSTBEG:NSV_DSTEND), XRHODREF) IF ((CPROGRAM == 'IDEAL ').AND.(NSV_DST > 1).AND.(IMI==1)) & CALL DUSTLFI_n(XSVT(:,:,:,NSV_DSTBEG:NSV_DSTEND), XRHODREF) @@ -1438,7 +1451,10 @@ IF (NSV >=1) THEN ENDIF ! sea salt scalar variables IF (LSALT) THEN - IF ((CPROGRAM == 'REAL ').AND.(NSV_SLT > 1).AND.(IMI==1).AND.(LSLTINIT)) & +!UPG*PT +! IF ((CPROGRAM == 'REAL ').AND.(NSV_SLT > 1).AND.(IMI==1).AND.(LSLTINIT)) & + IF ((CPROGRAM == 'REAL ').AND.(NSV_SLT > 1).AND.(IMI==1).AND.(LSLTINIT).AND.(.NOT.LSLTCAMS)) & +!UPG*PT CALL SALTLFI_n(XSVT(:,:,:,NSV_SLTBEG:NSV_SLTEND), XRHODREF, XZZ) IF ((CPROGRAM == 'IDEAL ').AND.(NSV_SLT > 1).AND.(IMI==1)) & CALL SALTLFI_n(XSVT(:,:,:,NSV_SLTBEG:NSV_SLTEND), XRHODREF, XZZ) @@ -1673,6 +1689,7 @@ ENDIF ! IF (NRR > 1 .AND. CPROGRAM == 'MESONH') THEN CALL IO_Field_write(TPFILE,'CLDFR',XCLDFR) + CALL IO_Field_write(TPFILE,'ICEFR',XICEFR) CALL IO_Field_write(TPFILE,'RAINFR',XRAINFR) END IF ! diff --git a/src/MNH/writesurf_dmsn.F90 b/src/MNH/writesurf_dmsn.F90 new file mode 100644 index 0000000000000000000000000000000000000000..f3ab4258b82d06aabc757bdecb51eee3f6f8b419 --- /dev/null +++ b/src/MNH/writesurf_dmsn.F90 @@ -0,0 +1,91 @@ +!SFX_LIC Copyright 1994-2014 CNRS, Meteo-France and Universite Paul Sabatier +!SFX_LIC This is part of the SURFEX software governed by the CeCILL-C licence +!SFX_LIC version 1. See LICENSE, CeCILL-C_V1-en.txt and CeCILL-C_V1-fr.txt +!SFX_LIC for details. version 1. +! ######### + SUBROUTINE WRITESURF_DMS_n(HSELECT, DSF, HPROGRAM) +! ########################################## +! +!!**** *WRITESURF_DMS_n* - routine to write dummy surface fields +!! +!! PURPOSE +!! ------- +!! +!! AUTHOR +!! ------ +!! P. Tulet *LAERO* +!! +!! MODIFICATIONS +!! ------------- +!! Original 06/2021 +!------------------------------------------------------------------------------- +! +!* 0. DECLARATIONS +! ------------ +! +USE MODD_DMS_SURF_FIELDS_n, ONLY : DMS_SURF_FIELDS_t +! +USE MODI_WRITE_SURF +! +USE YOMHOOK ,ONLY : LHOOK, DR_HOOK +USE PARKIND1 ,ONLY : JPRB +! +IMPLICIT NONE +! +!* 0.1 Declarations of arguments +! ------------------------- +! + CHARACTER(LEN=*), DIMENSION(:), INTENT(IN) :: HSELECT +TYPE(DMS_SURF_FIELDS_t), INTENT(INOUT) :: DSF + CHARACTER(LEN=6), INTENT(IN) :: HPROGRAM ! +! +!* 0.2 Declarations of local variables +! ------------------------------- +! +INTEGER :: JDMS ! loop counter +CHARACTER(LEN=3) :: YDMS +! +CHARACTER(LEN=20) :: YSTRING20 ! string +CHARACTER(LEN=3 ) :: YSTRING03 ! string +! +INTEGER :: IRESP ! IRESP : return-code if a problem appears +CHARACTER(LEN=LEN_HREC) :: YRECFM ! Name of the article to be read +CHARACTER(LEN=100):: YCOMMENT ! Comment string +REAL(KIND=JPRB) :: ZHOOK_HANDLE +! +!------------------------------------------------------------------------------- +! +!* 1. Number of megan fields : +! ---------------------- +! +IF (LHOOK) CALL DR_HOOK('WRITESURF_DMS_N',0,ZHOOK_HANDLE) +! +YRECFM='DMS_GR_NBR' +YCOMMENT=' ' +! + CALL WRITE_SURF(HSELECT,HPROGRAM,YRECFM,DSF%NDMS_NBR,IRESP,HCOMMENT=YCOMMENT) +! +!------------------------------------------------------------------------------- +! +!* 2. DMS fields : +! ------------ +! +DO JDMS=1,DSF%NDMS_NBR + ! + WRITE(YDMS,'(I3.3)') (JDMS) + YRECFM='DMS_NB'//ADJUSTL(YDMS(:LEN_TRIM(YDMS))) + YSTRING20=DSF%CDMS_NAME(JDMS) + YSTRING03=DSF%CDMS_AREA(JDMS) + YCOMMENT='X_Y_'//ADJUSTL(YRECFM(:LEN_TRIM(YRECFM)))//'_'//ADJUSTL(YSTRING20(:LEN_TRIM(YSTRING20)))//& + '_'//ADJUSTL(YSTRING03(:LEN_TRIM(YSTRING03))) + CALL WRITE_SURF(HSELECT,HPROGRAM,YRECFM,DSF%XDMS_FIELDS(:,JDMS),IRESP,HCOMMENT=YCOMMENT) + ! + YRECFM='DMS_NAME'//ADJUSTL(YDMS(:LEN_TRIM(YDMS))) + CALL WRITE_SURF(HSELECT, HPROGRAM,YRECFM,DSF%CDMS_NAME(JDMS),IRESP,HCOMMENT=YCOMMENT) + ! + END DO +IF (LHOOK) CALL DR_HOOK('WRITESURF_DMS_N',1,ZHOOK_HANDLE) +! +!------------------------------------------------------------------------------- +! +END SUBROUTINE WRITESURF_DMS_n diff --git a/src/SURFEX/allocate_physio.F90 b/src/SURFEX/allocate_physio.F90 index 745a7d007573acc54b03ab9a38911feb85faedc7..371a45d76c8dcbf86fb2d72cc6996d06c6bb047a 100644 --- a/src/SURFEX/allocate_physio.F90 +++ b/src/SURFEX/allocate_physio.F90 @@ -33,7 +33,6 @@ !! ------------- !! Original xx/xxxx !! Modified 10/2014 P. Samuelsson MEB -!! 11/2019 C.Lac correction in the drag formula and application to building in addition to tree ! ! USE MODD_ISBA_OPTIONS_n, ONLY : ISBA_OPTIONS_t @@ -78,6 +77,7 @@ ALLOCATE(PK%XDG (ISIZE,IO%NGROUND_LAYER)) ALLOCATE(PK%XD_ICE (ISIZE )) ! ALLOCATE(PEK%XLAI (ISIZE )) +ALLOCATE(PEK%XLAIp (ISIZE )) ALLOCATE(PEK%XVEG (ISIZE )) ALLOCATE(PEK%XZ0 (ISIZE )) ALLOCATE(PEK%XEMIS (ISIZE )) @@ -100,7 +100,11 @@ ELSE ENDIF ! - vegetation: Ags parameters ('AGS', 'LAI', 'AST', 'LST', 'NIT' options) ! -ALLOCATE(PK%XH_TREE (ISIZE )) +IF (IO%CPHOTO/='NON'.OR.LTREEDRAG) THEN + ALLOCATE(PK%XH_TREE (ISIZE )) +ELSE + ALLOCATE(PK%XH_TREE (0 )) +ENDIF ! IF (IO%CPHOTO/='NON') THEN ALLOCATE(PK%XRE25 (ISIZE )) diff --git a/src/SURFEX/allocate_teb_veg_pgd.F90 b/src/SURFEX/allocate_teb_veg_pgd.F90 index 8c56e3e0c10c8fe02a48fc8bedc05f257089969b..32bbfd37d394976ab2568deea7c74f23ddb66dc8 100644 --- a/src/SURFEX/allocate_teb_veg_pgd.F90 +++ b/src/SURFEX/allocate_teb_veg_pgd.F90 @@ -34,6 +34,7 @@ IF (LHOOK) CALL DR_HOOK('ALLOCATE_TEB_VEG_PGD',0,ZHOOK_HANDLE) ! - Physiographic field that can evolve prognostically ! ALLOCATE(PEK%XLAI (KLU)) +ALLOCATE(PEK%XLAIp (KLU)) ALLOCATE(PEK%XVEG (KLU)) ALLOCATE(PEK%XEMIS (KLU)) ALLOCATE(PEK%XZ0 (KLU)) diff --git a/src/SURFEX/compute_isba_parameters.F90 b/src/SURFEX/compute_isba_parameters.F90 index 39fb20dde297f6ffc735b50a5894f885569745ea..f0a61e85b9c14b5c4fa7198ef964fd45c35a9111 100644 --- a/src/SURFEX/compute_isba_parameters.F90 +++ b/src/SURFEX/compute_isba_parameters.F90 @@ -518,6 +518,7 @@ IF (KSV /= 0) THEN DO JP = 1,IO%NPATCH ! DSTK => NDST%AL(JP) + PK => NP%AL(JP) ! IF (CHI%SVI%NDSTEQ >=1) THEN ! diff --git a/src/SURFEX/convert_patch_isba.F90 b/src/SURFEX/convert_patch_isba.F90 index b04278c2088347b63e33deac72c1660e34f2c7ff..a702572247f7d4bf0aa2967b1e2b19982c1734ad 100644 --- a/src/SURFEX/convert_patch_isba.F90 +++ b/src/SURFEX/convert_patch_isba.F90 @@ -215,6 +215,16 @@ IF (OFIX) THEN CALL AV_PGD_1P(DTCO, PK%XZ0_O_Z0H,PCOVER,XDATA_Z0_O_Z0H,YNAT,'ARI',OCOVER,& PK%NR_P,IO%NPATCH,KPATCH,KDECADE=KDEC) ENDIF +! + IF (IO%CPHOTO/='NON'.OR.LTREEDRAG) THEN + IF (GDATA .AND. ANY(DTV%LDATA_H_TREE)) THEN + CALL AV_PGD_PARAM(DTV%XPAR_LAI, DTV%XPAR_VEG, & + PK%XH_TREE,DTV%XPAR_VEGTYPE,DTV%XPAR_H_TREE,YTREE,'ARI',PK%NR_P,IO%NPATCH,KPATCH) + ELSE + CALL AV_PGD_1P(DTCO, PK%XH_TREE,PCOVER,XDATA_H_TREE(:,:),YTREE,'ARI',OCOVER,& + PK%NR_P,IO%NPATCH,KPATCH,KDECADE=KDEC) + ENDIF + ENDIF ! IF (GDATA .AND. ANY(DTV%LDATA_H_TREE)) THEN CALL AV_PGD_PARAM(DTV%XPAR_LAI, DTV%XPAR_VEG, & diff --git a/src/SURFEX/coupling_isban.F90 b/src/SURFEX/coupling_isban.F90 index 45e5eea8f4176584b60b89e1c51e6e98230261d6..044da5c75010a8a004053af94cb6c07810e0cdbc 100644 --- a/src/SURFEX/coupling_isban.F90 +++ b/src/SURFEX/coupling_isban.F90 @@ -11,7 +11,7 @@ SUBROUTINE COUPLING_ISBA_n (DTCO, UG, U, USS, NAG, CHI, NCHI, MGN, MSF, DTI, ID PDIR_SW, PSCA_SW, PSW_BANDS, PPS, PPA, PSFTQ, PSFTH, PSFTS, & PSFCO2, PSFU, PSFV, PTRAD, PDIR_ALB, PSCA_ALB, PEMIS, & PTSURF, PZ0, PZ0H, PQSURF, PPEW_A_COEF, PPEW_B_COEF, & - PPET_A_COEF, PPEQ_A_COEF, PPET_B_COEF, PPEQ_B_COEF, HTEST ) + PPET_A_COEF, PPEQ_A_COEF, PPET_B_COEF, PPEQ_B_COEF, HTEST ) ! ############################################################################### ! !!**** *COUPLING_ISBA_n * - Driver for ISBA time step @@ -257,7 +257,8 @@ REAL, DIMENSION(KI), INTENT(IN) :: PPET_A_COEF REAL, DIMENSION(KI), INTENT(IN) :: PPEQ_A_COEF REAL, DIMENSION(KI), INTENT(IN) :: PPET_B_COEF REAL, DIMENSION(KI), INTENT(IN) :: PPEQ_B_COEF - CHARACTER(LEN=2), INTENT(IN) :: HTEST ! must be equal to 'OK' +CHARACTER(LEN=2), INTENT(IN) :: HTEST ! must be equal to 'OK' + ! ! !* 0.2 declarations of local variables @@ -567,6 +568,22 @@ ENDIF ZSFCO2_TILE, ZSFU_TILE, ZSFV_TILE, PSFTH, PSFTQ,& PSFTS, PSFCO2, PSFU, PSFV ) ! +! Get output megan flux if megan is activated + + +IF (CHI%SVI%NBEQ>0 .AND. CHI%LCH_BIO_FLUX) THEN + IF (TRIM(CHI%CPARAMBVOC) == 'MEGAN') THEN + ! Get output Isoprene flux + DO II=1,SIZE(MGN%XBIOFLX,1) + IF ((S%XPATCH(II,1) + S%XPATCH(II,2) + S%XPATCH(II,3)) .LT. 1.) THEN + MGN%XBIOFLX(II) = PSFTS(II,MGN%NBIO)/(1. - S%XPATCH(II,1) - S%XPATCH(II,2) - S%XPATCH(II,3)) + ELSE + MGN%XBIOFLX(:) = PSFTS(:,MGN%NBIO) + ENDIF + ENDDO + ENDIF +ENDIF + ! !------------------------------------------------------------------------------- !Physical properties see by the atmosphere in order to close the energy budget @@ -705,7 +722,8 @@ REAL, DIMENSION(PK%NSIZE_P) :: ZP_TRAD ! radiative temperature REAL, DIMENSION(PK%NSIZE_P) :: ZP_TSURF ! surface effective temperature (K) REAL, DIMENSION(PK%NSIZE_P) :: ZP_Z0 ! roughness length for momentum (m) REAL, DIMENSION(PK%NSIZE_P) :: ZP_Z0H ! roughness length for heat (m) -REAL, DIMENSION(PK%NSIZE_P) :: ZP_QSURF ! specific humidity at surface (kg/kg) +REAL, DIMENSION(PK%NSIZE_P):: ZP_QSURF ! specific humidity at surface (kg/kg) +REAL, DIMENSION(PK%NSIZE_P) :: ZP_TEMP, ZP_PAR ! !* other forcing variables (packed for each patch) ! @@ -730,6 +748,7 @@ REAL, DIMENSION(PK%NSIZE_P) :: ZP_FFVNOS !Floodplain fraction over vegetation ! REAL, DIMENSION(:,:),ALLOCATABLE :: ZP_PFT REAL, DIMENSION(:,:),ALLOCATABLE :: ZP_EF +REAL, DIMENSION(:), ALLOCATABLE :: ZP_T24, ZP_PFD24 INTEGER, DIMENSION(PK%NSIZE_P) :: IP_SLTYP ! REAL, DIMENSION(PK%NSIZE_P,IO%NNBIOMASS) :: ZP_RESP_BIOMASS_INST ! instantaneous biomass respiration (kgCO2/kgair m/s) @@ -787,6 +806,16 @@ IF (ASSOCIATED(MGN%XEF)) THEN ELSE ALLOCATE(ZP_EF(0,0)) ENDIF +IF (ASSOCIATED(MGN%XPPFD24)) THEN + ALLOCATE(ZP_PFD24(PK%NSIZE_P)) +ELSE + ALLOCATE(ZP_PFD24(0)) +ENDIF +IF (ASSOCIATED(MGN%XT24)) THEN + ALLOCATE(ZP_T24(PK%NSIZE_P)) +ELSE + ALLOCATE(ZP_T24(0)) +ENDIF !-------------------------------------------------------------------------------------- ! ! Pack isba forcing outputs @@ -827,7 +856,10 @@ IF (IO%NPATCH==1) THEN ZP_PFT(:,:) = MGN%XPFT (:,:) ZP_EF(:,:) = MGN%XEF (:,:) IP_SLTYP(:) = MGN%NSLTYP (:) + ZP_PFD24(:) = MGN%XPPFD24 (:) + ZP_T24(:) = MGN%XT24 (:) END IF + ZP_RNSHADE(:) = ZRNSHADE (:) ZP_RNSUNLIT(:) = ZRNSUNLIT (:) @@ -890,6 +922,8 @@ ELSE ZP_PFT(:,JJ) = MGN%XPFT (:,JI) ZP_EF(:,JJ) = MGN%XEF (:,JI) IP_SLTYP(JJ) = MGN%NSLTYP (JI) + ZP_PFD24(JJ) = MGN%XPPFD24 (JI) + ZP_T24(JJ) = MGN%XT24 (JI) ENDDO END IF DO JJ=1,PK%NSIZE_P @@ -1160,12 +1194,14 @@ IF (CHI%SVI%NBEQ>0 .AND. CHI%LCH_BIO_FLUX) THEN GBK%XIACAN = 0. END WHERE !UPG*PT + IBEG = CHI%SVI%NSV_CHSBEG + IEND = CHI%SVI%NSV_CHSEND - CALL COUPLING_MEGAN_n(MGN, CHI, GK, PEK, & - KYEAR, KMONTH, KDAY, PTIME, IO%LTR_ML, & - IP_SLTYP, ZP_PFT, ZP_EF, & + CALL COUPLING_MEGAN_n(MGN, CHI, GK, PEK, PTSTEP, & + KYEAR, KMONTH, KDAY, PTIME, S%TTIME%TIME, IO%LTR_ML, & + IP_SLTYP, ZP_PFT, ZP_EF, ZP_PFD24, ZP_T24, & ZP_TA, GBK%XIACAN, ZP_TRAD, ZP_RNSUNLIT, ZP_RNSHADE, & - ZP_WIND, ZP_PA, ZP_QA, ZP_SFTS) + ZP_WIND, ZP_PA, ZP_QA, ZP_SFTS(:,IBEG:IEND)) END IF ENDIF @@ -1393,7 +1429,7 @@ IF (CHI%SVI%NDSTEQ>0) THEN IF (IMOMENT == 1) THEN DSTK%XSFDST(:,JSV) = ZSFTS_TILE(:,NDST_MDEBEG+JSV-1,JP) ELSE - DSTK%XSFDST(:,JSV) = ZSFTS_TILE(:,NDST_MDEBEG+(JSV-1)*IMOMENT+1,JP) + DSTK%XSFDST(:,JSV) = ZSFTS_TILE(PK%NR_P,NDST_MDEBEG+(JSV-1)*IMOMENT+1,JP) END IF DSTK%XSFDSTM(:,JSV) = DSTK%XSFDSTM(:,JSV) + DSTK%XSFDST(:,JSV) * PTSTEP diff --git a/src/SURFEX/coupling_megann.F90 b/src/SURFEX/coupling_megann.F90 index 88bb6fd8a65007c6e2a7ad20bf6366a8f53cb603..11b5991bbe52ec3ae3d3bd1ddfc16c10777fc216 100644 --- a/src/SURFEX/coupling_megann.F90 +++ b/src/SURFEX/coupling_megann.F90 @@ -3,9 +3,9 @@ !SFX_LIC version 1. See LICENSE, CeCILL-C_V1-en.txt and CeCILL-C_V1-fr.txt !SFX_LIC for details. version 1. ! ############################### - SUBROUTINE COUPLING_MEGAN_n(MGN, CHI, GK, PEK, & - KYEAR, KMONTH, KDAY, PTIME, OTR_ML, & - KSLTYP, PPFT, PEF, & + SUBROUTINE COUPLING_MEGAN_n(MGN, CHI, GK, PEK, PTSTEP, & + KYEAR, KMONTH, KDAY, PTIME, PTIME2, OTR_ML, & + KSLTYP, PPFT, PEF, PPFD24, PT24, & PTEMP, PIACAN, PLEAFT, PRN_SUNLIT, PRN_SHADE, & PWIND, PPRES, PQV, PSFTS) ! ############################### @@ -30,6 +30,7 @@ !! Original: 25/10/2014 !! Modified: 06/07/2017, J. Pianezze, adaptation for SurfEx v8.0 !! Modified: 06/07/2018, P. Tulet, correction for T leaf +!! Modified: 06/02/2021, S. Oumami, off-line & daily averages use !! !! EXTERNAL !! -------- @@ -42,7 +43,7 @@ USE MODD_CH_ISBA_n, ONLY : CH_ISBA_t USE MODD_ISBA_n, ONLY: ISBA_PE_t USE MODD_SFX_GRID_n, ONLY: GRID_t ! -USE MODD_CSTS, ONLY : XAVOGADRO +USE MODD_CSTS, ONLY : XAVOGADRO, XDAY ! #ifdef MNH_MEGAN USE MODD_MEGAN @@ -69,19 +70,23 @@ INTEGER, INTENT(IN) :: KYEAR ! I current year (UTC) INTEGER, INTENT(IN) :: KMONTH ! I current month (UTC) INTEGER, INTENT(IN) :: KDAY ! I current day (UTC) REAL, INTENT(IN) :: PTIME ! I current time since midnight (UTC, s) +REAL, INTENT(IN) :: PTIME2 ! Time since simulation begin (s) LOGICAL, INTENT(IN) :: OTR_ML ! new radiation for leaves temperatures +REAL, INTENT(IN) :: PTSTEP ! atmospheric time-step (s) ! REAL, DIMENSION(:), INTENT(IN) :: PTEMP ! I Air temperature (K) -REAL, DIMENSION(:,:),INTENT(IN) :: PIACAN ! I PAR (umol/m2.s) +REAL, DIMENSION(:,:),INTENT(IN) :: PIACAN ! I PAR (W/m2) REAL, DIMENSION(:), INTENT(IN) :: PLEAFT ! I Leaf temperature (K) REAL, DIMENSION(:), INTENT(IN) :: PRN_SUNLIT! I Leaf RN REAL, DIMENSION(:), INTENT(IN) :: PRN_SHADE ! I Leaf RN +REAL, DIMENSION(:), INTENT(INOUT) :: PPFD24 +REAL, DIMENSION(:), INTENT(INOUT) :: PT24 REAL, DIMENSION(:), INTENT(IN) :: PWIND REAL, DIMENSION(:), INTENT(IN) :: PPRES ! I Atmospheric pressure (Pa) REAL, DIMENSION(:), INTENT(IN) :: PQV ! I Air humidity (kg/kg) -REAL, DIMENSION(:,:),INTENT(IN) :: PPFT, PEF -INTEGER, DIMENSION(:), INTENT(IN) :: KSLTYP -REAL, DIMENSION(:,:), INTENT(INOUT) :: PSFTS ! O Scalar flux in molecules/m2/s +REAL, DIMENSION(:,:),INTENT(IN) :: PPFT, PEF +INTEGER, DIMENSION(:), INTENT(IN) :: KSLTYP +REAL, DIMENSION(:,:),INTENT(INOUT) :: PSFTS ! O Scalar flux in molecules/m2/s #ifdef MNH_MEGAN !* 0.1 Declaration of local variables ! @@ -99,14 +104,17 @@ REAL, DIMENSION(SIZE(PTEMP)) :: ZCFNO ! NO correction factor REAL, DIMENSION(SIZE(PTEMP)) :: ZCFNOG ! NO correction factor for grass REAL, DIMENSION(N_MGN_SPC,SIZE(PTEMP)) :: ZCFSPEC ! Output emission buffer REAL, DIMENSION(MGN%NVARS3D,SIZE(PTEMP)) :: ZFLUX ! Output emission megan flux +REAL, DIMENSION(SIZE(PTEMP)) :: ZD_TEMP, ZTSUM ! Daily temperature (K) and daily sum temperature + ! REAL :: ZDI ! Drought Index (0 normal, -2 moderate drought, -3 severe drought, -4 extreme drought) REAL :: ZREC_ADJ ! Rain adjustment factor -REAL :: ZD_TEMP ! Daily temperature (K) -REAL :: ZD_PPFD ! Daily PAR (umol/m2.s) ! INTEGER,DIMENSION(SIZE(PTEMP)) :: ISLTYP !Soil category (function of silt, clay and sand)) INTEGER :: JSV, JSM +INTEGER, SAVE :: ICOUNTNEW, ICOUNT, INB_COUNT +LOGICAL, SAVE :: GFIRSTCALL = .TRUE. + ! ! Input parameters ZHOUR = FLOAT(INT(PTIME/3600.)) @@ -121,19 +129,23 @@ ZLAIC(:) = MIN(MAX(0.001,PEK%XLAI(:)),8.) ! ZDI = MGN%XDROUGHT ZREC_ADJ = MGN%XMODPREC -ZD_TEMP = MGN%XDAILYTEMP -ZD_PPFD = MGN%XDAILYPAR -! ZCFNO = 0. ZCFNOG = 0. ZCFSPEC = 0. -! + +! Compute PAR from the entire canopy and conversion W/m2 in micromol/m²/s ZPFD(:) = 0. -! Compute PAR from the entire canopy DO JSM = 1,SIZE(PIACAN,2) - ZPFD(:) = ZPFD(:) + PIACAN(:, JSM) + ZPFD(:) = ZPFD(:) + PIACAN(:, JSM) * 4.6 END DO -! + + +!INB_COUNT=INB_COUNT+1 +!ICOUNTNEW = INT(INB_COUNT*PTSTEP/XDAY) + +PT24(:) = PT24(:)*XDAY / (XDAY + PTSTEP) + PTEMP(:)* PTSTEP / (XDAY + PTSTEP) +PPFD24(:) = PPFD24(:)*XDAY / (XDAY + PTSTEP) + ZPFD(:)*PTSTEP / (XDAY + PTSTEP) + ! UPG*PT en attendat un calcul propre. Temperature des feuilles à l'ombre egale a la ! température de l'air. La temparature des feuilles au soleil egale a la valeur ! max entre la temperature de l'air et la temperaure radiative. @@ -167,7 +179,8 @@ ZLSHT(:) = PTEMP(:) ! 19: STRESS ! 20: OTHER ! -CALL EMPROC(ITIME, IDATE, ZD_PPFD, ZD_TEMP, ZDI, ZREC_ADJ, & + +CALL EMPROC(ITIME, IDATE, PPFD24, PT24, ZDI, ZREC_ADJ, & GK%XLAT, GK%XLON, ZLAIC, ZLAIC, PTEMP, & ZPFD, PWIND, PPRES, PQV, KSLTYP, & PEK%XWG(:,1), PEK%XTG(:,1), PPFT, & diff --git a/src/SURFEX/coupling_seaflux_orogn.F90 b/src/SURFEX/coupling_seaflux_orogn.F90 index 5d222e8480eba4d94bac84f3c51a259ecb074d32..5a2bbe3b431ed5ff18b4b5b740be4ddff00f633b 100644 --- a/src/SURFEX/coupling_seaflux_orogn.F90 +++ b/src/SURFEX/coupling_seaflux_orogn.F90 @@ -42,10 +42,11 @@ SUBROUTINE COUPLING_SEAFLUX_OROG_n (SM, DST, SLT, HPROGRAM, HCOUPLING, PTIMEC, P !!------------------------------------------------------------- ! ! -USE MODD_SURFEX_n, ONLY : SEAFLUX_MODEL_t +USE MODD_SURFEX_n, ONLY : SEAFLUX_MODEL_t, SURFEX_t ! USE MODD_DST_n, ONLY : DST_t USE MODD_SLT_n, ONLY : SLT_t +USE MODD_DMS_n, ONLY : DMS_t ! ! USE MODD_SURF_PAR, ONLY : XUNDEF @@ -198,7 +199,7 @@ ELSE ENDIF ! CALL COUPLING_SEAFLUX_SBL_n(SM%CHS, SM%DTS, SM%SD, SM%O, SM%OR, SM%G, SM%S, SM%SB, & - DST, SLT, HPROGRAM, HCOUPLING, PTIMEC, PTSTEP, & + DST, SLT, SM%DMS, HPROGRAM, HCOUPLING, PTIMEC, PTSTEP, & KYEAR, KMONTH, KDAY, PTIME, KI, KSV, KSW, & PTSUN, PZENITH, PZENITH2, PAZIM, PZREF, PUREF, PU, PV, & ZQA, ZTA, ZRHOA, PSV, PCO2, HSV, ZRAIN, ZSNOW, ZLW, & diff --git a/src/SURFEX/coupling_seaflux_sbln.F90 b/src/SURFEX/coupling_seaflux_sbln.F90 index 53aa72d42ebc46a6e8c6ca068027000af37bd2d6..2d4148ff3f94eb5becee75d73c456bf40d2c5963 100644 --- a/src/SURFEX/coupling_seaflux_sbln.F90 +++ b/src/SURFEX/coupling_seaflux_sbln.F90 @@ -3,7 +3,7 @@ !SFX_LIC version 1. See LICENSE, CeCILL-C_V1-en.txt and CeCILL-C_V1-fr.txt !SFX_LIC for details. version 1. ! ############################################################################### -SUBROUTINE COUPLING_SEAFLUX_SBL_n (CHS, DTS, DGS, O, OR, G, S, SB, DST, SLT, & +SUBROUTINE COUPLING_SEAFLUX_SBL_n (CHS, DTS, DGS, O, OR, G, S, SB, DST, SLT, DMS, & HPROGRAM, HCOUPLING, PTIMEC, PTSTEP, KYEAR, KMONTH, KDAY, PTIME, & KI, KSV, KSW, PTSUN, PZENITH, PZENITH2, PAZIM, PZREF, PUREF, & PU, PV, PQA, PTA, PRHOA, PSV, PCO2, HSV, & @@ -53,6 +53,7 @@ USE MODD_CANOPY_n, ONLY : CANOPY_t ! USE MODD_DST_n, ONLY : DST_t USE MODD_SLT_n, ONLY : SLT_t +USE MODD_DMS_n, ONLY : DMS_t ! USE MODD_SURF_PAR, ONLY : XUNDEF USE MODD_CSTS, ONLY : XCPD @@ -84,6 +85,7 @@ TYPE(SEAFLUX_t), INTENT(INOUT) :: S TYPE(CANOPY_t), INTENT(INOUT) :: SB TYPE(DST_t), INTENT(INOUT) :: DST TYPE(SLT_t), INTENT(INOUT) :: SLT +TYPE(DMS_t), INTENT(INOUT) :: DMS ! CHARACTER(LEN=6), INTENT(IN) :: HPROGRAM ! program calling surf. schemes CHARACTER(LEN=1), INTENT(IN) :: HCOUPLING ! type of coupling @@ -298,7 +300,7 @@ END IF !* 2. Call of SEAFLUX ! ------------ ! - CALL COUPLING_SEAFLUX_n(CHS, DTS, DGS, O, OR, G, S, DST, SLT, HPROGRAM, GCOUPLING, & + CALL COUPLING_SEAFLUX_n(CHS, DTS, DGS, O, OR, G, S, DST, SLT, DMS, HPROGRAM, GCOUPLING, & PTIMEC, PTSTEP, KYEAR, KMONTH, KDAY, PTIME, KI, KSV, KSW, & PTSUN, PZENITH, PZENITH2, PAZIM, ZZREF, ZUREF, ZU, ZV, ZQA, ZTA, PRHOA, & PSV, PCO2, HSV, PRAIN, PSNOW, PLW, PDIR_SW, PSCA_SW, PSW_BANDS, PPS, ZPA,& diff --git a/src/SURFEX/coupling_seafluxn.F90 b/src/SURFEX/coupling_seafluxn.F90 index 612b8df120d49a315c7eb105120c4afac78cb6c4..ff9a36c6a32296506809fb8ac24efd9351c68e31 100644 --- a/src/SURFEX/coupling_seafluxn.F90 +++ b/src/SURFEX/coupling_seafluxn.F90 @@ -3,7 +3,7 @@ !SFX_LIC version 1. See LICENSE, CeCILL-C_V1-en.txt and CeCILL-C_V1-fr.txt !SFX_LIC for details. version 1. ! ############################################################################### -SUBROUTINE COUPLING_SEAFLUX_n (CHS, DTS, DGS, O, OR, G, S, DST, SLT, & +SUBROUTINE COUPLING_SEAFLUX_n (CHS, DTS, DGS, O, OR, G, S, DST, SLT, DMS, & HPROGRAM, HCOUPLING, PTIMEC, PTSTEP, KYEAR, KMONTH, KDAY, PTIME, & KI, KSV, KSW, PTSUN, PZENITH, PZENITH2, PAZIM, PZREF, PUREF, & PU, PV, PQA, PTA, PRHOA, PSV, PCO2, HSV, PRAIN, PSNOW, PLW, & @@ -65,10 +65,11 @@ USE MODD_SEAFLUX_n, ONLY : SEAFLUX_t ! USE MODD_DST_n, ONLY : DST_t USE MODD_SLT_n, ONLY : SLT_t +USE MODD_DMS_n, ONLY : DMS_t ! USE MODD_REPROD_OPER, ONLY : CIMPLICIT_WIND ! -USE MODD_CSTS, ONLY : XRD, XCPD, XP00, XTT, XTTS, XTTSI, XDAY +USE MODD_CSTS, ONLY : XRD, XCPD, XP00, XTT, XTTS, XTTSI, XDAY, XAVOGADRO USE MODD_SURF_PAR, ONLY : XUNDEF USE MODD_SFX_OASIS, ONLY : LCPL_WAVE, LCPL_SEA, LCPL_SEAICE USE MODD_WATER_PAR, ONLY : XEMISWAT, XEMISWATICE @@ -125,6 +126,7 @@ TYPE(GRID_t), INTENT(INOUT) :: G TYPE(SEAFLUX_t), INTENT(INOUT) :: S TYPE(DST_t), INTENT(INOUT) :: DST TYPE(SLT_t), INTENT(INOUT) :: SLT +TYPE(DMS_t), INTENT(INOUT) :: DMS ! CHARACTER(LEN=6), INTENT(IN) :: HPROGRAM ! program calling surf. schemes CHARACTER(LEN=1), INTENT(IN) :: HCOUPLING ! type of coupling @@ -245,6 +247,8 @@ REAL, DIMENSION(KI) :: ZTP ! peak period ! REAL, DIMENSION(KI) :: ZSST ! XSST corrected for anomalously low values (which actually are sea-ice temp) REAL, DIMENSION(KI) :: ZMASK ! A mask for diagnosing where seaice exists (or, for coupling_iceflux, may appear) +REAL, DIMENSION(KI) :: DMS_WATER ! DMS oceanic content (mol m-3) based on Lana et al. 2011 database +REAL, DIMENSION(KI) :: ZFLUX_DMS ! DMS flux ! REAL :: ZCONVERTFACM0_SLT, ZCONVERTFACM0_DST REAL :: ZCONVERTFACM3_SLT, ZCONVERTFACM3_DST @@ -260,8 +264,10 @@ INTEGER :: IBEG, IEND INTEGER :: ISLT, IDST, JSV, IMOMENT ! number of sea salt, dust variables ! INTEGER :: ILUOUT +INTEGER :: JP_DMS ! REAL(KIND=JPRB) :: ZHOOK_HANDLE + !------------------------------------------------------------------------------------- ! Preliminaries: !------------------------------------------------------------------------------------- @@ -489,7 +495,8 @@ PSFCO2(:) = - ZWIND(:)**2 * 1.13E-3 * 8.7 * 44.E-3 / ( 365*24*3600 ) !------------------------------------------------------------------------------------- ! IF (CHS%SVS%NBEQ>0.AND.(KI.GT.0)) THEN - ! +! + IF (CHS%CCH_DRY_DEP == "WES89") THEN ! IBEG = CHS%SVS%NSV_CHSBEG @@ -508,6 +515,7 @@ IF (CHS%SVS%NBEQ>0.AND.(KI.GT.0)) THEN CALL CH_AER_DEP(PSV(:,IBEG:IEND),PSFTS(:,IBEG:IEND),ZUSTAR,ZRESA_SEA,PTA,PRHOA) ! END IF + ! ELSE ! @@ -519,6 +527,25 @@ IF (CHS%SVS%NBEQ>0.AND.(KI.GT.0)) THEN ! ENDIF ! +! DMS flux +DMS_WATER(:) = DMS%XDMS(:) ! nmol.dm-3 +DMS_WATER(:) = DMS_WATER(:) *1E-6*XAVOGADRO ! molec. m-3 +JP_DMS = 0 +DO JSV=CHS%SVS%NSV_CHSBEG,CHS%SVS%NSV_CHSEND + IF (TRIM(CHS%SVS%CSV(JSV)) == "DMS") JP_DMS=JSV +ENDDO + +IF (JP_DMS .GT. 0) THEN + ZFLUX_DMS(:) = 0. + CALL COUPLING_DMS_n(SIZE(ZUSTAR,1),& !! number of sea points + ZWIND,& !! wind velocity (m s-1) + S%XSST,& !! sea surface temperature (K) + DMS_WATER,& !! DMS oceanic content (mol m-3) + ZFLUX_DMS) !! DMS emission flux (mol m-2 s-1) + PSFTS(:,JP_DMS) = PSFTS(:,JP_DMS) + ZFLUX_DMS(:) + +ENDIF ! DMS + ENDIF ! IF (CHS%SVS%NDSTEQ>0.AND.(KI.GT.0)) THEN @@ -549,6 +576,7 @@ IF (CHS%SVS%NSLTEQ>0.AND.(KI.GT.0)) THEN ! IBEG = CHS%SVS%NSV_SLTBEG IEND = CHS%SVS%NSV_SLTEND + ! ISLT = IEND - IBEG + 1 ! @@ -560,6 +588,7 @@ IF (CHS%SVS%NSLTEQ>0.AND.(KI.GT.0)) THEN S%XSST, & ZUSTAR, & PSFTS(:,IBEG:IEND) ) + ! CALL DSLT_DEP(PSV(:,IBEG:IEND), PSFTS(:,IBEG:IEND), ZUSTAR, ZRESA_SEA, PTA, & PRHOA, SLT%XEMISSIG_SLT, SLT%XEMISRADIUS_SLT, JPMODE_SLT, & diff --git a/src/SURFEX/coupling_sltn.F90 b/src/SURFEX/coupling_sltn.F90 index 4437552ac7edaedd31c20e0e3e905fb0299b2abc..3db0c7b1a987464590ce42376196f115d2188399 100644 --- a/src/SURFEX/coupling_sltn.F90 +++ b/src/SURFEX/coupling_sltn.F90 @@ -18,11 +18,9 @@ SUBROUTINE COUPLING_SLT_n (SLT, & !PURPOSE !------- ! Compute sea salt emission upon Vignatti et al, 2001 -! ++ PIERRE / MARINE SSA - MODIF ++ ! Compute sea salt emission upon Ovadnevaite et al, 2014 -! -- PIERRE / MARINE SSA - MODIF -- +! Compute sea salt emission upon Ovadnevaite et al, 2014 and Bruch et al. 2021 ! -!! Bielli S. 02/2019 Sea salt : significant sea wave height influences salt emission; 5 salt modes !AUTHOR !------- ! P. Tulet @@ -50,6 +48,8 @@ REAL, DIMENSION(KI,KSLT), INTENT(OUT) :: PSFSLT !Out: kg/m2/s (index #2) REAL, DIMENSION(KI), INTENT(INOUT) :: PWHEIGHT !Significant height of wind-generated waves (in ECMWF analyses) REAL, DIMENSION(KI), INTENT(IN) :: PUSTAR !Friction velocity (ecmwf?) : Unite: m.s^(-2)? REAL, DIMENSION(KI), INTENT(IN) :: PSST ! Sea surface temperature (K) +REAL, DIMENSION(KI) :: MSS ! Variance de Pente de vague +REAL, DIMENSION(KI) :: PWIND12 ! Vent 12m ! -- PIERRE / MARINE SSA - MODIF -- !LOCAL VARIABLES @@ -156,17 +156,13 @@ ZCONVERTFACM3_SLT = 4./3.*XPI*XDENSITY_SLT / 1.d18 PSFSLT(:,:)=0.d0 ! !+ Marine -IF (CEMISPARAM_SLT .eq. "Ova14") THEN ! Rajouter Ova14 dans fichier initialisation +IF ((CEMISPARAM_SLT .eq. "Ova14").OR.(CEMISPARAM_SLT .eq. "OvB21a").OR.(CEMISPARAM_SLT .eq. "OvB21b")) THEN ! Rajouter Ova14 dans fichier initialisation ZHVAGUE(:) = 0. DO II = 1, 8 -!++cb++19/10/16 modif de la formule : + de vent => vagues + hautes -! WHERE ((PWIND(:) .GT. VVENT(II)).AND.(PWIND(:) .LT. VVENT(II+1))) WHERE ((PWIND(:) .GT. VVENT(II)).AND.(PWIND(:) .LT. VVENT(II+1))) -! ZHVAGUE(:) = HVAGUE(II) + (VVENT(II+1) - PWIND(:)) * & ZHVAGUE(:) = HVAGUE(II) + (PWIND(:) - VVENT(II+1)) * & (HVAGUE(II+1) - HVAGUE(II)) / & (VVENT(II+1) - VVENT(II)) -!--cb-- ENDWHERE ENDDO @@ -183,9 +179,16 @@ IF (CEMISPARAM_SLT .eq. "Ova14") THEN ! Rajouter Ova14 dans fichier initialisati ! Unite : m².s^(-1) Pour une salinite = 35g/kg. ! En mer Mediterranee = 38.5g/kg (Lewis and Schwartz) -! Initialisation des valeurs de ZVISCO, ZREYNOLDS +! Initialisation des valeurs de ZVISCO, ZREYNOLDS Variance de pente vague vent +! 12m ZVISCO(:) = 0. ZREYNOLDS(:) = 0. + MSS(:) = 0. + PWIND12(:) = 0. + PWIND12(:)=PWIND(:)+(PUSTAR(:)/0.4)*LOG(12.5/10.0) + MSS(:)=(0.003+(0.00512*PWIND12(:)))*(0.666) ! Correction factor + ! to convert tunnel to + ! Cox and munk MSS ! Tableau d'interpolation pour calculer ZNUWATER en fonction de la SST ! Cas ou 0 < SST < 10 C @@ -214,17 +217,14 @@ IF (CEMISPARAM_SLT .eq. "Ova14") THEN ! Rajouter Ova14 dans fichier initialisati ! Calcul du nombre de Reynolds ZREYNOLDS(:) = (PUSTAR(:) * PWHEIGHT(:)) / ZVISCO(:) - ! Calcul du flux en nombre pour chaque mode ! Ovadnevaite et al. 2014 !!!!! Total number flux, Unite ZSDSLT_MDE ne correspond pas au total number !flux mais au size dependent SSA production flux - -! Ecrire equation integration pour chaque mode - !Condition d'emission : ZREYNOLDS > 1E5 + ZSFSLT_MDE(:,:) = 0. WHERE (ZREYNOLDS(:) > 1.E5) ZSFSLT_MDE(:,1) = 104.51 * ( ZREYNOLDS(:) - 1.E5)**0.556 ZSFSLT_MDE(:,2) = 0.044 * ( ZREYNOLDS(:) - 1.E5)**1.08 @@ -235,29 +235,30 @@ IF (CEMISPARAM_SLT .eq. "Ova14") THEN ! Rajouter Ova14 dans fichier initialisati ZSFSLT_MDE(:,5) = 0.52 * ( ZREYNOLDS(:) - 2.E5)**0.87 ENDWHERE - - - WHERE (ZREYNOLDS(:) <= 1.E5) + WHERE (ZREYNOLDS(:) <= 1.E5) ZSFSLT_MDE(:,1) = 1.E-10 ZSFSLT_MDE(:,2) = 1.E-10 ZSFSLT_MDE(:,3) = 1.E-10 ZSFSLT_MDE(:,4) = 1.E-10 - ENDWHERE - WHERE (ZREYNOLDS(:) <= 2.E5) ZSFSLT_MDE(:,5) = 1.E-10 ENDWHERE -! Controle avec des valeurs limites , Pas besoin de la conversion 1E4 pour Ova -! car deja en m-2 - ZSFSLT_MDE(:,1) = MAX(ZSFSLT_MDE(:,1) , 1.E-10) - ZSFSLT_MDE(:,2) = MAX(ZSFSLT_MDE(:,2) , 1.E-10) - ZSFSLT_MDE(:,3) = MAX(ZSFSLT_MDE(:,3) , 1.E-10) - ZSFSLT_MDE(:,4) = MAX(ZSFSLT_MDE(:,4) , 1.E-10) - ZSFSLT_MDE(:,5) = MAX(ZSFSLT_MDE(:,5) , 1.E-10) -!- Marine + ! Wave slope variance dependent SSGF (Bruch et al., 2021) - In #/m2/um/s + IF ((CEMISPARAM_SLT .eq. "OvB21a").AND.(JPMODE_SLT >= 6)) ZSFSLT_MDE(:,6)=(5.3824*10**6) * (MSS(:))**2.45 + IF ((CEMISPARAM_SLT .eq. "OvB21a").AND.(JPMODE_SLT >= 7)) ZSFSLT_MDE(:,7)=(1.9424*10**6) * (MSS(:))**2.30 + IF ((CEMISPARAM_SLT .eq. "OvB21a").AND.(JPMODE_SLT == 8)) ZSFSLT_MDE(:,8)=(1.3153*10**5) * (MSS(:))**2.39 + + ! Wave slope variance, wave age, and Rb dependent SSGF, (Bruch et al. 2021) - In #/m2/um/s + IF ((CEMISPARAM_SLT .eq. "OvB21b").AND.(JPMODE_SLT >= 6)) ZSFSLT_MDE(:,6)=(47.6139) * & + (((MSS(:)*PUSTAR(:)**3)*(1/(9.8*1.8*1e-5))))**0.92 + IF ((CEMISPARAM_SLT .eq. "OvB21b").AND.(JPMODE_SLT >= 7)) ZSFSLT_MDE(:,7)=(1.6849) * & + (((MSS(:)*PUSTAR(:)**3)*(1/(9.8*1.8*1e-5))))**1.41 + IF ((CEMISPARAM_SLT .eq. "OvB21b").AND.(JPMODE_SLT == 8)) ZSFSLT_MDE(:,8)=(0.4481) * & + (((MSS(:)*PUSTAR(:)**3)*(1/(9.8*1.8*1e-5))))**1.11 + ELSEIF (CEMISPARAM_SLT .eq. "Vig01") THEN -! Vignatti et al. 2001 (in particles.cm-2.s-1) : en #.cm-3 en fait +! Vignatti et al. 2001 (in particles.cm-2.s-1) ZSFSLT_MDE(:,1) = 10.**(0.09 *PWIND(:) + 0.283) ! fine mode ZSFSLT_MDE(:,2) = 10.**(0.0422*PWIND(:) + 0.288) ! median mode ZSFSLT_MDE(:,3) = 10.**(0.069 *PWIND(:) - 3.5) ! coarse mode @@ -267,24 +268,6 @@ ELSEIF (CEMISPARAM_SLT .eq. "Vig01") THEN ZSFSLT_MDE(:,2) = MAX(ZSFSLT_MDE(:,2) * 1.E4, 1.E-10) ZSFSLT_MDE(:,3) = MAX(ZSFSLT_MDE(:,3) * 1.E4, 1.E-10) ! -ELSEIF (CEMISPARAM_SLT .eq. "Sch04") THEN! Use Schultz et al., 2004 - WCL(:) = INT(PWIND(:)) - WCL(:) = MAX (0, MIN(WCL(:), 39)) - - DZSPEED(:) = MAX(0., MIN(PWIND(:) - FLOAT(WCL(:)), 1.)) - ! - ! Flux given in particles.m-2 s-1 - ! - DO JI = 1, KI - !plm-gfortran - ZSFSLT_MDE(JI,1) = NUMB1FLUX(WCL(JI)) + & - (NUMB1FLUX(WCL(JI)+1)-NUMB1FLUX(WCL(JI)))*DZSPEED(JI) - ZSFSLT_MDE(JI,2) = NUMB2FLUX(WCL(JI)) + & - (NUMB2FLUX(WCL(JI)+1)-NUMB2FLUX(WCL(JI)))*DZSPEED(JI) - ZSFSLT_MDE(JI,3) = NUMB3FLUX(WCL(JI)) + & - (NUMB3FLUX(WCL(JI)+1)-NUMB3FLUX(WCL(JI)))*DZSPEED(JI) - !plm-gfortran - END DO END IF ! DO JN = 1, JPMODE_SLT @@ -292,7 +275,6 @@ DO JN = 1, JPMODE_SLT ! convert particles.m-2 s-1 into kg.m-2.s-1 ! N'est calculé que pour le moment 3 (en masse), la conversion pour les autres ! flux de moments se fait plus tard (mode_dslt_surf.F90 MASSFLUX2MOMENTFLUX) -!+Marine ! IF (LVARSIG_SLT) THEN ! cas 3 moment @@ -313,7 +295,6 @@ DO JN = 1, JPMODE_SLT * ((SLT%XEMISRADIUS_SLT(JN)**3) & * EXP(4.5 * LOG(SLT%XEMISSIG_SLT(JN))**2)) & * ZCONVERTFACM3_SLT -! -- PIERRE / MARINE SSA - MODIF -- END IF END DO diff --git a/src/SURFEX/coupling_tebn.F90 b/src/SURFEX/coupling_tebn.F90 index 5f7072ea3ecf0e6f98a33359ac4fd703e72183a4..0a28e679e357d709c542a9e0a6546dba85044f0f 100644 --- a/src/SURFEX/coupling_tebn.F90 +++ b/src/SURFEX/coupling_tebn.F90 @@ -951,14 +951,11 @@ IF (CHT%SVT%NBEQ>0) THEN ENDIF IF (CHT%SVT%NDSTEQ>0) THEN - ! Blindage à enlever lorsque que TEB aura été corrigé - ZUSTAR(:) = MIN(ZUSTAR(:), 10.) - ZRESA (:) = MAX(ZRESA(:), 10.) ! IBEG = CHT%SVT%NSV_DSTBEG IEND = CHT%SVT%NSV_DSTEND ! - CALL DSLT_DEP(PSV(:,IBEG:IEND), PSFTS(:,IBEG:IEND), ZUSTAR, ZRESA, PTA, PRHOA, & + CALL DSLT_DEP(PSV(:,IBEG:IEND), PSFTS(:,IBEG:IEND), ZAVG_USTAR, ZAVG_RESA, PTA, PRHOA, & DST%XEMISSIG_DST, DST%XEMISRADIUS_DST, JPMODE_DST, XDENSITY_DST, & XMOLARWEIGHT_DST, ZCONVERTFACM0_DST, ZCONVERTFACM6_DST, & ZCONVERTFACM3_DST, LVARSIG_DST, LRGFIX_DST, CVERMOD ) @@ -979,7 +976,7 @@ IF (CHT%SVT%NSLTEQ>0) THEN IBEG = CHT%SVT%NSV_SLTBEG IEND = CHT%SVT%NSV_SLTEND ! - CALL DSLT_DEP(PSV(:,IBEG:IEND), PSFTS(:,IBEG:IEND), ZUSTAR, ZRESA, PTA, PRHOA, & + CALL DSLT_DEP(PSV(:,IBEG:IEND), PSFTS(:,IBEG:IEND), ZAVG_USTAR, ZAVG_RESA, PTA, PRHOA, & SLT%XEMISSIG_SLT, SLT%XEMISRADIUS_SLT, JPMODE_SLT, XDENSITY_SLT, & XMOLARWEIGHT_SLT, ZCONVERTFACM0_SLT, ZCONVERTFACM6_SLT, & ZCONVERTFACM3_SLT, LVARSIG_SLT, LRGFIX_SLT, CVERMOD ) @@ -994,6 +991,7 @@ IF (CHT%SVT%NSLTEQ>0) THEN ZCONVERTFACM6_SLT, & ZCONVERTFACM3_SLT, & LVARSIG_SLT, LRGFIX_SLT ) + ENDIF ! ! - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/src/SURFEX/get_vegtype_2_patch_mask.F90 b/src/SURFEX/get_vegtype_2_patch_mask.F90 index 93ea7f1b5dfc69270d63fafb6da26c95b31a763a..3c15e31c47ca5e11b54ecf2147c08349bc7e79a3 100644 --- a/src/SURFEX/get_vegtype_2_patch_mask.F90 +++ b/src/SURFEX/get_vegtype_2_patch_mask.F90 @@ -63,8 +63,9 @@ IF (LHOOK) CALL DR_HOOK('GET_VEGTYPE_2_PATCH_MASK',0,ZHOOK_HANDLE) KMASK(:) = 0 KK=1 !First point of vegetation-vector + DO JJ=1,KSIZE_PATCH !Number of points in the patch in question - II=KMASK_PATCH_NATURE(JJ) !Nature-index corresponding to the point in question + II=JJ !KMASK_PATCH_NATURE(JJ) !Nature-index corresponding to the point in question IF(PVEGTYPE_PATCH(II,KVEGTYPE)>0.)THEN KMASK(KK)=JJ KK=KK+1 diff --git a/src/SURFEX/init_megann.F90 b/src/SURFEX/init_megann.F90 index cfb05aecfc8ad0e6d332681ec41d1da73c983a61..bc40cc3effedf9ce126f4f528be39d67a1e3cb3b 100644 --- a/src/SURFEX/init_megann.F90 +++ b/src/SURFEX/init_megann.F90 @@ -95,7 +95,12 @@ ALLOCATE(MGN%XEF (N_MGN_SPC,SIZE(K%XCLAY,1))) ALLOCATE(MGN%XLAI (SIZE(K%XCLAY,1))) ALLOCATE(MGN%NSLTYP (SIZE(K%XCLAY,1))) ALLOCATE(MGN%XBIOFLX(SIZE(K%XCLAY,1))) +ALLOCATE(MGN%XT24(SIZE(K%XCLAY,1))) +ALLOCATE(MGN%XPPFD24(SIZE(K%XCLAY,1))) MGN%XBIOFLX(:) = 0. +MGN%XT24(:) = MGN%XDAILYTEMP +MGN%XPPFD24(:) = MGN%XDAILYPAR + ! ! Prepare the mechanism conversion between Megan and MesoNH MGN%CMECHANISM = "RELACS2" ! scheme default in MesoNH diff --git a/src/SURFEX/init_slt.F90 b/src/SURFEX/init_slt.F90 index 44e1e1bf988df95211f08f3e438b918468c72617..2182cbeb851c052aa64199836e92cc7eba49711f 100644 --- a/src/SURFEX/init_slt.F90 +++ b/src/SURFEX/init_slt.F90 @@ -5,36 +5,7 @@ SUBROUTINE INIT_SLT (SLT, & HPROGRAM &! Program calling unit ) -! ###################################################################### -! -!!**** *INIT_SLT* - -!! -!! PURPOSE -!! ------- -! -!!** METHOD -!! ------ -!! !! -!! EXTERNAL -!! -------- -!! -!! IMPLICIT ARGUMENTS -!! ------------------ -!! -!! REFERENCE -!! --------- -!! -!! -!! AUTHOR -!! ------ -!! ? -!! -!! MODIFICATIONS -!! ------------- -!! Bielli S. 02/2019 Sea salt : significant sea wave height influences salt emission; 5 salt modes -!! -!------------------------------------------------------------------------------ -! + ! USE MODD_SLT_n, ONLY : SLT_t ! @@ -57,39 +28,39 @@ INTEGER :: JMODE ! Counter for sea salt modes INTEGER :: JMODE_IDX ! Index for sea salt modes REAL(KIND=JPRB) :: ZHOOK_HANDLE + !get output listing unit IF (LHOOK) CALL DR_HOOK('INIT_SLT',0,ZHOOK_HANDLE) ! !Allocate memory for the real values which will be used by the model -ALLOCATE(SLT%XEMISRADIUS_SLT(NSLTMDE)) -ALLOCATE(SLT%XEMISSIG_SLT (NSLTMDE)) ! !Get initial size distributions. This is cut and pasted !from dead routine dstpsd.F90 !Check for different source parameterizations +! Default : CEMISPARAM_SLT.eq."Ova14" -IF (CEMISPARAM_SLT.eq."Ova14") THEN NSLTMDE = 5 -! JORDER_SLT = (/3,2,1,4,5/) !Salt modes in order of importance CRGUNITS = 'NUMB' - XEMISRADIUS_INI_SLT = (/0.009, 0.021, 0.045, 0.115, 0.415/) - XEMISSIG_INI_SLT = (/1.37, 1.5, 1.42, 1.53, 1.85/) + XEMISRADIUS_INI_SLT = (/0.009, 0.021, 0.045, 0.115, 0.415, 0.0, 0.0, 0.0/) + XEMISSIG_INI_SLT = (/1.37, 1.5, 1.42, 1.53, 1.85,0.,0.,0./) + +IF ((CEMISPARAM_SLT.eq."OvB21a").OR.(CEMISPARAM_SLT.eq."OvB21b")) THEN + NSLTMDE = 8 + CRGUNITS = 'NUMB' + XEMISRADIUS_INI_SLT = (/0.009, 0.021, 0.045, 0.115, 0.415, 2.5, 7.0, 25.0/) + XEMISSIG_INI_SLT = (/1.37, 1.5, 1.42, 1.53,1.70,1.80, 1.85, 2.1/) + -ELSE IF(CEMISPARAM_SLT.eq."Vig01") THEN +ELSE IF (CEMISPARAM_SLT.eq."Vig01") THEN NSLTMDE = 5 ! JORDER_SLT = (/3,2,1,4,5/) !Salt modes in order of importance, only three modes CRGUNITS = 'NUMB' - XEMISRADIUS_INI_SLT = (/ 0.2, 2.0, 12.,0.,0. /) ! [um] Number median radius Viganati et al., 2001 - XEMISSIG_INI_SLT = (/ 1.9, 2.0, 3.00,0.,0. /) ! [frc] Geometric standard deviation Viganati et al., 2001 - -ELSE IF(CEMISPARAM_SLT.eq."Sch04") THEN ! use default of Schultz et al, 2004 - NSLTMDE = 5 -! JORDER_SLT = (/3,2,1,4,5/), only three modes - CRGUNITS = 'MASS' - XEMISRADIUS_INI_SLT = 0.5*(/0.28, 2.25, 15.32, 0., 0./)! [um] Mass median radius - XEMISSIG_INI_SLT = (/1.59, 2.00, 2.00, 0., 0./) ! [frc] Geometric standard deviation - + XEMISRADIUS_INI_SLT = (/ 0.2, 2.0, 12.,0.,0.,0.,0.,0. /) ! [um] Number median radius Viganati et al., 2001 + XEMISSIG_INI_SLT = (/ 1.9, 2.0, 3.00,0.,0.,0.,0.,0. /) ! [frc] Geometric standard deviation Viganati et al., 2001 ENDIF + +ALLOCATE(SLT%XEMISRADIUS_SLT(NSLTMDE)) +ALLOCATE(SLT%XEMISSIG_SLT (NSLTMDE)) ! DO JMODE=1,NSLTMDE ! diff --git a/src/SURFEX/init_surf_atmn.F90 b/src/SURFEX/init_surf_atmn.F90 index 2c6c776dc8c4efdcea39793fc739980dada1926e..79f68205260d612ad491100378c53a1bb546afbd 100644 --- a/src/SURFEX/init_surf_atmn.F90 +++ b/src/SURFEX/init_surf_atmn.F90 @@ -56,6 +56,8 @@ SUBROUTINE INIT_SURF_ATM_n (YSC, HPROGRAM,HINIT, OLAND_USE, & !! M.Leriche & V. Masson 05/16 bug in write emis fields for nest !! (P.Tulet & M.Leriche) 06/2016 add MEGAN coupling !! J.Escoabr 01/2019 integrate bypass fo albedo pb > 1.0 from Florian Pantillon (Sep 2011) +!! (P.Tulet) 06/2021 add DMS chemical fluxes + !------------------------------------------------------------------------------- ! !* 0. DECLARATIONS @@ -64,6 +66,8 @@ SUBROUTINE INIT_SURF_ATM_n (YSC, HPROGRAM,HINIT, OLAND_USE, & USE MODD_TYPE_DATE_SURF, ONLY : DATE ! USE MODD_SURFEX_n, ONLY : SURFEX_t +USE MODD_DMS_n, ONLY : DMS_t + ! USE MODD_SURF_ATM, ONLY : XCO2UNCPL ! @@ -129,6 +133,10 @@ USE MODI_READ_LECOCLIMAP USE MODI_SURF_VERSION USE MODI_GET_LUOUT USE MODI_SET_SURFEX_FILEIN +!UPG*PT +USE MODI_INIT_SLT +USE MODI_READ_DMS_n +!UPG*PT ! USE MODI_INIT_CPL_GCM_n USE MODI_READ_MEGAN_n @@ -213,6 +221,7 @@ REAL, DIMENSION(:), ALLOCATABLE :: ZP_TSRAD ! radiative temperature REAL, DIMENSION(:), ALLOCATABLE :: ZP_TSURF ! surface effective temperature ! REAL, DIMENSION(:,:), ALLOCATABLE :: ZP_MEGAN_FIELDS +REAL, DIMENSION(:,:), ALLOCATABLE :: ZP_DMS_FIELDS ! REAL, DIMENSION(:), ALLOCATABLE :: ZZ0VEG REAL :: XTIME0 @@ -222,6 +231,7 @@ INTEGER :: ISIZE_FULL REAL(KIND=JPRB) :: ZHOOK_HANDLE ! INTEGER :: JJ +CHARACTER(LEN=6), DIMENSION(:),POINTER :: CNAMES !------------------------------------------------------------------------------- ! IF (LHOOK) CALL DR_HOOK('INIT_SURF_ATM_N',0,ZHOOK_HANDLE) @@ -249,7 +259,7 @@ IF (LNAM_READ) THEN ! 0.1. Hard defaults ! CALL DEFAULT_SSO(YSC%USS%CROUGH, YSC%USS%XFRACZ0, YSC%USS%XCOEFBE) - CALL DEFAULT_CH_SURF_ATM(YSC%CHU%CCHEM_SURF_FILE, YSC%CHU%LCH_SURF_EMIS) + CALL DEFAULT_CH_SURF_ATM(YSC%CHU%CCHEM_SURF_FILE, YSC%CHU%LCH_EMIS) CALL DEFAULT_DIAG_SURF_ATM(YSC%DUO%N2M, YSC%DUO%LT2MMW, YSC%DUO%LSURF_BUDGET,& YSC%DUO%L2M_MIN_ZS, YSC%DUO%LRAD_BUDGET, YSC%DUO%LCOEF,& YSC%DUO%LSURF_VARS, YSC%DUO%LSURF_BUDGETC, & @@ -400,10 +410,11 @@ ENDIF CALL INIT_CHEMICAL_n(ILUOUT, KSV, HSV, YSC%SV, & YSC%CHU%CCH_NAMES, YSC%CHU%CAER_NAMES ) ! -! 2.4 Initialize Chemical Emissions +! 2.4.1 Initialize Chemical Emissions ! - CALL READ_SURF(HPROGRAM,'CH_EMIS',YSC%CHU%LCH_EMIS,IRESP) +CALL READ_SURF(HPROGRAM,'CH_EMIS',YSC%CHU%LCH_EMIS,IRESP) ! + IF (YSC%CHU%LCH_EMIS) THEN ! IF ( IVERSION<7 .OR. IVERSION==7 .AND. IBUGFIX<3 ) THEN @@ -411,16 +422,32 @@ IF (YSC%CHU%LCH_EMIS) THEN ELSE CALL READ_SURF(HPROGRAM,'CH_EMIS_OPT',YSC%CHU%CCH_EMIS,IRESP) END IF - ! + IF (KSV == 0) THEN ! case prep_nest_pgd + CNAMES => YSC%SV%CSV + ELSE IF (YSC%SV%NSV_AEREND < 0) THEN ! case gas chemistry without aerosols + CNAMES => YSC%SV%CSV(YSC%SV%NSV_CHSBEG:YSC%SV%NSV_CHSEND) + ELSE IF (YSC%SV%NSV_AEREND > YSC%SV%NSV_CHSEND) THEN ! case gas and aerosols chemistry + CNAMES => YSC%SV%CSV(YSC%SV%NSV_CHSBEG:YSC%SV%NSV_AEREND) + ELSE + END IF + IF (YSC%CHU%CCH_EMIS=='AGGR') THEN - CALL CH_INIT_EMISSION_n(YSC%CHE, YSC%CHU%XCONVERSION, YSC%SV%CSV, & + CALL CH_INIT_EMISSION_n(YSC%CHE, YSC%CHU%XCONVERSION, CNAMES, & HPROGRAM,YSC%U%NSIZE_FULL,HINIT,PRHOA,YSC%CHU%CCHEM_SURF_FILE) - ELSE - CALL CH_INIT_SNAP_n(YSC%CHN, YSC%SV%CSV, & + ELSE IF (YSC%CHU%CCH_EMIS=='SNAP') THEN + CALL CH_INIT_SNAP_n(YSC%CHN, CNAMES, & HPROGRAM,YSC%U%NSIZE_FULL,HINIT,PRHOA,YSC%CHU%CCHEM_SURF_FILE) END IF ! ENDIF +! +! 2.4.2 Initialize sea salt aerosols distribution +! + +IF (YSC%SV%NSLTEQ >=1) THEN + CALL INIT_SLT(YSC%SLT, HPROGRAM) +END IF + ! !* 2.5 Initialization of dry deposition scheme (chemistry) ! @@ -460,6 +487,17 @@ DEALLOCATE(ZZ0VEG) IF (YSC%CHU%LCH_BIOEMIS) THEN CALL READ_MEGAN_n(YSC%IM%MSF, YSC%U, HPROGRAM) ENDIF + + +!* 2.9 DMS fields +! + CALL READ_SURF (HPROGRAM,'CH_DMSEMIS',YSC%CHU%LCH_DMSEMIS,IRESP) +! +IF (YSC%CHU%LCH_DMSEMIS) THEN + CALL READ_DMS_n(YSC%SM%DSF, YSC%U, HPROGRAM) +ENDIF +! + ! ! End of IO ! @@ -559,6 +597,17 @@ IF (YSC%U%NDIM_SEA>0) & KYEAR,KMONTH,KDAY,PTIME, HATMFILE,HATMFILETYPE, & 'OK' ) ! +! +IF (KMONTH <= 12) THEN +ALLOCATE(YSC%SM%DMS%XDMS(SIZE(ZP_DMS_FIELDS,1)) ) +IF (SIZE(ZP_DMS_FIELDS,2)==12) THEN + YSC%SM%DMS%XDMS(:) = ZP_DMS_FIELDS(:,KMONTH) +ELSE IF (SIZE(ZP_DMS_FIELDS,2)==1) THEN + YSC%SM%DMS%XDMS(:) = ZP_DMS_FIELDS(:,1) +ELSE + YSC%SM%DMS%XDMS(:) = 0. +END IF +END IF ! CALL UNPACK_SURF_INIT_ARG(JTILE,YSC%U%NSIZE_SEA,YSC%U%NR_SEA) ! @@ -700,6 +749,7 @@ ALLOCATE(ZP_ZENITH (KSIZE)) ALLOCATE(ZP_AZIM (KSIZE)) ! ALLOCATE(ZP_MEGAN_FIELDS (KSIZE,YSC%IM%MSF%NMEGAN_NBR)) +ALLOCATE(ZP_DMS_FIELDS (KSIZE,YSC%SM%DSF%NDMS_NBR)) ! ! output arguments: ! @@ -720,6 +770,7 @@ IF (KSIZE>0) THEN ZP_TSRAD = XUNDEF ZP_TSURF = XUNDEF ZP_MEGAN_FIELDS = 0. + ZP_DMS_FIELDS = 0. END IF ! DO JJ=1,KSIZE @@ -750,6 +801,14 @@ DO JJ=1,KSIZE END IF END IF END IF + IF ( YSC%SM%DSF%NDMS_NBR>0 ) THEN + IF ( ASSOCIATED(YSC%SM%DSF%XDMS_FIELDS)) THEN + IF ( SIZE(YSC%SM%DSF%XDMS_FIELDS,1)>0 ) THEN + ZP_DMS_FIELDS (JJ,:) = YSC%SM%DSF%XDMS_FIELDS(KMASK(JJ),:) + END IF + END IF + END IF + ENDDO IF (LHOOK) CALL DR_HOOK('PACK_SURF_INIT_ARG',1,ZHOOK_HANDLE) ! @@ -789,6 +848,7 @@ DEALLOCATE(ZP_EMIS ) DEALLOCATE(ZP_TSRAD ) DEALLOCATE(ZP_TSURF ) DEALLOCATE(ZP_MEGAN_FIELDS ) +DEALLOCATE(ZP_DMS_FIELDS ) IF (LHOOK) CALL DR_HOOK('UNPACK_SURF_INIT_ARG',1,ZHOOK_HANDLE) ! END SUBROUTINE UNPACK_SURF_INIT_ARG diff --git a/src/SURFEX/modd_ch_surfn.F90 b/src/SURFEX/modd_ch_surfn.F90 index 66f8d7da50f0079bf9da041921d0c85a973a392e..6114c9132946c60dc2147da017b12579bbafe55b 100644 --- a/src/SURFEX/modd_ch_surfn.F90 +++ b/src/SURFEX/modd_ch_surfn.F90 @@ -49,6 +49,9 @@ TYPE CH_SURF_t CHARACTER(LEN=4) :: CCH_BIOEMIS ! Option for MEGAN coupling activation ! 'NONE' : no coupling with MEGAN ! 'MEGA' : activate MEGAN coupling + CHARACTER(LEN=4) :: CCH_DMSEMIS ! Option for DMS fluxes activation + ! 'NONE' : no coupling with MEGAN + ! 'DMSDATA' : activate DMS fluxes CHARACTER(LEN=6), DIMENSION(:), POINTER :: CCH_NAMES ! NAME OF CHEMICAL CHARACTER(LEN=6), DIMENSION(:), POINTER :: CAER_NAMES ! NAME OF AEROSOL SPECIES ! SPECIES (FOR DIAG ONLY) @@ -63,6 +66,8 @@ TYPE CH_SURF_t ! are present in the file LOGICAL :: LCH_BIOEMIS ! T : megan emissions ! are present in the file + LOGICAL :: LCH_DMSEMIS ! T : dms data + ! are present in the file ! END TYPE CH_SURF_t @@ -77,12 +82,14 @@ IF (LHOOK) CALL DR_HOOK("MODD_CH_SURF_N:CH_SURF_INIT",0,ZHOOK_HANDLE) NULLIFY(YCH_SURF%CCH_NAMES) NULLIFY(YCH_SURF%CAER_NAMES) NULLIFY(YCH_SURF%XCONVERSION) -YCH_SURF%CCH_EMIS=' ' -YCH_SURF%CCH_BIOEMIS=' ' -YCH_SURF%CCHEM_SURF_FILE=' ' +YCH_SURF%CCH_EMIS='NONE' +YCH_SURF%CCH_BIOEMIS='NONE' +YCH_SURF%CCH_DMSEMIS='NONE' +YCH_SURF%CCHEM_SURF_FILE='EXSEG1.nam' YCH_SURF%LCH_SURF_EMIS=.FALSE. YCH_SURF%LCH_EMIS=.FALSE. YCH_SURF%LCH_BIOEMIS=.FALSE. +YCH_SURF%LCH_DMSEMIS=.FALSE. IF (LHOOK) CALL DR_HOOK("MODD_CH_SURF_N:CH_SURF_INIT",1,ZHOOK_HANDLE) END SUBROUTINE CH_SURF_INIT diff --git a/src/SURFEX/modd_isban.F90 b/src/SURFEX/modd_isban.F90 index ebab9b6f08f714acbb63206ddda07246e696f363..3c996c9c9cb1d460cd7eb055dacd835866c19d31 100644 --- a/src/SURFEX/modd_isban.F90 +++ b/src/SURFEX/modd_isban.F90 @@ -415,6 +415,7 @@ REAL, POINTER, DIMENSION(:) :: XSNOWFREE_ALB_SOIL! snow free albedo for soil REAL, POINTER, DIMENSION(:) :: XVEG ! vegetation cover fraction (-) ! REAL, POINTER, DIMENSION(:) :: XLAI ! Leaf Area Index (m2/m2) +REAL, POINTER, DIMENSION(:) :: XLAIp ! Leaf Area Index previous (m2/m2) ! REAL, POINTER, DIMENSION(:) :: XEMIS ! surface emissivity (-) REAL, POINTER, DIMENSION(:) :: XZ0 ! surface roughness length (m) @@ -675,7 +676,8 @@ TYPE(ISBA_PE_t), INTENT(INOUT) :: YISBA_PE REAL(KIND=JPRB) :: ZHOOK_HANDLE IF (LHOOK) CALL DR_HOOK("MODD_ISBA_N:ISBA_PE_INIT",0,ZHOOK_HANDLE) ! -NULLIFY(YISBA_PE%XLAI) +NULLIFY(YISBA_PE%XLAI) +NULLIFY(YISBA_PE%XLAIp) NULLIFY(YISBA_PE%XVEG) NULLIFY(YISBA_PE%XEMIS) NULLIFY(YISBA_PE%XZ0) diff --git a/src/SURFEX/modd_megann.F90 b/src/SURFEX/modd_megann.F90 index 64e310860d21159f8dd1f21a2ed1c4da0dab0d02..b862c93b75ed4382dcd3c927a4beaa4f344a993b 100644 --- a/src/SURFEX/modd_megann.F90 +++ b/src/SURFEX/modd_megann.F90 @@ -71,12 +71,17 @@ TYPE MEGAN_t INTEGER, POINTER, DIMENSION(:) :: NMECH_MAP ! index map the mecanisum species REAL, POINTER, DIMENSION(:) :: XCONV_FAC ! conversion factor of species REAL, POINTER, DIMENSION(:) :: XMECH_MWT ! molecular weight of species - REAL, POINTER, DIMENSION(:) ::XBIOFLX ! molecular weight of species + REAL, POINTER, DIMENSION(:) :: XBIOFLX ! molecular weight of species + REAL, POINTER, DIMENSION(:) :: XT24 !! average T over the past 24h + REAL, POINTER, DIMENSION(:) :: XPPFD24 !! average PAR over the past 24h + REAL, POINTER, DIMENSION(:) :: XPPFD !! par + ! END TYPE MEGAN_t CONTAINS ! + SUBROUTINE MEGAN_INIT(YMEGAN) TYPE(MEGAN_t), INTENT(INOUT) :: YMEGAN REAL(KIND=JPRB) :: ZHOOK_HANDLE @@ -92,6 +97,9 @@ NULLIFY(YMEGAN%NMECH_MAP) NULLIFY(YMEGAN%XCONV_FAC) NULLIFY(YMEGAN%XMECH_MWT) NULLIFY(YMEGAN%XBIOFLX) +NULLIFY(YMEGAN%XPPFD24) +NULLIFY(YMEGAN%XT24) +NULLIFY(YMEGAN%XPPFD) YMEGAN%NBIO=0 YMEGAN%NALKA=0 YMEGAN%NALKE=0 @@ -191,6 +199,7 @@ YMEGAN%XDROUGHT=0. YMEGAN%XDAILYPAR=150. YMEGAN%XDAILYTEMP=293. YMEGAN%XMODPREC=0. + IF (LHOOK) CALL DR_HOOK("MODD_MEGAN_n:MEGAN_INIT",1,ZHOOK_HANDLE) END SUBROUTINE MEGAN_INIT diff --git a/src/SURFEX/modd_slt_surf.F90 b/src/SURFEX/modd_slt_surf.F90 index 5a1c91c90cb2800bcd275d326c6305d6dfc37af5..73b5afe6456fc16ef3f8645f95e29d018911ccb5 100644 --- a/src/SURFEX/modd_slt_surf.F90 +++ b/src/SURFEX/modd_slt_surf.F90 @@ -11,16 +11,17 @@ MODULE MODD_SLT_SURF IMPLICIT NONE ! -REAL, PARAMETER :: XDENSITY_SLT = 2.1e3 ! [kg/m3] density of sea salt +REAL, PARAMETER :: XDENSITY_DRYSLT = 2.16e3 ! [kg/m3] density of dry sea salt +REAL, PARAMETER :: XDENSITY_SLT = 1.17e3 ! [kg/m3] density of wet sea salt REAL, PARAMETER :: XMOLARWEIGHT_SLT = 58.e-3 ! [kg/mol] molar weight sea salt ! -INTEGER, PARAMETER :: NEMISMODES_MAX=5 -INTEGER, DIMENSION(NEMISMODES_MAX), PARAMETER :: JORDER_SLT=(/1,2,3,4,5/) !Dust modes in order of importance +INTEGER, PARAMETER :: NEMISMODES_MAX=8 +INTEGER, DIMENSION(NEMISMODES_MAX), PARAMETER :: JORDER_SLT=(/1,2,3,4,5,6,7,8/) !Dust modes in order of importance !Set emission related parameters REAL,DIMENSION(NEMISMODES_MAX) :: XEMISRADIUS_INI_SLT ! number madian radius initialization for sea salt mode (um) REAL,DIMENSION(NEMISMODES_MAX) :: XEMISSIG_INI_SLT ! dispersion initialization for sea salt mode ! - CHARACTER(LEN=5) :: CEMISPARAM_SLT ! Reference to paper where emission parameterization is proposed +CHARACTER(LEN=6) :: CEMISPARAM_SLT ! Reference to paper where emission parameterization is proposed INTEGER :: JPMODE_SLT ! number of sea salt modes (max 3; default = 1) LOGICAL :: LVARSIG_SLT ! switch to active pronostic dispersion for all modes LOGICAL :: LRGFIX_SLT ! switch to active pronostic mean radius for all modes diff --git a/src/SURFEX/modd_surfexn.F90 b/src/SURFEX/modd_surfexn.F90 index 98c87269ba03a3e3720eca93a3cf68f74c72a5c9..34ee38cf973d4d581893ce4b979d6855777ef0f0 100644 --- a/src/SURFEX/modd_surfexn.F90 +++ b/src/SURFEX/modd_surfexn.F90 @@ -62,6 +62,8 @@ USE MODD_TEB_n, ONLY : TEB_NP_t USE MODD_MEGAN_n, ONLY : MEGAN_t USE MODD_MEGAN_SURF_FIELDS_n, ONLY : MEGAN_SURF_FIELDS_t ! +USE MODD_DMS_n, ONLY : DMS_t +USE MODD_DMS_SURF_FIELDS_n, ONLY : DMS_SURF_FIELDS_t !--------------------------------------------------------------------------- ! TYPE FLAKE_MODEL_t @@ -120,6 +122,9 @@ TYPE(SEAFLUX_t) :: S TYPE(OCEAN_t) :: O TYPE(OCEAN_REL_t) :: OR ! +TYPE(DMS_t) :: DMS +TYPE(DMS_SURF_FIELDS_t) :: DSF + END TYPE SEAFLUX_MODEL_t ! !-------------------------------------------------- diff --git a/src/SURFEX/modn_surf_atmn.F90 b/src/SURFEX/modn_surf_atmn.F90 index 2f5a43c7dba2847bf2d935a4f7f38d236310ca7a..f5e3ff9ab5cfc8bdc1eda7fb7301fd6f95171fa5 100644 --- a/src/SURFEX/modn_surf_atmn.F90 +++ b/src/SURFEX/modn_surf_atmn.F90 @@ -44,7 +44,7 @@ USE PARKIND1 ,ONLY : JPRB IMPLICIT NONE ! CHARACTER(LEN=28), SAVE :: CCHEM_SURF_FILE -LOGICAL, SAVE :: LCH_SURF_EMIS +LOGICAL, SAVE :: LCH_EMIS, LCH_DMSEMIS, LCH_SURF_EMIS LOGICAL :: LFRAC REAL :: XDIAG_TSTEP INTEGER :: N2M @@ -64,7 +64,7 @@ LOGICAL :: LRESETCUMUL CHARACTER(LEN=LEN_HREC), DIMENSION(4000) :: CSELECT ! NAMELIST/NAM_CH_CONTROLn/CCHEM_SURF_FILE -NAMELIST/NAM_CH_SURFn/LCH_SURF_EMIS +NAMELIST/NAM_CH_SURFn/LCH_EMIS, LCH_DMSEMIS, LCH_SURF_EMIS NAMELIST/NAM_DIAG_SURF_ATMn/LFRAC, LDIAG_GRID, LT2MMW NAMELIST/NAM_DIAG_SURFn/N2M, L2M_MIN_ZS, LSURF_BUDGET, LRAD_BUDGET, LSURF_BUDGETC, & LRESET_BUDGETC, LCOEF, LSURF_VARS @@ -114,7 +114,9 @@ SUBROUTINE INIT_NAM_CH_SURFn (CHU) REAL(KIND=JPRB) :: ZHOOK_HANDLE IF (LHOOK) CALL DR_HOOK('MODN_SURF_ATM_N:INIT_NAM_CH_SURFN',0,ZHOOK_HANDLE) + LCH_EMIS = CHU%LCH_EMIS LCH_SURF_EMIS = CHU%LCH_SURF_EMIS + LCH_DMSEMIS = CHU%LCH_DMSEMIS IF (LHOOK) CALL DR_HOOK('MODN_SURF_ATM_N:INIT_NAM_CH_SURFN',1,ZHOOK_HANDLE) END SUBROUTINE INIT_NAM_CH_SURFn @@ -129,7 +131,9 @@ SUBROUTINE UPDATE_NAM_CH_SURFn (CHU) REAL(KIND=JPRB) :: ZHOOK_HANDLE IF (LHOOK) CALL DR_HOOK('MODN_SURF_ATM_N:UPDATE_NAM_CH_SURFN',0,ZHOOK_HANDLE) + CHU%LCH_EMIS = LCH_EMIS CHU%LCH_SURF_EMIS = LCH_SURF_EMIS + CHU%LCH_DMSEMIS = LCH_DMSEMIS IF (LHOOK) CALL DR_HOOK('MODN_SURF_ATM_N:UPDATE_NAM_CH_SURFN',1,ZHOOK_HANDLE) END SUBROUTINE UPDATE_NAM_CH_SURFn diff --git a/src/SURFEX/pgd_dms.F90 b/src/SURFEX/pgd_dms.F90 new file mode 100644 index 0000000000000000000000000000000000000000..e9f1dd56d59e49ac05ad054d08a3082bf64b06f9 --- /dev/null +++ b/src/SURFEX/pgd_dms.F90 @@ -0,0 +1,197 @@ +!SFX_LIC Copyright 1994-2014 CNRS, Meteo-France and Universite Paul Sabatier +!SFX_LIC This is part of the SURFEX software governed by the CeCILL-C licence +!SFX_LIC version 1. See LICENSE, CeCILL-C_V1-en.txt and CeCILL-C_V1-fr.txt +!SFX_LIC for details. version 1. +! ######### + SUBROUTINE PGD_DMS(DTCO, UG, U, USS, DSF, HPROGRAM, OCH_DMSEMIS) +! ############################################################## +! +!!**** *PGD_DMS* monitor for averaging and interpolations of physiographic fields +!! +!! PURPOSE +!! ------- +!! +!! METHOD +!! ------ +!! +! +!! EXTERNAL +!! -------- +!! +!! IMPLICIT ARGUMENTS +!! ------------------ +!! +!! REFERENCE +!! --------- +!! +!! AUTHOR +!! ------ +!! +!! P. Tulet *LAERO* +!! +!! MODIFICATION +!! ------------ +!! +!! +!---------------------------------------------------------------------------- +! +!* 0. DECLARATION +! ----------- +! +USE MODD_DATA_COVER_n, ONLY : DATA_COVER_t +USE MODD_SURF_ATM_GRID_n, ONLY : SURF_ATM_GRID_t +USE MODD_SURF_ATM_n, ONLY : SURF_ATM_t +USE MODD_SSO_n, ONLY : SSO_t +USE MODD_DMS_SURF_FIELDS_n,ONLY : DMS_SURF_FIELDS_t +! +USE MODD_PGD_GRID, ONLY : NL +USE MODD_PGDWORK, ONLY : CATYPE +USE MODD_SURF_PAR, ONLY : XUNDEF +! +USE MODI_GET_LUOUT +USE MODI_PGD_FIELD +USE MODI_READ_NAM_PGD_DMS +USE MODI_UNPACK_SAME_RANK +USE MODI_GET_SURF_SIZE_n +USE MODI_GET_SURF_MASK_n +! +USE MODE_POS_SURF +! +! +USE YOMHOOK ,ONLY : LHOOK, DR_HOOK +USE PARKIND1 ,ONLY : JPRB +! +IMPLICIT NONE +! +!* 0.1 Declaration of arguments +! ------------------------ +! +TYPE(DATA_COVER_t), INTENT(INOUT) :: DTCO +TYPE(SURF_ATM_GRID_t), INTENT(INOUT) :: UG +TYPE(SURF_ATM_t), INTENT(INOUT) :: U +TYPE(SSO_t), INTENT(INOUT) :: USS +TYPE(DMS_SURF_FIELDS_t), INTENT(INOUT) :: DSF +! +CHARACTER(LEN=6), INTENT(IN) :: HPROGRAM ! Type of program +LOGICAL, INTENT(OUT) :: OCH_DMSEMIS ! emission flag + +! +! +!* 0.2 Declaration of local variables +! ------------------------------ +! +INTEGER :: ILUOUT ! output listing logical unit +INTEGER :: JNBR ! loop counter on dummy fields +INTEGER :: ILU, IL_SEA, IL_LAND, IL +! +!* 0.3 Declaration of namelists +! ------------------------ +! +INTEGER :: IDMS_NBR +CHARACTER(LEN=20), DIMENSION(1000) :: YDMS_NAME +CHARACTER(LEN=3), DIMENSION(1000) :: YDMS_AREA +CHARACTER(LEN=3), DIMENSION(1000) :: CDMS_ATYPE ! avg type for dummy pgd fields +! ! 'ARI' , 'INV' +CHARACTER(LEN=28), DIMENSION(1000) :: CDMS_FILE ! data files +CHARACTER(LEN=6), DIMENSION(1000) :: CDMS_FILETYPE ! type of these files +REAL, DIMENSION(:), ALLOCATABLE :: ZDMS_FIELD, ZDMS_FIELDS +INTEGER, DIMENSION(:), ALLOCATABLE :: IMASK +CHARACTER(LEN=6) :: YMASK +REAL(KIND=JPRB) :: ZHOOK_HANDLE +! +!------------------------------------------------------------------------------- +! +!* 1. Initializations of defaults +! --------------------------- +! +IF (LHOOK) CALL DR_HOOK('PGD_DMS',0,ZHOOK_HANDLE) + CALL GET_LUOUT(HPROGRAM,ILUOUT) +! +!------------------------------------------------------------------------------- +! +!* 2. Reading of namelist +! ------------------- +! + CALL READ_NAM_PGD_DMS(HPROGRAM, IDMS_NBR, YDMS_NAME, YDMS_AREA, & + CDMS_ATYPE, CDMS_FILE, CDMS_FILETYPE ) +! +DSF%NDMS_NBR = IDMS_NBR +! +ALLOCATE(DSF%CDMS_NAME(DSF%NDMS_NBR)) +ALLOCATE(DSF%CDMS_AREA(DSF%NDMS_NBR)) +DSF%CDMS_NAME(:) = YDMS_NAME(1:DSF%NDMS_NBR) +DSF%CDMS_AREA(:) = YDMS_AREA(1:DSF%NDMS_NBR) +! +!------------------------------------------------------------------------------- +! +!* 3. Allocation +! ---------- +! +ALLOCATE(DSF%XDMS_FIELDS(NL,DSF%NDMS_NBR)) + CALL GET_SURF_SIZE_n(DTCO, U,'LAND', IL_LAND) + CALL GET_SURF_SIZE_n(DTCO, U,'SEA ',IL_SEA) +! +ALLOCATE(ZDMS_FIELDS (NL)) +! +!------------------------------------------------------------------------------- +OCH_DMSEMIS = DSF%NDMS_NBR > 0 +!------------------------------------------------------------------------------- +! +! +!* 4. Computations +! ------------ +! +DO JNBR=1,DSF%NDMS_NBR + + CATYPE = CDMS_ATYPE(JNBR) + SELECT CASE (DSF%CDMS_AREA(JNBR)) + CASE ('LAN') + IL = IL_LAND + YMASK='LAND ' + CASE ('SEA') + IL = IL_SEA + YMASK='SEA ' + CASE ('ALL') + IL = NL + YMASK='FULL ' + CASE DEFAULT + CALL ABOR1_SFX('PGD_DMS (1): DMS AREA NOT SUPPORTED') + END SELECT + ALLOCATE(ZDMS_FIELD (IL)) + ALLOCATE(IMASK(IL)) +! + CALL PGD_FIELD(DTCO, UG, U, USS, & + HPROGRAM,DSF%CDMS_NAME(JNBR),DSF%CDMS_AREA(JNBR),CDMS_FILE(JNBR), & + CDMS_FILETYPE(JNBR),XUNDEF,ZDMS_FIELD(:) ) + CATYPE = 'ARI' +! +!* 4.2 Expends field on all surface points + ILU=0 + CALL GET_SURF_MASK_n(DTCO, U, & + YMASK,IL,IMASK,ILU,ILUOUT) + CALL UNPACK_SAME_RANK(IMASK,ZDMS_FIELD(:),ZDMS_FIELDS(:)) + DEALLOCATE(ZDMS_FIELD) + DEALLOCATE(IMASK) +! +!* 4.3 Weights field on all surface points +! (zero weight where field is not defined) + SELECT CASE (DSF%CDMS_AREA(JNBR)) + CASE ('LAN') + DSF%XDMS_FIELDS(:,JNBR) = (U%XNATURE(:)+U%XTOWN(:))*ZDMS_FIELDS(:) + CASE ('SEA') + DSF%XDMS_FIELDS(:,JNBR) = U%XSEA*ZDMS_FIELDS(:) + CASE ('ALL') + DSF%XDMS_FIELDS(:,JNBR) = ZDMS_FIELDS(:) + CASE DEFAULT + CALL ABOR1_SFX('PGD_DMS (2): DMS AREA NOT SUPPORTED') + END SELECT + +END DO + +DEALLOCATE(ZDMS_FIELDS) + +IF (LHOOK) CALL DR_HOOK('PGD_DMS',1,ZHOOK_HANDLE) +! +!------------------------------------------------------------------------------- +! +END SUBROUTINE PGD_DMS diff --git a/src/SURFEX/pgd_surf_atm.F90 b/src/SURFEX/pgd_surf_atm.F90 index 412f22a84e32465341060182435d27a86e04bcbe..98539d8166cadaeef2d6010976256f496d3645c8 100644 --- a/src/SURFEX/pgd_surf_atm.F90 +++ b/src/SURFEX/pgd_surf_atm.F90 @@ -76,6 +76,7 @@ USE MODI_PGD_CHEMISTRY_SNAP USE MODI_WRITE_COVER_TEX_END USE MODI_INIT_READ_DATA_COVER USE MODI_PGD_MEGAN +USE MODI_PGD_DMS ! USE YOMHOOK ,ONLY : LHOOK, DR_HOOK USE PARKIND1 ,ONLY : JPRB @@ -223,7 +224,7 @@ IF (YSC%U%NDIM_SEA>0) CALL PGD_SEA(YSC%DTCO, YSC%SM%DTS, YSC%SM%G, YSC%SM%S, & !* 10. Chemical Emission fields ! ------------------------ ! - CALL READ_NAM_PGD_CHEMISTRY(HPROGRAM,YSC%CHU%CCH_EMIS,YSC%CHU%CCH_BIOEMIS) + CALL READ_NAM_PGD_CHEMISTRY(HPROGRAM,YSC%CHU%CCH_EMIS,YSC%CHU%CCH_BIOEMIS,YSC%CHU%CCH_DMSEMIS) IF (YSC%CHU%CCH_EMIS=='SNAP') THEN CALL PGD_CHEMISTRY_SNAP(YSC%CHN, YSC%DTCO, YSC%UG, YSC%U, YSC%USS, & HPROGRAM,YSC%CHU%LCH_EMIS) @@ -235,6 +236,10 @@ IF (YSC%CHU%CCH_BIOEMIS=='MEGA') THEN CALL PGD_MEGAN(YSC%DTCO, YSC%UG, YSC%U, YSC%USS, YSC%IM%MSF, & HPROGRAM,YSC%CHU%LCH_BIOEMIS) ENDIF +IF (YSC%CHU%CCH_DMSEMIS=='DMSD') THEN + CALL PGD_DMS(YSC%DTCO, YSC%UG, YSC%U, YSC%USS, YSC%SM%DSF, & + HPROGRAM,YSC%CHU%LCH_DMSEMIS) +ENDIF !_______________________________________________________________________________ ! !* 11. Writing in cover latex file diff --git a/src/SURFEX/put_sfxcpln.F90 b/src/SURFEX/put_sfxcpln.F90 index 99066282d4ac41d11fe03c71e90ec7747611f926..f1f2df37c677377d0abec1e95202d8ec6f7d5e66 100644 --- a/src/SURFEX/put_sfxcpln.F90 +++ b/src/SURFEX/put_sfxcpln.F90 @@ -3,7 +3,7 @@ !SFX_LIC version 1. See LICENSE, CeCILL-C_V1-en.txt and CeCILL-C_V1-fr.txt !SFX_LIC for details. version 1. ! ######### -SUBROUTINE PUT_SFXCPL_n (F, IM, S, U, W, & +SUBROUTINE PUT_SFXCPL_n (F, IM, S, U, W, TM, GDM, GRM, & HPROGRAM,KI,KSW,PSW_BANDS,PZENITH, & PLAND_WTD,PLAND_FWTD,PLAND_FFLOOD, & PLAND_PIFLOOD,PSEA_SST,PSEA_UCU, & @@ -49,7 +49,8 @@ SUBROUTINE PUT_SFXCPL_n (F, IM, S, U, W, & ! ------------ ! USE MODD_FLAKE_n, ONLY : FLAKE_t -USE MODD_SURFEX_n, ONLY : ISBA_MODEL_t +USE MODD_SURFEX_n, ONLY : ISBA_MODEL_t, TEB_MODEL_t, & + TEB_GARDEN_MODEL_t,TEB_GREENROOF_MODEL_t USE MODD_SEAFLUX_n, ONLY : SEAFLUX_t USE MODD_SURF_ATM_n, ONLY : SURF_ATM_t USE MODD_WATFLUX_n, ONLY : WATFLUX_t @@ -83,6 +84,9 @@ TYPE(ISBA_MODEL_t), INTENT(INOUT) :: IM TYPE(SEAFLUX_t), INTENT(INOUT) :: S TYPE(SURF_ATM_t), INTENT(INOUT) :: U TYPE(WATFLUX_t), INTENT(INOUT) :: W +TYPE(TEB_MODEL_t), INTENT(INOUT) :: TM +TYPE(TEB_GARDEN_MODEL_t), INTENT(INOUT) :: GDM +TYPE(TEB_GREENROOF_MODEL_t), INTENT(INOUT) :: GRM ! CHARACTER(LEN=6), INTENT(IN) :: HPROGRAM INTEGER, INTENT(IN) :: KI ! number of points @@ -174,8 +178,8 @@ ENDIF !------------------------------------------------------------------------------- ! IF(LCPL_SEA.OR.LCPL_FLOOD)THEN - CALL UPDATE_ESM_SURF_ATM_n(F, IM, S, U, W, HPROGRAM, KI, KSW, PZENITH, PSW_BANDS, & - PTSRAD, PDIR_ALB, PSCA_ALB, PEMIS, PTSURF ) + CALL UPDATE_ESM_SURF_ATM_n(F, IM, S, U, W, TM, GDM, GRM, HPROGRAM, KI, KSW, PZENITH, & + PSW_BANDS, PTSRAD, PDIR_ALB, PSCA_ALB, PEMIS, PTSURF ) ENDIF ! !------------------------------------------------------------------------------- diff --git a/src/SURFEX/read_nam_pgd_chemistry.F90 b/src/SURFEX/read_nam_pgd_chemistry.F90 index 30abbf33b6c812c11922bbc0c313307f25e9f92c..97115b11a05982c09acb9f162a7150813a697ad1 100644 --- a/src/SURFEX/read_nam_pgd_chemistry.F90 +++ b/src/SURFEX/read_nam_pgd_chemistry.F90 @@ -3,7 +3,7 @@ !SFX_LIC version 1. See LICENSE, CeCILL-C_V1-en.txt and CeCILL-C_V1-fr.txt !SFX_LIC for details. version 1. ! ######### - SUBROUTINE READ_NAM_PGD_CHEMISTRY(HPROGRAM, HCH_EMIS, HCH_BIOEMIS ) + SUBROUTINE READ_NAM_PGD_CHEMISTRY(HPROGRAM, HCH_EMIS, HCH_BIOEMIS, HCH_DMSEMIS) ! ############################################################## ! !!**** *READ_NAM_PGD_CHEMISTRY* reads namelist for CHEMISTRY @@ -34,6 +34,7 @@ !! !! Original 09/2011 !! M. Leriche 06/17 add coupling MEGAN +!! P. Tulet 06/21 add DMS data base !---------------------------------------------------------------------------- ! !* 0. DECLARATION @@ -59,6 +60,7 @@ IMPLICIT NONE CHARACTER(LEN=6), INTENT(IN) :: HPROGRAM ! Type of program CHARACTER(LEN=4), INTENT(OUT) :: HCH_EMIS ! Option for emissions computations CHARACTER(LEN=4), INTENT(OUT) :: HCH_BIOEMIS ! Option for activating MEGAN coupling +CHARACTER(LEN=4), INTENT(OUT) :: HCH_DMSEMIS ! Option for activating DMS fluxes ! !* 0.2 Declaration of local variables ! ------------------------------ @@ -72,9 +74,10 @@ LOGICAL :: GFOUND ! flag when namelist is present ! CHARACTER(LEN=4) :: CCH_EMIS CHARACTER(LEN=4) :: CCH_BIOEMIS +CHARACTER(LEN=4) :: CCH_DMSEMIS REAL(KIND=JPRB) :: ZHOOK_HANDLE ! -NAMELIST/NAM_CH_EMISSIONS/ CCH_EMIS, CCH_BIOEMIS +NAMELIST/NAM_CH_EMISSIONS/ CCH_EMIS, CCH_BIOEMIS, CCH_DMSEMIS ! !------------------------------------------------------------------------------- ! @@ -84,6 +87,7 @@ NAMELIST/NAM_CH_EMISSIONS/ CCH_EMIS, CCH_BIOEMIS IF (LHOOK) CALL DR_HOOK('READ_NAM_PGD_CHEMISTRY',0,ZHOOK_HANDLE) CCH_EMIS = 'NONE' CCH_BIOEMIS = 'NONE' +CCH_DMSEMIS = 'NONE' ! CALL GET_LUOUT(HPROGRAM,ILUOUT) ! @@ -99,6 +103,7 @@ IF (GFOUND) READ(UNIT=ILUNAM,NML=NAM_CH_EMISSIONS) ! CALL TEST_NAM_VAR_SURF(ILUOUT,'CCH_EMIS',CCH_EMIS,'NONE','AGGR','SNAP') CALL TEST_NAM_VAR_SURF(ILUOUT,'CCH_BIOEMIS',CCH_BIOEMIS,'NONE','MEGA') +CALL TEST_NAM_VAR_SURF(ILUOUT,'CCH_DMSEMIS',CCH_DMSEMIS,'NONE','DMSD') ! CALL CLOSE_NAMELIST(HPROGRAM,ILUNAM) ! @@ -106,6 +111,7 @@ CALL CLOSE_NAMELIST(HPROGRAM,ILUNAM) ! HCH_EMIS = CCH_EMIS HCH_BIOEMIS = CCH_BIOEMIS +HCH_DMSEMIS = CCH_DMSEMIS ! IF (LHOOK) CALL DR_HOOK('READ_NAM_PGD_CHEMISTRY',1,ZHOOK_HANDLE) ! diff --git a/src/SURFEX/read_nam_pgd_dms.F90 b/src/SURFEX/read_nam_pgd_dms.F90 new file mode 100644 index 0000000000000000000000000000000000000000..2cccb4f88d551934257adb9c72b8ed47f12338f0 --- /dev/null +++ b/src/SURFEX/read_nam_pgd_dms.F90 @@ -0,0 +1,154 @@ +!SURFEX_LIC Copyright 1994-2014 Meteo-France +!SURFEX_LIC This is part of the SURFEX software governed by the CeCILL-C licence +!SURFEX_LIC version 1. See LICENSE, CeCILL-C_V1-en.txt and CeCILL-C_V1-fr.txt +!SURFEX_LIC for details. version 1. +! ######### + SUBROUTINE READ_NAM_PGD_DMS(HPROGRAM, KDMS_NBR, HDMS_NAME, HDMS_AREA, & + HDMS_ATYPE, HDMS_FILE, HDMS_FILETYPE ) +! ############################################################## +! +!!**** *READ_NAM_PGD_DMS* reads namelist NAM_DMS_PGD +!! +!! PURPOSE +!! ------- +!! +!! METHOD +!! ------ +!! +! +!! EXTERNAL +!! -------- +!! +!! IMPLICIT ARGUMENTS +!! ------------------ +!! +!! REFERENCE +!! --------- +!! +!! AUTHOR +!! ------ +!! +!! P. Tulet *LAERO* +!! +!! MODIFICATION +!! ------------ +!! +!! Original 06/2021 +!! +!---------------------------------------------------------------------------- +! +!* 0. DECLARATION +! ----------- +! +USE MODI_GET_LUOUT +USE MODI_OPEN_NAMELIST +USE MODI_CLOSE_NAMELIST +! +USE MODE_POS_SURF +! +! +USE YOMHOOK ,ONLY : LHOOK, DR_HOOK +USE PARKIND1 ,ONLY : JPRB +! +IMPLICIT NONE +! +!* 0.1 Declaration of arguments +! ------------------------ +! + CHARACTER(LEN=6), INTENT(IN) :: HPROGRAM ! Type of program +INTEGER, INTENT(OUT) :: KDMS_NBR +! ! number of megan pgd fields chosen by user + CHARACTER(LEN=20), DIMENSION(1000), INTENT(OUT) :: HDMS_NAME +! ! name of the megan pgd fields (for information) + CHARACTER(LEN=3), DIMENSION(1000), INTENT(OUT) :: HDMS_AREA +! ! areas where megan pgd fields are defined +! ! 'ALL' : everywhere +! ! 'SEA' : where sea exists +! ! 'LAN' : where land exists +! ! 'WAT' : where inland water exists +! ! 'NAT' : where natural or agricultural areas exist +! ! 'TWN' : where town areas exist +! ! 'STR' : where streets are present +! ! 'BLD' : where buildings are present + CHARACTER(LEN=3), DIMENSION(1000), INTENT(OUT) :: HDMS_ATYPE ! avg type for megan pgd fields +! ! 'ARI' , 'INV' + CHARACTER(LEN=28), DIMENSION(1000), INTENT(OUT) :: HDMS_FILE ! data files + CHARACTER(LEN=6), DIMENSION(1000), INTENT(OUT) :: HDMS_FILETYPE ! type of these files +! +! +!* 0.2 Declaration of local variables +! ------------------------------ +! +INTEGER :: ILUOUT ! output listing logical unit +INTEGER :: ILUNAM ! namelist file logical unit +LOGICAL :: GFOUND ! flag when namelist is present +! +!* 0.3 Declaration of namelists +! ------------------------ +! +INTEGER :: NDMS_NBR +! ! number of megan pgd fields chosen by user + CHARACTER(LEN=20), DIMENSION(1000) :: CDMS_NAME +! ! name of the megan pgd fields (for information) + CHARACTER(LEN=3), DIMENSION(1000) :: CDMS_AREA +! ! areas where megan pgd fields are defined +! ! 'ALL' : everywhere +! ! 'SEA' : where sea exists +! ! 'LAN' : where land exists +! ! 'WAT' : where inland water exists +! ! 'NAT' : where natural or agricultural areas exist +! ! 'TWN' : where town areas exist +! ! 'STR' : where streets are present +! ! 'BLD' : where buildings are present + CHARACTER(LEN=3), DIMENSION(1000) :: CDMS_ATYPE ! avg type for megan pgd fields +! ! 'ARI' , 'INV' + CHARACTER(LEN=28), DIMENSION(1000) :: CDMS_FILE ! data files + CHARACTER(LEN=6), DIMENSION(1000) :: CDMS_FILETYPE ! type of these files +REAL(KIND=JPRB) :: ZHOOK_HANDLE +! +NAMELIST/NAM_DMS_PGD/ NDMS_NBR, CDMS_NAME, CDMS_AREA, & + CDMS_ATYPE, CDMS_FILE, CDMS_FILETYPE +!------------------------------------------------------------------------------- +! +!* 1. Initializations of defaults +! --------------------------- +! +IF (LHOOK) CALL DR_HOOK('READ_NAM_PGD_DMS',0,ZHOOK_HANDLE) +NDMS_NBR = 0 +! +CDMS_NAME = " " +CDMS_FILE = " " +CDMS_FILETYPE = " " +CDMS_AREA = "ALL" +CDMS_ATYPE = "ARI" +! + CALL GET_LUOUT(HPROGRAM,ILUOUT) +! +!------------------------------------------------------------------------------- +! +!* 2. Reading of namelist +! ------------------- +! + CALL OPEN_NAMELIST(HPROGRAM,ILUNAM) +! + CALL POSNAM(ILUNAM,'NAM_DMS_PGD',GFOUND,ILUOUT) +IF (GFOUND) READ(UNIT=ILUNAM,NML=NAM_DMS_PGD) +! + CALL CLOSE_NAMELIST(HPROGRAM,ILUNAM) +! +!------------------------------------------------------------------------------- +! +!* 3. Fills output arguments +! ---------------------- +! +KDMS_NBR = NDMS_NBR +HDMS_NAME(:) = CDMS_NAME(:) +HDMS_AREA(:) = CDMS_AREA(:) +HDMS_ATYPE(:) = CDMS_ATYPE(:) +HDMS_FILE(:) = CDMS_FILE(:) +HDMS_FILETYPE(:) = CDMS_FILETYPE(:) +IF (LHOOK) CALL DR_HOOK('READ_NAM_PGD_DMS',1,ZHOOK_HANDLE) +! +!------------------------------------------------------------------------------- +! +END SUBROUTINE READ_NAM_PGD_DMS diff --git a/src/SURFEX/surfex_alloc.F90 b/src/SURFEX/surfex_alloc.F90 index 41b4953c397b2b95b3608e8fc6f4b9271e3c124b..ca482ecd35201f9044455ecdbf1740f265ae298d 100644 --- a/src/SURFEX/surfex_alloc.F90 +++ b/src/SURFEX/surfex_alloc.F90 @@ -66,6 +66,9 @@ USE MODD_ISBA_OPTIONS_n, ONLY : ISBA_OPTIONS_INIT USE MODD_ISBA_n, ONLY : ISBA_S_INIT, ISBA_K_INIT, ISBA_P_INIT, & ISBA_NK_INIT, ISBA_NP_INIT, ISBA_NPE_INIT ! +USE MODD_DMS_n, ONLY : DMS_INIT +USE MODD_DMS_SURF_FIELDS_n, ONLY : DMS_SURF_FIELDS_INIT + USE MODD_MEGAN_n, ONLY : MEGAN_INIT USE MODD_MEGAN_SURF_FIELDS_n, ONLY : MEGAN_SURF_FIELDS_INIT ! @@ -156,6 +159,9 @@ IF (LHOOK) CALL DR_HOOK("SURFEX_ALLOC",0,ZHOOK_HANDLE) CALL MEGAN_INIT(YDSURFEX%IM%MGN) CALL MEGAN_SURF_FIELDS_INIT(YDSURFEX%IM%MSF) ! + CALL DMS_INIT(YDSURFEX%SM%DMS) + CALL DMS_SURF_FIELDS_INIT(YDSURFEX%SM%DSF) + ! CALL DIAG_NP_INIT(YDSURFEX%GDM%VD%ND,NTEB_PATCH_MAX) CALL DIAG_EVAP_ISBA_NP_INIT(YDSURFEX%GDM%VD%NDE,NTEB_PATCH_MAX) CALL DIAG_EVAP_ISBA_NP_INIT(YDSURFEX%GDM%VD%NDEC,NTEB_PATCH_MAX) diff --git a/src/SURFEX/update_esm_surf_atmn.F90 b/src/SURFEX/update_esm_surf_atmn.F90 index f935bf35ca83798e7fdfc0454a58289c6413f88b..6d1ec26123949feb9e2755b27a18caac086281d9 100644 --- a/src/SURFEX/update_esm_surf_atmn.F90 +++ b/src/SURFEX/update_esm_surf_atmn.F90 @@ -3,8 +3,8 @@ !SFX_LIC version 1. See LICENSE, CeCILL-C_V1-en.txt and CeCILL-C_V1-fr.txt !SFX_LIC for details. version 1. ! ################################################################################# -SUBROUTINE UPDATE_ESM_SURF_ATM_n (F, IM, S, U, W, HPROGRAM, KI, KSW, PZENITH, PSW_BANDS, & - PTRAD, PDIR_ALB, PSCA_ALB, PEMIS, PTSURF ) +SUBROUTINE UPDATE_ESM_SURF_ATM_n (F, IM, S, U, W, TM, GDM, GRM, HPROGRAM, KI, KSW, PZENITH, & + PSW_BANDS, PTRAD, PDIR_ALB, PSCA_ALB, PEMIS, PTSURF ) ! ################################################################################# ! !!**** *UPDATE_ESM_SURF_ATM_n * - Routine to update radiative properties in Earth @@ -30,14 +30,17 @@ SUBROUTINE UPDATE_ESM_SURF_ATM_n (F, IM, S, U, W, HPROGRAM, KI, KSW, PZENITH, PS !! ------------- !! Original 09/2009 !! B. Decharme 06/2013 new coupling variables +!! C. Lebeaupin 01/2020 add teb option +!! !!------------------------------------------------------------- ! ! -USE MODD_FLAKE_n, ONLY : FLAKE_t -USE MODD_SURFEX_n, ONLY : ISBA_MODEL_t -USE MODD_SEAFLUX_n, ONLY : SEAFLUX_t -USE MODD_SURF_ATM_n, ONLY : SURF_ATM_t -USE MODD_WATFLUX_n, ONLY : WATFLUX_t +USE MODD_FLAKE_n, ONLY : FLAKE_t +USE MODD_SURFEX_n, ONLY : ISBA_MODEL_t,TEB_MODEL_t, & + TEB_GARDEN_MODEL_t,TEB_GREENROOF_MODEL_t +USE MODD_SEAFLUX_n, ONLY : SEAFLUX_t +USE MODD_SURF_ATM_n, ONLY : SURF_ATM_t +USE MODD_WATFLUX_n, ONLY : WATFLUX_t ! USE MODD_SURF_PAR, ONLY : XUNDEF ! @@ -56,23 +59,28 @@ USE MODI_UPDATE_ESM_ISBA_n USE MODI_UPDATE_ESM_SEAFLUX_n USE MODI_UPDATE_ESM_WATFLUX_n USE MODI_UPDATE_ESM_FLAKE_n +USE MODI_UPDATE_ESM_TEB_n ! IMPLICIT NONE ! !* 0.1 declarations of arguments ! ! -TYPE(FLAKE_t), INTENT(INOUT) :: F +TYPE(FLAKE_t), INTENT(INOUT) :: F TYPE(ISBA_MODEL_t), INTENT(INOUT) :: IM -TYPE(SEAFLUX_t), INTENT(INOUT) :: S -TYPE(SURF_ATM_t), INTENT(INOUT) :: U -TYPE(WATFLUX_t), INTENT(INOUT) :: W +TYPE(SEAFLUX_t), INTENT(INOUT) :: S +TYPE(SURF_ATM_t), INTENT(INOUT) :: U +TYPE(WATFLUX_t), INTENT(INOUT) :: W +TYPE(TEB_MODEL_t), INTENT(INOUT) :: TM +TYPE(TEB_GARDEN_MODEL_t), INTENT(INOUT) :: GDM +TYPE(TEB_GREENROOF_MODEL_t), INTENT(INOUT) :: GRM + ! - CHARACTER(LEN=6), INTENT(IN) :: HPROGRAM ! program calling surf. schemes + CHARACTER(LEN=6), INTENT(IN) :: HPROGRAM ! program calling surf. schemes INTEGER, INTENT(IN) :: KI ! number of points INTEGER, INTENT(IN) :: KSW ! number of short-wave spectral bands -REAL, DIMENSION(KI), INTENT(IN) :: PZENITH ! zenithal angle (radian from the vertical) -REAL, DIMENSION(KSW), INTENT(IN) :: PSW_BANDS ! mean wavelength of each shortwave band (m) +REAL, DIMENSION(KI), INTENT(IN) :: PZENITH ! zenithal angle (radian from the vertical) +REAL, DIMENSION(KSW), INTENT(IN) :: PSW_BANDS ! mean wavelength of each shortwave band (m) ! REAL, DIMENSION(KI), INTENT(OUT) :: PTRAD ! radiative temperature (K) REAL, DIMENSION(KI,KSW),INTENT(OUT) :: PDIR_ALB ! direct albedo for each spectral band (-) @@ -108,7 +116,9 @@ GNATURE = (U%NSIZE_NATURE >0 .AND. U%CNATURE/='NONE') ! GTOWN = U%NSIZE_TOWN >0 IF(GTOWN)THEN - CALL ABOR1_SFX('UPDATE_ESM_SURF_ATM_n: TOWN SCHEME NOT YET AVAILABLE FOR EARTH SYSTEM MODEL') + IF ((HPROGRAM/='OFFLIN').AND.(HPROGRAM/='MESONH').AND.(HPROGRAM/='AROME ')) THEN + CALL ABOR1_SFX('UPDATE_ESM_SURF_ATM_n: TOWN SCHEME NOT YET AVAILABLE FOR EARTH SYSTEM MODEL') + ENDIF ENDIF ! ! Tile counter: @@ -175,17 +185,16 @@ ENDIF ! - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - ! URBAN Tile calculations: ! - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -! Not yet implemented ! -!JTILE = JTILE + 1 +JTILE = JTILE + 1 ! -!IF(GTOWN)THEN +IF(GTOWN)THEN ! -! ZFRAC_TILE(:,JTILE) = XTOWN(:) + ZFRAC_TILE(:,JTILE) = U%XTOWN(:) ! -! CALL TREAT_SURF(NSIZE_TOWN,NR_TOWN,JTILE) + CALL TREAT_SURF(U%NSIZE_TOWN,U%NR_TOWN,JTILE) ! -!ENDIF +ENDIF ! ! - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - ! Grid box average radiative properties: @@ -265,13 +274,15 @@ ELSEIF (KTILE==3) THEN CALL ABOR1_SFX('UPDATE_ESM_SURF_ATM_n: NATURE SCHEME MUST BE ACTIVATED FOR EARTH SYSTEM MODEL') ENDIF ! -!ELSEIF (KTILE==4) THEN -! ! -! IF (CTOWN=='TEB ') THEN -! CALL UPDATE_ESM_TEB_n(NSIZE_SEA,KSW,ZP_ZENITH,ZP_TRAD,ZP_DIR_ALB,ZP_SCA_ALB,ZP_EMIS,ZP_TSURF) -! ELSE -! CALL ABOR1_SFX('UPDATE_ESM_SURF_ATM_n: TEB SCHEME MUST BE ACTIVATED FOR EARTH SYSTEM MODEL') -! ENDIF +ELSEIF (KTILE==4) THEN + ! + IF (U%CTOWN=='TEB ') THEN + CALL UPDATE_ESM_TEB_n(TM%TOP, TM%TPN, TM%NT, TM%NB, GDM, GRM, U%NSIZE_TOWN, & + KSW,ZP_ZENITH,PSW_BANDS,ZP_DIR_ALB,ZP_SCA_ALB,& + ZP_EMIS,ZP_TRAD,ZP_TSURF) + ELSE + CALL ABOR1_SFX('UPDATE_ESM_SURF_ATM_n: TEB SCHEME MUST BE ACTIVATED FOR EARTH SYSTEM MODEL') + ENDIF ! ! ENDIF ! diff --git a/src/SURFEX/update_esm_tebn.F90 b/src/SURFEX/update_esm_tebn.F90 new file mode 100644 index 0000000000000000000000000000000000000000..5ae13b2a4ac1078716aa5f693c1285be493f3b42 --- /dev/null +++ b/src/SURFEX/update_esm_tebn.F90 @@ -0,0 +1,199 @@ +! ####################################################################################### + SUBROUTINE UPDATE_ESM_TEB_n(TOP, TPN, NT, NB, GDM, GRM, KI,KSW,PZENITH,PSW_BANDS,& + PDIR_ALB,PSCA_ALB,PEMIS,PTSRAD,PTSURF) +! ####################################################################################### +! +!!**** *UPDATE_ESM_TEB_n* - routine to update TEB radiative properties in Earth +!! System Model after the call to OASIS coupler in order +!! to close the energy budget between radiative scheme and surfex +!! +!! PURPOSE +!! ------- +!! +!!** METHOD +!! ------ +!! +!! EXTERNAL +!! -------- +!! +!! +!! IMPLICIT ARGUMENTS +!! ------------------ +!! +!! REFERENCE +!! --------- +!! +!! +!! AUTHOR +!! ------ +!! C. Lebeaupin Brossier +!! +!! MODIFICATIONS +!! ------------- +!! Original 01/2015 +!------------------------------------------------------------------------------- +! +!* 0. DECLARATIONS +! ------------ +! + +USE MODD_TEB_OPTION_n, ONLY : TEB_OPTIONS_t +USE MODD_TEB_PANEL_n, ONLY : TEB_PANEL_t +USE MODD_TEB_n, ONLY : TEB_NP_t +USE MODD_BEM_n, ONLY : BEM_NP_t +USE MODD_SURFEX_n, ONLY : TEB_GARDEN_MODEL_t, TEB_GREENROOF_MODEL_t + +! +USE MODD_SURF_PAR, ONLY: XUNDEF +USE MODD_CSTS, ONLY : XPI +! +USE MODI_TEB_VEG_PROPERTIES +USE MODI_AVERAGED_TSRAD_TEB +USE MODI_AVERAGED_ALBEDO_TEB +! +USE YOMHOOK ,ONLY : LHOOK, DR_HOOK +USE PARKIND1 ,ONLY : JPRB +! +IMPLICIT NONE +! +!* 0.1 Declarations of arguments +! ------------------------- +! +TYPE(TEB_OPTIONS_t), INTENT(INOUT) :: TOP +TYPE(TEB_PANEL_t), INTENT(INOUT) :: TPN +TYPE(TEB_NP_t), INTENT(INOUT) :: NT +TYPE(BEM_NP_t), INTENT(INOUT) :: NB +TYPE(TEB_GARDEN_MODEL_t), INTENT(INOUT) :: GDM +TYPE(TEB_GREENROOF_MODEL_t), INTENT(INOUT) :: GRM +! +INTEGER, INTENT(IN) :: KI ! number of points +INTEGER, INTENT(IN) :: KSW ! number of short-wave spectral bands +! +REAL, DIMENSION(KI), INTENT(IN) :: PZENITH ! solar zenithal angle +REAL, DIMENSION(KSW), INTENT(IN) :: PSW_BANDS ! middle wavelength of each band +! +REAL, DIMENSION(KI,KSW),INTENT(OUT) :: PDIR_ALB ! direct albedo for each band +REAL, DIMENSION(KI,KSW),INTENT(OUT) :: PSCA_ALB ! diffuse albedo for each band +REAL, DIMENSION(KI), INTENT(OUT) :: PEMIS ! emissivity +REAL, DIMENSION(KI), INTENT(OUT) :: PTSRAD ! radiative temperature +REAL, DIMENSION(KI), INTENT(OUT) :: PTSURF ! surface temperature +REAL(KIND=JPRB) :: ZHOOK_HANDLE +! +! +!* 0.2 Declarations of local variables +! ------------------------------- +! +INTEGER :: ILU ! sizes of TEB arrays +INTEGER :: ISWB ! number of shortwave spectral bands +INTEGER :: JSWB ! loop on shortwave spectral bands +! +REAL, DIMENSION(:), ALLOCATABLE :: ZDIR_ALB ! direct town albedo +REAL, DIMENSION(:), ALLOCATABLE :: ZSCA_ALB ! diffuse town albedo +! +! local variables for urban green areas +REAL, DIMENSION(KI,KSW) :: ZDIR_ALB_GARDEN ! direct albedo for each band +REAL, DIMENSION(KI,KSW) :: ZSCA_ALB_GARDEN ! diffuse albedo for each band +REAL, DIMENSION(KI,KSW) :: ZDIR_SW ! direct SW for each band +REAL, DIMENSION(KI,KSW) :: ZSCA_SW ! diffuse SW for each band +REAL, DIMENSION(KI) :: ZEMIS_GARDEN ! emissivity +REAL, DIMENSION(KI) :: ZALB_GARDEN ! albedo +REAL, DIMENSION(KI) :: ZTS_GARDEN ! radiative temperature +! +REAL, DIMENSION(KI) :: ZEMIS_GREENROOF ! emissivity +REAL, DIMENSION(KI) :: ZALB_GREENROOF ! albedo +REAL, DIMENSION(KI) :: ZTS_GREENROOF ! radiative temperature +! +REAL, DIMENSION(KI) :: ZAZIM !** strong simplification: to change +REAL, DIMENSION(KI) :: ZWGT !** weight sum +! +INTEGER :: JP +! +!------------------------------------------------------------------------------- +! +! +!* 1. Emissivity, radiative temperature and surf temperature +! ------------------------------------------------------ +! +IF (LHOOK) CALL DR_HOOK('UPDATE_ESM_TEB_N',0,ZHOOK_HANDLE) +! *copy from init_tebn * +ILU = SIZE(TOP%XCOVER,1) +! +PTSURF(:)=0. +ZWGT(:)=0. +! +DO JP=1,TOP%NTEB_PATCH +! + IF (TOP%LGARDEN) THEN + ZDIR_SW=0. ! night as first guess for albedo computation + ZSCA_SW=0. ! + CALL TEB_VEG_PROPERTIES(NT%AL(JP)%XGARDEN, GDM%O, GDM%NPE%AL(JP), & + ZDIR_SW, ZSCA_SW, PSW_BANDS, KSW, & + ZTS_GARDEN, ZEMIS_GARDEN, ZALB_GARDEN ) + ELSE + ZALB_GARDEN = XUNDEF + ZEMIS_GARDEN= XUNDEF + ZTS_GARDEN = XUNDEF + END IF +! + IF (TOP%LGREENROOF) THEN + ZDIR_SW=0. ! night as first guess for albedo computation + ZSCA_SW=0. ! + CALL TEB_VEG_PROPERTIES(NT%AL(JP)%XGREENROOF, GRM%O, GRM%NPE%AL(JP), & + ZDIR_SW, ZSCA_SW, PSW_BANDS, KSW, & + ZTS_GREENROOF, ZEMIS_GREENROOF, ZALB_GREENROOF ) + ELSE + ZALB_GREENROOF = XUNDEF + ZEMIS_GREENROOF = XUNDEF + ZTS_GREENROOF = XUNDEF + END IF +! +!* averaged emissivity and radiative temperature +! + CALL AVERAGED_TSRAD_TEB(NT%AL(JP), NB%AL(JP), ZEMIS_GARDEN, ZTS_GARDEN, & + ZEMIS_GREENROOF, ZTS_GREENROOF, PEMIS, PTSRAD ) +!* averaged surface temperature +!* - CLB: to verify + PTSURF(:)=PTSURF(:)+NT%AL(JP)%XROAD(:)*NT%AL(JP)%XT_ROAD(:,1)+NT%AL(JP)%XBLD(:)*NT%AL(JP)%XT_ROOF(:,1)& + +NT%AL(JP)%XWALL_O_HOR(:)*NT%AL(JP)%XT_WALL_A(:,1) + ZWGT(:)=ZWGT(:) +NT%AL(JP)%XROAD(:)+NT%AL(JP)%XBLD(:)+NT%AL(JP)%XWALL_O_HOR(:) +! + IF (TOP%LGARDEN) THEN + PTSURF(:)=PTSURF(:)+NT%AL(JP)%XGARDEN(:)*ZTS_GARDEN(:) + ZWGT(:) = ZWGT(:) + NT%AL(JP)%XGARDEN(:) + ENDIF + IF (TOP%LGREENROOF) THEN + PTSURF(:)=PTSURF(:)+NT%AL(JP)%XGREENROOF(:)*ZTS_GREENROOF(:) + ZWGT(:) = ZWGT(:) + NT%AL(JP)%XGREENROOF(:) + ENDIF +!* +! +! +!* 2. Visible and near-infra-red Radiative fields: +! ------------------------------------------- +! + ALLOCATE(ZDIR_ALB(ILU)) + ALLOCATE(ZSCA_ALB(ILU)) +! + ZAZIM=XPI !PAZIM? + CALL AVERAGED_ALBEDO_TEB(TOP,NT%AL(JP),TPN,NB%AL(JP),PZENITH,ZAZIM, & + ZALB_GARDEN, ZALB_GREENROOF,ZDIR_ALB, ZSCA_ALB) +! + ISWB=SIZE(PSW_BANDS) + DO JSWB=1,ISWB + PDIR_ALB(:,JSWB) = ZDIR_ALB(:) + PSCA_ALB(:,JSWB) = ZSCA_ALB(:) + END DO +! + DEALLOCATE(ZDIR_ALB) + DEALLOCATE(ZSCA_ALB) +! +ENDDO +! +! - verif? +PTSURF(:) = PTSURF(:)/ZWGT(:) +! +IF (LHOOK) CALL DR_HOOK('UPDATE_ESM_TEB_N',1,ZHOOK_HANDLE) +! +!------------------------------------------------------------------------------- +! +END SUBROUTINE UPDATE_ESM_TEB_n diff --git a/src/SURFEX/write_diag_pgd_isban.F90 b/src/SURFEX/write_diag_pgd_isban.F90 index 96417bb19f3c71c32751e2ec36ab05c108c3f79f..a3d13829f6fd60d9b268cf496e91f032a3b883f1 100644 --- a/src/SURFEX/write_diag_pgd_isban.F90 +++ b/src/SURFEX/write_diag_pgd_isban.F90 @@ -142,6 +142,20 @@ IF (IO%CPHOTO=='NON' .OR. IO%CPHOTO=='AST') THEN ! ENDIF ! +!* Leaf Area Index previous +! +IF (IO%CPHOTO=='NON' .OR. IO%CPHOTO=='AST') THEN + ! + YRECFM='LAIp' + YCOMMENT='leaf area index previous (-)' + ! + DO JP = 1,IO%NPATCH + CALL WRITE_FIELD_1D_PATCH(HSELECT,HPROGRAM,YRECFM,YCOMMENT,JP,& + NP%AL(JP)%NR_P,NPE%AL(JP)%XLAIp(:),ILU,S%XWORK_WR) + ENDDO + ! +ENDIF + !------------------------------------------------------------------------------- ! !* Vegetation fraction diff --git a/src/SURFEX/write_diag_seb_isban.F90 b/src/SURFEX/write_diag_seb_isban.F90 index 578764bfa268bc5dcac39a8b01db90d0fa097478..620b40f7c00fbd740627162b224f53ee1e3aa4bc 100644 --- a/src/SURFEX/write_diag_seb_isban.F90 +++ b/src/SURFEX/write_diag_seb_isban.F90 @@ -661,18 +661,20 @@ IF (CHI%LCH_NO_FLUX) THEN END IF END IF ! -IF (CHI%SVI%NDSTEQ > 0)THEN - ! - DO JSV = 1,NDSTMDE ! for all dust modes - WRITE(YRECFM,'(A5,I3.3)')'F_DST',JSV - YCOMMENT='X_Y_'//YRECFM//' (kg/m2/s)' - DO JP = 1,IO%NPATCH - CALL WRITE_FIELD_1D_PATCH(DUO%CSELECT,HPROGRAM,YRECFM,YCOMMENT,JP,& - NP%AL(JP)%NR_P,NDST%AL(JP)%XSFDST(:,JSV),ISIZE,S%XWORK_WR) - ENDDO - END DO - ! -ENDIF +!UPG*PT - cette ecriture ne fonctionne pas chez moi. Testée ?? +!IF (CHI%SVI%NDSTEQ > 0)THEN +! ! +! DO JSV = 1,NDSTMDE ! for all dust modes +! WRITE(YRECFM,'(A5,I3.3)')'F_DST',JSV +! YCOMMENT='X_Y_'//YRECFM//' (kg/m2/s)' +! DO JP = 1,IO%NPATCH +! CALL WRITE_FIELD_1D_PATCH(DUO%CSELECT,HPROGRAM,YRECFM,YCOMMENT,JP,& +! NP%AL(JP)%NR_P,NDST%AL(JP)%XSFDST(:,JSV),ISIZE,S%XWORK_WR) +! ENDDO +! END DO +! ! +!ENDIF +!UPG*PT ! ! ! Blowing snow variables diff --git a/src/SURFEX/write_pgd_surf_atmn.F90 b/src/SURFEX/write_pgd_surf_atmn.F90 index 116cdfc7f75d07e2c506644febde2e038d3b3924..9c6df17d0b427ed6e3394857e8a0b5e58685d351 100644 --- a/src/SURFEX/write_pgd_surf_atmn.F90 +++ b/src/SURFEX/write_pgd_surf_atmn.F90 @@ -34,6 +34,7 @@ !! ------------- !! Original 05/2011 according to previous write_surf_atmn.f90 !! P.Tulet & M. Leriche 06/2017 add coupling MEGAN +!! P.Tulet 2021 DMS field data !------------------------------------------------------------------------------- ! !* 0. DECLARATIONS @@ -64,6 +65,7 @@ USE MODI_WRITESURF_DUMMY_n USE MODI_WRITESURF_SNAP_n USE MODI_WRITESURF_CH_EMIS_n USE MODI_WRITESURF_MEGAN_n +USE MODI_WRITESURF_DMS_n ! USE MODI_WRITE_GRID ! @@ -151,10 +153,11 @@ IF (YSC%CHU%LCH_EMIS) THEN END IF ! ! MEGAN coupling + +IF (YSC%U%NDIM_NATURE>0) THEN YCOMMENT='CH_BIOEMIS' CALL WRITE_SURF(YSC%DUO%CSELECT, HPROGRAM,'CH_BIOEMIS',YSC%CHU%LCH_BIOEMIS,IRESP,HCOMMENT=YCOMMENT) -IF (YSC%CHU%LCH_BIOEMIS) THEN - CALL WRITESURF_MEGAN_n(YSC%DUO%CSELECT, YSC%IM%MSF, HPROGRAM) + IF (YSC%CHU%LCH_BIOEMIS) CALL WRITESURF_MEGAN_n(YSC%DUO%CSELECT, YSC%IM%MSF, HPROGRAM) ENDIF ! IF (YSC%CHU%LCH_EMIS) THEN @@ -165,6 +168,13 @@ IF (YSC%CHU%LCH_EMIS) THEN ENDIF ENDIF ! +! DMS fluxes +IF (YSC%U%NDIM_SEA>0) THEN + YCOMMENT='CH_DMSEMIS' + CALL WRITE_SURF(YSC%DUO%CSELECT, HPROGRAM,'CH_DMSEMIS',YSC%CHU%LCH_DMSEMIS,IRESP,HCOMMENT=YCOMMENT) + IF (YSC%CHU%LCH_DMSEMIS) CALL WRITESURF_DMS_n(YSC%DUO%CSELECT, YSC%SM%DSF, HPROGRAM) +ENDIF + ! End of IO ! CALL END_IO_SURF_n(HPROGRAM) diff --git a/src/SURFEX/writesurf_isban.F90 b/src/SURFEX/writesurf_isban.F90 index d991d9417afcc8b1658217f2baba1441c9b85ae6..5bf478d247c1f8efb27ef773033ebb2a378b913c 100644 --- a/src/SURFEX/writesurf_isban.F90 +++ b/src/SURFEX/writesurf_isban.F90 @@ -520,16 +520,19 @@ IF (IO%CRESPSL=='CNT') THEN ENDIF ! ! -IF (CHI%SVI%NDSTEQ > 0)THEN - DO JSV = 1,NDSTMDE ! for all dust modes - WRITE(YRECFM,'(A6,I3.3)')'F_DSTM',JSV - YCOMMENT='X_Y_'//YRECFM//' (kg/m2)' - DO JP = 1,IO%NPATCH - CALL WRITE_FIELD_1D_PATCH(HSELECT,HPROGRAM,YRECFM,YCOMMENT,JP,& - NP%AL(JP)%NR_P,NDST%AL(JP)%XSFDSTM(:,JSV),KI,S%XWORK_WR) - ENDDO - END DO -ENDIF +!UPG*PT +! Je ne sais pas qui a codé cette ecriture mais chez moi ca plante. Pourtant XSFDSTM est bien calculé dans coupling_isban +!IF (CHI%SVI%NDSTEQ > 0)THEN +! DO JSV = 1,NDSTMDE ! for all dust modes +! WRITE(YRECFM,'(A6,I3.3)')'F_DSTM',JSV +! YCOMMENT='X_Y_'//YRECFM//' (kg/m2)' +! DO JP = 1,IO%NPATCH +! CALL WRITE_FIELD_1D_PATCH(HSELECT,HPROGRAM,YRECFM,YCOMMENT,JP,& +! NP%AL(JP)%NR_P,NDST%AL(JP)%XSFDSTM(:,JSV),KI,S%XWORK_WR) +! ENDDO +! END DO +!ENDIF +!UPG*PT ! !-------------------------------------------------------------------------------