Jet  v1.3.3
grid_backward_euler_diffusion_solver3.h
Go to the documentation of this file.
1 // Copyright (c) 2018 Doyub Kim
2 //
3 // I am making my contributions/submissions to this project solely in my
4 // personal capacity and am not conveying any rights to any intellectual
5 // property of any third parties.
6 
7 #ifndef INCLUDE_JET_GRID_BACKWARD_EULER_DIFFUSION_SOLVER3_H_
8 #define INCLUDE_JET_GRID_BACKWARD_EULER_DIFFUSION_SOLVER3_H_
9 
13 #include <limits>
14 #include <memory>
15 
16 namespace jet {
17 
30  public:
31  enum BoundaryType {
33  Neumann
34  };
35 
38  BoundaryType boundaryType = Neumann);
39 
50  void solve(
51  const ScalarGrid3& source,
52  double diffusionCoefficient,
53  double timeIntervalInSeconds,
54  ScalarGrid3* dest,
55  const ScalarField3& boundarySdf
57  const ScalarField3& fluidSdf
58  = ConstantScalarField3(-kMaxD)) override;
59 
70  void solve(
71  const CollocatedVectorGrid3& source,
72  double diffusionCoefficient,
73  double timeIntervalInSeconds,
75  const ScalarField3& boundarySdf
77  const ScalarField3& fluidSdf
78  = ConstantScalarField3(-kMaxD)) override;
79 
90  void solve(
91  const FaceCenteredGrid3& source,
92  double diffusionCoefficient,
93  double timeIntervalInSeconds,
94  FaceCenteredGrid3* dest,
95  const ScalarField3& boundarySdf
97  const ScalarField3& fluidSdf
98  = ConstantScalarField3(-kMaxD)) override;
99 
102 
103  private:
104  BoundaryType _boundaryType;
105  FdmLinearSystem3 _system;
106  FdmLinearSystemSolver3Ptr _systemSolver;
107  Array3<char> _markers;
108 
109  void buildMarkers(
110  const Size3& size,
111  const std::function<Vector3D(size_t, size_t, size_t)>& pos,
112  const ScalarField3& boundarySdf,
113  const ScalarField3& fluidSdf);
114 
115  void buildMatrix(
116  const Size3& size,
117  const Vector3D& c);
118 
119  void buildVectors(
121  const Vector3D& c);
122 
123  void buildVectors(
125  const Vector3D& c,
126  size_t component);
127 };
128 
130 typedef std::shared_ptr<GridBackwardEulerDiffusionSolver3>
132 
133 } // namespace jet
134 
135 #endif // INCLUDE_JET_GRID_BACKWARD_EULER_DIFFUSION_SOLVER3_H_
jet::ConstArrayAccessor< T, 3 >
3-D read-only array accessor class.
Definition: array_accessor3.h:270
grid_diffusion_solver3.h
jet::GridBackwardEulerDiffusionSolver3
3-D grid-based backward Euler diffusion solver.
Definition: grid_backward_euler_diffusion_solver3.h:29
jet::ScalarField3
Abstract base class for 3-D scalar field.
Definition: scalar_field3.h:18
jet::GridBackwardEulerDiffusionSolver3::solve
void solve(const FaceCenteredGrid3 &source, double diffusionCoefficient, double timeIntervalInSeconds, FaceCenteredGrid3 *dest, const ScalarField3 &boundarySdf=ConstantScalarField3(kMaxD), const ScalarField3 &fluidSdf=ConstantScalarField3(-kMaxD)) override
jet::GridBackwardEulerDiffusionSolver3::solve
void solve(const ScalarGrid3 &source, double diffusionCoefficient, double timeIntervalInSeconds, ScalarGrid3 *dest, const ScalarField3 &boundarySdf=ConstantScalarField3(kMaxD), const ScalarField3 &fluidSdf=ConstantScalarField3(-kMaxD)) override
jet::GridBackwardEulerDiffusionSolver3::Dirichlet
@ Dirichlet
Definition: grid_backward_euler_diffusion_solver3.h:32
jet::CollocatedVectorGrid3
Abstract base class for 3-D collocated vector grid structure.
Definition: collocated_vector_grid3.h:18
jet::GridBackwardEulerDiffusionSolver3::solve
void solve(const CollocatedVectorGrid3 &source, double diffusionCoefficient, double timeIntervalInSeconds, CollocatedVectorGrid3 *dest, const ScalarField3 &boundarySdf=ConstantScalarField3(kMaxD), const ScalarField3 &fluidSdf=ConstantScalarField3(-kMaxD)) override
jet
Definition: advection_solver2.h:18
jet::GridDiffusionSolver3
Abstract base class for 3-D grid-based diffusion equation solver.
Definition: grid_diffusion_solver3.h:30
jet::GridBackwardEulerDiffusionSolver3::GridBackwardEulerDiffusionSolver3
GridBackwardEulerDiffusionSolver3(BoundaryType boundaryType=Neumann)
Constructs the solver with given boundary type.
jet::FaceCenteredGrid3
3-D face-centered (a.k.a MAC or staggered) grid.
Definition: face_centered_grid3.h:26
jet::ConstantScalarField3
3-D constant scalar field.
Definition: constant_scalar_field3.h:15
jet::GridBackwardEulerDiffusionSolver3::BoundaryType
BoundaryType
Definition: grid_backward_euler_diffusion_solver3.h:31
jet::Size3
3-D size class.
Definition: size3.h:19
jet::kMaxD
constexpr double kMaxD
Max double.
Definition: constants.h:88
jet::FdmLinearSystem3
Linear system (Ax=b) for 3-D finite differencing.
Definition: fdm_linear_system3.h:39
constant_scalar_field3.h
jet::ScalarGrid3
Abstract base class for 3-D scalar grid structure.
Definition: scalar_grid3.h:21
jet::Vector3D
Vector3< double > Vector3D
Double-type 3D vector.
Definition: vector3.h:349
jet::GridBackwardEulerDiffusionSolver3::Neumann
@ Neumann
Definition: grid_backward_euler_diffusion_solver3.h:33
jet::GridBackwardEulerDiffusionSolver3::setLinearSystemSolver
void setLinearSystemSolver(const FdmLinearSystemSolver3Ptr &solver)
Sets the linear system solver for this diffusion solver.
jet::Vector< T, 3 >
3-D vector class.
Definition: vector3.h:25
fdm_linear_system_solver3.h
jet::Array< T, 3 >
3-D array class.
Definition: array3.h:43
jet::FdmLinearSystemSolver3Ptr
std::shared_ptr< FdmLinearSystemSolver3 > FdmLinearSystemSolver3Ptr
Shared pointer type for the FdmLinearSystemSolver3.
Definition: fdm_linear_system_solver3.h:31
jet::GridBackwardEulerDiffusionSolver3Ptr
std::shared_ptr< GridBackwardEulerDiffusionSolver3 > GridBackwardEulerDiffusionSolver3Ptr
Shared pointer type for the GridBackwardEulerDiffusionSolver3.
Definition: grid_backward_euler_diffusion_solver3.h:131