Extracting data from different gridpoints and averaging
Added by Lyndon Mark Olaguera about 3 years ago
Is there a way to extract the values at different gridpoints and then take their average using cdo?
I have my sample netcdf data here (for example, the vorticity file):
https://www.dropbox.com/sh/t88oab9txej73u1/AAAkDCcsTC3_eHg8uBc0vhtda?dl=0
I have a text file containing the coordinates, which is attached to this post.
I am reading this text file using bash:
#!/bin/bash
while IFS=, read -r field1 field2 field3 field4 field5 field6 field7
do
date=$field1
lat=$field2
lon=$field3
lat_e=$field4
lat_w=$field5
lon_e=$field6
lon_w=$field7
cdo
echo $lon_e
done < test_dat_lat_lon.csv
~
I want to get the average of multiple grid points for the listed dates after extracting the values.
For example, average for the first line in the text file:
lat_e,lon_e
lat_w_lon_w
lat_e_lon_w
lat_w_lon_e
I have to do this for all the lines in the text file.
field1 and field2 are the central lat and lon respectively. Basically, I want to get the average of the values surrounding this gridpoints. Is this also possible in CDO?
My workaround solution is to extract the values from the four surrounding grid points then get their average. Not sure how to do this in CDO.
Any suggestions on how to do this using cdo?
I'll appreciate any help
--Lyndz
test_dat_lat_lon.csv (1.14 KB) test_dat_lat_lon.csv | text file containing the coordinates |
Replies (4)
RE: Extracting data from different gridpoints and averaging - Added by Ralf Mueller about 3 years ago
hi Lyndon!
There is not operators that does the selection of multiple point on one run. But I would loop over the points, extract each point into a separate file and compute the average of all files at the end. Since these output files should be small, there no big IO overhead.
- selection:
cdo -remapnn,lon=${lon}_lat=$lat <inputfile> out_${lon}_${lat}
- average:
cdo -timmean -cat [ out_* ] all_mean
I used cat which out the values in a temporal order, but since you only the need the average, I think it does not matter
RE: Extracting data from different gridpoints and averaging - Added by Lyndon Mark Olaguera about 3 years ago
Hi Ralf,
Many thanks for the fast response. I am encountering a segmentation error.
Here's the modified script.
#!/bin/bash
while IFS=, read -r field1 field2 field3 field4 field5 field6 field7
do
date=$field1
lat=$field2
lon=$field3
latn=$field4
lats=$field5
lone=$field6
lonw=${field7}
echo $lonw
cdo remapnn,lon=${lon}_lat=${latn} -seldate,${date} vort.2008.850hPa.nc n_out_${date}_${lon}_${latn}
cdo remapnn,lon=${lon}_lat=${lats} -seldate,${date} vort.2008.850hPa.nc s_out_${date}_${lon}_${lats}
cdo remapnn,lon=${lone}_lat=${lat} -seldate,${date} vort.2008.850hPa.nc e_out_${date}_${lone}_${lat}
cdo remapnn,lon=${lonw}_lat=${lat} -seldate,${date} vort.2008.850hPa.nc w_out_${date}_${lonw}_${lat}
cdo timmean n_out_${date}_${lon}_${latn} s_out_${date}_${lon}_${lats} e_out_${date}_${lone}_${lat} w_out_${date}_${lonw}_${lat} test_${date}
cdo outputtab,${date},${lat},{$lon},value test_${date} > out_$date.txt
# dat=$(cdo output test_$date)
# echo $dat > sample_$date
# cdo -timmean -cat [ out_* ] all_mean
done < test.dat
I tried this for the first line of the input file
2008-01-19 12.5 127.5 13.5 11.5 128.5 126.5
Here's what I got:
126.5
cdo(1) seldate: Process started
Warning (cdfScanVarAttr): NetCDF: Variable not found - time_bnds
cdo remapnn: Nearest neighbor weights from lonlat (144x73) to lonlat (1x1) grid
cdo(1) seldate: Processed 10512 values from 1 variable over 20 timesteps.
cdo remapnn: Processed 10512 values from 1 variable over 1 timestep [0.00s 28MB].
cdo(1) seldate: Process started
Warning (cdfScanVarAttr): NetCDF: Variable not found - time_bnds
cdo remapnn: Nearest neighbor weights from lonlat (144x73) to lonlat (1x1) grid
cdo(1) seldate: Processed 10512 values from 1 variable over 20 timesteps.
cdo remapnn: Processed 10512 values from 1 variable over 1 timestep [0.00s 28MB].
cdo(1) seldate: Process started
Warning (cdfScanVarAttr): NetCDF: Variable not found - time_bnds
cdo remapnn: Nearest neighbor weights from lonlat (144x73) to lonlat (1x1) grid
cdo(1) seldate: Processed 10512 values from 1 variable over 20 timesteps.
cdo remapnn: Processed 10512 values from 1 variable over 1 timestep [0.00s 27MB].
cdo(1) seldate: Process started
_lat=12.5!apnn (Abort): Open failed on lon=126.5
read_csv.sh: line 30: 2897595 Segmentation fault (core dumped) cdo remapnn,lon=${lonw}_lat=${lat} -seldate,${date} vort.200850hPa.nc w_out_${date}_${lonw}_${lat}
cdo (Abort): Unprocessed Input, could not process all Operators/Files
cdo outputtab (Abort): Key 2008-01-19 unsupported!
I tried doing it manually for the first line:
cdo remapnn,lon=126.5_lat=12.5 -seldate,2008-01-19 vort.2008.850hPa.nc test.nc
And this works! Im not sure what is causing the error.
Also I would like to save the values in a text file:
cdo outputtab,${date},${lat},{$lon},value test_${date} > out_$date.txt
But it say that the date is unsupported.
Any ideas how to solve this?
-Lyndz
RE: Extracting data from different gridpoints and averaging - Added by Ralf Mueller about 3 years ago
hi Lyndz!
I checked the loop over the uploaded CSV file and got dates, which cannot be processed:
+ IFS=, + read -r field1 field2 field3 field4 field5 field6 field7 + date=21/01/2008 + lat=12.5 + lon=120 + latn=13.5 + lats=11.5 + lone=121 + lonw=$'119\r' + echo '|21/01/2008|12.5|120|' |21/01/2008|12.5|120| + cdo remapnn,lon=120_lat=13.5 -seldate,21/01/2008 vort.2008.850hPa.nc n_out_21/01/2008_120_13.5 cdo(1) seldate: Process started cdo(1) seldate (Abort): Date string >21/01/2008< contains invalid character at position 3! ...
Since you seem to get a different date string from your input I think you might re-upload your csv file. I should at least be able to reproduce your results.
cheers
ralf
RE: Extracting data from different gridpoints and averaging - Added by Lyndon Mark Olaguera about 3 years ago
Hi Ralf,
the format changed when I uploaded the file. The date column should be YYYY-MM-DD format.
Attached is a text file with the correct format.
Sincerely,
test_dat_lat_lon.txt (2.28 KB) test_dat_lat_lon.txt |