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