OpenEMSモデリングの基本

最後の部分では、オープンソース電磁シミュレーターopenEMSのインストールおよび構成方法について説明しました 。 これで、モデリングに進むことができます。 この記事では、openEMSとOctaveを使用してEMVをモデル化する方法について説明します。



2つの平行な金属板間での電磁波(EMW)の伝播プロセスをシミュレートします。



オブジェクトの構成を図に示します。 長方形の電磁波源が想定されており、そこから電磁波は両方向に伝播します。







猫の下には、そのようなオブジェクトをモデル化するためのスクリプトの行ごとの解析があります。



前のパートで述べたように、openEMSのすべてのシミュレーションはOctave / Matlabスクリプトです。 Octave / Matlabを起動し、次のコマンドを入力します。 最初にスペースを初期化します。 時間領域の有限差分の空間を記述する特別なFDTDオブジェクトを作成します。

FDTD = InitFDTD('NrTS',100,'EndCriteria',0,'OverSampling',50);
      
      







関数パラメーターは、ゼロからの時間での100ポイントの計算です。 タイムステップは、ナイキスト周波数とEMWソースの周波数に基づいて自動的に選択されます。 別のポイント数、たとえば1000を設定してみてください。



次に、周波数が10 MHzの電磁波のソースを設定します。 ここで、関数パラメータは名前から明らかです。



 FDTD = SetSinusExcite(FDTD,10e6);
      
      







電磁波のシミュレーションには、境界条件が必要です。 境界条件は、3つの座標軸X、Y、Zのそれぞれの方向のスペースに制限される材料の特性を記述します。 関数のパラメーターの境界条件の順序は次のとおりですX +、X-、Y +、Y-、Z +、Z -.Y軸に沿った正方向の空間は、完全に導電性の表面(PEC-完全電気伝導体)によって制限され、Y-に沿った負方向にも導電性の表面。 PMCは完璧です

磁気導体。 MURは完全に吸収する誘電体です。 無響室の壁の材料にほぼ対応しています。



 FDTD = SetBoundaryCond(FDTD,{'PMC' 'PMC' 'PEC' 'PEC' 'MUR' 'MUR'});
      
      







境界条件には、特別な多層材料(PML_x)も使用できます。 6〜20のレイヤー(PML_8、PML_10など)を持つことができます。 この材料は、吸収誘電体としても機能します。



境界条件が設定された後、システムのジオメトリが設定されるCSXスペースを初期化します。

 CSX = InitCSX();
      
      







次に、グリッドを作成する必要があります。 電磁波の伝播の計算は、グリッドによって制限された空間内で実行されます。 まず、座標(X * Y * Z = 20x20 * 40メートル)でグリッドの寸法を設定します。

 mesh.x = -10:10; mesh.y = -10:10; mesh.z = -10:30;
      
      







関数を使用して、グリッド自体を長方形座標で作成します

DefineRectGrid()をジオメトリに適用します(グリッド間隔は1メートル):



 CSX = DefineRectGrid(CSX,1,mesh);
      
      







次に、EMWのソースを作成します。 EMWの振幅とEMWのベクトルの方向を設定します。 これを行うには、AddExcitation関数を使用します。



 CSX = AddExcitation(CSX,'excitation',0,[0 1 0]);
      
      







関数の最初と2番目のパラメーターは、それぞれCSXスペースの名前とEMWのソースの名前です。 関数の3番目のパラメーターはフィールドのタイプです。 次のタイプが利用可能です。



ハード励起とソフト励起の違いは、ハード励起では、空間内の特定のポイントでのEMW振幅が強制値に設定され、ソフト励起では、フィールドの重ね合わせが計算されることです。つまり、EMWはスペース内のこのポイントで利用可能なフィールドに重畳されます。



4番目のパラメーターは、成分が3つの方向X、Y、ZのEMWの振幅を指定するベクトルです。



したがって、Y軸の方向に1 V / mの振幅を持つ電界による励起を設定します。



次に、EMVを配布するプラットフォーム(AddBox)を作成します。 このサイトは、実際にはEMWのソースです。

 CSX = AddBox(CSX,'excitation',0,[-10 -10 0],[10 10 0]);
      
      







これで、ジオメトリの説明が完了しました。 ジオメトリを説明した後、電磁波の伝播を観察するセクションを作成する必要があります。 これは、AddDump()およびAddBox()関数を使用して行われます。



 CSX = AddDump(CSX,'Et'); CSX = AddBox(CSX,'Et',0,[-10 0 -10],[10 0 30]);
      
      







現在、計算結果を保存し、CSXCADを使用してジオメトリを表示するための一時ディレクトリを準備しています。



 mkdir('tmp'); WriteOpenEMS('/tmp/tmp.xml',FDTD,CSX); CSXGeomPlot('/tmp/tmp.xml'); invoking AppCSXCAD, exit to continue script... QCSXCAD - disabling editing
      
      







すべて、構造のモデルの準備ができました。 シミュレーターを実行できます。 すべてが正常であれば、次のレポートが表示されます。

 RunOpenEMS('tmp','/tmp/tmp.xml',''); ---------------------------------------------------------------------- | openEMS 64bit -- version v0.0.32-14-g63adb58 | (C) 2010-2013 Thorsten Liebig <thorsten.liebig@gmx.de> GPL license ---------------------------------------------------------------------- Used external libraries: CSXCAD -- Version: v0.5.2-15-gcb5b3cf hdf5 -- Version: 1.8.13 compiled against: HDF5 library version: 1.8.13 tinyxml -- compiled against: 2.6.2 fparser boost -- compiled against: 1_54 vtk -- Version: 5.10.1 compiled against: 5.10.1 Create FDTD operator (compressed SSE + multi-threading) FDTD simulation size: 21x21x41 --> 18081 FDTD cells FDTD timestep is: 1.92583e-09 s; Nyquist rate: 25 timesteps @1.03851e+07 Hz Excitation signal length is: 100 timesteps (1.92583e-07s) Max. number of timesteps: 100 ( --> 1 * Excitation signal length) Create FDTD engine (compressed SSE + multi-threading) Running FDTD engine... this may take a while... grab a cup of coffee?!? Time for 100 iterations with 18081 cells : 0.1624 sec Speed: 11.1336 MCells/s
      
      







シミュレーションが完了し、結果を表示できます。 Paraviewを起動します。 次に、[ファイル]-> [開く]を選択し、シミュレーション結果が保存されている一時ディレクトリに移動します。 そこで、Et_.vtrファイルを開きます。 このファイルには、EMW伝播のプロセスを時間内に計算した結果に関する情報が含まれています。 開く必要があるものは次のとおりです。ファイルへの別のパスがあります。







Paraviewウィンドウに平面が表示されます。これは、EMWの振幅を確認するセクションです。







電磁波の振幅を視覚化するには、Coloringドロップダウンリストで電界を選択し(デフォルトではSolidColorがあります)、色の凡例を表示する必要があります(Showをクリックします)。 これで、時間t = 0でのEMWの振幅がわかります。 最初の時点では、EMWの振幅もすべての空間でゼロに等しいため、平面全体が1色で塗りつぶされます。 EMV分布を表示するには、ゼロ以外の時間を設定し、[再スケール]ボタンを押す必要があります。 これで、EMWの振幅の分布が平面に表示されます。







また、アニメーションを開始して、EMW伝播のプロセスを時間内に表示できます。 予想どおり、EMWはソースプレーンから両方向に伝播します。



その結果、特定の空間領域でのEMW伝播のプロセスを時間領域でシミュレートしました。 結論として、Octave / Matlabスクリプト全体:



 FDTD = InitFDTD('NrTS',1000,'EndCriteria',0,'OverSampling',1); FDTD = SetSinusExcite(FDTD,10e6); FDTD = SetBoundaryCond(FDTD,{'PMC' 'PMC' 'PEC' 'PEC' 'MUR' 'MUR'}); CSX = InitCSX(); mesh.x = -10:10; mesh.y = -10:10; mesh.z = -10:30; CSX = DefineRectGrid(CSX,1,mesh); CSX = AddExcitation(CSX,'excitation',0,[0 1 0]); CSX = AddBox(CSX,'excitation',0,[-10 -10 0],[10 10 0]); CSX = AddDump(CSX,'Et'); CSX = AddBox(CSX,'Et',0,[-10 0 -10],[10 0 30]); mkdir('tmp'); WriteOpenEMS('/tmp/tmp.xml',FDTD,CSX); CSXGeomPlot('/tmp/tmp.xml'); RunOpenEMS('tmp','/tmp/tmp.xml','');
      
      







openEMSに関する以前の記事へのリンク: habrahabr.ru/post/255317



OpenEMSプロジェクトサイト: openems.de



All Articles