source: issm/trunk-jpl/src/m/contrib/chenggong/dataprocessing/computeGrad.m@ 27694

Last change on this file since 27694 was 27694, checked in by Cheng Gong, 2 years ago

ADD: a function to interpolate ice mask from Greene monthly reconstruction data

File size: 1.7 KB
Line 
1function [gradx, grady]=computeGrad(index,x,y,field)
2%COMPUTEGRAD - compute the gradient from a field
3
4%some variables
5numberofnodes=length(x);
6numberofelements=size(index,1);
7numberoftime = size(field, 2);
8
9%some checks
10if (length(field)~=numberofnodes) && (length(field)~=numberofelements)
11 error('ComputeHessian error message: the given field size not supported yet');
12end
13%initialization
14line=index(:);
15linesize=3*numberofelements;
16
17%get areas and nodal functions coefficients N(x,y)=alpha x + beta y + gamma
18[alpha, beta]=GetNodalFunctionsCoeff(index,x,y);
19areas=GetAreas(index,x,y);
20
21%compute weights that hold the volume of all the element holding the node i
22weights=sparse(line,ones(linesize,1),repmat(areas,3,1),numberofnodes,1);
23
24%compute field on nodes if on elements
25if length(field)==numberofelements
26 field=sparse(line,ones(linesize,1),repmat(areas.*field,3,1),numberofnodes,1)./weights ;
27end
28
29%Compute gradient for each element
30if numberoftime == 1
31 grad_elx=sum(field(index).*alpha,2);
32 grad_ely=sum(field(index).*beta,2);
33else
34 grad_elx = zeros(numberofelements,numberoftime);
35 grad_ely = zeros(numberofelements,numberoftime);
36 for i = 1:3
37 grad_elx = grad_elx + field(index(:,i), :).*alpha(:,i);
38 grad_ely = grad_ely + field(index(:,i), :).*beta(:,i);
39 end
40end
41%Compute gradient for each node (average of the elements around)
42gradx=sparse(repmat(line,1,numberoftime),cumsum(ones(linesize,numberoftime),2),repmat(areas.*grad_elx,3,1),numberofnodes,numberoftime);
43grady=sparse(repmat(line,1,numberoftime),cumsum(ones(linesize,numberoftime),2),repmat(areas.*grad_ely,3,1),numberofnodes,numberoftime);
44gradx=gradx./weights;
45grady=grady./weights;
Note: See TracBrowser for help on using the repository browser.