!SOLVER¶
솔버 제어
필수 제어 데이터.
매개변수¶
METHOD = 해법 (CG、BiCGSTAB、GMRES、GPBiCG、CR、DIRECT、DIRECTmkl、MUMPS)
DIRECT : 접촉 해석 이외의 직접법(순차 처리만) (현재 사용 불가)
DIRECTmkl : Intel MKL에 의한 직접법
MUMPS : MUMPS에 의한 직접법
직접법을 선택하면 데이터 행은 무시된다.
3자유도용 반복법은 OpenMP에 의한 스레드 병렬 사용 가능
PRECOND = 반복법의 전처리 방식 (1、2、3、5、10、11、12、22)
1, 2 : (Block) SSOR (3자유도용에만 멀티컬러 오더링 포함)
3 : (Block) Diagonal Scaling
5 : 멀티그리드 전처리 패키지 ML에 의한 AMG
10 : Block ILU(0)
11 : Block ILU(1)
12 : Block ILU(2)
22 : HEC-MW 내장 SA-AMG(평활화 집계 AMG)에 의한 AMG
10、11、12는 3자유도 문제에서만 사용 가능
22는 LAPACK을 활성화한 빌드에서만 사용 가능
OpenMP에 의한 스레드 병렬 시에는 SSOR, Diagonal Scaling, ML 또는 SA-AMG를 권장
ITERLOG = 반복법 솔버 수렴 이력 출력 여부 (YES/NO)(기본값: NO)
TIMELOG = 솔버 계산 시간 출력 여부 (YES/NO/VERBOSE)(기본값: NO)
LOGLEVEL = 전처리기 진단 정보 출력 레벨 (정수)(기본값: 출력 없음)
ITERLOG, TIMELOG와 독립적으로 지정
1 이상이면 AMG 계열 전처리기(PRECOND=5、22)의 계층 구성 등의 정보를 출력
2 이상이면 더 자세한 정보(메모리 사용량 등)를 출력
USEJAD = 벡터 머신용 오더링 여부 (YES/NO)(기본값: NO)
3자유도 문제에서 반복법 사용 시에만 유효
SCALING = 행렬의 대각 성분을 1로 만드는 스케일링 여부 (YES/NO)(기본값: NO)
3자유도 문제에서 반복법 사용 시에만 유효
DUMPTYPE = 행렬 덤프 형식(NONE、MM、CSR、BSR) (주로 디버깅용)
NONE : 덤프하지 않음(기본값)
MM : Matrix Market 형식
CSR : Compressed Sparse Row(CSR) 형식
BSR : Blocked CSR 형식
DUMPEXIT = 행렬 덤프 직후 프로그램 종료 (YES/NO)(기본값: NO)
MPCMETHOD = 다점구속조건 처리 방식(1、3)
1: 페널티법(직접법 사용 시 기본값)
3: 명시적 자유도 제거법(반복법 사용 시 기본값)
2에 해당하는 MPC-CG법은 삭제되었다. 2를 지정하면 경고 후 기본 방식으로 처리한다.
ESTCOND = 조건수 추정 빈도 (시험적)
지정된 반복 간격마다 및 반복 종료 시 조건수 추정 수행
0인 경우 추정하지 않음
RECOMPUTE_RESIDUAL = 잔차 벡터 재계산 빈도
METHOD에 CG, BiCGSTAB, GPBiCG, PipeCG를 지정한 경우에만 유효
반복법은 잔차 벡터를 점화식으로 갱신하므로 반올림 오차가 누적됨
지정된 반복 간격마다 잔차 벡터를 {b}-[A]{x}에서 다시 계산
0인 경우 각 해법의 기본값(CG: 50, BiCGSTAB: 100, GPBiCG: 20, PipeCG: 50)을 사용
음수를 지정한 경우 주기적인 재계산을 수행하지 않음
수렴 판정이 성립했을 때 확인을 위한 재계산은 이 설정과 관계없이 항상 수행
주기를 지나치게 짧게 하면 행렬-벡터 곱이 늘어날 뿐만 아니라
수렴성 자체가 악화되거나 수렴하지 않을 수 있음
기본값에서 변경한 경우 수렴 이력과 최종 상대 잔차를 확인할 것
METHOD2 = 제2 해법 (BiCGSTAB、GMRES、GPBiCG) (시험적)
METHOD에 CG를 지정한 경우에만 유효
CG법이 발산하면 자동으로 전환하여 해를 구함
다른 매개변수와 데이터 행의 정보는 동일한 것을 사용
CONTACT_ELIM = 접촉 해석에서 자유도 제거를 수행할지 지정 (0,1)
0: 반복법 사용 시에만 자유도 제거 수행(기본값)
1: 항상(직접법 사용 시에도) 자유도 제거 수행
** 두 번째 행부터 **
| 변수명 | 유형 | 설명 |
|---|---|---|
| NITER | I | 반복 횟수(기본값: 100) |
| iterPREmax | I | Additive Schwarz에 의한 전처리 반복 횟수(기본값: 1) (권장값은 1 (병렬 계산에서는 2가 유효한 경우도 있음)) |
| NREST | I | Krylov 부분공간 수(기본값: 10) (해법으로 GMRES를 선택한 경우에만 유효) |
| NCOLOR_IN | I | 멀티컬러 오더링의 목표 색 수(기본값: 10) (OpenMP 스레드 수가 2 이상일 때만 유효) |
| RECYCLEPRE | I | 전처리 설정 정보 재사용 횟수(기본값: 3) (비선형 해석에서만 유효) |
| 변수명 | 유형 | 설명 |
|---|---|---|
| RESID | R | 수렴 판정값(기본값: 1.0e-8) |
| SIGMA_DIAG | R | 전처리 행렬 계산 시 대각 성분에 곱하는 배율(기본값: 1.0) (ILU 전처리에서 0으로 나누기 또는 발산이 발생하는 경우 1.0보다 큰 값을 설정하면 풀리는 경우가 있음) |
| SIGMA | R | 미사용(기본값: 0.0) |
PRECOND=5인 경우(생략 가능)¶
PRECOND에 5 또는 22 이외의 값을 지정한 경우 4번째 행은 무시된다.
| 변수명 | 유형 | 설명 |
|---|---|---|
| ML_CoarseSolver | I | ML의 조대 격자용 솔버(1: 스무더로 대용, 2: KLU(순차 직접법), 3: MUMPS(병렬 직접법))(기본값: 1) (권장값은 풀기 어려운 문제에서는 3 또는 2, 일반 문제에서는 1) |
| ML_Smoother | I | ML의 스무더(1: Chebyshev, 2: SymBlockGaussSeidel, 3: Jacobi)(기본값: 1) (권장값은 1) |
| ML_MGCycle | I | ML의 멀티그리드 사이클(1: V-cycle, 2: W-cycle, 3: Full-V-cycle)(기본값: 1) (권장값은 풀기 어려운 문제에서는 2, 일반 문제에서는 1) |
| ML_MaxLevels | I | ML의 최대 레벨 수(기본값: 10) (특히 풀기 어려운 문제에서는 조대 격자 솔버를 직접법으로 하고 2(메모리가 부족한 경우 3), 일반 문제에서는 10을 권장) |
| ML_CoarseningScheme | I | ML의 코스닝 스킴(1: UncoupledMIS, 2: METIS, 4: Zoltan, 5: DD)(기본값: 1) (권장값은 1 또는 5) |
| ML_NumSweep | I | ML 스무더의 스윕 횟수(Chebyshev인 경우 다항식 차수)(기본값: 2) (권장값은 Chebyshev인 경우 2, SymBlockGaussSeidel인 경우 1) |
PRECOND=22인 경우(생략 가능)¶
PRECOND에 22 이외의 값을 지정한 경우 5번째 행은 무시된다. 4번째 행과 5번째 행은 모두 행 전체를 생략할 수 있으며, 각 행의 뒤쪽 항목만 생략할 수도 있다. 0을 지정한 항목에는 기본값이 사용된다.
4번째 행의 1~7번째 항목은 PRECOND=5(ML)의 옵션 행과 같은 순서로 배치되어 있으므로 ML 옵션 행을 그대로 재사용할 수 있다. 8~10번째는 SA-AMG 전용 항목이다.
(4번째 행) SA_CoarseSolver, SA_Smoother, SA_MGCycle, SA_MaxLevels, (미사용), SA_ChebyDegree, SA_CoarseSize, SA_MaxAggSize, SA_GalerkinLowMem, (미사용)
| 변수명 | 유형 | 설명 |
|---|---|---|
| SA_CoarseSolver | I | 조대 격자용 솔버(0: 자동, 1: 스무더로 대용, 2: 조밀 행렬 직접법, 3: MUMPS(병렬 직접법))(기본값: 0) (자동 모드에서는 MUMPS를 활성화한 빌드에서 MUMPS를 사용하고, 그 외에는 조밀 행렬 직접법을 사용) |
| SA_Smoother | I | 스무더(0 또는 1: Chebyshev)(기본값: 0) (Chebyshev만 지원한다. 다른 값을 지정하면 경고를 출력하고 Chebyshev를 사용) |
| SA_MGCycle | I | 멀티그리드 사이클(0: 기본값(W-cycle), 1: V-cycle, 2: W-cycle)(기본값: 0) (Full-V-cycle은 지원하지 않음) |
| SA_MaxLevels | I | 최대 레벨 수(기본값: 20) |
| (미사용) | I | ML 코스닝 스킴에 대응하는 위치. SA-AMG는 항상 비결합 집계를 사용하므로 0이 아닌 값을 지정하면 경고를 출력하고 무시 |
| SA_ChebyDegree | I | Chebyshev 스무더의 다항식 차수(기본값: 2) |
| SA_CoarseSize | I | 조대 격자 절단 크기(기본값: 조대 격자용 솔버로 MUMPS를 사용하는 경우 50000, 그 외에는 100) |
| SA_MaxAggSize | I | 집계체 최대 크기(기본값: 96) |
| SA_GalerkinLowMem | I | 조대 격자 행렬 계산 방식(0: 일반(속도 우선), 양수: 메모리 절약)(기본값: 0) (설정 시 메모리가 부족한 경우 양수를 지정) |
| (미사용) | I | 향후 확장을 위해 예약 |
5번째 행은 SA-AMG 전용이며 ML에서는 읽지 않는다.
(5번째 행) SA_Theta, SA_ChebyAlpha, SA_Safety, SA_TaperK, SA_AggOrder, SA_MinAggSize, SA_Verify, SA_DumpVTK
| 변수명 | 유형 | 설명 |
|---|---|---|
| SA_Theta | R | 강연결 판정 임계값(기본값: 0.0) (0.0에서는 행렬의 비영 구조를 그대로 그래프로 사용) |
| SA_ChebyAlpha | R | Chebyshev 스무더가 대상으로 하는 고유값 구간의 하한을 정하는 비율(기본값: 20.0) |
| SA_Safety | R | 추정 최대 고유값에 곱하는 안전 계수(기본값: 1.1) |
| SA_TaperK | R | 조대화 테이퍼 계수 K(기본값: 100) (레벨 2 이후에는 약 K개 이상의 집계체가 남도록 조대화를 완만하게 한다. 음수를 지정하면 테이퍼링을 비활성화) |
| SA_AggOrder | R | 집계 순회 순서(0: 기본값(BFS 순서), 1: BFS 순서, 2: 절점 번호의 해시 순서(시험적), 3: 절점 차수 오름차순(시험적), 4: 절점 차수 내림차순(시험적), 음수: 절점 번호 순서)(기본값: 0) |
| SA_MinAggSize | R | 집계체 최소 크기(기본값: 3) |
| SA_Verify | R | 설정 시 자체 검사를 수행할지 여부(0: 수행하지 않음, 양수: 수행)(기본값: 0)(주로 디버깅용) |
| SA_DumpVTK | R | 최상위 레벨의 집계를 VTK 형식으로 출력할지 여부(0: 출력하지 않음, 양수: 출력)(기본값: 0)(주로 디버깅용) |
사용 예¶
SSOR 전처리된 CG법을 사용하고 최대 반복 횟수를 10000, 수렴 판정값을 1.0e-8로 설정한다
SSOR 전처리된 GMRES법을 사용하고 Krylov 부분공간 수를 40, 멀티컬러 오더링의 목표 색 수를 100으로 설정한다
ILU(0) 전처리된 CG법을 사용하고 전처리 행렬 계산 시 대각 성분에 곱하는 배율을 1.1로 설정한다
CG법의 전처리를 ML에 의한 AMG법으로 한다
CG법의 전처리를 ML에 의한 AMG법으로 하고 조대 격자용 솔버를 MUMPS로 한다(풀기 어려운 문제용)
CG법의 전처리를 ML에 의한 AMG법으로 하고 멀티그리드 사이클을 W-cycle로 한다(풀기 어려운 문제용)
CG법의 전처리를 ML에 의한 AMG법으로 하고 조대 격자용 솔버를 MUMPS, 최대 레벨 수를 2로 한다(매우 풀기 어려운 문제용)
CG법의 전처리를 HEC-MW 내장 SA-AMG로 한다
CG법의 전처리를 SA-AMG로 하고 조대 격자용 솔버를 MUMPS로 한다
마찰 접촉 해석에서 BiCGSTAB법의 전처리를 SA-AMG로 하고 AMG 전처리기의 계층 구성을 출력한다