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