00001
00002
00003 #ifndef AMROC_PROBLEM_H
00004 #define AMROC_PROBLEM_H
00005
00006 #define DIM 2
00007
00008 #include "WENOProblem.h"
00009
00010
00011 #define OWN_GFMAMRSOLVER
00012 #include "WENOStdGFMProblem.h"
00013
00014 class SolverSpecific :
00015 public AMRGFMSolver<VectorType,FixupType,FlagType,DIM> {
00016 typedef VectorType::InternalDataType DataType;
00017 typedef AMRGFMSolver<VectorType,FixupType,FlagType,DIM> base;
00018 typedef F77GFMFileOutput<VectorType,FixupType,FlagType,DIM> output_type;
00019 public:
00020
00021 SolverSpecific(IntegratorSpecific& integ,
00022 base::initial_condition_type& init,
00023 base::boundary_conditions_type& bc) : base(integ, init, bc) {
00024 SetLevelTransfer(new F77LevelTransfer<VectorType,DIM>(f_prolong, f_restrict));
00025 #ifdef f_flgout
00026 SetFileOutput(new F77GFMFileOutput<VectorType,FixupType,FlagType,DIM>(*this,f_flgout));
00027 #else
00028 SetFileOutput(new GFMFileOutput<VectorType,FixupType,FlagType,DIM>(*this));
00029 #endif
00030 SetFixup(new FixupSpecific());
00031 SetFlagging(new FlaggingSpecific(*this));
00032 AddGFM(new GhostFluidMethod<VectorType,DIM>(
00033 new F77GFMBoundary<VectorType,DIM>(f_ibndrfl,f_itrans),
00034 new F77GFMLevelSet<DataType,DIM>(f_lset)));
00035 base::Flagging_().AddCriterion(new RefinePhi<VectorType,FixupType,FlagType,DIM>(*this));
00036 base::Flagging_().AddCriterion(new ResolvePhi<VectorType,FixupType,FlagType,DIM>(*this,false));
00037 base::Flagging_().AddCriterion(new ResolvePhi<VectorType,FixupType,FlagType,DIM>(*this,true));
00038 base::Flagging_().AddCriterion(new UnflagPhi<VectorType,FixupType,FlagType,DIM>(*this));
00039 }
00040
00041 ~SolverSpecific() {
00042 DeleteGFM(_GFM[0]);
00043 delete _Flagging;
00044 delete _Fixup;
00045 }