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 | isSIA=m_dhu.parameters.isSIA;
|
---|
31 | isSSA=m_dh.parameters.isSSA;
|
---|
32 | isHO=m_dh.parameters.isHO;
|
---|
33 | isFS=m_ds.parameters.isFS;
|
---|
34 | if isSIA,
|
---|
35 |
|
---|
36 | % for now, separate all segments from double array for parallel to make cells
|
---|
37 | if (length(m_dhu.parameters.qmu_mass_flux_num_segments) > 1)
|
---|
38 | segments=m_dhu.parameters.qmu_mass_flux_segments;
|
---|
39 | m_dhu.parameters.qmu_mass_flux_segments=cell(size(m_dhu.parameters.qmu_mass_flux_num_segments));
|
---|
40 | ipt=1;
|
---|
41 | for i=1:length(m_dhu.parameters.qmu_mass_flux_num_segments)
|
---|
42 | if m_dhu.parameters.qmu_mass_flux_num_segments(i)
|
---|
43 | m_dhu.parameters.qmu_mass_flux_segments{i}=segments(ipt:ipt+m_dhu.parameters.qmu_mass_flux_num_segments(i)-1,:);
|
---|
44 | ipt=ipt+m_dhu.parameters.qmu_mass_flux_num_segments(i);
|
---|
45 | end
|
---|
46 | end
|
---|
47 | clear segments
|
---|
48 | end
|
---|
49 |
|
---|
50 | if isnumeric(m_dhu.parameters.qmu_mass_flux_segments)
|
---|
51 | response=MassFlux(m_dhu.elements,m_dhu.nodes,m_dhu.vertices,m_dhu.loads,m_dhu.materials,m_dhu.parameters,results.u_g);
|
---|
52 | else
|
---|
53 | save=m_dhu.parameters.qmu_mass_flux_segments;
|
---|
54 | m_dhu.parameters.qmu_mass_flux_segments=m_dhu.parameters.qmu_mass_flux_segments{indx};
|
---|
55 | response=MassFlux(m_dhu.elements,m_dhu.nodes,m_dhu.vertices,m_dhu.loads,m_dhu.materials,m_dhu.parameters,results.u_g);
|
---|
56 | m_dhu.parameters.qmu_mass_flux_segments=save;
|
---|
57 | clear save
|
---|
58 | end
|
---|
59 |
|
---|
60 | elseif isSSA || isHO,
|
---|
61 |
|
---|
62 | % for now, separate all segments from double array for parallel to make cells
|
---|
63 | if (length(m_dh.parameters.qmu_mass_flux_num_segments) > 1)
|
---|
64 | segments=m_dh.parameters.qmu_mass_flux_segments;
|
---|
65 | m_dh.parameters.qmu_mass_flux_segments=cell(size(m_dh.parameters.qmu_mass_flux_num_segments));
|
---|
66 | ipt=1;
|
---|
67 | for i=1:length(m_dh.parameters.qmu_mass_flux_num_segments)
|
---|
68 | if m_dh.parameters.qmu_mass_flux_num_segments(i)
|
---|
69 | m_dh.parameters.qmu_mass_flux_segments{i}=segments(ipt:ipt+m_dh.parameters.qmu_mass_flux_num_segments(i)-1,:);
|
---|
70 | ipt=ipt+m_dh.parameters.qmu_mass_flux_num_segments(i);
|
---|
71 | end
|
---|
72 | end
|
---|
73 | clear segments
|
---|
74 | end
|
---|
75 |
|
---|
76 | if isnumeric(m_dh.parameters.qmu_mass_flux_segments)
|
---|
77 | response=MassFlux(m_dh.elements,m_dh.nodes,m_dh.vertices,m_dh.loads,m_dh.materials,m_dh.parameters,results.u_g);
|
---|
78 | else
|
---|
79 | save=m_dh.parameters.qmu_mass_flux_segments;
|
---|
80 | m_dh.parameters.qmu_mass_flux_segments=m_dh.parameters.qmu_mass_flux_segments{indx};
|
---|
81 | response=MassFlux(m_dh.elements,m_dh.nodes,m_dh.vertices,m_dh.loads,m_dh.materials,m_dh.parameters,results.u_g);
|
---|
82 | m_dh.parameters.qmu_mass_flux_segments=save;
|
---|
83 | clear save
|
---|
84 | end
|
---|
85 |
|
---|
86 | elseif isFS,
|
---|
87 |
|
---|
88 | % for now, separate all segments from double array for parallel to make cells
|
---|
89 | if (length(m_ds.parameters.qmu_mass_flux_num_segments) > 1)
|
---|
90 | segments=m_ds.parameters.qmu_mass_flux_segments;
|
---|
91 | m_ds.parameters.qmu_mass_flux_segments=cell(size(m_ds.parameters.qmu_mass_flux_num_segments));
|
---|
92 | ipt=1;
|
---|
93 | for i=1:length(m_ds.parameters.qmu_mass_flux_num_segments)
|
---|
94 | if m_ds.parameters.qmu_mass_flux_num_segments(i)
|
---|
95 | m_ds.parameters.qmu_mass_flux_segments{i}=segments(ipt:ipt+m_ds.parameters.qmu_mass_flux_num_segments(i)-1,:);
|
---|
96 | ipt=ipt+m_ds.parameters.qmu_mass_flux_num_segments(i);
|
---|
97 | end
|
---|
98 | end
|
---|
99 | clear segments
|
---|
100 | end
|
---|
101 |
|
---|
102 | if isnumeric(m_ds.parameters.qmu_mass_flux_segments)
|
---|
103 | response=MassFlux(m_ds.elements,m_ds.nodes,m_ds.vertices,m_ds.loads,m_ds.materials,m_ds.parameters,results.u_g);
|
---|
104 | else
|
---|
105 | save=m_ds.parameters.qmu_mass_flux_segments;
|
---|
106 | m_ds.parameters.qmu_mass_flux_segments=m_ds.parameters.qmu_mass_flux_segments{indx};
|
---|
107 | response=MassFlux(m_ds.elements,m_ds.nodes,m_ds.vertices,m_ds.loads,m_ds.materials,m_ds.parameters,results.u_g);
|
---|
108 | m_ds.parameters.qmu_mass_flux_segments=save;
|
---|
109 | clear save
|
---|
110 | end
|
---|
111 | else
|
---|
112 | error('qmuresponse error message: unsupported analysis type for mass_flux computation!');
|
---|
113 | end
|
---|
114 | else
|
---|
115 | error(['qmuresponse error message: unknown descriptor ' descriptor]);
|
---|
116 | end
|
---|