1 |
function [FLD,varargout]=eccov4_lonlat(fldLoc,fldName,numRec,varargin); |
2 |
% |
3 |
% Extract the lat-lon part of ecco v4 fields. |
4 |
% FLD=eccov4_lonlat(fldLoc,fldName,numRec) reads record |
5 |
% numRec (set to [] for all records) of fldName in fldLoc |
6 |
% ---> assumption : fldName designates a variable located at grid cell |
7 |
% centers (e.g. RAC) |
8 |
% |
9 |
% [FLD,MATE]=eccov4_lonlat(fldLoc,fldName,numRec,mateLoc,mateName,1) |
10 |
% reads record numRec of fldName,mateName in fldLoc,mateLoc |
11 |
% ---> assumption : fldName,mateName designate un-signed staggered |
12 |
% variables at grid cell edges (e.g. DXC,DYC) |
13 |
% |
14 |
% [FLD,MATE]=eccov4_lonlat(fldLoc,fldName,numRec,mateLoc,mateName,-1) reads |
15 |
% reads record numRec of fldName,mateName in fldLoc,mateLoc and flip signs |
16 |
% ---> assumption : fldName,mateName designate staggered vector |
17 |
% variables at grid cell edges (e.g. UVELMASS,VVELMASS) |
18 |
% |
19 |
% Example: |
20 |
% fldLoc='nctiles_grid/GRID'; fldName='DXC'; |
21 |
% mateLoc='nctiles_grid/GRID'; mateName='DYC'; |
22 |
% [DXC,DYC]=eccov4_lonlat(fldLoc,fldName,1,mateLoc,mateName,1); |
23 |
|
24 |
%optional input parameters |
25 |
if nargin>3; |
26 |
mateLoc=varargin{1}; |
27 |
mateName=varargin{2}; |
28 |
changeSign=varargin{3}; |
29 |
end; |
30 |
|
31 |
%determine directory and file names |
32 |
[nameDir,nameFil]=eccov4_search(fldLoc,fldName); |
33 |
|
34 |
%set dimensions |
35 |
fil=fullfile(nameDir,filesep,nameFil(1).name); |
36 |
tmp=ncread(fil,fldName); |
37 |
siz=size(tmp); |
38 |
strt=ones(size(siz)); cnt=siz; |
39 |
if ~isempty(numRec)&(length(siz)>2); |
40 |
strt(end)=numRec; cnt(end)=1; |
41 |
end; |
42 |
|
43 |
%read from file |
44 |
fld={}; |
45 |
for T=1:13 %loop through 13 tiles |
46 |
fil=fullfile(nameDir,filesep,nameFil(T).name); |
47 |
fld{T}=ncread(fil,fldName,strt,cnt); |
48 |
end %for T loop through tiles |
49 |
|
50 |
%re-arrange into faces |
51 |
fld=eccov4_faces(fld); |
52 |
|
53 |
if nargin>3; |
54 |
%determine directory and file names |
55 |
[nameDir,nameFil]=eccov4_search(mateLoc,mateName); |
56 |
|
57 |
%read from file |
58 |
mate={}; |
59 |
for T=1:13 %loop through 13 tiles |
60 |
fil=fullfile(nameDir,filesep,nameFil(T).name); |
61 |
mate{T}=ncread(fil,mateName,strt,cnt); |
62 |
end %for T loop through tiles |
63 |
|
64 |
%re-arrange into faces |
65 |
mate=eccov4_faces(mate); |
66 |
end; |
67 |
|
68 |
if nargin<4; |
69 |
%extract longitude-latitude sector |
70 |
FLD=eccov4_array(fld); |
71 |
FLD=FLD(:,62:239,:,:); |
72 |
FLD=circshift(FLD,[142 0]); |
73 |
else; |
74 |
%extract first component: |
75 |
FLD=eccov4_array(fld); |
76 |
FLD=FLD(:,62:239,:,:); |
77 |
FLD(1:90,:,:,:)=fld{1}(:,62:239,:,:); |
78 |
FLD(91:180,:,:,:)=fld{2}(:,62:239,:,:); |
79 |
tmp1=flipdim(permute(mate{4},[2 1 3 4]),2); |
80 |
FLD(181:270,:,:,:)=tmp1(:,62:239,:,:); |
81 |
tmp1=flipdim(permute(mate{5},[2 1 3 4]),2); |
82 |
FLD(271:360,:,:,:)=tmp1(:,62:239,:,:); |
83 |
FLD=circshift(FLD,[142 0]); |
84 |
%extract second component: note index (and sign) shift |
85 |
MATE=eccov4_array(mate); |
86 |
MATE=MATE(:,62:239,:,:); |
87 |
MATE(1:90,:,:,:)=mate{1}(:,62:239,:,:); |
88 |
MATE(91:180,:,:,:)=mate{2}(:,62:239,:,:); |
89 |
tmp1=flipdim(permute(fld{4},[2 1 3 4]),2); |
90 |
MATE(181:270,:,:,:)=changeSign*tmp1(:,61:238,:,:); |
91 |
tmp1=flipdim(permute(fld{5},[2 1 3 4]),2); |
92 |
MATE(271:360,:,:,:)=changeSign*tmp1(:,61:238,:,:); |
93 |
MATE=circshift(MATE,[142 0]); |
94 |
% |
95 |
varargout{1}=MATE; |
96 |
end; |
97 |
|
98 |
function [nameDir,nameFil]=eccov4_search(fldLoc,fldName); |
99 |
|
100 |
%determine directory and file names |
101 |
nameFil=[]; |
102 |
if isempty(nameFil); |
103 |
nameFil=dir(fullfile([fldLoc '*.nc'])); |
104 |
nameDir = fileparts(fldLoc); |
105 |
end; |
106 |
if isempty(nameFil); |
107 |
nameFil=dir(fullfile(fldLoc,filesep,[fldName '*.nc'])); |
108 |
nameDir = fldLoc; |
109 |
end; |
110 |
if isempty(nameFil); |
111 |
nameFil=dir(fullfile(fldLoc,filesep,fldName,filesep,[fldName '*.nc'])); |
112 |
nameDir = fullfile(fldLoc,filesep,fldName,filesep); |
113 |
end; |
114 |
if length(nameFil)~=13; error('did not find files matching description'); end; |
115 |
|
116 |
function [fld]=eccov4_faces(fld); |
117 |
|
118 |
fld{1}=cat(2,fld{1},fld{2},fld{3}); |
119 |
fld{2}=cat(2,fld{4},fld{5},fld{6}); |
120 |
fld{3}=fld{7}; |
121 |
fld{4}=cat(1,fld{8},fld{9},fld{10}); |
122 |
fld{5}=cat(1,fld{11},fld{12},fld{13}); |
123 |
fld={fld{1:5}}; |
124 |
|
125 |
function [FLD]=eccov4_array(fld); |
126 |
|
127 |
FLD=cat(1,fld{1},fld{2},... |
128 |
flipdim(permute(fld{4},[2 1 3 4]),2),... |
129 |
flipdim(permute(fld{5},[2 1 3 4]),2)); |
130 |
tmp2=flipdim(permute(fld{3},[2 1 3 4]),1); |
131 |
FLD=cat(2,FLD,repmat(tmp2,[4 1])); |
132 |
FLD(91:360,271:360)=NaN; |
133 |
|