[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