[Bf-blender-cvs] [57d25f4f9b5] fluid-mantaflow: Mantaflow: Updated manta source files

Sebastián Barschkis noreply at git.blender.org
Thu Dec 12 22:35:01 CET 2019


Commit: 57d25f4f9b5566fbad997257b94e98b914bad661
Author: Sebastián Barschkis
Date:   Thu Dec 12 22:33:00 2019 +0100
Branches: fluid-mantaflow
https://developer.blender.org/rB57d25f4f9b5566fbad997257b94e98b914bad661

Mantaflow: Updated manta source files

===================================================================

M	extern/mantaflow/preprocessed/gitinfo.h
M	extern/mantaflow/preprocessed/levelset.cpp
M	extern/mantaflow/preprocessed/levelset.h
M	extern/mantaflow/preprocessed/plugin/extforces.cpp

===================================================================

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);



More information about the Bf-blender-cvs mailing list