public void GenerateMatrices(IMatrixView matrix, IModelOverlappingDecomposition modelOverlappingDecomposition) { _modelOverlappingDecomposition = modelOverlappingDecomposition; var interpolationMatrix = modelOverlappingDecomposition.CoarseSpaceInterpolation.Transpose(); var coarseSpaceMatrix = interpolationMatrix.ThisTimesOtherTimesThisTranspose(matrix); inverseCoarseMatrix = coarseSpaceMatrix.Invert(); }
public void GenerateMatrices(IMatrixView matrix, IModelOverlappingDecomposition modelOverlappingDecomposition) { _modelOverlappingDecomposition = modelOverlappingDecomposition; _matrixOrder = matrix.NumRows; inverseMatrices = new Matrix[modelOverlappingDecomposition.NumberOfSubdomains]; for (int i = 0; i < modelOverlappingDecomposition.NumberOfSubdomains; i++) { var subdomainConnectivity = modelOverlappingDecomposition.GetConnectivityOfSubdomain(i); var submatrix = matrix.GetSubmatrix(subdomainConnectivity, subdomainConnectivity).CopyToFullMatrix(); inverseMatrices[i] = submatrix.Invert(); } }
public Factory(IModelOverlappingDecomposition modelOverlappingDecomposition, IAsymmetricModel model) { _model = model; _modelOverlappingDecomposition = modelOverlappingDecomposition; }
public OverlappingAdditiveSchwarzPreconditioner(IMatrixView matrix, ICoarseProblemFactory coarseProblemFactory, LocalProblemsFactory localProblemsFactory, IModelOverlappingDecomposition modelOverlappingDecomposition, IAsymmetricModel model) { modelOverlappingDecomposition.DecomposeMatrix(); coarseProblemFactory.GenerateMatrices(matrix, modelOverlappingDecomposition); localProblemsFactory.GenerateMatrices(matrix, modelOverlappingDecomposition); var coarseProblemContribution = coarseProblemFactory.RetrievePreconditionerContribution(); var localProblemsContribution = localProblemsFactory.RetrievePreconditionerContribution(); var freeSubdomainDofs = model.GlobalRowDofOrdering.MapFreeDofsSubdomainToGlobal(model.Subdomains[0]); _preconditioner = coarseProblemContribution.Add(localProblemsContribution).GetSubmatrix(freeSubdomainDofs, freeSubdomainDofs); Order = _preconditioner.NumRows; }
public void GenerateMatrices(IMatrixView matrix, IModelOverlappingDecomposition modelOverlappingDecomposition) { throw new System.NotImplementedException(); }