Compare commits
196
Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
6744b7f895 | ||
|
|
51d1876427 | ||
|
|
cf18624920 | ||
|
|
ac5d8d5993 | ||
|
|
5f38694913 | ||
|
|
967a024dbe | ||
|
|
c8242b8e98 | ||
|
|
c91875c5a9 | ||
|
|
94112d7a7a | ||
|
|
c275856ced | ||
|
|
ad58472eb5 | ||
|
|
041ffbd32f | ||
|
|
72683f55ca | ||
|
|
0de5f1f70b | ||
|
|
18e7b9552c | ||
|
|
ee5cc572ce | ||
|
|
1314d0b7d3 | ||
|
|
95be3d9c12 | ||
|
|
3d6f1694b3 | ||
|
|
c454ddeb1c | ||
|
|
878bfef86b | ||
|
|
bb0b0132b1 | ||
|
|
623fc516f0 | ||
|
|
24e142b6b4 | ||
|
|
4e75435e20 | ||
|
|
364bc0faa4 | ||
|
|
03f1f5e252 | ||
|
|
6b69120856 | ||
|
|
e591dbe8b0 | ||
|
|
edd4bae030 | ||
|
|
6ea11d6e65 | ||
|
|
6e2d4bd6b8 | ||
|
|
6b40a55988 | ||
|
|
7931e85395 | ||
|
|
1190685292 | ||
|
|
b0828aa597 | ||
|
|
caa6085362 | ||
|
|
cef5e71448 | ||
|
|
078603885e | ||
|
|
8123a2e211 | ||
|
|
63e3496131 | ||
|
|
dddef6be52 | ||
|
|
8bdfcd231e | ||
|
|
5af0b1cf8a | ||
|
|
4564b6dd5d | ||
|
|
7f7394c991 | ||
|
|
e4bd8dd615 | ||
|
|
00f23ff6c7 | ||
|
|
9c6553ce2e | ||
|
|
a008739b3d | ||
|
|
673bb91447 | ||
|
|
d322228504 | ||
|
|
77ef3a2e92 | ||
|
|
2cc8c18250 | ||
|
|
48c54c0bbc | ||
|
|
57c99323e7 | ||
|
|
1b69590800 | ||
|
|
fec64571ac | ||
|
|
aa9a4887f7 | ||
|
|
757369beb3 | ||
|
|
463b57205d | ||
|
|
0e9e25f893 | ||
|
|
6598a8d90b | ||
|
|
91fabccd8b | ||
|
|
950fb937c7 | ||
|
|
ac9b14e8d7 | ||
|
|
b58ac482d3 | ||
|
|
1ebd603e62 | ||
|
|
6967342813 | ||
|
|
fe16207d6a | ||
|
|
ba94547c4d | ||
|
|
02ef0f7f04 | ||
|
|
fa3a262608 | ||
|
|
0f5b0eb57e | ||
|
|
8abd6992d8 | ||
|
|
7349ece185 | ||
|
|
58f7aacce9 | ||
|
|
af871ffa7b | ||
|
|
369d55c7b2 | ||
|
|
3876d111cf | ||
|
|
e3085a1182 | ||
|
|
66e0c79b3f | ||
|
|
8b5f9f7720 | ||
|
|
98739f8c09 | ||
|
|
84129a1f83 | ||
|
|
b6ea025795 | ||
|
|
d528e9d63e | ||
|
|
d18f11e6c7 | ||
|
|
efeb400b27 | ||
|
|
1451c3c483 | ||
|
|
f12d46bdf9 | ||
|
|
6dfb809f97 | ||
|
|
ef8785b852 | ||
|
|
efd182ec4c | ||
|
|
e7856b982a | ||
|
|
4f4d1f9d2d | ||
|
|
1a89d5af02 | ||
|
|
c71b02a915 | ||
|
|
5576f3653e | ||
|
|
7f316dd07b | ||
|
|
19b5ae6b9a | ||
|
|
94cd8859b2 | ||
|
|
8ea8b97fc8 | ||
|
|
f9abc77026 | ||
|
|
68e3f9aeb9 | ||
|
|
08f018c299 | ||
|
|
69e57546d4 | ||
|
|
433a29c9e3 | ||
|
|
92ee7099a4 | ||
|
|
808c9cd2c4 | ||
|
|
f3cd0a10e7 | ||
|
|
e6bb8c8976 | ||
|
|
4718577810 | ||
|
|
9e520183c8 | ||
|
|
95a40d7377 | ||
|
|
036846bcd6 | ||
|
|
6c2968156f | ||
|
|
9ba650f2fd | ||
|
|
ee6cb39ee0 | ||
|
|
1701a6e84c | ||
|
|
f500e5220a | ||
|
|
e078288ecb | ||
|
|
e46c7ac0e7 | ||
|
|
c2b133f3c8 | ||
|
|
373379fbdd | ||
|
|
bfc3835a1d | ||
|
|
ab8578a728 | ||
|
|
fdaaacfdf3 | ||
|
|
5d7ebbb51a | ||
|
|
fe0821413a | ||
|
|
695a5adcb2 | ||
|
|
b2dfc76f1a | ||
|
|
76c700b41e | ||
|
|
dc3f10fa63 | ||
|
|
420bb73d6c | ||
|
|
13648768ae | ||
|
|
7bfda36bca | ||
|
|
46fc3ce9c2 | ||
|
|
b3086ce754 | ||
|
|
d1312d354a | ||
|
|
16fcc3f970 | ||
|
|
a6caab3bed | ||
|
|
172b5bdcc9 | ||
|
|
72f83c132d | ||
|
|
911e394d80 | ||
|
|
4ff29e40c9 | ||
|
|
dac7808875 | ||
|
|
246fd8e6fe | ||
|
|
5e243e01f8 | ||
|
|
56b83ea538 | ||
|
|
cd7371896a | ||
|
|
3fdd3e2450 | ||
|
|
303ccefd83 | ||
|
|
48bcc332f7 | ||
|
|
0c23d23874 | ||
|
|
e76cef225d | ||
|
|
6f49201e62 | ||
|
|
1cb75f7730 | ||
|
|
ef14d682c5 | ||
|
|
54eb78e0df | ||
|
|
cd1a3a4fc7 | ||
|
|
ffb50c2416 | ||
|
|
f568ca3c6e | ||
|
|
c7fb058051 | ||
|
|
a4d87d936b | ||
|
|
f26bd4bea1 | ||
|
|
6c001c3f9a | ||
|
|
82573af316 | ||
|
|
4bfb2d62d9 | ||
|
|
0bf7a715db | ||
|
|
ad68c8f245 | ||
|
|
0b430fa5f6 | ||
|
|
238d1921c7 | ||
|
|
a25783e3b4 | ||
|
|
3aa8d49ca8 | ||
|
|
4ed6a4a014 | ||
|
|
08f910343b | ||
|
|
9fb0340206 | ||
|
|
db40e8125e | ||
|
|
3e46fce65f | ||
|
|
f649ed6b62 | ||
|
|
a1a3a51d86 | ||
|
|
6728fc7eda | ||
|
|
71e9d4e1d9 | ||
|
|
7feb560f9b | ||
|
|
aa9eadfcdf | ||
|
|
82122f05cf | ||
|
|
2d64fa2162 | ||
|
|
8041734755 | ||
|
|
523891f05f | ||
|
|
b3fc46b6f2 | ||
|
|
9271494723 | ||
|
|
f2dbcecb92 | ||
|
|
f2af9748c4 | ||
|
|
9813dd7722 | ||
|
|
3806e68ed1 |
+11
-16
@@ -23,15 +23,16 @@ install:
|
|||||||
- set MSMPI_LIB64=C:\Program Files (x86)\Microsoft SDKs\MPI\Lib\x64
|
- set MSMPI_LIB64=C:\Program Files (x86)\Microsoft SDKs\MPI\Lib\x64
|
||||||
- set MSMPI_INC=C:\Program Files (x86)\Microsoft SDKs\MPI\Include
|
- set MSMPI_INC=C:\Program Files (x86)\Microsoft SDKs\MPI\Include
|
||||||
|
|
||||||
# Install METIS, use MFEM's mirror because the original source server is often
|
# Install METIS, use a mirror because the original source server is not always
|
||||||
# down and we don't support yet the new repo https://github.com/KarypisLab/METIS
|
# up. Original url:
|
||||||
|
# http://glaros.dtc.umn.edu/gkhome/fetch/sw/metis/metis-5.1.0.tar.gz
|
||||||
- ps: Start-FileDownload 'https://mfem.github.io/tpls/metis-5.1.0.tar.gz'
|
- ps: Start-FileDownload 'https://mfem.github.io/tpls/metis-5.1.0.tar.gz'
|
||||||
- 7z x metis-5.1.0.tar.gz -so | 7z x -si -ttar > nul
|
- 7z x metis-5.1.0.tar.gz -so | 7z x -si -ttar > nul
|
||||||
- cd metis-5.1.0
|
- cd metis-5.1.0
|
||||||
- ps: ( get-content "GKlib\gk_arch.h") | % { If ($_.ReadCount -ge 52) {$_ -replace "#ifdef __MSC__","#ifdef DISABLE_THIS_ANCIENT_MSC_CHECK"} Else {$_} } | set-content "GKlib\gk_arch.h"
|
- ps: ( get-content "GKlib\gk_arch.h") | % { If ($_.ReadCount -ge 52) {$_ -replace "#ifdef __MSC__","#ifdef DISABLE_THIS_ANCIENT_MSC_CHECK"} Else {$_} } | set-content "GKlib\gk_arch.h"
|
||||||
- cmake -H. -Bbuild
|
- cmake -H. -Bbuild
|
||||||
# -DCMAKE_BUILD_TYPE=Release
|
# -DCMAKE_BUILD_TYPE=Release
|
||||||
- cmake --build build --target metis -j 4
|
- cmake --build build
|
||||||
- set METIS_PATH=%cd%
|
- set METIS_PATH=%cd%
|
||||||
- cd ..
|
- cd ..
|
||||||
|
|
||||||
@@ -40,7 +41,7 @@ install:
|
|||||||
- 7z x v2.19.0.tar.gz -so | 7z x -si -ttar > nul
|
- 7z x v2.19.0.tar.gz -so | 7z x -si -ttar > nul
|
||||||
- cd hypre-2.19.0/src
|
- cd hypre-2.19.0/src
|
||||||
- cmake -H. -Bbuild
|
- cmake -H. -Bbuild
|
||||||
- cmake --build build -j 4
|
- cmake --build build
|
||||||
- cmake --build build --target install
|
- cmake --build build --target install
|
||||||
- cd ../..
|
- cd ../..
|
||||||
|
|
||||||
@@ -49,20 +50,14 @@ install:
|
|||||||
|
|
||||||
# MFEM
|
# MFEM
|
||||||
before_build:
|
before_build:
|
||||||
- cmake . -Bbuild_parallel -DMFEM_USE_MPI=TRUE -DMFEM_USE_METIS_5=TRUE -DHYPRE_DIR=%cd%\..\hypre-2.19.0\src\hypre -DMETIS_LIBRARIES=%METIS_PATH%\build\libmetis\Debug\metis.lib -DMETIS_INCLUDE_DIRS=%METIS_PATH%\include
|
- cmake -H. -DCMAKE_INSTALL_PREFIX=install -Bbuild_parallel -DMFEM_USE_MPI=TRUE -DMFEM_USE_METIS_5=TRUE -DHYPRE_DIR=%cd%\..\hypre-2.19.0\src\hypre -DMETIS_LIBRARIES=%METIS_PATH%\build\libmetis\Debug\metis.lib -DMETIS_INCLUDE_DIRS=%METIS_PATH%\include
|
||||||
# - cmake . -Bbuild_serial -DMFEM_USE_MPI=FALSE
|
- cmake -H. -DCMAKE_INSTALL_PREFIX=install -Bbuild_serial -DMFEM_USE_MPI=FALSE
|
||||||
- cmake . -Bbuild_shared_serial -DMFEM_USE_MPI=FALSE -DBUILD_SHARED_LIBS=ON
|
|
||||||
|
|
||||||
build_script:
|
build_script:
|
||||||
- cmake --build build_parallel --config Debug -j 4
|
- cmake --build build_parallel --config Release -j 4
|
||||||
# - cmake --build build_serial --config Release -j 4
|
- cmake --build build_serial --config Release -j 4
|
||||||
# - cmake --build build_serial --target exec --config Release -j 4
|
- cmake --build build_serial --target exec --config Release -j 4
|
||||||
- cmake --build build_shared_serial --config Release -j 4
|
|
||||||
- cmake --build build_shared_serial --target exec --config Release -j 4
|
|
||||||
|
|
||||||
after_build:
|
after_build:
|
||||||
# - cd build_serial
|
- cd build_serial
|
||||||
# - ctest -C Release --output-on-failure
|
|
||||||
# - cd ..
|
|
||||||
- cd build_shared_serial
|
|
||||||
- ctest -C Release --output-on-failure
|
- ctest -C Release --output-on-failure
|
||||||
|
|||||||
@@ -1,154 +0,0 @@
|
|||||||
# Copyright (c) 2010-2025, Lawrence Livermore National Security, LLC. Produced
|
|
||||||
# at the Lawrence Livermore National Laboratory. All Rights reserved. See files
|
|
||||||
# LICENSE and NOTICE for details. LLNL-CODE-806117.
|
|
||||||
#
|
|
||||||
# This file is part of the MFEM library. For more information and source code
|
|
||||||
# availability visit https://mfem.org.
|
|
||||||
#
|
|
||||||
# MFEM is free software; you can redistribute it and/or modify it under the
|
|
||||||
# terms of the BSD-3 license. We welcome feedback and contributions, see file
|
|
||||||
# CONTRIBUTING.md for details.
|
|
||||||
---
|
|
||||||
name: Sanitizer Config
|
|
||||||
description: Sets up environment variables for MFEM sanitizer workflow
|
|
||||||
|
|
||||||
inputs:
|
|
||||||
DEBUG:
|
|
||||||
description: If true, use intermediate caches to speed up the workflow
|
|
||||||
by reusing previous builds.
|
|
||||||
default: false
|
|
||||||
|
|
||||||
REPOSITORY:
|
|
||||||
description: Repository to checkout
|
|
||||||
default: mfem/mfem
|
|
||||||
|
|
||||||
BRANCH:
|
|
||||||
description: Branch to checkout
|
|
||||||
default: ubsan
|
|
||||||
|
|
||||||
CLANG_VER:
|
|
||||||
description: CLANG version to use
|
|
||||||
default: 18
|
|
||||||
|
|
||||||
# https://github.com/llvm/llvm-project/releases
|
|
||||||
LLVM_VER:
|
|
||||||
description: LLVM version to use
|
|
||||||
default: 19.1.7
|
|
||||||
|
|
||||||
# https://github.com/hypre-space/hypre/releases
|
|
||||||
HYPRE_VER:
|
|
||||||
description: HYPRE version to use
|
|
||||||
default: 2.19.0
|
|
||||||
|
|
||||||
METIS_VER:
|
|
||||||
description: METIS version to use
|
|
||||||
default: 4.0.3
|
|
||||||
|
|
||||||
CTEST:
|
|
||||||
description: CTest command to use
|
|
||||||
default: ctest -j --test-load $(nproc)
|
|
||||||
--schedule-random
|
|
||||||
--stop-on-failure --output-on-failure
|
|
||||||
--test-dir
|
|
||||||
|
|
||||||
# https://clang.llvm.org/docs/AddressSanitizer.html
|
|
||||||
ASAN_OPTIONS:
|
|
||||||
default: detect_leaks=1,
|
|
||||||
strict_init_order=1,
|
|
||||||
strict_string_checks=1,
|
|
||||||
check_initialization_order=1,
|
|
||||||
detect_stack_use_after_return=1
|
|
||||||
ASAN_CXXFLAGS:
|
|
||||||
default: -fsanitize=address
|
|
||||||
-fsanitize-address-use-after-scope
|
|
||||||
ASAN_LDFLAGS:
|
|
||||||
default: -fsanitize=address
|
|
||||||
|
|
||||||
# https://clang.llvm.org/docs/UndefinedBehaviorSanitizer.html
|
|
||||||
UBSAN_OPTIONS:
|
|
||||||
default: halt_on_error=1, print_stacktrace=1
|
|
||||||
UBSAN_CXXFLAGS:
|
|
||||||
default: -fsanitize=undefined
|
|
||||||
UBSAN_LDFLAGS:
|
|
||||||
default: -fsanitize=undefined
|
|
||||||
|
|
||||||
# https://clang.llvm.org/docs/MemorySanitizer.html
|
|
||||||
MSAN_OPTIONS:
|
|
||||||
default: "poison_in_dtor=1"
|
|
||||||
MSAN_CXXFLAGS:
|
|
||||||
default: -fsanitize=memory
|
|
||||||
-fsanitize-memory-track-origins
|
|
||||||
-fsanitize-memory-use-after-dtor
|
|
||||||
MSAN_LDFLAGS:
|
|
||||||
default: -fsanitize=memory
|
|
||||||
|
|
||||||
LSAN_DIR:
|
|
||||||
description: LSAN suppression directory
|
|
||||||
default: lsan
|
|
||||||
|
|
||||||
LSAN_FILE:
|
|
||||||
description: LSAN suppression file
|
|
||||||
default: lsan.supp
|
|
||||||
|
|
||||||
NO_FLAGS:
|
|
||||||
description: If true, do not set any CXXFLAGS or LDFLAGS.
|
|
||||||
default: false
|
|
||||||
|
|
||||||
runs:
|
|
||||||
using: 'composite'
|
|
||||||
steps:
|
|
||||||
- name: Env (Inputs)
|
|
||||||
run: |
|
|
||||||
echo DEBUG=${{inputs.DEBUG}} >> $GITHUB_ENV
|
|
||||||
echo REPOSITORY=${{inputs.REPOSITORY}} >> $GITHUB_ENV
|
|
||||||
echo BRANCH=${{inputs.BRANCH}} >> $GITHUB_ENV
|
|
||||||
echo CLANG_VER=${{inputs.CLANG_VER}} >> $GITHUB_ENV
|
|
||||||
echo LLVM_VER=${{inputs.LLVM_VER}} >> $GITHUB_ENV
|
|
||||||
echo HYPRE_VER=${{inputs.HYPRE_VER}} >> $GITHUB_ENV
|
|
||||||
echo METIS_VER=${{inputs.METIS_VER}} >> $GITHUB_ENV
|
|
||||||
echo CTEST=${{inputs.CTEST}} >> $GITHUB_ENV
|
|
||||||
echo ASAN_OPTIONS=${{inputs.ASAN_OPTIONS}} >> $GITHUB_ENV
|
|
||||||
echo UBSAN_OPTIONS=${{inputs.UBSAN_OPTIONS}} >> $GITHUB_ENV
|
|
||||||
echo MSAN_OPTIONS=${{inputs.MSAN_OPTIONS}} >> $GITHUB_ENV
|
|
||||||
echo LSAN_DIR=${{inputs.LSAN_DIR}} >> $GITHUB_ENV
|
|
||||||
echo LSAN_FILE=${{inputs.LSAN_FILE}} >> $GITHUB_ENV
|
|
||||||
echo ASAN_CXXFLAGS=${{inputs.ASAN_CXXFLAGS}} >> $GITHUB_ENV
|
|
||||||
echo ASAN_LDFLAGS=${{inputs.ASAN_LDFLAGS}} >> $GITHUB_ENV
|
|
||||||
echo UBSAN_CXXFLAGS=${{inputs.UBSAN_CXXFLAGS}} >> $GITHUB_ENV
|
|
||||||
echo UBSAN_LDFLAGS=${{inputs.UBSAN_LDFLAGS}} >> $GITHUB_ENV
|
|
||||||
echo MSAN_CXXFLAGS=${{inputs.MSAN_CXXFLAGS}} >> $GITHUB_ENV
|
|
||||||
echo MSAN_LDFLAGS=${{inputs.MSAN_LDFLAGS}} >> $GITHUB_ENV
|
|
||||||
shell: bash
|
|
||||||
|
|
||||||
- name: Env (dir)
|
|
||||||
run: |
|
|
||||||
echo LLVM_DIR=${{github.workspace}}/llvm >> $GITHUB_ENV
|
|
||||||
echo HYPRE_DIR=hypre-${{inputs.HYPRE_VER}} >> $GITHUB_ENV
|
|
||||||
echo METIS_DIR=metis-${{inputs.METIS_VER}} >> $GITHUB_ENV
|
|
||||||
shell: bash
|
|
||||||
|
|
||||||
- name: Env (bis)
|
|
||||||
run: |
|
|
||||||
echo CC=clang-${{inputs.CLANG_VER}} >> $GITHUB_ENV
|
|
||||||
echo CXX=clang++-${{inputs.CLANG_VER}} >> $GITHUB_ENV
|
|
||||||
echo LLVM_INC=${{env.LLVM_DIR}}/include/c++/v1 >> $GITHUB_ENV
|
|
||||||
echo LLVM_LIB=${{env.LLVM_DIR}}/lib >> $GITHUB_ENV
|
|
||||||
echo HYPRE_TGZ=v${{inputs.HYPRE_VER}}.tar.gz >> $GITHUB_ENV
|
|
||||||
echo METIS_TGZ=metis-${{inputs.METIS_VER}}.tar.gz >> $GITHUB_ENV
|
|
||||||
LSAN_SUPPRESSIONS="${{github.workspace}}/${{inputs.LSAN_DIR}}/${{inputs.LSAN_FILE}}"
|
|
||||||
echo "LSAN_OPTIONS=suppressions=$LSAN_SUPPRESSIONS" >> $GITHUB_ENV
|
|
||||||
shell: bash
|
|
||||||
|
|
||||||
- name: Env (ter)
|
|
||||||
if: ${{ inputs.NO_FLAGS != 'true' }}
|
|
||||||
run: |
|
|
||||||
echo LLVM_CXXFLAGS=-stdlib=libc++ -I${{env.LLVM_INC}} -Isystem${{env.LLVM_INC}} >> $GITHUB_ENV
|
|
||||||
echo LLVM_LDFLAGS=-L${{env.LLVM_LIB}} -lc++abi -Wl,-rpath,${{env.LLVM_LIB}} >> $GITHUB_ENV
|
|
||||||
shell: bash
|
|
||||||
|
|
||||||
- name: Env (quater)
|
|
||||||
if: ${{ inputs.NO_FLAGS != 'true' }}
|
|
||||||
run: |
|
|
||||||
echo CXXFLAGS=${{env.LLVM_CXXFLAGS}} >> $GITHUB_ENV
|
|
||||||
echo LDFLAGS=${{env.LLVM_LDFLAGS}} >> $GITHUB_ENV
|
|
||||||
shell: bash
|
|
||||||
@@ -1,91 +0,0 @@
|
|||||||
# Copyright (c) 2010-2025, Lawrence Livermore National Security, LLC. Produced
|
|
||||||
# at the Lawrence Livermore National Laboratory. All Rights reserved. See files
|
|
||||||
# LICENSE and NOTICE for details. LLNL-CODE-806117.
|
|
||||||
#
|
|
||||||
# This file is part of the MFEM library. For more information and source code
|
|
||||||
# availability visit https://mfem.org.
|
|
||||||
#
|
|
||||||
# MFEM is free software; you can redistribute it and/or modify it under the
|
|
||||||
# terms of the BSD-3 license. We welcome feedback and contributions, see file
|
|
||||||
# CONTRIBUTING.md for details.
|
|
||||||
---
|
|
||||||
name: 'MFEM Compilation'
|
|
||||||
description: 'MFEM Compilation'
|
|
||||||
|
|
||||||
inputs:
|
|
||||||
par:
|
|
||||||
description: 'Whether to build for parallel (true/false)'
|
|
||||||
default: false
|
|
||||||
sanitizer:
|
|
||||||
description: 'Sanitizer to use (asan, msan, ubsan)'
|
|
||||||
default: asan
|
|
||||||
|
|
||||||
runs:
|
|
||||||
using: 'composite'
|
|
||||||
steps:
|
|
||||||
- uses: ./.github/actions/sanitize/config
|
|
||||||
|
|
||||||
- uses: actions/cache@v5
|
|
||||||
if: ${{env.DEBUG == 'true'}}
|
|
||||||
id: debug
|
|
||||||
with:
|
|
||||||
path: mfem/build
|
|
||||||
key: build-${{inputs.par}}-${{inputs.sanitizer}}
|
|
||||||
|
|
||||||
- uses: ./.github/actions/sanitize/setup
|
|
||||||
if: ${{steps.debug.outputs.cache-hit != 'true'}}
|
|
||||||
with:
|
|
||||||
par: ${{inputs.par}}
|
|
||||||
sanitizer: ${{inputs.sanitizer}}
|
|
||||||
|
|
||||||
- name: Build with ASAN
|
|
||||||
if: inputs.sanitizer == 'asan'
|
|
||||||
run: echo CXXFLAGS=${{env.CXXFLAGS}} ${{env.ASAN_CXXFLAGS}} >> $GITHUB_ENV
|
|
||||||
shell: bash
|
|
||||||
|
|
||||||
- name: Build with MSAN
|
|
||||||
if: inputs.sanitizer == 'msan'
|
|
||||||
run: echo CXXFLAGS=${{env.CXXFLAGS}} ${{env.MSAN_CXXFLAGS}} >> $GITHUB_ENV
|
|
||||||
shell: bash
|
|
||||||
|
|
||||||
- name: Build with UBSAN
|
|
||||||
if: inputs.sanitizer == 'ubsan'
|
|
||||||
run: echo CXXFLAGS=${{env.CXXFLAGS}} ${{env.UBSAN_CXXFLAGS}} >> $GITHUB_ENV
|
|
||||||
shell: bash
|
|
||||||
|
|
||||||
- uses: mfem/github-actions/build-mfem@v2.5
|
|
||||||
if: ${{steps.debug.outputs.cache-hit != 'true'}}
|
|
||||||
env:
|
|
||||||
CXXFLAGS: ${{env.CXXFLAGS}}
|
|
||||||
LDFLAGS: ${{env.LDFLAGS}}
|
|
||||||
with:
|
|
||||||
mpi: ${{inputs.par == 'false' && 'seq' || 'par'}}
|
|
||||||
mfem-dir: mfem
|
|
||||||
os: ${{runner.os}}
|
|
||||||
library-only: true
|
|
||||||
build-system: cmake
|
|
||||||
hypre-dir: ${{env.HYPRE_DIR}}
|
|
||||||
metis-dir: ${{env.METIS_DIR}}
|
|
||||||
config-options: >-
|
|
||||||
-GNinja
|
|
||||||
-DMPICXX=${{env.CXX}}
|
|
||||||
-DCMAKE_CXX_STANDARD=17
|
|
||||||
-DMFEM_USE_MEMALLOC=OFF
|
|
||||||
-DCMAKE_BUILD_TYPE=Release
|
|
||||||
-DCMAKE_VERBOSE_MAKEFILE=ON
|
|
||||||
-DCMAKE_CXX_COMPILER=${{env.CXX}}
|
|
||||||
-DCMAKE_CXX_FLAGS_RELEASE='-g -O1 -fno-omit-frame-pointer'
|
|
||||||
|
|
||||||
- name: Delete object files
|
|
||||||
if: ${{steps.debug.outputs.cache-hit != 'true'}}
|
|
||||||
working-directory: mfem/build
|
|
||||||
run: find . -type f -name '*.o' -delete
|
|
||||||
shell: bash
|
|
||||||
|
|
||||||
- uses: actions/upload-artifact@v4
|
|
||||||
with:
|
|
||||||
name: build-${{inputs.par}}-${{inputs.sanitizer}}
|
|
||||||
path: mfem/build
|
|
||||||
if-no-files-found: error
|
|
||||||
retention-days: 1
|
|
||||||
overwrite: false
|
|
||||||
@@ -1,33 +0,0 @@
|
|||||||
# Copyright (c) 2010-2025, Lawrence Livermore National Security, LLC. Produced
|
|
||||||
# at the Lawrence Livermore National Laboratory. All Rights reserved. See files
|
|
||||||
# LICENSE and NOTICE for details. LLNL-CODE-806117.
|
|
||||||
#
|
|
||||||
# This file is part of the MFEM library. For more information and source code
|
|
||||||
# availability visit https://mfem.org.
|
|
||||||
#
|
|
||||||
# MFEM is free software; you can redistribute it and/or modify it under the
|
|
||||||
# terms of the BSD-3 license. We welcome feedback and contributions, see file
|
|
||||||
# CONTRIBUTING.md for details.
|
|
||||||
---
|
|
||||||
name: 'Install MPI'
|
|
||||||
description: 'Installs MPI and set up its environment variables'
|
|
||||||
|
|
||||||
runs:
|
|
||||||
using: 'composite'
|
|
||||||
steps:
|
|
||||||
- name: Install
|
|
||||||
run: sudo apt-get install openmpi-bin libopenmpi-dev
|
|
||||||
shell: bash
|
|
||||||
|
|
||||||
- name: Env
|
|
||||||
run: |
|
|
||||||
echo PRTE_MCA_rmaps_default_mapping_policy=:oversubscribe >> $GITHUB_ENV
|
|
||||||
echo MPI_INC=$(mpicxx --showme:compile) >> $GITHUB_ENV
|
|
||||||
echo MPI_LIB=$(mpicxx --showme:link) >> $GITHUB_ENV
|
|
||||||
shell: bash
|
|
||||||
|
|
||||||
- name: Env (bis)
|
|
||||||
run: |
|
|
||||||
echo CXXFLAGS=${{env.CXXFLAGS}} ${{env.MPI_INC}} >> $GITHUB_ENV
|
|
||||||
echo LDFLAGS=${{env.LDFLAGS}} ${{env.MPI_LIB}} >> $GITHUB_ENV
|
|
||||||
shell: bash
|
|
||||||
@@ -1,71 +0,0 @@
|
|||||||
# Copyright (c) 2010-2025, Lawrence Livermore National Security, LLC. Produced
|
|
||||||
# at the Lawrence Livermore National Laboratory. All Rights reserved. See files
|
|
||||||
# LICENSE and NOTICE for details. LLNL-CODE-806117.
|
|
||||||
#
|
|
||||||
# This file is part of the MFEM library. For more information and source code
|
|
||||||
# availability visit https://mfem.org.
|
|
||||||
#
|
|
||||||
# MFEM is free software; you can redistribute it and/or modify it under the
|
|
||||||
# terms of the BSD-3 license. We welcome feedback and contributions, see file
|
|
||||||
# CONTRIBUTING.md for details.
|
|
||||||
---
|
|
||||||
name: 'Restore state'
|
|
||||||
description: 'Restore state to be able to run checks, tests'
|
|
||||||
|
|
||||||
inputs:
|
|
||||||
par:
|
|
||||||
description: 'Whether to build for parallel (true/false)'
|
|
||||||
default: false
|
|
||||||
sanitizer:
|
|
||||||
description: 'Sanitizer to use (asan, msan, ubsan)'
|
|
||||||
default: asan
|
|
||||||
cache-path:
|
|
||||||
description: 'path to what needs to be restored'
|
|
||||||
default: none
|
|
||||||
cache-skip:
|
|
||||||
description: 'Skip cache restoration'
|
|
||||||
default: false
|
|
||||||
|
|
||||||
outputs:
|
|
||||||
cache-hit:
|
|
||||||
description: 'Output from a specific step'
|
|
||||||
value: ${{steps.debug.outputs.cache-hit}}
|
|
||||||
|
|
||||||
runs:
|
|
||||||
using: 'composite'
|
|
||||||
steps:
|
|
||||||
- uses: ./.github/actions/sanitize/config
|
|
||||||
|
|
||||||
- uses: actions/cache@v5
|
|
||||||
if: ${{env.DEBUG == 'true' && inputs.cache-skip != 'true'}}
|
|
||||||
id: debug
|
|
||||||
with:
|
|
||||||
path: ${{inputs.cache-path}}
|
|
||||||
key: ${{github.job}}-${{inputs.par}}-${{inputs.sanitizer}}
|
|
||||||
|
|
||||||
- uses: ./.github/actions/sanitize/setup
|
|
||||||
if: ${{steps.debug.outputs.cache-hit != 'true'}}
|
|
||||||
with:
|
|
||||||
par: ${{inputs.par}}
|
|
||||||
sanitizer: ${{inputs.sanitizer}}
|
|
||||||
|
|
||||||
- uses: actions/download-artifact@v4
|
|
||||||
with:
|
|
||||||
name: build-${{inputs.par}}-${{inputs.sanitizer}}
|
|
||||||
path: mfem/build
|
|
||||||
|
|
||||||
- name: Ninja Patch
|
|
||||||
working-directory: mfem/build
|
|
||||||
run: |
|
|
||||||
sed -i -e 's/CXX_STATIC_LIBRARY_LINKER__mfem_Release.*/CUSTOM_COMMAND/' build.ninja
|
|
||||||
sed -i -e '/build tests\/unit\/all:/ s/tests\/unit\/[^ ]*unit_tests[^ ]*//g' build.ninja
|
|
||||||
sed -i -e '/^add_test(\[=\[\(unit_tests\|punit_tests\)\]=\]/ s/)/ "--input-file .\/list-test-names-${{matrix.tag}}" "--min-duration 1")/' tests/unit/CTestTestfile.cmake
|
|
||||||
shell: bash
|
|
||||||
|
|
||||||
- name: Copy Data
|
|
||||||
if: ${{steps.debug.outputs.cache-hit != 'true'}}
|
|
||||||
working-directory: mfem/build
|
|
||||||
run: |
|
|
||||||
ninja cmake_object_order_depends_target_unit_tests
|
|
||||||
cp -pR ../tests/unit/data tests/unit
|
|
||||||
shell: bash
|
|
||||||
@@ -1,64 +0,0 @@
|
|||||||
# Copyright (c) 2010-2025, Lawrence Livermore National Security, LLC. Produced
|
|
||||||
# at the Lawrence Livermore National Laboratory. All Rights reserved. See files
|
|
||||||
# LICENSE and NOTICE for details. LLNL-CODE-806117.
|
|
||||||
#
|
|
||||||
# This file is part of the MFEM library. For more information and source code
|
|
||||||
# availability visit https://mfem.org.
|
|
||||||
#
|
|
||||||
# MFEM is free software; you can redistribute it and/or modify it under the
|
|
||||||
# terms of the BSD-3 license. We welcome feedback and contributions, see file
|
|
||||||
# CONTRIBUTING.md for details.
|
|
||||||
---
|
|
||||||
name: 'Setup state'
|
|
||||||
description: 'Sets up the state to be able to run build & run'
|
|
||||||
|
|
||||||
inputs:
|
|
||||||
par:
|
|
||||||
description: 'Whether to build for parallel (true/false)'
|
|
||||||
default: false
|
|
||||||
sanitizer:
|
|
||||||
description: 'Sanitizer to use (asan, msan, ubsan)'
|
|
||||||
default: asan
|
|
||||||
|
|
||||||
runs:
|
|
||||||
using: 'composite'
|
|
||||||
steps:
|
|
||||||
- uses: actions/cache/restore@v5 # Cache for LLVM libcxx
|
|
||||||
with:
|
|
||||||
path: ${{env.LLVM_DIR}}
|
|
||||||
fail-on-cache-miss: true
|
|
||||||
key: build-libcxx-${{env.LLVM_VER}}-${{inputs.sanitizer}}
|
|
||||||
|
|
||||||
- uses: ./.github/actions/sanitize/mpi
|
|
||||||
if: ${{inputs.par == 'true'}}
|
|
||||||
|
|
||||||
- uses: actions/cache/restore@v5 # Cache for Hypre
|
|
||||||
if: ${{inputs.par == 'true'}}
|
|
||||||
with:
|
|
||||||
path: ${{env.HYPRE_DIR}}
|
|
||||||
fail-on-cache-miss: true
|
|
||||||
key: ${{runner.os}}-ompi-build-${{env.HYPRE_DIR}}-int32-fp64-v2.5
|
|
||||||
|
|
||||||
- uses: actions/cache/restore@v5 # Cache for Metis
|
|
||||||
if: ${{inputs.par == 'true'}}
|
|
||||||
with:
|
|
||||||
path: ${{env.METIS_DIR}}
|
|
||||||
fail-on-cache-miss: true
|
|
||||||
key: ${{runner.os}}-build-${{env.METIS_DIR}}-v2.5
|
|
||||||
|
|
||||||
- name: Hypre/Metis links
|
|
||||||
if: ${{inputs.par == 'true'}}
|
|
||||||
run: ln -s -f ${{env.HYPRE_DIR}} hypre && ln -s -f ${{env.METIS_DIR}} metis-4.0
|
|
||||||
shell: bash
|
|
||||||
|
|
||||||
- uses: actions/cache/restore@v5 # Cache for LSAN suppression file
|
|
||||||
with:
|
|
||||||
path: ${{env.LSAN_DIR}}
|
|
||||||
fail-on-cache-miss: true
|
|
||||||
key: build-lsan-suppression-file
|
|
||||||
|
|
||||||
- uses: actions/checkout@v6 # Checkout the repository
|
|
||||||
with:
|
|
||||||
path: mfem
|
|
||||||
# ref: ${{env.BRANCH}}
|
|
||||||
# repository: ${{env.REPOSITORY}}
|
|
||||||
@@ -0,0 +1,61 @@
|
|||||||
|
# Configuration for probot-stale - https://github.com/probot/stale
|
||||||
|
|
||||||
|
# Number of days of inactivity before an Issue or Pull Request becomes stale
|
||||||
|
daysUntilStale: 30
|
||||||
|
|
||||||
|
# Number of days of inactivity before an Issue or Pull Request with the stale
|
||||||
|
# label is closed. Set to false to disable. If disabled, issues still need to
|
||||||
|
# be closed manually, but will remain marked as stale.
|
||||||
|
daysUntilClose: 7
|
||||||
|
|
||||||
|
# Only issues or pull requests with all of these labels are check if stale.
|
||||||
|
# Defaults to `[]` (disabled)
|
||||||
|
onlyLabels: []
|
||||||
|
|
||||||
|
# Issues or Pull Requests with these labels will never be considered stale. Set
|
||||||
|
# to `[]` to disable
|
||||||
|
exemptLabels:
|
||||||
|
- bug
|
||||||
|
- WIP
|
||||||
|
- ready-for-review
|
||||||
|
- in-review
|
||||||
|
- in-next
|
||||||
|
|
||||||
|
# Set to true to ignore issues in a project (defaults to false)
|
||||||
|
exemptProjects: false
|
||||||
|
|
||||||
|
# Set to true to ignore issues in a milestone (defaults to false)
|
||||||
|
exemptMilestones: false
|
||||||
|
|
||||||
|
# Set to true to ignore issues with an assignee (defaults to false)
|
||||||
|
exemptAssignees: false
|
||||||
|
|
||||||
|
# Label to use when marking an issue as stale
|
||||||
|
staleLabel: stale
|
||||||
|
|
||||||
|
# Comment to post when marking an issue as stale. Set to `false` to disable
|
||||||
|
markComment: >
|
||||||
|
:warning: This issue or PR has been automatically marked as stale because it has not
|
||||||
|
had any activity in the last month. *If no activity occurs in the next week, it will
|
||||||
|
be automatically closed.* Thank you for your contributions.
|
||||||
|
|
||||||
|
# Comment to post when closing a stale issue. Set to `false` to disable
|
||||||
|
closeComment: false
|
||||||
|
|
||||||
|
# Limit the number of actions per hour, from 1-30. Default is 30
|
||||||
|
limitPerRun: 30
|
||||||
|
|
||||||
|
# Limit to only `issues` or `pulls`
|
||||||
|
# only: issues
|
||||||
|
|
||||||
|
# Optionally, specify configuration settings that are specific to just 'issues' or 'pulls':
|
||||||
|
# pulls:
|
||||||
|
# daysUntilStale: 30
|
||||||
|
# markComment: >
|
||||||
|
# This pull request has been automatically marked as stale because it has not had
|
||||||
|
# recent activity. It will be closed if no further activity occurs. Thank you
|
||||||
|
# for your contributions.
|
||||||
|
|
||||||
|
# issues:
|
||||||
|
# exemptLabels:
|
||||||
|
# - confirmed
|
||||||
@@ -7,17 +7,18 @@
|
|||||||
|
|
||||||
https://mfem.org
|
https://mfem.org
|
||||||
|
|
||||||
|
|
||||||
This directory contains the GitHub CI scripts for MFEM.
|
This directory contains the GitHub CI scripts for MFEM.
|
||||||
|
|
||||||
Note that some of these scripts use the shared MFEM GitHub Actions from the external mfem/github-actions repository:
|
Note that some of these scripts use the shared MFEM GitHub Actions from the external mfem/github-actions repository:
|
||||||
|
|
||||||
<https://github.com/mfem/github-actions>
|
https://github.com/mfem/github-actions
|
||||||
|
|
||||||
For a particular action, e.g. `mfem/github-actions/build-mfem@v2.5`, the `v2.5` suffix denotes the branch in the above from which the action is taken.
|
For a particular action, e.g. `mfem/github-actions/build-mfem@v2.1`, the `v2.1` suffix denotes the branch in the above from which the action is taken.
|
||||||
|
|
||||||
The current CI workflows are:
|
The current CI workflows are:
|
||||||
|
|
||||||
## `repo-check.yml`
|
### `repo-check.yml`
|
||||||
|
|
||||||
Runs a number of static repository-level sanity checks.
|
Runs a number of static repository-level sanity checks.
|
||||||
|
|
||||||
@@ -29,39 +30,19 @@ Runs a number of static repository-level sanity checks.
|
|||||||
|
|
||||||
- `branch-history` guards against accidental commits of large files using the `--history` option of the `config/githooks/pre-push` script.
|
- `branch-history` guards against accidental commits of large files using the `--history` option of the `config/githooks/pre-push` script.
|
||||||
|
|
||||||
## `mfem-analysis.yml` (`build-analysis`)
|
### `mfem-analysis.yml` (`build-analysis`)
|
||||||
|
|
||||||
Checks if the code builds and satisfies minimal requirements.
|
Checks if the code builds and satisfies minimal requirements.
|
||||||
|
|
||||||
- `gitignore` builds hypre, METIS, and MFEM using `mfem/github-actions/build-hypre`, `mfem/github-actions/build-metis`, and `mfem/github-actions/build-mfem` and checks for correct `.gitignore` settings by running the `tests/scripts/gitignore` script.
|
- `gitignore` builds hypre, METIS, and MFEM using `mfem/github-actions/build-hypre`, `mfem/github-actions/build-metis`, and `mfem/github-actions/build-mfem` and checks for correct `.gitignore` settings by running the `tests/scripts/gitignore` script.
|
||||||
|
|
||||||
## `builds-and-tests.yml`
|
### `builds-and-tests.yml`
|
||||||
|
|
||||||
Runs a matrix of builds and tests runs with different compilers, OS, mfem/hypre settings, etc. Also processes and upload Codecov reports.
|
Runs a matrix of builds and tests runs with different compilers, OS, mfem/hypre settings, etc. Also processes and upload Codecov reports.
|
||||||
|
|
||||||
Uses the following GitHub Actions from <https://github.com/mfem/github-actions>:
|
Uses the following GitHub Actions from https://github.com/mfem/github-actions:
|
||||||
|
|
||||||
- `mfem/github-actions/build-hypre`
|
- `mfem/github-actions/build-hypre`
|
||||||
- `mfem/github-actions/build-metis`
|
- `mfem/github-actions/build-metis`
|
||||||
- `mfem/github-actions/build-mfem`
|
- `mfem/github-actions/build-mfem`
|
||||||
- `mfem/github-actions/upload-coverage`
|
- `mfem/github-actions/upload-coverage`
|
||||||
|
|
||||||
## Sanitizer Workflow for MFEM Verification
|
|
||||||
|
|
||||||
This workflow validates MFEM unit tests, examples, and miniapps using sanitizer tools.
|
|
||||||
|
|
||||||
- `sanitizers.yml` orchestrates:
|
|
||||||
- Building and caching dependencies: HYPRE, METIS, LSAN suppression file, and LLVM libcxx.
|
|
||||||
- Launching fine-grained jobs for serial (ASAN, MSAN, UBSAN) and parallel (ASAN, UBSAN) sanitizers.
|
|
||||||
- `sanitize-tests.yml` is a reusable workflow accepting `par` mode (`true` for parallel) and `sanitizer` (ASAN, MSAN, or UBSAN) as inputs. It executes the following jobs:
|
|
||||||
- **Build**: Compiles the MFEM library with specified parallel and sanitizer settings.
|
|
||||||
- **Check**: Runs verification checks.
|
|
||||||
- Parallel jobs to test the following: **Examples**, **Miniapps** and **Unit tests**
|
|
||||||
|
|
||||||
The workflow leverages composite actions in `.github/actions/sanitize/`:
|
|
||||||
|
|
||||||
- `config`: Centralizes settings for the sanitizer workflow.
|
|
||||||
- `mfem`: Manages the MFEM library build process.
|
|
||||||
- `mpi`: Installs MPI and applies additional compilation flags.
|
|
||||||
- `restore`: Restores the testing environment state.
|
|
||||||
- `setup`: Builds or restores cached dependencies.
|
|
||||||
|
|||||||
@@ -1,6 +1,7 @@
|
|||||||
name: "Docker"
|
name: Build Deploy Container
|
||||||
|
|
||||||
on:
|
on:
|
||||||
|
|
||||||
# Always have a base image ready to go - this is a nightly build
|
# Always have a base image ready to go - this is a nightly build
|
||||||
schedule:
|
schedule:
|
||||||
- cron: 0 3 * * *
|
- cron: 0 3 * * *
|
||||||
@@ -25,6 +26,7 @@ jobs:
|
|||||||
strategy:
|
strategy:
|
||||||
fail-fast: false
|
fail-fast: false
|
||||||
matrix:
|
matrix:
|
||||||
|
|
||||||
# Dockerfiles to build, a matrix supports future expanded builds
|
# Dockerfiles to build, a matrix supports future expanded builds
|
||||||
container: [["config/docker/Dockerfile.base", "ghcr.io/mfem/mfem-ubuntu-base"],
|
container: [["config/docker/Dockerfile.base", "ghcr.io/mfem/mfem-ubuntu-base"],
|
||||||
["config/docker/Dockerfile", "ghcr.io/mfem/mfem-ubuntu"]]
|
["config/docker/Dockerfile", "ghcr.io/mfem/mfem-ubuntu"]]
|
||||||
@@ -32,20 +34,15 @@ jobs:
|
|||||||
runs-on: ubuntu-latest
|
runs-on: ubuntu-latest
|
||||||
name: Build
|
name: Build
|
||||||
steps:
|
steps:
|
||||||
- name: Run Actions Cleaner
|
|
||||||
uses: easimon/maximize-build-space@v8
|
|
||||||
with:
|
|
||||||
overprovision-lvm: 'true'
|
|
||||||
remove-dotnet: 'true'
|
|
||||||
remove-android: 'true'
|
|
||||||
remove-haskell: 'true'
|
|
||||||
remove-codeql: 'true'
|
|
||||||
remove-docker-images: 'true'
|
|
||||||
|
|
||||||
- name: Checkout
|
- name: Checkout
|
||||||
uses: actions/checkout@v6
|
uses: actions/checkout@v3
|
||||||
|
|
||||||
# It's easier to reference named variables than indexes of the matrix
|
- name: Make Space For Build
|
||||||
|
run: |
|
||||||
|
sudo rm -rf /usr/share/dotnet
|
||||||
|
sudo rm -rf /opt/ghc
|
||||||
|
|
||||||
|
# It's easier to reference named variables than indexes of the matrix
|
||||||
- name: Set Environment
|
- name: Set Environment
|
||||||
env:
|
env:
|
||||||
dockerfile: ${{ matrix.container[0] }}
|
dockerfile: ${{ matrix.container[0] }}
|
||||||
@@ -65,7 +62,7 @@ jobs:
|
|||||||
|
|
||||||
- name: GHCR Login
|
- name: GHCR Login
|
||||||
if: (github.event_name != 'pull_request')
|
if: (github.event_name != 'pull_request')
|
||||||
uses: docker/login-action@v3
|
uses: docker/login-action@v1
|
||||||
with:
|
with:
|
||||||
registry: ghcr.io
|
registry: ghcr.io
|
||||||
username: ${{ github.actor }}
|
username: ${{ github.actor }}
|
||||||
@@ -1,4 +1,4 @@
|
|||||||
# Copyright (c) 2010-2025, Lawrence Livermore National Security, LLC. Produced
|
# Copyright (c) 2010-2022, Lawrence Livermore National Security, LLC. Produced
|
||||||
# at the Lawrence Livermore National Laboratory. All Rights reserved. See files
|
# at the Lawrence Livermore National Laboratory. All Rights reserved. See files
|
||||||
# LICENSE and NOTICE for details. LLNL-CODE-806117.
|
# LICENSE and NOTICE for details. LLNL-CODE-806117.
|
||||||
#
|
#
|
||||||
@@ -10,7 +10,7 @@
|
|||||||
# CONTRIBUTING.md for details.
|
# CONTRIBUTING.md for details.
|
||||||
|
|
||||||
# In this CI section, we build different variants of mfem and run test on them.
|
# In this CI section, we build different variants of mfem and run test on them.
|
||||||
name: "Tests"
|
name: builds-and-tests
|
||||||
|
|
||||||
# Github actions can use the default "GITHUB_TOKEN". By default, this token
|
# Github actions can use the default "GITHUB_TOKEN". By default, this token
|
||||||
# is set to have permissive access. However, this is not a good practice
|
# is set to have permissive access. However, this is not a good practice
|
||||||
@@ -29,15 +29,10 @@ on:
|
|||||||
pull_request:
|
pull_request:
|
||||||
workflow_dispatch:
|
workflow_dispatch:
|
||||||
|
|
||||||
concurrency:
|
|
||||||
group: ${{ github.workflow }}-${{ github.ref }}
|
|
||||||
cancel-in-progress: true
|
|
||||||
|
|
||||||
env:
|
env:
|
||||||
HYPRE_ARCHIVE: v2.19.0.tar.gz
|
HYPRE_ARCHIVE: v2.19.0.tar.gz
|
||||||
HYPRE_TOP_DIR: hypre-2.19.0
|
HYPRE_TOP_DIR: hypre-2.19.0
|
||||||
METIS_ARCHIVE: metis-4.0.3.tar.gz
|
METIS_ARCHIVE: metis-4.0.3.tar.gz
|
||||||
METIS_ARCHIVE_MAC: metis-4.0.3-mac.tgz
|
|
||||||
METIS_TOP_DIR: metis-4.0.3
|
METIS_TOP_DIR: metis-4.0.3
|
||||||
MFEM_TOP_DIR: mfem
|
MFEM_TOP_DIR: mfem
|
||||||
|
|
||||||
@@ -52,19 +47,17 @@ jobs:
|
|||||||
builds-and-tests:
|
builds-and-tests:
|
||||||
strategy:
|
strategy:
|
||||||
matrix:
|
matrix:
|
||||||
os: [ubuntu-latest, macos-latest, windows-latest]
|
os: [ubuntu-20.04, macos-10.15, windows-2022]
|
||||||
target: [dbg, opt]
|
target: [dbg, opt]
|
||||||
mpi: [seq, par]
|
mpi: [seq, par]
|
||||||
build-system: [make, cmake]
|
build-system: [make, cmake]
|
||||||
hypre-target: [int32]
|
hypre-target: [int32]
|
||||||
precision: [fp64]
|
|
||||||
enzyme: [false]
|
|
||||||
exclude:
|
exclude:
|
||||||
- os: ubuntu-latest
|
- os: ubuntu-20.04
|
||||||
build-system: cmake
|
build-system: cmake
|
||||||
- os: macos-latest
|
- os: macos-10.15
|
||||||
build-system: cmake
|
build-system: cmake
|
||||||
- os: windows-latest
|
- os: windows-2022
|
||||||
build-system: make
|
build-system: make
|
||||||
# 'include' allows us to:
|
# 'include' allows us to:
|
||||||
# - Add a variable to all jobs without creating a new matrix dimension.
|
# - Add a variable to all jobs without creating a new matrix dimension.
|
||||||
@@ -72,311 +65,212 @@ jobs:
|
|||||||
# - Add a new combination.
|
# - Add a new combination.
|
||||||
# 'build-system: cmake' and 'hypre-target: int64'
|
# 'build-system: cmake' and 'hypre-target: int64'
|
||||||
#
|
#
|
||||||
# Note: we will gather coverage info for any non-debug run except the
|
# note: we will gather coverage info for any non-debug run except the
|
||||||
# CMake build.
|
# CMake build.
|
||||||
include:
|
include:
|
||||||
- target: dbg
|
- target: dbg
|
||||||
codecov: NO
|
codecov: NO
|
||||||
- target: opt
|
- target: opt
|
||||||
codecov: YES
|
codecov: YES
|
||||||
- os: ubuntu-latest
|
- os: windows-2022
|
||||||
target: dbg
|
|
||||||
config-opts: "CPPFLAGS+=-Og"
|
|
||||||
- os: macos-latest
|
|
||||||
codecov: NO
|
codecov: NO
|
||||||
- os: windows-latest
|
- os: ubuntu-20.04
|
||||||
codecov: NO
|
|
||||||
# config-opts: '-G "Ninja Multi-Config"'
|
|
||||||
- os: windows-latest
|
|
||||||
target: opt
|
|
||||||
mpi: par
|
|
||||||
config-opts: "-DBUILD_SHARED_LIBS=ON"
|
|
||||||
# config-opts: '-DBUILD_SHARED_LIBS=ON -G "Ninja Multi-Config"'
|
|
||||||
- os: ubuntu-latest
|
|
||||||
target: opt
|
target: opt
|
||||||
codecov: NO
|
codecov: NO
|
||||||
mpi: par
|
mpi: par
|
||||||
build-system: cmake
|
build-system: cmake
|
||||||
hypre-target: int32
|
hypre-target: int32
|
||||||
precision: fp64
|
- os: ubuntu-20.04
|
||||||
config-opts: "-DCMAKE_INSTALL_PREFIX=../cmake-install"
|
|
||||||
# This option can be set to pass additional configuration options to
|
|
||||||
# the MFEM configuration command.
|
|
||||||
# config-opts: '-DCMAKE_VERBOSE_MAKEFILE=ON'
|
|
||||||
- os: ubuntu-latest
|
|
||||||
target: opt
|
target: opt
|
||||||
codecov: NO
|
codecov: NO
|
||||||
mpi: par
|
mpi: par
|
||||||
build-system: make
|
build-system: make
|
||||||
hypre-target: int64
|
hypre-target: int64
|
||||||
precision: fp64
|
name: ${{ matrix.os }}-${{ matrix.build-system }}-${{ matrix.target }}-${{ matrix.mpi }}-${{ matrix.hypre-target }}
|
||||||
- os: ubuntu-latest
|
|
||||||
target: opt
|
|
||||||
codecov: NO
|
|
||||||
mpi: par
|
|
||||||
build-system: make
|
|
||||||
hypre-target: int32
|
|
||||||
precision: fp32
|
|
||||||
- os: macos-latest
|
|
||||||
target: opt
|
|
||||||
codecov: NO
|
|
||||||
mpi: par
|
|
||||||
build-system: make
|
|
||||||
hypre-target: int32
|
|
||||||
precision: fp32
|
|
||||||
- os: macos-latest
|
|
||||||
target: opt
|
|
||||||
codecov: NO
|
|
||||||
mpi: par
|
|
||||||
build-system: make
|
|
||||||
hypre-target: int32
|
|
||||||
precision: fp64
|
|
||||||
enzyme: true
|
|
||||||
config-opts: MFEM_USE_ENZYME=YES ENZYME_DIR=$(brew --prefix enzyme) LDFLAGS=-L$LLVM_PREFIX/lib/c++
|
|
||||||
|
|
||||||
name: ${{ matrix.os }}-${{ matrix.build-system }}-${{ matrix.target }}-${{ matrix.mpi }}-${{ matrix.hypre-target }}-${{ matrix.precision }}${{ matrix.enzyme && '-enzyme' || '' }}
|
|
||||||
|
|
||||||
runs-on: ${{ matrix.os }}
|
runs-on: ${{ matrix.os }}
|
||||||
|
|
||||||
continue-on-error: ${{ matrix.enzyme && true || false }}
|
|
||||||
|
|
||||||
steps:
|
steps:
|
||||||
# Fix 'No space left on device' errors for Ubuntu builds.
|
# This external action allows to interrupt a workflow already running on
|
||||||
- name: Run Actions Cleaner
|
# the same branch to save resource
|
||||||
if: matrix.os == 'ubuntu-latest'
|
- name: Cancel Previous Runs
|
||||||
uses: easimon/maximize-build-space@v8
|
uses: styfle/cancel-workflow-action@0.9.0
|
||||||
with:
|
with:
|
||||||
overprovision-lvm: "true"
|
access_token: ${{ github.token }}
|
||||||
remove-android: "true"
|
|
||||||
|
|
||||||
# Checkout MFEM in "mfem" subdirectory. Final path:
|
# Checkout MFEM in "mfem" subdirectory. Final path:
|
||||||
# /home/runner/work/mfem/mfem/mfem
|
# /home/runner/work/mfem/mfem/mfem
|
||||||
# Note: Done now to access "install-hypre" and "install-metis" actions.
|
# Note: Done now to access "install-hypre" and "install-metis" actions.
|
||||||
- name: checkout mfem
|
- name: checkout mfem
|
||||||
uses: actions/checkout@v6
|
uses: actions/checkout@v2
|
||||||
with:
|
with:
|
||||||
path: ${{ env.MFEM_TOP_DIR }}
|
path: ${{ env.MFEM_TOP_DIR }}
|
||||||
# Fetch the complete history for codecov to access commits ID
|
# Fetch the complete history for codecov to access commits ID
|
||||||
fetch-depth: 0
|
fetch-depth: 0
|
||||||
|
|
||||||
- name: Windows environment - PowerShell [debug]
|
# Only get MPI if defined for the job.
|
||||||
if: matrix.os == 'windows-latest'
|
# TODO: It would be nice to have only one step, e.g. with a dedicated
|
||||||
run: |
|
# action, but I (@adrienbernede) don't see how at the moment.
|
||||||
ls env: | fl
|
- name: get MPI (Linux)
|
||||||
|
if: matrix.mpi == 'par' && matrix.os == 'ubuntu-20.04'
|
||||||
|
run: |
|
||||||
|
sudo apt-get install mpich libmpich-dev
|
||||||
|
export MAKE_CXX_FLAG="MPICXX=mpic++"
|
||||||
|
|
||||||
- name: Windows environment - Bash [debug]
|
- name: get lcov (Linux)
|
||||||
if: matrix.os == 'windows-latest'
|
if: matrix.codecov == 'YES' && matrix.os == 'ubuntu-20.04'
|
||||||
run: |
|
run: |
|
||||||
env
|
sudo apt-get install lcov
|
||||||
shell: bash
|
|
||||||
|
|
||||||
# For info on Xcode see:
|
- name: Set up Homebrew
|
||||||
# - https://github.com/actions/runner-images/issues/12541
|
if: ( matrix.mpi == 'par' || matrix.codecov == 'YES' ) && matrix.os == 'macos-10.15'
|
||||||
# - https://github.com/actions/runner-images/blob/releases/macos-15-arm64/20250811/images/macos/macos-15-arm64-Readme.md#xcode
|
uses: Homebrew/actions/setup-homebrew@c4aafe8c4620bf08883dd4679c374f11e73329d3
|
||||||
- name: Xcode version setup (MacOS)
|
|
||||||
if: matrix.os == 'macos-latest'
|
|
||||||
run: |
|
|
||||||
XCODE_PATH="/Applications/Xcode_16.4.app"
|
|
||||||
echo "> sudo xcode-select -s ${XCODE_PATH}"
|
|
||||||
sudo xcode-select -s ${XCODE_PATH}
|
|
||||||
echo "> g++ -v"
|
|
||||||
g++ -v
|
|
||||||
echo "> clang++ -v"
|
|
||||||
clang++ -v
|
|
||||||
|
|
||||||
# Only get MPI if defined for the job.
|
- name: get MPI (MacOS)
|
||||||
# TODO: It would be nice to have only one step, e.g. with a dedicated
|
if: matrix.mpi == 'par' && matrix.os == 'macos-10.15'
|
||||||
# action, but I (@adrienbernede) don't see how at the moment.
|
run: |
|
||||||
- name: get MPI (Linux)
|
export HOMEBREW_NO_INSTALL_CLEANUP=1
|
||||||
if: matrix.mpi == 'par' && matrix.os == 'ubuntu-latest'
|
brew install openmpi
|
||||||
run: |
|
export MAKE_CXX_FLAG="MPICXX=mpic++"
|
||||||
sudo apt-get install openmpi-bin libopenmpi-dev
|
|
||||||
export OMPI_MCA_rmaps_base_oversubscribe=1
|
|
||||||
|
|
||||||
- name: get lcov (Linux)
|
- name: get MPI (MacOS)
|
||||||
if: matrix.codecov == 'YES' && matrix.os == 'ubuntu-latest'
|
if: matrix.codecov == 'YES' && matrix.os == 'macos-10.15'
|
||||||
run: |
|
run: |
|
||||||
sudo apt-get install lcov
|
export HOMEBREW_NO_INSTALL_CLEANUP=1
|
||||||
|
brew install lcov
|
||||||
|
|
||||||
# Keep the following section in case we need it again in the future,
|
- name: get MPI (Windows)
|
||||||
# see: https://github.com/mfem/mfem/pull/3385#discussion_r1058013032
|
if: matrix.mpi == 'par' && matrix.os == 'windows-2022'
|
||||||
# - name: Set up Homebrew
|
uses: mpi4py/setup-mpi@v1.0.3
|
||||||
# if: ( matrix.mpi == 'par' || matrix.codecov == 'YES' ) && matrix.os == 'macos-latest'
|
|
||||||
# uses: Homebrew/actions/setup-homebrew@master
|
|
||||||
|
|
||||||
- name: get MPI (MacOS)
|
# Get Hypre through cache, or build it.
|
||||||
if: matrix.mpi == 'par' && matrix.os == 'macos-latest'
|
# Install will only run on cache miss.
|
||||||
run: |
|
- name: cache hypre
|
||||||
export HOMEBREW_NO_INSTALL_CLEANUP=1
|
id: hypre-cache
|
||||||
brew install openmpi
|
if: matrix.mpi == 'par'
|
||||||
|
uses: actions/cache@v2
|
||||||
|
with:
|
||||||
|
path: ${{ env.HYPRE_TOP_DIR }}
|
||||||
|
key: ${{ runner.os }}-build-${{ env.HYPRE_TOP_DIR }}-${{ matrix.hypre-target }}-v2.2
|
||||||
|
|
||||||
- name: get lcov (MacOS)
|
- name: get hypre
|
||||||
if: matrix.codecov == 'YES' && matrix.os == 'macos-latest'
|
if: matrix.mpi == 'par' && steps.hypre-cache.outputs.cache-hit != 'true' && matrix.os != 'windows-2022'
|
||||||
run: |
|
uses: mfem/github-actions/build-hypre@v2.2
|
||||||
export HOMEBREW_NO_INSTALL_CLEANUP=1
|
with:
|
||||||
brew install lcov
|
archive: ${{ env.HYPRE_ARCHIVE }}
|
||||||
|
dir: ${{ env.HYPRE_TOP_DIR }}
|
||||||
|
target: ${{ matrix.hypre-target }}
|
||||||
|
build-system: make
|
||||||
|
|
||||||
- name: get MPI (Windows)
|
- name: get hypre (Windows)
|
||||||
if: matrix.mpi == 'par' && matrix.os == 'windows-latest'
|
if: matrix.mpi == 'par' && steps.hypre-cache.outputs.cache-hit != 'true' && matrix.os == 'windows-2022'
|
||||||
uses: mpi4py/setup-mpi@v1.1.4
|
uses: mfem/github-actions/build-hypre@v2.2
|
||||||
|
with:
|
||||||
|
archive: ${{ env.HYPRE_ARCHIVE }}
|
||||||
|
dir: ${{ env.HYPRE_TOP_DIR }}
|
||||||
|
target: ${{ matrix.hypre-target }}
|
||||||
|
build-system: cmake
|
||||||
|
|
||||||
# Get Hypre through cache, or build it.
|
# Get Metis through cache, or build it.
|
||||||
# Install will only run on cache miss.
|
# Install will only run on cache miss.
|
||||||
- name: cache hypre
|
- name: cache metis
|
||||||
id: hypre-cache
|
id: metis-cache
|
||||||
if: matrix.mpi == 'par'
|
if: matrix.mpi == 'par' && matrix.os != 'windows-2022'
|
||||||
uses: actions/cache@v5
|
uses: actions/cache@v2
|
||||||
with:
|
with:
|
||||||
path: ${{ env.HYPRE_TOP_DIR }}
|
path: ${{ env.METIS_TOP_DIR }}
|
||||||
key: ${{ runner.os }}-ompi-build-${{ env.HYPRE_TOP_DIR }}-${{ matrix.hypre-target }}-${{ matrix.precision }}-v2.5
|
key: ${{ runner.os }}-build-${{ env.METIS_TOP_DIR }}-v2.2
|
||||||
|
|
||||||
- name: get hypre
|
- name: install metis
|
||||||
if: matrix.mpi == 'par' && steps.hypre-cache.outputs.cache-hit != 'true' && matrix.os != 'windows-latest'
|
if: matrix.mpi == 'par' && matrix.os != 'windows-2022' && steps.metis-cache.outputs.cache-hit != 'true'
|
||||||
uses: mfem/github-actions/build-hypre@v2.5
|
uses: mfem/github-actions/build-metis@v2.2
|
||||||
with:
|
with:
|
||||||
archive: ${{ env.HYPRE_ARCHIVE }}
|
archive: ${{ env.METIS_ARCHIVE }}
|
||||||
dir: ${{ env.HYPRE_TOP_DIR }}
|
dir: ${{ env.METIS_TOP_DIR }}
|
||||||
target: ${{ matrix.hypre-target }}
|
|
||||||
build-system: make
|
|
||||||
precision: ${{ matrix.precision }}
|
|
||||||
|
|
||||||
- name: get hypre (Windows)
|
- name: cache vcpkg (Windows)
|
||||||
if: matrix.mpi == 'par' && steps.hypre-cache.outputs.cache-hit != 'true' && matrix.os == 'windows-latest'
|
id: vcpkg-cache
|
||||||
uses: mfem/github-actions/build-hypre@v2.5
|
uses: actions/cache@v3
|
||||||
with:
|
with:
|
||||||
archive: ${{ env.HYPRE_ARCHIVE }}
|
path: vcpkg_cache
|
||||||
dir: ${{ env.HYPRE_TOP_DIR }}
|
key: ${{ runner.os }}-${{ matrix.mpi }}-vcpkg-v1
|
||||||
target: ${{ matrix.hypre-target }}
|
|
||||||
build-system: cmake
|
|
||||||
precision: ${{ matrix.precision }}
|
|
||||||
|
|
||||||
# Get Metis through cache, or build it.
|
- name: prepare binary cache location
|
||||||
# Install will only run on cache miss.
|
if: matrix.os == 'windows-2022' && steps.vcpkg-cache.outputs.cache-hit != 'true'
|
||||||
- name: cache metis
|
run: |
|
||||||
id: metis-cache
|
mkdir -p vcpkg_cache
|
||||||
if: matrix.mpi == 'par' && matrix.os != 'windows-latest'
|
|
||||||
uses: actions/cache@v5
|
|
||||||
with:
|
|
||||||
path: ${{ env.METIS_TOP_DIR }}
|
|
||||||
key: ${{ runner.os }}-build-${{ env.METIS_TOP_DIR }}-v2.5
|
|
||||||
|
|
||||||
- name: install metis
|
- name: install metis (Windows)
|
||||||
if: matrix.mpi == 'par' && matrix.os != 'windows-latest' && steps.metis-cache.outputs.cache-hit != 'true'
|
if: matrix.mpi == 'par' && matrix.os == 'windows-2022'
|
||||||
uses: mfem/github-actions/build-metis@v2.5
|
env:
|
||||||
with:
|
VCPKG_DEFAULT_BINARY_CACHE: ${{ github.workspace }}/vcpkg_cache
|
||||||
archive: ${{ matrix.os != 'macos-latest' && env.METIS_ARCHIVE || env.METIS_ARCHIVE_MAC }}
|
run: |
|
||||||
dir: ${{ env.METIS_TOP_DIR }}
|
$PortFile = 'C:\vcpkg\ports\metis\portfile.cmake'
|
||||||
|
$OriginalURL = 'http://glaros.dtc.umn.edu/gkhome/fetch/sw/metis/metis-${METIS_VERSION}.tar.gz'
|
||||||
|
$NewURL = 'https://github.com/mfem/tpls/raw/gh-pages/metis-5.1.0.tar.gz'
|
||||||
|
(Get-Content $PortFile).replace($OriginalURL, $NewURL) | Set-Content $PortFile
|
||||||
|
vcpkg install metis --triplet=x64-windows-static
|
||||||
|
|
||||||
- name: cache vcpkg (Windows)
|
# MFEM build and test
|
||||||
id: vcpkg-cache
|
- name: build
|
||||||
if: matrix.os == 'windows-latest'
|
uses: mfem/github-actions/build-mfem@v2.2
|
||||||
uses: actions/cache@v5
|
env:
|
||||||
with:
|
VCPKG_DEFAULT_BINARY_CACHE: ${{ github.workspace }}/vcpkg_cache
|
||||||
path: vcpkg_cache
|
with:
|
||||||
key: ${{ runner.os }}-${{ matrix.mpi }}-vcpkg-v1
|
os: ${{ matrix.os }}
|
||||||
|
target: ${{ matrix.target }}
|
||||||
|
codecov: ${{ matrix.codecov }}
|
||||||
|
mpi: ${{ matrix.mpi }}
|
||||||
|
build-system: ${{ matrix.build-system }}
|
||||||
|
hypre-dir: ${{ env.HYPRE_TOP_DIR }}
|
||||||
|
metis-dir: ${{ env.METIS_TOP_DIR }}
|
||||||
|
mfem-dir: ${{ env.MFEM_TOP_DIR }}
|
||||||
|
config-options: ${{ env.MFEM_EXTRA_CONFIG }}
|
||||||
|
library-only: ${{ matrix.target == 'dbg' }}
|
||||||
|
|
||||||
- name: prepare vcpkg binary cache location (Windows)
|
# Run checks (and only checks) on debug targets
|
||||||
if: matrix.os == 'windows-latest' && steps.vcpkg-cache.outputs.cache-hit != 'true'
|
- name: checks
|
||||||
run: |
|
if: matrix.build-system == 'make' && matrix.target == 'dbg'
|
||||||
mkdir -p vcpkg_cache
|
run: |
|
||||||
|
cd ${{ env.MFEM_TOP_DIR }} && make check
|
||||||
|
|
||||||
- name: install metis (Windows)
|
- name: unit tests
|
||||||
if: matrix.mpi == 'par' && matrix.os == 'windows-latest'
|
if: matrix.build-system == 'make' && matrix.target == 'opt'
|
||||||
env:
|
run: |
|
||||||
VCPKG_DEFAULT_BINARY_CACHE: ${{ github.workspace }}/vcpkg_cache
|
cd ${{ env.MFEM_TOP_DIR }} && make unittest
|
||||||
run: |
|
|
||||||
vcpkg install metis-mfem --triplet=x64-windows-static --overlay-ports=${{ env.MFEM_TOP_DIR }}/config/vcpkg/ports
|
|
||||||
|
|
||||||
# It's usually fine to build the above TPLs with a different compiler.
|
- name: tests
|
||||||
#
|
if: matrix.build-system == 'make' && matrix.target == 'opt'
|
||||||
- name: install Enzyme (macOS w/ Enzyme)
|
run: |
|
||||||
if: matrix.enzyme && matrix.os == 'macos-latest'
|
cd ${{ env.MFEM_TOP_DIR }} && make test
|
||||||
run: |
|
|
||||||
export HOMEBREW_NO_INSTALL_CLEANUP=1
|
|
||||||
brew update
|
|
||||||
brew install enzyme
|
|
||||||
ENZYME_LLVM=$(brew info enzyme | sed -n 's/^Required.*:.*\(llvm[^ ]*\).*/\1/p')
|
|
||||||
echo "ENZYME_LLVM=$ENZYME_LLVM"
|
|
||||||
LLVM_PREFIX=$(brew --prefix $ENZYME_LLVM)
|
|
||||||
echo "LLVM_PREFIX=$LLVM_PREFIX" >> $GITHUB_ENV
|
|
||||||
echo "OMPI_CC=$LLVM_PREFIX/bin/clang" >> $GITHUB_ENV
|
|
||||||
echo "OMPI_CXX=$LLVM_PREFIX/bin/clang++" >> $GITHUB_ENV
|
|
||||||
|
|
||||||
# MFEM build and test
|
- name: cmake checks
|
||||||
- name: build
|
if: matrix.build-system == 'cmake' && matrix.target == 'dbg'
|
||||||
uses: mfem/github-actions/build-mfem@v2.5
|
run: |
|
||||||
env:
|
CTEST_CONFIG="Debug"
|
||||||
VCPKG_DEFAULT_BINARY_CACHE: ${{ github.workspace }}/vcpkg_cache
|
cd ${{ env.MFEM_TOP_DIR }} && cmake --build build --target check --config ${CTEST_CONFIG}
|
||||||
with:
|
shell: bash
|
||||||
os: ${{ matrix.os }}
|
|
||||||
target: ${{ matrix.target }}
|
|
||||||
codecov: ${{ matrix.codecov }}
|
|
||||||
mpi: ${{ matrix.mpi }}
|
|
||||||
build-system: ${{ matrix.build-system }}
|
|
||||||
hypre-dir: ${{ env.HYPRE_TOP_DIR }}
|
|
||||||
metis-dir: ${{ env.METIS_TOP_DIR }}
|
|
||||||
mfem-dir: ${{ env.MFEM_TOP_DIR }}
|
|
||||||
precision: ${{ matrix.precision }}
|
|
||||||
config-options: ${{ matrix.config-opts }}
|
|
||||||
library-only: ${{ matrix.target == 'dbg' && matrix.os != 'ubuntu-latest' }}
|
|
||||||
|
|
||||||
# Run checks (and only checks) on debug targets
|
- name: cmake unit tests (Ubuntu 20.04)
|
||||||
- name: checks
|
if: matrix.build-system == 'cmake' && matrix.target == 'opt' && matrix.os == 'ubuntu-20.04'
|
||||||
if: matrix.build-system == 'make' && matrix.target == 'dbg'
|
run: |
|
||||||
run: |
|
CTEST_CONFIG="Release"
|
||||||
cd ${{ env.MFEM_TOP_DIR }} && make check
|
[[ ${{ matrix.target }} == 'dbg' ]] && CTEST_CONFIG="Debug"
|
||||||
|
cd ${{ env.MFEM_TOP_DIR }}/build/tests/unit && ctest --output-on-failure -C ${CTEST_CONFIG}
|
||||||
|
shell: bash
|
||||||
|
|
||||||
# Note: 'tests' include the unit tests
|
- name: cmake tests
|
||||||
- name: tests
|
if: matrix.build-system == 'cmake' && matrix.target == 'opt' && matrix.os != 'ubuntu-20.04'
|
||||||
if: matrix.build-system == 'make' && (matrix.target == 'opt' || matrix.os == 'ubuntu-latest')
|
run: |
|
||||||
run: |
|
CTEST_CONFIG="Release"
|
||||||
cd ${{ env.MFEM_TOP_DIR }} && make test
|
cd ${{ env.MFEM_TOP_DIR }}/build && ctest --output-on-failure -C ${CTEST_CONFIG}
|
||||||
|
shell: bash
|
||||||
|
|
||||||
- name: cmake checks
|
# Code coverage (process and upload reports)
|
||||||
if: matrix.build-system == 'cmake' && matrix.target == 'dbg'
|
- name: codecov
|
||||||
run: |
|
if: matrix.codecov == 'YES'
|
||||||
CTEST_CONFIG="Debug"
|
uses: mfem/github-actions/upload-coverage@v2.0
|
||||||
cd ${{ env.MFEM_TOP_DIR }} && cmake --build build --target check --config ${CTEST_CONFIG}
|
with:
|
||||||
shell: bash
|
name: ${{ matrix.os }}-${{ matrix.build-system }}-${{ matrix.target }}-${{ matrix.mpi }}-${{ matrix.hypre-target }}
|
||||||
|
project_dir: ${{ env.MFEM_TOP_DIR }}
|
||||||
- name: cmake unit tests (Ubuntu)
|
directories: "fem general linalg mesh"
|
||||||
if: matrix.build-system == 'cmake' && matrix.target == 'opt' && matrix.os == 'ubuntu-latest'
|
|
||||||
run: |
|
|
||||||
CTEST_CONFIG="Release"
|
|
||||||
[[ ${{ matrix.target }} == 'dbg' ]] && CTEST_CONFIG="Debug"
|
|
||||||
cd ${{ env.MFEM_TOP_DIR }}/build/tests/unit && ctest --output-on-failure -C ${CTEST_CONFIG}
|
|
||||||
shell: bash
|
|
||||||
|
|
||||||
- name: cmake tests
|
|
||||||
if: matrix.build-system == 'cmake' && matrix.target == 'opt' && matrix.os != 'ubuntu-latest'
|
|
||||||
run: |
|
|
||||||
CTEST_CONFIG="Release"
|
|
||||||
cd ${{ env.MFEM_TOP_DIR }}/build && \
|
|
||||||
ctest --output-on-failure -C ${CTEST_CONFIG} || \
|
|
||||||
ctest --rerun-failed --output-on-failure -C ${CTEST_CONFIG}
|
|
||||||
shell: bash
|
|
||||||
|
|
||||||
- name: make install
|
|
||||||
if: matrix.build-system == 'make'
|
|
||||||
run: |
|
|
||||||
cd ${{ env.MFEM_TOP_DIR }} && make install
|
|
||||||
|
|
||||||
- name: cmake install
|
|
||||||
if: matrix.build-system == 'cmake'
|
|
||||||
run: |
|
|
||||||
CONFIG="Release"
|
|
||||||
[[ ${{ matrix.target }} == 'dbg' ]] && CONFIG="Debug"
|
|
||||||
TARGET="install"
|
|
||||||
[[ ${{ matrix.os }} == 'windows-latest' ]] && TARGET="INSTALL"
|
|
||||||
cd ${{ env.MFEM_TOP_DIR }} && \
|
|
||||||
cmake --build build --target ${TARGET} --config ${CONFIG}
|
|
||||||
shell: bash
|
|
||||||
|
|
||||||
# Code coverage (process and upload reports)
|
|
||||||
- name: codecov
|
|
||||||
if: matrix.codecov == 'YES'
|
|
||||||
uses: mfem/github-actions/upload-coverage@v2.5
|
|
||||||
with:
|
|
||||||
name: ${{ matrix.os }}-${{ matrix.build-system }}-${{ matrix.target }}-${{ matrix.mpi }}-${{ matrix.hypre-target }}
|
|
||||||
project_dir: ${{ env.MFEM_TOP_DIR }}
|
|
||||||
directories: "fem general linalg mesh"
|
|
||||||
|
|||||||
@@ -1,73 +0,0 @@
|
|||||||
# For most projects, this workflow file will not need changing; you simply need
|
|
||||||
# to commit it to your repository.
|
|
||||||
#
|
|
||||||
# You may wish to alter this file to override the set of languages analyzed,
|
|
||||||
# or to provide custom queries or build logic.
|
|
||||||
#
|
|
||||||
# ******** NOTE ********
|
|
||||||
# We have attempted to detect the languages in your repository. Please check
|
|
||||||
# the `language` matrix defined below to confirm you have the correct set of
|
|
||||||
# supported CodeQL languages.
|
|
||||||
#
|
|
||||||
name: "Static Analysis"
|
|
||||||
|
|
||||||
on:
|
|
||||||
push:
|
|
||||||
branches: ["master", "next"]
|
|
||||||
pull_request:
|
|
||||||
# The branches below must be a subset of the branches above
|
|
||||||
branches: ["master"]
|
|
||||||
|
|
||||||
concurrency:
|
|
||||||
group: ${{ github.workflow }}-${{ github.ref }}
|
|
||||||
cancel-in-progress: true
|
|
||||||
|
|
||||||
jobs:
|
|
||||||
analyze:
|
|
||||||
name: Analyze
|
|
||||||
runs-on: ubuntu-latest
|
|
||||||
permissions:
|
|
||||||
actions: read
|
|
||||||
contents: read
|
|
||||||
security-events: write
|
|
||||||
|
|
||||||
strategy:
|
|
||||||
fail-fast: false
|
|
||||||
matrix:
|
|
||||||
language: [ 'cpp' ]
|
|
||||||
# CodeQL supports [ 'cpp', 'csharp', 'go', 'java', 'javascript', 'python', 'ruby' ]
|
|
||||||
# Learn more about CodeQL language support at https://aka.ms/codeql-docs/language-support
|
|
||||||
|
|
||||||
steps:
|
|
||||||
- name: Checkout repository
|
|
||||||
uses: actions/checkout@v6
|
|
||||||
|
|
||||||
# Initializes the CodeQL tools for scanning.
|
|
||||||
- name: Initialize CodeQL
|
|
||||||
uses: github/codeql-action/init@v4
|
|
||||||
with:
|
|
||||||
languages: ${{ matrix.language }}
|
|
||||||
# If you wish to specify custom queries, you can do so here or in a config file.
|
|
||||||
# By default, queries listed here will override any specified in a config file.
|
|
||||||
# Prefix the list here with "+" to use these queries and those in the config file.
|
|
||||||
|
|
||||||
# Details on CodeQL's query packs refer to : https://docs.github.com/en/code-security/code-scanning/automatically-scanning-your-code-for-vulnerabilities-and-errors/configuring-code-scanning#using-queries-in-ql-packs
|
|
||||||
# queries: security-extended,security-and-quality
|
|
||||||
|
|
||||||
# Autobuild attempts to build any compiled languages (C/C++, C#, or Java).
|
|
||||||
# If this step fails, then you should remove it and run the build manually (see below)
|
|
||||||
- name: Autobuild
|
|
||||||
uses: github/codeql-action/autobuild@v4
|
|
||||||
|
|
||||||
# ℹ️ Command-line programs to run using the OS shell.
|
|
||||||
# 📚 See https://docs.github.com/en/actions/using-workflows/workflow-syntax-for-github-actions#jobsjob_idstepsrun
|
|
||||||
|
|
||||||
# If the Autobuild fails above, remove it and uncomment the following three lines.
|
|
||||||
# modify them (or add more) to build your code if your project, please refer to the EXAMPLE below for guidance.
|
|
||||||
|
|
||||||
# - run: |
|
|
||||||
# echo "Run, Build Application using script"
|
|
||||||
# ./location_of_script_within_repo/buildscript.sh
|
|
||||||
|
|
||||||
- name: Perform CodeQL Analysis
|
|
||||||
uses: github/codeql-action/analyze@v4
|
|
||||||
@@ -1,4 +1,4 @@
|
|||||||
# Copyright (c) 2010-2025, Lawrence Livermore National Security, LLC. Produced
|
# Copyright (c) 2010-2022, Lawrence Livermore National Security, LLC. Produced
|
||||||
# at the Lawrence Livermore National Laboratory. All Rights reserved. See files
|
# at the Lawrence Livermore National Laboratory. All Rights reserved. See files
|
||||||
# LICENSE and NOTICE for details. LLNL-CODE-806117.
|
# LICENSE and NOTICE for details. LLNL-CODE-806117.
|
||||||
#
|
#
|
||||||
@@ -9,7 +9,7 @@
|
|||||||
# terms of the BSD-3 license. We welcome feedback and contributions, see file
|
# terms of the BSD-3 license. We welcome feedback and contributions, see file
|
||||||
# CONTRIBUTING.md for details.
|
# CONTRIBUTING.md for details.
|
||||||
|
|
||||||
name: "Build Analysis"
|
name: build-analysis
|
||||||
|
|
||||||
permissions:
|
permissions:
|
||||||
actions: write
|
actions: write
|
||||||
@@ -22,10 +22,6 @@ on:
|
|||||||
pull_request:
|
pull_request:
|
||||||
workflow_dispatch:
|
workflow_dispatch:
|
||||||
|
|
||||||
concurrency:
|
|
||||||
group: ${{ github.workflow }}-${{ github.ref }}
|
|
||||||
cancel-in-progress: true
|
|
||||||
|
|
||||||
env:
|
env:
|
||||||
HYPRE_ARCHIVE: v2.19.0.tar.gz
|
HYPRE_ARCHIVE: v2.19.0.tar.gz
|
||||||
HYPRE_TOP_DIR: hypre-2.19.0
|
HYPRE_TOP_DIR: hypre-2.19.0
|
||||||
@@ -35,66 +31,71 @@ env:
|
|||||||
|
|
||||||
jobs:
|
jobs:
|
||||||
gitignore:
|
gitignore:
|
||||||
runs-on: ubuntu-latest
|
runs-on: ubuntu-18.04
|
||||||
|
|
||||||
steps:
|
steps:
|
||||||
- name: checkout MFEM
|
- name: Cancel Previous Runs
|
||||||
uses: actions/checkout@v6
|
uses: styfle/cancel-workflow-action@0.9.0
|
||||||
with:
|
with:
|
||||||
path: mfem
|
access_token: ${{ github.token }}
|
||||||
|
|
||||||
- name: Get MPI (Linux)
|
- name: checkout MFEM
|
||||||
run: |
|
uses: actions/checkout@v2
|
||||||
sudo apt-get install openmpi-bin libopenmpi-dev
|
with:
|
||||||
export OMPI_MCA_rmaps_base_oversubscribe=1
|
path: mfem
|
||||||
|
|
||||||
- name: Cache Hypre Install
|
- name: Get MPI (Linux)
|
||||||
id: hypre-cache
|
run: |
|
||||||
uses: actions/cache@v5
|
sudo apt-get install mpich libmpich-dev
|
||||||
with:
|
export MAKE_CXX_FLAG="MPICXX=mpic++"
|
||||||
path: ${{ env.HYPRE_TOP_DIR }}
|
|
||||||
key: ${{ runner.os }}-ompi-build-${{ env.HYPRE_TOP_DIR }}-v2.5
|
|
||||||
|
|
||||||
- name: Get Hypre
|
- name: Cache Hypre Install
|
||||||
if: steps.hypre-cache.outputs.cache-hit != 'true'
|
id: hypre-cache
|
||||||
uses: mfem/github-actions/build-hypre@v2.5
|
uses: actions/cache@v2
|
||||||
with:
|
with:
|
||||||
archive: ${{ env.HYPRE_ARCHIVE }}
|
path: ${{ env.HYPRE_TOP_DIR }}
|
||||||
dir: ${{ env.HYPRE_TOP_DIR }}
|
key: ${{ runner.os }}-build-${{ env.HYPRE_TOP_DIR }}-v2.2
|
||||||
target: int32
|
|
||||||
|
|
||||||
- name: Cache Metis Install
|
- name: Get Hypre
|
||||||
id: metis-cache
|
if: steps.hypre-cache.outputs.cache-hit != 'true'
|
||||||
uses: actions/cache@v5
|
uses: mfem/github-actions/build-hypre@v2.2
|
||||||
with:
|
with:
|
||||||
path: ${{ env.METIS_TOP_DIR }}
|
archive: ${{ env.HYPRE_ARCHIVE }}
|
||||||
key: ${{ runner.os }}-build-${{ env.METIS_TOP_DIR }}-v2.5
|
dir: ${{ env.HYPRE_TOP_DIR }}
|
||||||
|
target: int32
|
||||||
|
|
||||||
- name: Install Metis
|
- name: Cache Metis Install
|
||||||
if: steps.metis-cache.outputs.cache-hit != 'true'
|
id: metis-cache
|
||||||
uses: mfem/github-actions/build-metis@v2.5
|
uses: actions/cache@v2
|
||||||
with:
|
with:
|
||||||
archive: ${{ env.METIS_ARCHIVE }}
|
path: ${{ env.METIS_TOP_DIR }}
|
||||||
dir: ${{ env.METIS_TOP_DIR }}
|
key: ${{ runner.os }}-build-${{ env.METIS_TOP_DIR }}-v2.2
|
||||||
|
|
||||||
# MFEM build and test
|
- name: Install Metis
|
||||||
- name: build-mfem
|
if: steps.metis-cache.outputs.cache-hit != 'true'
|
||||||
uses: mfem/github-actions/build-mfem@v2.5
|
uses: mfem/github-actions/build-metis@v2.2
|
||||||
with:
|
with:
|
||||||
os: ${{ runner.os }}
|
archive: ${{ env.METIS_ARCHIVE }}
|
||||||
target: opt
|
dir: ${{ env.METIS_TOP_DIR }}
|
||||||
codecov: NO
|
|
||||||
mpi: par
|
|
||||||
build-system: make
|
|
||||||
hypre-dir: ${{ env.HYPRE_TOP_DIR }}
|
|
||||||
metis-dir: ${{ env.METIS_TOP_DIR }}
|
|
||||||
mfem-dir: mfem
|
|
||||||
|
|
||||||
- name: test (no clean)
|
# MFEM build and test
|
||||||
run: |
|
- name: build-mfem
|
||||||
cd mfem && make test-noclean
|
uses: mfem/github-actions/build-mfem@v2.2
|
||||||
|
with:
|
||||||
|
os: ${{ runner.os }}
|
||||||
|
target: opt
|
||||||
|
codecov: NO
|
||||||
|
mpi: par
|
||||||
|
build-system: make
|
||||||
|
hypre-dir: ${{ env.HYPRE_TOP_DIR }}
|
||||||
|
metis-dir: ${{ env.METIS_TOP_DIR }}
|
||||||
|
mfem-dir: mfem
|
||||||
|
|
||||||
- name: gitignore
|
- name: test (no clean)
|
||||||
run: |
|
run: |
|
||||||
cd mfem/tests/scripts
|
cd mfem && make test-noclean
|
||||||
./runtest gitignore
|
|
||||||
|
- name: gitignore
|
||||||
|
run: |
|
||||||
|
cd mfem/tests/scripts
|
||||||
|
./runtest gitignore
|
||||||
|
|||||||
@@ -1,4 +1,4 @@
|
|||||||
# Copyright (c) 2010-2025, Lawrence Livermore National Security, LLC. Produced
|
# Copyright (c) 2010-2022, Lawrence Livermore National Security, LLC. Produced
|
||||||
# at the Lawrence Livermore National Laboratory. All Rights reserved. See files
|
# at the Lawrence Livermore National Laboratory. All Rights reserved. See files
|
||||||
# LICENSE and NOTICE for details. LLNL-CODE-806117.
|
# LICENSE and NOTICE for details. LLNL-CODE-806117.
|
||||||
#
|
#
|
||||||
@@ -9,7 +9,7 @@
|
|||||||
# terms of the BSD-3 license. We welcome feedback and contributions, see file
|
# terms of the BSD-3 license. We welcome feedback and contributions, see file
|
||||||
# CONTRIBUTING.md for details.
|
# CONTRIBUTING.md for details.
|
||||||
|
|
||||||
name: "Checks"
|
name: repo-check
|
||||||
|
|
||||||
permissions:
|
permissions:
|
||||||
actions: write
|
actions: write
|
||||||
@@ -19,10 +19,6 @@ on:
|
|||||||
pull_request:
|
pull_request:
|
||||||
workflow_dispatch:
|
workflow_dispatch:
|
||||||
|
|
||||||
concurrency:
|
|
||||||
group: ${{ github.workflow }}-${{ github.ref }}
|
|
||||||
cancel-in-progress: true
|
|
||||||
|
|
||||||
# This workflow is run on pushes to any branch in the MFEM repo (with or without
|
# This workflow is run on pushes to any branch in the MFEM repo (with or without
|
||||||
# PRs), as well as on updates to PRs from forks. In particular, we do not
|
# PRs), as well as on updates to PRs from forks. In particular, we do not
|
||||||
# duplicate work by running on both pushes and updates to local PRs. We do that
|
# duplicate work by running on both pushes and updates to local PRs. We do that
|
||||||
@@ -32,99 +28,89 @@ concurrency:
|
|||||||
|
|
||||||
jobs:
|
jobs:
|
||||||
file-headers-check:
|
file-headers-check:
|
||||||
runs-on: ubuntu-latest
|
runs-on: ubuntu-18.04
|
||||||
if: |
|
if: |
|
||||||
(github.event_name == 'push' ||
|
(github.event_name == 'push' ||
|
||||||
github.event.pull_request.head.repo.full_name != github.repository)
|
github.event.pull_request.head.repo.full_name != github.repository)
|
||||||
steps:
|
steps:
|
||||||
- name: checkout mfem
|
- name: Cancel Previous Runs
|
||||||
uses: actions/checkout@v6
|
uses: styfle/cancel-workflow-action@0.9.0
|
||||||
|
with:
|
||||||
|
access_token: ${{ github.token }}
|
||||||
|
|
||||||
- name: copyright check
|
- name: checkout mfem
|
||||||
id: copyright
|
uses: actions/checkout@v2
|
||||||
run: |
|
|
||||||
./config/githooks/pre-push --copyright
|
|
||||||
|
|
||||||
continue-on-error: true
|
- name: copyright check
|
||||||
|
id: copyright
|
||||||
|
run: |
|
||||||
|
./config/githooks/pre-push --copyright
|
||||||
|
|
||||||
- name: license check
|
continue-on-error: true
|
||||||
id: license
|
|
||||||
run: |
|
|
||||||
./config/githooks/pre-push --license
|
|
||||||
continue-on-error: true
|
|
||||||
|
|
||||||
- name: release check
|
- name: license check
|
||||||
id: release
|
id: license
|
||||||
run: |
|
run: |
|
||||||
./config/githooks/pre-push --release
|
./config/githooks/pre-push --license
|
||||||
continue-on-error: true
|
continue-on-error: true
|
||||||
|
|
||||||
- name: math check
|
- name: release check
|
||||||
id: math
|
id: release
|
||||||
run: |
|
run: |
|
||||||
./config/githooks/pre-push --math
|
./config/githooks/pre-push --release
|
||||||
continue-on-error: true
|
continue-on-error: true
|
||||||
|
|
||||||
- name: wrap-up
|
- name: wrap-up
|
||||||
if: |
|
if: |
|
||||||
steps.copyright.outcome != 'success' ||
|
steps.copyright.outcome != 'success' ||
|
||||||
steps.license.outcome != 'success' ||
|
steps.license.outcome != 'success' ||
|
||||||
steps.release.outcome != 'success' ||
|
steps.release.outcome != 'success'
|
||||||
steps.math.outcome != 'success'
|
run: |
|
||||||
run: |
|
if [[ "${{ steps.copyright.outcome }}" != "success" ]]; then
|
||||||
if [[ "${{ steps.copyright.outcome }}" != "success" ]]; then
|
echo "copyright check failed, unroll log for details"
|
||||||
echo "copyright check failed, unroll log for details"
|
fi
|
||||||
fi
|
if [[ "${{ steps.license.outcome }}" != "success" ]]; then
|
||||||
if [[ "${{ steps.license.outcome }}" != "success" ]]; then
|
echo "license check failed, unroll log for details"
|
||||||
echo "license check failed, unroll log for details"
|
fi
|
||||||
fi
|
if [[ "${{ steps.release.outcome }}" != "success" ]]; then
|
||||||
if [[ "${{ steps.release.outcome }}" != "success" ]]; then
|
echo "release check failed, unroll log for details"
|
||||||
echo "release check failed, unroll log for details"
|
fi
|
||||||
fi
|
exit 1
|
||||||
if [[ "${{ steps.math.outcome }}" != "success" ]]; then
|
|
||||||
echo "math check failed, unroll log for details"
|
|
||||||
fi
|
|
||||||
exit 1
|
|
||||||
|
|
||||||
code-style:
|
code-style:
|
||||||
runs-on: ubuntu-latest
|
runs-on: ubuntu-18.04
|
||||||
if: |
|
if: |
|
||||||
(github.event_name == 'push' ||
|
(github.event_name == 'push' ||
|
||||||
github.event.pull_request.head.repo.full_name != github.repository)
|
github.event.pull_request.head.repo.full_name != github.repository)
|
||||||
steps:
|
steps:
|
||||||
- name: checkout mfem
|
- name: checkout mfem
|
||||||
uses: actions/checkout@v6
|
uses: actions/checkout@v2
|
||||||
|
|
||||||
- name: get astyle
|
- name: get astyle
|
||||||
run: |
|
run: |
|
||||||
sudo apt-get install astyle
|
sudo apt-get install astyle=3.1-1ubuntu2
|
||||||
|
|
||||||
- name: style check
|
- name: style check
|
||||||
run: |
|
run: |
|
||||||
./config/githooks/pre-push --style
|
./config/githooks/pre-push --style
|
||||||
|
|
||||||
documentation:
|
documentation:
|
||||||
runs-on: ubuntu-latest
|
runs-on: ubuntu-18.04
|
||||||
if: |
|
if: |
|
||||||
(github.event_name == 'push' ||
|
(github.event_name == 'push' ||
|
||||||
github.event.pull_request.head.repo.full_name != github.repository)
|
github.event.pull_request.head.repo.full_name != github.repository)
|
||||||
steps:
|
steps:
|
||||||
- name: checkout mfem
|
- name: checkout mfem
|
||||||
uses: actions/checkout@v6
|
uses: actions/checkout@v2
|
||||||
|
|
||||||
- name: get doxygen and graphviz
|
- name: get doxygen and graphviz
|
||||||
run: |
|
run: |
|
||||||
sudo apt-get install doxygen graphviz
|
sudo apt-get install doxygen graphviz
|
||||||
|
|
||||||
- name: update doxygen config file
|
- name: build documentation
|
||||||
run: |
|
run: |
|
||||||
cd doc
|
cd tests/scripts
|
||||||
doxygen -u CodeDocumentation.conf.in
|
./runtest documentation
|
||||||
|
|
||||||
- name: build documentation
|
|
||||||
run: |
|
|
||||||
cd tests/scripts
|
|
||||||
./runtest documentation
|
|
||||||
|
|
||||||
branch-history:
|
branch-history:
|
||||||
if: |
|
if: |
|
||||||
@@ -132,18 +118,18 @@ jobs:
|
|||||||
github.ref != 'refs/heads/master' &&
|
github.ref != 'refs/heads/master' &&
|
||||||
(github.event_name == 'push' ||
|
(github.event_name == 'push' ||
|
||||||
github.event.pull_request.head.repo.full_name != github.repository)
|
github.event.pull_request.head.repo.full_name != github.repository)
|
||||||
runs-on: ubuntu-latest
|
runs-on: ubuntu-18.04
|
||||||
steps:
|
steps:
|
||||||
- name: checkout mfem
|
- name: checkout mfem
|
||||||
uses: actions/checkout@v6
|
uses: actions/checkout@v2
|
||||||
with:
|
with:
|
||||||
fetch-depth: 0
|
fetch-depth: 0
|
||||||
|
|
||||||
- name: branch-history
|
- name: branch-history
|
||||||
run: |
|
run: |
|
||||||
# We override origin to make sure we point to the main repo.
|
# We override origin to make sure we point to the main repo.
|
||||||
# This is to have consistent test results on PRs from forks.
|
# This is to have consistent test results on PRs from forks.
|
||||||
git remote remove origin
|
git remote remove origin
|
||||||
git remote add origin https://github.com/mfem/mfem.git
|
git remote add origin https://github.com/mfem/mfem.git
|
||||||
git checkout -b gh-actions-branch-history
|
git checkout -b gh-actions-branch-history
|
||||||
./config/githooks/pre-push --history
|
./config/githooks/pre-push --history
|
||||||
|
|||||||
@@ -1,39 +0,0 @@
|
|||||||
# Copyright (c) 2010-2025, Lawrence Livermore National Security, LLC. Produced
|
|
||||||
# at the Lawrence Livermore National Laboratory. All Rights reserved. See files
|
|
||||||
# LICENSE and NOTICE for details. LLNL-CODE-806117.
|
|
||||||
#
|
|
||||||
# This file is part of the MFEM library. For more information and source code
|
|
||||||
# availability visit https://mfem.org.
|
|
||||||
#
|
|
||||||
# MFEM is free software; you can redistribute it and/or modify it under the
|
|
||||||
# terms of the BSD-3 license. We welcome feedback and contributions, see file
|
|
||||||
# CONTRIBUTING.md for details.
|
|
||||||
---
|
|
||||||
name: build-hypre
|
|
||||||
on:
|
|
||||||
workflow_call:
|
|
||||||
jobs:
|
|
||||||
build-hypre:
|
|
||||||
runs-on: ubuntu-latest
|
|
||||||
name: 2.19.0
|
|
||||||
steps:
|
|
||||||
- uses: actions/checkout@v6
|
|
||||||
- uses: ./.github/actions/sanitize/config
|
|
||||||
- name: Cache
|
|
||||||
id: cache
|
|
||||||
uses: actions/cache@v5
|
|
||||||
with:
|
|
||||||
path: ${{env.HYPRE_DIR}}
|
|
||||||
key: ${{runner.os}}-ompi-build-${{env.HYPRE_DIR}}-int32-fp64-v2.5
|
|
||||||
- name: Setup
|
|
||||||
if: steps.cache.outputs.cache-hit != 'true'
|
|
||||||
uses: ./.github/actions/sanitize/mpi
|
|
||||||
- name: Build
|
|
||||||
if: steps.cache.outputs.cache-hit != 'true'
|
|
||||||
uses: mfem/github-actions/build-hypre@v2.5
|
|
||||||
with:
|
|
||||||
archive: ${{env.HYPRE_TGZ}}
|
|
||||||
dir: ${{env.HYPRE_DIR}}
|
|
||||||
target: int32
|
|
||||||
precision: fp64
|
|
||||||
build-system: make
|
|
||||||
@@ -1,76 +0,0 @@
|
|||||||
# Copyright (c) 2010-2025, Lawrence Livermore National Security, LLC. Produced
|
|
||||||
# at the Lawrence Livermore National Laboratory. All Rights reserved. See files
|
|
||||||
# LICENSE and NOTICE for details. LLNL-CODE-806117.
|
|
||||||
#
|
|
||||||
# This file is part of the MFEM library. For more information and source code
|
|
||||||
# availability visit https://mfem.org.
|
|
||||||
#
|
|
||||||
# MFEM is free software; you can redistribute it and/or modify it under the
|
|
||||||
# terms of the BSD-3 license. We welcome feedback and contributions, see file
|
|
||||||
# CONTRIBUTING.md for details.
|
|
||||||
---
|
|
||||||
name: build-libcxx
|
|
||||||
on:
|
|
||||||
workflow_call:
|
|
||||||
jobs:
|
|
||||||
build-llvm-libcxx:
|
|
||||||
runs-on: ubuntu-latest
|
|
||||||
strategy:
|
|
||||||
matrix:
|
|
||||||
sanitizer: [asan, msan, ubsan]
|
|
||||||
include:
|
|
||||||
- sanitizer: asan
|
|
||||||
llvm_use_sanitizer: "Address"
|
|
||||||
- sanitizer: msan
|
|
||||||
llvm_use_sanitizer: "MemoryWithOrigins"
|
|
||||||
- sanitizer: ubsan
|
|
||||||
llvm_use_sanitizer: "Undefined"
|
|
||||||
name: ${{matrix.sanitizer}}
|
|
||||||
steps:
|
|
||||||
- uses: actions/checkout@v6
|
|
||||||
- uses: ./.github/actions/sanitize/config
|
|
||||||
with:
|
|
||||||
NO_FLAGS: true
|
|
||||||
- name: Cache
|
|
||||||
id: cache
|
|
||||||
uses: actions/cache@v5
|
|
||||||
with:
|
|
||||||
path: ${{env.LLVM_DIR}}
|
|
||||||
key: build-libcxx-${{env.LLVM_VER}}-${{matrix.sanitizer}}
|
|
||||||
- name: Clone
|
|
||||||
if: ${{ steps.cache.outputs.cache-hit != 'true' }}
|
|
||||||
run: >
|
|
||||||
git clone --filter=blob:none --depth=1
|
|
||||||
--branch llvmorg-${{env.LLVM_VER}}
|
|
||||||
--no-checkout https://github.com/llvm/llvm-project.git llvm-project
|
|
||||||
- name: Checkout
|
|
||||||
if: ${{ steps.cache.outputs.cache-hit != 'true' }}
|
|
||||||
working-directory: llvm-project
|
|
||||||
run: |
|
|
||||||
git sparse-checkout set --cone
|
|
||||||
git checkout llvmorg-${{env.LLVM_VER}}
|
|
||||||
git sparse-checkout set cmake llvm/cmake runtimes libcxx libcxxabi
|
|
||||||
- name: Mkdir
|
|
||||||
if: ${{ steps.cache.outputs.cache-hit != 'true' }}
|
|
||||||
run: mkdir ${{env.LLVM_DIR}}
|
|
||||||
- name: CMake
|
|
||||||
if: ${{ steps.cache.outputs.cache-hit != 'true' }}
|
|
||||||
working-directory: ${{env.LLVM_DIR}}
|
|
||||||
run: >
|
|
||||||
VERBOSE=1
|
|
||||||
cmake -GNinja ../llvm-project/runtimes/
|
|
||||||
-DCMAKE_C_COMPILER=${{env.CC}}
|
|
||||||
-DCMAKE_CXX_COMPILER=${{env.CXX}}
|
|
||||||
-DCMAKE_BUILD_TYPE=RelWithDebInfo
|
|
||||||
-DCMAKE_INSTALL_PREFIX=/usr
|
|
||||||
-DLLVM_USE_SANITIZER=${{matrix.llvm_use_sanitizer}}
|
|
||||||
-DLLVM_BUILD_32_BITS=OFF
|
|
||||||
-DLIBCXXABI_USE_LLVM_UNWINDER=OFF
|
|
||||||
-DLLVM_INCLUDE_TESTS=OFF
|
|
||||||
-DLIBCXX_INCLUDE_TESTS=OFF
|
|
||||||
-DLIBCXX_INCLUDE_BENCHMARKS=OFF
|
|
||||||
-DLLVM_ENABLE_RUNTIMES='libcxx;libcxxabi'
|
|
||||||
- name: Build
|
|
||||||
if: ${{ steps.cache.outputs.cache-hit != 'true' }}
|
|
||||||
working-directory: ${{env.LLVM_DIR}}
|
|
||||||
run: cmake --build . -- cxx cxxabi
|
|
||||||
@@ -1,38 +0,0 @@
|
|||||||
# Copyright (c) 2010-2025, Lawrence Livermore National Security, LLC. Produced
|
|
||||||
# at the Lawrence Livermore National Laboratory. All Rights reserved. See files
|
|
||||||
# LICENSE and NOTICE for details. LLNL-CODE-806117.
|
|
||||||
#
|
|
||||||
# This file is part of the MFEM library. For more information and source code
|
|
||||||
# availability visit https://mfem.org.
|
|
||||||
#
|
|
||||||
# MFEM is free software; you can redistribute it and/or modify it under the
|
|
||||||
# terms of the BSD-3 license. We welcome feedback and contributions, see file
|
|
||||||
# CONTRIBUTING.md for details.
|
|
||||||
---
|
|
||||||
name: build-file-lsan
|
|
||||||
on:
|
|
||||||
workflow_call:
|
|
||||||
jobs:
|
|
||||||
build-file-lsan:
|
|
||||||
runs-on: ubuntu-latest
|
|
||||||
name: lsan.supp
|
|
||||||
steps:
|
|
||||||
- uses: actions/checkout@v6
|
|
||||||
- uses: ./.github/actions/sanitize/config
|
|
||||||
- name: Cache
|
|
||||||
id: cache
|
|
||||||
uses: actions/cache@v5
|
|
||||||
with:
|
|
||||||
path: ${{env.LSAN_DIR}}
|
|
||||||
key: build-lsan-suppression-file
|
|
||||||
- name: Setup
|
|
||||||
if: steps.cache.outputs.cache-hit != 'true'
|
|
||||||
run: |
|
|
||||||
mkdir -p ${{env.LSAN_DIR}}
|
|
||||||
cat << EOF > ${{env.LSAN_DIR}}/${{env.LSAN_FILE}}
|
|
||||||
leak:libevent_core-2.1.so
|
|
||||||
leak:ompi_mpi_finalize
|
|
||||||
leak:ompi_mpi_init
|
|
||||||
leak:PMPI_Init
|
|
||||||
leak:strdup
|
|
||||||
EOF
|
|
||||||
@@ -1,36 +0,0 @@
|
|||||||
# Copyright (c) 2010-2025, Lawrence Livermore National Security, LLC. Produced
|
|
||||||
# at the Lawrence Livermore National Laboratory. All Rights reserved. See files
|
|
||||||
# LICENSE and NOTICE for details. LLNL-CODE-806117.
|
|
||||||
#
|
|
||||||
# This file is part of the MFEM library. For more information and source code
|
|
||||||
# availability visit https://mfem.org.
|
|
||||||
#
|
|
||||||
# MFEM is free software; you can redistribute it and/or modify it under the
|
|
||||||
# terms of the BSD-3 license. We welcome feedback and contributions, see file
|
|
||||||
# CONTRIBUTING.md for details.
|
|
||||||
---
|
|
||||||
name: build-metis
|
|
||||||
on:
|
|
||||||
workflow_call:
|
|
||||||
jobs:
|
|
||||||
build-metis:
|
|
||||||
runs-on: ubuntu-latest
|
|
||||||
name: 4.0.3
|
|
||||||
steps:
|
|
||||||
- uses: actions/checkout@v6
|
|
||||||
- uses: ./.github/actions/sanitize/config
|
|
||||||
- name: Cache
|
|
||||||
id: cache
|
|
||||||
uses: actions/cache@v5
|
|
||||||
with:
|
|
||||||
path: ${{env.METIS_DIR}}
|
|
||||||
key: ${{runner.os}}-build-${{env.METIS_DIR}}-v2.5
|
|
||||||
- name: Setup
|
|
||||||
if: steps.cache.outputs.cache-hit != 'true'
|
|
||||||
uses: ./.github/actions/sanitize/mpi
|
|
||||||
- name: Build
|
|
||||||
if: steps.cache.outputs.cache-hit != 'true'
|
|
||||||
uses: mfem/github-actions/build-metis@v2.5
|
|
||||||
with:
|
|
||||||
archive: ${{env.METIS_TGZ}}
|
|
||||||
dir: ${{env.METIS_DIR}}
|
|
||||||
@@ -1,197 +0,0 @@
|
|||||||
# Copyright (c) 2010-2025, Lawrence Livermore National Security, LLC. Produced
|
|
||||||
# at the Lawrence Livermore National Laboratory. All Rights reserved. See files
|
|
||||||
# LICENSE and NOTICE for details. LLNL-CODE-806117.
|
|
||||||
#
|
|
||||||
# This file is part of the MFEM library. For more information and source code
|
|
||||||
# availability visit https://mfem.org.
|
|
||||||
#
|
|
||||||
# MFEM is free software; you can redistribute it and/or modify it under the
|
|
||||||
# terms of the BSD-3 license. We welcome feedback and contributions, see file
|
|
||||||
# CONTRIBUTING.md for details.
|
|
||||||
---
|
|
||||||
name: Sanitize
|
|
||||||
on:
|
|
||||||
workflow_call:
|
|
||||||
inputs:
|
|
||||||
par:
|
|
||||||
description: 'Whether to build for parallel (true/false)'
|
|
||||||
required: false
|
|
||||||
default: false
|
|
||||||
type: boolean
|
|
||||||
sanitizer:
|
|
||||||
description: 'Sanitizer to use (asan, msan, ubsan)'
|
|
||||||
required: true
|
|
||||||
default: asan
|
|
||||||
type: string
|
|
||||||
|
|
||||||
jobs:
|
|
||||||
build:
|
|
||||||
runs-on: ubuntu-latest
|
|
||||||
steps:
|
|
||||||
- uses: actions/checkout@v6
|
|
||||||
- uses: ./.github/actions/sanitize/mfem
|
|
||||||
with:
|
|
||||||
par: ${{inputs.par}}
|
|
||||||
sanitizer: ${{inputs.sanitizer}}
|
|
||||||
|
|
||||||
check:
|
|
||||||
needs: [build]
|
|
||||||
runs-on: ubuntu-latest
|
|
||||||
env:
|
|
||||||
ex: ${{inputs.par && 'ex1p' || 'ex1'}}
|
|
||||||
steps:
|
|
||||||
- uses: actions/checkout@v6
|
|
||||||
- uses: ./.github/actions/sanitize/restore
|
|
||||||
id: restore
|
|
||||||
with:
|
|
||||||
par: ${{inputs.par}}
|
|
||||||
sanitizer: ${{inputs.sanitizer}}
|
|
||||||
cache-path: mfem/build/examples/${{env.ex}}
|
|
||||||
- name: MFEM Check
|
|
||||||
if: ${{steps.restore.outputs.cache-hit != 'true'}}
|
|
||||||
working-directory: mfem/build
|
|
||||||
run: ninja -v check
|
|
||||||
|
|
||||||
examples:
|
|
||||||
needs: [check]
|
|
||||||
runs-on: ubuntu-latest
|
|
||||||
env:
|
|
||||||
exclude: ${{inputs.par && '-E "_ser"' || ''}}
|
|
||||||
steps:
|
|
||||||
- uses: actions/checkout@v6
|
|
||||||
- uses: ./.github/actions/sanitize/restore
|
|
||||||
id: restore
|
|
||||||
with:
|
|
||||||
par: ${{inputs.par}}
|
|
||||||
sanitizer: ${{inputs.sanitizer}}
|
|
||||||
cache-path: mfem/build/examples/ex1
|
|
||||||
- name: Build Examples
|
|
||||||
if: ${{steps.restore.outputs.cache-hit != 'true'}}
|
|
||||||
working-directory: mfem/build
|
|
||||||
run: ninja -v examples
|
|
||||||
- name: Test Examples
|
|
||||||
if: ${{steps.restore.outputs.cache-hit != 'true'}}
|
|
||||||
working-directory: mfem/build
|
|
||||||
run: |
|
|
||||||
${{env.CTEST}} examples ${{env.exclude}} --show-only
|
|
||||||
${{env.CTEST}} examples ${{env.exclude}}
|
|
||||||
|
|
||||||
miniapps:
|
|
||||||
needs: [check]
|
|
||||||
runs-on: ubuntu-latest
|
|
||||||
env:
|
|
||||||
exclude: ${{inputs.par && '-E "_ser"' || ''}}
|
|
||||||
steps:
|
|
||||||
- uses: actions/checkout@v6
|
|
||||||
- uses: ./.github/actions/sanitize/restore
|
|
||||||
id: restore
|
|
||||||
with:
|
|
||||||
par: ${{inputs.par}}
|
|
||||||
sanitizer: ${{inputs.sanitizer}}
|
|
||||||
cache-path: mfem/build/miniapps/meshing/minimal-surface
|
|
||||||
- name: Build Miniapps
|
|
||||||
if: ${{steps.restore.outputs.cache-hit != 'true'}}
|
|
||||||
working-directory: mfem/build
|
|
||||||
run: ninja -v miniapps
|
|
||||||
- name: Test Miniapps
|
|
||||||
if: ${{steps.restore.outputs.cache-hit != 'true'}}
|
|
||||||
working-directory: mfem/build
|
|
||||||
run: |
|
|
||||||
${{env.CTEST}} miniapps ${{env.exclude}} --show-only
|
|
||||||
${{env.CTEST}} miniapps ${{env.exclude}}
|
|
||||||
|
|
||||||
tests-miniapps:
|
|
||||||
needs: [check]
|
|
||||||
runs-on: ubuntu-latest
|
|
||||||
env:
|
|
||||||
run: ${{inputs.par && '-R "_cpu_np"' || ''}}
|
|
||||||
exclude: ${{inputs.par && '"unit_tests|debug"' || '"^unit_tests$|debug"'}}
|
|
||||||
steps:
|
|
||||||
- uses: actions/checkout@v6
|
|
||||||
- uses: ./.github/actions/sanitize/restore
|
|
||||||
id: restore
|
|
||||||
with:
|
|
||||||
par: ${{inputs.par}}
|
|
||||||
sanitizer: ${{inputs.sanitizer}}
|
|
||||||
cache-path: mfem/build/tests/unit/sedov_tests_cpu
|
|
||||||
- name: Build Tests Unit Miniapps
|
|
||||||
if: ${{steps.restore.outputs.cache-hit != 'true'}}
|
|
||||||
working-directory: mfem/build
|
|
||||||
run: ninja -v tests/unit/all
|
|
||||||
- name: Run Tests Unit Miniapps
|
|
||||||
if: ${{steps.restore.outputs.cache-hit != 'true'}}
|
|
||||||
working-directory: mfem/build
|
|
||||||
run: |
|
|
||||||
${{env.CTEST}} tests/unit -E ${{env.exclude}} ${{env.run}} --show-only
|
|
||||||
${{env.CTEST}} tests/unit -E ${{env.exclude}} ${{env.run}}
|
|
||||||
|
|
||||||
tests-unit-build:
|
|
||||||
needs: [check]
|
|
||||||
runs-on: ubuntu-latest
|
|
||||||
env:
|
|
||||||
unit_tests: ${{inputs.par && 'punit_tests' || 'unit_tests'}}
|
|
||||||
steps:
|
|
||||||
- uses: actions/checkout@v6
|
|
||||||
- uses: ./.github/actions/sanitize/restore
|
|
||||||
id: restore
|
|
||||||
with:
|
|
||||||
par: ${{inputs.par}}
|
|
||||||
sanitizer: ${{inputs.sanitizer}}
|
|
||||||
cache-path: mfem/build/tests/unit/${{env.unit_tests}}
|
|
||||||
- name: Build Unit Tests
|
|
||||||
if: ${{steps.restore.outputs.cache-hit != 'true'}}
|
|
||||||
working-directory: mfem/build
|
|
||||||
run: ninja -v ${{env.unit_tests}}
|
|
||||||
- name: Delete object files
|
|
||||||
if: ${{steps.restore.outputs.cache-hit != 'true'}}
|
|
||||||
working-directory: mfem/build/tests/unit
|
|
||||||
run: find . -type f -name '*.o' -delete
|
|
||||||
- uses: actions/upload-artifact@v4
|
|
||||||
with:
|
|
||||||
name: tests-${{inputs.par}}-${{inputs.sanitizer}}
|
|
||||||
path: mfem/build/tests/unit/${{env.unit_tests}}
|
|
||||||
if-no-files-found: error
|
|
||||||
retention-days: 1
|
|
||||||
overwrite: false
|
|
||||||
|
|
||||||
tests-unit-run:
|
|
||||||
needs: [tests-unit-build]
|
|
||||||
runs-on: ubuntu-latest
|
|
||||||
strategy:
|
|
||||||
matrix:
|
|
||||||
tag: [0, 1, 2, 3]
|
|
||||||
name: tests-unit-run-${{matrix.tag}}
|
|
||||||
env:
|
|
||||||
unit_tests: ${{inputs.par && 'punit_tests' || 'unit_tests'}}
|
|
||||||
np: ${{inputs.par && '_np=2' || ''}}
|
|
||||||
steps:
|
|
||||||
- uses: actions/checkout@v6
|
|
||||||
- uses: ./.github/actions/sanitize/restore
|
|
||||||
id: restore
|
|
||||||
with:
|
|
||||||
par: ${{inputs.par}}
|
|
||||||
sanitizer: ${{inputs.sanitizer}}
|
|
||||||
cache-path: mfem/build/tests/unit/${{env.unit_tests}}
|
|
||||||
- uses: actions/download-artifact@v4
|
|
||||||
if: ${{steps.restore.outputs.cache-hit != 'true'}}
|
|
||||||
with:
|
|
||||||
name: tests-${{inputs.par}}-${{inputs.sanitizer}}
|
|
||||||
path: mfem/build/tests/unit
|
|
||||||
- name: Split Unit Tests
|
|
||||||
if: ${{steps.restore.outputs.cache-hit != 'true'}}
|
|
||||||
working-directory: mfem/build/tests/unit
|
|
||||||
run: |
|
|
||||||
chmod 755 ${{env.unit_tests}}
|
|
||||||
./${{env.unit_tests}} --list-test-names-only | tail -n +2 > list-test-names
|
|
||||||
shuf list-test-names -o list-test-names
|
|
||||||
split --verbose -n l/4 -d -a 1 list-test-names list-test-names-
|
|
||||||
- name: Cat Unit Tests ${{matrix.tag}}
|
|
||||||
if: ${{steps.restore.outputs.cache-hit != 'true'}}
|
|
||||||
working-directory: mfem/build/tests/unit
|
|
||||||
run: cat list-test-names-${{matrix.tag}}
|
|
||||||
- name: Run Unit Tests ${{matrix.tag}}
|
|
||||||
if: ${{steps.restore.outputs.cache-hit != 'true'}}
|
|
||||||
working-directory: mfem/build
|
|
||||||
run: |
|
|
||||||
${{env.CTEST}} tests/unit -R "${{env.unit_tests}}${{env.np}}" --show-only
|
|
||||||
${{env.CTEST}} tests/unit -R "${{env.unit_tests}}${{env.np}}"
|
|
||||||
@@ -1,73 +0,0 @@
|
|||||||
# Copyright (c) 2010-2025, Lawrence Livermore National Security, LLC. Produced
|
|
||||||
# at the Lawrence Livermore National Laboratory. All Rights reserved. See files
|
|
||||||
# LICENSE and NOTICE for details. LLNL-CODE-806117.
|
|
||||||
#
|
|
||||||
# This file is part of the MFEM library. For more information and source code
|
|
||||||
# availability visit https://mfem.org.
|
|
||||||
#
|
|
||||||
# MFEM is free software; you can redistribute it and/or modify it under the
|
|
||||||
# terms of the BSD-3 license. We welcome feedback and contributions, see file
|
|
||||||
# CONTRIBUTING.md for details.
|
|
||||||
---
|
|
||||||
name: Sanitizers
|
|
||||||
|
|
||||||
permissions:
|
|
||||||
actions: write
|
|
||||||
|
|
||||||
on:
|
|
||||||
push:
|
|
||||||
branches: ["master", "next"]
|
|
||||||
pull_request:
|
|
||||||
workflow_dispatch:
|
|
||||||
|
|
||||||
concurrency:
|
|
||||||
group: ${{github.workflow}}-${{github.ref}}
|
|
||||||
cancel-in-progress: true
|
|
||||||
|
|
||||||
jobs:
|
|
||||||
|
|
||||||
# Build steps for dependencies
|
|
||||||
build-hypre:
|
|
||||||
uses: ./.github/workflows/sanitize-build-hypre.yml
|
|
||||||
|
|
||||||
build-metis:
|
|
||||||
uses: ./.github/workflows/sanitize-build-metis.yml
|
|
||||||
|
|
||||||
build-lsan:
|
|
||||||
uses: ./.github/workflows/sanitize-build-lsan.yml
|
|
||||||
|
|
||||||
build-libcxx:
|
|
||||||
uses: ./.github/workflows/sanitize-build-libcxx.yml
|
|
||||||
|
|
||||||
# Serial sanitizers: asan, msan, ubsan
|
|
||||||
seq-asan:
|
|
||||||
needs: [build-libcxx]
|
|
||||||
uses: ./.github/workflows/sanitize-tests.yml
|
|
||||||
with:
|
|
||||||
sanitizer: asan
|
|
||||||
|
|
||||||
seq-msan:
|
|
||||||
needs: [build-libcxx]
|
|
||||||
uses: ./.github/workflows/sanitize-tests.yml
|
|
||||||
with:
|
|
||||||
sanitizer: msan
|
|
||||||
|
|
||||||
seq-ubsan:
|
|
||||||
needs: [build-libcxx]
|
|
||||||
uses: ./.github/workflows/sanitize-tests.yml
|
|
||||||
with:
|
|
||||||
sanitizer: ubsan
|
|
||||||
|
|
||||||
# Parallel sanitizers: asan, ubsan
|
|
||||||
par-asan:
|
|
||||||
needs: [build-libcxx, build-hypre, build-metis]
|
|
||||||
uses: ./.github/workflows/sanitize-tests.yml
|
|
||||||
with:
|
|
||||||
par: true
|
|
||||||
sanitizer: asan
|
|
||||||
par-ubsan:
|
|
||||||
needs: [build-libcxx, build-hypre, build-metis]
|
|
||||||
uses: ./.github/workflows/sanitize-tests.yml
|
|
||||||
with:
|
|
||||||
par: true
|
|
||||||
sanitizer: ubsan
|
|
||||||
@@ -1,75 +0,0 @@
|
|||||||
# This workflow warns and then closes issues and PRs that have had no activity for a specified amount of time.
|
|
||||||
# For more information, see: https://github.com/actions/stale
|
|
||||||
name: Mark stale issues and pull requests
|
|
||||||
|
|
||||||
on:
|
|
||||||
workflow_dispatch:
|
|
||||||
schedule:
|
|
||||||
- cron: '0 0 * * *'
|
|
||||||
|
|
||||||
jobs:
|
|
||||||
stale:
|
|
||||||
|
|
||||||
runs-on: ubuntu-latest
|
|
||||||
permissions:
|
|
||||||
issues: write
|
|
||||||
pull-requests: write
|
|
||||||
actions: write
|
|
||||||
|
|
||||||
steps:
|
|
||||||
- uses: actions/stale@v9
|
|
||||||
with:
|
|
||||||
repo-token: ${{ secrets.GITHUB_TOKEN }}
|
|
||||||
stale-issue-message: ':warning: This issue has been automatically marked as stale because it has not had any activity in the last month. *If no activity occurs in the next week, it will be automatically closed.* Thank you for your contributions.'
|
|
||||||
stale-pr-message: ':warning: This PR has been automatically marked as stale because it has not had any activity in the last month. *If no activity occurs in the next week, it will be automatically closed.* Thank you for your contributions.'
|
|
||||||
days-before-stale: 30
|
|
||||||
days-before-close: 7
|
|
||||||
stale-issue-label: 'stale'
|
|
||||||
stale-pr-label: 'stale'
|
|
||||||
operations-per-run: 500
|
|
||||||
exempt-issue-labels: "bug,WIP,ready-for-review,in-review,in-next"
|
|
||||||
exempt-pr-labels: "bug,WIP,ready-for-review,in-review,in-next"
|
|
||||||
|
|
||||||
# Stale action for PRs with "in-review" label.
|
|
||||||
stale-in-review-pr:
|
|
||||||
|
|
||||||
runs-on: ubuntu-latest
|
|
||||||
permissions:
|
|
||||||
issues: write
|
|
||||||
pull-requests: write
|
|
||||||
actions: write
|
|
||||||
|
|
||||||
steps:
|
|
||||||
- uses: actions/stale@v9
|
|
||||||
with:
|
|
||||||
repo-token: ${{ secrets.GITHUB_TOKEN }}
|
|
||||||
stale-pr-message: ':warning: This PR has been automatically marked as stale because it has not had any activity in the last 150 days. *If no activity occurs in the next 30 days, it will be automatically closed.* Thank you for your contributions.'
|
|
||||||
only-pr-labels: "in-review"
|
|
||||||
days-before-pr-stale: 150
|
|
||||||
days-before-pr-close: 30
|
|
||||||
days-before-issue-stale: -1
|
|
||||||
days-before-issue-close: -1
|
|
||||||
stale-pr-label: 'stale'
|
|
||||||
operations-per-run: 500
|
|
||||||
|
|
||||||
# Stale action for PRs with "WIP" label.
|
|
||||||
stale-wip-pr:
|
|
||||||
|
|
||||||
runs-on: ubuntu-latest
|
|
||||||
permissions:
|
|
||||||
issues: write
|
|
||||||
pull-requests: write
|
|
||||||
actions: write
|
|
||||||
|
|
||||||
steps:
|
|
||||||
- uses: actions/stale@v9
|
|
||||||
with:
|
|
||||||
repo-token: ${{ secrets.GITHUB_TOKEN }}
|
|
||||||
stale-pr-message: ':warning: This PR has been automatically marked as stale because it has not had any activity in the last 300 days. *If no activity occurs in the next 30 days, it will be automatically closed.* Thank you for your contributions.'
|
|
||||||
only-pr-labels: "WIP"
|
|
||||||
days-before-pr-stale: 300
|
|
||||||
days-before-pr-close: 30
|
|
||||||
days-before-issue-stale: -1
|
|
||||||
days-before-issue-close: -1
|
|
||||||
stale-pr-label: 'stale'
|
|
||||||
operations-per-run: 500
|
|
||||||
@@ -1,31 +0,0 @@
|
|||||||
# Copyright (c) 2010-2025, Lawrence Livermore National Security, LLC. Produced
|
|
||||||
# at the Lawrence Livermore National Laboratory. All Rights reserved. See files
|
|
||||||
# LICENSE and NOTICE for details. LLNL-CODE-806117.
|
|
||||||
#
|
|
||||||
# This file is part of the MFEM library. For more information and source code
|
|
||||||
# availability visit https://mfem.org.
|
|
||||||
#
|
|
||||||
# MFEM is free software; you can redistribute it and/or modify it under the
|
|
||||||
# terms of the BSD-3 license. We welcome feedback and contributions, see file
|
|
||||||
# CONTRIBUTING.md for details.
|
|
||||||
|
|
||||||
name: "Trigger PyMFEM CI"
|
|
||||||
|
|
||||||
on:
|
|
||||||
push:
|
|
||||||
branches:
|
|
||||||
- master
|
|
||||||
|
|
||||||
jobs:
|
|
||||||
trigger-pymfem:
|
|
||||||
runs-on: ubuntu-latest
|
|
||||||
steps:
|
|
||||||
- name: Send POST request to trigger PyMFEM CI
|
|
||||||
run: |
|
|
||||||
curl -L \
|
|
||||||
-X POST \
|
|
||||||
-H "Accept: application/vnd.github+json" \
|
|
||||||
-H "Authorization: Bearer ${{ secrets.PYMFEM_CI_TOKEN }}" \
|
|
||||||
-H "X-GitHub-Api-Version: 2022-11-28" \
|
|
||||||
https://api.github.com/repos/mfem/pymfem/actions/workflows/build-and-test-dispatch.yml/dispatches \
|
|
||||||
-d '{"ref":"master", "inputs":{"test_options":"fast"}}'
|
|
||||||
+29
-175
@@ -8,7 +8,6 @@
|
|||||||
|
|
||||||
# Object and library files
|
# Object and library files
|
||||||
*.o
|
*.o
|
||||||
*.o.tmp
|
|
||||||
/libmfem.*
|
/libmfem.*
|
||||||
/miniapps/common/libmfem-common.*
|
/miniapps/common/libmfem-common.*
|
||||||
|
|
||||||
@@ -16,30 +15,17 @@
|
|||||||
CMakeCache.txt
|
CMakeCache.txt
|
||||||
CMakeFiles/
|
CMakeFiles/
|
||||||
|
|
||||||
# Clangd server cache
|
|
||||||
*.cache*
|
|
||||||
|
|
||||||
#vscode settings
|
|
||||||
/.vscode/
|
|
||||||
|
|
||||||
# Backup files
|
# Backup files
|
||||||
*~
|
*~
|
||||||
|
|
||||||
# clangd index
|
|
||||||
/.cache/
|
|
||||||
|
|
||||||
# Default install location
|
# Default install location
|
||||||
/mfem/
|
/mfem/
|
||||||
|
|
||||||
# Typical build directory
|
|
||||||
/build/
|
|
||||||
|
|
||||||
# Generated files in main directory, config/ and docs/
|
# Generated files in main directory, config/ and docs/
|
||||||
/deps.mk
|
/deps.mk
|
||||||
config/_config.hpp
|
config/_config.hpp
|
||||||
config/config.mk
|
config/config.mk
|
||||||
config/sample-runs-build.log
|
config/sample-runs-build.log
|
||||||
config/user.cmake
|
|
||||||
config/user.mk
|
config/user.mk
|
||||||
doc/CodeDocumentation.conf
|
doc/CodeDocumentation.conf
|
||||||
doc/CodeDocumentation.html
|
doc/CodeDocumentation.html
|
||||||
@@ -67,8 +53,6 @@ examples/ex2[0-9]
|
|||||||
examples/ex2[0-9]p
|
examples/ex2[0-9]p
|
||||||
examples/ex3[0-9]
|
examples/ex3[0-9]
|
||||||
examples/ex3[0-9]p
|
examples/ex3[0-9]p
|
||||||
examples/ex4[0-9]
|
|
||||||
examples/ex4[0-9]p
|
|
||||||
|
|
||||||
examples/refined.mesh
|
examples/refined.mesh
|
||||||
examples/displaced.mesh
|
examples/displaced.mesh
|
||||||
@@ -85,17 +69,11 @@ examples/sol_u.*
|
|||||||
examples/sol_p.*
|
examples/sol_p.*
|
||||||
examples/sol_r.*
|
examples/sol_r.*
|
||||||
examples/sol_i.*
|
examples/sol_i.*
|
||||||
examples/sol_z.*
|
|
||||||
examples/ex6p-checkpoint.*
|
examples/ex6p-checkpoint.*
|
||||||
examples/order.*
|
|
||||||
examples/ex9.mesh
|
examples/ex9.mesh
|
||||||
examples/ex9-mesh.*
|
examples/ex9-mesh.*
|
||||||
examples/ex9-init.*
|
examples/ex9-init.*
|
||||||
examples/ex9-final.*
|
examples/ex9-final.*
|
||||||
examples/ex41.mesh
|
|
||||||
examples/ex41-mesh.*
|
|
||||||
examples/ex41-init.*
|
|
||||||
examples/ex41-final.*
|
|
||||||
examples/deformed.*
|
examples/deformed.*
|
||||||
examples/velocity.*
|
examples/velocity.*
|
||||||
examples/elastic_energy.*
|
examples/elastic_energy.*
|
||||||
@@ -109,6 +87,10 @@ examples/ex16.mesh
|
|||||||
examples/ex16-mesh.*
|
examples/ex16-mesh.*
|
||||||
examples/ex16-init.*
|
examples/ex16-init.*
|
||||||
examples/ex16-final.*
|
examples/ex16-final.*
|
||||||
|
examples/vortex-mesh.*
|
||||||
|
examples/vortex.mesh
|
||||||
|
examples/vortex-?-init.*
|
||||||
|
examples/vortex-?-final.*
|
||||||
examples/deformation.*
|
examples/deformation.*
|
||||||
examples/pressure.*
|
examples/pressure.*
|
||||||
examples/ex20.dat
|
examples/ex20.dat
|
||||||
@@ -127,14 +109,6 @@ examples/ex25p-*.*
|
|||||||
examples/ex28_*
|
examples/ex28_*
|
||||||
examples/ex28p_*
|
examples/ex28p_*
|
||||||
examples/flux.*
|
examples/flux.*
|
||||||
examples/dsol.*
|
|
||||||
examples/cond.*
|
|
||||||
examples/cond_j.*
|
|
||||||
examples/cond_mesh.*
|
|
||||||
examples/port_mesh.*
|
|
||||||
examples/port_mode.*
|
|
||||||
|
|
||||||
examples/euler-*
|
|
||||||
|
|
||||||
examples/amgx/ex1
|
examples/amgx/ex1
|
||||||
examples/amgx/ex1p
|
examples/amgx/ex1p
|
||||||
@@ -144,16 +118,11 @@ examples/amgx/sol.gf
|
|||||||
examples/amgx/mesh.*
|
examples/amgx/mesh.*
|
||||||
examples/amgx/sol.*
|
examples/amgx/sol.*
|
||||||
|
|
||||||
examples/caliper/ex1
|
examples/gingko/ex1
|
||||||
examples/caliper/ex1p
|
examples/gingko/refined.mesh
|
||||||
examples/caliper/refined.mesh
|
examples/gingko/sol.gf
|
||||||
examples/caliper/sol.gf
|
examples/gingko/mesh.*
|
||||||
examples/caliper/mesh.*
|
examples/gingko/sol.*
|
||||||
examples/caliper/sol.*
|
|
||||||
|
|
||||||
examples/ginkgo/ex1
|
|
||||||
examples/ginkgo/refined.mesh
|
|
||||||
examples/ginkgo/sol.gf
|
|
||||||
|
|
||||||
examples/hiop/ex9
|
examples/hiop/ex9
|
||||||
examples/hiop/ex9p
|
examples/hiop/ex9p
|
||||||
@@ -179,8 +148,8 @@ examples/petsc/velocity.*
|
|||||||
examples/petsc/elastic_energy.*
|
examples/petsc/elastic_energy.*
|
||||||
examples/petsc/mode_*
|
examples/petsc/mode_*
|
||||||
|
|
||||||
examples/pumi/ex[12]
|
examples/pumi/ex1
|
||||||
examples/pumi/ex[16]p
|
examples/pumi/ex[126]p
|
||||||
examples/pumi/refined.mesh
|
examples/pumi/refined.mesh
|
||||||
examples/pumi/sol.gf
|
examples/pumi/sol.gf
|
||||||
examples/pumi/mesh.*
|
examples/pumi/mesh.*
|
||||||
@@ -212,32 +181,19 @@ examples/superlu/sol.*
|
|||||||
miniapps/adjoint/cvsRoberts_ASAi_dns
|
miniapps/adjoint/cvsRoberts_ASAi_dns
|
||||||
miniapps/adjoint/adjoint_advection_diffusion
|
miniapps/adjoint/adjoint_advection_diffusion
|
||||||
|
|
||||||
miniapps/dfem/dfem-minimal-surface
|
|
||||||
miniapps/dfem/dfem-minimal-surface-output
|
|
||||||
|
|
||||||
miniapps/electromagnetics/volta
|
miniapps/electromagnetics/volta
|
||||||
miniapps/electromagnetics/tesla
|
miniapps/electromagnetics/tesla
|
||||||
miniapps/electromagnetics/maxwell
|
miniapps/electromagnetics/maxwell
|
||||||
miniapps/electromagnetics/joule
|
miniapps/electromagnetics/joule
|
||||||
miniapps/electromagnetics/lorentz
|
|
||||||
miniapps/electromagnetics/Volta-AMR*
|
miniapps/electromagnetics/Volta-AMR*
|
||||||
miniapps/electromagnetics/Tesla-AMR*
|
miniapps/electromagnetics/Tesla-AMR*
|
||||||
miniapps/electromagnetics/Maxwell-Parallel*
|
miniapps/electromagnetics/Maxwell-Parallel*
|
||||||
miniapps/electromagnetics/Joule_[0-9]*
|
miniapps/electromagnetics/Joule_*
|
||||||
miniapps/electromagnetics/Lorentz_[0-9]*
|
|
||||||
miniapps/electromagnetics/Lorentz.dat
|
|
||||||
|
|
||||||
miniapps/fluids/schrodinger-flow/schrodinger_flow
|
|
||||||
miniapps/fluids/schrodinger-flow/pschrodinger_flow
|
|
||||||
|
|
||||||
miniapps/gslib/field-diff
|
miniapps/gslib/field-diff
|
||||||
miniapps/gslib/field-interp
|
miniapps/gslib/field-interp
|
||||||
miniapps/gslib/findpts
|
miniapps/gslib/findpts
|
||||||
miniapps/gslib/pfindpts
|
miniapps/gslib/pfindpts
|
||||||
miniapps/gslib/schwarz_ex1
|
|
||||||
miniapps/gslib/schwarz_ex1p
|
|
||||||
miniapps/gslib/interpolated.gf
|
|
||||||
miniapps/gslib/particles_redist
|
|
||||||
|
|
||||||
miniapps/meshing/mobius-strip
|
miniapps/meshing/mobius-strip
|
||||||
miniapps/meshing/klein-bottle
|
miniapps/meshing/klein-bottle
|
||||||
@@ -246,46 +202,29 @@ miniapps/meshing/twist
|
|||||||
miniapps/meshing/mesh-explorer
|
miniapps/meshing/mesh-explorer
|
||||||
miniapps/meshing/shaper
|
miniapps/meshing/shaper
|
||||||
miniapps/meshing/extruder
|
miniapps/meshing/extruder
|
||||||
miniapps/meshing/fit-node-position
|
|
||||||
miniapps/meshing/trimmer
|
miniapps/meshing/trimmer
|
||||||
miniapps/meshing/reflector
|
|
||||||
miniapps/meshing/ref321
|
|
||||||
miniapps/meshing/mesh-bounding-boxes
|
|
||||||
miniapps/meshing/mesh-optimizer
|
miniapps/meshing/mesh-optimizer
|
||||||
miniapps/meshing/pmesh-optimizer
|
miniapps/meshing/pmesh-optimizer
|
||||||
miniapps/meshing/pmesh-fitting
|
|
||||||
miniapps/meshing/minimal-surface
|
miniapps/meshing/minimal-surface
|
||||||
miniapps/meshing/pminimal-surface
|
miniapps/meshing/pminimal-surface
|
||||||
miniapps/meshing/polar-nc
|
miniapps/meshing/polar-nc
|
||||||
miniapps/meshing/mesh-quality
|
|
||||||
miniapps/meshing/hpref
|
|
||||||
miniapps/meshing/phpref
|
|
||||||
miniapps/meshing/mobius-strip.mesh
|
miniapps/meshing/mobius-strip.mesh
|
||||||
miniapps/meshing/klein-bottle.mesh
|
miniapps/meshing/klein-bottle.mesh
|
||||||
miniapps/meshing/toroid-*.mesh
|
miniapps/meshing/toroid-*.mesh
|
||||||
miniapps/meshing/twist-*.mesh
|
miniapps/meshing/twist-*.mesh
|
||||||
miniapps/meshing/mesh-explorer.mesh*
|
miniapps/meshing/mesh-explorer.mesh
|
||||||
miniapps/meshing/partitioning.txt
|
miniapps/meshing/partitioning.txt
|
||||||
miniapps/meshing/mesh-explorer-visit*
|
|
||||||
miniapps/meshing/mesh-explorer-paraview/
|
|
||||||
miniapps/meshing/shaper.mesh
|
miniapps/meshing/shaper.mesh
|
||||||
miniapps/meshing/extruder.mesh
|
miniapps/meshing/extruder.mesh
|
||||||
miniapps/meshing/trimmer.mesh
|
miniapps/meshing/trimmer.mesh
|
||||||
miniapps/meshing/reflected.mesh
|
|
||||||
miniapps/meshing/ref321.mesh
|
|
||||||
miniapps/meshing/sol.gf
|
|
||||||
miniapps/meshing/optimized*
|
miniapps/meshing/optimized*
|
||||||
miniapps/meshing/perturbed*
|
miniapps/meshing/perturbed*
|
||||||
miniapps/meshing/polar-nc.mesh
|
miniapps/meshing/polar-nc.mesh
|
||||||
miniapps/meshing/mesh.*
|
|
||||||
miniapps/meshing/order.*
|
|
||||||
miniapps/meshing/sol.*
|
|
||||||
miniapps/meshing/refined.mesh
|
|
||||||
miniapps/meshing/bounding-box*
|
|
||||||
miniapps/meshing/jacobian-determinant*
|
|
||||||
|
|
||||||
miniapps/mtop/ParaView/
|
miniapps/mtop/parheat
|
||||||
miniapps/mtop/mtop_test_iso_elasticity
|
miniapps/mtop/ParHeat*
|
||||||
|
miniapps/mtop/seqheat
|
||||||
|
miniapps/mtop/SeqHeat*
|
||||||
|
|
||||||
miniapps/autodiff/paradiff
|
miniapps/autodiff/paradiff
|
||||||
miniapps/autodiff/seqadiff
|
miniapps/autodiff/seqadiff
|
||||||
@@ -293,61 +232,26 @@ miniapps/autodiff/seqtest
|
|||||||
miniapps/autodiff/par_example
|
miniapps/autodiff/par_example
|
||||||
miniapps/autodiff/seq_example
|
miniapps/autodiff/seq_example
|
||||||
miniapps/autodiff/seq_test
|
miniapps/autodiff/seq_test
|
||||||
miniapps/autodiff/Example/*
|
miniapps/autodiff/Exampl*
|
||||||
|
|
||||||
miniapps/fluids/navier/navier_mms
|
miniapps/navier/navier_mms
|
||||||
miniapps/fluids/navier/navier_kovasznay
|
miniapps/navier/navier_kovasznay
|
||||||
miniapps/fluids/navier/navier_kovasznay_vs
|
miniapps/navier/navier_kovasznay_vs
|
||||||
miniapps/fluids/navier/navier_tgv
|
miniapps/navier/navier_tgv
|
||||||
miniapps/fluids/navier/navier_shear
|
miniapps/navier/navier_shear
|
||||||
miniapps/fluids/navier/navier_3dfoc
|
miniapps/navier/navier_3dfoc
|
||||||
miniapps/fluids/navier/navier_turbchan
|
miniapps/navier/navier_turbchan
|
||||||
miniapps/fluids/navier/navier_cht
|
miniapps/navier/tgv_out*.txt
|
||||||
miniapps/fluids/navier/navier_bifurcation
|
miniapps/navier/*_output
|
||||||
miniapps/fluids/navier/Navier_Bifurcation_[0-9]*
|
|
||||||
miniapps/fluids/navier/ParaView
|
|
||||||
miniapps/fluids/navier/tgv_out*.txt
|
|
||||||
miniapps/fluids/navier/*_output
|
|
||||||
|
|
||||||
miniapps/nurbs/nurbs_ex1
|
miniapps/nurbs/nurbs_ex1
|
||||||
miniapps/nurbs/nurbs_ex1p
|
miniapps/nurbs/nurbs_ex1p
|
||||||
miniapps/nurbs/nurbs_ex3
|
|
||||||
miniapps/nurbs/nurbs_ex5
|
|
||||||
miniapps/nurbs/nurbs_ex10
|
|
||||||
miniapps/nurbs/nurbs_ex10p
|
|
||||||
miniapps/nurbs/nurbs_ex11p
|
miniapps/nurbs/nurbs_ex11p
|
||||||
miniapps/nurbs/nurbs_ex24
|
|
||||||
miniapps/nurbs/nurbs_solenoidal
|
|
||||||
miniapps/nurbs/nurbs_printfunc
|
|
||||||
miniapps/nurbs/nurbs_patch_ex1
|
|
||||||
miniapps/nurbs/nurbs_curveint
|
|
||||||
miniapps/nurbs/nurbs_surface
|
|
||||||
miniapps/nurbs/refined.mesh
|
miniapps/nurbs/refined.mesh
|
||||||
miniapps/nurbs/mesh.*
|
miniapps/nurbs/mesh.*
|
||||||
miniapps/nurbs/sol_?.gf
|
|
||||||
miniapps/nurbs/sol.*
|
miniapps/nurbs/sol.*
|
||||||
miniapps/nurbs/mode_*
|
miniapps/nurbs/mode_*
|
||||||
miniapps/nurbs/Example1*
|
miniapps/nurbs/Example1*
|
||||||
miniapps/nurbs/Example3*
|
|
||||||
miniapps/nurbs/Example5*
|
|
||||||
miniapps/nurbs/Solenoidal*
|
|
||||||
miniapps/nurbs/ParaView
|
|
||||||
miniapps/nurbs/sin-fit.mesh
|
|
||||||
miniapps/nurbs/ex5.mesh
|
|
||||||
miniapps/nurbs/exsol.mesh
|
|
||||||
miniapps/nurbs/CurveInt
|
|
||||||
miniapps/nurbs/nurbs_naca_cmesh
|
|
||||||
miniapps/nurbs/naca-cmesh.mesh
|
|
||||||
miniapps/nurbs/glvis_naca-cmesh.mesh
|
|
||||||
miniapps/nurbs/Naca_cmesh
|
|
||||||
miniapps/nurbs/nurbs_mesh_info
|
|
||||||
miniapps/nurbs/k*_*.dat
|
|
||||||
miniapps/nurbs/*-Surface.mesh
|
|
||||||
miniapps/nurbs/*.mesh
|
|
||||||
miniapps/nurbs/*.sol
|
|
||||||
miniapps/nurbs/deformed.*
|
|
||||||
miniapps/nurbs/elastic_energy.*
|
|
||||||
miniapps/nurbs/velocity.*
|
|
||||||
|
|
||||||
miniapps/performance/ex1
|
miniapps/performance/ex1
|
||||||
miniapps/performance/ex1p
|
miniapps/performance/ex1p
|
||||||
@@ -369,17 +273,8 @@ miniapps/shifted/lsf_integral
|
|||||||
miniapps/tools/display-basis
|
miniapps/tools/display-basis
|
||||||
miniapps/tools/load-dc
|
miniapps/tools/load-dc
|
||||||
miniapps/tools/convert-dc
|
miniapps/tools/convert-dc
|
||||||
miniapps/tools/compare-dc
|
|
||||||
miniapps/tools/gridfunction-bounds
|
|
||||||
miniapps/tools/lor-transfer
|
miniapps/tools/lor-transfer
|
||||||
miniapps/tools/plor-transfer
|
|
||||||
miniapps/tools/get-values
|
miniapps/tools/get-values
|
||||||
miniapps/tools/tmop-check-metric
|
|
||||||
miniapps/tools/tmop-metric-magnitude
|
|
||||||
miniapps/tools/nodal-transfer
|
|
||||||
miniapps/tools/ParaView
|
|
||||||
miniapps/tools/gridfunc_*
|
|
||||||
miniapps/tools/mesh_*
|
|
||||||
|
|
||||||
miniapps/toys/automata
|
miniapps/toys/automata
|
||||||
miniapps/toys/life
|
miniapps/toys/life
|
||||||
@@ -388,7 +283,6 @@ miniapps/toys/rubik
|
|||||||
miniapps/toys/snake
|
miniapps/toys/snake
|
||||||
miniapps/toys/lissajous
|
miniapps/toys/lissajous
|
||||||
miniapps/toys/mondrian
|
miniapps/toys/mondrian
|
||||||
miniapps/toys/spiral
|
|
||||||
miniapps/toys/snake-init.mesh
|
miniapps/toys/snake-init.mesh
|
||||||
miniapps/toys/snake-user.mesh
|
miniapps/toys/snake-user.mesh
|
||||||
miniapps/toys/snake-joined.mesh
|
miniapps/toys/snake-joined.mesh
|
||||||
@@ -406,61 +300,27 @@ miniapps/toys/mondrian.mesh
|
|||||||
miniapps/solvers/block-solvers
|
miniapps/solvers/block-solvers
|
||||||
miniapps/solvers/lor_solvers
|
miniapps/solvers/lor_solvers
|
||||||
miniapps/solvers/plor_solvers
|
miniapps/solvers/plor_solvers
|
||||||
miniapps/solvers/lor_elast
|
|
||||||
miniapps/solvers/ParaView
|
miniapps/solvers/ParaView
|
||||||
miniapps/solvers/mesh.*
|
miniapps/solvers/mesh.*
|
||||||
miniapps/solvers/sol.*
|
miniapps/solvers/sol.*
|
||||||
|
|
||||||
miniapps/hdiv-linear-solver/darcy
|
|
||||||
miniapps/hdiv-linear-solver/grad_div
|
|
||||||
|
|
||||||
miniapps/parelag/MultilevelHcurlHdivSolver
|
miniapps/parelag/MultilevelHcurlHdivSolver
|
||||||
miniapps/parelag/*.mesh
|
miniapps/parelag/*.mesh
|
||||||
|
|
||||||
miniapps/multidomain/multidomain
|
|
||||||
miniapps/multidomain/multidomain_nd
|
|
||||||
miniapps/multidomain/multidomain_rt
|
|
||||||
miniapps/hooke/hooke
|
miniapps/hooke/hooke
|
||||||
|
|
||||||
miniapps/dpg/diffusion
|
|
||||||
miniapps/dpg/pdiffusion
|
|
||||||
miniapps/dpg/convection-diffusion
|
|
||||||
miniapps/dpg/pconvection-diffusion
|
|
||||||
miniapps/dpg/acoustics
|
|
||||||
miniapps/dpg/pacoustics
|
|
||||||
miniapps/dpg/maxwell
|
|
||||||
miniapps/dpg/pmaxwell
|
|
||||||
miniapps/dpg/ParaView
|
|
||||||
|
|
||||||
miniapps/spde/generate_random_field
|
|
||||||
miniapps/spde/ParaView
|
|
||||||
|
|
||||||
miniapps/tribol/contact-patch-test
|
|
||||||
|
|
||||||
miniapps/diag-smoothers/abs-l1-jacobi
|
|
||||||
miniapps/diag-smoothers/mg-abs-l1-jacobi
|
|
||||||
|
|
||||||
miniapps/contact/contact
|
|
||||||
miniapps/contact/ParaView
|
|
||||||
|
|
||||||
miniapps/plasma/pic/electrostatic-*
|
|
||||||
!miniapps/plasma/pic/electrostatic-*.cpp
|
|
||||||
miniapps/plasma/pic/*.csv
|
|
||||||
|
|
||||||
# Unit test binary and outputs
|
# Unit test binary and outputs
|
||||||
tests/unit/output_meshes
|
tests/unit/output_meshes
|
||||||
tests/unit/unit_tests
|
tests/unit/unit_tests
|
||||||
tests/unit/punit_tests
|
tests/unit/punit_tests
|
||||||
tests/unit/gpu_unit_tests
|
tests/unit/cunit_tests
|
||||||
tests/unit/pgpu_unit_tests
|
tests/unit/pcunit_tests
|
||||||
tests/unit/sedov_tests_*
|
tests/unit/sedov_tests_*
|
||||||
tests/unit/psedov_tests_*
|
tests/unit/psedov_tests_*
|
||||||
tests/unit/tmop_pa_tests_*
|
tests/unit/tmop_pa_tests_*
|
||||||
tests/unit/ptmop_pa_tests_*
|
tests/unit/ptmop_pa_tests_*
|
||||||
tests/unit/ceed_tests
|
tests/unit/ceed_tests
|
||||||
tests/unit/debug_device_tests
|
tests/unit/debug_device_tests
|
||||||
tests/unit/parallel_in_serial.mesh
|
|
||||||
tests/unit/parallel_in_serial.gf
|
|
||||||
|
|
||||||
# Benchmark binaries
|
# Benchmark binaries
|
||||||
tests/benchmarks/bench_ceed
|
tests/benchmarks/bench_ceed
|
||||||
@@ -487,9 +347,3 @@ pkg.gitcommit
|
|||||||
|
|
||||||
# Jupyter Notebook Checkpoints
|
# Jupyter Notebook Checkpoints
|
||||||
.ipynb_checkpoints
|
.ipynb_checkpoints
|
||||||
|
|
||||||
# emacs tag file
|
|
||||||
TAGS
|
|
||||||
|
|
||||||
# vs code
|
|
||||||
.vscode
|
|
||||||
|
|||||||
+68
-530
@@ -1,4 +1,4 @@
|
|||||||
# Copyright (c) 2010-2025, Lawrence Livermore National Security, LLC. Produced
|
# Copyright (c) 2010-2022, Lawrence Livermore National Security, LLC. Produced
|
||||||
# at the Lawrence Livermore National Laboratory. All Rights reserved. See files
|
# at the Lawrence Livermore National Laboratory. All Rights reserved. See files
|
||||||
# LICENSE and NOTICE for details. LLNL-CODE-806117.
|
# LICENSE and NOTICE for details. LLNL-CODE-806117.
|
||||||
#
|
#
|
||||||
@@ -9,550 +9,88 @@
|
|||||||
# terms of the BSD-3 license. We welcome feedback and contributions, see file
|
# terms of the BSD-3 license. We welcome feedback and contributions, see file
|
||||||
# CONTRIBUTING.md for details.
|
# CONTRIBUTING.md for details.
|
||||||
|
|
||||||
# DESCRIPTION:
|
|
||||||
###############################################################################
|
|
||||||
# General GitLab pipelines configurations for supercomputers and Linux clusters
|
# General GitLab pipelines configurations for supercomputers and Linux clusters
|
||||||
# at Lawrence Livermore National Laboratory (LLNL).
|
# at Lawrence Livermore National Laboratory (LLNL). This entire pipeline is
|
||||||
# This entire pipeline is LLNL-specific
|
# LLNL-specific!
|
||||||
#
|
|
||||||
# Important note: This file is a template provided by llnl/radiuss-shared-ci.
|
|
||||||
# Remains to set variable values, change the reference to the radiuss-shared-ci
|
# The pipeline is divided into stages. Usually, jobs in a given stage wait for
|
||||||
# repo, opt-in and out optional features. The project can then extend it with
|
# the preceding stages to complete before to start. However, we sometimes use
|
||||||
# additional stages.
|
# the "needs" keyword and express the DAG of jobs for more efficiency.
|
||||||
#
|
# - We use setup and setup_baseline phases to download content outside of mfem
|
||||||
# In addition, each project should copy over and complete:
|
# directory.
|
||||||
# - .gitlab/custom-jobs-and-variables.yml
|
# - Allocate/Release is where quartz resource are allocated/released once for all.
|
||||||
# - .gitlab/subscribed-pipelines.yml
|
# - Build and Test is where we build and MFEM for multiple toolchains.
|
||||||
#
|
# - Baseline_checks gathers baseline-type test suites execution
|
||||||
# The jobs should be specified in a file local to the project,
|
# - Baseline_publish, only available on master, allows to update baseline
|
||||||
# - .gitlab/jobs/${CI_MACHINE}.yml
|
# results
|
||||||
# or generated (see LLNL/Umpire for an example).
|
stages:
|
||||||
###############################################################################
|
- sub-pipelines
|
||||||
# MAP OF GITLAB CI
|
|
||||||
#######################
|
|
||||||
#~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
|
||||||
# File dependencies: direct, through jobs, through variables
|
|
||||||
#~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
|
||||||
# .gitlab-ci.yml
|
|
||||||
# ├── .build-and-test [job]
|
|
||||||
# │ ├── .gitlab/custom-jobs-and-variables.yml
|
|
||||||
# │ │ ├── .custom_job [job]
|
|
||||||
# │ │ ├── .reproducer_vars [job]
|
|
||||||
# │ │ ├── .report_job_success [job]
|
|
||||||
# │ │ │ └── .gitlab/scripts/report_build_and_test [script]
|
|
||||||
# │ │ │ ├── .gitlab/scripts/safe_create_rundir [script]
|
|
||||||
# │ │ │ └── .gitlab/scripts/git_try_to_push [script]
|
|
||||||
# │ │ ├── .report_job_failure [job]
|
|
||||||
# │ │ │ └── .gitlab/scripts/report_build_and_test [script]
|
|
||||||
# │ │ │ ├── .gitlab/scripts/safe_create_rundir [script]
|
|
||||||
# │ │ │ └── .gitlab/scripts/git_try_to_push [script]
|
|
||||||
# │ │ └── JOB_CMD [var]
|
|
||||||
# │ │ └── tests/gitlab/build_and_test [script]
|
|
||||||
# │ │ └── tests/gitlab/get_mfem_uberenv [script]
|
|
||||||
# │ ├── <radiuss-shared-ci>/pipelines/matrix.yml [conditional]
|
|
||||||
# │ │ ├── .on_matrix [job]
|
|
||||||
# │ │ ├── .matrix_reproducer_init [job]
|
|
||||||
# │ │ ├── .matrix_reproducer_vars [job]
|
|
||||||
# │ │ ├── .matrix_reproducer_job [job]
|
|
||||||
# │ │ ├── .matrix_job_command [job]
|
|
||||||
# │ │ └── .job_on_matrix [job]
|
|
||||||
# │ ├── <radiuss-shared-ci>/pipelines/dane.yml [conditional]
|
|
||||||
# │ │ ├── .on_dane [job]
|
|
||||||
# │ │ ├── .dane_reproducer_init [job]
|
|
||||||
# │ │ ├── .dane_reproducer_vars [job]
|
|
||||||
# │ │ ├── .dane_reproducer_job [job]
|
|
||||||
# │ │ ├── .dane_job_command [job]
|
|
||||||
# │ │ ├── .job_on_dane [job]
|
|
||||||
# │ │ ├── allocate_resources [job]
|
|
||||||
# │ │ └── release_resources [job]
|
|
||||||
# │ ├── <radiuss-shared-ci>/pipelines/tioga.yml [conditional]
|
|
||||||
# │ │ ├── .on_tioga [job]
|
|
||||||
# │ │ ├── .tioga_reproducer_init [job]
|
|
||||||
# │ │ ├── .tioga_reproducer_vars [job]
|
|
||||||
# │ │ ├── .tioga_reproducer_job [job]
|
|
||||||
# │ │ ├── .tioga_job_command [job]
|
|
||||||
# │ │ ├── .job_on_tioga [job]
|
|
||||||
# │ │ ├── allocate_resources [job]
|
|
||||||
# │ │ └── release_resources [job]
|
|
||||||
# │ ├── <artifact>/matrix-jobs.yml [conditional, from 'generate-job-lists']
|
|
||||||
# │ │ ├── .gitlab/jobs/matrix.yml
|
|
||||||
# │ │ │ ├── .matrix_reproducer_vars [job]
|
|
||||||
# │ │ │ ├── setup [job]
|
|
||||||
# │ │ │ │ └── ./tests/gitlab/build_and_test_setup [script]
|
|
||||||
# │ │ │ ├── opt_mpi_cuda_gcc [job]
|
|
||||||
# │ │ │ └── opt_mpi_cuda_hypre_cuda_gcc [job]
|
|
||||||
# │ │ └── .gitlab/jobs/matrix-reports.yml [used conditionally]
|
|
||||||
# │ │ ├── report_job_success
|
|
||||||
# │ │ └── report_job_failure
|
|
||||||
# │ ├── <artifact>/dane-jobs.yml [conditional, from 'generate-job-lists']
|
|
||||||
# │ │ ├── .gitlab/jobs/dane.yml
|
|
||||||
# │ │ │ ├── .dane_reproducer_vars [job]
|
|
||||||
# │ │ │ ├── setup [job]
|
|
||||||
# │ │ │ │ └── ./tests/gitlab/build_and_test_setup [script]
|
|
||||||
# │ │ │ ├── debug_ser_gcc_10 [job]
|
|
||||||
# │ │ │ ├── debug_par_gcc_10 [job]
|
|
||||||
# │ │ │ ├── opt_ser_gcc_10 [job]
|
|
||||||
# │ │ │ ├── opt_par_gcc_10 [job]
|
|
||||||
# │ │ │ ├── opt_par_gcc_10_sundials [job]
|
|
||||||
# │ │ │ ├── opt_par_gcc_10_petsc [job]
|
|
||||||
# │ │ │ └── opt_par_gcc_10_pumi [job]
|
|
||||||
# │ │ └── .gitlab/jobs/dane-reports.yml [used conditionally]
|
|
||||||
# │ │ ├── report_job_success
|
|
||||||
# │ │ └── report_job_failure
|
|
||||||
# │ └── <artifact>/tioga-jobs.yml [conditional, from 'generate-job-lists']
|
|
||||||
# │ ├── .gitlab/jobs/tioga.yml
|
|
||||||
# │ │ ├── .tioga_reproducer_vars [job]
|
|
||||||
# │ │ ├── setup [job]
|
|
||||||
# │ │ │ └── ./tests/gitlab/build_and_test_setup [script]
|
|
||||||
# │ │ └── cce_16_0_1 [job]
|
|
||||||
# │ └── .gitlab/jobs/tioga-reports.yml [used conditionally]
|
|
||||||
# │ ├── report_job_success
|
|
||||||
# │ └── report_job_failure
|
|
||||||
# └── .gitlab/subscribed-pipelines.yml
|
|
||||||
# ├── .machine-check [job]
|
|
||||||
# ├── generate-job-lists [job]
|
|
||||||
# ├── dane-up-check [job]
|
|
||||||
# ├── dane-build-and-test [job]
|
|
||||||
# ├── dane-baseline [job]
|
|
||||||
# │ └── .gitlab/dane-baseline.yml
|
|
||||||
# │ ├── .on_dane [job]
|
|
||||||
# │ ├── baselinecheck_mfem_intel_dane [job]
|
|
||||||
# │ │ └── .gitlab/scripts/baseline [script]
|
|
||||||
# │ ├── cleanup [job]
|
|
||||||
# │ ├── report_baseline [job]
|
|
||||||
# │ │ ├── .gitlab/scripts/safe_create_rundir [script]
|
|
||||||
# │ │ └── .gitlab/scripts/git_try_to_push [script]
|
|
||||||
# │ ├── baselinepublish_mfem_dane [job]
|
|
||||||
# │ │ └── .gitlab/scripts/rebaseline [script]
|
|
||||||
# │ ├── .gitlab/custom-jobs-and-variables.yml
|
|
||||||
# │ │ └── <same as above: see .gitlab-ci.yml/.build-and-test>
|
|
||||||
# │ └── .gitlab/configs/setup-baseline.yml
|
|
||||||
# │ └── setup_baseline [job]
|
|
||||||
# ├── tioga-up-check [job]
|
|
||||||
# ├── tioga-build-and-test [job]
|
|
||||||
# ├── matrix-up-check [job]
|
|
||||||
# └── matrix-build-and-test [job]
|
|
||||||
#
|
|
||||||
#~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
|
||||||
# File tree hierarchy with file contents highlights
|
|
||||||
#~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
|
||||||
# In addition to the files in the MFEM repo, the Gitlab CI uses files from the
|
|
||||||
# radiuss/radiuss-shared-ci project, see below, after the <mfem-root> tree.
|
|
||||||
#
|
|
||||||
# <mfem root>
|
|
||||||
# ├── .gitlab-ci.yml [this file]
|
|
||||||
# │ ├── <jobs>
|
|
||||||
# │ │ └── .build-and-test
|
|
||||||
# │ ├── <included files>
|
|
||||||
# │ │ ├── .gitlab/subscribed-pipelines.yml
|
|
||||||
# │ │ ├── .gitlab/custom-jobs-and-variables.yml [by ".build-and-test"]
|
|
||||||
# │ │ ├── <artifact> [by ".build-and-test"]
|
|
||||||
# │ │ │ ├── artifact: '${CI_MACHINE}-jobs.yml'
|
|
||||||
# │ │ │ └── job: 'generate-job-lists'
|
|
||||||
# │ │ └── <external> [by ".build-and-test"]
|
|
||||||
# │ │ ├── project: 'radiuss/radiuss-shared-ci'
|
|
||||||
# │ │ ├── ref: 'v2025.09.1'
|
|
||||||
# │ │ └── file: 'pipelines/${CI_MACHINE}.yml'
|
|
||||||
# │ └── <defined variables>
|
|
||||||
# │ ├── CUSTOM_CI_BUILDS_DIR
|
|
||||||
# │ ├── USER_CI_TOP_DIR
|
|
||||||
# │ ├── SHARED_REPOS_DIR
|
|
||||||
# │ ├── AUTOTEST_ROOT
|
|
||||||
# │ ├── MFEM_DATA_DIR
|
|
||||||
# │ ├── AUTOTEST
|
|
||||||
# │ ├── AUTOTEST_COMMIT
|
|
||||||
# │ ├── REBASELINE
|
|
||||||
# │ ├── GITHUB_PROJECT_NAME
|
|
||||||
# │ └── GITHUB_PROJECT_ORG
|
|
||||||
# ├── .gitlab
|
|
||||||
# │ ├── configs
|
|
||||||
# │ │ └── setup-baseline.yml
|
|
||||||
# │ │ ├── <jobs>
|
|
||||||
# │ │ │ └── setup_baseline
|
|
||||||
# │ │ └── <used variables>
|
|
||||||
# │ │ ├── MACHINE_NAME
|
|
||||||
# │ │ ├── REBASELINE
|
|
||||||
# │ │ ├── AUTOTEST
|
|
||||||
# │ │ ├── AUTOTEST_COMMIT
|
|
||||||
# │ │ ├── BUILD_ROOT
|
|
||||||
# │ │ ├── TPLS_REPO
|
|
||||||
# │ │ ├── TESTS_REPO
|
|
||||||
# │ │ ├── AUTOTEST_ROOT
|
|
||||||
# │ │ └── AUTOTEST_REPO
|
|
||||||
# │ ├── jobs
|
|
||||||
# │ │ ├── matrix-reports.yml
|
|
||||||
# │ │ │ ├── <jobs>
|
|
||||||
# │ │ │ │ ├── report_job_success
|
|
||||||
# │ │ │ │ └── report_job_failure
|
|
||||||
# │ │ │ └── <used jobs>
|
|
||||||
# │ │ │ ├── .on_matrix
|
|
||||||
# │ │ │ ├── .report_job_success
|
|
||||||
# │ │ │ └── .report_job_failure
|
|
||||||
# │ │ ├── matrix.yml
|
|
||||||
# │ │ │ ├── <jobs>
|
|
||||||
# │ │ │ │ ├── .matrix_reproducer_vars
|
|
||||||
# │ │ │ │ ├── setup
|
|
||||||
# │ │ │ │ ├── opt_mpi_cuda_gcc
|
|
||||||
# │ │ │ │ └── opt_mpi_cuda_hypre_cuda_gcc
|
|
||||||
# │ │ │ ├── <used jobs>
|
|
||||||
# │ │ │ │ ├── .reproducer_vars
|
|
||||||
# │ │ │ │ ├── .on_matrix
|
|
||||||
# │ │ │ │ └── .job_on_matrix
|
|
||||||
# │ │ │ ├── <included and used files>
|
|
||||||
# │ │ │ │ └── tests/gitlab/build_and_test_setup [by "setup"]
|
|
||||||
# │ │ │ └── <defined variables>
|
|
||||||
# │ │ │ └── SPEC
|
|
||||||
# │ │ ├── dane-reports.yml
|
|
||||||
# │ │ │ ├── <jobs>
|
|
||||||
# │ │ │ │ ├── report_job_success
|
|
||||||
# │ │ │ │ └── report_job_failure
|
|
||||||
# │ │ │ └── <used jobs>
|
|
||||||
# │ │ │ ├── .on_dane
|
|
||||||
# │ │ │ ├── .report_job_success
|
|
||||||
# │ │ │ └── .report_job_failure
|
|
||||||
# │ │ ├── dane.yml
|
|
||||||
# │ │ │ ├── <jobs>
|
|
||||||
# │ │ │ │ ├── .dane_reproducer_vars
|
|
||||||
# │ │ │ │ ├── setup
|
|
||||||
# │ │ │ │ ├── debug_ser_gcc_10
|
|
||||||
# │ │ │ │ ├── debug_par_gcc_10
|
|
||||||
# │ │ │ │ ├── opt_ser_gcc_10
|
|
||||||
# │ │ │ │ ├── opt_par_gcc_10
|
|
||||||
# │ │ │ │ ├── opt_par_gcc_10_sundials
|
|
||||||
# │ │ │ │ ├── opt_par_gcc_10_petsc
|
|
||||||
# │ │ │ │ └── opt_par_gcc_10_pumi
|
|
||||||
# │ │ │ ├── <used jobs>
|
|
||||||
# │ │ │ │ ├── .reproducer_vars
|
|
||||||
# │ │ │ │ ├── .on_dane
|
|
||||||
# │ │ │ │ └── .job_on_dane
|
|
||||||
# │ │ │ ├── <included and used files>
|
|
||||||
# │ │ │ │ └── tests/gitlab/build_and_test_setup [by "setup"]
|
|
||||||
# │ │ │ └── <defined variables>
|
|
||||||
# │ │ │ ├── SPEC
|
|
||||||
# │ │ │ └── THREADS
|
|
||||||
# │ │ ├── tioga-reports.yml
|
|
||||||
# │ │ │ ├── <jobs>
|
|
||||||
# │ │ │ │ ├── report_job_success
|
|
||||||
# │ │ │ │ └── report_job_failure
|
|
||||||
# │ │ │ └── <used jobs>
|
|
||||||
# │ │ │ ├── .on_tioga
|
|
||||||
# │ │ │ ├── .report_job_success
|
|
||||||
# │ │ │ └── .report_job_failure
|
|
||||||
# │ │ └── tioga.yml
|
|
||||||
# │ │ ├── <jobs>
|
|
||||||
# │ │ │ ├── .tioga_reproducer_vars
|
|
||||||
# │ │ │ ├── setup
|
|
||||||
# │ │ │ └── opt_mpi_rocm_hypre_rocm
|
|
||||||
# │ │ ├── <used jobs>
|
|
||||||
# │ │ │ ├── .reproducer_vars
|
|
||||||
# │ │ │ ├── .on_tioga
|
|
||||||
# │ │ │ └── .job_on_tioga
|
|
||||||
# │ │ ├── <included and used files>
|
|
||||||
# │ │ │ └── tests/gitlab/build_and_test_setup [by "setup"]
|
|
||||||
# │ │ └── <defined variables>
|
|
||||||
# │ │ ├── SPEC
|
|
||||||
# │ │ └── THREADS
|
|
||||||
# │ ├── scripts
|
|
||||||
# │ │ ├── baseline
|
|
||||||
# │ │ │ └── <used variables>
|
|
||||||
# │ │ │ ├── BASELINE_TEST
|
|
||||||
# │ │ │ ├── SYS_TYPE
|
|
||||||
# │ │ │ ├── MACHINE_NAME
|
|
||||||
# │ │ │ ├── CI_PROJECT_DIR
|
|
||||||
# │ │ │ ├── ARTIFACTS_DIR
|
|
||||||
# │ │ │ ├── BUILD_ROOT
|
|
||||||
# │ │ │ └── TPLS_DIR
|
|
||||||
# │ │ ├── git_try_to_push
|
|
||||||
# │ │ ├── rebaseline
|
|
||||||
# │ │ │ └── <used variables>
|
|
||||||
# │ │ │ ├── CI_PROJECT_DIR
|
|
||||||
# │ │ │ ├── ARTIFACTS_DIR
|
|
||||||
# │ │ │ ├── SYS_TYPE
|
|
||||||
# │ │ │ ├── BUILD_ROOT
|
|
||||||
# │ │ │ ├── MACHINE_NAME
|
|
||||||
# │ │ │ └── CI_PIPELINE_ID
|
|
||||||
# │ │ ├── report_build_and_test
|
|
||||||
# │ │ │ ├── <used files>
|
|
||||||
# │ │ │ │ ├── .gitlab/scripts/safe_create_rundir
|
|
||||||
# │ │ │ │ └── .gitlab/scripts/git_try_to_push
|
|
||||||
# │ │ │ └── <used variables>
|
|
||||||
# │ │ │ ├── AUTOTEST_ROOT
|
|
||||||
# │ │ │ ├── CI_COMMIT_REF_SLUG
|
|
||||||
# │ │ │ ├── CI_PROJECT_DIR
|
|
||||||
# │ │ │ ├── CI_PIPELINE_URL
|
|
||||||
# │ │ │ ├── AUTOTEST_COMMIT
|
|
||||||
# │ │ │ └── CI_MACHINE
|
|
||||||
# │ │ └── safe_create_rundir
|
|
||||||
# │ ├── custom-jobs-and-variables.yml
|
|
||||||
# │ │ ├── <jobs>
|
|
||||||
# │ │ │ ├── .custom_job
|
|
||||||
# │ │ │ ├── .reproducer_vars
|
|
||||||
# │ │ │ ├── .report_job_success
|
|
||||||
# │ │ │ └── .report_job_failure
|
|
||||||
# │ │ ├── <used files>
|
|
||||||
# │ │ │ ├── tests/gitlab/build_and_test [in JOB_CMD]
|
|
||||||
# │ │ │ └── .gitlab/scripts/report_build_and_test [by .report_job_*]
|
|
||||||
# │ │ ├── <defined variables>
|
|
||||||
# │ │ │ ├── JOB_CMD
|
|
||||||
# │ │ │ ├── BUILD_ROOT
|
|
||||||
# │ │ │ ├── ALLOC_NAME
|
|
||||||
# │ │ │ ├── TPLS_REPO
|
|
||||||
# │ │ │ ├── TESTS_REPO
|
|
||||||
# │ │ │ ├── AUTOTEST_REPO
|
|
||||||
# │ │ │ ├── MFEM_DATA_REPO
|
|
||||||
# │ │ │ ├── ARTIFACTS_DIR: artifacts
|
|
||||||
# │ │ │ ├── SLURM_OVERLAP: 1
|
|
||||||
# │ │ │ ├── DANE_SHARED_ALLOC
|
|
||||||
# │ │ │ ├── DANE_JOB_ALLOC
|
|
||||||
# │ │ │ ├── TIOGA_SHARED_ALLOC
|
|
||||||
# │ │ │ ├── TIOGA_JOB_ALLOC
|
|
||||||
# │ │ │ └── MATRIX_JOB_ALLOC
|
|
||||||
# │ │ └── <used variables>
|
|
||||||
# │ │ ├── SPEC
|
|
||||||
# │ │ ├── BUILD_ROOT
|
|
||||||
# │ │ └── ...
|
|
||||||
# │ ├── dane-baseline.yml
|
|
||||||
# │ │ ├── <jobs>
|
|
||||||
# │ │ │ ├── .on_dane
|
|
||||||
# │ │ │ ├── baselinecheck_mfem_intel_dane
|
|
||||||
# │ │ │ ├── cleanup
|
|
||||||
# │ │ │ ├── report_baseline
|
|
||||||
# │ │ │ └── baselinepublish_mfem_dane
|
|
||||||
# │ │ ├── <included and used files>
|
|
||||||
# │ │ │ ├── .gitlab/custom-jobs-and-variables.yml
|
|
||||||
# │ │ │ ├── .gitlab/configs/setup-baseline.yml
|
|
||||||
# │ │ │ ├── .gitlab/scripts/rebaseline
|
|
||||||
# │ │ │ ├── .gitlab/scripts/baseline
|
|
||||||
# │ │ │ └── .gitlab/scripts/git_try_to_push
|
|
||||||
# │ │ ├── <defined variables>
|
|
||||||
# │ │ │ ├── BASELINE_TEST: baseline
|
|
||||||
# │ │ │ ├── MACHINE_NAME: dane
|
|
||||||
# │ │ │ ├── TPLS_DIR
|
|
||||||
# │ │ │ └── export MFEM_TEST_NP
|
|
||||||
# │ │ └── <used variables>
|
|
||||||
# │ │ ├── ON_DANE
|
|
||||||
# │ │ ├── AUTOTEST [defined by .gitlab-ci.yml]
|
|
||||||
# │ │ ├── BUILD_ROOT [defined by custom-jobs-and-variables.yml]
|
|
||||||
# │ │ ├── TPLS_DIR [defined by this file]
|
|
||||||
# │ │ ├── ARTIFACTS_DIR [defined by custom-jobs-and-variables.yml]
|
|
||||||
# │ │ ├── MACHINE_NAME [defined by this file]
|
|
||||||
# │ │ ├── AUTOTEST_COMMIT [defined by .gitlab-ci.yml]
|
|
||||||
# │ │ ├── AUTOTEST_ROOT [defined by .gitlab-ci.yml]
|
|
||||||
# │ │ ├── BASELINE_TEST [defined by this file]
|
|
||||||
# │ │ └── REBASELINE [defined by .gitlab-ci.yml]
|
|
||||||
# │ └── subscribed-pipelines.yml
|
|
||||||
# │ ├── <jobs>
|
|
||||||
# │ │ ├── .machine-check
|
|
||||||
# │ │ ├── generate-job-lists
|
|
||||||
# │ │ ├── dane-up-check
|
|
||||||
# │ │ ├── dane-build-and-test
|
|
||||||
# │ │ ├── dane-baseline
|
|
||||||
# │ │ ├── tioga-up-check
|
|
||||||
# │ │ ├── tioga-build-and-test
|
|
||||||
# │ │ ├── matrix-up-check
|
|
||||||
# │ │ └── matrix-build-and-test
|
|
||||||
# │ ├── <used jobs>
|
|
||||||
# │ │ └── .build-and-test [from ".gitlab-ci.yml"]
|
|
||||||
# │ ├── <included files>
|
|
||||||
# │ │ └── .gitlab/dane-baseline.yml [by "dane-baseline"]
|
|
||||||
# │ └── <used variables>
|
|
||||||
# │ ├── GITHUB_PROJECT_ORG
|
|
||||||
# │ ├── GITHUB_PROJECT_NAME
|
|
||||||
# │ ├── AUTOTEST
|
|
||||||
# │ ├── AUTOTEST_COMMIT
|
|
||||||
# │ └── REBASELINE
|
|
||||||
# └── tests
|
|
||||||
# ├── gitlab
|
|
||||||
# │ ├── build_and_test
|
|
||||||
# │ │ ├── <builds and tests a given MFEM spec with uberenv>
|
|
||||||
# │ │ ├── <used files>
|
|
||||||
# │ │ │ ├── tests/uberenv/uberenv.py [deps mode, cloned]
|
|
||||||
# │ │ │ └── tests/gitlab/get_mfem_uberenv [deps mode]
|
|
||||||
# │ │ └── <used variables>
|
|
||||||
# │ │ ├── SYS_TYPE
|
|
||||||
# │ │ ├── THREADS [num. parallel jobs to build MFEM]
|
|
||||||
# │ │ ├── MODULE_LIST [modules to load]
|
|
||||||
# │ │ ├── CI_JOB_ID
|
|
||||||
# │ │ ├── USE_DEV_SHM
|
|
||||||
# │ │ ├── SPACK_DEBUG
|
|
||||||
# │ │ ├── DEBUG_MODE
|
|
||||||
# │ │ ├── REGISTRY_TOKEN
|
|
||||||
# │ │ ├── CI_REGISTRY_USER (defined by Gitlab)
|
|
||||||
# │ │ ├── USER
|
|
||||||
# │ │ ├── CI_REGISTRY_IMAGE (defined by Gitlab)
|
|
||||||
# │ │ └── CI_JOB_TOKEN (defined by Gitlab)
|
|
||||||
# │ ├── build_and_test_setup
|
|
||||||
# │ │ ├── <updates MFEM_DATA_REPO and AUTOTEST_REPO using locks>
|
|
||||||
# │ │ └── <used variables>
|
|
||||||
# │ │ ├── MFEM_DATA_REPO
|
|
||||||
# │ │ ├── SHARED_REPOS_DIR
|
|
||||||
# │ │ ├── AUTOTEST_REPO
|
|
||||||
# │ │ └── AUTOTEST_ROOT
|
|
||||||
# │ └── get_mfem_uberenv
|
|
||||||
# │ ├── <github.com/mfem/mfem-uberenv.git -> tests/uberenv>
|
|
||||||
# │ └── <defines the uberenv hash to use>
|
|
||||||
# └── uberenv [cloned by tests/gitlab/get_mfem_uberenv]
|
|
||||||
# └── uberenv.py
|
|
||||||
#
|
|
||||||
# <root of radiuss/radiuss-shared-ci, ref: 'v2025.09.1'>
|
|
||||||
# └── pipelines
|
|
||||||
# ├── matrix.yml
|
|
||||||
# │ ├── <jobs>
|
|
||||||
# │ │ ├── .on_matrix
|
|
||||||
# │ │ ├── .matrix_reproducer_init
|
|
||||||
# │ │ ├── .matrix_reproducer_vars
|
|
||||||
# │ │ ├── .matrix_reproducer_job
|
|
||||||
# │ │ ├── .matrix_job_command
|
|
||||||
# │ │ └── .job_on_matrix
|
|
||||||
# │ ├── <used jobs>
|
|
||||||
# │ │ └── .custom_job [from .gitlab/custom-jobs-and-variables.yml]
|
|
||||||
# │ └── <used variables>
|
|
||||||
# │ ├── ON_MATRIX
|
|
||||||
# │ ├── ADVANCED_JOB
|
|
||||||
# │ ├── ALL_TARGETS
|
|
||||||
# │ ├── SYS_TYPE
|
|
||||||
# │ ├── LLNL_SERVICE_USER
|
|
||||||
# │ ├── USER
|
|
||||||
# │ ├── GITHUB_PROJECT_NAME
|
|
||||||
# │ ├── GITHUB_PROJECT_ORG
|
|
||||||
# │ ├── MATRIX_JOB_ALLOC
|
|
||||||
# │ └── JOB_CMD
|
|
||||||
# ├── dane.yml
|
|
||||||
# │ ├── <jobs>
|
|
||||||
# │ │ ├── .on_dane
|
|
||||||
# │ │ ├── .dane_reproducer_init
|
|
||||||
# │ │ ├── .dane_reproducer_vars
|
|
||||||
# │ │ ├── .dane_reproducer_job
|
|
||||||
# │ │ ├── .dane_job_command
|
|
||||||
# │ │ ├── .job_on_dane
|
|
||||||
# │ │ ├── allocate_resources
|
|
||||||
# │ │ └── release_resources
|
|
||||||
# │ ├── <used jobs>
|
|
||||||
# │ │ └── .custom_job [from .gitlab/custom-jobs-and-variables.yml]
|
|
||||||
# │ ├── <defined variables>
|
|
||||||
# │ │ └── export JOBID
|
|
||||||
# │ └── <used variables>
|
|
||||||
# │ ├── ON_DANE
|
|
||||||
# │ ├── ADVANCED_JOB
|
|
||||||
# │ ├── ALL_TARGETS
|
|
||||||
# │ ├── SYS_TYPE
|
|
||||||
# │ ├── LLNL_SERVICE_USER
|
|
||||||
# │ ├── USER
|
|
||||||
# │ ├── GITHUB_PROJECT_NAME
|
|
||||||
# │ ├── GITHUB_PROJECT_ORG
|
|
||||||
# │ ├── DANE_JOB_ALLOC
|
|
||||||
# │ ├── JOB_CMD
|
|
||||||
# │ ├── JOBID
|
|
||||||
# │ ├── ALLOC_NAME
|
|
||||||
# │ └── DANE_SHARED_ALLOC
|
|
||||||
# └── tioga.yml
|
|
||||||
# ├── <jobs>
|
|
||||||
# │ ├── .on_tioga
|
|
||||||
# │ ├── .tioga_reproducer_init
|
|
||||||
# │ ├── .tioga_reproducer_vars
|
|
||||||
# │ ├── .tioga_reproducer_job
|
|
||||||
# │ ├── .tioga_job_command
|
|
||||||
# │ ├── .job_on_tioga
|
|
||||||
# │ ├── allocate_resources
|
|
||||||
# │ └── release_resources
|
|
||||||
# ├── <used jobs>
|
|
||||||
# │ └── .custom_job [from .gitlab/custom-jobs-and-variables.yml]
|
|
||||||
# ├── <defined variables>
|
|
||||||
# │ └── PROXY
|
|
||||||
# └── <used variables>
|
|
||||||
# ├── ON_TIOGA
|
|
||||||
# ├── ADVANCED_JOB
|
|
||||||
# ├── ALL_TARGETS
|
|
||||||
# ├── SYS_TYPE
|
|
||||||
# ├── LLNL_SERVICE_USER
|
|
||||||
# ├── USER
|
|
||||||
# ├── GITHUB_PROJECT_NAME
|
|
||||||
# ├── GITHUB_PROJECT_ORG
|
|
||||||
# ├── TIOGA_JOB_ALLOC
|
|
||||||
# ├── JOB_CMD
|
|
||||||
# ├── PROXY
|
|
||||||
# ├── ALLOC_NAME
|
|
||||||
# └── TIOGA_SHARED_ALLOC
|
|
||||||
|
|
||||||
###############################################################################
|
|
||||||
# We define the following GitLab pipeline variables:
|
|
||||||
variables:
|
variables:
|
||||||
##### LC GITLAB CONFIGURATION
|
|
||||||
CUSTOM_CI_BUILDS_DIR: "/usr/workspace/mfem/gitlab-runner"
|
CUSTOM_CI_BUILDS_DIR: "/usr/workspace/mfem/gitlab-runner"
|
||||||
|
|
||||||
##### PROJECT VARIABLES
|
|
||||||
USER_CI_TOP_DIR: "${CUSTOM_CI_BUILDS_DIR}/${GITLAB_USER_LOGIN}"
|
USER_CI_TOP_DIR: "${CUSTOM_CI_BUILDS_DIR}/${GITLAB_USER_LOGIN}"
|
||||||
SHARED_REPOS_DIR: "${USER_CI_TOP_DIR}/repos"
|
SHARED_REPOS_DIR: "${USER_CI_TOP_DIR}/repos"
|
||||||
AUTOTEST_ROOT: "${SHARED_REPOS_DIR}"
|
AUTOTEST_ROOT: "${SHARED_REPOS_DIR}"
|
||||||
|
# MFEM_DATA_DIR is setup in '.gitlab/configs/setup-build-and-test.yml' and
|
||||||
|
# used in '.gitlab/configs/<machine>-config.yml':
|
||||||
MFEM_DATA_DIR: "${SHARED_REPOS_DIR}/mfem-data"
|
MFEM_DATA_DIR: "${SHARED_REPOS_DIR}/mfem-data"
|
||||||
# AUTOTEST: enable (ON/YES) or disable (any other value) test reporting. See
|
|
||||||
# also AUTOTEST_COMMIT.
|
|
||||||
AUTOTEST: "OFF"
|
|
||||||
# AUTOTEST_COMMIT: used only when AUTOTEST is set to ON/YES.
|
|
||||||
# * If AUTOTEST_COMMIT is set to ON/YES, reporting jobs will commit their
|
|
||||||
# files to the MFEM/autotest repo.
|
|
||||||
# * If AUTOTEST_COMMIT is NOT set to ON/YES, reporting jobs will NOT commit
|
|
||||||
# their files to the MFEM/autotest repo. Instead they will just show the
|
|
||||||
# contents of the report files and remove them.
|
|
||||||
AUTOTEST_COMMIT: "ON"
|
|
||||||
# REBASELINE:
|
|
||||||
# Defines the default choice for updating the saved baseline results. By default
|
# Defines the default choice for updating the saved baseline results. By default
|
||||||
# the baseline can only be updated from the master branch. This variable offers
|
# the baseline can only be updated from the master branch. This variable offers
|
||||||
# the option to manually ask for rebaselining from another branch if necessary.
|
# the option to manually ask for rebaselining from another branch if necessary.
|
||||||
REBASELINE: "OFF"
|
REBASELINE: "NO"
|
||||||
|
AUTOTEST: "NO"
|
||||||
|
# AUTOTEST_COMMIT: used only when AUTOTEST is set to YES.
|
||||||
|
# * If AUTOTEST_COMMIT is NOT set to NO, reporting jobs will commit their
|
||||||
|
# files to the MFEM/autotest repo.
|
||||||
|
# * If AUTOTEST_COMMIT is set to NO, reporting jobs will NOT commit their
|
||||||
|
# files to the MFEM/autotest repo. Instead they will just show the contents
|
||||||
|
# of the report files and remove them.
|
||||||
|
AUTOTEST_COMMIT: "YES"
|
||||||
|
|
||||||
##### SHARED_CI CONFIGURATION
|
# Trigger subpipelines:
|
||||||
# Required information about GitHub repository
|
quartz-build-and-test:
|
||||||
GITHUB_PROJECT_NAME: "mfem"
|
stage: sub-pipelines
|
||||||
GITHUB_PROJECT_ORG: "MFEM"
|
|
||||||
# Override the pattern describing branches that will skip the "draft PR filter
|
|
||||||
# test". Add protected branches here. See default value in
|
|
||||||
# preliminary-ignore-draft-pr.yml.
|
|
||||||
# ALWAYS_RUN_PATTERN: ""
|
|
||||||
|
|
||||||
###############################################################################
|
|
||||||
##### High level stages
|
|
||||||
# We organize the test-pipelines stage with sub-pipelines. Each sub-pipeline
|
|
||||||
# corresponds to a test batch on a given machine.
|
|
||||||
stages:
|
|
||||||
- prerequisites
|
|
||||||
- test-pipelines
|
|
||||||
|
|
||||||
###############################################################################
|
|
||||||
# Template for jobs triggering a build-and-test sub-pipeline:
|
|
||||||
.build-and-test:
|
|
||||||
stage: test-pipelines
|
|
||||||
variables:
|
variables:
|
||||||
# Explicitly pass down values that are not always propagated to child
|
# Explicitly pass down values that we want to be able to set when triggering
|
||||||
# pipelines, e.g. when a variable is set in the "Settings -> CI" web
|
# pipelines manually or using scheduling
|
||||||
# interface (project variables).
|
|
||||||
# Note: in some cases, this does not work as expected, e.g. when the
|
|
||||||
# variable is not re-defined in the web interface; in such cases, the child
|
|
||||||
# pipeline gets a definition like '${AUTOTEST}', i.e. it behaves as if
|
|
||||||
# AUTOTEST is undefined, even though there is a default value in
|
|
||||||
# .gitlab-ci.yml.
|
|
||||||
AUTOTEST: "${AUTOTEST}"
|
AUTOTEST: "${AUTOTEST}"
|
||||||
AUTOTEST_COMMIT: "${AUTOTEST_COMMIT}"
|
AUTOTEST_COMMIT: "${AUTOTEST_COMMIT}"
|
||||||
trigger:
|
trigger:
|
||||||
include:
|
include: .gitlab/quartz-build-and-test.yml
|
||||||
- local: '.gitlab/custom-jobs-and-variables.yml'
|
|
||||||
- project: 'radiuss/radiuss-shared-ci'
|
|
||||||
ref: 'v2025.09.1'
|
|
||||||
file: 'pipelines/${CI_MACHINE}.yml'
|
|
||||||
- artifact: '${CI_MACHINE}-jobs.yml'
|
|
||||||
job: 'generate-job-lists'
|
|
||||||
strategy: depend
|
strategy: depend
|
||||||
forward:
|
|
||||||
pipeline_variables: true
|
|
||||||
|
|
||||||
###############################################################################
|
quartz-baseline:
|
||||||
include:
|
stage: sub-pipelines
|
||||||
# Sets ID tokens for every job using `default:`
|
variables:
|
||||||
- project: 'lc-templates/id_tokens'
|
# Explicitly pass down values that we want to be able to set when triggering
|
||||||
file: 'id_tokens.yml'
|
# pipelines manually or using scheduling
|
||||||
# [Optional] checks preliminary to running the actual CI test
|
REBASELINE: "${REBASELINE}"
|
||||||
#- project: 'radiuss/radiuss-shared-ci'
|
AUTOTEST: "${AUTOTEST}"
|
||||||
# ref: 'v2025.09.1'
|
AUTOTEST_COMMIT: "${AUTOTEST_COMMIT}"
|
||||||
# file: 'preliminary-ignore-draft-pr.yml'
|
trigger:
|
||||||
# pipelines subscribed by the project
|
include: .gitlab/quartz-baseline.yml
|
||||||
- local: '.gitlab/subscribed-pipelines.yml'
|
strategy: depend
|
||||||
|
|
||||||
|
lassen-build-and-test:
|
||||||
|
stage: sub-pipelines
|
||||||
|
variables:
|
||||||
|
# Explicitly pass down values that we want to be able to set when triggering
|
||||||
|
# pipelines manually or using scheduling
|
||||||
|
AUTOTEST: "${AUTOTEST}"
|
||||||
|
AUTOTEST_COMMIT: "${AUTOTEST_COMMIT}"
|
||||||
|
trigger:
|
||||||
|
include: .gitlab/lassen-build-and-test.yml
|
||||||
|
strategy: depend
|
||||||
|
|
||||||
|
corona-build-and-test:
|
||||||
|
stage: sub-pipelines
|
||||||
|
variables:
|
||||||
|
# Explicitly pass down values that we want to be able to set when triggering
|
||||||
|
# pipelines manually or using scheduling
|
||||||
|
AUTOTEST: "${AUTOTEST}"
|
||||||
|
AUTOTEST_COMMIT: "${AUTOTEST_COMMIT}"
|
||||||
|
trigger:
|
||||||
|
include: .gitlab/corona-build-and-test.yml
|
||||||
|
strategy: depend
|
||||||
|
|||||||
+14
-36
@@ -15,18 +15,18 @@ and nightly testing on GitLab.
|
|||||||
|
|
||||||
## Top level
|
## Top level
|
||||||
|
|
||||||
The root configuration file is `.gitlab-ci.yml` at the root of MFEM repo. This
|
The root configuration file is `.gitlab-ci.yml` at the root of MFEM repo.
|
||||||
file only defines three stages, a prerequisites one, and two main stages in
|
This file only defines one stage, in which we trigger several
|
||||||
which we trigger several sub-pipelines.
|
sub-pipelines.
|
||||||
|
|
||||||
We use sub-pipelines to isolate the test for one combination of `machine`
|
We use sub-pipelines to isolate the test for one combination of `machine`
|
||||||
and `test type`.
|
and `test type`.
|
||||||
|
|
||||||
Machines typically include:
|
Machines typically include:
|
||||||
|
|
||||||
* Dane: Intel Sapphire Rapids
|
* Quartz: Intel bi-socket x86
|
||||||
* Matrix: Intel Sapphire Rapids + Nvidia H100 GPU
|
* Lassen: Power9 + Nvidia GPU
|
||||||
* Tioga: AMD MI250X GPU
|
* Corona: AMD GPU
|
||||||
|
|
||||||
Test types include:
|
Test types include:
|
||||||
|
|
||||||
@@ -39,31 +39,9 @@ altering the scheduling, execution and displaying of the others.
|
|||||||
|
|
||||||
## Sub-pipelines
|
## Sub-pipelines
|
||||||
|
|
||||||
### build-and-test
|
Each file is this directory is the root configuration file for one
|
||||||
|
sub-pipeline. The naming reflects the corresponding couple (`machine`,
|
||||||
The build-and-test sub-pipelines leverage RADIUSS Shared CI to share most of
|
`test_type`).
|
||||||
the CI implementation. RADIUSS Shared CI provides a shared CI infrastructure
|
|
||||||
vetted on most LC systems of interest and efficiently leveraging each machine
|
|
||||||
scheduler to increase CI throughput. The maintenance of RADIUSS Shared CI is
|
|
||||||
shared among several RADIUSS projects.
|
|
||||||
|
|
||||||
Jobs for the build-and-test sub-pipelines are defined in the jobs directory.
|
|
||||||
Because build-and-test jobs leverage Uberenv and Spack to build the
|
|
||||||
dependencies automatically, the jobs essentially consists in a `spack spec`
|
|
||||||
defined in the jobs files, and some scheduling parameters defined in the
|
|
||||||
`.gitlab/custom-jobs-and-variables.yml` file.
|
|
||||||
|
|
||||||
Build-and-test jobs all run the `tests/gitlab/build_and_test` script.
|
|
||||||
|
|
||||||
The build-and-test pipelines are controlled by the
|
|
||||||
`.gitlab/subscribed-pipelines.yml` which defines which machines to run on and
|
|
||||||
implements additional features like machine availability check, and job list
|
|
||||||
generation.
|
|
||||||
|
|
||||||
### baseline
|
|
||||||
|
|
||||||
Baseline sub-pipelines are described by files with names reflecting the
|
|
||||||
machine it runs on, e.g. `dane-baseline`.
|
|
||||||
|
|
||||||
Those files define the *stages* and the *jobs* for the sub-pipeline. They
|
Those files define the *stages* and the *jobs* for the sub-pipeline. They
|
||||||
also contain any configuration that cannot be shared. For the most part
|
also contain any configuration that cannot be shared. For the most part
|
||||||
@@ -85,11 +63,11 @@ usage function. This should be improved.
|
|||||||
|
|
||||||
# More testing
|
# More testing
|
||||||
|
|
||||||
## Adding a new target to a build-and-test pipeline
|
## Adding a new target to a build_and_test pipeline
|
||||||
|
|
||||||
`build-and-test` pipelines rely on Spack to install dependencies. Spack is
|
`build_and_test` pipelines rely on Spack to install dependencies. Spack is
|
||||||
driven by Uberenv which helps freezing Spack configuration: the goal being to
|
driven by Uberenv which helps freezing Spack configuration: the goal being to
|
||||||
point to a specific commit in Spack and isolate its configuration so that it is
|
point to specific commit in Spack and isolate its configuration so that it is
|
||||||
not influenced by the user environment. More documentation about this can be
|
not influenced by the user environment. More documentation about this can be
|
||||||
found in `tests/gitlab`.
|
found in `tests/gitlab`.
|
||||||
|
|
||||||
@@ -98,13 +76,13 @@ with a spack spec of MFEM, within the limits permitted by the MFEM spack
|
|||||||
package.
|
package.
|
||||||
|
|
||||||
In any build-and-test sub-pipeline a job basically consists in defining the
|
In any build-and-test sub-pipeline a job basically consists in defining the
|
||||||
spack spec to use. Adding a job on Dane for example resumes to:
|
spack spec to use. Adding a job on quartz for example resumes to:
|
||||||
|
|
||||||
```yaml
|
```yaml
|
||||||
<job_name>:
|
<job_name>:
|
||||||
variables:
|
variables:
|
||||||
SPEC: "<spack_spec>"
|
SPEC: "<spack_spec>"
|
||||||
extends: .job_on_dane
|
extends: .build_and_test_on_quartz
|
||||||
```
|
```
|
||||||
|
|
||||||
The remaining and non trivial work is to make sure this spec is working. To
|
The remaining and non trivial work is to make sure this spec is working. To
|
||||||
|
|||||||
@@ -0,0 +1,36 @@
|
|||||||
|
# Copyright (c) 2010-2022, Lawrence Livermore National Security, LLC. Produced
|
||||||
|
# at the Lawrence Livermore National Laboratory. All Rights reserved. See files
|
||||||
|
# LICENSE and NOTICE for details. LLNL-CODE-806117.
|
||||||
|
#
|
||||||
|
# This file is part of the MFEM library. For more information and source code
|
||||||
|
# availability visit https://mfem.org.
|
||||||
|
#
|
||||||
|
# MFEM is free software; you can redistribute it and/or modify it under the
|
||||||
|
# terms of the BSD-3 license. We welcome feedback and contributions, see file
|
||||||
|
# CONTRIBUTING.md for details.
|
||||||
|
|
||||||
|
# We define the following GitLab pipeline variables:
|
||||||
|
variables:
|
||||||
|
|
||||||
|
# The path to the shared resource between all jobs. For example, external
|
||||||
|
# repositories like 'tests' and 'tpls' are cloned here. Also, 'tpls' is built
|
||||||
|
# once for all targets, so that build happen here. The BUILD_ROOT is unique to
|
||||||
|
# the pipeline, preventing any form of concurrency with other pipelines. This
|
||||||
|
# also means that the BUILD_ROOT directory will never be cleaned.
|
||||||
|
# TODO: add a clean-up mechanism
|
||||||
|
BUILD_ROOT: ${USER_CI_TOP_DIR}/${CI_PROJECT_NAME}-${MACHINE_NAME}-pipeline-${CI_PIPELINE_ID}
|
||||||
|
|
||||||
|
# On LLNL's quartz, there is only one allocation shared among jobs in order to
|
||||||
|
# save time and resource. This allocation has to be uniquely named so that we
|
||||||
|
# are sure to retrieve it.
|
||||||
|
ALLOC_NAME: ${CI_PROJECT_NAME}_ci_${CI_PIPELINE_ID}
|
||||||
|
|
||||||
|
# Git repositories used in the pipeline
|
||||||
|
TPLS_REPO: ssh://git@mybitbucket.llnl.gov:7999/mfem/tpls.git
|
||||||
|
TESTS_REPO: ssh://git@mybitbucket.llnl.gov:7999/mfem/tests.git
|
||||||
|
AUTOTEST_REPO: ssh://git@mybitbucket.llnl.gov:7999/mfem/autotest.git
|
||||||
|
MFEM_DATA_REPO: https://github.com/mfem/data.git
|
||||||
|
|
||||||
|
# Directory used to place artifacts.
|
||||||
|
ARTIFACTS_DIR: artifacts
|
||||||
|
SLURM_OVERLAP: 1
|
||||||
@@ -0,0 +1,59 @@
|
|||||||
|
# Copyright (c) 2010-2022, Lawrence Livermore National Security, LLC. Produced
|
||||||
|
# at the Lawrence Livermore National Laboratory. All Rights reserved. See files
|
||||||
|
# LICENSE and NOTICE for details. LLNL-CODE-806117.
|
||||||
|
#
|
||||||
|
# This file is part of the MFEM library. For more information and source code
|
||||||
|
# availability visit https://mfem.org.
|
||||||
|
#
|
||||||
|
# MFEM is free software; you can redistribute it and/or modify it under the
|
||||||
|
# terms of the BSD-3 license. We welcome feedback and contributions, see file
|
||||||
|
# CONTRIBUTING.md for details.
|
||||||
|
|
||||||
|
# GitLab pipeline configuration for the Corona machine at LLNL
|
||||||
|
variables:
|
||||||
|
MACHINE_NAME: corona
|
||||||
|
|
||||||
|
.on_corona:
|
||||||
|
tags:
|
||||||
|
- shell
|
||||||
|
- corona
|
||||||
|
rules:
|
||||||
|
# Don't run corona jobs if...
|
||||||
|
# Note: This makes corona an "opt-in" machine. To activate builds on corona
|
||||||
|
# for a given GitLab clone of MFEM, go to Setting/CI-CD/variables, and set
|
||||||
|
# "ON_CORONA" to "ON". An LC account on for corona is required to trigger a
|
||||||
|
# pipeline there.
|
||||||
|
- if: '$CI_COMMIT_BRANCH =~ /_cnone/ || $ON_CORONA != "ON"'
|
||||||
|
when: never
|
||||||
|
# Don't run autotest update if...
|
||||||
|
- if: '$CI_JOB_NAME =~ /report/ && $AUTOTEST != "YES"'
|
||||||
|
when: never
|
||||||
|
# Report success on success status
|
||||||
|
- if: '$CI_JOB_NAME =~ /report_job_success/ && $AUTOTEST == "YES"'
|
||||||
|
when: on_success
|
||||||
|
# Report failure on failure status
|
||||||
|
- if: '$CI_JOB_NAME =~ /report_job_failure/ && $AUTOTEST == "YES"'
|
||||||
|
when: on_failure
|
||||||
|
# Always release resource
|
||||||
|
- if: '$CI_JOB_NAME =~ /release_resource/'
|
||||||
|
when: always
|
||||||
|
# Always cleanup
|
||||||
|
- if: '$CI_JOB_NAME =~ /cleanup/'
|
||||||
|
when: always
|
||||||
|
# Default is to run if previous stage succeeded
|
||||||
|
- when: on_success
|
||||||
|
|
||||||
|
# Spack helped builds
|
||||||
|
# Generic corona build job, extending build script
|
||||||
|
.build_and_test_on_corona:
|
||||||
|
extends: [.on_corona]
|
||||||
|
stage: build_and_test
|
||||||
|
script:
|
||||||
|
# THREADS is used by 'tests/gitlab/build_and_test', run below
|
||||||
|
- export THREADS=12
|
||||||
|
- echo ${ALLOC_NAME}
|
||||||
|
- export JOBID=$(squeue -h --name=${ALLOC_NAME} --format=%A)
|
||||||
|
- echo ${JOBID}
|
||||||
|
- echo ${MFEM_DATA_DIR}
|
||||||
|
- echo ${SPEC}
|
||||||
|
- srun $( [[ -n "${JOBID}" ]] && echo "--jobid=${JOBID}" ) -t 15 -N 1 tests/gitlab/build_and_test --spec "${SPEC}" --data-dir "${MFEM_DATA_DIR}" --data
|
||||||
@@ -0,0 +1,49 @@
|
|||||||
|
# Copyright (c) 2010-2022, Lawrence Livermore National Security, LLC. Produced
|
||||||
|
# at the Lawrence Livermore National Laboratory. All Rights reserved. See files
|
||||||
|
# LICENSE and NOTICE for details. LLNL-CODE-806117.
|
||||||
|
#
|
||||||
|
# This file is part of the MFEM library. For more information and source code
|
||||||
|
# availability visit https://mfem.org.
|
||||||
|
#
|
||||||
|
# MFEM is free software; you can redistribute it and/or modify it under the
|
||||||
|
# terms of the BSD-3 license. We welcome feedback and contributions, see file
|
||||||
|
# CONTRIBUTING.md for details.
|
||||||
|
|
||||||
|
# GitLab pipelines configurations for the Lassen machine at LLNL
|
||||||
|
variables:
|
||||||
|
MACHINE_NAME: lassen
|
||||||
|
|
||||||
|
.on_lassen:
|
||||||
|
tags:
|
||||||
|
- shell
|
||||||
|
- lassen
|
||||||
|
rules:
|
||||||
|
- if: '$CI_COMMIT_BRANCH =~ /_lnone/ || $ON_LASSEN == "OFF"' #run except if ...
|
||||||
|
when: never
|
||||||
|
# Don't run autotest update if...
|
||||||
|
- if: '$CI_JOB_NAME =~ /report/ && $AUTOTEST != "YES"'
|
||||||
|
when: never
|
||||||
|
# Report success on success status
|
||||||
|
- if: '$CI_JOB_NAME =~ /report_job_success/ && $AUTOTEST == "YES"'
|
||||||
|
when: on_success
|
||||||
|
# Report failure on failure status
|
||||||
|
- if: '$CI_JOB_NAME =~ /report_job_failure/ && $AUTOTEST == "YES"'
|
||||||
|
when: on_failure
|
||||||
|
# Always cleanup
|
||||||
|
- if: '$CI_JOB_NAME =~ /cleanup/'
|
||||||
|
when: always
|
||||||
|
- when: on_success
|
||||||
|
|
||||||
|
# Lassen uses a different job scheduler (spectrum lsf) that does not allow
|
||||||
|
# pre-allocation the same way slurm does. We use pdebug queue on lassen
|
||||||
|
# to speed-up the allocation. However this would not be scalable to
|
||||||
|
# multiple builds.
|
||||||
|
.build_and_test_on_lassen:
|
||||||
|
extends: [.on_lassen]
|
||||||
|
stage: build_and_test
|
||||||
|
script:
|
||||||
|
- echo ${MFEM_DATA_DIR}
|
||||||
|
- echo ${SPEC}
|
||||||
|
# Next script uses 'THREADS': leaving it empty --> it uses 'make all -j'
|
||||||
|
- lalloc 1 -W 45 -q pdebug --atsdisable tests/gitlab/build_and_test --spec "${SPEC}" --data-dir "${MFEM_DATA_DIR}" --data
|
||||||
|
needs: [setup]
|
||||||
@@ -0,0 +1,55 @@
|
|||||||
|
# Copyright (c) 2010-2022, Lawrence Livermore National Security, LLC. Produced
|
||||||
|
# at the Lawrence Livermore National Laboratory. All Rights reserved. See files
|
||||||
|
# LICENSE and NOTICE for details. LLNL-CODE-806117.
|
||||||
|
#
|
||||||
|
# This file is part of the MFEM library. For more information and source code
|
||||||
|
# availability visit https://mfem.org.
|
||||||
|
#
|
||||||
|
# MFEM is free software; you can redistribute it and/or modify it under the
|
||||||
|
# terms of the BSD-3 license. We welcome feedback and contributions, see file
|
||||||
|
# CONTRIBUTING.md for details.
|
||||||
|
|
||||||
|
# GitLab pipelines configurations for the Quartz machine at LLNL
|
||||||
|
variables:
|
||||||
|
MACHINE_NAME: quartz
|
||||||
|
|
||||||
|
.on_quartz:
|
||||||
|
tags:
|
||||||
|
- shell
|
||||||
|
- quartz
|
||||||
|
rules:
|
||||||
|
# Don't run quartz jobs if...
|
||||||
|
- if: '$CI_COMMIT_BRANCH =~ /_qnone/ || $ON_QUARTZ == "OFF"'
|
||||||
|
when: never
|
||||||
|
# Don't run autotest update if...
|
||||||
|
- if: '$CI_JOB_NAME =~ /report/ && $AUTOTEST != "YES"'
|
||||||
|
when: never
|
||||||
|
# Report success on success status
|
||||||
|
- if: '$CI_JOB_NAME =~ /report_job_success/ && $AUTOTEST == "YES"'
|
||||||
|
when: on_success
|
||||||
|
# Report failure on failure status
|
||||||
|
- if: '$CI_JOB_NAME =~ /report_job_failure/ && $AUTOTEST == "YES"'
|
||||||
|
when: on_failure
|
||||||
|
# Always release resource
|
||||||
|
- if: '$CI_JOB_NAME =~ /release_resource/'
|
||||||
|
when: always
|
||||||
|
# Always cleanup
|
||||||
|
- if: '$CI_JOB_NAME =~ /cleanup/'
|
||||||
|
when: always
|
||||||
|
# Default is to run if previous stage succeeded
|
||||||
|
- when: on_success
|
||||||
|
|
||||||
|
# Spack helped builds
|
||||||
|
# Generic quartz build job, extending build script
|
||||||
|
.build_and_test_on_quartz:
|
||||||
|
extends: [.on_quartz]
|
||||||
|
stage: build_and_test
|
||||||
|
script:
|
||||||
|
# THREADS is used by 'tests/gitlab/build_and_test', run below
|
||||||
|
- export THREADS=12
|
||||||
|
- echo ${ALLOC_NAME}
|
||||||
|
- export JOBID=$(squeue -h --name=${ALLOC_NAME} --format=%A)
|
||||||
|
- echo ${JOBID}
|
||||||
|
- echo ${MFEM_DATA_DIR}
|
||||||
|
- echo ${SPEC}
|
||||||
|
- srun $( [[ -n "${JOBID}" ]] && echo "--jobid=${JOBID}" ) -t 45 -N 1 tests/gitlab/build_and_test --spec "${SPEC}" --data-dir "${MFEM_DATA_DIR}" --data
|
||||||
@@ -0,0 +1,81 @@
|
|||||||
|
# Copyright (c) 2010-2022, Lawrence Livermore National Security, LLC. Produced
|
||||||
|
# at the Lawrence Livermore National Laboratory. All Rights reserved. See files
|
||||||
|
# LICENSE and NOTICE for details. LLNL-CODE-806117.
|
||||||
|
#
|
||||||
|
# This file is part of the MFEM library. For more information and source code
|
||||||
|
# availability visit https://mfem.org.
|
||||||
|
#
|
||||||
|
# MFEM is free software; you can redistribute it and/or modify it under the
|
||||||
|
# terms of the BSD-3 license. We welcome feedback and contributions, see file
|
||||||
|
# CONTRIBUTING.md for details.
|
||||||
|
|
||||||
|
# Jobs report
|
||||||
|
.report_job_success:
|
||||||
|
script:
|
||||||
|
- echo ${MACHINE_NAME}
|
||||||
|
- echo ${AUTOTEST}
|
||||||
|
- echo ${AUTOTEST_COMMIT}
|
||||||
|
- echo "AUTOTEST_ROOT ${AUTOTEST_ROOT}"
|
||||||
|
- cd ${AUTOTEST_ROOT}
|
||||||
|
- |
|
||||||
|
(
|
||||||
|
date
|
||||||
|
echo "Waiting to acquire lock on '$PWD/autotest.lock' ..."
|
||||||
|
# try to get an exclusive lock on fd 9 (autotest.lock) repeating the try
|
||||||
|
# every 5 seconds; simply using no timeout, i.e. 'flock 9', causes the
|
||||||
|
# command to hang indefinitely sometimes, so we use the timeout & retry
|
||||||
|
# as a workaround; we may want to add a counter for the number of
|
||||||
|
# retries to interrupt a potential infinite loop
|
||||||
|
while ! flock -w 5 9; do
|
||||||
|
true
|
||||||
|
done
|
||||||
|
echo "Acquired lock on '$PWD/autotest.lock'"
|
||||||
|
date
|
||||||
|
# Report SUCCESS while holding the file lock on 'autotest.lock'.
|
||||||
|
# The next script uses the following environment variables:
|
||||||
|
# - MACHINE_NAME, AUTOTEST_ROOT, AUTOTEST_COMMIT
|
||||||
|
# - CI_COMMIT_REF_SLUG, CI_PROJECT_DIR, CI_PIPELINE_URL
|
||||||
|
# It also calls the script '.gitlab/scripts/safe_create_rundir'.
|
||||||
|
${CI_PROJECT_DIR}/.gitlab/scripts/report_build_and_test_success
|
||||||
|
err=$?
|
||||||
|
# sleep for a period to allow NFS to propagate the above changes;
|
||||||
|
# clearly, there is no guarantee that other NFS clients will see the
|
||||||
|
# changes even after the timeout
|
||||||
|
sleep 10
|
||||||
|
exit $err
|
||||||
|
) 9> autotest.lock
|
||||||
|
|
||||||
|
.report_job_failure:
|
||||||
|
script:
|
||||||
|
- echo ${MACHINE_NAME}
|
||||||
|
- echo ${AUTOTEST}
|
||||||
|
- echo ${AUTOTEST_COMMIT}
|
||||||
|
- echo "AUTOTEST_ROOT ${AUTOTEST_ROOT}"
|
||||||
|
- cd ${AUTOTEST_ROOT}
|
||||||
|
- |
|
||||||
|
(
|
||||||
|
date
|
||||||
|
echo "Waiting to acquire lock on '$PWD/autotest.lock' ..."
|
||||||
|
# try to get an exclusive lock on fd 9 (autotest.lock) repeating the try
|
||||||
|
# every 5 seconds; simply using no timeout, i.e. 'flock 9', causes the
|
||||||
|
# command to hang indefinitely sometimes, so we use the timeout & retry
|
||||||
|
# as a workaround; we may want to add a counter for the number of
|
||||||
|
# retries to interrupt a potential infinite loop
|
||||||
|
while ! flock -w 5 9; do
|
||||||
|
true
|
||||||
|
done
|
||||||
|
echo "Acquired lock on '$PWD/autotest.lock'"
|
||||||
|
date
|
||||||
|
# Report FAILURE while holding the file lock on 'autotest.lock'.
|
||||||
|
# The next script uses the following environment variables:
|
||||||
|
# - MACHINE_NAME, AUTOTEST_ROOT, AUTOTEST_COMMIT
|
||||||
|
# - CI_COMMIT_REF_SLUG, CI_PROJECT_DIR, CI_PIPELINE_URL
|
||||||
|
# It also calls the script '.gitlab/scripts/safe_create_rundir'.
|
||||||
|
${CI_PROJECT_DIR}/.gitlab/scripts/report_build_and_test_failure
|
||||||
|
err=$?
|
||||||
|
# sleep for a period to allow NFS to propagate the above changes;
|
||||||
|
# clearly, there is no guarantee that other NFS clients will see the
|
||||||
|
# changes even after the timeout
|
||||||
|
sleep 10
|
||||||
|
exit $err
|
||||||
|
) 9> autotest.lock
|
||||||
@@ -1,4 +1,4 @@
|
|||||||
# Copyright (c) 2010-2025, Lawrence Livermore National Security, LLC. Produced
|
# Copyright (c) 2010-2022, Lawrence Livermore National Security, LLC. Produced
|
||||||
# at the Lawrence Livermore National Laboratory. All Rights reserved. See files
|
# at the Lawrence Livermore National Laboratory. All Rights reserved. See files
|
||||||
# LICENSE and NOTICE for details. LLNL-CODE-806117.
|
# LICENSE and NOTICE for details. LLNL-CODE-806117.
|
||||||
#
|
#
|
||||||
@@ -18,7 +18,7 @@
|
|||||||
setup_baseline:
|
setup_baseline:
|
||||||
tags:
|
tags:
|
||||||
- shell
|
- shell
|
||||||
- dane
|
- quartz
|
||||||
stage: setup
|
stage: setup
|
||||||
variables:
|
variables:
|
||||||
GIT_STRATEGY: none
|
GIT_STRATEGY: none
|
||||||
@@ -47,10 +47,12 @@ setup_baseline:
|
|||||||
date
|
date
|
||||||
echo "Waiting to acquire lock on '$PWD/autotest.lock' ..."
|
echo "Waiting to acquire lock on '$PWD/autotest.lock' ..."
|
||||||
# try to get an exclusive lock on fd 9 (autotest.lock) repeating the try
|
# try to get an exclusive lock on fd 9 (autotest.lock) repeating the try
|
||||||
# every 5 seconds; we may want to add a counter for the number of
|
# every 5 seconds; simply using no timeout, i.e. 'flock 9', causes the
|
||||||
|
# command to hang indefinitely sometimes, so we use the timeout & retry
|
||||||
|
# as a workaround; we may want to add a counter for the number of
|
||||||
# retries to interrupt a potential infinite loop
|
# retries to interrupt a potential infinite loop
|
||||||
while ! flock -n 9; do
|
while ! flock -w 5 9; do
|
||||||
sleep 5
|
true
|
||||||
done
|
done
|
||||||
echo "Acquired lock on '$PWD/autotest.lock'"
|
echo "Acquired lock on '$PWD/autotest.lock'"
|
||||||
date
|
date
|
||||||
|
|||||||
@@ -0,0 +1,94 @@
|
|||||||
|
# Copyright (c) 2010-2022, Lawrence Livermore National Security, LLC. Produced
|
||||||
|
# at the Lawrence Livermore National Laboratory. All Rights reserved. See files
|
||||||
|
# LICENSE and NOTICE for details. LLNL-CODE-806117.
|
||||||
|
#
|
||||||
|
# This file is part of the MFEM library. For more information and source code
|
||||||
|
# availability visit https://mfem.org.
|
||||||
|
#
|
||||||
|
# MFEM is free software; you can redistribute it and/or modify it under the
|
||||||
|
# terms of the BSD-3 license. We welcome feedback and contributions, see file
|
||||||
|
# CONTRIBUTING.md for details.
|
||||||
|
|
||||||
|
# Setup clones the mfem/data repo in ${SHARED_REPOS_DIR}. The build_and_test
|
||||||
|
# script then symlinks the repo to the parent directory of the MFEM source
|
||||||
|
# directory. Unit tests that depend on the mfem/data repo will then detect that
|
||||||
|
# this directory is present and be enabled.
|
||||||
|
setup:
|
||||||
|
tags:
|
||||||
|
- shell
|
||||||
|
- quartz
|
||||||
|
stage: setup
|
||||||
|
variables:
|
||||||
|
GIT_STRATEGY: none
|
||||||
|
script:
|
||||||
|
#
|
||||||
|
# Setup MFEM_DATA_DIR=${SHARED_REPOS_DIR}/mfem-data, see '.gitlab-ci.yml'
|
||||||
|
# and '.gitlab/configs/<machine>-config.yml'
|
||||||
|
#
|
||||||
|
- echo "MACHINE_NAME = ${MACHINE_NAME}"
|
||||||
|
- echo "AUTOTEST = ${AUTOTEST}"
|
||||||
|
- echo "AUTOTEST_COMMIT = ${AUTOTEST_COMMIT}"
|
||||||
|
- echo "SHARED_REPOS_DIR ${SHARED_REPOS_DIR}"
|
||||||
|
- mkdir -p ${SHARED_REPOS_DIR} && cd ${SHARED_REPOS_DIR}
|
||||||
|
- command -v flock || echo "Required command 'flock' not found"
|
||||||
|
- |
|
||||||
|
(
|
||||||
|
date
|
||||||
|
echo "Waiting to acquire lock on '$PWD/mfem-data.lock' ..."
|
||||||
|
# try to get an exclusive lock on fd 9 (mfem-data.lock) repeating the try
|
||||||
|
# every 5 seconds; simply using no timeout, i.e. 'flock 9', causes the
|
||||||
|
# command to hang indefinitely sometimes, so we use the timeout & retry
|
||||||
|
# as a workaround; we may want to add a counter for the number of
|
||||||
|
# retries to interrupt a potential infinite loop
|
||||||
|
while ! flock -w 5 9; do
|
||||||
|
true
|
||||||
|
done
|
||||||
|
echo "Acquired lock on '$PWD/mfem-data.lock'"
|
||||||
|
date
|
||||||
|
# clone/update the mfem/data repo while holding the file lock on
|
||||||
|
# 'mfem-data.lock'
|
||||||
|
err=0
|
||||||
|
if [[ ! -d "mfem-data" ]]; then
|
||||||
|
git clone ${MFEM_DATA_REPO} "mfem-data"
|
||||||
|
else
|
||||||
|
cd "mfem-data" && git pull && cd ..
|
||||||
|
fi || err=1
|
||||||
|
# sleep for a period to allow NFS to propagate the above changes;
|
||||||
|
# clearly, there is no guarantee that other NFS clients will see the
|
||||||
|
# changes even after the timeout
|
||||||
|
sleep 10
|
||||||
|
exit $err
|
||||||
|
) 9> mfem-data.lock
|
||||||
|
#
|
||||||
|
# Setup ${AUTOTEST_ROOT}/autotest:
|
||||||
|
#
|
||||||
|
- echo "AUTOTEST_ROOT ${AUTOTEST_ROOT}"
|
||||||
|
- mkdir -p ${AUTOTEST_ROOT} && cd ${AUTOTEST_ROOT}
|
||||||
|
- |
|
||||||
|
(
|
||||||
|
date
|
||||||
|
echo "Waiting to acquire lock on '$PWD/autotest.lock' ..."
|
||||||
|
# try to get an exclusive lock on fd 9 (autotest.lock) repeating the try
|
||||||
|
# every 5 seconds; simply using no timeout, i.e. 'flock 9', causes the
|
||||||
|
# command to hang indefinitely sometimes, so we use the timeout & retry
|
||||||
|
# as a workaround; we may want to add a counter for the number of
|
||||||
|
# retries to interrupt a potential infinite loop
|
||||||
|
while ! flock -w 5 9; do
|
||||||
|
true
|
||||||
|
done
|
||||||
|
echo "Acquired lock on '$PWD/autotest.lock'"
|
||||||
|
date
|
||||||
|
# clone/update the autotest repo while holding the file lock on
|
||||||
|
# 'autotest.lock'
|
||||||
|
err=0
|
||||||
|
if [[ ! -d "autotest" ]]; then
|
||||||
|
git clone ${AUTOTEST_REPO}
|
||||||
|
else
|
||||||
|
cd autotest && git pull && cd ..
|
||||||
|
fi || err=1
|
||||||
|
# sleep for a period to allow NFS to propagate the above changes;
|
||||||
|
# clearly, there is no guarantee that other NFS clients will see the
|
||||||
|
# changes even after the timeout
|
||||||
|
sleep 10
|
||||||
|
exit $err
|
||||||
|
) 9> autotest.lock
|
||||||
@@ -0,0 +1,67 @@
|
|||||||
|
# Copyright (c) 2010-2022, Lawrence Livermore National Security, LLC. Produced
|
||||||
|
# at the Lawrence Livermore National Laboratory. All Rights reserved. See files
|
||||||
|
# LICENSE and NOTICE for details. LLNL-CODE-806117.
|
||||||
|
#
|
||||||
|
# This file is part of the MFEM library. For more information and source code
|
||||||
|
# availability visit https://mfem.org.
|
||||||
|
#
|
||||||
|
# MFEM is free software; you can redistribute it and/or modify it under the
|
||||||
|
# terms of the BSD-3 license. We welcome feedback and contributions, see file
|
||||||
|
# CONTRIBUTING.md for details.
|
||||||
|
|
||||||
|
stages:
|
||||||
|
- setup
|
||||||
|
- allocate_resource
|
||||||
|
- build_and_test
|
||||||
|
- release_resource_and_report
|
||||||
|
|
||||||
|
# Slurm shared allocation
|
||||||
|
allocate_resource:
|
||||||
|
variables:
|
||||||
|
GIT_STRATEGY: none
|
||||||
|
extends: .on_corona
|
||||||
|
stage: allocate_resource
|
||||||
|
script:
|
||||||
|
- echo ${ALLOC_NAME}
|
||||||
|
- salloc --exclusive --nodes=1 --partition=mi60 --time=45 --no-shell --job-name=${ALLOC_NAME}
|
||||||
|
timeout: 6h
|
||||||
|
needs: [setup]
|
||||||
|
|
||||||
|
# Build and test jobs, simply provide a spec
|
||||||
|
rocm_gcc_8.3.1:
|
||||||
|
variables:
|
||||||
|
SPEC: "@develop%gcc@8.3.1+rocm amdgpu_target=gfx906"
|
||||||
|
extends: .build_and_test_on_corona
|
||||||
|
needs: [allocate_resource]
|
||||||
|
|
||||||
|
# Release slurm allocation
|
||||||
|
release_resource:
|
||||||
|
variables:
|
||||||
|
GIT_STRATEGY: none
|
||||||
|
extends: .on_corona
|
||||||
|
stage: release_resource_and_report
|
||||||
|
script:
|
||||||
|
- echo ${ALLOC_NAME}
|
||||||
|
- export JOBID=$(squeue -h --name=${ALLOC_NAME} --format=%A)
|
||||||
|
- echo ${JOBID}
|
||||||
|
- ([[ -n "${JOBID}" ]] && scancel ${JOBID})
|
||||||
|
needs: [rocm_gcc_8.3.1]
|
||||||
|
|
||||||
|
# Jobs report
|
||||||
|
report_job_success:
|
||||||
|
stage: release_resource_and_report
|
||||||
|
extends:
|
||||||
|
- .on_corona
|
||||||
|
- .report_job_success
|
||||||
|
|
||||||
|
report_job_failure:
|
||||||
|
stage: release_resource_and_report
|
||||||
|
extends:
|
||||||
|
- .on_corona
|
||||||
|
- .report_job_failure
|
||||||
|
|
||||||
|
include:
|
||||||
|
- local: .gitlab/configs/common.yml
|
||||||
|
- local: .gitlab/configs/corona-config.yml
|
||||||
|
- local: .gitlab/configs/setup-build-and-test.yml
|
||||||
|
- local: .gitlab/configs/report-build-and-test.yml
|
||||||
@@ -1,132 +0,0 @@
|
|||||||
# Copyright (c) 2010-2025, Lawrence Livermore National Security, LLC. Produced
|
|
||||||
# at the Lawrence Livermore National Laboratory. All Rights reserved. See files
|
|
||||||
# LICENSE and NOTICE for details. LLNL-CODE-806117.
|
|
||||||
#
|
|
||||||
# This file is part of the MFEM library. For more information and source code
|
|
||||||
# availability visit https://mfem.org.
|
|
||||||
#
|
|
||||||
# MFEM is free software; you can redistribute it and/or modify it under the
|
|
||||||
# terms of the BSD-3 license. We welcome feedback and contributions, see file
|
|
||||||
# CONTRIBUTING.md for details.
|
|
||||||
|
|
||||||
include:
|
|
||||||
- project: 'lc-templates/id_tokens'
|
|
||||||
file: 'id_tokens.yml'
|
|
||||||
|
|
||||||
# We define the following GitLab pipeline variables:
|
|
||||||
variables:
|
|
||||||
# Set the build-and-test command.
|
|
||||||
# Nested variables are allowed and useful to customize the job command. We
|
|
||||||
# protect variables with quotes so that their value may remain a string even if
|
|
||||||
# they contain whitespaces.
|
|
||||||
JOB_CMD:
|
|
||||||
value: tests/gitlab/build_and_test --spec \"${SPEC}\" --data-dir ${MFEM_DATA_DIR} --data
|
|
||||||
# The path to the shared resource between all jobs in the 'dane-baseline'
|
|
||||||
# pipeline. For example, external repositories like 'tests' and 'tpls' are
|
|
||||||
# cloned here. Also, 'tpls' is built once for all targets, so that build happens
|
|
||||||
# here. The BUILD_ROOT is unique to the pipeline, preventing any form of
|
|
||||||
# concurrency with other pipelines. This directory is removed by the 'cleanup'
|
|
||||||
# stage in the 'dane-baseline' pipeline.
|
|
||||||
BUILD_ROOT: ${USER_CI_TOP_DIR}/${CI_PROJECT_NAME}-${CI_MACHINE}-pipeline-${CI_PIPELINE_ID}
|
|
||||||
|
|
||||||
# On LLNL's dane and tioga, the 'build-and-test' pipelines creates only one
|
|
||||||
# allocation shared among jobs in the pipeline in order to save time and
|
|
||||||
# resources. This allocation has to be uniquely named so that we are sure to
|
|
||||||
# retrieve it and avoid collisions.
|
|
||||||
ALLOC_NAME: ${CI_PROJECT_NAME}_ci_${CI_PIPELINE_ID}
|
|
||||||
|
|
||||||
# Git repositories used in the pipelines:
|
|
||||||
# - TPLS_REPO and TESTS_REPO are used only by the 'dane-baseline' pipeline
|
|
||||||
# - AUTOTEST_REPO is used by all pipelines
|
|
||||||
# - MFEM_DATA_REPO is used only by the 'build-and-test' pipelines
|
|
||||||
TPLS_REPO: ssh://git@mybitbucket.llnl.gov:7999/mfem/tpls.git
|
|
||||||
TESTS_REPO: ssh://git@mybitbucket.llnl.gov:7999/mfem/tests.git
|
|
||||||
AUTOTEST_REPO: ssh://git@mybitbucket.llnl.gov:7999/mfem/autotest.git
|
|
||||||
MFEM_DATA_REPO: https://github.com/mfem/data.git
|
|
||||||
|
|
||||||
# Directory used to place artifacts:
|
|
||||||
# - ARTIFACTS_DIR is only used by the 'dane-baseline' pipeline
|
|
||||||
ARTIFACTS_DIR: artifacts
|
|
||||||
SLURM_OVERLAP: 1
|
|
||||||
|
|
||||||
# Dane
|
|
||||||
# Arguments for top level allocation
|
|
||||||
DANE_SHARED_ALLOC: "--exclusive --reservation=ci --time=60 --nodes=1"
|
|
||||||
# Arguments for job level allocation
|
|
||||||
# Note: We repeat the reservation, necessary when jobs are manually re-triggered.
|
|
||||||
DANE_JOB_ALLOC: "--reservation=ci --overlap --nodes=1"
|
|
||||||
|
|
||||||
# Tioga
|
|
||||||
# Arguments for top level allocation
|
|
||||||
TIOGA_SHARED_ALLOC: "--queue=pci --exclusive --time-limit=45m --nodes=1"
|
|
||||||
# Arguments for job level allocation
|
|
||||||
TIOGA_JOB_ALLOC: "--nodes=1 --begin-time=+5s"
|
|
||||||
|
|
||||||
# Matrix
|
|
||||||
# Arguments for top level allocation
|
|
||||||
MATRIX_SHARED_ALLOC: "-p pdebug --exclusive --time=45 --nodes=1 -G 4"
|
|
||||||
# Arguments for job level allocation
|
|
||||||
# Note: We repeat the reservation, necessary when jobs are manually re-triggered.
|
|
||||||
MATRIX_JOB_ALLOC: "--overlap --nodes=1"
|
|
||||||
|
|
||||||
# Configuration shared by build and test jobs specific to this project.
|
|
||||||
# Not all configuration can be shared. Here projects can fine tune the
|
|
||||||
# CI behavior.
|
|
||||||
# See Umpire for an example (export junit test reports).
|
|
||||||
.custom_job:
|
|
||||||
artifacts:
|
|
||||||
reports:
|
|
||||||
|
|
||||||
# Note: this part is not used by the 'dane-baseline' pipeline.
|
|
||||||
# FIXME: BUILD_ROOT, TPLS_REPO, TESTS_REPO are not needed here.
|
|
||||||
# Also, the definition of SHARED_REPOS_DIR is wrong.
|
|
||||||
.reproducer_vars:
|
|
||||||
script:
|
|
||||||
- |
|
|
||||||
echo -e "
|
|
||||||
# Variables \n
|
|
||||||
export SPEC=\"${SPEC//\"/\\\"}\" \n
|
|
||||||
# Directories \n
|
|
||||||
export BUILD_ROOT=\"\${working_dir}\" \n
|
|
||||||
export SHARED_REPOS_DIR=\"\${BUILD_ROOT}/..\" \n
|
|
||||||
export MFEM_DATA_DIR=\"\${SHARED_REPOS_DIR}/mfem-data\" \n
|
|
||||||
# Repositories \n
|
|
||||||
export TPLS_REPO=\"${TPLS_REPO//\"/\\\"}\" \n
|
|
||||||
export TESTS_REPO=\"${TESTS_REPO//\"/\\\"}\" \n
|
|
||||||
export AUTOTEST_REPO=\"${AUTOTEST_REPO//\"/\\\"}\" \n
|
|
||||||
export MFEM_DATA_REPO=\"${MFEM_DATA_REPO//\"/\\\"}\" \n
|
|
||||||
# Setup directories \n
|
|
||||||
./tests/gitlab/build_and_test_setup \n
|
|
||||||
# Using the CI build cache is optional and requires a token. Set it like so: \n
|
|
||||||
# export REGISTRY_TOKEN=\"<your token here>\" \n"
|
|
||||||
#
|
|
||||||
|
|
||||||
# Jobs report
|
|
||||||
.report_job_success:
|
|
||||||
script:
|
|
||||||
- ${CI_PROJECT_DIR}/.gitlab/scripts/report_build_and_test SUCCESS
|
|
||||||
rules:
|
|
||||||
- when: on_success
|
|
||||||
|
|
||||||
.report_job_failure:
|
|
||||||
script:
|
|
||||||
- ${CI_PROJECT_DIR}/.gitlab/scripts/report_build_and_test FAILURE
|
|
||||||
rules:
|
|
||||||
- when: on_failure
|
|
||||||
|
|
||||||
# Keep the following for debugging purposes: renaming this job from
|
|
||||||
# '.show_variables' to 'show_variables' will insert this debug job at the
|
|
||||||
# beginning of all child pipelines.
|
|
||||||
.show_variables:
|
|
||||||
tags: [shell, oslic]
|
|
||||||
variables:
|
|
||||||
GIT_STRATEGY: none
|
|
||||||
stage: .pre
|
|
||||||
script:
|
|
||||||
- |
|
|
||||||
echo "~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~"
|
|
||||||
echo "AUTOTEST=${AUTOTEST}"
|
|
||||||
echo "AUTOTEST_COMMIT=${AUTOTEST_COMMIT}"
|
|
||||||
echo "~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~"
|
|
||||||
# Fail the job on purpose to prevent the rest of the pipeline from running
|
|
||||||
false
|
|
||||||
@@ -1,19 +0,0 @@
|
|||||||
# Copyright (c) 2010-2025, Lawrence Livermore National Security, LLC. Produced
|
|
||||||
# at the Lawrence Livermore National Laboratory. All Rights reserved. See files
|
|
||||||
# LICENSE and NOTICE for details. LLNL-CODE-806117.
|
|
||||||
#
|
|
||||||
# This file is part of the MFEM library. For more information and source code
|
|
||||||
# availability visit https://mfem.org.
|
|
||||||
#
|
|
||||||
# MFEM is free software; you can redistribute it and/or modify it under the
|
|
||||||
# terms of the BSD-3 license. We welcome feedback and contributions, see file
|
|
||||||
# CONTRIBUTING.md for details.
|
|
||||||
|
|
||||||
# Jobs report
|
|
||||||
report_job_success:
|
|
||||||
extends: [.on_dane, .report_job_success]
|
|
||||||
stage: jobs-stage-3
|
|
||||||
|
|
||||||
report_job_failure:
|
|
||||||
extends: [.on_dane, .report_job_failure]
|
|
||||||
stage: jobs-stage-3
|
|
||||||
@@ -1,92 +0,0 @@
|
|||||||
# Copyright (c) 2010-2025, Lawrence Livermore National Security, LLC. Produced
|
|
||||||
# at the Lawrence Livermore National Laboratory. All Rights reserved. See files
|
|
||||||
# LICENSE and NOTICE for details. LLNL-CODE-806117.
|
|
||||||
#
|
|
||||||
# This file is part of the MFEM library. For more information and source code
|
|
||||||
# availability visit https://mfem.org.
|
|
||||||
#
|
|
||||||
# MFEM is free software; you can redistribute it and/or modify it under the
|
|
||||||
# terms of the BSD-3 license. We welcome feedback and contributions, see file
|
|
||||||
# CONTRIBUTING.md for details.
|
|
||||||
|
|
||||||
# Override reproducer section to define MFEM specific variables.
|
|
||||||
.dane_reproducer_vars:
|
|
||||||
script:
|
|
||||||
- !reference [.reproducer_vars, script]
|
|
||||||
|
|
||||||
# TODO: Setup script should be defined as a bash script (but then GIT_STRATEGY
|
|
||||||
# cannot be "none" anymore).
|
|
||||||
|
|
||||||
# Setup clones the mfem/data repo in ${SHARED_REPOS_DIR}. The build_and_test
|
|
||||||
# script then symlinks the repo to the parent directory of the MFEM source
|
|
||||||
# directory. Unit tests that depend on the mfem/data repo will then detect that
|
|
||||||
# this directory is present and be enabled.
|
|
||||||
setup:
|
|
||||||
extends: .on_dane
|
|
||||||
stage: jobs-stage-1
|
|
||||||
script:
|
|
||||||
- ./tests/gitlab/build_and_test_setup
|
|
||||||
|
|
||||||
|
|
||||||
########################
|
|
||||||
# Overridden shared jobs
|
|
||||||
########################
|
|
||||||
# When using shared jobs, we can duplicate them here to override description and
|
|
||||||
# add necessary changes.
|
|
||||||
# We keep ${PROJECT_<MACHINE>_VARIANTS} and ${PROJECT_<MACHINE>_DEPS} So that
|
|
||||||
# the comparison with the original job is easier.
|
|
||||||
|
|
||||||
|
|
||||||
############
|
|
||||||
# Extra jobs
|
|
||||||
############
|
|
||||||
# We do not recommend using ${PROJECT_<MACHINE>_VARIANTS} and
|
|
||||||
# ${PROJECT_<MACHINE>_DEPS} in the extra jobs. There is not reason not to fully
|
|
||||||
# describe the spec here.
|
|
||||||
|
|
||||||
.mfem_job_on_dane:
|
|
||||||
extends: .job_on_dane
|
|
||||||
stage: jobs-stage-2
|
|
||||||
variables:
|
|
||||||
# Dane has 224 threads/node and we run 7 separate jobs: 224=7*32
|
|
||||||
THREADS: 28
|
|
||||||
|
|
||||||
debug_ser_gcc_10:
|
|
||||||
extends: .mfem_job_on_dane
|
|
||||||
variables:
|
|
||||||
SPEC: "%gcc@10.3.1 +debug~mpi"
|
|
||||||
|
|
||||||
debug_par_gcc_10:
|
|
||||||
extends: .mfem_job_on_dane
|
|
||||||
variables:
|
|
||||||
SPEC: "%gcc@10.3.1 +debug+mpi"
|
|
||||||
|
|
||||||
opt_ser_gcc_10:
|
|
||||||
extends: .mfem_job_on_dane
|
|
||||||
variables:
|
|
||||||
SPEC: "%gcc@10.3.1 ~mpi"
|
|
||||||
|
|
||||||
opt_par_gcc_10:
|
|
||||||
extends: .mfem_job_on_dane
|
|
||||||
variables:
|
|
||||||
SPEC: "%gcc@10.3.1"
|
|
||||||
|
|
||||||
opt_par_gcc_10_sundials:
|
|
||||||
extends: .mfem_job_on_dane
|
|
||||||
variables:
|
|
||||||
SPEC: "%gcc@10.3.1 +sundials"
|
|
||||||
|
|
||||||
opt_par_gcc_10_petsc:
|
|
||||||
extends: .mfem_job_on_dane
|
|
||||||
variables:
|
|
||||||
SPEC: "%gcc@10.3.1 +petsc ^petsc+mumps~superlu-dist"
|
|
||||||
|
|
||||||
opt_par_gcc_10_pumi:
|
|
||||||
extends: .mfem_job_on_dane
|
|
||||||
variables:
|
|
||||||
SPEC: "%gcc@10.3.1 +pumi"
|
|
||||||
|
|
||||||
opt_par_gcc_10_gslib:
|
|
||||||
extends: .mfem_job_on_dane
|
|
||||||
variables:
|
|
||||||
SPEC: "%gcc@10.3.1 +gslib"
|
|
||||||
@@ -1,19 +0,0 @@
|
|||||||
# Copyright (c) 2010-2025, Lawrence Livermore National Security, LLC. Produced
|
|
||||||
# at the Lawrence Livermore National Laboratory. All Rights reserved. See files
|
|
||||||
# LICENSE and NOTICE for details. LLNL-CODE-806117.
|
|
||||||
#
|
|
||||||
# This file is part of the MFEM library. For more information and source code
|
|
||||||
# availability visit https://mfem.org.
|
|
||||||
#
|
|
||||||
# MFEM is free software; you can redistribute it and/or modify it under the
|
|
||||||
# terms of the BSD-3 license. We welcome feedback and contributions, see file
|
|
||||||
# CONTRIBUTING.md for details.
|
|
||||||
|
|
||||||
# Jobs report
|
|
||||||
report_job_success:
|
|
||||||
extends: [.on_matrix, .report_job_success]
|
|
||||||
stage: jobs-stage-3
|
|
||||||
|
|
||||||
report_job_failure:
|
|
||||||
extends: [.on_matrix, .report_job_failure]
|
|
||||||
stage: jobs-stage-3
|
|
||||||
@@ -1,70 +0,0 @@
|
|||||||
# Copyright (c) 2010-2025, Lawrence Livermore National Security, LLC. Produced
|
|
||||||
# at the Lawrence Livermore National Laboratory. All Rights reserved. See files
|
|
||||||
# LICENSE and NOTICE for details. LLNL-CODE-806117.
|
|
||||||
#
|
|
||||||
# This file is part of the MFEM library. For more information and source code
|
|
||||||
# availability visit https://mfem.org.
|
|
||||||
#
|
|
||||||
# MFEM is free software; you can redistribute it and/or modify it under the
|
|
||||||
# terms of the BSD-3 license. We welcome feedback and contributions, see file
|
|
||||||
# CONTRIBUTING.md for details.
|
|
||||||
|
|
||||||
# Override reproducer section to define UMPIRE specific variables.
|
|
||||||
.matrix_reproducer_vars:
|
|
||||||
script:
|
|
||||||
- !reference [.reproducer_vars, script]
|
|
||||||
|
|
||||||
#TODO: Setup script should be defined as a bash script (but then GIT_STRATEGY cannot be "none" anymore).
|
|
||||||
|
|
||||||
# Setup clones the mfem/data repo in ${SHARED_REPOS_DIR}. The build_and_test
|
|
||||||
# script then symlinks the repo to the parent directory of the MFEM source
|
|
||||||
# directory. Unit tests that depend on the mfem/data repo will then detect that
|
|
||||||
# this directory is present and be enabled.
|
|
||||||
setup:
|
|
||||||
extends: .on_matrix
|
|
||||||
stage: jobs-stage-1
|
|
||||||
script:
|
|
||||||
- ./tests/gitlab/build_and_test_setup
|
|
||||||
|
|
||||||
|
|
||||||
########################
|
|
||||||
# Overridden shared jobs
|
|
||||||
########################
|
|
||||||
# When using shared jobs , we can duplicate them here to override description and add necessary changes.
|
|
||||||
# We keep ${PROJECT_<MACHINE>_VARIANTS} and ${PROJECT_<MACHINE>_DEPS} So that
|
|
||||||
# the comparison with the original job is easier.
|
|
||||||
|
|
||||||
|
|
||||||
############
|
|
||||||
# Extra jobs
|
|
||||||
############
|
|
||||||
# We do not recommend using ${PROJECT_<MACHINE>_VARIANTS} and
|
|
||||||
# ${PROJECT_<MACHINE>_DEPS} in the extra jobs. There is not reason not to fully
|
|
||||||
# describe the spec here.
|
|
||||||
|
|
||||||
.mfem_job_on_matrix:
|
|
||||||
extends: .job_on_matrix
|
|
||||||
stage: jobs-stage-2
|
|
||||||
variables:
|
|
||||||
# We run 2 jobs on 1 node that has 112 threads
|
|
||||||
THREADS: 48
|
|
||||||
# These modules need to be consistent with the uberenv configurations:
|
|
||||||
MODULE_LIST: "gcc/10.3.1-magic cuda/12.9.1"
|
|
||||||
|
|
||||||
allocate_resources:
|
|
||||||
timeout: 4h
|
|
||||||
|
|
||||||
opt_mpi_cuda_gcc:
|
|
||||||
extends: .mfem_job_on_matrix
|
|
||||||
variables:
|
|
||||||
SPEC: "%gcc@10.3.1 +mpi +cuda cuda_arch=90"
|
|
||||||
|
|
||||||
opt_mpi_cuda_hypre_cuda_gcc:
|
|
||||||
extends: .mfem_job_on_matrix
|
|
||||||
variables:
|
|
||||||
SPEC: "%gcc@10.3.1 +mpi +cuda cuda_arch=90 ^hypre+cuda"
|
|
||||||
|
|
||||||
opt_mpi_cuda_gcc_gslib:
|
|
||||||
extends: .mfem_job_on_matrix
|
|
||||||
variables:
|
|
||||||
SPEC: "%gcc@10.3.1 +mpi +cuda +gslib cuda_arch=90 ^hypre+cuda"
|
|
||||||
@@ -1,20 +0,0 @@
|
|||||||
# Copyright (c) 2010-2025, Lawrence Livermore National Security, LLC. Produced
|
|
||||||
# at the Lawrence Livermore National Laboratory. All Rights reserved. See files
|
|
||||||
# LICENSE and NOTICE for details. LLNL-CODE-806117.
|
|
||||||
#
|
|
||||||
# This file is part of the MFEM library. For more information and source code
|
|
||||||
# availability visit https://mfem.org.
|
|
||||||
#
|
|
||||||
# MFEM is free software; you can redistribute it and/or modify it under the
|
|
||||||
# terms of the BSD-3 license. We welcome feedback and contributions, see file
|
|
||||||
# CONTRIBUTING.md for details.
|
|
||||||
|
|
||||||
# Jobs report
|
|
||||||
report_job_success:
|
|
||||||
extends: [.on_tioga, .report_job_success]
|
|
||||||
stage: jobs-stage-3
|
|
||||||
|
|
||||||
report_job_failure:
|
|
||||||
extends: [.on_tioga, .report_job_failure]
|
|
||||||
stage: jobs-stage-3
|
|
||||||
|
|
||||||
@@ -1,70 +0,0 @@
|
|||||||
# Copyright (c) 2010-2025, Lawrence Livermore National Security, LLC. Produced
|
|
||||||
# at the Lawrence Livermore National Laboratory. All Rights reserved. See files
|
|
||||||
# LICENSE and NOTICE for details. LLNL-CODE-806117.
|
|
||||||
#
|
|
||||||
# This file is part of the MFEM library. For more information and source code
|
|
||||||
# availability visit https://mfem.org.
|
|
||||||
#
|
|
||||||
# MFEM is free software; you can redistribute it and/or modify it under the
|
|
||||||
# terms of the BSD-3 license. We welcome feedback and contributions, see file
|
|
||||||
# CONTRIBUTING.md for details.
|
|
||||||
|
|
||||||
# Override reproducer section to define UMPIRE specific variables.
|
|
||||||
.tioga_reproducer_vars:
|
|
||||||
script:
|
|
||||||
- !reference [.reproducer_vars, script]
|
|
||||||
|
|
||||||
#TODO: Setup script should be defined as a bash script (but then GIT_STRATEGY cannot be "none" anymore).
|
|
||||||
|
|
||||||
# Setup clones the mfem/data repo in ${SHARED_REPOS_DIR}. The build_and_test
|
|
||||||
# script then symlinks the repo to the parent directory of the MFEM source
|
|
||||||
# directory. Unit tests that depend on the mfem/data repo will then detect that
|
|
||||||
# this directory is present and be enabled.
|
|
||||||
setup:
|
|
||||||
extends: .on_tioga
|
|
||||||
stage: jobs-stage-1
|
|
||||||
script:
|
|
||||||
- ./tests/gitlab/build_and_test_setup
|
|
||||||
|
|
||||||
########################
|
|
||||||
# Overridden shared jobs
|
|
||||||
########################
|
|
||||||
# When using shared jobs , we can duplicate them here to override description and add necessary changes.
|
|
||||||
# We keep ${PROJECT_<MACHINE>_VARIANTS} and ${PROJECT_<MACHINE>_DEPS} So that
|
|
||||||
# the comparison with the original job is easier.
|
|
||||||
|
|
||||||
|
|
||||||
############
|
|
||||||
# Extra jobs
|
|
||||||
############
|
|
||||||
# We do not recommend using ${PROJECT_<MACHINE>_VARIANTS} and
|
|
||||||
# ${PROJECT_<MACHINE>_DEPS} in the extra jobs. There is not reason not to fully
|
|
||||||
# describe the spec here.
|
|
||||||
|
|
||||||
# Build and test jobs, simply provide a spec
|
|
||||||
|
|
||||||
#.tioga_job_command:
|
|
||||||
# script:
|
|
||||||
# - echo PROXY="${PROXY}"
|
|
||||||
# - echo TIOGA_JOB_ALLOC="${TIOGA_JOB_ALLOC}"
|
|
||||||
# - "printf '#!/bin/bash\n%s\n' \"${JOB_CMD}\" > flux_script.sh"
|
|
||||||
# - cat flux_script.sh
|
|
||||||
# - ${PROXY} flux watch $( ${PROXY} flux batch -o output.stdout.type=kvs ${TIOGA_JOB_ALLOC} flux_script.sh )
|
|
||||||
# - rm -f flux_script.sh
|
|
||||||
|
|
||||||
.mfem_job_on_tioga:
|
|
||||||
extends: .job_on_tioga
|
|
||||||
stage: jobs-stage-2
|
|
||||||
variables:
|
|
||||||
# We run 1 job on 1 node that has 64 threads
|
|
||||||
THREADS: 64
|
|
||||||
|
|
||||||
opt_mpi_rocm_hypre_rocm:
|
|
||||||
extends: .mfem_job_on_tioga
|
|
||||||
variables:
|
|
||||||
SPEC: "%rocmcc@=6.3.1 +rocm amdgpu_target=gfx90a ^hypre+rocm"
|
|
||||||
|
|
||||||
# cce_16_0_1:
|
|
||||||
# extends: .mfem_job_on_tioga
|
|
||||||
# variables:
|
|
||||||
# SPEC: "%cce@=16.0.1"
|
|
||||||
@@ -0,0 +1,44 @@
|
|||||||
|
# Copyright (c) 2010-2022, Lawrence Livermore National Security, LLC. Produced
|
||||||
|
# at the Lawrence Livermore National Laboratory. All Rights reserved. See files
|
||||||
|
# LICENSE and NOTICE for details. LLNL-CODE-806117.
|
||||||
|
#
|
||||||
|
# This file is part of the MFEM library. For more information and source code
|
||||||
|
# availability visit https://mfem.org.
|
||||||
|
#
|
||||||
|
# MFEM is free software; you can redistribute it and/or modify it under the
|
||||||
|
# terms of the BSD-3 license. We welcome feedback and contributions, see file
|
||||||
|
# CONTRIBUTING.md for details.
|
||||||
|
|
||||||
|
stages:
|
||||||
|
- setup
|
||||||
|
- build_and_test
|
||||||
|
- report
|
||||||
|
|
||||||
|
opt_mpi_cuda_xl_16_1_1_8:
|
||||||
|
variables:
|
||||||
|
SPEC: "%xl@16.1.1.8 +mpi +cuda cuda_arch=70"
|
||||||
|
extends: .build_and_test_on_lassen
|
||||||
|
|
||||||
|
opt_mpi_cuda_hypre_cuda_xl:
|
||||||
|
variables:
|
||||||
|
SPEC: "%xl@16.1.1.8 +mpi +cuda cuda_arch=70 ^hypre+cuda~shared cuda_arch=70"
|
||||||
|
extends: .build_and_test_on_lassen
|
||||||
|
|
||||||
|
# Jobs report
|
||||||
|
report_job_success:
|
||||||
|
stage: report
|
||||||
|
extends:
|
||||||
|
- .on_lassen
|
||||||
|
- .report_job_success
|
||||||
|
|
||||||
|
report_job_failure:
|
||||||
|
stage: report
|
||||||
|
extends:
|
||||||
|
- .on_lassen
|
||||||
|
- .report_job_failure
|
||||||
|
|
||||||
|
include:
|
||||||
|
- local: .gitlab/configs/common.yml
|
||||||
|
- local: .gitlab/configs/lassen-config.yml
|
||||||
|
- local: .gitlab/configs/setup-build-and-test.yml
|
||||||
|
- local: .gitlab/configs/report-build-and-test.yml
|
||||||
@@ -1,4 +1,4 @@
|
|||||||
# Copyright (c) 2010-2025, Lawrence Livermore National Security, LLC. Produced
|
# Copyright (c) 2010-2022, Lawrence Livermore National Security, LLC. Produced
|
||||||
# at the Lawrence Livermore National Laboratory. All Rights reserved. See files
|
# at the Lawrence Livermore National Laboratory. All Rights reserved. See files
|
||||||
# LICENSE and NOTICE for details. LLNL-CODE-806117.
|
# LICENSE and NOTICE for details. LLNL-CODE-806117.
|
||||||
#
|
#
|
||||||
@@ -11,7 +11,6 @@
|
|||||||
|
|
||||||
variables:
|
variables:
|
||||||
BASELINE_TEST: baseline
|
BASELINE_TEST: baseline
|
||||||
MACHINE_NAME: dane
|
|
||||||
|
|
||||||
stages:
|
stages:
|
||||||
- setup
|
- setup
|
||||||
@@ -20,27 +19,8 @@ stages:
|
|||||||
- cleanup
|
- cleanup
|
||||||
- baseline_publish
|
- baseline_publish
|
||||||
|
|
||||||
.on_dane:
|
baselinecheck_mfem_intel_quartz:
|
||||||
tags:
|
extends: [.on_quartz]
|
||||||
- shell
|
|
||||||
- dane
|
|
||||||
rules:
|
|
||||||
# Don't run dane jobs if...
|
|
||||||
- if: '$ON_DANE == "OFF"'
|
|
||||||
when: never
|
|
||||||
# Don't run autotest update if...
|
|
||||||
# Note: in some cases, the content of AUTOTEST can be '${AUTOTEST}', so we
|
|
||||||
# need to treat that value as the default value of 'OFF'.
|
|
||||||
- if: '$CI_JOB_NAME =~ /report/ && $AUTOTEST != "ON" && $AUTOTEST != "YES"'
|
|
||||||
when: never
|
|
||||||
# Always cleanup
|
|
||||||
- if: '$CI_JOB_NAME =~ /cleanup/'
|
|
||||||
when: always
|
|
||||||
# Default is to run if previous stage succeeded
|
|
||||||
- when: on_success
|
|
||||||
|
|
||||||
baselinecheck_mfem_intel_dane:
|
|
||||||
extends: [.on_dane]
|
|
||||||
stage: baseline_check
|
stage: baseline_check
|
||||||
variables:
|
variables:
|
||||||
# TPLS_DIR is used in .gitlab/scripts/baseline to provide the tpls location
|
# TPLS_DIR is used in .gitlab/scripts/baseline to provide the tpls location
|
||||||
@@ -49,13 +29,10 @@ baselinecheck_mfem_intel_dane:
|
|||||||
# .gitlab/configs/setup-baseline.yml.
|
# .gitlab/configs/setup-baseline.yml.
|
||||||
TPLS_DIR: ${BUILD_ROOT}/tpls
|
TPLS_DIR: ${BUILD_ROOT}/tpls
|
||||||
script:
|
script:
|
||||||
- echo "AUTOTEST=$AUTOTEST"
|
|
||||||
- echo "AUTOTEST_COMMIT=$AUTOTEST_COMMIT"
|
|
||||||
- echo "AUTOTEST_ROOT=$AUTOTEST_ROOT"
|
|
||||||
- echo ${BUILD_ROOT}
|
- echo ${BUILD_ROOT}
|
||||||
- echo ${TPLS_DIR}
|
- echo ${TPLS_DIR}
|
||||||
# Used by the tests in MFEM/tests, dane has 224 threads/node:
|
# Used by the tests in MFEM/tests:
|
||||||
- export MFEM_TEST_NP=192
|
- export MFEM_TEST_NP=32
|
||||||
# The next script uses the following environment variables:
|
# The next script uses the following environment variables:
|
||||||
# * BASELINE_TEST, SYS_TYPE, CI_PROJECT_DIR, ARTIFACTS_DIR,
|
# * BASELINE_TEST, SYS_TYPE, CI_PROJECT_DIR, ARTIFACTS_DIR,
|
||||||
# * BUILD_ROOT, TPLS_DIR, MACHINE_NAME
|
# * BUILD_ROOT, TPLS_DIR, MACHINE_NAME
|
||||||
@@ -67,7 +44,7 @@ baselinecheck_mfem_intel_dane:
|
|||||||
allow_failure: true
|
allow_failure: true
|
||||||
|
|
||||||
cleanup:
|
cleanup:
|
||||||
extends: .on_dane
|
extends: .on_quartz
|
||||||
stage: cleanup
|
stage: cleanup
|
||||||
variables:
|
variables:
|
||||||
GIT_STRATEGY: none
|
GIT_STRATEGY: none
|
||||||
@@ -76,7 +53,7 @@ cleanup:
|
|||||||
- rm -rf "${BUILD_ROOT}" || true
|
- rm -rf "${BUILD_ROOT}" || true
|
||||||
|
|
||||||
report_baseline:
|
report_baseline:
|
||||||
extends: [.on_dane]
|
extends: [.on_quartz]
|
||||||
stage: baseline_report
|
stage: baseline_report
|
||||||
script:
|
script:
|
||||||
- echo ${MACHINE_NAME}
|
- echo ${MACHINE_NAME}
|
||||||
@@ -89,10 +66,12 @@ report_baseline:
|
|||||||
date
|
date
|
||||||
echo "Waiting to acquire lock on '$PWD/autotest.lock' ..."
|
echo "Waiting to acquire lock on '$PWD/autotest.lock' ..."
|
||||||
# try to get an exclusive lock on fd 9 (autotest.lock) repeating the try
|
# try to get an exclusive lock on fd 9 (autotest.lock) repeating the try
|
||||||
# every 5 seconds; we may want to add a counter for the number of
|
# every 5 seconds; simply using no timeout, i.e. 'flock 9', causes the
|
||||||
|
# command to hang indefinitely sometimes, so we use the timeout & retry
|
||||||
|
# as a workaround; we may want to add a counter for the number of
|
||||||
# retries to interrupt a potential infinite loop
|
# retries to interrupt a potential infinite loop
|
||||||
while ! flock -n 9; do
|
while ! flock -w 5 9; do
|
||||||
sleep 5
|
true
|
||||||
done
|
done
|
||||||
echo "Acquired lock on '$PWD/autotest.lock'"
|
echo "Acquired lock on '$PWD/autotest.lock'"
|
||||||
date
|
date
|
||||||
@@ -103,26 +82,18 @@ report_baseline:
|
|||||||
rundir="${MACHINE_NAME}/$(date +%Y-%m-%d)-gitlab-${BASELINE_TEST}-${CI_COMMIT_REF_SLUG}"
|
rundir="${MACHINE_NAME}/$(date +%Y-%m-%d)-gitlab-${BASELINE_TEST}-${CI_COMMIT_REF_SLUG}"
|
||||||
rundir=$(${CI_PROJECT_DIR}/.gitlab/scripts/safe_create_rundir ${rundir})
|
rundir=$(${CI_PROJECT_DIR}/.gitlab/scripts/safe_create_rundir ${rundir})
|
||||||
cp ${CI_PROJECT_DIR}/${ARTIFACTS_DIR}/* ${rundir}
|
cp ${CI_PROJECT_DIR}/${ARTIFACTS_DIR}/* ${rundir}
|
||||||
|
# We create an autotest-email.html file, because that's how we signal that there was a diff (temporary).
|
||||||
|
if [[ -f ${rundir}/${BASELINE_TEST}.err ]]; then
|
||||||
|
cp ${rundir}/${BASELINE_TEST}.err ${rundir}/autotest-email.html
|
||||||
|
fi
|
||||||
printf "%s\n" "" "Pipeline URL:" "$CI_PIPELINE_URL" \
|
printf "%s\n" "" "Pipeline URL:" "$CI_PIPELINE_URL" \
|
||||||
>> ${rundir}/pipeline.txt
|
>> ${rundir}/pipeline.txt
|
||||||
# We create an autotest-email.html file, because that's how we signal
|
|
||||||
# that there was an error / diff (temporary).
|
|
||||||
if [[ -f ${rundir}/${BASELINE_TEST}.err ]] || \
|
|
||||||
[[ -f ${rundir}/${BASELINE_TEST}-${MACHINE_NAME}.diff ]]; then
|
|
||||||
cp ${rundir}/pipeline.txt ${rundir}/autotest-email.html
|
|
||||||
fi
|
|
||||||
msg="GitLab CI log for ${BASELINE_TEST} on ${MACHINE_NAME} ($(date +%Y-%m-%d))"
|
msg="GitLab CI log for ${BASELINE_TEST} on ${MACHINE_NAME} ($(date +%Y-%m-%d))"
|
||||||
# Note: in some cases, the content of AUTOTEST_COMMIT can be
|
if [[ "$AUTOTEST_COMMIT" != "NO" ]]; then
|
||||||
# '${AUTOTEST_COMMIT}', so we need to treat that value as the default
|
|
||||||
# value of 'ON'.
|
|
||||||
if [[ "$AUTOTEST_COMMIT" == '${AUTOTEST_COMMIT}' ]]; then
|
|
||||||
AUTOTEST_COMMIT="ON"
|
|
||||||
fi
|
|
||||||
if [[ "$AUTOTEST_COMMIT" == "ON" || "$AUTOTEST_COMMIT" == "YES" ]]; then
|
|
||||||
git pull && \
|
git pull && \
|
||||||
git add ${rundir} && \
|
git add ${rundir} && \
|
||||||
git commit -m "${msg}" && \
|
git commit -m "${msg}" && \
|
||||||
${CI_PROJECT_DIR}/.gitlab/scripts/git_try_to_push
|
git push origin master
|
||||||
else
|
else
|
||||||
for file in ${rundir}/*; do
|
for file in ${rundir}/*; do
|
||||||
echo "------------------------------"
|
echo "------------------------------"
|
||||||
@@ -142,12 +113,12 @@ report_baseline:
|
|||||||
exit $err
|
exit $err
|
||||||
) 9> autotest.lock
|
) 9> autotest.lock
|
||||||
|
|
||||||
baselinepublish_mfem_dane:
|
baselinepublish_mfem_quartz:
|
||||||
extends: [.on_dane]
|
extends: [.on_quartz]
|
||||||
stage: baseline_publish
|
stage: baseline_publish
|
||||||
rules:
|
rules:
|
||||||
# - if: '$CI_COMMIT_BRANCH == "master" || $REBASELINE == "ON"'
|
# - if: '$CI_COMMIT_BRANCH == "master" || $REBASELINE == "YES"'
|
||||||
- if: '$REBASELINE == "ON"'
|
- if: '$REBASELINE == "YES"'
|
||||||
when: manual
|
when: manual
|
||||||
script:
|
script:
|
||||||
- echo ${BUILD_ROOT}
|
- echo ${BUILD_ROOT}
|
||||||
@@ -157,5 +128,6 @@ baselinepublish_mfem_dane:
|
|||||||
- .gitlab/scripts/rebaseline
|
- .gitlab/scripts/rebaseline
|
||||||
|
|
||||||
include:
|
include:
|
||||||
- local: .gitlab/custom-jobs-and-variables.yml
|
- local: .gitlab/configs/common.yml
|
||||||
|
- local: .gitlab/configs/quartz-config.yml
|
||||||
- local: .gitlab/configs/setup-baseline.yml
|
- local: .gitlab/configs/setup-baseline.yml
|
||||||
@@ -0,0 +1,99 @@
|
|||||||
|
# Copyright (c) 2010-2022, Lawrence Livermore National Security, LLC. Produced
|
||||||
|
# at the Lawrence Livermore National Laboratory. All Rights reserved. See files
|
||||||
|
# LICENSE and NOTICE for details. LLNL-CODE-806117.
|
||||||
|
#
|
||||||
|
# This file is part of the MFEM library. For more information and source code
|
||||||
|
# availability visit https://mfem.org.
|
||||||
|
#
|
||||||
|
# MFEM is free software; you can redistribute it and/or modify it under the
|
||||||
|
# terms of the BSD-3 license. We welcome feedback and contributions, see file
|
||||||
|
# CONTRIBUTING.md for details.
|
||||||
|
|
||||||
|
stages:
|
||||||
|
- setup
|
||||||
|
- allocate_resource
|
||||||
|
- build_and_test
|
||||||
|
- release_resource_and_report
|
||||||
|
|
||||||
|
# Allocate
|
||||||
|
allocate_resource:
|
||||||
|
variables:
|
||||||
|
GIT_STRATEGY: none
|
||||||
|
extends: .on_quartz
|
||||||
|
stage: allocate_resource
|
||||||
|
script:
|
||||||
|
- echo ${ALLOC_NAME}
|
||||||
|
- salloc --exclusive --nodes=1 --partition=pdebug --time=45 --no-shell --job-name=${ALLOC_NAME}
|
||||||
|
timeout: 6h
|
||||||
|
|
||||||
|
# GitLab jobs for the Quartz machine at LLNL
|
||||||
|
debug_ser_gcc_4_9_3:
|
||||||
|
variables:
|
||||||
|
SPEC: "%gcc@4.9.3 +debug~mpi"
|
||||||
|
extends: .build_and_test_on_quartz
|
||||||
|
|
||||||
|
debug_ser_gcc_6_1_0:
|
||||||
|
variables:
|
||||||
|
SPEC: "%gcc@6.1.0 +debug~mpi"
|
||||||
|
extends: .build_and_test_on_quartz
|
||||||
|
|
||||||
|
debug_par_gcc_6_1_0:
|
||||||
|
variables:
|
||||||
|
SPEC: "%gcc@6.1.0 +debug+mpi"
|
||||||
|
extends: .build_and_test_on_quartz
|
||||||
|
|
||||||
|
opt_ser_gcc_6_1_0:
|
||||||
|
variables:
|
||||||
|
SPEC: "%gcc@6.1.0 ~mpi"
|
||||||
|
extends: .build_and_test_on_quartz
|
||||||
|
|
||||||
|
opt_par_gcc_6_1_0:
|
||||||
|
variables:
|
||||||
|
SPEC: "%gcc@6.1.0"
|
||||||
|
extends: .build_and_test_on_quartz
|
||||||
|
|
||||||
|
opt_par_gcc_6_1_0_sundials:
|
||||||
|
variables:
|
||||||
|
SPEC: "%gcc@6.1.0 +sundials"
|
||||||
|
extends: .build_and_test_on_quartz
|
||||||
|
|
||||||
|
opt_par_gcc_6_1_0_petsc:
|
||||||
|
variables:
|
||||||
|
SPEC: "%gcc@6.1.0 +petsc ^petsc+mumps~superlu-dist"
|
||||||
|
extends: .build_and_test_on_quartz
|
||||||
|
|
||||||
|
opt_par_gcc_6_1_0_pumi:
|
||||||
|
variables:
|
||||||
|
SPEC: "%gcc@6.1.0 +pumi"
|
||||||
|
extends: .build_and_test_on_quartz
|
||||||
|
|
||||||
|
# Release
|
||||||
|
release_resource:
|
||||||
|
variables:
|
||||||
|
GIT_STRATEGY: none
|
||||||
|
extends: .on_quartz
|
||||||
|
stage: release_resource_and_report
|
||||||
|
script:
|
||||||
|
- echo ${ALLOC_NAME}
|
||||||
|
- export JOBID=$(squeue -h --name=${ALLOC_NAME} --format=%A)
|
||||||
|
- echo ${JOBID}
|
||||||
|
- ([[ -n "${JOBID}" ]] && scancel ${JOBID})
|
||||||
|
|
||||||
|
# Jobs report
|
||||||
|
report_job_success:
|
||||||
|
stage: release_resource_and_report
|
||||||
|
extends:
|
||||||
|
- .on_quartz
|
||||||
|
- .report_job_success
|
||||||
|
|
||||||
|
report_job_failure:
|
||||||
|
stage: release_resource_and_report
|
||||||
|
extends:
|
||||||
|
- .on_quartz
|
||||||
|
- .report_job_failure
|
||||||
|
|
||||||
|
include:
|
||||||
|
- local: .gitlab/configs/common.yml
|
||||||
|
- local: .gitlab/configs/quartz-config.yml
|
||||||
|
- local: .gitlab/configs/setup-build-and-test.yml
|
||||||
|
- local: .gitlab/configs/report-build-and-test.yml
|
||||||
+34
-22
@@ -1,6 +1,6 @@
|
|||||||
#!/bin/bash
|
#!/bin/bash
|
||||||
|
|
||||||
# Copyright (c) 2010-2025, Lawrence Livermore National Security, LLC. Produced
|
# Copyright (c) 2010-2022, Lawrence Livermore National Security, LLC. Produced
|
||||||
# at the Lawrence Livermore National Laboratory. All Rights reserved. See files
|
# at the Lawrence Livermore National Laboratory. All Rights reserved. See files
|
||||||
# LICENSE and NOTICE for details. LLNL-CODE-806117.
|
# LICENSE and NOTICE for details. LLNL-CODE-806117.
|
||||||
#
|
#
|
||||||
@@ -14,9 +14,6 @@
|
|||||||
# locals
|
# locals
|
||||||
glob_err=${BASELINE_TEST}.err
|
glob_err=${BASELINE_TEST}.err
|
||||||
base=${BASELINE_TEST}-${SYS_TYPE}
|
base=${BASELINE_TEST}-${SYS_TYPE}
|
||||||
if [[ "${MACHINE_NAME}" == "dane" ]]; then
|
|
||||||
base="${BASELINE_TEST}-${MACHINE_NAME}"
|
|
||||||
fi
|
|
||||||
base_diff=${base}.diff
|
base_diff=${base}.diff
|
||||||
base_patch=${base}.patch
|
base_patch=${base}.patch
|
||||||
base_out=${base}.out
|
base_out=${base}.out
|
||||||
@@ -31,46 +28,61 @@ cd tests
|
|||||||
mkdir _${BASELINE_TEST} && cd _${BASELINE_TEST}
|
mkdir _${BASELINE_TEST} && cd _${BASELINE_TEST}
|
||||||
|
|
||||||
# run
|
# run
|
||||||
if [[ "${MACHINE_NAME}" == "dane" ]]; then
|
if [[ "${MACHINE_NAME}" == "quartz" || "${MACHINE_NAME}" == "ruby" ]]; then
|
||||||
srun --nodes=1 -t 60 --exclusive --reservation=ci ../runtest ../../mfem "${BASELINE_TEST} ${TPLS_DIR}"
|
salloc --nodes=1 -p pdebug ../runtest ../../mfem "${BASELINE_TEST} ${TPLS_DIR}"
|
||||||
elif [[ ${MACHINE_NAME} == "corona" ]]; then
|
elif [[ ${MACHINE_NAME} == "corona" ]]; then
|
||||||
srun --nodes=1 -t 60 -p pbatch ../runtest ../../mfem "${BASELINE_TEST} ${TPLS_DIR}"
|
salloc --nodes=1 -t 60 -p pbatch ../runtest ../../mfem "${BASELINE_TEST} ${TPLS_DIR}"
|
||||||
|
elif [[ ${MACHINE_NAME} == "lassen" ]]; then
|
||||||
|
lalloc 1 -q pdebug ../runtest ../../mfem "${BASELINE_TEST} ${TPLS_DIR}"
|
||||||
else
|
else
|
||||||
echo "Unknown machine: MACHINE_NAME=$MACHINE_NAME"
|
echo "Unknown machine: MACHINE_NAME=$MACHINE_NAME"
|
||||||
exit 1
|
exit 1
|
||||||
fi
|
fi
|
||||||
status="$?"
|
|
||||||
|
|
||||||
# post
|
# post
|
||||||
mkdir ${artifacts_path}
|
mkdir ${artifacts_path}
|
||||||
|
|
||||||
if [[ -f ${BASELINE_TEST}.out ]]; then
|
if [[ -s ${glob_err} ]]
|
||||||
cp ${BASELINE_TEST}.out ${artifacts_path}
|
then
|
||||||
fi
|
echo "ERROR during ${BASELINE_TEST} execution";
|
||||||
if [[ -s ${glob_err} ]]; then
|
echo "Here is the ${glob_err} file content";
|
||||||
echo "ERROR during ${BASELINE_TEST} execution"
|
|
||||||
echo "Here is the ${glob_err} file content"
|
|
||||||
cat ${glob_err}
|
cat ${glob_err}
|
||||||
cp ${glob_err} ${artifacts_path}/${glob_err}
|
cp ${glob_err} ${artifacts_path}/${glob_err}
|
||||||
status=1
|
exit 1;
|
||||||
fi
|
elif [[ ! -f ${base_patch} && ! -f ${base_out} ]]
|
||||||
if [[ -f ${base_patch} ]]; then
|
then
|
||||||
|
echo "Something went WRONG in ${BASELINE_TEST}:";
|
||||||
|
echo "Either ${base_patch} or ${base_out} should exists";
|
||||||
|
exit 1;
|
||||||
|
elif [[ -f ${base_patch} ]]
|
||||||
|
then
|
||||||
echo "${BASELINE_TEST}: Differences found, patch generated"
|
echo "${BASELINE_TEST}: Differences found, patch generated"
|
||||||
cp ${base_patch} ${artifacts_path}/${base_patch}
|
cp ${base_patch} ${artifacts_path}/${base_patch}
|
||||||
elif [[ -f ${base_out} ]]; then
|
elif [[ -f ${base_out} ]]
|
||||||
|
then
|
||||||
echo "${BASELINE_TEST}: Differences found, replacement file generated"
|
echo "${BASELINE_TEST}: Differences found, replacement file generated"
|
||||||
cp ${base_out} ${artifacts_path}/${base_out}
|
cp ${base_out} ${artifacts_path}/${base_out}
|
||||||
fi
|
fi
|
||||||
|
|
||||||
|
if [[ -f ${BASELINE_TEST}.out ]]; then
|
||||||
|
cp ${BASELINE_TEST}.out ${artifacts_path}
|
||||||
|
fi
|
||||||
|
|
||||||
# base_diff won't even exist if there is no difference.
|
# base_diff won't even exist if there is no difference.
|
||||||
if [[ -f ${base_diff} ]]; then
|
if [[ -f ${base_diff} ]]
|
||||||
|
then
|
||||||
echo "${BASELINE_TEST}: Relevant differences (filtered diff) ..."
|
echo "${BASELINE_TEST}: Relevant differences (filtered diff) ..."
|
||||||
cat ${base_diff}
|
cat ${base_diff}
|
||||||
cp ${base_diff} ${artifacts_path}/${base_diff}
|
cp ${base_diff} ${artifacts_path}/${base_diff}
|
||||||
status=1
|
# We create a .err file, because that's how we signal that there was a diff.
|
||||||
|
cp ${base_diff} ${artifacts_path}/gitlab-${BASELINE_TEST}-${MACHINE_NAME}.err
|
||||||
fi
|
fi
|
||||||
if [[ $status -eq 0 ]]; then
|
|
||||||
|
if [[ ! -s ${base_diff} ]]
|
||||||
|
then
|
||||||
echo "${BASELINE_TEST}: PASSED"
|
echo "${BASELINE_TEST}: PASSED"
|
||||||
|
true
|
||||||
else
|
else
|
||||||
echo "${BASELINE_TEST}: FAILED"
|
echo "${BASELINE_TEST}: FAILED"
|
||||||
|
false
|
||||||
fi
|
fi
|
||||||
exit $status
|
|
||||||
|
|||||||
@@ -1,41 +0,0 @@
|
|||||||
#!/bin/bash
|
|
||||||
|
|
||||||
# Copyright (c) 2010-2025, Lawrence Livermore National Security, LLC. Produced
|
|
||||||
# at the Lawrence Livermore National Laboratory. All Rights reserved. See files
|
|
||||||
# LICENSE and NOTICE for details. LLNL-CODE-806117.
|
|
||||||
#
|
|
||||||
# This file is part of the MFEM library. For more information and source code
|
|
||||||
# availability visit https://mfem.org.
|
|
||||||
#
|
|
||||||
# MFEM is free software; you can redistribute it and/or modify it under the
|
|
||||||
# terms of the BSD-3 license. We welcome feedback and contributions, see file
|
|
||||||
# CONTRIBUTING.md for details.
|
|
||||||
|
|
||||||
# Try to push to the remote 5 times. If the push fails, and the local and remote
|
|
||||||
# have diverged, then pull from the remote to merge changes, and try pushing
|
|
||||||
# again. If some other failure happens
|
|
||||||
for i in {1..5}; do
|
|
||||||
git push origin master && exit 0
|
|
||||||
# Wait for 20 seconds in case someone else is pushing to the remote
|
|
||||||
# concurrently
|
|
||||||
sleep 20
|
|
||||||
# Fetch any updates from the remote
|
|
||||||
git remote update
|
|
||||||
# Get the latest commit on the local branch
|
|
||||||
LOCAL=$(git rev-parse @)
|
|
||||||
# Get the latest commit on the remote
|
|
||||||
REMOTE=$(git rev-parse @{u})
|
|
||||||
# Get the common ancestor
|
|
||||||
BASE=$(git merge-base @ @{u})
|
|
||||||
# Have the local and remote diverged?
|
|
||||||
if [[ $LOCAL != $REMOTE && $LOCAL != $BASE && $REMOTE != $BASE ]]; then
|
|
||||||
git pull
|
|
||||||
if [[ $? == 0 ]]; then
|
|
||||||
continue
|
|
||||||
else
|
|
||||||
exit 1 # Something else went wrong trying to pull
|
|
||||||
fi
|
|
||||||
fi
|
|
||||||
done
|
|
||||||
|
|
||||||
exit 1 # Did not succeed in 5 attempts
|
|
||||||
@@ -1,6 +1,6 @@
|
|||||||
#!/bin/bash
|
#!/bin/bash
|
||||||
|
|
||||||
# Copyright (c) 2010-2025, Lawrence Livermore National Security, LLC. Produced
|
# Copyright (c) 2010-2022, Lawrence Livermore National Security, LLC. Produced
|
||||||
# at the Lawrence Livermore National Laboratory. All Rights reserved. See files
|
# at the Lawrence Livermore National Laboratory. All Rights reserved. See files
|
||||||
# LICENSE and NOTICE for details. LLNL-CODE-806117.
|
# LICENSE and NOTICE for details. LLNL-CODE-806117.
|
||||||
#
|
#
|
||||||
@@ -11,7 +11,7 @@
|
|||||||
# terms of the BSD-3 license. We welcome feedback and contributions, see file
|
# terms of the BSD-3 license. We welcome feedback and contributions, see file
|
||||||
# CONTRIBUTING.md for details.
|
# CONTRIBUTING.md for details.
|
||||||
|
|
||||||
# There will be collision between corona and dane baselines.
|
# There will be collision between corona and quartz baselines.
|
||||||
# Once the corresponding files have been generated, we can switch to machine
|
# Once the corresponding files have been generated, we can switch to machine
|
||||||
# specific ref.
|
# specific ref.
|
||||||
ARTIFACT_PATH=${CI_PROJECT_DIR}/${ARTIFACTS_DIR}/baseline-${SYS_TYPE}
|
ARTIFACT_PATH=${CI_PROJECT_DIR}/${ARTIFACTS_DIR}/baseline-${SYS_TYPE}
|
||||||
@@ -21,7 +21,7 @@ PATCH_FILE=${ARTIFACT_PATH}.patch
|
|||||||
FULL_FILE=${ARTIFACT_PATH}.out
|
FULL_FILE=${ARTIFACT_PATH}.out
|
||||||
DIFF_FILE=${ARTIFACT_PATH}.diff
|
DIFF_FILE=${ARTIFACT_PATH}.diff
|
||||||
|
|
||||||
# There will be collision between corona and dane baselines.
|
# There will be collision between corona and quartz baselines.
|
||||||
# Once the corresponding files have been generated, we can switch to machine
|
# Once the corresponding files have been generated, we can switch to machine
|
||||||
# specific ref.
|
# specific ref.
|
||||||
SAVED_NAME=baseline-${SYS_TYPE}.saved
|
SAVED_NAME=baseline-${SYS_TYPE}.saved
|
||||||
|
|||||||
@@ -1,118 +0,0 @@
|
|||||||
#!/bin/bash
|
|
||||||
|
|
||||||
# Copyright (c) 2010-2025, Lawrence Livermore National Security, LLC. Produced
|
|
||||||
# at the Lawrence Livermore National Laboratory. All Rights reserved. See files
|
|
||||||
# LICENSE and NOTICE for details. LLNL-CODE-806117.
|
|
||||||
#
|
|
||||||
# This file is part of the MFEM library. For more information and source code
|
|
||||||
# availability visit https://mfem.org.
|
|
||||||
#
|
|
||||||
# MFEM is free software; you can redistribute it and/or modify it under the
|
|
||||||
# terms of the BSD-3 license. We welcome feedback and contributions, see file
|
|
||||||
# CONTRIBUTING.md for details.
|
|
||||||
|
|
||||||
function info_msg ()
|
|
||||||
{
|
|
||||||
echo "[Information:] ${1}"
|
|
||||||
}
|
|
||||||
|
|
||||||
function error_msg ()
|
|
||||||
{
|
|
||||||
echo "[Error:] ${1}"
|
|
||||||
}
|
|
||||||
|
|
||||||
# Perform a report while holding a lock file to prevent concurrency on
|
|
||||||
# the destination.
|
|
||||||
# Usage:
|
|
||||||
# locked_clone <report_function> <lock_name>
|
|
||||||
function locked_report ()
|
|
||||||
{
|
|
||||||
if ! command -v flock
|
|
||||||
then
|
|
||||||
error_msg "Required command 'flock' not found"
|
|
||||||
exit 1
|
|
||||||
fi
|
|
||||||
|
|
||||||
info_msg "Will report ${1} while holding a lock in ${2}"
|
|
||||||
|
|
||||||
( date; info_msg "Waiting to acquire lock on '${PWD}/${2}.lock' ..."
|
|
||||||
# try to get an exclusive lock on fd 9 (mfem-data.lock) repeating the
|
|
||||||
# try every 5 seconds; we may want to add a counter for the number of
|
|
||||||
# retries to interrupt a potential infinite loop
|
|
||||||
while ! flock -n 9; do sleep 5; done
|
|
||||||
date; info_msg "Acquired lock on '${PWD}/${2}.lock'"
|
|
||||||
|
|
||||||
report ${1}
|
|
||||||
err=$?
|
|
||||||
|
|
||||||
# sleep for a period to allow NFS to propagate the above changes;
|
|
||||||
# clearly, there is no guarantee that other NFS clients will see the
|
|
||||||
# changes even after the timeout
|
|
||||||
sleep 10
|
|
||||||
exit $err
|
|
||||||
) 9> ${2}.lock
|
|
||||||
}
|
|
||||||
|
|
||||||
function report ()
|
|
||||||
{
|
|
||||||
if [[ "${1}" == "SUCCESS" ]]
|
|
||||||
then
|
|
||||||
info_msg "All the ${MACHINE_NAME} jobs passed"
|
|
||||||
status_msg="The 'build-and-test' jobs on ${MACHINE_NAME} were SUCCESSFUL."
|
|
||||||
elif [[ "${1}" == "FAILURE" ]]
|
|
||||||
then
|
|
||||||
info_msg "At least one failure on ${MACHINE_NAME}"
|
|
||||||
status_msg="Some 'build-and-test' jobs on ${MACHINE_NAME} FAILED."
|
|
||||||
else
|
|
||||||
error_msg "Unknown status: ${1} ... aborting"
|
|
||||||
exit 1
|
|
||||||
fi
|
|
||||||
|
|
||||||
cd ${AUTOTEST_ROOT}/autotest || \
|
|
||||||
{ error_msg "Invalid 'autotest' dir: ${AUTOTEST_ROOT}/autotest"; exit 1; }
|
|
||||||
mkdir -p ${MACHINE_NAME}
|
|
||||||
|
|
||||||
rundir="${MACHINE_NAME}/$(date +%Y-%m-%d)-gitlab-ci-${CI_COMMIT_REF_SLUG}"
|
|
||||||
rundir=$(${CI_PROJECT_DIR}/.gitlab/scripts/safe_create_rundir $rundir)
|
|
||||||
|
|
||||||
printf "%s\n" "${status_msg}" \
|
|
||||||
"Pipeline URL:" "$CI_PIPELINE_URL" > ${rundir}/gitlab.err
|
|
||||||
|
|
||||||
msg="GitLab CI log for build-and-test on ${MACHINE_NAME} ($(date +%Y-%m-%d))"
|
|
||||||
|
|
||||||
if [[ "${1}" == "FAILURE" ]]
|
|
||||||
then
|
|
||||||
# Create 'autotest-email.html' to indicate failure:
|
|
||||||
cp ${rundir}/gitlab.err ${rundir}/autotest-email.html
|
|
||||||
fi
|
|
||||||
|
|
||||||
# Note: in some cases, the content of AUTOTEST_COMMIT can be
|
|
||||||
# '${AUTOTEST_COMMIT}', so we need to treat that value as the default
|
|
||||||
# value of 'ON'.
|
|
||||||
if [[ "$AUTOTEST_COMMIT" == '${AUTOTEST_COMMIT}' ]]; then
|
|
||||||
AUTOTEST_COMMIT="ON"
|
|
||||||
fi
|
|
||||||
if [[ "$AUTOTEST_COMMIT" == "ON" || "$AUTOTEST_COMMIT" == "YES" ]]; then
|
|
||||||
git pull && \
|
|
||||||
git add ${rundir} && \
|
|
||||||
git commit -m "${msg}" && \
|
|
||||||
${CI_PROJECT_DIR}/.gitlab/scripts/git_try_to_push
|
|
||||||
else
|
|
||||||
for file in ${rundir}/*; do
|
|
||||||
echo "------------------------------"
|
|
||||||
echo "Content of '$file'"
|
|
||||||
echo "******************************"
|
|
||||||
cat $file
|
|
||||||
echo "******************************"
|
|
||||||
done
|
|
||||||
rm -rf ${rundir} || true
|
|
||||||
fi
|
|
||||||
}
|
|
||||||
|
|
||||||
export MACHINE_NAME=${CI_MACHINE}
|
|
||||||
info_msg "MACHINE_NAME is ${MACHINE_NAME}"
|
|
||||||
info_msg "AUTOTEST_ROOT is ${AUTOTEST_ROOT}"
|
|
||||||
info_msg "AUTOTEST=$AUTOTEST"
|
|
||||||
info_msg "AUTOTEST_COMMIT=$AUTOTEST_COMMIT"
|
|
||||||
|
|
||||||
cd ${AUTOTEST_ROOT} && locked_report ${1} autotest
|
|
||||||
+45
@@ -0,0 +1,45 @@
|
|||||||
|
#!/bin/bash
|
||||||
|
|
||||||
|
# Copyright (c) 2010-2022, Lawrence Livermore National Security, LLC. Produced
|
||||||
|
# at the Lawrence Livermore National Laboratory. All Rights reserved. See files
|
||||||
|
# LICENSE and NOTICE for details. LLNL-CODE-806117.
|
||||||
|
#
|
||||||
|
# This file is part of the MFEM library. For more information and source code
|
||||||
|
# availability visit https://mfem.org.
|
||||||
|
#
|
||||||
|
# MFEM is free software; you can redistribute it and/or modify it under the
|
||||||
|
# terms of the BSD-3 license. We welcome feedback and contributions, see file
|
||||||
|
# CONTRIBUTING.md for details.
|
||||||
|
|
||||||
|
echo "Runs if there was at least one failure on ${MACHINE_NAME}"
|
||||||
|
|
||||||
|
cd ${AUTOTEST_ROOT}/autotest || \
|
||||||
|
{ echo "Invalid 'autotest' dir: ${AUTOTEST_ROOT}/autotest"; exit 1; }
|
||||||
|
mkdir -p ${MACHINE_NAME}
|
||||||
|
|
||||||
|
rundir="${MACHINE_NAME}/$(date +%Y-%m-%d)-gitlab-ci-${CI_COMMIT_REF_SLUG}"
|
||||||
|
rundir=$(${CI_PROJECT_DIR}/.gitlab/scripts/safe_create_rundir $rundir)
|
||||||
|
|
||||||
|
printf "%s\n" "Some 'build-and-test' jobs on ${MACHINE_NAME} FAILED." \
|
||||||
|
"Pipeline URL:" "$CI_PIPELINE_URL" > ${rundir}/gitlab.err
|
||||||
|
|
||||||
|
msg="GitLab CI log for build-and-test on ${MACHINE_NAME} ($(date +%Y-%m-%d))"
|
||||||
|
|
||||||
|
# Create 'autotest-email.html' to indicate failure:
|
||||||
|
cp ${rundir}/gitlab.err ${rundir}/autotest-email.html
|
||||||
|
|
||||||
|
if [[ "$AUTOTEST_COMMIT" != "NO" ]]; then
|
||||||
|
git pull && \
|
||||||
|
git add ${rundir} && \
|
||||||
|
git commit -m "${msg}" && \
|
||||||
|
git push origin master
|
||||||
|
else
|
||||||
|
for file in ${rundir}/*; do
|
||||||
|
echo "------------------------------"
|
||||||
|
echo "Content of '$file'"
|
||||||
|
echo "******************************"
|
||||||
|
cat $file
|
||||||
|
echo "******************************"
|
||||||
|
done
|
||||||
|
rm -rf ${rundir} || true
|
||||||
|
fi
|
||||||
+42
@@ -0,0 +1,42 @@
|
|||||||
|
#!/bin/bash
|
||||||
|
|
||||||
|
# Copyright (c) 2010-2022, Lawrence Livermore National Security, LLC. Produced
|
||||||
|
# at the Lawrence Livermore National Laboratory. All Rights reserved. See files
|
||||||
|
# LICENSE and NOTICE for details. LLNL-CODE-806117.
|
||||||
|
#
|
||||||
|
# This file is part of the MFEM library. For more information and source code
|
||||||
|
# availability visit https://mfem.org.
|
||||||
|
#
|
||||||
|
# MFEM is free software; you can redistribute it and/or modify it under the
|
||||||
|
# terms of the BSD-3 license. We welcome feedback and contributions, see file
|
||||||
|
# CONTRIBUTING.md for details.
|
||||||
|
|
||||||
|
echo "Can only run if all the ${MACHINE_NAME} jobs passed"
|
||||||
|
|
||||||
|
cd ${AUTOTEST_ROOT}/autotest || \
|
||||||
|
{ echo "Invalid 'autotest' dir: ${AUTOTEST_ROOT}/autotest"; exit 1; }
|
||||||
|
mkdir -p ${MACHINE_NAME}
|
||||||
|
|
||||||
|
rundir="${MACHINE_NAME}/$(date +%Y-%m-%d)-gitlab-ci-${CI_COMMIT_REF_SLUG}"
|
||||||
|
rundir=$(${CI_PROJECT_DIR}/.gitlab/scripts/safe_create_rundir $rundir)
|
||||||
|
|
||||||
|
printf "%s\n" "The 'build-and-test' jobs on ${MACHINE_NAME} were SUCCESSFUL." \
|
||||||
|
"Pipeline URL:" "$CI_PIPELINE_URL" > ${rundir}/gitlab.out
|
||||||
|
|
||||||
|
msg="GitLab CI log for build-and-test on ${MACHINE_NAME} ($(date +%Y-%m-%d))"
|
||||||
|
|
||||||
|
if [[ "$AUTOTEST_COMMIT" != "NO" ]]; then
|
||||||
|
git pull && \
|
||||||
|
git add ${rundir} && \
|
||||||
|
git commit -m "${msg}" && \
|
||||||
|
git push origin master
|
||||||
|
else
|
||||||
|
for file in ${rundir}/*; do
|
||||||
|
echo "------------------------------"
|
||||||
|
echo "Content of '$file'"
|
||||||
|
echo "******************************"
|
||||||
|
cat $file
|
||||||
|
echo "******************************"
|
||||||
|
done
|
||||||
|
rm -rf ${rundir} || true
|
||||||
|
fi
|
||||||
@@ -1,6 +1,6 @@
|
|||||||
#!/bin/bash
|
#!/bin/bash
|
||||||
|
|
||||||
# Copyright (c) 2010-2025, Lawrence Livermore National Security, LLC. Produced
|
# Copyright (c) 2010-2022, Lawrence Livermore National Security, LLC. Produced
|
||||||
# at the Lawrence Livermore National Laboratory. All Rights reserved. See files
|
# at the Lawrence Livermore National Laboratory. All Rights reserved. See files
|
||||||
# LICENSE and NOTICE for details. LLNL-CODE-806117.
|
# LICENSE and NOTICE for details. LLNL-CODE-806117.
|
||||||
#
|
#
|
||||||
|
|||||||
@@ -1,130 +0,0 @@
|
|||||||
# Copyright (c) 2010-2025, Lawrence Livermore National Security, LLC. Produced
|
|
||||||
# at the Lawrence Livermore National Laboratory. All Rights reserved. See files
|
|
||||||
# LICENSE and NOTICE for details. LLNL-CODE-806117.
|
|
||||||
#
|
|
||||||
# This file is part of the MFEM library. For more information and source code
|
|
||||||
# availability visit https://mfem.org.
|
|
||||||
#
|
|
||||||
# MFEM is free software; you can redistribute it and/or modify it under the
|
|
||||||
# terms of the BSD-3 license. We welcome feedback and contributions, see file
|
|
||||||
# CONTRIBUTING.md for details.
|
|
||||||
|
|
||||||
# The template job to test whether a machine is up.
|
|
||||||
# Expects CI_MACHINE defined to machine name.
|
|
||||||
.machine-check:
|
|
||||||
stage: prerequisites
|
|
||||||
tags: [shell, oslic]
|
|
||||||
variables:
|
|
||||||
GIT_STRATEGY: none
|
|
||||||
script:
|
|
||||||
- |
|
|
||||||
if [[ $(jq '.[env.CI_MACHINE].total_nodes_up' /usr/global/tools/lorenz/data/loginnodeStatus) == 0 ]]
|
|
||||||
then
|
|
||||||
echo -e "\e[31mNo node available on ${CI_MACHINE}\e[0m"
|
|
||||||
false && \
|
|
||||||
curl --url "https://api.github.com/repos/${GITHUB_PROJECT_ORG}/${GITHUB_PROJECT_NAME}/statuses/${CI_COMMIT_SHA}" \
|
|
||||||
--header 'Content-Type: application/json' \
|
|
||||||
--header "authorization: Bearer ${GITHUB_TOKEN}" \
|
|
||||||
--data "{ \"state\": \"failure\", \"target_url\": \"${CI_PIPELINE_URL}\", \"description\": \"GitLab ${CI_MACHINE} down\", \"context\": \"ci/gitlab/${CI_MACHINE}\" }"
|
|
||||||
exit 1
|
|
||||||
fi
|
|
||||||
|
|
||||||
###
|
|
||||||
# Trigger a build-and-test pipeline for a machine.
|
|
||||||
# Comment the jobs for machines you don’t need.
|
|
||||||
###
|
|
||||||
|
|
||||||
# One job to generate the job list for all the subpipelines
|
|
||||||
generate-job-lists:
|
|
||||||
stage: prerequisites
|
|
||||||
tags: [shell, oslic]
|
|
||||||
variables:
|
|
||||||
LOCAL_JOBS_PATH: ".gitlab/jobs"
|
|
||||||
script:
|
|
||||||
- |
|
|
||||||
echo "AUTOTEST=$AUTOTEST"
|
|
||||||
echo "AUTOTEST_COMMIT=$AUTOTEST_COMMIT"
|
|
||||||
echo "AUTOTEST_ROOT=$AUTOTEST_ROOT"
|
|
||||||
- |
|
|
||||||
cat ${LOCAL_JOBS_PATH}/dane.yml > dane-jobs.yml
|
|
||||||
if [[ ${AUTOTEST} == "ON" || ${AUTOTEST} == "YES" ]]
|
|
||||||
then
|
|
||||||
cat ${LOCAL_JOBS_PATH}/dane-reports.yml >> dane-jobs.yml
|
|
||||||
fi
|
|
||||||
- |
|
|
||||||
cat ${LOCAL_JOBS_PATH}/matrix.yml > matrix-jobs.yml
|
|
||||||
if [[ ${AUTOTEST} == "ON" || ${AUTOTEST} == "YES" ]]
|
|
||||||
then
|
|
||||||
cat ${LOCAL_JOBS_PATH}/matrix-reports.yml >> matrix-jobs.yml
|
|
||||||
fi
|
|
||||||
- |
|
|
||||||
cat ${LOCAL_JOBS_PATH}/tioga.yml > tioga-jobs.yml
|
|
||||||
if [[ ${AUTOTEST} == "ON" || ${AUTOTEST} == "YES" ]]
|
|
||||||
then
|
|
||||||
cat ${LOCAL_JOBS_PATH}/tioga-reports.yml >> tioga-jobs.yml
|
|
||||||
fi
|
|
||||||
artifacts:
|
|
||||||
paths:
|
|
||||||
- dane-jobs.yml
|
|
||||||
- matrix-jobs.yml
|
|
||||||
- tioga-jobs.yml
|
|
||||||
|
|
||||||
|
|
||||||
# DANE
|
|
||||||
dane-up-check:
|
|
||||||
variables:
|
|
||||||
CI_MACHINE: "dane"
|
|
||||||
extends: [.machine-check]
|
|
||||||
|
|
||||||
dane-build-and-test:
|
|
||||||
variables:
|
|
||||||
CI_MACHINE: "dane"
|
|
||||||
needs: [dane-up-check, generate-job-lists]
|
|
||||||
extends: [.build-and-test]
|
|
||||||
|
|
||||||
# DANE, MFEM Specific
|
|
||||||
dane-baseline:
|
|
||||||
stage: test-pipelines
|
|
||||||
variables:
|
|
||||||
# Explicitly pass down values that are not always propagated to child
|
|
||||||
# pipelines, e.g. when a variable is set in the "Settings -> CI" web
|
|
||||||
# interface (project variables).
|
|
||||||
# Note: in some cases, this does not work as expected, e.g. when the
|
|
||||||
# variable is not re-defined in the web interface; in such cases, the child
|
|
||||||
# pipeline gets a definition like '${AUTOTEST}', i.e. it behaves as if
|
|
||||||
# AUTOTEST is undefined, even though there is a default value in
|
|
||||||
# .gitlab-ci.yml.
|
|
||||||
AUTOTEST: "${AUTOTEST}"
|
|
||||||
AUTOTEST_COMMIT: "${AUTOTEST_COMMIT}"
|
|
||||||
trigger:
|
|
||||||
include: .gitlab/dane-baseline.yml
|
|
||||||
strategy: depend
|
|
||||||
forward:
|
|
||||||
pipeline_variables: true
|
|
||||||
needs: [dane-up-check]
|
|
||||||
|
|
||||||
|
|
||||||
# TIOGA
|
|
||||||
tioga-up-check:
|
|
||||||
variables:
|
|
||||||
CI_MACHINE: "tioga"
|
|
||||||
extends: [.machine-check]
|
|
||||||
|
|
||||||
tioga-build-and-test:
|
|
||||||
variables:
|
|
||||||
CI_MACHINE: "tioga"
|
|
||||||
needs: [tioga-up-check, generate-job-lists]
|
|
||||||
extends: [.build-and-test]
|
|
||||||
|
|
||||||
|
|
||||||
# Matrix
|
|
||||||
matrix-up-check:
|
|
||||||
variables:
|
|
||||||
CI_MACHINE: "matrix"
|
|
||||||
extends: [.machine-check]
|
|
||||||
|
|
||||||
matrix-build-and-test:
|
|
||||||
variables:
|
|
||||||
CI_MACHINE: "matrix"
|
|
||||||
needs: [matrix-up-check, generate-job-lists]
|
|
||||||
extends: [.build-and-test]
|
|
||||||
@@ -8,780 +8,31 @@
|
|||||||
https://mfem.org
|
https://mfem.org
|
||||||
|
|
||||||
|
|
||||||
Version 4.9.1 (development)
|
Version 4.4.1 (development)
|
||||||
===========================
|
===========================
|
||||||
|
|
||||||
- Policy for AI-assisted contribution added to CONTRIBUTING.md
|
|
||||||
|
|
||||||
Discretization improvements
|
|
||||||
---------------------------
|
|
||||||
- Replaced legacy simplex quadrature rules with symmetric positive-weight
|
|
||||||
rules for triangles (orders 0-25) and tetrahedra (orders 0-20). These
|
|
||||||
rules guarantee all-positive weights and interior quadrature points,
|
|
||||||
improving numerical stability. Higher orders fall back to Grundmann-Moller.
|
|
||||||
Triangle rules: Witherden & Vincent, Comput. Math. Appl. 69(10):1232-1241,
|
|
||||||
2015.
|
|
||||||
Tet rules (d=1-13): Witherden & Vincent (ibid).
|
|
||||||
Tet rules (d=14-20): Chuluunbaatar et al., Comput. Math. Appl. 124:89-97,
|
|
||||||
2022.
|
|
||||||
|
|
||||||
- Improved the gridfunction projection routines. Projections work for Scalar,
|
|
||||||
Vector and VectorFE, also NURBS versions. Optionally different types of
|
|
||||||
projections can be selected, default behaviour has not changed.
|
|
||||||
|
|
||||||
- Added methods to estimate function extremum using piecewise linear bounds +
|
|
||||||
recursive subdivision.
|
|
||||||
|
|
||||||
Meshing improvements
|
Meshing improvements
|
||||||
--------------------
|
--------------------
|
||||||
- Improved support for 1D NURBS meshes with variable order, including using
|
|
||||||
the patches construct for 1D NURBS meshes.
|
|
||||||
|
|
||||||
New and updated examples and miniapps
|
|
||||||
-------------------------------------
|
|
||||||
- Electromagnetics/lorentz miniapp has been updated to leverage the ParticleSet
|
|
||||||
capability.
|
|
||||||
|
|
||||||
|
|
||||||
Version 4.9, released on Dec 11, 2025
|
|
||||||
=====================================
|
|
||||||
|
|
||||||
Starting with this version, MFEM requires a C++17 compiler.
|
|
||||||
|
|
||||||
Discretization improvements
|
|
||||||
---------------------------
|
|
||||||
- Introduced dFEM: a new MFEM capability for Automatic Differentiation (AD) of
|
|
||||||
nonlinear finite element operators, based on Enzyme or dual numbers AD at
|
|
||||||
quadrature points. These features are part of the new mfem::future namespace
|
|
||||||
and some of the API can change in the future. See the new dFEM minimal surface
|
|
||||||
miniapp in the miniapps/dfem/ directory for illustration of dFEM's use. Using
|
|
||||||
Enzyme for AD in MFEM is tested with clang v19 and requires clang/LLVM built
|
|
||||||
with plugin support. See INSTALL for more details.
|
|
||||||
|
|
||||||
- Introduced initial support for particle methods in MFEM with new classes
|
|
||||||
Particle, ParticleSet and ParticleVector.
|
|
||||||
* Particle is a convenient interface for individual particle data.
|
|
||||||
* ParticleSet manages and stores particle data in a struct-of-arrays form,
|
|
||||||
carrying particle coordinates and IDs along with an arbitrary number of
|
|
||||||
Vector and integer data for each particle.
|
|
||||||
* ParticleVector is a Vector-derived container that stores vector data for an
|
|
||||||
arbitrary number of particles contiguously based on specified vdim/ordering.
|
|
||||||
See the new particle miniapps in miniapps/gslib/ and miniapps/fluids/navier/.
|
|
||||||
|
|
||||||
- Added a new miniapp and specialized AMG solver (AMGF) for optimization-based
|
|
||||||
contact mechanics. The miniapp solves large-scale frictionless contact using a
|
|
||||||
self-contained Interior Point (IP) solver, mortar-based contact constraints
|
|
||||||
provided by Tribol. The resulting linear systems are solved with the new AMGF
|
|
||||||
solver (see below). Benchmark examples include the two-block, ironing, and
|
|
||||||
beam-sphere problems. See the miniapps/contact/ directory.
|
|
||||||
|
|
||||||
- Added support for boundary integration to the hyperbolic framework. Two new
|
|
||||||
classes BdrHyperbolicDirichletIntegrator and BoundaryHyperbolicFlowIntegrator
|
|
||||||
have been introduced for implementation of weak Dirichlet boundary conditions
|
|
||||||
with a general flux or for the linear case respectively.
|
|
||||||
|
|
||||||
- Added a method to compute piecewise linear bounds on high-order functions on
|
|
||||||
tensor-product elements.
|
|
||||||
|
|
||||||
- Added support for interior face integration enabling DG methods in
|
|
||||||
ParMixedBilinearForm, ParNonlinearForm and ParBlockNonlinearForm.
|
|
||||||
|
|
||||||
- In the ParMoonolith integration, added support for variational resampling of
|
|
||||||
H1 vector fields.
|
|
||||||
|
|
||||||
- Introduced IMEX ODE solvers based on a split-operator framework. Added
|
|
||||||
examples ex41 and ex41p demonstrating IMEX DG/CG discretizations of the
|
|
||||||
convection–diffusion equation, with ex41p using DG LOR preconditioning.
|
|
||||||
|
|
||||||
Meshing improvements
|
|
||||||
--------------------
|
|
||||||
- The TMOP kernel hierarchy has been restructured to reduce compilation time.
|
|
||||||
Most large kernels have been split into smaller specific kernels for each
|
|
||||||
metric. The directory structure has been updated with assemble, metrics, mult
|
|
||||||
and tools subdirectories. New kernel dispatch and specialization system has
|
|
||||||
also been integrated. Unit tests have been revised to ensure --all tests pass.
|
|
||||||
|
|
||||||
- Introduced NC-patch NURBS meshes, which are conforming element-wise but allow
|
|
||||||
for nonconforming patch topology. This new mesh format supports element
|
|
||||||
spacing formulas for refinement, as well as local refinement factors for a
|
|
||||||
subset of knot vectors.
|
|
||||||
|
|
||||||
- Added a new miniapp for interpolating a surface grid of points in 3D using a
|
|
||||||
smooth NURBS surface, that can then be sampled at arbitrary resolution while
|
|
||||||
staying close to the original geometry. See miniapps/nurbs/nurbs_surface.
|
|
||||||
|
|
||||||
- Parallel anisotropic refinement of hexahedral meshes is now supported,
|
|
||||||
provided that neighboring hexahedra are not refined in conflicting directions.
|
|
||||||
A new ParMesh method is added to check for such conflicts, before refinement.
|
|
||||||
|
|
||||||
- Added support for higher order meshes in (Par)Mesh::MakeSimplicial.
|
|
||||||
|
|
||||||
Linear and nonlinear solvers
|
|
||||||
----------------------------
|
|
||||||
- Added FilteredSolver: a base class for solvers with filtering. It handles
|
|
||||||
cases where a solver performs well except in small subspaces, by adding a
|
|
||||||
filtering step formulated as a subspace correction.
|
|
||||||
|
|
||||||
- Added AMGFSolver: a derived class of FilteredSolver, specialized for AMG with
|
|
||||||
Filtering (AMGF), providing robust preconditioning for linear systems arising
|
|
||||||
in constrained optimization problems such as frictionless contact.
|
|
||||||
|
|
||||||
Added 'GetResiduals' and 'GetFinalAbsResidualNorm' to 'HyprePCG',
|
|
||||||
'HypreGMRES', and 'HypreFGMRES' to get 'r' and '|r|_p'. Note that the latter
|
|
||||||
computes '|r|_p' from 'r' instead of returning a cached value like the
|
|
||||||
relative 'GetFinalResidualNorm'. These require Hypre >= 2.15.0.
|
|
||||||
|
|
||||||
Changed the default solver parameters for 'HyprePCG' to 'tol=1e-6' and
|
|
||||||
'max_iter=1000'. This matches the default parameters in Hypre 3.0.
|
|
||||||
|
|
||||||
Added various helper functions for querying/modifying Hypre solvers:
|
|
||||||
'HypreSmoother::GetType', 'HypreSmoother::GetSOROptions',
|
|
||||||
'HypreSmoother::GetPolyOptions', 'HypreSmoother::GetWindowParameters',
|
|
||||||
'HypreSmoother::IsOperatorSymmetric', 'HyprePCG::GetTol',
|
|
||||||
'HyprePCG::GetAbsTol', 'HyprePCG::GetMaxIter', 'HyprePCG::SetUseTwoNorm',
|
|
||||||
'HypreGMRES::GetTol', 'HypreGMRES::GetAbsTol', 'HypreGMRES::GetMaxIter',
|
|
||||||
'HypreGMRES::GetKDim', 'HypreFGMRES::GetTol', 'HypreFGMRES::GetMaxIter',
|
|
||||||
'HypreFGMRES::GetKDim', and 'HypreBoomerAMG::GetMaxIter'.
|
|
||||||
|
|
||||||
GPU computing
|
|
||||||
-------------
|
|
||||||
- Added the 'gpu', 'raja-gpu', and 'ceed-gpu' backend aliases/shortcuts which
|
|
||||||
automatically select between CUDA or HIP.
|
|
||||||
|
|
||||||
- Added the option to enable GPU-aware MPI in MFEM using the environment
|
|
||||||
variable 'MFEM_GPU_AWARE_MPI' set to any value. Setting this environment
|
|
||||||
variable is an alternative to calling 'Device::SetGPUAwareMPI(true)'.
|
|
||||||
|
|
||||||
- Implemented a GPU-accelerated matrix-free AMR derefinement GridFunction update
|
|
||||||
operator. This supports mixed geometry meshes and variable order spaces, and
|
|
||||||
is the default derefinement operator constructed by FiniteElementSpace::Update
|
|
||||||
and ParFiniteElementSpace::Update. The operator requires the finite element
|
|
||||||
space to be nonconforming.
|
|
||||||
|
|
||||||
- Introduced MFEM_FOREACH_THREAD_DIRECT, which directly maps loop tasks to GPU
|
|
||||||
threads, assigning one task per thread.
|
|
||||||
|
|
||||||
- The function Vector::SetSubVector(const Array<int> &, const real_t) now
|
|
||||||
executes on device if either the vector or the array have the device flag
|
|
||||||
set. This is most often used for setting constant essential BCs. A new method,
|
|
||||||
SetSubVectorHost, has been added for cases where host execution is always
|
|
||||||
needed (e.g. when the DOFs array is small).
|
|
||||||
|
|
||||||
- Added GPU support in GradientGridFunction and InnerProduct Coefficient classes
|
|
||||||
by implementing their Project methods.
|
|
||||||
|
|
||||||
- Added new method: GridFunction::GetGradients, with GPU support, for computing
|
|
||||||
the gradients of a GridFunction on all elements.
|
|
||||||
|
|
||||||
- The CUDA-specific names used by some of the unit tests like 'cunit_tests' and
|
|
||||||
'pcunit_tests' were replaced by names using 'gpu' instead of 'c' (short for
|
|
||||||
CUDA) or 'cuda'. These tests automatically run the CUDA/HIP tests based on the
|
|
||||||
MFEM build configuration.
|
|
||||||
|
|
||||||
New and updated examples and miniapps
|
|
||||||
-------------------------------------
|
|
||||||
- Added the miniapps/fluids directory and moved the previous Navier and the new
|
|
||||||
incompressible Schrödinger flow miniapps into it.
|
|
||||||
|
|
||||||
- Introduced the new Incompressible Schrödinger Flow (ISF) miniapp, which models
|
|
||||||
inviscid fluid dynamics by solving the linear Schrödinger equation, leveraging
|
|
||||||
the hydrodynamical analogy to quantum mechanics.
|
|
||||||
|
|
||||||
- New particle-related miniapps:
|
|
||||||
* New transient Navier-Stokes fluid-particles solver NavierParticles in
|
|
||||||
miniapps/fluids/navier/navier_particles, for modeling tracer particles in
|
|
||||||
fluid flow, demonstrating use of the new ParticleSet class.
|
|
||||||
* New Navier miniapp, miniapps/fluids/navier/navier_bifurcation, showing the
|
|
||||||
use of NavierParticles in a 2D bifurcating channel flow.
|
|
||||||
* New FindPointsGSLIB miniapp, miniapps/gslib/particles_redist, showing
|
|
||||||
parallel-redistribution of particle data between MPI ranks.
|
|
||||||
* Particle visualization features in common/particles_extras for viewing
|
|
||||||
particle locations and trajectories (ParticleTrajectories) using GLVis.
|
|
||||||
|
|
||||||
- Added a new miniapp (meshing/mesh-bounding-boxes) that computes the bounding
|
|
||||||
boxes for each element of a given mesh, and the bounds on the determinant of
|
|
||||||
the Jacobian of the transformation.
|
|
||||||
|
|
||||||
- Added a new miniapp (tools/gridfunction-bounds) to compute piecewise linear
|
|
||||||
bounds on a given high-order grid function.
|
|
||||||
|
|
||||||
- Added a new miniapp (electromagnetics/lorentz) which computes the trajectory
|
|
||||||
of a charged particle, subject to Lorentz forces, in electrostatic and/or
|
|
||||||
magnetostatic fields as computed by the volta or tesla miniapps.
|
|
||||||
|
|
||||||
- Added miniapps to demonstrate an implementation of the absolute-value
|
|
||||||
l1-Jacobi preconditioners in partially assembled operators. This includes
|
|
||||||
Multigrid wrapper to demonstrate the effectiveness of these Jacobi-type
|
|
||||||
operators as smoothers. See the miniapps/diag-smoothers/ directory.
|
|
||||||
|
|
||||||
- Updated the mtop miniapp with a GPU enabled forward and adjoint solver for
|
|
||||||
isotropic linear elasticity.
|
|
||||||
|
|
||||||
Miscellaneous
|
|
||||||
-------------
|
|
||||||
- Introduced MFEM_FETCH_TPLS CMake option to enable downloading, configuring,
|
|
||||||
and building of TPLs alongside MFEM (currently supported TPLs are hypre,
|
|
||||||
METIS, and GSLIB).
|
|
||||||
|
|
||||||
- Added quadrature function support to the VisIt and Conduit data collections.
|
|
||||||
|
|
||||||
- Added access to the internal parallel matrix in Par(Mixed)BilinearForm and
|
|
||||||
related utility methods for elimination of BCs.
|
|
||||||
|
|
||||||
- FindPointsGSLIB has a new constructor that accepts the mesh object and
|
|
||||||
internally calls the Setup() method so users do not have to. The FreeData()
|
|
||||||
method has also been moved to the destructor so users do not need to manually
|
|
||||||
free-up the memory if the destructor is called before MPI_Finalize().
|
|
||||||
|
|
||||||
- Added parallel Address Sanitizer, serial and parallel Undefined Behavior
|
|
||||||
Sanitizer and serial Memory Sanitizer GitHub actions tests on Ubuntu.
|
|
||||||
|
|
||||||
API changes
|
|
||||||
-----------
|
|
||||||
- mfem::internal::tensor and mfem::internal::dual have been moved to
|
|
||||||
mfem::future::tensor and mfem::future::dual.
|
|
||||||
|
|
||||||
- API addition: in class Operator, added virtual functions: AbsMult, and
|
|
||||||
AbsMultTranspose; in class Vector, added Abs and Pow.
|
|
||||||
|
|
||||||
- ParBilinearForm::EliminateEssentialVDofsInRhs() has been deprecated in favor
|
|
||||||
of ParallelEliminateEssentialTDofsInRhs().
|
|
||||||
|
|
||||||
|
|
||||||
Version 4.8, released on Apr 9, 2025
|
|
||||||
====================================
|
|
||||||
|
|
||||||
Discretization improvements
|
|
||||||
---------------------------
|
|
||||||
- Added high-order basis functions on pyramid-shaped elements for all spaces in
|
|
||||||
the de Rham complex based on the paper "Orientation embedded high order shape
|
|
||||||
functions for the exact sequence elements of all shapes" by Fuentes, Keith,
|
|
||||||
Demkowicz and Nagaraj (doi.org/10.1016/j.camwa.2015.04.027). Positive basis
|
|
||||||
functions (Bernstein basis) for H1 and L2 on pyramids were also added.
|
|
||||||
|
|
||||||
- Added support for parallel p- and hp-refinement on quad/hex meshes. For hp, we
|
|
||||||
currently support only isotropic refinement with L2 or H1 spaces. See the new
|
|
||||||
miniapps hpref and phpref in the miniapps/meshing/ directory.
|
|
||||||
|
|
||||||
- Added several improvements for hyperbolic problems:
|
|
||||||
* Assembly of Jacobians in HyperbolicFormIntegrator
|
|
||||||
* Component-wise upwinded flux (ComponentwiseUpwindFlux)
|
|
||||||
* Average fluxes in NumericalFlux (formerly RiemannSolver) and FluxFunction
|
|
||||||
|
|
||||||
- Added convenience methods to class FiniteElementSpace to directly identify all
|
|
||||||
degrees of freedom on the exterior faces of the domain, without referencing
|
|
||||||
boundary element attributes (GetExteriorVDofs and GetExteriorTrueDofs).
|
|
||||||
|
|
||||||
- Altered (Par)GridFunction::Compute*Error functions to ensure they return
|
|
||||||
non-negative values and therefore behave as "norms".
|
|
||||||
|
|
||||||
- SubMesh and ParSubMesh have been extended to work on nonconforming meshes.
|
|
||||||
Extracting volume and exterior surface submeshes are both supported.
|
|
||||||
|
|
||||||
- LinearFormIntegrator, BilinearFormIntegrator and NonlinearFormIntegrator now
|
|
||||||
inherit from a base class Integrator that centralizes the logic for selecting
|
|
||||||
quadrature rules. This includes a virtual method GetDefaultIntegrationRule,
|
|
||||||
which should be favored over directly defining a default integration rule in
|
|
||||||
the element-level assembly routines. The latter is still possible, by leaving
|
|
||||||
the new virtual method as its default base implementation of returning NULL.
|
|
||||||
|
|
||||||
- Added NURBS-based H(div) and H(curl) elements in 2D and 3D. Currently only for
|
|
||||||
single patch meshes in serial.
|
|
||||||
|
|
||||||
- Refactored ALGOIM cut integration rules. The interface is unified with the
|
|
||||||
interface for moment based cut integration rules.
|
|
||||||
|
|
||||||
- FiniteElementSpace has new methods to directly set the prolongation and
|
|
||||||
restriction operators to user-specified sparse matrices.
|
|
||||||
|
|
||||||
- Added support for H(div) spaces in class QuadratureInterpolator. Currently only
|
|
||||||
(vector) VALUES, (vector) PHYSICAL_VALUES, and PHYSICAL_MAGNITUDES evaluations
|
|
||||||
are implemented.
|
|
||||||
|
|
||||||
- Added support for boundary constraints to class Hybridization.
|
|
||||||
|
|
||||||
- Added support for custom interpolation procedure in FindPointsGSLIB.
|
|
||||||
|
|
||||||
- Added GSLIB-based gather-scatter operator.
|
|
||||||
|
|
||||||
Meshing improvements
|
|
||||||
--------------------
|
|
||||||
- Added support for nonuniform anisotropic mesh refinement on serial quad/hex
|
|
||||||
meshes with arbitrary spacing in each direction. This enables in particular
|
|
||||||
3:1 refinement, as demonstrated in the new meshing miniapp ref321.
|
|
||||||
|
|
||||||
- Added capabilities for optimization and adaptation of periodic meshes with
|
|
||||||
TMOP. The internals of TMOP were modified so that the optimization problem is
|
|
||||||
always solved with respect to mesh displacements.
|
|
||||||
|
|
||||||
- New convenience methods for manipulating boundary attribute markers in class
|
|
||||||
Mesh: MarkExternalBoundaries, MarkNamedBoundaries, UnmarkInternalBoundaries
|
|
||||||
and UnmarkNamedBoundaries. See Examples 1/1p and 11p for basic usage.
|
|
||||||
|
|
||||||
- Added a new method, GetExteriorFaceMarker, to the serial and parallel mesh
|
|
||||||
classes for identifying faces on the exterior of the mesh irrespective of
|
|
||||||
their presence in the list of "boundary elements".
|
|
||||||
|
|
||||||
- Added native AD support for computing the derivatives of numerous TMOP metrics
|
|
||||||
that didn't have first or second derivative implementations.
|
|
||||||
|
|
||||||
- Added ExodusII output capability which can handle in particular pyramid and
|
|
||||||
wedge element types. Mixed meshes are also supported.
|
|
||||||
|
|
||||||
- Added InverseElementTransformation::InitGuessType::EdgeScan as an alternative
|
|
||||||
initial guess type. This guess type tries solving with multiple initial guesses
|
|
||||||
along the r/s/t=0 edges of the element until a valid solution is found or all
|
|
||||||
initial guess points are exhausted.
|
|
||||||
|
|
||||||
- Added new convenience constructors for NURBS patches and knot vectors.
|
|
||||||
|
|
||||||
GPU computing
|
|
||||||
-------------
|
|
||||||
- Extended FindPointsGSLIB to support general field interpolation on GPUs. Note
|
|
||||||
that this requires that switch from gslib v1.0.7 to v1.0.9.
|
|
||||||
|
|
||||||
- Added support for GPU-accelerated batched linear algebra (using cuBLAS,
|
|
||||||
hipBLAS, MAGMA, or native MFEM functionality) through the BatchedLinAlg class.
|
|
||||||
|
|
||||||
- A new GPU kernel dispatch mechanism was introduced. Users can instantiate
|
|
||||||
specialized kernels for specific combinations of (for example) polynomial
|
|
||||||
degree and number of quadrature points using method AddSpecialization in
|
|
||||||
classes DiffusionIntegrator and MassIntegrator (this functionality may be
|
|
||||||
added to more integrators in the future).
|
|
||||||
|
|
||||||
- Added BatchInverseElementTransformation to batch InverseElementTransformation
|
|
||||||
searches. Batch searches are currently limited to meshes with a single element
|
|
||||||
geometry type of SEGMENT, SQUARE, or CUBE. Additional element geometry types
|
|
||||||
may be added in the future. Mixed element order meshes are supported. Batch
|
|
||||||
searches can be performed on the CPU (serial per MPI rank) or GPU. Embedded
|
|
||||||
elements (SEGMENT in 2D/3D space or SQUARE in 3D space) are supported, however
|
|
||||||
the existing solvers may struggle to find a valid solution.
|
|
||||||
|
|
||||||
- Calls to slower fallback kernels can be reported to mfem::err by setting the
|
|
||||||
environment variable MFEM_REPORT_KERNELS to any value other than NO or by
|
|
||||||
explicitly calling KernelReporter::Enable. For higher performance, users can
|
|
||||||
then add specializations for these kernels.
|
|
||||||
|
|
||||||
- Element assembly kernels have been added for low-order refined -> high-order
|
|
||||||
transfer operators. New kernels can be offloaded as device kernels. Example
|
|
||||||
usage may be found in lor-transfer.cpp in the miniapps/tools/ directory.
|
|
||||||
|
|
||||||
- Added GPU acceleration and element assembly for DivDivIntegrator and
|
|
||||||
NormalTraceJumpIntegrator.
|
|
||||||
|
|
||||||
- Allow BlockLowerTriangularPreconditioner to run on GPU.
|
|
||||||
|
|
||||||
- Use device vectors in GMRES, FGMRES and other iterative methods.
|
|
||||||
|
|
||||||
Linear and nonlinear solvers
|
|
||||||
----------------------------
|
|
||||||
- Added GPU acceleration of the algebraic hybridization solver for grad-div
|
|
||||||
problems in H(div). See Example 4.
|
|
||||||
|
|
||||||
- Added a self-contained implementation of the Method of Moving Asymptotes (MMA)
|
|
||||||
for solving optimization problems.
|
|
||||||
|
|
||||||
- Added support for SUNDIALS v7. See the section "API changes" for some small
|
|
||||||
changes related to this new version.
|
|
||||||
|
|
||||||
- Changed the name of class IterativeSolverMonitor to IterativeSolverController,
|
|
||||||
which now allows for specifying convergence by a user defined criterion. For
|
|
||||||
backward compatibility, the old name is still available.
|
|
||||||
|
|
||||||
- Refactored the ARKStepSolver class (ARKODE interface) to use the Mult() method
|
|
||||||
of TimeDependentOperator only when the associated ODE operator is expressed in
|
|
||||||
explicit form (i.e., TimeDependentOperator::isExplicit()), otherwise the
|
|
||||||
method ExplicitMult() is used. A check has been added to ARKStepSolver to
|
|
||||||
verify that the associated ODE operator is not in explicit form when a mass
|
|
||||||
matrix solver is enabled via a call to either the UseMFEMMassLinearSolver or
|
|
||||||
UseSundialsMassLinearSolver methods. This is because enabling a mass matrix
|
|
||||||
solver assumes that F(u,k,t) = M k in the associated ODE operator.
|
|
||||||
|
|
||||||
- Added ODE solvers selection routines. This creates a uniformity across
|
|
||||||
examples, miniapps and other executables in regard to ODE (time-integrator)
|
|
||||||
selection.
|
|
||||||
|
|
||||||
- Added new mechanism for retrieving and setting state vectors in ODE solvers.
|
|
||||||
This is relevant for AB/AM and gen-alpha solvers.
|
|
||||||
|
|
||||||
- Added ODEsolver/ODEsolver2 unit tests to verify order of convergence and
|
|
||||||
read/write functionality.
|
|
||||||
|
|
||||||
New and updated examples and miniapps
|
|
||||||
-------------------------------------
|
|
||||||
- Added an MFEM example for the eikonal equation (examples/ex40) based on the
|
|
||||||
proximal Galerkin method introduced by Keith and Surowiec.
|
|
||||||
|
|
||||||
- Added miniapps to demonstrate the H(div) and H(curl) NURBS elements.
|
|
||||||
|
|
||||||
- Fixed element visualization in the Mesh explorer miniapp.
|
|
||||||
|
|
||||||
- Added a command line option to all miniapps (-p or --send-port) for
|
|
||||||
specifying the GLVis server socket port (19916 by default).
|
|
||||||
|
|
||||||
- Added a new toy miniapp that animates an interesting fidget spiral cone toy.
|
|
||||||
See miniapps/toys/spiral.cpp.
|
|
||||||
|
|
||||||
Miscellaneous
|
|
||||||
-------------
|
|
||||||
- Updated the benchmarks (in tests/benchmarks) to work with the latest Google
|
|
||||||
Benchmarks classes (version 1.9.1). Renamed the MFEM_ENABLE_GOOGLE_BENCHMARKS
|
|
||||||
CMake option to just MFEM_ENABLE_BENCHMARKS.
|
|
||||||
|
|
||||||
- Updated the minimum CMake version requirements:
|
|
||||||
* CMake >= 3.12 for CPU builds,
|
|
||||||
* CMake >= 3.17 for CUDA builds, and
|
|
||||||
* CMake >= 3.14 for HIP builds (CMake >= 3.12 may work as well, not tested).
|
|
||||||
|
|
||||||
- Various other simplifications, extensions, and bugfixes in the code.
|
|
||||||
|
|
||||||
API changes
|
|
||||||
-----------
|
|
||||||
- In class GridFunction, fec was renamed to fec_owned.
|
|
||||||
|
|
||||||
- RiemannSolver was renamed to NumericalFlux (the old name has been deprecated
|
|
||||||
through typedef).
|
|
||||||
|
|
||||||
- API changes due to SUNDIALS v7:
|
|
||||||
* the SUNDIALS types realtype and booleantype are no longer defined by v7
|
|
||||||
and therefore MFEM now uses the new type names sunrealtype and
|
|
||||||
sunbooleantype, respectively, which MFEM defines when using SUNDIALS < v6
|
|
||||||
where these types were not defined.
|
|
||||||
* The SUNDIALS macro SUNLS_SUCCESS and some other *_SUCCESS macros were
|
|
||||||
removed and replaced by SUN_SUCCESS in v7, so to avoid tedious checks for
|
|
||||||
SUNDIALS versions, MFEM now defines and uses the constant SUN_SUCCESS when
|
|
||||||
using SUNDIALS < v7.
|
|
||||||
* The constants SUN_PREC_*, introduced by SUNDIALS v6 are now introduced by
|
|
||||||
MFEM when using SUNDIALS < v6 to avoid tedious version checks.
|
|
||||||
|
|
||||||
- TMOP_Metric_skew2D has been marked as deprecated.
|
|
||||||
|
|
||||||
|
|
||||||
Version 4.7, released on May 7, 2024
|
|
||||||
====================================
|
|
||||||
|
|
||||||
- Added support for single precision (with corresponding hypre build). The MFEM
|
|
||||||
floating point type was generalized from `double` to `real_t`. For details see
|
|
||||||
https://github.com/orgs/mfem/discussions/4207.
|
|
||||||
|
|
||||||
Meshing improvements
|
|
||||||
--------------------
|
|
||||||
- Added the capability to partition (big) serial meshes in serial code, see the
|
|
||||||
new classes MeshPartitioner and MeshPart. This capability is also exposed as a
|
|
||||||
menu option in the mesh-explorer miniapp in miniapps/meshing.
|
|
||||||
|
|
||||||
- Added named attribute sets and basic supporting methods to the Mesh class as a
|
|
||||||
convenient means of referring to sets of domain or boundary attribute numbers.
|
|
||||||
See the new Example 39/39p and data/compass.mesh.
|
|
||||||
|
|
||||||
- Introduced formulas for refinement of patches in NURBS meshes. Refinement by
|
|
||||||
arbitrary integer factors is also enabled, e.g. in the mesh-explorer miniapp.
|
|
||||||
NURBS coarsening and knot removal are also introduced.
|
|
||||||
|
|
||||||
- Added support for internal boundary elements in nonconforming meshes.
|
|
||||||
|
|
||||||
- The ReadCubit Genesis mesh importer has been rewritten to improve readability.
|
|
||||||
|
|
||||||
Discretization improvements
|
|
||||||
---------------------------
|
|
||||||
- Added a new nonlinear integrator, `HyperbolicFormIntegrator` that implements
|
|
||||||
both element-wise weak divergence and face-wise numerical flux for a general
|
|
||||||
system of hyperbolic conservation laws. To use the integrator for a specific
|
|
||||||
flux function, users can define a derived class of `FluxFunction`. Currently,
|
|
||||||
advection, Burgers, shallow-water and Euler equations (see Example 18/18p) are
|
|
||||||
available.
|
|
||||||
|
|
||||||
- Added a capability to construct cut-surface and cut-volume IntegrationRules
|
|
||||||
through a moment-fitting approach. The cut is specified by the zero level set
|
|
||||||
of a Coefficient. See fem/intrules_cut.hpp and the new Example 38.
|
|
||||||
|
|
||||||
- Introduced support for high-order nonconforming Nedelec elements on simplices.
|
|
||||||
|
|
||||||
GPU computing
|
|
||||||
-------------
|
|
||||||
- Added partial assembly and GPU support for the DG diffusion integrator.
|
|
||||||
|
|
||||||
- Efficient GPU-accelerated LOR assembly is now supported on surface meshes.
|
|
||||||
|
|
||||||
- Added functionality to automatically configure hypre's compute policy to match
|
|
||||||
MFEM's compute policy when hypre is built with GPU support. Requires version
|
|
||||||
hypre-2.31.0 or later.
|
|
||||||
|
|
||||||
- Added support for full assembly on simplices.
|
|
||||||
|
|
||||||
- Added partial assembly for linear elasticity (no sum factorization for now).
|
|
||||||
|
|
||||||
- Added functionality for BilinearFormIntegrators to use kernels that work for
|
|
||||||
both tensor and unstructured elements.
|
|
||||||
|
|
||||||
- The RAJA backend will use `seq_exec` for serial loop execution when RAJA
|
|
||||||
v2023.06.00 and beyond is detected as `loop_exec` is deprecated.
|
|
||||||
|
|
||||||
- API change: The macro MFEM_HYPRE_FORALL (from hypre.hpp) which was intended
|
|
||||||
for internal use, has been removed and replaced by the function template
|
|
||||||
mfem::hypre_forall in general/forall.hpp.
|
|
||||||
|
|
||||||
New and updated examples and miniapps
|
|
||||||
-------------------------------------
|
|
||||||
- Added a new miniapp illustrating elastic contact based on the Tribol library,
|
|
||||||
(https://github.com/LLNL/Tribol). See miniapps/tribol.
|
|
||||||
|
|
||||||
- Added a miniapp to demonstrate low order refined (LOR) block preconditioning
|
|
||||||
for linear elasticity on GPUs. See miniapps/solvers/lor_elast.
|
|
||||||
|
|
||||||
- Added a new block solver in miniapp/solvers for the Darcy problem. The new
|
|
||||||
solver is based on a Bramble-Pasciak preconditioning. User can use and
|
|
||||||
implement their own preconditioner for the mass matrix.
|
|
||||||
|
|
||||||
- Added a small miniapp for printing the shape functions of a KnotVector. See
|
|
||||||
miniapps/nurbs/nurbs_printfunc.cpp.
|
|
||||||
|
|
||||||
- Added two new example codes: 38 and 39/39p described above. Substantially
|
|
||||||
updated Example 18/18p.
|
|
||||||
|
|
||||||
Miscellaneous
|
|
||||||
-------------
|
|
||||||
- Updated the Doxygen documentation style, which now requires Doxygen version
|
|
||||||
1.9.8 or later. See the doc/ directory.
|
|
||||||
|
|
||||||
- Improved thread safety for global variables in the library, e.g. for IntRules,
|
|
||||||
RefinedIntRules, GlobGeometryRefiner, and FiniteElement::dof2quad_array.
|
|
||||||
|
|
||||||
- PETSc integration now generally requires PETSc version 3.21 or later, though
|
|
||||||
depending on the functionality older versions may still work.
|
|
||||||
|
|
||||||
- Various other simplifications, extensions, and bugfixes in the code.
|
|
||||||
|
|
||||||
|
|
||||||
Version 4.6, released on September 27, 2023
|
|
||||||
===========================================
|
|
||||||
|
|
||||||
- MFEM is now available in Homebrew and can be installed on a Mac with just
|
|
||||||
"brew install mfem". See https://formulae.brew.sh/formula/mfem.
|
|
||||||
|
|
||||||
Meshing improvements
|
|
||||||
--------------------
|
|
||||||
- Added asymptotically-balanced TMOP compound metrics 90, 94, 328, 338. A new
|
|
||||||
tool, tmop-metric-magnitude, can be used to track how metrics change under
|
|
||||||
geometric perturbations. See miniapps/tools.
|
|
||||||
|
|
||||||
- Several NURBS meshing improvements:
|
|
||||||
* Support for free connectivity of NURBS patches allowing for more complex
|
|
||||||
patch configurations such as C-meshes.
|
|
||||||
* New methods to set and get attributes on NURBS patches and patch boundaries.
|
|
||||||
* The edge to knot map for NURBS meshes can be determined automatically. It is
|
|
||||||
no longer needed to specify this in the NURBS mesh.
|
|
||||||
* Added curve interpolation method for NURBS.
|
|
||||||
* See miniapps/nurbs for example meshes and miniapps.
|
|
||||||
|
|
||||||
Discretization improvements
|
|
||||||
---------------------------
|
|
||||||
- SubMesh and ParSubMesh have been extended to support the transfer of
|
|
||||||
Nedelec and Raviart-Thomas finite element spaces.
|
|
||||||
|
|
||||||
- Added support for partial assembly on NURBS patches, and NURBS-patch sparse
|
|
||||||
matrix assembly. Patch matrix assembly includes the option to use reduced
|
|
||||||
approximate integration rules, computed by the newly implemented non-negative
|
|
||||||
least-squares (NNLS) solver.
|
|
||||||
|
|
||||||
- Support for parallel transfer of H1 fields using the low-order refined (LOR)
|
|
||||||
transfer operators in L2ProjectionGridTransfer
|
|
||||||
|
|
||||||
- Added KDTree class for 2D/3D set of points, which is then utilized in the new
|
|
||||||
KDTreeNodalProjection class to project a function defined on an arbitrary set
|
|
||||||
of points onto an MFEM grid function. This functionality is demonstrated in
|
|
||||||
the nodal-transfer miniapp. The current implementation is serial only. Further
|
|
||||||
extensions can include search in arbitrary dimensional spaces.
|
|
||||||
|
|
||||||
- Added support for p-refined meshes in GSLIB-FindPoints.
|
|
||||||
|
|
||||||
- Device kernels can now access device-specific DOF and quadrature limits using
|
|
||||||
the DofQuadLimits structure, allowing increased limits when executing on CPU.
|
|
||||||
The limits for the runtime selected device can be accessed in host code using
|
|
||||||
DeviceDofQuadLimits::Get(). The global constants MAX_D1D and MAX_Q1D are no
|
|
||||||
longer available.
|
|
||||||
|
|
||||||
- Face restriction operators for Nedelec and Raviart-Thomas finite element
|
|
||||||
spaces are now supported through the ConformingFaceRestriction class.
|
|
||||||
|
|
||||||
- VectorFEBoundaryFluxLFIntegrator is now supported on device/GPU.
|
|
||||||
|
|
||||||
Linear and nonlinear solvers
|
|
||||||
----------------------------
|
|
||||||
- Updated the MUMPS interface to support multiple right-hand sides, block
|
|
||||||
low-rank compression, builds using 64-bit integers, and other improvements.
|
|
||||||
|
|
||||||
- Added an interface to the MKL Pardiso sparse direct solver developed by Intel.
|
|
||||||
The interface provides a serial (OpenMP shared memory) version of Pardiso for
|
|
||||||
use with SparseMatrix. This complements the existing parallel (MPI distributed
|
|
||||||
memory) version already available through the CPardiso MFEM integration.
|
|
||||||
|
|
||||||
- Added HIP support to the PETSc and SUNDIALS interfaces.
|
|
||||||
|
|
||||||
New and updated examples and miniapps
|
|
||||||
-------------------------------------
|
|
||||||
- Added a new H(div) solver miniapp demonstrating the use of a matrix-free
|
|
||||||
saddle-point solver methodology, suitable for high-order discretizations and
|
|
||||||
for GPU acceleration. Examples illustrating the solution of Darcy and grad-div
|
|
||||||
problems are included. See miniapps/hdiv-linear-solver.
|
|
||||||
|
|
||||||
- Added new Discontinuous Petrov-Galerkin (DPG) miniapp which includes serial
|
|
||||||
and parallel examples for diffusion, convection-diffusion, acoustics and
|
|
||||||
Maxwell equations. The miniapp includes new classes such as (Par)DPGWeakForm,
|
|
||||||
(Par)ComplexDPGWeakForm and (Complex)BlockStaticCondensation. Three new
|
|
||||||
integrators are added in support of DPG systems: TraceIntegrator,
|
|
||||||
NormalTraceIntegrator and TangentTraceIntegrator. See miniapps/dpg.
|
|
||||||
|
|
||||||
- Added a new miniapp that implements the SPDE method for generating Gaussian
|
|
||||||
random fields of Matern covariance. The resulting random field can be used,
|
|
||||||
e.g., to model material uncertainties. See miniapps/spde.
|
|
||||||
|
|
||||||
- Added a new parallel LOR transfer miniapp, plor-transfer, which mirrors the
|
|
||||||
functionality of the serial LOR transfer miniapp. See miniapps/tools.
|
|
||||||
|
|
||||||
- New serial miniapp, nodal-transfer, demonstrating the use of KDTree to map a
|
|
||||||
parallel grid function to a different parallel partitioning of the same mesh.
|
|
||||||
|
|
||||||
- Added 3 additional TMOP miniapps in miniapps/meshing:
|
|
||||||
* Mesh-Quality evaluates quality using size, skewness, and aspect-ratio
|
|
||||||
computed from the Jacobian of the transformation.
|
|
||||||
* Mesh-Fitting can be used for interface and boundary fitting to implicit
|
|
||||||
domains defined using level-set functions.
|
|
||||||
* Fit-Node-Position fits selected mesh nodes to specified positions, while
|
|
||||||
maintaining overall mesh quality.
|
|
||||||
|
|
||||||
- Added 4 new example codes:
|
|
||||||
* Example 34/34p solves a simple magnetostatic problem where source terms and
|
|
||||||
boundary conditions are transferred with SubMesh objects.
|
|
||||||
* Example 35p implements H1, H(curl) and H(div) variants of a damped harmonic
|
|
||||||
oscillator with field transfer using SubMesh objects.
|
|
||||||
* Example 36/36p demonstrates the solution of the obstacle problem with a new
|
|
||||||
finite element method (proximal Galerkin).
|
|
||||||
* Example 37/37p demonstrates topology optimization with MFEM.
|
|
||||||
|
|
||||||
- Added a random refinement option to the mesh-explorer miniapp to assist users
|
|
||||||
in experimenting with nonconforming meshes.
|
|
||||||
|
|
||||||
- Moved the distance solver methods from miniapps/shifted to miniapps/common.
|
|
||||||
|
|
||||||
Miscellaneous
|
|
||||||
-------------
|
|
||||||
- Improved lambda body debugging with the addition of mfem::forall functions.
|
|
||||||
These functions can take the place of the MFEM_FORALL macros, which have been
|
|
||||||
preserved for backwards compatibility.
|
|
||||||
|
|
||||||
- Added an address sanitizer GitHub action for a serial build/test on Ubuntu,
|
|
||||||
based on Clang/LLVM (https://clang.llvm.org/docs/AddressSanitizer.html).
|
|
||||||
|
|
||||||
- Reorganized files for bilinear form, linear form, and nonlinear form integrators
|
|
||||||
in the fem/integ/ subdirectory.
|
|
||||||
|
|
||||||
- FiniteElementSpace::GetFE has been updated to abort instead of returning NULL for
|
|
||||||
an empty partition.
|
|
||||||
|
|
||||||
- Various other simplifications, extensions, and bugfixes in the code.
|
|
||||||
|
|
||||||
|
|
||||||
Version 4.5.2, released on March 23, 2023
|
|
||||||
=========================================
|
|
||||||
|
|
||||||
- Added support for pyramids in non-conforming meshes. Currently only isotropic
|
|
||||||
refinement is supported in this case.
|
|
||||||
|
|
||||||
- Removed the support for the Mesquite toolkit. We recommend using MFEM's TMOP
|
|
||||||
functionality instead for mesh optimization. See the mesh-optimizer miniapp.
|
|
||||||
|
|
||||||
- Added a fast normalization-based distance solver, see the Distance miniapp
|
|
||||||
in the miniapps/shifted/ directory.
|
|
||||||
|
|
||||||
- Added a new meshing miniapp, Reflector, which reflects a high-order or NURBS
|
|
||||||
hexahedral mesh about a plane.
|
|
||||||
|
|
||||||
- Updated logic in FindPointsGSLIB to ignore points found near (but outside) the
|
|
||||||
domain boundary.
|
|
||||||
|
|
||||||
- Added an option to auto-balance compound TMOP metrics.
|
|
||||||
|
|
||||||
- Fixed a bug in TMOP metric 301.
|
|
||||||
|
|
||||||
- When using discontinuous (L2) spaces, use local (element-wise) L2 projection
|
|
||||||
as the coarsening operator for non-conforming AMR meshes.
|
|
||||||
|
|
||||||
- Added support for GridFunction::GetGradients() and GetVectorGradient() on
|
|
||||||
face-neighbor elements.
|
|
||||||
|
|
||||||
- Added support for pyramids in Gmsh meshes.
|
|
||||||
|
|
||||||
- The Mesh Explorer miniapp can now save mesh files in the VisIt or ParaView
|
|
||||||
formats using the corresponding DataCollection. See option 'D' in the menu.
|
|
||||||
|
|
||||||
- VisItDataCollection now correctly handles data collection names containing
|
|
||||||
underscores.
|
|
||||||
|
|
||||||
- Added support for shared Windows builds with MSVC through CMake.
|
|
||||||
Developers note: this enhancement is facilitated by the addition of the macro
|
|
||||||
MFEM_EXPORT, see config.hpp for more details on its usage.
|
|
||||||
|
|
||||||
- The following integrations have updated minimum version requirements:
|
|
||||||
* RAJA >= 2022.10.3
|
|
||||||
|
|
||||||
API changes
|
|
||||||
-----------
|
|
||||||
- The implicit cast methods of class Vector to 'double *' and 'const double *'
|
|
||||||
have been deprecated and generate deprecation warnings if used. They will be
|
|
||||||
removed in a future release.
|
|
||||||
|
|
||||||
- The methods Mesh::GetFaceBaseGeometry and Mesh::GetFaceGeometryType have been
|
|
||||||
deprecated, and Mesh::GetFaceGeometry (which provides identical functionality)
|
|
||||||
should be used instead.
|
|
||||||
|
|
||||||
- VisItDataCollection::SetPadDigits() no longer alters the number of digits
|
|
||||||
used to represent the MPI rank because VisIt seems to require 6 digits.
|
|
||||||
This parameter can still be explicitly overridden with SetPadDigitsRank().
|
|
||||||
|
|
||||||
|
|
||||||
Version 4.5, released on October 22, 2022
|
|
||||||
=========================================
|
|
||||||
|
|
||||||
Meshing improvements
|
|
||||||
--------------------
|
|
||||||
- Added new SubMesh and ParSubMesh classes that can be used to extract a subset
|
|
||||||
of a given Mesh. These classes have the same functionality as Mesh and ParMesh
|
|
||||||
and work with all existing MFEM interfaces like finite element spaces etc.
|
|
||||||
|
|
||||||
- Added a method, ParMesh::GetSerialMesh(), that reconstructs a partitioned
|
|
||||||
parallel mesh on a given single rank. Also, added ParMesh::PrintAsSerial(),
|
|
||||||
which saves the reconstructed serial mesh to a C++ stream on rank 0.
|
|
||||||
|
|
||||||
- Added more 3D TMOP metrics, as well as specialized metrics for mesh
|
|
||||||
untangling and worst-case quality improvement.
|
|
||||||
|
|
||||||
- Added a new method, Mesh::NodesUpdated, which should be called after the mesh
|
|
||||||
node coordinates have changed, e.g. after the mesh has moved. This is
|
|
||||||
necessary, for example, with device assembly of linear and bilinear forms.
|
|
||||||
|
|
||||||
- Added support for mixed meshes and pyramids in GSLIB-FindPoints.
|
- Added support for mixed meshes and pyramids in GSLIB-FindPoints.
|
||||||
|
|
||||||
Discretization improvements
|
Discretization improvements
|
||||||
---------------------------
|
---------------------------
|
||||||
|
- Added support for assembling low-order-refined matrices using a GPU-enabled
|
||||||
|
"batched" algorithm. The lor_solvers and plor_solvers now fully support GPU
|
||||||
|
acceleration.
|
||||||
|
|
||||||
|
- Added support for partial assembly and fully matrix-free operators on mixed
|
||||||
|
meshes (different element types and p-adaptivity) through libCEED, including
|
||||||
|
device acceleration, e.g. with NVIDIA and AMD GPUs. The p-adaptivity is
|
||||||
|
currently limited by MFEM capabilities, i.e. 2D serial meshes. All mixed
|
||||||
|
element topologies are supported in serial and parallel: segment, triangle,
|
||||||
|
square, tetrahedron, cube, prism, and pyramid.
|
||||||
|
|
||||||
- Added full assembly and device support for several LinearForm integrators:
|
- Added full assembly and device support for several LinearForm integrators:
|
||||||
* DomainLF: (f, v)
|
* DomainLF: (f, v)
|
||||||
* VectorDomainLF: ((f1,...,fn), (v1,...,vn))
|
* VectorDomainLF: ((f1,...,fn), (v1,...,vn))
|
||||||
* DomainLFGrad: (f, grad(v))
|
* DomainLFGrad: (f, grad(v))
|
||||||
* VectorDomainLFGrad: ((f1x,f1y,f1z,...,fnx,fny,fnz), grad(v1,...,vn))
|
* VectorDomainLFGrad: ((f1x,f1y,f1z,...,fnx,fny,fnz), grad(v1,...,vn))
|
||||||
The device assembly of linear forms has to be explicitly enabled by calling
|
|
||||||
LinearForm::UseFastAssembly(true), otherwise the legacy linear form assembly
|
|
||||||
is used by default.
|
|
||||||
|
|
||||||
- Added support for assembling low-order-refined matrices using a GPU-enabled
|
|
||||||
"batched" algorithm. The lor_solvers and plor_solvers now fully support GPU
|
|
||||||
acceleration with arbitrary user-supplied coefficients.
|
|
||||||
|
|
||||||
- Added a new class FaceQuadratureSpace that allows for the construction of
|
|
||||||
QuadratureFunctions on the interior or boundary faces of a mesh.
|
|
||||||
|
|
||||||
- Added a class CoefficientVector for efficient access of variable coefficient
|
|
||||||
values at quadrature points (in particular for GPU/device kernels).
|
|
||||||
|
|
||||||
- Added WhiteGaussianNoiseDomainLFIntegrator: a LinearFormIntegrator class for
|
- Added WhiteGaussianNoiseDomainLFIntegrator: a LinearFormIntegrator class for
|
||||||
spatial Gaussian white noise.
|
spatial Gaussian white noise.
|
||||||
@@ -789,25 +40,8 @@ Discretization improvements
|
|||||||
- Added a new Zienkiewicz-Zhu patch recovery-based a posteriori error estimator.
|
- Added a new Zienkiewicz-Zhu patch recovery-based a posteriori error estimator.
|
||||||
See fem/estimators.hpp.
|
See fem/estimators.hpp.
|
||||||
|
|
||||||
- Various fixes and improvements in LinearFormExtension.
|
|
||||||
|
|
||||||
Linear and nonlinear solvers
|
Linear and nonlinear solvers
|
||||||
----------------------------
|
----------------------------
|
||||||
- Added a new class DGMassInverse that performs a local element-wise CG
|
|
||||||
iteration to solve systems involving the discontinuous Galerkin mass matrix,
|
|
||||||
including support for device/GPU acceleration.
|
|
||||||
|
|
||||||
- Added more flexibility to the constrained solver classes:
|
|
||||||
* PenaltyConstrainedSolver now allows for a vector of penalty parameters
|
|
||||||
(necessary for penalty contact)
|
|
||||||
* PenaltyConstrainedSolver and EliminationSolver can use GMRES or PCG
|
|
||||||
* All constraint solver classes can take a user-defined preconditioner
|
|
||||||
|
|
||||||
- Added functions to toggle additional options for the SuperLU_Dist and Hypre
|
|
||||||
preconditioners (ParaSails, Euclid, ILU).
|
|
||||||
|
|
||||||
- Added boundary elimination with device support for `SparseMatrix` and
|
|
||||||
`HypreParMatrix`.
|
|
||||||
|
|
||||||
New and updated examples and miniapps
|
New and updated examples and miniapps
|
||||||
-------------------------------------
|
-------------------------------------
|
||||||
@@ -817,28 +51,12 @@ New and updated examples and miniapps
|
|||||||
automatic differentiation tools like a native dual number implementation or a
|
automatic differentiation tools like a native dual number implementation or a
|
||||||
third party library such as Enzyme. See miniapps/elasticity for more details.
|
third party library such as Enzyme. See miniapps/elasticity for more details.
|
||||||
|
|
||||||
- Added example for body-fitted volumetric and shape integration using the
|
|
||||||
Algoim library in miniapps/shifted.
|
|
||||||
|
|
||||||
- Add a new example code, Example 33/33p, to demonstrate the solution of
|
- Add a new example code, Example 33/33p, to demonstrate the solution of
|
||||||
spectral fractional PDEs with MFEM.
|
spectral fractional PDEs with MFEM.
|
||||||
|
|
||||||
Integrations, testing and documentation
|
Integrations, testing and documentation
|
||||||
---------------------------------------
|
---------------------------------------
|
||||||
- Added a Dockerfile for a simple MFEM container, see config/docker/README.md.
|
- Added a Dockerfile for a simple MFEM container, see config/docker/README.md.
|
||||||
More sophisticated developer containers are available in the new repo
|
|
||||||
https://github.com/mfem/containers.
|
|
||||||
|
|
||||||
- Added support for the LLVM-based automatic differentiation tool Enzyme, see
|
|
||||||
https://github.com/EnzymeAD/Enzyme. Build system flags and a convenience
|
|
||||||
header are provided. The functionality and interaction are demonstrated in a
|
|
||||||
new miniapp in miniapps/elasticity.
|
|
||||||
|
|
||||||
- Added support for partial assembly and fully matrix-free operators on mixed
|
|
||||||
meshes (different element types and p-adaptivity) through libCEED, including
|
|
||||||
device acceleration, e.g. with NVIDIA and AMD GPUs. The p-adaptivity is
|
|
||||||
currently limited to 2D serial meshes. All mixed element topologies are
|
|
||||||
supported in both serial and parallel.
|
|
||||||
|
|
||||||
- Added support for ParMoonolith, https://bitbucket.org/zulianp/par_moonolith,
|
- Added support for ParMoonolith, https://bitbucket.org/zulianp/par_moonolith,
|
||||||
which provides parallel non-conforming, non-matching, variational, volumetric
|
which provides parallel non-conforming, non-matching, variational, volumetric
|
||||||
@@ -846,40 +64,29 @@ Integrations, testing and documentation
|
|||||||
between arbitrarily distributed and unrelated finite element meshes in a
|
between arbitrarily distributed and unrelated finite element meshes in a
|
||||||
variationally consistent way.
|
variationally consistent way.
|
||||||
|
|
||||||
- Fully encapsulated SUNDIALS `N_Vector` object within the `SundialsNVector`
|
- Added support for the LLVM-based automatic differentiation tool Enzyme, see
|
||||||
class by removing deprecated (e.g. `HypreParVector::ToNVector`) and
|
https://github.com/EnzymeAD/Enzyme. Build system flags and a convenience
|
||||||
non-deprecated (e.g. `Vector::ToNVector`) functions in other classes.
|
header are provided. The functionality and interaction are demonstrated in a
|
||||||
|
new miniapp in miniapps/elasticity.
|
||||||
|
|
||||||
- New benchmark for the different assembly levels inspired by the CEED
|
- Added example for body-fitted volumetric and shape integration using the
|
||||||
Bake-Off Problems, see tests/benchmarks/bench_assembly_levels.cpp.
|
Algoim library.
|
||||||
|
|
||||||
- Added Windows 2022 CI testing with GitHub actions.
|
- Added Windows 2022 CI testing with GitHub actions.
|
||||||
|
|
||||||
Miscellaneous
|
Miscellaneous
|
||||||
-------------
|
-------------
|
||||||
- The method SparseMatrix::EnsureMultTranspose() is now automatically called
|
- Various other simplifications, extensions, and bugfixes in the code.
|
||||||
by the methods AddMultTranspose(), MultTranspose(), and AbsMultTranspose().
|
|
||||||
Added a method with the same name to class HypreParMatrix which is also called
|
|
||||||
automatically by the HypreParMatrix::MultTranspose() methods.
|
|
||||||
|
|
||||||
- Updated various MemoryUsage methods to return 'std::size_t' instead of 'long'
|
|
||||||
since the latter is 32-bit in Win64 builds.
|
|
||||||
|
|
||||||
|
- Added boundary elimination with device support for `SparseMatrix` and
|
||||||
|
`HypreParMatrix`.
|
||||||
|
|
||||||
- When using `AssemblyLevel::FULL`, `FABilinearFormExtension::FormSystemMatrix`
|
- When using `AssemblyLevel::FULL`, `FABilinearFormExtension::FormSystemMatrix`
|
||||||
outputs an `OperatorHandle` containing a `SparseMatrix` in serial, and an
|
outputs an `OperatorHandle` containing a `SparseMatrix` in serial, and an
|
||||||
`HypreParMatrix` in parallel (instead of a `ConstrainedOperator`).
|
`HypreParMatrix` in parallel (instead of a `ConstrainedOperator`).
|
||||||
|
|
||||||
- In various places in the library, replace the use of 'long' with 'long long'
|
- Added TMOP metrics for mesh untangling and worst-case quality improvement.
|
||||||
to better support Win64 builds where 'long' is 32-bit and 'long long' is
|
|
||||||
64-bit. On Linux and MacOS, both types are typically 64-bit.
|
|
||||||
|
|
||||||
- The behavior of GridFunction::GetTrueVector() has been changed to not return
|
|
||||||
an empty true vector.
|
|
||||||
|
|
||||||
- Added support for ordering search points byVDIM in FindPointsGSLIB.
|
|
||||||
|
|
||||||
- Various other simplifications, extensions, and bugfixes in the code.
|
|
||||||
|
|
||||||
|
|
||||||
Version 4.4, released on March 21, 2022
|
Version 4.4, released on March 21, 2022
|
||||||
=======================================
|
=======================================
|
||||||
@@ -912,6 +119,11 @@ Meshing improvements
|
|||||||
- Added a simpler interface to access mesh face information, see FaceInformation
|
- Added a simpler interface to access mesh face information, see FaceInformation
|
||||||
and GetFaceInformation in the Mesh class.
|
and GetFaceInformation in the Mesh class.
|
||||||
|
|
||||||
|
- Added the method ParMesh::GetSerialMesh() that reconstructs a partitioned
|
||||||
|
parallel mesh on a given single rank. Also, added the method
|
||||||
|
ParMesh::PrintAsSerial() that saves the reconstructed serial mesh to a C++
|
||||||
|
stream on rank 0.
|
||||||
|
|
||||||
- Gmsh meshes where all elements have zero physical tag (the default Gmsh output
|
- Gmsh meshes where all elements have zero physical tag (the default Gmsh output
|
||||||
format if no physical groups are defined) are now successfully loaded, and
|
format if no physical groups are defined) are now successfully loaded, and
|
||||||
elements are reassigned attribute number 1.
|
elements are reassigned attribute number 1.
|
||||||
@@ -1001,6 +213,9 @@ Integrations, testing and documentation
|
|||||||
- Switched from Artistic Style (astyle) version 2.05.1 to version 3.1 for code
|
- Switched from Artistic Style (astyle) version 2.05.1 to version 3.1 for code
|
||||||
formatting. See the "make style" target.
|
formatting. See the "make style" target.
|
||||||
|
|
||||||
|
- New benchmark for the different assembly levels inspired by the CEED
|
||||||
|
Bake-Off Problems, see tests/benchmarks/bench_assembly_levels.cpp.
|
||||||
|
|
||||||
Miscellaneous
|
Miscellaneous
|
||||||
-------------
|
-------------
|
||||||
- Added a simple singleton class, Mpi, as a replacement for MPI_Session. New
|
- Added a simple singleton class, Mpi, as a replacement for MPI_Session. New
|
||||||
@@ -1011,6 +226,13 @@ Miscellaneous
|
|||||||
|
|
||||||
- Fixed several MinGW build issues on Windows.
|
- Fixed several MinGW build issues on Windows.
|
||||||
|
|
||||||
|
- In various places in the library, replace the use of 'long' with 'long long'
|
||||||
|
to better support Win64 builds where 'long' is 32-bit and 'long long' is
|
||||||
|
64-bit. On Linux and MacOS, both types are typically 64-bit.
|
||||||
|
|
||||||
|
- Update various "MemoryUsage" methods to return 'std::size_t' instead of 'long'
|
||||||
|
since the latter is 32-bit in Win64 builds.
|
||||||
|
|
||||||
- Added 'double' atomicAdd implementation for previous versions of CUDA.
|
- Added 'double' atomicAdd implementation for previous versions of CUDA.
|
||||||
|
|
||||||
- HypreParVector and Vector now support C++ move semantics, and the copy
|
- HypreParVector and Vector now support C++ move semantics, and the copy
|
||||||
|
|||||||
+134
-355
@@ -1,4 +1,4 @@
|
|||||||
# Copyright (c) 2010-2025, Lawrence Livermore National Security, LLC. Produced
|
# Copyright (c) 2010-2022, Lawrence Livermore National Security, LLC. Produced
|
||||||
# at the Lawrence Livermore National Laboratory. All Rights reserved. See files
|
# at the Lawrence Livermore National Laboratory. All Rights reserved. See files
|
||||||
# LICENSE and NOTICE for details. LLNL-CODE-806117.
|
# LICENSE and NOTICE for details. LLNL-CODE-806117.
|
||||||
#
|
#
|
||||||
@@ -10,28 +10,20 @@
|
|||||||
# CONTRIBUTING.md for details.
|
# CONTRIBUTING.md for details.
|
||||||
|
|
||||||
# The variable CMAKE_CXX_STANDARD and related were introduced in CMake v3.1
|
# The variable CMAKE_CXX_STANDARD and related were introduced in CMake v3.1
|
||||||
# Version 3.8 fixes the handling of CMAKE_CXX_STANDARD for try_compile.
|
cmake_minimum_required(VERSION 3.1)
|
||||||
# Version 3.8 or newer is required for direct CUDA support.
|
|
||||||
# Version 3.12 or newer is required for setting maximum policy version.
|
|
||||||
cmake_minimum_required(VERSION 3.12.0...4.0.0)
|
|
||||||
message(STATUS "CMake version: ${CMAKE_VERSION}")
|
|
||||||
set(USER_CONFIG "${CMAKE_CURRENT_SOURCE_DIR}/config/user.cmake" CACHE PATH
|
set(USER_CONFIG "${CMAKE_CURRENT_SOURCE_DIR}/config/user.cmake" CACHE PATH
|
||||||
"Path to optional user configuration file.")
|
"Path to optional user configuration file.")
|
||||||
|
|
||||||
# Require C++17 and disable compiler-specific extensions
|
# Require C++11 and disable compiler-specific extensions
|
||||||
set(CMAKE_CXX_STANDARD 17 CACHE STRING "C++ standard to use.")
|
set(CMAKE_CXX_STANDARD 11)
|
||||||
set(CMAKE_CXX_STANDARD_REQUIRED ON CACHE BOOL
|
set(CMAKE_CXX_STANDARD_REQUIRED ON)
|
||||||
"Force the use of the chosen C++ standard.")
|
set(CMAKE_CXX_EXTENSIONS OFF)
|
||||||
set(CMAKE_CXX_EXTENSIONS OFF CACHE BOOL "Enable C++ standard extensions.")
|
|
||||||
|
|
||||||
# Load user settings before the defaults - this way the defaults will not
|
# Load user settings before the defaults - this way the defaults will not
|
||||||
# overwrite the user set options. If the user has not set all options, we still
|
# overwrite the user set options. If the user has not set all options, we still
|
||||||
# have the defaults.
|
# have the defaults.
|
||||||
include("${USER_CONFIG}" OPTIONAL RESULT_VARIABLE USER_CONFIG_LOADED)
|
message(STATUS "(optional) USER_CONFIG = ${USER_CONFIG}")
|
||||||
if (USER_CONFIG_LOADED)
|
include("${USER_CONFIG}" OPTIONAL)
|
||||||
set(USER_CONFIG_LOADED "LOADED")
|
|
||||||
endif()
|
|
||||||
message(STATUS "Loading USER_CONFIG = ${USER_CONFIG} (${USER_CONFIG_LOADED})")
|
|
||||||
include("${CMAKE_CURRENT_SOURCE_DIR}/config/defaults.cmake")
|
include("${CMAKE_CURRENT_SOURCE_DIR}/config/defaults.cmake")
|
||||||
|
|
||||||
# Allow overwriting of the compiler by setting CXX/MPICXX on the command line or
|
# Allow overwriting of the compiler by setting CXX/MPICXX on the command line or
|
||||||
@@ -59,7 +51,7 @@ project(mfem NONE)
|
|||||||
# Current version of MFEM, see also `makefile`.
|
# Current version of MFEM, see also `makefile`.
|
||||||
# mfem_VERSION = (string)
|
# mfem_VERSION = (string)
|
||||||
# MFEM_VERSION = (int) [automatically derived from mfem_VERSION]
|
# MFEM_VERSION = (int) [automatically derived from mfem_VERSION]
|
||||||
set(${PROJECT_NAME}_VERSION 4.9.1)
|
set(${PROJECT_NAME}_VERSION 4.4.1)
|
||||||
|
|
||||||
# Prohibit in-source build
|
# Prohibit in-source build
|
||||||
if (${PROJECT_SOURCE_DIR} STREQUAL ${PROJECT_BINARY_DIR})
|
if (${PROJECT_SOURCE_DIR} STREQUAL ${PROJECT_BINARY_DIR})
|
||||||
@@ -74,7 +66,8 @@ set(XSDK_ENABLE_C OFF)
|
|||||||
set(XSDK_ENABLE_Fortran OFF)
|
set(XSDK_ENABLE_Fortran OFF)
|
||||||
|
|
||||||
# Check if we need to enable C or Fortran.
|
# Check if we need to enable C or Fortran.
|
||||||
if (MFEM_USE_CONDUIT OR
|
if (CMAKE_VERSION VERSION_LESS 3.2 OR
|
||||||
|
MFEM_USE_CONDUIT OR
|
||||||
MFEM_USE_SIDRE OR
|
MFEM_USE_SIDRE OR
|
||||||
MFEM_USE_PETSC)
|
MFEM_USE_PETSC)
|
||||||
# This seems to be needed by:
|
# This seems to be needed by:
|
||||||
@@ -84,111 +77,67 @@ if (MFEM_USE_CONDUIT OR
|
|||||||
# * find_package(PETSc REQUIRED)
|
# * find_package(PETSc REQUIRED)
|
||||||
set(XSDK_ENABLE_C ON)
|
set(XSDK_ENABLE_C ON)
|
||||||
endif()
|
endif()
|
||||||
if (MFEM_USE_STRUMPACK OR MFEM_USE_MUMPS)
|
if (MFEM_USE_STRUMPACK)
|
||||||
# Just needed to find the MPI_Fortran libraries to link with
|
# Just needed to find the MPI_Fortran libraries to link with
|
||||||
set(XSDK_ENABLE_Fortran ON)
|
set(XSDK_ENABLE_Fortran ON)
|
||||||
endif()
|
endif()
|
||||||
# Ginkgo requires C++17:
|
if (MFEM_USE_GINKGO AND ("${CMAKE_CXX_STANDARD}" LESS "14"))
|
||||||
if ((MFEM_USE_GINKGO) AND ("${CMAKE_CXX_STANDARD}" LESS "17"))
|
set(CMAKE_CXX_STANDARD 14)
|
||||||
set(CMAKE_CXX_STANDARD 17 CACHE STRING "C++ standard to use." FORCE)
|
|
||||||
# Google Benchmark, SUNDIALS, STRUMPACK, Tribol, RAJA and Umpire require C++14:
|
|
||||||
elseif ((MFEM_USE_BENCHMARK OR
|
|
||||||
MFEM_USE_SUNDIALS OR
|
|
||||||
MFEM_USE_STRUMPACK OR
|
|
||||||
MFEM_USE_TRIBOL OR
|
|
||||||
MFEM_USE_RAJA OR
|
|
||||||
MFEM_USE_UMPIRE) AND
|
|
||||||
("${CMAKE_CXX_STANDARD}" LESS "14"))
|
|
||||||
set(CMAKE_CXX_STANDARD 14 CACHE STRING "C++ standard to use." FORCE)
|
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
# Include xSDK default CMake file.
|
# Include xSDK default CMake file.
|
||||||
include("${CMAKE_CURRENT_SOURCE_DIR}/config/XSDKDefaults.cmake")
|
include("${CMAKE_CURRENT_SOURCE_DIR}/config/XSDKDefaults.cmake")
|
||||||
|
|
||||||
# Path to MFEM's CMake modules and utilities.
|
|
||||||
set(MFEM_CMAKE_PATH ${PROJECT_SOURCE_DIR}/config)
|
|
||||||
set(CMAKE_MODULE_PATH ${MFEM_CMAKE_PATH}/cmake/modules)
|
|
||||||
|
|
||||||
# Load MFEM CMake utilities.
|
|
||||||
include(MfemCmakeUtilities)
|
|
||||||
|
|
||||||
# Enable languages.
|
# Enable languages.
|
||||||
enable_language(CXX)
|
enable_language(CXX)
|
||||||
if (MINGW)
|
if (MINGW)
|
||||||
# MinGW GCC does not expose the functions jn/_jn, yn/_yn (used in Example
|
# MinGW GCC does not expose the functions jn/_jn, yn/_yn (used in Example
|
||||||
# 25/25p) unless we use '-std=gnu++11':
|
# 25/25p) unless we use '-std=gnu++11':
|
||||||
set(CMAKE_CXX_EXTENSIONS ON
|
set(CMAKE_CXX_EXTENSIONS ON)
|
||||||
CACHE BOOL "Enable C++ standard extensions." FORCE)
|
|
||||||
endif()
|
endif()
|
||||||
if (MFEM_USE_CUDA)
|
if (MFEM_USE_CUDA)
|
||||||
if (MFEM_USE_HIP)
|
if (MFEM_USE_HIP)
|
||||||
message(FATAL_ERROR " *** MFEM_USE_HIP cannot be combined with MFEM_USE_CUDA.")
|
message(FATAL_ERROR " *** MFEM_USE_HIP cannot be combined with MFEM_USE_CUDA.")
|
||||||
endif()
|
endif()
|
||||||
# CUDAToolkit was added in CMake 3.17, so we require at least CMake 3.17 when
|
# MFEM_USE_CUDA requires CMake 3.8 or newer (for direct CUDA support)
|
||||||
# CUDA is enabled:
|
cmake_minimum_required(VERSION 3.8 FATAL_ERROR)
|
||||||
if (CMAKE_VERSION VERSION_LESS 3.17.0)
|
|
||||||
message(FATAL_ERROR "CUDA support requires CMake >= 3.17")
|
|
||||||
endif()
|
|
||||||
# Use ${CMAKE_CXX_COMPILER} as the cuda host compiler.
|
# Use ${CMAKE_CXX_COMPILER} as the cuda host compiler.
|
||||||
if (NOT CMAKE_CUDA_HOST_COMPILER)
|
if (NOT CMAKE_CUDA_HOST_COMPILER)
|
||||||
set(CMAKE_CUDA_HOST_COMPILER ${CMAKE_CXX_COMPILER})
|
set(CMAKE_CUDA_HOST_COMPILER ${CMAKE_CXX_COMPILER})
|
||||||
endif()
|
endif()
|
||||||
if (NOT CMAKE_CUDA_ARCHITECTURES)
|
enable_language(CUDA)
|
||||||
# make CUDA_ARCH resemble the same form as CMAKE_CUDA_ARCHITECTURES
|
set(CMAKE_CUDA_STANDARD 11)
|
||||||
string(REPLACE "sm_" "" CUDA_ARCH_TMP "${CUDA_ARCH}")
|
if (MFEM_USE_GINKGO)
|
||||||
string(REPLACE "," ";" CUDA_ARCH "${CUDA_ARCH_TMP}")
|
set(CMAKE_CUDA_STANDARD 14)
|
||||||
set(CMAKE_CUDA_ARCHITECTURES "${CUDA_ARCH}")
|
endif()
|
||||||
|
set(CMAKE_CUDA_STANDARD_REQUIRED ON)
|
||||||
|
set(CMAKE_CUDA_EXTENSIONS OFF)
|
||||||
|
set(CUDA_FLAGS "--expt-extended-lambda")
|
||||||
|
if (CMAKE_VERSION VERSION_LESS 3.18.0)
|
||||||
|
set(CUDA_FLAGS "-arch=${CUDA_ARCH} ${CUDA_FLAGS}")
|
||||||
|
elseif (NOT CMAKE_CUDA_ARCHITECTURES)
|
||||||
|
string(REGEX REPLACE "^sm_" "" ARCH_NUMBER "${CUDA_ARCH}")
|
||||||
|
if ("${CUDA_ARCH}" STREQUAL "sm_${ARCH_NUMBER}")
|
||||||
|
set(CMAKE_CUDA_ARCHITECTURES "${ARCH_NUMBER}")
|
||||||
|
else()
|
||||||
|
message(FATAL_ERROR "Unknown CUDA_ARCH: ${CUDA_ARCH}")
|
||||||
|
endif()
|
||||||
else()
|
else()
|
||||||
set(CUDA_ARCH "CMAKE_CUDA_ARCHITECTURES: ${CMAKE_CUDA_ARCHITECTURES}")
|
set(CUDA_ARCH "CMAKE_CUDA_ARCHITECTURES: ${CMAKE_CUDA_ARCHITECTURES}")
|
||||||
endif()
|
endif()
|
||||||
message(STATUS "Using CUDA architecture: ${CUDA_ARCH}")
|
message(STATUS "Using CUDA architecture: ${CUDA_ARCH}")
|
||||||
enable_language(CUDA)
|
if (CMAKE_VERSION VERSION_LESS 3.12.0)
|
||||||
if (CMAKE_VERSION VERSION_LESS 3.18.0)
|
# CMake versions 3.8 and 3.9 require this to work; 3.10 and 3.11 are not
|
||||||
# backup try to detect if this is clang or nvcc
|
# tested and may not actually need this (but should be ok to keep).
|
||||||
if(CMAKE_CUDA_COMPILER MATCHES "nvcc$")
|
set(CUDA_FLAGS "-ccbin=${CMAKE_CXX_COMPILER} ${CUDA_FLAGS}")
|
||||||
# nvcc
|
set(CMAKE_CUDA_HOST_LINK_LAUNCHER ${CMAKE_CXX_COMPILER})
|
||||||
set(MFEM_CUDA_COMPILER_IS_NVCC ON)
|
|
||||||
set(CUDA_FLAGS "${CUDA_FLAGS} --expt-extended-lambda --expt-relaxed-constexpr")
|
|
||||||
if ("all" STREQUAL "${CMAKE_CUDA_ARCHITECTURES}"
|
|
||||||
OR "native" STREQUAL "${CMAKE_CUDA_ARCHITECTURES}"
|
|
||||||
OR "all-major" STREQUAL "${CMAKE_CUDA_ARCHITECTURES}")
|
|
||||||
set(CUDA_FLAGS "-arch=${CMAKE_CUDA_ARCHITECTURES} ${CUDA_FLAGS}")
|
|
||||||
else()
|
|
||||||
# build -gencode sequence for multiple architectures
|
|
||||||
foreach(ENTRY IN LISTS CMAKE_CUDA_ARCHITECTURES)
|
|
||||||
set(CUDA_FLAGS
|
|
||||||
"-gencode arch=compute_${ENTRY},code=sm_${ENTRY} ${CUDA_FLAGS}")
|
|
||||||
endforeach()
|
|
||||||
endif()
|
|
||||||
else()
|
|
||||||
# build cuda-gpu-arch sequence for multiple architectures
|
|
||||||
# does not support all/all-major/native
|
|
||||||
foreach(ENTRY IN LISTS CMAKE_CUDA_ARCHITECTURES)
|
|
||||||
set(CUDA_FLAGS "-cuda-gpu-arch=sm_${ENTRY} ${CUDA_FLAGS}")
|
|
||||||
endforeach()
|
|
||||||
endif()
|
|
||||||
else()
|
|
||||||
# TODO: all, native, all-major require CMake 3.24+
|
|
||||||
# backport support for CMake 3.18 to 3.24
|
|
||||||
if (CMAKE_CUDA_COMPILER_ID STREQUAL "NVIDIA")
|
|
||||||
# nvcc
|
|
||||||
set(MFEM_CUDA_COMPILER_IS_NVCC ON)
|
|
||||||
set(CUDA_FLAGS
|
|
||||||
"${CUDA_FLAGS} --expt-extended-lambda --expt-relaxed-constexpr")
|
|
||||||
endif()
|
|
||||||
endif()
|
endif()
|
||||||
set(CMAKE_CUDA_STANDARD ${CMAKE_CXX_STANDARD} CACHE STRING
|
set(CMAKE_CUDA_FLAGS "${CUDA_FLAGS}" CACHE STRING
|
||||||
"CUDA standard to use.")
|
"CUDA flags set for MFEM" FORCE)
|
||||||
set(CMAKE_CUDA_STANDARD_REQUIRED ON CACHE BOOL
|
|
||||||
"Force the use of the chosen CUDA standard.")
|
|
||||||
set(CMAKE_CUDA_EXTENSIONS OFF CACHE BOOL "Enable CUDA standard extensions.")
|
|
||||||
set(CMAKE_CUDA_FLAGS "${CMAKE_CUDA_FLAGS} ${CUDA_FLAGS}")
|
|
||||||
find_package(CUDAToolkit REQUIRED)
|
|
||||||
set(CUSPARSE_FOUND TRUE)
|
set(CUSPARSE_FOUND TRUE)
|
||||||
|
set(CUSPARSE_LIBRARIES "cusparse")
|
||||||
set(CUBLAS_FOUND TRUE)
|
set(CUBLAS_FOUND TRUE)
|
||||||
# Initialize CUSPARSE_LIBRARIES and CUBLAS_LIBRARIES:
|
set(CUSBLAS_LIBRARIES "cublas")
|
||||||
mfem_culib_set_libraries(CUSPARSE cusparse)
|
|
||||||
mfem_culib_set_libraries(CUBLAS cublas)
|
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
if (XSDK_ENABLE_C)
|
if (XSDK_ENABLE_C)
|
||||||
@@ -201,6 +150,13 @@ endif()
|
|||||||
# Suppress warnings about MACOSX_RPATH
|
# Suppress warnings about MACOSX_RPATH
|
||||||
set(CMAKE_MACOSX_RPATH OFF CACHE BOOL "")
|
set(CMAKE_MACOSX_RPATH OFF CACHE BOOL "")
|
||||||
|
|
||||||
|
# CMake needs to know where to find things
|
||||||
|
set(MFEM_CMAKE_PATH ${PROJECT_SOURCE_DIR}/config)
|
||||||
|
set(CMAKE_MODULE_PATH ${MFEM_CMAKE_PATH}/cmake/modules)
|
||||||
|
|
||||||
|
# Load MFEM CMake utilities.
|
||||||
|
include(MfemCmakeUtilities)
|
||||||
|
|
||||||
string(TOUPPER "${PROJECT_NAME}" PROJECT_NAME_UC)
|
string(TOUPPER "${PROJECT_NAME}" PROJECT_NAME_UC)
|
||||||
mfem_version_to_int(${${PROJECT_NAME}_VERSION} ${PROJECT_NAME_UC}_VERSION)
|
mfem_version_to_int(${${PROJECT_NAME}_VERSION} ${PROJECT_NAME_UC}_VERSION)
|
||||||
set(${PROJECT_NAME_UC}_VERSION_STRING ${${PROJECT_NAME}_VERSION})
|
set(${PROJECT_NAME_UC}_VERSION_STRING ${${PROJECT_NAME}_VERSION})
|
||||||
@@ -219,19 +175,6 @@ endif()
|
|||||||
# Process configuration options
|
# Process configuration options
|
||||||
#-------------------------------------------------------------------------------
|
#-------------------------------------------------------------------------------
|
||||||
|
|
||||||
# MFEM_PRECISION -> MFEM_USE_SINGLE, MFEM_USE_DOUBLE
|
|
||||||
if (MFEM_PRECISION MATCHES "^(double|Double|DOUBLE)$")
|
|
||||||
set(MFEM_USE_SINGLE OFF)
|
|
||||||
set(MFEM_USE_DOUBLE ON)
|
|
||||||
elseif (MFEM_PRECISION MATCHES "^(single|Single|SINGLE)$")
|
|
||||||
set(MFEM_USE_SINGLE ON)
|
|
||||||
set(MFEM_USE_DOUBLE OFF)
|
|
||||||
else()
|
|
||||||
message(FATAL_ERROR " *** Invalid floating-point precision: "
|
|
||||||
"MFEM_PRECISION = ${MFEM_PRECISION}")
|
|
||||||
endif()
|
|
||||||
message(STATUS "Floating-point precision: MFEM_PRECISION = ${MFEM_PRECISION}")
|
|
||||||
|
|
||||||
# MFEM_DEBUG
|
# MFEM_DEBUG
|
||||||
if (CMAKE_BUILD_TYPE MATCHES "Debug|debug|DEBUG")
|
if (CMAKE_BUILD_TYPE MATCHES "Debug|debug|DEBUG")
|
||||||
set(MFEM_DEBUG ON)
|
set(MFEM_DEBUG ON)
|
||||||
@@ -239,92 +182,28 @@ else()
|
|||||||
set(MFEM_DEBUG OFF)
|
set(MFEM_DEBUG OFF)
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
# Shared build on Windows
|
|
||||||
if (WIN32 AND BUILD_SHARED_LIBS)
|
|
||||||
# CMAKE_WINDOWS_EXPORT_ALL_SYMBOLS works only with MSVC?
|
|
||||||
set(CMAKE_WINDOWS_EXPORT_ALL_SYMBOLS ON CACHE BOOL
|
|
||||||
"Automatically export symbols for shared Windows DLL build")
|
|
||||||
# Place all .dll and .exe files in the same sub-directory, 'bin/<config>', of
|
|
||||||
# the build directory, so that the .exe files can find the .dll files at
|
|
||||||
# runtime:
|
|
||||||
set(CMAKE_RUNTIME_OUTPUT_DIRECTORY "${CMAKE_BINARY_DIR}/bin")
|
|
||||||
# Note: CMake tests are run from the build-tree sub-directory where the test
|
|
||||||
# is defined, e.g. <build-dir>/tests/unit, so hard coded paths to meshes still
|
|
||||||
# work fine.
|
|
||||||
# Not strictly necessary:
|
|
||||||
# set(CMAKE_LIBRARY_OUTPUT_DIRECTORY "${CMAKE_BINARY_DIR}/lib")
|
|
||||||
# set(CMAKE_ARCHIVE_OUTPUT_DIRECTORY "${CMAKE_BINARY_DIR}/lib")
|
|
||||||
endif()
|
|
||||||
|
|
||||||
# AMD HIP
|
# AMD HIP
|
||||||
if (MFEM_USE_HIP)
|
if (MFEM_USE_HIP)
|
||||||
if (NOT CMAKE_HIP_ARCHITECTURES)
|
if (HIP_ARCH)
|
||||||
if (HIP_ARCH)
|
message(STATUS "Using HIP architecture: ${HIP_ARCH}")
|
||||||
set(CMAKE_HIP_ARCHITECTURES CACHE STRING "HIP targets to compile for" "${HIP_ARCH}")
|
set(GPU_TARGETS "${HIP_ARCH}" CACHE STRING "HIP targets to compile for")
|
||||||
set(GPU_TARGETS "${HIP_ARCH}" CACHE STRING "HIP targets to compile for" FORCE)
|
|
||||||
endif()
|
|
||||||
else()
|
|
||||||
set(HIP_ARCH CACHE STRING "HIP targets to compile for" "${CMAKE_HIP_ARCHITECTURES}")
|
|
||||||
set(GPU_TARGETS "${CMAKE_HIP_ARCHITECTURES}" CACHE STRING "HIP targets to compile for" FORCE)
|
|
||||||
endif()
|
endif()
|
||||||
message(STATUS "Using HIP architecture: ${CMAKE_HIP_ARCHITECTURES}")
|
|
||||||
if (ROCM_PATH)
|
if (ROCM_PATH)
|
||||||
list(INSERT CMAKE_PREFIX_PATH 0 ${ROCM_PATH})
|
list(INSERT CMAKE_PREFIX_PATH 0 ${ROCM_PATH})
|
||||||
endif()
|
endif()
|
||||||
find_package(HIP REQUIRED)
|
find_package(HIP REQUIRED)
|
||||||
find_package(HIPBLAS REQUIRED)
|
|
||||||
find_package(HIPSPARSE REQUIRED)
|
find_package(HIPSPARSE REQUIRED)
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
# OpenMP
|
|
||||||
if (MFEM_USE_OPENMP OR MFEM_USE_LEGACY_OPENMP)
|
|
||||||
if (NOT MFEM_THREAD_SAFE AND MFEM_USE_LEGACY_OPENMP)
|
|
||||||
message(FATAL_ERROR " *** MFEM_USE_LEGACY_OPENMP requires MFEM_THREAD_SAFE=ON.")
|
|
||||||
endif()
|
|
||||||
find_package(OpenMP REQUIRED)
|
|
||||||
set(OPENMP_LIBRARIES ${OpenMP_CXX_LIBRARIES})
|
|
||||||
if(APPLE)
|
|
||||||
# On macOS, the compiler needs additional help to find the <omp.h> header.
|
|
||||||
# See issue #2642 for more information.
|
|
||||||
set(OPENMP_INCLUDE_DIRS ${OpenMP_CXX_INCLUDE_DIRS})
|
|
||||||
endif(APPLE)
|
|
||||||
if (OPENMP_FOUND)
|
|
||||||
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${OpenMP_CXX_FLAGS}")
|
|
||||||
if (MFEM_USE_CUDA)
|
|
||||||
if(MFEM_CUDA_COMPILER_IS_NVCC)
|
|
||||||
set(CMAKE_CUDA_FLAGS "${CMAKE_CUDA_FLAGS} -Xcompiler=${OpenMP_CXX_FLAGS}")
|
|
||||||
else()
|
|
||||||
set(CMAKE_CUDA_FLAGS "${CMAKE_CUDA_FLAGS} ${OpenMP_CXX_FLAGS}")
|
|
||||||
endif()
|
|
||||||
endif()
|
|
||||||
endif()
|
|
||||||
endif()
|
|
||||||
|
|
||||||
# Warn user if deprecated FETCH_TPLS is provided
|
|
||||||
if (DEFINED FETCH_TPLS)
|
|
||||||
message(STATUS "Setting MFEM_FETCH_TPLS to user-provided value of FETCH_TPLS (i.e., MFEM_FETCH_TPLS=${FETCH_TPLS})")
|
|
||||||
set (MFEM_FETCH_TPLS FETCH_TPLS)
|
|
||||||
message(DEPRECATION "The use of FETCH_TPLS is deprecated and will be removed in future verison. Please use MFEM_FETCH_TPLS instead.")
|
|
||||||
endif()
|
|
||||||
|
|
||||||
# Umpire (must be included before hypre, so hypre can use it if needed)
|
|
||||||
if (MFEM_USE_UMPIRE)
|
|
||||||
# umpire uses FindCUDA, which needs CMP0146=OLD in CMake >= 3.27
|
|
||||||
if (CMAKE_VERSION VERSION_GREATER_EQUAL 3.27.0)
|
|
||||||
cmake_policy(SET CMP0146 OLD)
|
|
||||||
endif()
|
|
||||||
find_package(UMPIRE REQUIRED)
|
|
||||||
endif()
|
|
||||||
|
|
||||||
# MPI -> hypre; PETSc (optional)
|
# MPI -> hypre; PETSc (optional)
|
||||||
if (MFEM_USE_MPI)
|
if (MFEM_USE_MPI)
|
||||||
find_package(MPI REQUIRED)
|
find_package(MPI REQUIRED)
|
||||||
set(MPI_CXX_INCLUDE_DIRS ${MPI_CXX_INCLUDE_PATH})
|
set(MPI_CXX_INCLUDE_DIRS ${MPI_CXX_INCLUDE_PATH})
|
||||||
if (MFEM_MPIEXEC)
|
if (MFEM_MPIEXEC)
|
||||||
string(REPLACE " " ";" MPIEXEC ${MFEM_MPIEXEC})
|
set(MPIEXEC ${MFEM_MPIEXEC})
|
||||||
endif()
|
endif()
|
||||||
if (MFEM_MPIEXEC_NP)
|
if (MFEM_MPIEXEC_NP)
|
||||||
string(REPLACE " " ";" MPIEXEC_NUMPROC_FLAG ${MFEM_MPIEXEC_NP})
|
set(MPIEXEC_NUMPROC_FLAG ${MFEM_MPIEXEC_NP})
|
||||||
endif()
|
endif()
|
||||||
# Parallel MFEM depends on hypre
|
# Parallel MFEM depends on hypre
|
||||||
find_package(HYPRE REQUIRED)
|
find_package(HYPRE REQUIRED)
|
||||||
@@ -381,6 +260,20 @@ if (MFEM_USE_LAPACK)
|
|||||||
find_package(LAPACK REQUIRED)
|
find_package(LAPACK REQUIRED)
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
|
# OpenMP
|
||||||
|
if (MFEM_USE_OPENMP OR MFEM_USE_LEGACY_OPENMP)
|
||||||
|
if (NOT MFEM_THREAD_SAFE AND MFEM_USE_LEGACY_OPENMP)
|
||||||
|
message(FATAL_ERROR " *** MFEM_USE_LEGACY_OPENMP requires MFEM_THREAD_SAFE=ON.")
|
||||||
|
endif()
|
||||||
|
find_package(OpenMP REQUIRED)
|
||||||
|
set(OPENMP_LIBRARIES ${OpenMP_CXX_LIBRARIES})
|
||||||
|
if(APPLE)
|
||||||
|
# On macOS, the compiler needs additional help to find the <omp.h> header.
|
||||||
|
# See issue #2642 for more information.
|
||||||
|
set(OPENMP_INCLUDE_DIRS ${OpenMP_CXX_INCLUDE_DIRS})
|
||||||
|
endif(APPLE)
|
||||||
|
endif()
|
||||||
|
|
||||||
# SuiteSparse (before SUNDIALS which may depend on KLU)
|
# SuiteSparse (before SUNDIALS which may depend on KLU)
|
||||||
if (MFEM_USE_SUITESPARSE)
|
if (MFEM_USE_SUITESPARSE)
|
||||||
find_package(SuiteSparse REQUIRED
|
find_package(SuiteSparse REQUIRED
|
||||||
@@ -396,13 +289,12 @@ if (MFEM_USE_SUNDIALS)
|
|||||||
if (MFEM_USE_CUDA)
|
if (MFEM_USE_CUDA)
|
||||||
list(APPEND SUNDIALS_COMPONENTS NVector_Cuda)
|
list(APPEND SUNDIALS_COMPONENTS NVector_Cuda)
|
||||||
endif()
|
endif()
|
||||||
if (MFEM_USE_HIP)
|
find_package(SUNDIALS REQUIRED ${SUNDIALS_COMPONENTS})
|
||||||
list(APPEND SUNDIALS_COMPONENTS NVector_Hip)
|
endif()
|
||||||
endif()
|
|
||||||
# The Core component was added in SUNDIALS v7, so we treat it as optional in
|
# Mesquite
|
||||||
# order to support older versions.
|
if (MFEM_USE_MESQUITE)
|
||||||
find_package(SUNDIALS REQUIRED ${SUNDIALS_COMPONENTS}
|
find_package(Mesquite REQUIRED)
|
||||||
OPTIONAL_COMPONENTS Core)
|
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
# SuperLU_DIST can only be enabled in parallel
|
# SuperLU_DIST can only be enabled in parallel
|
||||||
@@ -418,7 +310,6 @@ endif()
|
|||||||
if (MFEM_USE_MUMPS)
|
if (MFEM_USE_MUMPS)
|
||||||
if (MFEM_USE_MPI)
|
if (MFEM_USE_MPI)
|
||||||
find_package(MUMPS REQUIRED mumps_common pord)
|
find_package(MUMPS REQUIRED mumps_common pord)
|
||||||
set(MFEM_MUMPS_VERSION ${MUMPS_VERSION})
|
|
||||||
else()
|
else()
|
||||||
message(FATAL_ERROR " *** MUMPS requires that MPI be enabled.")
|
message(FATAL_ERROR " *** MUMPS requires that MPI be enabled.")
|
||||||
endif()
|
endif()
|
||||||
@@ -443,11 +334,6 @@ if (MFEM_USE_GSLIB)
|
|||||||
find_package(GSLIB REQUIRED)
|
find_package(GSLIB REQUIRED)
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
# HDF5
|
|
||||||
if (MFEM_USE_HDF5)
|
|
||||||
find_package(HDF5 REQUIRED)
|
|
||||||
endif()
|
|
||||||
|
|
||||||
# NetCDF
|
# NetCDF
|
||||||
if (MFEM_USE_NETCDF)
|
if (MFEM_USE_NETCDF)
|
||||||
find_package(NetCDF REQUIRED)
|
find_package(NetCDF REQUIRED)
|
||||||
@@ -466,10 +352,6 @@ if (MFEM_USE_AMGX)
|
|||||||
find_package(AMGX REQUIRED)
|
find_package(AMGX REQUIRED)
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
if (MFEM_USE_MAGMA)
|
|
||||||
find_package(MAGMA REQUIRED)
|
|
||||||
endif()
|
|
||||||
|
|
||||||
if (MFEM_USE_CONDUIT)
|
if (MFEM_USE_CONDUIT)
|
||||||
find_package(Conduit REQUIRED conduit relay blueprint)
|
find_package(Conduit REQUIRED conduit relay blueprint)
|
||||||
endif()
|
endif()
|
||||||
@@ -533,13 +415,14 @@ endif()
|
|||||||
|
|
||||||
# RAJA
|
# RAJA
|
||||||
if (MFEM_USE_RAJA)
|
if (MFEM_USE_RAJA)
|
||||||
# RAJA uses FindCUDA, which needs CMP0146=OLD in CMake >= 3.27
|
|
||||||
if(CMAKE_VERSION VERSION_GREATER_EQUAL 3.27.0)
|
|
||||||
cmake_policy(SET CMP0146 OLD)
|
|
||||||
endif()
|
|
||||||
find_package(RAJA REQUIRED)
|
find_package(RAJA REQUIRED)
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
|
# UMPIRE
|
||||||
|
if (MFEM_USE_UMPIRE)
|
||||||
|
find_package(UMPIRE REQUIRED)
|
||||||
|
endif()
|
||||||
|
|
||||||
# GOOGLE-BENCHMARK
|
# GOOGLE-BENCHMARK
|
||||||
if (MFEM_USE_BENCHMARK)
|
if (MFEM_USE_BENCHMARK)
|
||||||
find_package(Benchmark REQUIRED)
|
find_package(Benchmark REQUIRED)
|
||||||
@@ -560,36 +443,20 @@ if (MFEM_USE_ADIOS2)
|
|||||||
find_package(ADIOS2 REQUIRED)
|
find_package(ADIOS2 REQUIRED)
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
# MKL CPardiso
|
|
||||||
if (MFEM_USE_MKL_CPARDISO)
|
if (MFEM_USE_MKL_CPARDISO)
|
||||||
if (MFEM_USE_MPI)
|
if (MFEM_USE_MPI)
|
||||||
find_package(MKL_CPARDISO REQUIRED MKL_SEQUENTIAL MKL_LP64 MKL_MPI_WRAPPER)
|
find_package(MKL_CPARDISO REQUIRED MKL_SEQUENTIAL MKL_LP64 MKL_MPI_WRAPPER)
|
||||||
endif()
|
endif()
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
# MKL Pardiso
|
|
||||||
if (MFEM_USE_MKL_PARDISO)
|
|
||||||
find_package(MKL_PARDISO REQUIRED MKL_SEQUENTIAL MKL_LP64)
|
|
||||||
endif()
|
|
||||||
|
|
||||||
# PARELAG
|
# PARELAG
|
||||||
if (MFEM_USE_PARELAG)
|
if (MFEM_USE_PARELAG)
|
||||||
find_package(PARELAG REQUIRED)
|
find_package(PARELAG REQUIRED)
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
# Tribol
|
# Enzyme
|
||||||
if (MFEM_USE_TRIBOL)
|
|
||||||
if (MFEM_USE_MPI)
|
|
||||||
find_package(Tribol REQUIRED tribol redecomp)
|
|
||||||
else()
|
|
||||||
message(FATAL_ERROR " *** Tribol requires that MPI be enabled.")
|
|
||||||
endif()
|
|
||||||
endif()
|
|
||||||
|
|
||||||
if (MFEM_USE_ENZYME)
|
if (MFEM_USE_ENZYME)
|
||||||
find_package(Enzyme REQUIRED HINTS ${ENZYME_DIR})
|
find_package(ENZYME REQUIRED)
|
||||||
message(STATUS "Enzyme found in ${ENZYME_DIR}.")
|
|
||||||
set(ENZYME_INCLUDE_DIRS ${ENZYME_DIR}/include)
|
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
# MFEM_TIMER_TYPE
|
# MFEM_TIMER_TYPE
|
||||||
@@ -610,57 +477,39 @@ if (NOT DEFINED MFEM_TIMER_TYPE)
|
|||||||
endif()
|
endif()
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
# Without this, CMake 3.21.1 (and 3.20.2) run into CMake Errors like the following:
|
|
||||||
# CMake Error at config/cmake/modules/MfemCmakeUtilities.cmake:60 (add_library):
|
|
||||||
# Target "mfem" links to target "Threads::Threads" but the target was not
|
|
||||||
# found. Perhaps a find_package() call is missing for an IMPORTED target, or
|
|
||||||
# an ALIAS target is missing?
|
|
||||||
# Call Stack (most recent call first):
|
|
||||||
# CMakeLists.txt:474 (mfem_add_library)
|
|
||||||
#
|
|
||||||
# NOTE: We need to figure out which TPL library adds the dependency on
|
|
||||||
# "Threads::Threads" and call the next line only when that TPL library is
|
|
||||||
# enabled. -V. Dobrev
|
|
||||||
find_package(Threads REQUIRED)
|
|
||||||
|
|
||||||
# List all possible libraries in order of dependencies.
|
# List all possible libraries in order of dependencies.
|
||||||
# [METIS < SuiteSparse]:
|
# [METIS < SuiteSparse]:
|
||||||
# With newer versions of SuiteSparse which include METIS header using 64-bit
|
# With newer versions of SuiteSparse which include METIS header using 64-bit
|
||||||
# integers, the METIS header (with 32-bit indices, as used by mfem) needs to
|
# integers, the METIS header (with 32-bit indices, as used by mfem) needs to
|
||||||
# be before SuiteSparse.
|
# be before SuiteSparse.
|
||||||
set(MFEM_TPLS OPENMP HYPRE LAPACK BLAS SuperLUDist STRUMPACK METIS SuiteSparse
|
set(MFEM_TPLS OPENMP HYPRE BLAS LAPACK SuperLUDist METIS SuiteSparse SUNDIALS
|
||||||
SUNDIALS PETSC SLEPC MUMPS AXOM FMS CONDUIT Ginkgo GNUTLS GSLIB HDF5
|
PETSC SLEPC MESQUITE MUMPS STRUMPACK AXOM FMS CONDUIT Ginkgo GNUTLS GSLIB
|
||||||
NETCDF MPFR PUMI HIOP POSIXCLOCKS MFEMBacktrace ZLIB OCCA CEED RAJA UMPIRE
|
NETCDF MPFR PUMI HIOP POSIXCLOCKS MFEMBacktrace ZLIB OCCA CEED RAJA UMPIRE
|
||||||
ADIOS2 MKL_CPARDISO MKL_PARDISO AMGX MAGMA CUSPARSE CUBLAS CALIPER CODIPACK
|
ADIOS2 CUBLAS CUSPARSE MKL_CPARDISO AMGX CALIPER CODIPACK BENCHMARK PARELAG
|
||||||
BENCHMARK PARELAG TRIBOL MPI_CXX HIP HIPBLAS HIPSPARSE MOONOLITH BLITZ
|
MPI_CXX HIP HIPSPARSE MOONOLITH BLITZ ALGOIM ENZYME)
|
||||||
ALGOIM ENZYME CUDA::cudart)
|
|
||||||
|
|
||||||
# Add all created targets and *_FOUND libraries in the variables TPL_TARGETS and
|
# Add all *_FOUND libraries in the variable TPL_LIBRARIES.
|
||||||
# TPL_LIBRARIES, respectively.
|
|
||||||
set(TPL_TARGETS)
|
|
||||||
set(TPL_LIBRARIES "")
|
set(TPL_LIBRARIES "")
|
||||||
set(TPL_INCLUDE_DIRS "")
|
set(TPL_INCLUDE_DIRS "")
|
||||||
foreach(TPL IN LISTS MFEM_TPLS)
|
foreach(TPL IN LISTS MFEM_TPLS)
|
||||||
if (${TPL}_FOUND OR TARGET ${TPL})
|
if (${TPL}_FOUND)
|
||||||
message(STATUS "MFEM: using package ${TPL}")
|
message(STATUS "MFEM: using package ${TPL}")
|
||||||
if (TARGET ${TPL})
|
list(APPEND TPL_LIBRARIES ${${TPL}_LIBRARIES})
|
||||||
list(APPEND TPL_TARGETS ${TPL})
|
list(APPEND TPL_INCLUDE_DIRS ${${TPL}_INCLUDE_DIRS})
|
||||||
else()
|
|
||||||
list(APPEND TPL_LIBRARIES ${${TPL}_LIBRARIES})
|
|
||||||
list(APPEND TPL_INCLUDE_DIRS ${${TPL}_INCLUDE_DIRS})
|
|
||||||
endif()
|
|
||||||
endif()
|
endif()
|
||||||
endforeach(TPL)
|
endforeach(TPL)
|
||||||
|
|
||||||
# reverse to remove the first instance of entries in TPL_LIBRARIES
|
|
||||||
# so later duplicates are kept (for dependency ordering)
|
|
||||||
list(REVERSE TPL_LIBRARIES)
|
|
||||||
list(REMOVE_DUPLICATES TPL_LIBRARIES)
|
list(REMOVE_DUPLICATES TPL_LIBRARIES)
|
||||||
list(REVERSE TPL_LIBRARIES)
|
|
||||||
list(REMOVE_DUPLICATES TPL_INCLUDE_DIRS)
|
list(REMOVE_DUPLICATES TPL_INCLUDE_DIRS)
|
||||||
# message(STATUS "TPL_INCLUDE_DIRS = ${TPL_INCLUDE_DIRS}")
|
# message(STATUS "TPL_INCLUDE_DIRS = ${TPL_INCLUDE_DIRS}")
|
||||||
|
|
||||||
message(STATUS "MFEM shared library: BUILD_SHARED_LIBS = ${BUILD_SHARED_LIBS}")
|
if (OPENMP_FOUND)
|
||||||
|
message(STATUS "MFEM: using package OpenMP")
|
||||||
|
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${OpenMP_CXX_FLAGS}")
|
||||||
|
if (MFEM_USE_CUDA)
|
||||||
|
set(CMAKE_CUDA_FLAGS "${CMAKE_CUDA_FLAGS} -Xcompiler=${OpenMP_CXX_FLAGS}")
|
||||||
|
endif()
|
||||||
|
endif()
|
||||||
|
|
||||||
message(STATUS "MFEM build type: CMAKE_BUILD_TYPE = ${CMAKE_BUILD_TYPE}")
|
message(STATUS "MFEM build type: CMAKE_BUILD_TYPE = ${CMAKE_BUILD_TYPE}")
|
||||||
message(STATUS "MFEM version: v${MFEM_VERSION_STRING}")
|
message(STATUS "MFEM version: v${MFEM_VERSION_STRING}")
|
||||||
message(STATUS "MFEM git string: ${MFEM_GIT_STRING}")
|
message(STATUS "MFEM git string: ${MFEM_GIT_STRING}")
|
||||||
@@ -691,46 +540,20 @@ set(MASTER_HEADERS
|
|||||||
${PROJECT_SOURCE_DIR}/mfem.hpp
|
${PROJECT_SOURCE_DIR}/mfem.hpp
|
||||||
${PROJECT_SOURCE_DIR}/mfem-performance.hpp)
|
${PROJECT_SOURCE_DIR}/mfem-performance.hpp)
|
||||||
|
|
||||||
# Installation options (we use GNUInstallDirs but prefer lib by default)
|
set(_lib_path "${CMAKE_INSTALL_PREFIX}/lib")
|
||||||
set(MFEM_USE_GNUINSTALLDIRS OFF CACHE BOOL
|
|
||||||
"Use CMAKE_INSTALL_LIBDIR as defined by the GNUInstallDirs CMake module.")
|
|
||||||
if (NOT MFEM_USE_GNUINSTALLDIRS)
|
|
||||||
mfem_cache_path(CMAKE_INSTALL_LIBDIR "lib" "Object code libraries (lib)")
|
|
||||||
endif()
|
|
||||||
include(GNUInstallDirs)
|
|
||||||
mfem_cache_path(INSTALL_INCLUDE_DIR "${CMAKE_INSTALL_INCLUDEDIR}"
|
|
||||||
"Relative or absolute path for installing header files.")
|
|
||||||
mfem_cache_path(INSTALL_BIN_DIR "${CMAKE_INSTALL_BINDIR}"
|
|
||||||
"Relative or absolute path for installing the binaries.")
|
|
||||||
mfem_cache_path(INSTALL_LIB_DIR "${CMAKE_INSTALL_LIBDIR}"
|
|
||||||
"Relative or absolute path for installing the library.")
|
|
||||||
mfem_cache_path(INSTALL_SHARE_DIR "${CMAKE_INSTALL_DATAROOTDIR}"
|
|
||||||
"Relative or absolute path for installing shared data.")
|
|
||||||
# other options: "share/mfem/cmake", "lib/mfem/cmake"
|
|
||||||
mfem_cache_path(INSTALL_CMAKE_DIR "${INSTALL_LIB_DIR}/cmake/mfem"
|
|
||||||
"Relative or absolute path for installing cmake config files.")
|
|
||||||
|
|
||||||
mfem_path_to_fullpath("${INSTALL_LIB_DIR}" "${CMAKE_INSTALL_PREFIX}" _lib_path)
|
|
||||||
set(CMAKE_INSTALL_RPATH_USE_LINK_PATH ON CACHE BOOL "")
|
set(CMAKE_INSTALL_RPATH_USE_LINK_PATH ON CACHE BOOL "")
|
||||||
if(NOT DEFINED CMAKE_INSTALL_RPATH)
|
set(CMAKE_INSTALL_RPATH "${_lib_path}" CACHE PATH "")
|
||||||
set(CMAKE_INSTALL_RPATH "${_lib_path}")
|
set(CMAKE_INSTALL_NAME_DIR "${_lib_path}" CACHE PATH "")
|
||||||
endif()
|
|
||||||
if(NOT DEFINED CMAKE_INSTALL_NAME_DIR)
|
|
||||||
set(CMAKE_INSTALL_NAME_DIR "${_lib_path}")
|
|
||||||
endif()
|
|
||||||
|
|
||||||
# Variables used when generating _config.hpp, and config.mk
|
set(MFEM_SOURCE_DIR ${CMAKE_CURRENT_SOURCE_DIR} CACHE PATH
|
||||||
set(MFEM_SOURCE_DIR ${CMAKE_CURRENT_SOURCE_DIR})
|
"The MFEM source directory" FORCE)
|
||||||
set(MFEM_INSTALL_DIR ${CMAKE_INSTALL_PREFIX})
|
set(MFEM_INSTALL_DIR ${CMAKE_INSTALL_PREFIX} CACHE PATH
|
||||||
|
"The MFEM install directory" FORCE)
|
||||||
|
|
||||||
# Declaring the library
|
# Declaring the library
|
||||||
mfem_add_library(mfem ${SOURCES} ${HEADERS} ${MASTER_HEADERS})
|
mfem_add_library(mfem ${SOURCES} ${HEADERS} ${MASTER_HEADERS})
|
||||||
target_compile_features(mfem PUBLIC cxx_std_${CMAKE_CXX_STANDARD})
|
|
||||||
# message(STATUS "TPL_LIBRARIES = ${TPL_LIBRARIES}")
|
# message(STATUS "TPL_LIBRARIES = ${TPL_LIBRARIES}")
|
||||||
target_link_libraries(mfem PUBLIC ${TPL_LIBRARIES} ${TPL_TARGETS})
|
target_link_libraries(mfem PUBLIC ${TPL_LIBRARIES})
|
||||||
if (TPL_TARGETS)
|
|
||||||
add_dependencies(mfem ${TPL_TARGETS})
|
|
||||||
endif()
|
|
||||||
if (MINGW)
|
if (MINGW)
|
||||||
target_link_libraries(mfem PRIVATE ws2_32)
|
target_link_libraries(mfem PRIVATE ws2_32)
|
||||||
endif()
|
endif()
|
||||||
@@ -742,22 +565,7 @@ target_include_directories(mfem
|
|||||||
PUBLIC
|
PUBLIC
|
||||||
$<BUILD_INTERFACE:${CMAKE_CURRENT_BINARY_DIR}>
|
$<BUILD_INTERFACE:${CMAKE_CURRENT_BINARY_DIR}>
|
||||||
$<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}>
|
$<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}>
|
||||||
# The INSTALL_INTERFACE is handled below
|
|
||||||
${TPL_INCLUDE_DIRS})
|
${TPL_INCLUDE_DIRS})
|
||||||
if (MFEM_USE_MPI)
|
|
||||||
if (MPI_CXX_COMPILE_FLAGS)
|
|
||||||
separate_arguments(MPI_CXX_COMPILE_ARGS UNIX_COMMAND
|
|
||||||
"${MPI_CXX_COMPILE_FLAGS}")
|
|
||||||
target_compile_options(mfem PUBLIC ${MPI_CXX_COMPILE_ARGS})
|
|
||||||
endif()
|
|
||||||
if (MPI_CXX_LINK_FLAGS)
|
|
||||||
target_link_libraries(mfem PUBLIC ${MPI_CXX_LINK_FLAGS})
|
|
||||||
endif()
|
|
||||||
endif()
|
|
||||||
if (MFEM_USE_ENZYME)
|
|
||||||
target_link_libraries(mfem PUBLIC ClangEnzymeFlags)
|
|
||||||
endif()
|
|
||||||
|
|
||||||
set_target_properties(mfem PROPERTIES VERSION "${mfem_VERSION}")
|
set_target_properties(mfem PROPERTIES VERSION "${mfem_VERSION}")
|
||||||
set_target_properties(mfem PROPERTIES SOVERSION "${mfem_VERSION}")
|
set_target_properties(mfem PROPERTIES SOVERSION "${mfem_VERSION}")
|
||||||
|
|
||||||
@@ -769,7 +577,6 @@ if (NOT ("${PROJECT_SOURCE_DIR}" STREQUAL "${PROJECT_BINARY_DIR}"))
|
|||||||
endif()
|
endif()
|
||||||
|
|
||||||
# Generate configuration file in the build directory: config/_config.hpp.
|
# Generate configuration file in the build directory: config/_config.hpp.
|
||||||
set(MFEM_SHARED_BUILD ${BUILD_SHARED_LIBS})
|
|
||||||
configure_file(
|
configure_file(
|
||||||
"${PROJECT_SOURCE_DIR}/config/cmake/config.hpp.in"
|
"${PROJECT_SOURCE_DIR}/config/cmake/config.hpp.in"
|
||||||
"${PROJECT_BINARY_DIR}/config/_config.hpp")
|
"${PROJECT_BINARY_DIR}/config/_config.hpp")
|
||||||
@@ -780,34 +587,16 @@ if (NOT ("${PROJECT_SOURCE_DIR}" STREQUAL "${PROJECT_BINARY_DIR}"))
|
|||||||
foreach(Header mfem.hpp mfem-performance.hpp)
|
foreach(Header mfem.hpp mfem-performance.hpp)
|
||||||
message(STATUS
|
message(STATUS
|
||||||
"Writing substitute header --> \"${Header}\"")
|
"Writing substitute header --> \"${Header}\"")
|
||||||
file(WRITE "${PROJECT_BINARY_DIR}/${Header}.tmp"
|
file(WRITE "${PROJECT_BINARY_DIR}/${Header}"
|
||||||
"// Auto-generated file.
|
"// Auto-generated file.
|
||||||
#define MFEM_CONFIG_FILE \"${PROJECT_BINARY_DIR}/config/_config.hpp\"
|
#define MFEM_CONFIG_FILE \"${PROJECT_BINARY_DIR}/config/_config.hpp\"
|
||||||
#include \"${PROJECT_SOURCE_DIR}/${Header}\"
|
#include \"${PROJECT_SOURCE_DIR}/${Header}\"
|
||||||
")
|
")
|
||||||
|
|
||||||
execute_process(COMMAND ${CMAKE_COMMAND} -E copy_if_different
|
|
||||||
"${PROJECT_BINARY_DIR}/${Header}.tmp"
|
|
||||||
"${PROJECT_BINARY_DIR}/${Header}"
|
|
||||||
)
|
|
||||||
execute_process(COMMAND ${CMAKE_COMMAND} -E remove
|
|
||||||
"${PROJECT_BINARY_DIR}/${Header}.tmp"
|
|
||||||
)
|
|
||||||
|
|
||||||
# This version will be installed in the top include directory:
|
# This version will be installed in the top include directory:
|
||||||
file(WRITE "${PROJECT_BINARY_DIR}/InstallHeaders/${Header}.tmp"
|
file(WRITE "${PROJECT_BINARY_DIR}/InstallHeaders/${Header}"
|
||||||
"// Auto-generated file.
|
"// Auto-generated file.
|
||||||
#include \"mfem/${Header}\"
|
#include \"mfem/${Header}\"
|
||||||
")
|
")
|
||||||
|
|
||||||
execute_process(COMMAND ${CMAKE_COMMAND} -E copy_if_different
|
|
||||||
"${PROJECT_BINARY_DIR}/InstallHeaders/${Header}.tmp"
|
|
||||||
"${PROJECT_BINARY_DIR}/InstallHeaders/${Header}"
|
|
||||||
)
|
|
||||||
execute_process(COMMAND ${CMAKE_COMMAND} -E remove
|
|
||||||
"${PROJECT_BINARY_DIR}/InstallHeaders/${Header}.tmp"
|
|
||||||
)
|
|
||||||
|
|
||||||
endforeach()
|
endforeach()
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
@@ -824,17 +613,11 @@ if (MFEM_ENABLE_TESTING)
|
|||||||
add_mfem_target(${MFEM_ALL_TESTS_TARGET_NAME} OFF)
|
add_mfem_target(${MFEM_ALL_TESTS_TARGET_NAME} OFF)
|
||||||
add_subdirectory(tests EXCLUDE_FROM_ALL)
|
add_subdirectory(tests EXCLUDE_FROM_ALL)
|
||||||
|
|
||||||
if (MFEM_USE_BENCHMARK)
|
# Create a target for all benchmarks and, optionally, enable it.
|
||||||
# Create a target for all benchmarks and, optionally, enable it.
|
set(MFEM_ALL_BENCHMARKS_TARGET_NAME benchmarks)
|
||||||
set(MFEM_ALL_BENCHMARKS_TARGET_NAME benchmarks)
|
add_mfem_target(${MFEM_ALL_BENCHMARKS_TARGET_NAME}
|
||||||
add_mfem_target(${MFEM_ALL_BENCHMARKS_TARGET_NAME}
|
${MFEM_ENABLE_GOOGLE_BENCHMARKS})
|
||||||
${MFEM_ENABLE_BENCHMARKS})
|
add_subdirectory(tests/benchmarks EXCLUDE_FROM_ALL)
|
||||||
if (MFEM_ENABLE_BENCHMARKS)
|
|
||||||
add_subdirectory(tests/benchmarks) #install benchmarks if enabled
|
|
||||||
else()
|
|
||||||
add_subdirectory(tests/benchmarks EXCLUDE_FROM_ALL)
|
|
||||||
endif()
|
|
||||||
endif()
|
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
# Define a target that all examples and miniapps will depend on.
|
# Define a target that all examples and miniapps will depend on.
|
||||||
@@ -853,11 +636,7 @@ endif()
|
|||||||
# Create a target for all miniapps and, optionally, enable it.
|
# Create a target for all miniapps and, optionally, enable it.
|
||||||
set(MFEM_ALL_MINIAPPS_TARGET_NAME miniapps)
|
set(MFEM_ALL_MINIAPPS_TARGET_NAME miniapps)
|
||||||
add_mfem_target(${MFEM_ALL_MINIAPPS_TARGET_NAME} ${MFEM_ENABLE_MINIAPPS})
|
add_mfem_target(${MFEM_ALL_MINIAPPS_TARGET_NAME} ${MFEM_ENABLE_MINIAPPS})
|
||||||
if (MFEM_ENABLE_MINIAPPS)
|
add_subdirectory(miniapps EXCLUDE_FROM_ALL)
|
||||||
add_subdirectory(miniapps) #install miniapps if enabled
|
|
||||||
else()
|
|
||||||
add_subdirectory(miniapps EXCLUDE_FROM_ALL)
|
|
||||||
endif()
|
|
||||||
|
|
||||||
# Target to build all executables, i.e. everything.
|
# Target to build all executables, i.e. everything.
|
||||||
add_custom_target(exec)
|
add_custom_target(exec)
|
||||||
@@ -872,12 +651,11 @@ add_dependencies(exec
|
|||||||
# - https://cmake.org/Bug/view.php?id=8438
|
# - https://cmake.org/Bug/view.php?id=8438
|
||||||
|
|
||||||
# Add a target to copy the mfem data directory to the build directory
|
# Add a target to copy the mfem data directory to the build directory
|
||||||
# Implementable as a single copy_directory_if_different command w/ CMake >= 3.26
|
add_custom_command(OUTPUT data_is_copied
|
||||||
file(GLOB DATA_FILES CONFIGURE_DEPENDS ${PROJECT_SOURCE_DIR}/data/*)
|
COMMAND ${CMAKE_COMMAND} -E copy_directory ${PROJECT_SOURCE_DIR}/data data
|
||||||
add_custom_target(copy_data
|
COMMAND ${CMAKE_COMMAND} -E touch data_is_copied
|
||||||
COMMAND ${CMAKE_COMMAND} -E make_directory data
|
COMMENT "Copying the data directory ...")
|
||||||
COMMAND ${CMAKE_COMMAND} -E copy_if_different ${DATA_FILES} data
|
add_custom_target(copy_data DEPENDS data_is_copied)
|
||||||
COMMENT "Syncing the data directory ...")
|
|
||||||
# Add 'copy_data' as a prerequisite for all executables, if the source and the
|
# Add 'copy_data' as a prerequisite for all executables, if the source and the
|
||||||
# build directories are not the same.
|
# build directories are not the same.
|
||||||
if (NOT ("${PROJECT_SOURCE_DIR}" STREQUAL "${PROJECT_BINARY_DIR}"))
|
if (NOT ("${PROJECT_SOURCE_DIR}" STREQUAL "${PROJECT_BINARY_DIR}"))
|
||||||
@@ -908,8 +686,15 @@ add_subdirectory(doc)
|
|||||||
#-------------------------------------------------------------------------------
|
#-------------------------------------------------------------------------------
|
||||||
|
|
||||||
message(STATUS "CMAKE_INSTALL_PREFIX = ${CMAKE_INSTALL_PREFIX}")
|
message(STATUS "CMAKE_INSTALL_PREFIX = ${CMAKE_INSTALL_PREFIX}")
|
||||||
|
set(INSTALL_INCLUDE_DIR include
|
||||||
|
CACHE PATH "Relative path for installing header files.")
|
||||||
|
set(INSTALL_LIB_DIR lib
|
||||||
|
CACHE PATH "Relative path for installing the library.")
|
||||||
|
# other options: "share/mfem/cmake", "lib/mfem/cmake"
|
||||||
|
set(INSTALL_CMAKE_DIR lib/cmake/mfem
|
||||||
|
CACHE PATH "Relative path for installing cmake config files.")
|
||||||
|
|
||||||
target_include_directories(mfem BEFORE
|
target_include_directories(mfem
|
||||||
PUBLIC
|
PUBLIC
|
||||||
$<INSTALL_INTERFACE:${INSTALL_INCLUDE_DIR}>)
|
$<INSTALL_INTERFACE:${INSTALL_INCLUDE_DIR}>)
|
||||||
|
|
||||||
@@ -921,9 +706,7 @@ set(CMAKE_INSTALL_DEFAULT_COMPONENT_NAME Development)
|
|||||||
# Install the library
|
# Install the library
|
||||||
install(TARGETS ${PROJECT_NAME}
|
install(TARGETS ${PROJECT_NAME}
|
||||||
EXPORT ${PROJECT_NAME_UC}Targets
|
EXPORT ${PROJECT_NAME_UC}Targets
|
||||||
RUNTIME DESTINATION ${INSTALL_BIN_DIR}
|
DESTINATION ${INSTALL_LIB_DIR})
|
||||||
LIBRARY DESTINATION ${INSTALL_LIB_DIR}
|
|
||||||
ARCHIVE DESTINATION ${INSTALL_LIB_DIR})
|
|
||||||
|
|
||||||
# Install the master headers
|
# Install the master headers
|
||||||
foreach(Header mfem.hpp mfem-performance.hpp)
|
foreach(Header mfem.hpp mfem-performance.hpp)
|
||||||
@@ -932,7 +715,7 @@ foreach(Header mfem.hpp mfem-performance.hpp)
|
|||||||
endforeach()
|
endforeach()
|
||||||
install(FILES ${MASTER_HEADERS} DESTINATION ${INSTALL_INCLUDE_DIR}/mfem)
|
install(FILES ${MASTER_HEADERS} DESTINATION ${INSTALL_INCLUDE_DIR}/mfem)
|
||||||
|
|
||||||
# Install the headers (except common miniapp which is installed from its subdir)
|
# Install the headers; currently, the miniapps headers are excluded
|
||||||
install(DIRECTORY ${MFEM_SOURCE_DIRS}
|
install(DIRECTORY ${MFEM_SOURCE_DIRS}
|
||||||
DESTINATION ${INSTALL_INCLUDE_DIR}/mfem
|
DESTINATION ${INSTALL_INCLUDE_DIR}/mfem
|
||||||
FILES_MATCHING PATTERN "*.hpp")
|
FILES_MATCHING PATTERN "*.hpp")
|
||||||
@@ -961,8 +744,10 @@ endif()
|
|||||||
|
|
||||||
# Install the configuration header files
|
# Install the configuration header files
|
||||||
install(FILES ${PROJECT_BINARY_DIR}/config/_config.hpp
|
install(FILES ${PROJECT_BINARY_DIR}/config/_config.hpp
|
||||||
${PROJECT_SOURCE_DIR}/config/config.hpp
|
DESTINATION ${INSTALL_INCLUDE_DIR}/mfem/config
|
||||||
${PROJECT_SOURCE_DIR}/config/tconfig.hpp
|
RENAME config.hpp)
|
||||||
|
|
||||||
|
install(FILES ${PROJECT_SOURCE_DIR}/config/tconfig.hpp
|
||||||
DESTINATION ${INSTALL_INCLUDE_DIR}/mfem/config)
|
DESTINATION ${INSTALL_INCLUDE_DIR}/mfem/config)
|
||||||
|
|
||||||
# Package the whole thing up nicely
|
# Package the whole thing up nicely
|
||||||
@@ -1009,15 +794,9 @@ install(FILES
|
|||||||
install(EXPORT ${PROJECT_NAME_UC}Targets
|
install(EXPORT ${PROJECT_NAME_UC}Targets
|
||||||
DESTINATION ${INSTALL_CMAKE_DIR})
|
DESTINATION ${INSTALL_CMAKE_DIR})
|
||||||
|
|
||||||
# Install the data directory if present, i.e. if the copy_data target is built
|
|
||||||
install(DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}/data
|
|
||||||
DESTINATION ${MFEM_INSTALL_DIR} OPTIONAL)
|
|
||||||
|
|
||||||
#-------------------------------------------------------------------------------
|
#-------------------------------------------------------------------------------
|
||||||
# Create 'config.mk' from 'config.mk.in' for the build and install locations and
|
# Create 'config.mk' from 'config.mk.in' for the build and install locations and
|
||||||
# define install rules for 'config.mk' and 'test.mk'
|
# define install rules for 'config.mk' and 'test.mk'
|
||||||
#-------------------------------------------------------------------------------
|
#-------------------------------------------------------------------------------
|
||||||
if (MFEM_USE_CUDA OR MFEM_USE_HIP)
|
|
||||||
option(MFEM_EXPORT_GPU_CONFIG "Export config.mk for GPU-enabled downstream packages" ON)
|
|
||||||
endif()
|
|
||||||
mfem_export_mk_files()
|
mfem_export_mk_files()
|
||||||
|
|||||||
+6
-44
@@ -24,14 +24,6 @@ must be made under this license.
|
|||||||
Note also that MFEM has a [Code of Conduct](CODE_OF_CONDUCT.md). By participating
|
Note also that MFEM has a [Code of Conduct](CODE_OF_CONDUCT.md). By participating
|
||||||
in the MFEM community, you agree to abide by its rules.
|
in the MFEM community, you agree to abide by its rules.
|
||||||
|
|
||||||
## AI Policy
|
|
||||||
- Use of AI code generation in MFEM is allowed but must be disclosed, e.g. by
|
|
||||||
selecting the `AI-assisted` label on the PR.
|
|
||||||
- By submitting a PR, the author acknowledges that they have reviewed and
|
|
||||||
understand the changes they are proposing.
|
|
||||||
- PR authors are still responsible for correctness, licensing, and attribution
|
|
||||||
of all changes.
|
|
||||||
|
|
||||||
If you plan on contributing to MFEM, consider reviewing the
|
If you plan on contributing to MFEM, consider reviewing the
|
||||||
[issue tracker](https://github.com/mfem/mfem/issues) first to check if a thread
|
[issue tracker](https://github.com/mfem/mfem/issues) first to check if a thread
|
||||||
already exists for your desired feature or the bug you ran into. Use a pull
|
already exists for your desired feature or the bug you ran into. Use a pull
|
||||||
@@ -110,9 +102,7 @@ The MFEM source code has the following structure:
|
|||||||
.
|
.
|
||||||
├── config
|
├── config
|
||||||
│ ├── cmake
|
│ ├── cmake
|
||||||
│ ├── docker
|
│ └── githooks
|
||||||
│ ├── githooks
|
|
||||||
│ └── vcpkg
|
|
||||||
├── data
|
├── data
|
||||||
├── doc
|
├── doc
|
||||||
├── examples
|
├── examples
|
||||||
@@ -121,58 +111,37 @@ The MFEM source code has the following structure:
|
|||||||
│ ├── ginkgo
|
│ ├── ginkgo
|
||||||
│ ├── hiop
|
│ ├── hiop
|
||||||
│ ├── jupyter
|
│ ├── jupyter
|
||||||
│ ├── moonolith
|
|
||||||
│ ├── petsc
|
│ ├── petsc
|
||||||
│ ├── pumi
|
│ ├── pumi
|
||||||
│ ├── sundials
|
│ ├── sundials
|
||||||
| └── superlu
|
| └── superlu
|
||||||
├── fem
|
├── fem
|
||||||
│ ├── ceed
|
│ ├── ceed
|
||||||
│ ├── dfem
|
|
||||||
│ ├── eltrans
|
|
||||||
│ ├── fe
|
│ ├── fe
|
||||||
│ ├── gslib
|
|
||||||
│ ├── integ
|
|
||||||
│ ├── lor
|
|
||||||
│ ├── moonolith
|
|
||||||
│ ├── qinterp
|
│ ├── qinterp
|
||||||
|
│ ├── moonolith
|
||||||
│ └── tmop
|
│ └── tmop
|
||||||
│ | ├── assemble
|
|
||||||
│ | ├── metrics
|
|
||||||
│ | ├── mult
|
|
||||||
│ | └── tools
|
|
||||||
├── general
|
├── general
|
||||||
├── linalg
|
├── linalg
|
||||||
│ ├── batched
|
|
||||||
│ └── simd
|
│ └── simd
|
||||||
├── mesh
|
├── mesh
|
||||||
│ └── submesh
|
|
||||||
├── miniapps
|
├── miniapps
|
||||||
│ ├── adjoint
|
│ ├── adjoint
|
||||||
│ ├── autodiff
|
│ ├── autodiff
|
||||||
│ ├── common
|
│ ├── common
|
||||||
│ ├── contact
|
|
||||||
│ ├── dfem
|
|
||||||
│ ├── dpg
|
|
||||||
│ ├── electromagnetics
|
│ ├── electromagnetics
|
||||||
│ ├── fluids
|
|
||||||
│ │ ├── navier
|
|
||||||
│ │ └── schrodinger-flow
|
|
||||||
│ ├── gslib
|
│ ├── gslib
|
||||||
│ ├── hdiv-linear-solver
|
|
||||||
│ ├── hooke
|
│ ├── hooke
|
||||||
│ ├── meshing
|
│ ├── meshing
|
||||||
│ ├── mtop
|
│ ├── mtop
|
||||||
│ ├── multidomain
|
│ ├── navier
|
||||||
│ ├── nurbs
|
│ ├── nurbs
|
||||||
│ ├── parelag
|
│ ├── parelag
|
||||||
│ ├── performance
|
│ ├── performance
|
||||||
│ ├── shifted
|
│ ├── shifted
|
||||||
│ ├── solvers
|
│ ├── solvers
|
||||||
│ ├── spde
|
|
||||||
│ ├── tools
|
│ ├── tools
|
||||||
│ ├── toys
|
│ └── toys
|
||||||
│ └── tribol
|
|
||||||
└── tests
|
└── tests
|
||||||
├── benchmarks
|
├── benchmarks
|
||||||
├── convergence
|
├── convergence
|
||||||
@@ -234,7 +203,7 @@ device/host memory manager.
|
|||||||
- The main device-relevant classes and sources are:
|
- The main device-relevant classes and sources are:
|
||||||
+ [`Device`](https://docs.mfem.org/html/device_8hpp.html)
|
+ [`Device`](https://docs.mfem.org/html/device_8hpp.html)
|
||||||
+ [`MemoryManager`](https://docs.mfem.org/html/mem_manager_8hpp.html)
|
+ [`MemoryManager`](https://docs.mfem.org/html/mem_manager_8hpp.html)
|
||||||
+ the [`mfem::forall`](https://docs.mfem.org/html/forall_8hpp.html) function
|
+ the [`MFEM_FORALL`](https://docs.mfem.org/html/forall_8hpp.html) macro
|
||||||
+ the [`cuda.hpp`](https://docs.mfem.org/html/cuda_8hpp.html) and [`occa.hpp`](https://docs.mfem.org/html/occa_8hpp.html) files
|
+ the [`cuda.hpp`](https://docs.mfem.org/html/cuda_8hpp.html) and [`occa.hpp`](https://docs.mfem.org/html/occa_8hpp.html) files
|
||||||
|
|
||||||
#### Utilities, building and documentation
|
#### Utilities, building and documentation
|
||||||
@@ -367,9 +336,6 @@ Before you can start, you need a GitHub account, here are a few suggestions:
|
|||||||
- Code specifics
|
- Code specifics
|
||||||
- All new public, protected, and private classes, methods, data members, and
|
- All new public, protected, and private classes, methods, data members, and
|
||||||
functions have Doxygen-style documentation in source comments.
|
functions have Doxygen-style documentation in source comments.
|
||||||
- Math formulas can be included in the Doxygen comments either with standard
|
|
||||||
LaTeX (`$..$` and `$$..$$`) for portions that need detailed explanation, or with
|
|
||||||
[Unicode](https://www.unicodeit.net/) or plain text when short or readable description is preferable.
|
|
||||||
- In addition to arguments and functionality, documentation should include the
|
- In addition to arguments and functionality, documentation should include the
|
||||||
current limitations of the code, any background information that is
|
current limitations of the code, any background information that is
|
||||||
implicitly assumed in the implementation, and the ownership and lifetime
|
implicitly assumed in the implementation, and the ownership and lifetime
|
||||||
@@ -383,8 +349,6 @@ Before you can start, you need a GitHub account, here are a few suggestions:
|
|||||||
conflicted files in the commit message.
|
conflicted files in the commit message.
|
||||||
- All significant new features and changes should be documented in CHANGELOG.
|
- All significant new features and changes should be documented in CHANGELOG.
|
||||||
- New examples and miniapps should have documentation on the MFEM webpage.
|
- New examples and miniapps should have documentation on the MFEM webpage.
|
||||||
- The general floating-point type `real_t` should be used, rather than
|
|
||||||
`float` or `double`, except in special cases where only one is possible.
|
|
||||||
|
|
||||||
|
|
||||||
### Pull Requests
|
### Pull Requests
|
||||||
@@ -566,8 +530,6 @@ Before a PR can be merged, it should satisfy the following:
|
|||||||
- [ ] Add a short description of the example in the "Extensive Examples" section of `features.md`.
|
- [ ] Add a short description of the example in the "Extensive Examples" section of `features.md`.
|
||||||
- [ ] New miniapps:
|
- [ ] New miniapps:
|
||||||
- [ ] All sample runs at the top of the miniapp source file work.
|
- [ ] All sample runs at the top of the miniapp source file work.
|
||||||
- [ ] Add to internal testing repo, if sample runs should be included in nightly tests [internally](#tests-at-llnl).
|
|
||||||
- [ ] Exclude long sample runs from automated testing, with `* ` (one space) before the command.
|
|
||||||
- [ ] Update top-level `makefile` and `makefile` in corresponding miniapp directory.
|
- [ ] Update top-level `makefile` and `makefile` in corresponding miniapp directory.
|
||||||
- [ ] Add the miniapp binary and any files generated by it to the top-level `.gitignore` file.
|
- [ ] Add the miniapp binary and any files generated by it to the top-level `.gitignore` file.
|
||||||
- [ ] Update CMake build system:
|
- [ ] Update CMake build system:
|
||||||
@@ -762,7 +724,7 @@ and debug build is performed with a simple run of `ex1` to verify the executable
|
|||||||
- We mirror the `master` and `next` branches internally (to `gh-master` and
|
- We mirror the `master` and `next` branches internally (to `gh-master` and
|
||||||
`gh-next`) and run longer nightly tests via cron. On the weekends, a more
|
`gh-next`) and run longer nightly tests via cron. On the weekends, a more
|
||||||
extensive test is run which extracts and executes all the different sample
|
extensive test is run which extracts and executes all the different sample
|
||||||
runs from each example and most miniapps.
|
runs from each example.
|
||||||
|
|
||||||
- We also mirror PRs on the LLNL GitLab instance. PR mirroring can only be
|
- We also mirror PRs on the LLNL GitLab instance. PR mirroring can only be
|
||||||
triggered by _LLNL developers_, but test status is publicly available. Only
|
triggered by _LLNL developers_, but test status is publicly available. Only
|
||||||
|
|||||||
@@ -7,10 +7,6 @@
|
|||||||
|
|
||||||
https://mfem.org
|
https://mfem.org
|
||||||
|
|
||||||
This file provides a detailed description of how to build and install the MFEM
|
|
||||||
library. For a simple build, see the step-by-step instructions on the website
|
|
||||||
at https://mfem.org/building.
|
|
||||||
|
|
||||||
The MFEM library has a serial and an MPI-based parallel version, which largely
|
The MFEM library has a serial and an MPI-based parallel version, which largely
|
||||||
share the same code base. The only prerequisite for building the serial version
|
share the same code base. The only prerequisite for building the serial version
|
||||||
of MFEM is a (modern) C++ compiler, such as g++. The parallel version of MFEM
|
of MFEM is a (modern) C++ compiler, such as g++. The parallel version of MFEM
|
||||||
@@ -20,11 +16,7 @@ requires an MPI C++ compiler, as well as the following external libraries:
|
|||||||
https://github.com/hypre-space/hypre
|
https://github.com/hypre-space/hypre
|
||||||
|
|
||||||
- METIS (a family of multilevel partitioning algorithms)
|
- METIS (a family of multilevel partitioning algorithms)
|
||||||
https://github.com/mfem/tpls
|
http://glaros.dtc.umn.edu/gkhome/metis/metis/overview
|
||||||
|
|
||||||
Note: We recommend our mirror of metis-4.0.3/5.1.0 above because the METIS
|
|
||||||
webpage, http://glaros.dtc.umn.edu/gkhome/metis/metis/overview, is often down
|
|
||||||
and we don't support yet the new repo https://github.com/KarypisLab/METIS.
|
|
||||||
|
|
||||||
The hypre dependency can be downloaded as a tarball from GitHub or from the
|
The hypre dependency can be downloaded as a tarball from GitHub or from the
|
||||||
project webpage https://www.llnl.gov/casc/hypre. For example, the 2.24.0 release
|
project webpage https://www.llnl.gov/casc/hypre. For example, the 2.24.0 release
|
||||||
@@ -75,8 +67,6 @@ and miniapps. See https://glvis.org and https://mfem.org/building.
|
|||||||
|
|
||||||
Quick start with GNU make
|
Quick start with GNU make
|
||||||
=========================
|
=========================
|
||||||
See also: https://mfem.org/building
|
|
||||||
|
|
||||||
Serial build:
|
Serial build:
|
||||||
make serial -j 4
|
make serial -j 4
|
||||||
|
|
||||||
@@ -85,7 +75,6 @@ Parallel build:
|
|||||||
(build METIS 4 in ../metis-4.0 relative to mfem/)
|
(build METIS 4 in ../metis-4.0 relative to mfem/)
|
||||||
(build hypre in ../hypre relative to mfem/)
|
(build hypre in ../hypre relative to mfem/)
|
||||||
make parallel -j 4
|
make parallel -j 4
|
||||||
(For METIS 5, see https://mfem.org/building/#parallel-build-using-metis-5)
|
|
||||||
|
|
||||||
CUDA build:
|
CUDA build:
|
||||||
make cuda -j 4
|
make cuda -j 4
|
||||||
@@ -119,22 +108,11 @@ Parallel build:
|
|||||||
mkdir <mfem-build-dir> ; cd <mfem-build-dir>
|
mkdir <mfem-build-dir> ; cd <mfem-build-dir>
|
||||||
cmake <mfem-source-dir> -DMFEM_USE_MPI=YES
|
cmake <mfem-source-dir> -DMFEM_USE_MPI=YES
|
||||||
make -j 4
|
make -j 4
|
||||||
(For METIS 5, see https://mfem.org/building/#parallel-build-using-metis-5)
|
|
||||||
|
|
||||||
Parallel build with fetching of hypre and METIS:
|
|
||||||
mkdir <mfem-buil-dir> ; cd <mfem-build-dir>
|
|
||||||
cmake <mfem-source-dir> -DMFEM_USE_MPI=YES -DMFEM_FETCH_TPLS=YES
|
|
||||||
make -j 4
|
|
||||||
|
|
||||||
CUDA build:
|
CUDA build:
|
||||||
(this build requires CMake 3.17 or newer)
|
(this build requires CMake 3.8 or newer)
|
||||||
mkdir <mfem-build-dir> ; cd <mfem-build-dir>
|
mkdir <mfem-build-dir> ; cd <mfem-build-dir>
|
||||||
cmake <mfem-source-dir> -DMFEM_USE_CUDA=YES -DCUDA_ARCH=sm_70
|
cmake <mfem-source-dir> -DMFEM_USE_CUDA=YES
|
||||||
make -j 4
|
|
||||||
|
|
||||||
HIP build:
|
|
||||||
mkdir <mfem-build-dir> ; cd <mfem-build-dir>
|
|
||||||
cmake <mfem-source-dir> -DMFEM_USE_HIP=YES -DHIP_ARCH=gfx942 -DCMAKE_CXX_COMPILER=amdclang++ -DCMAKE_HIP_COMPILER=amdclang++
|
|
||||||
make -j 4
|
make -j 4
|
||||||
|
|
||||||
Example codes (serial/parallel, depending on the build):
|
Example codes (serial/parallel, depending on the build):
|
||||||
@@ -230,10 +208,9 @@ An optional installation of the library and the headers can be performed with
|
|||||||
|
|
||||||
make install [PREFIX=<dir>]
|
make install [PREFIX=<dir>]
|
||||||
|
|
||||||
The library will be installed in ${PREFIX}/lib, the headers in
|
The library will be installed in $(PREFIX)/lib, the headers in
|
||||||
${PREFIX}/include, and the configuration and testing makefiles (config.mk and
|
$(PREFIX)/include, and the configuration makefile (config.mk) in
|
||||||
test.mk) in ${PREFIX}/share/mfem. The PREFIX option can also be set during
|
$(PREFIX)/share/mfem. The PREFIX option can also be set during configuration.
|
||||||
configuration.
|
|
||||||
|
|
||||||
Information about the current build configuration can be viewed using
|
Information about the current build configuration can be viewed using
|
||||||
|
|
||||||
@@ -268,7 +245,7 @@ See the configuration file config/defaults.mk for the default settings.
|
|||||||
Compilers:
|
Compilers:
|
||||||
CXX - C++ compiler, serial build
|
CXX - C++ compiler, serial build
|
||||||
MPICXX - MPI C++ compiler, parallel build
|
MPICXX - MPI C++ compiler, parallel build
|
||||||
CUDA_CXX - The CUDA compiler, 'nvcc' or 'clang++'
|
CUDA_CXX - The CUDA compiler, 'nvcc'
|
||||||
|
|
||||||
Compiler options:
|
Compiler options:
|
||||||
OPTIM_FLAGS - Options for optimized build
|
OPTIM_FLAGS - Options for optimized build
|
||||||
@@ -282,16 +259,9 @@ Build options:
|
|||||||
|
|
||||||
Installation options:
|
Installation options:
|
||||||
PREFIX - Specify the installation directory. The library (libmfem.a) will be
|
PREFIX - Specify the installation directory. The library (libmfem.a) will be
|
||||||
installed in ${PREFIX}/lib, the headers in ${PREFIX}/include, and
|
installed in $(PREFIX)/lib, the headers in $(PREFIX)/include, and
|
||||||
the configuration and testing makefiles (config.mk and test.mk) in
|
the configuration makefile (config.mk) in $(PREFIX)/share/mfem.
|
||||||
${PREFIX}/share/mfem.
|
INSTALL - Specify the install program, e.g /usr/bin/install
|
||||||
INSTALL - Specify the install program, default = /usr/bin/install
|
|
||||||
INSTALL_DEF_PERM - Specify the default install permissions. This affects
|
|
||||||
headers and configuration makefiles, default = 644
|
|
||||||
INSTALL_BIN_PERM - Specify the install permissions for binaries. This only
|
|
||||||
affects the shared version of the library, default = 755
|
|
||||||
INSTALL_DIR_PERM - Specify the install permissions for directories and,
|
|
||||||
on macOS/BSD, for symlinks as well, default = 755
|
|
||||||
|
|
||||||
MFEM library features/options (GNU make)
|
MFEM library features/options (GNU make)
|
||||||
----------------------------------------
|
----------------------------------------
|
||||||
@@ -306,15 +276,6 @@ MFEM_USE_METIS = YES/NO
|
|||||||
option in the library will be Cartesian partitioning with box meshes, and
|
option in the library will be Cartesian partitioning with box meshes, and
|
||||||
thus most of the parallel examples and miniapps will fail.
|
thus most of the parallel examples and miniapps will fail.
|
||||||
|
|
||||||
MFEM_PRECISION = double/Double/DOUBLE/single/Single/SINGLE
|
|
||||||
Use single (float type) or double floating-point precision. In the
|
|
||||||
configuration header 'config/_config.hpp' this option is represented by
|
|
||||||
defining exactly one of the macros: MFEM_USE_DOUBLE, or MFEM_USE_SINGLE.
|
|
||||||
In the exported config files 'config.mk' and 'MFEMConfig.cmake', the option
|
|
||||||
is represented by the variables MFEM_USE_DOUBLE and MFEM_USE_SINGLE defined
|
|
||||||
as YES/NO (make) or ON/OFF (cmake). For more details see
|
|
||||||
https://github.com/orgs/mfem/discussions/4207
|
|
||||||
|
|
||||||
MFEM_DEBUG = YES/NO
|
MFEM_DEBUG = YES/NO
|
||||||
Choose debug/optimized build. The debug build enables a number of messages
|
Choose debug/optimized build. The debug build enables a number of messages
|
||||||
and consistency checks that may simplify bug-hunting.
|
and consistency checks that may simplify bug-hunting.
|
||||||
@@ -368,6 +329,10 @@ MFEM_USE_SUNDIALS = YES/NO
|
|||||||
library. When enabled, this option uses the SUNDIALS_* library options,
|
library. When enabled, this option uses the SUNDIALS_* library options,
|
||||||
see below.
|
see below.
|
||||||
|
|
||||||
|
MFEM_USE_MESQUITE = YES/NO
|
||||||
|
Enable MFEM functionality based on the Mesquite library. When enabled, this
|
||||||
|
option uses the MESQUITE_* library options, see below.
|
||||||
|
|
||||||
MFEM_USE_SUITESPARSE = YES/NO
|
MFEM_USE_SUITESPARSE = YES/NO
|
||||||
Enable MFEM functionality based on the SuiteSparse library. Currently, this
|
Enable MFEM functionality based on the SuiteSparse library. Currently, this
|
||||||
option adds the classes UMFPackSolver and KLUSolver (both sparse serial
|
option adds the classes UMFPackSolver and KLUSolver (both sparse serial
|
||||||
@@ -406,11 +371,6 @@ MFEM_USE_AMGX = YES/NO
|
|||||||
Allows the user to use SparseMatrices and HypreParMatrices to solve linear
|
Allows the user to use SparseMatrices and HypreParMatrices to solve linear
|
||||||
systems with the routines from the AmgX library.
|
systems with the routines from the AmgX library.
|
||||||
|
|
||||||
MFEM_USE_MAGMA = YES/NO
|
|
||||||
Enable MFEM functionality based on the MAGMA high-performance linear algebra
|
|
||||||
library. The MAGMA library provides a BLAS/LAPACK interface, with
|
|
||||||
implementations that have been optimized for Nvidia and AMD GPUs.
|
|
||||||
|
|
||||||
MFEM_USE_GNUTLS = YES/NO
|
MFEM_USE_GNUTLS = YES/NO
|
||||||
Enable secure socket support in class socketstream, using the auxiliary
|
Enable secure socket support in class socketstream, using the auxiliary
|
||||||
GnuTLS_* classes, based on the GnuTLS library. This option may be useful in
|
GnuTLS_* classes, based on the GnuTLS library. This option may be useful in
|
||||||
@@ -428,10 +388,6 @@ MFEM_USE_GNUTLS = YES/NO
|
|||||||
When MFEM_USE_GNUTLS is enabled, the additional build options, GNUTLS_*, are
|
When MFEM_USE_GNUTLS is enabled, the additional build options, GNUTLS_*, are
|
||||||
also used, see below.
|
also used, see below.
|
||||||
|
|
||||||
MFEM_USE_HDF5 = YES/NO
|
|
||||||
The HDF5 library is used for input and output of HDF5 files, for example
|
|
||||||
Cubit mesh files or VTKHDF files for ParaView.
|
|
||||||
|
|
||||||
MFEM_USE_NETCDF = YES/NO
|
MFEM_USE_NETCDF = YES/NO
|
||||||
NetCDF is the library that is used by the SNL Cubit mesh generator to create
|
NetCDF is the library that is used by the SNL Cubit mesh generator to create
|
||||||
Genesis mesh files. This option enables a reader for these files, which
|
Genesis mesh files. This option enables a reader for these files, which
|
||||||
@@ -516,16 +472,12 @@ MFEM_USE_CODIPACK = YES/NO
|
|||||||
www.scicomp.uni-kl.de/codi/
|
www.scicomp.uni-kl.de/codi/
|
||||||
|
|
||||||
MFEM_USE_ALGOIM = YES/NO
|
MFEM_USE_ALGOIM = YES/NO
|
||||||
Enable the usage of Algoim - a collection of high-order accurate numerical
|
Enable the usage of Algoim - a collection of high-order accurate numerical
|
||||||
methods and C++ algorithms for working with implicitly-defined geometry and
|
methods and C++ algorithms for working with implicitly-defined geometry and
|
||||||
level set methods, see https://algoim.github.io. MFEM provides interface to
|
level set methods. The Algoim library requires the Blitz++ library. The MFEM
|
||||||
Algoim v1. To check out the specific Algoim state use:
|
provides interface to Algoim v1. Thus, to check out the specific state use:
|
||||||
https://github.com/algoim/algoim
|
|
||||||
git checkout 9c9ca0ef094d8ab0390ed36367a1151b459bbe0a
|
git checkout 9c9ca0ef094d8ab0390ed36367a1151b459bbe0a
|
||||||
The Algoim library requires the Blitz++ library. To use the latest state of
|
https://algoim.github.io
|
||||||
Blitz++ that has been tested with MFEM, use:
|
|
||||||
https://github.com/blitzpp/blitz
|
|
||||||
git checkout f24a250a43dff88c31ad92916da828b7ea9a98b7
|
|
||||||
|
|
||||||
MFEM_USE_ADFORWARD = YES/NO
|
MFEM_USE_ADFORWARD = YES/NO
|
||||||
Enable forward mode for AD packages. This option is valid
|
Enable forward mode for AD packages. This option is valid
|
||||||
@@ -598,7 +550,7 @@ MFEM_USE_FMS = YES/NO
|
|||||||
Enables support for the FMS library which consists of the DataCollection
|
Enables support for the FMS library which consists of the DataCollection
|
||||||
sub-class mfem::FMSDataCollection for I/O in FMS formats, see the header file
|
sub-class mfem::FMSDataCollection for I/O in FMS formats, see the header file
|
||||||
fem/fmsdatacollection.hpp. In addition, this option enables in-memory
|
fem/fmsdatacollection.hpp. In addition, this option enables in-memory
|
||||||
conversion routines between FMS's FmsDataCollection structure and MFEM's
|
convetion routines between FMS's FmsDataCollection structure and MFEM's
|
||||||
DataCollection class, see the header file fem/fmsconvert.hpp.
|
DataCollection class, see the header file fem/fmsconvert.hpp.
|
||||||
|
|
||||||
MFEM_USE_PARELAG = YES/NO
|
MFEM_USE_PARELAG = YES/NO
|
||||||
@@ -606,19 +558,13 @@ MFEM_USE_PARELAG = YES/NO
|
|||||||
use ParELAG. In fact, ParELAG is dependent on MFEM. Therefore, this option
|
use ParELAG. In fact, ParELAG is dependent on MFEM. Therefore, this option
|
||||||
currently only concerns the miniapps.
|
currently only concerns the miniapps.
|
||||||
|
|
||||||
MFEM_USE_TRIBOL = YES/NO
|
|
||||||
Enables the miniapps that use the Tribol library. MFEM does not currently
|
|
||||||
use Tribol. In fact, Tribol is dependent on MFEM. Therefore, this option
|
|
||||||
currently only concerns the miniapps.
|
|
||||||
|
|
||||||
MFEM_USE_ENZYME = YES/NO
|
MFEM_USE_ENZYME = YES/NO
|
||||||
Enables automatic differentiation support through the LLVM plugin Enzyme.
|
Enables automatic differentiation support through the LLVM plugin Enzyme.
|
||||||
This requires the compiler to be set to clang (>=14.0.0). We also advise the
|
This requires the compiler to be set to clang (>=14.0.0). We also advise to
|
||||||
use of the link time optimization (LTO) plugin, so functions defined over
|
use the link time optimization (LTO) plugin, to enable functions that you
|
||||||
multiple files (compilation units) can be differentiated automatically. This
|
define over multiple files (compilation units) and want to be differentiated
|
||||||
requires to also use LLVM/LLD for linking. The recommended options are in
|
automatically, to work. This requires to also use LLVM/LLD for linking.
|
||||||
config/defaults.mk. For more detailed instructions, see the section "Specific
|
Recommended options are in config/defaults.mk.
|
||||||
options for Enzyme" below.
|
|
||||||
|
|
||||||
MFEM_BUILD_TAG = (any value)
|
MFEM_BUILD_TAG = (any value)
|
||||||
An optional tag to characterize the build. Exported to config/config.mk.
|
An optional tag to characterize the build. Exported to config/config.mk.
|
||||||
@@ -648,14 +594,10 @@ The specific libraries and their options are:
|
|||||||
HYPRE >= 2.20.0 (HYPRE built with '--enable-mixedint')
|
HYPRE >= 2.20.0 (HYPRE built with '--enable-mixedint')
|
||||||
HYPRE >= 2.22.1 (HYPRE built with CUDA)
|
HYPRE >= 2.22.1 (HYPRE built with CUDA)
|
||||||
HYPRE >= 2.23.0 (HYPRE built with HIP)
|
HYPRE >= 2.23.0 (HYPRE built with HIP)
|
||||||
HYPRE >= 2.31.0 (runtime selectable HYPRE execution on CPU/GPU)
|
|
||||||
|
|
||||||
- METIS, used when MFEM_USE_METIS = YES. If using METIS 5, set
|
- METIS, used when MFEM_USE_METIS = YES. If using METIS 5, set
|
||||||
MFEM_USE_METIS_5 = YES (default is to use METIS 4). For building instructions,
|
MFEM_USE_METIS_5 = YES (default is to use METIS 4).
|
||||||
see the following:
|
URL: http://glaros.dtc.umn.edu/gkhome/metis/metis/overview
|
||||||
- METIS 4.0.3: https://mfem.org/building/#parallel-mpi-version-of-mfem
|
|
||||||
- METIS 5.1.0: https://mfem.org/building/#parallel-build-using-metis-5
|
|
||||||
URL: https://github.com/mfem/tpls (MFEM mirror, see above)
|
|
||||||
Options: METIS_OPT, METIS_LIB.
|
Options: METIS_OPT, METIS_LIB.
|
||||||
Versions: METIS 4.0.3 or 5.1.0.
|
Versions: METIS 4.0.3 or 5.1.0.
|
||||||
|
|
||||||
@@ -668,7 +610,6 @@ The specific libraries and their options are:
|
|||||||
- OpenMP (optional), usually part of compiler, used when either MFEM_USE_OPENMP
|
- OpenMP (optional), usually part of compiler, used when either MFEM_USE_OPENMP
|
||||||
or MFEM_USE_LEGACY_OPENMP is set to YES.
|
or MFEM_USE_LEGACY_OPENMP is set to YES.
|
||||||
Options: OPENMP_OPT, OPENMP_LIB.
|
Options: OPENMP_OPT, OPENMP_LIB.
|
||||||
Versions: OpenMP >= 3.1 when MFEM_USE_OPENMP=YES.
|
|
||||||
|
|
||||||
- High-resolution POSIX clocks: when using MFEM_TIMER_TYPE = 2, it may be
|
- High-resolution POSIX clocks: when using MFEM_TIMER_TYPE = 2, it may be
|
||||||
necessary to link with a system library (e.g. librt.so).
|
necessary to link with a system library (e.g. librt.so).
|
||||||
@@ -683,13 +624,14 @@ The specific libraries and their options are:
|
|||||||
both MPI and hypre.
|
both MPI and hypre.
|
||||||
If MFEM_USE_CUDA is enabled, we expect that SUNDIALS is built with support
|
If MFEM_USE_CUDA is enabled, we expect that SUNDIALS is built with support
|
||||||
for CUDA.
|
for CUDA.
|
||||||
If MFEM_USE_HIP is enabled, we expect that SUNDIALS is built with support
|
URL: http://computation.llnl.gov/projects/sundials/sundials-software
|
||||||
for HIP.
|
|
||||||
URL: http://computing.llnl.gov/projects/sundials/sundials-software
|
|
||||||
Options: SUNDIALS_OPT, SUNDIALS_LIB.
|
Options: SUNDIALS_OPT, SUNDIALS_LIB.
|
||||||
Versions: SUNDIALS >= 5.0.0,
|
Versions: SUNDIALS >= 5.0.0, SUNDIALS >= 5.4.0 for CUDA support.
|
||||||
SUNDIALS >= 5.4.0 for CUDA support, and
|
|
||||||
SUNDIALS >= 5.7.0 for HIP support.
|
- Mesquite (optional), used when MFEM_USE_MESQUITE = YES.
|
||||||
|
URL: http://trilinos.org/oldsite/packages/mesquite
|
||||||
|
Options: MESQUITE_OPT, MESQUITE_LIB.
|
||||||
|
The Mesquite support is deprecated and will be removed in the future.
|
||||||
|
|
||||||
- SuiteSparse (optional), used when MFEM_USE_SUITESPARSE = YES.
|
- SuiteSparse (optional), used when MFEM_USE_SUITESPARSE = YES.
|
||||||
URL: http://faculty.cse.tamu.edu/davis/suitesparse.html
|
URL: http://faculty.cse.tamu.edu/davis/suitesparse.html
|
||||||
@@ -714,31 +656,25 @@ The specific libraries and their options are:
|
|||||||
requires the PT-Scotch and Scalapack libraries as well as ParMETIS, which
|
requires the PT-Scotch and Scalapack libraries as well as ParMETIS, which
|
||||||
includes METIS 5 in its distribution. Starting with STRUMPACK v2.2.0, ParMETIS
|
includes METIS 5 in its distribution. Starting with STRUMPACK v2.2.0, ParMETIS
|
||||||
and PT-Scotch are optional dependencies.
|
and PT-Scotch are optional dependencies.
|
||||||
The support for STRUMPACK was added in MFEM v3.3.2.
|
The support for STRUMPACK was added in MFEM v3.3.2 and it requires STRUMPACK
|
||||||
|
2.0.0 or later.
|
||||||
URL: http://portal.nersc.gov/project/sparse/strumpack
|
URL: http://portal.nersc.gov/project/sparse/strumpack
|
||||||
Options: STRUMPACK_OPT, STRUMPACK_LIB.
|
Options: STRUMPACK_OPT, STRUMPACK_LIB.
|
||||||
Versions: STRUMPACK >= 3.0.0.
|
Versions: STRUMPACK >= 3.0.0.
|
||||||
|
|
||||||
- Ginkgo (optional), used when MFEM_USE_GINKGO = YES. Note that Ginkgo needs a
|
- Ginkgo (optional), used when MFEM_USE_GINKGO = YES. Note that Ginkgo needs a
|
||||||
C++ compiler that supports the C++-17 standard. For additional requirements
|
C++ compiler that supports the C++-14 standard. For additional requirements
|
||||||
and dependencies of specific modules, see the Ginkgo webpage below.
|
and dependencies of specific modules, see the Ginkgo webpage below.
|
||||||
URL: https://ginkgo-project.github.io
|
URL: https://ginkgo-project.github.io
|
||||||
Options: GINKGO_OPT, GINKGO_LIB, GINKGO_DIR, GINKGO_BUILD_TYPE (Release or
|
Options: GINKGO_OPT, GINKGO_LIB, GINKGO_DIR, GINKGO_BUILD_TYPE (Release or
|
||||||
Debug).
|
Debug).
|
||||||
Versions: Ginkgo >= 1.9.0. When building Ginkgo with distributed support, a
|
Versions: Ginkgo >= 1.4.0.
|
||||||
recent version of the "develop" branch is required (1.11 as defined
|
|
||||||
in include/ginkgo/config.hpp).
|
|
||||||
|
|
||||||
- AmgX (optional), used when MFEM_USE_AMGX = YES.
|
- AmgX (optional), used when MFEM_USE_AMGX = YES.
|
||||||
URL: https://github.com/NVIDIA/AMGX
|
URL: https://github.com/NVIDIA/AMGX
|
||||||
Options: AMGX_OPT, AMGX_LIB.
|
Options: AMGX_OPT, AMGX_LIB.
|
||||||
Versions: AmgX >= 2.1, older versions may work too.
|
Versions: AmgX >= 2.1, older versions may work too.
|
||||||
|
|
||||||
- MAGMA (optional), used with MFEM_USE_MAGMA = YES.
|
|
||||||
URL: https://icl.utk.edu/magma/
|
|
||||||
Options: MAGMA_OPT, MAGMA_LIB
|
|
||||||
Versions: MAGMA >= 2.8.0
|
|
||||||
|
|
||||||
- GnuTLS (optional), used when MFEM_USE_GNUTLS = YES. On most Linux systems,
|
- GnuTLS (optional), used when MFEM_USE_GNUTLS = YES. On most Linux systems,
|
||||||
GnuTLS is available as a development package, e.g. gnutls-devel. On Mac OS X,
|
GnuTLS is available as a development package, e.g. gnutls-devel. On Mac OS X,
|
||||||
one can get the library through the Homebrew package manager (http://brew.sh).
|
one can get the library through the Homebrew package manager (http://brew.sh).
|
||||||
@@ -746,9 +682,6 @@ The specific libraries and their options are:
|
|||||||
Options: GNUTLS_OPT, GNUTLS_LIB.
|
Options: GNUTLS_OPT, GNUTLS_LIB.
|
||||||
Versions: GnuTLS >= 2.12.0, older versions may work too.
|
Versions: GnuTLS >= 2.12.0, older versions may work too.
|
||||||
|
|
||||||
- HDF5 (optional), used when MFEM_USE_HDF5 = YES, required for reading and
|
|
||||||
writing files in VTKHDF format.
|
|
||||||
|
|
||||||
- NetCDF (optional), used when MFEM_USE_NETCDF = YES, required for reading Cubit
|
- NetCDF (optional), used when MFEM_USE_NETCDF = YES, required for reading Cubit
|
||||||
mesh files. Also requires installation of HDF5 and ZLIB, as explained at the
|
mesh files. Also requires installation of HDF5 and ZLIB, as explained at the
|
||||||
NetCDF web site. Note that we use the plain vanilla "C" version of NetCDF, you
|
NetCDF web site. Note that we use the plain vanilla "C" version of NetCDF, you
|
||||||
@@ -757,20 +690,18 @@ The specific libraries and their options are:
|
|||||||
Options: NETCDF_OPT, NETCDF_LIB.
|
Options: NETCDF_OPT, NETCDF_LIB.
|
||||||
Versions: NetCDF >= 4.4.0.
|
Versions: NetCDF >= 4.4.0.
|
||||||
|
|
||||||
- PETSc (optional), used when MFEM_USE_PETSC = YES. Version 3.21 or higher of
|
- PETSc (optional), used when MFEM_USE_PETSC = YES. Version 3.8 or higher of
|
||||||
the PETSC dev branch is required, though depending on the functionality older
|
the PETSC dev branch is required. The MFEM and PETSc builds can share common
|
||||||
versions may work too. The MFEM and PETSc builds can share common libraries,
|
libraries, e.g., hypre and SUNDIALS. Here's an example configuration, assuming
|
||||||
e.g., hypre and SUNDIALS. Here's an example configuration, assuming
|
|
||||||
PETSc has been cloned on the same level as mfem and hypre:
|
PETSc has been cloned on the same level as mfem and hypre:
|
||||||
./configure --download-fblaslapack=yes --download-scalapack=yes \
|
./configure --download-fblaslapack=yes --download-scalapack=yes \
|
||||||
--download-mumps=yes --download-suitesparse=yes \
|
--download-mumps=yes --download-suitesparse=yes \
|
||||||
--with-hypre-dir=../hypre/src/hypre \
|
--with-hypre-dir=../hypre-2.10.0b/src/hypre \
|
||||||
--with-shared-libraries=0
|
--with-shared-libraries=0
|
||||||
When building PETSc with HIP, one may need to add a flag like -std=c2x to
|
|
||||||
CFLAGS to allow proper parsing of the hipsparse header under C.
|
|
||||||
URL: https://www.mcs.anl.gov/petsc
|
URL: https://www.mcs.anl.gov/petsc
|
||||||
Options: PETSC_OPT, PETSC_LIB.
|
Options: PETSC_OPT, PETSC_LIB.
|
||||||
Versions: PETSc >= 3.21.0, older versions may work too.
|
Versions: PETSc >= 3.8.0 (PETSc build without CUDA)
|
||||||
|
PETSc >= 3.15.0 (PETSc built with CUDA)
|
||||||
|
|
||||||
- SLEPc (optional), used when MFEM_USE_SLEPC = YES. SLEPc depends on PETSc and
|
- SLEPc (optional), used when MFEM_USE_SLEPC = YES. SLEPc depends on PETSc and
|
||||||
uses some of the PETSc options when compiled.
|
uses some of the PETSc options when compiled.
|
||||||
@@ -814,21 +745,21 @@ The specific libraries and their options are:
|
|||||||
Versions: 1.9.3
|
Versions: 1.9.3
|
||||||
|
|
||||||
- GSLIB (optional), used when MFEM_USE_GSLIB = YES. The gslib library must be
|
- GSLIB (optional), used when MFEM_USE_GSLIB = YES. The gslib library must be
|
||||||
built prior to the MFEM build, as follows: download gslib-1.0.9, untar it at
|
built prior to the MFEM build, as follows: download gslib-1.0.7, untar it at
|
||||||
the same level as MFEM and create a symbolic link: "ln -s gslib-1.0.9 gslib".
|
the same level as MFEM and create a symbolic link: "ln -s gslib-1.0.7 gslib".
|
||||||
Build gslib in parallel or in serial based on the desired MFEM build: "make
|
Build gslib in parallel or in serial based on the desired MFEM build: "make
|
||||||
clean; make CC=mpicc" or "make clean; make CC=gcc MPI=0". Build MFEM with
|
clean; make CC=mpicc" or "make clean; make CC=gcc MPI=0". Build MFEM with
|
||||||
MFEM_USE_GSLIB=YES.
|
MFEM_USE_GSLIB=YES.
|
||||||
URL: https://github.com/gslib/gslib/archive/v1.0.9.tar.gz
|
URL: https://github.com/gslib/gslib/archive/v1.0.7.tar.gz
|
||||||
Options: GSLIB_OPT, GSLIB_LIB.
|
Options: GSLIB_OPT, GSLIB_LIB.
|
||||||
Versions: GSLIB >= 1.0.9.
|
Versions: GSLIB >= 1.0.7.
|
||||||
|
|
||||||
- ALGOIM (optional), used when MFEM_USE_ALGOIM=YES. The library provides only
|
- ALGOIM (optional), used when MFE_USE_ALGOIM=YES. The library provides only
|
||||||
headers so it just needs to be downloaded at the same level as MFEM. Download
|
headers so it just needs to be downloaded at the same level as MFEM. Download
|
||||||
the specific version we use as:
|
the specific version we use as:
|
||||||
"git clone https://github.com/algoim/algoim.git;
|
"git clone https://github.com/algoim/algoim.git;
|
||||||
git checkout 9c9ca0ef094d8ab0390ed36367a1151b459bbe0a"
|
git checkout 9c9ca0ef094d8ab0390ed36367a1151b459bbe0a"
|
||||||
ALGOIM depends on BLITZ and the library must be built prior to the MFEM build.
|
ALGOIM depends on BLITZ and rhe library must be built prior to the MFEM build.
|
||||||
Download v1.0.2, untar it at the same level as MFEM and create a symbolic link:
|
Download v1.0.2, untar it at the same level as MFEM and create a symbolic link:
|
||||||
"ln -s blitz-1.0.2 blitz".
|
"ln -s blitz-1.0.2 blitz".
|
||||||
Build Blitz using CMake as:
|
Build Blitz using CMake as:
|
||||||
@@ -844,13 +775,12 @@ The specific libraries and their options are:
|
|||||||
|
|
||||||
- CUDA (optional), used when MFEM_USE_CUDA = YES.
|
- CUDA (optional), used when MFEM_USE_CUDA = YES.
|
||||||
URL: https://developer.nvidia.com/cuda-toolkit
|
URL: https://developer.nvidia.com/cuda-toolkit
|
||||||
Options: CUDA_CXX, CUDA_ARCH, CUDA_OPT, CUDA_LIB, CUDA_DIR (when CUDA_CXX=clang++).
|
Options: CUDA_CXX, CUDA_ARCH, CUDA_OPT, CUDA_LIB.
|
||||||
Versions: CUDA >= 10.1.168.
|
Versions: CUDA >= 10.1.168.
|
||||||
|
|
||||||
- HIP (optional), used when MFEM_USE_HIP = YES.
|
- HIP (optional), used when MFEM_USE_HIP = YES.
|
||||||
URL: https://rocmdocs.amd.com
|
URL: https://rocmdocs.amd.com
|
||||||
Options: HIP_CXX, HIP_ARCH, HIP_OPT, HIP_LIB.
|
Options: HIP_CXX, HIP_ARCH, HIP_OPT, HIP_LIB.
|
||||||
Versions: ROCm >= 5.6.1.
|
|
||||||
|
|
||||||
- OCCA (optional), used when MFEM_USE_OCCA = YES.
|
- OCCA (optional), used when MFEM_USE_OCCA = YES.
|
||||||
URL: https://libocca.org
|
URL: https://libocca.org
|
||||||
@@ -861,13 +791,13 @@ The specific libraries and their options are:
|
|||||||
URL: https://github.com/CEED/libCEED
|
URL: https://github.com/CEED/libCEED
|
||||||
https://ceed.exascaleproject.org/libceed
|
https://ceed.exascaleproject.org/libceed
|
||||||
Options: CEED_DIR, CEED_OPT, CEED_LIB.
|
Options: CEED_DIR, CEED_OPT, CEED_LIB.
|
||||||
Versions: libCEED >= 0.12.0.
|
Versions: libCEED >= 0.10.
|
||||||
|
|
||||||
- RAJA (optional), used when MFEM_USE_RAJA = YES.
|
- RAJA (optional), used when MFEM_USE_RAJA = YES.
|
||||||
Beginning with MFEM v4.5.1, only RAJA v2022.10.3+ is supported.
|
Beginning with MFEM v4.3, only RAJA v0.14.0+ is supported.
|
||||||
URL: https://github.com/LLNL/RAJA
|
URL: https://github.com/LLNL/RAJA
|
||||||
Options: RAJA_DIR, RAJA_OPT, RAJA_LIB.
|
Options: RAJA_DIR, RAJA_OPT, RAJA_LIB.
|
||||||
Versions: RAJA >= 2022.10.3.
|
Versions: RAJA >= 0.14.0.
|
||||||
|
|
||||||
- Moonolith (optional), use when MFEM_USE_MOONOLITH = YES.
|
- Moonolith (optional), use when MFEM_USE_MOONOLITH = YES.
|
||||||
URL: https://bitbucket.org/zulianp/par_moonolith
|
URL: https://bitbucket.org/zulianp/par_moonolith
|
||||||
@@ -914,14 +844,10 @@ The specific libraries and their options are:
|
|||||||
URL: https://github.com/LLNL/parelag
|
URL: https://github.com/LLNL/parelag
|
||||||
Options: PARELAG_DIR, PARELAG_OPT, PARELAG_LIB.
|
Options: PARELAG_DIR, PARELAG_OPT, PARELAG_LIB.
|
||||||
|
|
||||||
- Tribol, used when MFEM_USE_TRIBOL = YES.
|
|
||||||
URL: https://github.com/LLNL/Tribol
|
|
||||||
Options: TRIBOL_DIR, TRIBOL_OPT, TRIBOL_LIB.
|
|
||||||
|
|
||||||
- Enzyme, used when MFEM_USE_ENZYME = YES. Requires LLVM/Clang >= 14.0.0.
|
- Enzyme, used when MFEM_USE_ENZYME = YES. Requires LLVM/Clang >= 14.0.0.
|
||||||
URL: https://github.com/EnzymeAD/Enzyme
|
URL: https://github.com/EnzymeAD/Enzyme
|
||||||
Options: ENZYME_DIR, ENZYME_OPT, ENZYME_LIB.
|
Options: ENZYME_DIR, ENZYME_OPT, ENZYME_LIB.
|
||||||
Versions: Enzyme >= v0.0.176.
|
Versions: Enzyme >= v0.0.33.
|
||||||
|
|
||||||
|
|
||||||
Building with CMake
|
Building with CMake
|
||||||
@@ -1004,27 +930,15 @@ or
|
|||||||
cmake --build . --config Release --target install [Xcode]
|
cmake --build . --config Release --target install [Xcode]
|
||||||
cmake --build . --config Release --target INSTALL [Visual Studio]
|
cmake --build . --config Release --target INSTALL [Visual Studio]
|
||||||
|
|
||||||
By default, the library will be installed in ${CMAKE_INSTALL_PREFIX}/lib, the
|
The library will be installed in <PREFIX>/lib, the headers in <PREFIX>/include,
|
||||||
headers in ${CMAKE_INSTALL_PREFIX}/include, the configuration CMake files in
|
and the configuration CMake files in <PREFIX>/lib/cmake/mfem.
|
||||||
${CMAKE_INSTALL_PREFIX}/lib/cmake/mfem, and the configuration and testing GNU
|
|
||||||
make files in ${CMAKE_INSTALL_PREFIX}/share/mfem. For fine-tuning the
|
|
||||||
installation directories the following variables can be used:
|
|
||||||
INSTALL_INCLUDE_DIR, INSTALL_LIB_DIR, INSTALL_BIN_DIR (e.g. for dll files on
|
|
||||||
Windows), INSTALL_SHARE_DIR, and INSTALL_CMAKE_DIR; alternatively, with lower
|
|
||||||
precedence, the CMake GNUInstallDirs variables can also be used:
|
|
||||||
CMAKE_INSTALL_INCLUDEDIR, CMAKE_INSTALL_LIBDIR, CMAKE_INSTALL_BINDIR and
|
|
||||||
CMAKE_INSTALL_DATAROOTDIR. Note that the default for INSTALL_LIB_DIR and
|
|
||||||
CMAKE_INSTALL_LIBDIR is lib. This is in contrast to the default behavior for
|
|
||||||
GNUInstallDirs, which defines a platform-dependent default value for
|
|
||||||
CMAKE_INSTALL_LIBDIR (lib or lib64 or lib/<multiarch-tuple> on Debian). To
|
|
||||||
restore this behavior, the user can set MFEM_USE_GNUINSTALLDIRS=YES.
|
|
||||||
|
|
||||||
|
|
||||||
Configuration variables (CMake)
|
Configuration variables (CMake)
|
||||||
===============================
|
===============================
|
||||||
See the configuration file config/defaults.cmake for the default settings.
|
See the configuration file config/defaults.cmake for the default settings.
|
||||||
|
|
||||||
Note: the option MFEM_USE_CUDA requires CMake version 3.17 or newer!
|
Note: the option MFEM_USE_CUDA requires CMake version 3.8 or newer!
|
||||||
|
|
||||||
Non-standard CMake variables for compilers:
|
Non-standard CMake variables for compilers:
|
||||||
CXX - If set, overwrite the auto-detected C++ compiler, serial build
|
CXX - If set, overwrite the auto-detected C++ compiler, serial build
|
||||||
@@ -1040,7 +954,6 @@ The following options are equivalent to the GNU make options with the same name:
|
|||||||
|
|
||||||
MFEM_USE_MPI
|
MFEM_USE_MPI
|
||||||
MFEM_USE_METIS - Set to ${MFEM_USE_MPI}, can be overwritten.
|
MFEM_USE_METIS - Set to ${MFEM_USE_MPI}, can be overwritten.
|
||||||
MFEM_PRECISION
|
|
||||||
MFEM_USE_LIBUNWIND
|
MFEM_USE_LIBUNWIND
|
||||||
MFEM_USE_LAPACK
|
MFEM_USE_LAPACK
|
||||||
MFEM_THREAD_SAFE
|
MFEM_THREAD_SAFE
|
||||||
@@ -1048,6 +961,7 @@ MFEM_USE_LEGACY_OPENMP
|
|||||||
MFEM_USE_OPENMP
|
MFEM_USE_OPENMP
|
||||||
MFEM_USE_MEMALLOC
|
MFEM_USE_MEMALLOC
|
||||||
MFEM_TIMER_TYPE - Set automatically, can be overwritten.
|
MFEM_TIMER_TYPE - Set automatically, can be overwritten.
|
||||||
|
MFEM_USE_MESQUITE
|
||||||
MFEM_USE_SUITESPARSE
|
MFEM_USE_SUITESPARSE
|
||||||
MFEM_USE_SUPERLU
|
MFEM_USE_SUPERLU
|
||||||
MFEM_USE_MUMPS
|
MFEM_USE_MUMPS
|
||||||
@@ -1055,7 +969,6 @@ MFEM_USE_STRUMPACK
|
|||||||
MFEM_USE_GINKGO
|
MFEM_USE_GINKGO
|
||||||
MFEM_USE_AMGX
|
MFEM_USE_AMGX
|
||||||
MFEM_USE_GNUTLS
|
MFEM_USE_GNUTLS
|
||||||
MFEM_USE_HDF5
|
|
||||||
MFEM_USE_NETCDF
|
MFEM_USE_NETCDF
|
||||||
MFEM_USE_MPFR
|
MFEM_USE_MPFR
|
||||||
MFEM_USE_ZLIB
|
MFEM_USE_ZLIB
|
||||||
@@ -1075,7 +988,6 @@ MFEM_USE_CALIPER
|
|||||||
MFEM_USE_FMS
|
MFEM_USE_FMS
|
||||||
MFEM_USE_BENCHMARK
|
MFEM_USE_BENCHMARK
|
||||||
MFEM_USE_PARELAG
|
MFEM_USE_PARELAG
|
||||||
MFEM_USE_TRIBOL
|
|
||||||
MFEM_USE_ENZYME
|
MFEM_USE_ENZYME
|
||||||
|
|
||||||
The following options are CMake specific:
|
The following options are CMake specific:
|
||||||
@@ -1083,10 +995,6 @@ The following options are CMake specific:
|
|||||||
MFEM_ENABLE_TESTING - Enable the ctest framework for testing.
|
MFEM_ENABLE_TESTING - Enable the ctest framework for testing.
|
||||||
MFEM_ENABLE_EXAMPLES - Build all of the examples by default.
|
MFEM_ENABLE_EXAMPLES - Build all of the examples by default.
|
||||||
MFEM_ENABLE_MINIAPPS - Build all of the miniapps by default.
|
MFEM_ENABLE_MINIAPPS - Build all of the miniapps by default.
|
||||||
MFEM_FETCH_TPLS - Enable fetching of all supported third-party libraries.
|
|
||||||
MFEM_FETCH_GSLIB - Enable fetching of gslib.
|
|
||||||
MFEM_FETCH_HYPRE - Enable fetching of hypre.
|
|
||||||
MFEM_FETCH_METIS - Enable fetching of metis.
|
|
||||||
|
|
||||||
External libraries (CMake):
|
External libraries (CMake):
|
||||||
---------------------------
|
---------------------------
|
||||||
@@ -1118,6 +1026,7 @@ The CMake build system adds auto-detection for the following packages/libraries:
|
|||||||
- HYPRE
|
- HYPRE
|
||||||
- METIS - The option MFEM_USE_METIS_5 is auto-detected.
|
- METIS - The option MFEM_USE_METIS_5 is auto-detected.
|
||||||
- ParMETIS
|
- ParMETIS
|
||||||
|
- MESQUITE
|
||||||
- SuiteSparse
|
- SuiteSparse
|
||||||
- SuperLUDist, STRUMPACK
|
- SuperLUDist, STRUMPACK
|
||||||
- Ginkgo
|
- Ginkgo
|
||||||
@@ -1148,13 +1057,6 @@ The following built-in CMake packages are also used:
|
|||||||
set the <LIBNAME>_LIBRARIES option directly; the configuration option
|
set the <LIBNAME>_LIBRARIES option directly; the configuration option
|
||||||
<LIBNAME>_DIR is not supported.
|
<LIBNAME>_DIR is not supported.
|
||||||
|
|
||||||
The MFEM CMake build system also provides fetching (automated building) for the
|
|
||||||
packages/libraries listed below. Note that when fetching is enabled, any related
|
|
||||||
auto-detection functionality is disabled.
|
|
||||||
|
|
||||||
- GSLIB
|
|
||||||
- HYPRE
|
|
||||||
- METIS
|
|
||||||
|
|
||||||
Building without GNU make or CMake
|
Building without GNU make or CMake
|
||||||
==================================
|
==================================
|
||||||
@@ -1195,89 +1097,6 @@ larger problems, there are two options:
|
|||||||
1. Building hypre with '--enable-bigint' defines the local and global indices to
|
1. Building hypre with '--enable-bigint' defines the local and global indices to
|
||||||
be 64-bit. This is convenient, but requires more memory than necessary.
|
be 64-bit. This is convenient, but requires more memory than necessary.
|
||||||
|
|
||||||
2. Building hypre with '--enable-mixedint' defines the local indices to be
|
2. Building hypre with '--enable-mixedint' defines the local indiced to be
|
||||||
32-bit, while using a 64-bit storage for global indices. This option is
|
32-bit, while using a 64-bit storage for global indices. This option is
|
||||||
currently tested only in ex1p, and may not work in more general settings.
|
currently tested only in ex1p, and may not work in more general settings.
|
||||||
|
|
||||||
Specific options for HIP
|
|
||||||
========================
|
|
||||||
MFEM expects the `ROCM_PATH` environment variable to be set to the path of the
|
|
||||||
ROCM install, as well as having `$ROCM_PATH/bin` in `PATH`.
|
|
||||||
|
|
||||||
Specific options for RAJA+HIP+MPI
|
|
||||||
=================================
|
|
||||||
RAJA uses CMake's built-in HIP support (added in CMake 3.21), while MFEM uses
|
|
||||||
the older HIP C++ library build/linkage. To ensure proper build and linkage
|
|
||||||
check that `CMAKE_CXX_COMPILER` and `CMAKE_HIP_COMPILER` are set to the same
|
|
||||||
compiler. This is especially important when using an MPI compiler (for example
|
|
||||||
crayCC) where some linker flags may get dropped if these two are not identical.
|
|
||||||
|
|
||||||
Specific options for Enzyme
|
|
||||||
===========================
|
|
||||||
To work properly, MFEM and Enzyme need to use the same LLVM/Clang configuration.
|
|
||||||
For example, on macOS this can be done by using Homebrew: first install Enzyme,
|
|
||||||
which in turn installs LLVM as a dependency (as of May 2025, this is LLVM 19):
|
|
||||||
|
|
||||||
brew install enzyme
|
|
||||||
|
|
||||||
In order to ensure the correct compiler choice for the MFEM makefile build, set
|
|
||||||
|
|
||||||
CXX = $(shell brew --prefix llvm@19)/bin/clang++
|
|
||||||
|
|
||||||
in the user.mk file (adapted from config/defaults.mk, see the section "Building
|
|
||||||
with GNU make" above). With MPI, it is convenient to set
|
|
||||||
|
|
||||||
MPICXX = OMPI_CXX=$(CXX) mpicxx
|
|
||||||
|
|
||||||
for OpenMPI and
|
|
||||||
|
|
||||||
MPICXX = MPICH_CXX=$(CXX) mpicxx
|
|
||||||
|
|
||||||
for MPICH.
|
|
||||||
|
|
||||||
Additionally, the Enzyme directory needs to be set in user.mk as follows:
|
|
||||||
|
|
||||||
ENZYME_DIR = $(shell brew --prefix enzyme)
|
|
||||||
|
|
||||||
Specifically, a full build on a Mac can be tested by adding the following
|
|
||||||
user.mk file in the config/ directory
|
|
||||||
|
|
||||||
MFEM_USE_ENZYME = YES
|
|
||||||
ENZYME_DIR = $(shell brew --prefix enzyme)
|
|
||||||
LLVM_DIR = $(shell brew --prefix llvm@19)
|
|
||||||
CXX = $(LLVM_DIR)/bin/clang++
|
|
||||||
MFEM_USE_MPI = YES
|
|
||||||
MPICXX = OMPI_CXX=$(CXX) mpicxx
|
|
||||||
|
|
||||||
and running
|
|
||||||
|
|
||||||
make config
|
|
||||||
make -j
|
|
||||||
cd miniapps/dfem
|
|
||||||
make
|
|
||||||
./dfem-minimal-surface
|
|
||||||
|
|
||||||
On Linux systems, for example Ubuntu 24.04, use the package manager to install
|
|
||||||
the Enzyme dependencies
|
|
||||||
|
|
||||||
sudo apt install libclang-dev libzstd-dev llvm-dev clang
|
|
||||||
|
|
||||||
and then clone and build Enzyme
|
|
||||||
|
|
||||||
cd $HOME
|
|
||||||
git clone https://github.com/EnzymeAD/Enzyme.git
|
|
||||||
cd Enzyme/enzyme && mkdir build && cd build
|
|
||||||
CC=clang CXX=clang++ cmake .. -DLLVM_DIR=/usr/lib/llvm-18/lib/cmake -DCMAKE_INSTALL_PREFIX=$HOME/Enzyme/enzyme/build
|
|
||||||
make -j
|
|
||||||
make install
|
|
||||||
|
|
||||||
From here, one can proceed in the same way using the following user.mk settings
|
|
||||||
|
|
||||||
MFEM_USE_ENZYME = YES
|
|
||||||
ENZYME_DIR = $(HOME)/Enzyme/enzyme/build
|
|
||||||
CXX = clang++
|
|
||||||
MFEM_USE_MPI = YES
|
|
||||||
MPICXX = OMPI_CXX=$(CXX) mpicxx
|
|
||||||
|
|
||||||
On other Linux systems the LLVM packages may have different names, for example
|
|
||||||
on RHEL9, one needs to "sudo yum install llvm-devel libzstd clang-devel".
|
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
BSD 3-Clause License
|
BSD 3-Clause License
|
||||||
|
|
||||||
Copyright (c) 2010-2025, Lawrence Livermore National Security, LLC
|
Copyright (c) 2010-2022, Lawrence Livermore National Security, LLC
|
||||||
All rights reserved.
|
All rights reserved.
|
||||||
|
|
||||||
Redistribution and use in source and binary forms, with or without
|
Redistribution and use in source and binary forms, with or without
|
||||||
|
|||||||
@@ -1,4 +1,4 @@
|
|||||||
# Copyright (c) 2010-2025, Lawrence Livermore National Security, LLC. Produced
|
# Copyright (c) 2010-2022, Lawrence Livermore National Security, LLC. Produced
|
||||||
# at the Lawrence Livermore National Laboratory. All Rights reserved. See files
|
# at the Lawrence Livermore National Laboratory. All Rights reserved. See files
|
||||||
# LICENSE and NOTICE for details. LLNL-CODE-806117.
|
# LICENSE and NOTICE for details. LLNL-CODE-806117.
|
||||||
#
|
#
|
||||||
|
|||||||
@@ -212,6 +212,10 @@ IF (DEFINED TPL_ENABLE_SUNDIALS)
|
|||||||
SET(MFEM_USE_SUNDIALS ${TPL_ENABLE_SUNDIALS} CACHE BOOL "Enable SUNDIALS usage" FORCE)
|
SET(MFEM_USE_SUNDIALS ${TPL_ENABLE_SUNDIALS} CACHE BOOL "Enable SUNDIALS usage" FORCE)
|
||||||
ENDIF()
|
ENDIF()
|
||||||
|
|
||||||
|
IF (DEFINED TPL_ENABLE_MESQUITE)
|
||||||
|
SET(MFEM_USE_MESQUITE ${TPL_ENABLE_MESQUITE} CACHE BOOL "Enable MESQUITE usage" FORCE)
|
||||||
|
ENDIF()
|
||||||
|
|
||||||
IF (DEFINED TPL_ENABLE_SUITESPARSE)
|
IF (DEFINED TPL_ENABLE_SUITESPARSE)
|
||||||
SET(MFEM_USE_SUITESPARSE ${TPL_ENABLE_SUITESPARSE} CACHE BOOL "Enable SuiteSparse usage" FORCE)
|
SET(MFEM_USE_SUITESPARSE ${TPL_ENABLE_SUITESPARSE} CACHE BOOL "Enable SuiteSparse usage" FORCE)
|
||||||
ENDIF()
|
ENDIF()
|
||||||
@@ -287,7 +291,3 @@ ENDIF()
|
|||||||
IF (DEFINED TPL_ENABLE_PARELAG)
|
IF (DEFINED TPL_ENABLE_PARELAG)
|
||||||
SET(MFEM_USE_PARELAG ${TPL_ENABLE_PARELAG} CACHE BOOL "Enable ParELAG" FORCE)
|
SET(MFEM_USE_PARELAG ${TPL_ENABLE_PARELAG} CACHE BOOL "Enable ParELAG" FORCE)
|
||||||
ENDIF()
|
ENDIF()
|
||||||
|
|
||||||
IF (DEFINED TPL_ENABLE_TRIBOL)
|
|
||||||
SET(MFEM_USE_TRIBOL ${TPL_ENABLE_TRIBOL} CACHE BOOL "Enable Tribol" FORCE)
|
|
||||||
ENDIF()
|
|
||||||
|
|||||||
@@ -1,4 +1,4 @@
|
|||||||
# Copyright (c) 2010-2025, Lawrence Livermore National Security, LLC. Produced
|
# Copyright (c) 2010-2022, Lawrence Livermore National Security, LLC. Produced
|
||||||
# at the Lawrence Livermore National Laboratory. All Rights reserved. See files
|
# at the Lawrence Livermore National Laboratory. All Rights reserved. See files
|
||||||
# LICENSE and NOTICE for details. LLNL-CODE-806117.
|
# LICENSE and NOTICE for details. LLNL-CODE-806117.
|
||||||
#
|
#
|
||||||
@@ -18,8 +18,6 @@ set(MFEM_GIT_STRING "@MFEM_GIT_STRING@")
|
|||||||
set(MFEM_USE_MPI @MFEM_USE_MPI@)
|
set(MFEM_USE_MPI @MFEM_USE_MPI@)
|
||||||
set(MFEM_USE_METIS @MFEM_USE_METIS@)
|
set(MFEM_USE_METIS @MFEM_USE_METIS@)
|
||||||
set(MFEM_USE_METIS_5 @MFEM_USE_METIS_5@)
|
set(MFEM_USE_METIS_5 @MFEM_USE_METIS_5@)
|
||||||
set(MFEM_USE_DOUBLE @MFEM_USE_DOUBLE@)
|
|
||||||
set(MFEM_USE_SINGLE @MFEM_USE_SINGLE@)
|
|
||||||
set(MFEM_DEBUG @MFEM_DEBUG@)
|
set(MFEM_DEBUG @MFEM_DEBUG@)
|
||||||
set(MFEM_USE_EXCEPTIONS @MFEM_USE_EXCEPTIONS@)
|
set(MFEM_USE_EXCEPTIONS @MFEM_USE_EXCEPTIONS@)
|
||||||
set(MFEM_USE_ZLIB @MFEM_USE_ZLIB@)
|
set(MFEM_USE_ZLIB @MFEM_USE_ZLIB@)
|
||||||
@@ -31,17 +29,16 @@ set(MFEM_USE_LEGACY_OPENMP @MFEM_USE_LEGACY_OPENMP@)
|
|||||||
set(MFEM_USE_MEMALLOC @MFEM_USE_MEMALLOC@)
|
set(MFEM_USE_MEMALLOC @MFEM_USE_MEMALLOC@)
|
||||||
set(MFEM_TIMER_TYPE @MFEM_TIMER_TYPE@)
|
set(MFEM_TIMER_TYPE @MFEM_TIMER_TYPE@)
|
||||||
set(MFEM_USE_SUNDIALS @MFEM_USE_SUNDIALS@)
|
set(MFEM_USE_SUNDIALS @MFEM_USE_SUNDIALS@)
|
||||||
|
set(MFEM_USE_MESQUITE @MFEM_USE_MESQUITE@)
|
||||||
set(MFEM_USE_SUITESPARSE @MFEM_USE_SUITESPARSE@)
|
set(MFEM_USE_SUITESPARSE @MFEM_USE_SUITESPARSE@)
|
||||||
set(MFEM_USE_SUPERLU @MFEM_USE_SUPERLU@)
|
set(MFEM_USE_SUPERLU @MFEM_USE_SUPERLU@)
|
||||||
set(MFEM_USE_MUMPS @MFEM_USE_MUMPS@)
|
set(MFEM_USE_MUMPS @MFEM_USE_MUMPS@)
|
||||||
set(MFEM_USE_STRUMPACK @MFEM_USE_STRUMPACK@)
|
set(MFEM_USE_STRUMPACK @MFEM_USE_STRUMPACK@)
|
||||||
set(MFEM_USE_GINKGO @MFEM_USE_GINKGO@)
|
set(MFEM_USE_GINKGO @MFEM_USE_GINKGO@)
|
||||||
set(MFEM_USE_AMGX @MFEM_USE_AMGX@)
|
set(MFEM_USE_AMGX @MFEM_USE_AMGX@)
|
||||||
set(MFEM_USE_MAGMA @MFEM_USE_MAGMA@)
|
|
||||||
set(MFEM_USE_HIOP @MFEM_USE_HIOP@)
|
set(MFEM_USE_HIOP @MFEM_USE_HIOP@)
|
||||||
set(MFEM_USE_GNUTLS @MFEM_USE_GNUTLS@)
|
set(MFEM_USE_GNUTLS @MFEM_USE_GNUTLS@)
|
||||||
set(MFEM_USE_GSLIB @MFEM_USE_GSLIB@)
|
set(MFEM_USE_GSLIB @MFEM_USE_GSLIB@)
|
||||||
set(MFEM_USE_HDF5 @MFEM_USE_HDF5@)
|
|
||||||
set(MFEM_USE_NETCDF @MFEM_USE_NETCDF@)
|
set(MFEM_USE_NETCDF @MFEM_USE_NETCDF@)
|
||||||
set(MFEM_USE_PETSC @MFEM_USE_PETSC@)
|
set(MFEM_USE_PETSC @MFEM_USE_PETSC@)
|
||||||
set(MFEM_USE_SLEPC @MFEM_USE_SLEPC@)
|
set(MFEM_USE_SLEPC @MFEM_USE_SLEPC@)
|
||||||
@@ -51,7 +48,6 @@ set(MFEM_USE_FMS @MFEM_USE_FMS@)
|
|||||||
set(MFEM_USE_CONDUIT @MFEM_USE_CONDUIT@)
|
set(MFEM_USE_CONDUIT @MFEM_USE_CONDUIT@)
|
||||||
set(MFEM_USE_PUMI @MFEM_USE_PUMI@)
|
set(MFEM_USE_PUMI @MFEM_USE_PUMI@)
|
||||||
set(MFEM_USE_CUDA @MFEM_USE_CUDA@)
|
set(MFEM_USE_CUDA @MFEM_USE_CUDA@)
|
||||||
set(MFEM_USE_HIP @MFEM_USE_HIP@)
|
|
||||||
set(MFEM_USE_OCCA @MFEM_USE_OCCA@)
|
set(MFEM_USE_OCCA @MFEM_USE_OCCA@)
|
||||||
set(MFEM_USE_RAJA @MFEM_USE_RAJA@)
|
set(MFEM_USE_RAJA @MFEM_USE_RAJA@)
|
||||||
set(MFEM_USE_CEED @MFEM_USE_CEED@)
|
set(MFEM_USE_CEED @MFEM_USE_CEED@)
|
||||||
@@ -60,14 +56,11 @@ set(MFEM_USE_SIMD @MFEM_USE_SIMD@)
|
|||||||
set(MFEM_USE_ADIOS2 @MFEM_USE_ADIOS2@)
|
set(MFEM_USE_ADIOS2 @MFEM_USE_ADIOS2@)
|
||||||
set(MFEM_USE_MOONOLITH @MFEM_USE_MOONOLITH@)
|
set(MFEM_USE_MOONOLITH @MFEM_USE_MOONOLITH@)
|
||||||
set(MFEM_USE_CODIPACK @MFEM_USE_CODIPACK@)
|
set(MFEM_USE_CODIPACK @MFEM_USE_CODIPACK@)
|
||||||
set(MFEM_USE_MKL_CPARDISO @MFEM_USE_MKL_CPARDISO@)
|
|
||||||
set(MFEM_USE_MKL_PARDISO @MFEM_USE_MKL_PARDISO@)
|
|
||||||
set(MFEM_USE_ADFORWARD @MFEM_USE_ADFORWARD@)
|
set(MFEM_USE_ADFORWARD @MFEM_USE_ADFORWARD@)
|
||||||
set(MFEM_USE_CALIPER @MFEM_USE_CALIPER@)
|
set(MFEM_USE_CALIPER @MFEM_USE_CALIPER@)
|
||||||
set(MFEM_USE_ALGOIM @MFEM_USE_ALGOIM@)
|
set(MFEM_USE_ALGOIM @MFEM_USE_ALGOIM@)
|
||||||
set(MFEM_USE_BENCHMARK @MFEM_USE_BENCHMARK@)
|
set(MFEM_USE_BENCHMARK @MFEM_USE_BENCHMARK@)
|
||||||
set(MFEM_USE_PARELAG @MFEM_USE_PARELAG@)
|
set(MFEM_USE_PARELAG @MFEM_USE_PARELAG@)
|
||||||
set(MFEM_USE_TRIBOL @MFEM_USE_TRIBOL@)
|
|
||||||
set(MFEM_USE_ENZYME @MFEM_USE_ENZYME@)
|
set(MFEM_USE_ENZYME @MFEM_USE_ENZYME@)
|
||||||
|
|
||||||
set(MFEM_CXX_COMPILER "@CMAKE_CXX_COMPILER@")
|
set(MFEM_CXX_COMPILER "@CMAKE_CXX_COMPILER@")
|
||||||
@@ -84,35 +77,6 @@ set_and_check(MFEM_LIBRARY_DIR "@PACKAGE_LIB_INSTALL_DIR@")
|
|||||||
|
|
||||||
check_required_components(MFEM)
|
check_required_components(MFEM)
|
||||||
|
|
||||||
include(CMakeFindDependencyMacro)
|
|
||||||
|
|
||||||
if (MFEM_USE_CUDA)
|
|
||||||
# required for projects linking to MFEM+CUDA, even if they don't use CUDA directly
|
|
||||||
find_dependency(CUDAToolkit)
|
|
||||||
endif (MFEM_USE_CUDA)
|
|
||||||
|
|
||||||
if (MFEM_USE_HIP)
|
|
||||||
# hip/rocm uses the modern MFEM way of linking to targets, need to find dependencies
|
|
||||||
find_dependency(HIP)
|
|
||||||
find_dependency(HIPBLAS)
|
|
||||||
find_dependency(HIPSPARSE)
|
|
||||||
if (MFEM_USE_MPI)
|
|
||||||
# assume HYPRE uses HIP
|
|
||||||
# alternatively could check HYPRE_USING_HIP
|
|
||||||
find_dependency(rocsparse)
|
|
||||||
find_dependency(rocrand)
|
|
||||||
find_dependency(rocsolver)
|
|
||||||
endif (MFEM_USE_MPI)
|
|
||||||
endif (MFEM_USE_HIP)
|
|
||||||
|
|
||||||
if (MFEM_USE_RAJA)
|
|
||||||
find_dependency(RAJA)
|
|
||||||
endif()
|
|
||||||
|
|
||||||
if (MFEM_USE_UMPIRE)
|
|
||||||
find_dependency(umpire)
|
|
||||||
endif()
|
|
||||||
|
|
||||||
if (NOT TARGET mfem)
|
if (NOT TARGET mfem)
|
||||||
include(${CMAKE_CURRENT_LIST_DIR}/MFEMTargets.cmake)
|
include(${CMAKE_CURRENT_LIST_DIR}/MFEMTargets.cmake)
|
||||||
endif (NOT TARGET mfem)
|
endif (NOT TARGET mfem)
|
||||||
|
|||||||
+61
-81
@@ -1,4 +1,4 @@
|
|||||||
// Copyright (c) 2010-2025, Lawrence Livermore National Security, LLC. Produced
|
// Copyright (c) 2010-2022, Lawrence Livermore National Security, LLC. Produced
|
||||||
// at the Lawrence Livermore National Laboratory. All Rights reserved. See files
|
// at the Lawrence Livermore National Laboratory. All Rights reserved. See files
|
||||||
// LICENSE and NOTICE for details. LLNL-CODE-806117.
|
// LICENSE and NOTICE for details. LLNL-CODE-806117.
|
||||||
//
|
//
|
||||||
@@ -39,19 +39,10 @@
|
|||||||
// Description of the git commit used to build MFEM.
|
// Description of the git commit used to build MFEM.
|
||||||
#cmakedefine MFEM_GIT_STRING "@MFEM_GIT_STRING@"
|
#cmakedefine MFEM_GIT_STRING "@MFEM_GIT_STRING@"
|
||||||
|
|
||||||
// Enable shared library build of MFEM.
|
|
||||||
#cmakedefine MFEM_SHARED_BUILD
|
|
||||||
|
|
||||||
// Build the parallel MFEM library.
|
// Build the parallel MFEM library.
|
||||||
// Requires an MPI compiler, and the libraries HYPRE and METIS.
|
// Requires an MPI compiler, and the libraries HYPRE and METIS.
|
||||||
#cmakedefine MFEM_USE_MPI
|
#cmakedefine MFEM_USE_MPI
|
||||||
|
|
||||||
// Use double-precision floating point type
|
|
||||||
#cmakedefine MFEM_USE_DOUBLE
|
|
||||||
|
|
||||||
// Use single-precision floating point type
|
|
||||||
#cmakedefine MFEM_USE_SINGLE
|
|
||||||
|
|
||||||
// Enable debug checks in MFEM.
|
// Enable debug checks in MFEM.
|
||||||
#cmakedefine MFEM_DEBUG
|
#cmakedefine MFEM_DEBUG
|
||||||
|
|
||||||
@@ -86,108 +77,100 @@
|
|||||||
// Internal MFEM option: enable group/batch allocation for some small objects.
|
// Internal MFEM option: enable group/batch allocation for some small objects.
|
||||||
#cmakedefine MFEM_USE_MEMALLOC
|
#cmakedefine MFEM_USE_MEMALLOC
|
||||||
|
|
||||||
// Which library functions to use in class StopWatch for measuring time.
|
// Enable MFEM functionality based on the Mesquite library.
|
||||||
// For a list of the available options, see INSTALL.
|
#cmakedefine MFEM_USE_MESQUITE
|
||||||
// If not defined, an option is selected automatically.
|
|
||||||
#cmakedefine MFEM_TIMER_TYPE @MFEM_TIMER_TYPE@
|
|
||||||
|
|
||||||
// Enable MFEM functionality based on the SUNDIALS libraries.
|
|
||||||
#cmakedefine MFEM_USE_SUNDIALS
|
|
||||||
|
|
||||||
// Enable MFEM functionality based on the SuiteSparse library.
|
// Enable MFEM functionality based on the SuiteSparse library.
|
||||||
#cmakedefine MFEM_USE_SUITESPARSE
|
#cmakedefine MFEM_USE_SUITESPARSE
|
||||||
|
|
||||||
// Enable MFEM functionality based on the SuperLU_DIST library.
|
// Enable MFEM functionality based on the SuperLU_DIST library.
|
||||||
#cmakedefine MFEM_USE_SUPERLU
|
#cmakedefine MFEM_USE_SUPERLU
|
||||||
#cmakedefine MFEM_USE_SUPERLU5
|
|
||||||
|
|
||||||
// Enable MFEM functionality based on the MUMPS library.
|
// Enable MFEM functionality based on the MUMPS library.
|
||||||
#cmakedefine MFEM_USE_MUMPS
|
#cmakedefine MFEM_USE_MUMPS
|
||||||
#cmakedefine MFEM_MUMPS_VERSION @MFEM_MUMPS_VERSION@
|
|
||||||
|
|
||||||
// Enable MFEM functionality based on the STRUMPACK library.
|
// Enable MFEM functionality based on the STRUMPACK library.
|
||||||
#cmakedefine MFEM_USE_STRUMPACK
|
#cmakedefine MFEM_USE_STRUMPACK
|
||||||
|
|
||||||
// Enable functionality based on the Ginkgo library.
|
// Enable functionality based on the Ginkgo library
|
||||||
#cmakedefine MFEM_USE_GINKGO
|
#cmakedefine MFEM_USE_GINKGO
|
||||||
|
|
||||||
// Enable MFEM functionality based on the AmgX library.
|
// Enable MFEM functionality based on the AmgX library
|
||||||
#cmakedefine MFEM_USE_AMGX
|
#cmakedefine MFEM_USE_AMGX
|
||||||
|
|
||||||
// Enable MFEM functionality based on the MAGMA library.
|
// Enable MFEM functionality based on the GnuTLS library
|
||||||
#cmakedefine MFEM_USE_MAGMA
|
|
||||||
|
|
||||||
// Enable secure socket streams based on the GNUTLS library.
|
|
||||||
#cmakedefine MFEM_USE_GNUTLS
|
#cmakedefine MFEM_USE_GNUTLS
|
||||||
|
|
||||||
// Enable Sidre support.
|
// Enable MFEM functionality based on the GSLIB library
|
||||||
#cmakedefine MFEM_USE_SIDRE
|
|
||||||
|
|
||||||
// Enable the use of SIMD in the high performance templated classes.
|
|
||||||
#cmakedefine MFEM_USE_SIMD
|
|
||||||
|
|
||||||
// Enable FMS support.
|
|
||||||
#cmakedefine MFEM_USE_FMS
|
|
||||||
|
|
||||||
// Enable Conduit support.
|
|
||||||
#cmakedefine MFEM_USE_CONDUIT
|
|
||||||
|
|
||||||
// Enable functionality based on the HDF5 library (reading VTKHDF files).
|
|
||||||
#cmakedefine MFEM_USE_HDF5
|
|
||||||
|
|
||||||
// Enable functionality based on the NetCDF library (reading CUBIT files).
|
|
||||||
#cmakedefine MFEM_USE_NETCDF
|
|
||||||
|
|
||||||
// Enable functionality based on the PETSc library.
|
|
||||||
#cmakedefine MFEM_USE_PETSC
|
|
||||||
|
|
||||||
// Enable functionality based on the SLEPc library.
|
|
||||||
#cmakedefine MFEM_USE_SLEPC
|
|
||||||
|
|
||||||
// Enable functionality based on the MPFR library.
|
|
||||||
#cmakedefine MFEM_USE_MPFR
|
|
||||||
|
|
||||||
// Enable MFEM functionality based on the PUMI library.
|
|
||||||
#cmakedefine MFEM_USE_PUMI
|
|
||||||
|
|
||||||
// Enable Moonolith-based general interpolation between finite element spaces.
|
|
||||||
#cmakedefine MFEM_USE_MOONOLITH
|
|
||||||
|
|
||||||
// Enable MFEM functionality based on the HIOP library.
|
|
||||||
#cmakedefine MFEM_USE_HIOP
|
|
||||||
|
|
||||||
// Enable MFEM functionality based on the GSLIB library.
|
|
||||||
#cmakedefine MFEM_USE_GSLIB
|
#cmakedefine MFEM_USE_GSLIB
|
||||||
|
|
||||||
// Build the NVIDIA GPU/CUDA-enabled version of the MFEM library.
|
// Enable MFEM functionality based on the NetCDF library
|
||||||
|
#cmakedefine MFEM_USE_NETCDF
|
||||||
|
|
||||||
|
// Enable MFEM functionality based on the PETSc library
|
||||||
|
#cmakedefine MFEM_USE_PETSC
|
||||||
|
|
||||||
|
// Enable MFEM functionality based on the SLEPc library
|
||||||
|
#cmakedefine MFEM_USE_SLEPC
|
||||||
|
|
||||||
|
// Enable MFEM functionality based on the Sidre library
|
||||||
|
#cmakedefine MFEM_USE_SIDRE
|
||||||
|
|
||||||
|
// Enable the use of SIMD in the high performance templated classes
|
||||||
|
#cmakedefine MFEM_USE_SIMD
|
||||||
|
|
||||||
|
// Enable MFEM functionality based on the FMS library
|
||||||
|
#cmakedefine MFEM_USE_FMS
|
||||||
|
|
||||||
|
// Enable MFEM functionality based on Conduit
|
||||||
|
#cmakedefine MFEM_USE_CONDUIT
|
||||||
|
|
||||||
|
// Enable MFEM functionality based on the PUMI library
|
||||||
|
#cmakedefine MFEM_USE_PUMI
|
||||||
|
|
||||||
|
// Enable MFEM functionality based on the Moonolith library
|
||||||
|
#cmakedefine MFEM_USE_MOONOLITH
|
||||||
|
|
||||||
|
// Enable MFEM functionality based on the HiOp library
|
||||||
|
#cmakedefine MFEM_USE_HIOP
|
||||||
|
|
||||||
|
// Build the GPU/CUDA-enabled version of the MFEM library.
|
||||||
// Requires a CUDA compiler (nvcc).
|
// Requires a CUDA compiler (nvcc).
|
||||||
#cmakedefine MFEM_USE_CUDA
|
#cmakedefine MFEM_USE_CUDA
|
||||||
|
|
||||||
// Build the AMD GPU/HIP-enabled version of the MFEM library.
|
// Build the HIP-enabled version of the MFEM library.
|
||||||
// Requires a HIP compiler (hipcc).
|
// Requires a HIP compiler (hipcc).
|
||||||
#cmakedefine MFEM_USE_HIP
|
#cmakedefine MFEM_USE_HIP
|
||||||
|
|
||||||
// Enable functionality based on the RAJA library.
|
// Enable MFEM functionality based on the RAJA library
|
||||||
#cmakedefine MFEM_USE_RAJA
|
#cmakedefine MFEM_USE_RAJA
|
||||||
|
|
||||||
// Enable functionality based on the OCCA library.
|
// Enable MFEM functionality based on the OCCA library
|
||||||
#cmakedefine MFEM_USE_OCCA
|
#cmakedefine MFEM_USE_OCCA
|
||||||
|
|
||||||
// Enable functionality based on the libCEED library.
|
// Enable MFEM functionality based on the libCEED library
|
||||||
#cmakedefine MFEM_USE_CEED
|
#cmakedefine MFEM_USE_CEED
|
||||||
|
|
||||||
// Enable functionality based on the Caliper library.
|
// Enable MFEM functionality based on the Umpire library
|
||||||
#cmakedefine MFEM_USE_CALIPER
|
|
||||||
|
|
||||||
// Enable functionality based on the Algoim library.
|
|
||||||
#cmakedefine MFEM_USE_ALGOIM
|
|
||||||
|
|
||||||
// Enable functionality based on the Umpire library.
|
|
||||||
#cmakedefine MFEM_USE_UMPIRE
|
#cmakedefine MFEM_USE_UMPIRE
|
||||||
|
|
||||||
// Enable IO functionality based on the ADIOS2 library.
|
// Enable MFEM functionality based on the ADIOS2 library
|
||||||
#cmakedefine MFEM_USE_ADIOS2
|
#cmakedefine MFEM_USE_ADIOS2
|
||||||
|
|
||||||
|
// Enable MFEM functionality based on the Caliper library
|
||||||
|
#cmakedefine MFEM_USE_CALIPER
|
||||||
|
|
||||||
|
// Enable MFEM functionality based on the Algoim library
|
||||||
|
#cmakedefine MFEM_USE_ALGOIM
|
||||||
|
|
||||||
|
// Which library functions to use in class StopWatch for measuring time.
|
||||||
|
// For a list of the available options, see INSTALL.
|
||||||
|
// If not defined, an option is selected automatically.
|
||||||
|
#define MFEM_TIMER_TYPE @MFEM_TIMER_TYPE@
|
||||||
|
|
||||||
|
// Enable MFEM functionality based on the SUNDIALS libraries.
|
||||||
|
#cmakedefine MFEM_USE_SUNDIALS
|
||||||
|
|
||||||
// Version of HYPRE used for building MFEM.
|
// Version of HYPRE used for building MFEM.
|
||||||
#cmakedefine MFEM_HYPRE_VERSION @MFEM_HYPRE_VERSION@
|
#cmakedefine MFEM_HYPRE_VERSION @MFEM_HYPRE_VERSION@
|
||||||
|
|
||||||
@@ -198,16 +181,13 @@
|
|||||||
// Enable interface to the MKL CPardiso library.
|
// Enable interface to the MKL CPardiso library.
|
||||||
#cmakedefine MFEM_USE_MKL_CPARDISO
|
#cmakedefine MFEM_USE_MKL_CPARDISO
|
||||||
|
|
||||||
// Enable interface to the MKL Pardiso library.
|
// Use forward mode for automatic differentiation
|
||||||
#cmakedefine MFEM_USE_MKL_PARDISO
|
|
||||||
|
|
||||||
// Use forward mode for automatic differentiation.
|
|
||||||
#cmakedefine MFEM_USE_ADFORWARD
|
#cmakedefine MFEM_USE_ADFORWARD
|
||||||
|
|
||||||
// Enable the use of the CoDiPack library for AD.
|
// Enable the use of the CoDiPack library for AD
|
||||||
#cmakedefine MFEM_USE_CODIPACK
|
#cmakedefine MFEM_USE_CODIPACK
|
||||||
|
|
||||||
// Enable functionality based on the Google Benchmark library.
|
// Enable MFEM functionality based on the Google Benchmark library.
|
||||||
#cmakedefine MFEM_USE_BENCHMARK
|
#cmakedefine MFEM_USE_BENCHMARK
|
||||||
|
|
||||||
// Enable Enzyme for AD
|
// Enable Enzyme for AD
|
||||||
|
|||||||
@@ -1,4 +1,4 @@
|
|||||||
# Copyright (c) 2010-2025, Lawrence Livermore National Security, LLC. Produced
|
# Copyright (c) 2010-2022, Lawrence Livermore National Security, LLC. Produced
|
||||||
# at the Lawrence Livermore National Laboratory. All Rights reserved. See files
|
# at the Lawrence Livermore National Laboratory. All Rights reserved. See files
|
||||||
# LICENSE and NOTICE for details. LLNL-CODE-806117.
|
# LICENSE and NOTICE for details. LLNL-CODE-806117.
|
||||||
#
|
#
|
||||||
|
|||||||
@@ -1,4 +1,4 @@
|
|||||||
# Copyright (c) 2010-2025, Lawrence Livermore National Security, LLC. Produced
|
# Copyright (c) 2010-2022, Lawrence Livermore National Security, LLC. Produced
|
||||||
# at the Lawrence Livermore National Laboratory. All Rights reserved. See files
|
# at the Lawrence Livermore National Laboratory. All Rights reserved. See files
|
||||||
# LICENSE and NOTICE for details. LLNL-CODE-806117.
|
# LICENSE and NOTICE for details. LLNL-CODE-806117.
|
||||||
#
|
#
|
||||||
@@ -16,7 +16,7 @@
|
|||||||
|
|
||||||
include(MfemCmakeUtilities)
|
include(MfemCmakeUtilities)
|
||||||
mfem_find_package(Algoim ALGOIM ALGOIM_DIR
|
mfem_find_package(Algoim ALGOIM ALGOIM_DIR
|
||||||
"include;src" "algoim_quad.hpp"
|
"include" "algoim_quad.hpp"
|
||||||
"" ""
|
"" ""
|
||||||
"Paths to headers required by Algoim."
|
"Paths to headers required by Algoim."
|
||||||
"Libraries required by Algoim.")
|
"Libraries required by Algoim.")
|
||||||
|
|||||||
@@ -1,4 +1,4 @@
|
|||||||
# Copyright (c) 2010-2025, Lawrence Livermore National Security, LLC. Produced
|
# Copyright (c) 2010-2022, Lawrence Livermore National Security, LLC. Produced
|
||||||
# at the Lawrence Livermore National Laboratory. All Rights reserved. See files
|
# at the Lawrence Livermore National Laboratory. All Rights reserved. See files
|
||||||
# LICENSE and NOTICE for details. LLNL-CODE-806117.
|
# LICENSE and NOTICE for details. LLNL-CODE-806117.
|
||||||
#
|
#
|
||||||
@@ -18,13 +18,4 @@ include(MfemCmakeUtilities)
|
|||||||
# Note: components are enabled based on the find_package() parameters.
|
# Note: components are enabled based on the find_package() parameters.
|
||||||
mfem_find_package(Axom AXOM AXOM_DIR "include" "" "lib" ""
|
mfem_find_package(Axom AXOM AXOM_DIR "include" "" "lib" ""
|
||||||
"Paths to headers required by Axom." "Libraries required by Axom."
|
"Paths to headers required by Axom." "Libraries required by Axom."
|
||||||
ADD_COMPONENT core "include" axom/core.hpp "lib" axom_core
|
ADD_COMPONENT Axom "include" axom/config.hpp "lib" axom)
|
||||||
ADD_COMPONENT inlet "include" axom/inlet.hpp "lib" axom_inlet
|
|
||||||
ADD_COMPONENT klee "include" axom/klee.hpp "lib" axom_klee
|
|
||||||
ADD_COMPONENT lumberjack "include" axom/lumberjack.hpp "lib" axom_lumberjack
|
|
||||||
ADD_COMPONENT mint "include" axom/mint.hpp "lib" axom_mint
|
|
||||||
ADD_COMPONENT multimat "include" axom/multimat.hpp "lib" axom_multimat
|
|
||||||
ADD_COMPONENT quest "include" axom/quest.hpp "lib" axom_quest
|
|
||||||
ADD_COMPONENT sidre "include" axom/sidre.hpp "lib" axom_sidre
|
|
||||||
ADD_COMPONENT slam "include" axom/slam.hpp "lib" axom_slam
|
|
||||||
ADD_COMPONENT slic "include" axom/slic.hpp "lib" axom_slic)
|
|
||||||
|
|||||||
@@ -1,4 +1,4 @@
|
|||||||
# Copyright (c) 2010-2025, Lawrence Livermore National Security, LLC. Produced
|
# Copyright (c) 2010-2022, Lawrence Livermore National Security, LLC. Produced
|
||||||
# at the Lawrence Livermore National Laboratory. All Rights reserved. See files
|
# at the Lawrence Livermore National Laboratory. All Rights reserved. See files
|
||||||
# LICENSE and NOTICE for details. LLNL-CODE-806117.
|
# LICENSE and NOTICE for details. LLNL-CODE-806117.
|
||||||
#
|
#
|
||||||
|
|||||||
@@ -1,4 +1,4 @@
|
|||||||
# Copyright (c) 2010-2025, Lawrence Livermore National Security, LLC. Produced
|
# Copyright (c) 2010-2022, Lawrence Livermore National Security, LLC. Produced
|
||||||
# at the Lawrence Livermore National Laboratory. All Rights reserved. See files
|
# at the Lawrence Livermore National Laboratory. All Rights reserved. See files
|
||||||
# LICENSE and NOTICE for details. LLNL-CODE-806117.
|
# LICENSE and NOTICE for details. LLNL-CODE-806117.
|
||||||
#
|
#
|
||||||
|
|||||||
@@ -1,4 +1,4 @@
|
|||||||
# Copyright (c) 2010-2025, Lawrence Livermore National Security, LLC. Produced
|
# Copyright (c) 2010-2022, Lawrence Livermore National Security, LLC. Produced
|
||||||
# at the Lawrence Livermore National Laboratory. All Rights reserved. See files
|
# at the Lawrence Livermore National Laboratory. All Rights reserved. See files
|
||||||
# LICENSE and NOTICE for details. LLNL-CODE-806117.
|
# LICENSE and NOTICE for details. LLNL-CODE-806117.
|
||||||
#
|
#
|
||||||
|
|||||||
@@ -1,4 +1,4 @@
|
|||||||
# Copyright (c) 2010-2025, Lawrence Livermore National Security, LLC. Produced
|
# Copyright (c) 2010-2022, Lawrence Livermore National Security, LLC. Produced
|
||||||
# at the Lawrence Livermore National Laboratory. All Rights reserved. See files
|
# at the Lawrence Livermore National Laboratory. All Rights reserved. See files
|
||||||
# LICENSE and NOTICE for details. LLNL-CODE-806117.
|
# LICENSE and NOTICE for details. LLNL-CODE-806117.
|
||||||
#
|
#
|
||||||
|
|||||||
@@ -1,4 +1,4 @@
|
|||||||
# Copyright (c) 2010-2025, Lawrence Livermore National Security, LLC. Produced
|
# Copyright (c) 2010-2022, Lawrence Livermore National Security, LLC. Produced
|
||||||
# at the Lawrence Livermore National Laboratory. All Rights reserved. See files
|
# at the Lawrence Livermore National Laboratory. All Rights reserved. See files
|
||||||
# LICENSE and NOTICE for details. LLNL-CODE-806117.
|
# LICENSE and NOTICE for details. LLNL-CODE-806117.
|
||||||
#
|
#
|
||||||
@@ -16,22 +16,7 @@
|
|||||||
|
|
||||||
include(MfemCmakeUtilities)
|
include(MfemCmakeUtilities)
|
||||||
mfem_find_package(Caliper CALIPER CALIPER_DIR
|
mfem_find_package(Caliper CALIPER CALIPER_DIR
|
||||||
"include" "caliper/cali.h"
|
"include" "caliper/cali.h"
|
||||||
"lib" "caliper"
|
"lib" "caliper"
|
||||||
"Paths to headers required by Caliper."
|
"Paths to headers required by Caliper."
|
||||||
"Libraries required by Caliper.")
|
"Libraries required by Caliper.")
|
||||||
|
|
||||||
# Append adiak path/lib if the user provided ADIAK_DIR
|
|
||||||
if(ADIAK_DIR AND EXISTS ${ADIAK_DIR})
|
|
||||||
find_package(adiak NO_DEFAULT_PATH REQUIRED PATHS ${ADIAK_DIR}/lib/cmake/adiak ${ADIAK_DIR})
|
|
||||||
list(APPEND CALIPER_INCLUDE_DIRS ${adiak_INCLUDE_DIRS})
|
|
||||||
list(APPEND CALIPER_LIBRARIES ${adiak_LIBRARIES})
|
|
||||||
endif()
|
|
||||||
|
|
||||||
# Append gotcha path/lib if the user provided GOTCHA_DIR
|
|
||||||
if(GOTCHA_DIR AND EXISTS ${GOTCHA_DIR})
|
|
||||||
find_package(gotcha NO_DEFAULT_PATH REQUIRED PATHS ${GOTCHA_DIR}/lib/cmake/gotcha ${GOTCHA_DIR})
|
|
||||||
list(APPEND CALIPER_INCLUDE_DIRS ${gotcha_INCLUDE_DIRS})
|
|
||||||
list(APPEND CALIPER_LIBRARIES ${gotcha_LIBRARIES})
|
|
||||||
endif()
|
|
||||||
|
|
||||||
|
|||||||
@@ -1,4 +1,4 @@
|
|||||||
# Copyright (c) 2010-2025, Lawrence Livermore National Security, LLC. Produced
|
# Copyright (c) 2010-2022, Lawrence Livermore National Security, LLC. Produced
|
||||||
# at the Lawrence Livermore National Laboratory. All Rights reserved. See files
|
# at the Lawrence Livermore National Laboratory. All Rights reserved. See files
|
||||||
# LICENSE and NOTICE for details. LLNL-CODE-806117.
|
# LICENSE and NOTICE for details. LLNL-CODE-806117.
|
||||||
#
|
#
|
||||||
@@ -21,26 +21,15 @@ if(EXISTS ${CONDUIT_DIR}/include/conduit/conduit_relay_hdf5.hpp)
|
|||||||
# we only need HDF5 if Conduit was built with HDF5 support
|
# we only need HDF5 if Conduit was built with HDF5 support
|
||||||
set(Conduit_REQUIRED_PACKAGES "HDF5" CACHE STRING
|
set(Conduit_REQUIRED_PACKAGES "HDF5" CACHE STRING
|
||||||
"Additional packages required by Conduit.")
|
"Additional packages required by Conduit.")
|
||||||
# Suppress warning about HDF5_ROOT being set
|
else()
|
||||||
if (POLICY CMP0074)
|
message(STATUS "Conduit Relay HDF5 Support is DISABLED")
|
||||||
cmake_policy(SET CMP0074 NEW)
|
|
||||||
endif()
|
|
||||||
# HDF5_ROOT is needed in some cases, e.g. when HDF5_TARGET_NAMES is set and
|
|
||||||
# MFEM's FindHDF5.cmake is not used.
|
|
||||||
set(HDF5_ROOT ${HDF5_DIR} CACHE PATH "")
|
|
||||||
else()
|
|
||||||
message(STATUS "Conduit Relay HDF5 Support is DISABLED")
|
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
include(MfemCmakeUtilities)
|
include(MfemCmakeUtilities)
|
||||||
mfem_find_package(Conduit CONDUIT CONDUIT_DIR
|
mfem_find_package(Conduit CONDUIT CONDUIT_DIR
|
||||||
"include;include/conduit" conduit.hpp "lib" conduit
|
"include;include/conduit" conduit.hpp "lib" conduit
|
||||||
"Paths to headers required by Conduit." "Libraries required by Conduit."
|
"Paths to headers required by Conduit." "Libraries required by Conduit."
|
||||||
ADD_COMPONENT blueprint
|
|
||||||
"include;include/conduit" conduit_blueprint.hpp "lib" conduit_blueprint
|
|
||||||
ADD_COMPONENT blueprint_mpi
|
|
||||||
"include;include/conduit" conduit_blueprint_mpi.hpp "lib" conduit_blueprint_mpi
|
|
||||||
ADD_COMPONENT relay
|
ADD_COMPONENT relay
|
||||||
"include;include/conduit" conduit_relay.hpp "lib" conduit_relay
|
"include;include/conduit" conduit_relay.hpp "lib" conduit_relay
|
||||||
ADD_COMPONENT relay_mpi
|
ADD_COMPONENT blueprint
|
||||||
"include;include/conduit" conduit_relay_mpi.hpp "lib" conduit_relay_mpi)
|
"include;include/conduit" conduit_blueprint.hpp "lib" conduit_blueprint)
|
||||||
|
|||||||
@@ -0,0 +1,27 @@
|
|||||||
|
# Copyright (c) 2010-2022, Lawrence Livermore National Security, LLC. Produced
|
||||||
|
# at the Lawrence Livermore National Laboratory. All Rights reserved. See files
|
||||||
|
# LICENSE and NOTICE for details. LLNL-CODE-806117.
|
||||||
|
#
|
||||||
|
# This file is part of the MFEM library. For more information and source code
|
||||||
|
# availability visit https://mfem.org.
|
||||||
|
#
|
||||||
|
# MFEM is free software; you can redistribute it and/or modify it under the
|
||||||
|
# terms of the BSD-3 license. We welcome feedback and contributions, see file
|
||||||
|
# CONTRIBUTING.md for details.
|
||||||
|
|
||||||
|
message(STATUS "Looking for ENZYME ...")
|
||||||
|
message(STATUS " in ENZYME_DIR = ${ENZYME_DIR}")
|
||||||
|
|
||||||
|
# Make sure the directory and version combination works. Do nothing otherwise.
|
||||||
|
if(EXISTS "${ENZYME_DIR}/ClangEnzyme-${ENZYME_VERSION}.so")
|
||||||
|
message(STATUS "Found ENZYME: ${ENZYME_DIR}/ClangEnzyme-${ENZYME_VERSION}.so")
|
||||||
|
|
||||||
|
# Set ENZYME_FOUND
|
||||||
|
set(ENZYME_FOUND TRUE CACHE BOOL "ENZYME was found." FORCE)
|
||||||
|
|
||||||
|
# Set CXX flags to accomodate the Enzyme Clang plugin
|
||||||
|
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Xclang -load -Xclang ${ENZYME_DIR}/ClangEnzyme-${ENZYME_VERSION}.so -mllvm -enzyme-loose-types=1")
|
||||||
|
set(MFEM_USE_ENZYME YES)
|
||||||
|
else()
|
||||||
|
|
||||||
|
endif()
|
||||||
@@ -1,4 +1,4 @@
|
|||||||
# Copyright (c) 2010-2025, Lawrence Livermore National Security, LLC. Produced
|
# Copyright (c) 2010-2022, Lawrence Livermore National Security, LLC. Produced
|
||||||
# at the Lawrence Livermore National Laboratory. All Rights reserved. See files
|
# at the Lawrence Livermore National Laboratory. All Rights reserved. See files
|
||||||
# LICENSE and NOTICE for details. LLNL-CODE-806117.
|
# LICENSE and NOTICE for details. LLNL-CODE-806117.
|
||||||
#
|
#
|
||||||
|
|||||||
@@ -1,4 +1,4 @@
|
|||||||
# Copyright (c) 2010-2025, Lawrence Livermore National Security, LLC. Produced
|
# Copyright (c) 2010-2022, Lawrence Livermore National Security, LLC. Produced
|
||||||
# at the Lawrence Livermore National Laboratory. All Rights reserved. See files
|
# at the Lawrence Livermore National Laboratory. All Rights reserved. See files
|
||||||
# LICENSE and NOTICE for details. LLNL-CODE-806117.
|
# LICENSE and NOTICE for details. LLNL-CODE-806117.
|
||||||
#
|
#
|
||||||
@@ -9,47 +9,10 @@
|
|||||||
# terms of the BSD-3 license. We welcome feedback and contributions, see file
|
# terms of the BSD-3 license. We welcome feedback and contributions, see file
|
||||||
# CONTRIBUTING.md for details.
|
# CONTRIBUTING.md for details.
|
||||||
|
|
||||||
# Defines the following variables if fetching of TPLs is disabled (default):
|
# Defines the following variables:
|
||||||
# - GSLIB_FOUND
|
# - GSLIB_FOUND
|
||||||
# - GSLIB_LIBRARIES
|
# - GSLIB_LIBRARIES
|
||||||
# - GSLIB_INCLUDE_DIRS
|
# - GSLIB_INCLUDE_DIRS
|
||||||
# otherwise, the following are defined:
|
|
||||||
# - GSLIB (imported library target)
|
|
||||||
|
|
||||||
if (MFEM_FETCH_GSLIB OR MFEM_FETCH_TPLS)
|
|
||||||
enable_language(C)
|
|
||||||
string(TOUPPER "${CMAKE_BUILD_TYPE}" BUILD_TYPE)
|
|
||||||
set(GSLIB_FETCH_VERSION 1.0.9)
|
|
||||||
set(GSLIB_C_FLAGS ${CMAKE_C_FLAGS_${BUILD_TYPE}})
|
|
||||||
if (CMAKE_C_FLAGS)
|
|
||||||
set(GSLIB_C_FLAGS "${CMAKE_C_FLAGS} ${CMAKE_C_FLAGS_${BUILD_TYPE}}")
|
|
||||||
endif()
|
|
||||||
if (BUILD_SHARED_LIBS)
|
|
||||||
set(GSLIB_C_FLAGS "${GSLIB_C_FLAGS} -fPIC")
|
|
||||||
endif()
|
|
||||||
add_library(GSLIB STATIC IMPORTED)
|
|
||||||
# define external project and create future include directory so it is present
|
|
||||||
# to pass CMake checks at end of MFEM configuration step
|
|
||||||
message(STATUS "Will fetch GSLIB ${GSLIB_FETCH_VERSION} to be built with ${GSLIB_C_FLAGS}")
|
|
||||||
set(PREFIX ${CMAKE_BINARY_DIR}/fetch/gslib)
|
|
||||||
include(ExternalProject)
|
|
||||||
ExternalProject_Add(gslib
|
|
||||||
GIT_REPOSITORY https://github.com/Nek5000/gslib
|
|
||||||
GIT_TAG v${GSLIB_FETCH_VERSION}
|
|
||||||
GIT_SHALLOW TRUE
|
|
||||||
UPDATE_DISCONNECTED TRUE
|
|
||||||
PREFIX ${PREFIX}
|
|
||||||
CONFIGURE_COMMAND ""
|
|
||||||
BUILD_COMMAND cd ${PREFIX}/src/gslib && $(MAKE) clean && $(MAKE) DESTDIR=${PREFIX} MPI=$<BOOL:${MFEM_USE_MPI}> "CFLAGS= ${GSLIB_C_FLAGS}"
|
|
||||||
INSTALL_COMMAND "")
|
|
||||||
file(MAKE_DIRECTORY ${PREFIX}/include)
|
|
||||||
# set imported library target properties
|
|
||||||
add_dependencies(GSLIB gslib)
|
|
||||||
set_target_properties(GSLIB PROPERTIES
|
|
||||||
IMPORTED_LOCATION ${PREFIX}/lib/libgs.a
|
|
||||||
INTERFACE_INCLUDE_DIRECTORIES ${PREFIX}/include)
|
|
||||||
return()
|
|
||||||
endif()
|
|
||||||
|
|
||||||
include(MfemCmakeUtilities)
|
include(MfemCmakeUtilities)
|
||||||
mfem_find_package(GSLIB GSLIB GSLIB_DIR "include" gslib.h "lib" gs
|
mfem_find_package(GSLIB GSLIB GSLIB_DIR "include" gslib.h "lib" gs
|
||||||
|
|||||||
@@ -1,70 +0,0 @@
|
|||||||
# Copyright (c) 2010-2025, Lawrence Livermore National Security, LLC. Produced
|
|
||||||
# at the Lawrence Livermore National Laboratory. All Rights reserved. See files
|
|
||||||
# LICENSE and NOTICE for details. LLNL-CODE-806117.
|
|
||||||
#
|
|
||||||
# This file is part of the MFEM library. For more information and source code
|
|
||||||
# availability visit https://mfem.org.
|
|
||||||
#
|
|
||||||
# MFEM is free software; you can redistribute it and/or modify it under the
|
|
||||||
# terms of the BSD-3 license. We welcome feedback and contributions, see file
|
|
||||||
# CONTRIBUTING.md for details.
|
|
||||||
|
|
||||||
# Defines the following variables:
|
|
||||||
# - HDF5_FOUND - If HDF5 was found
|
|
||||||
# - HDF5_LIBRARIES - The HDF5 libraries
|
|
||||||
# - HDF5_INCLUDE_DIRS - The HDF5 include directories
|
|
||||||
|
|
||||||
# NOTE: Using this FindHDF5.cmake instead of the CMake provided version may lead
|
|
||||||
# to issues with some TPL libraries that depend (or may depend) on HDF5.
|
|
||||||
# For this reason, we should consider removing this file, or at least
|
|
||||||
# making it use the CMake provided version by default and apply the logic
|
|
||||||
# below only when specifically requested by a user. -V. Dobrev
|
|
||||||
|
|
||||||
# First Check for HDF5_DIR
|
|
||||||
if(NOT HDF5_DIR)
|
|
||||||
message(FATAL_ERROR
|
|
||||||
"Could not find HDF5. HDF5 support needs explicit HDF5_DIR")
|
|
||||||
endif()
|
|
||||||
|
|
||||||
if (NOT HDF5_FIND_QUIETLY)
|
|
||||||
message(STATUS "Looking for HDF5 ...")
|
|
||||||
message(STATUS " in HDF5_DIR = ${HDF5_DIR}")
|
|
||||||
endif()
|
|
||||||
|
|
||||||
# Find includes
|
|
||||||
find_path( HDF5_INCLUDE_DIRS hdf5.h
|
|
||||||
PATHS ${HDF5_DIR}/include/
|
|
||||||
NO_DEFAULT_PATH
|
|
||||||
NO_CMAKE_ENVIRONMENT_PATH
|
|
||||||
NO_CMAKE_PATH
|
|
||||||
NO_SYSTEM_ENVIRONMENT_PATH
|
|
||||||
NO_CMAKE_SYSTEM_PATH)
|
|
||||||
|
|
||||||
find_library( __HDF5_LIBRARY NAMES hdf5 libhdf5 libhdf5_D libhdf5_debug
|
|
||||||
PATHS ${HDF5_DIR}/lib
|
|
||||||
NO_DEFAULT_PATH
|
|
||||||
NO_CMAKE_ENVIRONMENT_PATH
|
|
||||||
NO_CMAKE_PATH
|
|
||||||
NO_SYSTEM_ENVIRONMENT_PATH
|
|
||||||
NO_CMAKE_SYSTEM_PATH)
|
|
||||||
|
|
||||||
find_library( __HDF5_HL_LIBRARY NAMES hdf5_hl libhdf5_hl libhdf5_hl_D libhdf5_hl_debug
|
|
||||||
PATHS ${HDF5_DIR}/lib
|
|
||||||
NO_DEFAULT_PATH
|
|
||||||
NO_CMAKE_ENVIRONMENT_PATH
|
|
||||||
NO_CMAKE_PATH
|
|
||||||
NO_SYSTEM_ENVIRONMENT_PATH
|
|
||||||
NO_CMAKE_SYSTEM_PATH)
|
|
||||||
|
|
||||||
set(HDF5_LIBRARIES ${__HDF5_HL_LIBRARY} ${__HDF5_LIBRARY})
|
|
||||||
|
|
||||||
include(FindPackageHandleStandardArgs)
|
|
||||||
|
|
||||||
# Handle the QUIETLY and REQUIRED arguments and set HDF5_FOUND to TRUE if all
|
|
||||||
# listed variables are TRUE
|
|
||||||
find_package_handle_standard_args(HDF5
|
|
||||||
" *** HDF5 not found. Please set HDF5_DIR."
|
|
||||||
HDF5_LIBRARIES
|
|
||||||
HDF5_INCLUDE_DIRS
|
|
||||||
__HDF5_LIBRARY
|
|
||||||
__HDF5_HL_LIBRARY)
|
|
||||||
@@ -1,4 +1,4 @@
|
|||||||
# Copyright (c) 2010-2025, Lawrence Livermore National Security, LLC. Produced
|
# Copyright (c) 2010-2022, Lawrence Livermore National Security, LLC. Produced
|
||||||
# at the Lawrence Livermore National Laboratory. All Rights reserved. See files
|
# at the Lawrence Livermore National Laboratory. All Rights reserved. See files
|
||||||
# LICENSE and NOTICE for details. LLNL-CODE-806117.
|
# LICENSE and NOTICE for details. LLNL-CODE-806117.
|
||||||
#
|
#
|
||||||
|
|||||||
@@ -1,4 +1,4 @@
|
|||||||
# Copyright (c) 2010-2025, Lawrence Livermore National Security, LLC. Produced
|
# Copyright (c) 2010-2022, Lawrence Livermore National Security, LLC. Produced
|
||||||
# at the Lawrence Livermore National Laboratory. All Rights reserved. See files
|
# at the Lawrence Livermore National Laboratory. All Rights reserved. See files
|
||||||
# LICENSE and NOTICE for details. LLNL-CODE-806117.
|
# LICENSE and NOTICE for details. LLNL-CODE-806117.
|
||||||
#
|
#
|
||||||
@@ -9,119 +9,17 @@
|
|||||||
# terms of the BSD-3 license. We welcome feedback and contributions, see file
|
# terms of the BSD-3 license. We welcome feedback and contributions, see file
|
||||||
# CONTRIBUTING.md for details.
|
# CONTRIBUTING.md for details.
|
||||||
|
|
||||||
# Defines the following variables if fetching of TPLs is disabled (default):
|
# Defines the following variables:
|
||||||
# - HYPRE_FOUND
|
# - HYPRE_FOUND
|
||||||
# - HYPRE_LIBRARIES
|
# - HYPRE_LIBRARIES
|
||||||
# - HYPRE_INCLUDE_DIRS
|
# - HYPRE_INCLUDE_DIRS
|
||||||
# - HYPRE_VERSION
|
# - HYPRE_VERSION
|
||||||
# - HYPRE_USING_CUDA (internal)
|
|
||||||
# - HYPRE_USING_HIP (internal)
|
# - HYPRE_USING_HIP (internal)
|
||||||
# otherwise, the following are defined:
|
|
||||||
# - HYPRE (imported library target)
|
|
||||||
# - HYPRE_VERSION (cache variable)
|
|
||||||
|
|
||||||
if (HYPRE_FOUND OR TARGET HYPRE)
|
if (HYPRE_FOUND)
|
||||||
if (HYPRE_USING_CUDA)
|
|
||||||
find_package(CUDAToolkit REQUIRED)
|
|
||||||
endif()
|
|
||||||
if (HYPRE_USING_HIP)
|
if (HYPRE_USING_HIP)
|
||||||
find_package(rocsparse REQUIRED)
|
find_package(rocsparse REQUIRED)
|
||||||
find_package(rocrand REQUIRED)
|
find_package(rocrand REQUIRED)
|
||||||
find_package(rocsolver REQUIRED)
|
|
||||||
endif()
|
|
||||||
if (HYPRE_LIBRARIES AND HYPRE_INCLUDE_DIRS AND HYPRE_VERSION)
|
|
||||||
find_package_handle_standard_args(HYPRE
|
|
||||||
REQUIRED_VARS HYPRE_LIBRARIES HYPRE_INCLUDE_DIRS HYPRE_VERSION
|
|
||||||
)
|
|
||||||
return()
|
|
||||||
endif()
|
|
||||||
endif()
|
|
||||||
|
|
||||||
if (MFEM_FETCH_HYPRE OR MFEM_FETCH_TPLS)
|
|
||||||
set(HYPRE_FETCH_VERSION 2.33.0)
|
|
||||||
set(HYPRE_FETCH_TAG "v${HYPRE_FETCH_VERSION}" CACHE STRING "Tag, branch, or commit for HYPRE")
|
|
||||||
add_library(HYPRE STATIC IMPORTED)
|
|
||||||
# set options and associated dependencies
|
|
||||||
set(HYPRE_CMAKE_OPTIONS "")
|
|
||||||
list(APPEND HYPRE_CMAKE_OPTIONS -DCMAKE_BUILD_TYPE:STRING=${CMAKE_BUILD_TYPE})
|
|
||||||
# collect all HYPRE_ENABLE variables and pass them to hypre, assuming they are BOOL.
|
|
||||||
get_cmake_property(all_vars VARIABLES)
|
|
||||||
foreach(var ${all_vars})
|
|
||||||
if(var MATCHES "^HYPRE_ENABLE")
|
|
||||||
list(APPEND HYPRE_CMAKE_OPTIONS "-D${var}:BOOL=${${var}}")
|
|
||||||
endif()
|
|
||||||
endforeach()
|
|
||||||
# process all MFEM_USE variables that impact hypre
|
|
||||||
if (MFEM_USE_CUDA)
|
|
||||||
list(APPEND HYPRE_CMAKE_OPTIONS -DHYPRE_ENABLE_CUDA:BOOL=ON -DCMAKE_CUDA_ARCHITECTURES:STRING=${CMAKE_CUDA_ARCHITECTURES})
|
|
||||||
find_package(CUDAToolkit REQUIRED)
|
|
||||||
target_link_libraries(HYPRE INTERFACE CUDA::cusparse CUDA::curand CUDA::cublas)
|
|
||||||
elseif (MFEM_USE_HIP)
|
|
||||||
list(APPEND HYPRE_CMAKE_OPTIONS -DHYPRE_ENABLE_HIP:BOOL=ON)
|
|
||||||
find_package(rocsparse REQUIRED)
|
|
||||||
find_package(rocrand REQUIRED)
|
|
||||||
target_link_libraries(HYPRE INTERFACE rocsparse rocrand)
|
|
||||||
endif()
|
|
||||||
if (MFEM_USE_CUDA OR MFEM_USE_HIP)
|
|
||||||
if (MFEM_USE_UMPIRE)
|
|
||||||
if (EXISTS ${umpire_DIR})
|
|
||||||
list(APPEND HYPRE_CMAKE_OPTIONS -DHYPRE_ENABLE_UMPIRE:BOOL=ON -Dumpire_DIR:PATH=${umpire_DIR})
|
|
||||||
else()
|
|
||||||
message(FATAL_ERROR "MFEM_USE_UMPIRE=ON, however umpire_DIR isn't visible to HYPRE")
|
|
||||||
endif()
|
|
||||||
else()
|
|
||||||
list(APPEND HYPRE_CMAKE_OPTIONS -DHYPRE_ENABLE_UMPIRE:BOOL=OFF)
|
|
||||||
message(WARNING
|
|
||||||
"================================================================================
|
|
||||||
Umpire is disabled while building HYPRE with GPU support.
|
|
||||||
This is not recommended for performance reasons!
|
|
||||||
Consider enabling Umpire with -DMFEM_USE_UMPIRE=ON and providing -DUMPIRE_DIR.
|
|
||||||
================================================================================")
|
|
||||||
endif()
|
|
||||||
endif()
|
|
||||||
if (MFEM_USE_SINGLE)
|
|
||||||
list(APPEND HYPRE_CMAKE_OPTIONS -DHYPRE_ENABLE_SINGLE:BOOL=ON)
|
|
||||||
endif()
|
|
||||||
# define external project and create future include directory so it is present
|
|
||||||
# to pass CMake checks at end of MFEM configuration step
|
|
||||||
message(STATUS "Will fetch HYPRE ${HYPRE_FETCH_TAG} to be built with ${HYPRE_CMAKE_OPTIONS}")
|
|
||||||
set(HYPRE_INSTALL ${CMAKE_BINARY_DIR}/fetch/hypre)
|
|
||||||
include(ExternalProject)
|
|
||||||
ExternalProject_Add(hypre
|
|
||||||
GIT_REPOSITORY https://github.com/hypre-space/hypre.git
|
|
||||||
GIT_TAG ${HYPRE_FETCH_TAG}
|
|
||||||
GIT_SHALLOW TRUE
|
|
||||||
GIT_PROGRESS TRUE
|
|
||||||
UPDATE_DISCONNECTED TRUE
|
|
||||||
SOURCE_SUBDIR src
|
|
||||||
PREFIX ${HYPRE_INSTALL}
|
|
||||||
BUILD_COMMAND ${CMAKE_COMMAND} --build . -- -j${CMAKE_BUILD_PARALLEL_LEVEL}
|
|
||||||
CMAKE_CACHE_ARGS -DCMAKE_INSTALL_PREFIX:PATH=${HYPRE_INSTALL} -DCMAKE_INSTALL_LIBDIR:PATH=lib ${HYPRE_CMAKE_OPTIONS})
|
|
||||||
file(MAKE_DIRECTORY ${HYPRE_INSTALL}/include)
|
|
||||||
# set imported library target properties
|
|
||||||
add_dependencies(HYPRE hypre)
|
|
||||||
set_target_properties(HYPRE PROPERTIES
|
|
||||||
IMPORTED_LOCATION ${HYPRE_INSTALL}/lib/libHYPRE.a
|
|
||||||
INTERFACE_INCLUDE_DIRECTORIES ${HYPRE_INSTALL}/include)
|
|
||||||
# convert HYPRE version to integer
|
|
||||||
if (HYPRE_FETCH_TAG MATCHES "^v?([0-9]+)\\.([0-9]+)\\.([0-9]+)$")
|
|
||||||
# Exact release tag X.Y.Z
|
|
||||||
string(REGEX MATCHALL "[0-9]+" HYPRE_SPLIT_VERSION "${HYPRE_FETCH_TAG}")
|
|
||||||
elseif (HYPRE_FETCH_VERSION MATCHES "([0-9]+)\\.([0-9]+)(\\.([0-9]+))?")
|
|
||||||
string(REGEX MATCHALL "[0-9]+" HYPRE_SPLIT_VERSION "${HYPRE_FETCH_VERSION}")
|
|
||||||
else (NOT DEFINED HYPRE_VERSION)
|
|
||||||
message(FATAL_ERROR "Unable to find HYPRE release version. Please provide it via -DHYPRE_VERSION")
|
|
||||||
endif()
|
|
||||||
if (HYPRE_SPLIT_VERSION AND NOT DEFINED HYPRE_VERSION)
|
|
||||||
list(GET HYPRE_SPLIT_VERSION 0 HYPRE_MAJOR_VERSION)
|
|
||||||
list(GET HYPRE_SPLIT_VERSION 1 HYPRE_MINOR_VERSION)
|
|
||||||
if (HYPRE_SPLIT_VERSION GREATER 2)
|
|
||||||
list(GET HYPRE_SPLIT_VERSION 2 HYPRE_PATCH_VERSION)
|
|
||||||
else()
|
|
||||||
set(HYPRE_PATCH_VERSION 0)
|
|
||||||
endif()
|
|
||||||
math(EXPR HYPRE_VERSION "10000*${HYPRE_MAJOR_VERSION} + 100*${HYPRE_MINOR_VERSION} + ${HYPRE_PATCH_VERSION}")
|
|
||||||
set(HYPRE_VERSION ${HYPRE_VERSION} CACHE STRING "HYPRE version." FORCE)
|
|
||||||
endif()
|
endif()
|
||||||
return()
|
return()
|
||||||
endif()
|
endif()
|
||||||
@@ -129,20 +27,6 @@ endif()
|
|||||||
include(MfemCmakeUtilities)
|
include(MfemCmakeUtilities)
|
||||||
mfem_find_package(HYPRE HYPRE HYPRE_DIR "include" "HYPRE.h" "lib" "HYPRE"
|
mfem_find_package(HYPRE HYPRE HYPRE_DIR "include" "HYPRE.h" "lib" "HYPRE"
|
||||||
"Paths to headers required by HYPRE." "Libraries required by HYPRE."
|
"Paths to headers required by HYPRE." "Libraries required by HYPRE."
|
||||||
CHECK_BUILD HYPRE_USING_CUDA FALSE
|
|
||||||
"
|
|
||||||
#undef HYPRE_USING_CUDA
|
|
||||||
#include <HYPRE_config.h>
|
|
||||||
|
|
||||||
#ifndef HYPRE_USING_CUDA
|
|
||||||
#error HYPRE is built without CUDA.
|
|
||||||
#endif
|
|
||||||
|
|
||||||
int main()
|
|
||||||
{
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
"
|
|
||||||
CHECK_BUILD HYPRE_USING_HIP FALSE
|
CHECK_BUILD HYPRE_USING_HIP FALSE
|
||||||
"
|
"
|
||||||
#undef HYPRE_USING_HIP
|
#undef HYPRE_USING_HIP
|
||||||
@@ -173,30 +57,11 @@ if (HYPRE_FOUND AND (NOT HYPRE_VERSION))
|
|||||||
endif()
|
endif()
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
if (HYPRE_FOUND AND HYPRE_USING_CUDA)
|
|
||||||
find_package(CUDAToolkit REQUIRED)
|
|
||||||
# Initialize CUSPARSE_LIBRARIES, CURAND_LIBRARIES, and CUBLAS_LIBRARIES:
|
|
||||||
mfem_culib_set_libraries(CUSPARSE cusparse)
|
|
||||||
mfem_culib_set_libraries(CURAND curand)
|
|
||||||
mfem_culib_set_libraries(CUBLAS cublas)
|
|
||||||
mfem_culib_set_libraries(CUSOLVER cusolver)
|
|
||||||
list(APPEND HYPRE_LIBRARIES ${CUSPARSE_LIBRARIES} ${CURAND_LIBRARIES}
|
|
||||||
${CUBLAS_LIBRARIES} ${CUSOLVER_LIBRARIES})
|
|
||||||
set(HYPRE_LIBRARIES ${HYPRE_LIBRARIES} CACHE STRING
|
|
||||||
"HYPRE libraries + dependencies." FORCE)
|
|
||||||
message(STATUS "Updated HYPRE_LIBRARIES: ${HYPRE_LIBRARIES}")
|
|
||||||
endif()
|
|
||||||
|
|
||||||
if (HYPRE_FOUND AND HYPRE_USING_HIP)
|
if (HYPRE_FOUND AND HYPRE_USING_HIP)
|
||||||
find_package(rocsparse REQUIRED)
|
find_package(rocsparse REQUIRED)
|
||||||
find_package(rocrand REQUIRED)
|
find_package(rocrand REQUIRED)
|
||||||
find_package(rocsolver REQUIRED)
|
list(APPEND HYPRE_LIBRARIES ${rocsparse_LIBRARIES} ${rocrand_LIBRARIES})
|
||||||
list(APPEND HYPRE_LIBRARIES ${rocsparse_LIBRARIES} ${rocrand_LIBRARIES} roc::rocsolver roc::rocblas)
|
|
||||||
set(HYPRE_LIBRARIES ${HYPRE_LIBRARIES} CACHE STRING
|
set(HYPRE_LIBRARIES ${HYPRE_LIBRARIES} CACHE STRING
|
||||||
"HYPRE libraries + dependencies." FORCE)
|
"HYPRE libraries + dependencies." FORCE)
|
||||||
message(STATUS "Updated HYPRE_LIBRARIES: ${HYPRE_LIBRARIES}")
|
message(STATUS "Updated HYPRE_LIBRARIES: ${HYPRE_LIBRARIES}")
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
find_package_handle_standard_args(HYPRE
|
|
||||||
REQUIRED_VARS HYPRE_LIBRARIES HYPRE_INCLUDE_DIRS HYPRE_VERSION
|
|
||||||
)
|
|
||||||
|
|||||||
@@ -1,4 +1,4 @@
|
|||||||
# Copyright (c) 2010-2025, Lawrence Livermore National Security, LLC. Produced
|
# Copyright (c) 2010-2022, Lawrence Livermore National Security, LLC. Produced
|
||||||
# at the Lawrence Livermore National Laboratory. All Rights reserved. See files
|
# at the Lawrence Livermore National Laboratory. All Rights reserved. See files
|
||||||
# LICENSE and NOTICE for details. LLNL-CODE-806117.
|
# LICENSE and NOTICE for details. LLNL-CODE-806117.
|
||||||
#
|
#
|
||||||
|
|||||||
@@ -1,4 +1,4 @@
|
|||||||
# Copyright (c) 2010-2025, Lawrence Livermore National Security, LLC. Produced
|
# Copyright (c) 2010-2022, Lawrence Livermore National Security, LLC. Produced
|
||||||
# at the Lawrence Livermore National Laboratory. All Rights reserved. See files
|
# at the Lawrence Livermore National Laboratory. All Rights reserved. See files
|
||||||
# LICENSE and NOTICE for details. LLNL-CODE-806117.
|
# LICENSE and NOTICE for details. LLNL-CODE-806117.
|
||||||
#
|
#
|
||||||
|
|||||||
@@ -1,39 +0,0 @@
|
|||||||
# Copyright (c) 2010-2025, Lawrence Livermore National Security, LLC. Produced
|
|
||||||
# at the Lawrence Livermore National Laboratory. All Rights reserved. See files
|
|
||||||
# LICENSE and NOTICE for details. LLNL-CODE-806117.
|
|
||||||
#
|
|
||||||
# This file is part of the MFEM library. For more information and source code
|
|
||||||
# availability visit https://mfem.org.
|
|
||||||
#
|
|
||||||
# MFEM is free software; you can redistribute it and/or modify it under the
|
|
||||||
# terms of the BSD-3 license. We welcome feedback and contributions, see file
|
|
||||||
# CONTRIBUTING.md for details.
|
|
||||||
|
|
||||||
# Defines the following variables:
|
|
||||||
# - MAGMA_FOUND
|
|
||||||
# - MAGMA_LIBRARIES
|
|
||||||
# - MAGMA_INCLUDE_DIRS
|
|
||||||
|
|
||||||
include(MfemCmakeUtilities)
|
|
||||||
mfem_find_package(MAGMA MAGMA MAGMA_DIR "include" "magma.h" "lib" "magma"
|
|
||||||
"Paths to headers required by MAGMA." "Libraries required by MAGMA.")
|
|
||||||
|
|
||||||
if (MAGMA_FOUND AND MFEM_USE_CUDA)
|
|
||||||
find_package(CUDAToolkit REQUIRED)
|
|
||||||
# Initialize CUSPARSE_LIBRARIES and CUBLAS_LIBRARIES:
|
|
||||||
mfem_culib_set_libraries(CUSPARSE cusparse)
|
|
||||||
mfem_culib_set_libraries(CUBLAS cublas)
|
|
||||||
list(APPEND MAGMA_LIBRARIES ${CUSPARSE_LIBRARIES} ${CUBLAS_LIBRARIES})
|
|
||||||
set(MAGMA_LIBRARIES ${MAGMA_LIBRARIES} CACHE STRING
|
|
||||||
"MAGMA libraries + dependencies." FORCE)
|
|
||||||
message(STATUS "Updated MAGMA_LIBRARIES: ${MAGMA_LIBRARIES}")
|
|
||||||
endif()
|
|
||||||
|
|
||||||
if (MAGMA_FOUND AND MFEM_USE_HIP)
|
|
||||||
find_package(HIPBLAS REQUIRED)
|
|
||||||
find_package(HIPSPARSE REQUIRED)
|
|
||||||
list(APPEND MAGMA_LIBRARIES ${HIPBLAS_LIBRARIES} ${HIPSPARSE_LIBRARIES})
|
|
||||||
set(MAGMA_LIBRARIES ${MAGMA_LIBRARIES} CACHE STRING
|
|
||||||
"MAGMA libraries + dependencies." FORCE)
|
|
||||||
message(STATUS "Updated MAGMA_LIBRARIES: ${MAGMA_LIBRARIES}")
|
|
||||||
endif()
|
|
||||||
@@ -1,4 +1,4 @@
|
|||||||
# Copyright (c) 2010-2025, Lawrence Livermore National Security, LLC. Produced
|
# Copyright (c) 2010-2022, Lawrence Livermore National Security, LLC. Produced
|
||||||
# at the Lawrence Livermore National Laboratory. All Rights reserved. See files
|
# at the Lawrence Livermore National Laboratory. All Rights reserved. See files
|
||||||
# LICENSE and NOTICE for details. LLNL-CODE-806117.
|
# LICENSE and NOTICE for details. LLNL-CODE-806117.
|
||||||
#
|
#
|
||||||
@@ -9,39 +9,10 @@
|
|||||||
# terms of the BSD-3 license. We welcome feedback and contributions, see file
|
# terms of the BSD-3 license. We welcome feedback and contributions, see file
|
||||||
# CONTRIBUTING.md for details.
|
# CONTRIBUTING.md for details.
|
||||||
|
|
||||||
# Defines the following variables if fetching of TPLs is disabled (default):
|
# Defines the following variables:
|
||||||
# - METIS_FOUND
|
# - METIS_FOUND
|
||||||
# - METIS_LIBRARIES
|
# - METIS_LIBRARIES
|
||||||
# - METIS_INCLUDE_DIRS
|
# - METIS_INCLUDE_DIRS
|
||||||
# - METIS_VERSION_5
|
|
||||||
# otherwise, the following are defined:
|
|
||||||
# - METIS (imported library target)
|
|
||||||
# - METIS_VERSION_5 (cache variable)
|
|
||||||
|
|
||||||
if (MFEM_FETCH_METIS OR MFEM_FETCH_TPLS)
|
|
||||||
set(METIS_FETCH_VERSION 4.0.3)
|
|
||||||
add_library(METIS STATIC IMPORTED)
|
|
||||||
# define external project
|
|
||||||
message(STATUS "Will fetch METIS ${METIS_FETCH_VERSION} to be built with default options")
|
|
||||||
set(PREFIX ${CMAKE_BINARY_DIR}/fetch/metis)
|
|
||||||
include(ExternalProject)
|
|
||||||
ExternalProject_Add(metis
|
|
||||||
GIT_REPOSITORY https://github.com/mfem/tpls
|
|
||||||
GIT_TAG b60352fbe9675d374b00828055e55be4584c7995 # tag from 1/16/25
|
|
||||||
GIT_SHALLOW TRUE
|
|
||||||
UPDATE_DISCONNECTED TRUE
|
|
||||||
PREFIX ${PREFIX}
|
|
||||||
CONFIGURE_COMMAND tar -xzf ../metis/metis-${METIS_FETCH_VERSION}-mac.tgz --strip=1
|
|
||||||
BUILD_COMMAND $(MAKE) COPTIONS=-Wno-incompatible-pointer-types
|
|
||||||
INSTALL_COMMAND mkdir -p ${PREFIX}/lib && cp libmetis.a ${PREFIX}/lib/)
|
|
||||||
# set imported library target properties
|
|
||||||
add_dependencies(METIS metis)
|
|
||||||
set_target_properties(METIS PROPERTIES
|
|
||||||
IMPORTED_LOCATION ${PREFIX}/lib/libmetis.a)
|
|
||||||
# set cache variables that would otherwise be set after mfem_find_package call
|
|
||||||
set(METIS_VERSION_5 FALSE CACHE BOOL "Is METIS version 5?")
|
|
||||||
return()
|
|
||||||
endif()
|
|
||||||
|
|
||||||
include(MfemCmakeUtilities)
|
include(MfemCmakeUtilities)
|
||||||
mfem_find_package(METIS METIS METIS_DIR "include;Lib" "metis.h"
|
mfem_find_package(METIS METIS METIS_DIR "include;Lib" "metis.h"
|
||||||
|
|||||||
@@ -1,4 +1,4 @@
|
|||||||
# Copyright (c) 2010-2025, Lawrence Livermore National Security, LLC. Produced
|
# Copyright (c) 2010-2022, Lawrence Livermore National Security, LLC. Produced
|
||||||
# at the Lawrence Livermore National Laboratory. All Rights reserved. See files
|
# at the Lawrence Livermore National Laboratory. All Rights reserved. See files
|
||||||
# LICENSE and NOTICE for details. LLNL-CODE-806117.
|
# LICENSE and NOTICE for details. LLNL-CODE-806117.
|
||||||
#
|
#
|
||||||
|
|||||||
@@ -1,4 +1,4 @@
|
|||||||
# Copyright (c) 2010-2025, Lawrence Livermore National Security, LLC. Produced
|
# Copyright (c) 2010-2022, Lawrence Livermore National Security, LLC. Produced
|
||||||
# at the Lawrence Livermore National Laboratory. All Rights reserved. See files
|
# at the Lawrence Livermore National Laboratory. All Rights reserved. See files
|
||||||
# LICENSE and NOTICE for details. LLNL-CODE-806117.
|
# LICENSE and NOTICE for details. LLNL-CODE-806117.
|
||||||
#
|
#
|
||||||
|
|||||||
@@ -1,27 +0,0 @@
|
|||||||
# Copyright (c) 2010-2025, Lawrence Livermore National Security, LLC. Produced
|
|
||||||
# at the Lawrence Livermore National Laboratory. All Rights reserved. See files
|
|
||||||
# LICENSE and NOTICE for details. LLNL-CODE-806117.
|
|
||||||
#
|
|
||||||
# This file is part of the MFEM library. For more information and source code
|
|
||||||
# availability visit https://mfem.org.
|
|
||||||
#
|
|
||||||
# MFEM is free software; you can redistribute it and/or modify it under the
|
|
||||||
# terms of the BSD-3 license. We welcome feedback and contributions, see file
|
|
||||||
# CONTRIBUTING.md for details.
|
|
||||||
|
|
||||||
# Defines the following variables:
|
|
||||||
# - MKL_PARDISO_FOUND
|
|
||||||
# - MKL_PARDISO_LIBRARIES
|
|
||||||
# - MKL_PARDISO_INCLUDE_DIRS
|
|
||||||
|
|
||||||
if(NOT MKL_LIBRARY_DIR)
|
|
||||||
message(WARNING "Using default MKL library path. Double check the variable MKL_LIBRARY_DIR")
|
|
||||||
set(MKL_LIBRARY_DIR "lib/intel64")
|
|
||||||
endif()
|
|
||||||
|
|
||||||
include(MfemCmakeUtilities)
|
|
||||||
mfem_find_package(MKL_PARDISO MKL_PARDISO
|
|
||||||
MKL_PARDISO_DIR "include" mkl_pardiso.h ${MKL_LIBRARY_DIR} mkl_core
|
|
||||||
"Paths to headers required by MKL Pardiso." "Libraries required by MKL PARDISO."
|
|
||||||
ADD_COMPONENT MKL_LP64 "include" "" ${MKL_LIBRARY_DIR} mkl_intel_lp64
|
|
||||||
ADD_COMPONENT MKL_SEQUENTIAL "include" "" ${MKL_LIBRARY_DIR} mkl_sequential)
|
|
||||||
@@ -1,4 +1,4 @@
|
|||||||
# Copyright (c) 2010-2025, Lawrence Livermore National Security, LLC. Produced
|
# Copyright (c) 2010-2022, Lawrence Livermore National Security, LLC. Produced
|
||||||
# at the Lawrence Livermore National Laboratory. All Rights reserved. See files
|
# at the Lawrence Livermore National Laboratory. All Rights reserved. See files
|
||||||
# LICENSE and NOTICE for details. LLNL-CODE-806117.
|
# LICENSE and NOTICE for details. LLNL-CODE-806117.
|
||||||
#
|
#
|
||||||
|
|||||||
@@ -1,4 +1,4 @@
|
|||||||
# Copyright (c) 2010-2025, Lawrence Livermore National Security, LLC. Produced
|
# Copyright (c) 2010-2022, Lawrence Livermore National Security, LLC. Produced
|
||||||
# at the Lawrence Livermore National Laboratory. All Rights reserved. See files
|
# at the Lawrence Livermore National Laboratory. All Rights reserved. See files
|
||||||
# LICENSE and NOTICE for details. LLNL-CODE-806117.
|
# LICENSE and NOTICE for details. LLNL-CODE-806117.
|
||||||
#
|
#
|
||||||
@@ -11,39 +11,13 @@
|
|||||||
|
|
||||||
# Sets the following variables:
|
# Sets the following variables:
|
||||||
# - MUMPS_FOUND
|
# - MUMPS_FOUND
|
||||||
# - MUMPS_LIBRARIES
|
|
||||||
# - MUMPS_INCLUDE_DIRS
|
# - MUMPS_INCLUDE_DIRS
|
||||||
# - MUMPS_VERSION
|
# - MUMPS_LIBRARIES
|
||||||
|
|
||||||
include(MfemCmakeUtilities)
|
include(MfemCmakeUtilities)
|
||||||
|
|
||||||
# Toggle which precision of MUMPS to use depending on the precision of MFEM.
|
|
||||||
if (MFEM_USE_DOUBLE)
|
|
||||||
set(_mumps_header dmumps_c.h)
|
|
||||||
set(_mumps_lib dmumps)
|
|
||||||
elseif(MFEM_USE_SINGLE)
|
|
||||||
set(_mumps_header smumps_c.h)
|
|
||||||
set(_mumps_lib smumps)
|
|
||||||
endif()
|
|
||||||
|
|
||||||
mfem_find_package(MUMPS MUMPS MUMPS_DIR
|
mfem_find_package(MUMPS MUMPS MUMPS_DIR
|
||||||
"include" ${_mumps_header} "lib" ${_mumps_lib}
|
"include" dmumps_c.h "lib" dmumps
|
||||||
"Paths to headers required by MUMPS."
|
"Paths to headers required by MUMPS."
|
||||||
"Libraries required by MUMPS."
|
"Libraries required by MUMPS."
|
||||||
ADD_COMPONENT mumps_common "include" ${_mumps_header} "lib" mumps_common
|
ADD_COMPONENT mumps_common "include" dmumps_c.h "lib" mumps_common
|
||||||
ADD_COMPONENT pord "include" ${_mumps_header} "lib" pord)
|
ADD_COMPONENT pord "include" dmumps_c.h "lib" pord)
|
||||||
|
|
||||||
if (MUMPS_FOUND AND (NOT MUMPS_VERSION))
|
|
||||||
try_run(MUMPS_VERSION_RUN_RESULT MUMPS_VERSION_COMPILE_RESULT
|
|
||||||
${CMAKE_CURRENT_BINARY_DIR}/config
|
|
||||||
${CMAKE_CURRENT_SOURCE_DIR}/config/get_mumps_version.cpp
|
|
||||||
CMAKE_FLAGS -DINCLUDE_DIRECTORIES:STRING=${MUMPS_INCLUDE_DIRS}
|
|
||||||
RUN_OUTPUT_VARIABLE MUMPS_VERSION_OUTPUT)
|
|
||||||
if ((MUMPS_VERSION_RUN_RESULT EQUAL 0) AND MUMPS_VERSION_OUTPUT)
|
|
||||||
string(STRIP "${MUMPS_VERSION_OUTPUT}" MUMPS_VERSION)
|
|
||||||
set(MUMPS_VERSION ${MUMPS_VERSION} CACHE STRING "MUMPS version." FORCE)
|
|
||||||
message(STATUS "Found MUMPS version ${MUMPS_VERSION}")
|
|
||||||
else()
|
|
||||||
message(FATAL_ERROR "Unable to determine MUMPS version.")
|
|
||||||
endif()
|
|
||||||
endif()
|
|
||||||
|
|||||||
@@ -1,4 +1,4 @@
|
|||||||
# Copyright (c) 2010-2025, Lawrence Livermore National Security, LLC. Produced
|
# Copyright (c) 2010-2022, Lawrence Livermore National Security, LLC. Produced
|
||||||
# at the Lawrence Livermore National Laboratory. All Rights reserved. See files
|
# at the Lawrence Livermore National Laboratory. All Rights reserved. See files
|
||||||
# LICENSE and NOTICE for details. LLNL-CODE-806117.
|
# LICENSE and NOTICE for details. LLNL-CODE-806117.
|
||||||
#
|
#
|
||||||
@@ -10,13 +10,11 @@
|
|||||||
# CONTRIBUTING.md for details.
|
# CONTRIBUTING.md for details.
|
||||||
|
|
||||||
# Defines the following variables:
|
# Defines the following variables:
|
||||||
# - TRIBOL_FOUND
|
# - MESQUITE_FOUND
|
||||||
# - TRIBOL_LIBRARIES
|
# - MESQUITE_LIBRARIES
|
||||||
# - TRIBOL_INCLUDE_DIRS
|
# - MESQUITE_INCLUDE_DIRS
|
||||||
|
|
||||||
include(MfemCmakeUtilities)
|
include(MfemCmakeUtilities)
|
||||||
# Note: components are enabled based on the find_package() parameters.
|
mfem_find_package(Mesquite MESQUITE MESQUITE_DIR
|
||||||
mfem_find_package(Tribol TRIBOL TRIBOL_DIR "include" tribol/config.hpp "lib" tribol
|
"include" "Mesquite_all_headers.hpp" "lib" "mesquite"
|
||||||
"Paths to headers required by Tribol." "Libraries required by Tribol."
|
"Paths to headers required by Mesquite." "Libraries required by Mesquite.")
|
||||||
ADD_COMPONENT redecomp
|
|
||||||
"include" redecomp/redecomp.hpp "lib" redecomp)
|
|
||||||
@@ -1,4 +1,4 @@
|
|||||||
# Copyright (c) 2010-2025, Lawrence Livermore National Security, LLC. Produced
|
# Copyright (c) 2010-2022, Lawrence Livermore National Security, LLC. Produced
|
||||||
# at the Lawrence Livermore National Laboratory. All Rights reserved. See files
|
# at the Lawrence Livermore National Laboratory. All Rights reserved. See files
|
||||||
# LICENSE and NOTICE for details. LLNL-CODE-806117.
|
# LICENSE and NOTICE for details. LLNL-CODE-806117.
|
||||||
#
|
#
|
||||||
@@ -14,38 +14,21 @@
|
|||||||
# - NETCDF_LIBRARIES
|
# - NETCDF_LIBRARIES
|
||||||
# - NETCDF_INCLUDE_DIRS
|
# - NETCDF_INCLUDE_DIRS
|
||||||
|
|
||||||
# Suppress warning about HDF5_ROOT being set
|
|
||||||
if (POLICY CMP0074)
|
|
||||||
cmake_policy(SET CMP0074 NEW)
|
|
||||||
endif()
|
|
||||||
|
|
||||||
include(MfemCmakeUtilities)
|
include(MfemCmakeUtilities)
|
||||||
|
|
||||||
# FindHDF5.cmake uses HDF5_ROOT, so we "translate" from the MFEM convention
|
# FindHDF5.cmake uses HDF5_ROOT, so we "translate" from the MFEM convention
|
||||||
# (Needed in some cases, e.g. when HDF5_TARGET_NAMES is set and MFEM's
|
|
||||||
# FindHDF5.cmake is not used.)
|
|
||||||
set(HDF5_ROOT ${HDF5_DIR} CACHE PATH "")
|
set(HDF5_ROOT ${HDF5_DIR} CACHE PATH "")
|
||||||
|
|
||||||
# We need to guard against the case where HDF5 was already found but without
|
# We need to guard against the case where HDF5 was already found but without
|
||||||
# the HL extensions (in which case mfem_find_package will treat the package
|
# the HL extensions (in which case mfem_find_package will treat the package
|
||||||
# as already having been found), so we reset the variable to force FindHDF5.cmake
|
# as already having been found), so we reset the variable to force FindHDF5.cmake
|
||||||
# to be called for a second time
|
# to be called for a second time
|
||||||
set(HDF5_FOUND OFF)
|
set(HDF5_FOUND OFF)
|
||||||
enable_language(C) # FindHDF5.cmake uses the C compiler
|
enable_language(C) # FindHDF5.cmake uses the C compiler
|
||||||
|
|
||||||
mfem_find_package(NetCDF NETCDF NETCDF_DIR "include" netcdf.h "lib" netcdf
|
mfem_find_package(NetCDF NETCDF NETCDF_DIR "include" netcdf.h "lib" netcdf
|
||||||
"Paths to headers required by NetCDF." "Libraries required by NetCDF.")
|
"Paths to headers required by NetCDF." "Libraries required by NetCDF.")
|
||||||
|
|
||||||
# The HL extension libraries are in a separate variable and must precede
|
# The HL extension libraries are in a separate variable and must precede
|
||||||
# the "regular" hdf5 library, as hdf5_hl depends on hdf5
|
# the "regular" hdf5 library, as hdf5_hl depends on hdf5
|
||||||
# The netcdf library will always be the first element of NETCDF_LIBRARIES
|
# The netcdf library will always be the first element of NETCDF_LIBRARIES
|
||||||
# and we need to insert after that library but before the hdf5 library, so
|
# and we need to insert after that library but before the hdf5 library, so
|
||||||
# position 1 is used
|
# position 1 is used
|
||||||
# (Needed in some cases, e.g. when HDF5_TARGET_NAMES is set and MFEM's
|
list(INSERT NETCDF_LIBRARIES 1 ${HDF5_C_LIBRARY_hdf5_hl})
|
||||||
# FindHDF5.cmake is not used.)
|
|
||||||
if (HDF5_C_LIBRARY_hdf5_hl)
|
|
||||||
list(INSERT NETCDF_LIBRARIES 1 ${HDF5_C_LIBRARY_hdf5_hl})
|
|
||||||
if (NOT NetCDF_FIND_QUIETLY)
|
|
||||||
message(STATUS "Updated NetCDF libraries: ${NETCDF_LIBRARIES}")
|
|
||||||
endif()
|
|
||||||
endif()
|
|
||||||
|
|||||||
@@ -1,4 +1,4 @@
|
|||||||
# Copyright (c) 2010-2025, Lawrence Livermore National Security, LLC. Produced
|
# Copyright (c) 2010-2022, Lawrence Livermore National Security, LLC. Produced
|
||||||
# at the Lawrence Livermore National Laboratory. All Rights reserved. See files
|
# at the Lawrence Livermore National Laboratory. All Rights reserved. See files
|
||||||
# LICENSE and NOTICE for details. LLNL-CODE-806117.
|
# LICENSE and NOTICE for details. LLNL-CODE-806117.
|
||||||
#
|
#
|
||||||
|
|||||||
@@ -1,4 +1,4 @@
|
|||||||
# Copyright (c) 2010-2025, Lawrence Livermore National Security, LLC. Produced
|
# Copyright (c) 2010-2022, Lawrence Livermore National Security, LLC. Produced
|
||||||
# at the Lawrence Livermore National Laboratory. All Rights reserved. See files
|
# at the Lawrence Livermore National Laboratory. All Rights reserved. See files
|
||||||
# LICENSE and NOTICE for details. LLNL-CODE-806117.
|
# LICENSE and NOTICE for details. LLNL-CODE-806117.
|
||||||
#
|
#
|
||||||
|
|||||||
@@ -1,4 +1,4 @@
|
|||||||
# Copyright (c) 2010-2025, Lawrence Livermore National Security, LLC. Produced
|
# Copyright (c) 2010-2022, Lawrence Livermore National Security, LLC. Produced
|
||||||
# at the Lawrence Livermore National Laboratory. All Rights reserved. See files
|
# at the Lawrence Livermore National Laboratory. All Rights reserved. See files
|
||||||
# LICENSE and NOTICE for details. LLNL-CODE-806117.
|
# LICENSE and NOTICE for details. LLNL-CODE-806117.
|
||||||
#
|
#
|
||||||
|
|||||||
@@ -117,8 +117,8 @@ macro (MULTIPASS_SOURCE_RUNS includes libraries source runs language)
|
|||||||
math (EXPR _tmp "${MULTIPASS_TEST_COUNT} + 1") # Why can't I add to a cache variable?
|
math (EXPR _tmp "${MULTIPASS_TEST_COUNT} + 1") # Why can't I add to a cache variable?
|
||||||
set (MULTIPASS_TEST_COUNT ${_tmp} CACHE INTERNAL "Unique test ID")
|
set (MULTIPASS_TEST_COUNT ${_tmp} CACHE INTERNAL "Unique test ID")
|
||||||
set (testname MULTIPASS_TEST_${MULTIPASS_TEST_COUNT}_${runs})
|
set (testname MULTIPASS_TEST_${MULTIPASS_TEST_COUNT}_${runs})
|
||||||
set (CMAKE_REQUIRED_INCLUDES ${includes} ${MPI_${language}_INCLUDE_PATH})
|
set (CMAKE_REQUIRED_INCLUDES ${includes})
|
||||||
set (CMAKE_REQUIRED_LIBRARIES ${libraries} ${MPI_${language}_LIBRARIES})
|
set (CMAKE_REQUIRED_LIBRARIES ${libraries})
|
||||||
if(${language} STREQUAL "C")
|
if(${language} STREQUAL "C")
|
||||||
check_c_source_runs ("${source}" ${testname})
|
check_c_source_runs ("${source}" ${testname})
|
||||||
elseif(${language} STREQUAL "CXX")
|
elseif(${language} STREQUAL "CXX")
|
||||||
|
|||||||
@@ -1,4 +1,4 @@
|
|||||||
# Copyright (c) 2010-2025, Lawrence Livermore National Security, LLC. Produced
|
# Copyright (c) 2010-2022, Lawrence Livermore National Security, LLC. Produced
|
||||||
# at the Lawrence Livermore National Laboratory. All Rights reserved. See files
|
# at the Lawrence Livermore National Laboratory. All Rights reserved. See files
|
||||||
# LICENSE and NOTICE for details. LLNL-CODE-806117.
|
# LICENSE and NOTICE for details. LLNL-CODE-806117.
|
||||||
#
|
#
|
||||||
|
|||||||
@@ -1,4 +1,4 @@
|
|||||||
# Copyright (c) 2010-2025, Lawrence Livermore National Security, LLC. Produced
|
# Copyright (c) 2010-2022, Lawrence Livermore National Security, LLC. Produced
|
||||||
# at the Lawrence Livermore National Laboratory. All Rights reserved. See files
|
# at the Lawrence Livermore National Laboratory. All Rights reserved. See files
|
||||||
# LICENSE and NOTICE for details. LLNL-CODE-806117.
|
# LICENSE and NOTICE for details. LLNL-CODE-806117.
|
||||||
#
|
#
|
||||||
@@ -14,27 +14,17 @@
|
|||||||
# - RAJA_LIBRARIES
|
# - RAJA_LIBRARIES
|
||||||
# - RAJA_INCLUDE_DIRS
|
# - RAJA_INCLUDE_DIRS
|
||||||
|
|
||||||
if (RAJA_FOUND)
|
include(MfemCmakeUtilities)
|
||||||
return()
|
mfem_find_package(RAJA RAJA RAJA_DIR "include" "RAJA/RAJA.hpp" "lib" "RAJA"
|
||||||
|
"Paths to headers required by RAJA." "Libraries required by RAJA.")
|
||||||
|
|
||||||
|
if (NOT RAJA_CONFIG_CMAKE)
|
||||||
|
set(RAJA_CONFIG_CMAKE "${RAJA_DIR}/share/raja/cmake/raja-config.cmake")
|
||||||
endif()
|
endif()
|
||||||
message(STATUS "Looking for RAJA ...")
|
if (EXISTS "${RAJA_CONFIG_CMAKE}")
|
||||||
if (RAJA_DIR)
|
include("${RAJA_CONFIG_CMAKE}")
|
||||||
message(STATUS " in RAJA_DIR = ${RAJA_DIR}")
|
if (ENABLE_CUDA AND NOT MFEM_USE_CUDA)
|
||||||
find_package(RAJA CONFIG NO_DEFAULT_PATH PATHS "${RAJA_DIR}")
|
message(FATAL_ERROR
|
||||||
endif()
|
"RAJA is built with CUDA: MFEM_USE_CUDA=YES is required")
|
||||||
if (NOT RAJA_FOUND)
|
|
||||||
message(STATUS " in standard CMake locations")
|
|
||||||
find_package(RAJA CONFIG)
|
|
||||||
endif()
|
|
||||||
if (RAJA_FOUND)
|
|
||||||
set(RAJA_LIBRARIES "RAJA" CACHE STRING "RAJA imported target." FORCE)
|
|
||||||
set(RAJA_INCLUDE_DIRS "" CACHE STRING "RAJA include dirs (not used)" FORCE)
|
|
||||||
message(STATUS
|
|
||||||
"Found RAJA target: ${RAJA_LIBRARIES} (version: ${RAJA_VERSION})")
|
|
||||||
else()
|
|
||||||
set(msg STATUS)
|
|
||||||
if (RAJA_FIND_REQUIRED)
|
|
||||||
set(msg FATAL_ERROR)
|
|
||||||
endif()
|
endif()
|
||||||
message(${msg} "RAJA not found. Please set RAJA_DIR to the RAJA prefix.")
|
|
||||||
endif()
|
endif()
|
||||||
|
|||||||
@@ -1,4 +1,4 @@
|
|||||||
# Copyright (c) 2010-2025, Lawrence Livermore National Security, LLC. Produced
|
# Copyright (c) 2010-2022, Lawrence Livermore National Security, LLC. Produced
|
||||||
# at the Lawrence Livermore National Laboratory. All Rights reserved. See files
|
# at the Lawrence Livermore National Laboratory. All Rights reserved. See files
|
||||||
# LICENSE and NOTICE for details. LLNL-CODE-806117.
|
# LICENSE and NOTICE for details. LLNL-CODE-806117.
|
||||||
#
|
#
|
||||||
@@ -14,7 +14,7 @@
|
|||||||
# - SLEPC_INCLUDE_DIRS
|
# - SLEPC_INCLUDE_DIRS
|
||||||
# - SLEPC_LIBRARIES
|
# - SLEPC_LIBRARIES
|
||||||
|
|
||||||
set(SLEPc_REQUIRED_PACKAGES "PETSC" "MPI" CACHE STRING
|
set(SLEPc_REQUIRED_PACKAGES "PETSC" CACHE STRING
|
||||||
"Additional packages required by SLEPc")
|
"Additional packages required by SLEPc")
|
||||||
|
|
||||||
include(MfemCmakeUtilities)
|
include(MfemCmakeUtilities)
|
||||||
|
|||||||
@@ -1,4 +1,4 @@
|
|||||||
# Copyright (c) 2010-2025, Lawrence Livermore National Security, LLC. Produced
|
# Copyright (c) 2010-2022, Lawrence Livermore National Security, LLC. Produced
|
||||||
# at the Lawrence Livermore National Laboratory. All Rights reserved. See files
|
# at the Lawrence Livermore National Laboratory. All Rights reserved. See files
|
||||||
# LICENSE and NOTICE for details. LLNL-CODE-806117.
|
# LICENSE and NOTICE for details. LLNL-CODE-806117.
|
||||||
#
|
#
|
||||||
|
|||||||
@@ -1,4 +1,4 @@
|
|||||||
# Copyright (c) 2010-2025, Lawrence Livermore National Security, LLC. Produced
|
# Copyright (c) 2010-2022, Lawrence Livermore National Security, LLC. Produced
|
||||||
# at the Lawrence Livermore National Laboratory. All Rights reserved. See files
|
# at the Lawrence Livermore National Laboratory. All Rights reserved. See files
|
||||||
# LICENSE and NOTICE for details. LLNL-CODE-806117.
|
# LICENSE and NOTICE for details. LLNL-CODE-806117.
|
||||||
#
|
#
|
||||||
@@ -22,8 +22,8 @@ mfem_find_package(SUNDIALS SUNDIALS SUNDIALS_DIR
|
|||||||
"include" nvector/nvector_serial.h "lib" sundials_nvecserial
|
"include" nvector/nvector_serial.h "lib" sundials_nvecserial
|
||||||
ADD_COMPONENT NVector_Cuda
|
ADD_COMPONENT NVector_Cuda
|
||||||
"include" nvector/nvector_cuda.h "lib" sundials_nveccuda
|
"include" nvector/nvector_cuda.h "lib" sundials_nveccuda
|
||||||
ADD_COMPONENT NVector_Hip
|
ADD_COMPONENT NVector_ParHyp
|
||||||
"include" nvector/nvector_hip.h "lib" sundials_nvechip
|
"include" nvector/nvector_parhyp.h "lib" sundials_nvecparhyp
|
||||||
ADD_COMPONENT NVector_Parallel
|
ADD_COMPONENT NVector_Parallel
|
||||||
"include" nvector/nvector_parallel.h "lib" sundials_nvecparallel
|
"include" nvector/nvector_parallel.h "lib" sundials_nvecparallel
|
||||||
ADD_COMPONENT NVector_MPIPlusX
|
ADD_COMPONENT NVector_MPIPlusX
|
||||||
@@ -31,5 +31,4 @@ mfem_find_package(SUNDIALS SUNDIALS SUNDIALS_DIR
|
|||||||
ADD_COMPONENT CVODE "include" cvode/cvode.h "lib" sundials_cvode
|
ADD_COMPONENT CVODE "include" cvode/cvode.h "lib" sundials_cvode
|
||||||
ADD_COMPONENT CVODES "include" cvodes/cvodes.h "lib" sundials_cvodes
|
ADD_COMPONENT CVODES "include" cvodes/cvodes.h "lib" sundials_cvodes
|
||||||
ADD_COMPONENT ARKODE "include" arkode/arkode.h "lib" sundials_arkode
|
ADD_COMPONENT ARKODE "include" arkode/arkode.h "lib" sundials_arkode
|
||||||
ADD_COMPONENT KINSOL "include" kinsol/kinsol.h "lib" sundials_kinsol
|
ADD_COMPONENT KINSOL "include" kinsol/kinsol.h "lib" sundials_kinsol)
|
||||||
ADD_COMPONENT Core "include" sundials/sundials_core.h "lib" sundials_core)
|
|
||||||
|
|||||||
@@ -1,4 +1,4 @@
|
|||||||
# Copyright (c) 2010-2025, Lawrence Livermore National Security, LLC. Produced
|
# Copyright (c) 2010-2022, Lawrence Livermore National Security, LLC. Produced
|
||||||
# at the Lawrence Livermore National Laboratory. All Rights reserved. See files
|
# at the Lawrence Livermore National Laboratory. All Rights reserved. See files
|
||||||
# LICENSE and NOTICE for details. LLNL-CODE-806117.
|
# LICENSE and NOTICE for details. LLNL-CODE-806117.
|
||||||
#
|
#
|
||||||
|
|||||||
@@ -1,4 +1,4 @@
|
|||||||
# Copyright (c) 2010-2025, Lawrence Livermore National Security, LLC. Produced
|
# Copyright (c) 2010-2022, Lawrence Livermore National Security, LLC. Produced
|
||||||
# at the Lawrence Livermore National Laboratory. All Rights reserved. See files
|
# at the Lawrence Livermore National Laboratory. All Rights reserved. See files
|
||||||
# LICENSE and NOTICE for details. LLNL-CODE-806117.
|
# LICENSE and NOTICE for details. LLNL-CODE-806117.
|
||||||
#
|
#
|
||||||
|
|||||||
@@ -1,4 +1,4 @@
|
|||||||
# Copyright (c) 2010-2025, Lawrence Livermore National Security, LLC. Produced
|
# Copyright (c) 2010-2022, Lawrence Livermore National Security, LLC. Produced
|
||||||
# at the Lawrence Livermore National Laboratory. All Rights reserved. See files
|
# at the Lawrence Livermore National Laboratory. All Rights reserved. See files
|
||||||
# LICENSE and NOTICE for details. LLNL-CODE-806117.
|
# LICENSE and NOTICE for details. LLNL-CODE-806117.
|
||||||
#
|
#
|
||||||
|
|||||||
@@ -1,4 +1,4 @@
|
|||||||
# Copyright (c) 2010-2025, Lawrence Livermore National Security, LLC. Produced
|
# Copyright (c) 2010-2022, Lawrence Livermore National Security, LLC. Produced
|
||||||
# at the Lawrence Livermore National Laboratory. All Rights reserved. See files
|
# at the Lawrence Livermore National Laboratory. All Rights reserved. See files
|
||||||
# LICENSE and NOTICE for details. LLNL-CODE-806117.
|
# LICENSE and NOTICE for details. LLNL-CODE-806117.
|
||||||
#
|
#
|
||||||
@@ -14,23 +14,6 @@
|
|||||||
# - UMPIRE_LIBRARIES
|
# - UMPIRE_LIBRARIES
|
||||||
# - UMPIRE_INCLUDE_DIRS
|
# - UMPIRE_INCLUDE_DIRS
|
||||||
|
|
||||||
if (NOT umpire_ROOT AND UMPIRE_DIR)
|
include(MfemCmakeUtilities)
|
||||||
set(umpire_ROOT ${UMPIRE_DIR})
|
mfem_find_package(UMPIRE UMPIRE UMPIRE_DIR "include" "umpire/Umpire.hpp" "lib" "umpire"
|
||||||
endif()
|
"Paths to headers required by UMPIRE." "Libraries required by UMPIRE.")
|
||||||
message(STATUS "Looking for UMPIRE ...")
|
|
||||||
message(STATUS " in UMPIRE_DIR = ${UMPIRE_DIR}")
|
|
||||||
message(STATUS " umpire_ROOT = ${umpire_ROOT}")
|
|
||||||
find_package(umpire CONFIG)
|
|
||||||
set(UMPIRE_FOUND ${umpire_FOUND})
|
|
||||||
set(UMPIRE_LIBRARIES "umpire")
|
|
||||||
if (UMPIRE_FOUND)
|
|
||||||
message(STATUS
|
|
||||||
"Found UMPIRE target: ${UMPIRE_LIBRARIES} (version: ${umpire_VERSION})")
|
|
||||||
else()
|
|
||||||
set(msg STATUS)
|
|
||||||
if (UMPIRE_FIND_REQUIRED)
|
|
||||||
set(msg FATAL_ERROR)
|
|
||||||
endif()
|
|
||||||
message(${msg}
|
|
||||||
"UMPIRE not found. Please set UMPIRE_DIR to the install prefix.")
|
|
||||||
endif()
|
|
||||||
|
|||||||
@@ -1,4 +1,4 @@
|
|||||||
# Copyright (c) 2010-2025, Lawrence Livermore National Security, LLC. Produced
|
# Copyright (c) 2010-2022, Lawrence Livermore National Security, LLC. Produced
|
||||||
# at the Lawrence Livermore National Laboratory. All Rights reserved. See files
|
# at the Lawrence Livermore National Laboratory. All Rights reserved. See files
|
||||||
# LICENSE and NOTICE for details. LLNL-CODE-806117.
|
# LICENSE and NOTICE for details. LLNL-CODE-806117.
|
||||||
#
|
#
|
||||||
|
|||||||
@@ -1,4 +1,4 @@
|
|||||||
# Copyright (c) 2010-2025, Lawrence Livermore National Security, LLC. Produced
|
# Copyright (c) 2010-2022, Lawrence Livermore National Security, LLC. Produced
|
||||||
# at the Lawrence Livermore National Laboratory. All Rights reserved. See files
|
# at the Lawrence Livermore National Laboratory. All Rights reserved. See files
|
||||||
# LICENSE and NOTICE for details. LLNL-CODE-806117.
|
# LICENSE and NOTICE for details. LLNL-CODE-806117.
|
||||||
#
|
#
|
||||||
|
|||||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user