- linear_sys_namesThe linear system names
C++ Type:std::vector<LinearSystemName>
Unit:(no unit assumed)
Controllable:No
Description:The linear system names
- not_zeroed_tag_vectorsExtra vector tags which the sytem will not zero when other vector tags are zeroed. The outer index is for which nonlinear system the extra tag vectors should be added for
C++ Type:std::vector<std::vector<TagName>>
Unit:(no unit assumed)
Controllable:No
Description:Extra vector tags which the sytem will not zero when other vector tags are zeroed. The outer index is for which nonlinear system the extra tag vectors should be added for
- regard_general_exceptions_as_errorsFalseIf we catch an exception during residual/Jacobian evaluaton for which we don't have specific handling, immediately error instead of allowing the time step to be cut
Default:False
C++ Type:bool
Unit:(no unit assumed)
Controllable:No
Description:If we catch an exception during residual/Jacobian evaluaton for which we don't have specific handling, immediately error instead of allowing the time step to be cut
- solveTrueWhether or not to actually solve the Nonlinear system. This is handy in the case that all you want to do is execute AuxKernels, Transfers, etc. without actually solving anything
Default:True
C++ Type:bool
Unit:(no unit assumed)
Controllable:Yes
Description:Whether or not to actually solve the Nonlinear system. This is handy in the case that all you want to do is execute AuxKernels, Transfers, etc. without actually solving anything
EigenProblem
Problem object for solving an eigenvalue problem.
EigenProblem
is the primary eigenvalue system in the MOOSE framework. It offers linear and nonlinear eigensolvers by leveraging SLEPc capabilities (mainly the EPS system). For linear problems, the system supports one eigenvalue and multiple eigenvalues. For nonlinear problems, we currently support solving for the smallest (in magnitude) eigenvalue. The development of nonlinear eigensolver was mainly motivated by neutron transport criticality calculations, but the implementation and algorithm are general and applicable to other applications.
A generalized (linear) eigenvalue problem can uniformly be rewritten as and are matrices, is an eigenvector, and is the eigenvalue. Generally speaking, is a nonsingular matrix, and can be singular (e.g., an eigenvalue problem with Dirichlet boundary conditions). Many solvers in SLEPc can handle this linear eigenproblem. We can choose these algorithms in the executioner block. Here is an example with Jacobi Davidson:
[Executioner]
type = Eigenvalue
eigen_problem_type = gen_non_hermitian
which_eigen_pairs = SMALLEST_MAGNITUDE
n_eigen_pairs = 1
n_basis_vectors = 18
solve_type = jacobi_davidson
petsc_options = '-eps_view'
[]
Note that to use the linear solvers from SLEPc, we need to form accurate and that will be utilized to represent the underlying physics. If and are incorrect, you will likely end up with the wrong eigenvalue and eigenvector. For that reason, if you want to use linear eigenvalue solvers, you need to implement Jacobian by hand or with AD in the corresponding kernels. Details of all the linear eigensolvers can be found in SLEPc Users Manual.
In a multiphysics environment, physics are often nonlinear. For instance, neutron transport with temperature feedback. In this case, and are not constant anymore; instead, they depend on the eigenvector directly or indirectly. To describe our nonlinear solver, we write a generalized nonlinear eigenvalue problem as, where and are nonlinear functions. In the EigenProblem system, the kernels of are referred to as "noneigen," and the kernels of are referred to as "eigen." To utilize Newton method to solve this problem, we define , and rewrite the nonlinear eigen problem as Newton can be applied to solve this problem. The only issue is that the derivatives of with respective to can be dense. We use the Jacobian-free Newton method to overcome this difficulty, where the action of Jacobian on a solution vector is approximated via finite differences. To handle various use cases, variants of Newton are provided in this system. There is a current list:
PJFNK
- Preconditioned Jacobian-free Newton Krylov: The preconditioning matrix is formed using noneigen kernels. We do have an option to allow users to incorporate eigen kernels into the preconditioning matrix. Still, in general, we won't encourage users to do that since the preconditioning matrix might be singular when close to the solution.
[Executioner]
type = Eigenvalue
solve_type = PJFNK
[]
JFNK
- Jacobian-free Newton Krylov: Users are responsible for providing a preconditioner. This allows users to build a customized preconditioner, such as using a sweeper in radiation transport, that might be more efficient for their underlying problems.
[Executioner]
type = Eigenvalue
solve_type = JFNK
[]
[Preconditioning]
[./PBP]
type = PBP
solve_order = 'u v'
preconditioner = 'LU LU'
[../]
[]
PJFNKMO
- Matrix-only Preconditioned Jacobian-free Newton Krylov: Mathematically, this option is the same as PJFNK. The difference is the residual evaluation. PJFNK calls the user residual/function evaluation routine, which includes all finite element calculations. PJFNKMO forms residual vectors via matrix-vector multiplications: and . This is useful when matrices are constant. This option will be more efficient. If the problem is nonlinear, i.e. the matrices are not constant, you should not use this solve option because we do not attempt to re-evaluate and at each Newton iteration. This solve option is valid with Picard iterations when the matrices are constant at each Picard iteration with conditions only changing with Picard iterations. We do re-evaluate the two matrices at the beginning of each Picard iteration.
[Executioner]
type = Eigenvalue
solve_type = PJFNKMO
constant_matrices = true
[]
Newton
- Newton method: Both Jacobian and preconditioning matrices are . This option is added for consistency between the nonlinear system and the nonlinear eigensystem. Since this option does not account for the derivative of eigenvalue with respective to the eigenvector, this option is not efficient. Users should not use it in general.
In general, EigenProblem
takes care of the following customizations of the solve:
normalization and scaling parameters for eigenvectors
setting the type of the SLEPc eigenvalue solver
whether to start solves with free power iterations and how many
selecting the eigenvector of interest for the residual
Input Parameters
- active_eigen_index0Which eigenvector is used to compute residual and also associated to nonlinear variable
Default:0
C++ Type:unsigned int
Unit:(no unit assumed)
Controllable:No
Description:Which eigenvector is used to compute residual and also associated to nonlinear variable
- bx_normA postprocessor describing the norm of Bx
C++ Type:PostprocessorName
Unit:(no unit assumed)
Controllable:No
Description:A postprocessor describing the norm of Bx
- negative_sign_eigen_kernelTrueWhether or not to use a negative sign for eigenvalue kernels. Using a negative sign makes eigenvalue kernels consistent with a nonlinear solver
Default:True
C++ Type:bool
Unit:(no unit assumed)
Controllable:No
Description:Whether or not to use a negative sign for eigenvalue kernels. Using a negative sign makes eigenvalue kernels consistent with a nonlinear solver
Eigenvalue Solve Parameters
- allow_initial_conditions_with_restartFalseTrue to allow the user to specify initial conditions when restarting. Initial conditions can override any restarted field
Default:False
C++ Type:bool
Unit:(no unit assumed)
Controllable:No
Description:True to allow the user to specify initial conditions when restarting. Initial conditions can override any restarted field
- force_restartFalseEXPERIMENTAL: If true, a sub_app may use a restart file instead of using of using the master backup file
Default:False
C++ Type:bool
Unit:(no unit assumed)
Controllable:No
Description:EXPERIMENTAL: If true, a sub_app may use a restart file instead of using of using the master backup file
- restart_file_baseFile base name used for restart (e.g.
/ or /LATEST to grab the latest file available) C++ Type:FileNameNoExtension
Unit:(no unit assumed)
Controllable:No
Description:File base name used for restart (e.g.
/ or /LATEST to grab the latest file available)
Restart Parameters
- allow_invalid_solutionFalseSet to true to allow convergence even though the solution has been marked as 'invalid'
Default:False
C++ Type:bool
Unit:(no unit assumed)
Controllable:No
Description:Set to true to allow convergence even though the solution has been marked as 'invalid'
- immediately_print_invalid_solutionFalseWhether or not to report invalid solution warnings at the time the warning is produced instead of after the calculation
Default:False
C++ Type:bool
Unit:(no unit assumed)
Controllable:No
Description:Whether or not to report invalid solution warnings at the time the warning is produced instead of after the calculation
- show_invalid_solution_consoleTrueSet to true to show the invalid solution occurance summary in console
Default:True
C++ Type:bool
Unit:(no unit assumed)
Controllable:No
Description:Set to true to show the invalid solution occurance summary in console
Solution Validity Control Parameters
- boundary_restricted_elem_integrity_checkTrueSet to false to disable checking of boundary restricted elemental object variable dependencies, e.g. are the variable dependencies defined on the selected boundaries?
Default:True
C++ Type:bool
Unit:(no unit assumed)
Controllable:No
Description:Set to false to disable checking of boundary restricted elemental object variable dependencies, e.g. are the variable dependencies defined on the selected boundaries?
- boundary_restricted_node_integrity_checkTrueSet to false to disable checking of boundary restricted nodal object variable dependencies, e.g. are the variable dependencies defined on the selected boundaries?
Default:True
C++ Type:bool
Unit:(no unit assumed)
Controllable:No
Description:Set to false to disable checking of boundary restricted nodal object variable dependencies, e.g. are the variable dependencies defined on the selected boundaries?
- check_uo_aux_stateFalseTrue to turn on a check that no state presents during the evaluation of user objects and aux kernels
Default:False
C++ Type:bool
Unit:(no unit assumed)
Controllable:No
Description:True to turn on a check that no state presents during the evaluation of user objects and aux kernels
- error_on_jacobian_nonzero_reallocationFalseThis causes PETSc to error if it had to reallocate memory in the Jacobian matrix due to not having enough nonzeros
Default:False
C++ Type:bool
Unit:(no unit assumed)
Controllable:No
Description:This causes PETSc to error if it had to reallocate memory in the Jacobian matrix due to not having enough nonzeros
- fv_bcs_integrity_checkTrueSet to false to disable checking of overlapping Dirichlet and Flux BCs and/or multiple DirichletBCs per sideset
Default:True
C++ Type:bool
Unit:(no unit assumed)
Controllable:No
Description:Set to false to disable checking of overlapping Dirichlet and Flux BCs and/or multiple DirichletBCs per sideset
- kernel_coverage_block_listList of subdomains for kernel coverage check. The meaning of this list is controlled by the parameter 'kernel_coverage_check' (whether this is the list of subdomains to be checked, not to be checked or not taken into account).
C++ Type:std::vector<SubdomainName>
Unit:(no unit assumed)
Controllable:No
Description:List of subdomains for kernel coverage check. The meaning of this list is controlled by the parameter 'kernel_coverage_check' (whether this is the list of subdomains to be checked, not to be checked or not taken into account).
- kernel_coverage_checkTRUEControls, if and how a kernel subdomain coverage check is performed. With 'TRUE' or 'ON' all subdomains are checked (the default). Setting 'FALSE' or 'OFF' will disable the check for all subdomains. To exclude a predefined set of subdomains 'SKIP_LIST' is to be used, while the subdomains to skip are to be defined in the parameter 'kernel_coverage_block_list'. To limit the check to a list of subdomains, 'ONLY_LIST' is to be used (again, using the parameter 'kernel_coverage_block_list').
Default:TRUE
C++ Type:MooseEnum
Unit:(no unit assumed)
Controllable:No
Description:Controls, if and how a kernel subdomain coverage check is performed. With 'TRUE' or 'ON' all subdomains are checked (the default). Setting 'FALSE' or 'OFF' will disable the check for all subdomains. To exclude a predefined set of subdomains 'SKIP_LIST' is to be used, while the subdomains to skip are to be defined in the parameter 'kernel_coverage_block_list'. To limit the check to a list of subdomains, 'ONLY_LIST' is to be used (again, using the parameter 'kernel_coverage_block_list').
- material_coverage_block_listList of subdomains for material coverage check. The meaning of this list is controlled by the parameter 'material_coverage_check' (whether this is the list of subdomains to be checked, not to be checked or not taken into account).
C++ Type:std::vector<SubdomainName>
Unit:(no unit assumed)
Controllable:No
Description:List of subdomains for material coverage check. The meaning of this list is controlled by the parameter 'material_coverage_check' (whether this is the list of subdomains to be checked, not to be checked or not taken into account).
- material_coverage_checkTRUEControls, if and how a material subdomain coverage check is performed. With 'TRUE' or 'ON' all subdomains are checked (the default). Setting 'FALSE' or 'OFF' will disable the check for all subdomains. To exclude a predefined set of subdomains 'SKIP_LIST' is to be used, while the subdomains to skip are to be defined in the parameter 'material_coverage_block_list'. To limit the check to a list of subdomains, 'ONLY_LIST' is to be used (again, using the parameter 'material_coverage_block_list').
Default:TRUE
C++ Type:MooseEnum
Unit:(no unit assumed)
Controllable:No
Description:Controls, if and how a material subdomain coverage check is performed. With 'TRUE' or 'ON' all subdomains are checked (the default). Setting 'FALSE' or 'OFF' will disable the check for all subdomains. To exclude a predefined set of subdomains 'SKIP_LIST' is to be used, while the subdomains to skip are to be defined in the parameter 'material_coverage_block_list'. To limit the check to a list of subdomains, 'ONLY_LIST' is to be used (again, using the parameter 'material_coverage_block_list').
- material_dependency_checkTrueSet to false to disable material dependency check
Default:True
C++ Type:bool
Unit:(no unit assumed)
Controllable:No
Description:Set to false to disable material dependency check
- skip_nl_system_checkFalseTrue to skip the NonlinearSystem check for work to do (e.g. Make sure that there are variables to solve for).
Default:False
C++ Type:bool
Unit:(no unit assumed)
Controllable:No
Description:True to skip the NonlinearSystem check for work to do (e.g. Make sure that there are variables to solve for).
Simulation Checks Parameters
- control_tagsAdds user-defined labels for accessing object parameters via control logic.
C++ Type:std::vector<std::string>
Unit:(no unit assumed)
Controllable:No
Description:Adds user-defined labels for accessing object parameters via control logic.
- default_ghostingFalseWhether or not to use libMesh's default amount of algebraic and geometric ghosting
Default:False
C++ Type:bool
Unit:(no unit assumed)
Controllable:No
Description:Whether or not to use libMesh's default amount of algebraic and geometric ghosting
- enableTrueSet the enabled status of the MooseObject.
Default:True
C++ Type:bool
Unit:(no unit assumed)
Controllable:No
Description:Set the enabled status of the MooseObject.
Advanced Parameters
- extra_tag_matricesExtra matrices to add to the system that can be filled by objects which compute residuals and Jacobians (Kernels, BCs, etc.) by setting tags on them. The outer index is for which nonlinear system the extra tag vectors should be added for
C++ Type:std::vector<std::vector<TagName>>
Unit:(no unit assumed)
Controllable:No
Description:Extra matrices to add to the system that can be filled by objects which compute residuals and Jacobians (Kernels, BCs, etc.) by setting tags on them. The outer index is for which nonlinear system the extra tag vectors should be added for
- extra_tag_solutionsExtra solution vectors to add to the system that can be used by objects for coupling variable values stored in them.
C++ Type:std::vector<TagName>
Unit:(no unit assumed)
Controllable:No
Description:Extra solution vectors to add to the system that can be used by objects for coupling variable values stored in them.
- extra_tag_vectorsExtra vectors to add to the system that can be filled by objects which compute residuals and Jacobians (Kernels, BCs, etc.) by setting tags on them. The outer index is for which nonlinear system the extra tag vectors should be added for
C++ Type:std::vector<std::vector<TagName>>
Unit:(no unit assumed)
Controllable:No
Description:Extra vectors to add to the system that can be filled by objects which compute residuals and Jacobians (Kernels, BCs, etc.) by setting tags on them. The outer index is for which nonlinear system the extra tag vectors should be added for
Tagging Parameters
- identify_variable_groups_in_nlTrueWhether to identify variable groups in nonlinear systems. This affects dof ordering
Default:True
C++ Type:bool
Unit:(no unit assumed)
Controllable:No
Description:Whether to identify variable groups in nonlinear systems. This affects dof ordering
- ignore_zeros_in_jacobianFalseDo not explicitly store zero values in the Jacobian matrix if true
Default:False
C++ Type:bool
Unit:(no unit assumed)
Controllable:No
Description:Do not explicitly store zero values in the Jacobian matrix if true
- nl_sys_namesnl0 The nonlinear system names
Default:nl0
C++ Type:std::vector<NonlinearSystemName>
Unit:(no unit assumed)
Controllable:No
Description:The nonlinear system names
- previous_nl_solution_requiredFalseTrue to indicate that this calculation requires a solution vector for storing the previous nonlinear iteration.
Default:False
C++ Type:bool
Unit:(no unit assumed)
Controllable:No
Description:True to indicate that this calculation requires a solution vector for storing the previous nonlinear iteration.
- use_nonlinearTrueDetermines whether to use a Nonlinear vs a Eigenvalue system (Automatically determined based on executioner)
Default:True
C++ Type:bool
Unit:(no unit assumed)
Controllable:No
Description:Determines whether to use a Nonlinear vs a Eigenvalue system (Automatically determined based on executioner)
Nonlinear System(S) Parameters
- near_null_space_dimension0The dimension of the near nullspace
Default:0
C++ Type:unsigned int
Unit:(no unit assumed)
Controllable:No
Description:The dimension of the near nullspace
- null_space_dimension0The dimension of the nullspace
Default:0
C++ Type:unsigned int
Unit:(no unit assumed)
Controllable:No
Description:The dimension of the nullspace
- transpose_null_space_dimension0The dimension of the transpose nullspace
Default:0
C++ Type:unsigned int
Unit:(no unit assumed)
Controllable:No
Description:The dimension of the transpose nullspace
Null Space Removal Parameters
- parallel_barrier_messagingFalseDisplays messaging from parallel barrier notifications when executing or transferring to/from Multiapps (default: false)
Default:False
C++ Type:bool
Unit:(no unit assumed)
Controllable:No
Description:Displays messaging from parallel barrier notifications when executing or transferring to/from Multiapps (default: false)
- verbose_multiappsFalseSet to True to enable verbose screen printing related to MultiApps
Default:False
C++ Type:bool
Unit:(no unit assumed)
Controllable:No
Description:Set to True to enable verbose screen printing related to MultiApps
- verbose_setupfalseSet to 'true' to have the problem report on any object created. Set to 'extra' to also display all parameters.
Default:false
C++ Type:MooseEnum
Unit:(no unit assumed)
Controllable:No
Description:Set to 'true' to have the problem report on any object created. Set to 'extra' to also display all parameters.