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