00001 #ifndef __LimiterFactory__ 00002 #define __LimiterFactory__ 00003 00004 00005 00055 #include <stdio.h> 00056 00057 #include "AbsLimiter.hpp" 00058 00059 #define NUMBER_LIMITER_CONTEXT 3 00060 #define NUMBER_LIMITER_MODELS 8 00061 00062 class LimiterFactory 00063 { 00064 public: 00065 00066 const static char context[NUMBER_LIMITER_CONTEXT][64]; 00067 00068 const static char model[NUMBER_LIMITER_MODELS][64]; 00069 const static int modelContext[NUMBER_LIMITER_MODELS]; 00070 00071 00072 protected: 00073 00074 AbsLimiter* createCentralLimiter(); 00075 00076 AbsLimiter* createMinmod(); 00077 AbsLimiter* createDoubleMinmod(); 00078 AbsLimiter* createSuperbee(); 00079 00080 AbsLimiter* createMineno(); 00081 00082 AbsLimiter* createHarmod(); 00083 AbsLimiter* createHareno(); 00084 00085 AbsLimiter* createVarSuperbee(double alpha); 00086 00087 public: 00088 LimiterFactory(){} 00089 virtual ~LimiterFactory(){} 00090 00091 static int numberOfContexts(){ return NUMBER_LIMITER_CONTEXT; } 00092 static int numberOfModels(){ return NUMBER_LIMITER_MODELS; } 00093 00094 static const char* getContext(int i){ return LimiterFactory::context[getModelContext(i)]; } 00095 static const char* getModel(int i){ return LimiterFactory::model[i]; } 00096 static const int getModelContext(int i){ return LimiterFactory::modelContext[i]; } 00097 00098 AbsLimiter* createModel(int indexModel=0, double alpha=0.0); 00099 00100 virtual void report(FILE* file){} 00101 }; 00102 00103 00104 #endif