2017-07-15 26 views
0

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

回答

1

Screenshot of Ex1.vtk from Paraview你不能發送的均勻平面波與沿X軸的偏振電場確實體現在垂直於Y軸,其中,所述場幅度下降到零仿真體積邊界。這種問題不會發生在垂直於X的兩個邊界上。

這是完全物理的解決方案;默認情況下,邊界表現爲完美的電/磁導體;平行於PEC的電場分量在其附近必須爲零。 (良導體屏蔽外電場。)

如果您需要確切的平面波,你將有場的初始化後追加另一個命令,來定義的邊界,週期性:

f.use_bloch(meep.X, 0) f.use_bloch(meep.Y, 0)

請注意,第二個參數不必爲零,從而可以定義任意傾斜波源。

對於更高級(更方便)的示例,請參閱https://github.com/FilipDominec/python-meep-utils/blob/master/scatter.py