From a1309789cf94c9f5da6fdcadab46722e0c18c298 Mon Sep 17 00:00:00 2001 From: wolf Date: Thu, 15 Aug 2002 11:18:26 +0000 Subject: [PATCH] Add some TODOs w.r.t. the matrices for Nedelec elements. git-svn-id: https://svn.dealii.org/trunk@6328 0785d39b-7218-0410-832d-ea1e28bc413d --- deal.II/deal.II/source/fe/fe_nedelec_2d.cc | 24 +++++++++++++++++++-- deal.II/deal.II/source/fe/fe_nedelec_3d.cc | 25 +++++++++++++++++++++- 2 files changed, 46 insertions(+), 3 deletions(-) diff --git a/deal.II/deal.II/source/fe/fe_nedelec_2d.cc b/deal.II/deal.II/source/fe/fe_nedelec_2d.cc index b10aabea8a..9c8691bbac 100644 --- a/deal.II/deal.II/source/fe/fe_nedelec_2d.cc +++ b/deal.II/deal.II/source/fe/fe_nedelec_2d.cc @@ -22,6 +22,17 @@ // the four child cells which tells us how the degrees of freedom on // the child cell are obtained from the degrees of freedom on the // mother cell +// +// TODO: [Anna] check whether the following paragraph is correct. if so, then please multiply the values in the four following matrices by two + +// note the following: since the shape functions themselves and not +// only the gradients are transformed using the mapping object from +// the unit cell to the real cell, the actual values of the function +// on the real cell is degree of freedom times value of the shape +// function on the unit cell times Jacobian. Thus, what has the DoF +// value 1 on the mother cell must have the DoF value 2 on the child +// cell since the latter is smaller by a (linear scaling) factor of +// two. namespace FE_Nedelec_2d { static const double q1_into_q1_refined_0[] = @@ -78,6 +89,12 @@ sizeof(FE_Nedelec<2>::Matrices::embedding[0]); // Constraint matrices: how do the new value on child faces depend on // the values on the mother face if that face has a hanging node +// +// Here, the same applies as for the embedding matrices: since the DoF +// values are not only multiplied by the values of the shape function +// on the unit cell, but also by the transformation, we have to +// multiply the value on the large face by two to get the same value +// back on the small face namespace FE_Nedelec_2d { static const double constraint_q1[] = @@ -87,8 +104,11 @@ namespace FE_Nedelec_2d // degree of freedom on the // refined edge has the same // value as that on the - // coarse edge - 1., 1. + // coarse edge, modulo the + // issue with the + // transformation described + // above + 2., 2. }; }; diff --git a/deal.II/deal.II/source/fe/fe_nedelec_3d.cc b/deal.II/deal.II/source/fe/fe_nedelec_3d.cc index 6c1fd0cc28..c0a6894dc6 100644 --- a/deal.II/deal.II/source/fe/fe_nedelec_3d.cc +++ b/deal.II/deal.II/source/fe/fe_nedelec_3d.cc @@ -19,6 +19,21 @@ #include +// Transfer matrices for finite elements: have one matrix for each of +// the four child cells which tells us how the degrees of freedom on +// the child cell are obtained from the degrees of freedom on the +// mother cell +// +// TODO: [Anna] check whether the following paragraph is correct. if so, then please multiply the values in the eight following matrices by two + +// note the following: since the shape functions themselves and not +// only the gradients are transformed using the mapping object from +// the unit cell to the real cell, the actual values of the function +// on the real cell is degree of freedom times value of the shape +// function on the unit cell times Jacobian. Thus, what has the DoF +// value 1 on the mother cell must have the DoF value 2 on the child +// cell since the latter is smaller by a (linear scaling) factor of +// two. namespace FE_Nedelec_3d { static const double q1_into_q1_refined_0[] = @@ -176,8 +191,16 @@ sizeof(FE_Nedelec<3>::Matrices::embedding[0]); -// Constraint matrices +// Constraint matrices: how do the new value on child faces depend on +// the values on the mother face if that face has a hanging node +// +// TODO: [Anna] check whether the following paragraph is correct. if so, then please multiply the values in the following matrix by two +// Here, the same applies as for the embedding matrices: since the DoF +// values are not only multiplied by the values of the shape function +// on the unit cell, but also by the transformation, we have to +// multiply the value on the large face by two to get the same value +// back on the small face namespace FE_Nedelec_3d { static const double constraint_q1[] = -- 2.39.5