aboutsummaryrefslogtreecommitdiff
path: root/src/AMRHierLib/Vol2IEEEIO.cc
blob: 6247eb9bb0d8ebf761df6fea659eff0c9967afe9 (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
//------------------------------------------------------------------------------
//
// Project:	AMR Visualization
// Module:	$RCSfile$
// Language:	C++
// Date:	$Date$
// Author:	$Author$
// Version:	$Revision$
//
//------------------------------------------------------------------------------

#include <IO.hh>
#include <IEEEIO.hh>
#include <fstream>
#include <zlib.h>
#include <iostream>

int main(int argc, char* argv[])
{
  if (argc!=3) {
    std::cerr << "Usage: " << argv[0] << " <volFilename> <ieeeioFilename>" << std::endl;
    return 42;
  }

  gzFile in;
  if ((in = gzopen(argv[1], "rb"))) {
    int dims[3];
    double delta[3];
    bool success = true;
    success = success &&  gzread(in, &dims[0], sizeof(int)) == sizeof(int);
    success = success &&  gzread(in, &dims[1], sizeof(int)) == sizeof(int);
    success = success &&  gzread(in, &dims[2], sizeof(int)) == sizeof(int);
    success = success &&  gzread(in, &delta[0], sizeof(double)) == sizeof(double);
    success = success &&  gzread(in, &delta[1], sizeof(double)) == sizeof(double);
    success = success &&  gzread(in, &delta[2], sizeof(double)) == sizeof(double);
    if (success) {
      unsigned char* bytedata = new unsigned char[dims[0]*dims[1]*dims[2]];
      if (gzread(in, bytedata, dims[0]*dims[1]*dims[2]*sizeof(unsigned char)) == dims[0]*dims[1]*dims[2]*sizeof(unsigned char)) {
	float *data = new float[dims[0]*dims[1]*dims[2]];
	for (int i=0; i<dims[0]*dims[1]*dims[2]; ++i) {
	  data[i] = double(bytedata[i]);
	}
	IObase *writer = new IEEEIO(argv[2], IObase::Create);
	int rank = 3;
	writer->write(IObase::Float32, rank, dims, data);
	double origin[3] = {0.0, 0.0, 0.0};
	writer->writeAttribute("origin", IObase::Float64,3,origin);
	writer->writeAttribute("min_ext", IObase::Float64,3,origin);
	double maxExt[3] = {(dims[0]+1)*delta[0],(dims[1]+1)*delta[1],(dims[2]+1)*delta[2]};
	writer->writeAttribute("max_ext", IObase::Float64,3,maxExt);
	int level = 0;
	writer->writeAttribute("level", IObase::Int32, 1, &level);
	writer->writeAttribute("delta", IObase::Float64, 3, delta);
	int refine[3] = { 1, 1, 1 };
	writer->writeAttribute("spatial_refinement", IObase::Int32, 3, refine);
	writer->writeAttribute("grid_placement_refinement", IObase::Int32, 3, refine);
	int iorigin[3] = { 0, 0, 0 };
	writer->writeAttribute("iorigin", IObase::Int32,3,iorigin);
	delete data;
	delete writer;
      }
      delete bytedata;
    }
    gzclose(in);
  }
}