fixed the operator resetting & cleanup + a lot of memory leaks fixed

This commit is contained in:
Thorsten Liebig 2011-01-24 11:11:45 +01:00
parent 57c4c56849
commit 67d1307fdf
17 changed files with 81 additions and 40 deletions

View File

@ -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)

View File

@ -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

View File

@ -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;

View File

@ -107,6 +107,7 @@ int ProcessFieldsFD::Process()
}
}
}
Delete_N_3DArray<FDTD_FLOAT>(field_td,numLines);
++m_FD_SampleCount;
return GetNextInterval();
}

View File

@ -100,7 +100,7 @@ int ProcessFieldsTD::Process()
else
cerr << "ProcessFieldsTD::Process: unknown File-Type" << endl;
Delete_N_3DArray(field,numLines);
Delete_N_3DArray<FDTD_FLOAT>(field,numLines);
return GetNextInterval();
}

View File

@ -42,7 +42,8 @@ Operator::~Operator()
for (size_t n=0; n<m_Op_exts.size(); ++n)
delete m_Op_exts.at(n);
m_Op_exts.clear();
Reset();
Delete();
}
Engine* Operator::CreateEngine() const
@ -81,29 +82,40 @@ void Operator::Init()
Exc = 0;
}
void Operator::Reset()
void Operator::Delete()
{
CSX = NULL;
Delete_N_3DArray(vv,numLines);
Delete_N_3DArray(vi,numLines);
Delete_N_3DArray(iv,numLines);
Delete_N_3DArray(ii,numLines);
delete MainOp;
delete DualOp;
vv=vi=iv=ii=0;
delete MainOp; MainOp=0;
delete DualOp; DualOp=0;
for (int n=0; n<3; ++n)
{
delete[] EC_C[n];
delete[] EC_G[n];
delete[] EC_L[n];
delete[] EC_R[n];
delete[] EC_C[n];EC_C[n]=0;
delete[] EC_G[n];EC_G[n]=0;
delete[] EC_L[n];EC_L[n]=0;
delete[] EC_R[n];EC_R[n]=0;
}
delete Exc;
delete Exc;Exc=0;
Delete_N_3DArray(m_epsR,numLines);
m_epsR=0;
Delete_N_3DArray(m_kappa,numLines);
m_kappa=0;
Delete_N_3DArray(m_mueR,numLines);
m_mueR=0;
Delete_N_3DArray(m_sigma,numLines);
m_sigma=0;
}
void Operator::Reset()
{
Delete();
Operator_Base::Reset();
}

View File

@ -127,6 +127,7 @@ protected:
Operator();
virtual void Init();
void Delete();
virtual void Reset();
virtual void InitOperator();
virtual void InitDataStorage();

View File

@ -37,7 +37,6 @@ Operator_Cylinder::Operator_Cylinder() : Operator_Multithread()
Operator_Cylinder::~Operator_Cylinder()
{
Operator_Multithread::Reset();
}
void Operator_Cylinder::Init()
@ -47,16 +46,6 @@ void Operator_Cylinder::Init()
Operator_Multithread::Init();
}
void Operator_Cylinder::Reset()
{
Operator_Multithread::Reset();
}
void Operator_Cylinder::InitOperator()
{
Operator_Multithread::InitOperator();
}
int Operator_Cylinder::CalcECOperator( DebugFlags debugFlags )
{
// debugs only work with the native vector dumps

View File

@ -68,8 +68,6 @@ public:
protected:
Operator_Cylinder();
virtual void Init();
virtual void InitOperator();
virtual void Reset();
//Calc timestep only internal use
virtual double CalcTimestep();

View File

@ -29,6 +29,7 @@ Operator_CylinderMultiGrid::Operator_CylinderMultiGrid(vector<double> Split_Radi
Operator_CylinderMultiGrid::~Operator_CylinderMultiGrid()
{
Delete();
}
Operator_CylinderMultiGrid* Operator_CylinderMultiGrid::New(vector<double> 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)

View File

@ -56,7 +56,7 @@ public:
protected:
Operator_CylinderMultiGrid(vector<double> Split_Radii);
virtual void Init();
// virtual void InitOperator();
void Delete();
virtual void Reset();
double m_Split_Rad;

View File

@ -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<unsigned int> &start, vector<unsigned int> &stop) const
{
vector<unsigned int> jpt = AssignJobs2Threads(numLines[0], numThreads, true);

View File

@ -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

View File

@ -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);

View File

@ -45,6 +45,7 @@ protected:
Operator_sse();
virtual void Init();
void Delete();
virtual void Reset();
virtual void InitOperator();

View File

@ -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<unsigned int>( 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<unsigned int>( numLines );
}

View File

@ -67,6 +67,7 @@ protected:
bool m_Use_Compression;
virtual void Init();
void Delete();
virtual void Reset();
virtual void InitOperator();