Fortran 变量定义上下文中的意图(IN)伪参数

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

当我运行代码时,我在子程序中收到一条错误消息

这段代码来自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        
  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我根据您提供的内容在代码中解决了这个问题。谢谢。