blob: 6bd338721f8936e76b7474e4634ac78748300432 (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
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
|