Skip to content

Add FiniteElement python wrapper #1427

Add FiniteElement python wrapper

Add FiniteElement python wrapper #1427

Workflow file for this run

name: macOS build
on:
pull_request:
branches:
- main
push:
branches:
- "main"
tags:
- "v*"
merge_group:
branches:
- main
workflow_dispatch:
jobs:
fenicsx-refs:
uses: ./.github/workflows/fenicsx-refs.yml
mac-os-build:
name: macOS Homebrew install and test
runs-on: macos-14
needs: fenicsx-refs
env:
PETSC_ARCH: arch-darwin-c-opt
PETSC_DIR: ${{ github.workspace }}/petsc
steps:
- name: Set up Python
uses: actions/setup-python@v5
with:
python-version: "3.12"
- name: Install Homebrew dependencies
run: |
brew install adios2 boost cmake hdf5-mpi make ninja open-mpi pkgconf pugixml spdlog # FEniCS
brew install bison flex gfortran # PETSc
- name: Install Python dependencies (petsc4py)
run: |
python -m pip install mpi4py numpy
python -m pip install cython setuptools wheel
- name: Install minimal PETSc and petsc4py
run: |
export PATH="$(brew --prefix gfortran)/bin:$(brew --prefix bison)/bin:$PATH"
git clone -b release https://gitlab.com/petsc/petsc.git petsc
cd petsc
python ./configure \
--with-64-bit-indices=no \
--with-debugging=no \
--with-fortran-bindings=no \
--with-scalar-type=real \
--with-shared-libraries \
--with-scalar-type=real \
--download-metis \
--download-parmetis \
--download-ptscotch \
--download-scalapack \
--download-mumps \
--download-mumps-avoid-mpi-in-place
make all
cd src/binding/petsc4py
arch -arm64 python -m pip -v install --no-build-isolation --no-cache-dir .
- name: Install FEniCSx dependencies
run: |
python -m pip install git+https://github.com/fenics/ufl.git@${{ needs.fenicsx-refs.outputs.ufl_ref }}
python -m pip install git+https://github.com/fenics/basix.git@${{ needs.fenicsx-refs.outputs.basix_ref }}
python -m pip install git+https://github.com/fenics/ffcx.git@${{ needs.fenicsx-refs.outputs.ffcx_ref }}
- uses: actions/checkout@v4
with:
path: dolfinx
- name: Build and install DOLFINx C++ library
working-directory: dolfinx
run: |
cmake -G Ninja -B build -S cpp/
cmake --build build
sudo cmake --install build
- name: Build C++ unit tests
working-directory: dolfinx
run: |
cmake -G Ninja -DCMAKE_BUILD_TYPE=Developer -B build/test/ -S cpp/test/
cmake --build build/test --parallel 3
- name: Run C++ unit tests (serial)
working-directory: dolfinx
run: |
cd build/test
mpiexec -np 1 ctest -V --output-on-failure -R unittests
- name: Run C++ unit tests (MPI)
working-directory: dolfinx
run: |
cd build/test
mpiexec -np 3 ctest -V --output-on-failure -R unittests
- name: Build and install DOLFINx Python interface
working-directory: dolfinx
run: |
python -m pip install -r python/build-requirements.txt
python -m pip install --check-build-dependencies --no-build-isolation 'python/[test]'
- name: Basic test
run: |
mpiexec -np 1 python -c "import dolfinx; from mpi4py import MPI; dolfinx.mesh.create_rectangle(comm=MPI.COMM_WORLD, points=((0, 0), (2, 1)), n=(32, 16))"
mpiexec -np 2 python -c "import dolfinx; from mpi4py import MPI; dolfinx.mesh.create_rectangle(comm=MPI.COMM_WORLD, points=((0, 0), (2, 1)), n=(32, 16))"
- name: Run Python unit tests (serial)
working-directory: dolfinx
run: |
python -m pip install pytest-xdist
mpiexec -np 1 python3 -m pytest -n=auto --durations=50 python/test/unit/
- name: Run Python unit tests (MPI, np=3)
working-directory: dolfinx
run: |
mpiexec -np 3 python3 -m pytest python/test/unit/