外部ライブラリの構築
- 外部最適化応答(DRESP3バルクデータエントリ)
DRESP1エントリやDRESP2エントリを通じて直接使用できない応答に対しては、Fortran/C言語で独自の応答を作成して、解析時に使用するためのOptiStructの対応する共有ライブラリを構築できます。詳細については、外部応答をご参照ください。
- ユーザー定義の構造材料(MATUSRバルクデータエントリ)
MAT#エントリを通じて直接使用できない材料に対して、あるいは材料定義の柔軟性を高めるために、Fortran/C/C++言語を使用して独自の材料を作成して、解析時に使用するためのOptiStructの対応する共有ライブラリを構築できます。詳細については、ユーザー定義の構造材料をご参照ください。
- ユーザー定義の温度材料(MATUSHTバルクデータエントリ)
MAT#エントリを通じて直接使用できない材料に対して、あるいは材料定義の柔軟性を高めるために、Fortran/C/C++言語を使用して独自の材料を作成して、解析時に使用するためのOptiStructの対応する共有ライブラリを構築できます。詳細については、ユーザー定義の熱材料をご参照ください。
- ユーザー定義の熱伝達特性
QVOL、PCONV、QBDY1、およびSPCDエントリをQVOLLIB、PCONVLIB、QBDYLIB、およびSPCDLIBで定義すると、ユーザー定義の熱伝達特性を Fortran/C/C++ で作成し、ソリューション中にOptiStructが使用する対応する共有ライブラリを構築することが可能です。詳細については、ユーザー定義の熱伝達特性をご参照ください。
以下のセクションでは、Fortran/C言語を使用して外部ライブラリを構築するプロセスを説明します。
Microsoft Visual StudioがインストールされたWindowsシステム
Microsoft Visual StudioがインストールされたWindowsでダイナミックライブラリを作成する手順は次のとおりです。まず新規プロジェクトを作成し、New Projectウィンドウで、次のいずれかのパスを選択します:
Intel Visual Fortranコンパイラを使用して構築されるライブラリの場合:
New Project > Intel Visual Fortran (Template) > Library > Dynamic Link Library
Cコンパイラを使用して構築されるライブラリの場合:
- Fortranライブラリの場合、プロジェクト設定で引数受け渡し方法を変更する必要があります。Fortranタブの下でカテゴリー"External Procedures"を選択し、続いて"Argument Passing Conventions"を"C, By Reference"に変更します。
- Windowsシステムでは、ランタイム時に正しいコンパイラDLLがピックアップされることを確実にするために、
%PATH%
は正確に設定される必要があります。
Linuxシステム
- FortranまたはC言語を使用して、次のようにオブジェクトファイルを作成します:
Fortranの場合:
FC [options] -c myfile.F -o myfile.o
Cの場合:
CC [options] -c myfile.c -o myfile.o
- 次のように共有ライブラリを作成します:
LD -shared [options] myfile.o -o mylib.so
ここで、FC
- Fortranコンパイラ(
ifc
など) CC
- Cコンパイラ(
cc
やgcc
など) LD
- ユーザーのマシンにインストールされているリンカー(
ld
など)
詳細については、ご自身のシステムのマニュアルをご参照ください。
コンパイラおよびリンカーオプションは、ライブラリを構築しているプラットフォームについての情報を提供します。OptiStructは64ビットアプリケーションであるため、64ビットの共有ライブラリまたはDLLのみで動作します(64ビットの共有ライブラリを構築するための対応するオプションを使用する必要があります)。リンカーオプション“-shared
”は、共有ライブラリを構築することを指定します(IntelまたはGNUのコンパイラを使用している場合)。コード最適化パラメータといったその他のオプションは、ユーザーの判断に任され、通常OptiStructとの互換性に影響はありません。
以下の一覧は、OptiStructの各リリースプラットフォームについてのオプションを定義したもので、各種システム上で正しく機能することが検証されています。これらのオプションは、ユーザーのマシンにインストールされているコンパイラやリンカーによって変化する場合があることを心に留めてください。詳細については、ご自身のシステムのマニュアルをご参照ください。ほとんどの場合、GNUコンパイラはIntelコンパイラに代わって使用できます。ユーザー自身が選択したコンパイラで共有ライブラリを作成するには、適切なコンパイラおよびリンカーオプションを使用する必要があります。
サブルーチン / 関数の共有ライブラリへのエクスポート
- Fortranからのエクスポート:
!DEC$ ATTRIBUTES DLLEXPORT :: <subroutine name>
サブルーチンを共有ライブラリにエクスポートするには、
!DEC$ ATTRIBUTES DLLEXPORT
コマンドを使用します。 - Cからのエクスポート:
__declspec(dllexport) int <subroutine name> (<arguments>)
関数を共有ライブラリにエクスポートするには、
__declspec(dllexport)
コマンドを使用します。
一般にLinux(gcc)とWindows(cl.exe)の両方でネイティブCコンパイラを使用できますが、Intel Cコンパイラを使用してC言語で共有ライブラリを作成することもできます。Fortranを使用している場合は、Intel Fortranコンパイラを使用してFortranで共有ライブラリを作成できます。通常は、OptiStructを構築するために使用された対応するコンパイラバージョンのマイナーリリースを超えない範囲で、コンパイラバージョン番号を選択する必要があります。
これを確認するには、OptiStructのスクリプトまたはのCompute Console (ACC) GUIを-buildinfo
実行オプションを付けて実行して(GUIではUse Solver Controlチェックボックスをオフにする必要があります)、OptiStructの実行可能ファイルを構築するために使用されたコンパイラに関する情報を取得し、同等のコンパイラバージョンを使用して共有ライブラリを構築できます。この情報は、-buildinfo
実行オプションの使用後の画面出力で、“Build Information(ビルド情報)”というヘッダーの下に表示されます。
プラットフォーム | Fortranコンパイラオプション | Cコンパイラオプション | リンカーオプション |
---|---|---|---|
Win64 | /iface:default /libs:dll /threads |
/MT |
/LD |
64 | -fPIC |
-fPIC |
-shared |
nm mylib.so
を、Microsoft Visual StudioがインストールされたWindowsシステムではdumpbin /exports mylib.dll
を使って、関数が正しくエクスポートされたかどうかを検証することが可能です。このコマンドは、ライブラリに含まれるシンボルのリストを表示し、そこでユーザーは自分が書き出した関数を確認することができます。