TSFEpetraGhostView.cpp
Go to the documentation of this file.
00001 /* ***********************************************************************
00002 // 
00003 //           TSFExtended: Trilinos Solver Framework Extended
00004 //                 Copyright (2004) Sandia Corporation
00005 // 
00006 // Under terms of Contract DE-AC04-94AL85000, there is a non-exclusive
00007 // license for use of this work by or on behalf of the U.S. Government.
00008 // 
00009 // This library is free software; you can redistribute it and/or modify
00010 // it under the terms of the GNU Lesser General Public License as
00011 // published by the Free Software Foundation; either version 2.1 of the
00012 // License, or (at your option) any later version.
00013 //  
00014 // This library is distributed in the hope that it will be useful, but
00015 // WITHOUT ANY WARRANTY; without even the implied warranty of
00016 // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
00017 // Lesser General Public License for more details.
00018 //  
00019 // You should have received a copy of the GNU Lesser General Public
00020 // License along with this library; if not, write to the Free Software
00021 // Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
00022 // USA
00023 // Questions? Contact Michael A. Heroux (maherou@sandia.gov) 
00024 // 
00025 // **********************************************************************/
00026 
00027 #include "TSFEpetraGhostView.hpp"
00028 #include "Epetra_Import.h"
00029 
00030 
00031 using namespace Teuchos;
00032 using namespace TSFExtended;
00033 
00034 const double& EpetraGhostView::getElement(OrdType globalIndex) const 
00035 {
00036   const Epetra_BlockMap& myMap = ghostView_->Map();
00037   return (*ghostView_)[myMap.LID(globalIndex)];
00038 }
00039 
00040 void EpetraGhostView::getElements(const OrdType* globalIndices, int numElems,
00041                                   Array<double>& elems) const
00042 {
00043   elems.resize(numElems);
00044   const Epetra_BlockMap& myMap = ghostView_->Map();
00045 
00046   for (int i=0; i<numElems; i++)
00047     {
00048       elems[i] = (*ghostView_)[myMap.LID(globalIndices[i])];
00049     }
00050 }
00051 
00052 void  EpetraGhostView::import(const Epetra_Import& importer,
00053                               const Epetra_Vector& srcObject)
00054 {
00055   /* If my vector does not yet exist, create it using the target map of the
00056    * importer */
00057   if (ghostView_.get()==0)
00058     {
00059       ghostView_ = rcp(new Epetra_Vector(importer.TargetMap()));
00060     }
00061 
00062   /* do the import */
00063   int ierr = ghostView_->Import(srcObject, importer, Insert);
00064   TEST_FOR_EXCEPTION(ierr < 0, std::runtime_error, "ierr=" << ierr << " in EpetraGhostView::import()");
00065 }
00066 
00067 void EpetraGhostView::print(std::ostream& os) const
00068 {
00069   if (ghostView_.get()==0) 
00070     {
00071       os << "[null Epetra ghost view]" << std::endl;
00072     }
00073   else
00074     {
00075       ghostView_->Print(os);
00076     }
00077 }

Site Contact