Como posso calcular o complemento Schur:
Onde
(em alguns pedidos) é uma matriz PETSc ( Mat
)?
fonte
Como posso calcular o complemento Schur:
Onde
(em alguns pedidos) é uma matriz PETSc ( Mat
)?
É muito caro calcular o complemento de Schur de uma matriz e raramente é necessário na prática. O PETSc recomenda evitar algoritmos necessários. O complemento Schur de uma matriz (denso ou esparso) é essencialmente sempre denso; portanto, comece por:
MatLUFactor()
MatCholeskyFactor()
MatGetFactor()
MatLUFactorSymbolic()
MatLUFactorNumeric()
A
MatMatSolve(A,Kba,T)
.MatMatMult(Kab,T,MAT_INITIAL_MATRIX,1.0,&S)
.MatAXPY(S,-1.0,Kbb,MAT_SUBSET_NONZERO)
.MatScale(S,-1.0)
Para computar complementos Schur como esse, não faz sentido usar os KSP
solucionadores iterativos, pois para solucionar muitos problemas de tamanho moderado, usar uma fatoração direta é muito mais rápido que os solucionadores iterativos. Como você pode ver, isso requer uma grande quantidade de espaço de trabalho e computação, portanto é melhor evitar. No entanto, não é necessário montar o complemento Schur para resolver sistemas com ele. Use para criar uma matriz que aplique a ação de (usando para resolver com ), mas não seja montada.MatCreateSchurComplement(Kaa,Kaa_pre,Kab,Kba,Kbb,&S)
S
Kaa_pre
Kaa
Como alternativa, se você já possui uma matriz de blocos (em alguns pedidos), é possível crie conjuntos de índices ( ) isa e isb para endereçar cada bloco e use para criar o complemento Schur e / ou uma aproximação adequada para o pré-condicionamento. Como é geralmente denso, os métodos padrão de pré-condicionamento geralmente não podem ser aplicados diretamente aos complementos de Schur. Existem muitas abordagens para pré-condicionar os complementos de Schur, incluindo o uso da aproximação SIMPLE para criar uma matriz esparsa que se aproxima da Complemento Schur (retornado por padrão para a matriz "pré-condicionada" opcional ).
IS
MatGetSchurComplement()
MatGetSchurComplement()
Outra alternativa é interpretar as matrizes como operadores diferenciais e aplicar argumentos aproximados do comutador para encontrar uma operação espectral equivalente que possa ser aplicada com eficiência (consulte os pré-condicionadores "PCD" de Elman, Silvester e Wathen). Uma variante disso é o comutador de mínimos quadrados, que está intimamente relacionado ao pseudoinverso de Moore-Penrose e está disponível no PCLSC
qual opera em matrizes do tipo MATSCHURCOMPLEMENT
.