Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion Project.toml
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
name = "FiniteElementContainers"
uuid = "d08262e4-672f-4e7f-a976-f2cea5767631"
version = "0.9.3"
version = "0.9.4"
authors = ["Craig M. Hamel <[email protected]> and contributors"]

[deps]
Expand Down
10 changes: 5 additions & 5 deletions ext/FiniteElementContainersAMDGPUExt.jl
Original file line number Diff line number Diff line change
Expand Up @@ -14,7 +14,7 @@ FiniteElementContainers.rocm(x) = Adapt.adapt_structure(ROCArray, x)
function AMDGPU.rocSPARSE.ROCSparseMatrixCSC(asm::SparseMatrixAssembler)
# Not sure if the line below is right on AMD
@assert typeof(get_backend(asm)) <: ROCBackend "Assembler is not on a AMDGPU device"
@assert length(asm.pattern.cscnzval) > 0 "Need to assemble the assembler once with SparseArrays.sparse!(assembler)"
@assert length(asm.matrix_pattern.cscnzval) > 0 "Need to assemble the assembler once with SparseArrays.sparse!(assembler)"

# below assertion isn't corect
# @assert all(x -> x != zero(eltype(asm.pattern.cscnzval)), asm.pattern.cscnzval) "Need to assemble the assembler once with SparseArrays.sparse!(assembler)"
Expand All @@ -28,14 +28,14 @@ function AMDGPU.rocSPARSE.ROCSparseMatrixCSC(asm::SparseMatrixAssembler)
end

return AMDGPU.rocSPARSE.ROCSparseMatrixCSC(
asm.pattern.csccolptr,
asm.pattern.cscrowval,
asm.pattern.cscnzval,
asm.matrix_pattern.csccolptr,
asm.matrix_pattern.cscrowval,
asm.matrix_pattern.cscnzval,
(n_dofs, n_dofs)
)
end

function FiniteElementContainers._stiffness(asm::SparseMatrixAssembler, backend::ROCBackend)
function FiniteElementContainers._stiffness(asm::SparseMatrixAssembler, ::ROCBackend)
stiffness = AMDGPU.rocSPARSE.ROCSparseMatrixCSC(asm)
return stiffness
end
Expand Down
6 changes: 3 additions & 3 deletions ext/FiniteElementContainersCUDAExt.jl
Original file line number Diff line number Diff line change
Expand Up @@ -23,9 +23,9 @@ function CUDA.CUSPARSE.CuSparseMatrixCSC(asm::SparseMatrixAssembler)
end

return CUDA.CUSPARSE.CuSparseMatrixCSC(
asm.pattern.csccolptr,
asm.pattern.cscrowval,
asm.pattern.cscnzval,
asm.matrix_pattern.csccolptr,
asm.matrix_pattern.cscrowval,
asm.matrix_pattern.cscnzval,
(n_dofs, n_dofs)
)
end
Expand Down
59 changes: 33 additions & 26 deletions src/assemblers/Assemblers.jl
Original file line number Diff line number Diff line change
Expand Up @@ -88,32 +88,32 @@ function _assemble_element!(global_val::H1Field, local_val, conn, e, b)
return nothing
end

function _check_backends(assembler, U, X, state_old, state_new, conns)
backend = KA.get_backend(assembler)
# TODO add get_backend method of ref_fe
@assert backend == KA.get_backend(U)
@assert backend == KA.get_backend(X)
@assert backend == KA.get_backend(conns)
@assert backend == KA.get_backend(state_old)
@assert backend == KA.get_backend(state_new)
# props will be complicated...
# TODO
return backend
end
# function _check_backends(assembler, U, X, state_old, state_new, conns)
# backend = KA.get_backend(assembler)
# # TODO add get_backend method of ref_fe
# @assert backend == KA.get_backend(U)
# @assert backend == KA.get_backend(X)
# @assert backend == KA.get_backend(conns)
# @assert backend == KA.get_backend(state_old)
# @assert backend == KA.get_backend(state_new)
# # props will be complicated...
# # TODO
# return backend
# end

function _check_backends(assembler, U, V, X, state_old, state_new, conns)
backend = KA.get_backend(assembler)
# TODO add get_backend method of ref_fe
@assert backend == KA.get_backend(U)
@assert backend == KA.get_backend(V)
@assert backend == KA.get_backend(X)
@assert backend == KA.get_backend(conns)
@assert backend == KA.get_backend(state_old)
@assert backend == KA.get_backend(state_new)
# props will be complicated...
# TODO
return backend
end
# function _check_backends(assembler, U, V, X, state_old, state_new, conns)
# backend = KA.get_backend(assembler)
# # TODO add get_backend method of ref_fe
# @assert backend == KA.get_backend(U)
# @assert backend == KA.get_backend(V)
# @assert backend == KA.get_backend(X)
# @assert backend == KA.get_backend(conns)
# @assert backend == KA.get_backend(state_old)
# @assert backend == KA.get_backend(state_new)
# # props will be complicated...
# # TODO
# return backend
# end

"""
$(TYPEDSIGNATURES)
Expand Down Expand Up @@ -147,6 +147,13 @@ $(TYPEDSIGNATURES)
return u_el
end

"""
$(TYPEDSIGNATURES)
"""
@inline function _element_level_properties(props::AbstractArray, ::Int)
return props
end

"""
$(TYPEDSIGNATURES)
"""
Expand Down Expand Up @@ -261,7 +268,7 @@ function stiffness(assembler::AbstractAssembler)
end

# some utilities
include("SparsityPattern.jl")
include("SparsityPatterns.jl")

# types
include("MatrixFreeAssembler.jl")
Expand Down
19 changes: 11 additions & 8 deletions src/assemblers/Matrix.jl
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@ function assemble_mass!(
assembler, func::F, Uu, p
) where F <: Function
assemble_matrix!(
assembler.mass_storage, assembler.pattern, assembler.dof,
assembler.mass_storage, assembler.matrix_pattern, assembler.dof,
func, Uu, p
)
end
Expand All @@ -11,7 +11,7 @@ function assemble_stiffness!(
assembler, func::F, Uu, p
) where F <: Function
assemble_matrix!(
assembler.stiffness_storage, assembler.pattern, assembler.dof,
assembler.stiffness_storage, assembler.matrix_pattern, assembler.dof,
func, Uu, p
)
end
Expand Down Expand Up @@ -71,8 +71,9 @@ function _assemble_block_matrix!(
F2 <: AbstractField,
F3 <: AbstractField,
Func <: Function,
P <: Union{<:SVector, <:L2ElementField},
Patt <: SparsityPattern,
# P <: Union{<:SVector, <:L2ElementField},
P <: AbstractArray,
Patt <: SparseMatrixPattern,
Phys <: AbstractPhysics,
R <: ReferenceFE,
S <: L2QuadratureField,
Expand Down Expand Up @@ -113,8 +114,9 @@ KA.@kernel function _assemble_block_matrix_kernel!(
F2 <: AbstractField,
F3 <: AbstractField,
Func <: Function,
P <: Union{<:SVector, <:L2ElementField},
Patt <: SparsityPattern,
# P <: Union{<:SVector, <:L2ElementField},
P <: AbstractArray,
Patt <: SparseMatrixPattern,
Phys <: AbstractPhysics,
R <: ReferenceFE,
S <: L2QuadratureField,
Expand Down Expand Up @@ -166,8 +168,9 @@ function _assemble_block_matrix!(
F2 <: AbstractField,
F3 <: AbstractField,
Func <: Function,
P <: Union{<:SVector, <:L2ElementField},
Patt <: SparsityPattern,
# P <: Union{<:SVector, <:L2ElementField},
P <: AbstractArray,
Patt <: SparseMatrixPattern,
Phys <: AbstractPhysics,
R <: ReferenceFE,
S <: L2QuadratureField,
Expand Down
38 changes: 30 additions & 8 deletions src/assemblers/MatrixAction.jl
Original file line number Diff line number Diff line change
@@ -1,20 +1,39 @@
"""
$(TYPEDSIGNATURES)
"""
function assemble_matrix_action!(
assembler, func::F, Uu, Vu, p
) where F <: Function
assemble_matrix_action!(
assembler.stiffness_action_storage,
assembler.dof,
func, Uu, Vu, p
)
return nothing
end

"""
$(TYPEDSIGNATURES)
"""
function assemble_matrix_action!(
assembler, func, Uu, Vu, p
# assembler, func, Uu, Vu, p
storage, dof, func, Uu, Vu, p
)
storage = assembler.stiffness_action_storage
# storage = assembler.stiffness_action_storage
fill!(storage, zero(eltype(storage)))
fspace = function_space(assembler.dof)
fspace = function_space(dof)
t = current_time(p.times)
Δt = time_step(p.times)
_update_for_assembly!(p, assembler.dof, Uu, Vu)
_update_for_assembly!(p, dof, Uu, Vu)
for (b, (conns, block_physics, state_old, state_new, props)) in enumerate(zip(
values(fspace.elem_conns),
values(p.physics),
values(p.state_old), values(p.state_new),
values(p.properties)
))
ref_fe = values(fspace.ref_fes)[b]
backend = _check_backends(assembler, p.h1_field, p.h1_hvp_scratch_field, p.h1_coords, state_old, state_new, conns)
# backend = _check_backends(assembler, p.h1_field, p.h1_hvp_scratch_field, p.h1_coords, state_old, state_new, conns)
backend = KA.get_backend(p.h1_field)
_assemble_block_matrix_action!(
storage, block_physics, ref_fe,
p.h1_field, p.h1_field_old, p.h1_hvp_scratch_field, p.h1_coords, state_old, state_new, props, t, Δt,
Expand Down Expand Up @@ -44,7 +63,8 @@ function _assemble_block_matrix_action!(
F2 <: AbstractField,
F3 <: AbstractField,
F4 <: AbstractField,
P <: Union{<:SVector, <:L2ElementField},
# P <: Union{<:SVector, <:L2ElementField},
P <: AbstractArray,
Func <: Function,
Phys <: AbstractPhysics,
R <: ReferenceFE,
Expand Down Expand Up @@ -93,7 +113,8 @@ KA.@kernel function _assemble_block_matrix_action_kernel!(
F3 <: AbstractField,
F4 <: AbstractField,
Func <: Function,
P <: Union{<:SVector, <:L2ElementField},
# P <: Union{<:SVector, <:L2ElementField},
P <: AbstractArray,
Phys <: AbstractPhysics,
R <: ReferenceFE,
S <: L2QuadratureField,
Expand Down Expand Up @@ -149,7 +170,8 @@ function _assemble_block_matrix_action!(
F3 <: AbstractField,
F4 <: AbstractField,
Func <: Function,
P <: Union{<:SVector, <:L2ElementField},
# P <: Union{<:SVector, <:L2ElementField},
P <: AbstractArray,
Phys <: AbstractPhysics,
R <: ReferenceFE,
S <: L2QuadratureField,
Expand Down
21 changes: 18 additions & 3 deletions src/assemblers/NeumannBC.jl
Original file line number Diff line number Diff line change
@@ -1,16 +1,31 @@
# # below method implicitly will not zero out arrays
"""
$(TYPEDSIGNATURES)
"""
function assemble_vector_neumann_bc!(
assembler, Uu, p
)
storage = assembler.residual_storage
assemble_vector_neumann_bc!(
assembler.residual_storage,
assembler.dof,
Uu, p
)
return nothing
end

# # below method implicitly will not zero out arrays
"""
$(TYPEDSIGNATURES)
"""
function assemble_vector_neumann_bc!(
# assembler, Uu, p
storage, dof, Uu, p
)
# storage = assembler.residual_storage
# do not zero!
t = current_time(p.times)
# TODO should below 2 methods calls be assumed to have
# been conducted previously?
_update_for_assembly!(p, assembler.dof, Uu)
_update_for_assembly!(p, dof, Uu)
for bc in values(p.neumann_bcs.bc_caches)
backend = KA.get_backend(bc)
_assemble_block_vector_neumann_bc!(
Expand Down
9 changes: 6 additions & 3 deletions src/assemblers/QuadratureQuantity.jl
Original file line number Diff line number Diff line change
Expand Up @@ -60,7 +60,8 @@ function _assemble_block_quadrature_quantity!(
F1 <: AbstractMatrix,
F2 <: AbstractField,
F3 <: AbstractField,
P <: Union{<:SVector, <:L2ElementField},
# P <: Union{<:SVector, <:L2ElementField},
P <: AbstractArray,
Func <: Function,
Phys <: AbstractPhysics,
R <: ReferenceFE,
Expand Down Expand Up @@ -104,7 +105,8 @@ KA.@kernel function _assemble_block_quadrature_quantity_kernel!(
F2 <: AbstractField,
F3 <: AbstractField,
Func <: Function,
P <: Union{<:SVector, <:L2ElementField},
# P <: Union{<:SVector, <:L2ElementField},
P <: AbstractArray,
Phys <: AbstractPhysics,
R <: ReferenceFE,
S <: L2QuadratureField,
Expand Down Expand Up @@ -147,7 +149,8 @@ function _assemble_block_quadrature_quantity!(
F2 <: AbstractField,
F3 <: AbstractField,
Func <: Function,
P <: Union{<:SVector, <:L2ElementField},
# P <: Union{<:SVector, <:L2ElementField},
P <: AbstractArray,
Phys <: AbstractPhysics,
R <: ReferenceFE,
S <: L2QuadratureField,
Expand Down
Loading
Loading