tcollision-2floes-oblique.jl - Granular.jl - Julia package for granular dynamic… | |
git clone git://src.adamsgaard.dk/Granular.jl | |
Log | |
Files | |
Refs | |
README | |
LICENSE | |
--- | |
tcollision-2floes-oblique.jl (25824B) | |
--- | |
1 #!/usr/bin/env julia | |
2 | |
3 # Check for conservation of kinetic energy (=momentum) during a normal c… | |
4 # between two ice cylindrical grains | |
5 | |
6 verbose=false | |
7 | |
8 @info "## Contact-normal elasticity only" | |
9 @info "# One ice floe fixed" | |
10 sim = Granular.createSimulation(id="test") | |
11 Granular.addGrainCylindrical!(sim, [0., 10.], 10., 1., verbose=verbose) | |
12 Granular.addGrainCylindrical!(sim, [19., 0.], 10., 1., verbose=verbose) | |
13 sim.grains[1].lin_vel[1] = 0.1 | |
14 sim.grains[1].contact_dynamic_friction = 0. | |
15 sim.grains[2].contact_dynamic_friction = 0. | |
16 sim.grains[2].fixed = true | |
17 | |
18 E_kin_lin_init = Granular.totalGrainKineticTranslationalEnergy(sim) | |
19 E_kin_rot_init = Granular.totalGrainKineticRotationalEnergy(sim) | |
20 | |
21 # With decreasing timestep (epsilon towards 0), the explicit integration… | |
22 # should become more correct | |
23 | |
24 Granular.setTotalTime!(sim, 30.0) | |
25 #sim.file_time_step = 1. | |
26 sim_init = deepcopy(sim) | |
27 | |
28 @info "Testing kinetic energy conservation with Two-term Taylor scheme" | |
29 Granular.setTimeStep!(sim, epsilon=0.07) | |
30 tol = 0.1 | |
31 @info "Relative tolerance: $(tol*100.)% with time step: $(sim.time_step)" | |
32 Granular.run!(sim, temporal_integration_method="Two-term Taylor", verbos… | |
33 | |
34 E_kin_lin_final = Granular.totalGrainKineticTranslationalEnergy(sim) | |
35 E_kin_rot_final = Granular.totalGrainKineticRotationalEnergy(sim) | |
36 E_thermal_final = Granular.totalGrainThermalEnergy(sim) | |
37 @test E_kin_lin_init ≈ E_kin_lin_final+E_thermal_final atol=E_kin_lin_… | |
38 @test E_kin_rot_init ≈ E_kin_rot_final | |
39 | |
40 | |
41 @info "Testing kinetic energy conservation with Two-term Taylor scheme" | |
42 sim = deepcopy(sim_init) | |
43 Granular.setTimeStep!(sim, epsilon=0.007) | |
44 tol = 0.01 | |
45 @info "Relative tolerance: $(tol*100.)%" | |
46 Granular.run!(sim, temporal_integration_method="Two-term Taylor", verbos… | |
47 | |
48 E_kin_lin_final = Granular.totalGrainKineticTranslationalEnergy(sim) | |
49 E_kin_rot_final = Granular.totalGrainKineticRotationalEnergy(sim) | |
50 E_thermal_final = Granular.totalGrainThermalEnergy(sim) | |
51 @test E_kin_lin_init ≈ E_kin_lin_final+E_thermal_final atol=E_kin_lin_… | |
52 @test E_kin_rot_init ≈ E_kin_rot_final | |
53 | |
54 | |
55 @info "Testing kinetic energy conservation with Three-term Taylor scheme" | |
56 sim = deepcopy(sim_init) | |
57 Granular.setTimeStep!(sim, epsilon=0.07) | |
58 tol = 0.01 | |
59 @info "Relative tolerance: $(tol*100.)% with time step: $(sim.time_step)" | |
60 Granular.run!(sim, temporal_integration_method="Three-term Taylor", verb… | |
61 | |
62 E_kin_lin_final = Granular.totalGrainKineticTranslationalEnergy(sim) | |
63 E_kin_rot_final = Granular.totalGrainKineticRotationalEnergy(sim) | |
64 E_thermal_final = Granular.totalGrainThermalEnergy(sim) | |
65 @test E_kin_lin_init ≈ E_kin_lin_final+E_thermal_final atol=E_kin_lin_… | |
66 @test E_kin_rot_init ≈ E_kin_rot_final | |
67 | |
68 @info "# Ice floes free to move" | |
69 | |
70 sim = Granular.createSimulation(id="test") | |
71 Granular.addGrainCylindrical!(sim, [0., 10.], 10., 1., verbose=verbose) | |
72 Granular.addGrainCylindrical!(sim, [19.0, 0.], 10., 1., verbose=verbose) | |
73 sim.grains[1].lin_vel[1] = 0.1 | |
74 sim.grains[1].contact_dynamic_friction = 0. | |
75 sim.grains[2].contact_dynamic_friction = 0. | |
76 | |
77 E_kin_lin_init = Granular.totalGrainKineticTranslationalEnergy(sim) | |
78 E_kin_rot_init = Granular.totalGrainKineticRotationalEnergy(sim) | |
79 | |
80 # With decreasing timestep (epsilon towards 0), the explicit integration… | |
81 # should become more correct | |
82 | |
83 Granular.setTotalTime!(sim, 30.0) | |
84 sim_init = deepcopy(sim) | |
85 | |
86 @info "Testing kinetic energy conservation with Two-term Taylor scheme" | |
87 Granular.setTimeStep!(sim, epsilon=0.07) | |
88 tol = 0.1 | |
89 @info "Relative tolerance: $(tol*100.)% with time step: $(sim.time_step)" | |
90 Granular.run!(sim, temporal_integration_method="Two-term Taylor", verbos… | |
91 | |
92 E_kin_lin_final = Granular.totalGrainKineticTranslationalEnergy(sim) | |
93 E_kin_rot_final = Granular.totalGrainKineticRotationalEnergy(sim) | |
94 @test E_kin_lin_init ≈ E_kin_lin_final atol=E_kin_lin_init*tol | |
95 @test E_kin_rot_init ≈ E_kin_rot_final | |
96 | |
97 | |
98 @info "Testing kinetic energy conservation with Two-term Taylor scheme" | |
99 sim = deepcopy(sim_init) | |
100 Granular.setTimeStep!(sim, epsilon=0.007) | |
101 tol = 0.01 | |
102 @info "Relative tolerance: $(tol*100.)%" | |
103 Granular.run!(sim, temporal_integration_method="Two-term Taylor", verbos… | |
104 | |
105 E_kin_lin_final = Granular.totalGrainKineticTranslationalEnergy(sim) | |
106 E_kin_rot_final = Granular.totalGrainKineticRotationalEnergy(sim) | |
107 @test E_kin_lin_init ≈ E_kin_lin_final atol=E_kin_lin_init*tol | |
108 @test E_kin_rot_init ≈ E_kin_rot_final | |
109 | |
110 | |
111 @info "Testing kinetic energy conservation with Three-term Taylor scheme" | |
112 sim = deepcopy(sim_init) | |
113 Granular.setTimeStep!(sim, epsilon=0.07) | |
114 tol = 0.01 | |
115 @info "Relative tolerance: $(tol*100.)% with time step: $(sim.time_step)" | |
116 Granular.run!(sim, temporal_integration_method="Three-term Taylor", | |
117 verbose=verbose) | |
118 | |
119 E_kin_lin_final = Granular.totalGrainKineticTranslationalEnergy(sim) | |
120 E_kin_rot_final = Granular.totalGrainKineticRotationalEnergy(sim) | |
121 @test E_kin_lin_init ≈ E_kin_lin_final atol=E_kin_lin_init*tol | |
122 @test E_kin_rot_init ≈ E_kin_rot_final | |
123 | |
124 | |
125 @info "## Contact-normal elasticity and tangential viscosity and frictio… | |
126 Granular.setTotalTime!(sim, 30.0) | |
127 sim_init.grains[1].contact_viscosity_tangential = 1e6 | |
128 sim_init.grains[2].contact_viscosity_tangential = 1e6 | |
129 sim_init.grains[1].contact_dynamic_friction = 1e2 # no Coulomb sliding | |
130 sim_init.grains[2].contact_dynamic_friction = 1e2 # no Coulomb sliding | |
131 sim_init.grains[2].fixed = true | |
132 sim = deepcopy(sim_init) | |
133 | |
134 | |
135 @info "Testing kinetic energy conservation with Two-term Taylor scheme" | |
136 Granular.setTimeStep!(sim, epsilon=0.07) | |
137 tol = 0.1 | |
138 @info "Relative tolerance: $(tol*100.)% with time step: $(sim.time_step)" | |
139 Granular.setOutputFileInterval!(sim, 1.0) | |
140 Granular.run!(sim, temporal_integration_method="Two-term Taylor", | |
141 verbose=verbose) | |
142 | |
143 @test sim.grains[1].ang_pos[3] < 0. | |
144 @test sim.grains[1].ang_vel[3] < 0. | |
145 @test sim.grains[2].ang_pos[3] ≈ 0. | |
146 @test sim.grains[2].ang_vel[3] ≈ 0. | |
147 E_kin_lin_final = Granular.totalGrainKineticTranslationalEnergy(sim) | |
148 E_kin_rot_final = Granular.totalGrainKineticRotationalEnergy(sim) | |
149 println(E_kin_lin_init) | |
150 println(E_kin_lin_final) | |
151 println(E_kin_rot_init) | |
152 println(E_kin_rot_final) | |
153 @test E_kin_lin_init+E_kin_rot_init ≈ E_kin_lin_final+E_kin_rot_final … | |
154 | |
155 @info "mu_d = 0." | |
156 sim = deepcopy(sim_init) | |
157 sim.grains[1].contact_dynamic_friction = 0. | |
158 Granular.setTimeStep!(sim, epsilon=0.07) | |
159 tol = 0.01 | |
160 @info "Relative tolerance: $(tol*100.)% with time step: $(sim.time_step)" | |
161 E_kin_lin_init = Granular.totalGrainKineticTranslationalEnergy(sim) | |
162 E_kin_rot_init = Granular.totalGrainKineticRotationalEnergy(sim) | |
163 Granular.run!(sim, temporal_integration_method="Three-term Taylor", | |
164 verbose=verbose) | |
165 | |
166 @test sim.grains[1].ang_pos[3] ≈ 0. | |
167 @test sim.grains[1].ang_vel[3] ≈ 0. | |
168 @test sim.grains[2].ang_pos[3] ≈ 0. | |
169 E_kin_lin_final = Granular.totalGrainKineticTranslationalEnergy(sim) | |
170 E_kin_rot_final = Granular.totalGrainKineticRotationalEnergy(sim) | |
171 @test E_kin_lin_init ≈ E_kin_lin_final atol=E_kin_lin_init*tol | |
172 @test E_kin_rot_init ≈ E_kin_rot_final | |
173 | |
174 @info "Testing kinetic energy conservation with Two-term Taylor scheme" | |
175 sim = deepcopy(sim_init) | |
176 Granular.setTimeStep!(sim, epsilon=0.007) | |
177 tol = 0.1 | |
178 @info "Relative tolerance: $(tol*100.)%" | |
179 Granular.run!(sim, temporal_integration_method="Two-term Taylor", | |
180 verbose=verbose) | |
181 | |
182 @test sim.grains[1].ang_pos[3] < 0. | |
183 @test sim.grains[1].ang_vel[3] < 0. | |
184 @test sim.grains[2].ang_pos[3] ≈ 0. | |
185 @test sim.grains[2].ang_vel[3] ≈ 0. | |
186 E_kin_lin_final = Granular.totalGrainKineticTranslationalEnergy(sim) | |
187 E_kin_rot_final = Granular.totalGrainKineticRotationalEnergy(sim) | |
188 @test E_kin_lin_init+E_kin_rot_init ≈ E_kin_lin_final+E_kin_rot_final … | |
189 | |
190 | |
191 @info "Testing kinetic energy conservation with Three-term Taylor scheme" | |
192 sim = deepcopy(sim_init) | |
193 Granular.setTimeStep!(sim, epsilon=0.07) | |
194 tol = 0.09 | |
195 @info "Relative tolerance: $(tol*100.)% with time step: $(sim.time_step)" | |
196 Granular.run!(sim, temporal_integration_method="Three-term Taylor", | |
197 verbose=verbose) | |
198 | |
199 @test sim.grains[1].ang_pos[3] < 0. | |
200 @test sim.grains[1].ang_vel[3] < 0. | |
201 @test sim.grains[2].ang_pos[3] ≈ 0. | |
202 @test sim.grains[2].ang_vel[3] ≈ 0. | |
203 E_kin_lin_final = Granular.totalGrainKineticTranslationalEnergy(sim) | |
204 E_kin_rot_final = Granular.totalGrainKineticRotationalEnergy(sim) | |
205 @test E_kin_lin_init+E_kin_rot_init ≈ E_kin_lin_final+E_kin_rot_final … | |
206 | |
207 @info "# Ice floes free to move" | |
208 | |
209 sim = Granular.createSimulation(id="test") | |
210 Granular.addGrainCylindrical!(sim, [0., 10.], 10., 1., verbose=verbose) | |
211 Granular.addGrainCylindrical!(sim, [19.0, 0.], 10., 1., verbose=verbose) | |
212 sim.grains[1].lin_vel[1] = 0.1 | |
213 sim.grains[1].contact_viscosity_tangential = 1e4 | |
214 sim.grains[2].contact_viscosity_tangential = 1e4 | |
215 | |
216 E_kin_lin_init = Granular.totalGrainKineticTranslationalEnergy(sim) | |
217 E_kin_rot_init = Granular.totalGrainKineticRotationalEnergy(sim) | |
218 | |
219 # With decreasing timestep (epsilon towards 0), the explicit integration… | |
220 # should become more correct | |
221 | |
222 Granular.setTotalTime!(sim, 30.0) | |
223 sim_init = deepcopy(sim) | |
224 | |
225 @info "Testing kinetic energy conservation with Two-term Taylor scheme" | |
226 Granular.setTimeStep!(sim, epsilon=0.07) | |
227 tol = 0.1 | |
228 @info "Relative tolerance: $(tol*100.)% with time step: $(sim.time_step)" | |
229 Granular.run!(sim, temporal_integration_method="Two-term Taylor", | |
230 verbose=verbose) | |
231 | |
232 @test sim.grains[1].ang_pos[3] < 0. | |
233 @test sim.grains[1].ang_vel[3] < 0. | |
234 @test sim.grains[2].ang_pos[3] < 0. | |
235 @test sim.grains[2].ang_vel[3] < 0. | |
236 E_kin_lin_final = Granular.totalGrainKineticTranslationalEnergy(sim) | |
237 E_kin_rot_final = Granular.totalGrainKineticRotationalEnergy(sim) | |
238 @test E_kin_lin_init+E_kin_rot_init ≈ E_kin_lin_final+E_kin_rot_final … | |
239 | |
240 @info "Testing kinetic energy conservation with Two-term Taylor scheme" | |
241 sim = deepcopy(sim_init) | |
242 Granular.setTimeStep!(sim, epsilon=0.007) | |
243 tol = 0.04 | |
244 @info "Relative tolerance: $(tol*100.)%" | |
245 Granular.run!(sim, temporal_integration_method="Two-term Taylor", | |
246 verbose=verbose) | |
247 | |
248 E_kin_lin_final = Granular.totalGrainKineticTranslationalEnergy(sim) | |
249 E_kin_rot_final = Granular.totalGrainKineticRotationalEnergy(sim) | |
250 @test E_kin_lin_init+E_kin_rot_init ≈ E_kin_lin_final+E_kin_rot_final … | |
251 | |
252 | |
253 @info "Testing kinetic energy conservation with Three-term Taylor scheme" | |
254 sim = deepcopy(sim_init) | |
255 Granular.setTimeStep!(sim, epsilon=0.07) | |
256 tol = 0.04 | |
257 @info "Relative tolerance: $(tol*100.)% with time step: $(sim.time_step)" | |
258 Granular.run!(sim, temporal_integration_method="Three-term Taylor", | |
259 verbose=verbose) | |
260 | |
261 @test sim.grains[1].ang_pos[3] < 0. | |
262 @test sim.grains[1].ang_vel[3] < 0. | |
263 @test sim.grains[2].ang_pos[3] < 0. | |
264 @test sim.grains[2].ang_vel[3] < 0. | |
265 E_kin_lin_final = Granular.totalGrainKineticTranslationalEnergy(sim) | |
266 E_kin_rot_final = Granular.totalGrainKineticRotationalEnergy(sim) | |
267 @test E_kin_lin_init+E_kin_rot_init ≈ E_kin_lin_final+E_kin_rot_final … | |
268 | |
269 | |
270 @info "# Ice floes free to move, mirrored" | |
271 | |
272 sim = Granular.createSimulation(id="test") | |
273 Granular.addGrainCylindrical!(sim, [0., 0.], 10., 1., verbose=verbose) | |
274 Granular.addGrainCylindrical!(sim, [19.0, 10.], 10., 1., verbose=verbose) | |
275 sim.grains[2].lin_vel[1] = -0.1 | |
276 sim.grains[1].contact_viscosity_tangential = 1e4 | |
277 sim.grains[2].contact_viscosity_tangential = 1e4 | |
278 | |
279 E_kin_lin_init = Granular.totalGrainKineticTranslationalEnergy(sim) | |
280 E_kin_rot_init = Granular.totalGrainKineticRotationalEnergy(sim) | |
281 | |
282 # With decreasing timestep (epsilon towards 0), the explicit integration… | |
283 # should become more correct | |
284 | |
285 Granular.setTotalTime!(sim, 30.0) | |
286 sim_init = deepcopy(sim) | |
287 | |
288 @info "Testing kinetic energy conservation with Two-term Taylor scheme" | |
289 Granular.setTimeStep!(sim, epsilon=0.07) | |
290 tol = 0.1 | |
291 @info "Relative tolerance: $(tol*100.)% with time step: $(sim.time_step)" | |
292 Granular.run!(sim, temporal_integration_method="Two-term Taylor", | |
293 verbose=verbose) | |
294 | |
295 @test sim.grains[1].ang_pos[3] > 0. | |
296 @test sim.grains[1].ang_vel[3] > 0. | |
297 @test sim.grains[2].ang_pos[3] > 0. | |
298 @test sim.grains[2].ang_vel[3] > 0. | |
299 E_kin_lin_final = Granular.totalGrainKineticTranslationalEnergy(sim) | |
300 E_kin_rot_final = Granular.totalGrainKineticRotationalEnergy(sim) | |
301 @test E_kin_lin_init+E_kin_rot_init ≈ E_kin_lin_final+E_kin_rot_final … | |
302 | |
303 @info "Testing kinetic energy conservation with Two-term Taylor scheme" | |
304 sim = deepcopy(sim_init) | |
305 Granular.setTimeStep!(sim, epsilon=0.007) | |
306 tol = 0.04 | |
307 @info "Relative tolerance: $(tol*100.)%" | |
308 Granular.run!(sim, temporal_integration_method="Two-term Taylor", | |
309 verbose=verbose) | |
310 | |
311 E_kin_lin_final = Granular.totalGrainKineticTranslationalEnergy(sim) | |
312 E_kin_rot_final = Granular.totalGrainKineticRotationalEnergy(sim) | |
313 @test E_kin_lin_init+E_kin_rot_init ≈ E_kin_lin_final+E_kin_rot_final … | |
314 | |
315 | |
316 @info "Testing kinetic energy conservation with Three-term Taylor scheme" | |
317 sim = deepcopy(sim_init) | |
318 Granular.setTimeStep!(sim, epsilon=0.07) | |
319 tol = 0.04 | |
320 @info "Relative tolerance: $(tol*100.)% with time step: $(sim.time_step)" | |
321 Granular.run!(sim, temporal_integration_method="Three-term Taylor", | |
322 verbose=verbose) | |
323 | |
324 @test sim.grains[1].ang_pos[3] > 0. | |
325 @test sim.grains[1].ang_vel[3] > 0. | |
326 @test sim.grains[2].ang_pos[3] > 0. | |
327 @test sim.grains[2].ang_vel[3] > 0. | |
328 E_kin_lin_final = Granular.totalGrainKineticTranslationalEnergy(sim) | |
329 E_kin_rot_final = Granular.totalGrainKineticRotationalEnergy(sim) | |
330 @test E_kin_lin_init+E_kin_rot_init ≈ E_kin_lin_final+E_kin_rot_final … | |
331 | |
332 | |
333 @info "# Ice floes free to move, mirrored #2" | |
334 | |
335 sim = Granular.createSimulation(id="test") | |
336 Granular.addGrainCylindrical!(sim, [0., 0.], 10., 1., verbose=verbose) | |
337 Granular.addGrainCylindrical!(sim, [19.0, -10.], 10., 1., verbose=verbos… | |
338 sim.grains[2].lin_vel[1] = -0.1 | |
339 | |
340 E_kin_lin_init = Granular.totalGrainKineticTranslationalEnergy(sim) | |
341 E_kin_rot_init = Granular.totalGrainKineticRotationalEnergy(sim) | |
342 | |
343 # With decreasing timestep (epsilon towards 0), the explicit integration… | |
344 # should become more correct | |
345 | |
346 Granular.setTotalTime!(sim, 30.0) | |
347 sim_init = deepcopy(sim) | |
348 | |
349 @info "Testing kinetic energy conservation with Two-term Taylor scheme" | |
350 Granular.setTimeStep!(sim, epsilon=0.07) | |
351 tol = 0.1 | |
352 @info "Relative tolerance: $(tol*100.)% with time step: $(sim.time_step)" | |
353 Granular.run!(sim, temporal_integration_method="Two-term Taylor", | |
354 verbose=verbose) | |
355 | |
356 @test sim.grains[1].ang_pos[3] < 0. | |
357 @test sim.grains[1].ang_vel[3] < 0. | |
358 @test sim.grains[2].ang_pos[3] < 0. | |
359 @test sim.grains[2].ang_vel[3] < 0. | |
360 E_kin_lin_final = Granular.totalGrainKineticTranslationalEnergy(sim) | |
361 E_kin_rot_final = Granular.totalGrainKineticRotationalEnergy(sim) | |
362 @test E_kin_lin_init+E_kin_rot_init ≈ E_kin_lin_final+E_kin_rot_final … | |
363 | |
364 @info "Testing kinetic energy conservation with Two-term Taylor scheme" | |
365 sim = deepcopy(sim_init) | |
366 Granular.setTimeStep!(sim, epsilon=0.007) | |
367 tol = 0.04 | |
368 @info "Relative tolerance: $(tol*100.)%" | |
369 Granular.run!(sim, temporal_integration_method="Two-term Taylor", | |
370 verbose=verbose) | |
371 | |
372 E_kin_lin_final = Granular.totalGrainKineticTranslationalEnergy(sim) | |
373 E_kin_rot_final = Granular.totalGrainKineticRotationalEnergy(sim) | |
374 @test E_kin_lin_init+E_kin_rot_init ≈ E_kin_lin_final+E_kin_rot_final … | |
375 | |
376 | |
377 @info "Testing kinetic energy conservation with Three-term Taylor scheme" | |
378 sim = deepcopy(sim_init) | |
379 Granular.setTimeStep!(sim, epsilon=0.07) | |
380 tol = 0.04 | |
381 @info "Relative tolerance: $(tol*100.)% with time step: $(sim.time_step)" | |
382 Granular.run!(sim, temporal_integration_method="Three-term Taylor", | |
383 verbose=verbose) | |
384 | |
385 @test sim.grains[1].ang_pos[3] < 0. | |
386 @test sim.grains[1].ang_vel[3] < 0. | |
387 @test sim.grains[2].ang_pos[3] < 0. | |
388 @test sim.grains[2].ang_vel[3] < 0. | |
389 E_kin_lin_final = Granular.totalGrainKineticTranslationalEnergy(sim) | |
390 E_kin_rot_final = Granular.totalGrainKineticRotationalEnergy(sim) | |
391 @test E_kin_lin_init+E_kin_rot_init ≈ E_kin_lin_final+E_kin_rot_final … | |
392 | |
393 | |
394 @info "# Tangential elasticity, no tangential viscosity, no Coulomb slip" | |
395 | |
396 sim = Granular.createSimulation(id="test") | |
397 Granular.addGrainCylindrical!(sim, [0., 0.], 10., 1., verbose=verbose) | |
398 Granular.addGrainCylindrical!(sim, [19.0, -10.], 10., 1., verbose=verbos… | |
399 sim.grains[2].lin_vel[1] = -0.1 | |
400 sim.grains[1].contact_dynamic_friction = 1e3 # disable Coulomb slip | |
401 sim.grains[2].contact_dynamic_friction = 1e3 # disable Coulomb slip | |
402 sim.grains[1].contact_viscosity_tangential = 0. # disable tan. viscosity | |
403 sim.grains[2].contact_viscosity_tangential = 0. # disable tan. viscosity | |
404 sim.grains[1].contact_stiffness_tangential = | |
405 sim.grains[1].contact_stiffness_normal # enable tangential elastici… | |
406 sim.grains[2].contact_stiffness_tangential = | |
407 sim.grains[2].contact_stiffness_normal # enable tangential elastici… | |
408 | |
409 E_kin_lin_init = Granular.totalGrainKineticTranslationalEnergy(sim) | |
410 E_kin_rot_init = Granular.totalGrainKineticRotationalEnergy(sim) | |
411 | |
412 # With decreasing timestep (epsilon towards 0), the explicit integration… | |
413 # should become more correct | |
414 | |
415 Granular.setTotalTime!(sim, 30.0) | |
416 sim_init = deepcopy(sim) | |
417 | |
418 @info "Testing kinetic energy conservation with Two-term Taylor scheme" | |
419 Granular.setTimeStep!(sim, epsilon=0.07) | |
420 tol = 0.1 | |
421 @info "Relative tolerance: $(tol*100.)% with time step: $(sim.time_step)" | |
422 Granular.run!(sim, temporal_integration_method="Two-term Taylor", | |
423 verbose=verbose) | |
424 | |
425 @test sim.grains[1].ang_pos[3] < 0. | |
426 @test sim.grains[1].ang_vel[3] < 0. | |
427 @test sim.grains[2].ang_pos[3] < 0. | |
428 @test sim.grains[2].ang_vel[3] < 0. | |
429 E_kin_lin_final = Granular.totalGrainKineticTranslationalEnergy(sim) | |
430 E_kin_rot_final = Granular.totalGrainKineticRotationalEnergy(sim) | |
431 @test E_kin_lin_init+E_kin_rot_init ≈ E_kin_lin_final+E_kin_rot_final … | |
432 | |
433 @info "Testing kinetic energy conservation with Two-term Taylor scheme" | |
434 sim = deepcopy(sim_init) | |
435 Granular.setTimeStep!(sim, epsilon=0.007) | |
436 tol = 0.04 | |
437 @info "Relative tolerance: $(tol*100.)%" | |
438 Granular.run!(sim, temporal_integration_method="Two-term Taylor", | |
439 verbose=verbose) | |
440 | |
441 E_kin_lin_final = Granular.totalGrainKineticTranslationalEnergy(sim) | |
442 E_kin_rot_final = Granular.totalGrainKineticRotationalEnergy(sim) | |
443 @test E_kin_lin_init+E_kin_rot_init ≈ E_kin_lin_final+E_kin_rot_final … | |
444 | |
445 | |
446 @info "Testing kinetic energy conservation with Three-term Taylor scheme" | |
447 sim = deepcopy(sim_init) | |
448 Granular.setTimeStep!(sim, epsilon=0.07) | |
449 tol = 0.04 | |
450 @info "Relative tolerance: $(tol*100.)% with time step: $(sim.time_step)" | |
451 Granular.run!(sim, temporal_integration_method="Three-term Taylor", | |
452 verbose=verbose) | |
453 | |
454 @test sim.grains[1].ang_pos[3] < 0. | |
455 @test sim.grains[1].ang_vel[3] < 0. | |
456 @test sim.grains[2].ang_pos[3] < 0. | |
457 @test sim.grains[2].ang_vel[3] < 0. | |
458 E_kin_lin_final = Granular.totalGrainKineticTranslationalEnergy(sim) | |
459 E_kin_rot_final = Granular.totalGrainKineticRotationalEnergy(sim) | |
460 @test E_kin_lin_init+E_kin_rot_init ≈ E_kin_lin_final+E_kin_rot_final … | |
461 | |
462 | |
463 @info "# Tangential elasticity, no tangential viscosity, Coulomb slip" | |
464 | |
465 sim = Granular.createSimulation(id="test") | |
466 Granular.addGrainCylindrical!(sim, [0., 0.], 10., 1., verbose=verbose) | |
467 Granular.addGrainCylindrical!(sim, [19.0, -10.], 10., 1., verbose=verbos… | |
468 sim.grains[2].lin_vel[1] = -0.1 | |
469 sim.grains[1].contact_dynamic_friction = 0.1 # enable Coulomb slip | |
470 sim.grains[2].contact_dynamic_friction = 0.1 # enable Coulomb slip | |
471 sim.grains[1].contact_viscosity_tangential = 0. # disable tan. viscosity | |
472 sim.grains[2].contact_viscosity_tangential = 0. # disable tan. viscosity | |
473 sim.grains[1].contact_stiffness_tangential = | |
474 sim.grains[1].contact_stiffness_normal # enable tangential elastici… | |
475 sim.grains[2].contact_stiffness_tangential = | |
476 sim.grains[2].contact_stiffness_normal # enable tangential elastici… | |
477 | |
478 E_kin_lin_init = Granular.totalGrainKineticTranslationalEnergy(sim) | |
479 E_kin_rot_init = Granular.totalGrainKineticRotationalEnergy(sim) | |
480 | |
481 # With decreasing timestep (epsilon towards 0), the explicit integration… | |
482 # should become more correct | |
483 | |
484 Granular.setTotalTime!(sim, 30.0) | |
485 sim_init = deepcopy(sim) | |
486 | |
487 @info "Testing kinetic energy conservation with Two-term Taylor scheme" | |
488 sim = deepcopy(sim_init) | |
489 Granular.setTimeStep!(sim, epsilon=0.007) | |
490 tol = 0.02 | |
491 @info "Relative tolerance: $(tol*100.)%" | |
492 Granular.run!(sim, temporal_integration_method="Two-term Taylor", | |
493 verbose=verbose) | |
494 | |
495 E_kin_lin_final = Granular.totalGrainKineticTranslationalEnergy(sim) | |
496 E_kin_rot_final = Granular.totalGrainKineticRotationalEnergy(sim) | |
497 @test E_kin_lin_init+E_kin_rot_init > E_kin_lin_final+E_kin_rot_final | |
498 | |
499 @info "Testing kinetic energy conservation with Three-term Taylor scheme" | |
500 sim = deepcopy(sim_init) | |
501 Granular.setTimeStep!(sim, epsilon=0.07) | |
502 tol = 0.03 | |
503 @info "Relative tolerance: $(tol*100.)% with time step: $(sim.time_step)" | |
504 Granular.run!(sim, temporal_integration_method="Three-term Taylor", | |
505 verbose=verbose) | |
506 | |
507 @test sim.grains[1].ang_pos[3] < 0. | |
508 @test sim.grains[1].ang_vel[3] < 0. | |
509 @test sim.grains[2].ang_pos[3] < 0. | |
510 @test sim.grains[2].ang_vel[3] < 0. | |
511 E_kin_lin_final = Granular.totalGrainKineticTranslationalEnergy(sim) | |
512 E_kin_rot_final = Granular.totalGrainKineticRotationalEnergy(sim) | |
513 @test E_kin_lin_init+E_kin_rot_init > E_kin_lin_final+E_kin_rot_final | |
514 | |
515 | |
516 @info "# Tangential elasticity, tangential viscosity, no Coulomb slip" | |
517 | |
518 sim = Granular.createSimulation(id="test") | |
519 Granular.addGrainCylindrical!(sim, [0., 0.], 10., 1., verbose=verbose) | |
520 Granular.addGrainCylindrical!(sim, [19.0, -10.], 10., 1., verbose=verbos… | |
521 sim.grains[2].lin_vel[1] = -0.1 | |
522 sim.grains[1].contact_dynamic_friction = 1e3 # disable Coulomb slip | |
523 sim.grains[2].contact_dynamic_friction = 1e3 # disable Coulomb slip | |
524 sim.grains[1].contact_viscosity_tangential = 1e4 # enable tan. viscosity | |
525 sim.grains[2].contact_viscosity_tangential = 1e4 # enable tan. viscosity | |
526 sim.grains[1].contact_stiffness_tangential = | |
527 sim.grains[1].contact_stiffness_normal # enable tangential elastici… | |
528 sim.grains[2].contact_stiffness_tangential = | |
529 sim.grains[2].contact_stiffness_normal # enable tangential elastici… | |
530 | |
531 E_kin_lin_init = Granular.totalGrainKineticTranslationalEnergy(sim) | |
532 E_kin_rot_init = Granular.totalGrainKineticRotationalEnergy(sim) | |
533 | |
534 # With decreasing timestep (epsilon towards 0), the explicit integration… | |
535 # should become more correct | |
536 | |
537 Granular.setTotalTime!(sim, 30.0) | |
538 sim_init = deepcopy(sim) | |
539 | |
540 @info "Testing kinetic energy conservation with Two-term Taylor scheme" | |
541 sim = deepcopy(sim_init) | |
542 Granular.setTimeStep!(sim, epsilon=0.007) | |
543 tol = 0.02 | |
544 @info "Relative tolerance: $(tol*100.)%" | |
545 Granular.run!(sim, temporal_integration_method="Two-term Taylor", | |
546 verbose=verbose) | |
547 | |
548 E_kin_lin_final = Granular.totalGrainKineticTranslationalEnergy(sim) | |
549 E_kin_rot_final = Granular.totalGrainKineticRotationalEnergy(sim) | |
550 @test E_kin_lin_init+E_kin_rot_init > E_kin_lin_final+E_kin_rot_final | |
551 | |
552 @info "Testing kinetic energy conservation with Three-term Taylor scheme" | |
553 sim = deepcopy(sim_init) | |
554 Granular.setTimeStep!(sim, epsilon=0.07) | |
555 tol = 0.03 | |
556 @info "Relative tolerance: $(tol*100.)% with time step: $(sim.time_step)" | |
557 Granular.run!(sim, temporal_integration_method="Three-term Taylor", | |
558 verbose=verbose) | |
559 | |
560 @test sim.grains[1].ang_pos[3] < 0. | |
561 @test sim.grains[1].ang_vel[3] < 0. | |
562 @test sim.grains[2].ang_pos[3] < 0. | |
563 @test sim.grains[2].ang_vel[3] < 0. | |
564 E_kin_lin_final = Granular.totalGrainKineticTranslationalEnergy(sim) | |
565 E_kin_rot_final = Granular.totalGrainKineticRotationalEnergy(sim) | |
566 @test E_kin_lin_init+E_kin_rot_init > E_kin_lin_final+E_kin_rot_final | |
567 | |
568 | |
569 @info "# Tangential elasticity, tangential viscosity, Coulomb slip" | |
570 | |
571 sim = Granular.createSimulation(id="test") | |
572 Granular.addGrainCylindrical!(sim, [0., 0.], 10., 1., verbose=verbose) | |
573 Granular.addGrainCylindrical!(sim, [19.0, -10.], 10., 1., verbose=verbos… | |
574 sim.grains[2].lin_vel[1] = -0.1 | |
575 sim.grains[1].contact_dynamic_friction = 0.1 # enable Coulomb slip | |
576 sim.grains[2].contact_dynamic_friction = 0.1 # enable Coulomb slip | |
577 sim.grains[1].contact_viscosity_tangential = 1e4 # enable tan. viscosity | |
578 sim.grains[2].contact_viscosity_tangential = 1e4 # enable tan. viscosity | |
579 sim.grains[1].contact_stiffness_tangential = | |
580 sim.grains[1].contact_stiffness_normal # enable tangential elastici… | |
581 sim.grains[2].contact_stiffness_tangential = | |
582 sim.grains[2].contact_stiffness_normal # enable tangential elastici… | |
583 | |
584 E_kin_lin_init = Granular.totalGrainKineticTranslationalEnergy(sim) | |
585 E_kin_rot_init = Granular.totalGrainKineticRotationalEnergy(sim) | |
586 | |
587 # With decreasing timestep (epsilon towards 0), the explicit integration… | |
588 # should become more correct | |
589 | |
590 Granular.setTotalTime!(sim, 30.0) | |
591 sim_init = deepcopy(sim) | |
592 | |
593 @info "Testing kinetic energy conservation with Two-term Taylor scheme" | |
594 sim = deepcopy(sim_init) | |
595 Granular.setTimeStep!(sim, epsilon=0.007) | |
596 tol = 0.02 | |
597 @info "Relative tolerance: $(tol*100.)%" | |
598 Granular.run!(sim, temporal_integration_method="Two-term Taylor", | |
599 verbose=verbose) | |
600 | |
601 E_kin_lin_final = Granular.totalGrainKineticTranslationalEnergy(sim) | |
602 E_kin_rot_final = Granular.totalGrainKineticRotationalEnergy(sim) | |
603 @test E_kin_lin_init+E_kin_rot_init > E_kin_lin_final+E_kin_rot_final | |
604 | |
605 @info "Testing kinetic energy conservation with Three-term Taylor scheme" | |
606 sim = deepcopy(sim_init) | |
607 Granular.setTimeStep!(sim, epsilon=0.07) | |
608 tol = 0.03 | |
609 @info "Relative tolerance: $(tol*100.)% with time step: $(sim.time_step)" | |
610 Granular.run!(sim, temporal_integration_method="Three-term Taylor", | |
611 verbose=verbose) | |
612 | |
613 @test sim.grains[1].ang_pos[3] < 0. | |
614 @test sim.grains[1].ang_vel[3] < 0. | |
615 @test sim.grains[2].ang_pos[3] < 0. | |
616 @test sim.grains[2].ang_vel[3] < 0. | |
617 E_kin_lin_final = Granular.totalGrainKineticTranslationalEnergy(sim) | |
618 E_kin_rot_final = Granular.totalGrainKineticRotationalEnergy(sim) | |
619 @test E_kin_lin_init+E_kin_rot_init > E_kin_lin_final+E_kin_rot_final |