aboutsummaryrefslogtreecommitdiff
path: root/src/AMRPlus/AMRreaderPlus.h
diff options
context:
space:
mode:
Diffstat (limited to 'src/AMRPlus/AMRreaderPlus.h')
-rw-r--r--src/AMRPlus/AMRreaderPlus.h85
1 files changed, 85 insertions, 0 deletions
diff --git a/src/AMRPlus/AMRreaderPlus.h b/src/AMRPlus/AMRreaderPlus.h
new file mode 100644
index 0000000..6bd3387
--- /dev/null
+++ b/src/AMRPlus/AMRreaderPlus.h
@@ -0,0 +1,85 @@
+#ifndef __AMRREADERPLUS_HH_
+#define __AMRREADERPLUS_HH_
+
+#include <set>
+#include <vector>
+#include <IO.hh>
+#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<int> IntArray;
+
+
+
+typedef flexarray<int> IdxArray;
+
+
+class AMRreaderPlus : public AMRgridreaderPlus {
+ public:
+ int datatype;
+ int numgrids;
+ int maxlevel,maxtimeres,maxtime;
+ double smin,smax;
+ int modflag;
+
+ IdxSet activeset;
+ flexset<float> realtimes;
+ flexmatrix<IdxArray> *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: "<<ts<<endl;
+ }
+ void hideTimeStep(int ts){
+ if (ts>=0 && ts<=maxtime) {timemask[ts]=0; modify();}
+ else cout<<"Timestep out of range: "<<ts<<endl;
+ }
+ void selectTimeStep(int ts) //Shortcut- hides all times but ts
+ { for (int ii=0;ii<=maxtime;ii++) timemask[ii]=(ii==ts)?1:0;modify();}
+
+ void showLevel(int lev){
+ if (lev>=0 && lev<=maxlevel) {levelmask[lev]=1; modify();}
+ else cout<<"Level out of range: "<<lev<<endl;
+ }
+ void hideLevel(int lev){
+ if (lev>=0 && lev<=maxlevel) {levelmask[lev]=0; modify();}
+ else cout<<"Level out of range: "<<lev<<endl;
+ }
+
+ GridArray *getGridSet(){return &grids;}
+ void getActive(IdxSet &grids);
+ void loadData(IdxSet &loadset);
+ void loadData(){loadData(activeset);}
+
+};
+
+
+#endif