source: issm/trunk-jpl/src/m/qmu/qmuresponse.m@ 10937

Last change on this file since 10937 was 4431, checked in by jschierm, 15 years ago

Qmu: apply changes to hutter and stokes as well.

File size: 4.6 KB
Line 
1function response=qmuresponse(models,results,processedresults,descriptor)
2%QMURESPONSE - compute response function from model results.
3
4if strcmpi(descriptor,'max_vel'),
5 response=max(processedresults.vel);
6elseif strcmpi(descriptor,'min_vel'),
7 response=min(processedresults.vel);
8elseif strcmpi(descriptor,'max_vx'),
9 response=max(processedresults.vx);
10elseif strcmpi(descriptor,'max_abs_vx'),
11 response=max(abs(processedresults.vx));
12elseif strcmpi(descriptor,'min_vx'),
13 response=min(processedresults.vx);
14elseif strcmpi(descriptor,'max_vy'),
15 response=max(processedresults.vy);
16elseif strcmpi(descriptor,'max_abs_vy'),
17 response=max(abs(processedresults.vy));
18elseif strcmpi(descriptor,'min_vy'),
19 response=min(processedresults.vy);
20elseif 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
113else
114 error(['qmuresponse error message: unknown descriptor ' descriptor]);
115end
116
Note: See TracBrowser for help on using the repository browser.