00001
00002
00003
00004
00005
00006 #ifndef AMROC_PROBLEM_H
00007 #define AMROC_PROBLEM_H
00008
00009 #include "DAGH.h"
00010 #include "IO/control-device.h"
00011 #include "Vector.h"
00012 #include "VectorLarge.h"
00013
00014 #define DIM 3
00015 #define NEQUATIONS 5
00016 typedef DOUBLE DataType;
00017 typedef Vector<DataType,NEQUATIONS> VectorType;
00018
00019 #include "DAGHFortranInterfaces.h"
00020
00021
00022
00023
00024
00025
00026 #define NEQUSED 5
00027 #define NWAVES 3
00028 #define NAUX 0
00029 typedef Vector<DataType,NAUX> AuxType;
00030
00031 #define f_step_3 FORTRAN_NAME(step3, STEP3)
00032 #define f_normalflux FORTRAN_NAME(rpn3eu, RPN3EU)
00033 #define f_transverseflux FORTRAN_NAME(rpt3eu, RPT3EU)
00034
00035 extern "C" {
00036 void f_step_3();
00037 void f_normalflux();
00038 void f_transverseflux();
00039 }
00040
00041 #include "ClpIntegrator3.h"
00042
00043 class IntegratorSpecific :
00044 public ClpIntegrator<VectorType,AuxType,DIM> {
00045 public:
00046 IntegratorSpecific() :
00047 ClpIntegrator<VectorType,AuxType,DIM>(NEQUSED,NWAVES,f_normalflux,f_transverseflux) {}
00048 };
00049
00050
00051
00052
00053
00054 #define f_initial FORTRAN_NAME(ic, IC)
00055
00056 extern "C" {
00057 void f_initial();
00058 }
00059
00060 #include "F77Interfaces/F77InitialCondition.h"
00061
00062 class InitialConditionSpecific :
00063 public F77InitialCondition<VectorType,DIM> {
00064 public:
00065 InitialConditionSpecific() :
00066 F77InitialCondition<VectorType,DIM>(f_initial) {}
00067 };
00068
00069
00070
00071
00072
00073 #define f_boundary FORTRAN_NAME(physbd, PHYSBD)
00074
00075 extern "C" {
00076 void f_boundary();
00077 }
00078
00079 #include "F77Interfaces/F77BoundaryConditions.h"
00080
00081 class BoundaryConditionsSpecific :
00082 public F77BoundaryConditions<VectorType,DIM> {
00083 public:
00084 BoundaryConditionsSpecific() :
00085 F77BoundaryConditions<VectorType,DIM>(f_boundary) {}
00086 };
00087
00088
00089
00090
00091
00092 #define f_restrict FORTRAN_NAME(restrict3, RESTRICT3)
00093 #define f_prolong FORTRAN_NAME(prolong3, PROLONG3)
00094
00095 extern "C" {
00096 void f_restrict();
00097 void f_prolong();
00098 }
00099
00100 #include "F77Interfaces/F77LevelTransfer.h"
00101
00102 class LevelTransferSpecific :
00103 public F77LevelTransfer<VectorType,DIM> {
00104 public:
00105 LevelTransferSpecific() :
00106 F77LevelTransfer<VectorType,DIM>(f_prolong, f_restrict) {}
00107 };
00108
00109
00110
00111
00112
00113 #define NFIXUP 5
00114 typedef Vector<DataType,NFIXUP> FixupType;
00115
00116 #include "AMRFixup.h"
00117
00118 class FixupSpecific : public AMRFixup<VectorType,FixupType,DIM> {
00119 public:
00120 FixupSpecific() : AMRFixup<VectorType,FixupType,DIM>() {}
00121 };
00122
00123
00124
00125
00126
00127 typedef short FlagType;
00128
00129 #include "AMRFlagging.h"
00130 #include "Criteria/ScaledGradient.h"
00131 #include "Criteria/AbsoluteError.h"
00132
00133 class FlaggingSpecific :
00134 public AMRFlagging<VectorType,FixupType,FlagType,DIM> {
00135 typedef AMRFlagging<VectorType,FixupType,FlagType,DIM> base;
00136 public:
00137 FlaggingSpecific(base::solver_type& solver) : base(solver) {
00138 base::AddCriterion(new ScaledGradient<VectorType,FlagType,DIM>());
00139 base::AddCriterion(new AbsoluteError<VectorType,FixupType,FlagType,DIM>(solver));
00140 }
00141
00142 ~FlaggingSpecific() { DeleteAllCriterions(); }
00143 };
00144
00145
00146
00147
00148
00149 #include "AMRSolver.h"
00150
00151 class SolverSpecific :
00152 public AMRSolver<VectorType,FixupType,FlagType,DIM> {
00153 typedef AMRSolver<VectorType,FixupType,FlagType,DIM> base;
00154 public:
00155 SolverSpecific(IntegratorSpecific& integ,
00156 base::initial_condition_type& init,
00157 base::boundary_conditions_type& bc) :
00158 AMRSolver<VectorType,FixupType,FlagType,DIM>(integ, init, bc) {
00159 SetLevelTransfer(new LevelTransferSpecific());
00160 SetFileOutput(new FileOutput<VectorType,DIM>());
00161 SetFixup(new FixupSpecific());
00162 SetFlagging(new FlaggingSpecific(*this));
00163 }
00164
00165 ~SolverSpecific() {
00166 delete _LevelTransfer;
00167 delete _Flagging;
00168 delete _Fixup;
00169 delete _FileOutput;
00170 }
00171 };
00172
00173
00174
00175
00176
00177 #include "SolverControl.h"
00178
00179 class SolverControlSpecific :
00180 public SolverControl {
00181 public:
00182 SolverControlSpecific(AMRSolver<VectorType,FixupType,FlagType,DIM>& solver) :
00183 SolverControl(solver) {}