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
}
|