Changeset 2265 for palm/trunk/SOURCE/mod_particle_attributes.f90
- Timestamp:
- Jun 8, 2017 4:58:28 PM (8 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
palm/trunk/SOURCE/mod_particle_attributes.f90
r2263 r2265 25 25 ! ----------------- 26 26 ! $Id$ 27 ! Unused variables removed. 28 ! 29 ! 2263 2017-06-08 14:59:01Z schwenkel 27 30 ! Implemented splitting and merging algorithm 28 31 ! … … 94 97 95 98 INTEGER(iwp) :: deleted_particles = 0 !< number of deleted particles per time step 96 INTEGER(iwp) :: dissipation_classes = 10 !< n umber of dissipation classes99 INTEGER(iwp) :: dissipation_classes = 10 !< namelist parameter (see documentation) 97 100 INTEGER(iwp) :: ibc_par_b !< particle bottom boundary condition dummy 98 101 INTEGER(iwp) :: ibc_par_lr !< particle left/right boundary condition dummy … … 102 105 INTEGER(iwp) :: isf !< dummy for splitting function 103 106 INTEGER(iwp) :: i_splitting_mode !< dummy for splitting mode 104 INTEGER(iwp) :: maximum_number_of_particles = 0 !< maximum number of particles on a PE (can be removed?) 105 INTEGER(iwp) :: max_number_particles_per_gridbox = 30 !< maximum number of particles per gridbox (used in splitting algorithm) 107 INTEGER(iwp) :: max_number_particles_per_gridbox = 30 !< namelist parameter (see documentation) 106 108 INTEGER(iwp) :: merge_drp = 0 !< number of merged droplets 107 INTEGER(iwp) :: min_nr_particle = 50 !< minimum number of particles for which memory is allocated at every grid cell109 INTEGER(iwp) :: min_nr_particle = 50 !< namelist parameter (see documentation) 108 110 INTEGER(iwp) :: mpi_particle_type !< parameter for particle PE particle exchange 109 111 INTEGER(iwp) :: new_particles = 0 !< number of new particles 110 112 INTEGER(iwp) :: n_max = 100 !< number of radii bin for splitting functions 111 113 INTEGER(iwp) :: number_of_particles = 0 !< number of particles for each grid box (3d array is saved on prt_count) 112 INTEGER(iwp) :: number_of_particle_groups = 1 !< n umber of particle groups to be used114 INTEGER(iwp) :: number_of_particle_groups = 1 !< namelist parameter (see documentation) 113 115 INTEGER(iwp) :: number_of_sublayers = 20 !< number of sublayers for particle velocities betwenn surface and first grid level 114 INTEGER(iwp) :: number_particles_per_gridbox = -1 !< n umber of particles which are created in every grid box116 INTEGER(iwp) :: number_particles_per_gridbox = -1 !< namelist parameter (see documentation) 115 117 INTEGER(iwp) :: offset_ocean_nzt = 0 !< in case of oceans runs, the vertical index calculations need an offset 116 118 INTEGER(iwp) :: offset_ocean_nzt_m1 = 0 !< in case of oceans runs, the vertical index calculations need an offset 117 INTEGER(iwp) :: particles_per_point = 1 !< number of particles to be started per point 118 INTEGER(iwp) :: particle_file_count = 0 !< can be removed ? 119 INTEGER(iwp) :: radius_classes = 20 !< number of radius classes to be used in the collision efficiency table 119 INTEGER(iwp) :: particles_per_point = 1 !< namelist parameter (see documentation) 120 INTEGER(iwp) :: radius_classes = 20 !< namelist parameter (see documentation) 120 121 INTEGER(iwp) :: sort_count = 0 !< counter for sorting particles 121 INTEGER(iwp) :: splitting_factor = 2 !< splitting factor122 INTEGER(iwp) :: splitting_factor_max = 5 !< maximum splittig factor123 INTEGER(iwp) :: step_dealloc = 100 !< n umber of timesteps after which particle memory is deallocated122 INTEGER(iwp) :: splitting_factor = 2 !< namelist parameter (see documentation) 123 INTEGER(iwp) :: splitting_factor_max = 5 !< namelist parameter (see documentation) 124 INTEGER(iwp) :: step_dealloc = 100 !< namelist parameter (see documentation) 124 125 INTEGER(iwp) :: sum_merge_drp = 0 !< sum of merged super droplets 125 126 INTEGER(iwp) :: sum_new_particles = 0 !< sum of created particles (in splitting algorithm) … … 140 141 LOGICAL :: all_or_nothing = .FALSE. !< flag for collision algorithm 141 142 LOGICAL :: average_impact = .FALSE. !< flag for collision algortihm 142 LOGICAL :: curvature_solution_effects = .FALSE. !< parameter to consider solution and curvature effects on the equilibrium vapor pressure of cloud droplets143 LOGICAL :: deallocate_memory = .TRUE. !< parameter to enable deallocation of unused memory143 LOGICAL :: curvature_solution_effects = .FALSE. !< namelist parameter (see documentation) 144 LOGICAL :: deallocate_memory = .TRUE. !< namelist parameter (see documentation) 144 145 LOGICAL :: hall_kernel = .FALSE. !< flag for collision kernel 145 LOGICAL :: init_aerosol_probabilistic = .FALSE. !< parameter to steer the initialization of the aerosol spectrum146 LOGICAL :: merging = .FALSE. !< parameter to enable merging of super droplets147 LOGICAL :: monodisperse_aerosols = .FALSE. !< parameter to steer the initialization of the aerosol spectrum146 LOGICAL :: init_aerosol_probabilistic = .FALSE. !< namelist parameter (see documentation) 147 LOGICAL :: merging = .FALSE. !< namelist parameter (see documentation) 148 LOGICAL :: monodisperse_aerosols = .FALSE. !< namelist parameter (see documentation) 148 149 LOGICAL :: particle_advection = .FALSE. !< parameter to steer the advection of particles 149 LOGICAL :: random_start_position = .FALSE. !< parameter to initialize particles on random positon (within one grid box) 150 LOGICAL :: read_particles_from_restartfile = .TRUE. !< read particle data from the previous run 151 LOGICAL :: seed_follows_topography = .FALSE. !< heights of initial particles are interpreted relative to the given topography 152 LOGICAL :: splitting = .FALSE. !< parameter to enable the splitting of super droplets 153 LOGICAL :: uniform_particles = .TRUE. !< can be removed? 150 LOGICAL :: random_start_position = .FALSE. !< namelist parameter (see documentation) 151 LOGICAL :: read_particles_from_restartfile = .TRUE. !< namelist parameter (see documentation) 152 LOGICAL :: seed_follows_topography = .FALSE. !< namelist parameter (see documentation) 153 LOGICAL :: splitting = .FALSE. !< namelist parameter (see documentation) 154 154 LOGICAL :: use_kernel_tables = .FALSE. !< parameter, which turns on the use of precalculated collision kernels 155 LOGICAL :: use_sgs_for_particles = .FALSE. !< parameter to use sgs velocities for particles155 LOGICAL :: use_sgs_for_particles = .FALSE. !< namelist parameter (see documentation) 156 156 LOGICAL :: wang_kernel = .FALSE. !< flag for collision kernel 157 LOGICAL :: write_particle_statistics = .FALSE. !< switch on/off output of particle information (statistical information)157 LOGICAL :: write_particle_statistics = .FALSE. !< namelist parameter (see documentation) 158 158 159 159 LOGICAL, DIMENSION(max_number_of_particle_groups) :: & 160 160 vertical_particle_advection = .TRUE. !< Switch on/off vertical particle transport 161 161 162 REAL(wp) :: alloc_factor = 20.0_wp !< memory allocated additionally to the memory needed for initial particles at a given grid cell 163 REAL(wp) :: c_0 = 3.0_wp !< parameter for lagrangian timescale 164 REAL(wp) :: dt_min_part = 0.0002_wp !< minimum particle time step when SGS velocities are used (s) 165 REAL(wp) :: dt_prel = 9999999.9_wp !< temporal interval at which particles are to be released from a particle source (in s) 166 REAL(wp) :: dt_write_particle_data = 9999999.9_wp !< temporal interval for output of particle data (in s) 167 REAL(wp) :: end_time_prel = 9999999.9_wp !< time of the last release of particles (in s). 168 REAL(wp) :: initial_weighting_factor = 1.0_wp !< weighting factor used for initialization 169 REAL(wp) :: molecular_weight_of_solute = 0.05844_wp !< mol. m. NaCl (kg mol-1) 170 REAL(wp) :: molecular_weight_of_water = 0.01801528_wp !< mol. m. H2O (kg mol-1) 171 REAL(wp) :: n1 = 100.0_wp !< number concentration of the first log-normal distribution (dry aerosol initialization) 172 REAL(wp) :: n2 = 0.0_wp !< see n1 173 REAL(wp) :: n3 = 0.0_wp !< see n1 174 REAL(wp) :: number_concentration = -1.0_wp !< initial particle number concentration (in units of 1/cm^-3) 175 REAL(wp) :: particle_advection_start = 0.0_wp !< time of the first release of particles (in s). 176 REAL(wp) :: radius_merge = 1.0E-7_wp !< particles with a smaller radius are merged if merging is set 177 REAL(wp) :: radius_split = 40.0E-6_wp !< particles with a bigger radius are splitted if splittig is set 178 REAL(wp) :: rho_s = 2165.0_wp !< density of NaCl (kg m-3) 179 REAL(wp) :: rm1 = 0.05E-6_wp !< mode radius of the first log-normal distribution (dry aerosol initialization) 180 REAL(wp) :: rm2 = 0.05E-6_wp !< see rm1 181 REAL(wp) :: rm3 = 0.05E-6_wp !< see rm2 182 REAL(wp) :: s1 = 2.0_wp !< geometric standard deviation of the first log-normal distribution (dry aerosol initialization) 183 REAL(wp) :: s2 = 2.0_wp !< see s1 184 REAL(wp) :: s3 = 2.0_wp !< see s1 185 REAL(wp) :: sgs_wf_part !< parameter for sgs 186 REAL(wp) :: time_prel = 0.0_wp !< time for particle release 187 REAL(wp) :: time_sort_particles = 0.0_wp !< can be removed? 188 REAL(wp) :: time_write_particle_data = 0.0_wp !< write particle data at current time on file 189 REAL(wp) :: vanthoff = 2.0_wp !< van't Hoff factor for NaCl 190 REAL(wp) :: weight_factor_merge = -1.0_wp !< critical weighting factor for merging 191 REAL(wp) :: weight_factor_split = -1.0_wp !< critical weighting factor for splitting 192 REAL(wp) :: z0_av_global !< horizontal mean value of z0 193 194 REAL(wp), DIMENSION(max_number_of_particle_groups) :: density_ratio = 9999999.9_wp !< ratio of the density of the fluid and the density of the particles 195 REAL(wp), DIMENSION(max_number_of_particle_groups) :: pdx = 9999999.9_wp !< distance along x between particles within a particle source (in m) 196 REAL(wp), DIMENSION(max_number_of_particle_groups) :: pdy = 9999999.9_wp !< distance along y between particles within a particle source (in m) 197 REAL(wp), DIMENSION(max_number_of_particle_groups) :: pdz = 9999999.9_wp !< distance along z between particles within a particle source (in m) 198 REAL(wp), DIMENSION(max_number_of_particle_groups) :: psb = 9999999.9_wp !< bottom edge of a particle source (in m) 199 REAL(wp), DIMENSION(max_number_of_particle_groups) :: psl = 9999999.9_wp !< left edge of a particle source (in m) 200 REAL(wp), DIMENSION(max_number_of_particle_groups) :: psn = 9999999.9_wp !< rear ("north") edge of a particle source (in m) 201 REAL(wp), DIMENSION(max_number_of_particle_groups) :: psr = 9999999.9_wp !< right edge of a particle source (in m). 202 REAL(wp), DIMENSION(max_number_of_particle_groups) :: pss = 9999999.9_wp !< front ("south") edge of a particle source (in m). 203 REAL(wp), DIMENSION(max_number_of_particle_groups) :: pst = 9999999.9_wp !< top edge of a particle source (in m). 204 REAL(wp), DIMENSION(max_number_of_particle_groups) :: radius = 9999999.9_wp !< particle radius (in m). 162 REAL(wp) :: alloc_factor = 20.0_wp !< namelist parameter (see documentation) 163 REAL(wp) :: c_0 = 3.0_wp !< parameter for lagrangian timescale 164 REAL(wp) :: dt_min_part = 0.0002_wp !< minimum particle time step when SGS velocities are used (s) 165 REAL(wp) :: dt_prel = 9999999.9_wp !< namelist parameter (see documentation) 166 REAL(wp) :: dt_write_particle_data = 9999999.9_wp !< namelist parameter (see documentation) 167 REAL(wp) :: end_time_prel = 9999999.9_wp !< namelist parameter (see documentation) 168 REAL(wp) :: initial_weighting_factor = 1.0_wp !< namelist parameter (see documentation) 169 REAL(wp) :: molecular_weight_of_solute = 0.05844_wp !< mol. m. NaCl (kg mol-1) 170 REAL(wp) :: molecular_weight_of_water = 0.01801528_wp !< mol. m. H2O (kg mol-1) 171 REAL(wp) :: n1 = 100.0_wp !< namelist parameter (see documentation) 172 REAL(wp) :: n2 = 0.0_wp !< namelist parameter (see documentation) 173 REAL(wp) :: n3 = 0.0_wp !< namelist parameter (see documentation) 174 REAL(wp) :: number_concentration = -1.0_wp !< namelist parameter (see documentation) 175 REAL(wp) :: particle_advection_start = 0.0_wp !< namelist parameter (see documentation) 176 REAL(wp) :: radius_merge = 1.0E-7_wp !< namelist parameter (see documentation) 177 REAL(wp) :: radius_split = 40.0E-6_wp !< namelist parameter (see documentation) 178 REAL(wp) :: rho_s = 2165.0_wp !< density of NaCl (kg m-3) 179 REAL(wp) :: rm1 = 0.05E-6_wp !< namelist parameter (see documentation) 180 REAL(wp) :: rm2 = 0.05E-6_wp !< namelist parameter (see documentation) 181 REAL(wp) :: rm3 = 0.05E-6_wp !< namelist parameter (see documentation) 182 REAL(wp) :: s1 = 2.0_wp !< namelist parameter (see documentation) 183 REAL(wp) :: s2 = 2.0_wp !< namelist parameter (see documentation) 184 REAL(wp) :: s3 = 2.0_wp !< namelist parameter (see documentation) 185 REAL(wp) :: sgs_wf_part !< parameter for sgs 186 REAL(wp) :: time_prel = 0.0_wp !< time for particle release 187 REAL(wp) :: time_write_particle_data = 0.0_wp !< write particle data at current time on file 188 REAL(wp) :: vanthoff = 2.0_wp !< van't Hoff factor for NaCl 189 REAL(wp) :: weight_factor_merge = -1.0_wp !< namelist parameter (see documentation) 190 REAL(wp) :: weight_factor_split = -1.0_wp !< namelist parameter (see documentation) 191 REAL(wp) :: z0_av_global !< horizontal mean value of z0 192 193 REAL(wp), DIMENSION(max_number_of_particle_groups) :: density_ratio = 9999999.9_wp !< namelist parameter (see documentation) 194 REAL(wp), DIMENSION(max_number_of_particle_groups) :: pdx = 9999999.9_wp !< namelist parameter (see documentation) 195 REAL(wp), DIMENSION(max_number_of_particle_groups) :: pdy = 9999999.9_wp !< namelist parameter (see documentation) 196 REAL(wp), DIMENSION(max_number_of_particle_groups) :: pdz = 9999999.9_wp !< namelist parameter (see documentation) 197 REAL(wp), DIMENSION(max_number_of_particle_groups) :: psb = 9999999.9_wp !< namelist parameter (see documentation) 198 REAL(wp), DIMENSION(max_number_of_particle_groups) :: psl = 9999999.9_wp !< namelist parameter (see documentation) 199 REAL(wp), DIMENSION(max_number_of_particle_groups) :: psn = 9999999.9_wp !< namelist parameter (see documentation) 200 REAL(wp), DIMENSION(max_number_of_particle_groups) :: psr = 9999999.9_wp !< namelist parameter (see documentation) 201 REAL(wp), DIMENSION(max_number_of_particle_groups) :: pss = 9999999.9_wp !< namelist parameter (see documentation) 202 REAL(wp), DIMENSION(max_number_of_particle_groups) :: pst = 9999999.9_wp !< namelist parameter (see documentation). 203 REAL(wp), DIMENSION(max_number_of_particle_groups) :: radius = 9999999.9_wp !< namelist parameter (see documentation) 205 204 206 205 REAL(wp), DIMENSION(:), ALLOCATABLE :: log_z_z0 !< Precalculate LOG(z/z0) … … 209 208 TYPE particle_type 210 209 SEQUENCE 211 REAL(wp) :: radius, age, age_m, dt_sum, user, e_m, & 212 origin_x, origin_y, origin_z, rvar1, rvar2, rvar3, & 213 speed_x, speed_y, speed_z, weight_factor, x, y, z 214 INTEGER(iwp) :: class, group, id1, id2 215 LOGICAL :: particle_mask 216 INTEGER(iwp) :: block_nr 210 REAL(wp) :: radius !< radius of particle 211 REAL(wp) :: age !< age of particle 212 REAL(wp) :: age_m !< 213 REAL(wp) :: dt_sum !< 214 REAL(wp) :: user !< varible for user 215 REAL(wp) :: e_m !< interpolated sgs tke 216 REAL(wp) :: origin_x !< origin x-position of particle (changed cyclic bc) 217 REAL(wp) :: origin_y !< origin y-position of particle (changed cyclic bc) 218 REAL(wp) :: origin_z !< origin z-position of particle (changed cyclic bc) 219 REAL(wp) :: rvar1 !< 220 REAL(wp) :: rvar2 !< 221 REAL(wp) :: rvar3 !< 222 REAL(wp) :: speed_x !< speed of particle in x 223 REAL(wp) :: speed_y !< speed of particle in y 224 REAL(wp) :: speed_z !< speed of particle in z 225 REAL(wp) :: weight_factor !< weighting factor 226 REAL(wp) :: x !< x-position 227 REAL(wp) :: y !< y-position 228 REAL(wp) :: z !< z-position 229 INTEGER(iwp) :: class !< radius class needed for collision 230 INTEGER(iwp) :: group !< number of particle group 231 INTEGER(iwp) :: id1 !< first part of particle id 232 INTEGER(iwp) :: id2 !< second part of particle id 233 LOGICAL :: particle_mask !< if this parameter is set to false the particle will be deleted 234 INTEGER(iwp) :: block_nr !< number for sorting (removable?) 217 235 END TYPE particle_type 218 236 219 TYPE(particle_type), DIMENSION(:), POINTER :: particles 220 TYPE(particle_type) :: zero_particle 237 TYPE(particle_type), DIMENSION(:), POINTER :: particles !< Particle array for this grid cell 238 TYPE(particle_type) :: zero_particle !< zero particle to avoid weird thinge 221 239 222 240 TYPE particle_groups_type 223 241 SEQUENCE 224 REAL(wp) :: density_ratio, radius, exp_arg, exp_term 242 REAL(wp) :: density_ratio !< density ratio of the fluid and the particles 243 REAL(wp) :: radius !< radius of particle 244 REAL(wp) :: exp_arg !< exponential term of particle inertia 245 REAL(wp) :: exp_term !< exponential term of particle inertia 225 246 END TYPE particle_groups_type 226 247 … … 229 250 230 251 TYPE grid_particle_def 231 INTEGER(iwp), DIMENSION(0:7) :: start_index 232 INTEGER(iwp), DIMENSION(0:7) :: end_index 233 INTEGER(iwp) :: id_counter 234 LOGICAL :: time_loop_done 235 TYPE(particle_type), POINTER, DIMENSION(:) :: particles !Particle array for this grid cell252 INTEGER(iwp), DIMENSION(0:7) :: start_index !< start particle index for current block 253 INTEGER(iwp), DIMENSION(0:7) :: end_index !< end particle index for current block 254 INTEGER(iwp) :: id_counter !< particle id counter (removeable?) 255 LOGICAL :: time_loop_done !< timestep loop for particle advection 256 TYPE(particle_type), POINTER, DIMENSION(:) :: particles !< Particle array for this grid cell 236 257 END TYPE grid_particle_def 237 258 238 259 TYPE(grid_particle_def), DIMENSION(:,:,:), ALLOCATABLE, TARGET :: grid_particles 239 260 240 TYPE block_offset_def 241 INTEGER(iwp) :: i_off 242 INTEGER(iwp) :: j_off 243 INTEGER(iwp) :: k_off 261 TYPE block_offset_def !< 262 INTEGER(iwp) :: i_off !< 263 INTEGER(iwp) :: j_off !< 264 INTEGER(iwp) :: k_off !< 244 265 END TYPE block_offset_def 245 266
Note: See TracChangeset
for help on using the changeset viewer.