Commit: 04d826c296d6c7bf74217e9b41905d62d0b6e020
Author: Sebastián Barschkis
Date:   Tue Sep 8 13:04:01 2015 +0200
Branches: fluid-mantaflow
https://developer.blender.org/rB04d826c296d6c7bf74217e9b41905d62d0b6e020

finished high resolution fire

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

M       intern/smoke/intern/FLUID_3D.cpp
M       intern/smoke/intern/WTURBULENCE.cpp
M       intern/smoke/intern/WTURBULENCE.h
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 17faded..dfb18d1 100644
--- a/intern/smoke/intern/FLUID_3D.cpp
+++ b/intern/smoke/intern/FLUID_3D.cpp
@@ -760,7 +760,6 @@ void FLUID_3D::step(float dt, float gravity[3])
        // Blender computes heat buoyancy, not yet impl. in Manta
        manta_write_effectors(this);
        Manta_API::updatePointers(this);
-//     diffuseHeat();
 
        int sim_frame = 1;
        PyGILState_STATE gilstate = PyGILState_Ensure();
@@ -786,7 +785,7 @@ void FLUID_3D::processBurn(float *fuel, float *smoke, float 
*react, float *heat,
        initColors(0.0f, 0.0f, 0.0f);
        
        PyGILState_STATE gilstate = PyGILState_Ensure();
-       PyRun_SimpleString(fire_process_burn.c_str());
+       PyRun_SimpleString(fire_process_burn_low.c_str());
        PyGILState_Release(gilstate);
        Manta_API::updatePointers(this);
 }
@@ -794,7 +793,7 @@ void FLUID_3D::processBurn(float *fuel, float *smoke, float 
*react, float *heat,
 void FLUID_3D::updateFlame(float *react, float *flame, int total_cells)
 {
        PyGILState_STATE gilstate = PyGILState_Ensure();
-       PyRun_SimpleString(fire_update_flame.c_str());
+       PyRun_SimpleString(fire_update_flame_low.c_str());
        PyGILState_Release(gilstate);
        Manta_API::updatePointers(this);
 }
diff --git a/intern/smoke/intern/WTURBULENCE.cpp 
b/intern/smoke/intern/WTURBULENCE.cpp
index 58fff5f..9a7b276 100644
--- a/intern/smoke/intern/WTURBULENCE.cpp
+++ b/intern/smoke/intern/WTURBULENCE.cpp
@@ -1250,6 +1250,9 @@ WTURBULENCE::WTURBULENCE(int xResSm, int yResSm, int 
zResSm, int amplify, int no
                _densityBigOld[i] = 0.;
        }
        
+       /*heat*/
+       initHeat();
+       
        /* fire */
        _flameBig = _fuelBig = _fuelBigOld = NULL;
        _reactBig = _reactBigOld = NULL;
@@ -1321,17 +1324,12 @@ WTURBULENCE::~WTURBULENCE()
        delete[] _noiseTile;
 }
 
-void WTURBULENCE::initFire()
+// Added heat grid as processBurn in smoke.h needs an initialized heat grid
+void WTURBULENCE::initHeat()
 {
-       if (!_flameBig) {
-               initColors(0.0f, 0.0f, 0.0f);
-
-               using_fire = true;
-               PyGILState_STATE gilstate = PyGILState_Ensure();
-               PyRun_SimpleString(smoke_init_fire_high.c_str());
-               PyGILState_Release(gilstate);
-               Manta_API::updateHighResPointers(this);
-       }
+       PyGILState_STATE gilstate = PyGILState_Ensure();
+       PyRun_SimpleString(smoke_init_heat_high.c_str());
+       PyGILState_Release(gilstate);
 }
 
 void WTURBULENCE::initColors(float init_r, float init_g, float init_b)
@@ -1350,6 +1348,17 @@ void WTURBULENCE::initColors(float init_r, float init_g, 
float init_b)
        }
 }
 
+void WTURBULENCE::initFire()
+{
+       if (!_flameBig) {
+               using_fire = true;
+               PyGILState_STATE gilstate = PyGILState_Ensure();
+               PyRun_SimpleString(smoke_init_fire_high.c_str());
+               PyGILState_Release(gilstate);
+               Manta_API::updateHighResPointers(this);
+       }
+}
+
 void WTURBULENCE::setNoise(int type, const char *noisefile_path)
 {}
 
@@ -1372,7 +1381,7 @@ void WTURBULENCE::stepTurbulenceReadable(float dt, float* 
xvel, float* yvel, flo
 
 // step more complete version -- include rotation correction
 // and use OpenMP if available
-void WTURBULENCE::stepTurbulenceFull(float dt, float* xvel, float* yvel, 
float* zvel, unsigned char *obstacles)
+void WTURBULENCE::stepTurbulenceFull(float dt, float *xvel, float *yvel, float 
*zvel, unsigned char *obstacles)
 {
        PyGILState_STATE gilstate = PyGILState_Ensure();
        int sim_frame = 1;
@@ -1408,4 +1417,23 @@ Vec3 WTURBULENCE::WVelocity(Vec3 p)
 Vec3 WTURBULENCE::WVelocityWithJacobian(Vec3 p, float* xUnwarped, float* 
yUnwarped, float* zUnwarped)
 {return Vec3(0.);}
 
+void WTURBULENCE::processBurn()
+{
+       // Need to make sure that color grids are initialized as they are 
needed in processBurn
+       initColors(0.0f, 0.0f, 0.0f);
+       
+       PyGILState_STATE gilstate = PyGILState_Ensure();
+       PyRun_SimpleString(fire_process_burn_high.c_str());
+       PyGILState_Release(gilstate);
+       Manta_API::updateHighResPointers(this);
+}
+
+void WTURBULENCE::updateFlame()
+{
+       PyGILState_STATE gilstate = PyGILState_Ensure();
+       PyRun_SimpleString(fire_update_flame_high.c_str());
+       PyGILState_Release(gilstate);
+       Manta_API::updateHighResPointers(this);
+}
+
 #endif
diff --git a/intern/smoke/intern/WTURBULENCE.h 
b/intern/smoke/intern/WTURBULENCE.h
index e63644d..2054ca5 100644
--- a/intern/smoke/intern/WTURBULENCE.h
+++ b/intern/smoke/intern/WTURBULENCE.h
@@ -146,6 +146,12 @@ struct WTURBULENCE
                
                void computeEigenvalues(float *_eigMin, float *_eigMax);
                void decomposeEnergy(float *energy, float *_highFreqEnergy);
+       
+               void processBurn(); // Mantaflow
+               void updateFlame(); // Mantaflow
+               void initHeat(); // Mantaflow
+
+
 };
 
 #endif // WTURBULENCE_H
diff --git a/intern/smoke/intern/scenarios/smoke.h 
b/intern/smoke/intern/scenarios/smoke.h
index ae0ec10..13feb76 100644
--- a/intern/smoke/intern/scenarios/smoke.h
+++ b/intern/smoke/intern/scenarios/smoke.h
@@ -124,6 +124,10 @@ const string smoke_init_heat_low = "print(\"Initializing 
heat lowres\")\n\
 heat_low = s.create(RealGrid)\n\
 manta_using_heat = True\n";
 
+const string smoke_init_heat_high = "print(\"Initializing heat highres\")\n\
+heat_high = xl.create(RealGrid)\n\
+manta_using_heat = True\n";
+
 const string smoke_init_fire_low = "print(\"Initializing fire lowres\")\n\
 flame_low = s.create(RealGrid)\n\
 fuel_low = s.create(RealGrid)\n\
@@ -150,12 +154,18 @@ 
inflow_grid.save(os.path.join('$MANTA_EXPORT_PATH$','inflow.uni'))\n\
 forces.save(os.path.join('$MANTA_EXPORT_PATH$','forces.uni'))\n\
 print('Grids exported')";
 
-const string fire_process_burn = "\n\
+const string fire_process_burn_low = "\n\
 processBurn(fuel=fuel_low, density=density, react=react_low, heat=heat_low, 
red=color_r_low, green=color_g_low, blue=color_b_low)";
 
-const string fire_update_flame = "\n\
+const string fire_process_burn_high = "\n\
+processBurn(fuel=fuel_high, density=xl_density, react=react_high, 
heat=heat_high, red=color_r_high, green=color_g_high, blue=color_b_high)";
+
+const string fire_update_flame_low = "\n\
 updateFlame(react=react_low, flame=flame_low)";
 
+const string fire_update_flame_high = "\n\
+updateFlame(react=react_high, flame=flame_high)";
+
 const string standalone = "\
 if (GUI):\n\
   gui=Gui()\n\
diff --git a/intern/smoke/intern/smoke_API.cpp 
b/intern/smoke/intern/smoke_API.cpp
index f4da1cd..c22dd8c 100644
--- a/intern/smoke/intern/smoke_API.cpp
+++ b/intern/smoke/intern/smoke_API.cpp
@@ -98,6 +98,7 @@ extern "C" void smoke_step(FLUID_3D *fluid, float gravity[3], 
float dtSubdiv)
        }
 }
 
+#ifndef WITH_MANTA
 extern "C" void smoke_turbulence_step(WTURBULENCE *wt, FLUID_3D *fluid)
 {
        if (wt->_fuelBig) {
@@ -110,6 +111,21 @@ extern "C" void smoke_turbulence_step(WTURBULENCE *wt, 
FLUID_3D *fluid)
                fluid->updateFlame(wt->_reactBig, wt->_flameBig, 
wt->_totalCellsBig);
        }
 }
+//////////////////////////////////////////////////////////////////////
+#else /*USING MANTAFLOW STRUCTURES*/
+//////////////////////////////////////////////////////////////////////
+extern "C" void smoke_turbulence_step(WTURBULENCE *wt, FLUID_3D *fluid)
+{
+       if (wt->_fuelBig) {
+               wt->processBurn();
+       }
+       wt->stepTurbulenceFull(fluid->_dt/fluid->_dx, fluid->_xVelocity, 
fluid->_yVelocity, fluid->_zVelocity, fluid->_obstacles);
+
+       if (wt->_fuelBig) {
+               wt->updateFlame();
+       }
+}
+#endif /*WITH MANTA*/
 
 extern "C" void smoke_initBlenderRNA(FLUID_3D *fluid, float *alpha, float 
*beta, float *dt_factor, float *vorticity, int *border_colli, float 
*burning_rate,
                                                                         float 
*flame_smoke, float *flame_smoke_color, float *flame_vorticity, float 
*flame_ignition_temp, float *flame_max_temp)

_______________________________________________
Bf-blender-cvs mailing list
[email protected]
http://lists.blender.org/mailman/listinfo/bf-blender-cvs

Reply via email to