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

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

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


Revision 1.5 - (hide annotations) (download)
Tue Jul 8 21:09:03 2014 UTC (11 years ago) by gforget
Branch: MAIN
Changes since 1.4: +50 -29 lines
- grid_load.m : added input parameter
  %           omitNativeGrid is a flag (0 by default) to bypass (when flag 1)
  %               grid_load_native and grid_load_native_RAZ calls (that can
  %               complement mygrid based upon e.g. tile*.mitgrid files)
- read_nctiles.m : speed up (avoid recomputing grid information)

1 gforget 1.3 function [fld]=read_nctiles(fileName,fldName,varargin);
2 gforget 1.1 %usage: fld=read_nctiles(fileName); reads full field using fileName as field name
3     %usage: fld=read_nctiles(fileName,fldName); reads full field (all depths, all times)
4     %usage: fld=read_nctiles(fileName,fldName,tt); reads 3D or 2D field, at time index tt (all depths)
5     %usage: fld=read_nctiles(fileName,fldName,tt,kk); reads 3D field, at depth index kk, at time index tt
6    
7     gcmfaces_global;
8    
9     if nargin==1;
10     tmp1=['/' fileName];
11     tmp2=strfind(tmp1,'/');
12     fldName=tmp1(tmp2(end)+1:end);
13     end;
14     if nargin>2; tt=varargin{1}; else; tt=[]; end;
15     if nargin>3; kk=varargin{2}; else; kk=[]; end;
16    
17 gforget 1.5 %A) determine map of tile indices (if not already done)
18    
19     global nctiles;
20    
21     test1=isempty(nctiles);
22     test2=0;
23     if ~test1;
24     tmp1=dir([fileName '*']);
25     test2=(length(tmp1)~=length(nctiles.no));
26     end;
27    
28     if test1|test2;
29     %build map of tile indices
30     if (length(dir([fileName '*']))==mygrid.nFaces);
31     nctiles.map=NaN*mygrid.XC;
32     for ff=1:mygrid.nFaces; nctiles.map{ff}(:)=ff; end;
33     else;
34     fileIn=sprintf('%s.%04d.nc',fileName,1);
35     nc=netcdf.open(fileIn,0);
36     vv = netcdf.inqVarID(nc,fldName);
37     [varname,xtype,dimids,natts]=netcdf.inqVar(nc,vv);
38     tileSize=zeros(1,2);
39     [tmp,tileSize(1)] = netcdf.inqDim(nc,dimids(1));
40     [tmp,tileSize(2)] = netcdf.inqDim(nc,dimids(2));
41     netcdf.close(nc);
42     nctiles.map=gcmfaces_loc_tile(tileSize(1),tileSize(2));
43     end;
44     %determine tile list
45     nctiles.no=unique(convert2vector(nctiles.map));
46     nctiles.no=nctiles.no(~isnan(nctiles.no));
47     %determine location of each tile
48     for ff=1:length(nctiles.no);
49     for gg=1:mygrid.nFaces;
50     [tmpi,tmpj]=find(nctiles.map{gg}==ff);
51     if ~isempty(tmpi);
52     nctiles.f{ff}=gg;
53     nctiles.i{ff}=[min(tmpi(:)):max(tmpi(:))];
54     nctiles.j{ff}=[min(tmpj(:)):max(tmpj(:))];
55     end;
56     end;
57     end;
58 gforget 1.2 end;
59 gforget 1.1
60 gforget 1.5 %B) the file read operation itself
61 gforget 1.1
62 gforget 1.5 for ff=1:length(nctiles.no);
63 gforget 1.2
64 gforget 1.5 %read one tile
65 gforget 1.2 fileIn=sprintf('%s.%04d.nc',fileName,ff);
66 gforget 1.1 nc=netcdf.open(fileIn,0);
67 gforget 1.5
68 gforget 1.1 vv = netcdf.inqVarID(nc,fldName);
69     [varname,xtype,dimids,natts]=netcdf.inqVar(nc,vv);
70    
71 gforget 1.2 [dimname,siz(1)] = netcdf.inqDim(nc,dimids(1));
72     [dimname,siz(2)] = netcdf.inqDim(nc,dimids(2));
73     siz=[siz length(mygrid.RC)];
74 gforget 1.1
75     if ~isempty(tt);
76 gforget 1.4 t0=tt(1)-1;
77     nt=tt(end)-tt(1)+1;
78 gforget 1.1 if length(dimids)==3;
79 gforget 1.4 start=[0 0 t0];
80     count=[siz(1) siz(2) nt];
81 gforget 1.1 elseif isempty(kk);
82 gforget 1.4 start=[0 0 0 t0];
83     count=[siz(1) siz(2) siz(3) nt];
84 gforget 1.1 else;
85 gforget 1.4 start=[0 0 kk-1 t0];
86     count=[siz(1) siz(2) 1 nt];
87 gforget 1.1 end;
88 gforget 1.2 fldTile=netcdf.getVar(nc,vv,start,count);
89 gforget 1.1 else;
90 gforget 1.2 fldTile=netcdf.getVar(nc,vv);
91     end;
92    
93 gforget 1.5 netcdf.close(nc);
94    
95     %initialize fld (full gcmfaces object)
96 gforget 1.2 if ff==1;
97     siz=[1 1 size(fldTile,3) size(fldTile,4)];
98     fld=NaN*repmat(mygrid.XC,siz);
99     end;
100    
101 gforget 1.5 %place tile in fld
102     fld{nctiles.f{ff}}(nctiles.i{ff},nctiles.j{ff},:,:)=fldTile;
103 gforget 1.1
104     end;%for ff=1:mygrid.nFaces;
105    
106    

  ViewVC Help
Powered by ViewVC 1.1.22