Skip to content

Commit 7dd9050

Browse files
committed
Merge branch 'master_public' into fix_py_module_path
2 parents 05ad954 + c5a063d commit 7dd9050

File tree

160 files changed

+3199
-1904
lines changed

Some content is hidden

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

160 files changed

+3199
-1904
lines changed

CMake/NeighborhoodSearch.cmake

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -33,11 +33,14 @@ else(USE_GPU_NEIGHBORHOOD_SEARCH)
3333
Ext_NeighborhoodSearch
3434
PREFIX "${CMAKE_BINARY_DIR}/extern/CompactNSearch"
3535
GIT_REPOSITORY https://github.com/InteractiveComputerGraphics/CompactNSearch.git
36-
GIT_TAG "f6c0f32f3946554c91561cbaec4cfe8be0c23430"
36+
GIT_TAG "a9ab7c71ce264487660ecbaf81b5060bda462722"
3737
INSTALL_DIR ${ExternalInstallDir}/NeighborhoodSearch
3838
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} -DBUILD_DEMO:BOOL=OFF -DCMAKE_POLICY_VERSION_MINIMUM=3.10 -DCMAKE_PREFIX_PATH=${CMAKE_PREFIX_PATH}
3939
)
4040
set(NEIGHBORHOOD_ASSEMBLY_NAME CompactNSearch)
41+
if(WIN32)
42+
add_definitions( -D_SILENCE_STDEXT_ARR_ITERS_DEPRECATION_WARNING)
43+
endif()
4144

4245
endif(USE_GPU_NEIGHBORHOOD_SEARCH)
4346

Changelog.txt

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,8 @@
1+
2.16.0
2+
- added implementation of turbulence method: Liu et al., "Turbulent Details Simulation for SPH Fluids via Vorticity Refinement", Computer Graphics Forum, 2021
3+
- Scene files now have a namespace for each pressure and non-pressure solver. This means existing scene files have to be adapted (see doc/file_format.md).
4+
- fixed some bugs in the elasticity solvers
5+
16
2.15.1
27
- deactivated avx in Linux wheels due to problems
38

SPlisHSPlasH/CMakeLists.txt

Lines changed: 2 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -71,23 +71,20 @@ set(ICSPH_SOURCE_FILES
7171
)
7272

7373
set(SURFACETENSION_HEADER_FILES
74-
SurfaceTension/SurfaceTensionBase.h
7574
SurfaceTension/SurfaceTension_Becker2007.h
7675
SurfaceTension/SurfaceTension_Akinci2013.h
7776
SurfaceTension/SurfaceTension_He2014.h
7877
SurfaceTension/SurfaceTension_Jeske2023.h
7978
)
8079

8180
set(SURFACETENSION_SOURCE_FILES
82-
SurfaceTension/SurfaceTensionBase.cpp
8381
SurfaceTension/SurfaceTension_Becker2007.cpp
8482
SurfaceTension/SurfaceTension_Akinci2013.cpp
8583
SurfaceTension/SurfaceTension_He2014.cpp
8684
SurfaceTension/SurfaceTension_Jeske2023.cpp
8785
)
8886

8987
set(VISCOSITY_HEADER_FILES
90-
Viscosity/ViscosityBase.h
9188
Viscosity/Viscosity_Standard.h
9289
Viscosity/Viscosity_Bender2017.h
9390
Viscosity/Viscosity_Peer2015.h
@@ -97,7 +94,6 @@ set(VISCOSITY_HEADER_FILES
9794
)
9895

9996
set(VISCOSITY_SOURCE_FILES
100-
Viscosity/ViscosityBase.cpp
10197
Viscosity/Viscosity_Standard.cpp
10298
Viscosity/Viscosity_Bender2017.cpp
10399
Viscosity/Viscosity_Peer2015.cpp
@@ -107,38 +103,34 @@ set(VISCOSITY_SOURCE_FILES
107103
)
108104

109105
set(VORTICITY_HEADER_FILES
110-
Vorticity/VorticityBase.h
111106
Vorticity/MicropolarModel_Bender2017.h
112107
Vorticity/VorticityConfinement.h
108+
Vorticity/VorticityRefinement_Liu2021.h
113109
)
114110

115111
set(VORTICITY_SOURCE_FILES
116-
Vorticity/VorticityBase.cpp
117112
Vorticity/MicropolarModel_Bender2017.cpp
118113
Vorticity/VorticityConfinement.cpp
114+
Vorticity/VorticityRefinement_Liu2021.cpp
119115
)
120116

121117
set(DRAG_HEADER_FILES
122-
Drag/DragBase.h
123118
Drag/DragForce_Gissler2017.h
124119
Drag/DragForce_Macklin2014.h
125120
)
126121

127122
set(DRAG_SOURCE_FILES
128-
Drag/DragBase.cpp
129123
Drag/DragForce_Gissler2017.cpp
130124
Drag/DragForce_Macklin2014.cpp
131125
)
132126

133127
set(ELASTICITY_HEADER_FILES
134-
Elasticity/ElasticityBase.h
135128
Elasticity/Elasticity_Becker2009.h
136129
Elasticity/Elasticity_Peer2018.h
137130
Elasticity/Elasticity_Kugelstadt2021.h
138131
)
139132

140133
set(ELASTICITY_SOURCE_FILES
141-
Elasticity/ElasticityBase.cpp
142134
Elasticity/Elasticity_Becker2009.cpp
143135
Elasticity/Elasticity_Peer2018.cpp
144136
Elasticity/Elasticity_Kugelstadt2021.cpp

SPlisHSPlasH/DFSPH/TimeStepDFSPH.cpp

Lines changed: 36 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,11 @@ using namespace SPH;
1515
using namespace std;
1616
using namespace GenParam;
1717

18-
18+
std::string TimeStepDFSPH::METHOD_NAME = "DFSPH";
19+
int TimeStepDFSPH::SOLVER_ITERATIONS = -1;
20+
int TimeStepDFSPH::MIN_ITERATIONS = -1;
21+
int TimeStepDFSPH::MAX_ITERATIONS = -1;
22+
int TimeStepDFSPH::MAX_ERROR = -1;
1923
int TimeStepDFSPH::SOLVER_ITERATIONS_V = -1;
2024
int TimeStepDFSPH::MAX_ITERATIONS_V = -1;
2125
int TimeStepDFSPH::MAX_ERROR_V = -1;
@@ -27,6 +31,10 @@ TimeStepDFSPH::TimeStepDFSPH() :
2731
m_simulationData()
2832
{
2933
m_simulationData.init();
34+
m_iterations = 0;
35+
m_minIterations = 2;
36+
m_maxIterations = 100;
37+
m_maxError = static_cast<Real>(0.01);
3038
m_iterationsV = 0;
3139
m_enableDivergenceSolver = true;
3240
m_maxIterationsV = 100;
@@ -38,11 +46,11 @@ TimeStepDFSPH::TimeStepDFSPH() :
3846
for (unsigned int fluidModelIndex = 0; fluidModelIndex < nModels; fluidModelIndex++)
3947
{
4048
FluidModel *model = sim->getFluidModel(fluidModelIndex);
41-
model->addField({ "factor", FieldType::Scalar, [this, fluidModelIndex](const unsigned int i) -> Real* { return &m_simulationData.getFactor(fluidModelIndex, i); } });
42-
model->addField({ "advected density", FieldType::Scalar, [this, fluidModelIndex](const unsigned int i) -> Real* { return &m_simulationData.getDensityAdv(fluidModelIndex, i); } });
43-
model->addField({ "p / rho^2", FieldType::Scalar, [this, fluidModelIndex](const unsigned int i) -> Real* { return &m_simulationData.getPressureRho2(fluidModelIndex, i); }, true });
44-
model->addField({ "p_v / rho^2", FieldType::Scalar, [this, fluidModelIndex](const unsigned int i) -> Real* { return &m_simulationData.getPressureRho2_V(fluidModelIndex, i); }, true });
45-
model->addField({ "pressure acceleration", FieldType::Vector3, [this, fluidModelIndex](const unsigned int i) -> Real* { return &m_simulationData.getPressureAccel(fluidModelIndex, i)[0]; } });
49+
model->addField({ "factor", METHOD_NAME, FieldType::Scalar, [this, fluidModelIndex](const unsigned int i) -> Real* { return &m_simulationData.getFactor(fluidModelIndex, i); } });
50+
model->addField({ "advected density", METHOD_NAME, FieldType::Scalar, [this, fluidModelIndex](const unsigned int i) -> Real* { return &m_simulationData.getDensityAdv(fluidModelIndex, i); } });
51+
model->addField({ "p / rho^2", METHOD_NAME, FieldType::Scalar, [this, fluidModelIndex](const unsigned int i) -> Real* { return &m_simulationData.getPressureRho2(fluidModelIndex, i); }, true });
52+
model->addField({ "p_v / rho^2", METHOD_NAME, FieldType::Scalar, [this, fluidModelIndex](const unsigned int i) -> Real* { return &m_simulationData.getPressureRho2_V(fluidModelIndex, i); }, true });
53+
model->addField({ "pressure acceleration", METHOD_NAME, FieldType::Vector3, [this, fluidModelIndex](const unsigned int i) -> Real* { return &m_simulationData.getPressureAccel(fluidModelIndex, i)[0]; } });
4654
}
4755
}
4856

@@ -66,6 +74,26 @@ void TimeStepDFSPH::initParameters()
6674
{
6775
TimeStep::initParameters();
6876

77+
SOLVER_ITERATIONS = createNumericParameter("iterations", "Iterations", &m_iterations);
78+
setGroup(SOLVER_ITERATIONS, "Simulation|DFSPH");
79+
setDescription(SOLVER_ITERATIONS, "Iterations required by the pressure solver.");
80+
getParameter(SOLVER_ITERATIONS)->setReadOnly(true);
81+
82+
MIN_ITERATIONS = createNumericParameter("minIterations", "Min. iterations", &m_minIterations);
83+
setGroup(MIN_ITERATIONS, "Simulation|DFSPH");
84+
setDescription(MIN_ITERATIONS, "Minimal number of iterations of the pressure solver.");
85+
static_cast<NumericParameter<unsigned int>*>(getParameter(MIN_ITERATIONS))->setMinValue(0);
86+
87+
MAX_ITERATIONS = createNumericParameter("maxIterations", "Max. iterations", &m_maxIterations);
88+
setGroup(MAX_ITERATIONS, "Simulation|DFSPH");
89+
setDescription(MAX_ITERATIONS, "Maximal number of iterations of the pressure solver.");
90+
static_cast<NumericParameter<unsigned int>*>(getParameter(MAX_ITERATIONS))->setMinValue(1);
91+
92+
MAX_ERROR = createNumericParameter("maxError", "Max. density error(%)", &m_maxError);
93+
setGroup(MAX_ERROR, "Simulation|DFSPH");
94+
setDescription(MAX_ERROR, "Maximal density error (%).");
95+
static_cast<RealParameter*>(getParameter(MAX_ERROR))->setMinValue(static_cast<Real>(1e-6));
96+
6997
SOLVER_ITERATIONS_V = createNumericParameter("iterationsV", "Iterations (divergence)", &m_iterationsV);
7098
setGroup(SOLVER_ITERATIONS_V, "Simulation|DFSPH");
7199
setDescription(SOLVER_ITERATIONS_V, "Iterations required by the divergence solver.");
@@ -575,7 +603,7 @@ void TimeStepDFSPH::pressureSolveIteration(const unsigned int fluidModelIndex, R
575603
const Real residuum = min(s_i - aij_pj, static_cast<Real>(0.0)); // r = b - A*p
576604
//p_rho2_i -= residuum * m_simulationData.getFactor(fluidModelIndex, i);
577605

578-
p_rho2_i = max(p_rho2_i - 0.5 * (s_i - aij_pj) * m_simulationData.getFactor(fluidModelIndex, i), 0.0);
606+
p_rho2_i = max(p_rho2_i - static_cast<Real>(0.5) * (s_i - aij_pj) * m_simulationData.getFactor(fluidModelIndex, i), static_cast<Real>(0.0));
579607

580608
//////////////////////////////////////////////////////////////////////////
581609
// Compute the sum of the density errors
@@ -661,7 +689,7 @@ void TimeStepDFSPH::divergenceSolveIteration(const unsigned int fluidModelIndex,
661689
residuum = 0.0;
662690
}
663691
//pv_rho2_i -= residuum * m_simulationData.getFactor(fluidModelIndex, i);
664-
pv_rho2_i = max(pv_rho2_i - 0.5*(s_i - aij_pj) * m_simulationData.getFactor(fluidModelIndex, i), 0.0);
692+
pv_rho2_i = max(pv_rho2_i - static_cast<Real>(0.5)*(s_i - aij_pj) * m_simulationData.getFactor(fluidModelIndex, i), static_cast<Real>(0.0));
665693

666694

667695
//////////////////////////////////////////////////////////////////////////

SPlisHSPlasH/DFSPH/TimeStepDFSPH.h

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -26,6 +26,10 @@ namespace SPH
2626
protected:
2727
SimulationDataDFSPH m_simulationData;
2828
const Real m_eps = static_cast<Real>(1.0e-5);
29+
unsigned int m_iterations;
30+
Real m_maxError;
31+
unsigned int m_minIterations;
32+
unsigned int m_maxIterations;
2933
bool m_enableDivergenceSolver;
3034
unsigned int m_iterationsV;
3135
Real m_maxErrorV;
@@ -49,6 +53,11 @@ namespace SPH
4953
virtual void initParameters();
5054

5155
public:
56+
static std::string METHOD_NAME;
57+
static int SOLVER_ITERATIONS;
58+
static int MIN_ITERATIONS;
59+
static int MAX_ITERATIONS;
60+
static int MAX_ERROR;
5261
static int SOLVER_ITERATIONS_V;
5362
static int MAX_ITERATIONS_V;
5463
static int MAX_ERROR_V;
@@ -62,6 +71,8 @@ namespace SPH
6271
virtual void reset();
6372

6473
virtual void resize();
74+
virtual std::string getMethodName() { return METHOD_NAME; }
75+
virtual int getNumIterations() { return m_iterations; }
6576
};
6677
}
6778

SPlisHSPlasH/Drag/DragBase.cpp

Lines changed: 0 additions & 30 deletions
This file was deleted.

SPlisHSPlasH/Drag/DragBase.h

Lines changed: 0 additions & 27 deletions
This file was deleted.

SPlisHSPlasH/Drag/DragForce_Gissler2017.cpp

Lines changed: 18 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -7,20 +7,36 @@
77
#include "../BoundaryModel_Bender2019.h"
88

99
using namespace SPH;
10+
using namespace GenParam;
11+
12+
std::string DragForce_Gissler2017::METHOD_NAME = "Gissler et al. 2017";
13+
int DragForce_Gissler2017::DRAG_COEFFICIENT = -1;
1014

1115
// C.Gissler, S.Band, A.Peer, M.Ihmsen, M.Teschner,
1216
// "Approximate Air-Fluid Interactions for SPH,"
1317
// VRIPHYS 2017
1418

1519
DragForce_Gissler2017::DragForce_Gissler2017(FluidModel *model) :
16-
DragBase(model)
20+
NonPressureForceBase(model)
1721
{
22+
m_dragCoefficient = static_cast<Real>(0.01);
1823
}
1924

2025
DragForce_Gissler2017::~DragForce_Gissler2017(void)
2126
{
2227
}
2328

29+
void DragForce_Gissler2017::initParameters()
30+
{
31+
NonPressureForceBase::initParameters();
32+
33+
DRAG_COEFFICIENT = createNumericParameter("drag", "Drag coefficient", &m_dragCoefficient);
34+
setGroup(DRAG_COEFFICIENT, "Fluid Model|Drag force");
35+
setDescription(DRAG_COEFFICIENT, "Coefficient for the drag force computation");
36+
RealParameter* rparam = static_cast<RealParameter*>(getParameter(DRAG_COEFFICIENT));
37+
rparam->setMinValue(0.0);
38+
}
39+
2440
#ifdef USE_AVX
2541

2642
void DragForce_Gissler2017::step()
@@ -69,7 +85,7 @@ void DragForce_Gissler2017::step()
6985
const Real y_coeff = (C_F * We_i_wo_v * c_def) / (C_k * C_b);
7086

7187
const Real n_full = 38;
72-
const Real n_full_23 = n_full * 2.0/3.0;
88+
const Real n_full_23 = n_full * static_cast<Real>(2.0/3.0);
7389

7490
#pragma omp parallel default(shared)
7591
{

SPlisHSPlasH/Drag/DragForce_Gissler2017.h

Lines changed: 9 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@
33

44
#include "SPlisHSPlasH/Common.h"
55
#include "SPlisHSPlasH/FluidModel.h"
6-
#include "DragBase.h"
6+
#include "SPlisHSPlasH/NonPressureForceBase.h"
77

88
namespace SPH
99
{
@@ -13,9 +13,10 @@ namespace SPH
1313
* References:
1414
* - [GPB+17] Christoph Gissler, Stefan Band, Andreas Peer, Markus Ihmsen, and Matthias Teschner. Approximate air-fluid interactions for SPH. In Virtual Reality Interactions and Physical Simulations, 1-10. April 2017. URL: http://dx.doi.org/10.2312/vriphys.20171081
1515
*/
16-
class DragForce_Gissler2017 : public DragBase
16+
class DragForce_Gissler2017 : public NonPressureForceBase
1717
{
1818
protected:
19+
Real m_dragCoefficient;
1920
const Real rho_a = static_cast<Real>(1.2041);
2021
const Real sigma = static_cast<Real>(0.0724);
2122
const Real mu_l = static_cast<Real>(0.00102);
@@ -25,11 +26,17 @@ namespace SPH
2526
const Real C_b = static_cast<Real>(0.5);
2627
const Real mu_a = static_cast<Real>(0.00001845);
2728

29+
virtual void initParameters();
30+
2831
public:
32+
static std::string METHOD_NAME;
33+
static int DRAG_COEFFICIENT;
34+
2935
DragForce_Gissler2017(FluidModel *model);
3036
virtual ~DragForce_Gissler2017(void);
3137

3238
static NonPressureForceBase* creator(FluidModel* model) { return new DragForce_Gissler2017(model); }
39+
virtual std::string getMethodName() { return METHOD_NAME; }
3340

3441
virtual void step();
3542
virtual void reset();

SPlisHSPlasH/Drag/DragForce_Macklin2014.cpp

Lines changed: 17 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,16 +2,32 @@
22
#include "SPlisHSPlasH/TimeManager.h"
33

44
using namespace SPH;
5+
using namespace GenParam;
6+
7+
std::string DragForce_Macklin2014::METHOD_NAME = "Macklin et al. 2014";
8+
int DragForce_Macklin2014::DRAG_COEFFICIENT = -1;
59

610
DragForce_Macklin2014::DragForce_Macklin2014(FluidModel *model) :
7-
DragBase(model)
11+
NonPressureForceBase(model)
812
{
13+
m_dragCoefficient = static_cast<Real>(0.01);
914
}
1015

1116
DragForce_Macklin2014::~DragForce_Macklin2014(void)
1217
{
1318
}
1419

20+
void DragForce_Macklin2014::initParameters()
21+
{
22+
NonPressureForceBase::initParameters();
23+
24+
DRAG_COEFFICIENT = createNumericParameter("drag", "Drag coefficient", &m_dragCoefficient);
25+
setGroup(DRAG_COEFFICIENT, "Fluid Model|Drag force");
26+
setDescription(DRAG_COEFFICIENT, "Coefficient for the drag force computation");
27+
RealParameter* rparam = static_cast<RealParameter*>(getParameter(DRAG_COEFFICIENT));
28+
rparam->setMinValue(0.0);
29+
}
30+
1531
void DragForce_Macklin2014::step()
1632
{
1733
const Real density0 = m_model->getDensity0();

0 commit comments

Comments
 (0)