假设的 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
我正在尝试编写一个简单程序的代码,该程序首先请求一个数字 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