Random 在子例程中调用数组的值
我正在使用Force 2.0编译器和编辑器。我想在以下子程序上调用现有数组的值Random 在子例程中调用数组的值,random,numbers,fortran,fortran77,Random,Numbers,Fortran,Fortran77,我正在使用Force 2.0编译器和编辑器。我想在以下子程序上调用现有数组的值KM(1:M),以便在主程序EIKM(1:M)的计算中使用,但获得的值与数组的值不一致。你能告诉我怎么了吗?我该怎么办 PROGRAM GENERATES_EIKM IMPLICIT NONE INTEGER I, M, N PARAMETER (M=65, N=3) REAL EIKM(1:M) REAL ALFA, EPSILON, NU, PI REAL U2RMS, KE, K
KM(1:M)
,以便在主程序EIKM(1:M)
的计算中使用,但获得的值与数组的值不一致。你能告诉我怎么了吗?我该怎么办
PROGRAM GENERATES_EIKM
IMPLICIT NONE
INTEGER I, M, N
PARAMETER (M=65, N=3)
REAL EIKM(1:M)
REAL ALFA, EPSILON, NU, PI
REAL U2RMS, KE, KEFISIENSI, KALI, KALE
REAL KM(1:M), LS
REAL KMLOW, KMHIGH, DELTAKM
KMLOW=100
KMHIGH = 10000
DELTAKM = (KMHIGH-KMLOW)/(M-1)
PI = 3.14
ALFA = 1.453
EPSILON = 10
NU = 7
LS = 23
KE = ALFA*9*PI/(55*LS)
KEFISIENSI = (EPSILON**(1/4))/(NU**(-3/4))
CALL CALLING_THE_VALUE_OF_KM (M)
WRITE (*,*) 'CHECKING THE VALUE OF KM AT DATA NUMBER 2 : ', KM(2)
DO I=1,M
U2RMS = (2/3*KM(I))**2
KALI = KM(I)/KE
KALE = KM(I)/KEFISIENSI
EIKM(I) = ALFA*(U2RMS/KE)*((KALI**4)/((1+KALI**2)**(17/6)))*
& EXP(-2*(KALE**2))
WRITE (*,*) 'THE VALUE OF EIKM AT (I) ', I, EIKM(I)
END DO
PAUSE
END
SUBROUTINE CALLING_THE_VALUE_OF_KM (M)
REAL KM(1:M)
INTEGER I
REAL KMLOW, KMHIGH, DELTAKM
KMLOW=100
KMHIGH = 10000
DELTAKM = (KMHIGH-KMLOW)/(M-1)
WRITE(*,*) 'START OF CALLING_THE_VALUE_OF_KM'
DO I=1,M
KM(I) = KMLOW + DELTAKM*(I-1)
WRITE(*,*) I, KM(I)
END DO
WRITE(*,*) 'END OF CALLING_THE_VALUE_OF_KM'
WRITE(*,*) '--------------------'
RETURN
END
我会在你的子程序中不加隐式。如果M被定义为整数或不是整数,那么这将有所帮助。您还可以将INTENT(IN)放在M上,看看编译器是否也运行fortran90。如果子例程应该输出一些东西,那么在()中需要它。你可能想要…: F90: 如果编译成功,那么它必须是force 2.0.9+ 然后你可能就不需要我了
Subroutine Callingthevalue_of_KM(KM)
IMPLICIT NONE
REAL, DIMENSION (:), INTENT(INOUT) :: kM
INTEGER :: M
M = Size(kM)
... Or do the loops a DO I = 1, SIZE(kM)
F77:
在所有这些情况下,km将通过km的参考“返回”,并更新km上的值,然后由main知道
kM在内部和外部被了解的另一种方式是常见的,但我认为从概念上讲,在这一点上更容易避开它们。将与程序语句相匹配的
end
移动到源文件的末尾。在它的位置写下单词包含。重新编译并修复编译器发现的任何错误。由于您的代码是结构化的,编译器无法确保传递给子例程的参数与预期匹配。此外,2016年的初学者不应学习Fortran 77,在最近的版本中,有许多有用的特性被添加到了该语言中,仅仅局限于40年前的版本是没有意义的。是的,您仍然需要了解Fortran 77以便与庞大的现有代码库集成,但不需要局限于编写它。这很有趣,但我从来没有看到过问题,所以我开始学习Java 2…某个地方似乎仍有人在教人们F77…@HighPerformanceMark我在使用fortran 77语言,在我的编译器中没有像“contains”这样的隐式函数。这是我第一次制作这样的程序来解方程,我的主管告诉我使用fortran77,因为它可以在任何计算机上运行。请帮帮我,大师!!您需要开始调试,那些整数/整数可能更好,如2.0/3.0和1.0+Kali和17.0/6.0和-2.0*可能最容易说“实参数::factor1=2.0/3.0”等。@HighPerformanceMark提到的所有内容都是sage方法的一部分。对于假定的形状版本,需要进行更多实质性的更改(明确的接口规定),而不仅仅是添加(:)
@Holmz,因为它不起作用。例如,调用数据编号2的应答器仍然是0.000。请帮帮我,主人!在调用子例程后尝试此操作,看看您得到了什么。。。。写入(,)“检查数据编号(1:5)处的KM值:”,KM(1:5)在子例程中执行此操作也是值得的。
Subroutine Callingthevalue_of_KM(KM)
IMPLICIT NONE
REAL, DIMENSION (:), INTENT(INOUT) :: kM
INTEGER :: M
M = Size(kM)
... Or do the loops a DO I = 1, SIZE(kM)
Subroutine Callingthevalue_of_KM(M, KM)
IMPLICIT NONE
INTEGER M
REAL kM(M)