function Int=FEintegrateProduct2D(CtrlVar,MUA,varargin)
Int=FEintegrateProduct2D(CtrlVar,MUA,varargin)
calculates the integral of the product of the nodal variable varargin over each of the elements of the FE mesh.
Example: To calculate the product of h and s over the mesh:
Int=FEintegrateProduct2D(CtrlVar,MUA,h,s)
Testing integration using different quadrature rules of different degrees
coordinates=[0 0 ; 0 1 ; 1 1 ; 1 0]; connectivity=[1 2 4 ; 4 2 3 ]; CtrlVar=Ua2D_DefaultParameters; CtrlVar.TriNodes=3; MUA=CreateMUA(CtrlVar,connectivity,coordinates);
CtrlVar.TriNodes=10; MUA=UpdateMUA(CtrlVar,MUA); x=MUA.coordinates(:,1); y=MUA.coordinates(:,2) ; p=4; f=(1+x+y).^p;
I=0 ;
F=nan(10,1);
D=nan(10,1);
for Degree=1:10
MUA.QuadratureRuleDegree=Degree; Q=quadtriangle(Degree,'Type','nonproduct','Points','inside','Domain',[0 0 ; 1 0 ; 0 1]) ; MUA.nip=size(Q.Points,1); MUA.niph=size(Q.Points,1); CtrlVar.nip=MUA.nip; CtrlVar.niph=MUA.niph; MUA.points=Q.Points; MUA.weights=Q.Weights; [MUA.Deriv,MUA.DetJ]=CalcMeshDerivatives(CtrlVar,MUA.connectivity,MUA.coordinates,MUA.nip,MUA.points);
Int=FEintegrateProduct2D(CtrlVar,MUA,x,y,f,f,f,f,f,f,f,f,f) ;
Int=sum(Int);
fprintf(' Degree %i \t nip %i \t Int=%f \n ',Degree,MUA.nip,Int)
I=I+1 ; F(I)=Int; D(I)=Degree;
end
figure ; plot(D,F,'-x') xlabel('Degree') ylabel('Fint')
%%
ndim=2; Int=zeros(MUA.Nele,1); for Iint=1:MUA.nip fun=shape_fun(Iint,ndim,MUA.nod,MUA.points) ; detJ=MUA.DetJ(:,Iint); detJw=detJ*MUA.weights(Iint); fint=1; for k=1:numel(varargin) f=varargin{k}; fnod=reshape(f(MUA.connectivity,1),MUA.Nele,MUA.nod); fint=fnod*fun.*fint; end Int=Int+fint.*detJw; end
end