public void CreateAndInvertCoarseProblemMatrix(Dictionary <int, HashSet <INode> > cornerNodesOfSubdomains, FetiDPDofSeparator dofSeparator, Dictionary <int, IFetiDPSubdomainMatrixManager> matrixManagers) { SkylineMatrix globalKccStar = CreateGlobalKccStar(cornerNodesOfSubdomains, dofSeparator, matrixManagers); this.inverseGlobalKccStar = globalKccStar.FactorLdl(true); }
/// <summary> /// Will do nothing if it was already called. To perform this for a different stiffness matrix, first call /// <see cref="Clear"/>. /// </summary> public void ExtractAndInvertKii(int[] internalDofs) { if (inverseKii != null) { return; } try { SkylineMatrix Kii = Krr.GetSubmatrixSymmetricSkyline(internalDofs); inverseKii = Kii.FactorLdl(true); } catch (MatrixDataOverwrittenException) { throw new InvalidOperationException( "The remainder-remainder stiffness submatrix of this subdomain has been overwritten and cannot be used" + " anymore. Try calling this method before factorizing/inverting it."); } }