首页 理论教育C++调用外部库的方法ABAQUS有限元子程序开发及应用

C++调用外部库的方法ABAQUS有限元子程序开发及应用

【摘要】:相较于Fortran语言,C++语言的一大优势是含有丰富的外部库,可以满足各种计算需求,能大大提高开发子程序的效率。第1章已经简单介绍了使用外部库的好处,并通过一个简单的例子说明了使用外部库可以提高代码的可读性。本节以数值计算库armadillo为例来介绍如何在C++语言中调用外部库。如果没有进行这一步骤,则在运行中会弹出报错消息框并退出,而且弹出的是BLAS库的消息框。不过,在armadillo库中使用一维数组对矩阵进行初始化时是列优先的。

相较于Fortran语言,C++语言的一大优势是含有丰富的外部库,可以满足各种计算需求,能大大提高开发子程序的效率。第1章已经简单介绍了使用外部库的好处,并通过一个简单的例子说明了使用外部库可以提高代码的可读性。本节以数值计算库armadillo为例来介绍如何在C++语言中调用外部库。

通常情况下,只需要正常安装armadillo库就可以使用了。但如果想要使用一些好用的函数(如矩阵乘法、解方程的函数等),则需要引入BLAS库和LAPACK库。要想引入这两个库,就需要在链接器中提高它们的lib,具体操作步骤如下:

第1步,修改环境文件abaqus_v6.env中的link_sl变量,在其末尾添加两个文件名:blas_win64_MT.lib和lapack_win64_MT.lib。

第2步,将文件blas_win64_MT.lib和lapack_win64_MT.lib复制到Visual Studio(VS)的cpp库中(选择amd64),具体目录为C:/ProgramFiles(x86)/Microsoft Visual Studio 11.0/VC/lib/amd64。

第3步,将对应的两个.dll文件复制到system32目录中。如果没有进行这一步骤,则在运行中会弹出报错消息框并退出,而且弹出的是BLAS库的消息框。(www.chuimin.cn)

通过以上三步,就可以配置出非常方便使用且功能强大的C++语言数值计算环境。在配置armadillo库后,就可以更加直观和方便地定义矩阵和向量,具体可以通过下面的代码来定义:

使用上面的代码定义时,需要在子程序接口中把DDSDDE变量(上面的程序中为DDSDDEori)声明为double*或void*类型。在第2条代码中,false表示不复制数据,直接用原始位置(内存地址);true表示遵守strict-aliasing规则,即不添加空间,保证总是使用这一段空间。

注意:这里不需要对矩阵进行转置。这是因为,对于二维数组,虽然在Fortran中是列优先的,而在C++中是行优先的。不过,在armadillo库中使用一维数组对矩阵进行初始化时是列优先的。