ASE와 GPAW로 DFT 계산하기

ASE와 GPAW를 사용하여 DFT 계산을 수행합니다. 간단한 예로 수소 분자의 원자화 에너지를 찾습니다.
  • ASE는 원자 시뮬레이션을위한 파이썬 모듈입니다. 많은 기능이 구현되었습니다. Calculator 클래스을 인터페이스로 다양한 코드를 호출 할 수 있습니다.
  • GPAW는 PAW 방법과 ASE를 기반으로 한 DFT 계산 코드입니다. C 언어와 Python으로 작성되었습니다. 널리 사용되는 있습니다.

  • 다음 예제는 JupyterLab을 사용하여 수행되었습니다.

    설치



    Anaconda로 만든 Python 환경에 pip로 ASE와 GPAW를 설치하십시오.
    $ pip install ase --user
    $ pip install gpaw --user
    

    GPAW PAW 데이터 세트도 다운로드하십시오.
    $ gpaw install-data $HOME/gpaw-data
    

    설치는 이상으로 끝납니다.
    이 단계에서 내 환경은 다음과 같습니다.
    $ python --version
    Python 3.7.6
    $ pip list installed | grep -e ase -e gpaw
    ase                                3.19.1
    gpaw                               20.1.0
    
    

    GPAW의 계산 조건



    다음 조건으로 GPAW 클래스를 인스턴스화합니다.
  • 컷오프 에너지: 300eV
  • 일반 함수: PBE
  • from gpaw import GPAW, PW
    
    gpaw = GPAW(mode=PW(300), xc='PBE')
    

    수소 분자의 모델 만들기


    ase.build 모듈은 소분자 사전 설정을 포함합니다.molecule 함수에 분자식을 전달하기 만하면 3 차원 분자 모델 인 Atoms 객체를 만들 수 있습니다.
    이번에는 고립계의 계산을 하고 싶기 때문에, 작성한 Atoms 오브젝트의 center 메소드를 호출해, 모델에 3.0A의 진공층을 추가하고 있습니다.
    from ase.build import molecule
    
    atoms_h2 = molecule('H2')
    atoms_h2.center(vacuum=3.)
    
    view 함수로 시각화 할 수 있으므로 분자의 구조를 확인해 봅시다.
    from ase.visualize import view
    
    view(atoms_h2)
    



    계산 수행


    Atoms GPAW의 Calculator를 객체에 연결하고 get_potential_energy 함수를 호출하면 GPAW 계산이 수행됩니다.
    atoms_h2.set_calculator(gpaw)
    e_h2 = atoms_h2.get_potential_energy() # takes several seconds
    

    수소 원자의 계산



    수소 원자에 대해서도 마찬가지로 계산을 실시합니다.
    atoms_h = molecule('H')
    atoms_h.center(vacuum=3.)
    atoms_h.set_calculator(GPAW(mode=PW(300), xc='PBE', hund=True))
    e_h = atoms_h.get_potential_energy()
    

    결과 표시



    마지막으로 결과를 정리해 봅시다.
    H2의 원자화 에너지 $\Delta E $는 다음 식으로 얻을 수 있습니다.

    $\Delta E = 2 E_{\rm H} - E_{\rm H_2}$

    동시에 분자 구조도 노트북에 표시해 보겠습니다.
    matplotlib의 래퍼 인 ase.visualize.plot 모듈을 사용하십시오.
    import matplotlib.pyplot as plt
    from ase.visualize.plot import plot_atoms
    
    delta_e = 2 * e_h - e_h2
    print(f'Atomization Energy: {delta_e: 5.2f} eV')
    
    fig, ax = plt.subplots(1, 2, figsize=(8,6))
    
    title = f'Calculation Result for {atoms_h2.get_chemical_formula()}\n' + \
            f'Total Energy : {atoms_h2.get_potential_energy(): 5.2f} eV'
    ax[0].set_title(title)
    ax[0].axis('off')
    plot_atoms(atoms_h2, ax=ax[0], rotation='90x')
    
    title = f'Calculation Result for {atoms_h.get_chemical_formula()}\n' + \
            f'Total Energy : {atoms_h.get_potential_energy(): 5.2f} eV'
    ax[1].set_title(title)
    ax[1].axis('off')
    plot_atoms(atoms_h, ax=ax[1], rotation='90x')
    
    plt.show()
    



    참고


  • Atomic Simulation Environment htps : // 우우키. 파이하고 k. d. dk/아세/
  • GPAW htps : // 우우키. 파이하고 k. d. dk/g파w/
  • 좋은 웹페이지 즐겨찾기