[Bf-blender-cvs] [8f14ff3] soc-2014-fluid: per-step sim without writing to disk, reducing number of arguments to manta
Roman Pogribnyi
noreply at git.blender.org
Sun Sep 21 16:38:19 CEST 2014
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. @@
More information about the Bf-blender-cvs
mailing list