Skip to content

Releases: struphy-hub/psydac-for-struphy

Version 3.0.0.dev0

13 Nov 15:40
da5a7b4

Choose a tag to compare

Prepare v 3 0 0 (#57)

* change version to 3.0.0.dev0

* install struphy from devel

Version 2.6.0.dev0

10 Nov 10:16
d9d81cb

Choose a tag to compare

Prepare v 2 6 0 (#55)

* Support Python 3.13 (#475)

Closes #476:

* Do not restrict the maximum Python version to 3.12 in `pyproject.toml`
* Require `Cython >= 3` to avoid `h5py` installation crash w/ Python 3.13
* Require `sympde == 0.19.2` which supports Python 3.13
* Run unit tests with Python 3.13 too

* Fix PSYDAC_BACKEND_GPYCCEL flags on latest Apple silicon (#480)

Currently, Psydac can not be used on Apple M4 computers since the
`PSYDAC_BACKEND_GPYCCEL['flags']` is not set correctly.

This change sets the flag for `Apple MX (etc.)` to `apple-mX`, which should
work so long as the naming scheme stays unchanged.

In addition, the regular expression used to find the GFortran version is now
defined in a raw string instead of a standard Python UTF8 string. This
avoids a `SyntaxWarning: invalid escape sequence`.

---------

Co-authored-by: Yaman Güçlü <[email protected]>

* Resolve warnings in sequential unit tests (#481)

* Use raw strings for docstrings with LaTeX to avoid UTF8 syntax
warnings on escape sequences;
* Use CSC matrices to avoid SciPy sparse solver warning.

We do not address the NumPy warnings which arise in our MPI unit tests
(see #353).

* Pass `out` parameter to `petsc_to_psydac` (#483)

* Rename `dot` as `inner` in `Vector`, `VectorSpace`, and subclasses (#484)

Main changes
--------------
* Rename the method `dot` of the base class `VectorSpace` as `inner`,
and make it an abstract method (which must be implemented by the
subclasses).

* Rename the method `dot` of the base class `Vector` as `inner`. This is
a concrete method which calls `self.space.inner` and does not need to be
overridden by the subclasses.

* Add `inner` methods to the classes `StencilVector`,
`BlockVectorSpace`, and `DenseVectorSpace`. These methods override the
abstract method of the base class as required, and are derived from the
former functions `Stencil.dot`, `BlockVector.dot`, and
`DenseVector.dot`, which have been removed (see next point).

* Remove the property `dtype` and the method `dot` (now `inner`) from
the classes `StencilVector`, `BlockVector`, and `DenseVector`, because
the default methods of the base class already provide a sufficient
implementation.

This fixes #330.

Necessary additional changes
------------------------------
* Update all linear solvers in `linalg.solvers` with the new method
calls;
* Update all unit tests with the new method calls, in files:
   - `api/tests/test_assembly.py`
   - `feec/tests/test_commuting_projections.py`
   - `feec/tests/test_global_projectors.py`
   - `linalg/tests/test_block.py`
   - `linalg/tests/test_linalg.py`
   - `linalg/tests/test_stencil_interface_matrix.py`
   - `linalg/tests/test_stencil_vector.py`

Unrelated additional changes
-----------------------------
* Rename the class `VectorDot` as `VectorInner` in module
`api.ast.linalg`, although never used in Psydac.
* Speed up 3D unit tests in:
   - `feec/tests/test_commuting_projectors.py`
   - `feec/tests/test_global_projectors.py`

* Update docstring for inner product in polar/dense.py (#488)

---------

Co-authored-by: Yaman Güçlü <[email protected]>

* Add a `dot_inner` concrete method to the base class `LinearOperator` (#493)

Implement `M.dot(u).inner(v)`, or `(M @ u).inner(v)`, without creating a
temporary vector. The result of the dot product is written to a local
work vector stored in the `LinearOperator` object. This work vector is
then used to compute the inner product with the vector `v`. The
subclasses do not need to override this method, unless a more efficient
implementation which avoids writing to the work vector altogether
(reducing memory pressure) is needed.

A unit test is added: function `test_dot_inner` in file
psydac/linalg/tests/test_linalg.py.

Additionally, the helper function `get_StencilVectorSpace` defined in
psydac/linalg/tests/test_linalg.py (only used in the same file and in
test_matrix_free.py) has a new signature and now works in any number of
dimensions.

Fixes #491.

* Install PETSc-3.23.2 (latest version) (#499)

* Update authors (#500)

* Fix the code generation of unnecessary derivatives (#490)

This PR changes the code generation involved in the `discretize`
function to avoid calculating unnecessary derivatives. This allows for
using constant spline (degree 0) discretizations, for which we have to
make a special case in the calculation of ghost regions in
`psydac/linalg/stencil.py`.

Additionally, we add basic unit tests checking discretizations using
zero-degree splines.

This fixes #489 and fixes #307.

On this occasion, we also do small changes in the
`.github/workflows/testing.yml` script as some tests had complications
without them.

---------

Co-authored-by: Yaman Güçlü <[email protected]>

* Fix bug in `allocate_matrices` in `DiscreteBilinearForm` (#507)

Always use the maximum padding between test and trial spaces in
`allocate_matrices` in `DiscreteBilinearForm`. (Earlier this was not
done in the case of scalar spaces.) Fixes #504.

* Enable Pyccel 2.0 (#503)

Pyccel 2.0 was just released, which means some of the kernels in Psydac
need to be updated:

- Remove the `template` decorator (see
https://github.com/pyccel/pyccel/pull/2331)
   * Add `T` as `TypeVar` 
   * Specify `T`, `T[:]`, `T[:,:]`, ... in function arguments.
- Replace `@types` decorators (see
https://github.com/pyccel/pyccel/pull/2329)
- Replace `const` with `Final` (see
https://github.com/pyccel/pyccel/pull/2340)

Further changes:

- Update import path for `epyccel` (fixes #426)
- Update arguments to `epyccel` (see
https://github.com/pyccel/pyccel/pull/2348):
    * Rename `fflags` to `flags`
    * Replace `accelerators` list with `openmp` bool
- Require Pyccel >= 2.0.1 (fixes #471)

---------

Co-authored-by: Yaman Güçlü <[email protected]>
Co-authored-by: Elena Moral Sánchez <[email protected]>
Co-authored-by: Emily Bourne <[email protected]>

* New installation procedure and README (#510)

Recently the installation of `h5py` in parallel mode (i.e. with MPI
support through `mpi4py`) seems to have been simplified. This may be due
to the recent move of `mpi4py` to wheels, or other factors. Therefore we
can now simplify our installation procedure as follows:
```sh
pip install h5py --no-cache-dir --no-binary h5py
pip install .[test]
```

We update here the CI workflows and completely rewrite our README file.

**Commit summary**

- Completely rewrite `README.md`:
   * Expand initial description
   * Add Citing and Contributing sections
   * Shorten Installation section
   * Reorganize documentation sections
* Move detailed installation instructions to separate file
`docs/installation.md`
   * Move mesh generation to separate file `docs/psydac-mesh.md`
- Add BibTeX file `CITING.bib` with citation of 2022 ECCOMAS proceedings
- Remove obsolete files `requirements.txt` and `requirements_extra.txt`
- Rename (and move) `docs_requirements.txt` as `docs/requirements.txt`
- Update installation procedure in `testing` CI workflow
- Change name in `testing` workflow from "Run tests" to "Unit tests"
- Modify `testing` and `documentation` workflows so that they only run
when needed
- Allow running workflows manually
- Fix broken CI badge in `README.md`

* Fast Matrix Assembly (#448)

This PR implements the sum factorization algorithm as shown in **Sum
factorization techniques in Isogeometric Analysis** by Andrea Bressan &
Stefan Takacs for **bilinear forms on 3D volumes**.

The old element-by-element assembly can still be employed by passing a
corresponding flag
```python
# a some BilinearForm
a_h = discretize(a, domain_h, (Vh, Vh), backend=backend, sum_factorization=False)
```

Currently, the new generated code does not make use of OpenMP.

Main changes
--------------
- Write new module `psydac.api.fem_common` which:
   * Contains the old functions previously in module `psydac.api.fem`.
* Has functions `construct_test_space_arguments` and
`construct_trial_space_arguments` returning also the multiplicity.
* Has new functions `compute_max_nderiv`, `compute_imports`,
`compute_free_arguments`.
- Move `DiscreteSumForm` to a new module `psydac.api.fem_sum_form`.
- Create a new module `psydac.api.fem_bilinear_form` which only contains
one new class `DiscreteBilinearForm`. The new module shows all imports
clearly. The new class:
* Generates the code to assemble the given discrete bilinear form into a
matrix (a `BlockLinearOperator` object of `StencilMatrix` objects, or
just a single `StencilMatrix` object), using sum factorization.
* Does not inherit from `BasicDiscrete` (and hence `BasicCodeGen`).
Accordingly, no PSYDAC abstract syntax tree (an object representing a
function, of class `DefNode`) is created by the constructor of `AST`,
which stores it in its `expr` attribute. (Both classes `DefNode` and
`AST` are defined in module `psydac.api.ast.fem`.)
* Does not create a `Parser` object from `psydac.api.ast.parser`, which
used to convert a PSYDAC `DefNode` to an old-Pyccel `FunctionDef` from
`psydac.pyccel.ast.core`.
* Does not generate the old assembly Python code (in the form of a
string) using the function `pycode` from
`psydac.pyccel.codegen.printing.pycode`.
- Add a new unit test file
`api/tests/test_sum_factorization_assembly_3d`.
- Modify function `discretize` in module `psydac.api.discretization` so
that, given a bilinear form in 3D and not asking for OpenMP support, it
creates an object of type `DiscreteBilinearForm` from module
`psydac.api.fem_bilinear_form`. In all other cases, or if
`sum_factorization=False`, it creates an object of namesake type from
the old module `psydac.api.fem`.

Other changes
--------------
- Expand docstring of class `AST` in module `psydac.api.ast.fem`.
- Expand docstrings of function `parse` and class `Parser` in module
`psydac.api.ast.parser`. Clean up `Parser.__init__`.
- Minor cleanup in class `BasicCodeGen` in module `psydac.api.basic`.
- Generate random filenames using `random.choice()` instead of
`random.SystemRandom().choice()`.

Unrelated to matrix assembly:
- Add method `set_scalar` to `ScaledLinearOperator`.
- Reimplement method `idot` of `LinearOperator` using local storage.
This avoids creating unnecessary temporary vectors (especially
beneficial for the method `dot` of `SumLinearOperator`).

---------

Co-authored-by: Yaman Güçlü <[email protected]>
Co-authored-by: elmosa <[email protected]>

* Improve multipatch FEM API (#509)

### Commit summary

- Fix #461 : Move contents of `psydac/feec/multipatch/api.py` to
`psydac/api/feec.py` and `psydac/api/discretization.py`.
- Remove old code from `psydac/feec/multipatch/operators.py` and
replace it by the contents in
`psydac/feec/multipatch/non_matching_operators.py` to make the structure
more clear.
- Fix #463 
- Fix #272 : keep the `FEMLinearOperator` as a more light-weight class
that encapsulates a `LinearOperator` and has a `apply` and `__call__`
function to make it act on a `FEMField`. Remove duplicated code with
`LinearOperator`. Make operators in `psydac/feec` subclasses of
`LinearOperator`.
- Fix #462: Add conforming projections and Hodge operators to
single-patch `DiscreteDeRham`
- Add single-patch test for the conforming projectors
- Adapt all the tests/files to the new notations. For the single patch
cases mostly renaming `derham_h.derivatives` to `derham_h.derivatives()`
and `derham_h.derivatives_as_matrices` to
`derham_h.derivatives(kind='linop')`
- Merge single-patch and multi-patch operators to the same file if it
makes things clearer. Take Hodge and conforming projection operators out
of the multipatch subdirectory.
- Fix #409 : the global projector interface in DiscreteDeRhamMultipatch
- Fix #331. 
- Add a `SparseMatrixLinearOperator` in `psydac/linalg/sparse.py` to use
a sparse matrix as a `LinearOperator`. This is needed for the conforming
projections.
- Rename `GlobalProjectors` to `GlobalGeometricProjectors`


### Notes

With the current changes, we get all FEEC operators directly from the
discrete de Rham object. Further, the same code also runs if the
domain is a single patch.

---------

Co-authored-by: Yaman Güçlü <[email protected]>

* Allow `mpi_dims_mask` with geometry file (#526)

Add the optional parameter `mpi_dims_mask` to the constructor of class
`Geometry`, as well as its class methods `from_discrete_mapping` and
`from_topological_domain`. Add unit tests to verify that the domain is
correctly decomposed.

---------

Co-authored-by: Alisa Kirkinskaia <[email protected]>
Co-authored-by: Alisa Kirkinskaia <[email protected]>

* Fix the parallel low-level 2D Poisson example (#528)

Fix `examples/poisson_2d_mapping.py`:

- Use renamed method `get_assembly_grids` (formerly
`get_quadrature_grids`) of class `TensorFemSpace`
- Add missing definition of `Vnew` variable in the case of distributed
visualization
- Avoid string warnings

* Fix method `plot_2d_decomposition` of `TensorFemSpace` (#529)

Fix bug in method `plot_2d_decomposition` of `TensorFemSpace`, which was
failing when run in parallel with a distributed spline mapping.

- Create a new test file `psydac/fem/tests/test_tensor.py` with a unit
test which fails on the `devel` branch. This compares the generated PNG
images with "reference" ones which are known to be correct, within a 2 %
relative tolerance on each of the RGB channels.
- Only evaluate mapping in local subdomain owned by process
- Gather global mapping information on root process
- Add optional parameters `fig`, `ax`, and `mpi_root`
- Add docstring
- Update `examples/poisson_2d_mapping.py` to pass the correct mapping
(i.e. also a distributed spline mapping if that is used in the
computations) to `plot_2d_decomposition`.

* Describe library name in README.md (#535)

Add a NOTE block with the meaning of the PSYDAC acronym, as well as its
pronounciation.

* Fix parallelization bug in polar splines (#539)

* change version to 2.6.0.dev0

* remove test_tensor.py

* install struohy from 108-psydac-change-renaming-of-globalpojector

---------

Co-authored-by: Yaman Güçlü <[email protected]>
Co-authored-by: Max <[email protected]>
Co-authored-by: Elena Moral Sánchez <[email protected]>
Co-authored-by: Martin Campos Pinto <[email protected]>
Co-authored-by: Frederik Schnack <[email protected]>
Co-authored-by: Elena Moral Sánchez <[email protected]>
Co-authored-by: Emily Bourne <[email protected]>
Co-authored-by: Julian Owezarek <[email protected]>
Co-authored-by: Alisa Kirkinskaia <[email protected]>
Co-authored-by: Alisa Kirkinskaia <[email protected]>

Version 2.5.0.dev0

10 Nov 10:15
ca70e1c

Choose a tag to compare

Update devel tiny from upstream (#42)

* Support Python 3.13 (#475)

Closes #476:

* Do not restrict the maximum Python version to 3.12 in `pyproject.toml`
* Require `Cython >= 3` to avoid `h5py` installation crash w/ Python 3.13
* Require `sympde == 0.19.2` which supports Python 3.13
* Run unit tests with Python 3.13 too

* Fix PSYDAC_BACKEND_GPYCCEL flags on latest Apple silicon (#480)

Currently, Psydac can not be used on Apple M4 computers since the
`PSYDAC_BACKEND_GPYCCEL['flags']` is not set correctly.

This change sets the flag for `Apple MX (etc.)` to `apple-mX`, which should
work so long as the naming scheme stays unchanged.

In addition, the regular expression used to find the GFortran version is now
defined in a raw string instead of a standard Python UTF8 string. This
avoids a `SyntaxWarning: invalid escape sequence`.

---------

Co-authored-by: Yaman Güçlü <[email protected]>

* Resolve warnings in sequential unit tests (#481)

* Use raw strings for docstrings with LaTeX to avoid UTF8 syntax
warnings on escape sequences;
* Use CSC matrices to avoid SciPy sparse solver warning.

We do not address the NumPy warnings which arise in our MPI unit tests
(see #353).

* Pass `out` parameter to `petsc_to_psydac` (#483)

* Rename `dot` as `inner` in `Vector`, `VectorSpace`, and subclasses (#484)

Main changes
--------------
* Rename the method `dot` of the base class `VectorSpace` as `inner`,
and make it an abstract method (which must be implemented by the
subclasses).

* Rename the method `dot` of the base class `Vector` as `inner`. This is
a concrete method which calls `self.space.inner` and does not need to be
overridden by the subclasses.

* Add `inner` methods to the classes `StencilVector`,
`BlockVectorSpace`, and `DenseVectorSpace`. These methods override the
abstract method of the base class as required, and are derived from the
former functions `Stencil.dot`, `BlockVector.dot`, and
`DenseVector.dot`, which have been removed (see next point).

* Remove the property `dtype` and the method `dot` (now `inner`) from
the classes `StencilVector`, `BlockVector`, and `DenseVector`, because
the default methods of the base class already provide a sufficient
implementation.

This fixes #330.

Necessary additional changes
------------------------------
* Update all linear solvers in `linalg.solvers` with the new method
calls;
* Update all unit tests with the new method calls, in files:
   - `api/tests/test_assembly.py`
   - `feec/tests/test_commuting_projections.py`
   - `feec/tests/test_global_projectors.py`
   - `linalg/tests/test_block.py`
   - `linalg/tests/test_linalg.py`
   - `linalg/tests/test_stencil_interface_matrix.py`
   - `linalg/tests/test_stencil_vector.py`

Unrelated additional changes
-----------------------------
* Rename the class `VectorDot` as `VectorInner` in module
`api.ast.linalg`, although never used in Psydac.
* Speed up 3D unit tests in:
   - `feec/tests/test_commuting_projectors.py`
   - `feec/tests/test_global_projectors.py`

* Update docstring for inner product in polar/dense.py (#488)

---------

Co-authored-by: Yaman Güçlü <[email protected]>

* Add a `dot_inner` concrete method to the base class `LinearOperator` (#493)

Implement `M.dot(u).inner(v)`, or `(M @ u).inner(v)`, without creating a
temporary vector. The result of the dot product is written to a local
work vector stored in the `LinearOperator` object. This work vector is
then used to compute the inner product with the vector `v`. The
subclasses do not need to override this method, unless a more efficient
implementation which avoids writing to the work vector altogether
(reducing memory pressure) is needed.

A unit test is added: function `test_dot_inner` in file
psydac/linalg/tests/test_linalg.py.

Additionally, the helper function `get_StencilVectorSpace` defined in
psydac/linalg/tests/test_linalg.py (only used in the same file and in
test_matrix_free.py) has a new signature and now works in any number of
dimensions.

Fixes #491.

* Install PETSc-3.23.2 (latest version) (#499)

* Update authors (#500)

* Fix the code generation of unnecessary derivatives (#490)

This PR changes the code generation involved in the `discretize`
function to avoid calculating unnecessary derivatives. This allows for
using constant spline (degree 0) discretizations, for which we have to
make a special case in the calculation of ghost regions in
`psydac/linalg/stencil.py`.

Additionally, we add basic unit tests checking discretizations using
zero-degree splines.

This fixes #489 and fixes #307.

On this occasion, we also do small changes in the
`.github/workflows/testing.yml` script as some tests had complications
without them.

---------

Co-authored-by: Yaman Güçlü <[email protected]>

* Fix bug in `allocate_matrices` in `DiscreteBilinearForm` (#507)

Always use the maximum padding between test and trial spaces in
`allocate_matrices` in `DiscreteBilinearForm`. (Earlier this was not
done in the case of scalar spaces.) Fixes #504.

* Enable Pyccel 2.0 (#503)

Pyccel 2.0 was just released, which means some of the kernels in Psydac
need to be updated:

- Remove the `template` decorator (see
https://github.com/pyccel/pyccel/pull/2331)
   * Add `T` as `TypeVar` 
   * Specify `T`, `T[:]`, `T[:,:]`, ... in function arguments.
- Replace `@types` decorators (see
https://github.com/pyccel/pyccel/pull/2329)
- Replace `const` with `Final` (see
https://github.com/pyccel/pyccel/pull/2340)

Further changes:

- Update import path for `epyccel` (fixes #426)
- Update arguments to `epyccel` (see
https://github.com/pyccel/pyccel/pull/2348):
    * Rename `fflags` to `flags`
    * Replace `accelerators` list with `openmp` bool
- Require Pyccel >= 2.0.1 (fixes #471)

---------

Co-authored-by: Yaman Güçlü <[email protected]>
Co-authored-by: Elena Moral Sánchez <[email protected]>
Co-authored-by: Emily Bourne <[email protected]>

* New installation procedure and README (#510)

Recently the installation of `h5py` in parallel mode (i.e. with MPI
support through `mpi4py`) seems to have been simplified. This may be due
to the recent move of `mpi4py` to wheels, or other factors. Therefore we
can now simplify our installation procedure as follows:
```sh
pip install h5py --no-cache-dir --no-binary h5py
pip install .[test]
```

We update here the CI workflows and completely rewrite our README file.

**Commit summary**

- Completely rewrite `README.md`:
   * Expand initial description
   * Add Citing and Contributing sections
   * Shorten Installation section
   * Reorganize documentation sections
* Move detailed installation instructions to separate file
`docs/installation.md`
   * Move mesh generation to separate file `docs/psydac-mesh.md`
- Add BibTeX file `CITING.bib` with citation of 2022 ECCOMAS proceedings
- Remove obsolete files `requirements.txt` and `requirements_extra.txt`
- Rename (and move) `docs_requirements.txt` as `docs/requirements.txt`
- Update installation procedure in `testing` CI workflow
- Change name in `testing` workflow from "Run tests" to "Unit tests"
- Modify `testing` and `documentation` workflows so that they only run
when needed
- Allow running workflows manually
- Fix broken CI badge in `README.md`

* Removed <<<<<< HEAD

---------

Co-authored-by: Yaman Güçlü <[email protected]>
Co-authored-by: Elena Moral Sánchez <[email protected]>
Co-authored-by: Martin Campos Pinto <[email protected]>
Co-authored-by: Frederik Schnack <[email protected]>
Co-authored-by: Elena Moral Sánchez <[email protected]>
Co-authored-by: Emily Bourne <[email protected]>

Version 2.4.5.dev0

01 Jul 09:50
b62433c

Choose a tag to compare

change version number to 2.4.5 (#40)

Version 2.4.4.dev0

24 Jun 06:49
85ef416

Choose a tag to compare

Prepare v2 4 4 (#36)

* Set pyccel dependency to < 2.0

* Updated version number

* Removed pyccel devel tests

Version 2.4.2.dev0

04 Apr 12:10
1fbcbe1

Choose a tag to compare

change version number (#26)

Co-authored-by: Stefan Possanner <[email protected]>

Test - Struphy devel 2.4.1

03 Apr 06:39

Choose a tag to compare

2.4.1.dev0-whl

Removed macos from CI