In response to a request in a previous thread by @Rob77 for a Fortran library for creating lines and surfaces, I have created a package of Modern Fortran C-Interoperability interfaces to the SINTEF Spline Library (SISL). See https://github/SINTEF-Geometry/SISL. SISL is a package of over 600 C routines that date back to the late 1980s and are part of the SINTEF Geometry libraries. Most of the 600 routines are either low-level routines or routines not documented in the most recent SISL reference manual which is quite old (March 2005). I have implemented interfaces for all but a handful of the C functions described in version 4.4 of the SISL reference manual. In total, I’ve implemented interfaces for about 171 or so of the routines described in the reference manual. The routines I chose not to support are graphics routines that serve as placeholders for user supplied routines of the same name that call the users favorite graphics package.
In addition to the base SISL routines, I have also created Fortran versions of the 15 C|++ example problems provided with the SISL library. As of today (March 7, 2021) the status of this project is as follows
All of the interfaces compile without error using Intel oneAPI Fortran and C compilers as well as GCC gfortran 9.2 and gfortran 10.1 compilers
Initial tests run useing the example programs show that the SISL routines called by the example programs produce the same results as the C++ examples with the C library with one exception. Example15 implements two simple ray-tracing algorithms (one labeled robust and one quick) that finds the intersection between a line and a B-spline surface. The robust algorithm generates the same result as C++ but the Fortran implemenation of the quick algorithm produces 5 fewer points than the C++ version. I think I know the reason but I’ve not had time to verify it.
One example exhibits a small memory leak with GCC 9 (running under valgrind) that I’ve been unable to trace. All the other examples show no leaks.
The example problems only call a small subset of the total number of C funtions in the SISL library but they are representative of all the other functions. To do a proper V&V I’ll have to write unit tests that exercise all of the interfaces. That will take several months of time I don’t have so I’ve decided to release the code into the wild as a github project in the hope that interested Fortraners will take a look at the code, try creating their own test problems and let me know what works and what doesn’t.
The code along with some preliminary documentation, build instructions etc can be downloaded from: GitHub - rweed/forSISL: Modern Fortran interfaces to the SINTEF Spline Library (SISL). The code is currently only supported on Linux systems. However, the entire codebase consist of only 15 files so porting to a Mac or Windows as an Xcode or Visual Studio project should be straigthforward.
Note you don’t need the SINTEF library to build forSISL but you do need it to run the examples and build your own applications.
So I request interested parties look the code over and let me know what you think.