1 | function response=qmuresponse(models,results,processedresults,descriptor)
|
---|
2 | %QMURESPONSE - compute response function from model results.
|
---|
3 |
|
---|
4 | if strcmpi(descriptor,'max_vel'),
|
---|
5 | response=max(processedresults.vel);
|
---|
6 | elseif strcmpi(descriptor,'min_vel'),
|
---|
7 | response=min(processedresults.vel);
|
---|
8 | elseif strcmpi(descriptor,'max_vx'),
|
---|
9 | response=max(processedresults.vx);
|
---|
10 | elseif strcmpi(descriptor,'max_abs_vx'),
|
---|
11 | response=max(abs(processedresults.vx));
|
---|
12 | elseif strcmpi(descriptor,'min_vx'),
|
---|
13 | response=min(processedresults.vx);
|
---|
14 | elseif strcmpi(descriptor,'max_vy'),
|
---|
15 | response=max(processedresults.vy);
|
---|
16 | elseif strcmpi(descriptor,'max_abs_vy'),
|
---|
17 | response=max(abs(processedresults.vy));
|
---|
18 | elseif strcmpi(descriptor,'min_vy'),
|
---|
19 | response=min(processedresults.vy);
|
---|
20 | elseif strncmpi(descriptor,'mass_flux',9),
|
---|
21 | indx=str2int(descriptor(10:end));
|
---|
22 | if isempty(indx) || ~indx
|
---|
23 | indx=1;
|
---|
24 | end
|
---|
25 |
|
---|
26 | %call mass flux module.
|
---|
27 | m_dh=models.dh;
|
---|
28 | m_dhu=models.dhu;
|
---|
29 | m_ds=models.ds;
|
---|
30 | ishutter=m_dhu.parameters.ishutter;
|
---|
31 | ismacayealpattyn=m_dh.parameters.ismacayealpattyn;
|
---|
32 | isstokes=m_ds.parameters.isstokes;
|
---|
33 | if ishutter,
|
---|
34 |
|
---|
35 | % for now, separate all segments from double array for parallel to make cells
|
---|
36 | if (length(m_dhu.parameters.qmu_mass_flux_num_segments) > 1)
|
---|
37 | segments=m_dhu.parameters.qmu_mass_flux_segments;
|
---|
38 | m_dhu.parameters.qmu_mass_flux_segments=cell(size(m_dhu.parameters.qmu_mass_flux_num_segments));
|
---|
39 | ipt=1;
|
---|
40 | for i=1:length(m_dhu.parameters.qmu_mass_flux_num_segments)
|
---|
41 | if m_dhu.parameters.qmu_mass_flux_num_segments(i)
|
---|
42 | m_dhu.parameters.qmu_mass_flux_segments{i}=segments(ipt:ipt+m_dhu.parameters.qmu_mass_flux_num_segments(i)-1,:);
|
---|
43 | ipt=ipt+m_dhu.parameters.qmu_mass_flux_num_segments(i);
|
---|
44 | end
|
---|
45 | end
|
---|
46 | clear segments
|
---|
47 | end
|
---|
48 |
|
---|
49 | if isnumeric(m_dhu.parameters.qmu_mass_flux_segments)
|
---|
50 | response=MassFlux(m_dhu.elements,m_dhu.nodes,m_dhu.vertices,m_dhu.loads,m_dhu.materials,m_dhu.parameters,results.u_g);
|
---|
51 | else
|
---|
52 | save=m_dhu.parameters.qmu_mass_flux_segments;
|
---|
53 | m_dhu.parameters.qmu_mass_flux_segments=m_dhu.parameters.qmu_mass_flux_segments{indx};
|
---|
54 | response=MassFlux(m_dhu.elements,m_dhu.nodes,m_dhu.vertices,m_dhu.loads,m_dhu.materials,m_dhu.parameters,results.u_g);
|
---|
55 | m_dhu.parameters.qmu_mass_flux_segments=save;
|
---|
56 | clear save
|
---|
57 | end
|
---|
58 |
|
---|
59 | elseif ismacayealpattyn,
|
---|
60 |
|
---|
61 | % for now, separate all segments from double array for parallel to make cells
|
---|
62 | if (length(m_dh.parameters.qmu_mass_flux_num_segments) > 1)
|
---|
63 | segments=m_dh.parameters.qmu_mass_flux_segments;
|
---|
64 | m_dh.parameters.qmu_mass_flux_segments=cell(size(m_dh.parameters.qmu_mass_flux_num_segments));
|
---|
65 | ipt=1;
|
---|
66 | for i=1:length(m_dh.parameters.qmu_mass_flux_num_segments)
|
---|
67 | if m_dh.parameters.qmu_mass_flux_num_segments(i)
|
---|
68 | m_dh.parameters.qmu_mass_flux_segments{i}=segments(ipt:ipt+m_dh.parameters.qmu_mass_flux_num_segments(i)-1,:);
|
---|
69 | ipt=ipt+m_dh.parameters.qmu_mass_flux_num_segments(i);
|
---|
70 | end
|
---|
71 | end
|
---|
72 | clear segments
|
---|
73 | end
|
---|
74 |
|
---|
75 | if isnumeric(m_dh.parameters.qmu_mass_flux_segments)
|
---|
76 | response=MassFlux(m_dh.elements,m_dh.nodes,m_dh.vertices,m_dh.loads,m_dh.materials,m_dh.parameters,results.u_g);
|
---|
77 | else
|
---|
78 | save=m_dh.parameters.qmu_mass_flux_segments;
|
---|
79 | m_dh.parameters.qmu_mass_flux_segments=m_dh.parameters.qmu_mass_flux_segments{indx};
|
---|
80 | response=MassFlux(m_dh.elements,m_dh.nodes,m_dh.vertices,m_dh.loads,m_dh.materials,m_dh.parameters,results.u_g);
|
---|
81 | m_dh.parameters.qmu_mass_flux_segments=save;
|
---|
82 | clear save
|
---|
83 | end
|
---|
84 |
|
---|
85 | elseif isstokes,
|
---|
86 |
|
---|
87 | % for now, separate all segments from double array for parallel to make cells
|
---|
88 | if (length(m_ds.parameters.qmu_mass_flux_num_segments) > 1)
|
---|
89 | segments=m_ds.parameters.qmu_mass_flux_segments;
|
---|
90 | m_ds.parameters.qmu_mass_flux_segments=cell(size(m_ds.parameters.qmu_mass_flux_num_segments));
|
---|
91 | ipt=1;
|
---|
92 | for i=1:length(m_ds.parameters.qmu_mass_flux_num_segments)
|
---|
93 | if m_ds.parameters.qmu_mass_flux_num_segments(i)
|
---|
94 | m_ds.parameters.qmu_mass_flux_segments{i}=segments(ipt:ipt+m_ds.parameters.qmu_mass_flux_num_segments(i)-1,:);
|
---|
95 | ipt=ipt+m_ds.parameters.qmu_mass_flux_num_segments(i);
|
---|
96 | end
|
---|
97 | end
|
---|
98 | clear segments
|
---|
99 | end
|
---|
100 |
|
---|
101 | if isnumeric(m_ds.parameters.qmu_mass_flux_segments)
|
---|
102 | response=MassFlux(m_ds.elements,m_ds.nodes,m_ds.vertices,m_ds.loads,m_ds.materials,m_ds.parameters,results.u_g);
|
---|
103 | else
|
---|
104 | save=m_ds.parameters.qmu_mass_flux_segments;
|
---|
105 | m_ds.parameters.qmu_mass_flux_segments=m_ds.parameters.qmu_mass_flux_segments{indx};
|
---|
106 | response=MassFlux(m_ds.elements,m_ds.nodes,m_ds.vertices,m_ds.loads,m_ds.materials,m_ds.parameters,results.u_g);
|
---|
107 | m_ds.parameters.qmu_mass_flux_segments=save;
|
---|
108 | clear save
|
---|
109 | end
|
---|
110 | else
|
---|
111 | error('qmuresponse error message: unsupported analysis type for mass_flux computation!');
|
---|
112 | end
|
---|
113 | else
|
---|
114 | error(['qmuresponse error message: unknown descriptor ' descriptor]);
|
---|
115 | end
|
---|