Пример #1
0
    def add_card(cls, card, comment=''):
        """
        Adds a SPCD card from ``BDF.add_card(...)``

        Parameters
        ----------
        card : BDFCard()
            a BDFCard object
        comment : str; default=''
            a comment for the card
        """
        sid = integer(card, 1, 'sid')
        if card.field(5) in [None, '']:
            nodes = [
                integer(card, 2, 'G1'),
            ]
            constraints = [components_or_blank(card, 3, 'C1', 0)]
            enforced = [double_or_blank(card, 4, 'D1', 0.0)]
        else:
            nodes = [
                integer(card, 2, 'G1'),
                integer(card, 5, 'G2'),
            ]
            # :0 if scalar point 1-6 if grid
            constraints = [
                components_or_blank(card, 3, 'C1', 0),
                components_or_blank(card, 6, 'C2', 0)
            ]
            enforced = [
                double_or_blank(card, 4, 'D1', 0.0),
                double_or_blank(card, 7, 'D2', 0.0)
            ]
        return SPCD(sid, nodes, constraints, enforced, comment=comment)
Пример #2
0
    def add_card(cls, card, comment=''):
        conid = integer(card, 1, 'conid')
        gids = []
        constraints = []
        enforced = []

        fields = card.fields(0)
        nfields = len(fields)

        i = 1
        for ifield in range(2, nfields, 8):
            grid = integer(card, ifield, 'G%i' % i)
            component = components_or_blank(card, ifield + 1, 'constraint%i' % i, 0)  # scalar point
            if i == 1:
                enforcedi = double(card, ifield + 2, 'enforced%i' % i)
                if enforcedi == 0.0:
                    raise RuntimeError('enforced1 must be nonzero; enforcedi=%r' % enforcedi)
            else:
                enforcedi = double_or_blank(card, ifield + 2, 'enforced%i' % i, 0.0)
            gids.append(grid)
            constraints.append(component)
            enforced.append(enforcedi)
            i += 1

            if ifield + 4 > nfields and i != 2:
                # if G2 is empty (it's ifield+4 because nfields is length based and not loop friendly)
                break
            grid = integer(card, ifield + 3, 'G%i' % i)
            component = components_or_blank(card, ifield + 4, 'constraint%i' % i, 0)  # scalar point
            enforcedi = double_or_blank(card, ifield + 5, 'enforced%i' % i)
            gids.append(grid)
            constraints.append(component)
            enforced.append(enforcedi)
            i += 1
        return MPC(conid, gids, constraints, enforced, comment=comment)
Пример #3
0
    def add_card(cls, card, comment=''):
        sid = integer(card, 1, 'sid')
        nid0 = integer(card, 2, 'nid0')
        # component 0 means an SPOINT/EPOINT
        c = components_or_blank(card, 3, 'components_0', 0)
        b0 = double_or_blank(card, 4, 'b0', 0.)
        b1 = double_or_blank(card, 5, 'b1', 0.)
        b2 = double_or_blank(card, 6, 'b2', 0.)

        nfields = len(card) - 9
        nrows = nfields // 8
        if nfields % 8 > 0:
            nrows += 1

        nids = []
        components = []
        a = []
        for irow in range(nrows):
            j = irow * 8 + 9
            #ifield = irow + 1
            nid = integer(card, j, 'grid_%i' % (irow + 1))
            component = components_or_blank(card, j + 1, 'components_%i' % (irow + 1), 0)
            a0 = double_or_blank(card, j + 2, 'a0_%i' % (irow + 1), 0.)
            a1 = double_or_blank(card, j + 3, 'a1_%i' % (irow + 1), 0.)
            a2 = double_or_blank(card, j + 4, 'a2_%i' % (irow + 1), 0.)
            nids.append(nid)
            components.append(component)
            a.append([a0, a1, a2])
        return TF(sid, nid0, c, b0, b1, b2, nids, components, a,
                  comment=comment)
Пример #4
0
 def add_card(cls, card, comment=''):
     eid = integer(card, 1, 'eid')
     ga = integer(card, 2, 'ga')
     gb = integer(card, 3, 'gb')
     cma = components_or_blank(card, 4, 'cma')
     cmb = components_or_blank(card, 5, 'cmb')
     alpha = double_or_blank(card, 6, 'alpha', 0.0)
     assert len(card) <= 7, 'len(RROD card) = %i\ncard=%s' % (len(card), card)
     return RROD(eid, ga, gb, cma, cmb, alpha, comment=comment)
Пример #5
0
 def add_card(cls, card, comment=''):
     eid = integer(card, 1, 'eid')
     ga = integer(card, 2, 'ga')
     gb = integer(card, 3, 'gb')
     cma = components_or_blank(card, 4, 'cma')
     cmb = components_or_blank(card, 5, 'cmb')
     alpha = double_or_blank(card, 6, 'alpha', 0.0)
     assert len(card) <= 7, 'len(RROD card) = %i\ncard=%s' % (len(card),
                                                              card)
     return RROD(eid, ga, gb, cma, cmb, alpha, comment=comment)
Пример #6
0
    def add_card(cls, card, comment=''):
        """
        Adds an MPC card from ``BDF.add_card(...)``

        Parameters
        ----------
        card : BDFCard()
            a BDFCard object
        comment : str; default=''
            a comment for the card

        """
        conid = integer(card, 1, 'conid')
        nodes = []
        components = []
        coefficients = []

        fields = card.fields(0)
        nfields = len(fields)

        i = 1
        for ifield in range(2, nfields, 8):
            nid = integer(card, ifield, 'G%i' % i)
            component = components_or_blank(card, ifield + 1,
                                            'constraint%i' % i,
                                            0)  # scalar point
            if i == 1:
                coefficient = double(card, ifield + 2, 'coefficient%i' % i)
                if coefficient == 0.0:
                    raise RuntimeError(
                        'coefficient1 must be nonzero; coefficient=%r' %
                        coefficient)
            else:
                coefficient = double_or_blank(card, ifield + 2,
                                              'coefficient%i' % i, 0.0)
            nodes.append(nid)
            components.append(component)
            coefficients.append(coefficient)
            i += 1

            if ifield + 4 > nfields and i != 2:
                # if G2 is empty (it's ifield+4 because nfields is length based
                # and not loop friendly)
                break
            nid = integer(card, ifield + 3, 'G%i' % i)
            component = components_or_blank(card, ifield + 4,
                                            'constraint%i' % i,
                                            0)  # scalar point
            coefficient = double_or_blank(card, ifield + 5,
                                          'coefficient%i' % i)
            nodes.append(nid)
            components.append(component)
            coefficients.append(coefficient)
            i += 1
        return MPC(conid, nodes, components, coefficients, comment=comment)
Пример #7
0
 def add_card(cls, card, comment=''):
     eid = integer(card, 1, 'eid')
     ga = integer(card, 2, 'ga')
     gb = integer(card, 3, 'gb')
     cna = components_or_blank(card, 4, 'cna')
     cnb = components_or_blank(card, 5, 'cnb')
     cma = components_or_blank(card, 6, 'cma')
     cmb = components_or_blank(card, 7, 'cmb')
     alpha = double_or_blank(card, 8, 'alpha', 0.0)
     assert len(card) <= 9, 'len(RBAR card) = %i' % len(card)
     return RBAR(eid, ga, gb, cna, cnb, cma, cmb, alpha, comment=comment)
Пример #8
0
    def add_card(cls, card, comment=''):
        eid = integer(card, 1, 'eid')
        ium = card.index('UM')
        if ium > 0:
            assert string(card, ium, 'UM') == 'UM'

        #assert isinstance(card[-1], string_types), 'card[-1]=%r type=%s' %(card[-1], type(card[-1]))
        alpha_last = integer_double_or_string(card, -1, 'alpha_last')
        if isinstance(alpha_last, float):
            alpha = alpha_last
            card.pop(
            )  # remove the last field so len(card) will not include alpha
        else:
            alpha = 0.

        # loop till UM, no field9,field10
        n = 1
        i = 0
        offset = 2
        Gni = []
        Cni = []
        Gmi = []
        Cmi = []
        while offset + i < ium - 1:
            #print('field(%s) = %s' % (offset + i, card.field(offset + i)))
            gni = integer_or_blank(card, offset + i, 'gn%i' % n)
            cni = components_or_blank(card, offset + i + 1, 'cn%i' % n)

            if gni:
                #print("gni=%s cni=%s" % (gni ,cni))
                Gni.append(gni)
                Cni.append(cni)
                n += 1
            else:
                assert cni is None
            i += 2

        # loop till alpha, no field9,field10
        n = 1
        offset = ium + 1
        i = 0

        # dont grab alpha
        while offset + i < len(card):
            gmi = integer_or_blank(card, offset + i, 'gm%i' % n)
            cmi = components_or_blank(card, offset + i + 1, 'cm%i' % n)
            if gmi:
                Gmi.append(gmi)
                Cmi.append(cmi)
                n += 1
            else:
                assert cmi is None
            i += 2
        return RBE1(eid, Gni, Cni, Gmi, Cmi, alpha=alpha, comment=comment)
Пример #9
0
    def add_card(cls, card, comment=''):
        eid = integer(card, 1, 'eid')
        ium = card.index('UM')
        if ium > 0:
            assert string(card, ium, 'UM') == 'UM'

        #assert isinstance(card[-1], string_types), 'card[-1]=%r type=%s' %(card[-1], type(card[-1]))
        alpha_last = integer_double_or_string(card, -1, 'alpha_last')
        if isinstance(alpha_last, float):
            alpha = alpha_last
            card.pop()  # remove the last field so len(card) will not include alpha
        else:
            alpha = 0.

        # loop till UM, no field9,field10
        n = 1
        i = 0
        offset = 2
        Gni = []
        Cni = []
        Gmi = []
        Cmi = []
        while offset + i < ium - 1:
            #print('field(%s) = %s' % (offset + i, card.field(offset + i)))
            gni = integer_or_blank(card, offset + i, 'gn%i' % n)
            cni = components_or_blank(card, offset + i + 1, 'cn%i' % n)

            if gni:
                #print("gni=%s cni=%s" % (gni ,cni))
                Gni.append(gni)
                Cni.append(cni)
                n += 1
            else:
                assert cni is None
            i += 2

        # loop till alpha, no field9,field10
        n = 1
        offset = ium + 1
        i = 0

        # dont grab alpha
        while offset + i < len(card):
            gmi = integer_or_blank(card, offset + i, 'gm%i' % n)
            cmi = components_or_blank(card, offset + i + 1, 'cm%i' % n)
            if gmi:
                Gmi.append(gmi)
                Cmi.append(cmi)
                n += 1
            else:
                assert cmi is None
            i += 2
        return RBE1(eid, Gni, Cni, Gmi, Cmi, alpha=alpha, comment=comment)
Пример #10
0
    def add_card(cls, card, comment=''):
        """
        Adds a TF card from ``BDF.add_card(...)``

        Parameters
        ----------
        card : BDFCard()
            a BDFCard object
        comment : str; default=''
            a comment for the card
        """
        sid = integer(card, 1, 'sid')
        nid0 = integer(card, 2, 'nid0')
        # component 0 means an SPOINT/EPOINT
        c = components_or_blank(card, 3, 'components_0', 0)
        b0 = double_or_blank(card, 4, 'b0', 0.)
        b1 = double_or_blank(card, 5, 'b1', 0.)
        b2 = double_or_blank(card, 6, 'b2', 0.)

        nfields = len(card) - 9
        nrows = nfields // 8
        if nfields % 8 > 0:
            nrows += 1

        nids = []
        components = []
        a = []
        for irow in range(nrows):
            j = irow * 8 + 9
            #ifield = irow + 1
            nid = integer(card, j, 'grid_%i' % (irow + 1))
            component = components_or_blank(card, j + 1,
                                            'components_%i' % (irow + 1), 0)
            a0 = double_or_blank(card, j + 2, 'a0_%i' % (irow + 1), 0.)
            a1 = double_or_blank(card, j + 3, 'a1_%i' % (irow + 1), 0.)
            a2 = double_or_blank(card, j + 4, 'a2_%i' % (irow + 1), 0.)
            nids.append(nid)
            components.append(component)
            a.append([a0, a1, a2])
        return TF(sid,
                  nid0,
                  c,
                  b0,
                  b1,
                  b2,
                  nids,
                  components,
                  a,
                  comment=comment)
Пример #11
0
def get_spc_constraint(card, i):
    if i == 0:
        constraint_id = integer(card, 1, 'sid')
        node_id = integer(card, 2, 'G1')
        dofs = components_or_blank(card, 3, 'C1', 0)
        enforced_motion = double_or_blank(card, 4, 'D1', 0.0)
    elif i == 1:
        constraint_id = integer(card, 1, 'sid')
        node_id = integer_or_blank(card, 5, 'G2')
        dofs = components_or_blank(card, 6, 'C2', 0)
        enforced_motion = double_or_blank(card, 7, 'D2', 0.0)
    else:
        raise RuntimeError('i =', i)

    return constraint_id, node_id, dofs, enforced_motion
Пример #12
0
    def add(self, card, comment=''):
        #self.model.log.debug('RBE2.add')
        i = self.i
        #if comment:
            #self._comment = comment
        eid = integer(card, 1, 'element_id')
        gn = integer(card, 2, 'gn')
        cm = components_or_blank(card, 3, 'cm')
        #assert gn is not None, 'gn=%s' % self.gn
        #assert cm is not None, 'cm=%s' % self.cm

        self.element_id[i] = eid
        self.gn[i] = gn
        self.cm[i] = cm

        alpha = integer_or_double(card, len(card) - 1, 'alpha')
        if isinstance(alpha, float):
            # the last field is not part of Gmi
            self.alpha[i] = alpha
            n = 1
        else:
            # the last field is part of Gmi
            n = 0
            #self.alpha[i] = 0.0  # we don't need to set alpha

        j = 4
        gmis = []
        for k in range(len(card) - 4 - n):
            gmi = integer(card, j + k, 'Gm%i' % (k + 1))
            #print('GM%i = %s' % (k + 1, gmi))
            gmis.append(gmi)
        self.gmi[i] = gmis
        self.i += 1
Пример #13
0
    def add_card(cls, card, comment=''):
        sid = integer(card, 1, 'sid')
        method = string_or_blank(card, 2, 'method')

        L1 = double(card, 3, 'L1')
        L2 = double(card, 4, 'L2')

        nep = integer_or_blank(card, 5, 'nep', 0)
        ndp = integer_or_blank(card, 6, 'ndp', 3 * nep)
        ndn = integer_or_blank(card, 7, 'ndn', 3 * nep)

        norm = string_or_blank(card, 9, 'norm', 'MAX')
        if norm == 'POINT':
            G = integer(card, 10, 'G')
            C = components(card, 11, 'C')
        else:
            G = integer_or_blank(card, 10, 'G')
            C = components_or_blank(card, 11, 'C')
        assert len(card) <= 12, 'len(EIGB card) = %i\ncard=%s' % (len(card),
                                                                  card)
        return EIGB(sid,
                    method,
                    L1,
                    L2,
                    nep,
                    ndp,
                    ndn,
                    norm,
                    G,
                    C,
                    comment=comment)
Пример #14
0
 def add_card(cls, card, icard=0, comment=''):
     noffset = 3 * icard
     sid = integer(card, 1, 'sid')
     p = integer(card, 2 + noffset, 'p')
     c = components_or_blank(card, 3 + noffset, 'c', 0)
     scale = double(card, 4 + noffset, 'scale')
     return DAREA(sid, p, c, scale, comment=comment)
Пример #15
0
 def add_card(cls, card, icard=0, comment=''):
     noffset = 3 * icard
     sid = integer(card, 1, 'sid')
     nid = integer(card, 2 + noffset, 'p')
     component = int(components_or_blank(card, 3 + noffset, 'c', 0))
     scale = double(card, 4 + noffset, 'scale')
     return DAREA(sid, nid, component, scale, comment=comment)
Пример #16
0
    def add_card(cls, card, comment=''):
        """
        Adds a SUPORT1 card from ``BDF.add_card(...)``

        Parameters
        ----------
        card : BDFCard()
            a BDFCard object
        comment : str; default=''
            a comment for the card
        """
        conid = integer(card, 1, 'conid')  # really a support id sid

        nfields = len(card)
        assert len(card) > 2
        nterms = int((nfields - 1.) / 2.)
        n = 1
        nodes = []
        Cs = []
        for i in range(nterms):
            nstart = 2 + 2 * i
            nid = integer(card, nstart, 'ID%s' % n)
            C = components_or_blank(card, nstart + 1, 'component%s' % n, '0')
            nodes.append(nid)
            Cs.append(C)
            n += 1
        return SUPORT1(conid, nodes, Cs, comment=comment)
Пример #17
0
    def add_card(cls, card, comment=''):
        """
        Adds a RSPLINE card from ``BDF.add_card(...)``

        Parameters
        ----------
        card : BDFCard()
            a BDFCard object
        comment : str; default=''
            a comment for the card
        """
        eid = integer(card, 1, 'eid')
        diameter_ratio = double_or_blank(card, 2, 'diameter_ratio', 0.1)
        nfields = len(card)
        assert nfields % 2 == 1, 'nfields=%s card=%s' % (nfields, card)

        dependent_nids = []
        dependent_components = []
        independent_nid = integer(card, 3, 'nid_1')
        j = 2
        for i in range(4, nfields, 2):
            nid = integer(card, i, 'nid_%s' % j)
            comp = components_or_blank(card, i + 1, 'components_%i' % j)
            dependent_nids.append(nid)
            dependent_components.append(comp)
            j += 1
        return RSPLINE(eid,
                       independent_nid,
                       dependent_nids,
                       dependent_components,
                       diameter_ratio=diameter_ratio,
                       comment=comment)
Пример #18
0
    def add_card(cls, card, comment=''):
        """
        Adds a RBE2 card from ``BDF.add_card(...)``

        Parameters
        ----------
        card : BDFCard()
            a BDFCard object
        comment : str; default=''
            a comment for the card
        """
        eid = integer(card, 1, 'eid')
        gn = integer(card, 2, 'gn')
        cm = components_or_blank(card, 3, 'cm')

        alpha = integer_or_double(card, len(card) - 1, 'alpha')
        if isinstance(alpha, float):
            # alpha is correct
            # the last field is not part of Gmi
            n = 1
        else:
            # the last field is part of Gmi
            n = 0
            alpha = 0.0

        j = 4
        Gmi = []
        for i in range(len(card) - 4 - n):
            gmi = integer(card, j + i, 'Gm%i' % (i + 1))
            Gmi.append(gmi)
        return RBE2(eid, gn, cm, Gmi, alpha, comment=comment)
Пример #19
0
def get_spc_constraint(card, i):
    """parses an SPC/SPCD card"""
    if i == 0:
        constraint_id = integer(card, 1, 'sid')
        node_id = integer(card, 2, 'G1')
        dofs = components_or_blank(card, 3, 'C1', 0)
        enforced_motion = double_or_blank(card, 4, 'D1', 0.0)
    elif i == 1:
        constraint_id = integer(card, 1, 'sid')
        node_id = integer_or_blank(card, 5, 'G2')
        dofs = components_or_blank(card, 6, 'C2', 0)
        enforced_motion = double_or_blank(card, 7, 'D2', 0.0)
    else:
        raise RuntimeError('i =', i)

    return constraint_id, node_id, dofs, enforced_motion
Пример #20
0
    def add_card(cls, card, comment=''):
        """
        Adds an EIGB card from ``BDF.add_card(...)``

        Parameters
        ----------
        card : BDFCard()
            a BDFCard object
        comment : str; default=''
            a comment for the card
        """
        sid = integer(card, 1, 'sid')
        method = string_or_blank(card, 2, 'method')

        L1 = double(card, 3, 'L1')
        L2 = double(card, 4, 'L2')

        nep = integer_or_blank(card, 5, 'nep', 0)
        ndp = integer_or_blank(card, 6, 'ndp', 3 * nep)
        ndn = integer_or_blank(card, 7, 'ndn', 3 * nep)

        norm = string_or_blank(card, 9, 'norm', 'MAX')
        if norm == 'POINT':
            G = integer(card, 10, 'G')
            C = parse_components(card, 11, 'C')
        else:
            G = integer_or_blank(card, 10, 'G')
            C = components_or_blank(card, 11, 'C')
        assert len(card) <= 12, 'len(EIGB card) = %i\ncard=%s' % (len(card), card)
        return EIGB(sid, method, L1, L2, nep, ndp, ndn, norm, G, C,
                    comment=comment)
Пример #21
0
    def add_card(cls, card, comment=''):
        """
        Adds a SUPORT card from ``BDF.add_card(...)``

        Parameters
        ----------
        card : BDFCard()
            a BDFCard object
        comment : str; default=''
            a comment for the card
        """
        # TODO: remove fields...
        #fields = card.fields(1)

        nfields = len(card)
        assert len(card) > 1, card
        nterms = int(nfields / 2.)
        n = 1
        nodes = []
        Cs = []
        for i in range(nterms):
            nstart = 1 + 2 * i
            nid = integer(card, nstart, 'ID%s' % n)
            C = components_or_blank(card, nstart + 1, 'component%s' % n, '0')
            nodes.append(nid)
            Cs.append(C)
            n += 1
        return SUPORT(nodes, Cs, comment=comment)
Пример #22
0
    def add_card(self, card, comment=''):
        #self.model.log.debug('RBE2.add')
        i = self.i
        #if comment:
            # self.comment = comment
        eid = integer(card, 1, 'element_id')
        gn = integer(card, 2, 'gn')
        cm = components_or_blank(card, 3, 'cm')
        #assert gn is not None, 'gn=%s' % self.gn
        #assert cm is not None, 'cm=%s' % self.cm

        self.element_id[i] = eid
        self.gn[i] = gn
        self.cm[i] = cm

        alpha = integer_or_double(card, len(card) - 1, 'alpha')
        if isinstance(alpha, float):
            # the last field is not part of Gmi
            self.alpha[i] = alpha
            n = 1
        else:
            # the last field is part of Gmi
            n = 0
            #self.alpha[i] = 0.0  # we don't need to set alpha

        j = 4
        gmis = []
        for k in range(len(card) - 4 - n):
            gmi = integer(card, j + k, 'Gm%i' % (k + 1))
            #print('GM%i = %s' % (k + 1, gmi))
            gmis.append(gmi)
        self.gmi[i] = gmis
        self.i += 1
Пример #23
0
 def parse(self, card, icard=0, comment=''):
     noffset = 3 * icard
     sid = integer(card, 1, 'sid')
     node = integer(card, 2 + noffset, 'node_p')
     component = int(components_or_blank(card, 3 + noffset, 'c', 0))
     scale = double(card, 4 + noffset, 'scale')
     data = (sid, node, component, scale)
     return data, comment
Пример #24
0
 def add_card(cls, card, comment=''):
     sid = integer(card, 1, 'sid')
     if card.field(5) in [None, '']:
         gids = [integer(card, 2, 'G1'),]
         constraints = [components_or_blank(card, 3, 'C1', 0)]
         enforced = [double_or_blank(card, 4, 'D1', 0.0)]
     else:
         gids = [
             integer(card, 2, 'G1'),
             integer(card, 5, 'G2'),
         ]
         # :0 if scalar point 1-6 if grid
         constraints = [components_or_blank(card, 3, 'C1', 0),
                        components_or_blank(card, 6, 'C2', 0)]
         enforced = [double_or_blank(card, 4, 'D1', 0.0),
                     double_or_blank(card, 7, 'D2', 0.0)]
     return SPCD(sid, gids, constraints, enforced, comment=comment)
Пример #25
0
 def add_card(cls, card, comment=''):
     eid = integer(card, 1, 'eid')
     ga = integer(card, 2, 'ga')
     gb = integer(card, 3, 'gb')
     cb = components_or_blank(card, 4, 'cb')
     alpha = double_or_blank(card, 5, 'alpha', 0.0)
     assert len(card) <= 6, 'len(RBAR1 card) = %i' % len(card)
     return RBAR1(eid, ga, gb, cb, alpha, comment=comment)
Пример #26
0
 def parse(self, card, icard=0, comment=''):
     noffset = 3 * icard
     sid = integer(card, 1, 'sid')
     node = integer(card, 2 + noffset, 'node_p')
     component = int(components_or_blank(card, 3 + noffset, 'c', 0))
     scale = double(card, 4 + noffset, 'scale')
     data = (sid, node, component, scale)
     return data, comment
Пример #27
0
    def add_card(cls, card, comment=''):
        """
        Adds a RROD card from ``BDF.add_card(...)``

        Parameters
        ----------
        card : BDFCard()
            a BDFCard object
        comment : str; default=''
            a comment for the card
        """
        eid = integer(card, 1, 'eid')
        ga = integer(card, 2, 'ga')
        gb = integer(card, 3, 'gb')
        cma = components_or_blank(card, 4, 'cma')
        cmb = components_or_blank(card, 5, 'cmb')
        alpha = double_or_blank(card, 6, 'alpha', 0.0)
        assert len(card) <= 7, 'len(RROD card) = %i\ncard=%s' % (len(card), card)
        return RROD(eid, [ga, gb], cma, cmb, alpha, comment=comment)
Пример #28
0
def get_mpc_constraint(card):
    #: Set identification number. (Integer > 0)
    constraint_id = integer(card, 1, 'conid')
    #: Identification number of grid or scalar point. (Integer > 0)
    #gids = []
    #: Component number. (Any one of the Integers 1 through 6 for grid
    #: points; blank or zero for scalar points.)
    #constraints = []
    #: Coefficient. (Real; Default = 0.0 except A1 must be nonzero.)
    #enforced = []
    constraints = []

    fields = card.fields(0)
    nfields = len(fields) - 1
    for iField in range(2, nfields, 8):
        grid = integer(card, iField, 'gid')
        component = components_or_blank(card, iField + 1, 'constraint',
                                        0)  # scalar point
        value = double_or_blank(card, iField + 2, 'enforced', 0.0)

        constraints.append([grid, int(component), value])
        #self.gids.append(grid)
        #self.constraints.append(component)
        #self.enforced.append(value)

        if iField + 3 > nfields:
            break
        grid = integer(card, iField + 3, 'gid')
        component = components_or_blank(card, iField + 4, 'constraint',
                                        0)  # scalar point
        value = double_or_blank(card, iField + 5, 'enforced')

        constraints.append([grid, int(component), value])
        #self.gids.append(grid)
        #self.constraints.append(component)
        #self.enforced.append(value)

    return constraint_id, constraints
Пример #29
0
    def add_card(cls, card, comment=''):
        conid = integer(card, 1, 'conid')
        gids = []
        constraints = []
        enforced = []

        fields = card.fields(0)
        nfields = len(fields)

        i = 1
        for ifield in range(2, nfields, 8):
            grid = integer(card, ifield, 'G%i' % i)
            component = components_or_blank(card, ifield + 1, 'constraint%i' % i, 0)  # scalar point
            if i == 1:
                enforcedi = double(card, ifield + 2, 'enforced%i' % i)
                if enforcedi == 0.0:
                    raise RuntimeError('enforced1 must be nonzero; enforcedi=%r' % enforcedi)
            else:
                enforcedi = double_or_blank(card, ifield + 2, 'enforced%i' % i, 0.0)
            gids.append(grid)
            constraints.append(component)
            enforced.append(enforcedi)
            i += 1

            if ifield + 4 > nfields and i != 2:
                # if G2 is empty (it's ifield+4 because nfields is length based
                # and not loop friendly)
                break
            grid = integer(card, ifield + 3, 'G%i' % i)
            component = components_or_blank(card, ifield + 4, 'constraint%i' % i, 0)  # scalar point
            enforcedi = double_or_blank(card, ifield + 5, 'enforced%i' % i)
            gids.append(grid)
            constraints.append(component)
            enforced.append(enforcedi)
            i += 1
        return MPC(conid, gids, constraints, enforced, comment=comment)
Пример #30
0
def get_mpc_constraint(card):
    #: Set identification number. (Integer > 0)
    constraint_id = integer(card, 1, 'conid')
    #: Identification number of grid or scalar point. (Integer > 0)
    #gids = []
    #: Component number. (Any one of the Integers 1 through 6 for grid
    #: points; blank or zero for scalar points.)
    #constraints = []
    #: Coefficient. (Real; Default = 0.0 except A1 must be nonzero.)
    #enforced = []
    constraints = []

    fields = card.fields(0)
    nfields = len(fields) - 1
    for iField in range(2, nfields, 8):
        grid = integer(card, iField, 'gid')
        component = components_or_blank(card, iField + 1, 'constraint', 0)  # scalar point
        value = double_or_blank(card, iField + 2, 'enforced', 0.0)

        constraints.append([grid, int(component), value])
        #self.gids.append(grid)
        #self.constraints.append(component)
        #self.enforced.append(value)

        if iField + 3 > nfields:
            break
        grid = integer(card, iField + 3, 'gid')
        component = components_or_blank(card, iField + 4, 'constraint', 0)  # scalar point
        value = double_or_blank(card, iField + 5, 'enforced')

        constraints.append([grid, int(component), value])
        #self.gids.append(grid)
        #self.constraints.append(component)
        #self.enforced.append(value)

    return constraint_id, constraints
Пример #31
0
    def add_card(cls, card, comment=''):
        eid = integer(card, 1, 'eid')
        diameter_ratio = double_or_blank(card, 2, 'diameter_ratio', 0.1)
        nfields = len(card)
        assert nfields % 2 == 1, 'nfields=%s card=%s'  % (nfields, card)

        nids = []
        components = []
        j = 1
        for i in range(3, nfields, 2):
            nid = integer(card, i, 'nid_%s' % j)
            comp = components_or_blank(card, i+1, 'components_%i' % j)
            nids.append(nid)
            components.append(comp)
            j += 1
        return RSPLINE(eid, nids, components, diameter_ratio=diameter_ratio, comment=comment)
Пример #32
0
    def add_card(cls, card, comment=''):
        conid = integer(card, 1, 'conid')  # really a support id sid

        nfields = len(card)
        assert len(card) > 2
        nterms = int((nfields - 1.) / 2.)
        n = 1
        IDs = []
        Cs = []
        for i in range(nterms):
            nstart = 2 + 2 * i
            ID = integer(card, nstart, 'ID%s' % n)
            C = components_or_blank(card, nstart + 1, 'component%s' % n, '0')
            IDs.append(ID)
            Cs.append(C)
            n += 1
        return SUPORT1(conid, IDs, Cs, comment=comment)
Пример #33
0
    def add_card(cls, card, comment=''):
        conid = integer(card, 1, 'conid')  # really a support id sid

        nfields = len(card)
        assert len(card) > 2
        nterms = int((nfields - 1.) / 2.)
        n = 1
        IDs = []
        Cs = []
        for i in range(nterms):
            nstart = 2 + 2 * i
            ID = integer(card, nstart, 'ID%s' % n)
            C = components_or_blank(card, nstart + 1, 'component%s' % n, '0')
            IDs.append(ID)
            Cs.append(C)
            n += 1
        return SUPORT1(conid, IDs, Cs, comment=comment)
Пример #34
0
    def __init__(self, card=None, data=None, comment=''):
        Method.__init__(self, card, data)
        if comment:
            self._comment = comment
        if card:
            #: Set identification number. (Unique Integer > 0)
            self.sid = integer(card, 1, 'sid')

            #: Method of eigenvalue extraction. (Character: 'INV' for inverse
            #: power method or 'SINV' for enhanced inverse power method.)
            #: apparently it can also be blank...
            self.method = string_or_blank(card, 2, 'method')

            if self.method not in ['INV', 'SINV', None]:
                msg = 'method must be INV or SINV.  method=|%s|' % self.method
                raise RuntimeError(msg)

            #: Eigenvalue range of interest. (Real, L1 < L2)
            self.L1 = double(card, 3, 'L1')
            self.L2 = double(card, 4, 'L2')
            if not self.L1 < self.L2:
                msg = 'L1=%s L2=%s; L1<L2 is requried' % (self.L1, self.L2)
                raise RuntimeError(msg)

            #: Estimate of number of roots in positive range not used for
            #: METHOD = 'SINV'. (Integer > 0)
            self.nep = integer_or_blank(card, 5, 'nep', 0)

            #: Desired number of positive and negative roots.
            #: (Integer>0; Default = 3*NEP)
            self.ndp = integer_or_blank(card, 6, 'ndp', 3 * self.nep)
            self.ndn = integer_or_blank(card, 7, 'ndn', 3 * self.nep)

            #: Method for normalizing eigenvectors.
            #: ('MAX' or 'POINT';Default='MAX')
            self.norm = string_or_blank(card, 9, 'norm', 'MAX')
            if self.norm == 'POINT':
                self.G = integer(card, 10, 'G')
                self.C = components(card, 11, 'C')
            else:
                self.G = integer_or_blank(card, 10, 'G')
                self.C = components_or_blank(card, 11, 'C')
            assert len(card) <= 12, 'len(EIGB card) = %i' % len(card)
        else:
            raise NotImplementedError('EIGB')
Пример #35
0
    def add_card(cls, card, comment=''):
        # TODO: remove fields...
        #fields = card.fields(1)

        nfields = len(card)
        assert len(card) > 1, card
        nterms = int(nfields / 2.)
        n = 1
        IDs = []
        Cs = []
        for i in range(nterms):
            nstart = 1 + 2 * i
            ID = integer(card, nstart, 'ID%s' % n)
            C = components_or_blank(card, nstart + 1, 'component%s' % n, '0')
            IDs.append(ID)
            Cs.append(C)
            n += 1
        return SUPORT(IDs, Cs, comment=comment)
Пример #36
0
    def add_card(cls, card, comment=''):
        # TODO: remove fields...
        #fields = card.fields(1)

        nfields = len(card)
        assert len(card) > 1, card
        nterms = int(nfields / 2.)
        n = 1
        IDs = []
        Cs = []
        for i in range(nterms):
            nstart = 1 + 2 * i
            ID = integer(card, nstart, 'ID%s' % n)
            C = components_or_blank(card, nstart + 1, 'component%s' % n, '0')
            IDs.append(ID)
            Cs.append(C)
            n += 1
        return SUPORT(IDs, Cs, comment=comment)
Пример #37
0
    def add_card(self, card, comment=''):
        # type: (Any, str) -> GRID
        """
        Adds a GRID card from ``BDF.add_card(...)``

        Parameters
        ----------
        card : BDFCard()
            a BDFCard object
        comment : str; default=''
            a comment for the card
        """
        nfields = len(card)
        #print('card = %s' % card)
        #: Node ID
        nid = integer(card, 1, 'nid')

        #: Grid point coordinate system
        cp = integer_or_blank(card, 2, 'cp', 0)

        #: node location in local frame
        xyz = [
            double_or_blank(card, 3, 'x1', 0.),
            double_or_blank(card, 4, 'x2', 0.),
            double_or_blank(card, 5, 'x3', 0.)
        ]

        if nfields > 6:
            #: Analysis coordinate system
            cd = integer_or_blank(card, 6, 'cd', 0)

            #: SPC constraint
            ps = components_or_blank(card, 7, 'ps', '')
            #u(integer_or_blank(card, 7, 'ps', ''))

            #: Superelement ID
            seid = integer_or_blank(card, 8, 'seid', 0)
            assert len(card) <= 9, 'len(GRID card) = %i\ncard=%s' % (len(card),
                                                                     card)
        else:
            cd = 0
            ps = ''
            seid = 0
        self.add(nid, xyz, cp, cd, ps, seid, comment=comment)
Пример #38
0
    def __init__(self, card=None, data=None, comment=''):
        Set.__init__(self, card, data)
        if comment:
            self._comment = comment
        #:  Component number. (Integer zero or blank for scalar points or any
        #:  unique combination of the Integers 1 through 6 for grid points with
        #:  no embedded blanks.)
        self.components = components_or_blank(card, 1, 'components', 0)

        nfields = len(card)
        IDs = []
        i = 1
        for ifield in range(2, nfields):
            ID = integer_string_or_blank(card, ifield, 'ID%i' % i)
            if ID:
                i += 1
                IDs.append(ID)

        #:  Identifiers of grids points. (Integer > 0)
        self.IDs = expand_thru(IDs)
Пример #39
0
    def add_card(cls, card, comment=''):
        eid = integer(card, 1, 'eid')
        gn = integer(card, 2, 'gn')
        cm = components_or_blank(card, 3, 'cm')

        alpha = integer_or_double(card, len(card) - 1, 'alpha')
        if isinstance(alpha, float):
            # alpha is correct
            # the last field is not part of Gmi
            n = 1
        else:
            # the last field is part of Gmi
            n = 0
            alpha = 0.0

        j = 4
        Gmi = []
        for i in range(len(card) - 4 - n):
            gmi = integer(card, j + i, 'Gm%i' % (i + 1))
            Gmi.append(gmi)
        return RBE2(eid, gn, cm, Gmi, alpha, comment=comment)
Пример #40
0
    def add_card(cls, card, comment=''):
        sid = integer(card, 1, 'sid')
        method = string_or_blank(card, 2, 'method')

        L1 = double(card, 3, 'L1')
        L2 = double(card, 4, 'L2')

        nep = integer_or_blank(card, 5, 'nep', 0)
        ndp = integer_or_blank(card, 6, 'ndp', 3 * nep)
        ndn = integer_or_blank(card, 7, 'ndn', 3 * nep)

        norm = string_or_blank(card, 9, 'norm', 'MAX')
        if norm == 'POINT':
            G = integer(card, 10, 'G')
            C = components(card, 11, 'C')
        else:
            G = integer_or_blank(card, 10, 'G')
            C = components_or_blank(card, 11, 'C')
        assert len(card) <= 12, 'len(EIGB card) = %i\ncard=%s' % (len(card), card)
        return EIGB(sid, method, L1, L2, nep, ndp, ndn, norm, G, C,
                    comment=comment)
Пример #41
0
    def add_card(cls, card, comment=''):
        eid = integer(card, 1, 'eid')
        gn = integer(card, 2, 'gn')
        cm = components_or_blank(card, 3, 'cm')

        alpha = integer_or_double(card, len(card) - 1, 'alpha')
        if isinstance(alpha, float):
            # alpha is correct
            # the last field is not part of Gmi
            n = 1
        else:
            # the last field is part of Gmi
            n = 0
            alpha = 0.0

        j = 4
        Gmi = []
        for i in range(len(card) - 4 - n):
            gmi = integer(card, j + i, 'Gm%i' % (i + 1))
            Gmi.append(gmi)
        return RBE2(eid, gn, cm, Gmi, alpha, comment=comment)
Пример #42
0
    def add_card(cls, card, comment=''):
        eid = integer(card, 1, 'eid')
        diameter_ratio = double_or_blank(card, 2, 'diameter_ratio', 0.1)
        nfields = len(card)
        assert nfields % 2 == 1, 'nfields=%s card=%s' % (nfields, card)

        dependent_nids = []
        dependent_components = []
        independent_nid = integer(card, 3, 'nid_1')
        j = 2
        for i in range(4, nfields, 2):
            nid = integer(card, i, 'nid_%s' % j)
            comp = components_or_blank(card, i + 1, 'components_%i' % j)
            dependent_nids.append(nid)
            dependent_components.append(comp)
            j += 1
        return RSPLINE(eid,
                       independent_nid,
                       dependent_nids,
                       dependent_components,
                       diameter_ratio=diameter_ratio,
                       comment=comment)
Пример #43
0
    def add_card(cls, card, comment=''):
        eid = integer(card, 1, 'eid')
        blank(card, 2, 'blank')
        refgrid = integer(card, 3, 'refgrid')
        refc = components_or_blank(card, 4, 'refc')

        fields = [field.upper() if isinstance(field, string_types) else field for field in card[5:]]
        ioffset = 5
        iwt_max = len(fields) + ioffset
        try:
            ialpha = fields.index('ALPHA') + ioffset
            iwt_max = ialpha  # the index to start parsing UM
            ium_stop = ialpha  # the index to stop  parsing UM
        except ValueError:
            ialpha = None
            ium_stop = iwt_max

        try:
            ium = fields.index('UM') + ioffset
            iwt_max = ium
        except ValueError:
            ium = None

        i = ioffset
        n = 1
        weights = []
        comps = []
        Gijs = []
        while i < iwt_max:
            Gij = []
            wtname = 'wt' + str(n)
            wt = double_or_blank(card, i, wtname)
            if wt is not None:
                cname = 'c'+str(n)
                compi = components_or_blank(card, i + 1, cname)

                #print("%s=%s %s=%s" % (wtname, wt, cname, compi))
                i += 2
                gij = 0

                j = 0
                while isinstance(gij, int) and i < iwt_max:
                    j += 1
                    gij_name = 'g%s,%s' % (n, j)
                    gij = integer_double_or_blank(card, i, gij_name)
                    if isinstance(gij, float):
                        break
                    #print("%s = %s" % (gij_name, gij))
                    if gij is not None:
                        Gij.append(gij)
                    i += 1
                assert compi is not None
                assert len(Gij) > 0, Gij
                assert Gij[0] is not None, Gij
                weights.append(wt)
                comps.append(compi)
                Gijs.append(Gij)
                #print('----finished a group=%r----' % weight_cg_group)
            else:
                i += 1

        Gmi = []
        Cmi = []
        if ium:
            #print('UM = %s' % card.field(ium))  # UM
            i = ium + 1
            n = 1
            #print("i=%s iUmStop=%s" % (i, iUmStop))
            for j in range(i, ium_stop, 2):

                gm_name = 'gm' + str(n)
                cm_name = 'cm' + str(n)
                gmi = integer_or_blank(card, j, gm_name)
                if gmi is not None:
                    cmi = components(card, j + 1, cm_name)
                    #print("gmi=%s cmi=%s" % (gmi, cmi))
                    Gmi.append(gmi)
                    Cmi.append(cmi)

        if ialpha:
            alpha = double_or_blank(card, ialpha + 1, 'alpha')
        else:
            #: thermal expansion coefficient
            alpha = 0.0
        return RBE3(eid, refgrid, refc, weights, comps, Gijs,
                    Gmi=Gmi, Cmi=Cmi, alpha=alpha, comment=comment)
    def test_components_or_blank_02(self):
        # single ints
        val = components_or_blank(BDFCard([0]), 0, 'field', 'default')
        self.assertEqual(val, '0')

        val = components_or_blank(BDFCard([1]), 0, 'field', 'default')
        self.assertEqual(val, '1')

        # single strings
        val = components_or_blank(BDFCard(['0']), 0, 'field', 'default')
        self.assertEqual(val, '0')

        val = components_or_blank(BDFCard(['1']), 0, 'field', 'default')
        self.assertEqual(val, '1')

        # double ints
        val = components_or_blank(BDFCard(['123']), 0, 'field', 'default')
        self.assertEqual(val, '123')

        val = components_or_blank(BDFCard([123]), 0, 'field', 'default')
        self.assertEqual(val, '123')

        val = components_or_blank(BDFCard([321]), 0, 'field', 'default')
        self.assertEqual(val, '123')

        # embedded whiteshape
        with self.assertRaises(SyntaxError):
            val = components_or_blank(BDFCard(['12 3']), 0, 'field', 'default')

        # all numbers
        val = components_or_blank(BDFCard(['123456']), 0, 'field', 'default')
        self.assertEqual(val, '123456')

        # invalid 0's defined with numbers
        with self.assertRaises(SyntaxError):
            val = components_or_blank(BDFCard(['0123456']), 0, 'field', 'default')

        with self.assertRaises(SyntaxError):
            val = components_or_blank(BDFCard(['01']), 0, 'field', 'default')

        # doubles
        with self.assertRaises(SyntaxError):
            val = components_or_blank(BDFCard(['4524']), 0, 'field', 'default')

        # only 0 to 6
        with self.assertRaises(SyntaxError):
            val = components_or_blank(BDFCard(['7']), 0, 'field', 'default')

        with self.assertRaises(SyntaxError):
            val = components_or_blank(BDFCard([7]), 0, 'field', 'default')

        # dumb input
        with self.assertRaises(SyntaxError):
            val = components_or_blank(BDFCard(['4.0']), 0, 'field', 'default')

        with self.assertRaises(SyntaxError):
            val = components_or_blank(BDFCard(['-4.0']), 0, 'field', 'default')

        with self.assertRaises(SyntaxError):
            val = components_or_blank(BDFCard(['asdf']), 0, 'field', 'default')

        with self.assertRaises(SyntaxError):
            val = components_or_blank(BDFCard(['-1']), 0, 'field', 'default')

        # blank
        val = components_or_blank(BDFCard(['   ']), 0, 'field', 'default')
        self.assertEqual(val, 'default')
        val = components_or_blank(BDFCard([None]), 0, 'field', 'default')
        self.assertEqual(val, 'default')
Пример #45
0
    def add_card(self, card, comment=""):
        # self.model.log.debug('RBE2.add')
        i = self.i
        # if comment:
        # self.comment = comment
        eid = integer(card, 1, "element_id")
        # if comment:
        # self.comment = comment
        self.element_id[i] = integer(card, 1, "eid")
        blank(card, 2, "blank")
        self.refgrid[i] = integer(card, 3, "refgrid")
        self.refc[i] = components_or_blank(card, 4, "refc", 0)
        # iUM = fields.index('UM')

        fields = [field.upper() if isinstance(field, string_types) else field for field in card[5:]]
        iOffset = 5
        iWtMax = len(fields) + iOffset
        try:
            iAlpha = fields.index("ALPHA") + iOffset
            iWtMax = iAlpha  # the index to start parsing UM
            iUmStop = iAlpha  # the index to stop  parsing UM
        except ValueError:
            iAlpha = None
            iUmStop = iWtMax
        # print("iAlpha = %s" % iAlpha)
        try:
            iUm = fields.index("UM") + iOffset
            iWtMax = iUm
        except ValueError:
            iUm = None
        # print("iAlpha=%s iUm=%s" % (iAlpha, iUm))
        # print("iAlpha=%s iWtMax=%s" % (iAlpha, iWtMax))

        # print("iUM = %s" % iUM)
        WtCG_groups = []

        i = iOffset
        n = 1
        while i < iWtMax:
            Gij = []
            wtname = "wt" + str(n)
            wt = double_or_blank(card, i, wtname)
            if wt is not None:
                cname = "c" + str(n)
                ci = components_or_blank(card, i + 1, cname)

                # print("%s=%s %s=%s" % (wtname, wt, cname, ci))
                i += 2
                gij = 0

                j = 0
                while isinstance(gij, int) and i < iWtMax:
                    j += 1
                    gij_name = "g%s,%s" % (n, j)
                    gij = integer_double_or_blank(card, i, gij_name)
                    if isinstance(gij, float):
                        break
                    # print("%s = %s" % (gij_name, gij))
                    if gij is not None:
                        Gij.append(gij)
                    i += 1
                wtCG_group = [wt, ci, Gij]
                WtCG_groups.append(wtCG_group)
                # print('----finished a group=%r----' % wtCG_group)
            else:
                i += 1
        self.WtCG_groups[i] = WtCG_groups
        Gmi = []
        Cmi = []
        # print("")
        if iUm:
            # print('UM = %s' % card.field(iUm))  # UM
            i = iUm + 1
            n = 1
            # print("i=%s iUmStop=%s" % (i, iUmStop))
            for j in range(i, iUmStop, 2):

                gm_name = "gm" + str(n)
                cm_name = "cm" + str(n)
                gmi = integer_or_blank(card, j, gm_name)
                if gmi is not None:
                    cmi = components(card, j + 1, cm_name)
                    # print("gmi=%s cmi=%s" % (gmi, cmi))
                    Gmi.append(gmi)
                    Cmi.append(cmi)
        self.Gmi[i] = Gmi
        self.Cmi[i] = Cmi
        if iAlpha:
            alpha = double_or_blank(card, iAlpha + 1, "alpha", 0.0)
        else:
            alpha = 0.0
        self.alpha[i] = alpha
Пример #46
0
    def add_card(cls, card, comment=''):
        """
        Adds a RBE3 card from ``BDF.add_card(...)``

        Parameters
        ----------
        card : BDFCard()
            a BDFCard object
        comment : str; default=''
            a comment for the card
        """
        eid = integer(card, 1, 'eid')
        blank(card, 2, 'blank')
        refgrid = integer(card, 3, 'refgrid')
        refc = components_or_blank(card, 4, 'refc')

        fields = [
            field.upper() if isinstance(field, string_types) else field
            for field in card[5:]
        ]
        ioffset = 5
        iwt_max = len(fields) + ioffset
        try:
            ialpha = fields.index('ALPHA') + ioffset
            iwt_max = ialpha  # the index to start parsing UM
            ium_stop = ialpha  # the index to stop  parsing UM
        except ValueError:
            ialpha = None
            ium_stop = iwt_max

        try:
            ium = fields.index('UM') + ioffset
            iwt_max = ium
        except ValueError:
            ium = None

        i = ioffset
        n = 1
        weights = []
        comps = []
        Gijs = []
        while i < iwt_max:
            Gij = []
            wtname = 'wt' + str(n)
            wt = double_or_blank(card, i, wtname)
            if wt is not None:
                cname = 'c' + str(n)
                compi = components_or_blank(card, i + 1, cname)

                #print("%s=%s %s=%s" % (wtname, wt, cname, compi))
                i += 2
                gij = 0

                j = 0
                while isinstance(gij, int) and i < iwt_max:
                    j += 1
                    gij_name = 'g%s,%s' % (n, j)
                    gij = integer_double_or_blank(card, i, gij_name)
                    if isinstance(gij, float):
                        break
                    #print("%s = %s" % (gij_name, gij))
                    if gij is not None:
                        Gij.append(gij)
                    i += 1
                assert compi is not None
                assert len(Gij) > 0, Gij
                assert Gij[0] is not None, Gij
                weights.append(wt)
                comps.append(compi)
                Gijs.append(Gij)
                #print('----finished a group=%r----' % weight_cg_group)
            else:
                i += 1

        Gmi = []
        Cmi = []
        if ium:
            #print('UM = %s' % card.field(ium))  # UM
            i = ium + 1
            n = 1
            #print("i=%s iUmStop=%s" % (i, iUmStop))
            for j in range(i, ium_stop, 2):

                gm_name = 'gm' + str(n)
                cm_name = 'cm' + str(n)
                gmi = integer_or_blank(card, j, gm_name)
                if gmi is not None:
                    cmi = parse_components(card, j + 1, cm_name)
                    #print("gmi=%s cmi=%s" % (gmi, cmi))
                    Gmi.append(gmi)
                    Cmi.append(cmi)

        if ialpha:
            alpha = double_or_blank(card, ialpha + 1, 'alpha')
        else:
            #: thermal expansion coefficient
            alpha = 0.0
        return RBE3(eid,
                    refgrid,
                    refc,
                    weights,
                    comps,
                    Gijs,
                    Gmi=Gmi,
                    Cmi=Cmi,
                    alpha=alpha,
                    comment=comment)
Пример #47
0
    def test_components_or_blank_02(self):
        # single ints
        val = components_or_blank(BDFCard([0]), 0, 'field', 'default')
        self.assertEqual(val, '0')

        val = components_or_blank(BDFCard([1]), 0, 'field', 'default')
        self.assertEqual(val, '1')

        # single strings
        val = components_or_blank(BDFCard(['0']), 0, 'field', 'default')
        self.assertEqual(val, '0')

        val = components_or_blank(BDFCard(['1']), 0, 'field', 'default')
        self.assertEqual(val, '1')

        # double ints
        val = components_or_blank(BDFCard(['123']), 0, 'field', 'default')
        self.assertEqual(val, '123')

        val = components_or_blank(BDFCard([123]), 0, 'field', 'default')
        self.assertEqual(val, '123')

        val = components_or_blank(BDFCard([321]), 0, 'field', 'default')
        self.assertEqual(val, '123')

        # embedded whiteshape
        with self.assertRaises(SyntaxError):
            val = components_or_blank(BDFCard(['12 3']), 0, 'field', 'default')

        # all numbers
        val = components_or_blank(BDFCard(['123456']), 0, 'field', 'default')
        self.assertEqual(val, '123456')

        # invalid 0's defined with numbers
        with self.assertRaises(SyntaxError):
            val = components_or_blank(BDFCard(['0123456']), 0, 'field',
                                      'default')

        with self.assertRaises(SyntaxError):
            val = components_or_blank(BDFCard(['01']), 0, 'field', 'default')

        # doubles
        with self.assertRaises(SyntaxError):
            val = components_or_blank(BDFCard(['4524']), 0, 'field', 'default')

        # only 0 to 6
        with self.assertRaises(SyntaxError):
            val = components_or_blank(BDFCard(['7']), 0, 'field', 'default')

        with self.assertRaises(SyntaxError):
            val = components_or_blank(BDFCard([7]), 0, 'field', 'default')

        # dumb input
        with self.assertRaises(SyntaxError):
            val = components_or_blank(BDFCard(['4.0']), 0, 'field', 'default')

        with self.assertRaises(SyntaxError):
            val = components_or_blank(BDFCard(['-4.0']), 0, 'field', 'default')

        with self.assertRaises(SyntaxError):
            val = components_or_blank(BDFCard(['asdf']), 0, 'field', 'default')

        with self.assertRaises(SyntaxError):
            val = components_or_blank(BDFCard(['-1']), 0, 'field', 'default')

        # blank
        val = components_or_blank(BDFCard(['   ']), 0, 'field', 'default')
        self.assertEqual(val, 'default')
        val = components_or_blank(BDFCard([None]), 0, 'field', 'default')
        self.assertEqual(val, 'default')
Пример #48
0
    def add_card(self, card, comment=''):
        #self.model.log.debug('RBE2.add')
        i = self.i
        #if comment:
        # self.comment = comment
        eid = integer(card, 1, 'element_id')
        #if comment:
        # self.comment = comment
        self.element_id[i] = integer(card, 1, 'eid')
        blank(card, 2, 'blank')
        self.refgrid[i] = integer(card, 3, 'refgrid')
        self.refc[i] = components_or_blank(card, 4, 'refc', 0)
        #iUM = fields.index('UM')

        fields = [
            field.upper() if isinstance(field, string_types) else field
            for field in card[5:]
        ]
        iOffset = 5
        iWtMax = len(fields) + iOffset
        try:
            iAlpha = fields.index('ALPHA') + iOffset
            iWtMax = iAlpha  # the index to start parsing UM
            iUmStop = iAlpha  # the index to stop  parsing UM
        except ValueError:
            iAlpha = None
            iUmStop = iWtMax
        #print("iAlpha = %s" % iAlpha)
        try:
            iUm = fields.index('UM') + iOffset
            iWtMax = iUm
        except ValueError:
            iUm = None
        #print("iAlpha=%s iUm=%s" % (iAlpha, iUm))
        #print("iAlpha=%s iWtMax=%s" % (iAlpha, iWtMax))

        #print("iUM = %s" % iUM)
        WtCG_groups = []

        i = iOffset
        n = 1
        while i < iWtMax:
            Gij = []
            wtname = 'wt' + str(n)
            wt = double_or_blank(card, i, wtname)
            if wt is not None:
                cname = 'c' + str(n)
                ci = components_or_blank(card, i + 1, cname)

                #print("%s=%s %s=%s" % (wtname, wt, cname, ci))
                i += 2
                gij = 0

                j = 0
                while isinstance(gij, int) and i < iWtMax:
                    j += 1
                    gij_name = 'g%s,%s' % (n, j)
                    gij = integer_double_or_blank(card, i, gij_name)
                    if isinstance(gij, float):
                        break
                    #print("%s = %s" % (gij_name, gij))
                    if gij is not None:
                        Gij.append(gij)
                    i += 1
                wtCG_group = [wt, ci, Gij]
                WtCG_groups.append(wtCG_group)
                #print('----finished a group=%r----' % wtCG_group)
            else:
                i += 1
        self.WtCG_groups[i] = WtCG_groups
        Gmi = []
        Cmi = []
        #print("")
        if iUm:
            #print('UM = %s' % card.field(iUm))  # UM
            i = iUm + 1
            n = 1
            #print("i=%s iUmStop=%s" % (i, iUmStop))
            for j in range(i, iUmStop, 2):

                gm_name = 'gm' + str(n)
                cm_name = 'cm' + str(n)
                gmi = integer_or_blank(card, j, gm_name)
                if gmi is not None:
                    cmi = components(card, j + 1, cm_name)
                    #print("gmi=%s cmi=%s" % (gmi, cmi))
                    Gmi.append(gmi)
                    Cmi.append(cmi)
        self.Gmi[i] = Gmi
        self.Cmi[i] = Cmi
        if iAlpha:
            alpha = double_or_blank(card, iAlpha + 1, 'alpha', 0.0)
        else:
            alpha = 0.0
        self.alpha[i] = alpha