jujudefuren 发表于 2021-1-16 10:35:15

ABAQUS子程序提取出来的数据滞后一个单元

标题可能不太好理解,请看下图:
我期望提取出来的数据结果(图1):

我实际提取出来的数据结果(图2):

就是会往x轴方向滞后一个单元,请问这是为什么呀?
我采用了两种方法提取数据,结果都如图2所示(唉)
方法一:
我使用的子程序:USDFLD,DISP(DISP用于定义边界孔隙压力)
我提取数据的思路:在USDFLD中调取数据写入txt文件中(同时存入STATEV(2)中),并在DISP中读取该文件的数据,写入U(1)中,按道理讲,最后ABAQUS计算出来的结果应该是SDV2和POR完全一致才对,可是结果却滞后一个单元
方法二:
我使用的子程序:USDFLD,UVARM,URDFIL,DISP(DISP用于定义边界孔隙压力)
我提取数据的思路:在URDFIL中使用common语句创建公共块,与其他子程序共享数据,把同一个数据分别存在U(1)和STATEV(2)里面,想看看提取出的数据是什么样子,结果又如图2所示(唉)
为方便各位大佬帮我找出错误(求求了),现把inp文件和方法二中的子程序的主要语句粘贴如下:
inp文件(只粘贴了与文件输出有关的语句):
......
** OUTPUT REQUESTS
**
*Restart, write, frequency=0
**
** FIELD OUTPUT: F-Output-1
**
*Output, field
*Node Output
CF, COORD, NT, POR, RF, U
*Element Output, directions=YES
FV, LE, S, SAT, SDV, TEMP, UVARM, VOIDR
*Contact Output
CDISP, CSTRESS
**
** HISTORY OUTPUT: H-Output-1
**
*Output, history, variable=PRESELECT
*EL print,FREQ=0
UVARM1, UVARM2, UVARM3
*EL FILE, FREQ=1
VOIDR, POR, UVARM, TEMP
*End Step

子程序(方法二)(为方便查看,尽量简短,只粘贴主要语句,其余语句与帮助手册中各个子程序的使用界面相同):
USDFLD:
real,dimension(100000):: Etest
      real,dimension(100000):: TEMP1
      real,dimension(100000):: DTIME1
      common/EandTEMP/Etest,TEMP1,DTIME1
      DTIME1(1)=DTIME
      statev(1)=TEMP1(1)
      statev(2)=Etest(1)
      STATEV(3)=DTIME1(1)UVARM:
real,dimension(100000):: Etest
      real,dimension(100000):: TEMP1
      real,dimension(100000):: DTIME1
      common/EandTEMP/Etest,TEMP1,DTIME1
      CALL GETVRM('TEMP',ARRAY,JARRAY,FLGRAY,JRCD,JMAC,JMATYP,
   &MATLAYO,LACCFLA)
      TEMP1(1)=ARRAY(1)
      UVAR(1)=ARRAY(1)
      UVAR(2)=Etest(1)
      UVAR(3)=DTIME1(1)URDFIL:
real,dimension(100000):: Etest
      real,dimension(100000):: TEMP1
      real,dimension(100000):: DTIME1
      common/EandTEMP/Etest,TEMP1,DTIME1
      n=0
C
C FIND CURRENT INCREMENT.
C CALL DBFILE(0,ARRAY,JRCD)里的0是指LOP=0
      CALL POSFIL(KSTEP,KINC,ARRAY,JRCD)
      DO K1=1,999999
         CALL DBFILE(0,ARRAY,JRCD)
         IF (JRCD .NE. 0) GO TO 110
         KEY=JRRAY(1,2)
          IF (KEY.EQ.87) THEN
            n=n+1
            TEMP1(n)=ARRAY(3)
            Etest(n)=ARRAY(4)
            DTIME1(n)=ARRAY(5)
          END IF
      END DO
110CONTINUE
C
      LOVRWRT=1DISP:
real:: Es(1000000)
      real,dimension(100000):: Etest
      real,dimension(100000):: TEMP1
      real,dimension(100000):: DTIME1
      common/EandTEMP/Etest,TEMP1,DTIME1
      U(1)=10*COORDS(1)
      Es(NODE)=10*COORDS(1)
      Etest(1)=Es(NODE)




页: [1]
查看完整版本: ABAQUS子程序提取出来的数据滞后一个单元