real abstract base classes for common operator and engine-interface
This commit is contained in:
parent
3dc8c2df1c
commit
57ead21ccc
@ -40,21 +40,21 @@ public:
|
|||||||
InterpolationType GetInterpolationType() {return m_InterpolType;}
|
InterpolationType GetInterpolationType() {return m_InterpolType;}
|
||||||
|
|
||||||
//! Get the (interpolated) electric field at \p pos. \sa SetInterpolationType
|
//! Get the (interpolated) electric field at \p pos. \sa SetInterpolationType
|
||||||
virtual double* GetEField(const unsigned int* pos, double* out) const {UNUSED(pos); return out;}
|
virtual double* GetEField(const unsigned int* pos, double* out) const =0;
|
||||||
//! Get the (interpolated) magnetic field at \p pos. \sa SetInterpolationType
|
//! Get the (interpolated) magnetic field at \p pos. \sa SetInterpolationType
|
||||||
virtual double* GetHField(const unsigned int* pos, double* out) const {UNUSED(pos); return out;}
|
virtual double* GetHField(const unsigned int* pos, double* out) const =0;
|
||||||
|
|
||||||
//! Calculate the electric field integral along a given line
|
//! Calculate the electric field integral along a given line
|
||||||
virtual double CalcVoltageIntegral(const unsigned int* start, const unsigned int* stop) const {UNUSED(start); UNUSED(stop); return 0.0;}
|
virtual double CalcVoltageIntegral(const unsigned int* start, const unsigned int* stop) const =0;
|
||||||
|
|
||||||
//! Convert the interpolation type into a string.
|
//! Convert the interpolation type into a string.
|
||||||
static std::string GetInterpolationNameByType(InterpolationType mode);
|
static std::string GetInterpolationNameByType(InterpolationType mode);
|
||||||
|
|
||||||
//! Get the current simulation time
|
//! Get the current simulation time
|
||||||
virtual double GetTime(bool dualTime=false) const {UNUSED(dualTime); return 0.0;}
|
virtual double GetTime(bool dualTime=false) const =0;
|
||||||
|
|
||||||
//! Get the current number of timesteps
|
//! Get the current number of timesteps
|
||||||
virtual unsigned int GetNumberOfTimesteps() const {return 0;}
|
virtual unsigned int GetNumberOfTimesteps() const =0;
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
Engine_Interface_Base();
|
Engine_Interface_Base();
|
||||||
|
@ -22,51 +22,52 @@
|
|||||||
#include "Common/processing.h"
|
#include "Common/processing.h"
|
||||||
#include "string"
|
#include "string"
|
||||||
|
|
||||||
|
//! Abstract base-class for a common operator
|
||||||
class Operator_Base
|
class Operator_Base
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
//! Get the timestep used by this operator
|
//! Get the timestep used by this operator
|
||||||
double GetTimestep() const {return dT;};
|
virtual double GetTimestep() const {return dT;};
|
||||||
|
|
||||||
//! Get the number of cells or nodes defined by this operator
|
//! Get the number of cells or nodes defined by this operator
|
||||||
virtual double GetNumberCells() const {return 0;}
|
virtual double GetNumberCells() const =0;
|
||||||
|
|
||||||
//! Get the number of timesteps satisfying the nyquist condition (may depend on the excitation)
|
//! Get the number of timesteps satisfying the nyquist condition (may depend on the excitation)
|
||||||
unsigned int GetNumberOfNyquistTimesteps() const {return 0;}
|
virtual unsigned int GetNumberOfNyquistTimesteps() const =0;
|
||||||
|
|
||||||
//! Returns the number of lines as needed for post-processing etc. (for the engine, use GetOriginalNumLines())
|
//! Returns the number of lines as needed for post-processing etc. (for the engine, use GetOriginalNumLines())
|
||||||
virtual unsigned int GetNumberOfLines(int ny) const {return numLines[ny];}
|
virtual unsigned int GetNumberOfLines(int ny) const =0;
|
||||||
|
|
||||||
//! Get the name for the given direction: 0 -> x, 1 -> y, 2 -> z
|
//! Get the name for the given direction: 0 -> x, 1 -> y, 2 -> z
|
||||||
virtual std::string GetDirName(int ny) const;
|
virtual std::string GetDirName(int ny) const;
|
||||||
|
|
||||||
//! Get the grid drawing unit in m
|
//! Get the grid drawing unit in m
|
||||||
virtual double GetGridDelta() const {return 0;}
|
virtual double GetGridDelta() const =0;
|
||||||
|
|
||||||
//! Get the mesh delta times the grid delta for a 3D position (unit is meter)
|
//! Get the mesh delta times the grid delta for a 3D position (unit is meter)
|
||||||
virtual double GetMeshDelta(int n, const unsigned int* pos, bool dualMesh=false) const {UNUSED(n); UNUSED(pos); UNUSED(dualMesh); return 0.0;}
|
virtual double GetMeshDelta(int n, const unsigned int* pos, bool dualMesh=false) const =0;
|
||||||
|
|
||||||
//! Get the disc line in \a n direction (in drawing units)
|
//! Get the disc line in \a n direction (in drawing units)
|
||||||
virtual double GetDiscLine(int n, unsigned int pos, bool dualMesh=false) const {UNUSED(n); UNUSED(pos); UNUSED(dualMesh); return 0.0;}
|
virtual double GetDiscLine(int n, unsigned int pos, bool dualMesh=false) const =0;
|
||||||
|
|
||||||
//! Get the node width for a given direction \a n and a given mesh position \a pos
|
//! Get the node width for a given direction \a n and a given mesh position \a pos
|
||||||
virtual double GetNodeWidth(int ny, const unsigned int pos[3], bool dualMesh = false) const {UNUSED(ny); UNUSED(pos); UNUSED(dualMesh); return 0.0;}
|
virtual double GetNodeWidth(int ny, const unsigned int pos[3], bool dualMesh = false) const =0;
|
||||||
|
|
||||||
//! Get the node area for a given direction \a n and a given mesh position \a pos
|
//! Get the node area for a given direction \a n and a given mesh position \a pos
|
||||||
virtual double GetNodeArea(int ny, const unsigned int pos[3], bool dualMesh = false) const {UNUSED(ny); UNUSED(pos); UNUSED(dualMesh); return 0.0;}
|
virtual double GetNodeArea(int ny, const unsigned int pos[3], bool dualMesh = false) const =0;
|
||||||
|
|
||||||
//! Get the length of an FDTD edge (unit is meter).
|
//! Get the length of an FDTD edge (unit is meter).
|
||||||
virtual double GetEdgeLength(int ny, const unsigned int pos[3], bool dualMesh = false) const {UNUSED(ny); UNUSED(pos); UNUSED(dualMesh); return 0.0;}
|
virtual double GetEdgeLength(int ny, const unsigned int pos[3], bool dualMesh = false) const =0;
|
||||||
|
|
||||||
//! Get the area around an edge for a given direction \a n and a given mesh posisition \a pos
|
//! Get the area around an edge for a given direction \a n and a given mesh posisition \a pos
|
||||||
/*!
|
/*!
|
||||||
This will return the area around an edge with a given direction, measured at the middle of the edge.
|
This will return the area around an edge with a given direction, measured at the middle of the edge.
|
||||||
In a cartesian mesh this is equal to the NodeArea, may be different in other coordinate systems.
|
In a cartesian mesh this is equal to the NodeArea, may be different in other coordinate systems.
|
||||||
*/
|
*/
|
||||||
virtual double GetEdgeArea(int ny, const unsigned int pos[3], bool dualMesh = false) const {UNUSED(ny); UNUSED(pos); UNUSED(dualMesh); return 0.0;}
|
virtual double GetEdgeArea(int ny, const unsigned int pos[3], bool dualMesh = false) const =0;
|
||||||
|
|
||||||
//! Snap the given coodinates to mesh indices
|
//! Snap the given coodinates to mesh indices
|
||||||
virtual bool SnapToMesh(double* coord, unsigned int* uicoord, bool lower=false, bool* inside=NULL) {UNUSED(coord); UNUSED(uicoord); UNUSED(lower); UNUSED(inside); return false;};
|
virtual bool SnapToMesh(const double* coord, unsigned int* uicoord, bool lower=false, bool* inside=NULL) const =0;
|
||||||
|
|
||||||
//! Set the boundary conditions
|
//! Set the boundary conditions
|
||||||
virtual void SetBoundaryCondition(int* BCs) {for (int n=0; n<6; ++n) m_BC[n]=BCs[n];}
|
virtual void SetBoundaryCondition(int* BCs) {for (int n=0; n<6; ++n) m_BC[n]=BCs[n];}
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
readme for openEMS/Commen
|
readme for openEMS/Common
|
||||||
|
|
||||||
- This folder contains all classes common for all numerical solver included in openEMS (currently only FDTD)
|
- This folder contains all classes common for all numerical solver included in openEMS (currently only EC-FDTD)
|
||||||
- Operator-Base class
|
- Operator-Base class
|
||||||
- Engine-Interface classes
|
- Engine-Interface classes
|
||||||
- Commen processing classes
|
- Common processing classes
|
||||||
|
@ -124,7 +124,7 @@ double Operator::GetNodeArea(int ny, const unsigned int pos[3], bool dualMesh) c
|
|||||||
return GetNodeWidth(nyP,pos,dualMesh) * GetNodeWidth(nyPP,pos,dualMesh);
|
return GetNodeWidth(nyP,pos,dualMesh) * GetNodeWidth(nyPP,pos,dualMesh);
|
||||||
}
|
}
|
||||||
|
|
||||||
bool Operator::SnapToMesh(double* dcoord, unsigned int* uicoord, bool lower, bool* inside)
|
bool Operator::SnapToMesh(const double* dcoord, unsigned int* uicoord, bool lower, bool* inside) const
|
||||||
{
|
{
|
||||||
bool ok=true;
|
bool ok=true;
|
||||||
unsigned int numLines[3];
|
unsigned int numLines[3];
|
||||||
|
@ -28,7 +28,7 @@ class Operator_Extension;
|
|||||||
class Engine;
|
class Engine;
|
||||||
class TiXmlElement;
|
class TiXmlElement;
|
||||||
|
|
||||||
//! Abstract base-class for the FDTD-operator
|
//! Basic FDTD-operator
|
||||||
class Operator : public Operator_Base
|
class Operator : public Operator_Base
|
||||||
{
|
{
|
||||||
friend class Engine;
|
friend class Engine;
|
||||||
@ -82,7 +82,9 @@ public:
|
|||||||
bool GetTimestepValid() const {return !m_InvaildTimestep;}
|
bool GetTimestepValid() const {return !m_InvaildTimestep;}
|
||||||
virtual double GetNumberCells() const;
|
virtual double GetNumberCells() const;
|
||||||
|
|
||||||
unsigned int GetNumberOfNyquistTimesteps() const {return Exc->GetNyquistNum();}
|
virtual unsigned int GetNumberOfNyquistTimesteps() const {return Exc->GetNyquistNum();}
|
||||||
|
|
||||||
|
virtual unsigned int GetNumberOfLines(int ny) const {return numLines[ny];}
|
||||||
|
|
||||||
//! Returns the number of lines as needed for the engine etc. (for post-processing etc, use GetNumLines())
|
//! Returns the number of lines as needed for the engine etc. (for post-processing etc, use GetNumLines())
|
||||||
virtual unsigned int GetOriginalNumLines(int ny) const {return numLines[ny];}
|
virtual unsigned int GetOriginalNumLines(int ny) const {return numLines[ny];}
|
||||||
@ -113,7 +115,7 @@ public:
|
|||||||
*/
|
*/
|
||||||
virtual double GetEdgeArea(int ny, const unsigned int pos[3], bool dualMesh = false) const {return GetNodeArea(ny,pos,dualMesh);}
|
virtual double GetEdgeArea(int ny, const unsigned int pos[3], bool dualMesh = false) const {return GetNodeArea(ny,pos,dualMesh);}
|
||||||
|
|
||||||
virtual bool SnapToMesh(double* coord, unsigned int* uicoord, bool lower=false, bool* inside=NULL);
|
virtual bool SnapToMesh(const double* coord, unsigned int* uicoord, bool lower=false, bool* inside=NULL) const;
|
||||||
|
|
||||||
virtual void AddExtension(Operator_Extension* op_ext);
|
virtual void AddExtension(Operator_Extension* op_ext);
|
||||||
virtual size_t GetNumberOfExtentions() const {return m_Op_exts.size();}
|
virtual size_t GetNumberOfExtentions() const {return m_Op_exts.size();}
|
||||||
|
Loading…
Reference in New Issue
Block a user