Back to home page

MITgcm

 
 

    


Warning, /utils/matlab/load_grid.m is written in an unsupported language. File is not indexed.

view on githubraw file Latest commit e6feef68 on 2025-11-18 19:40:16 UTC
6b4f212f67 Jean*0001 function G = load_grid(varargin)
ecaf506031 Jean*0002 % function G = load_grid(dirName,option,nyAxis,nxAxis);
                0003 %
                0004 % load the MITgcm output grid-files into one structure array
                0005 % arguments:
                0006 %     dirName = directory where grid-files are
                0007 % optional arguments:
                0008 %      ncdf = last digit of integer "option":
                0009 %        ncdf = 0,2 : read binary (MDSIO) files using rdmds (default: ncdf=0)
                0010 %        ncdf = 1,3 : read NetCDF (MNC)   files using rdmnc
                0011 %        ncdf = 2,3 : as 0,1 + print elapsed-time for loading files
                0012 %      option >= 10 : only read in Horiz.Grid spacing (without hFac)
                0013 %      option >= 20 : only read in Verti.Grid spacing (without hFac)
6b4f212f67 Jean*0014 %      nyAxis = number of spacing in 1.D y-axis yAxC (default: nyAxis = grid-Ny)
ecaf506031 Jean*0015 %      nxAxis = number of spacing in 1.D x-axis xAxC (default: nxAxis = grid-Nx)
                0016 
6b4f212f67 Jean*0017 fprintf('entering fct "load_grid" ...');
ecaf506031 Jean*0018 if nargin == 0
                0019   rDir = '.';
                0020 else
                0021   rDir = varargin{1};
                0022 end
                0023 if nargin < 2,
                0024  ktyp=0;
                0025  ncdf=0;
                0026 else
                0027  ncdf= varargin{2};
                0028  ktyp=floor(ncdf/10); ncdf=rem(ncdf,10);
                0029 end
e6feef680a Ivan*0030 % kinp: = 0 : binary file ; = 1 : old MNC file ; = 2 : new MNC file
ecaf506031 Jean*0031 
                0032 if ncdf > 1, TimeT0=clock; end
                0033 
                0034 if rem(ncdf,2) == 0,
                0035 %- load MDSIO grid files :
e6feef680a Ivan*0036  kinp=0;
ecaf506031 Jean*0037 if ktyp < 2,
                0038  xC=rdmds(fullfile(rDir,'XC'));
                0039  yC=rdmds(fullfile(rDir,'YC'));
                0040  xG=rdmds(fullfile(rDir,'XG'));
                0041  yG=rdmds(fullfile(rDir,'YG'));
                0042 
                0043  dXc=rdmds(fullfile(rDir,'DXC'));
                0044  dYc=rdmds(fullfile(rDir,'DYC'));
                0045  dXg=rdmds(fullfile(rDir,'DXG'));
                0046  dYg=rdmds(fullfile(rDir,'DYG'));
                0047 
                0048  rAc=rdmds(fullfile(rDir,'RAC'));
                0049  rAw=rdmds(fullfile(rDir,'RAW'));
                0050  rAs=rdmds(fullfile(rDir,'RAS'));
                0051  rAz=rdmds(fullfile(rDir,'RAZ'));
                0052 
                0053 %- load grid orientation relative to West-East / South-North dir:
                0054  if isempty(dir(fullfile(rDir,'AngleCS.*'))),
                0055   fprintf(' no grid orientation (Cos & Sin) file to load ');
                0056   csAngle= ones(size(rAc));
                0057   snAngle=zeros(size(rAc));
                0058   fprintf(' => set COS=1,SIN=0\n');
                0059  else
                0060   csAngle=rdmds(fullfile(rDir,'AngleCS'));
                0061   snAngle=rdmds(fullfile(rDir,'AngleSN'));
                0062  end
                0063  dims = size(rAc);
                0064 end
                0065 
                0066 if rem(ktyp,2) == 0,
                0067  rC=rdmds(fullfile(rDir,'RC')); rC=squeeze(rC);
                0068  rF=rdmds(fullfile(rDir,'RF')); rF=squeeze(rF);
                0069  dRc=rdmds(fullfile(rDir,'DRC')); dRc=squeeze(dRc);
                0070  dRf=rdmds(fullfile(rDir,'DRF')); dRf=squeeze(dRf);
6b4f212f67 Jean*0071  depth=rdmds(fullfile(rDir,'Depth'));
                0072  dims = [size(depth) length(rC)];
ecaf506031 Jean*0073 end
                0074 
                0075 if ktyp == 0,
                0076 %- define domain:
                0077  hFacC=rdmds(fullfile(rDir,'hFacC'));
                0078  hFacW=rdmds(fullfile(rDir,'hFacW'));
                0079  hFacS=rdmds(fullfile(rDir,'hFacS'));
                0080  dims = size(hFacC);
                0081 end
                0082 
                0083  if ncdf > 1, TimeT1=clock; end
                0084 
                0085 else
                0086 %- load NetCDF grid files :
                0087  S=rdmnc(fullfile(rDir,'grid.*.nc'));
                0088  if ncdf > 1, TimeT1=clock; end
                0089 
6b4f212f67 Jean*0090 %--
e6feef680a Ivan*0091  if isfield(S,'XC'),
                0092   kinp=1; % old MNC grid names until c69h
                0093   xC=S.XC;
                0094   yC=S.YC;
                0095   xG=S.XG(1:end-1,1:end-1);
                0096   yG=S.YG(1:end-1,1:end-1);
                0097   rC=S.RC';
                0098   rF=S.RF';
                0099   rAc=S.rA;
                0100   if isfield(S,'AngleCS') & isfield(S,'AngleSN'),
                0101     csAngle=S.AngleCS;
                0102     snAngle=S.AngleSN;
                0103   else
                0104     fprintf(' no grid orientation (Cos & Sin) in grid file ');
                0105     csAngle= ones(size(rAc));
                0106     snAngle=zeros(size(rAc));
                0107     fprintf(' => set COS=1,SIN=0\n');
                0108   end
                0109   hFacC=S.HFacC;
                0110   hFacW=S.HFacW(1:end-1,:,:);
                0111   hFacS=S.HFacS(:,1:end-1,:);
                0112  else
                0113   kinp=2; % current MNC grid names >=c69h
                0114   xC=S.xC;
                0115   yC=S.yC;
                0116   xG=S.xG(1:end-1,1:end-1);
                0117   yG=S.yG(1:end-1,1:end-1);
                0118   rC=S.rC';
                0119   rF=S.rF';
                0120   rAc=S.rAc;
                0121   if isfield(S,'angleCS') & isfield(S,'angleSN'),
                0122     csAngle=S.angleCS;
                0123     snAngle=S.angleSN;
                0124   else
                0125     fprintf(' no grid orientation (Cos & Sin) in grid file ');
                0126     csAngle= ones(size(rAc));
                0127     snAngle=zeros(size(rAc));
                0128     fprintf(' => set COS=1,SIN=0\n');
                0129   end
                0130   hFacC=S.hFacC;
                0131   hFacW=S.hFacW(1:end-1,:,:);
                0132   hFacS=S.hFacS(:,1:end-1,:);
                0133  end
ecaf506031 Jean*0134  dXc=S.dxC(1:end-1,:);
                0135  dYc=S.dyC(:,1:end-1);
                0136  dXg=S.dxG(:,1:end-1);
                0137  dYg=S.dyG(1:end-1,:);
3d4f3e5a15 Jean*0138  dRc=S.drC';
                0139  dRf=S.drF';
ecaf506031 Jean*0140  rAw=S.rAw(1:end-1,:);
                0141  rAs=S.rAs(:,1:end-1);
                0142  rAz=S.rAz(1:end-1,1:end-1);
                0143  depth=S.Depth;
                0144  dims = size(hFacC);
e6feef680a Ivan*0145 
ecaf506031 Jean*0146 end
                0147 
e6feef680a Ivan*0148 if ncdf > 1, fprintf(' (took %6.4f s)',etime(TimeT1,TimeT0)); end
ecaf506031 Jean*0149 
                0150 if length(dims) == 1, dims(2)=1; end
                0151 if length(dims) == 2, dims(3)=1; end
                0152 
6b4f212f67 Jean*0153 if rem(ncdf,2) == 1 | ktyp ~= 2,
ecaf506031 Jean*0154 %- 1-D axis:
6b4f212f67 Jean*0155   if nargin < 3,
ecaf506031 Jean*0156 %- yAxis
6b4f212f67 Jean*0157     ny=dims(2);
                0158     yAxC=yC(1,:)';
e6feef680a Ivan*0159     if kinp == 0,
6b4f212f67 Jean*0160       yAxV=[yG(1,:) 2*yC(1,end)-yG(1,end)]';
e6feef680a Ivan*0161     elseif kinp == 1,
6b4f212f67 Jean*0162       yAxV=S.YG(1,:)';
e6feef680a Ivan*0163     else
                0164       yAxV=S.yG(1,:)';
6b4f212f67 Jean*0165     end
ecaf506031 Jean*0166   else
6b4f212f67 Jean*0167     ny=varargin{3};
                0168     dyAx=(max(yG(:))-min(yG(:)))/ny;
                0169     yAxV=min(yG(:))+[0:ny]'*dyAx;
                0170     yAxC=(yAxV(1:ny)+yAxV(2:ny+1))/2;
ecaf506031 Jean*0171   end
6b4f212f67 Jean*0172   if nargin < 4,
                0173   %- xAxis
                0174     nx=dims(1);
                0175     xAxC=xC(:,1);
e6feef680a Ivan*0176     if kinp == 0,
6b4f212f67 Jean*0177       xAxU=[xG(:,1)' 2*xC(end,1)-xG(end,1)]';
e6feef680a Ivan*0178     elseif kinp == 1,
                0179       xAxU=S.XG(:,1);
6b4f212f67 Jean*0180     else
e6feef680a Ivan*0181       xAxU=S.xG(:,1);
6b4f212f67 Jean*0182     end
ecaf506031 Jean*0183   else
6b4f212f67 Jean*0184     nx=varargin{4};
                0185     dxAx=max(max(xG(:)),max(xC(:)))-min(min(xG(:)),min(xC(:)));
                0186     if dxAx > 360*(1-1/nx), dxAx=360; end
                0187     dxAx=dxAx/nx;
                0188     xAxU=min(xG(:))+[0:nx]'*dxAx;
                0189     xAxC=(xAxU(1:nx)+xAxU(2:nx+1))/2;
ecaf506031 Jean*0190   end
                0191 
                0192 %- volume:
6b4f212f67 Jean*0193   if rem(ncdf,2) == 1 | ktyp == 0,
                0194    vol=reshape(rAc,[dims(1)*dims(2) 1])*dRf'; vol=reshape(vol,dims).*hFacC;
                0195   end
ecaf506031 Jean*0196 end
                0197 
6b4f212f67 Jean*0198 %- clear space:
                0199 if rem(ncdf,2) == 1, clear S ; end
                0200 
ecaf506031 Jean*0201 % create the structure
                0202 
                0203 if rem(ncdf,2) == 1 | ktyp == 0,
                0204 G = struct('dims',dims, ...
                0205     'nx',nx,'ny',ny,'xAxC',xAxC,'yAxC',yAxC,'xAxU',xAxU,'yAxV',yAxV, ...
                0206     'xC',xC,'yC',yC,'xG',xG,'yG',yG,'rC',rC,'rF',rF, ...
                0207     'dXc',dXc,'dYc',dYc,'dXg',dXg,'dYg',dYg,'dRc',dRc,'dRf',dRf, ...
                0208     'rAc',rAc,'rAw',rAw,'rAs',rAs,'rAz',rAz, ...
                0209     'csAngle',csAngle,'snAngle',snAngle, ...
                0210     'hFacC',hFacC,'hFacW',hFacW,'hFacS',hFacS,'depth',depth,'vol',vol);
                0211 elseif ktyp == 1,
                0212 G = struct('dims',dims, ...
                0213     'nx',nx,'ny',ny,'xAxC',xAxC,'yAxC',yAxC,'xAxU',xAxU,'yAxV',yAxV, ...
                0214     'xC',xC,'yC',yC,'xG',xG,'yG',yG, ...
                0215     'dXc',dXc,'dYc',dYc,'dXg',dXg,'dYg',dYg, ...
                0216     'rAc',rAc,'rAw',rAw,'rAs',rAs,'rAz',rAz, ...
                0217     'csAngle',csAngle,'snAngle',snAngle);
                0218 else
                0219 G = struct('dims',dims, ...
                0220     'rC',rC,'rF',rF, ...
6b4f212f67 Jean*0221     'dRc',dRc,'dRf',dRf,'depth',depth);
ecaf506031 Jean*0222 end
                0223 
6b4f212f67 Jean*0224 fprintf(' and leaving\n');
                0225 %return
                0226 end