Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
55 commits
Select commit Hold shift + click to select a range
461ae4e
Allow `mpi_dims_mask` with geometry file
yguclu Sep 18, 2025
1e46072
unit test for mpi_dims_mask
Sep 19, 2025
3376e31
Update test_geometry.py
yguclu Sep 19, 2025
2704716
Update geometry.py
yguclu Sep 19, 2025
e1a13f8
Update test_geometry.py
yguclu Sep 19, 2025
51a32da
new tests for class Geometry
Sep 24, 2025
505db31
run only my tests
Sep 24, 2025
39c51a4
run only my tests
Sep 24, 2025
34e42e6
run only my tests
Sep 24, 2025
90553f9
run only my tests
Sep 24, 2025
243d2b1
run only my tests
Sep 24, 2025
9bfda59
run only my tests
Sep 24, 2025
f75df55
fixed failing tests due to deleting file in parallel
Sep 24, 2025
2a7bb4d
revert files
Sep 24, 2025
659831d
Merge branch 'devel' into yguclu-fix-mpi_dims_mask
alisa-kirkinskaia Sep 26, 2025
e7b6bfb
Avoid function check_decomposition in tests
yguclu Sep 30, 2025
f6afb54
Fix typo in test_geometry.py
yguclu Sep 30, 2025
81b1c6d
Improve Geometry class:
yguclu Sep 30, 2025
e3c30db
Update Geometry unit tests
yguclu Sep 30, 2025
8716dcb
Squashed commit of the following:
yguclu Oct 1, 2025
7111b8e
Do not create __psydac__ directory in parallel
yguclu Oct 1, 2025
cc097a3
Use Geometry.from_file in discretize_domain
yguclu Oct 1, 2025
cd925fb
Use correct parameter name (periods) in MultiPatchDomainDecomposition…
yguclu Oct 1, 2025
f1b6bb1
Add mandatory parameter pdim to Geometry.__init__
yguclu Oct 7, 2025
2716065
Clean up Geometry.read()
yguclu Oct 7, 2025
818be2a
Remove unused property is_parallel from Geometry
yguclu Oct 7, 2025
31fbb37
Merge branch 'devel' into yguclu-improve-Geometry
yguclu Oct 7, 2025
cb8ccb5
Clean up module psydac.mapping.discrete_gallery:
yguclu Oct 8, 2025
f47163e
Merge branch 'devel' into yguclu-improve-Geometry
yguclu Oct 21, 2025
2e56b10
Run fewer tests, only on Ubuntu with Python 3.11
yguclu Oct 21, 2025
2511593
Merge branch 'devel' into yguclu-improve-Geometry
yguclu Jan 26, 2026
b042a0a
Reactivate single-process tests on Ubuntu and macOS
yguclu Jan 26, 2026
0e6a9d6
Merge branch 'devel' into yguclu-improve-Geometry
yguclu Jan 26, 2026
6b6653f
Remove duplicated imports from test_geometry.py
yguclu Jan 26, 2026
8ea76a8
Improve docstring of Geometry class
yguclu Jan 27, 2026
739aee8
Add 'h5py' xdist_group to all unit tests in test_geometry.py
yguclu Jan 27, 2026
66205e7
Handle NumPy integers passed in ncells to Geometry constructor
yguclu Jan 27, 2026
ae6ebf8
Minor cleanup in Geometry constructor
yguclu Jan 27, 2026
7dff021
Run unit tests in mapping, fem, and feec folders
yguclu Jan 27, 2026
fdd357a
Run unit tests in api folder
yguclu Jan 27, 2026
001e592
Revert "Do not create __psydac__ directory in parallel"
yguclu Jan 27, 2026
fae70d3
Merge branch 'devel' into yguclu-improve-Geometry
yguclu Jan 28, 2026
b807f32
Update `CHANGELOG.md` with new and previous changes
yguclu Jan 28, 2026
a06a7d3
Use SymPDE branch clean-multipatch-domain
yguclu Feb 10, 2026
e968bc5
Provide interface orientation to Domain.join
yguclu Feb 10, 2026
a31e07a
Add interface orientation to multipatch geometry files
yguclu Feb 10, 2026
29e82cf
Merge branch 'devel' into yguclu-improve-Geometry
yguclu Feb 11, 2026
326952b
Use `ubuntu_install` action in `documentation` workflow
yguclu Feb 12, 2026
800e506
Clone the latest release of PETSc (see PR #539)
yguclu Feb 12, 2026
9f092d3
Install mpi4py >= 4.0.0 in `parallel_h5py` action
yguclu Feb 12, 2026
e41f301
Merge branch 'devel' into yguclu-improve-Geometry
yguclu Apr 21, 2026
3702e70
Add missing orientation (-1 or +1) to connectivity in test_plot_field
yguclu Apr 21, 2026
d91b2ba
Minor cleanup
yguclu Apr 21, 2026
0b426e2
Avoid deprecation warning about scipy.odr
yguclu Apr 21, 2026
349eee8
Check input domain type in Geometry.from_topological_domain
yguclu Apr 21, 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
1 change: 1 addition & 0 deletions .github/actions/install_h5py/action.yml
Original file line number Diff line number Diff line change
Expand Up @@ -21,6 +21,7 @@ runs:
run: |
export CC="mpicc"
export HDF5_MPI="ON"
pip install 'mpi4py>=4.0.0'
pip install h5py --no-cache-dir --no-binary h5py
pip list

Expand Down
19 changes: 8 additions & 11 deletions .github/workflows/documentation.yml
Original file line number Diff line number Diff line change
Expand Up @@ -23,9 +23,11 @@ permissions:
jobs:
build_docs:
runs-on: ubuntu-latest

env:
GITHUB_PAT: ${{ secrets.GITHUB_TOKEN}}
OMP_NUM_THREADS: 2

steps:
- name: Checkout
uses: actions/checkout@v5
Expand All @@ -34,18 +36,9 @@ jobs:
uses: actions/setup-python@v5
with:
python-version: '3.10'
- name: Install non-Python dependencies on Ubuntu
uses: awalsh128/cache-apt-pkgs-action@latest
with:
packages: gfortran openmpi-bin libopenmpi-dev libhdf5-openmpi-dev
version: 1.0
execute_install_scripts: true

- name: Reconfigure non-Python dependencies on Ubuntu
run: |
sudo apt-get update
sudo apt-get install --reinstall openmpi-bin libhdf5-openmpi-dev liblapack-dev libblas-dev
sudo apt install graphviz pandoc
- name: Install non-Python dependencies on Ubuntu
uses: ./.github/actions/ubuntu_install

- name: Print information on MPI and HDF5 libraries
run: |
Expand All @@ -67,6 +60,10 @@ jobs:
pip install .[test]
pip freeze

- name: Install non-Python dependencies for Documentation
run: |
sudo apt install graphviz pandoc

- name: Install Python dependencies for Documentation
run: |
pip install -r docs/requirements.txt
Expand Down
9 changes: 5 additions & 4 deletions .github/workflows/testing.yml
Original file line number Diff line number Diff line change
Expand Up @@ -24,7 +24,8 @@ jobs:
fail-fast: false
matrix:
os: [ ubuntu-24.04, macos-14 ]
python-version: [ '3.10', '3.11', '3.12', '3.13', '3.14' ]
# python-version: [ '3.9', '3.10', '3.11', '3.12', '3.13' ]
python-version: [ '3.11', '3.12' ]
isMerge:
- ${{ github.event_name == 'push' && github.ref == 'refs/heads/devel' }}
exclude:
Expand Down Expand Up @@ -123,17 +124,17 @@ jobs:
if: matrix.os == 'macos-14'
working-directory: ./scratch
run: |
coverage report --ignore-errors --show-missing --sort=cover
psydac test --mod psydac.mapping -x -v

- name: Run MPI tests with Pytest
working-directory: ./scratch
run: |
psydac test --mpi
psydac test --mod psydac.fem -x -v

- name: Run single-process PETSc tests with Pytest
working-directory: ./scratch
run: |
psydac test --petsc
psydac test --mod psydac.feec -x -v

- name: Run MPI PETSc tests with Pytest
working-directory: ./scratch
Expand Down
7 changes: 5 additions & 2 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,8 @@ All notable changes to this project will be documented in this file.
### Added

- #577 : Add an installation configuration option to choose the backend language
- #567 : Improve `psydac test` command (with several new features)
- #565 : Expand editable install info in `README.md`
- [DEVELOPER] Create action `install_petsc4py` to install PETSc & `petsc4py` w/ complex support

### Fixed
Expand All @@ -16,8 +18,7 @@ All notable changes to this project will be documented in this file.
- #579 : Return error code on failure of the `psydac test` and `psydac compile` commands
- #577 : Fix installation following release of Pyccel 2.2
- #571 : Fix correct application of the sum factorization algorithm
- #570 : Optimize PSYDAC logo
- #565 : Expand editable install info in `README.md`
- #567 : Fix parallel creation of folder `__psydac__` in `psydac.api.fem_bilinear_form`
- #566 : Fix command `psydac test --mpi` on Ubuntu machines
- [DEVELOPER] Add missing 'description' properties (required!) to our GitHub actions
- [DEVELOPER] Update CI installation of `petsc4py` after release of `setuptools` 81.0
Expand All @@ -26,11 +27,13 @@ All notable changes to this project will be documented in this file.

### Changed

- #527 : Improve `Geometry` class in module `psydac.cad.geometry`
- #580 : Use PETSc 3.25.0 whose Python bindings `petsc4py` install correctly with `setuptools>=81.0`
- #579 : Require `pyccel>=2.2.3` which can compile all kernels with C
- #579 : Require `numpy>=2.1` to support Python >= 3.10
- #579 : Require `pytest>=9.0` and use `pytest.toml` instead of `pytest.ini` for Pytest configuration
- #579 : Move coverage configuration from `pyproject.toml` to `psydac/pytest.toml`
- #570 : Optimize PSYDAC logo
- [DEVELOPER] Rename actions: `macos/ubuntu_install` -> `macos/ubuntu_installations`
- [DEVELOPER] Do not check file changes to trigger testing workflow on PRs
- [DEVELOPER] Run documentation workflow on pushes to `devel` whenever `README.md` is modified
Expand Down
2 changes: 1 addition & 1 deletion psydac/api/discretization.py
Original file line number Diff line number Diff line change
Expand Up @@ -578,7 +578,7 @@ def discretize_domain(domain, *, filename=None, ncells=None, periodic=None, comm
raise ValueError("Cannot provide both 'filename' and 'ncells'")

elif filename:
return Geometry(filename=filename, comm=comm, mpi_dims_mask=mpi_dims_mask)
return Geometry.from_file(filename, comm=comm, mpi_dims_mask=mpi_dims_mask)

Comment on lines +581 to 582
Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

thanks!

elif ncells:
return Geometry.from_topological_domain(domain, ncells, periodic=periodic, comm=comm, mpi_dims_mask=mpi_dims_mask)
Expand Down
2 changes: 1 addition & 1 deletion psydac/api/tests/test_2d_complex.py
Original file line number Diff line number Diff line change
Expand Up @@ -363,7 +363,7 @@ def test_complex_poisson_2d_multipatch():
A = Square('A',bounds1=(0, 0.5), bounds2=(0, 1))
B = Square('B',bounds1=(0.5, 1.), bounds2=(0, 1))

domain = Domain.join([A, B], [((0, 0, 1), (1, 0, -1))], 'domain')
domain = Domain.join([A, B], [((0, 0, 1), (1, 0, -1), 1)], 'domain')

x, y = domain.coordinates

Expand Down
15 changes: 6 additions & 9 deletions psydac/api/tests/test_2d_multipatch_mapping_maxwell.py
Original file line number Diff line number Diff line change
Expand Up @@ -7,25 +7,22 @@
from pathlib import Path

import pytest
import numpy as np
from mpi4py import MPI
from sympy import pi, sin, cos, Tuple, Matrix

from sympde.calculus import grad, dot, curl, cross
from sympde.calculus import dot, curl, cross
from sympde.calculus import minus, plus
from sympde.topology import VectorFunctionSpace
from sympde.topology import elements_of
from sympde.topology import NormalVector
from sympde.topology import Square, Domain
from sympde.topology import IdentityMapping, PolarMapping
from sympde.topology import Domain
from sympde.expr.expr import LinearForm, BilinearForm
from sympde.expr.expr import integral
from sympde.expr.expr import Norm
from sympde.expr.equation import find, EssentialBC
from sympde.expr.equation import find

from psydac.api.discretization import discretize
from psydac.api.tests.build_domain import build_11_patch_pretzel, build_2_patch_annulus
from psydac.fem.basic import FemField
from psydac.api.settings import PSYDAC_BACKEND_GPYCCEL
from psydac.feec.pull_push import pull_2d_hcurl

Expand Down Expand Up @@ -204,10 +201,10 @@ def teardown_function():

if __name__ == '__main__':

from collections import OrderedDict
from sympy import lambdify
from collections import OrderedDict
from sympy import lambdify
from psydac.fem.plotting_utilities import get_plotting_grid, get_grid_vals
from psydac.fem.plotting_utilities import get_patch_knots_gridlines, my_small_plot
from psydac.fem.plotting_utilities import my_small_plot

domain = build_11_patch_pretzel()
x,y = domain.coordinates
Expand Down
15 changes: 9 additions & 6 deletions psydac/api/tests/test_2d_multipatch_mapping_poisson.py
Original file line number Diff line number Diff line change
Expand Up @@ -15,7 +15,7 @@
from sympde.calculus import minus, plus
from sympde.topology import ScalarFunctionSpace
from sympde.topology import elements_of
from sympde.topology import NormalVector, Union
from sympde.topology import NormalVector
from sympde.topology import Square, Domain
from sympde.topology import IdentityMapping, PolarMapping, AffineMapping
from sympde.expr.expr import LinearForm, BilinearForm
Expand Down Expand Up @@ -141,12 +141,12 @@ def test_poisson_2d_3_patches_dirichlet_2():
B = Square('B',bounds1=(0.5, 1.), bounds2=(0, np.pi))
C = Square('C',bounds1=(0.5, 1.), bounds2=(np.pi-0.5, np.pi + 1))

D1 = mapping_1(A)
D2 = mapping_2(B)
D3 = mapping_3(C)
D1 = mapping_1(A)
D2 = mapping_2(B)
D3 = mapping_3(C)

connectivity = [((0,1,1),(1,1,-1)), ((1,1,1),(2,1,-1))]
patches = [D1, D2, D3]
connectivity = [((0, 1, 1), (1, 1,-1), 1), ((1, 1, 1), (2, 1,-1), 1)]
domain = Domain.join(patches, connectivity, 'domain')

x,y = domain.coordinates
Expand Down Expand Up @@ -252,8 +252,11 @@ def test_poisson_2d_4_patch_dirichlet_0():
D3 = mapping_3(C)
D4 = mapping_4(D)

connectivity = [((0,1,1),(1,1,-1)), ((2,1,1),(3,1,-1)), ((0,0,1),(2,0,-1)),((1,0,1),(3,0,-1))]
patches = [D1, D2, D3, D4]
connectivity = [((0, 1, 1), (1, 1,-1), 1),
((2, 1, 1), (3, 1,-1), 1),
((0, 0, 1), (2, 0,-1), 1),
((1, 0, 1), (3, 0,-1), 1)]
domain = Domain.join(patches, connectivity, 'domain')

x,y = domain.coordinates
Expand Down
12 changes: 6 additions & 6 deletions psydac/api/tests/test_2d_multipatch_poisson.py
Original file line number Diff line number Diff line change
Expand Up @@ -78,8 +78,8 @@ def test_poisson_2d_2_patch_dirichlet_0():
A = Square('A', bounds1=(0, 0.5), bounds2=(0, 1))
B = Square('B', bounds1=(0.5, 1), bounds2=(0, 1))

connectivity = [((0,0,1), (1,0,-1), 1)]
patches = [A, B]
connectivity = [((0, 0, 1), (1, 0,-1), 1)]
domain = Domain.join(patches, connectivity, 'domain')

x,y = domain.coordinates
Expand All @@ -100,8 +100,8 @@ def test_poisson_2d_2_patch_dirichlet_1():
A = Square('A', bounds1=(0, 0.5), bounds2=(0, 1))
B = Square('B', bounds1=(0.5, 1), bounds2=(0, 1))

connectivity = [((0,0,1), (1,0,-1), 1)]
patches = [A, B]
connectivity = [((0, 0, 1), (1, 0,-1), 1)]
domain = Domain.join(patches, connectivity, 'domain')

x,y = domain.coordinates
Expand All @@ -121,8 +121,8 @@ def test_poisson_2d_2_patch_dirichlet_2():
A = Square('A', bounds1=(0, 0.5), bounds2=(0, 1))
B = Square('B', bounds1=(0.5, 1), bounds2=(0, 1))

connectivity = [((0,0,1), (1,0,-1), 1)]
patches = [A, B]
connectivity = [((0, 0, 1), (1, 0,-1), 1)]
domain = Domain.join(patches, connectivity, 'domain')

x,y = domain.coordinates
Expand Down Expand Up @@ -150,8 +150,8 @@ def test_poisson_2d_2_patch_dirichlet_3():
D1 = M1(A)
D2 = M2(B)

connectivity = [((0,0,1), (1,0,1), 1)]
patches = [D1, D2]
connectivity = [((0, 0, 1), (1, 0, 1), 1)]
domain = Domain.join(patches, connectivity, 'domain')

x,y = domain.coordinates
Expand Down Expand Up @@ -182,8 +182,8 @@ def test_poisson_2d_2_patch_dirichlet_4():
D1 = M1(A)
D2 = M2(B)

connectivity = [((0,0,-1), (1,0,-1), 1)]
patches = [D1,D2]
patches = [D1, D2]
connectivity = [((0, 0, -1), (1, 0, -1), 1)]
domain = Domain.join(patches, connectivity, 'domain')

x,y = domain.coordinates
Expand Down
11 changes: 5 additions & 6 deletions psydac/api/tests/test_postprocessing.py
Original file line number Diff line number Diff line change
Expand Up @@ -57,7 +57,7 @@ def build_2_mapped_squares():
D2 = mapping_2(B)

patches = [D1, D2]
connectivity = [((0,1,1),(1,1,-1))]
connectivity = [((0, 1, 1), (1, 1,-1), 1)]
return Domain.join(patches, connectivity, 'domain')


Expand All @@ -66,7 +66,7 @@ def build_2_squares():
B = Square('B',bounds1=(0.5, 1.), bounds2=(np.pi/2, np.pi))

patches = [A, B]
connectivity = [((0,1,1),(1,1,-1))]
connectivity = [((0, 1, 1), (1, 1,-1), 1)]
return Domain.join(patches, connectivity, 'domain')


Expand All @@ -75,10 +75,9 @@ def build_2_cubes():
B = Cube('B',bounds1=(0.5, 1.), bounds2=(np.pi/2, np.pi), bounds3=(0, 1))

patches = [A, B]
connectivity = [((0,1,1),(1,1,-1))]
connectivity = [((0, 1, 1), (1, 1,-1), (1, 1, 1))]
return Domain.join(patches, connectivity, 'domain')


###############################################################################
# Output Manager tests #
###############################################################################
Expand Down Expand Up @@ -538,8 +537,8 @@ def test_reconstruct_multipatch(dtype):
A = Square('A',bounds1=bounds1, bounds2=bounds2_A)
B = Square('B',bounds1=bounds1, bounds2=bounds2_B)

connectivity = [((0,1,1),(1,1,-1))]
patches = [A,B]
patches = [A, B]
connectivity = [((0, 1, 1), (1, 1,-1), 1)]
domain = Domain.join(patches, connectivity, 'domain')

Va = ScalarFunctionSpace('Va', A)
Expand Down
Loading