TestData = [(7000 * RPM, 107.35 * IN * OZF, 0.75 * HP),
                (8500 * RPM, 104.24 * IN * OZF, 0.88 * HP),
                (9500 * RPM, 101.13 * IN * OZF, 0.95 * HP),
                (9700 * RPM, 98.02 * IN * OZF, 0.94 * HP),
                (10600 * RPM, 102.69 * IN * OZF, 1.08 * HP),
                (10800 * RPM, 98.02 * IN * OZF, 1.05 * HP),
                (11000 * RPM, 101.13 * IN * OZF, 1.1 * HP),
                (11200 * RPM, 99.57 * IN * OZF, 1.11 * HP),
                (11600 * RPM, 98.02 * IN * OZF, 1.13 * HP),
                (12900 * RPM, 93.35 * IN * OZF, 1.19 * HP),
                (13300 * RPM, 91.79 * IN * OZF, 1.21 * HP),
                (13600 * RPM, 91.79 * IN * OZF, 1.24 * HP),
                (14600 * RPM, 88.68 * IN * OZF, 1.28 * HP),
                (15600 * RPM, 79.35 * IN * OZF, 1.23 * HP),
                (16300 * RPM, 77.76 * IN * OZF, 1.26 * HP)]

    Engine.TestData = TestData
    Engine.PlotTestData()

    print "Static Thrust :", AsUnit(Propulsion.T(0 * FT / SEC), 'lbf')

    V = npy.linspace(0, 100, 30) * FT / SEC
    N = npy.linspace(1000, 20000, 30) * RPM
    #Propulsion.PlotMatched(V, fig = 2)
    V2 = npy.linspace(0, 100, 5) * FT / SEC
    Propulsion.PlotTPvsN(N, V2, fig=3)

    Propulsion.Draw(fig=4)

    pyl.show()
BoxWing.UpperWing.WingWeight.MainSpar.SparMat = CarbonBar.copy()
BoxWing.UpperWing.WingWeight.SkinMat = Monokote.copy()
BoxWing.UpperWing.WingWeight.WingMat = PinkFoam.copy()
BoxWing.UpperWing.WingWeight.WingMat.ForceDensity *= 0.5

BoxWing.EndPlate.SetWeightCalc(ACSolidWing)
BoxWing.EndPlate.WingWeight.AddSpar("MainSpar", 0.25 * IN, 0.125 * IN)
BoxWing.EndPlate.WingWeight.MainSpar.SparMat = CarbonBar.copy()
BoxWing.EndPlate.WingWeight.SkinMat = Monokote.copy()
BoxWing.EndPlate.WingWeight.WingMat = PinkFoam.copy()
BoxWing.EndPlate.WingWeight.WingMat.ForceDensity *= 0.4

if __name__ == '__main__':
    import pylab as pyl

    print "V lift of   : ", AsUnit(BoxWing.GetV_LO(), 'ft/s')
    print "V stall     : ", AsUnit(BoxWing.V_Stall, 'ft/s')
    print "Wing Area   : ", AsUnit(BoxWing.S, 'in**2')
    print "Wing Span   : ", AsUnit(BoxWing.b, 'ft')
    print "Wing AR     : ", BoxWing.AR
    print "Wing MAC    : ", AsUnit(BoxWing.MAC(), 'in')
    print "Wing Xac    : ", BoxWing.Xac()
    print "Wing dCM_da : ", BoxWing.dCM_da()
    print "Wing dCL_da : ", BoxWing.dCL_da()
    print "Lift of Load: ", AsUnit(BoxWing.Lift_LO, 'lbf')
    print "Wing BWFC   : ", BoxWing.BWCF()
    print
    print "Wing Thickness: ", BoxWing.LowerWing.Thickness(0 * FT)
    print "Wing Chord    : ", BoxWing.LowerWing.Chord(0 * FT)
    print "LowerWing Area: ", BoxWing.LowerWing.S
    print "UpperWing Area: ", BoxWing.UpperWing.S
MainGear.Wheel.Weight = 0.1 * LBF

NoseGear = Aircraft.NoseGear
NoseGear.StrutW = 0.1 * IN
NoseGear.StrutH = 0.1 * IN
NoseGear.WheelDiam = 2.5 * IN
NoseGear.Strut.Weight = 0.1 * LBF
NoseGear.Wheel.Weight = 0.1 * LBF

if __name__ == '__main__':

    #TCG = Aircraft.CG()
    ACG = Aircraft.Fuselage.AircraftCG()
    #dCG = TCG - ACG

    print 'Aircraft Xnp   :', AsUnit(Aircraft.Xnp(), 'in')
    print 'Aircraft Xcg   :', AsUnit(Aircraft.Xcg(), 'in')
    print 'Aircraft CM    :', Aircraft.CM(15 * ARCDEG, del_e=10 * ARCDEG)
    print 'Aircraft dCM_da:', AsUnit(Aircraft.dCM_da(), '1/rad')
    print
    print 'Wing Area      :', AsUnit(Aircraft.Wing.S, 'in**2')
    print 'Wing MAC       :', AsUnit(Aircraft.Wing.MAC(), 'in')
    print 'Wing dCl_da    :', AsUnit(Aircraft.Wing.dCL_da(), '1/rad')
    print 'Wing Xac       :', AsUnit(Aircraft.Wing.Xac(), 'in')
    print
    print 'Horiz Area     :', AsUnit(Aircraft.HTail.S, 'in**2')
    print 'Horiz Length   :', AsUnit(Aircraft.HTail.L, 'in')
    print 'Horiz iht      :', AsUnit(Aircraft.HTail.i, 'deg')
    print 'Horiz dCl_da   :', AsUnit(Aircraft.HTail.dCL_da(), '1/rad')
    print 'Horiz Design CL:', Aircraft.GetHT_Design_CL()
    print
                   (5000  *RPM, (8.2*Arm*OZF)),
                   (4560  *RPM, (6.5*Arm*OZF)),
                   (4000  *RPM, (4.7*Arm*OZF)),
                   (3525  *RPM, (3.4*Arm*OZF)),
                   # begin 2nd taking of torque data in closet
                   (5690  *RPM, (9.5*Arm2*OZF)),
                   (5018  *RPM, (7.1*Arm2*OZF)),
                   (4525  *RPM, (5.7*Arm2*OZF)),
                   (4118  *RPM, (4.8*Arm2*OZF))]

#==============================================================================#
# VISUALIZATION & RESULTS
#==============================================================================#
if __name__ == '__main__':
   
    print " D     : ", AsUnit( Prop.D, 'in')
    print " Pitch : ", AsUnit( Prop.Pitch, 'in')
    
    Vmax = 50
    h=0*FT
    N=npy.linspace(1000, 6800, 5)*RPM
    
    Alpha = npy.linspace(-25,25,41)*ARCDEG
    V     = npy.linspace(0,Vmax,30)*FT/SEC
    
    Prop.CoefPlot(Alpha,fig = 1)
    Prop.PTPlot(N,V,h,'V', fig = 2)

#    N = npy.linspace(0, 13000,31)*RPM
#    V = npy.linspace(0,Vmax,5)*FT/SEC
Motor.SpeedController.WeightGroup = 'Electronics'

Motor.WeightGroup = 'Propulsion'

#
# This data has been corrected for standard day
STD = STDCorrection(30.2 * inHg, (16.1 + 273.15) * K)
Arm = 19.5 * IN
#            RPM,        Torque     Current   Voltage
TestData = [(6030 * RPM, (7.3 * Arm * OZF) * STD, 32.0 * A, 22.8 * V),
            (5670 * RPM, (8.3 * Arm * OZF) * STD, 36.0 * A, 22.2 * V),
            (5430 * RPM, (9.3 * Arm * OZF) * STD, 39.5 * A, 21.5 * V),
            (5340 * RPM, (9.0 * Arm * OZF) * STD, 38.7 * A, 21.1 * V),
            (5370 * RPM, (8.3 * Arm * OZF) * STD, 35.3 * A, 20.9 * V)
            ]  #this is actual test data from a test stand

Motor.TestData = TestData

if __name__ == '__main__':
    import pylab as pyl

    print "V to Motor : ", AsUnit(Motor.Vmotor(Ib=3.75 * A), 'V')
    print "Efficiency : ", Motor.Efficiency(Ib=3.75 * A)
    print "Max efficiency : ", Motor.Effmax()
    print "Max efficiency current : ", AsUnit(Motor.I_Effmax(), 'A')
    print "Max efficiency RPM : ", AsUnit(Motor.N_Effmax(), 'rpm')

    Motor.PlotTestData()

    pyl.show()
Motor.xRm = 100000
Motor.Pz = 0.0

# This data has been corrected for standard day #SPH: confirm the methodology behind these calculations 151113
STD = STDCorrection(29.9 * inHg, (23.9 + 273.15) * K)
Arm = 19.5 * IN
# Test data from the test stand
#            RPM,      Torque              Current   Voltage
TestData = [(6200 * RPM, (7.5 * Arm * OZF) * STD, 34.8 * A, 23.0 * V),
            (5900 * RPM, (8.7 * Arm * OZF) * STD, 39.0 * A, 21.9 * V),
            (5600 * RPM, (9.9 * Arm * OZF) * STD, 44.2 * A, 21.5 * V),
            (6000 * RPM, (8.9 * Arm * OZF) * STD, 35.8 * A, 22.06 * V),
            (5800 * RPM, (11.1 * Arm * OZF) * STD, 45.2 * A, 21.9 * V)]

Motor.TestData = TestData

#==============================================================================#
# VISUALIZATION & RESULTS
#==============================================================================#
if __name__ == '__main__':

    print 'V to Motor       : ', AsUnit(Motor.Vmotor(Ib=45 * A), 'V')
    print 'Efficiency       : ', Motor.Efficiency(Ib=45 * A)
    print 'Max efficiency   : ', Motor.Effmax()
    print 'Max eff. current : ', AsUnit(Motor.I_Effmax(), 'A')
    print 'Max eff. RPM     : ', AsUnit(Motor.N_Effmax(), 'rpm')

    Motor.PlotTestData()

    pyl.show()