aboutsummaryrefslogtreecommitdiff
path: root/src/AmrFileReader.hh
blob: f8cdbe00babe49e0c90f31c9e1e86d25e3179d11 (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
// AmrFileReader
#ifndef __AMRFILEREADER_HH_
#define __AMRFILEREADER_HH_
#include <stdio.h>
#include <IO.hh>
#include "AmrGridReader.hh"
#include "FlexArrayTmpl.H"

class AmrFileReader {
protected:
  int gridloading;
  AmrGridReader gridreader;
  FlexArray<int> activeGrids;
  FlexArray<AmrGrid> grids; // perhaps use a hashtable to find grids?
  // Change to AmrGridFile structures
  FlexArray<int> levelmask;
  IObase::DataType datatype;
  int maxlevel,maxtimeres,mintime,maxtime;
  int current_time;
  // Internal Utility methods
  void buildInfoTable();
  void loadGrids();
  void reclaimGrids();
  void purgeGrids();
  void printGridInfo(AmrGrid &g);
public:
  int debug;
  void printGridInfo();
  void printActiveGrids();
  AmrFileReader(IObase &f);
  int getActiveIndex(int ii){ return activeGrids[ii];}
  int getNumLevels(){ return maxlevel+1; }
  void getTimeRange(int &min,int &max){
    printf("This mintime,maxtime=%d:%d\n",mintime,maxtime);
    min=mintime;
    max=maxtime;
  }
  void setTime(int timestep);
  // starts out with all selected
  void showLevel(int level=-1){ // default is all (-1)
    if(level>=levelmask.getSize() || level<0){
      printf("AmrConvert::showLevel(%u) :  Level out of range 0:%u\n",
	     level,levelmask.getSize()-1);
    }
    else
      levelmask[level]=1;
  }
  void showAllLevels();
  void hideLevel(int level=-1){  // default is all (-1)
    if(level>=levelmask.getSize() || level<0){
      printf("AmrConvert::showLevel(%u) :  Level out of range 0:%u\n",
	     level,levelmask.getSize()-1);
    }
    else
      levelmask[level]=0;
  }
  int nLevels(){ return maxlevel+1; }
  IObase::DataType getDataType(){return datatype;}
  // For C interface
  int getNumGrids(){ // number of active grids
    return activeGrids.getSize();
  }
  int getGrids(AmrGrid *g);
  // For C++ interface
  int getGrids(FlexArray<AmrGrid> &g);
  void setDataLoadingOff(){ gridloading=0; purgeGrids();}
  void setDataLoadingOn(){ gridloading=1; loadGrids();}
};

#endif