Mode list 의 모드를 중첩한 field 의 farfield 계산 및 divergence angle 계산

mode
farfield
angle
superposition

#1

안녕하세요. Mode를 사용하는 도중 궁금한 것이 있어 올립니다.
Mode solution 에서 Eigen solver를 통해 각 모드별로 계산하는 것으로 알고있는데, 각 모드에서 계산된 near field의 beam profile을 합쳐서 볼 수 있는지 입니다. 전체적인 total profile이나 원하는 모드들을 선택해서 합쳐서 확인하고, 또 같은식으로 far field에서도 합쳐서 확인할 수 있는지 보고싶습니다. 여기서 결과적으로 원하는 건 far filed로 바꿨을때 optical intensity가 95%일때의 (혹은 다른 percentage일때도) divergence angle이 어느 정도 나올지 예측하는 것입니다.

제가 만들어 본 파일을 같이 첨부합니다.
model1.lms (5.8 MB)

mesh 사이즈는 제가 돌렸던건 x,z 각각 50nm에 mode는 100개 정도 calculating했었는데 용량상 줄여서 업로드 했습니다.


#2

여러 모드가 중첩된 field 는 시뮬레이션 후 Result view 에 각각의 mode 에 대한 field 값이 표시됩니다. 이들을 원하는 가중치를 주어 더해 주기만 하면 됩니다. 중첩된 field 의 farfield 는 각각의 mode 의 farfield 를 구하고, 이것의 intensity 가 아닌 Es, Ep 값을 가중치를 두어 합쳐주고, 이 합한 field 의 intensity 를 구해주면 전체 중첩된 field 의 farfield intensity 를 구할 수 있습니다. 이러한 작업을 해주는 스크립트를 첨부합니다.

define parameters

mnum = [1;2;3]; # mode orders to add
weight = [1;0.8;0.5]; # weight of each mode (E = 1E1 + 0.8E3 + 0.5*E4)

nearfield

E = getresult(“FDE::data::mode1”,“E”);
x = E.x;
z = E.z;
E = 0*E.E;

for (i=1:length(mnum)) {
tmp = getresult(“FDE::data::mode”+num2str(mnum(i)),“E”);
E = E + weight(i)tmp.E;
}
E2 = sum(abs(pinch(E))^2,3);
image(x
1e6,z*1e6,E2,“x um)”,“z (um)”);

farfield

Efar = getresult(“FDE::data::mode1”,“farfield”);
Es = 0Efar.Es;
Ep = 0
Efar.Ep;
ux = Efar.ux;
uz = Efar.uz;

for (i=1:length(mnum)) {
tmp = getresult(“FDE::data::mode”+num2str(mnum(i)),“farfield”);
Es = Es + weight(i)*tmp.Es;
Ep = Ep + weight(i)*tmp.Ep;
}
E2far = pinch(abs(Es)^2 +abs(Ep)^2);
polarimage(ux,uz,E2far);


#3

빠른 답변주셔서 감사합니다.
가르쳐 주신 코드로 near field와 far field를 합쳐본 결과 보여주신 그림과 비슷하게 나왔습니다. 여기서 궁금한 점이 있어 다시 질문을 드립니다. 먼저 각 모드들이 x=0을 기점으로 대칭되게 나올텐데 near field를 합친 그림이 그렇지 않다는 점에서 의문이 들었습니다. 그리고 다른 하나는 제가 이해한 것이 맞다면, MODE Solution을 통해 각 mode의 E-field가 계산되는 것 같은데, 만약 제가 TE mode들만 선정해서 weight를 다 1로 두면 TE mode들의 total near field가 나오는게 맞나요? 아니라면 weight를 simulation을 통해 얻을 수 있는 방법을 알고 싶습니다. 마지막으로,Far field에서 Eigensolver Analysis에서는 제가 원하는 power 퍼센트 만큼 구역을 치면 angle을 볼 수 있었는데, 주신 코드로는 far field에서의 profile만 확인할 수 있었습니다. 혹시 eigensolver 처럼 확인할 수 있는방법이 있을까요? 혹시 제가 놓친게 있다면 알려주시면 감사하겠습니다.


#4

위의 nearfield 의 intensity 가 비대칭인 이유는 두번째 모드가 y 축에 대하여 amplitude 는 대칭이지만 phase 가 180 도 차이가 나기때문입니다. 그에 비해 첫번째와 세번째 모드는 phase 가 일정한 값을 지니고 있습니다. 아래와 같이 TE0 와 TE1 의 real 값을 비교해보면 그 차이를 잘 볼 수 있습니다.

만약, 이 둘을 coherent 하게 더하여 주면 (즉, |E|^2 = |E1+E2|^2), 그 결과는 비대칭성을 보이게 됩니다. 반면, 이 둘을 incoherent 하게 더하여주면 (즉, |E|^2 = |E1|^2+|E2|^2), 그 결과는 phase 정보를 잃게되고 대칭성을 보이게 됩니다.

위의 결과는 첨부한 스크립트를 실행하면 얻을 수 있습니다.

한편, 지정한 각도내의 intensity 를 적분해주는 것은 farfield2dintegrate 를 사용하면 되는데, 관련 스크립트도 첨부한 파일 내에 추가하였습니다. [ 6346_1.lsf (1.3 KB) ]


#5

빠른 답변 주셔서 감사합니다. far field 에서 적분해주는 script를 보고 near field에서도 원하는 구역에서의 (예를들면 z1 : 1.97um, z2:2.02um, x1=-10um, x2=10um) 적분값과 ratio를 구할수 있을 것 같아서요. 어떤 스크립트 코드로 사용하면 될까요? 그리고 저번 질문에 물었던 weight 관련 인데요, total optical power에서 TE0 와 TE1이 차지하는 비율이 다를 것이라 생각 되는데, 이 simulation tool에선 mode 계산이 그런 것이 다 고려되서 계산이 나오는지, 맞다면 script 상에서 TE mode들을 mnum으로 지정해주고, weight 를 다 1로 주면 TE mode에 대해서 total optical power가 나오는 것이 맞는지 확인해주시면 감사하겠습니다.


#6

Nearfield 를 적분해주려면 integrate 명령어를 사용하면 됩니다.

위의 nearfiled 해당 스크립트에서 중첩된 feld 의 intensity 를 계산해준 부분이 있습니다.

E2 = sum(abs(pinch(E))^2,3);
image(x1e6,z1e6,E2,“x um)”,“z (um)”);

예를 들어, 이 E2 값을 x, z 특정구간에서 적분하려면 다음과 같이 스크립트를 짜주면 됩니다.

zmin =1.97e-6; zmax=2.02e-6; xmin=-10e-6; xmax=10e-6;
x_new = x(find(x,xmin):find(x,xmax));
z_new = z(find(z,zmin):find(z,zmax));
E2_new = E2(find(x,xmin):find(x,xmax),find(z,zmin):find(z,zmax));
image(x_new1e6,z_new1e6,E2_new,“x um)”,“z (um)”,“E2 (filtered)”);
E2_int = integrate(E2_new,[1,2],x_new,z_new);

처음 첨부하신 파일에서, zmin 과 zmax 값의 차이가 많이 나지 않아 그 구간에 mesh 가 다소 성긴 것 같습니다.따라서, integration 을 하고자 하는 영역에 mesh override 를 추가하여 field 를 좀 더 resolve 하여 integration 을 하면 보다 정확한 값을 얻을 수 있을 것입니다.

‘Calculate’ 를 누른 후 나오는 MODE list 의 결과는 weight 가 모두 ‘1’ 인 상태입니다. 따라서, 실제 실험을 통하여 전체 output 에 대한 각 mode 의 weight 값을 구했다면, 그 weight 값을 앞서 첨부한 스크립트에 적용하여 사용하면 됩니다.


#7

빠른 답변 주셔서 감사합니다! 그런데 제가 실험이 아닌 simulation을 통해서 weight를 구하고 싶은데 이 시뮬레이션을 통해서는 구할 수 있는 방법이 있을까요?


#8

FDE solver 는 주어진 구조물과 boundary 를 바탕으로하여, 그 구조물이 support 하는 eigenvalue (effective index) 와 eigenvector (field distribution, mode) 를 계산해주며, FDE>data 에서 볼 수 있는 각 모드의 E-field 는 모두 최대크기가 ‘1’ 로 설정되어 있습니다.
시뮬레이션을 통해 weight 을 구하고 싶다고 하셨는데, 이는 FDE solver 의 계산영역 밖의 문제입니다. 예를 들어, semiconductor ridge waveguide laser 의 경우에, waveguide 내에 광원을 형성하는 active 층이 있으며, 이로부터 방출된 빛이 waveguide 를 따라 진행을 하면서 waveguide 의 여러 모드들과 coupling 이 일어나게 됩니다. 이 모드 중 그 field 의 peak 이 active 층과 overlap 되는 정도에 따라 최종적으로 waveguide 끝에서 관측되는 빛의 mode 별 weight 가 달라지게 될 것입니다. 이를 제대로 시뮬레이션하려면, 빛의 생성과정을 포함한 전체 3d 구조물을 포함시켜 생성된 빛의 propagation 을 시뮬레이션 해주어야 합니다. 현재 Lumerical 제품으로는 이 모든 과정을 포괄적으로 시뮬레이션할 수가 없습니다.