Skip to content

Commit ffe47dc

Browse files
committed
- performance improvement: added AVX support for TimeStepDFSPH, DragForce_Gissler2017, Viscosity_Standard, Viscosity_Weiler2018, MicropolarModel_Bender2017
- added AVX support for 2D simulations - added VTk export of rigid bodies - added parameter to control min CFL step size - cleaned up classes of graphical user interface - exchanged Static/DynamicBoundarySimulator by SPHSimulator which can handle dynamic and static scenes - added regular surface sampling - updated to Eigen 3.3.7 - bugfixes
1 parent e661524 commit ffe47dc

202 files changed

Lines changed: 10331 additions & 6212 deletions

File tree

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

CMake/Common.cmake

Lines changed: 22 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,11 +3,24 @@ set(CMAKE_RUNTIME_OUTPUT_DIRECTORY_DEBUG "${CMAKE_SOURCE_DIR}/bin")
33
set(CMAKE_RUNTIME_OUTPUT_DIRECTORY_RELEASE "${CMAKE_SOURCE_DIR}/bin")
44
set(CMAKE_RUNTIME_OUTPUT_DIRECTORY_RELWITHDEBINFO "${CMAKE_SOURCE_DIR}/bin")
55
set(CMAKE_RUNTIME_OUTPUT_DIRECTORY_MINSIZEREL "${CMAKE_SOURCE_DIR}/bin")
6-
set(LIBRARY_OUTPUT_PATH ${CMAKE_SOURCE_DIR}/lib)
6+
set(LIBRARY_OUTPUT_PATH ${CMAKE_BINARY_DIR}/lib)
77
set(CMAKE_DEBUG_POSTFIX "_d")
88
set(CMAKE_RELWITHDEBINFO_POSTFIX "_rd")
99
set(CMAKE_MINSIZEREL_POSTFIX "_ms")
1010

11+
include(CMakeDependentOption)
12+
13+
OPTION(USE_DOUBLE_PRECISION "Use double precision" OFF)
14+
if (USE_DOUBLE_PRECISION)
15+
add_definitions( -DUSE_DOUBLE)
16+
message("AVX is only supported for single precision.")
17+
endif (USE_DOUBLE_PRECISION)
18+
19+
cmake_dependent_option(USE_AVX "Use AVX" ON "NOT USE_DOUBLE_PRECISION" OFF)
20+
if (USE_AVX)
21+
add_definitions( -DUSE_AVX)
22+
endif()
23+
1124
if (NOT WIN32)
1225
if (NOT EXISTS ${CMAKE_BINARY_DIR}/CMakeCache.txt)
1326
if (NOT CMAKE_BUILD_TYPE)
@@ -31,6 +44,9 @@ if (WIN32)
3144
set(CMAKE_CXX_FLAGS_RELEASE "/MD /MP /Ox /Ob2 /Oi /Ot /fp:fast /D NDEBUG")
3245
set(CMAKE_CXX_FLAGS_RELWITHDEBINFO "/MD /Zi /MP /Ox /Ob2 /Oi /Ot /fp:fast /D NDEBUG")
3346
set(CMAKE_CXX_FLAGS_DEBUG "${CMAKE_CXX_FLAGS_DEBUG} /MP")
47+
if (USE_AVX)
48+
add_compile_options("/arch:AVX")
49+
endif()
3450
endif (WIN32)
3551

3652
if (UNIX)
@@ -39,12 +55,17 @@ if (UNIX)
3955
set(CMAKE_CXX_FLAGS_RELEASE "-O3 -DNDEBUG -march=native")
4056
set(CMAKE_CXX_FLAGS_RELWITHDEBINFO "-O3 -DNDEBUG -march=native")
4157
set(CMAKE_CXX_FLAGS_DEBUG "${CMAKE_CXX_FLAGS_DEBUG}")
58+
if (USE_AVX)
59+
add_compile_options("-mavx")
60+
endif()
4261
endif (UNIX)
4362

4463
if(APPLE)
4564
set(CMAKE_MACOSX_RPATH 1)
4665
endif()
4766

67+
if (MSVC)
4868
add_definitions(-D_CRT_SECURE_NO_DEPRECATE)
69+
endif(MSVC)
4970

5071
set(CMAKE_CXX_STANDARD 11)

CMake/DataCopyTargets.cmake

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,16 @@
1+
add_custom_target(CopySPlisHSPlasHShaders
2+
${CMAKE_COMMAND} -E copy_directory
3+
${PROJECT_SOURCE_DIR}/data/shaders
4+
${CMAKE_RUNTIME_OUTPUT_DIRECTORY}/resources/shaders
5+
COMMENT "Copying SPlisHSPlasH shaders"
6+
)
7+
set_target_properties(CopySPlisHSPlasHShaders PROPERTIES FOLDER "Data copy")
8+
9+
add_custom_target(CopyPBDShaders
10+
${CMAKE_COMMAND} -E copy_directory
11+
${PBD_INCLUDE_DIR}/data/shaders
12+
${CMAKE_RUNTIME_OUTPUT_DIRECTORY}/resources/pbd_shaders
13+
COMMENT "Copying PBD shaders"
14+
)
15+
add_dependencies(CopyPBDShaders Ext_PBD)
16+
set_target_properties(CopyPBDShaders PROPERTIES FOLDER "Data copy")

CMake/FindEigen3.cmake

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -63,7 +63,7 @@ else (EIGEN3_INCLUDE_DIR)
6363

6464
find_path(EIGEN3_INCLUDE_DIR NAMES signature_of_eigen3_matrix_library
6565
PATHS
66-
${PROJECT_PATH}/extern/eigen
66+
${PROJECT_SOURCE_DIR}/extern/eigen
6767
${CMAKE_INSTALL_PREFIX}/include
6868
${KDE4_INCLUDE_DIR}
6969
PATH_SUFFIXES eigen3 eigen

CMake/NeighborhoodSearch.cmake

Lines changed: 2 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,5 @@
11
include(ExternalProject)
22

3-
if(BUILD_SHARED_LIBS)
4-
set(LIB_PREFIX ${CMAKE_SHARED_LIBRARY_PREFIX})
5-
set(LIB_SUFFIX ${CMAKE_SHARED_LIBRARY_SUFFIX})
6-
else(BUILD_SHARED_LIBS)
7-
set(LIB_PREFIX ${CMAKE_STATIC_LIBRARY_PREFIX})
8-
set(LIB_SUFFIX ${CMAKE_STATIC_LIBRARY_SUFFIX})
9-
endif(BUILD_SHARED_LIBS)
10-
113
option(USE_GPU_NEIGHBORHOOD_SEARCH "Use GPU neighborhood search" OFF)
124

135
if(USE_GPU_NEIGHBORHOOD_SEARCH)
@@ -39,9 +31,9 @@ else(USE_GPU_NEIGHBORHOOD_SEARCH)
3931
## CompactNSearch
4032
ExternalProject_Add(
4133
Ext_NeighborhoodSearch
42-
PREFIX "${CMAKE_SOURCE_DIR}/extern/CompactNSearch"
34+
PREFIX "${CMAKE_BINARY_DIR}/extern/CompactNSearch"
4335
GIT_REPOSITORY https://github.com/InteractiveComputerGraphics/CompactNSearch.git
44-
GIT_TAG "daf73f4d321ea3cfbdc88d23f56d8aaa0083479a"
36+
GIT_TAG "3f11ece16a419fc1cc5795d6aa87cb7fe6b86960"
4537
INSTALL_DIR ${ExternalInstallDir}/NeighborhoodSearch
4638
CMAKE_ARGS -DCMAKE_BUILD_TYPE=${EXT_CMAKE_BUILD_TYPE} -DCMAKE_CXX_FLAGS=${CMAKE_CXX_FLAGS} -DCMAKE_CXX_FLAGS_RELEASE=${CMAKE_CXX_FLAGS_RELEASE} -DCMAKE_INSTALL_PREFIX:PATH=${ExternalInstallDir}/NeighborhoodSearch -DUSE_DOUBLE_PRECISION:BOOL=${USE_DOUBLE_PRECISION}
4739
)

CMake/SetUpExternalProjects.cmake

Lines changed: 78 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,78 @@
1+
if(BUILD_SHARED_LIBS)
2+
set(LIB_PREFIX ${CMAKE_SHARED_LIBRARY_PREFIX})
3+
set(LIB_SUFFIX ${CMAKE_SHARED_LIBRARY_SUFFIX})
4+
else(BUILD_SHARED_LIBS)
5+
set(LIB_PREFIX ${CMAKE_STATIC_LIBRARY_PREFIX})
6+
set(LIB_SUFFIX ${CMAKE_STATIC_LIBRARY_SUFFIX})
7+
endif(BUILD_SHARED_LIBS)
8+
9+
## NeighborhoodSearch
10+
include(NeighborhoodSearch)
11+
12+
## Discregrid
13+
ExternalProject_Add(
14+
Ext_Discregrid
15+
PREFIX "${CMAKE_BINARY_DIR}/extern/Discregrid"
16+
GIT_REPOSITORY https://github.com/InteractiveComputerGraphics/Discregrid.git
17+
GIT_TAG "0b69062ff9c56fbb6dcecd296652028bedbacf0e"
18+
INSTALL_DIR ${ExternalInstallDir}/Discregrid
19+
CMAKE_ARGS -DCMAKE_BUILD_TYPE:STRING=${EXT_CMAKE_BUILD_TYPE} -DCMAKE_INSTALL_PREFIX:PATH=${ExternalInstallDir}/Discregrid -DBUILD_CMD_EXECUTABLE:BOOL=0 -DEIGEN3_INCLUDE_DIR:PATH=${EIGEN3_INCLUDE_DIR}
20+
)
21+
ExternalProject_Get_Property(Ext_Discregrid INSTALL_DIR)
22+
set(DISCREGRID_INCLUDE_DIR ${INSTALL_DIR}/include)
23+
set(DISCREGRID_DEBUG_LIB ${INSTALL_DIR}/lib/${LIB_PREFIX}Discregrid_d${LIB_SUFFIX})
24+
set(DISCREGRID_LIB ${INSTALL_DIR}/lib/${LIB_PREFIX}Discregrid${LIB_SUFFIX})
25+
set(DISCREGRID_LIBRARIES
26+
optimized ${DISCREGRID_LIB}
27+
debug ${DISCREGRID_DEBUG_LIB}
28+
)
29+
unset(INSTALL_DIR)
30+
31+
## GenericParameters
32+
ExternalProject_Add(
33+
Ext_GenericParameters
34+
PREFIX "${CMAKE_BINARY_DIR}/extern/GenericParameters"
35+
GIT_REPOSITORY https://github.com/InteractiveComputerGraphics/GenericParameters.git
36+
GIT_TAG "5e43547e9d7099ac0759b75fa5e4e2115ca9cc9f"
37+
INSTALL_DIR ${ExternalInstallDir}/GenericParameters
38+
CMAKE_ARGS -DCMAKE_BUILD_TYPE=${EXT_CMAKE_BUILD_TYPE} -DCMAKE_INSTALL_PREFIX:PATH=${ExternalInstallDir}/GenericParameters -DGENERICPARAMETERS_NO_TESTS:BOOL=1
39+
)
40+
ExternalProject_Get_Property(Ext_GenericParameters INSTALL_DIR)
41+
set(GENERICPARAMETERS_INCLUDE_DIR ${INSTALL_DIR}/include)
42+
unset(INSTALL_DIR)
43+
44+
## PositionBasedDynamics
45+
include(ExternalProject)
46+
ExternalProject_Add(
47+
Ext_PBD
48+
PREFIX "${CMAKE_BINARY_DIR}/extern/PositionBasedDynamics"
49+
GIT_REPOSITORY https://github.com/InteractiveComputerGraphics/PositionBasedDynamics.git
50+
GIT_TAG "b142aad449337cc091611d79a5f1fff85ccc6c40"
51+
INSTALL_DIR ${ExternalInstallDir}/PositionBasedDynamics
52+
DEPENDS Ext_GenericParameters Ext_Discregrid
53+
CMAKE_ARGS -DCMAKE_BUILD_TYPE=${EXT_CMAKE_BUILD_TYPE}
54+
-DCMAKE_INSTALL_PREFIX:PATH=${ExternalInstallDir}/PositionBasedDynamics
55+
-DPBD_NO_DEMOS:BOOL=1
56+
-DPBD_EXTERNALINSTALLDIR:PATH=${ExternalInstallDir}
57+
-DUSE_DOUBLE_PRECISION:BOOL=${USE_DOUBLE_PRECISION}
58+
-DGenericParameters_INCLUDE_DIR:PATH=${GENERICPARAMETERS_INCLUDE_DIR}
59+
-DDiscregrid_INCLUDE_DIR:PATH=${DISCREGRID_INCLUDE_DIR}
60+
-DDiscregrid_DEBUG_LIB:FILEPATH=${DISCREGRID_DEBUG_LIB}
61+
-DDiscregrid_LIB:FILEPATH=${DISCREGRID_LIB}
62+
)
63+
ExternalProject_Get_Property(Ext_PBD INSTALL_DIR)
64+
set(PBD_INCLUDE_DIR ${INSTALL_DIR}/include)
65+
set(PBD_LIBRARIES
66+
optimized ${INSTALL_DIR}/lib/${LIB_PREFIX}Simulation${LIB_SUFFIX}
67+
debug ${INSTALL_DIR}/lib/${LIB_PREFIX}Simulation_d${LIB_SUFFIX}
68+
optimized ${INSTALL_DIR}/lib/${LIB_PREFIX}PositionBasedDynamics${LIB_SUFFIX}
69+
debug ${INSTALL_DIR}/lib/${LIB_PREFIX}PositionBasedDynamics_d${LIB_SUFFIX}
70+
optimized ${INSTALL_DIR}/lib/${LIB_PREFIX}Utils${LIB_SUFFIX}
71+
debug ${INSTALL_DIR}/lib/${LIB_PREFIX}Utils_d${LIB_SUFFIX}
72+
)
73+
unset(INSTALL_DIR)
74+
# This is a workaround to prepend the include directories of PBD.
75+
# TODO change include path of PBD
76+
add_library(PBD_includes INTERFACE)
77+
add_dependencies(PBD_includes Ext_PBD)
78+
target_include_directories(PBD_includes INTERFACE ${PBD_INCLUDE_DIR})

CMakeLists.txt

Lines changed: 38 additions & 64 deletions
Original file line numberDiff line numberDiff line change
@@ -1,88 +1,62 @@
1+
################################################################################
2+
# general CMake and project setup
3+
################################################################################
14
cmake_minimum_required(VERSION 3.1)
25

36
project(SPlishSPlasH)
47

5-
set(PROJECT_PATH ${PROJECT_SOURCE_DIR})
6-
include_directories(${PROJECT_SOURCE_DIR})
7-
88
set(CMAKE_MODULE_PATH "${CMAKE_SOURCE_DIR}/CMake" ${CMAKE_MODULE_PATH})
99
set_property(GLOBAL PROPERTY USE_FOLDERS ON)
1010

11-
include(${PROJECT_PATH}/CMake/Common.cmake)
12-
13-
add_definitions(-DSPH_DATA_PATH="../data")
14-
11+
include(Common)
1512
if (NOT WIN32)
1613
message(STATUS "Build type: ${CMAKE_BUILD_TYPE}")
1714
endif()
1815

19-
OPTION(USE_DOUBLE_PRECISION "Use double precision" ON)
20-
if (USE_DOUBLE_PRECISION)
21-
add_definitions( -DUSE_DOUBLE)
22-
endif (USE_DOUBLE_PRECISION)
23-
24-
set(ExternalInstallDir "${CMAKE_SOURCE_DIR}/extern/install" CACHE INTERNAL "")
16+
set(ExternalInstallDir "${CMAKE_BINARY_DIR}/extern/install" CACHE INTERNAL "")
2517
set(EXT_CMAKE_BUILD_TYPE ${CMAKE_BUILD_TYPE} CACHE INTERNAL "")
2618
if (NOT ${CMAKE_BUILD_TYPE} STREQUAL "Debug")
2719
set(EXT_CMAKE_BUILD_TYPE "Release" CACHE INTERNAL "")
2820
endif()
2921

30-
include(${PROJECT_PATH}/CMake/NeighborhoodSearch.cmake)
31-
32-
if (WIN32)
33-
subdirs(
34-
extern/zlib
35-
extern/partio
36-
extern/MD5
37-
extern/tinyexpr
38-
SPlisHSPlasH Utilities)
39-
else()
40-
subdirs(
41-
extern/zlib
42-
extern/partio
43-
extern/md5
44-
extern/tinyexpr
45-
SPlisHSPlasH Utilities)
46-
endif()
22+
set(TOPLEVEL_INCLUDE_DIR ${PROJECT_SOURCE_DIR})
23+
set(SPH_DATA_PATH "\"../data\"")
4724

25+
################################################################################
26+
# foreign external libraries
27+
################################################################################
28+
add_subdirectory(extern/zlib)
29+
add_subdirectory(extern/partio)
30+
add_subdirectory(extern/md5)
31+
add_subdirectory(extern/tinyexpr)
4832
if (NOT SPH_LIBS_ONLY)
49-
if (WIN32)
50-
add_subdirectory(extern/freeglut)
51-
endif()
5233
add_subdirectory(extern/AntTweakBar)
5334
add_subdirectory(extern/glew)
54-
add_subdirectory(Simulators)
55-
add_subdirectory(Tools)
56-
add_subdirectory(Tests)
35+
if(WIN32)
36+
add_subdirectory(extern/freeglut)
37+
endif()
5738
endif()
5839

59-
## PositionBasedDynamics
60-
include(ExternalProject)
61-
ExternalProject_Add(
62-
Ext_PBD
63-
PREFIX "${CMAKE_SOURCE_DIR}/extern/PositionBasedDynamics"
64-
GIT_REPOSITORY https://github.com/InteractiveComputerGraphics/PositionBasedDynamics.git
65-
GIT_TAG "dd185b0a0479248cb0c1e98294532b55cb0d287d"
66-
INSTALL_DIR ${ExternalInstallDir}/PositionBasedDynamics
67-
CMAKE_ARGS -DCMAKE_BUILD_TYPE=${EXT_CMAKE_BUILD_TYPE} -DCMAKE_INSTALL_PREFIX:PATH=${ExternalInstallDir}/PositionBasedDynamics -DPBD_NO_DEMOS:BOOL=1 -DPBD_EXTERNALINSTALLDIR:PATH=${ExternalInstallDir} -DUSE_DOUBLE_PRECISION:BOOL=${USE_DOUBLE_PRECISION}
68-
)
40+
## Eigen3 is used by most of the libraries that follow
41+
find_package(Eigen3 REQUIRED)
42+
43+
################################################################################
44+
# own external libraries
45+
################################################################################
46+
include(SetUpExternalProjects)
6947

70-
## GenericParameters
71-
ExternalProject_Add(
72-
Ext_GenericParameters
73-
PREFIX "${CMAKE_SOURCE_DIR}/extern/GenericParameters"
74-
GIT_REPOSITORY https://github.com/InteractiveComputerGraphics/GenericParameters.git
75-
GIT_TAG "b1ad669fac8d106515f6aa8514a03598d5766a36"
76-
INSTALL_DIR ${ExternalInstallDir}/GenericParameters
77-
CMAKE_ARGS -DCMAKE_BUILD_TYPE=${EXT_CMAKE_BUILD_TYPE} -DCMAKE_INSTALL_PREFIX:PATH=${ExternalInstallDir}/GenericParameters -DGENERICPARAMETERS_NO_TESTS:BOOL=1
78-
)
48+
################################################################################
49+
# internal libraries
50+
################################################################################
51+
add_subdirectory(SPlisHSPlasH)
52+
add_subdirectory(Utilities)
7953

80-
## Discregrid
81-
ExternalProject_Add(
82-
Ext_Discregrid
83-
PREFIX "${CMAKE_SOURCE_DIR}/extern/Discregrid"
84-
GIT_REPOSITORY https://github.com/InteractiveComputerGraphics/Discregrid.git
85-
GIT_TAG "c0fb5aeac4c8a83e9f37c720315f13a834409b81"
86-
INSTALL_DIR ${ExternalInstallDir}/Discregrid
87-
CMAKE_ARGS -DCMAKE_BUILD_TYPE:STRING=${EXT_CMAKE_BUILD_TYPE} -DCMAKE_INSTALL_PREFIX:PATH=${ExternalInstallDir}/Discregrid -DBUILD_CMD_EXECUTABLE:BOOL=0 -DEIGEN3_INCLUDE_DIR:PATH=${EIGEN3_INCLUDE_DIR}
88-
)
54+
################################################################################
55+
# executables
56+
################################################################################
57+
if (NOT SPH_LIBS_ONLY)
58+
include(DataCopyTargets)
59+
add_subdirectory(Tools)
60+
add_subdirectory(Simulator)
61+
add_subdirectory(Tests)
62+
endif()

Changelog.txt

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,12 @@
1+
2.6.0
2+
- performance improvement: added AVX support for TimeStepDFSPH, DragForce_Gissler2017, Viscosity_Standard, Viscosity_Weiler2018, MicropolarModel_Bender2017
3+
- added AVX support for 2D simulations
4+
- added VTk export of rigid bodies
5+
- added parameter to control min CFL step size
6+
- cleaned up classes of graphical user interface
7+
- exchanged Static/DynamicBoundarySimulator by SPHSimulator which can handle dynamic and static scenes
8+
- added regular surface sampling
9+
- updated to Eigen 3.3.7
110
- bugfixes
211

312
2.5.0

GUI/OpenGL/CMakeLists.txt

Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,28 @@
1+
set(VIS_HEADER_FILES
2+
${PROJECT_SOURCE_DIR}/GUI/OpenGL/MiniGL.h
3+
${PROJECT_SOURCE_DIR}/GUI/OpenGL/Selection.h
4+
${PROJECT_SOURCE_DIR}/GUI/OpenGL/Shader.h
5+
${PROJECT_SOURCE_DIR}/GUI/OpenGL/colormaps/colormap_jet.h
6+
${PROJECT_SOURCE_DIR}/GUI/OpenGL/colormaps/colormap_plasma.h
7+
)
8+
9+
10+
set(VIS_SOURCE_FILES
11+
${PROJECT_SOURCE_DIR}/GUI/OpenGL/MiniGL.cpp
12+
${PROJECT_SOURCE_DIR}/GUI/OpenGL/Shader.cpp
13+
)
14+
15+
16+
set(VIS_FILES
17+
${VIS_HEADER_FILES}
18+
${VIS_SOURCE_FILES}
19+
)
20+
21+
# A macro for the source groups
22+
macro(VIS_SOURCE_GROUPS)
23+
source_group("Header Files\\GUI\\OpenGL" FILES ${VIS_HEADER_FILES})
24+
source_group("Source Files\\GUI\\OpenGL" FILES ${VIS_SOURCE_FILES})
25+
endmacro(VIS_SOURCE_GROUPS)
26+
27+
28+

0 commit comments

Comments
 (0)