Jet  v1.3.3
custom_vector_field3.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_CUSTOM_VECTOR_FIELD3_H_
8 #define INCLUDE_JET_CUSTOM_VECTOR_FIELD3_H_
9 
10 #include <jet/vector_field3.h>
11 
12 namespace jet {
13 
15 class CustomVectorField3 final : public VectorField3 {
16  public:
17  class Builder;
18 
28  const std::function<Vector3D(const Vector3D&)>& customFunction,
29  double derivativeResolution = 1e-3);
30 
40  const std::function<Vector3D(const Vector3D&)>& customFunction,
41  const std::function<double(const Vector3D&)>& customDivergenceFunction,
42  double derivativeResolution = 1e-3);
43 
46  const std::function<Vector3D(const Vector3D&)>& customFunction,
47  const std::function<double(const Vector3D&)>& customDivergenceFunction,
48  const std::function<Vector3D(const Vector3D&)>& customCurlFunction);
49 
51  Vector3D sample(const Vector3D& x) const override;
52 
54  double divergence(const Vector3D& x) const override;
55 
57  Vector3D curl(const Vector3D& x) const override;
58 
60  std::function<Vector3D(const Vector3D&)> sampler() const override;
61 
63  static Builder builder();
64 
65  private:
66  std::function<Vector3D(const Vector3D&)> _customFunction;
67  std::function<double(const Vector3D&)> _customDivergenceFunction;
68  std::function<Vector3D(const Vector3D&)> _customCurlFunction;
69  double _resolution = 1e-3;
70 };
71 
73 typedef std::shared_ptr<CustomVectorField3> CustomVectorField3Ptr;
74 
75 
80  public:
83  const std::function<Vector3D(const Vector3D&)>& func);
84 
87  const std::function<double(const Vector3D&)>& func);
88 
91  const std::function<Vector3D(const Vector3D&)>& func);
92 
94  Builder& withDerivativeResolution(double resolution);
95 
98 
101 
102  private:
103  double _resolution = 1e-3;
104  std::function<Vector3D(const Vector3D&)> _customFunction;
105  std::function<double(const Vector3D&)> _customDivergenceFunction;
106  std::function<Vector3D(const Vector3D&)> _customCurlFunction;
107 };
108 
109 } // namespace jet
110 
111 #endif // INCLUDE_JET_CUSTOM_VECTOR_FIELD3_H_
jet::CustomVectorField3
3-D vector field with custom field function.
Definition: custom_vector_field3.h:15
jet::CustomVectorField3::Builder::withDerivativeResolution
Builder & withDerivativeResolution(double resolution)
Returns builder with derivative resolution.
jet::CustomVectorField3::Builder
Front-end to create CustomVectorField3 objects step by step.
Definition: custom_vector_field3.h:79
jet::CustomVectorField3::builder
static Builder builder()
Returns builder fox CustomVectorField2.
jet
Definition: advection_solver2.h:18
jet::VectorField3
Abstract base class for 3-D vector field.
Definition: vector_field3.h:18
jet::CustomVectorField3::sample
Vector3D sample(const Vector3D &x) const override
Returns the sampled value at given position x.
jet::CustomVectorField3::Builder::withCurlFunction
Builder & withCurlFunction(const std::function< Vector3D(const Vector3D &)> &func)
Returns builder with curl function.
jet::CustomVectorField3::divergence
double divergence(const Vector3D &x) const override
Returns the divergence at given position x.
vector_field3.h
jet::CustomVectorField3::CustomVectorField3
CustomVectorField3(const std::function< Vector3D(const Vector3D &)> &customFunction, double derivativeResolution=1e-3)
Constructs a field with given function.
jet::CustomVectorField3::CustomVectorField3
CustomVectorField3(const std::function< Vector3D(const Vector3D &)> &customFunction, const std::function< double(const Vector3D &)> &customDivergenceFunction, double derivativeResolution=1e-3)
Constructs a field with given field and gradient function.
jet::CustomVectorField3::sampler
std::function< Vector3D(const Vector3D &)> sampler() const override
Returns the sampler function.
jet::CustomVectorField3Ptr
std::shared_ptr< CustomVectorField3 > CustomVectorField3Ptr
Shared pointer type for the CustomVectorField3.
Definition: custom_vector_field3.h:73
jet::CustomVectorField3::Builder::makeShared
CustomVectorField3Ptr makeShared() const
Builds shared pointer of CustomVectorField3 instance.
jet::Vector3D
Vector3< double > Vector3D
Double-type 3D vector.
Definition: vector3.h:349
jet::Vector< T, 3 >
3-D vector class.
Definition: vector3.h:25
jet::CustomVectorField3::curl
Vector3D curl(const Vector3D &x) const override
Returns the curl at given position x.
jet::CustomVectorField3::CustomVectorField3
CustomVectorField3(const std::function< Vector3D(const Vector3D &)> &customFunction, const std::function< double(const Vector3D &)> &customDivergenceFunction, const std::function< Vector3D(const Vector3D &)> &customCurlFunction)
Constructs a field with given field, gradient, and Laplacian function.
jet::CustomVectorField3::Builder::withFunction
Builder & withFunction(const std::function< Vector3D(const Vector3D &)> &func)
Returns builder with field function.
jet::CustomVectorField3::Builder::withDivergenceFunction
Builder & withDivergenceFunction(const std::function< double(const Vector3D &)> &func)
Returns builder with divergence function.
jet::CustomVectorField3::Builder::build
CustomVectorField3 build() const
Builds CustomVectorField3.