[Bf-blender-cvs] [355107ce5e5] fluid-mantaflow: Mantaflow: Updated Manta pointer exchange setup

Sebastián Barschkis noreply at git.blender.org
Tue Nov 26 22:02:18 CET 2019


Commit: 355107ce5e598901853c2a67cf116daa647e7b2c
Author: Sebastián Barschkis
Date:   Mon Nov 25 20:45:13 2019 +0100
Branches: fluid-mantaflow
https://developer.blender.org/rB355107ce5e598901853c2a67cf116daa647e7b2c

Mantaflow: Updated Manta pointer exchange setup

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

M	intern/mantaflow/intern/MANTA_main.cpp
M	intern/mantaflow/intern/MANTA_main.h
M	intern/mantaflow/intern/manta_fluid_API.cpp

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

diff --git a/intern/mantaflow/intern/MANTA_main.cpp b/intern/mantaflow/intern/MANTA_main.cpp
index 5789bb3a413..0fb1bb926cd 100644
--- a/intern/mantaflow/intern/MANTA_main.cpp
+++ b/intern/mantaflow/intern/MANTA_main.cpp
@@ -213,7 +213,6 @@ MANTA::MANTA(int *res, MantaModifierData *mmd) : mCurrentID(++solverID)
       initFractions(mmd);
     }
     updatePointers();
-
     return;
   }
 
@@ -238,7 +237,6 @@ MANTA::MANTA(int *res, MantaModifierData *mmd) : mCurrentID(++solverID)
       mResGuiding = (mmd->domain->guiding_parent) ? mmd->domain->guide_res : mmd->domain->res;
       initGuiding(mmd);
     }
-    updatePointers();  // Needs to be after heat, fire, color init
 
     if (mUsingNoise) {
       int amplify = mmd->domain->noise_scale;
@@ -254,9 +252,8 @@ MANTA::MANTA(int *res, MantaModifierData *mmd) : mCurrentID(++solverID)
         initFireHigh(mmd);
       if (mUsingColors)
         initColorsHigh(mmd);
-
-      updatePointersNoise();  // Needs to be after fire, color init
     }
+    updatePointers();
   }
 }
 
@@ -1429,7 +1426,7 @@ int MANTA::readNoise(MantaModifierData *mmd, int framenr)
     pythonCommands.push_back(ss.str());
   }
   runPythonString(pythonCommands);
-  updatePointersNoise();
+  updatePointers();
   return 1;
 }
 
@@ -2021,14 +2018,19 @@ static PyObject *callPythonFunction(std::string varName,
   }
 
   PyGILState_STATE gilstate = PyGILState_Ensure();
-  PyObject *main, *var, *func, *returnedValue;
+  PyObject *main = NULL, *var = NULL, *func = NULL, *returnedValue = NULL;
 
   // Get pyobject that holds result value
   main = PyImport_ImportModule("__main__");
+  if (!main) return NULL;
+
   var = PyObject_GetAttrString(main, varName.c_str());
+  if (!var) return NULL;
+
   func = PyObject_GetAttrString(var, functionName.c_str());
 
   Py_DECREF(var);
+  if (!func) return NULL;
 
   if (!isAttribute) {
     returnedValue = PyObject_CallObject(func, NULL);
@@ -2485,6 +2487,22 @@ void MANTA::updateParticlesFromUni(const char *filename, bool isSecondarySys, bo
   gzclose(gzf);
 }
 
+template<typename T>
+void MANTA::setPointers(std::vector<std::tuple<T **, std::string, std::string, bool>> objects)
+{
+  PyObject *mantaObject = NULL;
+
+  for (typename std::vector<std::tuple<T **, std::string, std::string, bool>>::iterator it = objects.begin(); it != objects.end(); ++it) {
+    if (!std::get<3>(*it)) continue;
+    mantaObject = callPythonFunction(std::get<1>(*it), std::get<2>(*it));
+    if (mantaObject) {
+      (*std::get<0>(*it)) = (T *)stringToPointer(pyObjectToString(mantaObject));
+    } else {
+      (*std::get<0>(*it)) = NULL;
+    }
+  }
+}
+
 void MANTA::updatePointers()
 {
   if (with_debug)
@@ -2500,203 +2518,99 @@ void MANTA::updatePointers()
   std::string snd = "sp" + id;
   std::string mesh = "sm" + id;
   std::string mesh2 = "mesh" + id;
+  std::string noise = "sn" + id;
   std::string solver_ext = "_" + solver;
   std::string parts_ext = "_" + parts;
   std::string snd_ext = "_" + snd;
   std::string mesh_ext = "_" + mesh;
   std::string mesh_ext2 = "_" + mesh2;
-
-  mObstacle = (int *)stringToPointer(
-      pyObjectToString(callPythonFunction("flags" + solver_ext, func)));
-  mPhiIn = (float *)stringToPointer(
-      pyObjectToString(callPythonFunction("phiIn" + solver_ext, func)));
-
-  mVelocityX = (float *)stringToPointer(
-      pyObjectToString(callPythonFunction("x_vel" + solver_ext, func)));
-  mVelocityY = (float *)stringToPointer(
-      pyObjectToString(callPythonFunction("y_vel" + solver_ext, func)));
-  mVelocityZ = (float *)stringToPointer(
-      pyObjectToString(callPythonFunction("z_vel" + solver_ext, func)));
-
-  mForceX = (float *)stringToPointer(
-      pyObjectToString(callPythonFunction("x_force" + solver_ext, func)));
-  mForceY = (float *)stringToPointer(
-      pyObjectToString(callPythonFunction("y_force" + solver_ext, func)));
-  mForceZ = (float *)stringToPointer(
-      pyObjectToString(callPythonFunction("z_force" + solver_ext, func)));
-
-  if (mUsingOutflow) {
-    mPhiOutIn = (float *)stringToPointer(
-        pyObjectToString(callPythonFunction("phiOutIn" + solver_ext, func)));
-  }
-
-  if (mUsingObstacle) {
-    mPhiObsIn = (float *)stringToPointer(
-        pyObjectToString(callPythonFunction("phiObsIn" + solver_ext, func)));
-    mNumObstacle = (int *)stringToPointer(
-        pyObjectToString(callPythonFunction("numObs" + solver_ext, func)));
-
-    mObVelocityX = (float *)stringToPointer(
-        pyObjectToString(callPythonFunction("x_obvel" + solver_ext, func)));
-    mObVelocityY = (float *)stringToPointer(
-        pyObjectToString(callPythonFunction("y_obvel" + solver_ext, func)));
-    mObVelocityZ = (float *)stringToPointer(
-        pyObjectToString(callPythonFunction("z_obvel" + solver_ext, func)));
-  }
-
-  if (mUsingGuiding) {
-    mPhiGuideIn = (float *)stringToPointer(
-        pyObjectToString(callPythonFunction("phiGuideIn" + solver_ext, func)));
-    mNumGuide = (int *)stringToPointer(
-        pyObjectToString(callPythonFunction("numGuides" + solver_ext, func)));
-
-    mGuideVelocityX = (float *)stringToPointer(
-        pyObjectToString(callPythonFunction("x_guidevel" + solver_ext, func)));
-    mGuideVelocityY = (float *)stringToPointer(
-        pyObjectToString(callPythonFunction("y_guidevel" + solver_ext, func)));
-    mGuideVelocityZ = (float *)stringToPointer(
-        pyObjectToString(callPythonFunction("z_guidevel" + solver_ext, func)));
-  }
-
-  if (mUsingInvel) {
-    mInVelocityX = (float *)stringToPointer(
-        pyObjectToString(callPythonFunction("x_invel" + solver_ext, func)));
-    mInVelocityY = (float *)stringToPointer(
-        pyObjectToString(callPythonFunction("y_invel" + solver_ext, func)));
-    mInVelocityZ = (float *)stringToPointer(
-        pyObjectToString(callPythonFunction("z_invel" + solver_ext, func)));
-  }
-
-  // Liquid
-  if (mUsingLiquid) {
-    mPhi = (float *)stringToPointer(
-        pyObjectToString(callPythonFunction("phi" + solver_ext, func)));
-
-    mFlipParticleData = (std::vector<pData> *)stringToPointer(
-        pyObjectToString(callPythonFunction("pp" + solver_ext, func)));
-    mFlipParticleVelocity = (std::vector<pVel> *)stringToPointer(
-        pyObjectToString(callPythonFunction("pVel" + parts_ext, func)));
-
-    if (mUsingMesh) {
-      mMeshNodes = (std::vector<Node> *)stringToPointer(
-          pyObjectToString(callPythonFunction("mesh" + mesh_ext, funcNodes)));
-      mMeshTriangles = (std::vector<Triangle> *)stringToPointer(
-          pyObjectToString(callPythonFunction("mesh" + mesh_ext, funcTris)));
-      if (mUsingMVel)
-        mMeshVelocities = (std::vector<pVel> *)stringToPointer(
-            pyObjectToString(callPythonFunction("mVel" + mesh_ext2, func)));
-    }
-
-    if (mUsingDrops || mUsingBubbles || mUsingFloats || mUsingTracers) {
-      mSndParticleData = (std::vector<pData> *)stringToPointer(
-          pyObjectToString(callPythonFunction("ppSnd" + snd_ext, func)));
-      mSndParticleVelocity = (std::vector<pVel> *)stringToPointer(
-          pyObjectToString(callPythonFunction("pVelSnd" + parts_ext, func)));
-      mSndParticleLife = (std::vector<float> *)stringToPointer(
-          pyObjectToString(callPythonFunction("pLifeSnd" + parts_ext, func)));
-    }
-  }
-
-  // Smoke
-  if (mUsingSmoke) {
-    mDensity = (float *)stringToPointer(
-        pyObjectToString(callPythonFunction("density" + solver_ext, func)));
-    mDensityIn = (float *)stringToPointer(
-        pyObjectToString(callPythonFunction("densityIn" + solver_ext, func)));
-    mShadow = (float *)stringToPointer(
-        pyObjectToString(callPythonFunction("shadow" + solver_ext, func)));
-    mEmissionIn = (float *)stringToPointer(
-        pyObjectToString(callPythonFunction("emissionIn" + solver_ext, func)));
-
-    if (mUsingHeat) {
-      mHeat = (float *)stringToPointer(
-          pyObjectToString(callPythonFunction("heat" + solver_ext, func)));
-      mHeatIn = (float *)stringToPointer(
-          pyObjectToString(callPythonFunction("heatIn" + solver_ext, func)));
-    }
-    if (mUsingFire) {
-      mFlame = (float *)stringToPointer(
-          pyObjectToString(callPythonFunction("flame" + solver_ext, func)));
-      mFuel = (float *)stringToPointer(
-          pyObjectToString(callPythonFunction("fuel" + solver_ext, func)));
-      mReact = (float *)stringToPointer(
-          pyObjectToString(callPythonFunction("react" + solver_ext, func)));
-
-      mFuelIn = (float *)stringToPointer(
-          pyObjectToString(callPythonFunction("fuelIn" + solver_ext, func)));
-      mReactIn = (float *)stringToPointer(
-          pyObjectToString(callPythonFunction("reactIn" + solver_ext, func)));
-    }
-    if (mUsingColors) {
-      mColorR = (float *)stringToPointer(
-          pyObjectToString(callPythonFunction("color_r" + solver_ext, func)));
-      mColorG = (float *)stringToPointer(
-          pyObjectToString(callPythonFunction("color_g" + solver_ext, func)));
-      mColorB = (float *)stringToPointer(
-          pyObjectToString(callPythonFunction("color_b" + solver_ext, func)));
-
-      mColorRIn = (float *)stringToPointer(
-          pyObjectToString(callPythonFunction("color_r_in" + solver_ext, func)));
-      mColorGIn = (float *)stringToPointer(
-          pyObjectToString(callPythonFunction("color_g_in" + solver_ext, func)));
-      mColorBIn = (float *)stringToPointer(
-          pyObjectToString(callPythonFunction("color_b_in" + solver_ext, func)));
-    }
-  }
-}
-
-void MANTA::updatePointersNoise()
-{
-  if (with_debug)
-    std::cout << "MANTA::updatePointersHigh()" << std::endl;
-
-  std::string func = "getDataPointer";
-  std::string id = std::to_string(mCurrentID);
-  std::string solver = "s" + id;
-  std::string solver_ext = "_" + solver;
-
-  std::string noise = "sn" + id;
   std::string noise_ext = "_" + noise;
 
-  // Liquid
-  if (mUsingLiquid) {
-    // Nothing to do here
-  }
-
-  // Smoke
-  if (mUsingSmoke) {
-    mDensityHigh = (float *)stringToPointer(
-        pyObjectToString(callPythonFunction("density" + noise_ext, func)));
-    mShadow = (float *)stringToPointer(
-        pyObjectToString(callPythonFunction("shadow" + solver_ext, func)));
-    mText

@@ Diff output truncated at 10240 characters. @@



More information about the Bf-blender-cvs mailing list