- variableThe name of the variable that this object operates on
C++ Type:std::vector<VariableName>
Controllable:No
Description:The name of the variable that this object operates on
LayeredAverage
Computes averages of variables over layers
How to define the layers
The layer definition is handled by the LayeredBase
class. It is summarized here. One, or multiple, layers are defined by their direction (normal or axis), their number, and their thicknesses.
The direction of the layers currently may only be along the three Cartesian axes, and can be set using the "direction" parameter.
The number of layers is set using the "num_layers" parameter, unless the "bounds" parameter (see below) is set.
The thicknesses of the layers can be set in three different, and separate, ways:
they can be set directly with coordinates along the specified direction using the "bounds" parameter. This will simultaneously set the number of layers, equal to the number of bounds minus one.
the minimum and maximum coordinates along the specified directions can be both specified to specify the total extent of equal thickness layers, using the "direction_min" and "direction_max" parameters
a vector of bounding domains may be specified using the "layer_bounding_block". The minimum and maximum coordinates along specified direction, which sets the thickness for each layer, are then obtained by looking at the maximum coordinate in the specified bounding block (to set the layers' minimum) and the minimum coordinate in the bounding blocks (to set the layers' maximum).
The layers may be restricted to elements in certain subdomains using the "block" parameter.
How to retrieve the result
The result of a LayeredAverage
computation can be saved in an auxiliary variable using a SpatialUserObjectAux. It can be output to a CSV file using a SpatialUserObjectVectorPostprocessor.
Additional computation options
Sampling parameters may be specified to :
obtain the layer average directly, by setting the "sample_type" to
direct
(default)interpolate between layer averages, by setting the "sample_type" to
interpolate
.average between layers, by setting the "sample_type" to
average
. The "average_radius" parameter can be specified to tune the distance over which to average results.
Additionally, cumulative averages over layers, in the positive direction, can be computed by setting the "cumulative" to true
.
Example input syntax
In this example, the average of variable u
is taken over the whole domain in direction y
over two layers. The result of this averaging is stored in the variable layered_average
using a SpatialUserObjectAux, and output to a CSV file using a SpatialUserObjectVectorPostprocessor.
[UserObjects]
[./average]
type = LayeredAverage
variable = u
direction = y
num_layers = 2
[../]
[]
[AuxKernels]
[./layered_average]
type = SpatialUserObjectAux
variable = layered_average
execute_on = timestep_end
user_object = average
[../]
[]
[VectorPostprocessors]
[avg]
type = SpatialUserObjectVectorPostprocessor
userobject = average
[]
[]
(test/tests/userobjects/layered_average/layered_average.i)Input Parameters
- blockThe list of block ids (SubdomainID) that this object will be applied
C++ Type:std::vector<SubdomainName>
Controllable:No
Description:The list of block ids (SubdomainID) that this object will be applied
- execute_onTIMESTEP_ENDThe list of flag(s) indicating when this object should be executed, the available options include FORWARD, ADJOINT, HOMOGENEOUS_FORWARD, ADJOINT_TIMESTEP_BEGIN, ADJOINT_TIMESTEP_END, NONE, INITIAL, LINEAR, NONLINEAR, TIMESTEP_END, TIMESTEP_BEGIN, MULTIAPP_FIXED_POINT_END, MULTIAPP_FIXED_POINT_BEGIN, FINAL, CUSTOM.
Default:TIMESTEP_END
C++ Type:ExecFlagEnum
Options:FORWARD, ADJOINT, HOMOGENEOUS_FORWARD, ADJOINT_TIMESTEP_BEGIN, ADJOINT_TIMESTEP_END, NONE, INITIAL, LINEAR, NONLINEAR, TIMESTEP_END, TIMESTEP_BEGIN, MULTIAPP_FIXED_POINT_END, MULTIAPP_FIXED_POINT_BEGIN, FINAL, CUSTOM
Controllable:No
Description:The list of flag(s) indicating when this object should be executed, the available options include FORWARD, ADJOINT, HOMOGENEOUS_FORWARD, ADJOINT_TIMESTEP_BEGIN, ADJOINT_TIMESTEP_END, NONE, INITIAL, LINEAR, NONLINEAR, TIMESTEP_END, TIMESTEP_BEGIN, MULTIAPP_FIXED_POINT_END, MULTIAPP_FIXED_POINT_BEGIN, FINAL, CUSTOM.
- layer_bounding_blockList of block ids (SubdomainID) that are used to determine the upper and lower geometric bounds for all layers. If this is not specified, the ids specified in 'block' are used for this purpose.
C++ Type:std::vector<SubdomainName>
Controllable:No
Description:List of block ids (SubdomainID) that are used to determine the upper and lower geometric bounds for all layers. If this is not specified, the ids specified in 'block' are used for this purpose.
- 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
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.
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
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>
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
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
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
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
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
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
Controllable:No
Description:Determines whether this object is calculated using an implicit or explicit form
- 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
- average_radius1When using 'average' sampling this is how the number of values both above and below the layer that will be averaged.
Default:1
C++ Type:unsigned int
Controllable:No
Description:When using 'average' sampling this is how the number of values both above and below the layer that will be averaged.
- cumulativeFalseWhen true the value in each layer is the sum of the values up to and including that layer
Default:False
C++ Type:bool
Controllable:No
Description:When true the value in each layer is the sum of the values up to and including that layer
- positive_cumulative_directionTrueWhen 'cumulative' is true, whether the direction for summing the cumulative value is the positive direction or negative direction
Default:True
C++ Type:bool
Controllable:No
Description:When 'cumulative' is true, whether the direction for summing the cumulative value is the positive direction or negative direction
- sample_typedirectHow to sample the layers. 'direct' means get the value of the layer the point falls in directly (or average if that layer has no value). 'interpolate' does a linear interpolation between the two closest layers. 'average' averages the two closest layers.
Default:direct
C++ Type:MooseEnum
Options:direct, interpolate, average
Controllable:No
Description:How to sample the layers. 'direct' means get the value of the layer the point falls in directly (or average if that layer has no value). 'interpolate' does a linear interpolation between the two closest layers. 'average' averages the two closest layers.
Value Sampling / Aggregating Parameters
- boundsThe 'bounding' positions of the layers i.e.: '0, 1.2, 3.7, 4.2' will mean 3 layers between those positions.
C++ Type:std::vector<double>
Controllable:No
Description:The 'bounding' positions of the layers i.e.: '0, 1.2, 3.7, 4.2' will mean 3 layers between those positions.
- directionThe direction of the layers.
C++ Type:MooseEnum
Options:x, y, z
Controllable:No
Description:The direction of the layers.
- direction_maxMaximum coordinate along 'direction' that bounds the layers
C++ Type:double
Controllable:No
Description:Maximum coordinate along 'direction' that bounds the layers
- direction_minMinimum coordinate along 'direction' that bounds the layers
C++ Type:double
Controllable:No
Description:Minimum coordinate along 'direction' that bounds the layers
- num_layersThe number of layers.
C++ Type:unsigned int
Controllable:No
Description:The number of layers.
Layers Extent And Definition Parameters
Input Files
- (test/tests/transfers/general_field/user_object/subdomain/sub.i)
- (test/tests/userobjects/layered_average/layered_average_bounding_block.i)
- (test/tests/userobjects/layered_average/layered_average_bounds.i)
- (test/tests/transfers/general_field/user_object/boundary/main.i)
- (test/tests/transfers/multiapp_userobject_transfer/two_pipe_sub.i)
- (test/tests/userobjects/layered_average/layered_average_bounds_error.i)
- (test/tests/transfers/multiapp_userobject_transfer/tosub_parent.i)
- (test/tests/transfers/general_field/user_object/regular/sub.i)
- (test/tests/transfers/multiapp_userobject_transfer/3d_1d_parent.i)
- (test/tests/transfers/general_field/user_object/between_siblings/sub_between_diffusion1.i)
- (modules/navier_stokes/test/tests/finite_volume/cns/pressure_outlet/subsonic_nozzle_fixed_inflow_hllc.i)
- (modules/thermal_hydraulics/test/tests/actions/coupled_heat_transfer_action/sub_2phase.i)
- (test/tests/transfers/multiapp_userobject_transfer/3d_1d_sub.i)
- (test/tests/userobjects/layered_average/layered_average_block.i)
- (test/tests/transfers/multiapp_userobject_transfer/restricted_node_sub.i)
- (test/tests/transfers/general_field/user_object/subdomain/main.i)
- (test/tests/transfers/general_field/nearest_node/mesh_division/sub.i)
- (modules/thermal_hydraulics/test/tests/actions/coupled_heat_transfer_action/sub.i)
- (test/tests/transfers/general_field/user_object/duplicated_user_object_tests/two_pipe_sub.i)
- (test/tests/transfers/general_field/user_object/duplicated_user_object_tests/restricted_node_sub.i)
- (test/tests/transfers/multiapp_conservative_transfer/sub_userobject.i)
- (test/tests/transfers/transfer_interpolation/parent.i)
- (test/tests/transfers/multiapp_userobject_transfer/restricted_elem_sub.i)
- (modules/navier_stokes/test/tests/finite_volume/cns/stagnation_inlet/supersonic_nozzle_hllc.i)
- (test/tests/transfers/general_field/user_object/between_siblings/sub_between_diffusion2.i)
- (test/tests/userobjects/layered_average/block_restricted.i)
- (test/tests/transfers/multiapp_high_order_variable_transfer/parent_L2_Lagrange_userobject.i)
- (test/tests/transfers/general_field/user_object/nearest_position/sub.i)
- (test/tests/transfers/multiapp_userobject_transfer/sub.i)
- (test/tests/transfers/general_field/user_object/duplicated_user_object_tests/sub.i)
- (test/tests/transfers/general_field/shape_evaluation/mesh_division/sub.i)
- (test/tests/userobjects/layered_average/layered_average_1d_displaced.i)
- (test/tests/transfers/coord_transform/both-transformed/user_object/sub-app.i)
- (test/tests/transfers/general_field/user_object/regular/main.i)
- (test/tests/transfers/general_field/user_object/duplicated_user_object_tests/3d_1d_sub.i)
- (modules/thermal_hydraulics/test/tests/components/heat_transfer_from_external_app_1phase/phy.T_wall_transfer_elem_3eqn.parent.i)
- (test/tests/userobjects/layered_average/layered_average_interpolate.i)
- (test/tests/transfers/coord_transform/both-transformed/user_object/main-app.i)
- (test/tests/transfers/multiapp_userobject_transfer/tosub_displaced_parent.i)
- (test/tests/userobjects/layered_average/layered_average.i)
- (test/tests/transfers/general_field/user_object/boundary/sub.i)
- (test/tests/transfers/general_field/user_object/nearest_position/main.i)
- (test/tests/transfers/general_field/user_object/duplicated_user_object_tests/3d_1d_parent.i)
- (test/tests/transfers/general_field/user_object/duplicated_user_object_tests/tosub_displaced_parent.i)
- (test/tests/transfers/general_field/user_object/coord_transform/main-app.i)
- (test/tests/transfers/general_field/user_object/duplicated_user_object_tests/restricted_elem_sub.i)
- (test/tests/transfers/general_field/user_object/duplicated_user_object_tests/tosub_parent.i)
- (test/tests/transfers/general_field/user_object/nearest_position/sub_between_diffusion.i)
Child Objects
direction
C++ Type:MooseEnum
Options:x, y, z
Controllable:No
Description:The direction of the layers.
num_layers
C++ Type:unsigned int
Controllable:No
Description:The number of layers.
bounds
C++ Type:std::vector<double>
Controllable:No
Description:The 'bounding' positions of the layers i.e.: '0, 1.2, 3.7, 4.2' will mean 3 layers between those positions.
bounds
C++ Type:std::vector<double>
Controllable:No
Description:The 'bounding' positions of the layers i.e.: '0, 1.2, 3.7, 4.2' will mean 3 layers between those positions.
direction_min
C++ Type:double
Controllable:No
Description:Minimum coordinate along 'direction' that bounds the layers
direction_max
C++ Type:double
Controllable:No
Description:Maximum coordinate along 'direction' that bounds the layers
layer_bounding_block
C++ Type:std::vector<SubdomainName>
Controllable:No
Description:List of block ids (SubdomainID) that are used to determine the upper and lower geometric bounds for all layers. If this is not specified, the ids specified in 'block' are used for this purpose.
block
C++ Type:std::vector<SubdomainName>
Controllable:No
Description:The list of block ids (SubdomainID) that this object will be applied
sample_type
Default:direct
C++ Type:MooseEnum
Options:direct, interpolate, average
Controllable:No
Description:How to sample the layers. 'direct' means get the value of the layer the point falls in directly (or average if that layer has no value). 'interpolate' does a linear interpolation between the two closest layers. 'average' averages the two closest layers.
sample_type
Default:direct
C++ Type:MooseEnum
Options:direct, interpolate, average
Controllable:No
Description:How to sample the layers. 'direct' means get the value of the layer the point falls in directly (or average if that layer has no value). 'interpolate' does a linear interpolation between the two closest layers. 'average' averages the two closest layers.
sample_type
Default:direct
C++ Type:MooseEnum
Options:direct, interpolate, average
Controllable:No
Description:How to sample the layers. 'direct' means get the value of the layer the point falls in directly (or average if that layer has no value). 'interpolate' does a linear interpolation between the two closest layers. 'average' averages the two closest layers.
average_radius
Default:1
C++ Type:unsigned int
Controllable:No
Description:When using 'average' sampling this is how the number of values both above and below the layer that will be averaged.
cumulative
Default:False
C++ Type:bool
Controllable:No
Description:When true the value in each layer is the sum of the values up to and including that layer
(test/tests/userobjects/layered_average/layered_average.i)
[Mesh]
type = GeneratedMesh
dim = 2
nx = 10
ny = 10
[]
[Variables]
[./u]
[../]
[]
[AuxVariables]
[./layered_average]
order = CONSTANT
family = MONOMIAL
[../]
[]
[Kernels]
[./diff]
type = Diffusion
variable = u
[../]
[]
[AuxKernels]
[./layered_average]
type = SpatialUserObjectAux
variable = layered_average
execute_on = timestep_end
user_object = average
[../]
[]
[BCs]
[./top]
type = DirichletBC
variable = u
boundary = top
value = 1
[../]
[./bottom]
type = DirichletBC
variable = u
boundary = bottom
value = 0
[../]
[]
[UserObjects]
[./average]
type = LayeredAverage
variable = u
direction = y
num_layers = 2
[../]
[]
[VectorPostprocessors]
[avg]
type = SpatialUserObjectVectorPostprocessor
userobject = average
[]
[]
[Executioner]
type = Steady
solve_type = 'PJFNK'
petsc_options_iname = '-pc_type -pc_hypre_type'
petsc_options_value = 'hypre boomeramg'
[]
[Outputs]
exodus = true
csv = true
[]
(test/tests/transfers/general_field/user_object/subdomain/sub.i)
[Mesh]
[gmg]
type = GeneratedMeshGenerator
dim = 2
nx = 5
ny = 5
xmax = 0.2
ymax = 0.2
[]
[add_block]
type = ParsedSubdomainMeshGenerator
input = gmg
combinatorial_geometry = 'x > 0.05 & y < 0.1'
block_id = 1
[]
[]
[AuxVariables]
[from_main]
initial_condition = -1
[]
[from_main_elem]
order = CONSTANT
family = MONOMIAL
initial_condition = -1
[]
[to_main]
[InitialCondition]
type = FunctionIC
function = '3 + 2*x*x + 3*y*y*y'
[]
[]
[to_main_elem]
order = CONSTANT
family = MONOMIAL
[InitialCondition]
type = FunctionIC
function = '4 + 2*x*x + 3*y*y*y'
[]
[]
[]
[UserObjects]
[to_main]
type = LayeredAverage
direction = x
num_layers = 10
variable = to_main
[]
[to_main_elem]
type = LayeredAverage
direction = x
num_layers = 10
variable = to_main_elem
[]
[]
[Executioner]
type = Transient
num_steps = 1
[]
[Problem]
solve = false
[]
[Outputs]
exodus = true
hide = 'to_main to_main_elem'
execute_on = 'TIMESTEP_END'
[]
(test/tests/userobjects/layered_average/layered_average_bounding_block.i)
#
# The mesh consists of two blocks. Block 1 has a height and width of 1 whereas
# block 2 has a height of 2 and width of 1. A gap of 1 exists between the two
# blocks in the x direction. Elements are 0.25 high and 1 wide. The solution
# in block 1 is u = y and block 2 is u = 4y.
#
# Two sets of LayeredAverage values are computed. In both cases, four
# layers are used. In 'bounding_block1', the LayeredAverage values are computed
# on block 1 using the bounds (dimensions of block 2). In 'bounding_block2',
# the LayeredAverage values are computed on block 2 using the bounds (dimensions
# of block 1).
#
# In 'bounding_block1', since the layers are defined by the dimensions of block
# 2 only two layers appear in block one. The values in block 1 are thus:
# 0.25 for 0<y<0.5 and 0.75 for 0.5<y<1.
#
# In 'bounding_block2', since the layers are defined by the dimensions of block
# 1 four layers appear in block two. Any place over and above the top of the
# uppermost layer is included in the uppermost layer. Therefore, the first 3
# layers are 1/4 of the height of block 1 (0.25) whereas the 4th layer has a
# height of 1/4 of block 1 (0.25) plus the additional region in block 2 outside
# the bounds of block 1 (1.0) for a total height of 1.24.
# The values in block 2 are thus:
# 0.5 from 0<y<0.25, 1.5 from 0.25<y<0.5, 2.5 from 0.5<y<0.75, and 5.5 from
# y>0.75.
#
#
[Mesh]
file = layered_average_bounding_block.e
[]
[Variables]
[./u]
[../]
[]
[AuxVariables]
[./bounding_block1]
order = CONSTANT
family = MONOMIAL
[../]
[./bounding_block2]
order = CONSTANT
family = MONOMIAL
[../]
[]
[Kernels]
[./diff]
type = Diffusion
variable = u
[../]
[]
[AuxKernels]
[./bounding_block1]
type = SpatialUserObjectAux
block = 1
variable = bounding_block1
execute_on = timestep_end
user_object = bounding_block1
[../]
[./bounding_block2]
type = SpatialUserObjectAux
block = 2
variable = bounding_block2
execute_on = timestep_end
user_object = bounding_block2
[../]
[]
[BCs]
[./ll]
type = DirichletBC
variable = u
boundary = 1
value = 0
[../]
[./lu]
type = DirichletBC
variable = u
boundary = 2
value = 1
[../]
[./ul]
type = DirichletBC
variable = u
boundary = 3
value = 0
[../]
[./uu]
type = DirichletBC
variable = u
boundary = 4
value = 8
[../]
[]
[UserObjects]
[./bounding_block1]
type = LayeredAverage
direction = y
num_layers = 4
variable = u
execute_on = linear
block = 1
layer_bounding_block = 2
[../]
[./bounding_block2]
type = LayeredAverage
direction = y
num_layers = 4
block = 2
layer_bounding_block = 1
variable = u
execute_on = linear
[../]
[]
[Executioner]
type = Transient
dt = 1
end_time = 1
[]
[Outputs]
exodus = true
[]
(test/tests/userobjects/layered_average/layered_average_bounds.i)
[Mesh]
type = GeneratedMesh
dim = 2
nx = 10
ny = 10
[]
[Variables]
[./u]
[../]
[]
[AuxVariables]
[./layered_average]
order = CONSTANT
family = MONOMIAL
[../]
[]
[Kernels]
[./diff]
type = Diffusion
variable = u
[../]
[]
[AuxKernels]
[./layered_average]
type = SpatialUserObjectAux
variable = layered_average
execute_on = timestep_end
user_object = average
[../]
[]
[BCs]
[./top]
type = DirichletBC
variable = u
boundary = top
value = 1
[../]
[./bottom]
type = DirichletBC
variable = u
boundary = bottom
value = 0
[../]
[]
[UserObjects]
[./average]
type = LayeredAverage
variable = u
direction = y
bounds = '0 0.2 0.5 1'
[../]
[]
[Executioner]
type = Steady
solve_type = PJFNK
petsc_options_iname = '-pc_type -pc_hypre_type'
petsc_options_value = 'hypre boomeramg'
[]
[Outputs]
exodus = true
[]
(test/tests/transfers/general_field/user_object/boundary/main.i)
# Base input for testing transfers. It has the following complexities:
# - more than one subapp
# - transfers both from and to the subapps
# - both nodal and elemental variables
# - subapp meshes are not aligned with the main app
# Tests derived from this input may add complexities through command line arguments
[Mesh]
[gmg]
type = GeneratedMeshGenerator
dim = 3
nx = 5
ny = 5
nz = 5
[]
[add_block]
type = ParsedSubdomainMeshGenerator
input = gmg
combinatorial_geometry = 'x < 0.5 & y < 0.5'
block_id = 1
[]
[add_internal_sideset]
type = SideSetsBetweenSubdomainsGenerator
input = add_block
primary_block = 0
paired_block = 1
new_boundary = internal
[]
[]
[AuxVariables]
[from_sub]
initial_condition = -1
[]
[from_sub_elem]
order = CONSTANT
family = MONOMIAL
initial_condition = -1
[]
[to_sub]
[InitialCondition]
type = FunctionIC
function = '1 + 2*x*x + 3*y*y*y'
[]
[]
[to_sub_elem]
order = CONSTANT
family = MONOMIAL
[InitialCondition]
type = FunctionIC
function = '2 + 2*x*x + 3*y*y*y'
[]
[]
[]
[UserObjects]
[to_sub]
type = LayeredAverage
direction = x
num_layers = 10
variable = to_sub
[]
[to_sub_elem]
type = LayeredAverage
direction = x
num_layers = 10
variable = to_sub_elem
[]
[]
[Executioner]
type = Transient
num_steps = 1
[]
[Problem]
solve = false
verbose_multiapps = true
[]
[Outputs]
[out]
type = Exodus
hide = 'to_sub to_sub_elem'
overwrite = true
[]
[]
[MultiApps]
[sub]
# 1 on corner, one in the center and one close to a corner
# The subapp mesh is a 0.3-sized cube, no overlap
positions = '0.2222 0 0 0.61111 0.311111 0.31111 0.76666 0.111111 0.81111'
type = TransientMultiApp
app_type = MooseTestApp
input_files = sub.i
execute_on = timestep_end
# Facilitates debugging
output_in_position = true
[]
[]
[Transfers]
# Boundary restrictions are added in the tests specification
[to_sub]
type = MultiAppGeneralFieldUserObjectTransfer
to_multi_app = sub
source_user_object = to_sub
variable = from_main
extrapolation_constant = -1
[]
[to_sub_elem]
type = MultiAppGeneralFieldUserObjectTransfer
to_multi_app = sub
source_user_object = to_sub_elem
variable = from_main_elem
extrapolation_constant = -1
[]
[from_sub]
type = MultiAppGeneralFieldUserObjectTransfer
from_multi_app = sub
source_user_object = to_main
variable = from_sub
extrapolation_constant = -1
[]
[from_sub_elem]
type = MultiAppGeneralFieldUserObjectTransfer
from_multi_app = sub
source_user_object = to_main_elem
variable = from_sub_elem
extrapolation_constant = -1
[]
[]
(test/tests/transfers/multiapp_userobject_transfer/two_pipe_sub.i)
[Mesh]
type = FileMesh
file = two_pipe.e
[]
[Problem]
kernel_coverage_check = false
[]
[Variables]
[u]
[]
[]
[AuxVariables]
[./var]
order = CONSTANT
family = MONOMIAL
block = p1
[../]
[]
[ICs]
[./var]
type = FunctionIC
variable = var
function = setvar
block = p1
[../]
[]
[Functions]
[./setvar]
type = ParsedFunction
expression = '1 + z * z'
[../]
[]
[UserObjects]
[./sub_app_uo]
type = LayeredAverage
direction = z
variable = var
num_layers = 10
execute_on = TIMESTEP_END
block = p1
[../]
[]
[Executioner]
type = Transient
[]
(test/tests/userobjects/layered_average/layered_average_bounds_error.i)
[Mesh]
type = GeneratedMesh
dim = 2
nx = 10
ny = 10
[]
[Variables]
[./u]
[../]
[]
[AuxVariables]
[./layered_average]
order = CONSTANT
family = MONOMIAL
[../]
[]
[Kernels]
[./diff]
type = Diffusion
variable = u
[../]
[]
[AuxKernels]
[./layered_average]
type = SpatialUserObjectAux
variable = layered_average
execute_on = timestep_end
user_object = average
[../]
[]
[BCs]
[./top]
type = DirichletBC
variable = u
boundary = top
value = 1
[../]
[./bottom]
type = DirichletBC
variable = u
boundary = bottom
value = 0
[../]
[]
[UserObjects]
[./average]
type = LayeredAverage
variable = u
direction = y
[../]
[]
[Executioner]
type = Steady
solve_type = PJFNK
petsc_options_iname = '-pc_type -pc_hypre_type'
petsc_options_value = 'hypre boomeramg'
[]
[Outputs]
exodus = true
[]
(test/tests/transfers/multiapp_userobject_transfer/tosub_parent.i)
[Mesh]
type = GeneratedMesh
dim = 3
nx = 20
ny = 20
nz = 20
# The MultiAppUserObjectTransfer object only works with ReplicatedMesh
parallel_type = replicated
[]
[Variables]
[./u]
[../]
[]
[AuxVariables]
[./layered_average_value]
order = CONSTANT
family = MONOMIAL
[../]
[]
[Kernels]
[./diff]
type = Diffusion
variable = u
[../]
[]
[AuxKernels]
[./layered_aux]
type = SpatialUserObjectAux
variable = layered_average_value
execute_on = timestep_end
user_object = layered_average
[../]
[]
[BCs]
[./bottom]
type = DirichletBC
variable = u
boundary = bottom
value = 0
[../]
[./top]
type = DirichletBC
variable = u
boundary = top
value = 1
[../]
[]
[UserObjects]
[./layered_average]
type = LayeredAverage
variable = u
direction = y
num_layers = 4
[../]
[]
[Executioner]
type = Transient
num_steps = 1
dt = 1
solve_type = 'PJFNK'
petsc_options_iname = '-pc_type -pc_hypre_type'
petsc_options_value = 'hypre boomeramg'
[]
[Outputs]
exodus = true
[]
[MultiApps]
[./sub_app]
execute_on = timestep_end
positions = '0.3 0.1 0.3 0.7 0.1 0.3'
type = TransientMultiApp
input_files = tosub_sub.i
app_type = MooseTestApp
[../]
[]
[Transfers]
[./layered_transfer]
user_object = layered_average
variable = multi_layered_average
type = MultiAppUserObjectTransfer
to_multi_app = sub_app
skip_coordinate_collapsing = true
[../]
[./element_layered_transfer]
user_object = layered_average
variable = element_multi_layered_average
type = MultiAppUserObjectTransfer
to_multi_app = sub_app
skip_coordinate_collapsing = true
[../]
[]
(test/tests/transfers/general_field/user_object/regular/sub.i)
[Mesh]
type = GeneratedMesh
dim = 2
nx = 10
ny = 10
xmax = 0.2
ymax = 0.2
[]
[AuxVariables]
[from_main]
initial_condition = -1
[]
[from_main_elem]
order = CONSTANT
family = MONOMIAL
initial_condition = -1
[]
[to_main]
[InitialCondition]
type = FunctionIC
function = '3 + 2*x*x + 3*y*y*y'
[]
[]
[to_main_elem]
order = CONSTANT
family = MONOMIAL
[InitialCondition]
type = FunctionIC
function = '4 + 2*x*x + 3*y*y*y'
[]
[]
[]
[UserObjects]
[to_main]
type = LayeredAverage
direction = x
num_layers = 10
variable = to_main
[]
[to_main_elem]
type = LayeredAverage
direction = x
num_layers = 10
variable = to_main_elem
[]
[]
[Executioner]
type = Transient
num_steps = 1
[]
[Problem]
solve = false
[]
[Outputs]
[out]
type = Exodus
hide = 'to_main to_main_elem'
overwrite = true
[]
[]
(test/tests/transfers/multiapp_userobject_transfer/3d_1d_parent.i)
# This does a dummy diffusion solve in 3D space, then computes a layered average
# in the z direction. Those values are transferred into a sub-app that has 1D mesh
# in the z-direction (the mesh was displaced so that it is aligned in such a way).
# The sub-app also does a dummy diffusion solve and then computes layered average
# in the z-direction. Those value are transferred back to the parent app.
#
# Physically the 1D sub-app is placed in the center of the 3D mesh and is oriented
# in the z-direction. The bounding box of the sub-app is expanded such that it
# contains the 4 central elements of the 3D mesh (i.e. the values are transferred
# only into a part of parent mesh)
[Mesh]
type = GeneratedMesh
dim = 3
nx = 4
ny = 4
nz = 10
# The MultiAppUserObjectTransfer object only works with ReplicatedMesh
parallel_type = replicated
[]
[AuxVariables]
[./from_sub_app_var]
order = CONSTANT
family = MONOMIAL
[../]
[]
[UserObjects]
[main_uo]
type = LayeredAverage
direction = z
num_layers = 10
variable = u
[]
[]
[Variables]
[u]
[]
[]
[Kernels]
[diff]
type = Diffusion
variable = u
[]
[td]
type = TimeDerivative
variable = u
[]
[]
[BCs]
[left]
type = DirichletBC
variable = u
boundary = front
value = -1
[]
[right]
type = DirichletBC
variable = u
boundary = back
value = 1
[]
[]
[Executioner]
type = Transient
num_steps = 2
dt = 5
solve_type = 'NEWTON'
l_tol = 1e-8
nl_rel_tol = 1e-10
[]
[Outputs]
exodus = true
execute_on = final
[]
[MultiApps]
[sub_app]
positions = '0.5 0.5 0.0'
type = TransientMultiApp
input_files = 3d_1d_sub.i
app_type = MooseTestApp
bounding_box_padding = '0.25 0.25 0'
bounding_box_inflation = 0
use_displaced_mesh = true
execute_on = TIMESTEP_END
[]
[]
[Transfers]
[layered_transfer_to_sub_app]
type = MultiAppUserObjectTransfer
user_object = main_uo
variable = sub_app_var
to_multi_app = sub_app
displaced_target_mesh = true
[]
[layered_transfer_from_sub_app]
type = MultiAppUserObjectTransfer
user_object = sub_app_uo
variable = from_sub_app_var
from_multi_app = sub_app
displaced_source_mesh = true
[]
[]
(test/tests/transfers/general_field/user_object/between_siblings/sub_between_diffusion1.i)
[Mesh]
[gen]
type = GeneratedMeshGenerator
dim = 2
nx = 5
ny = 5
[]
[block1]
input = gen
type = SubdomainBoundingBoxGenerator
block_id = 1
bottom_left = '0 0 0'
top_right = '0.5 0.5 0'
[]
[]
[AuxVariables]
[sent_nodal]
[InitialCondition]
type = FunctionIC
function = '1 + 2*x*x + 3*y*y*y'
[]
[]
[received_nodal]
initial_condition = -1
[]
[sent_elem]
family = MONOMIAL
order = CONSTANT
[InitialCondition]
type = FunctionIC
function = '2 + 2*x*x + 3*y*y*y'
[]
[]
[received_elem]
family = MONOMIAL
order = CONSTANT
initial_condition = -1
[]
[]
[UserObjects]
[sent_nodal]
type = LayeredAverage
direction = x
num_layers = 10
variable = sent_nodal
[]
[sent_elem]
type = LayeredAverage
direction = x
num_layers = 10
variable = sent_elem
[]
[]
[Executioner]
type = Transient
num_steps = 1
[]
[Problem]
solve = false
[]
[Outputs]
exodus = true
hide = 'sent_nodal sent_elem'
execute_on = 'TIMESTEP_END'
[]
(modules/navier_stokes/test/tests/finite_volume/cns/pressure_outlet/subsonic_nozzle_fixed_inflow_hllc.i)
inlet_vel = 120
rho_in = 0.8719748696
H_in = 4.0138771448e+05
gamma = 1.4
R = 8.3145
molar_mass = 29e-3
R_specific = ${fparse R / molar_mass}
cp = ${fparse gamma * R_specific / (gamma - 1)}
cv = ${fparse cp / gamma}
T_in = ${fparse H_in / gamma / cv}
mass_flux = ${fparse inlet_vel * rho_in}
outlet_pressure = 0.9e5
[GlobalParams]
fp = fp
[]
[Debug]
show_material_props = true
[]
[Mesh]
[file]
type = FileMeshGenerator
file = subsonic_nozzle.e
[]
[]
[FluidProperties]
[fp]
type = IdealGasFluidProperties
[]
[]
[Variables]
[rho]
family = MONOMIAL
order = CONSTANT
fv = true
initial_condition = 0.8719748696
[]
[rho_u]
family = MONOMIAL
order = CONSTANT
fv = true
initial_condition = 1e-4
[]
[rho_v]
family = MONOMIAL
order = CONSTANT
fv = true
[]
[rho_E]
family = MONOMIAL
order = CONSTANT
fv = true
initial_condition = 2.5e5
[]
[]
[FVKernels]
# Mass conservation
[mass_time]
type = FVTimeKernel
variable = rho
[]
[mass_advection]
type = CNSFVMassHLLC
variable = rho
[]
# Momentum x conservation
[momentum_x_time]
type = FVTimeKernel
variable = rho_u
[]
[momentum_x_advection]
type = CNSFVMomentumHLLC
variable = rho_u
momentum_component = x
[]
# Momentum y conservation
[momentum_y_time]
type = FVTimeKernel
variable = rho_v
[]
[momentum_y_advection]
type = CNSFVMomentumHLLC
variable = rho_v
momentum_component = y
[]
# Fluid energy conservation
[fluid_energy_time]
type = FVTimeKernel
variable = rho_E
[]
[fluid_energy_advection]
type = CNSFVFluidEnergyHLLC
variable = rho_E
[]
[]
[FVBCs]
## inflow boundaries
[mass_inflow]
type = CNSFVHLLCSpecifiedMassFluxAndTemperatureMassBC
variable = rho
boundary = left
rhou = ${mass_flux}
rhov = 0
temperature = ${T_in}
[]
[momentum_x_inflow]
type = CNSFVHLLCSpecifiedMassFluxAndTemperatureMomentumBC
variable = rho_u
boundary = left
rhou = ${mass_flux}
rhov = 0
temperature = ${T_in}
momentum_component = x
[]
[momentum_y_inflow]
type = CNSFVHLLCSpecifiedMassFluxAndTemperatureMomentumBC
variable = rho_v
boundary = left
rhou = ${mass_flux}
rhov = 0
temperature = ${T_in}
momentum_component = y
[]
[fluid_energy_inflow]
type = CNSFVHLLCSpecifiedMassFluxAndTemperatureFluidEnergyBC
variable = rho_E
boundary = left
rhou = ${mass_flux}
rhov = 0
temperature = ${T_in}
[]
## outflow conditions
[mass_outflow]
type = CNSFVHLLCSpecifiedPressureMassBC
variable = rho
boundary = right
pressure = ${outlet_pressure}
[]
[momentum_x_outflow]
type = CNSFVHLLCSpecifiedPressureMomentumBC
variable = rho_u
boundary = right
momentum_component = x
pressure = ${outlet_pressure}
[]
[momentum_y_outflow]
type = CNSFVHLLCSpecifiedPressureMomentumBC
variable = rho_v
boundary = right
momentum_component = y
pressure = ${outlet_pressure}
[]
[fluid_energy_outflow]
type = CNSFVHLLCSpecifiedPressureFluidEnergyBC
variable = rho_E
boundary = right
pressure = ${outlet_pressure}
[]
# wall conditions
[momentum_x_pressure_wall]
type = CNSFVMomImplicitPressureBC
variable = rho_u
momentum_component = x
boundary = wall
[]
[momentum_y_pressure_wall]
type = CNSFVMomImplicitPressureBC
variable = rho_v
momentum_component = y
boundary = wall
[]
[]
[AuxVariables]
[Ma]
family = MONOMIAL
order = CONSTANT
[]
[p]
family = MONOMIAL
order = CONSTANT
[]
[Ma_layered]
family = MONOMIAL
order = CONSTANT
[]
[]
[UserObjects]
[layered_Ma_UO]
type = LayeredAverage
variable = Ma
num_layers = 10
direction = x
[]
[]
[AuxKernels]
[Ma_aux]
type = NSMachAux
variable = Ma
fluid_properties = fp
use_material_properties = true
[]
[p_aux]
type = ADMaterialRealAux
variable = p
property = pressure
[]
[Ma_layered_aux]
type = SpatialUserObjectAux
variable = Ma_layered
user_object = layered_Ma_UO
[]
[]
[Materials]
[var_mat]
type = ConservedVarValuesMaterial
rho = rho
rhou = rho_u
rhov = rho_v
rho_et = rho_E
[]
[sound_speed]
type = SoundspeedMat
[]
[]
[Postprocessors]
[outflow_Ma]
type = SideAverageValue
variable = Ma
boundary = right
[]
[outflow_pressure]
type = SideAverageValue
variable = p
boundary = right
[]
[]
[Preconditioning]
[smp]
type = SMP
full = true
petsc_options_iname = '-pc_type'
petsc_options_value = 'lu'
[]
[]
[Executioner]
type = Transient
end_time = 10
solve_type = NEWTON
nl_abs_tol = 1e-7
[TimeIntegrator]
type = ImplicitEuler
[]
[TimeStepper]
type = IterationAdaptiveDT
dt = 5e-3
optimal_iterations = 6
growth_factor = 1.5
[]
[]
[VectorPostprocessors]
[Ma_layered]
type = LineValueSampler
variable = Ma_layered
start_point = '0 0 0'
end_point = '3 0 0'
num_points = 100
sort_by = x
warn_discontinuous_face_values = false
[]
[]
[Outputs]
[out]
type = Exodus
execute_on = 'final'
[]
[]
(modules/thermal_hydraulics/test/tests/actions/coupled_heat_transfer_action/sub_2phase.i)
# This is the 2-phase version of sub.i: it just adds the variable 'kappa'.
# Unfortunately, multi-parameter application of cli_args is not supported for
# sub-app input files, so sub.i cannot be re-used for the test.
[GlobalParams]
initial_p = 1.e5
initial_vel = 0.
initial_T = 300.
closures = simple_closures
[]
[FluidProperties]
[eos]
type = StiffenedGasFluidProperties
gamma = 2.35
q = -1167e3
q_prime = 0
p_inf = 1.e9
cv = 1816
[]
[]
[Closures]
[simple_closures]
type = Closures1PhaseSimple
[]
[]
[AuxVariables]
[Hw]
family = monomial
order = constant
block = pipe1
[]
[kappa]
family = monomial
order = constant
block = pipe1
[]
[]
[AuxKernels]
[Hw_ak]
type = ADMaterialRealAux
variable = Hw
property = 'Hw'
[]
[kappa_ak]
type = ConstantAux
variable = kappa
value = 0.5
[]
[]
[UserObjects]
[T_uo]
type = LayeredAverage
direction = y
variable = T
num_layers = 10
block = pipe1
[]
[Hw_uo]
type = LayeredAverage
direction = y
variable = Hw
num_layers = 10
block = pipe1
[]
[kappa_uo]
type = LayeredAverage
direction = y
variable = kappa
num_layers = 10
block = pipe1
[]
[]
[Components]
[pipe1]
type = FlowChannel1Phase
position = '0 0 0'
orientation = '0 1 0'
length = 1
n_elems = 10
A = 1.28584e-01
D_h = 8.18592e-01
f = 0.01
fp = eos
[]
[hxconn]
type = HeatTransferFromExternalAppTemperature1Phase
flow_channel = pipe1
Hw = 10000
P_hf = 6.28319e-01
initial_T_wall = 300.
var_type = elemental
[]
[inlet]
type = InletMassFlowRateTemperature1Phase
input = 'pipe1:in'
m_dot = 10
T = 400
[]
[outlet]
type = Outlet1Phase
input = 'pipe1:out'
p = 1e5
[]
[]
[Preconditioning]
[pc]
type = SMP
full = true
[]
[]
[Postprocessors]
[T_wall_avg]
type = ElementAverageValue
variable = T_wall
execute_on = 'INITIAL TIMESTEP_END'
[]
[htc_avg]
type = ElementAverageValue
variable = Hw
execute_on = 'INITIAL TIMESTEP_END'
[]
[T_avg]
type = ElementAverageValue
variable = T
execute_on = 'INITIAL TIMESTEP_END'
[]
[]
[Executioner]
type = Transient
scheme = 'bdf2'
dt = 0.1
dtmin = 1e-7
abort_on_solve_fail = true
solve_type = 'NEWTON'
line_search = 'basic'
nl_rel_tol = 1e-7
nl_abs_tol = 1e-4
nl_max_its = 20
l_tol = 1e-3
l_max_its = 300
start_time = 0.0
petsc_options_iname = '-pc_type'
petsc_options_value = ' lu'
[]
[Outputs]
[out]
type = Exodus
show = 'T_wall T Hw'
[]
[]
(test/tests/transfers/multiapp_userobject_transfer/3d_1d_sub.i)
[Mesh]
type = GeneratedMesh
dim = 1
nx = 10
elem_type = EDGE2
displacements = 'disp_x disp_y disp_z'
[]
[Functions]
[./disp_x_fn]
type = ParsedFunction
expression = '-x'
[../]
[./disp_z_fn]
type = ParsedFunction
expression = 'x'
[../]
[]
[AuxVariables]
[./sub_app_var]
family = MONOMIAL
order = CONSTANT
[../]
[./disp_x]
[../]
[./disp_y]
[../]
[./disp_z]
[../]
[]
[AuxKernels]
[./disp_x_ak]
type = FunctionAux
variable = disp_x
function = 'disp_x_fn'
[../]
[./disp_y_ak]
type = ConstantAux
variable = disp_y
value = 0
[../]
[./disp_z_ak]
type = FunctionAux
variable = disp_z
function = 'disp_z_fn'
[../]
[]
[UserObjects]
[./sub_app_uo]
type = LayeredAverage
direction = z
variable = u
num_layers = 10
execute_on = TIMESTEP_END
use_displaced_mesh = true
[../]
[]
[Variables]
[./u]
[../]
[]
[Kernels]
[./td]
type = TimeDerivative
variable = u
[../]
[./diff]
type = Diffusion
variable = u
[../]
[]
[BCs]
[./left]
type = DirichletBC
variable = u
boundary = left
value = 1
[../]
[./right]
type = DirichletBC
variable = u
boundary = right
value = 2
[../]
[]
[Executioner]
type = Transient
solve_type = NEWTON
[]
[Outputs]
exodus = true
[]
(test/tests/userobjects/layered_average/layered_average_block.i)
#
# The mesh consists of two blocks. Block 1 is from y=0 to y=2, and
# block 2 is from y=3 to y=4. Elements are 0.25 high. The solution
# is u = 4y.
#
# Two sets of LayeredAverage values are computed. In both cases, four
# layers are used. In 'unrestricted', the layers span the entire mesh.
# In 'restricted', the layers cover only block 1.
#
# For 'unrestricted', the result is a value of 2 from 0<y<1 , a value
# of 6 from 1<y<2, and a value of 14 from 3<y<4.
#
# For 'restricted', the result is a value of 1 from 0<y<0.5, a value of
# 3 from 0.5<y<1, a value of 5 from 1<y<1.5, and a value of 7 for y>1.5.
#
[Mesh]
file = layered_average_block.e
[]
[Variables]
[./u]
[../]
[]
[AuxVariables]
[./restricted]
order = CONSTANT
family = MONOMIAL
[../]
[./unrestricted]
order = CONSTANT
family = MONOMIAL
[../]
[]
[Kernels]
[./diff]
type = Diffusion
variable = u
[../]
[]
[AuxKernels]
[./restricted]
type = SpatialUserObjectAux
variable = restricted
execute_on = timestep_end
user_object = restricted
[../]
[./unrestricted]
type = SpatialUserObjectAux
variable = unrestricted
execute_on = timestep_end
user_object = unrestricted
[../]
[]
[BCs]
[./ll]
type = DirichletBC
variable = u
boundary = 1
value = 0
[../]
[./lu]
type = DirichletBC
variable = u
boundary = 2
value = 8
[../]
[./ul]
type = DirichletBC
variable = u
boundary = 3
value = 12
[../]
[./uu]
type = DirichletBC
variable = u
boundary = 4
value = 16
[../]
[]
[UserObjects]
[./restricted]
type = LayeredAverage
direction = y
num_layers = 4
variable = u
execute_on = linear
block = 1
[../]
[./unrestricted]
type = LayeredAverage
direction = y
num_layers = 4
variable = u
execute_on = linear
[../]
[]
[Executioner]
type = Transient
dt = 1
end_time = 1
[]
[Outputs]
exodus = true
[]
(test/tests/transfers/multiapp_userobject_transfer/restricted_node_sub.i)
# yy is passed in from the parent app
[Mesh]
[line]
type = GeneratedMeshGenerator
dim = 1
nx = 5
xmax = 2.5
[]
[box]
type = SubdomainBoundingBoxGenerator
input = line
bottom_left = '0 -0.1 -0.1'
top_right = '1.5 0.1 0.1'
# need a different block ID than what is in the parent app to make sure the transfer works properly
block_id = 20
[]
[]
[AuxVariables]
[A]
[]
[S]
[]
[]
[AuxKernels]
[A_ak]
type = ParsedAux
variable = A
use_xyzt = true
expression = '2*x+4*${yy}'
execute_on = 'TIMESTEP_BEGIN'
[]
[]
[Variables]
[u]
[]
[]
[Kernels]
[td]
type = TimeDerivative
variable = u
[]
[diff]
type = Diffusion
variable = u
[]
[]
[UserObjects]
[A_avg]
type = LayeredAverage
block = 20
num_layers = 2
direction = x
variable = A
execute_on = TIMESTEP_END
[]
[]
[Executioner]
type = Transient
[]
[Outputs]
exodus = true
[]
(test/tests/transfers/general_field/user_object/subdomain/main.i)
# Base input for testing transfers. It has the following complexities:
# - more than one subapp
# - transfers both from and to the subapps
# - both nodal and elemental variables
# - subapp meshes are not aligned with the main app
# Tests derived from this input may add complexities through command line arguments
[Mesh]
[gmg]
type = GeneratedMeshGenerator
dim = 2
nx = 5
ny = 5
[]
[add_block]
type = ParsedSubdomainMeshGenerator
input = gmg
combinatorial_geometry = 'x < 0.6 & y < 0.5'
block_id = 1
[]
[]
[AuxVariables]
[from_sub]
initial_condition = -1
[]
[from_sub_elem]
order = CONSTANT
family = MONOMIAL
initial_condition = -1
[]
[to_sub]
[InitialCondition]
type = FunctionIC
function = '1 + 2*x*x + 3*y*y*y'
[]
[]
[to_sub_elem]
order = CONSTANT
family = MONOMIAL
[InitialCondition]
type = FunctionIC
function = '2 + 2*x*x + 3*y*y*y'
[]
[]
[]
[UserObjects]
[to_sub]
type = LayeredAverage
direction = x
num_layers = 10
variable = to_sub
[]
[to_sub_elem]
type = LayeredAverage
direction = x
num_layers = 10
variable = to_sub_elem
[]
[]
[Executioner]
type = Transient
num_steps = 1
[]
[Problem]
solve = false
[]
[Outputs]
[out]
type = Exodus
hide = 'to_sub to_sub_elem'
[]
execute_on = 'TIMESTEP_END'
[]
[MultiApps]
[sub]
# 1 on corner, one in the center and one close to a corner
# Offsets are added to make sure there are no equidistant nodes / transfer indetermination
positions = '0 0 0 0.41111 0.28111 0 0.7232323 0.12323 0'
type = TransientMultiApp
app_type = MooseTestApp
input_files = sub.i
execute_on = timestep_end
output_in_position = true
[]
[]
[Transfers]
[to_sub]
type = MultiAppGeneralFieldUserObjectTransfer
to_multi_app = sub
source_user_object = to_sub
variable = from_main
from_blocks = 1
to_blocks = 1
extrapolation_constant = -1
[]
[to_sub_elem]
type = MultiAppGeneralFieldUserObjectTransfer
to_multi_app = sub
source_user_object = to_sub_elem
variable = from_main_elem
from_blocks = 1
to_blocks = 1
extrapolation_constant = -1
[]
[from_sub]
type = MultiAppGeneralFieldUserObjectTransfer
from_multi_app = sub
source_user_object = to_main
variable = from_sub
from_blocks = 1
to_blocks = 1
extrapolation_constant = -1
[]
[from_sub_elem]
type = MultiAppGeneralFieldUserObjectTransfer
from_multi_app = sub
source_user_object = to_main_elem
variable = from_sub_elem
from_blocks = 1
to_blocks = 1
extrapolation_constant = -1
[]
[]
(test/tests/transfers/general_field/nearest_node/mesh_division/sub.i)
base_value = 3
[Mesh]
type = GeneratedMesh
dim = 2
nx = 5
ny = 5
xmin = -0.1
ymin = -0.1
xmax = 0.1
ymax = 0.1
[]
[MeshDivisions]
[middle_sub]
type = CartesianGridDivision
# this division excludes the boundary nodes. The
# peaks in to_main on the boundaries should not be transferred
bottom_left = '-0.021 -0.021 0'
top_right = '0.081 0.081 0'
nx = 2
ny = 2
nz = 1
[]
[]
[AuxVariables]
[from_main]
initial_condition = -1
[]
[from_main_elem]
order = CONSTANT
family = MONOMIAL
initial_condition = -1
[]
[to_main]
[InitialCondition]
type = FunctionIC
function = '${base_value} + 20*x + 300*y*y*y'
[]
[]
[to_main_elem]
order = CONSTANT
family = MONOMIAL
[InitialCondition]
type = FunctionIC
function = '${base_value} + 1 + 20*x + 300*y*y*y'
[]
[]
[]
[UserObjects]
[to_main]
type = LayeredAverage
direction = x
num_layers = 10
variable = to_main
[]
[to_main_elem]
type = LayeredAverage
direction = x
num_layers = 10
variable = to_main_elem
[]
[]
[Executioner]
type = Transient
num_steps = 1
[]
[Problem]
solve = false
[]
[Outputs]
[out]
type = Exodus
hide = 'to_main to_main_elem div'
overwrite = true
[]
[]
# For debugging purposes
[AuxVariables]
[div]
family = MONOMIAL
order = CONSTANT
[]
[]
[AuxKernels]
[mesh_div]
type = MeshDivisionAux
variable = div
mesh_division = 'middle_sub'
[]
[]
(modules/thermal_hydraulics/test/tests/actions/coupled_heat_transfer_action/sub.i)
# This is a part of T_wall_action test. See the master file for details.
[GlobalParams]
initial_p = 1.e5
initial_vel = 0.
initial_T = 300.
closures = simple_closures
[]
[FluidProperties]
[eos]
type = StiffenedGasFluidProperties
gamma = 2.35
q = -1167e3
q_prime = 0
p_inf = 1.e9
cv = 1816
[]
[]
[Closures]
[simple_closures]
type = Closures1PhaseSimple
[]
[]
[AuxVariables]
[Hw]
family = monomial
order = constant
block = pipe1
[]
[]
[AuxKernels]
[Hw_ak]
type = ADMaterialRealAux
variable = Hw
property = 'Hw'
[]
[]
[UserObjects]
[T_uo]
type = LayeredAverage
direction = y
variable = T
num_layers = 10
block = pipe1
[]
[Hw_uo]
type = LayeredAverage
direction = y
variable = Hw
num_layers = 10
block = pipe1
[]
[]
[Components]
[pipe1]
type = FlowChannel1Phase
position = '0 0 0'
orientation = '0 1 0'
length = 1
n_elems = 10
A = 1.28584e-01
D_h = 8.18592e-01
f = 0.01
fp = eos
[]
[hxconn]
type = HeatTransferFromExternalAppTemperature1Phase
flow_channel = pipe1
Hw = 10000
P_hf = 6.28319e-01
initial_T_wall = 300.
var_type = elemental
[]
[inlet]
type = InletMassFlowRateTemperature1Phase
input = 'pipe1:in'
m_dot = 10
T = 400
[]
[outlet]
type = Outlet1Phase
input = 'pipe1:out'
p = 1e5
[]
[]
[Preconditioning]
[pc]
type = SMP
full = true
[]
[]
[Postprocessors]
[T_wall_avg]
type = ElementAverageValue
variable = T_wall
execute_on = 'INITIAL TIMESTEP_END'
[]
[htc_avg]
type = ElementAverageValue
variable = Hw
execute_on = 'INITIAL TIMESTEP_END'
[]
[T_avg]
type = ElementAverageValue
variable = T
execute_on = 'INITIAL TIMESTEP_END'
[]
[]
[Executioner]
type = Transient
scheme = 'bdf2'
dt = 0.1
dtmin = 1e-7
abort_on_solve_fail = true
solve_type = 'NEWTON'
line_search = 'basic'
nl_rel_tol = 1e-7
nl_abs_tol = 1e-4
nl_max_its = 20
l_tol = 1e-3
l_max_its = 300
start_time = 0.0
petsc_options_iname = '-pc_type'
petsc_options_value = ' lu'
[]
[Outputs]
[out]
type = Exodus
show = 'T_wall T Hw'
[]
[]
(test/tests/transfers/general_field/user_object/duplicated_user_object_tests/two_pipe_sub.i)
[Mesh]
type = FileMesh
file = two_pipe.e
[]
[Problem]
kernel_coverage_check = false
[]
[Variables]
[u]
[]
[]
[AuxVariables]
[var]
order = CONSTANT
family = MONOMIAL
block = p1
[]
[]
[ICs]
[var]
type = FunctionIC
variable = var
function = setvar
block = p1
[]
[]
[Functions]
[setvar]
type = ParsedFunction
expression = '1 + z * z'
[]
[]
[UserObjects]
[sub_app_uo]
type = LayeredAverage
direction = z
variable = var
num_layers = 10
execute_on = TIMESTEP_END
block = p1
[]
[]
[Executioner]
type = Transient
[]
(test/tests/transfers/general_field/user_object/duplicated_user_object_tests/restricted_node_sub.i)
# yy is passed in from the parent app
[Mesh]
[line]
type = GeneratedMeshGenerator
dim = 1
nx = 5
xmax = 2.5
[]
[box]
type = SubdomainBoundingBoxGenerator
input = line
bottom_left = '0 -0.1 -0.1'
top_right = '1.5 0.1 0.1'
# need a different block ID than what is in the parent app to make sure the transfer works properly
block_id = 20
[]
[]
[AuxVariables]
[A]
[]
[S]
[]
[]
[AuxKernels]
[A_ak]
type = ParsedAux
variable = A
use_xyzt = true
expression = '2*x+4*${yy}'
execute_on = 'TIMESTEP_BEGIN'
[]
[]
[Variables]
[u]
[]
[]
[Kernels]
[td]
type = TimeDerivative
variable = u
[]
[diff]
type = Diffusion
variable = u
[]
[]
[UserObjects]
[A_avg]
type = LayeredAverage
block = 20
num_layers = 2
direction = x
variable = A
execute_on = TIMESTEP_END
[]
[]
[Executioner]
type = Transient
[]
[Outputs]
exodus = true
[]
(test/tests/transfers/multiapp_conservative_transfer/sub_userobject.i)
[Mesh]
type = GeneratedMesh
dim = 2
nx = 4
ny = 8
xmax = 0.1
ymax = 0.5
coord_type = rz
[]
[Variables]
[u]
initial_condition = 1
[]
[]
[AuxVariables]
[layered_average_value]
order = CONSTANT
family = MONOMIAL
[]
[]
[Postprocessors]
[from_postprocessor]
type = ElementIntegralVariablePostprocessor
variable = layered_average_value
[]
[]
[Functions]
[axial_force]
type = ParsedFunction
expression = 1000*y
[]
[]
[Kernels]
[diff]
type = Diffusion
variable = u
[]
[td]
type = TimeDerivative
variable = u
[]
[force]
type = BodyForce
variable = u
function = axial_force
[]
[]
[AuxKernels]
[layered_aux]
type = SpatialUserObjectAux
variable = layered_average_value
execute_on = 'nonlinear TIMESTEP_END'
user_object = layered_average
[]
[]
[BCs]
[right]
type = DirichletBC
variable = u
boundary = right
value = 1
[]
[]
[UserObjects]
[layered_average]
type = LayeredAverage
variable = u
direction = y
num_layers = 4
[]
[]
[Executioner]
type = Transient
num_steps = 1
dt = 0.001
solve_type = 'PJFNK'
petsc_options_iname = '-pc_type -pc_hypre_type'
petsc_options_value = 'hypre boomeramg'
[]
[Outputs]
exodus = true
[]
(test/tests/transfers/transfer_interpolation/parent.i)
[Mesh]
type = GeneratedMesh
dim = 2
nx = 10
ny = 10
# This test currently diffs when run in parallel with DistributedMesh enabled,
# most likely due to the fact that it uses some geometric search stuff.
# For more information, see #2121.
parallel_type = replicated
[]
[Variables]
[u]
[]
[]
[Kernels]
[diff]
type = Diffusion
variable = u
[]
[]
[BCs]
[left]
type = DirichletBC
variable = u
boundary = left
value = 0
[]
[right]
type = DirichletBC
variable = u
boundary = right
value = 1
[]
[]
[UserObjects]
[layered_average]
type = LayeredAverage
variable = u
direction = x
num_layers = 3
[]
[]
[Executioner]
type = Transient
num_steps = 1
dt = 1
nl_rel_tol = 1e-10
solve_type = 'PJFNK'
petsc_options_iname = '-pc_type -pc_hypre_type'
petsc_options_value = 'hypre boomeramg'
[]
[Outputs]
exodus = true
[]
[MultiApps]
[sub]
type = TransientMultiApp
app_type = MooseTestApp
execute_on = timestep_end
positions = '0 0 0'
input_files = sub.i
sub_cycling = true
interpolate_transfers = true
output_sub_cycles = true
[]
[]
[Transfers]
[nearest_node]
type = MultiAppNearestNodeTransfer
to_multi_app = sub
source_variable = u
variable = nearest_node
[]
[mesh_function]
type = MultiAppShapeEvaluationTransfer
to_multi_app = sub
source_variable = u
variable = mesh_function
[]
[user_object]
type = MultiAppUserObjectTransfer
to_multi_app = sub
variable = user_object
user_object = layered_average
[]
[interpolation]
type = MultiAppGeometricInterpolationTransfer
to_multi_app = sub
source_variable = u
variable = interpolation
[]
[]
(test/tests/transfers/multiapp_userobject_transfer/restricted_elem_sub.i)
# yy is passed in from the parent app
[Mesh]
[line]
type = GeneratedMeshGenerator
dim = 1
nx = 4
xmax = 2
[]
[box]
type = SubdomainBoundingBoxGenerator
input = line
bottom_left = '0 -0.1 -0.1'
top_right = '1 0.1 0.1'
# need a different block ID than what is in the parent app to make sure the transfer works properly
block_id = 20
[]
[]
[AuxVariables]
[A]
family = MONOMIAL
order = CONSTANT
[]
[S]
family = MONOMIAL
order = CONSTANT
[]
[]
[AuxKernels]
[A_ak]
type = ParsedAux
variable = A
use_xyzt = true
expression = '2*x+4*${yy}'
execute_on = 'TIMESTEP_BEGIN'
[]
[]
[Variables]
[u]
[]
[]
[Kernels]
[td]
type = TimeDerivative
variable = u
[]
[diff]
type = Diffusion
variable = u
[]
[]
[UserObjects]
[A_avg]
type = LayeredAverage
block = 20
num_layers = 2
direction = x
variable = A
execute_on = TIMESTEP_END
[]
[]
[Executioner]
type = Transient
[]
[Outputs]
exodus = true
[]
(modules/navier_stokes/test/tests/finite_volume/cns/stagnation_inlet/supersonic_nozzle_hllc.i)
stagnation_pressure = 1
stagnation_temperature = 1
[GlobalParams]
fp = fp
[]
[Debug]
show_material_props = true
[]
[Mesh]
[file]
type = FileMeshGenerator
file = supersonic_nozzle.e
[]
[]
[FluidProperties]
[fp]
type = IdealGasFluidProperties
[]
[]
[Variables]
[rho]
family = MONOMIAL
order = CONSTANT
fv = true
initial_condition = 0.0034
[]
[rho_u]
family = MONOMIAL
order = CONSTANT
fv = true
initial_condition = 1e-4
outputs = none
[]
[rho_v]
family = MONOMIAL
order = CONSTANT
fv = true
outputs = none
[]
[rho_E]
family = MONOMIAL
order = CONSTANT
fv = true
initial_condition = 2.5
[]
[]
[FVKernels]
# Mass conservation
[mass_time]
type = FVTimeKernel
variable = rho
[]
[mass_advection]
type = CNSFVMassHLLC
variable = rho
[]
# Momentum x conservation
[momentum_x_time]
type = FVTimeKernel
variable = rho_u
[]
[momentum_x_advection]
type = CNSFVMomentumHLLC
variable = rho_u
momentum_component = x
[]
# Momentum y conservation
[momentum_y_time]
type = FVTimeKernel
variable = rho_v
[]
[momentum_y_advection]
type = CNSFVMomentumHLLC
variable = rho_v
momentum_component = y
[]
# Fluid energy conservation
[fluid_energy_time]
type = FVTimeKernel
variable = rho_E
[]
[fluid_energy_advection]
type = CNSFVFluidEnergyHLLC
variable = rho_E
[]
[]
[FVBCs]
## inflow stagnation boundaries
[mass_stagnation_inflow]
type = CNSFVHLLCMassStagnationInletBC
variable = rho
stagnation_pressure = ${stagnation_pressure}
stagnation_temperature = ${stagnation_temperature}
boundary = left
[]
[momentum_x_stagnation_inflow]
type = CNSFVHLLCMomentumStagnationInletBC
variable = rho_u
momentum_component = x
stagnation_pressure = ${stagnation_pressure}
stagnation_temperature = ${stagnation_temperature}
boundary = left
[]
[momentum_y_stagnation_inflow]
type = CNSFVHLLCMomentumStagnationInletBC
variable = rho_v
momentum_component = y
stagnation_pressure = ${stagnation_pressure}
stagnation_temperature = ${stagnation_temperature}
boundary = left
[../]
[fluid_energy_stagnation_inflow]
type = CNSFVHLLCFluidEnergyStagnationInletBC
variable = rho_E
stagnation_pressure = ${stagnation_pressure}
stagnation_temperature = ${stagnation_temperature}
boundary = left
[]
## outflow implicit conditions
[mass_outflow]
type = CNSFVHLLCMassImplicitBC
variable = rho
boundary = right
[]
[momentum_x_outflow]
type = CNSFVHLLCMomentumImplicitBC
variable = rho_u
momentum_component = x
boundary = right
[]
[momentum_y_outflow]
type = CNSFVHLLCMomentumImplicitBC
variable = rho_v
momentum_component = y
boundary = right
[]
[fluid_energy_outflow]
type = CNSFVHLLCFluidEnergyImplicitBC
variable = rho_E
boundary = right
[]
# wall conditions
[momentum_x_pressure_wall]
type = CNSFVMomImplicitPressureBC
variable = rho_u
momentum_component = x
boundary = wall
[]
[momentum_y_pressure_wall]
type = CNSFVMomImplicitPressureBC
variable = rho_v
momentum_component = y
boundary = wall
[]
[]
[AuxVariables]
[Ma]
family = MONOMIAL
order = CONSTANT
[]
[Ma_layered]
family = MONOMIAL
order = CONSTANT
[]
[]
[UserObjects]
[layered_Ma_UO]
type = LayeredAverage
variable = Ma
num_layers = 100
direction = x
[]
[]
[AuxKernels]
[Ma_aux]
type = NSMachAux
variable = Ma
fluid_properties = fp
use_material_properties = true
[]
[Ma_layered_aux]
type = SpatialUserObjectAux
variable = Ma_layered
user_object = layered_Ma_UO
[]
[]
[Materials]
[var_mat]
type = ConservedVarValuesMaterial
rho = rho
rhou = rho_u
rhov = rho_v
rho_et = rho_E
[]
[fluid_props]
type = GeneralFluidProps
porosity = 1
characteristic_length = 1
[]
[sound_speed]
type = SoundspeedMat
fp = fp
[]
[]
[Postprocessors]
[cfl_dt]
type = ADCFLTimeStepSize
c_names = 'sound_speed'
vel_names = 'speed'
CFL = 0.5
[]
[outflow_Ma]
type = SideAverageValue
variable = Ma
boundary = right
[]
[]
[Preconditioning]
[smp]
type = SMP
full = true
petsc_options_iname = '-pc_type'
petsc_options_value = 'lu'
[]
[]
[Executioner]
type = Transient
end_time = 0.1
[TimeIntegrator]
type = ExplicitSSPRungeKutta
order = 2
[]
l_tol = 1e-8
[TimeStepper]
type = PostprocessorDT
postprocessor = cfl_dt
[]
[]
[VectorPostprocessors]
[Ma_layered]
type = LineValueSampler
variable = Ma_layered
start_point = '0 0 0'
end_point = '10 0 0'
num_points = 100
sort_by = x
[]
[]
[Outputs]
exodus = true
[]
(test/tests/transfers/general_field/user_object/between_siblings/sub_between_diffusion2.i)
[Mesh]
[gen]
type = GeneratedMeshGenerator
dim = 2
nx = 3
ny = 3
# partial overlap but also, no equidistant points
xmin = 0.1111
ymin = 0.3333
xmax = 1.211111
ymax = 1.222222
[]
[block1]
input = gen
type = SubdomainBoundingBoxGenerator
block_id = 1
bottom_left = '0.4 0.6 0'
# extends beyond to grab the boundary
top_right = '2 2 0'
[]
[]
[AuxVariables]
[sent_nodal]
[InitialCondition]
type = FunctionIC
function = '3 + 2*x*x + 3*y*y*y'
[]
[]
[received_nodal]
initial_condition = -1
[]
[sent_elem]
family = MONOMIAL
order = CONSTANT
[InitialCondition]
type = FunctionIC
function = '4 + 2*x*x + 3*y*y*y'
[]
[]
[received_elem]
family = MONOMIAL
order = CONSTANT
initial_condition = -1
[]
[]
[UserObjects]
[sent_nodal]
type = LayeredAverage
direction = x
num_layers = 10
variable = sent_nodal
[]
[sent_elem]
type = LayeredAverage
direction = x
num_layers = 10
variable = sent_elem
[]
[]
[Executioner]
type = Transient
num_steps = 1
[]
[Problem]
solve = false
[]
[Outputs]
exodus = true
hide = 'sent_nodal sent_elem'
execute_on = 'TIMESTEP_END'
[]
(test/tests/userobjects/layered_average/block_restricted.i)
[Mesh]
[gen]
type = GeneratedMeshGenerator
nx = 10
ny = 10
dim = 2
[]
[middle]
input = gen
type = SubdomainBoundingBoxGenerator
block_id = 1
top_right = '0.6 0.6 0'
bottom_left = '0.4 0.4 0'
[]
[]
[Variables]
[u]
[]
[]
[AuxVariables]
[master_app_var]
order = CONSTANT
family = MONOMIAL
block = '1'
[]
[]
[AuxKernels]
[layered_aux]
type = SpatialUserObjectAux
variable = master_app_var
execute_on = 'timestep_end'
user_object = main_uo
block = '1'
[]
[]
[UserObjects]
[main_uo]
type = LayeredAverage
direction = x
variable = 'u'
block = '1'
# Note: 'bounds' or 'num_layers' are provided as CLI args
[]
[]
[Kernels]
[diff]
type = Diffusion
variable = u
[]
[]
[BCs]
[left]
type = DirichletBC
variable = u
boundary = 'left'
value = 0
[]
[right]
type = DirichletBC
variable = u
boundary = 'right'
value = 100
[]
[]
[Executioner]
type = Transient
nl_abs_tol = 1e-10
nl_rel_tol = 1e-10
petsc_options_iname = '-pc_type -pc_hypre_type'
num_steps = 1
petsc_options_value = 'hypre boomeramg'
l_tol = 1e-8
[]
[Postprocessors]
[u_avg]
type = ElementAverageValue
variable = 'u'
execute_on = 'initial timestep_end'
[]
[final_avg]
type = ElementAverageValue
variable = 'master_app_var'
execute_on = 'initial timestep_end'
block = '1'
[]
[]
[Outputs]
exodus = true
[]
(test/tests/transfers/multiapp_high_order_variable_transfer/parent_L2_Lagrange_userobject.i)
[Mesh]
type = GeneratedMesh
dim = 2
nx = 20
ny = 20
parallel_type = replicated
[]
[Variables]
[power_density]
family = L2_LAGRANGE
order = FIRST
[]
[]
[AuxVariables]
[./multi_layered_average]
family = LAGRANGE
order = FIRST
[../]
[]
[UserObjects]
[./multi_layered_average]
type = LayeredAverage
variable = power_density
direction = y
num_layers = 4
[../]
[]
[AuxKernels]
[./layered_aux]
type = SpatialUserObjectAux
variable = multi_layered_average
execute_on = 'nonlinear TIMESTEP_END'
user_object = multi_layered_average
[../]
[]
[Functions]
[pwr_func]
type = ParsedFunction
expression = '1e3*x*(1-x)+5e2'
[]
[]
[Kernels]
[diff]
type = Reaction
variable = power_density
[]
[coupledforce]
type = BodyForce
variable = power_density
function = pwr_func
[]
[]
[Postprocessors]
[layered_avg]
type = ElementAverageValue
block = '0'
variable = multi_layered_average
execute_on = 'initial timestep_end'
[]
[]
[Executioner]
type = Steady
petsc_options_iname = '-pc_type -pc_hypre_type -ksp_gmres_restart '
petsc_options_value = 'hypre boomeramg 100'
nl_abs_tol = 1e-8
nl_rel_tol = 1e-12
[]
[MultiApps]
[sub]
type = FullSolveMultiApp
app_type = MooseTestApp
positions = '0 0 0'
input_files = sub_L2_Lagrange.i
execute_on = 'timestep_end'
[]
[]
[Transfers]
[p_to_sub]
type = MultiAppUserObjectTransfer
user_object = multi_layered_average
variable = power_density
to_multi_app = sub
execute_on = 'timestep_end'
[]
[]
[Outputs]
exodus = true
perf_graph = true
[]
(test/tests/transfers/general_field/user_object/nearest_position/sub.i)
[Mesh]
type = GeneratedMesh
dim = 2
nx = 10
ny = 10
xmax = 0.2
ymax = 0.2
[]
[AuxVariables]
[from_main]
initial_condition = -1
[]
[from_main_elem]
order = CONSTANT
family = MONOMIAL
initial_condition = -1
[]
[to_main]
[InitialCondition]
type = FunctionIC
function = '3 + 2*x*x + 3*y*y*y'
[]
[]
[to_main_elem]
order = CONSTANT
family = MONOMIAL
[InitialCondition]
type = FunctionIC
function = '4 + 2*x*x + 3*y*y*y'
[]
[]
[]
[UserObjects]
[to_main]
type = LayeredAverage
direction = x
num_layers = 10
variable = to_main
[]
[to_main_elem]
type = LayeredAverage
direction = x
num_layers = 10
variable = to_main_elem
[]
[]
[Executioner]
type = Transient
num_steps = 1
[]
[Problem]
solve = false
[]
[Outputs]
[out]
type = Exodus
hide = 'to_main to_main_elem'
overwrite = true
[]
[]
(test/tests/transfers/multiapp_userobject_transfer/sub.i)
[Mesh]
type = GeneratedMesh
dim = 2
nx = 4
ny = 8
xmax = 0.1
ymax = 0.5
coord_type = rz
[]
[Variables]
[./u]
initial_condition = 1
[../]
[]
[AuxVariables]
[./layered_average_value]
order = CONSTANT
family = MONOMIAL
[../]
[]
[Functions]
[./axial_force]
type = ParsedFunction
expression = 1000*y
[../]
[]
[Kernels]
[./diff]
type = Diffusion
variable = u
[../]
[./td]
type = TimeDerivative
variable = u
[../]
[./force]
type = BodyForce
variable = u
function = axial_force
[../]
[]
[AuxKernels]
[./layered_aux]
type = SpatialUserObjectAux
variable = layered_average_value
execute_on = timestep_end
user_object = layered_average
[../]
[]
[BCs]
[./right]
type = DirichletBC
variable = u
boundary = right
value = 1
[../]
[]
[UserObjects]
[./layered_average]
type = LayeredAverage
variable = u
direction = y
num_layers = 4
[../]
[]
[Executioner]
type = Transient
num_steps = 1
dt = 0.001
solve_type = 'PJFNK'
petsc_options_iname = '-pc_type -pc_hypre_type'
petsc_options_value = 'hypre boomeramg'
[]
[Outputs]
exodus = true
[]
[Problem]
type = FEProblem
[]
(test/tests/transfers/general_field/user_object/duplicated_user_object_tests/sub.i)
[Mesh]
type = GeneratedMesh
dim = 2
nx = 4
ny = 8
xmax = 0.1
ymax = 0.5
coord_type = rz
[]
[Variables]
[u]
initial_condition = 1
[]
[]
[AuxVariables]
[layered_average_value]
order = CONSTANT
family = MONOMIAL
[]
[]
[Functions]
[axial_force]
type = ParsedFunction
expression = 1000*y
[]
[]
[Kernels]
[diff]
type = Diffusion
variable = u
[]
[td]
type = TimeDerivative
variable = u
[]
[force]
type = BodyForce
variable = u
function = axial_force
[]
[]
[AuxKernels]
[layered_aux]
type = SpatialUserObjectAux
variable = layered_average_value
execute_on = timestep_end
user_object = layered_average
[]
[]
[BCs]
[right]
type = DirichletBC
variable = u
boundary = right
value = 1
[]
[]
[UserObjects]
[layered_average]
type = LayeredAverage
variable = u
direction = y
num_layers = 4
[]
[]
[Executioner]
type = Transient
num_steps = 1
dt = 0.001
solve_type = 'PJFNK'
petsc_options_iname = '-pc_type -pc_hypre_type'
petsc_options_value = 'hypre boomeramg'
[]
[Outputs]
exodus = true
[]
(test/tests/transfers/general_field/shape_evaluation/mesh_division/sub.i)
base_value = 3
[Mesh]
type = GeneratedMesh
dim = 2
nx = 5
ny = 5
[]
[MeshDivisions]
[middle_sub]
type = CartesianGridDivision
# excludes the nodes on the left boundary
bottom_left = '0.0008 0.20001 0'
top_right = '0.6001 1 0'
nx = 4
ny = 4
nz = 1
[]
[]
[AuxVariables]
[from_main]
initial_condition = -1
[]
[from_main_elem]
order = CONSTANT
family = MONOMIAL
initial_condition = -1
[]
[to_main]
[InitialCondition]
type = FunctionIC
function = '${base_value} + 2*x*x + 3*y*y*y'
[]
[]
[to_main_elem]
order = CONSTANT
family = MONOMIAL
[InitialCondition]
type = FunctionIC
function = '${base_value} + 1 + 2*x*x + 3*y*y*y'
[]
[]
[]
[UserObjects]
[to_main]
type = LayeredAverage
direction = x
num_layers = 10
variable = to_main
[]
[to_main_elem]
type = LayeredAverage
direction = x
num_layers = 10
variable = to_main_elem
[]
[]
[Executioner]
type = Transient
num_steps = 1
[]
[Problem]
solve = false
[]
[Outputs]
[out]
type = Exodus
hide = 'to_main to_main_elem div'
overwrite = true
[]
[]
# For debugging purposes
[AuxVariables]
[div]
family = MONOMIAL
order = CONSTANT
[]
[]
[AuxKernels]
[mesh_div]
type = MeshDivisionAux
variable = div
mesh_division = 'middle_sub'
[]
[]
(test/tests/userobjects/layered_average/layered_average_1d_displaced.i)
# This tests that Layered user objects work with displaced meshes. Originally,
# the mesh is aligned with x-axis. Then we displace the mesh to be aligned with
# z-axis and sample along the z-direction.
[Mesh]
type = GeneratedMesh
dim = 1
nx = 5
elem_type = EDGE2
displacements = 'disp_x disp_y disp_z'
[]
[Functions]
[./left_fn]
type = ParsedFunction
expression = 't + 1'
[../]
[./disp_x_fn]
type = ParsedFunction
expression = '-x'
[../]
[./disp_z_fn]
type = ParsedFunction
expression = 'x'
[../]
[]
[AuxVariables]
[./la]
family = MONOMIAL
order = CONSTANT
[../]
[./disp_x]
[../]
[./disp_y]
[../]
[./disp_z]
[../]
[]
[AuxKernels]
[./la_ak]
type = SpatialUserObjectAux
variable = la
user_object = la_uo
execute_on = TIMESTEP_END
use_displaced_mesh = true
[../]
[./disp_x_ak]
type = FunctionAux
variable = disp_x
function = 'disp_x_fn'
[../]
[./disp_y_ak]
type = ConstantAux
variable = disp_y
value = 0
[../]
[./disp_z_ak]
type = FunctionAux
variable = disp_z
function = 'disp_z_fn'
[../]
[]
[UserObjects]
[./la_uo]
type = LayeredAverage
direction = z
variable = u
num_layers = 5
execute_on = TIMESTEP_END
use_displaced_mesh = true
[../]
[]
[Variables]
[./u]
[../]
[]
[Kernels]
[./td]
type = TimeDerivative
variable = u
[../]
[./diff]
type = Diffusion
variable = u
[../]
[]
[BCs]
[./left]
type = FunctionDirichletBC
variable = u
boundary = left
function = left_fn
[../]
[./right]
type = DirichletBC
variable = u
boundary = right
value = 0
[../]
[]
[Executioner]
type = Transient
dt = 1
num_steps = 2
solve_type = NEWTON
[]
[Outputs]
exodus = true
[]
(test/tests/transfers/coord_transform/both-transformed/user_object/sub-app.i)
[Mesh]
type = GeneratedMesh
dim = 2
xmin = -1
xmax = 0
ymin = 0
ymax = 1
nx = 10
ny = 10
alpha_rotation = 90
[]
[Variables]
[v][]
[]
[AuxVariables]
[sub_app_var][]
[sub_app_var_elem]
order = CONSTANT
family = MONOMIAL
[]
[check][]
[]
[AuxKernels]
[uo]
type = SpatialUserObjectAux
variable = check
user_object = 'sub_app_uo'
[][]
[UserObjects]
[sub_app_uo]
type = LayeredAverage
direction = y
variable = v
num_layers = 5
execute_on = TIMESTEP_END
use_displaced_mesh = true
[]
[]
[Kernels]
[diff_v]
type = Diffusion
variable = v
[]
[]
[BCs]
[left_v]
type = DirichletBC
variable = v
boundary = bottom
value = 0
[]
[right_v]
type = DirichletBC
variable = v
boundary = top
value = 1
[]
[]
[Executioner]
type = Steady
solve_type = 'NEWTON'
petsc_options_iname = '-pc_type -pc_hypre_type'
petsc_options_value = 'hypre boomeramg'
[]
[Outputs]
exodus = true
[]
(test/tests/transfers/general_field/user_object/regular/main.i)
# Base input for testing transfers. It has the following complexities:
# - more than one subapp
# - transfers both from and to the subapps
# - both nodal and elemental variables
# Tests derived from this input may add complexities through command line arguments
[Mesh]
type = GeneratedMesh
dim = 2
nx = 10
ny = 10
[]
[AuxVariables]
[from_sub]
initial_condition = -1
[]
[from_sub_elem]
order = CONSTANT
family = MONOMIAL
initial_condition = -1
[]
[to_sub]
[InitialCondition]
type = FunctionIC
function = '1 + 2*x*x + 3*y*y*y'
[]
[]
[to_sub_elem]
order = CONSTANT
family = MONOMIAL
[InitialCondition]
type = FunctionIC
function = '2 + 2*x*x + 3*y*y*y'
[]
[]
[]
[UserObjects]
[to_sub]
type = LayeredAverage
direction = x
num_layers = 10
variable = to_sub
[]
[to_sub_elem]
type = LayeredAverage
direction = x
num_layers = 10
variable = to_sub_elem
[]
[]
[Executioner]
type = Steady
[]
[Problem]
solve = false
[]
[Outputs]
[out]
type = Exodus
hide = 'to_sub to_sub_elem'
overwrite = true
[]
[]
[MultiApps]
[sub]
# 1 on corner, one in the center and one close to a corner
positions = '0 0 0 0.4 0.4 0 0.7 0.1 0'
type = FullSolveMultiApp
app_type = MooseTestApp
input_files = sub.i
output_in_position = true
[]
[]
[Transfers]
[to_sub]
type = MultiAppGeneralFieldUserObjectTransfer
to_multi_app = sub
source_user_object = to_sub
variable = from_main
extrapolation_constant = -1
[]
[to_sub_elem]
type = MultiAppGeneralFieldUserObjectTransfer
to_multi_app = sub
source_user_object = to_sub_elem
variable = from_main_elem
extrapolation_constant = -1
[]
[from_sub]
type = MultiAppGeneralFieldUserObjectTransfer
from_multi_app = sub
source_user_object = to_main
variable = from_sub
extrapolation_constant = -1
[]
[from_sub_elem]
type = MultiAppGeneralFieldUserObjectTransfer
from_multi_app = sub
source_user_object = to_main_elem
variable = from_sub_elem
extrapolation_constant = -1
[]
[]
(test/tests/transfers/general_field/user_object/duplicated_user_object_tests/3d_1d_sub.i)
[Mesh]
type = GeneratedMesh
dim = 1
nx = 10
elem_type = EDGE2
displacements = 'disp_x disp_y disp_z'
[]
[Functions]
[disp_x_fn]
type = ParsedFunction
expression = '-x'
[]
[disp_z_fn]
type = ParsedFunction
expression = 'x'
[]
[]
[AuxVariables]
[sub_app_var]
family = MONOMIAL
order = CONSTANT
[]
[disp_x]
[]
[disp_y]
[]
[disp_z]
[]
[]
[AuxKernels]
[disp_x_ak]
type = FunctionAux
variable = disp_x
function = 'disp_x_fn'
[]
[disp_y_ak]
type = ConstantAux
variable = disp_y
value = 0
[]
[disp_z_ak]
type = FunctionAux
variable = disp_z
function = 'disp_z_fn'
[]
[]
[UserObjects]
[sub_app_uo]
type = LayeredAverage
direction = z
variable = u
num_layers = 10
execute_on = TIMESTEP_END
use_displaced_mesh = true
[]
[]
[Variables]
[u]
[]
[]
[Kernels]
[td]
type = TimeDerivative
variable = u
[]
[diff]
type = Diffusion
variable = u
[]
[]
[BCs]
[left]
type = DirichletBC
variable = u
boundary = left
value = 1
[]
[right]
type = DirichletBC
variable = u
boundary = right
value = 2
[]
[]
[Executioner]
type = Transient
solve_type = NEWTON
[]
[Outputs]
exodus = true
[]
(modules/thermal_hydraulics/test/tests/components/heat_transfer_from_external_app_1phase/phy.T_wall_transfer_elem_3eqn.parent.i)
# This tests a temperature transfer using the MultiApp system. Simple heat
# conduction problem is solved, then the layered average is computed and
# transferred into the child side of the solve
[Mesh]
type = GeneratedMesh
dim = 1
xmax = 1
nx = 10
parallel_type = replicated
[]
[Functions]
[left_bc_fn]
type = PiecewiseLinear
x = '0 1'
y = '300 310'
[]
[]
[Variables]
[T]
[]
[]
[ICs]
[T_ic]
type = ConstantIC
variable = T
value = 300
[]
[]
[Kernels]
[td]
type = TimeDerivative
variable = T
[]
[diff]
type = Diffusion
variable = T
[]
[]
[BCs]
[left]
type = FunctionDirichletBC
variable = T
boundary = left
function = left_bc_fn
[]
[]
[UserObjects]
[T_avg_uo]
type = LayeredAverage
variable = T
direction = x
num_layers = 5
[]
[]
[Executioner]
type = Transient
dt = 0.5
end_time = 5
nl_abs_tol = 1e-10
abort_on_solve_fail = true
[]
[MultiApps]
[thm]
type = TransientMultiApp
app_type = ThermalHydraulicsApp
input_files = phy.T_wall_transfer_elem_3eqn.child.i
execute_on = TIMESTEP_END
[]
[]
[Transfers]
[T_to_child]
type = MultiAppGeneralFieldUserObjectTransfer
to_multi_app = thm
source_user_object = T_avg_uo
variable = T_wall
greedy_search = true
use_bounding_boxes = false
error_on_miss = true
[]
[]
[Outputs]
exodus = true
[]
(test/tests/userobjects/layered_average/layered_average_interpolate.i)
[Mesh]
type = GeneratedMesh
dim = 2
nx = 10
ny = 10
[]
[Variables]
[./u]
[../]
[]
[AuxVariables]
[./layered_average]
order = CONSTANT
family = MONOMIAL
[../]
[./nodal_layered_average]
[../]
[]
[Kernels]
[./diff]
type = Diffusion
variable = u
[../]
[]
[AuxKernels]
[./layered_average]
type = SpatialUserObjectAux
variable = layered_average
execute_on = timestep_end
user_object = average
[../]
[./nodal_layered_average]
type = SpatialUserObjectAux
variable = nodal_layered_average
execute_on = timestep_end
user_object = average
[../]
[]
[BCs]
[./top]
type = DirichletBC
variable = u
boundary = top
value = 1
[../]
[./bottom]
type = DirichletBC
variable = u
boundary = bottom
value = 0
[../]
[]
[UserObjects]
[./average]
type = LayeredAverage
variable = u
direction = y
num_layers = 19
[../]
[]
[Executioner]
type = Steady
solve_type = 'PJFNK'
petsc_options_iname = '-pc_type -pc_hypre_type'
petsc_options_value = 'hypre boomeramg'
[]
[Outputs]
exodus = true
[]
(test/tests/transfers/coord_transform/both-transformed/user_object/main-app.i)
[Mesh]
type = GeneratedMesh
dim = 2
xmin = 0
xmax = 1
ymin = -1
ymax = 0
nx = 10
ny = 10
# Quarter turn around Z axis
alpha_rotation = -90
# Flips around Y axis
# beta_rotation = -180
[]
[Variables]
[u][]
[]
[AuxVariables]
[from_sub_app_var][]
[from_sub_app_var_elem]
order = CONSTANT
family = MONOMIAL
[]
[]
[Kernels]
[diff]
type = Diffusion
variable = u
[]
[force]
type = CoupledForce
variable = u
v = from_sub_app_var
[]
[]
[BCs]
[left]
type = DirichletBC
variable = u
boundary = left
value = 0
[]
[right]
type = DirichletBC
variable = u
boundary = right
value = 1
[]
[]
[Executioner]
type = Steady
solve_type = 'NEWTON'
petsc_options_iname = '-pc_type -pc_hypre_type'
petsc_options_value = 'hypre boomeramg'
verbose = true
[]
[Outputs]
exodus = true
[]
[UserObjects]
[main_uo]
type = LayeredAverage
direction = x
num_layers = 5
variable = u
[]
[]
[MultiApps]
[sub_app]
# Shift is offset by sub-app mesh + rotations
# positions = '1 0 0.0'
type = FullSolveMultiApp
input_files = sub-app.i
app_type = MooseTestApp
bounding_box_padding = '0.25 0.25 0'
bounding_box_inflation = 0
use_displaced_mesh = true
execute_on = TIMESTEP_END
[]
[]
[Transfers]
[layered_transfer_to_sub_app]
type = MultiAppUserObjectTransfer
user_object = main_uo
variable = sub_app_var
to_multi_app = sub_app
displaced_target_mesh = true
[]
[layered_transfer_to_sub_app_elem]
type = MultiAppUserObjectTransfer
user_object = main_uo
variable = sub_app_var_elem
to_multi_app = sub_app
displaced_target_mesh = true
[]
[layered_transfer_from_sub_app]
type = MultiAppUserObjectTransfer
user_object = sub_app_uo
variable = from_sub_app_var
from_multi_app = sub_app
# displaced_source_mesh = true
[]
[layered_transfer_from_sub_app_elem]
type = MultiAppUserObjectTransfer
user_object = sub_app_uo
variable = from_sub_app_var_elem
from_multi_app = sub_app
# displaced_source_mesh = true
[]
[]
(test/tests/transfers/multiapp_userobject_transfer/tosub_displaced_parent.i)
[Mesh]
type = GeneratedMesh
dim = 3
nx = 20
ny = 20
nz = 20
# The MultiAppUserObjectTransfer object only works with ReplicatedMesh
parallel_type = replicated
[]
[Variables]
[./u]
[../]
[]
[AuxVariables]
[./layered_average_value]
order = CONSTANT
family = MONOMIAL
[../]
[]
[Kernels]
[./diff]
type = Diffusion
variable = u
[../]
[]
[AuxKernels]
[./layered_aux]
type = SpatialUserObjectAux
variable = layered_average_value
execute_on = timestep_end
user_object = layered_average
[../]
[]
[BCs]
[./bottom]
type = DirichletBC
variable = u
boundary = bottom
value = 0
[../]
[./top]
type = DirichletBC
variable = u
boundary = top
value = 1
[../]
[]
[UserObjects]
[./layered_average]
type = LayeredAverage
variable = u
direction = y
num_layers = 4
[../]
[]
[Executioner]
type = Transient
num_steps = 1
dt = 1
solve_type = 'PJFNK'
petsc_options_iname = '-pc_type -pc_hypre_type'
petsc_options_value = 'hypre boomeramg'
[]
[Outputs]
exodus = true
[]
[MultiApps]
[./sub_app]
execute_on = timestep_end
positions = '0 0 0'
type = TransientMultiApp
input_files = tosub_displaced_sub.i
app_type = MooseTestApp
[../]
[]
[Transfers]
[./layered_transfer]
user_object = layered_average
variable = multi_layered_average
type = MultiAppUserObjectTransfer
to_multi_app = sub_app
displaced_target_mesh = true
skip_coordinate_collapsing = true
[../]
[./element_layered_transfer]
user_object = layered_average
variable = element_multi_layered_average
type = MultiAppUserObjectTransfer
to_multi_app = sub_app
displaced_target_mesh = true
skip_coordinate_collapsing = true
[../]
[]
(test/tests/userobjects/layered_average/layered_average.i)
[Mesh]
type = GeneratedMesh
dim = 2
nx = 10
ny = 10
[]
[Variables]
[./u]
[../]
[]
[AuxVariables]
[./layered_average]
order = CONSTANT
family = MONOMIAL
[../]
[]
[Kernels]
[./diff]
type = Diffusion
variable = u
[../]
[]
[AuxKernels]
[./layered_average]
type = SpatialUserObjectAux
variable = layered_average
execute_on = timestep_end
user_object = average
[../]
[]
[BCs]
[./top]
type = DirichletBC
variable = u
boundary = top
value = 1
[../]
[./bottom]
type = DirichletBC
variable = u
boundary = bottom
value = 0
[../]
[]
[UserObjects]
[./average]
type = LayeredAverage
variable = u
direction = y
num_layers = 2
[../]
[]
[VectorPostprocessors]
[avg]
type = SpatialUserObjectVectorPostprocessor
userobject = average
[]
[]
[Executioner]
type = Steady
solve_type = 'PJFNK'
petsc_options_iname = '-pc_type -pc_hypre_type'
petsc_options_value = 'hypre boomeramg'
[]
[Outputs]
exodus = true
csv = true
[]
(test/tests/transfers/general_field/user_object/boundary/sub.i)
[Mesh]
[gmg]
type = GeneratedMeshGenerator
dim = 3
nx = 5
ny = 5
nz = 5
xmax = 0.3
ymax = 0.3
zmax = 0.3
[]
[add_block]
type = ParsedSubdomainMeshGenerator
input = gmg
combinatorial_geometry = 'x > 0.22 & y < 0.23'
block_id = 1
[]
[add_internal_sideset]
type = SideSetsBetweenSubdomainsGenerator
input = add_block
primary_block = 0
paired_block = 1
new_boundary = internal
[]
[]
[AuxVariables]
[from_main]
initial_condition = -1
[]
[from_main_elem]
order = CONSTANT
family = MONOMIAL
initial_condition = -1
[]
[to_main]
[InitialCondition]
type = FunctionIC
function = '3 + 2*x*x + 3*y*y*y'
[]
[]
[to_main_elem]
order = CONSTANT
family = MONOMIAL
[InitialCondition]
type = FunctionIC
function = '4 + 2*x*x + 3*y*y*y'
[]
[]
[]
[UserObjects]
[to_main]
type = LayeredAverage
direction = x
num_layers = 10
variable = to_main
[]
[to_main_elem]
type = LayeredAverage
direction = x
num_layers = 10
variable = to_main_elem
[]
[]
[Executioner]
type = Transient
num_steps = 1
[]
[Problem]
solve = false
[]
[Outputs]
[out]
type = Exodus
hide = 'to_main to_main_elem'
overwrite = true
[]
[]
(test/tests/transfers/general_field/user_object/nearest_position/main.i)
# Base input for testing transfers. It has the following complexities:
# - more than one subapp
# - transfers both from and to the subapps
# - both nodal and elemental variables
# Tests derived from this input may add complexities through command line arguments
[Mesh]
type = GeneratedMesh
dim = 2
nx = 10
ny = 10
[]
[AuxVariables]
[from_sub]
initial_condition = -1
[]
[from_sub_elem]
order = CONSTANT
family = MONOMIAL
initial_condition = -1
[]
[to_sub]
[InitialCondition]
type = FunctionIC
function = '1 + 2*x*x + 3*y*y*y'
[]
[]
[to_sub_elem]
order = CONSTANT
family = MONOMIAL
[InitialCondition]
type = FunctionIC
function = '2 + 2*x*x + 3*y*y*y'
[]
[]
[]
[UserObjects]
[to_sub]
type = LayeredAverage
direction = x
num_layers = 10
variable = to_sub
execute_on = TIMESTEP_BEGIN
[]
[to_sub_elem]
type = LayeredAverage
direction = x
num_layers = 10
variable = to_sub_elem
execute_on = TIMESTEP_BEGIN
[]
[]
[Executioner]
type = Steady
[]
[Problem]
solve = false
verbose_multiapps = true
[]
[Outputs]
[out]
type = Exodus
hide = 'to_sub to_sub_elem'
overwrite = true
[]
[]
[Positions]
[input]
type = InputPositions
positions = '1e-6 0 0 0.4 0.4001 0 0.700001 0.1 0'
[]
[]
[MultiApps]
[sub]
# 1 on corner, one in the center and one close to a corner
type = FullSolveMultiApp
positions_objects = input
app_type = MooseTestApp
input_files = sub.i
output_in_position = true
execute_on = TIMESTEP_END
[]
[]
[Transfers]
[to_sub]
type = MultiAppGeneralFieldUserObjectTransfer
to_multi_app = sub
source_user_object = to_sub
variable = from_main
[]
[to_sub_elem]
type = MultiAppGeneralFieldUserObjectTransfer
to_multi_app = sub
source_user_object = to_sub_elem
variable = from_main_elem
[]
[from_sub]
type = MultiAppGeneralFieldUserObjectTransfer
from_multi_app = sub
source_user_object = to_main
variable = from_sub
use_nearest_app = true
bbox_factor = 100
[]
[from_sub_elem]
type = MultiAppGeneralFieldUserObjectTransfer
from_multi_app = sub
source_user_object = to_main_elem
variable = from_sub_elem
use_nearest_app = true
bbox_factor = 100
[]
[]
(test/tests/transfers/general_field/user_object/duplicated_user_object_tests/3d_1d_parent.i)
# This does a dummy diffusion solve in 3D space, then computes a layered average
# in the z direction. Those values are transferred into a sub-app that has 1D mesh
# in the z-direction (the mesh was displaced so that it is aligned in such a way).
# The sub-app also does a dummy diffusion solve and then computes layered average
# in the z-direction. Those value are transferred back to the parent app.
#
# Physically the 1D sub-app is placed in the center of the 3D mesh and is oriented
# in the z-direction. The bounding box of the sub-app is expanded such that it
# contains the 4 central elements of the 3D mesh (i.e. the values are transferred
# only into a part of parent mesh)
[Mesh]
type = GeneratedMesh
dim = 3
nx = 4
ny = 4
nz = 10
[]
[AuxVariables]
[./from_sub_app_var]
order = CONSTANT
family = MONOMIAL
[../]
[]
[UserObjects]
[main_uo]
type = LayeredAverage
direction = z
num_layers = 10
variable = u
[]
[]
[Variables]
[u]
[]
[]
[Kernels]
[diff]
type = Diffusion
variable = u
[]
[td]
type = TimeDerivative
variable = u
[]
[]
[BCs]
[left]
type = DirichletBC
variable = u
boundary = front
value = -1
[]
[right]
type = DirichletBC
variable = u
boundary = back
value = 1
[]
[]
[Executioner]
type = Transient
num_steps = 2
dt = 5
solve_type = 'NEWTON'
l_tol = 1e-8
nl_rel_tol = 1e-10
[]
[Outputs]
exodus = true
execute_on = final
[]
[MultiApps]
[sub_app]
positions = '0.5 0.5 0.0'
type = TransientMultiApp
input_files = 3d_1d_sub.i
app_type = MooseTestApp
bounding_box_padding = '0.25 0.25 0'
bounding_box_inflation = 0
use_displaced_mesh = true
execute_on = TIMESTEP_END
[]
[]
[Transfers]
[layered_transfer_to_sub_app]
type = MultiAppGeneralFieldUserObjectTransfer
source_user_object = main_uo
variable = sub_app_var
to_multi_app = sub_app
displaced_target_mesh = true
# Cover the whole target mesh from the 1D line
fixed_bounding_box_size = '2.1 2.1 0'
from_app_must_contain_point = false
[]
[layered_transfer_from_sub_app]
type = MultiAppGeneralFieldUserObjectTransfer
source_user_object = sub_app_uo
variable = from_sub_app_var
from_multi_app = sub_app
displaced_source_mesh = true
fixed_bounding_box_size = '0.25 0.25 0'
from_app_must_contain_point = false
[]
[]
(test/tests/transfers/general_field/user_object/duplicated_user_object_tests/tosub_displaced_parent.i)
[Mesh]
type = GeneratedMesh
dim = 3
nx = 20
ny = 20
nz = 20
[]
[Variables]
[./u]
[../]
[]
[AuxVariables]
[./layered_average_value]
order = CONSTANT
family = MONOMIAL
[../]
[]
[Kernels]
[./diff]
type = Diffusion
variable = u
[../]
[]
[AuxKernels]
[./layered_aux]
type = SpatialUserObjectAux
variable = layered_average_value
execute_on = timestep_end
user_object = layered_average
[../]
[]
[BCs]
[./bottom]
type = DirichletBC
variable = u
boundary = bottom
value = 0
[../]
[./top]
type = DirichletBC
variable = u
boundary = top
value = 1
[../]
[]
[UserObjects]
[./layered_average]
type = LayeredAverage
variable = u
direction = y
num_layers = 4
[../]
[]
[Executioner]
type = Transient
num_steps = 1
dt = 1
solve_type = 'PJFNK'
petsc_options_iname = '-pc_type -pc_hypre_type'
petsc_options_value = 'hypre boomeramg'
[]
[Outputs]
exodus = true
[]
[MultiApps]
[./sub_app]
execute_on = timestep_end
positions = '0 0 0'
type = TransientMultiApp
input_files = tosub_displaced_sub.i
app_type = MooseTestApp
[../]
[]
[Transfers]
[./layered_transfer]
source_user_object = layered_average
variable = multi_layered_average
type = MultiAppGeneralFieldUserObjectTransfer
to_multi_app = sub_app
displaced_target_mesh = true
skip_coordinate_collapsing = true
[../]
[./element_layered_transfer]
source_user_object = layered_average
variable = element_multi_layered_average
type = MultiAppGeneralFieldUserObjectTransfer
to_multi_app = sub_app
displaced_target_mesh = true
skip_coordinate_collapsing = true
[../]
[]
(test/tests/transfers/general_field/user_object/coord_transform/main-app.i)
# This input is a duplicate of test/tests/transfers/coord_transform/both_transformed/user_object
# The parameters are different between the GeneralFieldUserObject transfer and its deprecated
# ancestor
[Mesh]
type = GeneratedMesh
dim = 2
xmin = 0
xmax = 1
ymin = -1
ymax = 0
nx = 10
ny = 10
# Quarter turn around Z axis
alpha_rotation = -90
# Flips around Y axis
# beta_rotation = -180
[]
[Variables]
[u]
[]
[]
[AuxVariables]
[from_sub_app_var]
[]
[from_sub_app_var_elem]
order = CONSTANT
family = MONOMIAL
[]
[]
[Kernels]
[diff]
type = Diffusion
variable = u
[]
[force]
type = CoupledForce
variable = u
v = from_sub_app_var
[]
[]
[BCs]
[left]
type = DirichletBC
variable = u
boundary = left
value = 0
[]
[right]
type = DirichletBC
variable = u
boundary = right
value = 1
[]
[]
[Executioner]
type = Steady
solve_type = 'NEWTON'
petsc_options_iname = '-pc_type -pc_hypre_type'
petsc_options_value = 'hypre boomeramg'
verbose = true
[]
[Outputs]
exodus = true
[]
[UserObjects]
[main_uo]
type = LayeredAverage
direction = x
num_layers = 5
variable = u
[]
[]
[MultiApps]
[sub_app]
# Shift is offset by sub-app mesh + rotations
# positions = '1 0 0.0'
type = FullSolveMultiApp
input_files = sub-app.i
app_type = MooseTestApp
bounding_box_padding = '0.25 0.25 0'
bounding_box_inflation = 0
execute_on = TIMESTEP_END
[]
[]
[Transfers]
[layered_transfer_to_sub_app]
type = MultiAppGeneralFieldUserObjectTransfer
source_user_object = main_uo
variable = sub_app_var
to_multi_app = sub_app
[]
[layered_transfer_to_sub_app_elem]
type = MultiAppGeneralFieldUserObjectTransfer
source_user_object = main_uo
variable = sub_app_var_elem
to_multi_app = sub_app
[]
[layered_transfer_from_sub_app]
type = MultiAppGeneralFieldUserObjectTransfer
source_user_object = sub_app_uo
variable = from_sub_app_var
from_multi_app = sub_app
[]
[layered_transfer_from_sub_app_elem]
type = MultiAppGeneralFieldUserObjectTransfer
source_user_object = sub_app_uo
variable = from_sub_app_var_elem
from_multi_app = sub_app
[]
[]
(test/tests/transfers/general_field/user_object/duplicated_user_object_tests/restricted_elem_sub.i)
# yy is passed in from the parent app
[Mesh]
[line]
type = GeneratedMeshGenerator
dim = 1
nx = 4
xmax = 2
[]
[box]
type = SubdomainBoundingBoxGenerator
input = line
bottom_left = '0 -0.1 -0.1'
top_right = '1 0.1 0.1'
# need a different block ID than what is in the parent app to make sure the transfer works properly
block_id = 20
[]
[]
[AuxVariables]
[A]
family = MONOMIAL
order = CONSTANT
[]
[S]
family = MONOMIAL
order = CONSTANT
[]
[]
[AuxKernels]
[A_ak]
type = ParsedAux
variable = A
use_xyzt = true
expression = '2*x+4*${yy}'
execute_on = 'TIMESTEP_BEGIN'
[]
[]
[Variables]
[u]
[]
[]
[Kernels]
[td]
type = TimeDerivative
variable = u
[]
[diff]
type = Diffusion
variable = u
[]
[]
[UserObjects]
[A_avg]
type = LayeredAverage
block = 20
num_layers = 2
direction = x
variable = A
execute_on = TIMESTEP_END
[]
[]
[Executioner]
type = Transient
[]
[Outputs]
exodus = true
[]
(test/tests/transfers/general_field/user_object/duplicated_user_object_tests/tosub_parent.i)
[Mesh]
type = GeneratedMesh
dim = 3
nx = 20
ny = 20
nz = 20
[]
[Variables]
[./u]
[../]
[]
[AuxVariables]
[./layered_average_value]
order = CONSTANT
family = MONOMIAL
[../]
[]
[Kernels]
[./diff]
type = Diffusion
variable = u
[../]
[]
[AuxKernels]
[./layered_aux]
type = SpatialUserObjectAux
variable = layered_average_value
execute_on = timestep_end
user_object = layered_average
[../]
[]
[BCs]
[./bottom]
type = DirichletBC
variable = u
boundary = bottom
value = 0
[../]
[./top]
type = DirichletBC
variable = u
boundary = top
value = 1
[../]
[]
[UserObjects]
[./layered_average]
type = LayeredAverage
variable = u
direction = y
num_layers = 4
[../]
[]
[Executioner]
type = Transient
num_steps = 1
dt = 1
solve_type = 'PJFNK'
petsc_options_iname = '-pc_type -pc_hypre_type'
petsc_options_value = 'hypre boomeramg'
[]
[Outputs]
exodus = true
[]
[MultiApps]
[./sub_app]
execute_on = timestep_end
positions = '0.3 0.1 0.3 0.7 0.1 0.3'
type = TransientMultiApp
input_files = tosub_sub.i
app_type = MooseTestApp
[../]
[]
[Transfers]
[./layered_transfer]
source_user_object = layered_average
variable = multi_layered_average
type = MultiAppGeneralFieldUserObjectTransfer
to_multi_app = sub_app
skip_coordinate_collapsing = true
[../]
[./element_layered_transfer]
source_user_object = layered_average
variable = element_multi_layered_average
type = MultiAppGeneralFieldUserObjectTransfer
to_multi_app = sub_app
skip_coordinate_collapsing = true
[../]
[]
(test/tests/transfers/general_field/user_object/nearest_position/sub_between_diffusion.i)
[Mesh]
[gen]
type = GeneratedMeshGenerator
dim = 2
nx = 5
ny = 5
[]
[block1]
input = gen
type = SubdomainBoundingBoxGenerator
block_id = 1
bottom_left = '0 0 0'
top_right = '0.5 0.5 0'
[]
[]
[AuxVariables]
[sent_nodal]
[InitialCondition]
type = FunctionIC
function = '1 + 2*x*x + 3*y*y*y'
[]
[]
[received_nodal]
initial_condition = -1
[]
[sent_elem]
family = MONOMIAL
order = CONSTANT
[InitialCondition]
type = FunctionIC
function = '2 + 2*x*x + 3*y*y*y'
[]
[]
[received_elem]
family = MONOMIAL
order = CONSTANT
initial_condition = -1
[]
[]
[UserObjects]
[sent_nodal]
type = LayeredAverage
direction = x
num_layers = 10
variable = sent_nodal
# This must happen before transfers
execute_on = INITIAL
[]
[sent_elem]
type = LayeredAverage
direction = x
num_layers = 10
variable = sent_elem
execute_on = INITIAL
[]
[]
[Executioner]
type = Transient
num_steps = 1
[]
[Problem]
solve = false
[]
[Outputs]
exodus = true
hide = 'sent_nodal sent_elem'
execute_on = 'TIMESTEP_END'
[]
(modules/thermal_hydraulics/include/userobjects/LayeredAverageRZ.h)
// This file is part of the MOOSE framework
// https://www.mooseframework.org
//
// All rights reserved, see COPYRIGHT for full restrictions
// https://github.com/idaholab/moose/blob/master/COPYRIGHT
//
// Licensed under LGPL 2.1, please see LICENSE for details
// https://www.gnu.org/licenses/lgpl-2.1.html
#pragma once
#include "LayeredAverage.h"
#include "RZSymmetry.h"
/**
* The same functionality as LayeredAverage but for arbitrary RZ symmetry
*
* NOTE: this is a temporary object until MOOSE can do this
*/
class LayeredAverageRZ : public LayeredAverage, public RZSymmetry
{
public:
LayeredAverageRZ(const InputParameters & parameters);
virtual void execute() override;
protected:
virtual Real computeIntegral() override;
public:
static InputParameters validParams();
};