找回密码
 注册
Simdroid-非首页
查看: 370|回复: 17

[二次开发] UEXTERNALDB 子程序读取数据

[复制链接]
发表于 2013-11-21 10:15:52 | 显示全部楼层 |阅读模式 来自 大连理工大学
有谁用过UEXTERNALDB子程序读取外部txt文件数据传给其他子程序的吗?
      SUBROUTINE UEXTERNALDB(LOP,LRESTART,TIME,DTIME,KSTEP,KINC)
C
      INCLUDE 'ABA_PARAM.INC'
C
      DIMENSION TIME(2)
      COMMON A,B,C,D
C
      LOP=0
      OPEN(16,FILE='D:\temp\DFLUX\Parameter1.txt')
      OPEN(17,FILE='D:\temp\DFLUX\A.TXT')
      READ(16,*)A,B,C,D
      WRITE(17,1)A,B,C,D
1     FORMAT(4F5.2)


      RETURN
      END
这是我的子程序,就是想从Parameter1.txt读取四个数据出来,然后传入其他子程序中使用
这个子程序就过不了,请求大神帮助
发表于 2013-11-21 11:12:56 | 显示全部楼层 来自 上海
Simdroid开发平台
测试了一下
read 和 write 格式一致就可以。
要么都指定格式1 要么都默认为*。
回复 不支持

使用道具 举报

发表于 2013-11-21 11:26:28 | 显示全部楼层 来自 天津
不知你的过不了是指运行错误还是编译错误。但是,LOP在该子程序中是传递结果,一般情况下不要修改(或赋值)

点评

同意,if(lop.eq.0)......................................  发表于 2013-11-21 13:13
回复 不支持

使用道具 举报

 楼主| 发表于 2013-11-21 21:15:28 | 显示全部楼层 来自 大连理工大学
cartographer 发表于 2013-11-21 11:12
测试了一下
read 和 write 格式一致就可以。
要么都指定格式1 要么都默认为*。 ...

这个和格式好像没什么关系,现在是只要使用READ出问题了
我现在遇到的问题是Fortran子程序能运行,也可以生成A.TXT文件,里面也能生成数据,只有一次,但是后面计算就终断了,如果我不读取 改成
WRITE(17,*)'HELLO'
这个就能正常进行计算,生成的文件里面每一个增量步都会写一次
表达的不是很清楚,不知道您能理解吗?
回复 不支持

使用道具 举报

 楼主| 发表于 2013-11-21 21:18:20 | 显示全部楼层 来自 大连理工大学
cartographer 发表于 2013-11-21 11:12
测试了一下
read 和 write 格式一致就可以。
要么都指定格式1 要么都默认为*。 ...

这个和格式好像没什么关系,现在是只要使用READ出问题了
我现在遇到的问题是Fortran子程序能运行,也可以生成A.TXT文件,里面也能生成数据,只有一次,但是后面计算就终断了,如果我不读取 改成
WRITE(17,*)'HELLO'
这个就能正常进行计算,生成的文件里面每一个增量步都会写一次
表达的不是很清楚,不知道您能理解吗?
回复 不支持

使用道具 举报

 楼主| 发表于 2013-11-21 21:23:53 | 显示全部楼层 来自 大连理工大学
cl_qiu 发表于 2013-11-21 11:26
不知你的过不了是指运行错误还是编译错误。但是,LOP在该子程序中是传递结果,一般情况下不要修改(或赋值 ...

我把LOP=0删了也过不了
回复 不支持

使用道具 举报

 楼主| 发表于 2013-11-21 21:35:01 | 显示全部楼层 来自 大连理工大学
cartographer 发表于 2013-11-21 11:12
测试了一下
read 和 write 格式一致就可以。
要么都指定格式1 要么都默认为*。 ...

这里面是我的INP文件和子程序,麻烦你帮我看一下错哪了。。。内容很简单就是一个瞬态热传导
子程序就是只用读取四个数据,再输出出来,一运行就过不了
麻烦大神了


本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?注册

×
回复 不支持

使用道具 举报

发表于 2013-11-21 21:38:33 | 显示全部楼层 来自 浙江杭州
大概明白了。你有一个数据文件16,保存一些参数。这些参数是不变的,在每个增量步都要读取。

程序运行的时候,读取第一次之后,就移动到数据文件16底部了。所以第二步就报错。

解决办法就是在程序中添加一行rewind命令。让再次读取的时候从文件16开头读取。

=====================

       SUBROUTINE UEXTERNALDB(LOP,LRESTART,TIME,DTIME,KSTEP,KINC)
C
      INCLUDE 'ABA_PARAM.INC'
C
      DIMENSION TIME(2)
      COMMON A,B,C,D
C
      LOP=0
      OPEN(16,FILE='D:\temp\1121\P1.txt')
      OPEN(17,FILE='D:\temp\1121\A.TXT')
      
      READ(16,1)A,B,C,D
      WRITE(17,1)A,B,C,D
      
1     FORMAT(4F8.3)
       rewind(16)

      RETURN
      END

==============================

不知道你说的是否是这个意思??

这样运行的话,

输入的数据文件为:
16.3    55.4     78.9   112.4


而输出的 会重复很多次。次数和增量步相同。

=================

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?注册

×
回复 不支持

使用道具 举报

 楼主| 发表于 2013-11-22 07:56:43 | 显示全部楼层 来自 大连理工大学
cartographer 发表于 2013-11-21 21:38
大概明白了。你有一个数据文件16,保存一些参数。这些参数是不变的,在每个增量步都要读取。

程序运行的时 ...

对,像你这么做确实通过继续运行下去了!而且结果也是正确的,十分感谢!!!
不过其实我只想读取一遍数据,然后传递给其他子程序,也只用输出一遍,请问这个该怎么办呢?
回复 不支持

使用道具 举报

发表于 2013-11-22 12:31:24 | 显示全部楼层 来自 浙江杭州
从帮助文件的说明来看。似乎是不能的。实际上会根据lop的标示来调用。在分析开始,或者增量步开始。。。或者一个增量步不收敛时反复调用。

=================
User subroutine UEXTERNALDB:
• is called once each at the beginning of the analysis, at the beginning of each increment, at the end
of each increment, and at the end of the analysis (in addition, the subroutine is also called once at
the beginning of a restart analysis);
===================
LOP=0 indicates that the subroutine is being called at the start of the analysis.
LOP=1 indicates that the subroutine is being called at the start of the current analysis increment.
The subroutine can be called multiple times at the beginning of an analysis increment if the increment
fails to converge and a smaller time increment is required.
回复 不支持

使用道具 举报

 楼主| 发表于 2013-11-22 16:39:40 | 显示全部楼层 来自 大连理工大学
cartographer 发表于 2013-11-22 12:31
从帮助文件的说明来看。似乎是不能的。实际上会根据lop的标示来调用。在分析开始,或者增量步开始。。。或 ...

哦,这样啊,不过我试了把输出放在Return后面,就可以做到只输出一遍了
十分感谢!!!!!
回复 不支持

使用道具 举报

发表于 2016-4-10 16:56:27 | 显示全部楼层 来自 清华大学
神一样的少年 发表于 2013-11-22 16:39
哦,这样啊,不过我试了把输出放在Return后面,就可以做到只输出一遍了
十分感谢!!!!! ...

楼主,你说的是怎么放的啊?
  SUBROUTINE UEXTERNALDB(LOP,LRESTART,TIME,DTIME,KSTEP,KINC)
C
      INCLUDE 'ABA_PARAM.INC'
C
      DIMENSION TIME(2)
      COMMON A,B,C,D
C
      LOP=0
      OPEN(16,FILE='D:\temp\DFLUX\Parameter1.txt')
      OPEN(17,FILE='D:\temp\DFLUX\A.TXT')
      READ(16,*)A,B,C,D
      return
      WRITE(17,1)A,B,C,D
1     FORMAT(4F5.2)
       rewind(16)
      END
是这样嘛?为什么我运行时还是有问题?求解答
回复 不支持

使用道具 举报

发表于 2019-11-18 08:01:33 | 显示全部楼层 来自 辽宁沈阳

好好学习ABAQUS
回复 不支持

使用道具 举报

发表于 2019-12-2 08:14:17 | 显示全部楼层 来自 辽宁沈阳
谢谢分享,支持
回复 不支持

使用道具 举报

发表于 2019-12-18 16:57:06 | 显示全部楼层 来自 辽宁沈阳
谢分享谢分享谢分享
回复 不支持

使用道具 举报

发表于 2019-12-25 13:04:46 | 显示全部楼层 来自 辽宁沈阳
楼主分享楼主分享
回复 不支持

使用道具 举报

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

本版积分规则

Simapps系列直播

Archiver|小黑屋|联系我们|仿真互动网 ( 京ICP备15048925号-7 )

GMT+8, 2024-10-2 10:36 , Processed in 0.051840 second(s), 15 queries , Gzip On, MemCache On.

Powered by Discuz! X3.5 Licensed

© 2001-2024 Discuz! Team.

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