Introduction
Introduction Statistics Contact Development Disclaimer Help
tcompressive_failure.jl - Granular.jl - Julia package for granular dynamics sim…
git clone git://src.adamsgaard.dk/Granular.jl
Log
Files
Refs
README
LICENSE
---
tcompressive_failure.jl (7596B)
---
1 #!/usr/bin/env julia
2 using Test
3 import Granular
4
5 verbose = false
6 debug = false
7 if debug
8 import PyPlot
9 end
10
11 function plot_interaction(sim::Granular.Simulation, output::String)
12 time = Float64[]
13 force_n_1 = Float64[]
14 force_n_2 = Float64[]
15 force_t_1 = Float64[]
16 force_t_2 = Float64[]
17 torque_1 = Float64[]
18 torque_2 = Float64[]
19 compressive_failure = Bool[]
20 while sim.time < sim.time_total
21 Granular.run!(sim, verbose=verbose, single_step=true)
22 append!(time, sim.time)
23 append!(compressive_failure, sim.grains[1].compressive_failure[1…
24 append!(force_n_1, sim.grains[1].force[1])
25 append!(force_n_2, sim.grains[2].force[1])
26 append!(force_t_1, sim.grains[1].force[2])
27 append!(force_t_2, sim.grains[2].force[2])
28 append!(torque_1, sim.grains[1].torque[3])
29 append!(torque_2, sim.grains[2].torque[3])
30 end
31 PyPlot.clf()
32 PyPlot.subplot(3,1,1)
33 PyPlot.plot(time, force_n_1, "-b", label="1")
34 PyPlot.plot(time, force_n_2, "--y", label="2")
35 PyPlot.legend(loc="upper right")
36 PyPlot.ylabel("\$f_x\$ [N]")
37 PyPlot.subplot(3,1,2)
38 PyPlot.plot(time, force_t_1, "-b", label="1")
39 PyPlot.plot(time, force_t_2, "--y", label="2")
40 PyPlot.legend(loc="upper right")
41 PyPlot.ylabel("\$f_y\$ [N]")
42 PyPlot.subplot(3,1,3)
43 PyPlot.plot(time, torque_1, "-b", label="1")
44 PyPlot.plot(time, torque_2, "--y", label="2")
45 PyPlot.legend(loc="upper right")
46 PyPlot.ylabel("Torque [Nm]")
47 PyPlot.xlabel("Time [s]")
48 PyPlot.tight_layout()
49 PyPlot.savefig(output)
50 end
51
52 @info "Testing compressive failure: uniaxial compression"
53 sim = Granular.createSimulation("compressive_failure_uniaxial")
54 Granular.addGrainCylindrical!(sim, [0.0,0.0], 1.0, 0.5,
55 fracture_toughness=1285e3,
56 lin_vel=[1.0, 0.0], fixed=true, verbose=ve…
57 Granular.addGrainCylindrical!(sim, [2.0,0.0], 1.0, 0.5,
58 fracture_toughness=1285e3,
59 fixed=true, verbose=verbose)
60 @test count(x->x==true, sim.grains[1].compressive_failure) == 0
61 Granular.setTimeStep!(sim, verbose=verbose)
62 Granular.setTotalTime!(sim, 1.0)
63
64 if debug
65 Granular.removeSimulationFiles(sim)
66 Granular.setOutputFileInterval!(sim, 0.01)
67 plot_interaction(sim, sim.id * ".pdf")
68 else
69 Granular.run!(sim, verbose=verbose)
70 end
71
72 @test sim.grains[1].compressive_failure[1] == true
73 @test count(x->x==true, sim.grains[1].compressive_failure) == 1
74 @test sim.grains[1].force[1] < 0.0
75 @test sim.grains[1].force[2] ≈ 0.0
76 @test sim.grains[2].force[1] > 0.0
77 @test sim.grains[2].force[2] ≈ 0.0
78 @test sim.grains[1].torque ≈ zeros(3)
79 @test sim.grains[2].torque ≈ zeros(3)
80
81 @info "Testing compressive failure: shear"
82 sim = Granular.createSimulation("compressive_failure_shear")
83 Granular.addGrainCylindrical!(sim, [0.0,0.0], 1.0, 0.5,
84 fracture_toughness=1285e3,
85 lin_vel=[0.0, 1.0], fixed=true, verbose=ve…
86 Granular.addGrainCylindrical!(sim, [1.5,1.5], 1.0, 0.5,
87 fracture_toughness=1285e3,
88 fixed=true, verbose=verbose)
89 @test count(x->x==true, sim.grains[1].compressive_failure) == 0
90 Granular.setTimeStep!(sim, verbose=verbose)
91 Granular.setTotalTime!(sim, 1.0)
92
93 if debug
94 Granular.removeSimulationFiles(sim)
95 Granular.setOutputFileInterval!(sim, 0.01)
96 plot_interaction(sim, sim.id * ".pdf")
97 else
98 Granular.run!(sim, verbose=verbose)
99 end
100
101 @test sim.grains[1].compressive_failure[1] == true
102 @test count(x->x==true, sim.grains[1].compressive_failure) == 1
103 @test sim.grains[1].force[1] > 0.0
104 @test sim.grains[1].force[2] < 0.0
105 @test abs(sim.grains[1].force[1]) < abs(sim.grains[1].force[2])
106 @test sim.grains[2].force[1] < 0.0
107 @test sim.grains[2].force[2] > 0.0
108 @test abs(sim.grains[2].force[1]) < abs(sim.grains[2].force[2])
109 @test sim.grains[1].torque[1:2] ≈ zeros(2)
110 @test sim.grains[1].torque[3] < 0.0
111 @test sim.grains[2].torque[1:2] ≈ zeros(2)
112 @test sim.grains[2].torque[3] < 0.0
113
114 @info "Testing robustness of overlap calculations"
115 sim = Granular.createSimulation("overlap")
116 Granular.addGrainCylindrical!(sim, [0.0,0.0], 1.0, 0.5,
117 fracture_toughness=1285e3,
118 lin_vel=[0., 1.0], fixed=true, verbose=ver…
119 Granular.addGrainCylindrical!(sim, [2.0,0.0], 1.0, 0.5,
120 fracture_toughness=1285e3,
121 fixed=true, verbose=verbose)
122 @test count(x->x==true, sim.grains[1].compressive_failure) == 0
123 Granular.setTimeStep!(sim, verbose=verbose)
124 Granular.setTotalTime!(sim, 1.0)
125 Granular.run!(sim, single_step=true, verbose=verbose)
126 @test sim.grains[1].compressive_failure[1] == false
127 @test sim.grains[1].contact_area[1] == 0.0
128 @test count(x->x==true, sim.grains[1].compressive_failure) == 0
129
130 sim = Granular.createSimulation("overlap")
131 Granular.addGrainCylindrical!(sim, [0.,0.], 1.0, 0.5,
132 fracture_toughness=1.0,
133 fixed=true, verbose=verbose)
134 Granular.addGrainCylindrical!(sim, [0.0+1e-9,0.0], 1.0, 0.5,
135 fracture_toughness=1.0,
136 fixed=true, verbose=verbose)
137 Granular.setTimeStep!(sim, verbose=verbose)
138 Granular.setTotalTime!(sim, 1.0)
139 Granular.run!(sim, single_step=true, verbose=verbose)
140 @test sim.grains[1].compressive_failure[1] == true
141 @test sim.grains[1].contact_area[1] ≈ π*1.0^2
142
143 sim = Granular.createSimulation("overlap")
144 Granular.addGrainCylindrical!(sim, [0.,0.], 1.0, 0.5,
145 fracture_toughness=1.0,
146 fixed=true, verbose=verbose)
147 Granular.addGrainCylindrical!(sim, [0.1,0.], 1.0, 0.5,
148 fracture_toughness=1.0,
149 fixed=true, verbose=verbose)
150 Granular.setTimeStep!(sim, verbose=verbose)
151 Granular.setTotalTime!(sim, 1.0)
152 Granular.run!(sim, single_step=true, verbose=verbose)
153 @test sim.grains[1].compressive_failure[1] == true
154 @test sim.grains[1].contact_area[1] < π*1.0^2
155 @test sim.grains[1].contact_area[1] > 0.
156
157 sim = Granular.createSimulation("overlap")
158 Granular.addGrainCylindrical!(sim, [0.0,0.0], 1.0, 0.5,
159 fracture_toughness=1.0,
160 fixed=true, verbose=verbose)
161 Granular.addGrainCylindrical!(sim, [0.0+1e-9,0.0], 0.1, 0.5,
162 fracture_toughness=1.0,
163 fixed=true, verbose=verbose)
164 @test count(x->x==true, sim.grains[1].compressive_failure) == 0
165 Granular.setTimeStep!(sim, verbose=verbose)
166 Granular.setTotalTime!(sim, 1.0)
167 Granular.run!(sim, single_step=true, verbose=verbose)
168 @test sim.grains[1].position_vector[1] ≈ [-1e-9, 0., 0.]
169 @test sim.grains[1].compressive_failure[1] == true
170 @test sim.grains[1].contact_area[1] ≈ π*0.1^2
171
172 sim = Granular.createSimulation("overlap")
173 Granular.addGrainCylindrical!(sim, [0.0,0.0], 1.0, 0.5,
174 fracture_toughness=1.0,
175 fixed=true, verbose=verbose)
176 Granular.addGrainCylindrical!(sim, [0.3,0.4], 0.1, 0.5,
177 fracture_toughness=1.0,
178 fixed=true, verbose=verbose)
179 @test count(x->x==true, sim.grains[1].compressive_failure) == 0
180 Granular.setTimeStep!(sim, verbose=verbose)
181 Granular.setTotalTime!(sim, 1.0)
182 Granular.run!(sim, single_step=true, verbose=verbose)
183 @test sim.grains[1].compressive_failure[1] == true
184 @test sim.grains[1].contact_area[1] ≈ π*0.1^2
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.