Skip to content
Snippets Groups Projects
Select Git revision
  • master
  • v1.11.0
  • v1.10.0
  • v1.9.0
  • v1.8.0
  • v1.7.0
  • v1.6.0
  • v1.5.2
  • v1.5.1
  • v1.5.0
  • v1.4.2
  • v1.4.1
  • v1.4
  • v1.4.0
  • v1.3
  • v1.3.0
  • v1.2
  • v1.2.0
  • v1.1
  • v1.1.0
  • v1.0
21 results

README.md

Blame
  • ACM Collected Algorithms: DCUHRE and DQUAD

    This project provides a CMake framework, that automatically downloads the two Fortran integrator libraries DCUHRE and DQUAD from the ACM Collected Algorithms (https://calgo.acm.org/), converts them to C and builds them.

    Prerequisites

    What you need:

    Linux (Ubuntu)

    Use your distribution's package manager to install the necessary packages:

    $ sudo apt-get install cmake ninja-build gcc

    Mac OS X

    You will need one of the community package managers for Mac OS X: Homebrew or MacPorts. For installing one of these, please refer to their respective installation instructions.

    Homebrew

    $ brew install cmake ninja llvm

    MacPorts

    $ sudo port -v install cmake ninja clang-<XX>

    where you have to replace <XX> with the latest stable version of Clang. You can discover all available versions of Clang like this:

    $ port search --name --line --regex '^clang-?\d*\.?\d*$'

    Windows

    The easiest thing to do is using the Windows Subsystem for Linux (WSL) and follow the Linux instructions above.

    Otherwise, install Git for Windows for version control and cygwin, which is a large collection of GNU and Open Source tools which provide functionality similar to a Linux distribution on Windows. During the cygwin installation you'll be prompted to add additional packages. Search and select the following:

    • cmake, ninja and gcc-core for the compiler and the build system

    After cygwin finishes installing, use the cygwin terminal to start the build process.

    How to compile

    1. Clone this git repository or download the source code archive and unpack it to an arbitrary directory (e.g. calgo-integrators).

    2. Go to this directory and type cp ./CMakeUserPresets.template.json ./CMakeUserPresets.json.

    3. Next, type cmake --workflow --list-presets. A list of available build workflows will be shown to you.

    4. For configuring, building and installing the project, type cmake --workflow --preset user-shared-release-install. This will try to populate the ./build directory with a CMake configuration tree, execute the build and install the project. By default, the configured installation directory is ./install.

      But it will fail due to unaccepted licenses. Study the license text and proceed to the next step.

    5. Open ./CMakeUserPresets.json in your favorite editor and set "NetlibF2C_LICENSE_ACCEPTED": true in the first configure preset "user-config". Repeat step 4. It'll fail again with the next license. Study the license text and proceed to set "CalgoIntegrators_LICENSE_ACCEPTED": true.

    6. Repeat step 4. Configuring, building and installing should be successful now.

    7. Repeat step 6. for the other user workflow presets user-shared-debug-install, user-static-release-install and user-static-debug-install as needed.

    How to use

    Now, the integrator code is compiled and you can use it in other projects. The installed integrator package is discoverable by CMake as CalgoIntegrators. In the CMakeLists.txt of the other project, call:

    include(FetchContent)
    
    FetchContent_Declare(
        CalgoIntegrators
        GIT_REPOSITORY "https://gitlab.aei.uni-hannover.de/netlib/calgo-integrators.git"
        GIT_TAG v1.11.0
        SYSTEM
        FIND_PACKAGE_ARGS 1.11.0 CONFIG NAMES CalgoIntegrators
    )
    set(CalgoIntegrators_INCLUDE_PACKAGING TRUE)
    FetchContent_MakeAvailable(CalgoIntegrators)

    This discovers an installed version of the CalgoIntegrators package or adds it to the other project's install targets. To help CMake discover the CalgoIntegrators package, call CMake for the other project like this:

    $ cmake -B ./build -D "CMAKE_PREFIX_PATH=/path/to/CalgoIntegrators/install/prefix"

    Replace the path to the CalgoIntegrators install prefix with the actual path on your system! If CalgoIntegrators is installed in a proper system-wide location, the CMAKE_PREFIX_PATH shouldn't be necessary.

    This makes two CMake targets available to you, the Netlib::DCUHRE and the Netlib::DQUAD library targets (static or shared depends on the value of BUILD_SHARED_LIBS in the other project). The Netlib::libf2c is already contained in these targets.

    For more information read the two papers referenced below.

    References

    Paola Favati, Grazia Lotti, and Francesco Romani. 1991. Algorithm 691: Improving QUADPACK automatic integration routines. ACM Trans. Math. Softw. 17, 2 (June 1991), 218–232. DOI:https://dl.acm.org/doi/10.1145/108556.108580

    Jarle Berntsen, Terje O. Espelid, and Alan Genz. 1991. Algorithm 698: DCUHRE: an adaptive multidemensional integration routine for a vector of integrals. ACM Trans. Math. Softw. 17, 4 (Dec. 1991), 452–456. DOI:https://dl.acm.org/doi/10.1145/210232.210234