{"id":45819369,"url":"https://github.com/pyccel/psydac","last_synced_at":"2026-02-26T19:58:57.315Z","repository":{"id":37929229,"uuid":"121755172","full_name":"pyccel/psydac","owner":"pyccel","description":"Python 3 library for isogeometric analysis","archived":false,"fork":false,"pushed_at":"2026-02-18T14:06:36.000Z","size":26008,"stargazers_count":61,"open_issues_count":109,"forks_count":21,"subscribers_count":8,"default_branch":"devel","last_synced_at":"2026-02-18T15:50:23.729Z","etag":null,"topics":["bsplines","high-performance-computing","isogeometric-analysis","python"],"latest_commit_sha":null,"homepage":"https://pyccel.github.io/psydac/","language":"Python","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/pyccel.png","metadata":{"files":{"readme":"README.md","changelog":"CHANGELOG.md","contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":"CITATION.bib","codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":"AUTHORS","dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2018-02-16T13:42:54.000Z","updated_at":"2026-02-13T17:01:16.000Z","dependencies_parsed_at":"2025-12-18T05:07:22.417Z","dependency_job_id":null,"html_url":"https://github.com/pyccel/psydac","commit_stats":null,"previous_names":[],"tags_count":4,"template":false,"template_full_name":null,"purl":"pkg:github/pyccel/psydac","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pyccel%2Fpsydac","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pyccel%2Fpsydac/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pyccel%2Fpsydac/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pyccel%2Fpsydac/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/pyccel","download_url":"https://codeload.github.com/pyccel/psydac/tar.gz/refs/heads/devel","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pyccel%2Fpsydac/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":29870219,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-02-26T18:42:30.764Z","status":"ssl_error","status_checked_at":"2026-02-26T18:41:47.936Z","response_time":89,"last_error":"SSL_connect returned=1 errno=0 peeraddr=140.82.121.6:443 state=error: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["bsplines","high-performance-computing","isogeometric-analysis","python"],"created_at":"2026-02-26T19:58:56.840Z","updated_at":"2026-02-26T19:58:57.307Z","avatar_url":"https://github.com/pyccel.png","language":"Python","funding_links":[],"categories":[],"sub_categories":[],"readme":"# \u003cimg src=\"https://raw.githubusercontent.com/pyccel/psydac/devel/docs/source/logo/psydac_banner.svg\" width=\"600\" style=\"display: block; margin: 0 auto\" alt=\"PSYDAC logo.\" class=\"dark-light\"\u003e\n\n[![devel_tests](https://github.com/pyccel/psydac/actions/workflows/testing.yml/badge.svg)](https://github.com/pyccel/psydac/actions/workflows/testing.yml)\n[![docs](https://github.com/pyccel/psydac/actions/workflows/documentation.yml/badge.svg)](https://github.com/pyccel/psydac/actions/workflows/documentation.yml)\n\nPSYDAC is a Python 3 library for isogeometric analysis.\nIt is an academic, open-source project created by numerical mathematicians at the [Max Planck Institute for Plasma Physics](https://www.ipp.mpg.de/en) ([NMPP](https://www.ipp.mpg.de/ippcms/eng/for/bereiche/numerik) division, [FEM](https://www.ipp.mpg.de/5150531/fem) group).\n\nPSYDAC can solve general systems of partial differential equations in weak form, which users define using the domain-specific language provided by [SymPDE](https://github.com/pyccel/sympde).\nIt supports finite element exterior calculus ([FEEC](https://en.wikipedia.org/wiki/Finite_element_exterior_calculus)) with tensor-product spline spaces and handles multi-patch geometries in various ways.\n\nPSYDAC automatically generates Python code for the assembly of user-defined functionals and linear and bilinear forms from the weak formulation of the problem.\nThis Python code is then accelerated to C/Fortran speed using [Pyccel](https://github.com/pyccel/pyccel).\nThe library also enables large parallel computations on distributed-memory supercomputers using [MPI](https://en.wikipedia.org/wiki/Message_Passing_Interface) and [OpenMP](https://en.wikipedia.org/wiki/OpenMP).\n\n\u003e [!NOTE]\n\u003e The name PSYDAC stands for \"Python Spline librarY for Differential equations with Automatic Code generation\".\n\u003e It is pronounced like the famous Pokémon character, from which the developers draw inspiration for its psychic powers.\n\n## Citing\n\nIf PSYDAC has been significant in your research, and you would like to acknowledge the project in your academic publication, we would ask that you cite the following paper:\n\nGüçlü, Y., S. Hadjout, and A. Ratnani. “PSYDAC: A High-Performance IGA Library in Python.” In 8th European Congress on Computational Methods in Applied Sciences and Engineering. CIMNE, 2022. https://doi.org/10.23967/eccomas.2022.227.\n\nThe associated BibTeX file can be found [here](https://github.com/pyccel/psydac/blob/devel/CITATION.bib).\n\n## Installation\n\nPSYDAC requires a certain number of components to be installed on the machine:\n\n-   Fortran and C compilers with OpenMP support\n-   OpenMP library\n-   BLAS and LAPACK libraries\n-   MPI library\n-   HDF5 library with MPI support\n\nThe installation instructions depend on the operating system and on the packaging manager used.\nIt is particularly important to determine the **HDF5 root folder**, as this will be needed to install the [`h5py`](https://docs.h5py.org/en/latest/build.html#source-installation) package in parallel mode.\nDetailed instructions can be found in the [documentation](https://pyccel.github.io/psydac/installation.html).\n\nOnce those components are installed, we recommend using [`venv`](https://packaging.python.org/en/latest/guides/installing-using-pip-and-virtual-environments/#creating-a-virtual-environment) to set up a fresh Python virtual environment at a location `\u003cENV-PATH\u003e`:\n```bash\npython3 -m venv \u003cENV-PATH\u003e\nsource \u003cENV-PATH\u003e/bin/activate\n```\n\nPSYDAC and its Python dependencies can now be installed in the virtual environment using [`pip`](https://pip.pypa.io/en/stable/), the Python package manager:\n```bash\nexport CC=\"mpicc\"\nexport HDF5_MPI=\"ON\"\nexport HDF5_DIR=\u003cHDF5-PATH\u003e\n\npip install --upgrade pip\npip install h5py --no-cache-dir --no-binary h5py\npip install \"psydac[test]\"\n```\nHere `\u003cHDF5-PATH\u003e` is the path to the HDF5 root folder, such that `\u003cHDF5-PATH\u003e/lib/` contains the HDF5 dynamic libraries with MPI support.\n\nThe last command above installs the latest version of PSYDAC found on [PyPI](https://pypi.org), the Python Package Index, together with some optional packages needed for running the unit tests.\nA developer wanting to modify the latest source code on GitHub should skip that command, and instead clone the PSYDAC repository (by default, in the branch `devel`) to perform an **editable install**:\n\n```bash\ngit clone --recurse-submodules https://github.com/pyccel/psydac.git\ncd psydac\n\npip install meson-python \"pyccel\u003e=2.1.0\"\npip install --no-build-isolation --editable \".[test]\"\n```\n\nThe last install command will create a local `build/` folder, which can be inspected in the case of an error.\nWe recommend removing such a folder before running the command again (e.g. when installing PSYDAC in multiple virtual environments) in order to avoid conflicts in library path resolution.\nAgain, for more details we refer to our [documentation](https://pyccel.github.io/psydac/installation.html).\n\n\u003e [!TIP]\n\u003e PSYDAC provides the functionality to convert its MPI-parallel matrices and vectors to their [PETSc](https://petsc.org) equivalent, and back.\n\u003e This gives the user access to a wide variety of linear solvers and other algorithms.\n\u003e Instructions for installing [PETSc](https://petsc.org) and `petsc4py` can be found in our [documentation](https://pyccel.github.io/psydac/installation.html#id9).\n\n## Running Tests\n\nWe strongly advice users and developers to run the test suite of PSYDAC to verify the correct installation on their machine (possibly a supercomputer).\nAll unit tests are based on [`pytest`](https://docs.pytest.org/en/stable/) and are installed together with the library.\nFor convenience, PSYDAC provides the `psydac test` command as shown below.\n\nIn order to run all serial and parallel tests which do not use PETSc, just type:\n```bash\npsydac test\npsydac test --mpi\n```\n\nIf PETSc and petsc4py were installed, additional serial and parallel tests can be run:\n```bash\npsydac test --petsc\npsydac test --petsc --mpi\n```\n\n## Speeding up PSYDAC's core\n\nMany of PSYDAC's low-level Python functions can be translated to a compiled language using the [Pyccel](https://github.com/pyccel/pyccel) transpiler.\nCurrently, all of those functions are collected in modules which follow the name pattern `[module]_kernels.py`.\n\nFor both classical and editable installations, *all kernel files are translated to Fortran __without user intervention__*.\nIf the user adds or edits a kernel file within an editable install, they should use the command `psydac compile` in order to be able to see the changes at runtime.\nThis command applies Pyccel to all the kernel files in the source directory.\nThe default language is Fortran, and C is also available.\n\n-   **Only in development mode**:\n    ```bash\n    psydac compile [--language {fortran, c}]\n    ```\n\n## Examples and Tutorials\n\nOur [documentation](https://pyccel.github.io/psydac/examples.html) provides Jupyter notebooks that present many aspects of this library. \nAdditional [tutorials](https://pyccel.github.io/IGA-Python/intro.html) on isogeometric analysis, with many example notebooks where various PDEs are solved with PSYDAC, is under construction in the [IGA-Python](https://github.com/pyccel/IGA-Python) repository.\nSome other examples can be found [here](https://github.com/pyccel/psydac/blob/devel/examples).\n\n## Library Documentation\n\n-   [Output formats](https://pyccel.github.io/psydac/output.html)\n-   [Mesh generation](https://pyccel.github.io/psydac/psydac-mesh.html)\n-   [Modules](https://pyccel.github.io/psydac/modules.html)\n\n## Contributing\n\nThere are several ways to contribute to this project!\n\nIf you find a problem, please check if this is already discussed in one of [our issues](https://github.com/pyccel/psydac/issues) and feel free to add your opinion; if not, please create a [new issue](https://docs.github.com/en/issues/tracking-your-work-with-issues/using-issues/creating-an-issue).\nIf you want to fix an issue, improve our notebooks, or add a new example, please [fork](https://docs.github.com/en/pull-requests/collaborating-with-pull-requests/working-with-forks/fork-a-repo) our Git repository, make and commit your changes, and create a [pull request](https://docs.github.com/en/pull-requests/collaborating-with-pull-requests/proposing-changes-to-your-work-with-pull-requests/creating-a-pull-request) (PRs).\nAll PRs are reviewed by the project maintainers.\nDuring the PR review, GitHub workflows are triggered on various platforms.\n\nWe keep an up-to-date list of maintainers and contributors in our [AUTHORS](https://github.com/pyccel/psydac/blob/devel/AUTHORS) file.\nThank you!\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fpyccel%2Fpsydac","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fpyccel%2Fpsydac","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fpyccel%2Fpsydac/lists"}