- group_fluxesThe group fluxes. MUST be arranged by decreasing energy/increasing group number.
C++ Type:std::vector<VariableName>
Unit:(no unit assumed)
Controllable:No
Description:The group fluxes. MUST be arranged by decreasing energy/increasing group number.
- num_groupsThe number of energy groups.
C++ Type:unsigned int
Unit:(no unit assumed)
Controllable:No
Description:The number of energy groups.
ElmIntegTotFissHeatPostprocessor
The ElmIntegTotFissHeatPostprocessor has not been documented. The content listed below should be used as a starting point for documenting the class, which includes the typical automatic documentation associated with a MooseObject; however, what is contained is ultimately determined by what is necessary to make the documentation clear for users.
Overview
Example Input File Syntax
Input Parameters
- blockThe list of blocks (ids or names) that this object will be applied
C++ Type:std::vector<SubdomainName>
Unit:(no unit assumed)
Controllable:No
Description:The list of blocks (ids or names) that this object will be applied
- execute_onTIMESTEP_ENDThe list of flag(s) indicating when this object should be executed. For a description of each flag, see https://mooseframework.inl.gov/source/interfaces/SetupInterface.html.
Default:TIMESTEP_END
C++ Type:ExecFlagEnum
Unit:(no unit assumed)
Options:NONE, INITIAL, LINEAR, NONLINEAR_CONVERGENCE, NONLINEAR, POSTCHECK, TIMESTEP_END, TIMESTEP_BEGIN, MULTIAPP_FIXED_POINT_END, MULTIAPP_FIXED_POINT_BEGIN, FINAL, CUSTOM, TRANSFER
Controllable:No
Description:The list of flag(s) indicating when this object should be executed. For a description of each flag, see https://mooseframework.inl.gov/source/interfaces/SetupInterface.html.
- nt_scale1Scaling of the neutron fluxes to aid convergence.
Default:1
C++ Type:double
Unit:(no unit assumed)
Controllable:No
Description:Scaling of the neutron fluxes to aid convergence.
- 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_exp_formFalseWhether concentrations should be in an expotential/logarithmic format.
Default:False
C++ Type:bool
Unit:(no unit assumed)
Controllable:No
Description:Whether concentrations should be in an expotential/logarithmic format.
- 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
Unit:(no unit assumed)
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.
Optional Parameters
- allow_duplicate_execution_on_initialFalseIn the case where this UserObject is depended upon by an initial condition, allow it to be executed twice during the initial setup (once before the IC and again after mesh adaptivity (if applicable).
Default:False
C++ Type:bool
Unit:(no unit assumed)
Controllable:No
Description:In the case where this UserObject is depended upon by an initial condition, allow it to be executed twice during the initial setup (once before the IC and again after mesh adaptivity (if applicable).
- 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.
- enableTrueSet the enabled status of the MooseObject.
Default:True
C++ Type:bool
Unit:(no unit assumed)
Controllable:Yes
Description:Set the enabled status of the MooseObject.
- execution_order_group0Execution order groups are executed in increasing order (e.g., the lowest number is executed first). Note that negative group numbers may be used to execute groups before the default (0) group. Please refer to the user object documentation for ordering of user object execution within a group.
Default:0
C++ Type:int
Unit:(no unit assumed)
Controllable:No
Description:Execution order groups are executed in increasing order (e.g., the lowest number is executed first). Note that negative group numbers may be used to execute groups before the default (0) group. Please refer to the user object documentation for ordering of user object execution within a group.
- force_postauxFalseForces the UserObject to be executed in POSTAUX
Default:False
C++ Type:bool
Unit:(no unit assumed)
Controllable:No
Description:Forces the UserObject to be executed in POSTAUX
- force_preauxFalseForces the UserObject to be executed in PREAUX
Default:False
C++ Type:bool
Unit:(no unit assumed)
Controllable:No
Description:Forces the UserObject to be executed in PREAUX
- force_preicFalseForces the UserObject to be executed in PREIC during initial setup
Default:False
C++ Type:bool
Unit:(no unit assumed)
Controllable:No
Description:Forces the UserObject to be executed in PREIC during initial setup
- implicitTrueDetermines whether this object is calculated using an implicit or explicit form
Default:True
C++ Type:bool
Unit:(no unit assumed)
Controllable:No
Description:Determines whether this object is calculated using an implicit or explicit form
- outputsVector of output names where you would like to restrict the output of variables(s) associated with this object
C++ Type:std::vector<OutputName>
Unit:(no unit assumed)
Controllable:No
Description:Vector of output names where you would like to restrict the output of variables(s) associated with this object
- seed0The seed for the master random number generator
Default:0
C++ Type:unsigned int
Unit:(no unit assumed)
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
Unit:(no unit assumed)
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
Input Files
- (problems/2021-cnrs-benchmark/phase-1/circ-fuel.i)
- (tutorial/eigenvalue/nts.i)
- (problems/publication_level_cases/manuBench/manubox.i)
- (problems/2021-cnrs-benchmark/phase-1/buoyancy-nts.i)
- (problems/2021-cnrs-benchmark/phase-1/full-coupling-nts.i)
- (tutorial/eigenvalue/nts-action.i)
- (problems/2021-cnrs-benchmark/phase-2/transient.i)
- (tutorial/transient/transient.i)
- (tests/nts/gen-mesh-one-material.i)
- (problems/2021-cnrs-benchmark/phase-0/nts.i)
- (tests/coupled/coupled_eigenvalue.i)
- (problems/2021-cnrs-benchmark/phase-1/power-coupling-nts.i)
- (problems/publication_level_cases/manuBench/manuboxNoStokes.i)
Child Objects
(problems/2021-cnrs-benchmark/phase-1/circ-fuel.i)
# Step 1.1: Circulating fuel input file
# Requires velocity fields from Step 0.1
[GlobalParams]
num_groups = 6
num_precursor_groups = 8
use_exp_form = false
group_fluxes = 'group1 group2 group3 group4 group5 group6'
pre_concs = 'pre1 pre2 pre3 pre4 pre5 pre6 pre7 pre8'
temperature = 900
sss2_input = true
account_delayed = true
[]
[Mesh]
type = GeneratedMesh
dim = 2
nx = 200
ny = 200
## Use a 40-by-40 mesh instead if running on a desktop/small cluster
# nx = 40
# ny = 40
xmin = 0
xmax = 200
ymin = 0
ymax = 200
elem_type = QUAD4
[]
[Problem]
type = EigenProblem
bx_norm = bnorm
[]
[Nt]
var_name_base = group
vacuum_boundaries = 'bottom left right top'
create_temperature_var = false
eigen = true
[]
[Precursors]
[pres]
var_name_base = pre
outlet_boundaries = ''
constant_velocity_values = false
uvel = ux
vvel = uy
nt_exp_form = false
family = MONOMIAL
order = CONSTANT
loop_precursors = false
transient = false
eigen = true
[]
[]
[AuxVariables]
[ux]
family = LAGRANGE
order = FIRST
[]
[uy]
family = LAGRANGE
order = FIRST
[]
[]
[UserObjects]
[velocities]
type = SolutionUserObject
mesh = '../phase-0/vel-field_exodus.e'
system_variables = 'vel_x vel_y'
timestep = LATEST
execute_on = INITIAL
[]
[]
[AuxKernels]
[ux]
type = SolutionAux
variable = ux
from_variable = vel_x
solution = velocities
[]
[uy]
type = SolutionAux
variable = uy
from_variable = vel_y
solution = velocities
[]
[]
[Materials]
[fuel]
type = GenericMoltresMaterial
property_tables_root = '../../../property_file_dir/cnrs-benchmark/benchmark_'
interp_type = 'linear'
[]
[]
[Executioner]
type = Eigenvalue
# fission power normalization
normalization = 'powernorm'
normal_factor = 1e7 # Watts, 1e9 / 100
# Tiberga et al. assumes the depth of their 2D domain is 1m.
# Tiberga et al. domain = 2m x 2m x 1m
# We divide the total power=1e9W by 100 because our length units are in cm.
# Our domain = 2m x 2m x 0.01m
initial_eigenvalue = 0.99600
eigen_tol = 1e-7
solve_type = 'PJFNK'
petsc_options = '-snes_converged_reason -ksp_converged_reason -snes_linesearch_monitor'
petsc_options_iname = '-pc_type -pc_hypre_type'
petsc_options_value = 'hypre boomeramg'
## Alternative PETSc settings if Hypre BoomerAMG is not installed
# petsc_options_iname = '-pc_type -pc_factor_shift_type -pc_factor_mat_solver_package'
# petsc_options_value = 'lu NONZERO superlu_dist'
# petsc_options_iname = '-pc_type -sub_pc_type -ksp_gmres_restart -pc_asm_overlap -sub_pc_factor_shift_type'
# petsc_options_value = 'asm lu 200 1 NONZERO'
line_search = none
[]
[Postprocessors]
[k_eff]
type = VectorPostprocessorComponent
index = 0
vectorpostprocessor = k_vpp
vector_name = eigen_values_real
[]
[bnorm]
type = ElmIntegTotFissNtsPostprocessor
execute_on = linear
[]
[tot_fissions]
type = ElmIntegTotFissPostprocessor
execute_on = linear
[]
[powernorm]
type = ElmIntegTotFissHeatPostprocessor
execute_on = linear
[]
[group1norm]
type = ElementIntegralVariablePostprocessor
variable = group1
execute_on = linear
[]
[group1max]
type = NodalExtremeValue
value_type = max
variable = group1
execute_on = timestep_end
[]
[group1diff]
type = ElementL2Diff
variable = group1
execute_on = 'linear timestep_end'
use_displaced_mesh = false
[]
[group2norm]
type = ElementIntegralVariablePostprocessor
variable = group2
execute_on = linear
[]
[group2max]
type = NodalExtremeValue
value_type = max
variable = group2
execute_on = timestep_end
[]
[group2diff]
type = ElementL2Diff
variable = group2
execute_on = 'linear timestep_end'
use_displaced_mesh = false
[]
[]
[VectorPostprocessors]
[k_vpp]
type = Eigenvalues
inverse_eigenvalue = true
[]
[pre_elemental]
type = ElementValueSampler
variable = 'pre1 pre2 pre3 pre4 pre5 pre6 pre7 pre8'
sort_by = id
execute_on = FINAL
[]
[]
[Outputs]
perf_graph = true
print_linear_residuals = true
[exodus]
type = Exodus
[]
[csv]
type = CSV
[]
[]
(tutorial/eigenvalue/nts.i)
[GlobalParams]
num_groups = 2
num_precursor_groups = 6
use_exp_form = false
group_fluxes = 'group1 group2'
pre_concs = 'pre1 pre2 pre3 pre4 pre5 pre6'
temperature = 900
sss2_input = true
account_delayed = true
[]
[Mesh]
coord_type = RZ
[mesh]
type = FileMeshGenerator
file = 'mesh.e'
[]
[]
[Problem]
type = EigenProblem
bx_norm = bnorm
[]
[Variables]
[group1]
order = FIRST
family = LAGRANGE
[]
[group2]
order = FIRST
family = LAGRANGE
[]
[]
[Precursors]
[pres]
var_name_base = pre
family = MONOMIAL
order = CONSTANT
block = 0
outlet_boundaries = 'fuel_top'
constant_velocity_values = true
u_def = 0
v_def = 18.085
w_def = 0
nt_exp_form = false
loop_precursors = false
transient = false
eigen = true
[]
[]
[Kernels]
#---------------------------------------------------------------------
# Group 1 Neutronics
#---------------------------------------------------------------------
[sigma_r_group1]
type = SigmaR
variable = group1
group_number = 1
[]
[diff_group1]
type = GroupDiffusion
variable = group1
group_number = 1
[]
[inscatter_group1]
type = InScatter
variable = group1
group_number = 1
[]
[fission_source_group1]
type = CoupledFissionKernel
variable = group1
group_number = 1
block = '0'
extra_vector_tags = 'eigen'
[]
[delayed_group1]
type = DelayedNeutronSource
variable = group1
block = '0'
group_number = 1
[]
#---------------------------------------------------------------------
# Group 2 Neutronics
#---------------------------------------------------------------------
[sigma_r_group2]
type = SigmaR
variable = group2
group_number = 2
[]
[diff_group2]
type = GroupDiffusion
variable = group2
group_number = 2
[]
[fission_source_group2]
type = CoupledFissionKernel
variable = group2
group_number = 2
block = '0'
extra_vector_tags = 'eigen'
[]
[inscatter_group2]
type = InScatter
variable = group2
group_number = 2
[]
[]
[BCs]
[vacuum_group1]
type = VacuumConcBC
boundary = 'fuel_bottom fuel_top mod_bottom mod_top right'
variable = group1
[]
[vacuum_group2]
type = VacuumConcBC
boundary = 'fuel_bottom fuel_top mod_bottom mod_top right'
variable = group2
[]
[]
[Materials]
[fuel]
type = MoltresJsonMaterial
block = '0'
base_file = 'xsdata.json'
material_key = 'fuel'
interp_type = LINEAR
prop_names = ''
prop_values = ''
[]
[graphite]
type = MoltresJsonMaterial
block = '1'
base_file = 'xsdata.json'
material_key = 'graphite'
interp_type = LINEAR
prop_names = ''
prop_values = ''
[]
[]
[Executioner]
type = Eigenvalue
initial_eigenvalue = 1
solve_type = 'PJFNK'
petsc_options = '-snes_converged_reason -ksp_converged_reason -snes_linesearch_monitor'
petsc_options_iname = '-pc_type -pc_hypre_type'
petsc_options_value = 'hypre boomeramg'
automatic_scaling = true
compute_scaling_once = false
resid_vs_jac_scaling_param = 0.1
line_search = none
[]
[Postprocessors]
[k_eff]
type = VectorPostprocessorComponent
index = 0
vectorpostprocessor = k_vpp
vector_name = eigen_values_real
[]
[bnorm]
type = ElmIntegTotFissNtsPostprocessor
block = 0
execute_on = linear
[]
[tot_fissions]
type = ElmIntegTotFissPostprocessor
execute_on = linear
[]
[powernorm]
type = ElmIntegTotFissHeatPostprocessor
execute_on = linear
[]
[group1norm]
type = ElementIntegralVariablePostprocessor
variable = group1
execute_on = linear
[]
[group1max]
type = NodalExtremeValue
value_type = max
variable = group1
execute_on = timestep_end
[]
[group1diff]
type = ElementL2Diff
variable = group1
execute_on = 'linear timestep_end'
use_displaced_mesh = false
[]
[group2norm]
type = ElementIntegralVariablePostprocessor
variable = group2
execute_on = linear
[]
[group2max]
type = NodalExtremeValue
value_type = max
variable = group2
execute_on = timestep_end
[]
[group2diff]
type = ElementL2Diff
variable = group2
execute_on = 'linear timestep_end'
use_displaced_mesh = false
[]
[]
[VectorPostprocessors]
[k_vpp]
type = Eigenvalues
inverse_eigenvalue = true
[]
[centerline_flux]
type = LineValueSampler
variable = 'group1 group2'
start_point = '0 0 0'
end_point = '0 150 0'
num_points = 151
sort_by = y
execute_on = FINAL
[]
[midplane_flux]
type = LineValueSampler
variable = 'group1 group2'
start_point = '0 75 0'
end_point = '69.375 75 0'
num_points = 100
sort_by = x
execute_on = FINAL
[]
[]
[Outputs]
perf_graph = true
print_linear_residuals = true
[exodus]
type = Exodus
[]
[csv]
type = CSV
[]
[]
(problems/publication_level_cases/manuBench/manubox.i)
library_path=/home/gavin/projects/moose/modules/navier_stokes/lib/
[GlobalParams]
# neutronics
num_groups=6
num_precursor_groups=8
use_exp_form = false
group_fluxes = 'group1 group2 group3 group4 group5 group6'
temperature = temp
sss2_input = false
pre_concs = 'pre1 pre2 pre3 pre4 pre5 pre6 pre7 pre8'
account_delayed = true
# fluids
gravity = '0 -9.81 0'
pspg = true
convective_term = true
integrate_p_by_parts = true
laplace = true
u = vel_x
v = vel_y
p = p
alpha = 1e-6 # stabilisation parameter
order = FIRST
family = LAGRANGE
[]
[Mesh]
type = GeneratedMesh
dim = 2
xmin = 0
xmax = 1.0
ymin = 0
ymax = 1.0
elem_type = QUAD9
nx = 20
ny = 20
[]
[MeshModifiers]
[./corner_node]
type = AddExtraNodeset
new_boundary = 'pinned_node'
nodes = '0'
[../]
[]
[Variables]
# velocities
[./vel_x]
family = LAGRANGE
order = FIRST
[../]
[./vel_y]
family = LAGRANGE
order = FIRST
[../]
# pressure
[./p]
family = LAGRANGE
order = FIRST
[../]
# temperature
[./temp]
family = LAGRANGE
order = FIRST
initial_condition = 900
scaling = 1e-4
[../]
[]
# nt -> neutron
[Nt]
var_name_base = group
vacuum_boundaries = 'top bottom left right'
create_temperature_var = false
eigen = true
[]
[Precursors]
[./preblock]
var_name_base = pre
# block = 'fuel'
constant_velocity_values = false
nt_exp_form = false
family = MONOMIAL
order = CONSTANT
outlet_boundaries = ''
uvel = vel_x
vvel = vel_y
transient = false
[../]
[]
[Kernels]
# mass
[./mass]
type = INSMass
variable = p
[../]
# x-momentum, space
[./x_momentum_space]
type = INSMomentumLaplaceForm
variable = vel_x
component = 0
[../]
# y-momentum, space
[./y_momentum_space]
type = INSMomentumLaplaceForm
variable = vel_y
component = 1
[../]
[./tempAdvectionDiffusion]
type = INSTemperature
variable = temp
u = vel_x
v = vel_y
[../]
[./buoyancy_y]
type = INSBoussinesqBodyForce
variable = vel_y
dT = deltaT
component = 1
temperature = temp
[../]
[./heatRemoval]
type = ConvectiveHeatExchanger
variable = temp
tref = 900.0
htc = 1.0
[../]
[]
[BCs]
[./ux_dirichlet]
type = DirichletBC
boundary = 'left right bottom top'
variable = vel_x
value = 0
[../]
[./uy_dirichlet]
type = DirichletBC
boundary = 'left right bottom top'
variable = vel_y
value = 0
[../]
[./p_pin]
type=DirichletBC
boundary = 'pinned_node'
variable = p
value = 0
[../]
[]
[Materials]
# alpha = coefficient of thermal expansion where rho = rho0 -alpha * rho0 * delta T
# Dr. Aufiero uses nu rather than mu, (kinematic rather than absolute viscosity)
# likewise, \rho c_p is given rather than separate \rho, c_p
# accordingly, we let \rho = 1 to obtain equivalent results
# also, Manu gives a length expansion coefficient. Boussinesq approximations
# typically use an expansion coefficient with units 1/K, but for mass instead.
# The relation between the two is alpha = -3 beta, if linearized.
# Also, had to use Pr = mu * cp / k
[./const]
type = GenericConstantMaterial
prop_names = 'mu rho alpha k cp'
prop_values = '0.025 1.0 6.0e-4 0.5 6.15e6'
[../]
[./fuelneutronicproperties]
type = GenericMoltresMaterial
property_tables_root = './groupconstants/'
interp_type = 'none' # 'spline'
[../]
[]
[Preconditioning]
[./SMP]
type = SMP
full = true
solve_type = 'PJFNK'
[../]
[]
[Executioner]
type = InversePowerMethod
max_power_iterations = 50
# fission power normalization:
normalization = powernorm
normal_factor = 1e9 # watts
# power iteration options
xdiff = 'group1diff'
bx_norm = 'bnorm'
pfactor = 1e-2
petsc_options = '-snes_converged_reason -ksp_converged_reason'
petsc_options_iname = '-pc_type -pc_factor_shift_type'
petsc_options_value = 'lu NONZERO'
line_search = 'none'
nl_rel_tol = 1e-12
nl_abs_tol = 1e-13
nl_max_its = 6
l_tol = 1e-6
l_max_its = 500
[]
[Outputs]
[./exodus]
type = Exodus
[../]
[./csv]
type = CSV
[../]
[]
[Postprocessors]
[./bnorm]
type = ElmIntegTotFissNtsPostprocessor
execute_on = linear
[../]
[./group1diff]
type = ElementL2Diff
variable = group1
execute_on = 'linear timestep_end'
use_displaced_mesh = false
[../]
[./powernorm]
type = ElmIntegTotFissHeatPostprocessor
execute_on = linear
[../]
[]
[AuxVariables]
[./deltaT]
type = ConstantDifferenceAux
variable = deltaT
comparevar = temp
constant = 900
[../]
[]
[AuxKernels]
[./deltaTCalc]
type = ConstantDifferenceAux
variable = deltaT
compareVar = temp
constant = 900
[../]
[]
[Debug]
show_var_residual_norms = true
[]
(problems/2021-cnrs-benchmark/phase-1/buoyancy-nts.i)
[GlobalParams]
num_groups = 6
num_precursor_groups = 8
use_exp_form = false
group_fluxes = 'group1 group2 group3 group4 group5 group6'
pre_concs = 'pre1 pre2 pre3 pre4 pre5 pre6 pre7 pre8'
temperature = temp
sss2_input = true
account_delayed = true
[]
[Mesh]
type = GeneratedMesh
dim = 2
nx = 200
ny = 200
## Use a 40-by-40 mesh instead if running on a less capable computer
# nx = 40
# ny = 40
xmin = 0
xmax = 200
ymin = 0
ymax = 200
elem_type = QUAD4
[]
[Problem]
type = EigenProblem
bx_norm = bnorm
[]
[Nt]
var_name_base = group
vacuum_boundaries = 'bottom left right top'
create_temperature_var = false
eigen = true
[]
[Precursors]
[pres]
var_name_base = pre
outlet_boundaries = ''
constant_velocity_values = false
uvel = vel_x
vvel = vel_y
nt_exp_form = false
family = MONOMIAL
order = CONSTANT
loop_precursors = false
transient = false
eigen = true
[]
[]
[AuxVariables]
[temp]
family = LAGRANGE
order = FIRST
initial_condition = 900
[]
[vel_x]
family = LAGRANGE
order = FIRST
[]
[vel_y]
family = LAGRANGE
order = FIRST
[]
[heat]
family = MONOMIAL
order = FIRST
[]
[]
[AuxKernels]
[heat_source]
type = FissionHeatSourceAux
variable = heat
tot_fission_heat = powernorm
power = 1e7
[]
[]
[Materials]
[fuel]
type = GenericMoltresMaterial
property_tables_root = '../../../property_file_dir/cnrs-benchmark/benchmark_'
interp_type = 'linear'
[]
[]
[Executioner]
type = Eigenvalue
# fission power normalization
normalization = 'powernorm'
normal_factor = 1e7 # Watts, 1e9 / 100
automatic_scaling = true
compute_scaling_once = false
off_diagonals_in_auto_scaling = true
resid_vs_jac_scaling_param = .1
initial_eigenvalue = 0.99600
nl_abs_tol = 1e-11
free_power_iterations = 2
solve_type = 'PJFNK'
petsc_options = '-snes_converged_reason -ksp_converged_reason -snes_linesearch_monitor'
petsc_options_iname = '-pc_type -pc_hypre_type'
petsc_options_value = 'hypre boomeramg'
line_search = none
[]
[Postprocessors]
[k_eff]
type = VectorPostprocessorComponent
index = 0
vectorpostprocessor = k_vpp
vector_name = eigen_values_real
[]
[bnorm]
type = ElmIntegTotFissNtsPostprocessor
execute_on = linear
[]
[tot_fissions]
type = ElmIntegTotFissPostprocessor
execute_on = linear
[]
[powernorm]
type = ElmIntegTotFissHeatPostprocessor
execute_on = linear
[]
[group1norm]
type = ElementIntegralVariablePostprocessor
variable = group1
execute_on = linear
[]
[group1max]
type = NodalExtremeValue
value_type = max
variable = group1
execute_on = timestep_end
[]
[group1diff]
type = ElementL2Diff
variable = group1
execute_on = 'linear timestep_end'
use_displaced_mesh = false
[]
[group2norm]
type = ElementIntegralVariablePostprocessor
variable = group2
execute_on = linear
[]
[group2max]
type = NodalExtremeValue
value_type = max
variable = group2
execute_on = timestep_end
[]
[group2diff]
type = ElementL2Diff
variable = group2
execute_on = 'linear timestep_end'
use_displaced_mesh = false
[]
[]
[VectorPostprocessors]
[k_vpp]
type = Eigenvalues
inverse_eigenvalue = true
[]
[pre_elemental]
type = ElementValueSampler
variable = 'pre1 pre2 pre3 pre4 pre5 pre6 pre7 pre8'
sort_by = id
execute_on = TIMESTEP_END
[]
[]
[Outputs]
perf_graph = true
print_linear_residuals = true
[exodus]
type = Exodus
[]
[csv]
type = CSV
[]
[]
(problems/2021-cnrs-benchmark/phase-1/full-coupling-nts.i)
[GlobalParams]
num_groups = 6
num_precursor_groups = 8
use_exp_form = false
group_fluxes = 'group1 group2 group3 group4 group5 group6'
pre_concs = 'pre1 pre2 pre3 pre4 pre5 pre6 pre7 pre8'
temperature = temp
sss2_input = true
account_delayed = true
[]
[Mesh]
type = GeneratedMesh
dim = 2
nx = 200
ny = 200
## Use a 40-by-40 mesh instead if running on a less capable computer
# nx = 40
# ny = 40
xmin = 0
xmax = 200
ymin = 0
ymax = 200
elem_type = QUAD4
[]
[Problem]
type = EigenProblem
bx_norm = bnorm
[]
[Nt]
var_name_base = group
vacuum_boundaries = 'bottom left right top'
create_temperature_var = false
eigen = true
[]
[Precursors]
[pres]
var_name_base = pre
outlet_boundaries = ''
constant_velocity_values = false
uvel = vel_x
vvel = vel_y
nt_exp_form = false
family = MONOMIAL
order = CONSTANT
loop_precursors = false
transient = false
eigen = true
[]
[]
[AuxVariables]
[temp]
family = LAGRANGE
order = FIRST
initial_condition = 900
[]
[vel_x]
family = LAGRANGE
order = FIRST
[]
[vel_y]
family = LAGRANGE
order = FIRST
[]
[heat]
family = MONOMIAL
order = FIRST
[]
[]
[AuxKernels]
[heat_source]
type = FissionHeatSourceAux
variable = heat
tot_fission_heat = powernorm
power = 1e7
[]
[]
[Materials]
[fuel]
type = GenericMoltresMaterial
property_tables_root = '../../../property_file_dir/cnrs-benchmark/benchmark_'
interp_type = 'linear'
[]
[]
[Executioner]
type = Eigenvalue
# fission power normalization
normalization = 'powernorm'
normal_factor = 1e7 # Watts, 1e9 / 100
automatic_scaling = true
compute_scaling_once = false
off_diagonals_in_auto_scaling = true
resid_vs_jac_scaling_param = .1
initial_eigenvalue = 0.99600
nl_abs_tol = 1e-11
free_power_iterations = 2
solve_type = 'PJFNK'
petsc_options = '-snes_converged_reason -ksp_converged_reason -snes_linesearch_monitor'
petsc_options_iname = '-pc_type -pc_hypre_type'
petsc_options_value = 'hypre boomeramg'
line_search = none
[]
[Postprocessors]
[k_eff]
type = VectorPostprocessorComponent
index = 0
vectorpostprocessor = k_vpp
vector_name = eigen_values_real
[]
[max_temp]
type = NodalExtremeValue
value_type = max
variable = temp
[]
[bnorm]
type = ElmIntegTotFissNtsPostprocessor
execute_on = linear
[]
[tot_fissions]
type = ElmIntegTotFissPostprocessor
execute_on = linear
[]
[powernorm]
type = ElmIntegTotFissHeatPostprocessor
execute_on = linear
[]
[group1norm]
type = ElementIntegralVariablePostprocessor
variable = group1
execute_on = linear
[]
[group1max]
type = NodalExtremeValue
value_type = max
variable = group1
execute_on = timestep_end
[]
[group1diff]
type = ElementL2Diff
variable = group1
execute_on = 'linear timestep_end'
use_displaced_mesh = false
[]
[group2norm]
type = ElementIntegralVariablePostprocessor
variable = group2
execute_on = linear
[]
[group2max]
type = NodalExtremeValue
value_type = max
variable = group2
execute_on = timestep_end
[]
[group2diff]
type = ElementL2Diff
variable = group2
execute_on = 'linear timestep_end'
use_displaced_mesh = false
[]
[]
[VectorPostprocessors]
[k_vpp]
type = Eigenvalues
inverse_eigenvalue = true
[]
[pre_elemental]
type = ElementValueSampler
variable = 'pre1 pre2 pre3 pre4 pre5 pre6 pre7 pre8'
sort_by = id
execute_on = TIMESTEP_END
[]
[]
[Outputs]
perf_graph = true
print_linear_residuals = true
[exodus]
type = Exodus
[]
[csv]
type = CSV
[]
[]
(tutorial/eigenvalue/nts-action.i)
[GlobalParams]
num_groups = 2
num_precursor_groups = 6
use_exp_form = false
group_fluxes = 'group1 group2'
pre_concs = 'pre1 pre2 pre3 pre4 pre5 pre6'
temperature = 900
sss2_input = true
account_delayed = true
[]
[Mesh]
coord_type = RZ
[mesh]
type = FileMeshGenerator
file = 'mesh.e'
[]
[]
[Problem]
type = EigenProblem
bx_norm = bnorm
[]
[Nt]
var_name_base = group
vacuum_boundaries = 'fuel_bottom mod_bottom right fuel_top mod_top'
pre_blocks = '0'
create_temperature_var = false
eigen = true
[]
[Precursors]
[pres]
var_name_base = pre
family = MONOMIAL
order = CONSTANT
block = 0
outlet_boundaries = 'fuel_top'
constant_velocity_values = true
u_def = 0
v_def = 18.085
w_def = 0
nt_exp_form = false
loop_precursors = false
transient = false
eigen = true
[]
[]
[Materials]
[fuel]
type = MoltresJsonMaterial
block = '0'
base_file = 'xsdata.json'
material_key = 'fuel'
interp_type = LINEAR
prop_names = ''
prop_values = ''
[]
[graphite]
type = MoltresJsonMaterial
block = '1'
base_file = 'xsdata.json'
material_key = 'graphite'
interp_type = LINEAR
prop_names = ''
prop_values = ''
[]
[]
[Executioner]
type = Eigenvalue
initial_eigenvalue = 1
solve_type = 'PJFNK'
petsc_options = '-snes_converged_reason -ksp_converged_reason -snes_linesearch_monitor'
petsc_options_iname = '-pc_type -pc_hypre_type'
petsc_options_value = 'hypre boomeramg'
automatic_scaling = true
compute_scaling_once = false
resid_vs_jac_scaling_param = 0.1
line_search = none
[]
[Postprocessors]
[k_eff]
type = VectorPostprocessorComponent
index = 0
vectorpostprocessor = k_vpp
vector_name = eigen_values_real
[]
[bnorm]
type = ElmIntegTotFissNtsPostprocessor
block = 0
execute_on = linear
[]
[tot_fissions]
type = ElmIntegTotFissPostprocessor
execute_on = linear
[]
[powernorm]
type = ElmIntegTotFissHeatPostprocessor
execute_on = linear
[]
[group1norm]
type = ElementIntegralVariablePostprocessor
variable = group1
execute_on = linear
[]
[group1max]
type = NodalExtremeValue
value_type = max
variable = group1
execute_on = timestep_end
[]
[group1diff]
type = ElementL2Diff
variable = group1
execute_on = 'linear timestep_end'
use_displaced_mesh = false
[]
[group2norm]
type = ElementIntegralVariablePostprocessor
variable = group2
execute_on = linear
[]
[group2max]
type = NodalExtremeValue
value_type = max
variable = group2
execute_on = timestep_end
[]
[group2diff]
type = ElementL2Diff
variable = group2
execute_on = 'linear timestep_end'
use_displaced_mesh = false
[]
[]
[VectorPostprocessors]
[k_vpp]
type = Eigenvalues
inverse_eigenvalue = true
[]
[centerline_flux]
type = LineValueSampler
variable = 'group1 group2'
start_point = '0 0 0'
end_point = '0 150 0'
num_points = 151
sort_by = y
execute_on = FINAL
[]
[midplane_flux]
type = LineValueSampler
variable = 'group1 group2'
start_point = '0 75 0'
end_point = '69.375 75 0'
num_points = 100
sort_by = x
execute_on = FINAL
[]
[]
[Outputs]
perf_graph = true
print_linear_residuals = true
[exodus]
type = Exodus
[]
[csv]
type = CSV
[]
[]
(problems/2021-cnrs-benchmark/phase-2/transient.i)
density = .002 # kg cm-3
cp = 3075 # J kg-1 K-1, 6.15 / 2.0e-3
k = .005 # W cm-1 K-1
gamma = 1 # W cm-3 K-1, Volumetric heat transfer coefficient
viscosity = .5 # dynamic viscosity
alpha = 1 # SUPG stabilization parameter
t_alpha = 2e-4 # K-1, Thermal expansion coefficient
# Change "freq" and "dt" values for different perturbation frequencies
freq = 0.8 # Perturbation frequency = 0.8 Hz
dt = 0.00625 # Timestep size = 1 / freq / 200 = 0.00625 s
[GlobalParams]
num_groups = 6
num_precursor_groups = 8
use_exp_form = false
group_fluxes = 'group1 group2 group3 group4 group5 group6'
pre_concs = 'pre1 pre2 pre3 pre4 pre5 pre6 pre7 pre8'
temperature = temp
sss2_input = true
account_delayed = true
integrate_p_by_parts = true
eigenvalue_scaling = 0.9927821802
## Use the eigenvalue scaling factor below if running on a 40x40 mesh
# eigenvalue_scaling = 0.9926551482
[]
[Mesh]
[file_mesh]
type = FileMeshGenerator
file = '../phase-1/full-coupling_out_ntsApp0_exodus.e'
use_for_exodus_restart = true
[]
[corner_node]
type = ExtraNodesetGenerator
input = file_mesh
new_boundary = 'pinned_node'
coord = '200 200'
[]
[]
[Problem]
type = FEProblem
[]
[Variables]
[temp]
family = LAGRANGE
order = FIRST
[]
[vel]
family = LAGRANGE_VEC
order = FIRST
[]
[p]
family = LAGRANGE
order = FIRST
[]
[]
[Nt]
var_name_base = group
vacuum_boundaries = 'bottom left right top'
create_temperature_var = false
init_nts_from_file = true
[]
[Precursors]
[pres]
var_name_base = pre
outlet_boundaries = ''
constant_velocity_values = false
uvel = velx
vvel = vely
nt_exp_form = false
family = MONOMIAL
order = CONSTANT
loop_precursors = false
transient = true
init_from_file = true
[]
[]
[AuxVariables]
[velx]
family = LAGRANGE
order = FIRST
[]
[vely]
family = LAGRANGE
order = FIRST
[]
[heat]
family = MONOMIAL
order = FIRST
[]
[]
[Kernels]
[mass]
type = INSADMass
variable = p
[]
[mass_pspg]
type = INSADMassPSPG
variable = p
[]
[momentum_time]
type = INSADMomentumTimeDerivative
variable = vel
[]
[momentum_advection]
type = INSADMomentumAdvection
variable = vel
[]
[momentum_viscous]
type = INSADMomentumViscous
variable = vel
[]
[momentum_pressure]
type = INSADMomentumPressure
variable = vel
pressure = p
[]
[momentum_supg]
type = INSADMomentumSUPG
variable = vel
velocity = vel
[]
[buoyancy]
type = INSADBoussinesqBodyForce
variable = vel
# gravity vector, cm s-2
gravity = '0 -981 0'
alpha_name = 't_alpha'
ref_temp = 'temp_ref'
[]
[gravity]
type = INSADGravityForce
variable = vel
# gravity vector, cm s-2
gravity = '0 -981 0'
[]
[temp_time]
type = INSADHeatConductionTimeDerivative
variable = temp
[]
[temp_source]
type = INSADEnergySource
variable = temp
source_variable = heat
[]
[temp_advection]
type = INSADEnergyAdvection
variable = temp
[]
[temp_conduction]
type = ADHeatConduction
variable = temp
thermal_conductivity = 'k'
[]
[temp_supg]
type = INSADEnergySUPG
variable = temp
velocity = vel
[]
[temp_sink]
type = ConvectiveHeatExchanger
variable = temp
htc = ${gamma}
tref = 900
[]
[]
[AuxKernels]
[vel_x]
type = VectorVariableComponentAux
variable = velx
vector_variable = vel
component = 'x'
[]
[vel_y]
type = VectorVariableComponentAux
variable = vely
vector_variable = vel
component = 'y'
[]
[heat_source]
type = FissionHeatSourceTransientAux
variable = heat
[]
[]
[UserObjects]
[initial_th]
type = SolutionUserObject
mesh = '../phase-1/full-coupling_exodus.e'
system_variables = 'velx vely p temp heat'
timestep = LATEST
execute_on = INITIAL
[]
[]
[Controls]
[func_control]
type = RealFunctionControl
parameter = 'Kernels/temp_sink/htc'
function = func_alpha
execute_on = 'initial timestep_begin'
[]
[]
[Functions]
[func_alpha]
type = ParsedFunction
value = '1 + 0.1 * sin(2*pi*t*${freq})' # Perturbation frequency = 0.8Hz
[]
[velxf]
type = SolutionFunction
from_variable = velx
solution = initial_th
[]
[velyf]
type = SolutionFunction
from_variable = vely
solution = initial_th
[]
[pf]
type = SolutionFunction
from_variable = p
solution = initial_th
[]
[tempf]
type = SolutionFunction
from_variable = temp
solution = initial_th
[]
[heatf]
type = SolutionFunction
from_variable = heat
solution = initial_th
[]
[]
[ICs]
[vel_ic]
type = VectorFunctionIC
variable = vel
function_x = velxf
function_y = velyf
[]
[p_ic]
type = FunctionIC
variable = p
function = pf
[]
[temp_ic]
type = FunctionIC
variable = temp
function = tempf
[]
[heat_ic]
type = FunctionIC
variable = heat
function = heatf
[]
[]
[BCs]
[no_slip]
type = VectorDirichletBC
variable = vel
boundary = 'bottom left right'
values = '0 0 0'
[]
[lid]
type = VectorDirichletBC
variable = vel
boundary = 'top'
values = '50 0 0'
[]
[pressure_pin]
type = DirichletBC
variable = p
boundary = 'pinned_node'
value = 0
[]
[]
[Materials]
[fuel]
type = GenericMoltresMaterial
property_tables_root = '../../../property_file_dir/cnrs-benchmark/benchmark_'
interp_type = 'linear'
prop_names = 'temp_ref'
prop_values = '900'
[]
[ad_mat]
type = ADGenericConstantMaterial
prop_names = 'k rho cp mu t_alpha'
prop_values = '${k} ${density} ${cp} ${viscosity} ${t_alpha}'
[]
[ins_temp]
type = INSADStabilized3Eqn
alpha = ${alpha}
velocity = vel
pressure = p
temperature = temp
[]
[]
[Executioner]
type = Transient
scheme = bdf2
num_steps = 5000
solve_type = 'NEWTON'
petsc_options = '-snes_converged_reason -ksp_converged_reason -snes_linesearch_monitor'
petsc_options_iname = '-pc_type -sub_pc_type -ksp_gmres_restart -pc_asm_overlap -sub_pc_factor_shift_type'
petsc_options_value = 'asm lu 200 1 NONZERO'
line_search = 'none'
automatic_scaling = true
compute_scaling_once = false
resid_vs_jac_scaling_param = 0.1
scaling_group_variables = 'group1 group2 group3 group4 group5 group6; pre1 pre2 pre3 pre4 pre5 pre6 pre7 pre8; vel; p; temp'
nl_abs_tol = 1e-6
nl_rel_tol = 1e-6
nl_max_its = 25
l_max_its = 400
l_tol = 1e-4
dt = ${dt}
[]
[Preconditioning]
[SMP]
type = SMP
full = true
[]
[]
[Postprocessors]
[memory]
type = MemoryUsage
execute_on = 'INITIAL TIMESTEP_END'
[]
[tot_fissions]
type = ElmIntegTotFissPostprocessor
execute_on = linear
[]
[powernorm]
type = ElmIntegTotFissHeatPostprocessor
execute_on = linear
[]
[group1norm]
type = ElementIntegralVariablePostprocessor
variable = group1
execute_on = linear
[]
[group1max]
type = NodalExtremeValue
value_type = max
variable = group1
execute_on = timestep_end
[]
[group2norm]
type = ElementIntegralVariablePostprocessor
variable = group2
execute_on = linear
[]
[group2max]
type = NodalExtremeValue
value_type = max
variable = group2
execute_on = timestep_end
[]
[]
[VectorPostprocessors]
[]
[Outputs]
perf_graph = true
[exodus]
type = Exodus
interval = 20
[]
[csv]
type = CSV
append_restart = true
[]
[checkpoint]
type = Checkpoint
num_files = 3
interval = 20
[]
[]
[Debug]
show_var_residual_norms = true
[]
(tutorial/transient/transient.i)
[GlobalParams]
num_groups = 2
num_precursor_groups = 6
use_exp_form = false
group_fluxes = 'group1 group2'
pre_concs = 'pre1 pre2 pre3 pre4 pre5 pre6'
temperature = temp
sss2_input = true
account_delayed = true
[]
[Mesh]
coord_type = RZ
[mesh]
type = FileMeshGenerator
file = '../eigenvalue/mesh.e'
[]
[]
[Variables]
[group1]
order = FIRST
family = LAGRANGE
[]
[group2]
order = FIRST
family = LAGRANGE
[]
[temp]
order = FIRST
family = LAGRANGE
initial_condition = 1000
[]
[]
[Precursors]
[pres]
var_name_base = pre
family = MONOMIAL
order = CONSTANT
block = 0
outlet_boundaries = 'fuel_top'
constant_velocity_values = true
u_def = 0
v_def = 18.085
w_def = 0
nt_exp_form = false
loop_precursors = false
transient = true
[]
[]
[Kernels]
#---------------------------------------------------------------------
# Group 1 Neutronics
#---------------------------------------------------------------------
[time_group1]
type = NtTimeDerivative
variable = group1
group_number = 1
[]
[sigma_r_group1]
type = SigmaR
variable = group1
group_number = 1
[]
[diff_group1]
type = GroupDiffusion
variable = group1
group_number = 1
[]
[inscatter_group1]
type = InScatter
variable = group1
group_number = 1
[]
[fission_source_group1]
type = CoupledFissionKernel
variable = group1
group_number = 1
block = '0'
[]
[delayed_group1]
type = DelayedNeutronSource
variable = group1
block = '0'
group_number = 1
[]
#---------------------------------------------------------------------
# Group 2 Neutronics
#---------------------------------------------------------------------
[time_group2]
type = NtTimeDerivative
variable = group2
group_number = 2
[]
[sigma_r_group2]
type = SigmaR
variable = group2
group_number = 2
[]
[diff_group2]
type = GroupDiffusion
variable = group2
group_number = 2
[]
[fission_source_group2]
type = CoupledFissionKernel
variable = group2
group_number = 2
block = '0'
[]
[inscatter_group2]
type = InScatter
variable = group2
group_number = 2
[]
#---------------------------------------------------------------------
# Temperature
#---------------------------------------------------------------------
[temp_time_derivative]
type = INSTemperatureTimeDerivative
variable = temp
[]
[temp_advection_fuel]
type = ConservativeTemperatureAdvection
variable = temp
velocity = '0 18.085 0'
block = '0'
[]
[temp_diffusion]
type = MatDiffusion
variable = temp
diffusivity = 'k'
[]
[temp_source_fuel]
type = TransientFissionHeatSource
variable = temp
block = '0'
[]
[]
[BCs]
[vacuum_group1]
type = VacuumConcBC
boundary = 'fuel_bottom fuel_top mod_bottom mod_top right'
variable = group1
[]
[vacuum_group2]
type = VacuumConcBC
boundary = 'fuel_bottom fuel_top mod_bottom mod_top right'
variable = group2
[]
[temp_inlet_bc]
type = FunctionDirichletBC
variable = temp
boundary = 'fuel_bottom mod_bottom right'
function = 'temp_bc_func'
[]
[temp_outlet_bc]
type = TemperatureOutflowBC
variable = temp
boundary = 'fuel_top'
velocity = '0 18.085 0'
[]
[]
[ICs]
[group1_ic]
type = FunctionIC
variable = group1
function = ic_func
[]
[group2_ic]
type = FunctionIC
variable = group2
function = ic_func
[]
[]
[Functions]
[temp_bc_func]
type = ParsedFunction
expression = '1000 - (1000-965) * tanh(t/1)'
[]
[dt_func]
type = ParsedFunction
expression = 'if(t<50, if(t<30, .4, 5), 10)'
[]
[ic_func]
type = ParsedFunction
expression = '1e5 * (-x^2+70^2) * (-y * (y-150))'
[]
[]
[Materials]
[fuel]
type = MoltresJsonMaterial
block = '0'
base_file = '../eigenvalue/xsdata.json'
material_key = 'fuel'
interp_type = LINEAR
prop_names = 'rho k cp'
prop_values = '2.146e-3 .0553 1967'
[]
[graphite]
type = MoltresJsonMaterial
block = '1'
base_file = '../eigenvalue/xsdata.json'
material_key = 'graphite'
interp_type = LINEAR
prop_names = 'rho k cp'
prop_values = '1.86e-3 .312 1760'
[]
[]
[Executioner]
type = Transient
end_time = 200
nl_rel_tol = 1e-6
nl_abs_tol = 1e-1
automatic_scaling = true
compute_scaling_once = false
resid_vs_jac_scaling_param = 0.1
scaling_group_variables = 'group1 group2; pre1 pre2 pre3 pre4 pre5 pre6; temp'
solve_type = 'NEWTON'
petsc_options = '-snes_converged_reason -ksp_converged_reason -snes_linesearch_monitor'
petsc_options_iname = '-pc_type -pc_factor_shift_type -pc_factor_mat_solver_package'
petsc_options_value = 'lu NONZERO superlu_dist'
line_search = none
dtmin = 1e-3
dtmax = 10
[TimeStepper]
type = FunctionDT
function = dt_func
[]
# [TimeStepper]
# type = IterationAdaptiveDT
# dt = .2
# cutback_factor = 0.4
# growth_factor = 1.2
# optimal_iterations = 20
# []
[]
[Preconditioning]
[SMP]
type = SMP
full = true
[]
[]
[Postprocessors]
[tot_fissions]
type = ElmIntegTotFissPostprocessor
execute_on = linear
[]
[powernorm]
type = ElmIntegTotFissHeatPostprocessor
execute_on = linear
[]
[average_temp]
type = ElementAverageValue
variable = temp
execute_on = linear
[]
[inlet_temp]
type = SideAverageValue
variable = temp
boundary = fuel_bottom
[]
[outlet_temp]
type = SideAverageValue
variable = temp
boundary = fuel_top
[]
[]
[VectorPostprocessors]
[centerline_flux]
type = LineValueSampler
variable = 'group1 group2'
start_point = '0 0 0'
end_point = '0 150 0'
num_points = 151
sort_by = y
execute_on = FINAL
[]
[midplane_flux]
type = LineValueSampler
variable = 'group1 group2'
start_point = '0 75 0'
end_point = '69.375 75 0'
num_points = 100
sort_by = x
execute_on = FINAL
[]
[]
[Outputs]
perf_graph = true
# print_linear_residuals = true
[exodus]
type = Exodus
[]
[csv]
type = CSV
execute_on = FINAL
[]
[]
[Debug]
# show_var_residual_norms = true
[]
(tests/nts/gen-mesh-one-material.i)
[GlobalParams]
num_groups = 2
num_precursor_groups = 8
temperature = temp
group_fluxes = 'group1 group2'
# MSRE full power = 10 MW; core volume 90 ft3
power = 10
use_exp_form = false
sss2_input = false
account_delayed = false
[]
[Mesh]
type = GeneratedMesh
dim = 2
xmax = 6
ymax = 6
nx = 15
ny = 15
[]
[Variables]
[group1]
order = FIRST
family = LAGRANGE
[]
[group2]
order = FIRST
family = LAGRANGE
[]
[temp]
order = FIRST
family = LAGRANGE
scaling = 1e-6
[]
[]
[Kernels]
# Neutronics
[diff_group1]
type = GroupDiffusion
variable = group1
group_number = 1
[]
[diff_group2]
type = GroupDiffusion
variable = group2
group_number = 2
[]
[sigma_r_group1]
type = SigmaR
variable = group1
group_number = 1
[]
[sigma_r_group2]
type = SigmaR
variable = group2
group_number = 2
[]
[inscatter_group1]
type = InScatter
variable = group1
group_number = 1
num_groups = 2
group_fluxes = 'group1 group2'
[]
[inscatter_group2]
type = InScatter
variable = group2
group_number = 2
num_groups = 2
group_fluxes = 'group1 group2'
[]
[fission_source_group1]
type = CoupledFissionEigenKernel
variable = group1
group_number = 1
num_groups = 2
group_fluxes = 'group1 group2'
[]
[fission_source_group2]
type = CoupledFissionEigenKernel
variable = group2
group_number = 2
num_groups = 2
group_fluxes = 'group1 group2'
[]
# Temperature
[temp_cond]
type = MatDiffusion
variable = temp
diffusivity = 'k'
save_in = 'diffus_resid tot_resid'
[]
# [./temp_cond]
# type = HeatConduction
# diffusion_coefficient_name = k
# diffusion_coefficient_dT_name = d_k_d_temp
# use_displaced_mesh = false
# variable = temp
# [../]
[temp_source]
type = FissionHeatSource
tot_fission_heat = tot_fission_heat
variable = temp
save_in = 'src_resid tot_resid'
[]
[]
[AuxVariables]
[Qf]
family = MONOMIAL
order = CONSTANT
[]
[diffus_temp]
family = MONOMIAL
order = CONSTANT
[]
[diffus_resid]
family = LAGRANGE
order = FIRST
[]
[src_resid]
family = LAGRANGE
order = FIRST
[]
[bc_resid]
family = LAGRANGE
order = FIRST
[]
[tot_resid]
family = LAGRANGE
order = FIRST
[]
[]
[AuxKernels]
[Qf]
type = FissionHeatSourceAux
variable = Qf
tot_fission_heat = tot_fission_heat
[]
[diffus_temp]
type = MatDiffusionAux
variable = diffus_temp
diffuse_var = temp
prop_name = 'k'
[]
[]
[Materials]
[fuel]
type = GenericMoltresMaterial
block = 0
property_tables_root = 'msr2g_enrU_mod_953_fuel_interp_'
prop_names = 'k'
prop_values = '.0123' # Cammi 2011 at 908 K
interp_type = spline
[]
[]
[BCs]
[temp]
boundary = 'left right top bottom'
type = DirichletBC
variable = temp
value = 900
save_in = 'bc_resid tot_resid'
[]
# [./temp]
# boundary = boundary
# type = VacuumBC
# variable = temp
# [../]
[]
[Executioner]
# type = NonlinearEigen
# free_power_iterations = 4
# source_abs_tol = 1e-12
# source_rel_tol = 1e-8
# output_after_power_iterations = true
type = InversePowerMethod
max_power_iterations = 50
xdiff = 'group1diff'
bx_norm = 'bnorm'
k0 = 1.0
pfactor = 1e-2
l_max_its = 100
solve_type = 'PJFNK'
# solve_type = 'NEWTON'
petsc_options = '-snes_converged_reason -ksp_converged_reason -snes_linesearch_monitor'
# petsc_options_iname = '-pc_type -sub_pc_type'
# petsc_options_value = 'asm lu'
[]
[Preconditioning]
[SMP]
type = SMP
# full = true
[]
[]
[Postprocessors]
[bnorm]
type = ElmIntegTotFissNtsPostprocessor
group_fluxes = 'group1 group2'
execute_on = linear
[]
[tot_fission_heat]
type = ElmIntegTotFissHeatPostprocessor
execute_on = linear
[]
[group1norm]
type = ElementIntegralVariablePostprocessor
variable = group1
execute_on = linear
[]
[group2norm]
type = ElementIntegralVariablePostprocessor
variable = group2
execute_on = linear
[]
[group1max]
type = NodalExtremeValue
value_type = max
variable = group1
execute_on = timestep_end
[]
[group2max]
type = NodalExtremeValue
value_type = max
variable = group2
execute_on = timestep_end
[]
[src_resid_post]
type = NodalL2Norm
variable = src_resid
execute_on = nonlinear
[]
[diffus_resid_post]
type = NodalL2Norm
variable = diffus_resid
execute_on = nonlinear
[]
[bc_resid_post]
type = NodalL2Norm
variable = bc_resid
execute_on = nonlinear
[]
[tot_resid_post]
type = NodalL2Norm
variable = tot_resid
execute_on = nonlinear
[]
[group1diff]
type = ElementL2Diff
variable = group1
execute_on = 'linear timestep_end'
use_displaced_mesh = false
[]
[]
[Outputs]
[out]
type = Exodus
execute_on = 'timestep_end'
[]
[]
[Debug]
show_var_residual_norms = true
[]
[ICs]
[temp_ic]
type = ConstantIC
variable = temp
value = 900
[]
[]
(problems/2021-cnrs-benchmark/phase-0/nts.i)
# Step 0.2: Neutronics input file
[GlobalParams]
num_groups = 6
num_precursor_groups = 8
use_exp_form = false
group_fluxes = 'group1 group2 group3 group4 group5 group6'
pre_concs = 'pre1 pre2 pre3 pre4 pre5 pre6 pre7 pre8'
temperature = 900
sss2_input = true
account_delayed = true
[]
[Mesh]
type = GeneratedMesh
dim = 2
nx = 50
ny = 50
## Use a 40-by-40 mesh instead if running on a less capable computer
# nx = 40
# ny = 40
xmin = 0
xmax = 200
ymin = 0
ymax = 200
elem_type = QUAD4
[]
[Problem]
type = EigenProblem
bx_norm = bnorm
[]
[Nt]
var_name_base = group
vacuum_boundaries = 'bottom left right top'
create_temperature_var = false
eigen = true
[]
[Precursors]
[pres]
var_name_base = pre
outlet_boundaries = ''
constant_velocity_values = true
u_def = 0
v_def = 0
w_def = 0
nt_exp_form = false
family = MONOMIAL
order = CONSTANT
loop_precursors = false
transient = false
eigen = true
[]
[]
[Materials]
[fuel]
type = GenericMoltresMaterial
property_tables_root = '../../../property_file_dir/cnrs-benchmark/benchmark_'
interp_type = 'linear'
[]
[]
[Executioner]
type = Eigenvalue
# fission power normalization settings
normalization = 'powernorm'
normal_factor = 1e7 # Watts, 1e9 / 100
# Tiberga et al. assumes the depth of their 2D domain is 1m.
# Tiberga et al. domain = 2m x 2m x 1m
# We divide the total power=1e9W by 100 because our length units are in cm.
# Our domain = 2m x 2m x 0.01m
initial_eigenvalue = 0.99600
free_power_iterations = 2
eigen_tol = 1e-7
solve_type = 'PJFNK'
petsc_options = '-snes_converged_reason -ksp_converged_reason -snes_linesearch_monitor'
petsc_options_iname = '-pc_type -pc_factor_shift_type -pc_factor_mat_solver_package'
petsc_options_value = 'lu NONZERO superlu_dist'
## Use the settings below instead if running on computing cluster/supercomputer with a finer mesh
# petsc_options_iname = '-pc_type -pc_hypre_type'
# petsc_options_value = 'hypre boomeramg'
## Alternative PETSc settings if Hypre BoomerAMG is not installed
# petsc_options_iname = '-pc_type -sub_pc_type -ksp_gmres_restart -pc_asm_overlap -sub_pc_factor_shift_type'
# petsc_options_value = 'asm lu 200 1 NONZERO'
line_search = none
[]
[Postprocessors]
[k_eff]
type = VectorPostprocessorComponent
index = 0
vectorpostprocessor = k_vpp
vector_name = eigen_values_real
[]
[bnorm]
type = ElmIntegTotFissNtsPostprocessor
execute_on = linear
[]
[tot_fissions]
type = ElmIntegTotFissPostprocessor
execute_on = linear
[]
[powernorm]
type = ElmIntegTotFissHeatPostprocessor
execute_on = linear
[]
[group1norm]
type = ElementIntegralVariablePostprocessor
variable = group1
execute_on = linear
[]
[group1max]
type = NodalExtremeValue
value_type = max
variable = group1
execute_on = timestep_end
[]
[group1diff]
type = ElementL2Diff
variable = group1
execute_on = 'linear timestep_end'
use_displaced_mesh = false
[]
[group2norm]
type = ElementIntegralVariablePostprocessor
variable = group2
execute_on = linear
[]
[group2max]
type = NodalExtremeValue
value_type = max
variable = group2
execute_on = timestep_end
[]
[group2diff]
type = ElementL2Diff
variable = group2
execute_on = 'linear timestep_end'
use_displaced_mesh = false
[]
[]
[VectorPostprocessors]
[k_vpp]
type = Eigenvalues
inverse_eigenvalue = true
[]
[aa]
type = LineValueSampler
variable = 'group1 group2 group3 group4 group5 group6'
start_point = '0 100 0'
end_point = '200 100 0'
num_points = 201
sort_by = x
execute_on = FINAL
[]
[]
[Outputs]
perf_graph = true
print_linear_residuals = true
[exodus]
type = Exodus
[]
[csv]
type = CSV
[]
[]
(tests/coupled/coupled_eigenvalue.i)
flow_velocity = 21.7 # cm/s. See MSRE-properties.ods
[GlobalParams]
num_groups = 2
num_precursor_groups = 6
use_exp_form = false
group_fluxes = 'group1 group2'
temperature = 922
sss2_input = true
pre_concs = 'pre1 pre2 pre3 pre4 pre5 pre6'
account_delayed = true
[]
[Problem]
type = EigenProblem
bx_norm = fiss_neutrons
[]
[Mesh]
coord_type = RZ
file = '2d_lattice_structured.msh'
[]
[Nt]
var_name_base = group
vacuum_boundaries = 'fuel_bottoms fuel_tops moder_bottoms moder_tops outer_wall'
create_temperature_var = false
eigen = true
pre_blocks = 'fuel'
[]
[Precursors]
[pres]
var_name_base = pre
block = 'fuel'
outlet_boundaries = 'fuel_tops'
u_def = 0
v_def = ${flow_velocity}
w_def = 0
nt_exp_form = false
loop_precursors = false
family = MONOMIAL
order = CONSTANT
transient = false
eigen = true
[]
[]
[Materials]
[fuel]
type = GenericMoltresMaterial
property_tables_root = '../../property_file_dir/newt_msre_converted_to_serpent/serpent_msre_fuel_'
interp_type = 'spline'
block = 'fuel'
[]
[moder]
type = GenericMoltresMaterial
property_tables_root = '../../property_file_dir/newt_msre_converted_to_serpent/serpent_msre_mod_'
interp_type = 'spline'
prop_names = 'k cp'
prop_values = '.312 1760' # Cammi 2011 at 908 K
block = 'moder'
[]
[]
[Executioner]
type = Eigenvalue
initial_eigenvalue = 1
l_max_its = 100
eigen_tol = 1e-7
free_power_iterations = 2
normalization = powernorm
normal_factor = 1e7
solve_type = 'PJFNK'
petsc_options = '-snes_converged_reason -ksp_converged_reason -snes_linesearch_monitor'
petsc_options_iname = '-pc_type -pc_hypre_type'
petsc_options_value = 'hypre boomeramg'
line_search = none
[]
[Preconditioning]
[SMP]
type = SMP
full = true
[]
[]
[Postprocessors]
[k_eff]
type = VectorPostprocessorComponent
index = 0
vectorpostprocessor = k_vpp
vector_name = eigen_values_real
[]
[fiss_neutrons]
type = ElmIntegTotFissNtsPostprocessor
block = 'fuel'
execute_on = linear
[]
[powernorm]
type = ElmIntegTotFissHeatPostprocessor
execute_on = linear
[]
[tot_fissions]
type = ElmIntegTotFissPostprocessor
execute_on = linear
[]
[group1norm]
type = ElementIntegralVariablePostprocessor
variable = group1
execute_on = linear
[]
[group1max]
type = NodalExtremeValue
value_type = max
variable = group1
execute_on = timestep_end
[]
[group1diff]
type = ElementL2Diff
variable = group1
execute_on = 'linear timestep_end'
use_displaced_mesh = false
[]
[group2norm]
type = ElementIntegralVariablePostprocessor
variable = group2
execute_on = linear
[]
[group2max]
type = NodalExtremeValue
value_type = max
variable = group2
execute_on = timestep_end
[]
[group2diff]
type = ElementL2Diff
variable = group2
execute_on = 'linear timestep_end'
use_displaced_mesh = false
[]
[]
[VectorPostprocessors]
[k_vpp]
type = Eigenvalues
inverse_eigenvalue = true
[]
[]
[Outputs]
perf_graph = true
print_linear_residuals = true
[exodus]
type = Exodus
file_base = 'coupled_eigenvalue'
[]
[]
(problems/2021-cnrs-benchmark/phase-1/power-coupling-nts.i)
[GlobalParams]
num_groups = 6
num_precursor_groups = 8
use_exp_form = false
group_fluxes = 'group1 group2 group3 group4 group5 group6'
pre_concs = 'pre1 pre2 pre3 pre4 pre5 pre6 pre7 pre8'
temperature = temp
sss2_input = true
account_delayed = true
[]
[Mesh]
type = GeneratedMesh
dim = 2
nx = 200
ny = 200
## Use a 40-by-40 mesh instead if running on a less capable computer
# nx = 40
# ny = 40
xmin = 0
xmax = 200
ymin = 0
ymax = 200
elem_type = QUAD4
[]
[Problem]
type = EigenProblem
bx_norm = bnorm
[]
[Nt]
var_name_base = group
vacuum_boundaries = 'bottom left right top'
create_temperature_var = false
eigen = true
[]
[Precursors]
[pres]
var_name_base = pre
outlet_boundaries = ''
constant_velocity_values = false
uvel = ux
vvel = uy
nt_exp_form = false
family = MONOMIAL
order = CONSTANT
loop_precursors = false
transient = false
eigen = true
[]
[]
[AuxVariables]
[temp]
family = LAGRANGE
order = FIRST
initial_condition = 900
[]
[ux]
family = LAGRANGE
order = FIRST
[]
[uy]
family = LAGRANGE
order = FIRST
[]
[heat]
family = MONOMIAL
order = FIRST
[]
[]
[UserObjects]
[velocities]
type = SolutionUserObject
mesh = '../phase-0/vel-field_exodus.e'
system_variables = 'vel_x vel_y'
timestep = LATEST
execute_on = INITIAL
[]
[]
[AuxKernels]
[ux]
type = SolutionAux
variable = ux
from_variable = vel_x
solution = velocities
[]
[uy]
type = SolutionAux
variable = uy
from_variable = vel_y
solution = velocities
[]
[heat_source]
type = FissionHeatSourceAux
variable = heat
tot_fission_heat = powernorm
power = 1e7
[]
[]
[Functions]
[velxf]
type = SolutionFunction
from_variable = vel_x
solution = velocities
[]
[velyf]
type = SolutionFunction
from_variable = vel_y
solution = velocities
[]
[]
[Materials]
[fuel]
type = GenericMoltresMaterial
property_tables_root = '../../../property_file_dir/cnrs-benchmark/benchmark_'
interp_type = 'spline'
[]
[]
[Executioner]
type = Eigenvalue
# fission power normalization
normalization = 'powernorm'
normal_factor = 1e7 # Watts, 1e9 / 100
# Tiberga et al. assumes the depth of their 2D domain is 1m.
# Tiberga et al. domain = 2m x 2m x 1m
# We divide the total power=1e9W by 100 because our length units are in cm.
# Our domain = 2m x 2m x 0.01m
automatic_scaling = true
compute_scaling_once = false
off_diagonals_in_auto_scaling = true
resid_vs_jac_scaling_param = .1
scaling_group_variables = 'group1 group2 group3 group4 group5 group6;
pre1 pre2 pre3 pre4 pre5 pre6 pre7 pre8'
initial_eigenvalue = 1.00
free_power_iterations = 2
solve_type = 'PJFNK'
petsc_options = '-snes_converged_reason -ksp_converged_reason -snes_linesearch_monitor'
petsc_options_iname = '-pc_type -pc_hypre_type'
petsc_options_value = 'hypre boomeramg'
## Alternative PETSc settings if Hypre BoomerAMG is not installed
# petsc_options_iname = '-pc_type -sub_pc_type -ksp_gmres_restart -pc_asm_overlap -sub_pc_factor_shift_type'
# petsc_options_value = 'asm lu 200 1 NONZERO'
line_search = none
[]
[Postprocessors]
[k_eff]
type = VectorPostprocessorComponent
index = 0
vectorpostprocessor = k_vpp
vector_name = eigen_values_real
[]
[bnorm]
type = ElmIntegTotFissNtsPostprocessor
execute_on = linear
[]
[tot_fissions]
type = ElmIntegTotFissPostprocessor
execute_on = linear
[]
[powernorm]
type = ElmIntegTotFissHeatPostprocessor
execute_on = linear
[]
[group1norm]
type = ElementIntegralVariablePostprocessor
variable = group1
execute_on = linear
[]
[group1max]
type = NodalExtremeValue
value_type = max
variable = group1
execute_on = timestep_end
[]
[group1diff]
type = ElementL2Diff
variable = group1
execute_on = 'linear timestep_end'
use_displaced_mesh = false
[]
[group2norm]
type = ElementIntegralVariablePostprocessor
variable = group2
execute_on = linear
[]
[group2max]
type = NodalExtremeValue
value_type = max
variable = group2
execute_on = timestep_end
[]
[group2diff]
type = ElementL2Diff
variable = group2
execute_on = 'linear timestep_end'
use_displaced_mesh = false
[]
[]
[VectorPostprocessors]
[k_vpp]
type = Eigenvalues
inverse_eigenvalue = true
[]
[flux_aa]
type = LineValueSampler
variable = 'group1 group2 group3 group4 group5 group6'
start_point = '0 100 0'
end_point = '200 100 0'
num_points = 201
sort_by = x
execute_on = FINAL
outputs = 'csv'
[]
[flux_bb]
type = LineValueSampler
variable = 'group1 group2 group3 group4 group5 group6'
start_point = '100 0 0'
end_point = '100 200 0'
num_points = 201
sort_by = y
execute_on = FINAL
outputs = 'csv'
[]
[]
[Outputs]
perf_graph = true
print_linear_residuals = true
[exodus]
type = Exodus
[]
[csv]
type = CSV
[]
[]
(problems/publication_level_cases/manuBench/manuboxNoStokes.i)
library_path=/home/gavin/projects/moose/modules/navier_stokes/lib/
[GlobalParams]
# neutronics
num_groups=6
num_precursor_groups=8
use_exp_form = false
group_fluxes = 'group1 group2 group3 group4 group5 group6'
temperature = temp
sss2_input = false
pre_concs = 'pre1 pre2 pre3 pre4 pre5 pre6 pre7 pre8'
account_delayed = true
[]
[Mesh]
type = GeneratedMesh
dim = 2
xmin = 0
xmax = 1.0
ymin = 0
ymax = 1.0
elem_type = QUAD9
nx = 20
ny = 20
[]
[Variables]
# temperature
[./temp]
family = LAGRANGE
order = FIRST
initial_condition = 900
scaling = 1e-4
[../]
[]
# nt -> neutron
[Nt]
var_name_base = group
vacuum_boundaries = 'top bottom left right'
create_temperature_var = false
eigen = true
scaling = 1e-10
[]
[Precursors]
[./preblock]
var_name_base = pre
# block = 'fuel'
constant_velocity_values = false
nt_exp_form = false
family = MONOMIAL
order = CONSTANT
outlet_boundaries = ''
transient = false
u_func = 0.0
v_func = 0.0
w_func = 0.0
[../]
[]
[Kernels]
[./heating]
type = TransientFissionHeatSource
variable = temp
group_fluxes = 'group1 group2 group3 group4 group5 group6'
[../]
[./heatRemoval]
type = ConvectiveHeatExchanger
variable = temp
tref = 900.0
htc = 1.0
[../]
[]
[BCs]
[]
[Materials]
# alpha = coefficient of thermal expansion where rho = rho0 -alpha * rho0 * delta T
# Dr. Aufiero uses nu rather than mu, (kinematic rather than absolute viscosity)
# likewise, \rho c_p is given rather than separate \rho, c_p
# accordingly, we let \rho = 1 to obtain equivalent results
# also, Manu gives a length expansion coefficient. Boussinesq approximations
# typically use an expansion coefficient with units 1/K, but for mass instead.
# The relation between the two is alpha = -3 beta, if linearized.
# Also, had to use Pr = mu * cp / k
[./const]
type = GenericConstantMaterial
prop_names = 'mu rho alpha k cp'
prop_values = '0.025 1.0 6.0e-4 0.5 6.15e6'
[../]
[./fuelneutronicproperties]
type = GenericMoltresMaterial
property_tables_root = './groupconstants/'
interp_type = 'none' # 'spline'
[../]
[]
[Preconditioning]
[./SMP]
type = SMP
full = true
solve_type = 'PJFNK'
[../]
[]
[Executioner]
type = InversePowerMethod
max_power_iterations = 50
# fission power normalization:
normalization = powernorm
normal_factor = 1e9 # watts
# power iteration options
xdiff = 'group1diff'
bx_norm = 'bnorm'
pfactor = 1e-2
petsc_options = '-snes_converged_reason -ksp_converged_reason'
petsc_options_iname = '-pc_type -pc_factor_shift_type'
petsc_options_value = 'lu NONZERO'
nl_rel_tol = 1e-12
nl_abs_tol = 1e-13
nl_max_its = 6
l_tol = 1e-6
l_max_its = 100
[]
[Outputs]
[./exodus]
type = Exodus
[../]
[./csv]
type = CSV
[../]
[]
[Postprocessors]
[./bnorm]
type = ElmIntegTotFissNtsPostprocessor
execute_on = linear
[../]
[./group1diff]
type = ElementL2Diff
variable = group1
execute_on = 'linear timestep_end'
use_displaced_mesh = false
[../]
[./powernorm]
type = ElmIntegTotFissHeatPostprocessor
execute_on = linear
[../]
[]
[AuxVariables]
[./deltaT]
type = ConstantDifferenceAux
variable = deltaT
comparevar = temp
constant = 900
[../]
[]
[AuxKernels]
[./deltaTCalc]
type = ConstantDifferenceAux
variable = deltaT
compareVar = temp
constant = 900
[../]
[]
[Debug]
show_var_residual_norms = true
[]
(include/postprocessors/AverageFissionHeat.h)
#pragma once
#include "ElmIntegTotFissHeatPostprocessor.h"
class AverageFissionHeat : public ElmIntegTotFissHeatPostprocessor
{
public:
AverageFissionHeat(const InputParameters & parameters);
static InputParameters validParams();
using Postprocessor::getValue;
virtual Real getValue() const override;
protected:
virtual void initialize() override;
virtual void execute() override;
virtual void threadJoin(const UserObject & y) override;
virtual void finalize() override;
Real _volume;
};