afivo-streamer 1.1
1D/2D/3D streamer simulations with AMR
Loading...
Searching...
No Matches
m_streamer.f90
Go to the documentation of this file.
1!> This module contains several pre-defined variables like:
2!! * Indices of cell-centered variables
3!! * Names of the cell-centered variables
4!! * Indices of face-centered variables
5!! * Indices of transport data
7#include "../afivo/src/cpp_macros.h"
8 use m_types
9 use m_af_all
10 use m_random
11 use m_lookup_table
12 use m_config
13
14 implicit none
15 private
16
17 !> Index of electrical potential
18 integer, public, protected :: i_phi = -1
19 !> Index of electron density
20 integer, public, protected :: i_electron = -1
21 !> Index of electron density (in species list)
22 integer, public, protected :: ix_electron = -1
23 !> Index of electron energy density
24 integer, public, protected :: i_electron_energy = -1
25 !> Index of first positive ion species
26 integer, public, protected :: i_1pos_ion = -1
27 !> Index of first positive ion (in species list)
28 integer, public, protected :: ix_1pos_ion = -1
29 !> Index of electric field norm
30 integer, public, protected :: i_electric_fld = -1
31 !> Index of source term Poisson
32 integer, public, protected :: i_rhs = -1
33 !> Index of temporary variable
34 integer, public, protected :: i_tmp = -1
35 !> Index can be set to include a dielectric
36 integer, public, protected :: i_eps = -1
37 !> Index can be set to include an electrode
38 integer, public, protected :: i_lsf = -1
39
40 !> Index of all densities that evolve in time
41 integer, public, protected, allocatable :: all_densities(:)
42
43 !> Include deposited power density in output
44 logical, public, protected :: compute_power_density = .false.
45 !> Index of deposited power density
46 integer, public, protected :: i_power_density = -1
47
48 !> Index of correction factor for source terms
49 integer, public, protected :: i_srcfac = -1
50
51 !> Index of electron flux
52 integer, public, protected :: flux_elec = -1
53 !> Index of electron energy flux
54 integer, public, protected :: flux_energy = -1
55 !> Index of electric field vector
56 integer, public, protected :: electric_fld = -1
57
58 !> Number of flux variables
59 integer, public, protected :: flux_num_species = -1
60 !> Number of electron flux variables
61 integer, public, protected :: flux_num_electron_vars = -1
62 !> List of all flux variables (face-centered index)
63 integer, public, protected, allocatable :: flux_variables(:)
64 !> List of all flux species (cell-centered index)
65 integer, public, protected, allocatable :: flux_species(:)
66 !> List of the charges of the flux species
67 integer, public, protected, allocatable :: flux_species_charge(:)
68 !> List of the signs of the charges of the flux species (+- 1)
69 integer, public, protected, allocatable :: flux_species_charge_sign(:)
70 !> List of positive ion fluxes (useful for secondary emission)
71 integer, public, protected, allocatable :: flux_pos_ion(:)
72
73 !> Whether cylindrical coordinates are used
74 logical, public, protected :: st_cylindrical = .false.
75
76 !> Whether a dielectric is used
77 logical, public, protected :: st_use_dielectric = .false.
78
79 !> Whether to include an electrode
80 logical, public, protected :: st_use_electrode = .false.
81
82 !> Boundary condition for the plasma species
83 procedure(af_subr_bc), public, protected, pointer :: &
84 bc_species => null()
85
86 !> Multigrid option structure
87 type(mg_t), public :: mg
88
89 !> Random number generator
90 type(rng_t), public :: st_rng
91
92 !> Parallel random number generator
93 type(prng_t), public :: st_prng
94
95 !> Avoid dielectric relaxation time step constraint by limiting flux
96 logical, public, protected :: st_drt_limit_flux = .false.
97
98 !> Ensure that flux limiting does not lead to fields higher than this
99 real(dp), public, protected :: st_drt_max_field = 1.0e100_dp
100
101 !> Use source factor to prevent unphysical effects due to diffusion
102 integer, public, protected :: st_source_factor
103
104 integer, public, parameter :: source_factor_none = 0
105 integer, public, parameter :: source_factor_flux = 1
106 integer, public, parameter :: source_factor_original_flux = 2
107
108 !> Minimum number of electrons per cell to include source terms
109 real(dp), public, protected :: st_source_min_electrons_per_cell = -1e100_dp
110
111 !> End time of the simulation
112 real(dp), public, protected :: st_end_time = 10e-9_dp
113
114 !> Whether streamer length is used as a simulation stopping
115 logical, public, protected :: st_use_end_streamer_length = .false.
116
117 !> Wait n steps before initializing streamer begin position
118 integer, public, protected :: st_initial_streamer_pos_steps_wait = 5
119
120 !> Streamer length at which the simulation will stop
121 real(dp), public, protected :: st_end_streamer_length = 15e-3
122
123 !> Abort axisymmetric simulations if there is branching
124 logical, public, protected :: st_abort_axisymmetric_if_branching = .false.
125
126 !> The size of the boxes that we use to construct our mesh
127 integer, public, protected :: st_box_size = 8
128
129 !> Size of the coarse grid
130 integer, public, protected :: st_coarse_grid_size(ndim) = -1
131
132 !> Domain length per dimension
133 real(dp), public, protected :: st_domain_len(ndim) = 16e-3_dp
134
135 !> Origin of domain
136 real(dp), public, protected :: st_domain_origin(ndim) = 0.0_dp
137
138 !> Whether the domain is periodic (per dimension)
139 logical, public, protected :: st_periodic(ndim) = .false.
140
141 !> Whether to limit plasma reactions to a certain region
142 logical, public, protected :: st_plasma_region_enabled = .false.
143
144 !> Limit plasma reactions to coordinates between rmin and rmax
145 real(dp), public, protected :: st_plasma_region_rmin(ndim) = -1e100_dp
146
147 !> Limit plasma reactions to coordinates between rmin and rmax
148 real(dp), public, protected :: st_plasma_region_rmax(ndim) = 1e100_dp
149
150 !> Number of V-cycles to perform per time step
151 integer, public, protected :: st_multigrid_num_vcycles = 2
152
153 ! Stop multigrid when residual is smaller than this factor times max(|rhs|)
154 real(dp), public, protected :: st_multigrid_max_rel_residual = 1e-4_dp
155
156 !> Global time
157 real(dp), public :: global_time = 0.0_dp
158
159 !> Global time step
160 real(dp), public :: global_dt = 0.0_dp
161
162 !> Current sum of reaction rates per thread
163 real(dp), public, allocatable :: st_current_rates(:, :)
164
165 !> Global sum of reaction rates
166 real(dp), public, allocatable :: st_global_rates(:)
167
168 !> Current sum of J.E per thread
169 real(dp), public, allocatable :: st_current_jdote(:, :)
170
171 !> Per how many iterations the electric current is computed
172 integer, public, protected :: current_update_per_steps = 1000*1000
173
174 !> Electric current through electrodes due to J.E
175 real(dp), public :: st_global_jdote_current
176
177 !> Electric current through electrodes due to displacement current
178 real(dp), public :: st_global_displ_current
179
180 !> Global sum of J.E
181 real(dp), public :: st_global_jdote
182
183 ! To keep track of the computational cost of different parts
184 real(dp), public :: wc_time_flux = 0.0_dp
185 real(dp), public :: wc_time_source = 0.0_dp
186 real(dp), public :: wc_time_copy_state = 0.0_dp
187 real(dp), public :: wc_time_field = 0.0_dp
188 real(dp), public :: wc_time_output = 0.0_dp
189 real(dp), public :: wc_time_refine = 0.0_dp
190 real(dp), public :: wc_time_photoi = 0.0_dp
191
192 !> Method used to prolong (interpolate) densities
193 procedure(af_subr_prolong), pointer, public, protected :: &
194 st_prolongation_method => null()
195
196 public :: st_initialize
197
198contains
199
200 !> Create the configuration file with default values
201 subroutine st_initialize(tree, cfg, ndim)
202 use iso_fortran_env, only: int64
203 use m_config
204 use omp_lib
205 use m_chemistry
207 use m_gas
209 use m_dt
210 use m_model
211 type(af_t), intent(inout) :: tree
212 type(cfg_t), intent(inout) :: cfg !< The configuration for the simulation
213 integer, intent(in) :: ndim !< Number of dimensions
214 integer :: n, k, n_threads, ix_chemistry
215 character(len=name_len) :: prolong_method, bc_method
216 character(len=name_len) :: source_factor = "none"
217 character(len=string_len) :: tmp_str
218 integer :: rng_int4_seed(4) = &
219 [8123, 91234, 12399, 293434]
220 integer(int64) :: rng_int8_seed(2)
221 real(dp) :: tmp
222 integer :: flux_ix
223 logical :: write_source_factor = .false.
224
225 ! Set index of electrons
226 i_electron = af_find_cc_variable(tree, "e")
228
229 ! Set index of first positive ion species
230 do n = n_gas_species+1, n_species
231 if (species_charge(n) == 1) then
233 ix_1pos_ion = n
234 exit
235 end if
236 end do
237
238 if (i_1pos_ion == -1) error stop "No positive ion species (1+) found"
239
240 ! Set flux species
241 call af_add_fc_variable(tree, "flux_elec", ix=flux_elec, &
242 write_binary=.false.)
243 call af_add_fc_variable(tree, "field", ix=electric_fld)
244
246
248 i_electron_energy = af_find_cc_variable(tree, "e_energy")
249 call af_add_fc_variable(tree, "flux_energy", ix=flux_energy, &
250 write_binary=.false.)
252 else
254 end if
255
261
263 flux_species_charge(1) = -1
266
270 flux_species_charge_sign(2) = -1 ! Used to determine upwind direction
272 end if
273
274 do n = 1, transport_data_ions%n_mobile_ions
275 flux_ix = flux_num_electron_vars + n
276 flux_species(flux_ix) = af_find_cc_variable(tree, &
277 trim(transport_data_ions%names(n)))
278
279 ! Get index in chemistry list and determine charge
280 ix_chemistry = species_index(trim(transport_data_ions%names(n)))
281 flux_species_charge(flux_ix) = species_charge(ix_chemistry)
282 flux_species_charge_sign(flux_ix) = sign(1, species_charge(ix_chemistry))
283
284 call af_add_fc_variable(tree, trim(transport_data_ions%names(n)), &
285 ix=flux_variables(flux_ix), write_binary=.false.)
286 end do
287
288 ! Create a list of positive ion fluxes for secondary emission
289 n = count(flux_species_charge > 0)
290 allocate(flux_pos_ion(n))
291
292 k = 0
293 do n = 1, size(flux_species_charge)
294 if (flux_species_charge(n) > 0) then
295 k = k + 1
297 end if
298 end do
299
300 ! Add one copy so that the old value can be restored
301 call af_add_cc_variable(tree, "phi", ix=i_phi, n_copies=2)
302 call af_add_cc_variable(tree, "electric_fld", ix=i_electric_fld)
303 call af_add_cc_variable(tree, "rhs", ix=i_rhs)
304 call af_add_cc_variable(tree, "tmp", write_out=.false., &
305 write_binary=.false., ix=i_tmp)
306
307 call cfg_add_get(cfg, "cylindrical", st_cylindrical, &
308 "Whether cylindrical coordinates are used (only in 2D)")
309
310 call cfg_add_get(cfg, "use_dielectric", st_use_dielectric, &
311 "Whether a dielectric is used (experimental)")
312 if (st_use_dielectric) then
313 call af_add_cc_variable(tree, "eps", ix=i_eps)
314 call af_set_cc_methods(tree, i_eps, af_bc_neumann_zero, &
315 af_gc_prolong_copy, af_prolong_zeroth)
316 end if
317
318 call cfg_add_get(cfg, "use_electrode", st_use_electrode, &
319 "Whether to include an electrode")
320 if (st_use_electrode) then
321 call af_add_cc_variable(tree, "lsf", ix=i_lsf)
322 end if
323
324 bc_method = "neumann_zero"
325 call cfg_add_get(cfg, "species_boundary_condition", &
326 bc_method, &
327 "Boundary condition for the plasma species")
328 select case (bc_method)
329 case ("neumann_zero")
330 bc_species => af_bc_neumann_zero
331 case ("dirichlet_zero")
332 bc_species => bc_species_dirichlet_zero
333 case default
334 print *, "Unknown boundary condition: ", trim(bc_method)
335 print *, "Try neumann_zero or dirichlet_zero"
336 error stop
337 end select
338
339 call cfg_add_get(cfg, "compute_power_density", compute_power_density, &
340 "Whether to compute the deposited power density")
341
342 if (compute_power_density) then
343 call af_add_cc_variable(tree, "power_density", ix = i_power_density)
344 end if
345
346 call cfg_add_get(cfg, "use_end_streamer_length", st_use_end_streamer_length, &
347 "Whether the length of the streamer is used to end the simulation")
348 call cfg_add_get(cfg, "end_streamer_length", st_end_streamer_length, &
349 "Streamer length at which the simulation will end.")
350 call cfg_add_get(cfg, "initial_streamer_pos_steps_wait", &
352 "Number of simulation steps to wait before initializing "&
353 "the starting position of the streamer")
354
355 call cfg_add_get(cfg, "abort_axisymmetric_if_branching", &
357 "Abort axisymmetric simulations if there is branching")
358
359 call cfg_add_get(cfg, "end_time", st_end_time, &
360 "The desired endtime (s) of the simulation")
361 call cfg_add_get(cfg, "box_size", st_box_size, &
362 "The number of grid cells per coordinate in a box")
363 call cfg_add_get(cfg, "coarse_grid_size", st_coarse_grid_size, &
364 "The size of the coarse grid")
365 call cfg_add_get(cfg, "domain_len", st_domain_len, &
366 "The length of the domain (m)")
367 call cfg_add_get(cfg, "domain_origin", st_domain_origin, &
368 "The origin of the domain (m)")
369 call cfg_add_get(cfg, "periodic", st_periodic, &
370 "Whether the domain is periodic (per dimension)")
371
372 call cfg_add_get(cfg, "plasma_region_enabled", st_plasma_region_enabled, &
373 "Whether to limit plasma reactions to a certain region")
374 call cfg_add_get(cfg, "plasma_region_rmin", st_plasma_region_rmin, &
375 "Limit plasma reactions to coordinates between rmin and rmax")
376 call cfg_add_get(cfg, "plasma_region_rmax", st_plasma_region_rmax, &
377 "Limit plasma reactions to coordinates between rmin and rmax")
378
379 if (all(st_coarse_grid_size == -1)) then
380 ! Not set, automatically determine size
382 nint(st_domain_len / minval(st_domain_len))
383 end if
384
385 tmp = maxval(st_domain_len/st_coarse_grid_size) / &
387 if (tmp > 1.001_dp) then
388 print *, "!!! Warning: using non-square grid cells"
389 write(*, "(A,F12.4)") " !!! Maximal aspect ratio:", tmp
390 end if
391
392 call cfg_add_get(cfg, "multigrid_num_vcycles", st_multigrid_num_vcycles, &
393 "Number of V-cycles to perform per time step")
394 call cfg_add_get(cfg, "multigrid_max_rel_residual", &
396 "Stop multigrid when residual is smaller than this factor times max(|rhs|)")
397
398 call cfg_add_get(cfg, "current_update_per_steps", &
400 "Per how many iterations the electric current is computed")
401
402 prolong_method = "limit"
403 call cfg_add_get(cfg, "prolong_density", prolong_method, &
404 "Density prolongation method (limit, linear, linear_cons, sparse)")
405 select case (prolong_method)
406 case ("limit")
407 st_prolongation_method => af_prolong_limit
408 case ("linear")
409 st_prolongation_method => af_prolong_linear
410 case ("linear_cons")
411 st_prolongation_method => af_prolong_linear_cons
412 case ("sparse")
413 st_prolongation_method => af_prolong_sparse
414 case ("zeroth")
415 st_prolongation_method => af_prolong_zeroth
416 case default
417 error stop "Unknown prolong_density method"
418 end select
419
420 call cfg_add_get(cfg, "fixes%drt_max_field", st_drt_max_field, &
421 "Enable flux limiting, but prevent field from exceeding this value")
422 if (st_drt_max_field < 1e100_dp) then
423 error stop "fixes%drt_max_field not yet implemented"
424 st_drt_limit_flux = .true.
425 end if
426
427 call cfg_add_get(cfg, "fixes%source_factor", source_factor, &
428 "Use source factor to prevent unphysical effects due to diffusion")
429 call cfg_add_get(cfg, "fixes%write_source_factor", write_source_factor, &
430 "Whether to write the source factor to the output")
431 call cfg_add_get(cfg, "fixes%source_min_electrons_per_cell", &
433 "Minimum number of electrons per cell to include source terms")
434
435 select case (source_factor)
436 case ("none")
438 case ("flux")
440 case default
441 print *, "Options fixes%source_factor: none, flux"
442 error stop "Unknown fixes%source_factor"
443 end select
444
445 if (st_source_factor > 0 .and. write_source_factor) then
446 call af_add_cc_variable(tree, "srcfac", ix=i_srcfac)
447 end if
448
449 call cfg_add_get(cfg, "rng_seed", rng_int4_seed, &
450 "Seed for random numbers; if all zero, generate randomly")
451
452 if (all(rng_int4_seed == 0)) then
453 rng_int4_seed = get_random_seed()
454 print *, "RNG seed: ", rng_int4_seed
455
456 ! Store the updated seed in the configuration
457 write(tmp_str, *) "rng_seed = ", rng_int4_seed
458 call cfg_update_from_line(cfg, tmp_str)
459 end if
460
461 rng_int8_seed = transfer(rng_int4_seed, rng_int8_seed)
462 call st_rng%set_seed(rng_int8_seed)
463 n_threads = af_get_max_threads()
464 call st_prng%init_parallel(n_threads, st_rng)
465
466 ! Initialize global storage of reaction rates, +32 to avoid threads writing
467 ! to nearby memory
468 allocate(st_current_rates(n_reactions+32, n_threads))
470 allocate(st_current_jdote(1+32, n_threads))
473
474 end subroutine st_initialize
475
476 !> Get a random seed based
477 function get_random_seed() result(seed)
478 use iso_fortran_env, only: int64
479 integer :: seed(4)
480 integer :: i
481 real(dp) :: rr
482 integer(int64) :: time
483
484 ! Set a random seed (this does not work on all systems)
485 call random_seed()
486
487 ! Get some count of the time
488 call system_clock(time)
489
490 do i = 1, 4
491 call random_number(rr)
492 seed(i) = ieor(int(time), int(huge(1) * rr))
493 end do
494 end function get_random_seed
495
496 !> Impose a Dirichlet zero boundary condition for plasma species in the last
497 !> dimension, which is supposed to have the electrodes. We use Neumann
498 !> conditions in the other dimensions. Note that this version avoids
499 !> extrapolation (in contrast to the regular Dirichlet b.c.), which is more
500 !> suitable for conserved species densities.
501 subroutine bc_species_dirichlet_zero(box, nb, iv, coords, bc_val, bc_type)
502 type(box_t), intent(in) :: box
503 integer, intent(in) :: nb
504 integer, intent(in) :: iv
505 real(dp), intent(in) :: coords(ndim, box%n_cell**(ndim-1))
506 real(dp), intent(out) :: bc_val(box%n_cell**(ndim-1))
507 integer, intent(out) :: bc_type
508
509 if (af_neighb_dim(nb) == ndim) then
510 bc_type = af_bc_dirichlet_copy
511 bc_val = 0.0_dp
512 else
513 bc_type = af_bc_neumann
514 bc_val = 0.0_dp
515 end if
516 end subroutine bc_species_dirichlet_zero
517
518end module m_streamer
Module for handling chemical reactions.
integer, dimension(max_num_species), public, protected species_charge
Charge of the species.
integer, dimension(max_num_species), public, protected species_itree
species_itree(n) holds the index of species n in the tree (cell-centered variables)
integer, public, protected n_species
Number of species present.
elemental integer function, public species_index(name)
Find index of a species, return -1 if not found.
integer, public, protected n_gas_species
Number of gas species present.
integer, public, protected n_reactions
Number of reactions present.
Module to set the time step.
Definition m_dt.f90:2
Module that stores parameters related to the gas.
Definition m_gas.f90:2
Module to set the type of model.
Definition m_model.f90:2
logical, public, protected model_has_energy_equation
Whether the model has an energy equation.
Definition m_model.f90:20
This module contains several pre-defined variables like:
Definition m_streamer.f90:6
logical, public, protected st_cylindrical
Whether cylindrical coordinates are used.
real(dp), public wc_time_refine
procedure(af_subr_prolong), pointer, public, protected st_prolongation_method
Method used to prolong (interpolate) densities.
integer, public, protected flux_num_electron_vars
Number of electron flux variables.
integer, dimension(:), allocatable, public, protected flux_species_charge
List of the charges of the flux species.
integer, dimension(:), allocatable, public, protected flux_species_charge_sign
List of the signs of the charges of the flux species (+- 1)
real(dp), public wc_time_output
integer, parameter, public source_factor_none
integer, public, protected i_eps
Index can be set to include a dielectric.
real(dp), dimension(:), allocatable, public st_global_rates
Global sum of reaction rates.
integer, public, protected current_update_per_steps
Per how many iterations the electric current is computed.
integer, public, protected st_initial_streamer_pos_steps_wait
Wait n steps before initializing streamer begin position.
real(dp), public wc_time_field
integer, public, protected i_srcfac
Index of correction factor for source terms.
real(dp), public st_global_jdote_current
Electric current through electrodes due to J.E.
integer, dimension(:), allocatable, public, protected flux_pos_ion
List of positive ion fluxes (useful for secondary emission)
integer, dimension(:), allocatable, public, protected flux_variables
List of all flux variables (face-centered index)
integer, public, protected st_source_factor
Use source factor to prevent unphysical effects due to diffusion.
real(dp), public global_dt
Global time step.
logical, public, protected st_drt_limit_flux
Avoid dielectric relaxation time step constraint by limiting flux.
real(dp), public, protected st_drt_max_field
Ensure that flux limiting does not lead to fields higher than this.
type(mg_t), public mg
Multigrid option structure.
integer, dimension(ndim), public, protected st_coarse_grid_size
Size of the coarse grid.
subroutine, public st_initialize(tree, cfg, ndim)
Create the configuration file with default values.
integer, public, protected st_box_size
The size of the boxes that we use to construct our mesh.
real(dp), dimension(:, :), allocatable, public st_current_jdote
Current sum of J.E per thread.
logical, dimension(ndim), public, protected st_periodic
Whether the domain is periodic (per dimension)
integer, public, protected i_electron_energy
Index of electron energy density.
real(dp), public global_time
Global time.
procedure(af_subr_bc), pointer, public, protected bc_species
Boundary condition for the plasma species.
logical, public, protected st_use_electrode
Whether to include an electrode.
integer, dimension(:), allocatable, public, protected flux_species
List of all flux species (cell-centered index)
real(dp), public wc_time_source
integer, public, protected ix_electron
Index of electron density (in species list)
integer, public, protected flux_energy
Index of electron energy flux.
integer, public, protected i_lsf
Index can be set to include an electrode.
logical, public, protected st_use_dielectric
Whether a dielectric is used.
integer, public, protected flux_elec
Index of electron flux.
integer, public, protected i_electron
Index of electron density.
integer, public, protected electric_fld
Index of electric field vector.
integer, public, protected i_rhs
Index of source term Poisson.
integer, public, protected i_1pos_ion
Index of first positive ion species.
logical, public, protected st_abort_axisymmetric_if_branching
Abort axisymmetric simulations if there is branching.
integer, public, protected i_phi
Index of electrical potential.
real(dp), public wc_time_flux
real(dp), public st_global_jdote
Global sum of J.E.
real(dp), dimension(ndim), public, protected st_plasma_region_rmin
Limit plasma reactions to coordinates between rmin and rmax.
integer, public, protected st_multigrid_num_vcycles
Number of V-cycles to perform per time step.
real(dp), dimension(ndim), public, protected st_plasma_region_rmax
Limit plasma reactions to coordinates between rmin and rmax.
integer, public, protected i_electric_fld
Index of electric field norm.
real(dp), public wc_time_copy_state
real(dp), public, protected st_end_streamer_length
Streamer length at which the simulation will stop.
real(dp), dimension(ndim), public, protected st_domain_len
Domain length per dimension.
integer, public, protected ix_1pos_ion
Index of first positive ion (in species list)
real(dp), public, protected st_end_time
End time of the simulation.
real(dp), dimension(ndim), public, protected st_domain_origin
Origin of domain.
type(rng_t), public st_rng
Random number generator.
integer, dimension(:), allocatable, public, protected all_densities
Index of all densities that evolve in time.
integer, public, protected flux_num_species
Number of flux variables.
integer, public, protected i_power_density
Index of deposited power density.
real(dp), public wc_time_photoi
logical, public, protected st_use_end_streamer_length
Whether streamer length is used as a simulation stopping.
type(prng_t), public st_prng
Parallel random number generator.
integer, public, protected i_tmp
Index of temporary variable.
logical, public, protected compute_power_density
Include deposited power density in output.
logical, public, protected st_plasma_region_enabled
Whether to limit plasma reactions to a certain region.
real(dp), dimension(:, :), allocatable, public st_current_rates
Current sum of reaction rates per thread.
real(dp), public st_global_displ_current
Electric current through electrodes due to displacement current.
integer, parameter, public source_factor_original_flux
real(dp), public, protected st_source_min_electrons_per_cell
Minimum number of electrons per cell to include source terms.
real(dp), public, protected st_multigrid_max_rel_residual
integer, parameter, public source_factor_flux
Module that provides routines for reading in arbritrary transport data.
type(ion_transport_t), public transport_data_ions
Module with basic types.
Definition m_types.f90:2
Module that contains physical and numerical constants.