Example #1
0
def plot_traj3d(ax, sol, length, nskip=100):
    sol = sol[::nskip]
    x, y, z = pos_(sol).T
    b = length / 2.
    pt0 = pos_(sol)
    pt1 = np.array(
        [pos_(s) + pct.rot3d(*quat_(s)).dot([b, 0, 0]) for s in sol])
    pt2 = np.array(
        [pos_(s) + pct.rot3d(*quat_(s)).dot([-b, 0, 0]) for s in sol])

    for (x0, y0, z0), (x1, y1, z1), (x2, y2, z2) in zip(pt0, pt1, pt2):
        ax.plot([x0, x1], [y0, y1], 'r-', lw=2)
        ax.plot([x0, x2], [y0, y2], 'g-', lw=2)

    ax.plot(x, y, 'k:', lw=2)
    return ax
Example #2
0
def torque_dep3d(u, params):
    R, (x, y, z) = pct.rot3d(*quat_(u)), pos_(u)
    Kcm = np.diag([params.cmf_long, params.cmf_short, params.cmf_short])
    E_123 = R.dot(params.elecf(x, y, z))
    dip = params.vol * params.eps_f * Kcm.dot(E_123)

    return np.cross(dip, E_123)
Example #3
0
def torque_drag3d(u, params):
    R, (x, y, z) = pct.rot3d(*quat_(u)), pos_(u)
    L_xyz = pct.jac3d(params.vf, x, y, z)
    L_123 = R.dot(L_xyz).dot(R.T)  # velocity gradient
    D_123 = (L_123 + L_123.T) / 2  # rate of deformation
    W_123 = (L_123 - L_123.T) / 2  # rate of rotation

    r, r2 = params.r, params.r2
    if r > 1:
        a0 = -2 / (r2 - 1) - r * log(
            (r - sqrt(r2 - 1)) / (r + sqrt(r2 - 1))) / (r2 - 1)**1.5
        b0 = c0 = r2 / (r2 - 1) + r * log(
            (r - sqrt(r2 - 1)) / (r + sqrt(r2 - 1))) / (r2 - 1)**1.5 / 2
    else:
        a0 = b0 = c0 = 2 / 3.

    omg1, omg2, omg3 = omg_(u)
    k1 = 16 * np.pi * params.mu_f * params.a**3 * r / (b0 + c0) / 3.
    k2 = 16 * np.pi * params.mu_f * params.a**3 * r / (c0 + r2 * a0) / 3.
    k3 = 16 * np.pi * params.mu_f * params.a**3 * r / (r2 * a0 + b0) / 3.

    t1 = 2 * (W_123[2, 1] - omg1)
    t2 = (1 - r**2) * D_123[0, 2] + (1 + r**2) * (W_123[0, 2] - omg2)
    t3 = (r**2 - 1) * D_123[1, 0] + (r**2 + 1) * (W_123[1, 0] - omg3)

    return np.r_[k1 * t1, k2 * t2, k3 * t3]
Example #4
0
def force_drag3d(u, params):
    r, r2 = params.r, params.r2
    if r > 1:
        K11 = 8 * (r2 - 1) / (
            (2 * r2 - 1) * log(r + sqrt(r2 - 1)) / sqrt(r2 - 1) - r)
        K22 = K33 = 16 * (r2 - 1) / (
            (2 * r2 - 3) * log(r + sqrt(r2 - 1)) / sqrt(r2 - 1) + r)

    else:
        K11 = K22 = K33 = 6

    K_123 = params.mu_f * np.pi * params.a * np.diag([K11, K22, K33])
    R, (x, y, z) = pct.rot3d(*quat_(u)), pos_(u)

    return (R.T).dot(K_123).dot(R).dot(params.vf(x, y, z) - vel_(u))
Example #5
0
def torque_drag3d_sph(u, params):
    R, (x, y, z) = pct.rot3d(*quat_(u)), pos_(u)
    L_xyz = pct.jac3d(params.vf, x, y, z)
    L_123 = R.dot(L_xyz).dot(R.T)  # velocity gradient
    W_123 = (L_123 - L_123.T) / 2  # rate of rotation

    a0 = b0 = c0 = 2 / 3.
    k1 = k2 = k3 = 4 * np.pi * params.mu_f * params.a**3

    omg1, omg2, omg3 = omg_(u)
    t1 = 2 * (W_123[2, 1] - omg1)
    t2 = 2 * (W_123[0, 2] - omg2)
    t3 = 2 * (W_123[1, 0] - omg3)

    return np.r_[k1 * t1, k2 * t2, k3 * t3]
Example #6
0
def force_dep3d(u, params):
    R, (x, y, z) = pct.rot3d(*quat_(u)), pos_(u)
    Kcm = np.diag([params.cmf_long, params.cmf_short, params.cmf_short])
    dip = params.vol * params.eps_f * Kcm.dot(R).dot(params.elecf(x, y, z))

    return pct.jac3d(params.elecf, x, y, z).dot(R.T).dot(dip)