38 constexpr double epsilon = 1e-6;
40 return std::abs(
x_i - other.
x_i) < epsilon &&
41 std::abs(
x_j - other.
x_j) < epsilon &&
48 std::string result =
"Gauss coupling [";
49 result +=
"x_i: " + std::format(
"{:.2f}",
x_i) +
" ";
50 result +=
"x_j: " + std::format(
"{:.2f}",
x_j) +
" ";
51 result +=
"a: " + std::format(
"{:.2f}",
amplitude) +
" ";
52 result +=
"w: " + std::format(
"{:.2f}",
width) +
"]\n";
74 const std::vector<GaussCoupling>&
couplings = {})
85 [[nodiscard]] std::string
toString()
const override
87 std::ostringstream result;
88 result << std::fixed << std::setprecision(2);
89 result <<
"Parameters: ["
90 <<
"Circular: " << (
circular ?
"true" :
"false") <<
", "
91 <<
"Normalized: " << (
normalized ?
"true" :
"false") <<
", "
95 result << coupling.toString();
125 void init()
override;
126 void step(
double t,
double deltaT)
override;
127 std::string
toString()
const override;
128 std::shared_ptr<Element>
clone()
const override;
145 void updateInputFieldDimensions();
Definition exception.h:25
Abstract base class for all simulation elements.
Definition element.h:28
Sparse Gaussian field coupling with a fixed, user-defined projection.
Definition gauss_field_coupling.h:111
void changeInputDimensions(const ElementDimensions &newInputDimensions)
Resize the input field dimensions and rebuild the weight matrix. Preserves output field dimensions an...
Definition gauss_field_coupling.cpp:109
void changeDimensions(const ElementDimensions &newDimensions) override
Resize the output field dimensions and rebuild the weight matrix. Preserves input field dimensions an...
Definition gauss_field_coupling.cpp:100
void setParameters(const GaussFieldCouplingParameters &gfc_parameters)
Definition gauss_field_coupling.cpp:118
std::shared_ptr< Element > clone() const override
Definition gauss_field_coupling.cpp:70
void step(double t, double deltaT) override
Advance the element by one time step.
Definition gauss_field_coupling.cpp:56
std::string toString() const override
Definition gauss_field_coupling.cpp:62
void addCoupling(const GaussCoupling &coupling)
Append a new point-coupling at runtime.
Definition gauss_field_coupling.cpp:90
ElementDimensions getInputFieldDimensions() const
Definition gauss_field_coupling.cpp:124
GaussFieldCouplingParameters getParameters() const
Definition gauss_field_coupling.cpp:95
void init() override
Initialize the element (called once before the simulation loop).
Definition gauss_field_coupling.cpp:17
Definition element_parameters.h:10
Definition element_parameters.h:188
Definition element_parameters.h:159
std::string toString() const
Definition element_parameters.cpp:55
Definition element_parameters.h:206
A single sparse Gaussian point-coupling between two spatial locations.
Definition gauss_field_coupling.h:18
GaussCoupling(const double x_i, const double x_j, const double amplitude, const double width)
Construct a GaussCoupling. All parameters must be positive.
Definition gauss_field_coupling.h:29
double amplitude
Peak coupling weight.
Definition gauss_field_coupling.h:21
double x_j
Target location in the output field.
Definition gauss_field_coupling.h:20
double width
Gaussian spread (σ) of the coupling.
Definition gauss_field_coupling.h:22
double x_i
Source location in the input field.
Definition gauss_field_coupling.h:19
bool operator==(const GaussCoupling &other) const
Definition gauss_field_coupling.h:36
std::string toString() const
Definition gauss_field_coupling.h:46
Parameters for a sparse Gaussian field coupling (fixed projection).
Definition gauss_field_coupling.h:61
std::string toString() const override
Definition gauss_field_coupling.h:85
GaussFieldCouplingParameters(const ElementDimensions &inputFieldDimensions=ElementDimensions{}, bool normalized=true, bool circular=false, const std::vector< GaussCoupling > &couplings={})
Construct GaussFieldCoupling parameters.
Definition gauss_field_coupling.h:72
ElementDimensions inputFieldDimensions
Spatial dimensions of the source field.
Definition gauss_field_coupling.h:62
bool circular
If true, convolution wraps at field boundaries.
Definition gauss_field_coupling.h:64
std::vector< GaussCoupling > couplings
List of explicit point-to-point Gaussian couplings.
Definition gauss_field_coupling.h:65
void addCoupling(const GaussCoupling &coupling)
Append a coupling to the list.
Definition gauss_field_coupling.h:80
bool normalized
If true, each coupling Gaussian is area-normalised.
Definition gauss_field_coupling.h:63