假设的 Shape 数组需要 Fortran 中的显式接口

Assumed Shape arrays require explicit interface in Fortran

我正在尝试编写一个简单程序的代码,该程序首先请求一个数字 n,然后创建一个 nxn 矩阵,其主对角线上有 3s,上面有 1s,下面有 0s,向量 (n) 有 3在不均匀的位置和 2 个在偶数位置。然后它必须包含一个子例程,该子例程不使用 matmul()

将它们相乘
program P13

implicit none

integer(4) :: n, i, j
integer, dimension(:), allocatable:: v 
integer, dimension(:,:), allocatable :: m
integer, dimension(:), allocatable :: r


write(*,*) "Insert n"
read(*,*) n



allocate (v(1:n))
allocate (m(1:n,1:n))

v(1:n:2) = 3
v(2:n:2) = 2
m = 0

DO i=1,n,1

   m (i,i:n)=1

END DO

Do i=1,n,1
 m (i,i)=3
 End do 

call matrmul(n, m, v)
end program

subroutine matrmul(n, b, o, t)
implicit none

integer(4), intent(in) :: n
integer(4) :: i, j
integer, dimension(:), intent(in) :: b 
integer, dimension(:,:),intent(in) :: o
integer, dimension(:), intent(out) :: t

DO i=1,n,1

t(i) = sum(b*o(:,i))
END DO

write(*,'(I2)') t

end subroutine 

我收到错误消息 “matrmul”在 (1) 处需要显式接口:假定形状参数

我该如何解决这个问题??谢谢

stack overflow 上有大量示例,可向您展示如何创建显式接口。但是,由于您在主程序中为所有数组分配内存并将大小传递给子例程,因此只需在子例程中用 n 声明所有数组。

subroutine matrmul(n, b, o, t)
  implicit none

  integer(4), intent(in) :: n
  integer(4) :: i, j
  integer, dimension(n), intent(in) :: b 
  integer, dimension(n,n),intent(in) :: o
  integer, dimension(n), intent(out) :: t