コード例 #1
0
ファイル: shell.py プロジェクト: HibernantBear/pyNastran
    def __init__(self, card=None, data=None, comment=''):
        """
        Defines the properties of a shear panel (CSHEAR entry).

        +--------+-----+-----+---+-----+----+----+
        | PSHEAR | PID | MID | T | NSM | F1 | F2 |
        +--------+-----+-----+---+-----+----+----+
        """
        ShellProperty.__init__(self, card, data)
        if comment:
            self._comment = comment
        if card:
            #: Property ID
            self.pid = integer(card, 1, 'pid')
            #: Material ID
            self.mid = integer(card, 2, 'mid')
            self.t = double(card, 3, 't')
            self.nsm = double_or_blank(card, 4, 'nsm', 0.0)
            self.f1 = double_or_blank(card, 5, 'f1', 0.0)
            self.f2 = double_or_blank(card, 6, 'f2', 0.0)
            assert self.t > 0.0
            #assert self.f1 >= 0.0
            #assert self.f2 >= 0.0
            assert len(card) <= 7, 'len(PSHEAR card) = %i' % len(card)
        else:
            #(pid,mid,t,nsm,f1,f2) = out
            self.pid = data[0]
            self.mid = data[1]
            self.t = data[2]
            self.nsm = data[3]
            self.f1 = data[4]
            self.f2 = data[5]
コード例 #2
0
    def __init__(self, card=None, data=None, comment=''):
        CrackProperty.__init__(self, card, data)
        if comment:
            self._comment = comment
        if card:
            #: Property ID
            self.pid = integer(card, 1, 'pid')
            #: Material ID
            self.mid = integer(card, 2, 'mid')
            self.thick = double(card, 3, 'thick')
            #: Plane strain or plane stress option.
            #: Use 0 for plane strain; 1 for plane stress. (Integer = 0 or 1)
            self.iPlane = integer(card, 4, 'iPlane')
            if self.iPlane not in [0, 1]:
                raise RuntimeError('Invalid value for iPlane on PRAC2D, can '
                                   'only be 0,1 iPlane=|%s|' % self.iPlane)
            #: Non-structural mass per unit area.(Real >= 0.0; Default = 0)
            self.nsm = double_or_blank(card, 5, 'nsm', 0.)
            #: Exponent used in the displacement field. See Remark 4.
            #: (Real; Default = 0.5)
            self.gamma = double_or_blank(card, 6, 'gamma', 0.5)
            #: Angle (in degrees) relative to the element x-axis along which
            #: stress intensity factors are to be calculated. See Remark 4.
            #: (Real; Default = 180.0)
            self.phi = double_or_blank(card, 7, 'phi', 180.)
            assert len(card) <= 8, 'len(PRAC2D card) = %i' % len(card)

        else:
            raise NotImplementedError(data)
コード例 #3
0
ファイル: rigid.py プロジェクト: umvarma/pynastran
    def __init__(self, card=None, data=None, comment=''):
        """
        ::

          RBAR EID GA GB CNA    CNB CMA CMB ALPHA
          RBAR 5   1   2 123456             6.5-6
        """
        RigidElement.__init__(self, card, data)
        if comment:
            self._comment = comment
        if card:
            self.eid = integer(card, 1, 'eid')
            self.ga = integer(card, 2, 'ga')
            self.gb = integer(card, 3, 'gb')
            self.cna = components_or_blank(card, 4, 'cna')
            self.cnb = components_or_blank(card, 5, 'cnb')
            self.cma = components_or_blank(card, 6, 'cma')
            self.cmb = components_or_blank(card, 7, 'cmb')
            self.alpha = double_or_blank(card, 8, 'alpha', 0.0)
            assert len(card) <= 9, 'len(RBAR card) = %i' % len(card)
        else:
            self.eid = data[0]
            self.ga = data[1]
            self.gb = data[2]
            self.cna = data[3]
            self.cnb = data[4]
            self.cma = data[5]
            self.cmb = data[6]
            self.alpha = data[7]
コード例 #4
0
ファイル: damper.py プロジェクト: ClaesFredo/pyNastran
    def __init__(self, card=None, data=None, comment=''):
        LineDamper.__init__(self, card, data)
        if comment:
            self._comment = comment
        if card:
            self.eid = integer(card, 1, 'eid')
            self.pid = integer(card, 2, 'pid')
            nids = [integer_or_blank(card, 3, 'g1', 0),
                    integer_or_blank(card, 5, 'g2', 0)]

            #: component number
            self.c1 = integer_or_blank(card, 4, 'c1', 0)
            self.c2 = integer_or_blank(card, 6, 'c2', 0)
            assert len(card) <= 7, 'len(CDAMP1 card) = %i' % len(card)
        else:
            self.eid = data[0]
            self.pid = data[1]
            nids = [data[2], data[4]]
            self.c1 = data[3]
            self.c2 = data[5]

        self.prepare_node_ids(nids, allow_empty_nodes=True)
        assert len(self.nodes) == 2
        msg = 'on\n%s\n is invalid validComponents=[0,1,2,3,4,5,6]' % str(self)
        assert self.c1 in [0, 1, 2, 3, 4, 5, 6], 'c1=|%s| %s' % (self.c1, msg)
        assert self.c2 in [0, 1, 2, 3, 4, 5, 6], 'c2=|%s| %s' % (self.c2, msg)
コード例 #5
0
    def __init__(self, card=None, data=None, comment=''):
        SolidProperty.__init__(self, card, data)
        if comment:
            self._comment = comment
        if card:
            #: Property ID
            self.pid = integer(card, 1, 'pid')
            #: Material ID
            self.mid = integer(card, 2, 'mid')
            self.cordm = integer_or_blank(card, 3, 'cordm', 0)
            self.integ = integer_string_or_blank(card, 4, 'integ')
            #validIntegration = ['THREE', 'TWO', 'FULL', 'BUBBLE',
            #                    2, 3, None, 'REDUCED']
            self.stress = integer_string_or_blank(card, 5, 'stress')
            self.isop = integer_string_or_blank(card, 6, 'isop')
            self.fctn = string_or_blank(card, 7, 'fctn', 'SMECH')
            assert len(card) <= 8, 'len(PSOLID card) = %i' % len(card)
        else:
            self.pid = data[0]
            self.mid = data[1]
            self.cordm = data[2]
            self.integ = data[3]
            self.stress = data[4]
            self.isop = data[5]
            self.fctn = data[6]

            if self.fctn == 'SMEC':
                self.fctn = 'SMECH'
コード例 #6
0
ファイル: bars.py プロジェクト: ClaesFredo/pyNastran
    def __init__(self, card=None, data=None, comment=''):
        LineElement.__init__(self, card, data)
        if comment:
            self._comment = comment
        if card:
            self.eid = integer(card, 1, 'eid')
            self.pid = integer_or_blank(card, 2, 'pid', self.eid)
            self.ga = integer(card, 3, 'ga')
            self.gb = integer(card, 4, 'gb')
            x1Go = integer_double_or_blank(card, 5, 'x1_g0', 0.0)
            if isinstance(x1Go, integer_types):
                self.g0 = x1Go
                self.x = None
            elif isinstance(x1Go, float):
                self.g0 = None
                self.x = array([double_or_blank(card, 5, 'x1', 0.0),
                                double_or_blank(card, 6, 'x2', 0.0),
                                double_or_blank(card, 7, 'x3', 0.0)], dtype='float64')
                if norm(self.x) == 0.0:
                    msg = 'G0 vector defining plane 1 is not defined.\n'
                    msg += 'G0 = %s\n' % self.g0
                    msg += 'X  = %s\n' % self.x
                    raise RuntimeError(msg)
            else:
                raise ValueError('invalid x1Go=|%s| on CBEND' % x1Go)
            self.geom = integer(card, 8, 'geom')

            assert len(card) == 9, 'len(CBEND card) = %i' % len(card)
            assert self.geom in [1, 2, 3, 4], 'geom is invalid geom=|%s|' % self.geom
        else:
            raise NotImplementedError(data)

        if self.g0 in [self.ga, self.gb]:
            msg = 'G0=%s cannot be GA=%s or GB=%s' % (self.g0, self.ga, self.gb)
            raise RuntimeError(msg)
コード例 #7
0
ファイル: staticLoads.py プロジェクト: anick107/von_mises_rms
    def __init__(self, card=None, data=None, comment=''):
        """
        ::

          FORCE          3       1            100.      0.      0.      1.
        """
        Force.__init__(self, card, data)
        if comment:
            self._comment = comment
        if card:
            self.sid = integer(card, 1, 'sid')
            self.node = integer(card, 2, 'node')
            self.cid = integer_or_blank(card, 3, 'cid', 0)
            self.mag = double(card, 4, 'mag')
            xyz = array([double_or_blank(card, 5, 'X1', 0.0),
                         double_or_blank(card, 6, 'X2', 0.0),
                         double_or_blank(card, 7, 'X3', 0.0)])
            assert len(card) <= 8, 'len(FORCE card) = %i' % len(card)
        else:
            self.sid = data[0]
            self.node = data[1]
            self.cid = data[2]
            self.mag = data[3]
            xyz = data[4:7]

        assert len(xyz) == 3, 'xyz=%s' % (xyz)
        self.xyz = array(xyz)
コード例 #8
0
ファイル: nodes.py プロジェクト: sukhbinder/cyNastran
    def __init__(self, card=None, data=None, comment=''):
        """
        if coming from a BDF object, card is used
        if coming from the OP2, data is used
        """
        if comment:
            self._comment = comment
        Node.__init__(self, card, data)

        if card:
            self.nid = integer(card, 1, 'nid')
            self.phi = double(card, 4, 'phi')
            self.cd = integer(card, 6, 'cd')
            self.ps = integer(card, 7, 'ps')
            self.idf = integer(card, 8, 'idf')
        else:
            self.nid = data[0]
            self.phi = data[1]
            self.cd = data[2]
            self.ps = data[3]
            self.idf = data[4]

        assert self.nid > 0, 'nid=%s' % self.nid
        assert self.phi >= 0, 'phi=%s' % self.phi
        assert self.cd >= 0, 'cd=%s' % self.cd
        assert self.ps >= 0, 'ps=%s' % self.ps
        assert self.idf >= 0, 'idf=%s' % self.idf
コード例 #9
0
ファイル: methods.py プロジェクト: sukhbinder/cyNastran
    def loadHESS_INV(self, nRows, card):
        alphaOmega_default = None
        LJ_default = None
        if self.method == 'INV':
            alphaOmega_default = 0.0
            LJ_default = 1.0

        for iRow in xrange(nRows):
            NEj = integer(card, 9 + 7 * iRow + 5, 'NE%s' + str(iRow))
            NDJ_default = None
            if self.method == 'INV':
                NDJ_default = 3 * NEj

            i = 9 + 8 * iRow
            self.alphaAjs.append(
                double_or_blank(card, i,     'alphaA' + str(iRow), alphaOmega_default))
            self.omegaAjs.append(
                double_or_blank(card, i + 1, 'omegaA' + str(iRow), alphaOmega_default))
            self.alphaBjs.append(
                double_or_blank(card, i + 2, 'alphaB' + str(iRow), alphaOmega_default))
            self.omegaBjs.append(
                double_or_blank(card, i + 3, 'omegaB' + str(iRow), alphaOmega_default))
            self.LJs.append(
                double_or_blank(i + 4, LJ_default))
            self.NEJs.append(
                integer(card, i + 5, 'NEJ' + str(iRow)))
            self.NDJs.append(
                integer_or_blank(card, i + 6, 'NDJ' + str(iRow), NDJ_default))
コード例 #10
0
ファイル: loads.py プロジェクト: sukhbinder/cyNastran
    def __init__(self, card, data):
        Load.__init__(self, card, data)

        if card:
            #: load ID
            self.sid = integer(card, 1, 'sid')

            #: overall scale factor
            self.scale = double(card, 2, 'scale')

            #: individual scale factors (corresponds to loadIDs)
            self.scaleFactors = []

            #: individual loadIDs (corresponds to scaleFactors)
            self.loadIDs = []

            # alternating of scale factor & load set ID
            nLoads = len(card) - 3
            assert nLoads % 2 == 0
            for i in xrange(nLoads // 2):
                n = 2 * i + 3
                self.scaleFactors.append(double(card, n, 'scaleFactor'))
                self.loadIDs.append(integer(card, n + 1, 'loadID'))
        else:
            self.sid = data[0]
            self.scale = data[1]
            self.scaleFactors = data[2]
            self.loadIDs = data[3]
            assert len(data) == 4, '%s data=%s' % (self.type, data)
コード例 #11
0
ファイル: properties.py プロジェクト: sukhbinder/cyNastran
    def __init__(self, card=None, data=None, comment=''):
        Property.__init__(self, card, data)
        if comment:
            self._comment = comment
        if card:
            #: Property ID
            self.pid = integer(card, 1, 'pid')
            #: Material ID
            self.mid1 = integer_or_blank(card, 2, 'mid1', 0)
            self.t1 = double_or_blank(card, 3, 't1')

            self.mid2 = integer_or_blank(card, 4, 'mid2', 0)
            if self.mid2 > 0:
                self.i = double(card, 5, 'i')
                assert self.i > 0.0
            else:
                self.i = blank(card, 5, 'i')

            self.mid3 = integer(card, 6, 0)
            if self.mid3 > 0:
                self.t2 = double(card, 7, 't3')
                assert self.t2 > 0.0
            else:
                self.t2 = blank(card, 7, 't3')

            self.nsm = double(card, 8, 'nsm')
            self.z1 = double(card, 9, 'z1')
            self.z2 = double(card, 10, 'z2')
            self.phi = fields(double, card, 'phi', i=11, j=len(card))
        else:
            raise NotImplementedError(data)
コード例 #12
0
ファイル: methods.py プロジェクト: sukhbinder/cyNastran
    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')

            #: Coordinates of point in complex plane. (Real)
            self.alpha1 = double(card, 2, 'alpha1')
            #: Coordinates of point in complex plane. (Real)
            self.omega1 = double(card, 3, 'omega1')
            #: Multiplicity of complex root at pole defined by point at ALPHAi
            #: and OMEGAi
            self.m1 = integer(card, 4, 'm1')

            #: Coordinates of point in complex plane. (Real)
            self.alpha2 = double(card, 5, 'alpha2')
            #: Coordinates of point in complex plane. (Real)
            self.omega2 = double(card, 6, 'omega2')
            #: Multiplicity of complex root at pole defined by point at ALPHAi
            #: and OMEGAi
            self.m2 = integer(card, 7, 'm2')
            assert len(card) == 8, 'len(EIGP card) = %i' % len(card)
        else:
            raise NotImplementedError('EIGP')
コード例 #13
0
ファイル: staticLoads.py プロジェクト: anick107/von_mises_rms
 def __init__(self, card=None, data=None, comment=''):
     if comment:
         self._comment = comment
     if card:
         self.sid = integer(card, 1, 'sid')
         self.eid = integer(card, 2, 'eid')
         self.Type = string(card, 3, 'Type')
         self.scale = string(card, 4, 'scale')
         self.x1 = double(card, 5, 'x1')
         self.p1 = double(card, 6, 'p1')
         self.x2 = double_or_blank(card, 7, 'x2', self.x1)
         self.p2 = double_or_blank(card, 8, 'p2', self.p1)
         assert 0 <= self.x1 <= self.x2
         assert len(card) <= 9, 'len(PLOAD1 card) = %i' % len(card)
     else:
         self.sid = data[0]
         self.eid = data[1]
         self.Type = data[2]
         self.scale = data[3]
         self.x1 = data[4]
         self.p1 = data[5]
         self.x2 = data[6]
         self.p2 = data[7]
     if self.Type not in self.validTypes:
         msg = '%s is an invalid type on the PLOAD1 card' % self.Type
         raise RuntimeError(msg)
     assert self.scale in self.validScales, '%s is an invalid scale on the PLOAD1 card' % (self.scale)
コード例 #14
0
    def __init__(self, card=None, data=None, comment=''):
        Constraint.__init__(self, card, data)

        self.IDs = []
        self.Cs = []
        if comment:
            self._comment = comment
        if card:
            self.conid = integer(card, 1, 'conid')  # really a support id sid

            nfields = len(card)
            assert len(card) > 2
            nterms = int((nfields - 1.) / 2.)
            n = 1
            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')
                self.IDs.append(ID)
                self.Cs.append(C)
                n += 1
        else:
            msg = '%s has not implemented data parsing' % self.type
            raise NotImplementedError(msg)
        assert len(self.IDs) > 0
        assert len(self.IDs) == len(self.Cs)
コード例 #15
0
    def __init__(self, card=None, data=None, comment=''):
        Constraint.__init__(self, card, data)

        if comment:
            self._comment = comment
        if card:
            self.conid = integer(card, 1, 'sid')
            if card.field(5) in [None, '']:
                self.gids = [integer(card, 2, 'G1'),]
                self.constraints = [components_or_blank(card, 3, 'C1', 0)]
                self.enforced = [double_or_blank(card, 4, 'D1', 0.0)]
            else:
                self.gids = [
                    integer(card, 2, 'G1'),
                    integer_or_blank(card, 5, 'G2'),
                ]
                # :0 if scalar point 1-6 if grid
                self.constraints = [components_or_blank(card, 3, 'C1', 0),
                                    components_or_blank(card, 6, 'C2', 0)]
                self.enforced = [double_or_blank(card, 4, 'D1', 0.0),
                                 double_or_blank(card, 7, 'D2', 0.0)]
        else:
            self.conid = data[0]
            self.gids = [data[1]]
            self.constraints = [data[2]]
            self.enforced = [data[3]]
コード例 #16
0
ファイル: psolid.py プロジェクト: umvarma/pynastran
    def add(self, card, comment=''):
        i = self.i
        self.property_id[i] = integer(card, 1, 'pid')
        self.material_id[i] = integer(card, 2, 'mid')
        self.cordm[i] = integer_or_blank(card, 3, 'cordm', 0)
        self.integ[i] = integer_string_or_blank(card, 4, 'integ', '')
        #validIntegration = ['THREE', 'TWO', 'FULL', 'BUBBLE',
        #                    2, 3, None, 'REDUCED']
        # ISOP
        # ------
        #    1.  FULL
        #    2.
        #    3.
        #    REDUCED

        # IN
        # ------
        #    1.
        #    2.      TWO
        #    3.      THREE
        #    BUBBLE - 2 for CTETRA, 3 for CHEXA/CPENTA

        # STRESS
        # ------
        #    1.  GAUSS (no midside nodes on CPENTA/CHEXA; ok on CTETRA)
        #    2.
        self.stress[i] = integer_string_or_blank(card, 5, 'stress', '')
        self.isop[i] = integer_string_or_blank(card, 6, 'isop', '')
        self.fctn[i] = string_or_blank(card, 7, 'fctn', 'SMECH')
        assert len(card) <= 8, 'len(PSOLID card) = %i' % len(card)
        self.i += 1
コード例 #17
0
ファイル: springs.py プロジェクト: sukhbinder/cyNastran
    def __init__(self, card=None, data=None, comment=''):
        SpringElement.__init__(self, card, data)
        if comment:
            self._comment = comment
        if card:
            self.eid = integer(card, 1, 'eid')

            #: property ID
            self.pid = integer_or_blank(card, 2, 'pid', self.eid)

            nids = [integer(card, 3, 'g1'), integer_or_blank(card, 5, 'g2', 0)]
            #: component number
            self.c1 = integer_or_blank(card, 4, 'c1', 0)
            self.c2 = integer_or_blank(card, 6, 'c2', 0)
            assert len(card) <= 7, 'len(CELAS1 card) = %i' % len(card)
        else:
            self.eid = data[0]
            self.pid = data[1]
            nids = [data[2], data[3]]
            self.c1 = data[4]
            self.c2 = data[5]

        msg = 'on\n%s\n is invalid validComponents=[0,1,2,3,4,5,6]' % str(self)
        assert self.c1 in [0, 1, 2, 3, 4, 5, 6], 'c1=|%s| %s' % (self.c1, msg)
        assert self.c2 in [0, 1, 2, 3, 4, 5, 6], 'c2=|%s| %s' % (self.c2, msg)
        self.prepareNodeIDs(nids, allowEmptyNodes=True)
        assert len(self.nodes) == 2
コード例 #18
0
    def __init__(self, card, nCoord, data):
        Coord.__init__(self, card, data)
        self.isResolved = False
        if nCoord is not None:
            assert nCoord == 0 or nCoord == 1, 'nCoord=|%s|' % (nCoord)
            nCoord *= 4  # 0 if the 1st coord, 4 if the 2nd

            #: the coordinate ID
            self.cid = integer(card, 1 + nCoord, 'cid')
            #: a Node at the origin
            self.g1 = integer(card, 2 + nCoord, 'g1')
            #: a Node on the z-axis
            self.g2 = integer(card, 3 + nCoord, 'g2')
            #: a Node on the xz-plane
            self.g3 = integer(card, 4 + nCoord, 'g3')
        else:
            self.cid = data[0]
            self.g1 = data[1]
            self.g2 = data[2]
            self.g3 = data[3]
            assert len(data) == 4, 'data = %s' % (data)

        assert self.g1 != self.g2
        assert self.g1 != self.g3
        assert self.g2 != self.g3

        self.e1 = None
        self.e2 = None
        self.e3 = None
        self.i = None
        self.j = None
        self.k = None
コード例 #19
0
ファイル: caero1.py プロジェクト: ClaesFredo/pyNastran
    def add(self, card, comment=''):
        i = self.i
        self.element_id[i] = integer(card, 1, 'element_id')
        self.property_id[i] = integer(card, 2, 'property_id')
        self.coord_id[i] = integer_or_blank(card, 3, 'cp', 0)

        self.nspan[i] = integer_or_blank(card, 4, 'nspan', 0)
        self.nchord[i] = integer_or_blank(card, 5, 'nchord', 0)

        #if self.nspan==0:
        self.lspan[i] = integer_or_blank(card, 6, 'lspan', 0)

        #if self.nchord==0:
        self.lchord[i] = integer_or_blank(card, 7, 'lchord', 0)

        self.igid[i] = integer(card, 8, 'igid')

        self.p1[i, :] = [double_or_blank(card, 9, 'x1', 0.0),
                         double_or_blank(card, 10, 'y1', 0.0),
                         double_or_blank(card, 11, 'z1', 0.0)]
        self.x12[i] = double_or_blank(card, 12, 'x12', 0.)

        self.p4[i, :] = [double_or_blank(card, 13, 'x4', 0.0),
                         double_or_blank(card, 14, 'y4', 0.0),
                         double_or_blank(card, 15, 'z4', 0.0)]
        self.x43[i] = double_or_blank(card, 16, 'x43', 0.)
        assert len(card) <= 17, 'len(CAERO1 card) = %i' % len(card)
        self.i += 1
コード例 #20
0
    def __init__(self, card=None, data=None, comment=''):
        """
        Intilizes the CORD3G

        :param self: the CORD3G coordinate system object
        :param card: a list version of the fields
        """
        if comment:
            self._comment = comment

        Coord.__init__(self, card, data)

        self.cid = integer(card, 1, 'cid')
        method = string_or_blank(card, 2, 'E313')
        self.methodES = method[0]
        self.methodInt = int(method[1:])
        assert self.methodES in ['E', 'S'] # Euler / Space-Fixed
        assert 0 < self.methodInt < 1000

        self.form = string_or_blank(card, 3, 'form', 'EQN')
        self.thetas = [integer(card, 4, 'theta1'),
                       integer(card, 5, 'theta2'),
                       integer(card, 6, 'theta3')]
        assert len(self.thetas) == 3, 'thetas=%s' % (self.thetas)
        self.rid = integer_or_blank(card, 7, 'cidRef')
        assert len(card) <= 8, 'len(CORD3G card) = %i' % len(card)

        # EQN for DEQATN, TABLE for TABLE3D
        assert self.form in ['EQN', 'TABLE']
コード例 #21
0
ファイル: dloads.py プロジェクト: HibernantBear/pyNastran
    def __init__(self, card=None, data=None, comment=''):
        TabularLoad.__init__(self, card, data)
        if comment:
            self._comment = comment
        if card:
            self.sid = integer(card, 1, 'sid')
            self.exciteID = integer(card, 2, 'exciteID')
            self.delay = integer_double_or_blank(card, 3, 'delay', 0)
            self.dphase = integer_double_or_blank(card, 4, 'dphase')
            self.tc = integer_double_or_blank(card, 5, 'tc', 0)
            self.td = integer_double_or_blank(card, 6, 'td', 0)
            self.Type = integer_string_or_blank(card, 7, 'Type', 'LOAD')
            assert self.tc > 0 or self.td > 0, 'either RLOAD TC or TD > 0; tc=%s td=%s' % (tc, td)

            if self.Type in [0, 'L', 'LO', 'LOA', 'LOAD']:
                self.Type = 'LOAD'
            elif self.Type in [1, 'D', 'DI', 'DIS', 'DISP']:
                self.Type = 'DISP'
            elif self.Type in [2, 'V', 'VE', 'VEL', 'VELO']:
                self.Type = 'VELO'
            elif self.Type in [3, 'A', 'AC', 'ACC', 'ACCE']:
                self.Type = 'ACCE'
            else:
                msg = 'invalid RLOAD1 type  Type=%r' % self.Type
                raise RuntimeError(msg)
            assert len(card) <= 8, 'len(RLOAD1 card) = %i' % len(card)
        else:
            raise NotImplementedError(data)
コード例 #22
0
ファイル: loads.py プロジェクト: anick107/von_mises_rms
    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')

            #: Identification number of an CHBDYj element. (Integer > 0)
            self.eid = integer(card, 2, 'eid')

            qFlux  = []
            j = 1
            for i in range(3, len(card)):
                q = double_or_blank(card, i, 'qFlux%i' % j)
                qFlux.append(q)
                j += 1

            assert len(qFlux) > 0
            #: Heat flux at the i-th grid point on the referenced CHBDYj
            #: element. (Real or blank)
            self.qFlux = wipe_empty_fields(qFlux)
        else:
            self.sid = data[0]
            self.eid = data[1]
            self.qFlux = data[2]
コード例 #23
0
ファイル: dloads.py プロジェクト: HibernantBear/pyNastran
    def __init__(self, card=None, data=None, comment=''):
        TabularLoad.__init__(self, card, data)
        if comment:
            self._comment = comment
        if card:
            self.sid = integer(card, 1, 'sid')
            self.exciteID = integer(card, 2, 'exciteID')
            self.delay = integer_double_or_blank(card, 3, 'delay', 0)
            self.dphase = integer_double_or_blank(card, 4, 'dphase')
            self.tb = integer_or_blank(card, 5, 'tb', 0)
            self.tp = integer_or_blank(card, 6, 'tp', 0)
            self.Type = integer_string_or_blank(card, 7, 'Type', 'LOAD')

            if self.Type in [0, 'L', 'LO', 'LOA', 'LOAD']:
                self.Type = 'LOAD'
            elif self.Type in [1, 'D', 'DI', 'DIS', 'DISP']:
                self.Type = 'DISP'
            elif self.Type in [2, 'V', 'VE', 'VEL', 'VELO']:
                self.Type = 'VELO'
            elif self.Type in [3, 'A', 'AC', 'ACC', 'ACCE']:
                self.Type = 'ACCE'
            else:
                msg = 'invalid RLOAD2 type  Type=|%s|' % self.Type
                raise RuntimeError(msg)
            assert len(card) <= 8, 'len(RLOAD2 card) = %i' % len(card)
        else:
            raise NotImplementedError(data)
コード例 #24
0
ファイル: temp.py プロジェクト: umvarma/pynastran
    def add(self, card, comment=''):
        assert self.n > 0, self.n
        i = self.i
        load_id = integer(card, 1, 'load_id')
        tbar = double(card, 3, 'Tbar')
        tprime = double(card, 4, 'Tprime')
        t1 = double_or_blank(card, 5, 'T1')
        t2 = double_or_blank(card, 6, 'T2')

        self.load_id[i] = load_id
        self.element_id[i] = integer(card, 2, 'element_id')
        self.tbar[i] = tbar
        self.tprime[i] = tprime
        self.temp[i, 0] = t1
        self.temp[i, 1] = t2
        self.i += 1

        if len(card) >= 7:
            # i must be < self.n
            eids = expand_thru(card[9:])
            for eid in eids:
                self.load_id[i] = load_id
                assert isinstance(eid, int), eid
                self.element_id[i] = eid
                self.tbar[i] = tbar
                self.tprime[i] = tprime
                self.temp[i, 0] = t1
                self.temp[i, 1] = t2
                self.i += 1
                assert self.i <= self.n

        assert len(card) <= 7, '%s; n=%s' % (card, len(card))
        #assert len(card) <= 7, len(card)
        self.eids = None
コード例 #25
0
ファイル: staticLoads.py プロジェクト: anick107/von_mises_rms
    def __init__(self, card=None, data=None, comment=''):
        """
        Defines a static concentrated moment at a grid point by specifying a
        magnitude and two grid points that determine the direction.::

          MOMENT1 SID G M G1 G2
        """
        Moment.__init__(self, card, data)
        if comment:
            self._comment = comment
        if card:
            self.sid = integer(card, 1, 'sid')
            self.node = integer(card, 2, 'node')
            self.mag = double(card, 3, 'mag')
            self.g1 = integer(card, 4, 'g1')
            self.g2 = integer(card, 5, 'g2')
            assert len(card) == 6, 'len(MOMENT1 card) = %i' % len(card)
        else:
            self.sid = data[0]
            self.node = data[1]
            self.mag = data[2]
            self.g1 = data[3]
            self.g2 = data[4]
            self.g3 = data[5]
            self.g4 = data[6]
            xyz = data[7:10]
            raise NotImplementedError('MOMENT1 is probably wrong')

        #assert len(xyz) == 3, 'xyz=%s' % (xyz)
        #self.xyz = array(xyz)
        self.xyz = None
コード例 #26
0
ファイル: chexa20.py プロジェクト: umvarma/pynastran
    def add(self, card, comment=''):
        i = self.i
        #comment = self._comments[i]
        eid = integer(card, 1, 'element_id')
        #if comment:
            #self._comments[eid] = comment

        #: Element ID
        self.element_id[i] = eid
        #: Property ID
        self.property_id[i] = integer(card, 2, 'property_id')
        #: Node IDs
        nids = array([
            integer(card, 3, 'node_id_1'), integer(card, 4, 'node_id_2'),
            integer(card, 5, 'node_id_3'), integer(card, 6, 'node_id_4'),
            integer(card, 7, 'node_id_5'), integer(card, 8, 'node_id_6'),
            integer(card, 9, 'node_id_7'), integer(card, 10, 'node_id_8'),
            integer_or_blank(card, 11, 'node_id_9', 0),
            integer_or_blank(card, 12, 'node_id_10', 0),
            integer_or_blank(card, 13, 'node_id_11', 0),
            integer_or_blank(card, 14, 'node_id_12', 0),
            integer_or_blank(card, 15, 'node_id_13', 0),
            integer_or_blank(card, 16, 'node_id_14', 0),
            integer_or_blank(card, 17, 'node_id_15', 0),
            integer_or_blank(card, 18, 'node_id_16', 0),
            integer_or_blank(card, 19, 'node_id_17', 0),
            integer_or_blank(card, 20, 'node_id_18', 0),
            integer_or_blank(card, 21, 'node_id_19', 0),
            integer_or_blank(card, 22, 'node_id_20', 0)
        ], dtype='int32')
        self.node_ids[i, :] = nids
        assert len(card) <= 23, 'len(CHEXA20 card) = %i' % len(card)
        self.i += 1
コード例 #27
0
ファイル: bush.py プロジェクト: sukhbinder/cyNastran
    def getShockA(self, card, iStart):
        self.shockType = string_or_blank(card, iStart + 1, 'shockType')
        self.shockCVT = double(card, iStart + 2, 'shockCVT')
        self.shockCVC = double_or_blank(card, iStart + 3, 'shockCVC')
        self.shockExpVT = double_or_blank(card, iStart + 4, 'shockExpVT', 1.0)
        self.shockExpVC = double_or_blank(card, iStart + 5,
                                          'shockExpVC', self.shockExpVT)

        if self.shockType == 'TABLE':
            pass
            # self.shockIDTS = integer(card, iStart + 6, 'shockIDTS')
            # self.shockIDETS = blank(card, iStart + 9, 'shockIDETS')
            # self.shockIDECS = blank(card, iStart + 10, 'shockIDECS')
            # self.shockIDETSD = blank(card, iStart + 11, 'shockIDETSD')
            # self.shockIDECSD = blank(card, iStart + 12, 'shockIDECSD')
        elif self.shockType == 'EQUAT':
            self.shockIDTS = blank(card, iStart + 6, 'shockIDTS')
            self.shockIDETS = integer(card, iStart + 9, 'shockIDETS')
            self.shockIDECS = integer_or_blank(card, iStart + 10,
                                               'shockIDECS', self.shockIDETS)
            self.shockIDETSD = integer(card, iStart + 11, 'shockIDETSD')
            self.shockIDECSD = integer_or_blank(card, iStart + 11,
                                                'shockIDECSD', self.shockIDETSD)
        else:
            raise RuntimeError('Invalid shockType=|%s| on card\n%s' %(self.shockType, card))

        iStart += 8
        return iStart
コード例 #28
0
ファイル: solid.py プロジェクト: abk-ShuaiHaotian/pyNastran
 def __init__(self, card=None, data=None, comment=''):
     SolidElement.__init__(self, card, data)
     if comment:
         self._comment = comment
     if card:
         #: Element ID
         self.eid = integer(card, 1, 'eid')
         #: Property ID
         self.pid = integer(card, 2, 'pid')
         nids = [
             integer(card, 3, 'nid1'),
             integer(card, 4, 'nid2'),
             integer(card, 5, 'nid3'),
             integer(card, 6, 'nid4'),
             integer(card, 7, 'nid5'),
             integer(card, 8, 'nid6'),
             integer(card, 9, 'nid7'),
             integer(card, 10, 'nid8')
         ]
         assert len(card) == 11, 'len(CHEXA8 card) = %i' % len(card)
     else:
         self.eid = data[0]
         self.pid = data[1]
         nids = data[2:]
         assert len(data) == 10, 'len(data)=%s data=%s' % (len(data), data)
     self.prepare_node_ids(nids)
     assert len(self.nodes) == 8
コード例 #29
0
ファイル: bars.py プロジェクト: ClaesFredo/pyNastran
    def __init__(self, card=None, data=None, comment=''):
        LineElement.__init__(self, card, data)
        if comment:
            self._comment = comment
        if card:
            self.eid = integer(card, 1, 'eid')
            self.pid = integer_or_blank(card, 2, 'pid', self.eid)
            self.ga = integer(card, 3, 'ga')
            self.gb = integer(card, 4, 'gb')
            self.gc = integer(card, 5, 'gc')

            self.initX_G0(card)

            self.wa = array([double_or_blank(card, 9, 'w1a', 0.0),
                             double_or_blank(card, 10, 'w2a', 0.0),
                             double_or_blank(card, 11, 'w3a', 0.0)], dtype='float64')

            self.wb = array([double_or_blank(card, 12, 'w1b', 0.0),
                             double_or_blank(card, 13, 'w2b', 0.0),
                             double_or_blank(card, 14, 'w3b', 0.0)], dtype='float64')

            self.wc = array([double_or_blank(card, 15, 'w1c', 0.0),
                             double_or_blank(card, 16, 'w2c', 0.0),
                             double_or_blank(card, 17, 'w3c', 0.0)], dtype='float64')

            self.tw = array([double_or_blank(card, 18, 0., 'twa'),
                             double_or_blank(card, 19, 0., 'twb'),
                             double_or_blank(card, 20, 0., 'twc')], dtype='float64')

            self.s = array([integer_or_blank(card, 21, 'sa'),
                            integer_or_blank(card, 22, 'sb'),
                            integer_or_blank(card, 23, 'sc')], dtype='float64')
            assert len(card) <= 24, 'len(CBEAM3 card) = %i' % len(card)
        else:
            raise NotImplementedError(data)
コード例 #30
0
ファイル: staticLoads.py プロジェクト: anick107/von_mises_rms
    def __init__(self, card=None, data=None, comment=''):
        """
        Defines a static concentrated moment at a grid point by specifying a
        scale factor and a vector that determines the direction.::

          MOMENT SID G CID M    N1  N2  N3
          MOMENT 2   5   6 2.9 0.0 1.0 0.0
        """
        Moment.__init__(self, card, data)
        if comment:
            self._comment = comment
        if card:
            self.sid = integer(card, 1, 'sid')
            self.node = integer(card, 2, 'node')
            self.cid = integer_or_blank(card, 3, 'cid', 0)
            self.mag = double(card, 4, 'mag')

            xyz = array([double_or_blank(card, 5, 'X1', 0.0),
                         double_or_blank(card, 6, 'X2', 0.0),
                         double_or_blank(card, 7, 'X3', 0.0)])
            assert len(card) <= 8, 'len(MOMENT card) = %i' % len(card)
        else:
            raise NotImplementedError(data)
        assert len(xyz) == 3, 'xyz=%s' % xyz
        self.xyz = xyz
コード例 #31
0
ファイル: optimization.py プロジェクト: afcarl/cyNastran
    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 xrange(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...')
コード例 #32
0
    def build(self):
        """
        :param self: the FORCE object
        :param cards: the list of FORCE cards
        """
        cards = self._cards
        ncards = len(cards)
        self.n = ncards
        if ncards:
            float_fmt = self.model.float
            #: Property ID
            self.load_id = zeros(ncards, 'int32')
            self.node_id = zeros(ncards, 'int32')
            self.coord_id = zeros(ncards, 'int32')
            self.mag = zeros(ncards, float_fmt)
            self.xyz = zeros((ncards, 3), float_fmt)

            for i, card in enumerate(cards):
                self.load_id[i] = integer(card, 1, 'sid')
                self.node_id[i] = integer(card, 2, 'node')
                self.coord_id[i] = integer_or_blank(card, 3, 'cid', 0)
                self.mag[i] = double(card, 4, 'mag')
                xyz = [
                    double_or_blank(card, 5, 'X1', 0.0),
                    double_or_blank(card, 6, 'X2', 0.0),
                    double_or_blank(card, 7, 'X3', 0.0)
                ]
                self.xyz[i] = xyz
                assert len(card) <= 8, 'len(FORCE card) = %i' % len(card)

            i = self.load_id.argsort()
            self.load_id = self.load_id[i]
            self.node_id = self.node_id[i]
            self.coord_id = self.coord_id[i]
            self.mag = self.mag[i]
            self.xyz = self.xyz[i]
            self._cards = []
            self._comments = []
コード例 #33
0
ファイル: dynamic.py プロジェクト: EPeterE/von_mises_rms
    def __init__(self, card=None, data=None, comment=''):
        if comment:
            self._comment = comment
        self.sid = integer(card, 1, 'sid')
        f1 = double(card, 2, 'f1')  # default=0.0 ?
        f2 = double(card, 3, 'f2')
        nf = integer_or_blank(card, 4, 'nf', 1)
        assert len(card) <= 5, 'len(FREQ2 card) = %i' % len(card)

        d = 1. / nf * log(f2 / f1)
        self.freqs = []
        for i in range(nf):
            self.freqs.append(f1 * exp(i * d))  # 0 based index
        self.cleanFreqs()
コード例 #34
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')

            nfields = len(card) - 2
            assert nfields % 2 == 0

            #: dictionary of temperatures where the key is the grid ID (Gi)
            #: and the value is the temperature (Ti)
            self.temperatures = {}
            for i in range(nfields // 2):
                n = i * 2 + 2
                gi = integer(card, n, 'g' + str(i))
                Ti = double(card, n + 1, 'T' + str(i))
                self.temperatures[gi] = Ti
        else:
            #print "TEMP data = ",data
            self.sid = data[0]
            self.temperatures = {data[1]: data[2]}
コード例 #35
0
ファイル: bush.py プロジェクト: umvarma/pynastran
    def __init__(self, card=None, data=None, comment=''):
        BushElement.__init__(self, card, data)
        if comment:
            self._comment = comment
        if card:
            self.eid = integer(card, 1, 'eid')
            self.pid = integer_or_blank(card, 2, 'pid')
            self.ga = integer(card, 3, 'ga')
            self.gb = integer(card, 4, 'gb')

            self.cid = integer_or_blank(card, 5, 'cid', 0)
            self.plane = string_or_blank(card, 6, 'plane', 'XY')
            if self.plane not in ['XY', 'YZ', 'ZX']:
                msg = ("plane not in required list, plane=|%s|\n"
                       "expected planes = ['XY','YZ','ZX']" % self.plane)
                raise RuntimeError(msg)
            self.sptid = integer_or_blank(card, 7, 'sptid')
            assert len(card) <= 8, 'len(CBUSH2D card) = %i' % len(card)
        else:
            self.eid = data[0]
            self.pid = data[1]
            self.ga = data[2]
            self.gb = data[3]
コード例 #36
0
ファイル: rigid.py プロジェクト: umvarma/pynastran
    def __init__(self, card=None, data=None, comment=''):
        """
        ::

          RBAR1 EID GA GB CB  ALPHA
          RBAR1 5    1  2 123 6.5-6
        """
        RigidElement.__init__(self, card, data)
        if comment:
            self._comment = comment
        if card:
            self.eid = integer(card, 1, 'eid')
            self.ga = integer(card, 2, 'ga')
            self.gb = integer(card, 3, 'gb')
            self.cb = components_or_blank(card, 4, 'cb')
            self.alpha = double_or_blank(card, 5, 'alpha', 0.0)
            assert len(card) <= 6, 'len(RBAR1 card) = %i' % len(card)
        else:
            self.eid = data[0]
            self.ga = data[1]
            self.gb = data[2]
            self.cb = data[3]
            self.alpha = data[4]
コード例 #37
0
 def __init__(self, card=None, data=None, comment=''):
     Constraint.__init__(self, card, data)
     if comment:
         self._comment = comment
     if card:
         self.conid = integer(card, 1, 'conid')
         self.constraints = components(card, 2, 'constraints')  # 246 = y; dx, dz dir
         nodes = card.fields(3)
         self.nodes = expand_thru(nodes)
         self.nodes.sort()
     else:
         self.conid = data[0]
         self.constraints = data[1]
         self.nodes = data[2:]
コード例 #38
0
 def __init__(self, card=None, data=None, comment=''):
     """
     Defines values for the initial conditions of variables used in
     structural transient analysis. Both displacement and velocity values
     may be specified at independent degrees-of-freedom. This entry may not
     be used for heat transfer analysis.
     """
     Table.__init__(self, card, data)
     if comment:
         self._comment = comment
     if card:
         self.sid = integer(card, 1, 'sid')
         self.G = integer(card, 2, 'G')
         assert self.G > 0
         self.C = components(card, 3, 'C')
         self.U0 = double(card, 4, 'U0')
         self.V0 = double(card, 5, 'V0')
     else:
         self.sid = data[0]
         self.G = data[1]
         self.C = data[2]
         self.U0 = data[3]
         self.V0 = data[4]
コード例 #39
0
ファイル: damper.py プロジェクト: afcarl/cyNastran
 def __init__(self, card=None, data=None, comment=''):
     DamperProperty.__init__(self, card, data)
     if comment:
         self._comment = comment
     if card:
         #: Property ID
         self.pid = integer(card, 1, 'pid')
         #: Identification number of a TABLEDi entry that defines the
         #: damping force per-unit velocity versus frequency relationship
         self.tbid = integer_or_blank(card, 2, 'tbid', 0)
         assert len(card) <= 3, 'len(PDAMPT card) = %i' % len(card)
     else:
         self.pid = data[0]
         self.tbid = data[1]
コード例 #40
0
    def add_grid(self, card=None, data=None, comment=''):
        """
        if coming from a BDF object, card is used
        if coming from the OP2, data is used
        """
        if comment:
            self._comments[self._nnodes] = comment
        if card:
            nid = integer(card, 1, 'nid')

            cp = integer_or_blank(card, 2, 'cp', 0)

            x = double_or_blank(card, 3, 'x1', 0.)
            y = double_or_blank(card, 4, 'x2', 0.)
            z = double_or_blank(card, 5, 'x3', 0.)
            xyz = [x, y, z]

            cd = integer_or_blank(card, 6, 'cd', 0)
            ps = components_or_blank(card, 7, 'ps', '')
            seid = integer_or_blank(card, 8, 'seid', 0)
            assert len(card) <= 9, 'len(GRID card) = %i' % len(card)
        else:
            nid = data[0]
            cp = data[1]
            xyz = data[2:5]
            cd = data[5]
            ps = data[6]
            seid = data[7]
            if ps == 0:
                ps = ''
            assert len(xyz) == 3, '%s len=%s' % (xyz, len(xyz))

        assert nid > 0, 'nid=%s' % nid
        assert cp >= 0, 'cp=%s' % cp
        assert cd >= -1, 'cd=%s' % cd
        assert seid >= 0, 'seid=%s' % seid

        #print("nid", self.nid)
        #print("nid", self._nidmap)
        if nid in self._nidmap:
            asdf
        self._nidmap[nid] = self._nnodes
        self.nid.append(nid)
        self.cp.append(cp)
        self.xyz.append(xyz)
        self.cd.append(cd)
        self.ps.append(ps)
        self.seid.append(seid)

        self._nnodes += 1
コード例 #41
0
ファイル: optimization.py プロジェクト: umvarma/pynastran
 def __init__(self, card=None, data=None, comment=''):
     if comment:
         self._comment = comment
     if card:
         self.oid = integer(card, 1, 'oid')
         self.label = string(card, 2, 'label')
         self.xinit = double(card, 3, 'xinit')
         self.xlb = double_or_blank(card, 4, 'xlb', -1e20)
         self.xub = double_or_blank(card, 5, 'xub', 1e20)
         self.delx = double_or_blank(card, 6, 'delx', 1e20)
         self.ddval = integer_or_blank(card, 7, 'ddval')
         assert len(card) <= 8, 'len(DESVAR card) = %i' % len(card)
     else:
         raise NotImplementedError(data)
コード例 #42
0
ファイル: pbarl.py プロジェクト: afcarl/cyNastran
    def build(self):
        cards = self._cards
        ncards = len(cards)
        self.n = ncards

        if ncards:
            #: Property ID
            self.property_id = zeros(ncards, 'int32')
            self.material_id = zeros(ncards, 'int32')

            ncards = len(cards)
            for i, card in enumerate(cards):
                self.property_id[i] = integer(card, 1, 'property_id')
                self.material_id[i] = integer(card, 2, 'material_id')
            i = self.property_id.argsort()
            self.property_id = self.property_id[i]
            self.material_id = self.material_id[i]
            unique_pids = unique(self.property_id)

            if len(unique_pids) != len(self.property_id):
                raise RuntimeError('There are duplicate PCOMP IDs...')
            self._cards = []
            self._comments = []
コード例 #43
0
ファイル: celas1.py プロジェクト: afcarl/cyNastran
    def build(self):
        """
        :param self: the CELAS1 object
        """
        cards = self._cards
        ncards = len(cards)
        self.n = ncards
        if ncards:
            #: Element ID
            self.element_id = zeros(ncards, 'int32')
            #: Property ID
            self.property_id = zeros(ncards, 'int32')
            #: Node IDs
            self.node_ids = zeros((ncards, 2), 'int32')
            #: component number
            self.components = zeros((ncards, 2), 'int32')

            for i, card in enumerate(cards):
                self.element_id[i] = integer(card, 1, 'eid')
                self.property_id[i] = integer_or_blank(card, 2, 'pid', self.element_id[i])
                self.node_ids[i] = [integer(card, 3, 'n1'),
                                    integer(card, 5, 'n2')]
                self.components[i] = [integer_or_blank(card, 4, 'c1', 0),
                                      integer_or_blank(card, 6, 'c2', 0)]
                assert len(card) <= 7, 'len(CELAS1 card) = %i' % len(card)

            i = self.element_id.argsort()
            self.element_id = self.element_id[i]
            self.property_id = self.property_id[i]
            self.node_ids = self.node_ids[i, :]
            self.components = self.components[i, :]

            unique_eids = unique(self.element_id)
            if len(unique_eids) != len(self.element_id):
                raise RuntimeError('There are duplicate CELAS1 IDs...')
            self._cards = []
            self._comments = []
コード例 #44
0
    def add(self, card, comment=''):
        i = self.i
        self.property_id[i] = integer(card, 1, 'property_id')
        self.material_id[i] = integer(card, 2, 'material_id')
        self.area[i] = double_or_blank(card, 3, 'area', 0.0)
        self.I1[i] = double_or_blank(card, 4, 'I1', 0.0)
        self.I2[i] = double_or_blank(card, 5, 'I2', 0.0)

        #: .. todo:: support SOL 600 default
        Jdefault = 0.5 * (self.I1[i] + self.I2[i])
        self.J[i] = double_or_blank(card, 6, 'J', Jdefault)
        self.nsm[i] = double_or_blank(card, 7, 'non-structural_mass', 0.0)

        if 0:
            self.C1 = double_or_blank(card, 9, 'C1', 0.0)
            self.C2 = double_or_blank(card, 10, 'C2', 0.0)
            self.D1 = double_or_blank(card, 11, 'D1', 0.0)
            self.D2 = double_or_blank(card, 12, 'D2', 0.0)
            self.E1 = double_or_blank(card, 13, 'E1', 0.0)
            self.E2 = double_or_blank(card, 14, 'E2', 0.0)
            self.F1 = double_or_blank(card, 15, 'F1', 0.0)
            self.F2 = double_or_blank(card, 16, 'F2', 0.0)

            #: default=infinite; assume 1e8
            self.K1 = double_or_blank(card, 17, 'K1', 1e8)
            #: default=infinite; assume 1e8
            self.K2 = double_or_blank(card, 18, 'K2', 1e8)
            #: I12 -> use I12()
            self.i12 = double_or_blank(card, 19, 'I12', 0.0)
            if self.A == 0.0 and self.i12 == 0.0:
                assert self.K1 is None, 'K1 must be blank if A=0.0 and I12=0.0; A=%r I12=%r K1=%r' % (
                    self.A, self.i12, self.K1)
                assert self.K2 is None, 'K2 must be blank if A=0.0 and I12=0.0; A=%r I12=%r K2=%r' % (
                    self.A, self.i12, self.K2)
            assert len(card) <= 20, 'len(PBAR card) = %i' % len(card)

        self.i += 1
コード例 #45
0
ファイル: properties.py プロジェクト: umvarma/pynastran
    def __init__(self, card=None, data=None, comment=''):
        Property.__init__(self, card, data)
        if comment:
            self._comment = comment
        if card:
            #: Property ID
            self.pid = integer(card, 1, 'pid')
            #: Material ID
            self.mid1 = integer_or_blank(card, 2, 'mid1', 0)
            self.t1 = double_or_blank(card, 3, 't1')

            self.mid2 = integer_or_blank(card, 4, 'mid2', 0)
            if self.mid2 > 0:
                self.i = double(card, 5, 'i')
                assert self.i > 0.0
            else:
                self.i = blank(card, 5, 'i')

            self.mid3 = integer(card, 6, 0)
            if self.mid3 > 0:
                self.t2 = double(card, 7, 't3')
                assert self.t2 > 0.0
            else:
                self.t2 = blank(card, 7, 't3')

            self.nsm = double(card, 8, 'nsm')
            self.z1 = double(card, 9, 'z1')
            self.z2 = double(card, 10, 'z2')

            j = 1
            self.phi = []
            for i in range(11, len(card)):
                phii = double(card, i, 'phi' % j)
                self.phi.append(phii)
                j += 1
        else:
            raise NotImplementedError(data)
コード例 #46
0
ファイル: optimization.py プロジェクト: umvarma/pynastran
 def __init__(self, card=None, data=None, comment=''):
     if comment:
         self._comment = comment
     if card:
         self.oid = integer(card, 1, 'oid')
         n = 1
         ddvals = []
         for i in range(2, len(card)):
             ddval = double_string_or_blank(card, i, 'DDVAL%s' % n)
             if ddval:
                 ddvals.append(ddval)
         self.ddvals = expand_thru_by(ddvals)
         self.ddvals.sort()
     else:
         raise NotImplementedError(data)
コード例 #47
0
    def add_from_bdf(self, card, comment):
        """
        Fills the LOAD object from the BDF reader

        :param self: the LOAD object
        :param card:  the BDFCard object
        :param comment: a comment
        """
        if comment:
            self._comment = comment

        #: load ID
        self.load_id = integer(card, 1, 'sid')

        #: overall scale factor
        self.scale = double(card, 2, 'scale')

        # alternating of scale factor & load set ID
        nLoads = len(card) - 3
        assert nLoads % 2 == 0
        for i in range(nLoads // 2):
            n = 2 * i + 3
            self.scale_factors.append(double(card, n, 'scaleFactor'))
            self.load_ids.append(integer(card, n + 1, 'loadID'))
コード例 #48
0
ファイル: ctetra10.py プロジェクト: afcarl/cyNastran
    def build(self):
        cards = self._cards
        ncards = len(cards)

        self.n = ncards
        if ncards:
            float_fmt = self.model.float
            self.element_id = zeros(ncards, 'int32')
            self.property_id = zeros(ncards, 'int32')
            self.node_ids = zeros((ncards, 10), 'int32')

            comments = {}
            for i, card in enumerate(cards):
                comment = self._comments[i]
                element_id = integer(card, 1, 'element_id')
                #if comment:
                #self.comments[eid] = comment

                #: Element ID
                self.element_id[i] = element_id
                #: Property ID
                self.property_id[i] = integer(card, 2, 'property_id')
                #: Node IDs
                self.node_ids[i, :] = fields(integer,
                                             card,
                                             'node_ids',
                                             i=3,
                                             j=13)
                assert len(card) == 13, 'len(CTETRA10 card) = %i' % len(card)

            i = self.element_id.argsort()
            self.element_id = self.element_id[i]
            self.property_id = self.property_id[i]
            self.node_ids = self.node_ids[i, :]
            self._cards = []
            self._comments = []
コード例 #49
0
ファイル: pbarl.py プロジェクト: umvarma/pynastran
    def add(self, card, comment):
        i = self.i
        self.property_id[i] = integer(card, 1, 'property_id')
        self.material_id[i] = integer(card, 2, 'material_id')

        self.group[i] = string_or_blank(card, 3, 'group', 'MSCBMLO')
        Type = string(card, 4, 'Type')
        self.Type[i] = Type

        ndim = self.valid_types[Type]
        j = 9 + ndim + 1
        dim = fields(double_or_blank, card, 'dim', i=9, j=j)

        nsm = double_or_blank(card, 9 + ndim + 1, 'nsm', 0.0)

        if ndim > 0:
            nsm = set_default_if_blank(dim.pop(), 0.0)
        #else:
        #nsm = 0.0

        self.dim[i] = dim
        self.nsm[i] = nsm
        assert isinstance(nsm, float), 'nsm=%r' % nsm

        if Type not in self.valid_types:
            msg = ('Invalid PBARL Type, Type=%s '
                   'validTypes=%s' % (Type, self.valid_types.keys()))
            raise RuntimeError(msg)

        if len(dim) != self.valid_types[Type]:
            msg = 'dim=%s len(dim)=%s Type=%s len(dimType)=%s' % (
                dim, len(dim), Type, self.valid_types[Type])
            raise RuntimeError(msg)

        assert None not in dim
        self.i += 1
コード例 #50
0
ファイル: thermal.py プロジェクト: afcarl/cyNastran
    def __init__(self, card=None, data=None, comment=''):
        if comment:
            self._comment = comment
        if card:
            #: Convection property identification number. (Integer > 0)
            self.pconid = integer(card, 1, 'pconid')
            assert self.pconid > 0

            #: Material property identification number. (Integer > 0)
            self.mid = integer(card, 2, 'mid')
            assert self.mid > 0

            #: Type of formula used for free convection.
            #: (Integer 0, 1, 10, 11, 20, or 21)
            self.form = integer_or_blank(card, 3, 'form', 0)
            assert self.form in [0, 1, 10, 11, 20, 21]

            #: Flag for mass flow convection. (Integer = 0 or 1; Default = 0)
            self.flag = integer_or_blank(card, 4, 'flag', 0)

            #: Constant coefficient used for forced convection
            self.coef = double(card, 5, 'coef')

            #: Reynolds number convection exponent. (Real > 0.0; Default = 0.0)
            self.expr = double_or_blank(card, 6, 'expr', 0.0)

            #: Prandtl number convection exponent for heat transfer into the
            #: workingfluid. (Real > 0.0; Default = 0.0)
            self.exppi = double_or_blank(card, 7, 'exppi', 0.0)

            #: Prandtl number convection exponent for heat transfer into the
            #: working fluid. (Real > 0.0; Default = 0.0)
            self.exppo = double_or_blank(card, 8, 'exppo', 0.0)
            assert len(card) <= 9, 'len(PCONVM card) = %i' % len(card)
        else:
            raise NotImplementedError(data)
コード例 #51
0
ファイル: thermal.py プロジェクト: afcarl/cyNastran
    def __init__(self, card=None, data=None, comment=''):
        if comment:
            self._comment = comment
        #ThermalBC.__init__(self, card, data)
        if card:
            #: CHBDYG, CHBDYE, or CHBDYP surface element identification number.
            #: (Integer > 0)
            self.eid = integer(card, 1, 'eid')
            assert self.eid > 0

            #: Convection property identification number of a PCONV entry
            self.pconID = integer(card, 2, 'pconID')

            #: Point for film convection fluid property temperature
            self.flmnd = integer_or_blank(card, 3, 'flmnd', 0)

            #: Control point for free convection boundary condition.
            self.cntrlnd = integer_or_blank(card, 4, 'cntrlnd', 0)

            TA1 = integer(card, 5, 'TA1')
            assert TA1 > 0

            #: Ambient points used for convection 0's are allowed for TA2 and
            #: higher.  (Integer > 0 for TA1 and Integer > 0 for TA2 through TA8;
            #: Default for TA2 through TA8 is TA1.)
            TA2 = integer_or_blank(card, 6, 'ta2', TA1)
            TA3 = integer_or_blank(card, 7, 'ta3', TA1)
            TA4 = integer_or_blank(card, 8, 'ta4', TA1)
            TA5 = integer_or_blank(card, 9, 'ta5', TA1)
            TA6 = integer_or_blank(card, 10, 'ta6', TA1)
            TA7 = integer_or_blank(card, 11, 'ta7', TA1)
            TA8 = integer_or_blank(card, 12, 'ta8', TA1)
            self.ta = [TA1, TA2, TA3, TA4, TA5, TA6, TA7, TA8]
            assert len(card) <= 13, 'len(CONV card) = %i' % len(card)
        else:
            raise NotImplementedError(data)
コード例 #52
0
    def __init__(self, card=None, data=None, comment=''):
        if comment:
            self._comment = comment
        if card:
            #: Random analysis set identification number. (Integer > 0)
            #: Defined by RANDOM in the Case Control Deck.
            self.sid = integer(card, 1, 'sid')

            #: Subcase identification number of the excited load set.
            #: (Integer > 0)
            self.j = integer(card, 2, 'j')

            #: Subcase identification number of the applied load set.
            #: (Integer >= 0; K >= J)
            self.k = integer(card, 3, 'k')

            #: Components of the complex number. (Real)
            self.x = double_or_blank(card, 4, 'x', 0.0)
            self.y = double_or_blank(card, 5, 'y', 0.0)
            #: Identification number of a TABRNDi entry that defines G(F).
            self.tid = integer_or_blank(card, 6, 'tid', 0)
            assert len(card) <= 7, 'len(RANDPS card) = %i' % len(card)
        else:
            raise NotImplementedError(data)
コード例 #53
0
    def add(self, card, comment=''):
        i = self.i
        self.element_id[i] = integer(card, 1, 'element_id')

        self.property_id[i] = integer(card, 2, 'property_id')

        self.node_ids[i] = [
            integer(card, 3, 'n1'),
            integer(card, 4, 'n2'),
            integer(card, 5, 'n3')
        ]

        #self.thetaMcid = integer_double_or_blank(card, 6, 'thetaMcid', 0.0)
        #self.zOffset = double_or_blank(card, 7, 'zOffset', 0.0)
        blank(card, 8, 'blank')
        blank(card, 9, 'blank')

        self.t_flag[i] = integer_or_blank(card, 10, 'TFlag', 0)
        self.thickness[i] = [
            double_or_blank(card, 11, 'T1', 1.0),
            double_or_blank(card, 12, 'T2', 1.0),
            double_or_blank(card, 13, 'T3', 1.0),
        ]
        self.i += 1
コード例 #54
0
 def __init__(self,
              card=None,
              data=None,
              comment=''):  # this card has missing fields
     Ring.__init__(self, card, data)
     if comment:
         self._comment = comment
     self.nid = integer(card, 1, 'nid')
     blank(card, 2, 'blank')
     self.R = double(card, 3, 'R')
     self.z = double(card, 4, 'z')
     blank(card, 5, 'blank')
     blank(card, 6, 'blank')
     self.ps = integer_or_blank(card, 7, 'ps')
     assert len(card) <= 8, 'len(RINGAX card) = %i' % len(card)
コード例 #55
0
    def build(self):
        """
        :param self: the GRAV object
        :param cards: the list of GRAV cards
        """
        cards = self._cards
        ncards = len(cards)
        self.n = ncards
        if ncards:
            float_fmt = self.model.float
            #: Set identification number
            self.load_id = zeros(ncards, 'int32')
            #: Coordinate system identification number.
            self.coord_id = zeros(ncards, 'int32')
            #: scale factor
            self.scale = zeros(ncards, float_fmt)
            self.N = zeros((ncards, 3), float_fmt)
            self.mb = zeros(ncards, 'int32')

            for i, card in enumerate(cards):
                self.load_id[i] = integer(card, 1, 'sid')
                self.coord_id[i] = integer_or_blank(card, 2, 'cid', 0)
                self.scale[i] = double(card, 3, 'scale')

                #: Acceleration vector components measured in coordinate system CID
                self.N[i, :] = [
                    double_or_blank(card, 4, 'N1', 0.0),
                    double_or_blank(card, 5, 'N2', 0.0),
                    double_or_blank(card, 6, 'N3', 0.0)
                ]

                #: Indicates whether the CID coordinate system is defined in the
                #: main Bulk Data Section (MB = -1) or the partitioned superelement
                #: Bulk Data Section (MB = 0). Coordinate systems referenced in the
                #: main Bulk Data Section are considered stationary with respect to
                #: the assembly basic coordinate system. See Remark 10.
                #: (Integer; Default = 0)
                self.mb[i] = integer_or_blank(card, 7, 'mb', 0)
                assert len(card) <= 8, 'len(GRAV card) = %i' % len(card)

            i = self.load_id.argsort()
            self.load_id = self.load_id[i]
            self.node_id = self.node_id[i]
            self.coord_id = self.coord_id[i]
            self.scale = self.scale[i]
            self.N = self.N[i]
            self._cards = []
            self._comments = []
コード例 #56
0
ファイル: mat1.py プロジェクト: afcarl/cyNastran
    def build(self):
        cards = self._cards
        ncards = len(cards)
        self.n = ncards
        if ncards:
            float_fmt = self.model.float
            self.material_id = zeros(ncards, 'int32')
            self.rho = zeros(ncards, float_fmt)
            self.E = zeros(ncards, float_fmt)
            self.G = zeros(ncards, float_fmt)
            self.nu = zeros(ncards, float_fmt)
            self.a = zeros(ncards, float_fmt)
            self.TRef = zeros(ncards, float_fmt)
            self.ge = zeros(ncards, float_fmt)
            self.St = zeros(ncards, float_fmt)
            self.Sc = zeros(ncards, float_fmt)
            self.Ss = zeros(ncards, float_fmt)
            self.mcsid = zeros(ncards, 'int32')

            for (i, card) in enumerate(cards):
                #if comment:
                #    self._comment = comment
                self.material_id[i] = integer(card, 1, 'mid')
                self.set_E_G_nu(i, card)
                self.rho[i] = double_or_blank(card, 5, 'rho', 0.)
                self.a[i] = double_or_blank(card, 6, 'a', 0.0)
                self.TRef[i] = double_or_blank(card, 7, 'TRef', 0.0)
                self.ge[i] = double_or_blank(card, 8, 'ge', 0.0)
                self.St[i] = double_or_blank(card, 9, 'St', 0.0)
                self.Sc[i] = double_or_blank(card, 10, 'Sc', 0.0)
                self.Ss[i] = double_or_blank(card, 11, 'Ss', 0.0)
                self.mcsid[i] = integer_or_blank(card, 12, 'Mcsid', 0)
                assert len(card) <= 13, 'len(MAT1 card) = %i' % len(card)

            i = self.material_id.argsort()
            self.material_id = self.material_id[i]
            self.E = self.E[i]
            self.G = self.G[i]
            self.rho = self.rho[i]
            self.a = self.a[i]
            self.TRef = self.TRef[i]
            self.ge = self.ge[i]
            self.St = self.St[i]
            self.Sc = self.Sc[i]
            self.Ss = self.Ss[i]
            self.mcsid = self.mcsid[i]
            self._cards = []
            self._comments = []
コード例 #57
0
    def __init__(self, card=None, data=None, comment=''):
        MaterialDependence.__init__(self, card, data)
        if comment:
            self._comment = comment

        if card:
            self.mid = integer(card, 1, 'mid')
            self._k_table = integer_or_blank(card, 2, 'T(K)')
            self._cp_table = integer_or_blank(card, 3, 'T(CP)')
            self._H_table = integer_or_blank(card, 5, 'T(H)')
            self._mu_table = integer_or_blank(card, 6, 'T(mu)')
            self._Hgen_table = integer_or_blank(card, 7, 'T(HGEN)')

            assert len(card) <= 8, 'len(MATT4 card) = %i' % len(card)
        else:
            raise NotImplementedError()
コード例 #58
0
 def __init__(self, card=None, data=None, comment=''):
     PointMassElement.__init__(self, card, data)
     if comment:
         self._comment = comment
     if card:
         self.eid = integer(card, 1, 'eid')
         self.pid = integer_or_blank(card, 2, 'pid', self.eid)
         self.s1 = integer_or_blank(card, 3, 's1')
         self.s2 = integer_or_blank(card, 4, 's2')
         assert len(card) <= 5, 'len(CMASS3 card) = %i' % len(card)
     else:
         self.eid = data[0]
         self.pid = data[1]
         self.s1 = data[2]
         self.s2 = data[3]
     assert self.s1 != self.s2
コード例 #59
0
    def loadCLAN(self, nRows, card):
        for irow in range(nRows):
            #NDJ_default = None
            i = 9 + 8 * irow
            self.alphaAjs.append(
                double_or_blank(card, i, 'alpha' + str(irow), 0.0))
            self.omegaAjs.append(
                double_or_blank(card, i + 1, 'omega' + str(irow), 0.0))
            self.mblkszs.append(
                double_or_blank(card, i + 2, 'mblock' + str(irow), 7))

            self.iblkszs.append(
                integer_or_blank(card, i + 3, 'iblksz' + str(irow), 2))
            self.ksteps.append(
                integer_or_blank(card, i + 4, 'kstep' + str(irow), 5))
            self.NJIs.append(integer(card, i + 6, 'NJI' + str(irow)))
コード例 #60
0
ファイル: damper.py プロジェクト: afcarl/cyNastran
    def __init__(self, card=None, nPDAMP=0, data=None, comment=''):
        DamperProperty.__init__(self, card, data)
        if comment:
            self._comment = comment
        nOffset = nPDAMP * 2
        if card:
            # 3 PDAMP properties can be defined on 1 PDAMP card
            #: Property ID
            self.pid = integer(card, 1 + nOffset, 'pid')

            # these are split into 2 separate cards
            #: Force per unit velocity (Real)
            self.b = double(card, 2 + nOffset, 'b')
        else:
            self.pid = data[0]
            self.b = data[1]