00001 #ifndef __FLinearSolverFactory__
00002 #define __FLinearSolverFactory__
00003 
00004 
00005 
00048 #include <stdio.h>
00049 
00050 #include "AbsFLinearSolver.hpp"
00051 
00052 class FLinearSolverFactory
00053 {
00054 public:
00055 
00056 int             n, nmax;
00057 char**  model; 
00058 char**  modelName;
00059 int*            modelContext;
00060 
00061 int             nContext, maxContext;
00062 char**  context;
00063 
00064 public:
00065         
00066 FLinearSolverFactory(int nmodels=50, int ncontext=10);
00067 virtual ~FLinearSolverFactory();
00068 
00069 int numberOfContexts(){ return nContext; }
00070 int numberOfModels(){ return n; }
00071 
00072 int maxContexts(){ return maxContext; }
00073 int maxModels(){ return nmax; }
00074 
00075 void addModel(char* name, char* newModel, int icontext);
00076 void addContext(char* newContext);
00077 
00078 char*           getContextType(int icontext){ return context[icontext]; }
00079 char*           getContext(int imodel){ return context[getModelContext(imodel)]; }
00080 char*           getModel(int imodel){ return model[imodel]; }
00081 char*           getModelName(int imodel){ return modelName[imodel]; }
00082 int             getModelContext(int imodel){ return modelContext[imodel]; }
00083 
00084 virtual AbsFLinearSolver* createSolver(int indexModel=0, int maxIter=10, int m=10, double epsilon=1.0e-4);
00085 
00086 virtual AbsFLinearSolver* createSolverByName(char* name, int maxIter, int m=10, double epsilon=1.0e-4);
00087 
00088 
00089 virtual AbsFLinearSolver* createSolverByName(char* name, int outerIter, int l, 
00090                                                                 int innerIter, int m, double epsilon=1.0e-4);
00091 
00092 
00093 virtual AbsFLinearSolver* createSolverByName(char* name, int outerIter, int l, 
00094                                                                 AbsFLinearSolver* innerSolver, double epsilon=1.0e-4);
00095 
00096 virtual void showModels();
00097 
00098 virtual void report();
00099 virtual void report(FILE* file){}
00100 };
00101 
00102 
00103 
00104 #endif