Fortran Coder

查看: 204|回复: 10

[求助] abaqus调用fortran子程序读写txt时出现steptime重复,为什么?

[复制链接]

7

帖子

1

主题

0

精华

入门

F 币
38 元
贡献
21 点
发表于 2019-1-1 21:26:59 | 显示全部楼层 |阅读模式

图1

图1
红线是时间增量steptime,为什么都是2次重复,然后接着算?

图2

图2
steptime这个为什么又都是3次重复再往下进行?
abaqus用fortran子程序读写时出现这种问题?有知道的吗?谢谢!

回复

使用道具 举报

7

帖子

1

主题

0

精华

入门

F 币
38 元
贡献
21 点
 楼主| 发表于 2019-1-1 21:32:14 | 显示全部楼层
C:\Users\xinyi\Desktop\23.jpg

1359

帖子

12

主题

5

精华

论坛跑堂

Fcode跑堂伙计

F 币
411 元
贡献
367 点

新人勋章贡献勋章管理勋章帅哥勋章爱心勋章规矩勋章元老勋章水王勋章

发表于 2019-1-2 09:17:45 | 显示全部楼层
这与你的代码逻辑有关。
对你来说,这样不对。但对机器来说,是正确的“执行了你的意图”

逻辑不符合你的期望,这问题别人不容易帮助你。
至少你得给出你的代码。

7

帖子

1

主题

0

精华

入门

F 币
38 元
贡献
21 点
 楼主| 发表于 2019-1-2 15:10:43 | 显示全部楼层
[Fortran] 纯文本查看 复制代码
C
C User subroutine VDLOAD
            subroutine vdload (
C Read only -
     *     nblock, ndim, stepTime, totalTime, amplitude,
     *     curCoords, velocity, dircos, jltyp, sname,
C Write only -
     *     value )
C
      include 'vaba_param.inc'
      parameter ( const = 1.d5 ) 
C
      dimension curCoords(nblock,ndim), velocity(nblock,ndim),
     *     dircos(nblock,ndim,ndim), value(nblock)
*
      character*80 sname
*
      integer ::i
c      character(len=20)::filename="duxie.txt"
      REAL::ta
      real ::ta1
      real::tz

      open(93,FILE="D:\abaqus2016\SIMULIA\duxie.txt",status="old")      
      do
      read(93,*,iostat = ios) ta,ta1
      if ( ios == -1 ) exit 
       end do
       backspace(93)
       backspace(93)

              ta=ta+2*stepTime
              ta1=ta1+5*stepTime
              tz=0.5*ta
              tx=0.5*ta1
      write(93,*) ta,ta1
      close(93) 
      open(89,FILE="D:\abaqus2016\SIMULIA\duxiet.txt",position="append")
      write(89,*) ta,ta1,stepTime, tz
      close(89) 
      
      if( jltyp .eq. 2 ) then
        do k = 1, nblock        
        value(k) =tz
        end do
      end if
        if( jltyp .eq. 1 ) then
        do k = 1, nblock        
        value(k) =tx
        end do
        end if
    
      return
      end

7

帖子

1

主题

0

精华

入门

F 币
38 元
贡献
21 点
 楼主| 发表于 2019-1-2 21:32:34 | 显示全部楼层
fcode 发表于 2019-1-2 09:17
这与你的代码逻辑有关。
对你来说,这样不对。但对机器来说,是正确的“执行了你的意图”

下面是我的代码,还望有时间再帮我看看,非常感谢

1359

帖子

12

主题

5

精华

论坛跑堂

Fcode跑堂伙计

F 币
411 元
贡献
367 点

新人勋章贡献勋章管理勋章帅哥勋章爱心勋章规矩勋章元老勋章水王勋章

发表于 2019-1-3 09:33:43 | 显示全部楼层
stepTime 来源于调用者,我并不知道调用者是怎样的。(可能是另一个fortran函数,或者 abaqus?)

7

帖子

1

主题

0

精华

入门

F 币
38 元
贡献
21 点
 楼主| 发表于 2019-1-3 16:17:35 | 显示全部楼层
[Fortran] 纯文本查看 复制代码
            subroutine vdload (
C Read only -
     *     nblock, ndim, stepTime, totalTime, amplitude,
     *     curCoords, velocity, dircos, jltyp, sname,
C Write only -
     *     value )
C
      include 'vaba_param.inc'
      parameter ( const = 1.d5 ) 
C
      dimension curCoords(nblock,ndim), velocity(nblock,ndim),
     *     dircos(nblock,ndim,ndim), value(nblock)
*
      character*80 sname
*
      REAL::ta
      open(93,FILE="D:\abaqus2016\SIMULIA\duxie.txt",status="old")      
       read(93,*) ta
       rewind(93)
       
       ta=ta+4*stepTime
       
      write(93,*) ta
      close(93) 
      open(89,FILE="D:\abaqus2016\SIMULIA\duxiet.txt",position="append")
      write(89,*) ta,stepTime
      close(89) 
      
      if( jltyp .eq. 2 ) then
        do k = 1, nblock        
        value(k) =-ta/4    !体积是4, value(k)表示体力,体力X体积等于施加的反力( value(k)是给到abaqus里的体力,abaqus能识别,cae里面后处理得到的反力等于 value(k)X4)
        end do
      end if    
      return
      end
31.jpg
32.jpg

7

帖子

1

主题

0

精华

入门

F 币
38 元
贡献
21 点
 楼主| 发表于 2019-1-3 16:19:09 | 显示全部楼层
fcode 发表于 2019-1-3 09:33
stepTime 来源于调用者,我并不知道调用者是怎样的。(可能是另一个fortran函数,或者 abaqus?) ...

意思是和abaqus有关?

480

帖子

4

主题

0

精华

大宗师

F 币
3223 元
贡献
1907 点

水王勋章元老勋章热心勋章

发表于 2019-1-3 22:20:31 | 显示全部楼层
碰撞或者冲击计算?
或许前一步迭代不收敛,自动缩小步长重来呗

7

帖子

1

主题

0

精华

入门

F 币
38 元
贡献
21 点
 楼主| 发表于 2019-1-5 22:18:44 | 显示全部楼层
pasuka 发表于 2019-1-3 22:20
碰撞或者冲击计算?
或许前一步迭代不收敛,自动缩小步长重来呗

就一个简单的算例,固定,加了一个体力
那这种还能控制吗?
您需要登录后才可以回帖 登录 | 极速注册

本版积分规则

QQ|捐赠本站|Archiver|关于我们 About Us|群聊|Fcode

GMT+8, 2019-3-26 14:25

Powered by Discuz! X3.2

© 2001-2017 Comsenz Inc.

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