前言
之前介绍了使用VS2019对OpenSees 3.0.0源代码进行编译的方法,在此基础上,我对源代码中提供的material二次开发实例(源代码目录–DEVELOPER–material–cpp)进行了试验,由于源代码中已经提供了该材料的h文件和cpp文件,因此本文主要介绍的是将自定义的材料嵌入到源代码的过程。
过程
- 本材料是单轴材料,材料名字为ElasticPPcpp
- 在material–uniaxial下添加h文件和cpp文件
- 在classTag.h类中添加新材料类编号,使其能被识别,格式如下: #define MAT_TAG_ElasticPPcpp 7777
- 修改actor项目中的FEM_ObjectBrokerAllclasses.cpp:首先包含新单轴材料的头文件,格式为:
#include "ElasticPPcpp.h"
(PS:这时可能会出现错误提示–“无法打开源文件 ElasticPPcpp.h”,这是因为ElasticPPcpp.h文件所在的目录没有在actor项目的包含目录中,因此在actor项目的包含目录中添加h文件的所在目录即可,同样问题解决方法相同),然后修改其中的getNewUniaxialMaterial()函数,在其中添加该材料的选项,格式如下:
case MAT_TAG_ElasticPPcpp:
return new ElasticPPcpp;
- 新增加的单轴材料需添加到TCL建模工具中,才能在分析中通过TCL命令进行定义,修改material–uniaxial–TclModelBuilderUniaxialMaterialCommand.cpp,先添加包含新材料的头文件:#include “ElasticPPcpp.h”,然后修改 TclModelBuilderUniaxialMaterialCommand函数,添加如下代码:
else if (strcmp(argv[1],"ElasticPPcpp") == 0) {
void *theMat = OPS_ElasticPPcpp();
if (theMat != 0)
theMaterial = (UniaxialMaterial *)theMat;
else
return TCL_ERROR;
}
这时可能会出现错误–未定义标识符“OPS_ElasticPPcpp”,解决方法是在该文件中包含材料的cpp文件,格式为#include <ElasticPPcpp.cpp>
。
6. 然后生成可执行文件,并且运行example1.tcl文件,运行结果如下所示,到此为止,一个简单的单轴材料二次开发完成。
结语
这是一个比较简单的二次开发实例,二次开发的难点是自定义材料的过程,希望本文能帮助到学习OpenSees二次开发同志。