/[MITgcm]/MITgcm_contrib/gael/matlab_class/gcmfaces_IO/process2interp.m
ViewVC logotype

Annotation of /MITgcm_contrib/gael/matlab_class/gcmfaces_IO/process2interp.m

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


Revision 1.1 - (hide annotations) (download)
Wed Mar 16 15:02:48 2016 UTC (9 years, 3 months ago) by gforget
Branch: MAIN
+ process2UEVN.m (new): computes eastward/northward vector components
  and output result to 'diags_post_tmp/' (the binary results can then
  be converted to nctiles using process2nctiles.m after adding
  new definitions in available_diagnostics.log).
+ process2interp.m (new): interpolates fields in 'nctiles/' that at
  grid cell centers and output result to 'diags_interp_tmp/' (the
  binary results can then be converted to nctiles using process2nctiles.m
  through interp2nctiles.m)
+ interp2nctiles.m (new): creates netcdf files from interpolated
  fields that were created by process2interp. This routine overrides
  mygrid with mygrid_latlon after storing the reference grid in mygrid_orig.

1 gforget 1.1 function [listInterp,listNot]=process2interp(listDo);
2     % [listInterp,listNot]=PROCESS2INTERP(listDo);
3     % 1) computes listInterp and listNot (if listDo is not provided)
4     % 2) interpolates and ouput fields in listDo (= precomputed listInterp)
5     %
6     % Usage: [listInterp,listNot]=process2interp;
7     % process2interp({listInterp{1:3}});
8     % process2interp({listInterp{4:25}});
9     % process2interp({listInterp{26:47}});
10    
11    
12     dirIn=[pwd filesep 'nctiles/'];
13     dirTim=[pwd '/diags/STATE/']; filTim='state_2d_set1';
14     dirOut=[pwd filesep 'diags_interp_tmp/'];
15     filAvailDiag=[pwd filesep 'available_diagnostics.log'];
16     filReadme=[pwd filesep 'README'];
17    
18     %% ======== PART 1 =======
19    
20     if isempty(who('listDo'));
21     listDirs=dir(dirIn);
22     listInterp={};
23     listNot={};
24     for ii=1:length(listDirs);
25     %get units and long name from available_diagnostics.log
26     [avail_diag]=read_avail_diag(filAvailDiag,listDirs(ii).name);
27     if ~isempty(avail_diag);
28     if strcmp(avail_diag.loc_h,'C');
29     ndiags=length(listInterp)+1;
30     listInterp={listInterp{:},listDirs(ii).name};
31     else;
32     listNot={listNot{:},listDirs(ii).name};
33     end;
34     end;
35     end;
36     return;
37     end;
38    
39     %% ======== PART 2 =======
40    
41     lon=[-179.75:0.5:179.75]; lat=[-89.75:0.5:89.75];
42     [lat,lon] = meshgrid(lat,lon);
43     interp=gcmfaces_interp_coeffs(lon(:),lat(:));
44    
45     if ~isdir(dirOut); mkdir(dirOut); end;
46    
47     for ii=1:length(listDo);
48    
49     tic;
50    
51     nameDiag=listDo{ii};
52     myDiag=read_nctiles([dirIn nameDiag '/' nameDiag]);
53     [listTimes]=diags_list_times({dirTim},{filTim});
54    
55     is3D=length(size(myDiag{1}))==4;
56    
57     %loop over months and output result
58     for tt=1:240;
59     filOut=sprintf('%s.%010i',nameDiag,listTimes(tt));
60     if is3D; fldOut=myDiag(:,:,:,tt);
61     else; fldOut=myDiag(:,:,tt);
62     end;
63     %interpolate one field
64     tmp1=convert2vector(fldOut,'new');
65     tmp0=1*~isnan(tmp1);
66     tmp1(isnan(tmp1))=0;
67     siz=[size(lon) size(tmp1,2)];
68     tmp0=interp.SPM*tmp0;
69     tmp1=interp.SPM*tmp1;
70     fldOut=reshape(tmp1./tmp0,siz);
71     sizOut=size(fldOut);
72     %create subdirectory
73     if ~isdir([dirOut nameDiag '/']); mkdir([dirOut nameDiag '/']); end;
74     %write binary field (masked)
75     write2file([dirOut nameDiag '/' filOut '.data'],fldOut,32,0);
76     %create meta file
77     write2meta([dirOut nameDiag '/' filOut '.data'],sizOut,32,{nameDiag});
78     end;
79    
80     fprintf(['DONE: ' nameDiag ' (in ' num2str(toc) 's)\n']);
81     end;
82    
83     %% ======== FUNCTIONS =======
84    
85     function [avail_diag]=read_avail_diag(filAvailDiag,nameDiag);
86    
87     gcmfaces_global;
88    
89     avail_diag=[];
90    
91     fid=fopen(filAvailDiag,'rt');
92     while ~feof(fid);
93     tline = fgetl(fid);
94     tmp1=8-length(nameDiag); tmp1=repmat(' ',[1 tmp1]);
95     tname = ['|' sprintf('%s',nameDiag) tmp1 '|'];
96     if ~isempty(strfind(tline,tname));
97     %e.g. tline=' 235 |SIatmQnt| 1 | |SM U1|W/m^2 |Net atmospheric heat flux, >0 decreases theta';
98     %
99     tmp1=strfind(tline,'|'); tmp1=tmp1(end-1:end);
100     avail_diag.units=strtrim(tline(tmp1(1)+1:tmp1(2)-1));
101     avail_diag.longNameDiag=tline(tmp1(2)+1:end);
102     %
103     tmp1=strfind(tline,'|'); tmp1=tmp1(4:5);
104     pars=tline(tmp1(1)+1:tmp1(2)-1);
105     %
106     if strcmp(pars(2),'M'); avail_diag.loc_h='C';
107     elseif strcmp(pars(2),'U'); avail_diag.loc_h='W';
108     elseif strcmp(pars(2),'V'); avail_diag.loc_h='S';
109     end;
110     %
111     avail_diag.loc_z=pars(9);
112     %
113     if strcmp(pars(10),'1'); avail_diag.nr=1;
114     else; avail_diag.nr=length(mygrid.RC);
115     end;
116     end;
117     end;
118     fclose(fid);
119    

  ViewVC Help
Powered by ViewVC 1.1.22