/[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.11 - (hide annotations) (download)
Fri Dec 28 21:43:23 2012 UTC (12 years, 6 months ago) by gforget
Branch: MAIN
Changes since 1.10: +5 -0 lines
- add call to grid_load_native_RAZ, to get RAZ incl. 'extra line and column'

1 gforget 1.9 function []=grid_load(dirGrid,nFaces,fileFormat,memoryLimit);
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.5
12     input_list_check('grid_load',nargin);
13 gforget 1.1
14 gforget 1.9 if isempty(whos('memoryLimit')); memoryLimit=0; end;
15    
16 gforget 1.7 gcmfaces_global; mygrid=[];
17    
18 gforget 1.5 mygrid.dirGrid=dirGrid;
19     mygrid.nFaces=nFaces;
20     mygrid.fileFormat=fileFormat;
21 gforget 1.6 mygrid.gcm2facesFast=false;
22 gforget 1.9 mygrid.memoryLimit=memoryLimit;
23    
24     if mygrid.memoryLimit>0;
25     gcmfaces_msg(['* Warning from grid_load : memoryLimit>0 ' ...
26     'may precludes advanced gmcfaces functions.'],'');
27     end;
28     if mygrid.memoryLimit>1;
29     gcmfaces_msg(['* Warning from grid_load : memoryLimit>1 ' ...
30     'may only allow for basic fields displays.'],'');
31     end;
32    
33     if ~isempty(dir([dirGrid 'grid.specs.mat']));
34     specs=open([dirGrid 'grid.specs.mat']);
35     mygrid.ioSize=specs.ioSize;
36     mygrid.facesSize=specs.facesSize;
37     mygrid.facesExpand=specs.facesExpand;
38     %example for creating grid.specs.mat, to put in dirGrid :
39     %ioSize=[364500 1];
40     %facesSize=[[270 450];[0 0];[270 270];[180 270];[450 270]];
41     %facesExpand=[270 450];
42     %save grid.specs.mat ioSize facesSize facesExpand;
43 gforget 1.10 elseif strcmp(fileFormat,'compact');
44 gforget 1.9 v0=rdmds([dirGrid 'XC']);
45     mygrid.ioSize=size(v0);
46     nn=size(v0,1); pp=size(v0,2)/nn;
47     mm=(pp+4-mygrid.nFaces)/4*nn;
48 gforget 1.10 mygrid.facesSize=[[nn mm];[nn mm];[nn nn];[mm nn];[mm nn];[nn nn]];
49     mygrid.facesExpand=[];
50     elseif strcmp(fileFormat,'cube');
51     v0=rdmds([dirGrid 'XC']);
52     mygrid.ioSize=size(v0);
53     nn=size(v0,2);
54     mygrid.facesSize=[[nn nn];[nn nn];[nn nn];[nn nn];[nn nn];[nn nn]];
55     mygrid.facesExpand=[];
56     elseif strcmp(fileFormat,'straight');
57     v0=rdmds([dirGrid 'XC']);
58     mygrid.ioSize=size(v0);
59     mygrid.facesSize=mygrid.ioSize;
60 gforget 1.9 mygrid.facesExpand=[];
61     end;
62 gforget 1.1
63 gforget 1.5 if ~(nFaces==1&strcmp(fileFormat,'straight'))&...
64     ~(nFaces==6&strcmp(fileFormat,'cube'))&...
65     ~(nFaces==6&strcmp(fileFormat,'compact'))&...
66     ~(nFaces==5&strcmp(fileFormat,'compact'));
67 gforget 1.8 % if myenv.verbose;
68     % fprintf('\nconvert2gcmfaces.m init: there are several supported file conventions. \n');
69     % fprintf(' By default gcmfaces assumes MITgcm type binary formats as follows: \n')
70     % fprintf(' (1 face) straight global format; (4 or 5 faces) compact global format\n');
71     % fprintf(' (6 faces) cube format with one face after the other. \n');
72     % fprintf(' If this is inadequate, you can change the format below.\n\n');
73     % end;
74 gforget 1.5 error('non-tested topology/fileFormat');
75 gforget 1.1 end;
76    
77 gforget 1.6 %the various grid fields:
78 gforget 1.9 if mygrid.memoryLimit==0;
79     list0={'XC','XG','YC','YG','RAC','RAZ','DXC','DXG','DYC','DYG','hFacC','hFacS','hFacW','Depth'};
80     elseif mygrid.memoryLimit==1;
81     list0={'XC','XG','YC','YG','RAC','RAZ','DXC','DXG','DYC','DYG','hFacC','Depth'};
82     elseif mygrid.memoryLimit==2;
83     list0={'XC','YC'};
84     end;
85    
86 gforget 1.1 for iFld=1:length(list0);
87 gforget 1.8 eval(['mygrid.' list0{iFld} '=rdmds2gcmfaces([dirGrid ''' list0{iFld} '*'']);']);
88 gforget 1.1 end;
89    
90 gforget 1.9 %the vertical grid
91     list0={'RC','RF','DRC','DRF'};
92     for iFld=1:length(list0);
93     eval(['mygrid.' list0{iFld} '=squeeze(rdmds([dirGrid ''' list0{iFld} '*'']));']);
94     end;
95    
96     %grid orientation
97     if mygrid.memoryLimit<2;
98     list0={'AngleCS','AngleSN'};
99     test0=~isempty(dir([dirGrid 'AngleCS*']));
100     if test0;
101     for iFld=1:length(list0);
102     eval(['mygrid.' list0{iFld} '=rdmds2gcmfaces([dirGrid ''' list0{iFld} '*'']);']);
103     end;
104     else;
105     warning('\n AngleCS/AngleSN not found; set to 1/0 assuming lat/lon grid.\n');
106     mygrid.AngleCS=mygrid.XC; mygrid.AngleCS(:)=1;
107     mygrid.AngleSN=mygrid.XC; mygrid.AngleSN(:)=0;
108 gforget 1.8 end;
109 gforget 1.4 end;
110    
111 gforget 1.11 %get full RAZ (incl. 'extra line and column') needed for e.g. rotational computations
112     if mygrid.memoryLimit<2;
113     grid_load_native_RAZ;
114     end;
115    
116 gforget 1.9 %grid masks
117     if mygrid.memoryLimit<1;
118     mygrid.hFacCsurf=mygrid.hFacC;
119     for ff=1:mygrid.hFacC.nFaces; mygrid.hFacCsurf{ff}=mygrid.hFacC{ff}(:,:,1); end;
120    
121     mskC=mygrid.hFacC; mskC(mskC==0)=NaN; mskC(mskC>0)=1; mygrid.mskC=mskC;
122     mskW=mygrid.hFacW; mskW(mskW==0)=NaN; mskW(mskW>0)=1; mygrid.mskW=mskW;
123     mskS=mygrid.hFacS; mskS(mskS==0)=NaN; mskS(mskS>0)=1; mygrid.mskS=mskS;
124 gforget 1.1 end;
125    
126 gforget 1.9 %zonal mean and sections needed for transport computations
127     if mygrid.memoryLimit<1;
128     if ~isfield(mygrid,'mygrid.LATS_MASKS');
129     gcmfaces_lines_zonal;
130     mygrid.LATS=[mygrid.LATS_MASKS.lat]';
131     end;
132     if ~isfield(mygrid,'LINES_MASKS');
133     [lonPairs,latPairs,names]=line_greatC_TUV_MASKS_v4;
134     gcmfaces_lines_transp(lonPairs,latPairs,names);
135     end;
136     end;
137 gforget 1.2
138 gforget 1.8 %to allow convert2gcmfaces/doFast:
139 gforget 1.9 if isempty(mygrid.facesExpand)&mygrid.memoryLimit<2;
140     tmp1=convert2gcmfaces(mygrid.XC);
141     tmp1(:)=[1:length(tmp1(:))];
142     nn=length(tmp1(:));
143     mygrid.gcm2faces=convert2gcmfaces(tmp1);
144     mygrid.faces2gcmSize=size(tmp1);
145     mygrid.faces2gcm=convert2gcmfaces(tmp1);
146     for iFace=1:mygrid.nFaces;
147     n=length(mygrid.gcm2faces{iFace}(:));
148     mygrid.faces2gcm{iFace}=mygrid.gcm2faces{iFace}(:);
149     mygrid.gcm2faces{iFace}=sparse([1:n],mygrid.gcm2faces{iFace}(:),ones(1,n),n,nn);
150     end;
151     mygrid.gcm2facesFast=true;
152 gforget 1.6 end;
153    
154 gforget 1.1

  ViewVC Help
Powered by ViewVC 1.1.22