- angle_rangesVector of angular ranges of the beginning of the absorber components.
C++ Type:std::vector<double>
Unit:(no unit assumed)
Controllable:No
Description:Vector of angular ranges of the beginning of the absorber components.
- angular_speedsVector of angular rotation speeds of the control drum.
C++ Type:std::vector<double>
Unit:(no unit assumed)
Controllable:No
Description:Vector of angular rotation speeds of the control drum.
- mesh_generatorName of the mesh generator to be used to retrieve control drums information.
C++ Type:MeshGeneratorName
Unit:(no unit assumed)
Controllable:No
Description:Name of the mesh generator to be used to retrieve control drums information.
- start_anglesVector of initial angular positions of the beginning of the absorber components.
C++ Type:std::vector<double>
Unit:(no unit assumed)
Controllable:No
Description:Vector of initial angular positions of the beginning of the absorber components.
MultiControlDrumFunction
A function that returns an absorber fraction for multiple control drums application.
Overview
MultiControlDrumFunction
is a Function object that assigns values for the absorber volume fraction. This is useful for simulating control drums rotation during power transients. It must be used with a mesh generated by PatternedHexMeshGenerator
so as to get access to the essential MeshMetaData
. This MultiControlDrumFunction
is capable of handling multiple control drums within a single mesh.
Principles
A control drum is a common reactivity control approach. It usually has a cylindrical geometry with an outer ring containing both absorber (yellow) and reflector (blue) sections (see Figure 1). Using this MultiControlDrumFunction
object, the rotation of the absorber section can be simulated. The entire ring needs to be a single block, while this Function object creates a time and space dependent function to represent the volume percentage of the absorber in this ring block. The function is supposed to work with either FunctionAux
to assign value to an elemental auxiliary variable, or GenericFunctionMaterial
to assign value to a material property. There are three possible scenarios:
If the entire mesh element is within the absorber section, the function value is 100 (percent absorber);
If the entire mesh element is within the reflector section, the function value is 0 (percent absorber);
If the mesh element is intercepted by the absorber-reflector boundary, the function value is between 0 and 100 and equal to the volume percentage of the absorber part in that mesh element.

Figure 1: A schematic drawing showing a typical control drum structure and important parameters of this MultiControlDrumFunction
object.
Key Parameters
To simulate the rotation of the control drums, a set of parameters are needed for each control drum (see Figure 1):
"start_angles": the azimuthal angles of the starting positions of the absorber sections at the beginning of rotation;
"angle_ranges": the azimuthal angle ranges of the absorber sections;
"angular_speeds": the rotation speeds of the control drums in degree per second (positive values mean counterclockwise rotation; negative values mean clockwise rotation.)
By default, rotation of the control drums starts at t = 0 and never ends. Optionally, users can set up "rotation_start_time" and "rotation_end_time" to customize the control drums rotation time.
When "use_control_drum_id" is true, this MultiControlDrumFunction
can also use the element extra integer control_drum_id
in the mesh to determine the domain of each control drum. Please refer to PatternedHexMeshGenerator
for details on how control_drum_id
's are assigned. If "use_control_drum_id" is false, the domain of each control drum is determined based on the nearest control drum position.

Figure 2: An example of control drums simulated by this MultiControlDrumFunction
object (see input file here).
Example Syntax
(contrib/moose/modules/reactor/test/tests/functions/multi_control_drum_function/multi_cd.i)Input Parameters
- rotation_end_time1.79769e+308The time point at which the control drums stop rotating.
Default:1.79769e+308
C++ Type:double
Unit:(no unit assumed)
Controllable:No
Description:The time point at which the control drums stop rotating.
- rotation_start_time0The time point at which the control drums start rotating.
Default:0
C++ Type:double
Unit:(no unit assumed)
Controllable:No
Description:The time point at which the control drums start rotating.
Optional Parameters
- control_tagsAdds user-defined labels for accessing object parameters via control logic.
C++ Type:std::vector<std::string>
Unit:(no unit assumed)
Controllable:No
Description:Adds user-defined labels for accessing object parameters via control logic.
- enableTrueSet the enabled status of the MooseObject.
Default:True
C++ Type:bool
Unit:(no unit assumed)
Controllable:No
Description:Set the enabled status of the MooseObject.
- use_control_drum_idTrueWhether extra element id user_control_drum_id is used.
Default:True
C++ Type:bool
Unit:(no unit assumed)
Controllable:No
Description:Whether extra element id user_control_drum_id is used.