https://mooseframework.inl.gov
Loading...
Searching...
No Matches
RZSymmetry.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
10#include "RZSymmetry.h"
11#include "BlockRestrictable.h"
13#include "FEProblemBase.h"
14#include "libmesh/point.h"
15
18{
20 params.addRequiredParam<Point>("axis_point", "A point on the axis of RZ symmetry.");
21 params.addRequiredParam<RealVectorValue>("axis_dir", "The direction of the axis of RZ symmetry.");
22 params.addParam<Real>("offset", 0., "Radial offset of the axis of RZ symmetry.");
23 return params;
24}
25
26RZSymmetry::RZSymmetry(const MooseObject * moose_object, const InputParameters & parameters)
27 : _axis_point(0., 0., 0.),
28 _axis_dir(parameters.get<RealVectorValue>("axis_dir")),
29 _offset(parameters.get<Real>("offset"))
30{
31 const FEProblemBase * fe_problem =
32 moose_object->isParamValid("_fe_problem_base")
33 ? moose_object->getParam<FEProblemBase *>("_fe_problem_base")
34 : nullptr;
35 if (fe_problem != nullptr)
36 {
37 const MooseMesh & mesh = fe_problem->mesh();
38
39 const BlockRestrictable * blk_restr = dynamic_cast<const BlockRestrictable *>(moose_object);
40 const BoundaryRestrictable * bnd_restr =
41 dynamic_cast<const BoundaryRestrictable *>(moose_object);
42
43 if (blk_restr != nullptr)
44 {
45 const std::set<SubdomainID> & blks = blk_restr->meshBlockIDs();
46
47 for (auto & b : blks)
48 {
49 if (fe_problem->getCoordSystem(b) != Moose::COORD_XYZ)
51 moose_object->name(),
52 ": This is a THM-specific object can be applied only on subdomains with Cartesian "
53 "coordinate system. If your domain has RZ cooridnate system associated with it, you "
54 "need to use the object without the RZ suffix to obtain the desired result.");
55 }
56 }
57 if (bnd_restr != nullptr)
58 {
59 std::set<SubdomainID> blks;
60 const std::set<BoundaryID> & bnds = bnd_restr->boundaryIDs();
61 for (auto & bid : bnds)
62 {
63 std::set<SubdomainID> conn_blks = mesh.getBoundaryConnectedBlocks(bid);
64 for (auto & cb : conn_blks)
65 blks.insert(cb);
66 }
67
68 for (auto & b : blks)
69 {
70 if (fe_problem->getCoordSystem(b) != Moose::COORD_XYZ)
72 moose_object->name(),
73 ": This is a THM-specific object can be applied only on subdomains with Cartesian "
74 "coordinate system. If your domain has RZ cooridnate system associated with it, you "
75 "need to use the object without the RZ suffix to obtain the desired result.");
76 }
77 }
78 }
79
80 const Point pt = parameters.get<Point>("axis_point");
81 _axis_point = Point(pt(0), pt(1), pt(2));
82}
83
84Real
85RZSymmetry::computeCircumference(const RealVectorValue & pt)
86{
87 RealVectorValue v = (pt - _axis_point);
88 const Real r = v.cross(_axis_dir).norm() / _axis_dir.norm();
89 return 2 * libMesh::pi * (r + _offset);
90}
const double v
InputParameters emptyInputParameters()
void mooseError(Args &&... args)
const std::set< SubdomainID > & meshBlockIDs() const
virtual const std::set< BoundaryID > & boundaryIDs() const
virtual MooseMesh & mesh() override
void addRequiredParam(const std::string &name, const std::string &doc_string)
void addParam(const std::string &name, const std::initializer_list< typename T::value_type > &value, const std::string &doc_string)
std::vector< std::pair< R1, R2 > > get(const std::string &param1, const std::string &param2) const
const std::string & name() const
const T & getParam(const std::string &name) const
bool isParamValid(const std::string &name) const
const RealVectorValue & _axis_dir
The direction of the axis of symmetry.
Definition RZSymmetry.h:30
virtual Real computeCircumference(const RealVectorValue &pt)
Definition RZSymmetry.C:85
RealVectorValue _axis_point
A point on the axis of symmetry.
Definition RZSymmetry.h:28
RZSymmetry(const MooseObject *moose_object, const InputParameters &parameters)
Definition RZSymmetry.C:26
const Real & _offset
Radial offset of the axis of symmetry.
Definition RZSymmetry.h:32
static InputParameters validParams()
Definition RZSymmetry.C:17
Moose::CoordinateSystemType getCoordSystem(SubdomainID sid) const
MeshBase & mesh
const Real pi