[ncl-talk] Calculating Barotropic streamfunction and AMOC using data with missing values?
Hemming, Michael
michael.hemming at mpimet.mpg.de
Wed Sep 24 07:40:04 MDT 2014
I am using version ncl 6.1.2-precompiled, I tried to continue without using poisson_grid_fill. I removed the missing values (set = 0) from the data using CDO and have managed to get closer to the solution, although now I get the following error:
fatal:Number of dimensions on right hand side do not match number of dimension in left hand side
fatal:["Execute.c":8128]:Execute: Error occurred at or near line 51 in file
I am using the uv2sfvpg(barai,v,sf,vp) function, with the following dimensions:
Variable: barai
Type: float
Total Size: 1260000 bytes
315000 values
Number of Dimensions: 3
Dimensions and sizes: [time | 100] x [lat | 90] x [lon | 35]
Coordinates:
time: [ 0..36130]
lat: [-44.5..44.5]
lon: [ -52.. -18]
Number Of Attributes: 6
standard_name : u_vint_acc
long_name : barotropic zonal velocity
units : m*m/s
code : 255
_FillValue : -9e+33
missing_value : -9e+33
Variable: v
Type: float
Total Size: 25200000 bytes
6300000 values
Number of Dimensions: 4
Dimensions and sizes: [time | 100] x [depth | 20] x [lat | 90] x [lon | 35]
Coordinates:
time: [ 0..36130]
depth: [ 7..2435]
lat: [-44.5..44.5]
lon: [ 308.. 342]
Number Of Attributes: 6
standard_name : v_acc
long_name : meridional velocity component
units : m/s
code : 255
_FillValue : -9e+33
missing_value : -9e+33
Variable: lon
Type: double
Total Size: 280 bytes
35 values
Number of Dimensions: 1
Dimensions and sizes: [35]
Coordinates:
Variable: lat
Type: double
Total Size: 720 bytes
90 values
Number of Dimensions: 1
Dimensions and sizes: [lat | 90]
Coordinates:
lat: [-44.5..44.5]
Number Of Attributes: 4
standard_name : latitude
long_name : latitude
units : degrees_north
axis : Y
and here is my code:
dimUV= dimsizes(barai)
klev = 20
sf = v(:,{klev},:,:)
vp = v(:,{klev},:,:)
sf at long_name = "stream function"
vp at long_name = "velocity potential"
sf at units = "m^2/s"
vp at units = "m^2/s"
nlat = 90 ; dimensions
mlon = 35
uvmsg = 1e+36
sf = new ( (/nlat,mlon /), float, uvmsg ) ; stream function
vp = new ( (/nlat,mlon /), float, uvmsg ) ; velocity potential
printVarSummary(sf)
printVarSummary(vp)
uv2sfvpg(barai,v,sf,vp)
end
________________________________
From: Mary Haley [haley at ucar.edu]
Sent: 18 September 2014 20:22
To: Hemming, Michael
Cc: ncl-talk at ucar.edu
Subject: Re: [ncl-talk] Calculating Barotropic streamfunction and AMOC using data with missing values?
Michael,
The error telling you exactly what the the problem is: the first argument must be a float or double. But, your "printVarSummary" output seems to indicate that your arrays are float, so I'm not sure why you are getting this error.
poisson_grid_fill is working just fine for me using either float or double input, so maybe there's a different issue. What version of NCL do you have?
--Mary
On Sat, Sep 6, 2014 at 4:57 AM, Hemming, Michael <michael.hemming at mpimet.mpg.de<mailto:michael.hemming at mpimet.mpg.de>> wrote:
Hi Mary,
Thanks for the suggestion. I have since been told that the data has been conservatively interpolated onto a regular grid from the original triangular grid, so this command may work. Although, I am having trouble understanding exactly what it does. I guess it is a form of interpolation but I'm not sure what the following means and how I should change this to suit my data:
guess = 1 ; use zonal means
is_cyclic = True ; cyclic [global]
nscan = 1500 ; usually much less than this
eps = 1.e-2 ; variable dependent
relc = 0.6 ; relaxation coefficient
opt = 0 ; not used
and I also have the problem of missing values for the following script, where it complains about missing values at the line including ' zone_int = new((/nlat........':
load "$NCARG_ROOT/lib/ncarg/nclscripts/csm/gsn_code.ncl"
load "$NCARG_ROOT/lib/ncarg/nclscripts/csm/gsn_csm.ncl"
load "$NCARG_ROOT/lib/ncarg/nclscripts/csm/contributed.ncl"
begin
;##########################################################################
;##########################################################################
;--------------------------------AMOC Plots--------------------------------
;--------------------------------------------------------------------------
;##########################################################################
;##########################################################################
; Adapted from: http://www.ncl.ucar.edu/Applications/Scripts/moc_1.ncl
;**************************************************************
; read in data
;**************************************************************
in = addfile("sector_icon_lr_13_mpiom_data_3du_ym_0000-0099.nc<http://sector_icon_lr_13_mpiom_data_3du_ym_0000-0099.nc>","r")
v = in->vke
dz = in->depth
dx = in->uko ;if doesn't work check this line!
lat= in->lat
poisson_grid_fill( v, True, 1, 1500, 1e-2, 0.6, 0)
poisson_grid_fill( dx, True, 1, 1500, 1e-2, 0.6, 0)
dxx = rm_single_dims(dx({depth|7},{lon|-45:-45},{lat|-30:-30},time|:))
printVarSummary(v)
printVarSummary(dz)
printVarSummary(dx)
printVarSummary(dxx)
printVarSummary(lat)
;**************************************************************
; some parameters
;**************************************************************
nzt = getfilevardimsizes(in,"z_t") ; z_t grid (25)
nzw = nzt+1 ; z_w grid (26)
nlat = dimsizes(lat)
d2rad = 0.017453 ; degrees to radians
printVarSummary(nzt)
printVarSummary(nzw)
printVarSummary(nlat)
;**************************************************************
; calculate first intergral
; int[lon1:lon2]v*cos(lat)*dx*dz
; this calculation is done on the z_t grid
;**************************************************************
zone_int = new((/nlat,nzt/),typeof(v)) ; allocate space
do k = 0, nzt-1
do j = 0, nlat-1
zone_int(j,k) = dim_sum(v(k,j,:)*cos(lat(j)*d2rad)*dxx*dz(k))
end do
end do
printVarSummary(zone_int)
The results from using PrintVarSummary:
Variable: v
Type: float
Total Size: 40992000 bytes
10248000 values
Number of Dimensions: 4
Dimensions and sizes: [time | 100] x [depth | 20] x [lat | 122] x [lon | 42]
Coordinates:
time: [ 0..867240]
depth: [ 7..2435]
lat: [45.375..-45.375]
lon: [-51.375..-20.625]
Number Of Attributes: 6
standard_name : sea_water_y_velocity
long_name : Sea water y velocity
units : m s-1
code : 4
_FillValue : -9e+33
missing_value : -9e+33
Variable: dz
Type: double
Total Size: 160 bytes
20 values
Number of Dimensions: 1
Dimensions and sizes: [depth | 20]
Coordinates:
depth: [ 7..2435]
Number Of Attributes: 5
standard_name : depth
long_name : depth_below_sea
units : m
positive : down
axis : Z
Variable: dx
Type: float
Total Size: 40992000 bytes
10248000 values
Number of Dimensions: 4
Dimensions and sizes: [time | 100] x [depth | 20] x [lat | 122] x [lon | 42]
Coordinates:
time: [ 0..867240]
depth: [ 7..2435]
lat: [45.375..-45.375]
lon: [-51.375..-20.625]
Number Of Attributes: 6
standard_name : sea_water_x_velocity
long_name : Sea water x velocity
units : m s-1
code : 3
_FillValue : -9e+33
missing_value : -9e+33
Variable: dxx
Type: float
Total Size: 400 bytes
100 values
Number of Dimensions: 1
Dimensions and sizes: [time | 100]
Coordinates:
time: [ 0..867240]
Number Of Attributes: 9
lon : -45.375
lat : -29.625
depth : 7
missing_value : -9e+33
_FillValue : -9e+33
code : 3
units : m s-1
long_name : Sea water x velocity
standard_name : sea_water_x_velocity
Variable: lat
Type: double
Total Size: 976 bytes
122 values
Number of Dimensions: 1
Dimensions and sizes: [lat | 122]
Coordinates:
lat: [45.375..-45.375]
Number Of Attributes: 4
standard_name : latitude
long_name : latitude
units : degrees_north
axis : Y
Variable: nzt
Type: integer
Total Size: 4 bytes
1 values
Number of Dimensions: 1
Dimensions and sizes: [1]
Coordinates:
Number Of Attributes: 1
_FillValue : -2147483647<tel:2147483647>
Variable: nzw
Type: integer
Total Size: 4 bytes
1 values
Number of Dimensions: 1
Dimensions and sizes: [1]
Coordinates:
Number Of Attributes: 1
_FillValue : -2147483647<tel:2147483647>
Variable: nlat
Type: integer
Total Size: 4 bytes
1 values
Number of Dimensions: 1
Dimensions and sizes: [1]
Coordinates:
The error:
fatal:poisson_grid_fill: The first input argument must be float or double
fatal:["Execute.c":8128]:Execute: Error occurred at or near line 64 in file AMOC.ncl
thanks,
Michael
________________________________
From: Mary Haley [haley at ucar.edu<mailto:haley at ucar.edu>]
Sent: 05 September 2014 19:59
To: Hemming, Michael
Cc: ncl-talk at ucar.edu<mailto:ncl-talk at ucar.edu> Talk
Subject: Re: [ncl-talk] Calculating Barotropic streamfunction and AMOC using data with missing values?
Hi Michael,
I'm hoping Dennis will weigh in here.
You really don't want to use the spherical harmonic routines on missing data. Normally I would say you need to regrid the data or use poisson_grid_fill first so you can get rid of missing values, but given that this is UV data, I don't think this is your best option.
--Mary
On Tue, Sep 2, 2014 at 5:16 AM, Michael Hemming <michael.hemming at mpimet.mpg.de<mailto:michael.hemming at mpimet.mpg.de>> wrote:
Hello,
I have been struggling to calculate Barotropic streamfunction and AMOC using online examples and function but I have recently been told it is due to the fact that the data I use contains missing values, therefore all values are set to the missing value.
How can I somehow ignore the missing values during calculation?
Here is my code for the bartropic streamfunction:
----------------------------------------------------------------------------------------------------------------------------------------------------
load "$NCARG_ROOT/lib/ncarg/nclscripts/csm/gsn_code.ncl"
load "$NCARG_ROOT/lib/ncarg/nclscripts/csm/gsn_csm.ncl"
load "$NCARG_ROOT/lib/ncarg/nclscripts/csm/contributed.ncl"
begin
;##########################################################################
;##########################################################################
;-------------------------Barotropic Plots---------------------------------
;--------------------------------------------------------------------------
;##########################################################################
;##########################################################################
;----------Load in data
;ICON
noshupw = addfile ("con.ym.atlbox.noshift.100y.nc<http://con.ym.atlbox.noshift.100y.nc>", "r")
u = noshupw->u_vint_acc
u&lon = u&lon-360 ; Fix the longitudes to be < 360
lat = noshupw->lat
v = noshupw->v_acc
printVarSummary(u)
printVarSummary(v)
dimUV= dimsizes(barai)
klev = 20 ; number of levels in total
sf = v(:,{klev},:,:)
vp = v(:,{klev},:,:)
sf at long_name = "stream function"
vp at long_name = "velocity potential"
sf at units = "m^2/s"
vp at units = "m^2/s"
printVarSummary(sf)
printVarSummary(vp)
uv2sfvpg(u,v,sf,vp)
----------------------------------------------------------------------------------------------------------------------------------------------------
and my AMOC code is largely based on the online example moc_1.ncl
thanks,
Michael
_______________________________________________
ncl-talk mailing list
List instructions, subscriber options, unsubscribe:
http://mailman.ucar.edu/mailman/listinfo/ncl-talk
-------------- next part --------------
An HTML attachment was scrubbed...
URL: http://mailman.ucar.edu/pipermail/ncl-talk/attachments/20140924/57b92be8/attachment.html
More information about the ncl-talk
mailing list