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
edd08e38
Commit
edd08e38
authored
Mar 25, 2020
by
Uwe Schulzweida
Browse files
arrayMinMaxMask: changed interface.
parent
0baa31f3
Changes
3
Hide whitespace changes
Inline
Side-by-side
src/Remapeta.cc
View file @
edd08e38
...
...
@@ -231,7 +231,6 @@ Remapeta(void *process)
Varray
<
int
>
imiss
;
int
timer_hetaeta
=
0
;
double
**
vars1
=
nullptr
,
**
vars2
=
nullptr
;
double
minval
,
maxval
;
double
missval
=
0
;
double
cconst
=
1.E-6
;
double
cptop
=
0
;
/* min. pressure level for cond. */
...
...
@@ -301,11 +300,11 @@ Remapeta(void *process)
}
// check range of surface_geopotential
arrayMinMaxMask
(
nfis2gp
,
fis2
.
data
(),
imiss
,
minval
,
maxval
);
if
(
m
inval
<
MIN_FIS
||
m
axval
>
MAX_FIS
)
cdoWarning
(
"%s out of range (min=%g max=%g)!"
,
var_stdname
(
surface_geopotential
),
m
inval
,
maxval
);
auto
mm
=
arrayMinMaxMask
(
nfis2gp
,
fis2
.
data
(),
imiss
);
if
(
m
m
.
min
<
MIN_FIS
||
m
m
.
max
>
MAX_FIS
)
cdoWarning
(
"%s out of range (min=%g max=%g)!"
,
var_stdname
(
surface_geopotential
),
m
m
.
min
,
mm
.
max
);
if
(
m
inval
<
-
1.e10
||
m
axval
>
1.e10
)
cdoAbort
(
"%s out of range!"
,
var_stdname
(
surface_geopotential
));
if
(
m
m
.
min
<
-
1.e10
||
m
m
.
max
>
1.e10
)
cdoAbort
(
"%s out of range!"
,
var_stdname
(
surface_geopotential
));
streamClose
(
streamID
);
}
...
...
@@ -580,12 +579,12 @@ Remapeta(void *process)
if
(
zaxisIDh
!=
-
1
)
{
// check range of ps_prog
arrayMinMaxMask
(
gridsize
,
ps1
.
data
(),
imiss
,
minval
,
maxval
);
if
(
m
inval
<
MIN_PS
||
m
axval
>
MAX_PS
)
cdoWarning
(
"Surface pressure out of range (min=%g max=%g)!"
,
m
inval
,
maxval
);
auto
mm
=
arrayMinMaxMask
(
gridsize
,
ps1
.
data
(),
imiss
);
if
(
m
m
.
min
<
MIN_PS
||
m
m
.
max
>
MAX_PS
)
cdoWarning
(
"Surface pressure out of range (min=%g max=%g)!"
,
m
m
.
min
,
mm
.
max
);
// check range of geop
arrayMinMaxMask
(
gridsize
,
fis1
.
data
(),
imiss
,
minval
,
maxval
);
if
(
m
inval
<
MIN_FIS
||
m
axval
>
MAX_FIS
)
cdoWarning
(
"Orography out of range (min=%g max=%g)!"
,
m
inval
,
maxval
);
mm
=
arrayMinMaxMask
(
gridsize
,
fis1
.
data
(),
imiss
);
if
(
m
m
.
min
<
MIN_FIS
||
m
m
.
max
>
MAX_FIS
)
cdoWarning
(
"Orography out of range (min=%g max=%g)!"
,
m
m
.
min
,
mm
.
max
);
}
if
(
!
lfis2
)
...
...
@@ -600,9 +599,9 @@ Remapeta(void *process)
const
auto
offset
=
gridsize
*
levelID
;
single2
=
t1
+
offset
;
arrayMinMaxMask
(
gridsize
,
single2
,
imiss
,
minval
,
maxval
);
if
(
m
inval
<
MIN_T
||
m
axval
>
MAX_T
)
cdoWarning
(
"Input temperature at level %d out of range (min=%g max=%g)!"
,
levelID
+
1
,
m
inval
,
maxval
);
auto
mm
=
arrayMinMaxMask
(
gridsize
,
single2
,
imiss
);
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
,
mm
.
max
);
}
varID
=
sqID
;
...
...
@@ -614,9 +613,9 @@ Remapeta(void *process)
corr_hum
(
gridsize
,
single2
,
MIN_Q
);
arrayMinMaxMask
(
gridsize
,
single2
,
imiss
,
minval
,
maxval
);
if
(
m
inval
<
MIN_Q
||
m
axval
>
MAX_Q
)
cdoWarning
(
"Input humidity at level %d out of range (min=%g max=%g)!"
,
levelID
+
1
,
m
inval
,
maxval
);
auto
mm
=
arrayMinMaxMask
(
gridsize
,
single2
,
imiss
);
if
(
m
m
.
min
<
MIN_Q
||
m
m
.
max
>
MAX_Q
)
cdoWarning
(
"Input humidity at level %d out of range (min=%g max=%g)!"
,
levelID
+
1
,
m
m
.
min
,
mm
.
max
);
}
}
...
...
@@ -660,9 +659,9 @@ Remapeta(void *process)
const
auto
offset
=
gridsize
*
levelID
;
single2
=
t2
+
offset
;
arrayMinMaxMask
(
gridsize
,
single2
,
imiss
,
minval
,
maxval
);
if
(
m
inval
<
MIN_T
||
m
axval
>
MAX_T
)
cdoWarning
(
"Output temperature at level %d out of range (min=%g max=%g)!"
,
levelID
+
1
,
m
inval
,
maxval
);
auto
mm
=
arrayMinMaxMask
(
gridsize
,
single2
,
imiss
);
if
(
m
m
.
min
<
MIN_T
||
m
m
.
max
>
MAX_T
)
cdoWarning
(
"Output temperature at level %d out of range (min=%g max=%g)!"
,
levelID
+
1
,
m
m
.
min
,
mm
.
max
);
setmissval
(
gridsize
,
imiss
,
missval
,
single2
);
cdoDefRecord
(
streamID2
,
varID
,
levelID
);
...
...
@@ -681,9 +680,9 @@ Remapeta(void *process)
if
(
levelID
<
nctop
)
for
(
size_t
i
=
0
;
i
<
gridsize
;
++
i
)
single2
[
i
]
=
cconst
;
arrayMinMaxMask
(
gridsize
,
single2
,
imiss
,
minval
,
maxval
);
if
(
m
inval
<
MIN_Q
||
m
axval
>
MAX_Q
)
cdoWarning
(
"Output humidity at level %d out of range (min=%g max=%g)!"
,
levelID
+
1
,
m
inval
,
maxval
);
auto
mm
=
arrayMinMaxMask
(
gridsize
,
single2
,
imiss
);
if
(
m
m
.
min
<
MIN_Q
||
m
m
.
max
>
MAX_Q
)
cdoWarning
(
"Output humidity at level %d out of range (min=%g max=%g)!"
,
levelID
+
1
,
m
m
.
min
,
mm
.
max
);
setmissval
(
gridsize
,
imiss
,
missval
,
single2
);
cdoDefRecord
(
streamID2
,
varID
,
levelID
);
...
...
src/array.cc
View file @
edd08e38
...
...
@@ -161,8 +161,8 @@ varrayMinMaxMeanMV(const size_t len, const Varray<double> &array, const double m
return
MinMaxMean
(
mms
.
min
,
mms
.
max
,
rmean
,
mms
.
n
);
}
void
arrayMinMaxMask
(
const
size_t
len
,
const
double
*
array
,
const
Varray
<
int
>
&
mask
,
double
&
rmin
,
double
&
rmax
)
MinMax
arrayMinMaxMask
(
const
size_t
len
,
const
double
*
array
,
const
Varray
<
int
>
&
mask
)
{
double
zmin
=
DBL_MAX
;
double
zmax
=
-
DBL_MAX
;
...
...
@@ -187,8 +187,7 @@ arrayMinMaxMask(const size_t len, const double *array, const Varray<int> &mask,
}
}
rmin
=
zmin
;
rmax
=
zmax
;
return
MinMax
(
zmin
,
zmax
);
}
void
...
...
src/array.h
View file @
edd08e38
...
...
@@ -150,7 +150,7 @@ MinMaxSum varrayMinMaxSumMV(size_t len, const Varray<T> &array, T missval, MinMa
MinMaxMean
varrayMinMaxMean
(
size_t
len
,
const
Varray
<
double
>
&
array
);
MinMaxMean
varrayMinMaxMeanMV
(
size_t
len
,
const
Varray
<
double
>
&
array
,
double
missval
);
void
arrayMinMaxMask
(
size_t
len
,
const
double
*
array
,
const
Varray
<
int
>
&
mask
,
double
&
rmin
,
double
&
rmax
);
MinMax
arrayMinMaxMask
(
size_t
len
,
const
double
*
array
,
const
Varray
<
int
>
&
mask
);
void
arrayAddArray
(
size_t
len
,
double
*
array1
,
const
double
*
array2
);
void
arrayAddArrayMV
(
size_t
len
,
double
*
array1
,
const
double
*
array2
,
double
missval
);
...
...
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