pyroms 설치하기 (ROMS 해양순환모델의 자료 준비 도구)

작성 : 김동훈 (http://www.dhkim.info, 인하대학교)
& 문일주 (제주대학교)
2019년 7월 24일

ROMS의 영역 격자를 만드는 방법은 모델의 역사 만큼이나 다양하게 존재합니다.
대표적으로 다음과 같은 것들이 있으니 참고하세요.

  • Gridgen: http:code.google.com/p/gridgen-c, or https://github.com/sakov/gridgen-c
    • pyroms, pygridgen, octant
  • Easygrid: https://www.myroms.org/wiki/easygrid
  • Gridbuilder: http://austides.com/downloads
  • COAWST Tools: wrf2roms_mw.m, create_roms_xygrid.m
  • … …

pyroms는 ROMS 지역해양순환모델의 격자를 생성 할 뿐만 아니라 각종 초기치(I.C.)와 경계치(B.C.) 등의 자료를 만드는데 유용하게 사용할 수 있는 도구이며, 성공적으로 설치할 경우는 편리성이 매우 높은 도구입니다. 그러나 설치 시에 따르는 여러가지 문제점으로 인하여 일반 사용자가 쉽게 접근하지 못하는 경우가 많았습니다.
여기에서는 그동안의 노하우를 토대로 가장 쉽게 설치하는 방법을 설명하고자 합니다.

pyroms 설치하기

pyroms는 Python의 설치 프로그램(pip) 또는 Anaconda의 conda에서 지원하지 않는 모듈이므로 직접 설치해야 합니다. 사용자 환경에 따라서 설치 시에 여러가지 문제점이 발생할 수 있으므로 여기에서는 Anaconda의 축소버전인 Miniconda를 사용하여 설치하도록 하겠습니다.

1. Miniconda 설치 및 ROMS 환경 구축

# https://docs.conda.io/en/latest/miniconda.html 에서 사용자 환경에 맞는 최신 버전을 가져 오세요.
# 저자는 "64-bit(bash installer) for Linux" 버전을 사용하였습니다.
# 다음의 명령으로 설치를 시작합니다.
bash ./Miniconda3-latest-Linux-x86_64.sh

# 설치과정 중 물어보는 "설치할 디렉토리"는 사용자의 적절한 디렉토리를 지정합니다. 
# 여기에서는 ${HOME}/Local/miniconda3 에 설치하였습니다.
# 설치의 마지막 단계에서 묻는 "conda 환경을 구성하겠냐"는 질문에는 "yes"를 선택하여 
# ~/.bashrc 에 환경설정이 자동으로 추가되도록 하세요.
# 사용자가 사용하는 Shell이 bash가 아닌 경우에는 ~/.bashrc의 내용을 참조하여 적절하게 반영하여야 합니다.
# 제대로 설치되었다면 "conda" 명령이 실행 가능해야 합니다.

# conda에 가장 많이 사용되는 다운로드 채널을 추가합니다.
conda config --add channels conda-forge

# ROMS를 위한 독립 환경을 생성합니다. "-n" 옵션 다음에 붙는 이름은 사용자가 임의로 정하세요.
conda create -n pyroms python=3 ipython numpy scipy netCDF4
conda activate pyroms
conda install matplotlib=2.2.4 basemap basemap-data-hires esmf nco pygrib
# Note) pyroms 내부에서 "from matplotlib.mlab import dist_point_to_segment"을 사용하는데,
#       matplotlib 의 최신 버전인 v3.x에서는 지원하지 않기때문에 v2.x의 최신 버전을 설치한다.
conda install pyproj=1.9.6
# Note) pyroms 내부에서 pyproj의 espg 자료를 사용하는데, pyproj의 최신 버전인 2.x 에는 espg 자료가 없으므로
#       pyrpoj=1.9.6 버전을 설치한다.

# "conda activate pyroms"를 수행하여 사용자 프롬프트 맨 앞에 "(pyroms)"가 추가되었다면 성공적으로 설치한 것입니다.

2. 삭제: natgrid 설치 (필요하지 않음)

pyroms 는 NCAR의 natgrid (a natural neighbor gridding package) 라이브러리를 사용한다고 합니다. conda의 ROMS 환경 내에서 다음과 같이 설치합니다.

(pyroms) cd ~/Local
# git으로 최신 버전의 소스코드를 받아 옵니다.
(pyroms) git clone https://github.com/matplotlib/natgrid.git
(pyroms) cd natgrid
(pyroms) CC=gcc python3 setup.py build
# warning 메세지가 많이 나올 수 있으나 error 메세지가 나오지 않으면 됨
(pyroms) python3 setup.py install  # 라이브러리를 python3의 site-packages에 설치
# (pyroms) python3 test.py  # 라이브러리 테스트

3. pyroms 설치

(pyroms) export DESTDIR=${HOME}/Local/miniconda3/envs/pyroms
(pyroms) cd ~/Local
# git으로 최신 버전의 소스코드를 받아 옵니다. 
# 상세한 설명은 https://github.com/ESMG/pyroms 를 방문하세요.
(pyroms) git clone https://github.com/ESMG/pyroms.git

# pyroms의 설치를 시작합니다. ----------------------------------------------------
# pyroms는 여러가지 패키지를 함께 사용하기 때문에 설치를 성공하는데 많은 어려움이 있을 수 있습니다. 
# 저자도 수십번의 과정을 거쳐서 성공한 결과를 요약하여 공유하는 것이니 하나 하나 잘 따라하셔야 합니다. 
(pyroms) cd pyroms/pyroms_toolbox
(pyroms) python ../pyinstall.py ${DESTDIR}
(pyroms) cd ../bathy_smoother
(pyroms) python ../pyinstall.py ${DESTDIR}
(pyroms) cd ../pyroms
(pyroms) vi install_pyroms.sh
          > DESTDIR=${DESTDIR}
          > PYROMS_PATH=$DESTDIR/lib/python3.7/site-packages/pyroms #Note) python 버전 확인
          > #python setup.py build --fcompiler=gnu95;  #주석 처리
          > #python setup.py install --prefix=$DESTDIR #주석 처리
          > python ../pyinstall.py $DESTDIR           #위에 주석 처리한 곳 바로 아래에 추가
(pyroms) vi external/scrip/source/makefile
          > NC_CONFIG = nc-config #nf-config 를 nc-config 로 수정
          > LIB = $(shell $(NC_CONFIG) --libs) #--flibs 를 --libs 로 수정
(pyroms) ./install_pyroms.sh
(pyroms) export PYROMS_GRIDID_FILE=${HOME}/Local/pyroms/pyroms/pyroms/gridid.txt

(pyroms) cd $DESTDIR/lib/python3.7/site-packages #Note) python 버전에 따라 path가 다름
(pyroms) cp pyroms_toolbox/*.so . ; cp bathy_smoother/*.so . ; cp pyroms/*.so .

4. pyroms 확인

# pyproj 라이브러리를 설치하고 conda 환경을 재설정해 주어야
# $PROJ_LIB 가 자동으로 설정되므로 다음 명령을 실행한다.
(pyroms) conda deactivate
(base) conda activate pyroms
(pyroms) echo $PROJ_LIB

# 환경 설정이 제대로 되었으면, 다음과 같이 pyroms 모듈을 import 하여 문제가 없는지 확인한다.
(pyroms) ipython
In [1]: import pyroms
In [2]: import pyroms_toolbox
In [3]: from bathy_smoother import *



2019

Back to Top ↑

2017

Back to Top ↑