Fortran 变量定义上下文中的意图(IN)伪参数
当我运行代码时,我在子程序中收到一条错误消息 这段代码来自Kincaid&Cheney关于求解椭圆偏微分方程的Gauss-Seidel方法的书中的一个练习 错误消息是: 在(1)处变量定义上下文(赋值)中具有意图(IN)的伪参数“u” 我在下面的代码中提到(1)。如何修复子例程,使错误消息不会出现Fortran 变量定义上下文中的意图(IN)伪参数,fortran,differential-equations,discretization,Fortran,Differential Equations,Discretization,当我运行代码时,我在子程序中收到一条错误消息 这段代码来自Kincaid&Cheney关于求解椭圆偏微分方程的Gauss-Seidel方法的书中的一个练习 错误消息是: 在(1)处变量定义上下文(赋值)中具有意图(IN)的伪参数“u” 我在下面的代码中提到(1)。如何修复子例程,使错误消息不会出现 subroutine seidel(ax,ay,nx,ny,h,itmax,u) real, dimension(0:nx,0:ny), intent(in) :: u
subroutine seidel(ax,ay,nx,ny,h,itmax,u)
real, dimension(0:nx,0:ny), intent(in) :: u
real, intent(in) :: ax,ay, h
integer, intent(in) :: nx, ny, itmax
integer:: i,j,k
do k = 1,itmax
do j = 1,ny-1
y = ay + real(j)*h
do i = 1,nx-1
x = ax + real(i)*h
v = u(i+1,j) + u(i-1,j) + u(i,j+1) + u(i,j-1)
u(i,j) = (v - h*h*g(x,y))/(4.0 - h*h*f(x,y)) (1)
end do
end do
end do
end subroutine seidel
intent(in)
向编译器承诺例程不会尝试更新参数的值。您显示的代码违反了行中的承诺:
u(i,j) = (v - h*h*g(x,y))/(4.0 - h*h*f(x,y))
要解决这个问题,可以不违背你的承诺,或者,在这种情况下,更合适的做法是,让意图inout
,像这样
real, dimension(0:nx,0:ny), intent(inout) :: u
inout
告诉编译器例程将传递参数,并可能对其进行修改
(我想这可能是重复的,但还找不到。)谢谢你的帮助。当我将其更改为intent(inout)时,仍然会收到一条错误消息。它表示“全局过程中的接口不匹配:参数u中的意图不匹配”。错误消息指的是我调用子例程的行;上面代码中的第一行。您知道为什么会发生这种情况吗?短语
接口不匹配
提示代码中未显示的部分存在问题。给我们一份工作。还有一点隐式none
也会有帮助,这样我们就不必解释最终会使用未声明的v
和x
等变量弹出的问题。@HighPerformanceMark谢谢。我将按照您的建议提供一个完整/最少的示例,并在完成后编辑我的问题。@HighPerformanceMark我根据您提供的内容在代码中解决了这个问题。谢谢。