Teuchos - Trilinos Tools Package Version of the Day
Teuchos_Comm.hpp
00001 // @HEADER
00002 // ***********************************************************************
00003 //
00004 //                    Teuchos: Common Tools Package
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 Michael A. Heroux (maherou@sandia.gov)
00038 //
00039 // ***********************************************************************
00040 // @HEADER
00041 
00042 #ifndef TEUCHOS_COMM_HPP
00043 #define TEUCHOS_COMM_HPP
00044 
00045 #include "Teuchos_ReductionOp.hpp"
00046 #include "Teuchos_ArrayRCP.hpp"
00047 
00048 
00049 namespace Teuchos {
00050 
00070 template<class OrdinalType>
00071 class CommStatus {
00072 public:
00074   virtual ~CommStatus() {}
00075 
00077   virtual OrdinalType getSourceRank () = 0;
00078 };
00079 
00080 // Forward declaration for CommRequest::wait.
00081 template<class OrdinalType>
00082 class Comm;
00083 
00133 template<class OrdinalType>
00134 class CommRequest : public Teuchos::Describable {
00135 public:
00143   virtual ~CommRequest() {}
00144 
00146   virtual RCP<CommStatus<OrdinalType> > wait () = 0;
00147 };
00148 
00306 template<typename Ordinal>
00307 class Comm : virtual public Describable {
00308 public:
00310 
00311 
00313   virtual ~Comm() {}
00315   
00317 
00318 
00325   virtual int getRank() const = 0;
00326 
00333   virtual int getSize() const = 0;
00334   
00336 
00338 
00339 
00343   virtual void barrier() const = 0;
00344   
00359   virtual void broadcast(
00360     const int rootRank, const Ordinal bytes, char buffer[]
00361     ) const = 0;
00362 
00385   virtual void gatherAll(
00386     const Ordinal sendBytes, const char sendBuffer[]
00387     ,const Ordinal recvBytes, char recvBuffer[]
00388     ) const = 0;
00389 
00403   virtual void reduceAll(
00404     const ValueTypeReductionOp<Ordinal,char> &reductOp
00405     ,const Ordinal bytes, const char sendBuffer[], char globalReducts[]
00406     ) const = 0;
00407 
00431   virtual void reduceAllAndScatter(
00432     const ValueTypeReductionOp<Ordinal,char> &reductOp
00433     ,const Ordinal sendBytes, const char sendBuffer[]
00434     ,const Ordinal recvCounts[], char myGlobalReducts[]
00435     ) const = 0;
00436 
00450   virtual void scan(
00451     const ValueTypeReductionOp<Ordinal,char> &reductOp
00452     ,const Ordinal bytes, const char sendBuffer[], char scanReducts[]
00453     ) const = 0;
00454 
00456 
00457 
00478   virtual void send(
00479     const Ordinal bytes, const char sendBuffer[], const int destRank
00480     ) const = 0;
00481 
00501   virtual void ssend(
00502     const Ordinal bytes, const char sendBuffer[], const int destRank
00503     ) const = 0;
00504 
00505 
00526   virtual int receive(
00527     const int sourceRank, const Ordinal bytes, char recvBuffer[]
00528     ) const = 0;
00529 
00530 
00542   virtual void readySend(
00543     const ArrayView<const char> &sendBuffer,
00544     const int destRank
00545     ) const = 0;
00546   
00547 
00549 
00550 
00552 
00553 
00554 
00566   virtual RCP<CommRequest<Ordinal> > isend(
00567     const ArrayView<const char> &sendBuffer,
00568     const int destRank
00569     ) const = 0;
00570 
00571 
00586   virtual RCP<CommRequest<Ordinal> > ireceive(
00587     const ArrayView<char> &recvBuffer,
00588     const int sourceRank
00589     ) const = 0;
00590 
00591 
00602   virtual void waitAll(
00603     const ArrayView<RCP<CommRequest<Ordinal> > > &requests
00604     ) const = 0;
00605 
00622   virtual void 
00623   waitAll (const ArrayView<RCP<CommRequest<Ordinal> > >& requests,
00624      const ArrayView<RCP<CommStatus<Ordinal> > >& statuses) const = 0;
00625 
00649   virtual RCP<CommStatus<Ordinal> > 
00650   wait (const Ptr<RCP<CommRequest<Ordinal> > >& request) const = 0;
00651 
00653 
00655 
00656 
00724   virtual RCP< Comm > duplicate() const = 0;
00725 
00760   virtual RCP< Comm > split(const int color, const int key) const = 0;
00761 
00784   virtual RCP<Comm> createSubcommunicator(
00785     const ArrayView<const int>& ranks) const = 0;
00786 
00788   
00789 }; // class Comm
00790   
00791 } // namespace Teuchos
00792 
00793 #endif // TEUCHOS_COMM_HPP
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Defines