diff --git a/fem/bilinearform.cpp b/fem/bilinearform.cpp index 7ada19dc0d..eb16d6d453 100644 --- a/fem/bilinearform.cpp +++ b/fem/bilinearform.cpp @@ -365,8 +365,32 @@ void BilinearForm::Assemble (int skip_zeros) if (bbfi.Size()) { + // Which boundary attributes need to be processed? + Array bdr_attr_marker(mesh->bdr_attributes.Size() ? + mesh->bdr_attributes.Max() : 0); + bdr_attr_marker = 0; + for (int k = 0; k < bbfi.Size(); k++) + { + if (bbfi_marker[k] == NULL) + { + bdr_attr_marker = 1; + break; + } + Array &bdr_marker = *bbfi_marker[k]; + MFEM_ASSERT(bdr_marker.Size() == bdr_attr_marker.Size(), + "invalid boundary marker for boundary integrator #" + << k << ", counting from zero"); + for (int i = 0; i < bdr_attr_marker.Size(); i++) + { + bdr_attr_marker[i] |= bdr_marker[i]; + } + } + for (i = 0; i < fes -> GetNBE(); i++) { + const int bdr_attr = mesh->GetBdrAttribute(i); + if (bdr_attr_marker[bdr_attr-1] == 0) { continue; } + const FiniteElement &be = *fes->GetBE(i); fes -> GetBdrElementVDofs (i, vdofs); eltrans = fes -> GetBdrElementTransformation (i);