00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027
00028
00029
00030 #include "call_epetra.h"
00031 #include "Epetra_CrsMatrix.h"
00032 #include "Epetra_Map.h"
00033 #include <vector>
00034
00035
00036 int ExtractIndicesView(void* A, int GlobalRow, int *NumEntries, int **Indices){
00037 int ierr = 0;
00038 Epetra_CrsMatrix *mat = (Epetra_CrsMatrix*) A;
00039 int MyRow = mat->LRID(GlobalRow);
00040 if(MyRow == -1) return 0;
00041 int & len = *NumEntries;
00042 int *& ind = *Indices;
00043 ierr += mat->Graph().ExtractMyRowView(MyRow, len, ind);
00044 return ierr;
00045 }
00046
00047 int ExtractValuesView(void *A, int GlobalRow, int *NumEntries, double** Values){
00048 int ierr = 0;
00049 Epetra_CrsMatrix *mat = (Epetra_CrsMatrix*) A;
00050 int MyRow = mat->LRID(GlobalRow);
00051 if(MyRow == -1) return 0;
00052 int &len = *NumEntries;
00053 double *& val = *Values;
00054 ierr += mat->ExtractMyRowView(MyRow, len, val);
00055 return ierr;
00056 }
00057
00058 int MinMaxMyGID(void* A, bool Row, bool min){
00059 Epetra_CrsMatrix* mat = (Epetra_CrsMatrix*) A;
00060 if(Row){
00061 if(min){
00062 return mat->RowMap().MinMyGID();
00063 } else {
00064 return mat->RowMap().MaxMyGID();
00065 }
00066 } else {
00067 if(min){
00068 return mat->ColMap().MinMyGID();
00069 } else {
00070 return mat->ColMap().MaxMyGID();
00071 }
00072 }
00073 }
00074
00075 int NumGlobalRowCol(void* A, bool Row){
00076 Epetra_CrsMatrix *mat = (Epetra_CrsMatrix*) A;
00077 if(Row){
00078 return mat->NumGlobalRows();
00079 } else {
00080 return mat->NumGlobalCols();
00081 }
00082 }
00083
00084 int NumMyRowEntries(void *A, int Row, int *numEntries){
00085 Epetra_CrsMatrix* mat = (Epetra_CrsMatrix*) A;
00086 return mat->NumMyRowEntries(mat->LRID(Row), *numEntries);
00087 }