PlayaGhostImporter.hpp
Go to the documentation of this file.
00001 /* @HEADER@ */
00002 // ************************************************************************
00003 // 
00004 //                 Playa: Programmable Linear Algebra
00005 //                 Copyright 2012 Sandia Corporation
00006 // 
00007 // Under the terms of Contract DE-AC04-94AL85000 with Sandia Corporation,
00008 // the U.S. Government retains certain rights in this software.
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 Kevin Long (kevin.long@ttu.edu)
00038 // 
00039 
00040 /* @HEADER@ */
00041 
00042 #ifndef PLAYA_GHOSTIMPORTER_HPP
00043 #define PLAYA_GHOSTIMPORTER_HPP
00044 
00045 #include "PlayaVectorDecl.hpp"
00046 #include "PlayaVectorSpaceDecl.hpp"
00047 #include "PlayaGhostView.hpp"
00048 
00049 namespace Playa
00050 {
00051 using namespace Teuchos;
00052 
00053 /**
00054  * In many applications it is necessary to view some subset of 
00055  * off-processor, or "ghost", elements of a vector. In 
00056  * matrix-vector multiplications,
00057  * access to off-processor elements is assumed to be handled internally
00058  * by the apply() method of LinearOp subtypes, so the Playa Vector type
00059  * does not need explicit accessors for ghost elements. However, in 
00060  * application interfaces such as finite element assembly engines, 
00061  * read-only access to ghost elements is sometimes required. The abstract
00062  * classes GhostImporter and GhostView define flexible interfaces
00063  * through which a set of required ghosts can be defined, ghost values
00064  * can be imported, and element values can be accessed through
00065  * global indices.
00066  *
00067  * Class GhostImporter is used to specify the set of ghost elements
00068  * that must be imported to this processor, and then to carry out the import.
00069  * It will often be the case that we do many imports with the same
00070  * set of ghost indices; for example, in a nonlinear problem the
00071  * import of the same set of ghost indices
00072  * will be repeated at each function evaluation. Therefore, it makes sense
00073  * to do the definition of the ghost index set and the import as
00074  * distinct methods. The definition of the ghost index set should be done
00075  * in the constructors of GhostImporter subclasses.
00076  */
00077 template <class Scalar>
00078 class GhostImporter
00079 {
00080 public:
00081   /** virtual dtor */
00082   virtual ~GhostImporter(){;}
00083 
00084   /** 
00085    * Import the ghost elements of the given vector
00086    * as specified during construction of this object. 
00087    */
00088   virtual void importView(const Vector<Scalar>& x,
00089     RCP<GhostView<Scalar> >& ghostView) const = 0 ;
00090 
00091 };
00092 
00093 }
00094 
00095 #endif

Site Contact