电磁有限差分频域求解器

fdfdp的Python项目详细描述


啊![](img/偶极子介质场.png)

#fdfdpy

这是一个纯python实现的有限差分频域(fdfd)方法。它使用scipy、numpy、matplotlib和mkl pardiso解算器。fdfdpy当前支持二维几何图形

##安装

python setup.py install

##结构

###初始化

fdfd类初始化为

simulation = Fdfd(omega, eps_r, dl, NPML, pol, L0)
  • ω:角频率,单位为“2π/秒”
  • eps:指定相对介电常数分布的numpy数组
  • dl:以l0为单位的空间网格大小
  • npml:定义pml网格数
  • 极化,其中一个是横向场。
  • l0:模拟长度刻度,默认为1e-6米(1微米)

为以下对象创建新的fdfd对象解算:

  • xrange:以l0为单位在x中定义空间域[最左位置,最右位置]
  • yrange:以l0为单位在y中定义空间域[最下面的位置,最上面的位置]
  • a:maxwell运算符,稍后用于求解E&M字段。
  • derivs:存储派生运算符的字典。

它还产生一个相对磁导率,mu_r,作为numpy.one(eps_r.shape)和一个源src作为numpy.zeros(eps_r.shape)

###添加资源是令人兴奋的!

可以通过手动编辑仿真对象内部的2d src数组将源添加到仿真中,

simulation.src[10,20:30] = 1

或者通过添加模态源,这些模态源被定义为二维域内的平面,该平面在其法向上发射模态。模态源定义可以通过

simulation.add_mode(neff, direction, center, width) simulation.setup_modes()
  • neff:定义模式的有效索引;这将用作特征值猜测
  • 方向:定义平面的法向,应为“x”或“y”
  • 中心:在单元格坐标[xc,yc]中定义平面的中心坐标
  • 宽度:以单元格数定义平面的宽度

请注意,添加模式后必须始终调用simulation.setup_mode s(),才能填充simulation.src

###电磁场的求解

现在,我们已经有了求解电磁场系统所需的一切,通过运行

fields = simulation.solve_fields(timing=False)

模拟。srcjzmz源项成比例,这取决于pol分别设置为'ez''hz'

字段是包含(ex,ey,hz)(hx,hy,ez)的元组,具体取决于极化。

###设置新的介电常数

如果要更改介电常数分布,可以运行

simulation.reset_eps(new_eps)

这将重建系统矩阵并将其存储在fdfd中。注意,如果任何模态源平面内的介电常数发生变化,也应调用simulation.setup_modes()。

###绘图

主字段(hz/ez)可以使用包含的帮助函数可视化:

simulation.plt_re(outline=True, cbar=True) simulation.plt_abs(outline=True, cbar=True)
<>这些可选地用等高线勾勒出介电常数,并可以提供一个MaMattLIB轴柄来绘制。

###要求

  • 努比
  • scipy
  • matplotlib

加载mkl解算器:

git submodule update –init –recursive

###待办事项

####无论何时 -[X]模态源。 -[X]更多的摄影绘图方法。 -[]x范围,年绘图上的ange标签。 -[]设置模态源振幅(和归一化) -[]增加运行本地jupyter笔记本的能力,该笔记本在hera上并行运行fdfd。 -[]保存fdfd对象中a的因子分解,以便以后在具有相同的a但不同的b对象时重用。 -[]允许源项具有(jx,jy,jz,mx,my,mz),这对于源不一定沿z方向的伴随物是有用的。 -[]清除导入(例如,将numpy导入为np从numpy导入abs,zeros,…

欢迎加入QQ群-->: 979659372 Python中文网_新手群

推荐PyPI第三方库


热门话题
如何将java ArrayList对象转换为实际值   web服务如何在JAVA类uisng JAXBElement中解组SOAP UI值   包含无值参数的java HttpClient表单URL   运行简单Camel Restlet演示项目的java问题?   带有自定义图标的java简单SWT警报消息?   java Netbeans 6.8:LibImport可以工作,但编译时“包不存在”   java如何获得绘画完成的通知?   java Hazelcast客户端模式群集故障后如何恢复?   Neo4J中Shapefile的java批插入   为什么ThreadPoolExecutor在Eclipse和从命令行运行Java程序时表现不同?   java在Android中计算两个坐标之间的距离时得到了荒谬的值   java在CardLayout中显示卡本身的下一张卡