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 "NumericalFlux1D.h"
11 : #include "THMUtils.h"
12 :
13 : InputParameters
14 8971 : NumericalFlux1D::validParams()
15 : {
16 8971 : InputParameters params = GeneralUserObject::validParams();
17 8971 : return params;
18 : }
19 :
20 4898 : NumericalFlux1D::NumericalFlux1D(const InputParameters & parameters)
21 : : ThreadedGeneralUserObject(parameters),
22 :
23 4898 : _cached_flux_elem_id(libMesh::invalid_uint),
24 4898 : _cached_flux_side_id(libMesh::invalid_uint),
25 :
26 4898 : _last_region_index(0)
27 : {
28 4898 : }
29 :
30 : void
31 351630 : NumericalFlux1D::initialize()
32 : {
33 351630 : _cached_flux_elem_id = libMesh::invalid_uint;
34 351630 : _cached_flux_side_id = libMesh::invalid_uint;
35 351630 : }
36 :
37 : void
38 351630 : NumericalFlux1D::execute()
39 : {
40 351630 : }
41 :
42 : void
43 282185 : NumericalFlux1D::finalize()
44 : {
45 282185 : }
46 :
47 : void
48 69445 : NumericalFlux1D::threadJoin(const UserObject &)
49 : {
50 69445 : }
51 :
52 : const std::vector<ADReal> &
53 50047471 : NumericalFlux1D::getFlux(const unsigned int iside,
54 : const dof_id_type ielem,
55 : bool res_side_is_left,
56 : const std::vector<ADReal> & UL_1d,
57 : const std::vector<ADReal> & UR_1d,
58 : Real nLR_dot_d) const
59 : {
60 50047471 : if (_cached_flux_elem_id != ielem || _cached_flux_side_id != iside)
61 : {
62 4361629 : _cached_flux_elem_id = ielem;
63 4361629 : _cached_flux_side_id = iside;
64 :
65 4361629 : const auto UL_3d = convert1DInputTo3D(UL_1d);
66 4361629 : const auto UR_3d = convert1DInputTo3D(UR_1d);
67 :
68 : const RealVectorValue nLR(nLR_dot_d, 0, 0);
69 : RealVectorValue t1, t2;
70 4361629 : THM::computeOrthogonalDirections(nLR, t1, t2);
71 :
72 4361629 : calcFlux(UL_3d, UR_3d, nLR, t1, t2, _FL_3d, _FR_3d);
73 :
74 4361629 : transform3DFluxDirection(_FL_3d, nLR_dot_d);
75 4361629 : transform3DFluxDirection(_FR_3d, nLR_dot_d);
76 :
77 4361629 : _FL_1d = convert3DFluxTo1D(_FL_3d);
78 4361629 : _FR_1d = convert3DFluxTo1D(_FR_3d);
79 4361629 : }
80 :
81 50047471 : if (res_side_is_left)
82 25113274 : return _FL_1d;
83 : else
84 24934197 : return _FR_1d;
85 : }
86 :
87 : const std::vector<ADReal> &
88 0 : NumericalFlux1D::getFlux3D(const unsigned int iside,
89 : const dof_id_type ielem,
90 : const std::vector<ADReal> & UL_3d,
91 : const std::vector<ADReal> & UR_3d,
92 : const RealVectorValue & nLR,
93 : const RealVectorValue & t1,
94 : const RealVectorValue & t2) const
95 : {
96 0 : if (_cached_flux_elem_id != ielem || _cached_flux_side_id != iside)
97 : {
98 0 : _cached_flux_elem_id = ielem;
99 0 : _cached_flux_side_id = iside;
100 :
101 0 : calcFlux(UL_3d, UR_3d, nLR, t1, t2, _FL_3d, _FR_3d);
102 : }
103 :
104 0 : return _FL_3d;
105 : }
|