Hello all,

I am modifying step-33 to introduce MeshWorker. Since this needs other class 
variables, I am trying to use boost::bind to bind the class pointer. Here is 
the main stuff:

class ConservationLaw
{

 ...
 typedef dealii::MeshWorker::DoFInfo<dim> DoFInfo;
 typedef dealii::MeshWorker::IntegrationInfo<dim> CellInfo;

 static void integrate_cell_term (DoFInfo& dinfo, CellInfo& info);
 static void integrate_boundary_term (DoFInfo& dinfo, CellInfo& info);
 static void integrate_face_term (DoFInfo& dinfo1, DoFInfo& dinfo2,
CellInfo& info1, CellInfo& info2);

 ...

}

The functions are implemented like this

template <int dim>
void ConservationLaw<dim>::integrate_cell_term (DoFInfo& dinfo,
 CellInfo& info)

{
...
}

template <int dim>
void ConservationLaw<dim>::integrate_boundary_term (
 DoFInfo& dinfo,
 CellInfo& info)

{
...
}

template <int dim>
void ConservationLaw<dim>::integrate_face_term (
 DoFInfo& dinfo1, DoFInfo& dinfo2,
 CellInfo& info1, CellInfo& info2)
{

...
}

Finally, the assemble function is

template <int dim>
void ConservationLaw<dim>::assemble_system (Integrator<dim>& integrator)
{
 std::cout << "start assemble\n";
 MeshWorker::integration_loop<dim, dim>
 (dof_handler.begin_active(), dof_handler.end(),
integrator.dof_info,
integrator.info_box,
boost::bind(&ConservationLaw<dim>::integrate_cell_term,
this, _1, _2),
boost::bind(&ConservationLaw<dim>::integrate_boundary_term,
this, _1, _2),
boost::bind(&ConservationLaw<dim>::integrate_face_term,
this, _1, _2, _3, _4),
integrator.assembler, true);

 system_matrix.compress ();
}



But compiling the code gives me lot of boost errors:

$ make
============================ Remaking Makefile.dep
==============debug========= claw.cc -> claw.g.o
/Users/praveen/Applications/deal.II/7.0.0/contrib/boost/include/boost/bind/bind.hpp:
 In instantiation of ‘boost::_bi::result_traits<boost::_bi::unspecified, void 
(*)(dealii::MeshWorker::DoFInfo<2, 2, double>&, 
dealii::MeshWorker::IntegrationInfo<2, 2>&)>’:
/Users/praveen/Applications/deal.II/7.0.0/contrib/boost/include/boost/bind/bind_template.hpp:15:
  instantiated from ‘boost::_bi::bind_t<boost::_bi::unspecified, void 
(*)(dealii::MeshWorker::DoFInfo<2, 2, double>&, 
dealii::MeshWorker::IntegrationInfo<2, 2>&), 
boost::_bi::list3<boost::_bi::value<ConservationLaw<2>*>, boost::arg<1>, 
boost::arg<2> > >’
claw.cc:725:  instantiated from ‘void 
ConservationLaw<dim>::assemble_system(Integrator<dim>&) [with int dim = 2]’
claw.cc:1180:  instantiated from ‘void ConservationLaw<dim>::run() [with int 
dim = 2]’
claw.cc:1288:  instantiated from here
/Users/praveen/Applications/deal.II/7.0.0/contrib/boost/include/boost/bind/bind.hpp:69:
 error: ‘void (*)(dealii::MeshWorker::DoFInfo<2, 2, double>&, 
dealii::MeshWorker::IntegrationInfo<2, 2>&)’ is not a class, struct, or union 
type


What am I doing wrong ?

Thanks
praveen


_______________________________________________
dealii mailing list http://poisson.dealii.org/mailman/listinfo/dealii

Reply via email to