Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/fortran/2.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
Fortran 如何将数据读入数组_Fortran_Fortran77 - Fatal编程技术网

Fortran 如何将数据读入数组

Fortran 如何将数据读入数组,fortran,fortran77,Fortran,Fortran77,我有一本工程教科书中的FORTRAN 77代码,我想利用它。问题是我无法理解如何将数据输入到被调用的数组中,即:FDAM1(61)、FDAM2(61)、FPOW1(61)、FPOW2(61)、UDAM(61)和UPOW(61)。 代码摘自本书第49页,仅供参考: 以下是一个帮助您入门的简单示例: C Minimal working example of creaky old FORTRAN I/O PROGRAM ABYSS IMPLICIT NONE C

我有一本工程教科书中的FORTRAN 77代码,我想利用它。问题是我无法理解如何将数据输入到被调用的数组中,即:
FDAM1(61)、FDAM2(61)、FPOW1(61)、FPOW2(61)、UDAM(61)
UPOW(61)。

代码摘自本书第49页,仅供参考:



以下是一个帮助您入门的简单示例:

C Minimal working example of creaky old FORTRAN I/O
      PROGRAM ABYSS
      IMPLICIT NONE
C
      REAL FDENS(61)
      REAL XRANGE
      INTEGER J
C
10    FORMAT(16F5.2)
11    FORMAT(F5.0)

909   FORMAT(/, 'BEHOLD! A DENSITY DISTRIBUTION',/)
910   FORMAT(10(F5.2, 3X),/)
911   FORMAT(/, 'XRANGE is ', F6.1)
C
      CONTINUE
C
      READ(5,10) (FDENS(J), J=1,61)
      READ(5,11) XRANGE
C
      WRITE(6,909)
      WRITE(6,910) (FDENS(J), J=1,61) 
      WRITE(6,911) XRANGE
C
      STOP
      END
抱歉在F77中写下这封信;为了这个例子,我坚持上面发布的代码的风格。理想情况下,您应该使用F03或F08来编写新代码,或者使用一种完全不同的语言,这种语言实际上具有良好的I/O特性和丰富的标准库。但我离题了

此代码将对数据进行操作(注意保留空格):

产生

BEHOLD! A DENSITY DISTRIBUTION

 0.00    0.00    0.00    0.00    0.00    0.00    0.10    0.30    0.50    0.90

 1.30    1.90    2.50    3.20    3.80    4.20    4.70    5.00    5.10    5.20

 5.20    5.10    4.90    4.70    4.60    4.40    4.20    3.90    3.80    3.60

 3.40    3.20    3.00    2.90    2.70    2.50    2.40    2.20    2.10    1.90

 1.80    1.60    1.50    1.40    1.20    1.10    1.00    0.90    0.80    0.70

 0.60    0.50    0.40    0.30    0.30    0.20    0.10    0.10    0.00    0.00

 0.00

XRANGE is   12.0
如果代码在
Abysis.f
中,输入数据在
Abysis.dat
中,您应该能够使用

gfortran -g -Wall -Og -o abyss abyss.f
并通过运行

abyss < abyss.dat > abyss.out
AbysisAbysis.out
需要注意的一个关键点是,原始代码是从第5单元读取的(传统上被视为
stdin
,现在在
iso\u fortran\u env
中被正式命名为
INPUT\u unit
)。在您自己的代码中,我建议从数据文件中读取,因此将literal
5
替换为包含您正在读取的文件的单位编号的任何变量(提示:考虑使用<代码> NealUngs//Cort参数到FORTRAN 2008中介绍的Open/Cort>命令。它解决了试图找到一个空闲I/O单元数的愚蠢的Fortran问题)。当您可以使用I/O重定向时,它是次优的;它用于说明如何处理原始代码的局限性。


此外,为了后代和您自己的理智,请避免利用冷战时期FORTRAN的错误功能,例如空格等于零的胡说八道。如果您的数据值得使用,则值得使用易于解析的合理格式;列式、空格分隔的值是一个很好的选择。FORTRAN可能会我会在2156年左右获得一个可以读写CSV文件的标准库(大概需要一个世纪)所以你有足够的时间来设计一些像样的东西…

欢迎来到Stack Overflow。尽量保持你的帖子简洁。避免问候和感谢。你的名字和图标在帖子下面。标题应该介绍问题,而不是标签所指示的广泛主题。不要只是重复标题中的标签。使用比较通用的和broader标记,如,仅在必要时为特定版本添加标记,以区分或表明您不希望使用任何使用较新版本的解决方案。您询问的一些数组在程序内部自动计算。另一些数组通过
read
语句读取。您是否有关于mat?如果是,请编辑该问题以将其包括在内。@VladimirF感谢您的回答。原始问题中显示的链接中可以找到包含数据的原始代码列表。作者刚刚将其添加到主代码下,这就是我感到困惑的原因……不幸的是,链接中的第49页无法查看,因为已超过最大浏览次数ed.数据在第50页。制作一份精确的副本并将其放入问题中会很好。我希望这可能是合理使用。你有什么问题?要理解哪个数字是哪个?还是别的什么?我能够通过屏幕抓取数据并添加到问题中。我有一种感觉,最正确的数字可能已经被任何原创者切掉了y扫描了这本书。很抱歉在F77中写了这篇文章,但你无法抗拒
隐式无
可以吗!看,我用F77写的并不意味着我必须用/bad/F77;)
BEHOLD! A DENSITY DISTRIBUTION

 0.00    0.00    0.00    0.00    0.00    0.00    0.10    0.30    0.50    0.90

 1.30    1.90    2.50    3.20    3.80    4.20    4.70    5.00    5.10    5.20

 5.20    5.10    4.90    4.70    4.60    4.40    4.20    3.90    3.80    3.60

 3.40    3.20    3.00    2.90    2.70    2.50    2.40    2.20    2.10    1.90

 1.80    1.60    1.50    1.40    1.20    1.10    1.00    0.90    0.80    0.70

 0.60    0.50    0.40    0.30    0.30    0.20    0.10    0.10    0.00    0.00

 0.00

XRANGE is   12.0
gfortran -g -Wall -Og -o abyss abyss.f
abyss < abyss.dat > abyss.out