* Compute renumbering for rotation
* of degrees of freedom.
*
+ * Rotates a tensor product
+ * numbering of degrees of
+ * freedom by 90 degrees. It is
+ * used to compute the transfer
+ * matrices of the children by
+ * using only the matrix for the
+ * first child.
+ *
* The direction parameter
* determines the type of
* rotation. It is one character
* direction. Lower case is
* counter-clockwise seen in
* direction of the axis.
+ *
+ * Since rotation around the
+ * y-axis is not used, it is not
+ * implemented either.
*/
void rotate_indices (std::vector<unsigned int> &indices,
- const char direction = 'y') const;
+ const char direction) const;
/**
* Degree of the polynomials.
//TODO:[GK] What is the meaning of the n_values_array? It is not used in the implementation
FEValuesBase (const unsigned int n_q_points,
const unsigned int dofs_per_cell,
- const unsigned int n_values_array,
const UpdateFlags update_flags,
const Mapping<dim> &mapping,
const FiniteElement<dim> &fe);
*/
FEFaceValuesBase (const unsigned int n_q_points,
const unsigned int dofs_per_cell,
- const unsigned int n_faces_or_subfaces,
const UpdateFlags update_flags,
const Mapping<dim> &mapping,
const FiniteElement<dim> &fe,
SparseMatrix<double> &matrix,
const Function<dim> * const a = 0);
- /**
- * Generate Laplace matrix for a
- * given level.
- *
- * See the general doc of this
- * class for more information.
- */
- template <int dim>
- static void create_level_laplace_matrix (unsigned int level,
- const MGDoFHandler<dim>& dof,
- const Quadrature<dim>& q,
- SparseMatrix<float>& matrix,
- const Function<dim>* a = 0);
-
/**
* Assemble the Laplace matrix
* and a right hand side
// Rotate yz-plane
// clockwise
case 'X':
- Assert (dim>2,
+ Assert (dim>2,
typename FiniteElementData<dim>::ExcSpaceDimensionMismatch (dim,3));
for (unsigned int iz=0;iz<n;++iz)
for (unsigned int iy=0;iy<n;++iy)
}
break;
default:
-//TODO:[GK] direction='y' is default, but is not implemented?!
- Assert (false, ExcNotImplemented ());
+ Assert (false, ExcNotImplemented ());
}
}
}
template <int dim>
FEValuesBase<dim>::FEValuesBase (const unsigned int n_q_points,
const unsigned int dofs_per_cell,
- const unsigned int,
const UpdateFlags flags,
const Mapping<dim> &mapping,
const FiniteElement<dim> &fe)
:
FEValuesBase<dim> (q.n_quadrature_points,
fe.dofs_per_cell,
- 1,
update_default,
mapping,
fe),
:
FEValuesBase<dim> (q.n_quadrature_points,
fe.dofs_per_cell,
- 1,
update_default,
get_default_mapping(),
fe),
template <int dim>
FEFaceValuesBase<dim>::FEFaceValuesBase (const unsigned int n_q_points,
const unsigned int dofs_per_cell,
- const unsigned int n_faces_or_subfaces,
const UpdateFlags,
const Mapping<dim> &mapping,
const FiniteElement<dim> &fe,
:
FEValuesBase<dim> (n_q_points,
dofs_per_cell,
- n_faces_or_subfaces,
update_default,
mapping,
fe),
:
FEFaceValuesBase<dim> (quadrature.n_quadrature_points,
fe.dofs_per_cell,
- GeometryInfo<dim>::faces_per_cell,
update_flags,
mapping,
fe, quadrature)
:
FEFaceValuesBase<dim> (quadrature.n_quadrature_points,
fe.dofs_per_cell,
- GeometryInfo<dim>::faces_per_cell,
update_flags,
get_default_mapping(),
fe, quadrature)
:
FEFaceValuesBase<dim> (quadrature.n_quadrature_points,
fe.dofs_per_cell,
- GeometryInfo<dim>::faces_per_cell *
- GeometryInfo<dim>::subfaces_per_face,
update_flags,
mapping,
fe, quadrature)
:
FEFaceValuesBase<dim> (quadrature.n_quadrature_points,
fe.dofs_per_cell,
- GeometryInfo<dim>::faces_per_cell *
- GeometryInfo<dim>::subfaces_per_face,
update_flags,
get_default_mapping(),
fe, quadrature)
// equal and are the product of the
// local lengths in each coordinate
// direction
-//TODO:[GK] does it make sense to query the update flags in data if we did not set any in the get_*_data functions?
if (data.current_update_flags() & update_JxW_values)
{
double J = data.length[0];
if (d != (normal_directions[face_no]/2))
J *= data.length[d];
-//TODO:[GK] does it make sense to query the update flags in data if we did not set any in the get_*_data functions?
if (data.current_update_flags() & update_JxW_values)
{
for (unsigned int i=0; i<JxW_values.size();++i)
JxW_values[i] = J * q.weight(i);
}
-//TODO:[GK] does it make sense to query the update flags in data if we did not set any in the get_*_data functions?
if (data.current_update_flags() & update_boundary_forms)
{
for (unsigned int i=0; i<boundary_forms.size();++i)
if (d != (normal_directions[face_no]/2))
J *= data.length[d];
-//TODO:[GK] does it make sense to query the update flags in data if we did not set any in the get_*_data functions?
if (data.current_update_flags() & update_JxW_values)
{
for (unsigned int i=0; i<JxW_values.size();++i)
JxW_values[i] = J * q.weight(i) / GeometryInfo<dim>::subfaces_per_face;
}
-//TODO:[GK] does it make sense to query the update flags in data if we did not set any in the get_*_data functions?
if (data.current_update_flags() & update_boundary_forms)
{
for (unsigned int i=0; i<boundary_forms.size();++i)
// Multiply quadrature weights
// by Jacobian determinants
-//TODO:[?] compute Jacobi determinants directly, if co/contravariant is not needed
if (update_flags & update_JxW_values)
{
Assert (JxW_values.size() == npts,
}
-//TODO:[GK,RH] maybe recreate this function
-/*
-
- template <int dim>
- void MatrixCreator::create_level_laplace_matrix (unsigned int level,
- const MGDoFHandler<dim> &dof,
- const Quadrature<dim> &q,
- SparseMatrix<float> &matrix,
- const Function<dim> * const a)
- {
- Vector<double> dummy; // no entries, should give an error if accessed
- UpdateFlags update_flags = UpdateFlags(update_gradients |
- update_JxW_values);
- if (a != 0)
- update_flags = UpdateFlags(update_flags | update_q_points);
- const Assembler<dim>::AssemblerData data (dof,
- true, false, // assemble matrix but not rhs
- matrix, dummy,
- q, update_flags);
- TriaIterator<dim, Assembler<dim> >
- assembler (const_cast<Triangulation<dim>*>(&dof.get_tria()),
- dof.get_tria().begin(level)->level(),
- dof.get_tria().begin(level)->index(),
- &data);
- LaplaceMatrix<dim> equation (0, a);
- do
- {
- assembler->assemble (equation);
- ++assembler
- }
- while ( (assembler.state()==valid) && (assembler->level() == level) );
- };
-
-*/
-
-
template <int dim>
void MatrixCreator::create_laplace_matrix (const Mapping<dim> &mapping,