next up previous
Next: RESHAPE(source,shape,[pad],[order]) Up: 函数/FORTRAN表現早見表 Previous: ANY/ALL([dim],mask)

CSHIFT(array,shift,[dim])/EOSHIFT(array,shift,[bound],[dim])

CSHIFTは配列をshiftだけ左に循環的にずらす。1, 2, 3 を+1cshiftすると2, 3, 1。
EOSHIFTは配列をshiftだけ左に排斥的にずらす。1, 2, 3 を+1cshiftする と0, 1, 2。


\begin{lstlisting}
real(4) :: a(4) = (/ 3.0, 4.0, 2.0, 8.0 /)
!! a(1) a(2) a(3)...
...(1:n)=a(2:n+1)
print *, eoshift(a,shift=1) !! 4.0 2.0 8.0 0.0
\end{lstlisting}

Fortran77による等価な表現。
\begin{lstlisting}
integer(4) :: i
real(4) :: b(4)
do i = 1, 3
b(i) = a(i+1)
end do
b(4) = a(1) !! cshiftの場合
b(4) = 0.0 !! eoshiftの場合
\end{lstlisting}

差分への応用(周期境界条件の場合)。
\begin{lstlisting}
real(4) :: b(4)
b(:) = cshift(a,shift=1) - cshift(a,shift=-1)
\end{lstlisting}



Masaru Inatsu
平成18年3月17日