vtf-logo

RIMStdProblem.h

Go to the documentation of this file.
00001 // -*- C++ -*-
00002 // $Header: /home/proj/vtf3d/vtf/amroc/rim/RIMStdProblem.h,v 1.2 2004/12/01 20:51:35 ralf Exp $
00003 
00004 #ifndef AMROC_RIM_STD_PROBLEM_H
00005 #define AMROC_RIM_STD_PROBLEM_H
00006 
00012 class IntegratorSpecific :  
00013   public RIMIntegrator<VectorType,DIM> {
00014 public:   
00015   IntegratorSpecific() : 
00016 #ifdef f_flgout
00017     RIMIntegrator<VectorType,DIM>(f_rimstep,f_check) {}
00018 #else   
00019     RIMIntegrator<VectorType,DIM>(f_rimstep) {} 
00020 #endif
00021 };
00022   
00023 class FixupSpecific : 
00024   public AMRFixup<VectorType,FixupType,DIM> {
00025 public:
00026   FixupSpecific() : AMRFixup<VectorType,FixupType,DIM>() {}
00027 };
00028 
00029 class InitialConditionSpecific : 
00030   public F77InitialCondition<VectorType,DIM> {
00031 public:    
00032   InitialConditionSpecific() : 
00033     F77InitialCondition<VectorType,DIM>(f_initial) {}
00034 };
00035   
00036 class BoundaryConditionsSpecific : 
00037   public F77BoundaryConditions<VectorType,DIM> {
00038 public:    
00039   BoundaryConditionsSpecific() : 
00040     F77BoundaryConditions<VectorType,DIM>(f_boundary) {}
00041 };
00042 
00043 #ifndef OWN_FLAGGING
00044 class FlaggingSpecific : 
00045   public AMRFlagging<VectorType,FixupType,FlagType,DIM> {
00046   typedef AMRFlagging<VectorType,FixupType,FlagType,DIM> base;
00047 public:
00048   FlaggingSpecific(base::solver_type& solver) : base(solver) {
00049       base::AddCriterion(new ByValue<VectorType,FlagType,DIM>());
00050       base::AddCriterion(new ScaledGradient<VectorType,FlagType,DIM>());
00051       base::AddCriterion(new LimiterType<VectorType,FlagType,DIM>());
00052       base::AddCriterion(new AbsoluteError<VectorType,FixupType,FlagType,DIM>(solver));
00053       base::AddCriterion(new RelativeError<VectorType,FixupType,FlagType,DIM>(solver));
00054 #ifdef f_flgout
00055       base::AddCriterion(new F77ByValue<VectorType,FlagType,DIM>(f_flgout));
00056       base::AddCriterion(new F77ScaledGradient<VectorType,FlagType,DIM>(f_flgout));
00057       base::AddCriterion(new F77LimiterType<VectorType,FlagType,DIM>(f_flgout));
00058       base::AddCriterion(new F77AbsoluteError<VectorType,FixupType,FlagType,DIM>(solver,f_flgout));
00059       base::AddCriterion(new F77RelativeError<VectorType,FixupType,FlagType,DIM>(solver,f_flgout));
00060 #endif
00061     }
00062 
00063   ~FlaggingSpecific() { DeleteAllCriterions(); }
00064 };
00065 #endif 
00066 
00067 #ifndef OWN_AMRSOLVER
00068 class SolverSpecific : 
00069   public AMRSolver<VectorType,FixupType,FlagType,DIM> {
00070   typedef AMRSolver<VectorType,FixupType,FlagType,DIM> base;
00071 public:
00072   SolverSpecific(IntegratorSpecific& integ, 
00073                  base::initial_condition_type& init,
00074                  base::boundary_conditions_type& bc) :
00075     AMRSolver<VectorType,FixupType,FlagType,DIM>(integ, init, bc) {
00076     SetLevelTransfer(new F77LevelTransfer<VectorType,DIM>(f_prolong, f_restrict));
00077 #ifdef f_flgout
00078     SetFileOutput(new F77FileOutput<VectorType,DIM>(f_flgout)); 
00079 #else   
00080     SetFileOutput(new FileOutput<VectorType,DIM>()); 
00081 #endif
00082     SetFixup(new FixupSpecific());
00083     SetFlagging(new FlaggingSpecific(*this)); 
00084   }  
00085 
00086   ~SolverSpecific() {
00087     delete _LevelTransfer;
00088     delete _Flagging;
00089     delete _Fixup;
00090     delete _FileOutput;
00091   }
00092 }; 
00093 #endif 
00094  
00095 class SolverControlSpecific : 
00096   public SolverControl {
00097 public:
00098   SolverControlSpecific(AMRSolver<VectorType,FixupType,FlagType,DIM>& solver) : 
00099     SolverControl(solver) {}
00100 }; 
00101 
00102 
00103 #endif