PairSpringSliderDashpot.H
Go to the documentation of this file.
1 /*---------------------------------------------------------------------------*\
2  ========= |
3  \\ / F ield | OpenFOAM: The Open Source CFD Toolbox
4  \\ / O peration |
5  \\ / A nd | www.openfoam.com
6  \\/ M anipulation |
7 -------------------------------------------------------------------------------
8  Copyright (C) 2011-2016 OpenFOAM Foundation
9  Copyright (C) 2019 OpenCFD Ltd.
10 -------------------------------------------------------------------------------
11 License
12  This file is part of OpenFOAM.
13 
14  OpenFOAM is free software: you can redistribute it and/or modify it
15  under the terms of the GNU General Public License as published by
16  the Free Software Foundation, either version 3 of the License, or
17  (at your option) any later version.
18 
19  OpenFOAM is distributed in the hope that it will be useful, but WITHOUT
20  ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
21  FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
22  for more details.
23 
24  You should have received a copy of the GNU General Public License
25  along with OpenFOAM. If not, see <http://www.gnu.org/licenses/>.
26 
27 Class
28  Foam::PairSpringSliderDashpot
29 
30 Description
31  Pair forces between particles colliding with a spring, slider, damper model
32 
33  Reference:
34  \verbatim
35  "Lagrangian numerical simulation of plug flow of cohesionless
36  particles in a horizontal pipe"
37  Tsuji, Y., Tanaka, T., Ishida, T.,
38  Powder Technology
39  Volume 73, Issue 3, September 1992, pp. 239-250
40  \endverbatim
41 
42 \*---------------------------------------------------------------------------*/
43 
44 #ifndef PairSpringSliderDashpot_H
45 #define PairSpringSliderDashpot_H
46 
47 #include "PairModel.H"
48 #include "CollisionRecordList.H"
49 #include "mathematicalConstants.H"
50 
51 // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
52 
53 namespace Foam
54 {
55 /*---------------------------------------------------------------------------*\
56  Class PairSpringSliderDashpot Declaration
57 \*---------------------------------------------------------------------------*/
58 
59 template<class CloudType>
61 :
62  public PairModel<CloudType>
63 {
64  // Private data
65 
66  //- Effective Young's modulus value, assuming both particles have
67  // the same E value
68  scalar Estar_;
69 
70  //- Effective shear modulus value, assuming both particles have
71  // the same Poisson's ratio and Young's modulus
72  scalar Gstar_;
73 
74  //- alpha-coefficient, related to coefficient of restitution
75  scalar alpha_;
76 
77  //- Spring power (b = 1 for linear, b = 3/2 for Hertzian)
78  scalar b_;
79 
80  //- Coefficient of friction in for tangential sliding
81  scalar mu_;
82 
83  //- Cohesion energy density [J/m^3]
84  scalar cohesionEnergyDensity_;
85 
86  //- Switch cohesion on and off
87  bool cohesion_;
88 
89  //- The number of steps over which to resolve the minimum
90  // harmonic approximation of the collision period
91  scalar collisionResolutionSteps_;
92 
93  //- Volume factor for determining the equivalent size of a
94  // parcel where nParticles is not 1. The equivalent size of
95  // the parcel is
96  // parcelEquivVolume = volumeFactor*nParticles*p.volume()
97  // so
98  // parcelEquivD = cbrt(volumeFactor*nParticles)*p.d()
99  // + When volumeFactor = 1, the particles are compressed
100  // together so that the equivalent volume of the parcel is
101  // the sum of the constituent particles
102  // + When volumeFactor = 3*sqrt(2)/pi, the particles are
103  // close packed, but uncompressed.
104  // + When volumeFactor > 3*sqrt(2)/pi, the particles loosely
105  // grouped.
106  // 3*sqrt(2)/pi = 1.350474 is the volume factor for close
107  // packing, i.e pi/(3*sqrt(2)) is the maximum close packing
108  // factor
109  scalar volumeFactor_;
110 
111  //- Switch to control use of equivalent size particles. Used
112  // because the calculation can be very expensive.
113  bool useEquivalentSize_;
114 
115 
116  // Private Member Functions
117 
118  //- Find the appropriate properties for determining the minimum
119  // allowable timestep
120  void findMinMaxProperties
121  (
122  scalar& RMin,
123  scalar& rhoMax,
124  scalar& vMagMax
125  ) const;
126 
127 public:
128 
129  //- Runtime type information
130  TypeName("pairSpringSliderDashpot");
131 
132 
133  // Constructors
134 
135  //- Construct from dictionary
137 
138 
139  //- Destructor
140  virtual ~PairSpringSliderDashpot() = default;
141 
142 
143  // Member Functions
144 
145  //- Return the volumeFactor
146  inline scalar volumeFactor() const
147  {
148  return volumeFactor_;
149  }
150 
151  //- Return the area of overlap between two spheres of radii rA and rB,
152  // centres separated by a distance rAB. Assumes rAB < (rA + rB).
153  inline scalar overlapArea(scalar rA, scalar rB, scalar rAB) const
154  {
155  // Reference:
156  // http://mathworld.wolfram.com/Sphere-SphereIntersection.html
157  return
158  mathematical::pi/4.0
159  /sqr(rAB)
160  *(
161  (-rAB + rA - rB)
162  *(-rAB - rA + rB)
163  *(-rAB + rA + rB)
164  *( rAB + rA + rB)
165  );
166  }
167 
168  //- Whether the PairModel has a timestep limit that will
169  // require subCycling
170  virtual bool controlsTimestep() const;
171 
172  //- For PairModels that control the timestep, calculate the
173  // number of subCycles needed to satisfy the minimum
174  // allowable timestep
175  virtual label nSubCycles() const;
176 
177  //- Calculate the pair interaction between parcels
178  virtual void evaluatePair
179  (
180  typename CloudType::parcelType& pA,
181  typename CloudType::parcelType& pB
182  ) const;
183 };
184 
185 
186 // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
187 
188 } // End namespace Foam
189 
190 // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
191 
192 #ifdef NoRepository
193  #include "PairSpringSliderDashpot.C"
194 #endif
195 
196 // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
197 
198 #endif
199 
200 // ************************************************************************* //
Foam::PairSpringSliderDashpot::nSubCycles
virtual label nSubCycles() const
For PairModels that control the timestep, calculate the.
Definition: PairSpringSliderDashpot.C:137
mathematicalConstants.H
Foam::PairSpringSliderDashpot::~PairSpringSliderDashpot
virtual ~PairSpringSliderDashpot()=default
Destructor.
Foam::PairModel::dict
const dictionary & dict() const
Return the dictionary.
Definition: PairModel.C:69
PairSpringSliderDashpot.C
Foam::DSMCCloud
Templated base class for dsmc cloud.
Definition: DSMCCloud.H:71
Foam::PairSpringSliderDashpot::PairSpringSliderDashpot
PairSpringSliderDashpot(const dictionary &dict, CloudType &cloud)
Construct from dictionary.
Definition: PairSpringSliderDashpot.C:85
Foam::dictionary
A list of keyword definitions, which are a keyword followed by a number of values (eg,...
Definition: dictionary.H:123
Foam
Namespace for OpenFOAM.
Definition: atmBoundaryLayer.C:33
CollisionRecordList.H
Foam::cloud
A cloud is a registry collection of lagrangian particles.
Definition: cloud.H:57
Foam::sqr
dimensionedSymmTensor sqr(const dimensionedVector &dv)
Definition: dimensionedSymmTensor.C:51
Foam::constant::mathematical::pi
constexpr scalar pi(M_PI)
rhoMax
const dimensionedScalar rhoMax
Definition: setRegionFluidFields.H:66
Foam::PairSpringSliderDashpot::overlapArea
scalar overlapArea(scalar rA, scalar rB, scalar rAB) const
Return the area of overlap between two spheres of radii rA and rB,.
Definition: PairSpringSliderDashpot.H:152
Foam::PairModel
Templated pair interaction class.
Definition: PairCollision.H:53
Foam::PairSpringSliderDashpot::controlsTimestep
virtual bool controlsTimestep() const
Whether the PairModel has a timestep limit that will.
Definition: PairSpringSliderDashpot.C:130
Foam::PairSpringSliderDashpot::TypeName
TypeName("pairSpringSliderDashpot")
Runtime type information.
Foam::PairSpringSliderDashpot::evaluatePair
virtual void evaluatePair(typename CloudType::parcelType &pA, typename CloudType::parcelType &pB) const
Calculate the pair interaction between parcels.
Definition: PairSpringSliderDashpot.C:163
Foam::DSMCCloud::parcelType
ParcelType parcelType
Type of parcel the cloud was instantiated for.
Definition: DSMCCloud.H:220
Foam::PairSpringSliderDashpot
Pair forces between particles colliding with a spring, slider, damper model.
Definition: PairSpringSliderDashpot.H:59
PairModel.H
Foam::PairSpringSliderDashpot::volumeFactor
scalar volumeFactor() const
Return the volumeFactor.
Definition: PairSpringSliderDashpot.H:145