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$']
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))
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$']
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:]
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)
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)
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)
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))
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))
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))
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)
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)
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...')
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)
def test_integer_or_string(self): # out of range with self.assertRaises(SyntaxError): integer_or_string(BDFCard([1.] ), 1, 'field')
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)