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