1 |
% Script to extract and write in netCDF format a subdomain |
2 |
% from the 1.8 global run |
3 |
% |
4 |
clear |
5 |
global sla |
6 |
pv_checkpath |
7 |
|
8 |
% Load grid |
9 |
GRID_125 |
10 |
|
11 |
% Load list of all outputs |
12 |
otab = latlon8grid_outputs_table; |
13 |
|
14 |
% Setup standard grid variables |
15 |
lon_c = lon125; |
16 |
lon_u = [lon125(1)-360+lon125(end) (lon125(2:end)+lon125(1:end-1))/2]; |
17 |
lat_c = lat125; |
18 |
lat_v = [lat125(1)-(lat125(2)-lat125(1))/2 (lat125(1:end-1)+lat125(2:end))/2]; |
19 |
z_c = (cumsum(thk125)-thk125/2); |
20 |
z_w = [0 cumsum(thk125(1:end-1))]; |
21 |
|
22 |
|
23 |
% Set subrange - Longitude given as degrees east |
24 |
subdomain = 4; |
25 |
|
26 |
switch subdomain |
27 |
case 1 |
28 |
sub_name = 'western_north_atlantic'; |
29 |
lonmin = lon125(2209)-180; |
30 |
lonmax = lon125(2497-1)-180; |
31 |
latmin = lat125(1225); |
32 |
latmax = lat125(1497-1); |
33 |
depmin = min(z_w); |
34 |
depmax = z_c(29); |
35 |
m_proj('mercator','long',[270 365],'lat',[0 60]); |
36 |
%clf;hold on;m_coast;m_grid; |
37 |
LIMITS = [lonmin+180 lonmax+180 latmin latmax depmin depmax] |
38 |
%m_line(LIMITS([1 2 2 1 1]),LIMITS([3 3 4 4 3]),'color','r','linewidth',2); |
39 |
%title(sub_name); |
40 |
|
41 |
case 3 |
42 |
sub_name = 'north_atlantic'; |
43 |
lonmin = lon125(2209)-180; |
44 |
lonmax = lon125(2881-1)-180; |
45 |
latmin = lat125(1157); |
46 |
latmax = lat125(1565-1); |
47 |
depmin = min(z_w); |
48 |
depmax = z_c(29); |
49 |
m_proj('mercator','long',[270 365],'lat',[0 60]); |
50 |
clf;hold on;m_coast;m_grid; |
51 |
LIMITS = [lonmin+180 lonmax+180 latmin latmax depmin depmax] |
52 |
m_line(LIMITS([1 2 2 1 1]),LIMITS([3 3 4 4 3]),'color','k','linewidth',2); |
53 |
title(sub_name); |
54 |
|
55 |
case 4 |
56 |
sub_name = 'global'; |
57 |
lonmin = lon125(1)-180; |
58 |
lonmax = lon125(2881-1)-180; |
59 |
latmin = lat125(1); |
60 |
latmax = lat125(2177-1); |
61 |
depmin = min(z_w); |
62 |
depmax = z_c(29); depmax = z_w(2); |
63 |
m_proj('mercator','long',[0 360],'lat',[-90 90]); |
64 |
clf;hold on;m_coast;m_grid; |
65 |
LIMITS = [lonmin+180 lonmax+180 latmin latmax depmin depmax] |
66 |
m_line(LIMITS([1 2 2 1 1]),LIMITS([3 3 4 4 3]),'color','k','linewidth',2); |
67 |
title(sub_name); |
68 |
|
69 |
|
70 |
case 10 |
71 |
sub_name = 'KE'; |
72 |
lonmin = lon125(961)-180; |
73 |
lonmax = lon125(1601-1)-180; |
74 |
latmin = lat125(1140); |
75 |
latmax = lat125(1523-1); |
76 |
depmin = min(z_w); |
77 |
depmax = z_c(25); |
78 |
m_proj('mercator','long',[0 360],'lat',[-90 90]); |
79 |
%clf;hold on;m_coast;m_grid; |
80 |
LIMITS = [lonmin+180 lonmax+180 latmin latmax depmin depmax] |
81 |
%m_line(LIMITS([1 2 2 1 1]),LIMITS([3 3 4 4 3]),'color','k','linewidth',2); |
82 |
%title(sub_name); |
83 |
|
84 |
|
85 |
end |
86 |
|
87 |
%refresh |
88 |
|
89 |
% Path of the directory to find input binary files: |
90 |
pathi = 'ecco2_cycle1_bin/'; |
91 |
|
92 |
% Path where the netcdf outputs will be stored: |
93 |
patho = './ecco2_cycle1_netcdf/monthly/'; |
94 |
%patho = './ecco2_cycle1_netcdf/six_hourly/'; |
95 |
|
96 |
% Variables to analyse (index into otab): |
97 |
wvar = []; |
98 |
% 3D fields: |
99 |
wvar = [wvar 34]; % THETA |
100 |
wvar = [wvar 35]; % THETASQ |
101 |
%wvar = [wvar 33]; % SALTanom |
102 |
%wvar = [wvar 47]; % VVEL |
103 |
%wvar = [wvar 31]; % RHOAnoma |
104 |
|
105 |
|
106 |
|
107 |
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% |
108 |
for i = 1 : length(wvar) |
109 |
ifield = wvar(i); |
110 |
fil = otab{ifield,1}; |
111 |
l = dir(strcat(pathi,fil,sla)); |
112 |
if ifield == 33, |
113 |
l = dir(strcat(pathi,'SALT',sla)); |
114 |
end |
115 |
if ifield == 35, |
116 |
l = dir(strcat(pathi,'THETA',sla)); |
117 |
end |
118 |
if ifield == 31, |
119 |
l = dir(strcat(pathi,'RHO',sla)); |
120 |
end |
121 |
it = 0; |
122 |
clear ll |
123 |
for il = 1 : size(l,1) |
124 |
if ~l(il).isdir & findstr(l(il).name,strcat(fil,'.')) % is'it the file type we want ? |
125 |
it = it + 1; |
126 |
ll(it).name = l(il).name; |
127 |
end %if |
128 |
end %for il |
129 |
|
130 |
if it ~= 0 % if we found any files to compute: |
131 |
|
132 |
% Create the timetable: |
133 |
for il = 1 : size(ll,2) |
134 |
filinprog = ll(il).name; |
135 |
stepnum=str2num(filinprog(findstr(filinprog,fil)+length(fil)+1:length(filinprog)- ... |
136 |
length('.data'))); |
137 |
TIME(il,:) = dtecco2(stepnum,0); |
138 |
end |
139 |
|
140 |
% Translate files: |
141 |
for il = 1 : size(ll,2) |
142 |
|
143 |
filinprog = ll(il).name; |
144 |
stepnum=str2num(filinprog(findstr(filinprog,fil)+length(fil)+1:length(filinprog)- ... |
145 |
length('.data'))); |
146 |
ID = datenum(1992,1,1)+stepnum*300/60/60/24; |
147 |
dte = datestr(ID,'yyyymmddHHMM'); |
148 |
disp(strcat(fil,'->',datestr(ID,'yyyy/mm/dd/HH:MM'),'== Recorded in ==>',TIME(il,:))); |
149 |
dirout = strcat(patho,sla,TIME(il,:)); |
150 |
|
151 |
if 1 % Want to record ? |
152 |
if ~exist(dirout,'dir') |
153 |
mkdir(dirout); |
154 |
end |
155 |
pathname = strcat(pathi,fil,sla); |
156 |
if ifield == 33, |
157 |
pathname = strcat(pathi,'SALT',sla); |
158 |
end |
159 |
if ifield == 35, |
160 |
pathname = strcat(pathi,'THETA',sla); |
161 |
end |
162 |
if ifield == 31, |
163 |
pathname = strcat(pathi,'RHO',sla); |
164 |
end |
165 |
if ~exist(strcat(dirout,sla,sprintf('%s.%s.nc',otab{ifield,1},sub_name)),'file') |
166 |
%if 1 |
167 |
latlon2ingrid_netcdf(pathname,strcat(dirout,sla),... |
168 |
stepnum,otab{ifield,1},otab, ... |
169 |
lon_c, lon_u, ... |
170 |
lat_c, lat_v, ... |
171 |
z_c, z_w, ... |
172 |
sub_name, ... |
173 |
lonmin,lonmax,latmin,latmax,depmin,depmax); |
174 |
else |
175 |
disp(strcat('##### Skip file (already done):',dirout,sla,... |
176 |
sprintf('%s.%s.nc',otab{ifield,1},sub_name))) |
177 |
end %if %file exist |
178 |
|
179 |
end %if 1/0 want to record ? |
180 |
% if il==1,break,end; |
181 |
|
182 |
fclose('all'); |
183 |
|
184 |
end %for il |
185 |
|
186 |
end %if it |
187 |
|
188 |
end %for i |