More questions about FE_enriched & PUM FEM

71 views
Skip to first unread message

sotelo...@gmail.com

unread,
Nov 28, 2016, 1:19:56 PM11/28/16
to deal.II User Group
Hi all,
I have more questions regarding Fe_enriched & PUM 

1) Are enriched functions shifted, so that the enriched part evaluates to zero at the mesh  nodes? 

2) About strong boundary conditions: 
I am using the function interpolate_boundary_values,I think this function is also interpolating values for the enriched dofs, but they need to be set to zero instead to get the correct BC . 
How can I manually choose the enriched dofs at the boundary and set them to zero?

Thank your for your help.

Edith

Denis Davydov

unread,
Nov 29, 2016, 1:50:52 AM11/29/16
to deal.II User Group
Hi Edith,


On Monday, November 28, 2016 at 7:19:56 PM UTC+1, Edith Sotelo wrote:
Hi all,
I have more questions regarding Fe_enriched & PUM 

1) Are enriched functions shifted, so that the enriched part evaluates to zero at the mesh  nodes? 

no, nothing is shifted. Enrichment functions are taken as-is. 

If you refer to combination of enriched and non-enriched elements, see "Using enriched and non-enriched FEs together" in documentation https://www.dealii.org/developer/doxygen/deal.II/classFE__Enriched.html
 

2) About strong boundary conditions:  
I am using the function interpolate_boundary_values,I think this function is also interpolating values for the enriched dofs, but they need to be set to zero instead to get the correct BC . 
How can I manually choose the enriched dofs at the boundary and set them to zero?

interpolate_boundary_values() will not work because shape functions corresponding to enriched DoFs generally won't satisfy delta Kronecker.
Even if they are by chance, you may have a scalar FE with two shape functions (enriched / non-enriched) at the same support point.
What you could do is L2 projection on the boundary to determine the values of DoFs. That amounts to inverting a mass matrix on the boundary.
That should work.


Otherwise, unless you need to enrich elements at the boundary, i would suggest instead mixing enriched and not-enriched elements.
Depending on your enrichment, you may severely deteriorate the condition number of matrices. At least in some applications it is better to 
enriched only locally (in some part of the domain).

Finally, in order to know whether a local DoF corresponds to enriched, you can query finite element for the base number of this DoF: 
 
FiniteElement< dim, spacedim >::system_to_base_table()[local_dof].first.first  // base element number

0 is un-enriched.

Regards,
Denis.


Edith Sotelo

unread,
Feb 10, 2017, 10:00:25 AM2/10/17
to deal.II User Group

A follow up about this post:

This is the way I went on implementing the strong bc.:
Assigned the Boundary value to the non-enriched dof, and assigned Zero to the enriched dofs.. it worked for me.
I used system_to_base_table() as suggested, though this function is protected, I just changed the function to public to be able to use it.. unless there is a different way to do it.

Edith

Denis Davydov

unread,
Feb 13, 2017, 12:06:15 PM2/13/17
to deal.II User Group


On Friday, February 10, 2017 at 4:00:25 PM UTC+1, Edith Sotelo wrote:

A follow up about this post:

This is the way I went on implementing the strong bc.:
Assigned the Boundary value to the non-enriched dof, and assigned Zero to the enriched dofs.. it worked for me.
I used system_to_base_table() as suggested, though this function is protected, I just changed the function to public to be able to use it.. unless there is a different way to do it.

Oh, then I recommended you the wrong function. Sorry.

I would say you need to use `fe.system_to_component_index(local_dof).first` to check whether a given DoF is enriched or not.
See the table here https://github.com/dealii/dealii/issues/3646 and also documentation of this function.

Regards,
Denis.

Denis Davydov

unread,
Feb 13, 2017, 12:11:15 PM2/13/17
to dea...@googlegroups.com
or

system_to_base_index().first.first


--
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 a topic in the Google Groups "deal.II User Group" group.
To unsubscribe from this topic, visit https://groups.google.com/d/topic/dealii/7eI7aoYAIck/unsubscribe.
To unsubscribe from this group and all its topics, send an email to dealii+un...@googlegroups.com.
For more options, visit https://groups.google.com/d/optout.

Edith Sotelo

unread,
Feb 25, 2017, 5:22:18 PM2/25/17
to deal.II User Group
I think this thread can be closed.
Finally I used system_to_base_index().first.first, and it is working fine.


On Monday, November 28, 2016 at 12:19:56 PM UTC-6, Edith Sotelo wrote:
Reply all
Reply to author
Forward
0 new messages