def data_extraction_binout(binout_name, basis_file=None, target_position_file=None): id_data = binout_reading(binout_name, False, 'ids') if basis_file is not None and target_position_file is not None: coordinate_data = binout_reading(binout_name, False, 'coordinates') coordinate_data = rearange_xyz(coordinate_data)[:,0].reshape((-1,1)) return coordinate_data, id_data else: coordinate_data, displacement_data = binout_reading(binout_name, False, 'coordinates + displacements') time_data = binout_reading(binout_name, False, 'time') coordinate_data = rearange_xyz(coordinate_data)[:,0].reshape((-1,1)) displacement_data = rearange_xyz(displacement_data) return coordinate_data, displacement_data, id_data, time_data
def extract_main(self): if self.isExtractFullData: coordinate_data, displacement_data = binout_reading( self.name, False, 'coordinates + displacements') displacement_data = rearange_xyz(displacement_data) else: coordinate_data = binout_reading(self.name, False, 'coordinates') displacement_data = None time_data = binout_reading(self.name, False, 'time') coordinate_data = rearange_xyz(coordinate_data)[:, 0].reshape((-1, 1)) id_data = binout_reading(self.name, False, 'ids') return coordinate_data, displacement_data, id_data, time_data
def extract_simple(self): simplified_displacement_data = binout_reading(self.name, False, 'displacements') simplified_displacement_data = rearange_xyz( simplified_displacement_data) simplified_id_data = binout_reading(self.name, False, 'ids') simplified_time_data = binout_reading(self.name, False, 'time') if self.isVelocity: simplified_velocity_data = binout_reading(self.name, False, 'velocities') simplified_velocity_data = rearange_xyz(simplified_velocity_data) else: simplified_velocity_data = None return simplified_displacement_data, simplified_id_data, simplified_velocity_data, simplified_time_data
def data_extraction_binout(binout_name, isBasis, isCalculateError, isVelocity): if not isQD: raise ImportError( "qd.cae library not available, Binout format not readable") if isBasis is None or isCalculateError: coordinate_data, displacement_data = binout_reading( binout_name, False, 'coordinates + displacements') displacement_data = rearange_xyz(displacement_data) else: coordinate_data = binout_reading(binout_name, False, 'coordinates') displacement_data = None if isVelocity: velocity_data = binout_reading(binout_name, False, 'velocities') velocity_data = rearange_xyz(velocity_data) else: velocity_data = None time_data = binout_reading(binout_name, False, 'time') coordinate_data = rearange_xyz(coordinate_data)[:, 0] id_data = binout_reading(binout_name, False, 'ids') return coordinate_data, displacement_data, id_data, velocity_data, time_data
def sorting_nodes(ls_dyna_name, abaqus_name): start_name = '*NODE' end_name = "**\n** MEMBRANE and STRUCTURAL ELEMENTS" with open(abaqus_name, 'r', encoding='utf-8') as abaqus_in: bodyText = abaqus_in.read() # positions before and after node data in_start = bodyText.index(start_name) in_end = bodyText.index(end_name) re_coord = re.compile("[0-9,. -]{70,90}\n") match = re.findall(re_coord, bodyText[in_start:in_end]) abaqus_ids = [] abaqus_coordinates = [] for coord in match: abaqus_ids.append(int(re.search("[0-9]*,", coord)[0][:-1])) abaqus_coordinates.append( list( map( float, re.search(",[0-9,. -]+\n", coord)[0][1:].strip().split(",")))) abaqus_coordinates = np.array(abaqus_coordinates) ls_dyna_data = binout_reading(ls_dyna_name, False, 'coordinates') ls_dyna_ids = binout_reading(ls_dyna_name, False, 'ids') ls_dyna_coordinates = small_func.rearange_xyz(ls_dyna_data)[:, 0].reshape( (-1, 3)) ind_lsdyna = np.argsort(ls_dyna_ids) ind_abaqus = np.argsort(abaqus_ids) sorted_lsdyna = ls_dyna_coordinates[ind_lsdyna] sorted_abaqus = abaqus_coordinates[ind_abaqus] error = 1e-2 for i, node in enumerate(sorted_abaqus): count = 0 error = 3 switch = True while np.linalg.norm(sorted_abaqus[i] - sorted_lsdyna[i]) > error: count += 1 if (count != 0 and switch): tmp = np.copy(sorted_lsdyna[i]) sorted_lsdyna[i] = sorted_lsdyna[i + count] sorted_lsdyna[i + count] = tmp tmp = np.copy(ind_lsdyna[i]) ind_lsdyna[i] = ind_lsdyna[i + count] ind_lsdyna[i + count] = tmp index_map = ind_lsdyna[np.argsort(ind_abaqus)] no_vtk_nodes = sorted_abaqus.shape[0] extended_map = [0] * no_vtk_nodes * 3 for i, node in enumerate(index_map): extended_map[3 * i] = node * 3 extended_map[3 * i + 1] = node * 3 + 1 extended_map[3 * i + 2] = node * 3 + 2 np.save('abaqus_to_lsdyna' + "bumper", extended_map) return 'extended_map' + "bumper"