JP | EN | 最終更新: 2025-12-26
第1章

マグノニクスとスピン波

スピン波(マグノン)の物理から、マグノニック結晶、スピン波論理回路まで、 波動性を活用した新しい情報処理パラダイムを学びます。

60-75分 上級

1.1 マグノニクスとは

マグノニクス(Magnonics)は、磁性体中のスピン波(マグノン)を情報担体として 利用する新しい研究分野です。電子の電荷ではなくスピンの集団励起を用いることで、 低消費電力・高集積密度のデバイス実現が期待されています。

マグノニクスの利点

  • 低消費電力: ジュール熱なしでの情報伝達
  • 短波長: 同周波数の電磁波より3-4桁短い波長
  • 非線形性: 本質的な非線形効果を持つ
  • 波動性: 干渉・回折などの波動現象を利用可能

スピン波の基本概念

スピン波は、磁性体中の局在スピンの集団的な歳差運動です。 隣接スピン間の交換相互作用により波動として伝播します。

スピンハミルトニアン(ハイゼンベルグ模型)

$$H = -J\sum_{\langle i,j \rangle}\mathbf{S}_i \cdot \mathbf{S}_j - D\sum_i (S_i^z)^2 - g\mu_B H_0 \sum_i S_i^z$$

$J$: 交換相互作用定数、$D$: 磁気異方性定数、$H_0$: 外部磁場

1.2 スピン波分散関係

強磁性体の分散関係

強磁性体におけるスピン波の分散関係は、静磁波(dipolar-dominated)と 交換スピン波(exchange-dominated)の2つの領域に分けられます。

交換スピン波の分散関係

$$\omega_k = \gamma(H_0 + Dk^2)$$

$D = 2JS^2a^2 / \hbar$: スピン波剛性(stiffness)、$a$: 格子定数

静磁波(Damon-Eshbach モード)

$$\omega_{DE} = \gamma\sqrt{H_0(H_0 + 4\pi M_s) + (2\pi M_s)^2(1 - e^{-2kd})}$$

$d$: 薄膜厚さ、表面伝播モード

Python スピン波分散関係の計算
import numpy as np
import matplotlib.pyplot as plt

def spin_wave_dispersion(k, H0, Ms, D, d, mode='exchange'):
    """
    スピン波分散関係の計算

    Parameters:
    -----------
    k : array
        波数 [1/m]
    H0 : float
        外部磁場 [A/m]
    Ms : float
        飽和磁化 [A/m]
    D : float
        スピン波剛性 [m^2/s]
    d : float
        膜厚 [m]
    mode : str
        'exchange' または 'dipolar'
    """
    gamma = 1.76e11  # ジャイロ磁気比 [rad/(T·s)]
    mu0 = 4 * np.pi * 1e-7

    H0_T = mu0 * H0  # SI単位に変換

    if mode == 'exchange':
        # 交換支配領域
        omega = gamma * (H0_T + D * k**2)
    else:
        # 静磁波(Damon-Eshbach近似)
        term1 = H0_T * (H0_T + mu0 * Ms)
        term2 = (mu0 * Ms / 2)**2 * (1 - np.exp(-2 * k * d))
        omega = gamma * np.sqrt(term1 + term2)

    return omega / (2 * np.pi * 1e9)  # GHz単位

# パラメータ設定(YIG: イットリウム鉄ガーネット)
H0 = 1e5        # 外部磁場 [A/m]
Ms = 1.4e5      # 飽和磁化 [A/m]
D = 5.4e-17     # スピン波剛性 [m²/s]
d = 100e-9      # 膜厚 100 nm

# 波数範囲
k = np.linspace(1e4, 1e8, 1000)  # [1/m]

# 分散関係の計算
freq_exchange = spin_wave_dispersion(k, H0, Ms, D, d, 'exchange')
freq_dipolar = spin_wave_dispersion(k, H0, Ms, D, d, 'dipolar')

# プロット
plt.figure(figsize=(10, 6))
plt.loglog(k * 1e-6, freq_exchange, 'b-', linewidth=2, label='交換スピン波')
plt.loglog(k * 1e-6, freq_dipolar, 'r--', linewidth=2, label='静磁波 (DE mode)')
plt.xlabel('波数 k [μm⁻¹]', fontsize=12)
plt.ylabel('周波数 f [GHz]', fontsize=12)
plt.title('スピン波分散関係(YIG薄膜)', fontsize=14)
plt.legend()
plt.grid(True, which='both', alpha=0.3)
plt.xlim([1e-2, 100])
plt.tight_layout()
plt.savefig('spin_wave_dispersion.png', dpi=150)
plt.show()

print(f"交換支配領域: k > {np.sqrt(Ms*mu0/D)*1e-6:.2f} μm⁻¹")

1.3 マグノンの量子化

スピン波を量子化することで、マグノン(magnon)という準粒子として扱えます。 マグノンはボーズ粒子であり、ボーズ-アインシュタイン統計に従います。

ホルスタイン-プリマコフ変換

スピン演算子とボソン演算子の対応

$$S^+ = \sqrt{2S - a^\dagger a}\, a, \quad S^- = a^\dagger \sqrt{2S - a^\dagger a}$$

$$S^z = S - a^\dagger a$$

低温近似($\langle a^\dagger a \rangle \ll S$)では線形化可能

Python マグノン数の温度依存性
import numpy as np
import matplotlib.pyplot as plt
from scipy import integrate

def magnon_number_density(T, omega_k, k):
    """
    マグノン数密度の計算(ボーズ-アインシュタイン分布)

    Parameters:
    -----------
    T : float
        温度 [K]
    omega_k : array
        スピン波周波数 [rad/s]
    k : array
        波数 [1/m]
    """
    hbar = 1.054571817e-34  # プランク定数 [J·s]
    kB = 1.380649e-23       # ボルツマン定数 [J/K]

    if T == 0:
        return np.zeros_like(k)

    # ボーズ-アインシュタイン分布
    x = hbar * omega_k / (kB * T)
    n_k = 1.0 / (np.exp(x) - 1)

    return n_k

def total_magnon_number(T, H0, D, S=5/2, a=1.24e-9):
    """
    全マグノン数の計算(3D積分)

    Parameters:
    -----------
    T : float
        温度 [K]
    H0 : float
        外部磁場 [T]
    D : float
        スピン波剛性 [m²/s]
    S : float
        スピン量子数
    a : float
        格子定数 [m]
    """
    hbar = 1.054571817e-34
    kB = 1.380649e-23
    gamma = 1.76e11

    # ブロッホの3/2乗則を使用
    # Δm/m ∝ (T/Tc)^(3/2)

    # 数値積分
    def integrand(k):
        omega = gamma * (H0 + D * k**2)
        if T == 0:
            return 0
        x = hbar * omega / (kB * T)
        if x > 100:
            return 0
        n_k = 1.0 / (np.exp(x) - 1)
        return k**2 * n_k / (2 * np.pi**2)

    k_max = np.pi / a  # ブリルアンゾーン端
    result, _ = integrate.quad(integrand, 0, k_max)

    return result

# 温度依存性の計算
temperatures = np.linspace(1, 500, 100)
H0 = 0.1  # T
D = 5.4e-17  # m²/s

magnon_numbers = [total_magnon_number(T, H0, D) for T in temperatures]

# プロット
fig, axes = plt.subplots(1, 2, figsize=(14, 5))

# 左: マグノン数
axes[0].semilogy(temperatures, magnon_numbers, 'b-', linewidth=2)
axes[0].set_xlabel('温度 T [K]', fontsize=12)
axes[0].set_ylabel('マグノン数密度 [m⁻³]', fontsize=12)
axes[0].set_title('マグノン数の温度依存性', fontsize=14)
axes[0].grid(True, alpha=0.3)

# 右: T^(3/2)プロット(ブロッホの法則)
T_normalized = (temperatures / 500) ** 1.5
axes[1].plot(temperatures**1.5, magnon_numbers, 'ro', markersize=2)
axes[1].set_xlabel('$T^{3/2}$ [K$^{3/2}$]', fontsize=12)
axes[1].set_ylabel('マグノン数密度 [m⁻³]', fontsize=12)
axes[1].set_title('ブロッホの$T^{3/2}$法則の検証', fontsize=14)
axes[1].grid(True, alpha=0.3)

plt.tight_layout()
plt.savefig('magnon_temperature.png', dpi=150)
plt.show()

マグノン-マグノン相互作用

マグノン間には非線形相互作用が存在し、4マグノン散乱などの過程が重要になります。

4マグノン相互作用ハミルトニアン

$$H_{4m} = \sum_{k_1,k_2,k_3,k_4} V_{k_1k_2k_3k_4} a_{k_1}^\dagger a_{k_2}^\dagger a_{k_3} a_{k_4} \delta_{k_1+k_2, k_3+k_4}$$

1.4 マグノニック結晶

マグノニック結晶(Magnonic Crystal)は、磁気的性質を周期的に変調させた 構造で、スピン波に対してバンドギャップを形成します。

graph LR A[入射スピン波] --> B[マグノニック結晶] B --> C[透過] B --> D[反射] B --> E[バンドギャップ内: 完全反射] style B fill:#e3f2fd style E fill:#ffcdd2

1次元マグノニック結晶

周期的な磁場変調または幾何学的パターニングにより実現されます。

Python 1Dマグノニック結晶のバンド構造計算
import numpy as np
import matplotlib.pyplot as plt
from scipy.linalg import eigh

def magnonic_crystal_bands(N_cells, a1, a2, H1, H2, D, Ms, N_k=100):
    """
    1次元マグノニック結晶のバンド構造計算

    Parameters:
    -----------
    N_cells : int
        単位胞内のサイト数
    a1, a2 : float
        領域1, 2の幅 [m]
    H1, H2 : float
        領域1, 2の有効磁場 [T]
    D : float
        スピン波剛性 [m²/s]
    Ms : float
        飽和磁化 [A/m]
    N_k : int
        波数点数
    """
    gamma = 1.76e11
    mu0 = 4 * np.pi * 1e-7

    period = a1 + a2  # 周期
    dx = period / N_cells

    # 波数(第一ブリルアンゾーン)
    k_points = np.linspace(-np.pi/period, np.pi/period, N_k)

    # 各領域の有効場
    H_eff = np.zeros(N_cells)
    for i in range(N_cells):
        x = i * dx
        if x < a1:
            H_eff[i] = H1
        else:
            H_eff[i] = H2

    bands = np.zeros((N_k, N_cells))

    for ik, k in enumerate(k_points):
        # ハミルトニアン行列の構築
        H_matrix = np.zeros((N_cells, N_cells), dtype=complex)

        for i in range(N_cells):
            # 対角成分
            H_matrix[i, i] = gamma * (H_eff[i] + 2 * D / dx**2)

            # 隣接サイトとの結合(周期境界条件)
            j_left = (i - 1) % N_cells
            j_right = (i + 1) % N_cells

            # ブロッホの定理による位相因子
            if i == 0:
                phase_left = np.exp(-1j * k * period)
            else:
                phase_left = 1.0

            if i == N_cells - 1:
                phase_right = np.exp(1j * k * period)
            else:
                phase_right = 1.0

            H_matrix[i, j_left] = -gamma * D / dx**2 * phase_left
            H_matrix[i, j_right] = -gamma * D / dx**2 * phase_right

        # 固有値計算
        eigenvalues, _ = eigh(H_matrix)
        bands[ik, :] = np.sort(np.real(eigenvalues)) / (2 * np.pi * 1e9)

    return k_points * period / np.pi, bands

# パラメータ設定
N_cells = 20
a1 = 100e-9  # 100 nm
a2 = 100e-9  # 100 nm
H1 = 0.05    # 50 mT
H2 = 0.15    # 150 mT
D = 5.4e-17
Ms = 1.4e5

k_normalized, bands = magnonic_crystal_bands(N_cells, a1, a2, H1, H2, D, Ms)

# プロット
plt.figure(figsize=(10, 8))
for i in range(min(10, bands.shape[1])):
    plt.plot(k_normalized, bands[:, i], 'b-', linewidth=1.5)

plt.xlabel('波数 $ka/\\pi$', fontsize=12)
plt.ylabel('周波数 [GHz]', fontsize=12)
plt.title('1Dマグノニック結晶のバンド構造', fontsize=14)
plt.xlim([-1, 1])
plt.grid(True, alpha=0.3)

# バンドギャップの強調
gap_bottom = bands[:, 0].max()
gap_top = bands[:, 1].min()
if gap_top > gap_bottom:
    plt.axhspan(gap_bottom, gap_top, alpha=0.3, color='red',
                label=f'バンドギャップ: {gap_top-gap_bottom:.2f} GHz')
    plt.legend()

plt.tight_layout()
plt.savefig('magnonic_crystal_bands.png', dpi=150)
plt.show()

print(f"第一バンドギャップ: {gap_bottom:.2f} - {gap_top:.2f} GHz")
print(f"ギャップ幅: {gap_top - gap_bottom:.2f} GHz")

1.5 スピン波論理回路

スピン波の干渉・位相を利用した論理演算が可能です。 波動の重ね合わせ原理により、本質的に並列処理が可能になります。

マッハ-ツェンダー干渉計型論理ゲート

graph LR A[入力スピン波] --> B[分岐] B --> C[経路1: 位相制御] B --> D[経路2: 基準] C --> E[合流] D --> E E --> F[出力] G[制御信号] --> C style C fill:#fff3e0 style G fill:#e8f5e9
Python スピン波干渉計のシミュレーション
import numpy as np
import matplotlib.pyplot as plt

def spin_wave_interferometer(phase_control, amplitude_in=1.0):
    """
    マッハ-ツェンダー型スピン波干渉計

    Parameters:
    -----------
    phase_control : float
        制御位相 [rad]
    amplitude_in : float
        入力振幅

    Returns:
    --------
    output : float
        出力振幅
    """
    # 50:50ビームスプリッター
    arm1 = amplitude_in / np.sqrt(2)
    arm2 = amplitude_in / np.sqrt(2)

    # 経路1に位相シフトを適用
    arm1 = arm1 * np.exp(1j * phase_control)

    # 合流(干渉)
    output = (arm1 + arm2) / np.sqrt(2)

    return np.abs(output)**2

def spin_wave_majority_gate(input1, input2, input3):
    """
    スピン波多数決ゲート
    3入力の多数決論理を波動干渉で実現

    Parameters:
    -----------
    input1, input2, input3 : float
        入力位相 [0 or π for binary]
    """
    # 各入力を複素振幅として
    a1 = np.exp(1j * input1)
    a2 = np.exp(1j * input2)
    a3 = np.exp(1j * input3)

    # 干渉
    total = a1 + a2 + a3

    # 出力位相の判定
    output_phase = np.angle(total)

    # 2値化
    if np.abs(output_phase) < np.pi/2:
        return 0  # "0" = 位相0
    else:
        return 1  # "1" = 位相π

# 干渉計の位相依存性
phases = np.linspace(0, 2*np.pi, 100)
outputs = [spin_wave_interferometer(phi) for phi in phases]

# プロット
fig, axes = plt.subplots(1, 2, figsize=(14, 5))

# 左: 干渉計の伝達特性
axes[0].plot(phases / np.pi, outputs, 'b-', linewidth=2)
axes[0].axhline(y=0.5, color='gray', linestyle='--', alpha=0.5)
axes[0].set_xlabel('制御位相 $\\phi/\\pi$', fontsize=12)
axes[0].set_ylabel('出力強度', fontsize=12)
axes[0].set_title('スピン波干渉計の伝達特性', fontsize=14)
axes[0].grid(True, alpha=0.3)

# 注釈
axes[0].annotate('建設的干渉', xy=(0, 1), xytext=(0.3, 0.8),
                fontsize=10, arrowprops=dict(arrowstyle='->', color='green'))
axes[0].annotate('破壊的干渉', xy=(1, 0), xytext=(0.7, 0.2),
                fontsize=10, arrowprops=dict(arrowstyle='->', color='red'))

# 右: 多数決ゲートの真理値表
truth_table = []
for i1 in [0, np.pi]:
    for i2 in [0, np.pi]:
        for i3 in [0, np.pi]:
            out = spin_wave_majority_gate(i1, i2, i3)
            in_bits = f"{int(i1>0)}{int(i2>0)}{int(i3>0)}"
            truth_table.append((in_bits, out))

# 真理値表をプロット
table_data = [[t[0], str(t[1])] for t in truth_table]
axes[1].axis('off')
table = axes[1].table(cellText=table_data,
                      colLabels=['入力 (ABC)', '出力'],
                      loc='center',
                      cellLoc='center')
table.auto_set_font_size(False)
table.set_fontsize(12)
table.scale(1.5, 2)
axes[1].set_title('スピン波多数決ゲート真理値表', fontsize=14, pad=20)

plt.tight_layout()
plt.savefig('spin_wave_logic.png', dpi=150)
plt.show()

# XOR, AND, OR ゲートの実装
print("=== スピン波論理ゲート ===")
print("干渉による論理演算:")
print(f"  位相 0 + 0 → 建設的干渉 → 出力 '1'")
print(f"  位相 0 + π → 破壊的干渉 → 出力 '0'")
print(f"  位相 π + π → 建設的干渉 → 出力 '1'")

スピン波導波路

スピン波を特定の方向に導くための導波路設計は、マグノニクス回路の基本要素です。

Python スピン波伝播シミュレーション
import numpy as np
import matplotlib.pyplot as plt
from scipy.integrate import odeint

def spin_wave_propagation_1d(N, dx, dt, T_total, omega_0, D, alpha,
                              source_pos, source_freq):
    """
    1次元スピン波伝播のFDTDシミュレーション

    Parameters:
    -----------
    N : int
        格子点数
    dx : float
        格子間隔 [m]
    dt : float
        時間刻み [s]
    T_total : float
        総シミュレーション時間 [s]
    omega_0 : float
        共鳴周波数 [rad/s]
    D : float
        スピン波剛性 [m²/s]
    alpha : float
        ギルバート減衰定数
    source_pos : int
        励起源の位置
    source_freq : float
        励起周波数 [rad/s]
    """
    gamma = 1.76e11

    N_steps = int(T_total / dt)

    # 磁化の横成分(複素表現)
    m = np.zeros(N, dtype=complex)
    m_prev = np.zeros(N, dtype=complex)

    # 結果保存用
    history = []

    for step in range(N_steps):
        t = step * dt

        # ソース項(連続波励起)
        source = 0.01 * np.exp(1j * source_freq * t)

        # 有効場(交換 + 外部場)
        H_eff = np.zeros(N, dtype=complex)
        for i in range(1, N-1):
            # 交換項(ラプラシアン)
            d2m_dx2 = (m[i+1] - 2*m[i] + m[i-1]) / dx**2
            H_eff[i] = omega_0 / gamma + D * d2m_dx2 / gamma

        # LLG方程式の時間発展(簡略化)
        m_new = np.zeros(N, dtype=complex)
        for i in range(1, N-1):
            # 歳差運動 + 減衰
            dm_dt = -1j * gamma * H_eff[i] * m[i] - alpha * gamma * H_eff[i] * m[i]
            m_new[i] = m[i] + dm_dt * dt

        # ソース位置での励起
        m_new[source_pos] += source * dt

        # 吸収境界条件
        m_new[0] = 0
        m_new[-1] = 0

        # 更新
        m_prev = m.copy()
        m = m_new.copy()

        # 記録(間引き)
        if step % 100 == 0:
            history.append(np.abs(m)**2)

    return np.array(history)

# シミュレーションパラメータ
N = 500
dx = 10e-9      # 10 nm
dt = 1e-14      # 10 fs
T_total = 10e-9  # 10 ns
omega_0 = 2 * np.pi * 10e9  # 10 GHz
D = 5.4e-17
alpha = 0.01
source_pos = 50
source_freq = 2 * np.pi * 10e9

# シミュレーション実行
history = spin_wave_propagation_1d(N, dx, dt, T_total, omega_0, D, alpha,
                                    source_pos, source_freq)

# プロット
fig, axes = plt.subplots(2, 1, figsize=(12, 8))

# 時空間プロット
x = np.arange(N) * dx * 1e6  # μm
t = np.arange(len(history)) * 100 * dt * 1e9  # ns

im = axes[0].imshow(history.T, aspect='auto', origin='lower',
                     extent=[t[0], t[-1], x[0], x[-1]],
                     cmap='hot')
axes[0].set_xlabel('時間 [ns]', fontsize=12)
axes[0].set_ylabel('位置 [μm]', fontsize=12)
axes[0].set_title('スピン波伝播の時空間図', fontsize=14)
axes[0].axhline(y=source_pos * dx * 1e6, color='cyan', linestyle='--',
                label='励起源')
axes[0].legend()
plt.colorbar(im, ax=axes[0], label='|m|²')

# 最終時刻のプロファイル
axes[1].plot(x, history[-1], 'b-', linewidth=2)
axes[1].axvline(x=source_pos * dx * 1e6, color='red', linestyle='--',
                label='励起源')
axes[1].set_xlabel('位置 [μm]', fontsize=12)
axes[1].set_ylabel('スピン波強度 |m|²', fontsize=12)
axes[1].set_title(f't = {T_total*1e9:.1f} ns のプロファイル', fontsize=14)
axes[1].legend()
axes[1].grid(True, alpha=0.3)

plt.tight_layout()
plt.savefig('spin_wave_propagation.png', dpi=150)
plt.show()

# 群速度の推定
v_group = np.sqrt(D * omega_0)
print(f"群速度(推定): {v_group:.2e} m/s = {v_group*1e-3:.2f} km/s")

1.6 非線形マグノニクス

高強度のスピン波は非線形効果を示し、パラメトリック増幅、ソリトン形成、 カオス的振る舞いなど豊かな物理現象が現れます。

パラメトリック増幅

3波混合過程

$$\omega_p = \omega_1 + \omega_2, \quad \mathbf{k}_p = \mathbf{k}_1 + \mathbf{k}_2$$

ポンプ波がシグナル波とアイドラー波を増幅

Python パラメトリック増幅のシミュレーション
import numpy as np
import matplotlib.pyplot as plt
from scipy.integrate import solve_ivp

def parametric_amplification(t, y, omega_s, omega_i, gamma_nl, gamma_decay):
    """
    パラメトリック増幅の結合モード方程式

    ポンプ波によるシグナル波とアイドラー波の増幅

    Parameters:
    -----------
    y : array
        [A_s_real, A_s_imag, A_i_real, A_i_imag]
    omega_s, omega_i : float
        シグナル、アイドラー周波数
    gamma_nl : float
        非線形結合係数
    gamma_decay : float
        減衰率
    """
    A_s = y[0] + 1j * y[1]  # シグナル波振幅
    A_i = y[2] + 1j * y[3]  # アイドラー波振幅

    # ポンプ波は一定と仮定
    A_p = 1.0

    # 結合モード方程式
    dA_s_dt = 1j * gamma_nl * A_p * np.conj(A_i) - gamma_decay * A_s
    dA_i_dt = 1j * gamma_nl * A_p * np.conj(A_s) - gamma_decay * A_i

    return [np.real(dA_s_dt), np.imag(dA_s_dt),
            np.real(dA_i_dt), np.imag(dA_i_dt)]

# パラメータ
omega_s = 2 * np.pi * 5e9   # 5 GHz
omega_i = 2 * np.pi * 5e9   # 5 GHz (縮退)
gamma_nl = 1e9              # 非線形結合
gamma_decay = 1e8           # 減衰

# 初期条件(小さなシード)
A_s_0 = 0.01
A_i_0 = 0.01
y0 = [A_s_0, 0, A_i_0, 0]

# 時間積分
t_span = (0, 50e-9)
t_eval = np.linspace(0, 50e-9, 1000)

sol = solve_ivp(parametric_amplification, t_span, y0, t_eval=t_eval,
                args=(omega_s, omega_i, gamma_nl, gamma_decay),
                method='RK45')

# 振幅の計算
A_s = sol.y[0] + 1j * sol.y[1]
A_i = sol.y[2] + 1j * sol.y[3]

# プロット
fig, axes = plt.subplots(2, 1, figsize=(12, 8))

# 振幅の時間発展
axes[0].semilogy(sol.t * 1e9, np.abs(A_s)**2, 'b-', linewidth=2, label='シグナル波')
axes[0].semilogy(sol.t * 1e9, np.abs(A_i)**2, 'r--', linewidth=2, label='アイドラー波')
axes[0].set_xlabel('時間 [ns]', fontsize=12)
axes[0].set_ylabel('強度 |A|²', fontsize=12)
axes[0].set_title('パラメトリック増幅', fontsize=14)
axes[0].legend()
axes[0].grid(True, alpha=0.3)

# 閾値との比較
threshold = gamma_decay / gamma_nl
axes[0].axhline(y=threshold**2, color='gray', linestyle=':', label=f'閾値')

# 利得の計算
gain_s = np.abs(A_s[-1])**2 / np.abs(A_s[0])**2
gain_i = np.abs(A_i[-1])**2 / np.abs(A_i[0])**2

axes[1].bar(['シグナル波', 'アイドラー波'],
            [10*np.log10(gain_s), 10*np.log10(gain_i)],
            color=['blue', 'red'])
axes[1].set_ylabel('利得 [dB]', fontsize=12)
axes[1].set_title('パラメトリック利得', fontsize=14)
axes[1].grid(True, alpha=0.3)

plt.tight_layout()
plt.savefig('parametric_amplification.png', dpi=150)
plt.show()

print(f"シグナル波利得: {10*np.log10(gain_s):.1f} dB")
print(f"アイドラー波利得: {10*np.log10(gain_i):.1f} dB")

マグノン・ソリトン

非線形効果と分散のバランスにより、形状を保ったまま伝播するソリトン解が存在します。

非線形シュレディンガー方程式

$$i\frac{\partial A}{\partial t} + \frac{D}{2}\frac{\partial^2 A}{\partial x^2} + \gamma_{NL}|A|^2 A = 0$$

ソリトン解: $A(x,t) = A_0 \text{sech}\left(\frac{x - vt}{\xi}\right) e^{i(kx - \omega t)}$

1.7 応用展望

マグノニック・プロセッサ

スピン波の干渉を利用した超並列計算

  • 低消費電力
  • 高集積密度
  • アナログ信号処理

スピン波通信

オンチップ信号伝送

  • 電磁干渉なし
  • 短波長・高集積
  • 3次元配線可能

ニューロモルフィック

脳型コンピューティング

  • 非線形応答
  • 可塑性
  • リザバー計算

まとめ

この章で学んだこと

  • スピン波分散: 交換支配と静磁支配の2領域
  • マグノン: スピン波の量子、ボーズ統計
  • マグノニック結晶: 周期構造によるバンドギャップ形成
  • スピン波論理: 干渉を利用した論理演算
  • 非線形効果: パラメトリック増幅、ソリトン