Como remover os movimentos do corpo rígido na elasticidade linear?

9

Quero resolver onde K é minha matriz de rigidez. No entanto, algumas restrições podem estar ausentes e, portanto, algum movimento corporal rígido ainda pode estar presente no sistema (devido ao valor próprio zero). Como estou usando o CG para resolver o sistema linear, isso não é aceitável, já que às vezes o CG não converge em problemas semi-positivos (mas às vezes posso convergir).Kvocê=bK

Na verdade, estou usando uma abordagem de deslocamento penalizado no sentido de adicionar uma penalidade no formulário para a energia elástica. Então a energia lê W ( u ) : = 1α||você||2ondeα étomado como proporcional a alguma entrada diagonal da matriz de rigidez. Mas, na verdade, isso tem o efeito de amortecer algum modo de deformação que eu gostaria de ter em algum momento.

W(você): =1 12vocêT(K+αEu)você-btvocê
α

Alguma pergunta é minha:

a) eu poderia transformar o sistema original de modo a torná-lo livre de singularidade e definitivo positivo (como transformação de coordenadas ou transformação de congruência ou qualquer outra coisa)? Minha idéia é usar essa transformação para ainda usar CG no problema transformado

b) Existe alguma maneira padrão de lidar com essas singularidades?

Muito obrigado !

Atenciosamente,

Tom

Tom
fonte

Respostas:

6

você(x0 0)=0 0x0 0

Wolfgang Bangerth
fonte
11
Obrigado! Sim, mas no meu caso, tenho várias subestruturas flutuantes e não sei dizer quais nós (três não colineares em 3D) a serem corrigidos. É por isso que me pergunto se não há solução de nível superior, pois no meu caso o espaço nulo é bem conhecido.
22412 Tom
Se você tiver várias estruturas, precisará corrigir um nó para cada estrutura. Não importa qual, basta escolher um por estrutura.
Wolfgang Bangerth
3
@WolfgangBangerth Esta é a elasticidade 3D, portanto você precisaria fixar três pontos não colineares para controlar o espaço nulo da dimensão 6. Fixar esses três deslocamentos é uma perturbação de classificação 9 e não é fácil garantir que a modificação de classificação 3 além da espaço nulo não altera a solução. Para qualquer escolha de pontos e valores a serem fixados, existe uma família tridimensional do lado direito, na qual o problema fixado fornece a resposta correta para apenas um membro.
Jed Brown
Não, você não pode fixar 3 pontos por 9 restrições, porque também fixaria suas distâncias relativas. Se suas condições de contorno realmente não fornecerem outras restrições (por exemplo, se não houver deslocamento normal em um círculo), será necessário fixar 1 ponto + vários ângulos de rotação em dois outros pontos para um total de 6 restrições.
Wolfgang Bangerth 22/10/12
6

Se você conhece o espaço nulo, é possível compatibilizar o lado direito e fazer com que o método Krylov impeça o pré-condicionador de causar poluição, consulte Por que fixar um ponto para remover um espaço nulo com defeito? para uma discussão mais aprofundada. No PETSc, isso é feito usando o MatNullSpaceobjeto Observe que você pode fornecer sua própria função para projetar o espaço nulo, o que seria útil para reduzir o custo de projeção quando você tiver muitas estruturas flutuantes.

Se você não conhece o espaço nulo e não pode evitar um lado direito incompatível, existem métodos Krylov especializados, como o MINRES-QLP, que podem encontrar a solução de norma mínima. Essa abordagem pode ser útil se você tiver dobradiças e conexões de ponto único que apenas acoplam alguns modos. Observe que você ainda deve ter cuidado com o pré-condicionador que está causando poluição (por exemplo, devido à fatoração da LU encontrar zero pivôs, talvez em um nível aproximado de multigrid).

Jed Brown
fonte
Obrigado Jed! Pensei em remover por projeção o espaço nulo diretamente no meu método iterativo. Mas eu queria saber se não seria muito caro (posso criar um operador que projete o espaço nulo, pois é de elasticidade realmente trivial). Também acho que o residual deve ser projetado também?
Tom
2
K=(Eu-N)P-1 1UMA{b,Kb,K2b,...}MatSetNullSpace()