vtf-logo

clawpack/applications/euler_chem/1d/Shocktube/src/Problem.h

00001 // -*- C++ -*-
00002 
00003 // Copyright (C) 2002 Ralf Deiterding
00004 // Brandenburgische Universitaet Cottbus
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   }