Zastanawiam się, w jaki sposób warunki brzegowe Dirichleta w globalnych macierzach rzadkich elementów skończonych są faktycznie skutecznie wdrażane. Powiedzmy na przykład, że nasza globalna macierz elementów skończonych była:
Następnie, aby zastosować warunek Dirichleta w pierwszym węźle () wyzerowalibyśmy pierwszy rząd, postawiliśmy 1 na i odejmij pierwszą kolumnę od prawej strony. Na przykład nasz system stałby się:
W teorii wszystko jest dobrze i dobrze, ale jeśli nasza macierz K jest przechowywana w formacie skompresowanego wiersza (CRS), wówczas przenoszenie kolumn po prawej stronie staje się kosztowne w przypadku dużych systemów (wiele węzłów jest dirichlet). Alternatywą byłoby nie przesunięcie kolumn odpowiadających warunkowi Dirichleta na prawą stronę, tzn. Nasz system stałby się:
Ma to jednak poważną wadę polegającą na tym, że system nie jest już symetryczny i dlatego nie możemy już używać wstępnie przygotowanego gradientu sprzężonego (lub innych symetrycznych solverów). Jednym z interesujących rozwiązań, na jakie natrafiłem, jest „Metoda dużych liczb”, którą znalazłem w książce „Programowanie elementów skończonych w Javie” Gennadiya Nikishkova. Ta metoda wykorzystuje fakt, że podwójna precyzja zawiera jedynie około 16 cyfr dokładności. Zamiast wstawiać 1 wpozycja umieszczamy dużą liczbę. Na przykład nasz system staje się:
Zaletą tej metody jest to, że utrzymuje symetrię matrycy, a jednocześnie jest bardzo wydajna w przypadku rzadkich formatów pamięci. Moje pytania są zatem następujące:
W jaki sposób warunki brzegowe Dirichleta są zazwyczaj realizowane w kodach elementów skończonych dla ciepła / płynów? Czy ludzie zwykle stosują metodę dużych liczb, czy robią coś innego? Czy jest jakaś wada metody dużych liczb, którą ktoś może zobaczyć? Zakładam, że w większości komercyjnych i niekomercyjnych kodów istnieje prawdopodobnie jakaś standardowa wydajna metoda, która rozwiązuje ten problem (oczywiście nie oczekuję, że ludzie będą znali wszystkie wewnętrzne działania każdego komercyjnego rozwiązania elementu skończonego, ale problem ten wydaje się podstawowy / fundamentalny wystarczy, że ktoś prawdopodobnie pracował nad takimi projektami i mógł udzielić wskazówek).