머리말
이전 기사에서는 특정 개체 (구조)의 지오메트리를 만드는 방법을 소개했습니다. 이 기사에서는 시뮬레이션 영역 FDTD를 구축하는 방법에 대해 이야기하겠습니다. 이 기사의 시작 부분부터 이후의 분석 부분까지 후속 설명을 위해 동일한 시뮬레이션 개체를 기반으로하는 FDTD, 광원, 모니터 및 기타 시뮬레이션 모델을 추가합니다.
하나, FDTD
인스턴스
먼저 다음 코드를 사용하여 객체 (구조)의 시뮬레이션 모델을 빌드합니다.
um=1e-6;
nm=1e-9;
addrect;
set("name","SiO2");
set("material","SiO2 (Glass) - Palik");
set("x",0);
set("y",0);
set("x span",1*um);
set("y span",1*um);
set("z max",100*nm);
set("z min",-1*um);
addrect;
set("name","Si");
set("material","Si (Silicon) - Palik");
set("x",0);
set("y",0);
set("x span",1*um);
set("y span",1*um);
set("z max",300*nm);
set("z min",100*nm);
addrect;
set("name","etch");
set("material","etch");
set("x",0);
set("y",0);
set("x span",100*nm);
set("y span",1*um);
set("z max",300*nm);
set("z min",100*nm);
이것은
실리콘과 이산화 실리콘으로 만들어진 격자 구조입니다. 다음으로 격자를 통과 할 때 광파의 회절을 분석하기위한 FDTD 시뮬레이션 영역을 구축합니다.
자동 정밀도
코드 쇼 :
addfdtd;
set("dimension",2);#三维仿真区域
set("x",0);
set("y",0);
set("z min",-10*nm);
set("z max",2*um);
set("x span",0.2*um);
set("y span",0.4*um);
set("x min bc","periodic");#设置x方向周期边界条件
set("y min bc","periodic");#设置y方向周期边界条件
set("Mesh type","auto non-uniform");#仿真网格为自动精度
set("Mesh accuracy",3);#高精度
이 코드에서는 이전 기사에 많은 내용이 나와 있으므로 여기서 반복하지 않겠습니다. FDTD 자체와 관련된 여러 부분에 중점을 둡니다.
set ( "dimension", 2) : 시뮬레이션 공간 치수, "dimension"매개 변수에는 일반적으로 1과 2의 두 가지 값이 있습니다. 여기서 1은 시뮬레이션 된 영역이 2 차원 영역임을 나타냅니다. 2는 시뮬레이션 된 3 차원 영역을 나타냅니다. 여기서는 2로 설정됩니다. 즉, 3 차원 영역을 시뮬레이션하고 있음을 의미합니다.
set ( "x min bc", "periodic") : 경계 조건, 실제 시뮬레이션 영역 (차원)에 따라 설정, "x max bc"가 있습니다. , "x min bc" "", "y max bc"및 기타 많은 경계, 사용 가능한 경계 조건은 다음 표에 나와 있습니다.
경계 조건 | 기술 |
---|---|
PML | 완벽하게 일치하는 레이어 |
금속 | 금속 경계 |
주기적 | 기간 경계 |
대칭 | 대칭 경계 |
반대 칭 | 비대칭 경계 |
블로흐 | 경사 입사에 적합 |
PMC | 이상적인 자기 전도체 |
다양한 경계의 사용에 대한 자세한 지침 및 조건은 Lumerical의 공식 웹 사이트 및 관련 포럼에서 확인하십시오.
set ( "Mesh type", "auto non-uniform") : Mesh type, "auto non-uniform", "custom non-uniform", "uniform"의 세 가지 옵션이 있습니다. 일반적으로 기본값은 "auto non-uniform"입니다. uniform "", 그리드 유형을 변경할 필요가 없으면이 코드를 작성할 필요가 없습니다. 기본 자동 정밀도
세트 ( "메시 정확도", 3)가 여기에 사용됩니다 . "자동 비 균일"모드로 설정된 자동 메시 정확도. 1부터 8까지 총 8 개의 레벨이 있으며 숫자가 증가할수록 정확도가 높아지며 일반적으로 기본값은 2입니다. 너무 높으면 CPU에 큰 부담을 줄 수 있습니다. 여기서는 고정밀 시뮬레이션에 속하는 3으로 설정합니다.
맞춤 정밀도
시스템에서 자동으로 계산 된 그리드를 사용하는 것 외에도 사용자 정의 정밀도의 그리드를 사용할 수도 있습니다. 코드는 다음과 같습니다.
addfdtd;
set("dimension",2);#三维仿真区域
set("x",0);
set("y",0);
set("z min",-10*nm);
set("z max",2*um);
set("x span",0.2*um);
set("y span",0.4*um);
set("x min bc","periodic");#设置x方向周期边界条件
set("y min bc","periodic");#设置y方向周期边界条件
set("Mesh type","uniform");#仿真网格为自定义精度
setnamed("FDTD","dx",20*nm);#x方向网格精度为20*nm
setnamed("FDTD","dy",20*nm);#y方向网格精度为20*nm
setnamed("FDTD","dz",10*nm);#z方向网格精度为10*nm
여기서 설정 한 "dx", "dy"및 "dz"매개 변수는 사용자 지정 그리드 정확도 (최소 그리드 크기)입니다.
시뮬레이션 실행
일반적으로 시뮬레이션 환경이 구축 된 후 시뮬레이션을 실행하려면 "실행"명령이 하나만 필요합니다. 그러나 때로는 여러 시뮬레이션을 실행해야 할 수도 있습니다. 실제 예는 다음과 같습니다.
len=10;
phase=matrix(5,len);
#建立并保存仿真文件
for (i=1:len)
{
#修改仿真文件的参量
setnamed("etch","x span",i*2*nm);
#保存文件
save("sim_"+num2str(i));
addjob(currentfilename);
}
#运行仿真
runjobs;
#读取仿真结果
for(i=1:len){
load("sim_"+num2str(i));
#以下是分析部分,可根据自己需要修改
Ey=getdata("T","Ey");
pha=angle(Ey);
phase(:,i)=pinch(pha);
}
여기에있는 코드는 현재 폴더에 시뮬레이션 파일을 직접 생성합니다. 시뮬레이션 파일의 수가 상대적으로 많으면 다른 파일의 검색에 영향을 미치기 쉬우 며 이때 데이터를 스캔하여 시뮬레이션 데이터를 얻는 것이 가장 좋습니다. 스캔 및 시뮬레이션 실행에 대한 더 많은 예제는 공식 웹 사이트의 관련 문서를 참조하십시오.