Raw File
function Mass=MassMatrix(T,coeffs,k,formula)

%{M1,M2,...}=MassMatrix(T,{c1,c2,...},k,formula)
%Input:
%           T: expanded etrahedrization
% {c1,c2,...}: cell array with vectorized functions of three variables
%           k: polynomial degree
%     formula: quadrature formula in 3d (N x 5 matrix)
%
%Output:
% {M1,M2,...}: each cell is d3 x d3 x Nelts (\int_K c{l} P_i^K P_j^K )           
%
%Last modified: March 14, 2013

Nnodes=size(formula,1);
Nelts=size(T.elements,1);
d3=nchoosek(k+3,3);

x=T.coordinates(:,1);x=formula(:,1:4)*x(T.elements');
y=T.coordinates(:,2);y=formula(:,1:4)*y(T.elements');
z=T.coordinates(:,3);z=formula(:,1:4)*z(T.elements'); % Nnd x Nelts
xhat=formula(:,2);
yhat=formula(:,3);
zhat=formula(:,4);

P=dubiner3d(2*xhat-1,2*yhat-1,2*zhat-1,k);  % Nnd x d3

nMass=size(coeffs,2);
Mass=cell(1,nMass);
for n=1:nMass
    c=coeffs{n};
    C=bsxfun(@times,T.volume',c(x,y,z));           % Nnd x Nelts
    mass=zeros(d3,Nelts*d3);
    for q=1:Nnodes
        mass=mass+kron(C(q,:),formula(q,5)*P(q,:)'*P(q,:));
    end
    mass=reshape(mass,[d3,d3,Nelts]);
    Mass{n}=mass;
end
return
back to top