1 |
function data = DiagLoadMNC(fln,dat,dad,grd,iter,filesuffix); |
2 |
|
3 |
% Function: DiagLoad |
4 |
% Author: Daniel Enderton |
5 |
% |
6 |
% Input Fields: |
7 |
% |
8 |
% Field Type (Brief) Description |
9 |
% ----------------------------------------------------------------------- |
10 |
% fln string Field name |
11 |
% dat string Data type ('Tav', 'Int',...) |
12 |
% dad string Data directory. |
13 |
% grd string Grid data directory. |
14 |
% iter string Iterations for analysis. |
15 |
% filesuffix string Field name suffix ('tave','',...) |
16 |
% |
17 |
% Output Fields: |
18 |
% |
19 |
% Field Type (Brief) Description |
20 |
% ----------------------------------------------------------------------- |
21 |
% data cell array Loaded data. |
22 |
% datatime array Model time of data in months. |
23 |
% |
24 |
% Descripton: |
25 |
% This function loads MNC data. The field to load is defined by 'fln'. |
26 |
% Typically, whatever 'fln' is set to is the fields that is read in, |
27 |
% though the AIM physics parameters in a noteable exception to this. The |
28 |
% data must be all located in the folder specified by 'dad', and this |
29 |
% string must end with a '/', and similarly for the grid data. |
30 |
|
31 |
|
32 |
% Load parameters (here only general diagnostics). |
33 |
DiagGenParam; |
34 |
|
35 |
|
36 |
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% |
37 |
% Read in data % |
38 |
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% |
39 |
|
40 |
% Generally, the data is read in by using the 'rdmds' function (see MITgcm) |
41 |
% with FNAME as [fln,filesuffix], and ITER = iter. There are some |
42 |
% exceptions, such as the AIM physics parameters. Some of the fields then |
43 |
% require some immediate manipulation. Examples are U (instantaneous) and |
44 |
% uVel (time-averaged) which are immediately converted to a lat-lon grid |
45 |
% because the 'U' and 'V' files of the cube-sphere do NOT correspond to the |
46 |
% typical zonal and meridional winds. Some other fields, such as 'KEpri' |
47 |
% require some simple calculations which are immediately done. |
48 |
|
49 |
if isequal(dat,'Tav') |
50 |
if isequal(fln,'phiHyd') |
51 |
ncroot = 'phiHyd.'; |
52 |
filesuffix = ''; |
53 |
else |
54 |
ncroot = 'tave.'; |
55 |
end |
56 |
elseif isequal(dat,'Int') |
57 |
ncroot = 'state.'; |
58 |
else |
59 |
error(['Unrecognized DataType: ',dat]); |
60 |
end |
61 |
|
62 |
if ismember(fln,fields2D) |
63 |
data = zeros([length(iter),hres,faces*hres]); |
64 |
elseif ismember(fln,fields3D) |
65 |
if ismember(fln,{'U','uVel'}) |
66 |
data = zeros([length(iter),vres,hres,faces*hres+1]); |
67 |
elseif ismember(fln,{'V','vVel'}) |
68 |
data = zeros([length(iter),vres,hres+1,faces*hres]); |
69 |
else |
70 |
data = zeros([length(iter),vres,hres,faces*hres]); |
71 |
end |
72 |
else |
73 |
error(['Unrecognized field name: ',fln]); |
74 |
end |
75 |
|
76 |
ncdir = dir(dad); |
77 |
datafound = zeros(size(iter)); |
78 |
for ifile = 1:length(ncdir) |
79 |
ncfile = ncdir(ifile).name; |
80 |
if ~isempty(strfind(ncfile,ncroot)) |
81 |
nc=netcdf([dad,ncfile],'read'); |
82 |
it = nc{'iter'}(:); |
83 |
face = nc.('tile_number')(:); |
84 |
xindex = [hres*(face-1)+1:hres*face]; |
85 |
[mncindex,dataindex] = ismember(it,iter); |
86 |
if sum(mncindex) > 0 |
87 |
dataindex = dataindex(find(dataindex)); |
88 |
mncindex = find(mncindex); |
89 |
datafound(dataindex) = datafound(dataindex) + 1; |
90 |
mncdata = nc{[fln,filesuffix]}; |
91 |
if ismember(fln,fields2D) |
92 |
data(dataindex,:,xindex) = mncdata(mncindex,1:hres,1:hres); |
93 |
elseif ismember(fln,fields3D) |
94 |
if ismember(fln,{'U','uVel'}) |
95 |
data = zeros([length(iter),vres,hres,faces*(hres+1)]); |
96 |
data(dataindex,:,:,xindex) = mncdata(mncindex,:,1:hres,1:hres); |
97 |
elseif ismember(fln,{'V','vVel'}) |
98 |
data(dataindex,:,:,xindex) = mncdata(mncindex,:,:,:); |
99 |
else |
100 |
data(dataindex,:,:,xindex) = mncdata(mncindex,:,1:hres,1:hres); |
101 |
end |
102 |
end |
103 |
end |
104 |
close(nc); |
105 |
end |
106 |
end |
107 |
|
108 |
|
109 |
if ~( isequal(datafound, faces*ones(size(iter))) | ... |
110 |
isequal(datafound,2*faces*ones(size(iter))) ) % Embarassing fix!!! |
111 |
disp(['Iterations desired: ',mat2str(iter)]); |
112 |
disp(['Faces per iteration: ',mat2str(datafound)]); |
113 |
error(['Missing Data! (See output above for details).']); |
114 |
end |
115 |
|
116 |
data = permute(data,[length(size(data)):-1:1]); |