Skip to content
/ forcad Public

ForCAD - A parallel Fortran library for geometric modeling using NURBS

License

Notifications You must be signed in to change notification settings

gha3mi/forcad

Repository files navigation

GitHub Documentation fpm doc codecov License DOI

ForCAD: A parallel 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.

Main Features

  • Parallelized using OpenMP and do concurrent.
  • 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.

Examples

Installation

Requirements

Clone the repository

Clone the ForCAD repository from GitHub:

git clone https://github.com/gha3mi/forcad.git
cd forcad

Install PyVista (Optional)

To install PyVista, run the following command:

pip install pyvista

Running Examples with fpm

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.

Using ForCAD as a fpm Dependency

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"}

API documentation

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

Roadmap

For a detailed roadmap outlining upcoming features and enhancements, please refer to ROADMAP.md.

Contributing

To contribute to ForCAD, please review the CONTRIBUTING.md.

Citation

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}
}

References

  • 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

  • Ahrens, James, Geveci, Berk, Law, Charles, ParaView: An End-User Tool for Large Data Visualization, Visualization Handbook, Elsevier, 2005, ISBN-13: 9780123875822