Skip to content

Commit

Permalink
Rewrote statement of need, added some ideas
Browse files Browse the repository at this point in the history
  • Loading branch information
jzwar committed Dec 19, 2024
1 parent a69edf7 commit 40758ce
Showing 1 changed file with 26 additions and 3 deletions.
29 changes: 26 additions & 3 deletions joss/paper.md
Original file line number Diff line number Diff line change
Expand Up @@ -17,6 +17,8 @@ authors:
orcid: 0009-0000-1285-2364
equal-contrib: true
affiliation: 1
- name: Clemens Fricke
affiliation: 1
- name: Stefanie Elgeti
affiliation: 1
affiliations:
Expand All @@ -33,11 +35,32 @@ Some random reference [@piegl1996nurbs].

# Statement of need

The field of computational geometry and isogeometric analysis (IGA) has experienced significant advancements. There is a growing demand for versatile libraries that facilitate the prototyping and analysis of spline geometries in arbitrary dimensions and degrees. We introduce 'splinepy,' an open-source library that efficiently handles tensor product splines, specifically NURBS, B-splines, and (rational) Bezier splines [@piegl2012nurbs,@cohen2001geometric,@rogers2001introduction]. Generating and manipulating spline geometries is a crucial task in various fields in engineering and applied sciences. While many tools in this field exist already, there remains a need for a library that providing fast and versatile evaluation of spline geometries. To this end, splinepy leverages a combination of Python for ease of use and a high-performance C++ backend for computational efficiency, particularly crucial for handling high polynomial degrees.
The field of computational geometry and isogeometric analysis (IGA) has experienced significant advancements in recent years. As a conequence, there is a growing demand for versatile libraries that facilitate the prototyping and analysis of spline-based geometries and IGA-equations in arbitrary dimensions and degrees. We introduce 'splinepy,' an open-source library that efficiently handles tensor product splines, specifically NURBS, B-splines, and (rational) Bezier splines [@piegl2012nurbs,@cohen2001geometric,@rogers2001introduction]. Beyond that, generating and manipulating spline geometries is a crucial task in various fields in engineering and applied sciences, from data interpolation to CAD-design.

Although many tools for spline creation and manipulation exist to date, there remains a need for a library capable of producing splines in higher parametric dimensions, that provide fast evaluation in multi-query scenarios and are capable of handling large, computational demanding geometries. To this end, splinepy leverages a combination of Python for ease of use and a high-performance C++ backend for computational efficiency, particularly crucial for handling high polynomial degrees and high dimensions. Furthermore, splinepy is tailored towards IGA-applications, thus providing functionality for multipatch geometries - consisting of a high number of splines - like interface information and orientations between splines to facilitate coupling and imposition of boundary conditions.

While other python-based libraries provide similar functionality, for instance `PyNurbs` _citation_ or `NURSB-python` _citation_, they do not provide the required performance to evaluate a high number of spline elements, e.g. for matrix assembly for IGA-prototyping. There are highly specialized implementations for 1D- and 2D-splines of up to degree 3 *TO BE VERIFIED* in `SciPy` _citation_, that can outperform `splinepy`, however, there is no multivariate implementation for higher orders availabe.Other packages like `ndsplines` _citation_ that are implemented with a precompiled backend lack functionality beyond evaluation and fitting. Furthermore, none of these packages seem to be under active development. To the authers' best knowledge, there exists no library today, with n-dimensional splines of arbitrary degrees with a focus on geometry modeling for numerical analysis.

`splinepy` provides an intuitive syntax, making it accessible to a wide audience, including novice programmers and those focused on teaching. At the same time, its computational efficiency and versatility address both research and practical applications, providing valuable functionality for geometry manipulation and preprocessing for analysis such as finite elements or IsoGeometric Analysis [@hughes2005isogeometric, @cottrell2009isogeometric]. `splinepy` is designed for rapid prototyping of complex geometries and offers visualization options to analyze the new geometry and incorporate changes in short time.

# Feature Overview
```Ich dachte wir könnten an dieser Stelle vielleicht so vorgehen, dass wir jeweils das Feature kurz präsentieren und dann ein Bild ein streuseln```

`splinepy` provides four different types of splines, that is (rational) Bézier splines, BSplines and NURBS, all of which are provided up to 10 parametric dimensions in the default build (which is provided via pip) but this can be extended using custom builds. The Bézier splines build on the `bezman` _citation_ C++ library, where as the BSpline and NURBS backend builds on `BSplineLib` _citation_, both of which are developed and maintained by the same group. While some of the features (like arithmetic operations) are only available for Bézier type splines, most of the operations are available for independent of the spline architecture.

### Spline refinement
### Derivatives
### Spline creation, extraction and modification
### Fitting and Interpolation
### Mappings
### Arithmetic operations
### Microstructure construction
### Visualization
### Multipatch geometries and outputs
### Miscellaneous

Splinepy provides an intuitive syntax, making it accessible to a wide audience, including novice programmers and those focused on teaching. At the same time, its computational efficiency and versatility address both research and practical applications, providing valuable functionality for geometry manipulation and preprocessing for analysis such as finite elements or IsoGeometric Analysis [@hughes2005isogeometric, @cottrell2009isogeometric]. splinepy is designed for rapid prototyping of complex geometries and offers visualization options to analyze the new geometry and incorporate changes in short time.

# Applications (Some fancy pictures)
###
# State of the field
# Acknowledgement

Expand Down

0 comments on commit 40758ce

Please sign in to comment.