44 if (this->zeroCrossings < 0.0) this->zeroCrossings = 0.0;
45 else if (this->zeroCrossings > 1.0) this->zeroCrossings = 1.0;
46 if (this->decay <= 0.0) this->decay = 0.01;
51 constexpr double epsilon = 1e-6;
60 [[nodiscard]] std::string
toString()
const override
62 std::ostringstream result;
63 result << std::fixed << std::setprecision(2);
64 result <<
"Parameters: ["
66 <<
"Decay: " <<
decay <<
", "
69 <<
"Circular: " << (
circular ?
"true" :
"false") <<
", "
70 <<
"Normalized: " << (
normalized ?
"true" :
"false") <<
"]";
91 std::array<int, 2> kernelRange_x{};
92 std::array<int, 2> kernelRange_y{};
93 std::vector<int> extIndex_x;
94 std::vector<int> extIndex_y;
95 std::vector<double> kernel_1d_x;
96 std::vector<double> kernel_1d_y;
97 std::vector<double> scratchTmp_;
98 std::vector<double> scratchConvolution_;
103 void init()
override;
104 void step(
double t,
double deltaT)
override;
105 [[nodiscard]] std::string
toString()
const override;
106 [[nodiscard]] std::shared_ptr<Element>
clone()
const override;
Abstract base class for all convolution-based interaction kernels.
Definition kernel.h:17
2D oscillatory lateral-interaction kernel using separable convolution.
Definition oscillatory_kernel_2d.h:88
void step(double t, double deltaT) override
Advance the element by one time step.
Definition oscillatory_kernel_2d.cpp:87
void setParameters(const OscillatoryKernel2DParameters ¶meters)
Definition oscillatory_kernel_2d.cpp:118
std::shared_ptr< Element > clone() const override
Definition oscillatory_kernel_2d.cpp:113
void init() override
Initialize the element (called once before the simulation loop).
Definition oscillatory_kernel_2d.cpp:17
OscillatoryKernel2DParameters getParameters() const
Definition oscillatory_kernel_2d.cpp:127
std::string toString() const override
Definition oscillatory_kernel_2d.cpp:105
Definition element_parameters.h:10
Definition element_parameters.h:188
Definition element_parameters.h:206
Parameters for OscillatoryKernel2D.
Definition oscillatory_kernel_2d.h:29
double amplitude
Definition oscillatory_kernel_2d.h:30
OscillatoryKernel2DParameters(double amplitude=1.0, double decay=0.08, double zeroCrossings=0.3, double amplitudeGlobal=-0.01, bool circular=true, bool normalized=true)
Definition oscillatory_kernel_2d.h:37
bool circular
Definition oscillatory_kernel_2d.h:34
double zeroCrossings
Definition oscillatory_kernel_2d.h:32
double amplitudeGlobal
Definition oscillatory_kernel_2d.h:33
bool normalized
Definition oscillatory_kernel_2d.h:35
std::string toString() const override
Definition oscillatory_kernel_2d.h:60
double decay
Definition oscillatory_kernel_2d.h:31
bool operator==(const OscillatoryKernel2DParameters &other) const
Definition oscillatory_kernel_2d.h:49