[Bf-blender-cvs] [9ac37c4] fluid-mantaflow: added caching for simulation with manta solver
Sebastián Barschkis
noreply at git.blender.org
Thu Jan 28 12:36:46 CET 2016
Commit: 9ac37c4e0e8143bb011df3b33d8bbec9770e007e
Author: Sebastián Barschkis
Date: Sat Sep 19 16:58:03 2015 +0200
Branches: fluid-mantaflow
https://developer.blender.org/rB9ac37c4e0e8143bb011df3b33d8bbec9770e007e
added caching for simulation with manta solver
===================================================================
M intern/smoke/intern/FLUID_3D.cpp
M intern/smoke/intern/WTURBULENCE.cpp
M intern/smoke/intern/scenarios/smoke.h
M intern/smoke/intern/smoke_API.cpp
M source/blender/blenkernel/intern/pointcache.c
M source/blender/blenkernel/intern/smoke.c
M source/blender/python/manta_pp/fluidsolver.cpp
===================================================================
diff --git a/intern/smoke/intern/FLUID_3D.cpp b/intern/smoke/intern/FLUID_3D.cpp
index 48f7cf6..247b8dd 100644
--- a/intern/smoke/intern/FLUID_3D.cpp
+++ b/intern/smoke/intern/FLUID_3D.cpp
@@ -51,6 +51,7 @@
FLUID_3D::FLUID_3D(int *res, float dx, float dtdef, int init_heat, int init_fire, int init_colors) :
_xRes(res[0]), _yRes(res[1]), _zRes(res[2]), _res(0.0f)
{
+ cout << "FLUID" << endl;
// set simulation consts
_dt = dtdef; // just in case. set in step from a RNA factor
@@ -531,6 +532,7 @@ void FLUID_3D::updateFlame(float *react, float *flame, int total_cells)
FLUID_3D::FLUID_3D(int *res, float dx, float dtdef, int init_heat, int init_fire, int init_colors, SmokeModifierData *smd) :
_xRes(res[0]), _yRes(res[1]), _zRes(res[2]), _res(0.0f)
{
+ cout << "FLUID_3D" << endl;
// set simulation consts
_dt = dtdef; // just in case. set in step from a RNA factor
@@ -575,13 +577,14 @@ _xRes(res[0]), _yRes(res[1]), _zRes(res[2]), _res(0.0f)
_yForce = new float[_totalCells];
_zForce = new float[_totalCells];
/*if two-dimensional, insert manta sim into blender _density field */
- if (smd->domain->manta_solver_res == 2){
+ if (smd->domain->manta_solver_res == 2) {
_density = new float[_totalCells];
_manta_flags = new int[_totalCells];
manta_resoution = 2;
_yLocation = _yRes / 2;
}
- else{
+ else
+ {
_density = NULL;
_manta_flags = NULL;
manta_resoution = 3;
@@ -656,6 +659,7 @@ _xRes(res[0]), _yRes(res[1]), _zRes(res[2]), _res(0.0f)
smoke_script = smoke_setup_low + liquid_step_low;
else
smoke_script = smoke_setup_low + smoke_step_low;
+
smd->domain->fluid = this;
std::string final_script = Manta_API::parseScript(smoke_script, smd);
ofstream myfile;
diff --git a/intern/smoke/intern/WTURBULENCE.cpp b/intern/smoke/intern/WTURBULENCE.cpp
index fbed3d7..29cccbd 100644
--- a/intern/smoke/intern/WTURBULENCE.cpp
+++ b/intern/smoke/intern/WTURBULENCE.cpp
@@ -60,6 +60,7 @@ static const float persistence = 0.56123f;
//////////////////////////////////////////////////////////////////////
WTURBULENCE::WTURBULENCE(int xResSm, int yResSm, int zResSm, int amplify, int noisetype, const char *noisefile_path, int init_fire, int init_colors)
{
+ cout << "WTURBULENCE" << endl;
// if noise magnitude is below this threshold, its contribution
// is negilgible, so stop evaluating new octaves
_cullingThreshold = 1e-3;
@@ -1210,6 +1211,7 @@ void WTURBULENCE::stepTurbulenceFull(float dtOrg, float* xvel, float* yvel, floa
WTURBULENCE::WTURBULENCE(int xResSm, int yResSm, int zResSm, int amplify, int noisetype, const char *noisefile_path, int init_fire, int init_colors,SmokeDomainSettings *sds)
{
+ cout << "WTURBULENCE" << endl;
// if noise magnitude is below this threshold, its contribution
// is negilgible, so stop evaluating new octaves
_cullingThreshold = 1e-3;
diff --git a/intern/smoke/intern/scenarios/smoke.h b/intern/smoke/intern/scenarios/smoke.h
index eb78fc0..0588aa3 100644
--- a/intern/smoke/intern/scenarios/smoke.h
+++ b/intern/smoke/intern/scenarios/smoke.h
@@ -3,6 +3,7 @@ using namespace std;
const string smoke_clean = "";
const string smoke_setup_low ="from manta import *\n\
+print ('SMOKE SETUP LOW')\n\
import os, shutil, math, sys\n\
\n\
def transform_back(obj, gs):\n\
diff --git a/intern/smoke/intern/smoke_API.cpp b/intern/smoke/intern/smoke_API.cpp
index 09830ba..eb7e249 100644
--- a/intern/smoke/intern/smoke_API.cpp
+++ b/intern/smoke/intern/smoke_API.cpp
@@ -221,6 +221,7 @@ extern "C" void smoke_dissolve_wavelet(WTURBULENCE *wt, int speed, int log)
data_dissolve(wt->_densityBig, 0, wt->_color_rBig, wt->_color_gBig, wt->_color_bBig, wt->_totalCellsBig, speed, log);
}
+#ifndef WITH_MANTA
extern "C" void smoke_export(FLUID_3D *fluid, float *dt, float *dx, float **dens, float **react, float **flame, float **fuel, float **heat,
float **heatold, float **vx, float **vy, float **vz, float **r, float **g, float **b, unsigned char **obstacles)
{
@@ -248,6 +249,37 @@ extern "C" void smoke_export(FLUID_3D *fluid, float *dt, float *dx, float **dens
*dt = fluid->_dt;
*dx = fluid->_dx;
}
+//////////////////////////////////////////////////////////////////////
+#else /*USING MANTAFLOW STRUCTURES*/
+//////////////////////////////////////////////////////////////////////
+extern "C" void smoke_export(FLUID_3D *fluid, float *dt, float *dx, float **dens, float **react, float **flame, float **fuel, float **heat,
+ float **manta_inflow, float **vx, float **vy, float **vz, float **r, float **g, float **b, unsigned char **obstacles)
+{
+ *dens = fluid->_density;
+ if(fuel)
+ *fuel = fluid->_fuel;
+ if(react)
+ *react = fluid->_react;
+ if(flame)
+ *flame = fluid->_flame;
+ if(heat)
+ *heat = fluid->_heat;
+ if(manta_inflow)
+ *manta_inflow = fluid->_manta_inflow;
+ *vx = fluid->_xVelocity;
+ *vy = fluid->_yVelocity;
+ *vz = fluid->_zVelocity;
+ if(r)
+ *r = fluid->_color_r;
+ if(g)
+ *g = fluid->_color_g;
+ if(b)
+ *b = fluid->_color_b;
+ *obstacles = fluid->_obstacles;
+ *dt = fluid->_dt;
+ *dx = fluid->_dx;
+}
+#endif /* WITH_MANTA */
extern "C" void smoke_turbulence_export(WTURBULENCE *wt, float **dens, float **react, float **flame, float **fuel,
float **r, float **g, float **b , float **tcu, float **tcv, float **tcw)
diff --git a/source/blender/blenkernel/intern/pointcache.c b/source/blender/blenkernel/intern/pointcache.c
index b69bc2f..b80c1bb 100644
--- a/source/blender/blenkernel/intern/pointcache.c
+++ b/source/blender/blenkernel/intern/pointcache.c
@@ -600,7 +600,7 @@ static int ptcache_smoke_write(PTCacheFile *pf, void *smoke_v)
ptcache_file_write(pf, &sds->dx, 1, sizeof(float));
if (sds->fluid) {
size_t res = sds->res[0]*sds->res[1]*sds->res[2];
- float dt, dx, *dens, *react, *fuel, *flame, *heat, *heatold, *vx, *vy, *vz, *r, *g, *b;
+ float dt, dx, *dens, *react, *fuel, *flame, *heat, *heatold, *manta_inflow, *vx, *vy, *vz, *r, *g, *b;
unsigned char *obstacles;
unsigned int in_len = sizeof(float)*(unsigned int)res;
unsigned char *out = (unsigned char *)MEM_callocN(LZO_OUT_LEN(in_len) * 4, "pointcache_lzo_buffer");
@@ -608,7 +608,11 @@ static int ptcache_smoke_write(PTCacheFile *pf, void *smoke_v)
int mode=1; // light
if (sds->cache_comp == SM_CACHE_HEAVY) mode=2; // heavy
- smoke_export(sds->fluid, &dt, &dx, &dens, &react, &flame, &fuel, &heat, &heatold, &vx, &vy, &vz, &r, &g, &b, &obstacles);
+ #ifndef WITH_MANTA
+ smoke_export(sds->fluid, &dt, &dx, &dens, &react, &flame, &fuel, &heat, &heatold, &vx, &vy, &vz, &r, &g, &b, &obstacles);
+ #else
+ smoke_export(sds->fluid, &dt, &dx, &dens, &react, &flame, &fuel, &heat, &manta_inflow, &vx, &vy, &vz, &r, &g, &b, &obstacles);
+ #endif
ptcache_file_compressed_write(pf, (unsigned char *)sds->shadow, in_len, out, mode);
@@ -618,9 +622,15 @@ static int ptcache_smoke_write(PTCacheFile *pf, void *smoke_v)
/* writeArrToFile("dens.txt", dens, res);
*/
+ #ifdef WITH_MANTA
+ ptcache_file_compressed_write(pf, (unsigned char *)manta_inflow, in_len, out, mode);
+ #endif
if (fluid_fields & SM_ACTIVE_HEAT) {
ptcache_file_compressed_write(pf, (unsigned char *)heat, in_len, out, mode);
- ptcache_file_compressed_write(pf, (unsigned char *)heatold, in_len, out, mode);
+
+ #ifndef WITH_MANTA
+ ptcache_file_compressed_write(pf, (unsigned char *)heatold, in_len, out, mode);
+ #endif
}
if (fluid_fields & SM_ACTIVE_FIRE) {
ptcache_file_compressed_write(pf, (unsigned char *)flame, in_len, out, mode);
@@ -717,7 +727,7 @@ static int ptcache_smoke_read_old(PTCacheFile *pf, void *smoke_v)
if (sds->fluid) {
size_t res = sds->res[0]*sds->res[1]*sds->res[2];
- float dt, dx, *dens, *heat, *heatold, *vx, *vy, *vz;
+ float dt, dx, *dens, *heat, *heatold, *manta_inflow, *vx, *vy, *vz;
unsigned char *obstacles;
unsigned int out_len = (unsigned int)res * sizeof(float);
float *tmp_array = MEM_callocN(out_len, "Smoke old cache tmp");
@@ -729,16 +739,24 @@ static int ptcache_smoke_read_old(PTCacheFile *pf, void *smoke_v)
sds->active_color[1] = 0.7f;
sds->active_color[2] = 0.7f;
- smoke_export(sds->fluid, &dt, &dx, &dens, NULL, NULL, NULL, &heat, &heatold, &vx, &vy, &vz, NULL, NULL, NULL, &obstacles);
+ #ifndef WITH_MANTA
+ smoke_export(sds->fluid, &dt, &dx, &dens, NULL, NULL, NULL, &heat, &heatold, &vx, &vy, &vz, NULL, NULL, NULL, &obstacles);
+ #else
+ smoke_export(sds->fluid, &dt, &dx, &dens, NULL, NULL, NULL, &heat, &manta_inflow, &vx, &vy, &vz, NULL, NULL, NULL, &obstacles);
+ #endif
ptcache_file_compressed_read(pf, (unsigned char *)sds->shadow, out_len);
ptcache_file_compressed_read(pf, (unsigned char*)dens, out_len);
ptcache_file_compressed_read(pf, (unsigned char*)tmp_array, out_len);
- if (fluid_fields & SM_ACTIVE_HEAT)
- {
+ #ifdef WITH_MANTA
+ ptcache_file_compressed_read(pf, (unsigned char*)manta_inflow, out_len);
+ #endif
+ if (fluid_fields & SM_ACTIVE_HEAT) {
ptcache_file_compressed_read(pf, (unsigned char*)heat, out_len);
- ptcache_file_compressed_read(pf, (unsigned char*)heatold, out_len);
+ #ifndef WITH_MANTA
+ ptcache_file_compressed_read(pf, (unsigned char*)heatold, out_len);
+ #endif
}
else
{
@@ -842,17 +860,29 @@ static int ptcache_smoke_read(PTCacheFile *pf, void *smoke_v)
if (sds->fluid) {
size_t res = sds->res[0]*sds->res[1]*sds->res[2];
- float dt, dx, *dens, *react, *fuel, *flame, *heat, *heatold, *vx, *vy, *vz, *r, *g, *b;
+ float dt, dx, *dens, *react, *fuel, *flame, *heat, *heatold, *manta_inflow, *vx, *vy, *vz, *r, *g, *b;
unsigned char *obstacles;
unsigned int out_len = (unsigned int)res * sizeof(float);
- smoke_export(sds->fluid, &dt, &dx, &dens, &react, &flame, &fuel, &heat, &heatold, &vx, &vy, &vz, &r, &g, &b, &obstacles);
+ #ifndef WITH_MANTA
+ smoke_export(sds->fluid, &dt, &dx, &dens, &react, &flame, &fuel, &heat, &heatold, &vx, &vy, &vz, &r, &g, &b, &obstacles);
+ #else
+ smoke_export(sds->fluid, &dt, &dx, &dens, &react, &flame, &fuel, &heat, &manta_inflow, &vx, &vy, &vz, &r, &g, &b, &obstacles);
+ #endif
+
ptcache_file_compressed_read(pf, (unsigned char *)sds->sh
@@ Diff output truncated at 10240 characters. @@
More information about the Bf-blender-cvs
mailing list