콘텐츠로 이동

!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, iterPREmax, NREST, NCOLOR_IN, RECYCLEPRE
변수명 유형 설명
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, SIGMA_DIAG, SIGMA
변수명 유형 설명
RESID R 수렴 판정값(기본값: 1.0e-8)
SIGMA_DIAG R 전처리 행렬 계산 시 대각 성분에 곱하는 배율(기본값: 1.0)
(ILU 전처리에서 0으로 나누기 또는 발산이 발생하는 경우 1.0보다 큰 값을 설정하면 풀리는 경우가 있음)
SIGMA R 미사용(기본값: 0.0)

PRECOND=5인 경우(생략 가능)

PRECOND에 5 또는 22 이외의 값을 지정한 경우 4번째 행은 무시된다.

(4번째 행) ML_CoarseSolver, ML_Smoother, ML_MGCycle, ML_MaxLevels, ML_CoarseningScheme, ML_NumSweep
변수명 유형 설명
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로 설정한다

!SOLVER, METHOD=CG, PRECOND=1, ITERLOG=YES, TIMELOG=YES
  10000, 1
  1.0e-8, 1.0, 0.0

SSOR 전처리된 GMRES법을 사용하고 Krylov 부분공간 수를 40, 멀티컬러 오더링의 목표 색 수를 100으로 설정한다

!SOLVER, METHOD=GMRES, PRECOND=1, ITERLOG=YES, TIMELOG=YES
  10000, 1, 40, 100
  1.0e-8, 1.0, 0.0

ILU(0) 전처리된 CG법을 사용하고 전처리 행렬 계산 시 대각 성분에 곱하는 배율을 1.1로 설정한다

!SOLVER, METHOD=CG, PRECOND=10, ITERLOG=YES, TIMELOG=YES
  10000, 1
  1.0e-8, 1.1, 0.0

CG법의 전처리를 ML에 의한 AMG법으로 한다

!SOLVER, METHOD=CG, PRECOND=5, ITERLOG=YES, TIMELOG=YES
  10000, 1
  1.0e-8, 1.0, 0.0

CG법의 전처리를 ML에 의한 AMG법으로 하고 조대 격자용 솔버를 MUMPS로 한다(풀기 어려운 문제용)

!SOLVER, METHOD=CG, PRECOND=5, ITERLOG=YES, TIMELOG=YES
  10000, 1
  1.0e-8, 1.0, 0.0
  3

CG법의 전처리를 ML에 의한 AMG법으로 하고 멀티그리드 사이클을 W-cycle로 한다(풀기 어려운 문제용)

!SOLVER, METHOD=CG, PRECOND=5, ITERLOG=YES, TIMELOG=YES
  10000, 1
  1.0e-8, 1.0, 0.0
  1, 1, 2

CG법의 전처리를 ML에 의한 AMG법으로 하고 조대 격자용 솔버를 MUMPS, 최대 레벨 수를 2로 한다(매우 풀기 어려운 문제용)

!SOLVER, METHOD=CG, PRECOND=5, ITERLOG=YES, TIMELOG=YES
  10000, 1
  1.0e-8, 1.0, 0.0
  3, 1, 1, 2

CG법의 전처리를 HEC-MW 내장 SA-AMG로 한다

!SOLVER, METHOD=CG, PRECOND=22, ITERLOG=YES, TIMELOG=YES
  10000, 1
  1.0e-8, 1.0, 0.0

CG법의 전처리를 SA-AMG로 하고 조대 격자용 솔버를 MUMPS로 한다

!SOLVER, METHOD=CG, PRECOND=22, ITERLOG=YES, TIMELOG=YES
  10000, 1
  1.0e-8, 1.0, 0.0
  3

마찰 접촉 해석에서 BiCGSTAB법의 전처리를 SA-AMG로 하고 AMG 전처리기의 계층 구성을 출력한다

!SOLVER, METHOD=BiCGSTAB, PRECOND=22, ITERLOG=YES, TIMELOG=YES, LOGLEVEL=1
  10000, 1
  1.0e-8, 1.0, 0.0