Line data Source code
1 : /**********************************************************************/
2 : /* DO NOT MODIFY THIS HEADER */
3 : /* Swift, a Fourier spectral solver for MOOSE */
4 : /* */
5 : /* Copyright 2024 Battelle Energy Alliance, LLC */
6 : /* ALL RIGHTS RESERVED */
7 : /**********************************************************************/
8 :
9 : #include "LBMMacroscopicNeumannBC.h"
10 :
11 : using namespace torch::indexing;
12 :
13 : registerMooseObject("SwiftApp", LBMMacroscopicNeumannBC);
14 :
15 : InputParameters
16 0 : LBMMacroscopicNeumannBC::validParams()
17 : {
18 0 : InputParameters params = LBMBoundaryCondition::validParams();
19 0 : params.addClassDescription(
20 : "LBMMacroscopicNeumannBC object that uses first order forward difference");
21 0 : params.addParam<std::string>("value",
22 : "0.0"
23 : "Value at the boundary");
24 0 : return params;
25 0 : }
26 :
27 0 : LBMMacroscopicNeumannBC::LBMMacroscopicNeumannBC(const InputParameters & parameters)
28 : : LBMBoundaryCondition(parameters),
29 0 : _value(_lb_problem.getConstant<Real>(getParam<std::string>("value")))
30 : {
31 0 : }
32 :
33 : void
34 0 : LBMMacroscopicNeumannBC::bottomBoundary()
35 : {
36 : // along y direction at y = 0
37 0 : _u.index_put_({Slice(), 0, Slice()}, _u.index({Slice(), 1, Slice()}) - _value);
38 0 : }
39 :
40 : void
41 0 : LBMMacroscopicNeumannBC::topBoundary()
42 : {
43 : // along y direction at y = N_y - 1
44 0 : _u.index_put_({Slice(), _grid_size[1] - 1, Slice()},
45 0 : _u.index({Slice(), _grid_size[1] - 2, Slice()}) + _value);
46 0 : }
47 :
48 : void
49 0 : LBMMacroscopicNeumannBC::leftBoundary()
50 : {
51 : // along x direction at x = 0
52 0 : _u.index_put_({0, Slice(), Slice()}, _u.index({1, Slice(), Slice()}) - _value);
53 0 : }
54 :
55 : void
56 0 : LBMMacroscopicNeumannBC::rightBoundary()
57 : {
58 : // along x direction at x = N_x - 1
59 0 : _u.index_put_({_grid_size[0] - 1, Slice(), Slice()},
60 0 : _u.index({_grid_size[1] - 2, Slice(), Slice()}) + _value);
61 0 : }
62 :
63 : void
64 0 : LBMMacroscopicNeumannBC::frontBoundary()
65 : {
66 : // along z direction at z = 0
67 0 : _u.index_put_({Slice(), Slice(), 0}, _u.index({Slice(), Slice(), 1}) - _value);
68 0 : }
69 :
70 : void
71 0 : LBMMacroscopicNeumannBC::backBoundary()
72 : {
73 : // along z direction at z = N_z-1
74 0 : _u.index_put_({Slice(), Slice(), _grid_size[2] - 1},
75 0 : _u.index({Slice(), Slice(), _grid_size[2] - 2}) + _value);
76 0 : }
77 :
78 : void
79 0 : LBMMacroscopicNeumannBC::wallBoundary()
80 : {
81 : // TBD
82 0 : mooseError("LBMMacroscopicNeumannBC::wallBoundary is not implemented");
83 : }
|