| サイトマップ | |
||
GWB プラグインは、Fortran インターフェイス (GWBplugin.f90) と出力ライブラリ (GWBplugin.lib) をリンクさせるための DLL です。
GWB プラグインは、Intel および GCC Fortran コンパイラで動作確認がとられています。ライブラリとインターフェイスファイルは、c:¥Program Files¥GWB¥src
ディレクトリにインストールします。インターフェイスファイルは GWBplugin.f90、リンクするライブラリは GWBplugin.lib です。チュートリアルとサンプルにしたがって、コンパイル環境とサンプルプログラムを実行して下さい (Intel Fortran コマンドライン、Visual Studio、MinGW/MSYS/gfortran のチュートリアルがあります) 。
// GWBplugin.f90 MODULE GWBpluginModule INTEGER, PARAMETER :: ANULL = -999999 ! marker for undefined value INTEGER, PARAMETER :: GWB_MAX_RESPONSE = 32 TYPE GWBplugin FUNCTION initialize(plugin, app_name, file_name, cmds) RESULT(retval) TYPE(GWBplugin), INTENT(out), TARGET :: plugin CHARACTER (LEN = *), INTENT(in) :: app_name CHARACTER (LEN = *), INTENT(in), OPTIONAL :: file_name, cmds INTEGER(C_INT) :: retval FUNCTION exec_cmd(plugin, uline) RESULT(retval) TYPE(GWBplugin), INTENT(in), TARGET :: plugin CHARACTER (LEN = *), INTENT(in) :: uline INTEGER(C_INT) :: retval FUNCTION results(plugin, f_data, f_value, f_units, ix, jy) RESULT(retval) TYPE(GWBplugin), INTENT(in), TARGET :: plugin ! f_data : CHARACTER(LEN = GWB_MAX_RESPONSE), INTENT(out), OPTIONAL :: f_data(:) !or REAL(8), INTENT(out), OPTIONAL :: f_data(:) !or INTEGER, INTENT(out), OPTIONAL :: f_data(:) CHARACTER(LEN = *), INTENT(in) :: f_value CHARACTER(LEN = *), INTENT(in), OPTIONAL :: f_units INTEGER, INTENT(in), OPTIONAL :: ix, jy INTEGER(C_INT) :: retval SUBROUTINE destroy(plugin) TYPE(GWBplugin), INTENT(in), TARGET :: plugin
まず GWBplugin オブジェクトのインスタンスを生成します。次に、アプリケーションの名前、結果を書き出すファイル、コマンドラインの引数などを渡す initialize()
関数を実行します。
FUNCTION initialize(plugin, app_name, file_name, cmds) RESULT(retval) TYPE(GWBplugin), INTENT(out), TARGET :: plugin CHARACTER (LEN = *), INTENT(in) :: app_name CHARACTER (LEN = *), INTENT(in), OPTIONAL :: file_name, cmds INTEGER(C_INT) :: retval
plugin | GWBplugin の type インスタンス | ||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|
app_name | 使用したい GWB アプリケーションの名称が含まれる文字列。rxn, spece8, react, x1t, x2t のいずれかを選択可能。 | ||||||||||
file_name [オプション] | GWB アプリケーションに出力させたいファイルの名称が含まれる文字列。出力結果をファイルに書き出さない場合は空白にすることも可能。 | ||||||||||
cmds [オプション] | アプリケーションをコマンドラインから実行する際に通常渡すコマンドラインオプションが含まれる文字列。空白文字列にすることも可能。 | ||||||||||
コマンドライン・オプション:
|
INCLUDE "GWBplugin.f90" ... USE GWBpluginModule ... TYPE(GWBplugin) :: myPlugin INTEGER :: success ... ! plug-in SpecE8 with no output written and no options success = initialize(myPlugin,"spece8") ... ! plug-in React with output written to output.txt and no options success = initialize(myPlugin,"react","output.txt") ... ! plug-in X1t with no output written, no working directory change, ! and read input from pb_contam.x1t success = initialize(myPlugin,"x1t","",& '-nocd -i "c:/program files (x86)/gwb/script/pb_contam.x1t"')
プラグインにコマンドを渡すために、exec_cmd()
関数を実行します。どのようなコマンドが使用できるかは、マニュアルに記載されていますので、それを参照して下さい。実行するコマンドを設定したら、最後に go
コマンドを渡します。
FUNCTION exec_cmd(plugin, uline) RESULT(retval) TYPE(GWBplugin), INTENT(in), TARGET :: plugin CHARACTER (LEN = *), INTENT(in) :: uline INTEGER(C_INT) :: retval
plugin | GWBplugin の type インスタンス |
---|---|
uline | GWB アプリケーションに渡したいコマンドを含む文字列。 |
exec_cmd(myPlugin,"3 mmol H+") exec_cmd(myPlugin,"2 mmol Ca++") exec_cmd(myPlugin,"5 mmolar Cl-") exec_cmd(myPlugin,"go")
GWB プラグインで実行した計算結果は、results()
関数で得ることができます。キーワードや単位、戻り値のタイプは、マニュアルの Report Command に書かれているのと同じです。results()
関数では、レポートコマンドやキーワード、単位、ノードの位置 (X1t、X2t プログラムのみ) といっしょにデータブロックのアドレスを指定します。
FUNCTION results(plugin, f_data, f_value, f_units, ix, jy) RESULT(retval) TYPE(GWBplugin), INTENT(in), TARGET :: plugin ! f_data : CHARACTER(LEN = GWB_MAX_RESPONSE), INTENT(out), OPTIONAL :: f_data(:) !or REAL(8), INTENT(out), OPTIONAL :: f_data(:) !or INTEGER, INTENT(out), OPTIONAL :: f_data(:) CHARACTER(LEN = *), INTENT(in) :: f_value CHARACTER(LEN = *), INTENT(in), OPTIONAL :: f_units INTEGER, INTENT(in), OPTIONAL :: ix, jy INTEGER(C_INT) :: retval
plugin | GWBplugin の type インスタンス |
---|---|
data [オプション] | 計算結果を埋めるデータブロックのアドレス。省略可能 (注記参照)。 |
value | レポートコマンドのキーワードと引数を含む文字列。 |
units [オプション] | 返される結果の単位を指定する文字列。デフォルトの単位を使用する場合は空白文字列にすることも可能。 |
ix [オプション] | X ノード位置 |
jy [オプション] | Y ノード位置 |
! get aqueous species names INTEGER :: ndata CHARACTER (LEN=GWB_MAX_RESPONSE), ALLOCATABLE :: Species(:) ndata = results(myPlugin,"species") ALLOCATE(Species(ndata)) results(myPlugin,Species,"species") ! get aqueous species concentrations in mg/kg REAL(8), ALLOCATABLE :: Conc(:) ALLOCATE(Conc(ndata)) results(myPlugin,Conc,"concentration aqueous","mg/kg") ! get pH at node 3,5 REAL(8) :: pH(1) results(myPlugin,pH,"pH","",3,5)
destroy()
関数を使って、GWB プラグインのオブジェクトが使用していたメモリを解放します。
SUBROUTINE destroy(plugin) TYPE(GWBplugin), INTENT(in), TARGET :: plugin
plugin | GWBplugin の type インスタンス |
---|
CALL destroy(myPlugin)
GWB plug-in で現在動作確認されているのは、Intel および GCC コンパイラです。
GWBplugin クラスが使用する GWB の DLL の場所を指定するためには、GWB インストールディレクトリを PATH 環境変数に追加する必要があります。
GWBplugin の export library (GWBplugin.lib) と interface file (GWBplugin.f90) は、GWB ディレクトリの "src" フォルダにインストールされます。
32-bit コンパイラを使って 64-bit ライブラリにリンクしたり、または、64-bit コンパイラで 32-bit ライブラリにリンクを指定するような場合にこうした問題が発生します。ご使用のコンパイラのバージョンが、インストールしている GWB のバージョンと一致しているかご確認ください。