Go to the documentation of this file.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
00032
00033
00034
00035
00036
00037
00038
00039
00040
00041
00042 #include "PlayaVectorDecl.hpp"
00043 #include "PlayaSerialVector.hpp"
00044 #include "PlayaSerialVectorSpace.hpp"
00045 #include "Teuchos_Assert.hpp"
00046
00047 #ifndef HAVE_TEUCHOS_EXPLICIT_INSTANTIATION
00048 #include "PlayaVectorImpl.hpp"
00049 #include "PlayaLinearOperatorImpl.hpp"
00050 #endif
00051
00052 using namespace Teuchos;
00053 using namespace Playa;
00054
00055 SerialVector::SerialVector(const VectorSpace<double>& vs)
00056 : SingleChunkVector<double>(),
00057 vecSpace_(vs),
00058 data_(vs.dim()),
00059 dim_(vs.dim())
00060 {
00061 const SerialVectorSpace* rvs
00062 = dynamic_cast<const SerialVectorSpace*>(vs.ptr().get());
00063 TEUCHOS_TEST_FOR_EXCEPTION(rvs==0, std::runtime_error,
00064 "could not cast vector space to SerialVectorSpace in "
00065 "SerialVector ctor");
00066 }
00067
00068
00069 void SerialVector::setElement(int index, const double& value)
00070 {
00071 data_[index] = value;
00072 }
00073
00074 void SerialVector::addToElement(int index, const double& value)
00075 {
00076 data_[index] += value;
00077 }
00078
00079 void SerialVector::setElements(int numElems, const int* globalIndices,
00080 const double* values)
00081 {
00082 for (int i=0; i<numElems; i++)
00083 {
00084 data_[globalIndices[i]] = values[i];
00085 }
00086 }
00087
00088 void SerialVector::addToElements(int numElems, const int* globalIndices,
00089 const double* values)
00090 {
00091 for (int i=0; i<numElems; i++)
00092 {
00093 data_[globalIndices[i]] += values[i];
00094 }
00095 }
00096
00097 const SerialVector* SerialVector::getConcrete(const Vector<double>& x)
00098 {
00099 const SerialVector* rtn = dynamic_cast<const SerialVector*>(x.ptr().get());
00100 TEUCHOS_TEST_FOR_EXCEPT(rtn==0);
00101 return rtn;
00102 }
00103
00104 SerialVector* SerialVector::getConcrete(Vector<double>& x)
00105 {
00106 SerialVector* rtn = dynamic_cast<SerialVector*>(x.ptr().get());
00107 TEUCHOS_TEST_FOR_EXCEPT(rtn==0);
00108 return rtn;
00109 }
00110
00111 void SerialVector::finalizeAssembly()
00112 {
00113
00114 }
00115
00116 void SerialVector::getElements(const int* globalIndices, int numElems,
00117 Array<double>& elems) const
00118 {
00119 elems.resize(numElems);
00120 for (int i=0; i<numElems; i++)
00121 {
00122 elems[i] = (*this)[globalIndices[i]];
00123 }
00124 }
00125
00126 std::string SerialVector::description() const
00127 {
00128 std::ostringstream oss;
00129 oss << "SerialVector[dim=" << dim_ << "]" ;
00130 return oss.str();
00131 }
00132