Fortran ユーザーズガイド | ![]() ![]() ![]() ![]() ![]() |
付録 C
Fortran 95 の機能と相違点
この付録では、以下の Fortran の機能の主な相違点について説明します。
機能
Sun WorkShop 6 Fortran 95 は、以下に示す機能を備えています。
継続行の制限
f95
とf77
では 99 行まで行を継続することができます (開始行が 1 行とその後の継続行が 98 行ということです)。標準の Fortran 95 では、固定形式の場合で 19 行まで、自由形式の場合で 39 行までです。固定形式固定形式のソースの行
固定形式のソースの場合、1 行に 73 文字以上使用できます。ただし、73 カラム目以降はすべて無視されます。標準の Fortran 95 では、行の長さは 72 文字までです。
指令
f95
では、指令行がCDIR$
、!DIR$
、CMIS$
、C$PRAGMA
、C$OMP
または!MIC$
で開始できるようになりました。指令の要約については、付録 E を参照してください。標準 Fortran 95 には、指令の機能はありません。タブ書式
f95 の固定形式のタブ書式のソーステキストは以下のように定義されます。
- 1 カラム目〜 6 カラム目にタブがある場合、行はタブ書式のソース行になります。
- 注釈インジケータまたは文番号をタブの前に挿入できます。
- タブが最初の空白文字でない場合 :
f95
のデフォルトの行の最大長は、固定形式の場合は 72 カラムで、自由形式の場合は 132 カラムです。-e
コンパイラオプションを使用すると、固定形式のソース内の行を 132 カラムまで拡張できます。
この例では、タブ文字は 「
^I
」 で示されており、「1」 または 「2」 で始まっている行が継続行です。また、1 つの書式ではなく、さまざまなタブ書式がコーディングで示されています。使用するソースの書式
f95
で使用するソースの書式は、オプション、指令、拡張子によって異なります。
表 C-1 F95
ソース書式のコマンド行のオプション-fixed
すべてのソースファイルが Fortran の固定形式で記述されていると解釈します。 -free
すべてのソースファイルが Fortran の自由形式で記述されていると解釈します。
-free
および-fixed
オプションは、ファイル名の拡張子よりも優先されます。FREE 指令または FIXED 指令を使用すると、オプションおよびファイル名の拡張子よりも優先されます。書式の混在
以下のように、異なるソースの書式を混在させてもかまいません。
- 1 つの
f95
のコマンドで、固定形式のソースファイルと自由形式のソースファイルを混在させることができます。- 指令を使用することによって、1 つのファイル内で、自由形式と固定形式を混在させることができます。
- 1 つのプログラム単位で、タブ書式を自由形式または固定形式と混在させることができます。
大文字・小文字の区別
Sun Fortran 95 では、デフォルトでは大文字・小文字が区別されません。すなわち、
AbcDeF
という変数は、abcdef
と同じ文字列として扱われます。-U
オプションを付けてコンパイルすると、コンパイラは大文字と小文字を区別します。既知の制限
Fortran 95 のプログラム単位には、最高 65,535 個の導出型、および最高 16,777,215 個の定数を定義できます。
ブール (Boolean) 型
f95
では、ブール型の定数と式をサポートしています。ただし、ブール型の変数、配列、文はサポートしていません。ブール型に関する規則
- マスク処理 -- ビット単位の論理式ではブール型の結果が生成されます。個々のビットは、対応する演算対象のビットで行われた 1 つまたは複数の論理演算の結果を表します。
- 2 進の算術演算子および関係演算子では、以下のように処理されます。
- ユーザー定義の関数によってブール型の結果を生成することはできません。ただし、一部の (標準でない) 組み込み関数では可能です。
- ブール型と論理型には、以下のような相違点があります。
ブール型定数の別の書式
f95
では、ブール型定数 (8 進、16 進、ホレリス) を、以下に示すような書式 (2 進ではありません) で使用することができます。標準の Fortran では、変数をブール型と宣言することはできません。8 進
B
またはb
のどちらの文字を使用してもかまいません。- 1 桁から 11 桁までの 8 進数 (0 から 7) を使用できます。
- 11 桁の 8 進数は 32 ビットの完全なワードを表します。左端の数字は常に 0、1、2、3 のいずれかです。
- 8 進の個々の数字は 3 ビットの値を表します。
- 右端の桁は、右 3 ビット (29、30、31 ビット) の内容を表します。
- 11 桁未満の場合は、値は右揃えされます。ワードの右端にある n ビットから 31 ビットまでが使用され、それ以外のビットはゼロになります。
- 空白は無視されます。
入出力の書式指定では
B
という文字は 2 進数であることを示しますが、それ以外の場合は 8 進数であることを表します。16 進
d が任意の 16 進の数字である X'ddd' または X"ddd" の書式です。
- 1 桁から 8 桁までの 16 進数 (0 から 9、
A
からF
) を使用できます。- 文字は大文字でも小文字でもかまいません (
X、x、A
から
F、a
から
f
)。- 数字は引用符 (アポストロフィ) または二重引用符で囲まなければなりません。
- 空白は無視されます。
- 16 進数の始めに + か - の記号を付けてもかまいません。
- 8 桁の 16 進数は 32 ビットの完全なワードを表しています。この 32 ビットワードの各ビットの内容は、同じ値を表す 2 進数に対応しています。
- 8 桁未満の場合は、値は右揃えされます。ワードの右端にある n ビットから 31 ビットまでが使用され、それ以外のビットはゼロになります。
ホレリス
0B
00000000000
77740B
00000077740
X"ABE"
00000005276
X"-340"
37777776300
X'1 2 3'
00000000443
X'FFFFFFFFFFFFFFFF'
37777777777
i = 1357B
j = X"28FF"
k = X'-5A'
算術式の中で 8 進数または 16 進数の定数を使用すると、結果が未定義になることがあります。ただし、構文エラーにはなりません。
別の場所におけるブール型定数の使用
f95
では、DATA
文以外の場所でBOZ
定数を使用することができます。このような
BOZ
定数が実数変数に代入されている場合には、型は変換されません。標準の Fortran では、
BOZ
定数はDATA
文でしか使用できません。数値データ型のサイズの略記法
f95
では、宣言文、関数文、IMPLICIT
文において、以下のような非標準の書式で型を宣言することができます。
1 列目の形式は一般に使用されていますが、非標準の Fortran 95 です。2 列目の種別番号はベンダーにより変わります。
Cray ポインタ
Cray ポインタとは、別の変数や配列などのアドレスを値にもつ変数のことです。この別のもののことを、指示先と呼びます。
f95
は Cray ポインタをサポートしています。標準の Fortran 95 ではサポートされていません。構文
Cray ポインタの
POINTER
文は以下の形式で記述します。
POINTER ( ポインタ名, 指示先名 [配列の仕様] ), ...ポインタ名、指示先名、配列の仕様のそれぞれの意味は、以下のとおりです。
例 : 2 つの指示先に対して Cray ポインタを宣言します。
POINTER ( p, b ), ( q, c )上記の例では、Cray ポインタ
p
とその指示先b
、Cray ポインタq
とその指示先c
を宣言しています。
POINTER ( ix, x(n, 0:m) )この例では、Cray ポインタ
ix
とその指示先x
を宣言しています。同時に、x
はn
とm-1
次元の
配列であることを宣言しています。Cray ポインタの目的
ポインタを使用すると、記憶領域の特定の場所に変数を動的に対応づけ、ユーザーが管理する記憶領域にアクセスすることができます。
Cray ポインタでは、メモリーの絶対的な場所にアクセスすることができます。
最適化のために同じ値をもつポインタは存在しないと仮定しているので、Cray ポインタではリンクをリストして操作することはできません。
Cray ポインタと Fortran のポインタ
POINTER ( ポインタ名
, 指示先名 [配列の仕様])
POINTER オブジェクト名
Cray ポインタの機能
- 指示先が引用されるたびに、
f95
はポインタの現在の値を指示先のアドレスとして使用します。- Cray ポインタ型の文では、ポインタと指示先の両方を宣言します。
- Cray ポインタは Cray 型のポインタです。
- Cray ポインタの値は、領域の 1 単位を占めます。値が占める領域は使用中のマシンのメモリーサイズによって異なります。
- Cray ポインタは
COMMON
の並びまたは仮引数で使用することができます。- Cray ポインタの値が定義されるまでは、指示先にアドレスはありません。
- 指示先として配列が指定されている場合、その配列を指示先配列と呼びます。
Cray ポインタの制限事項
- 指示先名は、
CHARACTER*(*)
で型宣言された変数であってはなりません。- 指示先名が配列の宣言子である場合は、明示的な実体があるもの、(定数または非定数のサイズを持つもの)、または仮のサイズをもつものでなければなりません。
- Cray ポインタを配列にすることはできません。
- Cray ポインタを以下のように扱うことはできません。
- Cray ポインタを以下の場所で使用することはできません。
Cray ポインタの指示先の制限事項
- Cray ポインタの指示先を、
SAVE
、DATA
、EQUIVALENCE
、COMMON
、PARAMETER
文で使用することはできません。- Cray ポインタの指示先を仮引数にすることはできません。
- Cray ポインタの指示先を関数値にすることはできません。
- Cray ポインタの指示先を構造体または構造体の成分にすることはできません。
- Cray ポインタの指示先を派生型にすることはできません。
Cray ポインタの使用法
Cray ポインタには以下のようにして値を割り当てることができます。
- 絶対アドレスに設定します。
- 例 :
q = 0
- 整数変数の加減式によって割り当てます。
- 例 :
p = q + 100
- 例 :
p = LOC ( x )
word64
は絶対アドレス 64 の内容を参照します。blk
はメモリーの最初の 128 ワードを占める配列です。a
は空白共通ブロックにある配列で、長さは 1,000 です。b
はa
の後に位置し、長さはn
です。c
はb
の後に位置します。a
、b
、c
はpool
領域に関連付けられています。word64
はblk(17)
と同じです。Cray ポインタはバイトアドレスであり、blk
の整数要素はそれぞれ 4 バイトの長さがあるためです。最適化と Cray ポインタ
最適化を図るため、
f95
では指示先の領域は他の変数の領域とは重ならないようにしています。つまり、指示先は他の変数とは関連づけられていないとみなされます。ただし、以下の 2 つの場合には関連が生じる可能性がありますので注意してください。
このような関連付けは、配列の等値化などで意図的に行われる場合もあります。ただし、このときの実行結果は最適化を実行するかどうかによって異なる可能性があります。
POINTER ( p, b ), ( p, c )REAL x, b, cp = LOC( x )b = 1.0c = 2.0PRINT *, b...上記の例では、
b
とc
のポインタが同じであるため、c
に 2.0 を代入すると同じ値がb
にも割り当てられます。このため、b
に 1.0 がすでに代入されていても、出力結果は 2.0 になります。組み込み関数
f95
は標準の処理を拡張した組み込み関数をサポートしています。
P 名前を引数として渡すことができる NP 名前を引数として渡すことはできない E 組み込み関数の外部コードは実行時に呼び出される I f95
が組み込み関数のインラインコードを生成する
入出力拡張機能
Sun FORTRAN 77 の一部の入出力拡張機能が Fortran 95 のコンパイラに追加されました。
- NAMELIST 入出力形式
- 入力時にグループ名の先頭に
$
または&
が付きます。&
は、Fortran 95 の規格だけが受け付ける形式であり、NAMELIST 出力によっても書き込まれます。- 入力の終了を表す記号として
$
を受け付けます。ただし、グループ内の最後のデータ項目がCHARACTER
データである場合は別です。その場合、$
は、入力データとして扱われます。- NAMELIST 入力は、レコードの最初のカラムから開始することができます。
OPEN (...,FORM='BINARY')
は、レコードマークなしのバイナリデータとしてファイルを扱います。
FORM='BINARY'
が指定されたファイルのオープンは、FORM='UNFORMATTED'
を指定した場合と同じ効果があります。ただし、レコード長がファイルに埋め込まれません。このデータがないと、どこでレコードが開始し、どこで終了するかを示す手段がありません。したがって、FORM='BINARY'
が指定されたファイルにBACKSPACE
操作を行うことはできません。なぜなら、どこまで現在記録を前に位置付けするかを指示する方法がないからです。'BINARY'
ファイルに対するREAD
は、入力リスト上の変数を満たすのに必要なだけのデータを読み込みます。
WRITE
文:データは、バイナリ形式のファイルに書き込まれます。出力リストで指定したバイト数が転送されます。READ
文:データは、入力リスト上の変数に読み込まれます。リストで必要なバイト数が転送されます。ファイル上にレコードマークがないので、「レコードの終わり」というエラーが検出される可能性はありません。検出されるエラーは、「ファイルの終わり」またはシステムの異常だけです。INQUIRE
文:FORM="BINARY"
を指定してオープンされたファイルに対するINQUIRE
では、次のものが返されます。BACKSPACE
文:使用できません。エラーが返されます。ENDFILE
文:通常どおり、現在の位置でファイルが打ち切られます。REWIND
文:通常どおり、ファイルをデータの開始に位置付けます。- さまざまな装置に対し再帰的な入出力が可能です (これは、
f95
の入出力ライブラリが「MT-Warm」だからです)。RECL=2147483646
(231 -2) は、順番に書式化された、並びによる変数群 出力上のデフォルトのレコード長です。ENCODE
およびDECODE
は、『FORTRAN 77 言語リファレンス』で説明するように認識され、実装されています。- スクラッチファイルの命名方法は、
f77
と同じです。- 次に示すように、
ADVANCE='NO'
で非前進入出力が可能になります。指令
コンパイラ指令は、特別な動作をするようにコンパイラに指示します。プラグマとも呼ばれます。
コンパイラ指令は 1 行または複数行のテキストとしてソースプログラムに挿入されます。コンパイラ指令は一見注釈に似ていますが、注釈にはない特別な文字が付加されています。Fortran 95 以外のほとんどのコンパイラでは指令を注釈として扱うので、コードの一定の移植性は保たれます。
f95
(およびf77
) では、サン形式の指令がデフォルトとして設定されています。Cray 形式の指令に切り換えるには、コンパイラコマンド行フラグの-mp=cray
を使用してください。Fortran 指令については、付録 E にまとめられています。
f95
の特殊な指令行の書式
f95
は、第 2 章に示すようなf95/f77
の一般的な指令に加え、独自の特殊な指令を認識します。構文は次のようになります。
!DIR$ d1,d2, ...
ソースが固定形式の場合
CDIR$
または!DIR$
を 1 カラム目から 5 カラム目に記述します。- 指令を 7 カラム目以降に記述します。
- 73 カラム目以降は無視されます。
- 新たに始まる指令行では、6 カラム目を空白とします。
- 指令の継続行では、6 カラム目に空白以外の文字を記述します。
ソースが自由形式の場合
!DIR$
の後に空白を 1 つつけて、行の任意の位置に記述できます。!DIR$
文字は、その行の空白でない最初の文字となります。- 指令は空白の後に記述します。
- 新たに始まる指令行では、
!DIR$
の直後に空白、タブ、または改行が続きます。- 指令の継続行では、
!DIR$
の直後に空白、タブ、改行以外の文字が続きます。これらのことから、
!DIR$
を 1 カラム目から 5 カラム目に記述しておけば、自由形式または固定形式のどちらのソースでも機能することがわかります。FIXED 指令と FREE 指令
範囲
指令が適用される範囲は、ファイル内に指令が出現してから最後までの部分、または次に
FREE
あるいはFIXED
が出現するまでの部分です。使用法
- 1 つのソースファイル内でソースの書式を切り換えることができます。
INCLUDE
ファイルのソースの書式を切り換えることができます。INCLUDE
ファイルの先頭に指令を挿入すると、INCLUDE
ファイルが処理された後に、ソースの書式がINCLUDE
ファイルの処理前の書式に戻ります。制限事項
FREE
指令とFIXED
指令には以下の制限事項があります。
!DIR$ FREEDO i = 1, na(i) = b(i) * c(i)END DO並列化の指令
並列化の指令は、コンパイラに次の
DO
ループの並列化処理を指示する特別な注釈です。これらに関する概要は、付録 E と『Fortran プログラミングガイド』に記載されています。f95
は、f77
の Sun および Cray 形式の並列化指令だけでなく、OpenMP Fortran API 指令も認識します。
注 - Fortran の並列化機能には、Sun WorkShop HPCのライセンスが必要です。
Fortran 77 との互換性
ソース
標準に準拠した固定形式 (
filename.F
) の FORTRAN 77 のソースコードにはサンの Fortran 95 との互換性が保証されます。たとえば、VMS Fortran の機能などの標準以外の拡張機能を使用すると、互換性がなくなり、サンの Fortran 95 でのコンパイルはできません。制約
f77
コンパイラでは、配列添え字を最高 20 個まで使用できますが、f90
では、7 個しか使用できません。f77 でコンパイルしたルーチンとのリンク
f77
とf95
のオブジェクトバイナリを混在させるには、f95
およびf77
互換性ライブラリlibf77compat
(libF77
ではない) とリンクします。たとえば、メインプログラムがf77
プログラムの場合でも、f95
..files..-lf77compat
でリンクを行います。
- 例 :
f95
のメインとf77
のサブルーチンです。
通常、
FORTRAN 77 ライブラリはf95
と互換性があります。
- 例 : FORTRAN 77 のライブラリからルーチンを呼び出す
f95
のメインです。
dtime
(3F) を参照してください。入出力
f95
がf77
の互換ライブラリにリンクされるので、f77
とf95
のバイナリ入出力には互換性があります。バイナリ入出力に互換性があるので、以下のような状況でも実行することができます。
読み込まれた数字と書き込まれた数字が一致しない場合があります。
- 書式なしの場合
- 浮動小数点の書式付きの場合
- 読み込まれた数字と書き込まれた数字が一致しないことがあります。これは、基数変換ルーチンが若干異なることや、大文字・小文字、空白、プラス・マイナス記号などの規則が異なるためです。
- 例 : 1.0e12、1.0E12、1.0E+12
- 並びによる入出力の場合
組み込み関数
Fortran 95 の標準機能として、以下に示すような組み込み関数が新たにサポートされました。これらの関数は FORTRAN 77 にはありません。
以下の名前をユーザープログラムで使用する場合は、
EXTERNAL
文を追加し、組み込み関数ではなくユーザー関数を使用するようにf95
に指示する必要があります。Fortran 95 の組み込み関数には、以下のものがあります。
ADJUSTL,ADJUSTR,ALL,ALLOCATED,ANY,BIT_SIZE,COUNT,CSHIFT,
DIGITS,DOT_PRODUCT,EOSHIFT,EPSILON,EXPONENT,HUGE,KIND,
LBOUND,LEN_TRIM,MATMUL,MAXEXPONENT,MAXLOC,MAXVAL,MERGE,
MINEXPONENT,MINLOC,MINVAL,NEAREST,PACK,PRECISION,
PRESENT, PRODUCT,RADIX,RANGE,REPEAT,RESHAPE,RRSPACING,
SCALE,SCAN, SELECTED_INT_KIND,SELECTED_REAL_KIND,
SET_EXPONENT,SHAPE,SIZE,SPACING,SPREAD,SUM,TINY,
TRANSFER,TRANSPOSE,UBOUND, UNPACK,VERIFY将来のバージョンとの互換性
ソースコードは、
f95
の本リリースと将来のリリースで互換となる予定です。
f95
の本リリースでモジュール情報ファイルを作成する場合、そのファイルが将来のリリースと互換性があるかどうかは保証されません。言語の混在
Solaris システムでは、C で書かれたルーチンを Fortran のプログラムと組み合わせることができます。C と Fortran では呼び出し規則が共通なためです。
モジュールファイル
Fortran 95 の
MODULE
を含むファイルをコンパイルすると、ソースで検出されたMODULE
ごとにモジュールファイル (.mod
ファイル) が生成されます。ファイル名はMODULE
名を基に付けられます。たとえば、MODULE.xyz
からはxyz.mod
(すべて小文字) というファイル名が作成されます。デフォルトでは、このようなファイルは現在作業中のディレクトリで検索されます。
-Mdir
オプションを指定すると、別の場所も検索するようにf95
に指示することができます。
サン・マイクロシステムズ株式会社 Copyright information. All rights reserved. |
ホーム | 目次 | 前ページへ | 次ページへ | 索引 |