이 페이지에서 다룹니다
NOTE 31-04-00 · 박스와 원자 만들기
1. 일반 사항
A. 목적
- 이 노트는 시뮬레이션 박스와 원자를 만드는 절차를 다룬다.
- 이 노트는
boundary명령으로 경계 조건과 박스 모양을 정하는 절차를 다룬다.
B. 적용 범위
- 입력 스크립트 4단계 구조 중 2단계(시스템 정의)에 적용한다.
- 단순 액체, 결정 슬랩 + 진공, 분자 시스템의 세 패턴을 다룬다.
C. 결과 요약
- 매뉴얼이 제시하는 방법은
read_data,read_restart,lattice→region→create_box→create_atoms의 세 가지다. - 한 입력에서 두 가지 이상을 섞어 써도 된다.
- 슬랩 시뮬레이션은 보통
p p f나p p m경계 조건을 쓴다.
2. 준비 정보
A. 필요한 개념
- NOTE 31-03-00 의
units와atom_style선택을 알아야 한다.
B. 참조 자료
| 참조 | 제목 |
|---|---|
| LAMMPS 공식 매뉴얼 | 시스템 정의 명령 |
| NOTE 31-03-00 | 단위계와 atom_style |
| NOTE 32-00-00 | Cu 응용 시리즈 |
C. 사용 프로그램
| 항목 | 용도 |
|---|---|
| VMD + TopoTools (가장 흔함) | 데이터 파일 생성 |
| OpenBabel / Avogadro | 데이터 파일 생성 |
| moltemplate | 지정한 분자 템플릿을 LAMMPS 입력으로 변환 |
| MDAnalysis / ASE 등 Python 라이브러리 | 데이터 파일 생성 |
D. 관련 파일
| 항목 | 용도 |
|---|---|
system.data |
분자 시스템 데이터 파일(3.D, 3.H) |
ff_opls.in |
힘장 정의 파일(3.H) |
3. 절차
A. 생성 방법 선택
- 아래 표에서 시스템에 맞는 방법을 고른다. LAMMPS 매뉴얼은 박스와 원자를 만드는 방법으로 다음 세 가지를 든다.
| 방법 | 핵심 명령 | 어떤 경우에 |
|---|---|---|
| 데이터 파일에서 읽기 | read_data |
분자 시스템, 토폴로지가 복잡한 경우 |
| 재시작 파일에서 읽기 | read_restart |
이전 시뮬레이션에서 이어 가는 경우 |
| 격자에서 만들기 | lattice → region → create_box → create_atoms |
결정, 슬랩, 단순 액체 |
참고 한 입력에서 두 가지 이상을 섞어 써도 된다. 예컨대 금속 슬랩은 격자에서 만들고, 그 위에 흡착할 분자는 데이터 파일에서 읽는다.
B. 격자에서 만들기
lattice명령으로 결정 격자를 정의한다.region으로 영역을 정의한다.create_box로 박스를 만든다.create_atoms로 원자를 채운다.
units lj
atom_style atomic
lattice fcc 0.8442
region box block 0 10 0 10 0 10
create_box 1 box
create_atoms 1 box
mass 1 1.0
- 각 줄의 의미를 확인한다.
lattice fcc 0.8442: fcc 격자, 환원 밀도 0.8442 (LJ 단위계)region box block 0 10 0 10 0 10:box라는 이름의 직육면체 영역, 격자 단위로 각 축 0~10create_box 1 box: 위 region 안에 원자 타입 1개를 위한 박스 생성create_atoms 1 box: 타입 1 원자로 채우기
참고
격자 종류로는 fcc, bcc, hcp, sc(단순입방), diamond, custom 등이 있다. region 은 block(직육면체) 말고도 sphere, cylinder, prism(비직교 박스용) 등을 지원한다.
C. 격자 상수 단위 확인
경고
units lj 에서는 격자 상수 자리에 "환원 밀도"가 들어간다. units real 이나 units metal 과 의미가 다르다.
units real이나units metal에서는 격자 상수를 Å 단위로 직접 준다.
units metal
atom_style atomic
lattice fcc 3.615 # Cu 격자 상수 (Å)
region slab block 0 8 0 8 0 6
create_box 1 slab
create_atoms 1 slab
mass 1 63.546
D. 데이터 파일에서 읽기
- 외부 도구(2.C)로 데이터 파일을 만든다.
read_data로 데이터 파일을 읽어 들인다.
units real
atom_style full
read_data system.data
참고 분자 시스템처럼 토폴로지(결합, 각도, 이면각)가 복잡하면 이 방법이 훨씬 편하다. 데이터 파일을 손으로 직접 쓰는 일은 드물다.
- 데이터 파일의 헤더와 섹션 구성을 확인한다. 데이터 파일은 텍스트이고, 다음과 같은 헤더와 섹션으로 이루어진다.
LAMMPS data file from custom tool
1234 atoms
800 bonds
600 angles
400 dihedrals
5 atom types
4 bond types
3 angle types
2 dihedral types
0.0 30.0 xlo xhi
0.0 30.0 ylo yhi
0.0 41.895 zlo zhi
Masses
1 12.011
2 1.008
...
Atoms # full
1 1 1 -0.18 0.000 0.000 3.000
2 1 2 0.06 0.500 0.000 3.000
...
Bonds
1 1 1 2
...
- 헤더에 박스 크기, 원자/결합/각도/이면각 개수와 종류 수가 있는지 확인한다.
Atoms섹션의 형식이atom_style과 맞는지 확인한다.full이라면atom-ID molecule-ID type charge x y z순서다.
- 토폴로지를 쓴다면
Bonds,Angles,Dihedrals,Impropers섹션이 차례대로 있는지 확인한다.
E. 경계 조건과 박스 모양 설정
boundary명령으로 세 축의 경계 조건을 정한다.
boundary p p p # 3D 주기적 (기본)
boundary p p f # x, y는 주기적; z는 고정 (슬랩에 흔함)
boundary f f f # 클러스터 (모든 면 비주기)
- 각 기호의 의미를 확인한다.
p: 주기적(periodic)f: 고정(fixed). 원자가 이 면을 넘으면 사라진다("lost atom" 오류).s: 축소형(shrink-wrapped). 박스가 원자를 따라 줄어든다.m: minimum shrink-wrapped.s+ 최소 박스 크기 보장.
- 슬랩 시뮬레이션(표면 흡착, 박막 등)에서는 보통
p p f나p p m조합을 쓴다.
참고
슬랩 조합에서는 장범위 정전기에 슬랩 보정(kspace_modify slab)이 함께 필요할 수 있다.
- 박스가 비직교(triclinic)라면 기울기를 정의한다.
lattice명령 옵션,region prism, 또는read_data헤더의xy xz yz항목을 쓴다.
F. 패턴 A: 단순 액체
- 격자에서 LJ 액체를 만든다.
units lj
atom_style atomic
lattice fcc 0.8442
region box block 0 10 0 10 0 10
create_box 1 box
create_atoms 1 box
mass 1 1.0
G. 패턴 B: 결정 슬랩 + 진공
- 격자에서 Cu 슬랩을 만든다.
change_box로 위쪽에 진공 영역을 추가한다.
units metal
atom_style atomic
boundary p p f
lattice fcc 3.615
region slab block 0 8 0 8 0 6
create_box 1 slab
create_atoms 1 slab
mass 1 63.546
# 위쪽에 진공 영역 추가 (change_box)
change_box all z final 0.0 60.0
H. 패턴 C: 분자 시스템
- 데이터 파일을 읽는다.
- 힘장 정의는 별도 파일에서
include로 읽는다.
units real
atom_style full
read_data system.data
include ff_opls.in # 힘장 정의는 별도 파일에
5. 종료
B. 후속 작업
- 응용 단계에서는 패턴 B와 C를 합쳐 "결정 슬랩 + 그 위의 분자 시스템"을 만든다. 자세한 내용은 Cu 응용 시리즈에 있다.