Welcome to mirror list, hosted at ThFree Co, Russian Federation.

git.blender.org/blender.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorSebastián Barschkis <sebbas@sebbas.org>2019-12-13 00:33:00 +0300
committerSebastián Barschkis <sebbas@sebbas.org>2019-12-13 00:33:00 +0300
commit57d25f4f9b5566fbad997257b94e98b914bad661 (patch)
treef3889f5baa95bbf6c1a0bd83bc61e220272fae09
parentc83447cdf46e1fe3d15c5076941f5cd06ab16778 (diff)
Mantaflow: Updated manta source files
-rw-r--r--extern/mantaflow/preprocessed/gitinfo.h2
-rw-r--r--extern/mantaflow/preprocessed/levelset.cpp29
-rw-r--r--extern/mantaflow/preprocessed/levelset.h6
-rw-r--r--extern/mantaflow/preprocessed/plugin/extforces.cpp36
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);