(Windows、Linux)下 OpenSeesSP OpenSeesMP (3.5)的编译以及运行

Windows Linux下OpenSees OpenSeespy OpenSeesSP OpenSeesMP的编译

本文介绍的是3.5版本,整体按照官方文档的Building安装就可以。具体写一下自己踩过的坑。

1.Mumps的编译(Windows)

安装好IntelOne Basic & HPC Toolkits之后,进入Mumps编译,下面是文档给出的command:

"C:\Program Files (x86)\Intel\oneAPI\setVars" intel64 mod
git clone https://github.com/OpenSees/mumps.git
cd mumps
mkdir build
cd build
cmake .. -Darith=d -DCMAKE_MSVC_RUNTIME_LIBRARY="MultiThreaded" -G Ninja
cmake --build . --config Release --parallel 4
cd ..\..
pip install conan==1.59.0

这里需要把第一行换为:

cmd.exe "/K" '"C:\Program Files (x86)\Intel\oneAPI\setvars.bat" && powershell' 

这样才可以激活oneAPI的环境,找到Ninja编译器。
参考:https://www.intel.com/content/www/us/en/docs/oneapi/programming-guide/2023-0/use-the-setvars-script-with-windows.html

2.OpenSeesMP: Intel MKL ERROR (Windows)

OpenSeesMP编译之后运行可能会报错,
Intel MKL ERROR: Parameter 4 was incorrect on entry to DGEMM 。
此处需要更改OpenSees/CmakeList.txt 353行,将此处的set之后的内容替换为下面这行:

set (SCALAPACK_LIBRARIES "${MKL_LPATH}/mkl_scalapack_lp64.lib;${MKL_LPATH}/mkl_intel_lp64.lib;${MKL_LPATH}/mkl_sequential.lib;${MKL_LPATH}/mkl_core.lib;${MKL_LPATH}/mkl_blacs_intelmpi_lp64.lib")

随后正常编译。

解决方案来源: https://github.com/OpenSees/OpenSees/issues/1101

3.OpenSeesSP 编译失败(Windows)

需要在OpenSees/CmakeList.txt 428行之后,编译OPS_InterpTcl之前增加:

if(PARALLEL)
        message(STATUS "PARALLEL FOR SP TURNED ON ...")
        add_definitions(-D_PARALLEL_PROCESSING=1)
endif()

随后重新进行

cmake .. -DBLA_STATIC=ON -DMKL_LINK=static -DMKL_INTERFACE_FULL=intel_lp64 -DMUMPS_DIR="..\..\mumps\build" -DPARALLEL=1

此处与文档相比多增加了 -DPARALLEL=1。
之后需要编译 cmake --build . --config Release --target OpenSeesSP 两次,即可成功。

解决方案来源: https://github.com/OpenSees/OpenSees/issues/1101

4.Linux 编译失败

无法找到 MPI_FOUND ,需在cmakelist中更改:
需要在348行之前添加:

set(MPI_C_INCLUDE_DIRS "/usr/lib/x86_64-linux-gnu/openmpi/include;/usr/lib/x86_64-linux-gnu/openmpi/include/openmpi" )
set(MPI_CXX_LIBRARIES "/usr/lib/x86_64-linux-gnu/openmpi/lib/libmpi_cxx.so;/usr/lib/x86_64-linux-gnu/openmpi/lib/libmpi.so")
set(MPI_Fortran_LIBRARIES "/usr/lib/x86_64-linux-gnu/libmpi_usempif08.so;/usr/lib/x86_64-linux-gnu/libmpi_usempi_ignore_tkr.so;/usr/lib/x86_64-linux-gnu/libmpi_mpifh.so;/usr/lib/x86_64-linux-gnu/libmpi.so;/usr/lib/x86_64-linux-gnu/libopen-rte.so;/usr/lib/x86_64-linux-gnu/libopen-pal.so;/usr/lib/x86_64-linux-gnu/libhwloc.so;/usr/lib/x86_64-linux-gnu/libevent_core.so;/usr/lib/x86_64-linux-gnu/libevent_pthreads.so;/usr/lib/x86_64-linux-gnu/libm.so;/home/jack/.conan/data/zlib/1.2.13/_/_/package/dfbe50feef7f3c6223a476cd5aeadb687084a646/lib/libz.a")
set(MPI_CXX_LINK_FLAGS "")
set(MPI_FOUND TRUE)
message(STATUS "MPI was found .. path added ${MPI_C_INCLUDE_DIRS} ${MPI_FOUND}")
include_directories(SYSTEM ${MPI_C_INCLUDE_DIRS})
if (NOT DEFINED MUMPS_DIR)
   set (MUMPS_FLAG -D_NOMUMPS)
   set (MUMPS_LIBRARIES "")
else()
   set (MUMPS_FLAG -D_MUMPS)  
   if(CMAKE_SYSTEM_NAME STREQUAL "Windows")
     set (MUMPS_LIBRARIES "${MUMPS_DIR}/dmumps;${MUMPS_DIR}/mumps_common;${MUMPS_DIR}/pord")
   else()
     set (MUMPS_LIBRARIES "${MUMPS_DIR}/libdmumps.a;${MUMPS_DIR}/libmumps_common.a;${MUMPS_DIR}/libpord.a")
     message("MUMPS DIR is ${MUMPS_DIR} and flag is ${MUMPS_FLAG}" )
   endif()
endif()
add_subdirectory("${PROJECT_SOURCE_DIR}/OTHER/SuperLU_DIST_4.3/SRC")
add_subdirectory("${PROJECT_SOURCE_DIR}/OTHER/METIS")   

随后进行cmake编译,可能会报错,no rule to target *.so,需要在编译的时候把文件补充在后面:

cmake .. -DLAPACK_LIBRARIES="/usr/lib/x86_64-linux-gnu/liblapack.so;/usr/lib/x86_64-linux-gnu/libmkl_gf_lp64.so;/usr/lib/x86_64-linux-gnu/libmkl_gnu_thread.so;/usr/lib/x86_64-linux-gnu/libmkl_core.so;/usr/lib/x86_64-linux-gnu/libgomp.so.1;-lm;-ldl" -DPython_INCLUDE_DIR="/usr/include/python3.10" -DPython_LIBRARY="/usr/lib/x86_64-linux-gnu/libpython3.10.so" -DPython_EXECUTABLE="/usr/bin/python3.10" -DMUMPS_DIR=$PWD/../../mumps/build -DOPENMPI=TRUE -DSCALAPACK_LIBRARIES="/usr/lib/x86_64-linux-gnu/libmkl_blacs_openmpi_lp64.so;/usr/lib/x86_64-linux-gnu/libscalapack-openmpi.so.2.1"

5.Linux mpirun

如果报错,找不到可运行的程序,需要给绝对路径,而不是相对路径:

mpirun-np 4  /home/yourname/OpenSees/build/bin/OpenSeesSP  /home/yourname/OpenSees/EXAMPLES/SmallSP/Example.tcl

6.Windows run

mpiexec.exe -np 4 .\OpenSeesMP.exe  ../../EXAMPLES/SmallMP/Example.tcl

7.总结

以上为OpenSees 3.5.1编译可能遇到的报错,基本都是参考:
https://github.com/OpenSees/OpenSees/issues/1101
时间为2023.7.29,后续如果进行了编译的修复,那么此处的解决方案将不再具有参考价值,第一个除外。
吐槽:第一个是真坑啊!!!!!! 直接运行文档的第一行也不报错,抓狂!!!
windows和linux编译好的软件 OpenSees OpenSeesMP OpenSeesSP我上传到了百度网盘,有需要的网友可以下载:https://pan.baidu.com/s/1Ew5UABdq8zfOlMIrhqJzgQ?pwd=biis 提取码:biis

如果有帮助到您的话,请我喝冰可乐吧!感谢支持~

在这里插入图片描述

在这里插入图片描述

  • 3
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 5
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值