From dff20e51cd13b1a65b685f92217676160813d2f8 Mon Sep 17 00:00:00 2001 From: Thorsten Liebig Date: Tue, 18 Jan 2011 10:34:13 +0100 Subject: [PATCH] processing: new type name and header dump in integral processing - new type name for each processing class (used in some file descriptions) - new integral name in ProcessIntegral for every result row --> used in file header Signed-off-by: Thorsten Liebig --- Common/process_efield.cpp | 11 ++++++++++ Common/process_efield.h | 4 ++++ Common/process_hfield.cpp | 11 ++++++++++ Common/process_hfield.h | 4 ++++ Common/processcurrent.cpp | 7 +++++++ Common/processcurrent.h | 4 ++++ Common/processfields.h | 2 ++ Common/processfields_fd.h | 2 ++ Common/processfields_td.h | 2 ++ Common/processing.h | 5 ++++- Common/processintegral.cpp | 40 +++++++++++++++++++++++++++++++++++-- Common/processintegral.h | 5 +++++ Common/processmodematch.cpp | 25 +++++++++++++++++++++++ Common/processmodematch.h | 4 ++++ Common/processvoltage.cpp | 7 +++++++ Common/processvoltage.h | 4 ++++ 16 files changed, 134 insertions(+), 3 deletions(-) diff --git a/Common/process_efield.cpp b/Common/process_efield.cpp index 4e7713e..2d820dc 100644 --- a/Common/process_efield.cpp +++ b/Common/process_efield.cpp @@ -29,6 +29,17 @@ ProcessEField::~ProcessEField() FlushData(); } +string ProcessEField::GetIntegralName(int row) const +{ + if (row==0) + return "Ex/(V/m)"; + if (row==1) + return "Ey/(V/m)"; + if (row==2) + return "Ez/(V/m)"; + return "unknown"; +} + void ProcessEField::InitProcess() { OpenFile(m_Name); diff --git a/Common/process_efield.h b/Common/process_efield.h index 1fd7709..b85f29f 100644 --- a/Common/process_efield.h +++ b/Common/process_efield.h @@ -32,6 +32,10 @@ public: ProcessEField(Engine_Interface_Base* eng_if, Engine* eng); virtual ~ProcessEField(); + virtual string GetProcessingName() const {return "electric field probe";} + + virtual string GetIntegralName(int row) const; + virtual void InitProcess(); virtual void FlushData(); void Dump_FD_Data(vector value[3], double factor, string filename); diff --git a/Common/process_hfield.cpp b/Common/process_hfield.cpp index 511e575..2947289 100644 --- a/Common/process_hfield.cpp +++ b/Common/process_hfield.cpp @@ -27,6 +27,17 @@ ProcessHField::~ProcessHField() { } +string ProcessHField::GetIntegralName(int row) const +{ + if (row==0) + return "Hx/(A/m)"; + if (row==1) + return "Hy/(A/m)"; + if (row==2) + return "Hz/(A/m)"; + return "unknown"; +} + void ProcessHField::InitProcess() { OpenFile(m_Name); diff --git a/Common/process_hfield.h b/Common/process_hfield.h index 5d16355..9f71eb9 100644 --- a/Common/process_hfield.h +++ b/Common/process_hfield.h @@ -31,6 +31,10 @@ public: ProcessHField(Engine_Interface_Base* eng_if, Engine* eng); virtual ~ProcessHField(); + virtual string GetProcessingName() const {return "magnetic field probe";} + + virtual string GetIntegralName(int row) const; + virtual void InitProcess(); void DefineStartStopCoord(double* dstart, double* dstop); virtual int Process(); diff --git a/Common/processcurrent.cpp b/Common/processcurrent.cpp index 434e8d1..e97356e 100644 --- a/Common/processcurrent.cpp +++ b/Common/processcurrent.cpp @@ -28,6 +28,13 @@ ProcessCurrent::~ProcessCurrent() { } +string ProcessCurrent::GetIntegralName(int row) const +{ + if (row==0) + return "current"; + return "unknown"; +} + double ProcessCurrent::CalcIntegral() { FDTD_FLOAT current=0; diff --git a/Common/processcurrent.h b/Common/processcurrent.h index e382fb5..de3b686 100644 --- a/Common/processcurrent.h +++ b/Common/processcurrent.h @@ -26,6 +26,10 @@ public: ProcessCurrent(Engine_Interface_Base* eng_if); virtual ~ProcessCurrent(); + virtual string GetProcessingName() const {return "current integration";} + + virtual string GetIntegralName(int row) const; + //! Integrate currents flowing through an area virtual double CalcIntegral(); diff --git a/Common/processfields.h b/Common/processfields.h index aa2d13b..7f1f9b4 100644 --- a/Common/processfields.h +++ b/Common/processfields.h @@ -39,6 +39,8 @@ public: */ enum DumpType { E_FIELD_DUMP, H_FIELD_DUMP, J_FIELD_DUMP, ROTH_FIELD_DUMP}; + virtual string GetProcessingName() const {return "common field processing";} + virtual void InitProcess(); virtual void DefineStartStopCoord(double* dstart, double* dstop); diff --git a/Common/processfields_fd.h b/Common/processfields_fd.h index 3a47474..61d192c 100644 --- a/Common/processfields_fd.h +++ b/Common/processfields_fd.h @@ -26,6 +26,8 @@ public: ProcessFieldsFD(Engine_Interface_Base* eng_if); virtual ~ProcessFieldsFD(); + virtual string GetProcessingName() const {return "frequency domain field dump";} + virtual void InitProcess(); virtual int Process(); diff --git a/Common/processfields_td.h b/Common/processfields_td.h index cd8b17c..02345b6 100644 --- a/Common/processfields_td.h +++ b/Common/processfields_td.h @@ -26,6 +26,8 @@ public: ProcessFieldsTD(Engine_Interface_Base* eng_if); virtual ~ProcessFieldsTD(); + virtual string GetProcessingName() const {return "time domain field dump";} + virtual void InitProcess(); virtual int Process(); diff --git a/Common/processing.h b/Common/processing.h index b7d5c20..80a21f3 100644 --- a/Common/processing.h +++ b/Common/processing.h @@ -40,7 +40,6 @@ using namespace std; class Processing { public: - Processing(Engine_Interface_Base* eng_if); virtual ~Processing(); enum MeshType { CARTESIAN_MESH, CYLINDRICAL_MESH}; @@ -50,6 +49,9 @@ public: virtual void SetName(string val) {m_Name=val;} + //! Get the name for this processing, will be used in file description. + virtual string GetProcessingName() const = 0; + virtual void InitProcess() {}; virtual void Reset(); @@ -101,6 +103,7 @@ public: virtual void SetDualTime(bool val) {m_dualTime=val;} protected: + Processing(Engine_Interface_Base* eng_if); Engine_Interface_Base* m_Eng_Interface; const Operator_Base* Op; MeshType m_Mesh_Type; diff --git a/Common/processintegral.cpp b/Common/processintegral.cpp index 31dc9a0..3da7107 100644 --- a/Common/processintegral.cpp +++ b/Common/processintegral.cpp @@ -16,6 +16,7 @@ */ #include "processintegral.h" +#include "Common/operator_base.h" #include "time.h" #include @@ -44,6 +45,25 @@ void ProcessIntegral::InitProcess() m_filename = m_Name; OpenFile(m_filename); + //write header + time_t rawTime; + time(&rawTime); + file << "% time-domain " << GetProcessingName() << " by openEMS " << GIT_VERSION << " @" << ctime(&rawTime); + file << "% start-coordinates: (" + << Op->GetDiscLine(0,start[0])*Op->GetGridDelta() << "," + << Op->GetDiscLine(1,start[1])*Op->GetGridDelta() << "," + << Op->GetDiscLine(2,start[2])*Op->GetGridDelta() << ") m -> [" << start[0] << "," << start[1] << "," << start[2] << "]" << endl; + file << "% stop-coordinates: (" + << Op->GetDiscLine(0,stop[0])*Op->GetGridDelta() << "," + << Op->GetDiscLine(1,stop[1])*Op->GetGridDelta() << "," + << Op->GetDiscLine(2,stop[2])*Op->GetGridDelta() << ") m -> [" << stop[0] << "," << stop[1] << "," << stop[2] << "]" << endl; + file << "% t/s"; + for (int n=0;nGetDiscLine(0,start[0])*Op->GetGridDelta() << "," + << Op->GetDiscLine(1,start[1])*Op->GetGridDelta() << "," + << Op->GetDiscLine(2,start[2])*Op->GetGridDelta() << ") m -> [" << start[0] << "," << start[1] << "," << start[2] << "]" << endl; + file << "% stop-coordinates: (" + << Op->GetDiscLine(0,stop[0])*Op->GetGridDelta() << "," + << Op->GetDiscLine(1,stop[1])*Op->GetGridDelta() << "," + << Op->GetDiscLine(2,stop[2])*Op->GetGridDelta() << ") m -> [" << stop[0] << "," << stop[1] << "," << stop[2] << "]" << endl; + file << "% f/Hz"; + for (int n=0;n