Thyra Version of the Day
Thyra_DefaultSpmdVector_def.hpp
00001 // @HEADER
00002 // ***********************************************************************
00003 // 
00004 //    Thyra: Interfaces and Support for Abstract Numerical Algorithms
00005 //                 Copyright (2004) Sandia Corporation
00006 // 
00007 // Under terms of Contract DE-AC04-94AL85000, there is a non-exclusive
00008 // license for use of this work by or on behalf of the U.S. Government.
00009 // 
00010 // Redistribution and use in source and binary forms, with or without
00011 // modification, are permitted provided that the following conditions are
00012 // met:
00013 //
00014 // 1. Redistributions of source code must retain the above copyright
00015 // notice, this list of conditions and the following disclaimer.
00016 //
00017 // 2. Redistributions in binary form must reproduce the above copyright
00018 // notice, this list of conditions and the following disclaimer in the
00019 // documentation and/or other materials provided with the distribution.
00020 //
00021 // 3. Neither the name of the Corporation nor the names of the
00022 // contributors may be used to endorse or promote products derived from
00023 // this software without specific prior written permission.
00024 //
00025 // THIS SOFTWARE IS PROVIDED BY SANDIA CORPORATION "AS IS" AND ANY
00026 // EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
00027 // IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
00028 // PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL SANDIA CORPORATION OR THE
00029 // CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
00030 // EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
00031 // PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
00032 // PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
00033 // LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
00034 // NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
00035 // SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
00036 //
00037 // Questions? Contact Roscoe A. Bartlett (bartlettra@ornl.gov) 
00038 // 
00039 // ***********************************************************************
00040 // @HEADER
00041 
00042 #ifndef THYRA_DEFAULT_SPMD_VECTOR_DEF_HPP
00043 #define THYRA_DEFAULT_SPMD_VECTOR_DEF_HPP
00044 
00045 
00046 #include "Thyra_DefaultSpmdVector_decl.hpp"
00047 #include "Thyra_SpmdVectorBase.hpp"
00048 #include "Thyra_SpmdVectorSpaceDefaultBase.hpp"
00049 
00050 
00051 namespace Thyra {
00052 
00053 
00054 // Constructors/initializers/accessors
00055 
00056 
00057 template<class Scalar>
00058 DefaultSpmdVector<Scalar>::DefaultSpmdVector()
00059   :stride_(0)
00060 {}
00061 
00062 
00063 template<class Scalar>
00064 DefaultSpmdVector<Scalar>::DefaultSpmdVector(
00065   const RCP<const SpmdVectorSpaceBase<Scalar> > &spmdSpace_in,
00066   const ArrayRCP<Scalar> &localValues,
00067   const Ordinal stride
00068   )
00069 {
00070   initialize(spmdSpace_in, localValues, stride);
00071 }
00072 
00073 
00074 template<class Scalar>
00075 void DefaultSpmdVector<Scalar>::initialize(
00076   const RCP<const SpmdVectorSpaceBase<Scalar> > &spmdSpace_in
00077   ,const ArrayRCP<Scalar> &localValues
00078   ,const Ordinal stride
00079   )
00080 {
00081 #ifdef TEUCHOS_DEBUG
00082   TEUCHOS_TEST_FOR_EXCEPT(is_null(spmdSpace_in));
00083   TEUCHOS_TEST_FOR_EXCEPT(spmdSpace_in->localSubDim() > 0 && localValues.get()==NULL);
00084   TEUCHOS_TEST_FOR_EXCEPT(stride==0);
00085 #endif
00086   spmdSpace_ = spmdSpace_in;
00087   localValues_ = localValues;
00088   stride_ = stride;
00089   this->updateSpmdSpace();
00090 }
00091 
00092 
00093 template<class Scalar>
00094 void DefaultSpmdVector<Scalar>::uninitialize(
00095   RCP<const SpmdVectorSpaceBase<Scalar> > *spmdSpace_in
00096   ,ArrayRCP<Scalar> *localValues
00097   ,Ordinal *stride
00098   )
00099 {
00100   if(spmdSpace_in) *spmdSpace_in = spmdSpace_;
00101   if(localValues) *localValues = localValues_;
00102   if(stride) *stride = stride_;
00103 
00104   spmdSpace_ = Teuchos::null;
00105   localValues_ = Teuchos::null;
00106   stride_ = 0;
00107 
00108   this->updateSpmdSpace();
00109 }
00110 
00111 
00112 // Overridden from SpmdVectorBase
00113 
00114 
00115 template<class Scalar>
00116 RCP<const SpmdVectorSpaceBase<Scalar> >
00117 DefaultSpmdVector<Scalar>::spmdSpace() const
00118 {
00119   return spmdSpace_;
00120 }
00121 
00122 
00123 template<class Scalar>
00124 void DefaultSpmdVector<Scalar>::getNonconstLocalDataImpl(
00125   const Ptr<ArrayRCP<Scalar> > &localValues )
00126 {
00127   *localValues = localValues_;
00128 }
00129 
00130 
00131 template<class Scalar>
00132 void DefaultSpmdVector<Scalar>::getLocalDataImpl(
00133   const Ptr<ArrayRCP<const Scalar> > &localValues ) const
00134 {
00135   *localValues = localValues_;
00136 }
00137 
00138 
00139 } // end namespace Thyra
00140 
00141 
00142 #endif // THYRA_DEFAULT_SPMD_VECTOR_DEF_HPP
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Defines