updes


Nameupdes JSON
Version 1.0.2.post1 PyPI version JSON
download
home_pageNone
SummaryUniversal Partial Differential Equations Simulator
upload_time2024-06-21 00:47:54
maintainerNone
docs_urlNone
authorNone
requires_pythonNone
licenseNone
keywords differentiable-programming radial-basis-function meshfree optimisation differentiable-physics pdes
VCS
bugtrack_url
requirements No requirements were recorded.
Travis-CI No Travis.
coveralls test coverage No coveralls.
            # 𝕌pdes

𝕌pdes is a general-purpose library for mesh-free PDE simulation and control.
- GitHub project: https://github.com/ddrous/Updes
- Documentation: https://ddrous.github.io/Updes/


## Features
𝕌pdes leverages Radial Basis Functions (RBFs) and JAX to provide the following features:
- User-centric design: no need to re-implement a solver for each new PDE
- Lightning fast mesh-free simulation via Radial Basis Functions
- Robust differentiable simulation via JAX, and portable across CPU, GPU, and TPU
- Support for Dirichlet, Neumann, Robin, and Periodic boundary conditions
- Automatic generation of normals from 2D GMSH meshes

𝕌pdes in incredibly extendable, with additional features added frequently.


## Getting started
The package is available on PyPI. You can install it with
```
pip install updes
```

The example below illustrates how to solve the Laplace equation with Dirichlet and Neumann boundary conditions:
```python
import updes
import jax.numpy as jnp

# Create a mesh-free cloud of points on a unit square
facet_types={"South":"n", "West":"d", "North":"d", "East":"d"}
cloud = updes.SquareCloud(Nx=30, Ny=20, facet_types=facet_types)

# Define the differential operator (left-hand side of the PDE)
def my_diff_operator(x, center, rbf, monomial, fields):
    return updes.nodal_laplacian(x, center, rbf, monomial)

# Define the right-hand side of the PDE
def my_rhs_operator(x, centers, rbf, fields):
    return 0.0

# Set a sin function as the Dirichlet BC on the North, and zero everywhere else
sine = lambda coord: jnp.sin(jnp.pi * coord[0])
zero = lambda coord: 0.0
boundary_conditions = {"South":zero, "West":zero, "North":sine, "East":zero}

# Solve the Laplace equation with a JIT-compiled solver
sol = updes.pde_solver_jit(diff_operator=my_diff_operator, 
                    rhs_operator=my_rhs_operator, 
                    cloud=cloud, 
                    boundary_conditions=boundary_conditions, 
                    rbf=updes.polyharmonic,
                    max_degree=1)

# Visualize the solution
cloud.visualize_field(sol.vals, cmap="jet", projection="3d", title="RBF solution")
```

𝕌pdes can handle much complicated cases with little to no modifications to the code above. Check out further notebooks and scripts in the [documentation](https://ddrous.github.io/Updes/) and the folder [`demos`](./demos)!


## Dependencies
- **Core**: JAX - GMSH - Lineax - Matplotlib - Seaborn - Scikit-Learn
- **Optional**: PyVista - FFMPEG - QuartoDoc

See the `pyproject.toml` file the specific versions of the dependencies.


## Cite us !
If you use this software, please cite us with the following BibTeX entry:
```
@inproceedings{nzoyem2023comparison,
  title={A comparison of mesh-free differentiable programming and data-driven strategies for optimal control under PDE constraints},
  author={Nzoyem Ngueguin, Roussel Desmond and Barton, David AW and Deakin, Tom},
  booktitle={Proceedings of the SC'23 Workshops of The International Conference on High Performance Computing, Network, Storage, and Analysis},
  pages={21--28},
  year={2023}}
```

            

Raw data

            {
    "_id": null,
    "home_page": null,
    "name": "updes",
    "maintainer": null,
    "docs_url": null,
    "requires_python": null,
    "maintainer_email": null,
    "keywords": "differentiable-programming, radial-basis-function, meshfree, optimisation, differentiable-physics, PDEs",
    "author": null,
    "author_email": "Roussel Desmond Nzoyem <desmond.ngueguin@gmail.com>",
    "download_url": "https://files.pythonhosted.org/packages/1d/57/8a4e9d13c8b1fa52aa8388dbcd8cca976ff95820826f3b99668f30b067bc/updes-1.0.2.post1.tar.gz",
    "platform": null,
    "description": "# \ud835\udd4cpdes\n\n\ud835\udd4cpdes is a general-purpose library for mesh-free PDE simulation and control.\n- GitHub project: https://github.com/ddrous/Updes\n- Documentation: https://ddrous.github.io/Updes/\n\n\n## Features\n\ud835\udd4cpdes leverages Radial Basis Functions (RBFs) and JAX to provide the following features:\n- User-centric design: no need to re-implement a solver for each new PDE\n- Lightning fast mesh-free simulation via Radial Basis Functions\n- Robust differentiable simulation via JAX, and portable across CPU, GPU, and TPU\n- Support for Dirichlet, Neumann, Robin, and Periodic boundary conditions\n- Automatic generation of normals from 2D GMSH meshes\n\n\ud835\udd4cpdes in incredibly extendable, with additional features added frequently.\n\n\n## Getting started\nThe package is available on PyPI. You can install it with\n```\npip install updes\n```\n\nThe example below illustrates how to solve the Laplace equation with Dirichlet and Neumann boundary conditions:\n```python\nimport updes\nimport jax.numpy as jnp\n\n# Create a mesh-free cloud of points on a unit square\nfacet_types={\"South\":\"n\", \"West\":\"d\", \"North\":\"d\", \"East\":\"d\"}\ncloud = updes.SquareCloud(Nx=30, Ny=20, facet_types=facet_types)\n\n# Define the differential operator (left-hand side of the PDE)\ndef my_diff_operator(x, center, rbf, monomial, fields):\n    return updes.nodal_laplacian(x, center, rbf, monomial)\n\n# Define the right-hand side of the PDE\ndef my_rhs_operator(x, centers, rbf, fields):\n    return 0.0\n\n# Set a sin function as the Dirichlet BC on the North, and zero everywhere else\nsine = lambda coord: jnp.sin(jnp.pi * coord[0])\nzero = lambda coord: 0.0\nboundary_conditions = {\"South\":zero, \"West\":zero, \"North\":sine, \"East\":zero}\n\n# Solve the Laplace equation with a JIT-compiled solver\nsol = updes.pde_solver_jit(diff_operator=my_diff_operator, \n                    rhs_operator=my_rhs_operator, \n                    cloud=cloud, \n                    boundary_conditions=boundary_conditions, \n                    rbf=updes.polyharmonic,\n                    max_degree=1)\n\n# Visualize the solution\ncloud.visualize_field(sol.vals, cmap=\"jet\", projection=\"3d\", title=\"RBF solution\")\n```\n\n\ud835\udd4cpdes can handle much complicated cases with little to no modifications to the code above. Check out further notebooks and scripts in the [documentation](https://ddrous.github.io/Updes/) and the folder [`demos`](./demos)!\n\n\n## Dependencies\n- **Core**: JAX - GMSH - Lineax - Matplotlib - Seaborn - Scikit-Learn\n- **Optional**: PyVista - FFMPEG - QuartoDoc\n\nSee the `pyproject.toml` file the specific versions of the dependencies.\n\n\n## Cite us !\nIf you use this software, please cite us with the following BibTeX entry:\n```\n@inproceedings{nzoyem2023comparison,\n  title={A comparison of mesh-free differentiable programming and data-driven strategies for optimal control under PDE constraints},\n  author={Nzoyem Ngueguin, Roussel Desmond and Barton, David AW and Deakin, Tom},\n  booktitle={Proceedings of the SC'23 Workshops of The International Conference on High Performance Computing, Network, Storage, and Analysis},\n  pages={21--28},\n  year={2023}}\n```\n",
    "bugtrack_url": null,
    "license": null,
    "summary": "Universal Partial Differential Equations Simulator",
    "version": "1.0.2.post1",
    "project_urls": {
        "Documentation": "https://ddrous.github.io/Updes/",
        "Homepage": "https://github.com/ddrous/Updes"
    },
    "split_keywords": [
        "differentiable-programming",
        " radial-basis-function",
        " meshfree",
        " optimisation",
        " differentiable-physics",
        " pdes"
    ],
    "urls": [
        {
            "comment_text": "",
            "digests": {
                "blake2b_256": "e860cb3f2dccd6f122179f8adf008c8de7d63389b6842bfdf10c321ef020c0e4",
                "md5": "c30446246d907fd976066f6bdb30976d",
                "sha256": "5f7634843f2e7428d9973247bb510acc3980fba76e9bd1e921b358c087338aa0"
            },
            "downloads": -1,
            "filename": "updes-1.0.2.post1-py3-none-any.whl",
            "has_sig": false,
            "md5_digest": "c30446246d907fd976066f6bdb30976d",
            "packagetype": "bdist_wheel",
            "python_version": "py3",
            "requires_python": null,
            "size": 26170,
            "upload_time": "2024-06-21T00:47:53",
            "upload_time_iso_8601": "2024-06-21T00:47:53.513893Z",
            "url": "https://files.pythonhosted.org/packages/e8/60/cb3f2dccd6f122179f8adf008c8de7d63389b6842bfdf10c321ef020c0e4/updes-1.0.2.post1-py3-none-any.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": "",
            "digests": {
                "blake2b_256": "1d578a4e9d13c8b1fa52aa8388dbcd8cca976ff95820826f3b99668f30b067bc",
                "md5": "c5cae5752a82646fede17a7eed878dfc",
                "sha256": "421ae8d6234011c501fdbf899ffd88f215cab72ed0cf17ca314a9691404e2459"
            },
            "downloads": -1,
            "filename": "updes-1.0.2.post1.tar.gz",
            "has_sig": false,
            "md5_digest": "c5cae5752a82646fede17a7eed878dfc",
            "packagetype": "sdist",
            "python_version": "source",
            "requires_python": null,
            "size": 26769,
            "upload_time": "2024-06-21T00:47:54",
            "upload_time_iso_8601": "2024-06-21T00:47:54.854069Z",
            "url": "https://files.pythonhosted.org/packages/1d/57/8a4e9d13c8b1fa52aa8388dbcd8cca976ff95820826f3b99668f30b067bc/updes-1.0.2.post1.tar.gz",
            "yanked": false,
            "yanked_reason": null
        }
    ],
    "upload_time": "2024-06-21 00:47:54",
    "github": true,
    "gitlab": false,
    "bitbucket": false,
    "codeberg": false,
    "github_user": "ddrous",
    "github_project": "Updes",
    "travis_ci": false,
    "coveralls": false,
    "github_actions": true,
    "lcname": "updes"
}
        
Elapsed time: 0.30596s