Google Colaboratory를 사용하여 무료로 첫 번째 원리 계산

최근 신형 코로나에서 실험을 할 수 없는 사람을 위해 “물성 실험가를 위한 무료로 할 수 있는 제일 원리 계산 입문”
htps : // 코메 ts 코메. 기주 b. 이오/DFT/부이 ld/
라고 하는 기사를 쓰고 있습니다만, 그 과정에서 Google Colab만으로 제일 원리 계산을 하는 방법을 알 수 있었으므로, 이쪽에서도 공유하고 싶습니다.

필요한 것


  • 브라우저
  • Google 계정

  • 사용하는 소프트웨어


  • Quantum Espresso : 첫 번째 원리 계산 소프트웨어
  • Atomic Simulation Environment (ASE) : 원자 분자 시뮬레이션을위한 파이썬 라이브러리
    htps : // 코 m / 코메 ts 코메 _ Phys / MS / 4 A f134 6d959 A 7718b9

  • Quantum Espresso 설치



    Google Colab에서 Quantum Espresso를 사용하려면 소스에서 소스에서 Cunatum Espresso를 컴파일해야 하지만 다음과 같은 방법으로 가능하다는 것을 알았습니다.
    요점은 FFTW3을 설치하는 것입니다.
    !git clone https://github.com/QEF/q-e.git
    !apt-get install -y libfftw3-3 libfftw3-dev libfftw3-doc
    %cd q-e
    !DFLAGS='-D__OPENMP -D__FFTW3 -D__MPI -D__SCALAPACK' FFT_LIBS='-lfftw3'  ./configure --enable-openmp
    

    소스를 다운로드하고 FFTW3을 설치하고 컴파일 준비를하고 있습니다.
    둘째,
    !make pw
    

    에서 Quantum Espresso의 핵심 코드 인 pw.x를 실행할 수 있습니다.
    나머지는 포스트 프로세스 도구, pp :
    make pp
    

    도 설치해 둡시다.

    음, Google 협업으로 OSS 빌드
    에서 볼 수 있듯이 여기에서 컴파일 된 바이너리는 12 시간 후에 사라집니다.
    그러므로
    from google.colab import drive
    drive.mount('/content/drive')
    

    을 실행하여 Google 드라이브에 바이너리를 저장합니다. 다음에 사용할 때는 이것을 해동하여 사용합니다.
    %cd /content/
    !zip -r /content/drive/'My Drive'/q-e.zip q-e 
    

    으로 q-e.zip을 저장합니다.

    Quantum Espresso를 실행할 수 있도록 환경 변수를 설정합니다. 즉,
    import os
    os.environ['PATH'] = "/content/q-e/bin:"+os.environ['PATH']
    

    합니다.

    ASE 설치



    ASE 설치는 간단하며,
    !pip install ase
    

    에 들어갑니다.

    첫 번째 원리 계산 테스트



    그럼, 실제로 제일 원리 계산을 해 봅시다.

    NaCl의 구조 최적화



    NaCl 디렉토리를 만들고 이동합니다.
    %cd /content
    !mkdir NaCl
    %cd NaCl
    

    그리고 의사 잠재력을 다운로드합니다.
    !wget https://www.quantum-espresso.org/upf_files/Na.pbesol-spn-kjpaw_psl.1.0.0.UPF
    !wget https://www.quantum-espresso.org/upf_files/Cl.pbesol-n-kjpaw_psl.1.0.0.UPF
    

    이것은 NaCl 디렉토리에 들어갔다.

    둘째,
    from ase.build import bulk
    from ase.calculators.espresso import Espresso
    from ase.constraints import UnitCellFilter
    from ase.optimize import LBFGS
    import ase.io 
    
    pseudopotentials = {'Na': 'Na.pbesol-spn-kjpaw_psl.1.0.0.UPF',
                        'Cl': 'Cl.pbesol-n-kjpaw_psl.1.0.0.UPF'}  
    rocksalt = bulk('NaCl', crystalstructure='rocksalt', a=6.0)
    calc = Espresso(pseudopotentials=pseudopotentials,pseudo_dir = './',
                    tstress=True, tprnfor=True, kpts=(3, 3, 3))
    
    rocksalt.set_calculator(calc)
    
    ucf = UnitCellFilter(rocksalt)
    opt = LBFGS(ucf)
    opt.run(fmax=0.005)
    
    # cubic lattic constant
    print((8*rocksalt.get_volume()/len(rocksalt))**(1.0/3.0))
    

    를 실행하면 NaCl의 구조 최적화를 할 수 있습니다. 이 코드는 의사 포텐셜의 위치를 ​​pseudo_dir로 지정합니다. 이번에는 지금있는 디렉토리입니다.

    Cu 밴드 다이어그램



    다음으로 Cu의 밴드 다이어그램을 계산해 보겠습니다.

    Cu 디렉토리를 만듭니다.
    %cd /content
    !mkdir Cu
    %cd Cu
    

    의사 잠재력을 다운로드합니다.
    !wget https://www.quantum-espresso.org/upf_files/Cu.pz-d-rrkjus.UPF
    

    자기 무착착 계산을 하여 전자 밀도를 결정합니다. 전자 밀도가 결정되면 각 k점에서 계산을 하여 밴드 다이어그램을 그릴 수 있습니다.
    from ase import Atoms
    from ase.build import bulk
    from ase.calculators.espresso import Espresso
    atoms = bulk("Cu")
    pseudopotentials = {'Cu':'Cu.pz-d-rrkjus.UPF'}
    
    input_data = {
        'system': {
            'ecutwfc': 30,
            'ecutrho': 240,
            'nbnd' : 35,
        'occupations' : 'smearing',
            'smearing':'gauss',
            'degauss' : 0.01},
        'disk_io': 'low'}  # automatically put into 'control'
    
    calc = Espresso(pseudopotentials=pseudopotentials,kpts=(4, 4, 4),input_data=input_data,pseudo_dir = './')
    atoms.set_calculator(calc)
    
    atoms.get_potential_energy()
    fermi_level = calc.get_fermi_level()
    print(fermi_level)
    

    그리고 밴드 다이어그램에 대한 계산을합니다.
    input_data.update({'calculation':'bands',
                                  'restart_mode':'restart',
                                   'verbosity':'high'})
    calc.set(kpts={'path':'GXWLGK', 'npoints':100},
              input_data=input_data)
    calc.calculate(atoms)
    

    여기서 kpts의 path에 좋아하는 브릴루앙 존의 점을 넣는 것으로, 간단하게 밴드 다이어그램을 그릴 수 있는 것이 ASE의 재미있는 점입니다.

    마지막으로 밴드 다이어그램을 계산합니다.
    import matplotlib.pyplot as plt
    
    bs = calc.band_structure()
    bs.reference = fermi_level
    bs.plot(emax=40,emin=5)
    



    이제 브라우저에서만 첫 번째 원리 계산을 수행할 수 있습니다.

    계산 재개



    별도로 날에 계산을 재개하고 싶다면 다음과 같이 할 수 있다고 생각합니다.
    from google.colab import drive
    drive.mount('/content/drive')
    !cp /content/drive/'My Drive'/q-e.zip ./
    !unzip q-e.zip
    import os
    os.environ['PATH'] = "/content/q-e/bin:"+os.environ['PATH']
    !pip install ase
    

    그런 다음 디렉토리를 만들고 거기에 가짜 잠재력을 다운로드하면됩니다.
    !mkdir NaCl
    %cd NaCl
    !wget https://www.quantum-espresso.org/upf_files/Na.pbe-spn-kjpaw_psl.1.0.0.UPF
    !wget https://www.quantum-espresso.org/upf_files/Cl.pbe-n-rrkjus_psl.1.0.0.UPF
    

    좋은 웹페이지 즐겨찾기