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 : #include "INSFEFluidEnergyDirichletBC.h" 11 : 12 : registerMooseObject("NavierStokesApp", INSFEFluidEnergyDirichletBC); 13 : registerMooseObjectRenamed("NavierStokesApp", 14 : MDFluidEnergyDirichletBC, 15 : "02/01/2024 00:00", 16 : INSFEFluidEnergyDirichletBC); 17 : 18 : InputParameters 19 76 : INSFEFluidEnergyDirichletBC::validParams() 20 : { 21 76 : InputParameters params = NodalBC::validParams(); 22 : 23 76 : params.addClassDescription( 24 : "Imposes a Dirichlet condition on temperature at inlets. Is not applied at outlets"); 25 152 : params.addRequiredCoupledVar("u", "velocity in x-direction"); 26 152 : params.addCoupledVar("v", "velocity in y-direction"); // required in 2D/3D 27 152 : params.addCoupledVar("w", "velocity in z-direction"); // required in 3D 28 : 29 152 : params.addParam<FunctionName>("v_fn", "Velocity function with time at the boundary"); 30 : 31 152 : params.addParam<Real>("T_scale", 1.0, "Coefficient to multiply the temperature with"); 32 152 : params.addParam<FunctionName>("T_fn", "A function that describes the temperature"); 33 152 : params.addCoupledVar("T_scalar", "A scalar value is multiplied by the temperature"); 34 : 35 152 : params.addRequiredParam<VectorValue<Real>>("out_norm", "out norm of the boundary"); 36 : 37 76 : return params; 38 0 : } 39 : 40 38 : INSFEFluidEnergyDirichletBC::INSFEFluidEnergyDirichletBC(const InputParameters & parameters) 41 : : NodalBC(parameters), 42 38 : _out_norm(getParam<VectorValue<Real>>("out_norm")), 43 38 : _u_vel(coupledValueOld("u")), 44 38 : _v_vel(_mesh.dimension() >= 2 ? coupledValueOld("v") : _zero), 45 38 : _w_vel(_mesh.dimension() == 3 ? coupledValueOld("w") : _zero), 46 76 : _T_scale(getParam<Real>("T_scale")), 47 95 : _T_scalar(isParamValid("T_scalar") ? coupledScalarValue("T_scalar") : _zero), 48 76 : _has_vbc(isParamValid("v_fn")), 49 38 : _velocity_fn(_has_vbc ? &getFunction("v_fn") : NULL), 50 133 : _T_fn(isParamValid("T_fn") ? &getFunction("T_fn") : NULL) 51 : { 52 114 : if (isParamValid("T_scalar") == isParamValid("T_fn")) 53 0 : mooseError("Please provide one and only one of 'T_scalar' and 'T_fn'"); 54 38 : } 55 : 56 : bool 57 165595 : INSFEFluidEnergyDirichletBC::isInlet() const 58 : { 59 165595 : RealVectorValue vec_vel(_u_vel[0], _v_vel[0], _w_vel[0]); 60 : 61 : Real v_bc = 0.0; 62 165595 : if (_has_vbc) 63 0 : v_bc = -_velocity_fn->value(_t, *_current_node); 64 : else 65 : v_bc = vec_vel * _out_norm; 66 : 67 165595 : if (v_bc < 0.) // Inlet 68 : return true; 69 : else 70 61205 : return false; 71 : } 72 : 73 : bool 74 116590 : INSFEFluidEnergyDirichletBC::shouldApply() const 75 : { 76 116590 : return isInlet(); 77 : } 78 : 79 : Real 80 45815 : INSFEFluidEnergyDirichletBC::computeQpResidual() 81 : { 82 45815 : if (isInlet()) 83 : { 84 91630 : Real T_bc = isParamValid("T_scalar") ? _T_scalar[0] : _T_fn->value(_t, *_current_node); 85 45815 : return _u[_qp] - _T_scale * T_bc; 86 : } 87 : else 88 : return 0.0; 89 : } 90 : 91 : Real 92 3190 : INSFEFluidEnergyDirichletBC::computeQpJacobian() 93 : { 94 3190 : return isInlet() ? 1.0 : 0.0; 95 : } 96 : 97 : Real 98 6380 : INSFEFluidEnergyDirichletBC::computeQpOffDiagJacobian(unsigned int /*jvar*/) 99 : { 100 6380 : return 0.0; 101 : }