[Bf-blender-cvs] [232ec3132db] fluid-mantaflow: Mantaflow: Moved smoke dissolve function from Blender C code to internal Mantaflow code

Sebastián Barschkis noreply at git.blender.org
Mon May 27 11:30:01 CEST 2019


Commit: 232ec3132db01b92e7ab03523a8eb9680caf3b8e
Author: Sebastián Barschkis
Date:   Mon May 27 11:26:41 2019 +0200
Branches: fluid-mantaflow
https://developer.blender.org/rB232ec3132db01b92e7ab03523a8eb9680caf3b8e

Mantaflow: Moved smoke dissolve function from Blender C code to internal Mantaflow code

===================================================================

M	intern/mantaflow/extern/manta_fluid_API.h
M	intern/mantaflow/intern/FLUID.cpp
M	intern/mantaflow/intern/manta_develop/preprocessed/omp/gitinfo.h
M	intern/mantaflow/intern/manta_develop/preprocessed/omp/plugin/extforces.cpp
M	intern/mantaflow/intern/manta_develop/preprocessed/omp/registration.cpp
M	intern/mantaflow/intern/manta_develop/preprocessed/tbb/gitinfo.h
M	intern/mantaflow/intern/manta_develop/preprocessed/tbb/plugin/extforces.cpp
M	intern/mantaflow/intern/manta_develop/preprocessed/tbb/registration.cpp
M	intern/mantaflow/intern/manta_develop/update_mantaflow.sh
M	intern/mantaflow/intern/manta_fluid_API.cpp
M	intern/mantaflow/intern/strings/smoke_script.h
M	source/blender/blenkernel/intern/smoke.c

===================================================================

diff --git a/intern/mantaflow/extern/manta_fluid_API.h b/intern/mantaflow/extern/manta_fluid_API.h
index 51bee4fd96b..137e110afe5 100644
--- a/intern/mantaflow/extern/manta_fluid_API.h
+++ b/intern/mantaflow/extern/manta_fluid_API.h
@@ -102,8 +102,6 @@ float *fluid_get_phiout_in(struct FLUID *fluid);
 
 /* Smoke functions */
 void smoke_manta_export(struct FLUID *smoke, struct SmokeModifierData *smd);
-void smoke_dissolve(struct FLUID *smoke, int speed, int log);
-void smoke_dissolve_wavelet(struct FLUID *smoke, int speed, int log);
 void smoke_export(struct FLUID *smoke,
                   float *dt,
                   float *dx,
diff --git a/intern/mantaflow/intern/FLUID.cpp b/intern/mantaflow/intern/FLUID.cpp
index fc85f62a00d..113fc402926 100644
--- a/intern/mantaflow/intern/FLUID.cpp
+++ b/intern/mantaflow/intern/FLUID.cpp
@@ -604,6 +604,10 @@ std::string FLUID::getRealValue(const std::string &varName, SmokeModifierData *s
     ss << (smd->domain->active_fields & FLUID_DOMAIN_ACTIVE_INVEL ? "True" : "False");
   else if (varName == "USING_OUTFLOW")
     ss << (smd->domain->active_fields & FLUID_DOMAIN_ACTIVE_OUTFLOW ? "True" : "False");
+  else if (varName == "USING_LOG_DISSOLVE")
+    ss << (smd->domain->flags & FLUID_DOMAIN_USE_DISSOLVE_LOG ? "True" : "False");
+  else if (varName == "USING_DISSOLVE")
+    ss << (smd->domain->flags & FLUID_DOMAIN_USE_DISSOLVE ? "True" : "False");
   else if (varName == "SOLVER_DIM")
     ss << smd->domain->solver_res;
   else if (varName == "DO_OPEN") {
@@ -758,6 +762,8 @@ std::string FLUID::getRealValue(const std::string &varName, SmokeModifierData *s
     ss << smd->domain->alpha;
   else if (varName == "BUOYANCY_BETA")
     ss << smd->domain->beta;
+  else if (varName == "DISSOLVE_SPEED")
+    ss << smd->domain->diss_speed;
   else if (varName == "BURNING_RATE")
     ss << smd->domain->burning_rate;
   else if (varName == "FLAME_SMOKE")
diff --git a/intern/mantaflow/intern/manta_develop/preprocessed/omp/gitinfo.h b/intern/mantaflow/intern/manta_develop/preprocessed/omp/gitinfo.h
index 36fec6f4536..f5792be1629 100644
--- a/intern/mantaflow/intern/manta_develop/preprocessed/omp/gitinfo.h
+++ b/intern/mantaflow/intern/manta_develop/preprocessed/omp/gitinfo.h
@@ -1,4 +1,4 @@
 
 
-#define MANTA_GIT_VERSION "commit 992e0d22b10e7a67da0941e0892dbf27863a5048" 
+#define MANTA_GIT_VERSION "commit f10198c6cf266b3cad00652a82472b54a2dc7377" 
 
diff --git a/intern/mantaflow/intern/manta_develop/preprocessed/omp/plugin/extforces.cpp b/intern/mantaflow/intern/manta_develop/preprocessed/omp/plugin/extforces.cpp
index 518820bac7f..a590ca510a6 100644
--- a/intern/mantaflow/intern/manta_develop/preprocessed/omp/plugin/extforces.cpp
+++ b/intern/mantaflow/intern/manta_develop/preprocessed/omp/plugin/extforces.cpp
@@ -798,6 +798,60 @@ extern "C" {
 
 
 
+
+
+void dissolveSmoke(const FlagGrid& flags, Grid<Real>& density, Grid<Real>* heat=NULL, Grid<Real>* red=NULL, Grid<Real>* green=NULL, Grid<Real>* blue=NULL, int speed=5, bool logFalloff=true) {
+	float dydx = 1.0f / (float)speed; // max density/speed = dydx
+	float fac = 1.0f - dydx;
+
+	FOR_IJK_BND(density, 0) {
+		bool curFluid = flags.isFluid(i,j,k);
+		if (!curFluid) continue;
+
+		if (logFalloff) {
+			density(i,j,k) *= fac;
+			if (heat) {
+				(*heat)(i,j,k) *= fac;
+			}
+			if (red) {
+				(*red)(i,j,k) *= fac;
+				(*green)(i,j,k) *= fac;
+				(*blue)(i,j,k) *= fac;
+			}
+		}
+		else { // linear falloff
+			float d = density(i,j,k);
+			density(i,j,k) -= dydx;
+			if (density(i,j,k) < 0.0f)
+				density(i,j,k) = 0.0f;
+			if (heat) {
+				if      (fabs((*heat)(i,j,k)) < dydx) (*heat)(i,j,k) = 0.0f;
+				else if ((*heat)(i,j,k) > 0.0f) (*heat)(i,j,k) -= dydx;
+				else if ((*heat)(i,j,k) < 0.0f) (*heat)(i,j,k) += dydx;
+			}
+			if (red && d) {
+				(*red)(i,j,k) *= (density(i,j,k)/d);
+				(*green)(i,j,k) *= (density(i,j,k)/d);
+				(*blue)(i,j,k) *= (density(i,j,k)/d);
+			}
+		}
+	}
+} static PyObject* _W_11 (PyObject* _self, PyObject* _linargs, PyObject* _kwds) {
+ try {
+ PbArgs _args(_linargs, _kwds); FluidSolver *parent = _args.obtainParent(); bool noTiming = _args.getOpt<bool>("notiming", -1, 0); pbPreparePlugin(parent, "dissolveSmoke" , !noTiming ); PyObject *_retval = 0; {
+ ArgLocker _lock; const FlagGrid& flags = *_args.getPtr<FlagGrid >("flags",0,&_lock); Grid<Real>& density = *_args.getPtr<Grid<Real> >("density",1,&_lock); Grid<Real>* heat = _args.getPtrOpt<Grid<Real> >("heat",2,NULL,&_lock); Grid<Real>* red = _args.getPtrOpt<Grid<Real> >("red",3,NULL,&_lock); Grid<Real>* green = _args.getPtrOpt<Grid<Real> >("green",4,NULL,&_lock); Grid<Real>* blue = _args.getPtrOpt<Grid<Real> >("blue",5,NULL,&_lock); int speed = _args.getOpt<int >("speed",6,5,&_lock);  [...]
+ pbFinalizePlugin(parent,"dissolveSmoke", !noTiming ); return _retval; }
+ catch(std::exception& e) {
+ pbSetError("dissolveSmoke",e.what()); return 0; }
+ }
+ static const Pb::Register _RP_dissolveSmoke ("","dissolveSmoke",_W_11); 
+extern "C" {
+ void PbRegister_dissolveSmoke() {
+ KEEP_UNUSED(_RP_dissolveSmoke); }
+ }
+
+
+
 } // namespace
 
 
diff --git a/intern/mantaflow/intern/manta_develop/preprocessed/omp/registration.cpp b/intern/mantaflow/intern/manta_develop/preprocessed/omp/registration.cpp
index 52f8c11d3ae..04ce0f3f6b5 100644
--- a/intern/mantaflow/intern/manta_develop/preprocessed/omp/registration.cpp
+++ b/intern/mantaflow/intern/manta_develop/preprocessed/omp/registration.cpp
@@ -57,6 +57,7 @@ extern "C" {
 		extern void PbRegister_vorticityConfinement() ;
 		extern void PbRegister_addForceField() ;
 		extern void PbRegister_setForceField() ;
+		extern void PbRegister_dissolveSmoke() ;
 		extern void PbRegister_apicMapPartsToMAC() ;
 		extern void PbRegister_apicMapMACGridToParts() ;
 		extern void PbRegister_sampleFlagsWithParticles() ;
@@ -247,6 +248,7 @@ namespace Pb {
 		PbRegister_vorticityConfinement() ;
 		PbRegister_addForceField() ;
 		PbRegister_setForceField() ;
+		PbRegister_dissolveSmoke() ;
 		PbRegister_apicMapPartsToMAC() ;
 		PbRegister_apicMapMACGridToParts() ;
 		PbRegister_sampleFlagsWithParticles() ;
diff --git a/intern/mantaflow/intern/manta_develop/preprocessed/tbb/gitinfo.h b/intern/mantaflow/intern/manta_develop/preprocessed/tbb/gitinfo.h
index 36fec6f4536..f5792be1629 100644
--- a/intern/mantaflow/intern/manta_develop/preprocessed/tbb/gitinfo.h
+++ b/intern/mantaflow/intern/manta_develop/preprocessed/tbb/gitinfo.h
@@ -1,4 +1,4 @@
 
 
-#define MANTA_GIT_VERSION "commit 992e0d22b10e7a67da0941e0892dbf27863a5048" 
+#define MANTA_GIT_VERSION "commit f10198c6cf266b3cad00652a82472b54a2dc7377" 
 
diff --git a/intern/mantaflow/intern/manta_develop/preprocessed/tbb/plugin/extforces.cpp b/intern/mantaflow/intern/manta_develop/preprocessed/tbb/plugin/extforces.cpp
index 5a23d1197e7..2a31839051a 100644
--- a/intern/mantaflow/intern/manta_develop/preprocessed/tbb/plugin/extforces.cpp
+++ b/intern/mantaflow/intern/manta_develop/preprocessed/tbb/plugin/extforces.cpp
@@ -718,6 +718,60 @@ extern "C" {
 
 
 
+
+
+void dissolveSmoke(const FlagGrid& flags, Grid<Real>& density, Grid<Real>* heat=NULL, Grid<Real>* red=NULL, Grid<Real>* green=NULL, Grid<Real>* blue=NULL, int speed=5, bool logFalloff=true) {
+	float dydx = 1.0f / (float)speed; // max density/speed = dydx
+	float fac = 1.0f - dydx;
+
+	FOR_IJK_BND(density, 0) {
+		bool curFluid = flags.isFluid(i,j,k);
+		if (!curFluid) continue;
+
+		if (logFalloff) {
+			density(i,j,k) *= fac;
+			if (heat) {
+				(*heat)(i,j,k) *= fac;
+			}
+			if (red) {
+				(*red)(i,j,k) *= fac;
+				(*green)(i,j,k) *= fac;
+				(*blue)(i,j,k) *= fac;
+			}
+		}
+		else { // linear falloff
+			float d = density(i,j,k);
+			density(i,j,k) -= dydx;
+			if (density(i,j,k) < 0.0f)
+				density(i,j,k) = 0.0f;
+			if (heat) {
+				if      (fabs((*heat)(i,j,k)) < dydx) (*heat)(i,j,k) = 0.0f;
+				else if ((*heat)(i,j,k) > 0.0f) (*heat)(i,j,k) -= dydx;
+				else if ((*heat)(i,j,k) < 0.0f) (*heat)(i,j,k) += dydx;
+			}
+			if (red && d) {
+				(*red)(i,j,k) *= (density(i,j,k)/d);
+				(*green)(i,j,k) *= (density(i,j,k)/d);
+				(*blue)(i,j,k) *= (density(i,j,k)/d);
+			}
+		}
+	}
+} static PyObject* _W_11 (PyObject* _self, PyObject* _linargs, PyObject* _kwds) {
+ try {
+ PbArgs _args(_linargs, _kwds); FluidSolver *parent = _args.obtainParent(); bool noTiming = _args.getOpt<bool>("notiming", -1, 0); pbPreparePlugin(parent, "dissolveSmoke" , !noTiming ); PyObject *_retval = 0; {
+ ArgLocker _lock; const FlagGrid& flags = *_args.getPtr<FlagGrid >("flags",0,&_lock); Grid<Real>& density = *_args.getPtr<Grid<Real> >("density",1,&_lock); Grid<Real>* heat = _args.getPtrOpt<Grid<Real> >("heat",2,NULL,&_lock); Grid<Real>* red = _args.getPtrOpt<Grid<Real> >("red",3,NULL,&_lock); Grid<Real>* green = _args.getPtrOpt<Grid<Real> >("green",4,NULL,&_lock); Grid<Real>* blue = _args.getPtrOpt<Grid<Real> >("blue",5,NULL,&_lock); int speed = _args.getOpt<int >("speed",6,5,&_lock);  [...]
+ pbFinalizePlugin(parent,"dissolveSmoke", !noTiming ); return _retval; }
+ catch(std::exception& e) {
+ pbSetError("dissolveSmoke",e.what()); return 0; }
+ }
+ static const Pb::Register _RP_dissolveSmoke ("","dissolveSmoke",_W_11); 
+extern "C" {
+ void PbRegister_dissolveSmoke() {
+ KEEP_UNUSED(_RP_dissolveSmoke); }
+ }
+
+
+
 } // namespace
 
 
diff --git a/intern/mantaflow/intern/manta_develop/preprocessed/tbb/registration.cpp b/intern/mantaflow/intern/manta_develop/preprocessed/tbb/registration.cpp
index 52f8c11d3ae..04ce0f3f6b5 100644
--- a/intern/mantaflow/intern/manta_develop/preprocessed/tbb/registration.cpp
+++ b/intern/mantaflow/intern/manta_develop/preprocessed/tbb/registration.cpp
@@ -57,6 +57,7 @@ extern "C" {
 		extern void PbRegister_vorticityConfinement() ;
 		extern void PbRegister_addForceField() ;
 		extern void PbRegister_setForceField() ;
+		extern void PbRegister_dissolveSmoke() ;
 		extern void PbRegister_apicMapPartsToMAC() ;

@@ Diff output truncated at 10240 characters. @@



More information about the Bf-blender-cvs mailing list