xref: /libCEED/julia/LibCEED.jl/test/rundevtests.jl (revision edf0491998c1d524f2f70fdd683669b8904cb3b6)
1a697ff73SWill Paznerusing Test, LibCEED, LinearAlgebra, StaticArrays
2a697ff73SWill Pazner
3b2e3f8ecSSebastian Grimberginclude("buildmats.jl")
4b2e3f8ecSSebastian Grimberg
5*edf04919SJeremy L Thompsonfunction checkoutput(str, fname)
6*edf04919SJeremy L Thompson    if str != getoutput(fname)
7*edf04919SJeremy L Thompson        write(fname, str)
8*edf04919SJeremy L Thompson        return false
9*edf04919SJeremy L Thompson    end
10*edf04919SJeremy L Thompson    return true
11*edf04919SJeremy L Thompsonend
12*edf04919SJeremy L Thompson
13b2e3f8ecSSebastian Grimberg@testset "LibCEED Development Tests" begin
14b2e3f8ecSSebastian Grimberg    @testset "Basis" begin
15b2e3f8ecSSebastian Grimberg        c = Ceed()
16*edf04919SJeremy L Thompson        dim = 3
17*edf04919SJeremy L Thompson        ncomp = 1
18*edf04919SJeremy L Thompson        p = 4
19*edf04919SJeremy L Thompson        q = 6
20*edf04919SJeremy L Thompson        b1 = create_tensor_h1_lagrange_basis(c, dim, ncomp, p, q, GAUSS_LOBATTO)
21*edf04919SJeremy L Thompson
22*edf04919SJeremy L Thompson        @test checkoutput(showstr(b1), "b1.out")
23*edf04919SJeremy L Thompson
24*edf04919SJeremy L Thompson        b1d = CeedScalar[1.0 0.0; 0.5 0.5; 0.0 1.0]
25*edf04919SJeremy L Thompson        d1d = CeedScalar[-0.5 0.5; -0.5 0.5; -0.5 0.5]
26*edf04919SJeremy L Thompson        q1d = CeedScalar[-1.0, 0.0, 1.0]
27*edf04919SJeremy L Thompson        w1d = CeedScalar[1/3, 4/3, 1/3]
28*edf04919SJeremy L Thompson        q, p = size(b1d)
29*edf04919SJeremy L Thompson        d2d = zeros(CeedScalar, 2, q*q, p*p)
30*edf04919SJeremy L Thompson        d2d[1, :, :] = kron(b1d, d1d)
31*edf04919SJeremy L Thompson        d2d[2, :, :] = kron(d1d, b1d)
32*edf04919SJeremy L Thompson
33*edf04919SJeremy L Thompson        dim2 = 2
34*edf04919SJeremy L Thompson        b2 = create_tensor_h1_basis(c, dim2, 1, p, q, b1d, d1d, q1d, w1d)
35*edf04919SJeremy L Thompson        @test checkoutput(showstr(b2), "b2.out")
36*edf04919SJeremy L Thompson
37*edf04919SJeremy L Thompson        b3 = create_h1_basis(
38*edf04919SJeremy L Thompson            c,
39*edf04919SJeremy L Thompson            LINE,
40*edf04919SJeremy L Thompson            1,
41*edf04919SJeremy L Thompson            p,
42*edf04919SJeremy L Thompson            q,
43*edf04919SJeremy L Thompson            b1d,
44*edf04919SJeremy L Thompson            reshape(d1d, 1, q, p),
45*edf04919SJeremy L Thompson            reshape(q1d, 1, q),
46*edf04919SJeremy L Thompson            w1d,
47*edf04919SJeremy L Thompson        )
48*edf04919SJeremy L Thompson        @test checkoutput(showstr(b3), "b3.out")
49*edf04919SJeremy L Thompson
50b2e3f8ecSSebastian Grimberg        dim = 2
51b2e3f8ecSSebastian Grimberg        ncomp = 1
52b2e3f8ecSSebastian Grimberg        p1 = 4
53b2e3f8ecSSebastian Grimberg        q1 = 4
54b2e3f8ecSSebastian Grimberg        qref1 = Array{Float64}(undef, dim, q1)
55b2e3f8ecSSebastian Grimberg        qweight1 = Array{Float64}(undef, q1)
56b2e3f8ecSSebastian Grimberg        interp1, div1 = build_mats_hdiv(qref1, qweight1)
57b2e3f8ecSSebastian Grimberg        b1 = create_hdiv_basis(c, QUAD, ncomp, p1, q1, interp1, div1, qref1, qweight1)
58b2e3f8ecSSebastian Grimberg
59b2e3f8ecSSebastian Grimberg        u1 = ones(Float64, p1)
60b2e3f8ecSSebastian Grimberg        v1 = apply(b1, u1)
61b2e3f8ecSSebastian Grimberg
62b2e3f8ecSSebastian Grimberg        for i = 1:q1
63b2e3f8ecSSebastian Grimberg            @test v1[i] ≈ -1.0
64b2e3f8ecSSebastian Grimberg            @test v1[q1+i] ≈ 1.0
65b2e3f8ecSSebastian Grimberg        end
66b2e3f8ecSSebastian Grimberg
67b2e3f8ecSSebastian Grimberg        p2 = 3
68b2e3f8ecSSebastian Grimberg        q2 = 4
69b2e3f8ecSSebastian Grimberg        qref2 = Array{Float64}(undef, dim, q2)
70b2e3f8ecSSebastian Grimberg        qweight2 = Array{Float64}(undef, q2)
71b2e3f8ecSSebastian Grimberg        interp2, curl2 = build_mats_hcurl(qref2, qweight2)
72b2e3f8ecSSebastian Grimberg        b2 = create_hcurl_basis(c, TRIANGLE, ncomp, p2, q2, interp2, curl2, qref2, qweight2)
73b2e3f8ecSSebastian Grimberg
74b2e3f8ecSSebastian Grimberg        u2 = [1.0, 2.0, 1.0]
75b2e3f8ecSSebastian Grimberg        v2 = apply(b2, u2)
76b2e3f8ecSSebastian Grimberg
77b2e3f8ecSSebastian Grimberg        for i = 1:q2
78b2e3f8ecSSebastian Grimberg            @test v2[i] ≈ 1.0
79b2e3f8ecSSebastian Grimberg        end
80b2e3f8ecSSebastian Grimberg
81b2e3f8ecSSebastian Grimberg        u2[1] = -1.0
82b2e3f8ecSSebastian Grimberg        u2[2] = 1.0
83b2e3f8ecSSebastian Grimberg        u2[3] = 2.0
84b2e3f8ecSSebastian Grimberg        v2 = apply(b2, u2)
85b2e3f8ecSSebastian Grimberg
86b2e3f8ecSSebastian Grimberg        for i = 1:q2
87b2e3f8ecSSebastian Grimberg            @test v2[q2+i] ≈ 1.0
88b2e3f8ecSSebastian Grimberg        end
89b2e3f8ecSSebastian Grimberg    end
90b2e3f8ecSSebastian Grimbergend
91