00001
00002
00003
00004
00005
00006
00007
00008
00009 #ifndef AMROC_CLP_STD_PROBLEM_H
00010 #define AMROC_CLP_STD_PROBLEM_H
00011
00020 #ifndef OWN_INTEGRATOR
00021 # if DIM == 1
00022 class IntegratorSpecific :
00023 public ClpIntegrator<VectorType,AuxType,DIM> {
00024 public:
00025 IntegratorSpecific() :
00026 ClpIntegrator<VectorType,AuxType,DIM>(NEQUSED,NWAVES,f_normalflux,
00027 f_check,f_setaux,f_source) {}
00028 };
00029 # else
00030 class IntegratorSpecific :
00031 public ClpIntegrator<VectorType,AuxType,DIM> {
00032 public:
00033 IntegratorSpecific() :
00034 ClpIntegrator<VectorType,AuxType,DIM>(NEQUSED,NWAVES,f_normalflux,f_transverseflux,
00035 f_check,f_setaux,f_source) {}
00036 };
00037 # endif
00038 #endif
00039
00040 #ifndef OWN_FIXUP
00041 class FixupSpecific :
00042 public ClpFixup<VectorType,FixupType,AuxType,DIM> {
00043 public:
00044 FixupSpecific(ClpIntegrator<VectorType,AuxType,DIM>& integ) :
00045 ClpFixup<VectorType,FixupType,AuxType,DIM>(integ) {}
00046 };
00047 #endif
00048
00049 #ifndef OWN_INITIALCONDITION
00050 class InitialConditionSpecific :
00051 public F77InitialCondition<VectorType,DIM> {
00052 public:
00053 InitialConditionSpecific() :
00054 F77InitialCondition<VectorType,DIM>(f_initial) {}
00055 };
00056 #endif
00057
00058 #ifndef OWN_BIUNDARYCONDITION
00059 class BoundaryConditionsSpecific :
00060 public F77BoundaryConditions<VectorType,DIM> {
00061 public:
00062 BoundaryConditionsSpecific() :
00063 F77BoundaryConditions<VectorType,DIM>(f_boundary) {}
00064 };
00065 #endif
00066
00067 #ifndef OWN_FLAGGING
00068 class FlaggingSpecific :
00069 public AMRFlagging<VectorType,FixupType,FlagType,DIM> {
00070 typedef AMRFlagging<VectorType,FixupType,FlagType,DIM> base;
00071 public:
00072 FlaggingSpecific(base::solver_type& solver) : base(solver) {
00073 base::AddCriterion(new ByValue<VectorType,FlagType,DIM>());
00074 base::AddCriterion(new ScaledGradient<VectorType,FlagType,DIM>());
00075 base::AddCriterion(new LimiterType<VectorType,FlagType,DIM>());
00076 base::AddCriterion(new AbsoluteError<VectorType,FixupType,FlagType,DIM>(solver));
00077 base::AddCriterion(new RelativeError<VectorType,FixupType,FlagType,DIM>(solver));
00078 #ifdef f_flgout
00079 base::AddCriterion(new F77ByValue<VectorType,FlagType,DIM>(f_flgout));
00080 base::AddCriterion(new F77ScaledGradient<VectorType,FlagType,DIM>(f_flgout));
00081 base::AddCriterion(new F77LimiterType<VectorType,FlagType,DIM>(f_flgout));
00082 base::AddCriterion(new F77AbsoluteError<VectorType,FixupType,FlagType,DIM>(solver,f_flgout));
00083 base::AddCriterion(new F77RelativeError<VectorType,FixupType,FlagType,DIM>(solver,f_flgout));
00084 #endif
00085 }
00086
00087 ~FlaggingSpecific() { DeleteAllCriterions(); }
00088 };
00089 #endif
00090
00091 #ifndef OWN_AMRSOLVER
00092 class SolverSpecific :
00093 public AMRSolver<VectorType,FixupType,FlagType,DIM> {
00094 typedef AMRSolver<VectorType,FixupType,FlagType,DIM> base;
00095 public:
00096 SolverSpecific(IntegratorSpecific& integ,
00097 base::initial_condition_type& init,
00098 base::boundary_conditions_type& bc) :
00099 AMRSolver<VectorType,FixupType,FlagType,DIM>(integ, init, bc) {
00100 SetLevelTransfer(new F77LevelTransfer<VectorType,DIM>(f_prolong, f_restrict));
00101 #ifdef f_flgout
00102 SetFileOutput(new F77FileOutput<VectorType,DIM>(f_flgout));
00103 #else
00104 SetFileOutput(new FileOutput<VectorType,DIM>());
00105 #endif
00106 SetFixup(new FixupSpecific(integ));
00107 SetFlagging(new FlaggingSpecific(*this));
00108 }
00109
00110 ~SolverSpecific() {
00111 delete _LevelTransfer;
00112 delete _Flagging;
00113 delete _Fixup;
00114 delete _FileOutput;
00115 }
00116 };
00117 #endif
00118
00119 #ifndef OWN_SOLVERCONTROL
00120 class SolverControlSpecific :
00121 public SolverControl {
00122 public:
00123 SolverControlSpecific(AMRSolver<VectorType,FixupType,FlagType,DIM>& solver) :
00124 SolverControl(solver) {}
00125 };
00126 #endif
00127
00128
00129 #endif