気になったのは次のコードですねー.
program MatrixOut implicit none real(8), dimension(2,2,2) :: target integer :: i, j, k open(10,file='test.dat',form='formatted',status='unknown') do i = 1,2 do j = 1,2 do k = 1,2 target(i,j,k)=i+j+k end do end do end do print *, "matrix =",target write(10,*) target end program MatrixOut
で,まぁtargetの中身をiから順に展開してファイルに書き出す,と.(意図は分かるんですけどね)
これをgfortranで実行すると次の標準出力とファイルが出来ます.
標準出力
matrix = 3.00000000000000 4.00000000000000 4.00000000000000 5.00000000000000 4.00000000000000 5.00000000000000 5.00000000000000 6.00000000000000
でファイルは1行のファイルができ,(次がtest.datの中身)
3.00000000000000 4.00000000000000 4.00000000000000 5.00000000000000 4.00000000000000 5.00000000000000 5.00000000000000 6.00000000000000
こうなります.で,まぁこれ自体は上手く書き出せてるしいいのかな,と思ったりしますが,これを読み出すコードとして,
program MatrixRead implicit none real(8), dimension(2,2,2) :: target open(10,file='test.dat',form='unformatted',status='unknown') read(10) target print *, "matrix =",target end program MatrixRead
…
じっさいgfortranでコンパイルし,ランしてみると標準出力では次が得られます.
matrix = 1.398043286095289E-076 6.013470018393741E-154 1.398040670813049E-076 1.398043286095289E-076 6.013470018393741E-154 1.398040670813049E-076 1.398043286095289E-076 6.013470018393741E-154
はい,全く読み込めてません.
書き出す方もコンパイラをifortranに変えた瞬間,書き出しが改行されて使えなくなったので,こんな手法は使わない方が良いように思います.
でも次のようにちゃんと書式を合わせて書くと支障なく読めるし手法としてはいいのかなぁ,うーん…
program MatrixRead implicit none real(8), dimension(2,2,2) :: target open(10,file='test.dat',form='formatted',status='unknown') read(10,*) target print *, "matrix =",target end program MatrixRead