Estou me perguntando como as condições de contorno de Dirichlet em matrizes esparsas de elementos finitos globais são realmente implementadas com eficiência. Por exemplo, digamos que nossa matriz global de elementos finitos fosse:
Em seguida, para aplicar uma condição Dirichlet no primeiro nó ( ), a primeira linha, colocamos 1 em e a primeira coluna do lado direito. Por exemplo, nosso sistema se tornaria: K 11
Isso é bom em teoria, mas se nossa matriz K for armazenada em formato de linha compactada (CRS), mover as colunas para o lado direito se tornará caro para sistemas grandes (com muitos nós sendo dirichlet). Uma alternativa seria não mover as colunas correspondentes a uma condição de Dirichlet para o lado direito, ou seja, nosso sistema se tornaria:
No entanto, isso tem uma grande desvantagem, pois o sistema não é mais simétrico e, portanto, não podemos mais usar gradiente conjugado pré-condicionado (ou outros solucionadores simétricos). Uma solução interessante que me deparei é o "Método de grandes números", que encontrei no livro "Programação de elementos finitos em Java", de Gennadiy Nikishkov. Este método usa o fato de que a precisão dupla contém apenas cerca de 16 dígitos de precisão. Em vez de colocar um 1 na posição , colocamos um número grande. Por exemplo, nosso sistema se torna: K = [ 1.0 e 64 2 0 - 1 0 2 4 1 0 0 0 1 6 3 2 - 1 0 3 7 0 0 0 2 0 3 ]
As vantagens deste método são que ele mantém a simetria da matriz e também é muito eficiente para formatos de armazenamento esparsos. Minhas perguntas são as seguintes:
Como as condições de contorno de Dirichlet são normalmente implementadas em códigos de elementos finitos para calor / fluidos? As pessoas costumam usar o método de grandes números ou fazem outra coisa? Existe alguma desvantagem no método de grandes números que alguém pode ver? Suponho que provavelmente exista algum método eficiente padrão usado na maioria dos códigos comerciais e não comerciais que resolva esse problema (obviamente, não espero que as pessoas conheçam todo o funcionamento interno de todos os solucionadores de elementos finitos comerciais, mas esse problema parece básico / fundamental o suficiente para que alguém tenha trabalhado em tais projetos e possa fornecer orientação).