[ncl-talk] delete array rows with duplicate time,lat,lon in ncl
Sam McClatchie
smcclatchie at fishocean.info
Sat Jun 16 18:09:21 MDT 2018
Hello
I have an annoyingly simple problem. I want to plot salinity on an
isopycnal surface for about 75 oceanographic stations (where there are
depth profiles) arranged on an irregularly spaced, ragged grid. The data
are in a flat netcdf file that cannot be read by the Climate Data Operators.
------------------------------------
smcc at jaguar:/data/dynamic_data/projects/projects2018/visualization/data$
ncdump -h CalCOFI_temp_sal_on_26.5_isopycnal_by_cruise.nc
netcdf CalCOFI_temp_sal_on_26.5_isopycnal_by_cruise {
dimensions:
row = 62 ;
sta_id_strlen = 11 ;
variables:
char sta_id(row, sta_id_strlen) ;
sta_id:_Encoding = "ISO-8859-1" ;
sta_id:coordinates = "time latitude longitude" ;
sta_id:description = "8-digit CalCOFI line and station
designation" ;
sta_id:ioos_category = "Identifier" ;
sta_id:long_name = "Line and Station" ;
int r_depth(row) ;
r_depth:actual_range = 125, 271 ;
r_depth:coordinates = "time latitude longitude" ;
r_depth:description = "Reported Depth the bottle was tripped" ;
r_depth:ioos_category = "Identifier" ;
r_depth:long_name = "Reported Bottle Depth" ;
r_depth:units = "meters" ;
float r_temp(row) ;
r_temp:actual_range = 7.83f, 9.04f ;
r_temp:coordinates = "time latitude longitude" ;
r_temp:description = "Reported Temperature of water at the
depth the bottle was tripped" ;
r_temp:ioos_category = "Temperature" ;
r_temp:long_name = "Reported Temperature" ;
r_temp:units = "degree C" ;
float r_salinity(row) ;
r_salinity:actual_range = 33.975f, 34.215f ;
r_salinity:coordinates = "time latitude longitude" ;
r_salinity:description = "Practical Salinity Scale, 1978
(UNESCO, 1981a)" ;
r_salinity:ioos_category = "Salinity" ;
r_salinity:long_name = "Reported Salinity" ;
r_salinity:units = "psu" ;
float r_sigma(row) ;
r_sigma:actual_range = 26.475f, 26.525f ;
r_sigma:coordinates = "time latitude longitude" ;
r_sigma:ioos_category = "Other" ;
r_sigma:long_name = "Reported Potential Density of water" ;
float latitude(row) ;
latitude:_CoordinateAxisType = "Lat" ;
latitude:actual_range = 30.186f, 36.709f ;
latitude:axis = "Y" ;
latitude:ioos_category = "Location" ;
latitude:long_name = "Latitude" ;
latitude:standard_name = "latitude" ;
latitude:units = "degrees_north" ;
float longitude(row) ;
longitude:_CoordinateAxisType = "Lon" ;
longitude:actual_range = -124.637f, -117.533f ;
longitude:axis = "X" ;
longitude:ioos_category = "Location" ;
longitude:long_name = "Longitude" ;
longitude:standard_name = "longitude" ;
longitude:units = "degrees_east" ;
double time(row) ;
time:_CoordinateAxisType = "Time" ;
time:actual_range = 1365319440., 1367199780. ;
time:axis = "T" ;
time:description = "Time" ;
time:ioos_category = "Time" ;
time:long_name = "Time" ;
time:standard_name = "time" ;
time:time_origin = "01-JAN-1970 00:00:00" ;
time:units = "seconds since 1970-01-01T00:00:00Z" ;
// global attributes:
:acknowledgment = "University of California, San Diego Scripps
Institution" ;
:cdm_data_type = "Point" ;
:Conventions = "COARDS, CF-1.6, Unidata Dataset Discovery v1.0" ;
:date_issued = "2013-07-17" ;
:date_modified = "2013-07-17" ;
:Easternmost_Easting = -117.533f ;
:featureType = "Point" ;
:geospatial_lat_max = 36.709f ;
:geospatial_lat_min = 30.186f ;
:geospatial_lat_units = "degrees_north" ;
:geospatial_lon_max = -117.533f ;
:geospatial_lon_min = -124.637f ;
:geospatial_lon_units = "degrees_east" ;
:history = "2018-04-22T00:58:55Z (source database)\n",
"2018-04-22T00:58:55Z
http://oceanview.pfeg.noaa.gov/erddap/tabledap/siocalcofiHydroBottleReport.ncCF?sta_id%2Cr_depth%2Cr_temp%2Cr_salinity%2Cr_sigma%2Clatitude%2Clongitude%2Ctime&r_sigma%3E=26.475&r_sigma%3C=26.525&time%3E=2013-03-01T12%3A52%3A58Z&time%3C=2013-05-01T12%3A52%3A58Z"
;
:id = "siocalcofiHydroBottleReport_3bf6_a84f_a01b" ;
:infoUrl =
"http://www.calcofi.org/new.data/index.php/reporteddata/2013-09-30-23-23-27/database-tables-description"
;
:institution = "UCSD SIO" ;
:license = "The data may be used and redistributed for free but
is not intended\n",
"for legal use, since it may contain inaccuracies. Neither
the data\n",
"Contributor, ERD, NOAA, nor the United States Government,
nor any\n",
"of their employees or contractors, makes any warranty,
express or\n",
"implied, including warranties of merchantability and
fitness for a\n",
"particular purpose, or assumes any legal liability for the
accuracy,\n",
"completeness, or usefulness, of this information." ;
:Northernmost_Northing = 36.709f ;
:project = "CalCOFI" ;
:publisher_email = "jwilkinson at ucsd.edu" ;
:publisher_name = "James Wilkinson" ;
:sourceUrl = "(source database)" ;
:Southernmost_Northing = 30.186f ;
:standard_name_vocabulary = "CF-11" ;
:subsetVariables = "sta_id" ;
:summary = "SIO Hydrographic data" ;
:time_coverage_end = "2013-04-29T01:43:00Z" ;
:time_coverage_start = "2013-04-07T07:24:00Z" ;
:title = "CalCOFI SIO Hydrographic Bottle Report data" ;
:Westernmost_Easting = -124.637f ;
----------------------------------------------------
To obtain enough salinity points on the density surface (26.5 for
example), I selected the data based on a small range of densities (+/-
0.025). This means that at a few (time,lat,long) stations there is more
than one density point in the range. Consequently, I obtain some
(time,lat,long) stations where there is more than one salinity selected
for the isopycnal, and this causes the contour plot to fail.
Here is my question:
Since I cannot use CDO with this netcdf file (it is not the right format
of netcdf), can I select and eliminate the duplicates efficiently in NCL?
------------------------------------------------
I was thinking something like this?
in258 =
addfile("../data/CalCOFI_temp_sal_on_25.8_isopycnal_by_cruise.nc","r")
s258 = in258->r_salinity ; read all salinities
lat3 = in258->latitude
lon3 = in258->longitude
time3 = in258->time
; printVarSummary(s258)
; printVarSummary(lat3)
; printVarSummary(lon3)
; print(time3)
; print(get_unique_values(time3))
x = (/ (/time3/),(/lat3/),(/lon3/),(/s258/) /)
print(x)
x1D = ndtooned(x)
print(x1D)
i1D = ind(get_unique_values(x1D(0,??))); need to index the original
position of unique times
exit()
i = ind_resolve(i1D, dimsizes(x) )
--------------------------------------------------
The plot I am working on is here:
"https://my.pcloud.com/publink/show?code=XZLSJf7ZOh5xn41l5yVWQTzpE2Y5zyTG0LeX"
The NCL code is here:
"https://my.pcloud.com/publink/show?code=XZMSJf7Za13geSDAd0hh0ppltNa2PHkfYBUk"
The data are here:
"https://my.pcloud.com/publink/show?code=XZASJf7Z5CO19wADqnbAHt5NQa10RhaXr91X"
Thanks in advance,
Sam
--
email signature Sam McClatchie (fisheries oceanographer)
& Elena Turin (accounting & auditing)
FishOcean Enterprises
38 Upland Rd, Huia, Auckland 0604, New Zealand
cell: 027 752 8495
Internet <http://www.fishocean.info>
"The time has come", the tui said,
"to talk of many things:
Of songs - and ferns - and flowering flax,
of Pukekos and dreams ..."
(not Lewis Carroll)
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://mailman.ucar.edu/pipermail/ncl-talk/attachments/20180617/c4a39581/attachment.html>
-------------- next part --------------
A non-text attachment was scrubbed...
Name: SamMcClatchie2_small.jpg
Type: image/jpeg
Size: 45362 bytes
Desc: not available
URL: <http://mailman.ucar.edu/pipermail/ncl-talk/attachments/20180617/c4a39581/attachment.jpg>
More information about the ncl-talk
mailing list