diff --git a/Common/operator_base.cpp b/Common/operator_base.cpp index 254f006..858d751 100644 --- a/Common/operator_base.cpp +++ b/Common/operator_base.cpp @@ -29,7 +29,7 @@ Operator_Base::Operator_Base() Operator_Base::~Operator_Base() { - + Delete(); } std::string Operator_Base::GetDirName(int ny) const @@ -49,11 +49,21 @@ void Operator_Base::Init() m_BC[n]=0; } -void Operator_Base::Reset() +void Operator_Base::Delete() { for (int n=0; n<3; ++n) + { delete[] discLines[n]; - Init(); + discLines[n]=0; + } + for (int n=0; n<6; ++n) + m_BC[n]=0; + dT = 0; +} + +void Operator_Base::Reset() +{ + Delete(); } void Operator_Base::SetMaterialStoreFlags(int type, bool val) diff --git a/Common/operator_base.h b/Common/operator_base.h index 34ff4ef..e7caba1 100644 --- a/Common/operator_base.h +++ b/Common/operator_base.h @@ -26,6 +26,8 @@ class Operator_Base { public: + virtual ~Operator_Base(); + //! Get the timestep used by this operator virtual double GetTimestep() const {return dT;}; @@ -77,9 +79,10 @@ public: protected: Operator_Base(); - virtual ~Operator_Base(); virtual void Init(); + //! Cleanup data and reset + void Delete(); virtual void Reset(); //! boundary conditions diff --git a/Common/processfields.cpp b/Common/processfields.cpp index cf147d4..60c011c 100644 --- a/Common/processfields.cpp +++ b/Common/processfields.cpp @@ -413,6 +413,7 @@ bool ProcessFields::WriteMesh2HDF5(string filename, string groupName, unsigned i } //write to dataset dataset.write( array, H5::PredType::NATIVE_FLOAT ); + delete[] array; } delete group; diff --git a/Common/processfields_fd.cpp b/Common/processfields_fd.cpp index 3e48d81..4057535 100644 --- a/Common/processfields_fd.cpp +++ b/Common/processfields_fd.cpp @@ -107,6 +107,7 @@ int ProcessFieldsFD::Process() } } } + Delete_N_3DArray(field_td,numLines); ++m_FD_SampleCount; return GetNextInterval(); } diff --git a/Common/processfields_td.cpp b/Common/processfields_td.cpp index c2486cb..053da48 100644 --- a/Common/processfields_td.cpp +++ b/Common/processfields_td.cpp @@ -100,7 +100,7 @@ int ProcessFieldsTD::Process() else cerr << "ProcessFieldsTD::Process: unknown File-Type" << endl; - Delete_N_3DArray(field,numLines); + Delete_N_3DArray(field,numLines); return GetNextInterval(); } diff --git a/FDTD/operator.cpp b/FDTD/operator.cpp index a25593f..f0188e5 100644 --- a/FDTD/operator.cpp +++ b/FDTD/operator.cpp @@ -42,7 +42,8 @@ Operator::~Operator() for (size_t n=0; n Split_Radi Operator_CylinderMultiGrid::~Operator_CylinderMultiGrid() { + Delete(); } Operator_CylinderMultiGrid* Operator_CylinderMultiGrid::New(vector Split_Radii, unsigned int numThreads) @@ -177,10 +178,16 @@ bool Operator_CylinderMultiGrid::SetupExcitation(TiXmlElement* Excite, unsigned return Exc->setupExcitation(Excite,maxTS); } +void Operator_CylinderMultiGrid::Delete() +{ + delete m_InnerOp; + m_InnerOp=0; +} + void Operator_CylinderMultiGrid::Reset() { + Delete(); Operator_Cylinder::Reset(); - m_InnerOp->Reset(); } void Operator_CylinderMultiGrid::SetBoundaryCondition(int* BCs) diff --git a/FDTD/operator_cylindermultigrid.h b/FDTD/operator_cylindermultigrid.h index a0df835..fd5e30a 100644 --- a/FDTD/operator_cylindermultigrid.h +++ b/FDTD/operator_cylindermultigrid.h @@ -56,7 +56,7 @@ public: protected: Operator_CylinderMultiGrid(vector Split_Radii); virtual void Init(); -// virtual void InitOperator(); + void Delete(); virtual void Reset(); double m_Split_Rad; diff --git a/FDTD/operator_multithread.cpp b/FDTD/operator_multithread.cpp index 95fc3cc..3c691fa 100644 --- a/FDTD/operator_multithread.cpp +++ b/FDTD/operator_multithread.cpp @@ -30,6 +30,7 @@ Operator_Multithread* Operator_Multithread::New(unsigned int numThreads) Operator_Multithread::~Operator_Multithread() { + Delete(); } void Operator_Multithread::setNumThreads( unsigned int numThreads ) @@ -55,6 +56,7 @@ Operator_Multithread::Operator_Multithread() void Operator_Multithread::Init() { Operator_SSE_Compressed::Init(); + m_CalcEC_Start=NULL; m_CalcEC_Stop=NULL; @@ -62,10 +64,8 @@ void Operator_Multithread::Init() m_CalcPEC_Stop=NULL; } -void Operator_Multithread::Reset() +void Operator_Multithread::Delete() { - Operator_SSE_Compressed::Reset(); - m_thread_group.join_all(); delete m_CalcEC_Start; @@ -79,6 +79,12 @@ void Operator_Multithread::Reset() m_CalcPEC_Stop=NULL; } +void Operator_Multithread::Reset() +{ + Delete(); + Operator_SSE_Compressed::Reset(); +} + void Operator_Multithread::CalcStartStopLines(unsigned int &numThreads, vector &start, vector &stop) const { vector jpt = AssignJobs2Threads(numLines[0], numThreads, true); diff --git a/FDTD/operator_multithread.h b/FDTD/operator_multithread.h index dc4b524..fcb6f83 100644 --- a/FDTD/operator_multithread.h +++ b/FDTD/operator_multithread.h @@ -40,6 +40,7 @@ public: protected: Operator_Multithread(); virtual void Init(); + void Delete(); virtual void Reset(); virtual bool Calc_EC(); //this method is using multi-threading diff --git a/FDTD/operator_sse.cpp b/FDTD/operator_sse.cpp index 7dfd677..8a1b21b 100644 --- a/FDTD/operator_sse.cpp +++ b/FDTD/operator_sse.cpp @@ -38,7 +38,7 @@ Operator_sse::Operator_sse() : Operator() Operator_sse::~Operator_sse() { - Reset(); + Delete(); } Engine* Operator_sse::CreateEngine() const @@ -57,7 +57,7 @@ void Operator_sse::Init() f4_ii = 0; } -void Operator_sse::Reset() +void Operator_sse::Delete() { Delete_N_3DArray_v4sf(f4_vv,numLines); Delete_N_3DArray_v4sf(f4_vi,numLines); @@ -67,9 +67,15 @@ void Operator_sse::Reset() f4_vi = 0; f4_iv = 0; f4_ii = 0; +} + +void Operator_sse::Reset() +{ + Delete(); Operator::Reset(); } + void Operator_sse::InitOperator() { Delete_N_3DArray_v4sf(f4_vv,numLines); diff --git a/FDTD/operator_sse.h b/FDTD/operator_sse.h index 2edde89..280fa43 100644 --- a/FDTD/operator_sse.h +++ b/FDTD/operator_sse.h @@ -45,6 +45,7 @@ protected: Operator_sse(); virtual void Init(); + void Delete(); virtual void Reset(); virtual void InitOperator(); diff --git a/FDTD/operator_sse_compressed.cpp b/FDTD/operator_sse_compressed.cpp index b66f0c9..1a11f4d 100644 --- a/FDTD/operator_sse_compressed.cpp +++ b/FDTD/operator_sse_compressed.cpp @@ -34,12 +34,12 @@ Operator_SSE_Compressed* Operator_SSE_Compressed::New() Operator_SSE_Compressed::Operator_SSE_Compressed() : Operator_sse() { m_Op_index = NULL; - m_Use_Compression = false; + m_Use_Compression = false; } Operator_SSE_Compressed::~Operator_SSE_Compressed() { - Reset(); + Delete(); } Engine* Operator_SSE_Compressed::CreateEngine() const @@ -66,13 +66,12 @@ int Operator_SSE_Compressed::CalcECOperator( DebugFlags debugFlags ) void Operator_SSE_Compressed::Init() { Operator_sse::Init(); + m_Use_Compression = false; m_Op_index = NULL; } -void Operator_SSE_Compressed::Reset() +void Operator_SSE_Compressed::Delete() { - Operator_sse::Reset(); - if (m_Op_index) { Delete3DArray( m_Op_index, numLines ); @@ -89,6 +88,12 @@ void Operator_SSE_Compressed::Reset() } } +void Operator_SSE_Compressed::Reset() +{ + Delete(); + Operator_sse::Reset(); +} + void Operator_SSE_Compressed::InitOperator() { //cleanup compression @@ -102,7 +107,6 @@ void Operator_SSE_Compressed::InitOperator() } Operator_sse::InitOperator(); - m_Op_index = Create3DArray( numLines ); } diff --git a/FDTD/operator_sse_compressed.h b/FDTD/operator_sse_compressed.h index a2cff2d..66643ad 100644 --- a/FDTD/operator_sse_compressed.h +++ b/FDTD/operator_sse_compressed.h @@ -67,6 +67,7 @@ protected: bool m_Use_Compression; virtual void Init(); + void Delete(); virtual void Reset(); virtual void InitOperator();