vtf-logo

WENOStdProblem.h

Go to the documentation of this file.
00001 // -*- C++ -*-
00002 
00003 // Copyright (C) 2003-2007 California Institute of Technology
00004 // Ralf Deiterding, ralf@amroc.net
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