# [ncl-talk] R: NCL uv2vr_cfd function on Python

Giorgio Graffino giorgio.graffino at alice.it
Tue Sep 29 08:29:52 MDT 2015

```Ok, I think I've found the problem: dx2 and dy2 are distance in meters, not degrees.
Since u and v are given in latitude/longitude, there must be an implicit conversion inside the uv2vr_cfd function.

Anyone knows how this conversion is performed?

Giorgio

----Messaggio originale----

Da: giorgio.graffino at alice.it

Data: 29-set-2015 11.31

A: <ncl-talk at ucar.edu>

Ogg: [ncl-talk] NCL uv2vr_cfd function on Python

Dear NCL Users,
I'm trying to adapt an NCL script I wrote to compute water vertical speed on Python.

In particular, I'm finding some difficulties on "translating" the NCL built-in function uv2vr_cfd into Python; I used that function to compute the vertical component of wind stress. On the web page (https://www.ncl.ucar.edu/Document/Functions/Built-in/uv2vr_cfd.shtml) it's stated that

According to H.B. Bluestein [Synoptic-Dynamic Meteorology in Midlatitudes, 1992,
Oxford Univ. Press p113-114], let D represent the partial derivative, a the radius of
the earth, phi the latitude and dx2/dy2 the appropriate longitudinal and latitudinal
spacing, respectively. Then, letting j be the latitude y-subscript, and i be the
longitude x-subscript:
rv = Dv/Dx - Du/Dy + (u/a)*tan(phi)

rv(j,i) = (v(j,i+1)-v(j,i-1))/dx2(j)
- (u(j+1,i)-u(j-1,i))/dy2(j)
+ (u(j,i)/a)*tan(phi(j))
Now, I tried to write that function on Python in this way

def Curl(u,v,nlat,nlon):

rv = np.empty(shape=(nlat,nlon))
rv.fill(np.nan)
M0 = np.arange(1,nlat-1)                      # M0 = [1,...,nlat-1]
N0 = np.arange(1,nlon-1)                     # N0 = [1,...,nlon-1]
for m in M0:            for n in N0:                    rv[m,n] = (v[m,n+1]-v[m,n-1])/(lons[n+1]-lons[n-1]) - \
(u[m+1,n]-u[m-1,n])/(lats[m+1]-lats[m-1]) + \
return rv
but, even if the pattern is similar, there are four orders of magnitude between the values. I attach results using NCL (MedDailyINDEX.png file) and Python (WindStressCurl.png) for the same day.

Could it be possible to know how exactly rv is computed inside uv2vr_cfd function? Because I think there is something missing in my implementation...

Regards,
Giorgio

-------------- next part --------------
An HTML attachment was scrubbed...
URL: http://mailman.ucar.edu/pipermail/ncl-talk/attachments/20150929/122f3f4b/attachment.html
```