def _write_sort1_as_sort1(self, header, page_stamp, page_num, f06_file, msg_temp): ntimes = self.data.shape[0] eids = self.element #is_odd = False #nwrite = len(eids) for itime in range(ntimes): dt = self._times[itime] header = _eigenvalue_header(self, header, itime, ntimes, dt) f06_file.write(''.join(header + msg_temp)) #print("self.data.shape=%s itime=%s ieids=%s" % (str(self.data.shape), itime, str(ieids))) fx = self.data[itime, :, 0] fy = self.data[itime, :, 1] fz = self.data[itime, :, 2] otx = self.data[itime, :, 3] oty = self.data[itime, :, 4] otz = self.data[itime, :, 5] etx = self.data[itime, :, 6] ety = self.data[itime, :, 7] etz = self.data[itime, :, 8] mx = self.data[itime, :, 9] my = self.data[itime, :, 10] mz = self.data[itime, :, 11] orx = self.data[itime, :, 12] ory = self.data[itime, :, 13] orz = self.data[itime, :, 14] erx = self.data[itime, :, 15] ery = self.data[itime, :, 16] erz = self.data[itime, :, 17] #print "dt=%s axials=%s eqs=%s ts=%s epcs=%s ecs=%s lts=%s" %(dt,axial,eqs,ts,epcs,ecs,lts) #msgE[eid] = ' ELEMENT-ID = %8i\n' % (eid) #if eid not in msgT: #msgT[eid] = [] #msgT[eid].append(' %9.3E %13.6E %13.6E %13.6E %13.6E %13.6E %13.6E\n' % (dt, axial, eqs, ts, epcs, ecs, lts)) for (eid, fxi, fyi, fzi, otxi, otyi, otzi, etxi, etyi, etzi, mxi, myi, mzi, orxi, oryi, orzi, erxi, eryi, erzi) in zip(eids, fx, fy, fz, otx, oty, otz, etx, ety, etz, mx, my, mz, orx, ory, orz, erx, ery, erz): ([ sfx, sfy, sfz, sotx, soty, sotz, setx, sety, setz, smx, smy, smz, sorx, sory, sorz, serx, sery, serz ]) = write_floats_12e([ fxi, fyi, fzi, otxi, otyi, otzi, etxi, etyi, etzi, mxi, myi, mzi, orxi, oryi, orzi, erxi, eryi, erzi ]) f06_file.write( #fx fy fz otx oty otz etx ety etz ' %8i %-12s %-12s %-12s %-12s %-12s %-12s %-12s %-12s %s\n' ' %8s %-12s %-12s %-12s %-12s %-12s %-12s %-12s %-12s %s\n' % (eid, sfx, sfy, sfz, sotx, soty, sotz, setx, sety, setz, '', smx, smy, smz, sorx, sory, sorz, serx, sery, serz)) f06_file.write(page_stamp % page_num) page_num += 1 return page_num - 1
def write_f06(self, f, header=None, page_stamp='PAGE %s', page_num=1, is_mag_phase=False, is_sort1=True): if header is None: header = [] msg = header + [ ' S T R E S S E S A T G R I D P O I N T S - - S U R F A C E 5\n', '0 SURFACE X-AXIS X NORMAL(Z-AXIS) Z REFERENCE COORDINATE SYSTEM FOR SURFACE DEFINITION CID 0\n', ' GRID ELEMENT STRESSES IN SURFACE SYSTEM PRINCIPAL STRESSES MAX \n', ' ID ID FIBRE NORMAL-X NORMAL-Y SHEAR-XY ANGLE MAJOR MINOR SHEAR VON MISES\n' ] #'0 13683 3736 TRIAX6 4.996584E+00 0.0 1.203093E+02 0.0 0.0 0.0' #' 13683 3737 TRIAX6 -4.996584E+00 0.0 -1.203093E+02 0.0 0.0 0.0' #' 13683 *TOTALS* 6.366463E-12 0.0 -1.364242E-12 0.0 0.0 0.0' ntimes = self.data.shape[0] nid_eids = self.grid_element for itime in range(ntimes): dt = self._times[itime] header = _eigenvalue_header(self, header, itime, ntimes, dt) f.write(''.join(header + msg_temp)) nx = self.data[itime, :, 0] ny = self.data[itime, :, 1] txy = self.data[itime, :, 2] angle = self.data[itime, :, 3] majorp = self.data[itime, :, 4] minorp = self.data[itime, :, 5] tmax = self.data[itime, :, 6] ovm = self.data[itime, :, 7] for (eid, nxi, nyi, txyi, anglei, majorpi, minorpi, tmaxi, ovmi) in zip(eids, nx, ny, txy, angle, majorp, minorp, tmax, ovm): [eid, nxi, nyi, txyi, anglei, majorpi, minorpi, tmaxi, ovmi] = write_floats_12e([ eid, nxi, nyi, txyi, anglei, majorpi, minorpi, tmaxi, ovmi ]) f.write( '%s%8s %8s %4s %s %s %s %8s %10s %10s %10s %s\n' % (zero, ekey2, eid, elem_name, nxi, nyi, txyi, anglei, majorpi, minorpi, tmaxi, ovmi)) f.write(page_stamp % page_num) page_num += 1 return page_num - 1
def write_f06(self, f06_file, header=None, page_stamp='PAGE %s', page_num=1, is_mag_phase=False, is_sort1=True): if header is None: header = [] #msg, nnodes, is_bilinear = self._get_msgs() if self.is_von_mises: von = 'VON' mises = 'MISES' else: von = 'MAX' mises = 'SHEAR' if self.is_strain: words = [' ELEMENT PLY STRAINS IN FIBER AND MATRIX DIRECTIONS INTER-LAMINAR STRAINS PRINCIPAL STRAINS (ZERO SHEAR) %s\n' % von, ' ID ID NORMAL-1 NORMAL-2 SHEAR-12 SHEAR XZ-MAT SHEAR YZ-MAT ANGLE MAJOR MINOR %s\n' % mises] else: words = [' ELEMENT PLY STRESSES IN FIBER AND MATRIX DIRECTIONS INTER-LAMINAR STRESSES PRINCIPAL STRESSES (ZERO SHEAR) %s\n' % von, ' ID ID NORMAL-1 NORMAL-2 SHEAR-12 SHEAR XZ-MAT SHEAR YZ-MAT ANGLE MAJOR MINOR %s\n' % mises] if self.element_type == 95: # CQUAD4 if self.is_strain: msg = [' S T R A I N S I N L A Y E R E D C O M P O S I T E E L E M E N T S ( Q U A D 4 )\n'] + words else: msg = [' S T R E S S E S I N L A Y E R E D C O M P O S I T E E L E M E N T S ( Q U A D 4 )\n'] + words #elif self.element_type == 96: # CQUAD8 #nnodes_per_element = 1 elif self.element_type == 97: # CTRIA3 if self.is_strain: msg = [' S T R A I N S I N L A Y E R E D C O M P O S I T E E L E M E N T S ( T R I A 3 )\n'] + words else: msg = [' S T R E S S E S I N L A Y E R E D C O M P O S I T E E L E M E N T S ( T R I A 3 )\n'] + words elif self.element_type == 96: # QUAD8 # good if self.is_strain: msg = [' S T R A I N S I N L A Y E R E D C O M P O S I T E E L E M E N T S ( Q U A D 8 )\n'] + words else: msg = [' S T R E S S E S I N L A Y E R E D C O M P O S I T E E L E M E N T S ( Q U A D 8 )\n'] + words elif self.element_type == 98: # CTRIA6 # good if self.is_strain: msg = [' S T R A I N S I N L A Y E R E D C O M P O S I T E E L E M E N T S ( T R I A 6 )\n'] + words else: msg = [' S T R E S S E S I N L A Y E R E D C O M P O S I T E E L E M E N T S ( T R I A 6 )\n'] + words else: msg = 'element_name=%s element_type=%s' % (self.element_name, self.element_type) raise NotImplementedError(msg) # write the f06 ntimes = self.data.shape[0] eids = self.element_layer[:, 0] layers = self.element_layer[:, 1] for itime in range(ntimes): dt = self._times[itime] header = _eigenvalue_header(self, header, itime, ntimes, dt) f06_file.write(''.join(header + msg)) #print("self.data.shape=%s itime=%s ieids=%s" % (str(self.data.shape), itime, str(ieids))) #[o11, o22, t12, t1z, t2z, angle, major, minor, ovm] o11 = self.data[itime, :, 0] o22 = self.data[itime, :, 1] t12 = self.data[itime, :, 2] t1z = self.data[itime, :, 3] t2z = self.data[itime, :, 4] angle = self.data[itime, :, 5] major = self.data[itime, :, 6] minor = self.data[itime, :, 7] ovm = self.data[itime, :, 8] for eid, layer, o11i, o22i, t12i, t1zi, t2zi, anglei, majori, minori, ovmi in zip( eids, layers, o11, o22, t12, t1z, t2z, angle, major, minor, ovm): [o11i, o22i, t12i, t1zi, t2zi, majori, minori, ovmi] = write_floats_12e([ o11i, o22i, t12i, t1zi, t2zi, majori, minori, ovmi]) f06_file.write('0 %8s %4s %12s %12s %12s %12s %12s %6.2F %12s %12s %s\n' % (eid, layer, o11i, o22i, t12i, t1zi, t2zi, anglei, majori, minori, ovmi)) f06_file.write(page_stamp % page_num) page_num += 1 return page_num - 1
def write_f06(self, f, header=None, page_stamp='PAGE %s', page_num=1, is_mag_phase=False, is_sort1=True): if header is None: header = [] #msg, nnodes, is_bilinear = self._get_msgs() if self.is_von_mises(): von = 'VON' mises = 'MISES' else: von = 'MAX' mises = 'SHEAR' if self.is_strain(): words = [' ELEMENT PLY STRAINS IN FIBER AND MATRIX DIRECTIONS INTER-LAMINAR STRAINS PRINCIPAL STRAINS (ZERO SHEAR) %s\n' % von, ' ID ID NORMAL-1 NORMAL-2 SHEAR-12 SHEAR XZ-MAT SHEAR YZ-MAT ANGLE MAJOR MINOR %s\n' % mises] else: words = [' ELEMENT PLY STRESSES IN FIBER AND MATRIX DIRECTIONS INTER-LAMINAR STRESSES PRINCIPAL STRESSES (ZERO SHEAR) %s\n' % von, ' ID ID NORMAL-1 NORMAL-2 SHEAR-12 SHEAR XZ-MAT SHEAR YZ-MAT ANGLE MAJOR MINOR %s\n' % mises] if self.element_type == 95: # CQUAD4 if self.is_strain(): msg = [' S T R A I N S I N L A Y E R E D C O M P O S I T E E L E M E N T S ( Q U A D 4 )\n'] + words else: msg = [' S T R E S S E S I N L A Y E R E D C O M P O S I T E E L E M E N T S ( Q U A D 4 )\n'] + words #elif self.element_type == 96: # CQUAD8 #nnodes_per_element = 1 elif self.element_type == 97: # CTRIA3 if self.is_strain(): msg = [' S T R A I N S I N L A Y E R E D C O M P O S I T E E L E M E N T S ( T R I A 3 )\n'] + words else: msg = [' S T R E S S E S I N L A Y E R E D C O M P O S I T E E L E M E N T S ( T R I A 3 )\n'] + words elif self.element_type == 96: # QUAD8 # good if self.is_strain(): msg = [' S T R A I N S I N L A Y E R E D C O M P O S I T E E L E M E N T S ( Q U A D 8 )\n'] + words else: msg = [' S T R E S S E S I N L A Y E R E D C O M P O S I T E E L E M E N T S ( Q U A D 8 )\n'] + words elif self.element_type == 98: # CTRIA6 # good if self.is_strain(): msg = [' S T R A I N S I N L A Y E R E D C O M P O S I T E E L E M E N T S ( T R I A 6 )\n'] + words else: msg = [' S T R E S S E S I N L A Y E R E D C O M P O S I T E E L E M E N T S ( T R I A 6 )\n'] + words else: msg = 'element_name=%s element_type=%s' % (self.element_name, self.element_type) raise NotImplementedError(msg) # write the f06 ntimes = self.data.shape[0] eids = self.element_layer[:, 0] layers = self.element_layer[:, 1] for itime in range(ntimes): dt = self._times[itime] header = _eigenvalue_header(self, header, itime, ntimes, dt) f.write(''.join(header + msg)) #print("self.data.shape=%s itime=%s ieids=%s" % (str(self.data.shape), itime, str(ieids))) #[o11, o22, t12, t1z, t2z, angle, major, minor, ovm] o11 = self.data[itime, :, 0] o22 = self.data[itime, :, 1] t12 = self.data[itime, :, 2] t1z = self.data[itime, :, 3] t2z = self.data[itime, :, 4] angle = self.data[itime, :, 5] major = self.data[itime, :, 6] minor = self.data[itime, :, 7] ovm = self.data[itime, :, 8] for eid, layer, o11i, o22i, t12i, t1zi, t2zi, anglei, majori, minori, ovmi in zip( eids, layers, o11, o22, t12, t1z, t2z, angle, major, minor, ovm): [o11i, o22i, t12i, t1zi, t2zi, majori, minori, ovmi] = write_floats_12e([ o11i, o22i, t12i, t1zi, t2zi, majori, minori, ovmi]) f.write('0 %8s %4s %12s %12s %12s %12s %12s %6.2F %12s %12s %s\n' % (eid, layer, o11i, o22i, t12i, t1zi, t2zi, anglei, majori, minori, ovmi)) f.write(page_stamp % page_num) page_num += 1 return page_num - 1
def write_op2(self, op2, op2_ascii, itable, new_result, date, is_mag_phase=False, endian='>'): """writes an OP2""" import inspect from struct import Struct, pack frame = inspect.currentframe() call_frame = inspect.getouterframes(frame, 2) op2_ascii.write('%s.write_op2: %s\n' % (self.__class__.__name__, call_frame[1][3])) if itable == -1: self._write_table_header(op2, op2_ascii, date) itable = -3 #print("nnodes_all =", nnodes_all) #msg.append(' element_node.shape = %s\n' % str(self.element_node.shape).replace('L', '')) #msg.append(' data.shape=%s\n' % str(self.data.shape).replace('L', '')) eids = self.element_layer[:, 0] layers = self.element_layer[:, 1] eids_device = eids * 10 + self.device_code nelements = len(np.unique(eids)) #print('nelements =', nelements) # 21 = 1 node, 3 principal, 6 components, 9 vectors, 2 p/ovm #ntotal = ((nnodes * 21) + 1) + (nelements * 4) ntotali = self.num_wide nlayers = self.data.shape[1] ntotal = ntotali * nlayers #print('shape = %s' % str(self.data.shape)) #assert self.ntimes == 1, self.ntimes device_code = self.device_code op2_ascii.write(' ntimes = %s\n' % self.ntimes) #fmt = '%2i %6f' #print('ntotal=%s' % (ntotal)) #assert ntotal == 193, ntotal #[fiber_dist, oxx, oyy, txy, angle, majorP, minorP, ovm] op2_ascii.write( ' #elementi = [eid_device, fd1, sx1, sy1, txy1, angle1, major1, minor1, vm1,\n' ) op2_ascii.write( ' # fd2, sx2, sy2, txy2, angle2, major2, minor2, vm2,]\n' ) if self.is_sort1: struct1 = Struct(endian + b'i16f') else: raise NotImplementedError('SORT2') op2_ascii.write('nelements=%i\n' % nelements) ntimes = self.data.shape[0] for itime in range(ntimes): nwide = 0 self._write_table_3(op2, op2_ascii, new_result, itable, itime) # record 4 #print('stress itable = %s' % itable) itable -= 1 header = [4, itable, 4, 4, 1, 4, 4, 0, 4, 4, ntotal, 4, 4 * ntotal] op2.write(pack('%ii' % len(header), *header)) op2_ascii.write('r4 [4, 0, 4]\n') op2_ascii.write('r4 [4, %s, 4]\n' % (itable)) op2_ascii.write('r4 [4, %i, 4]\n' % (4 * ntotal)) #dt = self._times[itime] #header = _eigenvalue_header(self, header, itime, ntimes, dt) #f06_file.write(''.join(header + msg)) #[o11, o22, t12, t1z, t2z, angle, major, minor, ovm] o11 = self.data[itime, :, 0] o22 = self.data[itime, :, 1] t12 = self.data[itime, :, 2] t1z = self.data[itime, :, 3] t2z = self.data[itime, :, 4] angle = self.data[itime, :, 5] major = self.data[itime, :, 6] minor = self.data[itime, :, 7] ovm = self.data[itime, :, 8] for eid_device, eid, layer, o11i, o22i, t12i, t1zi, t2zi, anglei, majori, minori, ovmi in zip( eids_device, eids, layers, o11, o22, t12, t1z, t2z, angle, major, minor, ovm): data = [ eid_device, layer, o11i, o22i, t12i, t1zi, t2zi, anglei, majori, minori, ovmi ] op2.write(pack('2i 9f', *data)) [o11i, o22i, t12i, t1zi, t2zi, majori, minori, ovmi] = write_floats_12e( [o11i, o22i, t12i, t1zi, t2zi, majori, minori, ovmi]) op2_ascii.write( '0 %8s %4s %12s %12s %12s %12s %12s %6.2F %12s %12s %s\n' % (eid, layer, o11i, o22i, t12i, t1zi, t2zi, anglei, majori, minori, ovmi)) nwide += len(data) assert nwide == ntotal, "nwide=%s ntotal=%s" % (nwide, ntotal) itable -= 1 header = [ 4 * ntotal, ] op2.write(pack('i', *header)) op2_ascii.write('footer = %s\n' % header) new_result = False return itable