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