00001
00002
00003
00004
00005
00006 #ifndef AMROC_PROBLEM_H
00007 #define AMROC_PROBLEM_H
00008
00009 #include "euler2.h"
00010 #include "ClpProblem.h"
00011
00012 #define OWN_INTEGRATOR
00013 class IntegratorSpecific :
00014 public ClpIntegrator<VectorType,AuxType,DIM> {
00015 public:
00016 IntegratorSpecific() :
00017 ClpIntegrator<VectorType,AuxType,DIM>(NEQUSED,NWAVES,f_normalflux,f_transverseflux,
00018 f_check,f_setaux,f_source) {}
00019 virtual double CalculateGrid(vec_grid_data_type& NewStateVec,
00020 vec_grid_data_type& OldStateVec,
00021 vec_grid_data_type* Flux[],
00022 const int& level, const double& t,
00023 const double& dt, const int& mpass)
00024 { NewStateVec.copy(OldStateVec); return 1.0; }
00025 };
00026
00027 #define OWN_GFMAMRSOLVER
00028 #include "ClpStdGFMProblem.h"
00029 #include "StatCPTLevelSet.h"
00030
00031 class SolverSpecific :
00032 public AMRGFMSolver<VectorType,FixupType,FlagType,DIM> {
00033 typedef VectorType::InternalDataType DataType;
00034 typedef AMRGFMSolver<VectorType,FixupType,FlagType,DIM> base;
00035 public:
00036 SolverSpecific(IntegratorSpecific& integ,
00037 base::initial_condition_type& init,
00038 base::boundary_conditions_type& bc) : base(integ, init, bc) {
00039 SetLevelTransfer(new F77LevelTransfer<VectorType,DIM>(f_prolong, f_restrict));
00040 #ifdef f_flgout
00041 SetFileOutput(new F77GFMFileOutput<VectorType,FixupType,FlagType,DIM>(*this,f_flgout));
00042 #else
00043 SetFileOutput(new GFMFileOutput<VectorType,FixupType,FlagType,DIM>(*this));
00044 #endif
00045 SetFixup(new FixupSpecific(integ));
00046 SetFlagging(new FlaggingSpecific(*this));
00047 AddGFM(new GhostFluidMethod<VectorType,DIM>(
00048 new F77GFMBoundary<VectorType,DIM>(f_ibndrfl,f_itrans),
00049 new StatCPTLevelSet<DataType,DIM>()));
00050 }
00051
00052 ~SolverSpecific() {
00053 DeleteGFM(_GFM[0]);
00054 delete _Flagging;
00055 delete _Fixup;
00056 }