00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027
00028
00029
00030
00031 #include "SundanceVectorBasisComponent.hpp"
00032 #include "PlayaExceptions.hpp"
00033
00034 using namespace Sundance;
00035 using namespace Sundance;
00036 using namespace Teuchos;
00037
00038 VectorBasisComponent::VectorBasisComponent(const BasisFamily& master,
00039 int direction)
00040 : master_(master),
00041 direction_(direction)
00042 {
00043 TEUCHOS_TEST_FOR_EXCEPTION(master_.ptr()->isScalarBasis(), std::runtime_error,
00044 "scalar-valued basis " << master << " given as master argument to "
00045 "a vector basis component object. The master object must be a "
00046 "vector-valued basis");
00047 }
00048
00049 bool VectorBasisComponent::lessThan(const BasisFamilyBase* other) const
00050 {
00051 TEUCHOS_TEST_FOR_EXCEPTION(
00052 (typeid(*this).before(typeid(*other))
00053 || typeid(*other).before(typeid(*this))),
00054 std::logic_error,
00055 "mismatched types: this=" << typeid(*this).name()
00056 << " and other=" << typeid(*other).name()
00057 << " in BasisFamilyBase::lessThan(). This is most likely "
00058 "an internal bug, because the case of distinct types should have "
00059 "been dealt with before this point.");
00060
00061 const VectorBasisComponent* p
00062 = dynamic_cast<const VectorBasisComponent*>(other);
00063
00064 if (direction_ < p->direction_) return true;
00065 if (direction_ > p->direction_) return false;
00066
00067 return (master_ < p->master_);
00068 }