| 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 |
|
|
|