[Bf-blender-cvs] [9ac37c4] fluid-mantaflow: added caching for simulation with manta solver

Sebastián Barschkis noreply at git.blender.org
Thu Jan 28 12:36:46 CET 2016


Commit: 9ac37c4e0e8143bb011df3b33d8bbec9770e007e
Author: Sebastián Barschkis
Date:   Sat Sep 19 16:58:03 2015 +0200
Branches: fluid-mantaflow
https://developer.blender.org/rB9ac37c4e0e8143bb011df3b33d8bbec9770e007e

added caching for simulation with manta solver

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

M	intern/smoke/intern/FLUID_3D.cpp
M	intern/smoke/intern/WTURBULENCE.cpp
M	intern/smoke/intern/scenarios/smoke.h
M	intern/smoke/intern/smoke_API.cpp
M	source/blender/blenkernel/intern/pointcache.c
M	source/blender/blenkernel/intern/smoke.c
M	source/blender/python/manta_pp/fluidsolver.cpp

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

diff --git a/intern/smoke/intern/FLUID_3D.cpp b/intern/smoke/intern/FLUID_3D.cpp
index 48f7cf6..247b8dd 100644
--- a/intern/smoke/intern/FLUID_3D.cpp
+++ b/intern/smoke/intern/FLUID_3D.cpp
@@ -51,6 +51,7 @@
 FLUID_3D::FLUID_3D(int *res, float dx, float dtdef, int init_heat, int init_fire, int init_colors) :
 	_xRes(res[0]), _yRes(res[1]), _zRes(res[2]), _res(0.0f)
 {
+	cout << "FLUID" << endl;
 	// set simulation consts
 	_dt = dtdef;	// just in case. set in step from a RNA factor
 
@@ -531,6 +532,7 @@ void FLUID_3D::updateFlame(float *react, float *flame, int total_cells)
 FLUID_3D::FLUID_3D(int *res, float dx, float dtdef, int init_heat, int init_fire, int init_colors, SmokeModifierData *smd) :
 _xRes(res[0]), _yRes(res[1]), _zRes(res[2]), _res(0.0f)
 {
+	cout << "FLUID_3D" << endl;
 	// set simulation consts
 	_dt = dtdef;	// just in case. set in step from a RNA factor
 	
@@ -575,13 +577,14 @@ _xRes(res[0]), _yRes(res[1]), _zRes(res[2]), _res(0.0f)
 	_yForce       = new float[_totalCells];
 	_zForce       = new float[_totalCells];
 	/*if two-dimensional, insert manta sim into blender _density field */
-	if (smd->domain->manta_solver_res == 2){
+	if (smd->domain->manta_solver_res == 2) {
 		_density  = new float[_totalCells];
 		_manta_flags = new int[_totalCells];
 		manta_resoution = 2;
 		_yLocation = _yRes / 2;
 	}
-	else{
+	else
+	{
 		_density  = NULL;
 		_manta_flags = NULL;
 		manta_resoution = 3;
@@ -656,6 +659,7 @@ _xRes(res[0]), _yRes(res[1]), _zRes(res[2]), _res(0.0f)
 		smoke_script = smoke_setup_low  + liquid_step_low;
 	else
 		smoke_script = smoke_setup_low  + smoke_step_low;
+	
 	smd->domain->fluid = this;
 	std::string final_script = Manta_API::parseScript(smoke_script, smd);
 	ofstream myfile;
diff --git a/intern/smoke/intern/WTURBULENCE.cpp b/intern/smoke/intern/WTURBULENCE.cpp
index fbed3d7..29cccbd 100644
--- a/intern/smoke/intern/WTURBULENCE.cpp
+++ b/intern/smoke/intern/WTURBULENCE.cpp
@@ -60,6 +60,7 @@ static const float persistence = 0.56123f;
 //////////////////////////////////////////////////////////////////////
 WTURBULENCE::WTURBULENCE(int xResSm, int yResSm, int zResSm, int amplify, int noisetype, const char *noisefile_path, int init_fire, int init_colors)
 {
+	cout << "WTURBULENCE" << endl;
 	// if noise magnitude is below this threshold, its contribution
 	// is negilgible, so stop evaluating new octaves
 	_cullingThreshold = 1e-3;
@@ -1210,6 +1211,7 @@ void WTURBULENCE::stepTurbulenceFull(float dtOrg, float* xvel, float* yvel, floa
 
 WTURBULENCE::WTURBULENCE(int xResSm, int yResSm, int zResSm, int amplify, int noisetype, const char *noisefile_path, int init_fire, int init_colors,SmokeDomainSettings *sds)
 {
+	cout << "WTURBULENCE" << endl;
 	// if noise magnitude is below this threshold, its contribution
 	// is negilgible, so stop evaluating new octaves
 	_cullingThreshold = 1e-3;
diff --git a/intern/smoke/intern/scenarios/smoke.h b/intern/smoke/intern/scenarios/smoke.h
index eb78fc0..0588aa3 100644
--- a/intern/smoke/intern/scenarios/smoke.h
+++ b/intern/smoke/intern/scenarios/smoke.h
@@ -3,6 +3,7 @@ using namespace std;
 const string smoke_clean = "";
 
 const string smoke_setup_low ="from manta import *\n\
+print ('SMOKE SETUP LOW')\n\
 import os, shutil, math, sys\n\
 \n\
 def transform_back(obj, gs):\n\
diff --git a/intern/smoke/intern/smoke_API.cpp b/intern/smoke/intern/smoke_API.cpp
index 09830ba..eb7e249 100644
--- a/intern/smoke/intern/smoke_API.cpp
+++ b/intern/smoke/intern/smoke_API.cpp
@@ -221,6 +221,7 @@ extern "C" void smoke_dissolve_wavelet(WTURBULENCE *wt, int speed, int log)
 	data_dissolve(wt->_densityBig, 0, wt->_color_rBig, wt->_color_gBig, wt->_color_bBig, wt->_totalCellsBig, speed, log);
 }
 
+#ifndef WITH_MANTA
 extern "C" void smoke_export(FLUID_3D *fluid, float *dt, float *dx, float **dens, float **react, float **flame, float **fuel, float **heat, 
 							 float **heatold, float **vx, float **vy, float **vz, float **r, float **g, float **b, unsigned char **obstacles)
 {
@@ -248,6 +249,37 @@ extern "C" void smoke_export(FLUID_3D *fluid, float *dt, float *dx, float **dens
 	*dt = fluid->_dt;
 	*dx = fluid->_dx;
 }
+//////////////////////////////////////////////////////////////////////
+#else /*USING MANTAFLOW STRUCTURES*/
+//////////////////////////////////////////////////////////////////////
+extern "C" void smoke_export(FLUID_3D *fluid, float *dt, float *dx, float **dens, float **react, float **flame, float **fuel, float **heat, 
+							 float **manta_inflow, float **vx, float **vy, float **vz, float **r, float **g, float **b, unsigned char **obstacles)
+{
+	*dens = fluid->_density;
+	if(fuel)
+		*fuel = fluid->_fuel;
+	if(react)
+		*react = fluid->_react;
+	if(flame)
+		*flame = fluid->_flame;
+	if(heat)
+		*heat = fluid->_heat;
+	if(manta_inflow)
+		*manta_inflow = fluid->_manta_inflow;
+	*vx = fluid->_xVelocity;
+	*vy = fluid->_yVelocity;
+	*vz = fluid->_zVelocity;
+	if(r)
+		*r = fluid->_color_r;
+	if(g)
+		*g = fluid->_color_g;
+	if(b)
+		*b = fluid->_color_b;
+	*obstacles = fluid->_obstacles;
+	*dt = fluid->_dt;
+	*dx = fluid->_dx;
+}
+#endif /* WITH_MANTA */
 
 extern "C" void smoke_turbulence_export(WTURBULENCE *wt, float **dens, float **react, float **flame, float **fuel,
                                         float **r, float **g, float **b , float **tcu, float **tcv, float **tcw)
diff --git a/source/blender/blenkernel/intern/pointcache.c b/source/blender/blenkernel/intern/pointcache.c
index b69bc2f..b80c1bb 100644
--- a/source/blender/blenkernel/intern/pointcache.c
+++ b/source/blender/blenkernel/intern/pointcache.c
@@ -600,7 +600,7 @@ static int  ptcache_smoke_write(PTCacheFile *pf, void *smoke_v)
 	ptcache_file_write(pf, &sds->dx, 1, sizeof(float));
 	if (sds->fluid) {
 		size_t res = sds->res[0]*sds->res[1]*sds->res[2];
-		float dt, dx, *dens, *react, *fuel, *flame, *heat, *heatold, *vx, *vy, *vz, *r, *g, *b;
+		float dt, dx, *dens, *react, *fuel, *flame, *heat, *heatold, *manta_inflow, *vx, *vy, *vz, *r, *g, *b;
 		unsigned char *obstacles;
 		unsigned int in_len = sizeof(float)*(unsigned int)res;
 		unsigned char *out = (unsigned char *)MEM_callocN(LZO_OUT_LEN(in_len) * 4, "pointcache_lzo_buffer");
@@ -608,7 +608,11 @@ static int  ptcache_smoke_write(PTCacheFile *pf, void *smoke_v)
 		int mode=1;		// light
 		if (sds->cache_comp == SM_CACHE_HEAVY) mode=2;	// heavy
 
-		smoke_export(sds->fluid, &dt, &dx, &dens, &react, &flame, &fuel, &heat, &heatold, &vx, &vy, &vz, &r, &g, &b, &obstacles);
+		#ifndef WITH_MANTA
+			smoke_export(sds->fluid, &dt, &dx, &dens, &react, &flame, &fuel, &heat, &heatold, &vx, &vy, &vz, &r, &g, &b, &obstacles);
+		#else
+			smoke_export(sds->fluid, &dt, &dx, &dens, &react, &flame, &fuel, &heat, &manta_inflow, &vx, &vy, &vz, &r, &g, &b, &obstacles);
+		#endif
 
 		ptcache_file_compressed_write(pf, (unsigned char *)sds->shadow, in_len, out, mode);
 		
@@ -618,9 +622,15 @@ static int  ptcache_smoke_write(PTCacheFile *pf, void *smoke_v)
 
 		/*	writeArrToFile("dens.txt", dens, res);
 */
+		#ifdef WITH_MANTA
+			ptcache_file_compressed_write(pf, (unsigned char *)manta_inflow, in_len, out, mode);
+		#endif
 		if (fluid_fields & SM_ACTIVE_HEAT) {
 			ptcache_file_compressed_write(pf, (unsigned char *)heat, in_len, out, mode);
-			ptcache_file_compressed_write(pf, (unsigned char *)heatold, in_len, out, mode);
+			
+			#ifndef WITH_MANTA
+				ptcache_file_compressed_write(pf, (unsigned char *)heatold, in_len, out, mode);
+			#endif
 		}
 		if (fluid_fields & SM_ACTIVE_FIRE) {
 			ptcache_file_compressed_write(pf, (unsigned char *)flame, in_len, out, mode);
@@ -717,7 +727,7 @@ static int ptcache_smoke_read_old(PTCacheFile *pf, void *smoke_v)
 	
 	if (sds->fluid) {
 		size_t res = sds->res[0]*sds->res[1]*sds->res[2];
-		float dt, dx, *dens, *heat, *heatold, *vx, *vy, *vz;
+		float dt, dx, *dens, *heat, *heatold, *manta_inflow, *vx, *vy, *vz;
 		unsigned char *obstacles;
 		unsigned int out_len = (unsigned int)res * sizeof(float);
 		float *tmp_array = MEM_callocN(out_len, "Smoke old cache tmp");
@@ -729,16 +739,24 @@ static int ptcache_smoke_read_old(PTCacheFile *pf, void *smoke_v)
 		sds->active_color[1] = 0.7f;
 		sds->active_color[2] = 0.7f;
 		
-		smoke_export(sds->fluid, &dt, &dx, &dens, NULL, NULL, NULL, &heat, &heatold, &vx, &vy, &vz, NULL, NULL, NULL, &obstacles);
+		#ifndef WITH_MANTA
+			smoke_export(sds->fluid, &dt, &dx, &dens, NULL, NULL, NULL, &heat, &heatold, &vx, &vy, &vz, NULL, NULL, NULL, &obstacles);
+		#else
+			smoke_export(sds->fluid, &dt, &dx, &dens, NULL, NULL, NULL, &heat, &manta_inflow, &vx, &vy, &vz, NULL, NULL, NULL, &obstacles);
+		#endif
 
 		ptcache_file_compressed_read(pf, (unsigned char *)sds->shadow, out_len);
 		ptcache_file_compressed_read(pf, (unsigned char*)dens, out_len);
 		ptcache_file_compressed_read(pf, (unsigned char*)tmp_array, out_len);
 
-		if (fluid_fields & SM_ACTIVE_HEAT)
-		{
+		#ifdef WITH_MANTA
+			ptcache_file_compressed_read(pf, (unsigned char*)manta_inflow, out_len);
+		#endif
+		if (fluid_fields & SM_ACTIVE_HEAT) {
 			ptcache_file_compressed_read(pf, (unsigned char*)heat, out_len);
-			ptcache_file_compressed_read(pf, (unsigned char*)heatold, out_len);
+			#ifndef WITH_MANTA
+				ptcache_file_compressed_read(pf, (unsigned char*)heatold, out_len);
+			#endif
 		}
 		else
 		{
@@ -842,17 +860,29 @@ static int ptcache_smoke_read(PTCacheFile *pf, void *smoke_v)
 	
 	if (sds->fluid) {
 		size_t res = sds->res[0]*sds->res[1]*sds->res[2];
-		float dt, dx, *dens, *react, *fuel, *flame, *heat, *heatold, *vx, *vy, *vz, *r, *g, *b;
+		float dt, dx, *dens, *react, *fuel, *flame, *heat, *heatold, *manta_inflow, *vx, *vy, *vz, *r, *g, *b;
 		unsigned char *obstacles;
 		unsigned int out_len = (unsigned int)res * sizeof(float);
 		
-		smoke_export(sds->fluid, &dt, &dx, &dens, &react, &flame, &fuel, &heat, &heatold, &vx, &vy, &vz, &r, &g, &b, &obstacles);
+		#ifndef WITH_MANTA
+			smoke_export(sds->fluid, &dt, &dx, &dens, &react, &flame, &fuel, &heat, &heatold, &vx, &vy, &vz, &r, &g, &b, &obstacles);
+		#else
+			smoke_export(sds->fluid, &dt, &dx, &dens, &react, &flame, &fuel, &heat, &manta_inflow, &vx, &vy, &vz, &r, &g, &b, &obstacles);
+		#endif
+
 
 		ptcache_file_compressed_read(pf, (unsigned char *)sds->sh

@@ Diff output truncated at 10240 characters. @@




More information about the Bf-blender-cvs mailing list