@@ -316,6 +316,44 @@ 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+
327+
328+ static std::vector<Quadrature<2 > > quadratures;
329+ {
330+ if (quadratures.size () == 0 )
331+ for (unsigned int i=0 ; i<fe->dofs_per_cell ; ++i)
332+ {
333+ quadratures.push_back (QSplit<2 > (QDuffy (singular_quadrature_order,1 .),fe->get_unit_support_points ()[i]));
334+ }
335+ }
336+
337+ return quadratures[index];
338+
339+ }
340+
341+ template <>
342+ const Quadrature<1 > &BEMProblem<2 >::get_singular_quadrature(const unsigned int index) const
343+ {
344+ Assert (index < fe->dofs_per_cell ,
345+ ExcIndexRange (0 , fe->dofs_per_cell , index));
346+
347+ static std::vector<Quadrature<1 > > quadratures;
348+ if (quadratures.size () == 0 )
349+ for (unsigned int i=0 ; i<fe->dofs_per_cell ; ++i)
350+ {
351+ quadratures.push_back (QTelles<1 >(singular_quadrature_order,
352+ fe->get_unit_support_points ()[i]));
353+ }
354+ return quadratures[index];
355+ }
356+
319357template <int dim>
320358void BEMProblem<dim>::declare_parameters (ParameterHandler &prm)
321359{
@@ -566,25 +604,6 @@ void BEMProblem<dim>::assemble_system()
566604 dirichlet_matrix = 0 ;
567605
568606
569- std::vector<Quadrature<dim-1 > > sing_quadratures;
570- for (unsigned int i=0 ; i<fe->dofs_per_cell ; ++i)
571- {
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- }
586- }
587-
588607
589608 // Next, we initialize an FEValues
590609 // object with the quadrature
@@ -945,8 +964,7 @@ void BEMProblem<dim>::assemble_system()
945964
946965 const Quadrature<dim-1 > *
947966 singular_quadrature
948- = dynamic_cast <Quadrature<dim-1 >*>(
949- &sing_quadratures[singular_index]);
967+ = &(get_singular_quadrature (singular_index));
950968 Assert (singular_quadrature, ExcInternalError ());
951969
952970 FEValues<dim-1 ,dim> fe_v_singular (*mapping, *fe, *singular_quadrature,
0 commit comments