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 : #include "IntegratedBC.h" 13 : #include "BoundaryFluxBase.h" 14 : 15 : // Forward Declarations 16 : 17 : /** 18 : * A boundary condition object for the advection equation 19 : * using a cell-centered finite volume method 20 : * 21 : * Notes: 22 : * 23 : * 1. This BC kernel itself does not do any complex calculation. 24 : * It gets the flux vector and Jacobian matrix 25 : * from the boundary flux user object being called. 26 : * 27 : * 2. If a system of governing equations is being solved, 28 : * the flux vector and Jacobian matrix 29 : * are calculated only once for the first equation 30 : * and cached for use for the rest of the equations in the system. 31 : * 32 : * 3. On the "left" state of the boundary face, the variable value 33 : * is interpolated from the reconstructed linear polynomial in the host element, 34 : * which is provided from the corresponding material kernel. 35 : * 36 : * 4. On the "right" state of the boundary face, the variable value 37 : * should be obtained from the bc user object being called. 38 : * 39 : */ 40 : class AEFVBC : public IntegratedBC 41 : { 42 : public: 43 : static InputParameters validParams(); 44 : 45 : AEFVBC(const InputParameters & parameters); 46 134 : virtual ~AEFVBC() {} 47 : 48 : protected: 49 : virtual Real computeQpResidual(); 50 : virtual Real computeQpJacobian(); 51 : 52 : /// choose an equation 53 : MooseEnum _component; 54 : 55 : // "1" denotes variable value from the host element 56 : 57 : /// piecewise constant variable values in host element 58 : const VariableValue & _uc1; 59 : 60 : /// extrapolated variable values at side center 61 : const MaterialProperty<Real> & _u1; 62 : 63 : /// bounadry flux object 64 : const BoundaryFluxBase & _flux; 65 : };