[Bf-blender-cvs] [986093d] fluid-mantaflow: now using adaptTimestep(), new step setup and correct dt

Sebastián Barschkis noreply at git.blender.org
Sun Feb 14 23:17:23 CET 2016


Commit: 986093dfb7150ffb925413ffd306a261618d4c98
Author: Sebastián Barschkis
Date:   Sun Feb 14 23:16:48 2016 +0100
Branches: fluid-mantaflow
https://developer.blender.org/rB986093dfb7150ffb925413ffd306a261618d4c98

now using adaptTimestep(), new step setup and correct dt

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

M	intern/smoke/intern/FLUID_3D.cpp
M	intern/smoke/intern/MANTA.cpp
M	intern/smoke/intern/scenarios/smoke.h
M	intern/smoke/intern/smoke_API.cpp

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

diff --git a/intern/smoke/intern/FLUID_3D.cpp b/intern/smoke/intern/FLUID_3D.cpp
index 8df747a..824d42e 100644
--- a/intern/smoke/intern/FLUID_3D.cpp
+++ b/intern/smoke/intern/FLUID_3D.cpp
@@ -611,6 +611,7 @@ _xRes(res[0]), _yRes(res[1]), _zRes(res[2]), _res(0.0f)
 		//noise_low +
 		prep_domain_low +
 		flags +
+		manta_step +
 		smoke_step_low;
 	std::string final_script = Manta_API::parse_script(setup_script, smd);
 	PyGILState_STATE gilstate = PyGILState_Ensure();
@@ -742,7 +743,7 @@ void FLUID_3D::step(float dt, float gravity[3])
 	//manta_write_effectors(this);
 
 	PyGILState_STATE gilstate = PyGILState_Ensure();
-	std::string py_string_0 = string("step_low()");
+	std::string py_string_0 = string("manta_step()");
 	PyRun_SimpleString(py_string_0.c_str());
 	PyGILState_Release(gilstate);
 	Manta_API::update_pointers(this);
diff --git a/intern/smoke/intern/MANTA.cpp b/intern/smoke/intern/MANTA.cpp
index a0a60bf..5f48b4e 100644
--- a/intern/smoke/intern/MANTA.cpp
+++ b/intern/smoke/intern/MANTA.cpp
@@ -425,6 +425,7 @@ std::string Manta_API::get_real_value( const std::string& varName, SmokeModifier
 {
 	ostringstream ss;
 	bool is2D = smd->domain->fluid->manta_resoution == 2;
+	ModifierData *md = ((ModifierData*) smd);
 	if (varName == "UVS_CNT")
 		ss << smd->domain->manta_uvs_num ;
 	else if (varName == "UPRES")
@@ -523,6 +524,10 @@ std::string Manta_API::get_real_value( const std::string& varName, SmokeModifier
 		ss << (smd->domain->flame_max_temp);
 	else if (varName == "DT")
 		ss << smd->domain->fluid->_dt;
+	else if (varName == "FPS")
+		ss << md->scene->r.frs_sec / md->scene->r.frs_sec_base;
+	else if (varName == "DT_FACTOR")
+		ss << smd->domain->time_scale;
 	else if (varName == "FLAME_SMOKE_COLOR_X")
 		ss << smd->domain->flame_smoke_color[0];
 	else if (varName == "FLAME_SMOKE_COLOR_Y")
diff --git a/intern/smoke/intern/scenarios/smoke.h b/intern/smoke/intern/scenarios/smoke.h
index a4aec0e..cf00e56 100644
--- a/intern/smoke/intern/scenarios/smoke.h
+++ b/intern/smoke/intern/scenarios/smoke.h
@@ -38,7 +38,17 @@ gs = vec3($RESX$,$RESY$,$RESZ$)\n\
 if dim == 2:\n\
   gs.z = 1\n\
 s = FluidSolver(name='main', gridSize=gs, dim=dim)\n\
-s.timestep = $TIMESTEP$\n\
+# old timestep -> not used when adaptTimestep is used\n\
+#s.timestep = $TIMESTEP$\n\
+dt_default = 0.1\n\
+dt_factor = $DT_FACTOR$\n\
+fps = $FPS$\n\
+dt0 = dt_default * (25.0 / fps) * dt_factor\n\
+s.frameLength = dt0\n\
+s.timestepMin = dt0 / 10\n\
+s.timestepMax = dt0\n\
+s.cfl = 4.0\n\
+s.timestep = dt0\n\
 timings = Timings()\n\
 vorticity = $VORTICITY$\n\
 boundaryWidth = 1\n\
@@ -220,8 +230,8 @@ for step in range(1000):\n\
   if using_fire:\n\
     update_flame_low()\n\
   \n\
-  print('High step '+ str(step))\n\
   if using_wavelets:\n\
+    print('High step '+ str(step))\n\
     if using_fire:\n\
       process_burn_high()\n\
     step_high()\n\
@@ -304,6 +314,34 @@ if 'xl_noise' in globals() : del xl_noise\n\
 if 'xl_wltnoise' in globals() : del xl_wltnoise\n";
 
 //////////////////////////////////////////////////////////////////////
+// MANTA STEP
+//////////////////////////////////////////////////////////////////////
+
+const string manta_step = "\n\
+def manta_step():\n\
+  next_frame = s.frame + 1\n\
+  while s.frame < next_frame:\n\
+    print('Adapt timestep')\n\
+    maxvel = vel.getMaxValue()\n\
+    s.adaptTimestep(maxvel)\n\
+    \n\
+    print('Low step / s.frame: ' + str(s.frame))\n\
+    if using_fire:\n\
+      process_burn_low()\n\
+    step_low()\n\
+    if using_fire:\n\
+      update_flame_low()\n\
+    \n\
+    if using_wavelets:\n\
+      print('High step / s.frame: ' + str(s.frame))\n\
+      if using_fire:\n\
+        process_burn_high()\n\
+      step_high()\n\
+      if using_fire:\n\
+        update_flame_high()\n\
+    s.step()\n";
+
+//////////////////////////////////////////////////////////////////////
 // STEP FUNCTIONS LOW
 //////////////////////////////////////////////////////////////////////
 
@@ -369,14 +407,15 @@ def step_low():\n\
   # TODO: addForceField(flags=flags, vel=vel, force=forces)\n\
   # TODO: forces.clear()\n\
   copyMacToReal(source=vel, targetX=x_vel, targetY=y_vel, targetZ=z_vel)\n\
-  s.step()\n\
+  # --> removing solver step for now from here \n\
+  # s.step()\n\
 \n\
 def process_burn_low():\n\
   print('Process burn low')\n\
   if (using_colors):\n\
-    processBurn(fuel=fuel, density=density, react=react, red=color_r, green=color_g, blue=color_b, heat=heat, burningRate=$BURNING_RATE$, flameSmoke=$FLAME_SMOKE$, ignitionTemp=$IGNITION_TEMP$, maxTemp=$MAX_TEMP$, dt=$DT$, flameSmokeColor=vec3($FLAME_SMOKE_COLOR_X$,$FLAME_SMOKE_COLOR_Y$,$FLAME_SMOKE_COLOR_Z$))\n\
+    processBurn(fuel=fuel, density=density, react=react, red=color_r, green=color_g, blue=color_b, heat=heat, burningRate=$BURNING_RATE$, flameSmoke=$FLAME_SMOKE$, ignitionTemp=$IGNITION_TEMP$, maxTemp=$MAX_TEMP$, dt=dt0, flameSmokeColor=vec3($FLAME_SMOKE_COLOR_X$,$FLAME_SMOKE_COLOR_Y$,$FLAME_SMOKE_COLOR_Z$))\n\
   else:\n\
-    processBurn(fuel=fuel, density=density, react=react, heat=heat, burningRate=$BURNING_RATE$, flameSmoke=$FLAME_SMOKE$, ignitionTemp=$IGNITION_TEMP$, maxTemp=$MAX_TEMP$, dt=$DT$, flameSmokeColor=vec3($FLAME_SMOKE_COLOR_X$,$FLAME_SMOKE_COLOR_Y$,$FLAME_SMOKE_COLOR_Z$))\n\
+    processBurn(fuel=fuel, density=density, react=react, heat=heat, burningRate=$BURNING_RATE$, flameSmoke=$FLAME_SMOKE$, ignitionTemp=$IGNITION_TEMP$, maxTemp=$MAX_TEMP$, dt=dt0, flameSmokeColor=vec3($FLAME_SMOKE_COLOR_X$,$FLAME_SMOKE_COLOR_Y$,$FLAME_SMOKE_COLOR_Z$))\n\
 \n\
 def update_flame_low():\n\
   print('Update flame low')\n\
@@ -416,16 +455,15 @@ def step_high():\n\
     print('Advecting density high')\n\
     advectSemiLagrange(flags=xl_flags, vel=xl_vel, grid=xl_density, order=$ADVECT_ORDER$, openBounds=doOpen)\n\
   \n\
-  xl.step()\n\
-  \n\
-  timings.display()\n\
+  # --> removing solver step for now from here\n\
+  # xl.step()\n\
 \n\
 def process_burn_high():\n\
   print('Process burn high')\n\
   if (using_colors):\n\
-    processBurn(fuel=xl_fuel, density=xl_density, react=xl_react, red=xl_color_r, green=xl_color_g, blue=xl_color_b, burningRate=$BURNING_RATE$, flameSmoke=$FLAME_SMOKE$, ignitionTemp=$IGNITION_TEMP$, maxTemp=$MAX_TEMP$, dt=$DT$, flameSmokeColor=vec3($FLAME_SMOKE_COLOR_X$,$FLAME_SMOKE_COLOR_Y$,$FLAME_SMOKE_COLOR_Z$))\n\
+    processBurn(fuel=xl_fuel, density=xl_density, react=xl_react, red=xl_color_r, green=xl_color_g, blue=xl_color_b, burningRate=$BURNING_RATE$, flameSmoke=$FLAME_SMOKE$, ignitionTemp=$IGNITION_TEMP$, maxTemp=$MAX_TEMP$, dt=dt0, flameSmokeColor=vec3($FLAME_SMOKE_COLOR_X$,$FLAME_SMOKE_COLOR_Y$,$FLAME_SMOKE_COLOR_Z$))\n\
   else:\n\
-    processBurn(fuel=xl_fuel, density=xl_density, react=xl_react, burningRate=$BURNING_RATE$, flameSmoke=$FLAME_SMOKE$, ignitionTemp=$IGNITION_TEMP$, maxTemp=$MAX_TEMP$, dt=$DT$, flameSmokeColor=vec3($FLAME_SMOKE_COLOR_X$,$FLAME_SMOKE_COLOR_Y$,$FLAME_SMOKE_COLOR_Z$))\n\
+    processBurn(fuel=xl_fuel, density=xl_density, react=xl_react, burningRate=$BURNING_RATE$, flameSmoke=$FLAME_SMOKE$, ignitionTemp=$IGNITION_TEMP$, maxTemp=$MAX_TEMP$, dt=dt0, flameSmokeColor=vec3($FLAME_SMOKE_COLOR_X$,$FLAME_SMOKE_COLOR_Y$,$FLAME_SMOKE_COLOR_Z$))\n\
 \n\
 def update_flame_high():\n\
   print('Update flame high')\n\
diff --git a/intern/smoke/intern/smoke_API.cpp b/intern/smoke/intern/smoke_API.cpp
index bac31a9..8823e6d 100644
--- a/intern/smoke/intern/smoke_API.cpp
+++ b/intern/smoke/intern/smoke_API.cpp
@@ -104,6 +104,7 @@ extern "C" void smoke_manta_export(SmokeModifierData *smd)
 	Manta_API::manta_export_grids(smd);
 }
 
+#ifndef WITH_MANTA
 extern "C" void smoke_step(FLUID_3D *fluid, float gravity[3], float dtSubdiv)
 {
 	if (fluid->_fuel) {
@@ -116,6 +117,14 @@ extern "C" void smoke_step(FLUID_3D *fluid, float gravity[3], float dtSubdiv)
 		fluid->updateFlame(fluid->_react, fluid->_flame, fluid->_totalCells);
 	}
 }
+//////////////////////////////////////////////////////////////////////
+#else /*USING MANTAFLOW STRUCTURES*/
+//////////////////////////////////////////////////////////////////////
+extern "C" void smoke_step(FLUID_3D *fluid, float gravity[3], float dtSubdiv)
+{
+	fluid->step(dtSubdiv, gravity);
+}
+#endif /*WITH MANTA*/
 
 #ifndef WITH_MANTA
 extern "C" void smoke_turbulence_step(WTURBULENCE *wt, FLUID_3D *fluid)




More information about the Bf-blender-cvs mailing list