From 57d25f4f9b5566fbad997257b94e98b914bad661 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Sebasti=C3=A1n=20Barschkis?= Date: Thu, 12 Dec 2019 22:33:00 +0100 Subject: Mantaflow: Updated manta source files --- extern/mantaflow/preprocessed/gitinfo.h | 2 +- extern/mantaflow/preprocessed/levelset.cpp | 29 ++++++++++++++--- extern/mantaflow/preprocessed/levelset.h | 6 ++-- extern/mantaflow/preprocessed/plugin/extforces.cpp | 36 ++++++++++++++++------ 4 files changed, 56 insertions(+), 17 deletions(-) diff --git a/extern/mantaflow/preprocessed/gitinfo.h b/extern/mantaflow/preprocessed/gitinfo.h index 38991df3ca7..154f928dc2f 100644 --- a/extern/mantaflow/preprocessed/gitinfo.h +++ b/extern/mantaflow/preprocessed/gitinfo.h @@ -1,3 +1,3 @@ -#define MANTA_GIT_VERSION "commit dd8240da1f8acc6d39a70035755633dc5697ffe3" +#define MANTA_GIT_VERSION "commit 761849c592daaea320f9026768b5a0750528009c" diff --git a/extern/mantaflow/preprocessed/levelset.cpp b/extern/mantaflow/preprocessed/levelset.cpp index 2645ebadd1c..dcc10718d71 100644 --- a/extern/mantaflow/preprocessed/levelset.cpp +++ b/extern/mantaflow/preprocessed/levelset.cpp @@ -434,13 +434,20 @@ void LevelsetGrid::join(const LevelsetGrid &o) //! subtract b, note does not preserve SDF! struct KnSubtract : public KernelBase { - KnSubtract(Grid &a, const Grid &b) : KernelBase(&a, 0), a(a), b(b) + KnSubtract(Grid &a, const Grid &b, const FlagGrid *flags, int subtractType) + : KernelBase(&a, 0), a(a), b(b), flags(flags), subtractType(subtractType) { runMessage(); run(); } - inline void op(IndexInt idx, Grid &a, const Grid &b) const + inline void op(IndexInt idx, + Grid &a, + const Grid &b, + const FlagGrid *flags, + int subtractType) const { + if (flags && ((*flags)(idx)&subtractType) == 0) + return; if (b[idx] < 0.) a[idx] = b[idx] * -1.; } @@ -454,6 +461,16 @@ struct KnSubtract : public KernelBase { return b; } typedef Grid type1; + inline const FlagGrid *getArg2() + { + return flags; + } + typedef FlagGrid type2; + inline int &getArg3() + { + return subtractType; + } + typedef int type3; void runMessage() { debMsg("Executing kernel KnSubtract ", 3); @@ -464,7 +481,7 @@ struct KnSubtract : public KernelBase { void operator()(const tbb::blocked_range &__r) const { for (IndexInt idx = __r.begin(); idx != (IndexInt)__r.end(); idx++) - op(idx, a, b); + op(idx, a, b, flags, subtractType); } void run() { @@ -472,10 +489,12 @@ struct KnSubtract : public KernelBase { } Grid &a; const Grid &b; + const FlagGrid *flags; + int subtractType; }; -void LevelsetGrid::subtract(const LevelsetGrid &o) +void LevelsetGrid::subtract(const LevelsetGrid &o, const FlagGrid *flags, const int subtractType) { - KnSubtract(*this, o); + KnSubtract(*this, o, flags, subtractType); } //! re-init levelset and extrapolate velocities (in & out) diff --git a/extern/mantaflow/preprocessed/levelset.h b/extern/mantaflow/preprocessed/levelset.h index 672b1cef511..ab36ac24903 100644 --- a/extern/mantaflow/preprocessed/levelset.h +++ b/extern/mantaflow/preprocessed/levelset.h @@ -149,7 +149,7 @@ class LevelsetGrid : public Grid { } } - void subtract(const LevelsetGrid &o); + void subtract(const LevelsetGrid &o, const FlagGrid *flags = NULL, const int subtractType = 0); static PyObject *_W_4(PyObject *_self, PyObject *_linargs, PyObject *_kwds) { try { @@ -161,9 +161,11 @@ class LevelsetGrid : public Grid { { ArgLocker _lock; const LevelsetGrid &o = *_args.getPtr("o", 0, &_lock); + const FlagGrid *flags = _args.getPtrOpt("flags", 1, NULL, &_lock); + const int subtractType = _args.getOpt("subtractType", 2, 0, &_lock); pbo->_args.copy(_args); _retval = getPyNone(); - pbo->subtract(o); + pbo->subtract(o, flags, subtractType); pbo->_args.check(); } pbFinalizePlugin(pbo->getParent(), "LevelsetGrid::subtract", !noTiming); diff --git a/extern/mantaflow/preprocessed/plugin/extforces.cpp b/extern/mantaflow/preprocessed/plugin/extforces.cpp index 7073af2bd8d..3e1e5733257 100644 --- a/extern/mantaflow/preprocessed/plugin/extforces.cpp +++ b/extern/mantaflow/preprocessed/plugin/extforces.cpp @@ -1241,8 +1241,12 @@ void PbRegister_setInitialVelocity() //! Kernel: gradient norm operator struct KnConfForce : public KernelBase { - KnConfForce(Grid &force, const Grid &grid, const Grid &curl, Real str) - : KernelBase(&force, 1), force(force), grid(grid), curl(curl), str(str) + KnConfForce(Grid &force, + const Grid &grid, + const Grid &curl, + Real str, + const Grid *strGrid) + : KernelBase(&force, 1), force(force), grid(grid), curl(curl), str(str), strGrid(strGrid) { runMessage(); run(); @@ -1253,7 +1257,8 @@ struct KnConfForce : public KernelBase { Grid &force, const Grid &grid, const Grid &curl, - Real str) const + Real str, + const Grid *strGrid) const { Vec3 grad = 0.5 * Vec3(grid(i + 1, j, k) - grid(i - 1, j, k), grid(i, j + 1, k) - grid(i, j - 1, k), @@ -1261,6 +1266,8 @@ struct KnConfForce : public KernelBase { if (grid.is3D()) grad[2] = 0.5 * (grid(i, j, k + 1) - grid(i, j, k - 1)); normalize(grad); + if (strGrid) + str += (*strGrid)(i, j, k); force(i, j, k) = str * cross(grad, curl(i, j, k)); } inline Grid &getArg0() @@ -1283,6 +1290,11 @@ struct KnConfForce : public KernelBase { return str; } typedef Real type3; + inline const Grid *getArg4() + { + return strGrid; + } + typedef Grid type4; void runMessage() { debMsg("Executing kernel KnConfForce ", 3); @@ -1298,13 +1310,13 @@ struct KnConfForce : public KernelBase { for (int k = __r.begin(); k != (int)__r.end(); k++) for (int j = 1; j < _maxY; j++) for (int i = 1; i < _maxX; i++) - op(i, j, k, force, grid, curl, str); + op(i, j, k, force, grid, curl, str, strGrid); } else { const int k = 0; for (int j = __r.begin(); j != (int)__r.end(); j++) for (int i = 1; i < _maxX; i++) - op(i, j, k, force, grid, curl, str); + op(i, j, k, force, grid, curl, str, strGrid); } } void run() @@ -1318,9 +1330,13 @@ struct KnConfForce : public KernelBase { const Grid &grid; const Grid &curl; Real str; + const Grid *strGrid; }; -void vorticityConfinement(MACGrid &vel, const FlagGrid &flags, Real strength) +void vorticityConfinement(MACGrid &vel, + const FlagGrid &flags, + Real strengthGlobal = 0, + const Grid *strengthCell = NULL) { Grid velCenter(flags.getParent()), curl(flags.getParent()), force(flags.getParent()); Grid norm(flags.getParent()); @@ -1328,7 +1344,7 @@ void vorticityConfinement(MACGrid &vel, const FlagGrid &flags, Real strength) GetCentered(velCenter, vel); CurlOp(velCenter, curl); GridNorm(norm, curl); - KnConfForce(force, norm, curl, strength); + KnConfForce(force, norm, curl, strengthGlobal, strengthCell); KnApplyForceField(flags, vel, force, NULL, true, false); } static PyObject *_W_8(PyObject *_self, PyObject *_linargs, PyObject *_kwds) @@ -1343,9 +1359,11 @@ static PyObject *_W_8(PyObject *_self, PyObject *_linargs, PyObject *_kwds) ArgLocker _lock; MACGrid &vel = *_args.getPtr("vel", 0, &_lock); const FlagGrid &flags = *_args.getPtr("flags", 1, &_lock); - Real strength = _args.get("strength", 2, &_lock); + Real strengthGlobal = _args.getOpt("strengthGlobal", 2, 0, &_lock); + const Grid *strengthCell = _args.getPtrOpt>( + "strengthCell", 3, NULL, &_lock); _retval = getPyNone(); - vorticityConfinement(vel, flags, strength); + vorticityConfinement(vel, flags, strengthGlobal, strengthCell); _args.check(); } pbFinalizePlugin(parent, "vorticityConfinement", !noTiming); -- cgit v1.2.3