Project

General

Profile

capping field range - setting a maximum or minimum value

Added by Adrian Tompkins almost 8 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 8 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 8 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 8 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 8 years ago

cool! Thanks Ralf!

RE: capping field range - setting a maximum or minimum value - Added by Andrea Gierisch about 7 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 5 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

    (1-6/6)