과꾸로

[MNPBEM] Eigenvalues 구하기. Boundary-Element Method. Matlab code. 본문

연구자료

[MNPBEM] Eigenvalues 구하기. Boundary-Element Method. Matlab code.

(gguro) 2018. 4. 12. 18:16


0. 소개


MNPBEM은 오스트리아의 Graz 대학교에서 만든 Matlab 코드로 금속나노입자의 전자기적 특성을 시뮬레이션 하는 도구이다. 


"MNPBEM is a toolbox for the simulation of metallic nanoparticles (MNP), using a boundary element method (BEM) approach developed by F. J. Garcia de Abajo and A. Howie, Phys. Rev. B 65, 115418 (2002)."




나노입자에 여기되는 Localized Surface Plasmon (LSP) Modes를 보는 데 유용하게 사용된다. 




1. 경로설정


설치 과정을 다 따라간 뒤에는 경로 설정을 해줘야 한다. 


addpath(genpath('C:\ ... \MNPBEM17'));

addpath('C:\ ... \MNPBEM17\Mesh2d');

 

위의 두 줄을 matlab 코드 맨 앞에 넣어주거나 simulation 시작 전에 한 번 실행해주어야 한다.




2. BEM Solver


LSP mode를 계산한다는 뜻은 eigenvectors와 eigenvalues를 구한다는 뜻이다. 방법은 여기에 나와있다. 






bemsolver를 써서 구하라는 뜻인데 여기서 중요한 건 bemstateig 라는 함수이다. bem + stat + eig 를 붙인 이름인데, BEM, Static, Eigenfucntions (or eigenvalues)를 뜻한다.


사용법은 


bem = bemstateig( p ) 


라고 쓰면 된다. p라는 구조에 생기는 eigenmodes를 40 개 구한다음에 bem에 저장한다. 구하는 eigenmodes의 갯수를 정하고 싶으면 다음과 같이 하면 된다.



bem = bemstateig( p, 'nev', 20 ) 


위 처럼 써주면 20개의 eigenmodes를 구한다.





bemstateig.m 함수를 직접 찾아가서 좀 더 살펴보면

(경로: ~\MNPBEM17\BEM\@bemstateig\bemstateig.m)


 properties

    p       %  composite particle (see comparticle)

    nev     %  number of eigenmodes

    ur      %  right eigenvectors of surface derivative of Green function

    ul      %  left eigenvectors

    ene     %  eigenvalues

    unit    %  inner product of right and left eigenvectors

    enei    %  light wavelength in vacuum

            %    to determine whether new computation of matrices    

  end


라고 되어있다. 저 properties로 설정된 변수들은 점을 찍어서 각각 address할 수 있는데 예를 들면 bem.nev 라고 하면 number of eigenmodes를 볼 수 있는 식이다. struct 라고 보면 된다. 



bemstateig의 결과로 얻은 bem 이라는 구조체에는 위 그림처럼 하위변수들이 들어있다. 




그 중 eigenvalues를 모아 둔 bem.ene를 들어가서 보면 이렇게 되어있다. 대각방향의 값만 있다. 



3. Eigenvalues 구하기


Eigenvalues 구하기는 간단하게 다음과 같이 할 수 있다. pp라는 구조체의 eigenvalues를 구한다면 


bem = bemstateig( pp );

l = diag(bem.ene);


diag 는 원래 매트랩에 있는 함수로 행렬의 대각성분만 뽑아주는 함수이다. 여기서 구한 l 이 eigenvalues 이다. 이 값은 (dimensionless 이지만) 에너지 차원으로 되어 있어서 파장 차원으로 바꾸려면 다음과 같이 해 주어야 한다. 


[ l, ind ] = sort( real( l ) );


sur = bem.ur( :, ind );

sul = bem.ul( ind, : );

sl=-(2*pi)./l %lambda


이 때 sl 이 파장 차원의 eigenvalues 이다 (역시 dimensionless).  bem.urbem.ul은 eigenvectors 이다.








참고논문: Davis, T. J., and D. E. Gómez. "Colloquium: An algebraic model of localized surface plasmons and their interactions." Reviews of Modern Physics 89.1 (2017): 011003. [link]



에너지 차원의 eigenvalues는 위 논문의 (5)번 식의 gamma 이고, 파장 차원의 eigenvalues는 그 역수인 lambda 이다. 


(Note: 차원과 단위 확인 필요. 수정 예정) => (수정 완료. 아래 글 참고)





4. 결론


MNPBEM 이라는 매트랩 toolbox는 정말 잘 만들었다. 좋다. 이론적 배경도 탄탄하다. Good! 만든 Ulrich Hohenester와 그 동료 분들께 박수를!!! 


MNPBEM 논문 목록:


- U. Hohenester and A. Trügler, Comp. Phys. Commun. 183, 370 (2012).

- U. Hohenester, Comp. Phys. Commun. 185, 1177 (2014).

- J. Waxenegger, A. Trügler, and U. Hohenester, Comp. Phys. Commun. 193, 138 (2015).




2018년 4월 12일

과꾸로



Comments