Beispiel #1
0
def test_104(ceed_resource):
    ceed = libceed.Ceed(ceed_resource)

    n = 10

    x = ceed.Vector(n)
    a = np.zeros(n, dtype="float64")
    x.set_array(a, cmode=libceed.USE_POINTER)

    b = x.get_array()
    b[3] = -3.14
    x.restore_array()

    assert a[3] == -3.14
Beispiel #2
0
def test_107(ceed_resource, capsys):
    ceed = libceed.Ceed(ceed_resource)

    n = 10
    x = ceed.Vector(n)

    a = np.arange(10, 10 + n, dtype=ceed.scalar_type())
    x.set_array(a, cmode=libceed.USE_POINTER)

    print(x)

    stdout, stderr, ref_stdout = check.output(capsys)
    assert not stderr
    assert stdout == ref_stdout
Beispiel #3
0
def test_100(ceed_resource):
    ceed = libceed.Ceed(ceed_resource)

    n = 10
    x = ceed.Vector(n)

    a = np.arange(10, 10 + n, dtype="float64")
    x.set_array(a, cmode=libceed.USE_POINTER)

    b = x.get_array_read()
    for i in range(n):
        assert b[i] == 10 + i

    x.restore_array_read()
Beispiel #4
0
def test_005(ceed_resource):
    ceed = libceed.Ceed(ceed_resource)

    vec = ceed.Vector(5)
    array1 = vec.get_array()

    exception_raised = False
    try:
        array2 = vec.get_array()
    except BaseException:
        exception_raised = True

    assert exception_raised

    vec.restore_array()
Beispiel #5
0
def test_320(ceed_resource):
    ceed = libceed.Ceed(ceed_resource)

    P, Q, dim = 6, 4, 2

    in_array = np.empty(P, dtype="float64")
    qref = np.empty(dim * Q, dtype="float64")
    qweight = np.empty(Q, dtype="float64")

    interp, grad = bm.buildmats(qref, qweight)

    b = ceed.BasisH1(libceed.TRIANGLE, 1, P, Q, interp, grad, qref, qweight)

    print(b)
    del b
Beispiel #6
0
def test_202(ceed_resource, capsys):
    ceed = libceed.Ceed(ceed_resource)

    num_elem = 8
    elem_size = 2
    num_blk = 2
    blk_size = 5

    x = ceed.Vector(num_elem + 1)
    a = np.arange(10, 10 + num_elem + 1, dtype=ceed.scalar_type())
    x.set_array(a, cmode=libceed.COPY_VALUES)

    ind = np.zeros(2 * num_elem, dtype="int32")
    for i in range(num_elem):
        ind[2 * i + 0] = i
        ind[2 * i + 1] = i + 1
    r = ceed.BlockedElemRestriction(num_elem,
                                    elem_size,
                                    blk_size,
                                    1,
                                    1,
                                    num_elem + 1,
                                    ind,
                                    cmode=libceed.COPY_VALUES)

    y = ceed.Vector(num_blk * blk_size * elem_size)
    y.set_value(0)

    # NoTranspose
    r.apply(x, y)
    layout = r.get_layout()
    with y.array_read() as y_array:
        for i in range(elem_size):
            for j in range(1):
                for k in range(num_elem):
                    block = int(k / blk_size)
                    elem = k % blk_size
                    indx = (i * blk_size + elem) * \
                        layout[0] + j * blk_size * layout[1] + \
                        block * blk_size * layout[2]
                assert y_array[indx] == a[ind[k * elem_size + i]]

    x.set_value(0)
    r.T.apply(y, x)
    with x.array_read() as x_array:
        for i in range(num_elem + 1):
            assert x_array[i] == (10 +
                                  i) * (2.0 if i > 0 and i < num_elem else 1.0)
Beispiel #7
0
def test_104(ceed_resource):
    ceed = libceed.Ceed(ceed_resource)

    n = 10

    x = ceed.Vector(n)
    a = np.zeros(n, dtype=ceed.scalar_type())
    x.set_array(a, cmode=libceed.USE_POINTER)

    with x.array() as b:
        b[3] = -3.14

    if libceed.lib.CEED_SCALAR_TYPE == libceed.SCALAR_FP32:
        assert a[3] == np.float32(-3.14)
    else:
        assert a[3] == -3.14
Beispiel #8
0
def test_300(ceed_resource, capsys):
    ceed = libceed.Ceed(ceed_resource)

    b = ceed.BasisTensorH1Lagrange(1, 1, 4, 4, libceed.GAUSS_LOBATTO)
    print(b)
    del b

    b = ceed.BasisTensorH1Lagrange(1, 1, 4, 4, libceed.GAUSS)
    print(b)
    del b

    stdout, stderr = capsys.readouterr()
    with open(os.path.abspath("./output/test_300.out")) as output_file:
        true_output = output_file.read()

    assert stdout == true_output
Beispiel #9
0
def test_320(ceed_resource):
    ceed = libceed.Ceed(ceed_resource)

    P, Q, dim = 6, 4, 2

    in_array = np.empty(P, dtype=ceed.scalar_type())
    qref = np.empty(dim * Q, dtype=ceed.scalar_type())
    qweight = np.empty(Q, dtype=ceed.scalar_type())

    interp, grad = bm.buildmats(
        qref, qweight, libceed.scalar_types[libceed.lib.CEED_SCALAR_TYPE])

    b = ceed.BasisH1(libceed.TRIANGLE, 1, P, Q, interp, grad, qref, qweight)

    print(b)
    del b
Beispiel #10
0
def test_300(ceed_resource, capsys):
    ceed = libceed.Ceed(ceed_resource)

    b = ceed.BasisTensorH1Lagrange(1, 1, 4, 4, libceed.GAUSS_LOBATTO)
    print(b)
    del b

    b = ceed.BasisTensorH1Lagrange(1, 1, 4, 4, libceed.GAUSS)
    print(b)
    del b

    # Only run this test in double precision
    if libceed.lib.CEED_SCALAR_TYPE == libceed.SCALAR_FP64:
        stdout, stderr, ref_stdout = check.output(capsys)
        assert not stderr
        assert stdout == ref_stdout
Beispiel #11
0
def test_107(ceed_resource, capsys):
    ceed = libceed.Ceed(ceed_resource)

    n = 10
    x = ceed.Vector(n)

    a = np.arange(10, 10 + n, dtype="float64")
    x.set_array(a, cmode=libceed.USE_POINTER)

    print(x)

    stdout, stderr = capsys.readouterr()
    with open(os.path.abspath("./output/test_107.out")) as output_file:
        true_output = output_file.read()

    assert stdout == true_output
def test_210(ceed_resource, capsys):
    ceed = libceed.Ceed(ceed_resource)

    num_elem = 3

    ind = np.zeros(2 * num_elem, dtype="int32")
    for i in range(num_elem):
        ind[2 * i + 0] = i + 0
        ind[2 * i + 1] = i + 1
    r = ceed.ElemRestriction(num_elem, 2, 1, 1, num_elem + 1, ind,
                             cmode=libceed.USE_POINTER)

    print(r)

    stdout, stderr, ref_stdout = check.output(capsys)
    assert not stderr
    assert stdout == ref_stdout
Beispiel #13
0
def test_103(ceed_resource):
    ceed = libceed.Ceed(ceed_resource)

    n = 10

    x = ceed.Vector(n)
    y = ceed.Vector(n)

    a = np.arange(10, 10 + n, dtype="float64")
    x.set_array(a, cmode=libceed.USE_POINTER)

    with x.array() as x_array:
        y.set_array(x_array, cmode=libceed.USE_POINTER)

    with y.array_read() as y_array:
        for i in range(n):
            assert y_array[i] == 10 + i
Beispiel #14
0
def test_304(ceed_resource):
    ceed = libceed.Ceed(ceed_resource)

    A = np.array([
        0.2, 0.0745355993, -0.0745355993, 0.0333333333, 0.0745355993, 1.,
        0.1666666667, -0.0745355993, -0.0745355993, 0.1666666667, 1.,
        0.0745355993, 0.0333333333, -0.0745355993, 0.0745355993, 0.2
    ],
                 dtype="float64")

    Q = A.copy()

    lam = ceed.symmetric_schur_decomposition(Q, 4)
    Q = Q.reshape(4, 4)
    lam = np.diag(lam)

    Q_lambda_Qt = np.matmul(np.matmul(Q, lam), Q.T)
    assert np.max(Q_lambda_Qt - A.reshape(4, 4)) < 1E-14
def test_210(ceed_resource, capsys):
    ceed = libceed.Ceed(ceed_resource)

    ne = 3

    ind = np.zeros(2 * ne, dtype="int32")
    for i in range(ne):
        ind[2 * i + 0] = i + 0
        ind[2 * i + 1] = i + 1
    r = ceed.ElemRestriction(ne, 2, ne + 1, 1, ind, cmode=libceed.USE_POINTER)

    print(r)

    stdout, stderr = capsys.readouterr()
    with open(os.path.abspath("./output/test_210.out")) as output_file:
        true_output = output_file.read()

    assert stdout == true_output
Beispiel #16
0
def test_301(ceed_resource):
    ceed = libceed.Ceed(ceed_resource)

    m = 4
    n = 3
    a = np.array([1, -1, 4, 1, 4, -2, 1, 4, 2, 1, -1, 0], dtype="float64")
    qr = np.array([1, -1, 4, 1, 4, -2, 1, 4, 2, 1, -1, 0], dtype="float64")
    tau = np.empty(3, dtype="float64")

    qr, tau = ceed.qr_factorization(qr, tau, m, n)
    np_qr, np_tau = np.linalg.qr(a.reshape(m, n), mode="raw")

    for i in range(n):
        assert tau[i] == np_tau[i]

    qr = qr.reshape(m, n)
    for i in range(m):
        for j in range(n):
            assert round(qr[i, j] - np_qr[j, i], 10) == 0
def test_410(ceed_resource):
    ceed = libceed.Ceed(ceed_resource)

    qf_setup = ceed.QFunctionByName("Mass1DBuild")
    qf_mass = ceed.QFunctionByName("MassApply")

    q = 8

    j_array = np.zeros(q, dtype="float64")
    w_array = np.zeros(q, dtype="float64")
    u_array = np.zeros(q, dtype="float64")
    v_true = np.zeros(q, dtype="float64")
    for i in range(q):
        x = 2. * i / (q - 1) - 1
        j_array[i] = 1
        w_array[i] = 1 - x * x
        u_array[i] = 2 + 3 * x + 5 * x * x
        v_true[i] = w_array[i] * u_array[i]

    j = ceed.Vector(q)
    j.set_array(j_array, cmode=libceed.USE_POINTER)
    w = ceed.Vector(q)
    w.set_array(w_array, cmode=libceed.USE_POINTER)
    u = ceed.Vector(q)
    u.set_array(u_array, cmode=libceed.USE_POINTER)
    v = ceed.Vector(q)
    v.set_value(0)
    qdata = ceed.Vector(q)
    qdata.set_value(0)

    inputs = [j, w]
    outputs = [qdata]
    qf_setup.apply(q, inputs, outputs)

    inputs = [w, u]
    outputs = [v]
    qf_mass.apply(q, inputs, outputs)

    v_array = v.get_array_read()
    for i in range(q):
        assert v_array[i] == v_true[i]

    v.restore_array_read()
Beispiel #18
0
def test_105(ceed_resource):
    # Skip test for non-GPU backend
    if 'gpu' in ceed_resource:
        ceed = libceed.Ceed(ceed_resource)

        n = 10
        x = ceed.Vector(n)
        y = ceed.Vector(n)

        a = np.arange(10, 10 + n, dtype="float64")
        x.set_array(a, cmode=libceed.USE_POINTER)

        arr = x.get_array_read(memtype=libceed.MEM_DEVICE)
        y.set_array(arr, memtype=libceed.MEM_DEVICE)
        x.restore_array_read()

        with y.array_read() as b:
            for i in range(n):
                assert b[i] == 10 + i
Beispiel #19
0
def test_103(ceed_resource):
    ceed = libceed.Ceed(ceed_resource)

    n = 10

    x = ceed.Vector(n)
    y = ceed.Vector(n)

    a = np.arange(10, 10 + n, dtype="float64")
    x.set_array(a, cmode=libceed.USE_POINTER)

    x_array = x.get_array()
    y.set_array(x_array, cmode=libceed.USE_POINTER)
    x.restore_array()

    y_array = y.get_array_read()
    for i in range(n):
        assert y_array[i] == 10 + i

    y.restore_array_read()
Beispiel #20
0
def test_101(ceed_resource):
    ceed = libceed.Ceed(ceed_resource)
    n = 10
    x = ceed.Vector(n)
    value = 1
    a = np.arange(10, 10 + n, dtype="float64")
    x.set_array(a, cmode=libceed.USE_POINTER)

    with x.array() as b:
        for i in range(len(b)):
            assert b[i] == 10 + i

    x.set_value(3.0)
    check_values(ceed, x, 3.0)
    del x

    x = ceed.Vector(n)
    # Set value before setting or getting the array
    x.set_value(5.0)
    check_values(ceed, x, 5.0)
def test_209(ceed_resource):
    ceed = libceed.Ceed(ceed_resource)

    num_elem = 3

    ind = np.zeros(4 * num_elem, dtype="int32")
    for i in range(num_elem):
        ind[4 * i + 0] = i * 3 + 0
        ind[4 * i + 1] = i * 3 + 1
        ind[4 * i + 2] = i * 3 + 2
        ind[4 * i + 3] = i * 3 + 3
    r = ceed.ElemRestriction(num_elem, 4, 1, 1, 3 * num_elem + 1, ind,
                             cmode=libceed.USE_POINTER)

    mult = r.get_multiplicity()

    with mult.array_read() as mult_array:
        for i in range(3 * num_elem + 1):
            val = 1 + (1 if (i > 0 and i < 3 * num_elem and i % 3 == 0) else 0)
            assert val == mult_array[i]
Beispiel #22
0
def test_201(ceed_resource):
    ceed = libceed.Ceed(ceed_resource)

    num_elem = 3

    x = ceed.Vector(2 * num_elem)
    a = np.arange(10, 10 + 2 * num_elem, dtype=ceed.scalar_type())
    x.set_array(a, cmode=libceed.USE_POINTER)

    strides = np.array([1, 2, 2], dtype="int32")
    r = ceed.StridedElemRestriction(num_elem, 2, 1, 2 * num_elem, strides)

    y = ceed.Vector(2 * num_elem)
    y.set_value(0)

    r.apply(x, y)

    with y.array_read() as y_array:
        for i in range(2 * num_elem):
            assert 10 + i == y_array[i]
Beispiel #23
0
def test_301(ceed_resource):
    ceed = libceed.Ceed(ceed_resource)

    m = 4
    n = 3
    a = np.array([1, -1, 4, 1, 4, -2, 1, 4, 2, 1, -1, 0],
                 dtype=ceed.scalar_type())
    qr = np.array([1, -1, 4, 1, 4, -2, 1, 4, 2, 1, -1, 0],
                  dtype=ceed.scalar_type())
    tau = np.empty(3, dtype=ceed.scalar_type())

    qr, tau = ceed.qr_factorization(qr, tau, m, n)
    np_qr, np_tau = np.linalg.qr(a.reshape(m, n), mode="raw")

    for i in range(n):
        assert abs(tau[i] - np_tau[i]) < TOL

    qr = qr.reshape(m, n)
    for i in range(m):
        for j in range(n):
            assert abs(qr[i, j] - np_qr[j, i]) < TOL
def test_201(ceed_resource):
    ceed = libceed.Ceed(ceed_resource)

    ne = 3

    x = ceed.Vector(2 * ne)
    a = np.arange(10, 10 + 2 * ne, dtype="float64")
    x.set_array(a, cmode=libceed.USE_POINTER)

    r = ceed.IdentityElemRestriction(ne, 2, 2 * ne, 1)

    y = ceed.Vector(2 * ne)
    y.set_value(0)

    r.apply(x, y)

    y_array = y.get_array_read()
    for i in range(2 * ne):
        assert 10 + i == y_array[i]

    y.restore_array_read()
Beispiel #25
0
def test_322(ceed_resource):
    ceed = libceed.Ceed(ceed_resource)

    P, Q, dim = 6, 4, 2

    xr = np.array([0., 0.5, 1., 0., 0.5, 0., 0., 0., 0., 0.5, 0.5, 1.],
                  dtype="float64")
    in_array = np.empty(P, dtype="float64")
    qref = np.empty(dim * Q, dtype="float64")
    qweight = np.empty(Q, dtype="float64")

    interp, grad = bm.buildmats(qref, qweight)

    b = ceed.BasisH1(libceed.TRIANGLE, 1, P, Q, interp, grad, qref, qweight)

    # Interpolate function to quadrature points
    for i in range(P):
        in_array[i] = feval(xr[0 * P + i], xr[1 * P + i])

    in_vec = ceed.Vector(P)
    in_vec.set_array(in_array, cmode=libceed.USE_POINTER)
    out_vec = ceed.Vector(Q)
    out_vec.set_value(0)
    weights_vec = ceed.Vector(Q)
    weights_vec.set_value(0)

    b.apply(1, libceed.EVAL_INTERP, in_vec, out_vec)
    b.apply(1, libceed.EVAL_WEIGHT, libceed.VECTOR_NONE, weights_vec)

    # Check values at quadrature points
    out_array = out_vec.get_array_read()
    weights_array = weights_vec.get_array_read()
    sum = 0
    for i in range(Q):
        sum += out_array[i] * weights_array[i]
    assert math.fabs(sum - 17. / 24.) < 1E-10

    out_vec.restore_array_read()
    weights_vec.restore_array_read()
def test_202(ceed_resource, capsys):
    ceed = libceed.Ceed(ceed_resource)

    ne = 8
    blksize = 5

    x = ceed.Vector(ne + 1)
    a = np.arange(10, 10 + ne + 1, dtype="float64")
    x.set_array(a, cmode=libceed.USE_POINTER)

    ind = np.zeros(2 * ne, dtype="int32")
    for i in range(ne):
        ind[2 * i + 0] = i
        ind[2 * i + 1] = i + 1
    r = ceed.BlockedElemRestriction(ne,
                                    2,
                                    blksize,
                                    ne + 1,
                                    1,
                                    ind,
                                    cmode=libceed.USE_POINTER)

    y = ceed.Vector(2 * blksize * 2)
    y.set_value(0)

    r.apply(x, y)

    print(y)

    x.set_value(0)
    r.T.apply(y, x)
    print(x)

    stdout, stderr = capsys.readouterr()
    with open(os.path.abspath("./output/test_202.out")) as output_file:
        true_output = output_file.read()

    assert stdout == true_output
Beispiel #27
0
def test_323(ceed_resource):
    ceed = libceed.Ceed(ceed_resource)

    P, Q, dim = 6, 4, 2

    xq = np.array([0.2, 0.6, 1. / 3., 0.2, 0.2, 0.2, 1. / 3., 0.6],
                  dtype="float64")
    xr = np.array([0., 0.5, 1., 0., 0.5, 0., 0., 0., 0., 0.5, 0.5, 1.],
                  dtype="float64")
    in_array = np.empty(P, dtype="float64")
    qref = np.empty(dim * Q, dtype="float64")
    qweight = np.empty(Q, dtype="float64")

    interp, grad = bm.buildmats(qref, qweight)

    b = ceed.BasisH1(libceed.TRIANGLE, 1, P, Q, interp, grad, qref, qweight)

    # Interpolate function to quadrature points
    for i in range(P):
        in_array[i] = feval(xr[0 * P + i], xr[1 * P + i])

    in_vec = ceed.Vector(P)
    in_vec.set_array(in_array, cmode=libceed.USE_POINTER)
    out_vec = ceed.Vector(Q * dim)
    out_vec.set_value(0)

    b.apply(1, libceed.EVAL_GRAD, in_vec, out_vec)

    # Check values at quadrature points
    out_array = out_vec.get_array_read()
    for i in range(Q):
        value = dfeval(xq[0 * Q + i], xq[1 * Q + i])
        assert math.fabs(out_array[0 * Q + i] - value) < 1E-10

        value = dfeval(xq[1 * Q + i], xq[0 * Q + i])
        assert math.fabs(out_array[1 * Q + i] - value) < 1E-10

    out_vec.restore_array_read()
Beispiel #28
0
def test_411(ceed_resource):
    ceed = libceed.Ceed(ceed_resource)

    qf = ceed.IdentityQFunction(1, libceed.EVAL_INTERP, libceed.EVAL_INTERP)

    q = 8

    u_array = np.zeros(q, dtype=ceed.scalar_type())
    for i in range(q):
        u_array[i] = i * i

    u = ceed.Vector(q)
    u.set_array(u_array, cmode=libceed.USE_POINTER)
    v = ceed.Vector(q)
    v.set_value(0)

    inputs = [u]
    outputs = [v]
    qf.apply(q, inputs, outputs)

    with v.array_read() as v_array:
        for i in range(q):
            assert v_array[i] == i * i
Beispiel #29
0
def test_108(ceed_resource, capsys):
    ceed = libceed.Ceed(ceed_resource)

    n = 10
    x = ceed.Vector(n)

    a = np.arange(0, n, dtype="float64")
    for i in range(n):
        if (i % 2 == 0):
            a[i] *= -1
    x.set_array(a, cmode=libceed.USE_POINTER)

    norm = x.norm(normtype=libceed.NORM_1)

    assert abs(norm - 45.) < 1e-14

    norm = x.norm()

    assert abs(norm - np.sqrt(285.)) < 1e-14

    norm = x.norm(normtype=libceed.NORM_MAX)

    assert abs(norm - 9.) < 1e-14
Beispiel #30
0
def test_301(ceed_resource, capsys):
    ceed = libceed.Ceed(ceed_resource)

    qr = np.array([1, -1, 4, 1, 4, -2, 1, 4, 2, 1, -1, 0], dtype="float64")
    tau = np.empty(3, dtype="float64")

    qr, tau = libceed.Basis.qr_factorization(ceed, qr, tau, 4, 3)

    for i in range(len(qr)):
        if qr[i] <= 1E-14 and qr[i] >= -1E-14:
            qr[i] = 0
        print("%12.8f" % qr[i])

    for i in range(len(tau)):
        if tau[i] <= 1E-14 and tau[i] >= -1E-14:
            tau[i] = 0
        print("%12.8f" % tau[i])

    stdout, stderr = capsys.readouterr()
    with open(os.path.abspath("./output/test_301.out")) as output_file:
        true_output = output_file.read()

    assert stdout == true_output