25 setInflowParticleRadius(.5);
26 setFixedParticleRadius(.5);
32 setSlidingStiffness(2.0/7.0*getStiffness());
35 setSlidingDissipation(getDissipation());
36 setSlidingFrictionCoefficient(0.5);
39 setChuteAngle(24.0, 1.0);
49 Mdouble minCell = 2.*
min(getFixedParticleRadius(),getMinInflowParticleRadius());
50 Mdouble maxCell = 2.*
max(getFixedParticleRadius(),getMaxInflowParticleRadius());
51 if ((minCell==maxCell)|(minCell==0.)) set_HGRID_max_levels(1);
52 else set_HGRID_max_levels(2);
53 set_HGRID_cell_to_cell_ratio (1.0000001*maxCell/minCell);
57 if (speciesHandler.getNumberOfObjects()>1)
return speciesHandler.getMixedObject(1,0)->getSlidingFrictionCoefficient();
58 else return getSlidingFrictionCoefficient();
63 speciesHandler.getMixedObject(1, 0)->setSlidingFrictionCoefficient(new_);
68 static bool created=
false;
70 speciesHandler.copyAndAddObject(speciesHandler.getObject(0));
72 for (
unsigned int i=0;
i<particleHandler.getNumberOfObjects();
i++) {
73 if (particleHandler.getObject(
i)->isFixed()) particleHandler.getObject(
i)->setSpecies(speciesHandler.getObject(1));
80 name <<
"H" << getInflowHeight()
81 <<
"A" << getChuteAngleDegrees()
82 <<
"L" <<
round(100.*getFixedParticleRadius()*2.)/100.
83 <<
"M" << getSlidingFrictionCoefficient()
84 <<
"B" << getSlidingFrictionCoefficientBottom();
85 setName(
name.str().c_str());
101 Mdouble Lambdas[] = {0, 3./6., 4./6., 5./6., 1, 2};
102 setFixedParticleRadius(Lambdas[study_num]/2.);
103 setSlidingFrictionCoefficient(0.5);
104 }
else if (study_num < 9) {
106 Mdouble MuAll[] = {0, 1., 1e20};
107 setSlidingFrictionCoefficient(MuAll[study_num-6]);
108 setFixedParticleRadius(0.5);
109 }
else if (study_num < 12) {
111 Mdouble MuBottom[] = {0, 1., 1e20};
112 setSlidingFrictionCoefficient(0.5);
113 setSlidingFrictionCoefficientBottom(MuBottom[study_num-9]);
114 setFixedParticleRadius(0.5);
115 }
else if (study_num < 14) {
117 Mdouble MuBottom[] = {0.25, 0.125};
118 setSlidingFrictionCoefficient(0.5);
119 setSlidingFrictionCoefficientBottom(MuBottom[study_num-12]);
120 setFixedParticleRadius(0.5);
121 }
else if (study_num < 16) {
123 Mdouble MuAll[] = {0.25, 0.125};
124 setSlidingFrictionCoefficient(MuAll[study_num-14]);
125 setFixedParticleRadius(0.5);
126 }
else if (study_num < 21) {
128 Mdouble Lambdas[] = {1./6., 2./6., 1.5, 4, 1./12};
129 setFixedParticleRadius(Lambdas[study_num-16]/2.);
130 setSlidingFrictionCoefficient(0.5);
131 }
else if (study_num < 26) {
133 Mdouble MuBottom[] = {1./16.,1./32.,1./64.,1./128.,1./1024.};
134 setSlidingFrictionCoefficient(0.5);
135 setSlidingFrictionCoefficientBottom(MuBottom[study_num-21]);
136 setFixedParticleRadius(0.5);
137 }
else if (study_num < 29) {
139 Mdouble MuBottom[] = {1./16.,1./128.,1./1024.};
140 setSlidingFrictionCoefficient(0.5);
141 setSlidingFrictionCoefficientBottom(MuBottom[study_num-26]);
142 setFixedParticleRadius(0.25);
143 }
else if (study_num < 33) {
145 Mdouble MuBottom[] = {1./16.,1./128.,1./1024.,0};
146 setSlidingFrictionCoefficient(0.5);
147 setSlidingFrictionCoefficientBottom(MuBottom[study_num-29]);
148 setFixedParticleRadius(0);
149 }
else if (study_num < 37) {
150 cout <<
"S" << study_num << endl;
153 setSlidingFrictionCoefficient(
Mu[study_num-33]);
154 setSlidingFrictionCoefficientBottom(0.5);
155 setFixedParticleRadius(1);
158 cout <<
"Study is complete " << endl;
166 Mdouble Heights[] = {10, 20, 30, 40};
167 Mdouble Angles[] = {20, 22, 24, 26, 28, 30, 40, 50, 60};
168 setInflowHeight(Heights[study_num[1]-1]);
169 setChuteAngle(Angles[study_num[2]-1]);
170 set_study(study_num[0]);
180 particleHandler.set_StorageCapacity(particleHandler.getNumberOfObjects()+getChuteLength()*getChuteWidth()*getZMax());
186 for (
unsigned int i=0;
i<particleHandler.getNumberOfObjects();
i++)
187 if (particleHandler.getObject(
i)->isFixed())
188 particleHandler.getObject(
i)->setSpecies(speciesHandler.getObject(1));
192 if (getFixedParticleRadius()) {
193 wallHandler.getObject(0)->set(
Vec3D(0,0,-1), 3.4*MaxInflowParticleRadius);
195 wallHandler.getObject(0)->set(
Vec3D(0,0,-1), 0.);
198 set_NWallPeriodic(2);
199 WallsPeriodic[0].set(
Vec3D( 1.0, 0.0, 0.0), getXMin(), getXMax());
200 WallsPeriodic[1].set(
Vec3D( 0.0, 1.0, 0.0), getYMin(), getYMax());
202 add_flow_particles();
204 cout << endl <<
"Status before solve:" << endl;
206 <<
"tc=" << getCollisionTime()
207 <<
", eps=" << getRestitutionCoefficient()
209 <<
", InflowHeight/zmax=" << getInflowHeight()/getZMax()
214 cout <<
"Nmax" << particleHandler.getStorageCapacity() << endl;
215 set_HGRID_num_buckets_to_power(particleHandler.getNumberOfObjects()*1.5);
221 set_HGRID_num_buckets_to_power(particleHandler.getStorageCapacity());
222 hGridActionsBeforeTimeLoop();
223 hGridActionsBeforeTimeStep();
224 unsigned int N=particleHandler.getNumberOfObjects()+getChuteLength()*getChuteWidth()*InflowHeight;
225 particleHandler.set_StorageCapacity(
N);
227 setZMax(1.2*InflowHeight);
231 while (particleHandler.getNumberOfObjects()<
N){
232 create_inflow_particle();
233 if (IsInsertable(
P0)) {
235 }
else InflowHeight += .0001* MaxInflowParticleRadius;
238 set_HGRID_num_buckets_to_power();
239 write(std::cout,
false);
245 P0.setRadius(random.get_RN(MinInflowParticleRadius,MaxInflowParticleRadius));
248 P0.getPosition().X = random.get_RN(getXMin()+2.0*
P0.getRadius(),getXMax());
249 P0.getPosition().Y = random.get_RN(getYMin()+2.0*
P0.getRadius(),getYMax());
250 P0.getPosition().Z = random.get_RN(getZMin()+2.0*
P0.getRadius(),getInflowHeight());
251 P0.setVelocity(
Vec3D(0.0,0.0,0.0));
259 cout <<
"t=" << setprecision(3) << left << setw(6) << getTime()
260 <<
", tmax=" << setprecision(3) << left << setw(6) << getTimeMax()
261 <<
", N=" << setprecision(3) << left << setw(6) << particleHandler.getNumberOfObjects()
268 if (!strcmp(argv[
i],
"-muBottom")) {
269 setSlidingFrictionCoefficientBottom(atof(argv[
i+1]));
270 cout <<
"muB=" << getSlidingFrictionCoefficientBottom() << endl;
int i
Definition: BiCGSTAB_step_by_step.cpp:9
@ MULTILAYER
Definition: Chute.h:32
Array< double, 1, 3 > e(1./3., 0.5, 2.)
MatrixXf H
Definition: HessenbergDecomposition_matrixH.cpp:4
Creates chutes with different bottoms. Inherits from Mercury3D (-> MercuryBase -> DPMBase).
Definition: Chute.h:44
bool readNextArgument(int &i, int argc, char *argv[]) override
This method can be used for reading object properties from a string.
Definition: Chute.cc:534
Definition: flowRuleDiego_HeightAngle.cpp:14
virtual void createBaseSpecies()
Definition: obsolete_codes/SilbertPeriodic.h:66
void set_study(vector< int > study_num)
Definition: obsolete_codes/SilbertPeriodic.h:165
void setSlidingFrictionCoefficientBottom(Mdouble new_)
Definition: obsolete_codes/SilbertPeriodic.h:61
void add_flow_particles()
Definition: obsolete_codes/SilbertPeriodic.h:219
void create_inflow_particle()
Definition: obsolete_codes/SilbertPeriodic.h:243
void set_study()
Definition: obsolete_codes/SilbertPeriodic.h:78
void set_H(Mdouble new_)
Definition: obsolete_codes/SilbertPeriodic.h:255
SilbertPeriodic()
Definition: obsolete_codes/SilbertPeriodic.h:13
void printTime()
Definition: obsolete_codes/SilbertPeriodic.h:258
void actionsBeforeTimeStep() override
A virtual function which allows to define operations to be executed before the new time step.
Definition: obsolete_codes/SilbertPeriodic.h:174
Mdouble get_H()
Definition: obsolete_codes/SilbertPeriodic.h:256
void fix_hgrid()
Definition: obsolete_codes/SilbertPeriodic.h:46
Mdouble getSlidingFrictionCoefficientBottom()
Definition: obsolete_codes/SilbertPeriodic.h:56
void set_study(int study_num)
Definition: obsolete_codes/SilbertPeriodic.h:89
void setupInitialConditions() override
This function allows to set the initial conditions for our problem to be solved, by default particle ...
Definition: obsolete_codes/SilbertPeriodic.h:177
int readNextArgument(unsigned int &i, unsigned int argc, char *argv[])
Definition: obsolete_codes/SilbertPeriodic.h:267
Contains material and contact force properties.
Definition: Species.h:14
Definition: Kernel/Math/Vector.h:30
@ N
Definition: constructor.cpp:22
#define min(a, b)
Definition: datatypes.h:22
#define max(a, b)
Definition: datatypes.h:23
static EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE std::enable_if_t< dt !=data_source::global_mem, void > write(PacketType &packet_data, DataScalar ptr)
write, a template function used for storing the data to local memory. This function is used to guaran...
Definition: TensorContractionSycl.h:221
EIGEN_STRONG_INLINE EIGEN_DEVICE_FUNC bfloat16 round(const bfloat16 &a)
Definition: BFloat16.h:646
double Mu
Definition: axisym_linear_elasticity/cylinder/cylinder.cc:53
double P0
Definition: two_dim.cc:101
const Mdouble pi
Definition: ExtendedMath.h:23
MERCURYDPM_DEPRECATED Mdouble getMaximumVelocity(Mdouble k, Mdouble disp, Mdouble radius, Mdouble mass)
Calculates the maximum relative velocity allowed for a normal collision of two particles of radius r ...
Definition: FormulaHelpers.cc:47
string name
Definition: plotDoE.py:33