示例#1
0
def velocity_matrix(ra: MatrixVector,
                    rb: MatrixVector,
                    rc: MatrixVector,
                    betm: float = 1.0,
                    tol: float = 1e-12):

    if ra.shape != rb.shape:
        return ValueError()

    numi = rc.shape[0]
    numj = ra.shape[1]

    ra = ra.repeat(numi, axis=0)
    rb = rb.repeat(numi, axis=0)
    rc = rc.repeat(numj, axis=1)

    a = rc - ra
    b = rc - rb

    a.x = a.x / betm
    b.x = b.x / betm

    am = a.return_magnitude()
    bm = b.return_magnitude()

    # Velocity from Bound Vortex
    adb = elementwise_dot_product(a, b)
    abm = multiply(am, bm)
    dm = multiply(abm, abm + adb)
    axb = elementwise_cross_product(a, b)
    axbm = axb.return_magnitude()
    chki = (axbm == 0.0)
    chki = logical_and(axbm >= -tol, axbm <= tol)
    veli = elementwise_multiply(axb, divide(am + bm, dm))
    veli.x[chki] = 0.0
    veli.y[chki] = 0.0
    veli.z[chki] = 0.0

    # Velocity from Trailing Vortex A
    axx = MatrixVector(zeros(a.shape, dtype=float), a.z, -a.y)
    axxm = axx.return_magnitude()
    chka = (axxm == 0.0)
    vela = elementwise_divide(axx, multiply(am, am - a.x))
    vela.x[chka] = 0.0
    vela.y[chka] = 0.0
    vela.z[chka] = 0.0

    # Velocity from Trailing Vortex B
    bxx = MatrixVector(zeros(b.shape, dtype=float), b.z, -b.y)
    bxxm = bxx.return_magnitude()
    chkb = (bxxm == 0.0)
    velb = elementwise_divide(bxx, multiply(bm, bm - b.x))
    velb.x[chkb] = 0.0
    velb.y[chkb] = 0.0
    velb.z[chkb] = 0.0

    return veli, vela, velb
示例#2
0
def vel_doublet_matrix(ov, om, faco):
    ov = faco * ov
    oxx = MatrixVector(zeros(ov.shape), -ov.z, ov.y)
    oxxm = oxx.return_magnitude()
    chko = (oxxm == 0.0)
    velol = elementwise_divide(oxx, multiply(om, om - ov.x))
    velol.x[chko] = 0.0
    velol.y[chko] = 0.0
    velol.z[chko] = 0.0
    return velol
示例#3
0
def phi_doublet_matrix(vecs: MatrixVector, rls: MatrixVector, sgnz: matrix):
    mags = vecs.return_magnitude()
    ms = divide(vecs.x, rls.y)
    ths = arctan(ms)
    ths[rls.y == 0.0] = piby2
    gs = multiply(ms, divide(rls.z, mags))
    Js = arctan(gs)
    Js[rls.y == 0.0] = piby2
    phids = Js - multiply(sgnz, ths)
    return phids, mags
示例#4
0
def vel_trailing_doublet_matrix(ov, om, faco):
    ov: MatrixVector = faco * ov
    oxx = MatrixVector(zeros(ov.shape), -ov.z, ov.y)
    oxxm = oxx.return_magnitude()
    chko = absolute(oxxm) < tol
    den = multiply(om, om - ov.x)
    chkd = absolute(den) < tol
    denr = zeros(ov.shape, dtype=float)
    reciprocal(den, where=logical_not(chkd), out=denr)
    velol = elementwise_multiply(oxx, denr)
    velol.x[chko] = 0.0
    velol.y[chko] = 0.0
    velol.z[chko] = 0.0
    return velol
示例#5
0
def phi_doublet_matrix(vecs: MatrixVector, sgnz: matrix):
    mags = vecs.return_magnitude()
    chkm = mags < tol
    chky = absolute(vecs.y) < tol
    vecs.y[chky] = 0.0
    ms = zeros(mags.shape, dtype=float)
    divide(vecs.x, vecs.y, where=logical_not(chky), out=ms)
    ths = arctan(ms)
    ths[chky] = piby2
    ts = zeros(mags.shape, dtype=float)
    divide(vecs.z, mags, where=logical_not(chkm), out=ts)
    gs = multiply(ms, ts)
    Js = arctan(gs)
    Js[chky] = piby2
    phids = Js - multiply(sgnz, ths)
    return phids, mags