- emThe log of the electron density.
C++ Type:std::vector<VariableName>
Unit:(no unit assumed)
Controllable:No
Description:The log of the electron density.
- position_unitsUnits of position.
C++ Type:double
Unit:(no unit assumed)
Controllable:No
Description:Units of position.
- variableThe name of the variable that this residual object operates on
C++ Type:NonlinearVariableName
Unit:(no unit assumed)
Controllable:No
Description:The name of the variable that this residual object operates on
ThermalConductivityDiffusion
Electron energy diffusion term that assumes a thermal conductivity of
Overview
ThermalConductivityDiffusion
supplies an electron energy diffusion term that assumes an electron thermal conductivity for the electron energy flux.
The thermal conductivity formulation of the electron energy flux in terms of electron temperature is defined as:
where
is the electron energy flux,
is the electron thermal conductivity,
is the electron temperature (in units of eV),
is the electron flux,
is the electron density,
is the electron diffusion coefficient,
is the electron mobility coefficient, and
is the electric field.
Instead of the electron temperature, Zapdos solves for the electron energy density (), such that:
Using the electron energy density, the thermal conductivity formulation of the electron energy flux becames:
where
is the electron energy diffusion coefficient (assuming ), and
is the electron energy mobility coefficient (assuming ).
The first term is supplied by EFieldAdvection, the second term is suppled by CoeffDiffusion and the remaining terms are supplied by ThermalConductivityDiffusion
.
When converting the density to logarithmic form and applying a scaling factor of the mesh, ThermalConductivityDiffusion
is defined as
Where is the molar density of the species in logarithmic form and is the scaling factor of the mesh.
Example Input File Syntax
[Kernels]
[mean_en_diffusion_correction]
type = ThermalConductivityDiffusion
variable = mean_en
em = em
position_units = 1.0
[]
[]
(test/tests/mms/continuity_equations/2D_Coupling_Electons_Potential_Ions_MeanEnergy_Einstein_Relation.i)Input Parameters
- blockThe list of blocks (ids or names) that this object will be applied
C++ Type:std::vector<SubdomainName>
Controllable:No
Description:The list of blocks (ids or names) that this object will be applied
- displacementsThe displacements
C++ Type:std::vector<VariableName>
Unit:(no unit assumed)
Controllable:No
Description:The displacements
Optional Parameters
- absolute_value_vector_tagsThe tags for the vectors this residual object should fill with the absolute value of the residual contribution
C++ Type:std::vector<TagName>
Controllable:No
Description:The tags for the vectors this residual object should fill with the absolute value of the residual contribution
- extra_matrix_tagsThe extra tags for the matrices this Kernel should fill
C++ Type:std::vector<TagName>
Controllable:No
Description:The extra tags for the matrices this Kernel should fill
- extra_vector_tagsThe extra tags for the vectors this Kernel should fill
C++ Type:std::vector<TagName>
Controllable:No
Description:The extra tags for the vectors this Kernel should fill
- matrix_tagssystemThe tag for the matrices this Kernel should fill
Default:system
C++ Type:MultiMooseEnum
Options:nontime, system
Controllable:No
Description:The tag for the matrices this Kernel should fill
- vector_tagsnontimeThe tag for the vectors this Kernel should fill
Default:nontime
C++ Type:MultiMooseEnum
Options:nontime, time
Controllable:No
Description:The tag for the vectors this Kernel should fill
Contribution To Tagged Field Data Parameters
- control_tagsAdds user-defined labels for accessing object parameters via control logic.
C++ Type:std::vector<std::string>
Controllable:No
Description:Adds user-defined labels for accessing object parameters via control logic.
- diag_save_inThe name of auxiliary variables to save this Kernel's diagonal Jacobian contributions to. Everything about that variable must match everything about this variable (the type, what blocks it's on, etc.)
C++ Type:std::vector<AuxVariableName>
Unit:(no unit assumed)
Controllable:No
Description:The name of auxiliary variables to save this Kernel's diagonal Jacobian contributions to. Everything about that variable must match everything about this variable (the type, what blocks it's on, etc.)
- enableTrueSet the enabled status of the MooseObject.
Default:True
C++ Type:bool
Controllable:Yes
Description:Set the enabled status of the MooseObject.
- implicitTrueDetermines whether this object is calculated using an implicit or explicit form
Default:True
C++ Type:bool
Controllable:No
Description:Determines whether this object is calculated using an implicit or explicit form
- save_inThe name of auxiliary variables to save this Kernel's residual contributions to. Everything about that variable must match everything about this variable (the type, what blocks it's on, etc.)
C++ Type:std::vector<AuxVariableName>
Unit:(no unit assumed)
Controllable:No
Description:The name of auxiliary variables to save this Kernel's residual contributions to. Everything about that variable must match everything about this variable (the type, what blocks it's on, etc.)
- seed0The seed for the master random number generator
Default:0
C++ Type:unsigned int
Controllable:No
Description:The seed for the master random number generator
- use_displaced_meshFalseWhether or not this object should use the displaced mesh for computation. Note that in the case this is true but no displacements are provided in the Mesh block the undisplaced mesh will still be used.
Default:False
C++ Type:bool
Controllable:No
Description:Whether or not this object should use the displaced mesh for computation. Note that in the case this is true but no displacements are provided in the Mesh block the undisplaced mesh will still be used.
Advanced Parameters
- prop_getter_suffixAn optional suffix parameter that can be appended to any attempt to retrieve/get material properties. The suffix will be prepended with a '_' character.
C++ Type:MaterialPropertyName
Unit:(no unit assumed)
Controllable:No
Description:An optional suffix parameter that can be appended to any attempt to retrieve/get material properties. The suffix will be prepended with a '_' character.
- use_interpolated_stateFalseFor the old and older state use projected material properties interpolated at the quadrature points. To set up projection use the ProjectedStatefulMaterialStorageAction.
Default:False
C++ Type:bool
Controllable:No
Description:For the old and older state use projected material properties interpolated at the quadrature points. To set up projection use the ProjectedStatefulMaterialStorageAction.
Material Property Retrieval Parameters
Input Files
(test/tests/mms/continuity_equations/2D_Coupling_Electons_Potential_Ions_MeanEnergy_Einstein_Relation.i)
[Mesh]
[geo]
type = FileMeshGenerator
file = '2D_Coupling_Electons_Potential_Ions_MeanEnergy_Einstein_Relation_IC_out.e'
use_for_exodus_restart = true
[]
[]
[Problem]
type = FEProblem
[]
[Variables]
[em]
initial_from_file_var = em
[]
[potential]
initial_from_file_var = potential
[]
[ion]
initial_from_file_var = ion
[]
[mean_en]
initial_from_file_var = mean_en
[]
[]
[Kernels]
#Electron Equations
[em_time_derivative]
type = TimeDerivativeLog
variable = em
[]
[em_diffusion]
type = CoeffDiffusion
variable = em
position_units = 1.0
[]
[em_advection]
type = EFieldAdvection
variable = em
position_units = 1.0
[]
[em_source]
type = BodyForce
variable = em
function = 'em_source'
[]
#Ion Equations
[ion_time_derivative]
type = TimeDerivativeLog
variable = ion
[]
[ion_diffusion]
type = CoeffDiffusion
variable = ion
position_units = 1.0
[]
[ion_advection]
type = EFieldAdvection
variable = ion
position_units = 1.0
[]
[ion_source]
type = BodyForce
variable = ion
function = 'ion_source'
[]
#Potential Equations
[potential_diffusion]
type = CoeffDiffusionLin
variable = potential
position_units = 1.0
[]
[ion_charge_source]
type = ChargeSourceMoles_KV
variable = potential
charged = ion
potential_units = V
[]
[em_charge_source]
type = ChargeSourceMoles_KV
variable = potential
charged = em
potential_units = V
[]
#Electron Energy Equations
[mean_en_time_deriv]
type = TimeDerivativeLog
variable = mean_en
[]
[mean_en_advection]
type = EFieldAdvection
variable = mean_en
position_units = 1.0
[]
[mean_en_diffusion]
type = CoeffDiffusion
variable = mean_en
position_units = 1.0
[]
[mean_en_diffusion_correction]
type = ThermalConductivityDiffusion
variable = mean_en
em = em
position_units = 1.0
[]
[mean_en_joule_heating]
type = JouleHeating
variable = mean_en
em = em
position_units = 1.0
potential_units = V
[]
[mean_en_source]
type = BodyForce
variable = mean_en
function = 'energy_source'
[]
[]
[AuxVariables]
[potential_sol]
[]
[mean_en_sol]
[]
[em_sol]
[]
[ion_sol]
[]
[]
[AuxKernels]
[potential_sol]
type = FunctionAux
variable = potential_sol
function = potential_fun
[]
[mean_en_sol]
type = FunctionAux
variable = mean_en_sol
function = mean_en_fun
[]
[em_sol]
type = FunctionAux
variable = em_sol
function = em_fun
[]
[ion_sol]
type = FunctionAux
variable = ion_sol
function = ion_fun
[]
[]
[Functions]
#Material Variables
#Electron diffusion coeff.
[diffem_coeff]
type = ConstantFunction
value = 0.05
[]
#Electron mobility coeff.
[muem_coeff]
type = ConstantFunction
value = 0.01
[]
#Electron energy diffusion coeff.
[diffmean_en_coeff]
type = ParsedFunction
vars = 'diffem_coeff'
vals = 'diffem_coeff'
value = '5.0 / 3.0 * diffem_coeff'
[]
#Electron energy mobility coeff.
[mumean_en_coeff]
type = ParsedFunction
vars = 'muem_coeff'
vals = 'muem_coeff'
value = '5.0 / 3.0 * muem_coeff'
[]
#Ion diffusion coeff.
[diffion]
type = ConstantFunction
value = 0.1
[]
#Ion mobility coeff.
[muion]
type = ConstantFunction
value = 0.025
[]
[N_A]
type = ConstantFunction
value = 1.0
[]
[ee]
type = ConstantFunction
value = 1.0
[]
[diffpotential]
type = ConstantFunction
value = 0.01
[]
#Manufactured Solutions
#The manufactured electron density solution
[em_fun]
type = ParsedFunction
vars = 'N_A'
vals = 'N_A'
value = 'log((sin(pi*y) + 0.2*sin(2*pi*t)*cos(pi*y) + 1.0 + cos(pi/2*x)) / N_A)'
[]
#The manufactured ion density solution
[ion_fun]
type = ParsedFunction
vars = 'N_A'
vals = 'N_A'
value = 'log((sin(pi*y) + 1.0 + 0.9*cos(pi/2*x)) / N_A)'
[]
#The manufactured electron density solution
[potential_fun]
type = ParsedFunction
vars = 'ee diffpotential'
vals = 'ee diffpotential'
value = '-(ee*(2*cos((pi*x)/2) + cos(pi*y)*sin(2*pi*t)))/(5*diffpotential*pi^2)'
[]
#The manufactured electron energy solution
[energy_fun]
type = ParsedFunction
vars = 'N_A'
vals = 'N_A'
value = 'sin(pi*y) + sin(2*pi*t)*cos(pi*y)*sin(pi*y) + 0.75 + cos(pi/2*x)'
[]
[mean_en_fun]
type = ParsedFunction
vars = 'energy_fun em_fun'
vals = 'energy_fun em_fun'
value = 'log(energy_fun) + em_fun'
[]
#Electron diffusion coeff.
[diffem]
type = ParsedFunction
vars = 'diffem_coeff energy_fun'
vals = 'diffem_coeff energy_fun'
value = 'diffem_coeff * energy_fun'
[]
#Electron mobility coeff.
[muem]
type = ParsedFunction
vars = 'muem_coeff energy_fun'
vals = 'muem_coeff energy_fun'
value = 'muem_coeff * energy_fun'
[]
#Electron energy diffusion coeff.
[diffmean_en]
type = ParsedFunction
vars = 'diffmean_en_coeff energy_fun'
vals = 'diffmean_en_coeff energy_fun'
value = 'diffmean_en_coeff * energy_fun'
[]
#Electron energy mobility coeff.
[mumean_en]
type = ParsedFunction
vars = 'mumean_en_coeff energy_fun'
vals = 'mumean_en_coeff energy_fun'
value = 'mumean_en_coeff * energy_fun'
[]
#Source Terms in moles
#The electron source term.
[em_source]
type = ParsedFunction
vars = 'ee diffpotential diffem_coeff muem_coeff N_A'
vals = 'ee diffpotential diffem_coeff muem_coeff N_A'
value = '((2*pi*cos(2*pi*t)*cos(pi*y))/5 - (diffem_coeff*pi^2*sin((pi*x)/2)^2)/4 -
diffem_coeff*pi*(pi*cos(pi*y) - (pi*sin(2*pi*t)*sin(pi*y))/5)*(cos(pi*y) -
sin(2*pi*t) + 2*cos(pi*y)^2*sin(2*pi*t)) +
(diffem_coeff*pi^2*cos((pi*x)/2)*(cos((pi*x)/2) + sin(pi*y) +
cos(pi*y)*sin(2*pi*t)*sin(pi*y) + 3/4))/4 + (diffem_coeff*pi^2*(5*sin(pi*y) +
cos(pi*y)*sin(2*pi*t))*(cos((pi*x)/2) + sin(pi*y) + cos(pi*y)*sin(2*pi*t)*sin(pi*y) + 3/4))/5 -
(ee*muem_coeff*sin((pi*x)/2)^2*(cos((pi*x)/2) + sin(pi*y) +
cos(pi*y)*sin(2*pi*t)*sin(pi*y) + 3/4))/(10*diffpotential) - (ee*muem_coeff*sin((pi*x)/2)^2*(cos((pi*x)/2) +
sin(pi*y) + (cos(pi*y)*sin(2*pi*t))/5 + 1))/(10*diffpotential) + (ee*muem_coeff*cos((pi*x)/2)*(cos((pi*x)/2) +
sin(pi*y) + (cos(pi*y)*sin(2*pi*t))/5 + 1)*(cos((pi*x)/2) + sin(pi*y) +
cos(pi*y)*sin(2*pi*t)*sin(pi*y) + 3/4))/(10*diffpotential) +
(ee*muem_coeff*cos(pi*y)*sin(2*pi*t)*(cos((pi*x)/2) + sin(pi*y) +
(cos(pi*y)*sin(2*pi*t))/5 + 1)*(cos((pi*x)/2) + sin(pi*y) + cos(pi*y)*sin(2*pi*t)*sin(pi*y) + 3/4))/(5*diffpotential) +
(ee*muem_coeff*sin(2*pi*t)*sin(pi*y)*(cos(pi*y) - sin(2*pi*t) + 2*cos(pi*y)^2*sin(2*pi*t))*(cos((pi*x)/2) +
sin(pi*y) + (cos(pi*y)*sin(2*pi*t))/5 + 1))/(5*diffpotential) + (ee*muem_coeff*sin(2*pi*t)*sin(pi*y)*(pi*cos(pi*y) -
(pi*sin(2*pi*t)*sin(pi*y))/5)*(cos((pi*x)/2) + sin(pi*y) +
cos(pi*y)*sin(2*pi*t)*sin(pi*y) + 3/4))/(5*diffpotential*pi)) / N_A'
[]
#The ion source term.
[ion_source]
type = ParsedFunction
vars = 'ee diffpotential diffion muion N_A'
vals = 'ee diffpotential diffion muion N_A'
value = '((diffion*pi^2*(9*cos((pi*x)/2) + 40*sin(pi*y)))/40 +
(9*ee*muion*sin((pi*x)/2)^2)/(100*diffpotential) -
(ee*muion*cos((pi*x)/2)*((9*cos((pi*x)/2))/10 + sin(pi*y) + 1))/(10*diffpotential) -
(ee*muion*cos(pi*y)*sin(2*pi*t)*sin(pi*y))/(5*diffpotential) -
(ee*muion*cos(pi*y)*sin(2*pi*t)*((9*cos((pi*x)/2))/10 + sin(pi*y) + 1))/(5*diffpotential)) / N_A'
[]
[energy_source]
type = ParsedFunction
vars = 'ee diffpotential diffem_coeff muem_coeff N_A'
vals = 'ee diffpotential diffem_coeff muem_coeff N_A'
value = '(((4*cos((pi*x)/2) + 4*sin(pi*y) + 4*cos(pi*y)*sin(2*pi*t)*sin(pi*y) + 3)*(172*ee*muem_coeff*cos(2*pi*t)^2 -
282*ee*muem_coeff + 180*ee*muem_coeff*cos((pi*x)/2)^2 + 160*ee*muem_coeff*cos((pi*x)/2)^3 +
664*ee*muem_coeff*cos(pi*y)^2 - 480*ee*muem_coeff*cos(pi*y)^4 - 66*ee*muem_coeff*cos((pi*x)/2) -
296*ee*muem_coeff*sin(pi*y) + 200*diffem_coeff*diffpotential*pi^2 -
664*ee*muem_coeff*cos(2*pi*t)^2*cos(pi*y)^2 + 480*ee*muem_coeff*cos(2*pi*t)^2*cos(pi*y)^4 +
364*ee*muem_coeff*cos(pi*y)*sin(2*pi*t) - 90*ee*muem_coeff*cos((pi*x)/2)*sin(pi*y) +
75*diffem_coeff*diffpotential*pi^2*cos((pi*x)/2) + 140*diffem_coeff*diffpotential*pi^2*sin(pi*y) +
16*ee*muem_coeff*cos(2*pi*t)^2*cos((pi*x)/2) - 8*ee*muem_coeff*cos((pi*x)/2)*cos(pi*y)^2 +
176*ee*muem_coeff*cos(2*pi*t)^2*sin(pi*y) - 320*ee*muem_coeff*cos(pi*y)^3*sin(2*pi*t) +
200*ee*muem_coeff*cos((pi*x)/2)^2*sin(pi*y) + 464*ee*muem_coeff*cos(pi*y)^2*sin(pi*y) +
300*diffem_coeff*diffpotential*pi^2*cos((pi*x)/2)^2 - 1200*diffem_coeff*diffpotential*pi^2*cos(pi*y)^2 +
160*ee*muem_coeff*cos(2*pi*t)^2*cos((pi*x)/2)*sin(pi*y) +
104*ee*muem_coeff*cos((pi*x)/2)^2*cos(pi*y)*sin(2*pi*t) -
40*ee*muem_coeff*cos((pi*x)/2)*cos(pi*y)^3*sin(2*pi*t) +
408*ee*muem_coeff*cos((pi*x)/2)*cos(pi*y)^2*sin(pi*y) + 96*ee*muem_coeff*cos(pi*y)^3*sin(2*pi*t)*sin(pi*y) +
160*diffem_coeff*diffpotential*pi^2*cos(2*pi*t)^2*sin(pi*y) -
2000*diffem_coeff*diffpotential*pi^2*cos(pi*y)^3*sin(2*pi*t) +
400*diffem_coeff*diffpotential*pi^2*cos(pi*y)^2*sin(pi*y) -
32*ee*muem_coeff*cos(2*pi*t)^2*cos((pi*x)/2)*cos(pi*y)^2 -
464*ee*muem_coeff*cos(2*pi*t)^2*cos(pi*y)^2*sin(pi*y) +
186*ee*muem_coeff*cos((pi*x)/2)*cos(pi*y)*sin(2*pi*t) + 272*ee*muem_coeff*cos(pi*y)*sin(2*pi*t)*sin(pi*y) +
1260*diffem_coeff*diffpotential*pi^2*cos(pi*y)*sin(2*pi*t) +
500*diffem_coeff*diffpotential*pi^2*cos((pi*x)/2)*sin(pi*y) -
408*ee*muem_coeff*cos(2*pi*t)^2*cos((pi*x)/2)*cos(pi*y)^2*sin(pi*y) -
96*ee*muem_coeff*cos(2*pi*t)^2*cos(pi*y)^3*sin(2*pi*t)*sin(pi*y) -
400*diffem_coeff*diffpotential*pi^2*cos(2*pi*t)^2*cos(pi*y)^2*sin(pi*y) +
448*ee*muem_coeff*cos((pi*x)/2)*cos(pi*y)*sin(2*pi*t)*sin(pi*y) +
80*diffem_coeff*diffpotential*pi^2*cos((pi*x)/2)*cos(pi*y)*sin(2*pi*t) +
240*diffem_coeff*diffpotential*pi^2*cos(pi*y)*sin(2*pi*t)*sin(pi*y) +
48*ee*muem_coeff*cos(2*pi*t)^2*cos(pi*y)*sin(2*pi*t)*sin(pi*y) +
80*ee*muem_coeff*cos((pi*x)/2)^2*cos(pi*y)*sin(2*pi*t)*sin(pi*y) +
100*diffem_coeff*diffpotential*pi^2*cos((pi*x)/2)*cos(pi*y)*sin(2*pi*t)*sin(pi*y)))/(960*diffpotential) +
(pi*cos(2*pi*t)*cos(pi*y)*(4*cos((pi*x)/2) + 24*sin(pi*y) + 20*cos((pi*x)/2)*sin(pi*y) + 20*sin(pi*y)^2 +
8*cos(pi*y)*sin(2*pi*t)*sin(pi*y) + 3))/10 - (diffem_coeff*pi^2*sin((pi*x)/2)^2*(cos((pi*x)/2) +
sin(pi*y) + cos(pi*y)*sin(2*pi*t)*sin(pi*y) + 3/4))/4 - (diffem_coeff*pi^2*sin((pi*x)/2)^2*(cos((pi*x)/2) +
sin(pi*y) + (cos(pi*y)*sin(2*pi*t))/5 + 1))/4 - diffem_coeff*pi^2*(cos(pi*y) - sin(2*pi*t) +
2*cos(pi*y)^2*sin(2*pi*t))^2*(cos((pi*x)/2) + sin(pi*y) + (cos(pi*y)*sin(2*pi*t))/5 + 1) +
(diffem_coeff*pi^2*cos((pi*x)/2)*(cos((pi*x)/2) + sin(pi*y) +
(cos(pi*y)*sin(2*pi*t))/5 + 1)*(cos((pi*x)/2) + sin(pi*y) + cos(pi*y)*sin(2*pi*t)*sin(pi*y) + 3/4))/4 -
diffem_coeff*pi*(pi*cos(pi*y) - (pi*sin(2*pi*t)*sin(pi*y))/5)*(cos(pi*y) - sin(2*pi*t) +
2*cos(pi*y)^2*sin(2*pi*t))*(cos((pi*x)/2) + sin(pi*y) + cos(pi*y)*sin(2*pi*t)*sin(pi*y) + 3/4) +
(ee*sin(2*pi*t)*sin(pi*y)*(diffem_coeff*(pi*cos(pi*y) - (pi*sin(2*pi*t)*sin(pi*y))/5)*(cos((pi*x)/2) +
sin(pi*y) + cos(pi*y)*sin(2*pi*t)*sin(pi*y) + 3/4) - (ee*muem_coeff*sin(2*pi*t)*sin(pi*y)*(cos((pi*x)/2) +
sin(pi*y) + (cos(pi*y)*sin(2*pi*t))/5 + 1)*(cos((pi*x)/2) + sin(pi*y) +
cos(pi*y)*sin(2*pi*t)*sin(pi*y) + 3/4))/(5*diffpotential*pi)))/(5*diffpotential*pi) +
diffem_coeff*pi^2*sin(pi*y)*(4*cos(pi*y)*sin(2*pi*t) + 1)*(cos((pi*x)/2) + sin(pi*y) +
(cos(pi*y)*sin(2*pi*t))/5 + 1)*(cos((pi*x)/2) + sin(pi*y) + cos(pi*y)*sin(2*pi*t)*sin(pi*y) + 3/4) -
(ee*sin((pi*x)/2)^2*(4*cos((pi*x)/2) + 4*sin(pi*y) +
4*cos(pi*y)*sin(2*pi*t)*sin(pi*y) + 3)*(10*ee*muem_coeff + 10*ee*muem_coeff*cos((pi*x)/2) +
10*ee*muem_coeff*sin(pi*y) + 25*diffem_coeff*diffpotential*pi^2 +
2*ee*muem_coeff*cos(pi*y)*sin(2*pi*t)))/(1000*diffpotential^2*pi^2)) / N_A'
[]
[em_ICs]
type = ParsedFunction
vars = 'N_A'
vals = 'N_A'
value = 'log((3.0 + cos(pi/2*x)) / N_A)'
[]
[ion_ICs]
type = ParsedFunction
vars = 'N_A'
vals = 'N_A'
value = 'log((3.0 + 0.9*cos(pi/2*x)) / N_A)'
[]
[mean_en_ICs]
type = ParsedFunction
vars = 'em_ICs'
vals = 'em_ICs'
value = 'log(32. + cos(pi/2*x)) + em_ICs'
[]
[]
[BCs]
[potential_BC]
type = FunctionDirichletBC
variable = potential
function = 'potential_fun'
boundary = '0 1 2 3'
preset = true
[]
[em_BC]
type = FunctionDirichletBC
variable = em
function = 'em_fun'
boundary = '0 1 2 3'
preset = true
[]
[ion_BC]
type = FunctionDirichletBC
variable = ion
function = 'ion_fun'
boundary = '0 1 2 3'
preset = true
[]
[energy_BC]
type = FunctionDirichletBC
variable = mean_en
function = 'mean_en_fun'
boundary = '0 1 2 3'
preset = true
[]
[]
[Materials]
[field_solver]
type = FieldSolverMaterial
potential = potential
[]
[Material_Coeff]
type = GenericFunctionMaterial
prop_names = 'e N_A'
prop_values = 'ee N_A'
[]
[ADMaterial_Coeff_Set1]
type = ADGenericFunctionMaterial
prop_names = 'diffpotential diffion muion'
prop_values = 'diffpotential diffion muion'
[]
[Material_Coeff_Set2]
type = ADMMSEEDFRates
electrons = em
mean_energy = mean_en
prop_names = 'diffem muem diffmean_en mumean_en'
prop_values = 'diffem muem diffmean_en mumean_en'
d_prop_d_actual_mean_en = 'diffem_coeff muem_coeff diffmean_en_coeff mumean_en_coeff'
[]
[Charge_Signs]
type = GenericConstantMaterial
prop_names = 'sgnem sgnion sgnmean_en'
prop_values = '-1.0 1.0 -1.0'
[]
[]
[Postprocessors]
[em_l2Error]
type = ElementL2Error
variable = em
function = em_fun
[]
[ion_l2Error]
type = ElementL2Error
variable = ion
function = ion_fun
[]
[potential_l2Error]
type = ElementL2Error
variable = potential
function = potential_fun
[]
[mean_en_l2Error]
type = ElementL2Error
variable = mean_en
function = mean_en_fun
[]
[h]
type = AverageElementSize
[]
[]
[Preconditioning]
active = 'smp'
[smp]
type = SMP
full = true
[]
[fdp]
type = FDP
full = true
[]
[]
[Executioner]
type = Transient
start_time = 50
end_time = 51
# dt = 0.008
dt = 0.02
automatic_scaling = true
compute_scaling_once = false
petsc_options = '-snes_converged_reason -snes_linesearch_monitor'
solve_type = NEWTON
line_search = none
petsc_options_iname = '-pc_type -pc_factor_shift_type -pc_factor_shift_amount'
petsc_options_value = 'lu NONZERO 1.e-10'
scheme = bdf2
nl_abs_tol = 1e-13
[]
[Outputs]
perf_graph = true
[out]
type = Exodus
interval = 10
[]
[]
(test/tests/mms/continuity_equations/2D_Coupling_Electons_Potential_Ions_MeanEnergy_Einstein_Relation.i)
[Mesh]
[geo]
type = FileMeshGenerator
file = '2D_Coupling_Electons_Potential_Ions_MeanEnergy_Einstein_Relation_IC_out.e'
use_for_exodus_restart = true
[]
[]
[Problem]
type = FEProblem
[]
[Variables]
[em]
initial_from_file_var = em
[]
[potential]
initial_from_file_var = potential
[]
[ion]
initial_from_file_var = ion
[]
[mean_en]
initial_from_file_var = mean_en
[]
[]
[Kernels]
#Electron Equations
[em_time_derivative]
type = TimeDerivativeLog
variable = em
[]
[em_diffusion]
type = CoeffDiffusion
variable = em
position_units = 1.0
[]
[em_advection]
type = EFieldAdvection
variable = em
position_units = 1.0
[]
[em_source]
type = BodyForce
variable = em
function = 'em_source'
[]
#Ion Equations
[ion_time_derivative]
type = TimeDerivativeLog
variable = ion
[]
[ion_diffusion]
type = CoeffDiffusion
variable = ion
position_units = 1.0
[]
[ion_advection]
type = EFieldAdvection
variable = ion
position_units = 1.0
[]
[ion_source]
type = BodyForce
variable = ion
function = 'ion_source'
[]
#Potential Equations
[potential_diffusion]
type = CoeffDiffusionLin
variable = potential
position_units = 1.0
[]
[ion_charge_source]
type = ChargeSourceMoles_KV
variable = potential
charged = ion
potential_units = V
[]
[em_charge_source]
type = ChargeSourceMoles_KV
variable = potential
charged = em
potential_units = V
[]
#Electron Energy Equations
[mean_en_time_deriv]
type = TimeDerivativeLog
variable = mean_en
[]
[mean_en_advection]
type = EFieldAdvection
variable = mean_en
position_units = 1.0
[]
[mean_en_diffusion]
type = CoeffDiffusion
variable = mean_en
position_units = 1.0
[]
[mean_en_diffusion_correction]
type = ThermalConductivityDiffusion
variable = mean_en
em = em
position_units = 1.0
[]
[mean_en_joule_heating]
type = JouleHeating
variable = mean_en
em = em
position_units = 1.0
potential_units = V
[]
[mean_en_source]
type = BodyForce
variable = mean_en
function = 'energy_source'
[]
[]
[AuxVariables]
[potential_sol]
[]
[mean_en_sol]
[]
[em_sol]
[]
[ion_sol]
[]
[]
[AuxKernels]
[potential_sol]
type = FunctionAux
variable = potential_sol
function = potential_fun
[]
[mean_en_sol]
type = FunctionAux
variable = mean_en_sol
function = mean_en_fun
[]
[em_sol]
type = FunctionAux
variable = em_sol
function = em_fun
[]
[ion_sol]
type = FunctionAux
variable = ion_sol
function = ion_fun
[]
[]
[Functions]
#Material Variables
#Electron diffusion coeff.
[diffem_coeff]
type = ConstantFunction
value = 0.05
[]
#Electron mobility coeff.
[muem_coeff]
type = ConstantFunction
value = 0.01
[]
#Electron energy diffusion coeff.
[diffmean_en_coeff]
type = ParsedFunction
vars = 'diffem_coeff'
vals = 'diffem_coeff'
value = '5.0 / 3.0 * diffem_coeff'
[]
#Electron energy mobility coeff.
[mumean_en_coeff]
type = ParsedFunction
vars = 'muem_coeff'
vals = 'muem_coeff'
value = '5.0 / 3.0 * muem_coeff'
[]
#Ion diffusion coeff.
[diffion]
type = ConstantFunction
value = 0.1
[]
#Ion mobility coeff.
[muion]
type = ConstantFunction
value = 0.025
[]
[N_A]
type = ConstantFunction
value = 1.0
[]
[ee]
type = ConstantFunction
value = 1.0
[]
[diffpotential]
type = ConstantFunction
value = 0.01
[]
#Manufactured Solutions
#The manufactured electron density solution
[em_fun]
type = ParsedFunction
vars = 'N_A'
vals = 'N_A'
value = 'log((sin(pi*y) + 0.2*sin(2*pi*t)*cos(pi*y) + 1.0 + cos(pi/2*x)) / N_A)'
[]
#The manufactured ion density solution
[ion_fun]
type = ParsedFunction
vars = 'N_A'
vals = 'N_A'
value = 'log((sin(pi*y) + 1.0 + 0.9*cos(pi/2*x)) / N_A)'
[]
#The manufactured electron density solution
[potential_fun]
type = ParsedFunction
vars = 'ee diffpotential'
vals = 'ee diffpotential'
value = '-(ee*(2*cos((pi*x)/2) + cos(pi*y)*sin(2*pi*t)))/(5*diffpotential*pi^2)'
[]
#The manufactured electron energy solution
[energy_fun]
type = ParsedFunction
vars = 'N_A'
vals = 'N_A'
value = 'sin(pi*y) + sin(2*pi*t)*cos(pi*y)*sin(pi*y) + 0.75 + cos(pi/2*x)'
[]
[mean_en_fun]
type = ParsedFunction
vars = 'energy_fun em_fun'
vals = 'energy_fun em_fun'
value = 'log(energy_fun) + em_fun'
[]
#Electron diffusion coeff.
[diffem]
type = ParsedFunction
vars = 'diffem_coeff energy_fun'
vals = 'diffem_coeff energy_fun'
value = 'diffem_coeff * energy_fun'
[]
#Electron mobility coeff.
[muem]
type = ParsedFunction
vars = 'muem_coeff energy_fun'
vals = 'muem_coeff energy_fun'
value = 'muem_coeff * energy_fun'
[]
#Electron energy diffusion coeff.
[diffmean_en]
type = ParsedFunction
vars = 'diffmean_en_coeff energy_fun'
vals = 'diffmean_en_coeff energy_fun'
value = 'diffmean_en_coeff * energy_fun'
[]
#Electron energy mobility coeff.
[mumean_en]
type = ParsedFunction
vars = 'mumean_en_coeff energy_fun'
vals = 'mumean_en_coeff energy_fun'
value = 'mumean_en_coeff * energy_fun'
[]
#Source Terms in moles
#The electron source term.
[em_source]
type = ParsedFunction
vars = 'ee diffpotential diffem_coeff muem_coeff N_A'
vals = 'ee diffpotential diffem_coeff muem_coeff N_A'
value = '((2*pi*cos(2*pi*t)*cos(pi*y))/5 - (diffem_coeff*pi^2*sin((pi*x)/2)^2)/4 -
diffem_coeff*pi*(pi*cos(pi*y) - (pi*sin(2*pi*t)*sin(pi*y))/5)*(cos(pi*y) -
sin(2*pi*t) + 2*cos(pi*y)^2*sin(2*pi*t)) +
(diffem_coeff*pi^2*cos((pi*x)/2)*(cos((pi*x)/2) + sin(pi*y) +
cos(pi*y)*sin(2*pi*t)*sin(pi*y) + 3/4))/4 + (diffem_coeff*pi^2*(5*sin(pi*y) +
cos(pi*y)*sin(2*pi*t))*(cos((pi*x)/2) + sin(pi*y) + cos(pi*y)*sin(2*pi*t)*sin(pi*y) + 3/4))/5 -
(ee*muem_coeff*sin((pi*x)/2)^2*(cos((pi*x)/2) + sin(pi*y) +
cos(pi*y)*sin(2*pi*t)*sin(pi*y) + 3/4))/(10*diffpotential) - (ee*muem_coeff*sin((pi*x)/2)^2*(cos((pi*x)/2) +
sin(pi*y) + (cos(pi*y)*sin(2*pi*t))/5 + 1))/(10*diffpotential) + (ee*muem_coeff*cos((pi*x)/2)*(cos((pi*x)/2) +
sin(pi*y) + (cos(pi*y)*sin(2*pi*t))/5 + 1)*(cos((pi*x)/2) + sin(pi*y) +
cos(pi*y)*sin(2*pi*t)*sin(pi*y) + 3/4))/(10*diffpotential) +
(ee*muem_coeff*cos(pi*y)*sin(2*pi*t)*(cos((pi*x)/2) + sin(pi*y) +
(cos(pi*y)*sin(2*pi*t))/5 + 1)*(cos((pi*x)/2) + sin(pi*y) + cos(pi*y)*sin(2*pi*t)*sin(pi*y) + 3/4))/(5*diffpotential) +
(ee*muem_coeff*sin(2*pi*t)*sin(pi*y)*(cos(pi*y) - sin(2*pi*t) + 2*cos(pi*y)^2*sin(2*pi*t))*(cos((pi*x)/2) +
sin(pi*y) + (cos(pi*y)*sin(2*pi*t))/5 + 1))/(5*diffpotential) + (ee*muem_coeff*sin(2*pi*t)*sin(pi*y)*(pi*cos(pi*y) -
(pi*sin(2*pi*t)*sin(pi*y))/5)*(cos((pi*x)/2) + sin(pi*y) +
cos(pi*y)*sin(2*pi*t)*sin(pi*y) + 3/4))/(5*diffpotential*pi)) / N_A'
[]
#The ion source term.
[ion_source]
type = ParsedFunction
vars = 'ee diffpotential diffion muion N_A'
vals = 'ee diffpotential diffion muion N_A'
value = '((diffion*pi^2*(9*cos((pi*x)/2) + 40*sin(pi*y)))/40 +
(9*ee*muion*sin((pi*x)/2)^2)/(100*diffpotential) -
(ee*muion*cos((pi*x)/2)*((9*cos((pi*x)/2))/10 + sin(pi*y) + 1))/(10*diffpotential) -
(ee*muion*cos(pi*y)*sin(2*pi*t)*sin(pi*y))/(5*diffpotential) -
(ee*muion*cos(pi*y)*sin(2*pi*t)*((9*cos((pi*x)/2))/10 + sin(pi*y) + 1))/(5*diffpotential)) / N_A'
[]
[energy_source]
type = ParsedFunction
vars = 'ee diffpotential diffem_coeff muem_coeff N_A'
vals = 'ee diffpotential diffem_coeff muem_coeff N_A'
value = '(((4*cos((pi*x)/2) + 4*sin(pi*y) + 4*cos(pi*y)*sin(2*pi*t)*sin(pi*y) + 3)*(172*ee*muem_coeff*cos(2*pi*t)^2 -
282*ee*muem_coeff + 180*ee*muem_coeff*cos((pi*x)/2)^2 + 160*ee*muem_coeff*cos((pi*x)/2)^3 +
664*ee*muem_coeff*cos(pi*y)^2 - 480*ee*muem_coeff*cos(pi*y)^4 - 66*ee*muem_coeff*cos((pi*x)/2) -
296*ee*muem_coeff*sin(pi*y) + 200*diffem_coeff*diffpotential*pi^2 -
664*ee*muem_coeff*cos(2*pi*t)^2*cos(pi*y)^2 + 480*ee*muem_coeff*cos(2*pi*t)^2*cos(pi*y)^4 +
364*ee*muem_coeff*cos(pi*y)*sin(2*pi*t) - 90*ee*muem_coeff*cos((pi*x)/2)*sin(pi*y) +
75*diffem_coeff*diffpotential*pi^2*cos((pi*x)/2) + 140*diffem_coeff*diffpotential*pi^2*sin(pi*y) +
16*ee*muem_coeff*cos(2*pi*t)^2*cos((pi*x)/2) - 8*ee*muem_coeff*cos((pi*x)/2)*cos(pi*y)^2 +
176*ee*muem_coeff*cos(2*pi*t)^2*sin(pi*y) - 320*ee*muem_coeff*cos(pi*y)^3*sin(2*pi*t) +
200*ee*muem_coeff*cos((pi*x)/2)^2*sin(pi*y) + 464*ee*muem_coeff*cos(pi*y)^2*sin(pi*y) +
300*diffem_coeff*diffpotential*pi^2*cos((pi*x)/2)^2 - 1200*diffem_coeff*diffpotential*pi^2*cos(pi*y)^2 +
160*ee*muem_coeff*cos(2*pi*t)^2*cos((pi*x)/2)*sin(pi*y) +
104*ee*muem_coeff*cos((pi*x)/2)^2*cos(pi*y)*sin(2*pi*t) -
40*ee*muem_coeff*cos((pi*x)/2)*cos(pi*y)^3*sin(2*pi*t) +
408*ee*muem_coeff*cos((pi*x)/2)*cos(pi*y)^2*sin(pi*y) + 96*ee*muem_coeff*cos(pi*y)^3*sin(2*pi*t)*sin(pi*y) +
160*diffem_coeff*diffpotential*pi^2*cos(2*pi*t)^2*sin(pi*y) -
2000*diffem_coeff*diffpotential*pi^2*cos(pi*y)^3*sin(2*pi*t) +
400*diffem_coeff*diffpotential*pi^2*cos(pi*y)^2*sin(pi*y) -
32*ee*muem_coeff*cos(2*pi*t)^2*cos((pi*x)/2)*cos(pi*y)^2 -
464*ee*muem_coeff*cos(2*pi*t)^2*cos(pi*y)^2*sin(pi*y) +
186*ee*muem_coeff*cos((pi*x)/2)*cos(pi*y)*sin(2*pi*t) + 272*ee*muem_coeff*cos(pi*y)*sin(2*pi*t)*sin(pi*y) +
1260*diffem_coeff*diffpotential*pi^2*cos(pi*y)*sin(2*pi*t) +
500*diffem_coeff*diffpotential*pi^2*cos((pi*x)/2)*sin(pi*y) -
408*ee*muem_coeff*cos(2*pi*t)^2*cos((pi*x)/2)*cos(pi*y)^2*sin(pi*y) -
96*ee*muem_coeff*cos(2*pi*t)^2*cos(pi*y)^3*sin(2*pi*t)*sin(pi*y) -
400*diffem_coeff*diffpotential*pi^2*cos(2*pi*t)^2*cos(pi*y)^2*sin(pi*y) +
448*ee*muem_coeff*cos((pi*x)/2)*cos(pi*y)*sin(2*pi*t)*sin(pi*y) +
80*diffem_coeff*diffpotential*pi^2*cos((pi*x)/2)*cos(pi*y)*sin(2*pi*t) +
240*diffem_coeff*diffpotential*pi^2*cos(pi*y)*sin(2*pi*t)*sin(pi*y) +
48*ee*muem_coeff*cos(2*pi*t)^2*cos(pi*y)*sin(2*pi*t)*sin(pi*y) +
80*ee*muem_coeff*cos((pi*x)/2)^2*cos(pi*y)*sin(2*pi*t)*sin(pi*y) +
100*diffem_coeff*diffpotential*pi^2*cos((pi*x)/2)*cos(pi*y)*sin(2*pi*t)*sin(pi*y)))/(960*diffpotential) +
(pi*cos(2*pi*t)*cos(pi*y)*(4*cos((pi*x)/2) + 24*sin(pi*y) + 20*cos((pi*x)/2)*sin(pi*y) + 20*sin(pi*y)^2 +
8*cos(pi*y)*sin(2*pi*t)*sin(pi*y) + 3))/10 - (diffem_coeff*pi^2*sin((pi*x)/2)^2*(cos((pi*x)/2) +
sin(pi*y) + cos(pi*y)*sin(2*pi*t)*sin(pi*y) + 3/4))/4 - (diffem_coeff*pi^2*sin((pi*x)/2)^2*(cos((pi*x)/2) +
sin(pi*y) + (cos(pi*y)*sin(2*pi*t))/5 + 1))/4 - diffem_coeff*pi^2*(cos(pi*y) - sin(2*pi*t) +
2*cos(pi*y)^2*sin(2*pi*t))^2*(cos((pi*x)/2) + sin(pi*y) + (cos(pi*y)*sin(2*pi*t))/5 + 1) +
(diffem_coeff*pi^2*cos((pi*x)/2)*(cos((pi*x)/2) + sin(pi*y) +
(cos(pi*y)*sin(2*pi*t))/5 + 1)*(cos((pi*x)/2) + sin(pi*y) + cos(pi*y)*sin(2*pi*t)*sin(pi*y) + 3/4))/4 -
diffem_coeff*pi*(pi*cos(pi*y) - (pi*sin(2*pi*t)*sin(pi*y))/5)*(cos(pi*y) - sin(2*pi*t) +
2*cos(pi*y)^2*sin(2*pi*t))*(cos((pi*x)/2) + sin(pi*y) + cos(pi*y)*sin(2*pi*t)*sin(pi*y) + 3/4) +
(ee*sin(2*pi*t)*sin(pi*y)*(diffem_coeff*(pi*cos(pi*y) - (pi*sin(2*pi*t)*sin(pi*y))/5)*(cos((pi*x)/2) +
sin(pi*y) + cos(pi*y)*sin(2*pi*t)*sin(pi*y) + 3/4) - (ee*muem_coeff*sin(2*pi*t)*sin(pi*y)*(cos((pi*x)/2) +
sin(pi*y) + (cos(pi*y)*sin(2*pi*t))/5 + 1)*(cos((pi*x)/2) + sin(pi*y) +
cos(pi*y)*sin(2*pi*t)*sin(pi*y) + 3/4))/(5*diffpotential*pi)))/(5*diffpotential*pi) +
diffem_coeff*pi^2*sin(pi*y)*(4*cos(pi*y)*sin(2*pi*t) + 1)*(cos((pi*x)/2) + sin(pi*y) +
(cos(pi*y)*sin(2*pi*t))/5 + 1)*(cos((pi*x)/2) + sin(pi*y) + cos(pi*y)*sin(2*pi*t)*sin(pi*y) + 3/4) -
(ee*sin((pi*x)/2)^2*(4*cos((pi*x)/2) + 4*sin(pi*y) +
4*cos(pi*y)*sin(2*pi*t)*sin(pi*y) + 3)*(10*ee*muem_coeff + 10*ee*muem_coeff*cos((pi*x)/2) +
10*ee*muem_coeff*sin(pi*y) + 25*diffem_coeff*diffpotential*pi^2 +
2*ee*muem_coeff*cos(pi*y)*sin(2*pi*t)))/(1000*diffpotential^2*pi^2)) / N_A'
[]
[em_ICs]
type = ParsedFunction
vars = 'N_A'
vals = 'N_A'
value = 'log((3.0 + cos(pi/2*x)) / N_A)'
[]
[ion_ICs]
type = ParsedFunction
vars = 'N_A'
vals = 'N_A'
value = 'log((3.0 + 0.9*cos(pi/2*x)) / N_A)'
[]
[mean_en_ICs]
type = ParsedFunction
vars = 'em_ICs'
vals = 'em_ICs'
value = 'log(32. + cos(pi/2*x)) + em_ICs'
[]
[]
[BCs]
[potential_BC]
type = FunctionDirichletBC
variable = potential
function = 'potential_fun'
boundary = '0 1 2 3'
preset = true
[]
[em_BC]
type = FunctionDirichletBC
variable = em
function = 'em_fun'
boundary = '0 1 2 3'
preset = true
[]
[ion_BC]
type = FunctionDirichletBC
variable = ion
function = 'ion_fun'
boundary = '0 1 2 3'
preset = true
[]
[energy_BC]
type = FunctionDirichletBC
variable = mean_en
function = 'mean_en_fun'
boundary = '0 1 2 3'
preset = true
[]
[]
[Materials]
[field_solver]
type = FieldSolverMaterial
potential = potential
[]
[Material_Coeff]
type = GenericFunctionMaterial
prop_names = 'e N_A'
prop_values = 'ee N_A'
[]
[ADMaterial_Coeff_Set1]
type = ADGenericFunctionMaterial
prop_names = 'diffpotential diffion muion'
prop_values = 'diffpotential diffion muion'
[]
[Material_Coeff_Set2]
type = ADMMSEEDFRates
electrons = em
mean_energy = mean_en
prop_names = 'diffem muem diffmean_en mumean_en'
prop_values = 'diffem muem diffmean_en mumean_en'
d_prop_d_actual_mean_en = 'diffem_coeff muem_coeff diffmean_en_coeff mumean_en_coeff'
[]
[Charge_Signs]
type = GenericConstantMaterial
prop_names = 'sgnem sgnion sgnmean_en'
prop_values = '-1.0 1.0 -1.0'
[]
[]
[Postprocessors]
[em_l2Error]
type = ElementL2Error
variable = em
function = em_fun
[]
[ion_l2Error]
type = ElementL2Error
variable = ion
function = ion_fun
[]
[potential_l2Error]
type = ElementL2Error
variable = potential
function = potential_fun
[]
[mean_en_l2Error]
type = ElementL2Error
variable = mean_en
function = mean_en_fun
[]
[h]
type = AverageElementSize
[]
[]
[Preconditioning]
active = 'smp'
[smp]
type = SMP
full = true
[]
[fdp]
type = FDP
full = true
[]
[]
[Executioner]
type = Transient
start_time = 50
end_time = 51
# dt = 0.008
dt = 0.02
automatic_scaling = true
compute_scaling_once = false
petsc_options = '-snes_converged_reason -snes_linesearch_monitor'
solve_type = NEWTON
line_search = none
petsc_options_iname = '-pc_type -pc_factor_shift_type -pc_factor_shift_amount'
petsc_options_value = 'lu NONZERO 1.e-10'
scheme = bdf2
nl_abs_tol = 1e-13
[]
[Outputs]
perf_graph = true
[out]
type = Exodus
interval = 10
[]
[]
(test/tests/accelerations/Acceleration_By_Shooting_Method.i)
dom0Scale=25.4e-3
[GlobalParams]
potential_units = kV
use_moles = true
[]
[Mesh]
[geo]
type = FileMeshGenerator
file = 'Acceleration_By_Shooting_Method_Initial_Conditions.e'
use_for_exodus_restart = true
[]
[left]
type = SideSetsFromNormalsGenerator
normals = '-1 0 0'
new_boundary = 'left'
input = geo
[]
[right]
type = SideSetsFromNormalsGenerator
normals = '1 0 0'
new_boundary = 'right'
input = left
[]
[]
[Problem]
type = FEProblem
allow_initial_conditions_with_restart = true
[]
[Variables]
[em]
initial_from_file_var = em
[]
[Ar+]
initial_from_file_var = Ar+
[]
[Ar*]
initial_from_file_var = Ar*
[]
[mean_en]
initial_from_file_var = mean_en
[]
[potential]
initial_from_file_var = potential
[]
[SM_Ar*]
initial_from_file_var = SM_Ar*
[]
[]
[Kernels]
#Electron Equations
#Time Derivative term of electron
[em_time_deriv]
type = TimeDerivativeLog
variable = em
[]
#Advection term of electron
[em_advection]
type = EFieldAdvection
variable = em
position_units = ${dom0Scale}
[]
#Diffusion term of electrons
[em_diffusion]
type = CoeffDiffusion
variable = em
position_units = ${dom0Scale}
[]
#Net electron production from ionization
[em_ionization]
type = ADEEDFReactionLog
variable = em
electrons = em
target = Ar
reaction = 'em + Ar -> em + em + Ar+'
coefficient = 1
[]
#Net electron production from step-wise ionization
[em_stepwise_ionization]
type = ADEEDFReactionLog
variable = em
electrons = em
target = Ar*
reaction = 'em + Ar* -> em + em + Ar+'
coefficient = 1
[]
#Net electron production from metastable pooling
[em_pooling]
type = ADReactionSecondOrderLog
variable = em
v = Ar*
w = Ar*
reaction = 'Ar* + Ar* -> Ar+ + Ar + em'
coefficient = 1
[]
#Argon Ion Equations
#Time Derivative term of the ions
[Ar+_time_deriv]
type = TimeDerivativeLog
variable = Ar+
[]
#Advection term of ions
[Ar+_advection]
type = EFieldAdvection
variable = Ar+
position_units = ${dom0Scale}
[]
[Ar+_diffusion]
type = CoeffDiffusion
variable = Ar+
position_units = ${dom0Scale}
[]
#Net ion production from ionization
[Ar+_ionization]
type = ADEEDFReactionLog
variable = Ar+
electrons = em
target = Ar
reaction = 'em + Ar -> em + em + Ar+'
coefficient = 1
[]
#Net ion production from step-wise ionization
[Ar+_stepwise_ionization]
type = ADEEDFReactionLog
variable = Ar+
electrons = em
target = Ar*
reaction = 'em + Ar* -> em + em + Ar+'
coefficient = 1
[]
#Net ion production from metastable pooling
[Ar+_pooling]
type = ADReactionSecondOrderLog
variable = Ar+
v = Ar*
w = Ar*
reaction = 'Ar* + Ar* -> Ar+ + Ar + em'
coefficient = 1
[]
#Argon Excited Equations
#Time Derivative term of excited Argon
[Ar*_time_deriv]
type = TimeDerivativeLog
variable = Ar*
[]
#Diffusion term of excited Argon
[Ar*_diffusion]
type = CoeffDiffusion
variable = Ar*
position_units = ${dom0Scale}
[]
#Net excited Argon production from excitation
[Ar*_excitation]
type = ADEEDFReactionLog
variable = Ar*
electrons = em
target = Ar
reaction = 'em + Ar -> em + Ar*'
coefficient = 1
[]
#Net excited Argon loss from step-wise ionization
[Ar*_stepwise_ionization]
type = ADEEDFReactionLog
variable = Ar*
electrons = em
target = Ar*
reaction = 'em + Ar* -> em + em + Ar+'
coefficient = -1
[]
#Net excited Argon loss from superelastic collisions
[Ar*_collisions]
type = ADEEDFReactionLog
variable = Ar*
electrons = em
target = Ar*
reaction = 'em + Ar* -> em + Ar'
coefficient = -1
[]
#Net excited Argon loss from quenching to resonant
[Ar*_quenching]
type = ADReactionSecondOrderLog
variable = Ar*
v = em
w = Ar*
reaction = 'em + Ar* -> em + Ar_r'
coefficient = -1
_w_eq_u = true
[]
#Net excited Argon loss from metastable pooling
[Ar*_pooling]
type = ADReactionSecondOrderLog
variable = Ar*
v = Ar*
w = Ar*
reaction = 'Ar* + Ar* -> Ar+ + Ar + em'
coefficient = -2
_v_eq_u = true
_w_eq_u = true
[]
#Net excited Argon loss from two-body quenching
[Ar*_2B_quenching]
type = ADReactionSecondOrderLog
variable = Ar*
v = Ar
w = Ar*
reaction = 'Ar* + Ar -> Ar + Ar'
coefficient = -1
_v_eq_u = true
[]
#Net excited Argon loss from three-body quenching
[Ar*_3B_quenching]
type = ADReactionThirdOrderLog
variable = Ar*
v = Ar*
w = Ar
x = Ar
reaction = 'Ar* + Ar + Ar -> Ar_2 + Ar'
coefficient = -1
_v_eq_u = true
[]
#Voltage Equations
#Voltage term in Poissons Eqaution
[potential_diffusion_dom0]
type = CoeffDiffusionLin
variable = potential
position_units = ${dom0Scale}
[]
#Ion term in Poissons Equation
[Ar+_charge_source]
type = ChargeSourceMoles_KV
variable = potential
charged = Ar+
[]
#Electron term in Poissons Equation
[em_charge_source]
type = ChargeSourceMoles_KV
variable = potential
charged = em
[]
#Electron Energy Equations
#Time Derivative term of electron energy
[mean_en_time_deriv]
type = TimeDerivativeLog
variable = mean_en
[]
#Advection term of electron energy
[mean_en_advection]
type = EFieldAdvection
variable = mean_en
position_units = ${dom0Scale}
[]
#Diffusion term of electrons energy
[mean_en_diffusion]
type = CoeffDiffusion
variable = mean_en
position_units = ${dom0Scale}
[]
#The correction for electrons energy's diffusion term
[mean_en_diffusion_correction]
type = ThermalConductivityDiffusion
variable = mean_en
em = em
position_units = ${dom0Scale}
[]
#Joule Heating term
[mean_en_joule_heating]
type = JouleHeating
variable = mean_en
em = em
position_units = ${dom0Scale}
[]
#Energy loss from ionization
[Ionization_Loss]
type = ADEEDFEnergyLog
variable = mean_en
electrons = em
target = Ar
reaction = 'em + Ar -> em + em + Ar+'
threshold_energy = -15.7
[]
#Energy loss from excitation
[Excitation_Loss]
type = ADEEDFEnergyLog
variable = mean_en
electrons = em
target = Ar
reaction = 'em + Ar -> em + Ar*'
threshold_energy = -11.56
[]
#Energy loss from step-wise ionization
[Stepwise_Ionization_Loss]
type = ADEEDFEnergyLog
variable = mean_en
electrons = em
target = Ar*
reaction = 'em + Ar* -> em + em + Ar+'
threshold_energy = -4.14
[]
#Energy gain from superelastic collisions
[Collisions_Loss]
type = ADEEDFEnergyLog
variable = mean_en
electrons = em
target = Ar*
reaction = 'em + Ar* -> em + Ar'
threshold_energy = 11.56
[]
###################################################################################
#Argon Excited Equations
#Time Derivative term of excited Argon
[SM_Ar*_time_deriv]
type = MassLumpedTimeDerivative
variable = SM_Ar*
enable = false
[]
#Diffusion term of excited Argon
[SM_Ar*_diffusion]
type = CoeffDiffusionForShootMethod
variable = SM_Ar*
density = Ar*
position_units = ${dom0Scale}
enable = false
[]
#Net excited Argon loss from step-wise ionization
[SM_Ar*_stepwise_ionization]
type = EEDFReactionLogForShootMethod
variable = SM_Ar*
electron = em
density = Ar*
reaction = 'em + Ar* -> em + em + Ar+'
coefficient = -1
enable = false
[]
#Net excited Argon loss from superelastic collisions
[SM_Ar*_collisions]
type = EEDFReactionLogForShootMethod
variable = SM_Ar*
electron = em
density = Ar*
reaction = 'em + Ar* -> em + Ar'
coefficient = -1
enable = false
[]
#Net excited Argon loss from quenching to resonant
[SM_Ar*_quenching]
type = ReactionSecondOrderLogForShootMethod
variable = SM_Ar*
density = Ar*
v = em
reaction = 'em + Ar* -> em + Ar_r'
coefficient = -1
enable = false
[]
#Net excited Argon loss from metastable pooling
[SM_Ar*_pooling]
type = ReactionSecondOrderLogForShootMethod
variable = SM_Ar*
density = Ar*
v = Ar*
reaction = 'Ar* + Ar* -> Ar+ + Ar + em'
coefficient = -2
enable = false
[]
#Net excited Argon loss from two-body quenching
[SM_Ar*_2B_quenching]
type = ReactionSecondOrderLogForShootMethod
variable = SM_Ar*
density = Ar*
v = Ar
reaction = 'Ar* + Ar -> Ar + Ar'
coefficient = -1
enable = false
[]
#Net excited Argon loss from three-body quenching
[SM_Ar*_3B_quenching]
type = ReactionThirdOrderLogForShootMethod
variable = SM_Ar*
density = Ar*
v = Ar
w = Ar
reaction = 'Ar* + Ar + Ar -> Ar_2 + Ar'
coefficient = -1
enable = false
[]
[SM_Ar*_Null]
type = NullKernel
variable = SM_Ar*
[]
[]
#Variables for scaled nodes and background gas
[AuxVariables]
[SM_Ar*Reset]
initial_condition = 1.0
[]
[Ar*S]
[]
[x_node]
[]
[Ar]
[]
[Te]
order = CONSTANT
family = MONOMIAL
[]
[x]
order = CONSTANT
family = MONOMIAL
[]
[em_lin]
order = CONSTANT
family = MONOMIAL
[]
[Ar+_lin]
order = CONSTANT
family = MONOMIAL
[]
[Ar*_lin]
order = CONSTANT
family = MONOMIAL
[]
[]
#Kernels that define the scaled nodes and background gas
[AuxKernels]
[Ar*S_for_Shooting]
type = QuotientAux
variable = Ar*S
numerator = Ar*
denominator = 1.0
enable = false
execute_on = 'TIMESTEP_END'
[]
[Constant_SM_Ar*Reset]
type = ConstantAux
variable = SM_Ar*Reset
value = 1.0
execute_on = INITIAL
[]
[x_ng]
type = Position
variable = x_node
position_units = ${dom0Scale}
[]
[Ar_val]
type = FunctionAux
variable = Ar
# value = 3.22e22
function = 'log(3.22e22/6.02e23)'
execute_on = INITIAL
[]
[Te]
type = ElectronTemperature
variable = Te
electron_density = em
mean_en = mean_en
[]
[x_g]
type = Position
variable = x
position_units = ${dom0Scale}
[]
[em_lin]
type = DensityMoles
variable = em_lin
density_log = em
[]
[Ar+_lin]
type = DensityMoles
variable = Ar+_lin
density_log = Ar+
[]
[Ar*_lin]
type = DensityMoles
variable = Ar*_lin
density_log = Ar*
[]
[]
[BCs]
#Voltage Boundary Condition
[potential_left]
type = FunctionDirichletBC
variable = potential
boundary = 'left'
function = potential_bc_func
preset = false
[]
[potential_dirichlet_right]
type = DirichletBC
variable = potential
boundary = 'right'
value = 0
preset = false
[]
#Boundary conditions for electons
[em_physical_right]
type = LymberopoulosElectronBC
variable = em
boundary = 'right'
emission_coeffs = 0.01
ks = 1.19e5
ions = Ar+
position_units = ${dom0Scale}
[]
[em_physical_left]
type = LymberopoulosElectronBC
variable = em
boundary = 'left'
emission_coeffs = 0.01
ks = 1.19e5
ions = Ar+
position_units = ${dom0Scale}
[]
#Boundary conditions for ions
[Ar+_physical_right_advection]
type = LymberopoulosIonBC
variable = Ar+
boundary = 'right'
position_units = ${dom0Scale}
[]
[Ar+_physical_left_advection]
type = LymberopoulosIonBC
variable = Ar+
boundary = 'left'
position_units = ${dom0Scale}
[]
#Boundary conditions for mean energy
[mean_en_physical_right]
type = ElectronTemperatureDirichletBC
variable = mean_en
electrons = em
value = 0.5
boundary = 'right'
[]
[mean_en_physical_left]
type = ElectronTemperatureDirichletBC
variable = mean_en
electrons = em
value = 0.5
boundary = 'left'
[]
#Boundary conditions for ions
[Ar*_physical_right_diffusion]
type = ADDirichletBC
variable = Ar*
boundary = 'right'
value = -50.0
[]
[Ar*_physical_left_diffusion]
type = ADDirichletBC
variable = Ar*
boundary = 'left'
value = -50.0
[]
[]
#Functions for IC and Potential BC
[Functions]
[potential_bc_func]
type = ParsedFunction
value = '0.100*sin(2*pi*13.56e6*t)'
[]
[density_ic_func]
type = ParsedFunction
value = 'log((1e13 + 1e15 * (1-x/(1.0))^2 * (x/(1.0))^2)/6.02e23)'
[]
[energy_density_ic_func]
type = ParsedFunction
value = 'log(32.) + log((1e13 + 1e15 * (1-x/(1.0))^2 * (x/(1.0))^2)/6.02e23)'
[]
[]
#Material properties of species and background gas
[Materials]
[field_solver]
type = FieldSolverMaterial
potential = potential
[]
[GasBasics]
#If elecron mobility and diffusion are NOT constant, set
#"interp_elastic_coeff = true". This lets the mobility and
#diffusivity to be energy dependent, as dictated by the txt file
type = GasElectronMoments
em = em
mean_en = mean_en
interp_elastic_coeff = false
interp_trans_coeffs = false
ramp_trans_coeffs = false
user_p_gas = 133.33
user_T_gas = 300
user_electron_mobility = 30.0
user_electron_diffusion_coeff = 119.8757763975
property_tables_file = Argon_reactions_RateCoefficients/electron_moments.txt
[]
[gas_species_0]
type = ADHeavySpecies
heavy_species_name = Ar+
heavy_species_mass = 6.64e-26
heavy_species_charge = 1.0
mobility = 0.144409938
diffusivity = 6.428571e-3
[]
[gas_species_2]
type = ADHeavySpecies
heavy_species_name = Ar
heavy_species_mass = 6.64e-26
heavy_species_charge = 0.0
[]
[gas_species_1]
type = ADHeavySpecies
heavy_species_name = Ar*
heavy_species_mass = 6.64e-26
heavy_species_charge = 0.0
diffusivity = 7.515528e-3
[]
[reaction_0]
#type = ADZapdosEEDFRateLinearInterpolation
type = InterpolatedCoefficientLinear
#type = ADZapdosEEDFRateConstant
mean_energy = mean_en
property_file = 'Argon_reactions_RateCoefficients/reaction_em + Ar -> em + Ar*.txt'
reaction = 'em + Ar -> em + Ar*'
file_location = '.'
electrons = em
[]
[reaction_1]
#type = ADZapdosEEDFRateLinearInterpolation
type = InterpolatedCoefficientLinear
#type = ADZapdosEEDFRateConstant
mean_energy = mean_en
property_file = 'Argon_reactions_RateCoefficients/reaction_em + Ar -> em + em + Ar+.txt'
reaction = 'em + Ar -> em + em + Ar+'
file_location = '.'
electrons = em
[]
[reaction_2]
#type = ADZapdosEEDFRateLinearInterpolation
type = InterpolatedCoefficientLinear
#type = ADZapdosEEDFRateConstant
mean_energy = mean_en
property_file = 'Argon_reactions_RateCoefficients/reaction_em + Ar* -> em + Ar.txt'
reaction = 'em + Ar* -> em + Ar'
file_location = '.'
electrons = em
[]
[reaction_3]
#type = ADZapdosEEDFRateLinearInterpolation
type = InterpolatedCoefficientLinear
#type = ADZapdosEEDFRateConstant
mean_energy = mean_en
property_file = 'Argon_reactions_RateCoefficients/reaction_em + Ar* -> em + em + Ar+.txt'
reaction = 'em + Ar* -> em + em + Ar+'
file_location = '.'
electrons = em
[]
[reaction_4]
type = ADGenericRateConstant
reaction = 'em + Ar* -> em + Ar_r'
#reaction_rate_value = 2e-13
reaction_rate_value = 1.2044e11
[]
[reaction_5]
type = ADGenericRateConstant
reaction = 'Ar* + Ar* -> Ar+ + Ar + em'
#reaction_rate_value = 6.2e-16
reaction_rate_value = 373364000
[]
[reaction_6]
type = ADGenericRateConstant
reaction = 'Ar* + Ar -> Ar + Ar'
#reaction_rate_value = 3e-21
reaction_rate_value = 1806.6
[]
[reaction_7]
type = ADGenericRateConstant
reaction = 'Ar* + Ar + Ar -> Ar_2 + Ar'
#reaction_rate_value = 1.1e-43
reaction_rate_value = 39890.9324
[]
[]
#Acceleration Schemes are dictated by MultiApps, Transfers,
#and PeriodicControllers
[MultiApps]
#MultiApp of Acceleration by Shooting Method
[Shooting]
type = FullSolveMultiApp
input_files = 'Acceleration_By_Shooting_Method_Shooting.i'
execute_on = 'TIMESTEP_END'
enable = false
[]
[]
[Transfers]
#MultiApp Transfers for Acceleration by Shooting Method
[SM_Ar*Reset_to_Shooting]
type = MultiAppCopyTransfer
direction = to_multiapp
multi_app = Shooting
source_variable = SM_Ar*Reset
variable = SM_Ar*Reset
enable = false
[]
[Ar*_to_Shooting]
type = MultiAppCopyTransfer
direction = to_multiapp
multi_app = Shooting
source_variable = Ar*
variable = Ar*
enable = false
[]
[Ar*S_to_Shooting]
type = MultiAppCopyTransfer
direction = to_multiapp
multi_app = Shooting
source_variable = Ar*S
variable = Ar*S
enable = false
[]
[Ar*T_to_Shooting]
type = MultiAppCopyTransfer
direction = to_multiapp
multi_app = Shooting
source_variable = Ar*
variable = Ar*T
enable = false
[]
[SMDeriv_to_Shooting]
type = MultiAppCopyTransfer
direction = to_multiapp
multi_app = Shooting
source_variable = SM_Ar*
variable = SM_Ar*
enable = false
[]
[Ar*New_from_Shooting]
type = MultiAppCopyTransfer
direction = from_multiapp
multi_app = Shooting
source_variable = Ar*
variable = Ar*
enable = false
[]
[SM_Ar*Reset_from_Shooting]
type = MultiAppCopyTransfer
direction = from_multiapp
multi_app = Shooting
source_variable = SM_Ar*Reset
variable = SM_Ar*
enable = false
[]
[Ar*Relative_Diff]
type = MultiAppPostprocessorTransfer
direction = from_multiapp
multi_app = Shooting
from_postprocessor = Meta_Relative_Diff
to_postprocessor = Meta_Relative_Diff
reduction_type = minimum
enable = false
[]
[]
#The Action the add the TimePeriod Controls to turn off and on the MultiApps
[PeriodicControllers]
[Shooting]
Enable_at_cycle_start = '*::Ar*S_for_Shooting'
Enable_during_cycle = '*::SM_Ar*_time_deriv *::SM_Ar*_diffusion *::SM_Ar*_stepwise_ionization
*::SM_Ar*_collisions *::SM_Ar*_quenching *::SM_Ar*_pooling
*::SM_Ar*_2B_quenching *::SM_Ar*_3B_quenching'
Enable_at_cycle_end = 'MultiApps::Shooting
*::SM_Ar*Reset_to_Shooting *::Ar*_to_Shooting
*::Ar*S_to_Shooting *::Ar*T_to_Shooting
*::SMDeriv_to_Shooting *::Ar*New_from_Shooting
*::SM_Ar*Reset_from_Shooting *::Ar*Relative_Diff'
cycle_frequency = 13.56e6
#starting_cycle = 25
#cycles_between_controls = 25
starting_cycle = 50
cycles_between_controls = 50
cycles_per_controls = 1
num_controller_set = 2
name = Shooting
[]
[]
[Postprocessors]
#Hold the metastable relative difference during the
#Shooting Method acceleration
[Meta_Relative_Diff]
type = Receiver
[]
[]
[Preconditioning]
active = 'smp'
[smp]
type = SMP
full = true
[]
[fdp]
type = FDP
full = true
[]
[]
[Executioner]
type = Transient
start_time = 3.6873e-6
end_time = 3.798e-6
solve_type = NEWTON
line_search = none
petsc_options = '-snes_converged_reason -snes_linesearch_monitor'
petsc_options_iname = '-pc_type -pc_factor_shift_type -pc_factor_shift_amount'
petsc_options_value = 'lu NONZERO 1.e-10'
scheme = newmark-beta
dt = 1e-9
dtmin = 1e-14
[]
[Outputs]
perf_graph = true
[out]
type = Exodus
execute_on = 'FINAL'
[]
[]
(test/tests/mms/continuity_equations/2D_Coupling_Electons_Potential_Ions_MeanEnergy_Einstein_Relation_EffEfield.i)
[Mesh]
[geo]
type = FileMeshGenerator
file = '2D_Coupling_Electons_Potential_Ions_MeanEnergy_Einstein_Relation_EffEfield_IC_out.e'
use_for_exodus_restart = true
[]
[]
[Problem]
type = FEProblem
[]
[Variables]
[em]
initial_from_file_var = em
[]
[potential]
initial_from_file_var = potential
[]
[ion]
initial_from_file_var = ion
[]
[mean_en]
initial_from_file_var = mean_en
[]
[Ex]
initial_from_file_var = Ex
[]
[Ey]
initial_from_file_var = Ey
[]
[]
[Kernels]
#Electron Equations
[em_time_derivative]
type = TimeDerivativeLog
variable = em
[]
[em_diffusion]
type = CoeffDiffusion
variable = em
position_units = 1.0
[]
[em_advection]
type = EFieldAdvection
variable = em
position_units = 1.0
[]
[em_source]
type = BodyForce
variable = em
function = 'em_source'
[]
#Ion Equations
[ion_time_derivative]
type = TimeDerivativeLog
variable = ion
[]
[ion_diffusion]
type = CoeffDiffusion
variable = ion
position_units = 1.0
[]
[ion_advection]
type = EffectiveEFieldAdvection
variable = ion
u = Ex
v = Ey
position_units = 1.0
[]
[ion_source]
type = BodyForce
variable = ion
function = 'ion_source'
[]
#Potential Equations
[potential_diffusion]
type = CoeffDiffusionLin
variable = potential
position_units = 1.0
[]
[ion_charge_source]
type = ChargeSourceMoles_KV
variable = potential
charged = ion
potential_units = V
[]
[em_charge_source]
type = ChargeSourceMoles_KV
variable = potential
charged = em
potential_units = V
[]
#Eff. Efield
[EffEfield_X_time_deriv]
type = TimeDerivative
variable = Ex
[]
[EffEfield_X_ForceBody]
type = EffectiveEField
variable = Ex
nu = 5.0
component = 0
position_units = 1.0
[]
[EffEfield_Y_time_deriv]
type = TimeDerivative
variable = Ey
[]
[EffEfield_Y_ForceBody]
type = EffectiveEField
variable = Ey
nu = 5.0
component = 1
position_units = 1.0
[]
#Electron Energy Equations
[mean_en_time_deriv]
type = TimeDerivativeLog
variable = mean_en
[]
[mean_en_advection]
type = EFieldAdvection
variable = mean_en
position_units = 1.0
[]
[mean_en_diffusion]
type = CoeffDiffusion
variable = mean_en
position_units = 1.0
[]
[mean_en_diffusion_correction]
type = ThermalConductivityDiffusion
variable = mean_en
em = em
position_units = 1.0
[]
[mean_en_joule_heating]
type = JouleHeating
variable = mean_en
em = em
position_units = 1.0
potential_units = V
[]
[mean_en_source]
type = BodyForce
variable = mean_en
function = 'energy_source'
[]
[]
[AuxVariables]
[potential_sol]
[]
[mean_en_sol]
[]
[em_sol]
[]
[ion_sol]
[]
[Ex_sol]
[]
[Ey_sol]
[]
[]
[AuxKernels]
[potential_sol]
type = FunctionAux
variable = potential_sol
function = potential_fun
[]
[mean_en_sol]
type = FunctionAux
variable = mean_en_sol
function = mean_en_fun
[]
[em_sol]
type = FunctionAux
variable = em_sol
function = em_fun
[]
[ion_sol]
type = FunctionAux
variable = ion_sol
function = ion_fun
[]
[Ex_sol]
type = FunctionAux
variable = Ex_sol
function = Ex_fun
[]
[Ey_sol]
type = FunctionAux
variable = Ey_sol
function = Ey_fun
[]
[]
[Functions]
#Material Variables
#Electron diffusion coeff.
[diffem_coeff]
type = ConstantFunction
value = 0.05
[]
#Electron mobility coeff.
[muem_coeff]
type = ConstantFunction
value = 0.01
[]
#Electron energy diffusion coeff.
[diffmean_en_coeff]
type = ParsedFunction
vars = 'diffem_coeff'
vals = 'diffem_coeff'
value = '5.0 / 3.0 * diffem_coeff'
[]
#Electron energy mobility coeff.
[mumean_en_coeff]
type = ParsedFunction
vars = 'muem_coeff'
vals = 'muem_coeff'
value = '5.0 / 3.0 * muem_coeff'
[]
#Ion diffusion coeff.
[diffion]
type = ConstantFunction
value = 0.1
[]
#Ion mobility coeff.
[muion]
type = ConstantFunction
value = 0.025
[]
[N_A]
type = ConstantFunction
value = 1.0
[]
[ee]
type = ConstantFunction
value = 1.0
[]
[diffpotential]
type = ConstantFunction
value = 0.01
[]
#Manufactured Solutions
#The manufactured electron density solution
[em_fun]
type = ParsedFunction
vars = 'N_A'
vals = 'N_A'
value = 'log((sin(pi*y) + 0.2*sin(2*pi*t)*cos(pi*y) + 1.0 + cos(pi/2*x)) / N_A)'
[]
#The manufactured ion density solution
[ion_fun]
type = ParsedFunction
vars = 'N_A'
vals = 'N_A'
value = 'log((sin(pi*y) + 1.0 + 0.9*cos(pi/2*x)) / N_A)'
[]
#The manufactured electron density solution
[potential_fun]
type = ParsedFunction
vars = 'ee diffpotential'
vals = 'ee diffpotential'
value = '-(ee*(2*cos((pi*x)/2) + cos(pi*y)*sin(2*pi*t)))/(5*diffpotential*pi^2)'
[]
#The manufactured electron energy solution
[energy_fun]
type = ParsedFunction
vars = 'N_A'
vals = 'N_A'
value = 'sin(pi*y) + sin(2*pi*t)*cos(pi*y)*sin(pi*y) + 0.75 + cos(pi/2*x)'
[]
[mean_en_fun]
type = ParsedFunction
vars = 'energy_fun em_fun'
vals = 'energy_fun em_fun'
value = 'log(energy_fun) + em_fun'
[]
#The manufactured eff. Efield solution
[Ex_fun]
type = ParsedFunction
vars = 'ee diffpotential'
vals = 'ee diffpotential'
value = '-(ee*exp(-5*t)*sin((pi*x)/2)*(exp(5*t) - 1))/(5*diffpotential*pi)'
[]
[Ey_fun]
type = ParsedFunction
vars = 'ee diffpotential'
vals = 'ee diffpotential'
value = '-(2*ee*exp(-5*t)*sin(pi*y))/(4*diffpotential*pi^2 + 25*diffpotential) -
(ee*sin(pi*y)*(5*sin(2*pi*t) - 2*pi*cos(2*pi*t)))/(diffpotential*pi*(4*pi^2 + 25))'
[]
#Electron diffusion coeff.
[diffem]
type = ParsedFunction
vars = 'diffem_coeff energy_fun'
vals = 'diffem_coeff energy_fun'
value = 'diffem_coeff * energy_fun'
[]
#Electron mobility coeff.
[muem]
type = ParsedFunction
vars = 'muem_coeff energy_fun'
vals = 'muem_coeff energy_fun'
value = 'muem_coeff * energy_fun'
[]
#Electron energy diffusion coeff.
[diffmean_en]
type = ParsedFunction
vars = 'diffmean_en_coeff energy_fun'
vals = 'diffmean_en_coeff energy_fun'
value = 'diffmean_en_coeff * energy_fun'
[]
#Electron energy mobility coeff.
[mumean_en]
type = ParsedFunction
vars = 'mumean_en_coeff energy_fun'
vals = 'mumean_en_coeff energy_fun'
value = 'mumean_en_coeff * energy_fun'
[]
#Source Terms in moles
#The electron source term.
[em_source]
type = ParsedFunction
vars = 'ee diffpotential diffem_coeff muem_coeff N_A'
vals = 'ee diffpotential diffem_coeff muem_coeff N_A'
value = '((2*pi*cos(2*pi*t)*cos(pi*y))/5 - (diffem_coeff*pi^2*sin((pi*x)/2)^2)/4 -
diffem_coeff*pi*(pi*cos(pi*y) - (pi*sin(2*pi*t)*sin(pi*y))/5)*(cos(pi*y) -
sin(2*pi*t) + 2*cos(pi*y)^2*sin(2*pi*t)) + (diffem_coeff*pi^2*cos((pi*x)/2)*(cos((pi*x)/2) +
sin(pi*y) + cos(pi*y)*sin(2*pi*t)*sin(pi*y) + 3/4))/4 + (diffem_coeff*pi^2*(5*sin(pi*y) +
cos(pi*y)*sin(2*pi*t))*(cos((pi*x)/2) + sin(pi*y) + cos(pi*y)*sin(2*pi*t)*sin(pi*y) + 3/4))/5 -
(ee*muem_coeff*sin((pi*x)/2)^2*(cos((pi*x)/2) + sin(pi*y) +
cos(pi*y)*sin(2*pi*t)*sin(pi*y) + 3/4))/(10*diffpotential) -
(ee*muem_coeff*sin((pi*x)/2)^2*(cos((pi*x)/2) + sin(pi*y) + (cos(pi*y)*sin(2*pi*t))/5 + 1))/(10*diffpotential) +
(ee*muem_coeff*cos((pi*x)/2)*(cos((pi*x)/2) + sin(pi*y) +
(cos(pi*y)*sin(2*pi*t))/5 + 1)*(cos((pi*x)/2) + sin(pi*y) + cos(pi*y)*sin(2*pi*t)*sin(pi*y) + 3/4))/(10*diffpotential) +
(ee*muem_coeff*cos(pi*y)*sin(2*pi*t)*(cos((pi*x)/2) + sin(pi*y) + (cos(pi*y)*sin(2*pi*t))/5 + 1)*(cos((pi*x)/2) +
sin(pi*y) + cos(pi*y)*sin(2*pi*t)*sin(pi*y) + 3/4))/(5*diffpotential) + (ee*muem_coeff*sin(2*pi*t)*sin(pi*y)*(cos(pi*y) -
sin(2*pi*t) + 2*cos(pi*y)^2*sin(2*pi*t))*(cos((pi*x)/2) + sin(pi*y) + (cos(pi*y)*sin(2*pi*t))/5 + 1))/(5*diffpotential) +
(ee*muem_coeff*sin(2*pi*t)*sin(pi*y)*(pi*cos(pi*y) - (pi*sin(2*pi*t)*sin(pi*y))/5)*(cos((pi*x)/2) + sin(pi*y) +
cos(pi*y)*sin(2*pi*t)*sin(pi*y) + 3/4))/(5*diffpotential*pi)) / N_A'
[]
#The ion source term.
[ion_source]
type = ParsedFunction
vars = 'ee diffpotential diffion muion N_A'
vals = 'ee diffpotential diffion muion N_A'
value = '((diffion*pi^2*(9*cos((pi*x)/2) + 40*sin(pi*y)))/40 +
(9*ee*muion*exp(-5*t)*sin((pi*x)/2)^2*(exp(5*t) - 1))/(100*diffpotential) -
(ee*muion*exp(-5*t)*cos((pi*x)/2)*(exp(5*t) - 1)*((9*cos((pi*x)/2))/10 + sin(pi*y) + 1))/(10*diffpotential) -
(ee*muion*exp(-5*t)*cos(pi*y)*(2*pi + 5*exp(5*t)*sin(2*pi*t) -
2*pi*exp(5*t)*cos(2*pi*t))*((9*cos((pi*x)/2))/10 + sin(pi*y) + 1))/(diffpotential*(4*pi^2 + 25)) -
(ee*muion*exp(-5*t)*cos(pi*y)*sin(pi*y)*(2*pi + 5*exp(5*t)*sin(2*pi*t) -
2*pi*exp(5*t)*cos(2*pi*t)))/(diffpotential*(4*pi^2 + 25))) / N_A'
[]
[energy_source]
type = ParsedFunction
vars = 'ee diffpotential diffem_coeff muem_coeff N_A'
vals = 'ee diffpotential diffem_coeff muem_coeff N_A'
value = '(((4*cos((pi*x)/2) + 4*sin(pi*y) + 4*cos(pi*y)*sin(2*pi*t)*sin(pi*y) + 3)*(172*ee*muem_coeff*cos(2*pi*t)^2 -
282*ee*muem_coeff + 180*ee*muem_coeff*cos((pi*x)/2)^2 + 160*ee*muem_coeff*cos((pi*x)/2)^3 +
664*ee*muem_coeff*cos(pi*y)^2 - 480*ee*muem_coeff*cos(pi*y)^4 -
66*ee*muem_coeff*cos((pi*x)/2) - 296*ee*muem_coeff*sin(pi*y) +
200*diffem_coeff*diffpotential*pi^2 - 664*ee*muem_coeff*cos(2*pi*t)^2*cos(pi*y)^2 +
480*ee*muem_coeff*cos(2*pi*t)^2*cos(pi*y)^4 + 364*ee*muem_coeff*cos(pi*y)*sin(2*pi*t) -
90*ee*muem_coeff*cos((pi*x)/2)*sin(pi*y) + 75*diffem_coeff*diffpotential*pi^2*cos((pi*x)/2) +
140*diffem_coeff*diffpotential*pi^2*sin(pi*y) + 16*ee*muem_coeff*cos(2*pi*t)^2*cos((pi*x)/2) -
8*ee*muem_coeff*cos((pi*x)/2)*cos(pi*y)^2 + 176*ee*muem_coeff*cos(2*pi*t)^2*sin(pi*y) -
320*ee*muem_coeff*cos(pi*y)^3*sin(2*pi*t) + 200*ee*muem_coeff*cos((pi*x)/2)^2*sin(pi*y) +
464*ee*muem_coeff*cos(pi*y)^2*sin(pi*y) + 300*diffem_coeff*diffpotential*pi^2*cos((pi*x)/2)^2 -
1200*diffem_coeff*diffpotential*pi^2*cos(pi*y)^2 + 160*ee*muem_coeff*cos(2*pi*t)^2*cos((pi*x)/2)*sin(pi*y) +
104*ee*muem_coeff*cos((pi*x)/2)^2*cos(pi*y)*sin(2*pi*t) - 40*ee*muem_coeff*cos((pi*x)/2)*cos(pi*y)^3*sin(2*pi*t) +
408*ee*muem_coeff*cos((pi*x)/2)*cos(pi*y)^2*sin(pi*y) + 96*ee*muem_coeff*cos(pi*y)^3*sin(2*pi*t)*sin(pi*y) +
160*diffem_coeff*diffpotential*pi^2*cos(2*pi*t)^2*sin(pi*y) -
2000*diffem_coeff*diffpotential*pi^2*cos(pi*y)^3*sin(2*pi*t) + 400*diffem_coeff*diffpotential*pi^2*cos(pi*y)^2*sin(pi*y) -
32*ee*muem_coeff*cos(2*pi*t)^2*cos((pi*x)/2)*cos(pi*y)^2 - 464*ee*muem_coeff*cos(2*pi*t)^2*cos(pi*y)^2*sin(pi*y) +
186*ee*muem_coeff*cos((pi*x)/2)*cos(pi*y)*sin(2*pi*t) + 272*ee*muem_coeff*cos(pi*y)*sin(2*pi*t)*sin(pi*y) +
1260*diffem_coeff*diffpotential*pi^2*cos(pi*y)*sin(2*pi*t) + 500*diffem_coeff*diffpotential*pi^2*cos((pi*x)/2)*sin(pi*y) -
408*ee*muem_coeff*cos(2*pi*t)^2*cos((pi*x)/2)*cos(pi*y)^2*sin(pi*y) -
96*ee*muem_coeff*cos(2*pi*t)^2*cos(pi*y)^3*sin(2*pi*t)*sin(pi*y) -
400*diffem_coeff*diffpotential*pi^2*cos(2*pi*t)^2*cos(pi*y)^2*sin(pi*y) +
448*ee*muem_coeff*cos((pi*x)/2)*cos(pi*y)*sin(2*pi*t)*sin(pi*y) +
80*diffem_coeff*diffpotential*pi^2*cos((pi*x)/2)*cos(pi*y)*sin(2*pi*t) +
240*diffem_coeff*diffpotential*pi^2*cos(pi*y)*sin(2*pi*t)*sin(pi*y) +
48*ee*muem_coeff*cos(2*pi*t)^2*cos(pi*y)*sin(2*pi*t)*sin(pi*y) + 80*ee*muem_coeff*cos((pi*x)/2)^2*cos(pi*y)*sin(2*pi*t)*sin(pi*y) +
100*diffem_coeff*diffpotential*pi^2*cos((pi*x)/2)*cos(pi*y)*sin(2*pi*t)*sin(pi*y)))/(960*diffpotential) +
(pi*cos(2*pi*t)*cos(pi*y)*(4*cos((pi*x)/2) + 24*sin(pi*y) + 20*cos((pi*x)/2)*sin(pi*y) + 20*sin(pi*y)^2 +
8*cos(pi*y)*sin(2*pi*t)*sin(pi*y) + 3))/10 - (diffem_coeff*pi^2*sin((pi*x)/2)^2*(cos((pi*x)/2) + sin(pi*y) +
cos(pi*y)*sin(2*pi*t)*sin(pi*y) + 3/4))/4 - (diffem_coeff*pi^2*sin((pi*x)/2)^2*(cos((pi*x)/2) + sin(pi*y) +
(cos(pi*y)*sin(2*pi*t))/5 + 1))/4 - diffem_coeff*pi^2*(cos(pi*y) - sin(2*pi*t) +
2*cos(pi*y)^2*sin(2*pi*t))^2*(cos((pi*x)/2) + sin(pi*y) + (cos(pi*y)*sin(2*pi*t))/5 + 1) +
(diffem_coeff*pi^2*cos((pi*x)/2)*(cos((pi*x)/2) + sin(pi*y) + (cos(pi*y)*sin(2*pi*t))/5 + 1)*(cos((pi*x)/2) + sin(pi*y) +
cos(pi*y)*sin(2*pi*t)*sin(pi*y) + 3/4))/4 - diffem_coeff*pi*(pi*cos(pi*y) - (pi*sin(2*pi*t)*sin(pi*y))/5)*(cos(pi*y) -
sin(2*pi*t) + 2*cos(pi*y)^2*sin(2*pi*t))*(cos((pi*x)/2) + sin(pi*y) + cos(pi*y)*sin(2*pi*t)*sin(pi*y) + 3/4) +
(ee*sin(2*pi*t)*sin(pi*y)*(diffem_coeff*(pi*cos(pi*y) - (pi*sin(2*pi*t)*sin(pi*y))/5)*(cos((pi*x)/2) +
sin(pi*y) + cos(pi*y)*sin(2*pi*t)*sin(pi*y) + 3/4) - (ee*muem_coeff*sin(2*pi*t)*sin(pi*y)*(cos((pi*x)/2) +
sin(pi*y) + (cos(pi*y)*sin(2*pi*t))/5 + 1)*(cos((pi*x)/2) + sin(pi*y) +
cos(pi*y)*sin(2*pi*t)*sin(pi*y) + 3/4))/(5*diffpotential*pi)))/(5*diffpotential*pi) +
diffem_coeff*pi^2*sin(pi*y)*(4*cos(pi*y)*sin(2*pi*t) + 1)*(cos((pi*x)/2) + sin(pi*y) +
(cos(pi*y)*sin(2*pi*t))/5 + 1)*(cos((pi*x)/2) + sin(pi*y) + cos(pi*y)*sin(2*pi*t)*sin(pi*y) + 3/4) -
(ee*sin((pi*x)/2)^2*(4*cos((pi*x)/2) + 4*sin(pi*y) +
4*cos(pi*y)*sin(2*pi*t)*sin(pi*y) + 3)*(10*ee*muem_coeff + 10*ee*muem_coeff*cos((pi*x)/2) +
10*ee*muem_coeff*sin(pi*y) + 25*diffem_coeff*diffpotential*pi^2 +
2*ee*muem_coeff*cos(pi*y)*sin(2*pi*t)))/(1000*diffpotential^2*pi^2)) / N_A'
[]
[em_ICs]
type = ParsedFunction
vars = 'N_A'
vals = 'N_A'
value = 'log((3.0 + cos(pi/2*x)) / N_A)'
[]
[ion_ICs]
type = ParsedFunction
vars = 'N_A'
vals = 'N_A'
value = 'log((3.0 + 0.9*cos(pi/2*x)) / N_A)'
[]
[mean_en_ICs]
type = ParsedFunction
vars = 'em_ICs'
vals = 'em_ICs'
value = 'log(32. + cos(pi/2*x)) + em_ICs'
[]
[]
[BCs]
[potential_BC]
type = FunctionDirichletBC
variable = potential
function = 'potential_fun'
boundary = '0 1 2 3'
preset = true
[]
[em_BC]
type = FunctionDirichletBC
variable = em
function = 'em_fun'
boundary = '0 1 2 3'
preset = true
[]
[ion_BC]
type = FunctionDirichletBC
variable = ion
function = 'ion_fun'
boundary = '0 1 2 3'
preset = true
[]
[energy_BC]
type = FunctionDirichletBC
variable = mean_en
function = 'mean_en_fun'
boundary = '0 1 2 3'
preset = true
[]
[Ex_BC]
type = FunctionDirichletBC
variable = Ex
function = 'Ex_fun'
boundary = '0 1 2 3'
preset = true
[]
[Ey_BC]
type = FunctionDirichletBC
variable = Ey
function = 'Ey_fun'
boundary = '0 1 2 3'
preset = true
[]
[]
[Materials]
[field_solver]
type = FieldSolverMaterial
potential = potential
[]
[Material_Coeff]
type = GenericFunctionMaterial
prop_names = 'e N_A'
prop_values = 'ee N_A'
[]
[ADMaterial_Coeff_Set1]
type = ADGenericFunctionMaterial
prop_names = 'diffpotential diffion muion'
prop_values = 'diffpotential diffion muion'
[]
[Material_Coeff_Set2]
type = ADMMSEEDFRates
electrons = em
mean_energy = mean_en
prop_names = 'diffem muem diffmean_en mumean_en'
prop_values = 'diffem muem diffmean_en mumean_en'
d_prop_d_actual_mean_en = 'diffem_coeff muem_coeff diffmean_en_coeff mumean_en_coeff'
[]
[Charge_Signs]
type = GenericConstantMaterial
prop_names = 'sgnem sgnion sgnmean_en'
prop_values = '-1.0 1.0 -1.0'
[]
[]
[Postprocessors]
[em_l2Error]
type = ElementL2Error
variable = em
function = em_fun
[]
[ion_l2Error]
type = ElementL2Error
variable = ion
function = ion_fun
[]
[potential_l2Error]
type = ElementL2Error
variable = potential
function = potential_fun
[]
[mean_en_l2Error]
type = ElementL2Error
variable = mean_en
function = mean_en_fun
[]
[Ex_l2Error]
type = ElementL2Error
variable = Ex
function = Ex_fun
[]
[Ey_l2Error]
type = ElementL2Error
variable = Ey
function = Ey_fun
[]
[h]
type = AverageElementSize
[]
[]
[Preconditioning]
active = 'smp'
[smp]
type = SMP
full = true
[]
[fdp]
type = FDP
full = true
[]
[]
[Executioner]
type = Transient
start_time = 50
end_time = 51
# dt = 0.008
dt = 0.02
automatic_scaling = true
compute_scaling_once = false
petsc_options = '-snes_converged_reason -snes_linesearch_monitor'
solve_type = NEWTON
line_search = none
petsc_options_iname = '-pc_type -pc_factor_shift_type -pc_factor_shift_amount'
petsc_options_value = 'lu NONZERO 1.e-10'
scheme = bdf2
nl_abs_tol = 1e-13
[]
[Outputs]
perf_graph = true
[out]
type = Exodus
interval = 10
[]
[]