From 258bd740b7a3de8a32b3af55dd3a53b29cabeaa9 Mon Sep 17 00:00:00 2001 From: PaulOlyslager <Paul.olyslager@ugent.be> Date: Thu, 14 Nov 2024 14:12:40 +0100 Subject: [PATCH] assign quadrature stratigies --- src/equation.jl | 1 + src/quadstrat.jl | 40 ++++++++++++++++++++++++++++++++++++++++ 2 files changed, 41 insertions(+) create mode 100644 src/equation.jl create mode 100644 src/quadstrat.jl diff --git a/src/equation.jl b/src/equation.jl new file mode 100644 index 0000000..49c7163 --- /dev/null +++ b/src/equation.jl @@ -0,0 +1 @@ +# make it possible to add equations, introduce a zero object for the rhs \ No newline at end of file diff --git a/src/quadstrat.jl b/src/quadstrat.jl new file mode 100644 index 0000000..70062df --- /dev/null +++ b/src/quadstrat.jl @@ -0,0 +1,40 @@ +# make it possible to assign a quadstrat to a specific operator or to a linear combination of operators + +struct AssignQuadStrat <: BEAST.AbstractOperator + op::BEAST.AbstractOperator + qs +end +# struct DefaultQuadstrat end +# AssignQuadStrat(op,qs::DefaultQuadstrat) = op +# function AssignQuadStrat(op::AssignQuadStrat,qs) +# @warn "tryed but failed to overwrite quadstrat "*string(typeof(op.qs))*" assigned to "*string(typeof(op))*" with "*string(typeof(qs)) +# op +# end +# assign_quadstrat(op::Operator, qs::AbstractQuadStrat) = AssignQuadStrat(op, qs) +# operatortype(a::AbstractQuadStrat) = error("assign operatortype for quadstrat "*string(typeof(a))) + +# assign_quadstrat(op::LinearCombinationOfOperators, qs::AbstractQuadStrat) = sum([c*assign_quadstrat(opi, qs) for (c,opi) in zip(op.coeffs,op.ops)]) +# function assign_quadstrat(op::LinearCombinationOfOperators, qss::Vector{<:AbstractQuadStrat}) +# assign_quadstrat(op,qss,operatortype.(qss)) +# end +# function assign_quadstrat(op::LinearCombinationOfOperators, qss::Vector{<:AbstractQuadStrat}, operator_types::Vector) +# return sum([c*assign_quadstrat(opi,qss[findfirst(x-> typeof(opi) ∈ x ,operator_types)]) for (c,opi) in zip(op.coeffs,op.ops)]) +# end + +# assign_quadstrat(op::BilForm, qs) = BilForm(op.test_space,op.trial_space,assign_quadstrat(op.terms,qs)) +# assign_quadstrat(op::BilTerm, qs) = BilTerm(op.test_id,op.trial_id,op.test_ops,op.trial_ops,op.coeff,assign_quadstrat(op.kernel,qs)) + +# assign_quadstrat(op::BilForm, qs, types) = BilForm(op.test_space,op.trial_space,assign_quadstrat(op.terms,qs,types)) +# assign_quadstrat(op::BilTerm, qs, types) = BilTerm(op.test_id,op.trial_id,op.test_ops,op.trial_ops,op.coeff,assign_quadstrat(op.kernel,qs,types)) +# scalartype(a::AssignQuadStrat) = scalartype(a.operator_types) + +function BEAST.assemble!(op::AssignQuadStrat,test_functions::BEAST.Space, trial_functions::BEAST.Space, + store, threading;quadstrat=nothing) + BEAST.assemble!(op.op,test_functions,trial_functions,store,threading; quadstrat=op.qs) +end + +function BEAST.assemble(op::AssignQuadStrat, test_functions, trial_functions; + storage_policy = Val{:bandedstorage}, + quadstrat=nothing) + BEAST.assemble(op, test_functions, trial_functions; storage_policy=storage_policy, quadstrat=op.qs) +end \ No newline at end of file