1 |
function [GRID] = loadgrid(varargin) |
2 |
%loadgrid() |
3 |
%loadgrid(DIRECTORY) |
4 |
% |
5 |
%Reads MITgcm output files and input "data" file to create a GRID structure |
6 |
%If DIRECTORY is not specified the current working directory is used. |
7 |
% |
8 |
%The following files are expected to be in the directory: |
9 |
% data XC.* YC.* XG.* YG.* DXG.* DYG.* RAC.* hFacC.* hFacW.* hFacS.* |
10 |
% |
11 |
%e.g. |
12 |
%>> GRID=loadgrid |
13 |
%GRID = |
14 |
% drf: [50 70 100 140 190 240 290 340 390 440 490 540 590 640 690] |
15 |
% drc: [25 60 85 120 165 215 265 315 365 415 465 515 565 615 665] |
16 |
% rf: [1x16 double] |
17 |
% rc: [1x15 double] |
18 |
% xc: [90x40 double] |
19 |
% yc: [90x40 double] |
20 |
% xg: [90x40 double] |
21 |
% yg: [90x40 double] |
22 |
% dxg: [90x40 double] |
23 |
% dyg: [90x40 double] |
24 |
% rac: [90x40 double] |
25 |
% hfacc: [90x40x15 double] |
26 |
% hfacw: [90x40x15 double] |
27 |
% hfacs: [90x40x15 double] |
28 |
% mskc: [90x40x15 double] |
29 |
% mAtl: [90x40 double] |
30 |
% matl: [90x40 double] |
31 |
% mPac: [90x40 double] |
32 |
% mpac: [90x40 double] |
33 |
% msoc: [90x40 double] |
34 |
%>> GRID2=loadgrid('/scratch/john/run2/'); |
35 |
% |
36 |
%Most elements of the structure are named to corresponding to MITgcm |
37 |
%variables. |
38 |
% |
39 |
%Lower case regional masks (matl, mpac and msoc) denote Atlantic and Pacific |
40 |
%Southern Ocean regions only and are exclusive (i.e. matl does not extend |
41 |
%into the Southern Ocean). |
42 |
%Upper case regional masks (mAtl and mPac) denotes sectors and do include the |
43 |
%Southern Ocean. |
44 |
% sum(sum( GRID.mskc(:,:,1) )) = sum( GRID.mAtl(:) + GRID.mPac(:) ) |
45 |
% = sum( GRID.matl(:) + GRID.mpac(:) + GRID.msoc(:) ) |
46 |
% |
47 |
%Written by adcroft@mit.edu, 2001 |
48 |
%$Header: |
49 |
|
50 |
if nargin==0 |
51 |
Dir='./'; |
52 |
elseif nargin==1 |
53 |
Dir=[varargin{1} '/']; |
54 |
else |
55 |
error('I don''t know what to do with the second argument'); |
56 |
end |
57 |
|
58 |
% Extract drF from "data" file |
59 |
datafile=[Dir 'data']; |
60 |
fid=fopen(datafile,'r'); |
61 |
if fid==-1 |
62 |
error(['Could not open file:' datafile ' for reading']); |
63 |
end |
64 |
fclose(fid); |
65 |
drf=evalc([ ... |
66 |
'! grep -v ''#'' ' datafile ... |
67 |
'| awk ''/[dD[eE][lL][rRzZpP]/,/XXX/ {printf "%s",$0}'' ' ... |
68 |
'| sed ''s/[dD][eE][lL][zZrRpP][ ]*=\([0-9Ee,\. +\-]*\).*/\1/'' ' ... |
69 |
'| sed ''s/[ ]//g'' ' ... |
70 |
'| sed ''s/,/ /g'' ' ... |
71 |
';' |
72 |
]); |
73 |
eval(['drf=[' drf '];']) |
74 |
drf=drf; |
75 |
drc=(drf([1 1:end-1])+drf)/2; drc(1)=drc(1)/2; |
76 |
|
77 |
%% % Extract drC from output file |
78 |
%% outputfile='output.txt'; |
79 |
%% drc=evalc(['!head -1000 ' outputfile ... |
80 |
%% ' | awk ''/drC/,/;/ {print $3}'' -' ... |
81 |
%% ' | egrep "e|E"' ... |
82 |
%% ' | sed ''s/,//'' ']); |
83 |
%% eval(['drc=[' drc '];']) |
84 |
%% drc=drc'; |
85 |
%% % Extract drF from output file |
86 |
%% drf=evalc('!head -1000 output.txt | awk "/drF/,/;/ {print \$3}" - | egrep "e|E" | sed s/,// '); |
87 |
%% eval(['drf=[' drf '];']) |
88 |
%% drf=drf'; |
89 |
|
90 |
rf=-cumsum([0 drf]); |
91 |
rc=-cumsum([drc]); |
92 |
|
93 |
GRID.drf=drf; |
94 |
GRID.drc=drc; |
95 |
GRID.rf=rf; |
96 |
GRID.rc=rc; |
97 |
|
98 |
msg1='Error: Grid data written by the model is needed. The following files are needed: XC.* YC.* XG.* YG.* DXG.* DYG.* RAC.* hFacC.* hFacW.* hFacS.*'; |
99 |
msg2='Error: The appropriate model output files are not present. If the following files were not written by the model check that you have version 1.11 or greater of ini_grid.F: DXG.* DYG.* RAC.*'; |
100 |
|
101 |
xc=locrdmds([Dir 'XC'],msg1); GRID.xc=xc; |
102 |
yc=locrdmds([Dir 'YC'],msg1); GRID.yc=yc; |
103 |
xg=locrdmds([Dir 'XG'],msg1); GRID.xg=xg; |
104 |
yg=locrdmds([Dir 'YG'],msg1); GRID.yg=yg; |
105 |
dxg=locrdmds([Dir 'DXG'],msg2); GRID.dxg=dxg; |
106 |
dyg=locrdmds([Dir 'DYG'],msg2); GRID.dyg=dyg; |
107 |
rac=locrdmds([Dir 'RAC'],msg2); GRID.rac=rac; |
108 |
hfacc=locrdmds([Dir 'hFacC'],msg1); GRID.hfacc=hfacc; |
109 |
hfacw=locrdmds([Dir 'hFacW'],msg1); GRID.hfacw=hfacw; |
110 |
hfacs=locrdmds([Dir 'hFacS'],msg1); GRID.hfacs=hfacs; |
111 |
|
112 |
mskc=hfacc; mskc(find(hfacc~=0))=1; GRID.mskc=mskc; |
113 |
|
114 |
mskc=mskc(:,:,1); |
115 |
j=[]; |
116 |
%j=[j find( yc>-32.5 & xc>290 )']; |
117 |
%j=[j find( yc>-32.5 & xc<25 )']; |
118 |
j=[j find( xc>290 )']; |
119 |
j=[j find( xc<25 & xc>290-360 )']; |
120 |
j=[j find( yc>9 & yc<60 & (yc-9)+(xc-276)>0 )']; |
121 |
j=[j find( yc>9 & yc<60 & (yc-9)+(xc-276+360)>0 & xc<30 )']; |
122 |
j=[j find( yc>17 & yc<60 & xc>261 )']; |
123 |
j=[j find( yc>50 & (yc-70)-(xc-270)<0 )']; |
124 |
j=[j find( yc>31 & xc<38 & xc>-90 )']; |
125 |
j=[j find( yc>31 & xc>360-90 )']; |
126 |
j=[j find( yc>64 )']; |
127 |
matl=0*mskc; |
128 |
matl(j)=1; |
129 |
matl=matl.*mskc; |
130 |
GRID.mAtl=matl; |
131 |
|
132 |
j=[]; |
133 |
j=[j find( yc>-32.5 )']; |
134 |
matl=0*mskc; |
135 |
matl(j)=1; |
136 |
matl=GRID.mAtl.*matl.*mskc; |
137 |
GRID.matl=matl; |
138 |
|
139 |
mpac=(1-matl).*mskc; |
140 |
j=[]; |
141 |
j=[j find( yc<65 )']; |
142 |
mpac=0*mskc; |
143 |
mpac(j)=1; |
144 |
mpac=mpac.*mskc.*(1-GRID.mAtl); |
145 |
GRID.mPac=mpac; |
146 |
|
147 |
j=[]; |
148 |
j=[j find( yc>-32.5 )']; |
149 |
mpac=0*mskc; |
150 |
mpac(j)=1; |
151 |
mpac=GRID.mPac.*mpac.*mskc; |
152 |
GRID.mpac=mpac; |
153 |
|
154 |
msoc=(1-matl).*(1-mpac).*mskc; |
155 |
j=[]; |
156 |
j=[j find( yc<0 )']; |
157 |
GRID.msoc=msoc.*mskc.*(1-mpac).*(1-matl); |
158 |
|
159 |
function [A] = locrdmds(fname,errmsg) |
160 |
[fid,msg]=fopen([fname '.001.001.meta'],'r'); |
161 |
if fid == -1 |
162 |
A=[]; |
163 |
disp(errmsg); |
164 |
error(['The error occured while trying to open ' fname '.001.001.meta']) |
165 |
else |
166 |
fclose(fid); |
167 |
A=rdmds(fname); |
168 |
end |