00001
00002
00003
00004
00005
00006 #ifndef AMROC_WENO_STD_PROBLEM_H
00007 #define AMROC_WENO_STD_PROBLEM_H
00008
00017 class IntegratorSpecific :
00018 public WENOIntegrator<VectorType,DIM> {
00019 public:
00020 IntegratorSpecific() :
00021 WENOIntegrator<VectorType,DIM>(f_rkstep,f_bounds,f_check) {}
00022 };
00023
00024 class FixupSpecific :
00025 public WENOFixup<VectorType,FixupType,DIM> {
00026 public:
00027 FixupSpecific() : WENOFixup<VectorType,FixupType,DIM>() {}
00028 };
00029
00030 #ifndef OWN_INITIALCONDITION
00031 class InitialConditionSpecific :
00032 public F77InitialCondition<VectorType,DIM> {
00033 public:
00034 InitialConditionSpecific() :
00035 F77InitialCondition<VectorType,DIM>(f_initial) {}
00036 };
00037 #endif
00038
00039 class BoundaryConditionsSpecific :
00040 public F77BoundaryConditions<VectorType,DIM> {
00041 public:
00042 BoundaryConditionsSpecific() :
00043 F77BoundaryConditions<VectorType,DIM>(f_boundary) {}
00044 };
00045
00046 #ifndef OWN_FLAGGING
00047 class FlaggingSpecific :
00048 public AMRFlagging<VectorType,FixupType,FlagType,DIM> {
00049 typedef AMRFlagging<VectorType,FixupType,FlagType,DIM> base;
00050 public:
00051 FlaggingSpecific(base::solver_type& solver) : base(solver) {
00052 base::AddCriterion(new ByValue<VectorType,FlagType,DIM>());
00053 base::AddCriterion(new ScaledGradient<VectorType,FlagType,DIM>());
00054 base::AddCriterion(new LimiterType<VectorType,FlagType,DIM>());
00055 base::AddCriterion(new AbsoluteError<VectorType,FixupType,FlagType,DIM>(solver));
00056 base::AddCriterion(new RelativeError<VectorType,FixupType,FlagType,DIM>(solver));
00057 #ifdef f_flgout
00058 base::AddCriterion(new F77ByValue<VectorType,FlagType,DIM>(f_flgout));
00059 base::AddCriterion(new F77ScaledGradient<VectorType,FlagType,DIM>(f_flgout));
00060 base::AddCriterion(new F77LimiterType<VectorType,FlagType,DIM>(f_flgout));
00061 base::AddCriterion(new F77AbsoluteError<VectorType,FixupType,FlagType,DIM>(solver,f_flgout));
00062 base::AddCriterion(new F77RelativeError<VectorType,FixupType,FlagType,DIM>(solver,f_flgout));
00063 #endif
00064 }
00065
00066 ~FlaggingSpecific() { DeleteAllCriterions(); }
00067 };
00068 #endif
00069
00070 #ifndef OWN_AMRSOLVER
00071 class SolverSpecific :
00072 public AMRSolver<VectorType,FixupType,FlagType,DIM> {
00073 typedef AMRSolver<VectorType,FixupType,FlagType,DIM> base;
00074 typedef WENOFixup<VectorType,FixupType,DIM> weno_fixup_type;
00075 typedef WENOIntegrator<VectorType,DIM> weno_integ_type;
00076 public:
00077 SolverSpecific(IntegratorSpecific& integ,
00078 base::initial_condition_type& init,
00079 base::boundary_conditions_type& bc) :
00080 AMRSolver<VectorType,FixupType,FlagType,DIM>(integ, init, bc) {
00081 SetLevelTransfer(new F77LevelTransfer<VectorType,DIM>(f_prolong, f_restrict));
00082 #ifdef f_flgout
00083 SetFileOutput(new WENOF77FileOutput<VectorType,DIM>(f_flgout,f_bounds));
00084 #else
00085 SetFileOutput(new FileOutput<VectorType,DIM>());
00086 #endif
00087 SetFixup(new FixupSpecific());
00088 SetFlagging(new FlaggingSpecific(*this));
00089 }
00090
00091 ~SolverSpecific() {
00092 delete _LevelTransfer;
00093 delete _Flagging;
00094 delete _Fixup;
00095 delete _FileOutput;
00096 }
00097 };
00098 #endif
00099
00100 class SolverControlSpecific :
00101 public SolverControl {
00102 public:
00103 SolverControlSpecific(AMRSolver<VectorType,FixupType,FlagType,DIM>& solver) :
00104 SolverControl(solver) {}
00105 };
00106
00107
00108 #endif