0 parameters fortran module function global-variables
我正在尝试编写一个使用绿色函数来解决热方程的fortran程序.我使用的是fortran 90而不是77,部分原因是因为我的印象是它几乎是fortran 77的复制品,但有一些非常有用的功能.虽然主要原因是自由格式编码.我在一个名为"有用"的模块中有一些"有用的"常量和变量.我想在我的大多数程序,子程序,函数等中包含这些变量和常量.我只是在学习fortran.我已经在perl,C++,java,matlab和mathematica中编写过程序.我觉得很难.我不明白程序和子程序之间的区别.我当然不清楚模块是什么.过去12个小时我一直在研究这些术语,但尚未得到简明扼要的区别和定义.我得到了各种各样的样本,展示了如何声明这些东西,但实际上很少描述它们应该用于什么.
我真的很感激为什么我的函数"x"不能"使用"我的"有用"模块的解释.
此外,澄清前面提到的fortran功能将非常有用.
module useful
integer, parameter :: N=2
double precision, parameter :: xmin=1, xmax=10, pi=3.1415926535898
double complex :: green(N,N), solution(N), k=(2.0,0.0)
end module useful
program main
use useful
!real*8 :: delta = 2**-7
do n1 = 1, N
do n2 = 1, N
green(n1,n2) = exp((0,1)*k*abs(x(n2)-x(n1)))/(4*pi*abs(x(n2)-x(n1)))
print *, x(n2)
end do
end do
end program main
function x(n1)
use useful
real :: n1, x
x=n1*(xmax-xmin)/N
end function x
Run Code Online (Sandbox Code Playgroud)
Fortran程序由程序单元组成.在所谓的Fortran 2008(现行标准)中,有五种类型的程序单元:
让我把注意力集中在前三个上.
主程序
作为标准声明
程序单元不是子程序,模块,子模块或块数据程序单元.
不是很有用的定义.=)你应该知道的是主程序单元以关键字开头PROGRAM,它是应用程序的入口点,显然程序应该只包含一个主程序.
程序也可以包括任何数量(包括零)的其他类型的程序单元.
外部子程序
子程序定义了一个程序.有两种类型的程序,当然还有两种类型的子程序来定义它们:
函数子程序是一个子程序,它有一个FUNCTION语句作为它的第一个语句.子程序子程序是一个子程序,其SUBROUTINE语句作为其第一个语句.
程序和子程序在程序中的出现也不同.您可以使用:
外部子程序
子程序,不包含在主程序,模块,子模块或其他子程序中内部子程序
子程序包含在主程序或另一个子程序中模块子程序
子程序,包含在模块或子模块中,但不是内部子程序
模块
它只是一个定义(类型定义,过程定义等)容器.
main.f90时
! Main program unit.
PROGRAM main
USE foo
IMPLICIT NONE
CALL external_bar
CALL internal_bar
CALL module_bar
CONTAINS
! Internal subprogram defines internal procedure.
SUBROUTINE internal_bar
PRINT *, "inside internal procedure"
END SUBROUTINE internal_bar
END PROGRAM main
Run Code Online (Sandbox Code Playgroud)
foo.f90
! Module program unit.
MODULE foo
IMPLICIT NONE
CONTAINS
! Module subprogram defines module procedure.
SUBROUTINE module_bar
PRINT *, "inside module procedure"
END SUBROUTINE module_bar
END MODULE foo
Run Code Online (Sandbox Code Playgroud)
bar.f90
! External subprogram program unit.
! External subprogram defines external procedure.
SUBROUTINE external_bar
PRINT *, "inside external procedure"
END SUBROUTINE external_bar
Run Code Online (Sandbox Code Playgroud)