更新:私の変更されたコードは次のようになります:
program run_module_test
use module_test
implicit none
TYPE(newXYZ), allocatable, intent(inout) :: xyzArray(:)
call update(xyzArray)
write(6,*)'xyzArray',xyzArray
end program run_module_test
module module_test
implicit none
TYPE :: newXYZ
real(4) :: x, u
real(4) :: y, v
real(4) :: z, w
real(4),dimension(3) :: uvw
END TYPE
integer(4) :: shape = 3
contains
subroutine update(xyzArray)
integer(4) :: i
TYPE(newXYZ), allocatable, intent(inout) :: xyzArray(:)
allocate( xyzArray(shape) )
do i = 1, shape
xyzArray(i)%x = 0
xyzArray(i)%y = 0
xyzArray(i)%z = 0
xyzArray(i)%u = 0
xyzArray(i)%v = 0
xyzArray(i)%w = 0
xyzArray(i)%uvw = (/0,0,0/)
end do
return
end subroutine update
end module module_test
それらがコンパイルされると、同様のエラーが生成されます。
TYPE(newXYZ), allocatable, intent(inout) :: xyzArray(:)
1
Error: ALLOCATABLE attribute conflicts with DUMMY attribute at (1)
update()サブルーチンで引数を削除すると、矛盾するエラーが発生します。
TYPE(newXYZ), allocatable, intent(inout) :: xyzArray(:)
1
Error: Symbol at (1) is not a DUMMY variable
役立つ提案で指摘されたエラーの原因を排除しましたか?これはコンパイラ関連のエラー(mpi90を使用)でしょうか?
~~~最初の編集~~~入力引数がユーザー定義型XYZの配列であるサブルーチンがあります。xyzArrayの割り当てを解除し、サブルーチンの本体で別のサイズに割り当て/変更したいと思います。fortranで配列の次元を変更することで提案された方法を試しましたが、次のようにすると次のようになります。
subroutine update(xyzArray, ...)
...
TYPE (XYZ), allocatable :: xyzArray(:)
エラーメッセージが表示されます:
Error: ALLOCATABLE attribute conflicts with DUMMY attribute at (1)
私が試してみると:
subroutine update(xyzArray, ...)
...
deallocate( xyzArray(myshape) )
allocate( xyzArray(newshape) )
エラーメッセージが表示されます:
Error: Expression in DEALLOCATE statement at (1) must be ALLOCATABLE or a POINTER
Error: Expression in ALLOCATE statement at (1) must be ALLOCATABLE or a POINTER
サブルーチン内の配列のサイズを変更するにはどうすればよいですか?