function download_CFSR(Ymin,Ymax,Mmin,Mmax,lonmin,lonmax,latmin,latmax,...
                       NCEP_dir,Yorig)
%
%clear all
%close all
if nargin < 1
  Ymin=2006;
  Ymax=2006;
  Yorig=1900;
  Mmin=6;
  Mmax=6;
  lonmin=16;
  lonmax=19;
  latmin=-34;
  latmax=-32;
  NCEP_dir='DATA/CFSR/';
end
%
% Definitions of names and directories
%
%
% Definitions of names and directories for NCEP1
%
%ncep_url='https://nomads.ncdc.noaa.gov/thredds/dodsC/modeldata/cmd_flxf/1979/197901/19790101/flxf00.gdas.1979010100.grb2';
ncep_url='https://nomads.ncdc.noaa.gov/thredds/dodsC/modeldata/cmd_flxf/';
vnames={'Land_cover_1land_2sea' ...    % surface land-sea mask [1=land; 0=sea]
        'Temperature_height_above_ground' ...      % 2 m temp. [k]
        'Downward_Long-Wave_Rad_Flux' ...   % surface downward long wave flux [w/m^2]
        'Upward_Long-Wave_Rad_Flux_surface'   ...   % surface upward long wave flux [w/m^2]
        'Temperature_surface' ...     % surface temp. [k]
        'Downward_Short-Wave_Rad_Flux_surface' ...   % surface downward solar radiation flux [w/m^2]
        'Upward_Short-Wave_Rad_Flux_surface' ...   % surface upward solar radiation flux [w/m^2]
        'Precipitation_rate' ...   % surface precipitation rate [kg/m^2/s]
        'U-component_of_wind' ...    % 10 m u wind [m/s]
        'V-component_of_wind' ...    % 10 m v wind [m/s]
        'Specific_humidity'};       % 2 m specific humidity [kg/kg]
  
vnames2={'Land_cover_1land_2sea' ...    % surface land-sea mask [1=land; 0=sea]
         'Temperature_height_above_ground' ...      % 2 m temp. [k]
         'Downward_Long_2dWave_Rad_Flux' ...   % surface downward long wave flux [w/m^2]
         'Upward_Long_2dWave_Rad_Flux_surface' ...   % surface upward longwave flux [w/m^2]
         'Temperature_surface' ...     % surface temp. [k]
         'Downward_Short_2dWave_Rad_Flux_surface' ...   % surface downward solar radiation flux [w/m^2]
         'Upward_Short_2dWave_Rad_Flux_surface' ...   % surface upward solar radiation flux [w/m^2]
         'Precipitation_rate' ...   % surface precipitation rate [kg/m^2/s]
         'U_2dcomponent_of_wind' ...    % 10 m u wind [m/s]
         'V_2dcomponent_of_wind' ...    % 10 m v wind [m/s]
         'Specific_humidity'};       % 2 m specific humidity [kg/kg]
                                     %       lan  temp down up temp down up pre  uwind   vwind    sh
level={'' '[0:0]' '' ''  ''   ''  ''  '' '[0:0]' '[0:0]' '[0:0]'};

%
%Common OpenDAP FTP
%

disp([' '])
disp(['Get CFSR data from ',num2str(Ymin),' to ',num2str(Ymax)])
disp(['From ',ncep_url]);
disp([' '])
disp(['Minimum Longitude: ',num2str(lonmin)])
disp(['Maximum Longitude: ',num2str(lonmax)])
disp(['Minimum Latitude: ',num2str(latmin)])
disp(['Maximum Latitude: ',num2str(latmax)])
disp([' '])
%
% Create the directory
%
disp(['Making output data directory ',NCEP_dir])
eval(['!mkdir ',NCEP_dir])
% End Common OpenDap FTP 
%-----------------------
catalog=get_filename_CFSR(Ymin,Mmin,1,0);


%
% Global loop on variable names
%
for k=1:length(vnames)
  disp(['=========================='])
  disp(['VNAME IS ',char(vnames(k))]);
  disp(['=========================='])
%
% Time unit (and time in case of opendap) section
%
  disp(['------'])
  disp(['Get time units and time:  Get_My_Data is OFF '])
  disp(['------'])  
  x=loaddap('-A -e +v',[ncep_url,catalog]);
  if verLessThan('matlab','7.14')
    if (dods_err==1)
      error(dods_err_msg)
    end
  end
% check time unit (APDRC dataset are daily)
  if isempty(x.time.units)
    error('No time unit found');
  end
  eval(['Tunits=x.time.units;']);  
  time0=readdap([ncep_url,catalog],'time',[]);
  if findstr('day',Tunits)
    time_scale = 1;
  elseif findstr('hour',Tunits)
    time_scale = 1/24;
  else
    error('Time units is not days or hours. I assume NCEP datasets are all daily ??! ');
  end
%
% Subgrid section :Find a subset of the NCEP grid
%
  if k==1
    disp(['=========================='])
    disp(['GET  SUBGRID time only k=1']);
    disp(['USE VARIABLE: ',char(vnames(k))  ])
    disp(['=========================='])
%
    [i1min,i1max,i2min,i2max,i3min,i3max,jrange,jmin,jmax,lon,lat]=...
        get_CFSR_grid([ncep_url,catalog],...
                      lonmin,lonmax,latmin,latmax);	     
    lat=flipud(lat);     % latitude inversion in CFSR
%
    disp('GET LAND MASK');
    tndx = 1;
    trange = '[0:0]';
    var=getdap(ncep_url,catalog,char(vnames(k)),...
		 trange,char(level(k)),jrange,...
		 i1min,i1max,i2min,i2max,i3min,i3max);
    var=flipud(var);	 % latitude inversion in CFSR
%
% Write it in a file
%
    write_NCEP([NCEP_dir,char(vnames(k)),'.nc'],...
	       char(vnames(k)),lon,lat,0,var,Yorig)
  else %k==1
%
% Loop on the years
%
    for Y=Ymin:Ymax
      disp(['=========================='])
      disp(['Processing year: ',num2str(Y)])
      disp(['=========================='])
%
% Loop on the months
%
      if Y==Ymin
        mo_min=Mmin;
      else
        mo_min=1;
      end
      if Y==Ymax
        mo_max=Mmax;
      else
        mo_max=12;
      end
  
      for M=mo_min:mo_max
        disp(['  Processing month: ',num2str(M)])
        recipe_file = [NCEP_dir,char(vnames(k)),'_Y',num2str(Y),'M',num2str(M),'.nc'];
        if exist(recipe_file)
          disp(['    Warning : file ',recipe_file,' already exists. Press ''enter'' to continue']);
        end
%
% Get the subset
%
       extract_CFSR(NCEP_dir,ncep_url,char(catalog(k)),...
                    char(vnames(k)),char(vnames2(k)),Y,M,...
                    lon,lat,0,0,...
                    trange,char(level(k)),jrange,...
                    i1min,i1max,i2min,i2max,i3min,i3max,...
                    jmin,jmax,Yorig,0)
      end % end loop month
    end % end loop year
  end %  k==1
end % loop k
%
return
