Introduction
Introduction Statistics Contact Development Disclaimer Help
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
+
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.