[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [46620] branches/smoke2/intern/smoke/ intern/source: a) Remove file dependencies, doing all in memory now

Daniel Genrich daniel.genrich at gmx.net
Mon May 14 01:29:50 CEST 2012


Revision: 46620
          http://projects.blender.org/scm/viewvc.php?view=rev&root=bf-blender&revision=46620
Author:   genscher
Date:     2012-05-13 23:29:49 +0000 (Sun, 13 May 2012)
Log Message:
-----------
a) Remove file dependencies, doing all in memory now
b) Fix crashes on Smoke init because of missing folder

Now we can start bringing back functionality.

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

Modified: branches/smoke2/intern/smoke/intern/source/fileio.cpp
===================================================================
--- branches/smoke2/intern/smoke/intern/source/fileio.cpp	2012-05-13 23:08:56 UTC (rev 46619)
+++ branches/smoke2/intern/smoke/intern/source/fileio.cpp	2012-05-13 23:29:49 UTC (rev 46620)
@@ -283,7 +283,7 @@
 					gI = mpPlParams->getGridInt(mGrid);
 					head.bytesPerElement = sizeof(int);
 					head.elementType = 0;
-					head.elements = 1;					
+					head.elements = 1;	
 				}
 				else if (mpPlParams->haveGridReal(mGrid)) {
 					gR = mpPlParams->getGridReal(mGrid);
@@ -394,6 +394,7 @@
 			mGrid = params.FindOneString("grid", "");
 			mSolver = params.FindOneString("solver", "" );
 			mFile = params.FindOneString("file", "" );
+			mSrcGrid = params.FindOneString("srcgrid", "");
 
 			// interpolate, but keep #mInterpolBorder cells from each side unscaled
 			// -1 means off, 0 means scale everything
@@ -412,6 +413,19 @@
 			nVec3i gridSize = flags->getSize();
 			if (gDim==2) gridSize[2] = 1;
 
+
+			/* DG: Only Int Grid supported for the moment */
+			/* Used during solver creation "new SolverObject()" with existing flags grid */
+			if(!mSrcGrid.empty())
+			{
+				// delete old grid
+				delete param->mGridsInt[mGrid];
+				// exchange grid pointer
+				param->mGridsInt[mGrid] = param->mGridsInt[mSrcGrid];
+
+				return true;
+			}
+
 			// load file into byte array
 			UniversalHeader head;
 			gzFile gzf = gzopen(mFile.c_str(),"r");
@@ -456,7 +470,7 @@
 		};
 
 	protected:		
-		std::string mGrid, mFile, mSolver;
+		std::string mGrid, mFile, mSolver, mSrcGrid;
 		bool onlyFluid;
 		int mInterpolBorder;
 };

Modified: branches/smoke2/intern/smoke/intern/source/smoke.cpp
===================================================================
--- branches/smoke2/intern/smoke/intern/source/smoke.cpp	2012-05-13 23:08:56 UTC (rev 46619)
+++ branches/smoke2/intern/smoke/intern/source/smoke.cpp	2012-05-13 23:29:49 UTC (rev 46620)
@@ -43,27 +43,27 @@
 	_dist = _solvers[0]->getParams().getGridReal("dist");
 
 	freeAllSolvers();
-/*
+
 	{
 		Vec3 inflow (0.4, 0, 0);
 		const int nFrames = 50;
 		precompute("static", inflow, nFrames, false);
 	}
-*/
+
 	printf("-------------------- SMOKE INIT B-------------------------\n");
 	{
 		Vec3 inflow (0.4, 0, 0);
-		SolverObject* solverStep = new SolverObject( "run_static",    _flags /* "scene/static-flags.gz" */ );
+		SolverObject* solverStep = new SolverObject( "run_static", _flags);
 
 		solverStep->getParams().mU0 = inflow;
 		solverStep->getParams().mTimestepAnim = 0.005;
 			
 		// create grids
-		solverStep->createVec3Grid ( "mean-flow" );
+		solverStep->createVec3Grid ( "mean-flow", _meanVel );
 		solverStep->createRealGrid ( "dist", _dist );
 		solverStep->createVec3Grid ( "vorticity", DDF_GRID_NO_FREE );
 		solverStep->createVec3Grid ( "ABL" );
-		solverStep->createVec3Grid ( "pre-ABL" );
+		solverStep->createVec3Grid ( "pre-ABL", _abl );
 		solverStep->createVec3Grid ( "vort" );
 		solverStep->createRealGrid ( "pdf" );
 		solverStep->createRealGrid ( "density", DDF_GRID_NO_FREE );
@@ -72,8 +72,8 @@
 
 		// program solverStep initialization process
 		// solverStep->addInitPlugin ( "load-universal", StringArg("grid","dist") + StringArg("file","scene/static-dist.gz"));
-		solverStep->addInitPlugin ( "load-universal", StringArg("grid","mean-flow") + StringArg("file","scene/static-mean.gz"));
-		solverStep->addInitPlugin ( "load-universal", StringArg("grid","pre-ABL") + StringArg("file","scene/static-abl.gz"));
+		// solverStep->addInitPlugin ( "load-universal", StringArg("grid","mean-flow") + StringArg("file","scene/static-mean.gz"));
+		// solverStep->addInitPlugin ( "load-universal", StringArg("grid","pre-ABL") + StringArg("file","scene/static-abl.gz"));
 		
 		// program solver main loop
 		solverStep->addPlugin ( "copy-grid", StringArg ( "src","mean-flow" ) + StringArg ( "dest","vel-curr") );
@@ -110,23 +110,25 @@
 	SolverObject* solverPreCalc = new SolverObject( "precompute", _flags );
 
 	// create grids
-	solverPreCalc->createVec3Grid ( "normal" );
-	solverPreCalc->createRealGrid ( "dist" );
-	solverPreCalc->createVec3Grid ( "mean-vel" );
-	solverPreCalc->createVec3Grid ( "abl" );
+	solverPreCalc->createVec3Grid ( "normal", _normal );
+	solverPreCalc->createRealGrid ( "dist", _dist );
+	solverPreCalc->createVec3Grid ( "mean-vel", DDF_GRID_NO_FREE );
+	solverPreCalc->createVec3Grid ( "abl", DDF_GRID_NO_FREE );
 	solverPreCalc->addStandardSolverGrids();
 	
 	// additional grids for rot. precomputation
+#if 0
+	// DG: not supoprted yet: possible problems with "flags" grid loading into obstacle-flags?
 	if (rotate) {
 		solverPreCalc->createIntGrid ("obstacle-flags");
 		solverPreCalc->createIntGrid ("empty-flags");
 		solverPreCalc->addInitPlugin ( "load-universal", StringArg("grid","obstacle-flags") + StringArg("file","scene/" + name + "-flags.gz"));
 		solverPreCalc->addInitPlugin ( "init-box-domain",  StringArg("gridname","empty-flags") + IntArg ( "flag-inside",FFLUID ) + IntArg ( "flag-border",FINFLOW ) );		
 	}
-
+#endif
 	// load grids, initialize fluid velocities
-	solverPreCalc->addInitPlugin ( "load-universal", StringArg("grid","dist") + StringArg("file","scene/" + name + "-dist.gz"));
-	solverPreCalc->addInitPlugin ( "load-universal", StringArg("grid","normal") + StringArg("file","scene/" + name + "-normal.gz"));
+	// solverPreCalc->addInitPlugin ( "load-universal", StringArg("grid","dist") + StringArg("file","scene/" + name + "-dist.gz"));
+	// solverPreCalc->addInitPlugin ( "load-universal", StringArg("grid","normal") + StringArg("file","scene/" + name + "-normal.gz"));
 	solverPreCalc->addInitPlugin ( "set-conditional", StringArg ( "gridname","vel-curr" ) + VecArg ( "target-vec",inflow ) + IntArg ( "flag", FFLUID ) );
 
 	// program solver main loop
@@ -146,13 +148,16 @@
 	// program final steps
 	solverPreCalc->addEndPlugin ( "calc-abl", StringArg ("mean-vel","mean-vel") + StringArg ("dist","dist") + StringArg("normal","normal") + StringArg("abl","abl") + RealArg("d", 1.7));
 	
+#if 0
+	// DG: dynamic not supported yet
 	if (dynamic)
 		solverPreCalc->addEndPlugin ( "add-database", StringArg("grid","abl") + StringArg("normal","normal") + VecArg("u0",rotate ? (rotSpeed*rotAxis):inflow));
 	else {
 		solverPreCalc->addEndPlugin ( "dump-universal", StringArg ( "grid","abl" ) + StringArg ( "override-name","scene/" + name + "-abl" )  + IntArg ( "single-dump", 1 ) );	
 		solverPreCalc->addEndPlugin ( "dump-universal", StringArg ( "grid","mean-vel" ) + StringArg ( "override-name","scene/" + name + "-mean" ) + IntArg ( "single-dump", 1 ) );
 	}
-		
+#endif	
+
 	_solvers.push_back(solverPreCalc);
 
 	initAllSolvers();
@@ -163,8 +168,8 @@
 
 	finalizeAllSolvers();
 
-	// _abl = _solvers[0]->getParams().getGridVec3("abl");
-	// _meanVel = _solvers[0]->getParams().getGridVec3("mean-vel");
+	_abl = _solvers[0]->getParams().getGridVec3("abl");
+	_meanVel = _solvers[0]->getParams().getGridVec3("mean-vel");
 
 	freeAllSolvers();
 }

Modified: branches/smoke2/intern/smoke/intern/source/solverinit.cpp
===================================================================
--- branches/smoke2/intern/smoke/intern/source/solverinit.cpp	2012-05-13 23:08:56 UTC (rev 46619)
+++ branches/smoke2/intern/smoke/intern/source/solverinit.cpp	2012-05-13 23:29:49 UTC (rev 46620)
@@ -80,7 +80,9 @@
 SolverObject::SolverObject(const string& name, Grid<int> *flags)
 {
 	nVec3i size = flags->getSize();
-	init(name, size, flags);
+	init(name, size);
+	createIntGrid("srcflags", flags);
+	addInitPlugin ("load-universal", StringArg("grid","flags") + StringArg("srcgrid", "srcflags"));
 }
 
 SolverObject::~SolverObject()
@@ -124,42 +126,6 @@
 	#endif
 }
 
-// initialize default solver params
-void SolverObject::init(const string& name, const nVec3i& size, Grid<int> *flagsGrid)
-{
-	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
-	createIntGrid("flags", flagsGrid); 
-	createVec3Grid("vel-curr");
-	createRealGrid("pressure");
-
-	// globally register solver
-	gFluidSolvers[mSolver->getName()] = mSolver;
-	if (gpFsolver == NULL) gpFsolver = mSolver;
-
-	// setup GUI params
-	 #if DDF_GLUTGUI == 1
-	gGlutGuiParams.AddString("solvername", gpFsolver->getName());
-	#endif
-}
-
 void SolverObject::forceInit() {
 	if (!mStarted) {
 		// start solver

Modified: branches/smoke2/intern/smoke/intern/source/solverinit.h
===================================================================
--- branches/smoke2/intern/smoke/intern/source/solverinit.h	2012-05-13 23:08:56 UTC (rev 46619)
+++ branches/smoke2/intern/smoke/intern/source/solverinit.h	2012-05-13 23:29:49 UTC (rev 46620)
@@ -72,7 +72,6 @@
 
 		protected:
 		void init(const std::string& name, const nVec3i& gridSize, int gridFlags = 0);
-		void init(const string& name, const nVec3i& size, Grid<int> *flagsGrid);
 		SolverPlugin* createPlugin(const std::string& name, const PluginArgument&);
 		
 		FluidSolver* mSolver;




More information about the Bf-blender-cvs mailing list