Loading...
Searching...
No Matches
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-------------------------------------------------------------------------------
11License
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
27Class
28 Foam::PairSpringSliderDashpot
29
30Description
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"
50
51// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
52
53namespace Foam
54{
55/*---------------------------------------------------------------------------*\
56 Class PairSpringSliderDashpot Declaration
57\*---------------------------------------------------------------------------*/
58
59template<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
127public:
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 }
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
186// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
187
188} // End namespace Foam
189
190// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
191
192#ifdef NoRepository
194#endif
195
196// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
197
198#endif
199
200// ************************************************************************* //
const dictionary & dict() const
Return the dictionary.
Definition PairModel.C:75
PairModel(CloudType &owner)
Construct null from cloud owner.
Definition PairModel.C:28
virtual label nSubCycles() const
For PairModels that control the timestep, calculate the.
virtual ~PairSpringSliderDashpot()=default
Destructor.
TypeName("pairSpringSliderDashpot")
Runtime type information.
scalar overlapArea(scalar rA, scalar rB, scalar rAB) const
Return the area of overlap between two spheres of radii rA and rB,.
PairSpringSliderDashpot(const dictionary &dict, CloudType &cloud)
Construct from dictionary.
virtual void evaluatePair(typename CloudType::parcelType &pA, typename CloudType::parcelType &pB) const
Calculate the pair interaction between parcels.
virtual bool controlsTimestep() const
Whether the PairModel has a timestep limit that will.
scalar volumeFactor() const
Return the volumeFactor.
A cloud is a registry collection of lagrangian particles.
Definition cloud.H:56
A list of keyword definitions, which are a keyword followed by a number of values (eg,...
Definition dictionary.H:133
const dimensionedScalar rhoMax
Namespace for OpenFOAM.
DSMCCloud< dsmcParcel > CloudType
dimensionedSymmTensor sqr(const dimensionedVector &dv)
#define TypeName(TypeNameString)
Declare a ClassName() with extra virtual type info.
Definition typeInfo.H:68