ピュータに適した反復法
前章に述べた
SOR
法とADI
法は典型的な反復法であるが,その点過緩和または線過緩和の計算は並列処 理することができないので,科学技術計算に広く用いられているベクトルコンピュータには向かない.一方Jacobi
過緩和法は並列処理可能であるが収束性が良くない.本章には並列処理可能でかつ収束性も良いいくつかの反復法について述べる.本章では読者が前章の内容を理解していることを前提に解説する.
3.1 Chebyshev SOR法
Chebyshev SOR
法(red-black point relaxation)
はSOR
法をベクトルコンピュータ向きに改良したもの で,2次元問題の5
点差分方程式,3次元問題の7
点差分方程式の境界値問題に適用することができる.こ こでは2次元Poisson
方程式の5
点差分方程式c
1
ij u
i;1j
+
c2ijui+1j+
c3ijuij;1+
c4ijuij+1+
c0ijuij=
fij(3.1)
の
Dirichlet
問題から説明する.計算領域は図3.1
に示すように長方形で,緩和計算は1
i i11
j j1 の内点に対して行われる.内点をi+
jが偶数になる点(red point
,図に印で示す)
と奇数になる点(black
point
,印で示す)
に分ける.このとき偶数点の緩和はほかの偶数点のデータと無関係に行えるので,偶数点のみを同時に陽的1に緩和することができる.奇数点についても同様のことが言える.
Chebyshev SOR
法はすべての偶数点の点過緩和と,すべての奇数点の点過緩和を交互に解が収束するまで反復するもので ある.
i = 0 1 2 3 i
1i
fj = 0 1 2 3 4 j
1j
f図
3.1: Chebyshev SOR
法の偶数点と奇数点1差分方程式を個々に計算するときに陽的(explicit)に解くといい,その解法を陽解法と言う.また連立方程式として計算すると きに陰的(implicit)に解くといいその解法を陰解法と言う.
1
2
反 復 法(Chebyshev SOR
法)以下には,式
(3.1)
のDirichlet
問題をChebyshev SOR
法で解くプログラムを示す.!*******************************************************************************
! Solution of Dirichlet problem of elliptic pde by red-black point relaxation
!*******************************************************************************
SUBROUTINE REDBLK1(u,c,f,r,i1,if,j1,jf,me,nef,mo,nof,al,na,naf,rmean,e) DIMENSION u(0:if,0:jf),c(i1,j1,0:4),f(i1,j1),r(i1,j1),me(2,nef),mo(2,nof) IF(al<=1.)al=1.5 naf=MAX0(naf,100)
e=AMAX1(e,1.E-5) ne=0 no=0
DO i=1,i1 DO j=1,j1
IF(MOD(i+j,2)==0)THEN !for red points
ne=ne+1 me(1,ne)=i me(2,ne)=j !input ij in me
ELSE !for black points
no=no+1 mo(1,no)=i mo(2,no)=j !input ij in mo
ENDIF ENDDO ENDDO na=0 10 na=na+1
DO n=1,nef i=me(1,n) j=me(2,n) !red points
r(i,j) = c(i,j,1)*u(i-1,j)+c(i,j,2)*u(i+1,j) & !compute residuals +c(i,j,3)*u(i,j-1)+c(i,j,4)*u(i,j+1) &
+c(i,j,0)*u(i,j)-f(i,j)
u(i,j) = u(i,j)-al*r(i,j)/c(i,j,0) !point over-relaxation ENDDO
DO n=1,nof i=mo(1,n) j=mo(2,n) !black points
r(i,j) = c(i,j,1)*u(i-1,j)+c(i,j,2)*u(i+1,j) & !compute residuals +c(i,j,3)*u(i,j-1)+c(i,j,4)*u(i,j+1) &
+c(i,j,0)*u(i,j)-f(i,j)
u(i,j) = u(i,j)-al*r(i,j)/c(i,j,0) !point over-relaxation ENDDO
rmean=0.
DO i=1,i1 DO j=1,j1
rmean = rmean+ABS(r(i,j)) !compute mean residual
ENDDO ENDDO
rmean=rmean/FLOAT(i1*j1)
IF(rmean>e.AND.na<naf) GOTO 10 !decide convergence END
このサブルーチンは,配列uにuijの予測値と境界値,配列c,fに式
(3.1)
の係数ckijと右辺fijの値,引数al, naf, eに緩和係数,最大反復数nf,収束判定用の小さい正数"の値,i1,if,j1,jf,nr,nbにも 値を入れて引用する.ただしi1
=
if;1
j1=
jf;1
,またnrとnbは偶数点の数nredまたは奇数点の数nblackで,nredはnblackと同じか1つ多くなる.nred
+
nblack=
i1j1.このプログラムでは,まずすべて の偶数点またはすべての奇数点を簡単に呼出せるように,配列mr, mbを用意し ,これらの配列にあらかじ め偶数点または奇数点のijを入れておく.反復計算は,偶数点の点過緩和,奇数点の点過緩和の順に行わ れ,平均残差値rmean(
Pjrijj)
=(
i1j1)
"または反復回数n=
nfになるまで繰り返される.計算終了 時に,配列uに関数値uij,配列rに残差値rij,引数na, rmeanにnとrmeanの値が入る.このプログラ ムは,すべての偶数点またはすべての奇数点の緩和計算が並列に行えるように作られているので,ベクト ル化率だけでなく並列度も十分高くなるっている.なお念のため書けば,この解法は,パソコンなどのスカ ラー演算のみを行うコンピュータではSOR
法よりもかなり劣るもので,ベクトルコンピュータを使用する 大規模計算においてはじめて威力を発揮するものである.問
1
上記問題で,図3.2
に示すように,右側境界(
i=
if)
をNeumann
条件,上下境界(
j= 0
jf)
を周期条件に変更した混合境界値問題の
Chebyshev SOR
法のプログラムを示せ.Neumann
条件(
@u=@x)
ifj=
gjを考慮した差分方程式c
1
ifj u
i
f
;1j
+
c3ifjuifj;1+
c4ifjuifj+1+
c0ifjuifj=
fifjと周期条件uijf
=
ui0+
(
@u=@y)
ijf= (
@u=@y)
i0を考慮した式c1
ij
f u
i;1jf
+
c2ijfui+1jf+
c3ijfuijf;1+
c4ijfui1+
c0ijfuijf=
fijfu
ij
f
=
ui0+
を用いることにする.またここでは,jfを偶数に取り,点過緩和の計算を下方の境界点を除外して行うこ とにする.このとき奇数点と偶数点の数は等しくなる.次のプログラムは上記のサブルーチンREDBLK1に 倣って書かれている.
!***************************************************************************************
! Solution of mixed bound value problem of elliptic pde by red-black point relaxation
!***************************************************************************************
SUBROUTINE REDBLK2(u,c,f,r,if,jf,phi,me,nef,mo,nof,al,na,naf,rmean,e) DIMENSION u(0:if,0:jf),c(if,jf,0:4),f(if,jf),r(if,jf),me(2,nef),mo(2,nof) IF(al<=1.)al=1.5 naf=MAX0(naf,1000)
e=AMAX1(e,1.E-5) ne=0 no=0
DO i=1,if DO j=1,jf
IF(MOD(i+j,2)==0)THEN !for red points
ne=ne+1 me(1,ne)=i me(2,ne)=j !input ij in me
ELSE !for black points
no=no+1 mo(1,no)=i mo(2,no)=j !input ij in mo
ENDIF ENDDO ENDDO na=0 10 na=na+1
DO n=1,nef i=me(1,n) j=me(2,n) !red points
ip1=MIN0(i+1,if) !Neumann cond
jp1=j+1 IF(j==jf)jp1=1 !periodic cond
r(i,j) = c(i,j,1)*u(i-1,j)+c(i,j,2)*u(ip1,j) & !compute residuals +c(i,j,3)*u(i,j-1)+c(i,j,4)*u(i,jp1) &
+c(i,j,0)*u(i,j)-f(i,j)
u(i,j) = u(i,j)-al*r(i,j)/c(i,j,0) !point over-relaxation ENDDO
DO n=1,nof i=mo(1,n) j=mo(2,n) !black points
ip1=MIN0(i+1,if) !Neumann cond
jp1=j+1 IF(j==jf)jp1=1 !periodic cond
r(i,j) = c(i,j,1)*u(i-1,j)+c(i,j,2)*u(ip1,j) & !compute residuals +c(i,j,3)*u(i,j-1)+c(i,j,4)*u(i,jp1) &
+c(i,j,0)*u(i,j)-f(i,j)
u(i,j) = u(i,j)-al*r(i,j)/c(i,j,0) !point over-relaxation ENDDO
FORALL(i=1:if)u(i,0)=u(i,jf)-phi rmean=0.
DO i=1,if DO j=1,jf
rmean = rmean+ABS(r(i,j)) !compute mean residual
ENDDO ENDDO
rmean = rmean/FLOAT(if*jf)
IF(rmean>e.AND.na<naf) GOTO 10 !decide convergence END
以下には,ポアソン方程式uxx
+
uyy=
;2
の図3.2
の境界条件の課された2つの境界値問題を,出発値u
= 0
を与えて解いた結果を示す.計算には格子間隔0.05
の正方形格子が用いられた.解uijは,"= 10
;54
反 復 法(Chebyshev SOR
法)で小数点以下
3
桁までほぼ正確に求めることができる.表3.1
は緩和係数と最終反復数n,その時点における平均残差値rmeanの関係を示したものである.解は
= 1
:75
程度の大き目の緩和係数に対して良く収 束する.また計算領域の一辺のみに関数値の与えられる混合境界値問題では,収束までにかなりの反復を 要することが分かる.なおこの混合境界値問題の厳密解はu(
xy) =
;x2+2
x+
yである.x = 0 1 x = 0 1
y = 0 y = 0
1 1
H
Dirichlet u = y Dirichlet
Hu = y Dirichlet u = y Dirichlet
Dirichlet
u = 0 u = 1
H
Neumann
Hu
y= 0
A A A A
periodic
u ( x 1)= u ( x 0)+1 u
y( x 1)= uy( x 0)
(a) Dirichlet
問題(b)
混合境界値問題図
3.2: Chebyshev SOR
法の例題表
3.1: Chebyshev SOR
法の解の収束状況Dirichlet
問題 混合境界値問題n rmean n rmean
1.00 339 10
;51000 63
10
;51.25 209 10
;51000 11
10
;51.50 118 10
;5850 10
;51.75 40 10
;5385 10
;51.80 50 10
;5300 10
;5Chebyshev SOR
法は,3次元の7
点差分方程式にそのまま拡張することができる.すなわちi+
j+
kが偶数の点と奇数の点に分ければ ,各々の点過緩和の計算を並列処理することができる.図
3.3(a)
に示す 2次元の
9
点高次差分方程式の場合には,mod(
i+
j3)
が0
の点,1
の点,2
の点に分ければ,点過緩和の計 算を並列処理することができる.また(b)
図の9
点高次差分方程式の場合には,表に示すように4
色の点に分ければ ,各色ごとの点過緩和を並列処理することができる.
e r
r r r r
r r r r
(a) 7
点高次差分式e r
r r r
r r
r r r
H
H
H
H i
j 偶数 奇数
偶数 シアン マゼンタ 奇数 イエロー 黒
(b) 9
点高次差分式図
3.3: 2
次元高次差分演算子3.2 Chebyshev SLOR法
Chebyshev SLOR
法(zebra line overrelaxation)
は線過緩和法(SLOR iterative scheme)
をベクトルコンピュータ向きに改良したものである.
5
点差分方程式(3.1)
の場合には,偶数列の線緩和は互いに独立に行 えるので,すべての偶数列を並べて同時に線緩和することができる.奇数列についても同様のことが言える.
Chebyshev SLOR
法は偶数列の線過緩和と奇数列の線過緩和の並列処理を交互に解が収束するまで反復するものである.線過緩和については2.4節の
ADI
法の項を参照されたい.次に,
Chebyshev SLOR
法のプログラムの簡単な例として,前節に示したポアソン方程式のDirichlet
問題を解くサブルーチンを示す.
!******************************************************************************
! Solution of Dirichlet problem of elliptic pde by zebra line overrelaxation
!******************************************************************************
SUBROUTINE ZEBRA1(u,c,f,r,i1,if,j1,jf,a,b,n,ie,io,bt,na,naf,rmean,e)
DIMENSION u(0:if,0:jf),c(0:if,0:jf,0:4),f(0:if,0:jf),r(0:if,0:jf),a(io,n,3),b(io,n) IF(bt<.75)bt=.8 naf=MAX0(naf,1000)
e=AMAX1(e,1.E-5) na=0 10 na=na+1
DO ii=1,ie i=2*ii DO j=0,jf !even columns
a(ii,j+1,1) = c(i,j,3) !setup coef matrix
a(ii,j+1,2) = c(i,j,0)*bt a(ii,j+1,3) = c(i,j,4)
b(ii,j+1) = f(i,j)-c(i,j,1)*u(i-1,j)-c(i,j,0)*u(i,j) & !setup rhs
*(1.-bt)-c(i,j,2)*u(i+1,j) ENDDO ENDDO
CALL GAUSSZ(a,b,io,n,ie) !solve sets of linear eqns
DO ii=1,ie i=2*ii DO j=0,jf u(i,j) = b(ii,j+1)
ENDDO ENDDO
DO ii=1,io i=2*ii-1 DO j=0,jf !odd columns
a(ii,j+1,1) = c(i,j,3) !setup coef matrix
a(ii,j+1,2) = c(i,j,0)*bt a(ii,j+1,3) = c(i,j,4)
b(ii,j+1) = f(i,j)-c(i,j,1)*u(i-1,j)-c(i,j,0)*u(i,j) & !setup rhs
*(1.-bt)-c(i,j,2)*u(i+1,j) ENDDO ENDDO
CALL GAUSSZ(a,b,io,n,io) !solve sets of linear eqns
DO ii=1,io i=2*ii-1 DO j=0,jf u(i,j) = b(ii,j+1)
ENDDO ENDDO rmean=0.
DO i=1,i1 DO j=1,j1
r(i,j) = c(i,j,1)*u(i-1,j)+c(i,j,2)*u(i+1,j) & !compute residuals +c(i,j,3)*u(i,j-1)+c(i,j,4)*u(i,j+1) &
+c(i,j,0)*u(i,j)-f(i,j)
rmean = rmean+ABS(r(i,j))/FLOAT(i1*j1) !compute mean residual ENDDO ENDDO
IF(rmean>e.AND.na<naf) GOTO 10 !decite convergence END
!***** Subroutine GAUSSZ *****
! Solution of sets of linear eqns with tri-diagonal matrix by Gaussian elimination SUBROUTINE GAUSSZ(a,b,m,n,if)
DIMENSION a(m,n,3),b(m,n) DO k=1,n-1 DO i=1,if
6
反 復 法(Chebyshev SLOR
法)b(i,k)=b(i,k)/a(i,k,2) a(i,k,3)=a(i,k,3)/a(i,k,2) b(i,k+1)=b(i,k+1)-a(i,k+1,1)*b(i,k)
a(i,k+1,2)=a(i,k+1,2)-a(i,k+1,1)*a(i,k,3) ENDDO ENDDO
FORALL(i=1:if)b(i,n)=b(i,n)/a(i,n,2) DO k=n-1,1,-1 DO i=1,if
b(i,k)=b(i,k)-a(i,k,3)*b(i,k+1) ENDDO ENDDO
END
このプログラムは偶数列の線過緩和,奇数列の線過緩和,平均残差値による収束判定を繰返し実行するも のである.このプログラムでは,i1
=
if;1
j1=
jf;1
,ie,ioはそれぞれ偶数列の数ievenまたは奇数列 の数ioddで,ieven+
iodd=
i1である.この場合のioddはievenと同数か1つ多くなる.aとbはiodd個の 3重対角行列の連立1
次方程式の係数行列と右辺を記憶する配列で,nは各連立1
次方程式の未知変数の数n
=
jf+1
である.偶数列の計算では,ieven個のn元連立1次方程式(2.23a)
の係数と右辺を作業用配列 a,bに並べて入力し ,サブルーチンGAUSSZを用いて並べて解く.奇数列の計算も同様である.GAUSSZは,1.4節に述べた1つの3重対角行列の連立
1
次方程式を解くサブルーチン GAUSS3を,if個の方程式を並 べて解くように拡張したものである.並列度を上げるためには,iに関するDO文を元のサブルーチンのDO 文の内側に入れなければならない.問
2
2.4節の混合境界値問題の解をChebyshev SLOR
法で求めよ.この混合境界値問題のプログラムを上記サブルーチンZEBRA1に倣って作ったものを以下に示す.
!*********************************************************************************
! Sol of mixed bound value problem of elliptic pde by zebra line overrelaxation
!*********************************************************************************
SUBROUTINE ZEBRA2(u,c,f,r,i0,i1,if,j1,jf,a,b,m,n,bt,na,naf,rmean,e)
REAL*4 u(0:if,0:jf),c(0:if,0:jf,0:4),f(0:if,0:jf),r(0:if,0:jf),a(m,n,3),b(m,n) IF(bt<.75)bt=.8 naf=MAX0(naf,1000)
e=AMAX1(e,1.E-5)
ie0=(i0+1)/2 io0=i0-ie0 ie=if/2+1 io=if+1-ie je=jf/2+1 jo=jf+1-je
na=0 10 na=na+1
DO ii=2,ie i=2*ii-2 ip1=i+1 DO j=0,jf !even columns
IF(i==if)ip1=if-2 !ibn=2
a(ii,j+1,1) = c(i,j,3) !setup coef matrices
a(ii,j+1,2) = c(i,j,0)*bt a(ii,j+1,3) = c(i,j,4)
b(ii,j+1) = f(i,j)-c(i,j,1)*u(i-1,j)-c(i,j,0)*u(i,j) & !setup rhs
*(1.-bt)-c(i,j,2)*u(ip1,j) ENDDO ENDDO
CALL GAUSSMZ(a,b,m,n,2,ie0,jf+1,3,3) !solve sets of linear eqns CALL GAUSSMZ(a,b,m,n,ie0+1,ie,jf+1,1,1)
DO ii=2,ie i=2*ii-2 DO j=0,jf u(i,j) = b(ii,j+1)
ENDDO ENDDO
DO ii=1,io i=2*ii-1 ip1=i+1 DO j=0,jf !odd columns
IF(i==if)ip1=if-2 !ibn=2
a(ii,j+1,1) = c(i,j,3) !setup coef matrices
a(ii,j+1,2) = c(i,j,0)*bt a(ii,j+1,3) = c(i,j,4)
b(ii,j+1) = f(i,j)-c(i,j,1)*u(i-1,j)-c(i,j,0)*u(i,j) & !setup rhs
*(1.-bt)-c(i,j,2)*u(ip1,j) ENDDO ENDDO
CALL GAUSSMZ(a,b,m,n,1,io0,jf+1,3,3) !solve sets of linear eqns CALL GAUSSMZ(a,b,m,n,io0+1,io,jf+1,1,1)
DO ii=1,io i=2*ii-1 DO j=0,jf u(i,j) = b(ii,j+1)
ENDDO ENDDO
GOTO 11 na=na+1
DO jj=1,je j=2*(jj-1) jm1=j-1 jp1=j+1 DO i=0,if !even rows IF(i<i0)THEN IF(j==0)jm1=jf-1 IF(j==jf)jp1=1 !ib1=ibn=3 ELSE IF(j==0)jm1=0 IF(j==jf)jp1=jf !ib1,ibn=1 ENDIF
a(jj,i+1,1) = c(i,j,1) !setup coef matrices
a(jj,i+1,2) = c(i,j,0)*bt a(jj,i+1,3) = c(i,j,2)
b(jj,i+1) = f(i,j)-c(i,j,3)*u(i,jm1)-c(i,j,0)*u(i,j) & !setup rhs
*(1.-bt)-c(i,j,4)*u(i,jp1) ENDDO ENDDO
CALL GAUSSMZ(a,b,m,n,1,je,if+1,1,2) !solve sets of linear eqns DO jj=1,je j=2*(jj-1)
FORALL(i=0:if)u(i,j)=b(jj,i+1) ENDDO
DO jj=1,jo j=2*jj-1 DO i=0,if !odd rows
a(jj,i+1,1) = c(i,j,1) !setup coef matrices
a(jj,i+1,2) = c(i,j,0)*bt a(jj,i+1,3) = c(i,j,2)
b(jj,i+1) = f(i,j)-c(i,j,3)*u(i,j-1)-c(i,j,0)*u(i,j) & !setup rhs
*(1.-bt)-c(i,j,4)*u(i,j+1) ENDDO ENDDO
CALL GAUSSMZ(a,b,m,n,1,jo,if+1,1,2) !solve sets of linear eqns DO jj=1,jo j=2*jj-1
FORALL(i=0:if)u(i,j)=b(jj,i+1) ENDDO
11 rmean=0.
DO i=1,if-1 im1=i-1 ip1=i+1 DO j=0,jf jm1=j-1 jp1=j+1
IF(i<i0)THEN IF(j==0)jm1=jf-1 IF(j==jf)jp1=1 !ib1=ibn=3 ELSE IF(j==0)jm1=0 IF(j==jf)jp1=jf !ib1,ibn=1 ENDIF
IF(i==if.AND.j>0.AND.j<jf)ip1=if-2 !ibn=2
r(i,j) = c(i,j,1)*u(im1,j)+c(i,j,2)*u(ip1,j) & !compute residuals +c(i,j,3)*u(i,jm1)+c(i,j,4)*u(i,jp1) &
+c(i,j,0)*u(i,j)-f(i,j)
rmean=rmean+ABS(r(i,j))/FLOAT(if*jf) !compute mean residual ENDDO ENDDO
IF(rmean>e.AND.na<naf) GOTO 10 !decide convergence END
!***** Subroutine GAUSSMZ *****
! Sol of sets of linear eqns with modified tri-diagonal matrix based on Gaussian elimination SUBROUTINE GAUSSMZ(a,b,m1,n1,is,ie,n,ib1,ibn)
REAL*4 a(m1,n1,3),b(m1,n1)
IF(ib1==2)THEN !ib1=2
FORALL(i=is:ie)a(i,1,1)=a(i,1,1)/a(i,1,2)
FORALL(i=is:ie)a(i,2,3)=a(i,2,3)-a(i,2,1)*a(i,1,1) ENDIF
DO k=1,n-1
IF(ib1==3.AND.k==n-2) & !ib1=ibn=3
FORALL(i=is:ie)a(i,k,3)=a(i,k,3)+a(i,k,1)
8
反 復 法(Chebyshev SLOR
法)FORALL(i=is:ie)
b(i,k)=b(i,k)/a(i,k,2) a(i,k,3)=a(i,k,3)/a(i,k,2) b(i,k+1)=b(i,k+1)-a(i,k+1,1)*b(i,k)
a(i,k+1,2)=a(i,k+1,2)-a(i,k+1,1)*a(i,k,3) ENDFORALL
IF(ibn==2.AND.k==n-2)THEN !ibn=2
FORALL(i=is:ie)b(i,n)=b(i,n)-a(i,n,3)*b(i,k) FORALL(i=is:ie)a(i,n,1)=a(i,n,1)-a(i,n,3)*a(i,k,3) ENDIF
IF(ib1==3)THEN !ib1=ibn=3
IF(k<n-2)THEN
FORALL(i=is:ie)a(i,k,1)=a(i,k,1)/a(i,k,2) FORALL(i=is:ie)a(i,k+1,1)=-a(i,k+1,1)*a(i,k,1) ENDIF
IF(k>1.AND.k<n-2)THEN
FORALL(i=is:ie)b(i,n)=b(i,n)-a(i,n,3)*b(i,k) FORALL(i=is:ie)a(i,n,1)=a(i,n,1)-a(i,n,3)*a(i,k,1) FORALL(i=is:ie)a(i,n,3)=-a(i,n,3)*a(i,k,3)
ELSEIF(k==n-2)THEN
FORALL(i=is:ie)b(i,n)=b(i,n)-a(i,n,3)*b(i,k) FORALL(i=is:ie)a(i,n,1)=a(i,n,1)-a(i,n,3)*a(i,k,3) ENDIF
ENDIF ENDDO
FORALL(i=is:ie)b(i,n)=b(i,n)/a(i,n,2) DO k=n-1,1,-1
FORALL(i=is:ie)b(i,k)=b(i,k)-a(i,k,3)*b(i,k+1) IF(ib1==3.AND.k<n-2) &
FORALL(i=is:ie)b(i,k)=b(i,k)-a(i,k,1)*b(i,n-1) !ib1=ibn=3 ENDDO
IF(ib1==2)FORALL(i=is:ie)b(i,1)=b(i,1)-a(i,1,1)*b(i,3) !ib1=2 END
このプログラムでは,偶数i列の線過緩和,奇数i列の線過緩和,偶数j行の線過緩和,奇数j行の線過 緩和,平均残差値による収束判定が繰り返される.i列の線過緩和では,連立
1
次方程式は周期条件の課さ れている部分とDirichlet
条件の課されている部分に分けて解かれる.また偶数j行の線過緩和でもこれら の境界条件を考慮するなど 必要である.偶数列または奇数列の連立1
次方程式はサブルーチンGAUSSMZを 用い並列処理される.GAUSSMZは2.4節のサブルーチンGAUSSMを並列処理できるように書換えたもので,ここに出てくるすべての境界条件に対応できる.その引数ie0,io0,ie,io,je,joは周期条件の課されてい る区間の偶数列の数ieven0,奇数列の数iodd0,全緩和区間の偶数列の数ieven,奇数列の数iodd,偶数行の 数jeven,奇数行の数joddである.またm1,n1は同時に解く連立
1
次方程式の最大数,その未知数の最大 数,is,ieは同時に線緩和する初めと終わりの列番号または行番号,ib1,ibnについては2.4節参照,メ インプログラムについても2.4節参照.以下には,ポアソン方程式uxx
+
uyy=
;2
のDirichlet
問題とラプラス方程式uxx+
uyy= 0
の混合境界値問題を,図
3.4
の境界条件のもとで出発値u= 0
を与えて解いた結果を示す.計算には格子間隔0.05
の正方形格子を用いた.次表は"
= 10
;5における係数 と最終反復数nの関係を示したものである.なお収 束しないときにはnf= 1000
における平均残差値rmeanが示してある.i-column
はi
列の線過緩和のみの場合,
j-row
はj
行の線過緩和のみの場合である.i
列の線過緩和とj
行の線過緩和を交互に行うADI
の場合は,予想に反し反復数は多くなった.括弧内の数字は
i
列とj
行の線過緩和を4
回ずつ交互に行った場合 で反復数は少なくなる.この表からi
列の線過緩和またはj
行の線過緩和のど ちらかで十分なことが分かる.Chebyshev SLOR
法は,図3.3(b)
に示す2次元の9
点高次差分方程式に対してはほとんどそのまま適用x = 0 1 x =;1 0 1
y = 0 y = 0
1 1
H
Dirichlet u = y Dirichlet
Hu = y Dirichlet u = y Dirichlet
Dirichlet
u = 0 u = 1
Dirichlet Dirichlet
u =;x u = 1;x
x
H
Neumann uHx=
;1
A A A A
periodic
u ( x 1)= u ( x 0)+1 u
y( x 1)= uy( x 0)
(a) Dirichlet
問題(b)
混合境界値問題図
3.4: Chebyshev SLOR
法の例題表
3.2: Chebyshev SLOR
法の解の収束状況Dirichlet
問題 混合境界値問題i-column i-column j-row ADI 0.75 391 41
10
;5diverge 260 (104)
0.80 24 99 100 306 (152)
1.00 157 426 430 536 (464)
1.25 313 853 856 926 (888)
1.50 470 4
10
;54
10
;55
10
;5(5
10
;5)
することができる.
(a)
図の9
点高次差分方程式の場合には,mod (
i3)
が0
の列,1
の列,2
の列に分け線緩和を並列処理するように書き変えることが必要である.3次元の
7
点差分方程式の場合には,xy面 内のChebyshev SLOR
法によるの計算をz方向に掃引することも考えられるが,Chebyshev SLOR
法とChebyshev SOR
法を組み合わせ,z方向に並ぶ点列をi+
jが偶数のものと奇数のものに分け線緩和を並列 に行えばいっそう高並列度になる.10
反 復 法( 多重格子法)3.3 多重格子法
多重格子
(multigrid
,MG)
法は,スカラーコンピュータの時代に,楕円型偏微分方程式の境界値問題の効率的な数値解法として考案されたもので,その後多くの問題に適用できるように拡張されてきた.多重 格子法は,格子間隔hの基本格子のほかに,それに重なる格子間隔
2
h4
h::: の格子を用い緩和計算を行 うものである.前述のように,短波長の残差の波は容易に緩和できるが,長波長のものは容易でない.多重 格子法は,異なる寸法の格子を用い,すべての波長の残差を効率よく緩和しようとするものである.多重格 子法では,格子間隔hの細かい格子の残差は限定集計(restriction)
によって1つずつ粗い格子のものに移 され,粗い格子の修正値は延長補間(prolongation)
によって1つずつ細かい格子のものに移される.また 点緩和は適宜 各格子で行われるが,過緩和の必要はなく専らGauss
反復法が用いられる.最も粗い格子で は直接法も用いられる.限定集計,延長補間,Gauss
反復法はすべて並列処理可能で多重格子法はベクトル コンピュータにも適する計算技法である.3.3.1 楕円型線形微分方程式の多重格子法
始めに
Poisson
方程式uxx+
uyy=
;2
に対して多重格子法を説明する.格子間隔hの正方形格子の場合 には,差分方程式はu
i;1j
+
ui+1j+
uij;1+
uij+1;4
uij=
;2
h2となり,その残差の式は
r
ij
=
ui;1j+
ui+1j+
uij;1+
uij+1;4
uij+2
h2となる.今出発値uij
= 0
を与えて計算を始めることにすればその初期残差はrij= 2
h2となる.また格子間隔H
= 2
hの粗い格子に対しては初期残差はrIJ= 2
H2= 8
h2となる.これより初期残差値は,格子セ ルの面積に比例することが分かる.格子間隔x=
hy=
h=の長方形格子の場合には,差分方程式はu
i;1j;
2
uij+
ui+1j+
2(
uij;1;2
uij+
uij+1) =
;2
h2(3.2)
また残差の式は
r
ij
=
ui;1j;2
uij+
ui+1j+
2(
uij;1;2
uij+
uij+1)+2
h2(3.3)
となる.多重格子法では,まず既知のh格子の残差値rijに対し H格子の残差値rIJを見積もることが必 要である.
上記の初期残差の例では,残差値が計算領域を通して一様で,また計算領域内の残差値を集計したものは 格子の大きさによらず一定であった.この性質を一般化すればh格子とH格子の残差の関係は次のようにな る.図
3.5(a)
は多重格子を示したもので,h格子の格子点を印,H格子の格子点を 印で,またh格子の 格子点番号をij,H格子のものをIJで示してある.計算領域内の残差の集計値が一定になるように,残差 値rijはすべてrIJに,ri+1jは2
分してrIJとrI+1Jに,ri+1j+1は4
分してrIJrI+1JrI+1J+1rIJ+1 に集計することにする.このとき,残差値rIJは図に印を付けた格子点の残差値rij::: を太線枠内の面 積を勘案?
して集計したものになる.このような操作を限定集計(restriction)
と呼び,式で表せば次のよう になる.r
IJ
=
rij+12(
ri;1j+
ri+1j+
rij;1+
rij+1)+14(
ri;1j;1+
ri+1j;1+
ri;1j+1+
ri+1j+1) (3.4)
e e
e e
s s s
s s s
s s s
i;2
I;1 i;1 i
I
i+1 i+2
I+1
j;2
J;1
j;1
j
J j+1
j+2
J+1
(a)
a/4 a/4
a/2 a/2
a a
a/4 a/4
1/4 1/4
1/21 1/21
1/4 1/4
-1-a
-2-2a
-a/2 -a/2
-1/2 -1/2 -2-2a
a=
2(b)
図
3.5:
長方形格子の限定集計式
(3.3)
を限定集計すれば ,左辺はかなり長い式になるが,その係数を整理したものは(b)
図のようになる.すなわち,この図の位置関係は
(a)
図と同じで,図中の円またはオーバル内の上段の数字になる.また下段 の数字はこの係数をH格子の格子点に集めたものである.これよりh格子のラプラス演算子を限定集計し たものは,当然のことながら,H格子のラプ ラス演算子で近似できることが分かる.結局 式(3.3)
を限定集計したH格子の式は次のようになる2.
r
IJ
=
uI;1J;2
uIJ+
uI+1J+
2(
uIJ;1;2
uIJ+
uIJ+1)+2
H2(3.5)
多重格子法の計算の途中の段階を考え,そのuの近似値をuij,また解をuij
+
dijとする.このdijは理想的な修正値で,すべての残差を
0
にするものである.したがって0 = (
ui;1j+
di;1j)
;2(
uij+
dij)+(
ui+1j+
di+1j) +
2(
uij;1+
dij+1)
;2(
uij+
dij)+(
uij+1+
dij+1)
+2
h2この式に残差の式
(3.3)
を用いれば次のh格子の修正値dijの差分方程式が導かれる.d
i;1j;
2
dij+
di+1j+
2(
dij+1;2
dij+
dij+1)+2
h2=
;rij(3.6)
この式を限定集計すれば ,次のH格子の修正値dIJの差分方程式が導かれる.
d
I;1J;
2
dIJ+
dI+1J+
2(
dIJ+1;2
dIJ+
dIJ+1)+2
h2=
;rIJ(3.7)
通常この差分方程式はガウス反復法で解かれH格子のuIJの修正値dIJが求められる.この修正値はh格 子の修正値dijにそのまままたは
Lagrange
補間によって移される.d
ij
=
dIJ dij= (
;dij;3+9
dij;1+9
dij+1;dij+3)
=16
d
i2
= (3
di1+6
di3;di5)
=8 (3.8)
2なお差分方程式と残差の式が
u
i;1j
;2uij+ui+1j
x
2 +uij;1;2uij+uij+1
y
2 =;2
r
ij =ui;1j;2uij+ui+1j
x
2 +uij;1;2uij+uij+1
y
2 +2
のようになっている場合には,残差の限定集計ではなく重み平均を取るべきである.
12
反 復 法( 多重格子法)多重格子法ではH格子の修正値からこのようにしてh格子の修正値を求める操作を延長補間
(prolongation)
という.多重格子法では,各格子レベルで緩和計算を行い,格子サイズに合った残差の波の成分を緩和する ことになる.小サイズの格子の修正値は,その格子で求めた修正値にそれよりも大きいサイズの格子で求 めた修正値を延長補間したものすべてを合算したものになる.
以上の説明をもとに,次に多重格子法を一般的に説明する.線形微分方程式は
L
(
u) =
f(3.9)
またその近似差分方程式は
L
h
(
uh) =
fh(3.10)
のように書くことができる.上添え字hは格子間隔を意味するものとする.その第n近似解をuh(n)とす れば ,式
(3.10)
の残差はr
h(n)
=
Lh(
uh(n))
;fh(3.11)
となる.今 式
(3.10)
の残差を零にする理想的なuh(n)の修正値をdhとする.すなわちLh
(
uh(n)+
dh) =
fh.L
hは線形演算子であるから,この式と式
(3.11)
から,次の細かい格子の修正値dhの差分方程式が得られる.L
h
(
dh) =
;rh(n)(3.12)
ここで格子間隔H
= 2
hの粗い格子を考え,式(3.12)
の限定集計を取れば次式が得られる.L
H
(
dH) =
;rH(3.13)
ただし
r
H
=
IhHrh(3.14)
I H
h は限定集計演算子
(restriction operator)
と呼ばれるものである.式(3.13)
はH格子の修正値dHの差分方程式で,dHの値は緩和計算によって求められる.修正値dHからh格子の修正値dhは延長補間によっ て求められる.
d
h
=
IHhdH(3.15)
ただし IHh は延長補間演算子
(prolongation operator)
と呼ばれるものである.uの第n+1
近似値はu
h(n+1)
=
uh(n)+ ~
dh(3.16)
となる.ただしd
~
hは,h格子の緩和計算で求めた修正値に,2
h4
h::: 格子の緩和計算で求めた修正値を 延長補間したものを加えた修正値である.多重格子法の計算の手順,すなわち残差の計算,限定集計,修正値の計算,延長補間,修正値の加算をど のような順番で反復するのかは各種のものが提案されている.その最適手順は解くべき問題,微分方程式 と境界条件,格子や数値解法によるものと思われる.図