Fortran Coder

标题: Abaqus—UMAT中的混合编程问题 [打印本页]

作者: Sppy    时间: 2019-4-1 16:02
标题: Abaqus—UMAT中的混合编程问题
本帖最后由 Sppy 于 2019-4-1 16:04 编辑

Abaqus的subroutineUMAT使用Fortran编写。
我用Fortran写了一个DLL,这个DLL使用了Matlab的计算引擎,以实现混合编程,然后Abaqus的subroutineUMAT再调用这个DLL。
为啥,我不直接在subroutineUMAT里面使用接口函数来直接调用Matlab计算引擎呢?因为,Abaqus不让用户这样做。。。

Ps. 我已经在VS里面建一个项目来实现Fortran调用Matlab引擎,这个部分没有问题

但是Abaqus编译不通过
或者使用Abaqus的makelibrary命令把subroutineUMAT制作为standardU.dll,还是失败了,提示“Interface cannot appear”啥的。。。

我不太明白的地方:subroutine UMAT代码中这样做是否正确,我参考的是新浪博客的一篇文章:http://blog.sina.com.cn/s/blog_e7a006c20102xpqz.html

DLL部分代码如下
Ps. DLL代码sub_dll.for中使用的Matlab库函数libeng.lib、libmx.lib已配置好,选择64位平台;在Build动态链接库DLL过程中,将property>fortran>libraries>runtime library设置为Debug Multithreaded (/libs:static /threads /dbglibs),编译后生产Dll1.dll,用DependencyWalker打开Dll1.dll,其下面有四个分目录: LIBENG.DLL、LIBMX.DLL、KERNEL32.DLL、IMAGEHLP.DLL
[Fortran] 纯文本查看 复制代码
Subroutine dll_test01(input,output)
      Implicit none
            
      !DEC$ ATTRIBUTES DLLEXPORT,ALIAS:"dll_test01"::dll_test01

C     仅做测试用, 其逻辑为 output=intput*10; 其他代码没有展示
C     使用Matlab接口完成计算
      
      End Subroutine dll_test01

subroutine UMAT部分代码如下
[Fortran] 纯文本查看 复制代码
      !DEC$OBJCOMMENTLIB:"E:\\abaqus_program\\JC_PE_04\\Dll1.lib"
      SUBROUTINE UMAT(STRESS,STATEV,DDSDDE,SSE,SPD,SCD,
     1 RPL,DDSDDT,DRPLDE,DRPLDT,STRAN,DSTRAN,
     2 TIME,DTIME,TEMP,DTEMP,PREDEF,DPRED,MATERL,NDI,NSHR,NTENS,
     3 NSTATV,PROPS,NPROPS,COORDS,DROT,PNEWDT,CELENT,
     4 DFGRD0,DFGRD1,NOEL,NPT,KSLAY,KSPT,KSTEP,KINC)
C
      INCLUDE 'ABA_PARAM.INC'
C     仅展示部分, 其他代码没有展示

      Interface
      Subroutine dll_test01(SYIELD,sppy)
      !DEC$ATTRIBUTES DLLIMPORT,STDCALL,ALIAS:'Dll1'::dll_test01
      End Subroutine dll_test01
      End Interface
      STATEV(14)=sppy

      END


作者: Sppy    时间: 2019-4-1 16:06
说的有些乱,做了一个PDF

Abaqus—UMAT中的混合编程问题.pdf

349.61 KB, 下载次数: 20


作者: li913    时间: 2019-4-6 13:51
interface结构是申明语句,不能出现在执行部分,你把它紧跟着 INCLUDE 'ABA_PARAM.INC' 写。




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