fortran66のブログ

fortran について書きます。

配列の配列のテスト

配列の配列を作りたいのですが、allocatable 属性ではうまくゆかないようで、pointer を使わないといけないようです。pointer を使ったら負けのような気もしますが、負けるが勝ちということで・・・
class(*)の万能 pointer を使いところですが、debugがめんどくさいので、とりあえず露わな型でゆきます。class(*) での rank の扱いもまだよくわかりません。マニュアルを読まなくては・・・

ソース

module m_test
    implicit none
    type :: t_a
      integer, pointer :: m(:)
    end type t_a
contains 
   function ilist(n)
     integer, intent(in) :: n
     integer, pointer :: ilist(:)
     allocate( ilist(n + 1) )
     ilist = [0:n]
     return
  end function ilist
end module m_test

program test
  use m_test
  integer, parameter :: n = 20
  type (t_a) :: aa(n)
  integer :: i
  do i = 1, n
      aa(i)%m => ilist(i)
  end do
  do i = 1, n
      print '(25i3)', aa(i)%m
      deallocate(aa(i)%m)
  end do  
  stop  
end program test