- for b_sub, L_sub, a_sub, const_L, coeff_L, const_a, coeff_a in zip(
- b_local, L, a, constants_L, coeffs_L, constants_a, coeffs_a
- ):
- _cpp.fem.assemble_vector(b_sub, L_sub._cpp_object, const_L, coeff_L)
- _a_sub = [None if form is None else form._cpp_object for form in a_sub]
- _cpp.fem.apply_lifting(b_sub, _a_sub, const_a, coeff_a, bcs1, x0_local, alpha)
- _cpp.la.petsc.scatter_local_vectors(b, b_local, maps)
- b.ghostUpdate(addv=PETSc.InsertMode.ADD, mode=PETSc.ScatterMode.REVERSE)
- bcs0 = _bcs_by_block(_extract_spaces(L), _bcs)
- offset = 0
- b_array = b.getArray(readonly=False)
- for submap, bcs, _x0 in zip(maps, bcs0, x0_sub):
- size = submap[0].size_local * submap[1]
- for bc in bcs:
- bc.set(b_array[offset : offset + size], _x0, alpha)
- offset += size