作成した基板の電磁界シミュレーションするまでをまとめます。Macでの作業です。
今回のゴールは以下です。
- openEMS のインストール
- gerber2ems のインストール
なお、このシミュレーターはパターンのみの確認しかできません。
部品実装状態でのシミュレーションは調査して、後にまとめるかもしれません。
さて、まずはインストールを始めましょう。
環境構築
まずは作業環境作ります。Python3.11を使用します。
(3.10 以上である必要であります。3.10、3.11 でOKなの確認済み)
$ brew install python@3.11 $ mkdir Simulation $ cd Simulation $ python3.11 -m venv venv $ . venv/bin/activate
openEMS のインストール
こちらの手順で進めます。(macOS)
docs.openems.de
[2024/03/28時点でエラー出ます。手動ビルドを行う必要があります。] $ brew tap thliebig/openems https://github.com/thliebig/openEMS-Project.git $ brew install --HEAD openems
エラー出ます。
-- Unable to determine HDF5 C flags from HDF5 wrapper. CMake Error at /opt/homebrew/Cellar/cmake/3.29.0/share/cmake/Modules/FindPackageHandleStandardArgs.cmake:230 (message): Could NOT find HDF5 (missing: HDF5_LIBRARIES HDF5_HL_LIBRARIES) (found suitable version "1.14.3", minimum required is "1.8")
cmakeのバグのようです。
github.com
しょうがないので手動でビルドします。
$ pip install cython numpy h5py matplotlib $ git clone --recursive https://github.com/thliebig/openEMS-Project.git $ cd openEMS-Project
以下3コマンドで CMakeLists.txt を書き換えます。
$ sed -i '.bk' 's/^find_package(HDF5 1.8 COMPONENTS C HL REQUIRED)/find_package(HDF5 COMPONENTS C HL REQUIRED)/g' AppCSXCAD/CMakeLists.txt && \ sed -i '.bk' 's/^find_package(HDF5 1.8 COMPONENTS C HL REQUIRED)/find_package(HDF5 COMPONENTS C HL REQUIRED)/g' CSXCAD/CMakeLists.txt && \ sed -i '.bk' 's/^find_package(HDF5 1.8 COMPONENTS C HL REQUIRED)/find_package(HDF5 COMPONENTS C HL REQUIRED)/g' openEMS/CMakeLists.txt
インストール実行
$ ./update_openEMS.sh ~/opt/openEMS $ echo 'export PATH="$HOME/opt/openEMS/bin:$PATH"' >> ~/.zprofile $ cat ~/.zprofile | tail -1 export PATH="$HOME/opt/openEMS/bin:$PATH"
./update_openEMS.sh ~/opt/openEMS --python とするとうまく仮想環境にインストールされないようで、gerber2ems のインストールチェックで以下エラーが出る場合があります。
ModuleNotFoundError: No module named 'CSXCAD'
なのでここで Pythonライブラリをインストールします。
$ cd ./openEMS/python $ python setup.py build_ext -I ~/opt/openEMS/include -L ~/opt/openEMS/lib -R ~/opt/openEMS/lib $ python setup.py install $ cd ../../CSXCAD/python $ python setup.py build_ext -I ~/opt/openEMS/include -L ~/opt/openEMS/lib -R ~/opt/openEMS/lib $ python setup.py install
ターミナルを開き直してインストールチェックです。
$ openEMS ---------------------------------------------------------------------- | openEMS 64bit -- version v0.0.36-15-g1ccf094 | (C) 2010-2023 Thorsten LiebigGPL license ---------------------------------------------------------------------- :
OK!!
gerber2ems のインストール
仮想環境を立ち上げます。
$ cd Simulation $ . venv/bin/activate
[2024/03/28 時点で後のインストールでエラー出るので以下モジュールを個別でインストールします。(Mac M1のみ)]
$ pip install git+https://github.com/drufat/triangle.git
インストール。
$ brew install python3-dev $ brew install gerbv $ git clone https://github.com/antmicro/gerber2ems.git $ cd gerber2ems $ pip install .
インストールチェックです。
$ gerber2ems --help usage: EM-Simulator [-h] [-c CONFIG_FILE] [-g] [-s] [-p] [-a] [--export-field] [--threads THREADS] [-d | -l {DEBUG,INFO,WARNING,ERROR}] :
OK!!
最後に、動作確認をしてみましょう。gerber2ems/examples/differential を実行してみます。
$ cd examples/differential $ gerber2ems -a
1分30秒ほどかかりました。
ems/results ディレクトリ内に結果が格納されます。
以下は差動インピーダンスの結果。
おまけ
Paraviewを使用して綺麗に見せることもできるようです。
$ brew install paraview $ gerber2ems -a --export-field
Paraviewを開いて確認します。
(実際はもっとぬるぬる動きます。)
結構時間かかるので、実際の基板では必要なところだけ切り取ってシミュレーションした方がようさそうですね。