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