Program Rshape !This file: http://ftp.aset.psu.edu/pub/ger/fortran/hdk/Reshape3D.f90 ! ! Illustrates Reshaping a 3D Matrix. ! by Dick Hendrickson and James Van Buskirk - 28 July 2003. ! Question posed by Ryan Peterson. ! Assumption: nr=nz integer :: i,j,k,L,nr=2, nt=3 ,nz=2 real, allocatable, dimension(:,:,:) :: A allocate (A(nr,nt,nz)) ! Initialize and display original matrix. L=0 do i=1,nr do j=1,nt do k=1,nz L=L+1 A(i,j,k)=L end do end do end do do i=1,nr do j=1,nt print *, (a(i,j,k),k=1,nz) end do end do print *, ' ' ! Ryan Peterson asks: ! I'd like to move data around in an already made 3d matrix so that ! the data in matrix A(nr,nt,nz) is reordered to A(nz,nt,nr). ! ! ! Dick Hendrickson's solution. DO I = 1,NT A(:,I,:) = TRANSPOSE (A(:,I,:)) END DO do i=1,nr do j=1,nt print * , (a(i,j,k),k=1,nz) end do end do print *, ' ' ! ! ! Initialize original matrix. L=0 do i=1,nr do j=1,nt do k=1,nz L=L+1 A(i,j,k)=L end do end do end do ! ! James Van Buskirk's solution. ! A = RESHAPE(A, shape(A), order = (/3,2,1/)) do i=1,nr do j=1,nt print *, (a(i,j,k),k=1,nz) end do end do end