我正在尝试使用Python-Meep包进行一些FDTD模拟。首先,我想模拟在'z'方向上穿过真空的平面波。在三维情况下正确设置源代码时遇到问题。在2D情况下,我可以将源代码作为触及计算矩阵边界的线。在3D中,它看起来是不可能的。以下是简单的例子。 2D情况下,源是从(x,y)=(0,.1e-6)到(x,y)=(15e-6,.1e-6)(从边界到边界)。得益于此,平面波无扰动地传播到矩阵的另一端(它被反射的地方)。在Python-Meep中为FDTD模拟设置源代码
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)=(0,0,.1e-6)〜(X,Y,Z)=(15E-6,15e-的平面6,.1e-6)。这应该创建一个从边界到矩阵边界的平面。但是,由于未知原因,源不会触及边界(有一个小空间),无论我做什么,我都不能强迫它触摸它。结果,我无法创建一个以'z'方向传播的平面波。直到现在我试图:(a)明确地给出no_pml
论点(b)给出pml(0)
论点,(c)改变采样,(d)改变源的'z'位置。没有运气。我会很感激任何建议。
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)