Commit: 837a78a45196b677b4ddc8ed6b327b253ac02d12 Author: Sebastián Barschkis Date: Thu Mar 17 10:58:56 2016 +0100 Branches: fluid-mantaflow https://developer.blender.org/rB837a78a45196b677b4ddc8ed6b327b253ac02d12
updated manta pp files =================================================================== A intern/mantaflow/intern/manta_pp/commonkernels.h A intern/mantaflow/intern/manta_pp/commonkernels.h.reg A intern/mantaflow/intern/manta_pp/commonkernels.h.reg.cpp A intern/mantaflow/intern/manta_pp/conjugategrad.cpp A intern/mantaflow/intern/manta_pp/conjugategrad.h A intern/mantaflow/intern/manta_pp/conjugategrad.h.reg A intern/mantaflow/intern/manta_pp/conjugategrad.h.reg.cpp A intern/mantaflow/intern/manta_pp/edgecollapse.cpp A intern/mantaflow/intern/manta_pp/edgecollapse.h A intern/mantaflow/intern/manta_pp/edgecollapse.h.reg A intern/mantaflow/intern/manta_pp/edgecollapse.h.reg.cpp A intern/mantaflow/intern/manta_pp/fastmarch.cpp A intern/mantaflow/intern/manta_pp/fastmarch.h A intern/mantaflow/intern/manta_pp/fastmarch.h.reg A intern/mantaflow/intern/manta_pp/fastmarch.h.reg.cpp A intern/mantaflow/intern/manta_pp/fileio.cpp A intern/mantaflow/intern/manta_pp/fileio.h A intern/mantaflow/intern/manta_pp/fileio.h.reg A intern/mantaflow/intern/manta_pp/fileio.h.reg.cpp A intern/mantaflow/intern/manta_pp/fluidsolver.cpp A intern/mantaflow/intern/manta_pp/fluidsolver.h A intern/mantaflow/intern/manta_pp/fluidsolver.h.reg A intern/mantaflow/intern/manta_pp/fluidsolver.h.reg.cpp A intern/mantaflow/intern/manta_pp/general.cpp A intern/mantaflow/intern/manta_pp/general.h A intern/mantaflow/intern/manta_pp/general.h.reg A intern/mantaflow/intern/manta_pp/general.h.reg.cpp A intern/mantaflow/intern/manta_pp/gitinfo.h A intern/mantaflow/intern/manta_pp/grid.cpp A intern/mantaflow/intern/manta_pp/grid.h A intern/mantaflow/intern/manta_pp/grid.h.reg A intern/mantaflow/intern/manta_pp/grid.h.reg.cpp A intern/mantaflow/intern/manta_pp/hginfo.h A intern/mantaflow/intern/manta_pp/kernel.cpp A intern/mantaflow/intern/manta_pp/kernel.h A intern/mantaflow/intern/manta_pp/kernel.h.reg A intern/mantaflow/intern/manta_pp/kernel.h.reg.cpp A intern/mantaflow/intern/manta_pp/levelset.cpp A intern/mantaflow/intern/manta_pp/levelset.h A intern/mantaflow/intern/manta_pp/levelset.h.reg A intern/mantaflow/intern/manta_pp/levelset.h.reg.cpp A intern/mantaflow/intern/manta_pp/mesh.cpp A intern/mantaflow/intern/manta_pp/mesh.h A intern/mantaflow/intern/manta_pp/mesh.h.reg A intern/mantaflow/intern/manta_pp/mesh.h.reg.cpp A intern/mantaflow/intern/manta_pp/movingobs.cpp A intern/mantaflow/intern/manta_pp/movingobs.h A intern/mantaflow/intern/manta_pp/movingobs.h.reg A intern/mantaflow/intern/manta_pp/movingobs.h.reg.cpp A intern/mantaflow/intern/manta_pp/noisefield.cpp A intern/mantaflow/intern/manta_pp/noisefield.h A intern/mantaflow/intern/manta_pp/noisefield.h.reg A intern/mantaflow/intern/manta_pp/noisefield.h.reg.cpp A intern/mantaflow/intern/manta_pp/particle.cpp A intern/mantaflow/intern/manta_pp/particle.h A intern/mantaflow/intern/manta_pp/particle.h.reg A intern/mantaflow/intern/manta_pp/particle.h.reg.cpp A intern/mantaflow/intern/manta_pp/plugin/advection.cpp A intern/mantaflow/intern/manta_pp/plugin/extforces.cpp A intern/mantaflow/intern/manta_pp/plugin/fire.cpp A intern/mantaflow/intern/manta_pp/plugin/flip.cpp A intern/mantaflow/intern/manta_pp/plugin/initplugins.cpp A intern/mantaflow/intern/manta_pp/plugin/kepsilon.cpp A intern/mantaflow/intern/manta_pp/plugin/meshplugins.cpp A intern/mantaflow/intern/manta_pp/plugin/pressure.cpp A intern/mantaflow/intern/manta_pp/plugin/vortexplugins.cpp A intern/mantaflow/intern/manta_pp/plugin/waveletturbulence.cpp A intern/mantaflow/intern/manta_pp/plugin/waves.cpp A intern/mantaflow/intern/manta_pp/pwrapper/manta.h A intern/mantaflow/intern/manta_pp/pwrapper/pclass.cpp A intern/mantaflow/intern/manta_pp/pwrapper/pclass.h A intern/mantaflow/intern/manta_pp/pwrapper/pconvert.cpp A intern/mantaflow/intern/manta_pp/pwrapper/pconvert.h A intern/mantaflow/intern/manta_pp/pwrapper/pvec3.cpp A intern/mantaflow/intern/manta_pp/pwrapper/pymain.cpp A intern/mantaflow/intern/manta_pp/pwrapper/pythonInclude.h A intern/mantaflow/intern/manta_pp/pwrapper/registry.cpp A intern/mantaflow/intern/manta_pp/pwrapper/registry.h A intern/mantaflow/intern/manta_pp/python/defines.py A intern/mantaflow/intern/manta_pp/python/defines.py.reg A intern/mantaflow/intern/manta_pp/python/defines.py.reg.cpp A intern/mantaflow/intern/manta_pp/shapes.cpp A intern/mantaflow/intern/manta_pp/shapes.h A intern/mantaflow/intern/manta_pp/shapes.h.reg A intern/mantaflow/intern/manta_pp/shapes.h.reg.cpp A intern/mantaflow/intern/manta_pp/test.cpp A intern/mantaflow/intern/manta_pp/timing.cpp A intern/mantaflow/intern/manta_pp/timing.h A intern/mantaflow/intern/manta_pp/timing.h.reg A intern/mantaflow/intern/manta_pp/timing.h.reg.cpp A intern/mantaflow/intern/manta_pp/turbulencepart.cpp A intern/mantaflow/intern/manta_pp/turbulencepart.h A intern/mantaflow/intern/manta_pp/turbulencepart.h.reg A intern/mantaflow/intern/manta_pp/turbulencepart.h.reg.cpp A intern/mantaflow/intern/manta_pp/util/integrator.h A intern/mantaflow/intern/manta_pp/util/interpol.h A intern/mantaflow/intern/manta_pp/util/interpolHigh.h A intern/mantaflow/intern/manta_pp/util/mcubes.h A intern/mantaflow/intern/manta_pp/util/quaternion.h A intern/mantaflow/intern/manta_pp/util/randomstream.h A intern/mantaflow/intern/manta_pp/util/simpleimage.cpp A intern/mantaflow/intern/manta_pp/util/simpleimage.h A intern/mantaflow/intern/manta_pp/util/solvana.h A intern/mantaflow/intern/manta_pp/util/vectorbase.cpp A intern/mantaflow/intern/manta_pp/util/vectorbase.h A intern/mantaflow/intern/manta_pp/vortexpart.cpp A intern/mantaflow/intern/manta_pp/vortexpart.h A intern/mantaflow/intern/manta_pp/vortexpart.h.reg A intern/mantaflow/intern/manta_pp/vortexpart.h.reg.cpp A intern/mantaflow/intern/manta_pp/vortexsheet.cpp A intern/mantaflow/intern/manta_pp/vortexsheet.h A intern/mantaflow/intern/manta_pp/vortexsheet.h.reg A intern/mantaflow/intern/manta_pp/vortexsheet.h.reg.cpp =================================================================== diff --git a/intern/mantaflow/intern/manta_pp/commonkernels.h b/intern/mantaflow/intern/manta_pp/commonkernels.h new file mode 100644 index 0000000..202905d --- /dev/null +++ b/intern/mantaflow/intern/manta_pp/commonkernels.h @@ -0,0 +1,277 @@ + + + + + +// DO NOT EDIT ! +// This file is generated using the MantaFlow preprocessor (prep generate). + + + + +#line 1 "/Users/user/Developer/Xcode Projects/mantaflowDevelop/mantaflowgit/source/commonkernels.h" +/****************************************************************************** + * + * MantaFlow fluid solver framework + * Copyright 2011 Tobias Pfaff, Nils Thuerey + * + * This program is free software, distributed under the terms of the + * GNU General Public License (GPL) + * http://www.gnu.org/licenses + * + * Common grid kernels + * + ******************************************************************************/ + +#ifndef _COMMONKERNELS_H +#define _COMMONKERNELS_H + +#include "general.h" +#include "kernel.h" +#include "grid.h" + +namespace Manta { + +//! Kernel: Invert real values, if positive and fluid + + + struct InvertCheckFluid : public KernelBase { InvertCheckFluid(FlagGrid& flags, Grid<Real>& grid) : KernelBase(&flags,0) ,flags(flags),grid(grid) { run(); } inline void op(int idx, FlagGrid& flags, Grid<Real>& grid ) { + if (flags.isFluid(idx) && grid[idx] > 0) + grid[idx] = 1.0 / grid[idx]; +} inline FlagGrid& getArg0() { return flags; } typedef FlagGrid type0;inline Grid<Real>& getArg1() { return grid; } typedef Grid<Real> type1; void run() { const int _sz = size; +#pragma omp parallel + { this->threadId = omp_get_thread_num(); this->threadNum = omp_get_num_threads(); +#pragma omp for + for (int i=0; i < _sz; i++) op(i,flags,grid); } } FlagGrid& flags; Grid<Real>& grid; }; +#line 26 "commonkernels.h" + + + +//! Kernel: Squared sum over grid + + struct GridSumSqr : public KernelBase { GridSumSqr(Grid<Real>& grid) : KernelBase(&grid,0) ,grid(grid) ,sum(0) { run(); } inline void op(int idx, Grid<Real>& grid ,double& sum) { + sum += square((double)grid[idx]); +} inline operator double () { return sum; } inline double & getRet() { return sum; } inline Grid<Real>& getArg0() { return grid; } typedef Grid<Real> type0; void run() { const int _sz = size; +#pragma omp parallel + { this->threadId = omp_get_thread_num(); this->threadNum = omp_get_num_threads(); double sum = 0; +#pragma omp for nowait + for (int i=0; i < _sz; i++) op(i,grid,sum); +#pragma omp critical +{this->sum += sum; } } } Grid<Real>& grid; double sum; }; +#line 33 "commonkernels.h" + + + +//! Kernel: rotation operator \nabla x v for centered vector fields + + struct CurlOp : public KernelBase { CurlOp(const Grid<Vec3>& grid, Grid<Vec3>& dst) : KernelBase(&grid,1) ,grid(grid),dst(dst) { run(); } inline void op(int i, int j, int k, const Grid<Vec3>& grid, Grid<Vec3>& dst ) { + Vec3 v = Vec3(0. , 0. , + 0.5*((grid(i+1,j,k).y - grid(i-1,j,k).y) - (grid(i,j+1,k).x - grid(i,j-1,k).x)) ); + if(dst.is3D()) { + v[0] = 0.5*((grid(i,j+1,k).z - grid(i,j-1,k).z) - (grid(i,j,k+1).y - grid(i,j,k-1).y)); + v[1] = 0.5*((grid(i,j,k+1).x - grid(i,j,k-1).x) - (grid(i+1,j,k).z - grid(i-1,j,k).z)); + } + dst(i,j,k) = v; +} inline const Grid<Vec3>& getArg0() { return grid; } typedef Grid<Vec3> type0;inline Grid<Vec3>& getArg1() { return dst; } typedef Grid<Vec3> type1; void run() { const int _maxX = maxX; const int _maxY = maxY; if (maxZ > 1) { +#pragma omp parallel + { this->threadId = omp_get_thread_num(); this->threadNum = omp_get_num_threads(); +#pragma omp for + for (int k=minZ; k < maxZ; k++) for (int j=1; j < _maxY; j++) for (int i=1; i < _maxX; i++) op(i,j,k,grid,dst); } } else { const int k=0; +#pragma omp parallel + { this->threadId = omp_get_thread_num(); this->threadNum = omp_get_num_threads(); +#pragma omp for + for (int j=1; j < _maxY; j++) for (int i=1; i < _maxX; i++) op(i,j,k,grid,dst); } } } const Grid<Vec3>& grid; Grid<Vec3>& dst; }; +#line 39 "commonkernels.h" + +; + +//! Kernel: divergence operator (from MAC grid) + + struct DivergenceOpMAC : public KernelBase { DivergenceOpMAC(Grid<Real>& div, const MACGrid& grid) : KernelBase(&div,1) ,div(div),grid(grid) { run(); } inline void op(int i, int j, int k, Grid<Real>& div, const MACGrid& grid ) { + Vec3 del = Vec3(grid(i+1,j,k).x, grid(i,j+1,k).y, 0.) - grid(i,j,k); + if(grid.is3D()) del[2] += grid(i,j,k+1).z; + else del[2] = 0.; + div(i,j,k) = del.x + del.y + del.z; +} inline Grid<Real>& getArg0() { return div; } typedef Grid<Real> type0;inline const MACGrid& getArg1() { return grid; } typedef MACGrid type1; void run() { const int _maxX = maxX; const int _maxY = maxY; if (maxZ > 1) { +#pragma omp parallel + { this->threadId = omp_get_thread_num(); this->threadNum = omp_get_num_threads(); +#pragma omp for + for (int k=minZ; k < maxZ; k++) for (int j=1; j < _maxY; j++) for (int i=1; i < _maxX; i++) op(i,j,k,div,grid); } } else { const int k=0; +#pragma omp parallel + { this->threadId = omp_get_thread_num(); this->threadNum = omp_get_num_threads(); +#pragma omp for + for (int j=1; j < _maxY; j++) for (int i=1; i < _maxX; i++) op(i,j,k,div,grid); } } } Grid<Real>& div; const MACGrid& grid; }; +#line 51 "commonkernels.h" + + + +//! Kernel: gradient operator for MAC grid + struct GradientOpMAC : public KernelBase { GradientOpMAC(MACGrid& gradient, const Grid<Real>& grid) : KernelBase(&gradient,1) ,gradient(gradient),grid(grid) { run(); } inline void op(int i, int j, int k, MACGrid& gradient, const Grid<Real>& grid ) { + Vec3 grad = (Vec3(grid(i,j,k)) - Vec3(grid(i-1,j,k), grid(i,j-1,k), 0. )); + if(grid.is3D()) grad[2] -= grid(i,j,k-1); + else grad[2] = 0.; + gradient(i,j,k) = grad; +} inline MACGrid& getArg0() { return gradient; } typedef MACGrid type0;inline const Grid<Real>& getArg1() { return grid; } typedef Grid<Real> type1; void run() { const int _maxX = maxX; const int _maxY = maxY; if (maxZ > 1) { +#pragma omp parallel + { this->threadId = omp_get_thread_num(); this->threadNum = omp_get_num_threads(); +#pragma omp for + for (int k=minZ; k < maxZ; k++) for (int j=1; j < _maxY; j++) for (int i=1; i < _maxX; i++) op(i,j,k,gradient,grid); } } else { const int k=0; +#pragma omp parallel + { this->threadId = omp_get_thread_num(); this->threadNum = omp_get_num_threads(); +#pragma omp for + for (int j=1; j < _maxY; j++) for (int i=1; i < _maxX; i++) op(i,j,k,gradient,grid); } } } MACGrid& gradient; const Grid<Real>& grid; }; +#line 59 "commonkernels.h" + + + +//! Kernel: centered gradient operator + struct GradientOp : public KernelBase { GradientOp(Grid<Vec3>& gradient, const Grid<Real>& grid) : KernelBase(&gradient,1) ,gradient(gradient),grid(grid) { run(); } inline void op(int i, int j, int k, Grid<Vec3>& gradient, const Grid<Real>& grid ) { + Vec3 grad = 0.5 * Vec3( grid(i+1,j,k)-grid(i-1,j,k), + grid(i,j+1,k)-grid(i,j-1,k), 0.); + if(grid.is3D()) grad[2]= 0.5*( grid(i,j,k+1)-grid(i,j,k-1) ); + gradient(i,j,k) = grad; +} inline Grid<Vec3>& getArg0() { return gradient; } typedef Grid<Vec3> type0;inline const Grid<Real>& getArg1() { return grid; } typedef Grid<Real> type1; void run() { const int _maxX = maxX; const int _maxY = maxY; if (maxZ > 1) { +#pragma omp parallel + { this->threadId = omp_get_thread_num(); this->threadNum = omp_get_num_threads(); +#pragma omp for + for (int k=minZ; k < maxZ; k++) for (int j=1; j < _maxY; j++) for (int i=1; i < _maxX; i++) op(i,j,k,gradient,grid); } } else { const int k=0; +#pragma omp parallel + { this->threadId = omp_get_thread_num(); this->threadNum = omp_get_num_threads(); +#pragma omp for + for (int j=1; j < _maxY; j++) for (int i=1; i < _maxX; i++) op(i,j,k,gradient,grid); } } } Grid<Vec3>& gradient; const Grid<Real>& grid; }; +#line 67 "commonkernels.h" + + + +//! Kernel: Laplace operator + struct LaplaceOp : public KernelBase { LaplaceOp(Grid<Real>& laplace, const Grid<Real>& grid) : KernelBase(&laplace,1) ,laplace(laplace),grid(grid) { run(); } inline void op(int i, int j, int k, Grid<Real>& laplace, const Grid<Real>& grid ) { + laplace(i,j,k) = -(6.0*grid(i,j,k)-grid(i+1,j,k)-grid(i-1,j,k)-grid(i,j+1,k)-grid(i,j-1,k)-grid(i,j,k+1)-grid(i,j,k-1)); +} inline Grid<Real>& getArg0() { return laplace; } typedef Grid<Real> type0;inline const Grid<Real>& getArg1() { return grid; } typedef Grid<Real> type1; void run() { const int _maxX = maxX; const int _maxY = maxY; if (maxZ > 1) { +#pragma omp parallel + { this->threadId = omp_get_thread_num(); this->threadNum = omp_get_num_threads(); +#pragma omp for + for (int k=minZ; k < maxZ; k++) for (int j=1; j < _maxY; j++) for (int i=1; i < _maxX; i++) op(i,j,k,laplace,grid); } } else { const int k=0; +#pragma omp parallel + { this->threadId = omp_get_thread_num(); this->threadNum = omp_get_num_threads(); +#pragma omp for + for (int j=1; j < _maxY; j++) for (int i=1; i < _maxX; i++) op(i,j,k,laplace,grid); } } } Grid<Real>& laplace; const Grid<Real>& grid; }; +#line 75 "commonkernels.h" + + + +//! Kernel: get component at MAC positions + struct GetShiftedComponent : public KernelBase { GetShiftedComponent(const Grid<Vec3>& grid, Grid<Real>& comp, int dim) : KernelBase(&grid,1) ,grid(grid),comp(comp),dim(dim) { run(); } inline void op(int i, int j, int k, const Grid<Vec3>& grid, Grid<Real>& comp, int dim ) { + Vec3i ishift(i,j,k); + ishift[dim]--; + comp(i,j,k) = 0.5*(grid(i,j,k)[dim] + grid(ishift)[dim]); +} inline const Grid<Vec3>& getArg0() { return grid; } typedef Grid<Vec3> type0;inline Grid<Real>& getArg1() { return comp; } typedef Grid<Real> type1;inline int& getArg2() { return dim; } typedef int type2; void run() { const int _maxX = maxX; const int _maxY = maxY; if (maxZ > 1) { +#pragma omp parallel + { this->threadId = omp_get_thread_num(); this->threadNum = omp_get_num_threads(); +#pragma omp for + for (int k=minZ; k < maxZ; k++) for (int j=1; j < _maxY; j++) for (int i=1; i < _maxX; i++) op(i,j,k,grid,comp,dim); } } else { const int k=0; +#pragma omp parallel + { this->threadId = omp_get_thread_num(); this->threadNum = omp_get_num_threads(); +#pragm @@ Diff output truncated at 10240 characters. @@ _______________________________________________ Bf-blender-cvs mailing list [email protected] http://lists.blender.org/mailman/listinfo/bf-blender-cvs
