meepはまたしばらく封印です。十数年前、、、インターフェースがschemeとC++だけで、schemeはポーランド記法がめんどくさい(当時の私見です)し、C++は何となくめんどくさい(当時の私見です。昔はコンパイラは有料でした。Linuxだと無料だけど、環境を整えるのも大変でした。)というイメージがあって、解説も英語だけだったので断念してたけど、今はpythonが使えてgoogle翻訳も優秀なので、とっかかりやすくなったので、やってみたけど、やっぱり断念。なぜかというと、electromagneticsシミュレーションを謳っているのにexampleが光学系ばっかりで、ヒントが少なすぎるから。
例えば、導体として銅を用いたダイポールアンテナの近傍解っていうと
- # -*- coding: utf-8 -*-
- # From the Meep tutorial: plotting permittivity and fields of a straight waveguide
- from __future__ import division
- import meep as mp
- from meep.materials import Cu
- cell = mp.Vector3(32,32,0)
- elm1 = mp.Block(mp.Vector3(6,1,0),center=mp.Vector3(-3.5,0,0),material=Cu)
- elm2 =mp.Block(mp.Vector3(6,1,0),center=mp.Vector3(3.5,0,0),material=Cu)
- geometry=[elm1,elm2]
- sources = [mp.Source(mp.ContinuousSource(frequency=0.15),
- component=mp.Ex,
- center=mp.Vector3(0,0,0))]
- pml_layers = [mp.PML(1.0)]
- resolution = 16
- sim = mp.Simulation(cell_size=cell,
- boundary_layers=pml_layers,
- geometry=geometry,
- sources=sources,
- resolution=resolution)
- sim.run(until=200)
- import numpy as np
- import matplotlib.pyplot as plt
- fig = plt.figure()
- eps_data = sim.get_array(center=mp.Vector3(), size=cell, component=mp.Dielectric)
- fig.add_subplot(2, 2, 1)
- plt.imshow(eps_data.transpose(), interpolation='spline36', cmap='binary')
- plt.axis('off')
- ex_data = sim.get_array(center=mp.Vector3(), size=cell, component=mp.Ex)
- fig.add_subplot(2, 2, 2)
- plt.imshow(eps_data.transpose(), interpolation='spline36', cmap='binary')
- plt.imshow(ex_data.transpose(), interpolation='spline36', cmap='RdBu', alpha=0.9)
- plt.axis('off')
- ey_data = sim.get_array(center=mp.Vector3(), size=cell, component=mp.Ey)
- fig.add_subplot(2, 2, 3)
- plt.imshow(eps_data.transpose(), interpolation='spline36', cmap='binary')
- plt.imshow(ey_data.transpose(), interpolation='spline36', cmap='RdBu', alpha=0.9)
- plt.axis('off')
- ez_data = sim.get_array(center=mp.Vector3(), size=cell, component=mp.Ez)
- fig.add_subplot(2, 2, 4)
- plt.imshow(eps_data.transpose(), interpolation='spline36', cmap='binary')
- plt.imshow(ez_data.transpose(), interpolation='spline36', cmap='RdBu', alpha=0.9)
- plt.axis('off')
- plt.show()
でいけそう(銅の棒をごく狭いギャップを以て配置してその間に電界を定義する、、、デルタギャップ給電と言うらしい)、、、なのに、、、
(mp) root@r822:~/work/meep/study1# /home/hoge/miniconda3/envs/mp/bin/python /home/hoge/work/meep/study1/dipole_near.py
-----------
Initializing structure...
time for choose_chunkdivision = 0.00114012 s
Working in 2D dimensions.
Computational cell is 32 x 32 x 0 with resolution 16
block, center = (-3.5,0,0)
size (6,1,0)
axes (1,0,0), (0,1,0), (0,0,1)
dielectric constant epsilon diagonal = (1,1,1)
block, center = (3.5,0,0)
size (6,1,0)
axes (1,0,0), (0,1,0), (0,0,1)
dielectric constant epsilon diagonal = (1,1,1)
time for set_epsilon = 0.747213 s
lorentzian susceptibility: frequency=9.01728, gamma=3.47222
lorentzian susceptibility: frequency=4.27474, gamma=2.59146
lorentzian susceptibility: frequency=2.38498, gamma=0.851721
lorentzian susceptibility: frequency=0.234707, gamma=0.304878
drude susceptibility: frequency=1e-10, gamma=0.0241966
-----------
Meep progress: 5.25/200.0 = 2.6% done in 4.0s, 148.9s to go
on time step 168 (time=5.25), 0.0238979 s/step
Traceback (most recent call last):
File "/home/hoge/work/meep/study1/dipole_near.py", line 30, in <module>
sim.run(until=200)
File "/home/hoge/miniconda3/envs/mp/lib/python3.9/site-packages/meep/simulation.py", line 3647, in run
self._run_until(until, step_funcs)
File "/home/hoge/miniconda3/envs/mp/lib/python3.9/site-packages/meep/simulation.py", line 2196, in _run_until
self.fields.step()
File "/home/hoge/miniconda3/envs/mp/lib/python3.9/site-packages/meep/__init__.py", line 3948, in step
return _meep.fields_step(self)
RuntimeError: meep: simulation fields are NaN or Inf
Elapsed run time = 6.7734 s
となって、エラーで終わります。どこかで誘電率を負の数にしてやっている例があったので
elm1 = mp.Block(mp.Vector3(6,1,0),center=mp.Vector3(-3.5,0,0),material=mp.Medium(epsilon=-1e12))
elm2 =mp.Block(mp.Vector3(6,1,0),center=mp.Vector3(3.5,0,0),material=mp.Medium(epsilon=-1e12))
でやってみると、
ってなる。なんかそれらしい結果が出るっちゃ出るんだけど、あってるかどうかを確認する術がない。何か例があってそれを発展させて自身の課題を調査するって進め方ができないと、なかなか自信をもって次のステップには進めないなぁってことで、今回もmeepは断念。
Meep is a free and open-source software package for electromagnetics simulation via the finite-difference time-domain (FDTD) method spanning a broad range of applications.
って言ってるんだからもう少し、電磁界解析の例を増やしてほしいですよまじで。
コメントをお書きください