这一篇我们来介绍一下如何搭建一个物体的仿真模型(Structure)。FDTD solution中的仿真模型包含两个核心部分:材料(material)和几何结构(structure)。通常用包含吸收参数的材料的复折射率控制material属性,而用3D模型参数控制structure属性。下面介绍几种常用的structure。
一个典型的矩形结构可以由如下代码生成:
addrect;
set("name","rect");#名称
set("material","SiO2 (Glass) - Palik");#材料
set("render type","wireframe"); # 渲染方式:线框,减小显卡压力
set("x",0);#设置x中心点坐标
set("y",0);#设置y中心点坐标
set("x span",1e-6);#设置x方向宽度
set("y span",1e-6);#设置y方向宽度
set("z max",1e-7);#设置z方向最大值
set("z min",-1e-6);#设置z方向最小值
set("first axis","x");#设置第一转轴
set("rotation 1",45);#设置第一旋转角
下面详细介绍每段代码的用途:
addrect:随机生成一个一定大小,材料为一定折射率介电材料的矩形模型。
set(“name”,“rect”):名称。设定矩形的名称为“rect”
set(“material”,“SiO2 (Glass) - Palik”):材料——这里的材料必须是材料库中存在的,且必须按照材料库中原有的名字命名。设定矩形的材料为二氧化硅
set(“render type”,“wireframe”):渲染方式——有detailed和wireframe两种,系统默认为detailed,如有需要,可改为wireframe。设定矩形的渲染方式为线框
set(“x”,“0”):中心坐标(x轴),类似地还可设置y和z的中心坐标。设定矩形的中心坐标(x轴)为0
set(“x span”,“1e-6”):x轴向宽度(或范围),类似地还可设置y和z的轴向宽度。设定矩形的x轴向宽度为1e-6,即1微米
set(“z max”,“1e-7”):z方向最大值,类似地还有z min、x max、x min、y max、y min。设定矩形的z方向最大为1e-7,即100纳米
set(“first axis”,“x”):第一转轴。设定矩形的第一转轴(first axis)为x轴
set(“rotation 1”,45):绕第一转轴的旋转角。设定矩形绕x轴的转角为45°
一个典型的多边形结构可以由如下代码生成:
um=1e-6;
nm=1e-9;
vtx=[2,0;1,1;-1,1;
-2,0;-1,-1;1,-1]*um; #向量组
addpoly;
set("name","poly");#名称
set("index",1.5);#折射率
set("vertices",vtx);#控制向量组
set("x",0.5*um);#中心坐标
set("y",1*um);
set("z",-0.5*um);
set("z span",0.4*um);#z方向宽度
与矩形相同的部分我们不作过多介绍,这里只介绍和矩形不同的部分:
addpoly:添加一个参数随机的多边形结构。
set(“index”,1.5):折射率。多边形材料为介电材料,折射率为1.5
set(“vertices”,vtx):向量组。设置多边形的xy面二维形状,由传入的向量组vtx中的参数控制
关于vtx中的参数解释:
vtx是一个n*2的矩阵,每一行都是多边形上一个顶点的相对坐标,以设置的"x",“y”,"z"参数作为相对坐标原点,按在矩阵中的顺序顺次连接成多边形。
一个典型的三角形柱体结构可以由如下代码生成:
um=1e-6;
nm=1e-9;
vtx=[3,0;0,4;-2,0]*um; #向量组
addtriangle;
set("name","triangle");#名称
set("index",1.5);#折射率
set("vertices",vtx);#控制向量组
set("x",0.5*um);#中心坐标
set("y",1*um);
set("z",-0.5*um);
set("z span",0.4*um);#z方向宽度
效果如下:
多边形生成代码和三角形生成代码基本一致,这里不作过多介绍。
一个典型的(椭)圆柱体结构可以由如下代码生成:
um=1e-6;
nm=1e-9;
addcircle;
set("name","circle");
set("material","Au (Gold) - Palik");
set("x",0);
set("y",0);
set("z",0);
set("z span",400*nm);
set("radius",600*nm);#半径/x轴半径
set("make ellipsoid",1);#生成椭圆
set("radius 2",800*nm);#y轴半径
效果如下:
同样的,这里只对和矩形结构生成代码不同的部分作一些说明:
set(“radius”,600*nm):半径/x轴半径。若是圆柱体,radius为圆的半径;若是椭圆柱体,radius为椭圆在x轴方向的半轴长(可能是长半轴或短半轴,由radius和radius的相对大小决定)。这里表示椭圆短半轴为600nm
set(“make ellipsoid”,1):生成椭圆。“make ellipsoid”可取两个值:0和1。其中,0表示生成的为圆柱体,1表示生成椭圆柱体(也可以认为1是enable椭圆参数radius 2,为0则radius 2被disable,只生成半径为radius的圆柱)。这里参数为1表示生成一个椭圆柱体。
set(“radius 2”,800*nm):y轴半径,椭圆的第二半轴长。生成一个第二半轴长为800*nm的椭圆柱体。
一个典型的(椭)球可以由如下代码生成:
um=1e-6;
nm=1e-9;
addsphere;
set("name","sphere");
set("index",1.5);
set("x",0);
set("y",0);
set("z",0);
set("radius",200*nm);#半径/x轴半径
set("make ellipsoid",1);#生成椭球
set("radius 2",400*nm);#y轴半径
set("radius 3",2*um);#z轴半径
效果如下:
球体的代码和椭圆柱的代码十分相似,区别仅在于多了一个第三半径(radius 3)(事实上是控制了z轴方向的大小),这里不作过多说明。
一个典型的圆环柱体可以由如下代码生成:
um=1e-6;
nm=1e-9;
addring;
set("name","ring");
set("index",1.5);
set("x",0);
set("y",0);
set("z",0);
set("z span",600*nm);
set("outer radius",400*nm);#外圆半径
set("inner radius",200*nm);#内圆半径
set("theta start",0);#起始角
set("theta stop",135);#终止角
效果如下:
柱体默认以xy平面作底面,z轴方向宽度作高。关于环柱体参数控制的详细说明可参考注释部分
一个典型的角锥体可以由如下代码生成:
um=1e-6;
nm=1e-9;
addpyramid;
set("name","pyramid");
set("index",1.5);
set("x",0);
set("x span bottom",600*nm);#梯形下底长(x轴向)
set("x span top",100*nm);#梯形上底长(x轴向)
set("y",0);
set("y span bottom",400*nm);#梯形下底长(y轴向)
set("y span top",200*nm);#梯形上底长(y轴向)
set("z",0);
set("z span",600*nm);
效果如下:
其中参数"x span bottom"、“y span bottom”、“x span top”、"y span top"分别控制该角锥体下、上底面的矩形大小。