Chcę rozwiązać gdzie jest moją macierzą sztywności. Jednak może brakować niektórych ograniczeń i dlatego w systemie może nadal występować sztywny ruch ciała (z powodu wartości własnej zero). Ponieważ używam CG do rozwiązywania układu liniowego, jest to niedopuszczalne, ponieważ czasami CG nie zbiega się w przypadku problemów częściowo dodatnich (ale czasami mogę się zbiegać).
Właściwie stosuję karę za przemieszczenie w tym sensie, że dodam karę za formę do energii sprężystej. Tak więc energia czyta
Niektóre moje pytanie brzmi:
a) czy mógłbym przekształcić oryginalny system, więc musi on być wolny od osobliwości i pozytywnie określony (taki jak transformacja współrzędnych lub transformacja zgodności, czy cokolwiek innego)? Moim pomysłem jest użycie takiej transformacji, aby nadal używać CG w przekształconym problemie
b) Czy istnieje jakiś standardowy sposób radzenia sobie z tymi osobliwościami?
Dziękuję Ci bardzo !
Z poważaniem,
Tomek
Jeśli znasz spację zerową, możesz ustawić zgodność prawej strony i ustawić metodę Kryłowa na zapobieganie zanieczyszczeniom przez kondycjoner, zobacz Dlaczego przypinanie punktu, aby usunąć spację zerową, jest złe? do dalszej dyskusji. W PETSc odbywa się to za pomocą
MatNullSpace
obiektu. Pamiętaj, że możesz podać własną funkcję do rzutowania pustej przestrzeni, co byłoby przydatne w celu zmniejszenia kosztów projekcji, gdy masz wiele struktur pływających.Jeśli nie znasz spacji zerowej i nie możesz uniknąć niezgodnej prawej strony, istnieją wyspecjalizowane metody Kryłowa, takie jak MINRES-QLP, które mogą znaleźć rozwiązanie normy minimalnej. Takie podejście może być przydatne, jeśli masz zawiasy i połączenia jednopunktowe, które łączą tylko niektóre tryby. Należy pamiętać, że nadal należy zachować ostrożność, aby czynnik przygotowujący powodował zanieczyszczenie (np. Ze względu na faktoryzację LU znajdującą zero osi, być może na grubym poziomie multigrid).
źródło
MatSetNullSpace()
.