#ifndef __AMRREADERPLUS_HH_ #define __AMRREADERPLUS_HH_ #include #include #include #include "AMRgridreaderPlus.h" #include "IEEEIO.hh" #include "flexmatrix.h" #include "flexset.h" #define kNoData 0 #define kHasData 1 /* Method for calculating scalar range - the global range, range per fine timestep, per coarse, or per (current) root. */ typedef enum {kGlobal,kFine,kCoarse,kRoot} ScalarMode; using namespace std; typedef flexarray IntArray; typedef flexarray IdxArray; class AMRreaderPlus : public AMRgridreaderPlus { public: int datatype; int numgrids; int maxlevel,maxtimeres,maxtime; double smin,smax; int modflag; IdxSet activeset; flexset realtimes; flexmatrix *leveltimes; GridArray grids; IntArray levelmask, timemask; void init(); void build_info(); void build_active(); void modify(); //Flag that tells when active set has changed public: AMRreaderPlus(IObase &f); ~AMRreaderPlus(); int getNumLevels(){return maxlevel+1;} int getNumTimesteps(){return maxtime+1;} int getNumGrids(){return numgrids;} int getDataType(){return datatype;} void showTimeStep(int ts){ if (ts>=0 && ts<=maxtime) {timemask[ts]=1; modify();} else cout<<"Timestep out of range: "<=0 && ts<=maxtime) {timemask[ts]=0; modify();} else cout<<"Timestep out of range: "<=0 && lev<=maxlevel) {levelmask[lev]=1; modify();} else cout<<"Level out of range: "<=0 && lev<=maxlevel) {levelmask[lev]=0; modify();} else cout<<"Level out of range: "<