Esempio n. 1
0
 def write_card(self, bdf_file, size=8, is_double=False):
     if self.n:
         if size == 8:
             for load_id, element_id, tbar, tprime in zip(
                     self.load_id, self.element_id, self.tbar, self.tprime):
                 bdf_file.write('TEMPP1  %8i%8i%s%s\n' %
                                (load_id, element_id, print_float_8(tbar),
                                 print_float_8(tprime)))
         else:
             for load_id, element_id, tbar, tprime in zip(
                     self.load_id, self.element_id, self.tbar, self.tprime):
                 bdf_file.write('TEMPP1* %16i%16i%s%s\n*\n' %
                                (load_id, element_id, print_float_16(tbar),
                                 print_float_16(tprime)))
Esempio n. 2
0
 def write_card_8(self):
     """
     Writes a GRID card in 8-field format
     """
     xyz = self.xyz
     cp = set_string8_blank_if_default(self.Cp(), 0)
     cd = set_string8_blank_if_default(self.Cd(), 0)
     seid = set_string8_blank_if_default(self.SEid(), 0)
     msg = '%-8s%8i%8s%s%s%s%s%8s%s\n' % (
         'GRID', self.nid, cp,
         print_float_8(xyz[0]),
         print_float_8(xyz[1]),
         print_float_8(xyz[2]),
         cd, self.ps, seid)
     return self.comment + msg.rstrip() + '\n'
Esempio n. 3
0
    def test_float_8(self):
        small_exponent = -17
        large_exponent = 17

        nums = (
            [0., 0.000034, -0.000034] +
            [9./11 * 10**x for x in range(small_exponent, large_exponent+1)] +
            [-9./11 * 10**x for x in range(small_exponent, large_exponent+1)])

        expected = [
            '      0.', ' .000034', '  -3.4-5',

            '8.182-18', '8.182-17', '8.182-16', '8.182-15', '8.182-14', '8.182-13',
            '8.182-12', '8.182-11', '8.182-10', '8.1818-9', '8.1818-8', '8.1818-7',
            '8.1818-6', '8.1818-5', '8.1818-4', '.0081818', '.0818182', '.8181818',
            '8.181818', '81.81818', '818.1818', '8181.818', '81818.18', '818181.8',
            '8181818.', '8.1818+7', '8.1818+8', '8.1818+9', '8.182+10', '8.182+11',
            '8.182+12', '8.182+13', '8.182+14', '8.182+15', '8.182+16',

            '-8.18-18', '-8.18-17', '-8.18-16', '-8.18-15', '-8.18-14', '-8.18-13',
            '-8.18-12', '-8.18-11', '-8.18-10', '-8.182-9', '-8.182-8', '-8.182-7',
            '-8.182-6', '-8.182-5', '-8.182-4', '-8.182-3', '-.081818', '-.818182',
            '-8.18182', '-81.8182', '-818.182', '-8181.82', '-81818.2', '-818182.',
            '-8.182+6', '-8.182+7', '-8.182+8', '-8.182+9', '-8.18+10', '-8.18+11',
            '-8.18+12', '-8.18+13', '-8.18+14', '-8.18+15', '-8.18+16',
        ]
        for x, expectedi in zip(nums, expected):
            output = print_float_8(x)
            self.assertEqual(len(output), 8, msg='output=%r len(output)=%i' % (output, len(output)))
            self.assertEqual(output, expectedi, msg='num=%s output=%r expected=%r' % (x, output, expectedi))
Esempio n. 4
0
    def test_float_8(self):
        small_exponent = -17
        large_exponent = 17

        nums = (
            [0., 0.000034, -0.000034] +
            [9./11 * 10**x for x in range(small_exponent, large_exponent+1)] +
            [-9./11 * 10**x for x in range(small_exponent, large_exponent+1)])

        expected = [
            '      0.', ' .000034', '  -3.4-5',

            '8.182-18', '8.182-17', '8.182-16', '8.182-15', '8.182-14', '8.182-13',
            '8.182-12', '8.182-11', '8.182-10', '8.1818-9', '8.1818-8', '8.1818-7',
            '8.1818-6', '8.1818-5', '8.1818-4', '.0081818', '.0818182', '.8181818',
            '8.181818', '81.81818', '818.1818', '8181.818', '81818.18', '818181.8',
            '8181818.', '8.1818+7', '8.1818+8', '8.1818+9', '8.182+10', '8.182+11',
            '8.182+12', '8.182+13', '8.182+14', '8.182+15', '8.182+16',

            '-8.18-18', '-8.18-17', '-8.18-16', '-8.18-15', '-8.18-14', '-8.18-13',
            '-8.18-12', '-8.18-11', '-8.18-10', '-8.182-9', '-8.182-8', '-8.182-7',
            '-8.182-6', '-8.182-5', '-8.182-4', '-8.182-3', '-.081818', '-.818182',
            '-8.18182', '-81.8182', '-818.182', '-8181.82', '-81818.2', '-818182.',
            '-8.182+6', '-8.182+7', '-8.182+8', '-8.182+9', '-8.18+10', '-8.18+11',
            '-8.18+12', '-8.18+13', '-8.18+14', '-8.18+15', '-8.18+16',
        ]
        for x, expectedi in zip(nums, expected):
            output = print_float_8(x)
            self.assertEqual(len(output), 8, msg='output=%r len(output)=%i' % (output, len(output)))
            self.assertEqual(output, expectedi, msg='num=%s output=%r expected=%r' % (x, output, expectedi))
Esempio n. 5
0
 def write_card_8(self):
     msg = 'MPC     %8s' % self.conid
     grids, components, enforceds = self.node_ids, self.components, self.enforced
     for i, grid, component, enforced in zip(count(), grids, components, enforceds):
         msg += '%8i%8s%8s' % (grid, component, print_float_8(enforced))
         if i % 2 == 1 and i > 0:
             msg += '\n%8s%8s' % ('', '')
     return self.comment + msg.rstrip() + '\n'
Esempio n. 6
0
 def write_card_8(self):
     msg = 'MPC     %8s' % self.conid
     grids, constraints, enforceds = self.node_ids, self.constraints, self.enforced
     for i, grid, component, enforced in zip(count(), grids, constraints, enforceds):
         msg += '%8i%8s%8s' % (grid, component, print_float_8(enforced))
         if i % 2 == 1 and i > 0:
             msg += '\n%8s%8s' % ('', '')
     return self.comment + msg.rstrip() + '\n'
Esempio n. 7
0
    def test_floats_positive_8(self):
        # ideal
        #self.assertEqual(print_float_8(-.003607), '-.003607',
        #                 print_float_8(-.003607))

        # actual
        self.assertEqual(print_float_8(-.003607), '-3.607-3',
                         print_float_8(-.003607))

        # good
        self.assertEqual(print_float_8(1.2), '     1.2', print_float_8(1.2))
        self.assertEqual(print_float_8(0.5), '      .5', print_float_8(0.5))
        self.assertEqual(print_float_8(-0.5), '     -.5', print_float_8(-0.5))

        self.assertEqual(print_field_8(1.2), '     1.2', 'a')
        self.assertEqual(print_field_8(1.23456789), '1.234568', 'b')
        self.assertEqual(print_field_8(12.234568), '12.23457', 'c')
        self.assertEqual(print_field_8(123.23457), '123.2346', 'd')
        self.assertEqual(print_field_8(1234.23468), '1234.235', 'e')
        self.assertEqual(print_field_8(12345.238), '12345.24', 'f')
        self.assertEqual(print_field_8(123456.28), '123456.3', 'g')
        self.assertEqual(print_field_8(1234567.25), '1234567.',
                         print_field_8(1234567.25))  # 1.2346+6
        self.assertEqual(print_field_8(12345678.), '1.2346+7',
                         '%r' % print_field_8(12345678.))
        self.assertEqual(print_field_8(123456789.), '1.2346+8',
                         '%r' % print_field_8(12345678.))

        self.assertEqual(print_field_8(0.1), '      .1',
                         'A|%s|' % print_field_8(0.1))
        self.assertEqual(print_field_8(0.0001), '   .0001',
                         'B|%s|' % print_field_8(0.0001))
        self.assertEqual(print_field_8(0.00001), '  .00001',
                         'C|%s|' % print_field_8(0.00001))
        self.assertEqual(print_field_8(0.000001), ' .000001',
                         'D|%s|' % print_field_8(0.000001))
        self.assertEqual(print_field_8(0.0000001), '.0000001',
                         'E|%s|' % print_field_8(0.0000001))
        self.assertEqual(print_field_8(0.00000012), '   1.2-7',
                         'F|%s|' % print_field_8(0.00000012))
        self.assertEqual(print_field_8(0.000748519), '7.4852-4',
                         'G|%s|' % print_field_8(0.000748519))
        self.assertEqual(print_field_8(0.12345678), '.1234568',
                         'H|%s|' % print_field_8(0.12345678))
        self.assertEqual(print_field_8(0.00012349), '1.2349-4',
                         'I|%s|' % print_field_8(0.00012349))
        self.assertEqual(print_field_8(0.000012349), '1.2349-5',
                         'J|%s|' % print_field_8(0.000012349))
        self.assertEqual(print_field_8(5e-08), '    5.-8',
                         'K|%s|' % print_field_8(5e-08))

        self.assertEqual(print_field_8(1e-20), '   1.-20',
                         'L|%s|' % print_field_8(1e-20))

        self.assertEqual(print_field_8(0.0), '      0.', print_field_8(0.0))
        self.assertEqual(print_field_8(1.0), '      1.', print_field_8(1.0))
Esempio n. 8
0
 def write_card(self, bdf_file, size=8, is_double=False):
     if self.n:
         if size == 8:
             for load_id, element_id, tbar, tprime in zip(self.load_id, self.element_id, self.tbar, self.tprime):
                 bdf_file.write('TEMPP1  %8i%8i%s%s\n' % (load_id, element_id, print_float_8(tbar), print_float_8(tprime)))
         else:
             for load_id, element_id, tbar, tprime in zip(self.load_id, self.element_id, self.tbar, self.tprime):
                 bdf_file.write('TEMPP1* %16i%16i%s%s\n*\n' % (load_id, element_id, print_float_16(tbar), print_float_16(tprime)))
Esempio n. 9
0
    def write_card_8(self):
        """
        Writes a GRID card in 8-field format
        """
        xyz = self.xyz
        cp = self.Cp()
        cd = self.Cd()

        cps = set_string8_blank_if_default(cp, 0)
        if [cd, self.ps, self.seid] == [0, '', 0]:
            # default
            msg = 'GRID    %8i%8s%s%s%s\n' % (
                self.nid, cps,
                print_float_8(xyz[0]),
                print_float_8(xyz[1]),
                print_float_8(xyz[2]))
            return self.comment + msg
        else:
            cds = set_string8_blank_if_default(cd, 0)
            seid = set_string8_blank_if_default(self.SEid(), 0)
            msg = 'GRID    %8i%8s%s%s%s%s%8s%s\n' % (
                self.nid, cps,
                print_float_8(xyz[0]),
                print_float_8(xyz[1]),
                print_float_8(xyz[2]),
                cds, self.ps, seid)
            return self.comment + msg
Esempio n. 10
0
    def write_card_8(self):
        # type: () -> str
        """
        Writes a GRID card in 8-field format
        """
        xyz = self.xyz
        cp = self.Cp()
        cd = self.Cd()

        cps = set_string8_blank_if_default(cp, 0)
        if [cd, self.ps, self.seid] == [0, '', 0]:
            # default
            msg = 'GRID    %8i%8s%s%s%s\n' % (
                self.nid, cps,
                print_float_8(xyz[0]),
                print_float_8(xyz[1]),
                print_float_8(xyz[2]))
            return self.comment + msg
        else:
            cds = set_string8_blank_if_default(cd, 0)
            seid = set_string8_blank_if_default(self.SEid(), 0)
            msg = 'GRID    %8i%8s%s%s%s%s%8s%s\n' % (
                self.nid, cps,
                print_float_8(xyz[0]),
                print_float_8(xyz[1]),
                print_float_8(xyz[2]),
                cds, self.ps, seid)
            return self.comment + msg
Esempio n. 11
0
    def write_card(self, bdf_file, size=8, is_double=False):
        #nids = ['%8i' % node_id for node_id in self.node_id]
        nleftover = self.n // 3 * 3
        if size == 8:
            temps = [print_float_8(tempi) % temp for temp in self.temperature]
            for i in range(0, self.n, 3):
                bdf_file.write('TEMP    %8i%8i%s %8i%s%8i%s' % (self.temp_id,
                                                                self.node_id[i], print_float_8(temps[i]),
                                                                self.node_id[i+1], print_float_8(temps[i+1]),
                                                                self.node_id[i+2], print_float_8(temps[i+2])))
            for i in range(nleftover, self.n - nleftover):
                bdf_file.write('TEMP    %8i%s' % (self.temp_id, print_float_8(temps[i])))

            if self.is_default:
                bdf_file.write('TEMPD   %8i%s\n' % (self.temp_id, print_float_8(self.default)))
        else:
            temps = [print_float_16(tempi) % temp for temp in self.temperature]
            for i in range(0, self.n, 3):
                bdf_file.write('TEMP*   %16i%16i%s\n' % (self.temp_id,
                                                         self.node_id[i], print_float_16(temps[i])))
                bdf_file.write('%8s%16i%s%16i%s' % ('*       ',
                                                    self.node_id[i+1], print_float_16(temps[i+1]),
                                                    self.node_id[i+2], print_float_16(temps[i+2])))
            for i in range(nleftover, self.n - nleftover):
                bdf_file.write('TEMP*   %16i%16i%s\n*\n' % (self.temp_id, self.node_id[i], print_float_16(temps[i])))
            if self.is_default:
                bdf_file.write('TEMPD*  %16i%s\n' % (self.temp_id, print_float_16(self.default)))
Esempio n. 12
0
 def test_float_8_many(self):
     for istart in np.arange(-13, 13):
         #print(istart)
         nums = np.logspace(istart,
                            istart + 1,
                            num=1000,
                            endpoint=True,
                            base=10.0,
                            dtype=None)
         for num in nums:
             output = print_float_8(num)
             self.assertEqual(len(output),
                              8,
                              msg='output=%r len(output)=%i' %
                              (output, len(output)))
             #self.assertEqual(output, expectedi, msg='num=%s output=%r expected=%r' % (x, output, expectedi))
             output = print_scientific_8(num)
             self.assertEqual(len(output),
                              8,
                              msg='output=%r len(output)=%i' %
                              (output, len(output)))
Esempio n. 13
0
    def write_card_by_index(self, bdf_file, i=None, size=8, is_double=False, write_header=True):
        """
        Write the BDF cards

        Parameters
        ----------
        bdf_file : file
            a file object
        i : List[int] (default=None -> all)
            the indicies
        size : int; default=8
            the field width (8/16)
        is_double: bool; default=False
            is this double precision
        write_header : bool; default=True
            should the card marker be written
        """
        if i is None:
            i = slice(None, None)
        if self.n:
            if write_header:
                bdf_file.write('$GRID\n')
            if max(self.node_id.max(), self.cd.max(), self.cp.max()) > self.model.max_int:
                size = 16
            #self.model.log.debug('GRID i = %s' % i)

            # default to the GRDSET defaults
            #cp0 = self.model.grdset.cp
            #cd0 = self.model.grdset.cd
            #ps0 = self.model.grdset.ps
            #seid0 = self.model.grdset.seid

            # default to the GRID defaults
            #cp0 = 0
            #cd0 = 0
            ps0 = -1
            seid0 = 0
            blank = ' ' * 8 if size == 8 else ' ' * 16
            Cp = [cpi if cpi != 0 else blank for cpi in self.cp[i]]
            Cd = [cdi if cdi != 0 else blank for cdi in self.cd[i]]
            Ps = [psi if psi != ps0 else blank for psi in self.ps[i]]
            Seid = [seidi if seidi != seid0 else blank for seidi in self.seid[i]]
            if size == 8:
                for (nid, cp, xyz, cd, ps, seid) in zip(
                        self.node_id, Cp, self.xyz[i, :], Cd, Ps, Seid):
                    msg = ('GRID    %8i%8s%s%s%s%8s%8s%s\n' % (
                        nid, cp,
                        print_float_8(xyz[0]),
                        print_float_8(xyz[1]),
                        print_float_8(xyz[2]),
                        cd, ps, seid)).rstrip() + '\n'

                    bdf_file.write(msg)
            else:
                if is_double:
                    for (nid, cp, xyz, cd, ps, seid) in zip(
                            self.node_id, Cp, self.xyz[i, :], Cd, Ps, Seid):
                        msg = (('GRID*   %16i%16s%16s%16s\n'
                                '*       %16s%16s%16s%16s\n' % (
                                    nid, cp,
                                    print_scientific_double(xyz[0]),
                                    print_scientific_double(xyz[1]),
                                    print_scientific_double(xyz[2]),
                                    cd, ps, seid))).rstrip() + '\n'
                        bdf_file.write(msg)
                else:
                    for (nid, cp, xyz, cd, ps, seid) in zip(
                            self.node_id, Cp, self.xyz[i, :], Cd, Ps, Seid):
                        msg = (('GRID*   %16i%16s%16s%16s\n'
                                '*       %-8s%16s%16s%16s\n' % (
                                    nid, cp,
                                    print_float_16(xyz[0]),
                                    print_float_16(xyz[1]),
                                    print_float_16(xyz[2]),
                                    cd, ps, seid))).rstrip() + '\n'
                        bdf_file.write(msg)
Esempio n. 14
0
    def test_floats_positive_8(self):
        # ideal
        #self.assertEqual(print_float_8(-.003607), '-.003607',
        #                 print_float_8(-.003607))

        # actual
        self.assertEqual(print_float_8(-.003607), '-3.607-3',
                         print_float_8(-.003607))

        # good
        self.assertEqual(print_float_8(1.2), '     1.2',
                         print_float_8(1.2))
        self.assertEqual(print_float_8(0.5), '      .5',
                         print_float_8(0.5))
        self.assertEqual(print_float_8(-0.5), '     -.5',
                         print_float_8(-0.5))

        self.assertEqual(print_field(1.2), '     1.2', 'a')
        self.assertEqual(print_field(1.23456789), '1.234568', 'b')
        self.assertEqual(print_field(12.234568), '12.23457', 'c')
        self.assertEqual(print_field(123.23457), '123.2346', 'd')
        self.assertEqual(print_field(1234.23468), '1234.235', 'e')
        self.assertEqual(print_field(12345.238), '12345.24', 'f')
        self.assertEqual(print_field(123456.28), '123456.3', 'g')
        self.assertEqual(print_field(1234567.25), '1234567.',
                         print_field(1234567.25))  # 1.2346+6
        self.assertEqual(print_field(12345678.), '1.2346+7',
                         '%r' % print_field(12345678.))
        self.assertEqual(print_field(
            123456789.), '1.2346+8', '%r' % print_field(12345678.))

        self.assertEqual(print_field(0.1), '      .1',
                         'A|%s|' % print_field(0.1))
        self.assertEqual(print_field(0.0001), '   .0001',
                         'B|%s|' % print_field(0.0001))
        self.assertEqual(print_field(0.00001), '  .00001',
                         'C|%s|' % print_field(0.00001))
        self.assertEqual(print_field(0.000001), ' .000001',
                         'D|%s|' % print_field(0.000001))
        self.assertEqual(print_field(0.0000001), '.0000001',
                         'E|%s|' % print_field(0.0000001))
        self.assertEqual(print_field(0.00000012), '   1.2-7',
                         'F|%s|' % print_field(0.00000012))
        self.assertEqual(print_field(0.000748519), '7.4852-4',
                         'G|%s|' % print_field(0.000748519))
        self.assertEqual(print_field(0.12345678), '.1234568',
                         'H|%s|' % print_field(0.12345678))
        self.assertEqual(print_field(0.00012349), '1.2349-4',
                         'I|%s|' % print_field(0.00012349))
        self.assertEqual(print_field(0.000012349), '1.2349-5',
                         'J|%s|' % print_field(0.000012349))
        self.assertEqual(print_field(5e-08), '    5.-8',
                         'K|%s|' % print_field(5e-08))

        self.assertEqual(print_field(1e-20), '   1.-20',
                         'L|%s|' % print_field(1e-20))

        self.assertEqual(print_field(0.0), '      0.',
                         print_field(0.0))
        self.assertEqual(print_field(1.0), '      1.',
                         print_field(1.0))
Esempio n. 15
0
 def write_card_8(self, bdf_file=None):
     # type: () -> str
     """
     Writes a GRID card in 8-field format
     """
     assert bdf_file is not None
     self.make_current()
     msg = ''
     for nid, xyz, cp, cd, ps, seid in zip(self.nid, self.xyz, self.cp,
                                           self.cd, self.ps, self.seid):
         cps = set_string8_blank_if_default(cp, 0)
         if [cd, ps, seid] == [0, '', 0]:
             # default
             print_float_8(xyz[0])
             print_float_8(xyz[1])
             print_float_8(xyz[2])
             msgi = 'GRID    %8i%8s%s%s%s\n' % (
                 nid,
                 cps,
                 print_float_8(xyz[0]),
                 print_float_8(xyz[1]),
                 print_float_8(xyz[2]),
             )
         else:
             cds = set_string8_blank_if_default(cd, 0)
             seids = set_string8_blank_if_default(seid, 0)
             msgi = 'GRID    %8i%8s%s%s%s%s%8s%s\n' % (
                 nid, cps, print_float_8(xyz[0]), print_float_8(
                     xyz[1]), print_float_8(xyz[2]), cds, ps, seids)
         msg += self.comment[nid] + msgi
     bdf_file.write(msg)
     return msg
Esempio n. 16
0
    def write_bdf(self,
                  bdf_filename,
                  include_shells=True,
                  include_solids=True,
                  convert_pyram_to_penta=True,
                  write_grids=True,
                  encoding=None,
                  size=16,
                  is_double=False,
                  check=True):
        """
        writes a Nastran BDF

        Parameters
        ----------
        size : int; {8, 16}; default=16
            the bdf write precision
        is_double : bool; default=False
            the field precision to write
        """
        self._check_node_ids()

        if encoding is None:
            encoding = sys.getdefaultencoding()
        #assert encoding.lower() in ['ascii', 'latin1', 'utf8'], encoding

        with open(bdf_filename, 'w', encoding=encoding) as bdf_file:
            #bdf_file.write('CEND\n')
            #bdf_file.write('BEGIN BULK\n')
            bdf_file.write('$ pyNastran: punch=True\n')
            bdf_file.write('$ pyNastran: encoding=utf-8\n')
            mid = 1
            bdf_file.write('MAT1, %i, 1.0e7,, 0.3\n' % mid)

            self.log.debug('writing GRIDs')
            write_grids = True
            if write_grids:
                if not self.read_solids:
                    nids_to_write = np.unique(
                        np.hstack([self.quads.ravel(),
                                   self.tris.ravel()]))
                    nnodes = self.nodes.shape[0]
                    all_nids = np.arange(nnodes, dtype='int32')
                    inid = np.searchsorted(all_nids, nids_to_write)
                    unused_nodes = self.nodes[inid, :]

                    if size == 8:
                        for i, nid in enumerate(nids_to_write):
                            if i % 200000:  # pragma: no cover
                                print('  i = %s' % i)
                            node = self.nodes[i, :]
                            bdf_file.write('GRID    %8i%8s%s%s%s\n' %
                                           (nid, '', print_float_8(node[0]),
                                            print_float_8(node[1]),
                                            print_float_8(node[2])))
                    else:
                        for i, nid in enumerate(nids_to_write):
                            if i % 200000:  # pragma: no cover
                                print('  i = %s' % i)
                            node = self.nodes[i, :]
                            bdf_file.write('GRID*   %16i%16s%16s%16s\n'
                                           '*       %16s\n' %
                                           (nid, '', print_float_16(node[0]),
                                            print_float_16(node[1]),
                                            print_float_16(node[2])))
                else:
                    if check:
                        self.check_hanging_nodes()
                    if size == 8:
                        for i, node in enumerate(self.nodes):
                            node = self.nodes[i, :]
                            bdf_file.write('GRID    %8i%8s%s%s%s\n' %
                                           (i + 1, '', print_float_8(node[0]),
                                            print_float_8(node[1]),
                                            print_float_8(node[2])))
                    else:
                        for i, node in enumerate(self.nodes):
                            node = self.nodes[i, :]
                            bdf_file.write('GRID*   %16i%16s%16s%16s\n'
                                           '*       %16s\n' %
                                           (i + 1, '', print_float_16(node[0]),
                                            print_float_16(node[1]),
                                            print_float_16(node[2])))

                self.log.debug('finished writing GRIDs')

            eid = 1
            pids = self.pids  #+ 1
            if include_shells:
                upids = unique(pids)  # auto-sorts
                for pid in upids:
                    bdf_file.write('PSHELL,%i,%i, 0.1\n' % (pid, mid))
                self.log.debug('writing CTRIA3')
                for element in self.tris:
                    assert len(np.unique(element)) == 3, element
                    bdf_file.write('CTRIA3  %-8i%-8i%-8i%-8i%-8i\n' %
                                   (eid, pids[eid - 1], element[0], element[1],
                                    element[2]))
                    eid += 1

                self.log.debug('writing CQUAD4')
                for element in self.quads:
                    assert len(np.unique(element)) == 4, element
                    bdf_file.write('CQUAD4  %-8i%-8i%-8i%-8i%-8i%-8i\n' %
                                   (eid, pids[eid - 1], element[0], element[1],
                                    element[2], element[3]))
                    eid += 1
            else:
                ntris = self.tris.shape[0]
                nquads = self.quads.shape[0]
                eid += ntris + nquads

            if len(pids) == 0:
                max_pid = 1
            else:
                max_pid = pids.max()
            #==========================================
            # solids
            if include_solids:
                pid = max_pid + 1
                eid, pid = self._write_bdf_solids(
                    bdf_file,
                    eid,
                    pid,
                    convert_pyram_to_penta=convert_pyram_to_penta)
            bdf_file.write('ENDDATA\n')
Esempio n. 17
0
    def write_card(self, f, size=8, is_double=False, element_id=None):
        assert self.n > 0, self.n
        if self.n:
            if element_id is None:
                i = arange(self.n)
            else:
                i = searchsorted(self.element_id, element_id)

            blank = ' ' * size
            #cid = [cid if cid != 0 else '' for cid in self.coord_id]


            #Mass = [x if x != 0.0 else '' for x in self.mass[i]]
            if size == 8:
                X0 = [print_float_8(x) if x != 0.0 else blank for x in self.x[i, 0]]
                X1 = [print_float_8(x) if x != 0.0 else blank for x in self.x[i, 1]]
                X2 = [print_float_8(x) if x != 0.0 else '' for x in self.x[i, 2]]

                I0 = [print_float_8(x) if x != 0.0 else blank for x in self.I[i, 0]]
                I1 = [print_float_8(x) if x != 0.0 else blank for x in self.I[i, 1]]
                I2 = [print_float_8(x) if x != 0.0 else blank for x in self.I[i, 2]]
                I3 = [print_float_8(x) if x != 0.0 else blank for x in self.I[i, 3]]
                I4 = [print_float_8(x) if x != 0.0 else blank for x in self.I[i, 4]]
                I5 = [print_float_8(x) if x != 0.0 else blank 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], self.coord_id[i], self.mass[i],
                    X0, X1, X2, I0, I1, I2, I3, I4, I5):
                    carda = '%-8s%8i%8i%8i%8s%s%s%s\n' % ('CONM2', eid, nid, cid, print_float_8(mass), x0, x1, x2)
                    cardb = '%8s%8s%8s%8s%8s%8s%8s' % ('', i0, i1, i2, i3, i4, i5)
                    cardi = (carda + cardb).rstrip() + '\n'
                    f.write(cardi)
            else:
                assert size == 16, size
                X0 = [print_float_16(x) if x != 0.0 else blank for x in self.x[i, 0]]
                X1 = [print_float_16(x) if x != 0.0 else blank for x in self.x[i, 1]]
                X2 = [print_float_16(x) if x != 0.0 else '' for x in self.x[i, 2]]

                I0 = [print_float_16(x) if x != 0.0 else blank for x in self.I[i, 0]]
                I1 = [print_float_16(x) if x != 0.0 else blank for x in self.I[i, 1]]
                I2 = [print_float_16(x) if x != 0.0 else blank for x in self.I[i, 2]]
                I3 = [print_float_16(x) if x != 0.0 else blank for x in self.I[i, 3]]
                I4 = [print_float_16(x) if x != 0.0 else blank for x in self.I[i, 4]]
                I5 = [print_float_16(x) if x != 0.0 else blank 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], self.coord_id[i], self.mass[i],
                    X0, X1, X2, I0, I1, I2, I3, I4, I5):
                    carda = '%-8s%16i%16i%16i%16s\n' % ('CONM2*', eid, nid, cid, print_float_8(mass), )
                    cardb = '%-8s%16s%16s%16s%16s\n' % ('*', x0, x1, x2, i0)
                    cardc = '%-8s%16s%16s%16s%16s\n' % ('*', i1, i2, i3, i4)
                    cardd = '%-8s%16s' % ('*', i5)
                    cardcd = (cardc + cardd).rstrip('* \n')
                    if cardcd:
                        cardi = carda + cardb + cardc + cardd
                    else:
                        cardi = carda + cardb
                    f.write(cardi.rstrip() + '\n')
Esempio n. 18
0
    def write_card_by_index(self,
                            bdf_file,
                            i=None,
                            size=8,
                            is_double=False,
                            write_header=True):
        """
        Write the BDF cards

        Parameters
        ----------
        bdf_file : file
            a file object
        i : List[int] (default=None -> all)
            the indicies
        size : int; default=8
            the field width (8/16)
        is_double: bool; default=False
            is this double precision
        write_header : bool; default=True
            should the card marker be written
        """
        if i is None:
            i = slice(None, None)
        if self.n:
            if write_header:
                bdf_file.write('$GRID\n')
            if max(self.node_id.max(), self.cd.max(),
                   self.cp.max()) > self.model.max_int:
                size = 16
            #self.model.log.debug('GRID i = %s' % i)

            # default to the GRDSET defaults
            #cp0 = self.model.grdset.cp
            #cd0 = self.model.grdset.cd
            #ps0 = self.model.grdset.ps
            #seid0 = self.model.grdset.seid

            # default to the GRID defaults
            #cp0 = 0
            #cd0 = 0
            ps0 = -1
            seid0 = 0
            blank = ' ' * 8 if size == 8 else ' ' * 16
            Cp = [cpi if cpi != 0 else blank for cpi in self.cp[i]]
            Cd = [cdi if cdi != 0 else blank for cdi in self.cd[i]]
            Ps = [psi if psi != ps0 else blank for psi in self.ps[i]]
            Seid = [
                seidi if seidi != seid0 else blank for seidi in self.seid[i]
            ]
            if size == 8:
                for (nid, cp, xyz, cd, ps,
                     seid) in zip(self.node_id, Cp, self.xyz[i, :], Cd, Ps,
                                  Seid):
                    msg = (
                        'GRID    %8i%8s%s%s%s%8s%8s%s\n' %
                        (nid, cp, print_float_8(xyz[0]), print_float_8(xyz[1]),
                         print_float_8(xyz[2]), cd, ps, seid)).rstrip() + '\n'

                    bdf_file.write(msg)
            else:
                if is_double:
                    for (nid, cp, xyz, cd, ps,
                         seid) in zip(self.node_id, Cp, self.xyz[i, :], Cd, Ps,
                                      Seid):
                        msg = (('GRID*   %16i%16s%16s%16s\n'
                                '*       %16s%16s%16s%16s\n' %
                                (nid, cp, print_scientific_double(
                                    xyz[0]), print_scientific_double(xyz[1]),
                                 print_scientific_double(
                                     xyz[2]), cd, ps, seid))).rstrip() + '\n'
                        bdf_file.write(msg)
                else:
                    for (nid, cp, xyz, cd, ps,
                         seid) in zip(self.node_id, Cp, self.xyz[i, :], Cd, Ps,
                                      Seid):
                        msg = (('GRID*   %16i%16s%16s%16s\n'
                                '*       %-8s%16s%16s%16s\n' %
                                (nid, cp, print_float_16(xyz[0]),
                                 print_float_16(xyz[1]), print_float_16(
                                     xyz[2]), cd, ps, seid))).rstrip() + '\n'
                        bdf_file.write(msg)
Esempio n. 19
0
    def write_card(self, bdf_file, size=8, is_double=False, element_id=None):
        assert self.n > 0, self.n
        if self.n:
            if element_id is None:
                i = arange(self.n)
            else:
                i = searchsorted(self.element_id, element_id)

            blank = ' ' * size
            #cid = [cid if cid != 0 else '' for cid in self.coord_id]

            #Mass = [x if x != 0.0 else '' for x in self.mass[i]]
            if size == 8:
                X0 = [
                    print_float_8(x) if x != 0.0 else blank
                    for x in self.x[i, 0]
                ]
                X1 = [
                    print_float_8(x) if x != 0.0 else blank
                    for x in self.x[i, 1]
                ]
                X2 = [
                    print_float_8(x) if x != 0.0 else '' for x in self.x[i, 2]
                ]

                I0 = [
                    print_float_8(x) if x != 0.0 else blank
                    for x in self.I[i, 0]
                ]
                I1 = [
                    print_float_8(x) if x != 0.0 else blank
                    for x in self.I[i, 1]
                ]
                I2 = [
                    print_float_8(x) if x != 0.0 else blank
                    for x in self.I[i, 2]
                ]
                I3 = [
                    print_float_8(x) if x != 0.0 else blank
                    for x in self.I[i, 3]
                ]
                I4 = [
                    print_float_8(x) if x != 0.0 else blank
                    for x in self.I[i, 4]
                ]
                I5 = [
                    print_float_8(x) if x != 0.0 else blank
                    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],
                                self.coord_id[i], self.mass[i], X0, X1, X2, I0,
                                I1, I2, I3, I4, I5):
                    if eid in self._comments:
                        bdf_file.write(self._comments[eid])
                    carda = '%-8s%8i%8i%8i%8s%s%s%s\n' % (
                        'CONM2', eid, nid, cid, print_float_8(mass), x0, x1,
                        x2)
                    cardb = '%8s%8s%8s%8s%8s%8s%8s' % ('', i0, i1, i2, i3, i4,
                                                       i5)
                    cardi = (carda + cardb).rstrip() + '\n'
                    bdf_file.write(cardi)
            else:
                assert size == 16, size
                X0 = [
                    print_float_16(x) if x != 0.0 else blank
                    for x in self.x[i, 0]
                ]
                X1 = [
                    print_float_16(x) if x != 0.0 else blank
                    for x in self.x[i, 1]
                ]
                X2 = [
                    print_float_16(x) if x != 0.0 else '' for x in self.x[i, 2]
                ]

                I0 = [
                    print_float_16(x) if x != 0.0 else blank
                    for x in self.I[i, 0]
                ]
                I1 = [
                    print_float_16(x) if x != 0.0 else blank
                    for x in self.I[i, 1]
                ]
                I2 = [
                    print_float_16(x) if x != 0.0 else blank
                    for x in self.I[i, 2]
                ]
                I3 = [
                    print_float_16(x) if x != 0.0 else blank
                    for x in self.I[i, 3]
                ]
                I4 = [
                    print_float_16(x) if x != 0.0 else blank
                    for x in self.I[i, 4]
                ]
                I5 = [
                    print_float_16(x) if x != 0.0 else blank
                    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],
                                self.coord_id[i], self.mass[i], X0, X1, X2, I0,
                                I1, I2, I3, I4, I5):
                    if eid in self._comments:
                        bdf_file.write(self._comments[eid])
                    carda = '%-8s%16i%16i%16i%16s\n' % (
                        'CONM2*',
                        eid,
                        nid,
                        cid,
                        print_float_8(mass),
                    )
                    cardb = '%-8s%16s%16s%16s%16s\n' % ('*', x0, x1, x2, i0)
                    cardc = '%-8s%16s%16s%16s%16s\n' % ('*', i1, i2, i3, i4)
                    cardd = '%-8s%16s' % ('*', i5)
                    cardcd = (cardc + cardd).rstrip('* \n')
                    if cardcd:
                        cardi = carda + cardb + cardc + cardd
                    else:
                        cardi = carda + cardb
                    bdf_file.write(cardi.rstrip() + '\n')
Esempio n. 20
0
    def write_card_by_index(self, bdf_file, i=None, size=8, is_double=False, write_header=True):
        """
        Write the BDF cards

        :param f: a file object
        :param i: the indicies (default=None -> all)
        :param size: the field width (8/16)
        :param is_double: is this double precision (default=False)
        :param write_header: should the card marker be written
        """
        if i is None:
            i = slice(None, None)
        if self.n:
            if write_header:
                bdf_file.write('$GRID\n')
            #self.model.log.debug('GRID i = %s' % i)

            # default to the GRDSET defaults
            #cp0 = self.model.grdset.cp
            #cd0 = self.model.grdset.cd
            #ps0 = self.model.grdset.ps
            #seid0 = self.model.grdset.seid

            # default to the GRID defaults
            cp0 = 0
            cd0 = 0
            ps0 = -1
            seid0 = 0
            blank = ' ' * 8 if size == 8 else ' ' * 16
            Cp = [cpi if cpi != cp0 else blank for cpi in self.cp[i]]
            Cd = [cdi if cdi != cd0 else blank for cdi in self.cd[i]]
            Ps = [psi if psi != ps0 else blank for psi in self.ps[i]]
            Seid = [seidi if seidi != seid0 else blank for seidi in self.seid[i]]
            if size == 8:
                for (nid, cp, xyz, cd, ps, seid) in zip(self.node_id, Cp, self.xyz[i, :], Cd, Ps, Seid):
                    msg = ('%-8s%8i%8s%s%s%s%s%8s%s\n' % ('GRID', nid, cp,
                            print_float_8(xyz[0]),
                            print_float_8(xyz[1]),
                            print_float_8(xyz[2]),
                            cd, ps, seid)).rstrip() + '\n'
                    bdf_file.write(msg)
            else:
                if is_double:
                    for (nid, cp, xyz, cd, ps, seid) in zip(self.node_id, Cp, self.xyz[i, :], Cd, Ps, Seid):
                        msg = (('%-8s%16i%16s%16s%16s\n'
                               '%-8s%16s%16s%16s%16s\n' % ('GRID*', nid,
                                cp,
                                print_scientific_double(xyz[0]),
                                print_scientific_double(xyz[1]),
                                '*',
                                print_scientific_double(xyz[2]),
                                cd, ps, seid))).rstrip() + '\n'
                        bdf_file.write(msg)
                else:
                    for (nid, cp, xyz, cd, ps, seid) in zip(self.node_id, Cp, self.xyz[i, :], Cd, Ps, Seid):
                        msg = (('%-8s%16i%16s%16s%16s\n'
                               '%-8s%16s%16s%16s%16s\n' % ('GRID*', nid,
                                cp,
                                print_float_16(xyz[0]),
                                print_float_16(xyz[1]),
                                '*',
                                print_float_16(xyz[2]),
                                cd, ps, seid))).rstrip() + '\n'
                        bdf_file.write(msg)