FDTD 빠른 시작 Lumerical 스크립팅 언어 Pickup (4 개) 시뮬레이션 영역 FDTD


머리말

이전 기사에서는 특정 개체 (구조)의 지오메트리를 만드는 방법을 소개했습니다. 이 기사에서는 시뮬레이션 영역 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);
}

여기에있는 코드는 현재 폴더에 시뮬레이션 파일을 직접 생성합니다. 시뮬레이션 파일의 수가 상대적으로 많으면 다른 파일의 검색에 영향을 미치기 쉬우 며 이때 데이터를 스캔하여 시뮬레이션 데이터를 얻는 것이 가장 좋습니다. 스캔 및 시뮬레이션 실행에 대한 더 많은 예제는 공식 웹 사이트의 관련 문서를 참조하십시오.

추천

출처blog.csdn.net/weixin_44224652/article/details/112758746