Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Implicit pseudo-timestep for electrons #266

Merged
merged 110 commits into from
Oct 2, 2024
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
110 commits
Select commit Hold shift + click to select a range
a70cc16
"coarse_tails" option for grid spacing
johnomotani Aug 9, 2024
c2cd759
Add "coarse_tails" grid spacing option to some example input files
johnomotani Aug 9, 2024
8bb4193
Fix handling of periodic boundary conditions in gauss_legendre.jl
johnomotani Aug 11, 2024
63a4e95
Fix `update_electrons` conditional
johnomotani Aug 12, 2024
ea601b3
Fix ppar normalisation in distributed_dot_r_z_vperp_vpa()
johnomotani Aug 13, 2024
9ad6f7f
Estimate timescale for dg_e/dt, use to normalise residual for g_e solve
johnomotani Jun 22, 2024
c6c13b8
Fix RHS evaluation for backward-Euler update of electron_ppar
johnomotani Aug 12, 2024
53986ef
Backward-Euler method for electron pseudotimestep
johnomotani Aug 11, 2024
d394918
Fix boundary conditions in electron kinetic equation residuals
johnomotani Aug 21, 2024
facd373
Don't try negative step in line search in `newton_solve!()`
johnomotani Aug 12, 2024
3e5bd7b
Allow updating electron_ppar with electron_backward_euler!()
johnomotani Aug 12, 2024
5d84d62
Limit electron dt to be less than 0.5*ion_dt
johnomotani Aug 12, 2024
64003eb
Adjust electron dt based on iteration counts
johnomotani Aug 12, 2024
be22192
Move nonlinear solver stage_counter increment to counter reset function
johnomotani Aug 13, 2024
ab30e85
Comment out unused electron_kinetic_equation_residual!()
johnomotani Aug 13, 2024
e593f36
Move loop over r-dimension outside implicit solve for electrons
johnomotani Aug 13, 2024
986d933
Prevent ion timestep increase when electrons took too long to converge
johnomotani Aug 13, 2024
8357a1e
Fix initialisation of vth and electron moment derivatives in electron…
johnomotani Aug 13, 2024
ad2636c
Create 'global' strong-form differentiation matrix in gauss_legendre
johnomotani Aug 13, 2024
768aca7
Remove 'nu_ei' from examples/kinetic-electrons/periodic_split3_kineti…
johnomotani Aug 13, 2024
9931c95
Preconditioner for electron_ppar in electron_backward_euler!()
johnomotani Aug 13, 2024
334ec08
Attempt to add preconditioning for z-advection + diagonal terms in el…
johnomotani Aug 14, 2024
f798dca
Handle *_preconditioner default args outside loop in newton_solve!())
johnomotani Aug 16, 2024
766a2d5
Disable handling periodic bc in gauss_legendre, but add flag to enable
johnomotani Aug 16, 2024
33b540b
Add 'dense' second derivative matrix to gauss_legendre
johnomotani Aug 16, 2024
771a7f2
Re-calculate qpar in more places in electron_backward_euler!()
johnomotani Aug 18, 2024
d486225
Non-split LU preconditioner for electron_backward_euler!()
johnomotani Aug 14, 2024
5cc9fc6
Split Jacobian matrix (for electrons) calculation into separate funcs
johnomotani Aug 20, 2024
78af080
Fix 'constant' bc, make it compatible with moment-kinetic mode (?)
johnomotani Aug 20, 2024
da9e415
Implement "constant" z-boundary condition for electrons
johnomotani Aug 20, 2024
f9bc69b
Add argument to skip electron solve when calling setup_moment_kinetics()
johnomotani Aug 21, 2024
41e3268
Handle absolute path in get_default_restart_filename()
johnomotani Aug 21, 2024
269f749
Handle z-bc in skip_f_electron_bc_points_in_Jacobian()
johnomotani Aug 21, 2024
d651d32
Add `elementwise_isapprox()` for tests
johnomotani Aug 22, 2024
bf31e91
Automated tests for electron Jacobian matrix construction
johnomotani Aug 21, 2024
bab63e8
Use 'soft forcing' for moment constraints in implicit electron solves
johnomotani Aug 26, 2024
5fe06cf
Clean up constraints enforcement for electron backward euler
johnomotani Aug 26, 2024
e38caf8
Enforce moment constraints on initial electron distribution function
johnomotani Aug 26, 2024
7074edd
Make Jacobian matrix tests work in parallel
johnomotani Aug 27, 2024
7d9a2f0
Move electron solver steps per ion step to separate plot
johnomotani Aug 27, 2024
7c472e4
Optimise Jacobian matrix construction using CSR format sparse matrices
johnomotani Aug 28, 2024
b6d1cc4
Reuse LU setup for Jacobian factorization
johnomotani Aug 28, 2024
bd2c41d
Always add electron energy equation terms to Jacobian matrix
johnomotani Aug 28, 2024
5402b51
Run electron solve with evolve_ppar=false to feed explicit d/dt
johnomotani Aug 28, 2024
6aed4db
Include electron_ppar, with ion_dt set, in second stage electron setup
johnomotani Aug 28, 2024
a246e6f
Fix RK integration test when `a_implicit[1,1] != 0`
johnomotani Aug 29, 2024
3bfce73
Handle not-'low-storage' 2-stage methods in calculate_rk_coeffs.jl
johnomotani Aug 29, 2024
f10cdd7
Don't recreate preconditioner at the beginning of every electron solve
johnomotani Aug 29, 2024
da4e741
Add DIRK-IMEX methods from Pareschi & Russo 2005
johnomotani Aug 29, 2024
5935532
Fix electron initialisation if different n_rk_stages for electrons/ions
johnomotani Aug 29, 2024
26ff7a1
Fix setting of *_updated variables when restarting simulations
johnomotani Aug 30, 2024
2933dc8
Don't re-run electron solve when using implicit electron schemes
johnomotani Aug 30, 2024
326762b
Don't use forward-Euler initial guess in electron_backward_euler!()
johnomotani Aug 30, 2024
36529b2
Allow for block boundaries in skip_f_electron_bc_points_in_Jacobian()
johnomotani Aug 30, 2024
ccb643a
Add reconcile_element_boundaries_MPI_z_pdf_vpavperpz!()
johnomotani Aug 30, 2024
a79f849
Ensure block bndrys of precon fields consistent with distibuted MPI
johnomotani Aug 30, 2024
25e39dd
Tweak backward-Euler solver parameters
johnomotani Aug 31, 2024
f24379e
Try-catch in case sparsity pattern of precon_matrix changes
johnomotani Sep 2, 2024
7156b5e
Repurpose stage_counter to solves_since_precon_update
johnomotani Sep 2, 2024
3565cda
Recalculate electron preconditioner when Newton solve fails
johnomotani Sep 2, 2024
77e8bb5
Make electron bc iteration a bit more robust
johnomotani Sep 2, 2024
860bc0b
Fix steady state residual calculation in electron_backward_euler!()
johnomotani Sep 2, 2024
e658786
Fix Chodura condition diagnostic
johnomotani Sep 3, 2024
4c77c65
Option for "compressed" grids
johnomotani Sep 4, 2024
b77176a
Recalculate preconditioner when dt changes too much
johnomotani Sep 6, 2024
d2c5b18
Don't impose constraints as part of boundary condition inside NK solve
johnomotani Sep 6, 2024
9bf4bf4
Tweak pseudo-timestep update parameters in electron_backward_euler!()
johnomotani Sep 18, 2024
460493a
Merge branch 'wall-boundary-condition-experiment' into implicit-elect…
johnomotani Sep 18, 2024
4b9aea6
Update electron Jacobian to be compatible with 'multiple sources'
johnomotani Sep 18, 2024
4885860
Update kinetic electron input files with new input format
johnomotani Sep 18, 2024
da57d9d
Fix merge of input refactor and multiple sources with implicit electrons
johnomotani Sep 18, 2024
5eaeae8
Fix D_matrix after merging gauss_legendre fixes
johnomotani Sep 18, 2024
55fae4e
Add function to assemble strong-form matrix in gauss_legendre
johnomotani Sep 18, 2024
1384345
Limit maximum electron pseudo-timestep size relative to ion_dt
johnomotani Sep 19, 2024
db489c9
Merge branch 'fix-makie-post-processing-sections' into implicit-elect…
johnomotani Sep 19, 2024
071471a
Fix loading of `restart_electron_physics` option after inputs refactor
johnomotani Sep 19, 2024
8fc9915
Do reload electron timestep when restarting a kinetic electron sim
johnomotani Sep 19, 2024
b6d6332
Bndry adv_fac in `fill_electron_kinetic_equation_Jacobian!()`
johnomotani Sep 20, 2024
6cd036c
Fix precompile runs for kinetic electrons
johnomotani Sep 20, 2024
e4c0f65
Fix capping of electron dt relative to ion_dt
johnomotani Sep 20, 2024
88035a3
Activate bounds checking in CI debug checks
johnomotani Sep 20, 2024
bd9f612
Make timestep control parameters for kinetic electrons settable
johnomotani Sep 21, 2024
dbc123c
Make advance_info struct immutable
johnomotani Sep 21, 2024
e94efb7
Input file(s) for kinetic electron run with implicit pseudo-timestep
johnomotani Sep 21, 2024
16256d6
Update examples CI job with new input format
johnomotani Sep 21, 2024
f16d931
Allow different vpa and vz grids for 1V reactions for 'split1'
johnomotani Sep 21, 2024
05faeef
Don't use z-upwinding at distributed-MPI boundaries in Jacobian
johnomotani Sep 22, 2024
1cb227e
Fix dependencies in parallel CI job
johnomotani Sep 22, 2024
7025661
Use gausslegendre_pseudospectral in kinetic electron debug check
johnomotani Sep 22, 2024
9f36b89
Fix nl_solver_params update for 'implicit_electron_advance'
johnomotani Sep 22, 2024
1c23c01
Better defaults for implicit electron solve
johnomotani Sep 23, 2024
dd4fe19
Fix shared memory parallelisation in `electron_backward_euler!()`
johnomotani Sep 23, 2024
ea71a4a
Update debug checks initialisation for new input setup
johnomotani Sep 23, 2024
0b43b33
Fix indexing ions/neutrals when calling electron_energy_equation_no_r!()
johnomotani Sep 23, 2024
30be6a1
Merge branch 'master' into 'implicit-electrons'
johnomotani Sep 26, 2024
b918bdd
Fix timestep diagnostics plots
johnomotani Sep 24, 2024
2cac181
Option to switch off error handling in makie_post_processing
johnomotani Sep 24, 2024
ce01539
Fix loading of external_source_controller_integral when restarting
johnomotani Sep 26, 2024
96f1b24
Use separate sections for different electron source terms
johnomotani Sep 26, 2024
c2e5a9b
Test for kinetic electrons
johnomotani Sep 24, 2024
b767d22
Fix docstring in electron_kinetic_equation
johnomotani Sep 26, 2024
4210dcc
Use Givens rotations instead of MINPACK.jl in linear_solve!()
johnomotani Sep 27, 2024
fae7d0d
Avoid using MPI.bcast(), and other fixes to prevent type instability
johnomotani Sep 28, 2024
ae287a7
Replace `Ref` with `Base.RefValue` in struct definitions
johnomotani Sep 28, 2024
98a43ba
Fix reloading of `t_params.electron.previous_dt[]` when restarting
johnomotani Sep 28, 2024
aa9c281
Make dt, etc. non-shared memory
johnomotani Sep 29, 2024
954a646
Re-enable tests on macOS
johnomotani Sep 29, 2024
a169682
Tidy up formatting of test prints
johnomotani Sep 29, 2024
e75d6ac
Tweak parameters of kinetic electron test and update expected results
johnomotani Sep 29, 2024
65a2164
Allow plots/animations of unnormalised f_electron
johnomotani Sep 30, 2024
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion .github/workflows/debug_checks.yml
Original file line number Diff line number Diff line change
Expand Up @@ -31,7 +31,7 @@ jobs:
julia --project -O3 --check-bounds=yes -e 'using Pkg; Pkg.add(["MPI", "MPIPreferences", "PackageCompiler", "Symbolics"]); using MPIPreferences; MPIPreferences.use_jll_binary("OpenMPI_jll")'
julia --project -O3 --check-bounds=no -e 'using MPI; MPI.install_mpiexecjl(; destdir=".")'
julia --project -O3 --check-bounds=yes -e 'using Pkg; Pkg.develop(path="moment_kinetics/"); Pkg.precompile()'
julia --project -O3 --check-bounds=yes precompile.jl --debug 2
julia --project -O3 --check-bounds=yes precompile-with-check-bounds.jl --debug 2

# Need to use openmpi so that we can use `--oversubscribe` to allow using more MPI ranks than physical cores
## Don't use --compiled-modules=no for now, as it currently breaks Symbolics.jl
Expand Down
6 changes: 1 addition & 5 deletions .github/workflows/examples.yml
Original file line number Diff line number Diff line change
Expand Up @@ -23,8 +23,4 @@ jobs:
touch Project.toml
julia -O3 --project -e 'import Pkg; Pkg.develop(path="moment_kinetics/"); Pkg.add("NCDatasets"); Pkg.precompile()'
# Reduce nstep for each example to 10 to avoid the CI job taking too long
# Note we skip the example `if (occursin("ARK", get(t_input, "type", "") && Sys.isapple())`
# because the way we use MINPACK.jl (needed for nonlinear solvers
# used for implicit parts of timestep) doesn't currently work on
# macOS.
julia -O3 --project -e 'using moment_kinetics; for (root, dirs, files) in walkdir("examples") for file in files if endswith(file, ".toml") filename = joinpath(root, file); println(filename); input = moment_kinetics.moment_kinetics_input.read_input_file(filename); t_input = get(input, "timestepping", Dict{String,Any}()); if (occursin("ARK", get(t_input, "type", "")) && Sys.isapple()) continue end; t_input["nstep"] = 10; t_input["dt"] = 1.0e-12; input["timestepping"] = t_input; pop!(input, "z_nelement_local", ""); pop!(input, "r_nelement_local", ""); electron_t_input = get(input, "electron_timestepping", Dict{String,Any}()); electron_t_input["initialization_residual_value"] = 1.0e8; electron_t_input["converged_residual_value"] = 1.0e8; input["electron_timestepping"] = electron_t_input; nl_solver_input = get(input, "nonlinear_solver", Dict{String,Any}()); nl_solver_input["rtol"] = 1.0e6; nl_solver_input["atol"] = 1.0e6; input["nonlinear_solver"] = nl_solver_input; run_moment_kinetics(input) end end end'
julia -O3 --project -e 'using moment_kinetics; for (root, dirs, files) in walkdir("examples") for file in files if endswith(file, ".toml") filename = joinpath(root, file); println(filename); input = moment_kinetics.moment_kinetics_input.read_input_file(filename); t_input = get(input, "timestepping", Dict{String,Any}()); t_input["nstep"] = 10; t_input["dt"] = 1.0e-12; input["timestepping"] = t_input; pop!(get(input, "z", Dict{String,Any}()), "nelement_local", ""); pop!(get(input, "r", Dict{String,Any}()), "nelement_local", ""); electron_t_input = get(input, "electron_timestepping", Dict{String,Any}()); electron_t_input["initialization_residual_value"] = 1.0e8; electron_t_input["converged_residual_value"] = 1.0e8; input["electron_timestepping"] = electron_t_input; nl_solver_input = get(input, "nonlinear_solver", Dict{String,Any}()); nl_solver_input["rtol"] = 1.0e6; nl_solver_input["atol"] = 1.0e6; input["nonlinear_solver"] = nl_solver_input; run_moment_kinetics(input) end end end'
4 changes: 2 additions & 2 deletions .github/workflows/parallel_test.yml
Original file line number Diff line number Diff line change
Expand Up @@ -23,7 +23,7 @@ jobs:
touch Project.toml
julia --project -O3 --check-bounds=no -e 'import Pkg; Pkg.add(["MPI", "MPIPreferences"]); using MPIPreferences; MPIPreferences.use_jll_binary("OpenMPI_jll")'
julia --project -O3 --check-bounds=no -e 'using MPI; MPI.install_mpiexecjl(; destdir=".")'
julia --project -O3 --check-bounds=no -e 'import Pkg; Pkg.add(["Random", "SpecialFunctions", "Test"]); Pkg.develop(path="moment_kinetics/")'
julia --project -O3 --check-bounds=no -e 'import Pkg; Pkg.add(["Random", "SpecialFunctions", "StatsBase", "Test"]); Pkg.develop(path="moment_kinetics/")'
julia --project -O3 --check-bounds=no -e 'import Pkg; Pkg.precompile()'
# Need to use openmpi so that we can use `--oversubscribe` to allow using more MPI ranks than physical cores
./mpiexecjl -np 3 --oversubscribe julia --project -O3 --check-bounds=no moment_kinetics/test/runtests.jl --debug 1
Expand All @@ -48,7 +48,7 @@ jobs:
touch Project.toml
julia --project -O3 --check-bounds=no -e 'import Pkg; Pkg.add(["MPI", "MPIPreferences"]); using MPIPreferences; MPIPreferences.use_jll_binary("OpenMPI_jll")'
julia --project -O3 --check-bounds=no -e 'using MPI; MPI.install_mpiexecjl(; destdir=".")'
julia --project -O3 --check-bounds=no -e 'import Pkg; Pkg.add(["Random", "SpecialFunctions", "Test"]); Pkg.develop(path="moment_kinetics/")'
julia --project -O3 --check-bounds=no -e 'import Pkg; Pkg.add(["Random", "SpecialFunctions", "StatsBase", "Test"]); Pkg.develop(path="moment_kinetics/")'
julia --project -O3 --check-bounds=no -e 'import Pkg; Pkg.precompile()'
# Need to use openmpi so that we can use `--oversubscribe` to allow using more MPI ranks than physical cores
./mpiexecjl -np 4 --oversubscribe julia --project -O3 --check-bounds=no moment_kinetics/test/runtests.jl --debug 1
Expand Down
10 changes: 10 additions & 0 deletions examples/kinetic-electrons/README.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
This directory contains input files for some kinetic electron simulations that
are known to run (and probably some other experimental input files too). Inputs
that are expected to work:
* Wall bc with uniform grid. First converge a Boltzmann-electron simulation to
steady state, then restart kinetic electron simulation from that, e.g.
```julia
run_moment_kinetics("wall-bc_recyclefraction0.5_split3_boltzmann-coarse_tails-uniform-z-init.toml")
run_moment_kinetics("wall-bc_recyclefraction0.5_split3_boltzmann-coarse_tails-uniform-z.toml; restart="runs/wall-bc_recyclefraction0.5_split3_boltzmann-coarse_tails-uniform-z-init/wall-bc_recyclefraction0.5_split3_boltzmann-coarse_tails-uniform-z-init.dfns.h5")
run_moment_kinetics("wall-bc_recyclefraction0.5_split3_kinetic-coarse_tails-uniform-z-PareschiRusso2222.toml"; restart="runs/wall-bc_recyclefraction0.5_split3_boltzmann-coarse_tails-uniform-z/wall-bc_recyclefraction0.5_split3_boltzmann-coarse_tails-uniform-z.dfns.h5")
```
3 changes: 0 additions & 3 deletions examples/kinetic-electrons/periodic_split3_boltzmann.toml
Original file line number Diff line number Diff line change
Expand Up @@ -2,9 +2,6 @@
charge_exchange_frequency = 0.75
ionization_frequency = 0.0

[electron_fluid_collisions]
nu_ei = 1000.0

[evolve_moments]
density = true
parallel_flow = true
Expand Down
17 changes: 9 additions & 8 deletions examples/kinetic-electrons/periodic_split3_kinetic-IMEX.toml
Original file line number Diff line number Diff line change
Expand Up @@ -2,9 +2,6 @@
charge_exchange_frequency = 0.75
ionization_frequency = 0.0

[electron_fluid_collisions]
nu_ei = 1000.0

[evolve_moments]
density = true
parallel_flow = true
Expand All @@ -16,25 +13,25 @@ ngrid = 1
nelement = 1

[z]
ngrid = 17
nelement = 16
ngrid = 5
nelement = 32
#nelement_local = 16
bc = "periodic"
discretization = "chebyshev_pseudospectral"
discretization = "gausslegendre_pseudospectral"

[vpa]
ngrid = 6
nelement = 31
L = 12.0
bc = "zero"
discretization = "chebyshev_pseudospectral"
discretization = "gausslegendre_pseudospectral"

[vz]
ngrid = 6
nelement = 31
L = 12.0
bc = "zero"
discretization = "chebyshev_pseudospectral"
discretization = "gausslegendre_pseudospectral"

[composition]
n_ion_species = 1
Expand Down Expand Up @@ -89,6 +86,7 @@ upar_phase = 0.0
[timestepping]
type = "KennedyCarpenterARK324"
implicit_electron_advance = true
implicit_electron_ppar = false
implicit_ion_advance = false
implicit_vpa_advection = false
nstep = 1000000
Expand Down Expand Up @@ -116,6 +114,9 @@ type = "Fekete4(3)"
rtol = 1.0e-6
atol = 1.0e-14
minimum_dt = 1.0e-10
decrease_dt_iteration_threshold = 100
increase_dt_iteration_threshold = 20
cap_factor_ion_dt = 10.0
initialization_residual_value = 2.5
converged_residual_value = 0.1 #1.0e-3
#debug_io = 10000
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,152 @@
[r]
ngrid = 1
nelement = 1

[evolve_moments]
parallel_pressure = true
density = true
moments_conservation = true
parallel_flow = true

[reactions]
ionization_frequency = 0.0
charge_exchange_frequency = 0.75

[vz]
ngrid = 6
discretization = "gausslegendre_pseudospectral"
nelement = 31
L = 12.0
element_spacing_option = "coarse_tails"
bc = "zero"

[ion_species_1]
initial_temperature = 1.0
initial_density = 1.0

[krook_collisions]
nuee0 = 1000.0
use_krook = true
frequency_option = "reference_parameters"
nuei0 = 1000.0

[vpa]
ngrid = 6
discretization = "gausslegendre_pseudospectral"
nelement = 31
L = 12.0
element_spacing_option = "coarse_tails"
bc = "zero"

[z]
ngrid = 5
discretization = "gausslegendre_pseudospectral"
nelement = 16
nelement_local = 2
bc = "periodic"

[vpa_IC_ion_species_1]
initialization_option = "gaussian"
density_amplitude = 1.0
temperature_amplitude = 0.0
density_phase = 0.0
upar_amplitude = 0.0
temperature_phase = 0.0
upar_phase = 0.0

[z_IC_neutral_species_1]
initialization_option = "sinusoid"
temperature_amplitude = 0.0
density_amplitude = 0.001
density_phase = 0.0
upar_amplitude = 0.0
temperature_phase = 0.0
upar_phase = 0.0

[composition]
T_wall = 0.1
T_e = 1.0
electron_physics = "kinetic_electrons"
recycling_fraction = 0.5
n_ion_species = 1
n_neutral_species = 1

[vz_IC_neutral_species_1]
initialization_option = "gaussian"
density_amplitude = 1.0
temperature_amplitude = 0.0
density_phase = 0.0
upar_amplitude = 0.0
temperature_phase = 0.0
upar_phase = 0.0

[z_IC_ion_species_1]
initialization_option = "sinusoid"
density_amplitude = 0.1
temperature_amplitude = 0.1
density_phase = 0.0
upar_amplitude = 0.1
temperature_phase = 1.0
upar_phase = 0.0

[neutral_species_1]
initial_temperature = 1.0
initial_density = 1.0

[timestepping]
type = "PareschiRusso2(2,2,2)"
implicit_electron_advance = false
implicit_electron_ppar = true
implicit_ion_advance = false
implicit_vpa_advection = false
nstep = 500000
dt = 2.0e-4
#nwrite = 50
#nwrite_dfns = 50
nwrite = 5
nwrite_dfns = 5
steady_state_residual = true
converged_residual_value = 1.0e-3

[electron_timestepping]
nstep = 5000000
#nstep = 1
#dt = 2.0e-8
dt = 5.0e-5
maximum_dt = 1.0
nwrite = 10000
nwrite_dfns = 100000
#type = "SSPRK4"
type = "Fekete4(3)"
rtol = 1.0e-6
atol = 1.0e-14
minimum_dt = 1.0e-10
decrease_dt_iteration_threshold = 100
increase_dt_iteration_threshold = 20
cap_factor_ion_dt = 10.0
initialization_residual_value = 2.5
#converged_residual_value = 0.1 #1.0e-3
converged_residual_value = 1.0e-2
#debug_io = 10000
constraint_forcing_rate = 1.0e-4

[nonlinear_solver]
#nonlinear_max_iterations = 20 #100
nonlinear_max_iterations = 1000
rtol = 1.0e-8 #1.0e-5
atol = 1.0e-16
linear_restart = 5
preconditioner_update_interval = 100 #1000

[ion_numerical_dissipation]
vpa_dissipation_coefficient = 1.0e0
force_minimum_pdf_value = 0.0

[electron_numerical_dissipation]
vpa_dissipation_coefficient = 2.0
#vpa_dissipation_coefficient = 2.0e2
force_minimum_pdf_value = 0.0

[neutral_numerical_dissipation]
vz_dissipation_coefficient = 1.0e-1
force_minimum_pdf_value = 0.0
Loading