def E_Advective_Dispersion(t, Pe):
    """Calculate a dimensionless measure of the output tracer concentration from
    a spike input to reactor with advection and dispersion.

    :param t: The time(s) at which to calculate the effluent concentration. Time can be made dimensionless by dividing by the residence time of the CMFR.
    :type t: float or numpy.array
    :param Pe: The ratio of advection to dispersion ((mean fluid velocity)/(Dispersion*flow path length))
    :type Pe: float

    :return: dimensionless measure of the output tracer concentration (concentration * volume of reactor) / (mass of tracer)
    :rtype: float

    :Examples:

    >>> from aguaclara.research.environmental_processes_analysis import E_Advective_Dispersion
    >>> round(E_Advective_Dispersion(0.5, 5), 7)
    0.4774864
    """
    # replace any times at zero with a number VERY close to zero to avoid
    # divide by zero errors
    if isinstance(t, list):
        t[t == 0] = 10**(-10)
    return (Pe/(4*np.pi*t))**(0.5)*np.exp((-Pe*((1-t)**2))/(4*t))
Calculate a dimensionless measure of the output tracer concentration from
    a spike input to reactor with advection and dispersion.

    :param t: The time(s) at which to calculate the effluent concentration. Time can be made dimensionless by dividing by the residence time of the CMFR.
    :type t: float or numpy.array
    :param Pe: The ratio of advection to dispersion ((mean fluid velocity)/(Dispersion*flow path length))
    :type Pe: float

    :return: dimensionless measure of the output tracer concentration (concentration * volume of reactor) / (mass of tracer)
    :rtype: float

    :Examples:

    >>> from aguaclara.research.environmental_processes_analysis import E_Advective_Dispersion
    >>> round(E_Advective_Dispersion(0.5, 5), 7)
    0.4774864