Source code for pyNastran.converters.aflr.ugrid.ugrid2d_reader

"""
Defines the following classes:
    - UGRID2D_Reader
"""
from numpy import array
from cpylog import get_logger2


[docs] class UGRID2D_Reader: """ Interface to the AFLR UGrid2D format. """ def __init__(self, log=None, debug=None): self.log = get_logger2(log=log, debug=debug) self.nodes = None self.tris = None self.quads = None
[docs] def read_ugrid(self, ugrid_filename): """ Reads a ugrid2d file of the form:: #(nnodes, ntrias, nquads), ntets, npyram5, npenta6, nhexas8s '5 1 1 0 0 0 0\n' # nodes '0. 0. 0.\n' '1. 0. 0.\n' '1. 1. 0.\n' '0. 1. 0.\n' '0. 2. 0.\n' # tris '3 4 5\n' # quads '1 2 3 4\n' .. note:: comment lines should not be included and exist for reference """ with open(ugrid_filename, 'r') as ugrid_file: ugrid_str = ugrid_file.read() data = ugrid_str.split() try: nnodes, ntrias, nquads, ntets, npyram5, npenta6, nhexas8s = ( int(val) for val in data[:7]) except ValueError: self.log.error('data[:7] = %s' % data[:7]) raise i = 7 self.log.debug('nnodes=%s ntrias=%s nquads=%s ntets4=%s ' 'npyram5=%s npenta6=%s nhexas8s=%s' % ( nnodes, ntrias, nquads, ntets, npyram5, npenta6, nhexas8s)) #nodes = zeros(nnodes * 3, dtype=ndarray_float) #tris = zeros(ntris * 3, dtype='int32') #quads = zeros(nquads * 4, dtype='int32') #pids = zeros(npids, dtype='int32') #tets = zeros(ntets * 4, dtype='int32') #penta5s = zeros(npenta5s * 5, dtype='int32') #penta6s = zeros(npenta6s * 6, dtype='int32') #hexas = zeros(nhexas * 8, dtype='int32') # nodes iend = i + nnodes * 3 nodes = array(data[i:iend], dtype='float64') if len(nodes) != (iend - i): raise RuntimeError('len(xyz)=%s for nnodes=%s (expected=%s)' % ( len(nodes), (iend - i)//3, iend - i)) nodes = nodes.reshape((nnodes, 3)) self.log.debug(nodes[0, :]) self.log.debug(nodes[nnodes-1, :]) self.log.debug(nodes[-1, :]) assert nodes[:, 2].max() == 0.0 assert nodes[:, 2].min() == 0.0 i = iend # tris iend = i + ntrias * 3 tris = array(data[i:iend], dtype='int32') if len(tris) != (iend - i): raise RuntimeError('len(tri_nodes)=%s for ntris=%s (expected=%s)' % ( len(tris), (iend - i)//3, iend - i)) tris = tris.reshape((ntrias, 3)) #print(nodes[0, :]) #print(nodes[nnodes-1, :]) #print(nodes[-1, :]) #assert nodes[:, 2].max() == 0.0 #assert nodes[:, 2].min() == 0.0 i = iend iend = i + nquads * 4 quads = array(data[i:iend], dtype='int32') if len(quads) != (iend - i): raise RuntimeError('len(quad_nodes)=%s for nquads=%s (expected=%s)' % ( len(quads), (iend - i)//3, iend - i)) quads = quads.reshape((nquads, 4)) #print(nodes[0, :]) #print(nodes[nnodes-1, :]) #print(nodes[-1, :]) #assert nodes[:, 2].max() == 0.0 #assert nodes[:, 2].min() == 0.0 i = iend self.nodes = nodes self.tris = tris - 1 self.quads = quads - 1