lssfau / pe

This research project focuses on the development of the pe physics engine. pe is an advanced C++ framework for the simulation of rigid, completely undeformable bodies with arbitrary shape. pe offers both collision solvers for physically accurate simulations as well as fast solvers suitable for computer games. The major focus of pe are large-scale and massively parallel rigid body simulations with up to several billion interacting rigid bodies. The currently largest simulation with 28 billion non-spherical bodies was performed on the SuperMUC Petascale System at the Leibniz Supercomputing Center on 262144 processor cores.

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

** The pe is now part of waLBerla **
** The standalone version is no longer maintained **

The pe has the following dependencies:

Build-time dependencies:
   CMake >= 2.8.6

Run-time dependencies:
   Boost >= 1.46.1
   Irrlicht >= 1.7.9          (optional unless visualization is needed)
   MPI e.g. OpenMPI >= 1.4.3  (optional unless MPI parallelization is needed)
   OpenCL                     (optional unless GPGPU support is needed)
   gpusolve >= r304           (optional unless GPGPU support is needed)

Documentation dependencies:
   doxygen >= 1.7.5.1
   graphviz >= 2.28.0


In order to build the pe library two build systems can be used. The first one is a custom
configure script accepting a configuration file as an optional parameter. The configuration
options are described in ConfigFile which can be used as a template for your own
configuration. Thus building with a configuration file might work as follows:

cat > config-$HOST.txt <<EOF
   VERSION="debug"
   LIBRARY="static"
   COMPILER="gcc"
   PREPROCESSOR_FLAGS=
   COMPILER_FLAGS=
   LINKER_FLAGS=
   BLAS="no"
   IRRLICHT="yes"
   OPENCL="no"
   MPI="yes"
   MPI_INCLUDE_PATH=/usr/lib64/mpi/gcc/openmpi/include/
   MPI_LIBRARY_PATH=/usr/lib64/mpi/gcc/openmpi/lib64/
   MPI_LIBRARY="mpi_cxx mpi"
   MPI_PREINCLUDE="no"
EOF
./configure config-$HOST.txt
make


After building the library will be located in the lib/ subdirectory. The configure script also
supports out-of-source builds using BUILD_DIRECTORY configuration option in order to avoid
cluttering of the source tree.
If you need custom preprocessor, compiler or linker flags you can use the configuration
options PREPROCESSOR_FLAGS, COMPILER_FLAGS and LINKER_FLAGS. E.g. for profiling runs compile
with COMPILER_FLAGS=-pg and LINKER_FLAGS=-pg and COMPILER=gcc.

An alternative build system working on Unix as well as on Windows is a CMake based build.
CMake supports various generators. On Unix it can generate Makefiles for instance. The
configuration options can be specified on the command line of the CMake call:

mkdir build
cd build
CXX=g++ cmake -G "Unix Makefiles" -DCMAKE_BUILD_TYPE:STRING=RELEASE -DLIBRARY_TYPE:STRING=STATIC -DBLAS:BOOL=OFF -DMPI:BOOL=OFF -DMPI_PREINCLUDE:BOOL=OFF -DOPENCL:BOOL=OFF -DIRRLICHT:BOOL=OFF -DEXAMPLES:BOOL=OFF -DBoost_USE_STATIC_LIBS:BOOL=OFF ..
make VERBOSE=1


Specifying options on the command line is good for automating but is cumbersome otherwise. CMake
also supports configuration files:

cat > cache-$HOST.txt <<EOF
   set( CMAKE_BUILD_TYPE RELEASE CACHE STRING "" )
   set( LIBRARY_TYPE STATIC CACHE STRING "" )
   set( BLAS OFF CACHE BOOL "" )
   set( MPI ON CACHE BOOL "" )
   set( MPI_PREINCLUDE OFF CACHE BOOL "" )
   set( OPENCL OFF CACHE BOOL "" )
   set( IRRLICHT ON CACHE BOOL "" )
   set( EXAMPLES OFF CACHE BOOL "" )
   set( Boost_USE_STATIC_LIBS OFF CACHE BOOL "" )
   set( PREPROCESSOR_FLAGS "" CACHE STRING "" )
   set( COMPILER_FLAGS "" CACHE STRING "" )
   set( LINKER_FLAGS "" CACHE STRING "" )
EOF
mkdir build
cd build
CXX=g++ cmake -G "Unix Makefiles" -C../cache-$HOST.txt ..
make VERBOSE=1


On Windows CMake also supports generating Visual Studio project files:

mkdir build
cd build
cmake -G "Visual Studio 10 Win64" -C../cache-$HOST.txt ..

where cache-$HOST.txt might look like this:

set( CMAKE_BUILD_TYPE RELEASE CACHE STRING "" )
set( LIBRARY_TYPE STATIC CACHE STRING "" )
set( BLAS OFF CACHE BOOL "" )
set( MPI ON CACHE BOOL "" )
set( OPENCL OFF CACHE BOOL "" )
set( IRRLICHT OFF CACHE BOOL "" )
set( EXAMPLES ON CACHE BOOL "" )
set( Boost_USE_STATIC_LIBS ON CACHE BOOL "" )
set( BOOST_INCLUDEDIR "C:/Program Files/boost/boost_1_49_0/include" )
set( BOOST_LIBRARYDIR "C:/Program Files/boost/boost_1_49_0/lib64" )
set( PREPROCESSOR_FLAGS "" CACHE STRING "" )
set( COMPILER_FLAGS "" CACHE STRING "" )
set( LINKER_FLAGS "" CACHE STRING "" )

On Windows CMake also offers a convenient GUI for settings configuration options and generating
project files. On Unix a Curses based interface for CMake exists (ccmake).


Notes
-----
- OpenMPI 1.5.4 offers a binary installer on Windows
- dynamically linking boost libraries currently does not work on Windows
- the MPI configuration options should be determined by inspecting the output of
  "mpicc -showme:compile" and "mpicc -showme:link" and assigning the options to
  the correct configuration variables.

About

This research project focuses on the development of the pe physics engine. pe is an advanced C++ framework for the simulation of rigid, completely undeformable bodies with arbitrary shape. pe offers both collision solvers for physically accurate simulations as well as fast solvers suitable for computer games. The major focus of pe are large-scale and massively parallel rigid body simulations with up to several billion interacting rigid bodies. The currently largest simulation with 28 billion non-spherical bodies was performed on the SuperMUC Petascale System at the Leibniz Supercomputing Center on 262144 processor cores.

License:GNU General Public License v3.0


Languages

Language:C++ 98.1%Language:C 1.6%Language:CMake 0.3%