⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 statns2.m

📁 用MATLAB进行海洋水团的模拟程序
💻 M
字号:
% STATNS2.M: sorts water type results from omp2.m and residuals,%  latitude and longitude into increasing pressure and%  produces new arrays which can be studied as individual stations.%%  NOTES:    This routine reads output from a file. It does%            not require output from omp2.m in the workspace%            but takes output from omp2.m from the file which was%            generated by that program. It clears the workspace%            before it starts.%%---------------------------------------------% This program is part of the OMP package from:% Institut fuer Meereskunde% J. Karstensen % Troplowitzstr. 7% 22529 Hamburg% Germany%%  It was written by Matthias Tomczak.%% BUGS: matthias.tomczak@flinders.edu.au%--------------------------------------------%clear all%name variablesvarname = [''];varname(1,1:8) = ['latitude'];varname(2,1:8) = ['longitud'];varname(3,1:8) = ['pressure'];varname(4,1:8) = ['salinity'];varname(5,1:8) = ['potltemp'];varname(6,1:8) = ['dvoxygen'];varname(7,1:8) = ['phosphat'];varname(8,1:8) = ['dvnitrat'];varname(9,1:8) = ['silicate'];varname(10,1:8) = ['potlvort'];varname(11,1:8) = ['masscons'];filname = [''];filname(1,1:8) = ['        '];filname(2,1:8) = ['        '];filname(3,1:8) = ['        '];filname(4,1:8) = ['filsalin'];filname(5,1:8) = ['filptemp'];filname(6,1:8) = ['filoxyge'];filname(7,1:8) = ['filphosp'];filname(8,1:8) = ['filnitra'];filname(9,1:8) = ['filsilic'];filname(10,1:8) = ['filpvort'];filname(11,1:8) = ['filtempe'];errname(1,1:8) = ['        '];errname(2,1:8) = ['        '];errname(3,1:8) = ['        '];errname(4,1:8) = ['errsalin'];errname(5,1:8) = ['errptemp'];errname(6,1:8) = ['erroxyge'];errname(7,1:8) = ['errphosp'];errname(8,1:8) = ['errnitra'];errname(9,1:8) = ['errsilic'];errname(10,1:8) = ['errpvort'];errname(11,1:8) = ['errmcons'];%switch to output directory/folder for input and outputdrswitch('This program reads data from');%define input fileincontrol = input('Which file for data input?  [result]  ','s');if length(incontrol) > 0	dataset = incontrol;else	dataset = 'result';endeval(['load ' dataset]);m = 1;for i = 4:10	if esx(i) == 1 m = m+1; endendfor i = 1:nr_of_wm	wmname(i,1:7) = ['wamass' num2str(i)];end%find start and end of stationsif size(press,1)>1 press=press';end statind=[find(diff(press)<0) length(press)]; %define interpolation levelsincontrol = input('Which interpolation file do you want to use?  [testlevels]  ','s');disp('  ')if length(incontrol) > 0	dataset = incontrol;else	dataset = 'testlevels';endeval(['load ' dataset]);llv = length(levels);%check for duplicates and separate them by 0.5 m.for i=2:length(press)	if press(i-1) == press(i) press(i-1) = press(i-1) - 0.5; endend%initialize data and result matricesptsort(length(statind)-1,length(levels)) = NaN;for i=1:length(statind)-1	for j=1:length(levels)		ptsort(i,j) = NaN;	endend%sort data into station formatfor nn = 1:10if esx(nn) == 1	disp(['working on ' varname(nn,1:8) ' extraction'])	for i=2:length(statind)		j = 1;		while press(statind(i-1)+1)>levels(j) & j<length(levels)			j = j+1;		end		k = length(levels);		while press(statind(i))<levels(k) & k>1			k = k-1;		end 		sortwrt %stores data in ptsort; see sortwrt.m	end 	ptsort = ptsort';	fout = varname(nn,1:8); 	sout = sprintf(' %s = ptsort;',fout); 	eval(sout);	ptsort = ptsort';end %esxend %nndisp('  ')for nn = 1:7if esx(nn+3) == 1	disp(['working on ' varname(nn+3,1:8) ' residual extraction'])	for i=2:length(statind)		j = 1;		while press(statind(i-1)+1)>levels(j) & j<length(levels)			j = j+1;		end		k = length(levels);		while press(statind(i))<levels(k) & k>1			k = k-1;		end		if j < k			ptsort(i-1,j:k) = interp1(press(statind(i-1)+1:statind(i)), ...				err(nn,statind(i-1)+1:statind(i)),levels(j:k))';		end	end	ptsort = ptsort';	fout = errname(nn+3,1:8); 	sout = sprintf(' %s = ptsort;',fout);	eval(sout);	ptsort = ptsort';end %esxend %nndisp(['working on ' varname(11,1:8) ' residual extraction'])for i=2:length(statind)	j = 1;	while press(statind(i-1)+1)>levels(j) & j<length(levels)		j = j+1;	endk = length(levels);	while press(statind(i))<levels(k) & k>1		k = k-1;	end	if j < k		ptsort(i-1,j:k) = interp1(press(statind(i-1)+1:statind(i)), ...			err(m,statind(i-1)+1:statind(i)),levels(j:k))';	endendptsort = 100 * ptsort';fout = errname(11,1:8);sout = sprintf(' %s = ptsort;',fout);eval(sout);ptsort = ptsort';disp('  ')for nn = 1:nr_of_wm	disp(['working on ' tit_index(5*(nn-1)+1:5*(nn-1)+5) ' extraction'])	for i=2:length(statind)		j = 1;		while press(statind(i-1)+1)>levels(j) & j<length(levels)			j = j+1;		end		k = length(levels);		while press(statind(i))<levels(k) & k>1			k = k-1;		end		if j < k			ptsort(i-1,j:k) = interp1(press(statind(i-1)+1:statind(i)), ...				A(nn,statind(i-1)+1:statind(i)),levels(j:k))';		end	end	ptsort = 100 * ptsort';	fout = wmname(nn,1:7); 	sout = sprintf(' %s = ptsort;',fout);	eval(sout);	ptsort = ptsort';end %esxend %nnclear ptsort nn fout sout wantdisp('  ')disp('Extraction finished.')disp('Run displvar.m to see individual stations.')clear ans lat long oxy ph ni si press ptemp pvort temp sal tit_index statind

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -