That's a really nice solution, thanks.

Scott

On Thursday, 13 August 2015 22:19:35 UTC+1, Tim Holy wrote:
>
> 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 
>
>

Reply via email to