Skip to content

Commit

Permalink
Merge branch 'gfset_bonus_intorder' into 'master'
Browse files Browse the repository at this point in the history
GridFunction.Set bonusintorder

See merge request jschoeberl/ngsolve!1135
  • Loading branch information
JSchoeberl committed Sep 30, 2021
2 parents e6628e2 + 285f7f2 commit 788873c
Show file tree
Hide file tree
Showing 3 changed files with 32 additions and 17 deletions.
25 changes: 14 additions & 11 deletions comp/postproc.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -388,7 +388,8 @@ namespace ngcomp
DifferentialOperator * diffop,
LocalHeap & clh,
bool dualdiffop = false, bool use_simd = true, int mdcomp = 0,
optional<shared_ptr<BitArray>> definedonelements = nullopt)
optional<shared_ptr<BitArray>> definedonelements = nullopt,
int bonus_intorder = 0)
{
static Timer sv("timer setvalues"); RegionTimer r(sv);

Expand Down Expand Up @@ -508,7 +509,7 @@ namespace ngcomp
Facet2ElementTrafo f2el (fel.ElementType(), el_vb);
for (int locfnr : Range(f2el.GetNFacets()))
{
SIMD_IntegrationRule irfacet(f2el.FacetType(locfnr), 2 * fel.Order());
SIMD_IntegrationRule irfacet(f2el.FacetType(locfnr), 2 * fel.Order()+bonus_intorder);
auto & irvol = f2el(locfnr, irfacet, lh);
auto & mir = eltrans(irvol, lh);

Expand Down Expand Up @@ -587,7 +588,7 @@ namespace ngcomp
for (int locfnr : Range(f2el.GetNFacets()))
{
HeapReset hr(lh);
IntegrationRule irfacet(f2el.FacetType(locfnr), 2 * fel.Order());
IntegrationRule irfacet(f2el.FacetType(locfnr), 2 * fel.Order() + bonus_intorder);
auto & irvol = f2el(locfnr, irfacet, lh);
auto & mir = eltrans(irvol, lh);
// mir.ComputeNormalsAndMeasure(fel.ElementType(), locfnr);
Expand Down Expand Up @@ -712,7 +713,7 @@ namespace ngcomp
{
try
{
SIMD_IntegrationRule ir(fel.ElementType(), 2*fel.Order());
SIMD_IntegrationRule ir(fel.ElementType(), 2*fel.Order() + bonus_intorder);
FlatMatrix<SIMD<SCAL>> mfluxi(dimflux, ir.Size(), lh);

auto & mir = eltrans(ir, lh);
Expand Down Expand Up @@ -784,7 +785,7 @@ namespace ngcomp
}
}

IntegrationRule ir(fel.ElementType(), 2*fel.Order());
IntegrationRule ir(fel.ElementType(), 2*fel.Order() + bonus_intorder);
FlatMatrix<SCAL> mfluxi(ir.GetNIP(), dimflux, lh);

BaseMappedIntegrationRule & mir = eltrans(ir, lh);
Expand Down Expand Up @@ -889,12 +890,13 @@ namespace ngcomp
bool dualdiffop,
bool use_simd,
int mdcomp,
optional<shared_ptr<BitArray>> definedonelements)
optional<shared_ptr<BitArray>> definedonelements,
int bonus_intorder)
{
if (u.GetFESpace()->IsComplex())
SetValues<Complex> (coef, u, vb, nullptr, diffop, clh, dualdiffop, use_simd, mdcomp, definedonelements);
SetValues<Complex> (coef, u, vb, nullptr, diffop, clh, dualdiffop, use_simd, mdcomp, definedonelements, bonus_intorder);
else
SetValues<double> (coef, u, vb, nullptr, diffop, clh, dualdiffop, use_simd, mdcomp, definedonelements);
SetValues<double> (coef, u, vb, nullptr, diffop, clh, dualdiffop, use_simd, mdcomp, definedonelements, bonus_intorder);
}

NGS_DLL_HEADER void SetValues (shared_ptr<CoefficientFunction> coef,
Expand All @@ -903,12 +905,13 @@ namespace ngcomp
DifferentialOperator * diffop,
LocalHeap & clh,
bool dualdiffop, bool use_simd, int mdcomp,
optional<shared_ptr<BitArray>> definedonelements)
optional<shared_ptr<BitArray>> definedonelements,
int bonus_intorder)
{
if (u.GetFESpace()->IsComplex())
SetValues<Complex> (coef, u, reg.VB(), &reg, diffop, clh, dualdiffop, use_simd, mdcomp, definedonelements);
SetValues<Complex> (coef, u, reg.VB(), &reg, diffop, clh, dualdiffop, use_simd, mdcomp, definedonelements, bonus_intorder);
else
SetValues<double> (coef, u, reg.VB(), &reg, diffop, clh, dualdiffop, use_simd, mdcomp, definedonelements);
SetValues<double> (coef, u, reg.VB(), &reg, diffop, clh, dualdiffop, use_simd, mdcomp, definedonelements, bonus_intorder);
}


Expand Down
6 changes: 4 additions & 2 deletions comp/postproc.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -42,7 +42,8 @@ namespace ngcomp
DifferentialOperator * diffop, // NULL is FESpace evaluator
LocalHeap & clh,
bool dualdiffop = false, bool use_simd = true, int mdcomp=0,
optional<shared_ptr<BitArray>> definedonelements = nullopt);
optional<shared_ptr<BitArray>> definedonelements = nullopt,
int bonus_intorder=0);

extern NGS_DLL_HEADER
void SetValues (shared_ptr<CoefficientFunction> coef,
Expand All @@ -51,7 +52,8 @@ namespace ngcomp
DifferentialOperator * diffop, // NULL is FESpace evaluator
LocalHeap & clh,
bool dualdiffop = false, bool use_simd = true, int mdcomp=0,
optional<shared_ptr<BitArray>> definedonelements = nullopt);
optional<shared_ptr<BitArray>> definedonelements = nullopt,
int bonus_intorder=0);


template <class SCAL>
Expand Down
18 changes: 14 additions & 4 deletions comp/python_comp.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -1925,7 +1925,7 @@ parallel : bool
)raw_string"))
.def("Set",
[](shared_ptr<GF> self, spCF cf,
VorB vb, py::object definedon, bool dualdiffop, bool use_simd, int mdcomp, optional<shared_ptr<BitArray>> definedonelements)
VorB vb, py::object definedon, bool dualdiffop, bool use_simd, int mdcomp, optional<shared_ptr<BitArray>> definedonelements, int bonus_intorder)
{
shared_ptr<TPHighOrderFESpace> tpspace = dynamic_pointer_cast<TPHighOrderFESpace>(self->GetFESpace());
Region * reg = nullptr;
Expand All @@ -1940,17 +1940,18 @@ parallel : bool
return;
}
if (reg)
SetValues (cf, *self, *reg, NULL, glh, dualdiffop, use_simd, mdcomp, definedonelements);
SetValues (cf, *self, *reg, NULL, glh, dualdiffop, use_simd, mdcomp, definedonelements, bonus_intorder);
else
SetValues (cf, *self, vb, NULL, glh, dualdiffop, use_simd, mdcomp, definedonelements);
SetValues (cf, *self, vb, NULL, glh, dualdiffop, use_simd, mdcomp, definedonelements, bonus_intorder);
},
py::arg("coefficient"),
py::arg("VOL_or_BND")=VOL,
py::arg("definedon")=DummyArgument(),
py::arg("dual")=false,
py::arg("use_simd")=true,
py::arg("mdcomp")=0,
py::arg("definedonelements")=nullopt,
py::arg("definedonelements")=nullopt,
py::arg("bonus_intorder")=0,
docu_string(R"raw_string(
Set values

Expand All @@ -1972,6 +1973,15 @@ dual : bool
use_simd : bool
If set to false does not use SIMD (for debugging).

mdcomp : int
.

definedonelements : nullopt
.

bonus_intorder : int
Increase numerical integration order.

)raw_string"))

.def("Interpolate",
Expand Down

0 comments on commit 788873c

Please sign in to comment.