Skip to content

Commit e1d2afd

Browse files
done qduffy
1 parent 79ff603 commit e1d2afd

2 files changed

Lines changed: 40 additions & 15 deletions

File tree

include/bem_problem.h

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -128,6 +128,8 @@ class BEMProblem : public ParameterAcceptor
128128
/// in our computations (assemble system and compute_normals-gradients).
129129
void reinit();
130130

131+
const Quadrature<dim-1> & get_singular_quadrature(const unsigned int index) const;
132+
131133
/// This function compute a very specific case, a double node that has a
132134
/// dirichlet-dirichlet condition. In this case there is a constraint for
133135
/// the normal derivative since we want a conitnuos velocity thus a conitnuos

source/bem_problem.cc

Lines changed: 38 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -316,6 +316,42 @@ void BEMProblem<dim>::reinit()
316316

317317
}
318318

319+
320+
template<>
321+
const Quadrature<2> & BEMProblem<3>::get_singular_quadrature(const unsigned int index) const
322+
{
323+
Assert(index < fe->dofs_per_cell,
324+
ExcIndexRange(0, fe->dofs_per_cell, index));
325+
326+
static std::vector<Quadrature<2> > quadratures;
327+
{
328+
if (quadratures.size() == 0)
329+
for (unsigned int i=0; i<fe->dofs_per_cell; ++i)
330+
{
331+
quadratures.push_back(QSplit<2> (QDuffy (singular_quadrature_order,1.),fe->get_unit_support_points()[i]));
332+
}
333+
}
334+
335+
return quadratures[index];
336+
337+
}
338+
339+
template<>
340+
const Quadrature<1> & BEMProblem<2>::get_singular_quadrature(const unsigned int index) const
341+
{
342+
Assert(index < fe->dofs_per_cell,
343+
ExcIndexRange(0, fe->dofs_per_cell, index));
344+
345+
static std::vector<Quadrature<1> > quadratures;
346+
if (quadratures.size() == 0)
347+
for (unsigned int i=0; i<fe->dofs_per_cell; ++i)
348+
{
349+
quadratures.push_back(QTelles<1>(singular_quadrature_order,
350+
fe->get_unit_support_points()[i]));
351+
}
352+
return quadratures[index];
353+
}
354+
319355
template <int dim>
320356
void BEMProblem<dim>::declare_parameters (ParameterHandler &prm)
321357
{
@@ -566,23 +602,10 @@ void BEMProblem<dim>::assemble_system()
566602
dirichlet_matrix = 0;
567603

568604

569-
std::vector<Quadrature<dim-1> > sing_quadratures;
605+
std::vector<Quadrature<dim-1> > sing_quadratures(fe->dofs_per_cell);
570606
for (unsigned int i=0; i<fe->dofs_per_cell; ++i)
571607
{
572-
if (fe->degree > 1)
573-
{
574-
sing_quadratures.push_back(QIterated<dim-1>(QGauss<1> (singular_quadrature_order),fe->degree));
575-
}
576-
else
577-
{
578-
sing_quadratures.push_back
579-
(QTelles<dim-1>(singular_quadrature_order,
580-
fe->get_unit_support_points()[i]));
581-
//
582-
// Usage of alternative singular quadrature formula
583-
// (QGaussOneOverR<dim-1>(singular_quadrature_order,
584-
// fe->get_unit_support_points()[i],true));
585-
}
608+
sing_quadratures[i] = get_singular_quadrature(i);
586609
}
587610

588611

0 commit comments

Comments
 (0)