[Bf-blender-cvs] [2e6fbe2] soc-2014-fluid: SMOKE: wavelets included in setups

Roman Pogribnyi noreply at git.blender.org
Tue Nov 11 23:43:10 CET 2014


Commit: 2e6fbe23b8bcd362ae14e36b395dafc5d6d716aa
Author: Roman Pogribnyi
Date:   Tue Nov 4 17:45:03 2014 +0100
Branches: soc-2014-fluid
https://developer.blender.org/rB2e6fbe23b8bcd362ae14e36b395dafc5d6d716aa

SMOKE: wavelets included in setups

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

M	intern/smoke/extern/smoke_API.h
A	intern/smoke/intern/BASIC_FLUID.cpp
M	intern/smoke/intern/MANTA.cpp
M	intern/smoke/intern/MANTA.h
M	intern/smoke/intern/WTURBULENCE.cpp
M	intern/smoke/intern/WTURBULENCE.h
M	intern/smoke/intern/scenarios/smoke.h
M	intern/smoke/intern/smoke_API.cpp
M	release/datafiles/locale
M	release/scripts/addons
M	release/scripts/addons_contrib
M	release/scripts/startup/bl_ui/properties_physics_smoke.py
M	scons
M	source/blender/blenkernel/intern/smoke.c

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

diff --git a/intern/smoke/extern/smoke_API.h b/intern/smoke/extern/smoke_API.h
index e83a73b..0efe035 100644
--- a/intern/smoke/extern/smoke_API.h
+++ b/intern/smoke/extern/smoke_API.h
@@ -74,7 +74,7 @@ size_t smoke_get_index(int x, int max_x, int y, int max_y, int z);
 size_t smoke_get_index2d(int x, int max_x, int y);
 void smoke_dissolve(struct FLUID_3D *fluid, int speed, int log);
 // wavelet turbulence functions
-struct WTURBULENCE *smoke_turbulence_init(int *res, int amplify, int noisetype, const char *noisefile_path, int use_fire, int use_colors);
+struct WTURBULENCE *smoke_turbulence_init(int *res, int amplify, int noisetype, const char *noisefile_path, int use_fire, int use_colors,struct SmokeDomainSettings *sds);
 void smoke_turbulence_free(struct WTURBULENCE *wt);
 void smoke_turbulence_step(struct WTURBULENCE *wt, struct FLUID_3D *fluid);
 float *smoke_turbulence_get_density(struct WTURBULENCE *wt);
@@ -148,7 +148,7 @@ void smoke_ensure_colors(struct FLUID_3D *fluid, struct WTURBULENCE *wt, float i
 	void smoke_dissolve(struct Manta_API *fluid, int speed, int log);
 	
 	// wavelet turbulence functions
-	struct WTURBULENCE *smoke_turbulence_init(int *res, int amplify, int noisetype, const char *noisefile_path, int use_fire, int use_colors);
+	struct WTURBULENCE *smoke_turbulence_init(int *res, int amplify, int noisetype, const char *noisefile_path, int use_fire, int use_colors,struct SmokeDomainSettings *sds);
 	void smoke_turbulence_free(struct WTURBULENCE *wt);
 	void smoke_turbulence_step(struct WTURBULENCE *wt, struct Manta_API *fluid);
 	
diff --git a/intern/smoke/intern/BASIC_FLUID.cpp b/intern/smoke/intern/BASIC_FLUID.cpp
new file mode 100644
index 0000000..e69de29
diff --git a/intern/smoke/intern/MANTA.cpp b/intern/smoke/intern/MANTA.cpp
index 40e373b..a28db4c 100644
--- a/intern/smoke/intern/MANTA.cpp
+++ b/intern/smoke/intern/MANTA.cpp
@@ -293,34 +293,7 @@ void *Manta_API::run_manta_scene_thread(void *arguments)
 
 void Manta_API::run_manta_scene(Manta_API * fluid)
 {
-//	smd->domain->manta_sim_frame = 0;
-//	PyGILState_STATE gilstate = PyGILState_Ensure();
-////	for (int fr=0; fr< 1; ++fr)
-//	int fr = s->r.cfra;
-//	{
-////		if(smd->domain->manta_sim_frame == -1)
-////			break;
-//		printf("Simulation Step");
-//		manta_write_effectors(s, smd);
-//		smd->domain->manta_sim_frame = fr;
-//		std::string frame_str = static_cast<ostringstream*>( &(ostringstream() << fr) )->str();
-//		std::string py_string_0 = string("sim_step(").append(frame_str);
-//		std::string py_string_1 = py_string_0.append(")\0");
-//		//		std::string py_string_1 = string("sim_step()\0");
-//		PyRun_SimpleString(py_string_1.c_str());
-//		//		frame_num ++;
-//	}
-//	PyGILState_Release(gilstate);
-	//returning simulation state to "not simulating" aka -1
-//	smd->domain->manta_sim_frame = -1;
-//
-//	
-//	
-//	args.frame_num = smd->domain->manta_end_frame - smd->domain->manta_start_frame;
-//	int rc = pthread_create(&manta_thread, NULL, run_manta_sim_thread, (void *)args);
-//	pthread_join(manta_thread,NULL);
-//	pthread_detach(manta_thread);
-	run_manta_sim_thread(fluid);
+	run_manta_sim_lowRes(fluid);
 }
 
 void Manta_API::stop_manta_sim()
@@ -409,29 +382,39 @@ void Manta_API::export_obstacles(float *data, int x, int y, int z)
 	PyGILState_Release(gilstate);		
 }
 
-
-void Manta_API::run_manta_sim_thread(Manta_API *fluid)
+void Manta_API::run_manta_sim_lowRes(Manta_API *fluid)
 {
 	PyGILState_STATE gilstate = PyGILState_Ensure();
-//	for (int fr=0; fr< num_sim_steps; ++fr) {
-//		if(smd->domain->manta_sim_frame == -1)
-//			break;
-		printf("Simulation Step");
-		int sim_frame = 1;
-		manta_write_effectors(fluid);
-		std::string frame_str = static_cast<ostringstream*>( &(ostringstream() << sim_frame) )->str();
-		std::string py_string_0 = string("sim_step_low(").append(frame_str);
-		std::string py_string_1 = py_string_0.append(")\0");
+	int sim_frame = 1;
+	manta_write_effectors(fluid);
+	std::string frame_str = static_cast<ostringstream*>( &(ostringstream() << sim_frame) )->str();
+	std::string py_string_0 = string("sim_step_low(").append(frame_str);
+	std::string py_string_1 = py_string_0.append(")\0");
 	cout << "Debug C++: densityPointer:" << Manta_API::getGridPointer("density", "s")<<endl;
-		PyRun_SimpleString("print ('pyhton density pointer:' + density.getDataPointer())");
-		PyRun_SimpleString(py_string_1.c_str());
-		cout<< "done"<<manta_sim_running<<endl;
-	//}
-	//returning simulation state to "not simulating" aka -1
+	PyRun_SimpleString("print ('pyhton density pointer:' + density.getDataPointer())");
+	PyRun_SimpleString(py_string_1.c_str());
+	cout<< "done"<<manta_sim_running<<endl;
 	PyGILState_Release(gilstate);
 	updatePointers();
 }
 
+void Manta_API::run_manta_sim_highRes(WTURBULENCE *wt)
+{
+	PyGILState_STATE gilstate = PyGILState_Ensure();
+	int sim_frame = 1;
+//	manta_write_effectors(fluid);
+	std::string frame_str = static_cast<ostringstream*>( &(ostringstream() << sim_frame) )->str();
+	std::string py_string_0 = string("sim_step_high(").append(frame_str);
+	std::string py_string_1 = py_string_0.append(")\0");
+	cout << "Debug C++: densityPointer:" << Manta_API::getGridPointer("density", "s")<<endl;
+	PyRun_SimpleString("print ('pyhton density pointer:' + density.getDataPointer())");
+	PyRun_SimpleString(py_string_1.c_str());
+	cout<< "done"<<manta_sim_running<<endl;
+	PyGILState_Release(gilstate);
+	updateHighResPointers(wt);
+}
+
+
 void Manta_API::generate_manta_sim_file_lowRes(SmokeModifierData *smd)
 {
 	string smoke_script = smoke_setup_low  + smoke_step_low ;	
@@ -450,7 +433,6 @@ void Manta_API::generate_manta_sim_file_highRes(SmokeModifierData *smd)
 	PyGILState_STATE gilstate = PyGILState_Ensure();
 	PyRun_SimpleString(final_script.c_str());
 	PyGILState_Release(gilstate);
-	updatePointers();
 }
 
 std::string Manta_API::getRealValue( const std::string& varName, SmokeModifierData *smd)
@@ -617,7 +599,16 @@ void Manta_API::updatePointers()
 	void *gridPointer = NULL;
 	ss >> gridPointer;
 	_density = (float* )gridPointer;
+	ss.str("");
+}
 
+void Manta_API::updateHighResPointers(WTURBULENCE *wt)
+{
+	stringstream ss(getGridPointer("xl_density", "xl"));
+	void *gridPointer = NULL;
+	ss >> gridPointer;
+	wt->_densityBig = (float* )gridPointer;
+	ss.str("");
 }
 
 Manta_API::Manta_API(int *res, float dx, float dtdef, int init_heat, int init_fire, int init_colors,SmokeDomainSettings *sds): _xRes(res[0]), _yRes(res[1]), _zRes(res[2]), _res(0.0f)
diff --git a/intern/smoke/intern/MANTA.h b/intern/smoke/intern/MANTA.h
index 7b5de1d..2920890 100644
--- a/intern/smoke/intern/MANTA.h
+++ b/intern/smoke/intern/MANTA.h
@@ -99,22 +99,23 @@ public:
 	
 	void *run_manta_scene_thread(void *threadid);
 	
-	void run_manta_sim_thread(Manta_API *fluid);
+	void run_manta_sim_lowRes(Manta_API *fluid);
+	void run_manta_sim_highRes(WTURBULENCE *wt);
 	
 	void run_manta_scene(Manta_API * fluid);
 	
 	void stop_manta_sim();
 	
 	void generate_manta_sim_file_lowRes(SmokeModifierData *smd);
-	void generate_manta_sim_file_highRes(SmokeModifierData *smd);
+	static void generate_manta_sim_file_highRes(SmokeModifierData *smd);
 	
 	void manta_sim_step(int frame);
 	
-	std::string getRealValue(const string& varName, SmokeModifierData *sds);
+	static std::string getRealValue(const string& varName, SmokeModifierData *sds);
 	
-	std::string parseLine(const string& line, SmokeModifierData *sds);
+	static std::string parseLine(const string& line, SmokeModifierData *sds);
 	
-	std::string parseScript(const string& setup_string, SmokeModifierData *sds);	
+	static std::string parseScript(const string& setup_string, SmokeModifierData *sds);	
 	
 	pthread_t manta_thread;
 	
@@ -125,6 +126,7 @@ public:
 	
 	std::string getGridPointer(string gridName, string solverName);
 	void updatePointers();
+	void updateHighResPointers(WTURBULENCE *wt);
 };
 
 
diff --git a/intern/smoke/intern/WTURBULENCE.cpp b/intern/smoke/intern/WTURBULENCE.cpp
index 02ee163..36d5a59 100644
--- a/intern/smoke/intern/WTURBULENCE.cpp
+++ b/intern/smoke/intern/WTURBULENCE.cpp
@@ -48,6 +48,10 @@
 // 2^ {-5/6}
 static const float persistence = 0.56123f;
 
+#ifdef WITH_MANTA
+#include "MANTA.h"
+#endif
+
 #ifndef WITH_MANTA  /*old WTurbulence Solver*/
 
 //////////////////////////////////////////////////////////////////////
@@ -1206,7 +1210,7 @@ void WTURBULENCE::stepTurbulenceFull(float dtOrg, float* xvel, float* yvel, floa
 
 #else						 /*USING MANTAFLOW WTURBULENCE*/
 
-WTURBULENCE::WTURBULENCE(int xResSm, int yResSm, int zResSm, int amplify, int noisetype, const char *noisefile_path, int init_fire, int init_colors)
+WTURBULENCE::WTURBULENCE(int xResSm, int yResSm, int zResSm, int amplify, int noisetype, const char *noisefile_path, int init_fire, int init_colors,SmokeDomainSettings *sds)
 {
 	// if noise magnitude is below this threshold, its contribution
 	// is negilgible, so stop evaluating new octaves
diff --git a/intern/smoke/intern/WTURBULENCE.h b/intern/smoke/intern/WTURBULENCE.h
index 3663532..31e809f 100644
--- a/intern/smoke/intern/WTURBULENCE.h
+++ b/intern/smoke/intern/WTURBULENCE.h
@@ -36,7 +36,7 @@ struct WTURBULENCE
 {
 	public:
 		// both config files can be NULL, altCfg might override values from noiseCfg
-		WTURBULENCE(int xResSm, int yResSm, int zResSm, int amplify, int noisetype, const char *noisefile_path, int init_fire, int init_colors);
+		WTURBULENCE(int xResSm, int yResSm, int zResSm, int amplify, int noisetype, const char *noisefile_path, int init_fire, int init_colors,struct SmokeDomainSettings *sds);
 
 		/// destructor
 		virtual ~WTURBULENCE();
diff --git a/intern/smoke/intern/scenarios/smoke.h b/intern/smoke/intern/scenarios/smoke.h
index 26f3c59..34b4613 100644
--- a/intern/smoke/intern/scenarios/smoke.h
+++ b/intern/smoke/intern/scenarios/smoke.h
@@ -133,16 +133,7 @@ const string smoke_step_high = "def sim_step_high(t):\n\
     sPos *= 2.0 \n\
   for substep in range(upres):  \n\
     advectSemiLagrange(flags=xl_flags, vel=xl_vel, grid=xl_density, order=$ADVECT_ORDER$)  \n\
-  #DENSITY INFLOW\n\
-  \n\
-  #if (applyInflow): \n\
-  #  if noise.valScale > 0.:\n\
-  #    densityInflowMeshNoise( flags=xl_flags, density=xl_density, noise=xl_wltnoise, mesh=source, sca

@@ Diff output truncated at 10240 characters. @@




More information about the Bf-blender-cvs mailing list