Create some kind of anisotropic FE_Q element

18 views
Skip to first unread message

Dustin Kumor

unread,
Aug 27, 2018, 4:06:04 AM8/27/18
to deal.II User Group
Dear all,

I like to create a three dimensional Lagrange finite element that uses ansatz functions of the following form: N_i (x,y,z) = q_i(x,y) p_i (z), where q_i (x,y) are the basis functions of a two dimensional Lagrange finite element of arbitrary degree, basically FE_Q<2> (degree) and p_i are the basis functions of a linear Lagrange finite element FE<1> (1).

The class AnisotropicPolynomials<dim> provides the functionality to exactly create the desired ansatz functions. However, I'm not sure how to use this class to create a respective Finite Element class.

Therefore, I checked the code in fe_q.cc and the constructor is implemented as follows.
   52 template <int dim, int spacedim>
   
53 FE_Q<dim,spacedim>::FE_Q (const unsigned int degree)
   
54   :
   
55   FE_Q_Base<TensorProductPolynomials<dim>, dim, spacedim>
   
56   (TensorProductPolynomials<dim>(Polynomials::generate_complete_Lagrange_basis(internal::FE_Q::get_QGaussLobatto_points(degree))),
   
57    FiniteElementData<dim>(this->get_dpo_vector(degree),
   
58                           1, degree,
   
59                           FiniteElementData<dim>::H1),
   
60    std::vector<bool> (1, false))
   
61 {
   
62   this->initialize(internal::FE_Q::get_QGaussLobatto_points(degree));
   
63 }


Would it be possible to replace the TensorProductPolynomial class by the AnisotropicPolynomials class?

Best regards,
Dustin

Wolfgang Bangerth

unread,
Aug 27, 2018, 4:41:09 PM8/27/18
to dea...@googlegroups.com
On 08/27/2018 02:06 AM, Dustin Kumor wrote:
>
> I like to create a three dimensional Lagrange finite element that uses
> ansatz functions of the following form: N_i (x,y,z) = q_i(x,y) p_i (z),
> where q_i (x,y) are the basis functions of a two dimensional Lagrange
> finite element of arbitrary degree, basically FE_Q<2> (degree) and p_i
> are the basis functions of a linear Lagrange finite element FE<1> (1).

This does not work in deal.II. One of the fundamental assumptions made
many many years ago and very deep down in the code is that the number of
degrees of freedom per vertex/line/face is the same for all
vertices/lines/faces of a cell. But, if you wanted an element that has,
for example, linear shape functions in x-direction and quadratic shape
functions in y-directions, you would have to use one degree of freedom
for the two horizontal lines in 2d, but none for the vertical lines.

The only way you can achieve what you want to do is to define the
element as discontinuous because, then, there are no degrees of freedom
on vertices/lines/faces. Of course, if you want the space to be
continuous, you will have to enforce that in some other way.

Best
W.

--
------------------------------------------------------------------------
Wolfgang Bangerth email: bang...@colostate.edu
www: http://www.math.colostate.edu/~bangerth/

Dustin Kumor

unread,
Aug 29, 2018, 2:07:43 AM8/29/18
to deal.II User Group
Dear Wolfgang,

thanks for your detailed explanation and also for the proposed solution. I will think about this possibility.

Best,
Dustin
Reply all
Reply to author
Forward
0 new messages