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