Hi Wolfgang,
I've been looking at a few sources regarding FE_Enriched:
I've been trying to get my problem class to work with a placeholder enrichment function from example (B), but I'm getting tripped up.
I looked at the formatting on Line 146 of fe_enriched.cc:
FE_Enriched<dim, spacedim>::FE_Enriched(
const FiniteElement<dim, spacedim> &fe_base,
const FiniteElement<dim, spacedim> &fe_enriched,
const Function<spacedim> * enrichment_function)
I have tried to implement this format in the constructor for my problem class. I am trying to set fe_base as FE_Q, and then fe_enriched as another FE_Q multiplied
by the enrichment function.
template <int dim, int spacedim>
shElast<dim, spacedim>::shElast(
const std::string & initial_mesh_filename,
const std::string & output_filename)
: fe( FE_Q<dim>(1) ,
FE_Q<dim>(1) ,
enrichment)
, dof_handler(triangulation)
, quadrature_formula(fe.degree + 1)
, initial_mesh_filename(initial_mesh_filename)
, output_filename(output_filename)
, mapping( FE_Q<dim>(1))
{}
where I've previously declared:
Triangulation<dim> triangulation;
const FE_Enriched<dim> fe;
DoFHandler<dim> dof_handler;
const QGauss<dim> quadrature_formula;
const MappingFE<dim> mapping;
EnrichmentFunction<dim> enrichment;
When I try to compile my program, I get this error:
dealii/examples/enrich/enrich9.cc:324:25: error: no matching function for call to ‘dealii::FE_Enriched<3, 3>::FE_Enriched(dealii::FE_Q<3, 3>, dealii::FE_Q<3, 3>, problem_namespace::EnrichmentFunction<3>&)’
324 | , mapping( FE_Q<dim>(1))
Then I get the following notes about my arguments and failure to find conversions:
In file included from dealii/examples/enrich/enrich9.cc:53:
fe/fe_enriched.h:263:3: note: candidate: ‘dealii::FE_Enriched<dim, spacedim>::FE_Enriched(const std::vector<const dealii::FiniteElement<dimension_, space_dimension_>*>&, const std::vector<unsigned int>&, const std::vector<std::vector<std::function<const dealii::Function<spacedim>*(const typename dealii::Triangulation<dim, spacedim>::cell_iterator&)> > >&) [with int dim = 3; int spacedim = 3; typename dealii::Triangulation<dim, spacedim>::cell_iterator = dealii::TriaIterator<dealii::CellAccessor<3, 3> >]’
263 | FE_Enriched(
| ^~~~~~~~~~~
deal.II/fe/fe_enriched.h:264:62: note: no known conversion for argument 1 from ‘dealii::FE_Q<3, 3>’ to ‘const std::vector<const dealii::FiniteElement<3, 3>*, std::allocator<const dealii::FiniteElement<3, 3>*> >&’
264 | const std::vector<const FiniteElement<dim, spacedim> *> &fes,
| ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^~~
deal.II/fe/fe_enriched.h:249:3: note: candidate: ‘dealii::FE_Enriched<dim, spacedim>::FE_Enriched(const dealii::FiniteElement<dimension_, space_dimension_>*, const std::vector<const dealii::FiniteElement<dimension_, space_dimension_>*>&, const std::vector<std::vector<std::function<const dealii::Function<spacedim>*(const typename dealii::Triangulation<dim, spacedim>::cell_iterator&)> > >&) [with int dim = 3; int spacedim = 3; typename dealii::Triangulation<dim, spacedim>::cell_iterator = dealii::TriaIterator<dealii::CellAccessor<3, 3> >]’
249 | FE_Enriched(
| ^~~~~~~~~~~
deal.II/fe/fe_enriched.h:250:62: note: no known conversion for argument 1 from ‘dealii::FE_Q<3, 3>’ to ‘const dealii::FiniteElement<3, 3>*’
250 | const FiniteElement<dim, spacedim> * fe_base,
| ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^~~~~~~
deal.II/fe/fe_enriched.h:200:3: note: candidate: ‘dealii::FE_Enriched<dim, spacedim>::FE_Enriched(const dealii::FiniteElement<dimension_, space_dimension_>&) [with int dim = 3; int spacedim = 3]’
200 | FE_Enriched(const FiniteElement<dim, spacedim> &fe_base);
| ^~~~~~~~~~~
deal.II/fe/fe_enriched.h:200:3: note: candidate expects 1 argument, 3 provided
deal.II/fe/fe_enriched.h:186:3: note: candidate: ‘dealii::FE_Enriched<dim, spacedim>::FE_Enriched(const dealii::FiniteElement<dimension_, space_dimension_>&, const dealii::FiniteElement<dimension_, space_dimension_>&, const dealii::Function<spacedim>*) [with int dim = 3; int spacedim = 3]’
186 | FE_Enriched(const FiniteElement<dim, spacedim> &fe_base,
| ^~~~~~~~~~~
deal.II/fe/fe_enriched.h:188:51: note: no known conversion for argument 3 from ‘shell::EnrichmentFunction<3>’ to ‘const dealii::Function<3, double>*’
188 | const Function<spacedim> * enrichment_function);
| ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^~~~~~~~~~~~~~~~~~~
It seems that I'm misunderstanding a few things about how FE_Enriched works. Can you see what I'm doing wrong in constructing the FE_Enriched? It looks like there's issues with forms I am using for FE_Q and the enrichment function. Do you have any tips or suggested resources?
Many thanks,
Alex