外部ライブラリの構築

OptiStructでは外部ライブラリを次の用途に使用します:
  1. 外部最適化応答(DRESP3バルクデータエントリ)

    DRESP1エントリやDRESP2エントリを通じて直接使用できない応答に対しては、Fortran/C言語で独自の応答を作成して、解析時に使用するためのOptiStructの対応する共有ライブラリを構築できます。詳細については、外部応答をご参照ください。

  2. ユーザー定義の構造材料(MATUSRバルクデータエントリ)

    MAT#エントリを通じて直接使用できない材料に対して、あるいは材料定義の柔軟性を高めるために、Fortran/C/C++言語を使用して独自の材料を作成して、解析時に使用するためのOptiStructの対応する共有ライブラリを構築できます。詳細については、ユーザー定義の構造材料をご参照ください。

  3. ユーザー定義の温度材料(MATUSHTバルクデータエントリ)

    MAT#エントリを通じて直接使用できない材料に対して、あるいは材料定義の柔軟性を高めるために、Fortran/C/C++言語を使用して独自の材料を作成して、解析時に使用するためのOptiStructの対応する共有ライブラリを構築できます。詳細については、ユーザー定義の熱材料をご参照ください。

  4. ユーザー定義の熱伝達特性

    QVOLPCONVQBDY1、およびSPCDエントリをQVOLLIBPCONVLIBQBDYLIB、および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コンパイラを使用して構築されるライブラリの場合:

New Project > Visual C++ (Template) > Win32 > Win32 Project
注:
  1. Fortranライブラリの場合、プロジェクト設定で引数受け渡し方法を変更する必要があります。Fortranタブの下でカテゴリー"External Procedures"を選択し、続いて"Argument Passing Conventions"を"C, By Reference"に変更します。
  2. Windowsシステムでは、ランタイム時に正しいコンパイラDLLがピックアップされることを確実にするために、%PATH%は正確に設定される必要があります。

Linuxシステム

Linuxシステムでは、FortranまたはCファイルから開始する共有ライブラリを構築するための汎用シンタックスは次のとおりです:
  • 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コンパイラ(ccgccなど)
    LD
    ユーザーのマシンにインストールされているリンカー(ldなど)

詳細については、ご自身のシステムのマニュアルをご参照ください。

コンパイラおよびリンカーオプションは、ライブラリを構築しているプラットフォームについての情報を提供します。OptiStructは64ビットアプリケーションであるため、64ビットの共有ライブラリまたはDLLのみで動作します(64ビットの共有ライブラリを構築するための対応するオプションを使用する必要があります)。リンカーオプション“-shared”は、共有ライブラリを構築することを指定します(IntelまたはGNUのコンパイラを使用している場合)。コード最適化パラメータといったその他のオプションは、ユーザーの判断に任され、通常OptiStructとの互換性に影響はありません。

以下の一覧は、OptiStructの各リリースプラットフォームについてのオプションを定義したもので、各種システム上で正しく機能することが検証されています。これらのオプションは、ユーザーのマシンにインストールされているコンパイラやリンカーによって変化する場合があることを心に留めてください。詳細については、ご自身のシステムのマニュアルをご参照ください。ほとんどの場合、GNUコンパイラはIntelコンパイラに代わって使用できます。ユーザー自身が選択したコンパイラで共有ライブラリを作成するには、適切なコンパイラおよびリンカーオプションを使用する必要があります。

サブルーチン / 関数の共有ライブラリへのエクスポート

次の例は、定義されたサブルーチン / 関数を共有ライブラリにエクスポートするのに必要な方法を示しています。共有ライブラリは、Windowsでは.dllファイル、Linuxでは.soファイルです。
  • Fortranからのエクスポート:

    !DEC$ ATTRIBUTES DLLEXPORT :: <subroutine name>

    サブルーチンを共有ライブラリにエクスポートするには、!DEC$ ATTRIBUTES DLLEXPORTコマンドを使用します。

  • Cからのエクスポート:

    __declspec(dllexport) int <subroutine name> (<arguments>)

    関数を共有ライブラリにエクスポートするには、__declspec(dllexport) コマンドを使用します。

コンパイラバージョン

一般にLinuxgcc)と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(ビルド情報)”というヘッダーの下に表示されます。

コンパイラオプション
下の一覧に示されているコンパイラは、OptiStructの構築に使用されるものです:共有ライブラリの作成時には、次のオプションを使用できます。
プラットフォーム Fortranコンパイラオプション Cコンパイラオプション リンカーオプション
Win64 /iface:default /libs:dll /threads /MT /LD
64 -fPIC -fPIC -shared
ライブラリが構築されたら、Linuxシステムではnm mylib.soを、Microsoft Visual StudioがインストールされたWindowsシステムではdumpbin /exports mylib.dllを使って、関数が正しくエクスポートされたかどうかを検証することが可能です。このコマンドは、ライブラリに含まれるシンボルのリストを表示し、そこでユーザーは自分が書き出した関数を確認することができます。
注: 一部のFortranコンパイラは関数名を小文字または大文字に変換し、また、これら関数名にアンダースコアを付加するコンパイラもあります。ただし、ユーザーの入力デック内では、正確なシンボル名について心配する必要はありません。単に自分のコード内で定義されたとおりの関数名を使用すれば、OptiStructが自動的に適切なシンボルを配置します。