def assert_fields(card1, card2, i): return try: fields1 = wipe_empty_fields(card1.repr_fields()) fields2 = wipe_empty_fields(card2.repr_fields()) except: print("card1 = \n%s" % card1) print("card2 = \n%s" % card2) raise if len(fields1) != len(fields2): msg = ('len(fields1)=%s len(fields2)=%s\n%r\n%r\n%s\n%s' % (len(fields1), len(fields2), fields1, fields2, print_card(fields1), print_card(fields2))) raise RuntimeError(msg) for (i, field1, field2) in zip(count(), fields1, fields2): value1a = print_field(field1) value2a = print_field(field2) if value1a != value2a: value1 = print_field(interpret_value(value1a)) value2 = print_field(interpret_value(value2a)) if value1 != value2: msg = 'value1 != value2\n' msg += ('cardName=%s ID=%s i=%s field1=%r field2=%r value1=%r ' 'value2=%r\n%r\n%r' % (fields1[0], fields1[1], i, field1, field2, value1, value2, fields1, fields2)) raise RuntimeError(msg)
def assert_fields(card1, card2): try: fields1 = wipe_empty_fields(card1.repr_fields()) fields2 = wipe_empty_fields(card2.repr_fields()) except: print("card1 = \n%s" % (card1)) print("card2 = \n%s" % (card2)) raise if len(fields1) != len(fields2): msg = ('len(fields1)=%s len(fields2)=%s\n%r\n%r\n%s\n%s' % (len(fields1), len(fields2), fields1, fields2, print_card(fields1), print_card(fields2))) raise RuntimeError(msg) for (i, field1, field2) in zip(count(), fields1, fields2): value1a = print_field(field1) value2a = print_field(field2) if value1a != value2a: value1 = print_field(interpret_value(value1a)) value2 = print_field(interpret_value(value2a)) if value1 != value2: msg = 'value1 != value2\n' msg += ('cardName=%s ID=%s i=%s field1=%r field2=%r value1=%r ' 'value2=%r\n%r\n%r' % (fields1[0], fields1[1], i, field1, field2, value1, value2, fields1, fields2)) raise RuntimeError(msg)
def test_pbar_01(self): fields = [u'PBAR', 1510998, 1520998, 0.0, 4.9000000000000006e-14, 4.9000000000000006e-14, 0.0, 0.0, None, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, None, None, 0.0] card = print_card(fields) #print(card) card = print_card(fields) lines = card.split('\n') card = bdf.process_card(lines) card2 = BDFCard(card) with self.assertRaises(AssertionError): # A=0, I12=0, K1=0 pbar = PBAR(card2)
def test_pbar_01(self): fields = [u'PBAR', 1510998, 1520998, 0.0, 4.9000000000000006e-14, 4.9000000000000006e-14, 0.0, 0.0, None, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, None, None, 0.0] card = print_card(fields) #print(card) card = print_card(fields) lines = card.split('\n') card = bdf.process_card(lines) card2 = BDFCard(card) pbar = PBAR(card2) self.assertEqual(pbar.A, 0.), pbar.A self.assertEqual(pbar.i12, 0.), pbar.i12 self.assertEqual(pbar.K1, None), pbar.K1 self.assertEqual(pbar.K2, None), pbar.K2
def test_pbar_01(self): fields = [ u'PBAR', 1510998, 1520998, 0.0, 4.9000000000000006e-14, 4.9000000000000006e-14, 0.0, 0.0, None, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, None, None, 0.0 ] card = print_card(fields) #print(card) card = print_card(fields) lines = card.split('\n') card = bdf.process_card(lines) card2 = BDFCard(card) with self.assertRaises(AssertionError): # A=0, I12=0, K1=0 pbar = PBAR(card2)
def stl_to_nastran_filename(stl_filename, bdf_filename, nnodes_offset=0, nelements_offset=0, log=None): model = STLReader(log=log) model.read_stl(stl_filename) nid = nnodes_offset + 1 cid = None pid = 100 mid = 200 load_id = 10 nodal_normals = model.get_normals_at_nodes(model.elements) bdf = open(bdf_filename, 'wb') bdf.write('CEND\n') bdf.write('LOAD = %s\n' % load_id) bdf.write('BEGIN BULK\n') nid2 = 1 magnitude = 100. for (x, y, z) in model.nodes: card = ['GRID', nid, cid, x, y, z] bdf.write(print_card(card)) nx, ny, nz = nodal_normals[nid2 - 1] card = ['FORCE', load_id, nid, cid, magnitude, nx, ny, nz] bdf.write(print_card(card)) nid += 1 nid2 += 1 eid = nelements_offset + 1 for (n1, n2, n3) in (model.elements + (nnodes_offset + 1)): card = ['CTRIA3', eid, pid, n1, n2, n3] bdf.write(print_card(card)) eid += 1 t = 0.1 card = ['PSHELL', pid, mid, t] bdf.write(print_card(card)) E = 1e7 G = None nu = 0.3 card = ['MAT1', mid, E, G, nu] bdf.write(print_card(card)) bdf.write('ENDDATA\n') bdf.close()
def write_bdf(self, f, size=8, element_ids=None): assert self.n > 0, self.n if self.n: if element_ids is None: i = arange(self.n) else: i = searchsorted(self.element_id, element_ids) cid = [cid if cid != 0 else '' for cid in self.coord_id] X0 = [x if x != 0.0 else '' for x in self.x[i, 0]] X1 = [x if x != 0.0 else '' for x in self.x[i, 1]] X2 = [x if x != 0.0 else '' for x in self.x[i, 2]] Mass = [x if x != 0.0 else '' for x in self.mass[i]] I0 = [x if x != 0.0 else '' for x in self.I[i, 0]] I1 = [x if x != 0.0 else '' for x in self.I[i, 1]] I2 = [x if x != 0.0 else '' for x in self.I[i, 2]] I3 = [x if x != 0.0 else '' for x in self.I[i, 3]] I4 = [x if x != 0.0 else '' for x in self.I[i, 4]] I5 = [x if x != 0.0 else '' for x in self.I[i, 5]] for (eid, nid, cid, mass, x0, x1, x2, i0, i1, i2, i3, i4, i5) in zip(self.element_id[i], self.node_id[i], cid, Mass, X0, X1, X2, I0, I1, I2, I3, I4, I5): card = [ 'CONM2', eid, nid, cid, mass, x0, x1, x2, None, i0, i1, i2, i3, i4, i5 ] f.write(print_card(card))
def __repr__(self): """ Prints a card in the simplest way possible (default values are left blank). """ comment = self.comment list_fields = self.repr_fields() try: return comment + print_card(list_fields, size=8) except: try: return comment + print_card(list_fields, size=16) except: print('problem printing %s card' % self.type) print("list_fields = ", list_fields) raise
def write_bdf(self, f, size=8, element_ids=None): assert self.n > 0, self.n if self.n: if element_ids is None: i = arange(self.n) else: i = searchsorted(self.element_id, element_ids) cid = [cid if cid != 0 else '' for cid in self.coord_id] X0 = [x if x != 0.0 else '' for x in self.x[i, 0]] X1 = [x if x != 0.0 else '' for x in self.x[i, 1]] X2 = [x if x != 0.0 else '' for x in self.x[i, 2]] Mass = [x if x != 0.0 else '' for x in self.mass[i]] I0 = [x if x != 0.0 else '' for x in self.I[i, 0]] I1 = [x if x != 0.0 else '' for x in self.I[i, 1]] I2 = [x if x != 0.0 else '' for x in self.I[i, 2]] I3 = [x if x != 0.0 else '' for x in self.I[i, 3]] I4 = [x if x != 0.0 else '' for x in self.I[i, 4]] I5 = [x if x != 0.0 else '' for x in self.I[i, 5]] for (eid, nid, cid, mass, x0, x1, x2, i0, i1, i2, i3, i4, i5) in zip(self.element_id[i], self.node_id[i], cid, Mass, X0, X1, X2, I0, I1, I2, I3, I4, I5): card = ['CONM2', eid, nid, cid, mass, x0, x1, x2, None, i0, i1, i2, i3, i4, i5] f.write(print_card(card))
def test_pbeam_03(self): lines =['PBEAM,39,6,2.9,3.5,5.97', ' , , ,2.0,-4.0', ' ,YES,1.0,5.3,56.2,78.6', ' , , ,2.5,-5.0', ' , , ,1.1, ,2.1,,0.21', ' , , , , ,0.5,,0.0',] card = bdf.process_card(lines) #print print_card(card) card = BDFCard(card) #print "card =", card card2 = PBEAM(card) fields = card2.rawFields() msg = print_card(fields) #print msg lines_expected = ['PBEAM 39 6 2.9 3.5 5.97 0. 0. 0.', ' 0. 0. 2. -4. 0. 0. 0. 0.', ' YES 1. 5.3 56.2 78.6 56.2 0. 0.', ' 0. 0. 0. 2.5 -5. 0. 0. 0.', ' 1. 1. 1.1 0. 2.1 2.1 .21 .21', ' 0. 0. 0. 0. .5 .5 0. 0.',] lines_actual = msg.rstrip().split('\n') msg = '\n%s\n\n%s' % ('\n'.join(lines_expected), msg) msg += 'nlines_actual=%i nlines_expected=%i' % (len(lines_actual), len(lines_expected)) self.assertEqual(len(lines_actual), len(lines_expected), msg) for actual, expected in zip(lines_actual, lines_expected): self.assertEqual(actual, expected)
def write_bdf(self, f, size=8, property_ids=None): """ Writes the PSHELL properties. :param self: the PSHELL object :param f: file object :param size: the bdf field size (8/16; default=8) :param property_ids: the property_ids to write (default=None -> all) """ if self.n: i = self.get_index(property_ids) Mid2 = [midi if midi > 0 else '' for midi in self.material_id2[i]] Mid3 = [midi if midi > 0 else '' for midi in self.material_id3[i]] Mid4 = [midi if midi > 0 else '' for midi in self.material_id4[i]] Nsm = ['' if nsmi == 0.0 else nsmi for nsmi in self.nsm[i]] Tst = ['' if tsti == 0.833333 else tsti for tsti in self.tst[i]] TwelveIt3 = ['' if tw == 1.0 else tw for tw in self.twelveIt3[i]] to2 = self.thickness[i] / 2 Z1 = ['' if z1i == -to2[j] else z1i for j, z1i in enumerate(self.z1[i])] Z2 = ['' if z2i == to2[j] else z2i for j, z2i in enumerate(self.z2[i])] for (pid, mid, t, mid2, twelveIt3, mid3, tst, nsm, z1, z2, mid4) in zip( self.property_id[i], self.material_id[i], self.thickness[i], Mid2, TwelveIt3, Mid3, Tst, Nsm, Z1, Z2, Mid4): card = ['PSHELL', pid, mid, t, mid2, twelveIt3, mid3, tst, nsm, z1, z2, mid4] f.write(print_card(card, size=size))
def write(self, f=None, eids=None): msg = [] size = 8 for i in xrange(self._ncquad4): eid = self.eid[i] pid = self.pid[i] zOffset = self.zOffset[i] TFlag = self.TFlag[i] thetaMcid = self.thetaMcid[i] T1, T2, T3, T4 = self.T[i] zOffset = set_blank_if_default(zOffset, 0.0) TFlag = set_blank_if_default(TFlag, 0) thetaMcid = set_blank_if_default(thetaMcid, 0.0) T1 = set_blank_if_default(T1, 1.0) T2 = set_blank_if_default(T2, 1.0) T3 = set_blank_if_default(T3, 1.0) T4 = set_blank_if_default(T4, 1.0) fields = (['CQUAD4', eid, pid] + self.nodes[i] + [thetaMcid, zOffset, None, TFlag, T1, T2, T3, T4]) msg.append(print_card(fields)) return ''.join(msg)
def _write_rejects(self, size): """ Writes the rejected (processed) cards and the rejected unprocessed cardLines """ msg = [] if self.reject_cards: msg.append('$REJECTS\n') for reject_card in self.reject_cards: try: msg.append(print_card(reject_card)) except RuntimeError: for field in reject_card: if field is not None and '=' in field: raise SyntaxError('cannot reject equal signed ' 'cards\ncard=%s\n' % reject_card) raise if self.rejects: msg.append('$REJECT_LINES\n') for reject_lines in self.rejects: if reject_lines[0][0] == ' ': continue else: for reject in reject_lines: reject2 = reject.rstrip() if reject2: msg.append(str(reject2) + '\n') return ''.join(msg)
def write_bdf(self, f, size=8, lids=None): if self.n: for (lid, nid, cid, mag, xyz) in izip( self.load_id, self.node_id, self.coord_id, self.mag, self.xyz): card = ['FORCE', lid, nid, cid, mag, xyz[0], xyz[1], xyz[2] ] f.write(print_card(card))
def test_pbeam_01(self): lines = [ 'PBEAM,39,6,2.9,3.5,5.97', ' , , ,2.0,-4.0', ' ,YES,1.0,5.3,56.2,78.6', ' , , ,2.5,-5.0', ' , , ,1.1, ,2.1,,0.21', ' , , , , ,0.5,,0.0', ] card = bdf.process_card(lines) #print print_card(card) card = BDFCard(card) card2 = PBEAM(card) fields = card2.rawFields() msg = print_card(fields).rstrip() lines_expected = [ 'PBEAM 39 6 2.9 3.5 5.97 0. 0. 0.', ' 0. 0. 2. -4. 0. 0. 0. 0.', ' YES 1. 5.3 56.2 78.6 56.2 0. 0.', ' 0. 0. 0. 2.5 -5. 0. 0. 0.', ' 1. 1. 1.1 0. 2.1 2.1 .21 .21', ' 0. 0. 0. 0. .5 .5 0. 0.' ] lines_actual = msg.rstrip().split('\n') msg = '\n%s\n\n%s' % ('\n'.join(lines_expected), msg) msg += 'nlines_actual=%i nlines_expected=%i' % (len(lines_actual), len(lines_expected)) self.assertEqual(len(lines_actual), len(lines_expected), msg) for actual, expected in zip(lines_actual, lines_expected): self.assertEqual(actual, expected)
def _test_pbeam_07(self): lines = [ 'PBEAM 100 100 1.00 10. 1.0 +Z1', '+Z1 NO 1.0 +Z4', '+Z4 0.0 0.0', ] card = bdf.process_card(lines) #print(print_card(card)) card = BDFCard(card) #print("card =", card) #with self.assertRaises(RuntimeError): # temporary RuntimeError card2 = PBEAM(card) if 0: fields = card2.rawFields() msg = print_card(fields) #print(msg) lines_actual = msg.rstrip().split('\n') msg = '\n%s\n\n%s' % ('\n'.join(lines_expected), msg) msg += 'nlines_actual=%i nlines_expected=%i' % ( len(lines_actual), len(lines_expected)) self.assertEqual(len(lines_actual), len(lines_expected), msg) for actual, expected in zip(lines_actual, lines_expected): msg = 'actual = %r\n' % actual msg += 'expected = %r' % expected self.assertEqual(actual, expected, msg)
def test_pbeam_05(self): lines = [ 'PBEAM,39,6,2.9,3.5,5.97', ' , , ,2.0,-4.0', ] card = bdf.process_card(lines) #print(print_card(card)) card = BDFCard(card) #print("card =", card) card2 = PBEAM(card) fields = card2.rawFields() msg = print_card(fields) #print(msg) lines_expected = [ 'PBEAM 39 6 2.9 3.5 5.97 0. 0. 0.', ' 0. 0. 2. -4. 0. 0. 0. 0.', ' 1. 1. 0. 0. 0. 0. 0. 0.', ' 0. 0. 0. 0. 0. 0. 0. 0.', ] lines_actual = msg.rstrip().split('\n') msg = '\n%s\n\n%s' % ('\n'.join(lines_expected), msg) msg += 'nlines_actual=%i nlines_expected=%i' % (len(lines_actual), len(lines_expected)) self.assertEqual(len(lines_actual), len(lines_expected), msg) for actual, expected in zip(lines_actual, lines_expected): msg = 'actual = %r\n' % actual msg += 'expected = %r' % expected self.assertEqual(actual, expected, msg)
def write_bdf(self, f, size=8, lids=None): if self.n: for (lid, cid, scale, N, mb) in izip(self.load_id, self.coord_id, self.scale, self.N, self.mb): card = ['GRAV', lid, cid, scale, N[0], N[1], n[2], mb] f.write(print_card(card))
def write_bdf(self, f, size=8): if self.n: for constraint in self.constraints: card = ['MPC', self.constraint_id] for (G, C, A) in constraint: card += [G, C, A] f.write(print_card(card))
def test_pbeam_05(self): lines =['PBEAM,39,6,2.9,3.5,5.97', ' , , ,2.0,-4.0',] card = bdf.process_card(lines) #print(print_card(card)) card = BDFCard(card) #print("card =", card) card2 = PBEAM(card) fields = card2.rawFields() msg = print_card(fields) #print(msg) lines_expected = ['PBEAM 39 6 2.9 3.5 5.97 0. 0. 0.', ' 0. 0. 2. -4. 0. 0. 0. 0.', ' 1. 1. 0. 0. 0. 0. 0. 0.', ' 0. 0. 0. 0. 0. 0. 0. 0.',] lines_actual = msg.rstrip().split('\n') msg = '\n%s\n\n%s' % ('\n'.join(lines_expected), msg) msg += 'nlines_actual=%i nlines_expected=%i' % (len(lines_actual), len(lines_expected)) self.assertEqual(len(lines_actual), len(lines_expected), msg) for actual, expected in zip(lines_actual, lines_expected): msg = 'actual = %r\n' % actual msg += 'expected = %r' % expected self.assertEqual(actual, expected, msg)
def test_mat11_01(self): lines = [ # fails 'MAT11 1 1.+75000000. 700000. .1 .13 .267000000.+', '+ 9000000.3000000. .1 1.-5 7.-6 8.-6 50.', ] lines_expected = [ 'MAT11 1 1.+75000000. 700000. .1 .137000000.9000000.', ' 3000000. .1 .00001 .000007 .000008 50.' ] card = bdf.process_card(lines) card = BDFCard(card) card2 = MAT11(card) fields = card2.raw_fields() msg = print_card(fields) #f = StringIO.StringIO() size = 8 msg = card2.write_bdf(size, 'dummy') #msg = f.getvalue() #print(msg) lines_actual = msg.rstrip().split('\n') msg = '\n%s\n\n%s' % ('\n'.join(lines_expected), msg) msg += 'nlines_actual=%i nlines_expected=%i' % (len(lines_actual), len(lines_expected)) #print(msg) self.assertEqual(len(lines_actual), len(lines_expected), msg) for actual, expected in zip(lines_actual, lines_expected): msg = 'actual = %r\n' % actual msg += 'expected = %r' % expected self.assertEqual(actual, expected, msg)
def test_pbeam_06(self): lines =['PBEAM 1 1 1. 60. 1. PBEAM1', '+BEAM1 5. -5. PBEAM2', '+BEAM2 YES 1. 2. 240. PBEAM3', '+BEAM3 10. -10. PBEAM4', '+BEAM4 -.666667',] card = bdf.process_card(lines) #print(print_card(card)) card = BDFCard(card) #print("card =", card) card2 = PBEAM(card) fields = card2.rawFields() msg = print_card(fields) #print(msg) lines_expected = ['PBEAM 1 1 1. 60. 1. 0. 0. 0.', ' 5. 0. -5. 0. 0. 0. 0. 0.', ' YES 1. 2. 240. 0. 240. 0. 0.', ' 0. 10. 0. -10. 0. 0. 0. 0.', ' 1. 1.-.666667 0. 0. 0. 0. 0.', ' 0. 0. 0. 0. 0. 0. 0. 0.', ] #print('\n'.join(lines_expected)) lines_actual = msg.rstrip().split('\n') msg = '\n%s\n\n%s' % ('\n'.join(lines_expected), msg) msg += 'nlines_actual=%i nlines_expected=%i' % (len(lines_actual), len(lines_expected)) self.assertEqual(len(lines_actual), len(lines_expected), msg) for actual, expected in zip(lines_actual, lines_expected): msg = 'actual = %r\n' % actual msg += 'expected = %r' % expected self.assertEqual(actual, expected, msg)
def _test_pbeam_07(self): lines = ['PBEAM 100 100 1.00 10. 1.0 +Z1', '+Z1 NO 1.0 +Z4', '+Z4 0.0 0.0',] card = bdf.process_card(lines) #print(print_card(card)) card = BDFCard(card) #print("card =", card) #with self.assertRaises(RuntimeError): # temporary RuntimeError card2 = PBEAM(card) if 0: fields = card2.rawFields() msg = print_card(fields) #print(msg) lines_actual = msg.rstrip().split('\n') msg = '\n%s\n\n%s' % ('\n'.join(lines_expected), msg) msg += 'nlines_actual=%i nlines_expected=%i' % (len(lines_actual), len(lines_expected)) self.assertEqual(len(lines_actual), len(lines_expected), msg) for actual, expected in zip(lines_actual, lines_expected): msg = 'actual = %r\n' % actual msg += 'expected = %r' % expected self.assertEqual(actual, expected, msg)
def write_bdf(self, f, size=8, lids=None): if self.n: for (lid, cid, scale, N, mb) in izip( self.load_id, self.coord_id, self.scale, self.N, self.mb): card = ['GRAV', lid, cid, scale, N[0], N[1], n[2], mb] f.write(print_card(card))
def test_rbe1_01(self): lines = [ 'RBE1 10201 10201 123 10202 456', ' UM 10201 456 10202 123', ] card = bdf.process_card(lines) #print(print_card(card)) card = BDFCard(card) #print(card) card2 = RBE1(card) fields = card2.raw_fields() msg = print_card(fields).rstrip() #print(msg) lines_expected = [ 'RBE1 10201 10201 123 10202 456', ' UM 10201 456 10202 123' ] lines_actual = msg.rstrip().split('\n') msg = '\n%s\n\n%s\n' % ('\n'.join(lines_expected), msg) msg += 'nlines_actual=%i nlines_expected=%i' % (len(lines_actual), len(lines_expected)) self.assertEqual(len(lines_actual), len(lines_expected), msg) for actual, expected in zip(lines_actual, lines_expected): self.assertEqual(actual, expected, msg)
def test_rbe1_02(self): lines = ['RBE1 1001 1000 123456', ' UM 1002 123 1003 123 1004 123', ' 1005 123 1006 123 1008 123', ' 1009 123 1010 123 1011 123', ' 1012 123',] card = bdf.process_card(lines) #print(print_card(card)) card = BDFCard(card) #print(card) card2 = RBE1(card) fields = card2.rawFields() msg = print_card(fields).rstrip() #print(msg) lines_expected = ['RBE1 1001 1000 123456', ' UM 1002 123 1003 123 1004 123', ' 1005 123 1006 123 1008 123', ' 1009 123 1010 123 1011 123', ' 1012 123',] lines_actual = msg.rstrip().split('\n') msg = '\n%s\n\n%s\n' % ('\n'.join(lines_expected), msg) msg += 'nlines_actual=%i nlines_expected=%i' % (len(lines_actual), len(lines_expected)) self.assertEqual(len(lines_actual), len(lines_expected), msg) for actual, expected in zip(lines_actual, lines_expected): self.assertEqual(actual, expected)
def write_bdf(self, f, size=8, lids=None): if self.n: for (lid, nid, cid, mag, xyz) in izip( self.load_id, self.node_id, self.coord_id, self.mag, self.xyz): card = ['MOMENT', lid, nid, cid, mag, xyz[0], xyz[1], xyz[2] ] f.write(print_card(card))
def test_rbe1_03(self): lines = [ 'rbe1,46,3,123456, , , , , ,+rbe46', '+rbe46,UM,4,123456,5,123456,2.0-6' ] card = bdf.process_card(lines) #print(print_card(card)) card = BDFCard(card) #print(card) card2 = RBE1(card) fields = card2.raw_fields() msg = print_card(fields).rstrip() #print(msg) lines_expected = [ 'RBE1 46 3 123456', ' UM 4 123456 5 123456 .000002' ] lines_actual = msg.rstrip().split('\n') msg = '\n%s\n\n%s\n' % ('\n'.join(lines_expected), msg) msg += 'nlines_actual=%i nlines_expected=%i' % (len(lines_actual), len(lines_expected)) self.assertEqual(len(lines_actual), len(lines_expected), msg) for actual, expected in zip(lines_actual, lines_expected): self.assertEqual(actual, expected, msg)
def test_rbe2_02(self): lines = [ 'RBE2 100045 166007 123456 117752 101899 117766 101898 117748', '+ 117765 117764 117763 109821 117743 117744 117750 117751', '+ 117745 117746 101902 ', ] card = bdf.process_card(lines) card = BDFCard(card) #print(card) card2 = RBE2(card) fields = card2.raw_fields() msg = print_card(fields).rstrip() #print(msg) lines_expected = [ 'RBE2 100045 166007 123456 117752 101899 117766 101898 117748', ' 117765 117764 117763 109821 117743 117744 117750 117751', ' 117745 117746 101902 0.' ] lines_actual = msg.rstrip().split('\n') msg = '\n%s\n\n%s\n' % ('\n'.join(lines_expected), msg) msg += 'nlines_actual=%i nlines_expected=%i' % (len(lines_actual), len(lines_expected)) self.assertEqual(len(lines_actual), len(lines_expected), msg) for actual, expected in zip(lines_actual, lines_expected): self.assertEqual(actual, expected, msg)
def write_bdf(self, f, size=8, load_ids=None): if self.n: i = self.get_index(load_ids) for (lid, eid, p, n, theta) in izip(self.load_id[i], self.element_id[i], self.p[i], self.node_ids[i], self.theta[i]): card = ['PLOADX1', lid, eid, p[0], p[1], n[0], n[1], theta] f.write(print_card(card))
def write_bdf(self, f, size=8): if self.n: for dof, node_ids in sorted(self.components.iteritems()): card = ['SPC', self.constraint_id] for node_id in node_ids: card += [node_id, dof, 0.0] f.write(print_card(card))
def test_pbeam_09(self): fields = [u'PBEAM', 4570049, 4570010, 0.12, 0.000256, 0.005625, None, 0.0008889, 6.4444e-07, -0.04, -0.75, 0.04, -0.75, 0.04, 0.75, -0.04, 0.75, 'YES', 1.0, 0.12, 0.000256, 0.005625, 0.000256, None, 0.0008889, 6.4444e-07, -0.04, -0.75, 0.04, -0.75, 0.04, 0.75, -0.04, 0.853433, 0.849842] #fields = [u'PBAR', 1510998, 1520998, 0.0, 4.9000000000000006e-14, 4.9000000000000006e-14, 0.0, 0.0, None, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, None, None, 0.0] card = print_card(fields) #print(card) card = print_card(fields) lines = card.split('\n') card = bdf.process_card(lines) card2 = BDFCard(card) #with self.assertRaises(AssertionError): # A=0, I12=0, K1=0 pbeam = PBEAM(card2) fields2 = pbeam.reprFields() assert fields == fields
def test_print_card_8(self): self.assertEquals(print_card(['GRID',1]),'GRID 1\n') self.assertEquals(print_card(['GRID', 1, None, None, None, None, None, None, None, 1]), 'GRID 1\n 1\n', print_card(['GRID', 1, None, None, None, None, None, None, None, 1])) self.assertEquals(print_card(['GRID', 1, None, None, None, None, None, None, None, 1, None]), 'GRID 1\n 1\n', print_card(['GRID', 1, None, None, None, None, None, None, None, 1, None])) self.assertEquals(print_card(['GRID', 1, None, None, None, None, None, None, None, None,None,None,None,None,None,None,None, 1, None]), 'GRID 1\n+\n 1\n', print_card(['GRID', 1, None, None, None, None, None, None, None, None,None,None,None,None,None,None,None, 1, None]))
def write_bdf(self, f, size=8, element_ids=None): if self.n: if element_ids is None: i = arange(self.n) else: i = searchsorted(self.element_id, element_ids) for (eid, pid, n) in zip(self.element_id[i], self.property_id[i], self.node_ids[i, :]): card = ['CTETRA', eid, pid, n[0], n[1], n[2], n[3]] f.write(print_card(card))
def stl_to_nastran_filename(stl_filename, bdf_filename, nnodes_offset=0, nelements_offset=0, log=None): model = STLReader(log=log) model.read_stl(stl_filename) nid = nnodes_offset + 1 cid = None pid = 100 mid = 200 load_id = 10 nodal_normals = model.get_normals_at_nodes(model.elements) bdf = open(bdf_filename, 'wb') bdf.write('CEND\n') #bdf.write('LOAD = %s\n' % load_id) bdf.write('BEGIN BULK\n') for (x, y, z) in model.nodes: card = ['GRID', nid, cid, x, y, z] bdf.write(print_card(card)) #nx, ny, nz = nodal_normals[nid - 1] #card = ['FORCE', load_id, nid, cid, 100, nx, ny, nz] #bdf.write(print_card(card)) nid += 1 eid = nelements_offset + 1 for (n1, n2, n3) in (model.elements + (nnodes_offset + 1)): card = ['CTRIA3', eid, pid, n1, n2, n3] bdf.write(print_card(card)) eid += 1 t = 0.1 card = ['PSHELL', pid, mid, t] bdf.write(print_card(card)) E = 1e7 G = None nu = 0.3 card = ['MAT1', mid, E, G, nu] bdf.write(print_card(card)) bdf.write('ENDDATA\n') bdf.close()
def write_bdf(self, f, size=8, load_ids=None): if self.n: if load_ids is None: i = arange(self.n) else: i = searchsorted(load_ids, self.load_id) for (load_id, element_id, p) in zip(self.load_id[i], self.element_id[i], self.p[i]): card = ['PLOAD2', load_id, element_id, p] f.write(print_card(card))
def write_bdf(self, f, size=8, eids=None): if self.n: if eids is None: i = arange(self.n) else: i = searchsorted(self.element_id, self.eid) for (eid, pid, n, c) in zip(self.element_id[i], self.property_id[i], self.node_ids[i], self.components[i]): card = ['CELAS1', eid, pid, n[0], n[1], c[0], c[1] ] f.write(print_card(card))
def write_bdf(self, f, size=8, pids=None): if self.n: if pids is None: i = arange(self.n) else: i = pids for (pid, k, ge, s) in izip(self.property_id[i], self.K[i], self.ge[i], self.s[i]): card = ['PELAS', pid, k, ge, s] f.write(print_card(card, size=size))
def write_bdf(self, f, size=8, load_ids=None): if self.n: if load_ids is None: i = arange(self.n) else: i = searchsorted(load_ids, self.load_id) for (load_id, element_id, Type, scale, x1, p1, x2, p2) in zip(self.load_id[i], self.element_id[i], self.Type[i], self.scale[i], self.x1[i], self.p1[i], self.x2[i], self.p2[i]): card = ['PLOAD1', load_id, element_id, Type, scale, x1, p1, x2, p2 ] f.write(print_card(card))
def write_bdf(self, f, size=8, load_ids=None): if self.n: if load_ids is None: i = arange(self.n) else: i = searchsorted(load_ids, self.load_id) n3 = ['' if n3i == 0 else n3i for n3i in self.node_ids[i, 3]] for (load_id, p, n, n3i) in zip(self.load_id[i], self.pressure[i],self.node_ids[i, :2], n3): card = ['PLOAD', load_id, p, n[0], n[1], n[2], n3i ] f.write(print_card(card))
def write_nastran(self, fname, points, elements, regions): f = open(fname, 'wb') nnodes, three = points.shape for nid in xrange(nnodes): (x, y, z) = nodes[nid, :] f.write(print_card(['GRID', nid + 1, '', x, y, z])) e = 1e7 nu = 0.3 g = '' thickness = 0.25 setRegions = list(set(regions)) for pidMid in setRegions: f.write(print_card(['MAT1', pidMid, e, g, nu])) f.write(print_card(['PSHELL', pidMid, pidMid, thickness])) for eid, (nodes, region) in enumerate(1, izip(elements, regions)): (n1, n2, n3) = nodes f.write(print_card(['CTRIA3', eid, region, n1, n2, n3])) f.close()
def write_bdf(self, f, size=8, eids=None): if self.n: if eids is None: i = arange(self.n) else: assert len(unique(eids))==len(eids), unique(eids) i = searchsorted(self.element_id, eids) for (eid, pid, n) in zip(self.element_id[i], self.property_id[i], self.node_ids[i]): card = ['CSHEAR', eid, pid, n[0], n[1], n[2], n[3]] f.write(print_card(card, size=size))
def _compare(self, fields, lines_expected): msg = print_card(fields).rstrip() lines_actual = msg.rstrip().split('\n') msgA = '\n%s\n\n%s\n' % ('\n'.join(lines_expected), msg) msgA += 'nlines_actual=%i nlines_expected=%i' % (len(lines_actual), len(lines_expected)) self.assertEqual(len(lines_actual), len(lines_expected), msgA) for i, actual, expected in izip(count(), lines_actual, lines_expected): actual = str(actual) expected = str(expected) msg = msgA + '\ni=%s' % i + '\nactual = %r\n' % actual msg += 'expected = %r' % expected self.assertEqual(actual, expected, msg)
def write_bdf(self, f, size=8, load_ids=None): if self.n: if load_ids is None: i = arange(self.n) else: i = searchsorted(load_ids, self.load_id) n3 = ['' if n3i == 0 else n3i for n3i in self.node_ids[i, 3]] for (load_id, p, n, n3i) in zip(self.load_id[i], self.pressure[i], self.node_ids[i, :2], n3): card = ['PLOAD', load_id, p, n[0], n[1], n[2], n3i] f.write(print_card(card))