在fortran中创建一个简单的子例程

时间:2014-03-21 14:49:52

标签: fortran subroutine

我是Fortran的新手,我制作了一个程序,其中所有内容都适用于一个文件,这有效。 然而,当我试图取出零件并将它们放入模块和子程序时,我很快就遇到了问题。 即使删除了所有内容并且只剩下最小的剩余部分,它仍然会出现关于子例程的错误。

目前,大幅减少的主程序看起来像这样。它只使用模块并调用子程序。

program test
    use mod1
    call sub1(var)
end program test

,模块如下:

Module mod1
    implicit none
    type A
        real                     :: type1
    end type A

contains
    subroutine sub1(var)
        type(A)  :: var
        var%type1 = 1+1
    end subroutine sub1

然而,我似乎在这里做错了,不幸的是我无法弄清楚是什么。我收到了错误

 ||Error: Type mismatch in argument 'var'  ; passed REAL(4) to TYPE(a)|
end module mod1

有人可以解释我为了阻止最基本的子程序工作而犯的哪个根本错误吗?

1 个答案:

答案 0 :(得分:4)

在您的程序中,您没有明确声明var。在以前的日子里,Fortran支持隐式输入,默认情况下,名称以v开头的变量的类型为real。 Fortran保留了这种能力,尽管它的使用现在不受欢迎。

我认为你正在考虑(好像我知道你在想什么)程序范围中的var将以某种方式与子例程中的var自动关联或相同在模块中。它不会成为。

做这些事情:

  • 在您的计划implicit none之后的行上插入use mod1
  • 在程序中明确声明var例如 type(a) :: var