WallLocalSpringSliderDashpot.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::WallLocalSpringSliderDashpot
29
30Description
31 Forces between particles and walls, interacting with a spring,
32 slider, damper model
33
34 Reference:
35 \verbatim
36 "Lagrangian numerical simulation of plug flow of cohesionless
37 particles in a horizontal pipe"
38 Tsuji, Y., Tanaka, T., Ishida, T.,
39 Powder Technology
40 Volume 73, Issue 3, September 1992, pp. 239-250
41 \endverbatim
42
43\*---------------------------------------------------------------------------*/
44
45#ifndef WallLocalSpringSliderDashpot_H
46#define WallLocalSpringSliderDashpot_H
47
48#include "WallModel.H"
49
50// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
51
52namespace Foam
53{
54/*---------------------------------------------------------------------------*\
55 Class WallLocalSpringSliderDashpot Declaration
56\*---------------------------------------------------------------------------*/
57
58template<class CloudType>
60:
61 public WallModel<CloudType>
62{
63 // Private data
64
65 //- Effective Young's modulus value
66 scalarList Estar_;
67
68 //- Effective shear modulus value
69 scalarList Gstar_;
70
71 //- alpha-coefficient, related to coefficient of restitution
72 scalarList alpha_;
73
74 //- Spring power (b = 1 for linear, b = 3/2 for Hertzian)
75 scalarList b_;
76
77 //- Coefficient of friction in for tangential sliding
78 scalarList mu_;
79
80 //- Cohesion energy density [J/m^3]
81 scalarList cohesionEnergyDensity_;
82
83 //- Switch cohesion on and off
84 boolList cohesion_;
85
86 //- Mapping the patch index to the model data
87 labelList patchMap_;
88
89 //- Index of the maximum value of Estar_
90 label maxEstarIndex_;
91
92 //- The number of steps over which to resolve the minimum
93 // harmonic approximation of the collision period
94 scalar collisionResolutionSteps_;
95
96 //- Volume factor for determining the equivalent size of a
97 // parcel where nParticles is not 1. The equivalent size of
98 // the parcel is
99 // parcelEquivVolume = volumeFactor*nParticles*p.volume()
100 // so
101 // parcelEquivD = cbrt(volumeFactor*nParticles)*p.d()
102 // + When volumeFactor = 1, the particles are compressed
103 // together so that the equivalent volume of the parcel is
104 // the sum of the constituent particles
105 // + When volumeFactor = 3*sqrt(2)/pi, the particles are
106 // close packed, but uncompressed.
107 // + When volumeFactor > 3*sqrt(2)/pi, the particles loosely
108 // grouped.
109 // 3*sqrt(2)/pi = 1.350474 is the volume factor for close
110 // packing, i.e pi/(3*sqrt(2)) is the maximum close packing
111 // factor
112 scalar volumeFactor_;
113
114 //- Switch to control use of equivalent size particles. Used
115 // because the calculation can be very expensive.
116 bool useEquivalentSize_;
117
118
119 // Private Member Functions
120
121 //- Find the appropriate properties for determining the minimum
122 // allowable timestep
123 void findMinMaxProperties
124 (
125 scalar& rMin,
126 scalar& rhoMax,
127 scalar& vMagMax
128 ) const;
129
130 //- Calculate the wall interaction for a parcel at a given site
131 void evaluateWall
132 (
133 typename CloudType::parcelType& p,
134 const point& site,
136 scalar pREff,
137 bool cohesion
138 ) const;
139
140
141public:
142
143 //- Runtime type information
144 TypeName("wallLocalSpringSliderDashpot");
145
146
147 // Constructors
148
149 //- Construct from dictionary
151
152
153 //- Destructor
154 virtual ~WallLocalSpringSliderDashpot() = default;
155
156
157 // Member Functions
158
159 //- Return the volumeFactor
160 inline scalar volumeFactor() const
161 {
162 return volumeFactor_;
163 }
164
165 //- Return the effective radius for a particle for the model
166 virtual scalar pREff(const typename CloudType::parcelType& p) const;
167
168 //- Whether the WallModel has a timestep limit that will
169 // require subCycling
170 virtual bool controlsTimestep() const;
171
172 //- For WallModels 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 wall interaction for a parcel
178 virtual void evaluateWall
179 (
180 typename CloudType::parcelType& p,
181 const List<point>& flatSitePoints,
182 const List<WallSiteData<vector>>& flatSiteData,
183 const List<point>& sharpSitePoints,
184 const List<WallSiteData<vector>>& sharpSiteData
185 ) const;
186};
187
188
189// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
190
191} // End namespace Foam
192
193// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
194
195#ifdef NoRepository
197#endif
198
199// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
200
201#endif
202
203// ************************************************************************* //
Templated base class for dsmc cloud.
Definition: DSMCCloud.H:75
ParcelType parcelType
Type of parcel the cloud was instantiated for.
Definition: DSMCCloud.H:220
Forces between particles and walls, interacting with a spring, slider, damper model.
virtual label nSubCycles() const
For WallModels that control the timestep, calculate the.
TypeName("wallLocalSpringSliderDashpot")
Runtime type information.
virtual ~WallLocalSpringSliderDashpot()=default
Destructor.
virtual scalar pREff(const typename CloudType::parcelType &p) const
Return the effective radius for a particle for the model.
virtual bool controlsTimestep() const
Whether the WallModel has a timestep limit that will.
scalar volumeFactor() const
Return the volumeFactor.
Templated wall interaction class.
Definition: WallModel.H:56
const dictionary & dict() const
Return the dictionary.
Definition: WallModel.C:72
Stores the patch ID and templated data to represent a collision with a wall to be passed to the wall ...
Definition: WallSiteData.H:67
A cloud is a registry collection of lagrangian particles.
Definition: cloud.H:60
Database for solution data, solver performance and other reduced data.
Definition: data.H:58
A list of keyword definitions, which are a keyword followed by a number of values (eg,...
Definition: dictionary.H:126
volScalarField & p
const dimensionedScalar rhoMax
Namespace for OpenFOAM.
#define TypeName(TypeNameString)
Declare a ClassName() with extra virtual type info.
Definition: typeInfo.H:73