| Basis.jl (11b88dda510d0aa70e79dc59ad165e2a5539c3c3) | Basis.jl (b2e3f8ecbfa285d0f4ffde9b24c57cc13f0319fb) |
|---|---|
| 1abstract type AbstractBasis end 2 3""" 4 BasisCollocated() 5 6Returns the singleton object corresponding to libCEED's `CEED_BASIS_COLLOCATED`. 7""" 8struct BasisCollocated <: AbstractBasis end --- 112 unchanged lines hidden (view full) --- 121- `topo`: [`Topology`](@ref) of element, e.g. hypercube, simplex, etc. 122- `ncomp`: Number of field components (1 for scalar fields). 123- `nnodes`: Total number of nodes. 124- `nqpts`: Total number of quadrature points. 125- `interp`: Matrix of size `(nqpts, nnodes)` expressing the values of nodal basis functions 126 at quadrature points. 127- `grad`: Array of size `(dim, nqpts, nnodes)` expressing derivatives of nodal basis 128 functions at quadrature points. | 1abstract type AbstractBasis end 2 3""" 4 BasisCollocated() 5 6Returns the singleton object corresponding to libCEED's `CEED_BASIS_COLLOCATED`. 7""" 8struct BasisCollocated <: AbstractBasis end --- 112 unchanged lines hidden (view full) --- 121- `topo`: [`Topology`](@ref) of element, e.g. hypercube, simplex, etc. 122- `ncomp`: Number of field components (1 for scalar fields). 123- `nnodes`: Total number of nodes. 124- `nqpts`: Total number of quadrature points. 125- `interp`: Matrix of size `(nqpts, nnodes)` expressing the values of nodal basis functions 126 at quadrature points. 127- `grad`: Array of size `(dim, nqpts, nnodes)` expressing derivatives of nodal basis 128 functions at quadrature points. |
| 129- `qref`: Array of length `nqpts` holding the locations of quadrature points on the | 129- `qref`: Matrix of size `(dim, nqpts)` holding the locations of quadrature points on the |
| 130 reference element $[-1, 1]$. 131- `qweight`: Array of length `nqpts` holding the quadrature weights on the reference 132 element. 133""" 134function create_h1_basis( 135 c::Ceed, 136 topo::Topology, 137 ncomp, 138 nnodes, 139 nqpts, 140 interp::AbstractArray{CeedScalar}, 141 grad::AbstractArray{CeedScalar}, 142 qref::AbstractArray{CeedScalar}, 143 qweight::AbstractArray{CeedScalar}, 144) 145 dim = getdimension(topo) 146 @assert size(interp) == (nqpts, nnodes) 147 @assert size(grad) == (dim, nqpts, nnodes) | 130 reference element $[-1, 1]$. 131- `qweight`: Array of length `nqpts` holding the quadrature weights on the reference 132 element. 133""" 134function create_h1_basis( 135 c::Ceed, 136 topo::Topology, 137 ncomp, 138 nnodes, 139 nqpts, 140 interp::AbstractArray{CeedScalar}, 141 grad::AbstractArray{CeedScalar}, 142 qref::AbstractArray{CeedScalar}, 143 qweight::AbstractArray{CeedScalar}, 144) 145 dim = getdimension(topo) 146 @assert size(interp) == (nqpts, nnodes) 147 @assert size(grad) == (dim, nqpts, nnodes) |
| 148 @assert length(qref) == nqpts | 148 @assert size(qref) == (dim, nqpts) |
| 149 @assert length(qweight) == nqpts 150 151 # Convert from Julia matrices and tensors (column-major) to row-major format 152 interp_rowmajor = collect(interp') 153 grad_rowmajor = permutedims(grad, [3, 2, 1]) | 149 @assert length(qweight) == nqpts 150 151 # Convert from Julia matrices and tensors (column-major) to row-major format 152 interp_rowmajor = collect(interp') 153 grad_rowmajor = permutedims(grad, [3, 2, 1]) |
| 154 qref_rowmajor = collect(qref') |
|
| 154 155 ref = Ref{C.CeedBasis}() 156 C.CeedBasisCreateH1( 157 c[], 158 topo, 159 ncomp, 160 nnodes, 161 nqpts, 162 interp_rowmajor, 163 grad_rowmajor, | 155 156 ref = Ref{C.CeedBasis}() 157 C.CeedBasisCreateH1( 158 c[], 159 topo, 160 ncomp, 161 nnodes, 162 nqpts, 163 interp_rowmajor, 164 grad_rowmajor, |
| 164 qref, | 165 qref_rowmajor, |
| 165 qweight, 166 ref, 167 ) 168 Basis(ref) 169end 170 171@doc raw""" 172 create_hdiv_basis(c::Ceed, topo::Topology, ncomp, nnodes, nqpts, interp, div, qref, qweight) --- 5 unchanged lines hidden (view full) --- 178- `topo`: [`Topology`](@ref) of element, e.g. hypercube, simplex, etc. 179- `ncomp`: Number of field components (1 for scalar fields). 180- `nnodes`: Total number of nodes. 181- `nqpts`: Total number of quadrature points. 182- `interp`: Matrix of size `(dim, nqpts, nnodes)` expressing the values of basis functions 183 at quadrature points. 184- `div`: Array of size `(nqpts, nnodes)` expressing divergence of basis functions at 185 quadrature points. | 166 qweight, 167 ref, 168 ) 169 Basis(ref) 170end 171 172@doc raw""" 173 create_hdiv_basis(c::Ceed, topo::Topology, ncomp, nnodes, nqpts, interp, div, qref, qweight) --- 5 unchanged lines hidden (view full) --- 179- `topo`: [`Topology`](@ref) of element, e.g. hypercube, simplex, etc. 180- `ncomp`: Number of field components (1 for scalar fields). 181- `nnodes`: Total number of nodes. 182- `nqpts`: Total number of quadrature points. 183- `interp`: Matrix of size `(dim, nqpts, nnodes)` expressing the values of basis functions 184 at quadrature points. 185- `div`: Array of size `(nqpts, nnodes)` expressing divergence of basis functions at 186 quadrature points. |
| 186- `qref`: Array of length `nqpts` holding the locations of quadrature points on the | 187- `qref`: Matrix of size `(dim, nqpts)` holding the locations of quadrature points on the |
| 187 reference element $[-1, 1]$. 188- `qweight`: Array of length `nqpts` holding the quadrature weights on the reference 189 element. 190""" 191function create_hdiv_basis( 192 c::Ceed, 193 topo::Topology, 194 ncomp, 195 nnodes, 196 nqpts, 197 interp::AbstractArray{CeedScalar}, 198 div::AbstractArray{CeedScalar}, 199 qref::AbstractArray{CeedScalar}, 200 qweight::AbstractArray{CeedScalar}, 201) 202 dim = getdimension(topo) 203 @assert size(interp) == (dim, nqpts, nnodes) 204 @assert size(div) == (nqpts, nnodes) | 188 reference element $[-1, 1]$. 189- `qweight`: Array of length `nqpts` holding the quadrature weights on the reference 190 element. 191""" 192function create_hdiv_basis( 193 c::Ceed, 194 topo::Topology, 195 ncomp, 196 nnodes, 197 nqpts, 198 interp::AbstractArray{CeedScalar}, 199 div::AbstractArray{CeedScalar}, 200 qref::AbstractArray{CeedScalar}, 201 qweight::AbstractArray{CeedScalar}, 202) 203 dim = getdimension(topo) 204 @assert size(interp) == (dim, nqpts, nnodes) 205 @assert size(div) == (nqpts, nnodes) |
| 205 @assert length(qref) == nqpts | 206 @assert size(qref) == (dim, nqpts) |
| 206 @assert length(qweight) == nqpts 207 208 # Convert from Julia matrices and tensors (column-major) to row-major format 209 interp_rowmajor = permutedims(interp, [3, 2, 1]) 210 div_rowmajor = collect(div') | 207 @assert length(qweight) == nqpts 208 209 # Convert from Julia matrices and tensors (column-major) to row-major format 210 interp_rowmajor = permutedims(interp, [3, 2, 1]) 211 div_rowmajor = collect(div') |
| 212 qref_rowmajor = collect(qref') |
|
| 211 212 ref = Ref{C.CeedBasis}() 213 C.CeedBasisCreateHdiv( 214 c[], 215 topo, 216 ncomp, 217 nnodes, 218 nqpts, 219 interp_rowmajor, 220 div_rowmajor, | 213 214 ref = Ref{C.CeedBasis}() 215 C.CeedBasisCreateHdiv( 216 c[], 217 topo, 218 ncomp, 219 nnodes, 220 nqpts, 221 interp_rowmajor, 222 div_rowmajor, |
| 221 qref, | 223 qref_rowmajor, |
| 222 qweight, 223 ref, 224 ) 225 Basis(ref) 226end 227 228@doc raw""" 229 create_hcurl_basis(c::Ceed, topo::Topology, ncomp, nnodes, nqpts, interp, curl, qref, qweight) --- 5 unchanged lines hidden (view full) --- 235- `topo`: [`Topology`](@ref) of element, e.g. hypercube, simplex, etc. 236- `ncomp`: Number of field components (1 for scalar fields). 237- `nnodes`: Total number of nodes. 238- `nqpts`: Total number of quadrature points. 239- `interp`: Matrix of size `(dim, nqpts, nnodes)` expressing the values of basis functions 240 at quadrature points. 241- `curl`: Matrix of size `(curlcomp, nqpts, nnodes)`, `curlcomp = 1 if dim < 3 else dim`) 242 matrix expressing curl of basis functions at quadrature points. | 224 qweight, 225 ref, 226 ) 227 Basis(ref) 228end 229 230@doc raw""" 231 create_hcurl_basis(c::Ceed, topo::Topology, ncomp, nnodes, nqpts, interp, curl, qref, qweight) --- 5 unchanged lines hidden (view full) --- 237- `topo`: [`Topology`](@ref) of element, e.g. hypercube, simplex, etc. 238- `ncomp`: Number of field components (1 for scalar fields). 239- `nnodes`: Total number of nodes. 240- `nqpts`: Total number of quadrature points. 241- `interp`: Matrix of size `(dim, nqpts, nnodes)` expressing the values of basis functions 242 at quadrature points. 243- `curl`: Matrix of size `(curlcomp, nqpts, nnodes)`, `curlcomp = 1 if dim < 3 else dim`) 244 matrix expressing curl of basis functions at quadrature points. |
| 243- `qref`: Array of length `nqpts` holding the locations of quadrature points on the | 245- `qref`: Matrix of size `(dim, nqpts)` holding the locations of quadrature points on the |
| 244 reference element $[-1, 1]$. 245- `qweight`: Array of length `nqpts` holding the quadrature weights on the reference 246 element. 247""" 248function create_hcurl_basis( 249 c::Ceed, 250 topo::Topology, 251 ncomp, 252 nnodes, 253 nqpts, 254 interp::AbstractArray{CeedScalar}, 255 curl::AbstractArray{CeedScalar}, 256 qref::AbstractArray{CeedScalar}, 257 qweight::AbstractArray{CeedScalar}, 258) 259 dim = getdimension(topo) 260 curlcomp = dim < 3 ? 1 : dim 261 @assert size(interp) == (dim, nqpts, nnodes) 262 @assert size(curl) == (curlcomp, nqpts, nnodes) | 246 reference element $[-1, 1]$. 247- `qweight`: Array of length `nqpts` holding the quadrature weights on the reference 248 element. 249""" 250function create_hcurl_basis( 251 c::Ceed, 252 topo::Topology, 253 ncomp, 254 nnodes, 255 nqpts, 256 interp::AbstractArray{CeedScalar}, 257 curl::AbstractArray{CeedScalar}, 258 qref::AbstractArray{CeedScalar}, 259 qweight::AbstractArray{CeedScalar}, 260) 261 dim = getdimension(topo) 262 curlcomp = dim < 3 ? 1 : dim 263 @assert size(interp) == (dim, nqpts, nnodes) 264 @assert size(curl) == (curlcomp, nqpts, nnodes) |
| 263 @assert length(qref) == nqpts | 265 @assert size(qref) == (dim, nqpts) |
| 264 @assert length(qweight) == nqpts 265 266 # Convert from Julia matrices and tensors (column-major) to row-major format 267 interp_rowmajor = permutedims(interp, [3, 2, 1]) 268 curl_rowmajor = permutedims(curl, [3, 2, 1]) | 266 @assert length(qweight) == nqpts 267 268 # Convert from Julia matrices and tensors (column-major) to row-major format 269 interp_rowmajor = permutedims(interp, [3, 2, 1]) 270 curl_rowmajor = permutedims(curl, [3, 2, 1]) |
| 271 qref_rowmajor = collect(qref') |
|
| 269 270 ref = Ref{C.CeedBasis}() 271 C.CeedBasisCreateHcurl( 272 c[], 273 topo, 274 ncomp, 275 nnodes, 276 nqpts, 277 interp_rowmajor, 278 curl_rowmajor, | 272 273 ref = Ref{C.CeedBasis}() 274 C.CeedBasisCreateHcurl( 275 c[], 276 topo, 277 ncomp, 278 nnodes, 279 nqpts, 280 interp_rowmajor, 281 curl_rowmajor, |
| 279 qref, | 282 qref_rowmajor, |
| 280 qweight, 281 ref, 282 ) 283 Basis(ref) 284end 285 286""" 287 apply!(b::Basis, nelem, tmode::TransposeMode, emode::EvalMode, u::AbstractCeedVector, v::AbstractCeedVector) --- 35 unchanged lines hidden (view full) --- 323""" 324function apply(b::Basis, u::AbstractVector; nelem=1, tmode=NOTRANSPOSE, emode=EVAL_INTERP) 325 ceed_ref = Ref{C.Ceed}() 326 ccall((:CeedBasisGetCeed, C.libceed), Cint, (C.CeedBasis, Ptr{C.Ceed}), b[], ceed_ref) 327 c = Ceed(ceed_ref) 328 329 u_vec = CeedVector(c, u) 330 | 283 qweight, 284 ref, 285 ) 286 Basis(ref) 287end 288 289""" 290 apply!(b::Basis, nelem, tmode::TransposeMode, emode::EvalMode, u::AbstractCeedVector, v::AbstractCeedVector) --- 35 unchanged lines hidden (view full) --- 326""" 327function apply(b::Basis, u::AbstractVector; nelem=1, tmode=NOTRANSPOSE, emode=EVAL_INTERP) 328 ceed_ref = Ref{C.Ceed}() 329 ccall((:CeedBasisGetCeed, C.libceed), Cint, (C.CeedBasis, Ptr{C.Ceed}), b[], ceed_ref) 330 c = Ceed(ceed_ref) 331 332 u_vec = CeedVector(c, u) 333 |
| 331 len_v = (tmode == TRANSPOSE) ? getnumnodes(b) : getnumqpts(b) 332 if emode == EVAL_GRAD 333 len_v *= getdimension(b) 334 end | 334 qcomp = Ref{CeedInt}() 335 C.CeedBasisGetNumQuadratureComponents(b[], emode, qcomp) 336 len_v = (tmode == TRANSPOSE) ? getnumnodes(b) : qcomp[]*getnumqpts(b) |
| 335 336 v_vec = CeedVector(c, len_v) 337 338 apply!(b, nelem, tmode, emode, u_vec, v_vec) 339 Vector(v_vec) 340end 341 342""" --- 89 unchanged lines hidden (view full) --- 432[`Basis`](@ref). 433""" 434function getqref(b::Basis) 435 istensor = Ref{Bool}() 436 C.CeedBasisIsTensor(b[], istensor) 437 ref = Ref{Ptr{CeedScalar}}() 438 C.CeedBasisGetQRef(b[], ref) 439 copy( | 337 338 v_vec = CeedVector(c, len_v) 339 340 apply!(b, nelem, tmode, emode, u_vec, v_vec) 341 Vector(v_vec) 342end 343 344""" --- 89 unchanged lines hidden (view full) --- 434[`Basis`](@ref). 435""" 436function getqref(b::Basis) 437 istensor = Ref{Bool}() 438 C.CeedBasisIsTensor(b[], istensor) 439 ref = Ref{Ptr{CeedScalar}}() 440 C.CeedBasisGetQRef(b[], ref) 441 copy( |
| 440 unsafe_wrap( 441 Array, 442 ref[], 443 istensor[] ? getnumqpts1d(b) : (getnumqpts(b)*getdimension(b)), 444 ), | 442 istensor[] ? unsafe_wrap(Array, ref[], getnumqpts1d(b)) : 443 unsafe_wrap(Array, ref[], (getnumqpts(b), getdimension(b)))', |
| 445 ) 446end 447 448""" 449 getqref(b::Basis) 450 451Get the quadrature weights of quadrature points (in `dim` dimensions) of the given 452[`Basis`](@ref). --- 104 unchanged lines hidden --- | 444 ) 445end 446 447""" 448 getqref(b::Basis) 449 450Get the quadrature weights of quadrature points (in `dim` dimensions) of the given 451[`Basis`](@ref). --- 104 unchanged lines hidden --- |