1 |
function grid = mit_loadgrid(varargin); |
2 |
% function grid = mit_loadgrid(dname); |
3 |
% load the geometry of an arbitrary run with the mitgcm |
4 |
|
5 |
% Aug 15, 2002: fixed a bug (?): yc' -> yc |
6 |
% |
7 |
% $Header: $ |
8 |
% $Name: $ |
9 |
|
10 |
if nargin == 0 |
11 |
dname = '.'; |
12 |
else |
13 |
dname = varargin{1}; |
14 |
end |
15 |
% tracer time step |
16 |
deltattracer = mit_getparm(fullfile(dname,'data'),'deltaTtracer'); |
17 |
if isempty(deltattracer) |
18 |
error('deltaTtracer is empty') |
19 |
end |
20 |
gravity = mit_getparm(fullfile(dname,'data'),'gravity'); |
21 |
if isempty(gravity); |
22 |
disp('assuming gravity = 9.81') |
23 |
gravity = 9.81; |
24 |
end |
25 |
rhoNil = mit_getparm(fullfile(dname,'data'),'rhonil'); |
26 |
if isempty(rhoNil); |
27 |
rhoNil = mit_getparm(fullfile(dname,'data'),'rhoNil'); |
28 |
end |
29 |
if isempty(rhoNil); |
30 |
rhoNil = mit_getparm(fullfile(dname,'data'),'rhoConst'); |
31 |
end |
32 |
if isempty(rhoNil); |
33 |
rhoNil = mit_getparm(fullfile(dname,'data'),'rhoconst'); |
34 |
end |
35 |
if isempty(rhoNil); |
36 |
disp('assuming rhoNil = 1035') |
37 |
rhoNil = 1035; |
38 |
end |
39 |
% determine vertical coordinates |
40 |
br = mit_getparm(fullfile(dname,'data'),'buoyancyRelation'); |
41 |
if isempty(br) |
42 |
disp('assuming buoyancyRelation = OCEANIC') |
43 |
br = 'OCEANIC'; |
44 |
end |
45 |
if ~strcmpi(br,'OCEANIC'); |
46 |
pfac = 1/rhoNil/gravity; |
47 |
else |
48 |
pfac = 1; |
49 |
end |
50 |
% create masks for plotting |
51 |
hfac=rdmds(fullfile(dname,'hFacC')); hfacc=change(hfac,'==',0,NaN); |
52 |
hfac=rdmds(fullfile(dname,'hFacW')); hfacw=change(hfac,'==',0,NaN); |
53 |
hfac=rdmds(fullfile(dname,'hFacS')); hfacs=change(hfac,'==',0,NaN); |
54 |
clear hfac; |
55 |
cmask=change(hfacc,'>',0,1); |
56 |
umask=change(hfacw,'>',0,1); |
57 |
vmask=change(hfacs,'>',0,1); |
58 |
|
59 |
[nx ny nz] = size(cmask); |
60 |
|
61 |
% find the index of the deepest wet tracer-cell |
62 |
klowc = sum(change(cmask,'==',NaN,0),3); |
63 |
|
64 |
% create grid parameters |
65 |
dz = mit_getparm(fullfile(dname,'data'),'delR'); |
66 |
if isempty(dz); |
67 |
disp('trying delZ') |
68 |
dz = mit_getparm(fullfile(dname,'data'),'delZ'); |
69 |
if isempty(dz) |
70 |
error('vertical grid cannot be established') |
71 |
end |
72 |
end |
73 |
if size(dz,1) == 1; |
74 |
dz = dz'; |
75 |
end |
76 |
if length(dz) ~= nz |
77 |
error('dz could not be retrieved correctly from the data file') |
78 |
end |
79 |
dz = dz*pfac; |
80 |
|
81 |
if ~strcmp(br,'OCEANIC'); |
82 |
dz = dz(end:-1:1); |
83 |
end |
84 |
zgpsi = [0;cumsum(dz)]; |
85 |
zc = .5*(zgpsi(1:nz)+zgpsi(2:nz+1)); |
86 |
zg=zgpsi(1:nz); |
87 |
|
88 |
xc = rdmds(fullfile(dname,'XC')); |
89 |
yc = rdmds(fullfile(dname,'YC')); |
90 |
xg = rdmds(fullfile(dname,'XG')); |
91 |
yg = rdmds(fullfile(dname,'YG')); |
92 |
dxc = rdmds(fullfile(dname,'DXC')); |
93 |
dyc = rdmds(fullfile(dname,'DYC')); |
94 |
dxg = rdmds(fullfile(dname,'DXG')); |
95 |
dyg = rdmds(fullfile(dname,'DYG')); |
96 |
|
97 |
lonc = xc(:,1); |
98 |
latc = yc(1,:)'; |
99 |
long = xg(:,1); |
100 |
latg = yg(1,:)'; |
101 |
|
102 |
% depth |
103 |
depth = rdmds(fullfile(dname,'Depth'))*pfac; |
104 |
|
105 |
% current directory |
106 |
if strcmp(dname,'.') | strcmp(dname,'./') |
107 |
[pathstr,dirname,ext]=fileparts(pwd); |
108 |
dirname = [dirname ext]; |
109 |
else |
110 |
[pathstr,dirname,ext]=fileparts(fullfile(pwd,dname)); |
111 |
dirname = [dirname ext]; |
112 |
end |
113 |
|
114 |
ius = findstr(dirname,'_'); |
115 |
if ~isempty(ius) |
116 |
for k=1:length(ius) |
117 |
dirname = [dirname(1:ius(k)-1) '\' dirname(ius(k):end)]; |
118 |
ius = ius+1; |
119 |
end |
120 |
end |
121 |
% |
122 |
if ~strcmp(br,'OCEANIC'); |
123 |
hfacc = hfacc(:,:,end:-1:1); |
124 |
hfacs = hfacs(:,:,end:-1:1); |
125 |
hfacw = hfacw(:,:,end:-1:1); |
126 |
cmask = cmask(:,:,end:-1:1); |
127 |
umask = umask(:,:,end:-1:1); |
128 |
vmask = vmask(:,:,end:-1:1); |
129 |
klowc = nz - klowc + 1; |
130 |
klowc(find(klowc==nz+1)) = 0; |
131 |
end |
132 |
|
133 |
% area and volume of grid cells has to be done after flipping the masks |
134 |
% vertically |
135 |
rac = rdmds(fullfile(dname,'RAC')).*cmask(:,:,1); |
136 |
ras = rdmds(fullfile(dname,'RAS')).*vmask(:,:,1); |
137 |
raw = rdmds(fullfile(dname,'RAW')).*umask(:,:,1); |
138 |
rac3d = repmat(rac,[1 1 nz]).*hfacc; |
139 |
volc = rac3d.*permute(repmat(dz,[1 nx ny]),[2 3 1]); |
140 |
% create the structure |
141 |
% Aug 15, 2002: fixed a bug (?): yc' -> yc |
142 |
grid = struct('dname',dirname, ... |
143 |
'deltattracer',deltattracer, ... |
144 |
'gravity',gravity','rhonil',rhoNil, ... |
145 |
'buoyancy',br,'pfac',pfac, ... |
146 |
'nx',nx,'ny',ny,'nz',nz, ... |
147 |
'xc',xc,'yc',yc,'xg',xg,'yg',yg, ... |
148 |
'lonc',lonc,'latc',latc,'long',long,'latg',latg, ... |
149 |
'dxc',dxc,'dyc',dyc,'dxg',dxg,'dyg',dyg, ... |
150 |
'rac',rac,'ras',ras,'raw',raw, ... |
151 |
'dz',dz,'zc',zc,'zg',zg,'zgpsi',zgpsi, ... |
152 |
'depth',depth,'hfacc',hfacc,'hfacs',hfacs,'hfacw',hfacw, ... |
153 |
'cmask',cmask,'umask',umask,'vmask',vmask,'volc',volc, ... |
154 |
'klowc',klowc); |
155 |
|
156 |
return |