2017-07-15 12 views
0

私は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) 

答えて

1

Screenshot of Ex1.vtk from Paraviewあなたできないことは、実際のフィールド振幅がゼロになるY軸に垂直なシミュレーション体積の境界で現れます。この問題は、Xに垂直な2つの境界では発生しません。

これは完全に物理的な解決方法です。デフォルトでは、境界は完全な電気/磁気伝導体として振る舞います。 PECに平行な電場成分はその近傍でゼロでなければならない。 (。グッド導体は外部電界を遮蔽)

あなたは、正確な平面波が必要な場合は、定期的なとして境界を定義するには、フィールドの初期化後に別のコマンドを追加する必要があります:

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

第2のパラメータはゼロである必要はなく、任意の傾斜波源の定義を可能にすることに注意してください。

詳細については、https://github.com/FilipDominec/python-meep-utils/blob/master/scatter.py

を参照してください。