Intel oneAPIでiRIC ソルバーをコンパイル
Intel Fortranが無料で公開されて,誰でも自分のプログラムをIntel社製のコンパイラーでコンパイルできるようになりました。
ただし,Intel OneAPIでiRICソルバーをコンパイルした場合,以前と同じ方法ではうまくいかないPCがありますね。この場合,コンパイルが成功きても,実行ファイル(****.exe) をiRICにソルバーを上書きし,iRICを起動してプロジェクト作成して計算実行ボタンを押すと,異常終了します。。困ったなぁ...と。
この問題は有料だったIntel Parallel Studio XE 2017の頃から生じていて,有料購入の場合は以前のIntel Parallel Studio XE 2015 まで戻ってダウンロード・インストールして利用すれば問題なくコンパイル成功し,iRICソルバーも異常終了せずに動きました。
理由? iRICでは,iRIC GUIとソルバー(Fortran)とを繋ぐため,iRIC独自の関数が利用されています。この関数はiriclib.libなどのライブラリに含まれており,nays2dh.f90などのソルバーをコンパイルする際は,ライブラリもFortranコードと一緒にコンパイルする必要があります。ここで,intel oneAPIの場合,以前(Intel Parallel Studio XE 2015)と同じようにコンパイルすると外部から持ってくるライブラリへのリンクをうまく処理してくれないようです。。
解決方法
これはiRIC ver.3の方法ですし,とりあえず的な方法です。そしてiRIC研究会の推奨方法でも何でもありません。当研究室で新しいPCにOne APIを入れ,コンパイルがうまくできなかったので暫定的な解決方法で用いたものです。
make.batを一部変更して,ライブラリを明示的に指定してみました。
以下のように記述します。この方法だとiRIC ver3.0対応のソルバーコンパイルができるはずです。
code: makebatpy
ifort Nays2DH.f90 /Iinclude /link /LIBPATH:libs cgnsdll_x64_ifort.lib iriclib_x64_ifort.lib /OUT:Nays2DH.exe
del *.obj
del *.mod
↑ ただし,iRIC Nays2DHの場合,並列処理のQopenmpへのリンクがエラーとなります。このリンクを追加するためのIntel Fortran側のlibが見つからず,暫定的解決として並列処理抜きでコンパイルしています。普段,Nays2DHの計算条件設定画面にてOpenMPの並列処理を利用していない方には問題ないと思います。
(iRIC ver.4のコンパイルは他にも必要なファイルがあるので、下記make.batではコンパイルできません。また改めて記録を書きます。)
準備するフォルダ構成
src(ソースコード)のフォルダの中には,以下のようにファイルを格納していきます。
srcフォルダの中身:
Nays2DH.f90(Fortran記述のソルバ)
ヘッダファイル2つ(拡張子が .h のもの)
libsフォルダ
make.bat(上に記載のコード)です。
libsフォルダの中身:
cgnsdll.libとiriclib.libの2つ
フォルダ構成の参考↓
https://scrapbox.io/files/659767f8e3df1600239aa4b5.png
Libsの中身(x64がついていないlibでもOK)↓
https://scrapbox.io/files/659768038df6a800259ec3cd.png
以上です。