Split of CartOperator into base-class and added Engine-class
parent
db4980c32f
commit
50e8ddaf0f
|
@ -3,53 +3,42 @@
|
||||||
CartOperator::CartOperator()
|
CartOperator::CartOperator()
|
||||||
{
|
{
|
||||||
Init();
|
Init();
|
||||||
|
Operator::Init();
|
||||||
}
|
}
|
||||||
|
|
||||||
CartOperator::~CartOperator()
|
CartOperator::~CartOperator()
|
||||||
{
|
{
|
||||||
Reset();
|
Reset();
|
||||||
|
Operator::Reset();
|
||||||
}
|
}
|
||||||
|
|
||||||
void CartOperator::Init()
|
void CartOperator::Init()
|
||||||
{
|
{
|
||||||
CSX = NULL;
|
|
||||||
MainOp=NULL;
|
MainOp=NULL;
|
||||||
DualOp=NULL;
|
DualOp=NULL;
|
||||||
E_Ex_index = NULL;
|
|
||||||
E_Ex_delay = NULL;
|
|
||||||
for (int n=0;n<3;++n)
|
for (int n=0;n<3;++n)
|
||||||
{
|
{
|
||||||
discLines[n]=NULL;
|
|
||||||
EC_C[n]=NULL;
|
EC_C[n]=NULL;
|
||||||
EC_G[n]=NULL;
|
EC_G[n]=NULL;
|
||||||
EC_L[n]=NULL;
|
EC_L[n]=NULL;
|
||||||
EC_R[n]=NULL;
|
EC_R[n]=NULL;
|
||||||
vv[n]=NULL;
|
|
||||||
vi[n]=NULL;
|
|
||||||
iv[n]=NULL;
|
|
||||||
ii[n]=NULL;
|
|
||||||
E_Ex_amp[n]=NULL;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Operator::Init();
|
||||||
}
|
}
|
||||||
|
|
||||||
void CartOperator::Reset()
|
void CartOperator::Reset()
|
||||||
{
|
{
|
||||||
delete[] E_Ex_index;
|
delete MainOp;
|
||||||
delete[] E_Ex_delay;
|
delete DualOp;
|
||||||
for (int n=0;n<3;++n)
|
for (int n=0;n<3;++n)
|
||||||
{
|
{
|
||||||
delete[] EC_C[n];
|
delete[] EC_C[n];
|
||||||
delete[] EC_G[n];
|
delete[] EC_G[n];
|
||||||
delete[] EC_L[n];
|
delete[] EC_L[n];
|
||||||
delete[] EC_R[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();
|
Init();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -1,57 +1,31 @@
|
||||||
#ifndef CARTOPERATOR_H
|
#ifndef CARTOPERATOR_H
|
||||||
#define CARTOPERATOR_H
|
#define CARTOPERATOR_H
|
||||||
|
|
||||||
#include "ContinuousStructure.h"
|
#include "operator.h"
|
||||||
#include "tools/AdrOp.h"
|
|
||||||
#include "tools/constants.h"
|
|
||||||
|
|
||||||
#define FDTD_FLOAT float
|
class CartOperator : public Operator
|
||||||
|
|
||||||
class CartOperator
|
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
CartOperator();
|
CartOperator();
|
||||||
virtual ~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
|
virtual void ApplyElectricBC(bool* dirs); //applied by default to all boundaries
|
||||||
void ApplyMagneticBC(bool* dirs);
|
virtual void ApplyMagneticBC(bool* dirs);
|
||||||
|
|
||||||
double GetTimestep() {return dT;};
|
virtual void Reset();
|
||||||
|
|
||||||
void Reset();
|
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
void Init();
|
virtual void Init();
|
||||||
ContinuousStructure* CSX;
|
|
||||||
|
|
||||||
AdrOp* MainOp;
|
AdrOp* MainOp;
|
||||||
AdrOp* DualOp;
|
AdrOp* DualOp;
|
||||||
double* discLines[3];
|
|
||||||
unsigned int numLines[3];
|
|
||||||
double gridDelta;
|
|
||||||
|
|
||||||
double dT; //FDTD timestep!
|
virtual bool CalcEFieldExcitation();
|
||||||
|
virtual double CalcTimestep();
|
||||||
//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();
|
|
||||||
|
|
||||||
//EC elements, internal only!
|
//EC elements, internal only!
|
||||||
bool Calc_EC();
|
bool Calc_EC();
|
||||||
|
|
|
@ -0,0 +1,9 @@
|
||||||
|
#include "engine.h"
|
||||||
|
|
||||||
|
Engine::Engine()
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
Engine::~Engine()
|
||||||
|
{
|
||||||
|
}
|
|
@ -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
|
|
@ -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;
|
||||||
|
}
|
|
@ -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
|
|
@ -17,8 +17,12 @@ LIBS += -L../CSXCAD \
|
||||||
SOURCES += main.cpp \
|
SOURCES += main.cpp \
|
||||||
FDTD/cartoperator.cpp \
|
FDTD/cartoperator.cpp \
|
||||||
tools/ErrorMsg.cpp \
|
tools/ErrorMsg.cpp \
|
||||||
tools/AdrOp.cpp
|
tools/AdrOp.cpp \
|
||||||
|
FDTD/engine.cpp \
|
||||||
|
FDTD/operator.cpp
|
||||||
HEADERS += FDTD/cartoperator.h \
|
HEADERS += FDTD/cartoperator.h \
|
||||||
tools/ErrorMsg.h \
|
tools/ErrorMsg.h \
|
||||||
tools/AdrOp.h \
|
tools/AdrOp.h \
|
||||||
tools/constants.h
|
tools/constants.h \
|
||||||
|
FDTD/engine.h \
|
||||||
|
FDTD/operator.h
|
||||||
|
|
Loading…
Reference in New Issue