我正在嘗試使用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)