EOSHIFT
copyright

green dotEOSHIFT

書式 EOSHIFT(ARRAY,SHIFT[,BOUNDARY][,DIM])
機能 次元数が1である配列式上で要素の移動を行うか、 または次元数が2以上である配列式の指定された次元に 沿った1次元の部分配列のすべてにおいて要素の移動を行う。
部分配列の端から外にはみ出した要素は捨てられ、境界値BOUNDARYの 複製が反対側の端に取り込まれる。
それぞれの部分配列は、異なる境界値をもってもよく、 異なる方向に異なる量だけ移動してもよい。
関数名EOSHIFTは、END-OFF Shift(切り捨て移動)に基づいている。
結果の要素(s1,s2,…,sn)の値は、 ARRAY(s1,s2,…,sDIM-1, sDIM+sh,sDIM+1,…,sn)とする。
ここでshは、不等式 LBOUND(ARRAY,DIM)≦sDIM+SHUBOUND(ARRAY,DIM) を満たすとき SHIFTまたはSHIFT(s1,s2,…, sDIM-1,sDIM+1,…,sn) とし、満たさないときBOUNDARYまたは BOUNDARY(s1,s2,…, sDIM-1,sDIM+1,…,sn)とする。
nはARRAYの次元数とする。
引数
ARRAY任意の型の配列
SHIFT整数型でARRAYの次元数が1である場合、 スカラでなければならない。
ARRAYの次元数が2以上である場合、スカラまたはn-1次元の配列である。
BOUNDARY
(省略可能)
ARRAYと同じ型および種別型パラメタである。
ARRAYの次元数が1である場合、スカラでなけれなならない。 次元数が2以上である場合、スカラまたはn-1次元の配列である。
BOUNDARYは、次表のデータ型に対して省略可能である。
省略したときは、右のスカラ値が指定されたものとする。
DIM
(省略可能)
整数型(1≦DIM≦n)
 DIMを省略したときは、1が指定されたものとする。
ARRAYの型 : BOUNDARYの値
整数型 : 0
実数型 : 0.0
複素数型 : (0.0,0.0)
論理型 : 偽
文字型(長さLEN): LEN個の空白
戻り値 型、種別型パラメタおよび形状は引数ARRAYと同じである。

green dotサンプルプログラム

EOSHIFT関数を用いて2行3列のvの行を下に1行移動する。 移動したあとの要素は0とする。
vの1行目を右へ1列移動し、2行目を左に1列移動する。 移動したあとの要素は999とする。
   ┌───┬───┬───┐
 v │ 1 │ 2 │ 3 │
   ├───┼───┼───┤
   │ 4 │ 5 │ 6 │
   └───┴───┴───┘
   ┌───┬───┬───┐   ┌───┬───┬───┐
 v1│ 0 │ 0 │ 0 │ v2│999│ 1 │ 2 │
   ├───┼───┼───┤   ├───┼───┼───┤
   │ 1 │ 2 │ 3 │   │ 5 │ 6 │999│
   └───┴───┴───┘   └───┴───┴───┘

   INTEGER :: i
   INTEGER,DIMENSION(2,3) :: v,v1,v2
   v(1,:)=(/1, 2, 3/)
   v(2,:)=(/4, 5, 6/)
   v1=EOSHIFT(v,-1)    !BOUNDARYを省略しているので0
   v2=EOSHIFT(v,(/-1,1/),999,2)   !BOUNDARYは999
   WRITE(*,'(6I4)') (v1(i,:),v2(i,:),i=1,2)

実行例
0 0 0 999 1 2 1 2 3 5 6 999
line-end