vtf-logo

ClpStdProblem.h

Go to the documentation of this file.
00001 // -*- C++ -*-
00002 
00003 // Copyright (C) 2002 Ralf Deiterding
00004 // Brandenburgische Universitaet Cottbus
00005 //
00006 // Copyright (C) 2003-2007 California Institute of Technology
00007 // Ralf Deiterding, ralf@amroc.net
00008 
00009 #ifndef AMROC_CLP_STD_PROBLEM_H
00010 #define AMROC_CLP_STD_PROBLEM_H
00011 
00020 #ifndef OWN_INTEGRATOR
00021 # if DIM == 1
00022 class IntegratorSpecific :  
00023   public ClpIntegrator<VectorType,AuxType,DIM> {
00024 public:   
00025   IntegratorSpecific() : 
00026     ClpIntegrator<VectorType,AuxType,DIM>(NEQUSED,NWAVES,f_normalflux,
00027                                           f_check,f_setaux,f_source) {}
00028 };
00029 # else
00030 class IntegratorSpecific :  
00031   public ClpIntegrator<VectorType,AuxType,DIM> {
00032 public:   
00033   IntegratorSpecific() : 
00034     ClpIntegrator<VectorType,AuxType,DIM>(NEQUSED,NWAVES,f_normalflux,f_transverseflux,
00035                                           f_check,f_setaux,f_source) {}
00036 };
00037 # endif
00038 #endif
00039   
00040 #ifndef OWN_FIXUP
00041 class FixupSpecific : 
00042   public ClpFixup<VectorType,FixupType,AuxType,DIM> {
00043 public:
00044   FixupSpecific(ClpIntegrator<VectorType,AuxType,DIM>& integ) :
00045     ClpFixup<VectorType,FixupType,AuxType,DIM>(integ) {}
00046 };
00047 #endif
00048 
00049 #ifndef OWN_INITIALCONDITION
00050 class InitialConditionSpecific : 
00051   public F77InitialCondition<VectorType,DIM> {
00052 public:    
00053   InitialConditionSpecific() : 
00054     F77InitialCondition<VectorType,DIM>(f_initial) {}
00055 };
00056 #endif
00057   
00058 #ifndef OWN_BIUNDARYCONDITION
00059 class BoundaryConditionsSpecific : 
00060   public F77BoundaryConditions<VectorType,DIM> {
00061 public:    
00062   BoundaryConditionsSpecific() : 
00063     F77BoundaryConditions<VectorType,DIM>(f_boundary) {}
00064 };
00065 #endif
00066 
00067 #ifndef OWN_FLAGGING
00068 class FlaggingSpecific : 
00069   public AMRFlagging<VectorType,FixupType,FlagType,DIM> {
00070   typedef AMRFlagging<VectorType,FixupType,FlagType,DIM> base;
00071 public:
00072   FlaggingSpecific(base::solver_type& solver) : base(solver) {
00073       base::AddCriterion(new ByValue<VectorType,FlagType,DIM>());
00074       base::AddCriterion(new ScaledGradient<VectorType,FlagType,DIM>());
00075       base::AddCriterion(new LimiterType<VectorType,FlagType,DIM>());
00076       base::AddCriterion(new AbsoluteError<VectorType,FixupType,FlagType,DIM>(solver));
00077       base::AddCriterion(new RelativeError<VectorType,FixupType,FlagType,DIM>(solver));
00078 #ifdef f_flgout
00079       base::AddCriterion(new F77ByValue<VectorType,FlagType,DIM>(f_flgout));
00080       base::AddCriterion(new F77ScaledGradient<VectorType,FlagType,DIM>(f_flgout));
00081       base::AddCriterion(new F77LimiterType<VectorType,FlagType,DIM>(f_flgout));
00082       base::AddCriterion(new F77AbsoluteError<VectorType,FixupType,FlagType,DIM>(solver,f_flgout));
00083       base::AddCriterion(new F77RelativeError<VectorType,FixupType,FlagType,DIM>(solver,f_flgout));
00084 #endif
00085     }
00086 
00087   ~FlaggingSpecific() { DeleteAllCriterions(); }
00088 };
00089 #endif 
00090 
00091 #ifndef OWN_AMRSOLVER
00092 class SolverSpecific : 
00093   public AMRSolver<VectorType,FixupType,FlagType,DIM> {
00094   typedef AMRSolver<VectorType,FixupType,FlagType,DIM> base;
00095 public:
00096   SolverSpecific(IntegratorSpecific& integ, 
00097                  base::initial_condition_type& init,
00098                  base::boundary_conditions_type& bc) :
00099     AMRSolver<VectorType,FixupType,FlagType,DIM>(integ, init, bc) {
00100     SetLevelTransfer(new F77LevelTransfer<VectorType,DIM>(f_prolong, f_restrict));
00101 #ifdef f_flgout
00102     SetFileOutput(new F77FileOutput<VectorType,DIM>(f_flgout)); 
00103 #else   
00104     SetFileOutput(new FileOutput<VectorType,DIM>()); 
00105 #endif
00106     SetFixup(new FixupSpecific(integ));
00107     SetFlagging(new FlaggingSpecific(*this)); 
00108   }  
00109 
00110   ~SolverSpecific() {
00111     delete _LevelTransfer;
00112     delete _Flagging;
00113     delete _Fixup;
00114     delete _FileOutput;
00115   }
00116 }; 
00117 #endif 
00118  
00119 #ifndef OWN_SOLVERCONTROL
00120 class SolverControlSpecific : 
00121   public SolverControl {
00122 public:
00123   SolverControlSpecific(AMRSolver<VectorType,FixupType,FlagType,DIM>& solver) : 
00124     SolverControl(solver) {}
00125 }; 
00126 #endif 
00127 
00128 
00129 #endif