def get_chem_names(particles):
    """
    Create a list of chemical names for the dispersed phase particles
    
    Reads the composition attribute of each particle in a `particles` list
    and compiles a unique list of particle names.
    
    Parameters
    ----------
    particles : list of `Particle` objects
        List of `SingleParticle`, `PlumeParticle`, or 
        `bent_plume_model.Particle` objects describing each dispersed phase 
        in the simulation
    
    Returns
    -------
    chem_names : str list
        List of the chemical composition of particles undergoing dissolution
        in the `particles` list
    
    """
    # Initialize a list to store the names
    chem_names = []
    
    # Add the chemicals that are part of the particle composition
    for i in range(len(particles)):
        if particles[i].particle.issoluble:
            chem_names += [chem for chem in particles[i].composition if
                           chem not in chem_names]
    
    # Return the list of chemical names
    return chem_names