Source code for pyuff.datasets.dataset_15

from os import write
import numpy as np

from ..tools import _opt_fields, _parse_header_line, _write_record, check_dict_for_none

def get_structure_15(raw=False):
    """(source: https://www.ceas3.uc.edu/sdrluff/"""
    out = """
Universal Dataset Number: 15

Name:   Nodes
-----------------------------------------------------------------------
 
             Record 1: FORMAT(4I10,1P3E13.5)
                       Field 1 -    node label
                       Field 2 -    definition coordinate system number
                       Field 3 -    displacement coordinate system number
                       Field 4 -    color
                       Field 5-7 -  3 - Dimensional coordinates of node
                                    in the definition system
 
             NOTE:  Repeat record for each node
 
------------------------------------------------------------------------------
"""

    if raw:
        return out
    else:
        print(out)   

FORMATS = [
    ['10.0f', '10.0f', '10.0f', '10.0f', '13.5f', '13.5f', '13.5f'],
]

def _write15(fh, dset):
    """Writes coordinate data - data-set 15 - to an open file fh"""
    try:
        n = len(dset['node_nums'])
        # handle optional fields
        dset = _opt_fields(dset, {'def_cs': np.asarray([0 for ii in range(0, n)], 'i'),
                                        'disp_cs': np.asarray([0 for ii in range(0, n)], 'i'),
                                        'color': np.asarray([0 for ii in range(0, n)], 'i')})
        # write strings to the file
        _write_record(fh, [-1, 15], formats=['6.0f', '6.0f'], multiline=True)
        
        for ii in range(0, n):
            _write_record(fh, 
                values=[dset['node_nums'][ii], dset['def_cs'][ii], dset['disp_cs'][ii], dset['color'][ii], dset['x'][ii], dset['y'][ii], dset['z'][ii]], 
                formats=FORMATS[0])

        _write_record(fh, -1, '6.0f')
    except KeyError as msg:
        raise Exception('The required key \'' + msg.args[0] + '\' not present when writing data-set #15')
    except:
        raise Exception('Error writing data-set #15')


def _extract15(block_data):
    """Extract coordinate data - data-set 15."""
    dset = {'type': 15}
    try:
        # Body
        split_data = block_data.splitlines()
        split_data = ''.join(split_data[2:]).split()
        split_data = [float(_) for _ in split_data]

        dset['node_nums'] = split_data[::7]
        dset['def_cs'] = split_data[1::7]
        dset['disp_cs'] = split_data[2::7]
        dset['color'] = split_data[3::7]
        dset['x'] = split_data[4::7]
        dset['y'] = split_data[5::7]
        dset['z'] = split_data[6::7]
    except:
        raise Exception('Error reading data-set #15')
    return dset


[docs] def prepare_15( node_nums=None, def_cs=None, disp_cs=None, color=None, x=None, y=None, z=None, return_full_dict=False ): """Name: Nodes R-Record, F-Field :param node_nums: R1 F1, node label :param def_cs: R1 F2, deformation coordinate system numbers, optional :param disp_cs: R1 F3, displacement coordinate system numbers, optional :param color: R1 F4, color, optional :param x: R1 F5, Dimensional coordinate of node in the definition system :param y: R1 F6, Dimensional coordinate of node in the definition system :param z: R1 F7, Dimensional coordinate of node in the definition system :param return_full_dict: If True full dict with all keys is returned, else only specified arguments are included **Test prepare_15** >>> save_to_file = 'test_pyuff' >>> dataset = pyuff.prepare_15( >>> node_nums=[16, 17, 18, 19, 20], >>> def_cs=[11, 11, 11, 12, 12], >>> disp_cs=[16, 16, 17, 18, 19], >>> color=[1, 3, 4, 5, 6], # I10, >>> x=[0.0, 1.53, 0.0, 1.53, 0.0], >>> y=[0.0, 0.0, 3.84, 3.84, 0.0], >>> z=[0.0, 0.0, 0.0, 0.0, 1.83]) >>> if save_to_file: >>> if os.path.exists(save_to_file): >>> os.remove(save_to_file) >>> uffwrite = pyuff.UFF(save_to_file) >>> uffwrite._write_set(dataset, 'add') >>> dataset """ if type(node_nums) not in (list, tuple, np.ndarray) and node_nums != None: raise TypeError('node_nums must be either list, tuple or numpy.ndarray') if np.array(node_nums).dtype != int and node_nums != None: raise TypeError('node_nums must be integers.') if np.array(def_cs).dtype != int and def_cs != None: raise TypeError('def_cs must be integers.') if np.array(disp_cs).dtype != int and disp_cs != None: raise TypeError('disp_cs must be integers.') if np.array(color).dtype != int and color != None: raise TypeError('color must be integers.') if np.array(x).dtype != float and x != None: raise TypeError('x must be float.') if np.array(y).dtype != float and y != None: raise TypeError('y must be float.') if np.array(z).dtype != float and z != None: raise TypeError('z must be float.') dataset={ 'type': 15, 'node_nums': node_nums, 'def_cs': def_cs, 'disp_cs': disp_cs, 'color': color, 'x': x, 'y': y, 'z': z } if return_full_dict is False: dataset = check_dict_for_none(dataset) return dataset