-
Notifications
You must be signed in to change notification settings - Fork 23
Closed
Description
At v3.11.0, there is a bug in cf.Field.derivative which causes the returned boundary values to be incorrect when wrapping with periodic coordinates (such as longitudes).
The centred differences of the coordinates are used, so the wrapped values need to be adjusted by the period in order to be correct. This is not currently the case.
For example, if there are longitude coordinates of (22.5, 67.5, 112.5, 157.5, 202.5, 247.5, 292.5, 337.5) in degrees east, then their centred differences should be (90, 90, 90, 90, 90, 90, 90, 90). However, the current derivative method gives them as (-270, 90, 90, 90, 90, 90, 90, -270).
>>> # v3.11.0 situation - INCORRECT
>>> import cf
>>> f = cf.example_field(0)
>>> print(f)
Field: specific_humidity (ncvar%q)
----------------------------------
Data : specific_humidity(latitude(5), longitude(8)) 1
Cell methods : area: mean
Dimension coords: latitude(5) = [-75.0, ..., 75.0] degrees_north
: longitude(8) = [22.5, ..., 337.5] degrees_east
: time(1) = [2019-01-01 00:00:00]
>>> print(f.derivative('X').array[[0, -1]))
[[-1.85185185e-05 -4.44444444e-05 -2.22222222e-04 1.66666667e-04
2.55555556e-04 6.66666667e-05 -8.88888889e-05 6.29629630e-05]
[-8.51851852e-05 1.44444444e-04 -1.11111111e-05 -1.11111111e-05
2.22222222e-05 1.77777778e-04 -2.66666667e-04 1.03703704e-04]]# CORRECT VALUES:
[[ 5.55555556e-05 -4.44444444e-05 -2.22222222e-04 1.66666667e-04
2.55555556e-04 6.66666667e-05 -8.88888889e-05 -1.88888889e-04]
[ 2.55555556e-04 1.44444444e-04 -1.11111111e-05 -1.11111111e-05
2.22222222e-05 1.77777778e-04 -2.66666667e-04 -3.11111111e-04]]PR to follow
sadielbartholomew
Metadata
Metadata
Assignees
Labels
bugSomething isn't workingSomething isn't working