 NCL Home > Documentation > Functions > General applied math

# local_min

Determines the relative minima for a 2-dimensional array.

## Prototype

```	function local_min (
x [*][*] : float or double,
cyclic   : logical,
delta    : numeric
)

return_val  :  integer
```

## Arguments

x

A 2-dimensional float or double array. Missing data are allowed and must be indicated by x@_FillValue.

cyclic

Set to False if the data array is not cyclic in x.

Set to True if data are cyclic in the x-axis direction. In this case, the x array should not include the cyclic point.

delta

Tolerance level. If values are within delta of surrounding values it will not be counted as a local min value. Generally, delta=0.0

## Return value

Returns the number of relative min values found (nmin). If nmin is greater than zero, then nmin will have three 1-dimensional attribute arrays associated with it:

1. nmin@xi - this will contain the x-axis indices (e.g. longitudes)
2. nmin@yi - this will contain the y-axis indices (e.g. latitudes)
3. nmin@minval - this will contain the minimum values
Each of these 1-dimensional attribute vectors will be of length nmin.

If x is of type float, the return value is float. If x is of type double, the return value is of type double.

## Description

This function uses a simple algorithm. It looks at the points surrounding x and checks to see if they are less than the central value. The central value is x - delta.

```       1-----------8-----------7
|           |           |
|           |           |
|           |           |
2-----------0-----------6
|           |           |
|           |           |
|           |           |
3-----------4-----------5
```

## Examples

Example 1

Example 2

Let x be a 2-dimensional array with dimension sizes nlat = 64 and mlon = 128 with coordinate variables "lat" and "lon". The data are cyclic (cyclic=True). Do not use any tolerance [delta = 0.0]

```    nmin = local_min(x, True, 0.0)
```
If nmin = 3, then the attribute vectors might look like:
```    nmin@xi     = (/  3,     57,      90 /)
nmin@yi     = (/ 21,     38,      52 /)
nmin@minval = (/ 35.0,  -14.3,   -23.9 /)
```
If it is desired to write this to, say, an ascii file, then:

```   ncol   = 3
data   = new ( (/nmin,ncol/) , typeof(x) )
data(:,0) = nmin@xi
data(:,1) = nmin@yi
data(:,2) = nmin@minval

opt = True
opt@fout = "sample.txt"
write_matrix( data, ncol + "f10.2", opt)
```
The output file ["sample.txt"] would look like:
```      3.00     21.00     35.00
57.00     38.00    -14.30
90.00     52.00    -23.90
```