10#include "arrays/eh_vec.h"
11#include "arrays/tensor3d.h"
39 tdms_flags::InterpolationMethod::Cubic;
55 interpolation_method = im;
62 fftw_plan *plan_f =
nullptr;
63 fftw_plan *plan_b =
nullptr;
65 void initialise_from_matlab(
double ***tensor,
Dimensions &dims);
86 virtual int delta_n() = 0;
163 int delta_n()
override {
190 int delta_n()
override {
217 int delta_n()
override {
return 0; }
243 std::complex<double> angular_norm = 0.;
256 int il = 0, iu = 0, jl = 0, ju = 0, kl = 0, ku = 0;
267 Field(
int I_total,
int J_total,
int K_total);
328 std::complex<double> phasor_norm(
double f,
int n,
double omega,
double dt,
331 virtual double phase(
int n,
double omega,
double dt) = 0;
339 virtual std::complex<double>
356 int i_lower,
int i_upper,
int j_lower,
357 int j_upper,
int k_lower,
int k_upper,
373 std::complex<double> *y_at_centre,
374 std::complex<double> *z_at_centre) = 0;
385 std::complex<double> *y_at_centre,
386 std::complex<double> *z_at_centre) = 0;
417 double phase(
int n,
double omega,
double dt)
override;
422 :
Field(I_total, J_total, K_total){};
446 std::complex<double> *y_at_centre,
447 std::complex<double> *z_at_centre)
override;
460 std::complex<double> *y_at_centre,
461 std::complex<double> *z_at_centre)
override;
467 double phase(
int n,
double omega,
double dt)
override;
472 :
Field(I_total, J_total, K_total){};
496 std::complex<double> *y_at_centre,
497 std::complex<double> *z_at_centre)
override;
510 std::complex<double> *y_at_centre,
511 std::complex<double> *z_at_centre)
override;
522 mxArray *matlab_array =
nullptr;
523 double **array =
nullptr;
524 std::string folder_name =
"";
Classes describing arrays, vertices etc.
Container for {ijk} or {IJK} grouped variables.
double interpolate_to_centre_of(AxialDirection d, CellCoordinate cell) override
Interpolates a SplitField component to the centre of a Yee cell.
Definition field.h:229
CurrentDensitySplitField(int I_total, int J_total, int K_total)
Definition field.h:226
Definition dimensions.h:10
void interpolate_transverse_magnetic_components(CellCoordinate cell, std::complex< double > *x_at_centre, std::complex< double > *y_at_centre, std::complex< double > *z_at_centre) override
Interpolates the transverse magnetic components to the centre of Yee cell i,j,k.
void interpolate_transverse_electric_components(CellCoordinate cell, std::complex< double > *x_at_centre, std::complex< double > *y_at_centre, std::complex< double > *z_at_centre) override
Interpolates the transverse electric components to the centre of Yee cell i,j,k.
std::complex< double > interpolate_to_centre_of(AxialDirection d, CellCoordinate cell) override
Interpolates an E-field component to the centre of a Yee cell.
double interpolate_to_centre_of(AxialDirection d, CellCoordinate cell) override
Interpolates a split E-field component to the centre of a Yee cell.
ElectricSplitField(int I_total, int J_total, int K_total)
Definition field.h:174
void allocate_and_zero()
Definition field.h:283
void add_to_angular_norm(int n, int Nt, SimulationParameters ¶ms)
Compute the phasor_norm of the current field and add it to the current norm-value.
int il
Definition field.h:256
void normalise_volume()
Normalises the field entries by dividing by the angular norm.
virtual void interpolate_transverse_magnetic_components(CellCoordinate cell, std::complex< double > *x_at_centre, std::complex< double > *y_at_centre, std::complex< double > *z_at_centre)=0
Interpolates the Field's transverse magnetic components to the centre of Yee cell i,...
void set_phasors(SplitField &F, int n, double omega, double dt, int Nt)
void set_values_from(Field &other)
void interpolate_over_range(mxArray *x_out, mxArray *y_out, mxArray *z_out, Dimension mode=Dimension::THREE)
Interpolates the Field over the range provided.
double normalised_difference(Field &other)
Computes the maximum pointwise absolute difference of the other field to this one,...
virtual std::complex< double > interpolate_to_centre_of(AxialDirection d, CellCoordinate cell)=0
Interpolates a Field component to the centre of a Yee cell.
virtual void interpolate_transverse_electric_components(CellCoordinate cell, std::complex< double > *x_at_centre, std::complex< double > *y_at_centre, std::complex< double > *z_at_centre)=0
Interpolates the Field's transverse electric components to the centre of Yee cell i,...
void interpolate_over_range(mxArray *x_out, mxArray *y_out, mxArray *z_out, int i_lower, int i_upper, int j_lower, int j_upper, int k_lower, int k_upper, Dimension mode=Dimension::THREE)
Interpolates the Field over the range provided.
Field(int I_total, int J_total, int K_total)
int max_IJK_tot() const
Definition field.h:49
void set_preferred_interpolation_methods(tdms_flags::InterpolationMethod im)
Set the preferred interpolation methods.
Definition field.h:54
void interpolate_transverse_electric_components(CellCoordinate cell, std::complex< double > *x_at_centre, std::complex< double > *y_at_centre, std::complex< double > *z_at_centre) override
Interpolates the transverse electric components to the centre of Yee cell i,j,k.
std::complex< double > interpolate_to_centre_of(AxialDirection d, CellCoordinate cell) override
Interpolates an H-field component to the centre of a Yee cell.
void interpolate_transverse_magnetic_components(CellCoordinate cell, std::complex< double > *x_at_centre, std::complex< double > *y_at_centre, std::complex< double > *z_at_centre) override
Interpolates the transverse magnetic components to the centre of Yee cell i,j,k.
MagneticSplitField(int I_total, int J_total, int K_total)
Definition field.h:201
double interpolate_to_centre_of(AxialDirection d, CellCoordinate cell) override
Interpolates a split E-field component to the centre of a Yee cell.
Class storing the various constants and behaviour flags for one executation of the tdms executable.
Definition simulation_parameters.h:69
void initialise_fftw_plan(int n_threads, int size, EHVec &eh_vec)
A split field defined over a grid.
Definition field.h:84
virtual double interpolate_to_centre_of(AxialDirection d, CellCoordinate cell)=0
Interpolates a SplitField component to the centre of a Yee cell.
void allocate_and_zero()
Definition field.h:127
SplitFieldComponent zy
Definition field.h:100
double largest_field_value()
Fetches the largest absolute value of the field.
void initialise_fftw_plan(int n_threads, EHVec &eh_vec)
SplitFieldComponent yz
Definition field.h:96
SplitFieldComponent xz
Definition field.h:92
SplitField(int I_total, int J_total, int K_total)
SplitFieldComponent yx
Definition field.h:94
SplitFieldComponent zx
Definition field.h:98
SplitFieldComponent xy
Definition field.h:90
void export_field(SplitField &F, int stride, int iteration) const
void allocate(int _nI, int _nK)
Defines a class that serves as an explicit converter between MATLAB pointers and array dimensions.
Includes MATLAB headers for I/O.
InterpolationMethod
Definition input_flags.h:37
Classes collecting parameters for the simulation.
Dimension
Determines whether the simulation will compute all field components, or only the TE or TM modal compo...
Definition simulation_parameters.h:39
A structure for holding three values, which typically pertain to the same quantity but for each of th...
Definition cell_coordinate.h:21
int max() const
Return the maximum of i,j,k.
Definition cell_coordinate.h:27