Fortran Coder

标题: abaqus调用fortran子程序读写txt时出现steptime重复,为什么? [打印本页]

作者: h08x24h08    时间: 2019-1-1 21:26
标题: abaqus调用fortran子程序读写txt时出现steptime重复,为什么?
红线是时间增量steptime,为什么都是2次重复,然后接着算? steptime这个为什么又都是3次重复再往下进行?
abaqus用fortran子程序读写时出现这种问题?有知道的吗?谢谢!


作者: h08x24h08    时间: 2019-1-1 21:32
C:\Users\xinyi\Desktop\23.jpg
作者: fcode    时间: 2019-1-2 09:17
这与你的代码逻辑有关。
对你来说,这样不对。但对机器来说,是正确的“执行了你的意图”

逻辑不符合你的期望,这问题别人不容易帮助你。
至少你得给出你的代码。
作者: h08x24h08    时间: 2019-1-2 15:10
[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

作者: h08x24h08    时间: 2019-1-2 21:32
fcode 发表于 2019-1-2 09:17
这与你的代码逻辑有关。
对你来说,这样不对。但对机器来说,是正确的“执行了你的意图”

下面是我的代码,还望有时间再帮我看看,非常感谢
作者: fcode    时间: 2019-1-3 09:33
stepTime 来源于调用者,我并不知道调用者是怎样的。(可能是另一个fortran函数,或者 abaqus?)
作者: h08x24h08    时间: 2019-1-3 16:17
[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 (10.02 KB, 下载次数: 487)

31.jpg

32.jpg (5.43 KB, 下载次数: 469)

32.jpg

作者: h08x24h08    时间: 2019-1-3 16:19
fcode 发表于 2019-1-3 09:33
stepTime 来源于调用者,我并不知道调用者是怎样的。(可能是另一个fortran函数,或者 abaqus?) ...

意思是和abaqus有关?
作者: pasuka    时间: 2019-1-3 22:20
碰撞或者冲击计算?
或许前一步迭代不收敛,自动缩小步长重来呗

作者: h08x24h08    时间: 2019-1-5 22:18
pasuka 发表于 2019-1-3 22:20
碰撞或者冲击计算?
或许前一步迭代不收敛,自动缩小步长重来呗

就一个简单的算例,固定,加了一个体力
那这种还能控制吗?
作者: pasuka    时间: 2019-1-8 21:11
h08x24h08 发表于 2019-1-5 22:18
就一个简单的算例,固定,加了一个体力
那这种还能控制吗?

很抱歉,已经10年不玩ABAQUS,实在爱莫能助




欢迎光临 Fortran Coder (http://bbs.fcode.cn/) Powered by Discuz! X3.2