과꾸로

[Octopus] Tutorial 따라하기. Time-dependent run. TDDFT 본문

연구자료

[Octopus] Tutorial 따라하기. Time-dependent run. TDDFT

과꾸로 (gguro) 2018.04.06 15:19

Octopus라는 TDDFT용 공개 무료 프로그램을 설치해서 tutorial을 따라가고 있다. (설치후기, Tutorial 따라하기)


여태까지는 ground state를 계산하는 걸 했는데, 이번에는 시간에 따라 바뀌는 걸 해봤다. Time-dependent density functional theory인데 드디어 time dependence를 넣는 걸 해본다니 설렌다! 




Tutorial:Time-dependent run




1. inp 파일 생성


시작은 늘 입력파일인 inp 파일을 생성하면서 시작한다. Tutorial에 있는대로 복사해서 붙인다.


CalculationMode = gs

UnitsOutput = eV_Angstrom


Radius = 3.5*angstrom

Spacing = 0.18*angstrom


CH = 1.097*angstrom

%Coordinates

  "C" |           0 |          0 |           0

  "H" |  CH/sqrt(3) | CH/sqrt(3) |  CH/sqrt(3)

  "H" | -CH/sqrt(3) |-CH/sqrt(3) |  CH/sqrt(3)

  "H" |  CH/sqrt(3) |-CH/sqrt(3) | -CH/sqrt(3)

  "H" | -CH/sqrt(3) | CH/sqrt(3) | -CH/sqrt(3)

%

 

Tf  = 0.1/eV

dt = 0.002/eV


TDPropagator = aetrs

TDMaxSteps = Tf/dt

TDTimeStep = dt


이렇게 inp파일을 만들어서 계산을 실행하려는 디렉토리에 둔다. 메탄 분자(CH4)의 바닥상태를 계산하는 걸 알 수 있다.


inp 파일 화면캡쳐.



이대로 계산하면 ground state의 결과가 나온다. 그러면 restart/gs 가 생성된다. 이 디렉토리에 있는 결과를 가지고 다음에 계산할 때 initial parameter로 사용하는 것 같다.




2. time-dependent run


1번에서 gs결과를 얻었으니 그걸 기반으로 time-dependent run을 돌려보자. 간단하게 CalculationModetd로 바꾸어주기만 하면 된다.



gs였던 걸 td로 바꿔준다.


Tf는 총 계산시간인 것 같고, dt는 time step이다. 시간의 단위는 (1/eV)로 썼는데, reduced planck constant 를 1로 두는 것 같다. 플랑크상수의 단위는 에너지×시간 (J.s)이니까, 그걸 에너지 단위인 eV로 나누면 시간이 나온다.



그렇게 돌리면 이렇게 계산결과를 보여준다. 50번 반복하는 걸로 되어있다. 

계산 정보는 restart/td에 저장했다고 나온다. 세번째 줄이 에너지인데, 외부에서 준 변화가 하나도 없으니 당연히 메탄 분자의 에너지도 그대로이다. 


계산 결과는 td.general 밑에 생성된다.



td.general/energy 를 열어보면 total energy, kinetic energy, ion-ion energy 등을 구별해서 보여준다. 예제는 50회 iteration 하는데, 그걸 쭉 보여준다. 







td.general/multipoles 를 열어보면 뭔가 다른 걸 보여준다. 


3, 4, 5번째 column은 <x>, <y>, <z> dipole moment이다. 



방향벡터에 상태함수를 양옆에 곱한 electric dipole moment이다. dipole moment는 거리에 전하량을 곱해야 하는데, 전하량은 1로 두고 전자의 확률분포로 적분을 한 형태이다. 근데 바뀌면 안 되는 거 아닌가? 흠... 외부에서 준 에너지가 없는데. 흠.... 흠....



나중에 좀 더 생각해보기로.





3. laser! 

 

드디어!!! 레이저를 넣어보자.


inp 파일은 이렇게 생겼다. x방향으로 선편광된 electric_field를 넣고 있다. 넣어주는 빛의 파장은 omega라는 변수로 넣었는데 18.0 eV 로 넣었다. 그럼 파장으로 하면 얼마지? 흠... 


미국 쌀대학교 Halas 그룹에서 제공하는 unit converter의 도움을 받아서 계산해보면 

18.0 eV = 68.9 nm 

라고 나온다.


external field를 설정하고, output에 laser + multipoles 라고 설정해주는 것이 핵심이다. 



내가 넣어준 외부전자기장이 잘 들어갔는지 확인하려면 td.general/laser 파일을 확인해보면 된다.  계산을 시작하자마자 생성되기 때문에 바로 확인해볼 수 있다. 계산에 사용된 laser를 그래프로 그려보면 다음과 같다.




시간에 따라 cosine 형태로 들어가는 함수로 pulse laser를 넣어준 것이고 그 결과가 위 처럼 나온다. 


실제 계산은 외부장 없이 돌렸던 50번의 계산을 10번 반복하는 것으로 해서 50 x 10 의 계산을 한다. 500회. 진짜 구조를 넣고 계산을 하려면 꽤 오랜 시간이 걸리겠다는 생각이 든다.







4. 덧붙여


계산에서 설정한 공간은 유한한데 그럼 빛은 어떻게 진행하는가? 여기도 FDTD의 PML처럼 비슷한 것이 있다.


흡수경계조건인데, AbsorbingBoundaries, ABWidth,ABHeight 라는 변수들이 있다. 그걸 설정하면 free space를 simulation 할 수 있을 것 같다. 





2018년 4월 6일

과꾸로



----------------------------------------------------

Octopus 관련글

[Octopus] TDDFT 프로그램 설치하기. 수소원자 에너지 준위 구하기.

[Octopus] Tutorial 따라하기. 질소원자, 메탄분자 에너지 계산

----------------------------------------------------


0 Comments
댓글쓰기 폼