[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