Loading...
Searching...
No Matches
FDMUtils.hpp
Go to the documentation of this file.
1// This code is based on Jet framework.
2// Copyright (c) 2018 Doyub Kim
3// CubbyFlow is voxel-based fluid simulation engine for computer games.
4// Copyright (c) 2020 CubbyFlow Team
5// Core Part: Chris Ohk, Junwoo Hwang, Jihong Sin, Seungwoo Yoo
6// AI Part: Dongheon Cho, Minseo Kim
7// We are making my contributions/submissions to this project solely in our
8// personal capacity and are not conveying any rights to any intellectual
9// property of any third parties.
10
11#ifndef CUBBYFLOW_FDM_UTILS_HPP
12#define CUBBYFLOW_FDM_UTILS_HPP
13
16
17namespace CubbyFlow
18{
22 const Vector2D& gridSpacing, size_t i, size_t j);
23
26std::array<Vector2D, 2> Gradient2(const ConstArrayView2<Vector2D>& data,
27 const Vector2D& gridSpacing, size_t i,
28 size_t j);
29
33 const Vector3D& gridSpacing, size_t i, size_t j, size_t k);
34
37std::array<Vector3D, 3> Gradient3(const ConstArrayView3<Vector3D>& data,
38 const Vector3D& gridSpacing, size_t i,
39 size_t j, size_t k);
40
44 const Vector2D& gridSpacing, size_t i, size_t j);
45
49 const Vector2D& gridSpacing, size_t i, size_t j);
50
54 const Vector3D& gridSpacing, size_t i, size_t j, size_t k);
55
59 const Vector3D& gridSpacing, size_t i, size_t j, size_t k);
60
64 const Vector2D& gridSpacing, size_t i, size_t j);
65
69 const Vector3D& gridSpacing, size_t i, size_t j, size_t k);
70
74 size_t i, size_t j);
75
79 const Vector3D& gridSpacing, size_t i, size_t j, size_t k);
80
81template <size_t N>
83{
84 // Do nothing
85};
86
87template <>
88struct GetFDMUtils<2>
89{
91 const Vector2D& gridSpacing, const Vector2UZ& idx)
92 {
93 return Gradient2(data, gridSpacing, idx.x, idx.y);
94 }
95
96 static double Laplacian(const ConstArrayView2<double>& data,
97 const Vector2D& gridSpacing, const Vector2UZ& idx)
98 {
99 return Laplacian2(data, gridSpacing, idx.x, idx.y);
100 }
101
102 static double Divergence(const ConstArrayView2<Vector2D>& data,
103 const Vector2D& gridSpacing, const Vector2UZ& idx)
104 {
105 return Divergence2(data, gridSpacing, idx.x, idx.y);
106 }
107
108 static double Curl(const ConstArrayView2<Vector2D>& data,
109 const Vector2D& gridSpacing, const Vector2UZ& idx)
110 {
111 return Curl2(data, gridSpacing, idx.x, idx.y);
112 }
113};
114
115template <>
116struct GetFDMUtils<3>
117{
119 const Vector3D& gridSpacing, const Vector3UZ& idx)
120 {
121 return Gradient3(data, gridSpacing, idx.x, idx.y, idx.z);
122 }
123
124 static double Laplacian(const ConstArrayView3<double>& data,
125 const Vector3D& gridSpacing, const Vector3UZ& idx)
126 {
127 return Laplacian3(data, gridSpacing, idx.x, idx.y, idx.z);
128 }
129
130 static double Divergence(const ConstArrayView3<Vector3D>& data,
131 const Vector3D& gridSpacing, const Vector3UZ& idx)
132 {
133 return Divergence3(data, gridSpacing, idx.x, idx.y, idx.z);
134 }
135
137 const Vector3D& gridSpacing, const Vector3UZ& idx)
138 {
139 return Curl3(data, gridSpacing, idx.x, idx.y, idx.z);
140 }
141};
142} // namespace CubbyFlow
143
144#endif
Definition Matrix.hpp:30
Definition pybind11Utils.hpp:21
Vector3D Gradient3(const ConstArrayView3< double > &data, const Vector3D &gridSpacing, size_t i, size_t j, size_t k)
Returns 3-D gradient vector from given 3-D scalar grid-like array data, gridSpacing,...
double Divergence2(const ConstArrayView2< Vector2D > &data, const Vector2D &gridSpacing, size_t i, size_t j)
Returns divergence value from given 2-D vector grid-like array data, gridSpacing, and array index (i,...
Vector2D Gradient2(const ConstArrayView2< double > &data, const Vector2D &gridSpacing, size_t i, size_t j)
Returns 2-D gradient vector from given 2-D scalar grid-like array data, gridSpacing,...
double Divergence3(const ConstArrayView3< Vector3D > &data, const Vector3D &gridSpacing, size_t i, size_t j, size_t k)
Returns diverence value from given 3-D vector grid-like array data, gridSpacing, and array index (i,...
double Laplacian2(const ConstArrayView2< double > &data, const Vector2D &gridSpacing, size_t i, size_t j)
Returns Laplacian value from given 2-D scalar grid-like array data, gridSpacing, and array index (i,...
double Curl2(const ConstArrayView2< Vector2D > &data, const Vector2D &gridSpacing, size_t i, size_t j)
Returns curl value from given 2-D vector grid-like array data, gridSpacing, and array index (i,...
double Laplacian3(const ConstArrayView3< double > &data, const Vector3D &gridSpacing, size_t i, size_t j, size_t k)
Returns Laplacian value from given 3-D scalar grid-like array data, gridSpacing, and array index (i,...
Vector3D Curl3(const ConstArrayView3< Vector3D > &data, const Vector3D &gridSpacing, size_t i, size_t j, size_t k)
Returns curl value from given 3-D vector grid-like array data, gridSpacing, and array index (i,...
static Vector2D Gradient(const ConstArrayView2< double > &data, const Vector2D &gridSpacing, const Vector2UZ &idx)
Definition FDMUtils.hpp:90
static double Curl(const ConstArrayView2< Vector2D > &data, const Vector2D &gridSpacing, const Vector2UZ &idx)
Definition FDMUtils.hpp:108
static double Laplacian(const ConstArrayView2< double > &data, const Vector2D &gridSpacing, const Vector2UZ &idx)
Definition FDMUtils.hpp:96
static double Divergence(const ConstArrayView2< Vector2D > &data, const Vector2D &gridSpacing, const Vector2UZ &idx)
Definition FDMUtils.hpp:102
static double Divergence(const ConstArrayView3< Vector3D > &data, const Vector3D &gridSpacing, const Vector3UZ &idx)
Definition FDMUtils.hpp:130
static Vector3D Curl(const ConstArrayView3< Vector3D > &data, const Vector3D &gridSpacing, const Vector3UZ &idx)
Definition FDMUtils.hpp:136
static Vector3D Gradient(const ConstArrayView3< double > &data, const Vector3D &gridSpacing, const Vector3UZ &idx)
Definition FDMUtils.hpp:118
static double Laplacian(const ConstArrayView3< double > &data, const Vector3D &gridSpacing, const Vector3UZ &idx)
Definition FDMUtils.hpp:124
Definition FDMUtils.hpp:83