nag fortran library, mark 20 · 2019-10-17 · nag fortran library for win32 applications, mark 22...

41
NAG Fortran Library for Win32 Applications, Mark 22 FLDLL224ML - License Managed Windows XP/Vista/7 DLL, Intel Visual Fortran ユーザ ノート 内容 1. イントロダクション 2. リリース後の情報 3. 制限事項 4. 一般情報 4.1. ライブラリへのアクセス 4.1.0. Fortran Builder 5.2 からの利用 4.1.1. Intel Fortran からの利用 4.1.1.1. コマンドウィンドウからの利用 4.1.1.2. MS Visual Studio からの利用 4.1.2. Compaq Visual Fotran からの利用 4.1.3. NAG Fortran Compiler (NAGWare f95) からの利用 4.1.4. Absoft Pro Fortran からの利用 4.1.5. Silverfrost (Salford) FTN95 からの利用 4.1.6. PGI Fortran からの利用 4.1.7. Lahey/Fujitsu Fortran からの利用 4.1.8. GNU gfortran からの利用 4.1.9. Microsoft Visual C++ / Visual Studio からの利用 4.1.10. Intel C/C++からの利用 4.1.11. Borland C/C++からの利用 4.1.12. GNU gcc / g++からの利用 4.1.13. Microsoft Visual Basic for Applications / Excel からの利用 4.1.14. Microsoft Visual Basic 6 からの利用 4.1.15. Microsoft Visual Basic .NET からの利用 4.1.16. C#からの利用 4.1.17. Java からの利用

Upload: others

Post on 27-Apr-2020

7 views

Category:

Documents


0 download

TRANSCRIPT

NAG Fortran Library for Win32 Applications, Mark 22

FLDLL224ML - License Managed

Windows XP/Vista/7 DLL, Intel Visual Fortran

ユーザ ノート

内容

1. イントロダクション

2. リリース後の情報

3. 制限事項

4. 一般情報

4.1. ライブラリへのアクセス

4.1.0. Fortran Builder 5.2 からの利用

4.1.1. Intel Fortran からの利用

4.1.1.1. コマンドウィンドウからの利用

4.1.1.2. MS Visual Studio からの利用

4.1.2. Compaq Visual Fotran からの利用

4.1.3. NAG Fortran Compiler (NAGWare f95) からの利用

4.1.4. Absoft Pro Fortran からの利用

4.1.5. Silverfrost (Salford) FTN95 からの利用

4.1.6. PGI Fortran からの利用

4.1.7. Lahey/Fujitsu Fortran からの利用

4.1.8. GNU gfortran からの利用

4.1.9. Microsoft Visual C++ / Visual Studio からの利用

4.1.10. Intel C/C++からの利用

4.1.11. Borland C/C++からの利用

4.1.12. GNU gcc / g++からの利用

4.1.13. Microsoft Visual Basic for Applications / Excel からの利用

4.1.14. Microsoft Visual Basic 6 からの利用

4.1.15. Microsoft Visual Basic .NET からの利用

4.1.16. C#からの利用

4.1.17. Java からの利用

1

4.1.18. Python からの利用

4.1.19. R からの利用

4.1.20. Simfit NAG Library edition からの利用

4.1.21. その他の環境からの利用

4.2. アクセスチェック

4.3. インターフェースブロック

4.4. Example プログラム

4.5. 強調文字、斜体文字の解釈

4.6. NAG ルーチンからの出力

5. ルーチン毎の情報

6. ドキュメント

7. サポート

8. ユーザフィードバック

追記 - コンタクト先情報

2

1. イントロダクション

本ドキュメントは、NAG Fortran Library ユーザのために最低限必要な情報を含んでい

ます。本ドキュメントには、NAG Fortran Library Manual(ライブラリマニュアル)に

含まれない製品毎の情報が含まれます。マニュアルにユーザノート参照などと書かれて

いる場合は、このドキュメントを参照して下さい。

NAGライブラリのご使用の前に、先ず以下の情報をお読み頂きますようお願い致します。

(セクション 5 を参照)

(a) 基本的なイントロダクション (Essential Introduction)

(b) チャプター毎のイントロダクション (Chapter Introduction)

(c) ルーチン毎のドキュメント (Routine Document)

2. リリース後の最新情報

本インプリメンテーションに関しての最新プラットフォームへの対応状況や利用方法に

ついての最新情報は以下の URL に公開されています。

http://www.nag.co.uk/doc/inun/fl22/dll4ml/postrelease.html

3. 制限事項

NAG Fortran Library DLL の以前のバージョン(Mark 20 と 21)は Compaq Visual

Fortran の呼び出し規約が使われていました。(ifort /iface:cvf) これは引数が参照渡しに

なる事と文字列引数が文字及び文字長の組み合わせ(/iface:mixed_str_len_arg、これは

/iface:cvf を指定すると自動的に指定される)により渡される事を意味します。 プリコン

パイル済みの*mod ファイル(引用仕様宣言)は Intel Fortran 10.1 によりコンパイルさ

れているため、別バージョンのコンパイラもしくは他のコンパイラを利用する場合には

再コンパイルが必要です。

Intel コンパイラ以外の環境から本 DLL を利用する場合には2つの入出力が利用される

ことに注意して下さい。(本 DLL の入出力(Intel コンパイラが提供するもの)と利用す

る他社のコンパイラが提供するもの) これは主に E04 章及び H02 章のオプション指定

を行う部分で、他のプラットフォームでの利用と異なる方法が必要になることを意味し

ます。本インプリメンテーションでは2つの入出力に対応させた修正版の Example プロ

グラムが提供されています。

3

4. 一般情報

よ り 良 い パ フ ォ ー マ ン ス を 得 る た め に MKL 利 用 す る バ ー ジ ョ ン

(FLDLL224M_mkl.lib/FLDLL224M_mkl.dll)の NAG Fortran Library の利用が推奨

されています。 本インプリメンテーションで提供されている MKL 以外のバージョンで

問 題 が あ っ た 場 合 等 は MKL を 利 用 し な い バ ー ジ ョ ン

(FLDLL224M_nag.lib/FLDLL224M_nag.dll)の NAG Fortran Library をご利用下さ

い。

4.1. ライブラリへのアクセス

本セクションでは、ライブラリのご利用方法について説明します。なお、本セクション

では、デフォルトのフォルダ ” c:¥Program Files¥NAG¥FL22¥fldll224ml” にラ

イブラリがインストールされていることが前提となります。また、ライブラリコマンド

プロンプトのショートカットが ”スタート|すべてのプログラム|NAG|FL22” に存在す

る事が前提となっています。

NAG DLL が実行時にアクセスできるように”インストールフォルダ¥bin”が PATH に設

定されている必要があります。MKL を利用するバージョンの NAG ライブラリを利用す

る場合には更に”インストールフォルダ¥MKL_ia32_10.1¥bin”も設定されている必要が

あります。この際に”インストールフォルダ¥MKL_ia32_10.1¥bin”の指定が”インストー

ルフォルダ¥bin”の後に来るようにして下さい。

FLDLL224M_nag.dll と FLDLL224M_mkl.dll へのアクセスが、現在の環境設定で可

能であるかどうかを確認するために、スタートメニュー下に診断用のプログラム

NAG_Fortran_DLL_info.exeへのショートカットが利用できます。

スタート|すべてのプログラム|NAG|FL22| NAG Fortran Library for Win32

Applications (FLDLL224ML)|Check Accessibility

コマンドプロンプトからの環境変数の設定についてはセクション 4.1.1.1 をご参照下さい。

環境変数 PATH、LIB、及び INCLUDE はインストール時に設定されている場合もあり

ます。コントロールパネルから環境変数を設定する場合に以下の通りに行って下さい。

環境変数 PATH が以下を含むように設定して下さい。

c:¥Program Files¥NAG¥FL22¥fldll224ml¥batch;

4

c:¥Program Files¥NAG¥FL22¥fldll224ml¥bin;

c:¥Program Files¥NAG¥FL22¥fldll224ml¥MKL_ia32_10.1¥bin; 現在の設定

環境変数 LIB が以下を含むように設定して下さい。

c:¥Program Files¥NAG¥FL22¥fldll224ml¥lib;

c:¥Program Files¥NAG¥FL22¥fldll224ml¥MKL_ia32_10.1¥lib; 現在の設定

環境変数 INCLUDE が以下を含むように設定して下さい。

c:¥Program Files¥NAG¥FL22¥fldll224ml¥nag_interface_blocks; 現在の設定

※上記はデフォルトのインストール先にインストールを行った場合の設定です。インス

トール先がデフォルトでない場合は適切なフォルダで置き換えて下さい。

本インプリメンテーションの FLDLL224M_mkl.lib では MKL のシンボルもエクスポー

トされています。そのため明示的に MKL のインターフェース( libguide40.lib,

mkl_intel_s_dll.lib, mkl_intel_thread_dll.lib, mkl_core_dll.lib)を指定する必要はあり

ません。しかしながらもし指定を行う場合には NAG インポートライブラリ

(FLDLL224M_mkl.lib よりも後に指定を行うようにして下さい。

例)

FLDLL224M_mkl.lib libguide40.lib mkl_intel_s_dll.lib

mkl_intel_thread_dll.lib mkl_core_dll.lib

ここから後ろのセクションでは NAG Fortran DLL を他の環境から利用する方法を説明

します。以下の URL では NAG Fortran DLL 及び NAG C DLL を様々な環境から利用

するための情報が公開されています。

http://www.nag.co.uk/numeric/Num_DLLhelp.asp

5

4.1.0. Fortran Builder 5.2 からの利用

NAG Fortran Library (FLDLL224ML)を、面倒な設定なしに Fortran Builder 5.2

からご利用頂けます。

1. メニュー「ファイル|新規作成|プロジェクト」から、プロジェクト作成において、

「NAG LIBアプリケーション」を選択します。

2. テンプレートからルーチンを選択しますと、サンプルプログラムが自動的に作成され、

テンプレートとしてご利用頂けます。

また、コンソールアプリケーションなど、その他のプロジェクトからでも、メニュー「プ

ロジェクト|プロジェクトの設定(クイック実行設定)」から、付加機能「NAG Fortran

ライブラリを利用する」にチェックを入れるだけで、 NAG Fortran Library

(FLDLL224ML)のルーチンを呼び出すことができます。

6

4.1.1. Intel Fortran からの利用

NAG Fortran DLL は Intel Fortran 10.1 を用いてビルドされています。Intel Fortran 11

以降でコンパイラされたプログラムから利用する場合には libifcoremd.dll 及び

libmmd.dll の名前を変更するかもしくは”インストールフォルダ¥bin”に移動し、正しい

Intel Fortran 実行時 DLL が利用されるようにして下さい。

4.1.1.1. コマンドウィンドウからの利用

このインプリメンテーションをコマンドウィンドウからアクセス場合、いくつかの環境

変数の設定が必要です。(システムで設定されていない場合 - 上記参照)

以下のショートカットを利用すると INCLUDE, LIB, PATH の各環境変数、および提供

されている MKL があらかじめ設定されたコマンドウィンドウが立ち上がります。

Start|All Programs|NAG|FL22|NAG Fortran Library for Win32 Applications

(FLDLL224ML) Command Prompt

ショートカットを利用しない場合は以下のバッチファイルを利用して環境変数の設定を

行うことも可能です。

c:¥Program Files¥NAG¥FL22¥fldll224ml¥batch¥envvars.bat

環境が設定された状態で以下のようにコンパイル&リンクすることができます。

(driver.fがユーザプログラムの場合)

BLAS/LAPACK に MKL を利用する場合:

ifort /iface:cvf /MD driver.f FLDLL224M_mkl.lib

BLAS/LAPACK に MKL を利用しない場合:

ifort /iface:cvf /MD driver.f FLDLL224M_nag.lib

マルチスレッドプログラムの場合は、以下のように、オプション/threads 及び

/automaticを付けてコンパイルして下さい。

ifort /iface:cvf /MD /automatic driver.f FLDLL224M_mkl.lib

ノート:Intel Visual Fortran コンパイラ環境変数が設定されている必要があります。

(詳細はコンパイラの User’s Guide をご参照下さい。)

7

4.1.1.2. MS Visual Studio からの利用

以下は Visual Studio .NET 2003 / 2005 / 2008 及び Intel Fortran Compiler 10.1 を用い

た場合の説明です。(それ以外のバージョンでは異なる場合があります)

NAG DLL が実行時にアクセスできるように、インストールフォルダ¥binが PATH に含

まれるようにして下さい。 さらに MKL を利用する DLL を利用する場合には、インス

トールフォルダ¥MKL_ia32_10.1¥bin も PATH に含まれるようにして下さい。ただし

この場合、インストールフォルダ¥binよりも後に指定するようにして下さい。

以下の方法で今後作成されるプロジェクトで NAG DLL が利用できるようになります。

1. ツール → オプションを選択して下さい。

2. 開いたダイアログウィンドウで Intel Fortran を選択を選択して下さい。

3. ライブラリパネルの右にある[…]を選択を選択して下さい。

4. ディレクトリの設定で NAG Library へのパスを指定を選択して下さい。デフォル

トでは以下のパスを指定します:

"c:¥Program Files¥NAG¥FL22¥fldll224ml¥lib"

5. 本インプリメンテーションでは BLAS、LAPACK のシンボルが NAG ライブラリ

からエクスポートされますので MKL への明示的なパスの指定は通常不要です。も

し指定を行う必要がある場合には MKL ライブラリフォルダを NAG Library の指

定の後で行うようにして下さい。

6. OK ボタンを押します。

7. Includes の横にある[…]ボタンをクリックします。

8. NAG インターフェースブロックへのパスを指定します。デフォルトでは:

"c:¥Program Files¥NAG¥FL22¥fldll224ml¥nag_interface_blocks"

9. OK ボタンを押します。

10. OK ボタンを再度押します。

以後、Intel Fortran プロジェクトを作成した場合に NAG ライブラリ及びインターフェ

ースブロックのフルパス指定は必要ありません。

インターフェースブロックは USE 文を用いて利用することができます。詳細は本ドキュ

メントのセクション 4.3 をご参照下さい。

上記の設定は以後すべての Intel Fortran プロジェクトに対して有効ですが、それぞれの

プロジェクトで更に以下の設定が必要です。

8

本ライブラリはフルオプティマイズされています。そのため Release モード以外では C

実行時ライブラリに関する警告メッセージが表示される場合がありますが問題はありま

せん。Release モードへの設定はツールバーより行うかもしくはビルド → 構成マネー

ジャメニューより行うことが可能です。

NAGライブラリをプロジェクトに追加するにはプロジェクトメニューよりプロパティー

を選択して下さい。ダイアログウィンドウが表示されるのでリンカの入力を選択します。

追加の依存ファイルに FLDLL224M_mkl.lib(MKL を使う場合)、もしくは

FLDLL224M_nag.libと指定します。

更に呼び出し規約を CVF に指定する必要があります。 それを行うにはプロパティーウ

インドウから Fortran をクリックし外部手続きを選択します。そして呼び出し規約を

CVF に設定し、最後に OKを押します。

続いてマルチスレッドの実行時 DLL を利用するように設定します。(推奨)それを行う

にはプロパティウインドウより Fortranをクリックし、実行時ライブラリの指定をマル

チスレッドとし、最後に OKを押します。

マルチスレッドアプリケーションの為に、マルチスレッドランタイムライブラリを選択

することと同時に、/automatic(または、/Qauto)コンパイラフラグを設定します。

これを行うには、プロパティウインドウより Fortran をクリックし、Data を選択して

下さい。右手のパネルで Local Variable Storageをクリックし、ドロップダウンリ

ストから Local Variables AUTOMATICを選択して下さい。

9

4.1.2. Compaq Visual Fortran からの利用

本ライブラリが格納されているフォルダが環境変数 LIB に設定されている場合、以下の

ようにコンパイル・リンクを行えます(driver.fがユーザプログラムの例):

f90 driver.f FLDLL224M_mkl.lib

もしくは

f90 driver.f FLDLL224M_nag.lib

4.1.3. NAG Fortran Compiler (NAGWare f95)からの利用

以下の例のように呼び出しが可能です(driver.fがユーザプログラムの例):

f95 -f77 -w=obs -o driver.exe driver.f "インストールフォルダ¥lib¥FLDLL224M_mkl.lib"

もしくは

f95 -f77 -w=obs -o driver.exe driver.f "インストールフォルダ¥lib¥FLDLL224M_nag.lib"

これにより driver.exe が出力されます。ここで FLDLL224M_mkl.lib もしくは

FLDLL224M_nag.lib のフルパスを指定する必要があります。もしもスペースがパス名

に含まれる場合にはクォーテーションでくくって下さい。

4.1.4. Absoft Pro Fortran からの利用

サンプルプログラム D02CJFE.F と F07CEFE.F を修正したものが Absoft F77 / F95

Version 10.2 用 にそれぞれ提供されています。これらのファイルは以下のフォルダに提

供されます。

インストールフォルダ¥samples¥absoft_fortran_example

Absoft Pro Fortran から NAG ライブラリを使用する場合、以下の4つの点にご注意下さ

い。

1. 実数の引数と関数は全て DOULBE PRECISION です。

10

2. ライブラリとコールバック関数はすべて STDCALL と宣言して下さい。

(absoft.fのコードの CHANGE1 部分参照)

3. NAG ライブラリプロシージャへの CHARACTER 引数は CVF プロトコルを使用

して渡して下さい。このプロトコルでは CHARACTER 引数の長さが、

CHARACTER 引数の直後に Integer 引数として渡されます。Absoft Pro Fortran

コンパイラーではCHARACTER引数を引数リストの後に Integer値として渡しま

す。

このプロトコルを使用するには、VAL(LOC(…))シーケンスを使用して下さい。

LOC(…)関数は引数のアドレスを取ります。VAL(…)関数はその引数を値で渡しま

す。その後 VAL(…)を用いて引数長さを渡して下さい。

サンプルコードでは、全ての D02CJF(Example プログラム D02CFJE.F)への

呼び出しの際の仮引数 RELABBS(実引数は Default)が二つの引数で置き換えら

れます。

VAL(LOC(RELABS)), VAL(7)

(NEW と記された行 RELABS が宣言され Default 値を代入されている部分

(CHANGE2 部分)参照)

4. サブルーチン引数のルーチンは呼び出しルーチンと同じファイル内に存在する必

要があります。(非 stdcall コンパイラはすべてそのようになっています)

本ライブラリが格納されているフォルダが環境変数 LIB に設定されている場合、以下の

ようにコンパイル・リンクを行えます

(driver.fもしくは driver.forがユーザプログラムの例):

f95 driver.f FLDLL224M_mkl.lib

もしくは

f95 driver.f FLDLL224M_nag.lib

コンパイラのバージョン 10.2 では、プログラムは正しくリンクされません。 これは、2

つの補助ルーチン D02CJX および D02CJW が引数として渡されるからです。 NAG ラ

11

イブラリから出たシンボルが Absoft 10.2 のリンカと互換性がありません。しかし、この

制限があっても NAG ルーチンの大部分は Absoft 10.2 コンパイラでコンパイル/リンク

が可能です。

4.1.5. Silverfrost(Salford) FTN95 からの利用

SLINK version 1.26 以上と FTN95 version 1.23 以上が必要です。ソースコードの変更

は必要ありませんが FTN95 が cdecl 呼び出し規約の一種をデフォルトで使っているため、

CVF 呼び出し規約を利用する旨を明示的に指定する必要があります。(/IMPORT_LIB

オプション) 以下に例を示します:

ftn95 driver.f /import_lib "インストールフォルダ¥bin¥FLDLL224M_mkl.dll"

/link

もしくは

ftn95 driver.f /import_lib "インストールフォルダ¥bin¥FLDLL24M_nag.dll"

/link

FLDLL224M_mkl.lib もしくは FLDLL224M_nag.lib のフルパスを指定する必要があり

ます。もしもスペースがパス名に含まれる場合にはクォーテーションでくくって下さい。

引数リスト経由で NAGDLL 内のルーチンに渡される外部名は、自動的に同ファイル内で

あるかどうか判別されます。

以下のようにコンパイルリンクすることも可能です。

ftn95 /f_stdcall driver.f

slink driver.obj "インストールフォルダ¥bin¥FLDLL224M_nag.dll"

コンパイル時と同様に、もしもスペースがパス名に含まれる場合にはクォーテーション

でくくって下さい。リンカは DLL と直接リンクし*.lib ファイルとはリンクしないことを

注意して下さい。

Plato3 は FTN95 と共に提供される IDE(統合開発環境)です。Plato3 から NAG ルー

チンを使う場合には以下のように行って下さい。:

12

1. File メニューより'New Project'を選択します。

2. 'Fortran Application'を選択しプロジェクト名と格納場所を指定します。

3. Project Explorer ウィンドウでソースファイルを右クリックしてプロジェクトを

構成するファイルを入力します。 (例えば NAG サンプルプログラムの

C05NBFE.F)

4. Project Explorer の'References'を右クリックして NAG DLL の名前を入力します。

例)FLDLL224M_nag.dll.

5. コンパイラが version 5.2 よりも古い場合、'Checkmate'オプションの指定は行わ

ないようにして下さい。version 5.2 以前の FTN95 と NAG STDCALL DLL は

'Checkmate'オプションで正常に稼働しません。例えば'Release Win32'を選択しま

す。

6. STDCALL オプションの指定を Project | Properties | Compiler Options |

Miscellaneous で/F_STDCALL を指定して行います。

7. Plato3 は標準入出力リダイレクションをサポートしていません。回避するには例

えば下記のように明示的にファイルをオープンして下さい。(メインプログラム

の装置6を使用する前に)

open(6,file='c:¥test.res')

4.1.6. PGI Fortran からの利用

本ライブラリのインストール先を考慮して環境変数 LIB と PATH が正しく設定されてい

る場合、以下のようにコンパイル・リンクを行えます

(driver.fがユーザプログラムの例):

pgf90 driver.f FLDLL224M_nag.lib -o driver.exe

もしくは

pgf90 driver.f FLDLL224M_mkl.lib -o driver.exe

上記は、pgf90 version 8.0-6 を用いてテストされています。

13

4.1.7. Lahey/Fujitsu Fortran からの利用

NAG DLL を Lahey/Fujitsu Fortran から使う方法を示すために、修正された

D02CJFE.F (lahey.f)が以下のフォルダに提供されています。

install dir¥samples¥lahey_fortran_example

以下は Lahey Fortran version 7.1 及び 7.2 でテスト済みです。

1. Lahey Fortran から NAG DLL を利用するにはいくつかのソースコードの改編が

必要です:

a. 呼び出す NAG ルーチンそれぞれに対して DLL_IMPORT 文を挿入して下さ

い。

例)

DLL_IMPORT D02CJF

b. DLL 内のルーチンへの引数として渡される NAG ルーチンに対して呼び出し

側に DLL_IMPORT 文を挿入して下さい。

例)

DLL_IMPORT D02CJW

c. ユーザが引数として与えるサブルーチン、もしくは関数に対して呼び出し側

に DLL_IMPORT 文を挿入して下さい。そしてユーザが定義する側では

DLL_EXPORT 文を指定して下さい。

サブルーチン OUT の場合

例)

DLL_IMPORT OUT(呼び出し側)

DLL_EXPORT OUT(ユーザ定義側)

これらのルーチンと関数はすべて EXTERNAL 宣言と型の宣言が必要です。

インポートされる関数は大文字と小文字が別に扱われますので NAG の名前

はすべて大文字にするように注意して下さい。

文字列引数については NAG DLL の様式に合わせる必要があります。文字引

数は文字列長を渡さなくするために以下のように行って下さい:

14

VAL(POINTER(char_arg))

更にその後ろに NAG DLL の様式に合わせるために文字列長を引数として渡

して下さい。両方とも値渡しとなります。

例)

CALL D02CJF (X, XEND2, N, Y, FCN, TOL, VAL(POINTER('Default')),

+ VAL(LEN('Default')), OUT, G, W, IFAIL)

2. コンパイルとリンク

全てのルーチンに"-ml bc"オプションを付けてコンパイルして下さい。これにより

stdcall 呼び出し規約が使われるようになります。 更に NAG DLL のインポート

ライブラリ(*.lib ファイル)が環境変数 LIB で指定されるフォルダにあるように

して下さい。もしくはリンカのオプション-LIBPATH で明示的に指定することも

可能です。更にフルパスによる指定も可能です。

例)

lf95 d02cjfe.f "インストールフォルダ¥lib¥FLDLL224M_mkl.lib" -ml bc

もしくは

lf95 d02cjfe.f "インストールフォルダ¥lib¥FLDLL224M_nag.lib" -ml bc

3. 実行

実行時にはDLLの格納場所が環境変数PATHで指定されているように注意して下

さい。

4.1.8. GNU gfortran からの利用

gfortran から NAG Fortran Library Mark 22 DLL を呼び出すには、以下のようなコマ

ンドを使います。ここで、driver.f がユーザプログラムで、driver.exe が生成され

る実行形式です。

注:以下のコマンドは本来1行で書かれるべきものです。ここでは、本ノートの1行当

たりの文字数の関係上(1行に入り切らない為)2行に分けています。

Windows コマンドプロンプトから gfortran を使う場合:

gfortran -mrtd driver.f "インストールフォルダ¥lib¥FLDLL224M_mkl.lib"

-o driver.exe

15

もしくは

gfortran -mrtd driver.f "インストールフォルダ¥lib¥FLDLL224M_nag.lib"

-o driver.exe

Cygwin ターミナル (xterm) から g77 を使う場合:

gfortran -mrtd driver.f "インストールフォルダ/lib/FLDLL224M_mkl.lib"

-o driver.exe

もしくは

gfortran -mrtd driver.f "インストールフォルダ/lib/FLDLL224M_nag.lib"

-o driver.exe

文字列引数は、特別な注意を要します。文字列引数の直後に文字列長の値を渡す必要が

あります。

例)

DEV = G01FAF(TAIL,%VAL(1),P,IFAIL)

exampleプログラムD02CJFE.Fに於いて、(ルーチンD02CJFが呼び出されている全て

の箇所で)仮引数 RELABS(実引数 ‘Default’)は、‘Default’,%VAL(7)で置き換

える必要があります。

引数が文字配列の場合は、各々の配列要素の長さを渡す必要があります。

この情報は GNU Fortran 4.4.0 で検証されています。

gfortran での NAG DLL の使用を示す為、example プログラム D02CJFE.F と

G01FAFE.F の修正版が、以下のフォルダに提供されます。

インストールフォルダ¥samples¥gfortran_examples

16

4.1.9. Microsoft Visual C++ / Visual Studio からの利用

NAG Fortran DLL は注意して利用すれば Microsoft Visual Studio .NET 2003 もしくは

それ以降の C/C++環境から利用可能です。利用をより簡単にするために Fortran と C の

型のマッピング情報を持った C ヘッダファイルが提供されています。必要に応じてヘッ

ダファイルの中から必要な部分をコピーして利用するかもしくは include することが推

奨されます。

以下のフォルダに C/C++から Fortran DLL を利用するサンプルが提供されています。

インストールフォルダ¥samples¥c_examples

および

インストールフォルダ¥samples¥cpp_examples

インストールフォルダ¥headers 下に提供されている techdoc.html により詳細な情

報が含まれています。このドキュメントはスタートメニューからも参照可能です。

Start|All Programs|NAG|FL22| NAG Fortran Library for Win32

Applications (FLDLL224ML)|C & C++ Header File Information

主な情報としては以下のようなものがあります。

STDCALL 呼び出し規約を指定する。

C と Fortran では配列順序が異なる。

ヘッダファイルを使用する事でエラーチェックを行なえる。

Fortran 文字列は二つのパラメータとして扱われる。(文字列、文字列長)

C より DLL を呼び出す Example が提供される。

(インストールフォルダ¥samples¥c_examples)

C++より DLL を呼び出す Example が提供される。

(インストールフォルダ¥samples¥cpp_examples)

C プログラムは.c 拡張子、C++プログラムは.cpp 拡張子を用いる。

本ライブラリが格納されているフォルダが環境変数 LIB に設定されている場合、以下の

ようにコンパイル・リンクを行えます(driver.cがユーザプログラムの例):

17

cl driver.c FLDLL224M_mkl.lib

もしくは

cl driver.c FLDLL224M_nag.lib

上記はヘッダファイルへのパスが環境変数 INCLUDE に含まれていることが前提です。

含まれていない場合には以下のように行って下さい:

cl driver.c FLDLL224M_mkl.lib /I"インストールフォルダ¥headers"

もしくは

cl driver.c FLDLL224M_nag.lib /I"インストールフォルダ¥headers"

以下は Visual Studio .NET 2003 と Visual Studio 2005 に対する設定です。

Visual Studio IDE を利用する場合には以下の設定を行いリンクが行えるように設定可

能です。プロジェクトプロパティーからリンカ|入力|追加の依存ファイルに

FLDLL224M_nag.libもしくは FLDLL224M_mkl.libを指定します。もし環境変数LIB

が他で設定されていなければプロジェクトプロパティーからリンカ|全般|追加のライブ

ラリディレクトリにインストールフォルダ¥libを追加して下さい。

4.1.10. Intel C/C++からの利用

4.1.9 で説明されているヘッダファイルについての情報は Intel C にもあてはまります。

本ライブラリが格納されているフォルダが環境変数 LIB に設定されている場合、以下の

ようにコンパイル・リンクを行えます(driver.cがユーザプログラムの例):

icl driver.c /DUSE_STDCALL FLDLL224M_mkl.lib /I"インストールフォルダ¥c_headers"

もしくは

icl driver.c /DUSE_STDCALL FLDLL224M_nag.lib /I"インストールフォルダ¥c_headers"

18

4.1.11. Borland C/C++からの利用

4.1.9で説明されているヘッダファイルについての情報はBorland C/C++にもあてはまり

ます。Borland のインポートライブラリは提供されていませんが以下のように DLL から

生成することができます:

impdef name.def "インストールフォルダ¥bin¥name.dll"

implib name.lib name.def

ここで nameは NAG DLL の名前を表します。

例)

FLDLL224M_mkl 又は FLDLL224M_nag

最初の文はモジュール定義ファイルを生成します。そして2番目の文がインポートライ

ブラリ name.lib を生成します。IMPLIB からの警告が発せられますが無害です。(他の

使用方法が簡単に行えるようにいくつかのシンボルを定義しているために出力されま

す)本ライブラリが格納されているフォルダが環境変数 LIB に設定されている場合、以

下のようにコンパイル/リンクを行えます(driver.cがユーザプログラムの例):

bcc32 -DUSE_STDCALL -I"インストールフォルダ¥c_headers" driver.c name.lib

必要であれば bcc32.cfgに NAG ヘッダファイルの位置を設定することも可能です。詳

細はコンパイラのドキュメントをご参照下さい。設定を行った場合、例えば以下のよう

にコンパイル/リンク可能です:

bcc32 -DUSE_STDCALL driver.c name.lib

4.1.12. GNU gcc / g++からの利用

セクション 4.1.9 で説明されているヘッダファイルについての情報は、gcc / g++にも当て

はまります。

gcc 又は g++から NAG Fortran Library DLL を呼び出すには、以下のようなコマンドを

使います。ここで、driver.c又は driver.cppがユーザプログラムで、driver.exe

が生成される実行形式です。

注:以下のコマンドは本来1行で書かれるべきものです。ここでは、本ノートの1行当

19

たりの文字数の関係上(1行に入り切らない為)2行に分けています。

Windows コマンドプロンプトから C プログラムをコンパイルする為 gcc を使う場合:

gcc -D USE_STDCALL -D _WIN32 -I "インストールフォルダ¥c_headers" driver.c

"インストールフォルダ¥lib¥FLDLL224M_mkl.lib" -o driver.exe

もしくは

gcc -D USE_STDCALL -D _WIN32 -I "インストールフォルダ¥c_headers" driver.c

"インストールフォルダ¥lib¥FLDLL224M_nag.lib" -o driver.exe

Cygwin ターミナル (xterm) から C プログラムをコンパイルする為 gcc を使う場合:

gcc -D USE_STDCALL -D _WIN32 -I "インストールフォルダ/c_headers" driver.c

"インストールフォルダ/lib/FLDLL224M_mkl.lib" -o driver.exe

もしくは

gcc -D USE_STDCALL -D _WIN32 -I "インストールフォルダ/c_headers" driver.c

"インストールフォルダ/lib/FLDLL224M_nag.lib" -o driver.exe

Windows コマンドプロンプトから C++プログラムをコンパイルする為 g++を使う場合:

g++ -D USE_STDCALL -D _WIN32 -I "インストールフォルダ¥c_headers" driver.cpp

"インストールフォルダ¥lib¥FLDLL224M_mkl.lib" -o driver.exe

もしくは

g++ -D USE_STDCALL -D _WIN32 -I "インストールフォルダ¥c_headers" driver.cpp

"インストールフォルダ¥lib¥FLDLL224M_nag.lib" -o driver.exe

Cygwin ターミナル (xterm) から C++プログラムをコンパイルする為 g++を使う場合:

g++ -D USE_STDCALL -D _WIN32 -I "インストールフォルダ/c_headers" driver.cpp

"インストールフォルダ/lib/FLDLL224M_mkl.lib" -o driver.exe

もしくは

g++ -D USE_STDCALL -D _WIN32 -I "インストールフォルダ/c_headers" driver.cpp

"インストールフォルダ/lib/FLDLL224M_nag.lib" -o driver.exe

この情報は gcc / g++ 3.4.5(mingw special)と gcc 3.3.3(cygwin sepcial)で検証されていま

す。

20

4.1.13. Microsoft Visual Basic for Applications (VBA) / Excel からの利用

Fortran DLL は Excel シートで利用することに適しています。ルーチンは、Visual Basic

for Applications (VBA)のコードから呼び出されます。(VBA と Visual Basic 6 (VB 6)は

類似しており、その両方で、同じ NAG 宣言文が使われます。)

Excel からの利用方法のサンプルは以下のフォルダに提供されます:

インストールフォルダ¥samples¥excel_examples

イ ン ス ト ー ル フ ォ ル ダ ¥samples¥excel_examples¥linear_algebra の

xls_demo.txtには Excel から NAG DLL を使う際のヒントが含まれています。VB6 /

VBA から NAG DLL を呼び出す際の例証として、VB 6 examples もまたご参考下さい。

主な情報としては以下のようなものがあります。

インストールフォルダ¥vb_headers¥vb6.txt に提供される Declare 文をコピーし

て利用する。このファイルへのショートカットは以下のスタートメニューからも

提供されます。

Start|All Programs|NAG|FL22|NAG Fortran Library for Win32

Applications (FLDLL224ML)|VB6 & VBA Declare Statements

Fortran 配列は1で始まるので Option Base 1 をなるべく設定して下さい。

Variant タイプは実際の引数として使用できません。Long、Double、Character

の指定が必要となります。Option Explicit をなるべく設定して下さい。

NAG ルーチンが配列を引数としている場合、実際に引数として VBA 配列の最初

の要素を指定します。例えば A(1,1)など

通常 1 又は 2*3 等の計算式を引数として使用できません。(例外として NAG が提

供する Declare ステートメントで ByVal と指定されているものの場合はこれを行

なう事ができます)

Fortran 文字列が引数である場合は二つの VBA 引数が必要となります。(ByVal

文字列と ByVal length_of_string 引数が必要となります)

DLL ルーチン内より画面への出力を行なわないようにして下さい。(IFAIL=1 と

して出力しない設定にして下さい)

21

4.1.14. Microsoft Visual Basic 6 からの利用

Visual Basic 6 (VB 6)と Visual Basic for Applications (VBA)は似ているため、VBA に関

する情報は VB 6 でも適用されます。配列の扱い及び文字列の扱いを特にご注意下さい。

Visual Basic 6 からの DLL の呼び出しについてのサンプルは以下に提供されます:

インストールフォルダ¥samples¥vb6_examples

VB 6 / VBA から NAG DLL を呼び出す際の例証として、Excel examples の VBA コード

もまたご参考下さい。

主な情報としては以下のようなものがあります。

インストールフォルダ¥vb_headers¥vb6.txt に提供される Declare 文をコピーし

て利用する。このファイルへのショートカットは以下のスタートメニューからも

提供されます。

Start|All Programs|NAG|FL22|NAG Fortran Library for Win32

Applications (FLDLL224ML)|VB6 & VBA Declare Statements

Fortran 配列は1で始まるので Option Base 1 をなるべく設定して下さい。

Variant タイプは実際の引数として使用できません。Long、Double、Character

の指定が必要となります。Option Explicit をなるべく設定して下さい。

NAG ルーチンが配列を引数としている場合、実際に引数として VBA 配列の最初

の要素を指定します。例えば A(1,1)など

通常 1 又は 2*3 等の計算式を引数として使用できません。(例外として NAG が提

供する Declare ステートメントで ByVal と指定されているものの場合はこれを行

なう事ができます)

Fortran 文字列が引数である場合は二つの VBA 引数が必要となります。(ByVal

文字列と ByVal length_of_string 引数が必要となります)

DLL ルーチン内より画面への出力を行なわないようにして下さい。(IFAIL=1 と

して出力しない設定にして下さい)

22

4.1.15. Microsoft Visual Basic .NET からの利用

多くのライブラリルーチンは Visual Basic .NET (VB.NET)から呼び出し可能です。

VB.NET からの利用方法のサンプルは以下のフォルダに提供されます:

インストールフォルダ¥samples¥vb.net_examples

(これらの examples は、Visual Studio .NET 2003 を使用し作成されています。Visual

Studio 2005 以降でロードした場合、ソリューション/プロジェクトファイルは、Visual

Studio 変換ウィザードでコンバートされます)

主な情報としては以下のようなものがあります。

インストールフォルダ¥vb_headers¥vbdnet.txtに提供される Declare 文をコ

ピーして利用する。このファイルへのショートカットは以下のスタートメニュー

からも提供されます。

Start|All Programs|NAG|FL22|NAG Fortran Library for Win32

Applications (FLDLL224ML)|VB.NET Declare Statements

Fortran 配列は1で始まるので Option Base 1 をなるべく設定して下さい。

型のマッピングは VB 6 の場合と異なります。Integer は Fortran の INTEGER

に対応し、Double は Fortran の DOUBLE PRECISION にそれぞれ対応します。

Fortran は参照呼出し、VB.NET は値呼び出しです。VB 6 とVB.NET では Declare

文が異なります。

VB 6 と同様に、配列引数が必要とされる場合は、配列の一番目の要素を渡して下

さい。

VB.NET では、コールバック関数における配列は、値渡しされた IntPtr によって

表現されます。(d02ejf_exampleのコードを参照して下さい。)

VB 6 と同様に、Fortran 文字引数は 2 つの実引数で構成されます。ByVal 文字列

引数の後に、ByVal 文字列長が続きます。

VB.NET 配列は行順で VB 6 や Fortran のように列順ではありません。これは配

列の転置が必要であることを意味します。

配列の格納方法が異なるため、Fortran ルーチンの ”Leading dimension”は

VB.NET 配列の第二次元になります。たとえば VB.NET で A(2,3)の場合に

は”Leading dimension”に4(配列指標が0からスタートするため)を渡します。

23

DLL ルーチン内より画面への出力を行なわないようにして下さい。(IFAIL=1 と

して出力しない設定にして下さい)

linear_algebra exmple は、文字列 (string)、文字 (character)、複素数

(complex) の引数の取り扱いを含む、様々なライブラリルーチン(線形代数その他)

呼び出しの例証となります。

4.1.16. C#からの利用

C#からの NAG Fortran Library DLL 呼び出しに関する情報は、以下のウェブサイトを

ご参照下さい。

http://www.nag.co.uk/numeric/csharpinfo.asp

NAG ライブラリを.NET から利用する方法についての情報も参考になります。

http://www.nag.co.uk/microsoft_dotnet.asp

4.1.17. Java からの利用

Java からの NAG C Library DLL 及び NAG Fortran Library DLL 呼び出しに関する情

報は、以下のウェブサイトをご参照下さい。

http://www.nag.co.uk/doc/TechRep/html/Tr2_09/Tr2_09.asp

4.1.18. Python からの利用

F2PY を使用した Python からの NAG Fortran Library DLL 呼び出しに関する情報は、

以下の PDF ファイルをご参照下さい。

http://www.nag.co.uk/doc/TechRep/pdf/TR1_08.pdf

4.1.19. R からの利用

R からの NAG Fortran Library DLL 呼び出しに関する情報は、以下のウェブサイトをご

参照下さい。

http://www.nag.co.uk/numeric/RunderWindows.asp

24

4.1.20. Simfit NAG Library Editon

Simfit NAG Library Edition は NAG Fortran Library の DLL 版をアルゴリズムソース

として採用しています。詳細は以下をご参照下さい。

http://www.nag.co.uk/educationuk/simfit.asp.

4.1.21. その他の環境からの利用

その他の環境からのご利用方法については以下のURLを参照していただくかもしくはお

問い合せ下さい。

http://www.nag.co.uk/doc/inun/fl22/dll4ml/postrelease.html

4.2. アクセスチェック

スタートメニューに、以下の診断用のプログラム NAG_Fortran_DLL_info.exeへのシ

ョートカットが在ります。

スタート|すべてのプログラム|NAG|FL22| NAG Fortran Library for Win32

Applications (FLDLL224ML)|Check Accessibility

この診断用プログラムは、FLDLL224M_nag.dll と FLDLL224M_mkl.dll へのアクセ

スが、現在の環境設定で可能であるかどうかを確認します。

各々の DLL が正常にロードできた場合には、DLL の格納位置を表示し、ポップアップウ

ィンドウに A00AAFを呼び出した際の出力内容を表示します。また、A00AAFが呼び出さ

れ、ライセンスキーが正常に動作しているかどうかを確認できます。正常に動作してい

る場合には ”Status OK” と表示され、ライセンスキーが無効な場合や見付からない場

合には、その旨を表示します。

25

4.3 インターフェースブロック

NAG Fortran Library インターフェースブロックはそれぞれのライブラリルーチンの

タイプ及び引数を定義しますが、Fortran より NAG Fortran Library を呼び出す際に

必ず必要という性質のものではありません。(Fortran コンパイラによる NAG Fortran

Library の呼び出し方法のエラーチェックを行う際に使用されます)具体的には以下の

ようなチェックをコンパイラが行うのに使用されます。

(a) サブルーチン呼び出しの整合性

(b) 関数宣言の際の型

(c) 引数の数

(d) 引数の型

インターフェースブロックは自動生成プログラムが NAG Fortran Library のソースコ

ードを解析することにより生成されているため、信頼性があります。

インターフェースブロックファイルは章毎のモジュールとして提供されます。以下にモ

ジュール名を示します。

nag_f77_a_chapter

nag_f77_c_chapter

nag_f77_d_chapter

nag_f77_e_chapter

nag_f77_f_chapter

nag_f77_g_chapter

nag_f77_h_chapter

nag_f77_m_chapter

nag_f77_p_chapter

nag_f77_s_chapter

nag_f77_x_chapter

これらのファイル(*.mod)はプリコンパイルモジュールとして提供されます。

ショートカットを使用する、又は、envvars.bat を実行することに依り環境変数を設定

する場合は(セクション 3.1.1 を参照)、環境変数 INCLUDEが設定される為、これらのモ

ジュールにアクセスするのにセクション 3.1.1 に記載されているコマンドを利用するこ

26

とができます。

これらのモジュールを Fortran77 のコードで利用する場合は以下のような変更を加え

て下さい。

USE ステートメント追加する。(コード内で呼んでいる関数が含まれる章のモ

ジュールを指定する)

NAG Fortran ライブラリ関数の EXTERNAL ステートメントを削除する。(モ

ジュール内で宣言されるため必要ない)

NAG Fortran ライブラリ関数の型宣言を削除する。(モジュール内で宣言され

るため必要ない)

以下に例として、変更を加えたD01DAFルーチン用のExampleプログラムを示します。

(アスタリスクで変更点をコメントとして示しています)

* D01DAF Example Program Text

*****************************************************

* Add USE statements for relevant chapters *

USE NAG_F77_D_CHAPTER

* *

*****************************************************

* .. Parameters ..

INTEGER NOUT

PARAMETER (NOUT=6)

* .. Local Scalars ..

DOUBLE PRECISION ABSACC, ANS, YA, YB

INTEGER IFAIL, NPTS

* .. External Functions ..

DOUBLE PRECISION FA, FB, P1, P2A, P2B

EXTERNAL FA, FB, P1, P2A, P2B

* .. External Subroutines ..

******************************************************

* EXTERNAL declarations need to be removed. *

C EXTERNAL D01DAF

* *

******************************************************

27

* .. Executable Statements ..

WRITE (NOUT,*) 'D01DAF Example Program Results'

YA = 0.0D0

YB = 1.0D0

ABSACC = 1.0D-6

WRITE (NOUT,*)

WRITE (NOUT,*) 'First formulation'

IFAIL = 1

*

CALL D01DAF(YA,YB,P1,P2A,FA,ABSACC,ANS,NPTS,IFAIL)

*

WRITE (NOUT,99999) 'Integral =', ANS

WRITE (NOUT,99998) 'Number of function evaluations =', NPTS

IF (IFAIL.GT.0) WRITE (NOUT,99997) 'IFAIL = ', IFAIL

WRITE (NOUT,*)

WRITE (NOUT,*) 'Second formulation'

IFAIL = 1

*

CALL D01DAF(YA,YB,P1,P2B,FB,ABSACC,ANS,NPTS,IFAIL)

*

WRITE (NOUT,99999) 'Integral =', ANS

WRITE (NOUT,99998) 'Number of function evaluations =', NPTS

IF (IFAIL.GT.0) WRITE (NOUT,99997) 'IFAIL = ', IFAIL

STOP

*

99999 FORMAT (1X,A,F9.4)

99998 FORMAT (1X,A,I5)

99997 FORMAT (1X,A,I2)

END

*

DOUBLE PRECISION FUNCTION P1(Y)

* .. Scalar Arguments ..

DOUBLE PRECISION Y

* .. Executable Statements ..

P1 = 0.0D0

RETURN

28

END

*

DOUBLE PRECISION FUNCTION P2A(Y)

* .. Scalar Arguments ..

DOUBLE PRECISION Y

* .. Intrinsic Functions ..

INTRINSIC SQRT

* .. Executable Statements ..

P2A = SQRT(1.0D0-Y*Y)

RETURN

END

*

DOUBLE PRECISION FUNCTION FA(X,Y)

* .. Scalar Arguments ..

DOUBLE PRECISION X, Y

* .. Executable Statements ..

FA = X + Y

RETURN

END

*

DOUBLE PRECISION FUNCTION P2B(Y)

*****************************************************

* Add USE statements for relevant chapters *

USE NAG_F77_X_CHAPTER

* *

*****************************************************

* .. Scalar Arguments ..

DOUBLE PRECISION Y

* .. External Functions ..

******************************************************

* Function Type declarations need to be removed. *

C DOUBLE PRECISION X01AAF

* *

******************************************************

******************************************************

* EXTERNAL declarations need to be removed. *

29

C EXTERNAL X01AAF

* *

******************************************************

* .. Executable Statements ..

P2B = 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

30

4.4. Example プログラム

Example の計算結果例はインストールノートのセクション 2.2 に記述されている環境で

出力されたものです。これらの結果は異なる環境で計算を行った場合(例えば異なるコ

ンパイラ、コンパイラライブラリ、BLAS/LAPACK 等)提供されている計算結果例と若

干異なる場合があります。本件は特に固有値ベクトルを求めた場合に顕著です。(結果が

特定のスカラ値(多くの場合-1)倍になっている場合や残差や反復回数などの違いが挙げ

られます)

Example プログラムは本インプリメンテーションが想定する環境で、すぐに利用できる

状態で提供されます。そのため Library マニュアルに記載されている Example プログラ

ムと若干異なる場合があります。

Example プログラムは nag_example.batもしくは nag_example_mkl.batのいずれ

かのバッチファイルを用いて簡単に利用できます。

これらのバッチファイルは環境変数 NAG_FLDLL224MLを参照します。

セクション 4.1.1.1.で示されるように、以下のスタートメニューから環境を設定済みのコ

マンドプロンプトを開くことができます。この方法で開いたコマンドプロンプトはあら

かじめ NAG_FLDLL224MLが設定されています。

Start|All Programs|NAG|FL22|NAG Fortran Library for Win32

Applications (FLDLL224ML)|FLDLL224ML Command Prompt

スタートメニューからの利用を行わずに環境変数を設定したい場合には、環境変数の設

定を行うためのバッチファイル(envvars.bat)が以下の場所に用意されています。

c:¥Program Files¥NAG¥FL22¥fldll224ml¥batch¥envvars.bat

nag_example_mkl.bat は Example プログラム(および入力データがある場合には入

力データ)をコピーし、コンパイルし、さらに FLDLL224M_mkl.libおよび MKL とリ

ンクします。そして最後にプログラムの実行を行います。Example プログラムの選択は

nag_example_mkl.batへの引数として NAG 関数名を与えて下さい。

例)

nag_example_mkl e04ucf

31

この例では Example プログラムソース(e04ucfe.f)と入力データ(e04ucfe.d)を

カレントフォルダにコピーし、コンパイル、リンク、実行を行い、その結果を e04ucfe.r

へ出力します。

FLDLL224M_nag.libをリンクした場合には nag_example.bat を利用して下さい。

例)

nag_example e04ucf

Example プログラムは本インプリメンテーションが想定する環境で、すぐに利用できる

状態で提供されます。そのため Library マニュアルに記載されている Example プログラ

ムと若干異なる場合があります。

また、提供されている Example プログラムの出力結果 例は FLDLL224M_mkl.lib と

MKL を利用して生成されたものです。FLDLL224M_nag.dll を用いた場合出力される

結果と若干異なる場合があります。

4.5. 強調文字、斜体文字の解釈

倍精度である本インプリメンテーションでは強調斜体文字(以下の表では//..//で表されて

います)は以下のような意味を持ちます。

real - REAL

double precision - DOUBLE PRECISION

complex - COMPLEX

complex*16 - COMPLEX*16

basic precision - double precision

additional precision - quadruple precision

reduced precision - REAL

例えばパラメータとして double precision と示されていれば、ユーザプログラム内では

DOUBLE PRECISION と読み替えて下さい。また additional precision とあれば

quadruple precision と読み替えて下さい。

F07 章(線形代数 (LAPACK) )と F08 章(最小二乗と固有値問題 (LAPACK) の各ル

ーチンは LAPACK の名前が使用されています。(NAG の F07/F08 名は使用されていま

せん。)

32

4.6. NAG ルーチンからの出力

いくつかのルーチンはエラーメッセージや支援メッセージ(advisory message)を出力

しますが、その出力先は X04AAF でエラーメッセージを、X04ABF で支援メッセージを

それぞれ指定できます。(デフォルトの出力先はセクション 4 をご参照下さい)これらの

メッセージの最大レコード長は特に指定のない限り 80文字(含コントロールキャラクタ)

です。

5. ルーチン毎の情報

以下にチャプター毎のルーチン情報を示します。

a. D06

このチャプタのいくつかのルーチンはスタックオーバーフロー例外を避けるためにスタッ

クサイズの変更が必要な場合があります。スタックサイズを変更する例として以下のよう

に/stack オプションが利用可能です。

ifort /iface:cvf /MD driver.f FLDLL224M_mkl.lib /link /stack:128000000

b. F06, F07, F08

多くの LAPACK ルーチンは「workspace query」メカニズムを利用します。ルーチン呼び

出し側にどれだけのワークスペースが必要であるかを聞くメカニズムですが、NAG が提供

する LAPACK と MKL が提供する LAPACK ではこのワークスペースサイズが異なる場合

がありますので注意して下さい。

本インプリメンテーションではベンダー提供の BLAS/LAPACK での問題を回避するため、

FLDLL224M_mkl.libに以下のルーチンが含まれています。

DGGGLM DGGLSE ZGELS ZGGGLM ZGGLSE

c. G02

この章で出てくる ACC の値(マシン依存の定数)は 1.0D-13 です。

33

d. P01

エラー時に、P01ABF はエラーメッセージを X04AAF で指定される装置番号へ出力し停止

します。

e. S07 – S21

NAG Fortran Library Manual に記述されている以下の定数は以下に示す値を持ちます。

S07AAF F_1 = 1.0E+13

F_2 = 1.0E-14

S10AAF E_1 = 1.8715E+1

S10ABF E_1 = 7.080E+2

S10ACF E_1 = 7.080E+2

S13AAF X_hi = 7.083E+2

S13ACF X_hi = 1.0E+16

S13ADF X_hi = 1.0E+17

S14AAF IFAIL = 1 if X > 1.70E+2

IFAIL = 2 if X < -1.70E+2

IFAIL = 3 if abs(X) < 2.23E-308

S14ABF IFAIL = 2 if X > X_big = 2.55E+305

S15ADF X_hi = 2.65E+1

S15AEF X_hi = 2.65E+1

S15AFF underflow trap was necessary

S15AGF IFAIL = 1 if X >= 2.53E+307

IFAIL = 2 if 4.74E+7 <= X < 2.53E+307

IFAIL = 3 if X < -2.66E+1

S17ACF IFAIL = 1 if X > 1.0E+16

S17ADF IFAIL = 1 if X > 1.0E+16

IFAIL = 3 if 0.0E0 < X <= 2.23E-308

S17AEF IFAIL = 1 if abs(X) > 1.0E+16

34

S17AFF IFAIL = 1 if abs(X) > 1.0E+16

S17AGF IFAIL = 1 if X > 1.038E+2

IFAIL = 2 if X < -5.7E+10

S17AHF IFAIL = 1 if X > 1.041E+2

IFAIL = 2 if X < -5.7E+10

S17AJF IFAIL = 1 if X > 1.041E+2

IFAIL = 2 if X < -1.9E+9

S17AKF IFAIL = 1 if X > 1.041E+2

IFAIL = 2 if X < -1.9E+9

S17DCF IFAIL = 2 if abs(Z) < 3.92223E-305

IFAIL = 4 if abs(Z) or FNU+N-1 > 3.27679E+4

IFAIL = 5 if abs(Z) or FNU+N-1 > 1.07374E+9

S17DEF IFAIL = 2 if imag(Z) > 7.00921E+2

IFAIL = 3 if abs(Z) or FNU+N-1 > 3.27679E+4

IFAIL = 4 if abs(Z) or FNU+N-1 > 1.07374E+9

S17DGF IFAIL = 3 if abs(Z) > 1.02399E+3

IFAIL = 4 if abs(Z) > 1.04857E+6

S17DHF IFAIL = 3 if abs(Z) > 1.02399E+3

IFAIL = 4 if abs(Z) > 1.04857E+6

S17DLF IFAIL = 2 if abs(Z) < 3.92223E-305

IFAIL = 4 if abs(Z) or FNU+N-1 > 3.27679E+4

IFAIL = 5 if abs(Z) or FNU+N-1 > 1.07374E+9

S18ADF IFAIL = 2 if 0.0E0 < X <= 2.23E-308

S18AEF IFAIL = 1 if abs(X) > 7.116E+2

S18AFF IFAIL = 1 if abs(X) > 7.116E+2

S18DCF IFAIL = 2 if abs(Z) < 3.92223E-305

IFAIL = 4 if abs(Z) or FNU+N-1 > 3.27679E+4

IFAIL = 5 if abs(Z) or FNU+N-1 > 1.07374E+9

S18DEF IFAIL = 2 if real(Z) > 7.00921E+2

IFAIL = 3 if abs(Z) or FNU+N-1 > 3.27679E+4

IFAIL = 4 if abs(Z) or FNU+N-1 > 1.07374E+9

S19AAF IFAIL = 1 if abs(X) >= 5.04818E+1

S19ABF IFAIL = 1 if abs(X) >= 5.04818E+1

S19ACF IFAIL = 1 if X > 9.9726E+2

35

S19ADF IFAIL = 1 if X > 9.9726E+2

S21BCF IFAIL = 3 if an argument < 1.583E-205

IFAIL = 4 if an argument >= 3.765E+202

S21BDF IFAIL = 3 if an argument < 2.813E-103

IFAIL = 4 if an argument >= 1.407E+102

X01

f. X01

数学的定数は以下の値を持ちます。

X01AAF (pi) = 3.1415926535897932

X01ABF (gamma) = 0.5772156649015328

g. X02

マシン定数は以下のとおりです。

基本モデルパラメーター

X02BHF = 2

X02BJF = 53

X02BKF = -1021

X02BLF = 1024

X02DJF = .TRUE.

算出された定数

X02AJF = 1.11022302462516E-16

X02AKF = 2.22507385850721E-308

X02ALF = 1.79769313486231E+308

X02AMF = 2.22507385850721E-308

X02ANF = 2.22507385850721E-308

36

その他

X02AHF = 1.42724769270596E+45

X02BBF = 2147483647

X02BEF = 15

X02DAF = .TRUE.

h. X03

X03AAW と X03AAX は内部ルーチンですが NAG Fortran DLL から Export されていま

す。これは Excel などから本 DLL を利用する場合に、これらの内部ルーチンが有効に活

用できるからです。

X03AAWは浮動小数点管理ワードを変更し有効制度をdouble precision(53-bit仮数)に設

定し、丸めモードを最近接丸めに変更します。X03AAW は引数として1つの INTEGER

があり、これは入力時に浮動小数点管理ワードを持ち、出力時に値を呼び出し側へ返し

ます。そのため、このルーチンで現在の値を取得することができます。

X03AAX は浮動小数点管理ワードを1つの INTEGER 引数として指定します。このルー

チンは通常X03AAWで変更された浮動小数点管理ワードをもとに戻す際に使用されます

が、異なる値を設定するために利用することも可能です。

本ライブラリは double precision(53-bit 仮数)で稼働するように設計されています。チッ

プがサポートする extended precision で稼働するようには設計されていません。通常の

Intel Fortran プログラムはこのモードで稼働しますが、他の環境では浮動小数点管理ワ

ードが extended precision に変更されて稼働します。Excel は extended precision で稼

働するソフトウェアの1つです。そのため結果の整合性を求める場合には X03AAW を他

のNAGライブラリルーチンを呼び出す前に呼びdouble precisionで計算が行われるよう

に指定することが可能です。

i. X04

デフォルトのエラーメッセージと支援メッセージの出力先は第 6 ユニットです。

37

6. ドキュメント

ライブラリマニュアルは別インストールパッケージとして提供されます。NAG 社の Web

よりダウンロードしていただく事も、CD からインストールすることも可能です。またマ

ニュアルをオンラインで以下の URL から閲覧する事も可能です。

http://www.nag.co.uk/numeric/FL/FLdocumentation.asp

ライブラリマニュアルは以下の形式で提供されます。

XHTML+MathML

この形式では XHTML と MathML から PDF 形式のマニュアルページへのリンクが

張られています。

PDF

すべてが PDF の形式です。(PDF の形式ブックマークもしくは HTML インデック

スからアクセス可能です)

以下のインデックス(目次)が提供されています。

nagdoc_fl22¥xhtml¥FRONTMATTER¥manconts.xml

nagdoc_fl22¥pdf¥FRONTMATTER¥manconts.pdf

nagdoc_fl22¥html¥FRONTMATTER¥manconts.html

ライブラリマニュアルをインストールした場合、スタートメニューから以下の目次ファ

イルへのアクセスが可能です。

Start|すべてのプログラム|NAG|FL22|NAG Fortran Library Manual (XHTML +

MathML)

Start|すべてのプログラム|NAG|FL22|NAG Fortran Library Manual (PDF)

Start|すべてのプログラム|NAG|FL22|NAG Fortran Library Manual (PDF +

HTML Index)

Internet Explorer を利用して XHTML/MathML 版の example ソース、データ及び結果

を閲覧する場合、それらのリンクは NAG 社の Web サイトへ誘導されます。これはブラ

ウザのセキュリティ設定でこれらのページの閲覧が行えないためです。

その他に以下が提供されます。

in.html –インストールノート(英語版)

un.html – ユーザノート(英語版)

38

ユーザノートは以下のスタートメニューからもアクセス可能です。

Start|すべてのプログラム|NAG|FL22|NAG Fortran Library for Win32

Applications (FLDLL224ML)|Users' Note

39

7. サポート

(a) ご質問等

保守サービスにご加入いただいているお客様は、電子メール、FAX、又は電話にてお問

い合わせ下さい。その際に製品コード及び保守 IDを御明記頂きますようお願い致します。

受付は平日 9:00 ~ 12:00、13:00 ~ 17:00となります。

Email: [email protected]

Tel: 03-5542-6311

Fax: 03-5542-6312

(b) NAG の Web サイト

NAGのWebサイトではNAG製品及びサービス情報など定期的に更新を行っております。

Web サイトアドレスは以下のとおりです。

http://www.nag-j.co.jp/ (日本)

http://www.nag.co.uk/ (英国本社)

http://www.nag.com/ (米国)

8. ユーザフィードバック

NAGではユーザ様よりフィードバックをバージョンアップなどに活かして行きたいと考

えています。フィードバックに御協力頂ける場合は、以下のコンタクト先に記述されて

いる連絡先にご連絡下さい。

40

コンタクト先情報

日本ニューメリカルアルゴリズムズグループ株式会社

(略称:日本 NAG)

〒104-0032

東京都中央区八丁堀 4-9-9 八丁堀フロンティアビル 2F

Tel: 03-5542-6311

Fax: 03-5542-6312

Email: [email protected]

※ 日本ニューメリカルアルゴリズムグループ株式会社より提供されるサービス内容等は

日本国内ユーザ様向け独自のものとなっております。(お問い合わせ先等)