00001 #ifndef _MY_LaxFriedrichsSystemMPI_
00002 #define _MY_LaxFriedrichsSystemMPI_
00003 #include "laxfriedrichsforsystem.h"
00004
00016 class LaxFriedrichsSystemMPI : public LaxFriedrichsForSystem
00017 {
00018 private:
00019 VecIndex cLDeadZoneRcvMap;
00020 VecIndex cLDeadZoneSndMap;
00021 VecIndex LGhostCellRcvMap;
00022 VecIndex LGhostCellSndMap;
00024 ArrayOfVecDouble cLDeadZoneRcv;
00025 ArrayOfVecDouble cLDeadZoneSnd;
00026 ArrayOfVecDouble LGhostCellRcv;
00027 ArrayOfVecDouble LGhostCellSnd;
00028
00029 VecIndex cRDeadZoneRcvMap;
00030 VecIndex cRDeadZoneSndMap;
00031 VecIndex RGhostCellRcvMap;
00032 VecIndex RGhostCellSndMap;
00033
00034 ArrayOfVecDouble cRDeadZoneRcv;
00035 ArrayOfVecDouble cRDeadZoneSnd;
00036 ArrayOfVecDouble RGhostCellRcv;
00037 ArrayOfVecDouble RGhostCellSnd;
00038
00039 protected:
00040 void setCommunicationBuffers(OrthoMesh &mesh,int mesh_overlap);
00041 VecTag fDeadZone;
00042 void updateDeadZone();
00043 void updateGhostCells();
00044 enum FACES_ZONE {ACTIVE_ZONE=0,LEFT_DEAD_ZONE=1,RIGHT_DEAD_ZONE=2};
00045 public:
00046 LaxFriedrichsSystemMPI(OrthoMesh &mesh,Function3D &fInitU,const VecDouble &cPor,Function3D &fPrescribedU,FaceFluxFunction &flux, double CFL,int mesh_overlap);
00047 virtual ~LaxFriedrichsSystemMPI();
00048 virtual void iterateN(unsigned nSteps, double dt);
00049 virtual void iterate(double t,double tEnd);
00050 virtual void updateDataForDynamicModule();
00051 virtual double getDt(double t,double tEnd);
00052 };
00053
00054 #endif