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

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

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


Revision 1.22 - (hide annotations) (download)
Sat Nov 19 15:22:43 2016 UTC (8 years, 7 months ago) by gforget
Branch: MAIN
CVS Tags: checkpoint66a
Changes since 1.21: +10 -10 lines
- grid_load.m: remove call to gcmfaces_lines_zonal and gcmfaces_lines_transp
- calc_MeridionalTransport.m, calc_mermean_T.m, calc_overturn.m, calc_zonmean_T.m,
  calc_zonmedian_T.m, gcmfaces_section.m, diags_display.m, diags_grid_parms.m, figureL.m,
  example_transports_disp.m: call gcmfaces_lines_zonal and / or gcmfaces_lines_transp to
  initialize LATS_MASKS, LONS_MASKS, or LINES_MASKS if needed.

1 gforget 1.13 function []=grid_load(dirGrid,nFaces,fileFormat,memoryLimit,omitNativeGrid);
2 gforget 1.5 %object: load grid information, convert it to gcmfaces format
3     % and encapsulate it in the global mygrid structure.
4     %inputs: dirGrid is the directory where the grid files (gcm output) can be found.
5     % nFaces is the number of faces in this gcm set-up of current interest.
6     % fileFormat is the file format ('straight','cube','compact')
7 gforget 1.9 %optional: memoryLimit is a flag that allows the user to omit secondary
8     % grid fields in case memory/storage become an issue. It
9     % takes 3 values : (0; the default) includes everything
10     % (1) omits all 3D fields but hFacC (2) only loads XC & YC.
11 gforget 1.13 % omitNativeGrid is a flag (0 by default) to bypass (when flag 1)
12     % grid_load_native and grid_load_native_RAZ calls (that can
13     % complement mygrid based upon e.g. tile*.mitgrid files)
14 gforget 1.1
15 gforget 1.9 if isempty(whos('memoryLimit')); memoryLimit=0; end;
16 gforget 1.13 if isempty(whos('omitNativeGrid')); omitNativeGrid=0; end;
17 gforget 1.9
18 gforget 1.7 gcmfaces_global; mygrid=[];
19    
20 gforget 1.15 if nargin==0;%assume that LLC90 grid is used
21     if ~isempty(dir('nctiles_grid'));
22 gforget 1.18 mygrid.dirGrid=['nctiles_grid' filesep];
23 gforget 1.15 mygrid.fileFormat='nctiles';
24     elseif ~isempty(dir('GRID'));
25 gforget 1.18 mygrid.dirGrid=['GRID' filesep];
26 gforget 1.15 mygrid.fileFormat='compact';
27 gforget 1.21 elseif ~isempty(dir(['./XC.meta']));
28     mygrid.dirGrid=['.' filesep];
29     mygrid.fileFormat='compact';
30 gforget 1.15 else;
31 gforget 1.20 fprintf('\n please indicate the grid directory (e.g., ''./'' or ''nctiles_grid/'') \n\n');
32     fprintf(' The ECCO v4 grid can be obtained as follows: \n');
33     fprintf([' wget --recursive ftp://mit.ecco-group.org/ecco_for_las/' ...
34 gforget 1.16 'version_4/release1/nctiles_grid \n']);
35 gforget 1.20 fprintf(' mv mit.ecco-group.org/ecco_for_las/version_4/release1/nctiles_grid . \n\n');
36     dirGrid=input('');
37     mygrid.dirGrid=[dirGrid filesep];
38     if ~isempty(dir([mygrid.dirGrid 'GRID.0001.nc']));
39     mygrid.fileFormat='nctiles';
40     elseif ~isempty(dir([mygrid.dirGrid 'XC.meta']));
41     mygrid.fileFormat='compact';
42     else;
43     error(['could not find grid files in ' mygrid.dirGrid]);
44     end;
45 gforget 1.15 end;
46     mygrid.nFaces=5;
47     mygrid.gcm2facesFast=false;
48     mygrid.memoryLimit=0;
49     omitNativeGrid=isempty(dir([mygrid.dirGrid 'tile001.mitgrid']));
50     else;%user specified settings
51     mygrid.dirGrid=dirGrid;
52     mygrid.nFaces=nFaces;
53     mygrid.fileFormat=fileFormat;
54     mygrid.gcm2facesFast=false;
55     mygrid.memoryLimit=memoryLimit;
56     end;
57 gforget 1.9
58     if mygrid.memoryLimit>0;
59     gcmfaces_msg(['* Warning from grid_load : memoryLimit>0 ' ...
60     'may precludes advanced gmcfaces functions.'],'');
61     end;
62     if mygrid.memoryLimit>1;
63     gcmfaces_msg(['* Warning from grid_load : memoryLimit>1 ' ...
64     'may only allow for basic fields displays.'],'');
65     end;
66    
67 gforget 1.15 if strcmp(mygrid.fileFormat,'nctiles');
68     mygrid.ioSize=[90 1170];
69     mygrid.facesSize=[[90 270];[90 270];[90 90];[270 90];[270 90];[90 90]];
70     mygrid.facesExpand=[];
71     elseif ~isempty(dir([mygrid.dirGrid 'grid.specs.mat']));
72     specs=open([mygrid.dirGrid 'grid.specs.mat']);
73 gforget 1.9 mygrid.ioSize=specs.ioSize;
74     mygrid.facesSize=specs.facesSize;
75     mygrid.facesExpand=specs.facesExpand;
76     %example for creating grid.specs.mat, to put in dirGrid :
77     %ioSize=[364500 1];
78     %facesSize=[[270 450];[0 0];[270 270];[180 270];[450 270]];
79     %facesExpand=[270 450];
80     %save grid.specs.mat ioSize facesSize facesExpand;
81 gforget 1.15 elseif strcmp(mygrid.fileFormat,'compact');
82     v0=rdmds([mygrid.dirGrid 'XC']);
83 gforget 1.9 mygrid.ioSize=size(v0);
84     nn=size(v0,1); pp=size(v0,2)/nn;
85     mm=(pp+4-mygrid.nFaces)/4*nn;
86 gforget 1.10 mygrid.facesSize=[[nn mm];[nn mm];[nn nn];[mm nn];[mm nn];[nn nn]];
87     mygrid.facesExpand=[];
88 gforget 1.15 elseif strcmp(mygrid.fileFormat,'cube');
89     v0=rdmds([mygrid.dirGrid 'XC']);
90 gforget 1.10 mygrid.ioSize=size(v0);
91     nn=size(v0,2);
92     mygrid.facesSize=[[nn nn];[nn nn];[nn nn];[nn nn];[nn nn];[nn nn]];
93     mygrid.facesExpand=[];
94 gforget 1.15 elseif strcmp(mygrid.fileFormat,'straight');
95     v0=rdmds([mygrid.dirGrid 'XC']);
96 gforget 1.10 mygrid.ioSize=size(v0);
97     mygrid.facesSize=mygrid.ioSize;
98 gforget 1.9 mygrid.facesExpand=[];
99     end;
100 gforget 1.15
101 gforget 1.12 mygrid.missVal=NaN;%will be set to 0 once the grid has been loaded.
102 gforget 1.1
103 gforget 1.15 if ~(mygrid.nFaces==1&strcmp(mygrid.fileFormat,'straight'))&...
104     ~(mygrid.nFaces==6&strcmp(mygrid.fileFormat,'cube'))&...
105     ~(mygrid.nFaces==6&strcmp(mygrid.fileFormat,'compact'))&...
106     ~(mygrid.nFaces==5&strcmp(mygrid.fileFormat,'compact'))&...
107     ~(mygrid.nFaces==5&strcmp(mygrid.fileFormat,'nctiles'));
108     error('non-supported grid topology');
109 gforget 1.1 end;
110    
111 gforget 1.17 if strcmp(mygrid.fileFormat,'nctiles');
112     %place holders (needed for read_nctiles)
113     tmp1=NaN*zeros(90,270);
114     tmp2=NaN*zeros(90,90);
115     tmp3=NaN*zeros(270,90);
116     mygrid.XC=gcmfaces({tmp1,tmp1,tmp2,tmp3,tmp3});
117     mygrid.YC=gcmfaces({tmp1,tmp1,tmp2,tmp3,tmp3});
118     mygrid.RC=NaN*zeros(50,1);
119     clear tmp?;
120     end;
121    
122 gforget 1.6 %the various grid fields:
123 gforget 1.9 if mygrid.memoryLimit==0;
124     list0={'XC','XG','YC','YG','RAC','RAZ','DXC','DXG','DYC','DYG','hFacC','hFacS','hFacW','Depth'};
125     elseif mygrid.memoryLimit==1;
126     list0={'XC','XG','YC','YG','RAC','RAZ','DXC','DXG','DYC','DYG','hFacC','Depth'};
127     elseif mygrid.memoryLimit==2;
128     list0={'XC','YC'};
129     end;
130    
131 gforget 1.1 for iFld=1:length(list0);
132 gforget 1.15 if ~strcmp(mygrid.fileFormat,'nctiles');
133     eval(['mygrid.' list0{iFld} '=rdmds2gcmfaces([mygrid.dirGrid ''' list0{iFld} '*'']);']);
134     else;
135     eval(['mygrid.' list0{iFld} '=read_nctiles([mygrid.dirGrid ''GRID''],''' list0{iFld} ''');']);
136     end;
137 gforget 1.1 end;
138    
139 gforget 1.9 %the vertical grid
140     list0={'RC','RF','DRC','DRF'};
141     for iFld=1:length(list0);
142 gforget 1.15 if ~strcmp(mygrid.fileFormat,'nctiles');
143     eval(['mygrid.' list0{iFld} '=squeeze(rdmds([mygrid.dirGrid ''' list0{iFld} '*'']));']);
144     else;
145     eval(['ncload ' mygrid.dirGrid 'GRID.0001.nc ' list0{iFld} ';']);
146     eval(['mygrid.' list0{iFld} '=' list0{iFld} ''';']);
147     if strcmp(list0{iFld},'RF'); mygrid.RF=[mygrid.RF;NaN]; end;
148     end;
149 gforget 1.9 end;
150    
151     %grid orientation
152     if mygrid.memoryLimit<2;
153     list0={'AngleCS','AngleSN'};
154 gforget 1.15 test0=~isempty(dir([mygrid.dirGrid 'AngleCS*']));
155     if strcmp(mygrid.fileFormat,'nctiles');
156     for iFld=1:length(list0);
157     eval(['mygrid.' list0{iFld} '=read_nctiles([mygrid.dirGrid ''GRID''],''' list0{iFld} ''');']);
158     end;
159     elseif test0;
160 gforget 1.9 for iFld=1:length(list0);
161 gforget 1.15 eval(['mygrid.' list0{iFld} '=rdmds2gcmfaces([mygrid.dirGrid ''' list0{iFld} '*'']);']);
162 gforget 1.9 end;
163     else;
164     warning('\n AngleCS/AngleSN not found; set to 1/0 assuming lat/lon grid.\n');
165     mygrid.AngleCS=mygrid.XC; mygrid.AngleCS(:)=1;
166     mygrid.AngleSN=mygrid.XC; mygrid.AngleSN(:)=0;
167 gforget 1.8 end;
168 gforget 1.4 end;
169    
170 gforget 1.21 %if the native grid is found then re-load (to benefit from double precision & avoid blank tile issues)
171     files=dir([mygrid.dirGrid 'grid_cs32*bin']);
172     if isempty(files); files=dir([mygrid.dirGrid 'tile*.mitgrid']); end;
173     %logic above needs fixing since I think blank tiles show 0 rather than NaN on some machines
174     if (length(files)==mygrid.nFaces)&~omitNativeGrid;
175     grid_load_native;
176     %replace NaNs with 0s if needed (blank tile only issue)
177 gforget 1.12 list0={'hFacC','hFacS','hFacW','Depth','AngleCS','AngleSN'};
178     for ii=1:length(list0);
179     eval(['tmp1=mygrid.' list0{ii} ';']);
180     tmp1(isnan(tmp1))=0;
181     eval(['mygrid.' list0{ii} '=tmp1;']);
182     end;
183 gforget 1.21 %reset angles if needed (blank tile only issue)
184 gforget 1.12 tmp1=mygrid.AngleCS.^2+mygrid.AngleSN.^2;
185     tmp1=1*(tmp1>0.999&tmp1<1.001);
186     mygrid.AngleCS(tmp1==0)=1;
187     mygrid.AngleSN(tmp1==0)=0;
188     end;
189    
190 gforget 1.11 %get full RAZ (incl. 'extra line and column') needed for e.g. rotational computations
191 gforget 1.13 if mygrid.memoryLimit<2&~omitNativeGrid;
192 gforget 1.11 grid_load_native_RAZ;
193     end;
194    
195 gforget 1.9 %grid masks
196     if mygrid.memoryLimit<1;
197     mygrid.hFacCsurf=mygrid.hFacC;
198     for ff=1:mygrid.hFacC.nFaces; mygrid.hFacCsurf{ff}=mygrid.hFacC{ff}(:,:,1); end;
199    
200     mskC=mygrid.hFacC; mskC(mskC==0)=NaN; mskC(mskC>0)=1; mygrid.mskC=mskC;
201     mskW=mygrid.hFacW; mskW(mskW==0)=NaN; mskW(mskW>0)=1; mygrid.mskW=mskW;
202     mskS=mygrid.hFacS; mskS(mskS==0)=NaN; mskS(mskS>0)=1; mygrid.mskS=mskS;
203 gforget 1.1 end;
204    
205 gforget 1.9 %zonal mean and sections needed for transport computations
206 gforget 1.22 % if mygrid.memoryLimit<1;
207     % if ~isfield(mygrid,'mygrid.LATS_MASKS');
208     % gcmfaces_lines_zonal;
209     % mygrid.LATS=[mygrid.LATS_MASKS.lat]';
210     % end;
211     % if ~isfield(mygrid,'LINES_MASKS');
212     % [lonPairs,latPairs,names]=gcmfaces_lines_pairs;
213     % gcmfaces_lines_transp(lonPairs,latPairs,names);
214     % end;
215     % end;
216 gforget 1.2
217 gforget 1.8 %to allow convert2gcmfaces/doFast:
218 gforget 1.9 if isempty(mygrid.facesExpand)&mygrid.memoryLimit<2;
219     tmp1=convert2gcmfaces(mygrid.XC);
220     tmp1(:)=[1:length(tmp1(:))];
221     nn=length(tmp1(:));
222     mygrid.gcm2faces=convert2gcmfaces(tmp1);
223     mygrid.faces2gcmSize=size(tmp1);
224     mygrid.faces2gcm=convert2gcmfaces(tmp1);
225     for iFace=1:mygrid.nFaces;
226     n=length(mygrid.gcm2faces{iFace}(:));
227     mygrid.faces2gcm{iFace}=mygrid.gcm2faces{iFace}(:);
228     mygrid.gcm2faces{iFace}=sparse([1:n],mygrid.gcm2faces{iFace}(:),ones(1,n),n,nn);
229     end;
230     mygrid.gcm2facesFast=true;
231 gforget 1.6 end;
232    
233 gforget 1.12 %reset missVal parameter to 0.
234     %Note : this is only used by convert2widefaces, for runs with cropped grids.
235     %Note : 0 should not be used as a fill for the grid itself (NaN was used).
236     mygrid.missVal=0;
237 gforget 1.1
238 gforget 1.18 mygrid.dirGrid=[pwd filesep mygrid.dirGrid];
239    

  ViewVC Help
Powered by ViewVC 1.1.22