Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Reorder fe spaces in forms #195

Merged
merged 19 commits into from
Feb 27, 2020
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 bench/ArraysBenchs/ApplyBenchs.jl
Original file line number Diff line number Diff line change
Expand Up @@ -82,7 +82,7 @@ end

for n in (1,1,10,1000,100000)
@eval begin
println("+++ runing suite for n = $($n) +++")
println("+++ running suite for n = $($n) +++")
bench1($n)
bench2($n)
bench3($n)
Expand Down
2 changes: 1 addition & 1 deletion bench/ArraysBenchs/KernelsBenchs.jl
Original file line number Diff line number Diff line change
Expand Up @@ -67,7 +67,7 @@ end

for n in (1,1,10,1000,100000)
@eval begin
println("+++ runing suite for n = $($n) +++")
println("+++ running suite for n = $($n) +++")
bench1($n)
bench2($n)
bench3($n)
Expand Down
2 changes: 1 addition & 1 deletion bench/FieldsBenchs/AttachmapBenchs.jl
Original file line number Diff line number Diff line change
Expand Up @@ -44,7 +44,7 @@ end

for n in (1,1,10,1000,100000)
@eval begin
println("+++ runing suite for n = $($n) +++")
println("+++ running suite for n = $($n) +++")
bench1($n)
end
end
Expand Down
2 changes: 1 addition & 1 deletion bench/FieldsBenchs/ComposeBenchs.jl
Original file line number Diff line number Diff line change
Expand Up @@ -161,7 +161,7 @@ end

for n in (1,1,10,1000,100000)
@eval begin
println("+++ runing suite for n = $($n) +++")
println("+++ running suite for n = $($n) +++")
bench1($n)
bench2($n)
bench3($n)
Expand Down
2 changes: 1 addition & 1 deletion bench/FieldsBenchs/ConstantFieldsBenchs.jl
Original file line number Diff line number Diff line change
Expand Up @@ -34,7 +34,7 @@ end

for n in (1,1,10,1000,100000)
@eval begin
println("+++ runing suite for n = $($n) +++")
println("+++ running suite for n = $($n) +++")
bench1($n)
bench2($n)
end
Expand Down
2 changes: 1 addition & 1 deletion bench/FieldsBenchs/FieldApplyBenchs.jl
Original file line number Diff line number Diff line change
Expand Up @@ -66,7 +66,7 @@ end

for n in (1,1,10,1000,100000)
@eval begin
println("+++ runing suite for n = $($n) +++")
println("+++ running suite for n = $($n) +++")
bench1($n)
#bench3($n)
#bench4($n)
Expand Down
2 changes: 1 addition & 1 deletion bench/FieldsBenchs/FieldArraysBenchs.jl
Original file line number Diff line number Diff line change
Expand Up @@ -129,7 +129,7 @@ end

for n in (1,1,10,1000,100000)
@eval begin
println("+++ runing suite for n = $($n) +++")
println("+++ running suite for n = $($n) +++")
bench1($n)
bench2($n)
bench2a($n)
Expand Down
2 changes: 1 addition & 1 deletion bench/FieldsBenchs/FieldOperationsBenchs.jl
Original file line number Diff line number Diff line change
Expand Up @@ -56,7 +56,7 @@ end

for n in (1,1,10,1000,100000)
@eval begin
println("+++ runing suite for n = $($n) +++")
println("+++ running suite for n = $($n) +++")
bench1($n)
end
end
Expand Down
2 changes: 1 addition & 1 deletion bench/FieldsBenchs/IntegrateBenchs.jl
Original file line number Diff line number Diff line change
Expand Up @@ -141,7 +141,7 @@ end

for n in (1,1,10,1000,100000)
@eval begin
println("+++ runing suite for n = $($n) +++")
println("+++ running suite for n = $($n) +++")
bench1($n)
bench2($n)
bench3($n)
Expand Down
2 changes: 1 addition & 1 deletion bench/FieldsBenchs/LincombBenchs.jl
Original file line number Diff line number Diff line change
Expand Up @@ -80,7 +80,7 @@ end

for n in (1,1,10,1000,100000)
@eval begin
println("+++ runing suite for n = $($n) +++")
println("+++ running suite for n = $($n) +++")
bench1($n)
bench2($n)
end
Expand Down
2 changes: 1 addition & 1 deletion bench/FieldsBenchs/MockFieldsBenchs.jl
Original file line number Diff line number Diff line change
Expand Up @@ -41,7 +41,7 @@ end

for n in (1,1,10,1000,100000)
@eval begin
println("+++ runing suite for n = $($n) +++")
println("+++ running suite for n = $($n) +++")
bench1($n)
bench2($n)
end
Expand Down
2 changes: 1 addition & 1 deletion bench/PolynomialsBenchs/MonomialBasesBenchs.jl
Original file line number Diff line number Diff line change
Expand Up @@ -51,7 +51,7 @@ end

for n in (1,1,10,1000,100000)
@eval begin
println("+++ runing suite for n = $($n) +++")
println("+++ running suite for n = $($n) +++")
bench1($n)
bench2($n)
end
Expand Down
29 changes: 14 additions & 15 deletions src/FESpaces/AffineFEOperators.jl
Original file line number Diff line number Diff line change
Expand Up @@ -2,28 +2,28 @@
"""
"""
struct AffineFEOperator <: FEOperator
test::FESpace
trial::FESpace
test::FESpace
op::AffineOperator
end

"""
"""
function AffineFEOperator(test::FESpace,trial::FESpace,matrix::AbstractMatrix,vector::AbstractVector)
@assert num_free_dofs(test) == size(matrix,1) "Incompatible test space and matrix"
function AffineFEOperator(trial::FESpace,test::FESpace,matrix::AbstractMatrix,vector::AbstractVector)
@assert num_free_dofs(trial) == size(matrix,2) "Incompatible trial space and matrix"
@assert num_free_dofs(test) == size(matrix,1) "Incompatible test space and matrix"
op = AffineOperator(matrix,vector)
AffineFEOperator(test,trial,op)
AffineFEOperator(trial,test,op)
end

"""
AffineFEOperator(test::FESpace,trial::FESpace,assem::Assembler,terms::AffineFETerm...)
AffineFEOperator(test::FESpace,trial::FESpace,terms::AffineFETerm...)
"""
function AffineFEOperator(test::FESpace,trial::FESpace,assem::Assembler,terms::AffineFETerm...)
function AffineFEOperator(trial::FESpace,test::FESpace,assem::Assembler,terms::AffineFETerm...)

v = get_cell_basis(test)
u = get_cell_basis(trial)
v = get_cell_basis(test)
@assert is_trial(u)

uhd = zero(trial)
Expand All @@ -36,23 +36,23 @@ function AffineFEOperator(test::FESpace,trial::FESpace,assem::Assembler,terms::A
#A = assemble_matrix(assem,matdata...)
#b = assemble_vector(assem,vecdata...)

AffineFEOperator(test,trial,A,b)
AffineFEOperator(trial,test,A,b)
end

function AffineFEOperator(test::FESpace,trial::FESpace,terms::AffineFETerm...)
function AffineFEOperator(trial::FESpace,test::FESpace,terms::AffineFETerm...)
assem = SparseMatrixAssembler(test,trial)
AffineFEOperator(test,trial,assem,terms...)
AffineFEOperator(trial,test,assem,terms...)
end

function AffineFEOperator(mat::Type{<:AbstractSparseMatrix},test::FESpace,trial::FESpace,terms::AffineFETerm...)
assem = SparseMatrixAssembler(mat,test,trial)
AffineFEOperator(test,trial,assem,terms...)
function AffineFEOperator(mat::Type{<:AbstractSparseMatrix},trial::FESpace,test::FESpace,terms::AffineFETerm...)
assem = SparseMatrixAssembler(mat,trial,test)
AffineFEOperator(trial,test,assem,terms...)
end

get_trial(feop::AffineFEOperator) = feop.trial

get_test(feop::AffineFEOperator) = feop.test

get_trial(feop::AffineFEOperator) = feop.trial

"""
"""
get_matrix(feop::AffineFEOperator) = get_matrix(feop.op)
Expand Down Expand Up @@ -98,4 +98,3 @@ function jacobian(feop::AffineFEOperator,u)
x = get_free_values(u)
jacobian(feop.op,x)
end

27 changes: 13 additions & 14 deletions src/FESpaces/FEOperatorsFromTerms.jl
Original file line number Diff line number Diff line change
@@ -1,30 +1,30 @@

struct FEOperatorFromTerms <: FEOperator
test::FESpace
trial::FESpace
test::FESpace
assem::Assembler
terms
function FEOperatorFromTerms(test::FESpace,trial::FESpace,assem::Assembler,terms::FETerm...)
new(test,trial,assem,terms)
function FEOperatorFromTerms(trial::FESpace,test::FESpace,assem::Assembler,terms::FETerm...)
new(trial,test,assem,terms)
end
end

"""
"""
function FEOperator(test::FESpace,trial::FESpace,assem::Assembler,terms::FETerm...)
FEOperatorFromTerms(test,trial,assem,terms...)
function FEOperator(trial::FESpace,test::FESpace,assem::Assembler,terms::FETerm...)
FEOperatorFromTerms(trial,test,assem,terms...)
end

"""
"""
function FEOperator(test::FESpace,trial::FESpace,terms::FETerm...)
function FEOperator(trial::FESpace,test::FESpace,terms::FETerm...)
assem = SparseMatrixAssembler(test,trial)
FEOperator(test,trial,assem,terms...)
FEOperator(trial,test,assem,terms...)
end

function FEOperator(mat::Type{<:AbstractSparseMatrix},test::FESpace,trial::FESpace,terms::FETerm...)
function FEOperator(mat::Type{<:AbstractSparseMatrix},trial::FESpace,test::FESpace,terms::FETerm...)
assem = SparseMatrixAssembler(mat,test,trial)
FEOperator(test,trial,assem,terms...)
FEOperator(trial,test,assem,terms...)
end

function get_test(op::FEOperatorFromTerms)
Expand Down Expand Up @@ -52,36 +52,35 @@ end

function allocate_jacobian(op::FEOperatorFromTerms,uh)
@assert is_a_fe_function(uh)
v = get_cell_basis(op.test)
du = get_cell_basis(op.trial)
v = get_cell_basis(op.test)
_, cellidsrows, cellidscols = collect_cell_jacobian(uh,v,du,op.terms)
allocate_matrix(op.assem, cellidsrows, cellidscols)
end

function jacobian!(A::AbstractMatrix,op::FEOperatorFromTerms,uh)
@assert is_a_fe_function(uh)
v = get_cell_basis(op.test)
du = get_cell_basis(op.trial)
v = get_cell_basis(op.test)
cellmats, cellidsrows, cellidscols = collect_cell_jacobian(uh,v,du,op.terms)
assemble_matrix!(A,op.assem, cellmats, cellidsrows, cellidscols)
A
end

function residual_and_jacobian!(b::AbstractVector,A::AbstractMatrix,op::FEOperatorFromTerms,uh)
@assert is_a_fe_function(uh)
v = get_cell_basis(op.test)
du = get_cell_basis(op.trial)
v = get_cell_basis(op.test)
data = collect_cell_jacobian_and_residual(uh,v,du,op.terms)
assemble_matrix_and_vector!(A, b, op.assem,data...)
(b,A)
end

function residual_and_jacobian(op::FEOperatorFromTerms,uh)
@assert is_a_fe_function(uh)
v = get_cell_basis(op.test)
du = get_cell_basis(op.trial)
v = get_cell_basis(op.test)
data = collect_cell_jacobian_and_residual(uh,v,du,op.terms)
A, b = assemble_matrix_and_vector(op.assem,data...)
(b, A)
end

23 changes: 11 additions & 12 deletions src/FESpaces/FETerms.jl
Original file line number Diff line number Diff line change
Expand Up @@ -327,15 +327,15 @@ function get_cell_matrix(t::AffineFETermFromIntegration,v,u)
@assert is_a_fe_cell_basis(u)
_v = restrict(v,t.trian)
_u = restrict(u,t.trian)
integrate(t.biform(_v,_u),t.trian,t.quad)
integrate(t.biform(_u,_v),t.trian,t.quad)
end

function get_cell_vector(t::AffineFETermFromIntegration,v,uhd)
@assert is_a_fe_function(uhd)
@assert is_a_fe_cell_basis(v)
_v = restrict(v,t.trian)
_uhd = restrict(uhd,t.trian)
integrate(t.liform(_v)-t.biform(_v,_uhd),t.trian,t.quad)
integrate(t.liform(_v)-t.biform(_uhd,_v),t.trian,t.quad)
end

function get_cell_vector(t::AffineFETermFromIntegration,v)
Expand All @@ -349,7 +349,7 @@ function get_cell_residual(t::AffineFETermFromIntegration,uh,v)
@assert is_a_fe_cell_basis(v)
_v = restrict(v,t.trian)
_uh = restrict(uh,t.trian)
integrate(t.biform(_v,_uh)-t.liform(_v),t.trian,t.quad)
integrate(t.biform(_uh,_v)-t.liform(_v),t.trian,t.quad)
end

function get_cell_id(t::AffineFETermFromIntegration)
Expand Down Expand Up @@ -429,15 +429,15 @@ function get_cell_matrix(t::LinearFETermFromIntegration,v,u)
@assert is_a_fe_cell_basis(u)
_v = restrict(v,t.trian)
_u = restrict(u,t.trian)
integrate(t.biform(_v,_u),t.trian,t.quad)
integrate(t.biform(_u,_v),t.trian,t.quad)
end

function get_cell_vector(t::LinearFETermFromIntegration,v,uhd)
@assert is_a_fe_function(uhd)
@assert is_a_fe_cell_basis(v)
_v = restrict(v,t.trian)
_uhd = restrict(uhd,t.trian)
integrate(-t.biform(_v,_uhd),t.trian,t.quad)
integrate(-t.biform(_uhd,_v),t.trian,t.quad)
end

function get_cell_vector(t::LinearFETermFromIntegration,v)
Expand All @@ -450,10 +450,10 @@ function get_cell_residual(t::LinearFETermFromIntegration,uh,v)
@assert is_a_fe_cell_basis(v)
_v = restrict(v,t.trian)
_uh = restrict(uh,t.trian)
integrate(t.biform(_v,_uh),t.trian,t.quad)
integrate(t.biform(_uh,_v),t.trian,t.quad)
end

function get_cell_id(t::LinearFETermFromIntegration)
function get_cell_id(t::LinearFETermFromIntegration)
get_cell_id(t.trian)
end

Expand Down Expand Up @@ -484,7 +484,7 @@ function get_cell_jacobian(t::NonLinearFETerm,uh,v,du)
_v = restrict(v,t.trian)
_uh = restrict(uh,t.trian)
_du = restrict(du,t.trian)
integrate(t.jac(_uh,_v,_du),t.trian,t.quad)
integrate(t.jac(_uh,_du,_v),t.trian,t.quad)
end

function get_cell_residual(t::NonLinearFETerm,uh,v)
Expand Down Expand Up @@ -569,7 +569,7 @@ function get_cell_jacobian(t::FETermFromCellJacRes,uh,v,du)
_v = restrict(v,t.trian)
_du = restrict(du,t.trian)
_uh = restrict(uh,t.trian)
celljacres = t.jacresfun(_uh,_v,_du)
celljacres = t.jacresfun(_uh,_du,_v)
celljac, _ = unpair_arrays(celljacres)
celljac
end
Expand All @@ -582,7 +582,7 @@ function get_cell_residual(t::FETermFromCellJacRes,uh,v)
_v = restrict(v,t.trian)
_du = restrict(du,t.trian)
_uh = restrict(uh,t.trian)
celljacres = t.jacresfun(_uh,_v,_du)
celljacres = t.jacresfun(_uh,_du,_v)
_, cellres = unpair_arrays(celljacres)
cellres
end
Expand All @@ -598,7 +598,6 @@ function get_cell_jacobian_and_residual(t::FETermFromCellJacRes,uh,v,du)
_v = restrict(v,t.trian)
_du = restrict(du,t.trian)
_uh = restrict(uh,t.trian)
celljacres = t.jacresfun(_uh,_v,_du)
celljacres = t.jacresfun(_uh,_du,_v)
(celljacres, nothing, nothing)
end

8 changes: 4 additions & 4 deletions test/FESpacesTests/AffineFEOperatorsTests.jl
Original file line number Diff line number Diff line change
Expand Up @@ -41,7 +41,7 @@ assem = SparseMatrixAssembler(V,U)
A = assemble_matrix(assem,[cellmat],[cellids],[cellids])
b = assemble_vector(assem,[cellvec],[cellids])

op = AffineFEOperator(V,U,A,b)
op = AffineFEOperator(U,V,A,b)
@test A === get_matrix(op)
@test b === get_vector(op)

Expand Down Expand Up @@ -69,12 +69,12 @@ t_Ω = AffineFETerm(a,l,trian,quad)

assem = SparseMatrixAssembler(V,U)

op = AffineFEOperator(V,U,assem,t_Ω)
op = AffineFEOperator(U,V,assem,t_Ω)
uh = solve(op)
e = u_sol - uh
@test sum(integrate(e*e,trian,quad)) < tol

op = AffineFEOperator(V,U,t_Ω)
op = AffineFEOperator(U,V,t_Ω)
uh = solve(op)
e = u_sol - uh
@test sum(integrate(e*e,trian,quad)) < tol
Expand Down Expand Up @@ -111,7 +111,7 @@ end

t_Ω = AffineFETermFromCellMatVec(cellmatvec_Ω,trian)

op = AffineFEOperator(V,U,assem,t_Ω)
op = AffineFEOperator(U,V,assem,t_Ω)
uh = solve(op)
e = u_sol - uh
@test sum(integrate(e*e,trian,quad)) < tol
Expand Down
Loading