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 !> The size of the boxes that we use to construct our mesh
124 integer, public, protected :: st_box_size = 8
125
126 !> Size of the coarse grid
127 integer, public, protected :: st_coarse_grid_size(ndim) = -1
128
129 !> Domain length per dimension
130 real(dp), public, protected :: st_domain_len(ndim) = 16e-3_dp
131
132 !> Origin of domain
133 real(dp), public, protected :: st_domain_origin(ndim) = 0.0_dp
134
135 !> Whether the domain is periodic (per dimension)
136 logical, public, protected :: st_periodic(ndim) = .false.
137
138 !> Whether to limit plasma reactions to a certain region
139 logical, public, protected :: st_plasma_region_enabled = .false.
140
141 !> Limit plasma reactions to coordinates between rmin and rmax
142 real(dp), public, protected :: st_plasma_region_rmin(ndim) = -1e100_dp
143
144 !> Limit plasma reactions to coordinates between rmin and rmax
145 real(dp), public, protected :: st_plasma_region_rmax(ndim) = 1e100_dp
146
147 !> Number of V-cycles to perform per time step
148 integer, public, protected :: st_multigrid_num_vcycles = 2
149
150 ! Stop multigrid when residual is smaller than this factor times max(|rhs|)
151 real(dp), public, protected :: st_multigrid_max_rel_residual = 1e-4_dp
152
153 !> Global time
154 real(dp), public :: global_time = 0.0_dp
155
156 !> Global time step
157 real(dp), public :: global_dt = 0.0_dp
158
159 !> Current sum of reaction rates per thread
160 real(dp), public, allocatable :: st_current_rates(:, :)
161
162 !> Global sum of reaction rates
163 real(dp), public, allocatable :: st_global_rates(:)
164
165 !> Current sum of J.E per thread
166 real(dp), public, allocatable :: st_current_jdote(:, :)
167
168 !> Per how many iterations the electric current is computed
169 integer, public, protected :: current_update_per_steps = 1000*1000
170
171 !> Electric current through electrodes due to J.E
172 real(dp), public :: st_global_jdote_current
173
174 !> Electric current through electrodes due to displacement current
175 real(dp), public :: st_global_displ_current
176
177 !> Global sum of J.E
178 real(dp), public :: st_global_jdote
179
180 ! To keep track of the computational cost of different parts
181 real(dp), public :: wc_time_flux = 0.0_dp
182 real(dp), public :: wc_time_source = 0.0_dp
183 real(dp), public :: wc_time_copy_state = 0.0_dp
184 real(dp), public :: wc_time_field = 0.0_dp
185 real(dp), public :: wc_time_output = 0.0_dp
186 real(dp), public :: wc_time_refine = 0.0_dp
187 real(dp), public :: wc_time_photoi = 0.0_dp
188
189 !> Method used to prolong (interpolate) densities
190 procedure(af_subr_prolong), pointer, public, protected :: &
191 st_prolongation_method => null()
192
193 public :: st_initialize
194
195contains
196
197 !> Create the configuration file with default values
198 subroutine st_initialize(tree, cfg, ndim)
199 use iso_fortran_env, only: int64
200 use m_config
201 use omp_lib
202 use m_chemistry
204 use m_gas
206 use m_dt
207 use m_model
208 type(af_t), intent(inout) :: tree
209 type(cfg_t), intent(inout) :: cfg !< The configuration for the simulation
210 integer, intent(in) :: ndim !< Number of dimensions
211 integer :: n, k, n_threads, ix_chemistry
212 character(len=name_len) :: prolong_method, bc_method
213 character(len=name_len) :: source_factor = "none"
214 character(len=string_len) :: tmp_str
215 integer :: rng_int4_seed(4) = &
216 [8123, 91234, 12399, 293434]
217 integer(int64) :: rng_int8_seed(2)
218 real(dp) :: tmp
219 integer :: flux_ix
220 logical :: write_source_factor = .false.
221
222 ! Set index of electrons
223 i_electron = af_find_cc_variable(tree, "e")
225
226 ! Set index of first positive ion species
227 do n = n_gas_species+1, n_species
228 if (species_charge(n) == 1) then
230 ix_1pos_ion = n
231 exit
232 end if
233 end do
234
235 if (i_1pos_ion == -1) error stop "No positive ion species (1+) found"
236
237 ! Set flux species
238 call af_add_fc_variable(tree, "flux_elec", ix=flux_elec, &
239 write_binary=.false.)
240 call af_add_fc_variable(tree, "field", ix=electric_fld)
241
243
245 i_electron_energy = af_find_cc_variable(tree, "e_energy")
246 call af_add_fc_variable(tree, "flux_energy", ix=flux_energy, &
247 write_binary=.false.)
249 else
251 end if
252
258
260 flux_species_charge(1) = -1
263
267 flux_species_charge_sign(2) = -1 ! Used to determine upwind direction
269 end if
270
271 do n = 1, transport_data_ions%n_mobile_ions
272 flux_ix = flux_num_electron_vars + n
273 flux_species(flux_ix) = af_find_cc_variable(tree, &
274 trim(transport_data_ions%names(n)))
275
276 ! Get index in chemistry list and determine charge
277 ix_chemistry = species_index(trim(transport_data_ions%names(n)))
278 flux_species_charge(flux_ix) = species_charge(ix_chemistry)
279 flux_species_charge_sign(flux_ix) = sign(1, species_charge(ix_chemistry))
280
281 call af_add_fc_variable(tree, trim(transport_data_ions%names(n)), &
282 ix=flux_variables(flux_ix), write_binary=.false.)
283 end do
284
285 ! Create a list of positive ion fluxes for secondary emission
286 n = count(flux_species_charge > 0)
287 allocate(flux_pos_ion(n))
288
289 k = 0
290 do n = 1, size(flux_species_charge)
291 if (flux_species_charge(n) > 0) then
292 k = k + 1
294 end if
295 end do
296
297 ! Add one copy so that the old value can be restored
298 call af_add_cc_variable(tree, "phi", ix=i_phi, n_copies=2)
299 call af_add_cc_variable(tree, "electric_fld", ix=i_electric_fld)
300 call af_add_cc_variable(tree, "rhs", ix=i_rhs)
301 call af_add_cc_variable(tree, "tmp", write_out=.false., &
302 write_binary=.false., ix=i_tmp)
303
304 call cfg_add_get(cfg, "cylindrical", st_cylindrical, &
305 "Whether cylindrical coordinates are used (only in 2D)")
306
307 call cfg_add_get(cfg, "use_dielectric", st_use_dielectric, &
308 "Whether a dielectric is used (experimental)")
309 if (st_use_dielectric) then
310 call af_add_cc_variable(tree, "eps", ix=i_eps)
311 call af_set_cc_methods(tree, i_eps, af_bc_neumann_zero, &
312 af_gc_prolong_copy, af_prolong_zeroth)
313 end if
314
315 call cfg_add_get(cfg, "use_electrode", st_use_electrode, &
316 "Whether to include an electrode")
317 if (st_use_electrode) then
318 call af_add_cc_variable(tree, "lsf", ix=i_lsf)
319 end if
320
321 bc_method = "neumann_zero"
322 call cfg_add_get(cfg, "species_boundary_condition", &
323 bc_method, &
324 "Boundary condition for the plasma species")
325 select case (bc_method)
326 case ("neumann_zero")
327 bc_species => af_bc_neumann_zero
328 case ("dirichlet_zero")
329 bc_species => bc_species_dirichlet_zero
330 case default
331 print *, "Unknown boundary condition: ", trim(bc_method)
332 print *, "Try neumann_zero or dirichlet_zero"
333 error stop
334 end select
335
336 call cfg_add_get(cfg, "compute_power_density", compute_power_density, &
337 "Whether to compute the deposited power density")
338
339 if (compute_power_density) then
340 call af_add_cc_variable(tree, "power_density", ix = i_power_density)
341 end if
342
343 call cfg_add_get(cfg, "use_end_streamer_length", st_use_end_streamer_length, &
344 "Whether the length of the streamer is used to end the simulation")
345 call cfg_add_get(cfg, "end_streamer_length", st_end_streamer_length, &
346 "Streamer length at which the simulation will end.")
347 call cfg_add_get(cfg, "initial_streamer_pos_steps_wait", &
349 "Number of simulation steps to wait before initializing "&
350 "the starting position of the streamer")
351
352 call cfg_add_get(cfg, "end_time", st_end_time, &
353 "The desired endtime (s) of the simulation")
354 call cfg_add_get(cfg, "box_size", st_box_size, &
355 "The number of grid cells per coordinate in a box")
356 call cfg_add_get(cfg, "coarse_grid_size", st_coarse_grid_size, &
357 "The size of the coarse grid")
358 call cfg_add_get(cfg, "domain_len", st_domain_len, &
359 "The length of the domain (m)")
360 call cfg_add_get(cfg, "domain_origin", st_domain_origin, &
361 "The origin of the domain (m)")
362 call cfg_add_get(cfg, "periodic", st_periodic, &
363 "Whether the domain is periodic (per dimension)")
364
365 call cfg_add_get(cfg, "plasma_region_enabled", st_plasma_region_enabled, &
366 "Whether to limit plasma reactions to a certain region")
367 call cfg_add_get(cfg, "plasma_region_rmin", st_plasma_region_rmin, &
368 "Limit plasma reactions to coordinates between rmin and rmax")
369 call cfg_add_get(cfg, "plasma_region_rmax", st_plasma_region_rmax, &
370 "Limit plasma reactions to coordinates between rmin and rmax")
371
372 if (all(st_coarse_grid_size == -1)) then
373 ! Not set, automatically determine size
375 nint(st_domain_len / minval(st_domain_len))
376 end if
377
378 tmp = maxval(st_domain_len/st_coarse_grid_size) / &
380 if (tmp > 1.001_dp) then
381 print *, "!!! Warning: using non-square grid cells"
382 write(*, "(A,F12.4)") " !!! Maximal aspect ratio:", tmp
383 end if
384
385 call cfg_add_get(cfg, "multigrid_num_vcycles", st_multigrid_num_vcycles, &
386 "Number of V-cycles to perform per time step")
387 call cfg_add_get(cfg, "multigrid_max_rel_residual", &
389 "Stop multigrid when residual is smaller than this factor times max(|rhs|)")
390
391 call cfg_add_get(cfg, "current_update_per_steps", &
393 "Per how many iterations the electric current is computed")
394
395 prolong_method = "limit"
396 call cfg_add_get(cfg, "prolong_density", prolong_method, &
397 "Density prolongation method (limit, linear, linear_cons, sparse)")
398 select case (prolong_method)
399 case ("limit")
400 st_prolongation_method => af_prolong_limit
401 case ("linear")
402 st_prolongation_method => af_prolong_linear
403 case ("linear_cons")
404 st_prolongation_method => af_prolong_linear_cons
405 case ("sparse")
406 st_prolongation_method => af_prolong_sparse
407 case ("zeroth")
408 st_prolongation_method => af_prolong_zeroth
409 case default
410 error stop "Unknown prolong_density method"
411 end select
412
413 call cfg_add_get(cfg, "fixes%drt_max_field", st_drt_max_field, &
414 "Enable flux limiting, but prevent field from exceeding this value")
415 if (st_drt_max_field < 1e100_dp) then
416 error stop "fixes%drt_max_field not yet implemented"
417 st_drt_limit_flux = .true.
418 end if
419
420 call cfg_add_get(cfg, "fixes%source_factor", source_factor, &
421 "Use source factor to prevent unphysical effects due to diffusion")
422 call cfg_add_get(cfg, "fixes%write_source_factor", write_source_factor, &
423 "Whether to write the source factor to the output")
424 call cfg_add_get(cfg, "fixes%source_min_electrons_per_cell", &
426 "Minimum number of electrons per cell to include source terms")
427
428 select case (source_factor)
429 case ("none")
431 case ("flux")
433 case default
434 print *, "Options fixes%source_factor: none, flux"
435 error stop "Unknown fixes%source_factor"
436 end select
437
438 if (st_source_factor > 0 .and. write_source_factor) then
439 call af_add_cc_variable(tree, "srcfac", ix=i_srcfac)
440 end if
441
442 call cfg_add_get(cfg, "rng_seed", rng_int4_seed, &
443 "Seed for random numbers; if all zero, generate randomly")
444
445 if (all(rng_int4_seed == 0)) then
446 rng_int4_seed = get_random_seed()
447 print *, "RNG seed: ", rng_int4_seed
448
449 ! Store the updated seed in the configuration
450 write(tmp_str, *) "rng_seed = ", rng_int4_seed
451 call cfg_update_from_line(cfg, tmp_str)
452 end if
453
454 rng_int8_seed = transfer(rng_int4_seed, rng_int8_seed)
455 call st_rng%set_seed(rng_int8_seed)
456 n_threads = af_get_max_threads()
457 call st_prng%init_parallel(n_threads, st_rng)
458
459 ! Initialize global storage of reaction rates, +32 to avoid threads writing
460 ! to nearby memory
461 allocate(st_current_rates(n_reactions+32, n_threads))
463 allocate(st_current_jdote(1+32, n_threads))
466
467 end subroutine st_initialize
468
469 !> Get a random seed based
470 function get_random_seed() result(seed)
471 use iso_fortran_env, only: int64
472 integer :: seed(4)
473 integer :: i
474 real(dp) :: rr
475 integer(int64) :: time
476
477 ! Set a random seed (this does not work on all systems)
478 call random_seed()
479
480 ! Get some count of the time
481 call system_clock(time)
482
483 do i = 1, 4
484 call random_number(rr)
485 seed(i) = ieor(int(time), int(huge(1) * rr))
486 end do
487 end function get_random_seed
488
489 !> Impose a Dirichlet zero boundary condition for plasma species in the last
490 !> dimension, which is supposed to have the electrodes. We use Neumann
491 !> conditions in the other dimensions. Note that this version avoids
492 !> extrapolation (in contrast to the regular Dirichlet b.c.), which is more
493 !> suitable for conserved species densities.
494 subroutine bc_species_dirichlet_zero(box, nb, iv, coords, bc_val, bc_type)
495 type(box_t), intent(in) :: box
496 integer, intent(in) :: nb
497 integer, intent(in) :: iv
498 real(dp), intent(in) :: coords(ndim, box%n_cell**(ndim-1))
499 real(dp), intent(out) :: bc_val(box%n_cell**(ndim-1))
500 integer, intent(out) :: bc_type
501
502 if (af_neighb_dim(nb) == ndim) then
503 bc_type = af_bc_dirichlet_copy
504 bc_val = 0.0_dp
505 else
506 bc_type = af_bc_neumann
507 bc_val = 0.0_dp
508 end if
509 end subroutine bc_species_dirichlet_zero
510
511end 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.
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.