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