[Bf-blender-cvs] [6ca148dad01] fluid-mantaflow: Mantaflow: Minor sanity checks

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


Commit: 6ca148dad01aeb9a2275221bcc3291eff7461d34
Author: Sebastián Barschkis
Date:   Thu Dec 12 22:34:52 2019 +0100
Branches: fluid-mantaflow
https://developer.blender.org/rB6ca148dad01aeb9a2275221bcc3291eff7461d34

Mantaflow: Minor sanity checks

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

M	intern/mantaflow/intern/MANTA_main.cpp
M	intern/mantaflow/intern/strings/smoke_script.h
M	source/blender/blenkernel/intern/manta.c

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

diff --git a/intern/mantaflow/intern/MANTA_main.cpp b/intern/mantaflow/intern/MANTA_main.cpp
index bdec46f4661..458fbf0813c 100644
--- a/intern/mantaflow/intern/MANTA_main.cpp
+++ b/intern/mantaflow/intern/MANTA_main.cpp
@@ -60,23 +60,23 @@ MANTA::MANTA(int *res, FluidModifierData *mmd) : mCurrentID(++solverID)
 
   mmd->domain->fluid = this;
 
-  mUsingHeat = mmd->domain->active_fields & FLUID_DOMAIN_ACTIVE_HEAT;
-  mUsingFire = mmd->domain->active_fields & FLUID_DOMAIN_ACTIVE_FIRE;
-  mUsingColors = mmd->domain->active_fields & FLUID_DOMAIN_ACTIVE_COLORS;
-  mUsingObstacle = mmd->domain->active_fields & FLUID_DOMAIN_ACTIVE_OBSTACLE;
-  mUsingInvel = mmd->domain->active_fields & FLUID_DOMAIN_ACTIVE_INVEL;
-  mUsingOutflow = mmd->domain->active_fields & FLUID_DOMAIN_ACTIVE_OUTFLOW;
-  mUsingNoise = mmd->domain->flags & FLUID_DOMAIN_USE_NOISE;
-  mUsingMesh = mmd->domain->flags & FLUID_DOMAIN_USE_MESH;
-  mUsingMVel = mmd->domain->flags & FLUID_DOMAIN_USE_SPEED_VECTORS;
-  mUsingGuiding = mmd->domain->flags & FLUID_DOMAIN_USE_GUIDING;
-  mUsingFractions = mmd->domain->flags & FLUID_DOMAIN_USE_FRACTIONS;
-  mUsingLiquid = mmd->domain->type == FLUID_DOMAIN_TYPE_LIQUID;
-  mUsingSmoke = mmd->domain->type == FLUID_DOMAIN_TYPE_GAS;
-  mUsingDrops = mmd->domain->particle_type & FLUID_DOMAIN_PARTICLE_SPRAY;
-  mUsingBubbles = mmd->domain->particle_type & FLUID_DOMAIN_PARTICLE_BUBBLE;
-  mUsingFloats = mmd->domain->particle_type & FLUID_DOMAIN_PARTICLE_FOAM;
-  mUsingTracers = mmd->domain->particle_type & FLUID_DOMAIN_PARTICLE_TRACER;
+  mUsingLiquid = (mmd->domain->type == FLUID_DOMAIN_TYPE_LIQUID);
+  mUsingSmoke = (mmd->domain->type == FLUID_DOMAIN_TYPE_GAS);
+  mUsingHeat = (mmd->domain->active_fields & FLUID_DOMAIN_ACTIVE_HEAT) && mUsingSmoke;
+  mUsingFire = (mmd->domain->active_fields & FLUID_DOMAIN_ACTIVE_FIRE) && mUsingSmoke;
+  mUsingColors = (mmd->domain->active_fields & FLUID_DOMAIN_ACTIVE_COLORS) && mUsingSmoke;
+  mUsingNoise = (mmd->domain->flags & FLUID_DOMAIN_USE_NOISE) && mUsingSmoke;
+  mUsingFractions = (mmd->domain->flags & FLUID_DOMAIN_USE_FRACTIONS) && mUsingLiquid;
+  mUsingDrops = (mmd->domain->particle_type & FLUID_DOMAIN_PARTICLE_SPRAY) && mUsingLiquid;
+  mUsingBubbles = (mmd->domain->particle_type & FLUID_DOMAIN_PARTICLE_BUBBLE) && mUsingLiquid;
+  mUsingFloats = (mmd->domain->particle_type & FLUID_DOMAIN_PARTICLE_FOAM) && mUsingLiquid;
+  mUsingTracers = (mmd->domain->particle_type & FLUID_DOMAIN_PARTICLE_TRACER) && mUsingLiquid;
+  mUsingMesh = (mmd->domain->flags & FLUID_DOMAIN_USE_MESH) && mUsingLiquid;
+  mUsingMVel = (mmd->domain->flags & FLUID_DOMAIN_USE_SPEED_VECTORS) && mUsingLiquid;
+  mUsingObstacle = (mmd->domain->active_fields & FLUID_DOMAIN_ACTIVE_OBSTACLE);
+  mUsingInvel = (mmd->domain->active_fields & FLUID_DOMAIN_ACTIVE_INVEL);
+  mUsingOutflow = (mmd->domain->active_fields & FLUID_DOMAIN_ACTIVE_OUTFLOW);
+  mUsingGuiding = (mmd->domain->flags & FLUID_DOMAIN_USE_GUIDING);
 
   // Simulation constants
   mTempAmb = 0;  // TODO: Maybe use this later for buoyancy calculation
diff --git a/intern/mantaflow/intern/strings/smoke_script.h b/intern/mantaflow/intern/strings/smoke_script.h
index 1c839fa6d52..ef300fc5c17 100644
--- a/intern/mantaflow/intern/strings/smoke_script.h
+++ b/intern/mantaflow/intern/strings/smoke_script.h
@@ -155,9 +155,9 @@ smoke_noise_dict_s$ID$ = dict(density_noise=density_sn$ID$, uv0_noise=uvGrid0_s$
 const std::string smoke_alloc_colors =
     "\n\
 # Sanity check, clear grids first\n\
-del color_r_s$ID$\n\
-del color_g_s$ID$\n\
-del color_b_s$ID$\n\
+if 'color_r_s$ID$' in globals(): del color_r_s$ID$\n\
+if 'color_g_s$ID$' in globals(): del color_g_s$ID$\n\
+if 'color_b_s$ID$' in globals(): del color_b_s$ID$\n\
 \n\
 mantaMsg('Allocating colors')\n\
 color_r_s$ID$    = s$ID$.create(RealGrid)\n\
@@ -175,9 +175,9 @@ if 'smoke_data_dict_s$ID$' in globals():\n\
 const std::string smoke_alloc_colors_noise =
     "\n\
 # Sanity check, clear grids first\n\
-del color_r_sn$ID$\n\
-del color_g_sn$ID$\n\
-del color_b_sn$ID$\n\
+if 'color_r_sn$ID$' in globals(): del color_r_sn$ID$\n\
+if 'color_g_sn$ID$' in globals(): del color_g_sn$ID$\n\
+if 'color_b_sn$ID$' in globals(): del color_b_sn$ID$\n\
 \n\
 mantaMsg('Allocating colors noise')\n\
 color_r_sn$ID$ = sn$ID$.create(RealGrid)\n\
@@ -211,8 +211,8 @@ color_b_sn$ID$.multConst($COLOR_B$)\n";
 const std::string smoke_alloc_heat =
     "\n\
 # Sanity check, clear grids first\n\
-del heat_s$ID$\n\
-del heatIn_s$ID$\n\
+if 'heat_s$ID$' in globals(): del heat_s$ID$\n\
+if 'heatIn_s$ID$' in globals(): del heatIn_s$ID$\n\
 \n\
 mantaMsg('Allocating heat')\n\
 heat_s$ID$   = s$ID$.create(RealGrid)\n\
@@ -225,11 +225,11 @@ if 'smoke_data_dict_s$ID$' in globals():\n\
 const std::string smoke_alloc_fire =
     "\n\
 # Sanity check, clear grids first\n\
-del flame_s$ID$\n\
-del fuel_s$ID$\n\
-del react_s$ID$\n\
-del fuelIn_s$ID$\n\
-del reactIn_s$ID$\n\
+if 'flame_s$ID$' in globals(): del flame_s$ID$\n\
+if 'fuel_s$ID$' in globals(): del fuel_s$ID$\n\
+if 'react_s$ID$' in globals(): del react_s$ID$\n\
+if 'fuelIn_s$ID$' in globals(): del fuelIn_s$ID$\n\
+if 'reactIn_s$ID$' in globals(): del reactIn_s$ID$\n\
 \n\
 mantaMsg('Allocating fire')\n\
 flame_s$ID$   = s$ID$.create(RealGrid)\n\
@@ -246,9 +246,9 @@ if 'smoke_data_dict_s$ID$' in globals():\n\
 const std::string smoke_alloc_fire_noise =
     "\n\
 # Sanity check, clear grids first\n\
-del flame_sn$ID$\n\
-del fuel_sn$ID$\n\
-del react_sn$ID$\n\
+if 'flame_sn$ID$' in globals(): del flame_sn$ID$\n\
+if 'fuel_sn$ID$' in globals(): del fuel_sn$ID$\n\
+if 'react_sn$ID$' in globals(): del react_sn$ID$\n\
 \n\
 mantaMsg('Allocating fire noise')\n\
 flame_sn$ID$ = sn$ID$.create(RealGrid)\n\
diff --git a/source/blender/blenkernel/intern/manta.c b/source/blender/blenkernel/intern/manta.c
index dedb6654397..ff07ed24454 100644
--- a/source/blender/blenkernel/intern/manta.c
+++ b/source/blender/blenkernel/intern/manta.c
@@ -1453,6 +1453,10 @@ static void update_obstacleflags(FluidDomainSettings *mds, Object **collobjs, in
   int active_fields = mds->active_fields;
   unsigned int collIndex;
 
+  /* First, remove all flags that we want to update. */
+  int prev_flags = (FLUID_DOMAIN_ACTIVE_OBSTACLE | FLUID_DOMAIN_ACTIVE_GUIDING);
+  active_fields &= ~prev_flags;
+
   /* Monitor active fields based on flow settings */
   for (collIndex = 0; collIndex < numcollobj; collIndex++) {
     Object *collob = collobjs[collIndex];
@@ -3133,6 +3137,12 @@ static void update_flowsflags(FluidDomainSettings *mds, Object **flowobjs, int n
       continue;
     }
 
+    /* First, remove all flags that we want to update. */
+    int prev_flags = (FLUID_DOMAIN_ACTIVE_INVEL | FLUID_DOMAIN_ACTIVE_OUTFLOW |
+                      FLUID_DOMAIN_ACTIVE_HEAT | FLUID_DOMAIN_ACTIVE_FIRE |
+                      FLUID_DOMAIN_ACTIVE_COLOR_SET | FLUID_DOMAIN_ACTIVE_COLORS);
+    active_fields &= ~prev_flags;
+
     if ((mmd2->type & MOD_MANTA_TYPE_FLOW) && mmd2->flow) {
       FluidFlowSettings *mfs = mmd2->flow;
       if (!mfs) {



More information about the Bf-blender-cvs mailing list