1 | function [intData, meanData, areas] = integrateOverDomain(md, data, masked, weights)
|
---|
2 | % integrateOverDomain - integrating data over the whole domain
|
---|
3 | %
|
---|
4 | % intData: integral of the data over each element
|
---|
5 | % meanData: intData/areas
|
---|
6 | % areas: areas of the domain
|
---|
7 | if nargin < 4
|
---|
8 | weights = ones(size(data));
|
---|
9 | if nargin<3
|
---|
10 | masked = logical(zeros(size(data)));
|
---|
11 | end
|
---|
12 | end
|
---|
13 |
|
---|
14 | masked = masked | isnan(data) | isnan(weights);
|
---|
15 | % Set the area with masked=1 to nan
|
---|
16 | data(masked) = nan;
|
---|
17 | weights(masked) =nan;
|
---|
18 |
|
---|
19 |
|
---|
20 | % get the mesh
|
---|
21 | elements=md.mesh.elements;
|
---|
22 | x=md.mesh.x;
|
---|
23 | y=md.mesh.y;
|
---|
24 |
|
---|
25 | %compute areas;
|
---|
26 | eleAreas=GetAreas(elements,x,y);
|
---|
27 |
|
---|
28 | % integrate nodal data to element
|
---|
29 | eleData = 1/3*eleAreas.*(data(elements(:,1),:).*weights(elements(:,1),:) + data(elements(:,2),:).*weights(elements(:,2),:) + data(elements(:,3),:).*weights(elements(:,3),:));
|
---|
30 | eleAreas = 1/3*eleAreas.*(weights(elements(:,1),:)+weights(elements(:,2),:)+weights(elements(:,3),:));
|
---|
31 |
|
---|
32 | intData = sum(eleData, 1, 'omitnan');
|
---|
33 | areas = sum(eleAreas, 1, 'omitnan');
|
---|
34 | meanData = intData ./ areas;
|
---|