# lammps-2Aug2023 설치 소개

이 문서에서는 KISTI 누리온 시스템에서 lammps-2Aug2023 버전을 make로 빌드하는 방법에 대하여 소개합니다.

## 가. 설치 환경

| 구분         | 내용                                               |
| ---------- | ------------------------------------------------ |
| 대상 시스템     | Nurion                                           |
| OS Version | Linux / CentOS 7.9                               |
| CPU        | <p>Intel Xeon Phi 7250</p><p>Intel Xeon 6148</p> |
| Compiler   | Intel oneAPI 21.2                                |
| MPI        | Intel MPI 21.2                                   |
| 기타         | Intel Math Kernel Library (MKL)                  |

## 나. 설치 전 환경설정

누리온 시스템에서는 PATH, LD\_LIBRARY\_PATH 설정을 손쉽게 하기 위해서 환경설정 툴인 Module이 구성되어 있으며 이하 설치 소개에서는 module load 를 이용한 환경설정 방법으로 안내합니다.

```
$ source /apps/compiler/intel/oneapi_21.2/setvars.sh
$ module purge
$ module load intel/oneapi_21.2 impi/oneapi_21.2
```

※ 설치 시에만 source 적용이 필요하며 이후에는 module 만 load 하고 작업을 수행하면 됩니다.

## 다. 설치과정&#x20;

※ lammps 다운로드 예시

```
$ wget https://github.com/lammps/lammps/archive/refs/tags/stable_2Aug2023_update4.tar.gz
```

※ 아래는 일부 패키지 설치 예시이며 필요하지 않은 패키지는 생략하고 설치 진행하여도 무방합니다. 다만,  make 단계에서 package 세팅 시 해당 패키지를 제외하고 make를 진행해야 오류가 발생하지 않습니다.

※ plumed 를 제외한 예시 패키지는 모두 ${MY\_LAMMPS\_DIR}/lib  에서 설치 진행합니다. MY\_LAMMPS\_DIR 은 lammps 를 압축 해제한 디렉터리 입니다.

※ package에 따라 추가적인 설치 과정이나 make 파일 수정이 필요할 수 있습니다.

### 1. lammps 압축 해제 및 디렉터리 설정

```
$ tar -xzf stable_2Aug2023_update4.tar.gz
$ cd lammps-stable_2Aug2023_update4

# 현재 경로를 MY_LAMMPS_DIR 로 설정 
$ export MY_LAMMPS_DIR=$PWD
```

### 2. 옵션 패키지 설치 과정 예시

#### voro++ 설치

```
$ wget https://math.lbl.gov/voro++/download/dir/voro++-0.4.6.tar.gz
$ tar -xzf voro++-0.4.6.tar.gz

$ cd voro++-0.4.6
$ mkdir -p ${MY_LAMMPS_DIR}/build/library

$ cp config.mk bak_config.mk

$ vi config.mk

-수정 내용-
CXX=mpiicpc
PREFIX=${MY_LAMMPS_DIR}/build/library

$ make > make.log 2>&1
$ make install

# 디렉터리 변경
$ cd $MY_LAMMPS_DIR/lib/voronoi
$ ln -s ${MY_LAMMPS_DIR}/build/library/include/voro++ includelink
$ ln -s ${MY_LAMMPS_DIR}/build/library/lib liblink
```

#### poems 설치

```
$ cd ../poems
(절대 경로 : cd ${MY_LAMMPS_DIR}/lib/poems)

$ cp  Makefile.mpi bak_Makefile.mpi

$ vi Makefile.mpi

-수정 내용-
CC =	        mpiicpc -std=c++11
LINK =         	mpiicpc -std=c++11

$ make -f Makefile.mpi > make.log 2>&1

```

#### awpmd 설치

```
$ cd ../awpmd
(절대 경로 : cd ${MY_LAMMPS_DIR}/lib/awpmd)

$ cp Makefile.lammps.linalg bak_Makefile.lammps.linalg

$ vi Makefile.lammps.linalg

-수정 내용-
(수정이 필요하지 않은 경우 저장하지 않고 vim 종료)
awpmd_SYSLIB = -llinalg

$ cp Makefile.mpi bak_Makefile.mpi

$ vi Makefile.mpi

- 수정 내용-
CC =	    mpiicpc -std=c++11

$ make -f Makefile.mpi > make.log 2>&1

```

#### atc 설치

```
$ cd ../atc
(절대 경로 : cd ${MY_LAMMPS_DIR}/lib/atc)

$ cp Makefile.lammps.linalg bak_Makefile.lammps.linalg

$ vi Makefile.lammps.linalg

-수정 내용-
(수정이 필요하지 않은 경우 저장하지 않고 vim 종료)
atc_SYSLIB = -llinalg

$ cp Makefile.mpi bak_Makefile.mpi
$ vi Makefile.mpi

-수정 내용-
CC =	        mpiicpc -std=c++11

$ make -f Makefile.mpi > make.log 2>&1
```

#### linalg 설치

```
$ cd ../linalg
(절대 경로 : cd ${MY_LAMMPS_DIR}/lib/linalg)

$ cp Makefile.mpi bak_Makefile.mpi
 
$ vi Makefile.mpi

-수정 내용-
CC =          mpiicpc -std=c++11

$ make -f Makefile.mpi > make.log 2>&1
```

#### plumed 설치

```
$ cd ../plumed
(절대 경로 : cd ${MY_LAMMPS_DIR}/lib/plumed)

$ cp Install.py bak_Install.py

$ vi Install.py
- 수정 내용- 
123번째 라인 cmd 로 시작되는 부분
--enable-static-patch CXX=mpiicpc

$ cd ../../src
(절대 경로 : cd ${MY_LAMMPS_DIR}/src)

$ make lib-plumed args="-b" > plumed.make.log 2>&1
(다른 패키지보다 설치에 약간의 시간이 더 소요될 수 있음)
```

### 3. lammps package 설치 및 설정

```
(cd $MY_LAMMPS_DIR/src 경로에서 make 단계 진행)

$ make yes-most
$ make yes-voronoi
$ make yes-poems
$ make yes-awpmd
$ make yes-atc
$ make yes-plumed
$ make yes-intel
$ make yes-mpiio
$ make yes-ml-snap

$ make package-status > package.list 2>&1
(package.list에서 설정된 패키지 확인 가능)

$ vi Makefile.package.settings 
(package.settigs 파일 확인하고 수정사항이 없는 경우 vim 종료)
# Makefile settings generated by libraries used by specific LAMMPS packages
# this file is auto-edited when those packages are included/excluded

include ../../lib/plumed/Makefile.lammps
include ../../lib/atc/Makefile.lammps
include ../../lib/awpmd/Makefile.lammps
include ../../lib/poems/Makefile.lammps
include ../../lib/voronoi/Makefile.lammps
include ../../lib/plugin/Makefile.lammps
```

### 4.  make 파일 수정 및 make

#### Makefile.mpi 수정

```
$ cd MAKE

$ cp Makefile.mpi bak_Makefile.mpi

$ vi Makefile.mpi

-compiler/linker settings 수정 내용-
# 예시 OPTFLAGS 의-xCOMMON-AVX512 는 SKL, KNL 노드 공통 최적화 옵션이며 
# -xMIC-AVX512 는 KNL, -xCORE-AVX512는 SKL 노드 최적화 옵션이므로 3가지 옵션 중 택일

CC =            mpiicpc
OPTFLAGS = -xCOMMON-AVX512 -O3 -fp-model fast=2 -no-prec-div -qoverride-limits -std=c++11

CCFLAGS = -qopenmp -qno-offload -fno-alias -ansi-alias -restrict \
-DLMP_INTEL_USELRT -DLMP_USE_MKL_RNG $(OPTFLAGS)

CCFLAGS += -I$(MKLROOT)/include -I/apps/common/jpeg/9c/include
SHFLAGS =       -fPIC
DEPFLAGS =      -M

LINK =          mpiicpc
LINKFLAGS =     -qopenmp $(OPTFLAGS)
LIB = -ltbb -ltbbmalloc
SIZE =          size

ARCHIVE =       ar
ARFLAGS =       -rc
SHLIBFLAGS =    -shared

-FFT library 수정 내용-
FFT_INC = -DFFT_MKL -DFFT_SINGLE -DFFT_MKL_THREADS
FFT_PATH =
FFT_LIB = -L${MKLROOT}/lib/intel64 -lmkl_intel_lp64 -lmkl_intel_thread -lmkl_core -lmkl_rt
```

#### make 실행

```
$ cd ..
$ make mpi > make.mpi.log 2>&1
```

#### ※ make 시 오류가 발생하는 경우 clean 방법

```
$ cd $MY_LAMMPS_DIR/src
$ make clean-all
```


---

# Agent Instructions: Querying This Documentation

If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://docs-ksc.gitbook.io/blog/install/nurion/lammps/lammps-2aug2023.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
