[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [46130] branches/smoke2/intern/smoke/ intern: a) Fix compile errors

Daniel Genrich daniel.genrich at gmx.net
Mon Apr 30 22:53:41 CEST 2012


Revision: 46130
          http://projects.blender.org/scm/viewvc.php?view=rev&root=bf-blender&revision=46130
Author:   genscher
Date:     2012-04-30 20:53:40 +0000 (Mon, 30 Apr 2012)
Log Message:
-----------
a) Fix compile errors
b) Fix crashes when enabling smoke
c) Enabling, one timestep and deleting smoke works

Still no functionality.

Modified Paths:
--------------
    branches/smoke2/intern/smoke/intern/smoke_API.cpp
    branches/smoke2/intern/smoke/intern/source/smoke.cpp
    branches/smoke2/intern/smoke/intern/source/smoke.h
    branches/smoke2/intern/smoke/intern/source/solverinit.cpp
    branches/smoke2/intern/smoke/intern/source/solverinit.h

Modified: branches/smoke2/intern/smoke/intern/smoke_API.cpp
===================================================================
--- branches/smoke2/intern/smoke/intern/smoke_API.cpp	2012-04-30 19:52:07 UTC (rev 46129)
+++ branches/smoke2/intern/smoke/intern/smoke_API.cpp	2012-04-30 20:53:40 UTC (rev 46130)
@@ -46,7 +46,12 @@
 	res[1] = 80;
 	res[2] = 150;
 	FLUID_3D *ddf = new FLUID_3D(res);
+	printf("-------------------- SMOKE INIT --------------------------\n");
 	ddf->init();
+	printf("-------------------- SMOKE STEP --------------------------\n");
+	ddf->step();
+	printf("-------------------- SMOKE DEL ---------------------------\n");
+	ddf->del();
 	delete ddf;
 	return NULL;
 }

Modified: branches/smoke2/intern/smoke/intern/source/smoke.cpp
===================================================================
--- branches/smoke2/intern/smoke/intern/source/smoke.cpp	2012-04-30 19:52:07 UTC (rev 46129)
+++ branches/smoke2/intern/smoke/intern/source/smoke.cpp	2012-04-30 20:53:40 UTC (rev 46130)
@@ -5,8 +5,9 @@
 
 void FLUID_3D::init()
 {
+	printf("-------------------- SMOKE INIT A-------------------------\n");
 	{ // static scene
-		SolverObject* solver = new SolverObject( "makescene", nVec3i ( _res[0], _res[1], _res[2] ) );
+		SolverObject* solver = new SolverObject( "makescene", nVec3i ( _res[0], _res[1], _res[2] ), DDF_GRID_NO_FREE );
 		solver->createVec3Grid ( "normal", DDF_GRID_NO_FREE /* Do not free grid when freeing solver */);
 		solver->createRealGrid ( "dist", DDF_GRID_NO_FREE );
 		solver->addInitPlugin ( "init-box-domain",  IntArg ( "flag-inside",FFLUID ) + IntArg ( "flag-border",FINFLOW ) + IntArg("flag-floor", FOBSTACLE) );
@@ -23,9 +24,6 @@
 		solver->addInitPlugin ( "init-box", VecArg("pos1",Vec3(0.35,0.0,0.65)) + VecArg("pos2",Vec3(0.55,0.35,0.9)) + IntArg("type", FDENSITYSOURCE));	
 		solver->addInitPlugin ( "init-box", VecArg("pos1",Vec3(0.65,0.0,0.3)) + VecArg("pos2",Vec3(0.7,0.45,0.5)) + IntArg("type", FDENSITYSOURCE));	
 
-		// solver->addInitPlugin ( "dump-universal", StringArg ( "grid", "flags" ) + StringArg ( "override-name","scene/static-flags" )  + IntArg ( "single-dump", 1 ) );	
-		// solver->addInitPlugin ( "dump-universal", StringArg ( "grid", "dist" ) + StringArg ( "override-name","scene/static-dist" )  + IntArg ( "single-dump", 1 ) );	
-		// solver->addInitPlugin ( "dump-universal", StringArg ( "grid", "normal" ) + StringArg ( "override-name","scene/static-normal" )  + IntArg ( "single-dump", 1 ) );	
 		_solvers.push_back(solver);
 	}
 
@@ -38,11 +36,68 @@
 	_dist = _solvers[0]->getParams().getGridReal("dist");
 
 	finalizeAllSolvers();
+	freeAllSolvers();
+
+	printf("-------------------- SMOKE INIT B-------------------------\n");
+	{
+		SolverObject* solver = new SolverObject( "run_static", _flags );
+
+		Vec3 inflow (0.4, 0, 0); // DG TODO: get this from blender
+		solver->getParams().mU0 = inflow;
+
+		solver->getParams().mTimestepAnim = 0.005; // DG TODO: what is this parameter supposed to do?
+			
+		// create grids
+		solver->createVec3Grid ( "mean-flow" ); // DG TODO: load this from mem? - constructed/dumped in precompute normally
+		solver->createRealGrid ( "dist", _dist );
+
+		solver->createVec3Grid ( "vorticity", DDF_GRID_NO_FREE ); // DG TODO: how to handle vorticity?
+
+		solver->createVec3Grid ( "ABL" ); // ABL = artificial boundary layer
+		// solver->createVec3Grid ( "pre-ABL" ); // DG TODO: load this from mem
+		solver->createVec3Grid ( "vort" ); // DG TODO: create this on init? what is this?
+		solver->createRealGrid ( "pdf" ); // DG TODO: create this on init? what is this?
+
+		solver->createRealGrid ( "density", DDF_GRID_NO_FREE ); // DG TODO: create this on init
+
+		solver->addStandardSolverGrids(); // DG TODO: make this grids global?
+		solver->createNoiseField("noise", Vec3(0.), Vec3(50,50,50), -0.4, 2.0, 0.002);
+
+		// program solver initialization process
+		// solver->addInitPlugin ( "load-universal", StringArg("grid","dist") + StringArg("file","scene/static-dist.gz"));
+		// solver->addInitPlugin ( "load-universal", StringArg("grid","mean-flow") + StringArg("file","scene/static-mean.gz"));
+		// solver->addInitPlugin ( "load-universal", StringArg("grid","pre-ABL") + StringArg("file","scene/static-abl.gz"));
+		
+		// program solver main loop
+		// solver->addPlugin ( "copy-grid", StringArg ( "src","mean-flow" ) + StringArg ( "dest","vel-curr") );
+		solver->addPlugin ("init-density-inflow", StringArg("density","density") + RealArg("target-value",0.7) + IntArg("flag", FDENSITYSOURCE) + StringArg("noise","noise")); 
+		
+		// solver->addPlugin ( "gen-vpart", StringArg ("source","pre-ABL") + StringArg ("flow","ABL") + StringArg("dist","dist") + StringArg("pdf","pdf") +
+		//					RealArg("thres-vort", 2e-2) + RealArg("thres-pdf",5e-5) + RealArg("mult-pdf",1) + RealArg("scale-flow",0.94) + RealArg("max-bl",0.15) +
+		//					RealArg("min-dist", 3) + RealArg("min-rad", 3) + RealArg("max-rad", 7) + RealArg("vortex-gain", 2.5) + RealArg("fade-in", 0));
+	 
+		// solver->addPlugin ( "semi-lagr-advect-vec3", StringArg ( "vel-src","ABL" ) + IntArg ( "mac", 0) );
+		// solver->addPlugin ( "apply-vpart", StringArg ( "vorticity", "vorticity" ) );
+		// solver->addPlugin ( "advect-vpart");
+		// solver->addPlugin ( "merge-vpart", StringArg("ndist","dist") + RealArg("init-time", 30) + RealArg("decay-time",450) + RealArg("merge-dist",0.8) +
+   		// 					RealArg("dissipate-radius",1) + RealArg("radius-cascade",1.5) );
+		// solver->addPlugin ("compute-vorticity", StringArg("vorticity","vort"));	
+		solver->addPlugin ("maccormack-advect-real", StringArg("real-src","density"));
+		// solver->addPlugin( "dump-df3", IntArg("max-frames",200) + StringArg("gridname","density") + StringArg("prefix","sta") + RealArg("start-time",0) + IntArg("pbrt",1) + StringArg ( "override-name", "render/static" ));
+
+		_solvers.push_back(solver);
+	}
+
+	initAllSolvers();
+
+	_vorticity = _solvers[0]->getParams().getGridVec3("vorticity");
+	_density = _solvers[0]->getParams().getGridReal("density");
 }
 
 // static precompute
 void FLUID_3D::precompute(/* const std::string& name, const Vec3& inflow, int frames, bool dynamic, const Vec3& rotAxis = Vec3(0.), Real rotSpeed = 0. */)
 {
+#if 0
 	Vec3 inflow (0.4, 0, 0); /* DG TODO: Use blender stuff here */
 	const int frames = 50; /* DG TODO: Use blender stuff here */
 	// bool rotate = (rotSpeed != 0.);
@@ -111,8 +166,21 @@
 	_meanVel = _solvers[0]->getParams().getGridVec3("mean-vel");
 
 	finalizeAllSolvers();
+#endif
 }
 
 void FLUID_3D::step()
+{
+	// run();
+
+	/* Calculate all requested frames */
+	/* DG TODO: Can I precalc one frame at a time instead of all at once? */
+	advanceAllSolvers();
+
+}
+
+void FLUID_3D::del()
 {
+	finalizeAllSolvers();
+	freeAllSolvers();
 }
\ No newline at end of file

Modified: branches/smoke2/intern/smoke/intern/source/smoke.h
===================================================================
--- branches/smoke2/intern/smoke/intern/source/smoke.h	2012-04-30 19:52:07 UTC (rev 46129)
+++ branches/smoke2/intern/smoke/intern/source/smoke.h	2012-04-30 20:53:40 UTC (rev 46130)
@@ -62,13 +62,21 @@
 			Grid<Vec3>	*_meanVel;
 			Grid<Vec3>	*_abl;
 
+			/* Run */
+			Grid<Real>	*_density;
+			Grid<Vec3>	*_vorticity;
+
 			FLUID_3D(int res[3]) 
 			{
 				_flags = NULL;
 				_normal = NULL;
 				_dist = NULL;
+
 				_meanVel = NULL;
 				_abl = NULL;
+
+				_density = NULL;
+				_vorticity = NULL;
 				
 				_res[0] = res[0];
 				_res[1] = res[1];
@@ -82,13 +90,20 @@
 				delete _flags;
 				delete _normal;
 				delete _dist;
+
 				delete _meanVel;
 				delete _abl;
+
+				delete _density;
+				delete _vorticity;
 			};
 
 			void init();
+			
 			void precompute();
 			void step();
+
+			void del();
 	};
 
 };

Modified: branches/smoke2/intern/smoke/intern/source/solverinit.cpp
===================================================================
--- branches/smoke2/intern/smoke/intern/source/solverinit.cpp	2012-04-30 19:52:07 UTC (rev 46129)
+++ branches/smoke2/intern/smoke/intern/source/solverinit.cpp	2012-04-30 20:53:40 UTC (rev 46130)
@@ -57,9 +57,9 @@
 //******************************************************************************
 // SolverObject class
 
-SolverObject::SolverObject(const string& name, const nVec3i& gridSize)
+SolverObject::SolverObject(const string& name, const nVec3i& gridSize, int gridFlags)
 {
-	init(name, gridSize);
+	init(name, gridSize, gridFlags);
 }
 
 SolverObject::SolverObject(const string& name, const std::string& flagGridFile)
@@ -69,10 +69,10 @@
 	addInitPlugin ("load-universal", StringArg("grid","flags") + StringArg("file",flagGridFile));
 }
 
-SolverObject::SolverObject(const std::string& name, const SolverObject& source, int multiplier)
+SolverObject::SolverObject(const std::string& name, const SolverObject& source, int multiplier, int gridFlags)
 {
 	nVec3i size = source.getParams().getGridSize() * multiplier;
-	init(name, size);
+	init(name, size, gridFlags);
 	getParams().setMultiplier(multiplier);
 	getParams().adaptInit(&source.getParams());
 }
@@ -80,8 +80,7 @@
 SolverObject::SolverObject(const string& name, Grid<int> *flags)
 {
 	nVec3i size = flags->getSize();
-	init(name, size);
-	createIntGrid("flags", flags);	
+	init(name, size, flags);
 }
 
 SolverObject::~SolverObject()
@@ -90,7 +89,7 @@
 }
 
 // initialize default solver params
-void SolverObject::init(const string& name, const nVec3i& size)
+void SolverObject::init(const string& name, const nVec3i& size, int gridFlags)
 {
 	ParamSet par;
 	par.AddInt("host-vorticity-system", 1);
@@ -111,7 +110,7 @@
 	mSolver->setParams(solverParam);
 
 	// create default grids
-	createIntGrid("flags");
+	createIntGrid("flags", gridFlags);
 	createVec3Grid("vel-curr",false);
 	createRealGrid("pressure",false);
 
@@ -125,6 +124,42 @@
 	#endif
 }
 
+// initialize default solver params
+void SolverObject::init(const string& name, const nVec3i& size, Grid<int> *flags)
+{
+	ParamSet par;
+	par.AddInt("host-vorticity-system", 1);
+	par.AddFloat("timestep", 1.0);
+	par.AddVector("gridsize", vec2R(size));
+	par.AddFloat("cg-max-iter-fac", 0.30);
+	par.AddFloat("cg-accuracy", 0.001);
+		// setup plugin lists
+	mInitPlugins.clear();
+	mPlugins.clear();
+	mEndPlugins.clear();
+	mStarted = false;
+
+	// create solver
+	SolverParams* solverParam = new SolverParams("p_" + name);
+	solverParam->initFromParamSet(par);
+	mSolver = new FluidSolver("s_" + name);
+	mSolver->setParams(solverParam);
+
+	// create default grids

@@ Diff output truncated at 10240 characters. @@



More information about the Bf-blender-cvs mailing list