Linux下编译安装PETSc

本文记录在Linux下编译安装PETSc的流程。

零、环境

操作系统Ubuntu 22.04.4 LTS
VS Code1.92.1
Git2.34.1
GCC11.4.0
CMake3.22.1
oneAPI2024.2.1

一、安装依赖

1.1 安装oneAPI

参见:Get the Intel® oneAPI Base Toolkit , Get the Intel® oneAPI HPC Toolkit 

1.2 安装CUDA

参见:NVIDIA CUDA Installation Guide for Linux 

二、编译安装

2.1 下载源码

git clone https://gitlab.com/petsc/petsc.git
cd ./petsc
git checkout v3.22.2

2.2 配置

export PETSC_ARCH=intel-zmo
export I_MPI_CC=icx 
export I_MPI_CXX=icpx
export I_MPI_F90=ifx
python3 ./configure --prefix=~/dev/3rdparty/install/intel-zmo --with-scalar-type=complex --with-debugging=0 --with-cc=mpiicx --with-cxx=mpiicpx --with-fc=mpiifx  --with-mpiexec='/opt/intel/oneapi/mpi/2021.13/bin/mpiexec'  --with-blaslapack-dir=$MKLROOT

2.3 编译安装

make PETSC_DIR=/home/nene/dev/3rdparty/src/petsc PETSC_ARCH=intel-zmo all
make PETSC_DIR=/home/nene/dev/3rdparty/src/petsc PETSC_ARCH=intel-zmo install
make PETSC_DIR=/home/nene/dev/3rdparty/install/intel-zmo PETSC_ARCH="" check

三、PETSc C++ Bindings

3.1 相关开源代码

MFEM
libMesh
DEAL.II
OOFEM
OpenFOAM

3.2 主要组件

附录I: VS Code CMakeUserPresets.json

{"version": 4,"configurePresets": [{"name": "linux_intel","inherits": "linux_gcc","displayName": "Intel(R) oneAPI DPC++/C++ Compiler 2024.0.2","description": "Using compilers: C = /opt/intel/oneapi/compiler/latest/bin/icx, CXX = /opt/intel/oneapi/compiler/latest/bin/icpx","cacheVariables": {"CMAKE_C_COMPILER": "/opt/intel/oneapi/compiler/latest/bin/icx","CMAKE_CXX_COMPILER": "/opt/intel/oneapi/compiler/latest/bin/icpx"},"environment": {"PETSC_DIR": "~/dev/3rdparty/install","PETSC_ARCH": "intel-zmo"}}],"buildPresets": [{"name": "linux_intel","description": "","displayName": "","configurePreset": "linux_intel"}]
}

附录II: CMake FindPETSc.cmake

# FindPETSc
# ---------
#
# Locates the PETSc library using pkg-config module PETSc
#
# Imported Targets
# ^^^^^^^^^^^^^^^^
#
# This module defines the following IMPORTED target:
#
#  PETSc::PETSc        - the PETSc library
#
# Result Variables
# ^^^^^^^^^^^^^^^^
#
# This module will set the following variables in your project:
#
#  PETSc_FOUND          - if false, do not try to link to PETSc
#  PETSc_LIBRARIES      - a list of the full paths to all libraries
#  PETSc_INCLUDE_DIRS   - a list of all include directories
#  PETSc_VERSION        - the full version of PETSc MAJOR.MINOR.PATCH
#  PETSc_VERSION_MAJOR  - the MAJOR part of PETSc_VERSION
#  PETSc_VERSION_MINOR  - the MINOR part of PETSc_VERSION
#  PETSc_VERSION_PATCH  - the PATCH part of PETSc_VERSION
#
# Setting these changes the behavior of the search
#  PETSC_DIR - directory in which PETSc resides
#  PETSC_ARCH - build architecture
#
# Author: Frédéric Simonis @fsimonis
# Improver: Nene Lee
# 
# References:
# - https://petsc.org/release/faq/#can-i-use-cmake-to-build-my-own-project-that-depends-on-petsc
# - https://petsc.org/release/manual/getting_started/#sec-writing-application-codes
# - https://github.com/precice/precice/blob/develop/cmake/modules/FindPETSc.cmake
# - https://github.com/oofem/oofem/blob/master/cmake/Modules/FindPETSc.cmake
#cmake_policy(VERSION 3.10)set(CMAKE_INSTALL_RPATH_USE_LINK_PATH TRUE)# set root of location to find PETSc's pkg-config
set(PETSC $ENV{PETSC_DIR}/$ENV{PETSC_ARCH})
set(ENV{PKG_CONFIG_PATH} ${PETSC}/lib/pkgconfig)# Remove the lines below if you do not wish to have PETSc determine the compilers
execute_process ( COMMAND pkg-config PETSc --variable=ccompiler COMMAND tr -d '\n' OUTPUT_VARIABLE C_COMPILER)
SET(CMAKE_C_COMPILER ${C_COMPILER})
execute_process ( COMMAND pkg-config PETSc --variable=cxxcompiler COMMAND tr -d '\n' OUTPUT_VARIABLE CXX_COMPILER)
if (CXX_COMPILER)SET(CMAKE_CXX_COMPILER ${CXX_COMPILER})
endif (CXX_COMPILER)
execute_process ( COMMAND pkg-config PETSc --variable=fcompiler COMMAND tr -d '\n' OUTPUT_VARIABLE FORTRAN_COMPILER)
if (FORTRAN_COMPILER)SET(CMAKE_Fortran_COMPILER ${FORTRAN_COMPILER})enable_language(Fortran)
endif (FORTRAN_COMPILER)find_package(PkgConfig REQUIRED)if(PKG_CONFIG_FOUND)pkg_search_module(PETSc REQUIRED IMPORTED_TARGET PETSc)# Extract version parts from the version informationif(PETSc_VERSION)set(_petsc_versions "")string(REGEX MATCHALL "[0-9]+" _petsc_versions ${PETSc_VERSION})list(GET _petsc_versions 0 _petsc_version_major)list(GET _petsc_versions 1 _petsc_version_minor)list(GET _petsc_versions 2 _petsc_version_patch)set(PETSc_VERSION ${PETSc_VERSION} CACHE STRING "Full version of PETSc")set(PETSc_VERSION_MAJOR ${_petsc_version_major} CACHE INTERNAL "Major version of PETSc")set(PETSc_VERSION_MINOR ${_petsc_version_minor} CACHE INTERNAL "Minor version of PETSc")set(PETSc_VERSION_PATCH ${_petsc_version_patch} CACHE INTERNAL "Patch version of PETSc")unset(_petsc_versions)unset(_petsc_version_major)unset(_petsc_version_minor)unset(_petsc_version_patch)endif()  
endif()include (FindPackageHandleStandardArgs)
find_package_handle_standard_args (PETScREQUIRED_VARS PETSc_FOUND PETSc_INCLUDE_DIRS PETSc_LIBRARIESVERSION_VAR PETSc_VERSION)if(NOT TARGET PETSc::PETSc)add_library(PETSc::PETSc ALIAS PkgConfig::PETSc)
endif()mark_as_advanced(PETSc_INCLUDE_DIRS PETSc_LIBRARIES PETSc_VERSION_MAJOR PETSc_VERSION_MINOR PETSc_VERSION_PATCH VERSION_VAR PETSc_VERSION)

参考文献

  • Balay S. PETSc/TAO Users Manual, Revision 3.22. Argonne National Laboratory, 2025.
  • Bueler E. PETSc for Partial Differential Equations: Numerical Solutions in C and Python. 2020.
  • MPI Forum. MPI: a message-passing interface standard. International J. Supercomputing Appli-cations, 1994.
  • William Gropp. Using MPI: Portable Parallel Programming with the Message Passing Interface. MIT Press, 1994.

网络资料 

Configuring PETSc icon-default.png?t=O83Ahttps://petsc.org/release/install/install/

Get the Intel® oneAPI Base Toolkiticon-default.png?t=O83Ahttps://www.intel.cn/content/www/cn/zh/developer/tools/oneapi/base-toolkit-download.html?packages=oneapi-toolkit&oneapi-toolkit-os=linux&oneapi-lin=apt

Get the Intel® oneAPI HPC Toolkiticon-default.png?t=O83Ahttps://www.intel.cn/content/www/cn/zh/developer/tools/oneapi/hpc-toolkit-download.html?packages=hpc-toolkit&hpc-toolkit-os=linux&hpc-toolkit-lin=apt

NVIDIA CUDA Installation Guide for Linuxicon-default.png?t=O83Ahttps://docs.nvidia.com/cuda/cuda-installation-guide-linux/index.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/pingmian/66269.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

深入Android架构(从线程到AIDL)_11 线程之间的通信架构

目录 5、 线程之间的通信架构 认识Looper与Handler对象 主线程丢信息给自己 子线程丢信息给主线程 替子线程诞生Looper与MQ 5、 线程之间的通信架构 认识Looper与Handler对象 当主线程诞生时,就会去执行一个代码循环(Looper),以便持续监视它的信息…

【中间件】docker+kafka单节点部署---zookeeper模式

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 前言消息中间件介绍1. KRaft模式2. zookeeper模式2.1. 单节点部署安装验证 前言 最近生产环境上准备部署ELFK日志监控,先在测试环境部署单节点kafka验证…

AI-Talk开发板之超拟人

一、说明 运行duomotai_ap sdk下的LLM_chat例程,实现开发板和超拟人大模型进行语音交互,支持单轮和多轮交互。 二、SDK更新 v2.3.0及以上的SDK版本才支持超拟人,如果当前SDK在v2.3.o以下,需要更新SDK。在SDK目录(duomotai_ap)下…

2024年, Milvus 社区的那些事

随着跨年钟声响起,2024 年告一段落。这一年,Milvus GitHub Stars 正式突破 3 万大关,Docker 下载量突破6700w 次,达到一个新的里程碑,在开源向量数据库领域继续引领前行。在这遥遥领先的数据背后,不妨让我们…

docker中使用Volume完成数据共享

情景概述 在一个docker中,部署两个MySQL容器,假如它们的数据都存储在自己容器内部的data目录中。这样的存储方式会有以下问题: 1.无法保证两个MySQL容器中的数据同步。 2.容器删除后,数据就会丢失。 基于以上问题,容…

【期末复习】二、进程管理

1.进程的内存结构🍊 程序加载到内存之后就变成了一个进程,进程在内存当中的一个结构有: 文本段(text section):存放程序代码 栈(stack):存放局部变量和函数返回地址 数据段(data section):存放全局变量和静态变量(static) 堆(heap):程序运行时的动态内存分…

Type-C多口适配器:高效充电与连接解决方案

在科技飞速发展的今天,我们的生活已经离不开各种各样的电子设备,如智能手机、平板电脑、智能手表和无线耳机等。这些设备不仅丰富了我们的数字生活,也带来了更多的充电需求。传统的单一充电口已经难以满足现代人对于便捷性和效率的追求&#…

UCAS 24秋网络认证技术 CH10 SSL 复习

TLS字段、参数含义要了解每个消息是什么意思 基本方式只验证服务端,服务端有证书,变形方式加上验证客户端TLS1.3区别 协商过程 背景 Record层使用的各种加密算法参数,均由Handshake协议协商获得。 具体过程 随机数交换 Client/Server相互…

支付宝商家转账到账户余额,支持多商户管理

大家好,我是小悟 转账到支付宝账户是一种通过 API 完成单笔转账的功能,支付宝商家可以向其他支付宝账户进行单笔转账。 商家只需输入另一个正确的支付宝账号,即可将资金从本企业支付宝账户转账至另一个支付宝账户。 该产品适用行业较广&am…

基于Django的旅游信息管理系统(源码+lw+部署文档+讲解),源码可白嫖!

摘要 随着我国经济的高速发展与人们生活水平的日益提高,人们对生活质量的追求也多种多样。尤其在人们生活节奏不断加快的当下,人们更趋向于足不出户解决生活上的问题,线上管理系统展现了其蓬勃生命力和广阔的前景。与此同时,随着…

常见的框架漏洞复现

1.Thinkphp Thinkphp5x远程命令执行及getshell 搭建靶场 cd vulhub/thinkphp/5-rce docker-compose up -d 首页 漏洞根本源于 thinkphp/library/think/Request.php 中method方法可以进行变量覆盖,通过覆盖类的核心属性filter导致rce,其攻击点较为多&…

UE5中实现右键开镜效果

右键之后添加时间轴,然后设置视野即可。Set Field Of View 时间轴设置,第一个点设置0,90度,因为默认的就是90度 第二个点看武器的类型或者倍境来设置,时间就是开镜时间,值越小开镜速度越快,第二个值就是视野…

关于华硕Armoury Crate(奥创中心)安装程序失败、卡进度条问题解决方案

关于华硕Armoury Crate(奥创中心)安装失败解决方案 清理旧版本文件 如果之前安装过Armoury Crate,可能有残留文件导致冲突: 利用官方的卸载工具,卸载旧版本: https://www.asus.com.cn/supportonly/armoury%20crate/…

iOS18 上的 Genmoji

在 WWDC 2025 期间,一种名为Genmoji的新型表情符号问世。 许多用户可能仍然不确定 Genmoji 是什么、它与传统表情符号有何不同、如何使用它以及如何恢复丢失的数据。因此,在本文中,我们将介绍您需要了解的有关 iOS 18 上的 Genmoji 的所有信…

基于等保的安全审计运维系统

摘要 本文研究与设计一种基于等级保护(等保)要求的安全审计运维系统,以适应日益严峻的网络安全形势和不断提高的安全审计需求。随着信息技术的快速发展和应用广泛,信息系统安全面临的威胁也在不断增加,特别是在关键信…

【OAuth2系列】如何使用OAuth 2.0实现安全授权?详解四种授权方式

作者:后端小肥肠 🍇 我写过的文章中的相关代码放到了gitee,地址:xfc-fdw-cloud: 公共解决方案 🍊 有疑问可私信或评论区联系我。 🥑 创作不易未经允许严禁转载。 姊妹篇: 【OAuth2系列】集成微…

传感器与检测技术基础知识

传感器检测系统 检测系统的组成:传感器、信号调理、数握采集、信号处理、信号显示、信号输出、输入设备、稳压电源。 检测系统的基本误差分类:绝对误差、相对误差、引用误差,最大引用误差。 测量系统的误差分类:系统误差、随机误差、粗大误…

决定系数(R²分数)——评估回归模型性能的一个指标

目录 1.定义 2.计算举例 3. 结果分析 1.定义 R(R平方)分数,也称为决定系数,是用来评估回归模型性能的一个指标。它表示自变量解释因变量变异性的比例。R分数的取值范围通常在0到1之间,其值越接近1,说明…

stm32HAL库使LED闪烁

PC13引脚为开漏接法 生成代码时设置为out put open drain gpio out put level 设置为high 1表示熄灭 我们将pa9引脚连接为推挽接法 生成代码时设置为 out put push pull Gpio out put level 设置为low 0 表示熄灭 代码使其亮起再延时0.5秒再熄灭再延时0.5秒

矩阵运算提速——玩转opencv::Mat

介绍:用Eigen或opencv::Mat进行矩阵的运算&#xff0c;比用cpp的vector或vector进行矩阵运算要快吗? 使用 Eigen 或 OpenCV 的 cv::Mat 进行矩阵运算通常比使用 std::vector<int> 或 std::vector<double> 更快。这主要有以下几个原因&#xff1a; 优化的底层实现…