nAG Fortran コンパイラ 7.2 マニュアル

 
ナビゲーション:前へ   上へ   次へ

11.3 データの使用と計算

  • [7.1] SELECT RANK構文は、Fortran内で次元数引継ぎ実体の使用を容易にします。 書式は以下の通りです
      [ construct-name ] SELECT RANK ( [ assoc_name => ] assumed-rank-variable-name )
            [ rank-stmt
                block ]...
      END SELECT [ construct-name ]
    
    ここでrank-stmtは以下のいずれかです:
      RANK ( scalar-int-constant-expression ) [ construct-name ]
      RANK ( * ) [ construct-name ]
      RANK DEFAULT [ construct-name ]
    
    特定のSELECT RANK構文では、複数のRANK DEFAULT文、複数のRANK (*)文、もしくは複数の 同じ値の整数式を持つRANK (整数)が存在してはなりません。 次元数引継ぎ変数にALLOCATABLEまたはPOINTER属性がある場合、RANK(*)文は許可されていません。

    整数定数式を使用したRANK文に続くblockは、次の場合に実行されます。 次元数引継ぎ変数は、その次元数を持つ非次元数引継ぎの実引数に関連付けられていて、大きさ引継ぎの配列ではありません。 block内では、その次元数の形状引継ぎ配列であるかのように機能します。

    RANK(*)に続くblockは、末端引数が大きさ引継ぎの配列である場合に実行されます。 block内では、境界‘(1:*)’で宣言されているかのように機能します。 境界が異なる場合、または次元数が必要な場合は、連続結合を使用して別の手続きに渡すことができます。

    RANKDEFAULT文に続くblockは、他のブロックが選択されていない場合に実行されます。 この場合block内では依然として次元数引継ぎ変数です。つまり、変更はありません。

    以下にSELECTRANK構文の簡単な例を示します。

      Program select_rank_example
        Integer :: a = 123, b(1,2) = Reshape( [ 10,20 ], [ 1,2 ] ), c(1,3,1) = 777, d(1,1,1,1,1)
        Call show(a)
        Call show(b)
        Call show(c)
        Call show(d)
      Contains
        Subroutine show(x)
          Integer x(..)
          Select Rank(x)
          Rank (0)
            Print 1,'scalar',x
          Rank (1)
            Print 1,'vector',x
          Rank (2)
            Print 1,'matrix',x
          Rank (3)
            Print 1,'3D array',x
          Rank Default
            Print *,'Rank',Rank(x),'not supported'
          End Select
        1 Format(1x,a,*(1x,i0,:))
        End Subroutine
      End Program
    
    上記は以下を出力します。
     scalar 123
     matrix 10 20
     3D array 777 777 777
     Rank 5 not supported
    
Privacy Policy  /  Trademarks