🇯🇵 JP | 🌐 EN

第1章:Ginzburg-Landau理論

現象論的超伝導理論の数学的基礎

⏱️ 30-40分 💻 6つのコード例 📊 中級

学習目標

1.1 現象論的理論の導入

GL理論の歴史的背景

1950年、ソビエトの物理学者Vitaly GinzburgLev Landauは、超伝導の現象論的理論を提案しました。この理論は、BCS理論(1957年)が確立される前に開発されたため、微視的な機構を説明するのではなく、超伝導の巨視的な性質を記述することを目的としていました。

現象論的理論とは?

現象論的理論は、観測可能な量の間の関係を記述しますが、必ずしも微視的なメカニズムを説明するわけではありません。GL理論は、超伝導状態を秩序パラメータによって特徴づけ、その空間的および磁場的な振る舞いを予測します。

Landauの相転移理論

GL理論は、Landauの一般的な二次相転移理論に基づいています。この理論では、相転移は秩序パラメータによって特徴づけられます:

臨界温度Tc近傍では、秩序パラメータは小さく、自由エネルギーをそのべき級数で展開できます。

1.2 秩序パラメータの概念

複素スカラー場ψ(r)

GL理論では、超伝導状態は複素秩序パラメータψ(r)によって記述されます:

ψ(r) = |ψ(r)| exp(iθ(r))

ここで:

BCS理論との関係

後にBCS理論が確立されると、ψは超伝導ギャップ関数Δに関連していることが明らかになりました。しかし、GL理論は微視的な詳細を知らなくても、多くの重要な予測を行うことができます。

規格化

秩序パラメータは通常、バルクの平衡値で規格化されます:

|ψ∞|² = ns0

ここで、ns0は均一な超伝導体における超伝導電子対の密度です。

1.3 Ginzburg-Landau自由エネルギー汎関数

自由エネルギーの構築

GL自由エネルギー汎関数は、通常状態からの超伝導自由エネルギー密度の超過分として書かれます:

Fs - Fn = ∫ dV [ α|ψ|² + (β/2)|ψ|⁴ + (1/2m*)|(−iℏ∇ − q*A)ψ|² + B²/(2μ0) ]

各項の物理的意味

意味 備考
α|ψ|² 秩序パラメータの二次項 α(T) = α0(T - Tc)、α0 > 0
(β/2)|ψ|⁴ 秩序パラメータの四次項 β > 0(安定性のため)
(1/2m*)|(−iℏ∇ − q*A)ψ|² 運動エネルギーと電磁エネルギー m*はクーパー対の有効質量、q* = 2eは電荷
B²/(2μ0) 磁場のエネルギー B = ∇ × A

温度依存性

係数αは温度に依存し、臨界温度付近で線形に変化します:

α(T) = α0(T - Tc)

T > Tc: α > 0 → ψ = 0 が最小(通常状態)
T < Tc: α < 0 → ψ ≠ 0 が最小(超伝導状態)

Pythonによる自由エネルギーの可視化

import numpy as np
import matplotlib.pyplot as plt
from mpl_toolkits.mplot3d import Axes3D

# Parameters
alpha_0 = 1.0
beta = 1.0
Tc = 10.0  # Critical temperature (arbitrary units)

# Temperature range
temperatures = [12, 10, 8, 5]  # T > Tc, T = Tc, T < Tc

# Order parameter range
psi = np.linspace(-2, 2, 400)

# Plot free energy landscape
fig, axes = plt.subplots(2, 2, figsize=(12, 10))
axes = axes.flatten()

for i, T in enumerate(temperatures):
    alpha = alpha_0 * (T - Tc)

    # Free energy density (excluding field terms)
    f = alpha * psi**2 + (beta/2) * psi**4

    axes[i].plot(psi, f, 'b-', linewidth=2)
    axes[i].axhline(y=0, color='k', linestyle='--', alpha=0.3)
    axes[i].axvline(x=0, color='k', linestyle='--', alpha=0.3)
    axes[i].set_xlabel('秩序パラメータ ψ', fontsize=11)
    axes[i].set_ylabel('自由エネルギー密度 f', fontsize=11)
    axes[i].set_title(f'T = {T} K (α = {alpha:.1f})', fontsize=12)
    axes[i].grid(True, alpha=0.3)

    # Mark minima
    if T > Tc:
        axes[i].plot(0, 0, 'ro', markersize=10, label='最小値(通常状態)')
    elif T == Tc:
        axes[i].plot(0, 0, 'yo', markersize=10, label='最小値(臨界点)')
    else:
        psi_eq = np.sqrt(-alpha / beta)
        f_min = alpha * psi_eq**2 + (beta/2) * psi_eq**4
        axes[i].plot([psi_eq, -psi_eq], [f_min, f_min], 'ro', markersize=10,
                    label='最小値(超伝導状態)')
        axes[i].plot(0, 0, 'go', markersize=8, alpha=0.5, label='局所最大値')

    axes[i].legend(fontsize=9)
    axes[i].set_ylim(-1, 3)

plt.tight_layout()
plt.show()

# Print equilibrium values
print("\n平衡状態の秩序パラメータ:")
for T in temperatures:
    alpha = alpha_0 * (T - Tc)
    if T <= Tc:
        psi_eq = np.sqrt(-alpha / beta)
        print(f"T = {T} K: |ψ| = {psi_eq:.3f}")
    else:
        print(f"T = {T} K: |ψ| = 0 (通常状態)")

コード出力の解釈

このコードは、異なる温度での自由エネルギーランドスケープを示します。T > Tcではψ = 0が唯一の最小値、T < Tcではψ ≠ 0に2つの等価な最小値が現れます(対称性の破れ)。

1.4 第一・第二GL方程式

変分原理

平衡状態では、自由エネルギーが最小化されます。変分原理を適用すると、2つのGL方程式が得られます:

第一GL方程式(秩序パラメータ方程式)

αψ + β|ψ|²ψ + (1/2m*)(−iℏ∇ − q*A)²ψ = 0

これは、ψに関する変分δF/δψ* = 0から得られます。

第二GL方程式(電流密度方程式)

j = (q*/2m*i) [ψ*(−iℏ∇ − q*A)ψ − ψ(−iℏ∇ − q*A)*ψ*]
  = (q*ℏ/m*) |ψ|² [∇θ − (q*/ℏ)A]

これは超伝導電流密度を与え、ベクトルポテンシャルAに関する変分から得られます。

第二GL方程式の解釈

電流密度は2つの寄与を持ちます:

London方程式との関係

均一な秩序パラメータ(|ψ| = const)を仮定すると、第二GL方程式はLondon方程式に帰着します:

j = −(ns q*²/m*) A
∇ × j = −(ns q*²/m*) B

1.5 コヒーレンス長(ξ)

定義と物理的意味

GL コヒーレンス長ξ(T)は、秩序パラメータが空間的に変化できる特徴的な長さスケールを表します:

ξ²(T) = ℏ² / (2m*|α(T)|)
      = ℏ² / (2m*α0(Tc - T))

物理的解釈

境界近傍の秩序パラメータプロファイル

超伝導体と真空の境界を考えます。一次元で磁場がない場合、第一GL方程式は:

−(ℏ²/2m*) d²ψ/dx² + αψ + β|ψ|²ψ = 0

境界条件:x → ∞でψ → ψ∞、x = 0でdψ/dx = 0(境界条件)

import numpy as np
import matplotlib.pyplot as plt
from scipy.integrate import odeint

# Parameters
hbar = 1.0545718e-34  # Reduced Planck constant (J·s)
m_star = 2 * 9.10938e-31  # Cooper pair mass (2 * electron mass)
alpha_0 = 1e-10  # Arbitrary units
Tc = 10.0
T = 5.0
alpha = alpha_0 * (T - Tc)
beta = 1e-11

# Coherence length
xi = np.sqrt(hbar**2 / (2 * m_star * abs(alpha)))

# Equilibrium order parameter
psi_infty = np.sqrt(-alpha / beta)

# Dimensionless GL equation
# Let ψ = ψ∞ · f(x/ξ), where x/ξ = s
# Then: d²f/ds² = f - f³

def gl_1d(y, s):
    """
    y[0] = f (dimensionless order parameter)
    y[1] = df/ds
    """
    f, df = y
    d2f = f - f**3  # Dimensionless GL equation
    return [df, d2f]

# Solve from bulk (s = large) back to boundary (s = 0)
s_span = np.linspace(10, 0, 1000)
y0 = [1.0, 0.0]  # Initial conditions: f = 1, df/ds = 0 at s = large

solution = odeint(gl_1d, y0, s_span)
f_profile = solution[:, 0]

# Reverse to go from boundary to bulk
s_plot = s_span[::-1]
f_plot = f_profile[::-1]

# Convert to real coordinates
x_plot = s_plot * xi * 1e9  # Convert to nm
psi_plot = f_plot * psi_infty

# Plotting
fig, axes = plt.subplots(1, 2, figsize=(14, 5))

# Plot 1: Dimensionless profile
axes[0].plot(s_plot, f_plot, 'b-', linewidth=2)
axes[0].axhline(y=1, color='r', linestyle='--', label='f = 1 (バルク値)')
axes[0].axhline(y=0, color='k', linestyle='--', alpha=0.3)
axes[0].set_xlabel('x/ξ (無次元距離)', fontsize=12)
axes[0].set_ylabel('f = ψ/ψ∞ (無次元秩序パラメータ)', fontsize=12)
axes[0].set_title('境界近傍の秩序パラメータプロファイル', fontsize=14)
axes[0].legend(fontsize=11)
axes[0].grid(True, alpha=0.3)
axes[0].set_xlim(0, 5)

# Shading to show healing length
axes[0].fill_between(s_plot, 0, f_plot, where=(s_plot <= 2),
                     alpha=0.3, color='cyan', label='ξ領域')

# Plot 2: Temperature dependence of ξ
T_range = np.linspace(0.1, Tc*0.99, 100)
alpha_T = alpha_0 * (T_range - Tc)
xi_T = np.sqrt(hbar**2 / (2 * m_star * abs(alpha_T))) * 1e9  # nm

axes[1].plot(T_range, xi_T, 'r-', linewidth=2)
axes[1].axvline(x=Tc, color='b', linestyle='--', label=f'Tc = {Tc} K')
axes[1].set_xlabel('温度 T (K)', fontsize=12)
axes[1].set_ylabel('コヒーレンス長 ξ(T) (nm)', fontsize=12)
axes[1].set_title('温度依存するコヒーレンス長', fontsize=14)
axes[1].legend(fontsize=11)
axes[1].grid(True, alpha=0.3)
axes[1].set_ylim(0, 100)

plt.tight_layout()
plt.show()

print(f"\nコヒーレンス長 ξ(T={T} K) = {xi*1e9:.2f} nm")
print(f"平衡秩序パラメータ ψ∞ = {psi_infty:.3e}")

1.6 侵入長(λ)

定義と物理的意味

GL 侵入長λ(T)は、磁場が超伝導体の表面から侵入できる特徴的な深さを表します:

λ²(T) = m* β / (μ0 q*² |ψ∞|²)
      = m* / (μ0 q*² ns)

ここで、ns = |ψ∞|² / βは超伝導電子対密度です。

物理的解釈

Meissner効果の数学的記述

半無限超伝導体(x > 0)に平行磁場B(0) = B0を印加すると、内部の磁場は:

B(x) = B0 exp(−x/λ)
import numpy as np
import matplotlib.pyplot as plt

# Parameters
lambda_L = 50e-9  # London penetration depth (m)
B0 = 0.1  # Applied field (T)

# Distance from surface
x = np.linspace(0, 300e-9, 500)  # 0 to 300 nm

# Magnetic field profile
B = B0 * np.exp(-x / lambda_L)

# Screening current density (from Ampere's law)
# ∇ × B = μ0 j  →  dB/dx = −μ0 j_y
mu0 = 4 * np.pi * 1e-7  # Vacuum permeability
j = (B0 / (mu0 * lambda_L)) * np.exp(-x / lambda_L)

# Convert to more convenient units
x_nm = x * 1e9  # nm
lambda_nm = lambda_L * 1e9  # nm
j_MA = j * 1e-6  # MA/m²

# Plotting
fig, axes = plt.subplots(1, 2, figsize=(14, 5))

# Plot 1: Magnetic field penetration
axes[0].plot(x_nm, B / B0, 'b-', linewidth=2)
axes[0].axhline(y=np.exp(-1), color='r', linestyle='--',
               label=f'B/B₀ = 1/e (x = λ = {lambda_nm:.0f} nm)')
axes[0].axvline(x=lambda_nm, color='r', linestyle='--', alpha=0.5)
axes[0].fill_between(x_nm, 0, B / B0, where=(x_nm <= lambda_nm),
                    alpha=0.3, color='cyan', label='侵入領域')
axes[0].set_xlabel('表面からの距離 x (nm)', fontsize=12)
axes[0].set_ylabel('規格化磁場 B/B₀', fontsize=12)
axes[0].set_title('超伝導体への磁場侵入', fontsize=14)
axes[0].legend(fontsize=11)
axes[0].grid(True, alpha=0.3)
axes[0].set_xlim(0, 300)

# Plot 2: Screening current
axes[1].plot(x_nm, j_MA / j_MA[0], 'g-', linewidth=2)
axes[1].axvline(x=lambda_nm, color='r', linestyle='--',
               label=f'x = λ = {lambda_nm:.0f} nm')
axes[1].fill_between(x_nm, 0, j_MA / j_MA[0], where=(x_nm <= lambda_nm),
                    alpha=0.3, color='yellow', label='遮蔽電流領域')
axes[1].set_xlabel('表面からの距離 x (nm)', fontsize=12)
axes[1].set_ylabel('規格化電流密度 j/j₀', fontsize=12)
axes[1].set_title('Meissner遮蔽電流', fontsize=14)
axes[1].legend(fontsize=11)
axes[1].grid(True, alpha=0.3)
axes[1].set_xlim(0, 300)

plt.tight_layout()
plt.show()

# Print penetration depth info
print(f"\n侵入長 λ = {lambda_nm:.1f} nm")
print(f"x = λにおいて、磁場は初期値の {np.exp(-1)*100:.1f}% に減衰")
print(f"x = 3λにおいて、磁場は初期値の {np.exp(-3)*100:.2f}% に減衰")

1.7 GLパラメータ κ = λ/ξ

定義と意義

Ginzburg-Landauパラメータκは、2つの特徴的長さの比として定義されます:

κ = λ / ξ

κは材料固有の無次元パラメータで、超伝導体の性質を決定する最も重要な量の一つです。

κの物理的意味

κの値の範囲

実際の超伝導体におけるκの値:

1.8 第一種・第二種の分類(κ < 1/√2 vs κ > 1/√2)

表面エネルギーの概念

超伝導体と通常状態の境界には、エネルギーコストが関連付けられます。この表面エネルギーの符号が、超伝導体のタイプを決定します。

表面エネルギーの起源

表面エネルギー σns ∝ (ξ/λ - λ/ξ) ∝ (1/κ - κ)

臨界値 κc = 1/√2 ≈ 0.707

条件 表面エネルギー 超伝導体タイプ 振る舞い
κ < 1/√2 σns > 0(正) 第一種 境界形成を避ける、急激な転移
κ = 1/√2 σns = 0 臨界点 境界エネルギーなし
κ > 1/√2 σns < 0(負) 第二種 境界形成を好む、混合状態

第一種超伝導体(κ < 1/√2)

第二種超伝導体(κ > 1/√2)

import numpy as np
import matplotlib.pyplot as plt

# κ values
kappa_values = [0.3, 0.707, 2.0, 10.0]
labels = ['第一種 (κ=0.3)', '臨界 (κ=0.707)', '第二種 (κ=2)', '第二種 (κ=10)']
colors = ['blue', 'green', 'orange', 'red']

# Dimensionless distance from boundary
x = np.linspace(0, 5, 500)

fig, axes = plt.subplots(2, 2, figsize=(14, 10))

for i, (kappa, label, color) in enumerate(zip(kappa_values, labels, colors)):
    ax = axes[i // 2, i % 2]

    # Order parameter profile (approximate)
    # ψ(x) ≈ ψ∞ tanh(x / (√2 ξ))
    psi_profile = np.tanh(x / np.sqrt(2))

    # Magnetic field profile (approximate)
    # B(x) ≈ B0 (1 - exp(-x/λ))
    # In units of ξ: x/λ = x/(κξ)
    B_profile = 1 - np.exp(-x / kappa)

    # Plot both profiles
    ax.plot(x, psi_profile, 'b-', linewidth=2, label='|ψ|/ψ∞ (秩序パラメータ)')
    ax.plot(x, B_profile, 'r-', linewidth=2, label='B/B₀ (磁場)')

    # Mark characteristic lengths
    ax.axvline(x=1, color='b', linestyle='--', alpha=0.5, label='ξ')
    ax.axvline(x=kappa, color='r', linestyle='--', alpha=0.5, label='λ = κξ')

    # Shading
    ax.fill_between(x, 0, psi_profile, alpha=0.2, color='blue')
    ax.fill_between(x, 0, B_profile, alpha=0.2, color='red')

    ax.set_xlabel('距離 (ξ単位)', fontsize=11)
    ax.set_ylabel('規格化された値', fontsize=11)
    ax.set_title(label, fontsize=12, color=color)
    ax.legend(fontsize=9)
    ax.grid(True, alpha=0.3)
    ax.set_xlim(0, 5)
    ax.set_ylim(0, 1.1)

plt.tight_layout()
plt.show()

# Surface energy comparison
print("\n表面エネルギーの符号:")
for kappa, label in zip(kappa_values, labels):
    sigma_sign = (1/kappa - kappa)
    if sigma_sign > 0:
        energy_type = "正(境界を避ける)"
    elif sigma_sign < 0:
        energy_type = "負(境界を好む)"
    else:
        energy_type = "ゼロ(臨界)"
    print(f"{label}: σns ∝ {sigma_sign:.3f} → {energy_type}")

1.9 表面エネルギーと境界解

超伝導-通常境界の詳細

超伝導体と通常金属の平面境界(x = 0)を考えます。x < 0が超伝導、x > 0が通常状態です。

境界での振る舞い

渦状態(Abrikosov格子)

第二種超伝導体では、Hc1 < H < Hc2の範囲で、磁束が量子化された渦として侵入します:

Φ0 = h / (2e) = 2.07 × 10⁻¹⁵ Wb(磁束量子)

各渦は:

import numpy as np
import matplotlib.pyplot as plt

# Simulate a single Abrikosov vortex
# Parameters
xi = 10  # Coherence length (nm)
lambda_L = 50  # Penetration depth (nm)
kappa = lambda_L / xi

# 2D grid
x = np.linspace(-100, 100, 200)
y = np.linspace(-100, 100, 200)
X, Y = np.meshgrid(x, y)
R = np.sqrt(X**2 + Y**2)

# Order parameter profile (approximate)
# |ψ(r)| ≈ ψ∞ tanh(r / (√2 ξ))
psi = np.tanh(R / (np.sqrt(2) * xi))

# Magnetic field profile (approximate)
# B(r) ≈ B0 K0(r/λ) (K0: modified Bessel function of second kind)
# Approximation: B(r) ≈ exp(-r/λ) for visualization
B = np.exp(-R / lambda_L)

# Plotting
fig, axes = plt.subplots(1, 3, figsize=(16, 5))

# Plot 1: Order parameter
im1 = axes[0].contourf(X, Y, psi, levels=20, cmap='Blues')
axes[0].contour(X, Y, psi, levels=10, colors='black', alpha=0.3, linewidths=0.5)
axes[0].set_xlabel('x (nm)', fontsize=11)
axes[0].set_ylabel('y (nm)', fontsize=11)
axes[0].set_title(f'秩序パラメータ |ψ|/ψ∞\n(渦芯 ~ ξ = {xi} nm)', fontsize=12)
axes[0].set_aspect('equal')
plt.colorbar(im1, ax=axes[0], label='|ψ|/ψ∞')

# Add circle at ξ
circle_xi = plt.Circle((0, 0), xi, fill=False, color='red',
                       linestyle='--', linewidth=2, label='r = ξ')
axes[0].add_patch(circle_xi)
axes[0].legend(fontsize=9)

# Plot 2: Magnetic field
im2 = axes[1].contourf(X, Y, B, levels=20, cmap='Reds')
axes[1].contour(X, Y, B, levels=10, colors='black', alpha=0.3, linewidths=0.5)
axes[1].set_xlabel('x (nm)', fontsize=11)
axes[1].set_ylabel('y (nm)', fontsize=11)
axes[1].set_title(f'磁場 B/B₀\n(侵入深さ ~ λ = {lambda_L} nm)', fontsize=12)
axes[1].set_aspect('equal')
plt.colorbar(im2, ax=axes[1], label='B/B₀')

# Add circle at λ
circle_lambda = plt.Circle((0, 0), lambda_L, fill=False, color='blue',
                          linestyle='--', linewidth=2, label='r = λ')
axes[1].add_patch(circle_lambda)
axes[1].legend(fontsize=9)

# Plot 3: Radial profiles
r_profile = np.linspace(0, 100, 500)
psi_profile = np.tanh(r_profile / (np.sqrt(2) * xi))
B_profile = np.exp(-r_profile / lambda_L)

axes[2].plot(r_profile, psi_profile, 'b-', linewidth=2, label='|ψ|/ψ∞')
axes[2].plot(r_profile, B_profile, 'r-', linewidth=2, label='B/B₀')
axes[2].axvline(x=xi, color='b', linestyle='--', alpha=0.5, label=f'ξ = {xi} nm')
axes[2].axvline(x=lambda_L, color='r', linestyle='--', alpha=0.5,
               label=f'λ = {lambda_L} nm')
axes[2].set_xlabel('半径 r (nm)', fontsize=11)
axes[2].set_ylabel('規格化された値', fontsize=11)
axes[2].set_title(f'径方向プロファイル\n(κ = λ/ξ = {kappa:.1f})', fontsize=12)
axes[2].legend(fontsize=9)
axes[2].grid(True, alpha=0.3)
axes[2].set_xlim(0, 100)

plt.tight_layout()
plt.show()

# Print vortex info
Phi0 = 2.067833848e-15  # Wb
print(f"\nAbrikosov渦の構造(κ = {kappa:.1f}):")
print(f"渦芯サイズ(通常状態): ~ξ = {xi} nm")
print(f"磁場侵入深さ: ~λ = {lambda_L} nm")
print(f"磁束量子: Φ₀ = {Phi0:.3e} Wb")

1.10 相図:第一種 vs 第二種

κに基づく完全な分類

import numpy as np
import matplotlib.pyplot as plt

# Range of kappa values
kappa = np.logspace(-1, 2, 500)  # 0.1 to 100

# Critical kappa
kappa_c = 1 / np.sqrt(2)

# Surface energy (normalized)
sigma = 1/kappa - kappa

# Thermodynamic critical field (normalized to Hc)
# For Type I: H = Hc
# For Type II: Hc1 < H < Hc2
Hc1_ratio = np.log(kappa) / (np.sqrt(2) * kappa)  # Hc1/Hc (approximate)
Hc2_ratio = np.sqrt(2) * kappa  # Hc2/Hc

# Plotting
fig, axes = plt.subplots(2, 2, figsize=(14, 10))

# Plot 1: Surface energy
axes[0, 0].plot(kappa, sigma, 'b-', linewidth=2)
axes[0, 0].axhline(y=0, color='k', linestyle='-', linewidth=1)
axes[0, 0].axvline(x=kappa_c, color='r', linestyle='--', linewidth=2,
                  label=f'κc = 1/√2 ≈ {kappa_c:.3f}')
axes[0, 0].fill_between(kappa, sigma, 0, where=(sigma > 0), alpha=0.3,
                       color='blue', label='第一種(σ > 0)')
axes[0, 0].fill_between(kappa, sigma, 0, where=(sigma < 0), alpha=0.3,
                       color='red', label='第二種(σ < 0)')
axes[0, 0].set_xlabel('GLパラメータ κ', fontsize=11)
axes[0, 0].set_ylabel('表面エネルギー σns (任意単位)', fontsize=11)
axes[0, 0].set_title('表面エネルギーとκ', fontsize=12)
axes[0, 0].set_xscale('log')
axes[0, 0].legend(fontsize=9)
axes[0, 0].grid(True, alpha=0.3, which='both')
axes[0, 0].set_xlim(0.1, 100)
axes[0, 0].set_ylim(-5, 5)

# Plot 2: Critical fields
axes[0, 1].plot(kappa[kappa > kappa_c], Hc1_ratio[kappa > kappa_c],
               'g-', linewidth=2, label='Hc1/Hc')
axes[0, 1].plot(kappa[kappa > kappa_c], Hc2_ratio[kappa > kappa_c],
               'r-', linewidth=2, label='Hc2/Hc')
axes[0, 1].axhline(y=1, color='b', linestyle='--', linewidth=1, label='Hc')
axes[0, 1].axvline(x=kappa_c, color='orange', linestyle='--', linewidth=2,
                  label=f'κc = {kappa_c:.3f}')
axes[0, 1].set_xlabel('GLパラメータ κ', fontsize=11)
axes[0, 1].set_ylabel('規格化臨界磁場 H/Hc', fontsize=11)
axes[0, 1].set_title('臨界磁場とκ(第二種のみ)', fontsize=12)
axes[0, 1].set_xscale('log')
axes[0, 1].set_yscale('log')
axes[0, 1].legend(fontsize=9)
axes[0, 1].grid(True, alpha=0.3, which='both')
axes[0, 1].set_xlim(0.7, 100)
axes[0, 1].set_ylim(0.01, 100)

# Plot 3: Phase diagram (H vs κ)
fig3 = axes[1, 0]
kappa_type1 = np.linspace(0.1, kappa_c, 100)
kappa_type2 = np.linspace(kappa_c, 10, 100)

# Type I
fig3.fill_between([0, kappa_c], [0, 0], [2, 2], alpha=0.3, color='blue',
                  label='第一種超伝導領域')
fig3.plot([kappa_c, kappa_c], [0, 2], 'k-', linewidth=2)

# Type II
Hc1_type2 = np.log(kappa_type2) / (np.sqrt(2) * kappa_type2)
Hc2_type2 = np.sqrt(2) * kappa_type2

fig3.fill_between(kappa_type2, 0, Hc1_type2, alpha=0.3, color='cyan',
                  label='Meissner状態')
fig3.fill_between(kappa_type2, Hc1_type2, np.minimum(Hc2_type2, 2),
                  alpha=0.3, color='yellow', label='混合状態(渦状態)')
fig3.fill_between(kappa_type2, np.minimum(Hc2_type2, 2), 2,
                  alpha=0.3, color='lightgray', label='通常状態')

fig3.plot(kappa_type2, Hc1_type2, 'g-', linewidth=2, label='Hc1')
fig3.plot(kappa_type2, Hc2_type2, 'r-', linewidth=2, label='Hc2')
fig3.axvline(x=kappa_c, color='orange', linestyle='--', linewidth=2)

fig3.set_xlabel('GLパラメータ κ', fontsize=11)
fig3.set_ylabel('磁場 H/Hc', fontsize=11)
fig3.set_title('超伝導相図(κ-H)', fontsize=12)
fig3.legend(fontsize=8, loc='upper left')
fig3.grid(True, alpha=0.3)
fig3.set_xlim(0, 10)
fig3.set_ylim(0, 2)

# Plot 4: Material examples
fig4 = axes[1, 1]
materials = {
    'Al': 0.15, 'Pb': 0.4, 'Sn': 0.2, 'Nb': 0.8,
    'NbTi': 1.5, 'Nb3Sn': 2.5, 'YBCO': 50, 'Bi2212': 80
}
type1 = {k: v for k, v in materials.items() if v < kappa_c}
type2 = {k: v for k, v in materials.items() if v >= kappa_c}

y_pos_type1 = np.arange(len(type1))
y_pos_type2 = np.arange(len(type2)) + len(type1) + 0.5

fig4.barh(y_pos_type1, list(type1.values()), color='blue', alpha=0.7,
         label='第一種')
fig4.barh(y_pos_type2, list(type2.values()), color='red', alpha=0.7,
         label='第二種')

fig4.axvline(x=kappa_c, color='green', linestyle='--', linewidth=2,
            label=f'κc = {kappa_c:.3f}')

all_materials = list(type1.keys()) + list(type2.keys())
y_pos_all = list(y_pos_type1) + list(y_pos_type2)
fig4.set_yticks(y_pos_all)
fig4.set_yticklabels(all_materials)
fig4.set_xlabel('GLパラメータ κ', fontsize=11)
fig4.set_title('実際の超伝導体のκ値', fontsize=12)
fig4.set_xscale('log')
fig4.legend(fontsize=9)
fig4.grid(True, alpha=0.3, axis='x')
fig4.set_xlim(0.1, 100)

plt.tight_layout()
plt.show()

# Print classification
print("\n超伝導体の分類:")
print(f"臨界値: κc = 1/√2 = {kappa_c:.4f}\n")
print("第一種超伝導体 (κ < κc):")
for mat, k in sorted(type1.items(), key=lambda x: x[1]):
    print(f"  {mat}: κ = {k:.2f}")
print("\n第二種超伝導体 (κ > κc):")
for mat, k in sorted(type2.items(), key=lambda x: x[1]):
    print(f"  {mat}: κ = {k:.1f}")

まとめ

重要なポイント

練習問題

問題1

GL自由エネルギー汎関数から、磁場がない場合の均一超伝導体における平衡秩序パラメータ|ψ∞|を求めてください。また、T < Tcにおける凝縮エネルギー密度(通常状態と超伝導状態の自由エネルギー差)を計算してください。

問題2

ある超伝導体がT = 0でξ(0) = 5 nm、λ(0) = 100 nmを持つとします。GLパラメータκを計算し、この材料が第一種か第二種かを判定してください。また、この材料がHc = 0.05 Tを持つ場合、Hc1とHc2(近似式を使用)を推定してください。

問題3

第二種超伝導体における単一のAbrikosov渦を考えます。渦の中心(r = 0)と、r >> λでの秩序パラメータ|ψ|および磁場Bの振る舞いを説明してください。また、なぜ各渦が磁束量子Φ0 = h/(2e)を運ぶのかを説明してください。

問題4(発展)

表面エネルギーσns ∝ (1/κ - κ)の導出を次元解析に基づいて説明してください。ヒント:エネルギー密度のスケールはα²/β、長さスケールはξとλです。