콘텐츠로 이동

솔버·전처리

FrontISTR의 선형 솔버는 직접법 또는 반복법을 선택하고, 반복법에서는 전처리를 조합하여 선형 방정식을 푸는 구성이다. MPC 처리 방식과 접촉 자유도 소거는 다점 구속이나 접촉 구속을 포함하는 선형계를 어떤 형태로 다룰지를 결정하는 보조적인 선택이다.

기능의 전체 개요

솔버·전처리는 다음 선택지로 구성된다. 먼저 선형 솔버로 반복법과 직접법 중 하나를 선택하고, 반복법을 선택한 경우에만 전처리를 조합한다.

구분 주요 선택지 역할
반복법 CG, BiCGSTAB, GMRES, GPBiCG, GMRESR, GMRESREN 대규모 희소 행렬을 메모리 효율적으로 푼다.
반복법용 전처리 SSOR, 대각 스케일링, BILU, AMG, SAINV, RIF 반복법의 수렴성을 개선한다. 직접법에서는 사용하지 않는다.
직접법 MUMPS, MKL 분해를 통해 선형 방정식을 강건하게 푼다.
MPC 처리 방식 페널티법, MPC-CG법, 명시적 자유도 소거법 다점 구속을 선형계에 반영한다.
접촉 자유도 소거 자동, 항상 활성 SLAGRANGE 접촉에서 추가되는 접촉 자유도의 취급을 전환한다.
보조 기능 조건수 추정, 행렬 덤프, 로그 출력 디버깅, 수렴성 확인, 성능 평가를 보조한다.

병렬 실행에서는 영역 분할에 의한 MPI 병렬과 OpenMP 스레드 병렬을 조합할 수 있다. 반복법은 대규모 병렬 해석의 표준적인 선택지이며, 직접법은 라이브러리를 링크한 환경에서 더 강건한 풀이가 필요한 경우에 사용한다.

솔버·전처리 선택 방법

먼저 반복법과 직접법 중 어느 것을 사용할지 결정하고, 반복법을 선택한 경우에는 이어서 전처리를 선택한다.

판단 기준 권장되는 사고방식
문제 규모 중소규모에서는 직접법이 안정적이고 다루기 쉽다. 대규모에서는 반복법이 메모리 효율이 우수하다.
행렬의 대칭성 대칭 양의 정부호 문제에서는 CG를 후보로 한다. 비대칭 문제에서는 BiCGSTAB, GMRES, GPBiCG 등을 후보로 한다.
병렬 환경 MPI 병렬에서는 반복법과 영역 분할을 조합한다. OpenMP 병렬에서의 전처리에는 멀티컬러 대응 SSOR를 후보로 한다.
전처리(반복법 선택 시) 먼저 기본값인 SSOR를 시도하고, 다음으로 AMG를 검토한다. 수렴성이 좋을 때는 계산이 가벼운 SSOR, 복잡한 대규모 문제에는 AMG 전처리가 좋다.
접촉·MPC 접촉 해석이나 다점 구속을 포함하는 해석에서는 MPC 처리 방식과 접촉 자유도 소거의 선택이 수렴성과 강건성에 영향을 준다.
외부 라이브러리 MUMPS, MKL, AMG는 해당 라이브러리를 링크한 빌드에서 사용한다.

표준적인 해석에서는 수렴 판정값, 최대 반복 횟수, 전처리의 대각 보정 계수 등은 기본값 그대로도 충분히 동작한다. 수렴이 느리거나 발산하는 경우에만 반복법, 전처리, MPC 처리 방식, 접촉 자유도 소거를 순서대로 재검토한다. 파라미터의 값과 형식은 키워드 레퍼런스의 !SOLVER를 참조한다.

반복법

반복법은 대규모 희소 행렬을 대상으로 행렬-벡터 곱과 전처리를 반복하여 해를 갱신하는 방법이다. FrontISTR에서는 다음 반복법을 선택할 수 있다.

반복법 적용 기준 비고
CG 대칭 양의 정부호 문제 구조 해석이나 열전도 해석의 표준적인 후보이다.
BiCGSTAB 비대칭 문제 접촉이나 연성으로 비대칭성이 강한 경우의 후보이다.
GMRES 비대칭 문제 Krylov 부분공간 크기를 지정하여 사용한다.
GPBiCG 비대칭 문제 BiCGSTAB 계열의 개선법으로 사용한다.
GMRESR 비대칭 문제, 고급 용도 GMRES를 중첩하여 사용하는 선택지이다.
GMRESREN 비대칭 문제, 고급 용도 GMRESR 계열의 재귀 버전이다.

CG는 행렬이 대칭 양의 정부호임을 전제로 한다. 마찰 접촉, 비대칭 구속 처리, 연성 효과 등으로 비대칭성이 강한 경우에는 BiCGSTAB, GMRES, GPBiCG 등을 후보로 한다. GMRES에서는 Krylov 부분공간 크기를 크게 하면 수렴성이 개선될 수 있는 반면 메모리 사용량도 증가한다.

METHOD2를 지정하면 CG가 발산하거나 실패했을 때 대체 반복법으로 전환할 수 있다. 이 기능은 CG를 주 솔버로 사용하는 경우의 폴백이며, 다른 설정값과 데이터 행은 주 솔버와 동일한 것을 사용한다.

전처리

전처리는 반복법의 수렴성을 개선하기 위해 계수 행렬을 변환하는 처리이며, 반복법을 선택한 경우에만 적용된다. 직접법에서는 전처리를 사용하지 않는다. 같은 반복법이라도 전처리 선택에 따라 수렴까지의 반복 횟수와 계산 시간이 크게 달라진다.

전처리 특징 용도 기준
SSOR 표준적인 전처리. 멀티컬러 오더링을 지원한다. 먼저 시도할 후보. 구조 해석에서 널리 사용한다.
대각 스케일링 대각 성분을 사용하는 경량 전처리. 계산 비용을 줄이고 싶은 경우.
BILU 블록 단위의 불완전 LU 분해. SSOR로 수렴하기 어려운 문제의 후보.
AMG Trilinos-ML에 의한 대수적 멀티그리드. 대규모 문제나 계층적인 오차 성분이 지배적인 문제의 후보.
SAINV Sparse Approximate Inverse. 접촉 문제나 분산 환경에서의 특수 전처리 후보.
RIF Robust Incomplete Factorization. 불완전 분해 계열의 다른 후보.

SSOR는 표준적인 선택지이며, OpenMP 병렬에서는 멀티컬러 오더링 버전을 사용한다. 대각 스케일링은 가볍지만 수렴 개선 효과는 문제에 따라 달라진다. BILU는 블록 단위의 불완전 LU 분해로 구현되어 일반 DOF 행렬도 지원한다. BILU 계열에서는 반복법이 발산했을 때 대각 보정 계수 SIGMA_DIAG를 자동으로 증가시켜 재시도하는 경로가 있지만, 값 지정은 키워드 레퍼런스에 따른다.

AMG는 Trilinos-ML을 사용하므로 빌드 시 ML이 활성화되어 있어야 한다. 스무더, 멀티그리드 사이클, 코스닝 방식 등을 지정할 수 있지만 자세한 값은 키워드 레퍼런스에 따른다. SAINV를 접촉 문제나 MPC를 포함한 병렬 해석에서 사용할 경우 영역 분할 시 오버랩 깊이가 수렴성에 영향을 줄 수 있다.

직접법

직접법은 계수 행렬을 분해하여 선형 방정식을 푸는 방법이다. 반복 횟수에 의존하지 않아 강건하며, 접촉 해석이나 구속 조건을 포함하는 해석에서 안정적인 선택지가 된다. 반면 문제 규모가 커질수록 메모리 사용량이 증가한다.

직접법 병렬 환경 용도
MUMPS MPI 병렬 분산 메모리 환경에서 희소 행렬을 직접법으로 푼다.
MKL Intel MKL / OpenMP Intel MKL의 직접법이다. 내부에서는 Intel PARDISO가 동작한다. 여러 MPI 프로세스에서는 Cluster MKL 경로를 사용한다. DIRECTmklMKL의 별칭이다.

직접법은 대칭 행렬과 비대칭 행렬 모두에서 사용할 수 있다. MUMPSMKL은 빌드 시 해당 라이브러리가 링크되어 있어야 한다. 라이브러리가 없는 환경에서는 사용할 수 없으므로 필요한 의존 라이브러리와 CMake 옵션은 빌드 가이드를 참조한다.

FrontISTR에는 외부 라이브러리를 사용하지 않는 내장 직접법 경로도 있지만, 일반적인 해석에서 직접법을 선택하는 경우에는 MUMPS 또는 MKL을 후보로 한다.

직접법에는 전처리가 적용되지 않는다. !SOLVER에서 전처리를 지정해도 직접법 경로에서는 참조되지 않는다.

MPC 처리 방식

MPC 처리 방식은 다점 구속으로 연결된 자유도를 선형 방정식에 반영하는 방법이다. 입력상의 구속식은 같아도 처리 방식에 따라 계수 행렬의 성질과 수렴성이 달라진다.

MPC 처리 방식 위치 기본 용도
페널티법 구속식에 큰 강성을 더해 근사적으로 만족시킨다. 직접법의 기본값.
MPC-CG법 구속을 포함한 행렬-벡터 곱을 반복법 내부에서 다루는 기존 방식. 비권장.
명시적 자유도 소거법 구속 자유도를 소거하고 축약된 선형계를 푼다. 반복법의 기본값.

직접법에서는 페널티법이 기본값이고, 반복법에서는 명시적 자유도 소거법이 기본값이다. MPC-CG법은 호환성을 위한 기존 선택지이며, 일반적인 신규 해석에서는 명시적 자유도 소거법 또는 직접법의 기본값을 사용한다.

MPC 처리 방식은 !SOLVERMPCMETHOD로 명시할 수 있다. 값의 의미와 형식은 키워드 레퍼런스를 참조한다.

접촉 자유도 소거

접촉 자유도 소거는 SLAGRANGE 접촉에서 추가되는 접촉 자유도를 선형 솔버에 전달하기 전에 축약하여 다루는 기능이다. 접촉 자유도를 소거하면 반복법에서 다루는 선형계의 성질이 개선되는 경우가 있다.

기본 자동 모드에서는 반복법 사용 시 접촉 자유도 소거를 수행하고, 직접법 사용 시에는 접촉 자유도 소거를 수행하지 않는다. 직접법에서는 접촉 자유도를 포함한 확대계를 그대로 다루는 경로가 준비되어 있다.

CONTACT_ELIM을 명시하면 직접법 사용 시에도 접촉 자유도 소거를 수행할 수 있다. 접촉 타입, 접촉 페어, 접촉 알고리즘의 입력 측 선택은 접촉·임베딩 페이지를 참조한다.

보조 기능

솔버의 수렴성과 성능을 조사하기 위해 조건수 추정, 행렬 덤프, 로그 출력을 사용할 수 있다. 이들은 일반 해석에서는 필요하지 않으며 디버깅이나 성능 평가를 위해 활성화한다.

기능 용도 비고
조건수 추정 CGGMRES에서 조건수의 지표를 출력한다. LAPACK을 활성화한 빌드에서 사용한다.
행렬 덤프 솔버에 전달할 행렬과 우변을 파일로 저장한다. Matrix Market, CSR, BSR 형식을 지원한다.
DUMPEXIT 행렬 덤프 후 해석을 종료한다. 행렬만 추출하여 외부에서 검증할 때 사용한다.
ITERLOG 반복법의 수렴 이력을 출력한다. 잔차의 변화를 확인한다.
TIMELOG 솔버 계산 시간을 출력한다. VERBOSE에서는 상세 내역을 출력한다.
STEPLOG 스텝 정보를 출력한다. 해석 절차 확인에 사용한다.

행렬 덤프는 해석에서 조립된 계수 행렬을 외부 도구로 확인하기 위한 기능이다. DUMPEXIT을 활성화하면 행렬과 우변을 저장한 시점에서 해석을 종료한다. 조건수 추정은 CGGMRES에서 사용하는 시험적 기능이며 수렴성 진단에 사용한다.

관련 항목