Skip to content
GitLab
Menu
Projects
Groups
Snippets
Loading...
Help
Help
Support
Community forum
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in
Toggle navigation
Menu
Open sidebar
mpim-sw
cdo
Commits
8294e7a1
Commit
8294e7a1
authored
Mar 25, 2020
by
Uwe Schulzweida
Browse files
Replaced MinMaxVal by MinMax.
parent
003d7db8
Changes
18
Hide whitespace changes
Inline
Side-by-side
src/Change_e5slm.cc
View file @
8294e7a1
...
...
@@ -70,9 +70,9 @@ Change_e5slm(void *process)
if
(
nmiss
)
cdoAbort
(
"SLM with missing values are unsupported!"
);
const
auto
m
inmax
=
varrayMinMax
(
cland
);
if
(
m
inmax
.
first
<
0
||
m
in
max
.
second
>
1
)
cdoWarning
(
"Values of SLM out of bounds! (minval=%g, maxval=%g)"
,
m
inmax
.
first
,
m
in
max
.
second
);
const
auto
m
m
=
varrayMinMax
(
cland
);
if
(
m
m
.
min
<
0
||
m
m
.
max
>
1
)
cdoWarning
(
"Values of SLM out of bounds! (minval=%g, maxval=%g)"
,
m
m
.
min
,
m
m
.
max
);
streamClose
(
streamIDslm
);
...
...
src/Derivepar.cc
View file @
8294e7a1
...
...
@@ -327,14 +327,14 @@ Derivepar(void *process)
if
(
zaxisIDh
!=
-
1
)
{
// check range of ps_prog
auto
m
inmax
=
varrayMinMax
(
ps
);
if
(
m
inmax
.
first
<
MIN_PS
||
m
in
max
.
second
>
MAX_PS
)
cdoWarning
(
"Surface pressure out of range (min=%g max=%g)!"
,
m
inmax
.
first
,
m
in
max
.
second
);
auto
m
m
=
varrayMinMax
(
ps
);
if
(
m
m
.
min
<
MIN_PS
||
m
m
.
max
>
MAX_PS
)
cdoWarning
(
"Surface pressure out of range (min=%g max=%g)!"
,
m
m
.
min
,
m
m
.
max
);
// check range of surface geopot
m
inmax
=
varrayMinMax
(
sgeopot
);
if
(
m
inmax
.
first
<
MIN_FIS
||
m
in
max
.
second
>
MAX_FIS
)
cdoWarning
(
"Orography out of range (min=%g max=%g)!"
,
m
inmax
.
first
,
m
in
max
.
second
);
m
m
=
varrayMinMax
(
sgeopot
);
if
(
m
m
.
min
<
MIN_FIS
||
m
m
.
max
>
MAX_FIS
)
cdoWarning
(
"Orography out of range (min=%g max=%g)!"
,
m
m
.
min
,
m
m
.
max
);
}
{
...
...
@@ -345,9 +345,9 @@ Derivepar(void *process)
offset
=
gridsize
*
levelID
;
single2
=
&
temp
[
offset
];
const
auto
m
inmax
=
varrayMinMax
(
gridsize
,
single2
);
if
(
m
inmax
.
first
<
MIN_T
||
m
in
max
.
second
>
MAX_T
)
cdoWarning
(
"Input temperature at level %d out of range (min=%g max=%g)!"
,
levelID
+
1
,
m
inmax
.
first
,
m
in
max
.
second
);
const
auto
m
m
=
varrayMinMax
(
gridsize
,
single2
);
if
(
m
m
.
min
<
MIN_T
||
m
m
.
max
>
MAX_T
)
cdoWarning
(
"Input temperature at level %d out of range (min=%g max=%g)!"
,
levelID
+
1
,
m
m
.
min
,
m
m
.
max
);
}
}
...
...
@@ -362,9 +362,9 @@ Derivepar(void *process)
// corr_hum(gridsize, single2, MIN_Q);
const
auto
m
inmax
=
varrayMinMax
(
gridsize
,
single2
);
if
(
m
inmax
.
first
<
-
0.1
||
m
in
max
.
second
>
MAX_Q
)
cdoWarning
(
"Input humidity at level %d out of range (min=%g max=%g)!"
,
levelID
+
1
,
m
inmax
.
first
,
m
in
max
.
second
);
const
auto
m
m
=
varrayMinMax
(
gridsize
,
single2
);
if
(
m
m
.
min
<
-
0.1
||
m
m
.
max
>
MAX_Q
)
cdoWarning
(
"Input humidity at level %d out of range (min=%g max=%g)!"
,
levelID
+
1
,
m
m
.
min
,
m
m
.
max
);
}
}
...
...
src/Gengrid.cc
View file @
8294e7a1
...
...
@@ -82,20 +82,19 @@ Gengrid(void *process)
gridDefDatatype
(
gridID3
,
(
datatype
==
CDI_DATATYPE_FLT64
)
?
CDI_DATATYPE_FLT64
:
CDI_DATATYPE_FLT32
);
const
auto
xm
inmax
=
varrayMinMax
(
array1
);
const
auto
ym
inmax
=
varrayMinMax
(
array2
);
const
auto
xm
m
=
varrayMinMax
(
array1
);
const
auto
ym
m
=
varrayMinMax
(
array2
);
if
(
Options
::
cdoVerbose
)
cdoPrint
(
"xminval = %g, xmaxval = %g, yminval = %g, ymaxval = %g"
,
xminmax
.
first
,
xminmax
.
second
,
yminmax
.
first
,
yminmax
.
second
);
cdoPrint
(
"xminval = %g, xmaxval = %g, yminval = %g, ymaxval = %g"
,
xmm
.
min
,
xmm
.
max
,
ymm
.
min
,
ymm
.
max
);
/* check units */
if
(
xm
inmax
.
first
>
-
4
&&
xm
in
max
.
second
<
8
&&
ym
inmax
.
first
>
-
2
&&
ym
in
max
.
second
<
2
)
if
(
xm
m
.
min
>
-
4
&&
xm
m
.
max
<
8
&&
ym
m
.
min
>
-
2
&&
ym
m
.
max
<
2
)
{
gridDefXunits
(
gridID3
,
"radians"
);
gridDefYunits
(
gridID3
,
"radians"
);
}
else
if
(
xm
inmax
.
first
>
-
181
&&
xm
in
max
.
second
<
361
&&
ym
inmax
.
first
>
-
91
&&
ym
in
max
.
second
<
91
)
else
if
(
xm
m
.
min
>
-
181
&&
xm
m
.
max
<
361
&&
ym
m
.
min
>
-
91
&&
ym
m
.
max
<
91
)
{
/* default is degrees */
}
...
...
src/Importcmsaf.cc
View file @
8294e7a1
...
...
@@ -1044,22 +1044,22 @@ read_dataset(hid_t loc_id, const char *name, void *opdata)
nmiss
=
0
;
const
auto
m
inmax
=
varrayMinMax
(
gridsize
*
nt
,
array
);
const
auto
m
m
=
varrayMinMax
(
gridsize
*
nt
,
array
);
if
(
Options
::
cdoVerbose
)
cdoPrint
(
"Dataset %s: missval = %g addoffset = %g scalefactor = %g"
,
varname
,
missval
,
addoffset
,
scalefactor
);
if
(
Options
::
cdoVerbose
)
cdoPrint
(
"Dataset %s: dtype = %d minval = %g maxval = %g missval = %g"
,
varname
,
dtype
,
m
inmax
.
first
,
m
in
max
.
second
,
cdoPrint
(
"Dataset %s: dtype = %d minval = %g maxval = %g missval = %g"
,
varname
,
dtype
,
m
m
.
min
,
m
m
.
max
,
missval
);
if
(
dtype
==
CDI_DATATYPE_UINT8
)
{
if
(
m
inmax
.
first
>=
0
&&
m
in
max
.
second
<=
127
)
dtype
=
CDI_DATATYPE_INT8
;
if
(
m
m
.
min
>=
0
&&
m
m
.
max
<=
127
)
dtype
=
CDI_DATATYPE_INT8
;
}
else
if
(
dtype
==
CDI_DATATYPE_UINT16
)
{
if
(
m
inmax
.
first
>=
0
&&
m
in
max
.
second
<=
32767
)
dtype
=
CDI_DATATYPE_INT16
;
if
(
m
m
.
min
>=
0
&&
m
m
.
max
<=
32767
)
dtype
=
CDI_DATATYPE_INT16
;
}
laddoffset
=
IS_NOT_EQUAL
(
addoffset
,
0
);
...
...
@@ -1473,12 +1473,12 @@ Importcmsaf(void *process)
array
=
dsets
.
obj
[
ivar
].
array
+
offset
;
size_t
nvals
;
const
auto
m
inmax
=
varrayMinMaxMV
(
gridsize
,
array
,
missval
,
nvals
);
const
auto
m
m
=
varrayMinMaxMV
(
gridsize
,
array
,
missval
,
nvals
);
nmiss
=
gridsize
-
nvals
;
if
(
Options
::
cdoVerbose
)
cdoPrint
(
" Write var %d, level %d, nmiss %zu, missval %g, minval %g, maxval %g"
,
varID
,
levelID
,
nmiss
,
missval
,
m
inmax
.
first
,
m
in
max
.
second
);
m
m
.
min
,
m
m
.
max
);
cdoDefRecord
(
streamID
,
varID
,
levelID
);
cdoWriteRecord
(
streamID
,
array
,
nmiss
);
...
...
src/Magplot.cc
View file @
8294e7a1
...
...
@@ -256,9 +256,9 @@ magplot(const char *plotfile, int operatorID, const char *varname, const char *u
if
(
Options
::
cdoVerbose
)
cdoPrint
(
"nlon: %zu nlat: %zu"
,
nlon
,
nlat
);
if
(
Options
::
cdoVerbose
)
cdoPrint
(
"dlon: %g dlat: %g"
,
dlon
,
dlat
);
auto
m
inmax
=
nmiss
?
varrayMinMaxMV
(
nlon
*
nlat
,
array
,
missval
)
:
varrayMinMax
(
nlon
*
nlat
,
array
);
auto
m
m
=
nmiss
?
varrayMinMaxMV
(
nlon
*
nlat
,
array
,
missval
)
:
varrayMinMax
(
nlon
*
nlat
,
array
);
if
(
Options
::
cdoVerbose
)
cdoPrint
(
"min: %g max: %g"
,
m
inmax
.
first
,
m
in
max
.
second
);
if
(
Options
::
cdoVerbose
)
cdoPrint
(
"min: %g max: %g"
,
m
m
.
min
,
m
m
.
max
);
if
(
Options
::
cdoVerbose
)
cdoPrint
(
"input_field_organization: %s"
,
lregular
?
"REGULAR"
:
"NONREGULAR"
);
mag_setc
(
"output_name"
,
plotfilename
);
...
...
@@ -268,8 +268,8 @@ magplot(const char *plotfile, int operatorID, const char *varname, const char *u
mag_set2r
(
"input_field"
,
array
.
data
(),
nlon
,
nlat
);
mag_setr
(
"input_field_suppress_below"
,
m
inmax
.
first
);
mag_setr
(
"input_field_suppress_above"
,
m
in
max
.
second
);
mag_setr
(
"input_field_suppress_below"
,
m
m
.
min
);
mag_setr
(
"input_field_suppress_above"
,
m
m
.
max
);
if
(
lregular
)
{
...
...
src/Maskbox.cc
View file @
8294e7a1
...
...
@@ -162,7 +162,6 @@ maskregion(std::vector<bool> &mask, const int gridID, const Varray<double> &xcoo
const
auto
nlat
=
gridInqYsize
(
gridID
);
Varray
<
double
>
xvals
(
nlon
),
yvals
(
nlat
);
gridInqXvals
(
gridID
,
&
xvals
[
0
]);
gridInqYvals
(
gridID
,
&
yvals
[
0
]);
...
...
@@ -175,18 +174,18 @@ maskregion(std::vector<bool> &mask, const int gridID, const Varray<double> &xcoo
grid_to_degree
(
units
,
nlat
,
&
yvals
[
0
],
"grid center lat"
);
}
const
auto
xm
inmax
=
varrayMinMax
(
xvals
);
const
auto
ym
inmax
=
varrayMinMax
(
yvals
);
const
auto
xm
m
=
varrayMinMax
(
xvals
);
const
auto
ym
m
=
varrayMinMax
(
yvals
);
for
(
size_t
ilat
=
0
;
ilat
<
nlat
;
ilat
++
)
{
double
yval
=
yvals
[
ilat
];
auto
yval
=
yvals
[
ilat
];
for
(
size_t
ilon
=
0
;
ilon
<
nlon
;
ilon
++
)
{
size_t
i
,
j
;
int
c
=
0
;
const
auto
xval
=
xvals
[
ilon
];
if
(
!
(((
xval
>
xm
inmax
.
first
)
||
(
xval
<
xm
in
max
.
second
))
||
((
yval
>
ym
inmax
.
first
)
||
(
yval
<
ym
in
max
.
second
))))
c
=
!
c
;
if
(
!
(((
xval
>
xm
m
.
min
)
||
(
xval
<
xm
m
.
max
))
||
((
yval
>
ym
m
.
min
)
||
(
yval
<
ym
m
.
max
))))
c
=
!
c
;
if
(
c
==
0
)
{
...
...
src/Output.cc
View file @
8294e7a1
...
...
@@ -48,8 +48,8 @@ outputarr(int dig, size_t gridsize, Varray<double> &array)
static
void
outputsp
(
size_t
gridsize
,
Varray
<
double
>
&
array
,
long
ntr
)
{
const
auto
m
inmax
=
varrayMinMax
(
gridsize
,
array
);
if
(
/* T11 */
m
inmax
.
first
>=
-
1
&&
m
in
max
.
second
<=
12
)
const
auto
m
m
=
varrayMinMax
(
gridsize
,
array
);
if
(
/* T11 */
m
m
.
min
>=
-
1
&&
m
m
.
max
<=
12
)
{
double
*
spc
=
array
.
data
();
for
(
long
m
=
0
;
m
<=
ntr
;
m
++
)
...
...
src/Outputgmt.cc
View file @
8294e7a1
...
...
@@ -159,7 +159,7 @@ output_boundscpt(double value, double missval, const CPT &cpt)
static
void
output_vrml
(
int
nlon
,
int
nlat
,
int
ngp
,
const
Varray
<
double
>
&
array
,
double
missval
,
const
CPT
&
cpt
)
{
const
auto
m
inmax
=
varrayMinMaxMV
(
ngp
,
array
,
missval
);
const
auto
m
m
=
varrayMinMaxMV
(
ngp
,
array
,
missval
);
double
dx
=
10.
/
nlon
;
...
...
@@ -248,7 +248,7 @@ output_vrml(int nlon, int nlat, int ngp, const Varray<double> &array, double mis
printf
(
" ]
\n
"
);
printf
(
" translation -5 0 %g
\n
"
,
-
5.
*
nlat
/
nlon
);
printf
(
" rotation 0.0 0.0 0.0 0.0
\n
"
);
printf
(
" scale 1.0 %g 1.0
\n
"
,
0.5
/
(
m
in
max
.
second
-
minmax
.
first
));
printf
(
" scale 1.0 %g 1.0
\n
"
,
0.5
/
(
m
m
.
max
-
mm
.
min
));
printf
(
"}
\n
"
);
}
...
...
@@ -548,11 +548,9 @@ Outputgmt(void *process)
{
if
(
Options
::
cdoVerbose
)
{
const
auto
minmax
=
varrayMinMaxMV
(
gridsize
,
array
,
missval
);
const
auto
minval
=
minmax
.
first
;
const
auto
maxval
=
minmax
.
second
;
const
auto
range
=
maxval
-
minval
;
fprintf
(
stderr
,
"makecpt -T%g/%g/%g -Crainbow > gmt.cpt
\n
"
,
minval
,
maxval
,
range
/
20
);
const
auto
mm
=
varrayMinMaxMV
(
gridsize
,
array
,
missval
);
const
auto
range
=
mm
.
max
-
mm
.
min
;
fprintf
(
stderr
,
"makecpt -T%g/%g/%g -Crainbow > gmt.cpt
\n
"
,
mm
.
min
,
mm
.
max
,
range
/
20
);
fprintf
(
stderr
,
"pscontour -K -JQ0/10i -Rd -I -Cgmt.cpt data.gmt > gmtplot.ps
\n
"
);
fprintf
(
stderr
,
"pscoast -O -J -R -Dc -W -B40g20 >> gmtplot.ps
\n
"
);
}
...
...
@@ -646,11 +644,9 @@ Outputgmt(void *process)
{
if
(
Options
::
cdoVerbose
)
{
const
auto
minmax
=
varrayMinMaxMV
(
gridsize
,
array
,
missval
);
const
auto
minval
=
minmax
.
first
;
const
auto
maxval
=
minmax
.
second
;
const
auto
range
=
maxval
-
minval
;
fprintf
(
stderr
,
"makecpt -T%g/%g/%g -Crainbow > gmt.cpt
\n
"
,
minval
,
maxval
,
range
/
20
);
const
auto
mm
=
varrayMinMaxMV
(
gridsize
,
array
,
missval
);
const
auto
range
=
mm
.
max
-
mm
.
min
;
fprintf
(
stderr
,
"makecpt -T%g/%g/%g -Crainbow > gmt.cpt
\n
"
,
mm
.
min
,
mm
.
max
,
range
/
20
);
fprintf
(
stderr
,
"psxy -K -JQ0/10i -Rd -L -Cgmt.cpt -m data.gmt > gmtplot.ps
\n
"
);
// fprintf(stderr, "psxy -K -Jx0.028id -Rd -L -Cgmt.cpt -m
// data.gmt > gmtplot.ps\n"); fprintf(stderr, "psxy -K
...
...
src/Pack.cc
View file @
8294e7a1
...
...
@@ -160,10 +160,10 @@ Pack(void *process)
const
auto
nmiss
=
vars
[
tsID
][
varID
][
levelID
].
nmiss
;
if
(
nmiss
)
nmisspv
+=
nmiss
;
auto
m
inmax
=
nmiss
?
varrayMinMaxMV
(
gridsize
,
array
,
missval1
)
:
varrayMinMax
(
gridsize
,
array
);
auto
m
m
=
nmiss
?
varrayMinMaxMV
(
gridsize
,
array
,
missval1
)
:
varrayMinMax
(
gridsize
,
array
);
fmin
=
std
::
min
(
fmin
,
m
inmax
.
first
);
fmax
=
std
::
max
(
fmax
,
m
in
max
.
second
);
fmin
=
std
::
min
(
fmin
,
m
m
.
min
);
fmax
=
std
::
max
(
fmax
,
m
m
.
max
);
}
}
...
...
src/Pressure.cc
View file @
8294e7a1
...
...
@@ -255,9 +255,9 @@ Pressure(void *process)
varrayCopy
(
gridsize
,
array
,
ps_prog
);
// check range of ps_prog
const
auto
m
inmax
=
varrayMinMax
(
ps_prog
);
if
(
m
inmax
.
first
<
MIN_PS
||
m
in
max
.
second
>
MAX_PS
)
cdoWarning
(
"Surface pressure out of range (min=%g max=%g)!"
,
m
inmax
.
first
,
m
in
max
.
second
);
const
auto
m
m
=
varrayMinMax
(
ps_prog
);
if
(
m
m
.
min
<
MIN_PS
||
m
m
.
max
>
MAX_PS
)
cdoWarning
(
"Surface pressure out of range (min=%g max=%g)!"
,
m
m
.
min
,
m
m
.
max
);
presh
(
full_press
.
data
(),
half_press
.
data
(),
vct
.
data
(),
ps_prog
.
data
(),
nhlevf
,
gridsize
);
}
...
...
src/Vertintap.cc
View file @
8294e7a1
...
...
@@ -379,9 +379,9 @@ Vertintap(void *process)
}
// check range of ps_prog
const
auto
m
inmax
=
fieldMinMax
(
ps_prog
);
if
(
m
inmax
.
first
<
MIN_PS
||
m
in
max
.
second
>
MAX_PS
)
cdoWarning
(
"Surface pressure out of range (min=%g max=%g)!"
,
m
inmax
.
first
,
m
in
max
.
second
);
const
auto
m
m
=
fieldMinMax
(
ps_prog
);
if
(
m
m
.
min
<
MIN_PS
||
m
m
.
max
>
MAX_PS
)
cdoWarning
(
"Surface pressure out of range (min=%g max=%g)!"
,
m
m
.
min
,
m
m
.
max
);
fieldCopy
(
vardata1
[
apressID
],
full_press
);
...
...
src/Vertintml.cc
View file @
8294e7a1
...
...
@@ -479,13 +479,13 @@ Vertintml(void *process)
// check range of surface geopot
if
(
extrapolate
&&
(
sgeopotID
!=
-
1
||
geopotID
!=
-
1
))
{
const
auto
m
inmax
=
fieldMinMax
(
sgeopot
);
if
(
m
inmax
.
first
<
MIN_FIS
||
m
in
max
.
second
>
MAX_FIS
)
cdoWarning
(
"Surface geopotential out of range (min=%g max=%g) [timestep:%d]!"
,
m
inmax
.
first
,
m
in
max
.
second
,
const
auto
m
m
=
fieldMinMax
(
sgeopot
);
if
(
m
m
.
min
<
MIN_FIS
||
m
m
.
max
>
MAX_FIS
)
cdoWarning
(
"Surface geopotential out of range (min=%g max=%g) [timestep:%d]!"
,
m
m
.
min
,
m
m
.
max
,
tsID
+
1
);
if
(
gridsize
>
1
&&
m
inmax
.
first
>=
0
&&
m
in
max
.
second
<=
9000
&&
IS_NOT_EQUAL
(
m
inmax
.
first
,
m
in
max
.
second
))
cdoWarning
(
"Surface geopotential has an unexpected range (min=%g max=%g) [timestep:%d]!"
,
m
inmax
.
first
,
m
in
max
.
second
,
tsID
+
1
);
if
(
gridsize
>
1
&&
m
m
.
min
>=
0
&&
m
m
.
max
<=
9000
&&
IS_NOT_EQUAL
(
m
m
.
min
,
m
m
.
max
))
cdoWarning
(
"Surface geopotential has an unexpected range (min=%g max=%g) [timestep:%d]!"
,
m
m
.
min
,
m
m
.
max
,
tsID
+
1
);
}
}
...
...
@@ -500,9 +500,9 @@ Vertintml(void *process)
fieldCopy
(
vardata1
[
presID
],
ps_prog
);
// check range of ps_prog
const
auto
m
inmax
=
fieldMinMax
(
ps_prog
);
if
(
m
inmax
.
first
<
MIN_PS
||
m
in
max
.
second
>
MAX_PS
)
cdoWarning
(
"Surface pressure out of range (min=%g max=%g) [timestep:%d]!"
,
m
inmax
.
first
,
m
in
max
.
second
,
tsID
+
1
);
const
auto
m
m
=
fieldMinMax
(
ps_prog
);
if
(
m
m
.
min
<
MIN_PS
||
m
m
.
max
>
MAX_PS
)
cdoWarning
(
"Surface pressure out of range (min=%g max=%g) [timestep:%d]!"
,
m
m
.
min
,
m
m
.
max
,
tsID
+
1
);
if
(
memtype
==
MemType
::
Float
)
presh
(
full_press
.
vec_f
.
data
(),
half_press
.
vec_f
.
data
(),
vct
.
data
(),
ps_prog
.
vec_f
.
data
(),
nhlevf
,
gridsize
);
...
...
src/array.cc
View file @
8294e7a1
...
...
@@ -45,7 +45,7 @@ fpe_errstr(int fpeRaised)
return
errstr
;
}
MinMax
Val
MinMax
varrayMinMaxMV
(
const
size_t
len
,
const
double
*
array
,
const
double
missval
,
size_t
&
nvals
)
{
double
vmin
=
DBL_MAX
;
...
...
@@ -62,17 +62,17 @@ varrayMinMaxMV(const size_t len, const double *array, const double missval, size
}
}
return
MinMax
Val
(
vmin
,
vmax
);
return
MinMax
(
vmin
,
vmax
);
}
MinMax
Val
MinMax
varrayMinMaxMV
(
const
size_t
len
,
const
double
*
array
,
const
double
missval
)
{
size_t
nvals
;
return
varrayMinMaxMV
(
len
,
array
,
missval
,
nvals
);
}
MinMax
Val
MinMax
varrayMinMaxMV
(
const
size_t
len
,
const
Varray
<
double
>
&
array
,
const
double
missval
)
{
size_t
nvals
;
...
...
@@ -278,7 +278,7 @@ varrayNumMV(const size_t len, const Varray<T> &array, const T missval)
template
size_t
varrayNumMV
(
const
size_t
len
,
const
Varray
<
float
>
&
array
,
const
float
missval
);
template
size_t
varrayNumMV
(
const
size_t
len
,
const
Varray
<
double
>
&
array
,
const
double
missval
);
MinMax
Val
MinMax
varrayMinMax
(
const
size_t
len
,
const
double
*
restrict
array
)
{
double
vmin
=
DBL_MAX
;
...
...
@@ -293,17 +293,17 @@ varrayMinMax(const size_t len, const double *restrict array)
if
(
array
[
i
]
>
vmax
)
vmax
=
array
[
i
];
}
return
MinMax
Val
(
vmin
,
vmax
);
return
MinMax
(
vmin
,
vmax
);
}
MinMax
Val
MinMax
varrayMinMax
(
const
size_t
len
,
const
Varray
<
double
>
&
v
)
{
return
varrayMinMax
(
len
,
v
.
data
());
}
template
<
typename
T
>
MinMax
Val
MinMax
varrayMinMax
(
const
Varray
<
T
>
&
v
)
{
double
vmin
=
DBL_MAX
;
...
...
@@ -319,12 +319,12 @@ varrayMinMax(const Varray<T> &v)
if
(
v
[
i
]
>
vmax
)
vmax
=
v
[
i
];
}
return
MinMax
Val
(
vmin
,
vmax
);
return
MinMax
(
vmin
,
vmax
);
}
// Explicit instantiation
template
MinMax
Val
varrayMinMax
(
const
Varray
<
float
>
&
v
);
template
MinMax
Val
varrayMinMax
(
const
Varray
<
double
>
&
v
);
template
MinMax
varrayMinMax
(
const
Varray
<
float
>
&
v
);
template
MinMax
varrayMinMax
(
const
Varray
<
double
>
&
v
);
double
varrayMin
(
const
size_t
len
,
const
Varray
<
double
>
&
v
)
...
...
src/array.h
View file @
8294e7a1
...
...
@@ -22,41 +22,33 @@
#include <cfloat>
#include "compare.h"
/*
struct
MinMax
{
double
min
;
double
max
;
size_t
n
;
MinMax
Sum
() : min(DBL_MAX), max(-DBL_MAX), n(0) {};
MinMax
Sum
(double rmin, double rmax, size_t rn) : min(rmin), max(rmax), n(rn) {};
MinMax
Sum
(double rmin, double rmax) : min(rmin), max(rmax) {};
MinMax
()
:
min
(
DBL_MAX
),
max
(
-
DBL_MAX
),
n
(
0
)
{};
MinMax
(
double
rmin
,
double
rmax
,
size_t
rn
)
:
min
(
rmin
),
max
(
rmax
),
n
(
rn
)
{};
MinMax
(
double
rmin
,
double
rmax
)
:
min
(
rmin
),
max
(
rmax
)
,
n
(
0
)
{};
};
*/
struct
MinMaxSum
struct
MinMaxSum
:
MinMax
{
double
min
;
double
max
;
double
sum
;
size_t
n
;
MinMaxSum
()
:
min
(
DBL_MAX
),
max
(
-
DBL_MAX
),
sum
(
0
),
n
(
0
)
{};
MinMaxSum
(
double
rmin
,
double
rmax
,
double
rsum
,
size_t
rn
)
:
min
(
rmin
),
max
(
rmax
),
sum
(
rsum
),
n
(
rn
)
{};
MinMaxSum
(
double
rmin
,
double
rmax
,
double
rsum
)
:
min
(
rmin
),
max
(
rmax
),
sum
(
rsum
)
{};
MinMaxSum
()
:
sum
(
0
)
{};
MinMaxSum
(
double
rmin
,
double
rmax
,
double
rsum
,
size_t
rn
)
:
sum
(
rsum
)
{
min
=
rmin
;
max
=
rmax
;
n
=
rn
;
};
MinMaxSum
(
double
rmin
,
double
rmax
,
double
rsum
)
:
sum
(
rsum
)
{
min
=
rmin
;
max
=
rmax
;
n
=
0
;
};
};
struct
MinMaxMean
struct
MinMaxMean
:
MinMax
{
double
min
;
double
max
;
double
mean
;
size_t
n
;
MinMaxMean
()
:
min
(
DBL_MAX
),
max
(
-
DBL_MAX
),
mean
(
0
),
n
(
0
)
{};
MinMaxMean
(
double
rmin
,
double
rmax
,
double
rmean
,
size_t
rn
)
:
min
(
rmin
),
max
(
rmax
),
mean
(
rmean
),
n
(
rn
)
{};
MinMaxMean
(
double
rmin
,
double
rmax
,
double
rmean
)
:
min
(
rmin
),
max
(
rmax
),
mean
(
rmean
)
{};
MinMaxMean
()
:
mean
(
0
)
{};
MinMaxMean
(
double
rmin
,
double
rmax
,
double
rmean
,
size_t
rn
)
:
mean
(
rmean
)
{
min
=
rmin
;
max
=
rmax
;
n
=
rn
;
};
MinMaxMean
(
double
rmin
,
double
rmax
,
double
rmean
)
:
mean
(
rmean
)
{
min
=
rmin
;
max
=
rmax
;
n
=
0
;
};
};
using
MinMaxVal
=
std
::
pair
<
double
,
double
>
;
template
<
typename
T
>
using
Varray
=
std
::
vector
<
T
>
;
...
...
@@ -203,15 +195,15 @@ size_t arrayNumMV(size_t len, const double *array, double missval);
template
<
typename
T
>
size_t
varrayNumMV
(
size_t
len
,
const
Varray
<
T
>
&
array
,
T
missval
);
MinMax
Val
varrayMinMax
(
size_t
len
,
const
Varray
<
double
>
&
v
);
MinMax
Val
varrayMinMax
(
size_t
len
,
const
double
*
array
);
MinMax
varrayMinMax
(
size_t
len
,
const
Varray
<
double
>
&
v
);
MinMax
varrayMinMax
(
size_t
len
,
const
double
*
array
);
template
<
typename
T
>
MinMax
Val
varrayMinMax
(
const
Varray
<
T
>
&
v
);
MinMax
varrayMinMax
(
const
Varray
<
T
>
&
v
);
MinMax
Val
varrayMinMaxMV
(
size_t
len
,
const
Varray
<
double
>
&
array
,
double
missval
);
MinMax
Val
varrayMinMaxMV
(
size_t
len
,
const
double
*
array
,
double
missval
);
MinMax
Val
varrayMinMaxMV
(
size_t
len
,
const
double
*
array
,
double
missval
,
size_t
&
nvals
);
MinMax
varrayMinMaxMV
(
size_t
len
,
const
Varray
<
double
>
&
array
,
double
missval
);
MinMax
varrayMinMaxMV
(
size_t
len
,
const
double
*
array
,
double
missval
);
MinMax
varrayMinMaxMV
(
size_t
len
,
const
double
*
array
,
double
missval
,
size_t
&
nvals
);
double
varrayMin
(
size_t
len
,
const
Varray
<
double
>
&
v
);
double
varrayMax
(
size_t
len
,
const
Varray
<
double
>
&
v
);
...
...
src/datarangelist.h
View file @
8294e7a1
...
...
@@ -35,13 +35,13 @@ struct Datarange
checkDatarange
(
double
*
array
,
size_t
nmiss
)
{
size_t
ivals
=
0
;
auto
m
inmax
=
nmiss
?
varrayMinMaxMV
(
gridsize
,
array
,
missval
,
ivals
)
:
varrayMinMax
(
gridsize
,
array
);
auto
m
m
=
nmiss
?
varrayMinMaxMV
(
gridsize
,
array
,
missval
,
ivals
)
:
varrayMinMax
(
gridsize
,
array
);
if
(
nmiss
==
0
)
ivals
=
gridsize
;
if
(
ivals
>
0
)
{
auto
smin
=
(
m
inmax
.
first
-
addoffset
)
/
scalefactor
;
auto
smax
=
(
m
in
max
.
second
-
addoffset
)
/
scalefactor
;
auto
smin
=
(
m
m
.
min
-
addoffset
)
/
scalefactor
;
auto
smax
=
(
m
m
.
max
-
addoffset
)
/
scalefactor
;
if
(
datatype
==
CDI_DATATYPE_INT8
||
datatype
==
CDI_DATATYPE_UINT8
||
datatype
==
CDI_DATATYPE_INT16
||
datatype
==
CDI_DATATYPE_UINT16
)
...
...
src/field.cc
View file @
8294e7a1
...
...
@@ -198,7 +198,7 @@ fieldNumMV(Field &field)
return
field
.
nmiss
;
}
MinMax
Val
MinMax
fieldMinMax
(
Field
&
field
)
{
if
(
field
.
memType
==
MemType
::
Float
)
...
...
src/field.h
View file @
8294e7a1
...
...
@@ -93,7 +93,7 @@ void fieldCopy(const Field3D &field_src, int levelID, Field &field_tgt);
void
fieldAdd
(
Field
&
field1
,
const
Field3D
&
field2
,
int
levelID
);
size_t
fieldNumMiss
(
const
Field
&
field
);
size_t
fieldNumMV
(
Field
&
field
);
MinMax
Val
fieldMinMax
(
Field
&
field
);
MinMax
fieldMinMax
(
Field
&
field
);
// fieldmem.cc
void
fieldsFromVlist
(
int
vlistID
,
FieldVector2D
&
field2D
);
...
...
src/printinfo.cc
View file @
8294e7a1
...
...
@@ -167,8 +167,8 @@ print_xyvals2D(int gridID, int dig)
gridInqXvals
(
gridID
,
xvals2D
.
data
());
gridInqYvals
(
gridID
,
yvals2D
.
data
());
const
auto
xm
inmax
=
varrayMinMax
(
gridsize
,
xvals2D
);
const
auto
ym
inmax
=
varrayMinMax
(
gridsize
,
yvals2D
);
const
auto
xm
m
=
varrayMinMax
(
gridsize
,
xvals2D
);
const
auto
ym
m
=
varrayMinMax
(
gridsize
,
yvals2D
);
double
xinc
=
0
,
yinc
=
0
;
int
gridtype
=
gridInqType
(
gridID
);
...
...
@@ -222,14 +222,14 @@ print_xyvals2D(int gridID, int dig)
}
}
fprintf
(
stdout
,
"%33s : %.*g"
,
xname
,
dig
,
xm
inmax
.
first
);
if
(
gridsize
>
1
)
fprintf
(
stdout
,
" to %.*g"
,
dig
,
xm
in
max
.
second
);
fprintf
(
stdout
,
"%33s : %.*g"
,
xname
,
dig
,
xm
m
.
min
);
if
(
gridsize
>
1
)
fprintf
(
stdout
,
" to %.*g"
,
dig
,
xm
m
.
max
);
if
(
IS_NOT_EQUAL
(
xinc
,
0
))
fprintf
(
stdout
,
" by %.*g"
,
dig
,
xinc
);
fprintf
(
stdout
,
" %s"
,
xunits
);
if
(
gridIsCircular
(
gridID
))
fprintf
(
stdout
,
" circular"
);
fprintf
(
stdout
,
"
\n
"
);
fprintf
(
stdout
,
"%33s : %.*g"
,
yname
,
dig
,
ym
inmax
.
first
);
if
(
gridsize
>
1
)
fprintf
(
stdout
,
" to %.*g"
,
dig
,
ym
in
max
.
second
);
fprintf
(
stdout
,
"%33s : %.*g"
,
yname
,
dig
,
ym
m
.
min
);
if
(
gridsize
>
1
)
fprintf
(
stdout
,
" to %.*g"
,
dig
,
ym
m
.
max
);
if
(
IS_NOT_EQUAL
(
yinc
,
0
))
fprintf
(
stdout
,
" by %.*g"
,
dig
,
yinc
);
fprintf
(
stdout
,
" %s"
,
yunits
);
fprintf
(
stdout
,
"
\n
"
);
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
.
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment