vtf-logo

clawpack/applications/testing/3d/GFMBCTest/src/Problem.h

00001 // -*- C++ -*-
00002 
00003 // Copyright (C) 2003-2007 California Institute of Technology
00004 // Ralf Deiterding, ralf@amroc.net
00005 
00006 #ifndef AMROC_PROBLEM_H
00007 #define AMROC_PROBLEM_H
00008 
00009 #include "euler3.h"
00010 #include "ClpProblem.h"
00011 
00012 #define OWN_INTEGRATOR
00013 class IntegratorSpecific :  
00014   public ClpIntegrator<VectorType,AuxType,DIM> {
00015 public:   
00016   IntegratorSpecific() : 
00017     ClpIntegrator<VectorType,AuxType,DIM>(NEQUSED,NWAVES,f_normalflux,f_transverseflux,
00018                                           f_check,f_setaux,f_source) {}
00019   virtual double CalculateGrid(vec_grid_data_type& NewStateVec, 
00020                                vec_grid_data_type& OldStateVec,
00021                                vec_grid_data_type* Flux[],
00022                                const int& level, const double& t, 
00023                                const double& dt, const int& mpass)
00024     { NewStateVec.copy(OldStateVec); return 1.0; } 
00025 };
00026    
00027 #define OWN_GFMAMRSOLVER
00028 #include "ClpStdGFMProblem.h"
00029 #include "StatCPTLevelSet.h"
00030 
00031 class SolverSpecific : 
00032   public AMRGFMSolver<VectorType,FixupType,FlagType,DIM> {
00033   typedef VectorType::InternalDataType DataType;
00034   typedef AMRGFMSolver<VectorType,FixupType,FlagType,DIM> base;
00035 public:
00036   SolverSpecific(IntegratorSpecific& integ, 
00037                  base::initial_condition_type& init,
00038                  base::boundary_conditions_type& bc) : base(integ, init, bc) {
00039     SetLevelTransfer(new F77LevelTransfer<VectorType,DIM>(f_prolong, f_restrict));
00040 #ifdef f_flgout
00041     SetFileOutput(new F77GFMFileOutput<VectorType,FixupType,FlagType,DIM>(*this,f_flgout)); 
00042 #else   
00043     SetFileOutput(new GFMFileOutput<VectorType,FixupType,FlagType,DIM>(*this)); 
00044 #endif
00045     SetFixup(new FixupSpecific(integ));
00046     SetFlagging(new FlaggingSpecific(*this)); 
00047     AddGFM(new GhostFluidMethod<VectorType,DIM>(
00048               new F77GFMBoundary<VectorType,DIM>(f_ibndrfl,f_itrans),
00049               new StatCPTLevelSet<DataType,DIM>()));
00050   }  
00051  
00052   ~SolverSpecific() {
00053     DeleteGFM(_GFM[0]);
00054     delete _Flagging;
00055     delete _Fixup;
00056   }