Skip to content

Instantly share code, notes, and snippets.

@pnavaro
Created January 20, 2020 15:48
Show Gist options
  • Save pnavaro/fa5c9e654165272083bf64a26466f21a to your computer and use it in GitHub Desktop.
Save pnavaro/fa5c9e654165272083bf64a26466f21a to your computer and use it in GitHub Desktop.
Save a problem with Julia with JLD
using JLD
abstract type AbstractSolver end
struct RK4 <: AbstractSolver
param
end
struct Problem
param :: NamedTuple
solver :: AbstractSolver
end
struct ProblemSave
param :: Dict
solver :: Symbol
ProblemSave( param, solver) = new( param, solver)
end
import Base.convert
function convert(::Type{ProblemSave}, p :: Problem )
param = Dict(pairs(p.param))
solver = Symbol(typeof(p.solver))
ProblemSave(param, solver)
end
function convert(::Type{Problem}, p :: ProblemSave)
@show param = (;p.param...)
@show p.solver
if p.solver == :RK4
solver = RK4(param)
end
Problem(param, solver)
end
import JLD.save
function save(p::Problem, name::String)
filename = string(name,".jld")
JLD.save(filename, name, convert(ProblemSave, p))
end
import JLD.load
function load(name::String)
convert(Problem, JLD.load(string(name,".jld"), name ))
end
param = ( ϵ = 1/2,
N = 2^10,
L = 10,
T = 5,
dt = 0.01,
theta = 1)
problem = Problem( param, RK4(param) )
p_dump = convert(ProblemSave, problem )
p_load = convert(Problem, p_dump )
save(problem, "problem")
p_load = load("problem")
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment