https://mooseframework.inl.gov
Public Types | Public Member Functions | Static Public Member Functions | Public Attributes | Static Public Attributes | Protected Types | Protected Member Functions | Protected Attributes | Friends | List of all members
TriSubChannelMesh Class Reference

Mesh class for triangular, edge and corner subchannels for hexagonal lattice fuel assemblies. More...

#include <TriSubChannelMesh.h>

Inheritance diagram for TriSubChannelMesh:
[legend]

Public Types

enum  ParallelType { ParallelType::DEFAULT, ParallelType::REPLICATED, ParallelType::DISTRIBUTED }
 
typedef std::pair< const Node *, BoundaryIDPeriodicNodeInfo
 
typedef DataFileName DataFileParameterType
 

Public Member Functions

 TriSubChannelMesh (const InputParameters &parameters)
 
 TriSubChannelMesh (const TriSubChannelMesh &other_mesh)
 
std::unique_ptr< MooseMeshsafeClone () const override
 
void buildMesh () override
 
void computeAssemblyHydraulicParameters ()
 Compute undeformed bundle-average inlet hydraulic quantities from generated mesh geometry. More...
 
Real getSubchannelFlowArea (unsigned int i_chan, Real z) const override
 Return undeformed flow area for a subchannel at an axial location, including any blockage reduction. More...
 
Real getSubchannelWettedPerimeter (unsigned int i_chan) const override
 Return undeformed wetted perimeter for a subchannel. More...
 
unsigned int getNumOfPins () const override
 Return the number of pins. More...
 
Node * getPinNode (unsigned int i_pin, unsigned int iz) const override
 Get the pin mesh node for a given pin index and elevation index. More...
 
const RealgetDuctToPinGap () const
 Return the the gap thickness between the duct and peripheral fuel pins. More...
 
const unsigned intgetNumOfRings () const
 Return the number of fuel-pin rings, counting the center pin as the first ring. More...
 
const unsigned intgetPinIndex (const unsigned int channel_idx, const unsigned int neighbor_idx)
 Return Pin index given subchannel index and local neighbor index. More...
 
const RealgetWireDiameter () const
 Return wire diameter. More...
 
const RealgetFlatToFlat () const
 Return flat to flat [m]. More...
 
const RealgetWireLeadLength () const
 Return the wire lead length. More...
 
Node * getChannelNode (unsigned int i_chan, unsigned int iz) const override
 Get the subchannel mesh node for a given channel index and elevation index. More...
 
unsigned int getNumOfChannels () const override
 Return the number of channels per layer. More...
 
unsigned int getNumOfGapsPerLayer () const override
 Return the number of gaps per layer. More...
 
const std::pair< unsigned int, unsigned int > & getGapChannels (unsigned int i_gap) const override
 Return a pair of subchannel indices for a given gap index. More...
 
const std::pair< unsigned int, unsigned int > & getGapPins (unsigned int i_gap) const override
 Return a pair of pin indices for a given gap index. More...
 
const std::vector< unsigned int > & getChannelGaps (unsigned int i_chan) const override
 Return a vector of gap indices for a given channel index. More...
 
const RealgetCrossflowSign (unsigned int i_chan, unsigned int i_local) const override
 Return a sign for the crossflow given a subchannel index and local neighbor index. More...
 
unsigned int getSubchannelIndexFromPoint (const Point &p) const override
 Return a subchannel index for a given physical point p More...
 
unsigned int channelIndex (const Point &point) const override
 
EChannelType getSubchannelType (unsigned int index) const override
 Return the type of the subchannel for given subchannel index. More...
 
Real getGapWidth (unsigned int axial_index, unsigned int gap_index) const override
 Return gap width for a given gap index. More...
 
void setGapWidth (unsigned int axial_index, unsigned int gap_index, Real gap_width)
 Set the gap width for a given axial cell and gap index. More...
 
const std::pair< unsigned int, unsigned int > & getSweepFlowGaps (unsigned int i_chan) const
 
const std::pair< unsigned int, unsigned int > & getSweepFlowChans (unsigned int i_chan) const
 
const std::vector< unsigned int > & getPinChannels (unsigned int i_pin) const override
 Return a vector of channel indices for a given Pin index. More...
 
const std::vector< unsigned int > & getChannelPins (unsigned int i_chan) const override
 Return a vector of pin indices for a given channel index. More...
 
unsigned int getPinIndexFromPoint (const Point &p) const override
 Return a pin index for a given physical point p More...
 
unsigned int pinIndex (const Point &p) const override
 
virtual const std::vector< Real > & getZGrid () const
 Get axial location of layers. More...
 
virtual unsigned int getZIndex (const Point &point) const
 Get axial index of point. More...
 
virtual const std::vector< std::vector< Real > > & getKGrid () const
 Get axial cell location and value of loss coefficient. More...
 
virtual const std::vector< Real > & getZBlockage () const
 Get axial location of blockage (in,out) [m]. More...
 
virtual const std::vector< unsigned int > & getIndexBlockage () const
 Get index of blocked subchannels. More...
 
virtual const std::vector< Real > & getReductionBlockage () const
 Get area reduction of blocked subchannels. More...
 
virtual const RealgetKij () const
 Return lateral loss coefficient. More...
 
virtual unsigned int getNumOfAxialCells () const
 Return the number of axial cells. More...
 
Node * getChannelNodeFromDuct (Node *duct_node) const
 Function that gets the channel node from the duct node. More...
 
Node * getDuctNodeFromChannel (Node *channel_node) const
 Function that gets the duct node from the channel node. More...
 
bool pinMeshExist () const
 Return if Pin Mesh exists or not. More...
 
bool ductMeshExist () const
 Return if Duct Mesh exists or not. More...
 
virtual const RealgetPitch () const
 Return the undeformed pitch between 2 subchannels. More...
 
virtual const RealgetPinDiameter () const
 Return undeformed Pin diameter. More...
 
Real getAssemblyFlowArea () const
 Return undeformed bundle inlet flow area. More...
 
Real getAssemblyWettedPerimeter () const
 Return undeformed bundle inlet wetted perimeter. More...
 
Real getAssemblyHydraulicDiameter () const
 Return undeformed bundle-average hydraulic diameter. More...
 
virtual const RealgetHeatedLengthEntry () const
 Return unheated length at entry. More...
 
virtual const RealgetHeatedLength () const
 Return heated length. More...
 
virtual const RealgetHeatedLengthExit () const
 Return unheated length at exit. More...
 
const std::vector< Node * > & getDuctNodes () const
 Function that returns the vector with the duct nodes. More...
 
void setChannelToDuctMaps (const std::vector< Node *> &duct_nodes)
 Function that sets the channel-to-duct maps. More...
 
virtual MooseMeshclone () const
 
void determineUseDistributedMesh ()
 
std::unique_ptr< MeshBase > buildMeshBaseObject (unsigned int dim=libMesh::invalid_uint)
 
std::unique_ptr< TbuildTypedMesh (unsigned int dim=libMesh::invalid_uint)
 
void setMeshBase (std::unique_ptr< MeshBase > mesh_base)
 
virtual void init ()
 
virtual unsigned int dimension () const
 
virtual unsigned int spatialDimension () const
 
virtual unsigned int effectiveSpatialDimension () const
 
unsigned int getBlocksMaxDimension (const std::vector< SubdomainName > &blocks) const
 
std::vector< BoundaryIDgetBoundaryIDs (const Elem *const elem, const unsigned short int side) const
 
std::vector< std::vector< BoundaryID > > getBoundaryIDs (const Elem *const elem) const
 
const std::set< BoundaryID > & getBoundaryIDs () const
 
std::vector< BoundaryIDgetBoundaryIDs (const std::vector< BoundaryName > &boundary_name, bool generate_unknown=false) const
 
const Elem * getLowerDElem (const Elem *, unsigned short int) const
 
unsigned int getHigherDSide (const Elem *elem) const
 
void buildNodeList ()
 
void buildBndElemList ()
 
const std::map< dof_id_type, std::vector< dof_id_type > > & nodeToElemMap ()
 
const std::map< dof_id_type, std::vector< dof_id_type > > & nodeToActiveSemilocalElemMap ()
 
virtual bnd_node_iterator bndNodesBegin ()
 
virtual bnd_node_iterator bndNodesEnd ()
 
virtual bnd_elem_iterator bndElemsBegin ()
 
virtual bnd_elem_iterator bndElemsEnd ()
 
void buildNodeListFromSideList ()
 
std::vector< std::tuple< dof_id_type, unsigned short int, boundary_id_type > > buildSideList ()
 
std::vector< std::tuple< dof_id_type, unsigned short int, boundary_id_type > > buildActiveSideList () const
 
unsigned int sideWithBoundaryID (const Elem *const elem, const BoundaryID boundary_id) const
 
MeshBase::node_iterator localNodesBegin ()
 
MeshBase::const_node_iterator localNodesBegin () const
 
MeshBase::node_iterator localNodesEnd ()
 
MeshBase::const_node_iterator localNodesEnd () const
 
MeshBase::element_iterator activeLocalElementsBegin ()
 
MeshBase::const_element_iterator activeLocalElementsBegin () const
 
const MeshBase::element_iterator activeLocalElementsEnd ()
 
const MeshBase::const_element_iterator activeLocalElementsEnd () const
 
virtual dof_id_type nNodes () const
 
virtual dof_id_type nElem () const
 
virtual dof_id_type nLocalNodes () const
 
virtual dof_id_type nActiveElem () const
 
virtual dof_id_type nActiveLocalElem () const
 
virtual SubdomainID nSubdomains () const
 
virtual unsigned int nPartitions () const
 
virtual bool skipPartitioning () const
 
virtual bool skipNoncriticalPartitioning () const
 
virtual dof_id_type maxNodeId () const
 
virtual dof_id_type maxElemId () const
 
virtual const Node & node (const dof_id_type i) const
 
virtual Node & node (const dof_id_type i)
 
virtual const Node & nodeRef (const dof_id_type i) const
 
virtual Node & nodeRef (const dof_id_type i)
 
virtual const Node * nodePtr (const dof_id_type i) const
 
virtual Node * nodePtr (const dof_id_type i)
 
virtual const Node * queryNodePtr (const dof_id_type i) const
 
virtual Node * queryNodePtr (const dof_id_type i)
 
virtual Elem * elem (const dof_id_type i)
 
virtual const Elem * elem (const dof_id_type i) const
 
virtual Elem * elemPtr (const dof_id_type i)
 
virtual const Elem * elemPtr (const dof_id_type i) const
 
virtual Elem * queryElemPtr (const dof_id_type i)
 
virtual const Elem * queryElemPtr (const dof_id_type i) const
 
bool prepared () const
 
virtual void prepared (bool state)
 
void needsPrepareForUse ()
 
void meshChanged ()
 
virtual void onMeshChanged ()
 
void cacheChangedLists ()
 
ConstElemPointerRangerefinedElementRange () const
 
ConstElemPointerRangecoarsenedElementRange () const
 
const std::vector< const Elem *> & coarsenedElementChildren (const Elem *elem) const
 
void updateActiveSemiLocalNodeRange (std::set< dof_id_type > &ghosted_elems)
 
bool isSemiLocal (Node *const node) const
 
const std::unordered_map< boundary_id_type, std::unordered_set< dof_id_type > > & getBoundariesToElems () const
 
const std::unordered_map< boundary_id_type, std::unordered_set< dof_id_type > > & getBoundariesToActiveSemiLocalElemIds () const
 
std::unordered_set< dof_id_typegetBoundaryActiveSemiLocalElemIds (BoundaryID bid) const
 
std::unordered_set< dof_id_typegetBoundaryActiveNeighborElemIds (BoundaryID bid) const
 
bool isBoundaryFullyExternalToSubdomains (BoundaryID bid, const std::set< SubdomainID > &blk_group) const
 
const std::set< SubdomainID > & meshSubdomains () const
 
const std::set< BoundaryID > & meshBoundaryIds () const
 
const std::set< BoundaryID > & meshSidesetIds () const
 
const std::set< BoundaryID > & meshNodesetIds () const
 
void setBoundaryToNormalMap (std::unique_ptr< std::map< BoundaryID, RealVectorValue >> boundary_map)
 
void setBoundaryToNormalMap (std::map< BoundaryID, RealVectorValue > *boundary_map)
 
void setMeshBoundaryIDs (std::set< BoundaryID > boundary_IDs)
 
const RealVectorValuegetNormalByBoundaryID (BoundaryID id) const
 
bool prepare (const MeshBase *mesh_to_clone)
 
void update ()
 
unsigned int uniformRefineLevel () const
 
void setUniformRefineLevel (unsigned int, bool deletion=true)
 
bool skipDeletionRepartitionAfterRefine () const
 
bool skipRefineWhenUseSplit () const
 
void addGhostedBoundary (BoundaryID boundary_id)
 
void setGhostedBoundaryInflation (const std::vector< Real > &inflation)
 
const std::set< unsigned int > & getGhostedBoundaries () const
 
const std::vector< Real > & getGhostedBoundaryInflation () const
 
void ghostGhostedBoundaries ()
 
void needGhostGhostedBoundaries (bool needghost)
 
unsigned int getPatchSize () const
 
unsigned int getGhostingPatchSize () const
 
unsigned int getMaxLeafSize () const
 
void setPatchUpdateStrategy (Moose::PatchUpdateType patch_update_strategy)
 
const Moose::PatchUpdateTypegetPatchUpdateStrategy () const
 
libMesh::BoundingBox getInflatedProcessorBoundingBox (Real inflation_multiplier=0.01) const
 
 operator libMesh::MeshBase & ()
 
 operator const libMesh::MeshBase & () const
 
MeshBase & getMesh ()
 
MeshBase & getMesh (const std::string &name)
 
const MeshBase & getMesh () const
 
const MeshBase & getMesh (const std::string &name) const
 
const MeshBase * getMeshPtr () const
 
Moose::Kokkos::MeshgetKokkosMesh ()
 
const Moose::Kokkos::MeshgetKokkosMesh () const
 
void printInfo (std::ostream &os=libMesh::out, const unsigned int verbosity=0) const
 
const std::set< SubdomainID > & getNodeBlockIds (const Node &node) const
 
const std::vector< dof_id_type > & getNodeList (boundary_id_type nodeset_id) const
 
const Node * addUniqueNode (const Point &p, Real tol=1e-6)
 
Node * addQuadratureNode (const Elem *elem, const unsigned short int side, const unsigned int qp, BoundaryID bid, const Point &point)
 
Node * getQuadratureNode (const Elem *elem, const unsigned short int side, const unsigned int qp)
 
void clearQuadratureNodes ()
 
BoundaryID getBoundaryID (const BoundaryName &boundary_name) const
 
SubdomainID getSubdomainID (const SubdomainName &subdomain_name) const
 
std::vector< SubdomainIDgetSubdomainIDs (const std::vector< SubdomainName > &subdomain_names) const
 
std::set< SubdomainIDgetSubdomainIDs (const std::set< SubdomainName > &subdomain_names) const
 
void setSubdomainName (SubdomainID subdomain_id, const SubdomainName &name)
 
const std::string & getSubdomainName (SubdomainID subdomain_id) const
 
std::vector< SubdomainName > getSubdomainNames (const std::vector< SubdomainID > &subdomain_ids) const
 
void setBoundaryName (BoundaryID boundary_id, BoundaryName name)
 
const std::string & getBoundaryName (const BoundaryID boundary_id) const
 
std::string getBoundaryString (const BoundaryID boundary_id) const
 
void buildPeriodicNodeMap (std::multimap< dof_id_type, dof_id_type > &periodic_node_map, unsigned int var_number, libMesh::PeriodicBoundaries *pbs) const
 
void buildPeriodicNodeSets (std::map< BoundaryID, std::set< dof_id_type >> &periodic_node_sets, unsigned int var_number, libMesh::PeriodicBoundaries *pbs) const
 
Real dimensionWidth (unsigned int component) const
 
bool detectOrthogonalDimRanges (Real tol=1e-6)
 
void addPeriodicVariable (const unsigned int sys_num, const unsigned int var_num, const BoundaryID primary, const BoundaryID secondary)
 
const std::array< bool, 3 > & queryPeriodicDimensions (const unsigned int sys_num, const unsigned int var_num) const
 
const std::array< bool, 3 > & queryPeriodicDimensions (const MooseVariableBase &var) const
 
bool isTranslatedPeriodic (const unsigned int sys_num, const unsigned int var_num, const unsigned int component) const
 
bool isTranslatedPeriodic (const MooseVariableBase &var, const unsigned int component) const
 
bool isTranslatedPeriodic (const unsigned int var_num, const unsigned int component) const
 
RealVectorValue minPeriodicVector (const unsigned int sys_num, const unsigned int var_num, Point p, Point q) const
 
RealVectorValue minPeriodicVector (const MooseVariableBase &var, const Point &p, const Point &q) const
 
RealVectorValue minPeriodicVector (const unsigned int var_num, const Point &p, const Point &q) const
 
Real minPeriodicDistance (const unsigned int sys_num, const unsigned int var_num, const Point &p, const Point &q) const
 
Real minPeriodicDistance (const MooseVariableBase &var, const Point &p, const Point &q) const
 
Real minPeriodicDistance (const unsigned int var_num, const Point &p, const Point &q) const
 
void detectPairedSidesets ()
 
bool hasDetectedPairedSidesets () const
 
const std::pair< BoundaryID, BoundaryID > * getPairedBoundaryMapping (unsigned int component) const
 
void buildRefinementAndCoarseningMaps (Assembly *assembly)
 
const std::vector< std::vector< QpMap > > & getRefinementMap (const Elem &elem, int parent_side, int child, int child_side)
 
const std::vector< std::pair< unsigned int, QpMap > > & getCoarseningMap (const Elem &elem, int input_side)
 
void changeBoundaryId (const boundary_id_type old_id, const boundary_id_type new_id, bool delete_prev)
 
const std::set< BoundaryID > & getSubdomainBoundaryIds (const SubdomainID subdomain_id) const
 
std::set< BoundaryIDgetSubdomainInterfaceBoundaryIds (const SubdomainID subdomain_id) const
 
std::set< SubdomainIDgetBoundaryConnectedBlocks (const BoundaryID bid) const
 
std::set< SubdomainIDgetBoundaryConnectedSecondaryBlocks (const BoundaryID bid) const
 
std::set< SubdomainIDgetInterfaceConnectedBlocks (const BoundaryID bid) const
 
const std::set< SubdomainID > & getBlockConnectedBlocks (const SubdomainID subdomain_id) const
 
bool isBoundaryNode (dof_id_type node_id) const
 
bool isBoundaryNode (dof_id_type node_id, BoundaryID bnd_id) const
 
bool isBoundaryElem (dof_id_type elem_id) const
 
bool isBoundaryElem (dof_id_type elem_id, BoundaryID bnd_id) const
 
void errorIfDistributedMesh (std::string name) const
 
virtual bool isDistributedMesh () const
 
bool isParallelTypeForced () const
 
void setParallelType (ParallelType parallel_type)
 
ParallelType getParallelType () const
 
const MooseEnumpartitionerName () const
 
bool isPartitionerForced () const
 
void allowRecovery (bool allow)
 
void setCustomPartitioner (libMesh::Partitioner *partitioner)
 
bool isRegularOrthogonal ()
 
bool hasSecondOrderElements ()
 
virtual std::unique_ptr< libMesh::PointLocatorBasegetPointLocator () const
 
virtual std::string getFileName () const
 
void needsRemoteElemDeletion (bool need_delete)
 
bool needsRemoteElemDeletion () const
 
void allowRemoteElementRemoval (bool allow_removal)
 
bool allowRemoteElementRemoval () const
 
void deleteRemoteElements ()
 
bool hasMeshBase () const
 
bool hasElementID (const std::string &id_name) const
 
unsigned int getElementIDIndex (const std::string &id_name) const
 
dof_id_type maxElementID (unsigned int elem_id_index) const
 
dof_id_type minElementID (unsigned int elem_id_index) const
 
bool areElemIDsIdentical (const std::string &id_name1, const std::string &id_name2) const
 
std::set< dof_id_typegetAllElemIDs (unsigned int elem_id_index) const
 
std::set< dof_id_typegetElemIDsOnBlocks (unsigned int elem_id_index, const std::set< SubdomainID > &blks) const
 
unsigned int getMaxSidesPerElem () const
 
unsigned int getMaxNodesPerElem () const
 
unsigned int getMaxNodesPerSide () const
 
std::unordered_map< dof_id_type, std::set< dof_id_type > > getElemIDMapping (const std::string &from_id_name, const std::string &to_id_name) const
 
void cacheFaceInfoVariableOwnership () const
 
void cacheFVElementalDoFs () const
 
void computeFiniteVolumeCoords () const
 
void isDisplaced (bool is_displaced)
 
bool isDisplaced () const
 
const std::map< boundary_id_type, std::vector< dof_id_type > > & nodeSetNodes () const
 
Moose::CoordinateSystemType getCoordSystem (SubdomainID sid) const
 
const std::map< SubdomainID, Moose::CoordinateSystemType > & getCoordSystem () const
 
Moose::CoordinateSystemType getUniqueCoordSystem () const
 
void setCoordSystem (const std::vector< SubdomainName > &blocks, const MultiMooseEnum &coord_sys)
 
void setAxisymmetricCoordAxis (const MooseEnum &rz_coord_axis)
 
void setGeneralAxisymmetricCoordAxes (const std::vector< SubdomainName > &blocks, const std::vector< std::pair< Point, RealVectorValue >> &axes)
 
const std::pair< Point, RealVectorValue > & getGeneralAxisymmetricCoordAxis (SubdomainID subdomain_id) const
 
bool usingGeneralAxisymmetricCoordAxes () const
 
unsigned int getAxisymmetricRadialCoord () const
 
void checkCoordinateSystems ()
 
void setCoordData (const MooseMesh &other_mesh)
 
void markFiniteVolumeInfoDirty ()
 
bool isFiniteVolumeInfoDirty () const
 
MooseAppCoordTransformcoordTransform ()
 
const MooseUnitslengthUnit () const
 
const std::unordered_map< std::pair< const Elem *, unsigned short int >, const Elem *> & getLowerDElemMap () const
 
bool isSplit () const
 
void buildFiniteVolumeInfo () const
 
void setupFiniteVolumeMeshData () const
 
void doingPRefinement (bool doing_p_refinement)
 
bool doingPRefinement () const
 
unsigned int maxPLevel () const
 
unsigned int maxHLevel () const
 
const std::vector< QpMap > & getPRefinementMap (const Elem &elem) const
 
const std::vector< QpMap > & getPRefinementSideMap (const Elem &elem) const
 
const std::vector< QpMap > & getPCoarseningMap (const Elem &elem) const
 
const std::vector< QpMap > & getPCoarseningSideMap (const Elem &elem) const
 
void buildPRefinementAndCoarseningMaps (Assembly *assembly)
 
bool hasLowerD () const
 
const std::set< SubdomainID > & interiorLowerDBlocks () const
 
const std::set< SubdomainID > & boundaryLowerDBlocks () const
 
bool getConstructNodeListFromSideList ()
 
bool getDisplaceNodeListBySideList ()
 
virtual bool enabled () const
 
std::shared_ptr< MooseObjectgetSharedPtr ()
 
std::shared_ptr< const MooseObjectgetSharedPtr () const
 
bool isKokkosObject () const
 
MooseAppgetMooseApp () const
 
const std::string & type () const
 
const std::string & name () const
 
std::string typeAndName () const
 
MooseObjectParameterName uniqueParameterName (const std::string &parameter_name) const
 
MooseObjectName uniqueName () const
 
const InputParametersparameters () const
 
const hit::Node * getHitNode () const
 
bool hasBase () const
 
const std::string & getBase () const
 
const TgetParam (const std::string &name) const
 
std::vector< std::pair< T1, T2 > > getParam (const std::string &param1, const std::string &param2) const
 
const TqueryParam (const std::string &name) const
 
const TgetRenamedParam (const std::string &old_name, const std::string &new_name) const
 
T getCheckedPointerParam (const std::string &name, const std::string &error_string="") const
 
bool haveParameter (const std::string &name) const
 
bool isParamValid (const std::string &name) const
 
bool isParamSetByUser (const std::string &name) const
 
void connectControllableParams (const std::string &parameter, const std::string &object_type, const std::string &object_name, const std::string &object_parameter) const
 
void paramError (const std::string &param, Args... args) const
 
void paramWarning (const std::string &param, Args... args) const
 
void paramWarning (const std::string &param, Args... args) const
 
void paramInfo (const std::string &param, Args... args) const
 
std::string messagePrefix (const bool hit_prefix=true) const
 
std::string errorPrefix (const std::string &) const
 
void mooseError (Args &&... args) const
 
void mooseDocumentedError (const std::string &repo_name, const unsigned int issue_num, Args &&... args) const
 
void mooseErrorNonPrefixed (Args &&... args) const
 
void mooseWarning (Args &&... args) const
 
void mooseWarning (Args &&... args) const
 
void mooseWarningNonPrefixed (Args &&... args) const
 
void mooseWarningNonPrefixed (Args &&... args) const
 
void mooseDeprecated (Args &&... args) const
 
void mooseDeprecated (Args &&... args) const
 
void mooseDeprecatedNoTrace (Args &&... args) const
 
void mooseInfo (Args &&... args) const
 
void callMooseError (std::string msg, const bool with_prefix, const hit::Node *node=nullptr, const bool show_trace=true) const
 
std::string getDataFileName (const std::string &param) const
 
std::string getDataFileNameByName (const std::string &relative_path) const
 
std::string getDataFilePath (const std::string &relative_path) const
 
PerfGraphperfGraph ()
 
libMesh::ConstElemRangegetActiveLocalElementRange ()
 
libMesh::ConstElemRangegetActiveLocalElementRange ()
 
libMesh::NodeRangegetActiveNodeRange ()
 
libMesh::NodeRangegetActiveNodeRange ()
 
SemiLocalNodeRangegetActiveSemiLocalNodeRange () const
 
SemiLocalNodeRangegetActiveSemiLocalNodeRange () const
 
libMesh::ConstNodeRangegetLocalNodeRange ()
 
libMesh::ConstNodeRangegetLocalNodeRange ()
 
libMesh::StoredRange< MooseMesh::const_bnd_node_iterator, const BndNode *> * getBoundaryNodeRange ()
 
libMesh::StoredRange< MooseMesh::const_bnd_node_iterator, const BndNode *> * getBoundaryNodeRange ()
 
libMesh::StoredRange< MooseMesh::const_bnd_elem_iterator, const BndElement *> * getBoundaryElementRange ()
 
libMesh::StoredRange< MooseMesh::const_bnd_elem_iterator, const BndElement *> * getBoundaryElementRange ()
 
virtual Real getMinInDimension (unsigned int component) const
 
virtual Real getMinInDimension (unsigned int component) const
 
virtual Real getMaxInDimension (unsigned int component) const
 
virtual Real getMaxInDimension (unsigned int component) const
 
bool isCustomPartitionerRequested () const
 
bool isCustomPartitionerRequested () const
 
void setIsCustomPartitionerRequested (bool cpr)
 
void setIsCustomPartitionerRequested (bool cpr)
 
unsigned int nFace () const
 
unsigned int nFace () const
 
const std::vector< const FaceInfo *> & faceInfo () const
 
const FaceInfofaceInfo (const Elem *elem, unsigned int side) const
 
const std::vector< const FaceInfo *> & faceInfo () const
 
const FaceInfofaceInfo (const Elem *elem, unsigned int side) const
 
face_info_iterator ownedFaceInfoBegin ()
 
face_info_iterator ownedFaceInfoBegin ()
 
face_info_iterator ownedFaceInfoEnd ()
 
face_info_iterator ownedFaceInfoEnd ()
 
elem_info_iterator ownedElemInfoBegin ()
 
elem_info_iterator ownedElemInfoBegin ()
 
elem_info_iterator ownedElemInfoEnd ()
 
elem_info_iterator ownedElemInfoEnd ()
 
const ElemInfoelemInfo (const dof_id_type id) const
 
const ElemInfoelemInfo (const dof_id_type id) const
 
const std::vector< const ElemInfo *> & elemInfoVector () const
 
const std::vector< const ElemInfo *> & elemInfoVector () const
 
const std::vector< FaceInfo > & allFaceInfo () const
 
const std::vector< FaceInfo > & allFaceInfo () const
 
const Parallel::Communicator & comm () const
 
processor_id_type n_processors () const
 
processor_id_type processor_id () const
 

Static Public Member Functions

static InputParameters validParams ()
 
static void pinPositions (std::vector< Point > &positions, unsigned int nrings, Real pitch, Point center)
 Calculates and stores the pin positions/centers for a hexagonal assembly containing the given number of rings in a triangular/alternating row grid spaced 'pitch' apart. More...
 
static void generateZGrid (Real unheated_length_entry, Real heated_length, Real unheated_length_exit, unsigned int n_cells, std::vector< Real > &z_grid)
 Generate the spacing in z-direction using heated and unteaded lengths. More...
 
static void setSubdomainName (MeshBase &mesh, SubdomainID subdomain_id, const SubdomainName &name)
 
static void changeBoundaryId (MeshBase &mesh, const boundary_id_type old_id, const boundary_id_type new_id, bool delete_prev)
 
static void callMooseError (MooseApp *const app, const InputParameters &params, std::string msg, const bool with_prefix, const hit::Node *node, const bool show_trace=true)
 
static MooseEnum partitioning ()
 
static MooseEnum elemTypes ()
 
static void setPartitioner (MeshBase &mesh_base, MooseEnum &partitioner, bool use_distributed_mesh, const InputParameters &params, MooseObject &context_obj)
 

Public Attributes

bool _pin_mesh_exist = false
 
bool _duct_mesh_exist = false
 
std::vector< std::vector< Real > > _subchannel_position
 x,y coordinates of the subchannel centroids More...
 
 usingCombinedWarningSolutionWarnings
 
const ConsoleStream _console
 

Static Public Attributes

static const unsigned int N_CORNERS = 6
 number of corners in the duct x-sec More...
 
static const std::array< bool, 3 > periodic_dim_default
 
static const std::string type_param
 
static const std::string name_param
 
static const std::string unique_name_param
 
static const std::string app_param
 
static const std::string moose_base_param
 
static const std::string kokkos_object_param
 

Protected Types

typedef std::vector< BndNode *>::iterator bnd_node_iterator_imp
 
typedef std::vector< BndNode *>::const_iterator const_bnd_node_iterator_imp
 
typedef std::vector< BndElement *>::iterator bnd_elem_iterator_imp
 
typedef std::vector< BndElement *>::const_iterator const_bnd_elem_iterator_imp
 

Protected Member Functions

void cacheInfo ()
 
void freeBndNodes ()
 
void freeBndElems ()
 
void setPartitionerHelper (MeshBase *mesh=nullptr)
 
void flagInvalidSolutionInternal (const InvalidSolutionID invalid_solution_id) const
 
InvalidSolutionID registerInvalidSolutionInternal (const std::string &message, const bool warning) const
 
TdeclareRestartableData (const std::string &data_name, Args &&... args)
 
ManagedValue< TdeclareManagedRestartableDataWithContext (const std::string &data_name, void *context, Args &&... args)
 
const TgetRestartableData (const std::string &data_name) const
 
TdeclareRestartableDataWithContext (const std::string &data_name, void *context, Args &&... args)
 
TdeclareRecoverableData (const std::string &data_name, Args &&... args)
 
TdeclareRestartableDataWithObjectName (const std::string &data_name, const std::string &object_name, Args &&... args)
 
TdeclareRestartableDataWithObjectNameWithContext (const std::string &data_name, const std::string &object_name, void *context, Args &&... args)
 
std::string restartableName (const std::string &data_name) const
 
PerfID registerTimedSection (const std::string &section_name, const unsigned int level) const
 
PerfID registerTimedSection (const std::string &section_name, const unsigned int level, const std::string &live_message, const bool print_dots=true) const
 
std::string timedSectionName (const std::string &section_name) const
 

Protected Attributes

unsigned int _n_rings
 number of fuel-pin rings, counting the center pin as the first ring More...
 
unsigned int _n_channels
 number of subchannels More...
 
Real _flat_to_flat
 the distance between flat surfaces of the duct facing each other More...
 
Real _dwire
 wire diameter More...
 
Real _hwire
 wire lead length More...
 
Real _duct_to_pin_gap
 the gap thickness between the duct and peripheral fuel pins More...
 
std::vector< std::vector< Node * > > _nodes
 nodes More...
 
std::vector< std::vector< Node * > > _pin_nodes
 pin nodes More...
 
std::vector< std::pair< unsigned int, unsigned int > > _gap_to_chan_map
 stores the channel pairs for each gap More...
 
std::vector< std::pair< unsigned int, unsigned int > > _gap_to_pin_map
 stores the fuel pins belonging to each gap More...
 
std::vector< std::vector< unsigned int > > _chan_to_gap_map
 stores the gaps that forms each subchannel More...
 
std::vector< std::vector< Real > > _sign_id_crossflow_map
 Defines the global cross-flow direction -1 or 1 for each subchannel and for all gaps that are belonging to the corresponding subchannel. More...
 
std::vector< std::vector< Real > > _gij_map
 gap size More...
 
std::vector< Point > _pin_position
 x,y coordinates of the fuel pins More...
 
std::vector< std::vector< Real > > _pins_in_rings
 fuel pins that are belonging to each ring More...
 
std::vector< std::vector< unsigned int > > _chan_to_pin_map
 stores the fuel pins belonging to each subchannel More...
 
unsigned int _npins
 number of fuel pins More...
 
unsigned int _n_gaps
 number of gaps More...
 
std::vector< EChannelType_subch_type
 subchannel type More...
 
std::vector< EChannelType_gap_type
 gap type More...
 
std::vector< std::pair< unsigned int, unsigned int > > _gap_pairs_sf
 sweeping flow model gap pairs per channel to specify directional edge flow More...
 
std::vector< std::pair< unsigned int, unsigned int > > _chan_pairs_sf
 sweeping flow model channel pairs to specify directional edge flow More...
 
std::vector< std::vector< unsigned int > > _pin_to_chan_map
 channel indices corresponding to a given pin index More...
 
Real _unheated_length_entry
 unheated length of the fuel Pin at the entry of the assembly More...
 
Real _heated_length
 heated length of the fuel Pin More...
 
Real _unheated_length_exit
 unheated length of the fuel Pin at the exit of the assembly More...
 
std::vector< Real_z_grid
 axial location of nodes More...
 
std::vector< std::vector< Real > > _k_grid
 axial form loss coefficient per computational cell More...
 
std::vector< Node * > _duct_nodes
 A list of all mesh nodes that form the (elements of) the duct mesh that surrounds the pins/subchannels. More...
 
std::map< Node *, Node * > _chan_to_duct_node_map
 Maps between channel nodes and duct nodes. More...
 
std::map< Node *, Node * > _duct_node_to_chan_map
 
std::vector< Real_spacer_z
 axial location of the spacers More...
 
std::vector< Real_spacer_k
 form loss coefficient of the spacers More...
 
std::vector< Real_z_blockage
 axial location of blockage (inlet, outlet) [m] More...
 
std::vector< unsigned int_index_blockage
 index of subchannels affected by blockage More...
 
std::vector< Real_reduction_blockage
 area reduction of subchannels affected by blockage More...
 
Real _kij
 Lateral form loss coefficient. More...
 
Real _pitch
 Distance between the neighbor fuel pins, pitch. More...
 
Real _pin_diameter
 fuel Pin diameter More...
 
Real _assembly_flow_area
 Undeformed bundle inlet flow area. More...
 
Real _assembly_wetted_perimeter
 Undeformed bundle inlet wetted perimeter. More...
 
Real _assembly_hydraulic_diameter
 Undeformed bundle-average hydraulic diameter. More...
 
unsigned int _n_cells
 number of axial cells More...
 
 X
 
 Y
 
 Z
 
 MIN
 
 MAX
 
std::vector< std::unique_ptr< libMesh::GhostingFunctor > > _ghosting_functors
 
std::vector< std::shared_ptr< RelationshipManager > > _relationship_managers
 
bool _built_from_other_mesh
 
ParallelType _parallel_type
 
bool _use_distributed_mesh
 
bool _distribution_overridden
 
bool _parallel_type_overridden
 
std::unique_ptr< libMesh::MeshBase_mesh
 
std::unique_ptr< Moose::Kokkos::Mesh_kokkos_mesh
 
MooseEnum _partitioner_name
 
bool _partitioner_overridden
 
std::unique_ptr< libMesh::Partitioner_custom_partitioner
 
bool _custom_partitioner_requested
 
unsigned int _uniform_refine_level
 
bool _skip_refine_when_use_split
 
bool _skip_deletion_repartition_after_refine
 
bool _is_changed
 
bool _is_nemesis
 
bool _moose_mesh_prepared
 
std::unique_ptr< ConstElemPointerRange_refined_elements
 
std::unique_ptr< ConstElemPointerRange_coarsened_elements
 
std::map< const Elem *, std::vector< const Elem *> > _coarsened_element_children
 
std::set< Node *> _semilocal_node_list
 
std::unique_ptr< libMesh::ConstElemRange_active_local_elem_range
 
std::unique_ptr< SemiLocalNodeRange_active_semilocal_node_range
 
std::unique_ptr< libMesh::NodeRange_active_node_range
 
std::unique_ptr< libMesh::ConstNodeRange_local_node_range
 
std::unique_ptr< libMesh::StoredRange< MooseMesh::const_bnd_node_iterator, const BndNode *> > _bnd_node_range
 
std::unique_ptr< libMesh::StoredRange< MooseMesh::const_bnd_elem_iterator, const BndElement *> > _bnd_elem_range
 
std::map< dof_id_type, std::vector< dof_id_type > > _node_to_elem_map
 
bool _node_to_elem_map_built
 
std::map< dof_id_type, std::vector< dof_id_type > > _node_to_active_semilocal_elem_map
 
bool _node_to_active_semilocal_elem_map_built
 
std::set< SubdomainID_mesh_subdomains
 
std::unique_ptr< std::map< BoundaryID, RealVectorValue > > _boundary_to_normal_map
 
std::vector< BndNode *> _bnd_nodes
 
std::map< boundary_id_type, std::set< dof_id_type > > _bnd_node_ids
 
std::vector< BndElement *> _bnd_elems
 
std::unordered_map< boundary_id_type, std::unordered_set< dof_id_type > > _bnd_elem_ids
 
std::map< dof_id_type, Node *> _quadrature_nodes
 
std::map< dof_id_type, std::map< unsigned int, std::map< dof_id_type, Node *> > > _elem_to_side_to_qp_to_quadrature_nodes
 
std::vector< BndNode_extra_bnd_nodes
 
std::map< dof_id_type, std::set< SubdomainID > > _block_node_list
 
std::map< boundary_id_type, std::vector< dof_id_type > > _node_set_nodes
 
std::set< unsigned int_ghosted_boundaries
 
std::vector< Real_ghosted_boundaries_inflation
 
unsigned int _patch_size
 
unsigned int _ghosting_patch_size
 
unsigned int _max_leaf_size
 
Moose::PatchUpdateType _patch_update_strategy
 
std::vector< Node *> _node_map
 
bool _regular_orthogonal_mesh
 
std::vector< std::vector< Real > > _bounds
 
std::optional< std::vector< std::pair< BoundaryID, BoundaryID > > > _paired_boundary
 
const bool _is_split
 
const bool & _enabled
 
MooseApp_app
 
Factory_factory
 
ActionFactory_action_factory
 
const std::string & _type
 
const std::string & _name
 
const InputParameters_pars
 
MooseApp_restartable_app
 
const std::string _restartable_system_name
 
const THREAD_ID _restartable_tid
 
const bool _restartable_read_only
 
MooseApp_pg_moose_app
 
const std::string _prefix
 
std::set< BoundaryID_mesh_boundary_ids
 
std::set< BoundaryID_mesh_sideset_ids
 
std::set< BoundaryID_mesh_nodeset_ids
 
const Parallel::Communicator & _communicator
 

Friends

class SCMTriAssemblyMeshGenerator
 
class SCMTriDuctMeshGenerator
 
class SCMDetailedTriAssemblyMeshGenerator
 

Detailed Description

Mesh class for triangular, edge and corner subchannels for hexagonal lattice fuel assemblies.

Definition at line 22 of file TriSubChannelMesh.h.

Constructor & Destructor Documentation

◆ TriSubChannelMesh() [1/2]

TriSubChannelMesh::TriSubChannelMesh ( const InputParameters parameters)

Definition at line 25 of file TriSubChannelMesh.C.

25 : SubChannelMesh(params) {}
SubChannelMesh(const InputParameters &parameters)

◆ TriSubChannelMesh() [2/2]

TriSubChannelMesh::TriSubChannelMesh ( const TriSubChannelMesh other_mesh)

Definition at line 27 of file TriSubChannelMesh.C.

28  : SubChannelMesh(other_mesh),
29  _n_rings(other_mesh._n_rings),
30  _n_channels(other_mesh._n_channels),
31  _flat_to_flat(other_mesh._flat_to_flat),
32  _dwire(other_mesh._dwire),
33  _hwire(other_mesh._hwire),
35  _nodes(other_mesh._nodes),
36  _pin_nodes(other_mesh._pin_nodes),
38  _gap_to_pin_map(other_mesh._gap_to_pin_map),
41  _gij_map(other_mesh._gij_map),
42  _pin_position(other_mesh._pin_position),
43  _pins_in_rings(other_mesh._pins_in_rings),
45  _npins(other_mesh._npins),
46  _n_gaps(other_mesh._n_gaps),
47  _subch_type(other_mesh._subch_type),
48  _gap_type(other_mesh._gap_type),
49  _gap_pairs_sf(other_mesh._gap_pairs_sf),
50  _chan_pairs_sf(other_mesh._chan_pairs_sf),
52 {
53 }
std::vector< EChannelType > _subch_type
subchannel type
std::vector< std::vector< Real > > _sign_id_crossflow_map
Defines the global cross-flow direction -1 or 1 for each subchannel and for all gaps that are belongi...
std::vector< std::vector< unsigned int > > _pin_to_chan_map
channel indices corresponding to a given pin index
std::vector< std::pair< unsigned int, unsigned int > > _gap_to_chan_map
stores the channel pairs for each gap
std::vector< std::vector< unsigned int > > _chan_to_pin_map
stores the fuel pins belonging to each subchannel
Real _dwire
wire diameter
Real _hwire
wire lead length
Real _duct_to_pin_gap
the gap thickness between the duct and peripheral fuel pins
std::vector< std::pair< unsigned int, unsigned int > > _gap_to_pin_map
stores the fuel pins belonging to each gap
unsigned int _n_rings
number of fuel-pin rings, counting the center pin as the first ring
Real _flat_to_flat
the distance between flat surfaces of the duct facing each other
std::vector< std::vector< unsigned int > > _chan_to_gap_map
stores the gaps that forms each subchannel
unsigned int _npins
number of fuel pins
std::vector< std::vector< Real > > _gij_map
gap size
std::vector< std::vector< Real > > _pins_in_rings
fuel pins that are belonging to each ring
std::vector< std::vector< Node * > > _nodes
nodes
std::vector< EChannelType > _gap_type
gap type
std::vector< std::vector< Node * > > _pin_nodes
pin nodes
std::vector< Point > _pin_position
x,y coordinates of the fuel pins
std::vector< std::pair< unsigned int, unsigned int > > _gap_pairs_sf
sweeping flow model gap pairs per channel to specify directional edge flow
unsigned int _n_channels
number of subchannels
SubChannelMesh(const InputParameters &parameters)
std::vector< std::pair< unsigned int, unsigned int > > _chan_pairs_sf
sweeping flow model channel pairs to specify directional edge flow
unsigned int _n_gaps
number of gaps

Member Function Documentation

◆ buildMesh()

void TriSubChannelMesh::buildMesh ( )
overridevirtual

Implements MooseMesh.

Definition at line 140 of file TriSubChannelMesh.C.

141 {
142 }

◆ channelIndex()

unsigned int TriSubChannelMesh::channelIndex ( const Point &  point) const
overridevirtual

Function that returns the subchannel index given a point Determining a channel index given a point Looping over all subchannels to determine the closest one to the point Special treatment for edge and corner subchannels since deformed elements may lead to wrong transfers

Implements SubChannelMesh.

Definition at line 69 of file TriSubChannelMesh.C.

Referenced by getSubchannelIndexFromPoint().

70 {
75 
76  // Distances to determine the closest subchannel
77  Real distance0 = 1.0e+8; // Dummy distance to keep updating the closes distance found
78  Real distance1; // Distance to be updated with the current subchannel distance
79  unsigned int j = 0; // Index to keep track of the closest point to subchannel
80 
81  // Projecting point into hexahedral coordinated to determine if the point belongs to a center
82  // subchannel
83  Real distance_outer_ring = _flat_to_flat / 2 - _duct_to_pin_gap - _pin_diameter / 2;
84  Real channel_distance = std::sqrt(std::pow(p(0), 2) + std::pow(p(1), 2));
85  Real angle = std::abs(std::atan2(p(1), p(0)));
86  Real projection_angle =
87  angle - libMesh::pi / 6 - std::trunc(angle / (libMesh::pi / 3)) * (libMesh::pi / 3);
88  channel_distance = channel_distance * std::cos(projection_angle);
89 
90  // Projecting point on top edge to determine if the point is a corner or edge subchannel by x
91  // coordinate
92  Real loc_angle = std::atan2(p(1), p(0));
93  if (loc_angle < 0.0)
94  loc_angle += 2 * libMesh::pi;
95  Real rem_ang = std::trunc(loc_angle / (libMesh::pi / 3)) * (libMesh::pi / 3) - libMesh::pi / 3;
96  Real x_coord_new = (std::cos(-rem_ang) * p(0) - std::sin(-rem_ang) * p(1));
97  Real x_lim = (_n_rings - 1) * _pitch / 2.0;
98 
99  // looping over all channels
100  for (unsigned int i = 0; i < _n_channels; i++)
101  {
102  // Distance from the point to subchannel
103  distance1 = std::sqrt(std::pow((p(0) - _subchannel_position[i][0]), 2.0) +
104  std::pow((p(1) - _subchannel_position[i][1]), 2.0));
105 
106  // If subchannel belongs to center ring
107  if (channel_distance < distance_outer_ring)
108  {
109  if ((distance1 < distance0) && (_subch_type[i] == EChannelType::CENTER))
110  {
111  j = i;
112  distance0 = distance1;
113  } // if
114  } // if
115  // If subchannel belongs to outer ring
116  else
117  {
118  if ((distance1 < distance0) &&
120  {
121  if (((x_coord_new > x_lim) || (x_coord_new < -x_lim)) &&
123  {
124  j = i;
125  distance0 = distance1;
126  } // if
127  else if ((x_coord_new <= x_lim && x_coord_new >= -x_lim) &&
129  {
130  j = i;
131  distance0 = distance1;
132  }
133  }
134  }
135  }
136  return j;
137 }
std::vector< EChannelType > _subch_type
subchannel type
Real _duct_to_pin_gap
the gap thickness between the duct and peripheral fuel pins
std::vector< std::vector< Real > > _subchannel_position
x,y coordinates of the subchannel centroids
unsigned int _n_rings
number of fuel-pin rings, counting the center pin as the first ring
Real _flat_to_flat
the distance between flat surfaces of the duct facing each other
Real _pin_diameter
fuel Pin diameter
Real _pitch
Distance between the neighbor fuel pins, pitch.
DIE A HORRIBLE DEATH HERE typedef LIBMESH_DEFAULT_SCALAR_TYPE Real
const Real p
static const std::complex< double > j(0, 1)
Complex number "j" (also known as "i")
MooseUnits pow(const MooseUnits &, int)
unsigned int _n_channels
number of subchannels
const Real pi

◆ computeAssemblyHydraulicParameters()

void TriSubChannelMesh::computeAssemblyHydraulicParameters ( )

Compute undeformed bundle-average inlet hydraulic quantities from generated mesh geometry.

Definition at line 145 of file TriSubChannelMesh.C.

146 {
147  _assembly_flow_area = 0.0;
150 
151  const Real z = _z_grid.empty() ? 0.0 : _z_grid.front();
152 
153  for (unsigned int i_ch = 0; i_ch < _n_channels; i_ch++)
154  {
157  }
158 
159  if (_assembly_wetted_perimeter == 0.0)
160  mooseError(name(), ": Assembly wetted perimeter is zero; cannot compute hydraulic diameter.");
161 
163 }
std::vector< Real > _z_grid
axial location of nodes
Real getSubchannelWettedPerimeter(unsigned int i_chan) const override
Return undeformed wetted perimeter for a subchannel.
const std::string & name() const
Real _assembly_wetted_perimeter
Undeformed bundle inlet wetted perimeter.
Real _assembly_flow_area
Undeformed bundle inlet flow area.
DIE A HORRIBLE DEATH HERE typedef LIBMESH_DEFAULT_SCALAR_TYPE Real
void mooseError(Args &&... args) const
Real getSubchannelFlowArea(unsigned int i_chan, Real z) const override
Return undeformed flow area for a subchannel at an axial location, including any blockage reduction...
unsigned int _n_channels
number of subchannels
Real _assembly_hydraulic_diameter
Undeformed bundle-average hydraulic diameter.

◆ ductMeshExist()

bool SubChannelMesh::ductMeshExist ( ) const
inlineinherited

Return if Duct Mesh exists or not.

Definition at line 101 of file SubChannelMesh.h.

101 { return _duct_mesh_exist; }

◆ generateZGrid()

void SubChannelMesh::generateZGrid ( Real  unheated_length_entry,
Real  heated_length,
Real  unheated_length_exit,
unsigned int  n_cells,
std::vector< Real > &  z_grid 
)
staticinherited

Generate the spacing in z-direction using heated and unteaded lengths.

Definition at line 58 of file SubChannelMesh.C.

Referenced by SCMQuadAssemblyMeshGenerator::SCMQuadAssemblyMeshGenerator(), SCMQuadDuctMeshGenerator::SCMQuadDuctMeshGenerator(), SCMTriAssemblyMeshGenerator::SCMTriAssemblyMeshGenerator(), and SCMTriDuctMeshGenerator::SCMTriDuctMeshGenerator().

63 {
64  Real L = unheated_length_entry + heated_length + unheated_length_exit;
65  Real dz = L / n_cells;
66  for (unsigned int i = 0; i < n_cells + 1; i++)
67  z_grid.push_back(dz * i);
68 }
DIE A HORRIBLE DEATH HERE typedef LIBMESH_DEFAULT_SCALAR_TYPE Real
dof_id_type n_cells

◆ getAssemblyFlowArea()

Real SubChannelMesh::getAssemblyFlowArea ( ) const
inlineinherited

Return undeformed bundle inlet flow area.

Definition at line 152 of file SubChannelMesh.h.

Referenced by SubChannel1PhaseProblem::externalSolve().

152 { return _assembly_flow_area; }
Real _assembly_flow_area
Undeformed bundle inlet flow area.

◆ getAssemblyHydraulicDiameter()

Real SubChannelMesh::getAssemblyHydraulicDiameter ( ) const
inlineinherited

Return undeformed bundle-average hydraulic diameter.

Definition at line 162 of file SubChannelMesh.h.

Referenced by SubChannel1PhaseProblem::externalSolve().

Real _assembly_hydraulic_diameter
Undeformed bundle-average hydraulic diameter.

◆ getAssemblyWettedPerimeter()

Real SubChannelMesh::getAssemblyWettedPerimeter ( ) const
inlineinherited

Return undeformed bundle inlet wetted perimeter.

Definition at line 157 of file SubChannelMesh.h.

157 { return _assembly_wetted_perimeter; }
Real _assembly_wetted_perimeter
Undeformed bundle inlet wetted perimeter.

◆ getChannelGaps()

const std::vector<unsigned int>& TriSubChannelMesh::getChannelGaps ( unsigned int  i_chan) const
inlineoverridevirtual

Return a vector of gap indices for a given channel index.

Implements SubChannelMesh.

Definition at line 98 of file TriSubChannelMesh.h.

99  {
100  return _chan_to_gap_map[i_chan];
101  }
std::vector< std::vector< unsigned int > > _chan_to_gap_map
stores the gaps that forms each subchannel

◆ getChannelNode()

Node* TriSubChannelMesh::getChannelNode ( unsigned int  i_chan,
unsigned int  iz 
) const
inlineoverridevirtual

Get the subchannel mesh node for a given channel index and elevation index.

Implements SubChannelMesh.

Definition at line 79 of file TriSubChannelMesh.h.

80  {
81  return _nodes[i_chan][iz];
82  }
std::vector< std::vector< Node * > > _nodes
nodes

◆ getChannelNodeFromDuct()

Node * SubChannelMesh::getChannelNodeFromDuct ( Node *  duct_node) const
inherited

Function that gets the channel node from the duct node.

Definition at line 104 of file SubChannelMesh.C.

Referenced by SubChannel1PhaseProblem::externalSolve().

105 {
106  auto it = _duct_node_to_chan_map.find(duct_node);
107  return (it == _duct_node_to_chan_map.end()) ? nullptr : it->second;
108 }
std::map< Node *, Node * > _duct_node_to_chan_map

◆ getChannelPins()

const std::vector<unsigned int>& TriSubChannelMesh::getChannelPins ( unsigned int  i_chan) const
inlineoverridevirtual

Return a vector of pin indices for a given channel index.

Implements SubChannelMesh.

Definition at line 141 of file TriSubChannelMesh.h.

142  {
143  return _chan_to_pin_map[i_chan];
144  }
std::vector< std::vector< unsigned int > > _chan_to_pin_map
stores the fuel pins belonging to each subchannel

◆ getCrossflowSign()

const Real& TriSubChannelMesh::getCrossflowSign ( unsigned int  i_chan,
unsigned int  i_local 
) const
inlineoverridevirtual

Return a sign for the crossflow given a subchannel index and local neighbor index.

Implements SubChannelMesh.

Definition at line 103 of file TriSubChannelMesh.h.

104  {
105  return _sign_id_crossflow_map[i_chan][i_local];
106  }
std::vector< std::vector< Real > > _sign_id_crossflow_map
Defines the global cross-flow direction -1 or 1 for each subchannel and for all gaps that are belongi...

◆ getDuctNodeFromChannel()

Node * SubChannelMesh::getDuctNodeFromChannel ( Node *  channel_node) const
inherited

Function that gets the duct node from the channel node.

Definition at line 97 of file SubChannelMesh.C.

Referenced by SubChannel1PhaseProblem::computeAddedHeatDuct().

98 {
99  auto it = _chan_to_duct_node_map.find(channel_node);
100  return (it == _chan_to_duct_node_map.end()) ? nullptr : it->second;
101 }
std::map< Node *, Node * > _chan_to_duct_node_map
Maps between channel nodes and duct nodes.

◆ getDuctNodes()

const std::vector<Node *>& SubChannelMesh::getDuctNodes ( ) const
inlineinherited

Function that returns the vector with the duct nodes.

Definition at line 223 of file SubChannelMesh.h.

Referenced by SubChannel1PhaseProblem::externalSolve().

223 { return _duct_nodes; }
std::vector< Node * > _duct_nodes
A list of all mesh nodes that form the (elements of) the duct mesh that surrounds the pins/subchannel...

◆ getDuctToPinGap()

const Real& TriSubChannelMesh::getDuctToPinGap ( ) const
inline

◆ getFlatToFlat()

const Real& TriSubChannelMesh::getFlatToFlat ( ) const
inline

Return flat to flat [m].

Definition at line 72 of file TriSubChannelMesh.h.

Referenced by TriSubChannel1PhaseProblem::initializeSolution().

72 { return _flat_to_flat; }
Real _flat_to_flat
the distance between flat surfaces of the duct facing each other

◆ getGapChannels()

const std::pair<unsigned int, unsigned int>& TriSubChannelMesh::getGapChannels ( unsigned int  i_gap) const
inlineoverridevirtual

Return a pair of subchannel indices for a given gap index.

Implements SubChannelMesh.

Definition at line 88 of file TriSubChannelMesh.h.

89  {
90  return _gap_to_chan_map[i_gap];
91  }
std::vector< std::pair< unsigned int, unsigned int > > _gap_to_chan_map
stores the channel pairs for each gap

◆ getGapPins()

const std::pair<unsigned int, unsigned int>& TriSubChannelMesh::getGapPins ( unsigned int  i_gap) const
inlineoverridevirtual

Return a pair of pin indices for a given gap index.

Implements SubChannelMesh.

Definition at line 93 of file TriSubChannelMesh.h.

94  {
95  return _gap_to_pin_map[i_gap];
96  }
std::vector< std::pair< unsigned int, unsigned int > > _gap_to_pin_map
stores the fuel pins belonging to each gap

◆ getGapWidth()

Real TriSubChannelMesh::getGapWidth ( unsigned int  axial_index,
unsigned int  gap_index 
) const
inlineoverridevirtual

Return gap width for a given gap index.

Implements SubChannelMesh.

Definition at line 113 of file TriSubChannelMesh.h.

Referenced by TriSubChannel1PhaseProblem::initializeSolution().

114  {
115  return _gij_map[axial_index][gap_index];
116  }
std::vector< std::vector< Real > > _gij_map
gap size

◆ getHeatedLength()

virtual const Real& SubChannelMesh::getHeatedLength ( ) const
inlinevirtualinherited

◆ getHeatedLengthEntry()

virtual const Real& SubChannelMesh::getHeatedLengthEntry ( ) const
inlinevirtualinherited

◆ getHeatedLengthExit()

virtual const Real& SubChannelMesh::getHeatedLengthExit ( ) const
inlinevirtualinherited

Return unheated length at exit.

Definition at line 193 of file SubChannelMesh.h.

Referenced by SCMPinSurfaceTemperature::execute(), SCMPlanarMean::execute(), and QuadSubChannelNormalSliceValues::output().

193 { return _unheated_length_exit; }
Real _unheated_length_exit
unheated length of the fuel Pin at the exit of the assembly

◆ getIndexBlockage()

virtual const std::vector<unsigned int>& SubChannelMesh::getIndexBlockage ( ) const
inlinevirtualinherited

Get index of blocked subchannels.

Definition at line 51 of file SubChannelMesh.h.

Referenced by QuadSubChannel1PhaseProblem::initializeSolution(), TriSubChannel1PhaseProblem::initializeSolution(), and MarvelTriFlowAreaIC::value().

51 { return _index_blockage; }
std::vector< unsigned int > _index_blockage
index of subchannels affected by blockage

◆ getKGrid()

virtual const std::vector<std::vector<Real> >& SubChannelMesh::getKGrid ( ) const
inlinevirtualinherited

Get axial cell location and value of loss coefficient.

Definition at line 41 of file SubChannelMesh.h.

Referenced by SubChannel1PhaseProblem::computeDP().

41 { return _k_grid; }
std::vector< std::vector< Real > > _k_grid
axial form loss coefficient per computational cell

◆ getKij()

virtual const Real& SubChannelMesh::getKij ( ) const
inlinevirtualinherited

Return lateral loss coefficient.

Definition at line 61 of file SubChannelMesh.h.

61 { return _kij; }
Real _kij
Lateral form loss coefficient.

◆ getNumOfAxialCells()

virtual unsigned int SubChannelMesh::getNumOfAxialCells ( ) const
inlinevirtualinherited

◆ getNumOfChannels()

unsigned int TriSubChannelMesh::getNumOfChannels ( ) const
inlineoverridevirtual

Return the number of channels per layer.

Implements SubChannelMesh.

Definition at line 84 of file TriSubChannelMesh.h.

84 { return processor_id() == 0 ? _n_channels : 0; }
processor_id_type processor_id() const
unsigned int _n_channels
number of subchannels

◆ getNumOfGapsPerLayer()

unsigned int TriSubChannelMesh::getNumOfGapsPerLayer ( ) const
inlineoverridevirtual

Return the number of gaps per layer.

Implements SubChannelMesh.

Definition at line 86 of file TriSubChannelMesh.h.

86 { return processor_id() == 0 ? _n_gaps : 0; }
processor_id_type processor_id() const
unsigned int _n_gaps
number of gaps

◆ getNumOfPins()

unsigned int TriSubChannelMesh::getNumOfPins ( ) const
inlineoverridevirtual

Return the number of pins.

Implements SubChannelMesh.

Definition at line 39 of file TriSubChannelMesh.h.

Referenced by SCMTriPowerAux::initialSetup(), SCMTriPowerIC::initialSetup(), SCMTriPowerAux::SCMTriPowerAux(), and SCMTriPowerIC::SCMTriPowerIC().

39 { return processor_id() == 0 ? _npins : 0; }
unsigned int _npins
number of fuel pins
processor_id_type processor_id() const

◆ getNumOfRings()

const unsigned int& TriSubChannelMesh::getNumOfRings ( ) const
inline

Return the number of fuel-pin rings, counting the center pin as the first ring.

Definition at line 54 of file TriSubChannelMesh.h.

Referenced by SCMMixingChengTodreas::computeMixingParameter(), SCMMixingChengTodreas::computeSweepFlowMixingParameter(), TriSubChannel1PhaseProblem::initializeSolution(), SCMFrictionUpdatedChengTodreas::SCMFrictionUpdatedChengTodreas(), and SCMMixingChengTodreas::SCMMixingChengTodreas().

54 { return _n_rings; }
unsigned int _n_rings
number of fuel-pin rings, counting the center pin as the first ring

◆ getPinChannels()

const std::vector<unsigned int>& TriSubChannelMesh::getPinChannels ( unsigned int  i_pin) const
inlineoverridevirtual

Return a vector of channel indices for a given Pin index.

Implements SubChannelMesh.

Definition at line 136 of file TriSubChannelMesh.h.

137  {
138  return _pin_to_chan_map[i_pin];
139  }
std::vector< std::vector< unsigned int > > _pin_to_chan_map
channel indices corresponding to a given pin index

◆ getPinDiameter()

virtual const Real& SubChannelMesh::getPinDiameter ( ) const
inlinevirtualinherited

◆ getPinIndex()

const unsigned int& TriSubChannelMesh::getPinIndex ( const unsigned int  channel_idx,
const unsigned int  neighbor_idx 
)
inline

Return Pin index given subchannel index and local neighbor index.

Definition at line 59 of file TriSubChannelMesh.h.

60  {
61  return _chan_to_pin_map[channel_idx][neighbor_idx];
62  }
std::vector< std::vector< unsigned int > > _chan_to_pin_map
stores the fuel pins belonging to each subchannel

◆ getPinIndexFromPoint()

unsigned int TriSubChannelMesh::getPinIndexFromPoint ( const Point &  p) const
overridevirtual

Return a pin index for a given physical point p

Function that returns the pin number given a point

Implements SubChannelMesh.

Definition at line 228 of file TriSubChannelMesh.C.

Referenced by SCMTriPowerAux::computeValue(), and SCMTriPowerIC::value().

229 {
231 
232  return this->pinIndex(p);
233 }
const Real p
unsigned int pinIndex(const Point &p) const override

◆ getPinNode()

Node* TriSubChannelMesh::getPinNode ( unsigned int  i_pin,
unsigned int  iz 
) const
inlineoverridevirtual

Get the pin mesh node for a given pin index and elevation index.

Implements SubChannelMesh.

Definition at line 41 of file TriSubChannelMesh.h.

42  {
43  return _pin_nodes[i_pin][iz];
44  }
std::vector< std::vector< Node * > > _pin_nodes
pin nodes

◆ getPitch()

virtual const Real& SubChannelMesh::getPitch ( ) const
inlinevirtualinherited

◆ getReductionBlockage()

virtual const std::vector<Real>& SubChannelMesh::getReductionBlockage ( ) const
inlinevirtualinherited

Get area reduction of blocked subchannels.

Definition at line 56 of file SubChannelMesh.h.

Referenced by QuadSubChannel1PhaseProblem::initializeSolution(), TriSubChannel1PhaseProblem::initializeSolution(), and MarvelTriFlowAreaIC::value().

56 { return _reduction_blockage; }
std::vector< Real > _reduction_blockage
area reduction of subchannels affected by blockage

◆ getSubchannelFlowArea()

Real TriSubChannelMesh::getSubchannelFlowArea ( unsigned int  i_chan,
Real  z 
) const
overridevirtual

Return undeformed flow area for a subchannel at an axial location, including any blockage reduction.

Implements SubChannelMesh.

Definition at line 166 of file TriSubChannelMesh.C.

Referenced by computeAssemblyHydraulicParameters(), and SCMTriFlowAreaIC::value().

167 {
168  Real standard_area = 0.0;
169  Real rod_area = 0.0;
170  Real wire_area = 0.0;
171 
172  const Real theta =
173  std::acos(_hwire / std::sqrt(std::pow(_hwire, 2) +
175  const auto subch_type = getSubchannelType(i_chan);
176  if (subch_type == EChannelType::CENTER)
177  {
178  standard_area = std::pow(_pitch, 2) * std::sqrt(3.0) / 4.0;
179  rod_area = libMesh::pi * std::pow(_pin_diameter, 2) / 8.0;
180  wire_area = libMesh::pi * std::pow(_dwire, 2) / 8.0 / std::cos(theta);
181  }
182  else if (subch_type == EChannelType::EDGE)
183  {
184  standard_area = _pitch * (_pin_diameter / 2.0 + _duct_to_pin_gap);
185  rod_area = libMesh::pi * std::pow(_pin_diameter, 2) / 8.0;
186  wire_area = libMesh::pi * std::pow(_dwire, 2) / 8.0 / std::cos(theta);
187  }
188  else
189  {
190  standard_area = 1.0 / std::sqrt(3.0) * std::pow(_pin_diameter / 2.0 + _duct_to_pin_gap, 2);
191  rod_area = libMesh::pi * std::pow(_pin_diameter, 2) / 24.0;
192  wire_area = libMesh::pi * std::pow(_dwire, 2) / 24.0 / std::cos(theta);
193  }
194 
195  Real flow_area = standard_area - rod_area - wire_area;
196 
197  unsigned int blockage_index = 0;
198  for (const auto & i_blockage : _index_blockage)
199  {
200  if (i_chan == i_blockage && z >= _z_blockage.front() && z <= _z_blockage.back())
201  flow_area *= _reduction_blockage[blockage_index];
202  blockage_index++;
203  }
204 
205  return flow_area;
206 }
Real _dwire
wire diameter
Real _hwire
wire lead length
Real _duct_to_pin_gap
the gap thickness between the duct and peripheral fuel pins
std::vector< Real > _z_blockage
axial location of blockage (inlet, outlet) [m]
Real _pin_diameter
fuel Pin diameter
std::vector< Real > _reduction_blockage
area reduction of subchannels affected by blockage
Real _pitch
Distance between the neighbor fuel pins, pitch.
DIE A HORRIBLE DEATH HERE typedef LIBMESH_DEFAULT_SCALAR_TYPE Real
EChannelType getSubchannelType(unsigned int index) const override
Return the type of the subchannel for given subchannel index.
MooseUnits pow(const MooseUnits &, int)
std::vector< unsigned int > _index_blockage
index of subchannels affected by blockage
const Real pi

◆ getSubchannelIndexFromPoint()

unsigned int TriSubChannelMesh::getSubchannelIndexFromPoint ( const Point &  p) const
overridevirtual

Return a subchannel index for a given physical point p

Function that returns the subchannel index given a point

Implements SubChannelMesh.

Definition at line 62 of file TriSubChannelMesh.C.

Referenced by MarvelTriWettedPerimIC::value(), SCMTriWettedPerimIC::value(), FCTFdisplacementIC::value(), SCMTriFlowAreaIC::value(), and MarvelTriFlowAreaIC::value().

63 {
65  return this->channelIndex(p);
66 }
unsigned int channelIndex(const Point &point) const override
const Real p

◆ getSubchannelType()

EChannelType TriSubChannelMesh::getSubchannelType ( unsigned int  index) const
inlineoverridevirtual

Return the type of the subchannel for given subchannel index.

Implements SubChannelMesh.

Definition at line 111 of file TriSubChannelMesh.h.

Referenced by getSubchannelFlowArea(), getSubchannelWettedPerimeter(), MarvelTriWettedPerimIC::value(), FCTFdisplacementIC::value(), and MarvelTriFlowAreaIC::value().

111 { return _subch_type[index]; }
std::vector< EChannelType > _subch_type
subchannel type

◆ getSubchannelWettedPerimeter()

Real TriSubChannelMesh::getSubchannelWettedPerimeter ( unsigned int  i_chan) const
overridevirtual

Return undeformed wetted perimeter for a subchannel.

Implements SubChannelMesh.

Definition at line 209 of file TriSubChannelMesh.C.

Referenced by computeAssemblyHydraulicParameters(), and SCMTriWettedPerimIC::value().

210 {
211  const Real theta =
212  std::acos(_hwire / std::sqrt(std::pow(_hwire, 2) +
214  const Real rod_circumference = libMesh::pi * _pin_diameter;
215  const Real wire_circumference = libMesh::pi * _dwire;
216  const auto subch_type = getSubchannelType(i_chan);
217 
218  if (subch_type == EChannelType::CENTER)
219  return 0.5 * rod_circumference + 0.5 * wire_circumference / std::cos(theta);
220  else if (subch_type == EChannelType::EDGE)
221  return 0.5 * rod_circumference + 0.5 * wire_circumference / std::cos(theta) + _pitch;
222  else
223  return (rod_circumference + wire_circumference / std::cos(theta)) / 6.0 +
224  2.0 / std::sqrt(3.0) * (_pin_diameter / 2.0 + _duct_to_pin_gap);
225 }
Real _dwire
wire diameter
Real _hwire
wire lead length
Real _duct_to_pin_gap
the gap thickness between the duct and peripheral fuel pins
Real _pin_diameter
fuel Pin diameter
Real _pitch
Distance between the neighbor fuel pins, pitch.
DIE A HORRIBLE DEATH HERE typedef LIBMESH_DEFAULT_SCALAR_TYPE Real
EChannelType getSubchannelType(unsigned int index) const override
Return the type of the subchannel for given subchannel index.
MooseUnits pow(const MooseUnits &, int)
const Real pi

◆ getSweepFlowChans()

const std::pair<unsigned int, unsigned int>& TriSubChannelMesh::getSweepFlowChans ( unsigned int  i_chan) const
inline

Definition at line 131 of file TriSubChannelMesh.h.

Referenced by TriSubChannel1PhaseProblem::computeh().

132  {
133  return _chan_pairs_sf[i_chan];
134  }
std::vector< std::pair< unsigned int, unsigned int > > _chan_pairs_sf
sweeping flow model channel pairs to specify directional edge flow

◆ getSweepFlowGaps()

const std::pair<unsigned int, unsigned int>& TriSubChannelMesh::getSweepFlowGaps ( unsigned int  i_chan) const
inline

Definition at line 126 of file TriSubChannelMesh.h.

127  {
128  return _gap_pairs_sf[i_chan];
129  }
std::vector< std::pair< unsigned int, unsigned int > > _gap_pairs_sf
sweeping flow model gap pairs per channel to specify directional edge flow

◆ getWireDiameter()

const Real& TriSubChannelMesh::getWireDiameter ( ) const
inline

◆ getWireLeadLength()

const Real& TriSubChannelMesh::getWireLeadLength ( ) const
inline

◆ getZBlockage()

virtual const std::vector<Real>& SubChannelMesh::getZBlockage ( ) const
inlinevirtualinherited

Get axial location of blockage (in,out) [m].

Definition at line 46 of file SubChannelMesh.h.

Referenced by QuadSubChannel1PhaseProblem::initializeSolution(), TriSubChannel1PhaseProblem::initializeSolution(), and MarvelTriFlowAreaIC::value().

46 { return _z_blockage; }
std::vector< Real > _z_blockage
axial location of blockage (inlet, outlet) [m]

◆ getZGrid()

virtual const std::vector<Real>& SubChannelMesh::getZGrid ( ) const
inlinevirtualinherited

◆ getZIndex()

unsigned int SubChannelMesh::getZIndex ( const Point &  point) const
virtualinherited

Get axial index of point.

Definition at line 71 of file SubChannelMesh.C.

Referenced by SubChannel1PhaseProblem::externalSolve(), SCMSolutionTransfer::getFromNode(), and SubChannelMesh::setChannelToDuctMaps().

72 {
73  if (_z_grid.size() == 0)
74  mooseError("_z_grid is empty.");
75 
76  if (point(2) <= _z_grid[0])
77  return 0;
78  if (point(2) >= _z_grid[_z_grid.size() - 1])
79  return _z_grid.size() - 1;
80 
81  unsigned int lo = 0;
82  unsigned int hi = _z_grid.size();
83  while (lo < hi)
84  {
85  unsigned int mid = (lo + hi) / 2;
86  if (std::abs(_z_grid[mid] - point(2)) < 1e-5)
87  return mid;
88  else if (_z_grid[mid] < point(2))
89  lo = mid;
90  else
91  hi = mid;
92  }
93  return lo;
94 }
std::vector< Real > _z_grid
axial location of nodes
void mooseError(Args &&... args) const

◆ pinIndex()

unsigned int TriSubChannelMesh::pinIndex ( const Point &  p) const
overridevirtual

Function that returns the pin number given a point

Implements SubChannelMesh.

Definition at line 236 of file TriSubChannelMesh.C.

Referenced by getPinIndexFromPoint().

237 {
239 
240  // Define the current ring
241  Real distance_rod;
242  Real d0 = 1e5;
243  unsigned int current_rod = 0;
244 
245  std::vector<Point> positions;
246  Point center(0, 0);
247  this->pinPositions(positions, _n_rings, _pitch, center);
248  for (unsigned int i = 0; i < _npins; i++)
249  {
250  Real x_dist = positions[i](0) - p(0);
251  Real y_dist = positions[i](1) - p(1);
252  distance_rod = std::sqrt(std::pow(x_dist, 2) + std::pow(y_dist, 2));
253  if (distance_rod < d0)
254  {
255  d0 = distance_rod;
256  current_rod = i;
257  }
258  }
259 
260  return current_rod;
261 }
static void pinPositions(std::vector< Point > &positions, unsigned int nrings, Real pitch, Point center)
Calculates and stores the pin positions/centers for a hexagonal assembly containing the given number ...
unsigned int _n_rings
number of fuel-pin rings, counting the center pin as the first ring
unsigned int _npins
number of fuel pins
Real _pitch
Distance between the neighbor fuel pins, pitch.
DIE A HORRIBLE DEATH HERE typedef LIBMESH_DEFAULT_SCALAR_TYPE Real
const Real p
MooseUnits pow(const MooseUnits &, int)
static const std::string center
Definition: NS.h:29

◆ pinMeshExist()

bool SubChannelMesh::pinMeshExist ( ) const
inlineinherited

◆ pinPositions()

void TriSubChannelMesh::pinPositions ( std::vector< Point > &  positions,
unsigned int  nrings,
Real  pitch,
Point  center 
)
static

Calculates and stores the pin positions/centers for a hexagonal assembly containing the given number of rings in a triangular/alternating row grid spaced 'pitch' apart.

The points are generated such that the duct is centered at the given center point.

Defining parameters

Definition at line 264 of file TriSubChannelMesh.C.

Referenced by pinIndex(), SCMDetailedTriAssemblyMeshGenerator::SCMDetailedTriAssemblyMeshGenerator(), SCMTriAssemblyMeshGenerator::SCMTriAssemblyMeshGenerator(), and TEST().

268 {
270  // distance: it is the distance to the next Pin
271  //
272  Real theta = 0.0;
273  Real dtheta = 0.0;
274  Real distance = 0.0;
275  Real theta1 = 0.0;
276  Real theta_corrected = 0.0;
277  Real pi = libMesh::pi;
278  unsigned int k = 0;
279  positions.emplace_back(center(0), center(1));
280  for (unsigned int i = 1; i < nrings; i++)
281  {
282  dtheta = 2.0 * pi / (i * 6);
283  theta = 0.0;
284  for (unsigned int j = 0; j < i * 6; j++)
285  {
286  k = k + 1;
287  theta1 = fmod(theta + 1.0e-10, pi / 3.0);
288  distance = std::sqrt((pow(i * pitch, 2) + pow(theta1 / dtheta * pitch, 2) -
289  2.0 * i * pitch * (theta1 / dtheta * pitch) * std::cos(pi / 3.0)));
290  double argument = 1.0 / (i * pitch) / distance / 2.0 *
291  (std::pow(i * pitch, 2.0) + std::pow(distance, 2.0) -
292  std::pow(theta1 / dtheta * pitch, 2.0));
293  // Check if the argument to std::acos() is within the valid range [-1, 1]
294  if (argument >= -1.0 && argument <= 1.0)
295  {
296  theta_corrected = std::acos(argument);
297  }
298  else if (argument > 1.0)
299  {
300  theta_corrected = 0.0;
301  }
302  else
303  {
304  theta_corrected = pi;
305  }
306  if (theta1 < 1.0e-6)
307  {
308  theta_corrected = theta;
309  }
310  else
311  {
312  if (theta > pi / 3.0 && theta <= 2.0 / 3.0 * pi)
313  theta_corrected = theta_corrected + pi / 3.0;
314  else if (theta > 2.0 / 3.0 * pi && theta <= pi)
315  theta_corrected = theta_corrected + 2.0 / 3.0 * pi;
316  else if (theta > pi && theta <= 4.0 / 3.0 * pi)
317  theta_corrected = theta_corrected + pi;
318  else if (theta > 4.0 / 3.0 * pi && theta <= 5.0 / 3.0 * pi)
319  theta_corrected = theta_corrected + 4.0 / 3.0 * pi;
320  else if (theta > 5.0 / 3.0 * pi && theta <= 2.0 * pi)
321  theta_corrected = theta_corrected + 5.0 / 3.0 * pi;
322  }
323  positions.emplace_back(center(0) + distance * std::cos(theta_corrected),
324  center(1) + distance * std::sin(theta_corrected));
325  theta = theta + dtheta;
326  } // j
327  } // i
328 }
Real distance(const Point &p)
static const std::string pitch
ExpressionBuilder::EBTerm pow(const ExpressionBuilder::EBTerm &left, T exponent)
DIE A HORRIBLE DEATH HERE typedef LIBMESH_DEFAULT_SCALAR_TYPE Real
static const std::complex< double > j(0, 1)
Complex number "j" (also known as "i")
MooseUnits pow(const MooseUnits &, int)
static const std::string k
Definition: NS.h:134
static const std::string center
Definition: NS.h:29
const Real pi

◆ safeClone()

std::unique_ptr< MooseMesh > TriSubChannelMesh::safeClone ( ) const
overridevirtual

Implements MooseMesh.

Definition at line 56 of file TriSubChannelMesh.C.

57 {
58  return _app.getFactory().copyConstruct(*this);
59 }
std::unique_ptr< T > copyConstruct(const T &object)
Factory & getFactory()
MooseApp & _app

◆ setChannelToDuctMaps()

void SubChannelMesh::setChannelToDuctMaps ( const std::vector< Node *> &  duct_nodes)
inherited

Function that sets the channel-to-duct maps.

Definition at line 111 of file SubChannelMesh.C.

Referenced by SCMQuadDuctMeshGenerator::generate(), and SCMTriDuctMeshGenerator::generate().

112 {
113  _duct_nodes.clear();
114  _chan_to_duct_node_map.clear();
115  _duct_node_to_chan_map.clear();
116 
117  if (_z_grid.empty())
118  mooseError("setChannelToDuctMaps: _z_grid is empty; cannot match duct nodes by z.");
119 
120  if (_subchannel_position.empty())
121  mooseError(
122  "setChannelToDuctMaps: _subchannel_position is empty; cannot map duct nodes to channels.");
123 
124  for (size_t i = 0; i < duct_nodes.size(); ++i)
125  {
126  Node * dn = duct_nodes[i];
127 
128  // 1) Find closest subchannel center in XY
129  unsigned int min_chan = 0;
130  Real min_dist = std::numeric_limits<Real>::max();
131 
132  const Point ductpos((*dn)(0), (*dn)(1), 0.0);
133 
134  for (unsigned int j = 0; j < _subchannel_position.size(); ++j)
135  {
136  const Point chanpos(_subchannel_position[j][0], _subchannel_position[j][1], 0.0);
137  const Real dist = (chanpos - ductpos).norm();
138 
139  if (dist < min_dist)
140  {
141  min_dist = dist;
142  min_chan = j;
143  }
144  }
145 
146  // 2) Find channel node at the same z using getZIndex + virtual accessor
147  const unsigned int iz = getZIndex(*dn);
148  Node * chan_node = getChannelNode(min_chan, iz);
149 
150  // 3) Store bidirectional mapping
151  _duct_node_to_chan_map[dn] = chan_node;
152  _chan_to_duct_node_map[chan_node] = dn;
153  }
154 
155  _duct_nodes = duct_nodes;
156  _duct_mesh_exist = true;
157 }
std::vector< Real > _z_grid
axial location of nodes
std::map< Node *, Node * > _duct_node_to_chan_map
std::vector< std::vector< Real > > _subchannel_position
x,y coordinates of the subchannel centroids
std::vector< Node * > _duct_nodes
A list of all mesh nodes that form the (elements of) the duct mesh that surrounds the pins/subchannel...
virtual Node * getChannelNode(unsigned int i_chan, unsigned int iz) const =0
Get the subchannel mesh node for a given channel index and elevation index.
DIE A HORRIBLE DEATH HERE typedef LIBMESH_DEFAULT_SCALAR_TYPE Real
std::map< Node *, Node * > _chan_to_duct_node_map
Maps between channel nodes and duct nodes.
auto norm(const T &a)
void mooseError(Args &&... args) const
static const std::complex< double > j(0, 1)
Complex number "j" (also known as "i")
virtual unsigned int getZIndex(const Point &point) const
Get axial index of point.

◆ setGapWidth()

void TriSubChannelMesh::setGapWidth ( unsigned int  axial_index,
unsigned int  gap_index,
Real  gap_width 
)
inline

Set the gap width for a given axial cell and gap index.

Definition at line 121 of file TriSubChannelMesh.h.

Referenced by TriSubChannel1PhaseProblem::initializeSolution().

122  {
123  _gij_map[axial_index][gap_index] = gap_width;
124  }
std::vector< std::vector< Real > > _gij_map
gap size

◆ validParams()

InputParameters TriSubChannelMesh::validParams ( )
static

Definition at line 17 of file TriSubChannelMesh.C.

18 {
20  params.addClassDescription("Creates an subchannel mesh container for a triangular "
21  "lattice arrangement");
22  return params;
23 }
static InputParameters validParams()
void addClassDescription(const std::string &doc_string)

Friends And Related Function Documentation

◆ SCMDetailedTriAssemblyMeshGenerator

Definition at line 225 of file TriSubChannelMesh.h.

◆ SCMTriAssemblyMeshGenerator

friend class SCMTriAssemblyMeshGenerator
friend

Definition at line 223 of file TriSubChannelMesh.h.

◆ SCMTriDuctMeshGenerator

friend class SCMTriDuctMeshGenerator
friend

Definition at line 224 of file TriSubChannelMesh.h.

Member Data Documentation

◆ _assembly_flow_area

Real SubChannelMesh::_assembly_flow_area
protectedinherited

◆ _assembly_hydraulic_diameter

Real SubChannelMesh::_assembly_hydraulic_diameter
protectedinherited

◆ _assembly_wetted_perimeter

Real SubChannelMesh::_assembly_wetted_perimeter
protectedinherited

◆ _chan_pairs_sf

std::vector<std::pair<unsigned int, unsigned int> > TriSubChannelMesh::_chan_pairs_sf
protected

sweeping flow model channel pairs to specify directional edge flow

Definition at line 206 of file TriSubChannelMesh.h.

Referenced by getSweepFlowChans().

◆ _chan_to_duct_node_map

std::map<Node *, Node *> SubChannelMesh::_chan_to_duct_node_map
protectedinherited

Maps between channel nodes and duct nodes.

Definition at line 251 of file SubChannelMesh.h.

Referenced by SubChannelMesh::getDuctNodeFromChannel(), and SubChannelMesh::setChannelToDuctMaps().

◆ _chan_to_gap_map

std::vector<std::vector<unsigned int> > TriSubChannelMesh::_chan_to_gap_map
protected

stores the gaps that forms each subchannel

Definition at line 173 of file TriSubChannelMesh.h.

Referenced by getChannelGaps().

◆ _chan_to_pin_map

std::vector<std::vector<unsigned int> > TriSubChannelMesh::_chan_to_pin_map
protected

stores the fuel pins belonging to each subchannel

Definition at line 191 of file TriSubChannelMesh.h.

Referenced by getChannelPins(), and getPinIndex().

◆ _duct_mesh_exist

bool SubChannelMesh::_duct_mesh_exist = false
inherited

◆ _duct_node_to_chan_map

std::map<Node *, Node *> SubChannelMesh::_duct_node_to_chan_map
protectedinherited

◆ _duct_nodes

std::vector<Node *> SubChannelMesh::_duct_nodes
protectedinherited

A list of all mesh nodes that form the (elements of) the duct mesh that surrounds the pins/subchannels.

Definition at line 248 of file SubChannelMesh.h.

Referenced by SubChannelMesh::getDuctNodes(), and SubChannelMesh::setChannelToDuctMaps().

◆ _duct_to_pin_gap

Real TriSubChannelMesh::_duct_to_pin_gap
protected

the gap thickness between the duct and peripheral fuel pins

Definition at line 161 of file TriSubChannelMesh.h.

Referenced by channelIndex(), getDuctToPinGap(), getSubchannelFlowArea(), and getSubchannelWettedPerimeter().

◆ _dwire

Real TriSubChannelMesh::_dwire
protected

wire diameter

Definition at line 157 of file TriSubChannelMesh.h.

Referenced by getSubchannelFlowArea(), getSubchannelWettedPerimeter(), and getWireDiameter().

◆ _flat_to_flat

Real TriSubChannelMesh::_flat_to_flat
protected

the distance between flat surfaces of the duct facing each other

Definition at line 155 of file TriSubChannelMesh.h.

Referenced by channelIndex(), and getFlatToFlat().

◆ _gap_pairs_sf

std::vector<std::pair<unsigned int, unsigned int> > TriSubChannelMesh::_gap_pairs_sf
protected

sweeping flow model gap pairs per channel to specify directional edge flow

Definition at line 204 of file TriSubChannelMesh.h.

Referenced by getSweepFlowGaps().

◆ _gap_to_chan_map

std::vector<std::pair<unsigned int, unsigned int> > TriSubChannelMesh::_gap_to_chan_map
protected

stores the channel pairs for each gap

Definition at line 169 of file TriSubChannelMesh.h.

Referenced by getGapChannels().

◆ _gap_to_pin_map

std::vector<std::pair<unsigned int, unsigned int> > TriSubChannelMesh::_gap_to_pin_map
protected

stores the fuel pins belonging to each gap

Definition at line 171 of file TriSubChannelMesh.h.

Referenced by getGapPins().

◆ _gap_type

std::vector<EChannelType> TriSubChannelMesh::_gap_type
protected

gap type

Definition at line 201 of file TriSubChannelMesh.h.

◆ _gij_map

std::vector<std::vector<Real> > TriSubChannelMesh::_gij_map
protected

gap size

Definition at line 182 of file TriSubChannelMesh.h.

Referenced by getGapWidth(), and setGapWidth().

◆ _heated_length

Real SubChannelMesh::_heated_length
protectedinherited

heated length of the fuel Pin

Definition at line 237 of file SubChannelMesh.h.

Referenced by SubChannelMesh::getHeatedLength(), and SCMQuadAssemblyMeshGenerator::transferMetadata().

◆ _hwire

Real TriSubChannelMesh::_hwire
protected

wire lead length

Definition at line 159 of file TriSubChannelMesh.h.

Referenced by getSubchannelFlowArea(), getSubchannelWettedPerimeter(), and getWireLeadLength().

◆ _index_blockage

std::vector<unsigned int> SubChannelMesh::_index_blockage
protectedinherited

◆ _k_grid

std::vector<std::vector<Real> > SubChannelMesh::_k_grid
protectedinherited

axial form loss coefficient per computational cell

Definition at line 244 of file SubChannelMesh.h.

Referenced by SubChannelMesh::getKGrid(), and SCMQuadAssemblyMeshGenerator::transferMetadata().

◆ _kij

Real SubChannelMesh::_kij
protectedinherited

Lateral form loss coefficient.

Definition at line 267 of file SubChannelMesh.h.

Referenced by SubChannelMesh::getKij(), and SCMQuadAssemblyMeshGenerator::transferMetadata().

◆ _n_cells

unsigned int SubChannelMesh::_n_cells
protectedinherited

number of axial cells

Definition at line 280 of file SubChannelMesh.h.

Referenced by SubChannelMesh::getNumOfAxialCells(), and SCMQuadAssemblyMeshGenerator::transferMetadata().

◆ _n_channels

unsigned int TriSubChannelMesh::_n_channels
protected

number of subchannels

Definition at line 153 of file TriSubChannelMesh.h.

Referenced by channelIndex(), computeAssemblyHydraulicParameters(), and getNumOfChannels().

◆ _n_gaps

unsigned int TriSubChannelMesh::_n_gaps
protected

number of gaps

Definition at line 196 of file TriSubChannelMesh.h.

Referenced by getNumOfGapsPerLayer().

◆ _n_rings

unsigned int TriSubChannelMesh::_n_rings
protected

number of fuel-pin rings, counting the center pin as the first ring

Definition at line 151 of file TriSubChannelMesh.h.

Referenced by channelIndex(), getNumOfRings(), and pinIndex().

◆ _nodes

std::vector<std::vector<Node *> > TriSubChannelMesh::_nodes
protected

nodes

Definition at line 164 of file TriSubChannelMesh.h.

Referenced by getChannelNode().

◆ _npins

unsigned int TriSubChannelMesh::_npins
protected

number of fuel pins

Definition at line 194 of file TriSubChannelMesh.h.

Referenced by getNumOfPins(), and pinIndex().

◆ _pin_diameter

Real SubChannelMesh::_pin_diameter
protectedinherited

◆ _pin_mesh_exist

bool SubChannelMesh::_pin_mesh_exist = false
inherited

◆ _pin_nodes

std::vector<std::vector<Node *> > TriSubChannelMesh::_pin_nodes
protected

pin nodes

Definition at line 166 of file TriSubChannelMesh.h.

Referenced by getPinNode().

◆ _pin_position

std::vector<Point> TriSubChannelMesh::_pin_position
protected

x,y coordinates of the fuel pins

Definition at line 185 of file TriSubChannelMesh.h.

◆ _pin_to_chan_map

std::vector<std::vector<unsigned int> > TriSubChannelMesh::_pin_to_chan_map
protected

channel indices corresponding to a given pin index

Definition at line 209 of file TriSubChannelMesh.h.

Referenced by getPinChannels().

◆ _pins_in_rings

std::vector<std::vector<Real> > TriSubChannelMesh::_pins_in_rings
protected

fuel pins that are belonging to each ring

Definition at line 188 of file TriSubChannelMesh.h.

◆ _pitch

Real SubChannelMesh::_pitch
protectedinherited

◆ _reduction_blockage

std::vector<Real> SubChannelMesh::_reduction_blockage
protectedinherited

◆ _sign_id_crossflow_map

std::vector<std::vector<Real> > TriSubChannelMesh::_sign_id_crossflow_map
protected

Defines the global cross-flow direction -1 or 1 for each subchannel and for all gaps that are belonging to the corresponding subchannel.

Given a subchannel and a gap, if the neighbor subchannel index belonging to the same gap is lower, set it to -1, otherwise set it to 1.

Definition at line 179 of file TriSubChannelMesh.h.

Referenced by getCrossflowSign().

◆ _spacer_k

std::vector<Real> SubChannelMesh::_spacer_k
protectedinherited

form loss coefficient of the spacers

Definition at line 257 of file SubChannelMesh.h.

Referenced by SCMQuadAssemblyMeshGenerator::transferMetadata().

◆ _spacer_z

std::vector<Real> SubChannelMesh::_spacer_z
protectedinherited

axial location of the spacers

Definition at line 255 of file SubChannelMesh.h.

Referenced by SCMQuadAssemblyMeshGenerator::transferMetadata().

◆ _subch_type

std::vector<EChannelType> TriSubChannelMesh::_subch_type
protected

subchannel type

Definition at line 199 of file TriSubChannelMesh.h.

Referenced by channelIndex(), and getSubchannelType().

◆ _subchannel_position

std::vector<std::vector<Real> > SubChannelMesh::_subchannel_position
inherited

◆ _unheated_length_entry

Real SubChannelMesh::_unheated_length_entry
protectedinherited

unheated length of the fuel Pin at the entry of the assembly

Definition at line 235 of file SubChannelMesh.h.

Referenced by SCMTriAssemblyMeshGenerator::generate(), SubChannelMesh::getHeatedLengthEntry(), and SCMQuadAssemblyMeshGenerator::transferMetadata().

◆ _unheated_length_exit

Real SubChannelMesh::_unheated_length_exit
protectedinherited

unheated length of the fuel Pin at the exit of the assembly

Definition at line 239 of file SubChannelMesh.h.

Referenced by SubChannelMesh::getHeatedLengthExit(), and SCMQuadAssemblyMeshGenerator::transferMetadata().

◆ _z_blockage

std::vector<Real> SubChannelMesh::_z_blockage
protectedinherited

◆ _z_grid

std::vector<Real> SubChannelMesh::_z_grid
protectedinherited

◆ N_CORNERS

const unsigned int TriSubChannelMesh::N_CORNERS = 6
static

number of corners in the duct x-sec

Definition at line 228 of file TriSubChannelMesh.h.

Referenced by SCMTriDuctMeshGenerator::ductCorners().


The documentation for this class was generated from the following files: