설치
이 장에서는 튜토리얼 전체에서 사용하는 도구 — SIESTA(TranSIESTA·TBtrans 포함), sisl, VASP, pseudopotential — 를 준비한다. SIESTA 계열과 sisl은 무료 오픈소스이며, VASP만 상용 라이선스가 필요 하다. VASP 없이도 튜토리얼의 transport 파트 전체(챕터 05 이후)는 진행할 수 있다.
학습 목표
- 운영체제별로 컴파일러·MPI 등 기본 빌드 도구를 준비한다
- SIESTA 5.x를 conda-forge 패키지 또는 소스 빌드(CMake)로 설치한다
- TranSIESTA와 TBtrans가 SIESTA 배포에 포함되어 있음을 이해한다
- 후처리 라이브러리 sisl을 python 환경에 설치한다
- PseudoDojo에서 PBE scalar-relativistic
.psmlpseudopotential을 내려받는다 - 버전 확인과 import 테스트로 설치를 검증한다
구성 요소 개요
| 도구 | 역할 | 라이선스 |
|---|---|---|
| SIESTA 5.x | LCAO DFT — SCF, 밴드, DOS, Hamiltonian 생성 | GPL (무료) |
| TranSIESTA | NEGF self-consistent 계산 — siesta 실행 파일에 통합 | GPL (무료) |
| TBtrans | 후처리 transport — , DOS/PDOS | GPL (무료) |
| sisl | python 후처리 — geometry 변환, 밴드/transmission 분석 | MPL-2.0 (무료) |
| VASP | plane-wave DFT — 구조 최적화, reference 전자구조 | 상용 |
SIESTA 4.1부터 TranSIESTA는 독립 바이너리가 아니라 siesta 실행 파일 안에 통합되었다. 입력 파일에서 SolutionMethod transiesta를 설정하면 NEGF 모드로 동작한다(챕터 06에서 다룬다). TBtrans는 tbtrans라는 별도 실행 파일이며, SIESTA 소스/패키지 배포에 함께 포함된다.
1. 사전 준비 — 운영체제별
SIESTA를 소스에서 빌드하거나 MPI 병렬 실행을 하려면 컴파일러와 빌드 도구가 필요하다. conda-forge 패키지만 쓸 계획이라도 아래 공통 항목(conda)은 필요하다.
macOS
Xcode Command Line Tools(기본 컴파일러·git 포함)와 Homebrew를 먼저 설치한다.
xcode-select --install
Homebrew는 brew.sh의 안내에 따라 설치한 뒤, 빌드에 필요한 도구를 받는다.
brew install gcc cmake open-mpi
gcc 패키지에 Fortran 컴파일러 gfortran이 포함되어 있다.
Linux (Ubuntu 기준)
sudo apt update
sudo apt install build-essential gfortran cmake openmpi-bin libopenmpi-dev
build-essential은 C 컴파일러와 make 등 기본 빌드 도구 묶음이다. 다른 배포판은 해당 패키지 매니저(dnf, zypper 등)의 대응 패키지를 설치한다.
Windows — WSL2 권장
SIESTA와 TBtrans는 유닉스 계열 환경을 전제로 개발·배포되므로, Windows에서는 WSL2(Windows Subsystem for Linux)를 사용하는 것을 권장한다. 관리자 권한 PowerShell에서 한 줄로 설치할 수 있다.
wsl --install
재부팅 후 Ubuntu 환경이 열리면, 위의 Ubuntu 절차를 그대로 따르면 된다. 네이티브 Windows 빌드는 공식 지원이 제한적이다.
공통 — conda (miniforge 권장)
Python 스택과 SIESTA 바이너리 설치에 conda를 사용한다. miniforge는 conda-forge 채널이 기본으로 설정된 최소 구성 conda 배포판으로, 이 튜토리얼에서 쓰는 패키지가 모두 conda-forge에 있으므로 miniforge를 권장한다. conda-forge/miniforge 릴리스 페이지의 설치 스크립트를 내려받아 실행한다.
curl -L -O "https://github.com/conda-forge/miniforge/releases/latest/download/Miniforge3-$(uname)-$(uname -m).sh"
bash Miniforge3-$(uname)-$(uname -m).sh
설치 후 터미널을 새로 열면 conda 명령을 쓸 수 있다.
2. Python 환경 구성
버전 충돌을 피하기 위해 전용 conda 환경을 만든다.
conda create -n transport python=3.11
conda activate transport
전용 환경을 분리하는 이유는 재현성과 격리다. 도구마다 요구하는 python·numpy 버전 범위가 다르고, 시스템 python이나 다른 프로젝트 환경에 패키지를 섞어 설치하면 한쪽을 업그레이드할 때 다른 쪽 import가 깨지는 일이 생긴다. 전용 환경은 이 튜토리얼의 스택(siesta, sisl, matplotlib)을 한 곳에 고정하고, 문제가 생기면 환경만 삭제하고 다시 만들면 되므로 복구도 간단하다.
이후 모든 설치·실행은 이 환경 안에서 진행한다. 터미널을 새로 열 때마다 conda activate transport를 먼저 실행해야 한다.
3. SIESTA 설치
방법 A — conda-forge 패키지 (가장 빠른 시작)
conda install -c conda-forge siesta
siesta, tbtrans 실행 파일이 함께 설치된다. conda-forge에는 MPI 병렬 빌드 variant도 제공되므로, 병렬 실행이 필요하면 설치 시 표시되는 빌드 목록에서 MPI variant(openmpi 또는 mpich)를 선택한다. 노트북에서 이 튜토리얼의 1D chain 예제를 돌리는 용도로는 직렬 빌드로도 충분하다.
설치된 빌드가 MPI를 포함하는지는 빌드 문자열로 확인한다.
conda list siesta
빌드 문자열에 openmpi 또는 mpich가 들어 있으면 병렬 빌드, nompi면 직렬 빌드다. conda-forge의 일반 관례대로 빌드 문자열로 variant를 지정해 설치할 수도 있다.
conda install -c conda-forge "siesta=*=*openmpi*"
두 방법의 장단점은 다음과 같다.
| 항목 | conda-forge 패키지 | 소스 빌드 |
|---|---|---|
| 설치 시간 | 수 분 | 수십 분 (의존성 준비 포함) |
| 성능 | 범용 바이너리 — 특정 CPU·수학 라이브러리 최적화 없음 | 시스템에 맞는 컴파일러·MKL 등 선택 가능 |
| 적합한 용도 | 노트북 학습, 이 튜토리얼의 소규모 예제 | HPC, 대규모 생산 계산 |
방법 B — 소스 빌드 (CMake)
HPC 환경이나 최적화된 빌드가 필요할 때 사용한다. 요구 사항:
- Fortran 컴파일러 (gfortran 등)
- CMake (3.20 이상 권장)
- BLAS/LAPACK
- 병렬 빌드 시: MPI 라이브러리 + ScaLAPACK
소스는 SIESTA GitLab 저장소(gitlab.com/siesta-project/siesta)의 releases 페이지에서 최신 5.x tarball을 내려받는다. 압축을 풀고 CMake로 구성·빌드·설치한다.
tar xf siesta-5.x.y.tar.gz
cd siesta-5.x.y
FC=gfortran CC=gcc cmake -S . -B _build \
-DCMAKE_BUILD_TYPE=Release \
-DCMAKE_INSTALL_PREFIX=$HOME/opt/siesta \
-DSIESTA_WITH_MPI=ON
cmake --build _build -j 8
cmake --install _build
FC/CC환경 변수로 사용할 컴파일러를 지정한다(gfortran + gcc 조합 기준). MPI를 켜면 CMake가 시스템의 MPI 설치(OpenMPI 등)를 자동으로 찾는다.-j 8은 8개 코어로 병렬 컴파일한다는 뜻이다. 사용 가능한 코어 수에 맞게 조정한다.- BLAS/LAPACK은 표준 경로에 있으면 자동 탐지된다. MKL 등 특정 수학 라이브러리를 지정하는 옵션과 전체 옵션 목록은 SIESTA 공식 빌드 문서(docs.siesta-project.org)를 따른다 — 여기서 옵션 이름을 임의로 추측하지 않는 것이 안전하다.
cmake --install이CMAKE_INSTALL_PREFIX아래bin/디렉토리에 실행 파일을 복사한다. 셸 시작 파일(~/.bashrc또는~/.zshrc)에 다음을 추가해 경로를 잡는다.
export PATH=$HOME/opt/siesta/bin:$PATH
MPI를 켠 빌드에는 ScaLAPACK이 필요하며, 시스템에 따라 라이브러리 경로를 CMake 옵션으로 지정해야 할 수 있다 — 이 역시 공식 빌드 문서를 따른다.
빌드가 끝나면 ls $HOME/opt/siesta/bin으로 siesta와 tbtrans가 모두 설치되었는지 확인한다. SIESTA 5.x 의 CMake 빌드는 TBtrans를 기본 타깃으로 포함해 함께 빌드한다. 구버전 4.x의 make 기반 빌드에서는 Util 디렉토리 아래에서 TBtrans를 별도로 빌드해야 했으므로, 4.x 환경을 물려받아 쓰는 경우라면 tbtrans 실행 파일이 실제로 존재하는지 반드시 확인한다.
HPC에서는 — 시스템 모듈 사용이 일반적
공유 HPC 클러스터에서는 직접 빌드하기보다 관리자가 미리 최적화해 빌드해 둔 SIESTA를 쓰는 것이 일반적이다. 대부분의 HPC는 environment modules(또는 Lmod)로 소프트웨어를 관리하며, module load로 특정 빌드를 현재 셸 환경에 불러온다.
module avail siesta # 사이트에 설치된 siesta 빌드 목록 확인
module load siesta # 모듈 이름·버전 표기는 사이트마다 다르다
모듈 이름은 사이트마다 다르고(버전·컴파일 러 suffix가 붙는 경우가 많다), 컴파일러·MPI 등 의존 모듈을 함께 로드해야 하는 사이트도 있다. 각 센터의 사용자 문서를 따른다.
4. sisl과 Python 스택
sisl은 이 튜토리얼의 후처리 핵심 도구다. fdf/밴드 파일 읽기, VASP–SIESTA 구조 변환, TBtrans 결과(*.TBT.nc)에서 transmission 추출까지 모두 sisl로 처리한다. conda 환경을 활성화한 상태에서 설치한다.
pip install "sisl[analysis]"
pip install matplotlib
[analysis] extra는 netCDF4 등 분석용 추가 의존성을 함께 설치한다 — TBtrans 결과 파일 *.TBT.nc를 읽으려면 netCDF4가 필요하므로 이 튜토리얼에서는 extra를 포함한 설치를 권장한다. 최소 설치(pip install sisl)를 택했다면 pip install netCDF4를 별도로 실행한다. numpy·scipy는 sisl 의존성으로 자동 설치된다. 설치 옵션의 자세한 내용은 sisl 공식 문서(zerothi.github.io/sisl)를 참조한다.
설치 후 버전을 확인한다.
python -c "import sisl; print(sisl.__version__)"
5. VASP
VASP은 상용 코드로, VASP Software GmbH의 라이선스가 필요하다. 라이선스는 개인 단위가 아니라 연구 그룹 단위로 발급되는 구조여서, 소속 그룹(연구책임자)이 라이선스를 보유하고 있으면 그 그룹의 구성원으로 등록해 사용한다. 소스 코드는 라이선스 보유자만 VASP 포털에서 내려받을 수 있고, 제3자 재배포는 금지된다.
실제로는 직접 컴파일하는 경우보다 HPC 센터에 이미 설치된 VASP 모듈을 쓰는 경우가 대부분이다. 센터가 라이선스 보유 여부를 확인한 뒤 사용 권한을 부여하는 방식이 일반적이며, 이후에는 SIESTA 모듈과 같은 방식으로 불러온다.
module avail vasp
직접 빌드가 필요한 경우에는 각 기관·연구실의 절차를 따르며, 보통 시스템 관리자가 빌드한 vasp_std 계열 실행 파일을 사용하게 된다.
VASP의 PAW pseudopotential(POTCAR)은 라이선스에 묶인 자산이므로 이 사이트에서는 배포하지 않는다. 라이선스 보유 기관이 제공하는 potpaw 데이터베이스를 사용해야 하며, POTCAR 파일을 공개 저장소에 올리는 것은 라이선스 위반이다. 이 튜토리얼의 예제 저장소에도 POTCAR는 포함되어 있지 않고 합성 방법만 안내한다(챕터 03).
6. Pseudopotential — PseudoDojo
SIESTA 계산에는 norm-conserving pseudopotential이 필요하다. 이 튜토리얼은 PseudoDojo의 검증된 .psml 파일을 사용한다.
- PseudoDojo 웹사이트(pseudo-dojo.org)에 접속한다.
- 옵션을 선택한다: XC는 PBE, relativistic 처리는 scalar-relativistic(SR), accuracy는 standard, 포맷은 psml.
- 주기율표에서 C(탄소)와 N(질소)을 클릭해 내려받는다. 탄소는 챕터 01부터, 질소는 device 챕터(C19N chain)에서 사용한다.
- 압축을 풀면
C.psml,N.psml파일이 나온다. 관리하기 쉬운 위치(예: 홈 디렉토리 아래pseudos폴더)에 보관하고, 각 계산 디렉토리에 복사해 사용한다.
.psml 파일에는 생성에 사용된 XC functional 정보가 기록되어 있다. fdf 입력의 XC.Functional/XC.Authors 설정과 일치해야 하며(이 튜토리얼은 전부 PBE), 불일치하면 SIESTA가 경고를 낸다.
7. 시각화·플롯 도구
계산 결과를 눈으로 확인하는 도구를 미리 갖춘다. 필수는 아니지만 구조 오류를 계산 전에 잡는 가장 빠른 방법이다.
| 용도 | 도구 | 비고 |
|---|---|---|
| 구조 확인 (3D) | VESTA | 무료. .xsf, POSCAR/CONTCAR, cube 파일을 직접 연다 — 계산 제출 전 구조 검수용 |
| 구조 확인 (경량) | XCrySDen | Linux 중심. .xsf 원조 뷰어 |
| 파동함수·eigenchannel cube | VESTA | isosurface 렌더 — 챕터 10에서 사용 |
| 그래프 (T(E), 밴드, I–V) | Python + matplotlib | 이 튜토리얼의 모든 플롯 예제가 사용. sisl과 같은 환경에 설치 |
conda activate transport
pip install matplotlib
8. 예제 입력 파일 받기
이 튜토리얼의 모든 입력 파일(code/ 디렉토리)은 사이트와 같은 저장소에 있다.
git clone https://github.com/nangman98/transport-tutorial.git
cd transport-tutorial/code
ls
# ch01-siesta-scf ch02-bands ch03-vasp ch05-electrode ch06-device
# ch07-tbtrans ch09-bias ch10-eigenchannel miniproject
각 디렉토리의 README.md에 그 입력이 무엇을 계산하는지 적혀 있다. 챕터를 따라가며 해당 디렉토리를 복사해 작업 공간으로 쓰면 된다.
예제는 전부 1D carbon chain(원자 20개 이하)이라 노트북에서도 수 분 안에 돈다. 다만 챕터 09(finite bias chain)와 미니프로젝트의 길이 시리즈는 반복 계산이 많아, 가능하면 챕터 12의 HPC 사용법과 함께 진행하는 것이 효율적이다.
설치 검증 체크리스트
아래 항목을 순서대로 확인한다. 모든 명령이 기대 출력을 내면 준비 완료다.
| 확인 항목 | 명령 | 기대 출력 |
|---|---|---|
| SIESTA | siesta --version | 버전 문자열 (예: Siesta version : 5.2.0) |
| TBtrans | tbtrans --version | 버전 문자열 — SIESTA와 같은 버전 |
| sisl | python -c "import sisl; print(sisl.__version__)" | 버전 번호 한 줄, import 에러 없음 |
| MPI 동작 | mpirun -np 2 hostname | 호스트 이름이 2줄 출력 (프로세스 2개 기동 확인) |
| pseudopotential | ls ~/pseudos | C.psml, N.psml |
복사해서 한 번에 실행할 수 있는 형태는 다음과 같다.
siesta --version
tbtrans --version
python -c "import sisl; print(sisl.__version__)"
mpirun -np 2 hostname
버전 숫자는 설치 시점에 따라 다를 수 있다. MPI 빌드라면 SIESTA 자체의 병렬 실행도 한 번 점검해 둔다.
mpirun -np 2 siesta --version
자주 나는 설치 문제
| 증상 | 원인 | 해결 |
|---|---|---|
| CMake 구성 단계에서 Fortran 컴파일러를 찾지 못했다는 에러 | gfortran 미설치 | macOS는 brew install gcc, Ubuntu는 sudo apt install gfortran으로 설치한 뒤 _build 디렉토리를 지우고 다시 구성 |
mpirun -np 4 siesta ... 실행 시 같은 SCF 출력이 4번 반복 | 직렬 빌드를 mpirun으로 실행 — 독립 프로세스 4개가 각각 전체 계산을 수행 | conda list siesta로 빌드 문자열 확인 후 MPI variant 재설치, 또는 SIESTA_WITH_MPI=ON으로 재빌드 |
| mpirun 실행 시 MPI 라이브러리 관련 에러로 종료 | 빌드에 쓴 MPI와 실행하는 mpirun의 구현·버전 불일치 (예: conda의 openmpi와 시스템 mpich 혼용) | which mpirun으로 conda 환경 안의 mpirun이 잡히는지 확인하고 같은 스택으로 통일 |
siesta: command not found 또는 ModuleNotFoundError: No module named 'sisl' | conda 환경 미활성화 | conda activate transport 후 재시도 — 새 터미널마다 활성화가 필요하다 |
| SIESTA 시작 직후 pseudopotential 파일을 찾지 못했다는 에러로 종료 | .psml 파일이 작업 디렉토리에 없거나 ChemicalSpeciesLabel의 라벨과 파일 이름 불일치 | C.psml 등을 input.fdf와 같은 디렉토리에 복사하고 라벨과 파일명을 1:1로 대조 |
연습문제
- PseudoDojo에서
C.psml과N.psml을 내려받아 pseudopotential 보관 디렉토리를 만들어라. 내려받은.psml파일을 텍스트 에디터로 열어 XC functional 정보가 PBE로 기록되어 있는지 확인해 보라. - python에서
import sisl후sisl.geom.graphene()으로 내장 geometry를 하나 만들어 원자 수와 격자 벡터를 출력해 보라. sisl이 정상 동작하는지 확인하는 가장 빠른 방법이다. - (MPI 빌드인 경우)
mpirun -np 2 siesta --version과mpirun -np 4 siesta --version이 모두 정상 동작하는지 확인하라. 병렬 실행은 챕터 01의 SCF 계산부터 사용한다.
준비가 끝났으면 챕터 01 — SIESTA 첫 계산으로 넘어간다.