Introduction
Introduction Statistics Contact Development Disclaimer Help
tcollision-5floes-normal.jl - Granular.jl - Julia package for granular dynamics…
git clone git://src.adamsgaard.dk/Granular.jl
Log
Files
Refs
README
LICENSE
---
tcollision-5floes-normal.jl (10374B)
---
1 #!/usr/bin/env julia
2 using LinearAlgebra
3
4 # Check for conservation of kinetic energy (=momentum) during a normal c…
5 # between two ice cylindrical grains
6
7 verbose=false
8
9 @info "# One ice floe fixed"
10 sim = Granular.createSimulation(id="test")
11 Granular.addGrainCylindrical!(sim, [0., 0.], 10., 1., verbose=verbose)
12 Granular.addGrainCylindrical!(sim, [20.05, 0.], 10., 1., verbose=verbose)
13 Granular.addGrainCylindrical!(sim, [40.05, 0.], 10., 1., verbose=verbose)
14 Granular.addGrainCylindrical!(sim, [60.05, 0.], 10., 1., verbose=verbose)
15 Granular.addGrainCylindrical!(sim, [80.05, 0.], 10., 1., verbose=verbose)
16 sim.grains[1].lin_vel[1] = 0.1
17 sim.grains[2].fixed = true
18 sim.grains[3].fixed = true
19 sim.grains[4].fixed = true
20 sim.grains[5].fixed = true
21
22 E_kin_lin_init = Granular.totalGrainKineticTranslationalEnergy(sim)
23 E_kin_rot_init = Granular.totalGrainKineticRotationalEnergy(sim)
24
25 # With decreasing timestep (epsilon towards 0), the explicit integration…
26 # should become more correct
27
28 Granular.setTotalTime!(sim, 10.0)
29 sim_init = deepcopy(sim)
30
31 @info "Testing kinetic energy conservation with Two-term Taylor scheme"
32 Granular.setTimeStep!(sim, epsilon=0.07)
33 tol = 0.2
34 @info "Relative tolerance: $(tol*100.)% with time step: $(sim.time_step)"
35 Granular.run!(sim, temporal_integration_method="Two-term Taylor", verbos…
36
37 E_kin_lin_final = Granular.totalGrainKineticTranslationalEnergy(sim)
38 E_kin_rot_final = Granular.totalGrainKineticRotationalEnergy(sim)
39 @test E_kin_lin_init ≈ E_kin_lin_final atol=E_kin_lin_init*tol
40 @test E_kin_rot_init ≈ E_kin_rot_final
41 @test 0. < norm(sim.grains[1].lin_vel)
42 for i=2:5
43 @info "testing ice floe $i"
44 @test 0. ≈ norm(sim.grains[i].lin_vel)
45 end
46
47
48 @info "Testing kinetic energy conservation with Two-term Taylor scheme"
49 sim = deepcopy(sim_init)
50 Granular.setTimeStep!(sim, epsilon=0.007)
51 tol = 0.02
52 @info "Relative tolerance: $(tol*100.)%"
53 Granular.run!(sim, temporal_integration_method="Two-term Taylor", verbos…
54
55 E_kin_lin_final = Granular.totalGrainKineticTranslationalEnergy(sim)
56 E_kin_rot_final = Granular.totalGrainKineticRotationalEnergy(sim)
57 @test E_kin_lin_init ≈ E_kin_lin_final atol=E_kin_lin_init*tol
58 @test E_kin_rot_init ≈ E_kin_rot_final
59 @test 0. < norm(sim.grains[1].lin_vel)
60 for i=2:5
61 @info "testing ice floe $i"
62 @test 0. ≈ norm(sim.grains[i].lin_vel)
63 end
64
65
66 @info "Testing kinetic energy conservation with Three-term Taylor scheme"
67 sim = deepcopy(sim_init)
68 Granular.setTimeStep!(sim, epsilon=0.07)
69 tol = 0.01
70 @info "Relative tolerance: $(tol*100.)% with time step: $(sim.time_step)"
71 Granular.run!(sim, temporal_integration_method="Three-term Taylor",
72 verbose=verbose)
73
74 E_kin_lin_final = Granular.totalGrainKineticTranslationalEnergy(sim)
75 E_kin_rot_final = Granular.totalGrainKineticRotationalEnergy(sim)
76 @test E_kin_lin_init ≈ E_kin_lin_final atol=E_kin_lin_init*tol
77 @test E_kin_rot_init ≈ E_kin_rot_final
78 @test 0. < norm(sim.grains[1].lin_vel)
79 for i=2:5
80 @info "testing ice floe $i"
81 @test 0. ≈ norm(sim.grains[i].lin_vel)
82 end
83
84
85 @info "# Ice floes free to move"
86
87 sim = Granular.createSimulation(id="test")
88 Granular.addGrainCylindrical!(sim, [0., 0.], 10., 1., verbose=verbose)
89 Granular.addGrainCylindrical!(sim, [20.05, 0.], 10., 1., verbose=verbose)
90 Granular.addGrainCylindrical!(sim, [40.05, 0.], 10., 1., verbose=verbose)
91 Granular.addGrainCylindrical!(sim, [60.05, 0.], 10., 1., verbose=verbose)
92 Granular.addGrainCylindrical!(sim, [80.05, 0.], 10., 1., verbose=verbose)
93 sim.grains[1].lin_vel[1] = 0.1
94
95 E_kin_lin_init = Granular.totalGrainKineticTranslationalEnergy(sim)
96 E_kin_rot_init = Granular.totalGrainKineticRotationalEnergy(sim)
97
98 # With decreasing timestep (epsilon towards 0), the explicit integration…
99 # should become more correct
100
101 Granular.setTotalTime!(sim, 40.0)
102 sim_init = deepcopy(sim)
103
104 @info "Testing kinetic energy conservation with Two-term Taylor scheme"
105 Granular.setTimeStep!(sim, epsilon=0.07)
106 tol = 0.2
107 @info "Relative tolerance: $(tol*100.)% with time step: $(sim.time_step)"
108 Granular.run!(sim, temporal_integration_method="Two-term Taylor", verbos…
109
110 E_kin_lin_final = Granular.totalGrainKineticTranslationalEnergy(sim)
111 E_kin_rot_final = Granular.totalGrainKineticRotationalEnergy(sim)
112 @test E_kin_lin_init ≈ E_kin_lin_final atol=E_kin_lin_init*tol
113 @test E_kin_rot_init ≈ E_kin_rot_final
114 for i=1:5
115 @info "testing ice floe $i"
116 @test 0. < norm(sim.grains[i].lin_vel)
117 end
118
119
120 @info "Testing kinetic energy conservation with Two-term Taylor scheme"
121 sim = deepcopy(sim_init)
122 Granular.setTimeStep!(sim, epsilon=0.007)
123 tol = 0.02
124 @info "Relative tolerance: $(tol*100.)%"
125 Granular.run!(sim, temporal_integration_method="Two-term Taylor", verbos…
126
127 E_kin_lin_final = Granular.totalGrainKineticTranslationalEnergy(sim)
128 E_kin_rot_final = Granular.totalGrainKineticRotationalEnergy(sim)
129 @test E_kin_lin_init ≈ E_kin_lin_final atol=E_kin_lin_init*tol
130 @test E_kin_rot_init ≈ E_kin_rot_final
131 for i=1:5
132 @info "testing ice floe $i"
133 @test 0. < norm(sim.grains[i].lin_vel)
134 end
135
136
137 @info "Testing kinetic energy conservation with Three-term Taylor scheme"
138 sim = deepcopy(sim_init)
139 Granular.setTimeStep!(sim, epsilon=0.07)
140 tol = 0.01
141 @info "Relative tolerance: $(tol*100.)% with time step: $(sim.time_step)"
142 Granular.run!(sim, temporal_integration_method="Three-term Taylor",
143 verbose=verbose)
144
145 E_kin_lin_final = Granular.totalGrainKineticTranslationalEnergy(sim)
146 E_kin_rot_final = Granular.totalGrainKineticRotationalEnergy(sim)
147 @test E_kin_lin_init ≈ E_kin_lin_final atol=E_kin_lin_init*tol
148 @test E_kin_rot_init ≈ E_kin_rot_final
149 for i=1:5
150 @info "testing ice floe $i"
151 @test 0. < norm(sim.grains[i].lin_vel)
152 end
153
154
155 @info "# Adding contact-normal viscosity"
156 @info "# One ice floe fixed"
157 sim = Granular.createSimulation(id="test")
158 Granular.addGrainCylindrical!(sim, [0., 0.], 10., 1., verbose=verbose)
159 Granular.addGrainCylindrical!(sim, [20.05, 0.], 10., 1., verbose=verbose)
160 Granular.addGrainCylindrical!(sim, [40.05, 0.], 10., 1., verbose=verbose)
161 Granular.addGrainCylindrical!(sim, [60.05, 0.], 10., 1., verbose=verbose)
162 Granular.addGrainCylindrical!(sim, [80.05, 0.], 10., 1., verbose=verbose)
163 sim.grains[1].lin_vel[1] = 0.1
164 sim.grains[1].contact_viscosity_normal = 1e4
165 sim.grains[2].contact_viscosity_normal = 1e4
166 sim.grains[3].contact_viscosity_normal = 1e4
167 sim.grains[4].contact_viscosity_normal = 1e4
168 sim.grains[5].contact_viscosity_normal = 1e4
169 sim.grains[2].fixed = true
170 sim.grains[3].fixed = true
171 sim.grains[4].fixed = true
172 sim.grains[5].fixed = true
173
174 E_kin_lin_init = Granular.totalGrainKineticTranslationalEnergy(sim)
175 E_kin_rot_init = Granular.totalGrainKineticRotationalEnergy(sim)
176
177 # With decreasing timestep (epsilon towards 0), the explicit integration…
178 # should become more correct
179
180 Granular.setTotalTime!(sim, 10.0)
181 sim_init = deepcopy(sim)
182
183
184 @info "Testing kinetic energy conservation with Two-term Taylor scheme"
185 sim = deepcopy(sim_init)
186 Granular.setTimeStep!(sim, epsilon=0.007)
187 tol = 0.02
188 @info "Relative tolerance: $(tol*100.)%"
189 Granular.run!(sim, temporal_integration_method="Two-term Taylor", verbos…
190
191 E_kin_lin_final = Granular.totalGrainKineticTranslationalEnergy(sim)
192 E_kin_rot_final = Granular.totalGrainKineticRotationalEnergy(sim)
193 @test E_kin_lin_init > E_kin_lin_final
194 @test E_kin_rot_init ≈ E_kin_rot_final
195 @test 0. < norm(sim.grains[1].lin_vel)
196 for i=2:5
197 @info "testing ice floe $i"
198 @test 0. ≈ norm(sim.grains[i].lin_vel)
199 end
200
201
202 @info "Testing kinetic energy conservation with Three-term Taylor scheme"
203 sim = deepcopy(sim_init)
204 Granular.setTimeStep!(sim, epsilon=0.07)
205 tol = 0.01
206 @info "Relative tolerance: $(tol*100.)% with time step: $(sim.time_step)"
207 Granular.run!(sim, temporal_integration_method="Three-term Taylor",
208 verbose=verbose)
209
210 E_kin_lin_final = Granular.totalGrainKineticTranslationalEnergy(sim)
211 E_kin_rot_final = Granular.totalGrainKineticRotationalEnergy(sim)
212 @test E_kin_lin_init > E_kin_lin_final
213 @test E_kin_rot_init ≈ E_kin_rot_final
214 @test 0. < norm(sim.grains[1].lin_vel)
215 for i=2:5
216 @info "testing ice floe $i"
217 @test 0. ≈ norm(sim.grains[i].lin_vel)
218 end
219
220
221 @info "# Ice floes free to move"
222
223 sim = Granular.createSimulation(id="test")
224 Granular.addGrainCylindrical!(sim, [0., 0.], 10., 1., verbose=verbose)
225 Granular.addGrainCylindrical!(sim, [20.05, 0.], 10., 1., verbose=verbose)
226 Granular.addGrainCylindrical!(sim, [40.05, 0.], 10., 1., verbose=verbose)
227 Granular.addGrainCylindrical!(sim, [60.05, 0.], 10., 1., verbose=verbose)
228 Granular.addGrainCylindrical!(sim, [80.05, 0.], 10., 1., verbose=verbose)
229 sim.grains[1].lin_vel[1] = 0.1
230 sim.grains[1].contact_viscosity_normal = 1e4
231 sim.grains[2].contact_viscosity_normal = 1e4
232 sim.grains[3].contact_viscosity_normal = 1e4
233 sim.grains[4].contact_viscosity_normal = 1e4
234 sim.grains[5].contact_viscosity_normal = 1e4
235
236 E_kin_lin_init = Granular.totalGrainKineticTranslationalEnergy(sim)
237 E_kin_rot_init = Granular.totalGrainKineticRotationalEnergy(sim)
238
239 # With decreasing timestep (epsilon towards 0), the explicit integration…
240 # should become more correct
241
242 Granular.setTotalTime!(sim, 10.0)
243 sim_init = deepcopy(sim)
244
245 @info "Testing kinetic energy conservation with Two-term Taylor scheme"
246 sim = deepcopy(sim_init)
247 Granular.setTimeStep!(sim, epsilon=0.007)
248 tol = 0.02
249 @info "Relative tolerance: $(tol*100.)%"
250 Granular.run!(sim, temporal_integration_method="Two-term Taylor", verbos…
251
252 E_kin_lin_final = Granular.totalGrainKineticTranslationalEnergy(sim)
253 E_kin_rot_final = Granular.totalGrainKineticRotationalEnergy(sim)
254 @test E_kin_lin_init > E_kin_lin_final
255 @test E_kin_rot_init ≈ E_kin_rot_final
256 for i=1:5
257 @info "testing ice floe $i"
258 @test 0. < norm(sim.grains[i].lin_vel)
259 end
260
261
262 @info "Testing kinetic energy conservation with Three-term Taylor scheme"
263 sim = deepcopy(sim_init)
264 Granular.setTimeStep!(sim, epsilon=0.07)
265 tol = 0.01
266 @info "Relative tolerance: $(tol*100.)% with time step: $(sim.time_step)"
267 Granular.run!(sim, temporal_integration_method="Three-term Taylor",
268 verbose=verbose)
269
270 E_kin_lin_final = Granular.totalGrainKineticTranslationalEnergy(sim)
271 E_kin_rot_final = Granular.totalGrainKineticRotationalEnergy(sim)
272 @test E_kin_lin_init > E_kin_lin_final
273 @test E_kin_rot_init ≈ E_kin_rot_final
274 for i=1:5
275 @info "testing ice floe $i"
276 @test 0. < norm(sim.grains[i].lin_vel)
277 end
You are viewing proxied material from mx1.adamsgaard.dk. The copyright of proxied material belongs to its original authors. Any comments or complaints in relation to proxied material should be directed to the original authors of the content concerned. Please see the disclaimer for more details.