1 |
adcroft |
1.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 |
adcroft |
1.2 |
%The following files are expected to be in the directory: |
9 |
|
|
% data XC.* YC.* XG.* YG.* DXG.* DYG.* RAC.* hFacC.* hFacW.* hFacS.* |
10 |
|
|
% |
11 |
adcroft |
1.1 |
%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 |
adcroft |
1.2 |
'! grep -v ''#'' ' datafile ... |
67 |
|
|
'| awk ''/[dD[eE][lL][rRzZpP]/,/XXX/ {printf "%s",$0}'' ' ... |
68 |
|
|
'| sed ''s/[dD][eE][lL][zZrRpP][ ]*=\([0-9Ee,\. +\-]*\).*/\1/'' ' ... |
69 |
adcroft |
1.1 |
'| 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 |
adcroft |
1.2 |
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 |
adcroft |
1.1 |
|
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 |
adcroft |
1.2 |
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 |