[26975] | 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
|
---|
[27694] | 10 | masked = logical(zeros(size(data)));
|
---|
[26975] | 11 | end
|
---|
| 12 | end
|
---|
| 13 |
|
---|
[27694] | 14 | masked = masked | isnan(data) | isnan(weights);
|
---|
[26975] | 15 | % Set the area with masked=1 to nan
|
---|
| 16 | data(masked) = nan;
|
---|
| 17 | weights(masked) =nan;
|
---|
| 18 |
|
---|
[27694] | 19 |
|
---|
[26975] | 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 |
|
---|
[27694] | 32 | intData = sum(eleData, 1, 'omitnan');
|
---|
| 33 | areas = sum(eleAreas, 1, 'omitnan');
|
---|
| 34 | meanData = intData ./ areas;
|
---|