There are several possible solutions, but one is to use the new custom serialization facilities to discard/recreate the interp_func when you save/load the object: https://github.com/JuliaLang/JLD.jl/blob/master/doc/jld.md#custom-serialization
--Tim On Thursday, August 13, 2015 12:37:59 PM Scott T wrote: > Hi everyone, > > I'm wondering what the most Julian way to handle the following situation > is. I know it can't be complicated, but am not quite sure how to go about > it. > > I'm doing some simple interpolation using Dierckx.jl > <https://github.com/kbarbary/Dierckx.jl>, getting densities of materials > from a pressure-temperature pair. > > I have a type which holds pressure and temperature axes, and density values > on the (logarithmic) grid that these define: > > type LogPTGridEOS > logP::LinSpace{Float64} > logT::LinSpace{Float64} > densities::Matrix{Float64} > end > > I want to be able to easily store and load instances of this type, and am > using JLD.jl <https://github.com/JuliaLang/JLD.jl> for this. This lets me > save and load from HDF5 ".jld" files, which preserve the type information > (nice). > > To interpolate on the grid, I first need to make an interpolating function, > then evaluate it: > > function call(eos::LogPTGridEOS, P, T) > interp_func = Dierckx.Spline2D(collect(eos.logP), collect(eos.logT), eos > .densities) # collect because Dierckx needs arrays > interpolated_density = Dierckx.evaluate(interp_func, log10(P), log10(T)) > # remember this is a log-log grid > end > > But the interpolating function made in that first line could just be called > over and over again, avoiding any overhead from reconstructing it (the slow > bit). How can I best cache this function for re-use? I considered storing > it in the type itself by adding an "interp_func" field, but this messes up > saving it via JLD since JLD can't save a pointer. Am I right in thinking I > should make a wrapper type which holds the original type plus a reference > to the interpolation function, or is there a nicer way to do this? > > Cheers, > Scott
