ユーザーノート

NAG Fortran Library for Win32 Applications, Mark 22
FLDLL224ML - License Managed
Windows XP/Vista/7 DLL, Intel Visual Fortran
ユーザ ノート
内容
1. イントロダクション
2. リリース後の情報
3. 制限事項
4. 一般情報
4.1. ライブラリへのアクセス
4.1.0. Fortran Builder 5.2 からの利用
4.1.1. Intel Fortran からの利用
4.1.1.1. コマンドウィンドウからの利用
4.1.1.2. MS Visual Studio からの利用
4.1.2.
Compaq Visual Fotran からの利用
4.1.3.
NAG Fortran Compiler (NAGWare f95) からの利用
4.1.4.
Absoft Pro Fortran からの利用
4.1.5.
Silverfrost (Salford) FTN95 からの利用
4.1.6.
PGI Fortran からの利用
4.1.7.
Lahey/Fujitsu Fortran からの利用
4.1.8. GNU gfortran からの利用
4.1.9.
Microsoft Visual C++ / Visual Studio からの利用
4.1.10. Intel C/C++からの利用
4.1.11. Borland C/C++からの利用
4.1.12. GNU gcc / g++からの利用
4.1.13. Microsoft Visual Basic for Applications / Excel からの利用
4.1.14. Microsoft Visual Basic 6 からの利用
4.1.15. Microsoft Visual Basic .NET からの利用
4.1.16. C#からの利用
4.1.17. Java からの利用
4.1.18. Python からの利用
4.1.19. R からの利用
4.1.20. Simfit NAG Library edition からの利用
4.1.21. その他の環境からの利用
4.2. アクセスチェック
4.3. インターフェースブロック
4.4. Example プログラム
4.5. 強調文字、斜体文字の解釈
4.6. NAG ルーチンからの出力
5. ルーチン毎の情報
6. ドキュメント
7. サポート
8. ユーザフィードバック
追記 - コンタクト先情報
1
1. イントロダクション
本ドキュメントは、NAG Fortran Library ユーザのために最低限必要な情報を含んでい
ます。本ドキュメントには、NAG Fortran Library Manual(ライブラリマニュアル)に
含まれない製品毎の情報が含まれます。マニュアルにユーザノート参照などと書かれて
いる場合は、このドキュメントを参照して下さい。
NAG ライブラリのご使用の前に、
先ず以下の情報をお読み頂きますようお願い致します。
(セクション 5 を参照)
(a) 基本的なイントロダクション
(Essential Introduction)
(b) チャプター毎のイントロダクション
(Chapter Introduction)
(c) ルーチン毎のドキュメント
(Routine Document)
2. リリース後の最新情報
本インプリメンテーションに関しての最新プラットフォームへの対応状況や利用方法に
ついての最新情報は以下の URL に公開されています。
http://www.nag.co.uk/doc/inun/fl22/dll4ml/postrelease.html
3. 制限事項
NAG Fortran Library DLL の以前のバージョン(Mark 20 と 21)は Compaq Visual
Fortran の呼び出し規約が使われていました。(ifort /iface:cvf) これは引数が参照渡しに
なる事と文字列引数が文字及び文字長の組み合わせ(/iface:mixed_str_len_arg、これは
/iface:cvf を指定すると自動的に指定される)により渡される事を意味します。 プリコン
パイル済みの*mod ファイル(引用仕様宣言)は Intel Fortran 10.1 によりコンパイルさ
れているため、別バージョンのコンパイラもしくは他のコンパイラを利用する場合には
再コンパイルが必要です。
Intel コンパイラ以外の環境から本 DLL を利用する場合には2つの入出力が利用される
ことに注意して下さい。
(本 DLL の入出力(Intel コンパイラが提供するもの)と利用す
る他社のコンパイラが提供するもの) これは主に E04 章及び H02 章のオプション指定
を行う部分で、他のプラットフォームでの利用と異なる方法が必要になることを意味し
ます。本インプリメンテーションでは2つの入出力に対応させた修正版の Example プロ
グラムが提供されています。
2
4. 一般情報
よ り 良 い パ フ ォ ー マ ン ス を 得 る た め に MKL 利 用 す る バ ー ジ ョ ン
(FLDLL224M_mkl.lib/FLDLL224M_mkl.dll)の NAG Fortran Library の利用が推奨
されています。 本インプリメンテーションで提供されている MKL 以外のバージョンで
問 題 が あ っ た 場 合 等 は
MKL
を 利 用 し な い バ ー ジ ョ ン
(FLDLL224M_nag.lib/FLDLL224M_nag.dll)の NAG Fortran Library をご利用下さ
い。
4.1. ライブラリへのアクセス
本セクションでは、ライブラリのご利用方法について説明します。なお、本セクション
では、デフォルトのフォルダ ” c:¥Program Files¥NAG¥FL22¥fldll224ml” にラ
イブラリがインストールされていることが前提となります。また、ライブラリコマンド
プロンプトのショートカットが ”スタート|すべてのプログラム|NAG|FL22” に存在す
る事が前提となっています。
NAG DLL が実行時にアクセスできるように”インストールフォルダ¥bin”が PATH に設
定されている必要があります。MKL を利用するバージョンの NAG ライブラリを利用す
る場合には更に”インストールフォルダ¥MKL_ia32_10.1¥bin”も設定されている必要が
あります。この際に”インストールフォルダ¥MKL_ia32_10.1¥bin”の指定が”インストー
ルフォルダ¥bin”の後に来るようにして下さい。
FLDLL224M_nag.dll と FLDLL224M_mkl.dll へのアクセスが、現在の環境設定で可
能で あるかど うかを確認す るために 、 スタートメ ニュー下 に診断用のプ ログラ ム
NAG_Fortran_DLL_info.exe へのショートカットが利用できます。
スタート|すべてのプログラム|NAG|FL22| NAG Fortran Library for Win32
Applications (FLDLL224ML)|Check Accessibility
コマンドプロンプトからの環境変数の設定についてはセクション 4.1.1.1 をご参照下さい。
環境変数 PATH、LIB、及び INCLUDE はインストール時に設定されている場合もあり
ます。コントロールパネルから環境変数を設定する場合に以下の通りに行って下さい。
環境変数 PATH が以下を含むように設定して下さい。
c:¥Program Files¥NAG¥FL22¥fldll224ml¥batch;
3
c:¥Program Files¥NAG¥FL22¥fldll224ml¥bin;
c:¥Program Files¥NAG¥FL22¥fldll224ml¥MKL_ia32_10.1¥bin; 現在の設定
環境変数 LIB が以下を含むように設定して下さい。
c:¥Program Files¥NAG¥FL22¥fldll224ml¥lib;
c:¥Program Files¥NAG¥FL22¥fldll224ml¥MKL_ia32_10.1¥lib; 現在の設定
環境変数 INCLUDE が以下を含むように設定して下さい。
c:¥Program Files¥NAG¥FL22¥fldll224ml¥nag_interface_blocks; 現在の設定
※上記はデフォルトのインストール先にインストールを行った場合の設定です。インス
トール先がデフォルトでない場合は適切なフォルダで置き換えて下さい。
本インプリメンテーションの FLDLL224M_mkl.lib では MKL のシンボルもエクスポー
ト さ れ て い ま す 。 そ の た め 明 示 的 に MKL の イ ン タ ー フ ェ ー ス ( libguide40.lib,
mkl_intel_s_dll.lib, mkl_intel_thread_dll.lib, mkl_core_dll.lib)を指定する必要はあり
ま せ ん 。 し か し な が ら も し 指 定 を 行 う 場 合 に は NAG イ ン ポ ー ト ラ イ ブ ラ リ
(FLDLL224M_mkl.lib よりも後に指定を行うようにして下さい。
例)
FLDLL224M_mkl.lib libguide40.lib mkl_intel_s_dll.lib
mkl_intel_thread_dll.lib mkl_core_dll.lib
ここから後ろのセクションでは NAG Fortran DLL を他の環境から利用する方法を説明
します。以下の URL では NAG Fortran DLL 及び NAG C DLL を様々な環境から利用
するための情報が公開されています。
http://www.nag.co.uk/numeric/Num_DLLhelp.asp
4
4.1.0. Fortran Builder 5.2 からの利用
NAG Fortran Library (FLDLL224ML)を、面倒な設定なしに Fortran Builder 5.2
からご利用頂けます。
1. メニュー「ファイル|新規作成|プロジェクト」から、プロジェクト作成において、
「NAG LIB アプリケーション」を選択します。
2. テンプレートからルーチンを選択しますと、サンプルプログラムが自動的に作成され、
テンプレートとしてご利用頂けます。
また、コンソールアプリケーションなど、その他のプロジェクトからでも、メニュー「プ
ロジェクト|プロジェクトの設定(クイック実行設定)
」から、付加機能「NAG Fortran
ラ イ ブ ラ リ を 利 用 す る 」 に チ ェ ッ ク を 入 れ る だ け で 、 NAG Fortran Library
(FLDLL224ML)のルーチンを呼び出すことができます。
5
4.1.1. Intel Fortran からの利用
NAG Fortran DLL は Intel Fortran 10.1 を用いてビルドされています。Intel Fortran 11
以 降 で コ ン パ イ ラ さ れ た プ ロ グ ラ ム か ら 利 用 す る 場 合 に は libifcoremd.dll 及 び
libmmd.dll の名前を変更するかもしくは”インストールフォルダ¥bin”に移動し、正しい
Intel Fortran 実行時 DLL が利用されるようにして下さい。
4.1.1.1. コマンドウィンドウからの利用
このインプリメンテーションをコマンドウィンドウからアクセス場合、いくつかの環境
変数の設定が必要です。
(システムで設定されていない場合 - 上記参照)
以下のショートカットを利用すると INCLUDE, LIB, PATH の各環境変数、および提供
されている MKL があらかじめ設定されたコマンドウィンドウが立ち上がります。
Start|All Programs|NAG|FL22|NAG Fortran Library for Win32 Applications
(FLDLL224ML) Command Prompt
ショートカットを利用しない場合は以下のバッチファイルを利用して環境変数の設定を
行うことも可能です。
c:¥Program Files¥NAG¥FL22¥fldll224ml¥batch¥envvars.bat
環境が設定された状態で以下のようにコンパイル&リンクすることができます。
(driver.f がユーザプログラムの場合)
BLAS/LAPACK に MKL を利用する場合:
ifort /iface:cvf /MD driver.f FLDLL224M_mkl.lib
BLAS/LAPACK に MKL を利用しない場合:
ifort /iface:cvf /MD driver.f FLDLL224M_nag.lib
マ ル チス レッ ドプ ログラ ム の場 合は 、以 下のよ う に、 オプ ショ ン /threads 及 び
/automatic を付けてコンパイルして下さい。
ifort /iface:cvf /MD /automatic driver.f FLDLL224M_mkl.lib
ノート:Intel Visual Fortran コンパイラ環境変数が設定されている必要があります。
(詳細はコンパイラの User’s Guide をご参照下さい。)
6
4.1.1.2. MS Visual Studio からの利用
以下は Visual Studio .NET 2003 / 2005 / 2008 及び Intel Fortran Compiler 10.1 を用い
た場合の説明です。
(それ以外のバージョンでは異なる場合があります)
NAG DLL が実行時にアクセスできるように、インストールフォルダ¥bin が PATH に含
まれるようにして下さい。 さらに MKL を利用する DLL を利用する場合には、インス
トールフォルダ¥MKL_ia32_10.1¥bin も PATH に含まれるようにして下さい。ただし
この場合、インストールフォルダ¥bin よりも後に指定するようにして下さい。
以下の方法で今後作成されるプロジェクトで NAG DLL が利用できるようになります。
1.
ツール → オプションを選択して下さい。
2.
開いたダイアログウィンドウで Intel Fortran を選択を選択して下さい。
3.
ライブラリパネルの右にある[…]を選択を選択して下さい。
4.
ディレクトリの設定で NAG Library へのパスを指定を選択して下さい。デフォル
トでは以下のパスを指定します:
"c:¥Program Files¥NAG¥FL22¥fldll224ml¥lib"
5.
本インプリメンテーションでは BLAS、LAPACK のシンボルが NAG ライブラリ
からエクスポートされますので MKL への明示的なパスの指定は通常不要です。も
し指定を行う必要がある場合には MKL ライブラリフォルダを NAG Library の指
定の後で行うようにして下さい。
6.
OK ボタンを押します。
7.
Includes の横にある[…]ボタンをクリックします。
8.
NAG インターフェースブロックへのパスを指定します。デフォルトでは:
"c:¥Program Files¥NAG¥FL22¥fldll224ml¥nag_interface_blocks"
9.
OK ボタンを押します。
10. OK ボタンを再度押します。
以後、Intel Fortran プロジェクトを作成した場合に NAG ライブラリ及びインターフェ
ースブロックのフルパス指定は必要ありません。
インターフェースブロックは USE 文を用いて利用することができます。詳細は本ドキュ
メントのセクション 4.3 をご参照下さい。
上記の設定は以後すべての Intel Fortran プロジェクトに対して有効ですが、それぞれの
プロジェクトで更に以下の設定が必要です。
7
本ライブラリはフルオプティマイズされています。そのため Release モード以外では C
実行時ライブラリに関する警告メッセージが表示される場合がありますが問題はありま
せん。Release モードへの設定はツールバーより行うかもしくはビルド → 構成マネー
ジャメニューより行うことが可能です。
NAG ライブラリをプロジェクトに追加するにはプロジェクトメニューよりプロパティー
を選択して下さい。ダイアログウィンドウが表示されるのでリンカの入力を選択します。
追 加 の 依 存 フ ァ イ ル に FLDLL224M_mkl.lib ( MKL を 使 う 場 合 )、 も し く は
FLDLL224M_nag.lib と指定します。
更に呼び出し規約を CVF に指定する必要があります。 それを行うにはプロパティーウ
インドウから Fortran をクリックし外部手続きを選択します。そして呼び出し規約を
CVF に設定し、最後に OK を押します。
続いてマルチスレッドの実行時 DLL を利用するように設定します。
(推奨)それを行う
にはプロパティウインドウより Fortran をクリックし、実行時ライブラリの指定をマル
チスレッドとし、最後に OK を押します。
マルチスレッドアプリケーションの為に、マルチスレッドランタイムライブラリを選択
することと同時に、/automatic(または、/Qauto)コンパイラフラグを設定します。
これを行うには、プロパティウインドウより Fortran をクリックし、Data を選択して
下さい。右手のパネルで Local Variable Storage をクリックし、ドロップダウンリ
ストから Local Variables AUTOMATIC を選択して下さい。
8
4.1.2. Compaq Visual Fortran からの利用
本ライブラリが格納されているフォルダが環境変数 LIB に設定されている場合、以下の
ようにコンパイル・リンクを行えます(driver.f がユーザプログラムの例):
f90 driver.f FLDLL224M_mkl.lib
もしくは
f90 driver.f FLDLL224M_nag.lib
4.1.3. NAG Fortran Compiler (NAGWare f95)からの利用
以下の例のように呼び出しが可能です(driver.f がユーザプログラムの例):
f95 -f77 -w=obs -o driver.exe driver.f "インストールフォルダ¥lib¥FLDLL224M_mkl.lib"
もしくは
f95 -f77 -w=obs -o driver.exe driver.f "インストールフォルダ¥lib¥FLDLL224M_nag.lib"
こ れ に よ り driver.exe が 出 力 さ れ ま す 。 こ こ で FLDLL224M_mkl.lib も し く は
FLDLL224M_nag.lib のフルパスを指定する必要があります。もしもスペースがパス名
に含まれる場合にはクォーテーションでくくって下さい。
4.1.4. Absoft Pro Fortran からの利用
サンプルプログラム D02CJFE.F と F07CEFE.F を修正したものが Absoft F77 / F95
Version 10.2 用 にそれぞれ提供されています。これらのファイルは以下のフォルダに提
供されます。
インストールフォルダ¥samples¥absoft_fortran_example
Absoft Pro Fortran から NAG ライブラリを使用する場合、以下の4つの点にご注意下さ
い。
1.
実数の引数と関数は全て DOULBE PRECISION です。
9
2.
ラ イ ブ ラ リ と コ ー ル バ ッ ク 関 数 は す べ て STDCALL と 宣 言 し て 下 さ い 。
(absoft.f のコードの CHANGE1 部分参照)
3.
NAG ライブラリプロシージャへの CHARACTER 引数は CVF プロトコルを使用
し て 渡 し て 下 さ い 。 こ の プ ロ ト コ ル で は CHARACTER 引 数 の 長 さ が 、
CHARACTER 引数の直後に Integer 引数として渡されます。Absoft Pro Fortran
コンパイラーでは CHARACTER 引数を引数リストの後に Integer 値として渡しま
す。
このプロトコルを使用するには、VAL(LOC(…))シーケンスを使用して下さい。
LOC(…)関数は引数のアドレスを取ります。VAL(…)関数はその引数を値で渡しま
す。その後 VAL(…)を用いて引数長さを渡して下さい。
サンプルコードでは、全ての D02CJF(Example プログラム D02CFJE.F)への
呼び出しの際の仮引数 RELABBS(実引数は Default)が二つの引数で置き換えら
れます。
VAL(LOC(RELABS)), VAL(7)
(NEW と記された行 RELABS が宣言され Default 値を代入されている部分
(CHANGE2 部分)参照)
4.
サブルーチン引数のルーチンは呼び出しルーチンと同じファイル内に存在する必
要があります。
(非 stdcall コンパイラはすべてそのようになっています)
本ライブラリが格納されているフォルダが環境変数 LIB に設定されている場合、以下の
ようにコンパイル・リンクを行えます
(driver.f もしくは driver.for がユーザプログラムの例):
f95 driver.f FLDLL224M_mkl.lib
もしくは
f95 driver.f FLDLL224M_nag.lib
コンパイラのバージョン 10.2 では、プログラムは正しくリンクされません。 これは、2
つの補助ルーチン D02CJX および D02CJW が引数として渡されるからです。 NAG ラ
10
イブラリから出たシンボルが Absoft 10.2 のリンカと互換性がありません。しかし、この
制限があっても NAG ルーチンの大部分は Absoft 10.2 コンパイラでコンパイル/リンク
が可能です。
4.1.5. Silverfrost(Salford) FTN95 からの利用
SLINK version 1.26 以上と FTN95 version 1.23 以上が必要です。ソースコードの変更
は必要ありませんが FTN95 が cdecl 呼び出し規約の一種をデフォルトで使っているため、
CVF 呼び出し規約を利用する旨を明示的に指定する必要があります。(/IMPORT_LIB
オプション) 以下に例を示します:
ftn95 driver.f /import_lib "インストールフォルダ¥bin¥FLDLL224M_mkl.dll"
/link
もしくは
ftn95 driver.f /import_lib "インストールフォルダ¥bin¥FLDLL24M_nag.dll"
/link
FLDLL224M_mkl.lib もしくは FLDLL224M_nag.lib のフルパスを指定する必要があり
ます。もしもスペースがパス名に含まれる場合にはクォーテーションでくくって下さい。
引数リスト経由で NAGDLL 内のルーチンに渡される外部名は、自動的に同ファイル内で
あるかどうか判別されます。
以下のようにコンパイルリンクすることも可能です。
ftn95 /f_stdcall driver.f
slink driver.obj "インストールフォルダ¥bin¥FLDLL224M_nag.dll"
コンパイル時と同様に、もしもスペースがパス名に含まれる場合にはクォーテーション
でくくって下さい。リンカは DLL と直接リンクし*.lib ファイルとはリンクしないことを
注意して下さい。
Plato3 は FTN95 と共に提供される IDE(統合開発環境)です。Plato3 から NAG ルー
チンを使う場合には以下のように行って下さい。:
11
1.
File メニューより'New Project'を選択します。
2.
'Fortran Application'を選択しプロジェクト名と格納場所を指定します。
3.
Project Explorer ウィンドウでソースファイルを右クリックしてプロジェクトを
構 成 す る フ ァ イ ル を 入 力 し ま す 。 ( 例 え ば NAG サ ン プ ル プ ロ グ ラ ム の
C05NBFE.F)
4.
Project Explorer の'References'を右クリックして NAG DLL の名前を入力します。
例)FLDLL224M_nag.dll.
5.
コンパイラが version 5.2 よりも古い場合、'Checkmate'オプションの指定は行わ
ないようにして下さい。version 5.2 以前の FTN95 と NAG STDCALL DLL は
'Checkmate'オプションで正常に稼働しません。例えば'Release Win32'を選択しま
す。
6.
STDCALL オプションの指定を Project | Properties | Compiler Options |
Miscellaneous で/F_STDCALL を指定して行います。
7.
Plato3 は標準入出力リダイレクションをサポートしていません。回避するには例
えば下記のように明示的にファイルをオープンして下さい。(メインプログラム
の装置6を使用する前に)
open(6,file='c:¥test.res')
4.1.6. PGI Fortran からの利用
本ライブラリのインストール先を考慮して環境変数 LIB と PATH が正しく設定されてい
る場合、以下のようにコンパイル・リンクを行えます
(driver.f がユーザプログラムの例):
pgf90 driver.f FLDLL224M_nag.lib -o driver.exe
もしくは
pgf90 driver.f FLDLL224M_mkl.lib -o driver.exe
上記は、pgf90 version 8.0-6 を用いてテストされています。
12
4.1.7. Lahey/Fujitsu Fortran からの利用
NAG DLL を Lahey/Fujitsu Fortran か ら 使 う 方 法 を 示 す た め に 、 修 正 さ れ た
D02CJFE.F (lahey.f)が以下のフォルダに提供されています。
install dir¥samples¥lahey_fortran_example
以下は Lahey Fortran version 7.1 及び 7.2 でテスト済みです。
1.
Lahey Fortran から NAG DLL を利用するにはいくつかのソースコードの改編が
必要です:
a.
呼び出す NAG ルーチンそれぞれに対して DLL_IMPORT 文を挿入して下さ
い。
例)
DLL_IMPORT D02CJF
b.
DLL 内のルーチンへの引数として渡される NAG ルーチンに対して呼び出し
側に DLL_IMPORT 文を挿入して下さい。
例)
DLL_IMPORT D02CJW
c.
ユーザが引数として与えるサブルーチン、もしくは関数に対して呼び出し側
に DLL_IMPORT 文を挿入して下さい。そしてユーザが定義する側では
DLL_EXPORT 文を指定して下さい。
サブルーチン OUT の場合
例)
DLL_IMPORT OUT(呼び出し側)
DLL_EXPORT OUT(ユーザ定義側)
これらのルーチンと関数はすべて EXTERNAL 宣言と型の宣言が必要です。
インポートされる関数は大文字と小文字が別に扱われますので NAG の名前
はすべて大文字にするように注意して下さい。
文字列引数については NAG DLL の様式に合わせる必要があります。文字引
数は文字列長を渡さなくするために以下のように行って下さい:
13
VAL(POINTER(char_arg))
更にその後ろに NAG DLL の様式に合わせるために文字列長を引数として渡
して下さい。両方とも値渡しとなります。
例)
CALL D02CJF (X, XEND2, N, Y, FCN, TOL, VAL(POINTER('Default')),
+ VAL(LEN('Default')), OUT, G, W, IFAIL)
2.
コンパイルとリンク
全てのルーチンに"-ml bc"オプションを付けてコンパイルして下さい。これにより
stdcall 呼び出し規約が使われるようになります。 更に NAG DLL のインポート
ライブラリ(*.lib ファイル)が環境変数 LIB で指定されるフォルダにあるように
して下さい。もしくはリンカのオプション-LIBPATH で明示的に指定することも
可能です。更にフルパスによる指定も可能です。
例)
lf95 d02cjfe.f "インストールフォルダ¥lib¥FLDLL224M_mkl.lib" -ml bc
もしくは
lf95 d02cjfe.f "インストールフォルダ¥lib¥FLDLL224M_nag.lib" -ml bc
3.
実行
実行時には DLL の格納場所が環境変数 PATH で指定されているように注意して下
さい。
4.1.8. GNU gfortran からの利用
gfortran から NAG Fortran Library Mark 22 DLL を呼び出すには、以下のようなコマ
ンドを使います。ここで、driver.f がユーザプログラムで、driver.exe が生成され
る実行形式です。
注:以下のコマンドは本来1行で書かれるべきものです。ここでは、本ノートの1行当
たりの文字数の関係上(1行に入り切らない為)2行に分けています。
Windows コマンドプロンプトから gfortran を使う場合:
gfortran -mrtd driver.f "インストールフォルダ¥lib¥FLDLL224M_mkl.lib"
-o driver.exe
14
もしくは
gfortran -mrtd driver.f "インストールフォルダ¥lib¥FLDLL224M_nag.lib"
-o driver.exe
Cygwin ターミナル (xterm) から g77 を使う場合:
gfortran -mrtd driver.f "インストールフォルダ/lib/FLDLL224M_mkl.lib"
-o driver.exe
もしくは
gfortran -mrtd driver.f "インストールフォルダ/lib/FLDLL224M_nag.lib"
-o driver.exe
文字列引数は、特別な注意を要します。文字列引数の直後に文字列長の値を渡す必要が
あります。
例)
DEV = G01FAF(TAIL,%VAL(1),P,IFAIL)
example プログラム D02CJFE.F に於いて、
(ルーチン D02CJF が呼び出されている全て
の箇所で)仮引数 RELABS(実引数 ‘Default’)は、‘Default’,%VAL(7)で置き換
える必要があります。
引数が文字配列の場合は、各々の配列要素の長さを渡す必要があります。
この情報は GNU Fortran 4.4.0 で検証されています。
gfortran で の NAG DLL の 使 用 を 示 す 為 、 example プ ロ グ ラ ム D02CJFE.F と
G01FAFE.F の修正版が、以下のフォルダに提供されます。
インストールフォルダ¥samples¥gfortran_examples
15
4.1.9. Microsoft Visual C++ / Visual Studio からの利用
NAG Fortran DLL は注意して利用すれば Microsoft Visual Studio .NET 2003 もしくは
それ以降の C/C++環境から利用可能です。利用をより簡単にするために Fortran と C の
型のマッピング情報を持った C ヘッダファイルが提供されています。必要に応じてヘッ
ダファイルの中から必要な部分をコピーして利用するかもしくは include することが推
奨されます。
以下のフォルダに C/C++から Fortran DLL を利用するサンプルが提供されています。
インストールフォルダ¥samples¥c_examples
および
インストールフォルダ¥samples¥cpp_examples
インストールフォルダ¥headers 下に提供されている techdoc.html により詳細な情
報が含まれています。このドキュメントはスタートメニューからも参照可能です。
Start|All Programs|NAG|FL22| NAG Fortran Library for Win32
Applications (FLDLL224ML)|C & C++ Header File Information
主な情報としては以下のようなものがあります。

STDCALL 呼び出し規約を指定する。

C と Fortran では配列順序が異なる。

ヘッダファイルを使用する事でエラーチェックを行なえる。

Fortran 文字列は二つのパラメータとして扱われる。(文字列、文字列長)

C より DLL を呼び出す Example が提供される。
(インストールフォルダ¥samples¥c_examples)

C++より DLL を呼び出す Example が提供される。
(インストールフォルダ¥samples¥cpp_examples)

C プログラムは.c 拡張子、C++プログラムは.cpp 拡張子を用いる。
本ライブラリが格納されているフォルダが環境変数 LIB に設定されている場合、以下の
ようにコンパイル・リンクを行えます(driver.c がユーザプログラムの例):
16
cl driver.c FLDLL224M_mkl.lib
もしくは
cl driver.c FLDLL224M_nag.lib
上記はヘッダファイルへのパスが環境変数 INCLUDE に含まれていることが前提です。
含まれていない場合には以下のように行って下さい:
cl driver.c FLDLL224M_mkl.lib /I"インストールフォルダ¥headers"
もしくは
cl driver.c FLDLL224M_nag.lib /I"インストールフォルダ¥headers"
以下は Visual Studio .NET 2003 と Visual Studio 2005 に対する設定です。
Visual Studio IDE を利用する場合には以下の設定を行いリンクが行えるように設定可
能です。プロジェクトプロパティーからリンカ|入力|追加の依存ファイルに
FLDLL224M_nag.lib もしくは FLDLL224M_mkl.lib を指定します。
もし環境変数 LIB
が他で設定されていなければプロジェクトプロパティーからリンカ|全般|追加のライブ
ラリディレクトリにインストールフォルダ¥lib を追加して下さい。
4.1.10. Intel C/C++からの利用
4.1.9 で説明されているヘッダファイルについての情報は Intel C にもあてはまります。
本ライブラリが格納されているフォルダが環境変数 LIB に設定されている場合、以下の
ようにコンパイル・リンクを行えます(driver.c がユーザプログラムの例):
icl driver.c /DUSE_STDCALL FLDLL224M_mkl.lib /I"インストールフォルダ¥c_headers"
もしくは
icl driver.c /DUSE_STDCALL FLDLL224M_nag.lib /I"インストールフォルダ¥c_headers"
17
4.1.11. Borland C/C++からの利用
4.1.9 で説明されているヘッダファイルについての情報は Borland C/C++にもあてはまり
ます。Borland のインポートライブラリは提供されていませんが以下のように DLL から
生成することができます:
impdef name.def "インストールフォルダ¥bin¥name.dll"
implib name.lib name.def
ここで name は NAG DLL の名前を表します。
例)
FLDLL224M_mkl 又は FLDLL224M_nag
最初の文はモジュール定義ファイルを生成します。そして2番目の文がインポートライ
ブラリ name.lib を生成します。IMPLIB からの警告が発せられますが無害です。(他の
使用方法が簡単に行えるようにいくつかのシンボルを定義しているために出力されま
す)本ライブラリが格納されているフォルダが環境変数 LIB に設定されている場合、以
下のようにコンパイル/リンクを行えます(driver.c がユーザプログラムの例)
:
bcc32 -DUSE_STDCALL -I"インストールフォルダ¥c_headers" driver.c name.lib
必要であれば bcc32.cfg に NAG ヘッダファイルの位置を設定することも可能です。詳
細はコンパイラのドキュメントをご参照下さい。設定を行った場合、例えば以下のよう
にコンパイル/リンク可能です:
bcc32 -DUSE_STDCALL driver.c name.lib
4.1.12. GNU gcc / g++からの利用
セクション 4.1.9 で説明されているヘッダファイルについての情報は、gcc / g++にも当て
はまります。
gcc 又は g++から NAG Fortran Library DLL を呼び出すには、以下のようなコマンドを
使います。ここで、driver.c 又は driver.cpp がユーザプログラムで、driver.exe
が生成される実行形式です。
注:以下のコマンドは本来1行で書かれるべきものです。ここでは、本ノートの1行当
18
たりの文字数の関係上(1行に入り切らない為)2行に分けています。
Windows コマンドプロンプトから C プログラムをコンパイルする為 gcc を使う場合:
gcc -D USE_STDCALL -D _WIN32 -I "インストールフォルダ¥c_headers" driver.c
"インストールフォルダ¥lib¥FLDLL224M_mkl.lib" -o driver.exe
もしくは
gcc -D USE_STDCALL -D _WIN32 -I "インストールフォルダ¥c_headers" driver.c
"インストールフォルダ¥lib¥FLDLL224M_nag.lib" -o driver.exe
Cygwin ターミナル (xterm) から C プログラムをコンパイルする為 gcc を使う場合:
gcc -D USE_STDCALL -D _WIN32 -I "インストールフォルダ/c_headers" driver.c
"インストールフォルダ/lib/FLDLL224M_mkl.lib" -o driver.exe
もしくは
gcc -D USE_STDCALL -D _WIN32 -I "インストールフォルダ/c_headers" driver.c
"インストールフォルダ/lib/FLDLL224M_nag.lib" -o driver.exe
Windows コマンドプロンプトから C++プログラムをコンパイルする為 g++を使う場合:
g++ -D USE_STDCALL -D _WIN32 -I "インストールフォルダ¥c_headers" driver.cpp
"インストールフォルダ¥lib¥FLDLL224M_mkl.lib" -o driver.exe
もしくは
g++ -D USE_STDCALL -D _WIN32 -I "インストールフォルダ¥c_headers" driver.cpp
"インストールフォルダ¥lib¥FLDLL224M_nag.lib" -o driver.exe
Cygwin ターミナル (xterm) から C++プログラムをコンパイルする為 g++を使う場合:
g++ -D USE_STDCALL -D _WIN32 -I "インストールフォルダ/c_headers" driver.cpp
"インストールフォルダ/lib/FLDLL224M_mkl.lib" -o driver.exe
もしくは
g++ -D USE_STDCALL -D _WIN32 -I "インストールフォルダ/c_headers" driver.cpp
"インストールフォルダ/lib/FLDLL224M_nag.lib" -o driver.exe
この情報は gcc / g++ 3.4.5(mingw special)と gcc 3.3.3(cygwin sepcial)で検証されていま
す。
19
4.1.13. Microsoft Visual Basic for Applications (VBA) / Excel からの利用
Fortran DLL は Excel シートで利用することに適しています。ルーチンは、Visual Basic
for Applications (VBA)のコードから呼び出されます。(VBA と Visual Basic 6 (VB 6)は
類似しており、その両方で、同じ NAG 宣言文が使われます。)
Excel からの利用方法のサンプルは以下のフォルダに提供されます:
インストールフォルダ¥samples¥excel_examples
イ ン ス ト ー ル フ ォ ル ダ ¥samples¥excel_examples¥linear_algebra の
xls_demo.txt には Excel から NAG DLL を使う際のヒントが含まれています。VB6 /
VBA から NAG DLL を呼び出す際の例証として、VB 6 examples もまたご参考下さい。
主な情報としては以下のようなものがあります。

インストールフォルダ¥vb_headers¥vb6.txt に提供される Declare 文をコピーし
て利用する。このファイルへのショートカットは以下のスタートメニューからも
提供されます。
Start|All Programs|NAG|FL22|NAG Fortran Library for Win32
Applications (FLDLL224ML)|VB6 & VBA Declare Statements

Fortran 配列は1で始まるので Option Base 1 をなるべく設定して下さい。

Variant タイプは実際の引数として使用できません。Long、Double、Character
の指定が必要となります。Option Explicit をなるべく設定して下さい。

NAG ルーチンが配列を引数としている場合、実際に引数として VBA 配列の最初
の要素を指定します。例えば A(1,1)など

通常 1 又は 2*3 等の計算式を引数として使用できません。(例外として NAG が提
供する Declare ステートメントで ByVal と指定されているものの場合はこれを行
なう事ができます)

Fortran 文字列が引数である場合は二つの VBA 引数が必要となります。
(ByVal
文字列と ByVal length_of_string 引数が必要となります)

DLL ルーチン内より画面への出力を行なわないようにして下さい。(IFAIL=1 と
して出力しない設定にして下さい)
20
4.1.14. Microsoft Visual Basic 6 からの利用
Visual Basic 6 (VB 6)と Visual Basic for Applications (VBA)は似ているため、VBA に関
する情報は VB 6 でも適用されます。配列の扱い及び文字列の扱いを特にご注意下さい。
Visual Basic 6 からの DLL の呼び出しについてのサンプルは以下に提供されます:
インストールフォルダ¥samples¥vb6_examples
VB 6 / VBA から NAG DLL を呼び出す際の例証として、Excel examples の VBA コード
もまたご参考下さい。
主な情報としては以下のようなものがあります。

インストールフォルダ¥vb_headers¥vb6.txt に提供される Declare 文をコピーし
て利用する。このファイルへのショートカットは以下のスタートメニューからも
提供されます。
Start|All Programs|NAG|FL22|NAG Fortran Library for Win32
Applications (FLDLL224ML)|VB6 & VBA Declare Statements

Fortran 配列は1で始まるので Option Base 1 をなるべく設定して下さい。

Variant タイプは実際の引数として使用できません。Long、Double、Character
の指定が必要となります。Option Explicit をなるべく設定して下さい。

NAG ルーチンが配列を引数としている場合、実際に引数として VBA 配列の最初
の要素を指定します。例えば A(1,1)など

通常 1 又は 2*3 等の計算式を引数として使用できません。(例外として NAG が提
供する Declare ステートメントで ByVal と指定されているものの場合はこれを行
なう事ができます)

Fortran 文字列が引数である場合は二つの VBA 引数が必要となります。
(ByVal
文字列と ByVal length_of_string 引数が必要となります)

DLL ルーチン内より画面への出力を行なわないようにして下さい。(IFAIL=1 と
して出力しない設定にして下さい)
21
4.1.15. Microsoft Visual Basic .NET からの利用
多くのライブラリルーチンは Visual Basic .NET (VB.NET)から呼び出し可能です。
VB.NET からの利用方法のサンプルは以下のフォルダに提供されます:
インストールフォルダ¥samples¥vb.net_examples
(これらの examples は、Visual Studio .NET 2003 を使用し作成されています。Visual
Studio 2005 以降でロードした場合、ソリューション/プロジェクトファイルは、Visual
Studio 変換ウィザードでコンバートされます)
主な情報としては以下のようなものがあります。

インストールフォルダ¥vb_headers¥vbdnet.txt に提供される Declare 文をコ
ピーして利用する。このファイルへのショートカットは以下のスタートメニュー
からも提供されます。
Start|All Programs|NAG|FL22|NAG Fortran Library for Win32
Applications (FLDLL224ML)|VB.NET Declare Statements

Fortran 配列は1で始まるので Option Base 1 をなるべく設定して下さい。

型のマッピングは VB 6 の場合と異なります。Integer は Fortran の INTEGER
に対応し、Double は Fortran の DOUBLE PRECISION にそれぞれ対応します。

Fortran は参照呼出し、
VB.NET は値呼び出しです。VB 6 と VB.NET では Declare
文が異なります。

VB 6 と同様に、配列引数が必要とされる場合は、配列の一番目の要素を渡して下
さい。

VB.NET では、コールバック関数における配列は、値渡しされた IntPtr によって
表現されます。
(d02ejf_example のコードを参照して下さい。
)

VB 6 と同様に、Fortran 文字引数は 2 つの実引数で構成されます。ByVal 文字列
引数の後に、ByVal 文字列長が続きます。

VB.NET 配列は行順で VB 6 や Fortran のように列順ではありません。これは配
列の転置が必要であることを意味します。

配 列 の 格 納 方 法 が 異 な る た め 、 Fortran ル ー チ ン の ”Leading dimension” は
VB.NET 配列の第二次元になります。たとえば VB.NET で A(2,3)の場合に
は”Leading dimension”に4(配列指標が0からスタートするため)を渡します。
22

DLL ルーチン内より画面への出力を行なわないようにして下さい。(IFAIL=1 と
して出力しない設定にして下さい)

linear_algebra exmple は 、 文 字 列 (string) 、 文 字 (character) 、 複 素 数
(complex) の引数の取り扱いを含む、様々なライブラリルーチン(線形代数その他)
呼び出しの例証となります。
4.1.16. C#からの利用
C#からの NAG Fortran Library DLL 呼び出しに関する情報は、以下のウェブサイトを
ご参照下さい。
http://www.nag.co.uk/numeric/csharpinfo.asp
NAG ライブラリを.NET から利用する方法についての情報も参考になります。
http://www.nag.co.uk/microsoft_dotnet.asp
4.1.17. Java からの利用
Java からの NAG C Library DLL 及び NAG Fortran Library DLL 呼び出しに関する情
報は、以下のウェブサイトをご参照下さい。
http://www.nag.co.uk/doc/TechRep/html/Tr2_09/Tr2_09.asp
4.1.18. Python からの利用
F2PY を使用した Python からの NAG Fortran Library DLL 呼び出しに関する情報は、
以下の PDF ファイルをご参照下さい。
http://www.nag.co.uk/doc/TechRep/pdf/TR1_08.pdf
4.1.19. R からの利用
R からの NAG Fortran Library DLL 呼び出しに関する情報は、以下のウェブサイトをご
参照下さい。
http://www.nag.co.uk/numeric/RunderWindows.asp
23
4.1.20. Simfit NAG Library Editon
Simfit NAG Library Edition は NAG Fortran Library の DLL 版をアルゴリズムソース
として採用しています。詳細は以下をご参照下さい。
http://www.nag.co.uk/educationuk/simfit.asp.
4.1.21. その他の環境からの利用
その他の環境からのご利用方法については以下の URL を参照していただくかもしくはお
問い合せ下さい。
http://www.nag.co.uk/doc/inun/fl22/dll4ml/postrelease.html
4.2. アクセスチェック
スタートメニューに、以下の診断用のプログラム NAG_Fortran_DLL_info.exe へのシ
ョートカットが在ります。
スタート|すべてのプログラム|NAG|FL22| NAG Fortran Library for Win32
Applications (FLDLL224ML)|Check Accessibility
この診断用プログラムは、FLDLL224M_nag.dll と FLDLL224M_mkl.dll へのアクセ
スが、現在の環境設定で可能であるかどうかを確認します。
各々の DLL が正常にロードできた場合には、DLL の格納位置を表示し、ポップアップウ
ィンドウに A00AAF を呼び出した際の出力内容を表示します。また、A00AAF が呼び出さ
れ、ライセンスキーが正常に動作しているかどうかを確認できます。正常に動作してい
る場合には ”Status OK” と表示され、ライセンスキーが無効な場合や見付からない場
合には、その旨を表示します。
24
4.3 インターフェースブロック
NAG Fortran Library インターフェースブロックはそれぞれのライブラリルーチンの
タイプ及び引数を定義しますが、Fortran より NAG Fortran Library を呼び出す際に
必ず必要という性質のものではありません。
(Fortran コンパイラによる NAG Fortran
Library の呼び出し方法のエラーチェックを行う際に使用されます)具体的には以下の
ようなチェックをコンパイラが行うのに使用されます。
(a) サブルーチン呼び出しの整合性
(b) 関数宣言の際の型
(c) 引数の数
(d) 引数の型
インターフェースブロックは自動生成プログラムが NAG Fortran Library のソースコ
ードを解析することにより生成されているため、信頼性があります。
インターフェースブロックファイルは章毎のモジュールとして提供されます。以下にモ
ジュール名を示します。
nag_f77_a_chapter
nag_f77_c_chapter
nag_f77_d_chapter
nag_f77_e_chapter
nag_f77_f_chapter
nag_f77_g_chapter
nag_f77_h_chapter
nag_f77_m_chapter
nag_f77_p_chapter
nag_f77_s_chapter
nag_f77_x_chapter
これらのファイル(*.mod)はプリコンパイルモジュールとして提供されます。
ショートカットを使用する、又は、envvars.bat を実行することに依り環境変数を設定
する場合は(セクション 3.1.1 を参照)、環境変数 INCLUDE が設定される為、これらのモ
ジュールにアクセスするのにセクション 3.1.1 に記載されているコマンドを利用するこ
25
とができます。
これらのモジュールを Fortran77 のコードで利用する場合は以下のような変更を加え
て下さい。

USE ステートメント追加する。(コード内で呼んでいる関数が含まれる章のモ
ジュールを指定する)

NAG Fortran ライブラリ関数の EXTERNAL ステートメントを削除する。
(モ
ジュール内で宣言されるため必要ない)

NAG Fortran ライブラリ関数の型宣言を削除する。(モジュール内で宣言され
るため必要ない)
以下に例として、
変更を加えた D01DAF ルーチン用の Example プログラムを示します。
(アスタリスクで変更点をコメントとして示しています)
*
D01DAF Example Program Text
*****************************************************
* Add USE statements for relevant chapters
*
USE NAG_F77_D_CHAPTER
*
*
*****************************************************
*
*
.. Parameters ..
INTEGER
NOUT
PARAMETER
(NOUT=6)
.. Local Scalars ..
DOUBLE PRECISION ABSACC, ANS, YA, YB
INTEGER
*
IFAIL, NPTS
.. External Functions ..
DOUBLE PRECISION FA, FB, P1, P2A, P2B
EXTERNAL
*
FA, FB, P1, P2A, P2B
.. External Subroutines ..
******************************************************
* EXTERNAL declarations need to be removed.
C
EXTERNAL
*
D01DAF
*
*
******************************************************
26
*
.. Executable Statements ..
WRITE (NOUT,*) 'D01DAF Example Program Results'
YA = 0.0D0
YB = 1.0D0
ABSACC = 1.0D-6
WRITE (NOUT,*)
WRITE (NOUT,*) 'First formulation'
IFAIL = 1
*
CALL D01DAF(YA,YB,P1,P2A,FA,ABSACC,ANS,NPTS,IFAIL)
*
WRITE (NOUT,99999) 'Integral =', ANS
WRITE (NOUT,99998) 'Number of function evaluations =', NPTS
IF (IFAIL.GT.0) WRITE (NOUT,99997) 'IFAIL = ', IFAIL
WRITE (NOUT,*)
WRITE (NOUT,*) 'Second formulation'
IFAIL = 1
*
CALL D01DAF(YA,YB,P1,P2B,FB,ABSACC,ANS,NPTS,IFAIL)
*
WRITE (NOUT,99999) 'Integral =', ANS
WRITE (NOUT,99998) 'Number of function evaluations =', NPTS
IF (IFAIL.GT.0) WRITE (NOUT,99997) 'IFAIL = ', IFAIL
STOP
*
99999 FORMAT (1X,A,F9.4)
99998 FORMAT (1X,A,I5)
99997 FORMAT (1X,A,I2)
END
*
DOUBLE PRECISION FUNCTION P1(Y)
*
.. Scalar Arguments ..
DOUBLE PRECISION
*
Y
.. Executable Statements ..
P1 = 0.0D0
RETURN
27
END
*
DOUBLE PRECISION FUNCTION P2A(Y)
*
.. Scalar Arguments ..
DOUBLE PRECISION
*
.. Intrinsic Functions ..
INTRINSIC
*
Y
SQRT
.. Executable Statements ..
P2A = SQRT(1.0D0-Y*Y)
RETURN
END
*
DOUBLE PRECISION FUNCTION FA(X,Y)
*
.. Scalar Arguments ..
DOUBLE PRECISION
*
X, Y
.. Executable Statements ..
FA = X + Y
RETURN
END
*
DOUBLE PRECISION FUNCTION P2B(Y)
*****************************************************
* Add USE statements for relevant chapters
*
USE NAG_F77_X_CHAPTER
*
*
*****************************************************
*
.. Scalar Arguments ..
DOUBLE PRECISION
*
Y
.. External Functions ..
******************************************************
* Function Type declarations need to be removed.
C
DOUBLE PRECISION
*
X01AAF
*
*
******************************************************
******************************************************
* EXTERNAL declarations need to be removed.
28
*
C
EXTERNAL
X01AAF
*
*
******************************************************
*
.. Executable Statements ..
P2B = 0.5D0*X01AAF(0.0D0)
RETURN
END
*
DOUBLE PRECISION FUNCTION FB(X,Y)
*
.. Scalar Arguments ..
DOUBLE PRECISION
*
.. Intrinsic Functions ..
INTRINSIC
*
X, Y
COS, SIN
.. Executable Statements ..
FB = Y*Y*(COS(X)+SIN(X))
RETURN
END
29
4.4. Example プログラム
Example の計算結果例はインストールノートのセクション 2.2 に記述されている環境で
出力されたものです。これらの結果は異なる環境で計算を行った場合(例えば異なるコ
ンパイラ、コンパイラライブラリ、BLAS/LAPACK 等)提供されている計算結果例と若
干異なる場合があります。本件は特に固有値ベクトルを求めた場合に顕著です。
(結果が
特定のスカラ値(多くの場合-1)倍になっている場合や残差や反復回数などの違いが挙げ
られます)
Example プログラムは本インプリメンテーションが想定する環境で、すぐに利用できる
状態で提供されます。そのため Library マニュアルに記載されている Example プログラ
ムと若干異なる場合があります。
Example プログラムは nag_example.bat もしくは nag_example_mkl.bat のいずれ
かのバッチファイルを用いて簡単に利用できます。
これらのバッチファイルは環境変数 NAG_FLDLL224ML を参照します。
セクション 4.1.1.1.で示されるように、以下のスタートメニューから環境を設定済みのコ
マンドプロンプトを開くことができます。この方法で開いたコマンドプロンプトはあら
かじめ NAG_FLDLL224ML が設定されています。
Start|All Programs|NAG|FL22|NAG Fortran Library for Win32
Applications (FLDLL224ML)|FLDLL224ML Command Prompt
スタートメニューからの利用を行わずに環境変数を設定したい場合には、環境変数の設
定を行うためのバッチファイル(envvars.bat)が以下の場所に用意されています。
c:¥Program Files¥NAG¥FL22¥fldll224ml¥batch¥envvars.bat
nag_example_mkl.bat は Example プログラム(および入力データがある場合には入
力データ)をコピーし、コンパイルし、さらに FLDLL224M_mkl.lib および MKL とリ
ンクします。そして最後にプログラムの実行を行います。Example プログラムの選択は
nag_example_mkl.bat への引数として NAG 関数名を与えて下さい。
例)
nag_example_mkl e04ucf
30
この例では Example プログラムソース(e04ucfe.f)と入力データ(e04ucfe.d)を
カレントフォルダにコピーし、コンパイル、リンク、実行を行い、その結果を e04ucfe.r
へ出力します。
FLDLL224M_nag.lib をリンクした場合には nag_example.bat を利用して下さい。
例)
nag_example e04ucf
Example プログラムは本インプリメンテーションが想定する環境で、すぐに利用できる
状態で提供されます。そのため Library マニュアルに記載されている Example プログラ
ムと若干異なる場合があります。
また、提供されている Example プログラムの出力結果 例は FLDLL224M_mkl.lib と
MKL を利用して生成されたものです。FLDLL224M_nag.dll を用いた場合出力される
結果と若干異なる場合があります。
4.5. 強調文字、斜体文字の解釈
倍精度である本インプリメンテーションでは強調斜体文字(以下の表では//..//で表されて
います)は以下のような意味を持ちます。
real
- REAL
double precision
- DOUBLE PRECISION
complex
- COMPLEX
complex*16
- COMPLEX*16
basic precision
- double precision
additional precision
- quadruple precision
reduced precision
- REAL
例えばパラメータとして double precision と示されていれば、ユーザプログラム内では
DOUBLE PRECISION と読み替えて下さい。また additional precision とあれば
quadruple precision と読み替えて下さい。
F07 章(線形代数 (LAPACK) )と F08 章(最小二乗と固有値問題 (LAPACK) の各ル
ーチンは LAPACK の名前が使用されています。
(NAG の F07/F08 名は使用されていま
せん。
)
31
4.6. NAG ルーチンからの出力
いくつかのルーチンはエラーメッセージや支援メッセージ(advisory message)を出力
しますが、その出力先は X04AAF でエラーメッセージを、X04ABF で支援メッセージを
それぞれ指定できます。
(デフォルトの出力先はセクション 4 をご参照下さい)これらの
メッセージの最大レコード長は特に指定のない限り 80 文字(含コントロールキャラクタ)
です。
5. ルーチン毎の情報
以下にチャプター毎のルーチン情報を示します。
a. D06
このチャプタのいくつかのルーチンはスタックオーバーフロー例外を避けるためにスタッ
クサイズの変更が必要な場合があります。スタックサイズを変更する例として以下のよう
に/stack オプションが利用可能です。
ifort /iface:cvf /MD driver.f FLDLL224M_mkl.lib /link /stack:128000000
b. F06, F07, F08
多くの LAPACK ルーチンは「workspace query」メカニズムを利用します。ルーチン呼び
出し側にどれだけのワークスペースが必要であるかを聞くメカニズムですが、NAG が提供
する LAPACK と MKL が提供する LAPACK ではこのワークスペースサイズが異なる場合
がありますので注意して下さい。
本インプリメンテーションではベンダー提供の BLAS/LAPACK での問題を回避するため、
FLDLL224M_mkl.lib に以下のルーチンが含まれています。
DGGGLM
DGGLSE
ZGELS
ZGGGLM
ZGGLSE
c. G02
この章で出てくる ACC の値(マシン依存の定数)は 1.0D-13 です。
32
d. P01
エラー時に、P01ABF はエラーメッセージを X04AAF で指定される装置番号へ出力し停止
します。
e. S07 – S21
NAG Fortran Library Manual に記述されている以下の定数は以下に示す値を持ちます。
S07AAF F_1
= 1.0E+13
F_2
= 1.0E-14
S10AAF E_1
= 1.8715E+1
S10ABF E_1
= 7.080E+2
S10ACF E_1
= 7.080E+2
S13AAF X_hi = 7.083E+2
S13ACF X_hi = 1.0E+16
S13ADF X_hi = 1.0E+17
S14AAF IFAIL = 1 if X > 1.70E+2
IFAIL = 2 if X < -1.70E+2
IFAIL = 3 if abs(X) < 2.23E-308
S14ABF IFAIL = 2 if X > X_big = 2.55E+305
S15ADF X_hi = 2.65E+1
S15AEF X_hi = 2.65E+1
S15AFF underflow trap was necessary
S15AGF IFAIL = 1 if X >= 2.53E+307
IFAIL = 2 if 4.74E+7 <= X < 2.53E+307
IFAIL = 3 if X < -2.66E+1
S17ACF IFAIL = 1 if X > 1.0E+16
S17ADF IFAIL = 1 if X > 1.0E+16
IFAIL = 3 if 0.0E0 < X <= 2.23E-308
S17AEF IFAIL = 1 if abs(X) > 1.0E+16
33
S17AFF IFAIL = 1 if abs(X) > 1.0E+16
S17AGF IFAIL = 1 if X > 1.038E+2
IFAIL = 2 if X < -5.7E+10
S17AHF IFAIL = 1 if X > 1.041E+2
IFAIL = 2 if X < -5.7E+10
S17AJF IFAIL = 1 if X > 1.041E+2
IFAIL = 2 if X < -1.9E+9
S17AKF IFAIL = 1 if X > 1.041E+2
IFAIL = 2 if X < -1.9E+9
S17DCF IFAIL = 2 if abs(Z) < 3.92223E-305
IFAIL = 4 if abs(Z) or FNU+N-1 > 3.27679E+4
IFAIL = 5 if abs(Z) or FNU+N-1 > 1.07374E+9
S17DEF IFAIL = 2 if imag(Z) > 7.00921E+2
IFAIL = 3 if abs(Z) or FNU+N-1 > 3.27679E+4
IFAIL = 4 if abs(Z) or FNU+N-1 > 1.07374E+9
S17DGF IFAIL = 3 if abs(Z) > 1.02399E+3
IFAIL = 4 if abs(Z) > 1.04857E+6
S17DHF IFAIL = 3 if abs(Z) > 1.02399E+3
IFAIL = 4 if abs(Z) > 1.04857E+6
S17DLF IFAIL = 2 if abs(Z) < 3.92223E-305
IFAIL = 4 if abs(Z) or FNU+N-1 > 3.27679E+4
IFAIL = 5 if abs(Z) or FNU+N-1 > 1.07374E+9
S18ADF IFAIL = 2 if 0.0E0 < X <= 2.23E-308
S18AEF IFAIL = 1 if abs(X) > 7.116E+2
S18AFF IFAIL = 1 if abs(X) > 7.116E+2
S18DCF IFAIL = 2 if abs(Z) < 3.92223E-305
IFAIL = 4 if abs(Z) or FNU+N-1 > 3.27679E+4
IFAIL = 5 if abs(Z) or FNU+N-1 > 1.07374E+9
S18DEF IFAIL = 2 if real(Z) > 7.00921E+2
IFAIL = 3 if abs(Z) or FNU+N-1 > 3.27679E+4
IFAIL = 4 if abs(Z) or FNU+N-1 > 1.07374E+9
S19AAF IFAIL = 1 if abs(X) >= 5.04818E+1
S19ABF IFAIL = 1 if abs(X) >= 5.04818E+1
S19ACF IFAIL = 1 if X > 9.9726E+2
34
S19ADF IFAIL = 1 if X > 9.9726E+2
S21BCF IFAIL = 3 if an argument < 1.583E-205
IFAIL = 4 if an argument >= 3.765E+202
S21BDF IFAIL = 3 if an argument < 2.813E-103
IFAIL = 4 if an argument >= 1.407E+102
X01
f. X01
数学的定数は以下の値を持ちます。
X01AAF (pi)
= 3.1415926535897932
X01ABF (gamma) = 0.5772156649015328
g. X02
マシン定数は以下のとおりです。
基本モデルパラメーター
X02BHF =
2
X02BJF =
53
X02BKF = -1021
X02BLF = 1024
X02DJF = .TRUE.
算出された定数
X02AJF = 1.11022302462516E-16
X02AKF = 2.22507385850721E-308
X02ALF = 1.79769313486231E+308
X02AMF = 2.22507385850721E-308
X02ANF = 2.22507385850721E-308
35
その他
X02AHF = 1.42724769270596E+45
X02BBF = 2147483647
X02BEF = 15
X02DAF = .TRUE.
h. X03
X03AAW と X03AAX は内部ルーチンですが NAG Fortran DLL から Export されていま
す。これは Excel などから本 DLL を利用する場合に、これらの内部ルーチンが有効に活
用できるからです。
X03AAW は浮動小数点管理ワードを変更し有効制度を double precision(53-bit 仮数)に設
定し、丸めモードを最近接丸めに変更します。X03AAW は引数として1つの INTEGER
があり、これは入力時に浮動小数点管理ワードを持ち、出力時に値を呼び出し側へ返し
ます。そのため、このルーチンで現在の値を取得することができます。
X03AAX は浮動小数点管理ワードを1つの INTEGER 引数として指定します。このルー
チンは通常 X03AAW で変更された浮動小数点管理ワードをもとに戻す際に使用されます
が、異なる値を設定するために利用することも可能です。
本ライブラリは double precision(53-bit 仮数)で稼働するように設計されています。チッ
プがサポートする extended precision で稼働するようには設計されていません。通常の
Intel Fortran プログラムはこのモードで稼働しますが、他の環境では浮動小数点管理ワ
ードが extended precision に変更されて稼働します。Excel は extended precision で稼
働するソフトウェアの1つです。そのため結果の整合性を求める場合には X03AAW を他
の NAG ライブラリルーチンを呼び出す前に呼び double precision で計算が行われるよう
に指定することが可能です。
i. X04
デフォルトのエラーメッセージと支援メッセージの出力先は第 6 ユニットです。
36
6. ドキュメント
ライブラリマニュアルは別インストールパッケージとして提供されます。NAG 社の Web
よりダウンロードしていただく事も、CD からインストールすることも可能です。またマ
ニュアルをオンラインで以下の URL から閲覧する事も可能です。
http://www.nag.co.uk/numeric/FL/FLdocumentation.asp
ライブラリマニュアルは以下の形式で提供されます。

XHTML+MathML
この形式では XHTML と MathML から PDF 形式のマニュアルページへのリンクが
張られています。

PDF
すべてが PDF の形式です。
(PDF の形式ブックマークもしくは HTML インデック
スからアクセス可能です)
以下のインデックス(目次)が提供されています。
nagdoc_fl22¥xhtml¥FRONTMATTER¥manconts.xml
nagdoc_fl22¥pdf¥FRONTMATTER¥manconts.pdf
nagdoc_fl22¥html¥FRONTMATTER¥manconts.html
ライブラリマニュアルをインストールした場合、スタートメニューから以下の目次ファ
イルへのアクセスが可能です。
Start|すべてのプログラム|NAG|FL22|NAG Fortran Library Manual (XHTML +
MathML)
Start|すべてのプログラム|NAG|FL22|NAG Fortran Library Manual (PDF)
Start|すべてのプログラム|NAG|FL22|NAG Fortran Library Manual (PDF +
HTML Index)
Internet Explorer を利用して XHTML/MathML 版の example ソース、データ及び結果
を閲覧する場合、それらのリンクは NAG 社の Web サイトへ誘導されます。これはブラ
ウザのセキュリティ設定でこれらのページの閲覧が行えないためです。
その他に以下が提供されます。
in.html –インストールノート(英語版)
un.html – ユーザノート(英語版)
37
ユーザノートは以下のスタートメニューからもアクセス可能です。
Start|すべてのプログラム|NAG|FL22|NAG Fortran Library for Win32
Applications (FLDLL224ML)|Users' Note
38
7. サポート
(a) ご質問等
保守サービスにご加入いただいているお客様は、電子メール、FAX、又は電話にてお問
い合わせ下さい。
その際に製品コード及び保守 ID を御明記頂きますようお願い致します。
受付は平日 9:00 ~ 12:00、13:00 ~ 17:00 となります。
Email: [email protected]
Tel:
03-5542-6311
Fax:
03-5542-6312
(b) NAG の Web サイト
NAG の Web サイトでは NAG 製品及びサービス情報など定期的に更新を行っております。
Web サイトアドレスは以下のとおりです。
http://www.nag-j.co.jp/
(日本)
http://www.nag.co.uk/
(英国本社)
http://www.nag.com/
(米国)
8. ユーザフィードバック
NAG ではユーザ様よりフィードバックをバージョンアップなどに活かして行きたいと考
えています。フィードバックに御協力頂ける場合は、以下のコンタクト先に記述されて
いる連絡先にご連絡下さい。
39
コンタクト先情報
日本ニューメリカルアルゴリズムズグループ株式会社
(略称:日本 NAG)
〒104-0032
東京都中央区八丁堀 4-9-9 八丁堀フロンティアビル 2F
Tel:
03-5542-6311
Fax:
03-5542-6312
Email: [email protected]
※ 日本ニューメリカルアルゴリズムグループ株式会社より提供されるサービス内容等は
日本国内ユーザ様向け独自のものとなっております。(お問い合わせ先等)
40