PlayaBlockVectorSpaceImpl.hpp

00001 /* @HEADER@ */
00002 //   
00003  /* @HEADER@ */
00004 
00005 #ifndef PLAYA_BLOCKEDVECTORSPACEBASEIMPL_HPP
00006 #define PLAYA_BLOCKEDVECTORSPACEBASEIMPL_HPP
00007 
00008 #include "PlayaBlockVectorSpaceDecl.hpp"
00009 #include "PlayaVectorSpaceDecl.hpp"
00010 
00011 namespace Playa
00012 {
00013 template <class Scalar> inline
00014 int BlockVectorSpaceBase<Scalar>::dim() const 
00015 {
00016   int rtn = 0;
00017   for (int i=0; i<this->numBlocks(); i++) 
00018   {
00019     rtn += this->getBlock(i).dim();
00020   }
00021   return rtn;
00022 }
00023 
00024 template <class Scalar> inline
00025 int BlockVectorSpaceBase<Scalar>::numLocalElements() const 
00026 {
00027   int rtn = 0;
00028   for (int i=0; i<this->numBlocks(); i++) 
00029   {
00030     rtn += this->getBlock(i).numLocalElements();
00031   }
00032   return rtn;
00033 }
00034 
00035 template <class Scalar> inline
00036 bool BlockVectorSpaceBase<Scalar>::isCompatible(const VectorSpaceBase<Scalar>* other) const 
00037 {
00038   if (this->numBlocks() != other->numBlocks()) return false;
00039 
00040   const BlockVectorSpaceBase<Scalar>* bs 
00041     = dynamic_cast<const BlockVectorSpaceBase<Scalar>* >(other);
00042     
00043   if (bs == 0) return false;
00044 
00045   for (int i=0; i<this->numBlocks(); i++) 
00046   {
00047     if (! (this->getBlock(i).isCompatible(bs->getBlock(i))))
00048       return false;
00049   }
00050   return true;
00051 }
00052 
00053 
00054 template <class Scalar> inline
00055 std::string BlockVectorSpaceBase<Scalar>::description() const 
00056 {
00057   std::ostringstream rtn;
00058   rtn << "BlockVS[";
00059   for (int b=0; b<this->numBlocks(); b++)
00060   {
00061     if (b > 0) rtn << ", ";
00062     rtn << this->getBlock(b).description();
00063   }
00064   rtn << "]";
00065   return rtn.str();
00066 }
00067 
00068 
00069   
00070   
00071 }
00072 
00073 #endif

doxygen