亿万人中,你我独一无二分享 http://blog.sciencenet.cn/u/stone1913

博文

64位Intel Fortran 调用64位Matlab

已有 10215 次阅读 2013-9-26 03:11 |个人分类:经验交流|系统分类:科研笔记| Intel, fortran调用matlab

我的操作环境:

操作系统:Windows 7 64

Matlab版本:R2010b 64

Fortran编译器:Intel Visual Fortran11+Microsoft Visual Studio 2010

编译平台:Debug x64

 

1.     设定win7 环境变量:右击我的电脑-->属性-->Advanced system settings -->Advanced-->EnvironmentVariables-->System variables中找到PATH项,双击,在最后面增加路径 ;C:Program FilesMATLABR2010bbinwin64

2.     设定Fortran属性:首先操作平台要改为x64,至于是Debug或者Release都无所谓。

a.  项目-->属性-->Fortran-->General,在Additional IncludeDirectories填上C:ProgramFilesMATLABR2010bexterninclude

b.项目-->属性-->Fortran-->Preprocessor,在Preprocess Source File选择Yes

c.  项目-->属性-->Linker-->General,在Additional LibraryDirectories填上C:ProgramFilesMATLABR2010bexternlibwin64microsoft

d.项目-->属性-->Linker-->Input,在Additional Dependencies填上libmx.lib libmat.liblibeng.lib

例子:

integer*8 engOpen, engClose,mxCreateDoubleMatrix ! ! 注:在64位机器里,要声明为integer*8

integer*8 mxGetPr

integer*8engPutVariable,engGetVariable,engEvalString,engGetMatrix

 

integer*8 ep, asbm, bsbm,xsbm, reg, status ! 相当于指针的作用

integer*8 ANE1,ANE2

 

ep = engOpen('')  !ep= engOpen('')   ! 打开引擎

asbm =mxCreateDoubleMatrix(ANE1,ANE2,0)    ! 创建双精度数组第三个参数0表示实数;否则用mxCOMPLEX表示复数

call mxCopyReal8ToPtr(GG,mxGetPr(asbm),ANE1*ANE2) ! 给新创建的数组赋值,GG中的值转化为matlab能识别的语言存在asbm

status =engPutVariable(ep, 'asbm', asbm) ! 将新创建的数组植入matlab引擎(工作区)

status =engEvalString(ep," format long; xsbm=… ")  ! matlab工作区

xsbm =engGetVariable(ep,'xsbm')

callmxCopyPtrToReal8(mxGetPr(xsbm),SFI,ANE2) ! 得到matlab中某数组中的值,把matlab中的值转化为fortran能识别的值,并存在SFI

call mxDestroyArray(asbm) !关闭引擎

status = engClose(ep)

 



https://blog.sciencenet.cn/blog-425262-727886.html

上一篇:abaqus win 7下安装方法
下一篇:FORTRAN programs of gradients method
收藏 IP: 152.23.18.*| 热度|

0

该博文允许注册用户评论 请点击登录 评论 (0 个评论)

数据加载中...

Archiver|手机版|科学网 ( 京ICP备07017567号-12 )

GMT+8, 2024-5-18 04:32

Powered by ScienceNet.cn

Copyright © 2007- 中国科学报社

返回顶部