summaryrefslogtreecommitdiff
path: root/openEMS/openems.h
diff options
context:
space:
mode:
Diffstat (limited to 'openEMS/openems.h')
-rw-r--r--openEMS/openems.h167
1 files changed, 167 insertions, 0 deletions
diff --git a/openEMS/openems.h b/openEMS/openems.h
new file mode 100644
index 0000000..d194050
--- /dev/null
+++ b/openEMS/openems.h
@@ -0,0 +1,167 @@
+/*
+* Copyright (C) 2010 Thorsten Liebig (Thorsten.Liebig@gmx.de)
+*
+* This program is free software: you can redistribute it and/or modify
+* it under the terms of the GNU General Public License as published by
+* the Free Software Foundation, either version 3 of the License, or
+* (at your option) any later version.
+*
+* This program is distributed in the hope that it will be useful,
+* but WITHOUT ANY WARRANTY; without even the implied warranty of
+* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+* GNU General Public License for more details.
+*
+* You should have received a copy of the GNU General Public License
+* along with this program. If not, see <http://www.gnu.org/licenses/>.
+*/
+
+#ifndef OPENEMS_H
+#define OPENEMS_H
+
+#include <sstream>
+#include <sys/time.h>
+#include <time.h>
+#include <vector>
+
+#define __OPENEMS_STAT_FILE__ "openEMS_stats.txt"
+#define __OPENEMS_RUN_STAT_FILE__ "openEMS_run_stats.txt"
+
+class Operator;
+class Engine;
+class Engine_Interface_FDTD;
+class ProcessingArray;
+class TiXmlElement;
+class ContinuousStructure;
+class Engine_Interface_FDTD;
+class Excitation;
+class Engine_Ext_SteadyState;
+
+double CalcDiffTime(timeval t1, timeval t2);
+std::string FormatTime(int sec);
+
+class openEMS
+{
+public:
+ openEMS();
+ virtual ~openEMS();
+
+ virtual bool parseCommandLineArgument( const char *argv );
+ static void showUsage();
+
+ bool ParseFDTDSetup(std::string file);
+ virtual bool Parse_XML_FDTDSetup(TiXmlElement* openEMSxml);
+ virtual int SetupFDTD();
+ virtual void RunFDTD();
+
+ void Reset();
+
+ void SetNumberOfTimeSteps(unsigned int val) {NrTS=val;}
+ void SetEnableDumps(bool val) {Enable_Dumps=val;}
+ void SetEndCriteria(double val) {endCrit=val;}
+ void SetOverSampling(int val) {m_OverSampling=val;}
+ void SetCellConstantMaterial(bool val) {m_CellConstantMaterial=val;}
+
+ void SetCylinderCoords(bool val) {CylinderCoords=val;}
+ void SetupCylinderMultiGrid(std::vector<double> val) {m_CC_MultiGrid=val;}
+ void SetupCylinderMultiGrid(std::string val);
+
+ void SetTimeStepMethod(int val) {m_TS_method=val;}
+ void SetTimeStep(double val) {m_TS=val;}
+ void SetTimeStepFactor(double val) {m_TS_fac=val;}
+ void SetMaxTime(double val) {m_maxTime=val;}
+
+ void DebugMaterial() {DebugMat=true;}
+ void DebugOperator() {DebugOp=true;}
+ void DebugBox() {m_debugBox=true;}
+
+ void Set_BC_Type(int idx, int type);
+ int Get_BC_Type(int idx);
+ void Set_BC_PML(int idx, unsigned int size);
+ int Get_PML_Size(int idx);
+ void Set_Mur_PhaseVel(int idx, double val);
+
+ //! Get informations about external libs used by openEMS
+ static std::string GetExtLibsInfo(std::string prefix="\t");
+
+ //! Get welcome screen for openEMS
+ static void WelcomeScreen();
+
+ //! Set this to about FDTD iteration process
+ void SetAbort(bool val) {m_Abort=val;}
+ //! Check for abort conditions
+ bool CheckAbortCond();
+
+ void SetGaussExcite(double f0, double fc);
+ Excitation* InitExcitation();
+
+ void SetCSX(ContinuousStructure* csx);
+
+ Engine_Interface_FDTD* NewEngineInterface(int multigridlevel = 0);
+
+ void SetVerboseLevel(int level);
+
+protected:
+ bool CylinderCoords;
+ std::vector<double> m_CC_MultiGrid;
+
+ ContinuousStructure* m_CSX;
+
+ //! Number of Timesteps
+ unsigned int NrTS;
+ int m_TS_method;
+ double m_TS;
+ double m_TS_fac;
+ double m_maxTime;
+
+ // some command line flags
+ bool Enable_Dumps;
+ bool DebugMat;
+ bool DebugOp;
+ bool m_debugCSX;
+ bool m_DumpStats;
+ bool m_debugBox, m_debugPEC, m_no_simulation;
+
+ double endCrit;
+ int m_OverSampling;
+ bool m_CellConstantMaterial;
+ Operator* FDTD_Op;
+ Engine* FDTD_Eng;
+ Engine_Ext_SteadyState* Eng_Ext_SSD;
+ ProcessingArray* PA;
+
+ Excitation* m_Exc;
+
+ bool m_Abort;
+
+#ifdef MPI_SUPPORT
+ enum EngineType {EngineType_Basic, EngineType_SSE, EngineType_SSE_Compressed, EngineType_Multithreaded, EngineType_MPI};
+#else
+ enum EngineType {EngineType_Basic, EngineType_SSE, EngineType_SSE_Compressed, EngineType_Multithreaded};
+#endif
+ EngineType m_engine;
+ unsigned int m_engine_numThreads;
+
+ //! Setup an operator matching the requested engine
+ virtual bool SetupOperator();
+
+ //! Read boundary conditions from xml element and apply to FDTD operator
+ bool SetupBoundaryConditions();
+ int m_BC_type[6];
+ unsigned int m_PML_size[6];
+ double m_Mur_v_ph[6];
+
+ //! Check whether or not the FDTD-Operator has to store material data.
+ bool SetupMaterialStorages();
+
+ //! Setup all processings.
+ virtual bool SetupProcessing();
+
+ //! Dump statistics to file
+ virtual bool DumpStatistics(const std::string& filename, double time);
+
+ //! Dump run statistivs to file
+ virtual bool InitRunStatistics(const std::string& filename);
+ virtual bool DumpRunStatistics(const std::string& filename, double time, unsigned int ts, double speed, double energy);
+};
+
+#endif // OPENEMS_H