86#ifdef ENABLE_TRANSPOSE_TIMINGS 
   87  Teuchos::Time myTime(
"global");
 
   88  Teuchos::TimeMonitor MM(myTime);
 
   89  Teuchos::RCP<Teuchos::Time> mtime;
 
   90  mtime=MM.getNewTimer(
"Transpose: CreateTransposeLocal 1");
 
   96  if(OrigCrsMatrix) OrigMatrixIsCrsMatrix_ = 
true;
 
   97  else OrigMatrixIsCrsMatrix_ = 
false;
 
   99  const Epetra_Map & TransMap      = orig.RowMatrixColMap();
 
  100  int TransNnz                     = orig.NumMyNonzeros();
 
  107  NumMyRows_ = orig.NumMyRows();
 
  108  NumMyCols_ = orig.NumMyCols();
 
  110  TransRowptr.
Resize(NumMyCols_+1);
 
  111  TransColind.
Resize(TransNnz);
 
  113  std::vector<int> CurrentStart(NumMyCols_,0);
 
  116  if (OrigMatrixIsCrsMatrix_)
 
  120    for (i=0; i<NumMyRows_; i++)
 
  123      if (err != 0) 
throw OrigGraph.
ReportError(
"ExtractMyRowView failed",err);
 
  124      for (j=0; j<NumIndices; j++) ++CurrentStart[Indices_[j]];
 
  130    MaxNumEntries_ = orig.MaxNumEntries();
 
  131    delete [] Indices_; 
delete [] Values_;
 
  132    Indices_ = 
new int[MaxNumEntries_];
 
  133    Values_  = 
new double[MaxNumEntries_];
 
  135    for (i=0; i<NumMyRows_; i++)
 
  137      err = orig.ExtractMyRowCopy(i, MaxNumEntries_, NumIndices, Values_, Indices_);
 
  139        std::cerr << 
"ExtractMyRowCopy failed."<<std::endl;
 
  142      for (j=0; j<NumIndices; j++) ++CurrentStart[Indices_[j]];
 
  148  for (i=1;i<NumMyCols_+1; i++)  TransRowptr[i]   = CurrentStart[i-1] + TransRowptr[i-1];
 
  149  for (i=0;i<NumMyCols_;   i++)  CurrentStart[i]  = TransRowptr[i];
 
  152  for (i=0; i<NumMyRows_; i++)
 
  154    if (OrigMatrixIsCrsMatrix_)
 
  157      err = orig.ExtractMyRowCopy(i, MaxNumEntries_, NumIndices, Values_, Indices_);
 
  159      std::cerr << 
"ExtractMyRowCopy failed."<<std::endl;
 
  163    for (j=0; j<NumIndices; j++)
 
  165      int idx = CurrentStart[Indices_[j]];
 
  166      TransColind[idx] = i;
 
  167      TransVals[idx]    = Values_[j];
 
  168      ++CurrentStart[Indices_[j]];
 
  172#ifdef ENABLE_TRANSPOSE_TIMINGS 
  174  mtime=MM.getNewTimer(
"Transpose: CreateTransposeLocal 2");
 
  182  if(OrigMatrixIsCrsMatrix_ && OrigCrsMatrix->
Importer())
 
  184  if(OrigMatrixIsCrsMatrix_ && OrigCrsMatrix->
Exporter())
 
  187#ifdef ENABLE_TRANSPOSE_TIMINGS 
  189  mtime=MM.getNewTimer(
"Transpose: CreateTransposeLocal 3");
 
  196    throw TempTransA1->
ReportError(
"ExpertStaticFillComplete failed.",err);
 
  199#ifdef ENABLE_TRANSPOSE_TIMINGS 
 
  214  if( !TransposeRowMap_ )
 
  216    if( IgnoreNonLocalCols_ )
 
  217      TransposeRowMap_ = (
Epetra_Map *) &(orig.OperatorRangeMap()); 
 
  219      TransposeRowMap_ = (
Epetra_Map *) &(orig.OperatorDomainMap()); 
 
  222  NumMyRows_ = orig.NumMyRows();
 
  223  NumMyCols_ = orig.NumMyCols();
 
  234    newObj_ = TransposeMatrix_ = TempTransA1;
 
  238#ifdef ENABLE_TRANSPOSE_TIMINGS 
  239  Teuchos::Time myTime(
"global");
 
  240  Teuchos::TimeMonitor MM(myTime);
 
  241  Teuchos::RCP<Teuchos::Time> mtime;
 
  242  mtime=MM.getNewTimer(
"Transpose: Final FusedExport");
 
  250#ifdef ENABLE_TRANSPOSE_TIMINGS 
 
  264  bool DeleteExporter = 
false;
 
  269    TransposeExporter = 
new Epetra_Export(TransposeMatrix_->DomainMap(),TransposeMatrix_->RowMap());
 
  272  TransposeMatrix_->PutScalar(0.0);  
 
  274  EPETRA_CHK_ERR(TransposeMatrix_->Export(*TempTransA1, *TransposeExporter, 
Add));
 
  276  if(DeleteExporter) 
delete TransposeExporter;
 
 
int ExpertStaticFillComplete(const Epetra_Map &DomainMap, const Epetra_Map &RangeMap, const Epetra_Import *Importer=0, const Epetra_Export *Exporter=0, int NumMyDiagonals=-1)