-
Notifications
You must be signed in to change notification settings - Fork 5
Download HYCOM data via OpenDAP
HappySpring edited this page Jun 6, 2021
·
1 revision
This is an example of downloading a subset of data into NetCDF files via OpenDAP.
The following script downloads salinity from HYCOM.
% Main_test
% this is used to test the `FUN_nc_OpenDAP_with_limit`
clear('all')
close('all')
clc
%% ==== parameters ====
lonlimit = [-80 -73.5];
latlimit = [32.5 37.5];
timelimit = [-inf inf];
time_varname = 'time';
var_download = { 'lon', 'lat', 'depth', 'time', 'salinity' }; %those variable will be downloaded
var_divided = { 'salinity' }; % salinity is too large. It need to be downloaded piece by piece
divided_dim_str = 'time';
% divided_dim_str = [];
Max_Count_per_group = [12];
is_auto_chunksize = true;
%%
exp_list = {'expt_56.3','expt_57.2','expt_92.8','expt_57.7','expt_92.9','expt_93.0'};
for ie = 1:length( exp_list )
% interface
exp_now = exp_list{ie};
filename0 = ['http://tds.hycom.org/thredds/dodsC/GLBv0.08/' exp_now];
% correct lonigutde
tem_lon = FUN_nc_varget_enhanced( filename0, 'lon');
if max(tem_lon) > 350
dim_limit_var0 = {'lon','lat'};
dim_limit_val0 = {lonlimit+360, latlimit};
else
dim_limit_var0 = {'lon','lat'};
dim_limit_val0 = {lonlimit, latlimit};
end
% get time
t_raw = FUN_nc_varget( filename0, time_varname ) ;
t_unit= FUN_nc_attget( filename0, time_varname, 'units') ;
[t0, unit_str, unit_to_day] = FUN_nc_get_time0_from_str( t_unit );
t_mlb = t_raw * unit_to_day + t0;
% set time limit
timeloc = t_mlb >= timelimit(1) & t_mlb <= timelimit(2) ;
t_raw = t_raw(timeloc);
timelimit_in_raw = [ min(t_raw), max(t_raw) ];
if all( ~timeloc )
disp(['Skip file ' filename0 ', out of the required time range.'])
continue
end
% get limit for all dimensions
dim_limit_var = [dim_limit_var0, time_varname];
dim_limit_val = [dim_limit_val0, timelimit_in_raw];
% set output filename
filename1 = ['HYCOM_salt_' exp_now '_' FUN_str_timelimit_from_time( t_mlb(timeloc), 'yyyymm','-' ) '.nc'];
FUN_nc_OpenDAP_with_limit( filename0, filename1, dim_limit_var, dim_limit_val, var_download, var_divided, divided_dim_str, Max_Count_per_group, 'is_auto_chunksize', is_auto_chunksize )
end