Skip to content

PICMI: ionizer added despite not being initialized #5727

Description

@PrometheusPi

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

#######################################

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    PICMIpypicongpu and picmi relatedbuga bug in the project's codecomponent: user inputsignals changes in user API such as .param files, .cfg syntax, etc. - changelog!

    Type

    No type

    Projects

    No projects

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions