module MO_GRID !--------------------------------------------------------------------- ! ... Basic grid point resolution parameters !--------------------------------------------------------------------- implicit none save integer, parameter :: & nodes = NODES, & ! number of nodes cpupnode = CPUPNODE, & ! CPUs per node pcnst = 63+1, & ! number of advected constituents including cloud water pcnstm1 = 63, & ! number of advected constituents excluding cloud water plev = 34, & ! number of vertical levels plevp = plev+1, & ! plev plus 1 plevm = plev-1, & ! plev minus 1 plon = 128, & ! number of longitudes plat = 64, & ! number of latitudes plonl = plon/cpupnode, & ! local number of longitudes pplon = plon/plonl, & ! number of longitude omp groups plnplv = plonl*plev, & ! number of longitude omp groups platl = plat/nodes integer, parameter :: & pnats = 3 ! number of non-advected trace species end module MO_GRID module CHEM_MODS !-------------------------------------------------------------- ! ... Basic chemistry array parameters !-------------------------------------------------------------- use MO_GRID, only : pcnstm1 implicit none save integer, parameter :: hetcnt = 26, & ! number of heterogeneous processes phtcnt = 33, & ! number of photo processes rxntot = 168, & ! number of total reactions gascnt = 135, & ! number of gas phase reactions nfs = 4, & ! number of "fixed" species relcnt = 0, & ! number of relationship species grpcnt = 3, & ! number of group members imp_nzcnt = 587, & ! number of non-zero implicit matrix entries rod_nzcnt = 0, & ! number of non-zero rodas matrix entries extcnt = 3, & ! number of species with external forcing clscnt1 = 8, & ! number of species in explicit class clscnt2 = 0, & ! number of species in hov class clscnt3 = 0, & ! number of species in ebi class clscnt4 = 55, & ! number of species in implicit class clscnt5 = 0, & ! number of species in rodas class indexm = 1, & ! index of total atm density in invariant array ncol_abs = 2, & ! number of column densities indexh2o = 4, & ! index of water vapor density clsze = 4 ! loop length for implicit chemistry real :: adv_mass(pcnstm1) real :: nadv_mass(grpcnt) type SOLVER_CLASS integer :: clscnt integer :: lin_rxt_cnt integer :: nln_rxt_cnt integer :: indprd_cnt integer :: iter_max integer :: cls_rxt_cnt(4) integer, pointer :: permute(:) integer, pointer :: diag_map(:) integer, pointer :: clsmap(:) end type SOLVER_CLASS type(SOLVER_CLASS) :: explicit, implicit, rodas CONTAINS subroutine CHEM_MODS_INTI !-------------------------------------------------------------- ! ... Intialize the class derived type !-------------------------------------------------------------- implicit none integer :: astat explicit%clscnt = 8 explicit%indprd_cnt = 28 implicit%clscnt = 55 implicit%lin_rxt_cnt = 71 implicit%nln_rxt_cnt = 113 implicit%indprd_cnt = 3 implicit%iter_max = 11 rodas%clscnt = 0 rodas%lin_rxt_cnt = 0 rodas%nln_rxt_cnt = 0 rodas%indprd_cnt = 0 if( explicit%clscnt > 0 ) then ALLOCATE( explicit%clsmap(explicit%clscnt),stat=astat ) if( astat /= 0 ) then write(*,*) 'CHEM_MODS_INTI: Failed to allocate explicit%clsmap ; error = ',astat call ENDRUN end if explicit%clsmap(:) = 0 end if if( implicit%clscnt > 0 ) then ALLOCATE( implicit%permute(implicit%clscnt),stat=astat ) if( astat /= 0 ) then write(*,*) 'CHEM_MODS_INTI: Failed to allocate implicit%permute ; error = ',astat call ENDRUN end if implicit%permute(:) = 0 ALLOCATE( implicit%diag_map(implicit%clscnt),stat=astat ) if( astat /= 0 ) then write(*,*) 'CHEM_MODS_INTI: Failed to allocate implicit%diag_map ; error = ',astat call ENDRUN end if implicit%diag_map(:) = 0 ALLOCATE( implicit%clsmap(implicit%clscnt),stat=astat ) if( astat /= 0 ) then write(*,*) 'CHEM_MODS_INTI: Failed to allocate implicit%clsmap ; error = ',astat call ENDRUN end if implicit%clsmap(:) = 0 end if if( rodas%clscnt > 0 ) then ALLOCATE( rodas%permute(rodas%clscnt),stat=astat ) if( astat /= 0 ) then write(*,*) 'CHEM_MODS_INTI: Failed to allocate rodas%permute ; error = ',astat call ENDRUN end if rodas%permute(:) = 0 ALLOCATE( rodas%diag_map(rodas%clscnt),stat=astat ) if( astat /= 0 ) then write(*,*) 'CHEM_MODS_INTI: Failed to allocate rodas%diag_map ; error = ',astat call ENDRUN end if rodas%diag_map(:) = 0 ALLOCATE( rodas%clsmap(rodas%clscnt),stat=astat ) if( astat /= 0 ) then write(*,*) 'CHEM_MODS_INTI: Failed to allocate rodas%clsmap ; error = ',astat call ENDRUN end if rodas%clsmap(:) = 0 end if end subroutine CHEM_MODS_INTI end module CHEM_MODS module M_SPC_ID integer, parameter :: id_OX = 1 integer, parameter :: id_N2O = 2 integer, parameter :: id_N = 3 integer, parameter :: id_NO = 4 integer, parameter :: id_NO2 = 5 integer, parameter :: id_NO3 = 6 integer, parameter :: id_HNO3 = 7 integer, parameter :: id_HO2NO2 = 8 integer, parameter :: id_N2O5 = 9 integer, parameter :: id_CH4 = 10 integer, parameter :: id_CH3O2 = 11 integer, parameter :: id_CH3OOH = 12 integer, parameter :: id_CH2O = 13 integer, parameter :: id_CO = 14 integer, parameter :: id_OH = 15 integer, parameter :: id_HO2 = 16 integer, parameter :: id_H2O2 = 17 integer, parameter :: id_C3H6 = 18 integer, parameter :: id_ISOP = 19 integer, parameter :: id_PO2 = 20 integer, parameter :: id_CH3CHO = 21 integer, parameter :: id_POOH = 22 integer, parameter :: id_CH3CO3 = 23 integer, parameter :: id_CH3COOOH = 24 integer, parameter :: id_PAN = 25 integer, parameter :: id_ONIT = 26 integer, parameter :: id_C2H6 = 27 integer, parameter :: id_C2H4 = 28 integer, parameter :: id_C4H10 = 29 integer, parameter :: id_MPAN = 30 integer, parameter :: id_ISOPO2 = 31 integer, parameter :: id_MVK = 32 integer, parameter :: id_MACR = 33 integer, parameter :: id_MACRO2 = 34 integer, parameter :: id_MACROOH = 35 integer, parameter :: id_MCO3 = 36 integer, parameter :: id_C2H5O2 = 37 integer, parameter :: id_C2H5OOH = 38 integer, parameter :: id_C10H16 = 39 integer, parameter :: id_C3H8 = 40 integer, parameter :: id_C3H7O2 = 41 integer, parameter :: id_C3H7OOH = 42 integer, parameter :: id_CH3COCH3 = 43 integer, parameter :: id_ROOH = 44 integer, parameter :: id_CH3OH = 45 integer, parameter :: id_C2H5OH = 46 integer, parameter :: id_GLYALD = 47 integer, parameter :: id_HYAC = 48 integer, parameter :: id_EO2 = 49 integer, parameter :: id_EO = 50 integer, parameter :: id_HYDRALD = 51 integer, parameter :: id_RO2 = 52 integer, parameter :: id_CH3COCHO = 53 integer, parameter :: id_Rn = 54 integer, parameter :: id_Pb = 55 integer, parameter :: id_ISOPNO3 = 56 integer, parameter :: id_ONITR = 57 integer, parameter :: id_XO2 = 58 integer, parameter :: id_XOOH = 59 integer, parameter :: id_ISOPOOH = 60 integer, parameter :: id_H2 = 61 integer, parameter :: id_O3S = 62 integer, parameter :: id_O3INERT = 63 integer, parameter :: id_O3 = 1 integer, parameter :: id_O1D = 2 integer, parameter :: id_O = 3 end module M_SPC_ID module M_RXT_ID integer, parameter :: rid_jo2 = 1 integer, parameter :: rid_jo1d = 2 integer, parameter :: rid_jo3p = 3 integer, parameter :: rid_jn2o = 4 integer, parameter :: rid_jno = 5 integer, parameter :: rid_jno2 = 6 integer, parameter :: rid_jn2o5 = 7 integer, parameter :: rid_jhno3 = 8 integer, parameter :: rid_jno3 = 9 integer, parameter :: rid_jho2no2 = 10 integer, parameter :: rid_jch3ooh = 11 integer, parameter :: rid_jch2o_a = 12 integer, parameter :: rid_jch2o_b = 13 integer, parameter :: rid_jh2o = 14 integer, parameter :: rid_jh2o2 = 15 integer, parameter :: rid_jch3cho = 16 integer, parameter :: rid_jpooh = 17 integer, parameter :: rid_jch3co3h = 18 integer, parameter :: rid_jpan = 19 integer, parameter :: rid_jmpan = 20 integer, parameter :: rid_jmacr_a = 21 integer, parameter :: rid_jmacr_b = 22 integer, parameter :: rid_jmvk = 23 integer, parameter :: rid_jc2h5ooh = 24 integer, parameter :: rid_jc3h7ooh = 25 integer, parameter :: rid_jrooh = 26 integer, parameter :: rid_jacet = 27 integer, parameter :: rid_jmgly = 28 integer, parameter :: rid_jxooh = 29 integer, parameter :: rid_jonitr = 30 integer, parameter :: rid_jisopooh = 31 integer, parameter :: rid_jhyac = 32 integer, parameter :: rid_jglyald = 33 integer, parameter :: rid_usr1 = 34 integer, parameter :: rid_o1d_n2 = 36 integer, parameter :: rid_o1d_o2 = 37 integer, parameter :: rid_ox_l1 = 38 integer, parameter :: rid_ox_p1 = 41 integer, parameter :: rid_usr2 = 46 integer, parameter :: rid_usr3 = 47 integer, parameter :: rid_usr4 = 49 integer, parameter :: rid_usr5 = 50 integer, parameter :: rid_usr6 = 52 integer, parameter :: rid_usr7 = 54 integer, parameter :: rid_ox_p2 = 57 integer, parameter :: rid_usr8 = 64 integer, parameter :: rid_ox_l2 = 68 integer, parameter :: rid_ox_l3 = 69 integer, parameter :: rid_usr9 = 70 integer, parameter :: rid_usr10 = 75 integer, parameter :: rid_ox_l4 = 76 integer, parameter :: rid_ox_p3 = 78 integer, parameter :: rid_ox_p4 = 83 integer, parameter :: rid_usr11 = 84 integer, parameter :: rid_usr12 = 88 integer, parameter :: rid_ox_l5 = 90 integer, parameter :: rid_ox_p5 = 92 integer, parameter :: rid_usr13 = 97 integer, parameter :: rid_ox_l6 = 101 integer, parameter :: rid_ox_p6 = 104 integer, parameter :: rid_ox_l7 = 110 integer, parameter :: rid_ox_l8 = 112 integer, parameter :: rid_ox_p7 = 113 integer, parameter :: rid_ox_p8 = 120 integer, parameter :: rid_usr14 = 126 integer, parameter :: rid_usr15 = 127 integer, parameter :: rid_ox_l9 = 129 integer, parameter :: rid_usr16 = 131 integer, parameter :: rid_usr17 = 132 integer, parameter :: rid_ox_p9 = 136 integer, parameter :: rid_usr22 = 140 integer, parameter :: rid_ox_p10 = 141 integer, parameter :: rid_ox_p11 = 154 integer, parameter :: rid_usr21 = 160 integer, parameter :: rid_r0035 = 35 integer, parameter :: rid_r0039 = 39 integer, parameter :: rid_r0040 = 40 integer, parameter :: rid_r0042 = 42 integer, parameter :: rid_r0043 = 43 integer, parameter :: rid_r0044 = 44 integer, parameter :: rid_r0045 = 45 integer, parameter :: rid_r0048 = 48 integer, parameter :: rid_r0051 = 51 integer, parameter :: rid_r0053 = 53 integer, parameter :: rid_r0055 = 55 integer, parameter :: rid_r0056 = 56 integer, parameter :: rid_r0058 = 58 integer, parameter :: rid_r0059 = 59 integer, parameter :: rid_r0060 = 60 integer, parameter :: rid_r0061 = 61 integer, parameter :: rid_r0062 = 62 integer, parameter :: rid_r0063 = 63 integer, parameter :: rid_r0065 = 65 integer, parameter :: rid_r0066 = 66 integer, parameter :: rid_r0067 = 67 integer, parameter :: rid_r0071 = 71 integer, parameter :: rid_r0072 = 72 integer, parameter :: rid_r0073 = 73 integer, parameter :: rid_r0074 = 74 integer, parameter :: rid_r0077 = 77 integer, parameter :: rid_r0079 = 79 integer, parameter :: rid_r0080 = 80 integer, parameter :: rid_r0081 = 81 integer, parameter :: rid_r0082 = 82 integer, parameter :: rid_r0085 = 85 integer, parameter :: rid_r0086 = 86 integer, parameter :: rid_r0087 = 87 integer, parameter :: rid_r0089 = 89 integer, parameter :: rid_r0091 = 91 integer, parameter :: rid_r0093 = 93 integer, parameter :: rid_r0094 = 94 integer, parameter :: rid_r0095 = 95 integer, parameter :: rid_r0096 = 96 integer, parameter :: rid_r0098 = 98 integer, parameter :: rid_r0099 = 99 integer, parameter :: rid_r0100 = 100 integer, parameter :: rid_r0102 = 102 integer, parameter :: rid_r0103 = 103 integer, parameter :: rid_r0105 = 105 integer, parameter :: rid_r0106 = 106 integer, parameter :: rid_r0107 = 107 integer, parameter :: rid_r0108 = 108 integer, parameter :: rid_r0109 = 109 integer, parameter :: rid_r0111 = 111 integer, parameter :: rid_r0114 = 114 integer, parameter :: rid_r0115 = 115 integer, parameter :: rid_r0116 = 116 integer, parameter :: rid_r0117 = 117 integer, parameter :: rid_r0118 = 118 integer, parameter :: rid_r0119 = 119 integer, parameter :: rid_r0121 = 121 integer, parameter :: rid_r0122 = 122 integer, parameter :: rid_r0123 = 123 integer, parameter :: rid_r0124 = 124 integer, parameter :: rid_r0125 = 125 integer, parameter :: rid_r0128 = 128 integer, parameter :: rid_r0130 = 130 integer, parameter :: rid_r0133 = 133 integer, parameter :: rid_r0134 = 134 integer, parameter :: rid_r0135 = 135 integer, parameter :: rid_r0137 = 137 integer, parameter :: rid_r0138 = 138 integer, parameter :: rid_r0139 = 139 integer, parameter :: rid_r0142 = 142 integer, parameter :: rid_r0143 = 143 integer, parameter :: rid_r0144 = 144 integer, parameter :: rid_r0145 = 145 integer, parameter :: rid_r0146 = 146 integer, parameter :: rid_r0147 = 147 integer, parameter :: rid_r0148 = 148 integer, parameter :: rid_r0149 = 149 integer, parameter :: rid_r0150 = 150 integer, parameter :: rid_r0151 = 151 integer, parameter :: rid_r0152 = 152 integer, parameter :: rid_r0153 = 153 integer, parameter :: rid_r0155 = 155 integer, parameter :: rid_r0156 = 156 integer, parameter :: rid_r0157 = 157 integer, parameter :: rid_r0158 = 158 integer, parameter :: rid_r0159 = 159 integer, parameter :: rid_r0161 = 161 integer, parameter :: rid_r0162 = 162 integer, parameter :: rid_r0163 = 163 integer, parameter :: rid_r0164 = 164 integer, parameter :: rid_r0165 = 165 integer, parameter :: rid_r0166 = 166 integer, parameter :: rid_r0167 = 167 integer, parameter :: rid_r0168 = 168 end module M_RXT_ID