Welcome to mirror list, hosted at ThFree Co, Russian Federation.

git.blender.org/blender.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
Diffstat (limited to 'extern/mantaflow/preprocessed/vortexpart.cpp')
-rw-r--r--extern/mantaflow/preprocessed/vortexpart.cpp121
1 files changed, 34 insertions, 87 deletions
diff --git a/extern/mantaflow/preprocessed/vortexpart.cpp b/extern/mantaflow/preprocessed/vortexpart.cpp
index 0eba2743ee8..db22ff85208 100644
--- a/extern/mantaflow/preprocessed/vortexpart.cpp
+++ b/extern/mantaflow/preprocessed/vortexpart.cpp
@@ -60,56 +60,24 @@ inline Vec3 VortexKernel(const Vec3 &p, const vector<VortexParticleData> &vp, Re
return u;
}
-struct _KnVpAdvectMesh : public KernelBase {
- _KnVpAdvectMesh(const KernelBase &base,
- vector<Node> &nodes,
- const vector<VortexParticleData> &vp,
- Real scale,
- vector<Vec3> &u)
- : KernelBase(base), nodes(nodes), vp(vp), scale(scale), u(u)
+struct KnVpAdvectMesh : public KernelBase {
+ KnVpAdvectMesh(vector<Node> &nodes, const vector<VortexParticleData> &vp, Real scale)
+ : KernelBase(nodes.size()), nodes(nodes), vp(vp), scale(scale), u((size))
{
+ runMessage();
+ run();
}
inline void op(IndexInt idx,
vector<Node> &nodes,
const vector<VortexParticleData> &vp,
Real scale,
- vector<Vec3> &u) const
+ vector<Vec3> &u)
{
if (nodes[idx].flags & Mesh::NfFixed)
u[idx] = 0.0;
else
u[idx] = VortexKernel(nodes[idx].pos, vp, scale);
}
- void operator()(const tbb::blocked_range<IndexInt> &__r) const
- {
- for (IndexInt idx = __r.begin(); idx != (IndexInt)__r.end(); idx++)
- op(idx, nodes, vp, scale, u);
- }
- void run()
- {
- tbb::parallel_for(tbb::blocked_range<IndexInt>(0, size), *this);
- }
- vector<Node> &nodes;
- const vector<VortexParticleData> &vp;
- Real scale;
- vector<Vec3> &u;
-};
-struct KnVpAdvectMesh : public KernelBase {
- KnVpAdvectMesh(vector<Node> &nodes, const vector<VortexParticleData> &vp, Real scale)
- : KernelBase(nodes.size()),
- _inner(KernelBase(nodes.size()), nodes, vp, scale, u),
- nodes(nodes),
- vp(vp),
- scale(scale),
- u((size))
- {
- runMessage();
- run();
- }
- void run()
- {
- _inner.run();
- }
inline operator vector<Vec3>()
{
return u;
@@ -133,62 +101,37 @@ struct KnVpAdvectMesh : public KernelBase {
return scale;
}
typedef Real type2;
- void runMessage()
+ void runMessage(){};
+ void run()
{
- debMsg("Executing kernel KnVpAdvectMesh ", 3);
- debMsg("Kernel range"
- << " size " << size << " ",
- 4);
- };
- _KnVpAdvectMesh _inner;
+ const IndexInt _sz = size;
+#pragma omp parallel
+ {
+
+#pragma omp for
+ for (IndexInt i = 0; i < _sz; i++)
+ op(i, nodes, vp, scale, u);
+ }
+ }
vector<Node> &nodes;
const vector<VortexParticleData> &vp;
Real scale;
vector<Vec3> u;
};
-struct _KnVpAdvectSelf : public KernelBase {
- _KnVpAdvectSelf(const KernelBase &base,
- vector<VortexParticleData> &vp,
- Real scale,
- vector<Vec3> &u)
- : KernelBase(base), vp(vp), scale(scale), u(u)
- {
- }
- inline void op(IndexInt idx, vector<VortexParticleData> &vp, Real scale, vector<Vec3> &u) const
- {
- if (vp[idx].flag & ParticleBase::PDELETE)
- u[idx] = 0.0;
- else
- u[idx] = VortexKernel(vp[idx].pos, vp, scale);
- }
- void operator()(const tbb::blocked_range<IndexInt> &__r) const
- {
- for (IndexInt idx = __r.begin(); idx != (IndexInt)__r.end(); idx++)
- op(idx, vp, scale, u);
- }
- void run()
- {
- tbb::parallel_for(tbb::blocked_range<IndexInt>(0, size), *this);
- }
- vector<VortexParticleData> &vp;
- Real scale;
- vector<Vec3> &u;
-};
struct KnVpAdvectSelf : public KernelBase {
KnVpAdvectSelf(vector<VortexParticleData> &vp, Real scale)
- : KernelBase(vp.size()),
- _inner(KernelBase(vp.size()), vp, scale, u),
- vp(vp),
- scale(scale),
- u((size))
+ : KernelBase(vp.size()), vp(vp), scale(scale), u((size))
{
runMessage();
run();
}
- void run()
+ inline void op(IndexInt idx, vector<VortexParticleData> &vp, Real scale, vector<Vec3> &u)
{
- _inner.run();
+ if (vp[idx].flag & ParticleBase::PDELETE)
+ u[idx] = 0.0;
+ else
+ u[idx] = VortexKernel(vp[idx].pos, vp, scale);
}
inline operator vector<Vec3>()
{
@@ -208,14 +151,18 @@ struct KnVpAdvectSelf : public KernelBase {
return scale;
}
typedef Real type1;
- void runMessage()
+ void runMessage(){};
+ void run()
{
- debMsg("Executing kernel KnVpAdvectSelf ", 3);
- debMsg("Kernel range"
- << " size " << size << " ",
- 4);
- };
- _KnVpAdvectSelf _inner;
+ const IndexInt _sz = size;
+#pragma omp parallel
+ {
+
+#pragma omp for
+ for (IndexInt i = 0; i < _sz; i++)
+ op(i, vp, scale, u);
+ }
+ }
vector<VortexParticleData> &vp;
Real scale;
vector<Vec3> u;