【发布时间】:2016-03-19 15:53:18
【问题描述】:
我有一个函数 (Simpson),它计算函数 (f (x, y = 5)) 的积分。我想用同样的函数(Simpson)对函数 f(x, y) 进行双重积分:
F(x) = \int dy f(x,y) I = \int dx F(x)
我可以在 Fortran 中调用同一个函数两次(Simpson)吗? 在我放下的示例中,我将如何做到这一点? 我认为我的问题的主要思想已经在这里提出,但我还没有找到答案。 fortran, how to make several copies of a program using module or interface?
我对复制函数 Simpson 不感兴趣:Simpson1 Simpson2 既不使用外部包。
最好的
这是我正在使用的代码的大纲:
MODULE INTEG
IMPLICIT NONE
CONTAINS
REAL FUNCTION SIMPSON(FUNC,A,B,TOL)
REAL, INTENT(IN) :: A, B, TOL
INTERFACE
FUNCTION FUNC (X) RESULT(OUT)
IMPLICIT NONE
REAL, INTEN(IN) :: X
REAL :: OUT
END FUNCTION
END INTERFACE
........
END FUNCTION SIMPSON
END MODULE INTEG
MODULE DOING
USE INTEG
REAL :: TEMP
IMPLICIT NONE
CONTAINS
REAL FUNCTION FUNC (X,Y)
IMPLICIT NONE
REAL, INTENT(IN) :: X, Y
REAL :: OUT
FUNC = X*Y
END FUNCTION FUNC
FUNCTION F(Y) RESULT(OUT2)
REAL, INTENT(IN) :: Y
REAL :: A, B, TOL,OUT2
TEMP = Y
OUT2 = SIMPSON(I1, A, B, TOL)
CONTAINS
REAL FUNCTION I1(X) RESULT(OUT)
REAL, INTENT(IN) :: X
OUT = FUNC (X,TEMP)
END FUNCTION I1
END FUNCTION F
REAL FUNCTION I2(A2, B2, TOL2)
REAL, INTENT(IN) :: A2, B2, TOL2
I2 = SIMPSON(F, A2, B2,TOL)
END FUNCTION I2
END MODULE DOING
PROGRAM EXAMPLE
USE DOING
IMIPLICIT NONE
REAL :: A2, B2, TOL2, OUT3
OUT3 = I2(A2, B2, TOL2)
END PROGRAM EXAMPLE
【问题讨论】:
-
请使用通用的fortran 标签,除非您的问题是针对特定版本的 Fortran 标准。
-
我不明白你在问什么。您可以调用函数多少次。请澄清你的问题。你试过什么吗?有没有出错?
标签: function fortran double integration procedures