Upload
others
View
1
Download
0
Embed Size (px)
Citation preview
NAG Fortran Library for Win32 Applications, Mark 23
FLDLL234ML - License Managed
Windows XP/Vista/7 DLL, Intel Visual Fortran
ユーザ ノート
内容
1. イントロダクション ..................................................................................................... 1
2. リリース後の最新情報 .................................................................................................. 1
3. 制限事項 ........................................................................................................................ 1
4. 一般情報 ........................................................................................................................ 2
4.1. ライブラリ(DLL)のご利用方法 ........................................................................ 2
4.1.1. Intel Fortran ................................................................................................. 5
4.1.1.1. コマンドウィンドウ ................................................................................... 5
4.1.1.2. MS Visual Studio ...................................................................................... 6
4.1.2. モジュールファイル ...................................................................................... 9
4.1.3. NAG Fortran Compiler(nagfor) .............................................................. 9
4.1.4. Silverfrost(Salford)FTN95 ...................................................................... 10
4.1.5. PGI Fortran .................................................................................................. 13
4.1.6. Lahey / Fujitsu Fortran ............................................................................... 13
4.1.7. GNU gfortran ............................................................................................... 16
4.1.8. Microsoft Visual C++ / Visual Studio .......................................................... 18
4.1.9. Intel C/C++ ................................................................................................... 20
4.1.10. GNU gcc / g++ ............................................................................................... 20
4.1.11. Microsoft Visual Basic for Applications / Excel(32-bit) ......................... 22
4.1.12. Microsoft Visual Basic 6 ............................................................................... 23
4.1.13. Microsoft Visual Basic .NET ........................................................................ 25
4.1.14. C# ................................................................................................................... 28
4.1.15. Java ................................................................................................................ 28
4.1.16. Python ............................................................................................................ 28
4.1.17. R ..................................................................................................................... 28
4.1.18. Simfit - NAG Library edition ....................................................................... 29
4.1.19. その他の環境 ................................................................................................. 29
4.2. アクセスチェック .................................................................................................. 30
4.3. インターフェースブロック .................................................................................... 30
4.4. Exampleプログラム .............................................................................................. 33
4.5. Fortran型と強調斜体文字の解釈 .......................................................................... 34
4.6. NAGルーチンからの出力 ...................................................................................... 35
5. ルーチン固有の情報 ..................................................................................................... 36
6. ドキュメント ................................................................................................................ 41
7. サポート ........................................................................................................................ 43
8. ユーザフィードバック .................................................................................................. 44
追記 - コンタクト先情報 ............................................................................................... 44
1
1. イントロダクション
本ユーザノートは本 NAG Fortran Library, Mark 23:FLDLL234ML(ライブラリ)を
使用される方向けのドキュメントです.本ユーザノートには NAG Library Manual,
Mark 23(ライブラリマニュアル)に含まれない製品毎の情報が含まれます.ライブラリ
マニュアルに「ユーザノート参照」などと書かれている場合は,本ユーザノートをご参
照ください.
ライブラリルーチンのご利用にあたり,以下のドキュメントを必ずお読みください.
(a) Essential Introduction (ライブラリ一般に関する基本的なドキュメント)
(b) Chapter Introduction (チャプター毎のドキュメント)
(c) Routine Document (ルーチン毎のドキュメント)
本ライブラリはマルチスレッド環境でご利用いただけます(スレッドセーフです).
2. リリース後の最新情報
本ライブラリの動作環境や利用方法についての最新の情報は,以下のウェブページをご
確認ください.
http://www.nag.co.uk/doc/inun/fl23/dll4ml/postrelease.html
3. 制限事項
NAG Fortran Library DLLの以前のバージョンは Compaq Visual Fortran の呼び出し
規約が使われていました(ifort /iface:cvf).これは引数が参照渡しであることを
意味します.文字列は文字と文字長のペアで渡されます(/iface:mixed_str_len_arg,
これは/iface:cvfを指定すると自動的に指定されます).
本製品で提供されるプリコンパイル済みのインターフェースブロック(引用仕様宣言)
ファイル *.modは Intel Fortran Compiler 12.0で生成されたものです.他のコンパイラ
(または Intel Fortran Compilerの別バージョン)を利用する場合には再コンパイルが
必要です.
2
4. 一般情報
パフォーマンスの面から,Math Kernel Library(MKL)を利用するバージョンの NAG
ライブラリ(FLDLL234M_mkl.lib/FLDLL234M_mkl.dll)のご利用が推奨されます.も
し本製品で提供されるMKLとは異なるバージョンのMKLを用いて問題が生じる場合は,
本製品で提供される MKL を用いるか,もしくは MKL を利用しないバージョンの NAG
ライブラリ(FLDLL234M_nag.lib/FLDLL234M_nag.dll)をご利用ください.
4.1. ライブラリ(DLL)のご利用方法
本セクションでは以下のデフォルトのインストールフォルダに本ライブラリがインスト
ールされていることが前提となります.
C:¥Program Files¥NAG¥FL23¥fldll234ml
もしこのフォルダが存在しない場合は,システム管理者(本ライブラリをインストール
した方)にお尋ねください.以降の説明ではこのフォルダを install_dir として参照
します.
また,「スタート」メニューに以下のライブラリコマンドプロンプトのショートカットが
置かれていることが前提となります.
すべてのプログラム|NAG|FL23|
NAG Fortran Library for Win32 Applications (FLDLL234ML)|
FLDLL234ML Command Prompt
もしこのショートカットが存在しない場合は,システム管理者(本ライブラリをインス
トールした方)にお尋ねください.また,本ライブラリのインストール時に作成される
他のショートカットも同じ場所に置かれていることが前提となります.
実行時にNAG Fortran Library DLL(FLDLL234M_nag.dll/FLDLL234M_mkl.dll)
にアクセスできるように install_dir¥binフォルダにパスが通っていることを確認し
てください.またMKLを利用するNAG Fortran Library DLL(FLDLL234M_mkl.dll)
をご利用の場合は,install_dir¥MKL_ia32_10.3¥binフォルダにもパスが通ってい
る必要があります.このフォルダは install_dir¥binフォルダよりも後ろに設定して
ください.これは BLAS/LAPACK ルーチンのいくつかはベンダー提供のものとの問題
3
を避けるために FLDLL234M_mkl.dllに含まれるNAG提供のものを使用する必要があ
るからです(「5. ルーチン固有の情報」参照).
NAG Fortran Library DLLへのアクセスをチェックするためには,以下の「スタート」
メニューのショートカットから診断プログラム NAG_Fortran_DLL_info.exe を実行
してください.
すべてのプログラム|NAG|FL23|
NAG Fortran Library for Win32 Applications (FLDLL234ML)|
Check NAG DLL Accessibility (FLDLL234ML)
この診断プログラムの詳細はインストールノートの「4.2.3. アクセスチェック」をご参
照ください.
コマンドプロンプトからの環境変数の設定については「4.1.1.1. コマンドウィンドウ」を
ご参照ください.環境変数 PATH, LIB, INCLUDE はインストール時に設定されている
場合もあります.コントロールパネルから環境変数を設定する場合には以下の通りに行
ってください.
環境変数 PATHに以下のパスを設定してください.
c:¥Program Files¥NAG¥FL23¥fldll234ml¥batch
c:¥Program Files¥NAG¥FL23¥fldll234ml¥bin
c:¥Program Files¥NAG¥FL23¥fldll234ml¥MKL_ia32_10.3¥bin
環境変数 LIBに以下のパスを設定してください.
c:¥Program Files¥NAG¥FL23¥fldll234ml¥lib
環境変数 INCLUDEに以下のパスを設定してください.
c:¥Program Files¥NAG¥FL23¥fldll234ml¥nag_interface_blocks
注意:
上記のパス設定はデフォルトのインストール先にインストールを行った場合です.
インストール先がデフォルトでない場合は適切なフォルダで置き換えてください.
4
使用者の便宜を図るために NAG インポートライブラリ FLDLL234M_mkl.lib では
MKLのシンボルもエクスポートされています.従ってMKLインターフェースライブラ
リ(mkl_intel_s_dll.lib, mkl_intel_thread_dll.lib, mkl_core_dll.lib)
を指定する必要はありません.しかしながら,もしMKLインターフェースライブラリの
指定を行う場合は,NAG インポートライブラリ FLDLL234M_mkl.lib よりも後に指定
するようにしてください.
例)
FLDLL234M_mkl.lib
mkl_intel_s_dll.lib
mkl_intel_thread_dll.lib
mkl_core_dll.lib
これは BLAS/LAPACK ルーチンのいくつかはベンダー提供のものとの問題を避けるた
めに FLDLL234M_mkl.dllに含まれるNAG提供のものを使用する必要があるからです
(「5. ルーチン固有の情報」参照).
これから先のセクションではNAG Fortran Library DLLを様々な環境から利用する方
法を説明します.また,以下の NAGウェブサイトには NAG Fortran Library DLLおよ
び NAG C Library DLLを様々な環境から利用するための情報が公開されています.
http://www.nag.co.uk/numeric/Num_DLLhelp.asp
本ライブラリの動作環境や利用方法についての最新の情報は,以下のリリース後の最新
情報ページをご確認ください.
http://www.nag.co.uk/doc/inun/fl23/dll4ml/postrelease.html
5
4.1.1. Intel Fortran
NAG Fortran Library DLL はインストールノートに記載されたバージョンの Intel
Fortranコンパイラを用いてビルドされています.それ以外のバージョンの Intel Fortran
コンパイラでコンパイルされたプログラムからNAG Fortran Library DLLを利用する
場合は,正しい Intel Fortranコンパイラのランタイムライブラリがピックアップされる
ように,install_dir¥binフォルダに提供されている Intel Fortranコンパイラのラン
タイムライブラリ libifcoremd.dll および libmmd.dll の名前を変更する必要があ
ります.これを簡単に行うためのバッチファイル hide_ifort_rtls.batが同フォルダ
に提供されています.このバッチファイルはフォルダに在る libifcoremd.dllおよび
libmmd.dll の名前を変更します.また,変更した名前を元に戻すためのバッチファイ
ル expose_ifort_rtls.batが同フォルダに合わせて提供されています.
4.1.1.1. コマンドウィンドウ
本ライブラリをコマンドウィンドウからご利用いただく場合には環境変数の設定が必要
です.(通常,インストール時に環境変数の自動設定を選択された場合は,必要な環境変
数はシステム環境変数に設定されています.)
以下の「スタート」メニューのショートカットがご利用いただけます.
すべてのプログラム|NAG|FL23|
NAG Fortran Library for Win32 Applications (FLDLL234ML)|
FLDLL234ML Command Prompt
このショートカットは本ライブラリおよび本製品で提供される MKL に対して必要な環
境変数 INCLUDE, LIB, PATHを正しく設定した上でコマンドプロンプトを開きます.
このショートカットを利用しない場合には環境変数の設定を手動で行う必要があります.
環境変数の設定はバッチファイル envvars.bat を用いて行うことができます.このバ
ッチファイルのデフォルトの格納位置を以下に示します.
c:¥Program Files¥NAG¥FL23¥fldll234ml¥batch¥envvars.bat
6
その後,以下に示すコマンドの一つでコンパイル/リンクを行ってください.
(ここで driver.f90がユーザプログラムです.)
MKL提供の BLAS/LAPACKを利用するNAGライブラリ(FLDLL234M_mkl.lib):
ifort /iface:cvf /MD driver.f90 FLDLL234M_mkl.lib
MKL提供のBLAS/LAPACKを利用しないNAGライブラリ(FLDLL234M_nag.lib):
ifort /iface:cvf /MD driver.f90 FLDLL234M_nag.lib
これらのライブラリを利用する場合には,正しいランタイムライブラリとのリンクのた
めに /MD オプションが必要です(/MD オプションは /libs:dll /threads オプショ
ンに等しい).
マルチスレッドプログラムの場合は,以下のように/automatic オプションを付けてコ
ンパイルしてください.
ifort /iface:cvf /MD /automatic driver.f90 FLDLL234M_mkl.lib
注意:Intel Visual Fortran コンパイラの環境変数が設定されている必要があります.
詳細はコンパイラの User’s Guideをご参照ください.
4.1.1.2. MS Visual Studio
本セクションの説明は Visual Studio .NET 2003 / 2005 / 2008 および Intel Fortran
Compiler 12.0を想定しています.他のバージョンでは詳細が異なるかもしれません.
実行時にNAG DLL(FLDLL234M_nag.dll/FLDLL234M_mkl.dll)にアクセスでき
るように,NAG DLLの格納フォルダ install_dir¥binが環境変数 PATHに設定され
ている必要があります.MKL を利用する NAG DLL(FLDLL234_mkl.dll)を利用す
る場合には,実行時にMKL DLLにアクセスできるように,MKL DLLの格納フォルダ
install_dir¥MKL_ia32_10.3¥bin が環境変数 PATH に設定されている必要があり
ます(ただし install_dir¥MKL_ia32_10.3¥binは install_dir¥binよりも後に
設定されなければなりません).
7
Visual Studioを起動していただき,以下の手順に従って Intel Fortran コンパイラで利
用するディレクトリの設定を行ってください.以下の設定は Intel Fortranコンパイラを
使うプロジェクト(Intel Fortranプロジェクト)すべてに適用されます.
1. メニュー「ツール|オプション」をクリックしてください.
2. 「オプション」ウィンドウで Intel(R) Fortran(または Intel(R) Visual Fortran)を
クリックし Compilers を選択してください.(Visual Studio のバージョンによって
は Intelコンパイラのオプションを見るために Show all settings をクリックする必
要があるかもしれません.)
3. Librariesパネルの右端にある’...’ボタンをクリックしてください.
4. Set Directory Listウィンドウで NAGインポートライブラリが置かれているフォル
ダのパスを追加してください.デフォルトは以下のようになります.
c:¥Program Files¥NAG¥FL23¥fldll234ml¥lib
5. 本製品では MKL インポートライブラリが置かれているフォルダのパスを追加する
必要はありません.BLAS/LAPACK のシンボルは NAG インポートライブラリ
(FLDLL234M_nag.lib)からエクスポートされるからです.(もし Libraries パス
にMKLライブラリフォルダを追加する場合は,「4.1. ライブラリ(DLL)のご利用
方法」で説明されているように,NAGライブラリフォルダの後に追加する必要があ
ります.)
6. Set Directory Listウィンドウで OKボタンをクリックしてください.
7. Includesパネルの右端にある’...’ボタンをクリックしてください.
8. Set Directory Listウィンドウで NAGインターフェースブロックが置かれているフ
ォルダのパスを追加してください.デフォルトは以下のようになります.
c:¥Program Files¥NAG¥FL23¥fldll234ml¥nag_interface_blocks
9. Set Directory Listウィンドウで OKボタンをクリックしてください.
10. 「オプション」ウィンドウで OKボタンをクリックしてください.
8
上記の設定を行うことで Intel Fortran プロジェクトでコンパイル/リンクを行う際に,
ライブラリおよび NAG インターフェースブロックをフルパスで指定する必要が無くな
ります.
上記の設定は,全ての Intel Fortranプロジェクトに適用されます.
下記の設定は,個々の Intel Fortranプロジェクトに対して行う必要があります.
本ライブラリはフルオプティマイズされています.そのため Debugモードで Cランタイ
ムライブラリに関する警告メッセージが表示されますが,通常これは無視して構いませ
ん.Releaseモードへの設定変更はツールバーもしくはメニューの「ビルド|構成マネ
ージャ」から行うことができます.
NAGライブラリのプロジェクトへの追加は,以下の方法で行うことができます.
プロジェクトのプロパティを開いてください.(ソリューションエクスプローラでグルー
ププロジェクト(一行目)が選択されていないことを確認して,メニューから「プロジ
ェクト|*** のプロパティ」を選択するか,もしくはソリューションエクスプローラで
特定のプロジェクトを右クリックして「プロパティ」を選択します.)
プロパティの左側のパネルの「リンカ|入力」を選択してください.右側のパネルの「追
加の依存ファイル」に FDLL234M_nag.lib を追加してください.変更を有効にするた
めに OKまたは「適用」ボタンをクリックしてください.
呼び出し規約をCVFに設定する必要があります.プロパティの左側のパネルの Fortran
|External Proceduresを選択してください.右側のパネルの Calling Convention
をクリックし,ドロップダウンリストから CVF を選択してください.変更を有効にする
ために OK または「適用」ボタンをクリックしてください(この時 CVFが選択されてい
ることで,String Length Argument Passingの設定が自動的に After Individual
String Argumentに変更されます).
コンパイラのランタイムライブラリに関してはマルチスレッドDLL版のご利用を推奨し
ます.プロパティの左側のパネルの Fortran|Librariesを選択してください.
右側のパネルの Runtime Library をクリックし,ドロップダウンリストから
Multithread DLL を選択してください.変更を有効にするために OK または「適用」
ボタンをクリックしてください.
9
マルチスレッドアプリケーションでご利用の場合は,マルチスレッドランタイムライブ
ラリを選択すると共に,スタック領域で全てのローカル変数にメモリが割り当てられる
ようにコンパイラオプション/automatic(または /Qauto)を設定してください.こ
のオプションを設定するには,プロパティの左側のパネルの Fortran|Data を選択し
てください.右側のパネルの Local Variable Storageをクリックし,ドロップダウ
ンリストから Loacal Variables AUTOMATIC を選択してください.変更を有効にす
るために OKまたは「適用」ボタンをクリックしてください.
以上で,プロジェクトのビルド(コンパイル/リンク)を行うことができます.
プログラムの実行が標準入出力からの入出力リダイレクションを伴わない場合には
Microsoft Development Environment(例えば,メニュー「デバッグ|デバックなしで
開始」など)実行することができますが,標準入出力からの入出力リダイレクションを
伴う場合にはコマンドプロンプトウィンドウからの実行が推奨されます.
4.1.2. モジュールファイル
Install_dir¥nag_interface_blocks フォルダに提供されているインターフェース
ブロック(引用仕様宣言)モジュールファイル *.mod は Intel Fortran コンパイラで生
成されています.モジュールファイルはコンパイラ依存であるため,これらのファイル
は他のコンパイラでは利用できません.他のコンパイラでモジュールファイルを利用す
る場合は(NAG ライブラリの Example プログラムを利用する場合やユーザープログラ
ムでインターフェースブロックを利用する場合は),先ずはそのコンパイラでモジュール
ファイルを生成する必要があります(詳細は「4.3. インターフェースブロック」をご参
照ください).
4.1.3. NAG Fortran Compiler(nagfor)
NAG Fortran Libraryインターフェースブロック(引用仕様宣言)を利用する場合には
(例えば,NAGライブラリの Exampleプログラムをコンパイルする場合など),先ずは
モジュールファイルを生成する必要があります.詳細は「4.3. インターフェースブロッ
ク」をご参照ください.
NAG Fortran Compiler(nagfor)からNAG Fortran Library DLLを利用する場合は,
以下のようにコンパイル/リンクを行ってください.
10
nagfor –f77 -w=obs –I nag_interface_blocks_nagfor
-o driver.exe driver.f90 "install_dir¥lib¥FLDLL234M_mkl.lib"
または,
nagfor –f77 -w=obs –I nag_interface_blocks_nagfor
-o driver.exe driver.f90 "install_dir¥lib¥FLDLL234M_nag.lib"
ここで driver.f90 はユーザープログラム,driver.exe は生成される実行形式,
nag_interface_blocks_nagforはモジュールファイルの格納フォルダです.
FLDLL234M_mkl.lib または FLDLL234M_nag.lib はフルパスで指定する必要があり
ます.パスにスペースが含まれる場合は,パスをクォーテーションで括ってください.
注意:NAG Fortran Compiler, Release 5.3以降のバージョンをご利用の場合は,コンパ
イラオプションは -f77の代わりに –compatibleをご利用ください.
4.1.4. Silverfrost(Salford)FTN95
NAG Fortran Libraryインターフェースブロック(引用仕様宣言)を利用する場合には
(例えば,NAGライブラリの Exampleプログラムをコンパイルする場合など),先ずは
モジュールファイルを生成する必要があります.詳細は「4.3. インターフェースブロッ
ク」をご参照ください.なお,FTN95でインターフェースブロックをコンパイルする際
には,/f_stdcallオプションを付けて STDCALL 呼び出し規約が使われるようにして
ください.
FTN95からNAG Fortran Library DLL を利用する場合は,ソースファイルの変更は必
要ありませんが,FTN95 が cdecl 呼び出し規約の一種をデフォルトで使っているため
CVF 呼び出し規約を使用する旨を明示的に指定する必要があります(/import_lib オ
プション).以下のようにコンパイル/リンクを行ってください.
ftn95 /f_stdcall /mod_path nag_interface_blocks_ftn95 driver.f90
/import_lib "install_dir¥bin¥FLDLL234M_mkl.dll" /link
または,
11
ftn95 /f_stdcall /mod_path nag_interface_blocks_ftn95 driver.f90
/import_lib "install_dir¥bin¥FLDLL234M_nag.dll" /link
ここで driver.f90 はユーザープログラム,driver.exe は生成される実行形式,
nag_interface_blocks_ftn95はモジュールファイルの格納フォルダです.
FLDLL234M_mkl.dll または FLDLL234M_nag.dll はフルパスで指定する必要があり
ます.パスにスペースが含まれる場合は,パスをクォーテーションで括ってください.
これらのオプションにより,DLL の全てのエクスポートされた名前は CVF STDCALL
であり,それらを利用する場合には CVF STDCALL呼び出し規約を用いなくてはならな
いことが明示されます.引数リストを通してNAG Fortran Library DLL内のルーチンに
渡される外部名は,同じソースファイル内であるかどうかが自動的に判別されます.
以下のようにコンパイル/リンクすることもできます.
ftn95 /f_stdcall /mod_path nag_interface_blocks_ftn95 driver.f90
slink driver.obj "install_dir¥bin¥FLDLL234M_mkl.dll"
パスにスペースが含まれる場合は,パスをクォーテーションで括ってください.
リンカはDLLと直接リンクし,*.libファイルとはリンクしないことに注意してください.
FTN95コンパイラの制限として,
NAG ルーチンの引数として渡すルーチンが driver.f90 の内部でモジュールとして定
義されている場合に STDCALL属性が与えられない事例があります.この制限は FTN95
の version 6.00.0で存在するようですが,この場合 NAGルーチンの引数として渡すルー
チンについては内部モジュールの代わりに外部ルーチンとして宣言してください.なお,
NAG ライブラリの Example プログラムの多くは,このような内部モジュールを持って
いることに注意してください.
また別の些細な制限として,FTN95は FLUSH文(Fortran 2003固有の機能)をサポー
トしていません.NAGライブラリの Exampleプログラムのいくつかは FLUSH文を利用
しています.これらの Exampleプログラムをコンパイルに通すためには,FLUSH文をコ
メントアウトする必要があります.
12
Plato3は FTN95と共に提供される IDE(統合開発環境)です.Plato3からNAG Fortran
Library DLLを利用する場合は,以下のように行ってください.
1. FileメニューからNew Projectを選択してください.
2. Fortran Application を選択して,プロジェクト名と格納場所を設定してください.
3. Project Explorerウィンドウでソースファイルを右クリックして,プロジェクトを構
成するファイルを入力してください(例えば,NAGライブラリの Exampleプログラ
ム C05NBFE.F).
4. Project Explorerウィンドウの Referencesを右クリックして,NAG Fortran Library
DLLの名前を入力してください(例えば,FLDLL234M_nag.dll).
5. version 5.2 以前の FTN95 をご利用の場合には,Checkmate オプションの指定は行
わないようにしてください.version 5.2以前の FTN95と NAG STDCALL DLLは
Checkmate オプションでは正常に動作しません.ツールバーのドロップダウンメニ
ューから,例えば Release Win32を選択してください.
6. Project|Properties|Compiler Options|Miscellaneous|Extra compiler options
プロパティで /F_STDCALLを指定してください.または,Project Explorerウィン
ドウの ReferencesのNAG Fortran Library DLLを右クリックして,Propertiesの
STDCALLチェックボックスにチェックを入れてください.
7. Plato3は標準入出力のリダイレクションをサポートしていません.従って,入出力の
際にはメインプログラムの中で明示的にファイルをオープンする必要があります.
一例として,計算結果を c:¥test.res ファイルに書き出す場合,(装置番号 6 で
write文を使用する前に)以下のようにopen文でファイルをオープンしてください.
open(6,file='c:¥test.res')
13
4.1.5. PGI Fortran
NAG Fortran Libraryインターフェースブロック(引用仕様宣言)を利用する場合には
(例えば,NAGライブラリの Exampleプログラムをコンパイルする場合など),先ずは
モジュールファイルを生成する必要があります.詳細は「4.3. インターフェースブロッ
ク」をご参照ください.
pgf90から NAG Fortran Library DLLを利用する場合は,以下のようにコンパイル/リ
ンクを行ってください(本ライブラリのインストール先を考慮して環境変数LIBとPATH
が正しく設定されていることが前提となります).
pgf90 driver.f90 -module nag_interface_blocks_pgi FLDLL234M_mkl.lib
-o driver.exe
または,
pgf90 driver.f90 -module nag_interface_blocks_pgi FLDLL234M_nag.lib
-o driver.exe
ここで driver.f90 はユーザープログラム,driver.exe は生成される実行形式,
nag_interface_blocks_pgiはモジュールファイルの格納フォルダです.
上記のコマンドは pgf90の version 11.2-0で検証されています.
4.1.6. Lahey / Fujitsu Fortran
Lahey / Fujitsu FortranからのNAG Fortran Library DLLのご利用方法を示すために,
D02CJFルーチンの Exampleプログラムを修正したファイル(lahey.f)が以下のフォ
ルダに提供されます.
install dir¥samples¥lahey_fortran_example
以下に示すご利用方法は Lahey Fortran version 7.2で検証されています.
14
1. コードの変更
Lahey FortranからNAG Fortran Library DLLをご利用になる場合には,標準の
Fortranプログラムにいくつかの簡単な変更を加える必要があります.
a. NAGルーチンに対して,
呼び出し側のプログラムに DLL_IMPORT文を挿入してください.
例)
DLL_IMPORT D02CJF
b. NAGルーチンの引数となる NAGルーチンに対して,
呼び出し側のプログラムに DLL_IMPORT文を挿入してください.
例)
DLL_IMPORT D02CJW
c. NAGルーチンの引数となるユーザー提供のサブルーチン/関数に対して,
呼び出し側のプログラムに DLL_IMPORT文を挿入してください.
例)
DLL_IMPORT OUT
そして,そのユーザー提供のサブルーチン/関数に DLL_EXPORT 文を挿入
してください.
例)
DLL_EXPORT OUT
これらのサブルーチンと関数はすべて EXTERNAL宣言と(関数に対しては)
型の宣言が必要です.インポートされる関数は大文字/小文字の区別がありま
す.NAG名はすべて大文字でなければなりません.
文字引数についてはNAG Fortran Library DLLの規約に合わせる必要があり
ます.Laheyが全ての引数の最後に置く隠れた文字長を文字引数から取り除く
ために,引数のアドレスの値 VAL(POINTER(char_arg)) を渡してください.
そして,その後に文字長を加えてください.両方とも値渡しとなります.
例)
CALL D02CJF (X, XEND2, N, Y, FCN, TOL, VAL(POINTER('Default')),
VAL(LEN('Default')), OUT, G, W, IFAIL)
15
2. コンパイルとリンク
コンパイラオプション -ml bc を付けてコンパイルを行ってください.これにより
stdcall呼び出し規約が使われるようになります.NAG Fortran Library DLLのイン
ポートライブラリ(FLDLL234M_nag.lib/FLDLL234M_mkl.lib)の格納フォル
ダのパスが環境変数 LIB に設定されているようにしてください.または,リンカー
オプション –LIBPATH を用いて指定することもできます.または,フルパスでの指
定も可能です.
例)
lf95 d02cjfe.f "install_dir¥lib¥FLDLL234M_mkl.lib" -ml bc
または,
lf95 d02cjfe.f "install_dir¥lib¥FLDLL234M_nag.lib" -ml bc
3. 実行
実行時にはDLLの格納フォルダのパスが環境変数 PATHに設定されている必要があ
ることに注意してください.
16
4.1.7. GNU gfortran
警告:gfortran から NAG ライブラリを利用する際には,以降で説明される文字引数
(character型の引数)の取り扱いについて注意してください.
NAG Fortran Libraryインターフェースブロック(引用仕様宣言)を利用する場合には
(例えば,NAGライブラリの Exampleプログラムをコンパイルする場合など),先ずは
モジュールファイルを生成する必要があります.詳細は「4.3. インターフェースブロッ
ク」をご参照ください.
gfortranからNAG Fortran Library DLL を利用する場合は,以下のようにコンパイル/
リンクを行ってください.
Windowsコマンドプロンプトから gfortranを使う場合:
gfortran -mrtd -Inag_interface_blocks_gfortran driver.f90
"install_dir¥lib¥FLDLL234M_mkl.lib" -o driver.exe
または,
gfortran -mrtd -Inag_interface_blocks_gfortran driver.f90
"install_dir¥lib¥FLDLL234M_nag.lib" -o driver.exe
Cygwinターミナル(xterm)から gfortranを使う場合:
gfortran -mrtd -Inag_interface_blocks_gfortran driver.f90
"install_dir/lib/FLDLL234M_mkl.lib" -o driver.exe
または,
gfortran -mrtd -Inag_interface_blocks_gfortran driver.f90
"install_dir/lib/FLDLL234M_nag.lib" -o driver.exe
ここで driver.f90 はユーザープログラム,driver.exe は生成される実行形式,
nag_interface_blocks_gfortranはモジュールファイルの格納フォルダです.
17
文字引数は特別な注意を要します.NAGライブラリは Intel ifortの/iface:cvf呼び出
し規約を使用します.これはコンパイラが Fortranの文字型(character型)引数の直
後に文字長を示す見えない引数を挿入することを意味します.しかしながら gfortranコ
ンパイラはこの文字長を示す見えない引数を引数列の一番最後に挿入するので,NAGラ
イブラリの呼び出し規約と整合性が取れません.現状の解決策としては,各文字引数の
直後に文字長を明示的に挿入することです.例えば,NAG関数 g01fafの第一引数 tail
は文字型で,呼び出しは以下のように行います.
例)
DEV = G01FAF(TAIL,%VAL(1),P,IFAIL)
ここで %VAL(1) は文字長 1を値渡しすることをコンパイラに指示しています.
この方法で呼び出しは可能となりますが,残念ながら NAG インターフェースブロック
(引用仕様宣言)との整合性は取れなくなります.USE 文でインターフェースブロック
を使う代わりに external宣言を使用してください.
もう一つの例として,Exampleプログラム d02cjfe.f90ではルーチン d02cjfが呼び
出されている全ての箇所で仮引数 relabs(実引数‘Default’)を以下に置き換える必
要があります.
‘Default’,%VAL(7)
そして USE文を使う代わりに d02cjfを external宣言する必要があります.
引数が文字配列の場合は,各々の配列要素の長さを渡す必要があります.
以上の情報は Cygwinのディストリビューションに含まれる GNU Fortran 4.3.4で検証
されています.
gfortranからのNAG Fortran Library DLLの利用方法を示すために,Exampleプログ
ラム d02cjfe.f90および g01fafe.fの修正版が以下のフォルダに提供されます.
install_dir¥samples¥gfortran_examples
18
4.1.8. Microsoft Visual C++ / Visual Studio
NAG Fortran Library DLLはMicrosoft Visual Studio .NET 2003以降の CまたはC++
環境からも(いくつかの注意と共に)利用することができます.ご利用の支援として
Fortran と C の型のマッピング情報を持った C/C++ヘッダファイルが提供されます.必
要に応じてヘッダファイルの中から必要な部分をコピーするか,もしくは単純にヘッダ
ファイルをインクルードしてご利用ください.
CまたはC++からNAG Fortran Library DLLを利用するExampleが以下のフォルダに
提供されます.
install_dir¥samples¥c_examples
および,
install_dir¥samples¥cpp_examples
詳細についてはinstall_dir¥c_headersフォルダに提供されるtechdoc.htmlをご
参照ください.このドキュメントのショートカットがスタートメニューに提供されます.
すべてのプログラム|NAG|FL23|
NAG Fortran Library for Win32 Applications (FLDLL234ML)|
C & C++ Header File Information
キーとなる情報:
STDCALL呼び出し規約を指定する.
配列のアクセス順序が異なる.
(Cは行優先(Row Major),Fortranは列優先(Column Major))
提供されるヘッダファイルを利用する.
Fortranの文字列は二つのパラメータとして扱われる(文字列と文字列長).
CからNAG Fortran Library DLLを利用する Exampleが提供される.
(install_dir¥samples¥c_examples)
C++からNAG Fortran Library DLLを利用する Exampleが提供される.
(install_dir¥samples¥cpp_examples)
Cプログラムは.c拡張子,C++プログラムは.cpp拡張子を用いる.
19
Cプログラムから NAG Fortran Library DLLを利用する場合は,以下のようにコンパイ
ル/リンクを行ってください(ここでは NAGインポートライブラリの格納フォルダが環
境変数 LIBに設定されていることを前提としています).
cl driver.c FLDLL234M_mkl.lib
または,
cl driver.c FLDLL234M_nag.lib
ここで driver.cはユーザープログラムです.
上記はヘッダファイルへのパスが環境変数 INCLUDE に含まれていることを前提として
います.含まれていない場合は,以下のようにコンパイル/リンクを行ってください.
cl /I"install_dir¥c_headers" driver.c FLDLL234M_mkl.lib
または,
cl /I"install_dir¥c_headers" driver.c FLDLL234M_nag.lib
以下の説明は Visual Studio .NET 2003,Visual Studio 2005,Visual Studio 2008を想
定しています.他のバージョンでは詳細が異なるかもしれません.
Visual Studio IDE(統合開発環境)を利用する場合,リンクが行えるようにするために
以下の設定を行ってください.プロジェクトのプロパティから「構成プロパティ|リン
カ|入力|追加の依存ファイル」に FLDLL234M_mkl.libまたは FLDLL234M_nag.lib
を追加してください.もし環境変数 LIB が他で設定されていなければ,プロジェクトの
プロパティから「構成プロパティ|リンカ|全般|追加のライブラリディレクトリ」に
install_dir¥libを追加してください.
注意:C++のコマンドライン Example
(install_dir¥samples¥cpp_examples¥commandline)を利用する場合は,
Microsoft C++では /EHscオプションの指定が必要です.
20
4.1.9. Intel C/C++
セクション 4.1.8 で説明されているヘッダファイルについての情報は Intel Cについても
当てはまります.
Cプログラムから NAG Fortran Library DLLを利用する場合は,以下のようにコンパイ
ル/リンクを行ってください(ここでは NAGインポートライブラリの格納フォルダが環
境変数 LIBに設定されていることを前提としています).
icl /I"install_dir¥c_headers" driver.c FLDLL234M_mkl.lib
または,
icl /I"install_dir¥c_headers" driver.c FLDLL234M_nag.lib
ここで driver.cはユーザープログラムです.
4.1.10. GNU gcc / g++
セクション 4.1.8 で説明されているヘッダファイルについての情報は gcc / g++について
も当てはまります.
gccまたは g++からNAG Fortran Library DLL を利用する場合は,以下のようにコンパ
イル/リンクを行ってください.(ここで driver.c または driver.cppはユーザープ
ログラム,driver.exeは生成される実行形式です.)
Windowsコマンドプロンプトで Cプログラムのコンパイルに gccを使う場合:
gcc -D _WIN32 -I "install_dir¥c_headers" driver.c
"install_dir¥lib¥FLDLL234M_mkl.lib" -o driver.exe
または,
gcc -D _WIN32 -I "install_dir¥c_headers" driver.c
"install_dir¥lib¥FLDLL234M_nag.lib" -o driver.exe
21
Cygwinターミナル(xterm)で Cプログラムのコンパイルに gccを使う場合:
gcc -D _WIN32 -I "install_dir/c_headers" driver.c
"install_dir/lib/FLDLL234M_mkl.lib" -o driver.exe
または,
gcc -D _WIN32 -I "install_dir/c_headers" driver.c
"install_dir/lib/FLDLL234M_nag.lib" -o driver.exe
Windowsコマンドプロンプトで C++プログラムのコンパイルに g++を使う場合:
g++ -D _WIN32 -I "install_dir¥c_headers" driver.cpp
"install_dir¥lib¥FLDLL234M_mkl.lib" -o driver.exe
または,
g++ -D _WIN32 -I "install_dir¥c_headers" driver.cpp
"install_dir¥lib¥FLDLL234M_nag.lib" -o driver.exe
Cygwinターミナル(xterm)で C++プログラムのコンパイルに g++を使う場合:
g++ -D _WIN32 -I "install_dir/c_headers" driver.cpp
"install_dir/lib/FLDLL234M_mkl.lib" -o driver.exe
または,
g++ -D _WIN32 -I "install_dir/c_headers" driver.cpp
"install_dir/lib/FLDLL234M_nag.lib" -o driver.exe
以上の情報は Cygwinのディストリビューションに含まれる gcc version 4.3.4で検証さ
れています.
22
4.1.11. Microsoft Visual Basic for Applications / Excel(32-bit)
本製品で提供されるNAG Fortran Library DLLはExcelスプレッドシートからの利用に
適しています.NAGルーチンは Visual Basic for Applications(VBA)コードから呼び
出されます.(VBA と Visual Basic 6(VB 6)は類似しており,その両方で同じNAG宣
言文が使われます.)
本セクションの情報は 32-bit版の Excelに関するものです.
ExcelからNAG Fortran Library DLL を利用する Exampleが以下のフォルダに提供さ
れます.
install_dir¥samples¥excel_examples
install_dir¥samples¥excel_examples¥linear_algebra フォルダに提供され
る xls_demo.htmlには ExcelスプレッドシートからNAG Fortran Library DLLを利
用する際のヒントが記載されています.またVB6 / VBAからNAG Fortran Library DLL
を呼び出す際の例証として VB 6 の Exampleもご参照ください.
キーとなる情報:
Install_dir¥vb6_headers フォルダの flvb6-<チャプター名>.bas(例えば
flvb6-a.bas)ファイルには VB 6 / VBAで利用できる Declare文がチャプター毎
に定義されています.また flvb6-types.basファイルにはこれらのファイルで利
用 さ れ る 定 数 や ユ ー ザ ー 定 義 型 が 定 義 さ れ て い ま す . ま た
flvb6-f-blaslapack.basファイルにはチャプターFのルーチンが(NAG名では
なく)BLAS/LAPACK名で定義されています.
MKL提供のBLAS/LAPACKを利用するNAG Fortran Library DLLをご利用にな
る場合は,FLDLL234M_nag.dll と宣言されている部分を FLDLL234M_mkl.dll
に置き換えてください.
Declare文のご利用は,ファイルから必要な部分だけをコピーしてご自身のモジュー
ルにペーストするか,もしくはファイルをモジュールとして VBAプロジェクトにイ
ンポートしてください(場合によっては上述の flvb6-types.basも合わせてイン
ポートする必要があります).
23
Fortranの配列は 1から始まるので,Option Base 1の設定を推奨します.
Variant 型は実際の引数として使用できません.Long,Double,String(および,
ごく稀な場合に Single)が必要です.Option Explicitを使用してください.
LongはFortranの INTEGERに,DoubleはFortranのDOUBLE PRECISIONに,
Singleは Fortranの REALにそれぞれ対応します.
Longは Fortranの LOGICALに対応します(NAGTRUEと NAGFALSE がそれぞ
れ -1と 0に対応します).
構造体 Complexと ComplexSimpleは Fortranの COMPLEX*16と COMPLEXに
それぞれ対応します.
Fortranの配列引数に対しては,VBA配列の最初の要素を指定します.
例えば A(1,1) .
数式は ByVal引数に渡されます.その他の引数はデフォルトでは ByRefです.この
点が明確になるように,ByRef と ByVal は Declare 文の全体を通して明示的に指定
されています.
Fortranの文字引数に対しては,2つの VBA引数が必要となります(ByVal文字引
数と ByVal length-of-string 引数(両方とも Long 型)).length-of-string 引数は文
字引数の直後に置く必要があります.
以上の情報はMicrosoft Office Excel 2003, 2007, 2010で検証されています.
4.1.12. Microsoft Visual Basic 6
Visual Basic 6(VB 6)と Visual Basic for Applications(VBA)は類似しているため,
上記の VBAについての情報は VB 6にも適用されます.特に,配列と文字列の扱いにご
注意ください.
Visual Basic 6から NAG Fortran Library DLLを利用する Exampleが以下のフォルダ
に提供されます.
24
install_dir¥samples¥vb6_examples
また VB6 / VBA からNAG Fortran Library DLLを呼び出す際の例証として,Excelの
Exampleの内の VBAコードもご参照ください.
キーとなる情報:
Install_dir¥vb6_headers フォルダの flvb6-<チャプター名>.bas(例えば
flvb6-a.bas)ファイルには VB 6 / VBAで利用できる Declare文がチャプター毎
に定義されています.また flvb6-types.basファイルにはこれらのファイルで利
用 さ れ る 定 数 や ユ ー ザ ー 定 義 型 が 定 義 さ れ て い ま す . ま た
flvb6-f-blaslapack.basファイルにはチャプターFのルーチンが(NAG名では
なく)BLAS/LAPACK名で定義されています.
MKL提供のBLAS/LAPACKを利用するNAG Fortran Library DLLをご利用にな
る場合は,FLDLL234M_nag.dll と宣言されている部分を FLDLL234M_mkl.dll
に置き換えてください.
Declare文のご利用は,ファイルから必要な部分だけをコピーしてご自身のモジュー
ルにペーストするか,もしくはファイルをモジュールとして VB 6プロジェクトにイ
ンポートしてください(場合によっては上述の flvb6-types.basも合わせてイン
ポートする必要があります).
Fortranの配列は 1から始まるので,Option Base 1の設定を推奨します.
Variant 型は実際の引数として使用できません.Long,Double,String(および,
ごく稀な場合に Single)が必要です.Option Explicitを使用してください.
LongはFortranの INTEGERに,DoubleはFortranのDOUBLE PRECISIONに,
Singleは Fortranの REALにそれぞれ対応します.
Longは Fortranの LOGICALに対応します(NAGTRUEと NAGFALSE がそれぞ
れ -1と 0に対応します).
構造体 Complexと ComplexSimpleは Fortranの COMPLEX*16 と COMPLEXに
それぞれ対応します.
25
Fortranの配列引数に対しては,VB 6配列の最初の要素を指定します.
例えば A(1,1) .
数式は ByVal引数に渡されます.その他の引数はデフォルトでは ByRefです.この
点が明確になるように,ByRef と ByVal は Declare 文の全体を通して明示的に指定
されています.
Fortranの文字引数に対しては,2つの VB 6引数が必要となります(ByVal文字引
数と ByVal length-of-string 引数(両方とも Long 型)).length-of-string 引数は文
字引数の直後に置く必要があります.
以上の情報はMicrosoft Visual Basic 6.0で検証されています.
4.1.13. Microsoft Visual Basic .NET
NAGライブラリルーチンの多くは Visual Basic .NET(VB.NET)から呼び出すことが
できます.VB.NETからNAG Fortran Library DLLを利用する Exampleが以下のフォ
ルダに提供されます.
install_dir¥samples¥vb.net_examples
(これらの Exampleは Visual Studio .NET 2003で生成されています.Visual Studio
2005以降でロードした場合は,ソリューションとプロジェクトファイルは Visual Studio
変換ウィザードでコンバートされます.)
キーとなる情報:
Install_dir¥vb.net_headers¥flvbdnet.vbファイルに VB.NETで利用でき
る
Declare文が定義されています.
MKL提供のBLAS/LAPACKを利用するNAG Fortran Library DLLをご利用にな
る場合は,FLDLL234M_nag.dll と宣言されている部分を FLDLL234M_mkl.dll
に置き換えてください.
26
Declare文のご利用は,ファイルから必要な部分だけをコピーしてご自身のモジュー
ルにペーストするか,もしくはファイルをモジュールとして VB.NET プロジェクト
にインポートしてください.
提供される VB.NETヘッダファイルは以前のバージョン(Mark 22)とは異なりま
すので注意してください(特に,配列の渡し方).
Fortran配列は 1から始まりますが,VB.NET配列は 0から始まります.
型のマッピングは VB 6 の場合とは異なります.Integer は Fortran の INTEGER
に,Double は Fortran の DOUBLE PRECISION に,Single は Fortran の REAL
にそれぞれ対応します.
Integerは Fortranの LOGICALに対応します(NAGTRUEとNAGFALSE がそれ
ぞれ -1と 0に対応します).
構造体 Complexと ComplexSimpleは Fortranの COMPLEX*16 と COMPLEXに
それぞれ対応します.
全てのスカラー値は参照渡し(ByRef)です.VB.NET はデフォルトでは値渡し
(ByVal)なので,参照渡し(ByRef)を明示的に指定する必要があります.この点
が明確になるように,ByRef と ByVal は Declare 文の全体を通して明示的に指定さ
れています.
配列引数には配列名を渡してください.(以前のバージョン(Mark 22)や VB 6の
ように配列の最初の要素ではありません).全ての配列は値渡し(ByVal)です.ま
た宣言には Fortran 側の用途(入力,出力,入出力)によって<[In]()>,<Out()>,
<[In](),Out()> のいずれかの decorationが付加されています.具体例として,
various_routines ExampleのG02EEFE() Subプロシージャをご参照ください.
VB.NETではコールバック関数における配列は値渡しされた IntPtrによって表現さ
れます.具体例として,d02ejf_exampleのコードをご参照ください.
VB.NET配列は行優先です.VB 6や Fortranのように列優先ではありません.この
ため Fortranルーチンが正しく配列を解釈するためには配列の転置が必要です.
27
配列の格納形式が異なるため,Fortranルーチンの Leading Dimensionは VB.NET
配列の第二次元に対応します.例えば,VB.NETの A(2,3) では Leading Dimension
として 4(配列は 0から始まるため)を渡します.
Fortran側で CHARACTER*型(例えば CHARACTER*(*)または CHARACTER*1)
のスカラー引数が求められる場合は,文字列をVB.NETのStringで渡してください.
そして,その String引数の直後に文字列の長さを Integerで渡してください.
Fortran 側で CHARACTER*型の配列引数が求められる場合は,VB.NET の一つの
Stringに全ての配列要素を結合したものを渡してください.そして,その String引
数の直後に配列の一つの要素の長さを Integerで渡してください.具体例として,
various_routine ExampleのM01CCFE() Subプロシージャをご参照ください.
Fortran側でコールバック関数が求められる場合は,VB.NETで interfaceの宣言と
して Delegate functionを定義する必要があります.引数はその Delegate function
型で値として渡してください.Delegate functionの実装を引数として渡す際には,
キーワード AddressOf を利用してください.具体例として,d01bdf_example の
コードまたは various_routines Exampleの D01BDFE() Subプロシージャをご
参照ください.
これらの宣言を VB.NETに認識させるために,VB.NETソースコードの一番上には
以下の行が必要です.
Imports System.Runtime.InteropServices
以上の情報は Visual Studio .NET 2003, 2005, 2008, 2010 で検証されています.
もし 64-bit システムで実行する場合は,BadImageFormatException を避けるために,
ターゲット CPUを x86に設定する必要があります.
28
4.1.14. C#
C#からの NAG Fortran Library DLL のご利用方法については,以下のウェブサイトを
ご参照ください.
http://www.nag.co.uk/numeric/csharpinfo.asp
また .NET用のNAGライブラリ(NAG Library for .NET)も製品提供しております.
詳細は以下のウェブサイトをご参照ください.
http://www.nag.co.uk/microsoft_dotnet.asp
4.1.15. 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.16. Python
F2PYを使用した Pythonからの NAG Fortran Library DLLのご利用方法については,
以下の PDFファイルをご参照ください.
http://www.nag.co.uk/doc/TechRep/pdf/TR1_08.pdf
4.1.17. R
Rからの NAG Fortran Library DLLのご利用方法については,以下のウェブサイトをご
参照ください.
http://www.nag.co.uk/numeric/RunderWindows.asp
29
4.1.18. Simfit - NAG Library editon
Simfit - NAG Library editionはNAG Fortran Library DLLをアルゴリズムソースとし
て採用しています.詳細は以下のウェブサイトをご参照ください.
http://www.nag.co.uk/educationuk/simfit.asp
4.1.19. その他の環境
その他の環境からの NAG Fortran Library DLLのご利用方法については,以下のリリー
ス後の最新情報ページをご参照いただくか,もしくは日本 NAGまでお問い合せください.
http://www.nag.co.uk/doc/inun/fl23/dll4ml/postrelease.html
30
4.2. アクセスチェック
診断プログラム NAG_Fortran_DLL_info.exe を用いて,ご利用のマシン環境から
NAG Fortran Library DLL(FLDLL234M_nag.dllおよび FLDLL234M_mkl.dll)に
アクセスができるかどうかを確認することができます.診断プログラムは以下の「スタ
ート」メニューのショートカットから実行することができます.
すべてのプログラム|NAG|FL23|
NAG Fortran Library for Win32 Applications (FLDLL234ML)|
Check NAG DLL Accessibility (FLDLL234ML)
診断プログラムの詳細はインストールノートの「4.2.3. アクセスチェック」をご参照く
ださい.
4.3. インターフェースブロック
NAG Fortran Libraryインターフェースブロック(引用仕様宣言)はライブラリルーチ
ンの型と引数を定義します.FortranプログラムからNAG Fortran Libraryを呼び出す
際に必ず必要という性質のものではありませんが,これを用いることで NAG Fortran
Library が正しく呼び出されているかどうかのチェックを Fortran コンパイラに任せる
事ができます.具体的にはコンパイラが以下のチェックを行うことを可能とします.
(a) サブルーチン呼び出しの整合性
(b) 関数宣言の型
(c) 引数の数
(d) 引数の型
これらのインターフェースブロックはNAG Fortran Libraryのソースコードから自動的
に生成されているため信頼性があります.
NAG Fortran Libraryインターフェースブロックファイルは,チャプター毎のモジュー
ルとして提供されます.以下にモジュール名を示します.
nag_precisions
nag_blas_consts
nag_a_ib
31
nag_c_ib
nag_d_ib
nag_e_ib
nag_f_ib
nag_g_ib
nag_h_ib
nag_m_ib
nag_p_ib
nag_s_ib
nag_x_ib
nag_long_names
これらをまとめて一つにしたモジュールも提供されます.
nag_library
NAG ライブラリルーチンを使用するプログラムは,(そのルーチンが含まれる)特定の
チャプターのモジュール(例えば nag_s_lib)もしくは全てのチャプターを含むモジュ
ール(nag_library)を利用することができます.
これらのモジュールは Intel Fortranコンパイラ(ifort)を用いてプリコンパイルされ
た形式(*.modファイル)で提供されます.
Intel Fortranコンパイラ(ifort)を用いる際,ライブラリコマンドプロンプト(スタ
ートメニューのショートカットとして提供される)を利用する場合もしくはバッチファ
イル envvars.batを実行して環境変数の設定を行った場合は,環境変数 INCLUDEがあ
らかじめ設定されるため,「4.1.1.1. コマンドウィンドウ」で示される方法でこれらのモ
ジュールにアクセスすることができます.
Intel Fortranコンパイラ(ifort)以外の FortranコンパイラでこれらのNAGモジュ
ールを利用する場合は,ご利用の Fortran コンパイラでインターフェースブロックを再
コンパイルする必要があります.
32
任意の名前でフォルダを作成し(例えば NAG Fortranコンパイラ(nagfor)を利用す
るのであれば nag_interface_blocks_nagforなど),nag_interface_blocksフ
ォルダから全ての .f90 ファイルをそのフォルダにコピーしてください.そして,全て
の .f90 ファイルをご利用の Fortran コンパイラでコンパイルしてください.その際,
インターフェースブロックには依存関係があるため,コンパイルの順序が重要となりま
す.以下に示す順序でコンパイルを行ってください.
(以下は例としてNAG Fortranコンパイラ(nagfor)を利用しています.)
nagfor -f77 -c nag_precisions.f90
nagfor -f77 -c nag_blas_consts.f90
nagfor -f77 -c nag_a_ib.f90
nagfor -f77 -c nag_c_ib.f90
nagfor -f77 -c nag_d_ib.f90
nagfor -f77 -c nag_e_ib.f90
nagfor -f77 -c nag_f_ib.f90
nagfor -f77 -c nag_g_ib.f90
nagfor -f77 -c nag_h_ib.f90
nagfor -f77 -c nag_m_ib.f90
nagfor -f77 -c nag_p_ib.f90
nagfor -f77 -c nag_s_ib.f90
nagfor -f77 -c nag_x_ib.f90
nagfor -f77 -c nag_long_names.f90
nagfor -f77 -c nag_library.f90
(ここで -f77は STDCALL呼び出し規約の使用を指示するコンパイラオプションです.
他のコンパイラでは他のオプションが必要となるかもしれません.)
コンパイルによって生成されるオブジェクトファイルは必要ありません.モジュールフ
ァイル(*.mod)のみが必要となります.
新しく生成されたモジュールファイルを利用するためには,モジュールファイルが存在
するフォルダをコンパイル時に与える必要があります.
例えば,NAG Fortranコンパイラ(nagfor)では以下のようなコマンドになります.
例)
nagfor –f77 –I nag_interface_blocks_nagfor
33
4.4. Exampleプログラム
提供される Example結果は,インストールノートの「2.2. 開発環境」に記載されている
環境で生成されています.Example プログラムの実行結果は,異なる環境下(例えば,
異なるFortranコンパイラ,異なるコンパイラライブラリ,異なるBLASまたはLAPACK
ルーチンなど)で若干異なる場合があります.そのような違いが顕著な計算結果として
は,固有ベクトル(スカラー(多くの場合 -1 )倍の違い),反復回数や関数評価,残差
(その他マシン精度と同じくらい小さい量)などがあげられます.
Example プログラムは本ライブラリが想定する稼働環境に適した状態で提供されます.
そのため,ライブラリマニュアルに記載/提供されているExampleプログラムに比べて,
その内容が若干異なる場合があります.
Exampleプログラムは以下のバッチファイルを用いて簡単に利用することができます.
(これらのバッチファイルは環境変数 NAG_FLDLL234MLを参照します.)
nag_example_mkl.bat
NAG DLLインポートライブラリ FLDLL234M_mkl.libをリンクします.
実行は FLDLL234M_mkl.dllと本製品で提供されるMKLを利用します.
nag_example.bat
NAG DLLインポートライブラリ FLDLL234M_nag.libをリンクします.
実行は FLDLL234M_nag.dllを利用します.
インストーラは「スタート」メニューに以下のショートカットを作成します.
すべてのプログラム|NAG|FL23|
NAG Fortran Library for Win32 Applications (FLDLL234ML)|
FLDLL234ML Command Prompt
このショートカットは必要な環境変数(NAG_FLDLL234MLを含む)を設定した上でコマ
ンドプロンプトを開きます.
このショートカットを利用しない場合には,環境変数の設定を手動で行う必要がありま
す.環境変数の設定はバッチファイル envvars.bat を用いて行うことができます.こ
のバッチファイルのデフォルトの格納位置を以下に示します.
34
c:¥Program Files¥NAG¥FL23¥fldll234ml¥batch¥envvars.bat
これらのバッチファイルは,カレントディレクトリに Exampleプログラムのソースファ
イル(必要に応じて,データファイルその他)のコピーを作成して,コンパイル/リン
ク/実行を行います.
ご利用のNAGライブラリルーチンの名前をバッチの引数に指定してください.
例)
nag_example_mkl e04ucf
この例では,カレントフォルダに e04ucfe.f(ソースファイル),e04ucfe.d(データ
ファイル)のコピーを作成して,コンパイル/リンク/実行を行い e04ucfe.r(結果フ
ァイル)を生成します.
提供される Example 結果は FLDLL234M_mkl.dll(MKL 提供の BLAS/LAPACK ル
ーチンを使用)を用いて算出されています.FLDLL234M_nag.dll(NAG提供の BLAS
/LAPACKルーチンを使用)を用いた場合は,結果が若干異なるかもしれません.
4.5. Fortran型と強調斜体文字の解釈
ライブラリとライブラリマニュアルでは浮動小数点変数を以下のようにパラメータ化さ
れた型を用いて記述しています.
REAL(KIND=nag_wp)
ここで nag_wp は Fortran の種別パラメータを表しています.nag_wp の値はライブラ
リ製品によって異なっており,その値は nag_libraryモジュールに定義されています.
これに加え,いくつかのルーチンで以下の型が使用されます.
REAL(KIND=nag_rp)
これらの型の使用例については各種 Exampleプログラムをご参照ください.
本ライブラリでは,これらの型は以下のような意味を持っています.
35
REAL (kind=nag_rp) - REAL(単精度実数)
REAL (kind=nag_wp) - DOUBLE PRECISION
COMPLEX (kind=nag_rp) - COMPLEX(単精度複素数)
COMPLEX (kind=nag_wp) - 倍精度複素数(例えば COMPLEX*16)
上記に加え,ライブラリマニュアルでは強調斜体文字を用いていくつかの用語を表現し
ています.
一つ重要なものは machine precisionという表現で,これは double precision浮
動小数が計算機内で格納されている相対精度を意味します.例えば 10 進で約 16 桁の実
装であれば machine precisionは 1.0D-16に近い値を持ちます.
machine precisionの正確な値はルーチン X02AJFを使って確認できます.チャプタ
ーX02 のその他のルーチンを使うと,オーバーフロー用の閾値や表現可能な最大整数と
いった実装異存の定数値を求めることができます.
詳細については X02 Chapter Intoroductionをご参照ください.
brock sizeという表現はチャプターF07と F08の中でのみ使用されています.それは
これらのチャプターにおけるブロックアルゴリズムによって用いられているブロックサ
イズを表すものです.用意すべき作業エリアの量に影響が及ぶ場合にのみ,この値に留
意する必要があります.関係する Routine Documentと Chapter Intoroduction に記述
されているパラメータWORKと LWORKについてご参照ください.
4.6. NAGルーチンからの出力
いくつかのルーチンは,エラーメッセージやアドバイスメッセージを出力します.出力
装置番号は X04AAF(エラーメッセージの場合)または X04ABF(アドバイスメッセー
ジの場合)で再設定する事が可能です.デフォルト値は「5. ルーチン固有の情報」をご
参照ください.これらのメッセージの最大レコード長(コントロール文字などを含む)
は特に指定がない場合は 80文字です.
36
5. ルーチン固有の情報
本ライブラリルーチン固有の情報を(チャプター毎に)以下に示します.
a. F06, F07, F08
チャプターF06, F07, F08においてはBLASと LAPACK由来のルーチンに対し別個のル
ーチン名が用意されています.これらの名称については関係するチャプターイントロダ
クションをご参照ください.パフォーマンス面を考えますと,NAGスタイルの名前より
も BLAS/LAPACKスタイルの名前でルーチンを使用してください.
多くの LAPACKルーチンは「workspace query」メカニズムを利用します.ルーチン呼
び出し側にどれだけのワークスペースが必要であるかを聞くメカニズムですが,NAG提
供の LAPACKとMKL提供の LAPACKではこのワークスペースサイズが異なる場合が
ありますので注意してください.
FLDLL234M_mkl.libでは,ベンダー提供の BLAS/LAPACKの問題を回避する為に,
以下の BLAS/LAPACKルーチンについては NAG提供のものが含まれています(呼び
出されます).
DBDSQR DGEBAL DGEESX DGEEVX DGEHRD
DGGESX DHSEQR ZBDSQR ZGEBAL ZGEEVX
ZHPEVD ZHSEQR ZTRSEN ZTRSV
b. G02
このチャプターで出てくる ACCの値(マシン依存の定数)は 1.0D-13です.
c. P01
エラー(hard failure)の際 P01ABFはエラーメッセージを X04AAFで指定される装置
番号へ出力し,停止します.
37
d. S07 – S21
このチャプターの関数は,不正な引数で呼び出された場合にエラーメッセージを出力し
ます.ライブラリマニュアルに記載されている定数は,本ライブラリでは以下に示す値
を持ちます.
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 < X <= 2.23E-308
S17AEF IFAIL = 1 if abs(X) > 1.0E+16
S17AFF IFAIL = 1 if abs(X) > 1.0E+16
S17AGF IFAIL = 1 if X > 1.038E+2
IFAIL = 2 if X < -5.7E+10
38
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 Im(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 < 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 Re(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
S19ADF IFAIL = 1 if X > 9.9726E+2
S21BCF IFAIL = 3 if an argument < 1.583E-205
39
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
e. X01
数学定数は以下のとおりです.
X01AAF (pi) = 3.1415926535897932
X01ABF (gamma) = 0.5772156649015328
f. 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 = 4.45014771701441E-308
その他コンピュータ環境のパラメータ:
X02AHF = 1.42724769270596E+45
X02BBF = 2147483647
X02BEF = 15
X02DAF = .TRUE.
40
g. X03
X03AAWと X03AAXは内部ルーチンですが NAG Fortran Library DLLから Exportさ
れています.これはExcelなどの環境からNAG Fortran Library DLLを利用する場合に,
これらの内部ルーチンが有効に活用できるからです.
X03AAWは浮動小数点制御ワードを変更して有効制度を double precision(53-bit仮数)
に設定し,丸めモードを最近接丸めに変更します.X03AAWは1つの INTEGER引数を
取ります.これは入力時に浮動小数点制御ワードを持ち,出力時に値を呼び出し側へ返
します.そのため,このルーチンで現在の値を取得することができます.
X03AAXは浮動小数点制御ワードを1つの INTEGER 引数に指定します.このルーチン
は通常 X03AAWで変更された浮動小数点制御ワードを元に戻す際に使用されますが,異
なる値を設定するために利用することも可能です.
本ライブラリは double precision(53-bit)モードで動作するように設計されていますが,
チップがサポートする extended precision モードで動作するようには設計されていませ
ん.通常の Intel Fortranプログラムは double precisionモードで動作しますが,他の環
境では浮動小数点制御ワードが extended precision モードに変更されて動作します.
Excelは extended precision モードで動作するソフトウェアの1つです.従って,結果の
整合性を求める場合に,X03AAW を他の NAG ライブラリルーチンを呼び出す前に呼び
double precisionで計算が行われるように指定することができます.
h. X04
エラーメッセージおよびアドバイスメッセージのデフォルトの出力先装置番号は 6 番と
なります.
41
6. ドキュメント
ライブラリマニュアルは本製品の一部として提供されます.
またNAGのウェブサイトからダウンロードすることもできます.
ライブラリマニュアルの最新版は以下のウェブサイトをご参照ください.
http://www.nag.co.uk/numeric/FL/FLdocumentation.asp
ライブラリマニュアルは以下の形式で提供されます.
XHTML + MathML
PDF(PDFまたは HTML形式の目次ファイルからご利用ください.)
メインの目次ファイルが以下の形式で提供されます.
nagdoc_fl23¥xhtml¥FRONTMATTER¥manconts.xml
nagdoc_fl23¥pdf¥FRONTMATTER¥manconts.pdf
nagdoc_fl23¥html¥FRONTMATTER¥manconts.html
ライブラリマニュアルをインストールした場合,これらの目次ファイルは「スタート」
メニューから開くことができます.
すべてのプログラム|NAG|FL23|
NAG Fortran Library Manual (XHTML + MathML)
NAG Fortran Library Manual (PDF)
NAG Fortran Library Manual (PDF + HTML Index)
各形式の閲覧方法および操作方法については Online Documentationをご参照ください.
XHTML/MathML 形式のライブラリマニュアルの閲覧に Internet Explorer を用いる場
合は,Exampleソース/データ/結果ファイルおよび PDFファイルへのリンクはローカ
ルファイルではなく NAG社のウェブサイトに誘導されます.これは Internet Explorer
のセキュリティ制限によって,これらのページの閲覧が行えないためです.他のブラウ
ザをご利用の場合は,ローカルの Exampleおよび PDFファイルへリンクします.
42
またHTMLヘルプ形式のライブラリマニュアル(nagdoc_fl23.chm)が提供されます.
数式を正しく表示するために Design Science社のMathPlayerプラグインが必要です.
ライブラリマニュアルのインストールの最後で MathPlayer をインストールするかどう
かを選択することができます.またMathPlayerは Design Science社のウェブサイトか
らダウンロードすることができます.
http://www.dessci.com/en/products/mathplayer/download.htm
HTML ヘルプ形式のライブラリマニュアル(nagdoc_fl23.chm)は「スタート」メニ
ューから開くことができます.
すべてのプログラム|NAG|FL23|NAG Fortran Library Manual HTML Help
(HTML ヘルプ形式のライブラリマニュアル(nagdoc_fl23.chm)をネットワークド
ライブからローカルドライブにコピーした場合など)もし「ウェブページのナビゲーシ
ョンは取り消されました」といったメッセージが表示される場合は,Windows または
Internet Explorerのセキュリティアップデートによってファイルがブロックされている
状態です.この場合,まず nagdoc_fl23.chmを右クリックして表示されるポップアッ
プメニューからプロパティを開いてください.次に,プロパティの下の方にある「ブロ
ックの解除」ボタンをクリックしてください.最後に OKボタンをクリックしてプロパテ
ィを閉じてください.
加えて,以下のドキュメントが提供されます.
in.html – インストールノート(英語版)
un.html – ユーザノート(英語版)
ユーザノート(英語版)は「スタート」メニューから開くことができます.
すべてのプログラム|NAG|FL23|
NAG Fortran Library for Win32 Applications (FLDLL234ML)|
Users' Note
43
7. サポート
(a) ご質問等
保守サービスにご加入いただいているお客様は,電子メール(または電話|FAX)にて
「日本 NAGヘルプデスク」までお問い合わせください.
その際,ご利用の製品の製品コード(FLDLL234ML)および保守 IDを御明記いただきま
すようお願い致します.受付は平日 9:30~12:00,13:00~17:30となります.
日本NAGヘルプデスク
email: [email protected]
Tel: 03-5542-6311
Fax: 03-5542-6312
(b) NAGのウェブサイト
NAGのウェブサイトでは製品およびサービスに関する情報を定期的に更新しています.
http://www.nag-j.co.jp/ (日本)
http://www.nag.co.uk/ (英国本社)
http://www.nag.com/ (米国)
http://www.nag-gc.com/ (台湾)
44
8. ユーザフィードバック
NAGではユーザ様からのフィードバックをバージョンアップなどに活かして行きたいと
考えています.フィードバックにご協力いただける場合は,下記のコンタクト先にご連
絡ください.
コンタクト先情報
日本ニューメリカルアルゴリズムズグループ株式会社
(略称:日本NAG)
〒104-0032
東京都中央区八丁堀 4-9-9 八丁堀フロンティアビル 2F
email: [email protected]
Tel: 03-5542-6311
Fax: 03-5542-6312
日本ニューメリカルアルゴリズムズグループ株式会社から提供されるサービス内容は,
(お問い合わせ先など)日本国内ユーザ様向けに独自のものとなっています.