예제 #1
0
def xfoil_speccl(xdg, cl_spec):

    cl_spec_p = xi.copy_doublep(cl_spec)
    alpha_p = xi.new_doublep()
    lift_p = xi.new_doublep()
    drag_p = xi.new_doublep()
    moment_p = xi.new_doublep()
    converged_p = xi.new_boolp()
    stat_p = xi.new_intp()

    xi.xfoil_speccl(xdg, cl_spec_p, alpha_p, lift_p, drag_p, moment_p,
                    converged_p, stat_p)

    alpha = xi.doublep_value(alpha_p)
    lift = xi.doublep_value(lift_p)
    drag = xi.doublep_value(drag_p)
    moment = xi.doublep_value(moment_p)
    converged = xi.boolp_value(converged_p)
    stat = xi.intp_value(stat_p)

    xi.delete_doublep(cl_spec_p)
    xi.delete_doublep(alpha_p)
    xi.delete_doublep(lift_p)
    xi.delete_doublep(drag_p)
    xi.delete_doublep(moment_p)
    xi.delete_boolp(converged_p)
    xi.delete_intp(stat_p)

    return alpha, lift, drag, moment, converged, stat
예제 #2
0
def naca_4_digit(camber, xcamber, thick, npointside):

    camber_p = xi.copy_doublep(camber)
    xcamber_p = xi.copy_doublep(xcamber)
    thick_p = xi.copy_doublep(thick)
    npointside_p = xi.copy_intp(npointside)
    xout_a = xi.new_doublea(2 * npointside)
    zout_a = xi.new_doublea(2 * npointside)
    nout_p = xi.new_intp()

    xi.naca_4_digit(camber_p, xcamber_p, thick_p, npointside_p, xout_a, zout_a,
                    nout_p)

    nout = xi.intp_value(nout_p)
    xout = nout * [0]
    zout = nout * [0]
    for i in range(nout):
        xout[i] = xi.doublea_getitem(xout_a, i)
        zout[i] = xi.doublea_getitem(zout_a, i)

    xi.delete_doublep(camber_p)
    xi.delete_doublep(xcamber_p)
    xi.delete_doublep(thick_p)
    xi.delete_intp(npointside_p)
    xi.delete_doublea(xout_a)
    xi.delete_doublea(zout_a)
    xi.delete_intp(nout_p)

    return xout, zout, nout
예제 #3
0
def xfoil_spline_coordinates(x, z, npt):

    x_a = xi.new_doublea(npt)
    z_a = xi.new_doublea(npt)
    npt_p = xi.copy_intp(npt)
    s_a = xi.new_doublea(npt)
    xs_a = xi.new_doublea(npt)
    zs_a = xi.new_doublea(npt)
    for i in range(npt):
        xi.doublea_setitem(x_a, i, x[i])
        xi.doublea_setitem(z_a, i, z[i])

    xi.xfoil_spline_coordinates(x_a, z_a, npt_p, s_a, xs_a, zs_a)

    s = npt * [0]
    xs = npt * [0]
    zs = npt * [0]
    for i in range(npt):
        s[i] = xi.doublea_getitem(s_a, i)
        xs[i] = xi.doublea_getitem(xs_a, i)
        zs[i] = xi.doublea_getitem(zs_a, i)

    xi.delete_doublea(x_a)
    xi.delete_doublea(z_a)
    xi.delete_intp(npt_p)
    xi.delete_doublea(s_a)
    xi.delete_doublea(xs_a)
    xi.delete_doublea(zs_a)

    return s, xs, zs
예제 #4
0
def xfoil_get_wakepoints(xdg):

    nwake_p = xi.new_intp()

    xi.xfoil_get_wakepoints(xdg, nwake_p)

    nwake = xi.intp_value(nwake_p)
    xi.delete_intp(nwake_p)

    return nwake
예제 #5
0
def xfoil_smooth_paneling(xdg):

    stat_p = xi.new_intp()

    xi.xfoil_smooth_paneling(xdg, stat_p)
    stat = xi.intp_value(stat_p)

    xi.delete_intp(stat_p)

    return stat
예제 #6
0
def xfoil_set_buffer_airfoil(xdg, xin, zin, npointin):

    xin_a = xi.new_doublea(npointin)
    zin_a = xi.new_doublea(npointin)
    npointin_p = xi.copy_intp(npointin)
    for i in range(npointin):
        xi.doublea_setitem(xin_a, i, xin[i])
        xi.doublea_setitem(zin_a, i, zin[i])

    xi.xfoil_set_buffer_airfoil(xdg, xin_a, zin_a, npointin_p)

    xi.delete_doublea(xin_a)
    xi.delete_doublea(zin_a)
    xi.delete_intp(npointin_p)
예제 #7
0
def xfoil_get_retheta(xdg, npoint):

    npoint_p = xi.copy_intp(npoint)
    retheta_a = xi.new_doublea(npoint)

    xi.xfoil_get_retheta(xdg, npoint_p, retheta_a)

    retheta = npoint * [0]
    for i in range(npoint):
        retheta[i] = xi.doublea_getitem(retheta_a, i)

    xi.delete_intp(npoint_p)
    xi.delete_doublea(retheta_a)

    return retheta
예제 #8
0
def xfoil_get_hk(xdg, npoint):

    npoint_p = xi.copy_intp(npoint)
    hk_a = xi.new_doublea(npoint)

    xi.xfoil_get_hk(xdg, npoint_p, hk_a)

    hk = npoint * [0]
    for i in range(npoint):
        hk[i] = xi.doublea_getitem(hk_a, i)

    xi.delete_intp(npoint_p)
    xi.delete_doublea(hk_a)

    return hk
예제 #9
0
def xfoil_get_diss(xdg, npoint):

    npoint_p = xi.copy_intp(npoint)
    diss_a = xi.new_doublea(npoint)

    xi.xfoil_get_diss(xdg, npoint_p, diss_a)

    diss = npoint * [0]
    for i in range(npoint):
        diss[i] = xi.doublea_getitem(diss_a, i)

    xi.delete_intp(npoint_p)
    xi.delete_doublea(diss_a)

    return diss
예제 #10
0
def xfoil_get_deltastar(xdg, npoint):

    npoint_p = xi.copy_intp(npoint)
    deltastar_a = xi.new_doublea(npoint)

    xi.xfoil_get_deltastar(xdg, npoint_p, deltastar_a)

    deltastar = npoint * [0]
    for i in range(npoint):
        deltastar[i] = xi.doublea_getitem(deltastar_a, i)

    xi.delete_intp(npoint_p)
    xi.delete_doublea(deltastar_a)

    return deltastar
예제 #11
0
def xfoil_get_uedge(xdg, npoint):

    npoint_p = xi.copy_intp(npoint)
    uedge_a = xi.new_doublea(npoint)

    xi.xfoil_get_uedge(xdg, npoint_p, uedge_a)

    uedge = npoint * [0]
    for i in range(npoint):
        uedge[i] = xi.doublea_getitem(uedge_a, i)

    xi.delete_intp(npoint_p)
    xi.delete_doublea(uedge_a)

    return uedge
예제 #12
0
def xfoil_get_cf(xdg, npoint):

    npoint_p = xi.copy_intp(npoint)
    cf_a = xi.new_doublea(npoint)

    xi.xfoil_get_cf(xdg, npoint_p, cf_a)

    cf = npoint * [0]
    for i in range(npoint):
        cf[i] = xi.doublea_getitem(cf_a, i)

    xi.delete_intp(npoint_p)
    xi.delete_doublea(cf_a)

    return cf
예제 #13
0
def xfoil_get_ampl(xdg, npoint):

    npoint_p = xi.copy_intp(npoint)
    ampl_a = xi.new_doublea(npoint)

    xi.xfoil_get_ampl(xdg, npoint_p, ampl_a)

    ampl = npoint * [0]
    for i in range(npoint):
        ampl[i] = xi.doublea_getitem(ampl_a, i)

    xi.delete_intp(npoint_p)
    xi.delete_doublea(ampl_a)

    return ampl
예제 #14
0
def xfoil_get_wake_deltastar(xdg, nwake):

    nwake_p = xi.copy_intp(nwake)
    deltastar_a = xi.new_doublea(nwake)

    xi.xfoil_get_wake_deltastar(xdg, nwake_p, deltastar_a)

    deltastar = nwake * [0]
    for i in range(nwake):
        deltastar[i] = xi.doublea_getitem(deltastar_a, i)

    xi.delete_intp(nwake_p)
    xi.delete_doublea(deltastar_a)

    return deltastar
예제 #15
0
def xfoil_get_wake_uedge(xdg, nwake):

    nwake_p = xi.copy_intp(nwake)
    uedge_a = xi.new_doublea(nwake)

    xi.xfoil_get_wake_uedge(xdg, nwake_p, uedge_a)

    uedge = nwake * [0]
    for i in range(nwake):
        uedge[i] = xi.doublea_getitem(uedge_a, i)

    xi.delete_intp(nwake_p)
    xi.delete_doublea(uedge_a)

    return uedge
예제 #16
0
def xfoil_get_wake_cp(xdg, nwake):

    nwake_p = xi.copy_intp(nwake)
    cp_a = xi.new_doublea(nwake)

    xi.xfoil_get_wake_cp(xdg, nwake_p, cp_a)

    cp = nwake * [0]
    for i in range(nwake):
        cp[i] = xi.doublea_getitem(cp_a, i)

    xi.delete_intp(nwake_p)
    xi.delete_doublea(cp_a)

    return cp
예제 #17
0
def xfoil_modify_tegap(xdg, gap, blendloc):

    stat_p = xi.new_intp()
    gap_p = xi.copy_doublep(gap)
    blendloc_p = xi.copy_doublep(blendloc)
    npointout_p = xi.new_intp()

    xi.xfoil_modify_tegap(xdg, gap_p, blendloc_p, npointout_p, stat_p)

    npointout = xi.intp_value(npointout_p)
    stat = xi.intp_value(stat_p)

    xi.delete_doublep(gap_p)
    xi.delete_doublep(blendloc_p)
    xi.delete_intp(npointout_p)
    xi.delete_intp(stat_p)

    return npointout, stat
예제 #18
0
def xfoil_get_wake_geometry(xdg, nwake):

    nwake_p = xi.copy_intp(nwake)
    xw_a = xi.new_doublea(nwake)
    zw_a = xi.new_doublea(nwake)

    xi.xfoil_get_wake_geometry(xdg, nwake_p, xw_a, zw_a)

    xw = nwake * [0]
    zw = nwake * [0]
    for i in range(nwake):
        xw[i] = xi.doublea_getitem(xw_a, i)
        zw[i] = xi.doublea_getitem(zw_a, i)

    xi.delete_intp(nwake_p)
    xi.delete_doublea(xw_a)
    xi.delete_doublea(zw_a)

    return xw, zw
예제 #19
0
def naca_5_digit(des, npointside):

    npointside_p = xi.copy_intp(npointside)
    xout_a = xi.new_doublea(2 * npointside)
    zout_a = xi.new_doublea(2 * npointside)
    nout_p = xi.new_intp()
    stat_p = xi.new_intp()

    xi.naca_5_digit(des, npointside_p, xout_a, zout_a, nout_p, stat_p)

    nout = xi.intp_value(nout_p)
    stat = xi.intp_value(stat_p)
    if stat != 0:
        nout = 1
    xout = nout * [0]
    zout = nout * [0]
    for i in range(nout):
        xout[i] = xi.doublea_getitem(xout_a, i)
        zout[i] = xi.doublea_getitem(zout_a, i)

    xi.delete_intp(npointside_p)
    xi.delete_doublea(xout_a)
    xi.delete_doublea(zout_a)
    xi.delete_intp(nout_p)
    xi.delete_intp(stat_p)

    return xout, zout, nout, stat
예제 #20
0
def xfoil_get_current_airfoil(xdg, npoint):

    xout_a = xi.new_doublea(npoint)
    zout_a = xi.new_doublea(npoint)
    npoint_p = xi.copy_intp(npoint)
    stat_p = xi.new_intp()

    xi.xfoil_get_current_airfoil(xdg, xout_a, zout_a, npoint_p, stat_p)

    xout = npoint * [0]
    zout = npoint * [0]
    for i in range(npoint):
        xout[i] = xi.doublea_getitem(xout_a, i)
        zout[i] = xi.doublea_getitem(zout_a, i)
    stat = xi.intp_value(stat_p)

    xi.delete_doublea(xout_a)
    xi.delete_doublea(zout_a)
    xi.delete_intp(npoint_p)
    xi.delete_intp(stat_p)

    return xout, zout, stat
예제 #21
0
def xfoil_geometry_info(xdg):

    maxt_p = xi.new_doublep()
    xmaxt_p = xi.new_doublep()
    maxc_p = xi.new_doublep()
    xmaxc_p = xi.new_doublep()
    stat_p = xi.new_intp()

    xi.xfoil_geometry_info(xdg, maxt_p, xmaxt_p, maxc_p, xmaxc_p, stat_p)

    maxt = xi.doublep_value(maxt_p)
    xmaxt = xi.doublep_value(xmaxt_p)
    maxc = xi.doublep_value(maxc_p)
    xmaxc = xi.doublep_value(xmaxc_p)
    stat = xi.intp_value(stat_p)

    xi.delete_doublep(maxt_p)
    xi.delete_doublep(xmaxt_p)
    xi.delete_doublep(maxc_p)
    xi.delete_doublep(xmaxc_p)
    xi.delete_intp(stat_p)

    return maxt, xmaxt, maxc, xmaxc, stat
예제 #22
0
def xfoil_apply_flap_deflection(xdg, xflap, zflap, z_flap_spec, degrees):

    xflap_p = xi.copy_doublep(xflap)
    zflap_p = xi.copy_doublep(zflap)
    z_flap_spec_p = xi.copy_intp(z_flap_spec)
    degrees_p = xi.copy_doublep(degrees)
    npointout_p = xi.new_intp()
    stat_p = xi.new_intp()

    xi.xfoil_apply_flap_deflection(xdg, xflap_p, zflap_p, z_flap_spec_p,
                                   degrees_p, npointout_p, stat_p)

    npointout = xi.intp_value(npointout_p)
    stat = xi.intp_value(stat_p)

    xi.delete_doublep(xflap_p)
    xi.delete_doublep(zflap_p)
    xi.delete_intp(z_flap_spec_p)
    xi.delete_intp(npointout_p)
    xi.delete_intp(stat_p)

    return npointout, stat
예제 #23
0
def run_xfoil(npointin, xin, zin, geom_opts, noppoint, operating_points,
              op_modes, reynolds_numbers, mach_numbers, use_flap, x_flap,
              z_flap, z_flap_spec, flap_degrees, xfoil_opts, reinitialize,
              fix_unconverged):

    npointin_p = xi.copy_intp(npointin)
    xin_a = xi.new_doublea(npointin)
    zin_a = xi.new_doublea(npointin)
    noppoint_p = xi.copy_intp(noppoint)
    operating_points_a = xi.new_doublea(noppoint)
    op_modes_a = xi.new_inta(noppoint)
    reynolds_numbers_a = xi.new_doublea(noppoint)
    mach_numbers_a = xi.new_doublea(noppoint)
    use_flap_p = xi.copy_boolp(use_flap)
    if use_flap:
        x_flap_p = xi.copy_doublep(x_flap)
        z_flap_p = xi.copy_doublep(z_flap)
        z_flap_spec_p = xi.copy_intp(z_flap_spec)
    else:
        x_flap_p = xi.new_doublep()
        z_flap_p = xi.new_doublep()
        z_flap_spec_p = xi.new_intp()
    flap_degrees_a = xi.new_doublea(noppoint)
    reinitialize_p = xi.copy_boolp(reinitialize)
    fix_unconverged_p = xi.copy_boolp(fix_unconverged)
    lift_a = xi.new_doublea(noppoint)
    drag_a = xi.new_doublea(noppoint)
    moment_a = xi.new_doublea(noppoint)
    viscrms_a = xi.new_doublea(noppoint)
    alpha_a = xi.new_doublea(noppoint)
    xtrt_a = xi.new_doublea(noppoint)
    xtrb_a = xi.new_doublea(noppoint)
    stat_p = xi.new_intp()

    for i in range(npointin):
        xi.doublea_setitem(xin_a, i, xin[i])
        xi.doublea_setitem(zin_a, i, zin[i])
    for i in range(noppoint):
        xi.doublea_setitem(operating_points_a, i, operating_points[i])
        xi.inta_setitem(op_modes_a, i, op_modes[i])
        xi.doublea_setitem(reynolds_numbers_a, i, reynolds_numbers[i])
        xi.doublea_setitem(mach_numbers_a, i, mach_numbers[i])
        if use_flap:
            xi.doublea_setitem(flap_degrees_a, i, flap_degrees[i])

    xi.run_xfoil(npointin_p, xin_a, zin_a, geom_opts, noppoint_p,
                 operating_points_a, op_modes_a, reynolds_numbers_a,
                 mach_numbers_a, use_flap_p, x_flap_p, z_flap_p, z_flap_spec_p,
                 flap_degrees_a, xfoil_opts, reinitialize_p, fix_unconverged_p,
                 lift_a, drag_a, moment_a, viscrms_a, alpha_a, xtrt_a, xtrb_a,
                 stat_p)

    stat = xi.intp_value(stat_p)
    lift = noppoint * [0]
    drag = noppoint * [0]
    moment = noppoint * [0]
    viscrms = noppoint * [0]
    alpha = noppoint * [0]
    xtrt = noppoint * [0]
    xtrb = noppoint * [0]
    for i in range(noppoint):
        lift[i] = xi.doublea_getitem(lift_a, i)
        drag[i] = xi.doublea_getitem(drag_a, i)
        moment[i] = xi.doublea_getitem(moment_a, i)
        viscrms[i] = xi.doublea_getitem(viscrms_a, i)
        alpha[i] = xi.doublea_getitem(alpha_a, i)
        xtrt[i] = xi.doublea_getitem(xtrt_a, i)
        xtrb[i] = xi.doublea_getitem(xtrb_a, i)

    xi.delete_intp(npointin_p)
    xi.delete_doublea(xin_a)
    xi.delete_doublea(zin_a)
    xi.delete_intp(noppoint_p)
    xi.delete_doublea(operating_points_a)
    xi.delete_inta(op_modes_a)
    xi.delete_doublea(reynolds_numbers_a)
    xi.delete_doublea(mach_numbers_a)
    xi.delete_boolp(use_flap_p)
    xi.delete_doublep(x_flap_p)
    xi.delete_doublep(z_flap_p)
    xi.delete_intp(z_flap_spec_p)
    xi.delete_doublea(flap_degrees_a)
    xi.delete_doublea(lift_a)
    xi.delete_doublea(drag_a)
    xi.delete_doublea(moment_a)
    xi.delete_doublea(viscrms_a)
    xi.delete_doublea(alpha_a)
    xi.delete_doublea(xtrt_a)
    xi.delete_doublea(xtrb_a)
    xi.delete_intp(stat_p)

    return lift, drag, moment, viscrms, alpha, xtrt, xtrb, stat