Fortran Coder

查看: 34980|回复: 21
打印 上一主题 下一主题

[文件读写] abaqus调用fortran子程序读取txt文件报错forrtl: severe (24)

[复制链接]

16

帖子

1

主题

0

精华

入门

F 币
73 元
贡献
36 点
跳转到指定楼层
楼主
发表于 2020-8-19 22:10:55 | 显示全部楼层 回帖奖励 |倒序浏览 |阅读模式
各位大佬,我想请教一下,我在用abaqus调用fortran子程序做分析,提示错误:forrtl: severe (24): end-of-file during read, unit 11, file D:\temp\xdata.txt。在网上查网友说是对同一个txt多次读取,后来我就改了一下程序,设置只读一次。如下为代码:但改完依然报同样的错误
[Fortran] 纯文本查看 复制代码
if (stepTime==0) then
          
          !读入轴承力Fx数据
          open(11,file='D:\temp\xdata.txt',status='old')
          do ix=1,10001
              read(11,*)Fxm(ix,1),Fxm(ix,2)    !循环写入
          end do
      
          !读入轴承力Fy数据
          open(11,file='D:\temp\ydata.txt',status='old')
          do iy=1,10001
              read(11,*)Fym(iy,1),Fym(iy,2)    !循环写入
          end do
          
      end if

根据本论坛的一个贴又做了如下修改:

[Fortran] 纯文本查看 复制代码
!只读入一次
      if (stepTime.eq.0) then
          
          !读入轴承力Fx数据
          do ix=1,10001
              open(11,file='D:\temp\xdata.txt',ioStat=krl,
     &        action="readwrite",status="old")
              if(krl==0) then
                  read(11,*)Fxm(ix,1),Fxm(ix,2)    !循环写入
                  close(11)
              end if
          end do
      
          !读入轴承力Fy数据
          do iy=1,10001
              open(11,file='D:\temp\ydata.txt',ioStat=krl,
     &        action="readwrite",status="old")
              if(krl==0) then
                  read(11,*)Fym(iy,1),Fym(iy,2)    !循环写入
                  close(11)
              end if
          end do
          
      end if



报错信息改变为:forrtl: severe (29): file not found, unit 11, file C:\Users\WANGZI~1\AppData\Local\Temp\WangZijia_Housing_15704\fort.11

请教各位大神,我原本以为读取txt很简单,没成想在这卡了好久了




分享到:  微信微信
收藏收藏 点赞点赞 点踩点踩

16

帖子

1

主题

0

精华

入门

F 币
73 元
贡献
36 点
沙发
 楼主| 发表于 2020-8-19 22:12:31 | 显示全部楼层
我的思路其实很简答,仿真最开始,读入一个已经存在的txt,之后就不读了(之前方法比较笨,想着是每次abaqus调用子程序时都要读一遍这个txt,但是发现会报错forrtl: severe (24): end-of-file during read,所以正好优化一下只读一次)。

16

帖子

1

主题

0

精华

入门

F 币
73 元
贡献
36 点
板凳
 楼主| 发表于 2020-8-20 08:42:54 | 显示全部楼层
风平老涡 发表于 2020-8-20 01:44
还有就是你的txt文件是否有20002个数据。

我的txt就是10001行,两列,如下:
0.000000        19476.300000       
0.000100        19475.066748       
0.000200        19473.864231       
0.000300        19472.702313       
0.000400        19471.590858       
0.000500        19470.539728       
0.000600        19469.558788       
0.000700        19468.657901       
0.000800        19467.846931       
0.000900        19467.135741       
0.001000        19466.534195       
0.001100        19466.049638       
0.001200        19465.659818       
0.001300        19465.343557       
0.001400        19465.083727       

我有两个txt ,分别是xdata和ydata,分别读他们两个并循环给数组赋值,我是这么个思路

16

帖子

1

主题

0

精华

入门

F 币
73 元
贡献
36 点
地板
 楼主| 发表于 2020-8-20 08:46:13 | 显示全部楼层
风平老涡 发表于 2020-8-20 01:44
还有就是你的txt文件是否有20002个数据。

如果是10001行,2列,那确实是20002个数据

16

帖子

1

主题

0

精华

入门

F 币
73 元
贡献
36 点
5#
 楼主| 发表于 2020-8-20 14:54:04 | 显示全部楼层
chiangtp 发表于 2020-8-20 12:35
0. 程式裡 沒有其他地方 對 'D:\temp\xdata.txt'檔案 做READ動作

1. 'D:\temp\xdata.txt'檔案 确实是10001 ...

您好,我只读一次的问题已经,解决,我换了一个判据。但是我想把数组Fxm和Fym只读一次就保存下来,下次ABAQUS再调用子程序的时候就能用,所以用了save。但是一加save后,又出现了上述错误:forrtl: severe (24): end-of-file during read, unit 55, file D:\temp\xdata.txt.  下面是我的代码:
[Fortran] 纯文本查看 复制代码
dimension Fxm(10001,2)
      dimension Fym(10001,2)
      double precision Fxm,Fym,Fx,Fy,F

      data iread /1/
      save iread
      save Fxm
      save Fym
      
      !只读入一次
      if (iread.eq.1) then
          
          iread=2
          !读入轴承力Fx数据
          open(55,file='D:\temp\xdata.txt',status='old')
          do ix=1,10001
              read(55,*)Fxm(ix,1),Fxm(ix,2)    !循环写入
          end do
          close(55)
      
          !读入轴承力Fy数据
          open(22,file='D:\temp\ydata.txt',status='old')
          do iy=1,10001
              read(22,*)Fym(iy,1),Fym(iy,2)    !循环写入
          end do
          close(22)
          
      end if


想请教您这是为何

16

帖子

1

主题

0

精华

入门

F 币
73 元
贡献
36 点
6#
 楼主| 发表于 2020-8-20 16:01:42 | 显示全部楼层
chiangtp 发表于 2020-8-20 15:49
1. 用abaqus调用fortran子程序,  "abaqus" 是 Fortran library?
2. 上述程序是子程序, 如果是被某一Fortran ...

如果save的数组太大,会不会出现我这个错误,像我的这个数组10001*2,这么大的

16

帖子

1

主题

0

精华

入门

F 币
73 元
贡献
36 点
7#
 楼主| 发表于 2020-8-20 16:45:14 | 显示全部楼层
chiangtp 发表于 2020-8-20 15:49
1. 用abaqus调用fortran子程序,  "abaqus" 是 Fortran library?
2. 上述程序是子程序, 如果是被某一Fortran ...

abaqus是一个仿真软件,我只需要编辑好子程序,然后他会自动调用

16

帖子

1

主题

0

精华

入门

F 币
73 元
贡献
36 点
8#
 楼主| 发表于 2020-8-21 08:55:15 | 显示全部楼层
风平老涡 发表于 2020-8-21 03:45
这个txt文件是由abaqus产生的吧,原先的format是什么?

您好,这个txt是之前就有的(拿matlab算出的力的数据),所以我想在最初的时候读入进来

16

帖子

1

主题

0

精华

入门

F 币
73 元
贡献
36 点
9#
 楼主| 发表于 2020-8-21 09:00:44 | 显示全部楼层
风平老涡 发表于 2020-8-20 23:54
是否编一个小程序,只读这个txt文件

我试了一下,是不是子程序没法再调用另一个子程序? 所以我就直接在子程序里写的读txt的代码,没有单独写一个子程序去读txt

16

帖子

1

主题

0

精华

入门

F 币
73 元
贡献
36 点
10#
 楼主| 发表于 2020-8-21 09:17:28 | 显示全部楼层
chiangtp 发表于 2020-8-20 18:19
1. 如果save的数组太大,会不会出现我这个错误 (像我的这个数组10001*2,这么大的): 不會的

2. SAVE/只讀 ...

您好,下面这句代码:
[Fortran] 纯文本查看 复制代码
READ(55,*) (Fxm(ix,1),Fxm(ix,2), ix=1,10001)

报错了,错误信息: error #8093: A do-variable within a DO body shall not appear in a variable definition context。显示do的变量不能存在于循环体中。
还是说您的意思是:
[Fortran] 纯文本查看 复制代码
open(22,file='D:\temp\ydata.txt',status='old')
read(22,*)(Fym(iy,1),Fym(iy,2),iy=1,2001)
close(22)

您需要登录后才可以回帖 登录 | 极速注册

本版积分规则

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

GMT+8, 2024-5-3 18:59

Powered by Tencent X3.4

© 2013-2024 Tencent

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