https://mooseframework.inl.gov
Loading...
Searching...
No Matches
CartesianMeshTrimmer.C
Go to the documentation of this file.
1//* This file is part of the MOOSE framework
2//* https://mooseframework.inl.gov
3//*
4//* All rights reserved, see COPYRIGHT for full restrictions
5//* https://github.com/idaholab/moose/blob/master/COPYRIGHT
6//*
7//* Licensed under LGPL 2.1, please see LICENSE for details
8//* https://www.gnu.org/licenses/lgpl-2.1.html
9
11#include "MooseMeshUtils.h"
12#include "MathUtils.h"
13
14// C++ includes
15#include <cmath> // provides round, not std::round (see http://www.cplusplus.com/reference/cmath/round/)
16
18
21{
23 params.addRangeCheckedParam<std::vector<unsigned short>>(
24 "trim_peripheral_region",
25 std::vector<unsigned short>(4, 0),
26 "trim_peripheral_region<=1",
27 "Whether the peripheral region on each of the four sides will be trimmed in an assembly "
28 "mesh. See documentation for numbering convention.");
29 params.addParamNamesToGroup("trim_peripheral_region", "Peripheral Trimming");
30 params.addClassDescription("This CartesianMeshTrimmer object performs peripheral and/or "
31 "across-center (0, 0, 0) trimming for "
32 "assembly or core 2D meshes generated by PatternedCartesianMG.");
33
34 return params;
35}
36
38 : PolygonMeshTrimmerBase(parameters)
39{
42 isParamValid("center_trim_starting_index")
43 ? MathUtils::euclideanMod(getParam<short>("center_trim_starting_index") - 2, 8)
44 : 8;
46 isParamValid("center_trim_ending_index")
47 ? MathUtils::euclideanMod(getParam<short>("center_trim_ending_index") - 2, 8)
48 : 8;
51 paramError("center_trim_starting_index",
52 "this parameter must be provided along with center_trim_ending_index.");
55 else
59 paramError("center_trim_starting_index",
60 "the remaining mesh after center trimming defined by this parameter and "
61 "center_trim_ending_index must be equal or smaller than half of the "
62 "input mesh.");
64 paramError("center_trimming_section_boundary",
65 "this input parameter is not used if center trimming is not performed.");
66}
67
68std::unique_ptr<MeshBase>
70{
71 // Check if input mesh is trimmable
72 if (hasMeshProperty<bool>("square_peripheral_trimmability", _input_name) &&
73 hasMeshProperty<bool>("square_center_trimmability", _input_name))
74 {
75 if (!getMeshProperty<bool>("square_peripheral_trimmability", _input_name) &&
76 std::accumulate(_trim_peripheral_region.begin(), _trim_peripheral_region.end(), 0) > 0)
77 paramError("input", "The input mesh does not have a trimmable peripheral region.");
78 if (!getMeshProperty<bool>("square_center_trimmability", _input_name) &&
80 paramError("input", "The input mesh cannot be trimmed through its center.");
81 }
82 else
83 paramError("input",
84 "The input mesh's meta data is not compatible with the CartesianMeshTrimmer because "
85 "the trimmability mesh meta data are absent.");
86
88}
registerMooseObject("ReactorApp", CartesianMeshTrimmer)
This CartesianMeshTrimmer object takes in a cartesian assembly or core mesh and performs peripheral a...
CartesianMeshTrimmer(const InputParameters &parameters)
std::unique_ptr< MeshBase > generate() override
static InputParameters validParams()
void addParamNamesToGroup(const std::string &space_delim_names, const std::string group_name)
void addClassDescription(const std::string &doc_string)
void addRangeCheckedParam(const std::string &name, const T &value, const std::string &parsed_function, const std::string &doc_string)
void paramError(const std::string &param, Args... args) const
bool isParamValid(const std::string &name) const
This PolygonMeshTrimmerBase is the base class for CartesianMeshTrimmer and HexagonMeshTrimmer,...
unsigned short _center_trim_sector_number
Number of remaining sectors.
const MeshGeneratorName _input_name
Input mesh to be modified.
const BoundaryName _center_trimming_section_boundary
Name of the section formed by center trimming.
unsigned int _num_sides
Number of polygon sides.
std::unique_ptr< MeshBase > generate() override
std::vector< unsigned short > _trim_peripheral_region
Index of the peripheral regions to be trimmed (see moosedocs for indexing scheme)
short _trimming_end_sector
Index of the sector to end trimming at (counter-clockwise direction)
short _trimming_start_sector
Index of the sector to start trimming from (counter-clockwise direction)
static InputParameters validParams()
std::size_t euclideanMod(T1 dividend, T2 divisor)