簡體   English   中英

在Python-Meep中設置源以進行FDTD仿真

[英]Setting source in Python-Meep for FDTD simulation

我正在嘗試使用Python-Meep包進行一些FDTD仿真。 首先,我要模擬一個平面波,該平面波在'z'方向通過真空傳播。 我在以三維方式正確設置源時遇到問題。 在2D情況下,我可以將源制作為一條接觸計算矩陣邊界的線。 在3D中,這似乎是不可能的。 以下是簡單的示例。

2D情況:在2D情況下,源是從(x,y)=(0,.1e-6)到(x,y)=(15e-6,.1e-6)的線(從邊界到邊界) 。 因此,平面波不受干擾地傳播到了矩陣的另一端(在那兒被反射)。

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)

Paraview的Ex1.vtk的屏幕截圖 實際上,您無法發送具有沿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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM