Commit: 44f49e765b1b75078eb199852875f9d034d306f6
Author: Sebastián Barschkis
Date:   Mon Jul 17 21:58:26 2017 +0200
Branches: fluid-mantaflow
https://developer.blender.org/rB44f49e765b1b75078eb199852875f9d034d306f6

updated manta pp files

added drop and float particle support. also improved drop particle generation.

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

M       intern/mantaflow/intern/manta_pp/omp/particle.h
M       intern/mantaflow/intern/manta_pp/omp/plugin/extforces.cpp
M       intern/mantaflow/intern/manta_pp/omp/plugin/flip.cpp
M       intern/mantaflow/intern/manta_pp/omp/registration.cpp
M       intern/mantaflow/intern/manta_pp/tbb/particle.h
M       intern/mantaflow/intern/manta_pp/tbb/plugin/extforces.cpp
M       intern/mantaflow/intern/manta_pp/tbb/plugin/flip.cpp
M       intern/mantaflow/intern/manta_pp/tbb/registration.cpp

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

diff --git a/intern/mantaflow/intern/manta_pp/omp/particle.h 
b/intern/mantaflow/intern/manta_pp/omp/particle.h
index e2d7bf3c296..c057cd87377 100644
--- a/intern/mantaflow/intern/manta_pp/omp/particle.h
+++ b/intern/mantaflow/intern/manta_pp/omp/particle.h
@@ -45,6 +45,10 @@ class ParticleBase : public PbClass {public:
        enum ParticleStatus {
                PNONE         = 0,
                PNEW          = (1<<1),  // particles newly created in this step
+               PDROPLET      = (1<<2),  // secondary particle types
+               PBUBBLE       = (1<<3),
+               PFLOAT        = (1<<4),
+               PTRACER       = (1<<5),
                PDELETE       = (1<<10), // mark as deleted, will be deleted in 
next compress() step
                PINVALID      = (1<<30), // unused
        };
@@ -437,7 +441,7 @@ template <class S>  struct GridAdvectKernel : public 
KernelBase { GridAdvectKern
  {  
 #pragma omp for  
   for (IndexInt i = 0; i < _sz; i++) 
op(i,p,vel,flags,dt,deleteInObstacle,stopInObstacle,u);  }   } std::vector<S>& 
p; const MACGrid& vel; const FlagGrid& flags; Real dt; bool deleteInObstacle; 
bool stopInObstacle;  std::vector<Vec3>  u;  };
-#line 413 "particle.h"
+#line 417 "particle.h"
 
 ;
 
@@ -454,7 +458,7 @@ template <class S>  struct KnDeleteInObstacle : public 
KernelBase { KnDeleteInOb
  {  
 #pragma omp for  
   for (IndexInt i = 0; i < _sz; i++) op(i,p,flags);  }   } std::vector<S>& p; 
const FlagGrid& flags;   };
-#line 435 "particle.h"
+#line 439 "particle.h"
 
 
 
@@ -487,7 +491,7 @@ template <class S>  struct KnClampPositions : public 
KernelBase { KnClampPositio
  {  
 #pragma omp for  
   for (IndexInt i = 0; i < _sz; i++) op(i,p,flags,posOld,stopInObstacle);  }   
} std::vector<S>& p; const FlagGrid& flags; ParticleDataImpl<Vec3> * posOld; 
bool stopInObstacle;   };
-#line 458 "particle.h"
+#line 462 "particle.h"
 
 
 
diff --git a/intern/mantaflow/intern/manta_pp/omp/plugin/extforces.cpp 
b/intern/mantaflow/intern/manta_pp/omp/plugin/extforces.cpp
index eef4050b0bd..39dc87e5d41 100644
--- a/intern/mantaflow/intern/manta_pp/omp/plugin/extforces.cpp
+++ b/intern/mantaflow/intern/manta_pp/omp/plugin/extforces.cpp
@@ -71,6 +71,26 @@ namespace Manta {
 #line 24 "plugin/extforces.cpp"
 
 
+
+
+
+template <class T>  struct knAddFromGrid : public KernelBase { knAddFromGrid( 
BasicParticleSystem& p, Grid<T>& gsrc, ParticleDataImpl<T>& target ) :  
KernelBase(p.size()) ,p(p),gsrc(gsrc),target(target)   { runMessage(); run(); } 
  inline void op(IndexInt idx,  BasicParticleSystem& p, Grid<T>& gsrc, 
ParticleDataImpl<T>& target  )  {
+       if (!p.isActive(idx)) return;
+       target[idx] += gsrc.getInterpolated( p[idx].pos );
+}    inline BasicParticleSystem& getArg0() { return p; } typedef 
BasicParticleSystem type0;inline Grid<T>& getArg1() { return gsrc; } typedef 
Grid<T> type1;inline ParticleDataImpl<T>& getArg2() { return target; } typedef 
ParticleDataImpl<T> type2; void runMessage() { debMsg("Executing kernel 
knAddFromGrid ", 3); debMsg("Kernel range" <<  " size "<<  size  << " "   , 4); 
}; void run() {   const IndexInt _sz = size; 
+#pragma omp parallel 
+ {  
+#pragma omp for  
+  for (IndexInt i = 0; i < _sz; i++) op(i,p,gsrc,target);  }   } 
BasicParticleSystem& p; Grid<T>& gsrc; ParticleDataImpl<T>& target;   };
+#line 54 "plugin/extforces.cpp"
+
+
+void addGridToParts( Grid<Real>& source , BasicParticleSystem& parts , 
ParticleDataImpl<Real>& target ) {
+       knAddFromGrid<Real>(parts, source, target);
+} static PyObject* _W_0 (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, "addGridToParts" , !noTiming ); PyObject *_retval = 0; 
{ ArgLocker _lock; Grid<Real>& source = *_args.getPtr<Grid<Real> 
>("source",0,&_lock); BasicParticleSystem& parts = 
*_args.getPtr<BasicParticleSystem >("parts",1,&_lock); ParticleDataImpl<Real>& 
t [...]
+void addGridToPartsVec3( Grid<Vec3>& source , BasicParticleSystem& parts , 
ParticleDataImpl<Vec3>& target ) {
+       knAddFromGrid<Vec3>(parts, source, target);
+} static PyObject* _W_1 (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, "addGridToPartsVec3" , !noTiming ); PyObject *_retval = 
0; { ArgLocker _lock; Grid<Vec3>& source = *_args.getPtr<Grid<Vec3> 
>("source",0,&_lock); BasicParticleSystem& parts = 
*_args.getPtr<BasicParticleSystem >("parts",1,&_lock); ParticleDataImpl<Vec3 
[...]
        
 //! add Forces between fl/fl and fl/em cells (interpolate cell centered forces 
to MAC grid)
  struct KnAddForceField : public KernelBase { KnAddForceField(FlagGrid& flags, 
MACGrid& vel, Grid<Vec3>& force) :  KernelBase(&flags,1) 
,flags(flags),vel(vel),force(force)   { runMessage(); run(); }  inline void 
op(int i, int j, int k, FlagGrid& flags, MACGrid& vel, Grid<Vec3>& force )  {
@@ -93,7 +113,7 @@ namespace Manta {
  {  
 #pragma omp for  
   for (int j=1; j < _maxY; j++) for (int i=1; i < _maxX; i++) 
op(i,j,k,flags,vel,force);  } }  } FlagGrid& flags; MACGrid& vel; Grid<Vec3>& 
force;   };
-#line 53 "plugin/extforces.cpp"
+#line 66 "plugin/extforces.cpp"
 
 
 
@@ -118,7 +138,7 @@ namespace Manta {
  {  
 #pragma omp for  
   for (int j=1; j < _maxY; j++) for (int i=1; i < _maxX; i++) 
op(i,j,k,flags,vel,force);  } }  } FlagGrid& flags; MACGrid& vel; Vec3 force;   
};
-#line 67 "plugin/extforces.cpp"
+#line 80 "plugin/extforces.cpp"
 
 
 
@@ -126,7 +146,7 @@ namespace Manta {
 void addGravity(FlagGrid& flags, MACGrid& vel, Vec3 gravity) {    
        Vec3 f = gravity * flags.getParent()->getDt() / flags.getDx();
        KnAddForce(flags, vel, f);
-} static PyObject* _W_0 (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, "addGravity" , !noTiming ); PyObject *_retval = 0; { 
ArgLocker _lock; FlagGrid& flags = *_args.getPtr<FlagGrid >("flags",0,&_lock); 
MACGrid& vel = *_args.getPtr<MACGrid >("vel",1,&_lock); Vec3 gravity = 
_args.get<Vec3 >("gravity",2,&_lock);   _retval  [...]
+} static PyObject* _W_2 (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, "addGravity" , !noTiming ); PyObject *_retval = 0; { 
ArgLocker _lock; FlagGrid& flags = *_args.getPtr<FlagGrid >("flags",0,&_lock); 
MACGrid& vel = *_args.getPtr<MACGrid >("vel",1,&_lock); Vec3 gravity = 
_args.get<Vec3 >("gravity",2,&_lock);   _retval  [...]
 
 //! kernel to add Buoyancy force 
  struct KnAddBuoyancy : public KernelBase { KnAddBuoyancy(FlagGrid& flags, 
Grid<Real>& factor, MACGrid& vel, Vec3 strength) :  KernelBase(&flags,1) 
,flags(flags),factor(factor),vel(vel),strength(strength)   { runMessage(); 
run(); }  inline void op(int i, int j, int k, FlagGrid& flags, Grid<Real>& 
factor, MACGrid& vel, Vec3 strength )  {    
@@ -146,7 +166,7 @@ void addGravity(FlagGrid& flags, MACGrid& vel, Vec3 
gravity) {
  {  
 #pragma omp for  
   for (int j=1; j < _maxY; j++) for (int i=1; i < _maxX; i++) 
op(i,j,k,flags,factor,vel,strength);  } }  } FlagGrid& flags; Grid<Real>& 
factor; MACGrid& vel; Vec3 strength;   };
-#line 87 "plugin/extforces.cpp"
+#line 100 "plugin/extforces.cpp"
 
 
 
@@ -154,7 +174,7 @@ void addGravity(FlagGrid& flags, MACGrid& vel, Vec3 
gravity) {
 void addBuoyancy(FlagGrid& flags, Grid<Real>& density, MACGrid& vel, Vec3 
gravity, Real coefficient=1.) {
        Vec3 f = -gravity * flags.getParent()->getDt() / 
flags.getParent()->getDx() * coefficient;
        KnAddBuoyancy(flags,density, vel, f);
-} static PyObject* _W_1 (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, "addBuoyancy" , !noTiming ); PyObject *_retval = 0; { 
ArgLocker _lock; FlagGrid& flags = *_args.getPtr<FlagGrid >("flags",0,&_lock); 
Grid<Real>& density = *_args.getPtr<Grid<Real> >("density",1,&_lock); MACGrid& 
vel = *_args.getPtr<MACGrid >("vel",2,& [...]

@@ Diff output truncated at 10240 characters. @@

_______________________________________________
Bf-blender-cvs mailing list
[email protected]
https://lists.blender.org/mailman/listinfo/bf-blender-cvs

Reply via email to