Introduction
Introduction Statistics Contact Development Disclaimer Help
tgrid-boundaries.jl - Granular.jl - Julia package for granular dynamics simulat…
git clone git://src.adamsgaard.dk/Granular.jl
Log
Files
Refs
README
LICENSE
---
tgrid-boundaries.jl (9801B)
---
1 #!/usr/bin/env julia
2
3 verbose=false
4
5 @info "## Inactive/Periodic BCs"
6
7 @info "Testing assignment and reporting of grid boundary conditions"
8 ocean = Granular.createEmptyOcean()
9
10 @test ocean.bc_west == 1
11 @test ocean.bc_east == 1
12 @test ocean.bc_north == 1
13 @test ocean.bc_south == 1
14
15 if !Sys.iswindows()
16 const originalSTDOUT = stdout
17 (out_r, out_w) = redirect_stdout()
18 Granular.reportGridBoundaryConditions(ocean)
19 close(out_w)
20 redirect_stdout(originalSTDOUT)
21 output = String(readavailable(out_r))
22 @test output == """West (-x): inactive\t(1)
23 East (+x): inactive\t(1)
24 South (-y): inactive\t(1)
25 North (+y): inactive\t(1)
26 """
27
28 (out_r, out_w) = redirect_stdout()
29 Granular.setGridBoundaryConditions!(ocean, "periodic", "south, west",
30 verbose=true)
31 close(out_w)
32 redirect_stdout(originalSTDOUT)
33 output = String(readavailable(out_r))
34 @test output == """West (-x): periodic\t(2)
35 East (+x): inactive\t(1)
36 South (-y): periodic\t(2)
37 North (+y): inactive\t(1)
38 """
39 @test ocean.bc_west == 2
40 @test ocean.bc_east == 1
41 @test ocean.bc_north == 1
42 @test ocean.bc_south == 2
43
44 Granular.setGridBoundaryConditions!(ocean, "inactive", "all", verbos…
45 (out_r, out_w) = redirect_stdout()
46 Granular.setGridBoundaryConditions!(ocean, "periodic", "-y, -x",
47 verbose=true)
48 close(out_w)
49 redirect_stdout(originalSTDOUT)
50 output = String(readavailable(out_r))
51 @test output == """West (-x): periodic\t(2)
52 East (+x): inactive\t(1)
53 South (-y): periodic\t(2)
54 North (+y): inactive\t(1)
55 """
56 @test ocean.bc_west == 2
57 @test ocean.bc_east == 1
58 @test ocean.bc_north == 1
59 @test ocean.bc_south == 2
60
61 Granular.setGridBoundaryConditions!(ocean, "inactive", "all", verbos…
62 (out_r, out_w) = redirect_stdout()
63 Granular.setGridBoundaryConditions!(ocean, "periodic", "north, east",
64 verbose=true)
65 close(out_w)
66 redirect_stdout(originalSTDOUT)
67 output = String(readavailable(out_r))
68 @test output == """West (-x): inactive\t(1)
69 East (+x): periodic\t(2)
70 South (-y): inactive\t(1)
71 North (+y): periodic\t(2)
72 """
73 @test ocean.bc_west == 1
74 @test ocean.bc_east == 2
75 @test ocean.bc_north == 2
76 @test ocean.bc_south == 1
77
78 Granular.setGridBoundaryConditions!(ocean, "inactive", "all", verbos…
79 (out_r, out_w) = redirect_stdout()
80 Granular.setGridBoundaryConditions!(ocean, "periodic", "+y, +x",
81 verbose=true)
82 close(out_w)
83 redirect_stdout(originalSTDOUT)
84 output = String(readavailable(out_r))
85 @test output == """West (-x): inactive\t(1)
86 East (+x): periodic\t(2)
87 South (-y): inactive\t(1)
88 North (+y): periodic\t(2)
89 """
90 @test ocean.bc_west == 1
91 @test ocean.bc_east == 2
92 @test ocean.bc_north == 2
93 @test ocean.bc_south == 1
94
95 (out_r, out_w) = redirect_stdout()
96 Granular.setGridBoundaryConditions!(ocean, "inactive", "all", verbos…
97 close(out_w)
98 redirect_stdout(originalSTDOUT)
99 output = String(readavailable(out_r))
100 @test output == ""
101 @test ocean.bc_west == 1
102 @test ocean.bc_east == 1
103 @test ocean.bc_north == 1
104 @test ocean.bc_south == 1
105
106 (out_r, out_w) = redirect_stdout()
107 Granular.setGridBoundaryConditions!(ocean, "periodic", "all")
108 close(out_w)
109 output = String(readavailable(out_r))
110 redirect_stdout(originalSTDOUT)
111 @test output == """West (-x): periodic\t(2)
112 East (+x): periodic\t(2)
113 South (-y): periodic\t(2)
114 North (+y): periodic\t(2)
115 """
116 @test ocean.bc_west == 2
117 @test ocean.bc_east == 2
118 @test ocean.bc_north == 2
119 @test ocean.bc_south == 2
120
121 (out_r, out_w) = redirect_stdout()
122 Granular.setGridBoundaryConditions!(ocean, "inactive")
123 close(out_w)
124 output = String(readavailable(out_r))
125 redirect_stdout(originalSTDOUT)
126 @test output == """West (-x): inactive\t(1)
127 East (+x): inactive\t(1)
128 South (-y): inactive\t(1)
129 North (+y): inactive\t(1)
130 """
131 @test ocean.bc_west == 1
132 @test ocean.bc_east == 1
133 @test ocean.bc_north == 1
134 @test ocean.bc_south == 1
135
136 (out_r, out_w) = redirect_stdout()
137 Granular.setGridBoundaryConditions!(ocean, "periodic")
138 close(out_w)
139 output = String(readavailable(out_r))
140 redirect_stdout(originalSTDOUT)
141 @test output == """West (-x): periodic\t(2)
142 East (+x): periodic\t(2)
143 South (-y): periodic\t(2)
144 North (+y): periodic\t(2)
145 """
146 @test ocean.bc_west == 2
147 @test ocean.bc_east == 2
148 @test ocean.bc_north == 2
149 @test ocean.bc_south == 2
150
151 @test_throws ErrorException Granular.setGridBoundaryConditions!(ocea…
152 "per…
153 "asd…
154
155 @test_throws ErrorException Granular.setGridBoundaryConditions!(ocea…
156 "asd…
157 end
158
159 @info "Testing granular interaction across periodic boundaries"
160 sim = Granular.createSimulation()
161 sim.ocean = Granular.createRegularOceanGrid([5, 5, 2], [1., 1., 1.])
162 Granular.setGridBoundaryConditions!(sim.ocean, "periodic")
163 Granular.addGrainCylindrical!(sim, [0.1, 0.5], 0.11, 0.1, verbose=false)
164 Granular.addGrainCylindrical!(sim, [0.9, 0.5], 0.11, 0.1, verbose=false)
165
166 # there should be an error if all-to-all contact search is used
167 @test_throws ErrorException Granular.findContacts!(sim)
168 @test_throws ErrorException Granular.findContacts!(sim, method="all to a…
169 @test_throws ErrorException Granular.findContactsAllToAll!(sim)
170
171 Granular.sortGrainsInGrid!(sim, sim.ocean, verbose=false)
172 Granular.findContacts!(sim, method="ocean grid")
173 @test 2 == sim.grains[1].contacts[1]
174 @test 1 == sim.grains[1].n_contacts
175 @test 1 == sim.grains[2].n_contacts
176
177
178 @info "Test grain position adjustment across periodic boundaries"
179 # do not readjust inside grid, inactive boundaries
180 sim = Granular.createSimulation()
181 sim.ocean = Granular.createRegularOceanGrid([5, 5, 2], [1., 1., 1.])
182 Granular.setGridBoundaryConditions!(sim.ocean, "inactive", verbose=false)
183 Granular.addGrainCylindrical!(sim, [0.1, 0.5], 0.11, 0.1, verbose=false)
184 Granular.moveGrainsAcrossPeriodicBoundaries!(sim)
185 @test [0.1, 0.5, 0.] ≈ sim.grains[1].lin_pos
186
187 # do not readjust inside grid, periodic boundaries
188 sim = Granular.createSimulation()
189 sim.ocean = Granular.createRegularOceanGrid([5, 5, 2], [1., 1., 1.])
190 Granular.setGridBoundaryConditions!(sim.ocean, "periodic", verbose=false)
191 Granular.addGrainCylindrical!(sim, [0.1, 0.5], 0.11, 0.1, verbose=false)
192 Granular.moveGrainsAcrossPeriodicBoundaries!(sim)
193 @test [0.1, 0.5, 0.] ≈ sim.grains[1].lin_pos
194
195 # do not readjust outside grid, inactive boundaries
196 sim = Granular.createSimulation()
197 sim.ocean = Granular.createRegularOceanGrid([5, 5, 2], [1., 1., 1.])
198 Granular.setGridBoundaryConditions!(sim.ocean, "inactive", verbose=false)
199 Granular.addGrainCylindrical!(sim, [-0.1, 0.5], 0.11, 0.1, verbose=false)
200 Granular.moveGrainsAcrossPeriodicBoundaries!(sim)
201 @test [-0.1, 0.5, 0.] ≈ sim.grains[1].lin_pos
202
203 # readjust outside grid, periodic boundaries, -x
204 sim = Granular.createSimulation()
205 sim.ocean = Granular.createRegularOceanGrid([5, 5, 2], [1., 1., 1.])
206 Granular.setGridBoundaryConditions!(sim.ocean, "periodic", verbose=false)
207 Granular.addGrainCylindrical!(sim, [-0.1, 0.5], 0.11, 0.1, verbose=false)
208 Granular.moveGrainsAcrossPeriodicBoundaries!(sim)
209 @test [0.9, 0.5, 0.] ≈ sim.grains[1].lin_pos
210
211 # readjust outside grid, periodic boundaries, +x
212 sim = Granular.createSimulation()
213 sim.ocean = Granular.createRegularOceanGrid([5, 5, 2], [1., 1., 1.])
214 Granular.setGridBoundaryConditions!(sim.ocean, "periodic", verbose=false)
215 Granular.addGrainCylindrical!(sim, [1.1, 0.5], 0.11, 0.1, verbose=false)
216 Granular.moveGrainsAcrossPeriodicBoundaries!(sim)
217 @test [0.1, 0.5, 0.] ≈ sim.grains[1].lin_pos
218
219 # readjust outside grid, periodic boundaries, -y
220 sim = Granular.createSimulation()
221 sim.ocean = Granular.createRegularOceanGrid([5, 5, 2], [1., 1., 1.])
222 Granular.setGridBoundaryConditions!(sim.ocean, "periodic", verbose=false)
223 Granular.addGrainCylindrical!(sim, [0.3, -0.1], 0.11, 0.1, verbose=false)
224 Granular.moveGrainsAcrossPeriodicBoundaries!(sim)
225 @test [0.3, 0.9, 0.] ≈ sim.grains[1].lin_pos
226
227 # readjust outside grid, periodic boundaries, +y
228 sim = Granular.createSimulation()
229 sim.ocean = Granular.createRegularOceanGrid([5, 5, 2], [1., 1., 1.])
230 Granular.setGridBoundaryConditions!(sim.ocean, "periodic", verbose=false)
231 Granular.addGrainCylindrical!(sim, [0.3, 1.1], 0.11, 0.1, verbose=false)
232 Granular.moveGrainsAcrossPeriodicBoundaries!(sim)
233 @test [0.3, 0.1, 0.] ≈ sim.grains[1].lin_pos
234
235 # throw error if atmosphere and ocean BCs differ
236 sim = Granular.createSimulation()
237 sim.ocean = Granular.createRegularOceanGrid([5, 5, 2], [1., 1., 1.])
238 sim.atmosphere = Granular.createRegularAtmosphereGrid([5, 5, 2], [1., 1.…
239 Granular.setGridBoundaryConditions!(sim.ocean, "periodic", verbose=false)
240 Granular.addGrainCylindrical!(sim, [0.3, 1.1], 0.11, 0.1, verbose=false)
241 @test_throws ErrorException Granular.moveGrainsAcrossPeriodicBoundaries!…
242
243
244 @info "## Impermeable BCs"
245
246 @info "Test grain velocity adjustment across impermeable boundaries"
247 # do not readjust inside grid, inactive boundaries
248 sim = Granular.createSimulation()
249 sim.ocean = Granular.createRegularOceanGrid([5, 5, 2], [1., 1., 1.])
250 Granular.setGridBoundaryConditions!(sim.ocean, "inactive", verbose=false)
251 Granular.addGrainCylindrical!(sim, [0.1, 0.5], 0.11, 0.1, verbose=false)
252 Granular.moveGrainsAcrossPeriodicBoundaries!(sim)
253 @test [0.1, 0.5, 0.] ≈ sim.grains[1].lin_pos
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.