00001 #ifndef _MY_LaxFriedrichsMPIOverlap_
00002 #define _MY_LaxFriedrichsMPIOverlap_
00003 #include "laxfriedrichsmethod.h"
00004 #include "netmpi.h"
00005
00006
00007
00020 class LaxFriedrichsMPIOverlap : public LaxFriedrichsMethod
00021 {
00022 private:
00023 VecIndex cLDeadZoneRcvMap;
00024 VecDouble cLDeadZoneRcv;
00025 VecIndex cLDeadZoneSndMap;
00026 VecDouble cLDeadZoneSnd;
00027 VecIndex LGhostCellRcvMap;
00028 VecDouble LGhostCellRcv;
00029 VecIndex LGhostCellSndMap;
00030 VecDouble LGhostCellSnd;
00031
00032 VecIndex cRDeadZoneRcvMap;
00033 VecDouble cRDeadZoneRcv;
00034 VecIndex cRDeadZoneSndMap;
00035 VecDouble cRDeadZoneSnd;
00036 VecIndex RGhostCellRcvMap;
00037 VecDouble RGhostCellRcv;
00038 VecIndex RGhostCellSndMap;
00039 VecDouble RGhostCellSnd;
00040
00041 protected:
00042 VecTag fDeadZone;
00043 void setCommunicationBuffers(OrthoMesh &mesh,int mesh_overlap);
00044 enum FACES_ZONE {ACTIVE_ZONE=0,LEFT_DEAD_ZONE=1,RIGHT_DEAD_ZONE=2};
00045
00046
00047 public:
00048 LaxFriedrichsMPIOverlap(OrthoMesh &mesh,Function3D &fInitU,const VecDouble &cPor,Function3D &fPrescribedU,FaceFluxFunction &flux, double CFL,int mesh_overlap);
00049 virtual ~LaxFriedrichsMethodMPI();
00050 virtual void iterate(double t, double tEnd);
00051 void updateGhostCells();
00052 void updateDeadZone();
00053 void unitTest();
00054 double negotiateTimeStep(double dt);
00055 };
00056
00057 #endif