Skip to content

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
Clone this wiki locally