Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/146.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Random 在子例程中调用数组的值_Random_Numbers_Fortran_Fortran77 - Fatal编程技术网

Random 在子例程中调用数组的值

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

我正在使用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, 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)