gtool4/Fortran90 reference - library - slice

gtool4/Fortran 90 リファレンスマニュアル

# 変数構成写像機能
（リミット、次元の加除）

2001年10月10日 豊田英司

## 概要

変数 (gt_variable 型) は順序の決まった次元集合をもちます。それぞれの次元には決まった長さがあり、1から長さまでの番号で識別される格子からなっています。しかしながら、必要に応じて変数がもつ次元の順序を入れ替えたり、次元が存在しないようにみせかけたり、各々の次元の長さを変えたり格子番号を付け替えたりできます。

- Limit は次元の入出力範囲を拘束します。Limit を呼び出した後ではスライス機能でその範囲の外に入出力範囲を設定できなくなります。これにより、変数全体ではなく一部を Slice_Next サブルーチンを用いて走査できるようになります。
- 他の変数に次元構成をあわせるために何度か Limit したり del_dim したりする処理は Transform が一度でやってくれます。
- add_dim は変数に次元を追加するサブルーチンのために予約された名前です。
- del_dim は変数から次元を除去します。

## 書式

### 次元番号と範囲を指定して拘束

    subroutine Limit(var, dimord, start, count, stride, err)
        type(GT_VARIABLE), intent(inout):: var
        integer, intent(in):: dimord
        integer, intent(in), optional:: start, count, stride
        logical, intent(out), optional:: err
    end subroutine

変数 var の dimord 番めの次元を基点 start 格子総数 count 間隔 stride に限定します。このあとでは、スライス指定の第1格子は start 番目の格子を指示することになり、スライス指定での格子数は count 個を越えることができなくなり、スライス指定で間引きなしを指定すると stride 個ごとの指定を指示することになります。

### 次元番号と範囲を文字列で指定して拘束

    subroutine Limit(var, string, err)
        type(gt_variable), intent(in):: var
        character(len = *), intent(in):: string
        logical, intent(out), optional:: err
    end subroutine

コンマ記法で書かれた文字列から、任意個の次元に関する拘束を行います。

### 他の変数と同じ範囲に拘束

    subroutine Transform(var1, var2, err)
        type(GT_VARIABLE), intent(inout):: var1, var2
        logical, intent(out), optional:: err
    end subroutine

var1 の構成が var2 と同じになるように次元構成を並べ替え、範囲拘束を行います。過剰な次元が var1 にある場合、隠蔽（追加もできるようにする予定）を行います。

### 変数に次元を追加

    subroutine add_dim(var, dimord, dimvar, err)
        type(GT_VARIABLE), intent(in):: var
        type(GT_VARIABLE), intent(in):: dimvar
        integer, intent(in):: dimord
        logical, intent(out):: err
    end subroutine

次元写像表を拡張し、指定された次元変数 dimvar の URI を登録したあとで有効次元数を増やす。当該次元が縮退していなければ入出力は禁止されるため、Limit(var1, var2) で使うためにしか役に立たなくなる。

### 変数から次元を削除

    subroutine del_dim(var, dimord, err)
        type(GT_VARIABLE), intent(in):: var
        integer, intent(in):: dimord
        logical, intent(out):: err
    end subroutine

次元写像表の順位を下げ有効次元数をデクリメントする。当該次元がすでに縮退していれば、この操作のあとでも入出力が可能である。