In PICMI, ionizers like BSI and ADK can be defined and need to be added to the picongpu_interaction.
If I create ionizers, but avoid adding them (see commented-out line below), they are still added in speciesDefinition.param .
This seems to be a bug.
The following code reproduces the behavior.
# /// script
# requires-python = ">=3.11,<3.14"
# dependencies = ["picongpu @ git+https://github.com/ComputationalRadiationPhysics/picongpu@dev#subdirectory=lib/python"]
# ///
from pathlib import Path
import numpy as np
import datetime
from picongpu import picmi
from picongpu.picmi import Simulation, ElectromagneticSolver, Cartesian3DGrid
######################################
# setup parameters - please change
N_sims = 1 # number of simulations
N_interations = 1000 # iterations for each simulation
GPU_distribution = [1, 8, 2] # GPU layout for each simulation
#######################################
# sim setup
def create_sim():
"""
This is a warm plasma simulation
"""
#############
# solver
numberCells = np.array([192, 2048, 192])
cellSize = np.array([0.8e-6 / 128.] * 3) # unit: meter
solver=ElectromagneticSolver(
method = "Yee",
cfl = 0.95,
grid = Cartesian3DGrid(
picongpu_n_gpus=GPU_distribution,
number_of_cells = numberCells.tolist(),
lower_bound = [0,0,0],
upper_bound = (numberCells * cellSize).tolist(),
lower_boundary_conditions = ["periodic"] * 3,
upper_boundary_conditions = ["periodic"] * 3,
)
)
#############
# particles
n_c = 1.11485e27 / 0.8 / 0.8
n_e = 448. * n_c;
gaussianDensityProfile = picmi.distribution.GaussianDistribution(
density=n_e,
center_front=5.0e-6,
sigma_front=1.0e-6,
center_rear=10.0e-6,
sigma_rear=1.0e-6,
factor=-1.0,
power=2.0,
vacuum_front=50 * cellSize[1],
rms_velocity=[1.0e-3 * picmi.constants.c] * 3,
)
random_layout_rods = picmi.PseudoRandomLayout(n_macroparticles_per_cell=10)
electrons = picmi.Species(
particle_type="electron",
name="e",
initial_distribution=gaussianDensityProfile,
density_scale = 1.0,
)
silicon = picmi.Species(
particle_type="Si",
name="si",
charge_state=2,
initial_distribution=gaussianDensityProfile,
density_scale = 0.5,
)
adk_ionization_model = picmi.ADK(
ADK_variant=picmi.ADKVariant.LinearPolarization,
ion_species=silicon,
ionization_electron_species=electrons,
ionization_current=None,
)
bsi_effectiveZ_ionization_model = picmi.BSI(
BSI_extensions=[picmi.BSIExtension.EffectiveZ],
ion_species=silicon,
ionization_electron_species=electrons,
ionization_current=None,
)
interaction = [adk_ionization_model,
bsi_effectiveZ_ionization_model]
##############
# sim setup
sim = Simulation(
picongpu_walltime=datetime.timedelta(minutes=10.0),
max_steps = N_interations,
solver = solver,
picongpu_species = [electrons, silicon],
picongpu_particle_layout = random_layout_rods,
#picongpu_interaction = interaction
)
###############
# plugin output
sim.diagnostics = []
sim.diagnostics.append(picmi.diagnostics.MacroParticleCount(
species=electrons,
period=picmi.diagnostics.TimeStepSpec[::10],
))
return sim
#######################################
#######################################
# create and build all PIConGPU simulations
all_picongpu_calls = []
for i in range(N_sims):
sim = create_sim() # call picmi simulation creater
sim_path = Path(f"./test/sim_{i:04d}") # location of simulation
sim.run(setup_dir = sim_path / "setup",
run_dir = sim_path / "run") # create setup, build and empty tbg
all_picongpu_calls.append(f"{sim_path.resolve()}") # add to list of simulations
#######################################
In PICMI, ionizers like BSI and ADK can be defined and need to be added to the
picongpu_interaction.If I create ionizers, but avoid adding them (see commented-out line below), they are still added in
speciesDefinition.param.This seems to be a bug.
The following code reproduces the behavior.