コード例 #1
0
ファイル: optimization.py プロジェクト: sukhbinder/cyNastran
    def __init__(self, card=None, data=None, comment=''):
        """
        Design Sensitivity Equation Response Quantities
        Defines equation responses that are used in the design, either as
        constraints or as an objective.
        """
        if comment:
            self._comment = comment
        self.oid = integer(card, 1, 'oid')
        self.label = string(card, 2, 'label')
        self.eqidFunc = integer_or_string(card, 3, 'eqid_Func')
        self.region = integer_or_blank(card, 4, 'region')
        self.method = string_or_blank(card, 5, 'method', 'MIN')
        self.c1 = double_or_blank(card, 6, 'c1', 100.)
        self.c2 = double_or_blank(card, 7, 'c2', 0.005)
        self.c3 = double_or_blank(card, 8, 'c3') #: .. todo:: or blank?

        i = 0
        fields = [interpret_value(field) for field in card[9:] ]
        key = '$NULL$'  # dummy key
        self.params = {key: []}
        valueList = []
        for (i, field) in enumerate(fields):
            if i % 8 == 0 and field is not None:
                self.params[key] = valueList
                key = field
                valueList = []
            elif field is not None:
                valueList.append(field)
            #else:
            #    pass

        self.params[key] = valueList
        del self.params['$NULL$']
コード例 #2
0
    def __init__(self, card=None, data=None, comment=''):
        """
        Creates the SPOINTs card that contains many SPOINTs
        :param self:
          the SPOINTs object pointer
        :param card:
          a BDFCard object
        :type card:
          BDFCard
        :param data:
          a list with the SPOINT fields defined in OP2 format
        :type data:
          LIST
        :param comment:
          a comment for the card
        :type comment:
          string
        """
        if comment:
            self._comment = comment
        Node.__init__(self, card, data)

        if card:
            fields = []
            for i in range(1, len(card)):
                field = integer_or_string(card, i, 'ID%i' % i)
                fields.append(field)
        else:
            fields = data
            assert isinstance(data, list), data
            assert isinstance(data[0], int), data
        self.spoints = set(expand_thru(fields))
コード例 #3
0
ファイル: nodes.py プロジェクト: umvarma/pynastran
    def __init__(self, card=None, data=None, comment=''):
        """
        Creates the SPOINTs card that contains many SPOINTs
        :param self:
          the SPOINTs object pointer
        :param card:
          a BDFCard object
        :type card:
          BDFCard
        :param data:
          a list with the SPOINT fields defined in OP2 format
        :type data:
          LIST
        :param comment:
          a comment for the card
        :type comment:
          string
        """
        if comment:
            self._comment = comment
        Node.__init__(self, card, data)

        if card:
            fields = []
            for i in range(1, len(card)):
                field = integer_or_string(card, i, 'ID%i' % i)
                fields.append(field)
        else:
            fields = data
            assert isinstance(data, list), data
            assert isinstance(data[0], int), data
        self.spoints = set(expand_thru(fields))
コード例 #4
0
ファイル: optimization.py プロジェクト: umvarma/pynastran
    def __init__(self, card=None, data=None, comment=''):
        """
        Design Sensitivity Equation Response Quantities
        Defines equation responses that are used in the design, either as
        constraints or as an objective.
        """
        if comment:
            self._comment = comment
        self.oid = integer(card, 1, 'oid')
        self.label = string(card, 2, 'label')
        self.eqidFunc = integer_or_string(card, 3, 'eqid_Func')
        self.region = integer_or_blank(card, 4, 'region')
        self.method = string_or_blank(card, 5, 'method', 'MIN')
        self.c1 = double_or_blank(card, 6, 'c1', 100.)
        self.c2 = double_or_blank(card, 7, 'c2', 0.005)
        self.c3 = double_or_blank(card, 8, 'c3')  #: .. todo:: or blank?

        i = 0
        fields = [interpret_value(field) for field in card[9:]]
        key = '$NULL$'  # dummy key
        self.params = {key: []}
        valueList = []
        for (i, field) in enumerate(fields):
            if i % 8 == 0 and field is not None:
                self.params[key] = valueList
                key = field
                valueList = []
            elif field is not None:
                valueList.append(field)
            #else:
            #    pass

        self.params[key] = valueList
        del self.params['$NULL$']
コード例 #5
0
    def __init__(self, card=None, data=None, comment=''):
        ThermalLoad.__init__(self, card, data)
        if comment:
            self._comment = comment
        if card:
            #: Load set identification number. (Integer > 0)
            self.sid = integer(card, 1, 'sid')

            #: Heat flux into element (FLOAT)
            self.qFlux = double(card, 2, 'qFlux')
            eids  = []
            j = 1
            for i in range(3, len(card)):
                eid = integer_or_string(card, i, 'eid%i' % j)
                eids.append(eid)
                j += 1
            #: CHBDYj element identification numbers (Integer)
            assert len(eids) > 0
            
            #: .. todo:: use expand_thru_by ???
            self.eids = expand_thru(eids)
        else:
            self.sid = data[0]
            self.qFlux = data[1]
            self.eids = data[2:]
コード例 #6
0
ファイル: spoint.py プロジェクト: afcarl/cyNastran
 def add(self, card, comment):
     fields = []
     for i in range(1, len(card)):
         field = integer_or_string(card, i, 'ID%i' % i)
         fields.append(field)
     self.spoint.union( set(expand_thru(fields)) )
     self._comments.append(comment)
コード例 #7
0
ファイル: bdf_sets.py プロジェクト: HibernantBear/pyNastran
    def __init__(self, card=None, data=None, comment=''):
        Set.__init__(self, card, data)
        if comment:
            self._comment = comment

        #:  Identifiers of grids points. (Integer > 0)
        self.IDs = []
        if string_or_blank(card, 2, 'C') == 'ALL':
            self.components = '123456'
        else:
            self.components = components(card, 1, 'components')

        IDs2 = []
        ii = 1
        for ifield in range(2, len(card)):
            integer_or_string(card, ifield, 'ID' % ii)
            ii += 1
        self.IDs = expand_thru(IDs)
コード例 #8
0
ファイル: spoint.py プロジェクト: ClaesFredo/pyNastran
    def add(self, card, comment=''):
        fields = []
        for i in range(1, len(card)):
            field = integer_or_string(card, i, 'ID%i' % i)
            fields.append(field)

        ex = expand_thru(fields)
        ex = set(ex)

        self.spoint.update(ex)
        self._comments.append(comment)
        self.n = len(self.spoint)
コード例 #9
0
ファイル: spoint.py プロジェクト: umvarma/pynastran
    def add(self, card, comment=''):
        fields = []
        for i in range(1, len(card)):
            field = integer_or_string(card, i, 'ID%i' % i)
            fields.append(field)

        ex = expand_thru(fields)
        ex = set(ex)

        self.spoint.update(ex)
        self._comments.append(comment)
        self.n = len(self.spoint)
コード例 #10
0
ファイル: nodes.py プロジェクト: ClaesFredo/pyNastran
    def __init__(self, card=None, data=None, comment=''):
        if comment:
            self._comment = comment
        Node.__init__(self, card, data)

        if card:
            fields = []
            for i in range(1, len(card)):
                field = integer_or_string(card, i, 'ID%i' % i)
                fields.append(field)
        else:
            fields = data
            assert isinstance(data, list), data
            assert isinstance(data[0], int), data
        self.points = set(expand_thru(fields))
コード例 #11
0
    def __init__(self, card=None, data=None, comment=''):
        if comment:
            self._comment = comment
        Node.__init__(self, card, data)

        if card:
            fields = []
            for i in range(1, len(card)):
                field = integer_or_string(card, i, 'ID%i' % i)
                fields.append(field)
        else:
            fields = data
            assert isinstance(data, list), data
            assert isinstance(data[0], int), data
        self.spoints = set(expand_thru(fields))
コード例 #12
0
    def __init__(self, card=None, data=None, comment=''):
        """
        Design Sensitivity Equation Response Quantities
        Defines equation responses that are used in the design, either as
        constraints or as an objective.
        """
        if comment:
            self._comment = comment

        self.func = None
        self.dequation_str = None
        if card:
            self.oid = integer(card, 1, 'oid')
            self.label = string(card, 2, 'label')
            self.dequation = integer_or_string(card, 3, 'dequation_id')
            self.region = integer_or_blank(card, 4, 'region')
            self.method = string_or_blank(card, 5, 'method', 'MIN')
            self.c1 = double_or_blank(card, 6, 'c1', 100.)
            self.c2 = double_or_blank(card, 7, 'c2', 0.005)
            self.c3 = double_or_blank(card, 8, 'c3') #: .. todo:: or blank?


            #i = 0
            fields = [interpret_value(field) for field in card[9:]]
            key = None  # dummy key
            self.params = {}
            value_list = []
            j = 0
            for (i, field) in enumerate(fields):
                if i % 8 == 0 and field is not None:
                    if i > 0:
                        assert len(value_list) > 0, 'key=%s values=%s' % (key, value_list)
                        self.params[key] = value_list
                        j += 1
                    key = (j, field)
                    value_list = []
                elif field is not None:
                    value_list.append(field)
            self.params[key] = value_list
        else:
            raise RuntimeError(data)

        print("--Params--")
        for key, value_list in sorted(iteritems(self.params)):
            print("  key=%s params=%s" %(key, value_list))
コード例 #13
0
ファイル: loads.py プロジェクト: HibernantBear/pyNastran
    def __init__(self, card, data=None, comment=''):
        ThermalLoad.__init__(self, card, data)
        if comment:
            self._comment = comment
        if card:
            #: Load set identification number. (Integer > 0)
            self.sid = integer(card, 1, 'sid')

            self.qvol = double(card, 2, 'qvol')
            self.control_point = integer_or_blank(card, 3, 'control_id', 0)

            i = 1
            eids = []
            for ifield in range(4, len(card)):
                eid = integer_or_string(card, ifield, 'eid_%i' % i)
                eids.append(eid)
                i += 1
            self.elements = expand_thru_by(eids)
コード例 #14
0
    def __init__(self, card=None, data=None, comment=''):
        """
        +---------+--------+--------+--------+-----+
        | DVPREL1 | 200000 | PCOMP  | 2000   |  T2 |
        +---------+--------+--------+--------+-----+
        |         | 200000 |   1.0  |        |     |
        +---------+--------+--------+--------+-----+
        """
        if comment:
            self._comment = comment
        if card:
            self.oid = integer(card, 1, 'oid')
            self.Type = string(card, 2, 'Type')
            self.pid = integer(card, 3, 'pid')
            self.pNameFid = integer_or_string(card, 4, 'pName_FID')

            #: Minimum value allowed for this property.
            #: .. todo:: bad default (see DVMREL1)
            self.pMin = double_or_blank(card, 5, 'pMin')
            self.pMax = double_or_blank(card, 6, 'pMax', 1e20)
            self.c0 = double_or_blank(card, 7, 'c0', 0.0)

            self.dvids = []
            self.coeffs = []
            endFields = [interpret_value(field) for field in card[9:]]

            nfields = len(endFields) - 1
            if nfields % 2 == 1:
                endFields.append(None)
                nfields += 1
            i = 0
            for i in range(0, nfields, 2):
                self.dvids.append(endFields[i])
                self.coeffs.append(endFields[i + 1])
            if nfields % 2 == 1:
                print(card)
                print("dvids = %s" % (self.dvids))
                print("coeffs = %s" % (self.coeffs))
                print(str(self))
                raise RuntimeError('invalid DVPREL1...')
        else:
            raise RuntimeError(data)
コード例 #15
0
ファイル: optimization.py プロジェクト: umvarma/pynastran
    def __init__(self, card=None, data=None, comment=''):
        """
        ::

          DVPREL1   200000   PCOMP    2000      T2
                    200000     1.0
        """
        if comment:
            self._comment = comment
        self.oid = integer(card, 1, 'oid')
        self.Type = string(card, 2, 'Type')
        self.pid = integer(card, 3, 'pid')
        self.pNameFid = integer_or_string(card, 4, 'pName_FID')

        #: Minimum value allowed for this property.
        #: .. todo:: bad default (see DVMREL1)
        self.pMin = double_or_blank(card, 5, 'pMin')
        self.pMax = double_or_blank(card, 6, 'pMax', 1e20)
        self.c0 = double_or_blank(card, 7, 'c0', 0.0)

        self.dvids = []
        self.coeffs = []
        endFields = [interpret_value(field) for field in card[9:]]

        nFields = len(endFields) - 1
        if nFields % 2 == 1:
            endFields.append(None)
            nFields += 1
        i = 0
        for i in range(0, nFields, 2):
            self.dvids.append(endFields[i])
            self.coeffs.append(endFields[i + 1])
        if nFields % 2 == 1:
            print(card)
            print("dvids = %s" % (self.dvids))
            print("coeffs = %s" % (self.coeffs))
            print(str(self))
            raise RuntimeError('invalid DVPREL1...')
コード例 #16
0
ファイル: optimization.py プロジェクト: umvarma/pynastran
    def __init__(self, card=None, data=None, comment=''):
        """
        ::

          DVPREL2 ID TYPE PID PNAME/FID PMIN PMAX EQID
          'DESVAR' DVID1 DVID2 DVID3 DVID4 DVID5 DVID6 DVID7
                   DVID8 -etc.-
          'DTABLE' LABL1 LABL2 LABL3 LABL4 LABL5 LABL6 LABL7
                   LABL8 -etc.-
        """
        if comment:
            self._comment = comment
        #: Unique identification number
        self.oid = integer(card, 1, 'oid')

        #: Name of a property entry, such as PBAR, PBEAM, etc
        self.Type = string(card, 2, 'Type')

        #: Property entry identification number
        self.pid = integer(card, 3, 'pid')
        #: Property name, such as 'T', 'A', or field position of the property
        #: entry, or word position in the element property table of the
        #: analysis model. Property names that begin with an integer such as
        #: 12I/T**3 may only be referred to by field position.
        #: (Character or Integer 0)

        self.pNameFid = integer_or_string(card, 4, 'pName_FID')
        #: Minimum value allowed for this property. If FID references a stress
        #: recovery location field, then the default value for PMIN is -1.0+35.
        #: PMIN must be explicitly set to a negative number for properties that
        #: may be less than zero (for example, field ZO on the PCOMP entry).
        #: (Real; Default = 1.E-15)
        #: .. todo:: bad default (see DVMREL1)
        self.pMin = double_or_blank(card, 5, 'pMin')
        #: Maximum value allowed for this property. (Real; Default = 1.0E20)
        self.pMax = double_or_blank(card, 6, 'pMax', 1e20)
        #: DEQATN entry identification number. (Integer > 0)
        self.eqID = integer_or_blank(card, 7, 'eqID')  #: .. todo:: or blank?

        fields = [interpret_value(field) for field in card[9:]]
        #print "fields = ",fields
        iOffset = 9
        iEnd = len(fields) + iOffset

        try:
            iDesvar = fields.index('DESVAR') + iOffset
        except ValueError:
            iDesvar = None

        try:
            iDTable = fields.index('DTABLE') + iOffset
            #iDesMax  = iDTable # the index to start parsing DESVAR
            iDesStop = iDTable  # the index to stop  parsing DESVAR
        except ValueError:
            iDTable = None
            iDesStop = iEnd

        self.dvids = []
        if iDesvar:
            n = 1
            for i in range(10, iDesStop):
                dvid_name = 'DVID' + str(n)
                dvid = integer_or_blank(card, i, dvid_name)
                #print("%s = %s" % (dvid_name, dvid))
                if dvid:
                    assert dvid is not None
                    assert dvid is not 'DESVAR'
                    self.dvids.append(dvid)
                    n += 1

        self.labels = []
        if iDTable:
            n = 1
            for i in range(iDTable + 1, iEnd):
                label_name = 'Label' + str(n)
                label = string(card, i, label_name)
                #print("%s = %s" % (label_name, label))
                if label:
                    assert label is not 'DTABLE'
                    self.labels.append(label)
コード例 #17
0
ファイル: test_assign_type.py プロジェクト: umvarma/pynastran
 def test_integer_or_string(self):
     # out of range
     with self.assertRaises(SyntaxError):
         integer_or_string(BDFCard([1.]  ), 1, 'field')
コード例 #18
0
    def __init__(self, card=None, data=None, comment=''):
        """
       +----------+--------+--------+-------+-----------+-------+-------+-------+-------+
       | DVPREL2  | ID     | TYPE   | PID   | PNAME/FID | PMIN  | PMAX  | EQID  |       |
       +----------+--------+--------+-------+-----------+-------+-------+-------+-------+
       |          | DESVAR | DVID1  | DVID2 | DVID3     | DVID4 | DVID5 | DVID6 | DVID7 |
       +----------+--------+--------+-------+-----------+-------+-------+-------+-------+
       |          | DVID8  | -etc.- |       |           |       |       |       |       |
       +----------+--------+--------+-------+-----------+-------+-------+-------+-------+
       |          | DTABLE | LABL1  | LABL2 | LABL3     | LABL4 | LABL5 | LABL6 | LABL7 |
       +----------+--------+--------+-------+-----------+-------+-------+-------+-------+
       |          | LABL8  | -etc.- |       |           |       |       |       |       |
       +----------+--------+--------+-------+-----------+-------+-------+-------+-------+
        """
        if comment:
            self._comment = comment
        if card:
            #: Unique identification number
            self.oid = integer(card, 1, 'oid')

            #: Name of a property entry, such as PBAR, PBEAM, etc
            self.Type = string(card, 2, 'Type')

            #: Property entry identification number
            self.pid = integer(card, 3, 'pid')
            #: Property name, such as 'T', 'A', or field position of the property
            #: entry, or word position in the element property table of the
            #: analysis model. Property names that begin with an integer such as
            #: 12I/T**3 may only be referred to by field position.
            #: (Character or Integer 0)

            self.pNameFid = integer_or_string(card, 4, 'pName_FID')
            #: Minimum value allowed for this property. If FID references a stress
            #: recovery location field, then the default value for PMIN is -1.0+35.
            #: PMIN must be explicitly set to a negative number for properties that
            #: may be less than zero (for example, field ZO on the PCOMP entry).
            #: (Real; Default = 1.E-15)
            #: .. todo:: bad default (see DVMREL1)
            self.pMin = double_or_blank(card, 5, 'pMin')
            #: Maximum value allowed for this property. (Real; Default = 1.0E20)
            self.pMax = double_or_blank(card, 6, 'pMax', 1e20)
            #: DEQATN entry identification number. (Integer > 0)
            self.dequation = integer_or_blank(card, 7, 'dequation') #: .. todo:: or blank?

            fields = [interpret_value(field) for field in card[9:]]
            iOffset = 9
            iEnd = len(fields) + iOffset

            try:
                iDesvar = fields.index('DESVAR') + iOffset
            except ValueError:
                iDesvar = None

            try:
                iDTable = fields.index('DTABLE') + iOffset
                #iDesMax  = iDTable # the index to start parsing DESVAR
                iDesStop = iDTable  # the index to stop  parsing DESVAR
            except ValueError:
                iDTable = None
                iDesStop = iEnd

            self.dvids = []
            if iDesvar:
                n = 1
                for i in range(10, iDesStop):
                    dvid_name = 'DVID' + str(n)
                    dvid = integer_or_blank(card, i, dvid_name)
                    #print("%s = %s" % (dvid_name, dvid))
                    if dvid:
                        assert dvid is not None
                        assert dvid is not 'DESVAR'
                        self.dvids.append(dvid)
                        n += 1

            self.labels = []
            if iDTable:
                n = 1
                for i in range(iDTable + 1, iEnd):
                    label_name = 'Label' + str(n)
                    label = string(card, i, label_name)
                    #print("%s = %s" % (label_name, label))
                    if label:
                        assert label is not 'DTABLE'
                        self.labels.append(label)
        else:
            raise RuntimeError(data)