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