public void Multiply(Vector lhs, Vector rhs)
 {
     rhs.Clear(); //TODO: perhaps this should be done outside.
     foreach (var keyFactor in matrixManagers)
     {
         int id = keyFactor.Key;
         IFeti1SubdomainMatrixManager matrixManager = keyFactor.Value;
         SignedBooleanMatrixColMajor  B             = lagrangeEnumerator.BooleanMatrices[id];
         Vector FBx  = matrixManager.MultiplyInverseKffTimes(B.Multiply(lhs, true));
         Vector BFBx = B.Multiply(FBx, false);
         rhs.AddIntoThis(BFBx);
     }
 }
        public Vector Multiply(Vector lhs)
        {
            var rhs = Vector.CreateZero(Order);

            foreach (var keyFactor in matrixManagers)
            {
                int id = keyFactor.Key;
                IFeti1SubdomainMatrixManager matrixManager = keyFactor.Value;
                SignedBooleanMatrixColMajor  B             = lagrangeEnumerator.BooleanMatrices[id];
                Vector FBx  = matrixManager.MultiplyInverseKffTimes(B.Multiply(lhs, true));
                Vector BFBx = B.Multiply(FBx, false);
                rhs.AddIntoThis(BFBx);
            }
            return(rhs);
        }