学習目標
- BCSギャップ方程式のシミュレーションを実装する
- ロンドン方程式を使って磁場侵入を可視化する
- インタラクティブな超伝導体相図を作成する
- 超伝導材料データベースと解析ツールを構築する
- 第二種超伝導体における渦糸の挙動をシミュレートする
5.1 セットアップと前提条件
必要なライブラリ
# 必要なパッケージのインストール
# pip install numpy matplotlib scipy pandas
import numpy as np
import matplotlib.pyplot as plt
from scipy import integrate, optimize
import pandas as pd
# プロットスタイルの設定
plt.style.use('seaborn-v0_8-whitegrid')
plt.rcParams['figure.figsize'] = [10, 6]
plt.rcParams['font.size'] = 12
5.2 BCSギャップ方程式のシミュレーション
BCS理論は、超伝導エネルギーギャップが温度とともにどのように変化するかを予測します。これを数値的に実装してみましょう。
理論
有限温度でのBCSギャップ方程式は次のようになります:
1 = N(0)V ∫₀^ωD dε / √(ε² + Δ²) × tanh(√(ε² + Δ²) / 2kBT)
この方程式を自己無撞着的に解いて、Δ(T)を求めることができます。
import numpy as np
import matplotlib.pyplot as plt
from scipy import integrate, optimize
def bcs_gap_equation(Delta, T, Tc, Delta0):
"""
数値解のためのBCSギャップ方程式
解で0になるべき差を返す
"""
if Delta <= 0 or T >= Tc:
return Delta # 解がないことを示すためにDelta自身を返す
# 換算温度
t = T / Tc
# 自然単位系を使用(kB*Tc = 1)
kB = 1.0
# 積分点の数
N = 1000
omega_D = 10 * Delta0 # デバイカットオフ(>> Delta)
epsilon = np.linspace(0.001, omega_D, N)
E = np.sqrt(epsilon**2 + Delta**2)
# BCSカーネル
if T > 0:
kernel = np.tanh(E / (2 * T)) / E
else:
kernel = 1.0 / E
# 数値積分
integral = np.trapz(kernel, epsilon)
# ギャップ方程式:結合強度に等しくなるべき
# T=0でDelta = Delta0となるように規格化
coupling = Delta0 / np.trapz(1.0 / np.sqrt(epsilon**2 + Delta0**2), epsilon)
return coupling * integral - 1.0
def solve_bcs_gap(Tc, Delta0, num_points=50):
"""
温度範囲でBCSギャップ方程式を解く
TとDeltaの配列を返す
"""
T_values = np.linspace(0.01 * Tc, 0.999 * Tc, num_points)
Delta_values = []
for T in T_values:
# 初期推測:近似式を使用
t = T / Tc
Delta_approx = Delta0 * np.sqrt(1 - t) if t < 1 else 0
try:
# ギャップ方程式の根を見つける
result = optimize.brentq(
lambda D: bcs_gap_equation(D, T, Tc, Delta0),
1e-10, Delta0 * 1.5
)
Delta_values.append(result)
except:
# 数値解が失敗した場合は近似式を使用
Delta_values.append(Delta_approx)
return np.array(T_values), np.array(Delta_values)
# シミュレーションパラメータ
Tc = 9.3 # K(ニオブ)
kB = 8.617e-5 # eV/K
Delta0 = 1.76 * kB * Tc # BCS予測によるDelta(0)
# 安定性のため、より簡単なBCS近似式を使用
def bcs_gap_approx(T, Tc, Delta0):
"""BCSギャップの近似温度依存性"""
t = T / Tc
if t >= 1:
return 0
# 全温度範囲で有効な近似
return Delta0 * np.tanh(1.74 * np.sqrt((1/t - 1)))
# データの生成
T_range = np.linspace(0.1, Tc, 200)
Delta_approx = [bcs_gap_approx(T, Tc, Delta0) for T in T_range]
# プロット作成
fig, axes = plt.subplots(1, 2, figsize=(14, 5))
# 左:ギャップ対温度
ax1 = axes[0]
ax1.plot(T_range, np.array(Delta_approx) * 1000, 'b-', linewidth=2,
label='BCS予測')
ax1.axvline(x=Tc, color='r', linestyle='--', label=f'Tc = {Tc} K')
ax1.axhline(y=Delta0 * 1000, color='gray', linestyle=':', alpha=0.5,
label=f'Δ(0) = {Delta0*1000:.3f} meV')
ax1.set_xlabel('温度 (K)', fontsize=12)
ax1.set_ylabel('エネルギーギャップ Δ (meV)', fontsize=12)
ax1.set_title('BCSエネルギーギャップ対温度(ニオブ)', fontsize=14)
ax1.legend(fontsize=10)
ax1.set_xlim(0, Tc * 1.1)
ax1.set_ylim(0, Delta0 * 1000 * 1.2)
ax1.grid(True, alpha=0.3)
# 右:規格化されたギャップ
ax2 = axes[1]
t_norm = T_range / Tc
delta_norm = np.array(Delta_approx) / Delta0
ax2.plot(t_norm, delta_norm, 'b-', linewidth=2, label='BCS近似')
# 弱結合BCS限界を追加
ax2.plot([0, 1], [1, 0], 'g--', alpha=0.5, linewidth=1.5,
label='線形近似')
ax2.set_xlabel('T / Tc', fontsize=12)
ax2.set_ylabel('Δ(T) / Δ(0)', fontsize=12)
ax2.set_title('規格化されたBCSギャップ', fontsize=14)
ax2.legend(fontsize=10)
ax2.set_xlim(0, 1.1)
ax2.set_ylim(0, 1.1)
ax2.grid(True, alpha=0.3)
plt.tight_layout()
plt.show()
# 主要な値を出力
print("ニオブのBCS理論予測:")
print(f" 臨界温度 Tc = {Tc} K")
print(f" 零温度ギャップ Δ(0) = {Delta0*1000:.3f} meV")
print(f" BCS比 2Δ(0)/kB*Tc = {2*Delta0/(kB*Tc):.3f}(BCS:3.52)")
5.3 ロンドン侵入深さのシミュレーション
ロンドン方程式は、磁場が超伝導体にどのように侵入するかを記述します。表面での磁場減衰をシミュレートしてみましょう。
import numpy as np
import matplotlib.pyplot as plt
class LondonPenetration:
"""
ロンドン理論を使用した磁場侵入のシミュレーション
"""
def __init__(self, lambda_L, thickness=None):
"""
ロンドン侵入深さで初期化
パラメータ:
-----------
lambda_L : float
ロンドン侵入深さ(nm)
thickness : float, optional
膜厚(nm)(バルクの場合はNone)
"""
self.lambda_L = lambda_L
self.thickness = thickness
def field_profile_bulk(self, x, B0=1.0):
"""
バルク超伝導体での磁場プロファイル
B(x) = B0 * exp(-x/lambda_L)
"""
return B0 * np.exp(-x / self.lambda_L)
def field_profile_film(self, x, B0=1.0):
"""
薄膜での磁場プロファイル
両側から磁場が印加された厚さdの膜の場合
"""
if self.thickness is None:
return self.field_profile_bulk(x, B0)
d = self.thickness
lam = self.lambda_L
# 薄膜の解:coshプロファイル
return B0 * np.cosh((x - d/2) / lam) / np.cosh(d / (2*lam))
def current_density(self, x, B0=1.0, mu0=4*np.pi*1e-7):
"""
マクスウェル方程式からの遮蔽電流密度
J = -dB/dx / mu0
"""
return B0 / (self.lambda_L * mu0) * np.exp(-x / self.lambda_L)
# 異なる材料のインスタンスを作成
materials = {
'アルミニウム': LondonPenetration(50),
'ニオブ': LondonPenetration(40),
'YBCO': LondonPenetration(150),
'NbTi': LondonPenetration(300),
}
# 空間範囲
x = np.linspace(0, 1000, 1000) # nm
# 包括的な可視化を作成
fig, axes = plt.subplots(2, 2, figsize=(14, 10))
# プロット1:磁場プロファイルの比較
ax1 = axes[0, 0]
colors = plt.cm.viridis(np.linspace(0.2, 0.8, len(materials)))
for (name, sc), color in zip(materials.items(), colors):
B = sc.field_profile_bulk(x)
ax1.plot(x, B, linewidth=2, color=color,
label=f'{name} (λ={sc.lambda_L} nm)')
ax1.axhline(y=1/np.e, color='gray', linestyle='--', alpha=0.5)
ax1.text(800, 1/np.e + 0.05, f'B/B₀ = 1/e', fontsize=10, color='gray')
ax1.set_xlabel('表面からの距離 (nm)', fontsize=12)
ax1.set_ylabel('B/B₀', fontsize=12)
ax1.set_title('バルク超伝導体での磁場侵入', fontsize=14)
ax1.legend(fontsize=10)
ax1.set_xlim(0, 1000)
ax1.set_ylim(0, 1.1)
ax1.grid(True, alpha=0.3)
# プロット2:電流密度プロファイル
ax2 = axes[0, 1]
for (name, sc), color in zip(materials.items(), colors):
# 規格化された電流密度
J = np.exp(-x / sc.lambda_L) / sc.lambda_L
ax2.plot(x, J * 1000, linewidth=2, color=color, label=name)
ax2.set_xlabel('表面からの距離 (nm)', fontsize=12)
ax2.set_ylabel('遮蔽電流(任意単位)', fontsize=12)
ax2.set_title('遮蔽電流密度', fontsize=14)
ax2.legend(fontsize=10)
ax2.set_xlim(0, 500)
ax2.grid(True, alpha=0.3)
# プロット3:薄膜効果
ax3 = axes[1, 0]
thicknesses = [50, 100, 200, 500] # nm
colors_film = plt.cm.plasma(np.linspace(0.2, 0.8, len(thicknesses)))
lambda_L = 100 # nm
for d, color in zip(thicknesses, colors_film):
film = LondonPenetration(lambda_L, thickness=d)
x_film = np.linspace(0, d, 200)
B = film.field_profile_film(x_film)
ax3.plot(x_film, B, linewidth=2, color=color, label=f'd = {d} nm')
ax3.set_xlabel('膜内の位置 (nm)', fontsize=12)
ax3.set_ylabel('B/B₀', fontsize=12)
ax3.set_title(f'薄膜での磁場プロファイル(λ = {lambda_L} nm)', fontsize=14)
ax3.legend(fontsize=10)
ax3.grid(True, alpha=0.3)
# プロット4:λの温度依存性
ax4 = axes[1, 1]
def lambda_vs_T(T, Tc, lambda_0):
"""二流体モデル:λ(T) = λ(0) / sqrt(1 - (T/Tc)^4)"""
t = T / Tc
if t >= 1:
return np.inf
return lambda_0 / np.sqrt(1 - t**4)
# ニオブの例
Tc = 9.3
lambda_0 = 40
T_range = np.linspace(0.1, 0.99 * Tc, 100)
lambda_T = [lambda_vs_T(T, Tc, lambda_0) for T in T_range]
ax4.plot(T_range / Tc, np.array(lambda_T) / lambda_0, 'b-', linewidth=2)
ax4.axhline(y=1, color='gray', linestyle=':', alpha=0.5)
ax4.axvline(x=1, color='r', linestyle='--', alpha=0.5, label='Tc')
ax4.set_xlabel('T / Tc', fontsize=12)
ax4.set_ylabel('λ(T) / λ(0)', fontsize=12)
ax4.set_title('侵入深さの温度依存性', fontsize=14)
ax4.set_xlim(0, 1.05)
ax4.set_ylim(0.9, 5)
ax4.legend(fontsize=10)
ax4.grid(True, alpha=0.3)
plt.tight_layout()
plt.show()
5.4 超伝導材料データベース
超伝導材料の包括的なデータベースを構築し、それらの特性を解析しましょう。
import numpy as np
import matplotlib.pyplot as plt
import pandas as pd
# 超伝導体データベースの作成
sc_data = {
'Material': ['Al', 'Hg', 'Pb', 'Nb', 'NbTi', 'Nb3Sn', 'MgB2',
'YBCO', 'BSCCO-2223', 'Hg-1223', 'FeSe', 'H3S'],
'Tc_K': [1.2, 4.2, 7.2, 9.3, 10, 18.3, 39,
93, 110, 133, 8, 203],
'Hc2_T': [0.01, 0.04, 0.08, 0.4, 15, 24, 16,
100, 60, 100, 17, 70],
'Type': ['I', 'I', 'I', 'II', 'II', 'II', 'II',
'II', 'II', 'II', 'II', 'II'],
'Class': ['元素', '元素', '元素', '元素', '合金', 'A15', '化合物',
'銅酸化物', '銅酸化物', '銅酸化物', '鉄系', '水素化物'],
'Year': [1933, 1911, 1913, 1930, 1962, 1954, 2001,
1987, 1988, 1993, 2008, 2015],
'Practical': [False, False, False, True, True, True, True,
True, True, False, False, False],
'Lambda_nm': [50, 40, 39, 40, 300, 80, 140,
150, 200, 200, 400, 50],
'Xi_nm': [1600, 170, 83, 38, 4, 3, 5,
1.5, 2, 1.5, 2, 1]
}
df = pd.DataFrame(sc_data)
# ギンツブルグ・ランダウパラメータの計算
df['Kappa'] = df['Lambda_nm'] / df['Xi_nm']
# データベースの表示
print("超伝導体データベース:")
print(df.to_string(index=False))
print()
# 解析と可視化
fig, axes = plt.subplots(2, 2, figsize=(14, 10))
# プロット1:材料クラス別のTc
ax1 = axes[0, 0]
class_colors = {'元素': 'blue', '合金': 'green', 'A15': 'orange',
'化合物': 'purple', '銅酸化物': 'red', '鉄系': 'brown',
'水素化物': 'magenta'}
for mat_class in df['Class'].unique():
subset = df[df['Class'] == mat_class]
ax1.scatter(subset['Year'], subset['Tc_K'], s=100,
c=class_colors[mat_class], label=mat_class, alpha=0.7)
ax1.axhline(y=77, color='cyan', linestyle='--', alpha=0.7, linewidth=2)
ax1.text(2018, 80, 'LN₂ (77K)', fontsize=10, color='cyan')
ax1.set_xlabel('発見年', fontsize=12)
ax1.set_ylabel('臨界温度 (K)', fontsize=12)
ax1.set_title('超伝導体Tcの進化', fontsize=14)
ax1.legend(fontsize=9, loc='upper left')
ax1.grid(True, alpha=0.3)
# プロット2:Tc対Hc2
ax2 = axes[0, 1]
for mat_class in df['Class'].unique():
subset = df[df['Class'] == mat_class]
ax2.scatter(subset['Tc_K'], subset['Hc2_T'], s=100,
c=class_colors[mat_class], label=mat_class, alpha=0.7)
ax2.set_xlabel('臨界温度 Tc (K)', fontsize=12)
ax2.set_ylabel('上部臨界磁場 Hc2 (T)', fontsize=12)
ax2.set_title('Tc対Hc2', fontsize=14)
ax2.set_xscale('log')
ax2.set_yscale('log')
ax2.legend(fontsize=9)
ax2.grid(True, alpha=0.3, which='both')
# プロット3:κ値(第一種対第二種の境界)
ax3 = axes[1, 0]
colors_kappa = ['blue' if k < 0.71 else 'red' for k in df['Kappa']]
bars = ax3.bar(df['Material'], df['Kappa'], color=colors_kappa, alpha=0.7)
ax3.axhline(y=1/np.sqrt(2), color='green', linestyle='--', linewidth=2,
label=f'κ = 1/√2 ≈ 0.71')
ax3.set_ylabel('κ = λ/ξ', fontsize=12)
ax3.set_title('ギンツブルグ・ランダウパラメータ κ', fontsize=14)
ax3.set_yscale('log')
ax3.legend(fontsize=10)
plt.setp(ax3.xaxis.get_majorticklabels(), rotation=45, ha='right')
# プロット4:実用材料対研究材料
ax4 = axes[1, 1]
practical = df[df['Practical'] == True]
research = df[df['Practical'] == False]
ax4.scatter(practical['Tc_K'], practical['Hc2_T'], s=150, c='green',
marker='s', label=f'実用材料 ({len(practical)})', alpha=0.7)
ax4.scatter(research['Tc_K'], research['Hc2_T'], s=150, c='red',
marker='o', label=f'研究材料 ({len(research)})', alpha=0.7)
# 材料名を追加
for _, row in df.iterrows():
ax4.annotate(row['Material'], (row['Tc_K'], row['Hc2_T']),
xytext=(5, 5), textcoords='offset points', fontsize=8)
ax4.set_xlabel('臨界温度 Tc (K)', fontsize=12)
ax4.set_ylabel('上部臨界磁場 Hc2 (T)', fontsize=12)
ax4.set_title('実用材料対研究材料', fontsize=14)
ax4.legend(fontsize=10)
ax4.grid(True, alpha=0.3)
plt.tight_layout()
plt.show()
# 統計的要約
print("\nクラス別統計要約:")
print(df.groupby('Class')[['Tc_K', 'Hc2_T', 'Kappa']].mean().round(2))
5.5 渦糸状態のシミュレーション
第二種超伝導体では、磁束が量子化された渦糸として侵入します。簡単な渦糸格子をシミュレートしてみましょう。
import numpy as np
import matplotlib.pyplot as plt
class VortexSimulation:
"""
第二種超伝導体における渦糸状態のシミュレーション
"""
def __init__(self, lambda_L=100, xi=5, Phi_0=2.07e-15):
"""
渦糸シミュレーションの初期化
パラメータ:
-----------
lambda_L : float
侵入深さ(nm)
xi : float
コヒーレンス長(nm)
Phi_0 : float
磁束量子(Wb)
"""
self.lambda_L = lambda_L
self.xi = xi
self.Phi_0 = Phi_0
self.kappa = lambda_L / xi
def single_vortex_field(self, x, y, x0=0, y0=0):
"""
単一渦糸の磁場
変形ベッセル関数を使用した近似解
"""
r = np.sqrt((x - x0)**2 + (y - y0)**2)
# 中心での特異性を回避
r = np.maximum(r, self.xi)
# 磁場プロファイル(近似)
B = np.exp(-r / self.lambda_L) / (2 * np.pi * self.lambda_L**2)
return B
def vortex_lattice(self, x, y, B_avg, lattice_type='triangular'):
"""
与えられた平均磁場に対する渦糸格子を作成
"""
# 平均磁場から渦糸間隔を計算
# B_avg = Phi_0 / (渦糸あたりの面積)
# 三角格子の場合:a = sqrt(2*Phi_0 / (sqrt(3) * B_avg))
a = np.sqrt(2 * self.Phi_0 / (np.sqrt(3) * B_avg)) * 1e9 # nmに変換
# 渦糸位置の生成
vortex_positions = []
n_range = 5 # 各方向の渦糸数
for i in range(-n_range, n_range + 1):
for j in range(-n_range, n_range + 1):
if lattice_type == 'triangular':
x0 = a * (i + 0.5 * (j % 2))
y0 = a * j * np.sqrt(3) / 2
else: # 正方格子
x0 = a * i
y0 = a * j
vortex_positions.append((x0, y0))
# 全磁場の計算
B_total = np.zeros_like(x)
for x0, y0 in vortex_positions:
B_total += self.single_vortex_field(x, y, x0, y0)
return B_total, vortex_positions, a
# シミュレーションの作成
sim = VortexSimulation(lambda_L=150, xi=2) # YBCOに近いパラメータ
# 空間グリッドの作成
L = 500 # nm
N = 200
x = np.linspace(-L, L, N)
y = np.linspace(-L, L, N)
X, Y = np.meshgrid(x, y)
# 異なる印加磁場(テスラ単位)
fields = [0.5, 1.0, 2.0]
fig, axes = plt.subplots(1, 3, figsize=(15, 5))
for ax, B_applied in zip(axes, fields):
B, vortex_pos, spacing = sim.vortex_lattice(X, Y, B_applied)
# 磁場強度のプロット
im = ax.contourf(X, Y, B, levels=50, cmap='hot')
plt.colorbar(im, ax=ax, label='B(任意単位)')
# 渦糸中心をマーク
vx = [p[0] for p in vortex_pos if abs(p[0]) < L and abs(p[1]) < L]
vy = [p[1] for p in vortex_pos if abs(p[0]) < L and abs(p[1]) < L]
ax.scatter(vx, vy, c='cyan', s=20, marker='o', alpha=0.5)
ax.set_xlabel('x (nm)', fontsize=11)
ax.set_ylabel('y (nm)', fontsize=11)
ax.set_title(f'B = {B_applied} T\n渦糸間隔 ≈ {spacing:.0f} nm', fontsize=12)
ax.set_aspect('equal')
plt.suptitle('第二種超伝導体における渦糸格子', fontsize=14, y=1.02)
plt.tight_layout()
plt.show()
# 追加の可視化:渦糸コア近傍の秩序パラメータ
fig, ax = plt.subplots(figsize=(10, 6))
r = np.linspace(0, 100, 200) # nm
# 秩序パラメータの回復
psi = np.tanh(r / (np.sqrt(2) * sim.xi))
# 磁場減衰
B_normalized = np.exp(-r / sim.lambda_L)
ax.plot(r, psi**2, 'b-', linewidth=2, label='|ψ|²(秩序パラメータ)')
ax.plot(r, B_normalized, 'r-', linewidth=2, label='B/B_core(磁場)')
ax.axvline(x=sim.xi, color='blue', linestyle='--', alpha=0.5,
label=f'ξ = {sim.xi} nm')
ax.axvline(x=sim.lambda_L, color='red', linestyle='--', alpha=0.5,
label=f'λ = {sim.lambda_L} nm')
ax.set_xlabel('渦糸中心からの距離 (nm)', fontsize=12)
ax.set_ylabel('規格化された値', fontsize=12)
ax.set_title('単一渦糸の構造', fontsize=14)
ax.legend(fontsize=10)
ax.grid(True, alpha=0.3)
ax.set_xlim(0, 100)
plt.tight_layout()
plt.show()
print(f"渦糸パラメータ:")
print(f" 侵入深さ λ = {sim.lambda_L} nm")
print(f" コヒーレンス長 ξ = {sim.xi} nm")
print(f" GLパラメータ κ = {sim.kappa:.1f}")
print(f" 磁束量子 Φ₀ = {sim.Phi_0:.2e} Wb")
5.6 包括的なシミュレーションプロジェクト
すべてを統合して、包括的な超伝導体解析ツールを作成しましょう。
import numpy as np
import matplotlib.pyplot as plt
class SuperconductorAnalyzer:
"""
超伝導体特性の完全な解析ツール
"""
def __init__(self, name, Tc, lambda_0, xi_0, Hc2_0=None):
"""
基本パラメータで超伝導体を初期化
"""
self.name = name
self.Tc = Tc # K
self.lambda_0 = lambda_0 # nm
self.xi_0 = xi_0 # nm
self.kappa = lambda_0 / xi_0
self.type = 'I' if self.kappa < 1/np.sqrt(2) else 'II'
# BCS定数
self.kB = 8.617e-5 # eV/K
self.Delta_0 = 1.76 * self.kB * Tc # BCSギャップ
# 臨界磁場
if Hc2_0 is None:
# GL理論から推定
Phi_0 = 2.07e-15 # Wb
self.Hc2_0 = Phi_0 / (2 * np.pi * (xi_0 * 1e-9)**2)
else:
self.Hc2_0 = Hc2_0
def gap(self, T):
"""温度Tでのbcsギャップ"""
if T >= self.Tc:
return 0
t = T / self.Tc
return self.Delta_0 * np.tanh(1.74 * np.sqrt(1/t - 1))
def lambda_L(self, T):
"""温度Tでの侵入深さ"""
if T >= self.Tc:
return np.inf
t = T / self.Tc
return self.lambda_0 / np.sqrt(1 - t**4)
def xi(self, T):
"""温度Tでのコヒーレンス長"""
if T >= self.Tc:
return np.inf
t = T / self.Tc
return self.xi_0 / np.sqrt(1 - t**4)
def Hc2(self, T):
"""温度Tでの上部臨界磁場"""
if T >= self.Tc:
return 0
return self.Hc2_0 * (1 - (T/self.Tc)**2)
def full_analysis(self):
"""包括的な解析プロットを生成"""
T_range = np.linspace(0.1, self.Tc * 1.1, 200)
fig, axes = plt.subplots(2, 3, figsize=(15, 10))
fig.suptitle(f'超伝導体解析:{self.name}', fontsize=16)
# 1. エネルギーギャップ
ax1 = axes[0, 0]
gap_vals = [self.gap(T) * 1000 for T in T_range]
ax1.plot(T_range, gap_vals, 'b-', linewidth=2)
ax1.axvline(x=self.Tc, color='r', linestyle='--', alpha=0.5)
ax1.set_xlabel('T (K)')
ax1.set_ylabel('Δ (meV)')
ax1.set_title('エネルギーギャップ')
ax1.grid(True, alpha=0.3)
# 2. 侵入深さ
ax2 = axes[0, 1]
lambda_vals = [self.lambda_L(T) if T < self.Tc else np.nan
for T in T_range]
ax2.plot(T_range, lambda_vals, 'g-', linewidth=2)
ax2.axvline(x=self.Tc, color='r', linestyle='--', alpha=0.5)
ax2.set_xlabel('T (K)')
ax2.set_ylabel('λ (nm)')
ax2.set_title('侵入深さ')
ax2.set_ylim(0, self.lambda_0 * 5)
ax2.grid(True, alpha=0.3)
# 3. コヒーレンス長
ax3 = axes[0, 2]
xi_vals = [self.xi(T) if T < self.Tc else np.nan for T in T_range]
ax3.plot(T_range, xi_vals, 'm-', linewidth=2)
ax3.axvline(x=self.Tc, color='r', linestyle='--', alpha=0.5)
ax3.set_xlabel('T (K)')
ax3.set_ylabel('ξ (nm)')
ax3.set_title('コヒーレンス長')
ax3.set_ylim(0, self.xi_0 * 5)
ax3.grid(True, alpha=0.3)
# 4. 臨界磁場
ax4 = axes[1, 0]
Hc2_vals = [self.Hc2(T) for T in T_range]
ax4.plot(T_range, Hc2_vals, 'r-', linewidth=2)
ax4.axvline(x=self.Tc, color='r', linestyle='--', alpha=0.5)
ax4.set_xlabel('T (K)')
ax4.set_ylabel('Hc2 (T)')
ax4.set_title('上部臨界磁場')
ax4.grid(True, alpha=0.3)
# 5. 相図
ax5 = axes[1, 1]
T_phase = np.linspace(0, self.Tc, 100)
H_phase = [self.Hc2(T) for T in T_phase]
ax5.plot(T_phase, H_phase, 'k-', linewidth=2)
ax5.fill_between(T_phase, 0, H_phase, alpha=0.3, color='cyan',
label='超伝導状態')
ax5.fill_between(T_phase, H_phase, max(H_phase)*1.2, alpha=0.3,
color='lightcoral', label='常伝導状態')
ax5.set_xlabel('T (K)')
ax5.set_ylabel('H (T)')
ax5.set_title('相図')
ax5.legend()
ax5.grid(True, alpha=0.3)
# 6. 情報パネル
ax6 = axes[1, 2]
ax6.axis('off')
info_text = f"""
材料:{self.name}
タイプ:{self.type}
臨界パラメータ:
Tc = {self.Tc} K
Hc2(0) = {self.Hc2_0:.2f} T
Δ(0) = {self.Delta_0*1000:.3f} meV
長さスケール:
λ(0) = {self.lambda_0} nm
ξ(0) = {self.xi_0} nm
κ = {self.kappa:.2f}
BCS予測:
2Δ/kBTc = {2*self.Delta_0/(self.kB*self.Tc):.2f}
"""
ax6.text(0.1, 0.9, info_text, transform=ax6.transAxes,
fontfamily='monospace', fontsize=11, verticalalignment='top')
ax6.set_title('材料特性')
plt.tight_layout()
plt.show()
# 異なる超伝導体を解析
materials_to_analyze = [
('ニオブ', 9.3, 40, 38, 0.4),
('YBCO', 93, 150, 1.5, 100),
('MgB2', 39, 140, 5, 16),
]
for params in materials_to_analyze:
sc = SuperconductorAnalyzer(*params)
print(f"\n{'='*50}")
print(f"解析対象:{sc.name}")
print(f"{'='*50}")
sc.full_analysis()
まとめ
重要なポイント
- エネルギーギャップの温度依存性を示すBCSギャップ方程式を実装しました
- 材料固有のパラメータを使ってロンドン侵入をシミュレートしました
- 比較解析のための超伝導体データベースを構築しました
- 第二種超伝導体における渦糸状態を可視化しました
- すべての側面を統合した包括的な解析ツールを作成しました
演習問題
演習1:データベースの拡張
実際のパラメータを持つ5つ以上の超伝導体をデータベースに追加してください。低温超伝導体と高温超伝導体の両方を含めてください。比較プロットを再生成してください。
演習2:温度スイープ
一定の印加磁場下で、T = 0.1TcからT = 0.9Tcまでの渦糸格子間隔の変化を示すように、渦糸シミュレーションを修正してください。
演習3:臨界電流
スケーリング則を使用して臨界電流密度Jc(T, H)を計算する関数を実装してください:Jc ∝ [1 - (T/Tc)]² × [1 - (H/Hc2)]²。Jcを2Dカラーマップとしてプロットしてください。
参考文献
- M. Tinkham, "Introduction to Superconductivity" - 包括的な教科書
- J. Bardeen, L. Cooper, J. Schrieffer, Phys. Rev. 108, 1175 (1957) - BCS理論の原著論文
- IBM/Googleの超伝導量子コンピューティングリソース