ユーザーノート

NAG Fortran Library, Mark 22
FLW6I22DCL - License Managed
Windows XP/Vista/7 x64, Intel Visual Fortran
ユーザ ノート
内容
1. イントロダクション
2. リリース後の最新情報
3. 一般情報
3.1. ライブラリへのアクセス
3.1.1. コマンドウィンドウからの場合
3.1.2. Microsoft Visual Studio .NET からの場合
3.1.3. アクセスチェック
3.2. 引用仕様宣言(インターフェースブロック)
3.3. Example プログラム
3.4. 強調斜体文字の解釈
3.5. NAG ルーチンからの出力
4. ルーチン毎の情報
5. ドキュメント
6. サポート
7. ユーザフィードバック
追記 – コンタクト先情報
1. イントロダクション
本ドキュメントは、本 NAG Fortran Library ユーザの為の最低限必要な情報を含んでい
ます。本ドキュメントは NAG Mark 22 Library Manual(ライブラリマニュアル)に含
まれない製品毎の情報が含まれます。マニュアルに「ユーザノート参照」等と書かれて
いる場合は本ドキュメントを参照してください。
本ライブラリのご使用の前に、必ず以下の情報をお読みください。
(a) 基本的なイントロダクション
(Essential Introduction)
(b) チャプター毎のイントロダクション
(Chapter Introduction)
(c) ルーチン毎のドキュメント
(Routine Document)
本ライブラリは、マルチスレッドに対応しています。
2. リリース後の最新情報
本製品の稼働環境や利用方法に関する最新の情報は、以下の URL をご確認ください。
http://www.nag.co.uk/doc/inun/fl22/w6idcl/postrelease.html
3. 一般情報
パフォーマンス面を考えますと Math Kernel Library(MKL)を利用するバージョンの
NAG Fortran Library(nag_mkl_MT.lib, nag_mkl_MD.lib, FLW6I22DC_mkl.lib/
FLW6I22DC_mkl.dll)のご利用を推奨します。もし、本製品の開発/テストに使用され
た MKL とは異なるバージョンの MKL と共にライブラリを利用された場合に問題が発生
する場合は、本製品で提供される MKL と共に上記ライブラリを利用するか、もしくは、
MKL を利用しないバージョンの NAG Fortran Library(nag_nag_MT.lib,
nag_nag_MD.lib, FLW6I22DC_nag.lib/FLW6I22DC_nag.dll)をご利用ください。
本製品は、インストールノートのセクション 2.1 に記載されているコンパイラでのご利用
に適しています。本製品には NAG Fortran Library の DLL 版が含まれますが、これら
の DLL は Visual Basic や Excel などの他のパッケージや環境からの利用は想定されてい
ません。詳細に関しましては、セクション 2 に記載されているリリース後の最新情報を
ご確認ください。
1
3.1. ライブラリへのアクセス
本セクションでは、デフォルトのフォルダ
c:¥Program Files¥NAG¥FL22¥flw6i22dcl
にライブラリがインストールされていることが前提となります。もし、このフォルダが
存在しない場合は、システム管理者(ライブラリをインストールした方)にお尋ねくだ
さい。以降の説明では、このフォルダを install dir と表現します。
また、
「スタート」メニューの
すべてのプログラム|NAG|FL22|NAG Fortran Library –
Intel Fortran (FLW6I22DCL)|FLW6I22DCL Command Prompt
にライブラリコマンドプロンプトのショートカットが置かれていることが前提となりま
す。もし、このショートカットが存在しない場合は、システム管理者(ライブラリをイ
ンストールした方)にお尋ねください。
NAG ライブラリの DLL 版をご利用になる場合には、
実行時に NAG DLL(FLW6I22DC_mkl.dll または FLW6I22DC_nag.dll)にアクセスで
きるように install dir¥bin フォルダにパスを通してください。また MKL を利用す
るバージョンをご利用になる場合には install dir¥MKL_em64t_10.1¥bin フォルダ
にもパスを通してください。(このフォルダは install dir¥bin フォルダよりも後ろ
に設定してください。これは、ベンダーバージョンとの問題を避けるために、
BLAS/LAPACK ルーチンのいくつかは NAG バージョンのものが使用されるためです。
)
NAG ライブラリの DLL 版へのアクセスをチェックする為には、以下の「スタート」メ
ニューのショートカットから診断プログラム NAG_Fortran_DLL_info.exe を実行し
てください。
すべてのプログラム|NAG|FL22|NAG Fortran Library –
Intel Fortran (FLW6I22DCL)|Check NAG DLL Accessibility (FLW6I22DCL)
この診断プログラムの詳細は、
インストールノートのセクション 4.2.3 をご参照ください。
2
3.1.1. コマンドウィンドウからの場合
本ライブラリをコマンドウィンドウからご利用いただく場合には、環境変数の設定が必
要です。以下の「スタート」メニューのショートカットがご利用いただけます。
すべてのプログラム|NAG|FL22|NAG Fortran Library –
Intel Fortran (FLW6I22DCL)|FLW6I22DCL Command Prompt
このショートカットは、NAG ライブラリおよび共に提供される MKL に対して環境変数
INCLUDE, LIB, PATH を正しく設定した上でコマンドプロンプトを開きます。
このショートカットを利用しない場合には、環境変数の設定を手動で行う必要がありま
す。環境変数の設定は、バッチファイル envvars.bat を用いて行うことができます。
このバッチファイルのデフォルトの格納位置を以下に示します。
c:¥Program Files¥NAG¥FL22¥flw6i22dcl¥batch¥envvars.bat
その後、コンパイル/リンクは、以下に示すコマンドで行ってください。
(driver.f がユーザプログラムです。
)
ifort /MT driver.f nag_mkl_MT.lib user32.lib libguide.lib
mkl_intel_lp64.lib mkl_intel_thread.lib mkl_core.lib
ifort /MT driver.f nag_nag_MT.lib user32.lib
ifort /MD driver.f nag_mkl_MD.lib user32.lib libguide40.lib
mkl_intel_lp64_dll.lib mkl_intel_thread_dll.lib mkl_core_dll.lib
ifort /MD driver.f nag_nag_MD.lib user32.lib
ifort /MD driver.f FLW6I22DC_mkl.lib libguide40.lib
mkl_intel_lp64_dll.lib mkl_intel_thread_dll.lib mkl_core_dll.lib
ifort /MD driver.f FLW6I22DC_nag.lib
3
注意:
上記のいくつかのコマンドは2行に分かれていますが、これは本ドキュメントの横幅の
都合上であり、実際は1行でコマンドを打ってください。
また、ライブラリの順番は重要です。これは、本製品では MKL の一部のルーチンの使用
が推奨されない為です。
(セクション 4 参照)
もし、Microsoft Visual Studio 2008 でご利用の場合は、上記のコマンドラインの最後に
/link /nodefaultlib:"bufferoverflowu.lib" を加える必要があります。もし、
ご利用のプロジェクトがライブラリ bufferoverflowu.lib を必要とする場合は、その
ライブラリを含む Windows プラットフォーム SDK を以下の URL からダウンロードす
ることができます。
http://www.microsoft.com/downloads/details.aspx?FamilyID=0baf2b35-c656-4969-ace
8-e4c0c0716adb&displaylang=en
最初の二つコマンドは/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 ランタイム
ライブラリ)とのリンクを指定するために必要となります。
最後の二つのコマンドは/MD オプションでコンパイルされた NAG DLL インポートライ
ブラリを利用する場合です。
5番目のコマンドは NAG BLAS/LAPACK を含まない(MKL DLL BLAS/LAPACK
を利用する)NAG DLL(FLW6I22DC_mkl.lib)を利用する場合です。
4
最後のコマンドは NAG BLAS/LAPACK を含む NAG DLL(FLW6I22DC_nag.lib)
を利用する場合です。
/MD オプションは、正しいランタイムライブラリ(マルチスレッド対応 DLL ランタイム
ライブラリ)とのリンクを指定するために必要となります。
注意:
/MT オプションは/libs:static /threads という指定に等価です。
/MD オプションは/libs:dll /threads という指定に等価です。
マルチスレッドでご利用の場合には、/automatic オプションが必要です。
例)
ifort /MT /automatic driver.f nag_mkl_MT.lib user32.lib libguide.lib
mkl_intel_lp64.lib mkl_intel_thread.lib mkl_core.lib
複数のライブラリを一つのライブラリに結合することにより、コマンドを単純化するこ
とができます。
例)
lib /out:my_nag_mkl_MT.lib nag_mkl_MT.lib user32.lib libguide.lib
mkl_intel_lp64.lib mkl_intel_thread.lib mkl_core.lib
(上述しましたが、ライブラリの順番は重要です。これは、本製品では MKL の一部のル
ーチンの使用が推奨されない為です。
(セクション 4 参照)
)
その後、上記の最初のコマンドは以下のコマンドに置き換えることができます。
ifort driver.f my_nag_mkl_MT.lib
注意:
コマンドウィンドウでご利用の場合 Intel Visual Fortran コンパイラの環境変数が設定
されている必要があります。詳細は、コンパイラのユーザガイドをご参照ください。
5
3.1.2. Microsoft Visual Studio .NET からの場合
ここでの説明は Visual Studio 2005 を前提としています。他のバージョンでは詳細が異
なるかもしれません。
Visual Studio では Intel Fortran コンパイラと共に利用するディレクトリの設定を行い、
その後、このコンパイラを使うプロジェクトでこれらのディレクトリ設定を有効にする
ことができます。
1.
メニューから「ツール|オプション」を選択してください。
2.
「オプション」ウィンドウで Intel(R) Fortran(または Intel(R) Visusal Fortran)
をクリックし Compilers を選択してください。
(Visual Studio のバージョンによっ
ては Intel コンパイラのオプションを見るために Show all settings をクリックする
必要があるかもしれません。)対応プラットフォーム(ドロップダウンリスト)
で’x64’が選択されていることを確かめてください。
3.
Libraries パネルの右端にある’...’ボタンをクリックしてください。
4.
Set Directory List ウィンドウで NAG ライブラリ(スタティックまたは DLL インポ
ートライブラリ)のパスを追加してください。デフォルトでは、
"c:¥Program Files¥NAG¥FL22¥flw6i22dcl¥lib"
5.
MKL(スタティックまたは DLL インポートライブラリ)を利用する場合には NAG
ライブラリのパスの後に MKL のパスを追加してください。デフォルトでは、
"c:¥Program Files¥NAG¥FL22¥flw6i22dcl¥MKL_em64t_10.1¥lib"
6.
Set Directory List ウィンドウで OK をクリックしてください。
7.
Includes パネルの右端にある’...’ボタンをクリックしてください。
8.
Set Directory List ウィンドウで NAG インターフェースブロックのパスを追加して
ください。デフォルトでは、
"c:¥Program Files¥NAG¥FL22¥flw6i22dcl¥nag_interface_blocks"
9.
Set Directory List ウィンドウで OK をクリックしてください。
10. 更に「オプション」ウィンドウで OK をクリックしてください。
上記の設定により Intel Fortran プロジェクトで NAG ライブラリおよび NAG インター
フェースブロックをフルパスで指定する必要が無くなります。
インターフェースブロックのご利用には USE 文を使います。詳細は、セクション 3.2 を
ご参照ください。
6
上記の設定はすべての Intel Fortran プロジェクトに適用されます。
以下の設定は、個々の Intel Fortran プロジェクトに対して行う必要があります。
NAG ライブラリは、最適化済みのものが提供されます。そのため Debug モードで C ラ
ンタイムライブラリに関する警告メッセージが表示されますが、通常これは無視して構
いません。
NAG ライブラリの各プロジェクトへの追加は、以下の方法で行うことができます。
まず、プロジェクトのプロパティを開いてください。(ソリューションエクスプローラで
グループプロジェクト(一行目)が選択されていないことを確認して、メニューから「プ
ロジェクト|プロパティ」を選択するか、もしくは、ソリューションエクスプローラで
特定のプロジェクトを右クリックして「プロパティ」を選択します。
)
プロパティの左側のパネルで「リンカ|入力」を選択すると、右側のパネルに項目「追
加の依存ファイル」が出現します。例えば nag_mkl_MT.lib と MKL を利用する場合、
この「追加の依存ファイル」に以下の6個のライブラリファイルを追加します。
nag_mkl_MT.lib user32.lib libguide.lib mkl_intel_lp64.lib
mkl_intel_thread.lib mkl_core.lib
各々のファイル名はスペースで区切られていること、また nag_mkl_MT.lib が先頭に在
ることに注意してください。最後に OK ボタンをクリックしてプロパティを閉じます。
また、MKL を利用しない NAG スタティックライブラリ nag_nag_MT.lib を利用する
場合は、この「追加の依存ファイル」に以下の2個のライブラリファイルを追加します。
nag_nag_MT.lib user32.lib
その他の NAG ライブラリを利用する場合も同様に、この「追加の依存ファイル」に適切
なライブラリファイル(セクション 3.1.1 のコマンド参照)を追加します。
プロジェクトをコンパイルする前に、正しいランタイムライブラリの指定が必要です。
プロパティを開いていただき、
左側のパネルで Fortran をクリックした後に Libraries
を選択します。右側のパネルに項目 Runtime Library が出現します。nag_nag_MT.lib
または nag_mkl_MT.lib をご利用の場合は Multithreaded を選択し、それ以外の
7
NAG ライブラリをご利用の場合は Multithreaded DLL を選択します。最後に OK ボ
タンをクリックしてプロパティを閉じます。
もし、Microsoft Visual Studio 2008 以上のバージョンでご利用の場合は、ライブラリ
bufferoverflowu.lib を無視するようにプロジェクトを設定する必要があります。プ
ロジェクトのプロパティを開いていただき、左側のパネルで「リンカ|入力」を選択す
ると、右側のパネルに項目「特定のライブラリの無視」が出現します。ここに、ライブ
ラリ bufferoverflowu.lib を追加します。もし、ご利用のプロジェクトがライブラリ
bufferoverflowu.lib を必要とする場合は、そのライブラリを含む Windows プラッ
トフォーム SDK を以下の URL からダウンロードすることができます。
http://www.microsoft.com/downloads/details.aspx?FamilyID=0baf2b35-c656-4969-ace
8-e4c0c0716adb&displaylang=en
マルチスレッドアプリケーションでご利用の場合には、コンパイラオプション
/automatic(もしくは /Qauto)を指定して、全てのローカル変数がスタック領域で
メモリが割り当てられるようにします。このオプションを設定するには、プロパティを
開いていただき、左側のパネルで Fortran をクリックした後に Data を選択します。右
側のパネルの項目 Local Variable Storage をクリックし、ドロップダウンリストか
ら Loacal Variables AUTOMATIC を選択します。変更を有効にするために OK ボタ
ンをクリックしてプロパティを閉じます。
以上をまとめますと、追加の依存ファイル、ランタイムライブラリ、環境変数 PATH の
設定は、以下の通り一貫している必要があります。

追加の依存ファイルに、
nag_mkl_MT.lib user32.lib libguide.lib mkl_intel_lp64.lib
mkl_intel_thread.lib mkl_core.lib
を指定した場合には、ランタイムライブラリは Multithreaded である必要があり
ます。

追加の依存ファイルに
nag_nag_MT.lib user32.lib
を指定した場合には、ランタイムライブラリは Multithreaded である必要があり
ます。
8

追加の依存ファイルに
nag_mkl_MD.lib user32.lib libguide40.lib mkl_intel_lp64_dll.lib
mkl_intel_thread_dll.lib mkl_core_dll.lib
を指定した場合には、ランタイムライブラリは Multithreaded DLL である必要が
あります。また install dir¥MKL_em64t_10.1¥bin がパスに設定されている必
要があります。

追加の依存ファイルに
nag_nag_MD.lib user32.lib
を指定した場合には、ランタイムライブラリは Multithreaded DLL である必要が
あります。

追加の依存ファイルに
FLW6I22DC_mkl.lib libguide40.lib mkl_intel_lp64_dll.lib
mkl_intel_thread_dll.lib mkl_core_dll.lib
を指定した場合には、ランタイムライブラリは Multithreaded DLL である必要が
あります。また install dir¥bin および install dir¥MKL_em64t_10.1¥bin
がパスに設定されている必要があります。

追加の依存ファイルに
FLW6I22DC_nag.lib
を指定した場合には、ランタイムライブラリは Multithreaded DLL である必要が
あります。また install dir¥bin がパスに設定されている必要があります。
プログラムの実行が、標準入力(標準出力)からの入力(出力)リダイレクションを伴
わない場合には Microsoft Development Environment から実行可能ですが、リダイレク
ションを伴う場合には、コマンドプロンプトウィンドウからの実行が推奨されます。
3.1.3. アクセスチェック
NAG ライブラリの DLL 版へのアクセスをチェックする為には、以下の「スタート」メ
ニューのショートカットから診断プログラム NAG_Fortran_DLL_info.exe を実行し
てください。
すべてのプログラム|NAG|FL22|NAG Fortran Library –
Intel Fortran (FLW6I22DCL)|Check NAG DLL Accessibility (FLW6I22DCL)
この診断プログラムの詳細は、
インストールノートのセクション 4.2.3 をご参照ください。
9
3.2. 引用仕様宣言(インターフェースブロック)
NAG Fortran Library インターフェースブロックは、ライブラリルーチンの型および引
数を定義しますが、Fortran プログラムから NAG Fortran Library を呼び出す際に必ず
必要という性質のものではありません。
(これにより NAG Fortran Library が正しく呼
び出されているかどうかのチェックを Fortran コンパイラに任せる事ができます。)具体
的には、コンパイラが以下のチェックを行うことを可能とします。
(a) サブルーチン呼び出しの整合性
(b) 関数宣言の際の型
(c) 引数の数
(d) 引数の型
これらのインターフェースブロックは、自動生成プログラムが NAG Fortran Library の
ソースコードを解析することにより生成されているため、信頼性があります。
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)は、プリコンパイルされたモジュールとして提供されます。
モジュールを利用する場合は、コンパイル時にコンパイラオプション-I”dir”を用いて
これらのモジュールファイルの格納位置 install dir¥nag_interface_blocks を指
定してください。
10
ライブラリコマンドプロンプトを利用している場合やバッチファイル envvars.bat を
実行して環境変数を設定している場合は、環境変数 INCLUDE にこれらのモジュールファ
イルの格納位置が設定される為、コンパイル時にコンパイラオプション-I”dir”を指定
する必要はありません(セクション 3.1.1 に記載されているどのコマンドもそのままご利
用いただけます)
。
これらのモジュールを Fortran 77 のコードで利用する場合は、以下のような変更を加え
てください。

USE 文を追加し、コード内で呼んでいるルーチンが含まれるチャプターのモジュー
ルを指定する。BLAS/LAPACK ルーチンに対するインターフェースブロックは
nag_f77_f_chapter にあります。

NAG Fortran Library ルーチン(BLAS/LAPACK ルーチンを含む)に対する
EXTERNAL 文を全て削除する。(モジュール内で宣言されるため必要ない。
)

NAG Fortran Library 関数に対する型宣言を削除する。(モジュール内で宣言され
るため必要ない。
)
以上の変更は、全てのプログラム単位(メインプログラム、関数、サブルーチン)で行
う必要があります。
以下に例として、変更を加えた NAG ライブラリルーチン D01DAF の Example プログラ
ムを示します。アスタリスクで変更点をコメントとして示しています。
*
D01DAF Example Program Text
*
Mark 14 Revised. NAG Copyright 1989.
*****************************************************
* Add USE statements for relevant chapters
*
USE NAG_F77_D_CHAPTER, ONLY: D01DAF
*
*
*****************************************************
*
*
.. Parameters ..
INTEGER
NOUT
PARAMETER
(NOUT=6)
.. Local Scalars ..
DOUBLE PRECISION ABSACC, ANS, YA, YB
INTEGER
IFAIL, NPTS
11
*
.. External Functions ..
DOUBLE PRECISION FA, FB, PHI1, PHI2A, PHI2B
EXTERNAL
*
FA, FB, PHI1, PHI2A, PHI2B
.. External Subroutines ..
******************************************************
* EXTERNAL declarations need to be removed.
*
EXTERNAL
*
D01DAF
*
*
******************************************************
*
.. Executable Statements ..
WRITE (NOUT,*) 'D01DAF Example Program Results'
YA = 0.0D0
YB = 1.0D0
ABSACC = 1.0D-6
WRITE (NOUT,*)
IFAIL = 1
*
CALL D01DAF(YA,YB,PHI1,PHI2A,FA,ABSACC,ANS,NPTS,IFAIL)
*
IF (IFAIL.LT.0) THEN
WRITE (NOUT,99998) ' ** D01DAF returned with IFAIL = ', IFAIL
ELSE
*
WRITE (NOUT,*) 'First formulation'
WRITE (NOUT,99999) 'Integral =', ANS
WRITE (NOUT,99998) 'Number of function evaluations =', NPTS
IF (IFAIL.GT.0) WRITE (NOUT,99998) 'IFAIL = ', IFAIL
WRITE (NOUT,*)
WRITE (NOUT,*) 'Second formulation'
IFAIL = 1
*
CALL D01DAF(YA,YB,PHI1,PHI2B,FB,ABSACC,ANS,NPTS,IFAIL)
*
WRITE (NOUT,99999) 'Integral =', ANS
WRITE (NOUT,99998) 'Number of function evaluations =', NPTS
IF (IFAIL.GT.0) WRITE (NOUT,99998) 'IFAIL = ', IFAIL
12
END IF
*
99999 FORMAT (1X,A,F9.4)
99998 FORMAT (1X,A,I5)
END
*
DOUBLE PRECISION FUNCTION PHI1(Y)
*
.. Scalar Arguments ..
DOUBLE PRECISION Y
*
.. Executable Statements ..
PHI1 = 0.0D0
RETURN
END
*
DOUBLE PRECISION FUNCTION PHI2A(Y)
*
.. Scalar Arguments ..
DOUBLE PRECISION Y
*
.. Intrinsic Functions ..
INTRINSIC
*
SQRT
.. Executable Statements ..
PHI2A = 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 PHI2B(Y)
*****************************************************
* Add USE statements for relevant chapters
USE NAG_F77_X_CHAPTER, ONLY: X01AAF
13
*
*
*
*****************************************************
*
.. Scalar Arguments ..
DOUBLE PRECISION Y
*
.. External Functions ..
******************************************************
* Function Type declarations need to be removed.
*
*
DOUBLE PRECISION X01AAF
*
*
******************************************************
******************************************************
* EXTERNAL declarations need to be removed.
*
EXTERNAL
*
X01AAF
*
*
******************************************************
*
.. Executable Statements ..
PHI2B = 0.5D0*X01AAF(0.0D0)
RETURN
END
*
DOUBLE PRECISION FUNCTION FB(X,Y)
*
.. Scalar Arguments ..
DOUBLE PRECISION X, Y
*
.. Intrinsic Functions ..
INTRINSIC
*
COS, SIN
.. Executable Statements ..
FB = Y*Y*(COS(X)+SIN(X))
RETURN
END
14
3.3. Example プログラム
本製品で提供されている Example 結果は、インストールノートのセクション 2.2 に記述
されている環境で生成されています。Example プログラムの実行結果は、異なる環境下
(例えば、異なる Fortran コンパイラ、異なるコンパイラライブラリ、異なる BLAS ま
たは LAPACK など)で若干異なる場合があります。そのような違いが顕著な計算結果と
しては、固有ベクトル(スカラー(多くの場合-1)倍の違い)、反復回数や関数評価、残
差(その他マシン精度と同じくらい小さい量)などが挙げられます。
Example プログラムは、本製品が想定する稼働環境に適した状態で提供されます。その
ため、ライブラリマニュアルに記載/提供されている Example プログラムに比べて、そ
の内容が若干異なる場合があります。
Example プログラムは、以下のバッチファイルを用いて簡単に利用することができます。

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 インポートライブラリ FLW6I22DC_mkl.lib をリンクします。実行は
FLW6I22DC_mkl.dll と提供される MKL を利用します。

nag_example_DLL.bat
NAG DLL インポートライブラリ FLW6I22DC_nag.lib をリンクします。実行は
FLW6I22DC_nag.dll を利用します。
nag_mkl_MT.lib と nag_nag_MT.lib は、マルチスレッド対応スタティックランタイ
ムライブラリを利用します。そして、
nag_mkl_MD.lib, nag_nag_MD.lib, FLW6I22DC_mkl.lib,FLW6I22DC_nag.lib
は、マルチスレッド対応 DLL ランタイムライブラリを利用します。
15
これらのバッチファイルは、環境変数 NAG_FLW6I22DCL を必要とします。
インストーラは、
「スタート」メニューに以下のショートカットを作成します。
すべてのプログラム|NAG|FL22|NAG Fortran Library –
Intel Fortran (FLW6I22DCL)|FLW6I22DCL Command Prompt
このショートカットは、必要な環境変数(NAG_FLW6I22DCL を含む)を設定した上でコ
マンドプロンプトを開きます。
このショートカットを利用しない場合には、環境変数の設定を手動で行う必要がありま
す。環境変数の設定は、バッチファイル envvars.bat を用いて行うことができます。
このバッチファイルのデフォルトの格納位置を以下に示します。
c:¥Program Files¥NAG¥FL22¥flw6i22dcl¥batch¥envvars.bat
各々のバッチファイル nag_example*は Example プログラムおよび入力データのコピ
ーを作り、コンパイル/リンク/実行を行います。
利用したい Example プログラムを引数に指定します。
例えば、以下のように打ち込んでください。
例)
nag_example_mkl_MT e04ucf
この例では e04ucf ルーチンの Example プログラム e04ucfe.f および入力データファ
イル e04ucfe.d をカレントディレクトリにコピーし、コンパイル/リンク/実行を行い、
結果 e04ucfe.r を生成します。
提供されている Example 結果は、NAG スタティックライブラリ nag_mkl_MD.lib
(MKL BLAS/LAPACK ルーチンを使用)を用いて算出されています。MKL を利用し
ない NAG ライブラリ(NAG BLAS/LAPACK ルーチンを使用)を用いた場合は、結果
が若干異なるかもしれません。
16
3.4. 強調斜体文字の解釈
ライブラリのすべての実装に対応するために、ライブラリマニュアルでは実装によって
異なる項目を区別する意味で強調斜体文字(太字イタリック体)を使用しています。
本製品は倍精度版であるため、ライブラリマニュアルにおいて強調斜体文字で示される
以下の用語はここに示す用語に読み替えてください。
real
- REAL
double precision
- DOUBLE PRECISION
complex
- COMPLEX
complex*16
- COMPLEX*16 (or equivalent)
basic precision
- DOUBLE PRECISION
additional precision
- quadruple precision
reduced precision
- REAL
この種の表現でもう一つ重要なのが machine precision という表現で、これは
double precision 浮動小数が計算機内で格納されている相対精度を意味します。
例えば 10 進で約 16 桁の実装であれば、machine precision は 1.0D-16 に近い値を
持ちます。
machine precision の正確な値はルーチン X02AJF を使って確認できます。チャプタ
ーX02 のその他のルーチンを使うと、オーバーフロー用の閾値や表現可能な最大整数と
いった実装異存の定数値を求めることができます。詳細については X02 Chapter
Intoroduction をご参照ください。
brock size という表現はチャプターF07 と F08 の中でのみ使用されています。それは
これらのチャプターにおけるブロックアルゴリズムによって用いられているブロックサ
イズを表すものです。用意すべき作業エリアの量に影響が及ぶ場合にのみ、この値に留
意する必要があります。関係するルーチンドキュメントとチャプターイントロダクショ
ンに記述されているパラメータ WORK と LWORK についてご参照ください。
17
3.5. NAG ルーチンからの出力
いくつかのルーチンは、エラーメッセージや提案(advisory)メッセージを出力します。
出力装置番号は、X04AAF(エラーメッセージの場合)または X04ABF(提案メッセー
ジの場合)で再設定する事が可能です。デフォルト値はセクション 4 をご参照ください。
これらのメッセージの最大レコード長(コントロール文字等を含む)は特に指定がない
場合は 80 文字です。
18
4. ルーチン毎の情報
以下にチャプター毎のルーチン情報を示します。
(a) D06
このチャプターのいくつかのルーチンは、スタックオーバーフロー例外を避けるために
スタックサイズの変更が必要な場合があります。スタックサイズを変更する一つの方法
として以下の例のように/stack オプションが利用可能です。
ifort /MT driver.f nag_nag_MT.lib user32.lib /link /stack:128000000
これは、指定したスタックサイズをリンカに渡します。
(b) 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, FLW6I22DC_mkl.dll では、ベンダー提供の
BLAS/LAPACK ルーチンでの問題を回避する為に、以下の BLAS/LAPACK ルーチン
に関しては NAG 提供のものが含まれています(呼び出されます)。
DGGGLM DGGLSE ZAXPY
ZGELS
ZGGGLM
ZGGLSE ZGELQF ZGEQRF ZHETRD ZTGSYL
(c) G02
この章で出てくる ACC の値(マシン依存の定数)は 1.0D-13 です。
19
(d) P01
エラー(hard failure)の際、P01ABF はエラーメッセージを X04AAF で指定される装
置番号へ出力し、停止します。
(e) 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.70D+2
IFAIL = 2 if X < -1.70D+2
IFAIL = 3 if abs(X) < 2.23D-308
S14ABF IFAIL = 2 if X > 2.55D+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.0D+16
20
S17ADF IFAIL = 1 if X > 1.0D+16
IFAIL = 3 if 0.0D+00 < X <= 2.23D-308
S17AEF IFAIL = 1 if abs(X) > 1.0D+16
S17AFF IFAIL = 1 if abs(X) > 1.0D+16
S17AGF IFAIL = 1 if X > 1.038D+2
IFAIL = 2 if X < -5.7D+10
S17AHF IFAIL = 1 if X > 1.041D+2
IFAIL = 2 if X < -5.7D+10
S17AJF IFAIL = 1 if X > 1.041D+2
IFAIL = 2 if X < -1.9D+9
S17AKF IFAIL = 1 if X > 1.041D+2
IFAIL = 2 if X < -1.9D+9
S17DCF IFAIL = 2 if abs (Z) < 3.92223D-305
IFAIL = 4 if abs (Z) or FNU+N-1 > 3.27679D+4
IFAIL = 5 if abs (Z) or FNU+N-1 > 1.07374D+9
S17DEF IFAIL = 2 if imag (Z) > 7.00921D+2
IFAIL = 3 if abs (Z) or FNU+N-1 > 3.27679D+4
IFAIL = 4 if abs (Z) or FNU+N-1 > 1.07374D+9
S17DGF IFAIL = 3 if abs (Z) > 1.02399D+3
IFAIL = 4 if abs (Z) > 1.04857D+6
S17DHF IFAIL = 3 if abs (Z) > 1.02399D+3
IFAIL = 4 if abs (Z) > 1.04857D+6
S17DLF IFAIL = 2 if abs (Z) < 3.92223D-305
IFAIL = 4 if abs (Z) or FNU+N-1 > 3.27679D+4
IFAIL = 5 if abs (Z) or FNU+N-1 > 1.07374D+9
S18ADF IFAIL = 2 if 0.0D+00 < X <= 2.23D-308
S18AEF IFAIL = 1 if abs(X) > 7.116D+2
S18AFF IFAIL = 1 if abs(X) > 7.116D+2
S18DCF IFAIL = 2 if abs (Z) < 3.92223D-305
IFAIL = 4 if abs (Z) or FNU+N-1 > 3.27679D+4
IFAIL = 5 if abs (Z) or FNU+N-1 > 1.07374D+9
S18DEF IFAIL = 2 if real (Z) > 7.00921D+2
IFAIL = 3 if abs (Z) or FNU+N-1 > 3.27679D+4
IFAIL = 4 if abs (Z) or FNU+N-1 > 1.07374D+9
21
S19AAF IFAIL = 1 if abs(x) >= 5.04818E+1
S19ABF IFAIL = 1 if abs(x) >= 5.04818E+1
S19ACF IFAIL = 1 if X > 9.9726D+2
S19ADF IFAIL = 1 if X > 9.9726D+2
S21BCF IFAIL = 3 if an argument < 1.583D-205
IFAIL = 4 if an argument >= 3.765D+202
S21BDF IFAIL = 3 if an argument < 2.813D-103
IFAIL = 4 if an argument >= 1.407D+102
(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
22
その他コンピュータ環境のパラメータ
X02AHF = 1.42724769270596E+45
X02BBF = 2147483647
X02BEF = 15
X02DAF = .TRUE.
(h) X04
エラーメッセージおよび提案(advisory)メッセージのデフォルトの出力先装置番号は 6
番となります。
23
5. ドキュメント
ライブラリマニュアルのインストールは、ライブラリのインストールとは独立しており、
必須ではありません(製品 CD から直接参照することもできます)。また、ライブラリマ
ニュアルの最新版は NAG ウェブサイトから閲覧/ダウンロードすることができます。
http://www.nag.co.uk/numeric/FL/FLdocumentation.asp
ライブラリマニュアルは、以下の形式で提供されます。

XHTML + MathML – XHTML および MathML によって閲覧可能なマニュアル(各
ドキュメントの PDF 版へのリンクを含む)

PDF – PDF のしおり(または HTML 目次ファイル)によって閲覧可能な PDF マニ
ュアル
メインの目次ファイルが以下の形式で提供されます。
nagdoc_fl22/xhtml/FRONTMATTER/manconts.xml
nagdoc_fl22/pdf/FRONTMATTER/manconts.pdf
nagdoc_fl22/html/FRONTMATTER/manconts.html
(ライブラリマニュアルをインストールした場合)これらの目次ファイルには、以下の
「スタート」メニューのショートカットからアクセスできます。
すべてのプログラム|NAG|FL22|NAG Fortran Library Manual (XHTML + MathML)
すべてのプログラム|NAG|FL22|NAG Fortran Library Manual (PDF)
すべてのプログラム|NAG|FL22|NAG Fortran Library Manual (PDF + HTML Index)
各形式の閲覧方法/操作方法については Online Documentation をご参照ください。
注意:
Internet Explorer をご利用の場合、XHTML/MathML 版のライブラリマニュアルから
Example ソース/データ/結果ファイルおよび PDF ファイルへのリンクを開く際、それ
らのリンクはローカルファイルではなく NAG ウェブサイトへ誘導されます。これは、ブ
ラウザのセキュリティ制限の為に、これらのページの閲覧が行えないためです。他のブ
ラウザをご利用の場合は、ローカルの Example および PDF ファイルへリンクします。
24
加えて、以下のドキュメントが提供されます。

in.html – インストールノート(英語版)

un.html – ユーザノート(英語版)
ユーザノートには、以下の「スタート」メニューのショートカットからアクセスできま
す。
すべてのプログラム|NAG|FL22|NAG Fortran Library –
Intel Fortran (FLW6I22DCL)|Users' Note
25
6. サポート
(a) ご質問等
保守サービスにご加入いただいているお客様は、電子メール(または電話|FAX)にて
「日本 NAG ヘルプデスク」までお問い合わせください。
その際、製品コード(FLW6I22DCL 等)および保守 ID を御明記いただきますようお願い
致します。受付は平日 9:00~12:00、13:00~17:00 となります。
日本 NAG ヘルプデスク
Email: [email protected]
Tel:
03-5542-6311
Fax:
03-5542-6312
(b) NAG のウェブサイト
NAG のウェブサイトでは NAG 製品およびサービス情報など定期的に更新を行っており
ます。URL は以下のとおりです。
http://www.nag-j.co.jp/
(日本)
http://www.nag.co.uk/
(英国本社)
http://www.nag.com/
(米国)
26
7. ユーザフィードバック
NAG ではユーザ様よりフィードバックをバージョンアップなどに活かして行きたいと考
えています。フィードバックに御協力いただける場合は、以下のコンタクト先に記述さ
れている連絡先にご連絡ください。
コンタクト先情報
日本ニューメリカルアルゴリズムズグループ株式会社
(略称:日本 NAG)
〒104-0032
東京都中央区八丁堀 4-9-9 八丁堀フロンティアビル 2F
Email: [email protected]
Tel:
03-5542-6311
Fax:
03-5542-6312
※ 日本ニューメリカルアルゴリズムグループ株式会社より提供されるサービス内容は、
(お問い合わせ先等)日本国内ユーザ様向けに独自のものとなっております。
27