00001
00002
00003
00004
00005 #include "PlayaVectorDecl.hpp"
00006 #include "PlayaSerialVector.hpp"
00007 #include "PlayaSerialVectorSpace.hpp"
00008 #include "Teuchos_Assert.hpp"
00009
00010 #ifndef HAVE_TEUCHOS_EXPLICIT_INSTANTIATION
00011 #include "PlayaVectorImpl.hpp"
00012 #include "PlayaLinearOperatorImpl.hpp"
00013 #endif
00014
00015 using namespace Teuchos;
00016 using namespace Playa;
00017
00018 SerialVector::SerialVector(const VectorSpace<double>& vs)
00019 : SingleChunkVector<double>(),
00020 vecSpace_(vs),
00021 data_(vs.dim()),
00022 dim_(vs.dim())
00023 {
00024 const SerialVectorSpace* rvs
00025 = dynamic_cast<const SerialVectorSpace*>(vs.ptr().get());
00026 TEUCHOS_TEST_FOR_EXCEPTION(rvs==0, std::runtime_error,
00027 "could not cast vector space to SerialVectorSpace in "
00028 "SerialVector ctor");
00029 }
00030
00031
00032 void SerialVector::setElement(int index, const double& value)
00033 {
00034 data_[index] = value;
00035 }
00036
00037 void SerialVector::addToElement(int index, const double& value)
00038 {
00039 data_[index] += value;
00040 }
00041
00042 void SerialVector::setElements(int numElems, const int* globalIndices,
00043 const double* values)
00044 {
00045 for (int i=0; i<numElems; i++)
00046 {
00047 data_[globalIndices[i]] = values[i];
00048 }
00049 }
00050
00051 void SerialVector::addToElements(int numElems, const int* globalIndices,
00052 const double* values)
00053 {
00054 for (int i=0; i<numElems; i++)
00055 {
00056 data_[globalIndices[i]] += values[i];
00057 }
00058 }
00059
00060 const SerialVector* SerialVector::getConcrete(const Vector<double>& x)
00061 {
00062 const SerialVector* rtn = dynamic_cast<const SerialVector*>(x.ptr().get());
00063 TEUCHOS_TEST_FOR_EXCEPT(rtn==0);
00064 return rtn;
00065 }
00066
00067 SerialVector* SerialVector::getConcrete(Vector<double>& x)
00068 {
00069 SerialVector* rtn = dynamic_cast<SerialVector*>(x.ptr().get());
00070 TEUCHOS_TEST_FOR_EXCEPT(rtn==0);
00071 return rtn;
00072 }
00073
00074 void SerialVector::finalizeAssembly()
00075 {
00076
00077 }
00078
00079 void SerialVector::getElements(const int* globalIndices, int numElems,
00080 Array<double>& elems) const
00081 {
00082 elems.resize(numElems);
00083 for (int i=0; i<numElems; i++)
00084 {
00085 elems[i] = (*this)[globalIndices[i]];
00086 }
00087 }
00088
00089 std::string SerialVector::description() const
00090 {
00091 std::ostringstream oss;
00092 oss << "SerialVector[dim=" << dim_ << "]" ;
00093 return oss.str();
00094 }
00095