私はPython-Meepパッケージを使用してFDTDシミュレーションを実行しようとしています。まず、真空を 'z'方向に進む平面波をシミュレートしたい。 3次元の場合にソースを適切に設定するのに問題があります。 2Dの場合、私は計算行列の境界線に触れる線としてソースを作ることができます。 3Dでは、不可能なように見えます。以下は簡単な例です。FDTDシミュレーションのためのPython-Meepのソースの設定
2Dケースの場合、ソースは(x、y)=(0、.1e-6)から(x、y)=(15e-6、.1e-6)(from国境への国境)。これにより、平面波は、マトリックスの反対側の端(反射されるところ)まで邪魔されずに移動しています。
import meep_mpi as meep
x, y, voxelsize = 15e-6, 15e-6, 50e-9
vol = meep.vol2d(x, y, 1/voxelsize)
class Model(meep.Callback):
def __init__(self):
meep.Callback.__init__(self)
def double_vec(self, r):
return 1
model = Model()
meep.set_EPS_Callback(model.__disown__())
struct = meep.structure(vol, meep.EPS)
f = meep.fields(struct)
f.add_volume_source(meep.Ex,
meep.continuous_src_time(473.755e12/3e8), # 632.8nm
meep.volume(meep.vec(0e-6, .1e-6), meep.vec(15e-6, .1e-6)))
while f.time()/3e8 < 30e-15:
f.step()
meep.del_EPS_Callback()
output = meep.prepareHDF5File("Ex1.h5")
f.output_hdf5(meep.Ex, vol.surroundings(), output)
del(output)
3D場合:ソースは(X、Y、Z)=(15E-6、15e-に(X、Y、Z)=(0、0、.1E-6)から面であります6、.1e-6)。これにより、境界線から境界線までの平面が作成されます。しかし、未知の理由から、ソースは境界に触れず(小さな空きスペースがあります)、私が何をしても、ソースに触れることはできません。その結果、私は 'z'方向に進行する平面波を作ることができません。今まで私は、(a)明示的にno_pml
引数を与え、(b)pml(0)
引数を与え、(c)サンプリングを変更し、(d)ソースの 'z'位置を変更しようとしました。運がない。私はどんな提案にも感謝します。 X軸に沿って偏光した電界と均質平面波を送信する
import meep_mpi as meep
x, y, z, voxelsize = 15e-6, 15e-6, 15e-6, 50e-9
vol = meep.vol3d(x, y, z, 1/voxelsize)
class Model(meep.Callback):
def __init__(self):
meep.Callback.__init__(self)
def double_vec(self, r):
return 1
model = Model()
meep.set_EPS_Callback(model.__disown__())
struct = meep.structure(vol, meep.EPS)
f = meep.fields(struct)
f.add_volume_source(meep.Ex,
meep.continuous_src_time(473.755e12/3e8), # 632.8nm
meep.volume(meep.vec(0, 0, .1e-6), meep.vec(15e-6, 15e-6, .1e-6)))
while f.time()/3e8 < 30e-15:
f.step()
meep.del_EPS_Callback()
output = meep.prepareHDF5File("Ex1.h5")
f.output_hdf5(meep.Ex, vol.surroundings(), output)
del(output)