IFEM - Isogeometric Toolbox for the solution of PDEs
Go to file
2017-06-20 02:49:38 +02:00
3rdparty clang 3.7 related fixes 2016-01-31 13:49:45 +01:00
Apps Changed: Simplified the SIMNodalConstraint class a bit by moving the 2017-06-12 06:17:35 +02:00
cmake add static analysis tests 2017-05-31 22:20:49 +02:00
doc the documentation has been moved to the appropriate repository 2017-05-03 10:31:47 +02:00
jenkins add static analysis tests 2017-05-31 22:20:49 +02:00
scripts Fixed: Account for that the IFEM package summary has moved 2017-06-20 02:49:38 +02:00
src Added: Projection of analytical secondary solution 2017-06-20 02:49:38 +02:00
.gitignore add: cleanup status, ignore common apps/build folders 2017-02-06 09:09:10 +01:00
CMakeLists.txt add static analysis tests 2017-05-31 22:20:49 +02:00
COPYING Added: Install documentation and license, including the new COPYING file 2015-07-10 22:02:46 +02:00
README.md README: libcereal is only available for ubuntu 16.04+ 2017-05-16 10:19:54 +02:00

IFEM project

Introduction

IFEM is an object-oriented toolbox for implementing isogeometric finite element solvers for linear and nonlinear partial differential equations. The toolbox was developed through the ICADA project at SINTEF Digital. The purpose of this code is to serve as a common base for isogeometric PDE-simulators, using splines and NURBS as basis functions in the finite element formulations. The toolbox contains methods for doing linear and non-linear, stationary and dynamic time-domain analyses, as well as eigenvalue analyses.

Module overview

The simulation toolbox is organized into a set of modules, organized as class hierarchies implemented in the C++ language. The top-level driver is organized in the class SIMbase and its sub-classes. These classes have methods for reading model data from an input file, to assemble the linearized algebraic system of equations resulting from the finite element discretization, and to solve that system. It also contains methods for writing a VTF-file with results.

The core of the finite element implementation is contained in the class ASMbase and its sub-classes, which have methods for evaluating the element matrices involved and assembling them into the system matrices. There is typically one ASMbase object for each spline patch in the model.

The physical problem-dependent data and methods are accessed via an abstract interface class, Integrand, through which the application programmer can implement the weak form of the underlying finite element problem.

The actual splines evaluation is performed through the GoTools library, which is not part of the current package. In addition, this code depends on the ARPACK, LAPACK and BLAS libraries. Optionally, the SAMG algebraic multi-grid solver and the SuperLU direct solver (public domain http://crd.lbl.gov/~xiaoye/SuperLU) may be included. The Ceetron VTFAPI library may also be included for direct export of simulations results to GLview VTF-files.

Getting all dependencies

A number of things need to be set up properly to compile the IFEM library. First, we will add inhouse dependencies by a secondary repository.

  1. Add the IFEM repository at https://launchpad.net/~ifem/ (follow the instructions on that site)

  2. Install development tools and compilers by typing

    sudo apt-get install cmake g++ gfortran

  3. Install required official libraries

    sudo apt-get install libboost-dev libarpack2-dev libsuperlu3-dev

  4. Install required inhouse GoTools libraries by typing

    sudo apt-get install libgotools-core-dev libgotools-trivariate-dev

    There are a number of other GoTools libraries available also, but the two above are the only ones required to build IFEM simulators.

  5. [optional] Install PETSc from the official webpage http://www.mcs.anl.gov/petsc/download/

  6. [optional] Install LR-splines by typing

    sudo apt-get install liblrspline1-dev

  7. [optional] Install support for HDF5 output typing (one or both commands, the second one is needed only if you want to build parallel applications)

    sudo apt-get install libhdf5-serial-dev
    sudo apt-get install libhdf5-openmpi-dev

  8. [optional] Install support for [de]serialization of simulator state. This package is needed if you want to equip your simulator with restart capabilities. Install it by typing

    sudo apt-get install libcereal-dev

    Note: it is only available for Ubuntu 16.04 and later.

  9. [optional] Install the VTF writer. This is proprietary software that cannot be shared openly.
    Send email to Trond.Kvamsdal@sintef.no and ask for them.

Getting the code

Navigate to the folder in which you want the IFEM source installed and type

git clone https://github.com/OPM/IFEM

Compiling the code

Navigate to the root folder of IFEM source, here denoted by <IFEM root>. Then

  1. mkdir Debug
  2. cd Debug
  3. cmake .. -DCMAKE_BUILD_TYPE=Debug [<IFEM-options>]
  4. make

where <IFEM-options> is an optional list of sub-modules you may choose to activate or deactivate in your build. See the file <IFEM root>/cmake/Modules/IFEMOptions.cmake for a complete list of available options and their default setting.

This will compile the libraries which can be found in the Debug/libsub-folder. Change all instances of Debug with Release to drop debug-symbols, and get a faster running code.

Testing the code

IFEM uses the cmake test system. To compile and run all regression- and unit-tests, navigate to your build folder (i.e. <IFEM root>/Debug) and type

make check