ForCAD: A Fortran library for Geometric Modeling using NURBS (Non-Uniform Rational B-Splines).
ForCAD supports B-Spline, NURBS, Bezier, and Rational Bezier curves, surfaces, and volumes.
- Create NURBS objects by specifying control points, weights and knots.
- Refine NURBS objects by inserting or removing knots and elevating degree.
- Compute basis functions and derivatives of NURBS objects.
- Obtain IGA elements connectivity.
- Obtain visualized elements connectivity and coordinates for geometry and control geometry.
- Mesh insertion into a NURBS object.
- Export NURBS objects to VTK files for visualization.
- Includes predefined NURBS shapes: Circle, Half Circle, Tetragon, Hexahedron, 2D Ring, Half 2D Ring, 3D Ring, Half 3D Ring, C-shapes.
- Rotate and translate NURBS objects.
- Visualization using provided python PyVista scripts.
- A Fortran compiler, such as GNU Fortran (
gfortran
), Intel Fortran Compiler (ifx/ifort
) or NVIDIA HPC SDK Fortran compiler (nvfortran
). - The Fortran Package Manager fpm.
- PyVista (Recommended) or ParaView for visualization. (Optional)
Clone the ForCAD repository from GitHub:
git clone https://github.com/gha3mi/forcad.git
cd forcad
To install PyVista, run the following command:
pip install pyvista
fpm run --example <file name excluding the .f90 extension>
After executing the examples, .vtk
files will be generated in the vtk
directory. To visualize these files, a show()
method is provided which utilizes PyVista. Alternatively, other visualization tools like ParaView can also be used.
If you want to use ForCAD as a dependency in your own fpm project,
you can easily include it by adding the following line to your fpm.toml
file:
[dependencies]
forcad = {git="https://github.com/gha3mi/forcad.git"}
The most up-to-date API documentation for the master branch is available here. To generate the API documentation for ForCAD using ford run the following command:
ford ford.yml
For a detailed roadmap outlining upcoming features and enhancements, please refer to ROADMAP.md.
Contributions to ForCAD are welcome!
- If you find any issues or would like to suggest improvements, please open an issue.
- If you've implemented new features, fixed bugs, or enhanced existing functionality, please consider submitting a pull request (PR).
- Please share your examples by submitting a pull request (PR).
If you use ForCAD in your research, please cite it as follows:
@software{seyed_ali_ghasemi_2024_10904447,
author = {Ghasemi, S. A.},
title = {gha3mi/ForCAD},
year = 2024,
publisher = {Zenodo},
doi = {10.5281/zenodo.10904447},
url = {https://doi.org/10.5281/zenodo.10904447}
}
-
Piegl, L., & Tiller, W. (1995). The NURBS Book. In Monographs in Visual Communications. Springer Berlin Heidelberg. https://doi.org/10.1007/978-3-642-97385-7
-
An Introduction to NURBS. (2001). Elsevier. https://doi.org/10.1016/b978-1-55860-669-2.x5000-3
-
Sullivan et al., (2019). PyVista: 3D plotting and mesh analysis through a streamlined interface for the Visualization Toolkit (VTK). Journal of Open Source Software, 4(37), 1450, https://doi.org/10.21105/joss.01450