前回(BO or adiabatic)ではをに一致するように選ぶことで、原子核に対する微分方程式を得た。
Crude-BO or Crude-adiabatic では、を任意のベクトルに固定する(平衡位置に選ぶことがほとんどであろう)。
この場合、電子波動関数はに依存していないので、原子核位置で微分してもゼロになる。
import numpy as np
from math import radians
from scipy.special import legendre
from scipy.integrate import simps
from scipy.interpolate import interp1d, interp2d
from matplotlib import pyplot as plt
defPlx( l, x ):
# legendre( l ) >>> poly1d([ ... ])# poly1d([ ... ])( x ) >>> floatreturn legendre( l )( x )
defpw_expand( func, l, r ):
N = 300
theta = np.linspace( 0., np.pi, N )
coeff = ( 2 * l + 1 ) / 2.
pw = []
for rr in r:
integrand = []
for t in theta:
x = rr * np.cos( t )
y = rr * np.sin( t )
integrand.append( coeff * np.sin( t ) * func( x, y ) * Plx( l, np.cos( t ) ) )
print( np.array( integrand ) )
pw.append( simps( np.array( integrand ), theta ) )
return np.array( pw )
# For an interpolated functiondefpw_expand_interp( func, l, r ):
N = 300
theta = np.linspace( 0., np.pi, N )
coeff = ( 2 * l + 1 ) / 2.
pw = []
for rr in r:
integrand = []
for t in theta:
x = rr * np.cos( t )
y = rr * np.sin( t )
integrand.append( coeff * np.sin( t ) * func( x, y )[0] * Plx( l, np.cos( t ) ) )
pw.append( simps( np.array( integrand ), theta ) )
return np.array( pw )
最初に、真四角の定数ポテンシャルを展開してみる。
N = 500
x = np.linspace( -2, 2, N )
y = np.linspace( -2, 2, N )
X, Y = np.meshgrid( x, y )
mat_v_const = np.zeros( ( N, N ) )
for ix, xx inenumerate( x ):
for iy, yy inenumerate( y ):
mat_v_const[ iy ][ ix ] = potential_const( xx, yy )
fig = plt.figure( figsize = ( 5, 4 ) )
ax = fig.add_subplot( 1, 1, 1 )
pcm = plt.pcolormesh( X, Y, mat_v_const, cmap = 'Greys' )
fig.colorbar( pcm )
plt.savefig( "v_const.png" )
plt.show()