https://mooseframework.inl.gov
Loading...
Searching...
No Matches
Public Types | Public Member Functions | Static Public Member Functions | Public Attributes | Static Public Attributes | Protected Member Functions | Protected Attributes | Private Member Functions | Static Private Member Functions | Private Attributes | List of all members
INSFVVelocityVariable Class Referenceabstract

#include <INSFVVelocityVariable.h>

Inheritance diagram for INSFVVelocityVariable:
[legend]

Public Types

typedef typename MooseVariableField< OutputType >::OutputGradient OutputGradient
 
typedef typename MooseVariableField< OutputType >::OutputSecond OutputSecond
 
typedef typename MooseVariableField< OutputType >::OutputDivergence OutputDivergence
 
typedef typename MooseVariableField< OutputType >::FieldVariableValue FieldVariableValue
 
typedef typename MooseVariableField< OutputType >::FieldVariableGradient FieldVariableGradient
 
typedef typename MooseVariableField< OutputType >::FieldVariableSecond FieldVariableSecond
 
typedef typename MooseVariableField< OutputType >::FieldVariableCurl FieldVariableCurl
 
typedef typename MooseVariableField< OutputType >::FieldVariableDivergence FieldVariableDivergence
 
typedef typename MooseVariableField< OutputType >::OutputShape OutputShape
 
typedef typename MooseVariableField< OutputType >::OutputShapeGradient OutputShapeGradient
 
typedef typename MooseVariableField< OutputType >::OutputShapeSecond OutputShapeSecond
 
typedef typename MooseVariableField< OutputType >::OutputShapeDivergence OutputShapeDivergence
 
typedef typename MooseVariableField< OutputType >::FieldVariablePhiValue FieldVariablePhiValue
 
typedef typename MooseVariableField< OutputType >::FieldVariablePhiDivergence FieldVariablePhiDivergence
 
typedef typename MooseVariableField< OutputType >::FieldVariablePhiGradient FieldVariablePhiGradient
 
typedef typename MooseVariableField< OutputType >::FieldVariablePhiSecond FieldVariablePhiSecond
 
typedef Moose::ElemQpArg ElemQpArg
 
typedef Moose::ElemSideQpArg ElemSideQpArg
 
typedef Moose::ElemArg ElemArg
 
typedef Moose::FaceArg FaceArg
 
typedef Moose::StateArg StateArg
 
typedef Moose::NodeArg NodeArg
 
typedef Moose::ElemPointArg ElemPointArg
 
typedef MooseArray< std::vector< OutputShape > > FieldVariablePhiCurl
 
typedef MooseArray< std::vector< OutputShape > > FieldVariableTestValue
 
typedef MooseArray< std::vector< OutputShapeGradient > > FieldVariableTestGradient
 
typedef MooseArray< std::vector< OutputShapeSecond > > FieldVariableTestSecond
 
typedef MooseArray< std::vector< OutputShape > > FieldVariableTestCurl
 
typedef MooseArray< std::vector< OutputShapeDivergence > > FieldVariableTestDivergence
 
typedef typename MooseVariableDataBase< OutputType >::DofValue DofValue
 
typedef typename MooseVariableDataBase< OutputType >::DofValues DofValues
 
typedef typename MooseVariableDataBase< OutputType >::ADDofValue ADDofValue
 
typedef typename MooseVariableDataBase< OutputType >::ADDofValues ADDofValues
 
typedef DataFileName DataFileParameterType
 
typedef FunctorBase< Moose::ADType< OutputType >::typeFunctorType
 
typedef Moose::ADType< OutputType >::type ValueType
 
typedef typename FunctorReturnType< Moose::ADType< OutputType >::type, FunctorEvaluationKind::Gradient >::type GradientType
 
typedef ValueType DotType
 

Public Member Functions

 INSFVVelocityVariable (const InputParameters &params)
 
const VectorValue< ADReal > & adGradSln (const Elem *const elem, const StateArg &time, bool correct_skewness=false) const override
 
VectorValue< ADRealuncorrectedAdGradSln (const FaceInfo &fi, const StateArg &time, const bool correct_skewness=false) const override
 
void computeFaceValues (const FaceInfo &) override
 
void computeElemValues () override
 
void computeElemValuesFace () override
 
void computeNeighborValuesFace () override
 
void computeNeighborValues () override
 
void requireQpComputations () const override
 
bool supportsQpBasedLoops () const override
 
bool supportsGeometricInfoBasedLoops () const override
 
virtual void initialSetup () override
 
virtual void timestepSetup () override
 
virtual void meshChanged () override
 
bool isSeparatorBoundary (const FaceInfo &fi) const
 
bool isExtrapolatedBoundaryFace (const FaceInfo &fi, const Elem *elem, const Moose::StateArg &time) const override
 
virtual bool isExtrapolatedBoundaryFace (const FaceInfo &, const Elem *, const StateArg &) const
 
virtual bool isFV () const override
 
virtual void prepare () override final
 
virtual void prepareNeighbor () override final
 
virtual void prepareAux () override final
 
virtual void reinitNode () override final
 
virtual void reinitNodes (const std::vector< dof_id_type > &) override final
 
virtual void reinitNodesNeighbor (const std::vector< dof_id_type > &) override final
 
virtual void reinitAux () override final
 
virtual void reinitAuxNeighbor () override final
 
virtual void prepareLowerD () override final
 
virtual const dof_id_type & nodalDofIndex () const override final
 
virtual const dof_id_type & nodalDofIndexNeighbor () const override final
 
virtual std::size_t phiSize () const override final
 
virtual std::size_t phiFaceSize () const override final
 
virtual std::size_t phiNeighborSize () const override final
 
virtual std::size_t phiFaceNeighborSize () const override final
 
virtual std::size_t phiLowerSize () const override final
 
virtual void computeLowerDValues () override final
 
virtual void computeNodalNeighborValues () override final
 
virtual void computeNodalValues () override final
 
virtual const std::vector< dof_id_type > & dofIndicesLower () const override final
 
unsigned int numberOfDofs () const override final
 
virtual unsigned int numberOfDofsNeighbor () override final
 
virtual bool isNodal () const override final
 
bool hasDoFsOnNodes () const override final
 
libMesh::FEContinuity getContinuity () const override final
 
virtual bool isNodalDefined () const override final
 
virtual void setNodalValue (const OutputType &value, unsigned int idx=0) override
 
virtual void setDofValue (const DofValue &value, unsigned int index) override
 
void clearDofIndices () override
 
virtual void prepareIC () override
 
virtual const Elem *const & currentElem () const override
 
virtual void getDofIndices (const Elem *elem, std::vector< dof_id_type > &dof_indices) const override
 
virtual const std::vector< dof_id_type > & dofIndices () const final
 
virtual const std::vector< dof_id_type > & dofIndicesNeighbor () const final
 
Moose::FV::InterpMethod faceInterpolationMethod () const
 
void clearAllDofIndices () final
 
const DofValuesnodalVectorTagValue (TagID) const override
 
const DofValuesnodalMatrixTagValue (TagID) const override
 
const FieldVariableValuevectorTagValue (TagID tag) const override
 
const DofValuesvectorTagDofValue (TagID tag) const override
 
const FieldVariableValuematrixTagValue (TagID tag) const override
 
const FieldVariableValuevectorTagValueNeighbor (TagID tag)
 
const FieldVariableValuematrixTagValueNeighbor (TagID tag)
 
const FieldVariableValueuDot () const
 
const FieldVariableValuesln () const override
 
const FieldVariableValueslnOld () const override
 
const FieldVariableValueslnOlder () const override
 
const FieldVariableGradientgradSln () const override
 
const FieldVariableGradientgradSlnOld () const override
 
const FieldVariableValueuDotNeighbor () const
 
const FieldVariableValueslnNeighbor () const override
 
const FieldVariableValueslnOldNeighbor () const override
 
const FieldVariableGradientgradSlnNeighbor () const override
 
const FieldVariableGradientgradSlnOldNeighbor () const override
 
const VariableValueduDotDu () const
 
const VariableValueduDotDotDu () const
 
const VariableValueduDotDuNeighbor () const
 
const VariableValueduDotDotDuNeighbor () const
 
const ADTemplateVariableValue< OutputType > & adSln () const override
 
const ADTemplateVariableGradient< OutputType > & adGradSln () const override
 
virtual VectorValue< ADRealadGradSln (const FaceInfo &fi, const StateArg &state, const bool correct_skewness=false) const
 
ADReal getBoundaryFaceValue (const FaceInfo &fi, const StateArg &state, bool correct_skewness=false) const
 
const ADTemplateVariableSecond< OutputType > & adSecondSln () const override
 
const ADTemplateVariableValue< OutputType > & adUDot () const override
 
const ADTemplateVariableValue< OutputType > & adUDotDot () const override
 
const ADTemplateVariableGradient< OutputType > & adGradSlnDot () const override
 
const ADTemplateVariableCurl< OutputType > & adCurlSln () const override
 
const ADTemplateVariableValue< OutputType > & adSlnNeighbor () const override
 
const ADTemplateVariableGradient< OutputType > & adGradSlnNeighbor () const override
 
const ADTemplateVariableSecond< OutputType > & adSecondSlnNeighbor () const override
 
const ADTemplateVariableValue< OutputType > & adUDotNeighbor () const override
 
const ADTemplateVariableValue< OutputType > & adUDotDotNeighbor () const override
 
const ADTemplateVariableGradient< OutputType > & adGradSlnNeighborDot () const override
 
const ADTemplateVariableCurl< OutputType > & adCurlSlnNeighbor () const override
 
virtual void setDofValues (const DenseVector< DofValue > &values) override
 
virtual void setLowerDofValues (const DenseVector< DofValue > &values) override
 
DofValue getElementalValue (const Elem *elem, unsigned int idx=0) const
 
DofValue getElementalValueOld (const Elem *elem, unsigned int idx=0) const
 
DofValue getElementalValueOlder (const Elem *elem, unsigned int idx=0) const
 
virtual void insert (libMesh::NumericVector< libMesh::Number > &vector) override
 
virtual void insertLower (libMesh::NumericVector< libMesh::Number > &vector) override
 
virtual void add (libMesh::NumericVector< libMesh::Number > &vector) override
 
const DofValuesdofValues () const override
 
const DofValuesdofValuesOld () const override
 
const DofValuesdofValuesOlder () const override
 
const DofValuesdofValuesPreviousNL () const override
 
const DofValuesdofValuesNeighbor () const override
 
const DofValuesdofValuesOldNeighbor () const override
 
const DofValuesdofValuesOlderNeighbor () const override
 
const DofValuesdofValuesPreviousNLNeighbor () const override
 
const DofValuesdofValuesDot () const override
 
const DofValuesdofValuesDotNeighbor () const override
 
const DofValuesdofValuesDotOld () const override
 
const DofValuesdofValuesDotOldNeighbor () const override
 
const DofValuesdofValuesDotDot () const override
 
const DofValuesdofValuesDotDotNeighbor () const override
 
const DofValuesdofValuesDotDotOld () const override
 
const DofValuesdofValuesDotDotOldNeighbor () const override
 
const MooseArray< libMesh::Number > & dofValuesDuDotDu () const override
 
const MooseArray< libMesh::Number > & dofValuesDuDotDuNeighbor () const override
 
const MooseArray< libMesh::Number > & dofValuesDuDotDotDu () const override
 
const MooseArray< libMesh::Number > & dofValuesDuDotDotDuNeighbor () const override
 
const ADDofValuesadDofValues () const override
 
const ADDofValuesadDofValuesNeighbor () const override
 
const ADDofValuesadDofValuesDot () const override
 
OutputType getValue (const Elem *elem) const
 
OutputTools< OutputType >::OutputGradient getGradient (const Elem *elem) const
 
bool hasDirichletBC () const
 
std::pair< bool, const FVDirichletBCBase * > getDirichletBC (const FaceInfo &fi) const
 
std::pair< bool, std::vector< const FVFluxBC * > > getFluxBCs (const FaceInfo &fi) const
 
virtual void residualSetup () override
 
virtual void jacobianSetup () override
 
ADReal getElemValue (const Elem *elem, const StateArg &state) const
 
void setActiveTags (const std::set< TagID > &vtags) override
 
virtual bool isDirichletBoundaryFace (const FaceInfo &fi, const Elem *elem, const Moose::StateArg &state) const
 
bool supportsFaceArg () const override final
 
bool supportsElemSideQpArg () const override final
 
virtual void sizeMatrixTagData () override
 
const MooseArray< OutputType > & nodalValueArray () const override
 
const MooseArray< OutputType > & nodalValueOldArray () const override
 
const MooseArray< OutputType > & nodalValueOlderArray () const override
 
bool computingSecond () const override final
 
bool computingCurl () const override final
 
bool computingDiv () const override final
 
bool usesSecondPhiNeighbor () const override final
 
const FieldVariablePhiValuephi () const override final
 
const FieldVariablePhiGradientgradPhi () const override final
 
const FieldVariablePhiSecondsecondPhi () const override final
 
const FieldVariablePhiValuecurlPhi () const override final
 
const FieldVariablePhiDivergencedivPhi () const override final
 
const FieldVariablePhiValuephiFace () const override final
 
const FieldVariablePhiGradientgradPhiFace () const override final
 
const FieldVariablePhiSecondsecondPhiFace () const override final
 
const FieldVariablePhiValuephiFaceNeighbor () const override final
 
const FieldVariablePhiGradientgradPhiFaceNeighbor () const override final
 
const FieldVariablePhiSecondsecondPhiFaceNeighbor () const override final
 
const FieldVariablePhiValuephiNeighbor () const override final
 
const FieldVariablePhiGradientgradPhiNeighbor () const override final
 
const FieldVariablePhiSecondsecondPhiNeighbor () const override final
 
virtual const FieldVariablePhiValuephiLower () const override
 
unsigned int oldestSolutionStateRequested () const override final
 
const bool & getTwoTermBoundaryExpansion () const
 
virtual Moose::VarFieldType fieldType () const override
 
virtual bool isArray () const override
 
virtual bool isVector () const override
 
bool usesPhiNeighbor () const
 
bool usesGradPhiNeighbor () const
 
bool hasBlocks (const SubdomainName &name) const
 
bool hasBlocks (const std::vector< SubdomainName > &names) const
 
bool hasBlocks (const std::set< SubdomainName > &names) const
 
bool hasBlocks (const std::vector< SubdomainID > &ids) const
 
bool hasBlocks (const std::set< SubdomainID > &ids) const
 
bool hasBlocks (const SubdomainID id) const override
 
const std::string & componentName (const unsigned int comp) const
 
const std::set< SubdomainID > & activeSubdomains () const
 
bool activeOnSubdomain (SubdomainID subdomain) const
 
bool activeOnSubdomains (const std::set< SubdomainID > &subdomains) const
 
virtual bool needsGradientVectorStorage () const
 
const std::string & arrayVariableComponent (const unsigned int i) const
 
unsigned int number () const
 
const libMesh::FETypefeType () const
 
SystemBasesys ()
 
const SystemBasesys () const
 
bool useDual () const
 
const std::vector< dof_id_type > & allDofIndices () const
 
unsigned int totalVarDofs ()
 
Moose::VarKindType kind () const
 
void scalingFactor (const std::vector< Real > &factor)
 
Real scalingFactor () const
 
const std::vector< Real > & arrayScalingFactor () const
 
libMesh::Order order () const
 
unsigned int count () const
 
const libMesh::DofMapdofMap () const
 
std::vector< dof_id_type > componentDofIndices (const std::vector< dof_id_type > &dof_indices, unsigned int component) const
 
bool eigen () const
 
void eigen (bool eigen)
 
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 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
 
const std::vector< SubdomainName > & blocks () const
 
unsigned int numBlocks () const
 
virtual const std::set< SubdomainID > & blockIDs () const
 
unsigned int blocksMaxDimension () const
 
bool isBlockSubset (const std::set< SubdomainID > &ids) const
 
bool isBlockSubset (const std::vector< SubdomainID > &ids) const
 
bool hasBlockMaterialProperty (const std::string &prop_name)
 
const std::set< SubdomainID > & meshBlockIDs () const
 
virtual bool blockRestricted () const
 
virtual void checkVariable (const MooseVariableFieldBase &variable) const
 
void buildOutputHideVariableList (std::set< std::string > variable_names)
 
const std::set< OutputName > & getOutputs ()
 
virtual void subdomainSetup ()
 
virtual void customSetup (const ExecFlagType &)
 
virtual void customSetup (const ExecFlagType &exec_type) override
 
const ExecFlagEnumgetExecuteOnEnum () const
 
FunctorReturnType< Moose::ADType< OutputType >::type, FET >::type genericEvaluate (const Space &r, const State &state) const
 
const MooseFunctorName & functorName () const
 
void setCacheClearanceSchedule (const std::set< ExecFlagType > &clearance_schedule)
 
bool isInternalFace (const FaceInfo &) const
 
virtual bool isConstant () const
 
virtual bool hasFaceSide (const FaceInfo &fi, const bool fi_elem_side) const override
 
void checkFace (const Moose::FaceArg &face) const
 
ValueType operator() (const ElemArg &elem, const StateArg &state) const
 
ValueType operator() (const FaceArg &face, const StateArg &state) const
 
ValueType operator() (const ElemQpArg &qp, const StateArg &state) const
 
ValueType operator() (const ElemSideQpArg &qp, const StateArg &state) const
 
ValueType operator() (const ElemPointArg &elem_point, const StateArg &state) const
 
ValueType operator() (const NodeArg &node, const StateArg &state) const
 
ValueType operator() (const ElemArg &elem, const StateArg &state) const
 
ValueType operator() (const FaceArg &face, const StateArg &state) const
 
ValueType operator() (const ElemQpArg &qp, const StateArg &state) const
 
ValueType operator() (const ElemSideQpArg &qp, const StateArg &state) const
 
ValueType operator() (const ElemPointArg &elem_point, const StateArg &state) const
 
ValueType operator() (const NodeArg &node, const StateArg &state) const
 
ValueType operator() (const ElemArg &elem, const StateArg &state) const
 
ValueType operator() (const FaceArg &face, const StateArg &state) const
 
ValueType operator() (const ElemQpArg &qp, const StateArg &state) const
 
ValueType operator() (const ElemSideQpArg &qp, const StateArg &state) const
 
ValueType operator() (const ElemPointArg &elem_point, const StateArg &state) const
 
ValueType operator() (const NodeArg &node, const StateArg &state) const
 
GradientType gradient (const ElemArg &elem, const StateArg &state) const
 
GradientType gradient (const FaceArg &face, const StateArg &state) const
 
GradientType gradient (const ElemQpArg &qp, const StateArg &state) const
 
GradientType gradient (const ElemSideQpArg &qp, const StateArg &state) const
 
GradientType gradient (const ElemPointArg &elem_point, const StateArg &state) const
 
GradientType gradient (const NodeArg &node, const StateArg &state) const
 
GradientType gradient (const ElemArg &elem, const StateArg &state) const
 
GradientType gradient (const FaceArg &face, const StateArg &state) const
 
GradientType gradient (const ElemQpArg &qp, const StateArg &state) const
 
GradientType gradient (const ElemSideQpArg &qp, const StateArg &state) const
 
GradientType gradient (const ElemPointArg &elem_point, const StateArg &state) const
 
GradientType gradient (const NodeArg &node, const StateArg &state) const
 
GradientType gradient (const ElemArg &elem, const StateArg &state) const
 
GradientType gradient (const FaceArg &face, const StateArg &state) const
 
GradientType gradient (const ElemQpArg &qp, const StateArg &state) const
 
GradientType gradient (const ElemSideQpArg &qp, const StateArg &state) const
 
GradientType gradient (const ElemPointArg &elem_point, const StateArg &state) const
 
GradientType gradient (const NodeArg &node, const StateArg &state) const
 
DotType dot (const ElemArg &elem, const StateArg &state) const
 
DotType dot (const FaceArg &face, const StateArg &state) const
 
DotType dot (const ElemQpArg &qp, const StateArg &state) const
 
DotType dot (const ElemSideQpArg &qp, const StateArg &state) const
 
DotType dot (const ElemPointArg &elem_point, const StateArg &state) const
 
DotType dot (const NodeArg &node, const StateArg &state) const
 
DotType dot (const ElemArg &elem, const StateArg &state) const
 
DotType dot (const FaceArg &face, const StateArg &state) const
 
DotType dot (const ElemQpArg &qp, const StateArg &state) const
 
DotType dot (const ElemSideQpArg &qp, const StateArg &state) const
 
DotType dot (const ElemPointArg &elem_point, const StateArg &state) const
 
DotType dot (const NodeArg &node, const StateArg &state) const
 
DotType dot (const ElemArg &elem, const StateArg &state) const
 
DotType dot (const FaceArg &face, const StateArg &state) const
 
DotType dot (const ElemQpArg &qp, const StateArg &state) const
 
DotType dot (const ElemSideQpArg &qp, const StateArg &state) const
 
DotType dot (const ElemPointArg &elem_point, const StateArg &state) const
 
DotType dot (const NodeArg &node, const StateArg &state) const
 
GradientType gradDot (const ElemArg &elem, const StateArg &state) const
 
GradientType gradDot (const FaceArg &face, const StateArg &state) const
 
GradientType gradDot (const ElemQpArg &qp, const StateArg &state) const
 
GradientType gradDot (const ElemSideQpArg &qp, const StateArg &state) const
 
GradientType gradDot (const ElemPointArg &elem_point, const StateArg &state) const
 
GradientType gradDot (const NodeArg &node, const StateArg &state) const
 
GradientType gradDot (const ElemArg &elem, const StateArg &state) const
 
GradientType gradDot (const FaceArg &face, const StateArg &state) const
 
GradientType gradDot (const ElemQpArg &qp, const StateArg &state) const
 
GradientType gradDot (const ElemSideQpArg &qp, const StateArg &state) const
 
GradientType gradDot (const ElemPointArg &elem_point, const StateArg &state) const
 
GradientType gradDot (const NodeArg &node, const StateArg &state) const
 
GradientType gradDot (const ElemArg &elem, const StateArg &state) const
 
GradientType gradDot (const FaceArg &face, const StateArg &state) const
 
GradientType gradDot (const ElemQpArg &qp, const StateArg &state) const
 
GradientType gradDot (const ElemSideQpArg &qp, const StateArg &state) const
 
GradientType gradDot (const ElemPointArg &elem_point, const StateArg &state) const
 
GradientType gradDot (const NodeArg &node, const StateArg &state) const
 
const MooseArray< GenericReal< is_ad > > & genericDofValues () 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 callMooseError (MooseApp *const app, const InputParameters &params, std::string msg, const bool with_prefix, const hit::Node *node, const bool show_trace=true)
 

Public Attributes

 usingCombinedWarningSolutionWarnings
 
const ConsoleStream _console
 

Static Public Attributes

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 Member Functions

ADReal getExtrapolatedBoundaryFaceValue (const FaceInfo &fi, bool two_term_expansion, bool correct_skewness, const Elem *elem_side_to_extrapolate_from, const StateArg &time) const override
 
bool isFullyDevelopedFlowFace (const FaceInfo &fi) const
 Returns whether the passed-in FaceInfo corresponds to a fully-developed flow face.
 
void cacheSeparatorBoundaries ()
 Caches the separator boundaries.
 
virtual ADReal getDirichletBoundaryFaceValue (const FaceInfo &fi, const Elem *elem, const Moose::StateArg &state) const
 
void clearCaches ()
 
const libMesh::NumericVector< libMesh::Number > & getSolution (const Moose::StateArg &state) const
 
bool doDerivatives () const
 
void flagInvalidSolutionInternal (const InvalidSolutionID invalid_solution_id) const
 
InvalidSolutionID registerInvalidSolutionInternal (const std::string &message, const bool warning) const
 
virtual bool hasBlockMaterialPropertyHelper (const std::string &prop_name)
 
void initializeBlockRestrictable (const MooseObject *moose_object)
 
void initializeKokkosBlockRestrictable ()
 
Moose::CoordinateSystemType getBlockCoordSystem ()
 
KOKKOS_FUNCTION dof_id_type numKokkosBlockElements () const
 
KOKKOS_FUNCTION dof_id_type numKokkosBlockNodes () const
 
KOKKOS_FUNCTION dof_id_type numKokkosBlockSides () const
 
KOKKOS_FUNCTION ContiguousElementID kokkosBlockElementID (Moose::Kokkos::ThreadID tid) const
 
KOKKOS_FUNCTION ContiguousElementID kokkosBlockNodeID (Moose::Kokkos::ThreadID tid) const
 
KOKKOS_FUNCTION auto kokkosBlockElementSideID (Moose::Kokkos::ThreadID tid) const
 
virtual GradientType evaluateGradient (const ElemSideQpArg &, const StateArg &) const
 
virtual GradientType evaluateGradient (const ElemPointArg &, const StateArg &) const
 
virtual GradientType evaluateGradient (const NodeArg &, const StateArg &) const
 
virtual GradientType evaluateGradient (const ElemSideQpArg &, const StateArg &) const
 
virtual GradientType evaluateGradient (const ElemPointArg &, const StateArg &) const
 
virtual GradientType evaluateGradient (const NodeArg &, const StateArg &) const
 
virtual GradientType evaluateGradient (const ElemArg &, const StateArg &) const
 
virtual GradientType evaluateGradient (const FaceArg &, const StateArg &) const
 
virtual GradientType evaluateGradient (const ElemQpArg &, const StateArg &) const
 
virtual GradientType evaluateGradient (const ElemSideQpArg &, const StateArg &) const
 
virtual GradientType evaluateGradient (const ElemPointArg &, const StateArg &) const
 
virtual GradientType evaluateGradient (const NodeArg &, const StateArg &) const
 
virtual DotType evaluateDot (const ElemSideQpArg &, const StateArg &) const
 
virtual DotType evaluateDot (const ElemPointArg &, const StateArg &) const
 
virtual DotType evaluateDot (const NodeArg &, const StateArg &) const
 
virtual DotType evaluateDot (const ElemSideQpArg &, const StateArg &) const
 
virtual DotType evaluateDot (const ElemPointArg &, const StateArg &) const
 
virtual DotType evaluateDot (const NodeArg &, const StateArg &) const
 
virtual DotType evaluateDot (const ElemArg &, const StateArg &) const
 
virtual DotType evaluateDot (const FaceArg &, const StateArg &) const
 
virtual DotType evaluateDot (const ElemQpArg &, const StateArg &) const
 
virtual DotType evaluateDot (const ElemSideQpArg &, const StateArg &) const
 
virtual DotType evaluateDot (const ElemPointArg &, const StateArg &) const
 
virtual DotType evaluateDot (const NodeArg &, const StateArg &) const
 
virtual GradientType evaluateGradDot (const ElemArg &, const StateArg &) const
 
virtual GradientType evaluateGradDot (const FaceArg &, const StateArg &) const
 
virtual GradientType evaluateGradDot (const ElemQpArg &, const StateArg &) const
 
virtual GradientType evaluateGradDot (const ElemSideQpArg &, const StateArg &) const
 
virtual GradientType evaluateGradDot (const ElemPointArg &, const StateArg &) const
 
virtual GradientType evaluateGradDot (const NodeArg &, const StateArg &) const
 
virtual GradientType evaluateGradDot (const ElemArg &, const StateArg &) const
 
virtual GradientType evaluateGradDot (const FaceArg &, const StateArg &) const
 
virtual GradientType evaluateGradDot (const ElemQpArg &, const StateArg &) const
 
virtual GradientType evaluateGradDot (const ElemSideQpArg &, const StateArg &) const
 
virtual GradientType evaluateGradDot (const ElemPointArg &, const StateArg &) const
 
virtual GradientType evaluateGradDot (const NodeArg &, const StateArg &) const
 
virtual GradientType evaluateGradDot (const ElemArg &, const StateArg &) const
 
virtual GradientType evaluateGradDot (const FaceArg &, const StateArg &) const
 
virtual GradientType evaluateGradDot (const ElemQpArg &, const StateArg &) const
 
virtual GradientType evaluateGradDot (const ElemSideQpArg &, const StateArg &) const
 
virtual GradientType evaluateGradDot (const ElemPointArg &, const StateArg &) const
 
virtual GradientType evaluateGradDot (const NodeArg &, const StateArg &) const
 
virtual ValueType evaluate (const ElemArg &elem, const StateArg &state) const =0
 
virtual ValueType evaluate (const FaceArg &face, const StateArg &state) const =0
 
virtual ValueType evaluate (const ElemQpArg &qp, const StateArg &state) const =0
 
virtual ValueType evaluate (const ElemSideQpArg &side_qp, const StateArg &state) const =0
 
virtual ValueType evaluate (const ElemPointArg &elem_point, const StateArg &state) const =0
 
virtual ValueType evaluate (const NodeArg &node, const StateArg &state) const =0
 

Protected Attributes

std::unordered_map< BoundaryID, const INSFVHydraulicSeparatorInterface * > _boundary_id_to_separator
 A container for quick access of hydraulic separator BCs associated with this variable.
 
 usingMooseVariableFieldMembers
 
std::unique_ptr< MooseVariableDataFV< OutputType > > _element_data
 
std::unique_ptr< MooseVariableDataFV< OutputType > > _neighbor_data
 
std::unordered_map< const Elem *, VectorValue< ADReal > > _elem_to_grad
 
bool _two_term_boundary_expansion
 
VectorValue< ADReal_temp_cell_gradient
 
const bool _cache_cell_gradients
 
Moose::FV::InterpMethod _face_interp_method
 
SystemBase_sys
 
libMesh::FEType _fe_type
 
unsigned int _var_num
 
unsigned int _index
 
bool _is_eigen
 
Moose::VarKindType _var_kind
 
SubProblem_subproblem
 
const libMesh::Variable_variable
 
Assembly_assembly
 
const libMesh::DofMap_dof_map
 
std::vector< dof_id_type > _dof_indices
 
MooseMesh_mesh
 
THREAD_ID _tid
 
const unsigned int _count
 
std::vector< Real > _scaling_factor
 
bool _use_dual
 
bool _is_lower_d
 
std::vector< std::string > _array_var_component_names
 
const bool & _enabled
 
MooseApp_app
 
Factory_factory
 
ActionFactory_action_factory
 
const std::string & _type
 
const std::string & _name
 
const InputParameters_pars
 
const MaterialData_blk_material_data
 
const ExecFlagEnum_execute_enum
 
const ExecFlagType_current_execute_flag
 
FEProblemBase_mci_feproblem
 
const TimeIntegrator *const _time_integrator
 
ADReal _ad_real_dummy
 
const Parallel::Communicator & _communicator
 

Private Member Functions

GradientType evaluateGradient (const ElemQpArg &qp_arg, const StateArg &) const override final
 
GradientType evaluateGradient (const ElemArg &elem_arg, const StateArg &) const override final
 
GradientType evaluateGradient (const FaceArg &face, const StateArg &) const override final
 
DotType evaluateDot (const ElemArg &elem, const StateArg &) const override final
 
DotType evaluateDot (const FaceArg &face, const StateArg &) const override final
 
DotType evaluateDot (const ElemQpArg &elem_qp, const StateArg &) const override final
 
ValueType evaluate (const ElemArg &elem, const StateArg &) const override final
 
ValueType evaluate (const FaceArg &face, const StateArg &) const override final
 
ValueType evaluate (const NodeArg &node, const StateArg &) const override final
 
ValueType evaluate (const ElemPointArg &elem_point, const StateArg &state) const override final
 
ValueType evaluate (const ElemQpArg &elem_qp, const StateArg &state) const override final
 
ValueType evaluate (const ElemSideQpArg &elem_side_qp, const StateArg &state) const override final
 
void determineBoundaryToDirichletBCMap ()
 
void determineBoundaryToFluxBCMap ()
 
void lowerDError () const
 
void clearCacheData ()
 
ValueType queryQpCache (unsigned int qp, const libMesh::QBase &qrule, std::vector< std::pair< bool, Moose::ADType< OutputType >::type > > &qp_cache_data, const SpaceArg &space, const StateArg &state) const
 
ValueType queryFVArgCache (std::map< SpaceArg, ValueType > &cache_data, const SpaceArg &space) const
 

Static Private Member Functions

static const hit::Node * getHitNode (const InputParameters &params)
 
static std::string messagePrefix (const InputParameters &params, const bool hit_prefix)
 

Private Attributes

bool _qp_calculations
 Whether to pre-initialize variable data for use in traditional MOOSE quadrature point based objects.
 
bool _dirichlet_map_setup
 
bool _flux_map_setup
 
const libMesh::NumericVector< libMesh::Number > *const & _solution
 
const FieldVariablePhiValue_phi
 
const FieldVariablePhiGradient_grad_phi
 
const FieldVariablePhiValue_phi_face
 
const FieldVariablePhiGradient_grad_phi_face
 
const FieldVariablePhiValue_phi_face_neighbor
 
const FieldVariablePhiGradient_grad_phi_face_neighbor
 
const FieldVariablePhiValue_phi_neighbor
 
const FieldVariablePhiGradient_grad_phi_neighbor
 
const Elem * _prev_elem
 
std::unordered_map< BoundaryID, const FVDirichletBCBase * > _boundary_id_to_dirichlet_bc
 
std::unordered_map< BoundaryID, std::vector< const FVFluxBC * > > _boundary_id_to_flux_bc
 
const ParallelParamObject_parent
 
const MooseBase_si_moose_base
 
const FEProblemBase_si_problem
 
std::set< SubdomainID_blk_ids
 
std::vector< SubdomainID_vec_ids
 
std::vector< SubdomainName > _blocks
 
const bool _blk_dual_restrictable
 
FEProblemBase_blk_feproblem
 
const MooseMesh_blk_mesh
 
const std::set< BoundaryID_empty_boundary_ids
 
const std::set< BoundaryID > & _boundary_ids
 
THREAD_ID _blk_tid
 
const std::string & _blk_name
 
unsigned int _blk_dim
 
const MooseObject_moose_object
 
Moose::Kokkos::Array< ContiguousElementID_kokkos_element_ids
 
Moose::Kokkos::Array< ContiguousNodeID_kokkos_node_ids
 
Moose::Kokkos::Array< Moose::Kokkos::Pair< ContiguousElementID, unsigned int > > _kokkos_element_side_ids
 
MooseApp_oi_moose_app
 
OutputWarehouse_oi_output_warehouse
 
std::set< OutputName > _oi_outputs
 
ExecFlagEnum _empty_execute_enum
 
std::set< ExecFlagType_clearance_schedule
 
bool _always_evaluate
 
dof_id_type _current_qp_map_key
 
std::vector< std::pair< bool, ValueType > > * _current_qp_map_value
 
std::unordered_map< dof_id_type, std::vector< std::pair< bool, ValueType > > > _qp_to_value
 
dof_id_type _current_side_qp_map_key
 
std::vector< std::vector< std::pair< bool, ValueType > > > * _current_side_qp_map_value
 
std::unordered_map< dof_id_type, std::vector< std::vector< std::pair< bool, ValueType > > > > _side_qp_to_value
 
std::map< ElemArg, ValueType_elem_arg_to_value
 
std::map< FaceArg, ValueType_face_arg_to_value
 
std::map< NodeArg, ValueType_node_arg_to_value
 
MooseFunctorName _functor_name
 

Detailed Description

Definition at line 17 of file INSFVVelocityVariable.h.

Constructor & Destructor Documentation

◆ INSFVVelocityVariable()

INSFVVelocityVariable::INSFVVelocityVariable ( const InputParameters params)

Definition at line 65 of file INSFVVelocityVariable.C.

65 : INSFVVariable(params)
66{
67}

Member Function Documentation

◆ adGradSln()

const VectorValue< ADReal > & INSFVVelocityVariable::adGradSln ( const Elem *const  elem,
const StateArg time,
bool  correct_skewness = false 
) const
overridevirtual

Reimplemented from MooseVariableFV< Real >.

Definition at line 128 of file INSFVVelocityVariable.C.

131{
132 VectorValue<ADReal> * value_pointer = &_temp_cell_gradient;
133
134 // We ensure that no caching takes place when we compute skewness-corrected
135 // quantities.
136 if (_cache_cell_gradients && !correct_skewness && time.state == 0)
137 {
138 auto it = _elem_to_grad.find(elem);
139
140 if (it != _elem_to_grad.end())
141 return it->second;
142 }
143
144 ADReal elem_value = getElemValue(elem, time);
145
146 // We'll save off the extrapolated boundary faces (ebf) for later assignment to the cache (these
147 // are the keys). The boolean in the pair will denote whether the ebf face is a fully developed
148 // flow (e.g. fdf) face
149 std::vector<std::pair<const FaceInfo *, bool>> ebf_faces;
150
151 try
152 {
153 VectorValue<ADReal> & grad = *value_pointer;
154
155 bool volume_set = false;
156 Real volume = 0;
157
158 // If we are performing a two term Taylor expansion for extrapolated boundary faces (faces on
159 // boundaries that do not have associated Dirichlet conditions), then the element gradient
160 // depends on the boundary face value and the boundary face value depends on the element
161 // gradient, so we have a system of equations to solve. Here is the system:
162 //
163 // \nabla \phi_C - \frac{1}{V} \sum_{ebf} \phi_{ebf} \vec{S_f} =
164 // \frac{1}{V} \sum_{of} \phi_{of} \vec{S_f} eqn.
165 // 1
166 //
167 // \phi_{ebf} - \vec{d_{Cf}} \cdot \nabla \phi_C = \phi_C eqn.
168 // 2
169 //
170 // where $C$ refers to the cell centroid, $ebf$ refers to an extrapolated boundary face, $of$
171 // refers to "other faces", e.g. non-ebf faces, and $f$ is a general face. $d_{Cf}$ is the
172 // vector drawn from the element centroid to the face centroid, and $\vec{S_f}$ is the surface
173 // vector, e.g. the face area times the outward facing normal
174 //
175 // NOTE: On fully developed flow boundaries, we modify our equation set slightly. In equation
176 // 2,
177 // $\nabla \phi_C$ is replaced with $\nabla \phi_{ebf,fdf}$ where $fdf$ denotes fully
178 // developed flow. Moreover, we introduce a third equation:
179 //
180 // \nabla \phi_{ebf,fdf} - \nabla \phi_C + (\nabla \phi_C \cdot \hat{n}) \hat{n} = 0 eqn.
181 // 3
182 //
183 // These modifications correspond to Moukalled's equations 15.140 and 15.141, but with
184 // $\hat{e_b}$ replaced with $\hat{n}$ because we believe the equation as written doesn't
185 // reflect the intent of the text, which is to guarantee a zero normal gradient in the
186 // direction of the surface normal
187
188 // ebf eqns: element gradient coefficients, e.g. eqn. 2, LHS term 2 coefficient. *Note* that
189 // each element of the std::vector could correspond to a cell centroid gradient or to a face
190 // gradient computed on a fully developed flow face
191 std::vector<VectorValue<Real>> ebf_grad_coeffs;
192 // ebf eqns: rhs b values. These will actually correspond to the elem_value so we can use a
193 // pointer and avoid copying. This is the RHS of eqn. 2
194 std::vector<const ADReal *> ebf_b;
195
196 // elem grad eqns: ebf coefficients, e.g. eqn. 1, LHS term 2 coefficients
197 std::vector<VectorValue<Real>> grad_ebf_coeffs;
198 // elem grad eqns: rhs b value, e.g. eqn. 1 RHS
199 VectorValue<ADReal> grad_b = 0;
200
201 // eqn. 3 coefficients for cell centroid gradient, e.g. the coefficients that fall out of term
202 // 2 on the LHS of eqn. 3
203 std::vector<TensorValue<Real>> fdf_grad_centroid_coeffs;
204
205 const unsigned int lm_dim = LIBMESH_DIM;
206
207 auto action_functor = [&volume_set,
208 &volume,
209 &elem_value,
210#ifndef NDEBUG
211 &elem,
212#endif
213 &ebf_faces,
214 &ebf_grad_coeffs,
215 &ebf_b,
216 &grad_ebf_coeffs,
217 &grad_b,
218 &fdf_grad_centroid_coeffs,
219 correct_skewness,
220 &time,
221 this](const Elem & functor_elem,
222 const Elem * const neighbor,
223 const FaceInfo * const fi,
224 const Point & surface_vector,
225 Real coord,
226 const bool elem_has_info)
227 {
228 mooseAssert(fi, "We need a FaceInfo for this action_functor");
229 mooseAssert(elem == &functor_elem,
230 "Just a sanity check that the element being passed in is the one we passed out.");
231
232 if (isExtrapolatedBoundaryFace(*fi, &functor_elem, time))
233 {
235 {
236 const bool fdf_face = isFullyDevelopedFlowFace(*fi);
237 ebf_faces.push_back(std::make_pair(fi, fdf_face));
238
239 // eqn. 2
240 ebf_grad_coeffs.push_back(-1. * (elem_has_info
241 ? (fi->faceCentroid() - fi->elemCentroid())
242 : (fi->faceCentroid() - fi->neighborCentroid())));
243 ebf_b.push_back(&elem_value);
244
245 // eqn. 1
246 grad_ebf_coeffs.push_back(-surface_vector);
247
248 // eqn. 3
249 if (fdf_face)
250 {
251 // Will be nice in C++17 we'll get a returned reference from this method
252 fdf_grad_centroid_coeffs.emplace_back();
253 auto & current_coeffs = fdf_grad_centroid_coeffs.back();
254 const auto normal = fi->normal();
255 for (const auto i : make_range(lm_dim))
256 for (const auto j : make_range(lm_dim))
257 {
258 auto & current_coeff = current_coeffs(i, j);
259 current_coeff = normal(i) * normal(j);
260 if (i == j)
261 current_coeff -= 1.;
262 }
263 }
264 }
265 else
266 // We are doing a one-term expansion for the extrapolated boundary faces, in which case
267 // we have no eqn. 2 and we have no second term in the LHS of eqn. 1. Instead we apply
268 // the element centroid value as the face value (one-term expansion) in the RHS of eqn.
269 // 1
270 grad_b += surface_vector * elem_value;
271 }
272 else if (isInternalFace(*fi))
273 grad_b +=
274 surface_vector * (*this)(Moose::FaceArg({fi,
275 Moose::FV::LimiterType::CentralDifference,
276 true,
277 correct_skewness,
278 nullptr,
279 nullptr}),
280 time);
281 else
282 {
283 mooseAssert(isDirichletBoundaryFace(*fi, &functor_elem, time),
284 "We've run out of face types");
285 grad_b += surface_vector * getDirichletBoundaryFaceValue(*fi, &functor_elem, time);
286 }
287
288 if (!volume_set)
289 {
290 // We use the FaceInfo volumes because those values have been pre-computed and cached.
291 // An explicit call to elem->volume() here would incur unnecessary expense
292 if (elem_has_info)
293 {
295 this->_subproblem, functor_elem.subdomain_id(), fi->elemCentroid(), coord);
296 volume = fi->elemVolume() * coord;
297 }
298 else
299 {
301 this->_subproblem, neighbor->subdomain_id(), fi->neighborCentroid(), coord);
302 volume = fi->neighborVolume() * coord;
303 }
304
305 volume_set = true;
306 }
307 };
308
309 Moose::FV::loopOverElemFaceInfo(*elem, this->_mesh, this->_subproblem, action_functor);
310
311 mooseAssert(volume_set && volume > 0, "We should have set the volume");
312 grad_b /= volume;
313
314 const auto coord_system = this->_subproblem.getCoordSystem(elem->subdomain_id());
315 if (coord_system == Moose::CoordinateSystemType::COORD_RZ)
316 {
317 const auto r_coord = this->_subproblem.getAxisymmetricRadialCoord();
318 grad_b(r_coord) -= elem_value / elem->vertex_average()(r_coord);
319 }
320
321 mooseAssert(
322 coord_system != Moose::CoordinateSystemType::COORD_RSPHERICAL,
323 "We have not yet implemented the correct translation from gradient to divergence for "
324 "spherical coordinates yet.");
325
326 mooseAssert(
327 ebf_faces.size() < UINT_MAX,
328 "You've created a mystical element that has more faces than can be held by unsigned "
329 "int. I applaud you.");
330 const auto num_ebfs = static_cast<unsigned int>(ebf_faces.size());
331
332 // test for simple case
333 if (num_ebfs == 0)
334 grad = grad_b;
335 else
336 {
337 // We have to solve a system
338 const unsigned int sys_dim =
339 lm_dim + num_ebfs + lm_dim * static_cast<unsigned int>(fdf_grad_centroid_coeffs.size());
340 DenseVector<ADReal> x(sys_dim), b(sys_dim);
341 DenseMatrix<ADReal> A(sys_dim, sys_dim);
342
343 // eqn. 1
344 for (const auto lm_dim_index : make_range(lm_dim))
345 {
346 // LHS term 1 coeffs
347 A(lm_dim_index, lm_dim_index) = 1;
348
349 // LHS term 2 coeffs
350 for (const auto ebf_index : make_range(num_ebfs))
351 A(lm_dim_index, lm_dim + ebf_index) = grad_ebf_coeffs[ebf_index](lm_dim_index) / volume;
352
353 // RHS
354 b(lm_dim_index) = grad_b(lm_dim_index);
355 }
356
357 unsigned int num_fdf_faces = 0;
358
359 // eqn. 2
360 for (const auto ebf_index : make_range(num_ebfs))
361 {
362 // LHS term 1 coeffs
363 A(lm_dim + ebf_index, lm_dim + ebf_index) = 1;
364
365 const bool fdf_face = ebf_faces[ebf_index].second;
366 const unsigned int starting_j_index =
367 fdf_face ? lm_dim + num_ebfs + num_fdf_faces * lm_dim : 0;
368
369 num_fdf_faces += fdf_face;
370
371 // LHS term 2 coeffs
372 for (const auto lm_dim_index : make_range(lm_dim))
373 A(lm_dim + ebf_index, starting_j_index + lm_dim_index) =
374 ebf_grad_coeffs[ebf_index](lm_dim_index);
375
376 // RHS
377 b(lm_dim + ebf_index) = *ebf_b[ebf_index];
378 }
379
380 mooseAssert(num_fdf_faces == fdf_grad_centroid_coeffs.size(),
381 "Bad math in INSFVVelocityVariable::adGradlnSln(const Elem *). Please contact a "
382 "MOOSE developer");
383
384 // eqn. 3
385 for (const auto fdf_face_index : make_range(num_fdf_faces))
386 {
387 const auto starting_i_index = lm_dim + num_ebfs + fdf_face_index * lm_dim;
388
389 for (const auto lm_dim_i_index : make_range(lm_dim))
390 {
391 auto i_index = starting_i_index + lm_dim_i_index;
392 A(i_index, i_index) = 1;
393
394 for (const auto lm_dim_j_index : make_range(lm_dim))
395 // j_index = lm_dim_j_index
396 A(i_index, lm_dim_j_index) =
397 fdf_grad_centroid_coeffs[fdf_face_index](lm_dim_i_index, lm_dim_j_index);
398 }
399 }
400
401 A.lu_solve(b, x);
402 for (const auto lm_dim_index : make_range(lm_dim))
403 grad(lm_dim_index) = x(lm_dim_index);
404 }
405
406 if (_cache_cell_gradients && !correct_skewness)
407 {
408 auto pr = _elem_to_grad.emplace(elem, std::move(grad));
409 mooseAssert(pr.second, "Insertion should have just happened.");
410 return pr.first->second;
411 }
412 else
413 return grad;
414 }
415 catch (std::exception & e)
416 {
417 // Don't ignore any *real* errors; we only handle matrix
418 // singularity here
419 if (!strstr(e.what(), "singular"))
420 throw;
421
422 // Retry without two-term
424 "I believe we should only get singular systems when two-term boundary expansion is "
425 "being used");
426 const_cast<INSFVVelocityVariable *>(this)->_two_term_boundary_expansion = false;
427 const auto & grad = adGradSln(elem, time, correct_skewness);
428
429 // Two term boundary expansion should only fail at domain corners. We want to keep trying it
430 // at other boundary locations
431 const_cast<INSFVVelocityVariable *>(this)->_two_term_boundary_expansion = true;
432
433 return grad;
434 }
435}
DualNumber< Real, DNDerivativeType, true > ADReal
void coordTransformFactor(const SubProblem &s, SubdomainID sub_id, const P &point, C &factor, SubdomainID neighbor_sub_id=libMesh::Elem::invalid_subdomain_id)
const std::vector< double > x
for(PetscInt i=0;i< nvars;++i)
bool isExtrapolatedBoundaryFace(const FaceInfo &fi, const Elem *elem, const Moose::StateArg &time) const override
bool isFullyDevelopedFlowFace(const FaceInfo &fi) const
Returns whether the passed-in FaceInfo corresponds to a fully-developed flow face.
SubProblem & _subproblem
std::unordered_map< const Elem *, VectorValue< ADReal > > _elem_to_grad
virtual bool isDirichletBoundaryFace(const FaceInfo &fi, const Elem *elem, const Moose::StateArg &state) const
ADReal getElemValue(const Elem *elem, const StateArg &state) const
virtual ADReal getDirichletBoundaryFaceValue(const FaceInfo &fi, const Elem *elem, const Moose::StateArg &state) const
const bool _cache_cell_gradients
const ADTemplateVariableGradient< OutputType > & adGradSln() const override
VectorValue< ADReal > _temp_cell_gradient
bool isInternalFace(const FaceInfo &) const
unsigned int getAxisymmetricRadialCoord() const
Moose::CoordinateSystemType getCoordSystem(SubdomainID sid) const
void loopOverElemFaceInfo(const Elem &elem, const MooseMesh &mesh, ActionFunctor &act, const Moose::CoordinateSystemType coord_type, const unsigned int rz_radial_coord=libMesh::invalid_uint)
std::string grad(const std::string &var)
Definition NS.h:92
Real volume(const MeshBase &mesh, unsigned int dim=libMesh::invalid_uint)
DIE A HORRIBLE DEATH HERE typedef LIBMESH_DEFAULT_SCALAR_TYPE Real
IntRange< T > make_range(T beg, T end)

Referenced by INSFVMixingLengthTurbulentViscosityAux::computeValue().

◆ cacheSeparatorBoundaries()

void INSFVVariable::cacheSeparatorBoundaries ( )
protectedinherited

Caches the separator boundaries.

Definition at line 35 of file INSFVVariable.C.

36{
38 std::vector<FVFluxBC *> bcs;
39
40 const auto base_query = this->_subproblem.getMooseApp()
42 .query()
43 .template condition<AttribSystem>("FVFluxBC")
44 .template condition<AttribThread>(_tid);
45
46 for (const auto bnd_id : this->_mesh.getBoundaryIDs())
47 {
48 auto base_query_copy = base_query;
49 base_query_copy.template condition<AttribBoundaries>(std::set<BoundaryID>({bnd_id}))
50 .queryInto(bcs);
51 for (const auto bc : bcs)
52 {
53 const auto separator = dynamic_cast<const INSFVHydraulicSeparatorInterface *>(bc);
54 if (separator)
55 _boundary_id_to_separator.emplace(bnd_id, separator);
56 }
57 }
58}
A base class which serves as a tag for hydraulic separators.
std::unordered_map< BoundaryID, const INSFVHydraulicSeparatorInterface * > _boundary_id_to_separator
A container for quick access of hydraulic separator BCs associated with this variable.
TheWarehouse & theWarehouse()
MooseApp & getMooseApp() const
Query query()
std::vector< BoundaryID > getBoundaryIDs(const libMesh::MeshBase &mesh, const std::vector< BoundaryName > &boundary_name, bool generate_unknown, const std::set< BoundaryID > &mesh_boundary_ids)

Referenced by INSFVVariable::initialSetup(), INSFVVariable::meshChanged(), and INSFVVariable::timestepSetup().

◆ computeElemValues()

void INSFVVariable::computeElemValues ( )
inlineoverridevirtualinherited

Reimplemented from MooseVariableFV< Real >.

Definition at line 75 of file INSFVVariable.h.

76{
79 else
80 _element_data->setGeometry(Moose::Volume);
81}
bool _qp_calculations
Whether to pre-initialize variable data for use in traditional MOOSE quadrature point based objects.
std::unique_ptr< MooseVariableDataFV< OutputType > > _element_data
virtual void computeElemValues() override

◆ computeElemValuesFace()

void INSFVVariable::computeElemValuesFace ( )
inlineoverridevirtualinherited

Reimplemented from MooseVariableFV< Real >.

Definition at line 84 of file INSFVVariable.h.

85{
88}
virtual void computeElemValuesFace() override

◆ computeFaceValues()

void INSFVVariable::computeFaceValues ( const FaceInfo fi)
inlineoverridevirtualinherited

Reimplemented from MooseVariableFV< Real >.

Definition at line 68 of file INSFVVariable.h.

69{
72}
virtual void computeFaceValues(const FaceInfo &fi) override

◆ computeNeighborValues()

void INSFVVariable::computeNeighborValues ( )
inlineoverridevirtualinherited

Reimplemented from MooseVariableFV< Real >.

Definition at line 98 of file INSFVVariable.h.

99{
102}
virtual void computeNeighborValues() override

◆ computeNeighborValuesFace()

void INSFVVariable::computeNeighborValuesFace ( )
inlineoverridevirtualinherited

Reimplemented from MooseVariableFV< Real >.

Definition at line 91 of file INSFVVariable.h.

92{
95}
virtual void computeNeighborValuesFace() override

◆ getExtrapolatedBoundaryFaceValue()

ADReal INSFVVelocityVariable::getExtrapolatedBoundaryFaceValue ( const FaceInfo fi,
bool  two_term_expansion,
bool  correct_skewness,
const Elem *  elem_side_to_extrapolate_from,
const StateArg time 
) const
overrideprotectedvirtual

Reimplemented from MooseVariableFV< Real >.

Definition at line 70 of file INSFVVelocityVariable.C.

75{
76 ADReal boundary_value;
77 bool elem_to_extrapolate_from_is_fi_elem;
78 std::tie(elem_to_extrapolate_from, elem_to_extrapolate_from_is_fi_elem) =
79 [this, &fi, elem_to_extrapolate_from]() -> std::pair<const Elem *, bool>
80 {
81 if (elem_to_extrapolate_from)
82 return {elem_to_extrapolate_from, elem_to_extrapolate_from == &fi.elem()};
83 else
84 {
85 const auto [elem_guaranteed_to_have_dofs,
86 other_elem,
87 elem_guaranteed_to_have_dofs_is_fi_elem] =
89 libmesh_ignore(other_elem);
90 return {elem_guaranteed_to_have_dofs, elem_guaranteed_to_have_dofs_is_fi_elem};
91 }
92 }();
93
94 if (two_term_expansion && isFullyDevelopedFlowFace(fi))
95 {
96 const Point vector_to_face = elem_to_extrapolate_from_is_fi_elem
97 ? (fi.faceCentroid() - fi.elemCentroid())
98 : (fi.faceCentroid() - fi.neighborCentroid());
99 boundary_value = uncorrectedAdGradSln(fi, time, correct_skewness) * vector_to_face +
100 getElemValue(elem_to_extrapolate_from, time);
101 }
102 else
104 fi, two_term_expansion, correct_skewness, elem_to_extrapolate_from, time);
105
106 return boundary_value;
107}
const Elem & elem() const
const Point & elemCentroid() const
const Point & faceCentroid() const
VectorValue< ADReal > uncorrectedAdGradSln(const FaceInfo &fi, const StateArg &time, const bool correct_skewness=false) const override
virtual ADReal getExtrapolatedBoundaryFaceValue(const FaceInfo &fi, bool two_term_expansion, bool correct_skewness, const Elem *elem_side_to_extrapolate_from, const StateArg &state) const
std::tuple< const Elem *, const Elem *, bool > determineElemOneAndTwo(const FaceInfo &fi, const FVVar &var)
void libmesh_ignore(const Args &...)

◆ initialSetup()

void INSFVVariable::initialSetup ( )
overridevirtualinherited

Reimplemented from MooseVariableFV< Real >.

Reimplemented in BernoulliPressureVariable.

Definition at line 75 of file INSFVVariable.C.

76{
79}
void cacheSeparatorBoundaries()
Caches the separator boundaries.
virtual void initialSetup() override

◆ isExtrapolatedBoundaryFace()

bool INSFVVariable::isExtrapolatedBoundaryFace ( const FaceInfo fi,
const Elem *  elem,
const Moose::StateArg time 
) const
overrideinherited

Definition at line 92 of file INSFVVariable.C.

95{
96 if (isDirichletBoundaryFace(fi, elem, time))
97 return false;
98 if (!isInternalFace(fi))
99 // We are neither a Dirichlet nor an internal face
100 return true;
101
102 // If we got here, then we're definitely on an internal face
103 if (isSeparatorBoundary(fi))
104 return true;
105
106 return false;
107}
bool isSeparatorBoundary(const FaceInfo &fi) const

Referenced by adGradSln().

◆ isFullyDevelopedFlowFace()

bool INSFVVariable::isFullyDevelopedFlowFace ( const FaceInfo fi) const
protectedinherited

Returns whether the passed-in FaceInfo corresponds to a fully-developed flow face.

Definition at line 110 of file INSFVVariable.C.

111{
112 const auto & face_type = fi.faceType(std::make_pair(this->number(), this->sys().number()));
113
114 mooseAssert(face_type != FaceInfo::VarFaceNeighbors::NEITHER,
115 "I'm concerned that if you're calling this method with a FaceInfo that doesn't have "
116 "this variable defined on either side, that you are doing something dangerous.");
117
118 // If we're defined on both sides of the face, then we're not a boundary face
119 if (face_type == FaceInfo::VarFaceNeighbors::BOTH)
120 return false;
121
122 std::vector<INSFVFullyDevelopedFlowBC *> bcs;
123
125 .theWarehouse()
126 .query()
127 .template condition<AttribINSFVBCs>(INSFVBCs::INSFVFullyDevelopedFlowBC)
128 .template condition<AttribBoundaries>(fi.boundaryIDs())
129 .queryInto(bcs);
130
131 return !bcs.empty();
132}
@ INSFVFullyDevelopedFlowBC
VarFaceNeighbors faceType(const std::pair< unsigned int, unsigned int > &var_sys) const
const std::set< BoundaryID > & boundaryIDs() const
unsigned int number() const

Referenced by adGradSln(), getExtrapolatedBoundaryFaceValue(), and uncorrectedAdGradSln().

◆ isSeparatorBoundary()

bool INSFVVariable::isSeparatorBoundary ( const FaceInfo fi) const
inherited

Definition at line 82 of file INSFVVariable.C.

83{
84 for (const auto bid : fi.boundaryIDs())
86 return true;
87
88 return false;
89}
unsigned int count() const
if(subdm)

Referenced by BernoulliPressureVariable::isDirichletBoundaryFace(), BernoulliPressureVariable::isExtrapolatedBoundaryFace(), and INSFVVariable::isExtrapolatedBoundaryFace().

◆ meshChanged()

void INSFVVariable::meshChanged ( )
overridevirtualinherited

Reimplemented from MooseVariableFV< Real >.

Definition at line 68 of file INSFVVariable.C.

◆ requireQpComputations()

void INSFVVariable::requireQpComputations ( ) const
inlineoverridevirtualinherited

Reimplemented from MooseVariableFV< Real >.

Reimplemented in INSFVVelocityNoQpComputation.

Definition at line 30 of file INSFVVariable.h.

30{ _qp_calculations = true; }

◆ supportsGeometricInfoBasedLoops()

bool INSFVVariable::supportsGeometricInfoBasedLoops ( ) const
inlineoverridevirtualinherited

Reimplemented from MooseVariableField< typename OutputType >.

Definition at line 32 of file INSFVVariable.h.

32{ return true; }

◆ supportsQpBasedLoops()

bool INSFVVariable::supportsQpBasedLoops ( ) const
inlineoverridevirtualinherited

Reimplemented from MooseVariableField< typename OutputType >.

Definition at line 31 of file INSFVVariable.h.

31{ return _qp_calculations; }

◆ timestepSetup()

void INSFVVariable::timestepSetup ( )
overridevirtualinherited

Reimplemented from MooseVariableFV< Real >.

Definition at line 61 of file INSFVVariable.C.

◆ uncorrectedAdGradSln()

VectorValue< ADReal > INSFVVelocityVariable::uncorrectedAdGradSln ( const FaceInfo fi,
const StateArg time,
const bool  correct_skewness = false 
) const
overridevirtual

Reimplemented from MooseVariableFV< Real >.

Definition at line 110 of file INSFVVelocityVariable.C.

113{
114 VectorValue<ADReal> unc_grad;
116 {
117 const auto & cell_gradient = adGradSln(&fi.elem(), time, correct_skewness);
118 const auto & normal = fi.normal();
119 unc_grad = cell_gradient - (cell_gradient * normal) * normal;
120 }
121 else
122 unc_grad = INSFVVariable::uncorrectedAdGradSln(fi, time, correct_skewness);
123
124 return unc_grad;
125}
const Point & normal() const
virtual VectorValue< ADReal > uncorrectedAdGradSln(const FaceInfo &fi, const StateArg &state, const bool correct_skewness=false) const

Referenced by getExtrapolatedBoundaryFaceValue().

◆ validParams()

InputParameters INSFVVelocityVariable::validParams ( )
static

Definition at line 60 of file INSFVVelocityVariable.C.

61{
63}
static InputParameters validParams()

Referenced by PINSFVSuperficialVelocityVariable::validParams().

Member Data Documentation

◆ _boundary_id_to_separator

std::unordered_map<BoundaryID, const INSFVHydraulicSeparatorInterface *> INSFVVariable::_boundary_id_to_separator
protectedinherited

A container for quick access of hydraulic separator BCs associated with this variable.

Definition at line 58 of file INSFVVariable.h.

Referenced by INSFVVariable::cacheSeparatorBoundaries(), and INSFVVariable::isSeparatorBoundary().

◆ _qp_calculations

bool INSFVVariable::_qp_calculations
mutableprivateinherited

Whether to pre-initialize variable data for use in traditional MOOSE quadrature point based objects.

This can be changed to true if objects request variable values in a way that is generated by quadrature point based calculations

Definition at line 64 of file INSFVVariable.h.

Referenced by INSFVVariable::computeElemValues(), INSFVVariable::computeElemValuesFace(), INSFVVariable::computeFaceValues(), INSFVVariable::computeNeighborValues(), INSFVVariable::computeNeighborValuesFace(), INSFVVariable::requireQpComputations(), and INSFVVariable::supportsQpBasedLoops().


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