Commit: 2a1a6bc5720a4310e42a67754998e0480bf7c59b
Author: Roman Pogribnyi
Date:   Mon Mar 9 22:55:34 2015 +0100
Branches: soc-2014-fluid
https://developer.blender.org/rB2a1a6bc5720a4310e42a67754998e0480bf7c59b

2D lowres smoke

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

M       intern/smoke/intern/MANTA.cpp
M       source/blender/blenkernel/intern/smoke.c

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

diff --git a/intern/smoke/intern/MANTA.cpp b/intern/smoke/intern/MANTA.cpp
index 1ebabc7..6772fb4 100644
--- a/intern/smoke/intern/MANTA.cpp
+++ b/intern/smoke/intern/MANTA.cpp
@@ -603,6 +603,7 @@ void * Manta_API::pointerFromString(const std::string& s){
 
 void Manta_API::updatePointers(FLUID_3D *fluid, bool updateColor)
 {
+       //blender_to_manta: whether we copy data from blender density/velocity 
field to mantaflow or the other way around
        /*in 2D case, we want to copy in the Z-axis field that is in the middle 
of X and Y axes */
        //x + y * max_x + z * max_x*max_y
 //     int position_to_copy_from(0 + (fluid->xRes()/2) * fluid->xRes() + 
(fluid->zRes()/2) * fluid->xRes()*fluid->yRes());
@@ -618,17 +619,16 @@ void Manta_API::updatePointers(FLUID_3D *fluid, bool 
updateColor)
                        }
                }
                int step = 0;
-               for (int cnt(0); cnt < fluid->xRes() * fluid->zRes()-1; ++cnt){
-                       assert(fluid->_yLocation != -1);
-                       step = int(fluid->_yRes * 0.5) * fluid->_xRes + 
-                                       (cnt % (fluid->_xRes)) + 
-                                       int(cnt/(fluid->_xRes)) * fluid->_xRes 
* fluid->_yRes;
-                       if ((step < 0) || (step > fluid->_totalCells)){
-                               cout << "UpdatePointers: step is larger tahn 
cell dim" << step << endl;
-                       }
-                       fluid->_density[step] = manta_fluid_density[cnt];
-                       fluid->_manta_flags[step] = manta_fluid_flags[cnt];
-               }               
+               for (int cnty(0);cnty<fluid->yRes(); ++cnty)
+                       for(int cntz(0);cntz<fluid->zRes(); ++cntz)
+                       {
+                               step = fluid->xRes() + cnty * fluid->xRes() + 
cntz * fluid->xRes()*fluid->yRes(); 
+                               if ((step < 0) || (step > fluid->_totalCells)){
+                                       cout << "UpdatePointers: step is larger 
tahn cell dim" << step << endl;
+                               }
+                               fluid->_density[step] = 
manta_fluid_density[cnty + cntz*fluid->xRes()];
+                               fluid->_manta_flags[step] = 
manta_fluid_flags[cnty + cntz*fluid->xRes()];
+                       }               
        }
        else{
                fluid->_density = (float* 
)pointerFromString(getGridPointer("density", "s"));   
diff --git a/source/blender/blenkernel/intern/smoke.c 
b/source/blender/blenkernel/intern/smoke.c
index 0884ca2..306c5b0 100644
--- a/source/blender/blenkernel/intern/smoke.c
+++ b/source/blender/blenkernel/intern/smoke.c
@@ -2301,14 +2301,7 @@ static void update_flowsfluids(Scene *scene, Object *ob, 
SmokeDomainSettings *sd
                                                                
if(sds->manta_solver_res == 3){
                                                                        
apply_inflow_fields(sfs, emission_map[e_index], d_index, inflow_grid, heat, 
fuel, react, color_r, color_g, color_b);
                                                                }
-                                                               else{ /*2D 
solver*/
-                                                                       int 
cell_cnt;
-                                                                       for 
(cell_cnt=0; cell_cnt< sds->res_max[0] * sds->res_max[2]-1; ++cell_cnt ){
-                                                                               
int step = cell_index_3D(cell_cnt, sds->res_max[0], sds->res_max[1], 
sds->res_max[2]);
-                                                                               
inflow_grid[cell_cnt] = density[step];
-                                                                       }
-                                                               }
-                                                               /* initial 
velocity */
+                                                                               
                                                /* initial velocity */
                                                                if (sfs->flags 
& MOD_SMOKE_FLOW_INITVELOCITY) {
                                                                        
velocity_x[d_index] = ADD_IF_LOWER(velocity_x[d_index], velocity_map[e_index * 
3]);
                                                                        
velocity_y[d_index] = ADD_IF_LOWER(velocity_y[d_index], velocity_map[e_index * 
3 + 1]);
@@ -2402,6 +2395,19 @@ static void update_flowsfluids(Scene *scene, Object *ob, 
SmokeDomainSettings *sd
                                                                                
} // hires loop
                                                        }  // bigdensity
                                                } // low res loop
+
+                               { /*2D solver*/
+                                       int cnty;
+                                       int cntz;
+                                       int step;
+                                       for ( cnty=0;cnty<sds->res_max[1]; 
++cnty)
+                                               for( 
cntz=0;cntz<sds->res_max[2]; ++cntz)
+                                               {
+                                                       step = 
sds->res_max[0]/2 + cnty * sds->res_max[0] + cntz * 
sds->res_max[0]*sds->res_max[1]; 
+                                                       inflow_grid[cnty + 
cntz*sds->res_max[0]] = density[step];
+                                               }
+                               }
+
                                if((sds->flags & MOD_SMOKE_USE_MANTA) && 
(bigdensity)){
 //                                     
manta_write_emitters(sfs,true,0,0,0,bigres[0], bigres[1], bigres[2], bigres[0], 
bigres[1], bigres[2],manta_big_inflow_sdf, NULL);
                                        MEM_freeN(manta_big_inflow_sdf);

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

Reply via email to