Introduction
Introduction Statistics Contact Development Disclaimer Help
tgrid.jl - Granular.jl - Julia package for granular dynamics simulation
git clone git://src.adamsgaard.dk/Granular.jl
Log
Files
Refs
README
LICENSE
---
tgrid.jl (19258B)
---
1 #!/usr/bin/env julia
2 using Test
3 import Granular
4
5 # Check the grid interpolation and sorting functions
6 verbose = false
7
8 if Granular.hasNetCDF
9 ocean = Granular.readOceanNetCDF("Baltic/00010101.ocean_month.nc",
10 "Baltic/ocean_hgrid.nc")
11
12 @info "Testing coordinate retrieval functions"
13 sw, se, ne, nw = Granular.getCellCornerCoordinates(ocean.xq, ocean.y…
14 @test sw ≈ [6., 53.]
15 @test se ≈ [7., 53.]
16 @test ne ≈ [7., 54.]
17 @test nw ≈ [6., 54.]
18 @test Granular.getCellCenterCoordinates(ocean.xh, ocean.yh, 1, 1) �…
19
20 @info "Testing area-determination methods"
21 @test Granular.areaOfTriangle([0., 0.], [1., 0.], [0., 1.]) ≈ .5
22 @test Granular.areaOfTriangle([1., 0.], [0., 1.], [0., 0.]) ≈ .5
23 @test Granular.areaOfQuadrilateral([1., 0.], [0., 1.], [0., 0.], [1.…
24
25 @info "Testing area-based cell content determination"
26 @test Granular.isPointInCell(ocean, 1, 1, [6.5, 53.5], sw, se, ne, n…
27 @test Granular.isPointInCell(ocean, 1, 1, [6.5, 53.5]) == true
28 @test Granular.getNonDimensionalCellCoordinates(ocean, 1, 1, [6.5, 5…
29 [.5, .5]
30 @test Granular.isPointInCell(ocean, 1, 1, [6.1, 53.5], sw, se, ne, n…
31 @test Granular.getNonDimensionalCellCoordinates(ocean, 1, 1, [6.1, 5…
32 [.1, .5]
33 @test Granular.isPointInCell(ocean, 1, 1, [6.0, 53.5], sw, se, ne, n…
34 @test Granular.getNonDimensionalCellCoordinates(ocean, 1, 1, [6.0, 5…
35 [.0, .5]
36 @test Granular.isPointInCell(ocean, 1, 1, [6.1, 53.7], sw, se, ne, n…
37 @test Granular.isPointInCell(ocean, 1, 1, [6.1, 53.9], sw, se, ne, n…
38 @test Granular.isPointInCell(ocean, 1, 1, [6.1, 53.99999], sw, se, n…
39 @test Granular.getNonDimensionalCellCoordinates(ocean, 1, 1, [6.1, 5…
40 [.1, .99999]
41 @test Granular.isPointInCell(ocean, 1, 1, [7.5, 53.5], sw, se, ne, n…
42 @test Granular.isPointInCell(ocean, 1, 1, [0.0, 53.5], sw, se, ne, n…
43 x_tilde, _ = Granular.getNonDimensionalCellCoordinates(ocean, 1, 1, …
44 @test x_tilde < 0.
45
46 @info "Testing conformal mapping methods"
47 @test Granular.conformalQuadrilateralCoordinates([0., 0.],
48 [5., 0.],
49 [5., 3.],
50 [0., 3.],
51 [2.5, 1.5]) ≈ [0.5,…
52 @test Granular.conformalQuadrilateralCoordinates([0., 0.],
53 [5., 0.],
54 [5., 3.],
55 [0., 3.],
56 [7.5, 1.5]) ≈ [1.5,…
57 @test Granular.conformalQuadrilateralCoordinates([0., 0.],
58 [5., 0.],
59 [5., 3.],
60 [0., 3.],
61 [7.5,-1.5]) ≈ [1.5,…
62 @test_throws ErrorException Granular.conformalQuadrilateralCoordinat…
63 …
64 …
65 …
66 …
67
68 @info "Checking cell content using conformal mapping methods"
69 @test Granular.isPointInCell(ocean, 1, 1, [6.4, 53.4], sw, se, ne, n…
70 method="Conformal") == true
71 @test Granular.isPointInCell(ocean, 1, 1, [6.1, 53.5], sw, se, ne, n…
72 method="Conformal") == true
73 @test Granular.isPointInCell(ocean, 1, 1, [6.0, 53.5], sw, se, ne, n…
74 method="Conformal") == true
75 @test Granular.isPointInCell(ocean, 1, 1, [6.1, 53.7], sw, se, ne, n…
76 method="Conformal") == true
77 @test Granular.isPointInCell(ocean, 1, 1, [6.1, 53.9], sw, se, ne, n…
78 method="Conformal") == true
79 @test Granular.isPointInCell(ocean, 1, 1, [6.1, 53.99999], sw, se, n…
80 method="Conformal") == true
81 @test Granular.isPointInCell(ocean, 1, 1, [7.5, 53.5], sw, se, ne, n…
82 method="Conformal") == false
83 @test Granular.isPointInCell(ocean, 1, 1, [0.0, 53.5], sw, se, ne, n…
84 method="Conformal") == false
85
86 @info "Testing bilinear interpolation scheme on conformal mapping"
87 ocean.u[1, 1, 1, 1] = 1.0
88 ocean.u[2, 1, 1, 1] = 1.0
89 ocean.u[2, 2, 1, 1] = 0.0
90 ocean.u[1, 2, 1, 1] = 0.0
91 val = [NaN, NaN]
92 Granular.bilinearInterpolation!(val, ocean.u[:,:,1,1], ocean.u[:,:,1…
93 .5, .5, 1, 1)
94 @time Granular.bilinearInterpolation!(val, ocean.u[:,:,1,1], ocean.u…
95 .5, 1, 1)
96 @test val[1] ≈ .5
97 @test val[2] ≈ .5
98 Granular.bilinearInterpolation!(val, ocean.u[:,:,1,1], ocean.u[:,:,1…
99 1, 1)
100 @test val[1] ≈ .0
101 @test val[2] ≈ .0
102 Granular.bilinearInterpolation!(val, ocean.u[:,:,1,1], ocean.u[:,:,1…
103 1, 1)
104 @test val[1] ≈ 1.
105 @test val[2] ≈ 1.
106 Granular.bilinearInterpolation!(val, ocean.u[:,:,1,1], ocean.u[:,:,1…
107 1, 1)
108 @test val[1] ≈ .75
109 @test val[2] ≈ .75
110 Granular.bilinearInterpolation!(val, ocean.u[:,:,1,1], ocean.u[:,:,1…
111 1, 1)
112 @test val[1] ≈ .25
113 @test val[2] ≈ .25
114
115 @info "Testing cell binning - Area-based approach"
116 @test Granular.findCellContainingPoint(ocean, [6.2,53.4], method="Ar…
117 @test Granular.findCellContainingPoint(ocean, [7.2,53.4], method="Ar…
118 @test Granular.findCellContainingPoint(ocean, [0.2,53.4], method="Ar…
119
120 @info "Testing cell binning - Conformal mapping"
121 @test Granular.findCellContainingPoint(ocean, [6.2,53.4], method="Co…
122 (1, 1)
123 @test Granular.findCellContainingPoint(ocean, [7.2,53.4], method="Co…
124 (2, 1)
125 @test Granular.findCellContainingPoint(ocean, [0.2, 53.4], method="C…
126 (0, 0)
127
128 sim = Granular.createSimulation()
129 sim.ocean = Granular.readOceanNetCDF("Baltic/00010101.ocean_month.nc…
130 "Baltic/ocean_hgrid.nc")
131 Granular.addGrainCylindrical!(sim, [6.5, 53.5], 10., 1., verbose=ver…
132 Granular.addGrainCylindrical!(sim, [6.6, 53.5], 10., 1., verbose=ver…
133 Granular.addGrainCylindrical!(sim, [7.5, 53.5], 10., 1., verbose=ver…
134 Granular.sortGrainsInGrid!(sim, sim.ocean, verbose=verbose)
135 @test sim.grains[1].ocean_grid_pos == [1, 1]
136 @test sim.grains[2].ocean_grid_pos == [1, 1]
137 @test sim.grains[3].ocean_grid_pos == [2, 1]
138 @test sim.ocean.grain_list[1, 1] == [1, 2]
139 @test sim.ocean.grain_list[2, 1] == [3]
140 end
141
142 @info "Testing ocean drag"
143 sim = Granular.createSimulation()
144 sim.ocean = Granular.createRegularOceanGrid([4, 4, 2], [4., 4., 2.])
145 sim.ocean.u[:,:,1,1] .= 5.
146 Granular.addGrainCylindrical!(sim, [2.5, 3.5], 1., 1., verbose=verbose)
147 Granular.addGrainCylindrical!(sim, [2.6, 2.5], 1., 1., verbose=verbose)
148 Granular.sortGrainsInGrid!(sim, sim.ocean, verbose=verbose)
149 if !Granular.hasNetCDF
150 ocean = sim.ocean
151 end
152 sim.time = ocean.time[1]
153 Granular.addOceanDrag!(sim)
154 @test sim.grains[1].force[1] > 0.
155 @test sim.grains[1].force[2] ≈ 0.
156 @test sim.grains[2].force[1] > 0.
157 @test sim.grains[2].force[2] ≈ 0.
158 sim.ocean.u[:,:,1,1] .= -5.
159 sim.ocean.v[:,:,1,1] .= 5.
160 Granular.addGrainCylindrical!(sim, [2.5, 3.5], 1., 1., verbose=verbose)
161 Granular.addGrainCylindrical!(sim, [2.6, 2.5], 1., 1., verbose=verbose)
162 Granular.sortGrainsInGrid!(sim, sim.ocean, verbose=verbose)
163 sim.time = ocean.time[1]
164 Granular.addOceanDrag!(sim)
165 @test sim.grains[1].force[1] < 0.
166 @test sim.grains[1].force[2] > 0.
167 @test sim.grains[2].force[1] < 0.
168 @test sim.grains[2].force[2] > 0.
169
170 @info "Testing curl function"
171 ocean.u[1, 1, 1, 1] = 1.0
172 ocean.u[2, 1, 1, 1] = 1.0
173 ocean.u[2, 2, 1, 1] = 0.0
174 ocean.u[1, 2, 1, 1] = 0.0
175 ocean.v[:, :, 1, 1] .= 0.0
176 sw = zeros(2)
177 se = zeros(2)
178 ne = zeros(2)
179 nw = zeros(2)
180 @test Granular.curl(ocean, .5, .5, 1, 1, 1, 1, sw, se, ne, nw) > 0.
181
182 ocean.u[1, 1, 1, 1] = 0.0
183 ocean.u[2, 1, 1, 1] = 0.0
184 ocean.u[2, 2, 1, 1] = 1.0
185 ocean.u[1, 2, 1, 1] = 1.0
186 ocean.v[:, :, 1, 1] .= 0.0
187 @test Granular.curl(ocean, .5, .5, 1, 1, 1, 1, sw, se, ne, nw) < 0.
188
189 @info "Testing atmosphere drag"
190 sim = Granular.createSimulation()
191 sim.atmosphere = Granular.createRegularAtmosphereGrid([4, 4, 2], [4., 4.…
192 atmosphere = Granular.createRegularAtmosphereGrid([4, 4, 2], [4., 4., 2.…
193 sim.atmosphere.u[:,:,1,1] .= 5.
194 Granular.addGrainCylindrical!(sim, [2.5, 3.5], 1., 1., verbose=verbose)
195 Granular.addGrainCylindrical!(sim, [2.6, 2.5], 1., 1., verbose=verbose)
196 Granular.sortGrainsInGrid!(sim, sim.atmosphere, verbose=verbose)
197 sim.time = ocean.time[1]
198 Granular.addAtmosphereDrag!(sim)
199 @test sim.grains[1].force[1] > 0.
200 @test sim.grains[1].force[2] ≈ 0.
201 @test sim.grains[2].force[1] > 0.
202 @test sim.grains[2].force[2] ≈ 0.
203 sim.atmosphere.u[:,:,1,1] .= -5.
204 sim.atmosphere.v[:,:,1,1] .= 5.
205 Granular.addGrainCylindrical!(sim, [2.5, 3.5], 1., 1., verbose=verbose)
206 Granular.addGrainCylindrical!(sim, [2.6, 2.5], 1., 1., verbose=verbose)
207 Granular.sortGrainsInGrid!(sim, sim.atmosphere, verbose=verbose)
208 sim.time = ocean.time[1]
209 Granular.addAtmosphereDrag!(sim)
210 @test sim.grains[1].force[1] < 0.
211 @test sim.grains[1].force[2] > 0.
212 @test sim.grains[2].force[1] < 0.
213 @test sim.grains[2].force[2] > 0.
214
215 @info "Testing curl function"
216 atmosphere.u[1, 1, 1, 1] = 1.0
217 atmosphere.u[2, 1, 1, 1] = 1.0
218 atmosphere.u[2, 2, 1, 1] = 0.0
219 atmosphere.u[1, 2, 1, 1] = 0.0
220 atmosphere.v[:, :, 1, 1] .= 0.0
221 @test Granular.curl(atmosphere, .5, .5, 1, 1, 1, 1) > 0.
222 @test Granular.curl(atmosphere, .5, .5, 1, 1, 1, 1, sw, se, ne, nw) > 0.
223
224 atmosphere.u[1, 1, 1, 1] = 0.0
225 atmosphere.u[2, 1, 1, 1] = 0.0
226 atmosphere.u[2, 2, 1, 1] = 1.0
227 atmosphere.u[1, 2, 1, 1] = 1.0
228 atmosphere.v[:, :, 1, 1] .= 0.0
229 @test Granular.curl(atmosphere, .5, .5, 1, 1, 1, 1) < 0.
230 @test Granular.curl(atmosphere, .5, .5, 1, 1, 1, 1, sw, se, ne, nw) < 0.
231
232
233 @info "Testing findEmptyPositionInGridCell"
234 @info "# Insert into empty cell"
235 sim = Granular.createSimulation()
236 sim.ocean = Granular.createRegularOceanGrid([4, 4, 2], [4., 4., 2.])
237 Granular.sortGrainsInGrid!(sim, sim.ocean, verbose=verbose)
238 pos = Granular.findEmptyPositionInGridCell(sim, sim.ocean, 1, 1, 0.5,
239 verbose=true)
240 @test pos != false
241 @test Granular.isPointInCell(sim.ocean, 1, 1, pos) == true
242
243 @info "# Insert into cell with one other ice floe"
244 sim = Granular.createSimulation()
245 sim.ocean = Granular.createRegularOceanGrid([4, 4, 2], [4., 4., 2.])
246 Granular.addGrainCylindrical!(sim, [.25, .25], .25, 1., verbose=verbose)
247 Granular.sortGrainsInGrid!(sim, sim.ocean, verbose=verbose)
248 pos = Granular.findEmptyPositionInGridCell(sim, sim.ocean, 1, 1, .25,
249 verbose=true)
250 @test pos != false
251 @test Granular.isPointInCell(sim.ocean, 1, 1, pos) == true
252
253 @info "# Insert into cell with two other grains"
254 sim = Granular.createSimulation()
255 sim.ocean = Granular.createRegularOceanGrid([4, 4, 2], [4., 4., 2.])
256 Granular.addGrainCylindrical!(sim, [.25, .25], .25, 1., verbose=verbose)
257 Granular.addGrainCylindrical!(sim, [.75, .75], .25, 1., verbose=verbose)
258 Granular.sortGrainsInGrid!(sim, sim.ocean, verbose=verbose)
259 pos = Granular.findEmptyPositionInGridCell(sim, sim.ocean, 1, 1, .25, n_…
260 verbose=true)
261 @test pos != false
262 @test Granular.isPointInCell(sim.ocean, 1, 1, pos) == true
263
264 @info "# Insert into full cell"
265 sim = Granular.createSimulation()
266 sim.ocean = Granular.createRegularOceanGrid([4, 4, 2], [4., 4., 2.])
267 Granular.addGrainCylindrical!(sim, [.25, .25], 1., 1., verbose=verbose)
268 Granular.addGrainCylindrical!(sim, [.75, .25], 1., 1., verbose=verbose)
269 Granular.addGrainCylindrical!(sim, [.25, .75], 1., 1., verbose=verbose)
270 Granular.addGrainCylindrical!(sim, [.75, .75], 1., 1., verbose=verbose)
271 Granular.sortGrainsInGrid!(sim, sim.ocean, verbose=verbose)
272 pos = Granular.findEmptyPositionInGridCell(sim, sim.ocean, 1, 1, 0.5,
273 verbose=false)
274 @test pos == false
275
276 @info "# Insert into empty cell"
277 sim = Granular.createSimulation()
278 sim.ocean = Granular.createRegularOceanGrid([4, 4, 2], [4., 4., 2.])
279 Granular.sortGrainsInGrid!(sim, sim.ocean, verbose=verbose)
280 pos = Granular.findEmptyPositionInGridCell(sim, sim.ocean, 2, 2, 0.5,
281 verbose=true)
282 @test pos != false
283 @test Granular.isPointInCell(sim.ocean, 2, 2, pos) == true
284
285 @info "# Insert into full cell"
286 sim = Granular.createSimulation()
287 sim.ocean = Granular.createRegularOceanGrid([4, 4, 2], [4., 4., 2.])
288 Granular.addGrainCylindrical!(sim, [1.5, 1.5], 1., 1., verbose=verbose)
289 Granular.addGrainCylindrical!(sim, [1.75, 1.5], 1., 1., verbose=verbose)
290 Granular.addGrainCylindrical!(sim, [1.5, 1.75], 1., 1., verbose=verbose)
291 Granular.addGrainCylindrical!(sim, [1.75, 1.75], 1., 1., verbose=verbose)
292 Granular.sortGrainsInGrid!(sim, sim.ocean, verbose=verbose)
293 pos = Granular.findEmptyPositionInGridCell(sim, sim.ocean, 2, 2, 0.5,
294 verbose=false)
295 @test pos == false
296
297 @info "Test default sorting with ocean/atmosphere grids"
298 sim = Granular.createSimulation()
299 sim.ocean = Granular.createRegularOceanGrid([4, 4, 2], [4., 4., 2.])
300 sim.atmosphere = Granular.createRegularAtmosphereGrid([4, 4, 2], [4., 4.…
301 Granular.addGrainCylindrical!(sim, [0.5, 0.5], .1, 1., verbose=verbose)
302 Granular.addGrainCylindrical!(sim, [0.7, 0.7], .1, 1., verbose=verbose)
303 Granular.addGrainCylindrical!(sim, [2.6, 2.5], .1, 1., verbose=verbose)
304 Granular.sortGrainsInGrid!(sim, sim.ocean, verbose=verbose)
305 Granular.setTimeStep!(sim)
306 Granular.setTotalTime!(sim, 1.0)
307 Granular.run!(sim, single_step=true, verbose=verbose)
308 @test sim.atmosphere.collocated_with_ocean_grid == false
309 @test sim.grains[1].ocean_grid_pos == [1, 1]
310 @test sim.grains[2].ocean_grid_pos == [1, 1]
311 @test sim.grains[3].ocean_grid_pos == [3, 3]
312 @test sim.ocean.grain_list[1, 1] == [1, 2]
313 @test sim.ocean.grain_list[2, 2] == []
314 @test sim.ocean.grain_list[3, 3] == [3]
315 @test sim.grains[1].atmosphere_grid_pos == [1, 1]
316 @test sim.grains[2].atmosphere_grid_pos == [1, 1]
317 @test sim.grains[3].atmosphere_grid_pos == [3, 3]
318 @test sim.atmosphere.grain_list[1, 1] == [1, 2]
319 @test sim.atmosphere.grain_list[2, 2] == []
320 @test sim.atmosphere.grain_list[3, 3] == [3]
321
322 @info "Test optimization when ocean/atmosphere grids are collocated"
323 sim = Granular.createSimulation()
324 sim.ocean = Granular.createRegularOceanGrid([4, 4, 2], [4., 4., 2.])
325 sim.atmosphere = Granular.createRegularAtmosphereGrid([4, 4, 2], [4., 4.…
326 Granular.addGrainCylindrical!(sim, [0.5, 0.5], .1, 1., verbose=verbose)
327 Granular.addGrainCylindrical!(sim, [0.7, 0.7], .1, 1., verbose=verbose)
328 Granular.addGrainCylindrical!(sim, [2.6, 2.5], .1, 1., verbose=verbose)
329 Granular.sortGrainsInGrid!(sim, sim.ocean, verbose=verbose)
330 Granular.setTimeStep!(sim)
331 Granular.setTotalTime!(sim, 1.0)
332 Granular.run!(sim, single_step=true, verbose=false)
333 @test sim.atmosphere.collocated_with_ocean_grid == true
334 @test sim.grains[1].ocean_grid_pos == [1, 1]
335 @test sim.grains[2].ocean_grid_pos == [1, 1]
336 @test sim.grains[3].ocean_grid_pos == [3, 3]
337 @test sim.ocean.grain_list[1, 1] == [1, 2]
338 @test sim.ocean.grain_list[2, 2] == []
339 @test sim.ocean.grain_list[3, 3] == [3]
340 @test sim.grains[1].atmosphere_grid_pos == [1, 1]
341 @test sim.grains[2].atmosphere_grid_pos == [1, 1]
342 @test sim.grains[3].atmosphere_grid_pos == [3, 3]
343 @test sim.atmosphere.grain_list[1, 1] == [1, 2]
344 @test sim.atmosphere.grain_list[2, 2] == []
345 @test sim.atmosphere.grain_list[3, 3] == [3]
346
347 @info "Testing automatic grid-size adjustment"
348 # ocean grid
349 sim = Granular.createSimulation()
350 @test_throws ErrorException Granular.fitGridToGrains!(sim, sim.ocean)
351 sim = Granular.createSimulation()
352 Granular.addGrainCylindrical!(sim, [0.0, 1.5], .5, 1., verbose=verbose)
353 Granular.addGrainCylindrical!(sim, [2.5, 5.5], 1., 1., verbose=verbose)
354 Granular.fitGridToGrains!(sim, sim.ocean, verbose=true)
355 @test sim.ocean.xq[1,1] ≈ -.5
356 @test sim.ocean.yq[1,1] ≈ 1.0
357 @test sim.ocean.xq[end,end] ≈ 3.5
358 @test sim.ocean.yq[end,end] ≈ 6.5
359
360 sim = Granular.createSimulation()
361 Granular.addGrainCylindrical!(sim, [0.5, 1.5], .5, 1., verbose=verbose)
362 Granular.addGrainCylindrical!(sim, [2.5, 4.5], .5, 1., verbose=verbose)
363 Granular.fitGridToGrains!(sim, sim.ocean, verbose=true)
364 @test sim.ocean.xq[1,1] ≈ 0.
365 @test sim.ocean.yq[1,1] ≈ 1.
366 @test sim.ocean.xq[end,end] ≈ 3.
367 @test sim.ocean.yq[end,end] ≈ 5.
368
369 sim = Granular.createSimulation()
370 Granular.addGrainCylindrical!(sim, [0.5, 0.0], .5, 1., verbose=verbose)
371 Granular.addGrainCylindrical!(sim, [2.0, 4.0], 1., 1., verbose=verbose)
372 Granular.fitGridToGrains!(sim, sim.ocean, padding=.5, verbose=true)
373 @test sim.ocean.xq[1,1] ≈ -.5
374 @test sim.ocean.yq[1,1] ≈ -1.
375 @test sim.ocean.xq[end,end] ≈ 3.5
376 @test sim.ocean.yq[end,end] ≈ 5.5
377
378 # atmosphere grid
379 sim = Granular.createSimulation()
380 @test_throws ErrorException Granular.fitGridToGrains!(sim, sim.atmospher…
381 sim = Granular.createSimulation()
382 Granular.addGrainCylindrical!(sim, [0.0, 1.5], .5, 1., verbose=verbose)
383 Granular.addGrainCylindrical!(sim, [2.5, 5.5], 1., 1., verbose=verbose)
384 Granular.fitGridToGrains!(sim, sim.atmosphere, verbose=true)
385 @test sim.atmosphere.xq[1,1] ≈ -.5
386 @test sim.atmosphere.yq[1,1] ≈ 1.0
387 @test sim.atmosphere.xq[end,end] ≈ 3.5
388 @test sim.atmosphere.yq[end,end] ≈ 6.5
389
390 sim = Granular.createSimulation()
391 Granular.addGrainCylindrical!(sim, [0.5, 1.5], .5, 1., verbose=verbose)
392 Granular.addGrainCylindrical!(sim, [2.5, 4.5], .5, 1., verbose=verbose)
393 Granular.fitGridToGrains!(sim, sim.atmosphere, verbose=true)
394 @test sim.atmosphere.xq[1,1] ≈ 0.
395 @test sim.atmosphere.yq[1,1] ≈ 1.
396 @test sim.atmosphere.xq[end,end] ≈ 3.
397 @test sim.atmosphere.yq[end,end] ≈ 5.
398
399 sim = Granular.createSimulation()
400 Granular.addGrainCylindrical!(sim, [0.5, 0.0], .5, 1., verbose=verbose)
401 Granular.addGrainCylindrical!(sim, [2.0, 4.0], 1., 1., verbose=verbose)
402 Granular.fitGridToGrains!(sim, sim.atmosphere, padding=.5, verbose=true)
403 @test sim.atmosphere.xq[1,1] ≈ -.5
404 @test sim.atmosphere.yq[1,1] ≈ -1.
405 @test sim.atmosphere.xq[end,end] ≈ 3.5
406 @test sim.atmosphere.yq[end,end] ≈ 5.5
407
408 @info "Testing porosity estimation"
409 sim = Granular.createSimulation()
410 dx = 1.0; dy = 1.0
411 nx = 3; ny = 3
412 sim.ocean = Granular.createRegularOceanGrid([nx, ny, 1], [nx*dx, ny*dy, …
413 Granular.addGrainCylindrical!(sim, [1.5, 1.5], 0.5*dx, 1.0)
414 A_particle = π*(0.5*dx)^2
415 A_cell = dx^2
416 Granular.findPorosity!(sim, sim.ocean)
417 @test sim.ocean.porosity ≈ [1. 1. 1.;
418 1. (A_cell - A_particle)/A_cell 1.;
419 1. 1. 1]
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.