capping field range - setting a maximum or minimum value
Added by Adrian Tompkins almost 9 years ago
Hi
I want to set all values below C to C in a netcdf file:
This question has been asked before:
https://code.zmaw.de/boards/1/topics/1589?r=1591#message-1591
And the response suggests using gec and lec.
The solution using these operators would be
cdo mul -gec,$c file.nc file.nc t1.nc
cdo add -mulc,$c -ltc,$c file.nc t1.nc output.nc
rm -f t1.nc
But is there a neater/shorter way to do this?
It would be nice if there were a maxc and minc operator to do it in one command
Adrian
Replies (6)
RE: capping field range - setting a maximum or minimum value - Added by Jaison-Thomas Ambadan almost 9 years ago
Hi,
you could try with NCO operator ncap2,
For example, to set the variable "temp < 270K" to 270
ncap2 -s "where(temp < 270.0) temp = 270.0" ifile.nc ofile.nc
It would be nice if there were a maxc and minc operator to do it in one command
or it may be a good idea to include conditional assignments in CDO expr operator
Cheers,
J
RE: capping field range - setting a maximum or minimum value - Added by Ralf Mueller almost 9 years ago
you could also use the expr operator an the if-then-else shortcut:
cdo -expr,'temp=(temp>270.0)?5.0:temp;' temp.nc maskedTemp.nc
RE: capping field range - setting a maximum or minimum value - Added by Ralf Mueller almost 9 years ago
the expr operator has learnt some new things in cdo-1.7.1:
NAME expr, exprf, aexpr, aexprf - Evaluate expressions SYNOPSIS expr,instr ifile ofile exprf,filename ifile ofile aexpr,instr ifile ofile aexprf,filename ifile ofile DESCRIPTION This module arithmetically processes every timestep of the input dataset. Each individual assignment statement have to end with a semi-colon. Unlike regular variables, temporary variables are never written to the output stream. To define a temporary variable simply prefix the variable name with an underscore (e.g. _varname) when the variable is declared. The following operators are supported: Operator & Meaning & Example & Result = & assignment & x = y & Assigns y to x + & addition & x + y & Sum of x and y - & subtraction & x - y & Difference of x and y * & multiplication & x * y & Product of x and y / & division & x / y & Quotient of x and y ^ & exponentiation & x ^ y & Exponentiates x with y == & equal to & x == y & 1, if x equal to y; else 0 != & not equal to & x != y & 1, if x not equal to y; else 0 > & greater than & x > y & 1, if x greater than y; else 0 < & less than & x < y & 1, if x less than y; else 0 >= & greater equal & x >= y & 1, if x greater equal y; else 0 <= & less equal & x <= y & 1, if x less equal y; else 0 <=> & less equal greater & x <=> y & -1, if x less y; 1, if x greater y; else 0 && & logical AND & x && y & 1, if x and y not equal 0; else 0 || & logical OR & x || y & 1, if x or y not equal 0; else 0 ?: & ternary conditional & x ? y : z & y, if x not equal 0, else z The following functions are supported: Math intrinsics: abs(x) Absolute value of x floor(x) Round to largest integral value not greater than x ceil(x) Round to smallest integral value not less than x int(x) Integer value of x nint(x) Nearest integer value of x sqr(x) Square of x sqrt(x) Square Root of x exp(x) Exponential of x log(x) Natural logarithm of x log10(x) Base 10 logarithm of x sin(x) Sine of x, where x is specified in radians cos(x) Cosine of x, where x is specified in radians tan(x) Tangent of x, where x is specified in radians asin(x) Arc-sine of x, where x is specified in radians acos(x) Arc-cosine of x, where x is specified in radians atan(x) Arc-tangent of x, where x is specified in radians rad(x) Convert x from degrees to radians deg(x) Convert x from radians to degrees Coordinates: clon(x) Longitude coordinate of x (available only if x has geographical coordinates) clat(x) Latitude coordinate of x (available only if x has geographical coordinates) gridarea(x) Grid cell area of x (available only if x has geographical coordinates) clev(x) Level coordinate of x (0, if x is a 2D surface variable) Constants: ngp(x) Number of horizontal grid points nlev(x) Number of vertical levels size(x) Total number of elements (ngp(x)*nlev(x)) missval(x) Returns the missing value of variable x Statistical values over a field: fldmin(x), fldmax(x), fldsum(x), fldmean(x), fldavg(x), fldstd(x), fldstd1(x), fldvar(x), fldvar1(x) Vertical statistical values: vertmin(x), vertmax(x), vertsum(x), vertmean(x), vertavg(x), vertstd(x), vertstd1(x), vertvar(x), vertvar1(x) Miscellaneous: sellevel(x,k) Select level k of variable x sellevidx(x,k) Select level index k of variable x remove(x) Remove variable x from output stream OPERATORS expr Evaluate expressions The processing instructions are read from the parameter. exprf Evaluate expressions script Contrary to expr the processing instructions are read from a file. aexpr Evaluate expressions and append results Same as expr, but keep input variables and append results aexprf Evaluate expression script and append results Same as exprf, but keep input variables and append results PARAMETER instr STRING Processing instructions (need to be 'quoted' in most cases) filename STRING File with processing instructions
I showed some of them here but I missed the comparison stuff ;-(
RE: capping field range - setting a maximum or minimum value - Added by Jaison-Thomas Ambadan almost 9 years ago
cool! Thanks Ralf!
RE: capping field range - setting a maximum or minimum value - Added by Andrea Gierisch about 8 years ago
Hi,
For example, to set the variable "temp < 270K" to 270
ncap2 -s "where(temp < 270.0) temp = 270.0" ifile.nc ofile.nc
I found your thread, thanks for the hints! However, I wanted to apply a similar limitation to all variables in my file. Thus, I finally used:cdo setrtoc,rmin,rmax,c ifile ofile
with a very small number for rmin, and rmax=c.
This works as well.
Andrea
RE: capping field range - setting a maximum or minimum value - Added by Andrea Gierisch over 6 years ago
cdo setrtoc,rmin,rmax,c ifile ofile
with a very small number for rmin, and rmax=c.
I recently learned that cdo also accepts "inf" and "-inf" as arguments for rmin
and rmax
. Hence, this is a better solution:
cdo setrtoc,-inf,270,270 ifile ofile