00001 /* 00002 I think that Amesos_Component should be an additional interface and 00003 hence functions which do not differ from the Amesos_BaseSolver class 00004 are not included here. 00005 */ 00006 /* 00007 // @HEADER 00008 // *********************************************************************** 00009 // 00010 // Amesos: Direct Sparse Solver Package 00011 // Copyright (2004) Sandia Corporation 00012 // 00013 // Under terms of Contract DE-AC04-94AL85000, there is a non-exclusive 00014 // license for use of this work by or on behalf of the U.S. Government. 00015 // 00016 // This library is free software; you can redistribute it and/or modify 00017 // it under the terms of the GNU Lesser General Public License as 00018 // published by the Free Software Foundation; either version 2.1 of the 00019 // License, or (at your option) any later version. 00020 // 00021 // This library is distributed in the hope that it will be useful, but 00022 // WITHOUT ANY WARRANTY; without even the implied warranty of 00023 // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 00024 // Lesser General Public License for more details. 00025 // 00026 // You should have received a copy of the GNU Lesser General Public 00027 // License along with this library; if not, write to the Free Software 00028 // Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 00029 // USA 00030 // Questions? Contact Michael A. Heroux (maherou@sandia.gov) 00031 // 00032 // *********************************************************************** 00033 // @HEADER 00034 */ 00035 00036 #ifndef _AMESOS_COMPONENTBASESOLVER_H_ 00037 #define _AMESOS_COMPONENTBASESOLVER_H_ 00038 00039 #include "Teuchos_ParameterList.hpp" 00040 #include "Epetra_LinearProblem.h" 00041 class Epetra_LinearProblem; 00042 class Epetra_MultiVector; 00043 class Epetra_Map; 00044 class Epetra_Comm; 00045 00047 00112 class Amesos_ComponentBaseSolver: public virtual Amesos_BaseSolver { 00113 00114 public: 00115 00117 00118 virtual ~Amesos_ComponentBaseSolver() {}; 00120 00122 00123 00125 00130 virtual int PartialFactorization() = 0; 00131 00133 00138 virtual int Lsolve() = 0; 00139 00141 00146 */ 00147 virtual int LsolveStart() = 0; 00149 00152 virtual int LsolvePart(int begin, int end) = 0; 00153 00155 00160 virtual int Usolve() = 0; 00161 00162 00164 00169 */ 00170 virtual int UsolveStart() = 0; 00172 00175 virtual int UsolvePart(int begin, int end) = 0; 00176 00178 00183 00185 00187 virtual int SetRowPermutation( int* RowPermutation ) = 0; 00188 00190 virtual int SetColumnPermutation( int* ColumnPermutation ) = 0; 00191 00193 virtual int SetSubMatrixSize( int SubMatrixSize ) = 0; 00194 00196 00207 virtual int GetRowPermutation( int** RowPermutation ) = 0; 00208 00210 00221 virtual int GetColumnPermutation( int** ColumnPermutation ) = 0; 00222 00224 /* 00225 SubMatrixSize is the number of rows and columns in the matrix 00226 that was factored. (i.e. the number of columns of L and the 00227 number of rows of U) 00228 */ 00229 virtual int GetSubMatrixSize( int* SubMatrixSize ) = 0; 00230 00232 /* 00233 SchurComplement is a square matrix with each side having size 00234 MatrixSize-SubMatrixSize which contains the Schur 00235 complement based on the matrices L and U, i.e. 00236 L(SubMatrixSize+1:MatrixSize,1:SubMatrixSize) * 00237 U(1:SubMatrixSize,SubMatrixSize+1:MatrixSize) 00238 */ 00239 virtual int GetSchurComplement( Epetra_CrsMatrix* SchurComplement ) = 0; 00240 00242 00243 }; 00244 00245 #endif /* _AMESOS_COMPONENTBASESOLVER_H_ */