Exemple #1
0
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)
Exemple #3
0
 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)
Exemple #4
0
 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
Exemple #5
0
 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)
Exemple #6
0
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()
Exemple #7
0
    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))
Exemple #8
0
 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
Exemple #9
0
    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))
Exemple #10
0
    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)
Exemple #11
0
    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))
Exemple #12
0
    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)
Exemple #13
0
    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)
Exemple #14
0
    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))
Exemple #15
0
    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)
Exemple #16
0
    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)
Exemple #17
0
    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)
Exemple #18
0
    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))
Exemple #19
0
 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))
Exemple #20
0
    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)
Exemple #21
0
    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)
Exemple #22
0
    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)
Exemple #23
0
    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)
Exemple #24
0
    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))
Exemple #25
0
    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)
Exemple #26
0
    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)
Exemple #27
0
    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))
Exemple #28
0
    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 _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)
Exemple #30
0
    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)
Exemple #31
0
 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)
Exemple #32
0
 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))
Exemple #33
0
 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))
Exemple #34
0
 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
Exemple #35
0
 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))
Exemple #36
0
    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]))
Exemple #37
0
 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()
Exemple #39
0
 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))
Exemple #40
0
    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))
Exemple #41
0
    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))
Exemple #42
0
    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))
Exemple #43
0
    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))
Exemple #44
0
 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))
Exemple #45
0
    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()
Exemple #46
0
    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))
Exemple #47
0
    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))
Exemple #48
0
 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)
Exemple #49
0
    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))