A 0D RF driver: coil current and RF power transfer efficiency in seconds.
:class:wellbalanced.RFDriver couples a global model of the driver’s hydrogen plasma
to a transformer model of the coil (Piejak, Godyak and Alexandrovich 1992; Lieberman
and Lichtenberg sec. 12.2): the absorbed power fixes the electron density and
temperature, those fix the skin layer and the resistance the coil sees, and that the
coil current and the efficiency eta = R_s / (R_s + R_net). Compared with Zielke,
Briefi and Fantz (NIBS’22, arXiv:2211.10143) and with the 2D field of
rf_driver_inductive_field_2d.py (step R1):
- the BUG driver at 25 kW absorbed (their 263 A and 55 %);
- 2 MHz instead of 1 MHz, and a 30 cm driver instead of 17 cm at the same coil (their Fig. 6 far from the shield: about 0.54, 0.67 and 0.82);
- the coil current and efficiency against the absorbed power, BUG and ELISE drivers.
The rates are placeholders (illustrative_hydrogen_driver warns), the coil radius
and the ion mean free path assumptions, and a 0D model has no shield and no second
driver: the coil-shield distance and the mutual coupling of drivers (their Figs. 4-6)
change the field around the coil, which is the 2D model’s part. Expect trends, not
the paper’s numbers.
Python source
Section titled “Python source”"""A 0D RF driver: coil current and RF power transfer efficiency in seconds.
:class:`wellbalanced.RFDriver` couples a global model of the driver's hydrogen plasmato a transformer model of the coil (Piejak, Godyak and Alexandrovich 1992; Liebermanand Lichtenberg sec. 12.2): the absorbed power fixes the electron density andtemperature, those fix the skin layer and the resistance the coil sees, and that thecoil current and the efficiency ``eta = R_s / (R_s + R_net)``. Compared with Zielke,Briefi and Fantz (NIBS'22, arXiv:2211.10143) and with the 2D field of``rf_driver_inductive_field_2d.py`` (step R1):
1. the BUG driver at 25 kW absorbed (their 263 A and 55 %);2. 2 MHz instead of 1 MHz, and a 30 cm driver instead of 17 cm at the same coil (their Fig. 6 far from the shield: about 0.54, 0.67 and 0.82);3. the coil current and efficiency against the absorbed power, BUG and ELISE drivers.
The rates are placeholders (``illustrative_hydrogen_driver`` warns), the coil radiusand the ion mean free path assumptions, and a 0D model has no shield and no seconddriver: the coil-shield distance and the mutual coupling of drivers (their Figs. 4-6)change the field around the coil, which is the 2D model's part. Expect trends, notthe paper's numbers."""
import dataclassesimport warnings
import matplotlib.pyplot as pltimport numpy as np
from wellbalanced.driver import illustrative_hydrogen_driver
with warnings.catch_warnings(): warnings.simplefilter("ignore", UserWarning) # the placeholder-data warning, once bug = illustrative_hydrogen_driver()elise = dataclasses.replace(bug, radius=0.138, coil_radius=0.158)POWER = 25.0e3
# 1. BUG at 25 kWstate = bug.solve(POWER)exact = dataclasses.replace(bug, coupling="solenoid").couple(state.plasma, POWER)plasma = state.plasmaprint( f"BUG plasma at 25 kW: n_e = {plasma.electron_density:.2e} m^-3, " f"T_e = {plasma.electron_temperature:.2f} eV, nu_m = {state.collision_frequency:.2e} " f"/s, skin depth {state.skin_depth * 1e3:.1f} mm, coil factor {bug.coil.factor:.3f}")print( " transformer exact column R1 2D (fixed plasma) Zielke")print( f"coil current [A] {state.coil_current:8.0f} {exact.coil_current:12.0f}" " 156 263")print( f"efficiency {state.efficiency:8.1%} {exact.efficiency:12.1%}" " 77.4 % 55 %")print( f"plasma resistance {state.plasma_resistance:8.3f} " f"{exact.plasma_resistance:12.3f} Ohm")print(f"coil voltage [kV] {state.coil_voltage / 1e3:8.1f}")
# 2. frequency and driver length (the coil stays 17 cm long)print("\nefficiency at 25 kW this model Zielke Fig. 6, far from the shield")cases = { "1 MHz, 17 cm": (bug, 0.54), "2 MHz, 17 cm": (dataclasses.replace(bug, frequency=2.0e6), 0.67), "1 MHz, 30 cm": (dataclasses.replace(bug, length=0.30, coil_length=0.17), 0.82),}for name, (driver, paper) in cases.items(): print(f"{name} {driver.solve(POWER).efficiency:8.3f} {paper:.2f}")
# 3. against the absorbed powerpowers = np.geomspace(5.0e3, 100.0e3, 12)fig, (left, right) = plt.subplots(1, 2, figsize=(9, 3.6))for name, driver in (("BUG", bug), ("ELISE driver", elise)): for frequency, style in ((1.0e6, "-"), (2.0e6, "--")): scan = dataclasses.replace(driver, frequency=frequency).scan("power", powers) label = f"{name}, {frequency / 1e6:.0f} MHz" left.plot(powers / 1e3, [s.efficiency for s in scan], style, label=label) right.plot(powers / 1e3, [s.coil_current for s in scan], style, label=label)left.plot([25], [0.55], "ko", label="Zielke et al., BUG")right.plot([25], [263], "ko")left.set(xlabel="absorbed power [kW]", ylabel=r"efficiency $\eta$", ylim=(0, 1))right.set(xlabel="absorbed power [kW]", ylabel="coil current amplitude [A]")left.legend(fontsize=8)fig.suptitle("0D driver, H2 at 0.3 Pa, placeholder rates, R_net = 0.6 Ohm")fig.tight_layout()