Movatterモバイル変換


[0]ホーム

URL:


Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

ForCAD - A parallel Fortran library for geometric modeling using NURBS

License

NotificationsYou must be signed in to change notification settings

gha3mi/forcad

Repository files navigation

GitHubVersionDocumentationSetup Fortran Conda CI/CDcodecovLicenseDOI

ForCAD: A parallel Fortran library for geometric modeling using NURBS (Non-Uniform Rational B-Splines).

ForCAD supportsB-Spline,NURBS,Bezier andRational Bezier curves, surfaces and volumes.

Table of Contents

Main Features

  • Parallelized usingdo concurrent.
  • Create NURBS objects by specifying control points, weights and knots.
  • Refine NURBS objects by inserting or removing knots and elevating degree.
  • Compute analytical basis functions and their first and second derivatives for NURBS and B-Spline objects.
  • Generation of IGA-compatible element connectivity and shape functions.
  • 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.
  • Export of NURBS curves and surfaces to IGES format (volumes currently not supported).
  • 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.
  • Least squares fitting for NURBS curves, surfaces and volumes.
  • Numerical integration of: NURBS curve length, NURBS surface area and NURBS volume.

Examples

Below are some sample outputs from theexamples directory:

Installation

Requirements

Clone the repository

Clone the ForCAD repository from GitHub:

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

Install PyVista (Optional)

To install PyVista, run the following command:

pip install pyvista

By default PyVista visualization is enabled. To disable it, define the preprocessor flagNOSHOW_PYVISTA in thefpm.toml file or pass it as a compiler flag.

Using fpm

Running Examples with fpm

fpm run --example<file name excluding the .f90 extension> --compiler gfortran --profile release --flag"-ftree-parallelize-loops=8 -march=native"

After executing the examples,.vtk files will be generated in thevtk directory. To visualize these files, ashow() 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 yourfpm.toml file:

[dependencies]forcad = {git="https://github.com/gha3mi/forcad.git"}

Using CMake

Install

cmake -S. -B build/cmake -DCMAKE_BUILD_TYPE=Release -DBUILD_SHARED_LIBS=ON -DCMAKE_INSTALL_PREFIX=. -G Ninjacmake --build build/cmake --config Releasecmake --install build/cmake --config Release --verbose

Uninstall

cmake --build build/cmake --target uninstall

Using ForCAD with CMake

find_package(forcad REQUIRED)add_executable(app main.f90)target_link_libraries(appPRIVATE forcad::forcad)

Configuration

Do Concurrent Support

Compiler flags for enablingdo concurrent parallelism:

CompilerFlag(s)
gfortran-fopenmp -ftree-parallelize-loops=n
ifx-qopenmp -fopenmp-target-do-concurrent
nvfortran-stdpar=multicore,gpu -Minfo=stdpar,accel
flang(-new)-fopenmp -fdo-concurrent-to-openmp=[host|device]
lfortran?

flang-new 21.1.0: warning: Mappingdo concurrent to OpenMP is still experimental.

Compiler flags can be passed to fpm using the--flag option, for example:

fpm build --flag"-stdpar=multicore,gpu -Minfo=stdpar,accel"

Alternatively, flags can be added to afpm.rsp file in the root directory of the project.

Precision Configuration

The library usesdouble precision (real64) by default for all real-valued computations. To change the precision, you can define one of the following preprocessor flags during compilation:

Preprocessor FlagFortran KindDescription
REAL32selected_real_kind(6)Single precision
REAL64(default)selected_real_kind(15)Double precision
REALXDPselected_real_kind(18)Extended double precision
REAL128selected_real_kind(33)Quadruple precision

Note: The examplesexample_ppm1.f90,example_ppm2.f90 andexample_ppm3.f90 use theForColormap library, which only supportsREAL64 precision.

Example: Building with double precision

fpm build --profile release --flag"-DREAL64"

Dependencies

flowchart LR  N1[forcad]  N2[forIGES]  N3[fordebug]  N4[forunittest]  N5[forimage]  N6[forcolormap]  N7[fortime]  N8[FACE]  click N1 href "https://github.com/gha3mi/forcad" "A parallel Fortran library for geometric modeling using NURBS"  click N2 href "https://github.com/rweed/forIGES" "Modern Fortran Library for Reading and Writing IGES CAD Files"  click N3 href "https://github.com/gha3mi/fordebug" "A Fortran library for handling errors, warnings and info messages with debugging support in pure procedures"  click N4 href "https://github.com/gha3mi/forunittest" "A Fortran library for unit testing"  click N5 href "https://github.com/gha3mi/forimage" "A Fortran library for processing and editing images and managing colors"  click N6 href "https://github.com/vmagnin/forcolormap" "A Fortran colormap library"  click N7 href "https://github.com/gha3mi/fortime" "A Fortran library for measuring elapsed time, DATE_AND_TIME time, CPU time, OMP time and MPI time"  click N8 href "https://github.com/szaghi/FACE" "Fortran Ansi Colors (and Styles) Environment"  %% core dependencies  N1 --> N2  N1 --> N3  N3 --> N7  N7 --> N8  %% example dependency (dashed line)  N1 -.->|example| N6  N6 --> N5  %% test dependency (dotted line)  N1 ...->|test| N4  N4 --> N8
Loading

Graph generated withfpm-deps, modified to include example and test dependencies.

CI Status

Compilermacosubuntuwindows
flang-new-fpm ✅ cmake ✅fpm ✅ cmake ✅
gfortranfpm ✅ cmake ✅fpm ✅ cmake ✅fpm ✅ cmake ✅
ifx-fpm ✅ cmake ✅fpm ✅ cmake ✅
nvfortran-fpm ✅ cmake ✅-

This table is automatically generated by the CI workflow usingsetup-fortran-conda.

API documentation

The most up-to-date API documentation for the master branch is availablehere.To generate the API documentation for ForCAD usingford run the followingcommand:

ford README.md

Contributing

To contribute to ForCAD, please review theCONTRIBUTING.md.

Citation

If you use ForCAD in your research, please cite it as follows:

@software{seyed_ali_ghasemi_2025_10904447,author       ={Ghasemi, S. A.},title        ={gha3mi/ForCAD},year         ={2025},publisher    ={Zenodo},doi          ={10.5281/zenodo.10904447},url          ={https://doi.org/10.5281/zenodo.10904447}}

References


[8]ページ先頭

©2009-2026 Movatter.jp