source: Roms_tools/Preprocessing_tools/ext_tracers_ini.m @ 2

Last change on this file since 2 was 1, checked in by cholod, 13 years ago

import Roms_Agrif

File size: 4.5 KB
Line 
1function ext_tracers_ini(ininame,grdname,seas_datafile,ann_datafile,...
2                         dataname,vname,type,tini);
3%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
4%
5% P. Marchesiello - 2005. Adapted from P. Penven's ext_tracers.m
6%
7%  Ext tracers in a ROMS initial file
8%  take seasonal data for the upper levels and annual data for the
9%  lower levels
10%
11%  input:
12%    ininame       : ROMS initial file name
13%    grdname       : ROMS grid file name   
14%    seas_datafile : regular longitude - latitude - z seasonal data
15%                    file used for the upper levels  (netcdf)
16%    ann_datafile  : regular longitude - latitude - z annual data
17%                    file used for the lower levels  (netcdf)
18%    dataname      : variable name in data file
19%    vname         : variable name in ROMS file
20%    type          : position on C-grid ('r', 'u', 'v', 'p')
21%    tini          : initialisation time [days]
22%
23%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
24disp(' ')
25%
26% set the value of ro (oa decorrelation scale [m])
27% and default (value if no data)
28%
29ro=0;
30default=NaN;
31disp([' Ext tracers: ro = ',num2str(ro/1000),...
32      ' km - default value = ',num2str(default)])
33
34% Open initial file
35%
36nc=netcdf(ininame,'write');
37theta_s = nc{'theta_s'}(:);
38theta_b =  nc{'theta_b'}(:);
39hc  =  nc{'hc'}(:);
40N =  length(nc('s_rho'));
41%
42% Open and Read grid file 
43%
44ng=netcdf(grdname);
45lon=ng{'lon_rho'}(:);
46lat=ng{'lat_rho'}(:);
47h=ng{'h'}(:);
48close(ng);
49[M,L]=size(lon);
50%
51% Read seasonal datafile
52%
53ncseas=netcdf(seas_datafile);
54X=ncseas{'X'}(:);
55Y=ncseas{'Y'}(:);
56Zseas=-ncseas{'Z'}(:);
57T=ncseas{'T'}(:).*30;
58tlen=length(T);
59Nzseas=length(Zseas);
60%
61% Read annual datafile
62%
63ncann=netcdf(ann_datafile);
64Zann=-ncann{'Z'}(:);
65Nz=length(Zann);
66%
67% Determine time index to process
68%
69ll=find(T<=tini);
70if (size(ll,1) ~= 0)
71 l=ll(size(ll,1));
72else
73 l=1;
74end
75disp(['   ext_tracers_ini: time index: ',num2str(l),' of total: ',num2str(tlen)])
76%
77% get a subgrid
78%
79dl=1;
80lonmin=min(min(lon))-dl;
81lonmax=max(max(lon))+dl;
82latmin=min(min(lat))-dl;
83latmax=max(max(lat))+dl;
84%
85j=find(Y>=latmin & Y<=latmax);
86i1=find(X-360>=lonmin & X-360<=lonmax);
87i2=find(X>=lonmin & X<=lonmax);
88i3=find(X+360>=lonmin & X+360<=lonmax);
89x=cat(1,X(i1)-360,X(i2),X(i3)+360);
90y=Y(j);
91%
92%------------------------------------------------------------
93% Horizontal interpolation
94%------------------------------------------------------------
95%
96%
97% Interpole annual dataset on horizontal ROMS grid
98%
99if Nz > Nzseas
100  if Zseas~=Zann(1:length(Zseas))
101    error('vertical levels dont match')
102  end
103  datazgrid=zeros(Nz,M,L);
104  missval=ncann{dataname}.missing_value(:);
105  for k=Nzseas+1:Nz
106    if ~isempty(i2)
107      data=squeeze(ncann{dataname}(k,j,i2));
108    else
109      data=[];
110    end
111    if ~isempty(i1)
112      data=cat(2,squeeze(ncann{dataname}(k,j,i1)),data);
113    end
114    if ~isempty(i3)
115      data=cat(2,data,squeeze(ncann{dataname}(k,j,i3)));
116    end
117    data=get_missing_val(x,y,data,missval,ro,default);
118    datazgrid(k,:,:)=interp2(x,y,data,lon,lat,'cubic');
119  end
120end
121close(ncann);
122%
123% interpole seasonal dataset on horizontal roms grid
124%
125disp(['   ext_tracers_ini: horizontal interpolation of seasonal data'])
126missval=ncseas{dataname}.missing_value(:);
127if Nz <= Nzseas
128  datazgrid=zeros(Nz,M,L);
129end
130for k=1:min([Nz Nzseas])
131  if ~isempty(i2)
132    data=squeeze(ncseas{dataname}(l,k,j,i2));
133  else
134    data=[];
135  end
136  if ~isempty(i1)
137    data=cat(2,squeeze(ncseas{dataname}(l,k,j,i1)),data);
138  end
139  if ~isempty(i3)
140    data=cat(2,data,squeeze(ncseas{dataname}(l,k,j,i3)));
141  end
142  data=get_missing_val(x,y,data,missval,ro,default);
143  datazgrid(k,:,:)=interp2(x,y,data,lon,lat,'cubic');
144end
145close(ncseas);
146%
147%----------------------------------------------------
148%  Vertical interpolation
149%-----------------------------------------------------
150%
151disp('   ext_tracers_ini: vertical interpolation')
152%
153% Get the sigma depths
154%
155zroms=zlevs(h,0.*h,theta_s,theta_b,hc,N,'r');
156if type=='u'
157  zroms=rho2u_3d(zroms);
158end
159if type=='v'
160  zroms=rho2v_3d(zroms);
161end
162zmin=min(min(min(zroms)));
163zmax=max(max(max(zroms)));
164%
165% Check if the min z level is below the min sigma level
166%    (if not add a deep layer)
167%
168z=Zann;
169addsurf=max(z)<zmax;
170addbot=min(z)>zmin;
171if addsurf
172 z=[100;z];
173end
174if addbot
175 z=[z;-100000];
176end
177Nz=min(find(z<zmin));
178z=z(1:Nz);
179var=datazgrid; clear datazgrid;
180if addsurf
181  var=cat(1,var(1,:,:),var);
182end
183if addbot
184  var=cat(1,var,var(end,:,:));
185end
186var=var(1:Nz,:,:);
187%
188% Do the vertical interpolation and write in inifile
189%
190nc{vname}(1,:,:,:)=ztosigma(flipdim(var,1),zroms,flipud(z));
191close(nc);
192
193return
Note: See TracBrowser for help on using the repository browser.