[Bf-blender-cvs] [9cc9c7e] soc-2014-fluid: high-res: inflow data passed in-memory, forces working

Roman Pogribnyi noreply at git.blender.org
Tue Oct 21 23:09:47 CEST 2014


Commit: 9cc9c7ec169f29d58648488dcc5222e6b639a2db
Author: Roman Pogribnyi
Date:   Tue Oct 21 23:09:04 2014 +0200
Branches: soc-2014-fluid
https://developer.blender.org/rB9cc9c7ec169f29d58648488dcc5222e6b639a2db

high-res: inflow data passed in-memory, forces working

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

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

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

diff --git a/intern/smoke/extern/smoke_API.h b/intern/smoke/extern/smoke_API.h
index fb42d3a..938cd7a 100644
--- a/intern/smoke/extern/smoke_API.h
+++ b/intern/smoke/extern/smoke_API.h
@@ -120,7 +120,7 @@ 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);
 void manta_update_effectors(struct Scene *scene, struct Object *ob,struct SmokeDomainSettings *sds, float dt);
-void manta_write_emitters(struct SmokeFlowSettings *sfs, int min_x, int min_y, int min_z, int max_x, int max_y, int max_z, int d_x, int d_y, int d_z,float *influence, float *vel);	
+void manta_write_emitters(struct SmokeFlowSettings *sfs, bool highRes, int min_x, int min_y, int min_z, int max_x, int max_y, int max_z, int d_x, int d_y, int d_z,float *influence, float *vel);	
 void manta_export_obstacles(float * influence, int x, int y, int z);
 #ifdef __cplusplus
 }
diff --git a/intern/smoke/intern/MANTA.cpp b/intern/smoke/intern/MANTA.cpp
index 089c8f4..4d7b78f 100644
--- a/intern/smoke/intern/MANTA.cpp
+++ b/intern/smoke/intern/MANTA.cpp
@@ -375,24 +375,24 @@ void Manta_API::addGrid(void * data, string name, string type, int x, int y, int
 	PyGILState_Release(gilstate);		
 }
 
-void Manta_API::addAdaptiveGrid(void * data, string name, string type, int minX, int minY, int minZ, int maxX, int maxY, int maxZ)
+void Manta_API::addAdaptiveGrid(void * data, string gridName, string solverName, string type, int minX, int minY, int minZ, int maxX, int maxY, int maxZ)
 {
 	if (data == NULL)
 	{
-		cout << "NULL pointer passed to grid addAdaptiveGrid for grid " << name <<endl;
+		cout << "NULL pointer passed to grid addAdaptiveGrid for grid " << gridName <<endl;
 		return;
 	}
 	std::ostringstream stringStream;
-	stringStream << "temp_" << name;
-	std::string grid_name = stringStream.str();
+	stringStream << "temp_" <<gridName;
+	std::string temp_grid_name = stringStream.str();
 	stringStream.str("");
-	stringStream << grid_name << " = s.create(" << gridNameFromType(type) << ")";
+	stringStream << temp_grid_name << " = "<< solverName << ".create(" << gridNameFromType(type) << ")";
 	const std::string command_1 = stringStream.str();
 	stringStream.str("");
-	stringStream << grid_name << ".readAdaptiveGridFromMemory(\'"<< data << "\', vec3(" << minX << "," << minY << "," << minZ << 
+	stringStream << temp_grid_name << ".readAdaptiveGridFromMemory(\'"<< data << "\', vec3(" << minX << "," << minY << "," << minZ << 
 	"), vec3(" << maxX << "," << maxY << "," << maxZ << ") )";
 	const std::string command_2 = stringStream.str();
-	const std::string command_3 = name + ".add(" + grid_name + ")";
+	const std::string command_3 = gridName + ".add(" + temp_grid_name + ")";
 	PyGILState_STATE gilstate = PyGILState_Ensure();
 	PyRun_SimpleString("print('Reading Adaptive grid from memory')");
 	PyRun_SimpleString("print (s)");
@@ -528,6 +528,10 @@ std::string Manta_API::getRealValue( const std::string& varName, SmokeModifierDa
 		ss << smd->domain->fluid->_density;
 	else if (varName == "DENSITY_SIZE")
 		ss << sizeof(float) * smd->domain->total_cells;
+	else if (varName == "XL_DENSITY_MEM")
+		ss << smd->domain->wt->_densityBig;
+	else if (varName == "XL_DENSITY_SIZE")
+		ss << sizeof(float) * smd->domain->wt->_xResBig * smd->domain->wt->_yResBig * smd->domain->wt->_zResBig;
 	else 
 		cout<< "ERROR: Unknown option:"<< varName <<endl; 
 	return ss.str();
diff --git a/intern/smoke/intern/MANTA.h b/intern/smoke/intern/MANTA.h
index 5bb4811..a7e0040 100644
--- a/intern/smoke/intern/MANTA.h
+++ b/intern/smoke/intern/MANTA.h
@@ -85,7 +85,7 @@ public:
 	
 	static string gridNameFromType(const string& type);
 	static void addGrid(void * data,string name, string type, int x, int y, int z);
-	static void addAdaptiveGrid(void * data, string name, string type,int minX, int minY, int minZ, int maxX, int maxY, int maxZ);
+	static void addAdaptiveGrid(void * data, string gridName, string solverName, string type,int minX, int minY, int minZ, int maxX, int maxY, int maxZ);
 	static void export_obstacles(float *data, int x, int y, int z);
 	
 };
diff --git a/intern/smoke/intern/scenarios/smoke.h b/intern/smoke/intern/scenarios/smoke.h
index 300e5d6..cbf4266 100644
--- a/intern/smoke/intern/scenarios/smoke.h
+++ b/intern/smoke/intern/scenarios/smoke.h
@@ -17,7 +17,7 @@ def load_once(grid, file, dict):\n\
 res = $RES$\n\
 gs = vec3($RESX$,$RESY$,$RESZ$)\n\
 s = FluidSolver(name='main', gridSize = gs)\n\
-s.timestep = 1.0\n\
+s.timestep = 0.1\n\
 timings = Timings()\n\
 \n\
 # prepare grids\n\
@@ -45,7 +45,8 @@ forces = s.create(MACGrid)\n\
 dict_loaded = dict()\n";
 
 const string smoke_setup_high = "xl_gs = vec3($HRESX$, $HRESY$, $HRESZ$) \n\
-xl = Solver(name = 'larger', gridSize = xl_gs, dim = solver_dim) \n\
+xl = Solver(name = 'larger', gridSize = xl_gs) \n\
+uvs =$UVS_CNT$\n\
 if $USE_WAVELETS$:\n\
   upres = $UPRES$\n\
   wltStrength = $WLT_STR$\n\
@@ -60,9 +61,9 @@ if $USE_WAVELETS$ and $UPRES$ > 0:\n\
   xl_flags = xl.create(FlagGrid) \n\
   xl_flags.initDomain() \n\
   xl_flags.fillGrid() \n\
-  xl_source = s.create(Mesh)\n\
-  xl_source.load('manta_flow.obj')\n\
-  transform_back(xl_source, gs)\n\
+  #xl_source = s.create(Mesh)\n\
+  #xl_source.load('manta_flow.obj')\n\
+  #transform_back(xl_source, gs)\n\
   xl_noise = xl.create(NoiseField, fixedSeed=256, loadFromFile=True) \n\
   xl_noise.posScale = vec3(20) \n\
   xl_noise.clamp = False \n\
@@ -71,7 +72,7 @@ if $USE_WAVELETS$ and $UPRES$ > 0:\n\
   xl_noise.valScale = $NOISE_VALSCALE$ \n\
   xl_noise.valOffset = $NOISE_VALOFFSET$ \n\
   xl_noise.timeAnim = $NOISE_TIMEANIM$ * $UPRES$ \n\
-  xl_wltnoise = s.create(NoiseField, loadFromFile=True) \n\
+  xl_wltnoise = xl.create(NoiseField, loadFromFile=True) \n\
   xl_wltnoise.posScale = vec3( int(1.0*gs.x) ) * 0.5 \n\
   xl_wltnoise.posScale = xl_wltnoise.posScale * 0.5\n\
   xl_wltnoise.timeAnim = 0.1 \n\
@@ -100,7 +101,7 @@ const string smoke_step_low = "def sim_step(t):\n\
   setWallBcs(flags=flags, vel=vel)\n\
   \n\
   density.writeGridToMemory(memLoc = \"$DENSITY_MEM$\",sizeAllowed = \"$DENSITY_SIZE$\") \n\
-  s.step()";
+  s.step()\n";
 //  if (t>=0 and t<75):\n\
 //    densityInflow(flags=flags, density=density, noise=noise, shape=source, scale=1, sigma=0.5)\n\
 //    #if noise.valScale > 0.:\n\
@@ -132,12 +133,16 @@ const string smoke_step_high = "  interpolateMACGrid( source=vel, target=xl_vel
     sPos *= 2.0 \n\
   for substep in range(upres):  \n\
     advectSemiLagrange(flags=xl_flags, vel=xl_vel, grid=xl_density, order=$ADVECT_ORDER$)  \n\
-  if (applyInflow): \n\
-    if noise.valScale > 0.:\n\
-      densityInflowMeshNoise( flags=xl_flags, density=xl_density, noise=xl_wltnoise, mesh=source, scale=3, sigma=0.5 )\n\
-    else:\n\
-      densityInflowMesh(flags=xl_flags, density=xl_density, mesh=source, value=1)\n\
-  xl_density.save('densityXl_%04d.uni' % t)\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, scale=3, sigma=0.5 )\n\
+  #  else:\n\
+  #    densityInflowMesh(flags=xl_flags, density=xl_density, mesh=source, value=1)\n\
+  #DENSITY OUTPUT\n\
+  xl_density.writeGridToMemory(memLoc = \"$XL_DENSITY_MEM$\",sizeAllowed = \"$XL_DENSITY_SIZE$\") \n\
+  #xl_density.save('densityXl_%04d.uni' % t)\n\
   xl.step()\n";
 
 const string full_smoke_setup = "from manta import * \n\
diff --git a/intern/smoke/intern/smoke_API.cpp b/intern/smoke/intern/smoke_API.cpp
index 8e6918c..abb5427 100644
--- a/intern/smoke/intern/smoke_API.cpp
+++ b/intern/smoke/intern/smoke_API.cpp
@@ -543,12 +543,15 @@ extern "C" void manta_write_effectors(struct Scene *s, struct SmokeModifierData
 	Manta_API::addGrid(accumulated_force, "forces", "Vec3", size_x, size_y, size_z);
 }
 
-extern "C" void manta_write_emitters(struct SmokeFlowSettings *sfs, int min_x, int min_y, int min_z, int max_x, int max_y, int max_z, int d_x, int d_y, int d_z,float *influence, float *vel)
+extern "C" void manta_write_emitters(struct SmokeFlowSettings *sfs, bool highRes, int min_x, int min_y, int min_z, int max_x, int max_y, int max_z, int d_x, int d_y, int d_z,float *influence, float *vel)
 {
 //	manta_update_effectors(s, smd->domain->manta_obj, smd->domain, 0.1f);
-	Manta_API::addAdaptiveGrid(influence, "density", "float",
+	if (! highRes)
+		Manta_API::addAdaptiveGrid(influence, "density", "s", "float",
 										   min_x, min_y, min_z, max_x, max_y, max_z);
-//	export_em_fields(Manta_API::instance()->_emission_map,sfs->density, min_x,  min_y,  min_z,  max_x,  max_y,  max_z,  d_x,  d_y,  d_z,  influence,  vel);
+	else 
+		Manta_API::addAdaptiveGrid(influence, "xl_density", "xl", "float", min_x, min_y, min_z, max_x, max_y, max_z);
+	//	export_em_fields(Manta_API::instance()->_emission_map,sfs->density, min_x,  min_y,  min_z,  max_x,  max_y,  max_z,  d_x,  d_y,  d_z,  influence,  vel);
 }
 
 extern "C" void manta_export_obstacles(float * influence, int x, int y, int z)
diff --git a/source/blender/blenkernel/intern/smoke.c b/source/blender/blenkernel/intern/smoke.c
index 456052e..d6cea74 100644
--- a/source/blender/blenkernel/intern/smoke.c
+++ b/source/blender/blenkernel/intern/smoke.c
@@ -184,8 +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){
+	/*initializing mantaflow fields only if low-res sim
+	 if wavelets present, init in smoke_reallocate_highres_fluid
+	 */
+	if (sds->flags & MOD_SMOKE_USE_MANTA && !(sds->flags & MOD_SMOKE_HIGHRES)){
 		smoke_mantaflow_write_scene_file(sds->smd);
 	}
 	/* reallocate shadow buffer */
@@ -210,7 +212,9 @@ void smoke_reallocate_highres_fluid(SmokeDomainSettings *sds, float dx, int res[
 	BLI_lock_thread(LOCK_FFTW);
 
 	sds->wt = 

@@ Diff output truncated at 10240 characters. @@




More information about the Bf-blender-cvs mailing list