大学院情報処理演習 第 4 回 (行列の直接解法) 「形状引き継ぎ配列型の受け渡し」 講義ノート目次

Ruby 言語で method を定義したときのように、配列をそのまま受け渡すこともできる。これを 形状引き継ぎ配列assumed shape array という。 呼び出した先では、何も指定しないと添字が 1 から開始されてしまうので、 下限をRuby 言語と合わせるためには 0 を指定しておく必要がある。 下限を指定すると自動的に上限は定まる。ここでは、例えば lbound(配列, 次元) が使える。

外部 subroutine で、形状引き継ぎ配列を使用する場合には、interface module を用意する必要がある。 当面は、内部 subroutine のみを考える。

	
      module subpart
      implicit none
      contains
      subroutine dummy_print2(e, lower)
      integer, intent(in) :: lower
      real(8), intent(in) :: e(lower:,lower:)
      integer i, j, k
      k = size(e(1,:))
      do i = 0, k
         write(*,'(100e12.4)') (e(i,j), j = 0, k)
      end do
      end subroutine dummy_print2
      end module subpart
      program assume
      use subpart
      implicit none
      real(8), allocatable :: e(:,:)
      integer :: n = 5
      integer i, j
      allocate (e(0:n-1,0:n-1))      
      do i = 0, n - 1
         do j = 0, n - 1
            if (j == i) then 
               e(i,j) = 1.0d0
            else 
               e(i,j) = 0.0d0
            end if
         end do
      end do
      call dummy_print2(e,lbound(e,1))
      end program assume