00001
00002
00003
00004
00005
00006 #ifndef AMROC_PROBLEM_H
00007 #define AMROC_PROBLEM_H
00008
00009 #include "eulerrhok1.h"
00010
00011 #define NEQUATIONS 12
00012 #define NEQUSED 12
00013 #define NFIXUP 11
00014 #define NAUX 1
00015
00016 #include "ClpProblem.h"
00017
00018 #define OWN_FLAGGING
00019 #define OWN_AMRSOLVER
00020 #include "ClpStdProblem.h"
00021 #include "F77Interfaces/F77UpdateLevelTransfer.h"
00022
00023 class FlaggingSpecific :
00024 public AMRFlagging<VectorType,FixupType,FlagType,DIM> {
00025 typedef AMRFlagging<VectorType,FixupType,FlagType,DIM> base;
00026 public:
00027 FlaggingSpecific(base::solver_type& solver) : base(solver) {
00028 base::AddCriterion(new F77ScaledGradient<VectorType,FlagType,DIM>(f_flg));
00029 base::AddCriterion(new F77LimiterType<VectorType,FlagType,DIM>(f_flg));
00030 base::AddCriterion(new F77AbsoluteError<VectorType,FixupType,FlagType,DIM>(solver,f_flg));
00031 base::AddCriterion(new F77RelativeError<VectorType,FixupType,FlagType,DIM>(solver,f_flg));
00032 }
00033
00034 ~FlaggingSpecific() { DeleteAllCriterions(); }
00035 };
00036
00037 class SolverSpecific :
00038 public AMRSolver<VectorType,FixupType,FlagType,DIM> {
00039 typedef AMRSolver<VectorType,FixupType,FlagType,DIM> base;
00040 public:
00041 SolverSpecific(IntegratorSpecific& integ,
00042 base::initial_condition_type& init,
00043 base::boundary_conditions_type& bc) :
00044 AMRSolver<VectorType,FixupType,FlagType,DIM>(integ, init, bc) {
00045 SetLevelTransfer(new F77UpdateLevelTransfer<VectorType,DIM>(f_prolong, f_restrict, f_tupdate));
00046 SetFileOutput(new F77FileOutput<VectorType,DIM>(f_out));
00047 SetFixup(new FixupSpecific(integ));
00048 SetFlagging(new FlaggingSpecific(*this));
00049 }
00050
00051 ~SolverSpecific() {
00052 delete _LevelTransfer;
00053 delete _Flagging;
00054 delete _Fixup;
00055 delete _FileOutput;
00056 }