首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >在Python中设置FDTD仿真源

在Python中设置FDTD仿真源
EN

Stack Overflow用户
提问于 2017-07-15 20:35:15
回答 1查看 847关注 0票数 0

我正在尝试使用Python软件包进行一些FDTD模拟。首先,我想模拟一个平面波沿“z”方向穿过真空。在三维情况下,我很难正确地设置源文件。在2D情况下,我可以将源作为一条与计算矩阵的边界相接触的线。在3D中,这看起来是不可能的。下面是简单的例子。

2D情况:在2D情况下,源是从(x,y)=(0,.1e-6)到(x,y)=(15e-6,.1e-6) (从边界到边界)的一条线。由于这一点,平面波不受干扰地传播到矩阵的另一端(在那里它被反射)。

代码语言:javascript
运行
复制
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)

三维情况:源是从(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‘位置。没有运气。如有任何建议,我将不胜感激。

代码语言:javascript
运行
复制
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)
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-07-15 22:36:57

你不能发送沿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

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/45122511

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档