Athena++

## Athena++ 環境設定

この文章及びチュートリアルは2020年度国立天文台CfCA主催の流体学校を想定して書かれたものです。ここでは天文台のCray XC50を利用して実習を行うために必要な設定を行います。他の環境でお使いの場合はそれぞれの環境に合わせて適宜読み替えてください。以下では解析や作図に幾つかのソフトウェアを使用いていますが、これらは一例であり特定のソフトウェアをお勧めしているわけではなく、同等のことが実現できるのであればお好みの方法で構いません。この文章では

手持ちのPCでGithubからAthena++をダウンロードできる
手持ちのPCからXC50にログインし、ターミナル操作及びファイルの送受信ができる
手持ちのPC上でファイルを編集できる
手持ちのPC上で計算結果の簡単な可視化ができる
XC50上でのコードのビルドに必要な設定をする

ことを目的としています。なおVPNによる接続・ログイン方法についてはCfCAのWebサイトを参照して各自用意してください。注：以下には講習会期間限定の情報が含まれています。講習会以外で利用する場合には適宜読み替えてください。

### コードのダウンロード

以下ではコードをGitHubからダウンロードする方法について説明していますが、CfCAの計算機ではGithubにアクセスするのに追加の設定が必要ですので、講習会では細かな修正と追加のファイルを含むこちらのzipファイルからダウンロードし、XC50にアップロードして利用してください。

### Gitクライアント

Athena++の最新版はGitHub上で公開されています。これをダウンロードするにはGitクライアントが必要です。公式のクライアントは公式Webサイトからダウンロードできます。LinuxやMacではパッケージ管理ソフトからインストールするのが簡単です。Debian/Ubuntu系Linuxでは

> sudo apt-get install git

RedHat/CentOS系では

> sudo yum install git

などとすれば良いでしょう。MacではHomebrewから導入することができます。

GitにはコマンドラインだけではなくGUIのクライアントもあります。公式のGUIクライアントもありますが、それ以外ではWindowsではTurtoise Git、MacではSourceTreeなどが定番のようです。

Gitが導入できたらダウンロードのページを参照してリポジトリをcloneして最新のコードを入手してください。

なお現時点ではCfCAの計算機から直接GitHubにアクセスすることはできないようですので、一度コードを手元にダウンロードしてからアップロードするという手順を踏むことになります。

標準的なコマンドラインのgitクライアントを用いて最初にダウンロードするには次のcloneコマンドを実行します。

> git clone https://github.com/PrincetonUniversity/athena

ダウンロードしたコードを最新版に更新する際は、コードのディレクトリに移動したのちに以下のpullコマンドを実行します。

> git pull

### XC50へのリモートアクセス

まず国立天文台のCray XC50にSSHでログインしてターミナルの操作ができる、またファイルの送受信ができる環境を用意しましょう。

### Windowsの場合

Windowsには標準のSSH・SCP/SFTPクライアントが搭載されていないので何らかのソフトウェアを導入する必要があります。MobaXTermが一本でSSH・SFTPクライアント・X11サーバー等の機能を備えており便利です。それ以外ではシンプルなSSHクライアントとしてTera Term（注：ログイン方法を手動でチャレンジレスポンス認証にする必要がある場合があります）、SCP/SFTPクライアントとしてWinSCPなどが定番です。いずれも無料で利用可能です。その他に最近Windows 10に導入されたWindows Subsystem for Linux 2を導入して、その上でssh, scp, sftpコマンドを実行するという手もあります。

### Macの場合

Mac OSには標準でターミナル上で動作するSSH・SCPクライアントがあります。ファイル転送にGUIベースのクライアントを使いたい場合はCyberduckやFuguなどがあります。

### Linux（またはBSD他）の場合

ほぼ全てのLinux系のOSでは標準でSSH・SCPクライアントが導入されています。インストールされていない場合、Debian/Ubuntu系では

> sudo apt-get install openssh-client

RedHat/CentOS系では

> sudo yum install openssh-clients

等とすることでインストールできるはずです（必要な権限を有していない場合は管理者に相談して下さい）。GUIのファイル転送ソフトウェアとしてはgFTPが良く使われているようです。こちらもapt/yumから導入できます。

SSHでリモートの計算機に接続してコマンドラインで操作する方法、SCP/SFTPでファイルを転送する方法についてはここでは説明しません。各自Googleで検索するなどして学習しておくようお願いします。また、XC50の利用法についてはCfCA WebサイトのXC50システム利用の手引きに一通り目を通しておくようにお願いします。

### ファイルの編集

このチュートリアルの範囲では幾つかのファイルを編集することがあります。そのために何らかのエディタが必要ですが、特にC/C++の構文を色付きでハイライトでき、強力な検索機能を持つエディタがおすすめです。エディタは好みの問題がありますが、特にWindowsにはプログラミング向けのエディタが標準搭載されていないので何らかのエディタを導入することを強くお勧めします。例えばサクラエディタ、TeraPad、Notepad++等様々な選択肢があるので好みに合うものを導入して下さい。特にWindowでは改行コードLFで保存できるエディタを使用してください。LinuxであればvimやEmacsあるいはgedit、MacであればXcodeなどを使えば良いかと思います。高機能な統合開発環境を利用しても良いですが、今回のチュートリアルの範囲では扱いません。

### 計算結果の可視化

このチュートリアルでは可視化ソフトウェアとして、一次元の簡単なデータにはgnuplot、多次元のデータの可視化にはVisItを用います。どちらもマルチプラットフォーム対応のソフトウェアですので、手元の計算機に導入して動作することを確認しておいてください。インストール時の設定は全て初期値のままで問題ありません。VisItは殆どの環境でコンパイル済みの実行ファイル（Executable）を利用できます。install notesを参照して事前にインストールしておいてください。

また簡単なデータ解析をする際にPythonを使うことがあります。PythonはXC50にも導入されていますが、将来的に使うようでしたら手元の計算機にも導入しておくことをお勧めします。また、Enzoコードを初めとする多数のコードに対応する可視化ソフトウェアytもAthena++に対応しました。今回のチュートリアルでは扱いませんが、使用した経験がある人はこちらも是非試してみて下さい。

### XC50での環境設定

Athena++はGNUまたはCrayコンパイラでも動作しますが、最大の性能を引き出すためにはIntelコンパイラを利用することを推奨しています。ただし講習会ではコンパイル時間節約と同時コンパイル数制限回避のためにg++を使用します。また、ファイルの出力に並列版のHDF5ライブラリを使用します。更に、自己重力や乱流などの一部の計算では高速フーリエ変換を行うためにFFTWモジュールを使用します（Intel MKLでも可）。これらの必要なモジュールを読み込むために以下のコマンドを実行してください。ログインするために毎回実行する必要があるため、シェルの起動スクリプト（.bashrcや.cshrc）に記述しておくのが良いでしょう。現在利用しているシェルは"echo $SHELL"で確認できます。

module switch PrgEnv-cray PrgEnv-gnu
module load cray-hdf5-parallel
module load fftw3

.bashrcをアップロードしておきましたので、これをダウンロードして/home/[username]/直下に置いてください。Intelコンパイラを使用する場合は上記の"PrgEnv-gnu"の代わりに"PrgEnv-intel"を指定してください。

### XC50上でのディレクトリ

XC50上には大きく分けてhomeディレクトリ"/home/[username]/"とworkディレクトリ"/work/[username]/"があります。homeディレクトリには容量に限りがある一方workディレクトリの方が大容量なので、シミュレーションはworkディレクトリで実行し、データもここに保存します。一方、workディレクトリはユーザーのディスクスペースを確保するために長期間更新されていないデータは自動的に削除されますので、シミュレーションコード等の消えては困るものはhomeディレクトリに保存する、という使い分けをしてください。

### 講習会期間中のキュー

今回の講習会のために以下のようなキューを用意して頂いています。チュートリアル内のジョブ投入スクリプトの例では、[queue]となっている所を適切なものに書き換えて下さい。R69684??のキューは講習会参加者だけのために確保されているものですので、基本的にはこちらを優先的に使用してください。なお利用可能時間内でジョブ実行時間制限はありませんが、講習会で扱う計算はそれほど時間がかからないものですので、問題に応じて1時間程度を目安に実行時間を設定してください。夜間や講習会期間終了後に自習したいという場合にはlarge-tキューが利用可能です。

[queue] 使用可能日 最大ノード数 最長実行時間
R6968428 3月8日 18時まで 2 時間内無制限
R6968429 3月9日 18時まで 2 時間内無制限
R6968430 3月10日 18時まで 2 時間内無制限
R6968431 3月22日 18時まで 2 時間内無制限
R6968432 3月23日 18時まで 2 時間内無制限
large-t 3月25日 19時まで 3 4時間

例えば初日に計算を実行する場合のジョブスクリプトのヘッダ部は以下のようになります。

#PBS -q R6968428
#PBS -l nodes=2
#PBS -l walltime=01:00:00

Astronomical Institute, Tohoku University