Fortran Coder

查看: 58|回复: 2

[混编] Abaqus—UMAT中的混合编程问题

[复制链接]

2

帖子

1

主题

0

精华

入门

F 币
37 元
贡献
15 点
发表于 2019-4-1 16:02:19 | 显示全部楼层 |阅读模式
本帖最后由 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

回复

使用道具 举报

2

帖子

1

主题

0

精华

入门

F 币
37 元
贡献
15 点
 楼主| 发表于 2019-4-1 16:06:31 | 显示全部楼层
说的有些乱,做了一个PDF

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

349.61 KB, 下载次数: 3

331

帖子

1

主题

0

精华

宗师

F 币
1778 元
贡献
1174 点
发表于 2019-4-6 13:51:08 | 显示全部楼层
interface结构是申明语句,不能出现在执行部分,你把它紧跟着 INCLUDE 'ABA_PARAM.INC' 写。
您需要登录后才可以回帖 登录 | 极速注册

本版积分规则

QQ|捐赠本站|Archiver|关于我们 About Us|群聊|Fcode

GMT+8, 2019-4-19 06:57

Powered by Discuz! X3.2

© 2001-2017 Comsenz Inc.

快速回复 返回顶部 返回列表