def __init__(self, filename): ''' Notes ----- The EXOFile class is an interface to the Exodus II api. Its methods are named after the analogous method from the Exodus II C bindings, minus the prefix 'ex_'. ''' self.fh = NetCDFFile(filename, mode='w') self.jobid = splitext(basename(filename))[0] self.filename = filename self.initialized = False self.viewable = False
def read_exodus_legacy(filename, variables=None, disp=1, blk_num=1, elem_num=1): '''Read the specified variables from the exodus file in filepath ''' if not isfile(filename): raise IOError('{0}: no such file'.format(filename)) fh = NetCDFFile(filename, 'r') # global/element vars and mapping num_glo_var = fh.dimensions.get('num_glo_var', 0) if num_glo_var: name_glo_var = exodus.stringify(fh.variables['name_glo_var'].data) gmap = dict(zip(name_glo_var, range(len(name_glo_var)))) name_elem_var = exodus.stringify(fh.variables['name_elem_var'].data) emap = dict(zip(name_elem_var, range(len(name_elem_var)))) # retrieve the data from the database head = ['TIME'] if num_glo_var: head.extend([H.upper() for H in name_glo_var]) head.extend([H.upper() for H in name_elem_var]) data = [] times = fh.variables['time_whole'].data.flatten() for (i, time) in enumerate(times): row = [time] if num_glo_var: vals_glo_var = fh.variables['vals_glo_var'].data[i] for var in name_glo_var: var_num = gmap[var] try: row.append(vals_glo_var[var_num]) except KeyError: continue for var in name_elem_var: var_num = emap[var] + 1 name = 'vals_elem_var{0}eb{1}'.format(var_num, blk_num) row.append(fh.variables[name].data[i, elem_num - 1]) data.append(row) fh.close() data = np.asarray(data) if len(head) != data.shape[1]: raise ValueError('inconsistent data') data = np.array(data) if variables is not None: variables = [x.upper() for x in variables] idx = [] for name in variables: try: idx.append(head.index(name)) except IndexError: raise KeyError('{0} not in output database'.format(name)) head = [head[i] for i in idx] data = data[:, idx] if disp: return head, data return data
def __init__(self, filename): if not isfile(filename): raise IOError('no such file: {0}'.format(repr(filename))) self.filename = filename self.fh = NetCDFFile(filename, mode='r') self.read()