If the vectors are ghosted then we will update ghost values after every operation. This should be done after we add values (we should interleave parts and penalty parts in the normal way). Hence - we should set them to un-ghosted immediately, do arithmetic, do ghost updates, and then save the vectors.
It might be possible to combine some operations, like assignment with scaling.
More callgrind stuff.