aboutsummaryrefslogtreecommitdiff
path: root/src/AMRPlus/AMRwriterPlus.C
blob: 856a3568df9cc9312c46dc41a4a8eed3011e2005 (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
#include "AMRwriterPlus.h"


AMRwriterPlus::AMRwriterPlus(IObase &descriptor) : AMRwriter(descriptor){
    scalarFlag=0;
    curscalarmin=curscalarmax=0;
}

void AMRwriterPlus::calcScalarRange(void *data){
    long numelts=1;
    for (int ii=0;ii<drank;ii++) numelts*=ddims[ii];
	        
    switch(this->dtypeID){
	case IObase::Byte:{
	    char *dptr=(char *)data;
	    curscalarmin=curscalarmax=*dptr;
	    for (long kk=0;kk<numelts;kk++){
		curscalarmin=(curscalarmin<dptr[kk])?curscalarmin:dptr[kk];
		curscalarmax=(curscalarmax>=dptr[kk])?curscalarmax:dptr[kk];
		}
	    } break;
	case IObase::Float32:{
	    float *fptr=(float *)data;
	    curscalarmin=curscalarmax=*fptr;
	    for (long jj=0;jj<numelts;jj++){
		curscalarmin=(curscalarmin<fptr[jj])?curscalarmin:fptr[jj];
		curscalarmax=(curscalarmax>=fptr[jj])?curscalarmax:fptr[jj];
		}
	    } break;
	case IObase::Float64:{
	    double *dptr=(double *)data;
	    curscalarmin=curscalarmax=*dptr;
	    for (long kk=0;kk<numelts;kk++){
		curscalarmin=(curscalarmin<dptr[kk])?curscalarmin:dptr[kk];
		curscalarmax=(curscalarmax>=dptr[kk])?curscalarmax:dptr[kk];
		}
	    } break;
    }
}


void AMRwriterPlus::writePlusattributes(){
    double range[2];
    range[0]=curscalarmin;
    range[1]=curscalarmax;
    file.writeAttribute("range", IObase::Float64, 2, range);
    scalarFlag=0;	//reset the flag
}