diff --git a/src/functionObjects/field/extractEulerianParticles/extractEulerianParticles/extractEulerianParticles.C b/src/functionObjects/field/extractEulerianParticles/extractEulerianParticles/extractEulerianParticles.C index f71fcbeef4..ad40fcf5f7 100644 --- a/src/functionObjects/field/extractEulerianParticles/extractEulerianParticles/extractEulerianParticles.C +++ b/src/functionObjects/field/extractEulerianParticles/extractEulerianParticles/extractEulerianParticles.C @@ -314,7 +314,8 @@ void Foam::functionObjects::extractEulerianParticles::collectParticles tag, time, d, - U + U, + false // not looking to set cell owner etc. ); cloud_.addParticle(ip); diff --git a/src/lagrangian/basic/Cloud/Cloud.C b/src/lagrangian/basic/Cloud/Cloud.C index 5f07b4d1f2..d5da7fe151 100644 --- a/src/lagrangian/basic/Cloud/Cloud.C +++ b/src/lagrangian/basic/Cloud/Cloud.C @@ -76,10 +76,10 @@ Foam::Cloud::Cloud : cloud(pMesh, cloudName), IDLList(), - geometryType_(IOPosition>::geometryType::COORDINATES), polyMesh_(pMesh), labels_(), - globalPositionsPtr_() + globalPositionsPtr_(), + geometryType_(IOPosition>::geometryType::COORDINATES) { checkPatches(); diff --git a/src/lagrangian/basic/Cloud/Cloud.H b/src/lagrangian/basic/Cloud/Cloud.H index a49247d0d6..33d554c977 100644 --- a/src/lagrangian/basic/Cloud/Cloud.H +++ b/src/lagrangian/basic/Cloud/Cloud.H @@ -3,7 +3,7 @@ \\ / F ield | OpenFOAM: The Open Source CFD Toolbox \\ / O peration | \\ / A nd | Copyright (C) 2011-2017 OpenFOAM Foundation - \\/ M anipulation | + \\/ M anipulation | Copyright (C) 2017 OpenCFD Ltd. ------------------------------------------------------------------------------- License This file is part of OpenFOAM. @@ -75,9 +75,6 @@ class Cloud { // Private data - //- Geometry type - typename IOPosition>::geometryType geometryType_; - //- Reference to the mesh database const polyMesh& polyMesh_; @@ -109,6 +106,12 @@ class Cloud void writeCloudUniformProperties() const; +protected: + + //- Geometry type + typename IOPosition>::geometryType geometryType_; + + public: friend class particle; diff --git a/src/lagrangian/basic/Cloud/CloudIO.C b/src/lagrangian/basic/Cloud/CloudIO.C index 8678c5bde6..d5fe11ace8 100644 --- a/src/lagrangian/basic/Cloud/CloudIO.C +++ b/src/lagrangian/basic/Cloud/CloudIO.C @@ -3,7 +3,7 @@ \\ / F ield | OpenFOAM: The Open Source CFD Toolbox \\ / O peration | \\ / A nd | Copyright (C) 2011-2017 OpenFOAM Foundation - \\/ M anipulation | + \\/ M anipulation | Copyright (C) 2017 OpenCFD Ltd. ------------------------------------------------------------------------------- License This file is part of OpenFOAM. @@ -167,10 +167,10 @@ Foam::Cloud::Cloud ) : cloud(pMesh, cloudName), - geometryType_(IOPosition>::geometryType::COORDINATES), polyMesh_(pMesh), labels_(), - cellWallFacesPtr_() + cellWallFacesPtr_(), + geometryType_(IOPosition>::geometryType::COORDINATES) { checkPatches(); diff --git a/src/lagrangian/basic/injectedParticle/injectedParticle.C b/src/lagrangian/basic/injectedParticle/injectedParticle.C index 4a0866e940..8625a420a8 100644 --- a/src/lagrangian/basic/injectedParticle/injectedParticle.C +++ b/src/lagrangian/basic/injectedParticle/injectedParticle.C @@ -38,6 +38,7 @@ namespace Foam Foam::injectedParticle::injectedParticle(const injectedParticle& p) : particle(p), + position_(p.position_), tag_(p.tag_), soi_(p.soi_), d_(p.d_), @@ -52,6 +53,7 @@ Foam::injectedParticle::injectedParticle ) : particle(p, mesh), + position_(p.position_), tag_(p.tag_), soi_(p.soi_), d_(p.d_), diff --git a/src/lagrangian/basic/injectedParticle/injectedParticle.H b/src/lagrangian/basic/injectedParticle/injectedParticle.H index 1d8bfbf3fb..5c196c1b3a 100644 --- a/src/lagrangian/basic/injectedParticle/injectedParticle.H +++ b/src/lagrangian/basic/injectedParticle/injectedParticle.H @@ -2,7 +2,7 @@ ========= | \\ / F ield | OpenFOAM: The Open Source CFD Toolbox \\ / O peration | - \\ / A nd | Copyright (C) 2016 OpenCFD Ltd. + \\ / A nd | Copyright (C) 2016-2017 OpenCFD Ltd. \\/ M anipulation | ------------------------------------------------------------------------------- License @@ -25,11 +25,18 @@ Class Foam::injectedParticle Description + Primarly stores particle properties so that it can be injected at a later + time. Note that this stores its own local position as opposed to the + base particle class barycentric coordinates since the particle is not + (usually) attached to a mesh, and instead used for post-processing. SourceFiles injectedParticle.C injectedParticleIO.C +SeeAlso + Foam::functionObjects::extractEulerianParticles + \*---------------------------------------------------------------------------*/ #ifndef injectedParticle_H @@ -74,6 +81,9 @@ protected: // Particle properties + //- Position + point position_; + //- Tag label tag_; @@ -125,7 +135,8 @@ public: const label tag, const scalar soi, const scalar d, - const vector& U + const vector& U, + const bool doLocate = true ); //- Construct from Istream @@ -225,6 +236,11 @@ public: objectRegistry& obr ); + //- Write the particle position and cell + // Note: This uses the local particle position, and bypasses the + // barycentric description + virtual void writePosition(Ostream&) const; + // Ostream Operator diff --git a/src/lagrangian/basic/injectedParticle/injectedParticleCloud.C b/src/lagrangian/basic/injectedParticle/injectedParticleCloud.C index 329aff039e..91a4e49884 100644 --- a/src/lagrangian/basic/injectedParticle/injectedParticleCloud.C +++ b/src/lagrangian/basic/injectedParticle/injectedParticleCloud.C @@ -2,7 +2,7 @@ ========= | \\ / F ield | OpenFOAM: The Open Source CFD Toolbox \\ / O peration | - \\ / A nd | Copyright (C) 2016 OpenCFD Ltd. + \\ / A nd | Copyright (C) 2016-2017 OpenCFD Ltd. \\/ M anipulation | ------------------------------------------------------------------------------- License @@ -41,6 +41,9 @@ Foam::injectedParticleCloud::injectedParticleCloud : Cloud(mesh, cloudName, false) { + geometryType_ = + IOPosition>::geometryType::POSITIONS; + if (readFields) { injectedParticle::readFields(*this); diff --git a/src/lagrangian/basic/injectedParticle/injectedParticleI.H b/src/lagrangian/basic/injectedParticle/injectedParticleI.H index 579edb16ef..2c4c05a413 100644 --- a/src/lagrangian/basic/injectedParticle/injectedParticleI.H +++ b/src/lagrangian/basic/injectedParticle/injectedParticleI.H @@ -2,7 +2,7 @@ ========= | \\ / F ield | OpenFOAM: The Open Source CFD Toolbox \\ / O peration | - \\ / A nd | Copyright (C) 2016 OpenCFD Ltd. + \\ / A nd | Copyright (C) 2016-2017 OpenCFD Ltd. \\/ M anipulation | ------------------------------------------------------------------------------- License @@ -33,10 +33,12 @@ inline Foam::injectedParticle::injectedParticle const label tag, const scalar soi, const scalar d, - const vector& U + const vector& U, + const bool doLocate ) : - particle(mesh, position, -1), + particle(mesh, position, -1, -1, -1, doLocate), + position_(position), tag_(tag), soi_(soi), d_(d), diff --git a/src/lagrangian/basic/injectedParticle/injectedParticleIO.C b/src/lagrangian/basic/injectedParticle/injectedParticleIO.C index 711f393cd0..72d6e87bcb 100644 --- a/src/lagrangian/basic/injectedParticle/injectedParticleIO.C +++ b/src/lagrangian/basic/injectedParticle/injectedParticleIO.C @@ -2,7 +2,7 @@ ========= | \\ / F ield | OpenFOAM: The Open Source CFD Toolbox \\ / O peration | - \\ / A nd | Copyright (C) 2016 OpenCFD Ltd. + \\ / A nd | Copyright (C) 2016-2017 OpenCFD Ltd. \\/ M anipulation | ------------------------------------------------------------------------------- License @@ -38,6 +38,7 @@ Foam::string Foam::injectedParticle::propertyTypes_ = const std::size_t Foam::injectedParticle::sizeofFields ( + // Note: does not include position_ sizeof(label) + sizeof(scalar) + sizeof(scalar) + sizeof(vector) ); @@ -52,7 +53,8 @@ Foam::injectedParticle::injectedParticle bool newFormat ) : - particle(mesh, is, readFields, newFormat), + particle(mesh, is, readFields, false), // force to read old positions file + position_(Zero), tag_(-1), soi_(0.0), d_(0.0), @@ -60,6 +62,11 @@ Foam::injectedParticle::injectedParticle { if (readFields) { + // After the base particle class has read the fields from file and + // constructed the necessary barcentric co-ordinates we can update the + // particle position on this mesh + position_ = particle::position(); + if (is.format() == IOstream::ASCII) { tag_ = readLabel(is); @@ -84,6 +91,8 @@ void Foam::injectedParticle::readFields(Cloud& c) return; } + // Note: not reading local position_ - defer to base particle class + particle::readFields(c); IOField