3. 続き
• Solid Harmonics(体球調和関数)での表記はわりと単純
• 紹介するもの
– 実装に必要な数式一式(読みながら実装できる程度に)
– 符号の定義は対称性がよくなるように
– (多分)世界一簡単な導出
今回の話が簡単で当たり前すぎて何が有難いのか
さっぱりわからなかったという人向けの参考文献
• Grengard & Rokhlin(1988), “The rapid evaluation of potential
fields in three dimensions”
• Epton & Dembart(1995) “Multipole translation theory for the
three-dimensional laplace and helmholtz equations”
• van Gelderen(1998) “The shift operators and translations of
spherical harmonics”
4. 2 Solid Harmonics
いきなり「定義はこう」で申し訳ないが、‘Regular’ と ‘Singular’ のものを
m
(|m|−m)/2
R (r, θ, φ) = (−1)
S
m
(r, θ, φ) = (−1)
r
|m|
imφ
P
(cos θ)e
,
( + |m|)!
+(|m|+m)/2
( − |m|)! |m|
imφ
P
(cos θ)e
,
+1
r
(1)
(2)
とする。P m は Legendre の陪多項式。ちなみに普通の球面調和関数は
Y
m
(r, θ, φ) = (−1)
(|m|−m)/2
s
2 + 1 ( − |m|)! |m|
imφ
P
(cos θ)e
. (3)
4π ( + |m|)!
m の符号反転に対しては単なる複素共役にならず、R−m = (−1)m [Rm ]∗ ,
S −m = (−1)m [S m ]∗ となっている。
後々のため、S m の定義には (−1) +m の因数を含ませた。
!
+m 2 +1
(−1)
r
m
Sm
R =
( + m)!( − m)!
5. 3 多重極能率と局所展開
球座標での Laplace 方程式 ∇2 Φ(r, θ, φ) = 0 の一般解はさっきのを用いて、
Φ(r, θ, φ) =
∞
X X h
m
m
L R (r, θ, φ) + M
m
S
−m
i
(r, θ, φ) ,
(4)
=0 m=−
と書ける。係数の Lm を local expansions(局所展開) M m を multipole moments
、
(多重極能率)と呼ぶことにする。それぞれ展開中心を rL 、rM として、
P2M:
M
m
=
X
m
qi · R (rM − ri )
(5)
i
M2P:
Φ(r) =
p
λ
X X
µ
−µ
Mλ Sλ (r − rM )
(6)
λ=0 µ=−λ
L2P:
Φ(r) =
p
λ
X X
λ=0 µ=−λ
µ
µ
Lλ Rλ (r − rL )
(7)
7. 5 計算方法
˜
P m (r, z) = r · (r sin θ)−m · P m (cos θ) ∈ R としておくと
˜
P m (r, z) · (x + iy)m = r · P m (cos θ) · eimφ 。あとは漸化式
˜
P m (r, z) =
8
(−1)m (2m − 1)!!
<
m
˜
(2 − 1)z P −1 (r, z)
: 2 − 1 z P m (r, z) −
˜
−1
−m
+ m − 1 2 ˜m
r P −2 (r, z)
−m
( = m)
( = m + 1)
( ≥ m + 2)
(8)
•
•
•
•
!! は二重階乗、n!! = n · (n − 2)!!, 1!! = 0!! = 1
m
m ループを外側に、対角成分 Pm から を育てる
Rm は division/square-root free
1.0/(int), 1.0/factrl(i) はテーブルで覚えておく
8. 6 八象限対称
Rm (−x, −y, −z) = (−1) Rm (x, y, z),
Rm (x, −y, z) = (−1)m R−m (x, y, z),
Rm (−x, y, z) = R−m (x, y, z),
Rm (−x, −y, z) = (−1)m Rm (x, y, z),
等々。コードの再利用にも有効。
S −m をよく使うが、これは ∝ (−1) +m R−m なので
引数に (−x, y, −z) を入れればいい。
(9)
11. 9 加法定理
Rm (r) も S m (r) も Laplace 方程式の解であった。よって先程の展
開を適用すると以下の加法定理を得る:
Rm (r + ∆r) =
λ
∞
X X
µ
Rλ (∆r)Rm−µ (r),
−λ
(14)
−(m+µ)
µ
Rλ (∆r)S +λ
(r).
(15)
λ=0 µ=−λ
S
−m
(r + ∆r) =
∞
λ
X X
λ=0 µ=−λ
余白にもう一度、
Φ(r + ∆r) =
∞
λ
X X
λ=0 µ=−λ
µ
−µ
Rλ (∆r)[Dλ Φ(r)].
12. 10 1/r ポテンシャルの展開
0
S0 (r) の加法定理として、
1
rS − rR
0
= S0 (rS − rR )
=
∞
X X
S
−m
m
(rS )R (−rR )
=0 m=−
3
2
∞
X rR
X ˆ m
˜∗ m
4π
4
=
Y (θS , φS ) Y (θR , φR )5
r +1 2 + 1 m=−
=0 S
∞
X rR
=
P (cos θSR ),
+1
r
=0 S
with
for
rS
cos θSR = (rS · rR )/( rS
後ろ2行とかは教科書にも載っているかも。
> rR ,
rR ).
(16)
13. 11 M2P, M2L
1
r − ri
=
∞
X X
S
−m
m
(r − rM )R (rM − ri ),
=0 m=−
よりただちに M2P が確認できる:
M
m
=
X
m
qi · R (rM − ri ) ⇒ Φ(r) =
i
p
λ
X X
µ
−µ
Mλ Sλ (r − rM ).
λ=0 µ=−λ
Φ(r) に D−m をあてて局所展開を作ると、
M2L:
m
L
=
p
λ
X X
λ=0 µ=−λ
µ −(m+µ)
Mλ S +λ
(rL
− rM ).
(17)
14. 12 M2M
展開中心を rM から rM にシフトすることを考える。
Rm の加法定理から、
Rm (rM − ri ) =
λ
∞
X X
µ
Rλ (rM − rM )Rm−µ (rM − ri ).
−λ
λ=0 µ=−λ
P
i
qi を適用することで、
M2M:
M
m
=
λ
X X
µ
M m−µ Rλ (rM − rM ).
−λ
λ=0 µ=−λ
オーバーフローを避けるために、µ のループ範囲は、
max(−λ, m − ( − λ)) ≤ µ ≤ min(λ, m + ( − λ)).
(18)
15. 13 L2L
Φ(r) =
∞
λ
X X
µ
Lµ Rλ (r − rL ) ⇒ Lm = [D−m Φ(r)]r=r L ,
λ
λ=0 µ=−λ
を新しい展開中心 rL でもう一度展開するだけ:
L2L:
L
m
=
p
λ
X X
µ−m
Lµ Rλ− (rL − rL ).
λ
(19)
λ= µ=−λ
ついでに、ポテンシャルの勾配は
Φ(rL + dr) = L0 + (− L1 )dx + ( L1 )dy + L0 dz, (20)
0
1
1
1
で得られるので、L2P のかわりに p = 1 の L2L を使うと実装が楽。
17. 15 実行列化
複素数での線形変換
L
m
=
p
X
λ
X
G
m,µ µ
M
,λ
λ
λ=0 µ=−λ
2
3
p
λ
X
X
m,µ µ
m,−µ −µ 5
4Gm,0 M 0 +
=
(G
M +G
M
) ,
λ
,λ
,λ
λ
,λ
λ
µ=1
λ=0
(22)
を頑張って実数の変換で書くと、
L
m
=
p
X
λ=0
p
X
2
4Am,0 M 0 +
λ
,λ
λ
X n
µ=1
m,µ
m,µ
(A
+C
)
,λ
,λ
µ
m,µ
m,µ
M + (−B
+D
)
λ
,λ
,λ
2
λ
X n
m,µ
m,µ
m,0 0
m
4B
(B
+D
)
Mλ +
=
L
,λ
,λ
,λ
µ=1
λ=0
ここで、Am,µ + iBm,µ
,λ
,λ
= G
m,µ
,
,λ
C
M
µ
m,µ
m,µ
+ (A
−C
)
λ
,λ
,λ
m,µ
m,µ
m,−µ
+ iD
= (−1)µ G
.
,λ
,λ
,λ
M
M
o
3
µ 5
,
λ
o
3
µ 5
,
λ