[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