질문 : 유한 요소 행렬의 희소 구조를 정확하고 효율적으로 계산하기 위해 어떤 방법을 사용할 수 있습니까?
정보 : 저는 2 중 라그랑주 단위로 Galerkin의 방법을 사용하고 C로 작성하고 희소 행렬 저장 및 KSP 루틴에 PETSc를 사용하여 포아송 압력 방정식 솔버를 작업하고 있습니다. PETSc를 효율적으로 사용하려면 전역 강성 매트릭스를위한 메모리를 미리 할당해야합니다.
현재 행당 0이 아닌 수를 다음과 같이 추정하기 위해 모의 어셈블리를 수행하고 있습니다 (의사 코드)
int nnz[global_dim]
for E=1 to NUM_ELTS
for i=1 to 6
gi = global index of i
if node gi is free
for j=1 to 6
gj = global index of j
if node gj is free
nnz[i]++
그러나 일부 노드-노드 상호 작용이 여러 요소에서 발생할 수 있기 때문에 nnz를 과대 평가합니다.
내가 찾은 i, j 상호 작용을 추적하려고 시도했지만 많은 메모리를 사용하지 않고이 작업을 수행하는 방법을 잘 모르겠습니다. 또한 노드를 반복하고 해당 노드를 중심으로 한 기본 함수의 지원을 찾을 수 있지만 각 노드의 모든 요소를 검색해야하므로 비효율적입니다.
나는 발견 이 특히 썼다 스테파노 M에서, 몇 가지 유용한 정보를 포함 최근의 질문에,
내 조언은 파이썬이나 C에서 그것을 구현하여 일부 그래프 이론적 개념을 적용하는 것입니다. 목록 또는 키 사전이 일반적으로 선택됩니다.
이에 대한 자세한 내용과 리소스를 찾고 있습니다. 나는 많은 그래프 이론을 알지 못했고, 유용 할 수있는 모든 CS 트릭에 익숙하지 않습니다 (수학적 측면에서 접근하고 있습니다).
감사!