Changeset 3611 for palm/trunk/SOURCE/chem_modules.f90
- Timestamp:
- Dec 7, 2018 2:14:11 PM (5 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
palm/trunk/SOURCE/chem_modules.f90
r3458 r3611 27 27 ! ----------------- 28 28 ! $Id$ 29 ! Minor formatting 30 ! 31 ! 3458 2018-10-30 14:51:23Z kanani 29 32 ! from chemistry branch r3443: 30 33 ! ?? 31 ! 34 ! 32 35 ! 3298 2018-10-02 12:21:11Z kanani 33 36 ! - Minor formatting … … 77 80 PUBLIC spc_names 78 81 79 INTEGER(iwp), DIMENSION(99) 80 INTEGER(iwp) ::ibc_cs_b !< integer flag for bc_cs_b81 INTEGER(iwp) ::ibc_cs_t !< integer flag for bc_cs_t82 INTEGER(iwp) ::cs_pr_count = 083 INTEGER(iwp) ::max_pr_cs = 084 INTEGER(iwp) ::cs_vertical_gradient_level_ind(99,10) = -9999 !< grid index values of cs_vertical_gradient_level_ind(s)85 86 LOGICAL ::constant_top_csflux(99) = .TRUE. !< chem spcs at the top orig .TRUE.87 LOGICAL ::constant_csflux(99) = .TRUE. !< chem spcs at namelist parameter orig TRUE88 LOGICAL ::call_chem_at_all_substeps = .FALSE. !< namelist parameter89 LOGICAL ::chem_debug0 = .FALSE. !< namelist parameter flag for minimum print output90 LOGICAL ::chem_debug1 = .FALSE. !< namelist parameter flag for print output91 LOGICAL ::chem_debug2 = .FALSE. !< namelist parameter flag for further print output92 LOGICAL ::chem_gasphase_on = .TRUE. !< namelist parameter93 LOGICAL ::emission_output_required = .TRUE. !< Logical Variable for requiring Emission Outputs94 LOGICAL ::do_emis = .FALSE. !< Flag for turning on chemistry emissions95 LOGICAL ::cs_pr_namelist_found = .FALSE. !< Namelist parameter: Names of t96 LOGICAL ::do_depo = .FALSE. !< namelist parameter for activation of deposition calculation97 98 99 82 INTEGER(iwp), DIMENSION(99) :: cs_pr_index = 0 83 INTEGER(iwp) :: ibc_cs_b !< integer flag for bc_cs_b 84 INTEGER(iwp) :: ibc_cs_t !< integer flag for bc_cs_t 85 INTEGER(iwp) :: cs_pr_count = 0 86 INTEGER(iwp) :: max_pr_cs = 0 87 INTEGER(iwp) :: cs_vertical_gradient_level_ind(99,10) = -9999 !< grid index values of cs_vertical_gradient_level_ind(s) 88 89 LOGICAL :: constant_top_csflux(99) = .TRUE. !< chem spcs at the top orig .TRUE. 90 LOGICAL :: constant_csflux(99) = .TRUE. !< chem spcs at namelist parameter orig TRUE 91 LOGICAL :: call_chem_at_all_substeps = .FALSE. !< namelist parameter 92 LOGICAL :: chem_debug0 = .FALSE. !< namelist parameter flag for minimum print output 93 LOGICAL :: chem_debug1 = .FALSE. !< namelist parameter flag for print output 94 LOGICAL :: chem_debug2 = .FALSE. !< namelist parameter flag for further print output 95 LOGICAL :: chem_gasphase_on = .TRUE. !< namelist parameter 96 LOGICAL :: emission_output_required = .TRUE. !< Logical Variable for requiring Emission Outputs 97 LOGICAL :: do_emis = .FALSE. !< Flag for turning on chemistry emissions 98 LOGICAL :: cs_pr_namelist_found = .FALSE. !< Namelist parameter: Names of t 99 LOGICAL :: do_depo = .FALSE. !< namelist parameter for activation of deposition calculation 100 101 102 ! 100 103 !-- Namelist parameters for creating initial chemistry profiles 101 REAL(wp) :: wall_csflux (99,0:5) = 0.0_wp !< namelist parameter102 REAL(wp) :: cs_vertical_gradient (99,10) = 0.0_wp !< namelist parameter103 REAL(wp) :: cs_vertical_gradient_level (99,10) = -999999.9_wp !< namelist parameter104 REAL(wp) :: top_csflux ( 99 ) = 0.0_wp !< namelist parameter105 REAL(wp) :: cs_surface_initial_change(99) = 0.0_wp !< namelist parameter106 REAL(wp) :: surface_csflux(99 ) = 0.0_wp !< namelist parameter: fluxes where 'surface_csflux_name' is in the namelist107 108 REAL(wp), DIMENSION(:), ALLOCATABLE ::bc_cs_t_val109 REAL(wp), DIMENSION(:), ALLOCATABLE :: css!< scaling parameter for chem spcs110 REAL(wp), DIMENSION(99) :: cs_surface = 0.0_wp !< Namelist parameter: Surface conc of chem spcs'111 REAL(wp), DIMENSION(99,100) :: cs_heights = 9999999.9_wp !< Namelist parameter: Height lvls(m) for cs_profiles112 REAL(wp), DIMENSION(99,100) :: cs_profile = 9999999.9_wp !< Namelist parameter: Chem conc for each spcs defined104 REAL(wp) :: wall_csflux (99,0:5) = 0.0_wp !< namelist parameter 105 REAL(wp) :: cs_vertical_gradient (99,10) = 0.0_wp !< namelist parameter 106 REAL(wp) :: cs_vertical_gradient_level (99,10) = -999999.9_wp !< namelist parameter 107 REAL(wp) :: top_csflux ( 99 ) = 0.0_wp !< namelist parameter 108 REAL(wp) :: cs_surface_initial_change(99) = 0.0_wp !< namelist parameter 109 REAL(wp) :: surface_csflux(99 ) = 0.0_wp !< namelist parameter: fluxes where 'surface_csflux_name' is in the namelist 110 111 REAL(wp), DIMENSION(:), ALLOCATABLE :: bc_cs_t_val 112 REAL(wp), DIMENSION(:), ALLOCATABLE :: css !< scaling parameter for chem spcs 113 REAL(wp), DIMENSION(99) :: cs_surface = 0.0_wp !< Namelist parameter: Surface conc of chem spcs' 114 REAL(wp), DIMENSION(99,100) :: cs_heights = 9999999.9_wp !< Namelist parameter: Height lvls(m) for cs_profiles 115 REAL(wp), DIMENSION(99,100) :: cs_profile = 9999999.9_wp !< Namelist parameter: Chem conc for each spcs defined 113 116 114 117 115 118 #if defined( __nopointer ) 116 REAL(wp), DIMENSION(:,:,:), ALLOCATABLE, TARGET :: cs !< chem spcs117 REAL(wp), DIMENSION(:,:,:), ALLOCATABLE, TARGET :: cs_p !< prognostic value of chem spc118 REAL(wp), DIMENSION(:,:,:), ALLOCATABLE, TARGET :: tcs_m !< weighted tendency of cs for previous sub-timestep (Runge-Kutta)119 REAL(wp), DIMENSION(:,:,:), ALLOCATABLE, TARGET :: cs !< chem spcs 120 REAL(wp), DIMENSION(:,:,:), ALLOCATABLE, TARGET :: cs_p !< prognostic value of chem spc 121 REAL(wp), DIMENSION(:,:,:), ALLOCATABLE, TARGET :: tcs_m !< weighted tendency of cs for previous sub-timestep (Runge-Kutta) 119 122 120 123 #else 121 ! use pointers cs, cs_p and tcs_m to point arrays cs_1, cs_2, and cs_3 122 REAL(wp), DIMENSION(:,:,:,:), ALLOCATABLE, TARGET :: cs_1 !< pointer for swapping of timelevels for respective quantity 123 REAL(wp), DIMENSION(:,:,:,:), ALLOCATABLE, TARGET :: cs_2 !< pointer for swapping of timelevels for respective quantity 124 REAL(wp), DIMENSION(:,:,:,:), ALLOCATABLE, TARGET :: cs_3 !< pointer for swapping of timelevels for respective quantity 125 REAL(wp), DIMENSION(:,:,:), POINTER :: cs !< pointer: sgs chem spcs) 126 REAL(wp), DIMENSION(:,:,:), POINTER :: cs_p !< pointer: prognostic value of sgs chem spcs 127 REAL(wp), DIMENSION(:,:,:), POINTER :: tcs_m !< pointer: 124 ! 125 !-- Use pointers cs, cs_p and tcs_m to point arrays cs_1, cs_2, and cs_3 126 REAL(wp), DIMENSION(:,:,:,:), ALLOCATABLE, TARGET :: cs_1 !< pointer for swapping of timelevels for respective quantity 127 REAL(wp), DIMENSION(:,:,:,:), ALLOCATABLE, TARGET :: cs_2 !< pointer for swapping of timelevels for respective quantity 128 REAL(wp), DIMENSION(:,:,:,:), ALLOCATABLE, TARGET :: cs_3 !< pointer for swapping of timelevels for respective quantity 129 REAL(wp), DIMENSION(:,:,:), POINTER :: cs !< pointer: sgs chem spcs) 130 REAL(wp), DIMENSION(:,:,:), POINTER :: cs_p !< pointer: prognostic value of sgs chem spcs 131 REAL(wp), DIMENSION(:,:,:), POINTER :: tcs_m !< pointer: 128 132 129 133 #endif 130 134 131 CHARACTER (LEN=20) :: bc_cs_b = 'dirichlet'!< namelist parameter132 CHARACTER (LEN=20) :: bc_cs_t = 'initial_gradient'!< namelist parameter133 CHARACTER (LEN=11), DIMENSION(99) :: cs_name = 'novalue'!< Namelist parameter: chem spcs names134 CHARACTER (LEN=11), DIMENSION(99) :: cs_profile_name = 'novalue'!< Namelist parameter: Names of the chem for profiles135 CHARACTER (LEN=11), DIMENSION(99) :: surface_csflux_name = 'novalue'!< Namelist parameter: chem species surface fluxes names136 !< active chem spcs, default is 'novalue') ????137 CHARACTER (LEN=80) :: mode_emis ='PARAMETERIZED'!< Mode of chemistry emissions: DEFAULT .OR. EXPERT .OR.138 !PARAMETERIZED139 CHARACTER (LEN=80) :: time_fac_type ='MDH'!< Type of time treatment in the emis DEFAULT mode: HOUR .OR. MDH140 CHARACTER (LEN=80) :: daytype_mdh ='workday'!< Type of day in the MDH case: workday, weekend, holiday141 CHARACTER (LEN=11), DIMENSION(99) :: data_output_pr_cs = 'novalue'!< Namelist parameter: Names of the che m for profile output142 !< by cs_name for each height lvls defined by cs_heights135 CHARACTER (LEN=20) :: bc_cs_b = 'dirichlet' !< namelist parameter 136 CHARACTER (LEN=20) :: bc_cs_t = 'initial_gradient' !< namelist parameter 137 CHARACTER (LEN=11), DIMENSION(99) :: cs_name = 'novalue' !< Namelist parameter: chem spcs names 138 CHARACTER (LEN=11), DIMENSION(99) :: cs_profile_name = 'novalue' !< Namelist parameter: Names of the chem for profiles 139 CHARACTER (LEN=11), DIMENSION(99) :: surface_csflux_name = 'novalue' !< Namelist parameter: chem species surface fluxes names 140 !< active chem spcs, default is 'novalue') ???? 141 CHARACTER (LEN=80) :: mode_emis ='PARAMETERIZED' !< Mode of chemistry emissions: DEFAULT .OR. EXPERT .OR. 142 !< PARAMETERIZED 143 CHARACTER (LEN=80) :: time_fac_type ='MDH' !< Type of time treatment in the emis DEFAULT mode: HOUR .OR. MDH 144 CHARACTER (LEN=80) :: daytype_mdh ='workday' !< Type of day in the MDH case: workday, weekend, holiday 145 CHARACTER (LEN=11), DIMENSION(99) :: data_output_pr_cs = 'novalue' !< Namelist parameter: Names of the che m for profile output 146 !< by cs_name for each height lvls defined by cs_heights 143 147 ! 144 148 !-- Namelist parameters for chem_emissions … … 150 154 REAL(wp) :: emiss_factor_main ( 99 ) = -9999.0_wp 151 155 REAL(wp) :: emiss_factor_side ( 99 ) = -9999.0_wp 152 156 ! 153 157 !-- Other Emissions Variables 154 158 INTEGER(iwp) :: nspec_out !< Output of routine chem_emis_matching with 155 159 !< number of matched species 156 REAL(wp),ALLOCATABLE, DIMENSION(:,:,:,:) :: emis_distribution !> Emissions Final Values (main module output) 157 158 INTEGER(iwp),ALLOCATABLE,DIMENSION(:) :: match_spec_input !< Index of Input chem species for matching routine 159 INTEGER(iwp),ALLOCATABLE,DIMENSION(:) :: match_spec_model !< Index of Model chem species for matching routine 160 INTEGER(iwp),ALLOCATABLE,DIMENSION(:) :: match_spec_voc_input !< index of VOC input components matching the model's VOCs 161 INTEGER(iwp),ALLOCATABLE,DIMENSION(:) :: match_spec_voc_model !< index of VOC model species matching the input VOCs comp. 162 INTEGER(iwp),DIMENSION(:) :: match_spec_pm(1:3) !< results of matching the input and model's PMs 163 INTEGER(iwp),DIMENSION(:) :: match_spec_nox(1:2) !< results of matching the input and model's NOx 164 INTEGER(iwp),DIMENSION(:) :: match_spec_sox(1:2) !< results of matching the input and model's SOx! 165 ! TBD: evaluate whether to make them allocatable 166 ! and allocate their dimension in the matching 167 ! routine according to the number of components 168 ! matching between the model and the input files 169 160 REAL(wp),ALLOCATABLE, DIMENSION(:,:,:,:) :: emis_distribution !> Emissions Final Values (main module output) 161 162 INTEGER(iwp),ALLOCATABLE,DIMENSION(:) :: match_spec_input !< Index of Input chem species for matching routine 163 INTEGER(iwp),ALLOCATABLE,DIMENSION(:) :: match_spec_model !< Index of Model chem species for matching routine 164 INTEGER(iwp),ALLOCATABLE,DIMENSION(:) :: match_spec_voc_input !< index of VOC input components matching the model's VOCs 165 INTEGER(iwp),ALLOCATABLE,DIMENSION(:) :: match_spec_voc_model !< index of VOC model species matching the input VOCs comp. 166 INTEGER(iwp),DIMENSION(:) :: match_spec_pm(1:3) !< results of matching the input and model's PMs 167 INTEGER(iwp),DIMENSION(:) :: match_spec_nox(1:2) !< results of matching the input and model's NOx 168 INTEGER(iwp),DIMENSION(:) :: match_spec_sox(1:2) !< results of matching the input and model's SOx! 169 170 171 ! 172 !-- Selected atomic/molecular weights: 173 REAL, PARAMETER :: xm_H = 1.00790e-3 !< kg/mol 174 REAL, PARAMETER :: xm_N = 14.00670e-3 !< kg/mol 175 REAL, PARAMETER :: xm_C = 12.01115e-3 !< kg/mol 176 REAL, PARAMETER :: xm_S = 32.06400e-3 !< kg/mol 177 REAL, PARAMETER :: xm_O = 15.99940e-3 !< kg/mol 178 REAL, PARAMETER :: xm_F = 18.99840e-3 !< kg/mol 179 REAL, PARAMETER :: xm_Na = 22.98977e-3 !< kg/mol 180 REAL, PARAMETER :: xm_Cl = 35.45300e-3 !< kg/mol 181 REAL, PARAMETER :: xm_Rn222 = 222.00000e-3 !< kg/mol 182 REAL, PARAMETER :: xm_Pb210 = 210.00000e-3 !< kg/mol 183 REAL, PARAMETER :: xm_Ca = 40.07800e-3 !< kg/mol 184 REAL, PARAMETER :: xm_K = 39.09800e-3 !< kg/mol 185 REAL, PARAMETER :: xm_Mg = 24.30500e-3 !< kg/mol 186 REAL, PARAMETER :: xm_Pb = 207.20000e-3 !< kg/mol 187 REAL, PARAMETER :: xm_Cd = 112.41000e-3 !< kg/mol 170 188 171 !-- Selected atomic/molecular weights: 189 REAL, PARAMETER :: xm_h2o = xm_H * 2 + xm_O !< kg/mol 190 REAL, PARAMETER :: xm_o3 = xm_O * 3 !< kg/mol 191 REAL, PARAMETER :: xm_N2O5 = xm_N * 2 + xm_O * 5 !< kg/mol 192 REAL, PARAMETER :: xm_HNO3 = xm_H + xm_N + xm_O * 3 !< kg/mol 193 REAL, PARAMETER :: xm_NH4 = xm_N + xm_H * 4 !< kg/mol 194 REAL, PARAMETER :: xm_SO4 = xm_S + xm_O * 4 !< kg/mol 195 REAL, PARAMETER :: xm_NO3 = xm_N + xm_O * 3 !< kg/mol 196 REAL, PARAMETER :: xm_CO2 = xm_C + xm_O * 2 !< kg/mol 172 197 173 REAL, PARAMETER :: xm_H = 1.00790e-3 ! kg/mol 174 REAL, PARAMETER :: xm_N = 14.00670e-3 ! kg/mol 175 REAL, PARAMETER :: xm_C = 12.01115e-3 ! kg/mol 176 REAL, PARAMETER :: xm_S = 32.06400e-3 ! kg/mol 177 REAL, PARAMETER :: xm_O = 15.99940e-3 ! kg/mol 178 REAL, PARAMETER :: xm_F = 18.99840e-3 ! kg/mol 179 REAL, PARAMETER :: xm_Na = 22.98977e-3 ! kg/mol 180 REAL, PARAMETER :: xm_Cl = 35.45300e-3 ! kg/mol 181 REAL, PARAMETER :: xm_Rn222 = 222.00000e-3 ! kg/mol 182 REAL, PARAMETER :: xm_Pb210 = 210.00000e-3 ! kg/mol 183 REAL, PARAMETER :: xm_Ca = 40.07800e-3 ! kg/mol 184 REAL, PARAMETER :: xm_K = 39.09800e-3 ! kg/mol 185 REAL, PARAMETER :: xm_Mg = 24.30500e-3 ! kg/mol 186 REAL, PARAMETER :: xm_Pb = 207.20000e-3 ! kg/mol 187 REAL, PARAMETER :: xm_Cd = 112.41000e-3 ! kg/mol 188 189 REAL, PARAMETER :: xm_h2o = xm_H * 2 + xm_O ! kg/mol 190 REAL, PARAMETER :: xm_o3 = xm_O * 3 ! kg/mol 191 REAL, PARAMETER :: xm_N2O5 = xm_N * 2 + xm_O * 5 ! kg/mol 192 REAL, PARAMETER :: xm_HNO3 = xm_H + xm_N + xm_O * 3 ! kg/mol 193 REAL, PARAMETER :: xm_NH4 = xm_N + xm_H * 4 ! kg/mol 194 REAL, PARAMETER :: xm_SO4 = xm_S + xm_O * 4 ! kg/mol 195 REAL, PARAMETER :: xm_NO3 = xm_N + xm_O * 3 ! kg/mol 196 REAL, PARAMETER :: xm_CO2 = xm_C + xm_O * 2 ! kg/mol 197 198 ! mass of air 199 REAL, PARAMETER :: xm_air = 28.964e-3 ! kg/mol 198 ! 199 !-- mass of air 200 REAL, PARAMETER :: xm_air = 28.964e-3 !< kg/mol 200 201 201 ! dummy weight, used for complex molecules: 202 ! 203 !-- dummy weight, used for complex molecules: 202 204 REAL, PARAMETER :: xm_dummy = 1000.0e-3 ! kg/mol 203 205
Note: See TracChangeset
for help on using the changeset viewer.