| FEFieldFunction has the same number of components of the underlying dofhandler. If that has one component, then so does the FEFieldFunction. What you could do is wrap the FEFieldFunction into another function, e.g.
You could pass a lambda function as an argument to the constructor of the function, that uses your FEFieldFunction object, I.e.,
VectorFucntionFromScalarFuncObj<dim> my_fun([&](const auto &p){ return fe_field_func.value(p);}, 0, 2); Il giorno 21 lug 2023, alle ore 22:05, Najwa Alshehri <[email protected]> ha scritto:
Dear Daniel, your answer makes sense, Finally it worked.
Dear Luca, thank you for your answer. Indeed, the ExactSolution is a class I built myself. I followed your suggestion and it was the magic line that solved the issue. However, say that I have in another code instead of using a ExactSolution that I build myself, I used an FeFieldFunction for a reference solution, how would I make this function allocate two components?
Best, Najwa
Dear Najwa,
how many components do the `ExactSolution2<dim>` function has?
The error complains about `exact_solution.n_components, n_components` not being equal, in particular it tells you that `ExactSolution2<dim>` only has one component.
If you built the ExactSolution class yourself, make sure at construction time you tell Function<dim> to allocate two components:
ExactSolution2<dim>::ExactSolution2<dim>( … )
: Functions::Function<dim>(2)
Best,
Luca.
> On 20 Jul 2023, at 12:15, Najwa Alshehri <[email protected]> wrote:
>
> Hello again,
>
> I have a follow-up question. Does this ComponentSelectFunction work also with vectors that are not written as blocked vectors? I have applied it before when I was dealing with blocked vectors and it worked perfectly.
>
> So, I did this,
> const ComponentSelectFunction<dim> primal_mask(0,2);
> Later,
> VectorTools::integrate_difference(omega2_dh,
> u_omega2,
> ExactSolution2<dim>(),
> cellwise_errors2,
> quadrature,
> VectorTools::L2_norm
> ,&primal_mask);
> const double u2_l2_error =
> VectorTools::compute_global_error(triangulation_omega2,
> cellwise_errors2,
> VectorTools::L2_norm);
>
> And I got the following error!!
> An error occurred in line <455> of file <../include/deal.II/numerics/vector_tools_integrate_difference.templates.h> in function
> void dealii::VectorTools::internal::do_integrate_difference(const dealii::hp::MappingCollection<dim, spacedim>&, const dealii::DoFHandler<dim, spacedim>&, const InVector&, const dealii::Function<spacedim, typename InVector::value_type>&, OutVector&, const dealii::hp::QCollection<dim>&, const dealii::VectorTools::NormType&, const dealii::Function<spacedim>*, double) [with int dim = 2; int spacedim = 2; InVector = dealii::Vector<double>; OutVector = dealii::Vector<double>; typename InVector::value_type = double]
> The violated condition was:
> ::dealii::deal_II_exceptions::internals::compare_for_equality(exact_solution.n_components, n_components)
> Additional information:
> Dimension 1 not equal to 2.
>
> Obviously, we have dimensionality mismatching between u_omega2 and the exact solution. which means that the mask is not really picking up the first component of the solution u_omega2. Do you have any suggestions to fix this issue?
>
> Appreciate your help,
> Najwa
> On Thursday, July 20, 2023 at 11:48:04 AM UTC+3 Najwa Alshehri wrote:
> Thank you Daniel for the clear quick answer. I will follow it.
>
> Best,
> Najwa
>
> On Wednesday, July 19, 2023 at 5:16:14 PM UTC+3 [email protected] wrote:
> Najwa,
>
> The documentation of VectorTools::integrate_difference(https://www.dealii.org/current/doxygen/deal.II/namespaceVectorTools.html#a676190d2c897ac5da68a9c460fa95832) says
>
>
> The additional argument weight allows to evaluate weighted norms. The weight function may be scalar, establishing a spatially variable weight in the domain for all components equally. This may be used, for instance, to only integrate over parts of the domain. The weight function may also be vector-valued, with as many components as the finite element: Then, different components get different weights. A typical application is when the error with respect to only one or a subset of the solution variables is to be computed, in which case the other components would have weight values equal to zero. The ComponentSelectFunction class is particularly useful for this purpose as it provides such a "mask" weight. The weight function is expected to be positive, but negative values are not filtered. The default value of this function, a null pointer, is interpreted as "no weighting function", i.e., weight=1 in the whole domain for all vector components uniformly.
>
> Best,
> Daniel
>
> On Wed, Jul 19, 2023 at 8:01 AM Najwa Alshehri <[email protected]> wrote:
> Dear group members,
>
> I have one question,
>
> I am trying to calculate the L2 norm of the error of a solution. In particular, I have a vector of the solution u_omega and a FeSystem with two fes.
> I am interested in computing the L2 norm of the error related to the first fe using integrate_difference function. (Note here u_omega is not a blocked vector, however, it has two solutions stacked together in one vector). Can I extract the solution of the first part from u_omega?
>
>
> Thank you in advance for your help.
> Best,
> Najwa
>
> --
> The deal.II project is located at http://www.dealii.org/
> For mailing list/forum options, see https://groups.google.com/d/forum/dealii?hl=en
> ---
> You received this message because you are subscribed to the Google Groups "deal.II User Group" group.
> To unsubscribe from this group and stop receiving emails from it, send an email to [email protected].
> To view this discussion on the web visit https://groups.google.com/d/msgid/dealii/9741338e-2a31-418b-815d-277a5d7cb573n%40googlegroups.com.
>
> --
> The deal.II project is located at http://www.dealii.org/
> For mailing list/forum options, see https://groups.google.com/d/forum/dealii?hl=en
> ---
> You received this message because you are subscribed to the Google Groups "deal.II User Group" group.
> To unsubscribe from this group and stop receiving emails from it, send an email to [email protected].
> To view this discussion on the web visit https://groups.google.com/d/msgid/dealii/c2544a5b-16b0-4d3d-8ccc-22e77ccf3038n%40googlegroups.com.
--
The deal.II project is located at http://www.dealii.org/
For mailing list/forum options, see https://groups.google.com/d/forum/dealii?hl=en
---
You received this message because you are subscribed to the Google Groups "deal.II User Group" group.
To unsubscribe from this group and stop receiving emails from it, send an email to [email protected].
To view this discussion on the web visit https://groups.google.com/d/msgid/dealii/697c9d76-0969-4c32-bd57-58371d02c21dn%40googlegroups.com.
--
The deal.II project is located at http://www.dealii.org/
For mailing list/forum options, see https://groups.google.com/d/forum/dealii?hl=en
---
You received this message because you are subscribed to the Google Groups "deal.II User Group" group.
To unsubscribe from this group and stop receiving emails from it, send an email to [email protected].
To view this discussion on the web visit https://groups.google.com/d/msgid/dealii/64F91734-9BE4-4888-8463-C8F1B4E1EFEF%40gmail.com.
|