[Bf-blender-cvs] [d77b678] fluid-mantaflow: buoyancy improvements
Sebastián Barschkis
noreply at git.blender.org
Thu Jan 28 12:37:05 CET 2016
Commit: d77b67826547a4fedfb517601df110dde568229d
Author: Sebastián Barschkis
Date: Wed Dec 16 00:15:49 2015 +0100
Branches: fluid-mantaflow
https://developer.blender.org/rBd77b67826547a4fedfb517601df110dde568229d
buoyancy improvements
===================================================================
M intern/smoke/intern/FLUID_3D.cpp
M intern/smoke/intern/scenarios/smoke.h
M source/blender/blenkernel/intern/smoke.c
M source/blender/python/manta_pp/plugin/extforces.cpp
===================================================================
diff --git a/intern/smoke/intern/FLUID_3D.cpp b/intern/smoke/intern/FLUID_3D.cpp
index 113c89f..b86d6fc 100644
--- a/intern/smoke/intern/FLUID_3D.cpp
+++ b/intern/smoke/intern/FLUID_3D.cpp
@@ -757,6 +757,8 @@ FLUID_3D::~FLUID_3D()
//////////////////////////////////////////////////////////////////////
void FLUID_3D::step(float dt, float gravity[3])
{
+ clock_t start = clock();
+
// Blender computes heat buoyancy, not yet impl. in Manta
//manta_write_effectors(this);
Manta_API::updatePointers(this);
@@ -767,16 +769,22 @@ void FLUID_3D::step(float dt, float gravity[3])
PyGILState_Release(gilstate);
Manta_API::updatePointers(this);
+#if 0
for (int i = 0; i < _totalCells; i++)
{
_xForce[i] = _yForce[i] = _zForce[i] = 0.0f;
}
-
+#endif
+ clock_t end = clock();
+ float seconds = (float)(end - start) / CLOCKS_PER_SEC;
+ printf("TIME FOR STEP: %f \n", seconds);
}
void FLUID_3D::processBurn(float *fuel, float *smoke, float *react, float *heat,
float *r, float *g, float *b, int total_cells, float dt)
{
+ clock_t start = clock();
+
// Need to make sure that color grids are initialized as they are needed in processBurn
initColors(0.0f, 0.0f, 0.0f);
@@ -785,15 +793,25 @@ void FLUID_3D::processBurn(float *fuel, float *smoke, float *react, float *heat,
PyRun_SimpleString(py_string_0.c_str());
PyGILState_Release(gilstate);
Manta_API::updatePointers(this);
+
+ clock_t end = clock();
+ float seconds = (float)(end - start) / CLOCKS_PER_SEC;
+ printf("TIME FOR PROCESS_BURN: %f \n", seconds);
}
void FLUID_3D::updateFlame(float *react, float *flame, int total_cells)
{
+ clock_t start = clock();
+
PyGILState_STATE gilstate = PyGILState_Ensure();
std::string py_string_0 = string("update_flame()");
PyRun_SimpleString(py_string_0.c_str());
PyGILState_Release(gilstate);
Manta_API::updatePointers(this);
+
+ clock_t end = clock();
+ float seconds = (float)(end - start) / CLOCKS_PER_SEC;
+ printf("TIME FOR UPDATE_FLAME: %f \n", seconds);
}
#endif /*WITH_MANTA*/
diff --git a/intern/smoke/intern/scenarios/smoke.h b/intern/smoke/intern/scenarios/smoke.h
index 59836d9..272412f 100644
--- a/intern/smoke/intern/scenarios/smoke.h
+++ b/intern/smoke/intern/scenarios/smoke.h
@@ -178,16 +178,6 @@ def step_low():\n\
if solver_dim == 2:\n\
density.add(inflow_grid)\n\
\n\
- if manta_using_heat:\n\
- print ('Adding heat buoyancy')\n\
- gravity=vec3(0,0,-0.0981) if solver_dim==3 else vec3(0,-0.0981,0)\n\
- addBuoyancy2(flags=flags, grid=density, vel=vel, gravity=gravity, coefficient=(-0.001))\n\
- addBuoyancy2(flags=flags, grid=heat_low, vel=vel, gravity=gravity, coefficient=$BETA$*(-10))\n\
- else:\n\
- print ('Adding buoyancy')\n\
- gravity=vec3(0,0,-0.01 * $ALPHA$) if solver_dim==3 else vec3(0,-0.01* $ALPHA$,0)\n\
- addBuoyancy(density=density, vel=vel, gravity=gravity, flags=flags)\n\
- \n\
if manta_using_colors:\n\
print ('Advecting colors')\n\
advectSemiLagrange(flags=flags, vel=vel, grid=color_r_low, order=$ADVECT_ORDER$)\n\
@@ -208,6 +198,16 @@ def step_low():\n\
print ('Walls')\n\
setWallBcs(flags=flags, vel=vel)\n\
\n\
+ if manta_using_heat:\n\
+ print ('Adding heat buoyancy')\n\
+ gravity=vec3(0,0,-0.0981) if solver_dim==3 else vec3(0,-0.0981,0)\n\
+ addBuoyancy2(flags=flags, grid=density, vel=vel, gravity=gravity, coefficient=$ALPHA$)\n\
+ addBuoyancy2(flags=flags, grid=heat_low, vel=vel, gravity=gravity, coefficient=$BETA$*10)\n\
+ else:\n\
+ print ('Adding buoyancy')\n\
+ gravity=vec3(0,0,-0.01 * $ALPHA$) if solver_dim==3 else vec3(0,-0.01* $ALPHA$,0)\n\
+ addBuoyancy(density=density, vel=vel, gravity=gravity, flags=flags)\n\
+ \n\
print('Vorticity')\n\
if $VORTICITY$ > 0.01:\n\
vorticityConfinement( vel=vel, flags=flags, strength=$VORTICITY$ )\n\
diff --git a/source/blender/blenkernel/intern/smoke.c b/source/blender/blenkernel/intern/smoke.c
index 51945a5..b2d9d9f 100644
--- a/source/blender/blenkernel/intern/smoke.c
+++ b/source/blender/blenkernel/intern/smoke.c
@@ -555,7 +555,7 @@ void smokeModifier_createType(struct SmokeModifierData *smd)
smd->domain->alpha = -0.001;
smd->domain->beta = 0.1;
smd->domain->time_scale = 1.0;
- smd->domain->vorticity = 0.01;
+ smd->domain->vorticity = 0.2;
smd->domain->border_collisions = SM_BORDER_OPEN; // open domain
smd->domain->flags = MOD_SMOKE_DISSOLVE_LOG;
smd->domain->highres_sampling = SM_HRES_FULLSAMPLE;
diff --git a/source/blender/python/manta_pp/plugin/extforces.cpp b/source/blender/python/manta_pp/plugin/extforces.cpp
index 2acff64..58456b7 100644
--- a/source/blender/python/manta_pp/plugin/extforces.cpp
+++ b/source/blender/python/manta_pp/plugin/extforces.cpp
@@ -86,9 +86,9 @@ void addBuoyancy(FlagGrid& flags, Grid<Real>& density, MACGrid& vel, Vec3 gravit
//! add Buoyancy force based on coeffiecient
struct KnAddBuoyancy2 : public KernelBase { KnAddBuoyancy2(FlagGrid& flags, Grid<Real>& grid, MACGrid& vel, Vec3 strength, Real coefficient) : KernelBase(&flags,1) ,flags(flags),grid(grid),vel(vel),strength(strength),coefficient(coefficient) { run(); } inline void op(int i, int j, int k, FlagGrid& flags, Grid<Real>& grid, MACGrid& vel, Vec3 strength, Real coefficient ) {
if (!flags.isFluid(i,j,k)) return;
- vel(i,j,k).x += (strength.x) * coefficient * grid(i,j,k);
- vel(i,j,k).y += (strength.y) * coefficient * grid(i,j,k);
- vel(i,j,k).z += (strength.z) * coefficient * grid(i,j,k);
+ vel(i,j,k).x -= (strength.x) * coefficient * grid(i,j,k);
+ vel(i,j,k).y -= (strength.y) * coefficient * grid(i,j,k);
+ vel(i,j,k).z -= (strength.z) * coefficient * grid(i,j,k);
} inline FlagGrid& getArg0() { return flags; } typedef FlagGrid type0;inline Grid<Real>& getArg1() { return grid; } typedef Grid<Real> type1;inline MACGrid& getArg2() { return vel; } typedef MACGrid type2;inline Vec3& getArg3() { return strength; } typedef Vec3 type3;inline Real& getArg4() { return coefficient; } typedef Real type4; void run() { const int _maxX = maxX; const int _maxY = maxY; for (int k=minZ; k< maxZ; k++) for (int j=1; j< _maxY; j++) for (int i=1; i< _maxX; i++) op(i [...]
//! add Buoyancy force based on coeffiecient
More information about the Bf-blender-cvs
mailing list