twall.jl - Granular.jl - Julia package for granular dynamics simulation
(HTM) git clone git://src.adamsgaard.dk/Granular.jl
(DIR) Log
(DIR) Files
(DIR) Refs
(DIR) README
(DIR) LICENSE
---
twall.jl (18726B)
---
1 #!/usr/bin/env julia
2
3 # Check the basic dynamic wall functionality
4
5 @info "# Test wall initialization"
6 @info "Testing argument value checks"
7 sim = Granular.createSimulation()
8 Granular.addGrainCylindrical!(sim, [ 0., 0.], 10., 2., verbose=false)
9 @test_throws ErrorException Granular.addWallLinearFrictionless!(sim,
10 [.1, .1, .1, .1],
11 1.)
12 @test_throws ErrorException Granular.addWallLinearFrictionless!(sim,
13 [1., 1.],
14 1.)
15 @test_throws ErrorException Granular.addWallLinearFrictionless!(sim,
16 [.1, .1, .1],
17 1.)
18 @test_throws ErrorException Granular.addWallLinearFrictionless!(sim,
19 [0., 1., 1.], 1.,
20 bc="asdf")
21 sim = Granular.createSimulation()
22 @test_throws ErrorException Granular.addWallLinearFrictionless!(sim, [1., 0.],
23 1.)
24
25
26 @info "Check that wall mass equals total grain mass and max. thickness"
27 sim = Granular.createSimulation()
28 @test length(sim.walls) == 0
29 Granular.addGrainCylindrical!(sim, [ 0., 0.], 10., 2., verbose=false)
30 sim.grains[1].mass = 1.0
31 Granular.addWallLinearFrictionless!(sim, [1., 0.], 1., verbose=true)
32 @test length(sim.walls) == 1
33 @test sim.walls[1].mass ≈ 1.0
34 @test sim.walls[1].thickness ≈ 2.0
35
36 @info "Test wall surface area and defined normal stress"
37 sim = Granular.createSimulation()
38 sim.ocean = Granular.createRegularOceanGrid([1, 1, 1], [10., 20., 1.0])
39 Granular.addGrainCylindrical!(sim, [ 0., 0.], 10., 2., verbose=false)
40 sim.grains[1].mass = 1.0
41 Granular.addWallLinearFrictionless!(sim, [1., 0.], 1., verbose=false)
42 Granular.addWallLinearFrictionless!(sim, [0., 1.], 1., verbose=false)
43 @test length(sim.walls) == 2
44 @test sim.walls[1].mass ≈ 1.0
45 @test sim.walls[1].thickness ≈ 2.0
46 @test sim.walls[2].mass ≈ 1.0
47 @test sim.walls[2].thickness ≈ 2.0
48 @test Granular.getWallSurfaceArea(sim, 1) ≈ 20.0*2.0
49 @test Granular.getWallSurfaceArea(sim, 2) ≈ 10.0*2.0
50
51 sim.walls[1].normal_stress = 1.0
52 @test Granular.getWallNormalStress(sim, wall_index=1, stress_type="defined") ≈ 1.0
53 sim.walls[1].force = 1.0
54 @test Granular.getWallNormalStress(sim, wall_index=1, stress_type="effective") ≈ 1.0/(20.0*2.0)
55 @test_throws ErrorException Granular.getWallNormalStress(sim, wall_index=1, stress_type="nonexistent")
56
57 sim.walls[1].normal = [1.0, 1.0, 1.0]
58 @test_throws ErrorException Granular.getWallSurfaceArea(sim, 1)
59 @test_throws ErrorException Granular.getWallSurfaceArea(sim, [1.,1.], 0.5)
60
61 @info "# Test wall-grain interaction: elastic"
62
63 @info "Wall present but no contact"
64 sim = Granular.createSimulation()
65 sim.ocean = Granular.createRegularOceanGrid([1, 1, 1], [10., 20., 1.0])
66 Granular.addGrainCylindrical!(sim, [ 0., 0.], 1., 2., verbose=false)
67 Granular.addWallLinearFrictionless!(sim, [1., 0.], -1.01, verbose=false)
68 Granular.setTimeStep!(sim, verbose=false)
69 Granular.interactWalls!(sim)
70 @test sim.walls[1].force ≈ 0.
71 @test sim.grains[1].force[1] ≈ 0.
72 @test sim.grains[1].force[2] ≈ 0.
73
74 @info "Wall present but no contact"
75 sim = Granular.createSimulation()
76 sim.ocean = Granular.createRegularOceanGrid([1, 1, 1], [10., 20., 1.0])
77 Granular.addGrainCylindrical!(sim, [ 0., 0.], 1., 2., verbose=false)
78 Granular.addWallLinearFrictionless!(sim, [1., 0.], +2.01, verbose=false)
79 Granular.setTimeStep!(sim, verbose=false)
80 Granular.interactWalls!(sim)
81 @test sim.walls[1].force ≈ 0.
82 @test sim.grains[1].force[1] ≈ 0.
83 @test sim.grains[1].force[2] ≈ 0.
84
85 @info "Wall at -x"
86 sim = Granular.createSimulation()
87 sim.ocean = Granular.createRegularOceanGrid([1, 1, 1], [10., 20., 1.0])
88 Granular.addGrainCylindrical!(sim, [ 0., 0.], 1., 2., youngs_modulus=0.,
89 verbose=false)
90 Granular.addWallLinearFrictionless!(sim, [1., 0.], -1. + .01, verbose=false)
91 Granular.setTimeStep!(sim, verbose=false)
92 Granular.interactWalls!(sim)
93 @test sim.walls[1].force < 0.
94 @test sim.grains[1].force[1] > 0.
95 @test sim.grains[1].force[2] ≈ 0.
96
97 @info "Wall at -x"
98 sim = Granular.createSimulation()
99 sim.ocean = Granular.createRegularOceanGrid([1, 1, 1], [10., 20., 1.0])
100 Granular.addGrainCylindrical!(sim, [ 0., 0.], 1., 2., verbose=false)
101 Granular.addWallLinearFrictionless!(sim, [1., 0.], -1. + .01, verbose=false)
102 Granular.setTimeStep!(sim, verbose=false)
103 Granular.interactWalls!(sim)
104 @test sim.walls[1].force < 0.
105 @test sim.grains[1].force[1] > 0.
106 @test sim.grains[1].force[2] ≈ 0.
107
108 @info "Wall at +x"
109 sim = Granular.createSimulation()
110 sim.ocean = Granular.createRegularOceanGrid([1, 1, 1], [10., 20., 1.0])
111 Granular.addGrainCylindrical!(sim, [ 0., 0.], 1., 2., verbose=false)
112 Granular.addWallLinearFrictionless!(sim, [1., 0.], +1. - .01, verbose=false)
113 Granular.setTimeStep!(sim, verbose=false)
114 Granular.interactWalls!(sim)
115 @test sim.walls[1].force > 0.
116 @test sim.grains[1].force[1] < 0.
117 @test sim.grains[1].force[2] ≈ 0.
118
119 @info "Wall at -y"
120 sim = Granular.createSimulation()
121 sim.ocean = Granular.createRegularOceanGrid([1, 1, 1], [10., 20., 1.0])
122 Granular.addGrainCylindrical!(sim, [ 0., 0.], 1., 2., verbose=false)
123 Granular.addWallLinearFrictionless!(sim, [0., 1.], -1. + .01, verbose=false)
124 Granular.setTimeStep!(sim, verbose=false)
125 Granular.interactWalls!(sim)
126 @test sim.walls[1].force < 0.
127 @test sim.grains[1].force[1] ≈ 0.
128 @test sim.grains[1].force[2] > 0.
129
130 @info "Wall at +y"
131 sim = Granular.createSimulation()
132 sim.ocean = Granular.createRegularOceanGrid([1, 1, 1], [10., 20., 1.0])
133 Granular.addGrainCylindrical!(sim, [ 0., 0.], 1., 2., verbose=false)
134 Granular.addWallLinearFrictionless!(sim, [0., 1.], +1. - .01, verbose=false)
135 Granular.setTimeStep!(sim, verbose=false)
136 Granular.interactWalls!(sim)
137 @test sim.walls[1].force > 0.
138 @test sim.grains[1].force[1] ≈ 0.
139 @test sim.grains[1].force[2] < 0.
140
141 @info "# Test wall-grain interaction: elastic-viscous"
142
143 @info "Wall present but no contact"
144 sim = Granular.createSimulation()
145 sim.ocean = Granular.createRegularOceanGrid([1, 1, 1], [10., 20., 1.0])
146 Granular.addGrainCylindrical!(sim, [ 0., 0.], 1., 2., verbose=false)
147 Granular.addWallLinearFrictionless!(sim, [1., 0.], -1.01, verbose=false)
148 sim.walls[1].contact_viscosity_normal = 1e3
149 Granular.setTimeStep!(sim, verbose=false)
150 Granular.interactWalls!(sim)
151 @test sim.walls[1].force ≈ 0.
152 @test sim.grains[1].force[1] ≈ 0.
153 @test sim.grains[1].force[2] ≈ 0.
154
155 @info "Wall present but no contact"
156 sim = Granular.createSimulation()
157 sim.ocean = Granular.createRegularOceanGrid([1, 1, 1], [10., 20., 1.0])
158 Granular.addGrainCylindrical!(sim, [ 0., 0.], 1., 2., verbose=false)
159 Granular.addWallLinearFrictionless!(sim, [1., 0.], +2.01, verbose=false)
160 sim.walls[1].contact_viscosity_normal = 1e3
161 Granular.setTimeStep!(sim, verbose=false)
162 Granular.interactWalls!(sim)
163 @test sim.walls[1].force ≈ 0.
164 @test sim.grains[1].force[1] ≈ 0.
165 @test sim.grains[1].force[2] ≈ 0.
166
167 @info "Wall at -x"
168 sim = Granular.createSimulation()
169 sim.ocean = Granular.createRegularOceanGrid([1, 1, 1], [10., 20., 1.0])
170 Granular.addGrainCylindrical!(sim, [ 0., 0.], 1., 2., verbose=false)
171 Granular.addWallLinearFrictionless!(sim, [1., 0.], -1. + .01, verbose=false)
172 sim.walls[1].contact_viscosity_normal = 1e3
173 Granular.setTimeStep!(sim, verbose=false)
174 Granular.interactWalls!(sim)
175 @test sim.walls[1].force < 0.
176 @test sim.grains[1].force[1] > 0.
177 @test sim.grains[1].force[2] ≈ 0.
178
179 @info "Wall at +x"
180 sim = Granular.createSimulation()
181 sim.ocean = Granular.createRegularOceanGrid([1, 1, 1], [10., 20., 1.0])
182 Granular.addGrainCylindrical!(sim, [ 0., 0.], 1., 2., verbose=false)
183 Granular.addWallLinearFrictionless!(sim, [1., 0.], +1. - .01, verbose=false)
184 sim.walls[1].contact_viscosity_normal = 1e3
185 Granular.setTimeStep!(sim, verbose=false)
186 Granular.interactWalls!(sim)
187 @test sim.walls[1].force > 0.
188 @test sim.grains[1].force[1] < 0.
189 @test sim.grains[1].force[2] ≈ 0.
190
191 @info "Wall at -y"
192 sim = Granular.createSimulation()
193 sim.ocean = Granular.createRegularOceanGrid([1, 1, 1], [10., 20., 1.0])
194 Granular.addGrainCylindrical!(sim, [ 0., 0.], 1., 2., verbose=false)
195 Granular.addWallLinearFrictionless!(sim, [0., 1.], -1. + .01, verbose=false)
196 sim.walls[1].contact_viscosity_normal = 1e3
197 Granular.setTimeStep!(sim, verbose=false)
198 Granular.interactWalls!(sim)
199 @test sim.walls[1].force < 0.
200 @test sim.grains[1].force[1] ≈ 0.
201 @test sim.grains[1].force[2] > 0.
202
203 @info "Wall at +y"
204 sim = Granular.createSimulation()
205 sim.ocean = Granular.createRegularOceanGrid([1, 1, 1], [10., 20., 1.0])
206 Granular.addGrainCylindrical!(sim, [ 0., 0.], 1., 2., verbose=false)
207 Granular.addWallLinearFrictionless!(sim, [0., 1.], +1. - .01, verbose=false)
208 sim.walls[1].contact_viscosity_normal = 1e3
209 Granular.setTimeStep!(sim, verbose=false)
210 Granular.interactWalls!(sim)
211 @test sim.walls[1].force > 0.
212 @test sim.grains[1].force[1] ≈ 0.
213 @test sim.grains[1].force[2] < 0.
214
215 @info "Full collision with wall"
216 sim = Granular.createSimulation()
217 sim.ocean = Granular.createRegularOceanGrid([1, 1, 1], [10., 20., 1.0])
218 Granular.addGrainCylindrical!(sim, [1.2, 0.5], 1., 2., verbose=false)
219 Granular.addWallLinearFrictionless!(sim, [1., 0.], 0., verbose=false)
220 sim.walls[1].contact_viscosity_normal = 1e3
221 sim.grains[1].lin_vel[1] = -0.2
222 Granular.setTimeStep!(sim, verbose=false)
223 Granular.setTotalTime!(sim, 5.)
224 lin_vel0 = sim.grains[1].lin_vel
225 Granular.run!(sim)
226 @test sim.grains[1].lin_vel[1] < abs(lin_vel0[1])
227 @test sim.grains[1].lin_vel[2] ≈ 0.
228 lin_vel1 = sim.grains[1].lin_vel
229
230 sim = Granular.createSimulation()
231 sim.ocean = Granular.createRegularOceanGrid([1, 1, 1], [10., 20., 1.0])
232 Granular.addGrainCylindrical!(sim, [1.2, 0.5], 1., 2., verbose=false)
233 Granular.addWallLinearFrictionless!(sim, [1., 0.], 0., verbose=false)
234 sim.walls[1].contact_viscosity_normal = 1e4
235 sim.grains[1].lin_vel[1] = -0.2
236 Granular.setTimeStep!(sim, verbose=false)
237 Granular.setTotalTime!(sim, 5.)
238 lin_vel0 = sim.grains[1].lin_vel
239 Granular.run!(sim)
240 @test sim.grains[1].lin_vel[1] < abs(lin_vel0[1])
241 @test sim.grains[1].lin_vel[1] < lin_vel1[1]
242 @test sim.grains[1].lin_vel[2] ≈ 0.
243
244
245 @info "# Testing wall dynamics"
246
247 @info "Wall present, no contact, fixed (default)"
248 sim = Granular.createSimulation()
249 sim.ocean = Granular.createRegularOceanGrid([1, 1, 1], [10., 20., 1.0])
250 Granular.addGrainCylindrical!(sim, [ 1., 1.], 1., 2., verbose=false)
251 Granular.addWallLinearFrictionless!(sim, [1., 0.], -0.01, verbose=false)
252 Granular.setTimeStep!(sim, verbose=false)
253 Granular.interactWalls!(sim)
254 Granular.updateWallKinematics!(sim)
255 @test sim.walls[1].force ≈ 0.
256 @test sim.walls[1].acc ≈ 0.
257 @test sim.walls[1].vel ≈ 0.
258 @test sim.walls[1].pos ≈ -0.01
259 @test sim.grains[1].force[1] ≈ 0.
260 @test sim.grains[1].force[2] ≈ 0.
261
262 @info "Wall present, no contact, fixed (TY2)"
263 sim = Granular.createSimulation()
264 sim.ocean = Granular.createRegularOceanGrid([1, 1, 1], [10., 20., 1.0])
265 Granular.addGrainCylindrical!(sim, [ 1., 1.], 1., 2., verbose=false)
266 Granular.addWallLinearFrictionless!(sim, [1., 0.], -0.01, verbose=false)
267 Granular.setTimeStep!(sim, verbose=false)
268 Granular.interactWalls!(sim)
269 Granular.updateWallKinematics!(sim, method="Two-term Taylor")
270 @test sim.walls[1].force ≈ 0.
271 @test sim.walls[1].acc ≈ 0.
272 @test sim.walls[1].vel ≈ 0.
273 @test sim.walls[1].pos ≈ -0.01
274 @test sim.grains[1].force[1] ≈ 0.
275 @test sim.grains[1].force[2] ≈ 0.
276
277 @info "Wall present, no contact, fixed (TY3)"
278 sim = Granular.createSimulation()
279 sim.ocean = Granular.createRegularOceanGrid([1, 1, 1], [10., 20., 1.0])
280 Granular.addGrainCylindrical!(sim, [ 1., 1.], 1., 2., verbose=false)
281 Granular.addWallLinearFrictionless!(sim, [1., 0.], -0.01, verbose=false)
282 Granular.setTimeStep!(sim, verbose=false)
283 Granular.interactWalls!(sim)
284 @test_throws ErrorException Granular.updateWallKinematics!(sim, method="asdf")
285 Granular.updateWallKinematics!(sim, method="Three-term Taylor")
286 @test sim.walls[1].force ≈ 0.
287 @test sim.walls[1].acc ≈ 0.
288 @test sim.walls[1].vel ≈ 0.
289 @test sim.walls[1].pos ≈ -0.01
290 @test sim.grains[1].force[1] ≈ 0.
291 @test sim.grains[1].force[2] ≈ 0.
292
293 @info "Wall present, contact, fixed"
294 sim = Granular.createSimulation()
295 sim.ocean = Granular.createRegularOceanGrid([1, 1, 1], [10., 20., 1.0])
296 Granular.addGrainCylindrical!(sim, [ 1., 1.], 1., 2., verbose=false)
297 Granular.addWallLinearFrictionless!(sim, [1., 0.], -0.01, verbose=false)
298 Granular.setTimeStep!(sim, verbose=false)
299 Granular.interactWalls!(sim)
300 Granular.updateWallKinematics!(sim)
301 @test sim.walls[1].acc ≈ 0.
302 @test sim.walls[1].vel ≈ 0.
303 @test sim.walls[1].pos ≈ -0.01
304
305 @info "Wall present, no contact, velocity BC"
306 sim = Granular.createSimulation()
307 sim.ocean = Granular.createRegularOceanGrid([1, 1, 1], [10., 20., 1.0])
308 Granular.addGrainCylindrical!(sim, [ 1., 1.], 1., 2., verbose=false)
309 Granular.addWallLinearFrictionless!(sim, [1., 0.], -0.01,
310 bc="velocity", vel=1.0,
311 verbose=false)
312 Granular.setTimeStep!(sim, verbose=false)
313 Granular.interactWalls!(sim)
314 Granular.updateWallKinematics!(sim)
315 @test sim.walls[1].force ≈ 0.
316 @test sim.walls[1].acc ≈ 0.
317 @test sim.walls[1].vel ≈ 1.
318 @test sim.walls[1].pos > -0.01
319 @test sim.grains[1].force[1] ≈ 0.
320 @test sim.grains[1].force[2] ≈ 0.
321
322 @info "Wall present, no contact, velocity BC (TY2)"
323 sim = Granular.createSimulation()
324 sim.ocean = Granular.createRegularOceanGrid([1, 1, 1], [10., 20., 1.0])
325 Granular.addGrainCylindrical!(sim, [ 1., 1.], 1., 2., verbose=false)
326 Granular.addWallLinearFrictionless!(sim, [1., 0.], -0.01,
327 bc="velocity", vel=1.0,
328 verbose=false)
329 Granular.setTimeStep!(sim, verbose=false)
330 Granular.interactWalls!(sim)
331 Granular.updateWallKinematics!(sim, method="Two-term Taylor")
332 @test sim.walls[1].force ≈ 0.
333 @test sim.walls[1].acc ≈ 0.
334 @test sim.walls[1].vel ≈ 1.
335 @test sim.walls[1].pos > -0.01
336 @test sim.grains[1].force[1] ≈ 0.
337 @test sim.grains[1].force[2] ≈ 0.
338
339 @info "Wall present, no contact, velocity BC (TY3)"
340 sim = Granular.createSimulation()
341 sim.ocean = Granular.createRegularOceanGrid([1, 1, 1], [10., 20., 1.0])
342 Granular.addGrainCylindrical!(sim, [ 1., 1.], 1., 2., verbose=false)
343 Granular.addWallLinearFrictionless!(sim, [1., 0.], -0.01,
344 bc="velocity", vel=1.0,
345 verbose=false)
346 Granular.setTimeStep!(sim, verbose=false)
347 Granular.interactWalls!(sim)
348 @test_throws ErrorException Granular.updateWallKinematics!(sim, method="asdf")
349 Granular.updateWallKinematics!(sim, method="Three-term Taylor")
350 @test sim.walls[1].force ≈ 0.
351 @test sim.walls[1].acc ≈ 0.
352 @test sim.walls[1].vel ≈ 1.
353 @test sim.walls[1].pos > -0.01
354 @test sim.grains[1].force[1] ≈ 0.
355 @test sim.grains[1].force[2] ≈ 0.
356
357 @info "Wall present, contact, velocity BC (TY2)"
358 sim = Granular.createSimulation()
359 sim.ocean = Granular.createRegularOceanGrid([1, 1, 1], [10., 20., 1.0])
360 Granular.addGrainCylindrical!(sim, [ 1., 1.], 1., 2., verbose=false)
361 Granular.addWallLinearFrictionless!(sim, [1., 0.], 0.1,
362 bc="velocity", vel=1.0,
363 verbose=false)
364 Granular.setTimeStep!(sim, verbose=false)
365 Granular.interactWalls!(sim)
366 Granular.updateWallKinematics!(sim, method="Two-term Taylor")
367 @test sim.walls[1].bc == "velocity"
368 @test sim.walls[1].acc ≈ 0.
369 @test sim.walls[1].vel ≈ 1.
370 @test sim.walls[1].pos > -0.9
371
372 @info "Wall present, contact, velocity BC (TY2)"
373 sim = Granular.createSimulation()
374 sim.ocean = Granular.createRegularOceanGrid([1, 1, 1], [10., 20., 1.0])
375 Granular.addGrainCylindrical!(sim, [ 1., 1.], 1., 2., verbose=false)
376 Granular.addWallLinearFrictionless!(sim, [1., 0.], 0.1,
377 bc="velocity", vel=1.0,
378 verbose=false)
379 Granular.setTimeStep!(sim, verbose=false)
380 Granular.interactWalls!(sim)
381 Granular.updateWallKinematics!(sim, method="Two-term Taylor")
382 @test sim.walls[1].acc ≈ 0.
383 @test sim.walls[1].vel ≈ 1.
384 @test sim.walls[1].pos > -0.9
385
386 @info "Wall present, contact, normal stress BC"
387 sim = Granular.createSimulation()
388 sim.ocean = Granular.createRegularOceanGrid([1, 1, 1], [2., 2., 1.])
389 Granular.addGrainCylindrical!(sim, [ 1., 1.], 1., 1., verbose=false)
390 Granular.addWallLinearFrictionless!(sim, [1., 0.], 2.,
391 bc="normal stress",
392 normal_stress=0.,
393 verbose=false)
394 Granular.setTimeStep!(sim, verbose=false)
395 Granular.interactWalls!(sim)
396 Granular.updateWallKinematics!(sim)
397 @test sim.walls[1].force ≈ 0.
398 @test sim.walls[1].acc ≈ 0.
399 @test sim.walls[1].vel ≈ 0.
400 @test sim.grains[1].force[1] ≈ 0.
401 @test sim.grains[1].force[2] ≈ 0.
402
403 @info "Wall present, contact, normal stress BC"
404 sim = Granular.createSimulation()
405 sim.ocean = Granular.createRegularOceanGrid([1, 1, 1], [2., 2., 1.])
406 Granular.addGrainCylindrical!(sim, [ 1., 1.], 1., 1., verbose=false)
407 sim.grains[1].fixed = true
408 Granular.addWallLinearFrictionless!(sim, [1., 0.], 2.,
409 bc="normal stress",
410 normal_stress=-1e4,
411 verbose=false)
412 Granular.setTimeStep!(sim, verbose=false)
413 Granular.interactWalls!(sim)
414 Granular.updateWallKinematics!(sim)
415 @test sim.walls[1].force ≈ 0.
416 @test sim.walls[1].acc < 0.
417 @test sim.walls[1].vel < 0.
418 @test sim.grains[1].force[1] ≈ 0.
419 @test sim.grains[1].force[2] ≈ 0.
420 for i=1:5
421 Granular.interactWalls!(sim)
422 Granular.updateWallKinematics!(sim)
423 @test sim.walls[1].force > 0.
424 @test sim.walls[1].acc < 0.
425 @test sim.walls[1].vel < 0.
426 @test sim.walls[1].pos < 2.
427 @test sim.grains[1].force[1] < 0.
428 @test sim.grains[1].force[2] ≈ 0.
429 end
430
431 @info "Granular packing, wall present, normal stress BC"
432 sim = Granular.createSimulation()
433 Granular.regularPacking!(sim, [5, 5], 1.0, 2.0)
434 Granular.fitGridToGrains!(sim, sim.ocean)
435 Granular.setGridBoundaryConditions!(sim.ocean, "impermeable")
436 global y_max_init = 0.
437 for grain in sim.grains
438 if y_max_init < grain.lin_pos[2] + grain.contact_radius
439 global y_max_init = grain.lin_pos[2] + grain.contact_radius
440 end
441 end
442 Granular.addWallLinearFrictionless!(sim, [0., 1.], y_max_init,
443 bc="normal stress", normal_stress=-100e3)
444 Granular.setTimeStep!(sim)
445 Granular.setTotalTime!(sim, 1.)
446 Granular.run!(sim)
447 Granular.removeSimulationFiles(sim)
448 @test sim.walls[1].pos < y_max_init