Esempio n. 1
0
def test_sparse_read():
    direc = "tests/nastran_op4_data/"
    fnames = glob(direc + "*.op4") + glob(direc + "*.other")

    for fname in fnames:
        m = op4.read(fname)
        if fname.endswith("cdbin_ascii_sparse_nonbigmat.op4"):
            # this has an all-zeros matrix that is written the same as
            # the dense format (so the sparse form is not used by
            # default)
            del m["c2"]
        m2 = op4.read(fname, sparse=None)
        m3 = op4.read(fname, sparse=True)
        m4 = op4.read(fname, sparse=False)
        m5 = op4.read(fname, sparse=(None, sp.coo_matrix.tocsr))
        if "bigmat" in fname:
            for k, v in m.items():
                assert sp.issparse(m2[k])
                assert sp.isspmatrix_csr(m5[k])
                assert np.all(m2[k].toarray() == v)
                assert np.all(m5[k].toarray() == v)
        else:
            for k, v in m.items():
                assert np.all(m2[k] == v)
                assert np.all(m5[k] == v)

        for k, v in m.items():
            assert sp.issparse(m3[k])
            assert np.all(m3[k].toarray() == v)
            assert np.all(m4[k] == v)
Esempio n. 2
0
def test_sparse_read():
    direc = "tests/nastran_op4_data/"
    fnames = glob(direc + "*.op4") + glob(direc + "*.other")

    for fname in fnames:
        m = op4.read(fname)
        m2 = op4.read(fname, sparse=None)
        m3 = op4.read(fname, sparse=True)
        m4 = op4.read(fname, sparse=False)
        m5 = op4.read(fname, sparse=(None, sp.coo_matrix.tocsr))
        if "bigmat" in fname:
            for k, v in m.items():
                assert sp.issparse(m2[k])
                assert sp.isspmatrix_csr(m5[k])
                assert np.all(m2[k].toarray() == v)
                assert np.all(m5[k].toarray() == v)
        else:
            for k, v in m.items():
                assert np.all(m2[k] == v)
                assert np.all(m5[k] == v)

        for k, v in m.items():
            assert sp.issparse(m3[k])
            assert np.all(m3[k].toarray() == v)
            assert np.all(m4[k] == v)
Esempio n. 3
0
def test_asm2uset_2():
    u, c, b = nastran.asm2uset("tests/nas2cam_extseout/reduced_bset_notall6.asm")
    m = op4.read("tests/nas2cam_extseout/reduced_bset_notall6.op4")

    assert u.shape[0] == 29

    q = ~b
    assert ((np.diag(m["maa"]) == 1.0) == q).all()
Esempio n. 4
0
def write_read(m, binary, sparse):
    f = tempfile.NamedTemporaryFile(delete=False)
    name = f.name
    f.close()
    try:
        op4.write(name, m, binary=binary, sparse=sparse)
        m2 = op4.read(name, sparse=None)
    finally:
        os.remove(name)
    return m2
Esempio n. 5
0
def test_wtop4_2():
    matfile = "tests/nastran_op4_data/r_c_rc.mat"
    m = matlab.loadmat(matfile)
    names = ["rmat", "cmat", "rcmat"]
    mats = []
    wtdct = {}
    for nm in names:
        mats.append(m[nm])
        wtdct[nm] = m[nm]
    # write(filename, names, matrices=None,
    #       binary=True, digits=16, endian='')
    filenames = [
        ["tests/nastran_op4_data/temp_ascii.op4", False, ""],
        ["tests/nastran_op4_data/temp_le.op4", True, "<"],
        ["tests/nastran_op4_data/temp_be.op4", True, ">"],
    ]
    for item in filenames:
        filename = item[0]
        binary = item[1]
        endian = item[2]
        op4.write(filename, names, mats, binary=binary, endian=endian)
        names2, sizes, forms, mtypes = op4.dir(filename, verbose=False)
        assert names2 == names
        dct = op4.load(filename)
        for nm in dct:
            assert np.allclose(m[nm], dct[nm][0])
        op4.save(filename, wtdct, binary=binary, endian=endian)
        dct = op4.load(filename, into="dct")
        for nm in dct:
            assert np.allclose(m[nm], dct[nm][0])

        dct = op4.read(filename)
        for nm in dct:
            assert np.allclose(m[nm], dct[nm])
        op4.save(filename, wtdct, binary=binary, endian=endian)
        dct = op4.read(filename, into="dct")
        for nm in dct:
            assert np.allclose(m[nm], dct[nm])

    # clean up:
    for item in filenames:
        os.remove(item[0])
Esempio n. 6
0
def test_large_sparse():
    data = [2.3, 5, -100.4]
    rows = [2, 500000, 3500000]
    cols = [3750000, 500000, 4999999]
    a = sp.csr_matrix((data, (rows, cols)), shape=(5000000, 5000000))

    f = tempfile.NamedTemporaryFile(delete=False)
    name = f.name
    f.close()
    try:
        op4.write(name, dict(a=a))
        a2 = op4.read(name, sparse=None)
    finally:
        os.remove(name)

    assert sp.issparse(a2["a"])
    a2 = a2["a"].tocsr()
    for i, j, v in zip(rows, cols, data):
        assert np.allclose(a2[i, j], v)
Esempio n. 7
0
def test_wtop4_single_2():
    matfile = "tests/nastran_op4_data/r_c_rc.mat"
    m = matlab.loadmat(matfile)
    name = "rmat"
    mat = m[name]
    # write(filename, names, matrices=None,
    #       binary=True, digits=16, endian='')
    filenames = [["tests/nastran_op4_data/temp_ascii.op4", False, ""]]
    for item in filenames:
        filename = item[0]
        binary = item[1]
        endian = item[2]
        op4.write(filename, name, mat, binary=binary, endian=endian)
        dct = op4.read(filename)
        for nm in dct:
            assert np.allclose(m[nm], dct[nm])
    # clean up:
    for item in filenames:
        os.remove(item[0])
Esempio n. 8
0
def test_premature_eof_warning():
    a = np.random.randn(10, 10)
    f = tempfile.NamedTemporaryFile(delete=False)
    fname = f.name
    f.close()

    try:
        op4.write(fname, {"a": a})
        bufr = open(fname, "rb").read()
        open(fname, "wb").write(bufr[:-6])

        with assert_warns(RuntimeWarning) as cm:
            a2 = op4.read(fname)
            assert cm.warnings[0].message.args[0].startswith("Premature end-of-file")

    finally:
        os.remove(fname)

    assert (a2["a"] == a).all()
Esempio n. 9
0
def test_large_rows_dense():
    fname = "tests/nastran_op4_data/x100000.op4"
    m = op4.read(fname)
    x = np.zeros((100000, 1))
    x[45678] = 1.0
    assert np.allclose(m["x"], x)
Esempio n. 10
0
def test_sparse_write():
    fnames = [
        "tests/nastran_op4_data/cdbin.op4",
        "tests/nastran_op4_data/rs.op4",
        "tests/nastran_op4_data/r_c_rc.op4",
        "tests/nastran_op4_data/double_bigmat_le.op4",
        "tests/nastran_op4_data/double_nonbigmat_be.op4",
        "tests/nastran_op4_data/single_dense_be.op4",
        # the nx nastran v9 version of the following files does not
        # make NR negative ...  not really a big deal, but the tests
        # below would need to be changed. So, just using the pyYeti
        # versions directly (nastran read them fine)
        "tests/nastran_op4_data/big_bigmat_ascii.op4",
        "tests/nastran_op4_data/big_bigmat_binary.op4",
        "tests/nastran_op4_data/big_dense_ascii.op4",
        "tests/nastran_op4_data/big_dense_binary.op4",
    ]

    for fname in fnames:
        for rd_sparse in (True, False, None):
            m = op4.read(fname, sparse=rd_sparse)
            m2 = write_read(m, binary=True, sparse="dense")
            m3 = write_read(m, binary=False, sparse="dense")
            m4 = write_read(m, binary=False, sparse="nonbigmat")
            m5 = write_read(m, binary=True, sparse="nonbigmat")
            m6 = write_read(m, binary=False, sparse="bigmat")
            m7 = write_read(m, binary=True, sparse="bigmat")
            m8 = write_read(m, binary=False, sparse="auto")
            m9 = write_read(m, binary=True, sparse="auto")

            for k, v in m.items():
                if rd_sparse:
                    assert sp.issparse(v)
                elif rd_sparse is None and "bigmat" in fname:
                    if "nonbigmat" in fname and not sp.issparse(v):
                        # v could be dense if all zeros
                        assert np.all(v == 0.0)
                    else:
                        assert sp.issparse(v)
                va = v.toarray() if sp.issparse(v) else v

                assert np.all(va == m2[k])
                assert np.all(va == m3[k])

                if sp.issparse(m4[k]):
                    assert np.all(va == m4[k].A)
                else:
                    assert np.allclose(va, m4[k])
                    assert np.all(m4[k] == 0.0)

                if sp.issparse(m5[k]):
                    assert np.all(va == m5[k].A)
                else:
                    assert np.allclose(va, m5[k])
                    assert np.all(m5[k] == 0.0)

                assert sp.issparse(m6[k])
                assert np.all(va == m6[k].A)

                assert sp.issparse(m7[k])
                assert np.all(va == m7[k].A)

                if rd_sparse or (rd_sparse is None and sp.issparse(v)):
                    assert sp.issparse(m8[k])
                    assert np.all(va == m8[k].A)
                    assert sp.issparse(m9[k])
                    assert np.all(va == m9[k].A)
                else:
                    assert np.all(va == m8[k])
                    assert np.all(va == m9[k])
Esempio n. 11
0
def test_cglf_moment_signs():
    pth = os.path.dirname(inspect.getfile(cb))
    pth = os.path.join(pth, "..")
    pth = os.path.join(pth, "tests")
    pth = os.path.join(pth, "cla_test_data")

    se = 101
    uset, coords = nastran.bulk2uset(os.path.join(pth, "outboard.asm"))
    dct = op4.read(os.path.join(pth, "outboard.op4"))
    maa = dct["mxx"]
    kaa = dct["kxx"]
    atm = dct["mug1"]
    ltm = dct["mef1"]
    pch = os.path.join(pth, "outboard.pch")
    atm_labels = [
        "Grid {:4d}-{:1d}".format(grid, dof) for grid, dof in nastran.rddtipch(pch)
    ]
    ltm_labels = [
        "CBAR {:4d}-{:1d}".format(cbar, arg)
        for cbar, arg in nastran.rddtipch(pch, "tef1")
    ]

    nb = uset.shape[0]
    nq = maa.shape[0] - nb
    bset = np.arange(nb)
    qset = np.arange(nq) + nb
    ref = [600.0, 150.0, 150.0]
    g = 9806.65

    # use addgrid to get coordinate transformations from lv to sc:
    cid = [1, 0, 0]
    A = [0, 0, 0]
    # define sc in terms of lv coords:
    # (all drawn out by hand)
    BC = [
        [[0, 0, 1.0], [1.0, 0, 0]],  # lv x is up
        [[0, 0, -1.0], [0, 1.0, 0]],  # lv y is up
        [[-1.0, 0, 0.0], [0, 0, 1.0]],  # lv z is up
        [[0, 0, -1.0], [-1.0, 0, 0]],  # lv x is down
        [[0, 0, 1.0], [0, -1.0, 0]],  # lv y is down
        [[0, -1.0, 0], [0, 0, -1.0]],  # lv z is down
    ]
    Ts = []
    nets = []
    rb = n2p.rbgeom_uset(uset, ref)
    rbcglfa = []
    for bc in BC:
        CI = n2p.mkusetcoordinfo([cid, A, *bc], None, {})
        T = CI[2:]
        Ts.append(T)
        net = cb.mk_net_drms(maa, kaa, bset, uset=uset, ref=ref, g=g, sccoord=T)
        nets.append(net)
        rba = net.cglfa[:, :24] @ rb
        rbcglfa.append(rba)
        # sc rows:
        assert np.all(np.sign(rba[1, [1, 5]]) == np.sign(rba[3, [1, 5]]))
        assert np.all(np.sign(rba[2, [2, 4]]) == np.sign(rba[4, [2, 4]]))
        # lv rows:
        assert np.all(np.sign(rba[6, [1, 5]]) == np.sign(rba[8, [1, 5]]))
        assert np.all(np.sign(rba[7, [2, 4]]) == np.sign(rba[9, [2, 4]]))

    wh_sc = nets[0].weight_sc * nets[0].height_sc
    wh_lv = nets[0].weight_lv * nets[0].height_lv
    n = nets[0].cgatm_sc.shape[1]
    # x is down:
    cgdrm = np.vstack(
        (
            # 5 s/c rows
            nets[0].cgatm_sc[:3],
            -nets[0].ifltma_sc[5] / wh_sc,
            nets[0].ifltma_sc[4] / wh_sc,
            # 5 l/v rows
            nets[0].cgatm_lv[:3],
            -nets[0].ifltma_lv[5] / wh_lv,
            nets[0].ifltma_lv[4] / wh_lv,
            # 4 RSS rows ... filled in during data recovery
            np.zeros((4, n)),
        )
    )
    assert np.allclose(cgdrm, nets[0].cglfa)
Esempio n. 12
0
def test_sparse_write():
    fnames = [
        "tests/nastran_op4_data/cdbin.op4",
        "tests/nastran_op4_data/rs.op4",
        "tests/nastran_op4_data/r_c_rc.op4",
        "tests/nastran_op4_data/double_bigmat_le.op4",
        "tests/nastran_op4_data/double_nonbigmat_be.op4",
        "tests/nastran_op4_data/single_dense_be.op4",
    ]

    for fname in fnames:
        for rd_sparse in (True, False, None):
            m = op4.read(fname, sparse=rd_sparse)
            m2 = write_read(m, binary=True, sparse="dense")
            m3 = write_read(m, binary=False, sparse="dense")
            m4 = write_read(m, binary=False, sparse="nonbigmat")
            m5 = write_read(m, binary=True, sparse="nonbigmat")
            m6 = write_read(m, binary=False, sparse="bigmat")
            m7 = write_read(m, binary=True, sparse="bigmat")
            m8 = write_read(m, binary=False, sparse="auto")
            m9 = write_read(m, binary=True, sparse="auto")

            for k, v in m.items():
                if rd_sparse:
                    assert sp.issparse(v)
                elif rd_sparse is None and "bigmat" in fname:
                    if "nonbigmat" in fname and not sp.issparse(v):
                        # v could be dense if all zeros
                        assert np.all(v == 0.0)
                    else:
                        assert sp.issparse(v)
                va = v.toarray() if sp.issparse(v) else v

                assert np.all(va == m2[k])
                assert np.all(va == m3[k])

                if sp.issparse(m4[k]):
                    assert np.all(va == m4[k].A)
                else:
                    assert np.allclose(va, m4[k])
                    assert np.all(m4[k] == 0.0)

                if sp.issparse(m5[k]):
                    assert np.all(va == m5[k].A)
                else:
                    assert np.allclose(va, m5[k])
                    assert np.all(m5[k] == 0.0)

                assert sp.issparse(m6[k])
                assert np.all(va == m6[k].A)

                assert sp.issparse(m7[k])
                assert np.all(va == m7[k].A)

                if rd_sparse or (rd_sparse is None and sp.issparse(v)):
                    assert sp.issparse(m8[k])
                    assert np.all(va == m8[k].A)
                    assert sp.issparse(m9[k])
                    assert np.all(va == m9[k].A)
                else:
                    assert np.all(va == m8[k])
                    assert np.all(va == m9[k])