问题提出
opensees可以使用STKO作为后处理软件进行后处理可视化和数据提取,它主要依靠MPCO记录命令
B站up,opensees抗震笔记,提供了tcl的视频教程。https://www.bilibili.com/video/BV1LV4y1574B
我的代码是openseespy写的,发现无法使用MPCO记录。
尝试解决
查看源码,发现openseespy包含MPCO记录,应该是编译问题。
cmake编译源码,opensees的tcl版本可以使用MPCO记录,openseespy直接无法启动。
使用vs编译,opensees和tcl和python都可以启动,但是都无法使用MPCO记录。
原因探究
根据https://asdeasoft.net/forum/viewtopic.php?t=2084和https://github.com/OpenSees/OpenSees/pull/601
MPCO工作依靠HDF5,HDF5包括进opensees有两种方式,一种是直接通过静态链接编译,一种是通过动态链接编译。cmake编译方式就是通过静态链接,但是vs编译默认是动态链接。
opensees官方推荐cmake编译,所以他默认你是静态链接,Frank为MPCO记录增加了_HDF5静态链接的检查。因此只需要可以在注释掉静态链接的检查,这样的话通过dll动态链接使用HdF5,不是把HDF5直接编译进去,然后选择vs编译即可。HDF5的dll应该使用的是STKO软件自带的,应该是1.12.0。
修改源代码——去掉编译检查
修改方法
注释:#ifndef _HDF5 和 #endif // !_HDF5
原本代码
#ifdef _HDF5
void* OPS_MPCORecorder();
#endif
修改后代码
// #ifdef _HDF5
void* OPS_MPCORecorder();
// #endif
b. 修改以下6处代码
OpenSees/SRC/interpreter/OpenSeesOutputCommands.cpp
OpenSees/SRC/recorder/TclRecorderCommands.cpp
OpenSees/SRC/actor/objectBroker/FEM_ObjectBrokerAllClasses.cpp
4. 编译环境
编译器版本为vs2019,和oneapi版本为w_BaseKit_p_2023.1.0.47256.exe 和w_HPCKit_p_2023.1.0.46357.exe,都是默认安装
安装 ActiveTcl-8.6.11或者8.6.12安装路径必须c:\Program Files\tcl
python,自己电脑conda对应的openseespy环境,比如我的D:\miniconda3\envs\ops11,以下都是拿这个举例,注意换成自己的路径
5.编译设置
tcl版本,确认oneapi路径正确,即opensees项目——链接器——附加库目录:是否包含自己电脑oneapi路径
默认是以下路径
C:\Program Files (x86)\Intel\oneAPI\compiler\latest\windows\compiler\lib\intel64_win
b. python版本,添加本机python路径和oneapi路径,oneapi路径同tcl
1) 设置oneapi路径同tcl中
2) 添加本机的D:\miniconda3\envs\ops11\include 进入 c/c++常规 的附加包含目录
3) 添加本机的D:\miniconda3\envs\ops11\libs 进入 链接器 的常规 附加库目录
4) 确认 链接器 的输入 附加依赖项是python311.lib或者python310.lib(与自己的python环境匹配)
确保安装SKTO,并且加入环境变量,需要重启电脑。
tcl直接测试
python需要生成的opensees.pyd和skto的hdf5.dll,复 制到D:\miniconda3\envs\ops11\Lib\site-packages\openseespywin\路径,替换原有的opensees.pyd文件。