[Bf-blender-cvs] [43d7cbd] soc-2014-fluid: Boundary conditions + new feature

Roman Pogribnyi noreply at git.blender.org
Tue Nov 11 23:43:21 CET 2014


Commit: 43d7cbdea8457cb8b3b16f6f667bfeef0af04752
Author: Roman Pogribnyi
Date:   Tue Nov 11 23:42:18 2014 +0100
Branches: soc-2014-fluid
https://developer.blender.org/rB43d7cbdea8457cb8b3b16f6f667bfeef0af04752

Boundary conditions + new feature

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

M	intern/smoke/intern/FLUID_3D.cpp
M	intern/smoke/intern/MANTA.cpp
M	intern/smoke/intern/scenarios/smoke.h
M	release/scripts/startup/bl_ui/properties_physics_smoke.py
M	source/blender/makesdna/DNA_smoke_types.h
M	source/blender/makesrna/intern/rna_smoke.c

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

diff --git a/intern/smoke/intern/FLUID_3D.cpp b/intern/smoke/intern/FLUID_3D.cpp
index c5aaae3..a53c861 100644
--- a/intern/smoke/intern/FLUID_3D.cpp
+++ b/intern/smoke/intern/FLUID_3D.cpp
@@ -566,7 +566,11 @@ _xRes(res[0]), _yRes(res[1]), _zRes(res[2]), _res(0.0f)
 	
 	_colloPrev = 1;	// default value
 	
-	string smoke_script = smoke_setup_low  + smoke_step_low;
+	string smoke_script = "";
+	if (smd->domain->flags & MOD_SMOKE_MANTA_USE_LIQUID)
+		smoke_script = smoke_setup_low  + liquid_step_low;
+	else
+		smoke_script = smoke_setup_low  + smoke_step_low;
 	smd->domain->fluid = this;
 	std::string final_script = Manta_API::parseScript(smoke_script, smd);
 	vector<string> a;
diff --git a/intern/smoke/intern/MANTA.cpp b/intern/smoke/intern/MANTA.cpp
index e7202e7..a6576d4 100644
--- a/intern/smoke/intern/MANTA.cpp
+++ b/intern/smoke/intern/MANTA.cpp
@@ -466,6 +466,11 @@ std::string Manta_API::getRealValue( const std::string& varName, SmokeModifierDa
 		ss << (-smd->domain->beta);
 	else if (varName == "ADVECT_ORDER")
 		ss << 2;
+	else if (varName == "BOUNDCONDITIONS"){
+		if(smd->domain->border_collisions == SM_BORDER_OPEN) ss << "xXyYz";
+		else if (smd->domain->border_collisions == SM_BORDER_VERTICAL) ss << "xXyYz";
+		else if (smd->domain->border_collisions == SM_BORDER_CLOSED) ss << "xXyYzZ";
+	}
 	else if (varName == "GRAVITY")
 		ss << "vec3(0,0,-0.981)";
 	else if (varName == "ABS_FLOW")
diff --git a/intern/smoke/intern/scenarios/smoke.h b/intern/smoke/intern/scenarios/smoke.h
index 84d5587..4f238c4 100644
--- a/intern/smoke/intern/scenarios/smoke.h
+++ b/intern/smoke/intern/scenarios/smoke.h
@@ -23,7 +23,7 @@ timings = Timings()\n\
 # prepare grids\n\
 flags = s.create(FlagGrid)\n\
 vel = s.create(MACGrid)\n\
-density = s.create(RealGrid)\n\
+density = s.create(LevelsetGrid)\n\
 pressure = s.create(RealGrid)\n\
 \n\
 # noise field\n\
@@ -44,7 +44,9 @@ source = s.create(Mesh)\n\
 forces = s.create(MACGrid)\n\
 dict_loaded = dict()\n\
 manta_using_colors = False\n\
-manta_using_heat = False\n";
+manta_using_heat = False\n\
+low_flags_updated = False\n\
+";
 
 const string smoke_setup_high = "xl_gs = vec3($HRESX$, $HRESY$, $HRESZ$) \n\
 xl = Solver(name = 'larger', gridSize = xl_gs) \n\
@@ -124,6 +126,7 @@ del color_g_high \n\
 del color_b_high \n\
 manta_using_colors = False";
 
+
 const string smoke_step_low = "def sim_step_low(t):\n\
   print ('Step:' + str(t))\n\
   if \"abc123\" in globals():\n\
@@ -153,7 +156,7 @@ const string smoke_step_low = "def sim_step_low(t):\n\
   #vorticityConfinement( vel=vel, flags=flags, strength=0.2 ) \n\
   addForceField(flags=flags, vel=vel,force=forces)\n\
   \n\
-  solvePressure(flags=flags, vel=vel, pressure=pressure, useResNorm=True, openBound='xXyYzZ')\n\
+  solvePressure(flags=flags, vel=vel, pressure=pressure, useResNorm=True, openBound='$BOUNDCONDITIONS$')\n\
   setWallBcs(flags=flags, vel=vel)\n\
   \n\
   s.step()\n";
@@ -177,6 +180,35 @@ const string smoke_step_low = "def sim_step_low(t):\n\
 //  #os.rename('den%04d_temp.uni' % t, 'den%04d.uni' % t) \n\
 //  s.step()\n";
 
+const string liquid_step_low = "def sim_step_low(t):\n\
+#update flags form density on first step\n\
+  density.multConst(-1.)\n\
+  print (manta_using_colors)\n\
+  global low_flags_updated\n\
+  if not low_flags_updated:\n\
+    print ('Updating Flags from Levelset on startup!')\n\
+    flags.updateFromLevelset(density)\n\
+  low_flags_updated = True \n\
+  density.reinitMarching(flags=flags, velTransport=vel)\n\
+  accuracy = 5e-5\n\
+  advectSemiLagrange(flags=flags, vel=vel, grid=density, order=2)\n\
+  flags.updateFromLevelset(density)\n\
+  \n\
+  advectSemiLagrange(flags=flags, vel=vel, grid=vel, order=2)\n\
+  addGravity(flags=flags, vel=vel, gravity=vec3(0,0,-0.981))\n\
+  \n\
+  # print current maximal velocity\n\
+  maxvel = vel.getMaxValue()\n\
+  print ('Current max velocity %f ' % maxvel)\n\
+  \n\
+  # pressure solve\n\
+  setWallBcs(flags=flags, vel=vel)\n\
+  solvePressure(flags=flags, vel=vel, pressure=pressure, cgMaxIterFac=0.5, cgAccuracy=accuracy, useResNorm=False) \n\
+  setWallBcs(flags=flags, vel=vel)\n\
+  s.step()\n\
+  density.multConst(-1.)\n\
+";
+
 const string smoke_step_high = "def sim_step_high(t):\n\
   interpolateMACGrid( source=vel, target=xl_vel ) \n\
   sStr = 1.0 * wltStrength  \n\
diff --git a/release/scripts/startup/bl_ui/properties_physics_smoke.py b/release/scripts/startup/bl_ui/properties_physics_smoke.py
index c6601ea..9b496b1 100644
--- a/release/scripts/startup/bl_ui/properties_physics_smoke.py
+++ b/release/scripts/startup/bl_ui/properties_physics_smoke.py
@@ -445,6 +445,7 @@ class PHYSICS_PT_smoke_manta_settings(PhysicButtonsPanel, Panel):
         domain = context.smoke.domain_settings
         layout.active = domain.use_manta
         split = layout.split()
+        split.prop(domain, "use_manta_liquid", text="Liquid")
         tot = domain.manta_end_frame - domain.manta_start_frame
         if domain.manta_sim_frame == -1:
             split.operator("manta_export_scene.button", text="Create Manta Setup")
diff --git a/source/blender/makesdna/DNA_smoke_types.h b/source/blender/makesdna/DNA_smoke_types.h
index 244efc7..b274723 100644
--- a/source/blender/makesdna/DNA_smoke_types.h
+++ b/source/blender/makesdna/DNA_smoke_types.h
@@ -43,6 +43,7 @@ enum {
 	MOD_SMOKE_FILE_LOAD = (1 << 6),  /* flag for file load */
 	MOD_SMOKE_ADAPTIVE_DOMAIN = (1 << 7),
 	MOD_SMOKE_NOISE_CLAMP = (1 << 8), /*for mantaflow*/
+	MOD_SMOKE_MANTA_USE_LIQUID = (1 << 9),/*enable liquid simulation*/
 };
 
 #if (DNA_DEPRECATED_GCC_POISON == 1)
diff --git a/source/blender/makesrna/intern/rna_smoke.c b/source/blender/makesrna/intern/rna_smoke.c
index 80ac932..c92804b 100644
--- a/source/blender/makesrna/intern/rna_smoke.c
+++ b/source/blender/makesrna/intern/rna_smoke.c
@@ -571,6 +571,11 @@ static void rna_def_smoke_domain_settings(BlenderRNA *brna)
 	RNA_def_property_ui_text(prop, "MantaFlow", "Use Mantaflow");
 	RNA_def_property_update(prop, NC_OBJECT | ND_MODIFIER, "rna_Smoke_manta_write_settings");
 	
+	prop = RNA_def_property(srna, "use_manta_liquid", PROP_BOOLEAN, PROP_NONE);
+	RNA_def_property_boolean_sdna(prop, NULL, "flags", MOD_SMOKE_MANTA_USE_LIQUID);
+	RNA_def_property_ui_text(prop, "MantaFlow Liquid", "Use Mantaflow liquid");
+	RNA_def_property_update(prop, NC_OBJECT | ND_MODIFIER, "rna_Smoke_reset");
+	
 	prop = RNA_def_property(srna, "manta_solver_res", PROP_INT, PROP_NONE);
 	RNA_def_property_int_sdna(prop, NULL, "manta_solver_res");
 	RNA_def_property_range(prop, 2, 3);




More information about the Bf-blender-cvs mailing list