Line data Source code
1 : //* This file is part of the MOOSE framework 2 : //* https://mooseframework.inl.gov 3 : //* 4 : //* All rights reserved, see COPYRIGHT for full restrictions 5 : //* https://github.com/idaholab/moose/blob/master/COPYRIGHT 6 : //* 7 : //* Licensed under LGPL 2.1, please see LICENSE for details 8 : //* https://www.gnu.org/licenses/lgpl-2.1.html 9 : 10 : #pragma once 11 : 12 : // MOOSE 13 : #include "MooseObject.h" 14 : #include "SetupInterface.h" 15 : #include "ParallelUniqueId.h" 16 : #include "FunctionInterface.h" 17 : #include "DistributionInterface.h" 18 : #include "UserObjectInterface.h" 19 : #include "TransientInterface.h" 20 : #include "PostprocessorInterface.h" 21 : #include "VectorPostprocessorInterface.h" 22 : #include "GeometricSearchInterface.h" 23 : #include "BoundaryRestrictableRequired.h" 24 : #include "MeshChangedInterface.h" 25 : #include "TaggingInterface.h" 26 : #include "MooseVariableDependencyInterface.h" 27 : #include "ADFunctorInterface.h" 28 : #include "FaceArgInterface.h" 29 : #include "MooseVariableInterface.h" 30 : 31 : // Forward declarations 32 : template <typename> 33 : class MooseVariableFE; 34 : typedef MooseVariableFE<Real> MooseVariable; 35 : typedef MooseVariableFE<VectorValue<Real>> VectorMooseVariable; 36 : class MooseMesh; 37 : class Problem; 38 : class SubProblem; 39 : class SystemBase; 40 : class Assembly; 41 : class FEProblemBase; 42 : 43 : /** 44 : * Base class for creating new types of boundary conditions. 45 : */ 46 : class FVBoundaryCondition : public MooseObject, 47 : public BoundaryRestrictableRequired, 48 : public SetupInterface, 49 : public FunctionInterface, 50 : public DistributionInterface, 51 : public UserObjectInterface, 52 : public TransientInterface, 53 : public PostprocessorInterface, 54 : public VectorPostprocessorInterface, 55 : public GeometricSearchInterface, 56 : public MeshChangedInterface, 57 : public TaggingInterface, 58 : public MooseVariableInterface<Real>, 59 : public MooseVariableDependencyInterface, 60 : public ADFunctorInterface, 61 : public FaceArgProducerInterface 62 : { 63 : public: 64 : /** 65 : * Class constructor. 66 : * @param parameters The InputParameters for the object 67 : * @param nodal Whether this BC is applied to nodes or not 68 : */ 69 : FVBoundaryCondition(const InputParameters & parameters); 70 : 71 : static InputParameters validParams(); 72 : 73 : /** 74 : * Get a reference to the subproblem 75 : * @return Reference to SubProblem 76 : */ 77 : const SubProblem & subProblem() const { return _subproblem; } 78 : 79 37 : const MooseVariableFV<Real> & variable() const { return _var; } 80 : 81 : bool hasFaceSide(const FaceInfo & fi, bool fi_elem_side) const override; 82 : 83 : protected: 84 : /** 85 : * Determine the single sided face argument when evaluating a functor on a face. 86 : * This is used to perform evaluations of material properties with the actual face values of 87 : * their dependences, rather than interpolate the material property to the boundary. 88 : * @param fi the FaceInfo for this face 89 : * @param limiter_type the limiter type, to be specified if more than the default average 90 : * interpolation is required for the parameters of the functor 91 : * @param correct_skewness whether to perform skew correction at the face 92 : */ 93 : Moose::FaceArg singleSidedFaceArg( 94 : const FaceInfo * fi = nullptr, 95 : Moose::FV::LimiterType limiter_type = Moose::FV::LimiterType::CentralDifference, 96 : bool correct_skewness = false, 97 : const Moose::StateArg * state_limiter = nullptr) const; 98 : 99 : MooseVariableFV<Real> & _var; 100 : 101 : /// Reference to SubProblem 102 : SubProblem & _subproblem; 103 : 104 : /// Reference to the ruling finite volume problem 105 : FEProblemBase & _fv_problem; 106 : 107 : /// Reference to SystemBase 108 : SystemBase & _sys; 109 : 110 : /// Thread id 111 : THREAD_ID _tid; 112 : 113 : /// Reference to assembly 114 : Assembly & _assembly; 115 : 116 : /// Mesh this BC is defined on 117 : MooseMesh & _mesh; 118 : 119 : /// Holds information for the face we are currently examining 120 : const FaceInfo * _face_info = nullptr; 121 : };