00001 /*@HEADER 00002 // *********************************************************************** 00003 // 00004 // Ifpack: Object-Oriented Algebraic Preconditioner Package 00005 // Copyright (2002) 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 00043 #include "call_epetra.h" 00044 #include "Epetra_CrsMatrix.h" 00045 #include "Epetra_Map.h" 00046 #include <vector> 00047 00048 00049 int ExtractIndicesView(void* A, int GlobalRow, int *NumEntries, int **Indices){ 00050 int ierr = 0; 00051 Epetra_CrsMatrix *mat = (Epetra_CrsMatrix*) A; 00052 int MyRow = mat->LRID(GlobalRow); 00053 if(MyRow == -1) return 0; 00054 int & len = *NumEntries; 00055 int *& ind = *Indices; 00056 ierr += mat->Graph().ExtractMyRowView(MyRow, len, ind); 00057 return ierr; 00058 } 00059 00060 int ExtractValuesView(void *A, int GlobalRow, int *NumEntries, double** Values){ 00061 int ierr = 0; 00062 Epetra_CrsMatrix *mat = (Epetra_CrsMatrix*) A; 00063 int MyRow = mat->LRID(GlobalRow); 00064 if(MyRow == -1) return 0; 00065 int &len = *NumEntries; 00066 double *& val = *Values; 00067 ierr += mat->ExtractMyRowView(MyRow, len, val); 00068 return ierr; 00069 } 00070 00071 int MinMaxMyGID(void* A, bool Row, bool min){ 00072 Epetra_CrsMatrix* mat = (Epetra_CrsMatrix*) A; 00073 if(Row){ 00074 if(min){ 00075 return mat->RowMap().MinMyGID(); 00076 } else { 00077 return mat->RowMap().MaxMyGID(); 00078 } 00079 } else { 00080 if(min){ 00081 return mat->ColMap().MinMyGID(); 00082 } else { 00083 return mat->ColMap().MaxMyGID(); 00084 } 00085 } 00086 } 00087 00088 int NumGlobalRowCol(void* A, bool Row){ 00089 Epetra_CrsMatrix *mat = (Epetra_CrsMatrix*) A; 00090 if(Row){ 00091 return mat->NumGlobalRows(); 00092 } else { 00093 return mat->NumGlobalCols(); 00094 } 00095 } 00096 00097 int NumMyRowEntries(void *A, int Row, int *numEntries){ 00098 Epetra_CrsMatrix* mat = (Epetra_CrsMatrix*) A; 00099 return mat->NumMyRowEntries(mat->LRID(Row), *numEntries); 00100 }
1.7.6.1