1function build_mats_hdiv(qref, qweight, ::Type{T}=Float64) where {T} 2 P, Q, dim = 4, 4, 2 3 interp = Array{T}(undef, dim, Q, P) 4 div = Array{T}(undef, Q, P) 5 6 qref[1, 1] = -1.0/sqrt(3.0) 7 qref[1, 2] = qref[1, 1] 8 qref[1, 3] = qref[1, 1] 9 qref[1, 4] = -qref[1, 1] 10 qref[2, 1] = -qref[1, 1] 11 qref[2, 2] = -qref[1, 1] 12 qref[2, 3] = qref[1, 1] 13 qref[2, 4] = qref[1, 1] 14 qweight[1] = 1.0 15 qweight[2] = 1.0 16 qweight[3] = 1.0 17 qweight[4] = 1.0 18 19 # Loop over quadrature points 20 for i = 1:Q 21 x1 = qref[1, i] 22 x2 = qref[2, i] 23 # Interp 24 interp[1, i, 1] = 0.0 25 interp[2, i, 1] = 1.0 - x2 26 interp[1, i, 2] = x1 - 1.0 27 interp[2, i, 2] = 0.0 28 interp[1, i, 3] = -x1 29 interp[2, i, 3] = 0.0 30 interp[1, i, 4] = 0.0 31 interp[2, i, 4] = x2 32 # Div 33 div[i, 1] = -1.0 34 div[i, 2] = 1.0 35 div[i, 3] = -1.0 36 div[i, 4] = 1.0 37 end 38 39 return interp, div 40end 41 42function build_mats_hcurl(qref, qweight, ::Type{T}=Float64) where {T} 43 P, Q, dim = 3, 4, 2 44 interp = Array{T}(undef, dim, Q, P) 45 curl = Array{T}(undef, 1, Q, P) 46 47 qref[1, 1] = 0.2 48 qref[1, 2] = 0.6 49 qref[1, 3] = 1.0/3.0 50 qref[1, 4] = 0.2 51 qref[2, 1] = 0.2 52 qref[2, 2] = 0.2 53 qref[2, 3] = 1.0/3.0 54 qref[2, 4] = 0.6 55 qweight[1] = 25.0/96.0 56 qweight[2] = 25.0/96.0 57 qweight[3] = -27.0/96.0 58 qweight[4] = 25.0/96.0 59 60 # Loop over quadrature points 61 for i = 1:Q 62 x1 = qref[1, i] 63 x2 = qref[2, i] 64 # Interp 65 interp[1, i, 1] = -x2 66 interp[2, i, 1] = x1 67 interp[1, i, 2] = x2 68 interp[2, i, 2] = 1.0 - x1 69 interp[1, i, 3] = 1.0 - x2 70 interp[2, i, 3] = x1 71 # Curl 72 curl[1, i, 1] = 2.0 73 curl[1, i, 2] = -2.0 74 curl[1, i, 3] = -2.0 75 end 76 77 return interp, curl 78end 79