[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