1 |
gforget |
1.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 |
|
|
|