특정 방향으로 편광된 빛의 투과도 script.

script
fdtd

#1

FDTD Lumerical 사용중 궁금한 것이 있어서 글을 올립니다.
특정한 방향으로 편광된 빛의 투과도를 frequency domain에서 보려고 하는데 script를 어떤식으로 짜야할지 궁금합니다.
예를 들어 x방향의 편광된 빛을 투과 시켜주었을 때의 y방향으로 편광된 빛만의 투과도를 구하고자 합니다.


How to extract transmission data regarding polarization angles via script commands.
#2

안녕하세요 @inki93,

우선 어떤 광학 시스템에 대해서 해석을 하시는지 정확한 정보가 부족하므로,
아래 그림과 같이 임의로 glass 기판 위에 Au Nanostrip이 증착되어 있는 구조를 가정하여 모델링하였습니다.

  • 광학소스 : Planewave 400 ~ 700 nm (50 freq. points)
  • 시스템 : Au Nanostrip (200X100X1000nm, 가로X세로X길이(장축)) on Glass 기판
  • 경계조건 : PML BCs
  • 모니터 : 파워모니터를 Glass 기판 중앙 부위에 위치시켜 투과도(transmission) 측정
  • 편광 : 편광 각도를 0도 (x-pol), 90도 (y-pol)로 설정
  • 목적 : 편광 각도에 따른 투과도 스펙트럼 차이 계산

[Model]Au Nanostrip on Glass.fsp (253.4 KB)
[Script] Au Nanostrip on Glass.lsf (1.6 KB)

아래 스크린샷은 편광각도에 따른 투과도를 추출하는 스크립트입니다.

이 스크립트의 핵심은 for 문에 포함된 아래 명령어 3줄이라고 보시면 됩니다.

switchtolayout; # switch to edit mode for model
select(“source”); # select the planewave source named "source"
set(“polarization angle”, pol_ang); # manipulate the pol. angle wrt pol_angle value

switchtolayout 명령어는 편집모드에서 planewave와 같은 모델 객체(objects)를 편집하기 위해서 사용됩니다. select 명령어로 planewave 소스를 선택하고, set 명령어로 planewave 소스의 속성 중 하나인 편광각도(polarization angle)를 0도, 90도로 변경하여 시뮬레이션을 진행하게 됩니다. 투과도는 transmission이란 명령을 통해서 추출할 수 있습니다.
모니터의 normal surface 방향과 축의 양의 방향(z축)이 다를 때 추출한 투과도 값이 음이 되므로, transmission 명령어 앞에 음의 부호(-)를 붙여서 혹은 (-1)을 곱해서 투과도 값이 양의 값을 가지게 만들어줍니다. 이와 관련한 자세한 사항은 KB 사이트 Projections from a monitor box 포스트의 Note: Negative signs… 파트를 참고해주세요.

나머지 명령어들은 양념이라고 보시면 됩니다.
스크립트에 대한 조금 더 자세한 설명은 이 포스트를 참고하세요.

편광각도에 따른 투과 스펙트럼의 결과는 아래 그림과 같습니다.
Au Nanostrip의 구조가 anistropic(비등방성) 구조이므로 편광에 따른 차이가 존재합니다.

편광, 비편광과 관련된 내용은 KB 사이트 "Polarization incoherence"를 참고하세요.


시뮬레이션 데이터를 Matlab 파일로 저장 후 읽어들이는 방법
#3

@isawjsy 께서 답변해주신 것은 ‘입사되는 빛의 편광각이 바뀜에 따른 모니터에서의 전체 투과도’ 를 계산하는 방법으로 아주 유용한 script 라고 생각됩니다. 하지만, 질문의 취지는

‘예를 들어 x방향의 편광된 빛을 투과 시켜주었을 때의 y방향으로 편광된 빛만의 투과도를 구하고자 합니다.’

부분에 나타난 것처럼, 모티터에서 Ex 성분 또는 Ey 성분만의 투과도를 계산하는 방법에 관한 것으로 보여집니다.

이 경우에는, 모니터에 수직인 Poyinting vector 성분 (Pz) 을 놓고서 편광방향에 따라 모니터 면상에서 적분을 해주면 됩니다. Poyinting vector 의 의미와 적분을 하는 방법에 대해서는 아래의 링크를 참고하시면 됩니다.

Working with the Poynting vector
Integrating the Poynting vector

두번째 링크에 있는 시뮬레이션 파일(usr_integrate_poynting.fsp) 을 실행한 후, ‘polarized transmission’ 이라는 analysis group 을 right-click 하고 visualize --> ‘polarized transmission’ 을 해 주면 다음과 같이 모티터에서 측정된 전체투과도 및 x/y 편광된 빛의 투과도를 볼 수 있습니다.

‘polariaed transmission’ 의 ‘Analysis’ tab 의 script 창을 보면 어떻게 위의 계산을 해 주었는 지 알 수 있습니다.

calculate components of Poynting vector

Pz_total=Exconj(Hy)-Eyconj(Hx);
Pz_Ex_component=Exconj(Hy);
Pz_Ey_component=-Ey
conj(Hx);

calculate sourcepower normalization and integrate poynting vector

sp=sourcepower(f);
T_total= 0.5integrate(Pz_total,1:2,x,y)/sp;
T_Ex_polarized= 0.5
integrate(Pz_Ex_component,1:2,x,y)/sp;
T_Ey_polarized= 0.5*integrate(Pz_Ey_component,1:2,x,y)/sp;

T_total = real(T_total);
T_Ex_polarized = real(T_Ex_polarized);
T_Ey_polarized = real(T_Ey_polarized);