diff --git a/FDTD/engine.cpp b/FDTD/engine.cpp index 3c9a1a4..c2f0411 100644 --- a/FDTD/engine.cpp +++ b/FDTD/engine.cpp @@ -16,6 +16,8 @@ */ #include "engine.h" +#include "engine_extension.h" +#include "operator_extension.h" #include "tools/array_ops.h" //! \brief construct an Engine instance @@ -34,10 +36,25 @@ Engine::Engine(const Operator* op) { numLines[n] = Op->GetNumberOfLines(n); } + + for (size_t n=0;nGetNumberOfExtentions();++n) + { + Operator_Extension* op_ext = Op->GetExtension(n); + Engine_Extension* eng_ext = op_ext->CreateEngineExtention(); + if (eng_ext) + { + eng_ext->SetEngine(this); + m_Eng_exts.push_back(eng_ext); + } + } } Engine::~Engine() { + for (size_t n=0;nReset(); } @@ -46,6 +63,8 @@ void Engine::Init() numTS = 0; volt = Create_N_3DArray(numLines); curr = Create_N_3DArray(numLines); + + file_et1.open( "et1" ); } void Engine::Reset() @@ -54,6 +73,8 @@ void Engine::Reset() volt=NULL; Delete_N_3DArray(curr,numLines); curr=NULL; + + file_et1.close(); } void Engine::UpdateVoltages() @@ -99,6 +120,13 @@ void Engine::ApplyVoltageExcite() // if (n==0) cerr << numTS << " => " << Op->ExciteSignal[exc_pos] << endl; volt[Op->E_Exc_dir[n]][Op->E_Exc_index[0][n]][Op->E_Exc_index[1][n]][Op->E_Exc_index[2][n]] += Op->E_Exc_amp[n]*Op->ExciteSignal[exc_pos]; } + + // write the first excitation into the file "et1" + if (Op->E_Exc_Count >= 1) { + exc_pos = (int)numTS - (int)Op->E_Exc_delay[0]; + exc_pos *= (exc_pos>0 && exc_pos<=(int)Op->ExciteLength); + file_et1 << numTS * Op->GetTimestep() << "\t" << Op->E_Exc_amp[0]*Op->ExciteSignal[exc_pos] << "\n"; // do not use std::endl here, because it will do an implicit flush + } } void Engine::UpdateCurrents() @@ -135,10 +163,32 @@ bool Engine::IterateTS(unsigned int iterTS) { for (unsigned int iter=0;iterDoPreVoltageUpdates(); + UpdateVoltages(); + + for (size_t n=0;nDoPostVoltageUpdates(); + for (size_t n=0;nApply2Voltages(); + ApplyVoltageExcite(); + + //current updates with extensions + for (size_t n=0;nDoPreCurrentUpdates(); + UpdateCurrents(); + + for (size_t n=0;nDoPostCurrentUpdates(); + for (size_t n=0;nApply2Current(); + ApplyCurrentExcite(); + ++numTS; } return true; diff --git a/FDTD/engine.h b/FDTD/engine.h index 90d58be..7ef5123 100644 --- a/FDTD/engine.h +++ b/FDTD/engine.h @@ -18,8 +18,11 @@ #ifndef ENGINE_H #define ENGINE_H +#include #include "operator.h" +class Engine_Extension; + class Engine { public: @@ -37,6 +40,9 @@ public: inline virtual FDTD_FLOAT GetVolt( unsigned int n, unsigned int x, unsigned int y, unsigned int z ) const { return volt[n][x][y][z]; } inline virtual FDTD_FLOAT GetCurr( unsigned int n, unsigned int x, unsigned int y, unsigned int z ) const { return curr[n][x][y][z]; } + inline virtual FDTD_FLOAT& GetVolt( unsigned int n, unsigned int pos[] ) { return volt[n][pos[0]][pos[1]][pos[2]]; } + inline virtual FDTD_FLOAT& GetCurr( unsigned int n, unsigned int pos[] ) { return curr[n][pos[0]][pos[1]][pos[2]]; } + protected: Engine(const Operator* op); const Operator* Op; @@ -51,6 +57,10 @@ protected: FDTD_FLOAT**** volt; FDTD_FLOAT**** curr; unsigned int numTS; + + vector m_Eng_exts; + + ofstream file_et1; }; #endif // ENGINE_H diff --git a/FDTD/engine_ext_mur_abc.cpp b/FDTD/engine_ext_mur_abc.cpp new file mode 100644 index 0000000..a691e5f --- /dev/null +++ b/FDTD/engine_ext_mur_abc.cpp @@ -0,0 +1,105 @@ +/* +* 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 . +*/ + +#include "engine_ext_mur_abc.h" +#include "operator_ext_mur_abc.h" +#include "engine.h" +#include "tools/array_ops.h" + +Engine_Ext_Mur_ABC::Engine_Ext_Mur_ABC(Operator_Ext_Mur_ABC* op_ext) : Engine_Extension(op_ext) +{ + m_Op_mur = op_ext; + m_numLines[0] = m_Op_mur->m_numLines[0]; + m_numLines[1] = m_Op_mur->m_numLines[1]; + m_ny = m_Op_mur->m_ny; + m_nyP = m_Op_mur->m_nyP; + m_nyPP = m_Op_mur->m_nyPP; + m_LineNr = m_Op_mur->m_LineNr; + m_LineNr_Shift = m_Op_mur->m_LineNr_Shift; + + m_Mur_Coeff = m_Op_mur->m_Mur_Coeff; + + m_volt_nyP = Create2DArray(m_numLines); + m_volt_nyPP = Create2DArray(m_numLines); +} + +Engine_Ext_Mur_ABC::~Engine_Ext_Mur_ABC() +{ + Delete2DArray(m_volt_nyP,m_numLines); + m_volt_nyP = NULL; + Delete2DArray(m_volt_nyPP,m_numLines); + m_volt_nyPP = NULL; +} + +void Engine_Ext_Mur_ABC::DoPreVoltageUpdates() +{ + if (m_Eng==NULL) return; + if (m_Mur_Coeff==0) return; + unsigned int pos[] = {0,0,0}; + unsigned int pos_shift[] = {0,0,0}; + pos[m_ny] = m_LineNr; + pos_shift[m_ny] = m_LineNr_Shift; + + for (pos[m_nyP]=0;pos[m_nyP]GetVolt(m_nyP,pos_shift) - m_Mur_Coeff * m_Eng->GetVolt(m_nyP,pos); + m_volt_nyPP[pos[m_nyP]][pos[m_nyPP]] = m_Eng->GetVolt(m_nyPP,pos_shift) - m_Mur_Coeff * m_Eng->GetVolt(m_nyPP,pos); + } + } +} + +void Engine_Ext_Mur_ABC::DoPostVoltageUpdates() +{ + if (m_Eng==NULL) return; + if (m_Mur_Coeff==0) return; + unsigned int pos[] = {0,0,0}; + unsigned int pos_shift[] = {0,0,0}; + pos[m_ny] = m_LineNr; + pos_shift[m_ny] = m_LineNr_Shift; + + for (pos[m_nyP]=0;pos[m_nyP]GetVolt(m_nyP,pos_shift); + m_volt_nyPP[pos[m_nyP]][pos[m_nyPP]] += m_Mur_Coeff * m_Eng->GetVolt(m_nyPP,pos_shift); + } + } +} + +void Engine_Ext_Mur_ABC::Apply2Voltages() +{ + if (m_Eng==NULL) return; + if (m_Mur_Coeff==0) return; + unsigned int pos[] = {0,0,0}; + pos[m_ny] = m_LineNr; + + for (pos[m_nyP]=0;pos[m_nyP]GetVolt(m_nyP,pos) = m_volt_nyP[pos[m_nyP]][pos[m_nyPP]]; + m_Eng->GetVolt(m_nyPP,pos) = m_volt_nyPP[pos[m_nyP]][pos[m_nyPP]]; + } + } +} diff --git a/FDTD/engine_ext_mur_abc.h b/FDTD/engine_ext_mur_abc.h new file mode 100644 index 0000000..98f38cf --- /dev/null +++ b/FDTD/engine_ext_mur_abc.h @@ -0,0 +1,50 @@ +/* +* 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 . +*/ + +#ifndef ENGINE_EXT_MUR_ABC_H +#define ENGINE_EXT_MUR_ABC_H + +#include "engine_extension.h" +#include "operator.h" + +class Operator_Ext_Mur_ABC; + +class Engine_Ext_Mur_ABC : public Engine_Extension +{ +public: + Engine_Ext_Mur_ABC(Operator_Ext_Mur_ABC* op_ext); + virtual ~Engine_Ext_Mur_ABC(); + + virtual void DoPreVoltageUpdates(); + virtual void DoPostVoltageUpdates(); + virtual void Apply2Voltages(); + +protected: + Operator_Ext_Mur_ABC* m_Op_mur; + + int m_ny; + int m_nyP,m_nyPP; + unsigned int m_LineNr; + int m_LineNr_Shift; + unsigned int m_numLines[2]; + + FDTD_FLOAT m_Mur_Coeff; + FDTD_FLOAT** m_volt_nyP; //n+1 direction + FDTD_FLOAT** m_volt_nyPP; //n+2 direction +}; + +#endif // ENGINE_EXT_MUR_ABC_H diff --git a/FDTD/engine_extension.cpp b/FDTD/engine_extension.cpp new file mode 100644 index 0000000..ec4b2b9 --- /dev/null +++ b/FDTD/engine_extension.cpp @@ -0,0 +1,26 @@ +/* +* 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 . +*/ + +#include "engine_extension.h" + +#include "engine.h" + +Engine_Extension::Engine_Extension(Operator_Extension* op_ext) +{ + m_Op_ext = op_ext; + m_Eng = NULL; +} diff --git a/FDTD/engine_extension.h b/FDTD/engine_extension.h new file mode 100644 index 0000000..8bbf830 --- /dev/null +++ b/FDTD/engine_extension.h @@ -0,0 +1,51 @@ +/* +* 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 . +*/ + +#ifndef ENGINE_EXTENSION_H +#define ENGINE_EXTENSION_H + +class Operator_Extension; +class Engine; + +//! Abstract base-class for all engine extensions +class Engine_Extension +{ +public: + //! This methode will be called __before__ the main engine does the usual voltage updates. This methode may __not__ change the engine voltages!!! + virtual void DoPreVoltageUpdates() {} + //! This methode will be called __after__ the main engine does the usual voltage updates. This methode may __not__ change the engine voltages!!! + virtual void DoPostVoltageUpdates() {} + //! This methode will be called __after__ all updates to the voltages and extensions and may add/set its results to the engine voltages, but may __not__ rely on the current value of the engine voltages!!! + virtual void Apply2Voltages() {} + + //! This methode will be called __before__ the main engine does the usual current updates. This methode may __not__ change the engine current!!! + virtual void DoPreCurrentUpdates() {} + //! This methode will be called __after__ the main engine does the usual current updates. This methode may __not__ change the engine current!!! + virtual void DoPostCurrentUpdates() {} + //! This methode will be called __after__ all updates to the current and extensions and may add/set its results to the engine current, but may __not__ rely on the current value of the engine current!!! + virtual void Apply2Current() {} + + //! Set the Engine to this extention. This will usually done automatically by Engine::AddExtension + virtual void SetEngine(Engine* eng) {m_Eng=eng;} +protected: + Engine_Extension(Operator_Extension* op_ext); + + Operator_Extension* m_Op_ext; + Engine* m_Eng; +}; + +#endif // ENGINE_EXTENSION_H diff --git a/FDTD/engine_multithread.cpp b/FDTD/engine_multithread.cpp index 27f389f..dca4991 100644 --- a/FDTD/engine_multithread.cpp +++ b/FDTD/engine_multithread.cpp @@ -275,24 +275,13 @@ void thread_e_excitation::operator()() //std::cout << "thread_e_excitation::operator()" << std::endl; //DBG().cout() << "Thread e_excitation (" << boost::this_thread::get_id() << ") started." << endl; - int exc_pos; - const unsigned int E_Exc_Count = m_enginePtr->Op->E_Exc_Count; - while (!m_enginePtr->m_stopThreads) { - // waiting on NS_Engine_Multithread::thread - m_enginePtr->m_barrier1->wait(); + m_enginePtr->m_barrier1->wait(); // waiting on NS_Engine_Multithread::thread - // soft voltage excitation here (E-field excite) - for (unsigned int n=0;nnumTS - (int)m_enginePtr->Op->E_Exc_delay[n]; - exc_pos*= (exc_pos>0 && exc_pos<=(int)m_enginePtr->Op->ExciteLength); - m_enginePtr->volt[m_enginePtr->Op->E_Exc_dir[n]][m_enginePtr->Op->E_Exc_index[0][n]][m_enginePtr->Op->E_Exc_index[1][n]][m_enginePtr->Op->E_Exc_index[2][n]] += m_enginePtr->Op->E_Exc_amp[n]*m_enginePtr->Op->ExciteSignal[exc_pos]; - } + m_enginePtr->ApplyVoltageExcite(); - // continue NS_Engine_Multithread::thread - m_enginePtr->m_barrier2->wait(); + m_enginePtr->m_barrier2->wait(); // continue NS_Engine_Multithread::thread } //DBG().cout() << "Thread e_excitation (" << boost::this_thread::get_id() << ") finished." << endl; diff --git a/FDTD/engine_multithread.h b/FDTD/engine_multithread.h index 55df164..76909d6 100644 --- a/FDTD/engine_multithread.h +++ b/FDTD/engine_multithread.h @@ -26,6 +26,12 @@ #include #include +#ifdef WIN32 +#include // for struct timeval +#endif + +#include + class Engine_Multithread; namespace NS_Engine_Multithread { diff --git a/FDTD/operator.cpp b/FDTD/operator.cpp index b35c3ca..80882b5 100644 --- a/FDTD/operator.cpp +++ b/FDTD/operator.cpp @@ -17,6 +17,7 @@ #include #include "operator.h" +#include "operator_extension.h" #include "processfields.h" #include "tools/array_ops.h" #include "fparser.hh" @@ -34,6 +35,9 @@ Operator::Operator() Operator::~Operator() { + for (size_t n=0;n2)) return 0.0; @@ -545,6 +557,10 @@ int Operator::CalcECOperator() } } + //all information available for extension... create now... + for (size_t n=0;nBuildExtension(); + //cleanup for (int n=0;n<3;++n) { @@ -1083,3 +1099,7 @@ bool Operator::CalcPEC() return true; } +void Operator::AddExtension(Operator_Extension* op_ext) +{ + m_Op_exts.push_back(op_ext); +} diff --git a/FDTD/operator.h b/FDTD/operator.h index a959d4d..851d08c 100644 --- a/FDTD/operator.h +++ b/FDTD/operator.h @@ -24,6 +24,8 @@ #define FDTD_FLOAT float +class Operator_Extension; + //! Abstract base-class for the FDTD-operator class Operator { @@ -67,6 +69,9 @@ public: void DumpOperator2File(string filename); void DumpMaterial2File(string filename); + //! Get the name for the given direction: 0 -> x, 1 -> y, 2 -> z + virtual string GetDirName(int ny) const; + virtual double GetGridDelta() const {return gridDelta;} //! Get the mesh delta times the grid delta for a 3D position virtual double GetMeshDelta(int n, const int* pos, bool dualMesh=false) const; @@ -77,6 +82,10 @@ public: virtual double GetDiscLine(int n, unsigned int pos, bool dualMesh=false) const; virtual bool SnapToMesh(double* coord, unsigned int* uicoord, bool lower=false, bool* inside=NULL); + virtual void AddExtension(Operator_Extension* op_ext); + virtual size_t GetNumberOfExtentions() const {return m_Op_exts.size();} + virtual Operator_Extension* GetExtension(size_t index) const {return m_Op_exts.at(index);} + protected: //! use New() for creating a new Operator Operator(); @@ -123,6 +132,8 @@ protected: AdrOp* MainOp; AdrOp* DualOp; + vector m_Op_exts; + // engine/post-proc needs access public: //EC operator diff --git a/FDTD/operator_cylinder.cpp b/FDTD/operator_cylinder.cpp index e67e5d2..02571c8 100644 --- a/FDTD/operator_cylinder.cpp +++ b/FDTD/operator_cylinder.cpp @@ -68,13 +68,21 @@ inline unsigned int Operator_Cylinder::GetNumberOfLines(int ny) const return numLines[ny]; } -double Operator_Cylinder::GetMeshDelta(int n, int* pos, bool dualMesh) const +string Operator_Cylinder::GetDirName(int ny) const +{ + if (ny==0) return "rho"; + if (ny==1) return "alpha"; + if (ny==2) return "z"; + return ""; +} + +double Operator_Cylinder::GetMeshDelta(int n, const int* pos, bool dualMesh) const { double delta = Operator::GetMeshDelta(n,pos,dualMesh); if (delta==0) return delta; if (n==1) { - return delta * GetDiscLine(n,pos[0],dualMesh); + return delta * GetDiscLine(0,pos[0],dualMesh); } return delta; } @@ -104,7 +112,10 @@ bool Operator_Cylinder::SetGeometryCSX(ContinuousStructure* geo) } else if (minmaxA>2*PI) {cerr << "Operator_Cylinder::SetGeometryCSX: Alpha Max-Min must not be larger than 2*PI!!!" << endl; Reset(); return false;} - else CC_closedAlpha=false; + else + { + CC_closedAlpha=false; + } if (discLines[0][0]<0) {cerr << "Operator_Cylinder::SetGeometryCSX: r<0 not allowed in Cylinder Coordinates!!!" << endl; Reset(); return false;} @@ -123,7 +134,9 @@ int Operator_Cylinder::CalcECOperator() if (val) return val; - if (CC_R0_included==false) + //if r=0 is not included -> obviously no special treatment for r=0 + //if alpha direction is not closed, PEC-BC at r=0 necessary and already set... + if ((CC_R0_included==false) || (CC_closedAlpha==false)) return val; unsigned int pos[3]; @@ -133,16 +146,13 @@ int Operator_Cylinder::CalcECOperator() { double C=0; double G=0; - for (pos[1]=0;pos[1] rho, 1 -> alpha, 2 -> z + virtual string GetDirName(int ny) const; + //! Get the mesh delta times the grid delta for a 3D position, including radius corrected alpha-mesh width - virtual double GetMeshDelta(int n, int* pos, bool dualMesh=false) const; + virtual double GetMeshDelta(int n, const int* pos, bool dualMesh=false) const; bool GetClosedAlpha() const {return CC_closedAlpha;} bool GetR0Included() const {return CC_R0_included;} diff --git a/FDTD/operator_ext_mur_abc.cpp b/FDTD/operator_ext_mur_abc.cpp new file mode 100644 index 0000000..c5c6f91 --- /dev/null +++ b/FDTD/operator_ext_mur_abc.cpp @@ -0,0 +1,80 @@ +/* +* 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 . +*/ + +#include "operator_ext_mur_abc.h" +#include "engine_ext_mur_abc.h" + +#include "tools/array_ops.h" + +Operator_Ext_Mur_ABC::Operator_Ext_Mur_ABC(Operator* op) : Operator_Extension(op) +{ + m_Mur_Coeff = NULL; + m_ny = -1; + m_nyP = -1; + m_nyPP = -1; + m_LineNr = 0; + m_LineNr_Shift = 0; + m_Mur_Coeff = 0; +} + +Operator_Ext_Mur_ABC::~Operator_Ext_Mur_ABC() +{ +} + +void Operator_Ext_Mur_ABC::SetDirection(int ny, bool top_ny) +{ + if ((ny<0) || (ny>2)) + return; + m_ny = ny; + m_nyP = (ny+1)%3; + m_nyPP = (ny+2)%3; + if (!top_ny) + { + m_LineNr = 0; + m_LineNr_Shift = 1; + } + else + { + m_LineNr = m_Op->GetNumberOfLines(m_ny)-1; + m_LineNr_Shift = m_Op->GetNumberOfLines(m_ny) - 2; + } + + m_numLines[0] = m_Op->GetNumberOfLines(m_nyP); + m_numLines[1] = m_Op->GetNumberOfLines(m_nyPP); +} + +bool Operator_Ext_Mur_ABC::BuildExtension() +{ + if (m_ny<0) + { + cerr << "Operator_Ext_Mur_ABC::BuildExtension: Warning, Extension not initialized! Use SetDirection!! Abort build!!" << endl; + return false; + } + double dT = m_Op->GetTimestep(); + unsigned int pos[] = {0,0,0}; + pos[m_ny] = m_LineNr; + double delta = fabs(m_Op->GetMeshDelta(m_ny,pos)); + m_Mur_Coeff = (__C0__ * dT - delta) / (__C0__ * dT + delta); +// cerr << "Operator_Ext_Mur_ABC::BuildExtension(): " << m_Mur_Coeff << endl; + return true; +} + +Engine_Extension* Operator_Ext_Mur_ABC::CreateEngineExtention() +{ + Engine_Ext_Mur_ABC* eng_ext = new Engine_Ext_Mur_ABC(this); + return eng_ext; +} diff --git a/FDTD/operator_ext_mur_abc.h b/FDTD/operator_ext_mur_abc.h new file mode 100644 index 0000000..52b15d1 --- /dev/null +++ b/FDTD/operator_ext_mur_abc.h @@ -0,0 +1,49 @@ +/* +* 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 . +*/ + +#ifndef OPERATOR_EXT_MUR_ABC_H +#define OPERATOR_EXT_MUR_ABC_H + +#include "operator.h" +#include "operator_extension.h" + +class Operator_Ext_Mur_ABC : public Operator_Extension +{ + friend class Engine_Ext_Mur_ABC; +public: + Operator_Ext_Mur_ABC(Operator* op); + ~Operator_Ext_Mur_ABC(); + + //! Define the direction of this ABC: ny=0,1,2 -> x,y,z and if at bottom_ny -> e.g. x=0 or x=end + void SetDirection(int ny, bool top_ny); + + virtual bool BuildExtension(); + + virtual Engine_Extension* CreateEngineExtention(); + +protected: + int m_ny; + int m_nyP,m_nyPP; + unsigned int m_LineNr; + int m_LineNr_Shift; + + unsigned int m_numLines[2]; + + FDTD_FLOAT m_Mur_Coeff; +}; + +#endif // OPERATOR_EXT_MUR_ABC_H diff --git a/FDTD/operator_extension.cpp b/FDTD/operator_extension.cpp new file mode 100644 index 0000000..a94b2a1 --- /dev/null +++ b/FDTD/operator_extension.cpp @@ -0,0 +1,25 @@ +/* +* 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 . +*/ + +#include "operator_extension.h" + +#include "operator.h" + +Operator_Extension::Operator_Extension(Operator* op) +{ + m_Op = op; +} diff --git a/FDTD/operator_extension.h b/FDTD/operator_extension.h new file mode 100644 index 0000000..986ba3b --- /dev/null +++ b/FDTD/operator_extension.h @@ -0,0 +1,37 @@ +/* +* 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 . +*/ + +#ifndef OPERATOR_EXTENSION_H +#define OPERATOR_EXTENSION_H + +class Operator; +class Engine_Extension; + +//! Abstract base-class for all operator extensions +class Operator_Extension +{ +public: + virtual bool BuildExtension() {return true;} + + virtual Engine_Extension* CreateEngineExtention() {return 0;} + +protected: + Operator_Extension(Operator* op); + Operator* m_Op; +}; + +#endif // OPERATOR_EXTENSION_H diff --git a/FDTD/processfields.cpp b/FDTD/processfields.cpp index 4ec4fad..c35043e 100644 --- a/FDTD/processfields.cpp +++ b/FDTD/processfields.cpp @@ -18,7 +18,7 @@ #include "processfields.h" #include -#include "H5Cpp.h" +#include ProcessFields::ProcessFields(Operator* op, Engine* eng) : Processing(op, eng) { @@ -51,7 +51,8 @@ ProcessFields::~ProcessFields() void ProcessFields::InitProcess() { if (Enabled==false) return; - string names[] = {"x","y","z"}; + //get the correct direction names for all coordinate systems + string names[] = {Op->GetDirName(0),Op->GetDirName(1),Op->GetDirName(2)}; if (m_fileType==HDF5_FILETYPE) { unsigned int* NrLines; diff --git a/FDTD/processfields.h b/FDTD/processfields.h index a44f68f..ab164f1 100644 --- a/FDTD/processfields.h +++ b/FDTD/processfields.h @@ -19,7 +19,7 @@ #define PROCESSFIELDS_H #include "processing.h" -#include "../tools/array_ops.h" +#include "tools/array_ops.h" class ProcessFields : public Processing { diff --git a/matlab/PlotHDF5FieldData.m b/matlab/PlotHDF5FieldData.m index 0c90613..ae0f633 100644 --- a/matlab/PlotHDF5FieldData.m +++ b/matlab/PlotHDF5FieldData.m @@ -1,4 +1,17 @@ function PlotHDF5FieldData(file, PlotArgs) +% function PlotHDF5FieldData(file, PlotArgs) +% +% e.g. +% PlotArgs.slice = {0 [10 20] 0}; +% PlotArgs.pauseTime=0.01; +% PlotArgs.component=2; +% PlotArgs.Limit = 'auto'; +% +% PlotHDF5FieldData('tmp/Et.h5',PlotArgs) +% +% openEMS matlab interface +% ----------------------- +% author: Thorsten Liebig component = PlotArgs.component; @@ -11,7 +24,11 @@ end mesh = ReadHDF5Mesh(file); fields = ReadHDF5FieldData(file); -[X Y Z] = meshgrid(double(mesh.lines{1}),double(mesh.lines{2}),double(mesh.lines{3})); +if (mesh.type==0) + [X Y Z] = meshgrid(double(mesh.lines{1}),double(mesh.lines{2}),double(mesh.lines{3})); +else + disp(['PlotHDF5FieldData:: Error: unknown mesh type ' num2str(mesh.type)]); +end max_amp = 0; @@ -46,14 +63,18 @@ for n=1:numel(Field) title(fields.names{n}); %view(3) axis equal -% if (isfield(PlotArgs,'zlim')) -% if ~ischar(PlotArgs.zlim) -% zlim(PlotArgs.zlim); -% elseif strcmp(PlotArgs.zlim,'auto') -% zlim([-max_amp*(component>0) max_amp]); -% end -% end -% + if (isfield(PlotArgs,'Limit')) + if ~ischar(PlotArgs.Limit) + caxis(PlotArgs.Limit); + elseif strcmp(PlotArgs.Limit,'auto') + if (component>0) + caxis([-max_amp,max_amp]); + else + caxis([0,max_amp]); + end + end + end + drawnow pause(pauseT) end \ No newline at end of file diff --git a/matlab/ReadHDF5FieldData.m b/matlab/ReadHDF5FieldData.m index 0524a99..83471a6 100644 --- a/matlab/ReadHDF5FieldData.m +++ b/matlab/ReadHDF5FieldData.m @@ -1,4 +1,13 @@ function hdf_fielddata = ReadHDF5FieldData(file) +% function hdf_fielddata = ReadHDF5FieldData(file) +% +% returns: +% hdf_fielddata.names +% hdf_fielddata.values +% +% openEMS matlab interface +% ----------------------- +% author: Thorsten Liebig info = hdf5info(file); diff --git a/matlab/ReadHDF5Mesh.m b/matlab/ReadHDF5Mesh.m index 472b94b..3aa4f35 100644 --- a/matlab/ReadHDF5Mesh.m +++ b/matlab/ReadHDF5Mesh.m @@ -1,4 +1,14 @@ function hdf_mesh = ReadHDF5Mesh(file) +% function hdf_mesh = ReadHDF5Mesh(file) +% +% returns: +% hdf_mesh.type +% hdf_mesh.names +% hdf_mesh.lines +% +% openEMS matlab interface +% ----------------------- +% author: Thorsten Liebig info = hdf5info(file); @@ -13,4 +23,10 @@ end hdf_mesh.names = names; for n=1:numel(names) hdf_mesh.lines{n} = hdf5read(file,names{n}); +end + +if (strcmp(names{1},'/mesh/rho')) + hdf_mesh.type=1; +else + hdf_mesh.type=0; end \ No newline at end of file diff --git a/matlab/ReadUI.m b/matlab/ReadUI.m index ce940ee..19d5809 100644 --- a/matlab/ReadUI.m +++ b/matlab/ReadUI.m @@ -1,4 +1,16 @@ function UI = ReadUI(files, path) +% function UI = ReadUI(files, path) +% +% read current and voltages from multiple files found in path +% +% returns voltages/currents in time and frequency-domain +% +% e.g. +% UI = ReadUI({'ut1_1','ut1_2','it1'},'tmp/'); +% +% openEMS matlab interface +% ----------------------- +% author: Thorsten Liebig if (nargin<2) path =''; diff --git a/matlab/SetBoundaryCond.m b/matlab/SetBoundaryCond.m index ed5ba8c..f3b73e9 100644 --- a/matlab/SetBoundaryCond.m +++ b/matlab/SetBoundaryCond.m @@ -3,6 +3,10 @@ function FDTD = SetBoundaryCond(FDTD,BC) % % BC = [xmin xmax ymin ymax zmin zmax]; % ?min/?max: 0=PEC 1=PMC +% +% openEMS matlab interface +% ----------------------- +% author: Thorsten Liebig FDTD.BoundaryCond.ATTRIBUTE.xmin=BC(1); FDTD.BoundaryCond.ATTRIBUTE.xmax=BC(2); diff --git a/matlab/SetCustomExcite.m b/matlab/SetCustomExcite.m index 823886d..3f2359d 100644 --- a/matlab/SetCustomExcite.m +++ b/matlab/SetCustomExcite.m @@ -1,4 +1,19 @@ -function FDTD = SetCustomExcite(FDTD,f0,funcStr); +function FDTD = SetCustomExcite(FDTD,f0,funcStr) +% function FDTD = SetCustomExcite(FDTD,f0,funcStr) +% +% f0 : nyquist rate +% funcStr : string desribing the excitation function e(t) +% +% see also SetSinusExcite SetGaussExcite +% +% e.g for a ramped sinus excite... +% T = 1/f0; +% FDTD = SetCustomExcite(FDTD,1e9,.. +% [ '(1-exp(-1*(t/' num2str(T) ')^2) ) * sin(2*pi*' num2str(f0) '*t)' ]); +% +% openEMS matlab interface +% ----------------------- +% author: Thorsten Liebig FDTD.Excitation.ATTRIBUTE.Type=10; FDTD.Excitation.ATTRIBUTE.f0=f0; diff --git a/matlab/SetGaussExcite.m b/matlab/SetGaussExcite.m index a5f624e..6e34e79 100644 --- a/matlab/SetGaussExcite.m +++ b/matlab/SetGaussExcite.m @@ -1,4 +1,16 @@ -function FDTD = SetGaussExcite(FDTD,f0,fc); +function FDTD = SetGaussExcite(FDTD,f0,fc) +% function FDTD = SetSinusExcite(FDTD,f0,fc); +% +% f0 : center frequency +% fc : 3dB cutoff frequency --> bandwidth is 2*fc +% +% see also SetSinusExcite SetCustomExcite +% +% e.g FDTD = SetGaussExcite(FDTD,1e9,1e8); +% +% openEMS matlab interface +% ----------------------- +% author: Thorsten Liebig FDTD.Excitation.ATTRIBUTE.Type=0; FDTD.Excitation.ATTRIBUTE.f0=f0; diff --git a/matlab/SetSinusExcite.m b/matlab/SetSinusExcite.m index 08c1b18..3c5c55d 100644 --- a/matlab/SetSinusExcite.m +++ b/matlab/SetSinusExcite.m @@ -1,4 +1,13 @@ -function FDTD = SetGaussExcite(FDTD,f0); +function FDTD = SetSinusExcite(FDTD,f0) +% function FDTD = SetSinusExcite(FDTD,f0) +% +% see also SetGaussExcite SetCustomExcite +% +% e.g FDTD = SetSinusExcite(FDTD,1e9); +% +% openEMS matlab interface +% ----------------------- +% author: Thorsten Liebig FDTD.Excitation.ATTRIBUTE.Type=1; FDTD.Excitation.ATTRIBUTE.f0=f0; \ No newline at end of file diff --git a/matlab/WriteOpenEMS.m b/matlab/WriteOpenEMS.m index 68dbf3b..691a0a4 100644 --- a/matlab/WriteOpenEMS.m +++ b/matlab/WriteOpenEMS.m @@ -1,4 +1,9 @@ function WriteOpenEMS(filename, FDTD, CSX) +% function WriteOpenEMS(filename, FDTD, CSX) +% +% openEMS matlab interface +% ----------------------- +% author: Thorsten Liebig openEMS.FDTD = FDTD; openEMS.ContinuousStructure = CSX; diff --git a/matlab/examples/Circ_Waveguide.m b/matlab/examples/Circ_Waveguide.m index e4377d4..aa8c509 100644 --- a/matlab/examples/Circ_Waveguide.m +++ b/matlab/examples/Circ_Waveguide.m @@ -2,6 +2,7 @@ close all; clear all; clc +%% setup the simulation %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% abs_length = 500; length = 5000; unit = 1e-3; @@ -27,6 +28,7 @@ func_Ea = [ num2str(1/kc) '*sin(a)*0.5*(j0(' num2str(kc) '*rho)-jn(2,' num2str func_Ex = [func_Er '*cos(a) - ' func_Ea '*sin(a)']; func_Ey = [func_Er '*sin(a) + ' func_Ea '*cos(a)']; +%% define file pathes and openEMS options %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% openEMS_Path = [pwd() '/../../'] openEMS_opts = ''; % openEMS_opts = [openEMS_opts ' --disable-dumps']; @@ -39,14 +41,14 @@ Sim_CSX = 'Circ_WG.xml'; mkdir(Sim_Path); -%setup FDTD parameter +%% setup FDTD parameter & excitation function %%%%%%%%%%%%%%%%%%%%%%%%%%%%% FDTD = InitFDTD(1000,1e-6,'OverSampling',5); T = 1/f0; FDTD = SetCustomExcite(FDTD,f0,[ '(1-exp(-1*(t/' num2str(T) ')^2) ) * sin(2*pi*' num2str(f0) '*t)' ]); BC = [1 1 1 1 1 1] * 0; FDTD = SetBoundaryCond(FDTD,BC); -%setup CSXCAD geometry +%% setup CSXCAD geometry & mesh %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% CSX = InitCSX(); mesh.x = -mesh_res(1)/2-rad:mesh_res(1):rad+mesh_res(1)/2; mesh.y = -mesh_res(2)/2-rad:mesh_res(2):rad+mesh_res(2)/2; @@ -56,7 +58,7 @@ CSX = DefineRectGrid(CSX, 1e-3,mesh); start = [0,0,0]; stop = [0,0,length]; -%%fake pml +%%% fake pml finalKappa = 0.3/abs_length^4; finalSigma = finalKappa*MUE0/EPS0; CSX = AddMaterial(CSX,'pml'); @@ -83,7 +85,7 @@ weight{3} = 0; CSX = SetExcitationWeight(CSX, 'excite', weight ); CSX = AddCylinder(CSX,'excite', 5 ,[0 0 -0.1],[0 0 0.1],rad); -%dump +%% define dump boxes... %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% CSX = AddDump(CSX,'Et','SubSampling','2,2,4','FileType',1,'DumpMode',2); start = [mesh.x(1) , mesh.y(1) , mesh.z(1)]; stop = [mesh.x(end) , mesh.y(end) , mesh.z(end)]; @@ -102,21 +104,22 @@ CSX = AddBox(CSX,'Et',0 , start,stop); % stop = [mesh.x(end) , mesh.y(end) , length/2]; % CSX = AddBox(CSX,'Exy',0 , start,stop); +%% define voltage calc boxes %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %voltage calc CSX = AddProbe(CSX,'ut1',0); start = [ -rad 0 0/2 ];stop = [ rad 0 0/2 ]; CSX = AddBox(CSX,'ut1', 0 ,start,stop); -% -% %current calc -% CSX = AddProbe(CSX,'it1',1); -% mid = 0.5*(coax_rad_i+coax_rad_ai); -% start = [ -mid -mid length/2 ];stop = [ mid mid length/2 ]; -% CSX = AddBox(CSX,'it1', 0 ,start,stop); -%Write openEMS compatoble xml-file +%current calc +CSX = AddProbe(CSX,'it1',1); +mid = 0.5*(coax_rad_i+coax_rad_ai); +start = [ -mid -mid length/2 ];stop = [ mid mid length/2 ]; +CSX = AddBox(CSX,'it1', 0 ,start,stop); + +%% Write openEMS compatoble xml-file %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% WriteOpenEMS([Sim_Path '/' Sim_CSX],FDTD,CSX); -%cd to working dir and run openEMS +%% cd to working dir and run openEMS %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% savePath = pwd(); cd(Sim_Path); %cd to working dir command = [openEMS_Path 'openEMS.sh ' Sim_CSX ' ' openEMS_opts]; @@ -124,6 +127,7 @@ disp(command); system(command) cd(savePath); +%% do the plots %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% UI = ReadUI('ut1','tmp/'); plot(UI.TD{1}.t,UI.TD{1}.val); grid on; diff --git a/matlab/examples/Circ_Waveguide_CylinderCoords.m b/matlab/examples/Circ_Waveguide_CylinderCoords.m index 467520e..6e3e24f 100644 --- a/matlab/examples/Circ_Waveguide_CylinderCoords.m +++ b/matlab/examples/Circ_Waveguide_CylinderCoords.m @@ -2,14 +2,16 @@ close all; clear all; clc +%% setup the simulation %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% abs_length = 500; -length = 5000; +length = 10000; unit = 1e-3; rad = 300; mesh_max = 15; -N_alpha = ceil(rad * 2*pi / mesh_max); +N_alpha = ceil(rad * pi / mesh_max) * 2; mesh_res = [mesh_max 2*pi/N_alpha mesh_max]; +do_Half_Waveguide = 1; EPS0 = 8.85418781762e-12; MUE0 = 1.256637062e-6; @@ -24,9 +26,10 @@ fc = C0*kc/2/pi beta = sqrt(k^2 - kc^2); kc = kc*unit; -func_Er = [ num2str(-1/kc^2) '/rho*cos(a)*j1(' num2str(kc) '*rho)']; -func_Ea = [ num2str(1/kc) '*sin(a)*0.5*(j0(' num2str(kc) '*rho)-jn(2,' num2str(kc) '*rho))']; +func_Er = [ num2str(-1/kc^2,15) '/rho*cos(a)*j1(' num2str(kc,15) '*rho)']; +func_Ea = [ num2str(1/kc,15) '*sin(a)*0.5*(j0(' num2str(kc,15) '*rho)-jn(2,' num2str(kc,15) '*rho))']; +%% define file pathes and openEMS options %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% openEMS_Path = [pwd() '/../../'] openEMS_opts = ''; % openEMS_opts = [openEMS_opts ' --disable-dumps']; @@ -34,29 +37,38 @@ openEMS_opts = ''; % openEMS_opts = [openEMS_opts ' --debug-operator']; % openEMS_opts = [openEMS_opts ' --engine=multithreaded']; -Sim_Path = 'tmp'; +if (do_Half_Waveguide) + Sim_Path = 'tmp_half_CWG_CC'; +else + Sim_Path = 'tmp_full_CWG_CC'; +end Sim_CSX = 'Circ_WG_CC.xml'; mkdir(Sim_Path); -%setup FDTD parameter +%% setup FDTD parameter & excitation function %%%%%%%%%%%%%%%%%%%%%%%%%%%%% FDTD = InitCylindricalFDTD(1e5,1e-5,'OverSampling',10); -T = 1/f0; -FDTD = SetCustomExcite(FDTD,f0,[ '(1-exp(-1*(t/' num2str(T) ')^2) ) * sin(2*pi*' num2str(f0) '*t)' ]); +% T = 1/f0; +% FDTD = SetCustomExcite(FDTD,f0,[ '(1-exp(-1*(t/' num2str(T) ')^2) ) * sin(2*pi*' num2str(f0) '*t)' ]); +FDTD = SetSinusExcite(FDTD,f0); BC = [0 0 0 0 0 0]; FDTD = SetBoundaryCond(FDTD,BC); -%setup CSXCAD geometry +%% setup CSXCAD geometry & mesh %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% CSX = InitCSX(); -mesh.x = [0 2*mesh_res(1):mesh_res(1):rad]; -mesh.y = linspace(-pi,pi,N_alpha); +mesh.x = 0:mesh_res(1):rad; +if (do_Half_Waveguide) + mesh.y = linspace(-pi/2,pi/2,N_alpha/2); +else + mesh.y = linspace(-pi,pi,N_alpha)+pi/2; +end +y_delta = mesh.y(2) - mesh.y(1); mesh.z = 0 : mesh_res(3) : length; CSX = DefineRectGrid(CSX, 1e-3,mesh); -start = [0 mesh.y(1) length-abs_length]; -stop = [rad mesh.y(end) length]; - -%%fake pml +%% fake pml %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +start = [0 mesh.y(1)-y_delta length-abs_length]; +stop = [rad*1.2 mesh.y(end)+y_delta length]; finalKappa = 0.3/abs_length^4; finalSigma = finalKappa*MUE0/EPS0; CSX = AddMaterial(CSX,'pml'); @@ -66,27 +78,31 @@ CSX = SetMaterialWeight(CSX,'pml','Kappa',['pow(abs(z)-' num2str(length-abs_leng CSX = SetMaterialWeight(CSX,'pml','Sigma',['pow(abs(z)-' num2str(length-abs_length) ',4)']); CSX = AddBox(CSX,'pml',0 ,start,stop); +%% apply the excitation %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% CSX = AddExcitation(CSX,'excite',0,[1 1 0]); weight{1} = func_Er; weight{2} = func_Ea; weight{3} = 0; CSX = SetExcitationWeight(CSX, 'excite', weight ); -start(3)=-5; -stop(3)=5; +start(3)=-.5; +stop(3)=0.5; CSX = AddBox(CSX,'excite', 5 ,start,stop); -%dump -CSX = AddDump(CSX,'Et','FileType',0,'DumpMode',0); -start = [mesh.x(1) ,0 , mesh.z(1)]; -stop = [mesh.x(end) , 0 , mesh.z(end)]; +%% define dump boxes... %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +CSX = AddDump(CSX,'Et','FileType',1,'DumpMode',0,'SubSampling','1,1,5'); +start = [mesh.x(1) , mesh.y(1)-y_delta , 0]; +stop = [mesh.x(end) , mesh.y(end)+y_delta , length]; CSX = AddBox(CSX,'Et',0 , start,stop); -CSX = AddDump(CSX,'Ht','DumpType',1,'FileType',0,'DumpMode',0); -start = [mesh.x(1) ,0 , mesh.z(1)]; -stop = [mesh.x(end) , 0 , mesh.z(end)]; +CSX = AddDump(CSX,'Ht','FileType',1,'DumpType',1,'DumpMode',0,'SubSampling','1,1,5'); CSX = AddBox(CSX,'Ht',0 , start,stop); -%voltage calc +CSX = AddDump(CSX,'Et_rz_','FileType',0,'DumpMode',2,'SubSampling','1,1,5'); +start = [mesh.x(1) , 0 , 0]; +stop = [mesh.x(end) , 0 , length]; +CSX = AddBox(CSX,'Et_rz_',0 , start,stop); + +%% define voltage calc boxes %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% CSX = AddProbe(CSX,'ut_exc',0); start = [ 0 0 0 ];stop = [ rad 0 0 ]; CSX = AddBox(CSX,'ut_exc', 0 ,start,stop); @@ -95,10 +111,10 @@ CSX = AddProbe(CSX,'ut_1',0); start = [ 0 0 length/2 ];stop = [ rad 0 length/2 ]; CSX = AddBox(CSX,'ut_1', 0 ,start,stop); -%Write openEMS compatoble xml-file +%% Write openEMS compatoble xml-file %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% WriteOpenEMS([Sim_Path '/' Sim_CSX],FDTD,CSX); -%cd to working dir and run openEMS +%% cd to working dir and run openEMS %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% savePath = pwd(); cd(Sim_Path); %cd to working dir command = [openEMS_Path 'openEMS.sh ' Sim_CSX ' ' openEMS_opts]; @@ -106,16 +122,35 @@ disp(command); system(command) cd(savePath); -UI = ReadUI('ut_1','tmp/'); +%% do the plots %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +UI = ReadUI('ut_1',[Sim_Path '/']); plot(UI.TD{1}.t,UI.TD{1}.val); grid on; -% plotting -% if exist('tmp/Et.h5','file') -% PlotArgs.slice = {mesh.x(round(end/2)) mesh.y(round(end/2)) mesh.z(round(end/2))}; -% PlotArgs.pauseTime=0.1; -% PlotArgs.component=0; -% PlotArgs.zlim='auto'; -% -% PlotHDF5FieldData('tmp/Et.h5',PlotArgs) -% end \ No newline at end of file +file = [Sim_Path '/Et.h5']; +z_planes = 1; +timestep = 10; +for z =z_planes + figure + if exist(file,'file') + mesh = ReadHDF5Mesh(file); + fields = ReadHDF5FieldData(file); + + [ALPHA RHO] = meshgrid(double(mesh.lines{1}),double(mesh.lines{2})); + X = RHO.*cos(ALPHA); + Y = RHO.*sin(ALPHA); + + Er = double( fields.values{timestep}(:,:,z,1) ); + Ea = double( fields.values{timestep}(:,:,z,2) ); + Ez = double( fields.values{timestep}(:,:,z,3) ); + + Ex = Er.*cos(ALPHA) - Ea.*sin(ALPHA); + Ey = Er.*sin(ALPHA) + Ea.*cos(ALPHA); + + quiver(X,Y,Ex,Ey) + axis equal + title(['z : ' num2str(mesh.lines{2}(z)) ' ts: ' int2str(n)] ); + Ex(10,5) + pause(1) + end +end \ No newline at end of file diff --git a/matlab/examples/Coax.m b/matlab/examples/Coax.m index 6475c2f..cb3740c 100644 --- a/matlab/examples/Coax.m +++ b/matlab/examples/Coax.m @@ -2,6 +2,7 @@ close all; clear all; clc +%% setup the simulation %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% abs_length = 250; length = 1000; coax_rad_i = 100; @@ -11,10 +12,16 @@ mesh_res = [5 5 5]; EPS0 = 8.85418781762e-12; MUE0 = 1.256637062e-6; +C0 = 1/sqrt(EPS0*MUE0); +Z0 = sqrt(MUE0/EPS0); +f0 = 0.5e9; +epsR = 1; + +%% define file pathes and openEMS options %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% openEMS_Path = [pwd() '/../../'] openEMS_opts = ''; -% openEMS_opts = [openEMS_opts ' --disable-dumps']; +openEMS_opts = [openEMS_opts ' --disable-dumps']; % openEMS_opts = [openEMS_opts ' --debug-material']; Sim_Path = 'tmp'; @@ -22,24 +29,20 @@ Sim_CSX = 'coax.xml'; mkdir(Sim_Path); -%setup FDTD parameter -FDTD = InitFDTD(5e5,1e-6); -FDTD = SetGaussExcite(FDTD,0.5e9,0.5e9); +%% setup FDTD parameter & excitation function %%%%%%%%%%%%%%%%%%%%%%%%%%%%% +FDTD = InitFDTD(5e5,1e-5); +FDTD = SetGaussExcite(FDTD,f0,f0); BC = [1 1 1 1 1 1] * 0; FDTD = SetBoundaryCond(FDTD,BC); -%setup CSXCAD geometry +%% setup CSXCAD geometry & mesh %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% CSX = InitCSX(); mesh.x = -2.5*mesh_res(1)-coax_rad_aa : mesh_res(1) : coax_rad_aa+2.5*mesh_res(1); mesh.y = mesh.x; mesh.z = 0 : mesh_res(3) : length; CSX = DefineRectGrid(CSX, 1e-3,mesh); -%create copper helix and feed lines... -CSX = AddMaterial(CSX,'copper'); -CSX = SetMaterialProperty(CSX,'copper','Kappa',56e6); - -%%%fake pml +%% fake pml %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% finalKappa = 0.3/abs_length^4; finalSigma = finalKappa*MUE0/EPS0; CSX = AddMaterial(CSX,'pml'); @@ -49,11 +52,15 @@ CSX = SetMaterialWeight(CSX,'pml','Kappa',['pow(abs(z)-' num2str(length-abs_leng CSX = SetMaterialWeight(CSX,'pml','Sigma',['pow(abs(z)-' num2str(length-abs_length) ',4)']); %%% coax +CSX = AddMaterial(CSX,'copper'); +CSX = SetMaterialProperty(CSX,'copper','Kappa',56e6); start = [0, 0 , 0];stop = [0, 0 , length]; CSX = AddCylinder(CSX,'copper',0 ,start,stop,coax_rad_i); CSX = AddCylindricalShell(CSX,'copper',0 ,start,stop,0.5*(coax_rad_aa+coax_rad_ai),(coax_rad_aa-coax_rad_ai)); start(3) = length-abs_length; CSX = AddCylindricalShell(CSX,'pml',0 ,start,stop,0.5*(coax_rad_i+coax_rad_ai),(coax_rad_ai-coax_rad_i)); + +%% apply the excitation %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% start(3) = 0; stop(3)=mesh_res(1)/2; CSX = AddExcitation(CSX,'excite',0,[1 1 0]); weight{1} = '(x)/(x*x+y*y)'; @@ -62,7 +69,7 @@ weight{3} = 0; CSX = SetExcitationWeight(CSX, 'excite', weight ); CSX = AddCylindricalShell(CSX,'excite',0 ,start,stop,0.5*(coax_rad_i+coax_rad_ai),(coax_rad_ai-coax_rad_i)); -%dump +%% define dump boxes... %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% CSX = AddDump(CSX,'Et_','DumpMode',2); start = [mesh.x(1) , 0 , mesh.z(1)]; stop = [mesh.x(end) , 0 , mesh.z(end)]; @@ -72,9 +79,12 @@ CSX = AddDump(CSX,'Ht_','DumpType',1,'DumpMode',2); CSX = AddBox(CSX,'Ht_',0,start,stop); %voltage calc -CSX = AddProbe(CSX,'ut1',0); +CSX = AddProbe(CSX,'ut1_1',0); start = [ coax_rad_i 0 length/2 ];stop = [ coax_rad_ai 0 length/2 ]; -CSX = AddBox(CSX,'ut1', 0 ,start,stop); +CSX = AddBox(CSX,'ut1_1', 0 ,start,stop); +CSX = AddProbe(CSX,'ut1_2',0); +start = [ coax_rad_i 0 length/2+mesh_res(3) ];stop = [ coax_rad_ai 0 length/2+mesh_res(3) ]; +CSX = AddBox(CSX,'ut1_2', 0 ,start,stop); %current calc CSX = AddProbe(CSX,'it1',1); @@ -85,7 +95,7 @@ CSX = AddBox(CSX,'it1', 0 ,start,stop); %Write openEMS compatoble xml-file WriteOpenEMS([Sim_Path '/' Sim_CSX],FDTD,CSX); -%cd to working dir and run openEMS +%% cd to working dir and run openEMS %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% savePath = pwd(); cd(Sim_Path); %cd to working dir command = [openEMS_Path 'openEMS.sh ' Sim_CSX ' ' openEMS_opts]; @@ -93,3 +103,20 @@ disp(command); system(command) cd(savePath); +%% postproc & do the plots %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +UI = ReadUI({'ut1_1','ut1_2','it1'},'tmp/'); +u_f = (UI.FD{1}.val + UI.FD{2}.val)/2; %averaging voltages to fit current +i_f = UI.FD{3}.val; + +delta_t = UI.TD{3}.t(1) - UI.TD{1}.t(1); % half time-step (s) +i_f2 = i_f .* exp(-1i*2*pi*UI.FD{1}.f*delta_t); % compensate half time-step advance of H-field + +ZL = Z0/2/pi/sqrt(epsR)*log(coax_rad_ai/coax_rad_i); %analytic line-impedance of a coax +plot(UI.FD{1}.f,ZL*ones(size(u_f)),'g'); +hold on; +grid on; +Z = u_f./i_f2; +plot(UI.FD{1}.f,real(Z),'Linewidth',2); +plot(UI.FD{1}.f,imag(Z),'r','Linewidth',2); +xlim([0 2*f0]); +legend('Z_L','\Re\{Z\}','\Im\{Z\}','Location','Best'); diff --git a/matlab/examples/Coax_CylinderCoords.m b/matlab/examples/Coax_CylinderCoords.m index 94fca1b..44c2f77 100644 --- a/matlab/examples/Coax_CylinderCoords.m +++ b/matlab/examples/Coax_CylinderCoords.m @@ -2,6 +2,7 @@ close all; clear all; clc +%% setup the simulation %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% EPS0 = 8.85418781762e-12; MUE0 = 1.256637062e-6; C0 = 1/sqrt(EPS0*MUE0); @@ -20,6 +21,7 @@ max_alpha = max_mesh; N_alpha = ceil(rad_a * 2*pi / max_alpha); mesh_res = [max_mesh 2*pi/N_alpha max_mesh]; +%% define file pathes and openEMS options %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% openEMS_Path = [pwd() '/../../']; openEMS_opts = ''; openEMS_opts = [openEMS_opts ' --disable-dumps']; @@ -30,13 +32,13 @@ Sim_CSX = 'coax.xml'; mkdir(Sim_Path); -%setup FDTD parameter +%% setup FDTD parameter & excitation function %%%%%%%%%%%%%%%%%%%%%%%%%%%%% FDTD = InitCylindricalFDTD(1e5,1e-5,'OverSampling',10); FDTD = SetGaussExcite(FDTD,f0,f0); BC = [0 0 1 1 0 0]; FDTD = SetBoundaryCond(FDTD,BC); -%setup CSXCAD geometry +%% setup CSXCAD geometry & mesh %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% CSX = InitCSX(); mesh.x = rad_i : mesh_res(1) : rad_a; mesh.y = linspace(0,2*pi,N_alpha); @@ -44,7 +46,7 @@ mesh.y = linspace(0,2*pi,N_alpha); mesh.z = 0 : mesh_res(3) : length; CSX = DefineRectGrid(CSX, 1e-3,mesh); -%%%fake pml +%% fake pml %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% finalKappa = 0.3/abs_length^4; finalSigma = finalKappa*MUE0/EPS0/epsR; CSX = AddMaterial(CSX,'pml'); @@ -67,6 +69,7 @@ CSX = AddBox(CSX,'fill',0 ,start,stop); start = [rad_i mesh.y(1) 0]; stop = [rad_a mesh.y(end) 0]; +%% apply the excitation %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% CSX = AddExcitation(CSX,'excite',0,[1 0 0]); weight{1} = '1/rho'; weight{2} = 0; @@ -74,7 +77,7 @@ weight{3} = 0; CSX = SetExcitationWeight(CSX, 'excite', weight ); CSX = AddBox(CSX,'excite',0 ,start,stop); -%dump +%% define dump boxes... %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% CSX = AddDump(CSX,'Et_','DumpMode',0); start = [mesh.x(1) , 0 , mesh.z(1)]; stop = [mesh.x(end) , 0 , mesh.z(end)]; @@ -101,7 +104,7 @@ CSX = AddBox(CSX,'it1', 0 ,start,stop); %Write openEMS compatoble xml-file WriteOpenEMS([Sim_Path '/' Sim_CSX],FDTD,CSX); -%cd to working dir and run openEMS +%% cd to working dir and run openEMS %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% savePath = pwd(); cd(Sim_Path); %cd to working dir command = [openEMS_Path 'openEMS.sh ' Sim_CSX ' ' openEMS_opts]; @@ -109,6 +112,7 @@ disp(command); system(command) cd(savePath); +%% postproc & do the plots %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% UI = ReadUI({'ut1_1','ut1_2','it1'},'tmp/'); u_f = (UI.FD{1}.val + UI.FD{2}.val)/2; %averaging voltages to fit current i_f = UI.FD{3}.val; diff --git a/matlab/examples/Helix.m b/matlab/examples/Helix.m index 242a042..5a6a360 100644 --- a/matlab/examples/Helix.m +++ b/matlab/examples/Helix.m @@ -2,6 +2,7 @@ close all; clear; clc +%% setup the simulation %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% feed_length=10; wire_rad = sqrt(1.4/pi); mesh_size = wire_rad; @@ -13,12 +14,14 @@ port_length = mesh_size; %coil_length/2; port_resist = 1000; f_max = 100e6; -f_excite = 1e9; +f_excite = 300e6; +%% define file pathes and openEMS options %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% openEMS_Path = [pwd() '/../../'] openEMS_opts = ''; % openEMS_opts = [openEMS_opts ' --disable-dumps']; -% openEMS_opts = [openEMS_opts ' --debug-material']; +openEMS_opts = [openEMS_opts ' --debug-material']; +openEMS_opts = [openEMS_opts ' --debug-boxes']; % openEMS_opts = [openEMS_opts ' --debug-operator']; Sim_Path = 'tmp'; @@ -27,16 +30,16 @@ Sim_CSX = 'helix.xml'; rmdir(Sim_Path,'s'); mkdir(Sim_Path); -%setup FDTD parameter -FDTD = InitFDTD(5e5,1e-6); +%% setup FDTD parameter & excitation function %%%%%%%%%%%%%%%%%%%%%%%%%%%%% +FDTD = InitFDTD(30000,1e-6); FDTD = SetGaussExcite(FDTD,f_excite/2,f_excite/2); BC = [1 1 1 1 1 1]; FDTD = SetBoundaryCond(FDTD,BC); +%% setup CSXCAD geometry & mesh %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% add_Lines = mesh_size * 1.5.^(1:10); add_Lines = add_Lines(find(add_Lines<(3e8/f_excite)/10*1e3)); -%setup CSXCAD geometry CSX = InitCSX(); mesh.x = -coil_rad-mesh_size : mesh_size : coil_rad+mesh_size+feed_length; mesh.x = [mesh.x(1)-add_Lines mesh.x mesh.x(end)+add_Lines ]; @@ -46,11 +49,10 @@ mesh.z = -mesh_size : mesh_size : coil_length+mesh_size; mesh.z = [mesh.z(1)-add_Lines mesh.z mesh.z(end)+add_Lines ]; CSX = DefineRectGrid(CSX, 1e-3,mesh); -%create copper helix and feed lines... +%% build/define helix %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% CSX = AddMaterial(CSX,'copper'); CSX = SetMaterialProperty(CSX,'copper','Kappa',56e6); -%build helix-wire dt = 1.0/coil_res; height=0; wire.Vertex = {}; @@ -78,6 +80,7 @@ p(2,count+2) = 0; p(3,count+2) = 0.5*(coil_length+port_length); CSX = AddWire(CSX, 'copper', 0, p, wire_rad); +%% apply the excitation & resist as a current source%%%%%%%%%%%%%%%%%%%%%%% CSX = AddMaterial(CSX,'resist'); kappa = port_length/port_resist/wire_rad^2/pi/1e-3; CSX = SetMaterialProperty(CSX,'resist','Kappa',kappa); @@ -87,10 +90,10 @@ stop=[coil_rad+feed_length 0 (coil_length+port_length)/2]; %start(3)=(coil_length-port_length)/2;stop(3)=(coil_length+port_length)/2; CSX = AddCylinder(CSX,'resist',5 ,start,stop,wire_rad); -%excitation CSX = AddExcitation(CSX,'excite',0,[0 0 1]); CSX = AddCylinder(CSX,'excite', 0 ,start,stop,wire_rad); +%% define voltage calc boxes %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %voltage calc CSX = AddProbe(CSX,'ut1',0); CSX = AddBox(CSX,'ut1', 0 ,stop,start); @@ -102,7 +105,7 @@ start(1) = start(1)-2;start(2) = start(2)-2; stop(1) = stop(1)+2;stop(2) = stop(2)+2; CSX = AddBox(CSX,'it1', 0 ,start,stop); -%dump +%% define dump boxes... %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% CSX = AddDump(CSX,'Et_'); start = [mesh.x(1) , 0 , mesh.z(1)]; stop = [mesh.x(end) , 0 , mesh.z(end)]; @@ -113,10 +116,10 @@ start = [mesh.x(1) , 0 , mesh.z(1)]; stop = [mesh.x(end) , 0 , mesh.z(end)]; CSX = AddBox(CSX,'Ht_',0 , start,stop); -%Write openEMS compatoble xml-file +%% Write openEMS compatoble xml-file %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% WriteOpenEMS([Sim_Path '/' Sim_CSX],FDTD,CSX); -%cd to working dir and run openEMS +%% cd to working dir and run openEMS %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% savePath = pwd(); cd(Sim_Path); %cd to working dir command = [openEMS_Path 'openEMS.sh ' Sim_CSX ' ' openEMS_opts]; @@ -124,7 +127,7 @@ disp(command); system(command) cd(savePath); -%%%post-proc +%% postproc & do the plots %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% U = ReadUI('ut1','tmp/'); I = ReadUI('it1','tmp/'); @@ -147,5 +150,12 @@ plot(f(ind)*1e-6,R(ind),'Linewidth',2); hold on plot(f(ind)*1e-6,imag(Z(ind)),'r','Linewidth',2); xlabel('frequency (MHz)'); -ylabel('resistance (\Omega)'); +ylabel('resistance (Ohm)'); +grid on; +legend( {'real','imaginary'}, 'location', 'northwest' ) + +figure +plot(U.TD{1}.t/1e-6,U.TD{1}.val,'Linewidth',2); +xlabel('time (us)'); +ylabel('amplitude (V)'); grid on; diff --git a/matlab/examples/MSL.m b/matlab/examples/MSL.m index 7f9ca3e..cbb27b6 100644 --- a/matlab/examples/MSL.m +++ b/matlab/examples/MSL.m @@ -2,6 +2,7 @@ close all; clear all; clc +%% setup the simulation %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% abs_length = 250; length = 1000; width = 500; @@ -13,23 +14,24 @@ mesh_res = [5 5 10]; EPS0 = 8.85418781762e-12; MUE0 = 1.256637062e-6; +%% define file pathes and openEMS options %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% openEMS_Path = [pwd() '/../../'] openEMS_opts = ''; % openEMS_opts = [openEMS_opts ' --disable-dumps']; -openEMS_opts = [openEMS_opts ' --debug-material']; +% openEMS_opts = [openEMS_opts ' --debug-material']; Sim_Path = 'tmp'; Sim_CSX = 'msl.xml'; mkdir(Sim_Path); -%setup FDTD parameter +%% setup FDTD parameter & excitation function %%%%%%%%%%%%%%%%%%%%%%%%%%%%% FDTD = InitFDTD(5e5,1e-6); FDTD = SetGaussExcite(FDTD,0.5e9,0.5e9); BC = [1 1 0 1 0 0]; FDTD = SetBoundaryCond(FDTD,BC); -%setup CSXCAD geometry +%% setup CSXCAD geometry & mesh %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% CSX = InitCSX(); mesh.x = -width/2 : mesh_res(1) : width/2; mesh.y = [linspace(0,MSL_height,11) MSL_height+1 MSL_height+3 MSL_height+mesh_res(2):mesh_res(2):height]; @@ -46,7 +48,7 @@ start = [-0.5*MSL_width, 0 , 0];stop = [0.5*MSL_width, MSL_height , mesh_res(1)/ CSX = AddExcitation(CSX,'excite',0,[0 -1 0]); CSX = AddBox(CSX,'excite',0 ,start,stop); -%%%fake pml +%% fake pml %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% finalKappa = 0.3/abs_length^4; finalSigma = finalKappa*MUE0/EPS0; CSX = AddMaterial(CSX,'pml'); @@ -58,7 +60,7 @@ start = [mesh.x(1) mesh.y(1) length-abs_length]; stop = [mesh.x(end) mesh.y(end) length]; CSX = AddBox(CSX,'pml',0 ,start,stop); -%dump +%% define dump boxes... %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% CSX = AddDump(CSX,'Et_','DumpMode',2); start = [mesh.x(1) , MSL_height/2 , mesh.z(1)]; stop = [mesh.x(end) , MSL_height/2 , mesh.z(end)]; @@ -67,6 +69,7 @@ CSX = AddBox(CSX,'Et_',0 , start,stop); CSX = AddDump(CSX,'Ht_','DumpType',1,'DumpMode',2); CSX = AddBox(CSX,'Ht_',0,start,stop); +%% define voltage calc boxes %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %voltage calc CSX = AddProbe(CSX,'ut1',0); start = [ 0 MSL_height length/2 ];stop = [ 0 0 length/2 ]; @@ -77,10 +80,10 @@ CSX = AddProbe(CSX,'it1',1); start = [ -MSL_width MSL_height/2 length/2 ];stop = [ MSL_width MSL_height*1.5 length/2 ]; CSX = AddBox(CSX,'it1', 0 ,start,stop); -%Write openEMS compatoble xml-file +%% Write openEMS compatoble xml-file %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% WriteOpenEMS([Sim_Path '/' Sim_CSX],FDTD,CSX); -%cd to working dir and run openEMS +%% cd to working dir and run openEMS %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% savePath = pwd(); cd(Sim_Path); %cd to working dir command = [openEMS_Path 'openEMS.sh ' Sim_CSX ' ' openEMS_opts]; diff --git a/matlab/examples/PlaneWave.m b/matlab/examples/PlaneWave.m index fdde4be..7939837 100644 --- a/matlab/examples/PlaneWave.m +++ b/matlab/examples/PlaneWave.m @@ -2,6 +2,7 @@ close all; clear all; clc +%% setup the simulation %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% abs_length = 250; length = 4000; width = 1000; @@ -11,24 +12,25 @@ mesh_res = 25; EPS0 = 8.85418781762e-12; MUE0 = 1.256637062e-6; +%% define file pathes and openEMS options %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% openEMS_Path = [pwd() '/../../'] openEMS_opts = ''; % openEMS_opts = [openEMS_opts ' --disable-dumps']; % openEMS_opts = [openEMS_opts ' --debug-material']; -openEMS_opts = [openEMS_opts ' --engine=multithreaded']; +% openEMS_opts = [openEMS_opts ' --engine=multithreaded']; Sim_Path = 'tmp'; Sim_CSX = 'plane_wave.xml'; mkdir(Sim_Path); -%setup FDTD parameter -FDTD = InitFDTD(5e5,1e-6); +%% setup FDTD parameter & excitation function %%%%%%%%%%%%%%%%%%%%%%%%%%%%% +FDTD = InitFDTD(5e5,1e-6,'OverSampling',10); FDTD = SetGaussExcite(FDTD,0.5e9,0.5e9); BC = [1 1 0 0 0 0]; FDTD = SetBoundaryCond(FDTD,BC); -%setup CSXCAD geometry +%% setup CSXCAD geometry & mesh %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% CSX = InitCSX(); mesh.x = -width/2 : mesh_res : width/2; mesh.y = -height/2 : mesh_res : height/2; @@ -36,7 +38,7 @@ mesh.z = 0 : mesh_res : length; CSX = DefineRectGrid(CSX, 1e-3,mesh); -%%%fake pml +%% fake pml %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% finalKappa = 0.3/abs_length^4; finalSigma = finalKappa*MUE0/EPS0; CSX = AddMaterial(CSX,'pml'); @@ -48,24 +50,25 @@ start=[-width/2 -height/2 length-abs_length]; stop=[width/2 height/2 length]; CSX = AddBox(CSX,'pml',0 ,start,stop); +%% apply the excitation %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% start=[-width/2 -height/2 0]; stop=[width/2 height/2 0]; CSX = AddExcitation(CSX,'excite',0,[0 1 0]); CSX = AddBox(CSX,'excite',0 ,start,stop); -%dump -CSX = AddDump(CSX,'Et','FileType',1); -start = [mesh.x(1) , 0 , mesh.z(1)]; -stop = [mesh.x(end) , 0 , mesh.z(end)]; +%% define dump boxes... %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +CSX = AddDump(CSX,'Et','FileType',1,'SubSampling','4,4,1'); +start = [mesh.x(1) , mesh.y(1) , mesh.z(1)]; +stop = [mesh.x(end) , mesh.y(end) , mesh.z(end)]; CSX = AddBox(CSX,'Et',0 , start,stop); -CSX = AddDump(CSX,'Ht','DumpType',1,'FileType',1); +CSX = AddDump(CSX,'Ht','DumpType',1,'FileType',1,'SubSampling','4,4,1'); CSX = AddBox(CSX,'Ht',0,start,stop); -%Write openEMS compatoble xml-file +%% Write openEMS compatoble xml-file %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% WriteOpenEMS([Sim_Path '/' Sim_CSX],FDTD,CSX); -%cd to working dir and run openEMS +%% cd to working dir and run openEMS %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% savePath = pwd(); cd(Sim_Path); %cd to working dir command = [openEMS_Path 'openEMS.sh ' Sim_CSX ' ' openEMS_opts]; @@ -73,11 +76,11 @@ disp(command); system(command) cd(savePath); -% plotting -PlotArgs.plane='zx'; +%% do the plots %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +PlotArgs.slice = {mesh.x(round(end/2)) mesh.y(round(end/2)) mesh.z(round(end/2))}; PlotArgs.pauseTime=0.01; PlotArgs.component=2; -PlotArgs.zlim='auto'; +PlotArgs.Limit = 'auto'; PlotHDF5FieldData('tmp/Et.h5',PlotArgs) diff --git a/matlab/examples/Rect_Waveguide.m b/matlab/examples/Rect_Waveguide.m index cecce92..e21648a 100644 --- a/matlab/examples/Rect_Waveguide.m +++ b/matlab/examples/Rect_Waveguide.m @@ -2,6 +2,7 @@ close all; clear all; clc +%% setup the simulation %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% abs_length = 250; length = 4000; unit = 1e-3; @@ -29,6 +30,7 @@ beta = sqrt(k^2 - kc^2); func_Ex = [num2str(n/b/unit) '*cos(' num2str(m*pi/a) '*x)*sin(' num2str(n*pi/b) '*y)']; func_Ey = [num2str(m/a/unit) '*sin(' num2str(m*pi/a) '*x)*cos(' num2str(n*pi/b) '*y)']; +%% define file pathes and openEMS options %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% openEMS_Path = [pwd() '/../../'] openEMS_opts = ''; % openEMS_opts = [openEMS_opts ' --disable-dumps']; @@ -40,21 +42,20 @@ Sim_CSX = 'rect_wg.xml'; mkdir(Sim_Path); -%setup FDTD parameter +%% setup FDTD parameter & excitation function %%%%%%%%%%%%%%%%%%%%%%%%%%%%% FDTD = InitFDTD(500,1e-6,'OverSampling',6); FDTD = SetSinusExcite(FDTD,f0); BC = [0 0 0 0 0 0]; FDTD = SetBoundaryCond(FDTD,BC); -%setup CSXCAD geometry +%% setup CSXCAD geometry & mesh %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% CSX = InitCSX(); mesh.x = 0 : mesh_res(1) : width; mesh.y = 0 : mesh_res(2) : height; mesh.z = -length: mesh_res(3) : length; CSX = DefineRectGrid(CSX, unit,mesh); - -%%%fake pml +%% fake pml %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% finalKappa = 0.3/abs_length^4; finalSigma = finalKappa*MUE0/EPS0; CSX = AddMaterial(CSX,'pml'); @@ -69,6 +70,7 @@ start=[0 0 -length+abs_length]; stop=[width height -length]; CSX = AddBox(CSX,'pml',0 ,start,stop); +%% apply the excitation %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% start=[0 0 0]; stop=[width height 0]; CSX = AddExcitation(CSX,'excite',0,[1 1 0]); @@ -78,7 +80,7 @@ weight{3} = 0; CSX = SetExcitationWeight(CSX,'excite',weight); CSX = AddBox(CSX,'excite',0 ,start,stop); -%dump +%% define dump boxes... %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% CSX = AddDump(CSX,'Et','FileType',1); start = [mesh.x(1) , height/2 , mesh.z(1)]; stop = [mesh.x(end) , height/2 , mesh.z(end)]; @@ -87,10 +89,10 @@ CSX = AddBox(CSX,'Et',0 , start,stop); CSX = AddDump(CSX,'Ht','DumpType',1,'FileType',1); CSX = AddBox(CSX,'Ht',0,start,stop); -%Write openEMS compatoble xml-file +%% Write openEMS compatoble xml-file %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% WriteOpenEMS([Sim_Path '/' Sim_CSX],FDTD,CSX); -%cd to working dir and run openEMS +%% cd to working dir and run openEMS %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% savePath = pwd(); cd(Sim_Path); %cd to working dir command = [openEMS_Path 'openEMS.sh ' Sim_CSX ' ' openEMS_opts]; @@ -98,11 +100,11 @@ disp(command); system(command) cd(savePath); -% plotting -PlotArgs.plane='zx'; -PlotArgs.pauseTime=0.1; +%% do the plots %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +PlotArgs.slice = {mesh.x(round(end/2)) mesh.y(round(end/2)) mesh.z(round(end/2))}; +PlotArgs.pauseTime=0.01; PlotArgs.component=2; -PlotArgs.zlim='auto'; +PlotArgs.Limit = 'auto'; PlotHDF5FieldData('tmp/Et.h5',PlotArgs) diff --git a/matlab/examples/empire/helix/helix.gym b/matlab/examples/empire/helix/helix.gym new file mode 100644 index 0000000..79f38ca --- /dev/null +++ b/matlab/examples/empire/helix/helix.gym @@ -0,0 +1,201 @@ +GANYMEDE 5.3 build 6456 +BINARY 325570627840 + + +sETTINGS 'KGRwMQpTJ29wZXJhdGlvbnMnCnAyClMnVXlKN0ozTndZWEluT2x0ZExDZHpkV0l0TVNjNlcxMHNKM04xWWkxaGJHd25PbHRkTENkemRYQmxjbkJ2YzJsMGFXOXVKenBiWFN3bmVYQmhjaWM2VzExOUlncHdNUW91JwpwMwpzUydfX29wdF9faHNuYXAnCnA0ClMnc21hbGwnCnA1CnNTJ25vcm1fZWYnCnA2ClMnMScKc1Mnem1heCcKcDcKUydtYWduZXRpYycKcDgKc1MnX19vcHRfX2Ryc3AyJwpwOQpJMQpzUydfX29wdF9fZHJjbGltaXQnCnAxMApJMTIKc1MnX19vcHRfX2QzbXdjJwpwMTEKUydvZmYnCnAxMgpzUydfX29wdF9fZXhjZm10JwpwMTMKUyclLjNmJwpwMTQKc1Mnem1pbicKcDE1ClMnbWFnbmV0aWMnCnAxNgpzUydfX29wdF9fZHhmbnBvaW50cycKcDE3ClMnMTInCnAxOApzUydfX29wdF9fZDNzcGVlZCcKcDE5ClMnMTAwMCcKcDIwCnNTJ19fYXV0b2Rpc2NfX3ptaW4nCnAyMQpTJy0yNi4zJwpwMjIKc1MnX19hdXRvZGlzY19fa2VlcCcKcDIzClMnMScKc1MnX19vcHRfX2V4cF9ocGdsX2ZhY3QnCnAyNApTJzEvMjUuNCcKcDI1CnNTJ19fb3B0X19zbW9vdGgzZCcKcDI2ClMnb2ZmJwpwMjcKc1MnX19vcHRfX2V4Y2RlY2knCnAyOApTJzQnCnNTJ19fb3B0X19kM21mcycKcDI5ClMnMTQnCnAzMApzUydjbGVhbnVwX2FsbCcKcDMxClMnMCcKc1MnX19vcHRfX21oZWFkJwpwMzIKUydBVVRPJwpwMzMKc1MnZXBzZWZmJwpwMzQKUycxJwpzUydfX29wdF9fZHJ1bmRlcicKcDM1CkkzNQpzUydfX2F1dG9kaXNjX19hY2N1cmFjeScKcDM2ClMnMWUtNicKcDM3CnNTJ19fYXV0b2Rpc2NfX3BncmlkJwpwMzgKUycxJwpzUydfX29wdF9fc3VyZmRpc3AnCnAzOQpTJ2FsbCcKcDQwCnNTJ19fb3B0X192c25hcCcKcDQxClMnID0gaG9yaXpvbnRhbCcKcDQyCnNTJ19fb3B0X19tYjJvcHQnCnA0MwpTJ29uJwpwNDQKc1MnX19vcHRfX3ByaW50X3N6JwpwNDUKUycxJwpzUydhdXRvYWxnbycKcDQ2ClMnMicKc1MnX19vcHRfX2ljc2l6ZScKcDQ3ClMnZGVmYXVsdCcKcDQ4CnNTJ19fb3B0X19kM2JnJwpwNDkKUyd3aGl0ZScKcDUwCnNTJ3ZlcnNpb24nCnA1MQpGNS4yOTk5OTk5OTk5OTk5OTk4CnNTJ3NyY3N1bScKcDUyCkkyMDAKc1MnZW9yZCcKcDUzClMnNDAnCnA1NApzUydscm9wdCcKcDU1ClMnMScKc1MnbnN0ZXBzJwpwNTYKSTEwMDAwMApzUydfX2F1dG9kaXNjX196bWF4JwpwNTcKUyc3NS43JwpwNTgKc1MnX19vcHRfX3N0bHNlcCcKcDU5ClMnb2ZmJwpwNjAKc1MnX19vcHRfX2hvc25hcCcKcDYxClMnMicKc1MnX19vcHRfX3ByYXN0JwpwNjIKUycwLjEnCnA2MwpzUydfX2F1dG9kaXNjX19ub2JqMicKcDY0ClMnMScKc1MnX19vcHRfX3BvaW50X3RleHQnCnA2NQpTJ25vcm1hbCcKcDY2CnNTJ19fb3B0X19kM2wxcycKcDY3ClMnMC4wJwpwNjgKc1MnX19vcHRfX2Rpc2Nib3VuZCcKcDY5ClMnZ3JleTgwJwpwNzAKc1MneG1heF9hcycKcDcxClMnYXV0b21hdGljJwpwNzIKc1MnX19vcHRfX2QzbDFwJwpwNzMKUydvZmYnCnA3NApzUydfX29wdF9fYm5kcGhpMScKcDc1ClMnNTAuMCcKcDc2CnNTJ19fb3B0X19tYjInCnA3NwpTJ3JlY3RhbmdsZXMnCnA3OApzUydfX29wdF9fZDNibGVuZCcKcDc5ClMnb2ZmJwpwODAKc1MnX19vcHRfX2N1cnNvcl90ZXh0JwpwODEKUydvbicKcDgyCnNTJ2F1dG9kaXNjJwpwODMKUyczZCcKcDg0CnNTJ19fb3B0X19kcnNwMCcKcDg1CkkyMDAKc1MnX19vcHRfX2Ryc3AxJwpwODYKSTEKc1MnZHgnCnA4NwpTJzFlLTMnCnA4OApzUyd4X3BlcicKcDg5ClMnb2ZmJwpwOTAKc1MnX19vcHRfX2QzbDFhJwpwOTEKUycxLjAnCnA5MgpzUydfX29wdF9fZGlzYzNkJwpwOTMKUydvbicKcDk0CnNTJ19fYXV0b2Rpc2NfX2ZtbGltaXQnCnA5NQpTJzAuMCcKcDk2CnNTJ19fb3B0X19wb2ludF9zaGFwZScKcDk3ClMnc21hbGwnCnA5OApzUydfX29wdF9fZDNsMWQnCnA5OQpTJzAuMicKcDEwMApzUyd4bWluX2FzJwpwMTAxClMnYXV0b21hdGljJwpwMTAyCnNTJ19fb3B0X19zZWxhY2MnCnAxMDMKSTEKc1MnX19vcHRfX2xheWVyX29yZGVyJwpwMTA0ClMnbm9ybWFsJwpwMTA1CnNTJ19fb3B0X19jdXJzb3JfY29sb3InCnAxMDYKUydncmV5MjAnCnAxMDcKc1MnbGV2ZWwnCnAxMDgKUycwJwpzUydfX29wdF9fZG9zbmFwJwpwMTA5ClMnb24nCnAxMTAKc1MnX19vcHRfX2V4cF9keGZfZmFjdCcKcDExMQpTJzEnCnNTJ19fb3B0X19sbW9kZScKcDExMgpTJ2Z1bGwnCnAxMTMKc1MnX19vcHRfX3BvdnF1YWQnCnAxMTQKSTgKc1MnX19vcHRfX3doZWVsZmFjdCcKcDExNQpTJzEuMicKcDExNgpzUydfX29wdF9fZDNwcycKcDExNwpTJzEwJwpwMTE4CnNTJ19fb3B0X19kaWdyYWRlZCcKcDExOQpGMS41CnNTJ19fYXV0b2Rpc2NfX25vYmozJwpwMTIwClMnMScKc1MnX19vcHRfX2V4cF9scHInCnAxMjEKUydscHInCnAxMjIKc1MneG1heCcKcDEyMwpTJ21hZ25ldGljJwpwMTI0CnNTJ19fb3B0X191aHRzaGlmdCcKcDEyNQpTJzAgMCcKcDEyNgpzUydkZWJ1ZycKcDEyNwpTJzEwMCcKcDEyOApzUydfX2F1dG9kaXNjX19hcmNyZXMnCnAxMjkKUycyMi41JwpwMTMwCnNTJ19fb3B0X19vc25hcCcKcDEzMQpTJ29iamVjdHMrdHJhY2VzJwpwMTMyCnNTJ19fYXV0b2Rpc2NfX3BkaXInCnAxMzMKUydOb25lJwpwMTM0CnNTJ19fb3B0X19leHBfZ2JyX2ZtdCcKcDEzNQpTJzM0JwpwMTM2CnNTJ19fb3B0X19hcnJvd190ZXh0JwpwMTM3ClMnbm9ybWFsJwpwMTM4CnNTJ19fb3B0X19iYWNrdXAnCnAxMzkKUydvbicKcDE0MApzUydudW1iZXJfZzJkJwpwMTQxClMnMycKc1MnX19vcHRfX2Rpc2NtYWluJwpwMTQyClMnb2ZmJwpwMTQzCnNTJ19fb3B0X19ibmRwaGkwJwpwMTQ0ClMnNTAuMCcKcDE0NQpzUydleHR5cGUnCnAxNDYKUydnYXVzcycKcDE0NwpzUydpZGxjbG9zZScKcDE0OApTJzEnCnNTJ19fb3B0X19ic2F2ZScKcDE0OQpTJ29mZicKcDE1MApzUydfX29wdF9fdGV4dHNldCcKcDE1MQpTJ29mZicKcDE1MgpzUydfX2F1dG9kaXNjX195bWluJwpwMTUzClMnLTM2LjMnCnAxNTQKc1MnX19hdXRvZGlzY19fYXNwZWN0JwpwMTU1ClMnMjAnCnAxNTYKc1MnX19vcHRfX2V4cF9wc2xfc2hpZnQnCnAxNTcKSTEwMDAwCnNTJ19fb3B0X19kM21sdycKcDE1OApTJzInCnNTJ19fb3B0X19zdXJmYW5nJwpwMTU5CkkzMApzUydfX29wdF9faGRzbmFwJwpwMTYwClMnb2ZmJwpwMTYxCnNTJ19fb3B0X19leHBfZ2JyX2ZhY3QnCnAxNjIKUycwLjAwMScKcDE2MwpzUydfX29wdF9fcG9seW9ubHknCnAxNjQKUydvZmYnCnAxNjUKc1MnbnNvdXJjZScKcDE2NgpTJzE1JwpwMTY3CnNTJ2NsZWFudXBfdGNsJwpwMTY4ClMnMCcKc1MnX19hdXRvZGlzY19feG1pbicKcDE2OQpTJy0zNi4zJwpwMTcwCnNTJ19fYXV0b2Rpc2NfX2RtYXgnCnAxNzEKUydOb25lJwpwMTcyCnNTJ19fb3B0X19kcnB0b2wnCnAxNzMKSTEwCnNTJ19fb3B0X19sYXlpZ24nCnAxNzQKUydvZmYnCnAxNzUKc1MnTUVNU0FWRScKcDE3NgpTJzEnCnNTJ19fb3B0X19yc2ltcGwnCnAxNzcKUydvZmYnCnAxNzgKc1MnX19vcHRfX2V4cF9jZ21fZnMnCnAxNzkKUycwLjcnCnAxODAKc1MnX19vcHRfX3NvbGlkYWNjdScKcDE4MQpTJzFlLTUnCnAxODIKc1MnX19vcHRfX3ZmaGVpZ2h0JwpwMTgzCkkzNQpzUydfX29wdF9faW1wY2lyY3RvbCcKcDE4NApGMC4xMDAwMDAwMDAwMDAwMDAwMQpzUydfX29wdF9fcG92bHM1JwpwMTg1ClMnb2ZmJwpwMTg2CnNTJ19fb3B0X19kM2xnYScKcDE4NwpTJzAuMScKcDE4OApzUydfX2F1dG9kaXNjX19jbGFtJwpwMTg5ClMnMTAnCnAxOTAKc1MnX19vcHRfX2QzbHcnCnAxOTEKUyczJwpzUydfX29wdF9fc3JhZGxpbWl0JwpwMTkyClMnb2ZmJwpwMTkzCnNTJ19fb3B0X19kcmxlbicKcDE5NApTJzEuNScKcDE5NQpzUydfX29wdF9fbWluZGlzYycKcDE5NgpTJzEuNmUtMDUnCnAxOTcKc1MnZXJlZicKcDE5OApTJ09GRicKcDE5OQpzUyd0ZW1wbGF0ZScKcDIwMApTJ01pY3Jvc3RyaXAgQW50ZW5uYScKcDIwMQpzUydfX29wdF9fc3RhY2toaWdobGlnaHQnCnAyMDIKUydvZmYnCnAyMDMKc1MnUEdBX0FDQ1UnCnAyMDQKUycxMCcKcDIwNQpzUydfX29wdF9fZHJkc2NhbGUnCnAyMDYKUycxNjAuMC81OC4wJwpwMjA3CnNTJ19fYXV0b2Rpc2NfX25vYmoxJwpwMjA4ClMnMScKc1MnX19vcHRfX2Ryc3VicycKcDIwOQpTJ29uJwpwMjEwCnNTJ251bWJlcl9nM2QnCnAyMTEKUycxJwpzUydlY3V0JwpwMjEyClMnLTEnCnAyMTMKc1MnX19vcHRfX2V4cF9jZ21fZ2VvJwpwMjE0ClMnNjQwMHg0ODAwJwpwMjE1CnNTJ19fb3B0X19leGNsaW1pdCcKcDIxNgpJMTIKc1MnZ2x2aWV3JwpwMjE3CigoRjQuNzAwMDAwMDAwMDAwMDAyOApGLTAuMjk5OTk5OTk5OTk5OTk3MTYKRjI0LjcwMDAwMDAwMDAwMDAwMwpGMTAyCnRwMjE4CmNmaXhfbnVtX3BpY2tsZQphcnJheV9jb25zdHJ1Y3RvcgpwMjE5CigoSTMKdFMnZCcKUydceDAwXHgwMFx4MDBceDAwXHgwMFx4MDBceDAwXHgwMFx4MDBceDAwXHgwMFx4MDBceDAwXHgwMFx4MDBceDAwcFx4YjRoUlx4YTRceGRlXHgxOUAnCkkwMQp0UnAyMjAKZzIxOQooKEkzCnRTJ2QnClMnXHgwMFx4MDBceDAwXHgwMFx4MDBceDAwXHgwMFx4MDBceDAwXHgwMFx4MDBceDAwXHgwMFx4MDBceDAwXHgwMFx4MDBceDAwXHgwMFx4MDBceDAwXHgwMFx4MDBceDAwJwpJMDEKdFJwMjIxCmcyMTkKKChJMwp0UydkJwpTJ1x4MDBceDAwXHgwMFx4MDBceDAwXHgwMFx4MDBceDAwXHgwMFx4MDBceDAwXHgwMFx4MDBceDAwXHhmMD9ceDAwXHgwMFx4MDBceDAwXHgwMFx4MDBceDAwXHgwMCcKSTAxCnRScDIyMgpnMjE5CigoSTQKSTQKdFMnZCcKUyJceDAwXHgwMFx4MDBceGMwejdceGRiP1x4MDBceDAwXHgwMFx4YTBXJFx4Y2RceGJmXHgwMFx4MDBceDAwQFx4ZWNceDA3XHhlY1x4YmZceDAwXHgwMFx4MDBceDAwXHgwMFx4MDBceDAwXHgwMFx4MDBceDAwXHgwMFx4ZTBmXHhlYVx4YmM/XHgwMFx4MDBceDAwXHgwMFx4ZjQnXHhlZj9ceDAwXHgwMFx4MDBceGMwPl9ceGM5XHhiZlx4MDBceDAwXHgwMFx4MDBceDAwXHgwMFx4MDBceDAwXHgwMFx4MDBceDAwXHgwMF1ceGJjXHhlYz9ceDAwXHgwMFx4MDBceGMwXHg5Ylx4ZmZceDhkXHhiZlx4MDBceDAwXHgwMFx4MDBcciVceGRjP1x4MDBceDAwXHgwMFx4MDBceDAwXHgwMFx4MDBceDAwXHgwMFx4MDBceDAwXHgwMFx4MDBceDAwXHgwMFx4MDBceDAwXHgwMFx4MDBceDAwXHgwMFx4MDBceDAwXHgwMFx4MDBceDAwXHgwMFx4MDBceDAwXHgwMFx4MDBceDAwXHgwMFx4MDBceDAwXHgwMFx4MDBceDAwXHhmMD8iCkkwMQp0UnAyMjMKKEYwLjA0MzIyNzQyOTgyMTI2Nzc2CihscDIyNApGMAphRjAKYUYxCmFJMAphRjEKYUYwCmFGMAphSTAKYUYwCmFGMQphRjAKYUkwCmFJMAphSTAKYUkwCmFJMQphRjQuNzAwMDAwMDAwMDAwMDAyOApGLTAuMjk5OTk5OTk5OTk5OTk3MTYKRjI0LjcwMDAwMDAwMDAwMDAwMwp0cDIyNQp0cDIyNgpzUydfX29wdF9fYmRsJwpwMjI3ClMnMC41NScKcDIyOApzUydfX2F1dG9kaXNjX19kbWluJwpwMjI5ClMnMC4wNl8wLjA2XzAuMTUnCnAyMzAKc1MndGhyZWFkcycKcDIzMQpTJ2F1dG8nCnAyMzIKc1MnX19vcHRfX3RzbmFwJwpwMjMzClMnMTUnCnAyMzQKc1MnX19vcHRfX2RyZG1heCcKcDIzNQpJNjAwMApzUydfX29wdF9fc3RsY29hcnNlJwpwMjM2CkkxMDAKc1Mnd2dfcG9ydF9hYnNvcmInCnAyMzcKUycxJwpzUydfX29wdF9fdnNpemUnCnAyMzgKUycxMDAnCnAyMzkKc1MnX19vcHRfX2V4cF9wdycKcDI0MApTJzI4MCBtbScKcDI0MQpzUydfX29wdF9fcHRvbCcKcDI0MgpTJzAuMDAwMScKcDI0MwpzUydfX29wdF9fcG1pbmFuZycKcDI0NApTJzAuMDEnCnAyNDUKc1MnX19vcHRfX3BvdmVubGcnCnAyNDYKUycxJwpzUydfX29wdF9fdmJvcmRlcicKcDI0NwpTJzYwJwpwMjQ4CnNTJ1RZUEUnCnAyNDkKUydVU1InCnAyNTAKc1MnX19vcHRfX2V4cF9nZHNpaV9mYWN0JwpwMjUxClMnMTAwMCcKcDI1MgpzUydfX29wdF9fcGNyZWMnCnAyNTMKSTgKc1MnX19vcHRfX3ZmaGRpc3QnCnAyNTQKRjAuMjk5OTk5OTk5OTk5OTk5OTkKc1MnX19vcHRfX21kaXN0JwpwMjU1ClMnNCcKc1MndzMybWVtYmxvY2snCnAyNTYKUycwJwpzUydkb195JwpwMjU3ClMnMCcKc1MnX19hdXRvZGlzY19fZGlzeScKcDI1OApTJ2F1dG8nCnAyNTkKc1MnX19vcHRfX2dkc3ZpYXNpemUnCnAyNjAKUyc0MDAnCnAyNjEKc1MnX19vcHRfX2Rpc2NvbG9yJwpwMjYyClMncmVkJwpwMjYzCnNTJ19fb3B0X19leGNzY2FsZScKcDI2NApTJzEuLzEwMDAnCnAyNjUKc1MnY2xlYW51cF9pbnRlcicKcDI2NgpTJzEnCnNTJ2NsZWFudXBfcmVzJwpwMjY3ClMnMScKc1MnX19vcHRfX2Rpc2Nfa29vcicKcDI2OApTJ29mZicKcDI2OQpzUydfX29wdF9fZ2RzbWluc2l6ZScKcDI3MApTJzAnCnNTJ2ZvZmZzZXQnCnAyNzEKUycwJwpzUydfX29wdF9fZXhjdW5pdCcKcDI3MgpTJ21tJwpwMjczCnNTJ3BhcnRvbCcKcDI3NApTJzVlLTYnCnAyNzUKc1MnX19vcHRfX2RybGFtcCcKcDI3NgpTJzE5LjUnCnAyNzcKc1MnX19vcHRfX3BhbmdsZScKcDI3OApTJzkwJwpwMjc5CnNTJ2xpY3dhaXQnCnAyODAKUycwJwpzUyd5bWluJwpwMjgxClMnbWFnbmV0aWMnCnAyODIKc1MnX19vcHRfX2Ryc3RhcnQnCnAyODMKUycwIDAnCnAyODQKc1MnX19vcHRfX2Qzc2l6ZScKcDI4NQpTJ2F1dG8nCnAyODYKc1MnX19vcHRfX3BvaW50X2NvbG9yJwpwMjg3ClMncmVkJwpwMjg4CnNTJ19fb3B0X19jdXJzb3JfcmVjdCcKcDI4OQpTJ29uJwpwMjkwCnNTJ1VTRUREVCcKcDI5MQpTJzAnCnNTJ19fb3B0X19keGZzY2FsZScKcDI5MgpJMQpzUydfX29wdF9fcnN1YicKcDI5MwpTJzM2JwpwMjk0CnNTJ3ltYXgnCnAyOTUKUydtYWduZXRpYycKcDI5NgpzUydfX2F1dG9kaXNjX193ZmVuY2UnCnAyOTcKUycyNScKcDI5OApzUydfX29wdF9fZGVnJwpwMjk5ClMnMTEuMjUnCnAzMDAKc1MnX19vcHRfX3RpY2tzaXplJwpwMzAxClMnMzAnCnAzMDIKc1MnX19vcHRfX2Fycm93X2JveCcKcDMwMwpTJ2dyZXkyNScKcDMwNApzUydfX29wdF9fZ2RzdmlhZGlzdCcKcDMwNQpTJzEwMDAnCnAzMDYKc1MncG9zdHByb2Nfc3ViLTEnCnAzMDcKUycxJwpzUydfX29wdF9fY3Vyc29yX3NoYXBlJwpwMzA4ClMnYmlnJwpwMzA5CnNTJ05GJwpwMzEwCkkyMDAKc1MnX19vcHRfX3BvdmZpbmlzaCcKcDMxMQpTJ2ZpbmlzaCB7IGRpZmZ1c2UgMC41IH0nCnAzMTIKc1MnX19hdXRvZGlzY19fZGlzeicKcDMxMwpTJ2F1dG8nCnAzMTQKc1Mnc3RhYl9yZXMnCnAzMTUKUycxJwpzUydmXzAnCnAzMTYKRjUwMDAwMDAwMApzUydudW1iZXJfYW4nCnAzMTcKUycyJwpzUydfX29wdF9fZDNtY3MnCnAzMTgKUyc1MCcKcDMxOQpzUydfX29wdF9faHNpemUnCnAzMjAKUycxMDAnCnAzMjEKc1Mnem1heF9hcycKcDMyMgpTJ2F1dG9tYXRpYycKcDMyMwpzUydfX2F1dG9kaXNjX193YXJubGltaXQnCnAzMjQKUycxZS0zJwpwMzI1CnNTJ19fb3B0X19zZWxzaXplJwpwMzI2ClMnNScKc1MnX19vcHRfX2QzbDBzJwpwMzI3ClMnMC45JwpwMzI4CnNTJ3JlbW90ZV9wcmYnCnAzMjkKUyckSE9NRS8uYmFzaF9wcm9maWxlJwpwMzMwCnNTJ19fb3B0X19tdGljJwpwMzMxClMnNScKc1MnbWVtbGltaXQnCnAzMzIKUyc1MTInCnAzMzMKc1MnX19hdXRvZGlzY19feG1heCcKcDMzNApTJzQ1LjcnCnAzMzUKc1MnX19vcHRfX2xwd2lkdGgnCnAzMzYKSTAKc1MnX19vcHRfX3N1cmZoYW5kJwpwMzM3CkkxMDAwMApzUydfX29wdF9fZHhmY3RvbCcKcDMzOApTJzAuMDEnCnAzMzkKc1MnX19hdXRvZGlzY19fZWRnZW1vdmUnCnAzNDAKUycxMCcKcDM0MQpzUydfX29wdF9fbWIyY29tYicKcDM0MgpTJ29mZicKcDM0MwpzUydyc2hjbWRuZXcnCnAzNDQKUydyZW1vdGUnCnAzNDUKc1MnX19vcHRfX2ZpeGNvbG9yJwpwMzQ2ClMnYmxhY2snCnAzNDcKc1MnX19vcHRfX3NkYm9yZGVyJwpwMzQ4CkkzCnNTJ19fb3B0X19rb29yX2Zvcm1hdCcKcDM0OQpTJyUrMTAuMmYnCnAzNTAKc1MnX19vcHRfX2JnX2NvbG9yX2NvcnInCnAzNTEKUycyMicKcDM1MgpzUydfX29wdF9fc25hcGNvbG9yJwpwMzUzClMnI2Y3MCcKcDM1NApzUydfX29wdF9fZXhjdG9sJwpwMzU1CkkxMApzUydfX29wdF9fZHJzY2FsZScKcDM1NgpTJzEuMCcKcDM1NwpzUydfX29wdF9fZHhmYXJjJwpwMzU4Ckk1CnNTJ2NsZXZlbCcKcDM1OQpTJzUnCnNTJ2RvX3RvdWNoJwpwMzYwClMnMCcKc1MnX19vcHRfX2RyY3RvbCcKcDM2MQpJMTAKc1MnbXVsdGknCnAzNjIKUyc0JwpzUydfX29wdF9fbXNjYWxlJwpwMzYzClMnMScKc1MnX19vcHRfX2QzbWRpJwpwMzY0ClMnMTAwJwpwMzY1CnNTJ19fb3B0X19ocGdscGVuJwpwMzY2ClMnMzAwJwpwMzY3CnNTJ19fb3B0X19ibmR6MScKcDM2OApTJzAnCnNTJ2ZfYycKcDM2OQpGMTAwMDAwMDAwMApzUydfX2F1dG9kaXNjX19zbG9wZScKcDM3MApTJzAnCnNTJ19fb3B0X19wb3Z0cicKcDM3MQpTJzAnCnNTJ2RvX3NwYXInCnAzNzIKUycwJwpzUydfX2F1dG9kaXNjX19ub2JqNCcKcDM3MwpTJzMnCnNTJ19fb3B0X19pbXBjaXJjbicKcDM3NApJOApzUydfX29wdF9fYXJyb3dfY29sb3InCnAzNzUKUydyZWQnCnAzNzYKc1MnX19vcHRfX2Fycm93X2NoYWlyJwpwMzc3ClMnb24nCnAzNzgKc1MnZG9fcCcKcDM3OQpTJzAnCnNTJ29iYXRjaCcKcDM4MApTJzEnCnNTJ19fb3B0X19wb3ZjZW5sZycKcDM4MQpTJzEnCnNTJ19fYXV0b2Rpc2NfX3NjYW5wb2ludHMnCnAzODIKUyc1MDAwJwpwMzgzCnNTJ19fb3B0X19wb3ZsczQnCnAzODQKUydvZmYnCnAzODUKc1MnX19vcHRfX2R4ZmNubicKcDM4NgpJMApzUydfX29wdF9fcG92bHMyJwpwMzg3ClMnb2ZmJwpwMzg4CnNTJ19fb3B0X19wb3ZsczMnCnAzODkKUydvZmYnCnAzOTAKc1MncnVubGVuZ3RoJwpwMzkxClMnMTAwMCcKcDM5MgpzUydfX29wdF9fcG92bHMxJwpwMzkzClMnbGlnaHRfc291cmNlIHsgX19MSUdIVF9fIFdoaXRlIH0nCnAzOTQKc1MnX19vcHRfX3Jlc2VsZWN0JwpwMzk1CkkyMApzUydGX1NUQVJUJwpwMzk2CkYwCnNTJ19fb3B0X19keGZuYXJjJwpwMzk3ClMnNCcKc1MnX19vcHRfX2JuZHowJwpwMzk4ClMnMCcKc1MnX19vcHRfX2V4Y3N0YXJ0JwpwMzk5ClMnMCAwJwpwNDAwCnNTJ19fb3B0X19zZHRocmVzJwpwNDAxCkkzCnNTJ19fb3B0X19leHBfcHNsX3NjYWxlJwpwNDAyClMnNzIuMC8yNTQwMC4wJwpwNDAzCnNTJ19fb3B0X19kM2wwcCcKcDQwNApTJzAgMCAxIDAnCnA0MDUKc1MnX19vcHRfX21iM29wdCcKcDQwNgpTJ29mZicKcDQwNwpzUydfX2F1dG9kaXNjX19kaXN4JwpwNDA4ClMnYXV0bycKcDQwOQpzUydNQVRFUklBTCcKcDQxMApTJ0xMJwpwNDExCnNTJ19fb3B0X19wYmJveCcKcDQxMgpTJzJkIHBlcnBlbmRpY3VsYXInCnA0MTMKc1Mnem1pbl9hcycKcDQxNApTJ2F1dG9tYXRpYycKcDQxNQpzUydUSElDS05FU1MnCnA0MTYKUycwJwpzUydfX29wdF9fd3plcm8nCnA0MTcKUydvZmYnCnA0MTgKc1MnX19vcHRfX3BvdmJnJwpwNDE5ClMnYmFja2dyb3VuZCB7Y29sb3IgcmdiIDAuNX0nCnA0MjAKc1MneV9wZXInCnA0MjEKUydvZmYnCnA0MjIKc1MnX19vcHRfX2NvbnZpbmZvJwpwNDIzClMnb2ZmJwpwNDI0CnNTJ19fb3B0X192b3NuYXAnCnA0MjUKUycgPSBob3Jpem9udGFsJwpwNDI2CnNTJ3htaW4nCnA0MjcKUydtYWduZXRpYycKcDQyOApzUydfX29wdF9fZDNsMGEnCnA0MjkKUycwLjAnCnA0MzAKc1MndWlvbmx5JwpwNDMxClMnMCcKc1MnX19vcHRfX2ZsYXRyZWN0JwpwNDMyClMnb2ZmJwpwNDMzCnNTJ19fb3B0X19kM2wwZCcKcDQzNApTJzAuNScKcDQzNQpzUydOT1ZFUicKcDQzNgpTJzknCnNTJ2NsZWFudXBfaHcnCnA0MzcKUycxJwpzUydfX29wdF9fbWNvcHknCnA0MzgKUydtY29weShkeD0xMDAsZHk9MTAwLG54PTUsbnk9NSxEWD0xLERZPTEwKScKcDQzOQpzUydfX29wdF9fZDNtb2RlJwpwNDQwClMnZmlsbCcKcDQ0MQpzUydQR0EnCnA0NDIKUyczJwpzUydfX2F1dG9kaXNjX19zaW1ncmlkJwpwNDQzClMnMScKc1MnX19vcHRfX2JuZE4nCnA0NDQKUycxMCcKcDQ0NQpzUyd0ZW1wbGF0ZV9vcHMnCnA0NDYKUydOb25lJwpwNDQ3CnNTJ2RlbGF5JwpwNDQ4ClMnMCcKc1Mnb3B0aW1pc2VyJwpwNDQ5ClMndmFyaWF0b3InCnA0NTAKc1MnX19vcHRfX2dlcmJtdWx0aScKcDQ1MQpTJ29mZicKcDQ1MgpzUydyZW1vdGVfZGlyJwpwNDUzClMnbm9uZScKcDQ1NApzUydfX29wdF9fZXhwX2dicl9hcHAnCnA0NTUKUycwLjAwMScKcDQ1NgpzUydfX2F1dG9kaXNjX19kbWluYScKcDQ1NwpTJzJlLTA1XzJlLTA1XzVlLTA1JwpwNDU4CnNTJ19fb3B0X19tZGlnaXRzJwpwNDU5ClMnMCcKc1MnRl9FTkQnCnA0NjAKRjEwMDAwMDAwMDAKc1MnX19vcHRfX29ydGhvc25hcCcKcDQ2MQpTJzUnCnNTJ19fb3B0X19keGZ0b2wnCnA0NjIKUycxZS0zJwpwNDYzCnNTJ2FjY3VyYWN5JwpwNDY0ClMnMWUtNScKcDQ2NQpzUydfX2F1dG9kaXNjX19yb3VnaG5lc3MnCnA0NjYKUycwJwpzUydfX29wdF9fZHJkdmlhJwpwNDY3ClMnb24nCnA0NjgKc1MnX19vcHRfX2RycmVwJwpwNDY5CkkxCnNTJ19fb3B0X19kcm1heGknCnA0NzAKSTIwMApzUyd6X3BlcicKcDQ3MQpTJ29mZicKcDQ3MgpzUydfX29wdF9fcHNhdmUnCnA0NzMKUydzbWFydCcKcDQ3NApzUydfX29wdF9fYm5kdycKcDQ3NQpTJzUnCnNTJ01FVEFMJwpwNDc2ClMnRDInCnA0NzcKc1MnX19vcHRfX2d5bXNoaWZ0JwpwNDc4ClMnMCAwIDAnCnA0NzkKc1MnX19vcHRfX2V4cF9scCcKcDQ4MApTJ0xhbmRzY2FwZScKcDQ4MQpzUyd5bWF4X2FzJwpwNDgyClMnYXV0b21hdGljJwpwNDgzCnNTJ19fb3B0X19zdXJmd2FybicKcDQ4NApTJ29uJwpwNDg1CnNTJ2Vzd2l0Y2gnCnA0ODYKUydPTicKcDQ4NwpzUydfX29wdF9fZGlib3JkZXInCnA0ODgKSTgKc1MnX19vcHRfX21mc2l6ZScKcDQ4OQpTJzEyJwpwNDkwCnNTJ3NmaycKcDQ5MQpTJzEwMCcKcDQ5MgpzUydjaGtzdW0nCnA0OTMKSTUwCnNTJ0ZfTUlEJwpwNDk0CkYxMDAwMDAwMDAwMApzUydfX29wdF9fbWIzJwpwNDk1ClMncmVjdGFuZ2xlcycKcDQ5NgpzUydfX2F1dG9kaXNjX19yZWZpbmUnCnA0OTcKUycyLjUnCnA0OTgKc1MnX19vcHRfX2QzdHJhbnNwJwpwNDk5ClMnYWNjdXJhdGUgaHcnCnA1MDAKc1MnX19vcHRfX3BvdnByaW8nCnA1MDEKUydvbicKcDUwMgpzUydfX2F1dG9kaXNjX19hbWluJwpwNTAzClMnMzAnCnA1MDQKc1MnYXV0b3Jlc28nCnA1MDUKUycxJwpzUydfX2F1dG9kaXNjX195bWF4JwpwNTA2ClMnMzUuNycKcDUwNwpzUydfX29wdF9fcG92ZmluJwpwNTA4ClMnZmluaXNoIHsgZGlmZnVzZSAwLjYgfScKcDUwOQpzUyd5bWluX2FzJwpwNTEwClMnYXV0b21hdGljJwpwNTExCnNTJ19fb3B0X19tYmdlbm9wdCcKcDUxMgpTJ29mZicKcDUxMwpzUydfX29wdF9fYmdfY29sb3InCnA1MTQKUyd3aGl0ZScKcDUxNQpzUydfX29wdF9fYWNjdScKcDUxNgpGMC4wMQpzUydfX29wdF9faGJvcmRlcicKcDUxNwpTJzUnCnNTJ19fb3B0X19wb3ZjYW0nCnA1MTgKUydjYW1lcmEge2xvY2F0aW9uICBfX0VZRV9fIHNreSBfX1VQX18gbG9va19hdCBfX0NFTlRFUl9fIGFuZ2xlIDQwfScKcDUxOQpzUydvbG9nbGV2JwpwNTIwClMnMTAwJwpwNTIxCnNTJ19fb3B0X192ZHNuYXAnCnA1MjIKUycgPSBob3Jpem9udGFsJwpwNTIzCnNTJ19fb3B0X192ZnZkaXN0JwpwNTI0CkYxLjM5OTk5OTk5OTk5OTk5OTkKc1MnX19vcHRfX2RyZnJlcScKcDUyNQpTJzEuNScKcDUyNgpzUydfX29wdF9fcG92eGVubGcnCnA1MjcKUycwLjAwMScKcDUyOApzUydscGknCnA1MjkKUyc1MCcKcDUzMApzUydfX2F1dG9kaXNjX19mbXJ1bGUnCnA1MzEKUycxJwpzUydfX29wdF9fc2l6ZTNkJwpwNTMyClMnMScKc1MnX19vcHRfX3RoaWNrJwpwNTMzClMnMC4wMDEnCnA1MzQKcy4=' + +ORIGINS 0 +list [mat.mat(3,1, 0.0 ,0.0 ,0.0)] +END ORIGINS + +DISC 0 + lines [-3.630000000000000e+01,-2.824900253250004e+01,-2.019800506500009e+01,-1.483067342000011e+01,-1.244519268888902e+01,-1.125245232333346e+01,-1.064153652634160e+01,-1.035484851903130e+01,-1.006816051172100e+01,-9.781472504410701e+00,-9.494784497100399e+00,-9.208096489790099e+00,-8.921408482479800e+00,-8.706392476997074e+00,-8.491376471514350e+00,-8.276360466031624e+00,-8.061344460548900e+00,-7.846328455066175e+00,-7.631312449583450e+00,-7.416296444100725e+00,-7.201280438617999e+00,-6.986264433135275e+00,-6.771248427652550e+00,-6.556232422169825e+00,-6.341216416687100e+00,-6.126200411204374e+00,-5.911184405721650e+00,-5.696168400238925e+00,-5.481152394756200e+00,-5.266136389273475e+00,-5.051120383790749e+00,-4.836104378308025e+00,-4.416311224746514e+00,-3.530081233894436e+00,-1.979178749903300e+00,1.122626218078974e+00,2.673528702070111e+00,3.559758692922188e+00,3.979551846483700e+00,4.194567851966426e+00,4.409583857449151e+00,4.624599862931875e+00,4.839615868414601e+00,5.054631873897325e+00,5.269647879380051e+00,5.484663884862776e+00,5.699679890345500e+00,5.914695895828224e+00,6.129711901310952e+00,6.344727906793675e+00,6.559743912276399e+00,6.774759917759127e+00,6.989775923241851e+00,7.204791928724575e+00,7.419807934207302e+00,7.634823939690026e+00,7.849839945172750e+00,8.064855950655478e+00,8.387379958879565e+00,8.709903967103651e+00,9.032427975327739e+00,9.354951983551826e+00,9.677475991775912e+00,1.000000000000000e+01,1.032964980902143e+01,1.065929961804286e+01,1.147838798744992e+01,1.338959418273307e+01,1.530080037801622e+01,1.721200657329937e+01,1.803109494270643e+01,1.846472996180429e+01,1.889836498090214e+01,1.933200000000000e+01,1.966600000000000e+01,2.000000000000000e+01,2.033400000000000e+01,2.066800000000000e+01,2.127853658536585e+01,2.249960975609756e+01,2.481964878048780e+01,3.003973658536585e+01,3.786986829268292e+01,4.570000000000000e+01] + fixed [4.570000000000000e+01,-3.630000000000000e+01] + auto [1.065929961804286e+01,4.570000000000000e+01,-3.630000000000000e+01,1.000000000000000e+01,1.933200000000000e+01,2.066800000000000e+01,2.000000000000000e+01,-1.064153652634160e+01] +END DISC + +DISC 1 + lines [-3.630000000000000e+01,-2.388305417555252e+01,-1.767458126332878e+01,-1.394949751599454e+01,-1.208695564232742e+01,-1.111843386802051e+01,-1.064330997873788e+01,-1.039620321264077e+01,-1.014909644654365e+01,-9.901989680446533e+00,-9.654882914349418e+00,-9.407776148252303e+00,-9.160669382155188e+00,-8.913562616058073e+00,-8.666455849960958e+00,-8.419349083863843e+00,-8.172242317766727e+00,-7.925135551669610e+00,-7.678028785572495e+00,-7.430922019475380e+00,-7.261848968987880e+00,-7.092775918500379e+00,-6.923702868012880e+00,-6.754629817525379e+00,-6.585556767037879e+00,-6.416483716550379e+00,-6.247410666062879e+00,-6.078337615575379e+00,-5.909264565087879e+00,-5.740191514600379e+00,-5.571118464112879e+00,-5.402045413625379e+00,-5.232972363137879e+00,-5.063899312650379e+00,-4.894826262162879e+00,-4.725753211675379e+00,-4.387607110700379e+00,-3.711314908750378e+00,-2.358730504850378e+00,-1.682438302900378e+00,-1.344292201925377e+00,-1.006146100950377e+00,-6.679999999753772e-01,-3.768012514695964e-01,-8.560250296381561e-02,8.349138125125254e-02,3.757446906256263e-01,6.679980000000001e-01,1.277647413609454e+00,2.903379183234663e+00,3.716245068047268e+00,4.054939186719186e+00,4.224286246055145e+00,4.393633305391105e+00,4.562980364727064e+00,4.732327424063024e+00,4.901674483398983e+00,5.071021542734942e+00,5.240368602070901e+00,5.409715661406860e+00,5.579062720742820e+00,5.748409780078779e+00,5.917756839414738e+00,6.087103898750698e+00,6.256450958086657e+00,6.425798017422617e+00,6.595145076758576e+00,6.764492136094535e+00,7.007928533889977e+00,7.251364931685418e+00,7.494801329480860e+00,7.738237727276301e+00,7.981674125071743e+00,8.225110522867185e+00,8.468546920662627e+00,8.711983318458067e+00,8.955419716253509e+00,9.198856114048951e+00,9.564010710742114e+00,9.929165307435277e+00,1.029431990412844e+01,1.065947450082160e+01,1.133624546025885e+01,1.268978737913336e+01,1.524647767034077e+01,2.035985825275558e+01,2.802992912637779e+01,3.570000000000000e+01] + fixed [] + auto [3.570000000000000e+01,-8.560250296381561e-02,-3.630000000000000e+01,-1.064330997873788e+01,1.065947450082160e+01,-6.679999999753772e-01,6.679980000000001e-01,8.349138125125254e-02] +END DISC + +DISC 2 + lines [-2.630000000000000e+01,-1.337182266471656e+01,-6.907733997074832e+00,-3.675689663253973e+00,-1.935358098888891e+00,-1.095198033333332e+00,-6.679980000000001e-01,-4.453320000000001e-01,-2.226660000000000e-01,0.000000000000000e+00,2.226660000000000e-01,4.453320000000001e-01,6.679980000000001e-01,8.807837142857144e-01,1.093569428571429e+00,1.306355142857143e+00,1.519140857142857e+00,1.731926571428572e+00,1.944712285714286e+00,2.157498000000000e+00,2.370283714285715e+00,2.583069428571429e+00,2.795855142857143e+00,3.008640857142858e+00,3.221426571428571e+00,3.434212285714286e+00,3.646998000000000e+00,3.859783714285714e+00,4.072569428571429e+00,4.285355142857143e+00,4.498140857142857e+00,4.710926571428572e+00,4.923712285714286e+00,5.136498000000000e+00,5.349283714285715e+00,5.562069428571429e+00,5.774855142857143e+00,5.987640857142857e+00,6.200426571428571e+00,6.413212285714286e+00,6.625998000000000e+00,6.838783714285714e+00,7.051569428571429e+00,7.264355142857143e+00,7.477140857142857e+00,7.689926571428572e+00,7.902712285714286e+00,8.115498000000001e+00,8.328283714285716e+00,8.541069428571429e+00,8.753855142857145e+00,8.966640857142858e+00,9.179426571428573e+00,9.392212285714287e+00,9.604998000000002e+00,9.817783714285715e+00,1.003056942857143e+01,1.024335514285714e+01,1.045614085714286e+01,1.066892657142857e+01,1.088171228571429e+01,1.109449800000000e+01,1.130728371428571e+01,1.152006942857143e+01,1.173285514285714e+01,1.194564085714286e+01,1.215842657142857e+01,1.237121228571429e+01,1.258399800000000e+01,1.279678371428572e+01,1.300956942857143e+01,1.322235514285715e+01,1.343514085714286e+01,1.364792657142857e+01,1.386071228571429e+01,1.407349800000000e+01,1.428628371428572e+01,1.449906942857143e+01,1.471185514285714e+01,1.492464085714286e+01,1.513742657142857e+01,1.535021228571429e+01,1.556299800000000e+01,1.577578371428572e+01,1.598856942857143e+01,1.620135514285714e+01,1.641414085714286e+01,1.662692657142857e+01,1.683971228571429e+01,1.705249800000000e+01,1.726528371428572e+01,1.747806942857143e+01,1.769085514285715e+01,1.790364085714286e+01,1.811642657142857e+01,1.832921228571429e+01,1.854199800000000e+01,1.875478371428571e+01,1.896756942857143e+01,1.918035514285715e+01,1.939314085714286e+01,1.960592657142857e+01,1.981871228571429e+01,2.003149800000000e+01,2.024428371428572e+01,2.045706942857143e+01,2.066985514285714e+01,2.088264085714286e+01,2.109542657142857e+01,2.130821228571429e+01,2.152099800000000e+01,2.173378371428572e+01,2.194656942857143e+01,2.215935514285714e+01,2.237214085714286e+01,2.258492657142857e+01,2.279771228571429e+01,2.301049800000000e+01,2.322328371428572e+01,2.343606942857143e+01,2.364885514285714e+01,2.386164085714286e+01,2.407442657142857e+01,2.428721228571429e+01,2.449999800000000e+01,2.469999800000000e+01,2.489999800000000e+01,2.509999800000000e+01,2.529999800000000e+01,2.549999800000000e+01,2.571278371428572e+01,2.592556942857143e+01,2.613835514285714e+01,2.635114085714286e+01,2.656392657142857e+01,2.677671228571429e+01,2.698949800000000e+01,2.720228371428572e+01,2.741506942857143e+01,2.762785514285714e+01,2.784064085714286e+01,2.805342657142857e+01,2.826621228571429e+01,2.847899800000000e+01,2.869178371428572e+01,2.890456942857143e+01,2.911735514285715e+01,2.933014085714286e+01,2.954292657142857e+01,2.975571228571429e+01,2.996849800000000e+01,3.018128371428572e+01,3.039406942857143e+01,3.060685514285715e+01,3.081964085714286e+01,3.103242657142857e+01,3.124521228571429e+01,3.145799800000000e+01,3.167078371428572e+01,3.188356942857143e+01,3.209635514285715e+01,3.230914085714286e+01,3.252192657142857e+01,3.273471228571429e+01,3.294749800000000e+01,3.316028371428572e+01,3.337306942857143e+01,3.358585514285714e+01,3.379864085714286e+01,3.401142657142857e+01,3.422421228571429e+01,3.443699800000000e+01,3.464978371428572e+01,3.486256942857143e+01,3.507535514285715e+01,3.528814085714286e+01,3.550092657142858e+01,3.571371228571429e+01,3.592649800000000e+01,3.613928371428572e+01,3.635206942857143e+01,3.656485514285715e+01,3.677764085714286e+01,3.699042657142857e+01,3.720321228571429e+01,3.741599800000000e+01,3.762878371428572e+01,3.784156942857143e+01,3.805435514285715e+01,3.826714085714286e+01,3.847992657142858e+01,3.869271228571429e+01,3.890549800000001e+01,3.911828371428572e+01,3.933106942857143e+01,3.954385514285715e+01,3.975664085714286e+01,3.996942657142858e+01,4.018221228571429e+01,4.039499800000000e+01,4.060778371428572e+01,4.082056942857143e+01,4.103335514285715e+01,4.124614085714286e+01,4.145892657142858e+01,4.167171228571429e+01,4.188449800000001e+01,4.209728371428572e+01,4.231006942857144e+01,4.252285514285715e+01,4.273564085714286e+01,4.294842657142858e+01,4.316121228571429e+01,4.337399800000000e+01,4.358678371428572e+01,4.379956942857143e+01,4.401235514285715e+01,4.422514085714286e+01,4.443792657142858e+01,4.465071228571429e+01,4.486349800000001e+01,4.507628371428572e+01,4.528906942857144e+01,4.550185514285715e+01,4.571464085714287e+01,4.592742657142858e+01,4.614021228571429e+01,4.635299800000001e+01,4.656578371428571e+01,4.677856942857143e+01,4.699135514285715e+01,4.720414085714286e+01,4.741692657142858e+01,4.762971228571429e+01,4.784249800000001e+01,4.805528371428572e+01,4.826806942857144e+01,4.848085514285715e+01,4.869364085714287e+01,4.890642657142858e+01,4.911921228571429e+01,4.933199800000001e+01,4.955466533333334e+01,4.977733266666667e+01,5.000000000000000e+01,5.033400000000000e+01,5.066800000000001e+01,5.126400000000000e+01,5.248580000000000e+01,5.480722000000000e+01,6.003041500000000e+01,6.786520750000000e+01,7.570000000000000e+01] + fixed [7.570000000000000e+01] + auto [0.000000000000000e+00,-6.679980000000001e-01,4.933199800000001e+01,-2.630000000000000e+01,5.000000000000000e+01,7.570000000000000e+01,2.549999800000000e+01,5.066800000000001e+01,2.449999800000000e+01,6.679980000000001e-01] +END DISC + +LAYER 1 + texts [stack_text(text='name @@initial',st=STACK), stack_text(text='conductor',st=STACK)] + color stack_color('black') + fill stack_color('black') + pattern 'No Fill' + opaque 0.0 + width 1 + acadcolor 61 + vis 1 + autodisc 1 + lock 0 + arrow stack_arrow([0.0, 0.0, 0.0, 0.0, 0.0, 1000.0]) +END LAYER + +LAYER 2 + texts [stack_text(text='name #001',st=STACK), stack_text(text='conductor name Copper sigma 5.600e+07 sides auto rough 0 prio 200 automodel auto',st=STACK)] + color stack_color('#08C') + fill stack_color('#08C') + pattern 'No Fill' + opaque 0.0 + width 1 + acadcolor 61 + vis 1 + autodisc 0 + lock 0 + arrow stack_arrow([0.0, 0.0, 0.0, 0.0, 0.0, 50.0]) +END LAYER + +LAYER 3 + texts [stack_text(text='name #002',st=STACK), stack_text(text='conductor name Copper sigma 5.600e+07 sides auto rough 0 prio 200 automodel auto',st=STACK)] + color stack_color('#08C') + fill stack_color('#08C') + pattern 'No Fill' + opaque 0.0 + width 1 + acadcolor 61 + vis 1 + autodisc 0 + lock 0 + arrow stack_arrow([0.0, 10.0, 0.0, 0.0, 0.0, 0.0]) +END LAYER + +LAYER 4 + texts [stack_text(text='name @@currents',st=STACK)] + color stack_color('green') + fill stack_color('green') + pattern 'No Fill' + opaque 0.0 + width 1 + acadcolor 61 + vis 1 + autodisc 1 + lock 0 + arrow stack_arrow([0.0, 0.0, 0.0, 0.0, 0.0, 1000.0]) +END LAYER + +LAYER 5 + texts [stack_text(text='name @@voltages',st=STACK)] + color stack_color('maroon') + fill stack_color('maroon') + pattern 'No Fill' + opaque 0.0 + width 1 + acadcolor 61 + vis 1 + autodisc 1 + lock 0 + arrow stack_arrow([0.0, 0.0, 0.0, 0.0, 0.0, 1000.0]) +END LAYER + +LAYER 6 + texts [stack_text(text='name @@loads',st=STACK)] + color stack_color('green') + fill stack_color('green') + pattern 'No Fill' + opaque 0.0 + width 1 + acadcolor 61 + vis 1 + autodisc 1 + lock 0 + arrow stack_arrow([0.0, 0.0, 0.0, 0.0, 0.0, 1000.0]) +END LAYER + +LAYER 7 + texts [stack_text(text='name @@excite',st=STACK)] + color stack_color('green') + fill stack_color('green') + pattern 'No Fill' + opaque 0.0 + width 1 + acadcolor 61 + vis 1 + autodisc 1 + lock 0 + arrow stack_arrow([0.0, 0.0, 0.0, 0.0, 0.0, 1000.0]) +END LAYER + +LAYER 8 + texts [stack_text(text='name #003',st=STACK)] + color stack_color('#08C') + fill stack_color('#08C') + pattern 'No Fill' + opaque 0.0 + width 1 + acadcolor 61 + vis 1 + autodisc 0 + lock 0 + arrow stack_arrow([0.0, 0.0, 0.0, 0.0, 24.5, 25.5]) +END LAYER + +LAYER 9 + texts [stack_text(text='name @@air',st=STACK)] + color stack_color('red') + fill stack_color('red') + pattern 'No Fill' + opaque 0.0 + width 1 + acadcolor 61 + vis 1 + autodisc 1 + lock 0 + arrow stack_arrow([0.0, 0.0, 0.0, 0.0, 0.0, 1000.0]) +END LAYER + +CURRENT_LAYER 3 + +GANLIB 4 + entry 'lpport' + texts [] + para {'WE': 1.0, 'p1': 1, 'WC': 1.0, 'p1e': 'On', 'ED': 0.0, 'lpport': None, 'DL': 0.0, 'WV': 1.0, 'R': 50.0, 'FE': 'default', 'Rcopy': 'Off', 'd0': '0.2*w'} + layer_ 8 + objects (term('20-0.668'), -0.66800000000000004, 0.0, term('20+0.668'), 0.66800000000000004, 0.0) + arrow stack_arrow([0.0, 0.0, 0.0, 0.0, 25.5, 24.5]) + rad 100 + show 0 +END GANLIB + +LIBRARY 2 + element 'helix' + texts [] + para {'__nice__': 4000.0, 'dh': 20.0, 'hres': 10.0, 'cres': 30.0, 'Helix Parameters': 0, 'dc': 1.3, 'phi0': 0.0, 'nt': 8.0} + layer_ 2 + objects (0.0, 0.0, 0.0) + arrow stack_arrow([0.0, 0.0, 0.0, 0.0, 0.0, 50.0]) +END LIBRARY + +POLY 16 + texts [] + layer_ 3 + objects [stack_point([0.0, 0.0, 0.0],radius=0.66800000000000004)] + nbin 'eJxrYEpOy6yIzyvNjS/ITM7OSeVKLCpKrIxPzs8rLikqTS7JL+IqZNTwZvRmbgtlTAmVYMABOkqCCpkyQCpbQeo4jnubdzomPLUHiTN7M7g7qEDUuTuYQBjt7YUsegCSPh3h' + arrow stack_arrow([10.0, 20.0, 0.0, 0.0, 0.0, 0.0]) + rad 100.0 +END POLY + +POLY 17 + texts [] + layer_ 3 + objects [stack_point([0.0, 0.0, 50.0],radius=0.66800000000000004)] + nbin 'eJxrYEpOy6yIzyvNjS/ITM7OSeVKLCpKrIxPzs8rLikqTS7JL+IqZNTwZvRmbgtlTAmVYMAKPB06SoIKmTJAKltB6jiOe5t3OiY8tQeJM3szuDuoQFS6O5hAGO3thSx6AK/2Hmo=' + arrow stack_arrow([10.0, 20.0, 0.0, 0.0, 0.0, 0.0]) + rad 100.0 +END POLY + +SURFACE 254 + texts [] + layer_ 3 + triangles [19.527652670167384,-0.47234732983261374,0.0,19.579278141395989,-0.51471525913646421,24.500000000449994,19.561347545649014,-0.49999999950000001,24.500000000449997,20.661453929327891,0.066463370903274435,24.500000000452783,20.65516456730936,0.13032033510677382,24.500000000450729,20.500000000499998,5.0000000000000003e-10,24.500000000449997,20.255632532819881,-0.61715152771753945,24.500000000449994,20.19422955593933,-0.63577791711787268,24.500000000449994,20.255632532819881,-0.61715152771753945,0.0,20.000000000499998,-0.66799999995075443,25.500000000545079,20.063856964200895,-0.66171063798172591,25.500000000547136,20.0,-0.66800000000000004,50.0,19.80577044406067,0.63577791711787268,24.500000000449994,19.744367467180119,0.61715152771753945,24.500000000449994,20.000000000499998,0.50000000050000004,24.500000000449997,20.65516456730936,-0.13032033510677399,50.0,20.635777917117114,-0.19422955594183669,25.500000000549999,20.649382210829025,-0.14938220982902686,25.500000000549999,19.382848472282461,0.25563253281988008,24.500000000449994,19.363461822090976,0.19172331198732373,24.500000000449994,19.500000000499998,5.0000000000000003e-10,24.500000000449997,20.635777917117874,0.19422955593933028,24.500000000449994,20.617151527717539,0.25563253281988024,24.500000000449994,20.500000000499998,5.0000000000000003e-10,24.500000000449997,20.255632532819881,0.61715152771753945,0.0,20.130320335106774,0.65516456730935801,0.0,20.191723311987325,0.63653817790902478,24.500000000449994,19.527652670167384,-0.47234732983261374,50.0,19.485284740861871,-0.4207218586019853,25.500000000549996,19.500000000499998,-0.4386524543509836,25.500000000549999,20.636538177909024,-0.19172331198732395,24.500000000449994,20.649382210829025,-0.14938220982902686,24.500000000449997,20.500000000499998,5.0000000000000003e-10,24.500000000449997,19.527652670167384,-0.47234732983261374,50.0,19.444578298981899,-0.37112091565709415,50.0,19.485284740861871,-0.4207218586019853,25.500000000549996,19.527652670167384,0.47234732983261379,0.0,19.485284740863534,0.42072185860400985,24.500000000449994,19.500000000499998,0.43865245435098366,24.500000000449997,20.555421701018101,0.37112091565709421,25.500000000550006,20.514715259138129,0.4207218586019853,25.500000000550006,20.555421701018101,0.37112091565709421,50.0,19.744367467180119,-0.61715152771753945,50.0,19.628879084342906,-0.55542170101810029,50.0,19.68546839193187,-0.5856693161001465,25.500000000550006,20.472347329832616,0.47234732983261374,50.0,20.555421701018101,0.37112091565709421,50.0,20.514715259138129,0.4207218586019853,25.500000000550006,19.869679664893226,0.65516456730935801,50.0,19.869679664893226,-0.6551645673093579,50.0,20.0,0.66800000000000004,50.0,19.744367467180119,-0.61715152771753945,0.0,19.628879084342906,-0.55542170101810029,0.0,19.744367467180119,0.61715152771753945,0.0,19.364222082882886,0.1942295559418365,25.500000000549999,19.382848472282461,0.25563253281988008,25.500000000549999,19.500000000499998,5.0000000000000003e-10,25.500000000549999,20.65516456730936,0.13032033510677382,24.500000000450729,20.661453929327891,0.066463370903274435,24.500000000452783,20.65516456730936,0.13032033510677382,0.0,19.850617790170975,0.64938221082902414,25.500000000549999,19.869679664893226,0.65516456730935801,25.500000000549267,20.000000000499998,0.50000000050000004,25.500000000549999,20.65516456730936,-0.13032033510677399,24.500000000450729,20.661710637981468,-0.063856964203499691,24.500000000452864,20.500000000499998,5.0000000000000003e-10,24.500000000449997,20.65516456730936,-0.13032033510677399,0.0,20.617151527717539,-0.25563253281988041,0.0,20.65516456730936,0.13032033510677382,0.0,19.628879084342906,-0.55542170101810029,25.500000000549996,19.577253613112276,-0.51305377171258837,25.500000000549996,20.000000000499998,-0.49999999950000001,25.500000000549999,20.555421701018101,0.37112091565709421,0.0,20.555421701018101,-0.37112091565709426,0.0,20.472347329832616,0.47234732983261374,0.0,20.667999999999999,-1.636128123660864e-16,50.0,20.661453929327632,-0.066463370905881086,25.500000000547217,20.667999999950755,5.0000000000000003e-10,25.500000000545079,20.312221840411155,0.58690391263425867,24.500000000449994,20.255632532819881,0.61715152771753945,24.500000000449994,20.000000000499998,0.50000000050000004,24.500000000449997,19.444578298981899,-0.37112091565709415,24.500000000449994,19.486946228285749,-0.4227463868856981,24.500000000449994,19.500000000499998,5.0000000000000003e-10,24.500000000449997,19.527652670167384,0.47234732983261379,50.0,19.628879084342906,0.5554217010181004,50.0,19.579278141398014,0.51471525913812577,25.500000000549999,19.332000000049245,5.0000000000000003e-10,24.500000000454918,19.338289362018532,0.063856964203499608,24.500000000452864,19.332000000000001,8.1806406183043198e-17,0.0,20.617151527717539,-0.25563253281988041,0.0,20.65516456730936,-0.13032033510677399,0.0,20.636538177909024,-0.19172331198732395,24.500000000449994,20.255632532819881,0.61715152771753945,0.0,20.191723311987325,0.63653817790902478,24.500000000449994,20.255632532819881,0.61715152771753945,24.500000000449994,20.555421701018101,-0.37112091565709426,25.500000000549999,20.513053771712588,-0.42274638688772276,25.500000000549999,20.500000000499998,5.0000000000000003e-10,25.500000000549999,20.472347329832612,-0.4723473298326139,24.500000000449994,20.438652454350983,-0.49999999950000001,24.500000000449997,20.422746386885699,-0.51305377171424993,24.500000000450001,20.65516456730936,0.13032033510677382,50.0,20.667999999999999,-1.636128123660864e-16,50.0,20.661710637981727,0.063856964200893027,25.500000000547136,20.000000000499998,-0.49999999950000001,24.500000000449997,20.438652454350983,-0.49999999950000001,24.500000000449997,20.472347329832612,-0.4723473298326139,24.500000000449994,19.350617789636463,0.14938221136353533,24.500000000449997,19.34483543269064,0.1303203351067739,0.0,19.34483543269064,0.1303203351067739,24.500000000450729,20.438652454350983,-0.49999999950000001,25.500000000549999,20.420721858601986,-0.51471525913812588,25.500000000549999,20.000000000499998,-0.49999999950000001,25.500000000549999,20.255632532819881,0.61715152771753945,25.500000000549999,20.194229555941838,0.6357779171171124,25.500000000549999,20.255632532819881,0.61715152771753945,50.0,20.0,-0.66800000000000004,0.0,20.066463370903275,-0.66145392932788882,24.500000000452776,20.000000000499998,-0.66799999995075443,24.500000000454918,19.444578298981899,0.37112091565709426,50.0,19.486946228287412,0.4227463868877227,25.500000000549996,19.444578298981899,0.37112091565709426,25.500000000549999,20.65516456730936,0.13032033510677382,50.0,20.617151527717539,-0.25563253281988041,50.0,20.65516456730936,-0.13032033510677399,50.0,20.65516456730936,0.13032033510677382,24.500000000450729,20.649382210596279,0.14938221059628243,24.500000000449997,20.500000000499998,5.0000000000000003e-10,24.500000000449997,20.130320335106774,0.65516456730935801,0.0,20.0,0.66800000000000004,0.0,20.063856964203499,0.66171063798146923,24.500000000452864,19.850617789403717,-0.64938221059627965,24.500000000449997,19.869679664893226,-0.6551645673093579,0.0,19.869679664893226,-0.6551645673093579,24.500000000450722,20.555421701018101,-0.37112091565709426,50.0,20.513053771712588,-0.42274638688772276,25.500000000549999,20.555421701018101,-0.37112091565709426,25.500000000549999,20.420721858601986,-0.51471525913812588,25.500000000549999,20.371120915657094,-0.5554217010181004,25.500000000549999,20.000000000499998,-0.49999999950000001,25.500000000549999,19.869679664893226,0.65516456730935801,24.500000000450722,19.933536629096725,0.66145392932788882,24.500000000452776,19.869679664893226,0.65516456730935801,0.0,20.130320335106774,-0.65516456730935801,50.0,20.0,-0.66800000000000004,50.0,20.063856964200895,-0.66171063798172591,25.500000000547136,19.34483543269064,0.1303203351067739,25.500000000549271,19.350617789636463,0.14938221136353533,25.500000000549999,19.500000000499998,5.0000000000000003e-10,25.500000000549999,19.869679664893226,-0.6551645673093579,0.0,19.744367467180119,-0.61715152771753945,0.0,19.869679664893226,0.65516456730935801,0.0,19.744367467180119,-0.61715152771753945,25.500000000549999,19.805770444058162,-0.6357779171171124,25.500000000549999,19.744367467180119,-0.61715152771753945,50.0,19.350617789403717,-0.14938221059627974,25.500000000549999,19.363461822090215,-0.19172331198481735,25.500000000549999,19.34483543269064,-0.13032033510677374,50.0,20.250000000499998,-0.24999999949999999,24.500000000449997,20.000000000499998,-0.49999999950000001,24.500000000449997,20.472347329832612,-0.4723473298326139,24.500000000449994,20.130320335106774,0.65516456730935801,25.500000000549267,20.066463370905879,0.66145392932763214,25.500000000547214,20.130320335106774,0.65516456730935801,50.0,20.555421701018101,0.37112091565709421,25.500000000550006,20.586903912635492,0.31222184040884471,25.500000000550006,20.500000000499998,5.0000000000000003e-10,25.500000000549999,20.472347329832612,0.47234732983261535,25.500000000549999,20.500000000499998,0.43865245313248435,25.500000000549999,20.250000000499998,0.25000000049999999,25.500000000549999,20.43865245313248,0.50000000050000004,24.500000000449997,20.420721858604011,0.51471525913646421,24.500000000449994,20.000000000499998,0.50000000050000004,24.500000000449997,20.555421701018101,0.37112091565709421,50.0,20.555421701018101,-0.37112091565709426,50.0,20.617151527717539,0.25563253281988024,50.0,19.869679664893226,0.65516456730935801,25.500000000549267,19.936143035799105,0.66171063798172591,25.500000000547129,20.000000000499998,0.50000000050000004,25.500000000549999,19.869679664893226,-0.6551645673093579,0.0,19.936143035796501,-0.66171063798146912,24.500000000452864,19.869679664893226,-0.6551645673093579,24.500000000450722,19.628879084342906,-0.55542170101810029,24.500000000449994,19.579278141395989,-0.51471525913646421,24.500000000449994,19.628879084342906,-0.55542170101810029,0.0,20.130320335106774,0.65516456730935801,0.0,20.0,-0.66800000000000004,0.0,20.0,0.66800000000000004,0.0,20.422746386885699,-0.51305377171424993,24.500000000450001,20.438652454350983,-0.49999999950000001,24.500000000449997,20.000000000499998,-0.49999999950000001,24.500000000449997,20.066463370903275,-0.66145392932788882,24.500000000452776,20.130320335106774,-0.65516456730935801,24.500000000450722,20.000000000499998,-0.49999999950000001,24.500000000449997,19.34483543269064,0.1303203351067739,50.0,19.364222082882886,0.1942295559418365,25.500000000549999,19.350617789636463,0.14938221136353533,25.500000000549999,20.472347329832612,0.47234732983261535,25.500000000549999,20.422746386887724,0.51305377171258837,25.500000000549999,20.472347329832616,0.47234732983261374,50.0,20.130320335106774,0.65516456730935801,50.0,20.130320335106774,-0.65516456730935801,50.0,20.255632532819881,0.61715152771753945,50.0,20.667999999999999,-1.636128123660864e-16,24.500000000454918,20.661453929327891,0.066463370903274435,24.500000000452783,20.500000000499998,5.0000000000000003e-10,24.500000000449997,19.579278141395989,-0.51471525913646421,24.500000000449994,19.628879084342906,-0.55542170101810029,24.500000000449994,20.000000000499998,-0.49999999950000001,24.500000000449997,20.149382211363534,-0.64938221036353616,25.500000000549999,20.130320335106774,-0.65516456730935801,25.500000000549271,20.000000000499998,-0.49999999950000001,25.500000000549999,19.34483543269064,0.1303203351067739,0.0,19.332000000000001,8.1806406183043198e-17,0.0,19.338289362018532,0.063856964203499608,24.500000000452864,20.371120915657094,0.55542170101810029,50.0,20.472347329832616,0.47234732983261374,50.0,20.422746386887724,0.51305377171258837,25.500000000549999,19.527652670167384,0.47234732983261379,25.500000000550006,19.486946228287412,0.4227463868877227,25.500000000549996,19.527652670167384,0.47234732983261379,50.0,20.149382210596279,0.64938221059628054,24.500000000449997,20.130320335106774,0.65516456730935801,0.0,20.130320335106774,0.65516456730935801,24.500000000450722,20.500000000499998,5.0000000000000003e-10,25.500000000549999,20.500000000499998,-0.43865245313248163,25.500000000549999,20.472347330283366,-0.47234732928336809,25.500000000549999,20.371120915657094,0.55542170101810029,25.500000000549999,20.422746386887724,0.51305377171258837,25.500000000549999,20.000000000499998,0.50000000050000004,25.500000000549999,19.744367467180119,-0.61715152771753945,50.0,19.68546839193187,-0.5856693161001465,25.500000000550006,19.744367467180119,-0.61715152771753945,25.500000000549999,20.617151527717539,-0.25563253281988041,0.0,20.636538177909024,-0.19172331198732395,24.500000000449994,20.617151527717539,-0.25563253281988041,24.500000000449994,20.500000000499998,5.0000000000000003e-10,24.500000000449997,20.250000000499998,0.25000000049999999,24.500000000449997,20.000000000499998,5.0000000000000003e-10,24.500000000449997,19.332000000000001,8.1806406183043198e-17,25.500000000545082,19.338546070672368,0.066463370905881003,25.500000000547217,19.500000000499998,5.0000000000000003e-10,25.500000000549999,20.472347330283366,-0.47234732928336809,25.500000000549999,20.438652454350983,-0.49999999950000001,25.500000000549999,20.250000000499998,-0.24999999949999999,25.500000000549999,20.617151527717539,0.25563253281988024,0.0,20.585669316101381,0.31453160806581998,24.500000000449994,20.617151527717539,0.25563253281988024,24.500000000449994,20.617151527717539,0.25563253281988024,24.500000000449994,20.635777917117874,0.19422955593933028,24.500000000449994,20.617151527717539,0.25563253281988024,0.0,20.617151527717539,0.25563253281988024,0.0,20.555421701018101,-0.37112091565709426,0.0,20.555421701018101,0.37112091565709421,0.0,20.31453160806813,0.5856693161001465,25.500000000549999,20.371120915657094,0.55542170101810029,25.500000000549999,20.000000000499998,0.50000000050000004,25.500000000549999,20.617151527717539,0.25563253281988024,50.0,20.636538177909785,0.19172331198481751,25.500000000550006,20.617151527717539,0.25563253281988024,25.500000000550006,20.472347329832616,0.47234732983261374,0.0,20.420721858604011,0.51471525913646421,24.500000000449994,20.43865245313248,0.50000000050000004,24.500000000449997,20.371120915657094,-0.5554217010181004,24.500000000449994,20.31453160806582,-0.58566931610138107,24.500000000449994,20.371120915657094,-0.5554217010181004,0.0,20.255632532819881,-0.61715152771753945,24.500000000449994,20.31453160806582,-0.58566931610138107,24.500000000449994,20.000000000499998,-0.49999999950000001,24.500000000449997,19.527652670167384,0.47234732983261379,50.0,19.527652670167384,-0.47234732983261374,50.0,19.628879084342906,0.5554217010181004,50.0,20.472347329832616,0.47234732983261374,24.500000000449994,20.500000000499998,0.43865245313248435,24.500000000449997,20.513053771714251,0.42274638688569816,24.500000000449994,20.667999999999999,-1.636128123660864e-16,0.0,20.65516456730936,0.13032033510677382,0.0,20.661453929327891,0.066463370903274435,24.500000000452783,19.500000000499998,5.0000000000000003e-10,25.500000000549999,20.000000000499998,5.0000000000000003e-10,25.500000000549999,19.750000000499998,-0.24999999949999999,25.500000000549999,20.255632532819881,-0.61715152771753945,0.0,20.130320335106774,-0.65516456730935801,0.0,20.255632532819881,0.61715152771753945,0.0,20.371120915657094,-0.5554217010181004,50.0,20.255632532819881,-0.61715152771753945,50.0,20.312221840408846,-0.58690391263549335,25.500000000549999,19.34483543269064,0.1303203351067739,24.500000000450729,19.338289362018532,0.063856964203499608,24.500000000452864,19.500000000499998,5.0000000000000003e-10,24.500000000449997,20.472347329832616,0.47234732983261374,0.0,20.371120915657094,-0.5554217010181004,0.0,20.371120915657094,0.55542170101810029,0.0,20.65516456730936,0.13032033510677382,0.0,20.617151527717539,0.25563253281988024,0.0,20.635777917117874,0.19422955593933028,24.500000000449994,20.000000000499998,-0.49999999950000001,25.500000000549999,20.000000000499998,5.0000000000000003e-10,25.500000000549999,20.250000000499998,-0.24999999949999999,25.500000000549999,20.000000000499998,0.66799999995075454,24.500000000454918,19.933536629096725,0.66145392932788882,24.500000000452776,20.000000000499998,0.50000000050000004,24.500000000449997,20.000000000499998,0.50000000050000004,25.500000000549999,20.250000000499998,0.25000000049999999,25.500000000549999,20.000000000499998,5.0000000000000003e-10,25.500000000549999,19.577253613114301,0.51305377171424993,24.500000000449994,19.56134754686752,0.50000000050000004,24.500000000449997,20.000000000499998,0.50000000050000004,24.500000000449997,19.364222082882126,-0.19422955593933008,24.500000000449994,19.382848472282461,-0.25563253281987991,24.500000000449994,19.500000000499998,5.0000000000000003e-10,24.500000000449997,19.444578298981899,0.37112091565709426,24.500000000449994,19.413096087365741,0.31222184041115442,24.500000000449994,19.500000000499998,5.0000000000000003e-10,24.500000000449997,19.850617790170975,0.64938221082902414,24.500000000449997,19.80577044406067,0.63577791711787268,24.500000000449994,20.000000000499998,0.50000000050000004,24.500000000449997,20.617151527717539,-0.25563253281988041,25.500000000550006,20.585669316100148,-0.31453160806812985,25.500000000550006,20.500000000499998,5.0000000000000003e-10,25.500000000549999,19.527652670167384,0.47234732983261379,0.0,19.500000000499998,0.43865245435098366,24.500000000449997,19.52765267071663,0.47234733028336812,24.500000000449997,20.65516456730936,0.13032033510677382,0.0,20.635777917117874,0.19422955593933028,24.500000000449994,20.649382210596279,0.14938221059628243,24.500000000449997,20.555421701018101,-0.37112091565709426,0.0,20.617151527717539,-0.25563253281988041,0.0,20.586903912634259,-0.31222184041115458,24.500000000449994,20.255632532819881,0.61715152771753945,24.500000000449994,20.312221840411155,0.58690391263425867,24.500000000449994,20.255632532819881,0.61715152771753945,0.0,20.000000000499998,-0.49999999950000001,24.500000000449997,20.250000000499998,-0.24999999949999999,24.500000000449997,20.000000000499998,5.0000000000000003e-10,24.500000000449997,19.34483543269064,-0.13032033510677374,0.0,19.364222082882126,-0.19422955593933008,24.500000000449994,19.350617789403717,-0.14938221059627974,24.500000000449997,19.869679664893226,-0.6551645673093579,0.0,20.0,-0.66800000000000004,0.0,19.936143035796501,-0.66171063798146912,24.500000000452864,19.808276688012675,-0.63653817790902478,24.500000000449994,19.850617789403717,-0.64938221059627965,24.500000000449997,20.000000000499998,-0.49999999950000001,24.500000000449997,20.472347329832612,-0.4723473298326139,24.500000000449994,20.500000000499998,-0.43865245313248163,24.500000000449997,20.250000000499998,-0.24999999949999999,24.500000000449997,20.500000000499998,5.0000000000000003e-10,25.500000000549999,20.250000000499998,-0.24999999949999999,25.500000000549999,20.000000000499998,5.0000000000000003e-10,25.500000000549999,20.130320335106774,0.65516456730935801,0.0,20.063856964203499,0.66171063798146923,24.500000000452864,20.130320335106774,0.65516456730935801,24.500000000450722,19.500000000499998,0.43865245435098366,24.500000000449997,19.485284740863534,0.42072185860400985,24.500000000449994,19.500000000499998,5.0000000000000003e-10,24.500000000449997,20.500000000499998,-0.43865245313248163,24.500000000449997,20.500000000499998,5.0000000000000003e-10,24.500000000449997,20.250000000499998,-0.24999999949999999,24.500000000449997,19.744367467180119,0.61715152771753945,50.0,19.744367467180119,-0.61715152771753945,50.0,19.869679664893226,0.65516456730935801,50.0,20.586903912635492,0.31222184040884471,25.500000000550006,20.617151527717539,0.25563253281988024,25.500000000550006,20.500000000499998,5.0000000000000003e-10,25.500000000549999,20.149382210596279,0.64938221059628054,25.500000000549999,20.194229555941838,0.6357779171171124,25.500000000549999,20.000000000499998,0.50000000050000004,25.500000000549999,20.130320335106774,0.65516456730935801,50.0,20.194229555941838,0.6357779171171124,25.500000000549999,20.149382210596279,0.64938221059628054,25.500000000549999,19.444578298981899,-0.37112091565709415,50.0,19.413096087364508,-0.31222184040884454,25.500000000549999,19.444578298981899,-0.37112091565709415,25.500000000549999,19.628879084342906,0.5554217010181004,0.0,19.527652670167384,-0.47234732983261374,0.0,19.527652670167384,0.47234732983261379,0.0,20.667999999999999,-1.636128123660864e-16,0.0,20.661453929327891,0.066463370903274435,24.500000000452783,20.667999999999999,-1.636128123660864e-16,24.500000000454918,20.191723311984816,-0.63653817790978506,25.500000000550006,20.149382211363534,-0.64938221036353616,25.500000000549999,20.000000000499998,-0.49999999950000001,25.500000000549999,19.52765267071663,0.47234733028336812,24.500000000449997,19.500000000499998,0.43865245435098366,24.500000000449997,19.750000000499998,0.25000000049999999,24.500000000449997,19.444578298981899,0.37112091565709426,25.500000000549999,19.414330683899852,0.31453160806812969,25.500000000549999,19.444578298981899,0.37112091565709426,50.0,20.149382210596279,0.64938221059628054,24.500000000449997,20.130320335106774,0.65516456730935801,24.500000000450722,20.000000000499998,0.50000000050000004,24.500000000449997,19.869679664893226,-0.6551645673093579,25.500000000549271,19.933536629094121,-0.66145392932763203,25.500000000547217,19.869679664893226,-0.6551645673093579,50.0,19.500000000499998,0.43865245435098366,24.500000000449997,19.500000000499998,5.0000000000000003e-10,24.500000000449997,19.750000000499998,0.25000000049999999,24.500000000449997,20.149382211363534,-0.64938221036353616,25.500000000549999,20.191723311984816,-0.63653817790978506,25.500000000550006,20.130320335106774,-0.65516456730935801,50.0,19.444578298981899,0.37112091565709426,50.0,19.444578298981899,-0.37112091565709415,50.0,19.527652670167384,0.47234732983261379,50.0,20.130320335106774,-0.65516456730935801,0.0,20.0,-0.66800000000000004,0.0,20.130320335106774,0.65516456730935801,0.0,20.371120915657094,-0.5554217010181004,0.0,20.255632532819881,-0.61715152771753945,0.0,20.371120915657094,0.55542170101810029,0.0,19.444578298981899,-0.37112091565709415,0.0,19.486946228285749,-0.4227463868856981,24.500000000449994,19.444578298981899,-0.37112091565709415,24.500000000449994,20.371120915657094,0.55542170101810029,24.500000000449994,20.420721858604011,0.51471525913646421,24.500000000449994,20.371120915657094,0.55542170101810029,0.0,20.555421701018101,-0.37112091565709426,0.0,20.586903912634259,-0.31222184041115458,24.500000000449994,20.555421701018101,-0.37112091565709426,24.500000000449994,20.65516456730936,0.13032033510677382,0.0,20.617151527717539,-0.25563253281988041,0.0,20.617151527717539,0.25563253281988024,0.0,20.649382210829025,-0.14938220982902686,24.500000000449997,20.65516456730936,-0.13032033510677399,24.500000000450729,20.500000000499998,5.0000000000000003e-10,24.500000000449997,19.869679664893226,0.65516456730935801,50.0,19.744367467180119,-0.61715152771753945,50.0,19.869679664893226,-0.6551645673093579,50.0,20.0,-0.66800000000000004,50.0,19.869679664893226,-0.6551645673093579,50.0,19.933536629094121,-0.66145392932763203,25.500000000547217,20.65516456730936,0.13032033510677382,0.0,20.649382210596279,0.14938221059628243,24.500000000449997,20.65516456730936,0.13032033510677382,24.500000000450729,19.628879084342906,-0.55542170101810029,25.500000000549996,19.68546839193187,-0.5856693161001465,25.500000000550006,19.628879084342906,-0.55542170101810029,50.0,19.34483543269064,-0.13032033510677374,0.0,19.382848472282461,-0.25563253281987991,0.0,19.364222082882126,-0.19422955593933008,24.500000000449994,19.628879084342906,0.5554217010181004,50.0,19.687778159591154,0.58690391263549335,25.500000000549999,19.628879084342906,0.5554217010181004,25.500000000549999,19.382848472282461,-0.25563253281987991,25.500000000549999,19.363461822090215,-0.19172331198481735,25.500000000549999,19.500000000499998,5.0000000000000003e-10,25.500000000549999,19.527652670167384,0.47234732983261379,0.0,19.444578298981899,0.37112091565709426,0.0,19.485284740863534,0.42072185860400985,24.500000000449994,19.444578298981899,-0.37112091565709415,24.500000000449994,19.414330683898619,-0.31453160806581981,24.500000000449994,19.444578298981899,-0.37112091565709415,0.0,19.382848472282461,-0.25563253281987991,0.0,19.34483543269064,-0.13032033510677374,0.0,19.382848472282461,0.25563253281988008,0.0,19.350617789403717,-0.14938221059627974,24.500000000449997,19.364222082882126,-0.19422955593933008,24.500000000449994,19.500000000499998,5.0000000000000003e-10,24.500000000449997,20.422746386887724,0.51305377171258837,25.500000000549999,20.43865245313248,0.50000000050000004,25.500000000549999,20.000000000499998,0.50000000050000004,25.500000000549999,20.555421701018101,-0.37112091565709426,0.0,20.472347329832612,-0.4723473298326139,0.0,20.472347329832616,0.47234732983261374,0.0,20.500000000499998,5.0000000000000003e-10,24.500000000449997,20.500000000499998,0.43865245313248435,24.500000000449997,20.472347329832616,0.47234732983261374,24.500000000449994,19.382848472282461,0.25563253281988008,24.500000000449994,19.413096087365741,0.31222184041115442,24.500000000449994,19.382848472282461,0.25563253281988008,0.0,20.371120915657094,0.55542170101810029,50.0,20.371120915657094,-0.5554217010181004,50.0,20.472347329832616,0.47234732983261374,50.0,20.65516456730936,-0.13032033510677399,25.500000000549271,20.661453929327632,-0.066463370905881086,25.500000000547217,20.65516456730936,-0.13032033510677399,50.0,20.0,0.66800000000000004,0.0,19.933536629096725,0.66145392932788882,24.500000000452776,20.000000000499998,0.66799999995075454,24.500000000454918,19.850617789403717,-0.64938221059627965,24.500000000449997,19.869679664893226,-0.6551645673093579,24.500000000450722,20.000000000499998,-0.49999999950000001,24.500000000449997,20.649382210829025,-0.14938220982902686,24.500000000449997,20.636538177909024,-0.19172331198732395,24.500000000449994,20.65516456730936,-0.13032033510677399,0.0,20.667999999950755,5.0000000000000003e-10,25.500000000545079,20.661453929327632,-0.066463370905881086,25.500000000547217,20.500000000499998,5.0000000000000003e-10,25.500000000549999,19.805770444058162,-0.6357779171171124,25.500000000549999,19.744367467180119,-0.61715152771753945,25.500000000549999,20.000000000499998,-0.49999999950000001,25.500000000549999,19.34483543269064,-0.13032033510677374,24.500000000450729,19.350617789403717,-0.14938221059627974,24.500000000449997,19.500000000499998,5.0000000000000003e-10,24.500000000449997,20.371120915657094,0.55542170101810029,25.500000000549999,20.31453160806813,0.5856693161001465,25.500000000549999,20.371120915657094,0.55542170101810029,50.0,19.444578298981899,-0.37112091565709415,25.500000000549999,19.413096087364508,-0.31222184040884454,25.500000000549999,19.500000000499998,5.0000000000000003e-10,25.500000000549999,20.0,-0.66800000000000004,0.0,19.869679664893226,-0.6551645673093579,0.0,20.0,0.66800000000000004,0.0,19.561347545649014,-0.49999999950000001,25.500000000549999,19.527652670167384,-0.47234732983261374,50.0,19.527652670167384,-0.47234732983261374,25.500000000549999,19.744367467180119,0.61715152771753945,50.0,19.808276688015184,0.63653817790978506,25.500000000549999,19.744367467180119,0.61715152771753945,25.500000000549999,19.687778159588845,-0.58690391263425867,24.500000000449994,19.744367467180119,-0.61715152771753945,24.500000000449994,20.000000000499998,-0.49999999950000001,24.500000000449997,20.617151527717539,-0.25563253281988041,50.0,20.555421701018101,-0.37112091565709426,50.0,20.585669316100148,-0.31453160806812985,25.500000000550006,19.414330683898619,-0.31453160806581981,24.500000000449994,19.444578298981899,-0.37112091565709415,24.500000000449994,19.500000000499998,5.0000000000000003e-10,24.500000000449997,19.34483543269064,-0.13032033510677374,0.0,19.350617789403717,-0.14938221059627974,24.500000000449997,19.34483543269064,-0.13032033510677374,24.500000000450729,20.585669316100148,-0.31453160806812985,25.500000000550006,20.555421701018101,-0.37112091565709426,25.500000000549999,20.500000000499998,5.0000000000000003e-10,25.500000000549999,19.527652670167384,0.47234732983261379,50.0,19.444578298981899,-0.37112091565709415,50.0,19.527652670167384,-0.47234732983261374,50.0,19.350617789636463,0.14938221136353533,24.500000000449997,19.363461822090976,0.19172331198732373,24.500000000449994,19.34483543269064,0.1303203351067739,0.0,20.0,0.66800000000000004,25.500000000545075,20.066463370905879,0.66145392932763214,25.500000000547214,20.000000000499998,0.50000000050000004,25.500000000549999,20.667999999950755,5.0000000000000003e-10,25.500000000545079,20.661710637981727,0.063856964200893027,25.500000000547136,20.667999999999999,-1.636128123660864e-16,50.0,20.0,0.66800000000000004,50.0,20.130320335106774,0.65516456730935801,50.0,20.066463370905879,0.66145392932763214,25.500000000547214,20.130320335106774,0.65516456730935801,50.0,20.255632532819881,0.61715152771753945,50.0,20.194229555941838,0.6357779171171124,25.500000000549999,19.527652670167384,0.47234732983261379,50.0,19.579278141398014,0.51471525913812577,25.500000000549999,19.56134754686752,0.50000000050000004,25.500000000549999,20.617151527717539,-0.25563253281988041,24.500000000449994,20.586903912634259,-0.31222184041115458,24.500000000449994,20.617151527717539,-0.25563253281988041,0.0,20.250000000499998,-0.24999999949999999,25.500000000549999,20.500000000499998,5.0000000000000003e-10,25.500000000549999,20.472347330283366,-0.47234732928336809,25.500000000549999,19.527652670167384,-0.47234732983261374,0.0,19.628879084342906,-0.55542170101810029,0.0,19.579278141395989,-0.51471525913646421,24.500000000449994,20.000000000499998,-0.66799999995075443,24.500000000454918,20.066463370903275,-0.66145392932788882,24.500000000452776,20.000000000499998,-0.49999999950000001,24.500000000449997,20.0,0.66800000000000004,50.0,20.066463370905879,0.66145392932763214,25.500000000547214,20.0,0.66800000000000004,25.500000000545075,20.000000000499998,-0.49999999950000001,25.500000000549999,19.561347545649014,-0.49999999950000001,25.500000000549999,19.527652670167384,-0.47234732983261374,25.500000000549999,20.000000000499998,-0.66799999995075443,24.500000000454918,19.936143035796501,-0.66171063798146912,24.500000000452864,20.0,-0.66800000000000004,0.0,20.513053771712588,-0.42274638688772276,25.500000000549999,20.500000000499998,-0.43865245313248163,25.500000000549999,20.500000000499998,5.0000000000000003e-10,25.500000000549999,20.472347329832616,0.47234732983261374,24.500000000449994,20.513053771714251,0.42274638688569816,24.500000000449994,20.472347329832616,0.47234732983261374,0.0,19.869679664893226,-0.6551645673093579,50.0,19.850617789403717,-0.64938221059627965,25.500000000549999,19.869679664893226,-0.6551645673093579,25.500000000549271,20.667999999999999,-1.636128123660864e-16,50.0,20.65516456730936,-0.13032033510677399,50.0,20.661453929327632,-0.066463370905881086,25.500000000547217,19.850617789403717,-0.64938221059627965,25.500000000549999,19.805770444058162,-0.6357779171171124,25.500000000549999,20.000000000499998,-0.49999999950000001,25.500000000549999,20.472347329832612,-0.4723473298326139,50.0,20.420721858601986,-0.51471525913812588,25.500000000549999,20.438652454350983,-0.49999999950000001,25.500000000549999,20.649382210829025,-0.14938220982902686,24.500000000449997,20.65516456730936,-0.13032033510677399,0.0,20.65516456730936,-0.13032033510677399,24.500000000450729,20.649382210596279,0.1493822105962824,25.500000000549999,20.636538177909785,0.19172331198481751,25.500000000550006,20.65516456730936,0.13032033510677382,50.0,19.444578298981899,0.37112091565709426,24.500000000449994,19.485284740863534,0.42072185860400985,24.500000000449994,19.444578298981899,0.37112091565709426,0.0,19.332000000000001,8.1806406183043198e-17,0.0,19.338546070672109,-0.066463370903274435,24.500000000452783,19.332000000049245,5.0000000000000003e-10,24.500000000454918,20.371120915657094,-0.5554217010181004,0.0,20.422746386885699,-0.51305377171424993,24.500000000450001,20.371120915657094,-0.5554217010181004,24.500000000449994,19.444578298981899,-0.37112091565709415,50.0,19.382848472282461,-0.25563253281987991,50.0,19.413096087364508,-0.31222184040884454,25.500000000549999,19.579278141398014,0.51471525913812577,25.500000000549999,19.628879084342906,0.5554217010181004,25.500000000549999,20.000000000499998,0.50000000050000004,25.500000000549999,20.255632532819881,-0.61715152771753945,50.0,20.130320335106774,-0.65516456730935801,50.0,20.191723311984816,-0.63653817790978506,25.500000000550006,19.382848472282461,0.25563253281988008,0.0,19.363461822090976,0.19172331198732373,24.500000000449994,19.382848472282461,0.25563253281988008,24.500000000449994,19.869679664893226,-0.6551645673093579,25.500000000549271,19.850617789403717,-0.64938221059627965,25.500000000549999,20.000000000499998,-0.49999999950000001,25.500000000549999,19.338289362018273,-0.063856964200893027,25.500000000547136,19.332000000000001,8.1806406183043198e-17,25.500000000545082,19.500000000499998,5.0000000000000003e-10,25.500000000549999,20.65516456730936,-0.13032033510677399,25.500000000549271,20.649382210829025,-0.14938220982902686,25.500000000549999,20.500000000499998,5.0000000000000003e-10,25.500000000549999,19.628879084342906,-0.55542170101810029,0.0,19.527652670167384,-0.47234732983261374,0.0,19.628879084342906,0.5554217010181004,0.0,19.850617789403717,-0.64938221059627965,24.500000000449997,19.808276688012675,-0.63653817790902478,24.500000000449994,19.869679664893226,-0.6551645673093579,0.0,19.628879084342906,-0.55542170101810029,0.0,19.687778159588845,-0.58690391263425867,24.500000000449994,19.628879084342906,-0.55542170101810029,24.500000000449994,20.667999999999999,-1.636128123660864e-16,0.0,20.65516456730936,-0.13032033510677399,0.0,20.65516456730936,0.13032033510677382,0.0,20.255632532819881,-0.61715152771753945,0.0,20.31453160806582,-0.58566931610138107,24.500000000449994,20.255632532819881,-0.61715152771753945,24.500000000449994,19.744367467180119,0.61715152771753945,0.0,19.68546839193418,0.58566931610138107,24.500000000449994,19.744367467180119,0.61715152771753945,24.500000000449994,20.472347329832612,-0.4723473298326139,50.0,20.371120915657094,-0.5554217010181004,50.0,20.420721858601986,-0.51471525913812588,25.500000000549999,19.628879084342906,0.5554217010181004,24.500000000449994,19.577253613114301,0.51305377171424993,24.500000000449994,20.000000000499998,0.50000000050000004,24.500000000449997,19.332000000000001,8.1806406183043198e-17,50.0,19.338546070672368,0.066463370905881003,25.500000000547217,19.332000000000001,8.1806406183043198e-17,25.500000000545082,20.255632532819881,0.61715152771753945,50.0,20.130320335106774,-0.65516456730935801,50.0,20.255632532819881,-0.61715152771753945,50.0,20.130320335106774,-0.65516456730935801,0.0,20.149382211363534,-0.64938221036353616,24.500000000449997,20.130320335106774,-0.65516456730935801,24.500000000450722,20.255632532819881,0.61715152771753945,50.0,20.371120915657094,0.55542170101810029,50.0,20.31453160806813,0.5856693161001465,25.500000000549999,20.555421701018101,0.37112091565709421,50.0,20.617151527717539,0.25563253281988024,50.0,20.586903912635492,0.31222184040884471,25.500000000550006,19.744367467180119,0.61715152771753945,50.0,19.628879084342906,-0.55542170101810029,50.0,19.744367467180119,-0.61715152771753945,50.0,20.000000000499998,0.50000000050000004,24.500000000449997,20.000000000499998,5.0000000000000003e-10,24.500000000449997,20.250000000499998,0.25000000049999999,24.500000000449997,19.485284740863534,0.42072185860400985,24.500000000449994,19.444578298981899,0.37112091565709426,24.500000000449994,19.500000000499998,5.0000000000000003e-10,24.500000000449997,19.744367467180119,-0.61715152771753945,0.0,19.869679664893226,-0.6551645673093579,0.0,19.808276688012675,-0.63653817790902478,24.500000000449994,19.869679664893226,0.65516456730935801,0.0,19.80577044406067,0.63577791711787268,24.500000000449994,19.850617790170975,0.64938221082902414,24.500000000449997,19.332000000000001,8.1806406183043198e-17,25.500000000545082,19.338289362018273,-0.063856964200893027,25.500000000547136,19.332000000000001,8.1806406183043198e-17,50.0,20.250000000499998,0.25000000049999999,24.500000000449997,20.500000000499998,5.0000000000000003e-10,24.500000000449997,20.472347329832616,0.47234732983261374,24.500000000449994,19.338546070672109,-0.066463370903274435,24.500000000452783,19.34483543269064,-0.13032033510677374,24.500000000450729,19.500000000499998,5.0000000000000003e-10,24.500000000449997,19.869679664893226,0.65516456730935801,24.500000000450722,19.850617790170975,0.64938221082902414,24.500000000449997,20.000000000499998,0.50000000050000004,24.500000000449997,20.514715259138129,0.4207218586019853,25.500000000550006,20.555421701018101,0.37112091565709421,25.500000000550006,20.500000000499998,5.0000000000000003e-10,25.500000000549999,19.444578298981899,0.37112091565709426,0.0,19.413096087365741,0.31222184041115442,24.500000000449994,19.444578298981899,0.37112091565709426,24.500000000449994,19.628879084342906,0.5554217010181004,24.500000000449994,19.68546839193418,0.58566931610138107,24.500000000449994,19.628879084342906,0.5554217010181004,0.0,20.555421701018101,0.37112091565709421,0.0,20.513053771714251,0.42274638688569816,24.500000000449994,20.555421701018101,0.37112091565709421,24.500000000449994,20.667999999999999,-1.636128123660864e-16,24.500000000454918,20.661710637981468,-0.063856964203499691,24.500000000452864,20.667999999999999,-1.636128123660864e-16,0.0,20.255632532819881,0.61715152771753945,50.0,20.255632532819881,-0.61715152771753945,50.0,20.371120915657094,0.55542170101810029,50.0,20.617151527717539,0.25563253281988024,24.500000000449994,20.585669316101381,0.31453160806581998,24.500000000449994,20.500000000499998,5.0000000000000003e-10,24.500000000449997,19.338546070672368,0.066463370905881003,25.500000000547217,19.34483543269064,0.1303203351067739,25.500000000549271,19.500000000499998,5.0000000000000003e-10,25.500000000549999,20.0,-0.66800000000000004,50.0,19.933536629094121,-0.66145392932763203,25.500000000547217,20.000000000499998,-0.66799999995075443,25.500000000545079,20.000000000499998,-0.66799999995075443,25.500000000545079,19.933536629094121,-0.66145392932763203,25.500000000547217,20.000000000499998,-0.49999999950000001,25.500000000549999,20.617151527717539,-0.25563253281988041,25.500000000550006,20.635777917117114,-0.19422955594183669,25.500000000549999,20.617151527717539,-0.25563253281988041,50.0,19.561347545649014,-0.49999999950000001,24.500000000449997,19.579278141395989,-0.51471525913646421,24.500000000449994,20.000000000499998,-0.49999999950000001,24.500000000449997,19.52765267071663,0.47234733028336812,24.500000000449997,19.577253613114301,0.51305377171424993,24.500000000449994,19.527652670167384,0.47234732983261379,0.0,19.500000000499998,5.0000000000000003e-10,25.500000000549999,19.750000000499998,0.25000000049999999,25.500000000549999,20.000000000499998,5.0000000000000003e-10,25.500000000549999,19.350617789403717,-0.14938221059627974,25.500000000549999,19.34483543269064,-0.13032033510677374,50.0,19.34483543269064,-0.13032033510677374,25.500000000549271,19.382848472282461,-0.25563253281987991,50.0,19.34483543269064,-0.13032033510677374,50.0,19.363461822090215,-0.19172331198481735,25.500000000549999,20.555421701018101,0.37112091565709421,24.500000000449994,20.513053771714251,0.42274638688569816,24.500000000449994,20.500000000499998,5.0000000000000003e-10,24.500000000449997,20.514715259136462,-0.4207218586040099,24.500000000449994,20.555421701018101,-0.37112091565709426,24.500000000449994,20.500000000499998,5.0000000000000003e-10,24.500000000449997,19.332000000049245,5.0000000000000003e-10,24.500000000454918,19.338546070672109,-0.066463370903274435,24.500000000452783,19.500000000499998,5.0000000000000003e-10,24.500000000449997,19.750000000499998,0.25000000049999999,25.500000000549999,19.500000000499998,5.0000000000000003e-10,25.500000000549999,19.527652670167384,0.47234732983261379,25.500000000550006,20.149382211363534,-0.64938221036353616,24.500000000449997,20.19422955593933,-0.63577791711787268,24.500000000449994,20.000000000499998,-0.49999999950000001,24.500000000449997,19.628879084342906,0.5554217010181004,25.500000000549999,19.579278141398014,0.51471525913812577,25.500000000549999,19.628879084342906,0.5554217010181004,50.0,19.628879084342906,-0.55542170101810029,50.0,19.527652670167384,-0.47234732983261374,50.0,19.577253613112276,-0.51305377171258837,25.500000000549996,19.34483543269064,0.1303203351067739,25.500000000549271,19.338546070672368,0.066463370905881003,25.500000000547217,19.34483543269064,0.1303203351067739,50.0,19.869679664893226,0.65516456730935801,50.0,19.936143035799105,0.66171063798172591,25.500000000547129,19.869679664893226,0.65516456730935801,25.500000000549267,20.635777917117114,-0.19422955594183669,25.500000000549999,20.617151527717539,-0.25563253281988041,25.500000000550006,20.500000000499998,5.0000000000000003e-10,25.500000000549999,20.371120915657094,-0.5554217010181004,25.500000000549999,20.420721858601986,-0.51471525913812588,25.500000000549999,20.371120915657094,-0.5554217010181004,50.0,19.500000000499998,5.0000000000000003e-10,24.500000000449997,19.750000000499998,-0.24999999949999999,24.500000000449997,20.000000000499998,5.0000000000000003e-10,24.500000000449997,19.34483543269064,-0.13032033510677374,50.0,19.338289362018273,-0.063856964200893027,25.500000000547136,19.34483543269064,-0.13032033510677374,25.500000000549271,20.472347329832616,0.47234732983261374,50.0,20.514715259138129,0.4207218586019853,25.500000000550006,20.500000000499998,0.43865245313248435,25.500000000549999,20.130320335106774,-0.65516456730935801,24.500000000450722,20.066463370903275,-0.66145392932788882,24.500000000452776,20.130320335106774,-0.65516456730935801,0.0,20.0,0.66800000000000004,25.500000000545075,19.936143035799105,0.66171063798172591,25.500000000547129,20.0,0.66800000000000004,50.0,20.617151527717539,0.25563253281988024,25.500000000550006,20.586903912635492,0.31222184040884471,25.500000000550006,20.617151527717539,0.25563253281988024,50.0,19.382848472282461,0.25563253281988008,50.0,19.414330683899852,0.31453160806812969,25.500000000549999,19.382848472282461,0.25563253281988008,25.500000000549999,20.255632532819881,0.61715152771753945,0.0,20.130320335106774,-0.65516456730935801,0.0,20.130320335106774,0.65516456730935801,0.0,20.000000000499998,-0.49999999950000001,24.500000000449997,20.000000000499998,5.0000000000000003e-10,24.500000000449997,19.750000000499998,-0.24999999949999999,24.500000000449997,19.628879084342906,-0.55542170101810029,0.0,19.744367467180119,-0.61715152771753945,0.0,19.687778159588845,-0.58690391263425867,24.500000000449994,19.382848472282461,-0.25563253281987991,25.500000000549999,19.413096087364508,-0.31222184040884454,25.500000000549999,19.382848472282461,-0.25563253281987991,50.0,19.34483543269064,-0.13032033510677374,24.500000000450729,19.338546070672109,-0.066463370903274435,24.500000000452783,19.34483543269064,-0.13032033510677374,0.0,19.56134754686752,0.50000000050000004,25.500000000549999,19.579278141398014,0.51471525913812577,25.500000000549999,20.000000000499998,0.50000000050000004,25.500000000549999,20.255632532819881,-0.61715152771753945,50.0,20.191723311984816,-0.63653817790978506,25.500000000550006,20.255632532819881,-0.61715152771753945,25.500000000549999,20.617151527717539,-0.25563253281988041,0.0,20.555421701018101,-0.37112091565709426,0.0,20.617151527717539,0.25563253281988024,0.0,20.617151527717539,-0.25563253281988041,50.0,20.585669316100148,-0.31453160806812985,25.500000000550006,20.617151527717539,-0.25563253281988041,25.500000000550006,20.130320335106774,0.65516456730935801,25.500000000549267,20.149382210596279,0.64938221059628054,25.500000000549999,20.000000000499998,0.50000000050000004,25.500000000549999,20.586903912634259,-0.31222184041115458,24.500000000449994,20.617151527717539,-0.25563253281988041,24.500000000449994,20.500000000499998,5.0000000000000003e-10,24.500000000449997,20.472347329832612,-0.4723473298326139,50.0,20.438652454350983,-0.49999999950000001,25.500000000549999,20.472347330283366,-0.47234732928336809,25.500000000549999,20.65516456730936,-0.13032033510677399,50.0,20.617151527717539,-0.25563253281988041,50.0,20.635777917117114,-0.19422955594183669,25.500000000549999,20.513053771714251,0.42274638688569816,24.500000000449994,20.500000000499998,0.43865245313248435,24.500000000449997,20.500000000499998,5.0000000000000003e-10,24.500000000449997,19.577253613112276,-0.51305377171258837,25.500000000549996,19.561347545649014,-0.49999999950000001,25.500000000549999,20.000000000499998,-0.49999999950000001,25.500000000549999,19.350617789636463,0.14938221136353533,25.500000000549999,19.364222082882886,0.1942295559418365,25.500000000549999,19.500000000499998,5.0000000000000003e-10,25.500000000549999,20.472347329832616,0.47234732983261374,24.500000000449994,20.43865245313248,0.50000000050000004,24.500000000449997,20.250000000499998,0.25000000049999999,24.500000000449997,19.750000000499998,-0.24999999949999999,24.500000000449997,19.500000000499998,5.0000000000000003e-10,24.500000000449997,19.527652670167384,-0.47234732983261374,24.500000000449997,20.649382210596279,0.1493822105962824,25.500000000549999,20.65516456730936,0.13032033510677382,25.500000000549271,20.500000000499998,5.0000000000000003e-10,25.500000000549999,20.500000000499998,0.43865245313248435,25.500000000549999,20.514715259138129,0.4207218586019853,25.500000000550006,20.500000000499998,5.0000000000000003e-10,25.500000000549999,20.43865245313248,0.50000000050000004,24.500000000449997,20.000000000499998,0.50000000050000004,24.500000000449997,20.250000000499998,0.25000000049999999,24.500000000449997,19.500000000499998,5.0000000000000003e-10,24.500000000449997,20.000000000499998,5.0000000000000003e-10,24.500000000449997,19.750000000499998,0.25000000049999999,24.500000000449997,20.555421701018101,0.37112091565709421,50.0,20.586903912635492,0.31222184040884471,25.500000000550006,20.555421701018101,0.37112091565709421,25.500000000550006,19.34483543269064,0.1303203351067739,50.0,19.350617789636463,0.14938221136353533,25.500000000549999,19.34483543269064,0.1303203351067739,25.500000000549271,20.066463370905879,0.66145392932763214,25.500000000547214,20.130320335106774,0.65516456730935801,25.500000000549267,20.000000000499998,0.50000000050000004,25.500000000549999,20.472347329832612,-0.4723473298326139,0.0,20.555421701018101,-0.37112091565709426,0.0,20.514715259136462,-0.4207218586040099,24.500000000449994,20.65516456730936,-0.13032033510677399,0.0,20.667999999999999,-1.636128123660864e-16,0.0,20.661710637981468,-0.063856964203499691,24.500000000452864,20.649382210596279,0.14938221059628243,24.500000000449997,20.635777917117874,0.19422955593933028,24.500000000449994,20.500000000499998,5.0000000000000003e-10,24.500000000449997,19.628879084342906,-0.55542170101810029,50.0,19.577253613112276,-0.51305377171258837,25.500000000549996,19.628879084342906,-0.55542170101810029,25.500000000549996,19.382848472282461,0.25563253281988008,50.0,19.34483543269064,-0.13032033510677374,50.0,19.382848472282461,-0.25563253281987991,50.0,20.19422955593933,-0.63577791711787268,24.500000000449994,20.255632532819881,-0.61715152771753945,24.500000000449994,20.000000000499998,-0.49999999950000001,24.500000000449997,20.65516456730936,0.13032033510677382,25.500000000549271,20.661710637981727,0.063856964200893027,25.500000000547136,20.500000000499998,5.0000000000000003e-10,25.500000000549999,19.744367467180119,-0.61715152771753945,24.500000000449994,19.687778159588845,-0.58690391263425867,24.500000000449994,19.744367467180119,-0.61715152771753945,0.0,19.869679664893226,0.65516456730935801,50.0,20.0,0.66800000000000004,50.0,19.936143035799105,0.66171063798172591,25.500000000547129,19.68546839193418,0.58566931610138107,24.500000000449994,19.628879084342906,0.5554217010181004,24.500000000449994,20.000000000499998,0.50000000050000004,24.500000000449997,20.617151527717539,0.25563253281988024,50.0,20.555421701018101,-0.37112091565709426,50.0,20.617151527717539,-0.25563253281988041,50.0,20.255632532819881,-0.61715152771753945,0.0,20.371120915657094,-0.5554217010181004,0.0,20.31453160806582,-0.58566931610138107,24.500000000449994,20.472347329832612,-0.4723473298326139,0.0,20.514715259136462,-0.4207218586040099,24.500000000449994,20.500000000499998,-0.43865245313248163,24.500000000449997,20.555421701018101,-0.37112091565709426,24.500000000449994,20.586903912634259,-0.31222184041115458,24.500000000449994,20.500000000499998,5.0000000000000003e-10,24.500000000449997,20.555421701018101,-0.37112091565709426,50.0,20.472347329832612,-0.4723473298326139,50.0,20.513053771712588,-0.42274638688772276,25.500000000549999,19.382848472282461,0.25563253281988008,0.0,19.34483543269064,-0.13032033510677374,0.0,19.34483543269064,0.1303203351067739,0.0,20.371120915657094,-0.5554217010181004,25.500000000549999,20.312221840408846,-0.58690391263549335,25.500000000549999,20.000000000499998,-0.49999999950000001,25.500000000549999,20.472347329832616,0.47234732983261374,0.0,20.43865245313248,0.50000000050000004,24.500000000449997,20.472347329832616,0.47234732983261374,24.500000000449994,20.130320335106774,-0.65516456730935801,0.0,20.255632532819881,-0.61715152771753945,0.0,20.19422955593933,-0.63577791711787268,24.500000000449994,19.527652670167384,0.47234732983261379,25.500000000550006,19.56134754686752,0.50000000050000004,25.500000000549999,19.750000000499998,0.25000000049999999,25.500000000549999,20.371120915657094,-0.5554217010181004,24.500000000449994,20.422746386885699,-0.51305377171424993,24.500000000450001,20.000000000499998,-0.49999999950000001,24.500000000449997,19.744367467180119,0.61715152771753945,50.0,19.869679664893226,0.65516456730935801,50.0,19.808276688015184,0.63653817790978506,25.500000000549999,19.869679664893226,0.65516456730935801,0.0,19.850617790170975,0.64938221082902414,24.500000000449997,19.869679664893226,0.65516456730935801,24.500000000450722,19.382848472282461,0.25563253281988008,25.500000000549999,19.364222082882886,0.1942295559418365,25.500000000549999,19.382848472282461,0.25563253281988008,50.0,20.255632532819881,0.61715152771753945,50.0,20.31453160806813,0.5856693161001465,25.500000000549999,20.255632532819881,0.61715152771753945,25.500000000549999,20.130320335106774,0.65516456730935801,50.0,20.0,-0.66800000000000004,50.0,20.130320335106774,-0.65516456730935801,50.0,20.255632532819881,-0.61715152771753945,25.500000000549999,20.312221840408846,-0.58690391263549335,25.500000000549999,20.255632532819881,-0.61715152771753945,50.0,19.850617790170975,0.64938221082902414,25.500000000549999,19.869679664893226,0.65516456730935801,50.0,19.869679664893226,0.65516456730935801,25.500000000549267,19.382848472282461,0.25563253281988008,25.500000000549999,19.414330683899852,0.31453160806812969,25.500000000549999,19.500000000499998,5.0000000000000003e-10,25.500000000549999,19.52765267071663,0.47234733028336812,24.500000000449997,19.56134754686752,0.50000000050000004,24.500000000449997,19.577253613114301,0.51305377171424993,24.500000000449994,20.420721858604011,0.51471525913646421,24.500000000449994,20.371120915657094,0.55542170101810029,24.500000000449994,20.000000000499998,0.50000000050000004,24.500000000449997,19.744367467180119,0.61715152771753945,25.500000000549999,19.808276688015184,0.63653817790978506,25.500000000549999,20.000000000499998,0.50000000050000004,25.500000000549999,19.413096087365741,0.31222184041115442,24.500000000449994,19.382848472282461,0.25563253281988008,24.500000000449994,19.500000000499998,5.0000000000000003e-10,24.500000000449997,19.34483543269064,-0.13032033510677374,25.500000000549271,19.338289362018273,-0.063856964200893027,25.500000000547136,19.500000000499998,5.0000000000000003e-10,25.500000000549999,20.255632532819881,0.61715152771753945,24.500000000449994,20.191723311987325,0.63653817790902478,24.500000000449994,20.000000000499998,0.50000000050000004,24.500000000449997,20.649382210829025,-0.14938220982902686,25.500000000549999,20.635777917117114,-0.19422955594183669,25.500000000549999,20.500000000499998,5.0000000000000003e-10,25.500000000549999,20.000000000499998,0.50000000050000004,25.500000000549999,20.000000000499998,5.0000000000000003e-10,25.500000000549999,19.750000000499998,0.25000000049999999,25.500000000549999,19.933536629096725,0.66145392932788882,24.500000000452776,19.869679664893226,0.65516456730935801,24.500000000450722,20.000000000499998,0.50000000050000004,24.500000000449997,20.661710637981727,0.063856964200893027,25.500000000547136,20.667999999950755,5.0000000000000003e-10,25.500000000545079,20.500000000499998,5.0000000000000003e-10,25.500000000549999,20.661710637981468,-0.063856964203499691,24.500000000452864,20.667999999999999,-1.636128123660864e-16,24.500000000454918,20.500000000499998,5.0000000000000003e-10,24.500000000449997,20.149382211363534,-0.64938221036353616,25.500000000549999,20.130320335106774,-0.65516456730935801,50.0,20.130320335106774,-0.65516456730935801,25.500000000549271,19.500000000499998,-0.4386524543509836,25.500000000549999,19.500000000499998,5.0000000000000003e-10,25.500000000549999,19.750000000499998,-0.24999999949999999,25.500000000549999,19.444578298981899,0.37112091565709426,50.0,19.382848472282461,-0.25563253281987991,50.0,19.444578298981899,-0.37112091565709415,50.0,20.472347329832612,-0.4723473298326139,50.0,20.472347330283366,-0.47234732928336809,25.500000000549999,20.500000000499998,-0.43865245313248163,25.500000000549999,20.617151527717539,0.25563253281988024,50.0,20.65516456730936,0.13032033510677382,50.0,20.636538177909785,0.19172331198481751,25.500000000550006,20.255632532819881,-0.61715152771753945,25.500000000549999,20.191723311984816,-0.63653817790978506,25.500000000550006,20.000000000499998,-0.49999999950000001,25.500000000549999,20.636538177909785,0.19172331198481751,25.500000000550006,20.649382210596279,0.1493822105962824,25.500000000549999,20.500000000499998,5.0000000000000003e-10,25.500000000549999,19.628879084342906,-0.55542170101810029,24.500000000449994,19.687778159588845,-0.58690391263425867,24.500000000449994,20.000000000499998,-0.49999999950000001,24.500000000449997,20.472347329832616,0.47234732983261374,50.0,20.500000000499998,0.43865245313248435,25.500000000549999,20.472347329832612,0.47234732983261535,25.500000000549999,19.413096087364508,-0.31222184040884454,25.500000000549999,19.382848472282461,-0.25563253281987991,25.500000000549999,19.500000000499998,5.0000000000000003e-10,25.500000000549999,19.350617789636463,0.14938221136353533,24.500000000449997,19.34483543269064,0.1303203351067739,24.500000000450729,19.500000000499998,5.0000000000000003e-10,24.500000000449997,19.869679664893226,-0.6551645673093579,50.0,19.744367467180119,-0.61715152771753945,50.0,19.805770444058162,-0.6357779171171124,25.500000000549999,19.628879084342906,0.5554217010181004,0.0,19.527652670167384,0.47234732983261379,0.0,19.577253613114301,0.51305377171424993,24.500000000449994,20.000000000499998,0.50000000050000004,25.500000000549999,20.43865245313248,0.50000000050000004,25.500000000549999,20.472347329832612,0.47234732983261535,25.500000000549999,20.649382210596279,0.1493822105962824,25.500000000549999,20.65516456730936,0.13032033510677382,50.0,20.65516456730936,0.13032033510677382,25.500000000549271,20.063856964200895,-0.66171063798172591,25.500000000547136,20.000000000499998,-0.66799999995075443,25.500000000545079,20.000000000499998,-0.49999999950000001,25.500000000549999,19.500000000499998,5.0000000000000003e-10,24.500000000449997,19.500000000499998,-0.4386524543509836,24.500000000449997,19.527652670167384,-0.47234732983261374,24.500000000449997,19.527652670167384,-0.47234732983261374,50.0,19.500000000499998,-0.4386524543509836,25.500000000549999,19.527652670167384,-0.47234732983261374,25.500000000549999,19.332000000000001,8.1806406183043198e-17,0.0,19.34483543269064,0.1303203351067739,0.0,19.34483543269064,-0.13032033510677374,0.0,20.130320335106774,-0.65516456730935801,0.0,20.19422955593933,-0.63577791711787268,24.500000000449994,20.149382211363534,-0.64938221036353616,24.500000000449997,20.000000000499998,0.66799999995075454,24.500000000454918,20.063856964203499,0.66171063798146923,24.500000000452864,20.0,0.66800000000000004,0.0,20.661453929327632,-0.066463370905881086,25.500000000547217,20.65516456730936,-0.13032033510677399,25.500000000549271,20.500000000499998,5.0000000000000003e-10,25.500000000549999,20.130320335106774,-0.65516456730935801,25.500000000549271,20.063856964200895,-0.66171063798172591,25.500000000547136,20.000000000499998,-0.49999999950000001,25.500000000549999,20.472347329832612,-0.4723473298326139,24.500000000449994,20.422746386885699,-0.51305377171424993,24.500000000450001,20.472347329832612,-0.4723473298326139,0.0,20.130320335106774,-0.65516456730935801,24.500000000450722,20.149382211363534,-0.64938221036353616,24.500000000449997,20.000000000499998,-0.49999999950000001,24.500000000449997,20.371120915657094,0.55542170101810029,0.0,20.255632532819881,0.61715152771753945,0.0,20.312221840411155,0.58690391263425867,24.500000000449994,19.34483543269064,0.1303203351067739,50.0,19.34483543269064,-0.13032033510677374,50.0,19.382848472282461,0.25563253281988008,50.0,20.472347329832612,-0.4723473298326139,0.0,20.371120915657094,-0.5554217010181004,0.0,20.472347329832616,0.47234732983261374,0.0,19.382848472282461,-0.25563253281987991,24.500000000449994,19.414330683898619,-0.31453160806581981,24.500000000449994,19.500000000499998,5.0000000000000003e-10,24.500000000449997,19.338289362018532,0.063856964203499608,24.500000000452864,19.332000000049245,5.0000000000000003e-10,24.500000000454918,19.500000000499998,5.0000000000000003e-10,24.500000000449997,19.350617789403717,-0.14938221059627974,25.500000000549999,19.34483543269064,-0.13032033510677374,25.500000000549271,19.500000000499998,5.0000000000000003e-10,25.500000000549999,19.363461822090976,0.19172331198732373,24.500000000449994,19.350617789636463,0.14938221136353533,24.500000000449997,19.500000000499998,5.0000000000000003e-10,24.500000000449997,19.382848472282461,-0.25563253281987991,0.0,19.444578298981899,-0.37112091565709415,0.0,19.414330683898619,-0.31453160806581981,24.500000000449994,19.500000000499998,-0.4386524543509836,25.500000000549999,19.485284740861871,-0.4207218586019853,25.500000000549996,19.500000000499998,5.0000000000000003e-10,25.500000000549999,20.000000000499998,-0.49999999950000001,25.500000000549999,19.750000000499998,-0.24999999949999999,25.500000000549999,20.000000000499998,5.0000000000000003e-10,25.500000000549999,19.628879084342906,0.5554217010181004,0.0,19.577253613114301,0.51305377171424993,24.500000000449994,19.628879084342906,0.5554217010181004,24.500000000449994,19.744367467180119,0.61715152771753945,24.500000000449994,19.68546839193418,0.58566931610138107,24.500000000449994,20.000000000499998,0.50000000050000004,24.500000000449997,19.382848472282461,0.25563253281988008,0.0,19.34483543269064,0.1303203351067739,0.0,19.363461822090976,0.19172331198732373,24.500000000449994,20.312221840408846,-0.58690391263549335,25.500000000549999,20.255632532819881,-0.61715152771753945,25.500000000549999,20.000000000499998,-0.49999999950000001,25.500000000549999,19.34483543269064,-0.13032033510677374,50.0,19.34483543269064,0.1303203351067739,50.0,19.332000000000001,8.1806406183043198e-17,50.0,20.472347329832616,0.47234732983261374,50.0,20.371120915657094,-0.5554217010181004,50.0,20.472347329832612,-0.4723473298326139,50.0,19.444578298981899,0.37112091565709426,0.0,19.382848472282461,0.25563253281988008,0.0,19.413096087365741,0.31222184041115442,24.500000000449994,19.744367467180119,0.61715152771753945,24.500000000449994,19.80577044406067,0.63577791711787268,24.500000000449994,19.744367467180119,0.61715152771753945,0.0,19.382848472282461,0.25563253281988008,50.0,19.382848472282461,-0.25563253281987991,50.0,19.444578298981899,0.37112091565709426,50.0,20.472347329832616,0.47234732983261374,0.0,20.371120915657094,0.55542170101810029,0.0,20.420721858604011,0.51471525913646421,24.500000000449994,20.65516456730936,0.13032033510677382,50.0,20.661710637981727,0.063856964200893027,25.500000000547136,20.65516456730936,0.13032033510677382,25.500000000549271,20.0,0.66800000000000004,0.0,19.869679664893226,-0.6551645673093579,0.0,19.869679664893226,0.65516456730935801,0.0,20.000000000499998,0.50000000050000004,24.500000000449997,19.750000000499998,0.25000000049999999,24.500000000449997,20.000000000499998,5.0000000000000003e-10,24.500000000449997,19.527652670167384,0.47234732983261379,0.0,19.444578298981899,-0.37112091565709415,0.0,19.444578298981899,0.37112091565709426,0.0,20.371120915657094,-0.5554217010181004,0.0,20.472347329832612,-0.4723473298326139,0.0,20.422746386885699,-0.51305377171424993,24.500000000450001,20.255632532819881,0.61715152771753945,25.500000000549999,20.31453160806813,0.5856693161001465,25.500000000549999,20.000000000499998,0.50000000050000004,25.500000000549999,20.585669316101381,0.31453160806581998,24.500000000449994,20.555421701018101,0.37112091565709421,24.500000000449994,20.500000000499998,5.0000000000000003e-10,24.500000000449997,20.371120915657094,0.55542170101810029,0.0,20.255632532819881,-0.61715152771753945,0.0,20.255632532819881,0.61715152771753945,0.0,19.382848472282461,-0.25563253281987991,0.0,19.414330683898619,-0.31453160806581981,24.500000000449994,19.382848472282461,-0.25563253281987991,24.500000000449994,20.194229555941838,0.6357779171171124,25.500000000549999,20.255632532819881,0.61715152771753945,25.500000000549999,20.000000000499998,0.50000000050000004,25.500000000549999,19.744367467180119,0.61715152771753945,25.500000000549999,19.687778159591154,0.58690391263549335,25.500000000549999,19.744367467180119,0.61715152771753945,50.0,20.0,0.66800000000000004,50.0,20.0,-0.66800000000000004,50.0,20.130320335106774,0.65516456730935801,50.0,20.130320335106774,0.65516456730935801,24.500000000450722,20.063856964203499,0.66171063798146923,24.500000000452864,20.000000000499998,0.50000000050000004,24.500000000449997,19.444578298981899,0.37112091565709426,50.0,19.527652670167384,0.47234732983261379,50.0,19.486946228287412,0.4227463868877227,25.500000000549996,19.56134754686752,0.50000000050000004,25.500000000549999,20.000000000499998,0.50000000050000004,25.500000000549999,19.750000000499998,0.25000000049999999,25.500000000549999,19.561347545649014,-0.49999999950000001,25.500000000549999,19.577253613112276,-0.51305377171258837,25.500000000549996,19.527652670167384,-0.47234732983261374,50.0,20.500000000499998,5.0000000000000003e-10,25.500000000549999,20.000000000499998,5.0000000000000003e-10,25.500000000549999,20.250000000499998,0.25000000049999999,25.500000000549999,19.444578298981899,-0.37112091565709415,0.0,19.382848472282461,-0.25563253281987991,0.0,19.444578298981899,0.37112091565709426,0.0,20.500000000499998,-0.43865245313248163,24.500000000449997,20.514715259136462,-0.4207218586040099,24.500000000449994,20.500000000499998,5.0000000000000003e-10,24.500000000449997,20.371120915657094,0.55542170101810029,50.0,20.422746386887724,0.51305377171258837,25.500000000549999,20.371120915657094,0.55542170101810029,25.500000000549999,19.744367467180119,0.61715152771753945,0.0,19.628879084342906,0.5554217010181004,0.0,19.68546839193418,0.58566931610138107,24.500000000449994,19.68546839193187,-0.5856693161001465,25.500000000550006,19.628879084342906,-0.55542170101810029,25.500000000549996,20.000000000499998,-0.49999999950000001,25.500000000549999,20.555421701018101,-0.37112091565709426,24.500000000449994,20.514715259136462,-0.4207218586040099,24.500000000449994,20.555421701018101,-0.37112091565709426,0.0,20.149382210596279,0.64938221059628054,24.500000000449997,20.191723311987325,0.63653817790902478,24.500000000449994,20.130320335106774,0.65516456730935801,0.0,19.628879084342906,0.5554217010181004,50.0,19.527652670167384,-0.47234732983261374,50.0,19.628879084342906,-0.55542170101810029,50.0,20.472347329832612,0.47234732983261535,25.500000000549999,20.43865245313248,0.50000000050000004,25.500000000549999,20.422746386887724,0.51305377171258837,25.500000000549999,19.527652670167384,-0.47234732983261374,24.500000000449997,19.486946228285749,-0.4227463868856981,24.500000000449994,19.527652670167384,-0.47234732983261374,0.0,19.486946228285749,-0.4227463868856981,24.500000000449994,19.500000000499998,-0.4386524543509836,24.500000000449997,19.500000000499998,5.0000000000000003e-10,24.500000000449997,19.628879084342906,0.5554217010181004,25.500000000549999,19.687778159591154,0.58690391263549335,25.500000000549999,20.000000000499998,0.50000000050000004,25.500000000549999,20.472347329832616,0.47234732983261374,50.0,20.472347329832612,-0.4723473298326139,50.0,20.555421701018101,-0.37112091565709426,50.0,20.617151527717539,0.25563253281988024,25.500000000550006,20.636538177909785,0.19172331198481751,25.500000000550006,20.500000000499998,5.0000000000000003e-10,25.500000000549999,19.744367467180119,-0.61715152771753945,24.500000000449994,19.808276688012675,-0.63653817790902478,24.500000000449994,20.000000000499998,-0.49999999950000001,24.500000000449997,20.500000000499998,-0.43865245313248163,25.500000000549999,20.513053771712588,-0.42274638688772276,25.500000000549999,20.472347329832612,-0.4723473298326139,50.0,20.65516456730936,-0.13032033510677399,0.0,20.661710637981468,-0.063856964203499691,24.500000000452864,20.65516456730936,-0.13032033510677399,24.500000000450729,20.130320335106774,-0.65516456730935801,50.0,20.063856964200895,-0.66171063798172591,25.500000000547136,20.130320335106774,-0.65516456730935801,25.500000000549271,20.371120915657094,0.55542170101810029,0.0,20.312221840411155,0.58690391263425867,24.500000000449994,20.371120915657094,0.55542170101810029,24.500000000449994,20.0,0.66800000000000004,50.0,19.869679664893226,-0.6551645673093579,50.0,20.0,-0.66800000000000004,50.0,19.500000000499998,5.0000000000000003e-10,25.500000000549999,19.500000000499998,0.43865245435098366,25.500000000549999,19.527652670167384,0.47234732983261379,25.500000000550006,19.382848472282461,0.25563253281988008,50.0,19.444578298981899,0.37112091565709426,50.0,19.414330683899852,0.31453160806812969,25.500000000549999,19.486946228287412,0.4227463868877227,25.500000000549996,19.500000000499998,0.43865245435098366,25.500000000549999,19.500000000499998,5.0000000000000003e-10,25.500000000549999,19.527652670167384,-0.47234732983261374,0.0,19.444578298981899,-0.37112091565709415,0.0,19.527652670167384,0.47234732983261379,0.0,19.869679664893226,0.65516456730935801,0.0,19.744367467180119,0.61715152771753945,0.0,19.80577044406067,0.63577791711787268,24.500000000449994,20.0,0.66800000000000004,0.0,19.869679664893226,0.65516456730935801,0.0,19.933536629096725,0.66145392932788882,24.500000000452776,20.617151527717539,-0.25563253281988041,24.500000000449994,20.636538177909024,-0.19172331198732395,24.500000000449994,20.500000000499998,5.0000000000000003e-10,24.500000000449997,20.500000000499998,0.43865245313248435,25.500000000549999,20.500000000499998,5.0000000000000003e-10,25.500000000549999,20.250000000499998,0.25000000049999999,25.500000000549999,19.744367467180119,-0.61715152771753945,25.500000000549999,19.68546839193187,-0.5856693161001465,25.500000000550006,20.000000000499998,-0.49999999950000001,25.500000000549999,20.31453160806582,-0.58566931610138107,24.500000000449994,20.371120915657094,-0.5554217010181004,24.500000000449994,20.000000000499998,-0.49999999950000001,24.500000000449997,19.527652670167384,-0.47234732983261374,24.500000000449997,19.500000000499998,-0.4386524543509836,24.500000000449997,19.486946228285749,-0.4227463868856981,24.500000000449994,19.363461822090215,-0.19172331198481735,25.500000000549999,19.350617789403717,-0.14938221059627974,25.500000000549999,19.500000000499998,5.0000000000000003e-10,25.500000000549999,20.000000000499998,0.50000000050000004,24.500000000449997,19.56134754686752,0.50000000050000004,24.500000000449997,19.52765267071663,0.47234733028336812,24.500000000449997,20.65516456730936,-0.13032033510677399,50.0,20.649382210829025,-0.14938220982902686,25.500000000549999,20.65516456730936,-0.13032033510677399,25.500000000549271,20.250000000499998,0.25000000049999999,25.500000000549999,20.000000000499998,0.50000000050000004,25.500000000549999,20.472347329832612,0.47234732983261535,25.500000000549999,19.527652670167384,-0.47234732983261374,25.500000000549999,19.500000000499998,-0.4386524543509836,25.500000000549999,19.750000000499998,-0.24999999949999999,25.500000000549999,19.34483543269064,0.1303203351067739,50.0,19.382848472282461,0.25563253281988008,50.0,19.364222082882886,0.1942295559418365,25.500000000549999,19.332000000000001,8.1806406183043198e-17,50.0,19.34483543269064,0.1303203351067739,50.0,19.338546070672368,0.066463370905881003,25.500000000547217,19.933536629094121,-0.66145392932763203,25.500000000547217,19.869679664893226,-0.6551645673093579,25.500000000549271,20.000000000499998,-0.49999999950000001,25.500000000549999,20.472347329832616,0.47234732983261374,50.0,20.555421701018101,-0.37112091565709426,50.0,20.555421701018101,0.37112091565709421,50.0,19.744367467180119,-0.61715152771753945,0.0,19.808276688012675,-0.63653817790902478,24.500000000449994,19.744367467180119,-0.61715152771753945,24.500000000449994,19.34483543269064,0.1303203351067739,0.0,19.338289362018532,0.063856964203499608,24.500000000452864,19.34483543269064,0.1303203351067739,24.500000000450729,19.444578298981899,-0.37112091565709415,25.500000000549999,19.485284740861871,-0.4207218586019853,25.500000000549996,19.444578298981899,-0.37112091565709415,50.0,19.561347545649014,-0.49999999950000001,24.500000000449997,20.000000000499998,-0.49999999950000001,24.500000000449997,19.750000000499998,-0.24999999949999999,24.500000000449997,20.555421701018101,-0.37112091565709426,25.500000000549999,20.585669316100148,-0.31453160806812985,25.500000000550006,20.555421701018101,-0.37112091565709426,50.0,19.444578298981899,0.37112091565709426,0.0,19.382848472282461,-0.25563253281987991,0.0,19.382848472282461,0.25563253281988008,0.0,20.063856964203499,0.66171063798146923,24.500000000452864,20.000000000499998,0.66799999995075454,24.500000000454918,20.000000000499998,0.50000000050000004,24.500000000449997,20.500000000499998,5.0000000000000003e-10,24.500000000449997,20.000000000499998,5.0000000000000003e-10,24.500000000449997,20.250000000499998,-0.24999999949999999,24.500000000449997,19.332000000000001,8.1806406183043198e-17,0.0,19.34483543269064,-0.13032033510677374,0.0,19.338546070672109,-0.066463370903274435,24.500000000452783,19.869679664893226,-0.6551645673093579,50.0,19.805770444058162,-0.6357779171171124,25.500000000549999,19.850617789403717,-0.64938221059627965,25.500000000549999,20.371120915657094,-0.5554217010181004,50.0,20.312221840408846,-0.58690391263549335,25.500000000549999,20.371120915657094,-0.5554217010181004,25.500000000549999,19.527652670167384,-0.47234732983261374,24.500000000449997,19.561347545649014,-0.49999999950000001,24.500000000449997,19.750000000499998,-0.24999999949999999,24.500000000449997,20.0,-0.66800000000000004,0.0,20.130320335106774,-0.65516456730935801,0.0,20.066463370903275,-0.66145392932788882,24.500000000452776,19.808276688015184,0.63653817790978506,25.500000000549999,19.850617790170975,0.64938221082902414,25.500000000549999,20.000000000499998,0.50000000050000004,25.500000000549999,19.744367467180119,0.61715152771753945,0.0,19.628879084342906,-0.55542170101810029,0.0,19.628879084342906,0.5554217010181004,0.0,19.936143035799105,0.66171063798172591,25.500000000547129,20.0,0.66800000000000004,25.500000000545075,20.000000000499998,0.50000000050000004,25.500000000549999,19.750000000499998,0.25000000049999999,24.500000000449997,20.000000000499998,0.50000000050000004,24.500000000449997,19.52765267071663,0.47234733028336812,24.500000000449997,19.382848472282461,-0.25563253281987991,50.0,19.363461822090215,-0.19172331198481735,25.500000000549999,19.382848472282461,-0.25563253281987991,25.500000000549999,20.617151527717539,0.25563253281988024,50.0,20.617151527717539,-0.25563253281988041,50.0,20.65516456730936,0.13032033510677382,50.0,20.191723311987325,0.63653817790902478,24.500000000449994,20.149382210596279,0.64938221059628054,24.500000000449997,20.000000000499998,0.50000000050000004,24.500000000449997,19.750000000499998,-0.24999999949999999,25.500000000549999,20.000000000499998,-0.49999999950000001,25.500000000549999,19.527652670167384,-0.47234732983261374,25.500000000549999,19.34483543269064,-0.13032033510677374,50.0,19.332000000000001,8.1806406183043198e-17,50.0,19.338289362018273,-0.063856964200893027,25.500000000547136,19.850617790170975,0.64938221082902414,25.500000000549999,19.808276688015184,0.63653817790978506,25.500000000549999,19.869679664893226,0.65516456730935801,50.0,20.65516456730936,0.13032033510677382,50.0,20.65516456730936,-0.13032033510677399,50.0,20.667999999999999,-1.636128123660864e-16,50.0,19.485284740861871,-0.4207218586019853,25.500000000549996,19.444578298981899,-0.37112091565709415,25.500000000549999,19.500000000499998,5.0000000000000003e-10,25.500000000549999,19.527652670167384,0.47234732983261379,50.0,19.56134754686752,0.50000000050000004,25.500000000549999,19.527652670167384,0.47234732983261379,25.500000000550006,19.527652670167384,0.47234732983261379,25.500000000550006,19.500000000499998,0.43865245435098366,25.500000000549999,19.486946228287412,0.4227463868877227,25.500000000549996,19.382848472282461,-0.25563253281987991,24.500000000449994,19.364222082882126,-0.19422955593933008,24.500000000449994,19.382848472282461,-0.25563253281987991,0.0,19.444578298981899,-0.37112091565709415,0.0,19.527652670167384,-0.47234732983261374,0.0,19.486946228285749,-0.4227463868856981,24.500000000449994,19.628879084342906,0.5554217010181004,50.0,19.744367467180119,0.61715152771753945,50.0,19.687778159591154,0.58690391263549335,25.500000000549999,19.936143035796501,-0.66171063798146912,24.500000000452864,20.000000000499998,-0.66799999995075443,24.500000000454918,20.000000000499998,-0.49999999950000001,24.500000000449997,20.617151527717539,0.25563253281988024,0.0,20.555421701018101,0.37112091565709421,0.0,20.585669316101381,0.31453160806581998,24.500000000449994,19.869679664893226,0.65516456730935801,0.0,19.744367467180119,-0.61715152771753945,0.0,19.744367467180119,0.61715152771753945,0.0,19.561347545649014,-0.49999999950000001,24.500000000449997,19.527652670167384,-0.47234732983261374,24.500000000449997,19.527652670167384,-0.47234732983261374,0.0,20.371120915657094,0.55542170101810029,50.0,20.255632532819881,-0.61715152771753945,50.0,20.371120915657094,-0.5554217010181004,50.0,20.371120915657094,0.55542170101810029,24.500000000449994,20.312221840411155,0.58690391263425867,24.500000000449994,20.000000000499998,0.50000000050000004,24.500000000449997,20.130320335106774,0.65516456730935801,50.0,20.149382210596279,0.64938221059628054,25.500000000549999,20.130320335106774,0.65516456730935801,25.500000000549267,19.414330683899852,0.31453160806812969,25.500000000549999,19.444578298981899,0.37112091565709426,25.500000000549999,19.500000000499998,5.0000000000000003e-10,25.500000000549999,19.687778159591154,0.58690391263549335,25.500000000549999,19.744367467180119,0.61715152771753945,25.500000000549999,20.000000000499998,0.50000000050000004,25.500000000549999,20.555421701018101,0.37112091565709421,0.0,20.472347329832616,0.47234732983261374,0.0,20.513053771714251,0.42274638688569816,24.500000000449994,20.555421701018101,0.37112091565709421,24.500000000449994,20.585669316101381,0.31453160806581998,24.500000000449994,20.555421701018101,0.37112091565709421,0.0,20.472347329832612,-0.4723473298326139,0.0,20.500000000499998,-0.43865245313248163,24.500000000449997,20.472347329832612,-0.4723473298326139,24.500000000449994,19.444578298981899,0.37112091565709426,25.500000000549999,19.486946228287412,0.4227463868877227,25.500000000549996,19.500000000499998,5.0000000000000003e-10,25.500000000549999,19.869679664893226,-0.6551645673093579,24.500000000450722,19.936143035796501,-0.66171063798146912,24.500000000452864,20.000000000499998,-0.49999999950000001,24.500000000449997,19.628879084342906,0.5554217010181004,50.0,19.628879084342906,-0.55542170101810029,50.0,19.744367467180119,0.61715152771753945,50.0,20.438652454350983,-0.49999999950000001,25.500000000549999,20.000000000499998,-0.49999999950000001,25.500000000549999,20.250000000499998,-0.24999999949999999,25.500000000549999] + arx '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' + operations 'eJzTyCkw5NIDAAWnAW4=' +END SURFACE diff --git a/openEMS.pro b/openEMS.pro index a631258..07c8b28 100644 --- a/openEMS.pro +++ b/openEMS.pro @@ -1,25 +1,32 @@ # ------------------------------------------------- # Project created by QtCreator 2010-02-26T22:34:51 # ------------------------------------------------- -QT -= gui \ - core TARGET = openEMS CONFIG += console CONFIG -= app_bundle qt TEMPLATE = app OBJECTS_DIR = obj +INCLUDEPATH += . INCLUDEPATH += ../CSXCAD \ ../fparser \ ../tinyxml -LIBS += -L../CSXCAD \ - -lCSXCAD \ - -L../fparser \ - -lfparser \ - -L../tinyxml \ - -ltinyxml \ - -lboost_thread \ - -lhdf5 \ - -lhdf5_cpp +LIBS += -L../CSXCAD -lCSXCAD + +win32 { + INCLUDEPATH += ../hdf5/include ../boost/include/boost-1_42 + LIBS += ../hdf5/lib/libhdf5_cpp.a ../hdf5/lib/libhdf5.a + LIBS += ../boost/lib/libboost_thread-mgw44-mt.lib + LIBS += -L../CSXCAD/release + LIBS += ../fparser/release/libfparser4.a + LIBS += ../tinyxml/release/libtinyxml2.a +} +!win32 { + LIBS += ../fparser/libfparser.so + LIBS += ../tinyxml/libtinyxml.so + LIBS += -lboost_thread + LIBS += -lhdf5 -lhdf5_cpp +} + QMAKE_LFLAGS += \'-Wl,-rpath,\$$ORIGIN/../CSXCAD\' QMAKE_LFLAGS += \'-Wl,-rpath,\$$ORIGIN/../fparser\' QMAKE_LFLAGS += \'-Wl,-rpath,\$$ORIGIN/../tinyxml\' @@ -38,9 +45,13 @@ SOURCES += main.cpp \ openems.cpp \ FDTD/engine_multithread.cpp \ FDTD/operator_cylinder.cpp \ - FDTD/engine_cylinder.cpp \ + FDTD/engine_cylinder.cpp \ FDTD/engine_sse.cpp \ - FDTD/operator_sse.cpp + FDTD/operator_sse.cpp \ + FDTD/operator_extension.cpp \ + FDTD/engine_extension.cpp \ + FDTD/engine_ext_mur_abc.cpp \ + FDTD/operator_ext_mur_abc.cpp HEADERS += tools/ErrorMsg.h \ tools/AdrOp.h \ tools/constants.h \ @@ -55,13 +66,72 @@ HEADERS += tools/ErrorMsg.h \ examples/FDTD_examples.h \ openems.h \ FDTD/engine_multithread.h \ - FDTD/operator_cylinder.h \ - FDTD/engine_cylinder.h \ + FDTD/operator_cylinder.h \ FDTD/engine_sse.h \ - FDTD/operator_sse.h -QMAKE_CXXFLAGS_RELEASE = -O3 \ + FDTD/operator_sse.h \ + FDTD/engine_cylinder.h \ + FDTD/operator_extension.h \ + FDTD/engine_extension.h \ + FDTD/engine_ext_mur_abc.h \ + FDTD/operator_ext_mur_abc.h +QMAKE_CXXFLAGS_RELEASE = -O2 \ -g \ - -march=native + -march=native QMAKE_CXXFLAGS_DEBUG = -O0 \ -g \ -march=native + + +# +# to use ABI2 target: +# qmake CONFIG+="ABI2 bits64" -o Makefile.ABI2-64 openEMS.pro +# make -fMakefile.ABI2-64 +# + +ABI2 { + CONFIG-=debug debug_and_release + CONFIG+=release + QMAKE_CFLAGS_RELEASE=-O2 -fabi-version=2 + QMAKE_CXXFLAGS_RELEASE=-O2 -fabi-version=2 + QMAKE_CC = apgcc + QMAKE_CXX = apg++ + QMAKE_LINK = apg++ + QMAKE_LINK_SHLIB = apg++ + QMAKE_LFLAGS_RPATH = + QMAKE_LFLAGS = \'-Wl,-rpath,\$$ORIGIN/lib\' +} + +bits64 { + QMAKE_CXXFLAGS_RELEASE+=-m64 -march=athlon64 + QMAKE_LFLAGS_RELEASE+=-m64 -march=athlon64 + OBJECTS_DIR = ABI2-64 + LIBS = ../CSXCAD/ABI2-64/libCSXCAD.so + LIBS += ../fparser/ABI2-64/libfparser.so + LIBS += ../tinyxml/ABI2-64/libtinyxml.so + LIBS += ../boost-64/lib/libboost_thread.so + LIBS += ../hdf5-64/lib/libhdf5.so + LIBS += ../hdf5-64/lib/libhdf5_cpp.so -lpthread + INCLUDEPATH += ../hdf5-64/include + INCLUDEPATH += ../boost-64/include +} + +bits32 { + QMAKE_CXXFLAGS_RELEASE+=-m32 -march=i686 + QMAKE_LFLAGS_RELEASE+=-m32 -march=i686 + OBJECTS_DIR = ABI2-32 + LIBS = ../CSXCAD/ABI2-32/libCSXCAD.so + LIBS += ../fparser/ABI2-32/libfparser.so + LIBS += ../tinyxml/ABI2-32/libtinyxml.so + LIBS += ../boost-32/lib/libboost_thread.so + LIBS += ../hdf5-32/lib/libhdf5.so + LIBS += ../hdf5-32/lib/libhdf5_cpp.so + INCLUDEPATH += ../hdf5-32/include + INCLUDEPATH += ../boost-32/include +} + +ABI2 { + DESTDIR = $$OBJECTS_DIR + MOC_DIR = $$OBJECTS_DIR + UI_DIR = $$OBJECTS_DIR + RCC_DIR = $$OBJECTS_DIR +} diff --git a/openems.cpp b/openems.cpp index 6fca5e4..38d42da 100644 --- a/openems.cpp +++ b/openems.cpp @@ -22,6 +22,7 @@ #include "FDTD/engine_cylinder.h" #include "FDTD/engine_multithread.h" #include "FDTD/engine_sse.h" +#include "FDTD/operator_ext_mur_abc.h" #include "FDTD/processvoltage.h" #include "FDTD/processcurrent.h" #include "FDTD/processfields_td.h" @@ -265,6 +266,18 @@ int openEMS::SetupFDTD(const char* file) if (FDTD_Op->SetGeometryCSX(&CSX)==false) return(2); + /**************************** create all operator/engine extensions here !!!! **********************************/ + //Mur-ABC + for (int n=0;n<6;++n) + { + if (bounds[n]==2) + { + Operator_Ext_Mur_ABC* op_ext_mur = new Operator_Ext_Mur_ABC(FDTD_Op); + op_ext_mur->SetDirection(n/2,n%2); + FDTD_Op->AddExtension(op_ext_mur); + } + } + FDTD_Op->CalcECOperator(); SetupExcitation(FDTD_Opts->FirstChildElement("Excitation")); diff --git a/tools/array_ops.cpp b/tools/array_ops.cpp index 31446f0..6764c5e 100644 --- a/tools/array_ops.cpp +++ b/tools/array_ops.cpp @@ -18,6 +18,33 @@ #include "array_ops.h" #include +FDTD_FLOAT** Create2DArray(const unsigned int* numLines) +{ + FDTD_FLOAT** array=NULL; + unsigned int pos[3]; + array = new FDTD_FLOAT*[numLines[0]]; + for (pos[0]=0;pos[0]