J. Kämpf の Ocean Modelling for Beginners
https://link.springer.com/book/10.1007/978-3-642-00820-7?utm_source=chatgpt.com
この教科書にはfortranのコードが付属しており,各自で実際にPCで計算を回していただきます。この時、生のWindows環境でfortranの環境構築をしようとすると苦労する場合があります。WSLというLinuxの仮想環境を立てると環境構築は楽なので、利用をおすすめします。いきなりWSL環境を構築するように言われても迷走する場合が多いので、以下に資料を用意しました。もともとサークルの後輩向けに用意した資料がベースなので冗長な点もありますが、1, 2, 3, 6章の手順を一通り進めていただくと必要な環境は揃うかと思います。 科学技術計算のためのPC環境構築(Windows)
環境が整ったら、ターミナルで次のコマンドを実行し、Fortran のコンパイラ(gfortran)が使えることを確認してください。
gfortran --version
--version はバージョンを表示するオプションです。GNU Fortran ... と表示されれば使える状態です。
教科書のコードは次の2種類からなります。
| 種類 | 拡張子 | 役割 | このゼミでの扱い |
|---|---|---|---|
| Fortran 95 | .f95 |
数値計算を行い、結果をテキストファイルに書き出す | gfortran でコンパイル・実行する |
| SciLab スクリプト | .sce |
計算結果を読み込んで描画する | 使わない。描画は Python や MATLAB など、各自の使い慣れた道具で行う |
教科書の記述は2009年当時の環境が前提なので、次のように読み替えます。
| 教科書の記述 | このゼミでの対応 |
|---|---|
コンパイラ g95 |
gfortran を使う。g95 は開発が止まっており、現在は入手が難しい |
g95 file.f95 |
gfortran file.f95 -o 実行ファイル名 |
SciLab で .sce を実行して描画 |
Fortran が書き出したテキストファイルを各自で読み込んで描画 |
| コマンド | 意味 | 例 |
|---|---|---|
pwd |
今いる場所を表示する | pwd |
ls |
今いるフォルダの中身を一覧表示する | ls |
cd |
フォルダを移動する。cd .. で1つ上に戻る |
cd exercise1 |
mkdir |
フォルダを作る | mkdir test |
cp |
ファイルをコピーする。フォルダごとコピーするときは -r を付ける |
cp -r 'Exercise 1' exercise1 |
rm |
ファイルを削除する。フォルダごと削除するときは -r を付ける。ごみ箱には入らず元に戻せない |
rm output2.txt |
unzip |
zip ファイルを解凍する | unzip file.zip |
-r は「再帰的に(recursive)」という意味で、フォルダの中にあるフォルダも最下層までたどって同じ処理をします。
↓ 教科書に付属しているコードをダウンロードしてください。
zip ファイルを置いた作業フォルダに移動し、解凍します。
unzip Updated_Exercises_March_2015.zip -x "__MACOSX/" ".DS_Store"
unzip は zip を今いるフォルダに展開するコマンドです-x "__MACOSX/" ".DS_Store" は、指定したファイルを展開から除外するオプションです。この zip は Mac で作ったため Mac 固有の管理ファイルが含まれており、不要なので除いていますunzip が見つからないと言われた場合は、先に sudo apt install unzip でインストールしますls で確認すると、Updated_Exercises_March_2015 フォルダができています。
ls
Updated_Exercises_March_2015 Updated_Exercises_March_2015.zip
中には Exercise 1〜22 と Miscellaneous のフォルダが入っています。
cd Updated_Exercises_March_2015
ls
cd ..
Exercise 1 Exercise 13 Exercise 17 Exercise 20 Exercise 4 Exercise 8
Exercise 10 Exercise 14 Exercise 18 Exercise 21 Exercise 5 Exercise 9
Exercise 11 Exercise 15 Exercise 19 Exercise 22 Exercise 6 Information.txt
Exercise 12 Exercise 16 Exercise 2 Exercise 3 Exercise 7 Miscellaneous
配布されたコードは元のまま残しておき、コピーしたものを書き換えて使います。
cp -r 'Updated_Exercises_March_2015/Exercise 1' exercise1
フォルダ名に空白が含まれる(Exercise 1)ため、引用符(')で囲みます。囲まないと Exercise と 1 という2つの別のものとして扱われます。フォルダをコピーするので -r が必要です。付けないと cp: ... is a directory (not copied). というエラーになり、コピーされません。コピー先の名前を空白なしの exercise1 にしておくと、以降は引用符なしで扱えます。
コピーしたフォルダに移動して中身を確認します。
cd exercise1
ls
winethief.f95
コンパイラのバージョンがgfortran 10 以降の場合ではエラーが発生するコードがあるため修正が必要です。
euler.f95 と、Exercise 13〜22 の sub.f95(Exercise 16 は Case 1・2 の両方)MIN(2.0*r/cfl,1) です。実数と整数(1)を混ぜて書いており、gfortran 10 以降はこれをエラーにします。1 を 1.0 にするだけです。計算の意味は変わりません。tools/fix_kampf2009.sh がまとめて直します。sub.f95 がコンパイルできないと、続く main.f95 も「sub.mod が開けない」というエラーになります。そのため、見かけ上はエラーが2つ出ます。
Exercise 1 の winethief.f95 は、濃度が時間とともに減衰していく問題を解くコードです。
① コンパイルする
② できた実行ファイルを動かす
③ 出力ファイルを確認する
④ 結果を描画する
Exercise 1 は「コードの修正」の対象外なので、配布されたコードのままコンパイルできます。
exercise1 フォルダの中で実行します。
gfortran winethief.f95 -o decay
gfortran は Fortran のコンパイラです。人間が書いたソースコード(.f95)を、計算機が実行できるファイルに変換します。-o decay は、できあがる実行ファイルの名前を decay にするオプションです。付けない場合は a.out という名前になります。教科書に出てくる g95 はgfortran に読み替えます。
何も表示されずにプロンプトが戻ってくれば成功です。ls で decay ができていることを確認します。
ls
decay winethief.f95
./decay
./ は「今いるフォルダにある」という意味です。自分で作った実行ファイルは、./ を付けて実行します。
次のように1時間ごとのメッセージが24行表示されます。
Data output at time = 1.00000000 hours
Data output at time = 2.00000000 hours
Data output at time = 3.00000000 hours
(中略)
Data output at time = 24.0000000 hours
計算結果は output2.txt に書き出されます。
ls
head output2.txt
head はファイルの先頭10行を表示するコマンドです 0 100.000000 100.000000
1.00000000 73.5294113 69.7676392
2.00000000 54.0657425 48.6752281
3.00000000 39.7542229 33.9595566
3列の意味は次のとおりです。全部で25行(初期値 + 24時間分)あります。
| 列 | 内容 |
|---|---|
| 1列目 | 時刻(時間) |
| 2列目 | 数値計算で求めた濃度 |
| 3列目 | 解析解(厳密解)の濃度 |
output2.txt を読み込み、2列目(数値解)と3列目(解析解)を重ねて描くと、両者のずれを確認できます。描画に使う道具は自由です。数値が空白で区切られただけのテキストファイルなので、Python、MATLAB、Excel など、どれでも読み込めます。
ここでは Python の例を示します。numpy と matplotlib が必要です(環境構築の資料では5章が Python の導入です)。次の内容を plot_decay.py という名前で、output2.txt と同じフォルダ(exercise1)に保存します。
import matplotlib.pyplot as plt
import numpy as np
plt.rcParams["font.size"] = 14
# 3列のデータを読み込む(時刻, 数値解, 解析解)
time, c_num, c_true = np.loadtxt("output2.txt", unpack=True)
fig, ax = plt.subplots(figsize=(8, 5.5))
ax.plot(time, c_true, "-", color="black", linewidth=2, label="Analytical")
ax.plot(time, c_num, "o--", color="tab:red", label="Numerical")
ax.set_xlabel("Time (hours)")
ax.set_ylabel("Concentration")
ax.grid(True, alpha=0.3)
ax.legend()
fig.tight_layout()
fig.savefig("decay.png", dpi=300) # 画像ファイルに保存
plt.show() # ウィンドウに表示
np.loadtxt は数値が並んだテキストファイルを読み込む関数です。unpack=True を付けると、列ごとに別々の変数で受け取れますfig.savefig で、同じフォルダに decay.png が保存されます。dpi=300 は画像の解像度の指定ですexercise1 フォルダの中で実行します。
python plot_decay.py
次のような図が表示され、decay.png にも保存されます。黒の実線が解析解、赤の点が数値解です。配布時の設定(陰解法、時間刻み1時間)では、数値解が解析解より少し上を通ります。

MATLAB の場合は、data = load('output2.txt'); で3列の行列として読み込めるので、plot(data(:,1), data(:,2)) のように列を指定して描きます。
winethief.f95 を VS Code で開き、初期化部分の値を書き換えて保存します。
| 変数 | 意味 | 配布時の値 |
|---|---|---|
mode |
計算スキーム。1 が陽解法、2 が陰解法 |
2 |
dt |
時間刻み(秒) | 3600. |
kappa |
減衰定数 | 0.0001 |
CZERO |
濃度の初期値 | 100.0 |
書き換えたら、もう一度コンパイルしてから実行します。
gfortran winethief.f95 -o decay
./decay
mode で変わります。mode = 1 のときは output1.txt、mode = 2 のときは output2.txt ですcp output2.txt output2_dt3600.txt のように別名でコピーしておきますmode = 1 の結果を描くときは、描画スクリプトの "output2.txt" を "output1.txt" に書き換えます| 症状 | 原因と対処 |
|---|---|
gfortran: command not found |
gfortran が入っていません。sudo apt install gfortran でインストールします |
cp: ... is a directory (not copied). |
フォルダをコピーするのに -r を付けていません |
cd: too many arguments |
フォルダ名の空白が原因です。cd 'Exercise 1' のように引用符で囲みます |
./decay: No such file or directory |
コンパイルしていないか、別のフォルダにいます。pwd と ls で確認します |
| 編集したのに結果が変わらない | VS Code で保存していない(タブに ● が付いている)か、再コンパイルしていません |
output2.txt not found.(Python) |
描画スクリプトを output2.txt と別のフォルダで実行しています。または mode = 1 で計算したため、出力が output1.txt になっています |
ModuleNotFoundError: No module named 'matplotlib' |
numpy や matplotlib が入っていません。各自の Python 環境に追加します |
| 図のウィンドウが出ない | decay.png は保存されているので、そちらを開いて確認します |