Wrap SuperLU_DIST solver options #39264
Workflow file for this run
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| name: CI | |
| on: | |
| push: | |
| branches: | |
| - release | |
| tags: | |
| - "v*" | |
| pull_request: | |
| branches: | |
| - main | |
| merge_group: | |
| branches: | |
| - main | |
| workflow_dispatch: | |
| jobs: | |
| lint: | |
| runs-on: ubuntu-latest | |
| name: Lint | |
| steps: | |
| - name: Checkout DOLFINx | |
| uses: actions/checkout@v6 | |
| - name: Set up Python | |
| uses: actions/setup-python@v6 | |
| with: | |
| python-version: '3.12' | |
| - name: Load environment variables | |
| run: cat .github/workflows/fenicsx-refs.env >> $GITHUB_ENV | |
| - name: Install linting tools | |
| run: pip install clang-format cmake-format[YAML] mypy ruff | |
| - name: ruff .py files in C++ code | |
| run: | | |
| cd cpp/ | |
| ruff check . | |
| ruff format --check . | |
| - name: ruff Python interface checks | |
| run: | | |
| cd python/ | |
| ruff check . | |
| ruff format --check . | |
| - name: mypy checks | |
| run: | | |
| cd python/ | |
| mypy dolfinx | |
| mypy demo | |
| mypy test | |
| - name: clang-format C++ checks | |
| run: | | |
| cd cpp | |
| clang-format --version | |
| find . -type f \( -name "*.cpp" -o -name "*.h" \) | xargs clang-format --dry-run --Werror | |
| - name: clang-format Python binding checks | |
| run: | | |
| cd python/dolfinx/wrappers | |
| clang-format --version | |
| find . -type f \( -name "*.cpp" -o -name "*.h" \) | xargs clang-format --dry-run --Werror | |
| - name: cmake-format (non-blocking) | |
| continue-on-error: true | |
| run: | | |
| find . -type f \( -name "*.cmake" -o -name "*.cmake.in" -o -name "CMakeLists.txt" \) | xargs cmake-format --check | |
| ccpp-build: | |
| runs-on: ubuntu-24.04 | |
| needs: [lint] | |
| env: | |
| OMPI_ALLOW_RUN_AS_ROOT: 1 | |
| OMPI_ALLOW_RUN_AS_ROOT_CONFIRM: 1 | |
| PRTE_MCA_rmaps_default_mapping_policy: :oversubscribe # Newer OpenMPI | |
| OMPI_MCA_rmaps_base_oversubscribe: true # Older OpenMPI | |
| PYTEST_ADDOPTS: "-W error" | |
| name: Build and test | |
| steps: | |
| - uses: actions/checkout@v6 | |
| - name: Load environment variables | |
| run: cat .github/workflows/fenicsx-refs.env >> $GITHUB_ENV | |
| - name: Install dependencies | |
| run: | | |
| sudo apt-get update | |
| sudo apt-get install catch2 cmake g++ libblas-dev libboost-dev \ | |
| libhdf5-mpi-dev liblapack-dev libparmetis-dev libpugixml-dev \ | |
| libspdlog-dev libsuperlu-dist-dev mpi-default-dev ninja-build pkg-config | |
| - name: Set up Python | |
| uses: actions/setup-python@v6 | |
| with: | |
| python-version: "3.12" | |
| - name: Install Python build dependencies | |
| working-directory: python | |
| run: | | |
| pip install scikit-build-core setuptools | |
| python -m scikit_build_core.build requires | python -c "import sys, json; print(' '.join(json.load(sys.stdin)))" | xargs pip install | |
| - name: Install FEniCS Python components | |
| run: | | |
| pip install git+https://github.com/${{ env.ufl_repository }}.git@${{ env.ufl_ref }} | |
| pip install -Ccmake.build-type="Developer" --no-build-isolation git+https://github.com/${{ env.basix_repository }}.git@${{ env.basix_ref }} | |
| pip install --no-build-isolation git+https://github.com/${{ env.ffcx_repository }}.git@${{ env.ffcx_ref }} | |
| - name: Configure (C++) | |
| working-directory: cpp | |
| run: > | |
| cmake -B build -S . | |
| -Werror=dev | |
| --warn-uninitialized | |
| -G Ninja | |
| -DCMAKE_BUILD_TYPE=Developer | |
| -DBUILD_TESTING=true | |
| -DDOLFINX_ENABLE_PETSC=false | |
| -DDOLFINX_ENABLE_SUPERLU_DIST=true | |
| -DDOLFINX_ENABLE_PARMETIS=true | |
| - name: Build and install (C++) | |
| working-directory: cpp/build | |
| run: | | |
| cmake --build . | |
| sudo cmake --install . | |
| - name: Run tests via target (C++, serial and parallel) | |
| working-directory: cpp/build | |
| run: cmake --build . --target test | |
| - name: Build Python interface | |
| run: | | |
| pip install --check-build-dependencies --no-build-isolation --config-settings=cmake.build-type="Developer" 'python/[test]' | |
| python -c "from mpi4py import MPI; import dolfinx; assert not dolfinx.has_petsc; assert not dolfinx.has_petsc4py; assert dolfinx.has_superlu_dist" | |
| - name: Run mypy # Use a venv to avoid NumPy upgrades that are incompatible with numba | |
| working-directory: python | |
| run: | | |
| python -m venv mypy-env | |
| . ./mypy-env/bin/activate | |
| pip install mypy types-cffi scipy-stubs | |
| mypy -p dolfinx | |
| # mypy test | |
| # mypy demo | |
| - name: Install gmsh and pyvista (and dependencies) | |
| run: | | |
| sudo apt-get install libglu1-mesa libgl1 libxrender1 libxcursor1 libxft2 libxinerama1 | |
| sudo apt-get install libegl1 | |
| pip install gmsh pyvista | |
| - name: Run demos (Python, serial) | |
| run: | | |
| pip install pytest-xdist | |
| python -m pytest -n auto -m serial --durations=10 python/demo/test.py | |
| - name: Run demos (Python, MPI, np=3) | |
| run: python -m pytest -m mpi --num-proc=3 python/demo/test.py | |
| - name: Run tests (Python, serial) | |
| run: python -m pytest -n auto -m "not petsc4py and not adios2" python/test/unit | |
| - name: Run tests (Python, MPI, np=3) | |
| run: mpirun -np 3 python -m pytest -m "not petsc4py and not adios2" python/test/unit | |
| ccpp-build-with-petsc: | |
| runs-on: ubuntu-latest | |
| needs: [lint] | |
| strategy: | |
| matrix: | |
| petsc_arch: [linux-gnu-real32-32, linux-gnu-real64-32, linux-gnu-complex64-32, linux-gnu-complex128-32, linux-gnu-real64-64, linux-gnu-complex128-64] | |
| docker_image: ["ghcr.io/fenics/test-env:current-openmpi"] | |
| include: | |
| - docker_image: "ghcr.io/fenics/test-env:current-mpich" | |
| petsc_arch: linux-gnu-real64-32 | |
| - docker_image: "ghcr.io/fenics/test-env:current-mpich" | |
| petsc_arch: linux-gnu-complex128-32 | |
| container: ${{ matrix.docker_image }} | |
| env: | |
| PETSC_ARCH: ${{ matrix.petsc_arch }} | |
| OMPI_ALLOW_RUN_AS_ROOT: 1 | |
| OMPI_ALLOW_RUN_AS_ROOT_CONFIRM: 1 | |
| PRTE_MCA_rmaps_default_mapping_policy: :oversubscribe | |
| PYTEST_ADDOPTS: "-W error" | |
| name: Build and test (${{ matrix.petsc_arch }}, ${{ matrix.docker_image }}) | |
| steps: | |
| - uses: actions/checkout@v6 | |
| - name: Load environment variables | |
| run: cat .github/workflows/fenicsx-refs.env >> $GITHUB_ENV | |
| - name: Install Python build dependencies | |
| working-directory: python | |
| run: | | |
| pip install scikit-build-core | |
| python -m scikit_build_core.build requires | python -c "import sys, json; print(' '.join(json.load(sys.stdin)))" | xargs pip install | |
| - name: Install FEniCS Python components | |
| run: | | |
| pip install git+https://github.com/${{ env.ufl_repository }}.git@${{ env.ufl_ref }} | |
| pip install -Ccmake.build-type="Developer" --no-build-isolation git+https://github.com/${{ env.basix_repository }}.git@${{ env.basix_ref }} | |
| pip install --no-build-isolation git+https://github.com/${{ env.ffcx_repository }}.git@${{ env.ffcx_ref }} | |
| - name: Configure (C++) | |
| working-directory: cpp | |
| run: > | |
| cmake -B build -S . | |
| -Werror=dev | |
| --warn-uninitialized | |
| -G Ninja | |
| -DCMAKE_BUILD_TYPE=Developer | |
| -DDOLFINX_ENABLE_ADIOS2=true | |
| -DDOLFINX_ENABLE_KAHIP=true | |
| -DDOLFINX_ENABLE_PETSC=true | |
| -DDOLFINX_ENABLE_SCOTCH=true | |
| -DDOLFINX_ENABLE_SLEPC=true | |
| -DDOLFINX_ENABLE_PARMETIS=false | |
| - name: Build and install (C++) | |
| working-directory: cpp/build | |
| run: cmake --build . --target install | |
| - name: Build tests (C++, standalone) | |
| working-directory: cpp/test | |
| run: | | |
| cmake -B build -S . -DCMAKE_BUILD_TYPE=Developer -GNinja | |
| cmake --build build | |
| - name: Run tests (C++, serial) | |
| working-directory: cpp/test/build | |
| run: ctest -V --output-on-failure -R unittests_np_1 | |
| - name: Run tests (C++, MPI, np=3) | |
| working-directory: cpp/test/build | |
| run: ctest -V --output-on-failure -R unittests_np_3 | |
| - name: Build and run C++ regression tests (serial and MPI (np=2)) | |
| run: | | |
| cmake -Werror=dev --warn-uninitialized -G Ninja -DCMAKE_BUILD_TYPE=Developer -B build/demo/ -S cpp/demo/ | |
| cmake --build build/demo | |
| cd build/demo | |
| ctest -V -R demo -R serial | |
| ctest --output-on-failure -V -R demo -R mpi_2 | |
| - name: Build Python interface | |
| run: | | |
| pip install --check-build-dependencies --no-build-isolation --config-settings=cmake.build-type="Developer" 'python/[test]' | |
| python -c "from mpi4py import MPI; import dolfinx; assert dolfinx.has_adios2; assert dolfinx.has_kahip; assert not dolfinx.has_parmetis; assert dolfinx.has_petsc; assert dolfinx.has_petsc4py; assert dolfinx.has_ptscotch; assert dolfinx.has_slepc; assert dolfinx.has_complex_ufcx_kernels" | |
| - name: Run mypy # Use a venv to avoid NumPy upgrades that are incompatible with numba | |
| working-directory: python | |
| run: | | |
| python -m venv mypy-env | |
| . ./mypy-env/bin/activate | |
| pip install mypy types-cffi scipy-stubs | |
| mypy -p dolfinx | |
| # mypy test | |
| # mypy demo | |
| - name: Numpy version | |
| run: python -c "import numpy; print(numpy.__version__)" | |
| - name: Set default DOLFINx JIT options | |
| run: | | |
| mkdir -p ~/.config/dolfinx | |
| echo '{ "cffi_extra_compile_args": ["-g0", "-O0" ] }' > ~/.config/dolfinx/dolfinx_jit_options.json | |
| - name: Install pyvista (and dependencies) | |
| run: | | |
| apt-get install libegl1 libxrender1 | |
| pip install pyvista | |
| - name: Run demos (Python, serial) | |
| run: | | |
| pip install pytest-xdist | |
| python -m pytest -n auto -m serial --durations=10 python/demo/test.py | |
| - name: Run demos (Python, MPI (np=3)) | |
| run: python -m pytest -m mpi --num-proc=3 python/demo/test.py | |
| - name: Run Python unit tests (serial) | |
| run: python -m pytest -m "petsc4py or adios2" -n=auto --durations=50 python/test/unit/ | |
| - name: Run Python unit tests (MPI, np=3) | |
| run: mpirun -np 3 python -m pytest -m "petsc4py or adios2" python/test/unit/ | |
| build-and-publish-docs: | |
| runs-on: ubuntu-latest | |
| needs: [lint] | |
| container: "ghcr.io/fenics/test-env:current-openmpi" | |
| env: | |
| PETSC_ARCH: linux-gnu-real64-32 | |
| OMPI_ALLOW_RUN_AS_ROOT: 1 | |
| OMPI_ALLOW_RUN_AS_ROOT_CONFIRM: 1 | |
| PRTE_MCA_rmaps_default_mapping_policy: :oversubscribe | |
| name: Build and publish docs | |
| steps: | |
| - uses: actions/checkout@v6 | |
| - name: Load environment variables | |
| run: cat .github/workflows/fenicsx-refs.env >> $GITHUB_ENV | |
| - name: Install Python build dependencies | |
| working-directory: python | |
| run: | | |
| pip install scikit-build-core setuptools | |
| python -m scikit_build_core.build requires | python -c "import sys, json; print(' '.join(json.load(sys.stdin)))" | xargs pip install | |
| - name: Install FEniCS Python components | |
| run: | | |
| pip install git+https://github.com/${{ env.ufl_repository }}.git@${{ env.ufl_ref }} | |
| pip install --no-build-isolation git+https://github.com/${{ env.basix_repository }}.git@${{ env.basix_ref }} | |
| pip install --no-build-isolation git+https://github.com/${{ env.ffcx_repository }}.git@${{ env.ffcx_ref }} | |
| - name: Configure C++ | |
| run: | | |
| cmake -Werror=dev --warn-uninitialized -G Ninja -B build -S cpp/ | |
| cmake --build build | |
| cmake --install build | |
| - name: Build Python interface | |
| run: | | |
| pip install --check-build-dependencies --no-build-isolation 'python/[docs]' | |
| - name: Build C++ interface documentation | |
| run: | | |
| export DOLFINX_VERSION=`cmake -L build | grep DOXYGEN_DOLFINX_VERSION | cut -f2 -d "="` | |
| echo $DOLFINX_VERSION | |
| cd cpp/doc | |
| doxygen Doxyfile | |
| make html | |
| - name: Upload C++ Doxygen documentation artifact | |
| uses: actions/upload-artifact@v6 | |
| with: | |
| name: docs-cpp-doxygen | |
| path: cpp/doc/html | |
| retention-days: 2 | |
| - name: Upload C++ Sphinx documentation artifact | |
| uses: actions/upload-artifact@v6 | |
| with: | |
| name: docs-cpp-sphinx | |
| path: cpp/doc/build/html | |
| retention-days: 2 | |
| - name: Build Python interface documentation | |
| run: | | |
| cd python/doc | |
| python -m sphinx -W -b html source/ build/html/ | |
| - name: Upload Python documentation artifact | |
| uses: actions/upload-artifact@v6 | |
| with: | |
| name: docs-python | |
| path: python/doc/build/html | |
| retention-days: 2 | |
| - name: Checkout FEniCS/docs | |
| if: ${{ github.repository == 'FEniCS/dolfinx' && ( github.ref == 'refs/heads/main' || startsWith(github.ref, 'refs/tags/v') ) }} | |
| uses: actions/checkout@v6 | |
| with: | |
| repository: "FEniCS/docs" | |
| path: "docs" | |
| ssh-key: "${{ secrets.SSH_GITHUB_DOCS_PRIVATE_KEY }}" | |
| - name: Set version name | |
| if: ${{ github.repository == 'FEniCS/dolfinx' && ( github.ref == 'refs/heads/main' || startsWith(github.ref, 'refs/tags/v') ) }} | |
| run: | | |
| echo "VERSION_NAME=${GITHUB_REF#refs/*/}" >> $GITHUB_ENV | |
| - name: Copy documentation into repository | |
| if: ${{ github.repository == 'FEniCS/dolfinx' && ( github.ref == 'refs/heads/main' || startsWith(github.ref, 'refs/tags/v') ) }} | |
| run: | | |
| cd docs | |
| git rm -r --ignore-unmatch dolfinx/${{ env.VERSION_NAME }}/cpp | |
| git rm -r --ignore-unmatch dolfinx/${{ env.VERSION_NAME }}/python | |
| mkdir -p dolfinx/${{ env.VERSION_NAME }}/cpp | |
| mkdir -p dolfinx/${{ env.VERSION_NAME }}/cpp/doxygen | |
| mkdir -p dolfinx/${{ env.VERSION_NAME }}/python | |
| cp -r ../cpp/doc/build/html/* dolfinx/${{ env.VERSION_NAME }}/cpp/ | |
| cp -r ../cpp/doc/html/* dolfinx/${{ env.VERSION_NAME }}/cpp/doxygen | |
| cp -r ../python/doc/build/html/* dolfinx/${{ env.VERSION_NAME }}/python | |
| - name: Commit and push documentation to FEniCS/docs | |
| if: ${{ github.repository == 'FEniCS/dolfinx' && ( github.ref == 'refs/heads/main' || startsWith(github.ref, 'refs/tags/v') ) }} | |
| run: | | |
| cd docs | |
| git config --global user.email "fenics@github.com" | |
| git config --global user.name "FEniCS GitHub Actions" | |
| git add --all | |
| git commit --allow-empty -m "C++/Python FEniCS/dolfinx@${{ github.sha }}" | |
| git push |