Ejemplo n.º 1
0
def _import_vtk_ct_data(ct_data):
    """ Creates python array data from vtk file """
    
    # read in text
    lines = _read_text(ct_data)
    lines = _remove_eol_r(lines)
    header = lines.split('LOOKUP')[0]
        
    # read in X data
    xlines = _refine_vtk_lines(header, 'X_COORDINATES \d+', 'double', 'Y_COORDINATES')
    X = [float(x) for x in xlines]
    
    # read in Y data
    ylines = _refine_vtk_lines(header, 'Y_COORDINATES \d+', 'double', 'Z_COORDINATES')
    Y = [float(y) for y in ylines]
    
    # read in Z data
    zlines = _refine_vtk_lines(header, 'Z_COORDINATES \d+', 'double', 'CELL_DATA')
    Z = [float(z) for z in zlines]

    # read in lookup data
    lookup_lines = _refine_vtk_lines(lines, 'LOOKUP_TABLE','default','')
    lookup = [int(l) for l in lookup_lines]

    # create vtk class
    vtk = vtk_data(X,Y,Z, lookup)

    # return data
    return vtk
Ejemplo n.º 2
0
def _import_abq_mesh(fle, param):
    """ Records mesh data from abaqus input file """
    
    # read abaqus file
    lines = _read_text(fle)
    lines = _remove_spaces(lines)
    lines = _remove_eol_r(lines)

    # check for pre-existing materials
    if '\n*Material' in lines:
        print('Warning: Input file: ' + fle + ' already has materials defined')
        print('         Beware duplicate material definition')
       
    # determine how many parts
    parts = _find_part_names(lines)
    
    # store data for each part
    part_data = [0] * len(parts)
    for p in parts:
        if 'ignore' in param.keys():
            if p in param['ignore']:
                part_data[parts.index(p)] = _get_part_data(lines, p, True)
            else:
                part_data[parts.index(p)] = _get_part_data(lines, p)
        else:
            part_data[parts.index(p)] = _get_part_data(lines, p)
        
    return part_data
Ejemplo n.º 3
0
def _create_abq_inp(parts, fle, poisson):
    """ Creates brand new abaqus input file with material data 'nameMAT.inp' """

    # create and add header lines
    lines = ''
    header = _create_header(fle)
    lines = lines + header
    
    # create materials lines
    materials, materials_data = _create_materials(parts, poisson)
    
    # create and add lines for each part
    for p in parts:
        nodes = _create_node_lines(p)
        eles = _create_element_lines(p)
        if p.ignore == False:
            sets, set_data, set_name = _create_material_elesets(p)
            sections = _create_sections(p, set_data, materials_data, set_name)
            lines = lines + nodes + eles + sets + sections + '*End Part\n'
        else:
            lines = lines + nodes + eles + '*End Part\n'
    # add assembly and material lines
    assembly = _create_assembly(parts)
    lines = lines + assembly + materials

    # remove any blank lines and make EOL character for all operating systems
    lines = _remove_eol_r(lines)

    # write to file
    with open(fle[:-4]+'MAT.inp','w') as oupf:
        oupf.write(lines)
Ejemplo n.º 4
0
def _get_ntr_part_data(fle):
    """ Read elements and node data from .ntr file """

    # read in .ntr file
    lines = _read_text(fle)
    lines = lines.replace(' ', ',')
    for n in range(15):
        lines = lines.replace(',,', ',')
    lines = _remove_eol_r(lines)

    # read nodes
    nodes = {}
    nodelines = re.findall(r'\n(,1,[\d,]+\n[,\d.EG\+-]+\n1[G,\d]+)', lines)
    for n in nodelines:
        node_num = n.split('\n')[0].split(',')[2]
        nodes[node_num] = _get_node_ntr(n.split('\n')[1])

    # read elements
    elements = []
    elelines = re.findall(r'\n,2,([\d,E]+\n[\d\.\+,E]+\n[\d,E]+)', lines)
    for e in elelines:
        # get element label
        ele_num = int(e.split(',')[0])
        # get node connectivity
        elements.append(_get_element_ntr(e.split('\n')[2], ele_num))
        # determine element type
        ele_type_num = int(e.split(',')[1])
        num_ele_nodes = int(e.split('\n')[1].split(',')[1])
    
    # determine element name
    if (ele_type_num == 5) & (num_ele_nodes == 4):
        ele_type = 'linear_tet'
        elename = 'C3D4'
    elif (ele_type_num == 5) & (num_ele_nodes == 10):
        ele_type = 'quad_tet'
        elename = 'C3D10'
    elif (ele_type_num == 7) & (num_ele_nodes == 6): 
        ele_type = 'linear_wedge'
        elename = 'C3D6'
    elif (ele_type_num == 8) & (num_ele_nodes == 8):
        ele_type = 'linear_hex'
        elename = 'C3D8'
    else:
        raise IOError("Element type not recognised or not compatible with py_bonemat_abaqus.py");
    
    # create part
    part = _create_part('Part1', elements, elename, ele_type, nodes)

    return part
Ejemplo n.º 5
0
def import_parameters(fle):
    """ Imports parameter data """
    
    # read parameters file
    lines = _read_text(fle) + '\n'
    lines = _remove_spaces(lines)
    lines = _remove_eol_r(lines)
    
    # identify and record data
    param = _get_param(lines)
    
    # check all necessary parameters have been defined
    _checkParamInformation(param)
    
    return param
Ejemplo n.º 6
0
def _update_abq_inp(parts, fle, poisson):
    """ Adds material data to existing abaqus file and writes to 'jobMAT.inp' """
    
    # create output line string
    lines = ''

    # create materials lines
    materials, materials_data = _create_materials(parts, poisson)

    # add header lines
    orig_input = _read_text(fle)
    orig_input = _remove_eol_r(orig_input)
    header = _get_lines('', '\*Part,', orig_input)
    lines = lines + header

    # modify and add part lines for each part
    for p in parts:
        partlines = _get_lines('\*Part,\s?name=' + p.name, '\*End', orig_input)
        if p.ignore == False:
            sets, set_data, set_name = _create_material_elesets(p)
            sections = _create_sections(p, set_data, materials_data, set_name)
            lines = lines + '*Part, name=' + p.name + partlines + sets + sections + '*End Part\n'
        else:
            lines = lines + '*Part, name=' + p.name + partlines + '*End Part\n'

    # add lines until end of assembly
    lines = lines + _get_lines('\*End Part', '\*End Assembly\n', orig_input) + '*End Assembly\n'

    # add material lines
    lines = lines + materials

    # add any remaining lines
    lines = lines + _get_lines('\*End Assembly\n', '$', orig_input)

    # write to file
    with open(fle[:-4]+'MAT.inp','w') as oupf:
        oupf.write(lines)