commit e4960dd35846684e7a4d91b8b0281d5cd68d5c6b
parent d2b4ce560b58bcdec2edd337060fd84b82eab556
Author: Anders Damsgaard <anders@adamsgaard.dk>
Date: Wed, 12 Sep 2018 20:10:42 +0200
Merge pull request #7 from anders-dc/jld2
Switch from JLD to JLD2
Diffstat:
8 files changed, 61 insertions(+), 102 deletions(-)
diff --git a/REQUIRE b/REQUIRE
@@ -1,3 +1,4 @@
julia 1.0
WriteVTK
Documenter
+JLD2
diff --git a/docs/src/man/installation.md b/docs/src/man/installation.md
@@ -30,9 +30,7 @@ julia> Pkg.add("Granular")
```
This will install the contents of this repository in the folder
-`~/.julia/v$(JULIA_VERSION)/Granular` and install its requirements. The
-package [JLD](https://github.com/JuliaIO/JLD.jl) is used for model restarts and
-is recommended but not required, and is thus not automatically installed.
+`~/.julia/v$(JULIA_VERSION)/Granular` and install its requirements.
## Development installation
If desired, the current developmental version of the [Granular.jl Github
diff --git a/examples/shear.jl b/examples/shear.jl
@@ -1,7 +1,7 @@
#/usr/bin/env julia
ENV["MPLBACKEND"] = "Agg"
import Granular
-import JLD
+import JLD2
import PyPlot
################################################################################
@@ -101,8 +101,7 @@ Granular.run!(sim)
Granular.render(sim, trim=false)
# Save the simulation state to disk in case we need to reuse the current state
-# This step requires the JLD package (Pkg.add("JLD"))
-#Granular.writeSimulation(sim)
+Granular.writeSimulation(sim)
# Also copy the simulation in memory, in case we want to loop over different
# normal stresses below:
@@ -193,7 +192,7 @@ Granular.render(sim, trim=false)
# Save the simulation state to disk in case we need to reuse the consolidated
# state (e.g. different shear velocities below)
-#Granular.writeSimulation(sim)
+Granular.writeSimulation(sim)
# Also copy the simulation in memory, in case we want to loop over different
# normal stresses below:
@@ -274,7 +273,7 @@ end
Granular.render(sim, trim=false)
# Save the simulation state to disk in case we need to reuse the sheared state
-#Granular.writeSimulation(sim)
+Granular.writeSimulation(sim)
# Plot time vs. shear stress and dilation
PyPlot.subplot(211)
diff --git a/src/io.jl b/src/io.jl
@@ -1,22 +1,9 @@
import WriteVTK
import Pkg
import Dates
+import JLD2
using DelimitedFiles
-hasJLD = false
-if VERSION < v"0.7.0-alpha"
- if typeof(Pkg.installed("JLD")) == VersionNumber
- import JLD
- hasJLD = true
- end
-else
- import Pkg
- if haskey(Pkg.installed(), "JLD")
- import JLD
- hasJLD = true
- end
-end
-
## IO functions
export writeSimulation
@@ -26,7 +13,7 @@ export writeSimulation
folder::String=".",
verbose::Bool=true)
-Write all content from `Simulation` to disk in JDL format. If the `filename`
+Write all content from `Simulation` to disk in JLD2 format. If the `filename`
parameter is not specified, it will be saved to a subdirectory under the current
directory named after the simulation identifier `simulation.id`.
"""
@@ -34,24 +21,17 @@ function writeSimulation(simulation::Simulation;
filename::String="",
folder::String=".",
verbose::Bool=true)
- if !hasJLD
- @warn "Package JLD not found. " *
- "Simulation save/read not supported. " *
- "Please install JLD and its " *
- "requirements with `Pkg.add(\"JLD\")`."
- else
- if filename == ""
- folder = folder * "/" * simulation.id
- mkpath(folder)
- filename = string(folder, "/", simulation.id, ".",
- simulation.file_number, ".jld")
- end
+ if filename == ""
+ folder = folder * "/" * simulation.id
+ mkpath(folder)
+ filename = string(folder, "/", simulation.id, ".",
+ simulation.file_number, ".jld2")
+ end
- JLD.save(filename, "simulation", simulation)
+ JLD2.@save(filename, simulation)
- if verbose
- @info "simulation written to $filename"
- end
+ if verbose
+ @info "simulation written to $filename"
end
nothing
end
@@ -61,7 +41,7 @@ export readSimulation
readSimulation(filename::String="";
verbose::Bool=true)
-Return `Simulation` content read from disk using the JDL format.
+Return `Simulation` content read from disk using the JLD2 format.
# Arguments
* `filename::String`: path to file on disk containing the simulation
@@ -70,18 +50,9 @@ Return `Simulation` content read from disk using the JDL format.
"""
function readSimulation(filename::String;
verbose::Bool=true)
- if !hasJLD
- @warn "Package JLD not found. " *
- "Simulation save/read not supported. " *
- "Please install JLD and its " *
- "requirements with `Pkg.add(\"JLD\")`."
- nothing
- else
- return JLD.load(filename, "simulation")
- if verbose
- @info "Read simulation from $filename"
- end
- end
+ simulation = createSimulation()
+ JLD2.@load(filename, simulation)
+ return simulation
end
"""
readSimulation(simulation::Simulation;
@@ -101,21 +72,16 @@ Read the simulation state from disk and return as new simulation object.
function readSimulation(simulation::Simulation;
step::Integer = -1,
verbose::Bool = true)
- if !hasJLD
- @warn "Package JLD not found. Simulation save/read not supported. " *
- "Please install JLD and its " *
- "requirements with `Pkg.add(\"JLD\")`."
- nothing
- else
- if step == -1
- step = readSimulationStatus(simulation)
- end
- filename = string(simulation.id, "/", simulation.id, ".$step.jld")
- if verbose
- @info "Read simulation from $filename"
- end
- return JLD.load(filename, "simulation")
+ if step == -1
+ step = readSimulationStatus(simulation)
+ end
+ filename = string(simulation.id, "/", simulation.id, ".$step.jld2")
+ if verbose
+ @info "Read simulation from $filename"
end
+ simulation = createSimulation()
+ JLD2.@load(filename, simulation)
+ return simulation
end
export writeSimulationStatus
@@ -165,7 +131,7 @@ function readSimulationStatus(simulation_id::String;
if verbose
@info "$simulation_id:\n" *
" time: $(data[1]) s\n" *
- " complete: $(data[2])%\n" *
+ " complete: $(abs(data[2]))%\n" *
" last output file: $(Int(round(data[3])))\n"
end
return Int(round(data[3]))
@@ -1225,7 +1191,7 @@ function removeSimulationFiles(simulation::Simulation; folder::String=".")
run(`bash -c "rm -rf $(folder)/$(simulation.id).*.vtp"`)
run(`bash -c "rm -rf $(folder)/$(simulation.id).*.vts"`)
run(`bash -c "rm -rf $(folder)/$(simulation.id).status.txt"`)
- run(`bash -c "rm -rf $(folder)/$(simulation.id).*.jld"`)
+ run(`bash -c "rm -rf $(folder)/$(simulation.id).*.jld2"`)
run(`bash -c "rm -rf $(folder)/$(simulation.id).py"`)
run(`bash -c "rm -rf $(folder)/$(simulation.id).avi"`)
run(`bash -c "rm -rf $(folder)/$(simulation.id).*.png"`)
diff --git a/src/simulation.jl b/src/simulation.jl
@@ -61,7 +61,7 @@ export run!
show_file_output = true,
single_step = false,
temporal_integration_method = "Three-term Taylor"],
- write_jld = false)
+ write_jld2 = false)
Run the `simulation` through time until `simulation.time` equals or exceeds
`simulatim.time_total`. This function requires that all grains are added to
@@ -85,7 +85,7 @@ to disk.
is increased accordingly.
* `temporal_integration_method::String="Three-term Taylor"`: type of integration
method to use. See `updateGrainKinematics` for details.
-* `write_jld::Bool=false`: write simulation state to disk as JLD files (see
+* `write_jld2::Bool=false`: write simulation state to disk as JLD2 files (see
`Granular.writeSimulation(...)` whenever saving VTK output.
"""
function run!(simulation::Simulation;
@@ -94,7 +94,7 @@ function run!(simulation::Simulation;
show_file_output::Bool=true,
single_step::Bool=false,
temporal_integration_method::String="Three-term Taylor",
- write_jld::Bool=false)
+ write_jld2::Bool=false)
if single_step && simulation.time >= simulation.time_total
simulation.time_total += simulation.time_step
@@ -130,7 +130,7 @@ function run!(simulation::Simulation;
if show_file_output
println()
end
- if write_jld
+ if write_jld2
writeSimulation(simulation, verbose=show_file_output)
end
writeVTK(simulation, verbose=show_file_output)
diff --git a/test/jld.jl b/test/jld.jl
@@ -1,29 +0,0 @@
-#!/usr/bin/env julia
-
-@info "Determining if JLD is installed"
-if Granular.hasJLD
- @info "JLD found, proceeding with JLD-specific tests"
-
- @info "Writing simple simulation to JLD file"
- sim = Granular.createSimulation(id="test")
- Granular.addGrainCylindrical!(sim, [ 0., 0.], 10., 1., verbose=false)
- Granular.addGrainCylindrical!(sim, [18., 0.], 10., 1., verbose=false)
- sim.ocean = Granular.createRegularOceanGrid([10, 20, 5], [10., 25., 2.])
- Granular.findContacts!(sim, method="all to all")
- Granular.writeVTK(sim, verbose=false)
-
- Granular.writeSimulation(sim)
- Granular.writeSimulationStatus(sim)
-
- @info "Reading from JLD file by specifying the input file name"
- sim2 = Granular.readSimulation("./test/test.1.jld")
- Granular.compareSimulations(sim, sim2)
-
- @info "Reading and overwriting from JLD file by simulation id"
- sim3 = Granular.createSimulation("test")
- @test 1 == Granular.readSimulationStatus(sim3)
- sim3 = Granular.readSimulation(sim3)
- Granular.compareSimulations(sim, sim3)
-
- rm("./test/test.1.jld")
-end
diff --git a/test/jld2.jl b/test/jld2.jl
@@ -0,0 +1,24 @@
+#!/usr/bin/env julia
+
+@info "Writing simple simulation to JLD2 file"
+sim = Granular.createSimulation(id="test")
+Granular.addGrainCylindrical!(sim, [ 0., 0.], 10., 1., verbose=false)
+Granular.addGrainCylindrical!(sim, [18., 0.], 10., 1., verbose=false)
+sim.ocean = Granular.createRegularOceanGrid([10, 20, 5], [10., 25., 2.])
+Granular.findContacts!(sim, method="all to all")
+Granular.writeVTK(sim, verbose=false)
+
+Granular.writeSimulation(sim)
+Granular.writeSimulationStatus(sim)
+
+@info "Reading from JLD2 file by specifying the input file name"
+sim2 = Granular.readSimulation("./test/test.1.jld2")
+Granular.compareSimulations(sim, sim2)
+
+@info "Reading and overwriting from JLD2 file by simulation id"
+sim3 = Granular.createSimulation("test")
+@test 1 == Granular.readSimulationStatus(sim3)
+sim3 = Granular.readSimulation(sim3)
+Granular.compareSimulations(sim, sim3)
+
+rm("./test/test.1.jld2")
diff --git a/test/runtests.jl b/test/runtests.jl
@@ -26,4 +26,4 @@ run_test("temporal.jl")
if Granular.hasNetCDF
run_test("netcdf.jl")
end
-run_test("jld.jl")
+run_test("jld2.jl")