示例#1
0
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
示例#2
0
文件: __init__.py 项目: nrua/books
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