/[escript]/trunk/escript/src/Data.cpp
ViewVC logotype

Diff of /trunk/escript/src/Data.cpp

Parent Directory Parent Directory | Revision Log Revision Log | View Patch Patch

revision 781 by ksteube, Mon Jul 10 04:00:08 2006 UTC revision 782 by bcumming, Tue Jul 18 00:47:47 2006 UTC
# Line 754  Data::convertToNumArrayFromSampleNo(int Line 754  Data::convertToNumArrayFromSampleNo(int
754    
755  const  const
756  boost::python::numeric::array  boost::python::numeric::array
757    #ifdef PASO_MPI
758    Data::convertToNumArrayFromDPNo(int procNo,
759                                    int sampleNo,
760                                                                    int dataPointNo)
761    
762    #else
763  Data::convertToNumArrayFromDPNo(int sampleNo,  Data::convertToNumArrayFromDPNo(int sampleNo,
764                                  int dataPointNo)                                  int dataPointNo)
765    #endif
766  {  {
767    //    //
768    // Check a valid sample number has been supplied    // Check a valid sample number has been supplied
# Line 1404  Data::mindp() const Line 1411  Data::mindp() const
1411    
1412    int SampleNo;    int SampleNo;
1413    int DataPointNo;    int DataPointNo;
1414    #ifdef PASO_MPI
1415        int ProcNo;
1416      calc_mindp(ProcNo,SampleNo,DataPointNo);
1417      return make_tuple(ProcNo,SampleNo,DataPointNo);
1418    #else
1419    calc_mindp(SampleNo,DataPointNo);    calc_mindp(SampleNo,DataPointNo);
   
1420    return make_tuple(SampleNo,DataPointNo);    return make_tuple(SampleNo,DataPointNo);
1421    #endif
1422  }  }
1423    
1424  void  void
1425  Data::calc_mindp(int& SampleNo,  #ifdef PASO_MPI
1426                   int& DataPointNo) const  Data::calc_mindp(   int& ProcNo,
1427                    int& SampleNo,
1428            int& DataPointNo) const
1429    #else
1430    Data::calc_mindp(   int& SampleNo,
1431            int& DataPointNo) const
1432    #endif
1433  {  {
1434    int i,j;    int i,j;
1435    int lowi=0,lowj=0;    int lowi=0,lowj=0;
# Line 1448  Data::calc_mindp(int& SampleNo, Line 1465  Data::calc_mindp(int& SampleNo,
1465      }      }
1466    }    }
1467    
1468    #ifdef PASO_MPI
1469        // determine the processor on which the minimum occurs
1470        next = temp.getDataPoint(lowi,lowj)();
1471        int lowProc = 0;
1472        double *globalMins = new double[get_MPISize()+1];
1473        int error = MPI_Gather ( &next, 1, MPI_DOUBLE, globalMins, 1, MPI_DOUBLE, 0, get_MPIComm() );
1474        
1475        if( get_MPIRank()==0 ){
1476            next = globalMins[lowProc];
1477            for( i=1; i<get_MPISize(); i++ )
1478                if( next>globalMins[i] ){
1479                    lowProc = i;
1480                    next = globalMins[i];
1481                }
1482        }
1483        MPI_Bcast( &lowProc, 1, MPI_DOUBLE, 0, get_MPIComm() );
1484    
1485        delete [] globalMins;
1486        ProcNo = lowProc;
1487    #endif
1488    SampleNo = lowi;    SampleNo = lowi;
1489    DataPointNo = lowj;    DataPointNo = lowj;
1490  }  }
# Line 1584  Data::powD(const Data& right) const Line 1621  Data::powD(const Data& right) const
1621    return result;    return result;
1622  }  }
1623    
 void  
 Data::print()  
 {  
   int i,j;  
     
   printf( "Data is %dX%d\n", getNumSamples(), getNumDataPointsPerSample() );  
   for( i=0; i<getNumSamples(); i++ )  
   {  
     printf( "[%6d]", i );  
     for( j=0; j<getNumDataPointsPerSample(); j++ )  
       printf( "\t%10.7g", (getSampleData(i))[j] );  
     printf( "\n" );  
   }  
 }  
1624    
1625  //  //
1626  // NOTE: It is essential to specify the namespace this operator belongs to  // NOTE: It is essential to specify the namespace this operator belongs to
# Line 2382  ostream& escript::operator<<(ostream& o, Line 2405  ostream& escript::operator<<(ostream& o,
2405    o << data.toString();    o << data.toString();
2406    return o;    return o;
2407  }  }
2408    
2409    /* Member functions specific to the MPI implementation */
2410    #ifdef PASO_MPI
2411    
2412    void
2413    Data::print()
2414    {
2415      int i,j;
2416      
2417      printf( "Data is %dX%d\n", getNumSamples(), getNumDataPointsPerSample() );
2418      for( i=0; i<getNumSamples(); i++ )
2419      {
2420        printf( "[%6d]", i );
2421        for( j=0; j<getNumDataPointsPerSample(); j++ )
2422          printf( "\t%10.7g", (getSampleData(i))[j] );
2423        printf( "\n" );
2424      }
2425    }
2426    
2427    int
2428    Data::get_MPISize() const
2429    {
2430        int error, size;
2431        error = MPI_Comm_size( get_MPIComm(), &size );
2432    
2433        return size;
2434    }
2435    
2436    int
2437    Data::get_MPIRank() const
2438    {
2439        int error, rank;
2440        error = MPI_Comm_rank( get_MPIComm(), &rank );
2441    
2442        return rank;
2443    }
2444    
2445    MPI_Comm
2446    Data::get_MPIComm() const
2447    {
2448        return MPI_COMM_WORLD;
2449    }
2450    #endif

Legend:
Removed from v.781  
changed lines
  Added in v.782

  ViewVC Help
Powered by ViewVC 1.1.26