📄 sortomp2.m
字号:
% SORTOMP2.M: sorts water type results and residuals,% latitude and longitude into increasing pressure and% writes the data as sections into files.%% NOTES: 1. 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.% 3. This routine assumes that you have a directory/folder% "output" in the current work directory and places all% files into that directory/folder.%%---------------------------------------------% 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%--------------------------------------------%% This routine produces ASCII output in the following format:%% <number of depth levels> <number of stations>% <maxvar> <minvar>% <depth level 1> <depth level 2> <depth level 3> ... etc.% <station location 1> <station location 2> <station location 3> ... etc.% <data station 1 depth 1> <data station 2 depth 1> <data station 3 depth 1> ... etc.% <data station 1 depth 2> <data station 2 depth 2> <data station 3 depth 2> ... etc.% <data station 1 depth 3> <data station 2 depth 3> <data station 3 depth 3> ... etc.% ... etc.%% This format is read automatically by Transform (Spyglass/Fortner) and Noesys (Fortner).%% Notes: 1. "Station location" means "Distance from first station" in km.% 2. maxvar and minvar are the maximum and minimum value for the data. It is set% to zero, which forces Transform to calculate these values. This is done because% in most cases max(max(data)) and min(min(data)) turns out to be NaN.% If you are sure that there are no NaNs in your data you can include the% calculation of maxvar and minvar from the data in the code.%%name variablesvarname = [''];varname(1,1:11) = [' latitude'];varname(2,1:11) = [' longitude'];varname(3,1:11) = [' pressure'];varname(4,1:11) = [' salinity'];varname(5,1:11) = [' pot. temp.'];varname(6,1:11) = [' oxygen'];varname(7,1:11) = [' phosphate'];varname(8,1:11) = [' nitrate'];varname(9,1:11) = [' silicate'];varname(10,1:11) = [' pot. vort.'];varname(11,1:11) = ['mass consn.'];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]);for i = 1:nr_of_wm wmname(i,1:7) = ['filewm' num2str(i)];endclear ptsortmaxvar = 0;minvar = 0;%warning to check existing filesm = 1;disp(' ')disp('WARNING! This program will create the following files:')for i = 4:10 if esx(i) == 1 disp([filname(i,:) ' (for ' varname(i,1:11) ')']); m = m+1; endenddisp(' ')for i = 4:10 if esx(i) == 1 disp([errname(i,:) ' (for ' varname(i,1:11) ' residual)']); endenddisp([errname(11,:) ' (for ' varname(11,1:11) ' residual)']);disp(' ')for i = 1:nr_of_wm disp([wmname(i,1:7) ' (for ' tit_index(5*(i-1)+1:5*(i-1)+5) ')']);endwant = 'n';drswitch('It will place the files into');incontrol = input('Do you want to continue (y/n)? [n] ','s');if incontrol== 'y' want = 'y'; endif want == 'n' return; end%main block, only run if want == 'y'%find start and end of stationsstatind=[find(diff(press)<0) length(press)]; %calculate distance between stations[dist,phaseangle] = sw_dist(lat,long,'km');cumdist=[0 cumsum(dist)];cumdist = cumdist(statind);statind = [0 statind];lcd = length(cumdist);%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 = 4:10if esx(nn) == 1 disp(['working on ' varname(nn,1:11) ' 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 = filname(nn,1:8); sout = sprintf('save %s llv lcd maxvar minvar levels cumdist ptsort -ascii',fout); eval(sout); disp(['file ' filname(nn,1:8) ' created and saved']) disp(' ') ptsort = ptsort';end %esxend %nnfor nn = 1:7if esx(nn+3) == 1 disp(['working on ' varname(nn+3,1:11) ' 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('save %s llv lcd maxvar minvar levels cumdist ptsort -ascii',fout); eval(sout); disp(['file ' errname(nn+3,1:8) ' created and saved']) disp(' ') ptsort = ptsort';end %esxend %nndisp(['working on ' varname(11,1:11) ' 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('save %s llv lcd maxvar minvar levels cumdist ptsort -ascii',fout);eval(sout);disp(['file ' errname(11,1:8) ' created and saved'])disp(' ')ptsort = ptsort';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('save %s llv lcd maxvar minvar levels cumdist ptsort -ascii',fout); eval(sout); disp(['file ' wmname(nn,1:7) ' created and saved']) disp(' ') ptsort = ptsort';end %esxend %nnclear ptsort levels cumdist dist phaseangle llv lcd maxvar minvar nn fout sout wantclear 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 + -