ABAQUS fortran子例程写入命令不写入任何内容

时间:2018-07-12 16:04:27

标签: fortran abaqus

我需要将Abaqus模拟输出保存到外部文件。为此,我尝试使用子例程,但我发现它没有显示任何内容。我使用此代码进行了一些测试:

SUBROUTINE UMAT(STRESS,STATEV,DDSDDE,SSE,SPD,SCD,    
1 RPL,DDSDDT,DRPLDE,DRPLDT,                               
2 STRAN,DSTRAN,TIME,DTIME,TEMP,DTEMP,PREDEF,DPRED,CMNAME,      
3 NDI,NSHR,NTENS,NSTATV,PROPS,NPROPS,COORDS,DROT,PNEWDT,      
4 CELENT,DFGRD0,DFGRD1,NOEL,NPT,LAYER,KSPT,JSTEP,KINC)      
C                                                      
INCLUDE 'ABA_PARAM.INC'                        
C                                          
CHARACTER*80 CMNAME                                                
DIMENSION STRESS(NTENS),STATEV(NSTATV),            
1 DDSDDE(NTENS,NTENS),DDSDDT(NTENS),DRPLDE(NTENS),            
2 STRAN(NTENS),DSTRAN(NTENS),TIME(2),PREDEF(1),DPRED(1),            
3 PROPS(NPROPS),COORDS(3),DROT(3,3),DFGRD0(3,3),DFGRD1(3,3),            
4 JSTEP(4)   

C user coding to define DDSDDE, STRESS, STATEV, SSE, SPD, SCD      
C and, if necessary, RPL, DDSDDT, DRPLDE, DRPLDT, PNEWDT      
C      

OPEN (UNIT=1, FILE='D:\Temp\workspace\fortan\data_fortran.dat',      
1 STATUS='UNKNOWN', ACCESS='DIRECT',FORM='FORMATTED')      
WRITE (1,*) 'WRITE TEST'      
CLOSE (1)      

RETURN      
END 

-°-°-°-°-°-°-°-°-°-°-°-°-°-°-°-°-°-°-°-°-°-°-°-°-°-°-°-°-°-°-°-°-°-°-°-°-°-

SUBROUTINE UGENS(DDNDDE,FORCE,STATEV,SSE,SPD,PNEWDT,STRAN,               
1 DSTRAN,TSS,TIME,DTIME,TEMP,DTEMP,PREDEF,DPRED,CENAME,NDI,               
2 NSHR,NSECV,NSTATV,PROPS,JPROPS,NPROPS,NJPROP,COORDS,CELENT,               
3 THICK,DFGRD,CURV,BASIS,NOEL,NPT,KSTEP,KINC,NIT,LINPER)               
C               
INCLUDE 'ABA_PARAM.INC'               
C               
CHARACTER*80 CENAME               
DIMENSION DDNDDE(NSECV,NSECV),FORCE(NSECV),STATEV(NSTATV),               
1 STRAN(NSECV),DSTRAN(NSECV),TSS(2),TIME(2),PREDEF(*),               
2 DPRED(*),PROPS(*),JPROPS(*),COORDS(3),DFGRD(3,3),               
3 CURV(2,2),BASIS(3,3)

C 
logical, save :: isFileOpen = .FALSE.
C
CALL GETVRM('TEMP',ARRAY,JARRAY,FLGRAY,JRCD,JMAC,JMATYP,MATLAYO,
1LACCFLA)

C  IS THE FILE OPEN?                
if (.not. isFileOpen) then               
OPEN (UNIT=1, FILE='D:\Temp\workspace\fortan\data.txt',               
1 STATUS='NEW')  

C CHANGE FILE FLAG               
isFileOpen = .TRUE.               
end if       

write (1,*) 'WRITE TRY'  

RETURN               
END               

模拟运行没有任何错误,但是无论结果如何(它不会打印文本),它都不会写入文件。

我认为这可能是链接错误,但一切似乎都还不错:
我正在使用:

  • Abaqus 6.14
  • Parallel Studio XE 2013
  • 英特尔Composer XE 2013

和所有

abaqus verify -user_std               
abaqus info=system             
abaqus verify -all  

让我通过。

我真的不知道哪里可能是错误。有人知道吗?

1 个答案:

答案 0 :(得分:1)

我会尝试写一个已经可用的频道。例如在UMAT中,Write(6,)将高斯点信息打印到.dat文件,而write(7,)打印到.msg文件。这样的过程在调试时似乎是一个好方法。如果仅在每个收敛增量的末尾需要信息,则可能希望通过公共块将信息传递给uexternal例程,并在该例程中循环GP。 更好的方法是创建SDV,并通过UI在odb上对其进行检查。在这种情况下,您需要在输入文件中声明要传递给odb的多少个sdv。