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); }