Fortran Coder

Fortran外部文件数据读取

查看数: 3577 | 评论数: 4 | 收藏 0
关灯 | 提示:支持键盘翻页<-左 右->
    组图打开中,请稍候......
发布时间: 2022-11-27 17:04

正文摘要:

采用ABAQUS软件的UEXTERNALDB子程序,读取外部文件的GIRD_FI(4,9)和GIRD_LAMDA(4)值赋值给变量供其他子程序调用Q1:网上找的程序代码,里边所示的CREEP.IN和CREEP.OUP文件是fortran语言中的一种文件类型吗,还是 ...

回复

fcode 发表于 2022-11-27 22:14:22
read(106,*) 变量列表
这种,read括号里第二个位置是 *,的读取方式叫做表控格式。全称变量列表控制格式(List-Directed format)
编译器产生的代码,执行过程是这样的:

先确定变量列表中有多少个变量。比如 read(106,*) GIRF_LAMDA(i),i=1,4 则需要读取4个变量。
从文件中读取一整行,根据顺序分别对应变量列表
如果这一整行的数据量大于变量列表,则丢弃这一行后面多余的数据。结束读取。
如果这一整行的数据量等于变量列表,则直接结束读取。
如果这一整行的数据量小于变量列表,则继续读取下一个一整行,分配到剩余的变量列表,重复上述步骤。
  直到读取到的数据量大于等于变量列表要求的数据量为止。

注意,编译器每次读取的单位是一整行。所以,如果文件中内容是:
1 2 3
4 5
那么 5 这个数据会被丢弃,而不会赋值给 GIRF_FI(1,1)。
fcode 发表于 2022-11-27 22:07:07
根据你给出的代码片段来看。GIRD_LAMDA 和 GIRD_FI 本来就都在一个文档(GREEP.in)里面。
读取时,先读的 GIRD_LAMDA,后读的 GIRD_FI,那么文件里就先放 GIRD_LAMDA后放 GIRD_FI 就可以了。

一维数组二维数组,是Fortran程序的概念。对于文件来说是一样的。read 语句会把文件里的数据,根据程序中对变量定义的维度重新排列。

比如文件里内容是
0.5 , 0.06 , 0.007 , 0.0008
0.1,0.6,0.96,0.19
0.3,0.2,0.1,0.4
0.51,0.1,0.9,0.08
0.8,0.6,0.05,0.03
0.1,0.01,0.0,0.2
0.6,0.01,0.91,0.2
0.6,0.01,0.06,0.5
0.08,0.09,0.04,0.8
0.09,0.02,0.05,0.2


你读取了 GIRD_LAMDA,它的大小是4。接着读取了 GIRD_FI,它的大小是9*4那么红色部分会赋予给 GIRD_LAMDA蓝色部分会赋予给 GIRD_FI

可以看彭国伦的《Fortran95程序设计》,本坛网盘里有。http://pan.fcode.cn
Fraine 发表于 2022-11-27 20:26:14
fcode 发表于 2022-11-27 17:48
Q1.
Fortran是一种编程语言,只要你理解文件的格式(存储方式,顺序,含义等),你可以用Fortran读取任何文 ...

非常感谢您的回答。

还有点疑惑再请教您一下,我想要把GIRD_LAMDA(4)和GIRD_FI(4,9)的数据放到一个文档里边;GIRD_FI(4,9)是二维数组,是不是我只要把GIRD_LAMDA(4)的数据放在GIRD_FI(4,9)数据之前,读取时先读GIRD_LAMDA(4)后读GIRD_FI(4,9)就可以上述顺序放入文件读取进去就可以了;

还有个问题是GIRD_LAMDA(4)是一维数组,GIRD_FI(4,9)是二维数组,他俩数据的存放方式一样吗?文件里应如何设置才能保证他们能够位置正确,例如我后边想要调取GIRD_FI(2,3)这个数,怎么能确定是我想要的数据呢?
还有就是您这边有相关的书籍资料推荐吗,我对这一块很困惑,想弄懂清晰一点,谢谢啦!

fcode 发表于 2022-11-27 17:48:55
Q1.
Fortran是一种编程语言,只要你理解文件的格式(存储方式,顺序,含义等),你可以用Fortran读取任何文件,比如mp3,avi,pdf,xls这些我们耳熟能详的文件。
Fortran本身并不规定任何文件格式
所以,CREEP.inCREEP.oup 可能是原来代码作者规定的文件格式。(而不是Fortran,因为Fortran不规定任何文件格式)
它们应该就是普通的txt纯文本文件。

Q2.
读写变量的顺序,不需要和变量的定义顺序相同。甚至读写的变量可以来自不同的定义位置(module,虚参,局部变量,common等)

Q3.
如果是用 READ(106,*) (GIRD_LAMDA(i),i=1,4) 语句来读取的话。
可以用比较自由的形式在文件中存储。比如
0.5 , 0.06 , 0.007 , 0.0008
这种逗号间隔,也可以用空格间隔。甚至2行,每行2个
0.5 0.06
0.007 0.0008

也可以第一行1个,第二行3个
0.5
0.06 0.007 0.0008

其他组合也可以,例如第一行2个,第二行1个,第三行1个。都可以

捐赠本站|Archiver|关于我们 About Us|小黑屋|Fcode ( 京ICP备18005632-2号 )

GMT+8, 2024-11-23 09:38

Powered by Tencent X3.4

© 2013-2024 Tencent

快速回复 返回顶部 返回列表