NAG Fortran Library, Mark 23 FLW6I23DCL Windows XP/Vista/7 x64

NAG Fortran Library, Mark 23
FLW6I23DCL
Windows XP/Vista/7 x64, Intel Fortran
ユーザ ノート
内容
1. イントロダクション .....................................................................................................
1
2. リリース後の最新情報 ..................................................................................................
1
3. 一般情報 ........................................................................................................................
2
3.1. ライブラリのリンク方法 ........................................................................................
2
3.1.1. コマンドウィンドウ ........................................................................................
4
3.1.2. MS Visual Studio .NET ..................................................................................
6
3.1.3. Visual Basic for Application 7 / Excel ............................................................ 10
3.1.4. Visual Basic .NET ........................................................................................... 12
3.1.5. Miscrosoft C / Intel C ...................................................................................... 15
3.1.6. アクセスチェック ............................................................................................ 17
3.2. インターフェースブロック .................................................................................... 17
3.3. Example プログラム .............................................................................................. 20
3.4. Fortran 型と強調斜体文字の解釈 .......................................................................... 22
3.5. NAG ルーチンからの出力 ...................................................................................... 23
4. ルーチン固有の情報 ..................................................................................................... 24
5. ドキュメント ................................................................................................................ 29
6. サポート ........................................................................................................................ 31
7. ユーザフィードバック .................................................................................................. 32
追記 - コンタクト先情報 ............................................................................................... 32
1. イントロダクション
本ユーザノートは本 NAG Fortran Library, Mark 23:FLW6I23DCL(ライブラリ)を
使用される方向けのドキュメントです.本ユーザノートには NAG Library Manual,
Mark 23(ライブラリマニュアル)に含まれない製品毎の情報が含まれます.ライブラリ
マニュアルに「ユーザノート参照」などと書かれている場合は,本ユーザノートをご参
照ください.
ライブラリルーチンのご利用にあたり,以下のドキュメントを必ずお読みください.
(a) Essential Introduction (ライブラリ一般に関する基本的なドキュメント)
(b) Chapter Introduction (チャプター毎のドキュメント)
(c) Routine Document
(ルーチン毎のドキュメント)
本ライブラリはマルチスレッド環境でご利用いただけます(スレッドセーフです).
2. リリース後の最新情報
本ライブラリの動作環境や利用方法についての最新の情報は,以下のウェブページをご
確認ください.
http://www.nag.co.uk/doc/inun/fl23/w6idcl/postrelease.html
1
3. 一般情報
パフォーマンスの面から,Math Kernel Library(MKL)を利用するバージョンの NAG
ライブラリ(nag_mkl_MT.lib, nag_mkl_MD.lib,
FLW6I23DC_mkl.lib/FLW6I23DC_mkl.dll)のご利用が推奨されます.もし本製品で提
供される MKL とは異なるバージョンの MKL を用いて問題が生じる場合は,本製品で提
供される MKL を用いるか,もしくは MKL を利用しないバージョンの NAG ライブラリ
(nag_nag_MT.lib, nag_nag_MD.lib, FLW6I23DC_nag.lib/FLW6I23DC_nag.dll)
をご利用ください.
3.1. ライブラリのリンク方法
本ライブラリはインストールノートに記載されたバージョンの Intel Fortran コンパイラ
を用いてビルドされています.それ以外のバージョンの Intel Fortran コンパイラでコン
パイルされたプログラムから本ライブラリの DLL 版(以下 NAG DLL と呼ぶ)を利用す
る場合は,正しい Intel Fortran コンパイラのランタイムライブラリがピックアップされ
るように,install_dir¥bin フォルダに提供されている Intel Fortran コンパイラのラ
ンタイムライブラリ libifcoremd.dll および libmmd.dll の名前を変更する必要が
あります.これを簡単に行うためのバッチファイル hide_ifort_rtls.bat が同フォル
ダに提供されています.このバッチファイルはフォルダに在る libifcoremd.dll およ
び libmmd.dll の名前を変更します.また,変更した名前を元に戻すためのバッチファ
イル expose_ifort_rtls.bat が同フォルダに合わせて提供されています.
本セクションでは,以下のデフォルトのインストールフォルダに本ライブラリがインス
トールされていることが前提となります.
C:¥Program Files¥NAG¥FL23¥flw6i23dcl
もしこのフォルダが存在しない場合は,システム管理者(本ライブラリをインストール
した方)にお尋ねください.以降の説明ではこのフォルダを install_dir として参照
します.
2
また,以下の「スタート」メニューにライブラリコマンドプロンプトのショートカット
が置かれていることが前提となります.
すべてのプログラム|NAG|FL23|
NAG Fortran Library – Intel Fortran (FLW6I23DCL)|
FLW6I23DCL Command Prompt
もしこのショートカットが存在しない場合は,システム管理者(本ライブラリをインス
トールした方)にお尋ねください.また,本ライブラリのインストール時に作成される
他のショートカットも同じ場所に置かれていることが前提となります.
NAG DLL(FLW6I23DC_nag.dll/FLW6I23DC_mkl.dll)をご利用の場合は,実行
時に NAG DLL にアクセスできるように install_dir¥bin フォルダにパスが通ってい
ることを確認してください.また MKL を利用する NAG DLL(FLW6I23DC_mkl.dll)
をご利用の場合は,install_dir¥MKL_intel64_10.3¥bin フォルダにもパスが通っ
ている必要があります.このフォルダは install_dir¥bin フォルダよりも後ろに設定
してください.これは BLAS/LAPACK ルーチンのいくつかはベンダー提供のものとの
問題を避けるために FLW6I23DC_mkl.dll に含まれる NAG 提供のものを使用する必要
があるからです(
「4. ルーチン固有の情報」参照)
.
NAG DLL へのアクセスをチェックするためには,以下の「スタート」メニューのショー
トカットから診断プログラム NAG_Fortran_DLL_info.exe を実行してください.
すべてのプログラム|NAG|FL23|
NAG Fortran Library – Intel Fortran (FLW6I23DCL)|
Check NAG DLL Accessibility (FLW6I23DCL)
この診断プログラムの詳細はインストールノートの「4.2.3. アクセスチェック」をご参
照ください.
3
3.1.1. コマンドウィンドウ
本ライブラリをコマンドウィンドウからご利用いただく場合には環境変数の設定が必要
です.
(通常,インストール時に環境変数の自動設定を選択された場合は,必要な環境変
数はシステム環境変数に設定されています.
)
以下の「スタート」メニューのショートカットがご利用いただけます.
すべてのプログラム|NAG|FL23|
NAG Fortran Library – Intel Fortran (FLW6I23DCL)|
FLW6I23DCL Command Prompt
このショートカットは本ライブラリおよび本製品で提供される MKL に対して必要な環
境変数 INCLUDE, LIB, PATH を正しく設定した上でコマンドプロンプトを開きます.
このショートカットを利用しない場合には環境変数の設定を手動で行う必要があります.
環境変数の設定はバッチファイル envvars.bat を用いて行うことができます.
このバッチファイルのデフォルトの格納位置を以下に示します.
c:¥Program Files¥NAG¥FL23¥flw6i23dcl¥batch¥envvars.bat
その後,以下に示すコマンドの一つでコンパイル/リンクを行ってください.
(ここで driver.f90 がユーザープログラムです.
)
ifort /MT driver.f90 nag_mkl_MT.lib user32.lib mkl_intel_lp64.lib
mkl_intel_thread.lib mkl_core.lib libiomp5mt.lib
ifort /MT driver.f90 nag_nag_MT.lib user32.lib
ifort /MD driver.f90 nag_mkl_MD.lib user32.lib mkl_intel_lp64_dll.lib
mkl_intel_thread_dll.lib mkl_core_dll.lib libiomp5md.lib
ifort /MD driver.f90 nag_nag_MD.lib user32.lib
ifort /MD driver.f90 FLW6I23DC_mkl.lib
ifort /MD driver.f90 FLW6I23DC_nag.lib
4
指定するライブラリの順番は重要です.これは BLAS/LAPACK ルーチンのいくつかは
ベンダー提供のものとの問題を避けるために NAG 提供のものを使用する必要があるか
らです(
「4. ルーチン固有の情報」参照).
最初の2つコマンドは/MT オプションでコンパイルされた NAG スタティックライブラリ
を利用する場合です.
最初のコマンドは NAG BLAS/LAPACK を含まない(MKL スタティックライブラリ
BLAS/LAPACK を利用する)NAG スタティックライブラリ(nag_mkl_MT.lib)を
利用する場合です.
2番目のコマンドは NAG BLAS/LAPACK を含む NAG スタティックライブラリ
(nag_nag_MT.lib)を利用する場合です.
/MT オプションは正しいランタイムライブラリ(マルチスレッドスタティックランタイ
ムライブラリ)とのリンクを確定するために必要となります.
3番目と4番目のコマンドは/MD オプションでコンパイルされた NAG スタティックライ
ブラリを利用する場合です.
3番目のコマンドは NAG BLAS/LAPACK を含まない(MKL DLL BLAS/LAPACK
を利用する)NAG スタティックライブラリ(nag_mkl_MD.lib)を利用する場合です.
4番目のコマンドは NAG BLAS/LAPACK を含む NAG スタティックライブラリ
(nag_nag_MD.lib)を利用する場合です.
/MD オプションは正しいランタイムライブラリ(マルチスレッド DLL ランタイムライブ
ラリ)とのリンクを指定するために必要となります.
最後の2つのコマンドは/MD オプションでコンパイルされた NAG DLL インポートライ
ブラリを利用する場合です.
5番目のコマンドは NAG BLAS/LAPACK を含まない(MKL DLL BLAS/LAPACK
を利用する)NAG DLL インポートライブラリ(FLW6I22DC_mkl.lib)を利用する場
合です.
最後のコマンドは NAG BLAS/LAPACK を含む NAG DLL インポートライブラリ
(FLW6I22DC_nag.lib)を利用する場合です.
/MD オプションは正しいランタイムライブラリ(マルチスレッド DLL ランタイムライブ
ラリ)とのリンクを指定するために必要となります.
なお,/MT オプションは /libs:static /threads オプションに,/MD オプションは
/libs:dll /threads オプションに等価です.Intel Visual Fortran コンパイラの環境
変数の設定にも注意してください.詳細はコンパイラの User’s Guide をご参照ください.
5
3.1.2. MS Visual Studio .NET
本セクションの説明は Visual Studio .NET 2003 / 2005 / 2008 および Intel Fortran
Compiler 12.0 を想定しています.他のバージョンでは詳細が異なるかもしれません.
実行時に NAG DLL(FLW6I23DC_nag.dll/FLW6I23DC_mkl.dll)にアクセスでき
るように,NAG DLL の格納フォルダ install_dir¥bin が環境変数 PATH に設定され
ている必要があります.MKL を利用する NAG DLL(FLW6I23DC_mkl.dll)を利用す
る場合には,実行時に MKL DLL にアクセスできるように,MKL DLL の格納フォルダ
install_dir¥MKL_intel64_10.3¥bin が環境変数 PATH に設定されている必要があ
ります(ただし install_dir¥MKL_intel64_10.3¥bin は install_dir¥bin より
も後に設定されなければなりません)
.
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 DLL インポートライブラリが置かれているフ
ォルダのパスを追加してください.デフォルトは以下のようになります.
c:¥Program Files¥NAG¥FL23¥flw6i23dcl¥lib
5.
NAG DLL に対して MKL インポートライブラリが置かれているフォルダのパスを追
加する必要はありません.BLAS/LAPACK のシンボルは NAG DLL インポートラ
イ ブ ラ リ ( FLW6I23DC_mkl.lib ) か ら エ ク ス ポ ー ト さ れ る か ら で す .( も し
Libraries パスに MKL ライブラリフォルダを追加する場合は,
「3.1. ライブラリの
リンク方法」で説明されているように,NAG ライブラリフォルダの後に追加する必
要があります.
)
6
6.
Set Directory List ウィンドウで OK ボタンをクリックしてください.
7.
Includes パネルの右端にある’...’ボタンをクリックしてください.
8.
Set Directory List ウィンドウで NAG インターフェースブロックが置かれているフ
ォルダのパスを追加してください.デフォルトは以下のようになります.
c:¥Program Files¥NAG¥FL23¥flw6i23dcl¥nag_interface_blocks
9.
Set Directory List ウィンドウで OK ボタンをクリックしてください.
10. 「オプション」ウィンドウで OK ボタンをクリックしてください.
上記の設定を行うことで Intel Fortran プロジェクトでコンパイル/リンクを行う際に,
ライブラリおよび NAG インターフェースブロックをフルパスで指定する必要が無くな
ります.
上記の設定は,全ての Intel Fortran プロジェクトに適用されます.
下記の設定は,個々の Intel Fortran プロジェクトに対して行う必要があります.
本ライブラリはフルオプティマイズされています.そのため Debug モードで C ランタイ
ムライブラリに関する警告メッセージが表示されますが,通常これは無視して構いませ
ん.Release モードへの設定変更はツールバーもしくはメニューの「ビルド|構成マネ
ージャ」から行うことができます.
NAG ライブラリのプロジェクトへの追加は,以下の方法で行うことができます.
プロジェクトのプロパティを開いてください.
(ソリューションエクスプローラでグルー
ププロジェクト(一行目)が選択されていないことを確認して,メニューから「プロジ
ェクト|*** のプロパティ」を選択するか,もしくはソリューションエクスプローラで
特定のプロジェクトを右クリックして「プロパティ」を選択します.
)
7
プロパティの左側のパネルの「リンカ|入力」を選択してください.右側のパネルの「追
加の依存ファイル」に,例えば MKL を利用する NAG スタティックライブラリ
( nag_mkl_MT.lib ) ご 利 用 に な る 場 合 は , nag_mkl_MT.lib user32.lib
mkl_intel_lp64.lib mkl_intel_thread.lib mkl_core.lib libiomp5mt.lib
を追加してください.これら6つのライブラリはそれぞれスペースで区切られているこ
とに注意してください.また,nag_mkl_MT.lib を一番最初に置く必要があります.変
更を有効にするために OK または「適用」ボタンをクリックしてください.もし MKL を
利用しない NAG スタティックライブラリ(nag_nag_MT.lib)ご利用になる場合は,
上記の6つのライブラリの代わりに nag_nag_MT.lib user32.lib の2つのライブラ
リを追加してください.同様に,その他の NAG ライブラリをご利用になる場合にも,そ
れぞれ適切なライブラリ群を「追加の依存ファイル」に追加する必要があります.
次に,正しいランタイムライブラリを指定する必要があります.
プロパティの左側のパネルの Fortran > Libraries を選択してください.右側のパネ
ルの Runtime Library において,nag_nag_MT.lib または nag_mkl_MT.lib をご
利用の場合は Multithread を選択し,その他の NAG ライブラリをご利用の場合は
Multithread DLL を選択してください.変更を有効にするために OK または「適用」
ボタンをクリックしてください.
以上の設定を次に要約します.プロジェクトの「追加の依存ファイル」,プロジェクトの
Runtime Library,環境変数 PATH の設定は一貫していなければなりません.
8
追加の依存ファイル
Runtime Library
nag_mkl_MT.lib
user32.lib
mkl_intel_lp64.lib
mkl_intel_thread.lib
mkl_core.lib
libiomp5mt.lib
Multithread
nag_nag_MT.lib
user32.lib
Multithread
nag_mkl_MD.lib
user32.lib
mkl_intel_lp64_dll.lib
mkl_intel_thread_dll.lib
mkl_core_dll.lib
libiomp5md.lib
Multithread DLL
nag_nag_MD.lib
user32.lib
Multithread DLL
FLW6I23DC_mkl.lib
mkl_intel_lp64_dll.lib
mkl_intel_thread_dll.lib
mkl_core_dll.lib
libiomp5md.lib
Multithread DLL
FLW6I23DC_nag.lib
Multithread DLL
環境変数 PATH
install_dir¥
MKL_intel64_10.3¥bin
install_dir¥bin
install_dir¥
MKL_intel64_10.3¥bin
install_dir¥bin
以上で,プロジェクトのビルド(コンパイル/リンク)を行うことができます.
プログラムの実行が標準入出力からの入出力リダイレクションを伴わない場合には
Microsoft Development Environment(例えば,メニュー「デバッグ|デバックなしで
開始」など)から実行することができますが,標準入出力からの入出力リダイレクショ
ンを伴う場合にはコマンドプロンプトウィンドウからの実行が推奨されます.
9
3.1.3. Visual Basic for Applications 7 / Excel
本ライブラリの DLL 版(以下 NAG DLL と呼ぶ)は Excel スプレッドシートからの利用
にも適しています.NAG ルーチンは Visual Basic for Applications 7.0(VBA7)コード
から呼び出されます.
本セクションの情報は Excel の 64-bit 版に関するものです.
Excel から NAG DLL を利用する Example が以下のフォルダに提供されます.
install_dir¥samples¥excel64_examples
install_dir¥samples¥excel64_examples¥linear_algebra フォルダに提供さ
れる xls_demo_64.html には Excel スプレッドシートから NAG DLL を利用する際の
ヒントが記載されています.
キーとなる情報:

Install_dir¥vba7-64_headers フォルダの flvba764-<チャプター名>.bas
(例えば flvba764-a.bas)ファイルには VBA7 で利用できる Declare 文がチャプ
ター毎に定義されています.また flvba764-types.bas ファイルにはこれらのフ
ァイルで利用される定数やユーザー定義型が定義されています.また
flvba764-f-blaslapack.bas ファイルにはチャプターF のルーチンが(NAG 名
ではなく)BLAS/LAPACK 名で定義されています.

MKL 提供の BLAS/LAPACK を利用する NAG DLL をご利用になる場合は,
FLW6I23DC_nag.dll と宣言されている部分を FLW6I23DC_mkl.dll に置き換え
てください.

Declare 文のご利用は,ファイルから必要な部分だけをコピーしてご自身のモジュー
ルにペーストするか,もしくはファイルをモジュールとして VBA7 プロジェクトに
インポートしてください(場合によっては上述の flvba764-types.bas も合わせ
てインポートする必要があります)
.

Fortran の配列は 1 から始まるので,Option Base 1 の設定を推奨します.
10

Variant 型は実際の引数として使用できません.Long,Double,String(および,
ごく稀な場合に Single)が必要です.Option Explicit を使用してください.

Long は Fortran の INTEGER に,Double は Fortran の DOUBLE PRECISION に,
Single は Fortran の REAL にそれぞれ対応します.

Long は Fortran の LOGICAL に対応します(NAGTRUE と NAGFALSE がそれぞ
れ -1 と 0 に対応します)
.

LongPtr はコールバック関数へのポインターに使用されます.実際の関数へのポイ
ンターは VB の AddressOf 演算子を使用して渡されます.

構造体 Complex と ComplexSimple は Fortran の COMPLEX*16 と COMPLEX に
それぞれ対応します.

Fortran の配列引数に対しては,VBA7 配列の最初の要素を指定します.
例えば A(1,1) .

数式は ByVal 引数に渡されます.その他の引数はデフォルトでは ByRef です.この
点が明確になるように,ByRef と ByVal は Declare 文の全体を通して明示的に指定
されています.

Fortran の文字引数に対しては,2つの VBA 引数が必要となります(ByVal 文字引
数と ByVal length-of-string 引数(両方とも Long 型)).length-of-string 引数は引
数リストの最後に置く必要があります.
以上の情報は Microsoft Office Excel 2010 で検証されています.
11
3.1.4. Visual Basic .NET
NAG ライブラリルーチンの多くは Visual Basic .NET(VB.NET)から呼び出すことが
できます.VB.NET から NAG DLL を利用する Example が以下のフォルダに提供されま
す.
install_dir¥samples¥vb.net64_examples
(これらの Example は Visual Studio 2005 で生成されています.Visual Studio 2008 以
降でロードした場合は,ソリューションとプロジェクトファイルは Visual Studio 変換ウ
ィザードでコンバートされます.
)
キーとなる情報:

以下のファイルに VB.NET で利用できる Declare 文が定義されています.
Install_dir¥vb.net64_headers¥flvbdnet64.vb

MKL 提供の BLAS/LAPACK を利用する NAG DLL をご利用になる場合は,
FLW6I23DC_nag.dll と宣言されている部分を FLW6I23DC_mkl.dll に置き換え
てください.

Declare 文のご利用は,ファイルから必要な部分だけをコピーしてご自身のモジュー
ルにペーストするか,もしくはファイルをモジュールとして VB.NET プロジェクト
にインポートしてください.

Fortran 配列は 1 から始まりますが,VB.NET 配列は 0 から始まります.

次の型マッピングが使われます.Integer は Fortran の INTEGER に,Double は
Fortran の DOUBLE PRECISION に,Single は Fortran の REAL にそれぞれ対応
します.

Integer は Fortran の LOGICAL に対応します(NAGTRUE と NAGFALSE がそれ
ぞれ -1 と 0 に対応します)
.

構造体 Complex と ComplexSimple は Fortran の COMPLEX*16 と COMPLEX に
それぞれ対応します.
12

全てのスカラー値は参照渡し(ByRef)です.VB.NET はデフォルトでは値渡し
(ByVal)なので,参照渡し(ByRef)を明示的に指定する必要があります.この点
が明確になるように,ByRef と ByVal は Declare 文の全体を通して明示的に指定さ
れています.

配列引数には配列名を渡してください.全ての配列は値渡し(ByVal)です.また宣
言には Fortran 側の用途(入力,出力,入出力)によって<[In]()>,<Out()>,
<[In](),Out()> のいずれかの decoration が付加されています.具体例として,
various_routines_64 Example の G02EEFE() Sub プロシージャをご参照くだ
さい.

VB.NET ではコールバック関数における配列は値渡しされた IntPtr によって表現さ
れます.具体例として,d02ejf_example のコードをご参照ください.

VB.NET 配列は行優先です.Fortran のように列優先ではありません.このため
Fortran ルーチンが正しく配列を解釈するためには配列の転置が必要です.

配列の格納形式が異なるため,Fortran ルーチンの Leading Dimension は VB.NET
配列の第二次元に対応します.例えば,VB.NET の A(2,3) では Leading Dimension
として 4(配列は 0 から始まるため)を渡します.

Fortran 側で CHARACTER*型
(例えば CHARACTER*(*)または CHARACTER*1)
のスカラー引数が求められる場合は,
文字列を VB.NET の String で渡してください.
そして,引数リストの最後に文字列の長さを Integer で渡してください.

Fortran 側で CHARACTER*型の配列引数が求められる場合は,VB.NET の一つの
String に全ての配列要素を結合したものを渡してください.そして,引数リストの
最後に配列の一つの要素の長さを Integer で渡してください.具体例として,
various_routine_64 Example の M01CCFE() Sub プロシージャをご参照くださ
い.
13

Fortran 側でコールバック関数が求められる場合は,VB.NET で interface の宣言と
して Delegate function を定義する必要があります.引数はその Delegate function
型で値として渡してください.Delegate function の実装を引数として渡す際には,
キーワード AddressOf を利用してください.具体例として,d01bdf_example の
コードまたは various_routines_64 Example の D01BDFE() Sub プロシージャ
をご参照ください.

これらの宣言を VB.NET に認識させるために,VB.NET ソースコードの一番上には
以下の行が必要です.
Imports System.Runtime.InteropServices
以上の情報は Visual Studio 2005, 2008, 2010 で検証されています.
14
3.1.5. Microsoft C / Intel C
本ライブラリは C または C++環境からも(いくつかの注意点と共に)ご利用いただくこ
とができます.
ご利用の支援として Fortran と C の間の型マッピング情報を持った C/C++
ヘッダファイルが提供されます.必要に応じてヘッダファイルの中から必要な部分をコ
ピーするか,もしくは単純にヘッダファイルをインクルードしてご利用ください.
C または C++から本ライブラリの DLL 版(以下 NAG DLL と呼ぶ)を利用する Example
が以下のフォルダに提供されます.
install_dir¥samples¥c_examples
および,
install_dir¥samples¥cpp_examples
詳細については install_dir¥c_headers フォルダに提供される techdoc.html をご
参照ください.このドキュメントのショートカットがスタートメニューに提供されます.
すべてのプログラム|NAG|FL23|
NAG Fortran Library – Intel Fortran (FLW6I23DCL)|
C & C++ Header File Information
キーとなる情報:

配列のアクセス順序が異なる.
C は行優先(Row Major)
,Fortran は列優先(Column Major)

提供されるヘッダファイルを利用する.

Fortran の文字列は二つのパラメータとして扱われる(文字列と文字列長)
.

C から NAG DLL を利用する Example が提供される.
install_dir¥samples¥c_examples

C++から NAG DLL を利用する Example が提供される.
install_dir¥samples¥cpp_examples

C プログラムは.c 拡張子,C++プログラムは.cpp 拡張子を用いる.
15
C プログラムから NAG DLL をご利用になる場合は,NAG DLL インポートライブラリ
の格納フォルダのパスが環境変数 LIB に設定されていることを前提として,以下のよう
にコンパイル/リンクを行ってください.ここで driver.c はユーザープログラムです.
cl driver.c FLW6I23DC_mkl.lib
または,
cl driver.c FLW6I23DC_nag.lib
上記のコマンドはヘッダファイルのパスが環境変数 INCLUDE に設定されていることを前
提としています.設定されていない場合は,以下のようにコンパイル/リンクを行って
ください.
cl /I"install_dir¥c_headers" driver.c FLW6I23DC_mkl.lib
または,
cl /I"install_dir¥c_headers" driver.c FLW6I23DC_nag.lib
NAG DLL の代わりに NAG スタティックライブラリをリンクする場合は,コンパイラの
ランタイムライブラリの格納フォルダ install_dir¥rtl へのアクセスが必要となりま
す.このフォルダのパスが環境変数 LIB に設定されていることを前提として,以下のよ
うにコンパイル/リンクを行ってください.
cl /MD /I"install_dir¥c_headers" driver.c nagc_nag_MD.lib user32.lib
または,
cl /MT /I"install_dir¥c_headers" driver.c nagc_nag_MT.lib user32.lib
Intel C コンパイラ(icl)でのご利用方法は,上記の Microsoft C コンパイラ(cl)で
のご利用方法と同じです.ただし,環境変数 LIB に rtl フォルダのパスを設定する必要
はありません.
16
3.1.6. アクセスチェック
診断プログラム NAG_Fortran_DLL_info.exe を用いて,ご利用のマシン環境から本ラ
イブラリの DLL 版(FLW6I23DC_nag.dll および FLW6I23DC_mkl.dll)にアクセス
ができるかどうかを確認することができます.診断プログラムは以下の「スタート」メ
ニューのショートカットから実行することができます.
すべてのプログラム|NAG|FL23|
NAG Fortran Library – Intel Fortran (FLW6I23DCL)|
Check NAG DLL Accessibility (FLW6I23DCL)
診断プログラムの詳細はインストールノートの「4.2.3. アクセスチェック」をご参照く
ださい.
3.2. インターフェースブロック
NAG Fortran Library インターフェースブロック(引用仕様宣言)はライブラリルーチ
ンの型と引数を定義します.Fortran プログラムから NAG Fortran Library を呼び出す
際に必ず必要という性質のものではありませんが(ただし本製品で提供される Example
を利用する際には必要となります)
,これを用いることで NAG Fortran Library が正し
く呼び出されているかどうかのチェックを Fortran コンパイラに任せる事ができます.
具体的にはコンパイラが以下のチェックを行うことを可能とします.
(a) サブルーチン呼び出しの整合性
(b) 関数宣言の型
(c) 引数の数
(d) 引数の型
これらのインターフェースブロックは NAG Fortran Library のソースコードから自動的
に生成されているため信頼性があります.
NAG Fortran Library インターフェースブロックファイルは,チャプター毎のモジュー
ルとして提供されます.以下にモジュール名を示します.
17
nag_precisions
nag_blas_consts
nag_a_ib
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 ファイル)で提供されます.
ライブラリコマンドプロンプト(スタートメニューのショートカットとして提供される)
を利用する場合もしくはバッチファイル envvars.bat を実行して環境変数の設定を行
った場合は,環境変数 INCLUDE があらかじめ設定されるため,「3.1.1. コマンドウィン
ドウ」で示される方法でこれらのモジュールにアクセスすることができます.
もし本ライブラリの生成に使用されたものとは異なるバージョンの Intel Fortran コンパ
イラ(ifort)で NAG モジュールを利用する場合は,ご利用の Fortran コンパイラでイ
ンターフェースブロックを再コンパイルする必要があります.
18
任意の名前でフォルダを作成し(例えば nag_interface_blocks_ifort10 など),
nag_interface_blocks フォルダから全ての .f90 ファイルをそのフォルダにコピー
してください.そして,全ての .f90 ファイルをご利用の Fortran コンパイラでコンパ
イルしてください.その際,インターフェースブロックには依存関係があるため,コン
パイルの順序が重要となります.以下に示す順序でコンパイルを行ってください.
ifort -c nag_precisions.f90
ifort -c nag_blas_consts.f90
ifort -c nag_a_ib.f90
ifort -c nag_c_ib.f90
ifort -c nag_d_ib.f90
ifort -c nag_e_ib.f90
ifort -c nag_f_ib.f90
ifort -c nag_g_ib.f90
ifort -c nag_h_ib.f90
ifort -c nag_m_ib.f90
ifort -c nag_p_ib.f90
ifort -c nag_s_ib.f90
ifort -c nag_x_ib.f90
ifort -c nag_long_names.f90
ifort -c nag_library.f90
コンパイルによって生成されるオブジェクトファイルは必要ありません.
モジュールファイル(*.mod)のみが必要となります.
新しく生成されたモジュールファイルを利用するためには,モジュールファイルが存在
するフォルダをコンパイル時に与える必要があります.例えば,以下の様なコマンドに
なります.
例)
ifort –I nag_interface_blocks_ifort10
19
3.3. Example プログラム
提供される Example 結果は,インストールノートの「2.2. 開発環境」に記載されている
環境で生成されています.Example プログラムの実行結果は,異なる環境下(例えば,
異なる Fortran コンパイラ,
異なるコンパイラライブラリ,異なる BLAS または LAPACK
ルーチンなど)で若干異なる場合があります.そのような違いが顕著な計算結果として
は,固有ベクトル(スカラー(多くの場合 -1 )倍の違い)
,反復回数や関数評価,残差
(その他マシン精度と同じくらい小さい量)などがあげられます.
Example プログラムは本ライブラリが想定する稼働環境に適した状態で提供されます.
そのため,
ライブラリマニュアルに記載/提供されている Example プログラムに比べて,
その内容が若干異なる場合があります.
Example プログラムは以下のバッチファイルを用いて簡単に利用することができます.
(これらのバッチファイルは環境変数 NAG_FLW6I23DCL を参照します.)

nag_example_mkl_MT.bat
NAG スタティックライブラリ nag_mkl_MT.lib および本製品で提供される MKL
をリンクします.

nag_example_MT.bat
NAG スタティックライブラリ nag_nag_MT.lib をリンクします.

nag_example_mkl_MD.bat
NAG スタティックライブラリ nag_mkl_MD.lib および本製品で提供される MKL
をリンクします.

nag_example_MD.bat
NAG スタティックライブラリ nag_nag_MD.lib をリンクします.

nag_example_mkl_DLL.bat
NAG DLL インポートライブラリ FLW6I23DC_mkl.lib をリンクします.
実行は FLW6I23DC_mkl.dll と本製品で提供される MKL を利用します.

nag_example_DLL.bat
NAG DLL インポートライブラリ FLW6I23DC_nag.lib をリンクします.
実行は FLW6I23DC_nag.dll を利用します.
nag_mkl_MT.lib, nag_nag_MT.lib はマルチスレッドスタティックランライムライ
ブラリを利用します.nag_mkl_MD.lib, nag_nag_MD.lib, FLW6I23DC_mkl.lib,
FLW6I23DC_nag.lib はマルチスレッド DLL ランタイムライブラリを利用します.
20
インストーラは「スタート」メニューに以下のショートカットを作成します.
すべてのプログラム|NAG|FL23|
NAG Fortran Library – Intel Fortran (FLW6I23DCL)|
FLW6I23DCL Command Prompt
このショートカットは必要な環境変数(NAG_FLW6I23DCL を含む)を設定した上でコマ
ンドプロンプトを開きます.
このショートカットを利用しない場合には,環境変数の設定を手動で行う必要がありま
す.環境変数の設定はバッチファイル envvars.bat を用いて行うことができます.こ
のバッチファイルのデフォルトの格納位置を以下に示します.
c:¥Program Files¥NAG¥FL23¥flw6i23dcl¥batch¥envvars.bat
これらのバッチファイルは,カレントディレクトリに Example プログラムのソースファ
イル(必要に応じて,データファイルその他)のコピーを作成して,コンパイル/リン
ク/実行を行います.
ご利用の NAG ライブラリルーチンの名前をバッチの引数に指定してください.
例)
nag_example_mkl_MT e04ucf
この例では,カレントフォルダに e04ucfe.f(ソースファイル)
,e04ucfe.d(データ
ファイル)のコピーを作成して,コンパイル/リンク/実行を行い e04ucfe.r(結果フ
ァイル)を生成します.
提供される Example 結果はスタティックライブラリ nag_mkl_MT.lib(MKL 提供の
BLAS/LAPACK ルーチンを使用)を用いて算出されています.NAG 提供の BLAS/
LAPACK ルーチンを使用するライブラリ(nag_nag_MT.lib, nag_nag_MD.lib,
FLW6I23DC_nag.dll)を用いた場合は,結果が若干異なるかもしれません.
21
3.4. Fortran 型と強調斜体文字の解釈
ライブラリとライブラリマニュアルでは浮動小数点変数を以下のようにパラメータ化さ
れた型を用いて記述しています.
REAL(KIND=nag_wp)
ここで nag_wp は Fortran の種別パラメータを表しています.nag_wp の値は製品毎に
異なり,その値は nag_library モジュールに定義されています.
これに加え,いくつかのルーチンで以下の型が使用されます.
REAL(KIND=nag_rp)
これらの型の使用例については各種 Example プログラムをご参照ください.
本ライブラリでは,これらの型は以下のような意味を持っています.
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 をご参照ください.
22
brock size という表現はチャプターF07 と F08 の中でのみ使用されています.それは
これらのチャプターにおけるブロックアルゴリズムによって用いられているブロックサ
イズを表すものです.用意すべき作業エリアの量に影響が及ぶ場合にのみ,この値に留
意する必要があります.関係する Routine Document と Chapter Intoroduction に記述
されているパラメータ WORK と LWORK についてご参照ください.
3.5. NAG ルーチンからの出力
いくつかのルーチンは,エラーメッセージやアドバイスメッセージを出力します.出力
装置番号は X04AAF(エラーメッセージの場合)または X04ABF(アドバイスメッセー
ジの場合)で再設定する事が可能です.デフォルト値は「4. ルーチン固有の情報」をご
参照ください.これらのメッセージの最大レコード長(コントロール文字などを含む)
は特に指定がない場合は 80 文字です.
23
4. ルーチン固有の情報
本ライブラリルーチン固有の情報を(チャプター毎に)以下に示します.
a. F06, F07, F08
チャプターF06, F07, F08 においては BLAS と LAPACK 由来のルーチンに対し別個のル
ーチン名が用意されています.これらの名称については関係するチャプターイントロダ
クションをご参照ください.パフォーマンス面を考えますと,NAG スタイルの名前より
も BLAS/LAPACK スタイルの名前でルーチンを使用してください.
多くの LAPACK ルーチンは「workspace query」メカニズムを利用します.ルーチン呼
び出し側にどれだけのワークスペースが必要であるかを聞くメカニズムですが,NAG 提
供の LAPACK と MKL 提供の LAPACK ではこのワークスペースサイズが異なる場合が
ありますので注意してください.
nag_mkl_MT.lib, nag_mkl_MD.lib, FLW6I23DC_mkl.dll では,ベンダー提供の
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 で指定される装置
番号へ出力し,停止します.
24
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
25
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
26
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.
27
g. X04
エラーメッセージおよびアドバイスメッセージのデフォルトの出力先装置番号は 6 番と
なります.
28
5. ドキュメント
ライブラリマニュアルは本製品の一部として提供されます.
また 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 ファイルへリンクします.
29
また 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 – Intel Fortran (FLW6I23DCL)|
Users' Note
30
6. サポート
(a) ご質問等
保守サービスにご加入いただいているお客様は,電子メール(または電話|FAX)にて
「日本 NAG ヘルプデスク」までお問い合わせください.
その際,ご利用の製品の製品コード(FLW6I23DCL)および保守 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/
(台湾)
31
7. ユーザフィードバック
NAG ではユーザ様からのフィードバックをバージョンアップなどに活かして行きたいと
考えています.フィードバックにご協力いただける場合は,下記のコンタクト先にご連
絡ください.
コンタクト先情報
日本ニューメリカルアルゴリズムズグループ株式会社
(略称:日本 NAG)
〒104-0032
東京都中央区八丁堀 4-9-9 八丁堀フロンティアビル 2F
email: [email protected]
Tel:
03-5542-6311
Fax:
03-5542-6312
日本ニューメリカルアルゴリズムズグループ株式会社から提供されるサービス内容は,
(お問い合わせ先など)日本国内ユーザ様向けに独自のものとなっています.
32