每天一遍,防止忘记
初始建立仿真文件:
1.建立物理结构
?几何结构
?材料特性
2.定义仿真区域
?边界条件
3.设置激励源(光源)
4.设置监视器
?至少使用一个时间监视器
?分析组
?只记录需要的数据
运行与仿真:
1.运行仿真文件
?分布式并行运算
?并发式并行运算
2.参数扫描与优化
3.结果分析
?视觉化器visualize
?使用script文本程式
光源使用原则
Plane wave:平面波,周期性结构(或非周期结构,但PML阶段产生衍射时);如各类光栅、超导材料等。
Gaussian/NA source:高斯光束,非周期结构;如光栅耦合器,激光束照明,汇聚照明等。
dipole:偶极子点源,周期/非周期结构均可;如OLED/LED,Q值计算等。
TFSF:全场散射场光源,周期/非周期均可;如各类散射问题求解。
Mode Source:模式光源波导结构。如各类波导。
Import:自己设计,自定义输入。
TFSF使用的原则
FDTD region>>散射场≥mesh>光源>总场>结构
TFSF光源斜入射时对应的边界条件
1.无基底:TFSF光源+Bloch边界条件
2.有基底:TFSF光源+PML边界条件
光源斜入射 只能计算单波长,不能直接计算宽光谱结果。 想获得宽光谱结果,需扫描波长(固定角度),或扫描角度(固定波长)。
实例演示
平行入射纳米球的散射
1.建立物理结构
先打开辅助网格选项(Drawing Grid Properties),取消show grid和snap to grid选项。(此动作非必须,点选掉是为了方便观察。)
然后创建一个球体,设置半径为0.025nm。
选择金材质
注:可以在setting选项中设置长度单位。
2.定义仿真区域
因为球体是金属材质,所以在Mesh settings的mesh refinement选项中选择conformal variant 1。
边界全部使用PML。
设置完毕后确定,点击左侧zoom extend按钮,使视图合适。
3.设置激励源(光源)
设置全场散射场光源(TFSF)。
编辑光源的属性
设置大小
波长设置300-600nm
4.设置监视器
观察总场、散射场以及场分布。因此在analysis中选择Optical power。
选择optical power的cross section点击insert
前面我们提到了
仿真区域为600,因此这里散射场设置为160。
然后复制一个作为总场,更小,设置为90。
设置mesh
注意各项之间的大小关系
添加一个场分布监视器
设置为YZ面
再复制修改成一个XZ面
最后插入一个时间监视器
设置为传到无穷远衰减的情况。
模型设置结束,保存文件(切记保存文件不能包含中文路径)
运行前,先检查一下资源状况(resource选项下)
然后进行材料检查(点击fit and plot,拟合效果不是特别好)
调整参数
最后检查运行内存需求。
运行
运行后可以发现采样点有些过少,导致精度不够。
在monitors的global properties中设置,值越大,曲线越平滑。
监视器中也有frequency points这一选项。
为什么两个frequency point不设置一样的呢?这个值的大小对应输出结果的精度,精度越高,仿真运行需要的内存和时间就会越长。为了增加散场、总场的精度,我们将总点数设置较大,可以平滑曲线,而电场监视器设置过多的点虽然可以提高精度,但实际显示结果差别不大,所以,为了优化效果,建议减小点数。
这是监视器设置为5的结果
这是监视器设置为500的结果
反正我是没看出来什么明显的变化,其实时长变化也不大(电脑性能还是比较强)
据说可以在仿真设置中把精度提高来使球更清晰(*一次性加到了6,点数加到500)
==或许……吧……==也可能是软件本身显示分辨率的限制,反正仿真时间翻倍了。
500点散场
500点远场
此外,所有仿真默认是在真空中进行的。(背景折射率)
如果希望更改,在添加的仿真设置中找到background index中修改。1为真空中,其他的折射率需要自己输入,如20°时,水的折射率为1.33。
对监视器精度参数影响的尝试
现在已知的由global 中frequency points;监视器的frequency points;添加的mesh数值;仿真设置中的mesh等级。
全局100,监视器10,mesh3,mesh等级5全局50,监视器5,mesh3,mesh等级5
mesh降到4.5,运行时间大幅减短,更粗超。
结论:监视器的精度主要取决于mesh的数值,相对于其他参数而言更为敏感,同样,它对内存影响也最大。
核壳结构
制作一个金包银的结构
1.建立物理结构
银球核,设置为半径20纳米,银材质
壳为金,厚度设置为5纳米,因此外层半径25纳米,金材质。
此时结构并未做完,实际结构为外金,内银。是需要用银代替金球的内部。因此,银的 mesh order 优先级 需要比金的大。(金默认为2,银就要设置为1.)
为了方便观察结构,再将金的alpha值调低。这样透明度就变高。
2.定义仿真区域
老套路,设置大小
都是金属材质,所以选从formal variant1,mesh等级适当调大以提高精度。
3.设置激励源(光源)
4.设置监视器
添加散射场和总场。
和前一个实例设置相同套路。
添加mesh,在金上添加一个4nm网格,银上添加2nm网格。
添加电场监视器
同理添加XZ方向的,添加方法同上,上个例子中也已经介绍。
添加时间监视器(非必须),可以检查脉冲衰减情况。
检查材料
先对银进行检查
效果不是很好,调节参数
然后检查金的
弹出的对话框点击保存即可。
Yes
同样调整参数,进行拟合
检查结束,点击右下角close,选择保存。
看一下运行内存需求。
看来要用点时间了。
散场结果
总场结果
两电场监视器
YZ平面
XZ平面
个人对mesh网格的浅薄理解
个人理解,求证了学长,但大多数还都是我所认为是这样。
根据上面核壳结构中连续添加了几层mesh突然就想进一步了解一下mesh。
这是我用3dmax做的一个效果,在我看来模型的分段网格就很像mesh网格。
外黄色网格是正方体进行4分段形成的;红色网格是内部正方体进行8分段形成的。
这与前面金包银,金进行4nm细分,银进行2nm细分很类似。(mesh是以长度为单位,因此数值越小,对应的单位长度划分越细)
类比可以看出越细(密)的网格会将物体(构造)划分更为精细,这样结果就更加准确(土豆人和人的区别——网格的多少,当然也要技术,不然面再多也没用)
那么外粗(稀疏)内细(密)最终仿真的过程是如何的呢?我们看一下尺子。
外面的粗网格就相当于大刻度(cm)细网格就相当于小刻度(mm),仿真必然会以某一单位长度来作为仿真的最小跨度。因此,有细(密)网格罩住的地方,就依照细网格进行划分仿真,而粗网格(疏)部分最小跨度只有这些就会按照比较大的跨度进行仿真。显而易见,越细分,电脑仿真占用资源越多,这也是不建议划分过细、没有必要不要细分的原因。
周期性结构
全场散射场光源本质上还是一个平面波,因此是适用周期性结构的。
1.建立物理结构
这次在components-photonic crystals中选择一个已有的结构。
选择这样的周期性结构
这里面设计的是圆柱体,我们希望它是球,想要更改,就要编辑这个组中的脚本
将这里的circle(圆柱体)改为sphere(球体),这样z就没有用了,将33行注释掉
点击确认,可以看到变成了球体
可以看到nx、ny,这两个表示物体个数时11×11的;ax、ay表示相邻两个球球心之间的距离。下面半径设置为50nm,设置材料为金。
2.定义仿真区域
mesh选项适当调高。
依旧是金属材质,所以选那个1的。
在边界条件上,因为是周期分布的,所以XY方向选择Periodic。
这样就建好了一个结构
3.设置激励源(光源)
修改大小,波长设置为300-600nm。
4.设置监视器
添加散射场和总场,同上,这次散射场为180nm,总场120nm。
添加mesh为3nm,180nm跨度。
添加时间监视器100nm;100nm;100nm
拟合一下材料
最后检查内存就可以仿真了。
运行结果:
散场
总场
YZ面电场
XZ面电场
还没结束,注意前面的仿真区域,仿真区域中包含的是一个球体,那么这和整个阵列有什么关系吗?我额外对阵列进行了一次仿真。这次仿真区域包含9个球体,理论上它们之间还会发生一些干扰。
仿真区域加大,意味着仿真内存和时长会加长。没错,在其他没改的情况下仿真需求内存高达3.8G!!!吃了个晚饭才仿真完。
然而
上图是我最终的仿真结构,在最开始,为了保持各场之间的大小关系不变,我只是按倍数放大了各个区域,然后……报错了
Warning! The simulation that created the data in the monitors and sources below diverged, and the data is likely invalid. Please see the Diverging simulation page for help on solving this problem.
问题出在了各个 激励源、监视器大小 上,虽然等比例放大了,举个例子:450nm的仿真区域和400nm的光源,放大两倍后变成了900nm和800nm之间的间隔由50nm变成了100nm,而这100nm之间 存在仿真的结构。
这样就违反了我们之前的约定:结构大于了一些东西,至少光源小于了结构!!!
因此要时刻注意光源使用原则
好了,找到了问题所在,我改成了上面的结构,适当减小了mesh等一系列仿真精度的要求。
YZ面
XZ面
好像……没什么差别
突然想起来教程里好像说这个球间距有点大,可能相互之间作用不到……尤其在观察散场和总场的sigama的走势,趋势完全相同。
我又继续向下走了一步,既然距离远了,那就把距离调近。
球心间距离120nm。
这次有变化了!!!
散场
总场
YZ面
XZ面
距离更近后,相互影响的效果更加明显,算是和单一球体效果有些不同了。
斜入射案例(有、无基底)
此处对教程有些疑惑,建议不要看下面的内容,待搞清楚后我会重新编辑此处。因为教程中没给出仿真结果,而自己仿真过程中出现了仿真时间过长,参数变化等问题。
以第一个纳米球的文件作为基础。
对光源入射角进行修改。
修改的内容都是什么意思呢?链接
注意:当光源斜入射的时候,只能计算单波长,不能直接计算宽光谱的结果。
想要获得宽谱结果,需要扫描波长(固定角度),或扫描角度(固定波长)
因此,在刚才设定好45°角度的情况下,光源还要改成单波长。
然后扫描波长
编辑在同栏第四个图标,不是左侧工具栏!!
添加扫描,起始和终止,波长从300-600nm。注意绿色的框中,是选择你要扫描的量,是光源波长,在下来中object-光源名称-frequency start/stop,下面的E也同理。红框中是点数,10就表示它会计算10次。
斜入射设置边界条件为bloch