diff --git a/src/lagrangian/intermediate/submodels/CloudFunctionObjects/ParticleErosion/ParticleErosion.C b/src/lagrangian/intermediate/submodels/CloudFunctionObjects/ParticleErosion/ParticleErosion.C index 63389bad2a..6ea14deb31 100644 --- a/src/lagrangian/intermediate/submodels/CloudFunctionObjects/ParticleErosion/ParticleErosion.C +++ b/src/lagrangian/intermediate/submodels/CloudFunctionObjects/ParticleErosion/ParticleErosion.C @@ -166,43 +166,42 @@ void Foam::ParticleErosion::postPatch ) { const label patchi = pp.index(); - const label localPatchi = applyToPatch(patchi); if (localPatchi != -1) { - vector nw; - vector Up; - - // patch-normal direction + // Get patch data + vector nw, Up; this->owner().patchData(p, pp, nw, Up); - // particle velocity relative to patch + // Particle velocity relative to patch const vector& U = p.U() - Up; - // quick reject if particle travelling away from the patch + // Quick rejection if the particle is travelling away from the patch if ((nw & U) < 0) { return; } const scalar magU = mag(U); - const vector Udir = U/magU; + const vector UHat = U/magU; - // determine impact angle, alpha - const scalar alpha = mathematical::pi/2.0 - acos(nw & Udir); - - const scalar coeff = p.nParticle()*p.mass()*sqr(magU)/(p_*psi_*K_); + // Impact angle + const scalar alpha = mathematical::pi/2 - acos(nw & UHat); + // Get the face value to accumulate into const label patchFacei = pp.whichFace(p.face()); scalar& Q = QPtr_->boundaryFieldRef()[patchi][patchFacei]; - if (tan(alpha) < K_/6.0) + + // Finnie's model + const scalar coeff = p.nParticle()*p.mass()*sqr(magU)/(p_*psi_*K_); + if (tan(alpha) < K_/6) { - Q += coeff*(sin(2.0*alpha) - 6.0/K_*sqr(sin(alpha))); + Q += coeff*(sin(2*alpha) - 6/K_*sqr(sin(alpha))); } else { - Q += coeff*(K_*sqr(cos(alpha))/6.0); + Q += coeff*(K_*sqr(cos(alpha))/6); } } } diff --git a/src/lagrangian/intermediate/submodels/CloudFunctionObjects/ParticleErosion/ParticleErosion.H b/src/lagrangian/intermediate/submodels/CloudFunctionObjects/ParticleErosion/ParticleErosion.H index 46a12fd20c..5ae8002c92 100644 --- a/src/lagrangian/intermediate/submodels/CloudFunctionObjects/ParticleErosion/ParticleErosion.H +++ b/src/lagrangian/intermediate/submodels/CloudFunctionObjects/ParticleErosion/ParticleErosion.H @@ -25,7 +25,49 @@ Class Foam::ParticleErosion Description - Creates particle erosion field, Q + Function object to create a field of eroded volume, Q, on a specified list + of patches. The volume is calculated by the model of Finnie et al. The + implementation follows the description given by the review of Yadav et al. + + References: + \verbatim + I Finnie, A Levy, D H McFadden + "Fundamental Mechanisms of the Erosive Wear of Ductile Metals by Solid + Particles" + ASTM STP664, 1979, pages 36-58 + \endverbatim + + \verbatim + I Finnie and D H McFadden + "On the Velocity Dependence of the Erosion of Ductile Metal by Solid + Particle at Low Angles of Incidence" + Wear, 1978, volume 48, pages 181-190 + \endverbatim + + \verbatim + G Yadav, S Tiwari, A Rajput, R Jatola, M L Jain + "A Review: Erosion Wear Models" + Emerging Trends in Mechanical Engineering, 2016, volume 1, pages 150-154 + \endverbatim + +Usage + \table + Property | Description | Req'd? | Default + patches | The patches on which to calculate Q | yes | + p | Plastic flow stress | yes | + psi | Ratio between depth of contact and length of cut | no | 2 + K | Ratio of normal and tangential force | no | 2 + \endtable + + Example: + \verbatim + + { + type particleErosion; + patches (wall1 wall2); + p 2.7e9; + } + \endverbatim SourceFiles ParticleErosion.C @@ -60,19 +102,19 @@ class ParticleErosion typedef typename CloudType::parcelType parcelType; - //- Particle erosion field + //- Particle eroded volume field autoPtr QPtr_; //- List of patch indices to post-process labelList patchIDs_; - //- Plastic flow stress - typical metal value = 2.7 GPa + //- Plastic flow stress scalar p_; - //- Ratio between depth of contact and length of cut - default=2 + //- Ratio between depth of contact and length of cut. Default 2. scalar psi_; - //- Ratio of normal and tangential forces - default=2 + //- Ratio of normal and tangential forces. Default 2. scalar K_;