From 6f6ed4feac6ee3aeeb6beafaa3bfb93e24befae1 Mon Sep 17 00:00:00 2001 From: Thorsten Liebig Date: Mon, 6 Jan 2014 16:08:13 +0100 Subject: [PATCH] critical fix: use new Operator->GetEngine for engine interface setup Bug fix: engine interfaces for multigrids were using subgrid operator, but main grid engine... Signed-off-by: Thorsten Liebig --- FDTD/engine_interface_cylindrical_fdtd.cpp | 2 +- FDTD/engine_interface_cylindrical_fdtd.h | 2 +- FDTD/engine_interface_fdtd.cpp | 13 +++++++++---- FDTD/engine_interface_fdtd.h | 2 +- FDTD/engine_interface_sse_fdtd.cpp | 9 +++++++-- FDTD/engine_interface_sse_fdtd.h | 2 +- openems.cpp | 17 ++++++++--------- 7 files changed, 28 insertions(+), 19 deletions(-) diff --git a/FDTD/engine_interface_cylindrical_fdtd.cpp b/FDTD/engine_interface_cylindrical_fdtd.cpp index 116d6dd..065a4ef 100644 --- a/FDTD/engine_interface_cylindrical_fdtd.cpp +++ b/FDTD/engine_interface_cylindrical_fdtd.cpp @@ -17,7 +17,7 @@ #include "engine_interface_cylindrical_fdtd.h" -Engine_Interface_Cylindrical_FDTD::Engine_Interface_Cylindrical_FDTD(Operator_sse* op, Engine_sse* eng) : Engine_Interface_SSE_FDTD(op,eng) +Engine_Interface_Cylindrical_FDTD::Engine_Interface_Cylindrical_FDTD(Operator_sse* op) : Engine_Interface_SSE_FDTD(op) { m_Op_Cyl = dynamic_cast(op); if (m_Op_Cyl==NULL) diff --git a/FDTD/engine_interface_cylindrical_fdtd.h b/FDTD/engine_interface_cylindrical_fdtd.h index 941a8ba..adbe184 100644 --- a/FDTD/engine_interface_cylindrical_fdtd.h +++ b/FDTD/engine_interface_cylindrical_fdtd.h @@ -24,7 +24,7 @@ class Engine_Interface_Cylindrical_FDTD : public Engine_Interface_SSE_FDTD { public: - Engine_Interface_Cylindrical_FDTD(Operator_sse* op, Engine_sse* eng); + Engine_Interface_Cylindrical_FDTD(Operator_sse* op); virtual ~Engine_Interface_Cylindrical_FDTD(); virtual double* GetHField(const unsigned int* pos, double* out) const; diff --git a/FDTD/engine_interface_fdtd.cpp b/FDTD/engine_interface_fdtd.cpp index 8b10f6d..31c9d28 100644 --- a/FDTD/engine_interface_fdtd.cpp +++ b/FDTD/engine_interface_fdtd.cpp @@ -17,15 +17,20 @@ #include "engine_interface_fdtd.h" -Engine_Interface_FDTD::Engine_Interface_FDTD(Operator* op, Engine* eng) : Engine_Interface_Base(op) +Engine_Interface_FDTD::Engine_Interface_FDTD(Operator* op) : Engine_Interface_Base(op) { - if ((op==NULL) || (eng==NULL)) + if (op==NULL) { - cerr << "Engine_Interface_FDTD::Engine_Interface_FDTD: Error: Operator or Engine is not set! Exit!" << endl; + cerr << "Engine_Interface_FDTD::Engine_Interface_FDTD: Error: Operator is not set! Exit!" << endl; exit(1); } m_Op = op; - m_Eng = eng; + m_Eng = m_Op->GetEngine(); + if (m_Eng==NULL) + { + cerr << "Engine_Interface_FDTD::Engine_Interface_FDTD: Error: Engine is not set! Exit!" << endl; + exit(1); + } } Engine_Interface_FDTD::~Engine_Interface_FDTD() diff --git a/FDTD/engine_interface_fdtd.h b/FDTD/engine_interface_fdtd.h index e93f7fd..4e824ac 100644 --- a/FDTD/engine_interface_fdtd.h +++ b/FDTD/engine_interface_fdtd.h @@ -27,7 +27,7 @@ class Engine_Interface_FDTD : public Engine_Interface_Base { public: - Engine_Interface_FDTD(Operator* op, Engine* eng); + Engine_Interface_FDTD(Operator* op); virtual ~Engine_Interface_FDTD(); //! Set the FDTD operator diff --git a/FDTD/engine_interface_sse_fdtd.cpp b/FDTD/engine_interface_sse_fdtd.cpp index 8f23547..b7e9a3c 100644 --- a/FDTD/engine_interface_sse_fdtd.cpp +++ b/FDTD/engine_interface_sse_fdtd.cpp @@ -17,10 +17,15 @@ #include "engine_interface_sse_fdtd.h" -Engine_Interface_SSE_FDTD::Engine_Interface_SSE_FDTD(Operator_sse* op, Engine_sse* eng) : Engine_Interface_FDTD(op, eng) +Engine_Interface_SSE_FDTD::Engine_Interface_SSE_FDTD(Operator_sse* op) : Engine_Interface_FDTD(op) { m_Op_SSE = op; - m_Eng_SSE = eng; + m_Eng_SSE = dynamic_cast(m_Op_SSE->GetEngine()); + if (m_Eng_SSE==NULL) + { + cerr << "Engine_Interface_SSE_FDTD::Engine_Interface_SSE_FDTD: Error: SSE-Engine is not set! Exit!" << endl; + exit(1); + } } Engine_Interface_SSE_FDTD::~Engine_Interface_SSE_FDTD() diff --git a/FDTD/engine_interface_sse_fdtd.h b/FDTD/engine_interface_sse_fdtd.h index 17327e1..b8f837a 100644 --- a/FDTD/engine_interface_sse_fdtd.h +++ b/FDTD/engine_interface_sse_fdtd.h @@ -25,7 +25,7 @@ class Engine_Interface_SSE_FDTD : public Engine_Interface_FDTD { public: - Engine_Interface_SSE_FDTD(Operator_sse* op, Engine_sse* eng); + Engine_Interface_SSE_FDTD(Operator_sse* op); virtual ~Engine_Interface_SSE_FDTD(); virtual double CalcFastEnergy() const; diff --git a/openems.cpp b/openems.cpp index 921b31d..3e408f3 100644 --- a/openems.cpp +++ b/openems.cpp @@ -307,15 +307,14 @@ bool openEMS::SetupBoundaryConditions(TiXmlElement* BC) Engine_Interface_FDTD* openEMS::NewEngineInterface(int multigridlevel) { Operator_CylinderMultiGrid* op_cyl_mg = dynamic_cast(FDTD_Op); - Engine_sse* eng_sse = dynamic_cast(FDTD_Eng); - while (op_cyl_mg && eng_sse && multigridlevel>0) + while (op_cyl_mg && multigridlevel>0) { int mgl = op_cyl_mg->GetMultiGridLevel(); if (mgl==multigridlevel) { if (g_settings.GetVerboseLevel()>0) cerr << __func__ << ": Operator with requested multi-grid level found." << endl; - return new Engine_Interface_Cylindrical_FDTD(op_cyl_mg,eng_sse); + return new Engine_Interface_Cylindrical_FDTD(op_cyl_mg); } Operator_Cylinder* op_cyl_inner = op_cyl_mg->GetInnerOperator(); op_cyl_mg = dynamic_cast(op_cyl_inner); @@ -323,17 +322,17 @@ Engine_Interface_FDTD* openEMS::NewEngineInterface(int multigridlevel) { if (g_settings.GetVerboseLevel()>0) cerr << __func__ << ": Operator with highest multi-grid level chosen." << endl; - return new Engine_Interface_Cylindrical_FDTD(op_cyl_inner,eng_sse); + return new Engine_Interface_Cylindrical_FDTD(op_cyl_inner); } // try next level } Operator_Cylinder* op_cyl = dynamic_cast(FDTD_Op); - if (op_cyl && eng_sse) - return new Engine_Interface_Cylindrical_FDTD(op_cyl,eng_sse); + if (op_cyl) + return new Engine_Interface_Cylindrical_FDTD(op_cyl); Operator_sse* op_sse = dynamic_cast(FDTD_Op); - if (op_sse && eng_sse) - return new Engine_Interface_SSE_FDTD(op_sse,eng_sse); - return new Engine_Interface_FDTD(FDTD_Op,FDTD_Eng); + if (op_sse) + return new Engine_Interface_SSE_FDTD(op_sse); + return new Engine_Interface_FDTD(FDTD_Op); } bool openEMS::SetupProcessing()