Post on 18-Oct-2019
NAG Fortran Library, Mark 22
FLL6A22DFL - License Managed
Linux 64 (Intel ® 64 / AMD64), GNU Fortran, Double Precision
ユーザ ノート
内容
1. イントロダクション
2. リリース後の最新情報
3. 一般情報
3.1. ライブラリへのアクセス
3.2. インターフェースブロック
3.3. Example プログラム
3.4. 強調斜体文字の解釈
3.5. NAG ルーチンからの出力
4. ルーチン毎の情報
5. ドキュメント
6. サポート
7. ユーザフィードバック
追記 - コンタクト先情報
1
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/l6adfl/postrelease.html
2
3. 一般情報
パフォーマンス面を考えますと AMD Core Math Library (ACML) を利用するバージョ
ンの NAG Fortran Library(libnag_acml.a, libnag_acml.so)のご利用を推奨しま
す。もし、本製品で提供される ACML 4.2.0 とは異なるバージョンの ACML と共にライ
ブラリを利用された場合に問題が発生する場合は、本製品で提供される ACML と共にラ
イブラリをご利用いただくか、もしくは、ACML を利用しないバージョンの NAG
Fortran Library(libnag_nag.a, libnag_nag.so)をご利用ください。
3.1. ライブラリへのアクセス
本セクションでは[INSTALL_DIR]にライブラリがインストールされていることが前提
となります。
デフォルトの[INSTALL_DIR]は、(システムに依りますが)/opt/NAG/fll6a22dfl
もしくは/usr/local/NAG/fll6a22dflとなります。
また、インストールの際[INSTALL_DIR]を指定することもできます。
/opt/NAG/fll6a22dflが存在していたら、これが[INSTALL_DIR]になります。
/usr/local/NAG/fll6a22dfl が存在していたら、これが[INSTALL_DIR]にな
ります。
そうでなければ、インストール時に指定したインストール先が[INSTALL_DIR]にな
ります。
NAG Fortran Library を本製品で提供される ACML と共に利用する場合には、以下のよ
うにリンクを行ってください。(driver.fがユーザプログラムです)
gfortran –m64 driver.f [INSTALL_DIR]/lib/libnag_acml.a \
[INSTALL_DIR]/acml/libacml.a
または、共有ライブラリを利用する場合は、
gfortran –m64 driver.f [INSTALL_DIR]/lib/libnag_acml.so
もし、ACML を利用しないバージョンの NAG Fortran Library を利用する場合は、以下
のようにリンクを行ってください。
3
gfortran –m64 driver.f [INSTALL_DIR]/lib/libnag_nag.a
または、共有ライブラリを利用する場合は、
gfortran –m64 driver.f [INSTALL_DIR]/lib/libnag_nag.so
NAG Fortran Libraryと本製品で提供されるACMLがリンカーのサーチパス上のディレ
クトリ(/usr/lib 等)からシンボリックリンクによってポイントされている場合は、
上記の代わりに以下のようにリンクを行うことができます。
gfortran –m64 driver.f -lnag_acml
同様に、ACML を利用しないバージョンの NAG Fortran Library を利用する場合は、
gfortran –m64 driver.f -lnag_nag
この場合、スタティックライブラリと共有ライブラリが同じ場所にある場合は、通常、
共有ライブラリが優先的にリンクされます。
共有ライブラリの NAG Fortran Library と ACML を利用する場合には、環境変数
LD_LIBRARY_PATHを正しく設定し、実行時のリンクが行えるようにしてください。
例えば、C シェルの場合、
setenv LD_LIBRARY_PATH [INSTALL_DIR]/lib:[INSTALL_DIR]/acml
のように LD_LIBRARY_PATH を設定するか、既に設定している場合には、次のように拡
張します。
setenv LD_LIBRARY_PATH [INSTALL_DIR]/lib:[INSTALL_DIR]/acml:${LD_LIBRARY_PATH}
あるいは、Bourne シェルの場合、
LD_LIBRARY_PATH=[INSTALL_DIR]/lib:[INSTALL_DIR]/acml
export LD_LIBRARY_PATH
4
のように LD_LIBRARY_PATH を設定するか、既に設定している場合には、次のように拡
張します。
LD_LIBRARY_PATH=[INSTALL_DIR]/lib:[INSTALL_DIR]/acml:${LD_LIBRARY_PATH}
export LD_LIBRARY_PATH
また、場合に依っては(例えば、より新しいバージョンのコンパイラをご利用になる場
合など)コンパイラの実行時ライブラリのようなその他ファイルを指し示すように
LD_LIBRARY_PATHを設定する必要があるかもしれません。
3.2. インターフェースブロック
NAG Fortran Library インターフェースブロックは、ライブラリルーチンの型および引
数を定義しますが、Fortran プログラムから NAG Fortran Library を呼び出す際に必ず
必要という性質のものではありません。(これにより NAG Fortran Library が正しく呼
び出されているかどうかのチェックを Fortran コンパイラに任せる事ができます。)具体
的には、コンパイラが以下のチェックを行うことを可能とします。
(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
5
nag_f77_h_chapter
nag_f77_m_chapter
nag_f77_p_chapter
nag_f77_s_chapter
nag_f77_x_chapter
これらのファイル(*.mod)はプリコンパイルモジュールとして提供されます。コンパイ
ル時に-I”pathname”オプションを使用し、これらのモジュールファイルの位置
([INSTALL_DIR]/nag_interface_blocks)を指定してください。
これらのモジュールを Fortran 77 のコードで利用する場合は、以下のような変更を加え
てください。
USE 文を追加し、コード内で呼んでいるルーチンが含まれるチャプターのモジュー
ルを指定する。BLAS および LAPACK ルーチンに対するインターフェースブロック
は nag_f77_f_chapterにあります。
NAG Fortran Library ルーチン(BLAS および LAPACK ルーチンを含む)に対する
EXTERNAL 文を全て削除する。(モジュール内で宣言されるため必要ない。)
NAG Fortran Library ルーチンに対する型宣言を削除する。(モジュール内で宣言
されるため必要ない。)
以下に例として、変更を加えた 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
6
INTEGER IFAIL, NPTS
* .. 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
7
IF (IFAIL.GT.0) WRITE (NOUT,99998) 'IFAIL = ', IFAIL
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 *
8
USE NAG_F77_X_CHAPTER, ONLY: X01AAF
* *
*****************************************************
* .. 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
9
3.3. Example プログラム
提供されている Example 実行結果はインストールノートのセクション 2.2 に記述されて
いるソフトウェアを使い Mark 22 で生成されています。実行結果は異なる環境下(例え
ば、異なる Fortran コンパイラ、異なるコンパイラライブラリ、異なる BLAS または
LAPACK など)で異なる結果を出す場合があります。特に、固有ベクトル(スカラー値
(多くの場合-1)を掛けた値となる)、繰り返し計算および関数評価、残差、マシン精度
と同じくらい小さい値を扱う計算などは、異なる結果を出す場合があります。
Example プログラムの内容は本製品で実行可能なように、ライブラリマニュアルに記載
/提供されているものに比べて、若干の変更が加えられている場合もあります。
[INSTALL_DIR]/scriptsには nag_example_acml, nag_example_shar_acml,
nag_example, nag_example_sharの4つのスクリプトが提供されます。
これらのスクリプトを利用し Example プログラムを簡単に利用する事ができます。
nag_example_acmlはNAGスタティックライブラリlibnag_acml.aおよび合わ
せて提供される ACML ライブラリを利用します。
nag_example_shar_acmlは NAG 共有ライブラリ libnag_acml.soおよび合わ
せて提供される ACML ライブラリを利用します。
nag_exampleは NAG スタティックライブラリ libnag_nag.aを利用します。
nag_example_sharは NAG 共有ライブラリ libnag_nag.soを利用します。
各々のスクリプトは Example プログラムのソースコードと入力データのコピーを作り、
コンパイル/リンク/実行を行います。
利用したい example プログラムを引数に指定します。
例えば以下のように打ち込んでください。
例)
nag_example_acml e04ucf
この例では e04ucfルーチンの Exampleプログラムのソースファイルe04ucfe.fおよ
び入力データファイル e04ucfe.dをカレントディレクトリにコピーし、コンパイル/リ
ンク/実行を行い、結果を生成します。
10
提供されている Example 結果は、NAG スタティックライブラリ libnag_acml.a
(ACML BLAS と LAPACK ルーチンを使用)を用いて算出されています。
libnag_nag.aや libnag_nag.so(NAG BLAS と LAPACK ルーチンを使用)を用い
た場合は、結果が若干異なるかもしれません。
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は 10-16に近い値を持ちます。
machine precisionの正確な値はルーチン X02AJF を使って確認できます。チャプタ
ーX02 のその他のルーチンを使うと、オーバーフロー用の閾値や表現可能な最大整数と
いった実装異存の定数値を求めることができます。詳細については X02 Chapter
Intoroduction をご参照ください。
brock sizeという表現はチャプターF07 と F08 の中でのみ使用されています。それは
これらのチャプターにおけるブロックアルゴリズムによって用いられているブロックサ
イズを表すものです。用意すべき作業エリアの量に影響が及ぶ場合にのみ、この値に留
意する必要があります。関係するルーチンドキュメントとチャプターイントロダクショ
ンに記述されているパラメータ WORK と LWORK についてご参照ください。
11
チャプターF06, F07, F08 においては BLAS と LAPACK 由来のルーチンに対し別個のル
ーチン名が用意されています。これらの名称については関係するチャプターイントロダ
クションをご参照ください。パフォーマンス面を考えますと、NAG スタイルの名前より
も BLAS/LAPACK スタイルの名前でルーチンを使用してください。
3.5. NAG ルーチンからの出力
いくつかのルーチンは、エラーメッセージや提案(advisory)メッセージを出力します。
出力装置番号は、X04AAF(エラーメッセージの場合)または X04ABF(提案メッセー
ジの場合)で再設定する事が可能です。デフォルト値はセクション 4 をご参照ください。
これらのメッセージの最大レコード長(コントロール文字等を含む)は特に指定がない
場合は 80 文字です。これらのルーチンはスレッドセーフではありませんので、一般的に
マルチスレッド環境での出力は推奨されません。
12
4. ルーチン毎の情報
以下にチャプター毎のルーチン情報を示します。
(a) F06, F07, F08
多くの LAPACK ルーチンは「workspace query」メカニズムを利用します。ルーチン呼
び出し側にどれだけのワークスペースが必要であるかを聞くメカニズムですが、NAG が
提供する LAPACK と ACML が提供する LAPACK ではこのワークスペースサイズが異
なる場合がありますので注意してください。
(b) G02
この章で出てくる ACC の値(マシン依存の定数)は 1.0D-13 です。
(c) P01
エラー(hard failure)の際、P01ABF はエラーメッセージを X04AAF で指定される装
置番号へ出力し、停止します。
(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
13
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
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
14
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
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
(e) X01
数学的定数は以下に示される値を持ちます。
X01AAF (pi) = 3.1415926535897932
X01ABF (gamma) = 0.5772156649015328
15
(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 = 2.22507385850721E-308
その他コンピュータ環境のパラメータ
X02AHF = 1.42724769270596E+45
X02BBF = 2147483647
X02BEF = 15
X02DAF = .TRUE.
(g) X04
エラーメッセージおよび提案(advisory)メッセージのデフォルトの出力先装置番号は 6
番となります。
16
5. ドキュメント
ライブラリマニュアルは本製品の一部として提供されます。また、ライブラリマニュア
ルの最新版は、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
各形式の閲覧方法、操作方法については Online Documentation をご参照ください。
加えて、以下のドキュメントが提供されます。
in.html – インストールノート(英語版)
un.html – ユーザノート(英語版)
17
6. サポート
(a) ご質問等
保守サービスにご加入いただいているお客様は、電子メール(または電話|FAX)にて
「日本 NAG ヘルプデスク」までお問い合わせください。
その際、製品コード(FLL6A22DFL等)および保守 ID を御明記いただきますようお願い
致します。受付は平日 9:00~12:00、13:00~17:00となります。
日本 NAG ヘルプデスク
Email: naghelp@nag-j.co.jp
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/ (米国)
18
7. ユーザフィードバック
NAGではユーザ様よりフィードバックをバージョンアップなどに活かして行きたいと考
えています。フィードバックに御協力いただける場合は、以下のコンタクト先に記述さ
れている連絡先にご連絡ください。
コンタクト先情報
日本ニューメリカルアルゴリズムズグループ株式会社
(略称:日本 NAG)
〒104-0032
東京都中央区八丁堀 4-9-9 八丁堀フロンティアビル 2F
Email: sales@nag-j.co.jp
Tel: 03-5542-6311
Fax: 03-5542-6312
※ 日本ニューメリカルアルゴリズムグループ株式会社より提供されるサービス内容は、
(お問い合わせ先等)日本国内ユーザ様向けに独自のものとなっております。