3

VS2012 と Intel Visual Fortran 2015 を使用しています。

https://software.intel.com/en-us/forums/topic/269585によると、名前リストの読み取りと書き込みで割り当て可能な想定サイズの配列を使用できるようになりました。ただし、「namelist-group-object は想定サイズの配列であってはなりません」というエラーが引き続き表示されます。

コード例:

subroutine writeGrid(fname, grid)

    character*(*) :: fname
    real*8, dimension(:,:) :: grid

    namelist /gridNML/ grid

    open(1, file=fname)
    write(1, nml=gridNML)
    close(1)

end subroutine writeGrid

F2003 セマンティクスを有効にしました。

私は何が欠けていますか?

4

1 に答える 1

3

それはコンパイラのバグのようです。配列grid想定された形状であり、想定されたサイズではありません。F2003 の時点では、形状引き継ぎ配列は名前リストで許可されていますが、引き継ぎサイズ配列は引き続き禁止されています (引き継ぎサイズ配列のサイズは、実行時に必ずしもわかっているとは限らないため、サイズの知識を必要とする操作は禁止されています)。

簡単な回避策は、仮引数の名前を別の名前に変更し、その値を という名前のローカル アロケータブルにコピーすることですgrid

subroutine writeGrid(fname, grid_renamed)
  character*(*) :: fname
  real, dimension(:,:) :: grid_renamed
  real, dimension(:,:), allocatable :: grid

  namelist /gridNML/ grid

  open(1, file=fname)
  allocate(grid, source=grid_renamed)
  write(1, nml=gridNML)
  close(1)
end subroutine writeGrid
于 2015-06-17T23:07:23.947 に答える