[Bf-blender-cvs] [986093d] fluid-mantaflow: now using adaptTimestep(), new step setup and correct dt
SebastiaÌ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