Fortran Coder

楼主: wzjdse
打印 上一主题 下一主题

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

[复制链接]

130

帖子

10

主题

0

精华

大师

F 币
617 元
贡献
372 点

贡献勋章管理勋章帅哥勋章元老勋章星光勋章规矩勋章

21#
发表于 2020-8-21 12:46:12 | 只看该作者
[Fortran] 纯文本查看 复制代码
  ! Case [A]                                                
  READ(55,*) (Fxm(i,1), Fxm(i,2) , i=1,10001)               
                                                            
  ! Case [B]                                                
  DO i = 10001                                              
    READ(55,*) Fxm(i,1), Fxm(i,2)                           
  END DO                                                    
                                                            
  ! Case [C]                                                
  DO i = 10001                                              
    READ(55,*) tmp, Fxm(i,1), tmp, Fxm(i,2)                 
  END DO                                                    


0. Fortran Standard,  Default, 每做完一次 READ/WRITE, 就會自動 New Line, 除非是 Formatted Format 且有 ADVANCE='NO' 控制

1. Case [A]: 一次讀入 連續10001*2個 REALs (目前line到底了自動newline, READ做完後newline): 不論 (1, and/or , 2, and/or, 5, and/or, 10, ...)個REALs per line
    Case [B]: 一次讀2個 REALs (READ做完後newline), Loop 10001回: 如果不是嚴謹的2 REALs pe line, 至少有10001 lines, 就 掰掰了
    Case [C]: DataFile : >=4 REALs per line, 只想要 第2 及 第4 個REALs

2. DataFile如果是完美的 10001 lines, 2 REALs per line: Cases[A] ==Case[B], Case[B]可以的Case[A]一定可以
    Case[A]OK, Case[B] Fail,  就表示 DataFile不是完美的 10001 lines, 2 REALs per line, ---> [#7]


3. SAVE/只讀一次 很好的coding ,   or,   Case[A] only one READ, Case[B] 10001回READ,    其效率的差異是感受不到的
    (a) 資料量太少了,  0.001秒與0.01秒的感受
    (b) I/O一次 開門關門一次 是很耗時的, 當然編譯器會 很有效率地去做 白紙黑字Case[B]所要求的

4. 總結一下: 不是 Re-Open, 子程序裡SAVE有其功能, DataFile不是完美的 10001 lines, 2 REALs per line?

16

帖子

1

主题

0

精华

入门

F 币
73 元
贡献
36 点
22#
 楼主| 发表于 2020-8-21 15:13:52 | 只看该作者
chiangtp 发表于 2020-8-21 12:46
[Fortran] 纯文本查看 复制代码
  ! Case [A]                                                
  READ(55,*)  ...[/quote]

如果是caseA,而txt文件有5reals,但是声明的数组是2reals。读的时候按照如下代码读:
[mw_shl_code=fortran,true]READ(55,*) (Fxm(i,1), Fxm(i,2) , i=1,10001)


是不是其余3reals的数据就不会被读到,实际的读到的只有前2reals。还是说会按照,定义列数自动切换行,到时候保存的数组是2reals但是行数超过10001,这样子
您需要登录后才可以回帖 登录 | 极速注册

本版积分规则

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

GMT+8, 2024-4-19 23:22

Powered by Tencent X3.4

© 2013-2024 Tencent

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