function [FLD,varargout]=eccov4_lonlat(fldLoc,fldName,numRec,varargin); % % Extract the lat-lon part of ecco v4 fields. % FLD=eccov4_lonlat(fldLoc,fldName,numRec) reads record % numRec (set to [] for all records) of fldName in fldLoc % ---> assumption : fldName designates a variable located at grid cell % centers (e.g. RAC) % % [FLD,MATE]=eccov4_lonlat(fldLoc,fldName,numRec,mateLoc,mateName,1) % reads record numRec of fldName,mateName in fldLoc,mateLoc % ---> assumption : fldName,mateName designate un-signed staggered % variables at grid cell edges (e.g. DXC,DYC) % % [FLD,MATE]=eccov4_lonlat(fldLoc,fldName,numRec,mateLoc,mateName,-1) reads % reads record numRec of fldName,mateName in fldLoc,mateLoc and flip signs % ---> assumption : fldName,mateName designate staggered vector % variables at grid cell edges (e.g. UVELMASS,VVELMASS) % % Example: % fldLoc='nctiles_grid/GRID'; fldName='DXC'; % mateLoc='nctiles_grid/GRID'; mateName='DYC'; % [DXC,DYC]=eccov4_lonlat(fldLoc,fldName,1,mateLoc,mateName,1); %optional input parameters if nargin>3; mateLoc=varargin{1}; mateName=varargin{2}; changeSign=varargin{3}; end; %determine directory and file names [nameDir,nameFil]=eccov4_search(fldLoc,fldName); %set dimensions fil=fullfile(nameDir,filesep,nameFil(1).name); tmp=ncread(fil,fldName); siz=size(tmp); strt=ones(size(siz)); cnt=siz; if ~isempty(numRec)&(length(siz)>2); strt(end)=numRec; cnt(end)=1; end; %read from file fld={}; for T=1:13 %loop through 13 tiles fil=fullfile(nameDir,filesep,nameFil(T).name); fld{T}=ncread(fil,fldName,strt,cnt); end %for T loop through tiles %re-arrange into faces fld=eccov4_faces(fld); if nargin>3; %determine directory and file names [nameDir,nameFil]=eccov4_search(mateLoc,mateName); %read from file mate={}; for T=1:13 %loop through 13 tiles fil=fullfile(nameDir,filesep,nameFil(T).name); mate{T}=ncread(fil,mateName,strt,cnt); end %for T loop through tiles %re-arrange into faces mate=eccov4_faces(mate); end; if nargin<4; %extract longitude-latitude sector FLD=eccov4_array(fld); FLD=FLD(:,62:239,:,:); FLD=circshift(FLD,[142 0]); else; %extract first component: FLD=eccov4_array(fld); FLD=FLD(:,62:239,:,:); FLD(1:90,:,:,:)=fld{1}(:,62:239,:,:); FLD(91:180,:,:,:)=fld{2}(:,62:239,:,:); tmp1=flipdim(permute(mate{4},[2 1 3 4]),2); FLD(181:270,:,:,:)=tmp1(:,62:239,:,:); tmp1=flipdim(permute(mate{5},[2 1 3 4]),2); FLD(271:360,:,:,:)=tmp1(:,62:239,:,:); FLD=circshift(FLD,[142 0]); %extract second component: note index (and sign) shift MATE=eccov4_array(mate); MATE=MATE(:,62:239,:,:); MATE(1:90,:,:,:)=mate{1}(:,62:239,:,:); MATE(91:180,:,:,:)=mate{2}(:,62:239,:,:); tmp1=flipdim(permute(fld{4},[2 1 3 4]),2); MATE(181:270,:,:,:)=changeSign*tmp1(:,61:238,:,:); tmp1=flipdim(permute(fld{5},[2 1 3 4]),2); MATE(271:360,:,:,:)=changeSign*tmp1(:,61:238,:,:); MATE=circshift(MATE,[142 0]); % varargout{1}=MATE; end; function [nameDir,nameFil]=eccov4_search(fldLoc,fldName); %determine directory and file names nameFil=[]; if isempty(nameFil); nameFil=dir(fullfile([fldLoc '*.nc'])); nameDir = fileparts(fldLoc); end; if isempty(nameFil); nameFil=dir(fullfile(fldLoc,filesep,[fldName '*.nc'])); nameDir = fldLoc; end; if isempty(nameFil); nameFil=dir(fullfile(fldLoc,filesep,fldName,filesep,[fldName '*.nc'])); nameDir = fullfile(fldLoc,filesep,fldName,filesep); end; if length(nameFil)~=13; error('did not find files matching description'); end; function [fld]=eccov4_faces(fld); fld{1}=cat(2,fld{1},fld{2},fld{3}); fld{2}=cat(2,fld{4},fld{5},fld{6}); fld{3}=fld{7}; fld{4}=cat(1,fld{8},fld{9},fld{10}); fld{5}=cat(1,fld{11},fld{12},fld{13}); fld={fld{1:5}}; function [FLD]=eccov4_array(fld); FLD=cat(1,fld{1},fld{2},... flipdim(permute(fld{4},[2 1 3 4]),2),... flipdim(permute(fld{5},[2 1 3 4]),2)); tmp2=flipdim(permute(fld{3},[2 1 3 4]),1); FLD=cat(2,FLD,repmat(tmp2,[4 1])); FLD(91:360,271:360)=NaN;