[19012] | 1 | function matrix=resultstomatrix(md,resultname,field,varargin)
|
---|
| 2 | %RESULTSTOMATRIX - go grab in the model results structure the vector results for each time step (which is not empty),
|
---|
| 3 | % and line them up in a matrix. If time vector is provided, resample.
|
---|
| 4 | %
|
---|
| 5 | % Usage:
|
---|
| 6 | % matrix=resultstomatrix(model,solutioname,fieldname)
|
---|
| 7 | %
|
---|
| 8 | % Available options:
|
---|
| 9 | % - 'time' : vector providing new time tags used to resample time
|
---|
| 10 | %
|
---|
| 11 | % Example:
|
---|
| 12 | % vel=resultstomatrix(md,'TransientSolution','Vel');
|
---|
| 13 | % vel=resultstomatrix(md,'TransientSolution','Vel','time',2008:1/12:2014);
|
---|
| 14 | %
|
---|
| 15 | % See also MODEL resample
|
---|
| 16 |
|
---|
| 17 |
|
---|
| 18 | options=pairoptions(varargin{:});
|
---|
| 19 |
|
---|
| 20 | results=md.results.(resultname);
|
---|
| 21 |
|
---|
| 22 | %first, figure out the size:
|
---|
| 23 | count=0;
|
---|
| 24 | nods=0;
|
---|
| 25 | for i=1:length(results),
|
---|
| 26 | if ~isempty(results(i).(field)),
|
---|
| 27 | count=count+1;
|
---|
| 28 | nods=size(results(i).(field),1);
|
---|
| 29 | end
|
---|
| 30 | end
|
---|
| 31 |
|
---|
| 32 | if ~count,
|
---|
| 33 | error(['could not find any result ' field ' in ' resultname]);
|
---|
| 34 | end
|
---|
| 35 |
|
---|
| 36 | %initialize:
|
---|
| 37 | matrix=zeros(nods+1,count);
|
---|
| 38 |
|
---|
| 39 | %fill it up:
|
---|
| 40 | count=0;
|
---|
| 41 | for i=1:length(results),
|
---|
| 42 | if ~isempty(results(i).(field)),
|
---|
| 43 | count=count+1;
|
---|
| 44 | matrix(1:end-1,count)=results(i).(field);
|
---|
| 45 | matrix(end,count)=results(i).time/md.constants.yts;
|
---|
| 46 | end
|
---|
| 47 | end
|
---|
| 48 |
|
---|
| 49 | newtime=getfieldvalue(options,'time',[]);
|
---|
| 50 | newmatrix=zeros(nods+1,length(newtime));
|
---|
| 51 | if ~isempty(newtime),
|
---|
| 52 | %we are asked to reinterpolate to this new time:
|
---|
| 53 |
|
---|
| 54 | for i=1:nods,
|
---|
| 55 | warning off;
|
---|
| 56 | ts=timeseries(matrix(i,:), matrix(end,:));
|
---|
| 57 | ts=resample(ts,newtime);
|
---|
| 58 | warning on;
|
---|
| 59 | newmatrix(i,:)=ts.Data;
|
---|
| 60 | newmatrix(end,:)=ts.Time;
|
---|
| 61 | end
|
---|
| 62 |
|
---|
| 63 | matrix=newmatrix;
|
---|
| 64 | end
|
---|