Commit: 8f14ff390561109eb1515321ddbb27a2111a4628
Author: Roman Pogribnyi
Date:   Sun Sep 21 16:37:49 2014 +0200
Branches: soc-2014-fluid
https://developer.blender.org/rB8f14ff390561109eb1515321ddbb27a2111a4628

per-step sim without writing to disk, reducing number of arguments to manta

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

M       intern/smoke/extern/smoke_API.h
M       intern/smoke/intern/MANTA.cpp
M       intern/smoke/intern/MANTA.h
M       intern/smoke/intern/scenarios/smoke.h
M       intern/smoke/intern/smoke_API.cpp
M       source/blender/blenkernel/intern/smoke.c
M       source/blender/editors/physics/physics_fluid.c
M       source/blender/makesrna/intern/rna_smoke.c
M       source/blender/python/manta_pp/grid.cpp

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

diff --git a/intern/smoke/extern/smoke_API.h b/intern/smoke/extern/smoke_API.h
index a270f75..fe25efa 100644
--- a/intern/smoke/extern/smoke_API.h
+++ b/intern/smoke/extern/smoke_API.h
@@ -115,7 +115,7 @@ void smoke_ensure_colors(struct FLUID_3D *fluid, struct 
WTURBULENCE *wt, float i
 
 /*Mantaflow functions*/
 int smoke_mantaflow_read(struct SmokeDomainSettings *sds, char* name, bool 
with_wavelets); //1:success, 0: no file,error
-void smoke_mantaflow_write_scene_file(struct Scene *s, struct 
SmokeModifierData *smd);
+void smoke_mantaflow_write_scene_file(struct SmokeModifierData *smd);
 void smoke_mantaflow_sim_step(struct Scene *scene, struct SmokeModifierData 
*smd);
 void smoke_mantaflow_stop_sim();
 void manta_write_effectors(struct Scene *s, struct SmokeModifierData *smd);
diff --git a/intern/smoke/intern/MANTA.cpp b/intern/smoke/intern/MANTA.cpp
index 235ffd9..c9cc87a 100644
--- a/intern/smoke/intern/MANTA.cpp
+++ b/intern/smoke/intern/MANTA.cpp
@@ -339,24 +339,24 @@ void *run_manta_sim_thread(void *arguments)
        int num_sim_steps = smd->domain->manta_end_frame - 
smd->domain->manta_start_frame + 1;
        smd->domain->manta_sim_frame = 0;
        PyGILState_STATE gilstate = PyGILState_Ensure();
-       for (int fr=0; fr< num_sim_steps; ++fr) {
-               if(smd->domain->manta_sim_frame == -1)
-                       break;
+//     for (int fr=0; fr< num_sim_steps; ++fr) {
+//             if(smd->domain->manta_sim_frame == -1)
+//                     break;
                printf("Simulation Step");
                manta_write_effectors(s, smd);
-               smd->domain->manta_sim_frame = fr /*s->r.cfra*/;
-               std::string frame_str = static_cast<ostringstream*>( 
&(ostringstream() << fr /*s->r.cfra*/) )->str();
+               smd->domain->manta_sim_frame = s->r.cfra;
+               std::string frame_str = static_cast<ostringstream*>( 
&(ostringstream() << s->r.cfra) )->str();
                std::string py_string_0 = string("sim_step(").append(frame_str);
                std::string py_string_1 = py_string_0.append(")\0");
                PyRun_SimpleString(py_string_1.c_str());
                cout<< "done"<<manta_sim_running<<endl;
-       }
+       //}
        //returning simulation state to "not simulating" aka -1
        smd->domain->manta_sim_frame = -1;
        PyGILState_Release(gilstate);
 }
 
-void generate_manta_sim_file(Scene *scene, SmokeModifierData *smd)
+void generate_manta_sim_file(SmokeModifierData *smd)
 {
 //      /*create python file with 2-spaces indentation*/
        bool wavelets = smd->domain->flags & MOD_SMOKE_HIGHRES;
@@ -377,13 +377,13 @@ void generate_manta_sim_file(Scene *scene, 
SmokeModifierData *smd)
        manta_setup_file << smoke_script ;
        manta_setup_file.close();
 
-       parseFile(smd, scene, smoke_script);
+       parseFile(smoke_script, smd);
        vector<string> a;
        a.push_back("manta_scene.py");
        runMantaScript("",a);
 }
 
-std::string getRealValue(SmokeModifierData *smd, Scene *s, const std::string& 
varName)
+std::string getRealValue( const std::string& varName, SmokeModifierData *smd)
 {
        ostringstream ss;
        if (varName == "UVS_CNT")
@@ -443,7 +443,7 @@ std::string getRealValue(SmokeModifierData *smd, Scene *s, 
const std::string& va
        return ss.str();
 }
 
-std::string parseLine(SmokeModifierData *smd, Scene *s, const string& line)
+std::string parseLine(const string& line, SmokeModifierData *smd)
 {
        if (line.size() == 0) return "";
        string res = "";
@@ -459,7 +459,7 @@ std::string parseLine(SmokeModifierData *smd, Scene *s, 
const string& line)
                else if(line[currPos] == delimiter && readingVar){
                        readingVar      = false;
                        end_del         = currPos;
-                       res             += 
getRealValue(smd,s,line.substr(start_del, currPos - start_del));
+                       res             += getRealValue(line.substr(start_del, 
currPos - start_del), smd);
                }
                currPos ++;
        }
@@ -467,7 +467,7 @@ std::string parseLine(SmokeModifierData *smd, Scene *s, 
const string& line)
        return res;
 }
 
-void parseFile(SmokeModifierData *smd, Scene *s, const string & setup_string)
+void parseFile(const string & setup_string, SmokeModifierData *smd)
 {
 //     ifstream f (file);
 std::istringstream f(setup_string);
@@ -476,7 +476,7 @@ std::istringstream f(setup_string);
        string line="";
 //     if (f.is_open()){
                while(getline(f,line)){
-                       of << parseLine(smd,s,line) << "\n";
+                       of << parseLine(line,smd) << "\n";
                }
 //             f.close();
 //     }
diff --git a/intern/smoke/intern/MANTA.h b/intern/smoke/intern/MANTA.h
index 715a344..849c291 100644
--- a/intern/smoke/intern/MANTA.h
+++ b/intern/smoke/intern/MANTA.h
@@ -61,15 +61,15 @@ void run_manta_scene(Scene *scene, SmokeModifierData *smd);
 
 void stop_manta_sim();
 
-void generate_manta_sim_file(Scene *scene, SmokeModifierData *smd);
+void generate_manta_sim_file(SmokeModifierData *smd);
 
 void manta_sim_step(int frame);
 
-std::string getRealValue(SmokeModifierData *sds, Scene *s, const string& 
varName);
+std::string getRealValue(const string& varName, SmokeModifierData *sds);
 
-std::string parseLine(SmokeModifierData *sds, Scene *s, const string& line);
+std::string parseLine(const string& line, SmokeModifierData *sds);
 
-void parseFile(SmokeModifierData *sds, Scene *s, const string& setup_string);
+void parseFile(const string& setup_string, SmokeModifierData *sds);
 
 #endif /* MANTA_H */
 
diff --git a/intern/smoke/intern/scenarios/smoke.h 
b/intern/smoke/intern/scenarios/smoke.h
index 1025a57..7fbd726 100644
--- a/intern/smoke/intern/scenarios/smoke.h
+++ b/intern/smoke/intern/scenarios/smoke.h
@@ -33,6 +33,7 @@ vel = s.create(MACGrid) \n\
 density = s.create(RealGrid) \n\
 pressure = s.create(RealGrid) \n\
 forces = s.create(MACGrid)\n\
+forces.load('manta_forces.uni')\n\
 ";
 
 const string smoke_setup_high = "xl_gs = vec3($HRESX$, $HRESY$, $HRESZ$) \n\
@@ -69,29 +70,28 @@ if $USE_WAVELETS$ and $UPRES$ > 0:\n\
 ";
 
 const string smoke_step_low = "def sim_step(t):\n\
-  density.save('den%04d_start.txt' % t) \n\
-  forces.load('manta_forces.uni')\n\
+  #density.save('den%04d_start.txt' % t) \n\
   if (t>=0 and t<75):\n\
     if noise.valScale > 0.:\n\
       densityInflowMeshNoise( flags=flags, density=density, noise=noise, 
mesh=source, scale=3, sigma=0.5 )\n\
     else:\n\
       densityInflowMesh(flags=flags, density=density, mesh=source, value=1)\n\
     applyInflow=True\n\
-  density.save('den%04d_1.txt' % t) \n\
+  #density.save('den%04d_1.txt' % t) \n\
   addForceField(flags=flags, vel=vel,force=forces)\n\
-  density.save('den%04d_2.txt' % t) \n\
+  #density.save('den%04d_2.txt' % t) \n\
   advectSemiLagrange(flags=flags, vel=vel, grid=density, order=$ADVECT_ORDER$) 
\n\
   advectSemiLagrange(flags=flags, vel=vel, grid=vel, order=$ADVECT_ORDER$) \n\
-  density.save('den%04d_3.txt' % t) \n\
+  #density.save('den%04d_3.txt' % t) \n\
   setWallBcs(flags=flags, vel=vel) \n\
   addBuoyancy(density=density, vel=vel, 
gravity=vec3($BUYO_X$,$BUYO_Y$,$BUYO_Z$), flags=flags) \n\
   solvePressure(flags=flags, vel=vel, pressure=pressure, useResNorm=True, 
openBound='xXyYzZ', cgMaxIterFac=1, cgAccuracy=0.01) \n\
   setWallBcs(flags=flags, vel=vel) \n\
   print(\"Writing Grid to \" + str($DENSITY_MEM$) + \" with size\" + 
str($DENSITY_SIZE$))\n\
-  density.save('den%04d_end.txt' % t) \n\
-  #density.writeGridToMemory(memLoc = \"$DENSITY_MEM$\",sizeAllowed = 
\"$DENSITY_SIZE$\") \n\
-  density.save('den%04d_temp.uni' % t) \n\
-  os.rename('den%04d_temp.uni' % t, 'den%04d.uni' % t) \n\
+  #density.save('den%04d_end.txt' % t) \n\
+  density.writeGridToMemory(memLoc = \"$DENSITY_MEM$\",sizeAllowed = 
\"$DENSITY_SIZE$\") \n\
+  #density.save('den%04d_temp.uni' % t) \n\
+  #os.rename('den%04d_temp.uni' % t, 'den%04d.uni' % t) \n\
   s.step()\n";
 
 const string smoke_step_high = "  interpolateMACGrid( source=vel, 
target=xl_vel ) \n\
diff --git a/intern/smoke/intern/smoke_API.cpp 
b/intern/smoke/intern/smoke_API.cpp
index 0087905..0163296 100644
--- a/intern/smoke/intern/smoke_API.cpp
+++ b/intern/smoke/intern/smoke_API.cpp
@@ -506,9 +506,9 @@ extern "C" int smoke_mantaflow_read(struct 
SmokeDomainSettings *sds, char* name,
        return read_mantaflow_sim(sds, name, with_wavelets);
 }
 
-extern "C" void smoke_mantaflow_write_scene_file(struct Scene *s, struct 
SmokeModifierData *smd)
+extern "C" void smoke_mantaflow_write_scene_file(struct SmokeModifierData *smd)
 {
-       generate_manta_sim_file(s, smd);
+       generate_manta_sim_file(smd);
 }
 
 extern "C" void smoke_mantaflow_sim_step(Scene *scene, SmokeModifierData *smd)
diff --git a/source/blender/blenkernel/intern/smoke.c 
b/source/blender/blenkernel/intern/smoke.c
index fe17f21..f3a3c7b 100644
--- a/source/blender/blenkernel/intern/smoke.c
+++ b/source/blender/blenkernel/intern/smoke.c
@@ -184,6 +184,10 @@ void smoke_reallocate_fluid(SmokeDomainSettings *sds, 
float dx, int res[3], int
        smoke_initBlenderRNA(sds->fluid, &(sds->alpha), &(sds->beta), 
&(sds->time_scale), &(sds->vorticity), &(sds->border_collisions),
                             &(sds->burning_rate), &(sds->flame_smoke), 
sds->flame_smoke_color, &(sds->flame_vorticity), &(sds->flame_ignition), 
&(sds->flame_max_temp));
 
+       /*initializing mantaflow fields*/
+       if (sds->flags & MOD_SMOKE_USE_MANTA){
+               smoke_mantaflow_write_scene_file(sds->smd);
+       }
        /* reallocate shadow buffer */
        if (sds->shadow)
                MEM_freeN(sds->shadow);
@@ -2766,9 +2770,7 @@ static void smokeModifier_process(SmokeModifierData *smd, 
Scene *scene, Object *
                        printf("bad smokeModifier_init\n");
                        return;
                }
-//             if (framenr == startframe && smd->domain->flags & 
MOD_SMOKE_USE_MANTA && smd->domain->fluid){
-//                     smoke_mantaflow_write_scene_file(scene, smd);
-//             }
+               
                /* try to read from cache */
                if (BKE_ptcache_read(&pid, (float)framenr) == 
PTCACHE_READ_EXACT) {
                        BKE_ptcache_validate(cache, framenr);
@@ -2801,12 +2803,12 @@ static void smokeModifier_process(SmokeModifierData 
*smd, Scene *scene, Object *
                if(framenr != startframe && smd->domain->flags & 
MOD_SMOKE_USE_MANTA)   /*load manta sim data into fluid object*/
                        {
                                /*PR: Uncomment when adding simulation from 
timeline*/
-                               /*smoke_mantaflow_sim_step(scene,smd);*/
+                               smoke_mantaflow_sim_step(scene,smd);
                                const char *density_name_format = 
"./den%04d.uni";
                                const char *wavelets_name_format = 
"./densityXl_%04d.uni";
                                char buff[100];
                                sprintf(buff, density_name_format, 
scene->r.cfra);
-                               bool read_density = 
smoke_mantaflow_read(smd->domain, buff, 0);
+                               bool read_density = 
1;//smoke_mantaflow_read(smd->domain, buff, 0);
                                

@@ Diff output truncated at 10240 characters. @@

_______________________________________________
Bf-blender-cvs mailing list
Bf-blender-cvs@blender.org
http://lists.blender.org/mailman/listinfo/bf-blender-cvs

Reply via email to