Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
80 commits
Select commit Hold shift + click to select a range
4c4dd8e
pass uniform_grid by value
jacobmerson Mar 16, 2026
1430519
initial phase of field creation refactoring
jacobmerson Mar 17, 2026
63cc19e
swap field creation for factory functions
jacobmerson Mar 17, 2026
e215ba4
add Omega_H default field adapter type for order 0 and 1
jacobmerson Mar 17, 2026
1ae19ff
initial unchecked/untested omega_h adapters
jacobmerson Mar 17, 2026
6edd8af
add Omega_h field backend for centroid and linear fields
jacobmerson Mar 18, 2026
00a688a
store shared_ptr to layout in Field types
jacobmerson Mar 18, 2026
919b781
update targets to use C++ 20
jacobmerson Mar 21, 2026
621312e
PCMS builds without MeshFields
jacobmerson Mar 21, 2026
11a37d0
Add build without petsc to CI
jacobmerson Mar 21, 2026
9b8fba6
use Lagrange factory for uniform grid.
jacobmerson Mar 22, 2026
f16be10
extract serialization from the field definition
jacobmerson Mar 22, 2026
38a793a
initial refactor to extract redev field evaluations
jacobmerson Mar 22, 2026
d73c2e1
Reorganize PCMS to separate field and communication operations
jacobmerson Mar 22, 2026
4fe8957
Implementation of new evaluation style.
jacobmerson Mar 22, 2026
4ed1162
Replace APIs with new "evaluators"
jacobmerson Mar 23, 2026
d310976
Update XGC Adapter to utilize the new interface
jacobmerson Mar 23, 2026
26c96b2
Add an "EmptyLayout" this is a replacement for the dummy field adapter
jacobmerson Mar 23, 2026
6a504c3
add a handle that can be used to send the field
jacobmerson Mar 23, 2026
1636f16
XGC proxy coupling tests running with our new Coupler/Fields.
jacobmerson Mar 23, 2026
fa0c71c
update xgc_n0_server with new Field interfaces
jacobmerson Mar 23, 2026
8d841e4
remove coupler and communicator from pcms.h
jacobmerson Mar 23, 2026
9aa9be8
resolve compiler error with xgc_n0_coupling_server
jacobmerson Mar 23, 2026
afbb2c4
Remove old adapters/communication
jacobmerson Mar 23, 2026
2f43912
Rename to functionspace
jacobmerson Mar 24, 2026
b22f8ae
Resolve participates.
jacobmerson Mar 24, 2026
7f379bd
XGCFunctionSpace and AddField takes Field<T>
jacobmerson Mar 24, 2026
d55b93a
Add class based copy and move interpolator to transfer
jacobmerson Mar 24, 2026
6aa969d
AddField returns a typed field handle that send/recv and do evaluations
jacobmerson Mar 24, 2026
e9f55f0
Match python API to C++ API
jacobmerson Mar 24, 2026
933758e
update python APIs (currently working state)
jacobmerson Mar 24, 2026
3c7f816
move spline_interpolator to uniform_grid directory
jacobmerson Mar 25, 2026
34fa591
remove extraneous header file
jacobmerson Mar 25, 2026
28e9fab
reorganize files to match updated project structure
jacobmerson Mar 26, 2026
5b38ad1
Add a function space for splines
jacobmerson Mar 26, 2026
9f6ebd5
Update FromUniformGrid on LagrangeFunctionSpace
jacobmerson Mar 26, 2026
8684f82
remove layout from FieldData
jacobmerson Mar 26, 2026
f181493
Update FunctionSpace apis to handle multiple field types
jacobmerson Mar 26, 2026
0b7d418
remove raw Field construction
jacobmerson Mar 26, 2026
e2d5306
Add MLS based functionality as an evaluator to the point cloud
jacobmerson Mar 27, 2026
fd180ff
Add FromMesh to the PonitCloud function space.
jacobmerson Mar 27, 2026
31adbbb
Update python apis to remove layout-driven functionality
jacobmerson Mar 27, 2026
ea3b61b
Add transfer operator base class
jacobmerson Mar 28, 2026
01c8c68
Evaluate APIs take Field<T>
jacobmerson Mar 28, 2026
2fdcb70
Add a discretization type into the class hierarchy.
jacobmerson Mar 29, 2026
c4d35ba
Update C++ APIs to use an EvaluationRequest, not coords
jacobmerson Mar 29, 2026
ffc6741
Update python api to use evaluation request
jacobmerson Mar 29, 2026
03eac62
Add testing / more concrete selection of search path
jacobmerson Mar 29, 2026
71c3ba6
Fix search method selection.
jacobmerson Mar 30, 2026
74f5655
Rename NodalFunctionSpace to PolynomialReconstructionFunctionSpace
jacobmerson Mar 30, 2026
0827588
remove 2 suffix from Coupler/Application/FieldCommunicator
jacobmerson Mar 30, 2026
5a0e4bc
Add TransferOperator interface to the mesh intersections
jacobmerson Mar 30, 2026
87f008e
debug CUDA build
Sichao25 Apr 2, 2026
e2ed92e
implement CUDA field methods
Sichao25 Apr 3, 2026
6f8938a
switch FieldData to device backend
Sichao25 Apr 7, 2026
5418dca
switch layout to device backend
Sichao25 Apr 9, 2026
da8d087
switch evaluator to device side
Sichao25 Apr 9, 2026
5cd2bf2
use device memory in evaluation request
Sichao25 Apr 10, 2026
ac9b9c0
add coordinateview conversion helper
Sichao25 Apr 10, 2026
35f3ed2
use device memory in localization factory and interpolator
Sichao25 Apr 10, 2026
0f66976
remove layout GetDOFHolderCoordinatesHost and host side evaluation
Sichao25 Apr 10, 2026
c1c3e79
rename GetDOFHolderCoordinatesDevice to GetDOFHolderCoordinates
Sichao25 Apr 10, 2026
b585d73
use device memory for uniform grid
Sichao25 Apr 13, 2026
8a942ca
resolve compiler warnings
Sichao25 Apr 14, 2026
a1bd999
correct kokkos view layout
Sichao25 Apr 15, 2026
f66a166
template kokkos layout in View
Sichao25 Apr 16, 2026
386eddc
add mdspan helper for omega_h read
Sichao25 Apr 17, 2026
2cb8a26
switch discretization to device backend
Sichao25 Apr 21, 2026
609e3bd
name layout host methods explicitly
Sichao25 Apr 21, 2026
614797a
create OverlapMask class
Sichao25 Apr 22, 2026
dd387a5
debug pythonapi life time issue in evaluation request
Sichao25 Apr 23, 2026
e173156
create view from omega_h array with helper
Sichao25 Apr 23, 2026
3dad792
use mdspan as ouput for overlap mask
Sichao25 Apr 24, 2026
fe540ed
Merge branch 'develop' into evaluation-library
Sichao25 Apr 24, 2026
486e037
reformat
Sichao25 Apr 24, 2026
c5e8afe
guard meshfield dependent headers
Sichao25 Apr 24, 2026
342b9ab
debug headers enabled w meshfield wo petsc
Sichao25 Apr 24, 2026
419e23c
add missing target to config.cmake.in
Sichao25 Apr 25, 2026
9987eb7
debug clang-tidy issues
Sichao25 Apr 27, 2026
6eaf892
bump version to 0.4.0
Sichao25 May 1, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 2 additions & 2 deletions .github/workflows/clang-tidy.yml
Original file line number Diff line number Diff line change
Expand Up @@ -63,7 +63,7 @@ jobs:
repo-path: 'kokkos/kokkos'
repo-ref: '4.6.01'
cache: true
options: '-DCMAKE_CXX_STANDARD=17
options: '-DCMAKE_CXX_STANDARD=20
-DBUILD_SHARED_LIBS=OFF
-DKokkos_ENABLE_SERIAL=ON
-DKokkos_ENABLE_OPENMP=OFF
Expand All @@ -78,7 +78,7 @@ jobs:
repo-path: 'kokkos/kokkos-kernels'
repo-ref: '4.6.01'
cache: true
options: '-DCMAKE_CXX_STANDARD=17
options: '-DCMAKE_CXX_STANDARD=20
-DBUILD_SHARED_LIBS=OFF
-DKokkos_DIR=${{ runner.temp }}/build-kokkos-openmpi/install/lib/cmake/Kokkos'

Expand Down
63 changes: 51 additions & 12 deletions .github/workflows/cmake-test.yml
Original file line number Diff line number Diff line change
Expand Up @@ -25,6 +25,23 @@ jobs:
compiler: [g++]
language: ['cpp']
python_api: [OFF, ON]
meshfields: [ON]
petsc: [ON]
include:
- build_type: Release
memory_test: OFF
compiler: g++
language: 'cpp'
python_api: OFF
meshfields: OFF
petsc: ON
- build_type: Release
memory_test: OFF
compiler: g++
language: 'cpp'
python_api: OFF
meshfields: ON
petsc: OFF
exclude:
- build_type: Release
memory_test: ON
Expand Down Expand Up @@ -68,7 +85,7 @@ jobs:
repo-ref: '4.6.01'
cache: true
cache-suffix: ${{ matrix.python_api == 'ON' && '-shared' || '' }}
options: '-DCMAKE_CXX_STANDARD=17
options: '-DCMAKE_CXX_STANDARD=20
-DBUILD_SHARED_LIBS=${{ matrix.python_api }}
-DKokkos_ENABLE_SERIAL=ON
-DKokkos_ENABLE_OPENMP=OFF
Expand All @@ -84,7 +101,7 @@ jobs:
repo-ref: '4.6.01'
cache: true
cache-suffix: ${{ matrix.python_api == 'ON' && '-shared' || '' }}
options: '-DCMAKE_CXX_STANDARD=17
options: '-DCMAKE_CXX_STANDARD=20
-DBUILD_SHARED_LIBS=${{ matrix.python_api }}
-DKokkos_DIR=${{ runner.temp }}/build-kokkos/install/lib/cmake/Kokkos'

Expand All @@ -106,6 +123,7 @@ jobs:
-DKokkos_DIR=${{ runner.temp }}/build-kokkos/install/lib/cmake/Kokkos'

- name: build meshFields
if: matrix.meshfields == 'ON'
uses: ./.github/actions/install-repo
with:
repo-name: 'meshFields'
Expand Down Expand Up @@ -156,9 +174,14 @@ jobs:
- name: Set LD_LIBRARY_PATH for shared libraries
if: matrix.python_api == 'ON'
run: |
echo "LD_LIBRARY_PATH=${{ runner.temp }}/build-kokkos/install/lib:${{ runner.temp }}/build-omega_h/install/lib:${{ runner.temp }}/build-meshFields/install/lib:${{ runner.temp }}/build-redev/install/lib:${{ runner.temp }}/build-ADIOS2/install/lib:${{ runner.temp }}/build-perfstubs/install/lib:$LD_LIBRARY_PATH" >> $GITHUB_ENV
meshfields_lib=""
if [ "${{ matrix.meshfields }}" = "ON" ]; then
meshfields_lib="${{ runner.temp }}/build-meshFields/install/lib:"
fi
echo "LD_LIBRARY_PATH=${{ runner.temp }}/build-kokkos/install/lib:${{ runner.temp }}/build-omega_h/install/lib:${meshfields_lib}${{ runner.temp }}/build-redev/install/lib:${{ runner.temp }}/build-ADIOS2/install/lib:${{ runner.temp }}/build-perfstubs/install/lib:$LD_LIBRARY_PATH" >> $GITHUB_ENV

- name: clone petsc
if: matrix.petsc == 'ON'
id: clone-petsc
run: |
cd ${{ runner.temp }}
Expand All @@ -167,14 +190,15 @@ jobs:
echo "petsc-commit-hash=$(git rev-parse HEAD)" >> $GITHUB_OUTPUT

- name: Cache PETSc
if: matrix.petsc == 'ON'
id: cache-petsc
uses: actions/cache@v3
with:
path: ${{ runner.temp }}/petsc
key: build-petsc-${{ steps.clone-petsc.outputs.petsc-commit-hash }}-${{ matrix.python_api }}

- name: build petsc
if: steps.cache-petsc.outputs.cache-hit != 'true'
if: matrix.petsc == 'ON' && steps.cache-petsc.outputs.cache-hit != 'true'
run: |
cd ${{ runner.temp }}/petsc
./configure \
Expand All @@ -186,6 +210,15 @@ jobs:
--download-fblaslapack
make all check

- name: Set PCMS PETSc options
run: |
echo "PCMS_ENABLE_PETSC=-DPCMS_ENABLE_PETSC=${{ matrix.petsc }}" >> $GITHUB_ENV
if [ "${{ matrix.petsc }}" = "ON" ]; then
echo "PCMS_PETSC_OPTIONS=-DPETSC_LINK_STATIC=ON -DPETSC_DIR=${{ runner.temp }}/petsc -DPETSC_ARCH=ubuntu-kokkos" >> $GITHUB_ENV
else
echo "PCMS_PETSC_OPTIONS=" >> $GITHUB_ENV
fi

- name: checkout pcms_testcases
uses: actions/checkout@v3
with:
Expand All @@ -195,6 +228,15 @@ jobs:
- name: Install fftw3
run: sudo apt-get install -yq libfftw3-dev pkg-config

- name: Set PCMS MeshFields options
run: |
echo "PCMS_ENABLE_MESHFIELDS=-DPCMS_ENABLE_MESHFIELDS=${{ matrix.meshfields }}" >> $GITHUB_ENV
if [ "${{ matrix.meshfields }}" = "ON" ]; then
echo "PCMS_MESHFIELDS_DIR=-Dmeshfields_DIR=${{ runner.temp }}/build-meshFields/install/lib/cmake/meshfields" >> $GITHUB_ENV
else
echo "PCMS_MESHFIELDS_DIR=" >> $GITHUB_ENV
fi

- name: build pcms
uses: ./.github/actions/install-repo
with:
Expand All @@ -207,15 +249,14 @@ jobs:
-DCMAKE_CXX_COMPILER=`which mpicxx`
-DCMAKE_Fortran_COMPILER=`which mpifort`
-DMPIEXEC_PREFLAGS="--oversubscribe"
-DPCMS_ENABLE_PETSC=ON
-DPETSC_LINK_STATIC=ON
-DPETSC_DIR=${{ runner.temp }}/petsc
-DPETSC_ARCH=ubuntu-kokkos
${{ env.PCMS_ENABLE_MESHFIELDS }}
${{ env.PCMS_ENABLE_PETSC }}
${{ env.PCMS_PETSC_OPTIONS }}
-DPCMS_TIMEOUT=10
-DPCMS_ENABLE_Python=${{ matrix.python_api }}
-DCatch2_DIR=${{ runner.temp }}/build-Catch2/install/lib/cmake/Catch2
-DOmega_h_DIR=${{ runner.temp }}/build-omega_h/install/lib/cmake/Omega_h
-Dmeshfields_DIR=${{ runner.temp }}/build-meshFields/install/lib/cmake/meshfields
${{ env.PCMS_MESHFIELDS_DIR }}
-Dredev_DIR=${{ runner.temp }}/build-redev/install/lib/cmake/redev
-DMPIEXEC_EXECUTABLE=`which mpirun`
-DADIOS2_DIR=${{ runner.temp }}/build-ADIOS2/install/lib/cmake/adios2
Expand Down Expand Up @@ -263,8 +304,6 @@ jobs:
-B ${{github.workspace}}/examples/external-usage-example/build \
-S ${{github.workspace}}/examples/external-usage-example/ \
-Dpcms_DIR=${{ runner.temp }}/build-pcms/install/lib/cmake/pcms \
-DPETSC_LINK_STATIC=ON \
-DPETSC_DIR=${{ runner.temp }}/petsc \
-DPETSC_ARCH=ubuntu-kokkos \
${{ matrix.petsc == 'ON' && format('-DPETSC_LINK_STATIC=ON -DPETSC_DIR={0}/petsc -DPETSC_ARCH=ubuntu-kokkos', runner.temp) || '' }} \
--debug-output
cmake --build ${{github.workspace}}/examples/external-usage-example/build
4 changes: 2 additions & 2 deletions .github/workflows/perlmutter/install.sh
Original file line number Diff line number Diff line change
Expand Up @@ -45,7 +45,7 @@ build-pcms/install
# cmake -S kokkos-kernels -B build-kokkos-kernels \
# -DCMAKE_INSTALL_PREFIX=$PWD/build-kokkos-kernels/install \
# -DCMAKE_CXX_COMPILER=CC \
# -DCMAKE_CXX_STANDARD=17
# -DCMAKE_CXX_STANDARD=20
# cmake --build build-kokkos-kernels -j24 --target install


Expand Down Expand Up @@ -131,4 +131,4 @@ cmake -S pcms -B build-pcms \
-DPCMS_TIMEOUT=100 \
-DCMAKE_CXX_STANDARD=20 \
-DPCMS_TEST_DATA_DIR=$PWD/pcms_testcases
cmake --build build-pcms -j8
cmake --build build-pcms -j8
21 changes: 15 additions & 6 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -32,7 +32,7 @@ module load cuda/12.1.1-zxa4msk
git clone --branch 4.6.01 --depth 1 git@github.com:kokkos/kokkos.git
cmake -S kokkos -B build-kokkos \
-DCMAKE_INSTALL_PREFIX=build-kokkos/install \
-DCMAKE_CXX_STANDARD=17 \
-DCMAKE_CXX_STANDARD=20 \
-DKokkos_ENABLE_SERIAL=ON \
-DKokkos_ENABLE_OPENMP=OFF \
-DKokkos_ENABLE_CUDA=OFF \
Expand All @@ -44,7 +44,7 @@ cmake --build build-kokkos --target install
git clone --branch 4.6.01 --depth 1 git@github.com:kokkos/kokkos-kernels.git
cmake -S kokkos-kernels -B build-kokkos-kernels \
-DCMAKE_INSTALL_PREFIX=build-kokkos-kernels/install \
-DCMAKE_CXX_STANDARD=17 \
-DCMAKE_CXX_STANDARD=20 \
-DKokkos_ROOT=$PWD/build-kokkos/install/lib64/cmake \
-DBUILD_SHARED_LIBS=OFF
cmake --build build-kokkos-kernels --target install
Expand Down Expand Up @@ -97,7 +97,7 @@ cmake --build build-redev --target install
git clone --branch 4.6.01 --depth 1 git@github.com:kokkos/kokkos.git
cmake -S kokkos -B build-kokkos \
-DCMAKE_INSTALL_PREFIX=build-kokkos/install \
-DCMAKE_CXX_STANDARD=17 \
-DCMAKE_CXX_STANDARD=20 \
-DCMAKE_BUILD_TYPE="Release" \
-DCMAKE_CXX_COMPILER=$PWD/kokkos/bin/nvcc_wrapper \
-DKokkos_ARCH_AMPERE80=ON \
Expand All @@ -112,7 +112,7 @@ cmake --build build-kokkos --target install
git clone --branch 4.6.01 --depth 1 git@github.com:kokkos/kokkos-kernels.git
cmake -S kokkos-kernels -B build-kokkos-kernels \
-DCMAKE_INSTALL_PREFIX=build-kokkos-kernels/install \
-DCMAKE_CXX_STANDARD=17 \
-DCMAKE_CXX_STANDARD=20 \
-DKokkos_ROOT=$PWD/build-kokkos/install/lib64/cmake \
-DBUILD_SHARED_LIBS=off
cmake --build build-kokkos-kernels --target install
Expand Down Expand Up @@ -248,9 +248,19 @@ If work in SCOREC system, you can directly use the spack-scorec.yaml which conta
Then add the binded python module to your `PYTHONPATH` environment variable. You can find the install prefix with `find $(spack location -i pcms) -name "*.so" | grep -i pcms`.
```console
$ export PYTHONPATH=$<your-path-to-module>:$PYTHONPATH
```
```

Test the python API with `python -c "import pcms; print(pcms.__version__)"`. You should see the version of PCMS printed out without any errors.

Point-evaluator construction in Python uses `EvaluationRequest`, for
example:
```python
request = pcms.EvaluationRequest.from_coordinates(eval_coords)
evaluator = source_space.create_point_evaluator(request)

optimized_request = pcms.EvaluationRequest.from_function_space(target_space)
evaluator = source_space.create_point_evaluator(optimized_request)
```

PS: If you need certain config options for the python API, you can specify them in the spack spec. For example, to build the python API with Exodus support, one compatible config is `pcms+python ^omega-h+trilinos ^trilinos@15.0.0:+exodus ^netcdf-c@4.8.1+mpi`. At this moment, omega-h spack package does not have the exodus support, so you need to manually add `args.append("-Omega_h_USE_SEACASExodus:BOOL=ON")` to the `package.py` file of omega-h in spack before installing pcms with spack.

Expand All @@ -270,4 +280,3 @@ module load clang-format
module load llvm
find . -regex '.*\.\(cpp\|cxx\|cc\|c\|hpp\|h\)' -exec clang-format -style=file -i {} \;
```

3 changes: 3 additions & 0 deletions config.cmake.in
Original file line number Diff line number Diff line change
Expand Up @@ -30,7 +30,10 @@ if(@PCMS_ENABLE_OMEGA_H@)
endif()

include("${CMAKE_CURRENT_LIST_DIR}/pcms_utility-targets.cmake")
include("${CMAKE_CURRENT_LIST_DIR}/pcms_discretization-targets.cmake")
include("${CMAKE_CURRENT_LIST_DIR}/pcms_localization-targets.cmake")
include("${CMAKE_CURRENT_LIST_DIR}/pcms_field-targets.cmake")
include("${CMAKE_CURRENT_LIST_DIR}/pcms_coupler-targets.cmake")
include("${CMAKE_CURRENT_LIST_DIR}/pcms_core-targets.cmake")
include("${CMAKE_CURRENT_LIST_DIR}/pcms_transfer-targets.cmake")

Expand Down
1 change: 0 additions & 1 deletion examples/external-usage-example/main.cpp
Original file line number Diff line number Diff line change
@@ -1,6 +1,5 @@
#include <iostream>
#include <pcms/utility/print.h>
#include <pcms/create_field.h>
#include <pcms/capi/interpolator.h>
int main()
{
Expand Down
23 changes: 15 additions & 8 deletions examples/python-api-example/flow_example.py
Original file line number Diff line number Diff line change
@@ -1,7 +1,6 @@
#!/usr/bin/env python3
import pcms
import numpy as np
import os
# import matplotlib.pyplot as plt


Expand Down Expand Up @@ -45,23 +44,31 @@ def demonstrate_face_field_transfer(mesh):
mesh, face_field_values, face_dim
)
print(
f"Vertex field (MLS): min={vertex_field_values.min():.6f}, "
f"Vertex field: min={vertex_field_values.min():.6f}, "
f"max={vertex_field_values.max():.6f}, "
f"mean={vertex_field_values.mean():.6f}"
)

vertex_layout = pcms.create_lagrange_layout(mesh, 1, 1, pcms.CoordinateSystem.Cartesian)
omega_h_field = vertex_layout.create_field()
omega_h_factory = pcms.LagrangeFunctionSpace.from_mesh(
mesh, 1, 1, pcms.CoordinateSystem.Cartesian
)
omega_h_field = omega_h_factory.create_field()
omega_h_field.set_dof_holder_data(vertex_field_values)

divisions = [1000, 500]
grid = pcms.create_uniform_grid_from_mesh(mesh, divisions)
ug_layout = pcms.UniformGridFieldLayout2D(grid, 1, pcms.CoordinateSystem.Cartesian)
ug_field = ug_layout.create_field()
ug_factory = pcms.LagrangeFunctionSpace.from_uniform_grid(
grid, 1, pcms.CoordinateSystem.Cartesian
)
ug_field = ug_factory.create_field()

omega_h_field.set_out_of_bounds_mode(pcms.OutOfBoundsMode.FILL, 0.0)
print(f"Interpolating field from OmegaH mesh to uniform grid...")
pcms.interpolate_field(omega_h_field, ug_field)
interp = pcms.Interpolator(
omega_h_factory,
ug_factory,
pcms.OutOfBoundsPolicy(pcms.OutOfBoundsMode.FILL, 0.0),
)
interp.apply(omega_h_field, ug_field)

transferred_data = ug_field.get_dof_holder_data()
print(f"Transferred field: min={np.min(transferred_data):.6f}, max={np.max(transferred_data):.6f}, mean={np.mean(transferred_data):.6f}")
Expand Down
2 changes: 1 addition & 1 deletion pyproject.toml
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@ build-backend = "scikit_build_core.build"

[project]
name = "pcms"
version = "0.3.0"
version = "0.4.0"

[tool.scikit-build.cmake.define]
PCMS_ENABLE_Python = true
Loading
Loading