Beispiel #1
0
    def test_thermal_1(self):
        """tests various thermal cards"""
        model = BDF(debug=False)
        model.sol = 101
        lines = [
            'SUBCASE 1',
            '  DISP(PLOT) = ALL',
            '  ANALYSIS = HEAT',
            'BEGIN BULK',
        ]
        model.case_control_deck = CaseControlDeck(lines, log=None)

        model.add_grid(11, [0., 0., 0.])
        model.add_grid(12, [1., 0., 0.])
        model.add_grid(13, [1., 1., 0.])
        model.add_grid(14, [0., 1., 0.])
        model.add_grid(15, [0., 2., 0.])

        eid = 1
        pid = 1
        mid = 1
        nodes = [11, 12, 13, 14]
        model.add_cquad4(eid,
                         pid,
                         nodes,
                         theta_mcid=0.0,
                         zoffset=0.,
                         tflag=0,
                         T1=1.0,
                         T2=1.0,
                         T3=1.0,
                         T4=1.0,
                         comment='')
        model.add_pshell(pid, mid1=1, t=0.1)

        eid = 10
        nids = [11, 12, 13, 15]
        pid = 2
        model.add_ctetra(eid, pid, nids)
        model.add_psolid(pid, mid)

        E = 3.0e7
        G = None
        nu = 0.3
        model.add_mat1(mid, E, G, nu)

        eid = 2
        Type = 'AREA3'
        chbdyg = CHBDYG(eid,
                        Type,
                        nodes,
                        iview_front=0,
                        ivew_back=0,
                        rad_mid_front=0,
                        rad_mid_back=0,
                        comment='chbdyg')
        with self.assertRaises(ValueError):
            chbdyg.validate()

        Type = 'AREA4'
        chbdyg = model.add_chbdyg(eid,
                                  Type,
                                  nodes,
                                  iview_front=0,
                                  ivew_back=0,
                                  rad_mid_front=0,
                                  rad_mid_back=0,
                                  comment='chbdyg')
        chbdyg.raw_fields()

        eid = 3
        eid2 = 4
        side = 1
        chbdye = model.add_chbdye(eid,
                                  eid2,
                                  side,
                                  iview_front=0,
                                  ivew_back=0,
                                  rad_mid_front=0,
                                  rad_mid_back=0,
                                  comment='chbdye')
        chbdye.raw_fields()

        eid = 4
        g1 = 11
        g2 = 12
        pid = 10
        chbdyp = model.add_chbdyp(eid,
                                  pid,
                                  Type,
                                  g1,
                                  g2,
                                  g0=0,
                                  gmid=None,
                                  ce=0,
                                  iview_front=0,
                                  ivew_back=0,
                                  rad_mid_front=0,
                                  rad_mid_back=0,
                                  e1=None,
                                  e2=None,
                                  e3=None,
                                  comment='chbdyp')
        chbdyp.raw_fields()

        phbdy = model.add_phbdy(pid,
                                af=None,
                                d1=None,
                                d2=None,
                                comment='phbdy')
        phbdy.raw_fields()

        #---------------------------
        ta = 2
        ta1 = 2
        pconid = 11
        conv = model.add_conv(eid,
                              pconid,
                              ta,
                              film_node=0,
                              cntrlnd=0,
                              comment='conv')
        conv.raw_fields()
        pconv = model.add_pconv(pconid,
                                mid,
                                form=0,
                                expf=0.0,
                                ftype=0,
                                tid=None,
                                chlen=None,
                                gidin=None,
                                ce=0,
                                e1=None,
                                e2=None,
                                e3=None,
                                comment='pconv')
        pconv.raw_fields()

        pconid = 12
        convm = model.add_convm(eid,
                                pconid,
                                ta1,
                                film_node=0,
                                cntmdot=0,
                                ta2=None,
                                mdot=1.0,
                                comment='convm')
        convm.raw_fields()
        coef = 0.023
        pconvm = model.add_pconvm(pconid,
                                  mid,
                                  coef,
                                  form=0,
                                  flag=0,
                                  expr=0.0,
                                  exppi=0.0,
                                  exppo=0.0,
                                  comment='pconvm')
        pconv.raw_fields()

        radmid = 42
        absorb = 0.2
        emissivity = 0.8
        radm = model.add_radm(radmid, absorb, emissivity, comment='radm')
        radm.raw_fields()

        famb = 100.
        nodamb = 33
        eids = [1]
        cntrlnd = 1000
        radbc = model.add_radbc(nodamb, famb, cntrlnd, eids, comment='radbc')
        radbc.raw_fields()

        sid = 43
        qvol = 17.
        control_point = 1001
        elements = [1, 2]
        qvol = model.add_qvol(sid,
                              qvol,
                              control_point,
                              elements,
                              comment='qvol')
        qvol.raw_fields()

        q0 = 18.
        t_source = 19.
        eids = [2]
        qvect = model.add_qvect(sid,
                                q0,
                                eids,
                                t_source,
                                ce=0,
                                vector_tableds=None,
                                control_id=0,
                                comment='qvect')
        qvect.raw_fields()

        q0 = 15.8
        flag = 'POINT'
        grids = [-1]
        qhbdy = model.add_qhbdy(sid, flag, q0, grids, af=None, comment='qhbdy')
        qhbdy.raw_fields()

        qflux = 20.
        eids = [1]
        qbdy1 = model.add_qbdy1(sid, qflux, eids, comment='qbdy1')
        qbdy1.raw_fields()

        eid = 1
        qfluxs = 12.
        qbdy2 = model.add_qbdy2(sid, eid, qfluxs, comment='qbdhy2')
        qbdy2.raw_fields()

        q0 = 14.
        cntrlnd = 57
        eids = [1, 2]
        qbdy3 = model.add_qbdy3(sid, q0, cntrlnd, eids, comment='qbdy3')
        qbdy3.raw_fields()

        temperature = 13.3
        model.add_tempd(sid, temperature, comment='tempd')

        temperatures = {
            15: 37.,
            16: 38.,
        }
        model.add_temp(sid, temperatures)
        #-------------------------
        bdf_filename = StringIO()
        bdf_filename2 = StringIO()
        bdf_filename3 = StringIO()
        bdf_filename4 = StringIO()

        model.validate()
        model._verify_bdf(xref=False)
        model.write_bdf(bdf_filename,
                        encoding=None,
                        size=8,
                        is_double=False,
                        interspersed=False,
                        enddata=None,
                        close=False)

        model.cross_reference()
        model.pop_xref_errors()

        model._verify_bdf(xref=True)
        model.write_bdf(bdf_filename2,
                        encoding=None,
                        size=16,
                        is_double=False,
                        interspersed=False,
                        enddata=None,
                        close=False)
        model.write_bdf(bdf_filename3,
                        encoding=None,
                        size=16,
                        is_double=True,
                        interspersed=False,
                        enddata=None,
                        close=False)
        write_bdf_symmetric(model,
                            bdf_filename4,
                            encoding=None,
                            size=8,
                            is_double=False,
                            enddata=None,
                            close=False,
                            plane='xz')
        #model.cross_reference()

        #print(bdf_filename.getvalue())

        bdf_filename2.seek(0)
        model2 = read_bdf(bdf_filename2, xref=False, debug=False)
        model2.safe_cross_reference()
        save_load_deck(model, punch=False)
    def test_dvcrel1(self):
        """tests a DVCREL"""
        model = BDF(debug=False)
        oid = 10
        eid = 100
        cp_min = 0.01
        cp_max = 1.
        desvar_id = 11
        desvar_ids = 11
        coeffs = 1.0
        dvcrel1 = model.add_dvcrel1(oid,
                                    'CONM2',
                                    eid,
                                    'X2',
                                    desvar_ids,
                                    coeffs,
                                    cp_min,
                                    cp_max,
                                    c0=0.,
                                    validate=True,
                                    comment='')

        label = 'X2_MASS'
        xinit = 0.1
        xlb = 0.01
        xub = 1.0
        desvar = model.add_desvar(desvar_id,
                                  label,
                                  xinit,
                                  xlb,
                                  xub,
                                  comment='desvar')

        mass = 1.
        nid1 = 100
        nid2 = 101
        conm2 = model.add_conm2(eid,
                                nid1,
                                mass,
                                cid=0,
                                X=None,
                                I=None,
                                comment='conm2')
        model.add_grid(100, xyz=[1., 2., 3.])
        model.add_grid(101, xyz=[2., 2., 4.])

        eid = 101
        pid = 102
        x = [1., 0., 0.]
        g0 = None
        cbar = model.add_cbar(eid,
                              pid,
                              nid1,
                              nid2,
                              x,
                              g0,
                              offt='GGG',
                              pa=0,
                              pb=0,
                              wa=None,
                              wb=None,
                              comment='cbar')

        oid = 11
        equation_id = 100
        dvcrel2 = model.add_dvcrel2(oid,
                                    'CBAR',
                                    eid,
                                    'X3',
                                    equation_id,
                                    desvar_ids,
                                    labels=None,
                                    cp_min=2.,
                                    cp_max=4.,
                                    validate=True,
                                    comment='dvcrel2')

        mid = 1000
        dim = [1., 2., 0.1, 0.2]
        model.add_pbarl(pid,
                        mid,
                        'T',
                        dim,
                        group='MSCBMLO',
                        nsm=0.1,
                        comment='pbarl')
        E = 30.e7
        G = None
        nu = 0.3
        mat1 = model.add_mat1(mid, E, G, nu, rho=0.1, comment='mat1')

        name = 'fx2'
        eqs = ['fx2(x) = x + 10.']
        deqatn = model.add_deqatn(name, equation_id, eqs, comment='deqatn')

        dvcrel1.raw_fields()
        dvcrel2.raw_fields()
        dvcrel1.write_card(size=16)
        dvcrel2.write_card(size=16)

        dvcrel1.comment = ''
        dvcrel2.comment = ''
        desvar.comment = ''
        dvcrel1_msg = dvcrel1.write_card(size=8)
        dvcrel2_msg = dvcrel2.write_card(size=8)
        desvar_msg = desvar.write_card(size=8)

        model.validate()
        model.cross_reference()
        dvcrel1.raw_fields()
        dvcrel1.write_card(size=16)
        dvcrel1.write_card(size=8)

        dvcrel2.raw_fields()
        dvcrel2.write_card(size=16)
        dvcrel2.write_card(size=8)

        assert cbar.Mass() > 0, cbar.Mass()

        #-------------------------------------------
        dvcrel1_lines = dvcrel1_msg.split('\n')
        dvcrel2_lines = dvcrel2_msg.split('\n')
        desvar_lines = desvar_msg.split('\n')
        model2 = BDF(debug=False)
        model2.add_card(dvcrel1_lines, 'DVCREL1', is_list=False)
        model2.add_card(dvcrel2_lines, 'DVCREL2', is_list=False)
        model2.add_card(desvar_lines, 'DESVAR', is_list=False)
Beispiel #3
0
    def test_loads_sum_05(self):
        """
        tests:
         - 1=LOAD/PLOAD4
         - 2=LOAD/PLOAD4/FORCE
         - 5=PLOAD4
         - 6=PLOAD4
         - 1001=PLOAD4
         - 1002=1002
         - 1003=PLOAD
        """
        model = BDF(log=log, debug=False)
        bdf_filename = os.path.join(model_path, 'real', 'loads', 'loads.bdf')
        model.read_bdf(bdf_filename)

        p = 3.
        A = 1.
        n = array([0., 0., 1.])
        F1001_expected = p * A * n
        r = array([0.5, 1.5, 0.])
        p0 = array([0., 0., 0.])
        M1001_expected = cross(r, F1001_expected)

        loadcase_id = 1001
        eids = None
        nids = None
        F, M = sum_forces_moments(model, p0, loadcase_id, include_grav=False)
        F2, M2 = sum_forces_moments_elements(model,
                                             p0,
                                             loadcase_id,
                                             eids,
                                             nids,
                                             include_grav=False)
        assert np.allclose(F, F2), 'F=%s F2=%s' % (F, F2)
        assert np.allclose(M, M2), 'M=%s M2=%s' % (M, M2)
        self.assertTrue(
            allclose(F1001_expected, F), 'loadcase_id=%s F_expected=%s F=%s' %
            (loadcase_id, F1001_expected, F))
        self.assertTrue(
            allclose(M1001_expected, M), 'loadcase_id=%s M_expected=%s M=%s' %
            (loadcase_id, M1001_expected, M))

        loadcase_id = 1002
        r = array([4., 2., 0.])
        F1002_expected = array([0., 0., 1.])
        M1002_expected = cross(r, F1002_expected)
        F, M = sum_forces_moments(model, p0, loadcase_id, include_grav=False)
        F2, M2 = sum_forces_moments_elements(model,
                                             p0,
                                             loadcase_id,
                                             eids,
                                             nids,
                                             include_grav=False)
        self.assertTrue(
            allclose(F1002_expected, F), 'loadcase_id=%s F_expected=%s F=%s' %
            (loadcase_id, F1002_expected, F))
        self.assertTrue(
            allclose(M1002_expected, M), 'loadcase_id=%s M_expected=%s M=%s' %
            (loadcase_id, M1002_expected, M))

        loadcase_id = 1
        F, M = sum_forces_moments(model, p0, loadcase_id, include_grav=False)
        F2, M2 = sum_forces_moments_elements(model,
                                             p0,
                                             loadcase_id,
                                             eids,
                                             nids,
                                             include_grav=False)
        assert np.allclose(F, F2), 'F=%s F2=%s' % (F, F2)
        assert np.allclose(M, M2), 'M=%s M2=%s' % (M, M2)
        self.assertTrue(
            allclose(F1001_expected, F), 'loadcase_id=%s F_expected=%s F=%s' %
            (loadcase_id, F1001_expected, F))
        self.assertTrue(
            allclose(M1001_expected, M), 'loadcase_id=%s M_expected=%s M=%s' %
            (loadcase_id, M1001_expected, M))

        loadcase_id = 2
        F2_expected = F1001_expected + F1002_expected
        M2_expected = M1001_expected + M1002_expected
        F, M = sum_forces_moments(model, p0, loadcase_id, include_grav=False)
        F2, M2 = sum_forces_moments_elements(model,
                                             p0,
                                             loadcase_id,
                                             eids,
                                             nids,
                                             include_grav=False)
        assert np.allclose(F, F2), 'F=%s F2=%s' % (F, F2)
        assert np.allclose(M, M2), 'M=%s M2=%s' % (M, M2)
        self.assertTrue(
            allclose(F2_expected, F), 'loadcase_id=%s F_expected=%s F=%s' %
            (loadcase_id, F2_expected, F))
        self.assertTrue(
            allclose(M2_expected, M), 'loadcase_id=%s M_expected=%s M=%s' %
            (loadcase_id, M2_expected, M))

        F6_expected = 2. * (3. * F1001_expected + 13. * F1002_expected)
        M6_expected = 2. * (3. * M1001_expected + 13. * M1002_expected)

        F7_expected = 7. * 11. * F6_expected
        M7_expected = 7. * 11. * M6_expected
        if 0:  # pragma: no cover
            loadcase_id = 6
            F, M = sum_forces_moments(model,
                                      p0,
                                      loadcase_id,
                                      include_grav=False)
            F2, M2 = sum_forces_moments_elements(model,
                                                 p0,
                                                 loadcase_id,
                                                 eids,
                                                 nids,
                                                 include_grav=False)
            assert np.allclose(F, F2), 'F=%s F2=%s' % (F, F2)
            assert np.allclose(M, M2), 'M=%s M2=%s' % (M, M2)
            self.assertTrue(
                allclose(F6_expected, F), 'loadcase_id=%s F_expected=%s F=%s' %
                (loadcase_id, F6_expected, F))
            self.assertTrue(
                allclose(M6_expected, M), 'loadcase_id=%s M_expected=%s M=%s' %
                (loadcase_id, M6_expected, M))

            loadcase_id = 7
            F, M = sum_forces_moments(model,
                                      p0,
                                      loadcase_id,
                                      include_grav=False)
            F2, M2 = sum_forces_moments_elements(model,
                                                 p0,
                                                 loadcase_id,
                                                 eids,
                                                 nids,
                                                 include_grav=False)
            assert np.allclose(F, F2), 'F=%s F2=%s' % (F, F2)
            assert np.allclose(M, M2), 'M=%s M2=%s' % (M, M2)
            self.assertTrue(
                allclose(F7_expected, F), 'loadcase_id=%s F_expected=%s F=%s' %
                (loadcase_id, F7_expected, F))
            self.assertTrue(
                allclose(M7_expected, M), 'loadcase_id=%s M_expected=%s M=%s' %
                (loadcase_id, M7_expected, M))

        loadcase_id = 5
        p = 2.
        A = 1.
        n = array([0., 1., 1.]) / np.sqrt(2.)
        F5_expected = p * A * n
        r = array([0.5, 0.5, 0.])
        M5_expected = cross(r, F5_expected)
        F, M = sum_forces_moments(model, p0, loadcase_id, include_grav=False)
        F2, M2 = sum_forces_moments_elements(model,
                                             p0,
                                             loadcase_id,
                                             eids,
                                             nids,
                                             include_grav=False)
        assert np.allclose(F, F2), 'F=%s F2=%s' % (F, F2)
        assert np.allclose(M, M2), 'M=%s M2=%s' % (M, M2)
        self.assertTrue(
            allclose(F5_expected, F), 'loadcase_id=%s F_expected=%s F=%s' %
            (loadcase_id, F5_expected, F))
        self.assertTrue(
            allclose(M5_expected, M), 'loadcase_id=%s M_expected=%s M=%s' %
            (loadcase_id, M5_expected, M))
        #print('loadcase_id=%s F=%s M=%s' % (loadcase_id, F, M))

        loadcase_id = 6
        p = 2.
        A = 1.
        n = array([0., 0., 0.5]) / 0.5
        F6_expected = p * A * n
        r = array([0.5, 0.5, 0.])
        M6_expected = cross(r, F6_expected)
        F, M = sum_forces_moments(model, p0, loadcase_id, include_grav=False)
        F2, M2 = sum_forces_moments_elements(model,
                                             p0,
                                             loadcase_id,
                                             eids,
                                             nids,
                                             include_grav=False)
        assert np.allclose(F, F2), 'F=%s F2=%s' % (F, F2)
        assert np.allclose(M, M2), 'M=%s M2=%s' % (M, M2)
        self.assertTrue(
            allclose(F6_expected, F), 'loadcase_id=%s F_expected=%s F=%s' %
            (loadcase_id, F6_expected, F))
        self.assertTrue(
            allclose(M6_expected, M), 'loadcase_id=%s M_expected=%s M=%s' %
            (loadcase_id, M6_expected, M))
        #print('loadcase_id=%s F=%s M=%s' % (loadcase_id, F, M))

        loadcase_id = 1003
        p = 9.
        A = 1.
        n = array([0., 0., 1.])
        F1003_expected = p * A * n
        r = array([0.5, 0.5, 0.])
        M1003_expected = cross(r, F1003_expected)
        F, M = sum_forces_moments(model, p0, loadcase_id, include_grav=False)
        F2, M2 = sum_forces_moments_elements(model,
                                             p0,
                                             loadcase_id,
                                             eids,
                                             nids,
                                             include_grav=False)
        assert np.allclose(F, F2), 'F=%s F2=%s' % (F, F2)
        assert np.allclose(M, M2), 'M=%s M2=%s' % (M, M2)
        self.assertTrue(
            allclose(F1003_expected, F), 'loadcase_id=%s F_expected=%s F=%s' %
            (loadcase_id, F1003_expected, F))
        self.assertTrue(
            allclose(M1003_expected, M), 'loadcase_id=%s M_expected=%s M=%s' %
            (loadcase_id, M1003_expected, M))

        loadcase_id = 8
        F8_expected = 2. * (3. * F7_expected + 2. * F1003_expected)
        M8_expected = 2. * (3. * M7_expected + 2. * M1003_expected)
        if 0:  # pragma: no cover
            F, M = sum_forces_moments(model,
                                      p0,
                                      loadcase_id,
                                      include_grav=False)
            F2, M2 = sum_forces_moments_elements(model,
                                                 p0,
                                                 loadcase_id,
                                                 eids,
                                                 nids,
                                                 include_grav=False)
            assert np.allclose(F, F2), 'F=%s F2=%s' % (F, F2)
            assert np.allclose(M, M2), 'M=%s M2=%s' % (M, M2)
            self.assertTrue(
                allclose(F8_expected, F), 'loadcase_id=%s F_expected=%s F=%s' %
                (loadcase_id, F8_expected, F))
            self.assertTrue(
                allclose(M8_expected, M), 'loadcase_id=%s M_expected=%s M=%s' %
                (loadcase_id, M8_expected, M))

        loadcase_id = 800
        p = 3.5
        A = 1.
        n = array([0., 0., 1.])
        F800_expected = p * A * n
        r = array([3.5, 1.5, 0.])
        M800_expected = cross(r, F800_expected)
        if 0:  # pragma: no cover
            F, M = sum_forces_moments(model,
                                      p0,
                                      loadcase_id,
                                      include_grav=False)
            F2, M2 = sum_forces_moments_elements(model,
                                                 p0,
                                                 loadcase_id,
                                                 eids,
                                                 nids,
                                                 include_grav=False)
            assert np.allclose(F, F2), 'F=%s F2=%s' % (F, F2)
            assert np.allclose(M, M2), 'M=%s M2=%s' % (M, M2)
            self.assertTrue(
                allclose(F800_expected,
                         F), 'loadcase_id=%s F_expected=%s F=%s' %
                (loadcase_id, F800_expected, F))
            self.assertTrue(
                allclose(M800_expected,
                         M), 'loadcase_id=%s M_expected=%s M=%s' %
                (loadcase_id, M800_expected, M))

        loadcase_id = 801
        F801_expected = F800_expected
        M801_expected = M800_expected
        if 0:  # pragma: no cover
            F, M = sum_forces_moments(model,
                                      p0,
                                      loadcase_id,
                                      include_grav=False)
            F2, M2 = sum_forces_moments_elements(model,
                                                 p0,
                                                 loadcase_id,
                                                 eids,
                                                 nids,
                                                 include_grav=False)
            assert np.allclose(F, F2), 'F=%s F2=%s' % (F, F2)
            assert np.allclose(M, M2), 'M=%s M2=%s' % (M, M2)
            self.assertTrue(
                allclose(F801_expected,
                         F), 'loadcase_id=%s F_expected=%s F=%s' %
                (loadcase_id, F801_expected, F))
            self.assertTrue(
                allclose(M801_expected,
                         M), 'loadcase_id=%s M_expected=%s M=%s' %
                (loadcase_id, M801_expected, M))

        loadcase_id = 802
        p = 3.5
        A = 0.5
        n = array([0., 0., 1.])
        F802_expected = p * A * n
        rx = (3. + 4. + 4.) / 3.
        ry = (1. + 1. + 2.) / 3.
        r = array([rx, ry, 0.])
        M802_expected = cross(r, F802_expected)
        if 0:  # pragma: no cover
            F, M = sum_forces_moments(model,
                                      p0,
                                      loadcase_id,
                                      include_grav=False)
            F2, M2 = sum_forces_moments_elements(model,
                                                 p0,
                                                 loadcase_id,
                                                 eids,
                                                 nids,
                                                 include_grav=False)
            assert np.allclose(F, F2), 'F=%s F2=%s' % (F, F2)
            assert np.allclose(M, M2), 'M=%s M2=%s' % (M, M2)
            self.assertTrue(
                allclose(F802_expected,
                         F), 'loadcase_id=%s F_expected=%s F=%s' %
                (loadcase_id, F802_expected, F))
            self.assertTrue(
                allclose(M802_expected,
                         M), 'loadcase_id=%s M_expected=%s M=%s' %
                (loadcase_id, M802_expected, M))
        bdf_file = StringIO()
        model.write_bdf(bdf_file, close=False)
        bdf_file.seek(0)
        model.write_bdf(bdf_file, size=16)
Beispiel #4
0
    def test_cbeam_02(self):
        """CBEAM/PBEAML"""
        model = BDF(debug=False)
        model.add_grid(1, [0., 0., 0.])
        model.add_grid(2, [1., 0., 0.])
        model.add_grid(3, [0., 1., 0.])

        mid = 1
        E = 3.0e7
        G = None
        nu = 0.3
        model.add_mat1(mid, E, G, nu, rho=1.)

        #---------------------------------------------------------------
        eid = 1
        pid = 101
        nids = [1, 2]
        x = [0., 0., 1.]
        g0 = None
        cbeam1 = model.add_cbeam(eid,
                                 pid,
                                 nids,
                                 x,
                                 g0,
                                 offt='GGG',
                                 bit=None,
                                 pa=0,
                                 pb=0,
                                 wa=None,
                                 wb=None,
                                 sa=0,
                                 sb=0,
                                 comment='CBEAM')
        beam_type = 'BOX'
        xxb = [0.]
        dims = [[1., 2., 0.1, 0.1], [1., 2., 0.1, 0.1]]
        pbeaml = model.add_pbeaml(pid,
                                  mid,
                                  beam_type,
                                  xxb,
                                  dims,
                                  nsm=None,
                                  so=None,
                                  comment='PBEAML')
        #---------------------------------------------------------------
        eid = 2
        pid = 102
        x = None
        g0 = 3
        cbeam = model.add_cbeam(eid,
                                pid,
                                nids,
                                x,
                                g0,
                                offt='GGG',
                                bit=None,
                                pa=0,
                                pb=0,
                                wa=None,
                                wb=None,
                                sa=0,
                                sb=0,
                                comment='CBEAM')
        beam_type = 'BOX'
        xxb = [0.]
        dims = [[1., 2., 0.1, 0.1]]
        pbeaml = model.add_pbeaml(pid,
                                  mid,
                                  beam_type,
                                  xxb,
                                  dims,
                                  nsm=None,
                                  so=None,
                                  comment='PBEAML')
        #---------------------------------------------------------------
        eid = 3
        pid = 103
        x = [0., 0., 1.]
        g0 = None
        cbeam = model.add_cbeam(eid,
                                pid,
                                nids,
                                x,
                                g0,
                                offt='GGG',
                                bit=None,
                                pa=0,
                                pb=0,
                                wa=None,
                                wb=None,
                                sa=0,
                                sb=0,
                                comment='CBEAM')
        beam_type = 'BAR'
        xxb = [0.]
        dims = [[2., 3.]]
        pbeaml = model.add_pbeaml(pid,
                                  mid,
                                  beam_type,
                                  xxb,
                                  dims,
                                  nsm=None,
                                  so=None,
                                  comment='PBEAML')
        #---------------------------------------------------------------
        eid = 4
        pid = 104
        x = [0., 0., 1.]
        g0 = None
        cbeam = model.add_cbeam(eid,
                                pid,
                                nids,
                                x,
                                g0,
                                offt='GGG',
                                bit=None,
                                pa=0,
                                pb=0,
                                wa=None,
                                wb=None,
                                sa=0,
                                sb=0,
                                comment='CBEAM')
        beam_type = 'ROD'
        xxb = [0.]
        dims = [[2.]]
        pbeaml = model.add_pbeaml(pid,
                                  mid,
                                  beam_type,
                                  xxb,
                                  dims,
                                  nsm=None,
                                  so=None,
                                  comment='PBEAML')
        #---------------------------------------------------------------
        eid = 5
        pid = 105
        x = [0., 0., 1.]
        g0 = None
        cbeam = model.add_cbeam(eid,
                                pid,
                                nids,
                                x,
                                g0,
                                offt='GGG',
                                bit=None,
                                pa=0,
                                pb=0,
                                wa=None,
                                wb=None,
                                sa=0,
                                sb=0,
                                comment='CBEAM')
        beam_type = 'TUBE'
        xxb = [0.]
        dims = [[2., 1.]]
        pbeaml = model.add_pbeaml(pid,
                                  mid,
                                  beam_type,
                                  xxb,
                                  dims,
                                  nsm=None,
                                  so=None,
                                  comment='PBEAML')
        #---------------------------------------------------------------
        eid = 6
        pid = 106
        x = [0., 0., 1.]
        g0 = None
        cbeam = model.add_cbeam(eid,
                                pid,
                                nids,
                                x,
                                g0,
                                offt='GGG',
                                bit=None,
                                pa=0,
                                pb=0,
                                wa=None,
                                wb=None,
                                sa=0,
                                sb=0,
                                comment='CBEAM')
        beam_type = 'L'
        xxb = [0.]
        dims = [[2., 2., 0.1, 0.1]]
        pbeaml = model.add_pbeaml(pid,
                                  mid,
                                  beam_type,
                                  xxb,
                                  dims,
                                  nsm=None,
                                  so=None,
                                  comment='PBEAML')
        #---------------------------------------------------------------
        eid = 7
        pid = 107
        x = [0., 0., 1.]
        g0 = None
        cbeam = model.add_cbeam(eid,
                                pid,
                                nids,
                                x,
                                g0,
                                offt='GGG',
                                bit=None,
                                pa=0,
                                pb=0,
                                wa=None,
                                wb=None,
                                sa=0,
                                sb=0,
                                comment='CBEAM')
        beam_type = 'T'
        xxb = [0.]
        dims = [[1., 2., 0.1, 0.2]]
        pbeaml = model.add_pbeaml(pid,
                                  mid,
                                  beam_type,
                                  xxb,
                                  dims,
                                  nsm=None,
                                  so=None,
                                  comment='PBEAML')
        #---------------------------------------------------------------
        eid = 8
        pid = 108
        x = [0., 0., 1.]
        g0 = None
        cbeam = model.add_cbeam(eid,
                                pid,
                                nids,
                                x,
                                g0,
                                offt='GGG',
                                bit=None,
                                pa=0,
                                pb=0,
                                wa=None,
                                wb=None,
                                sa=0,
                                sb=0,
                                comment='CBEAM')
        beam_type = 'T1'
        xxb = [0.]
        dims = [[1., 2., 0.2, 0.1]]
        pbeaml = model.add_pbeaml(pid,
                                  mid,
                                  beam_type,
                                  xxb,
                                  dims,
                                  nsm=None,
                                  so=None,
                                  comment='PBEAML')
        #---------------------------------------------------------------
        eid = 9
        pid = 109
        x = [0., 0., 1.]
        g0 = None
        cbeam = model.add_cbeam(eid,
                                pid,
                                nids,
                                x,
                                g0,
                                offt='GGG',
                                bit=None,
                                pa=0,
                                pb=0,
                                wa=None,
                                wb=None,
                                sa=0,
                                sb=0,
                                comment='CBEAM')
        beam_type = 'T2'
        xxb = [0.]
        dims = [[1., 2., 0.2, 0.1]]
        pbeaml = model.add_pbeaml(pid,
                                  mid,
                                  beam_type,
                                  xxb,
                                  dims,
                                  nsm=None,
                                  so=None,
                                  comment='PBEAML')
        #---------------------------------------------------------------
        eid = 10
        pid = 110
        x = [0., 0., 1.]
        g0 = None
        cbeam = model.add_cbeam(eid,
                                pid,
                                nids,
                                x,
                                g0,
                                offt='GGG',
                                bit=None,
                                pa=42,
                                pb=5,
                                wa=None,
                                wb=None,
                                sa=0,
                                sb=0,
                                comment='CBEAM')

        #pid : int
        #property id
        #mid : int
        #material id
        #xxb : List[float]
        #The percentage locations along the beam [0., ..., 1.]
        #so : List[str]
        #YES, YESA, NO
        #area : List[float]
        #area
        #i1, i2, i12, j : List[float]
        #moments of inertia
        #nsm : List[float]
        #nonstructural mass per unit length
        #c1/c2, d1/d2, e1/e2, f1/f2 : List[float]
        #the y/z locations of the stress recovery points
        #c1 - point C.y
        #c2 - point C.z
        xxb = [0.]
        so = [2.]
        area = [3.]
        i1 = [4.]
        i2 = [5.]
        i12 = [0.6]
        j = [7.]
        nsm = [0.08]

        c1 = [0.]
        c2 = [0.]
        d1 = [0.]
        d2 = [0.]
        e1 = [0.]
        e2 = [0.]
        f1 = [0.]
        f2 = [0.]
        pbeam = model.add_pbeam(pid,
                                mid,
                                xxb,
                                so,
                                area,
                                i1,
                                i2,
                                i12,
                                j,
                                nsm,
                                c1,
                                c2,
                                d1,
                                d2,
                                e1,
                                e2,
                                f1,
                                f2,
                                k1=1.,
                                k2=1.,
                                s1=0.,
                                s2=0.,
                                nsia=0.,
                                nsib=None,
                                cwa=0.,
                                cwb=None,
                                m1a=0.,
                                m2a=None,
                                m1b=0.,
                                m2b=None,
                                n1a=0.,
                                n2a=None,
                                n1b=0.,
                                n2b=None,
                                comment='pbeam')
        #print(pbeam)
        #---------------------------------------------------------------

        model.validate()
        model.pop_parse_errors()
        model.pop_xref_errors()
        pbeaml.raw_fields()
        pbeaml.write_card_16()
        model._verify_bdf(xref=False)

        #----------------
        model.cross_reference()

        model._verify_bdf(xref=True)
        model.mass_properties()
        pids_to_area = model.get_area_breakdown(property_ids=None,
                                                sum_bar_area=False)
        for pid, area in sorted(pids_to_area.items()):
            assert area > 0., 'pid=%s area=%s' % (pid, area)

        pids_to_mass, _mass_type_to_mass = model.get_mass_breakdown(
            property_ids=None)
        for pid, mass in sorted(pids_to_mass.items()):
            assert mass > 0., 'pid=%s mass=%s' % (pid, mass)

        #--------------------
        model.uncross_reference()
        model._verify_bdf(xref=False)
        model.safe_cross_reference()
        model.uncross_reference()
    def test_dvprel1(self):
        """tests a DESVAR, DVPREL1, DRESP1, DCONSTR"""
        model = BDF(debug=False)
        oid = 10
        desvar_id = 12
        desvar_ids = 12
        Type = 'PSHELL'
        pid = 20
        eid = 25
        mid = 30
        pname_fid = 'T'

        coeffs = 1.
        E = 30.e7
        G = None
        nu = 0.3
        nids = [1, 2, 3]

        label = 'T_SHELL'
        xinit = 0.1
        xlb = 0.01
        xub = 2.0

        model.add_grid(1, xyz=[0., 0., 0.])
        model.add_grid(2, xyz=[1., 0., 0.])
        model.add_grid(3, xyz=[1., 1., 0.])
        ctria3 = model.add_ctria3(eid, pid, nids, comment='ctria3')
        pshell = model.add_pshell(pid, mid1=30, t=0.1, comment='pshell')
        mat1 = model.add_mat1(mid, E, G, nu, rho=0.1, comment='mat1')
        desvar = model.add_desvar(desvar_id,
                                  label,
                                  xinit,
                                  xlb,
                                  xub,
                                  comment='desvar')
        dvprel1 = model.add_dvprel1(oid,
                                    Type,
                                    pid,
                                    pname_fid,
                                    desvar_ids,
                                    coeffs,
                                    p_min=None,
                                    p_max=1e20,
                                    c0=0.0,
                                    validate=True,
                                    comment='dvprel')

        deqation = 100
        dvids = desvar_id
        labels = None
        dvprel2 = model.add_dvprel2(oid + 1,
                                    Type,
                                    pid,
                                    pname_fid,
                                    deqation,
                                    dvids,
                                    labels,
                                    p_min=None,
                                    p_max=1e20,
                                    validate=True,
                                    comment='')
        equation_id = 100
        name = 'fstress'
        eqs = ['fstress(x) = x + 10.']
        deqatn = model.add_deqatn(name, equation_id, eqs, comment='deqatn')
        #print(deqatn.object_attributes())
        #print(deqatn.func_str)
        #print(deqatn)

        dresp_id = 42
        label = 'STRESS1'
        response_type = 'STRESS'
        property_type = 'PSHELL'
        region = None
        atta = 9
        attb = None
        atti = pid
        dresp1 = model.add_dresp1(dresp_id,
                                  label,
                                  response_type,
                                  property_type,
                                  region,
                                  atta,
                                  attb,
                                  atti,
                                  validate=True,
                                  comment='dresp1')
        dconstr = model.add_dconstr(oid,
                                    dresp_id,
                                    lid=-1.e20,
                                    uid=1.e20,
                                    lowfq=0.,
                                    highfq=1.e20,
                                    comment='dconstr')
        desvar.write_card(size=8)
        desvar.write_card(size=16)
        dvprel1.write_card(size=8)
        dvprel1.write_card(size=16)
        dconstr.write_card(size=8)
        dconstr.write_card(size=16)
        dresp1.write_card(size=8)
        dresp1.write_card(size=16)
        dresp1.write_card(size=16, is_double=True)

        model.validate()
        #model._verify_bdf(xref=False)
        model.cross_reference()

        desvar.write_card(size=8)
        desvar.write_card(size=16)
        desvar.raw_fields()
        dvprel1.write_card(size=8)
        dvprel1.write_card(size=16)
        dvprel1.raw_fields()
        dconstr.write_card(size=8)
        dconstr.write_card(size=16)
        dconstr.raw_fields()
        dresp1.write_card(size=8)
        dresp1.write_card(size=16)
        dresp1.raw_fields()

        stringio = StringIO()
        model.write_bdf(stringio, close=False)
        stringio.getvalue()
Beispiel #6
0
    def test_shells(self):
        """tests a CTRIA3/CQUAD4/PSHELL and CTRIA6/CQUAD8/CQUAD/PCOMP"""
        model = BDF(debug=False)
        model.add_grid(1, [0., 0., 0.])
        model.add_grid(2, [1., 0., 0.])
        model.add_grid(3, [1., 1., 0.])
        model.add_grid(4, [0., 1., 0.])

        model.add_grid(5, [.5, 0., 0.])
        model.add_grid(6, [1., 0.5, 0.])
        model.add_grid(7, [.5, 1., 0.])
        model.add_grid(8, [0., .5, 0.])

        model.add_grid(9, [.5, .5, 0.])

        E = 30.e7
        G = None
        nu = 0.3
        model.add_mat1(1, E, G, nu, rho=0.1)
        model.add_mat1(2, E, G, nu, rho=0.1)
        model.add_mat1(3, E, G, nu, rho=0.1)

        pid = 1
        nids = [1, 2, 3]
        model.add_ctria3(1, pid, nids)
        nids = [1, 2, 3, 4]
        model.add_cquad4(2, pid, nids)
        model.add_pshell(pid, mid1=2, t=0.1)

        pid = 2
        nids = [1, 2, 3, 5, 6, 9]
        ctria6 = model.add_ctria6(3, pid, nids, comment='ctria6')

        nids = [1, 2, 3, 4, 5, 6, 7, 8]
        cquad8 = model.add_cquad8(4, pid, nids, comment='cquad8')

        nids = [1, 2, 3, 4, 5, 6, 7, 8, 9]
        cquad = model.add_cquad(5, pid, nids, comment='cquad')

        mids = [1, 2, 3]
        thicknesses = [0.1, 0.2, 0.3]
        pcomp = model.add_pcomp(pid, mids, thicknesses)

        assert pcomp.Thickness() == sum(thicknesses), thicknesses

        pcomp.lam = 'SYM'
        assert pcomp.Thickness() == sum(thicknesses) * 2, thicknesses

        model.validate()

        ctria6.raw_fields()
        ctria6.write_card(size=8)

        cquad8.raw_fields()
        cquad8.write_card(size=8)

        cquad.raw_fields()
        cquad.write_card(size=8)

        pcomp.raw_fields()
        pcomp.write_card(size=8)
        pcomp.write_card(size=16)
        pcomp.write_card(size=16, is_double=True)

        model._verify_bdf(xref=False)

        params = [('T1', 1.0), ('THETA1', 2.0), ('Z0', 3.0), ('SB', 4.0),
                  ('TREF', 0.0), ('GE', 0.1)]
        make_dvprel_optimization(model, params, 'PCOMP', pid)
        #--------------------------------
        model.cross_reference()
        model._verify_bdf(xref=True)

        model.get_area_breakdown(property_ids=None, stop_if_no_area=True)
        model.get_mass_breakdown(property_ids=None,
                                 stop_if_no_mass=True,
                                 detailed=False)
        model.get_mass_breakdown(property_ids=None,
                                 stop_if_no_mass=True,
                                 detailed=True)
        model.get_volume_breakdown(property_ids=None, stop_if_no_volume=True)
        model.update_model_by_desvars(xref=True)

        ctria6.raw_fields()
        ctria6.write_card(size=8)

        cquad8.raw_fields()
        cquad8.write_card(size=8)

        cquad.raw_fields()
        cquad.write_card(size=8)

        pcomp.raw_fields()
        pcomp.write_card(size=8)
        pcomp.write_card(size=16)
        pcomp.write_card(size=16, is_double=True)
        model._verify_bdf(xref=False)
Beispiel #7
0
    def test_pbcomp(self):
        """tests a PBCOMP"""
        model = BDF(debug=False)
        pid = 100
        mid = 101
        y = [0., 1.]
        z = [0., 1.]
        c = [0., 1.]
        mids = [mid, mid]
        pbcomp = model.add_pbcomp(pid,
                                  mid,
                                  y,
                                  z,
                                  c,
                                  mids,
                                  area=0.0,
                                  i1=0.0,
                                  i2=0.0,
                                  i12=0.0,
                                  j=0.0,
                                  nsm=0.0,
                                  k1=1.0,
                                  k2=1.0,
                                  m1=0.0,
                                  m2=0.0,
                                  n1=0.0,
                                  n2=0.0,
                                  symopt=0,
                                  comment='pbcomp')
        pbcomp.validate()
        pbcomp.raw_fields()
        pbcomp.write_card()
        pbcomp.write_card(size=16)

        eid = 10
        nids = [1, 5]
        x = [0., 0., 1.]
        g0 = None
        cbeam = model.add_cbeam(eid,
                                pid,
                                nids,
                                x,
                                g0,
                                offt='GGG',
                                bit=None,
                                pa=0,
                                pb=0,
                                wa=None,
                                wb=None,
                                sa=0,
                                sb=0,
                                comment='')
        E = 3.0e7
        G = None
        nu = 0.3
        model.add_mat1(mid, E, G, nu)

        model.add_grid(1, [0., 0., 0.])
        model.add_grid(5, [1., 0., 0.])
        model.validate()
        model.pop_parse_errors()
        model.cross_reference()
        model.pop_xref_errors()
        save_load_deck(model)
Beispiel #8
0
    def test_dvprel1(self):
        """tests a DESVAR, DVPREL1, DVPREL2, DRESP1, DRESP2, DRESP3, DCONSTR, DSCREEN, DCONADD"""
        model = BDF(debug=False)
        dvprel1_id = 10
        desvar_id = 12
        desvar_ids = 12
        prop_type = 'PSHELL'
        pid = 20
        eid = 25
        mid = 30
        pname_fid = 'T'

        coeffs = 1.
        E = 30.e7
        G = None
        nu = 0.3
        nids = [1, 2, 3]

        label = 'T_SHELL'
        xinit = 0.1
        xlb = 0.01
        xub = 2.0
        p_max = 1e20

        model.add_grid(1, [0., 0., 0.])
        model.add_grid(2, [1., 0., 0.])
        model.add_grid(3, [1., 1., 0.])
        model.add_ctria3(eid, pid, nids, comment='ctria3')
        model.add_pshell(pid, mid1=30, t=0.1, comment='pshell')
        model.add_mat1(mid, E, G, nu, rho=0.1, comment='mat1')
        desvar = model.add_desvar(desvar_id, label, xinit, xlb, xub, comment='desvar')
        dvprel1 = model.add_dvprel1(dvprel1_id, prop_type, pid, pname_fid,
                                    desvar_ids, coeffs, p_min=None, p_max=p_max, c0=0.0,
                                    validate=True, comment='dvprel1')

        dvprel2_id = dvprel1_id + 1
        deqation = 100
        dvids = desvar_id
        labels = None
        dvprel2 = model.add_dvprel2(dvprel2_id, prop_type, pid, pname_fid, deqation,
                                    dvids, labels, p_min=None, p_max=p_max,
                                    validate=True, comment='dvprel2')

        equation_id = 100
        eqs = ['fstress(x) = x + 10.']
        model.add_deqatn(equation_id, eqs, comment='deqatn')
        #print(deqatn.object_attributes())
        #print(deqatn.func_str)
        #print(deqatn)

        dresp1_id = 42
        label = 'STRESS1'
        response_type = 'STRESS'
        property_type = 'PSHELL'
        region = None
        atta = 9
        attb = None
        atti = pid
        dresp1 = model.add_dresp1(dresp1_id, label, response_type,
                                  property_type, region,
                                  atta, attb, atti, validate=True, comment='dresp1')
        assert dresp1.rtype == dresp1.response_type
        assert dresp1.ptype == dresp1.property_type
        dresp1.rtype = response_type
        dresp1.ptype = property_type

        dconstr = model.add_dconstr(dresp1_id, dresp1_id, lid=-1.e20, uid=1.e20,
                                    lowfq=0., highfq=1.e20, comment='dconstr')

        params = {
            (0, 'DRESP1') : [42],
            (1, 'DESVAR') : [12],
            (3, 'DNODE') : [[100, 101], [1, 2]],
        }
        dresp2_id = 43
        dequation = equation_id
        label = 'dresp2'
        region = None
        dresp2 = model.add_dresp2(dresp2_id, label, dequation, region, params,
                                  method='MIN', c1=100., c2=0.005, c3=None,
                                  comment='dresp2')
        dresp2.raw_fields()

        dresp3_id = 44
        label = 'dresp3'
        group = 'cat'
        Type = 'dog'
        region = None
        params = {
            (0, 'DRESP1') : [42],
            (1, 'DESVAR') : [12],
            (2, 'DRESP2') : [dresp2_id],
            (2, 'DVPREL1') : [dvprel1_id],
            (3, 'DVPREL2') : [dvprel2_id],
            (3, 'DNODE') : [[100, 101], [1, 2]],
        }
        dresp3 = model.add_dresp3(dresp3_id, label, group, Type, region,
                                  params, comment='dresp3')
        dresp3.raw_fields()

        oid = 1001
        dconstr = model.add_dconstr(oid, dresp1_id, lid=-1.e20, uid=1.e20,
                                    lowfq=0., highfq=1.e20, comment='dconstr1')
        oid = 1002
        dconstr = model.add_dconstr(oid, dresp2_id, lid=-1.e20, uid=1.e20,
                                    lowfq=0., highfq=1.e20)
        oid = 1003
        dconstr = model.add_dconstr(oid, dresp3_id, lid=-1.e20, uid=1.e20,
                                    lowfq=0., highfq=1.e20)

        oid = 45
        dconstrs = [1001, 1002, 1003]
        dconadd = model.add_dconadd(oid, dconstrs, comment='dconadd')

        dscreen = model.add_dscreen('dunno', comment='dscreen')
        dscreen.raw_fields()

        #print(dresp3)
        grid = model.add_grid(100, [0., 0., 0.])
        model.add_grid(101, [0., 0., 0.])
        model.pop_parse_errors()

        desvar.write_card(size=8)
        desvar.write_card(size=16)
        dvprel1.write_card(size=8)
        dvprel1.write_card(size=16)
        dconstr.write_card(size=8)
        dconstr.write_card(size=16)
        dresp1.write_card(size=8)
        dresp1.write_card(size=16)
        dresp1.write_card(size=16, is_double=True)
        dresp2.write_card(size=8)
        dresp2.write_card(size=16)
        dresp2.write_card(size=16, is_double=True)
        dresp3.write_card(size=8)
        dresp3.write_card(size=16)
        dresp3.write_card(size=16, is_double=True)
        dvprel2.write_card(size=8)
        dvprel2.write_card(size=16)
        dvprel2.write_card(size=16, is_double=True)
        dconadd.write_card(size=8)
        dconadd.write_card(size=16)
        dconadd.write_card(size=16, is_double=True)
        dscreen.write_card(size=8)
        dscreen.write_card(size=16)
        dscreen.write_card(size=16, is_double=True)

        model.validate()
        model._verify_bdf(xref=False)
        model.cross_reference()
        model.pop_xref_errors()

        desvar.write_card(size=8)
        desvar.write_card(size=16)
        desvar.raw_fields()
        dvprel1.write_card(size=8)
        dvprel1.write_card(size=16)
        dvprel1.raw_fields()
        dconstr.write_card(size=8)
        dconstr.write_card(size=16)
        dconstr.raw_fields()
        dresp1.write_card(size=8)
        dresp1.write_card(size=16)
        dresp1.raw_fields()
        dresp2.write_card(size=8)
        dresp2.write_card(size=16)
        dresp2.write_card(size=16, is_double=True)
        dresp3.write_card(size=8)
        dresp3.write_card(size=16)
        dresp3.write_card(size=16, is_double=True)
        dvprel2.write_card(size=8)
        dvprel2.write_card(size=16)
        dvprel2.write_card(size=16, is_double=True)
        dconadd.write_card(size=8)
        dconadd.write_card(size=16)
        dconadd.write_card(size=16, is_double=True)

        grid.nid = 200
        assert '200' in str(dresp3), dresp3

        save_load_deck(model, run_convert=False)
Beispiel #9
0
    def test_opt_2(self):
        """tests updating model based on DESVARs"""
        model = BDF(debug=False)
        model.add_grid(1, [0., 0., 0.])
        model.add_grid(2, [1., 0., 0.])
        model.add_grid(3, [1., 1., 0.])
        model.add_grid(4, [0., 1., 0.])
        eid = 1
        pid_pshell = 1
        nids = [1, 2, 3, 4]
        model.add_cquad4(eid, pid_pshell, nids)

        delta = 0.1
        #---------------------------------------------------
        model.add_pshell(pid_pshell, mid1=1, t=0.1)
        c2 = 0.5
        t2 = 1.0
        c0p = 0.1
        #      0.1 + 0.5*1.0 = 0.6
        tnew = c0p + c2 * (t2 + delta)
        model.add_desvar(2, 'T2', t2)
        desvars = [2] # desvar
        coeffs = [c2]
        prop_type = 'PSHELL'
        pname_fid = 'T'
        model.add_dvprel1(1, prop_type, pid_pshell, pname_fid, desvars, coeffs,
                          p_min=None, p_max=1e20,
                          c0=c0p, validate=True,
                          comment='')
        #---------------------------------------------------

        mid = 1
        E = 1.0
        G = None
        nu = 0.3
        model.add_mat1(mid, E, G, nu)

        c1 = 0.5
        e1 = 110.
        c0m = 100.
        model.add_desvar(1, 'E1', e1)
        mat_type = 'MAT1'
        mp_name = 'E'
        coeffs = [c1]
        desvars = [1]
        # 100 + 0.5 * 110 = 100 + 55 = 155
        enew = c0m + c1 * (e1 + delta)
        model.add_dvmrel1(2, mat_type, mid, mp_name, desvars, coeffs,
                          mp_min=None, mp_max=1e20,
                          c0=c0m, validate=True,
                          comment='')
        #---------------------------------------------------

        eid_conm2 = 2
        nid = 1
        mass = 0.1
        model.add_conm2(eid_conm2, nid, mass, cid=0, X=None, I=None, comment='')
        c3 = 1.0
        mass3 = 12.
        model.add_desvar(3, 'MASS', mass3)
        element_type = 'CONM2'
        cp_name = 'M'
        coeffs = [c3]
        desvars = [3]
        mass0 = 0.
        # ???
        mass_new = mass0 + c3 * (mass3 + delta)
        model.add_dvcrel1(3, element_type, eid_conm2, cp_name, desvars, coeffs, cp_min=None,
                          cp_max=1e20, c0=mass0,
                          validate=True, comment='')
        #---------------------------------------------------

        x14 = 37.
        model.add_desvar(4, 'X1', x14)
        element_type = 'CONM2'
        cp_name = 'X1'
        c4 = 1.
        x10 = 0.
        coeffs = [c4]
        desvars = [4]
        x1_new = x10 + c4 * (x14 + delta)
        model.add_dvcrel1(4, element_type, eid_conm2, cp_name, desvars, coeffs, cp_min=None,
                          cp_max=1e20, c0=x10,
                          validate=True, comment='')
        #---------------------------------------------------

        pid_pcomp = 2
        mids = [1]
        thicknesses = [1.]
        model.add_pcomp(pid_pcomp, mids, thicknesses, thetas=None, souts=None,
                        nsm=0., sb=0., ft=None,
                        tref=0., ge=0., lam=None,
                        z0=None, comment='')
        t5 = 5.
        model.add_desvar(5, 'T5', t5)
        prop_type = 'PCOMP'
        pname_fid = 'T1'
        desvars = [5] # desvar
        coeffs = [1.0]
        tpcomp_new = t5 + delta
        model.add_dvprel1(5, prop_type, pid_pcomp, pname_fid, desvars, coeffs,
                          p_min=None, p_max=1e20,
                          c0=0., validate=True,
                          comment='')
        #---------------------------------------------------

        model.validate()
        model.cross_reference()
        model.update_model_by_desvars()

        assert model.properties[pid_pshell].t == tnew, 't=%s tnew=%s' % (model.properties[pid_pshell].t, tnew)
        assert model.materials[mid].e == enew, 'E=%s enew=%s' % (model.materials[mid].e, enew)
        assert model.Mass(eid_conm2).mass == mass_new, 'mass=%s mass_new=%s' % (model.Mass(eid_conm2).mass, mass_new)
        assert model.Mass(eid_conm2).X[0] == x1_new, 'X1=%s x1_new=%s' % (model.Mass(eid_conm2).mass, x1_new)
        assert model.properties[pid_pcomp].thicknesses[0] == tpcomp_new, 't=%s tnew=%s' % (model.properties[pid_pcomp].thicknesses[0], tpcomp_new)
Beispiel #10
0
    def test_ptube_nsm(self):
        """tests a PTUBE for the NSM field"""
        model = BDF(debug=False)
        pid = 1
        mid = 1
        nsm = 1.
        OD1 = 2.0
        ptube = model.add_ptube(pid, mid, OD1, t=None, nsm=nsm, OD2=None,
                                comment='ptube')
        #print(ptube)

        E = 1.0
        G = None
        nu = 0.3
        rho = 0.0
        mat1 = model.add_mat1(mid, E, G, nu, rho=rho)
        #----------------
        card_lines = [
            'PTUBE          2       1      2.              1.',
        ]
        model.add_card(card_lines, 'PTUBE', comment='', is_list=False,
                       has_none=True)
        model.pop_parse_errors()
        ptube2 = model.properties[2]
        #print(ptube.get_stats())
        #------------------
        model.cross_reference()

        assert ptube.Nsm() == 1.0

        area = pi
        mpl = area * rho + nsm
        assert ptube.Area() == area, ptube.Area()

        # mass/L = area*rho + nsm
        assert ptube.MassPerLength() == 1.0, ptube.MassPerLength()

        rho = 10.0
        mat1.rho = rho
        mpl = area * rho + nsm
        assert ptube2.MassPerLength() == mpl, ptube2.MassPerLength()

        eid = 100
        nids = [10, 12]
        ctube = model.add_ctube(eid, pid, nids, comment='ctube')
        model.add_grid(10, [0., 0., 0.])
        model.add_grid(12, [2., 0., 0.])

        model.safe_cross_reference()
        model.uncross_reference()
        model.cross_reference()
        assert ctube.get_edge_ids() == [(10, 12)]
        mass, cg, inertia = mass_properties(
            model, element_ids=None, mass_ids=None,
            reference_point=None, sym_axis=None,
            scale=None, inertia_reference='cg')

        # L * (rho * a + nsm)
        A = pi * (OD1**2) / 4.
        mass_expected = 2.0 * (rho * A + nsm)
        assert np.allclose(mass, mass_expected), mass
        save_load_deck(model)
Beispiel #11
0
import unittest

import os
import pyNastran
from pyNastran.bdf.bdf import BDF

from numpy import array, array_equal, sqrt, sin, cos, radians

root_path = pyNastran.__path__[0]
#test_path = os.path.join(root_path, 'bdf', 'cards', 'test')

comment_bad = 'this is a bad comment'
comment_good = 'this is a good comment\n'
model = BDF(debug=None)


class TestAero(unittest.TestCase):
    """
    The Aero cards are:
     * AEFACT
     * AELINK
     * AELIST
     * AEPARM
     * AESTAT
     * AESURF / AESURFS
     * AERO / AEROS
     * CSSCHD
     * CAERO1 / CAERO2 / CAERO3 / CAERO4 / CAERO5
     * FLFACT
     * FLUTTER
     * GUST
Beispiel #12
0
    def get_mass(self, nid1, nid2, xyz1, xyz2, eid, pid, mid, A, J, c, nsm, E, G, nu, rho, L):
        """tests a CROD and a CONROD"""
        model = BDF(debug=False)
        lines = ['conrod,%i, %i, %i, %i, %f, %f, %f, %f' % (eid, nid1, nid2, mid, A, J, c, nsm)]
        card = model._process_card(lines)
        cardi = BDFCard(card)
        conrod = CONROD.add_card(cardi)
        model._add_element_object(conrod)
        card = model.elements[eid]
        node_ids = card.node_ids
        assert node_ids == [nid1, nid2], node_ids # probably wrong
        assert conrod.get_edge_ids() == [(nid1, nid2)]

        lines = ['crod,%i, %i, %i, %i' % (eid+1, pid, nid1, nid2)]
        card = model._process_card(lines)
        cardi = BDFCard(card)
        crod = CROD.add_card(cardi)
        model._add_element_object(crod)
        card = model.elements[eid+1]
        node_ids = card.node_ids
        assert node_ids == [nid1, nid2], node_ids # probably wrong
        assert crod.get_edge_ids() == [(nid1, nid2)]

        lines = ['ctube,%i, %i, %i, %i' % (eid+2, pid+1, nid1, nid2)]
        card = model._process_card(lines)
        cardi = BDFCard(card)
        ctube = CTUBE.add_card(cardi)
        model._add_element_object(ctube)
        card = model.elements[eid+2]
        node_ids = card.node_ids
        assert node_ids == [nid1, nid2], node_ids # probably wrong
        assert ctube.get_edge_ids() == [(nid1, nid2)]

        lines = ['prod,%i, %i, %f, %f, %f, %f' % (pid, mid, A, J, c, nsm)]
        card = model._process_card(lines)
        cardi = BDFCard(card)
        prod = PROD.add_card(cardi)
        model._add_property_object(prod)

        #self.pid = integer(card, 1, 'pid')
        #self.mid = integer(card, 2, 'mid')
        #self.OD1 = double(card, 3, 'OD1')
        #self.t = double_or_blank(card, 4, 't', self.OD1 / 2.)
        #self.nsm = double_or_blank(card, 5, 'nsm', 0.0)
        #self.OD2 = double_or_blank(card, 6, 'OD2', self.OD1)
        OD1 = sqrt(4*A/pi)
        t = 0.
        OD2 = OD1
        lines = ['ptube,%i, %i, %f, %f, %f, %f' % (pid+1, mid, OD1, t, nsm, OD2)]
        card = model._process_card(lines)
        cardi = BDFCard(card)
        ptube = PTUBE.add_card(cardi)
        model._add_property_object(ptube)

        lines = ['mat1,%i, %.2e, %.2e, %f, %f' % (mid, E, G, nu, rho)]
        card = model._process_card(lines)
        cardi = BDFCard(card)
        card = MAT1.add_card(cardi)
        model._add_structural_material_object(card)

        lines = ['grid,%i, %i, %f, %f, %f' % (nid1, 0, xyz1[0], xyz1[1], xyz1[2])]
        card = model._process_card(lines)
        cardi = BDFCard(card)
        card = GRID.add_card(cardi)
        model._add_node_object(card)

        lines = ['grid,%i, %i, %f, %f, %f' % (nid2, 0, xyz2[0], xyz2[1], xyz2[2])]
        card = model._process_card(lines)
        cardi = BDFCard(card)
        card = GRID.add_card(cardi)
        model._add_node_object(card)

        model.cross_reference()
        mass = L * (rho * A + nsm)

        # conrod
        self.assertEqual(conrod.eid, eid)
        self.assertEqual(conrod.Pid(), -10)
        self.assertEqual(conrod.Mid(), mid)
        self.assertEqual(conrod.Length(), L)
        self.assertEqual(conrod.Nsm(), nsm)
        self.assertEqual(conrod.Mass(), mass)
        self.assertEqual(conrod.E(), E)
        self.assertEqual(conrod.G(), G)
        self.assertEqual(conrod.Area(), A)
        self.assertEqual(conrod.J(), J)
        self.assertEqual(conrod.C(), c)
        self.assertEqual(conrod.Rho(), rho)

        # crod
        self.assertEqual(crod.eid, eid+1)
        self.assertEqual(crod.Pid(), pid)
        self.assertEqual(crod.Mid(), mid)
        self.assertEqual(crod.Length(), L)
        self.assertEqual(crod.Nsm(), nsm)
        self.assertEqual(crod.Mass(), mass)
        self.assertEqual(crod.E(), E)
        self.assertEqual(crod.G(), G)
        self.assertEqual(crod.Area(), A)
        self.assertEqual(crod.J(), J)
        self.assertEqual(crod.C(), c)
        self.assertEqual(crod.Rho(), rho)
        #self.assertEqual(crod.Nu(), nu)

        # prod
        self.assertEqual(prod.Pid(), pid)
        self.assertEqual(prod.Mid(), mid)
        self.assertEqual(prod.Nsm(), nsm)
        self.assertEqual(prod.E(), E)
        self.assertEqual(prod.G(), G)
        self.assertEqual(prod.Area(), A)
        self.assertEqual(prod.J(), J)
        self.assertEqual(prod.C(), c)
        self.assertEqual(prod.Rho(), rho)

        # ctube
        self.assertEqual(ctube.eid, eid+2)
        self.assertEqual(ctube.Pid(), pid+1)
        self.assertEqual(ctube.Mid(), mid)
        self.assertEqual(ctube.Length(), L)
        self.assertEqual(ctube.Nsm(), nsm)
        self.assertAlmostEqual(ctube.Mass(), mass, 5)
        self.assertEqual(ctube.E(), E)
        self.assertEqual(ctube.G(), G)
        self.assertAlmostEqual(ctube.Area(), A, 5)
        ctube.J()
        self.assertEqual(ctube.Rho(), rho)

        # ptube
        self.assertEqual(ptube.Pid(), pid+1)
        self.assertEqual(ptube.Mid(), mid)
        self.assertEqual(ptube.Nsm(), nsm)
        self.assertEqual(ptube.E(), E)
        self.assertEqual(ptube.G(), G)
        self.assertAlmostEqual(ptube.Area(), A, 5)
        ptube.J()
        self.assertEqual(ptube.Rho(), rho)
Beispiel #13
0
from io import StringIO
from math import pi, sqrt
import unittest

import numpy as np

from pyNastran.bdf.bdf import BDF, BDFCard
from pyNastran.bdf.bdf import CROD, CONROD, PROD, CTUBE, PTUBE, GRID, MAT1
from pyNastran.bdf.cards.test.test_shells import make_dvprel_optimization
from pyNastran.bdf.cards.test.utils import save_load_deck, mass_properties

#from pyNastran.bdf.field_writer_8 import print_card_8

bdf = BDF(debug=False)
class TestRods(unittest.TestCase):
    def test_crod_01(self):
        lines = ['CROD          10     100      10       2']
        card = bdf._process_card(lines)
        cardi = BDFCard(card)

        size = 8
        crod = CROD.add_card(cardi)
        crod.write_card(size, 'dummy')
        crod.raw_fields()
        self.assertEqual(crod.eid, 10)
        self.assertEqual(crod.Pid(), 100)
        node_ids = crod.node_ids
        assert node_ids == [10, 2], node_ids # probably wrong
        assert crod.get_edge_ids() == [(2, 10)]

    def test_prod_nsm(self):
Beispiel #14
0
def cart3d_to_nastran_model(cart3d_filename, log=None, debug=False):
    """
    Converts a Cart3D file to Nastran format and returns a BDF() object.

    Parameters
    ----------
    cart3d_filename : str
        path to the input Cart3D file
    log : log / None
        log : a logger object
        None : a log will be defined
    debug : bool
        True/False (used if log is not defined)

    Returns
    -------
    bdf_model : BDF
        BDF() model object
    """
    if isinstance(cart3d_filename, Cart3D):
        cart3d = cart3d_filename
    else:
        cart3d = read_cart3d(cart3d_filename,
                             log=log,
                             debug=debug,
                             result_names=None)
    nodes = cart3d.nodes
    elements = cart3d.elements + 1
    regions = cart3d.regions

    if regions.min() == 0:
        # bit of a hack to take an invalid cart3d model and make it
        # work in Nastran, which requires property_ids > 0
        regions += 1

    i = 0
    nid = 1
    cid = 0
    model = BDF(log=log, debug=debug)
    for node in nodes:
        card = ['GRID', nid, cid] + list(node)
        model.add_card(card, 'GRID', is_list=True)
        nid += 1

    eid = 1
    for (n1, n2, n3), pid in zip(elements, regions):
        card = ['CTRIA3', eid, pid, n1, n2, n3]
        model.add_card(card, 'CTRIA3', is_list=True)
        #print(model.elements[eid])
        eid += 1

    t = 0.1
    E = 1e7
    nu = 0.3
    for pid in unique(regions):
        mid = pid
        card = ['PSHELL', pid, mid, t]
        model.add_card(card, 'PSHELL', is_list=True)
        card = ['MAT1', mid, E, None, nu]
        model.add_card(card, 'MAT1', is_list=True)
    model.pop_parse_errors()
    return model
Beispiel #15
0
    def test_cquad4_01(self):
        model = BDF(debug=False)
        eid = 10
        pid = 20
        mid = 30
        n1 = 1
        n2 = 2
        n3 = 3
        n4 = 4
        n5 = 5
        n6 = 6
        #A = 2.
        t = rho = nsm = E = G = nu = 0.1
        mid2 = mid3 = mid4 = twelveIt3 = tst = z1 = z2 = None

        #mass = A * (t * rho + nsm)
        cards = [
            ['grid', n1, 0, 0., 0., 0.],
            ['grid', n2, 0, 2., 0., 0.],
            ['grid', n3, 0, 2., 1., 0.],
            ['grid', n4, 0, 0., 1., 0.],
            ['grid', n5, 0, 0., 0., 0.],
            ['grid', n6, 0, 2., 0., 0.],
            ['cquad4', eid, pid, n1, n2, n3, n4],
            ['cquad4', eid + 1, pid, n5, n6, n3, n4],
            ['pshell', pid, mid, t, mid2, twelveIt3, mid3, tst, nsm, z1, z2],
            ['mat1', mid, E, G, nu, rho],
        ]
        for fields in cards:
            model.add_card(fields, fields[0], is_list=True)

        # get node IDs without cross referencing
        eids = [10]
        nids = model.get_node_ids_with_elements(eids)
        assert nids == set([1, 2, 3, 4]), nids

        eids = [11]
        nids = model.get_node_ids_with_elements(eids)
        assert nids == set([3, 4, 5, 6]), nids

        eids = [10, 11]
        nids = model.get_node_ids_with_elements(eids)
        assert nids == set([1, 2, 3, 4, 5, 6]), nids

        params = [
            ('T', 1.0),
            (6, 2.0),  # 12I/T3
            (8, 3.0),  # 'TST'
        ]
        make_dvprel_optimization(model, params, 'PSHELL', pid)

        # get node IDs with cross referencing
        model.cross_reference()
        model.update_model_by_desvars(xref=True)

        eids = [10]
        nids = model.get_node_ids_with_elements(eids)
        assert nids == set([1, 2, 3, 4]), nids

        eids = [11]
        nids = model.get_node_ids_with_elements(eids)
        assert nids == set([3, 4, 5, 6]), nids

        eids = [10, 11]
        nids = model.get_node_ids_with_elements(eids)
        assert nids == set([1, 2, 3, 4, 5, 6]), nids

        save_load_deck(model)
Beispiel #16
0
    def test_dvmrel1(self):
        """tests a DVMREL1"""
        model = BDF(debug=False)

        model.add_desvar(11, 'X11', 1.0)
        oid = 10
        mid1 = 4
        mp_min = 1e6
        mp_max = 1e7
        dvids = 11
        coeffs = 1.0
        dvmrel1_1 = model.add_dvmrel1(oid, 'MAT1', mid1, 'E', dvids, coeffs,
                                      mp_min=mp_min, mp_max=mp_max, c0=0., validate=True,
                                      comment='dmvrel')

        oid = 11
        mid8 = 8
        dvmrel1_8 = model.add_dvmrel1(oid, 'MAT8', mid8, 'NU12', dvids, coeffs,
                                      mp_min=0.25, mp_max=0.3, c0=0., validate=True,
                                      comment='dmvrel')
        oid = 12
        mid10 = 10
        dvmrel1_10 = model.add_dvmrel1(oid, 'MAT10', mid10, 'RHO', dvids, coeffs,
                                       mp_min=0.1, mp_max=0.2, c0=0., validate=True,
                                       comment='dmvrel')

        oid = 21
        deqation = 42
        mp_name = 'E'
        mat_type = 'MAT1'
        labels = []
        dvmrel2_1 = model.add_dvmrel2(oid, mat_type, mid1, mp_name, deqation,
                                      dvids, labels, mp_min=None, mp_max=1e20,
                                      validate=True,
                                      comment='dvmrel')
        E = 30.e7
        G = None
        nu = 0.3
        #nids = [1, 2, 3]
        model.add_mat1(mid1, E, G, nu, rho=0.1, comment='mat1')

        e11 = 3e7
        e22 = 0.2 * e11
        nu12 = 0.3
        mat8 = model.add_mat8(mid8, e11, e22, nu12, comment='mat8')
        #bulk = c ** 2. * rho
        bulk = None
        rho = 0.1
        c = 4000.
        mat10 = model.add_mat10(mid10, bulk, rho, c, ge=0.0, comment='mat10')

        equation_id = 42
        eqs = ['fstress(x) = x + 10.']
        model.add_deqatn(equation_id, eqs, comment='deqatn')


        dvmrel1_1.raw_fields()
        dvmrel1_1.write_card(size=8)
        dvmrel1_1.write_card(size=16)

        dvmrel1_8.raw_fields()
        dvmrel1_8.write_card(size=8)
        dvmrel1_8.write_card(size=16)

        dvmrel1_10.raw_fields()
        dvmrel1_10.write_card(size=8)
        dvmrel1_10.write_card(size=16)

        dvmrel2_1.raw_fields()
        dvmrel2_1.write_card(size=8)
        dvmrel2_1.write_card(size=16)

        mat8.raw_fields()
        mat8.write_card(size=8)
        mat8.write_card(size=16)

        mat10.raw_fields()
        mat10.write_card(size=8)
        mat10.write_card(size=16)

        model.validate()
        model.cross_reference()

        dvmrel1_1.raw_fields()
        dvmrel1_8.raw_fields()
        dvmrel1_10.raw_fields()
        dvmrel2_1.raw_fields()
        mat8.raw_fields()
        mat10.raw_fields()
        save_load_deck(model, run_convert=False)
Beispiel #17
0
    def test_cshear(self):
        """tests a PSHEAR/CSHEAR"""
        model = BDF(debug=False)
        model.add_grid(1, [0., 0., 0.])
        model.add_grid(2, [1., 0., 0.])
        model.add_grid(3, [1., 1., 0.])
        model.add_grid(4, [0., 1., 0.])

        eid = 10
        pid = 20
        mid = 30
        t = 0.1
        nids = [1, 2, 3, 4]

        cshear = model.add_cshear(eid, pid, nids, comment='cshear')
        pshear = model.add_pshear(pid,
                                  mid,
                                  t,
                                  nsm=0.,
                                  f1=0.,
                                  f2=0.,
                                  comment='')

        dvids = [1]
        coeffs = 1.0
        model.add_dvprel1(1,
                          'PSHEAR',
                          pid,
                          'T',
                          dvids,
                          coeffs,
                          p_min=None,
                          p_max=1e20,
                          c0=0.0,
                          validate=True,
                          comment='')
        model.add_desvar(1, 'T', 10.0)

        E = 30.e7
        G = None
        nu = 0.3
        mat1 = model.add_mat1(mid, E, G, nu, rho=0.1, comment='mat1')
        model.pop_parse_errors()
        model.validate()

        cshear.raw_fields()
        cshear.write_card(size=8)

        pshear.raw_fields()
        pshear.write_card(size=8)
        pshear.write_card(size=16)
        pshear.write_card(size=16, is_double=True)

        model.validate()
        model._verify_bdf(xref=False)
        model.cross_reference()
        model._verify_bdf(xref=True)
        model.mass_properties()

        cshear.write_card(size=8)
        pshear.write_card(size=8)
        model.update_model_by_desvars()
        save_load_deck(model)
Beispiel #18
0
    def test_dvcrel1(self):
        """tests a DVCREL1, DVCREL2, DVGRID"""
        model = BDF(debug=False)
        oid = 10
        conm2_eid = 100
        cp_min = 0.01
        cp_max = 1.
        desvar_id = 11
        desvar_ids = 11
        coeffs = 1.0
        dvcrel1 = model.add_dvcrel1(oid, 'CONM2', conm2_eid, 'X2', desvar_ids, coeffs,
                                    cp_min, cp_max, c0=0., validate=True, comment='dvcrel')
        dvcrel1.Type = 'CONM2'
        assert dvcrel1.Type == dvcrel1.element_type
        #dvcrel1.pMax = p_max
        #dvcrel1.pMin = None

        label = 'X2_MASS'
        xinit = 0.1
        xlb = 0.01
        xub = 1.0
        desvar = model.add_desvar(desvar_id, label, xinit, xlb, xub, comment='desvar')

        mass = 1.
        nid1 = 100
        nid2 = 101
        unused_conm2 = model.add_conm2(conm2_eid, nid1, mass, cid=0, X=None, I=None,
                                comment='conm2')
        model.add_grid(100, [1., 2., 3.])
        model.add_grid(101, [2., 2., 4.])

        eid = 101
        pid = 102
        x = [1., 0., 0.]
        g0 = None
        cbar = model.add_cbar(eid, pid, [nid1, nid2], x, g0, offt='GGG', pa=0, pb=0,
                              wa=None, wb=None, comment='cbar')

        oid = 11
        equation_id = 100
        dvcrel2 = model.add_dvcrel2(oid, 'CBAR', eid, 'X3', equation_id, desvar_ids, labels=None,
                                    cp_min=2., cp_max=4.,
                                    validate=True, comment='dvcrel2')
        dvcrel2.Type = 'CBAR'
        assert dvcrel2.Type == dvcrel2.element_type

        mid = 1000
        dim = [1., 2., 0.1, 0.2]
        model.add_pbarl(pid, mid, 'T', dim, group='MSCBML0', nsm=0.1,
                        comment='pbarl')
        E = 30.e7
        G = None
        nu = 0.3
        model.add_mat1(mid, E, G, nu, rho=0.1, comment='mat1')

        eqs = ['fx2(x) = x + 10.']
        deqatn = model.add_deqatn(equation_id, eqs, comment='deqatn')

        nid = 100
        dvid = 10000
        dxyz = [1., 2., 3.]
        dvgrid1 = model.add_dvgrid(dvid, nid, dxyz, cid=0, coeff=1.0,
                                   comment='dvgrid')

        nid = 101
        dvid = 10001
        dxyz = np.array([1., 2., 3.])
        unused_dvgrid2 = model.add_dvgrid(dvid, nid, dxyz, cid=0, coeff=1.0,
                                          comment='dvgrid')

        model.pop_parse_errors()

        dvcrel1.raw_fields()
        dvcrel1.write_card(size=16)
        dvcrel2.raw_fields()
        dvcrel2.write_card(size=16)
        dvgrid1.raw_fields()
        dvgrid1.write_card(size=16)

        dvcrel1.comment = ''
        dvcrel2.comment = ''
        desvar.comment = ''
        dvgrid1.comment = ''
        dvcrel1_msg = dvcrel1.write_card(size=8)
        dvcrel2_msg = dvcrel2.write_card(size=8)
        desvar_msg = desvar.write_card(size=8)
        dvgrid_msg = dvgrid1.write_card(size=8)

        model.validate()
        model.cross_reference()
        model.pop_xref_errors()

        dvcrel1.raw_fields()
        dvcrel1.write_card(size=16)
        dvcrel1.write_card(size=8)

        dvcrel2.raw_fields()
        dvcrel2.write_card(size=16)
        dvcrel2.write_card(size=8)

        dvgrid1.raw_fields()
        dvgrid1.write_card(size=16)
        dvgrid1.write_card(size=8)

        deqatn.write_card()
        assert cbar.Mass() > 0, cbar.Mass()
        model.uncross_reference()

        #-------------------------------------------
        dvcrel1_lines = dvcrel1_msg.split('\n')
        dvcrel2_lines = dvcrel2_msg.split('\n')
        desvar_lines = desvar_msg.split('\n')
        dvgrid_lines = dvgrid_msg.split('\n')
        model2 = BDF(debug=True)

        model2.add_card(dvcrel1_lines, 'DVCREL1', is_list=False)
        model2.add_card(dvcrel2_lines, 'DVCREL2', is_list=False)
        model2.add_card(desvar_lines, 'DESVAR', is_list=False)
        model2.add_card(dvgrid_lines, 'DVGRID', is_list=False)
Beispiel #19
0
    def test_trax(self):
        """tests a CTRAX3/CTRAX6/???"""
        model = BDF(debug=False)
        model.add_grid(1, [0., 0., 0.])
        model.add_grid(2, [1., 0., 0.])
        model.add_grid(3, [1., 1., 0.])
        model.add_grid(4, [0., 1., 0.])

        model.add_grid(5, [.5, 0., 0.])
        model.add_grid(6, [1., 0.5, 0.])
        model.add_grid(7, [.5, 1., 0.])
        model.add_grid(8, [0., .5, 0.])

        model.add_grid(9, [.5, .5, 0.])

        mid1 = 1
        E = 30.e7
        G = None
        nu = 0.3
        model.add_mat1(mid1, E, G, nu, rho=0.1)
        #model.add_mat1(2, E, G, nu, rho=0.1)
        #model.add_mat1(3, E, G, nu, rho=0.1)

        pid = 1
        nids = [1, 2, 3]
        ctrax3 = model.add_ctrax3(1, pid, nids, theta=0., comment='ctrax3')
        #model.add_pshell(pid, mid1=2, t=0.1)

        psolid = model.add_psolid(pid,
                                  mid1,
                                  cordm=0,
                                  integ=None,
                                  stress=None,
                                  isop=None,
                                  fctn='SMECH',
                                  comment='psolid')

        pid = 2
        nids = [1, 2, 3, 5, 6, 9]
        ctrax6 = model.add_ctrax6(2, pid, nids, theta=0., comment='ctrax6')

        plsolid = model.add_plsolid(pid,
                                    mid1,
                                    stress_strain='GRID',
                                    ge=0.,
                                    comment='plsolid')
        mathp = model.add_mathp(mid1)
        #assert pcomp.Thickness() == sum(thicknesses), thicknesses

        #pcomp.lam = 'SYM'
        #assert pcomp.Thickness() == sum(thicknesses)*2, thicknesses

        model.validate()

        ctrax6.raw_fields()
        ctrax6.write_card(size=8)

        psolid.raw_fields()
        psolid.write_card(size=8)
        #psolid.write_card(size=16)
        #psolid.write_card(size=16, is_double=True)

        plsolid.raw_fields()
        plsolid.write_card(size=8)
        #plsolid.write_card(size=16)
        #plsolid.write_card(size=16, is_double=True)

        model._verify_bdf(xref=False)

        #--------------------------------
        model.cross_reference()
        model._verify_bdf(xref=True)

        ctrax3.raw_fields()
        ctrax3.write_card(size=8)

        ctrax6.raw_fields()
        ctrax6.write_card(size=8)

        #pcomp.raw_fields()
        #pcomp.write_card(size=8)
        #pcomp.write_card(size=16)
        #pcomp.write_card(size=16, is_double=True)
        save_load_deck(model, run_convert=False)
Beispiel #20
0
    def test_cbar_dvprel(self):
        """tests CBAR and DVPREL1"""
        log = get_logger(level='warning')
        model = BDF(log=log)
        model.add_grid(1, [0., 0., 0.])
        model.add_grid(2, [1., 0., 0.])
        model.add_grid(3, [0., 0., 1.])

        mid = 10
        E = 3.0e7
        G = None
        nu = 0.3
        model.add_mat1(mid, E, G, nu)
        #---------------------------------------------
        eid = 2
        pid = 2
        nids = [1, 2]
        x = None
        g0 = 3
        wa = [0., 0., 0.1]
        wb = [0., 0., 0.1]
        model.add_cbar(eid, pid, nids, x, g0, offt='GGG', pa=0, pb=0, wa=wa, wb=wb, comment='')
        model.add_cbar(eid+1, pid+1, nids, x, g0, offt='GGG', pa=0, pb=0, wa=wa, wb=wb, comment='')

        model.add_cbeam(eid+2, pid+2, nids, x, g0, offt='GGG', bit=None, pa=0, pb=0,
                        wa=wa, wb=wb, sa=0, sb=0, comment='')
        model.add_cbeam(eid+3, pid+3, nids, x, g0, offt='GGG', bit=None, pa=0, pb=0,
                        wa=wa, wb=wb, sa=0, sb=0, comment='')

        model.add_pbar(pid, mid, A=0., i1=0., i2=0., i12=0., j=0., nsm=0.,
                       c1=0., c2=0., d1=0., d2=0., e1=0., e2=0., f1=0., f2=0.,
                       k1=1.e8, k2=1.e8, comment='')
        Type = 'BAR'
        dim = [0.1, 0.2]
        model.add_pbarl(pid+1, mid, Type, dim, group='MSCBML0', nsm=0., comment='')

        #---------------------
        xxb = [0.]
        so = ['YES']
        area = [1.0]
        i1 = [1.]
        i2 = [2.]
        i12 = [0.4]
        j = [0.3]
        nsm = [0.]
        model.add_pbeam(pid+2, mid, xxb, so, area, i1, i2, i12, j, nsm,
                        c1=None, c2=None, d1=None, d2=None, e1=None, e2=None, f1=None, f2=None,
                        k1=1., k2=1., s1=0., s2=0.,
                        nsia=0., nsib=None, cwa=0., cwb=None,
                        m1a=0., m2a=0., m1b=None, m2b=None,
                        n1a=0., n2a=0., n1b=None, n2b=None,
                        comment='')
        beam_type = 'BAR'
        dims = [dim]
        model.add_pbeaml(pid+3, mid, beam_type, xxb, dims, so=None, nsm=None,
                         group='MSCBML0', comment='')

        dvprels = [
            #oid, pid, prop_type, pname_fid
            (1, pid, 'PBAR', 'A'),
            (2, pid, 'PBAR', 'J'),
            (3, pid, 'PBAR', 'I1'),
            (4, pid, 'PBAR', 'I2'),
            (5, pid, 'PBAR', 'I12'),
            (6, pid+1, 'PBARL', 'DIM1'),
            (7, pid+1, 'PBARL', 'DIM2'),
            #-----------
            (8, pid+2, 'PBEAM', 'A'),
            (9, pid+2, 'PBEAM', 'J'),
            (10, pid+2, 'PBEAM', 'I1'),
            (11, pid+2, 'PBEAM', 'I2'),
            (12, pid+2, 'PBEAM', 'I12'),
            (13, pid+2, 'PBEAM', 'J'),
            (14, pid+3, 'PBEAML', 'DIM1'),
            (15, pid+3, 'PBEAML', 'DIM2'),
        ]
        coeffs = [1.0]
        xinit = 1.0
        for dvprel_data in dvprels:
            oid, pid, prop_type, pname_fid = dvprel_data
            dvids = [oid]
            desvar_id = oid

            dim_label = pname_fid
            prop_label = prop_type
            if pname_fid.startswith('DIM'):
                dim_label = 'D%s' % pname_fid[-1]
            if prop_type == 'PBEAML':
                prop_label = 'PBML'
            elif prop_type == 'PBEAM':
                prop_label = 'PBM'
            label = '%s%s%s' % (prop_label, dim_label, pid)

            model.add_desvar(desvar_id, label, xinit,
                             xlb=-1e20, xub=1e20, delx=None, ddval=None, comment='')
            model.add_dvprel1(oid, prop_type, pid, pname_fid, dvids, coeffs,
                              p_min=None, p_max=1e20, c0=0.0, validate=True, comment='')

        model.cross_reference()
        save_load_deck(model, xref='standard', punch=True)
Beispiel #21
0
    def test_pbeam_10(self):
        """
        The number of continuation lines on a PBEAM for a NO/YESA is 0.
        The number of continuation lines on a PBEAM for a YES is 1.
        """
        model = BDF(debug=False)

        # correct - standard NO with full list of values
        lines = [
            'PBEAM          1       1 5.094+7 289940.1.6043+7         271610. 3.73058',
            '            0.',
            '              NO     1.0 .7489+7 238250.1.3182+7   1.-12 223170.3.458069',
            '              0.      0.           .872    .718',
            '              0.  .33936      0. .31983',
        ]
        #lines_expected = lines
        model.add_card(lines, 'PBEAM', is_list=False)

        # correct - 2nd continuation line
        lines = [
            'PBEAM          2       1 5.094+7 289940.1.6043+7         271610. 3.73058',
            '+',
            '              NO     1.0 .7489+7 238250.1.3182+7   1.-12 223170.3.458069',
            '              0.      0.           .872    .718',
            '              0.  .33936      0. .31983',
        ]
        #lines_expected = lines
        model.add_card(lines, 'PBEAM', is_list=False)

        # BAD x/xb value of 1.4 (should be 0 to 1.0)
        lines = [
            'PBEAM          2       1 5.094+7 289940.1.6043+7         271610. 3.73058',
            '+',
            '              NO     1.4 .7489+7 238250.1.3182+7   1.-12 223170.3.458069',
            '              0.      0.           .872    .718',
            '              0.  .33936      0. .31983',
        ]
        #lines_expected = lines
        with self.assertRaises(AssertionError):
            model.add_card(lines, 'PBEAM', is_list=False)

        # error - 3 lines after NO
        lines = [
            'PBEAM          3       1 5.094+7 289940.1.6043+7         271610. 3.73058',
            '            0.',
            '              NO     1.0 .7489+7 238250.1.3182+7   1.-12 223170.3.458069',
            '            0.',
            '              0.      0.           .872    .718',
            '              0.  .33936      0. .31983',
        ]
        with self.assertRaises(RuntimeError):
            model.add_card(lines, 'PBEAM', is_list=False)

        # correct - skipped 2nd line
        lines = [
            'PBEAM          4       1 5.094+7 289940.1.6043+7         271610. 3.73058',
            '              NO     1.0 .7489+7 238250.1.3182+7   1.-12 223170.3.458069',
            '              0.      0.           .872    .718',
            '              0.  .33936      0. .31983',
        ]
        #lines_expected = lines
        model.add_card(lines, 'PBEAM', is_list=False)

        # correct - skipped 2nd line and last line
        lines = [
            'PBEAM          5       1 5.094+7 289940.1.6043+7         271610. 3.73058',
            '              NO     1.0 .7489+7 238250.1.3182+7   1.-12 223170.3.458069',
            '              0.      0.           .872    .718',
        ]
        #lines_expected = lines
        model.add_card(lines, 'PBEAM', is_list=False)

        # correct - skipped 2nd line and last 2 lines
        lines = [
            'PBEAM          6       1 5.094+7 289940.1.6043+7         271610. 3.73058',
            '              NO     1.0 .7489+7 238250.1.3182+7   1.-12 223170.3.458069',
        ]
        #lines_expected = lines
        model.add_card(lines, 'PBEAM', is_list=False)

        # correct - single line
        lines = [
            'PBEAM          7       1 5.094+7 289940.1.6043+7         271610. 3.73058',
        ]
        #lines_expected = lines
        model.add_card(lines, 'PBEAM', is_list=False)
Beispiel #22
0
    def test_shell_dvprel(self):
        """tests CBAR and DVPREL1"""
        log = get_logger(level='warning')
        model = BDF(log=log)
        model.add_grid(1, [0., 0., 0.])
        model.add_grid(2, [1., 0., 0.])
        model.add_grid(3, [1., 1., 0.])
        model.add_grid(4, [0., 1., 0.])

        mid = 10
        E = 3.0e7
        G = None
        nu = 0.3
        model.add_mat1(mid, E, G, nu)
        #---------------------------------------------
        eid = 2
        pid = 2
        nids = [1, 2, 3, 4]
        model.add_cquad4(eid, pid, nids, theta_mcid=0.0, zoffset=0., tflag=0,
                         T1=None, T2=None, T3=None, T4=None, comment='')
        nids = [1, 2, 3]
        model.add_ctria3(eid+1, pid+1, nids, zoffset=0., theta_mcid=0.0, tflag=0,
                         T1=None, T2=None, T3=None, comment='')

        model.add_pshell(pid, mid1=mid, t=0.1, mid2=mid, twelveIt3=1.0, mid3=mid,
                         tst=0.833333, nsm=0.0, z1=None, z2=None, mid4=None, comment='')

        mids = [mid] * 3
        thicknesses = [0.1] * 3
        model.add_pcomp(pid+1, mids, thicknesses, thetas=None, souts=None,
                        nsm=0., sb=0., ft=None, tref=0., ge=0., lam=None, z0=None, comment='')
        #---------------------
        dvprels = [
            #oid, pid, prop_type, pname_fid
            (1, pid, 'PSHELL', 'T'),

            (2, pid+1, 'PCOMP', 'T1'),
            (3, pid+1, 'PCOMP', 'T2'),
            (4, pid+1, 'PCOMP', 'T3'),

            (5, pid+1, 'PCOMP', 'THETA1'),
            (6, pid+1, 'PCOMP', 'THETA2'),
            (7, pid+1, 'PCOMP', 'THETA3'),
            (8, pid+1, 'PCOMP', 'SB'),
            (9, pid+1, 'PCOMP', 'GE'),
            (10, pid+1, 'PCOMP', 'Z0'),
        ]
        coeffs = [1.0]
        xinit = 1.0
        for dvprel_data in dvprels:
            oid, pid, prop_type, pname_fid = dvprel_data
            dvids = [oid]
            desvar_id = oid

            dim_label = pname_fid
            prop_label = prop_type
            if pname_fid.startswith('THETA'):
                dim_label = 'TH%s' % pname_fid[-1]
            if prop_type == 'PCOMP':
                prop_label = 'COMP'
            #elif prop_type == 'PBEAM':
                #prop_label = 'PBM'
            label = '%s%s%s' % (prop_label, dim_label, pid)

            model.add_desvar(desvar_id, label, xinit,
                             xlb=-1e20, xub=1e20, delx=None, ddval=None, comment='')
            model.add_dvprel1(oid, prop_type, pid, pname_fid, dvids, coeffs,
                              p_min=None, p_max=1e20, c0=0.0, validate=True, comment='')

        model.cross_reference()
        save_load_deck(model, xref='standard', punch=True)
Beispiel #23
0
    def test_beam_mass_01(self):
        model = BDF(debug=False)
        #model.case_control_deck = CaseControlDeck(case_control_lines)
        spc = ['SPC1', 123456, 123456, 1]
        grid1 = ['GRID', 1, None, 0., 0., 0.]
        grid2 = ['GRID', 2, None, 1., 0., 0.]
        #grid3 = ['GRID', 3, None, 1., 0., 0.]
        force = ['FORCE', 100, 1, 0, 2., 3., 4.]

        pid = 11
        cbeam = [
            'CBEAM',
            10,
            pid,
            1,
            2,
            0.,
            1.,
            0.,
            None,
        ]
        mid = 12
        nsm_offset_a = [0., 0., 0.]
        nsm_offset_b = [0., 50., 0.]
        k1 = k2 = None
        area1 = 2.0
        area2 = 1.0
        rho = 3.
        nsm_a = 0.
        nsm_b = 0.
        nu = 0.3
        pbeam = ([
            'PBEAM',
            pid,
            mid,
            area1,
            2.1,
            1.2,
            1.3,
            None,
            nsm_a,
            None,
            None,
            None,
            None,
            None,
            None,
            None,
            None,
            'YES',
            1.0,
            area2,
            2.1,
            1.2,
            1.3,
            None,
            nsm_b,
            None,
            None,
            None,
            None,
            None,
            None,
            None,
            None,

            # 100s are the NSIa, NSIb (moment of inertia per unit length)
            k1,
            k2,
            None,
            None,
            100.,
            100.,
            None,
            None
        ] +

                 # Nones are neutral axis offset
                 nsm_offset_a + nsm_offset_b + [None, None, None, None])
        #print('\n' + print_card_8(pbeam))

        mat1 = ['MAT1', 12, 3.0e7, None, nu, rho]
        model.add_card(grid1, 'GRID')
        model.add_card(grid2, 'GRID')
        #model.add_card(grid3, 'GRID')
        model.add_card(cbeam, 'CBEAM')
        model.add_card(pbeam, 'PBEAM')
        model.add_card(mat1, 'MAT1')
        model.add_card(spc, 'SPC1')
        model.add_card(force, 'FORCE')
        model.cross_reference()
        #print(model.properties[11])

        mass, cg, I = model.mass_properties(element_ids=None,
                                            mass_ids=None,
                                            reference_point=None,
                                            sym_axis=None,
                                            scale=None)
        #print('cg* =', cg)
        L = 1.0
        area = (area1 + area2) / 2.
        nsm = (nsm_a + nsm_b) / 2.
        mass_per_length = area * rho + nsm
        mass = L * mass_per_length

        mass_a = L / 2. * (area1 * rho + nsm_a)
        mass_b = L / 2. * (area2 * rho + nsm_b)
        xcg = (0.0 * mass_a + 1.0 * mass_b) / (mass_a + mass_b)
        #print(mass_a, mass_b, xcg, mass_a + mass_b)
        #print('mass =', mass)
        #cbeam = CBEAM()
        cbeam = model.elements[10]
        pbeam = model.properties[11]
        assert pbeam.Nu() == nu, 'pbeam.Nu()=%s nu=%s' % (pbeam.Nu(), nu)
        assert pbeam.Rho() == rho, 'pbeam.Rho()=%s rho=%s' % (pbeam.Rho(), rho)
        assert allclose(cbeam.Length(), 1.0), cbeam.Length()
        #assert allclose(cbeam.Mass(), 10.25), cbeam.Mass()
        #assert allclose(cbeam.MassPerLength(), 10.25), cbeam.MassPerLength()
        #assert allclose(mass, 10.25), mass

        with open('pbeam12.bdf', 'w') as bdf_file:
            case_control_lines = ('SOL 101\n'
                                  'CEND\n'
                                  'SUBCASE 1\n'
                                  '    STRESS(PLOT,SORT1,REAL) = ALL\n'
                                  '    SPC = 123456\n'
                                  '    LOAD = 100\n'
                                  'BEGIN BULK\n'
                                  'PARAM,GRDPNT,0\n'
                                  'PARAM,POST,-1\n'
                                  'PARAM   POSTEXT YES\n')
            bdf_file.write(case_control_lines)
            model.write_bdf(bdf_file, enddata=True)

        model2 = BDF(debug=False)
        model2.read_bdf('pbeam12.bdf')

        if not os.path.exists('pbeam12.op2') and 0:  # pragma: no cover
            os.system('nastran scr=yes bat=no old=no pbeam12.bdf')
        os.remove('pbeam12.bdf')

        if 0:  # pragma: no cover
            from pyNastran.op2.op2 import OP2
            op2 = OP2()
            op2.read_op2('pbeam12.op2')
            #os.remove('pbeam12.op2')
            gpw = op2.grid_point_weight
            op2_mass = gpw.mass.max()
            assert op2_mass == mass, 'op2_mass=%s mass=%s' % (op2_mass, mass)
            print('op2_mass=%s mass=%s' % (op2_mass, mass))
            op2_cg = gpw.cg

            cg = array([0.5, 0., 0.], dtype='float32')
            print('cg =', op2_cg)
Beispiel #24
0
    def test_shear(self):
        """tests a CSHEAR, PSHEAR"""
        pid = 10
        pid_pshell = 11

        mid = 100
        model = BDF(debug=False)
        model.add_grid(1, [0., 0., 0.])
        model.add_grid(2, [1., 0., 0.])
        model.add_grid(3, [1., 1., 0.])
        model.add_grid(4, [0., 1., 0.])
        nsm = 10.0
        t = 1.0
        rho = 1.0
        cshear = model.add_cshear(10, pid, [1, 2, 3, 4], comment='cshear')

        cquad4 = model.add_cquad4(14,
                                  pid_pshell, [1, 2, 3, 4],
                                  comment='cquad4')
        model.add_pshear(pid,
                         mid,
                         t=t,
                         nsm=nsm,
                         f1=0.,
                         f2=0.,
                         comment='pshear')
        model.add_pshell(pid_pshell,
                         mid1=mid,
                         t=t,
                         mid2=None,
                         twelveIt3=1.0,
                         mid3=None,
                         tst=0.833333,
                         nsm=nsm,
                         z1=None,
                         z2=None,
                         mid4=None,
                         comment='')

        E = 3.0e7
        G = None
        nu = 0.3
        model.add_mat1(mid, E, G, nu, rho=rho)
        model.validate()

        model.cross_reference()
        model.pop_xref_errors()

        area = 1.0
        mass_expected = area * (rho * t + nsm)
        mass = model.mass_properties()[0]
        assert np.allclose(
            mass, mass_expected *
            2), 'mass_properties all: mass=%s mass_expected=%s' % (
                mass, mass_expected * 2)

        mass = model.mass_properties(element_ids=10)[0]
        assert np.allclose(
            mass, mass_expected
        ), 'mass_properties reduced: mass=%s mass_expected=%s' % (
            mass, mass_expected)

        mass = model.mass_properties_nsm()[0]
        assert np.allclose(
            mass, mass_expected *
            2), 'mass_properties_nsm all: mass=%s mass_expected=%s' % (
                mass, mass_expected * 2)

        mass = model.mass_properties_nsm(element_ids=10)[0]
        assert np.allclose(
            mass, mass_expected
        ), 'mass_properties_nsm reduced: mass=%s mass_expected=%s' % (
            mass, mass_expected)

        bdf_file = StringIO()
        model.write_bdf(bdf_file)
        model.uncross_reference()
        model.cross_reference()
        model.pop_xref_errors()

        model.get_area_breakdown(property_ids=None, stop_if_no_area=True)
        model.get_mass_breakdown(property_ids=None,
                                 stop_if_no_mass=True,
                                 detailed=False)
        model.get_mass_breakdown(property_ids=None,
                                 stop_if_no_mass=True,
                                 detailed=True)
        model.get_volume_breakdown(property_ids=None, stop_if_no_volume=True)

        assert np.allclose(cshear.Mass(), mass_expected), cshear.Mass()

        model.uncross_reference()
        model.safe_cross_reference()
        model.uncross_reference()

        #bdf_file = model.write_bdf(bdf_file)

        save_load_deck(model)
    def test_dvmrel1(self):
        """tests a DVMREL1"""
        model = BDF(debug=False)
        oid = 10
        mid1 = 4
        mp_min = 1e6
        mp_max = 1e7
        dvids = 11
        coeffs = 1.0
        dvmrel_1 = model.add_dvmrel1(oid,
                                     'MAT1',
                                     mid1,
                                     'E',
                                     dvids,
                                     coeffs,
                                     mp_min=mp_min,
                                     mp_max=mp_max,
                                     c0=0.,
                                     validate=True,
                                     comment='dmvrel')

        oid = 11
        mid8 = 8
        dvmrel_8 = model.add_dvmrel1(oid,
                                     'MAT8',
                                     mid8,
                                     'NU12',
                                     dvids,
                                     coeffs,
                                     mp_min=0.25,
                                     mp_max=0.3,
                                     c0=0.,
                                     validate=True,
                                     comment='dmvrel')
        oid = 12
        mid10 = 10
        dvmrel_10 = model.add_dvmrel1(oid,
                                      'MAT10',
                                      mid10,
                                      'RHO',
                                      dvids,
                                      coeffs,
                                      mp_min=0.1,
                                      mp_max=0.2,
                                      c0=0.,
                                      validate=True,
                                      comment='dmvrel')

        E = 30.e7
        G = None
        nu = 0.3
        #nids = [1, 2, 3]
        mat1 = model.add_mat1(mid1, E, G, nu, rho=0.1, comment='mat1')

        e11 = 3e7
        e22 = 0.2 * e11
        nu12 = 0.3
        mat8 = model.add_mat8(mid8, e11, e22, nu12, comment='mat8')
        #bulk = c ** 2. * rho
        bulk = None
        rho = 0.1
        c = 4000.
        mat10 = model.add_mat10(mid10, bulk, rho, c, ge=0.0, comment='mat10')

        dvmrel_1.raw_fields()
        dvmrel_1.write_card(size=8)
        dvmrel_1.write_card(size=16)

        dvmrel_8.raw_fields()
        dvmrel_8.write_card(size=8)
        dvmrel_8.write_card(size=16)

        dvmrel_10.raw_fields()
        dvmrel_10.write_card(size=8)
        dvmrel_10.write_card(size=16)

        mat8.raw_fields()
        mat8.write_card(size=8)
        mat8.write_card(size=16)

        mat10.raw_fields()
        mat10.write_card(size=8)
        mat10.write_card(size=16)

        model.validate()
        model.cross_reference()

        dvmrel_1.raw_fields()
        dvmrel_8.raw_fields()
        dvmrel_10.raw_fields()
        mat8.raw_fields()
        mat10.raw_fields()
Beispiel #26
0
    def test_ctria6_cquad8_cquad9(self):
        """tests a CQUAD8 and CQUAD9"""
        model = BDF(debug=False)
        eid = 1
        pid = 10
        mid = 100
        model.add_grid(1, [0., 0., 0.])
        model.add_grid(5, [.5, 0., 0.])
        model.add_grid(2, [1., 0., 0.])
        model.add_grid(6, [1., .5, 0.])
        model.add_grid(3, [1., 1., 0.])
        model.add_grid(7, [.5, 1., 0.])
        model.add_grid(4, [0., 1., 0.])
        model.add_grid(8, [0., .5, 0.])
        model.add_grid(9, [.5, .5, 0.])

        nids = [1, 2, 3, 4, 5, 6, 7, 8]
        cquad8 = model.add_cquad8(eid,
                                  pid,
                                  nids,
                                  theta_mcid=0.,
                                  comment='cquad8')
        cquad8.flip_normal()

        eid = 2
        nids = [1, 2, 3, 4, 5, 6, 7, 8, 9]
        cquad = model.add_cquad(eid, pid, nids, theta_mcid=0., comment='cquad')
        model.add_pshell(pid, mid1=mid, t=1.0)

        eid = 3
        nids = [1, 2, 3, 5, 6, 9]
        ctria6 = model.add_ctria6(eid,
                                  pid,
                                  nids,
                                  theta_mcid=0.,
                                  comment='ctria6')
        ctria6.flip_normal()

        eid = 4
        cquad4 = model.add_cquad4(eid, pid, [1, 2, 3, 4])
        cquad4.flip_normal()
        str(cquad4)

        eid = 5
        cquad4 = model.add_cquad4(eid,
                                  pid, [1, 2, 3, 4],
                                  tflag=1,
                                  T1=2.,
                                  T2=2.,
                                  T3=2.,
                                  T4=2.)
        str(cquad4)

        eid = 6
        ctria3 = model.add_ctria3(eid, pid, [1, 2, 3])
        ctria3.flip_normal()
        str(ctria3)

        eid = 7
        ctria3 = model.add_ctria3(eid,
                                  pid, [1, 2, 3],
                                  tflag=1,
                                  T1=2.,
                                  T2=2.,
                                  T3=2.)
        str(ctria3)
        str(ctria3)

        E = 3.0e7
        G = None
        nu = 0.3
        model.add_mat1(mid, E, G, nu, rho=0.1)

        model.cross_reference()
        model.pop_xref_errors()

        ctria3.flip_normal()
        cquad4.flip_normal()
        ctria6.flip_normal()
        cquad8.flip_normal()

        assert len(ctria6.Centroid()) == 3, ctria6.Centroid()
        assert len(ctria6.center_of_mass()) == 3, ctria6.center_of_mass()

        assert np.allclose(cquad8.Mass(), 0.1), cquad8.Mass()
        assert np.allclose(cquad.Mass(), 0.1), cquad.Mass()
        assert np.allclose(ctria6.Mass(), 0.05), ctria6.Mass()

        model.get_area_breakdown(property_ids=None, stop_if_no_area=True)
        model.get_mass_breakdown(property_ids=None,
                                 stop_if_no_mass=True,
                                 detailed=False)
        model.get_mass_breakdown(property_ids=None,
                                 stop_if_no_mass=True,
                                 detailed=True)
        model.get_volume_breakdown(property_ids=None, stop_if_no_volume=True)

        save_load_deck(model)
Beispiel #27
0
    def test_loads_sum_04(self):
        """
        tests:
          - 1=FORCE
          - 2=LOAD/FORCE
          - 3=LOAD/PLOAD4
          - 4=LOAD/PLOAD4
          - 5=LOAD/PLOAD4
          - 6=LOAD/PLOAD4
          - 10=PLOAD4
          - 11=PLOAD4
        """
        p0 = array([0., 0., 0.])
        model = BDF(log=log, debug=False)
        bdf_filename = os.path.join(model_path, 'plate', 'plate.bdf')
        #print(bdf_filename)
        model.read_bdf(bdf_filename)
        #print("keys4", model.loads.keys())

        loadcase_id = 1
        F_expected = array([600., 0., 0.])
        M_expected = array([0., 0., -3000.])
        eids = None
        nids = None
        F, M = sum_forces_moments(model, p0, loadcase_id, include_grav=False)
        F2, M2 = sum_forces_moments_elements(model,
                                             p0,
                                             loadcase_id,
                                             eids,
                                             nids,
                                             include_grav=False)
        assert np.allclose(F, F2), 'F=%s F2=%s' % (F, F2)
        assert np.allclose(M, M2), 'M=%s M2=%s' % (M, M2)
        self.assertTrue(
            allclose(F_expected, F),
            'loadcase_id=%s F_expected=%s F=%s' % (loadcase_id, F_expected, F))
        self.assertTrue(
            allclose(M_expected, M),
            'loadcase_id=%s M_expected=%s M=%s' % (loadcase_id, M_expected, M))

        loadcase_id = 2
        F_expected = array([600., 0., 0.])
        M_expected = array([0., 0., -3000.])
        F, M = sum_forces_moments(model, p0, loadcase_id, include_grav=False)
        self.assertTrue(
            allclose(F_expected, F),
            'loadcase_id=%s F_expected=%s F=%s' % (loadcase_id, F_expected, F))
        self.assertTrue(
            allclose(M_expected, M),
            'loadcase_id=%s M_expected=%s M=%s' % (loadcase_id, M_expected, M))

        #---------
        loadcase_id = 3
        A = 0.
        for e, element in model.elements.items():
            A += element.Area()
        A_expected = 100.
        self.assertTrue(
            allclose(A, A_expected),
            'loadcase_id=%s A_expected=%s A=%s' % (loadcase_id, A_expected, A))
        p = 3.
        Fi = p * A

        eids = None
        nids = None
        F, M = sum_forces_moments(model, p0, loadcase_id, include_grav=False)
        F2, M2 = sum_forces_moments_elements(model,
                                             p0,
                                             loadcase_id,
                                             eids,
                                             nids,
                                             include_grav=False)
        assert np.allclose(F, F2), 'F=%s F2=%s' % (F, F2)
        assert np.allclose(M, M2), 'M=%s M2=%s' % (M, M2)

        self.assertTrue(allclose(p * A, F[2]),
                        'loadcase_id=%s p*A=%s F=%s' % (loadcase_id, p * A, F))

        F_expected = array([0., 0., 300.])
        M_expected = array([1500., -1500., 0.])
        self.assertTrue(
            allclose(F_expected, F),
            'loadcase_id=%s F_expected=%s F=%s' % (loadcase_id, F_expected, F))
        self.assertTrue(
            allclose(M_expected, M),
            'loadcase_id=%s M_expected=%s M=%s' % (loadcase_id, M_expected, M))

        #---
        loadcase_id = 10
        F, M = sum_forces_moments(model, p0, loadcase_id, include_grav=False)
        F2, M2 = sum_forces_moments_elements(model,
                                             p0,
                                             loadcase_id,
                                             eids,
                                             nids,
                                             include_grav=False)
        assert np.allclose(F, F2), 'F=%s F2=%s' % (F, F2)
        assert np.allclose(M, M2), 'M=%s M2=%s' % (M, M2)
        self.assertTrue(
            allclose(F_expected, F),
            'loadcase_id=%s F_expected=%s F=%s' % (loadcase_id, F_expected, F))
        self.assertTrue(
            allclose(M_expected, M),
            'loadcase_id=%s M_expected=%s M=%s' % (loadcase_id, M_expected, M))

        #---
        loadcase_id = 4
        F_expected = array([0., 0., 300.])
        M_expected = array([1500., -1500., 0.])
        F_expected *= 5.
        M_expected *= 5.
        F, M = sum_forces_moments(model, p0, loadcase_id, include_grav=False)
        F2, M2 = sum_forces_moments_elements(model,
                                             p0,
                                             loadcase_id,
                                             eids,
                                             nids,
                                             include_grav=False)
        assert np.allclose(F, F2), 'F=%s F2=%s' % (F, F2)
        assert np.allclose(M, M2), 'M=%s M2=%s' % (M, M2)
        #print('F =', F)
        self.assertTrue(
            allclose(F_expected, F),
            'loadcase_id=%s F_expected=%s F=%s' % (loadcase_id, F_expected, F))
        self.assertTrue(
            allclose(M_expected, M),
            'loadcase_id=%s M_expected=%s M=%s' % (loadcase_id, M_expected, M))

        loadcase_id = 5
        F, M = sum_forces_moments(model, p0, loadcase_id, include_grav=False)
        F2, M2 = sum_forces_moments_elements(model,
                                             p0,
                                             loadcase_id,
                                             eids,
                                             nids,
                                             include_grav=False)
        assert np.allclose(F, F2), 'F=%s F2=%s' % (F, F2)
        assert np.allclose(M, M2), 'M=%s M2=%s' % (M, M2)
        F_expected = array([0., 0., 300.])
        M_expected = array([1500., -1500., 0.])
        F_expected *= 7.
        M_expected *= 7.
        self.assertTrue(
            allclose(F_expected, F),
            'loadcase_id=%s F_expected=%s F=%s' % (loadcase_id, F_expected, F))
        self.assertTrue(
            allclose(M_expected, M),
            'loadcase_id=%s M_expected=%s M=%s' % (loadcase_id, M_expected, M))

        loadcase_id = 6
        F, M = sum_forces_moments(model, p0, loadcase_id, include_grav=False)
        F2, M2 = sum_forces_moments_elements(model,
                                             p0,
                                             loadcase_id,
                                             eids,
                                             nids,
                                             include_grav=False)
        assert np.allclose(F, F2), 'F=%s F2=%s' % (F, F2)
        assert np.allclose(M, M2), 'M=%s M2=%s' % (M, M2)
        F_expected = array([0., 0., 300.])
        M_expected = array([1500., -1500., 0.])
        F_expected *= 7. * 5.
        M_expected *= 7. * 5.
        self.assertTrue(
            allclose(F_expected, F),
            'loadcase_id=%s F_expected=%s F=%s' % (loadcase_id, F_expected, F))
        self.assertTrue(
            allclose(M_expected, M),
            'loadcase_id=%s M_expected=%s M=%s' % (loadcase_id, M_expected, M))

        #---------
        loadcase_id = 11
        A_expected = 4.
        A = 4.
        p = 3.
        Fi = p * A
        element = model.elements[1]
        normal = element.Normal()
        normal_expected = array([0., 0., 1.])
        self.assertTrue(
            allclose(normal_expected,
                     normal), 'loadcase_id=%s normal_expected=%s normal=%s' %
            (loadcase_id, normal_expected, normal))
        F, M = sum_forces_moments(model, p0, loadcase_id, include_grav=False)
        F2, M2 = sum_forces_moments_elements(model,
                                             p0,
                                             loadcase_id,
                                             eids,
                                             nids,
                                             include_grav=False)
        assert np.allclose(F, F2), 'F=%s F2=%s' % (F, F2)
        assert np.allclose(M, M2), 'M=%s M2=%s' % (M, M2)

        self.assertTrue(allclose(p * A, F[2]),
                        'loadcase_id=%s p*A=%s F=%s' % (loadcase_id, p * A, F))

        F_expected = array([0., 0., 12.])
        M_expected = array([12., -12., 0.])
        self.assertTrue(
            allclose(F_expected, F),
            'loadcase_id=%s F_expected=%s F=%s' % (loadcase_id, F_expected, F))
        self.assertTrue(
            allclose(M_expected, M),
            'loadcase_id=%s M_expected=%s M=%s' % (loadcase_id, M_expected, M))
Beispiel #28
0
    def test_shell_mcid(self):
        """tests that mcids=0 are correctly identified as not 0.0 and thus not dropped"""
        model = BDF(debug=False)
        model.add_grid(1, [0., 0., 0.])
        model.add_grid(2, [0., 1., 0.])
        model.add_grid(3, [0., 1., 1.])
        model.add_grid(4, [0., 0., 1.])

        eid = 10
        pid = 100
        mid = 1000
        model.add_ctria3(eid,
                         pid, [1, 2, 3],
                         zoffset=0.,
                         theta_mcid=0,
                         tflag=0,
                         T1=None,
                         T2=None,
                         T3=None,
                         comment='')

        eid = 11
        model.add_cquad4(eid,
                         pid, [1, 2, 3, 4],
                         theta_mcid=0,
                         zoffset=0.,
                         tflag=0,
                         T1=None,
                         T2=None,
                         T3=None,
                         T4=None,
                         comment='')

        model.add_pshell(pid,
                         mid1=mid,
                         t=0.1,
                         mid2=mid,
                         twelveIt3=1.0,
                         mid3=None,
                         tst=0.833333,
                         nsm=0.0,
                         z1=None,
                         z2=None,
                         mid4=None,
                         comment='')
        E = 3.0e7
        G = None
        nu = 0.3
        model.add_mat1(mid, E, G, nu)
        #print(model.elements[11])
        assert model.elements[10].rstrip(
        ) == 'CTRIA3        10     100       1       2       3       0'
        assert model.elements[11].rstrip(
        ) == 'CQUAD4        11     100       1       2       3       4       0'
        assert model.elements[10].write_card().rstrip(
        ) == 'CTRIA3        10     100       1       2       3       0'

        model.cross_reference()
        assert model.elements[10].rstrip(
        ) == 'CTRIA3        10     100       1       2       3       0'
        assert model.elements[11].rstrip(
        ) == 'CQUAD4        11     100       1       2       3       4       0'

        model.uncross_reference()
        assert model.elements[10].rstrip(
        ) == 'CTRIA3        10     100       1       2       3       0'
        assert model.elements[11].rstrip(
        ) == 'CQUAD4        11     100       1       2       3       4       0'
        model.safe_cross_reference()
        model.uncross_reference()
        assert model.elements[10].rstrip(
        ) == 'CTRIA3        10     100       1       2       3       0'
        assert model.elements[11].rstrip(
        ) == 'CQUAD4        11     100       1       2       3       4       0'

        model2 = save_load_deck(model)
        model2.elements[10].comment = ''
        assert model2.elements[10].rstrip(
        ) == 'CTRIA3        10     100       1       2       3       0'
        assert model2.elements[11].rstrip(
        ) == 'CQUAD4        11     100       1       2       3       4       0'
Beispiel #29
0
    def test_loads_sum_radial_01(self):
        model = BDF(debug=False)
        model.nodes[1] = GRID(1,
                              cp=1,
                              xyz=[0., 0., 0.],
                              cd=0,
                              ps='',
                              seid=0,
                              comment='')
        cid = 1
        origin = [0., 0., 0.]
        zaxis = [0., 0., 1.]
        xaxis = [1., 0., 0.]
        model.add_cord2c(cid,
                         rid=0,
                         origin=origin,
                         zaxis=zaxis,
                         xzplane=xaxis,
                         comment='')

        sid = 1
        node = 1
        cid = 1
        mag = 1.1
        xyz = [1., 0., 0.]
        radial_force = model.add_force(sid,
                                       node,
                                       mag,
                                       xyz,
                                       cid=cid,
                                       comment='')

        sid = 2
        xyz = [1., 90., 0.]
        mag = 2.2
        theta_force = model.add_force(sid, node, mag, xyz, cid=cid, comment='')
        model.cross_reference()

        p0 = 1
        eids = None
        nids = None

        loadcase_id = 1
        F, M = sum_forces_moments(model,
                                  p0,
                                  loadcase_id,
                                  include_grav=False,
                                  xyz_cid0=None)
        F2, M2 = sum_forces_moments_elements(model,
                                             p0,
                                             loadcase_id,
                                             eids,
                                             nids,
                                             include_grav=False,
                                             xyz_cid0=None)
        assert np.allclose(F, F2), 'F=%s F2=%s' % (F, F2)
        assert np.allclose(M, M2), 'M=%s M2=%s' % (M, M2)

        F1_expected = np.array([1.1, 0., 0.])
        M1_expected = np.array([0., 0., 0.])
        self.assertTrue(
            allclose(F1_expected, F), 'loadcase_id=%s F_expected=%s F=%s' %
            (loadcase_id, F1_expected, F))
        self.assertTrue(
            allclose(M1_expected, M), 'loadcase_id=%s M_expected=%s M=%s' %
            (loadcase_id, M1_expected, M))

        loadcase_id = 2
        F, M = sum_forces_moments(model,
                                  p0,
                                  loadcase_id,
                                  include_grav=False,
                                  xyz_cid0=None)
        F2, M2 = sum_forces_moments_elements(model,
                                             p0,
                                             loadcase_id,
                                             eids,
                                             nids,
                                             include_grav=False,
                                             xyz_cid0=None)
        assert np.allclose(F, F2), 'F=%s F2=%s' % (F, F2)
        assert np.allclose(M, M2), 'M=%s M2=%s' % (M, M2)
        F2_expected = np.array([0., 2.2, 0.])
        M2_expected = np.array([0., 0., 0.])
        self.assertTrue(
            allclose(F2_expected, F), 'loadcase_id=%s F_expected=%s F=%s' %
            (loadcase_id, F2_expected, F))
        self.assertTrue(
            allclose(M2_expected, M), 'loadcase_id=%s M_expected=%s M=%s' %
            (loadcase_id, M2_expected, M))
Beispiel #30
0
    def test_pbar_2(self):
        """tests the PBAR BDF add"""
        pid = 1
        mid = 2
        A = None
        I1 = I2 = None
        J = None
        nsm = None
        c1 = c2 = d1 = d2 = e1 = e2 = f1 = f2 = None
        k1 = k2 = None
        i12 = 3.
        fields = [
            'PBAR', pid, mid, A, I1, I2, J, nsm, None,
            c1, c2, d1, d2, e1, e2, f1, f2,
            k1, k2, i12
        ]
        card = print_card_8(fields)
        lines = card.split('\n')
        model = BDF(debug=False)
        card = model.process_card(lines)
        cardi = BDFCard(card)

        pbar = PBAR.add_card(cardi)
        self.assertEqual(pbar.pid, 1)
        self.assertEqual(pbar.mid, 2)
        self.assertEqual(pbar.A, 0.0)
        self.assertEqual(pbar.i1, 0.0)
        self.assertEqual(pbar.i2, 0.0)
        self.assertEqual(pbar.j, 0.0)
        self.assertEqual(pbar.nsm, 0.0)
        self.assertEqual(pbar.i12, 3.0)
        self.assertEqual(pbar.c1, 0.0)
        self.assertEqual(pbar.c2, 0.0)
        self.assertEqual(pbar.d1, 0.0)
        self.assertEqual(pbar.d2, 0.0)
        self.assertEqual(pbar.e1, 0.0)
        self.assertEqual(pbar.e2, 0.0)
        self.assertEqual(pbar.k1, None)
        self.assertEqual(pbar.k2, None)

        #--------------------------------------------------------
        A = 6.
        I1 = 5.
        I2 = 4.
        J = 3.
        nsm = 2.
        c1 = c2 = d1 = d2 = e1 = e2 = f1 = f2 = None
        k1 = k2 = 1e2
        i12 = 0.
        fields = [
            'PBAR', pid, mid, A, I1, I2, J, nsm, None,
            c1, c2, d1, d2, e1, e2, f1, f2,
            k1, k2, i12]
        card = print_card_8(fields)
        lines = card.split('\n')
        model = BDF(debug=False)
        card = model.process_card(lines)

        cardi = BDFCard(card)
        pbar = PBAR.add_card(cardi)

        self.assertEqual(pbar.pid, 1)
        self.assertEqual(pbar.mid, 2)
        self.assertEqual(pbar.A, 6.0)
        self.assertEqual(pbar.i1, 5.0)
        self.assertEqual(pbar.i2, 4.0)
        self.assertEqual(pbar.j, 3.0)
        self.assertEqual(pbar.nsm, 2.0)
        self.assertEqual(pbar.i12, 0.0)
        self.assertEqual(pbar.c1, 0.0)
        self.assertEqual(pbar.c2, 0.0)
        self.assertEqual(pbar.d1, 0.0)
        self.assertEqual(pbar.d2, 0.0)
        self.assertEqual(pbar.e1, 0.0)
        self.assertEqual(pbar.e2, 0.0)
        self.assertEqual(pbar.k1, 1e2)
        self.assertEqual(pbar.k2, 1e2)