| tfix various errors during test and wall initialization - Granular.jl - Julia p… | |
| git clone git://src.adamsgaard.dk/Granular.jl | |
| Log | |
| Files | |
| Refs | |
| README | |
| LICENSE | |
| --- | |
| commit ccd9921a7fd354df82bcfcfb115844cc26278beb | |
| parent a9d41bf6abc198818ed79d3ff76f9be05bd9a80b | |
| Author: Anders Damsgaard <[email protected]> | |
| Date: Tue, 14 Nov 2017 14:58:58 -0500 | |
| fix various errors during test and wall initialization | |
| Diffstat: | |
| M docs/src/man/getting_started.md | 4 ++-- | |
| M src/simulation.jl | 4 ++-- | |
| M src/wall.jl | 61 +++++++++++++++++++++++++++++… | |
| M test/memory-management.jl | 4 ++-- | |
| M test/wall.jl | 20 ++++++++++++++++++-- | |
| 5 files changed, 82 insertions(+), 11 deletions(-) | |
| --- | |
| diff --git a/docs/src/man/getting_started.md b/docs/src/man/getting_started.md | |
| t@@ -16,14 +16,14 @@ The relevant functions are all contained in the `Granular`… | |
| imported with `import Granular`. *Note:* As per Julia conventions, functions | |
| that contain an exclamation mark (!) modify the values of the arguments. | |
| -Any of the functions called below are documented in the source code, and their | |
| +All of the functions called below are documented in the source code, and their | |
| documentation can be found in the [Public API Index](@ref main-index) in the | |
| online documentation, or simply from the Julia shell by typing `?<function | |
| name>`. An example: | |
| ```julia-repl | |
| julia> ?Granular.createSimulation | |
| - createSimulation([id::String="unnamed"]) | |
| + createSimulation([id]) | |
| Create a simulation object to contain all relevant variables such as tempora… | |
| parameters, fluid grids, grains, and contacts. The parameter id is used to | |
| diff --git a/src/simulation.jl b/src/simulation.jl | |
| t@@ -2,7 +2,7 @@ | |
| export createSimulation | |
| """ | |
| - createSimulation([id::String="unnamed"]) | |
| + createSimulation([id]) | |
| Create a simulation object to contain all relevant variables such as temporal | |
| parameters, fluid grids, grains, and contacts. The parameter `id` is used to | |
| t@@ -227,7 +227,7 @@ Add an `wall` to the `simulation` object. If `verbose` is… | |
| confirmation message will be printed to stdout. | |
| """ | |
| function addWall!(simulation::Simulation, | |
| - grain::WallLinearFrictionless, | |
| + wall::WallLinearFrictionless, | |
| verbose::Bool = false) | |
| push!(simulation.walls, wall) | |
| diff --git a/src/wall.jl b/src/wall.jl | |
| t@@ -87,7 +87,7 @@ function addWallLinearFrictionless!(simulation::Simulation, | |
| # if not set, set wall mass to equal the mass of all grains. | |
| if isnan(mass) | |
| - if length(simulation.grains < 1) | |
| + if length(simulation.grains) < 1 | |
| error("If wall mass is not specified, walls should be added " * | |
| "after grains have been added to the simulation.") | |
| end | |
| t@@ -100,13 +100,13 @@ function addWallLinearFrictionless!(simulation::Simulati… | |
| # if not set, set wall thickness to equal largest grain thickness | |
| if isnan(thickness) | |
| - if length(simulation.grains < 1) | |
| + if length(simulation.grains) < 1 | |
| error("If wall thickness is not specified, walls should be added "… | |
| "after grains have been added to the simulation.") | |
| end | |
| thickness = -Inf | |
| for grain in simulation.grains | |
| - if grain.thickess > thickness | |
| + if grain.thickness > thickness | |
| thickness = grain.thickness | |
| end | |
| end | |
| t@@ -128,3 +128,58 @@ function addWallLinearFrictionless!(simulation::Simulatio… | |
| nothing | |
| end | |
| +export getWallSurfaceArea | |
| +""" | |
| + getWallSurfaceArea(simulation, wall_index) | |
| + | |
| +Returns the surface area of the wall given the grid size and its index. | |
| + | |
| +# Arguments | |
| +* `simulation::Simulation`: the simulation object containing the wall. | |
| +* `wall_index::Integer=1`: the wall number in the simulation object. | |
| +""" | |
| +function getWallSurfaceArea(sim::Simulation, wall_index::Integer) | |
| + | |
| + if sim.walls[wall_index].normal ≈ [1., 0.] | |
| + return (sim.ocean.yq[end,end] - sim.ocean.yq[1,1]) * | |
| + sim.walls[wall_index].thickness | |
| + elseif sim.walls[wall_index].normal ≈ [0., 1.] | |
| + return (sim.ocean.xq[end,end] - sim.ocean.xq[1,1]) * | |
| + sim.walls[wall_index].thickness | |
| + else | |
| + error("Wall normal not understood") | |
| + end | |
| + nothing | |
| +end | |
| + | |
| +export getWallNormalStress | |
| +""" | |
| + getWallNormalStress(simulation[, wall_index, stress_type]) | |
| + | |
| +Returns the current "effective" or "defined" normal stress on the wall with | |
| +index `wall_index` inside the `simulation` object. The returned value is given | |
| +in Pascal. | |
| + | |
| +# Arguments | |
| +* `simulation::Simulation`: the simulation object containing the wall. | |
| +* `wall_index::Integer=1`: the wall number in the simulation object. | |
| +* `stress_type::String="effective"`: the normal-stress type to return. The | |
| + defined value corresponds to the normal stress that the wall is asked to | |
| + uphold. The effective value is the actual current normal stress. Usually, | |
| + the magnitude of the effective normal stress fluctuates around the defined | |
| + normal stress. | |
| +""" | |
| +function getWallNormalStress(sim::Simulation; | |
| + wall_index::Integer=1, | |
| + stress_type::String="effective") | |
| + if stress_type == "defined" | |
| + return sim.walls[wall_index].normal_stress | |
| + | |
| + elseif stress_type == "effective" | |
| + return sim.walls[wall_index].force / getWallSurfaceArea(sim, wall_inde… | |
| + sim.ocean) | |
| + else | |
| + error("stress_type not understood, should be 'effective' or 'defined'"… | |
| + " but is '$stress_type'.") | |
| + end | |
| +end | |
| diff --git a/test/memory-management.jl b/test/memory-management.jl | |
| t@@ -5,8 +5,8 @@ info("#### $(basename(@__FILE__)) ####") | |
| info("Testing memory footprint of Granular types") | |
| sim = Granular.createSimulation() | |
| -empty_sim_size = 96 | |
| -empty_sim_size_recursive = 544 | |
| +empty_sim_size = 104 | |
| +empty_sim_size_recursive = 552 | |
| @test sizeof(sim) == empty_sim_size | |
| @test Base.summarysize(sim) == empty_sim_size_recursive | |
| diff --git a/test/wall.jl b/test/wall.jl | |
| t@@ -28,6 +28,22 @@ Granular.addGrainCylindrical!(sim, [ 0., 0.], 10., 2., verb… | |
| sim.grains[1].mass = 1.0 | |
| Granular.addWallLinearFrictionless!(sim, [1., 0.], 1., verbose=true) | |
| @test length(sim.walls) == 1 | |
| -@test sim.walls.mass ≈ 1.0 | |
| -@test sim.walls.mass ≈ 2.0 | |
| +@test sim.walls[1].mass ≈ 1.0 | |
| +@test sim.walls[1].thickness ≈ 2.0 | |
| + | |
| +info("Test wall surface area and defined normal stress") | |
| +sim = Granular.createSimulation(id="test") | |
| +sim.ocean = Granular.createRegularOceanGrid([1, 1, 1], [10., 20., 1.0]) | |
| +Granular.addGrainCylindrical!(sim, [ 0., 0.], 10., 2., verbose=false) | |
| +sim.grains[1].mass = 1.0 | |
| +Granular.addWallLinearFrictionless!(sim, [1., 0.], 1., verbose=true) | |
| +Granular.addWallLinearFrictionless!(sim, [0., 1.], 1., verbose=true) | |
| +@test length(sim.walls) == 2 | |
| +@test sim.walls[1].mass ≈ 1.0 | |
| +@test sim.walls[1].thickness ≈ 2.0 | |
| +@test sim.walls[2].mass ≈ 1.0 | |
| +@test sim.walls[2].thickness ≈ 2.0 | |
| +@test Granular.getWallSurfaceArea(sim, 1) ≈ 20.0*2.0 | |
| +@test Granular.getWallSurfaceArea(sim, 2) ≈ 10.0*2.0 | |
| + | |