threaded_main.cpp

Go to the documentation of this file.
00001 //@HEADER
00002 // ************************************************************************
00003 // 
00004 //               Epetra: Linear Algebra Services Package 
00005 //                 Copyright (2001) 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 // This library is free software; you can redistribute it and/or modify
00011 // it under the terms of the GNU Lesser General Public License as
00012 // published by the Free Software Foundation; either version 2.1 of the
00013 // License, or (at your option) any later version.
00014 //  
00015 // This library is distributed in the hope that it will be useful, but
00016 // WITHOUT ANY WARRANTY; without even the implied warranty of
00017 // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
00018 // Lesser General Public License for more details.
00019 //  
00020 // You should have received a copy of the GNU Lesser General Public
00021 // License along with this library; if not, write to the Free Software
00022 // Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
00023 // USA
00024 // Questions? Contact Michael A. Heroux (maherou@sandia.gov) 
00025 // 
00026 // ************************************************************************
00027 //@HEADER
00028 
00029 // Petra_Comm Test routine
00030 
00031 #include <math.h>
00032 #include <unistd.h>
00033 #include <string.h>
00034 #include <ctype.h>
00035 #include <stdlib.h>
00036 #ifdef PETRA_MPI
00037 #include <mpi.h>
00038 #endif
00039 #include "Petra_Comm.h"
00040 #include "Petra_Time.h"
00041 
00042 int main(int argc, char *argv[]) {
00043 
00044   // Initialize MPI
00045 
00046   MPI_Init(&argc,&argv);
00047   int size, rank; // Number of MPI processes, My process ID
00048 
00049   MPI_Comm_size(MPI_COMM_WORLD, &size);
00050   MPI_Comm_rank(MPI_COMM_WORLD, &rank);
00051   // I'm alive !!!
00052 
00053 
00054 
00055   Petra_Comm & petracomm = *new Petra_Comm( MPI_COMM_WORLD );
00056   int MyPID =  petracomm.MyPID();
00057   int NumProc =  petracomm.NumProc();
00058   cout << "Processor "<<MyPID<<" of " << NumProc << " is alive."<<endl;
00059 
00060   if (NumProc!=2) {
00061     cout << " This special routine only works for 2 processors " << endl;
00062     abort();
00063   }
00064 
00065 
00066   Petra_Comm * other_comm;
00067   MPI_Status status;
00068 
00069   unsigned int icomm = &petracomm;
00070 
00071   if (MyPID==1) cout << "Address of Petra_Comm object on PE 1 = " << &petracomm << endl;
00072 
00073   if (MyPID==0) MPI_Recv((void *) &other_comm, 1, MPI_UNSIGNED, 1, 99, MPI_COMM_WORLD, &status);
00074   else MPI_Send ( (void *) &icomm, 1, MPI_UNSIGNED, 0, 99, MPI_COMM_WORLD);
00075 
00076   if (MyPID==0) cout << "Address of other Petra_Comm object on PE 0 = " << other_comm << endl;
00077   
00078   int otherPID = other_comm->MyPID();
00079 
00080   if (MyPID==0) cout << "Processor "<<MyPID<<" of " << NumProc
00081          << " has a neighbor processor with ID "
00082          << otherPID << " of " << other_comm->NumProc() <<endl;
00083  
00084   delete &petracomm;
00085   MPI_Finalize();
00086 
00087   return 0;
00088 }
00089  

Generated on Wed May 12 21:41:06 2010 for Epetra Package Browser (Single Doxygen Collection) by  doxygen 1.4.7