]> https://gitweb.dealii.org/ - dealii-svn.git/commitdiff
revert previous checkin and disallow vectors of size 0
authorguido <guido@0785d39b-7218-0410-832d-ea1e28bc413d>
Thu, 10 Jul 2003 07:53:32 +0000 (07:53 +0000)
committerguido <guido@0785d39b-7218-0410-832d-ea1e28bc413d>
Thu, 10 Jul 2003 07:53:32 +0000 (07:53 +0000)
git-svn-id: https://svn.dealii.org/trunk@7871 0785d39b-7218-0410-832d-ea1e28bc413d

deal.II/lac/include/lac/block_vector.templates.h
deal.II/lac/include/lac/solver.h
deal.II/lac/include/lac/sparsity_pattern.h
deal.II/lac/include/lac/vector.h
deal.II/lac/include/lac/vector.templates.h
deal.II/lac/source/sparsity_pattern.cc

index 8fa9bf34f9bb79abf03396389088cba8ba4366b2..66061cf4a82b4cb9eee12b1f13db8bc12569101a 100644 (file)
@@ -493,7 +493,6 @@ BlockVector<Number>& BlockVector<Number>::operator = (const Number s)
 {
   for (unsigned int i=0;i<num_blocks;++i)
     {
-      if (components[i].size() != 0)
       components[i] = s;
     }
   return *this;
index 7171eb0eaefa3321c82479127e9888fd88d2ea8b..9a1782175cae4999c865da4b32615591a2ec596d 100644 (file)
@@ -20,9 +20,6 @@ template <typename number> class Vector;
 template <class VECTOR>    class VectorMemory;
 class SolverControl;
 
-/*! @addtogroup Solvers
- * @{
- */
 
 /**
  * Base class for iterative solvers.  This class defines possible
@@ -176,9 +173,6 @@ class Solver : public Subscriptor
                                      */
     VectorMemory<VECTOR> &memory;
 };
-/*!
- * @}
- */
 
 
 /*-------------------------------- Inline functions ------------------------*/
@@ -199,4 +193,5 @@ Solver<VECTOR>::Solver(SolverControl &cn, VectorMemory<VECTOR> &mem)
                  memory(mem)
 {}
 
+
 #endif
index ab7ad9fca66298a4c7364b12e10f4bdd941891e4..69ceeddf9637e320f67851fd72173e9ddcf9f13e 100644 (file)
@@ -1246,15 +1246,6 @@ SparsityPattern::copy_from (const unsigned int    n_rows,
 {
   Assert (static_cast<unsigned int>(std::distance (begin, end)) == n_rows,
          ExcIteratorRange (std::distance (begin, end), n_rows));
-
-                                  // If the matrix has a zero
-                                  // dimension, we are done here.
-  if ((n_rows == 0) || (n_cols ==0))
-    {
-      reinit(n_rows, n_cols, 0);
-      compressed = true;
-      return;
-    }
   
                                   // first determine row lengths for
                                   // each row. if the matrix is
index b27be5370418215b3465f1ce7987917949b54436..ba8b2e142059d3d2699cdb1d6b96c98f10ed3f3d 100644 (file)
@@ -646,9 +646,7 @@ void Vector<Number>::reinit (const unsigned int n, const bool fast)
   if (n==0) 
     {
       if (val) delete[] val;
-                                      // one entry must be allocated
-                                      // for begin() and end()
-      val = new value_type[1];
+      val = 0;
       maxdim = dim = 0;
       return;
     };
@@ -691,7 +689,6 @@ inline
 typename Vector<Number>::iterator 
 Vector<Number>::begin () 
 {
-  Assert (val!=0, ExcEmptyVector());
   return &val[0];
 }
 
@@ -702,7 +699,6 @@ inline
 typename Vector<Number>::const_iterator 
 Vector<Number>::begin () const 
 {
-  Assert (val!=0, ExcEmptyVector());
   return &val[0];
 }
 
@@ -713,7 +709,6 @@ inline
 typename Vector<Number>::iterator
 Vector<Number>::end () 
 {
-  Assert (val!=0, ExcEmptyVector());
   return &val[dim];
 }
 
@@ -724,7 +719,6 @@ inline
 typename Vector<Number>::const_iterator
 Vector<Number>::end () const
 {
-  Assert (val!=0, ExcEmptyVector());
   return &val[dim];
 }
 
@@ -775,7 +769,7 @@ template <typename Number>
 inline
 Vector<Number> & Vector<Number>::operator = (const Number s)
 {
-  Assert (val!=0, ExcEmptyVector());
+  Assert (dim!=0, ExcEmptyVector());
   std::fill (begin(), end(), s);
   return *this;
 }
index 8019229f7e06541a95645ee1c02d805decce09f9..3ee37bacb582b4f097e1323d815430d4b01784b3 100644 (file)
@@ -95,7 +95,7 @@ Vector<Number>::swap (Vector<Number> &v)
 template <typename Number>
 bool Vector<Number>::all_zero () const
 {
-  Assert (val!=0, ExcEmptyVector());
+  Assert (dim!=0, ExcEmptyVector());
   
   const_iterator p = begin(),
                 e = end();
@@ -110,7 +110,7 @@ template <typename Number>
 template <typename Number2>
 Number Vector<Number>::operator * (const Vector<Number2>& v) const
 {
-  Assert (val!=0, ExcEmptyVector());
+  Assert (dim!=0, ExcEmptyVector());
   
   if (this == reinterpret_cast<const Vector<Number>*>(&v))
     return norm_sqr();
@@ -146,7 +146,7 @@ Number Vector<Number>::operator * (const Vector<Number2>& v) const
 template <typename Number>
 Number Vector<Number>::norm_sqr () const
 {
-  Assert (val!=0, ExcEmptyVector());
+  Assert (dim!=0, ExcEmptyVector());
 
   Number sum0 = 0,
         sum1 = 0,
@@ -176,7 +176,7 @@ Number Vector<Number>::norm_sqr () const
 template <typename Number>
 Number Vector<Number>::mean_value () const
 {
-  Assert (val!=0, ExcEmptyVector());
+  Assert (dim!=0, ExcEmptyVector());
 
   Number sum0 = 0,
         sum1 = 0,
@@ -206,7 +206,7 @@ Number Vector<Number>::mean_value () const
 template <typename Number>
 Number Vector<Number>::l1_norm () const
 {
-  Assert (val!=0, ExcEmptyVector());
+  Assert (dim!=0, ExcEmptyVector());
 
   Number sum0 = 0,
         sum1 = 0,
@@ -243,7 +243,7 @@ Number Vector<Number>::l2_norm () const
 template <typename Number>
 Number Vector<Number>::lp_norm (const Number p) const
 {
-  Assert (val!=0, ExcEmptyVector());
+  Assert (dim!=0, ExcEmptyVector());
 
   Number sum0 = 0,
         sum1 = 0,
@@ -274,7 +274,7 @@ Number Vector<Number>::lp_norm (const Number p) const
 template <typename Number>
 Number Vector<Number>::linfty_norm () const
 {
-  Assert (val!=0, ExcEmptyVector());
+  Assert (dim!=0, ExcEmptyVector());
 
   Number max0=0.,
         max1=0.,
@@ -300,7 +300,7 @@ Number Vector<Number>::linfty_norm () const
 template <typename Number>
 Vector<Number>& Vector<Number>::operator += (const Vector<Number>& v)
 {
-  Assert (val!=0, ExcEmptyVector());
+  Assert (dim!=0, ExcEmptyVector());
 
   add (v);
   return *this;
@@ -310,7 +310,7 @@ Vector<Number>& Vector<Number>::operator += (const Vector<Number>& v)
 template <typename Number>
 Vector<Number>& Vector<Number>::operator -= (const Vector<Number>& v)
 {
-  Assert (val!=0, ExcEmptyVector());
+  Assert (dim!=0, ExcEmptyVector());
   Assert (dim == v.dim, ExcDimensionMismatch(dim, v.dim));
 
   iterator i_ptr = begin(),
@@ -326,7 +326,7 @@ Vector<Number>& Vector<Number>::operator -= (const Vector<Number>& v)
 template <typename Number>
 void Vector<Number>::add (const Number v)
 {
-  Assert (val!=0, ExcEmptyVector());
+  Assert (dim!=0, ExcEmptyVector());
 
   iterator i_ptr = begin(),
           i_end = end();
@@ -338,7 +338,7 @@ void Vector<Number>::add (const Number v)
 template <typename Number>
 void Vector<Number>::add (const Vector<Number>& v)
 {
-  Assert (val!=0, ExcEmptyVector());
+  Assert (dim!=0, ExcEmptyVector());
   Assert (dim == v.dim, ExcDimensionMismatch(dim, v.dim));
 
   iterator i_ptr = begin(),
@@ -352,7 +352,7 @@ void Vector<Number>::add (const Vector<Number>& v)
 template <typename Number>
 void Vector<Number>::add (const Number a, const Vector<Number>& v)
 {
-  Assert (val!=0, ExcEmptyVector());
+  Assert (dim!=0, ExcEmptyVector());
   Assert (dim == v.dim, ExcDimensionMismatch(dim, v.dim));
 
   iterator i_ptr = begin(),
@@ -367,7 +367,7 @@ template <typename Number>
 void Vector<Number>::add (const Number a, const Vector<Number>& v,
                          const Number b, const Vector<Number>& w)
 {
-  Assert (val!=0, ExcEmptyVector());
+  Assert (dim!=0, ExcEmptyVector());
   Assert (dim == v.dim, ExcDimensionMismatch(dim, v.dim));
   Assert (dim == w.dim, ExcDimensionMismatch(dim, w.dim));
   iterator i_ptr = begin(),
@@ -382,7 +382,7 @@ void Vector<Number>::add (const Number a, const Vector<Number>& v,
 template <typename Number>
 void Vector<Number>::sadd (const Number x, const Vector<Number>& v)
 {
-  Assert (val!=0, ExcEmptyVector());
+  Assert (dim!=0, ExcEmptyVector());
   Assert (dim == v.dim, ExcDimensionMismatch(dim, v.dim));
   iterator i_ptr = begin(),
           i_end = end();
@@ -396,7 +396,7 @@ template <typename Number>
 void Vector<Number>::sadd (const Number x, const Number a,
                            const Vector<Number>& v)
 {
-  Assert (val!=0, ExcEmptyVector());
+  Assert (dim!=0, ExcEmptyVector());
   Assert (dim == v.dim, ExcDimensionMismatch(dim, v.dim));
   iterator i_ptr = begin(),
           i_end = end();
@@ -411,7 +411,7 @@ void Vector<Number>::sadd (const Number x, const Number a,
                           const Vector<Number>& v, const Number b,
                            const Vector<Number>& w)
 {
-  Assert (val!=0, ExcEmptyVector());
+  Assert (dim!=0, ExcEmptyVector());
   Assert (dim == v.dim, ExcDimensionMismatch(dim, v.dim));
   Assert (dim == w.dim, ExcDimensionMismatch(dim, w.dim));
   iterator i_ptr = begin(),
@@ -429,7 +429,7 @@ void Vector<Number>::sadd (const Number x, const Number a,
                           const Vector<Number>& w, const Number c,
                            const Vector<Number>& y)
 {
-  Assert (val!=0, ExcEmptyVector());
+  Assert (dim!=0, ExcEmptyVector());
   Assert (dim == v.dim, ExcDimensionMismatch(dim, v.dim));
   Assert (dim == w.dim, ExcDimensionMismatch(dim, w.dim));
   Assert (dim == y.dim, ExcDimensionMismatch(dim, y.dim));
@@ -448,7 +448,7 @@ void Vector<Number>::sadd (const Number x, const Number a,
 template <typename Number>
 void Vector<Number>::scale (const Number factor)
 {
-  Assert (val!=0, ExcEmptyVector());
+  Assert (dim!=0, ExcEmptyVector());
 
   iterator             ptr  = begin();
   const const_iterator eptr = end();
@@ -462,7 +462,7 @@ template <typename Number>
 template <typename Number2>
 void Vector<Number>::scale (const Vector<Number2> &s)
 {
-  Assert (val!=0, ExcEmptyVector());
+  Assert (dim!=0, ExcEmptyVector());
   Assert (dim == s.dim, ExcDimensionMismatch(dim, s.dim));
   
   iterator             ptr  = begin();
@@ -478,7 +478,7 @@ template <typename Number>
 void Vector<Number>::equ (const Number a, const Vector<Number>& u,
                          const Number b, const Vector<Number>& v)
 {
-  Assert (val!=0, ExcEmptyVector());
+  Assert (dim!=0, ExcEmptyVector());
   Assert (dim == u.dim, ExcDimensionMismatch(dim, u.dim));
   Assert (dim == v.dim, ExcDimensionMismatch(dim, v.dim));
   iterator i_ptr = begin(),
@@ -495,7 +495,7 @@ template <typename Number>
 template <typename Number2>
 void Vector<Number>::equ (const Number a, const Vector<Number2>& u)
 {
-  Assert (val!=0, ExcEmptyVector());
+  Assert (dim!=0, ExcEmptyVector());
   Assert (dim == u.dim, ExcDimensionMismatch(dim, u.dim));
   iterator i_ptr = begin(),
           i_end = end();
@@ -509,7 +509,7 @@ void Vector<Number>::equ (const Number a, const Vector<Number2>& u)
 template <typename Number>
 void Vector<Number>::ratio (const Vector<Number> &a, const Vector<Number> &b)
 {
-  Assert (val!=0, ExcEmptyVector());
+  Assert (dim!=0, ExcEmptyVector());
   Assert (a.dim == b.dim, ExcDimensionMismatch (a.dim, b.dim));
 
                                   // no need to reinit with zeros, since
@@ -531,7 +531,7 @@ Vector<Number>::operator = (const Vector<Number>& v)
 {
   if (v.dim != dim)
     reinit (v.dim, true);
-  if (val!=0)
+  if (dim!=0)
     std::copy (v.begin(), v.end(), begin());
   
   return *this;
@@ -546,7 +546,7 @@ Vector<Number>::operator = (const Vector<Number2>& v)
 {
   if (v.size() != dim)
     reinit (v.size(), true);
-  if (val!=0)
+  if (dim!=0)
     std::copy (v.begin(), v.end(), begin());
   
   return *this;
@@ -557,7 +557,7 @@ Vector<Number>::operator = (const Vector<Number2>& v)
 template <typename Number>
 void Vector<Number>::print (const char* format) const
 {
-  Assert (val!=0, ExcEmptyVector());
+  Assert (dim!=0, ExcEmptyVector());
   if (!format) format = " %5.2f";
   for (unsigned int j=0;j<size();j++)
     std::printf (format, val[j]);
@@ -572,7 +572,7 @@ void Vector<Number>::print (std::ostream      &out,
                            const bool         scientific,
                            const bool         across) const
 {
-  Assert (val!=0, ExcEmptyVector());
+  Assert (dim!=0, ExcEmptyVector());
 
   out.precision (precision);
   if (scientific)
index 0e8ab7a1f43d4367648daff45b63d78c66ae80eb..5fb54c8615052128f7e6d96c380ff5b9c0c2af51 100644 (file)
@@ -257,13 +257,13 @@ SparsityPattern::reinit (const unsigned int               m,
   cols = n;
 
                                   // delete empty matrices
-  if (m==0)
+  if ((m==0) || (n==0))
     {
       if (rowstart)  delete[] rowstart;
       if (colnums)   delete[] colnums;
-      rowstart = new unsigned int[0];
-      colnums = new unsigned int[0];
-      max_vec_len = max_dim = 0;
+      rowstart = 0;
+      colnums = 0;
+      max_vec_len = max_dim = rows = cols = 0;
                                       // if dimension is zero: ignore
                                       // max_per_row
       max_row_length = 0;
@@ -532,7 +532,7 @@ SparsityPattern::empty () const
                                   // know at how many places I missed
                                   // something in adding it, so I try to
                                   // be cautious. wb)
-  if (rowstart==0)
+  if ((rowstart==0) || (rows==0) || (cols==0))
     {
       Assert (rowstart==0, ExcInternalError());
       Assert (rows==0, ExcInternalError());

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.