class CodeRunner::Trinity::NetcdfSmartReader

Public Class Methods

dimensions() click to toggle source
# File lib/trinitycrmod/read_netcdf.rb, line 103
def self.dimensions
  ['t','tspec', 'iter', 'rad', 'cc', 'mrow', 'mcol', 'ivar', 'jac', 'grad', 'eval', 'cegrid', 'job', 'conv']
end
new(file) click to toggle source
# File lib/trinitycrmod/read_netcdf.rb, line 40
def initialize(file)
  @file = file
end

Public Instance Methods

axiskit(variable, options) click to toggle source
# File lib/trinitycrmod/read_netcdf.rb, line 107
def axiskit(variable, options)
  case variable
  when 'mrow', 'mcol', 'ivar', 'tspec', 'iter', 'jac', 'grad', 'eval', 'job', 'conv'
    return GraphKit::AxisKit.autocreate(
      data: GSL::Vector.linspace(1, 
        sz=
          (de=dim_end(variable,options); de<0 ?  de+@file.dim(variable).length : de) - 
          (ds=dim_start(variable,options); ds<0 ?  ds+@file.dim(variable).length : ds) + 1, 
        sz), title: variable)
  end
  GraphKit::AxisKit.autocreate(data: read_variable(variable, options), units: @file.var(variable).att('units').get, title: @file.var(variable).att('description').get.sub(/(,|summed|average).*$/, '').sub(/[vV]alues of (the )?/, '').sub(/ coordinate/, '').sub(/.*rho.*The definition.*/, 'rho'))
end
check_no_r(non_flat_dims) click to toggle source
# File lib/trinitycrmod/read_netcdf.rb, line 127
def check_no_r(non_flat_dims)
  raise "Please specify the r index for real or imaginary" if non_flat_dims.include? @file.dim('r')
end
dim_end(name, options) click to toggle source
# File lib/trinitycrmod/read_netcdf.rb, line 89
def dim_end(name, options)
  sym = name.to_sym
  if i=options[sym + :_index] or i=options[sym]
    return i-1
  elsif i=options[sym + :_element]
    return i
  elsif i=options[sym + :max]
    #if sym == :conv
      #return [i, @file.var('conv_final')
    return i
  else
    return -1
  end
end
dim_start(name, options) click to toggle source
# File lib/trinitycrmod/read_netcdf.rb, line 74
def dim_start(name, options)
  sym = name.to_sym
  if i=options[sym + :_index] or i = options[sym]
    return i-1
  elsif i=options[sym + :_element]
    return i
  elsif i=options[sym + :min]
    return i
  else
    return 0
  end
end
dimension_variable_name(n) click to toggle source
# File lib/trinitycrmod/read_netcdf.rb, line 119
def dimension_variable_name(n)
  case n
  when *self.class.dimensions
    n
  else
    raise "Unknown dimension #{n}"
  end
end
dimensions(varname) click to toggle source
# File lib/trinitycrmod/read_netcdf.rb, line 43
def dimensions(varname)
  #p 'varname', varname
  raise "Unknown variable #{varname}" unless @file.var(varname)
  @file.var(varname).dims
end
ends(dims, options) click to toggle source
# File lib/trinitycrmod/read_netcdf.rb, line 86
def ends(dims, options)
  dims.map{|d| dim_end(d.name, options)}
end
graphkit(variable, options) click to toggle source
# File lib/trinitycrmod/read_netcdf.rb, line 130
def graphkit(variable, options)
  non_flat_dims=dimensions(variable).find_all{|dim| dim_start(dim.name, options) != dim_end(dim.name, options) and dim.length != 1}
  check_no_r(non_flat_dims)
  axiskits = non_flat_dims.map{|dim| dimvar = dimension_variable_name(dim.name); axiskit(dimvar, options)} + [axiskit(variable, options)]
  hash = {}
  axes = [:x, :y, :z, :f]
  axiskits.each_with_index{|ax, i| hash[axes[i]] = ax}
  kit = GraphKit.autocreate(hash)
  opts = options.dup
  opts.delete(:modify_variable)
  opts.delete(:graphkit_name)
  #kit.data[0].title += " with options: " + opts.to_s
  kit.data[0].title += " " + opts.to_s.gsub(/_(index|element)/, '')
  kit.data[0].gp.with = "lp"
  if kit.zlabel
    kit.zlabel = "'#{kit.zlabel}' rotate by 90"
    #kit.zlabel = nil
  end
  kit
end
read_variable(varname, options) click to toggle source
# File lib/trinitycrmod/read_netcdf.rb, line 48
def read_variable(varname, options)
  #start = get_start(dims, options)
  dims = dimensions(varname)
  narray = @file.var(varname).get('start'=>starts(dims, options), 'end'=>ends(dims, options))
  if options[:modify_variable]
    myhsh = dims.inject({}){|hsh, dim|
      opts = options.dup
      opts[:modify_variable] = nil
      dimval = read_variable(dimension_variable_name(dim.name), opts)
      hsh[dim.name] = dimval
      hsh
    }
    narray = options[:modify_variable].call(varname, narray, myhsh)
  elsif options[:invert_matrix]
    narray = GSL::Linalg::LU.invert(narray.to_gm_view).to_na_ref
  end
  shape = narray.shape
  shape.delete_if{|i| i==1}
  #p 'shape', shape; STDIN.gets
  narray.reshape!(*shape)
  narray

end
starts(dims, options) click to toggle source
# File lib/trinitycrmod/read_netcdf.rb, line 71
def starts(dims, options)
  dims.map{|d| dim_start(d.name, options)}
end