【问题标题】:ABAQUS fortran subroutine write command doesn't write anythingABAQUS fortran 子程序写命令不写任何东西
【发布时间】:2018-07-12 16:04:27
【问题描述】:

我需要将 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  

给了我PASS。

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

【问题讨论】:

  • 不要使用低单元号,开始使用单元号> 10 还要确保目录D:\Temp\workspace\fortan 存在。在您的测试中也写入标准单元'*',看看结果是否出现在.log 文件中(我认为它被称为日志文件)
  • 你能用write(*,*) 'Hello, world'写到标准输出吗?
  • OP 从未回应,但@albert 几乎可以肯定地发现了问题。但是,有recommended unit numbers for Abaqus

标签: fortran abaqus


【解决方案1】:

我会尝试写入一个已经可用的频道。例如在 UMAT 中,Write(6,) 将高斯点信息打印到 .dat 文件,而 write(7,) 打印到 .msg 文件。这样的程序在调试时似乎是一个不错的方法。当您只需要在每个收敛增量结束时获取信息时,您可能希望通过公共块将信息传递给 uexternal 例程,并在该例程中循环遍历 GP。 更好的方法是创建 SDV 并通过 UI 在 odb 中检查它们。在这种情况下,您需要在输入文件中声明要传递给 odb 的 sdv 数量。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2023-03-20
    • 1970-01-01
    • 1970-01-01
    • 2022-10-31
    • 2015-08-29
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多