Fluid: Updated Mantaflow source files
authorSebastián Barschkis <sebbas@sebbas.org>
Fri, 8 May 2020 14:56:07 +0000 (16:56 +0200)
committerSebastián Barschkis <sebbas@sebbas.org>
Fri, 8 May 2020 14:59:10 +0000 (16:59 +0200)
Includes more flexible options for dt, dx in secondary particles plugin.

extern/mantaflow/preprocessed/plugin/secondaryparticles.cpp

index a8913a218c15c184c1066396b157111401e51ecb..5e24b6f28db3ada49d26d6be5867f08618f70eb6 100644 (file)
@@ -982,9 +982,14 @@ void flipSampleSecondaryParticles(const std::string mode,
                                   const Real c_b,
                                   const Real k_ta,
                                   const Real k_wc,
-                                  const Real dt,
+                                  const Real dt = 0,
                                   const int itype = FlagGrid::TypeFluid)
 {
+
+  float timestep = dt;
+  if (dt <= 0)
+    timestep = flags.getParent()->getDt();
+
   if (mode == "single") {
     knFlipSampleSecondaryParticles(flags,
                                    v,
@@ -1001,7 +1006,7 @@ void flipSampleSecondaryParticles(const std::string mode,
                                    c_b,
                                    k_ta,
                                    k_wc,
-                                   dt,
+                                   timestep,
                                    itype);
   }
   else if (mode == "multiple") {
@@ -1020,7 +1025,7 @@ void flipSampleSecondaryParticles(const std::string mode,
                                                 c_b,
                                                 k_ta,
                                                 k_wc,
-                                                dt,
+                                                timestep,
                                                 itype);
   }
   else {
@@ -1053,7 +1058,7 @@ static PyObject *_W_1(PyObject *_self, PyObject *_linargs, PyObject *_kwds)
       const Real c_b = _args.get<Real>("c_b", 13, &_lock);
       const Real k_ta = _args.get<Real>("k_ta", 14, &_lock);
       const Real k_wc = _args.get<Real>("k_wc", 15, &_lock);
-      const Real dt = _args.get<Real>("dt", 16, &_lock);
+      const Real dt = _args.getOpt<Real>("dt", 16, 0, &_lock);
       const int itype = _args.getOpt<int>("itype", 17, FlagGrid::TypeFluid, &_lock);
       _retval = getPyNone();
       flipSampleSecondaryParticles(mode,
@@ -1691,13 +1696,20 @@ void flipUpdateSecondaryParticles(const std::string mode,
                                   const Real k_d,
                                   const Real c_s,
                                   const Real c_b,
-                                  const Real dt,
+                                  const Real dt = 0,
+                                  bool scale = true,
                                   const int exclude = ParticleBase::PTRACER,
                                   const int antitunneling = 0,
                                   const int itype = FlagGrid::TypeFluid)
 {
 
-  Vec3 g = gravity / flags.getDx();
+  float gridScale = (scale) ? flags.getParent()->getDx() : 1;
+  Vec3 g = gravity / gridScale;
+
+  float timestep = dt;
+  if (dt <= 0)
+    timestep = flags.getParent()->getDt();
+
   if (mode == "linear") {
     knFlipUpdateSecondaryParticlesLinear(pts_sec,
                                          v_sec,
@@ -1711,7 +1723,7 @@ void flipUpdateSecondaryParticles(const std::string mode,
                                          k_d,
                                          c_s,
                                          c_b,
-                                         dt,
+                                         timestep,
                                          exclude,
                                          antitunneling);
   }
@@ -1729,7 +1741,7 @@ void flipUpdateSecondaryParticles(const std::string mode,
                                         k_d,
                                         c_s,
                                         c_b,
-                                        dt,
+                                        timestep,
                                         exclude,
                                         antitunneling,
                                         itype);
@@ -1764,10 +1776,11 @@ static PyObject *_W_2(PyObject *_self, PyObject *_linargs, PyObject *_kwds)
       const Real k_d = _args.get<Real>("k_d", 11, &_lock);
       const Real c_s = _args.get<Real>("c_s", 12, &_lock);
       const Real c_b = _args.get<Real>("c_b", 13, &_lock);
-      const Real dt = _args.get<Real>("dt", 14, &_lock);
-      const int exclude = _args.getOpt<int>("exclude", 15, ParticleBase::PTRACER, &_lock);
-      const int antitunneling = _args.getOpt<int>("antitunneling", 16, 0, &_lock);
-      const int itype = _args.getOpt<int>("itype", 17, FlagGrid::TypeFluid, &_lock);
+      const Real dt = _args.getOpt<Real>("dt", 14, 0, &_lock);
+      bool scale = _args.getOpt<bool>("scale", 15, true, &_lock);
+      const int exclude = _args.getOpt<int>("exclude", 16, ParticleBase::PTRACER, &_lock);
+      const int antitunneling = _args.getOpt<int>("antitunneling", 17, 0, &_lock);
+      const int itype = _args.getOpt<int>("itype", 18, FlagGrid::TypeFluid, &_lock);
       _retval = getPyNone();
       flipUpdateSecondaryParticles(mode,
                                    pts_sec,
@@ -1784,6 +1797,7 @@ static PyObject *_W_2(PyObject *_self, PyObject *_linargs, PyObject *_kwds)
                                    c_s,
                                    c_b,
                                    dt,
+                                   scale,
                                    exclude,
                                    antitunneling,
                                    itype);