Skip to content

v3.2.0

Latest

Choose a tag to compare

@github-actions github-actions released this 09 Jun 08:51
· 2 commits to devel since this release
Immutable release. Only release title and notes can be modified.
8a3717c

Changelog

Struphy 3.2.0 - 2026-06-09

Headlines

  • New Quickstart, Userguide, Tutorials and Developer's guide in the documentation: #252
  • Each Propagator now sits in his own .py file: #236
  • New propagator CurlCurlSolve() for curl-curl problems: #245
  • New classmethods to inspect the model docstring (in a jupyter notebook for example): #229

API changes

  • Change in the signature of ParticleSpecies.set_markers(), which is used in parameter files featuring particles. The new classes SortingParameters and SavingParameters replace the methods set_sorting_boxes and set_save_data. Instances of the new classes are passed to set_markers(): #247

User news

  • Clean-up logging levels for simulation output: #247
  • New plotting functionality for kinetic backgrounds: #239
  • Addition of a matrix-free averaging operator for distributed FEEC data: #246
  • New default for boxes_per_dim is tuple = (1, 1, 1): #247

Bug fixes

  • Adaptation to general equilibria and new tests of the gyrokinetic Poisson solve: #238

Struphy 3.1.0 - 2026-04-24

Headlines

  • Refactoring of the Derham class: #212
    • Renamed Nel -> num_elements, p -> degree, nq_pr -> nquads_proj, polar_ck -> polar_splines
    • The type of spline basis functions is now set via the argument bcs, which is a tuple of length three. It holds the type for each direction: None for periodic, or a tuple of length two with either free or dirichlet to indicate the type of clamped splines. bcs replaces the two arguments spl_kind and dirichlet_bc
    • The lifting is defined for each FEECVariable separately through the new attribute lifting_function
  • Refactoring of WeightedMassOperators.create_weighted_mass method: #227
    • The signature remains largely the same, except that list input for weights has been replaced by tuple input. Moreover, within the tuple, one can now pass a SplineFunction object, either from H1 or L2 space, which will be multiplied to the constant weights during .assemble(). This allows for time dependent mass operators in nonlinear simulations (formerly treated with workarounds).
    • In the constructor of create_weighted_mass, we now evaluate all callables derived from weights: tuple[str] on the integration grid, multiply them together and then pass them as xp.arrays to WeightedMassOperator for building the object. This leads to much simpler code than in the previous version, where we built composed functions and passed them as weights.
    • In MassMatrixPreconditioner, to build the Kronecker matrices from 1D matrices without domain decomposition, the values of the weights are now retrieved via an MPI sub-communicator, because the weights in M0, M1 etc. are now given as local xp.arrays, not as callables anymore.
  • Use logging instead of print statements; use function set_logging_level from the API to set the logging level of all handlers. With pytest you can use pytest --logging-level DEBUG src/struphy to set the loggong level: #199 and #219
  • New user guide: #200
  • Remove two submodules struphy-parameter-files and struphy-tutorials in favor of the new folders examples/ or tutorials/: #206

API changes

  • base_units is removed from the StruphyModel constructor; all equation parameters that can be seen in the model docstring can be passed to the model constructor: #222

User news

  • Add to_dict and from_dict methods to the Simulation class: #186
  • Add __repr__ and __repr_no_defaults__ methods to most classes in the API: #193
  • Using pyvista; ddd show_3d and create_geometry_mesh methods to Domain class: #195
  • Add iterators to models and domains: #196
  • Added export and from_file methods to SimulationBase class: #197
  • Added name and description to the Simulation class: #198
  • New model ToyGyrokinetic to simulate the diocotron instability: #201
  • New classes for scalar quantities tracked during simulation (via new type Scalar): #220
  • The components of a model docstring are now available as class methods: #229

Bug fixes

  • Weights in initial Poisson solves of kinetic models without control variate fixed: #192

Struphy 3.0.4 - 2026-02-27

Bug fixes

  • New lower bound on pyccel is set to 2.2.0, due to this pyccel bug fix: pyccel/pyccel#2567

Struphy 3.0.3 - 2026-02-23

Headlines

  1. New class Simulation inherits the generic SimulationBase, both are in the new folder struphy/simulations/. The most important methods are:
    • Simulation.run()
    • Simulation.pproc()
    • Simulation.load_plotting_data()
    • Simulation.spawn_sister() (my new favorite!)

These are tested in the new tutorials: https://github.com/struphy-hub/struphy-tutorials/tree/use-species-properties

The file main.py has been deleted.

The Simulation takes a model as input. Other API classes are passed as well (see tutorials).
The model is viewed as everything related to the PDE, i.e. its variables, initial conditions etc. The simulation deals with the rest (geometry, derham, environment etc.)

Some important changes to the logic: The model does not have access to derham, mass_ops etc. anymore, these can be called from Propagator when needed. Solves that need to happen before the time stepping (like initial Poisson solves) are moved to model.allocate_helpers().

  1. The default launch file has been improved. See Tutorial 2 or test with struphy params MODEL. The files in the submodule struphy-parameter-files have been adapted.

  2. Several new classes have been introduced for post processing and plotting data, see post_processing_tools.py. The most important ones are PostProcessor and PlottingData. Dictionaries in the plotting data have been replaced by classes. Many classes now feature the __repr__ dunder for customized printing.

API changes

New classes exposed: Simulation, PostProcessor and PlottingData.

User news

  • Add set_zero_velocity argument into LoadingParameters, enforcing velocities of all particles along specified axis to always be zero: #176
  • New model ViscousEulerSPH replaces EulerSPH. The evaluation of the viscosity tensor has been implemented and tested for SPH methods. Unit tests for evaluation of the fluid velocity and its gradients (needed in the viscosity tensor) have been improved: #160

Struphy 3.0.2 - 2026-02-06

Headlines

  • Added a public API. This allows imports like from struphy import equils: #168
  • New default compile language is Fortran: #158
  • Moved each model to its own file. Calling sub-processes must be avoided in the future because of incompatibility with MPI: #152

User news

  • Added binning of higher order moments (current density, energy tensor) of f and delta f: #162

Developer news

  • Use pyccel 2.1: #153
  • Added three submodules: struphy-parameter-files, struphy-tutorials andfeectools. The Struphy repo should be cloned with git clone --recurse-submodules https://github.com/struphy-hub/struphy.git to init and update the submodules. Also, run git submodule update regularly to get updates from the submodules. See #154
  • Introduced class options.LiteralOptions for parsing literals. Moved Units to physics.py: #167

Bug fixes

  • Use struphy.io.options.Units in equils. This enables the use of GVEC, EQDSK and DESC in the new framework: #158

Struphy 3.0.1 - 2025-12-11

Headlines

Psydac is now installed via pip from our fork renamed to feectools, which is published on PyPI. This avoids installing from a .whl file.
Functionality remains unchanged, but future releases of Struphy are much easier and quicker. We have kept the option to install the upstream psydac, once it is also on PyPI.
See #147.

User news

None

Developer news

  • Removed legacy code (eigenvalue solver): #129
  • Add context manager to h5py.File() calls: #135
  • Fix undefined variables: #141

Bug fixes

  • Fix setter in DESCequilibirum, update quickstart guide: #132
  • Set defaults for given_in_basis: "0" for scalar and "v" for vector-valued: #136
  • Fix the restart function: #143

Struphy 3.0.0 - 2025-11-13

Headlines

Struphy 3 represents a major refactoring with breaking changes with respect to Struphy 2, in particular:

  • The .yml parameter files cannot be used anymore. Simulation parameters have to be transferred to the new .py launch files that are generated from struphy params MODEL. See the Struphy README for a quick introduction.
  • The console command struphy run ... has been deprecated. The new way to launch simulations is by executing the .py launch file, for instance with python params_MODEL.py.
  • Other deprecated console commands are struphy pproc and struphy units. Post-processing is now done through the API via main.pproc().
  • The Struphy repo has moved to Github. The old Gitlab repo will persist but not be maintained any longer. Issues, discussion and PRs will solely take place on the new Github repo.

User news

  • Please consult the Struphy README and links therein to get familiar with the new workflows.
  • New tutorials can be found on mybinder.

Developer news

Struphy has been refactored with the following principles in mind:

  • get rid of console commands and increase the use of the Struphy API wherever possible
  • become even more object-oriented
  • use Classes instead of dicts wherever possible
  • use Literals to show options for string arguments

In Struphy 3, models feature the following important objects:

  • ParticleSpecies, FieldSpecies, FluidSpecies

Each species is a collection of Variables:

  • PICVariable, FEECVariable, SPHVariable

These variables are updated by Propagators. All options for a simluation can be set in the new .py launch file.

Bug fixes

  • Incorporate psydac updates: #109
  • Auto install Psydac on first Struphy import: #118
  • Remove MPI Barrier responsible for deadlock: #121

Struphy 2.6.0 - 2025-11-12

Headlines

  • This is a test run for the relaease of Struphy 3.0 from the new Github repo

Struphy 2.5.0 and prior releases