void BilinearForm :: Assemble ()
{
int i, j;
ARRAY<int> dnums;
DenseMatrix elmat;
ElementTransformation eltrans;
int ndof = fespace.GetNDof();
BaseMatrix * mat = mats.Last();
mat->SetScalar (0);
LocalHeap locheap (1000000);
int ne = ma.GetNE();
for (i = 1; i <= ne; i++)
{
locheap.CleanUp();
if (!fespace.DefinedOn (ma.GetElIndex (i))) continue;
ma.GetElementTransformation (i, eltrans);
const FiniteElement & fel = fespace.GetFE (i);
fespace.GetDofNrs (i, dnums);
for (j = 1; j <= parts.Size(); j++)
{
const BilinearFormIntegrator & bfi = *parts.Get(j);
if (bfi.BoundaryForm()) continue;
bfi.AssembleElementMatrix (fel, eltrans, elmat, &locheap);
fespace.TransformMatrix (i, elmat);
mat->AddElementMatrix (dnums, elmat);
}
}
int nse = ma.GetNSE();
for (i = 1; i <= nse; i++)
{
locheap.CleanUp();
if (!fespace.DefinedOnBoundary (ma.GetSElIndex (i))) continue;
ma.GetSurfaceElementTransformation (i, eltrans);
const FiniteElement & fel = fespace.GetSFE (i);
fespace.GetSDofNrs (i, dnums);
for (j = 1; j <= parts.Size(); j++)
{
const BilinearFormIntegrator & bfi = *parts.Get(j);
if (!bfi.BoundaryForm()) continue;
bfi.AssembleElementMatrix (fel, eltrans, elmat, &locheap);
fespace.TransformSurfMatrix (i, elmat);
mat->AddElementMatrix (dnums, elmat);
}
}
}
Alphabetic index Hierarchy of classes