글로벌 희소 유한 요소 행렬의 Dirichlet 경계 조건이 실제로 효율적으로 구현되는 방법이 궁금합니다. 예를 들어 전역 유한 요소 행렬은 다음과 같습니다.
그런 다음 첫 번째 노드에 Dirichlet 조건을 적용하려면 () 첫 번째 행을 0으로 설정하고 1을 오른쪽에서 첫 번째 열을 뺍니다. 예를 들어 우리 시스템은 다음과 같습니다.
이것은 이론적으로는 훌륭하지만 훌륭하지만 K 행렬이 CRS (압축 된 행 형식)로 저장된 경우 열을 오른쪽으로 이동하면 대형 시스템의 경우 비용이 많이 듭니다 (많은 노드가 디 리클 렛임). 대안은 Dirichlet 조건에 해당하는 열을 오른쪽으로 이동하지 않는 것입니다. 즉, 시스템은 다음과 같습니다.
그러나 이것은 시스템이 더 이상 대칭이 아니므로 더 이상 사전 조정 된 켤레 구배 (또는 다른 대칭 솔버)를 사용할 수 없다는 점에서 큰 단점이 있습니다. 내가 찾은 흥미로운 해결책 중 하나는 Gennadiy Nikishkov의 "Java에서 유한 요소 프로그래밍"책에서 찾은 "다수의 방법"입니다. 이 방법은 배정 밀도에 약 16 자리의 정확도 만 포함한다는 사실을 사용합니다. 에 1을 넣는 대신우리는 많은 수를 배치합니다. 예를 들어 시스템은 다음과 같습니다.
이 방법의 장점은 매트릭스의 대칭성을 유지하면서도 희소 한 저장 형식에 매우 효율적이라는 것입니다. 내 질문은 다음과 같습니다.
Dirichlet 경계 조건은 일반적으로 열 / 유체에 대한 유한 요소 코드로 어떻게 구현됩니까? 사람들은 일반적으로 많은 수의 방법을 사용합니까 아니면 다른 일을합니까? 누군가 볼 수있는 많은 수의 방법에 불리한 점이 있습니까? 나는이 문제를 해결하는 대부분의 상용 및 비상업적 코드에 사용되는 표준 효율적인 방법이 있다고 가정하고 있습니다 (분명히 모든 상용 유한 요소 솔버의 모든 내부 작동을 사람들이 알기를 기대하지는 않지만이 문제는 기본 / 기본적 인 것처럼 보입니다. 누군가가 그러한 프로젝트를 수행하고 지침을 제공 할 수있을 정도로 충분히).