diff options
author | Sebastián Barschkis <sebbas@sebbas.org> | 2019-12-13 00:33:00 +0300 |
---|---|---|
committer | Sebastián Barschkis <sebbas@sebbas.org> | 2019-12-13 00:33:00 +0300 |
commit | 57d25f4f9b5566fbad997257b94e98b914bad661 (patch) | |
tree | f3889f5baa95bbf6c1a0bd83bc61e220272fae09 | |
parent | c83447cdf46e1fe3d15c5076941f5cd06ab16778 (diff) |
Mantaflow: Updated manta source files
-rw-r--r-- | extern/mantaflow/preprocessed/gitinfo.h | 2 | ||||
-rw-r--r-- | extern/mantaflow/preprocessed/levelset.cpp | 29 | ||||
-rw-r--r-- | extern/mantaflow/preprocessed/levelset.h | 6 | ||||
-rw-r--r-- | 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<Real> &a, const Grid<Real> &b) : KernelBase(&a, 0), a(a), b(b) + KnSubtract(Grid<Real> &a, const Grid<Real> &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<Real> &a, const Grid<Real> &b) const + inline void op(IndexInt idx, + Grid<Real> &a, + const Grid<Real> &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<Real> 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<IndexInt> &__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<Real> &a; const Grid<Real> &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<Real> { } } - 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<Real> { { ArgLocker _lock; const LevelsetGrid &o = *_args.getPtr<LevelsetGrid>("o", 0, &_lock); + const FlagGrid *flags = _args.getPtrOpt<FlagGrid>("flags", 1, NULL, &_lock); + const int subtractType = _args.getOpt<int>("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<Vec3> &force, const Grid<Real> &grid, const Grid<Vec3> &curl, Real str) - : KernelBase(&force, 1), force(force), grid(grid), curl(curl), str(str) + KnConfForce(Grid<Vec3> &force, + const Grid<Real> &grid, + const Grid<Vec3> &curl, + Real str, + const Grid<Real> *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<Vec3> &force, const Grid<Real> &grid, const Grid<Vec3> &curl, - Real str) const + Real str, + const Grid<Real> *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<Vec3> &getArg0() @@ -1283,6 +1290,11 @@ struct KnConfForce : public KernelBase { return str; } typedef Real type3; + inline const Grid<Real> *getArg4() + { + return strGrid; + } + typedef Grid<Real> 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<Real> &grid; const Grid<Vec3> &curl; Real str; + const Grid<Real> *strGrid; }; -void vorticityConfinement(MACGrid &vel, const FlagGrid &flags, Real strength) +void vorticityConfinement(MACGrid &vel, + const FlagGrid &flags, + Real strengthGlobal = 0, + const Grid<Real> *strengthCell = NULL) { Grid<Vec3> velCenter(flags.getParent()), curl(flags.getParent()), force(flags.getParent()); Grid<Real> 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<MACGrid>("vel", 0, &_lock); const FlagGrid &flags = *_args.getPtr<FlagGrid>("flags", 1, &_lock); - Real strength = _args.get<Real>("strength", 2, &_lock); + Real strengthGlobal = _args.getOpt<Real>("strengthGlobal", 2, 0, &_lock); + const Grid<Real> *strengthCell = _args.getPtrOpt<Grid<Real>>( + "strengthCell", 3, NULL, &_lock); _retval = getPyNone(); - vorticityConfinement(vel, flags, strength); + vorticityConfinement(vel, flags, strengthGlobal, strengthCell); _args.check(); } pbFinalizePlugin(parent, "vorticityConfinement", !noTiming); |