From 50e8ddaf0f0dd9e0dad9f93282cfb07c00d67542 Mon Sep 17 00:00:00 2001 From: Thorsten Liebig Date: Mon, 1 Mar 2010 09:19:39 +0100 Subject: [PATCH] Split of CartOperator into base-class and added Engine-class --- FDTD/cartoperator.cpp | 37 ++++++++++------------------ FDTD/cartoperator.h | 46 ++++++++--------------------------- FDTD/engine.cpp | 9 +++++++ FDTD/engine.h | 17 +++++++++++++ FDTD/operator.cpp | 51 +++++++++++++++++++++++++++++++++++++++ FDTD/operator.h | 56 +++++++++++++++++++++++++++++++++++++++++++ openEMS.pro | 8 +++++-- 7 files changed, 162 insertions(+), 62 deletions(-) create mode 100644 FDTD/engine.cpp create mode 100644 FDTD/engine.h create mode 100644 FDTD/operator.cpp create mode 100644 FDTD/operator.h diff --git a/FDTD/cartoperator.cpp b/FDTD/cartoperator.cpp index 0caafdb..b5fe0f0 100644 --- a/FDTD/cartoperator.cpp +++ b/FDTD/cartoperator.cpp @@ -3,53 +3,42 @@ CartOperator::CartOperator() { Init(); + Operator::Init(); } CartOperator::~CartOperator() { Reset(); + Operator::Reset(); } void CartOperator::Init() { - CSX = NULL; MainOp=NULL; DualOp=NULL; - E_Ex_index = NULL; - E_Ex_delay = NULL; - for (int n=0;n<3;++n) - { - discLines[n]=NULL; - EC_C[n]=NULL; - EC_G[n]=NULL; - EC_L[n]=NULL; - EC_R[n]=NULL; - vv[n]=NULL; - vi[n]=NULL; - iv[n]=NULL; - ii[n]=NULL; - E_Ex_amp[n]=NULL; + + for (int n=0;n<3;++n) + { + EC_C[n]=NULL; + EC_G[n]=NULL; + EC_L[n]=NULL; + EC_R[n]=NULL; } + + Operator::Init(); } void CartOperator::Reset() { - delete[] E_Ex_index; - delete[] E_Ex_delay; + delete MainOp; + delete DualOp; for (int n=0;n<3;++n) { delete[] EC_C[n]; delete[] EC_G[n]; delete[] EC_L[n]; delete[] EC_R[n]; - delete[] vv[n]; - delete[] vi[n]; - delete[] iv[n]; - delete[] ii[n]; - delete[] E_Ex_amp[n]; } - delete MainOp; - delete DualOp; Init(); } diff --git a/FDTD/cartoperator.h b/FDTD/cartoperator.h index 07a52ce..911a014 100644 --- a/FDTD/cartoperator.h +++ b/FDTD/cartoperator.h @@ -1,57 +1,31 @@ #ifndef CARTOPERATOR_H #define CARTOPERATOR_H -#include "ContinuousStructure.h" -#include "tools/AdrOp.h" -#include "tools/constants.h" +#include "operator.h" -#define FDTD_FLOAT float - -class CartOperator +class CartOperator : public Operator { public: CartOperator(); virtual ~CartOperator(); - void SetGeometryCSX(ContinuousStructure* geo); + virtual void SetGeometryCSX(ContinuousStructure* geo); - int CalcECOperator(); + virtual int CalcECOperator(); - void ApplyElectricBC(bool* dirs); //applied by default to all boundaries - void ApplyMagneticBC(bool* dirs); + virtual void ApplyElectricBC(bool* dirs); //applied by default to all boundaries + virtual void ApplyMagneticBC(bool* dirs); - double GetTimestep() {return dT;}; - - void Reset(); + virtual void Reset(); protected: - void Init(); - ContinuousStructure* CSX; + virtual void Init(); AdrOp* MainOp; AdrOp* DualOp; - double* discLines[3]; - unsigned int numLines[3]; - double gridDelta; - double dT; //FDTD timestep! - - //EC operator - FDTD_FLOAT* vv[3]; //calc new voltage from old voltage - FDTD_FLOAT* vi[3]; //calc new voltage from old current - FDTD_FLOAT* ii[3]; //calc new current from old current - FDTD_FLOAT* iv[3]; //calc new current from old voltage - - //E-Field Excitation - //! Calc the electric field excitation. - bool CalcEFieldExcitation(); - unsigned int E_Ex_Count; - unsigned int* E_Ex_index; - FDTD_FLOAT* E_Ex_amp[3]; //represented as edge-voltages!! - FDTD_FLOAT* E_Ex_delay; - - //Calc timestep only internal use - double CalcTimestep(); + virtual bool CalcEFieldExcitation(); + virtual double CalcTimestep(); //EC elements, internal only! bool Calc_EC(); diff --git a/FDTD/engine.cpp b/FDTD/engine.cpp new file mode 100644 index 0000000..0c290cd --- /dev/null +++ b/FDTD/engine.cpp @@ -0,0 +1,9 @@ +#include "engine.h" + +Engine::Engine() +{ +} + +Engine::~Engine() +{ +} diff --git a/FDTD/engine.h b/FDTD/engine.h new file mode 100644 index 0000000..07bca4a --- /dev/null +++ b/FDTD/engine.h @@ -0,0 +1,17 @@ +#ifndef ENGINE_H +#define ENGINE_H + +class Engine +{ +public: + Engine(); + virtual ~Engine(); + + //!Iterate a number of timesteps + bool IterateTS(unsigned int numTS); + +protected: + +}; + +#endif // ENGINE_H diff --git a/FDTD/operator.cpp b/FDTD/operator.cpp new file mode 100644 index 0000000..a138aad --- /dev/null +++ b/FDTD/operator.cpp @@ -0,0 +1,51 @@ +#include "operator.h" + +Operator::Operator() +{ + Operator::Init(); +} + +Operator::~Operator() +{ + Operator::Reset(); +} + +void Operator::Init() +{ + CSX = NULL; + + E_Ex_index = NULL; + E_Ex_delay = NULL; + for (int n=0;n<3;++n) + { + discLines[n]=NULL; + vv[n]=NULL; + vi[n]=NULL; + iv[n]=NULL; + ii[n]=NULL; + E_Ex_amp[n]=NULL; + } +} + +void Operator::Reset() +{ + delete[] E_Ex_index; + delete[] E_Ex_delay; + for (int n=0;n<3;++n) + { + delete[] vv[n]; + delete[] vi[n]; + delete[] iv[n]; + delete[] ii[n]; + delete[] E_Ex_amp[n]; + } + Operator::Init(); +} + +void Operator::SetGeometryCSX(ContinuousStructure* geo) +{ + if (geo==NULL) return; + + Reset(); + CSX = geo; +} diff --git a/FDTD/operator.h b/FDTD/operator.h new file mode 100644 index 0000000..38f9f75 --- /dev/null +++ b/FDTD/operator.h @@ -0,0 +1,56 @@ +#ifndef OPERATOR_H +#define OPERATOR_H + +#include "ContinuousStructure.h" +#include "tools/AdrOp.h" +#include "tools/constants.h" + +#define FDTD_FLOAT float + +//! Abstract base-class for the FDTD-operator +class Operator +{ + friend class Engine; +public: + Operator(); + virtual ~Operator(); + + virtual void SetGeometryCSX(ContinuousStructure* geo); + + virtual int CalcECOperator() {}; + + virtual void ApplyElectricBC(bool* dirs) {}; //applied by default to all boundaries + virtual void ApplyMagneticBC(bool* dirs) {}; + + double GetTimestep() {return dT;}; + + virtual void Reset(); + +protected: + virtual void Init(); + ContinuousStructure* CSX; + double gridDelta; + + double* discLines[3]; + unsigned int numLines[3]; + + //EC operator + FDTD_FLOAT* vv[3]; //calc new voltage from old voltage + FDTD_FLOAT* vi[3]; //calc new voltage from old current + FDTD_FLOAT* ii[3]; //calc new current from old current + FDTD_FLOAT* iv[3]; //calc new current from old voltage + + //E-Field Excitation + //! Calc the electric field excitation. + virtual bool CalcEFieldExcitation() {}; + unsigned int E_Ex_Count; + unsigned int* E_Ex_index; + FDTD_FLOAT* E_Ex_amp[3]; //represented as edge-voltages!! + FDTD_FLOAT* E_Ex_delay; + + //Calc timestep only internal use + virtual double CalcTimestep() {}; + double dT; //FDTD timestep! +}; + +#endif // OPERATOR_H diff --git a/openEMS.pro b/openEMS.pro index 1510f1e..bbd644a 100644 --- a/openEMS.pro +++ b/openEMS.pro @@ -17,8 +17,12 @@ LIBS += -L../CSXCAD \ SOURCES += main.cpp \ FDTD/cartoperator.cpp \ tools/ErrorMsg.cpp \ - tools/AdrOp.cpp + tools/AdrOp.cpp \ + FDTD/engine.cpp \ + FDTD/operator.cpp HEADERS += FDTD/cartoperator.h \ tools/ErrorMsg.h \ tools/AdrOp.h \ - tools/constants.h + tools/constants.h \ + FDTD/engine.h \ + FDTD/operator.h