/[MITgcm]/MITgcm_contrib/gael/profilesMatlabProcessing/profiles_misc/MITprof_resample.m
ViewVC logotype

Diff of /MITgcm_contrib/gael/profilesMatlabProcessing/profiles_misc/MITprof_resample.m

Parent Directory Parent Directory | Revision Log Revision Log | View Revision Graph Revision Graph | View Patch Patch

revision 1.9 by gforget, Mon Feb 1 14:39:49 2016 UTC revision 1.11 by gforget, Fri Mar 17 18:06:22 2017 UTC
# Line 1  Line 1 
1  function [profOut]=MITprof_resample(profIn,fldIn,filOut,method);  function [profOut]=MITprof_resample(profIn,fldIn,filOut,method);
 %  
2  %[profOut]=MITPROF_RESAMPLE(profIn,fldIn,filOut,method);  %[profOut]=MITPROF_RESAMPLE(profIn,fldIn,filOut,method);
3  %  %
4  %     resamples a set of fields (fldIn) to profile 3D locations (profIn)  %  resamples a set of fields (specified in fldIn) to profile locations
5  %     and output the result to nc file (filOut) and memory (profOut).  %  (specified in profIn) and output the result either to memory
6  %     using a chosen interpolation method (method).  %  (by default) or to a netcdf file (if filOut is specified) based on
7  %  %  on pre-defined interpolation method ('polygons' by default)
8  %     profIn (structure) should contain: prof_depth, prof_lon, prof_lat, prof_date  %
9  %     fldIn (structure) should contain: fil, name, long_name, units, tim,  %     profIn (structure) should contain: prof_depth, prof_lon, prof_lat,
10  %         missing_value, FillValue (for nc output), and fld ([] by default).  %         and prof_date (serial date number from datenum.m)
11  %         If fld is not [] then it is assumed that user already loaded  %
12  %         the fields from fldIn.fil.  %     fldIn (structure) should contain: fil, name, and tim (see below
13    %         for detail and examples), and optionally
14    %         - long_name, units, missing_value, FillValue; if filOut~=''
15    %           this information will be used in the netcdf fiel output
16    %         - fld ([] by default); if provided then it is assumed that
17    %           user has already read fldIn.fil and stored it to fldIn.fld
18  %  %
19  %     fldIn.tim can be set to  %     fldIn.tim must be set to one of the following values:
20  %         'const' (for time invariant climatology),  %         'const' (for time invariant climatology),
21  %         'monclim' (for monthly climatology)  %         'monclim' (for monthly climatology)
22  %         'monser' (for monthly time series)  %         'monser' (for monthly time series)
23  %         'monloop' (for cyclic monthly time series)  %         'monloop' (for cyclic monthly time series)
24  %  %
25  %     method can be set to  %     method ('polygons' by default) can be specified as
26  %         'polygons' (linear in space)  %         'polygons' (linear in space)
27  %         'bindata' (nearest neighbor in space)  %         'bindata' (nearest neighbor in space)
28  %  %
29  % Example:  %  Example: (should be revisited)
30  %  grid_load; gcmfaces_global; MITprof_global; addpath matlab/;  %
31  %  profIn=idma_float_plot('4900828');  %     grid_load; gcmfaces_global; MITprof_global; addpath matlab/;
32  %  %  %     profIn=idma_float_plot('4900828');
33  %  fldIn.fil=fullfile(myenv.MITprof_climdir,filesep,'T_OWPv1_M_eccollc_90x50.bin');  %     %
34  %  fldIn.name='prof_Towp';  %     fldIn.fil=fullfile(myenv.MITprof_climdir,filesep,'T_OWPv1_M_eccollc_90x50.bin');
35  %  fldIn.long_name='pot. temp. estimate (OCCA-WOA-PHC combination)';  %     fldIn.name='prof_Towp';
36  %  fldIn.units='degree C';  %     fldIn.tim='monclim';
37  %  fldIn.tim='monclim';  %     %fldIn.long_name='pot. temp. estimate (OCCA-WOA-PHC combination)';
38  %  fldIn.missing_value=-9999.;  %     %fldIn.units='degree C';
39  %  fldIn.FillValue=-9999.;  %     %fldIn.missing_value=-9999.;
40  %  fldIn.fld=[];  %     %fldIn.FillValue=-9999.;
41  %  %  %     %fldIn.fld=[];
42  %  profOut=MITprof_resample(profIn,fldIn);  %     %
43    %     profOut=MITprof_resample(profIn,fldIn);
44    
45    
46  gcmfaces_global;  gcmfaces_global;
# Line 46  if doOut; doOutInit=isempty(dir(filOut)) Line 51  if doOut; doOutInit=isempty(dir(filOut))
51    
52  if isempty(who('method')); method='polygons'; end;  if isempty(who('method')); method='polygons'; end;
53    
54  %0) check for file types  %0) check for input types
55    %   test0=1 <-> binary
56    %   test1=1 <-> nctiles
57    %   test2=1 <-> readily available fldIn.fld
58  test0=isfield(fldIn,'fil');  test0=isfield(fldIn,'fil');
59    %
60  test1=0;  test1=0;
61  if test0;  if test0;
62    test0=~isempty(dir(fldIn.fil));    test0=~isempty(dir(fldIn.fil));
# Line 56  if test0; Line 65  if test0;
65    fil_nctiles=fullfile(PATH,NAME,NAME);    fil_nctiles=fullfile(PATH,NAME,NAME);
66    test1=~isempty(dir(fil_nc));    test1=~isempty(dir(fil_nc));
67  end;  end;
68    %
69    if ~isfield(fldIn,'fld'); fldIn.fld=[]; end;
70  test2=~isempty(fldIn.fld);  test2=~isempty(fldIn.fld);
71    
72  %1) deal with time line  %1) deal with time line
73  if strcmp(fldIn.tim,'monclim');  if strcmp(fldIn.tim,'monclim');
74      tim_fld=[-0.5:12.5]; rec_fld=[12 1:12 1];      tmp1=[1:13]'; tmp2=ones(13,1)*[1991 1 1 0 0 0]; tmp2(:,2)=tmp1;
75        tim_fld=datenum(tmp2)-datenum(1991,1,1);
76        tim_fld=1/2*(tim_fld(1:12)+tim_fld(2:13));
77        tim_fld=[tim_fld(12)-365 tim_fld' tim_fld(1)+365]; rec_fld=[12 1:12 1];
78        %
79      tmp1=datevec(profIn.prof_date);      tmp1=datevec(profIn.prof_date);
80      tmp2=datenum([tmp1(:,1) ones(profIn.np,2) zeros(profIn.np,3)]);      tmp2=datenum([tmp1(:,1) ones(profIn.np,2) zeros(profIn.np,3)]);
81      tim_prof=(profIn.prof_date-tmp2);      tim_prof=(profIn.prof_date-tmp2);
82      tim_prof(tim_prof>365)=365;      tim_prof(tim_prof>365)=365;
83      tim_prof=tim_prof/365*12;%neglecting differences in months length      %
84      if test2; fldIs3d=(length(size(fldIn.fld{1}))==4); end;      if test2; fldIs3d=(length(size(fldIn.fld{1}))==4); end;
85  elseif strcmp(fldIn.tim,'monloop')|strcmp(fldIn.tim,'monser');  elseif strcmp(fldIn.tim,'monloop')|strcmp(fldIn.tim,'monser');
86      if test1;      if test1;
87        eval(['ncload ' fil_nc ' tim']);        eval(['ncload ' fil_nc ' tim']);
88        nt=length(tim);        nt=length(tim);
89      elseif ~test2;      elseif ~test2;
90          warning('Here it is assumed that fldIn.fil contains 3D fields');
91        %note: 2D case still needs to be treated here ... or via fldIn.is3d ?        %note: 2D case still needs to be treated here ... or via fldIn.is3d ?
92        tmp1=dir(fldIn.fil);        tmp1=dir(fldIn.fil);
93        nt=tmp1.bytes/prod(mygrid.ioSize)/length(mygrid.RC)/4;        nt=tmp1.bytes/prod(mygrid.ioSize)/length(mygrid.RC)/4;
# Line 108  depIn=-mygrid.RC; depOut=profIn.prof_dep Line 124  depIn=-mygrid.RC; depOut=profIn.prof_dep
124  profOut=NaN*ones(profIn.np,profIn.nr);  profOut=NaN*ones(profIn.np,profIn.nr);
125    
126  %2) loop over record pairs  %2) loop over record pairs
127  if ~strcmp(method,'bindata'); gcmfaces_bindata; end;  if strcmp(method,'bindata'); gcmfaces_bindata; end;
128  for tt=1:length(rec_fld)-1;  for tt=1:length(rec_fld)-1;
129    ii=find(tim_prof>=tim_fld(tt)&tim_prof<tim_fld(tt+1));    ii=find(tim_prof>=tim_fld(tt)&tim_prof<tim_fld(tt+1));
130    if ~isempty(ii);    if ~isempty(ii);
# Line 150  for tt=1:length(rec_fld)-1; Line 166  for tt=1:length(rec_fld)-1;
166          arr2=arr;          arr2=arr;
167        end;        end;
168        %now linear in time:        %now linear in time:
169        k0=floor(tim_prof(ii));        a0=(tim_prof(ii)-tim_fld(tt))/(tim_fld(tt+1)-tim_fld(tt));
       a0=tim_prof(ii)-k0;  
170        if fldIs3d;        if fldIs3d;
171          a0=a0*ones(1,profIn.nr);          a0=a0*ones(1,profIn.nr);
172          profOut(ii,:)=(1-a0).*arr2(:,:,1)+a0.*arr2(:,:,2);          profOut(ii,:)=(1-a0).*arr2(:,:,1)+a0.*arr2(:,:,2);

Legend:
Removed from v.1.9  
changed lines
  Added in v.1.11

  ViewVC Help
Powered by ViewVC 1.1.22