NEMOH日本語訳（佐賀大学海洋エネルギー研究センター

今井康貴、坂中理恵子）

Nemoh は海洋構造物に作用する第 1 オーダーの流体力(付加質量、放射減衰、回折力)を求める境界要素法(BEM)コードである。これは Ecole Centrale de Nantes で 30 年間開発されている。これは多くの研究計画で使用される。典型的な使用は、浮体型波力発電装置の動的応答あるいは性能評価である。
Nemoh は世界で初めてのオープンソース BEM コードである。2014 年 1 月からアパッチ 2 ライ
セ ン ス の 条 件 の 下 で リ リ ー ス さ れ て い る 。 ラ イ セ ン ス の コ ピ ー は
http://www.apache.org/licenses/LICENSE-2.0 にある。
他の BEM ソフトウェアと異なり、Nemoh のアプローチは、線形の自由表面境界値問題(BVP)の解とおよび船体上の境界条件の定義を分離した。これにより、柔軟構造物、流力弾性、一般モードおよび慣例に従わない自由度への対処を容易にする。

概要
Nemoh は 3 つのプログラムから構成され、順番に実行される。

Matlab ルーチンフォルダーには Matlab ラッパー（インターフェース）Nemoh.m がある。
Matlab 環境からの Nemoh を簡単に使用できる。メッシュツールも提供される。Matlab ルーチ
ン・フォルダー中の matlab ルーチン axiMesh.m、Mesh.m、メッシュ・コードを参照のこと。
例が以下に示される。

インストール1

ソースコード
ソースコードをダウンロードするためには、http://lheea.ec-nantes.fr/redmine/account/register
で登録が必

要である。

その

後、ソース

コードはhttp://lheea.ec-nantes.fr/cgi-bin/hgweb.cgi/nemoh/ からダウンロードできる。アカウント情報を使用してログインする。
バージョン管理には Mercurial が使用される。コード開発に寄与したければ、Mercurial リポジ
トリのクローンを作り、同じバージョン管理ツールを使用すること。

互換環境
Executables バージョン(.exe)はここでダウンロードすることができる。
Nemoh の Matlab ルーチンはここでダウンロードすることができる。
あるいは、コードの自分のバージョンをコンパイルしてもよい。コードはインテルフォートラン
ifort でトラブルなしでコンパイルするべきである。依存性は次のとおりである:・preProcessor:
Common/Environment.f90;
Common/Identification.f90;
preProcessor/BodyConditions.f90;
preProcessor/Integration.f90;
preProcessor/Main.f90;
preProcessor/Mesh.f90
・solver:
Common/Mesh.f90;
Common/Results.f90;
Common/Identification.f90;
Solver/Core/ALLOCATE_DATA.f90;
Solver/Core/BODYCONDITIONS.f90;
Solver/Core/COM_VAR.f90;
Solver/Core/COMPUTE_GREEN.f90;
Solver/Core/COMPUTE_GREEN_FREESURFACE.f90;
2

Solver/Core/COMPUTE_KOCHIN.f90;
Solver/Core/COMPUTE_POTENTIAL_DOMAIN.f90;
Solver/Core/DEALLOCATE_DATA.f90;
Solver/Core/ELEMENTARY_FNS.f90;
Solver/Core/INITIALIZATION.f90;
Solver/Core/M_SOLVER.f90;
Solver/Core/OUTPUT.f90;
Solver/Core/PREPARE_MESH.f90;
Solver/Core/SOLVE_BEM.f90;
Solver/Core/SOLVE_BEM_FD_DIRECT.f90;
Solver/Core/SOLVE_BEM_INFD_DIRECT.f90;
Solver/NEMOH.f90
・postProcessor:/NEMOH.f90 postProcessor:
Common/Environment.f90;
Common/Identification.f90;
Common/Results.f90;
postProcessor/Compute_RAOs.f90;
postProcessor/IRF.f90;
postProcessor/Main.f90;
postProcessor/Plot_WaveElevation.f90 mesh:
Common/Identification.f90;
Mesh/calCol.f90;
Mesh/coque.f90;
Mesh/ExMaillage.f90;
Mesh/hydre.f90;
Mesh/Mailleur.f90;
mesh.f90
視覚的なスタジオ・ソリューション Nemoh.sln がマイクロソフトの視覚的なスタジオを備えた
Nemoh の容易な編集に使用されてもよい。

環境Linux 環境で Nemoh をコンパイルするためにソースコードと makefile が提供される。
インテルフォートランコンパイラーifort が使用される。他のコンパイラーではライブラリーへの3小さな調節でコンパイル可能かもしれない。
依存は Win32 環境コンパイルと同じである。

表記法と座標系
表記法と座標系がここで記述される。

Nemoh の実行
Nemoh の Matlab での実行
Nemoh を実行する最も容易な方法である。Matlab routines/ にある.m ファイルでメッシュを生成し Nemoh を実行可能である。コードは win32 互換環境で実行されることに注意。

Mesh generation メッシュ生成
軸対称のメッシュを生成するために Matlab で axiMesh.m を使用する。軸対称でないメッシュはMesh.m を使用して生成する。これらのルーチンのガイダンスは、Matlab 上で help axiMesh もしくは help Mesh と入力する。

Nemoh
両方のメッシュジェネレーターは適切なフォルダー構造および入力ファイルを生成する。その結果、Nemoh はメッシュを生成した直後に使用することができる。Nemoh.m は Nemoh の Matlabラッパーである。Nemoh.m は Matlab 環境中で計算、結果(1 次オーダー流体力係数)の輸入を行う。ガイダンスは Matlab 上で help Nemoh を入力する。

コマンドラインにおける Nemoh の実行
コードの全能力を利用するために Nemoh のコマンドライン実行が必要である。
一般モードおよび自由度4入力ファイル
入力ファイル・ID.dat file:計算の識別にこのファイルが使用される。このファイルはコードが実行される場所を示す。ワーキング・フォルダに置く。2 行目が一連の文字である。ワーキングフォルダの名前である。1 行目がこの文字列の長さである。例:(7 文字)
・input.txt および Nemoh.cal:これらのファイルが Nemoh の入力ファイルである。ID.dat フ
ァイルで指定されるワーキングフォルダにこれらを置く。例（省略）preProcessor
preProcessor の目的は、メッシュの準備、各計算条件の船体条件の生成である(放射と回折)。
計算条件は、ワークフォルダに置かれた入力ファイル Nemoh.cal に定義される。
preProcessor が実行されると、ワークフォルダに次のファイルが作成される:・/Mesh/L12.dat, /Mesh/L10.dat and /Mesh/Mesh.tec files:これらはメッシュファイルである。
L12.dat は節点と要素である。L10.dat は付加的な幾何情報である。(xOz)平面に対称の利用、節点数、パネル要素数、船体数、各船体の要素数、パネル中央座標、パネル法線ベクトルおよびパネル面積。/Mesh/Mesh.tec は可視化のための Tecplot フォーマットである。
・/Normalvelocities.dat file:このファイルは Nemoh.cal に定義された各放射および回折問題の船体条件である。
・/Integration.dat file:このファイルは、(Nemoh.cal ファイルに定義された)要求された力を得るために、船体表面における圧力積分の情報を含む。
・/Results/FKForce.dat, /Results/FKForce.tec files:各回折問題における FK 力。FKForce.tec
は Tecplot フォーマットである。FK 力の可視化に使用する。
・/Results/FreeSurface.dat file:FreeSurface.dat は自由表面の座標である。波高が計算される。
・/Results/Kochin.dat file:Kochin.dat は Kochin 関数が計算される角である。
・/Results/index.dat file:する場合、index.dat は力 ID と作用する船体 ID および Nemoh.cal間の関係を示す。さらに、放射問題の ID 運動する船体の ID および自由度の数の関係を示す。

ソルバ
ソルバの目的は、Normalvelocities.dat に定義された各問題の線形 BVP を解くことである。
その計算は、ワークフォルダにある input.txt に記述されたパラメタに依存する。
5

計算に成功すると、ワークフォルダに以下のファイルが作成される:・/Results/Forces.dat:Forces.dat は各問題の力である。
・/Results/freesurface.XX.dat:freesurface.XX.dat は、問題数 XX の自由表面である。
・/Results/Kochin.XX.dat:Kochin.XX.dat は問題数 XX の Kochin 関数である。Nemoh の Kochin
関数計算に使用された表記法と座標についてリンク・/Results/Potential.XX.dat files:Potential.XX.dat は問題 XX の船体表面上の速度ポテンシャルである。

postProcessor
postProcessor の目的は、通常のフォーマットで結果（付加質量、放射減衰、波強制力）を提供するために、計算結果のポストプロセスを実行する事である。さらに、適切な計算を行うためのフレームワークを提供する。
計算に成功すると、ワークフォルダに次の結果ファイルが作成される:・/Results/RadiationCoefficients.tec:RadiationCoefficients.tec は放射問題の付加質量および制動力である。
・/Results/DiffractionForce.tec:DiffractionForce.tec は回折問題の回折力である。
・/Results/ExcitationForce.tec:ExcitationForce.tec は回折問題の波強制力である。

ExamplesVertical cylinder
この例は 6 自由度運動(surge, sway, heave, roll, pitch, yaw)をする円柱浮体である。入力ファイルはダウンロード可能である。結果は以下の絵に示す。Aquaplus と比較した結果を示す。

2 物体の相互干渉6この例は 2 物体間の流体力干渉を扱う。2 つの物体は立方体である。立方体の 1 つはｚ軸について 45 度回転している。各物体は 6 自由度運動を行う(surge, sway, heave, roll, pitch, yaw)。入力
ファイルはダウンロードできる。
以下に結果の絵を示す。Aquaplus コードと比較する。

非対称物体
この例は(xOz)面について非対称な物体の場合である。物体は 6 自由度運動(surge, sway, heave,roll, pitch, yaw)を行う。入力ファイルはダウンロード可能である。結果を以下に示す。Aquaplus
コードと比較する。

7

メッシュフォーマット
メッシュは四角形のパネルからできている。船体の水中部だけが記述される。メッシュファイルのフォーマットは次のとおりである:
21

最初の数は 2 である。(xOz)平面に対称であれば、第 2 の数が 1 である。そうでなければ 0

1 5. 0．-10.

節点。1 番目が節点番号である。他の数が x y および z 座標である。

0 0. 0 0．0.0. 節点番号の最終行
1234

要素0000

節点番号の最後行

下のスケッチは、流体領域から船体を見た場合に、パネルを記述する方向の取り決めを示す。
（流体から見て反時計回り）

流体の相互作用を備えた異なる自由度を備えたいくつかの船体を考慮することが可能である。これは各船体を別々に分割する。組み立合わせたメッシュは、入力ファイル Nemoh.cal に定義され、preProcessor によって構築されるだろう。

メッシュ生成Nemoh にはメッシュを生成するいくつかの選択肢がある。いくつかの支援ツールが提供される。
しかし、Nemoh の正確なフォーマットにメッシュを作成できるのであれば、CAD ソフトウェアも使用可能である。

Matlab ルーチン axiMesh.m あるいは Mesh.m を使用したメッシュ生成
軸対称メッシュを生成するために Matlab で axiMesh.m を使用する。この場合、断面を生成する8ラインだけを記述する。この場合、対称軸は鉛直である。例として、直径 10m のおよび喫水 5mの垂直の円柱を生成する方法を示す:>> n=4;>> r=[0 5 5 0];>> z=[5 5 -5 -5];>> [Mass,Inertia,KH,XB,YB,ZB]=axiMesh(r,z,n)非軸対称のメッシュは Mesh.m を使用して生成される。しかし、(xOz)平面に関して対称と仮定される。したがって、船体の半分だけが記述される。このルーチンは、いくつかの船体があるメッシュを生成できる。この場合、幾何形状について記述しなければならない。メッシュは自動的に再分割される。また、水面以上の部分が切り取られる。例として、全長 10m および喫水 5m の箱のメッシュを生成する:>> nBodies=1;>> n=5;>> X(1,1,:,:)=[-5. -5.

5.;-5 -5. -5.; 5. -5. -5.; 5. -5. 5.];>> X(1,2,:,:)=[-5.

0. 5.;-5 -5.

5.; 5. -5.

5.; 5. 0.

5.];>> X(1,3,:,:)=[-5.

0. -5.; 5>> X(1,4,:,:)=[ 5.

0. 5.; 5 -5. 5.; 5. -5. -5.; 5. 0. -5.];>> X(1,5,:,:)=[-5.

0. 5.;-5

0. -5.; 5. -5. -5.;-5. -5. -5.];
0. -5.;-5. -5. -5.;-5. -5.

5.];>> tX(1)=0.;>> CG(1,:)=[0. 0. -2.5];>> nfobj(1)=300;>> [Mass,Inertia,KH,XB,YB,ZB]=Mesh(nBodies,n,X,tX,CG,nfobj)
メッシュコードを使用したメッシュ生成
Mesh は要素分割ソフトウェアではない。メッシュの再分割、変位、浮心、流体安定性のような特性を計算する。さらに、質量行列と慣性行列を計算する。ソフトウェアの目的は、手で船体の粗い記述を書き、MESH ソフトウェアで Nemoh 計算用の改良メッシュを作ることである。
入力ファイルは次のとおりである:・ID.dat file:Nemoh の識別ファイル。
・メッシュファイル:このファイルが、船体の(粗い)記述である。手作業で作られる。フォーマットは Nemoh とは少し異なる:
100

節点数25

要素数9

5. 0.-10.

節点番号。x y および z 座標である。

1234

要素を構成する節点。番号は節点番号である。

・Mesh.cal file:入力ファイル。そのフォーマットは次のとおりである:
test.dat

文字列メッシュファイルの名前

0(xOz)対称が使用される場合 1 、そうでなければ 00.

0．

0.

0．-3. 重心座標500

x 軸平行移動(1 番目の数字)および y 軸平行移動(2 番目の数字)
再分割メッシュの目標要素数

20.
1.
出力ファイルは次のとおりである:・/Mesh/Hydrostatics.dat file:浮心、排水量および水線面積。
・/Mesh/KH.dat file:船体の流体の剛性マトリクス。
・/Mesh/Description_Full.tec and /Mesh/Description_Wetted.tec:これらのファイルが Tecplot
共通フォーマットにある。船体の入力データの可視化に使用される。
・/Mesh/GC_hull.dat and /Mesh/Inertia_hull.dat files:船体重心と慣性マトリックス。これらの値は、船体の質量がその排水量に等しく、質量が船体の表面に分配される仮定を使用して導出される。
・/Mesh/mesh_file_name.dat and /Mesh/mesh_file_name.tec file:1 番目のファイルが Nemohで使用されるメッシュである。2 番目ファイルが Tecplot の可視化向けである。
・/Mesh/mesh_file_name_info.dat file:このファイルは Nemoh のメッシュファイルの節点と要素数を含んでいる。

CAD ソフトウェアの使用
CAD ソフトウェアが Nemoh のメッシュを生成するために使用できる
それらが Nemoh のメッシュファイル形式へのコンバーターになりえる surfacic なメッシュを輸
出 す る こ と が で き る と 規 定 す る 。 gdf メ ッ シ ュ フ ァ イ ル を 生 成 す る こ と が で き る 。
nemoh2wamit_01a.m と結合して使用される。

10