]> https://gitweb.dealii.org/ - dealii.git/commitdiff
Use SP, not SparsityPattern, as a template type.
authorDavid Wells <wellsd2@rpi.edu>
Mon, 19 Oct 2015 01:49:36 +0000 (21:49 -0400)
committerDavid Wells <wellsd2@rpi.edu>
Mon, 2 Nov 2015 16:21:25 +0000 (11:21 -0500)
This commit also exchanges 'SparsityPatternBase' for 'SP' for
consistency.

include/deal.II/dofs/dof_tools.h
include/deal.II/lac/block_sparsity_pattern.h
include/deal.II/multigrid/mg_tools.h
source/dofs/dof_tools_sparsity.cc
source/multigrid/mg_tools.cc

index 162e77710180b690ff76a3fd0aa95f6a80ddd0c5..26997f95e19c38f04644b5712df2b608047384e1 100644 (file)
@@ -395,10 +395,10 @@ namespace DoFTools
    *
    * @ingroup constraints
    */
-  template <class DH, class SparsityPattern>
+  template <class DH, class SP>
   void
   make_sparsity_pattern (const DH               &dof,
-                         SparsityPattern        &sparsity_pattern,
+                         SP                     &sparsity_pattern,
                          const ConstraintMatrix &constraints = ConstraintMatrix(),
                          const bool              keep_constrained_dofs = true,
                          const types::subdomain_id subdomain_id = numbers::invalid_subdomain_id);
@@ -484,11 +484,11 @@ namespace DoFTools
    *
    * @ingroup constraints
    */
-  template <class DH, class SparsityPattern>
+  template <class DH, class SP>
   void
   make_sparsity_pattern (const DH                 &dof,
                          const Table<2, Coupling> &coupling,
-                         SparsityPattern          &sparsity_pattern,
+                         SP                       &sparsity_pattern,
                          const ConstraintMatrix   &constraints = ConstraintMatrix(),
                          const bool                keep_constrained_dofs = true,
                          const types::subdomain_id subdomain_id = numbers::invalid_subdomain_id);
@@ -513,11 +513,11 @@ namespace DoFTools
    * whereas the ones that correspond to columns come from the second
    * DoFHandler.
    */
-  template <class DH, class SparsityPattern>
+  template <class DH, class SP>
   void
   make_sparsity_pattern (const DH        &dof_row,
                          const DH        &dof_col,
-                         SparsityPattern &sparsity);
+                         SP              &sparsity);
 
   /**
    * Create the sparsity pattern for boundary matrices. See the general
@@ -529,11 +529,11 @@ namespace DoFTools
    * class that satisfies similar requirements. It is assumed that the size of
    * the sparsity pattern is already correct.
    */
-  template <class DH, class SparsityPattern>
+  template <class DH, class SP>
   void
   make_boundary_sparsity_pattern (const DH                        &dof,
                                   const std::vector<types::global_dof_index> &dof_to_boundary_mapping,
-                                  SparsityPattern                 &sparsity_pattern);
+                                  SP                              &sparsity_pattern);
 
   /**
    * Write the sparsity structure of the matrix composed of the basis
@@ -551,12 +551,12 @@ namespace DoFTools
    *
    * For the type of the sparsity pattern, the same holds as said above.
    */
-  template <class DH, class SparsityPattern>
+  template <class DH, class SP>
   void
   make_boundary_sparsity_pattern (const DH &dof,
                                   const typename FunctionMap<DH::space_dimension>::type &boundary_ids,
                                   const std::vector<types::global_dof_index> &dof_to_boundary_mapping,
-                                  SparsityPattern    &sparsity);
+                                  SP                 &sparsity);
 
   /**
    * Generate sparsity pattern for fluxes, i.e. formulations of the discrete
@@ -566,10 +566,10 @@ namespace DoFTools
    * neighboring elements, the normal couplings and these extra matrix entries
    * are considered.
    */
-  template<class DH, class SparsityPattern>
+  template<class DH, class SP>
   void
-  make_flux_sparsity_pattern (const DH        &dof_handler,
-                              SparsityPattern &sparsity_pattern);
+  make_flux_sparsity_pattern (const DH &dof_handler,
+                              SP       &sparsity_pattern);
 
   /**
    * This function does the same as the other with the same name, but it gets
@@ -578,10 +578,10 @@ namespace DoFTools
    *
    * @ingroup constraints
    */
-  template<class DH, class SparsityPattern>
+  template<class DH, class SP>
   void
   make_flux_sparsity_pattern (const DH        &dof_handler,
-                              SparsityPattern &sparsity_pattern,
+                              SP              &sparsity_pattern,
                               const ConstraintMatrix   &constraints,
                               const bool                keep_constrained_dofs = true,
                               const types::subdomain_id  subdomain_id = numbers::invalid_unsigned_int);
@@ -597,10 +597,10 @@ namespace DoFTools
    *
    * @todo Not implemented for hp::DoFHandler.
    */
-  template <class DH, class SparsityPattern>
+  template <class DH, class SP>
   void
   make_flux_sparsity_pattern (const DH                &dof,
-                              SparsityPattern         &sparsity,
+                              SP                      &sparsity,
                               const Table<2,Coupling> &int_mask,
                               const Table<2,Coupling> &flux_mask);
 
index 06c3868dfb913c1589072ae7b0675f693cbad492..6c88fb7683c6c10348ede9d3a8a95150a75a5091 100644 (file)
@@ -79,7 +79,7 @@ namespace TrilinosWrappers
  * @ref GlossBlockLA "Block (linear algebra)"
  * @author Wolfgang Bangerth, 2000, 2001
  */
-template <class SparsityPatternBase>
+template <class SP>
 class BlockSparsityPatternBase : public Subscriptor
 {
 public:
@@ -160,7 +160,7 @@ public:
   /**
    * Access the block with the given coordinates.
    */
-  SparsityPatternBase &
+  SP &
   block (const size_type row,
          const size_type column);
 
@@ -169,7 +169,7 @@ public:
    * Access the block with the given coordinates. Version for constant
    * objects.
    */
-  const SparsityPatternBase &
+  const SP &
   block (const size_type row,
          const size_type column) const;
 
@@ -338,7 +338,7 @@ protected:
   /**
    * Array of sparsity patterns.
    */
-  Table<2,SmartPointer<SparsityPatternBase, BlockSparsityPatternBase<SparsityPatternBase> > > sub_objects;
+  Table<2,SmartPointer<SP, BlockSparsityPatternBase<SP> > > sub_objects;
 
   /**
    * Object storing and managing the transformation of row indices to indices
@@ -749,11 +749,11 @@ namespace TrilinosWrappers
 
 
 
-template <class SparsityPatternBase>
+template <class SP>
 inline
-SparsityPatternBase &
-BlockSparsityPatternBase<SparsityPatternBase>::block (const size_type row,
-                                                      const size_type column)
+SP &
+BlockSparsityPatternBase<SP>::block (const size_type row,
+                                     const size_type column)
 {
   Assert (row<rows, ExcIndexRange(row,0,rows));
   Assert (column<columns, ExcIndexRange(column,0,columns));
@@ -762,11 +762,11 @@ BlockSparsityPatternBase<SparsityPatternBase>::block (const size_type row,
 
 
 
-template <class SparsityPatternBase>
+template <class SP>
 inline
-const SparsityPatternBase &
-BlockSparsityPatternBase<SparsityPatternBase>::block (const size_type row,
-                                                      const size_type column) const
+const SP &
+BlockSparsityPatternBase<SP>::block (const size_type row,
+                                     const size_type column) const
 {
   Assert (row<rows, ExcIndexRange(row,0,rows));
   Assert (column<columns, ExcIndexRange(column,0,columns));
@@ -775,31 +775,31 @@ BlockSparsityPatternBase<SparsityPatternBase>::block (const size_type row,
 
 
 
-template <class SparsityPatternBase>
+template <class SP>
 inline
 const BlockIndices &
-BlockSparsityPatternBase<SparsityPatternBase>::get_row_indices () const
+BlockSparsityPatternBase<SP>::get_row_indices () const
 {
   return row_indices;
 }
 
 
 
-template <class SparsityPatternBase>
+template <class SP>
 inline
 const BlockIndices &
-BlockSparsityPatternBase<SparsityPatternBase>::get_column_indices () const
+BlockSparsityPatternBase<SP>::get_column_indices () const
 {
   return column_indices;
 }
 
 
 
-template <class SparsityPatternBase>
+template <class SP>
 inline
 void
-BlockSparsityPatternBase<SparsityPatternBase>::add (const size_type i,
-                                                    const size_type j)
+BlockSparsityPatternBase<SP>::add (const size_type i,
+                                   const size_type j)
 {
   // if you get an error here, are
   // you sure you called
@@ -813,13 +813,13 @@ BlockSparsityPatternBase<SparsityPatternBase>::add (const size_type i,
 
 
 
-template <class SparsityPatternBase>
+template <class SP>
 template <typename ForwardIterator>
 void
-BlockSparsityPatternBase<SparsityPatternBase>::add_entries (const size_type row,
-                                                            ForwardIterator begin,
-                                                            ForwardIterator end,
-                                                            const bool      indices_are_sorted)
+BlockSparsityPatternBase<SP>::add_entries (const size_type row,
+                                           ForwardIterator begin,
+                                           ForwardIterator end,
+                                           const bool      indices_are_sorted)
 {
   // Resize scratch arrays
   if (block_column_indices.size() < this->n_block_cols())
@@ -900,11 +900,11 @@ BlockSparsityPatternBase<SparsityPatternBase>::add_entries (const size_type row,
 
 
 
-template <class SparsityPatternBase>
+template <class SP>
 inline
 bool
-BlockSparsityPatternBase<SparsityPatternBase>::exists (const size_type i,
-                                                       const size_type j) const
+BlockSparsityPatternBase<SP>::exists (const size_type i,
+                                      const size_type j) const
 {
   // if you get an error here, are
   // you sure you called
@@ -918,10 +918,10 @@ BlockSparsityPatternBase<SparsityPatternBase>::exists (const size_type i,
 
 
 
-template <class SparsityPatternBase>
+template <class SP>
 inline
 unsigned int
-BlockSparsityPatternBase<SparsityPatternBase>::
+BlockSparsityPatternBase<SP>::
 row_length (const size_type row) const
 {
   const std::pair<size_type , size_type>
@@ -937,20 +937,20 @@ row_length (const size_type row) const
 
 
 
-template <class SparsityPatternBase>
+template <class SP>
 inline
-typename BlockSparsityPatternBase<SparsityPatternBase>::size_type
-BlockSparsityPatternBase<SparsityPatternBase>::n_block_cols () const
+typename BlockSparsityPatternBase<SP>::size_type
+BlockSparsityPatternBase<SP>::n_block_cols () const
 {
   return columns;
 }
 
 
 
-template <class SparsityPatternBase>
+template <class SP>
 inline
-typename BlockSparsityPatternBase<SparsityPatternBase>::size_type
-BlockSparsityPatternBase<SparsityPatternBase>::n_block_rows () const
+typename BlockSparsityPatternBase<SP>::size_type
+BlockSparsityPatternBase<SP>::n_block_rows () const
 {
   return rows;
 }
index 7d21e6a88f9cf7271f5acd7d4deb3d76a8880b6d..346ee4c430f030361ae48f6dd469e45fc89559d7 100644 (file)
@@ -81,11 +81,11 @@ namespace MGTools
    * There is no need to consider hanging nodes here, since only one level is
    * considered.
    */
-  template <class DH, class SparsityPattern>
+  template <class DH, class SP>
   void
-  make_sparsity_pattern (const DH &dof_handler,
-                         SparsityPattern         &sparsity,
-                         const unsigned int       level);
+  make_sparsity_pattern (const DH           &dof_handler,
+                         SP                 &sparsity,
+                         const unsigned int level);
 
   /**
    * Make a sparsity pattern including fluxes of discontinuous Galerkin
@@ -95,11 +95,11 @@ namespace MGTools
    * and
    * @ref DoFTools
    */
-  template <int dim, class SparsityPattern, int spacedim>
+  template <int dim, class SP, int spacedim>
   void
   make_flux_sparsity_pattern (const DoFHandler<dim,spacedim> &dof_handler,
-                              SparsityPattern         &sparsity,
-                              const unsigned int       level);
+                              SP                             &sparsity,
+                              const unsigned int             level);
 
   /**
    * Create sparsity pattern for the fluxes at refinement edges. The matrix
@@ -107,11 +107,11 @@ namespace MGTools
    *
    * make_flux_sparsity_pattern()
    */
-  template <int dim, class SparsityPattern, int spacedim>
+  template <int dim, class SP, int spacedim>
   void
   make_flux_sparsity_pattern_edge (const DoFHandler<dim,spacedim> &dof_handler,
-                                   SparsityPattern         &sparsity,
-                                   const unsigned int       level);
+                                   SP                             &sparsity,
+                                   const unsigned int             level);
   /**
    * This function does the same as the other with the same name, but it gets
    * two additional coefficient matrices. A matrix entry will only be
@@ -121,11 +121,11 @@ namespace MGTools
    * There is one matrix for couplings in a cell and one for the couplings
    * occurring in fluxes.
    */
-  template <int dim, class SparsityPattern, int spacedim>
+  template <int dim, class SP, int spacedim>
   void
-  make_flux_sparsity_pattern (const DoFHandler<dim,spacedim> &dof,
-                              SparsityPattern       &sparsity,
-                              const unsigned int level,
+  make_flux_sparsity_pattern (const DoFHandler<dim,spacedim>    &dof,
+                              SP                                &sparsity,
+                              const unsigned int                level,
                               const Table<2,DoFTools::Coupling> &int_mask,
                               const Table<2,DoFTools::Coupling> &flux_mask);
 
@@ -137,11 +137,11 @@ namespace MGTools
    *
    * make_flux_sparsity_pattern()
    */
-  template <int dim, class SparsityPattern, int spacedim>
+  template <int dim, class SP, int spacedim>
   void
-  make_flux_sparsity_pattern_edge (const DoFHandler<dim,spacedim> &dof_handler,
-                                   SparsityPattern         &sparsity,
-                                   const unsigned int       level,
+  make_flux_sparsity_pattern_edge (const DoFHandler<dim,spacedim>    &dof_handler,
+                                   SP                                &sparsity,
+                                   const unsigned int                level,
                                    const Table<2,DoFTools::Coupling> &flux_mask);
 
   /**
index fcccfa68cab1798d694ca8a34cea6229ce416eae..d5de0b6878ac26cde25b70cdef5d3de4b9e7d253 100644 (file)
@@ -50,13 +50,13 @@ DEAL_II_NAMESPACE_OPEN
 namespace DoFTools
 {
 
-  template <class DH, class SparsityPattern>
+  template <class DH, class SP>
   void
-  make_sparsity_pattern (const DH               &dof,
-                         SparsityPattern        &sparsity,
-                         const ConstraintMatrix &constraints,
-                         const bool              keep_constrained_dofs,
-                         const types::subdomain_id subdomain_id)
+  make_sparsity_pattern (const DH                  &dof,
+                         SP                        &sparsity,
+                         const ConstraintMatrix    &constraints,
+                         const bool                 keep_constrained_dofs,
+                         const types::subdomain_id  subdomain_id)
   {
     const types::global_dof_index n_dofs = dof.n_dofs();
     (void)n_dofs;
@@ -109,14 +109,14 @@ namespace DoFTools
 
 
 
-  template <class DH, class SparsityPattern>
+  template <class DH, class SP>
   void
-  make_sparsity_pattern (const DH                &dof,
-                         const Table<2,Coupling> &couplings,
-                         SparsityPattern         &sparsity,
-                         const ConstraintMatrix  &constraints,
-                         const bool               keep_constrained_dofs,
-                         const types::subdomain_id subdomain_id)
+  make_sparsity_pattern (const DH                  &dof,
+                         const Table<2,Coupling>   &couplings,
+                         SP                        &sparsity,
+                         const ConstraintMatrix    &constraints,
+                         const bool                 keep_constrained_dofs,
+                         const types::subdomain_id  subdomain_id)
   {
     const types::global_dof_index n_dofs = dof.n_dofs();
     (void)n_dofs;
@@ -224,12 +224,11 @@ namespace DoFTools
 
 
 
-  template <class DH, class SparsityPattern>
+  template <class DH, class SP>
   void
-  make_sparsity_pattern (
-    const DH        &dof_row,
-    const DH        &dof_col,
-    SparsityPattern &sparsity)
+  make_sparsity_pattern (const DH &dof_row,
+                         const DH &dof_col,
+                         SP       &sparsity)
   {
     const types::global_dof_index n_dofs_row = dof_row.n_dofs();
     const types::global_dof_index n_dofs_col = dof_col.n_dofs();
@@ -328,12 +327,12 @@ namespace DoFTools
 
 
 
-  template <class DH, class SparsityPattern>
+  template <class DH, class SP>
   void
-  make_boundary_sparsity_pattern (
-    const DH                        &dof,
-    const std::vector<types::global_dof_index> &dof_to_boundary_mapping,
-    SparsityPattern                 &sparsity)
+  make_boundary_sparsity_pattern
+  (const DH                                   &dof,
+   const std::vector<types::global_dof_index> &dof_to_boundary_mapping,
+   SP                                         &sparsity)
   {
     if (DH::dimension == 1)
       {
@@ -342,10 +341,10 @@ namespace DoFTools
         typename DH::FunctionMap boundary_ids;
         boundary_ids[0] = 0;
         boundary_ids[1] = 0;
-        make_boundary_sparsity_pattern<DH, SparsityPattern> (dof,
-                                                             boundary_ids,
-                                                             dof_to_boundary_mapping,
-                                                             sparsity);
+        make_boundary_sparsity_pattern<DH, SP> (dof,
+                                                boundary_ids,
+                                                dof_to_boundary_mapping,
+                                                sparsity);
         return;
       }
 
@@ -397,12 +396,12 @@ namespace DoFTools
 
 
 
-  template <class DH, class SparsityPattern>
-  void make_boundary_sparsity_pattern (
-    const DH                                        &dof,
-    const typename FunctionMap<DH::space_dimension>::type &boundary_ids,
-    const std::vector<types::global_dof_index>                 &dof_to_boundary_mapping,
-    SparsityPattern                                 &sparsity)
+  template <class DH, class SP>
+  void make_boundary_sparsity_pattern
+  (const DH                                              &dof,
+   const typename FunctionMap<DH::space_dimension>::type &boundary_ids,
+   const std::vector<types::global_dof_index>            &dof_to_boundary_mapping,
+   SP                                                    &sparsity)
   {
     if (DH::dimension == 1)
       {
@@ -485,13 +484,13 @@ namespace DoFTools
 
 
 
-  template <class DH, class SparsityPattern>
+  template <class DH, class SP>
   void
   make_flux_sparsity_pattern (const DH                  &dof,
-                              SparsityPattern           &sparsity,
+                              SP                        &sparsity,
                               const ConstraintMatrix    &constraints,
-                              const bool                keep_constrained_dofs,
-                              const types::subdomain_id subdomain_id)
+                              const bool                 keep_constrained_dofs,
+                              const types::subdomain_id  subdomain_id)
 
   // TODO: QA: reduce the indentation level of this method..., Maier 2012
 
@@ -635,10 +634,10 @@ namespace DoFTools
 
 
 
-  template <class DH, class SparsityPattern>
+  template <class DH, class SP>
   void
-  make_flux_sparsity_pattern (const DH        &dof,
-                              SparsityPattern &sparsity)
+  make_flux_sparsity_pattern (const DH &dof,
+                              SP       &sparsity)
   {
     ConstraintMatrix constraints;
     make_flux_sparsity_pattern (dof, sparsity, constraints);
@@ -711,10 +710,10 @@ namespace DoFTools
 
       // implementation of the same function in namespace DoFTools for
       // non-hp DoFHandlers
-      template <class DH, class SparsityPattern>
+      template <class DH, class SP>
       void
       make_flux_sparsity_pattern (const DH                &dof,
-                                  SparsityPattern         &sparsity,
+                                  SP                      &sparsity,
                                   const Table<2,Coupling> &int_mask,
                                   const Table<2,Coupling> &flux_mask)
       {
@@ -943,12 +942,12 @@ namespace DoFTools
 
       // implementation of the same function in namespace DoFTools for
       // non-hp DoFHandlers
-      template <int dim, int spacedim, class SparsityPattern>
+      template <int dim, int spacedim, class SP>
       void
       make_flux_sparsity_pattern (const dealii::hp::DoFHandler<dim,spacedim> &dof,
-                                  SparsityPattern                           &sparsity,
-                                  const Table<2,Coupling> &int_mask,
-                                  const Table<2,Coupling> &flux_mask)
+                                  SP                                         &sparsity,
+                                  const Table<2,Coupling>                    &int_mask,
+                                  const Table<2,Coupling>                    &flux_mask)
       {
         // while the implementation above is quite optimized and caches a
         // lot of data (see e.g. the int/flux_dof_mask tables), this is no
@@ -1132,10 +1131,10 @@ namespace DoFTools
 
 
 
-  template <class DH, class SparsityPattern>
+  template <class DH, class SP>
   void
   make_flux_sparsity_pattern (const DH                &dof,
-                              SparsityPattern         &sparsity,
+                              SP                      &sparsity,
                               const Table<2,Coupling> &int_mask,
                               const Table<2,Coupling> &flux_mask)
   {
index 583410e07843818ff1d46ab05229fbb0982bd58e..7e34e6f5dca62441ed7bba575bf6d5d7f66635c8 100644 (file)
@@ -535,11 +535,10 @@ namespace MGTools
 
 
 
-  template <class DH, class SparsityPattern>
-  void make_sparsity_pattern (
-    const DH &dof,
-    SparsityPattern         &sparsity,
-    const unsigned int       level)
+  template <class DH, class SP>
+  void make_sparsity_pattern (const DH           &dof,
+                              SP                 &sparsity,
+                              const unsigned int  level)
   {
     const types::global_dof_index n_dofs = dof.n_dofs(level);
     (void)n_dofs;
@@ -568,12 +567,11 @@ namespace MGTools
 
 
 
-  template <int dim, class SparsityPattern, int spacedim>
+  template <int dim, class SP, int spacedim>
   void
-  make_flux_sparsity_pattern (
-    const DoFHandler<dim,spacedim> &dof,
-    SparsityPattern       &sparsity,
-    const unsigned int level)
+  make_flux_sparsity_pattern (const DoFHandler<dim,spacedim> &dof,
+                              SP                             &sparsity,
+                              const unsigned int              level)
   {
     const types::global_dof_index n_dofs = dof.n_dofs(level);
     (void)n_dofs;
@@ -637,12 +635,11 @@ namespace MGTools
 
 
 
-  template <int dim, class SparsityPattern, int spacedim>
+  template <int dim, class SP, int spacedim>
   void
-  make_flux_sparsity_pattern_edge (
-    const DoFHandler<dim,spacedim> &dof,
-    SparsityPattern       &sparsity,
-    const unsigned int level)
+  make_flux_sparsity_pattern_edge (const DoFHandler<dim,spacedim> &dof,
+                                   SP                             &sparsity,
+                                   const unsigned int              level)
   {
     Assert ((level>=1) && (level<dof.get_tria().n_global_levels()),
             ExcIndexRange(level, 1, dof.get_tria().n_global_levels()));
@@ -700,14 +697,13 @@ namespace MGTools
 
 
 
-  template <int dim, class SparsityPattern, int spacedim>
+  template <int dim, class SP, int spacedim>
   void
-  make_flux_sparsity_pattern (
-    const DoFHandler<dim,spacedim> &dof,
-    SparsityPattern       &sparsity,
-    const unsigned int level,
-    const Table<2,DoFTools::Coupling> &int_mask,
-    const Table<2,DoFTools::Coupling> &flux_mask)
+  make_flux_sparsity_pattern (const DoFHandler<dim,spacedim>    &dof,
+                              SP                                &sparsity,
+                              const unsigned int                 level,
+                              const Table<2,DoFTools::Coupling> &int_mask,
+                              const Table<2,DoFTools::Coupling> &flux_mask)
   {
     const FiniteElement<dim> &fe = dof.get_fe();
     const types::global_dof_index n_dofs = dof.n_dofs(level);
@@ -881,13 +877,12 @@ namespace MGTools
 
 
 
-  template <int dim, class SparsityPattern, int spacedim>
+  template <int dim, class SP, int spacedim>
   void
-  make_flux_sparsity_pattern_edge (
-    const DoFHandler<dim,spacedim> &dof,
-    SparsityPattern       &sparsity,
-    const unsigned int level,
-    const Table<2,DoFTools::Coupling> &flux_mask)
+  make_flux_sparsity_pattern_edge (const DoFHandler<dim,spacedim>    &dof,
+                                   SP                                &sparsity,
+                                   const unsigned int                 level,
+                                   const Table<2,DoFTools::Coupling> &flux_mask)
   {
     const FiniteElement<dim> &fe = dof.get_fe();
     const unsigned int n_comp = fe.n_components();

In the beginning the Universe was created. This has made a lot of people very angry and has been widely regarded as a bad move.

Douglas Adams


Typeset in Trocchi and Trocchi Bold Sans Serif.