예제 #1
0
def run_test1():
    import aircraft_FW
    ac = aircraft_FW.load('X47B')
    print ac.designGoals.fuelMass
    print ac.get_mass_fuel()
    ac.get_mission_fuel()
    print ac.designGoals.fuelMass
    print ac.get_mass_fuel()
    #ac.display()
    slf =SteadyLevelFlight(ac)
    #alt = ac.designGoals.cruiseAltitude
    alt = 1e4

    print 'MAXIMUM SPEED'
    print slf.run_max_TAS(alt)
    print 'MINIMUM SPEED'
    print slf.run_min_TAS(alt)
    print 'MAXIMUM SAR'
    print slf.run_max_SAR(alt)
    print 'MINIMUM FUEL'
    print slf.run_min_fuel(alt)
    
    ac.mass.fuel.set_fuel_fraction(0.5)
    clm = ClimbDescent(ac)
    print 'MAXIMUM CLIMB RATE'
    print clm.run_max_climb_rate(0)
    print 'MOST ECONOMICAL CLIMB'
    print clm.run_most_economical_climb(0)
    print 'SERVICE CEILING'
    print clm.get_service_ceiling()
    print 'ABSOLUTE CEILING'
    print clm.get_absolute_ceiling()
예제 #2
0
def run_mission_B11(ac=None):
    """ maximum cruise range """
    if ac==None:
        ac = aircraft_FW.load('X45C')
    #ac.mass.payload.remove_item('drop payload')
    slf = Cruise(ac)
    clm = Climb(ac)

    # -- mission inputs --
    altField = 0.0
    altCruise = 1.0e4
    timeReserve = 1800.0 # 30min

    Wf0 = ac.mass.fuel.mass
    # -- assumptions --
    fuelReserveStart = 0.1*Wf0
    
    # climb
    
    climb1 = clm.run_climb(altField, altCruise,Wf0)
    #climb1.display('Climb 1')

    # reserve fuel
    reserve = slf.run_maximum_endurance_fuel(altField,fuelReserveStart,timeReserve)
    #reserve.display('Reserve')
    WfReserve = reserve.fuelBurned + 0.05*Wf0
    
    # cruise
    Wfcrs = Wf0 - climb1.fuelBurned
    cruise = slf.run_maximum_range(altCruise,Wfcrs,WfReserve)
    #cruise.display('Cruise')
    
    Range = climb1.distance + cruise.distance
    #print Range/1e3
    return Range
예제 #3
0
def create_input_files2():
    import aircraft_FW
    ac = aircraft_FW.load('aeroValidation',False)
    name = 'aeroValidation'
    CG = [0.2,0,0]

    yplus = .5
    wdir = 'D:\sync_Maxim'
    alpha = [0,2,4,8,12]

    niter = 5000
    
    batFile = 'run_cfd_batch2.bat'
    pathFluent = r'C:\Program Files\Ansys Inc\v130\fluent\ntbin\win64\fluent.exe'
    
    igsPath = '%s.igs'%name
    symCasPath = '%s_sym.cas'%name
    nonsymCasPath = '%s_half.cas'%name
    glfPath = '%s.glf'%name
    
    create_fw_cmesh(ac,igsPath,symCasPath,nonsymCasPath,yplus,glfPath)
    Sref = ac.wing.area/2.0
    Cref = ac.wing.MAC
    
    fid = open(batFile,'wt')
    for a in alpha:
        outPrefix = '%s\\results\\%s_half_a%d'%(wdir,name,a*100)
        journalFileRel = '%s_half_a%d.jou'%(name, a*100)
        journalFile = '%s_half_a%d.jou'%(name, a*100)
        run_wing_half(nonsymCasPath, outPrefix, ac.designGoals.fc, a, 0, 
                      Sref, Cref, CG, journalFile,niter)
        fid.write('\"%s\" 3ddp -t8 -i %s -wait\n'%(pathFluent, journalFileRel))
    fid.close()
예제 #4
0
def climb_test():
    import aircraft_FW
    ac = aircraft_FW.load('X47B')
    clm = Climb(ac)
    results = clm.run_climb2(0,1e4,0.3,0.7)
    results.display()
    results2 = clm.run_climb(0,1e4)
    results2.display()
예제 #5
0
def run_test1():
    ac = aircraft_FW.load('X45C')
    #bi = BasicInput(ac)
    fm = FlightMechanics(ac)
    print fm.get_Vstall()
    print fm.get_EAS(100.,1.0)
    print fm.get_LDmax()
    print fm.get_V_LDmax()
    print fm.get_required_thrust(100,1e4)
예제 #6
0
def run_test1():
    import aircraft_FW
    ac = aircraft_FW.load('Baseline1')
    print ac.get_mission_fuel()
    to = Takeoff(ac,0)
    print to.analyze()

    ldg = Landing(ac,0)
    print ldg.analyze()
예제 #7
0
def run_test1():
    import aircraft_FW as aircraft
    ac = aircraft.load('Baseline1')

    aero = Aerodynamics(ac)
    fc = FlightConditionsAVL(ac,0.5,1e4)
    #results = aero.run_trim(fc)
    #results.display()
    
    results2 = aero.run_single_point(fc,0.0,2.0)
    results2.display()
예제 #8
0
def run_test2():
    import matplotlib.pyplot as plt
    import numpy as np
    ac = aircraft_FW.load('X45C')
    #bi = BasicInput(ac)
    fm = FlightMechanics(ac)
    V = np.linspace(100,400,50)
    Treq = np.array([fm.get_required_thrust(v,10000)/1e3 for v in V])
    plt.figure()
    plt.plot(V,Treq)
    plt.show()    
예제 #9
0
def run_mission_B15(ac=None):
    """ air assault mission """
    if ac==None:
        import aircraft_FW
        ac = aircraft_FW.load('X45C')
    #ac.display()
    # -- mission inputs --
    altField = 0.0
    altCruise = 1.0e4
    altAttack = convert.ft_to_m(2000)
    distAttack = convert.nm_to_m(200)
    timeReserve = 1800.0 # 30min
    speedMaxAttack = convert.kt_to_msec(360)
    
    Wf0 = ac.mass.fuel.mass
    # -- assumptions --
    fuelReserveStart = 0.1*Wf0
    fuelAttackStart = 0.5*Wf0
    
    # -- calculations --
    slf = Cruise(ac)
    clm = Climb(ac)
    
    # reserve fuel
    reserve = slf.run_maximum_endurance_fuel(altField,fuelReserveStart,timeReserve)
    WfReserve = reserve.fuelBurned + 0.05*Wf0

    # climb 1
    climb1 = clm.run_climb(altField, altCruise,Wf0)

    # penetration-withdrawal
    penetration = slf.run_distance_at_speed(altAttack,speedMaxAttack,distAttack,fuelAttackStart)

    slf.drop_payload()
    withdrawal = slf.run_distance_at_speed(altAttack,speedMaxAttack,distAttack,penetration.fuelEnd)

    # climb 2
    #clm.drop_payload()
    climb2 = clm.run_climb(altAttack,altCruise,withdrawal.fuelEnd)

    # maximum range
    Wfcrs = Wf0 - climb1.fuelBurned - penetration.fuelBurned - withdrawal.fuelBurned
    Wfcrs += - climb2.fuelBurned
    
    cruise = slf.run_maximum_range(altCruise,Wfcrs,WfReserve)

    # operational range
    operRange = climb1.distance + cruise.distance + penetration.distance
    operRange += withdrawal.distance + climb2.distance
    operRange *= 0.5
    return operRange
예제 #10
0
def run_integrated_analysis(name=None, outputFile=None,detailedReport=True):
    if name==None:
        name = 'X47B'
        #name = str(raw_input('Enter aircraft name:\n'))
    if outputFile==None:
        outputFile = 'analysisReport_detailed.txt'
        #outputFile = str(raw_input('Enter output report textfile name:\n'))
    
    # initialize aircraft and report output
    report = db_tools.TextReport()
    report.write_line('%s aircraft integrated analysis output'%name)
    report.write_Header(str(datetime.datetime.now()))
    report.write_newline(2)

    ac = aircraft_FW.load(name)

    # mission fuel
    report.write_header_in_quotes('mission fuel')
    reportMis = get_mission_analysis_report(ac)
    report.write(reportMis)
    report.write_newline(2)

    # weight and balance
    report.write_header_in_quotes('weight and balance')
    reportWB = get_weight_report(ac,detailedReport)
    report.write(reportWB)
    report.write_newline(2)
    
    report.write_header_in_quotes('stability and control')
    reportSnC = get_stability_report(ac)
    report.write(reportSnC)
    report.write_newline(2)
    
    report.write_header_in_quotes('performance')
    reportPerf  = get_performance_report(ac,detailedReport)
    reportPerf2 = get_max_range(ac)
    reportPerf3 = get_max_endurance(ac)

    report.write(reportPerf)
    report.write('\nMISSION PERFORMANCE\n'+'='*40+'\n')
    report.write(reportPerf2)
    report.write(reportPerf3)
    
    report.write('\nFIELD PERFORMANCE\n'+'='*40+'\n')
    reportField = field_performance_analysis(ac,detailedReport)
    report.write(reportField)
    
    report.save_to_file(outputFile,'wt')

    display_text_contents(outputFile)
예제 #11
0
def run_test1():
    import aircraft_FW
    ac = aircraft_FW.load('X47B')
    ac.set_drag_method(0)
    #ac.display()
    slf =SteadyLevelFlight(ac)
    #alt = ac.designGoals.cruiseAltitude
    alt = 10000.

    print 'MAXIMUM SPEED'
    print slf.run_max_TAS(alt)
    print 'MINIMUM SPEED'
    print slf.run_min_TAS(alt)
    print 'MAXIMUM SAR'
    print slf.run_max_SAR(alt)
    print 'MINIMUM FUEL'
    print slf.run_min_fuel(alt)

    clm = ClimbDescent(ac)
    print 'MAXIMUM CLIMB RATE'
    print clm.run_max_climb_rate(0)
    print 'ECONOMICAL CLIMB'
    print clm.run_most_economical_climb(0)
예제 #12
0
def run_test1():
    import aircraft_FW
    ac = aircraft_FW.load('Baseline1')
    print get_parasite_drag_fw(ac)
예제 #13
0
    # penetration-withdrawal
    penetration = slf.run_distance_at_speed(altAttack,speedMaxAttack,distAttack,fuelAttackStart)

    slf.drop_payload()
    withdrawal = slf.run_distance_at_speed(altAttack,speedMaxAttack,distAttack,penetration.fuelEnd)

    # climb 2
    #clm.drop_payload()
    climb2 = clm.run_climb(altAttack,altCruise,withdrawal.fuelEnd)

    # maximum range
    Wfcrs = Wf0 - climb1.fuelBurned - penetration.fuelBurned - withdrawal.fuelBurned
    Wfcrs += - climb2.fuelBurned
    
    cruise = slf.run_maximum_range(altCruise,Wfcrs,WfReserve)

    # operational range
    operRange = climb1.distance + cruise.distance + penetration.distance
    operRange += withdrawal.distance + climb2.distance
    operRange *= 0.5
    return operRange


if __name__=="__main__":
    name = 'X45C'
    ac = aircraft_FW.load(name)
    print run_mission_B15(ac)/1e3
    ac = aircraft_FW.load(name)
    print run_mission_B11(ac)/1e3
    ac = aircraft_FW.load(name)
    print run_mission_B10(ac)/1e3
예제 #14
0
            return 0.0


    def set_flight_conditions(self,velocity,altitude):
        """
        setting flight conditions to be analyzed. Flight conditions are calculated
         using FlightConditions module. Reynolds number is calculated using ref 
        length 1.0 that is stored in self.Re1
        """
        self.fc = FlightConditions(velocity,altitude)
        self.Re1 = self.fc.Re # Re for L=1

if __name__=="__main__":
    import aircraft_FW
    import matplotlib.pyplot as plt
    ac = aircraft_FW.load('X45C')
    wd = WaveDrag(ac.wing)
    fd = Friction(ac.wing.area)
    M = np.arange(0.1,1.01,0.01)
    cd = np.zeros(len(M))
    for i,mach in enumerate(M):
        fd.set_flight_conditions(mach,10000)
        item = fd.analyze_wing(ac.wing,'main wing')
        cdf = item.CDtotal
        cdw = wd.analyze_wing(mach)
        cd[i] = cdw + cdf
        #print '%.4f\t%.6f\t%.6f'%(mach,cdw,cdf)
    plt.figure(1)
    plt.grid(True)
    plt.plot(M,cd,'b-')
    plt.xlabel('Mach')
예제 #15
0
    print ac.get_mass_fuel()
    #ac.display()
    slf =SteadyLevelFlight(ac)
    #alt = ac.designGoals.cruiseAltitude
    alt = 1e4

    print 'MAXIMUM SPEED'
    print slf.run_max_TAS(alt)
    print 'MINIMUM SPEED'
    print slf.run_min_TAS(alt)
    print 'MAXIMUM SAR'
    print slf.run_max_SAR(alt)
    print 'MINIMUM FUEL'
    print slf.run_min_fuel(alt)
    
    ac.mass.fuel.set_fuel_fraction(0.5)
    clm = ClimbDescent(ac)
    print 'MAXIMUM CLIMB RATE'
    print clm.run_max_climb_rate(0)
    print 'MOST ECONOMICAL CLIMB'
    print clm.run_most_economical_climb(0)
    print 'SERVICE CEILING'
    print clm.get_service_ceiling()
    print 'ABSOLUTE CEILING'
    print clm.get_absolute_ceiling()


if __name__=="__main__":
    import aircraft_FW
    ac = aircraft_FW.load('X47B')
    point_performance_analysis(ac,0.0, None)
예제 #16
0
def run_test1():
    import aircraft_FW
    ac = aircraft_FW.load('X47B')
    print run_mission_B11(ac)/1e3
예제 #17
0
def create_wing_db(ac=None, glfPath=None):
    if ac==None:
        ac = aircraft_FW.load('Baseline1')
    if glfPath==None:
        glfPath='tmp_glf1.glf'
    def get_section_data(wing, idx):
        ptsUp = wing.airfoils[idx].ptsUp
        ptsLo = wing.airfoils[idx].ptsLo
        apex = wing.secApex[idx]
        chord = wing.chords[idx]
        angle = wing.secAngles[idx]
        return ptsUp, ptsLo, apex, chord, angle

    def write_curve(fid1, nConnect, pts, apex, chord, angle, rotAxis=0.25, rev=False):
        if rev:
            pts = np.flipud(pts)
        apex = np.array([apex[0],apex[2],apex[1]])
        pts = rotate_2d(pts, [rotAxis,0], angle) *chord
        pts = np.hstack([pts,np.zeros([len(pts),1])])
        pts += apex
        for pt in pts:
            fid1.write('  $_TMP(PW_%d) addPoint {%.10f %.10f %.10f}\n'%(nConnect,pt[0], pt[1], pt[2]))
        

    fid = open(glfPath,'wt')
    fid.write('# Pointwise automation by Maxim Tyan 2014\n')
    fid.write('package require PWI_Glyph 2.17.2\n')
    
    fid.write('pw::Application setUndoMaximumLevels 5\n')
    fid.write('pw::Application reset\n')
    fid.write('pw::Application markUndoLevel {Journal Reset}\n')
    
    fid.write('pw::Application clearModified\n')
    
    fid.write('set _TMP(mode_1) [pw::Application begin Create]\n')
    fid.write('  set _TMP(PW_1) [pw::SegmentSpline create]\n')
    # 1st segment
    ptsUp, ptsLo, apex, chord, angle = get_section_data(ac.wing, 0)
    write_curve(fid, 1, ptsUp, apex, chord, angle,rev=True)
    fid.write('  $_TMP(PW_1) setSlope Akima\n')
    fid.write('  set _TMP(curve_1) [pw::Curve create]\n')
    fid.write('  $_TMP(curve_1) addSegment $_TMP(PW_1)\n')
    fid.write('  unset _TMP(PW_1)\n')
    fid.write('$_TMP(mode_1) end\n')
    fid.write('unset _TMP(mode_1)\n')
    fid.write('pw::Application markUndoLevel {Create Curve}\n')
    
    fid.write('unset _TMP(curve_1)\n')
    fid.write('set _TMP(mode_2) [pw::Application begin Create]\n')
    fid.write('  set _TMP(PW_2) [pw::SegmentSpline create]\n')
    fid.write('  set _DB(1) [pw::DatabaseEntity getByName "curve-1"]\n')
    fid.write('  $_TMP(PW_2) addPoint [list 1 0 $_DB(1)]\n')
    write_curve(fid, 2, ptsLo[1:-1], apex, chord, angle)
    fid.write(' $_TMP(PW_2) addPoint [list 0 0 $_DB(1)]\n')
    fid.write('  $_TMP(PW_2) setSlope Akima\n')
    fid.write('  set _TMP(curve_1) [pw::Curve create]\n')
    fid.write('  $_TMP(curve_1) addSegment $_TMP(PW_2)\n')
    fid.write('  unset _TMP(PW_2)\n')
    fid.write('$_TMP(mode_2) end\n')
    fid.write('unset _TMP(mode_2)\n')
    fid.write('pw::Application markUndoLevel {Create Curve}\n')
    # 2nd segment
    fid.write('unset _TMP(curve_1)\n')
    fid.write('set _TMP(mode_3) [pw::Application begin Create]\n')
    fid.write('  set _TMP(PW_3) [pw::SegmentSpline create]\n')
    ptsUp, ptsLo, apex, chord, angle = get_section_data(ac.wing, 1)
    write_curve(fid, 3, ptsUp, apex, chord, angle)
    fid.write('  $_TMP(PW_3) setSlope Akima\n')
    fid.write('  set _TMP(curve_1) [pw::Curve create]\n')
    fid.write('  $_TMP(curve_1) addSegment $_TMP(PW_3)\n')
    fid.write('  unset _TMP(PW_3)\n')
    fid.write('$_TMP(mode_3) end\n')
    fid.write('unset _TMP(mode_3)\n')
    fid.write('pw::Application markUndoLevel {Create Curve}\n')
    
    fid.write('unset _TMP(curve_1)\n')
    fid.write('set _TMP(mode_4) [pw::Application begin Create]\n')
    fid.write('  set _TMP(PW_4) [pw::SegmentSpline create]\n')
    fid.write('  set _DB(2) [pw::DatabaseEntity getByName "curve-3"]\n')
    fid.write('  $_TMP(PW_4) addPoint [list 0 0 $_DB(2)]\n')
    write_curve(fid, 4, ptsLo[1:-1], apex, chord, angle)
    
    fid.write('  $_TMP(PW_4) addPoint [list 1 0 $_DB(2)]\n')
    fid.write('  $_TMP(PW_4) setSlope Akima\n')
    fid.write('  set _TMP(curve_1) [pw::Curve create]\n')
    fid.write('  $_TMP(curve_1) addSegment $_TMP(PW_4)\n')
    fid.write('  unset _TMP(PW_4)\n')
    fid.write('$_TMP(mode_4) end\n')
    fid.write('unset _TMP(mode_4)\n')
    fid.write('pw::Application markUndoLevel {Create Curve}\n')
    
    fid.write('unset _TMP(curve_1)\n')
    fid.write(' set _TMP(mode_5) [pw::Application begin Create]\n')
    fid.write('  set _TMP(PW_5) [pw::SegmentSpline create]\n')
    # tip
    ptsUp, ptsLo, apex, chord, angle = get_section_data(ac.wing, 2)
    write_curve(fid, 5, ptsUp, apex, chord, angle)

    fid.write('  $_TMP(PW_5) setSlope Akima\n')
    fid.write('  set _TMP(curve_1) [pw::Curve create]\n')
    fid.write('  $_TMP(curve_1) addSegment $_TMP(PW_5)\n')
    fid.write('  unset _TMP(PW_5)\n')
    fid.write('$_TMP(mode_5) end\n')
    fid.write('unset _TMP(mode_5)\n')
    fid.write('pw::Application markUndoLevel {Create Curve}\n')
    
    fid.write('unset _TMP(curve_1)\n')
    fid.write('set _TMP(mode_6) [pw::Application begin Create]\n')
    fid.write('  set _TMP(PW_6) [pw::SegmentSpline create]\n')
    fid.write('  set _DB(3) [pw::DatabaseEntity getByName "curve-5"]\n')
    fid.write('  $_TMP(PW_6) addPoint [list 1 0 $_DB(3)]\n')
    write_curve(fid, 6, ptsLo[1:-1], apex, chord, angle,rev=True)
    fid.write('$_TMP(PW_6) addPoint [list 0 0 $_DB(3)]\n')
    fid.write('$_TMP(PW_6) setSlope Akima\n')
    fid.write('set _TMP(curve_1) [pw::Curve create]\n')
    fid.write('$_TMP(curve_1) addSegment $_TMP(PW_6)\n')
    fid.write('unset _TMP(PW_6)\n')
    fid.write('$_TMP(mode_6) end\n')
    fid.write('unset _TMP(mode_6)\n')
    fid.write('pw::Application markUndoLevel {Create Curve}\n')
    
    fid2 = open('./templates/fw_db_automation_surface.txt','rt')
    for line in fid2:
        fid.write(line)
    fid2.close()
    fid.close()
예제 #18
0
def create_fw_cmesh(ac=None,igsPath=None,casPathSym=None, casPathNonsym=None, yplus=.5,
                    glfPath=None):
    if ac==None:
        ac = aircraft_FW.load('Baseline1')
    if igsPath==None:
        igsPath = r'E:/1. Current work/2014 - UAV performance code/CFD automation/fw3.igs'
    if casPathSym==None:
        casPathSym = 'fw_case_sym.cas'
    if casPathNonsym==None:
        casPathNonsym = 'fw_case_nonsym.cas'
    if glfPath==None:
        glfPath='dbg_cmesh.glf'
    
    create_wing_db(ac,glfPath)

    fid = open('./templates/fw_automation.glf')
    lines = fid.readlines()
    fid.close()
    #print ac.get_cg()

    nWallChord = 65
    nWallSeg1  = 30
    nWallSeg2  = 31
    nWallTip   = 8
    nFFx = 46
    nFFy = 75
    nFFz = 46
    
    #yplus = 0.5
    dsLE = 2e-3

    dsFFy = 1e-3
    dsTopAft = 1e-2
    dsTopFront = 1e-2
    dsZ = 1e-3
    
    # igs input file
    
    #lines[14] = '  $_TMP(mode_1) initialize -type Automatic {%s}\n'%igsPath
    # wing tip
    tc = ac.wing.airfoils[-1].thickness
    tc *= ac.wing.chords[-1] / 2.
    sweep = ac.wing.segSweepLErad[-1] + np.radians(5)
    pt1offset = np.array([tc*np.tan(sweep), 0, tc])
    pt2offset = np.array([0, 0, tc])
    
    create_wing_db(ac,glfPath)
    
    dl = 34
    lines[40-dl] = '  $_TMP(PW_2) addPoint [pwu::Vector3 add [pw::Application getXYZ [$_CN(1) getPosition -arc 0]] {%.6f %.6f %.6f}]\n'%(pt1offset[0], pt1offset[1],pt1offset[2])
    lines[53-dl] = '  $_TMP(PW_3) addPoint [pwu::Vector3 add [pw::Application getXYZ [$_CN(1) getPosition -arc 1]] {%.6f %.6f %.6f}]\n'%(pt2offset[0], pt2offset[1],pt2offset[2])
    
    # ff aft
    span = ac.wing.span + tc
    lines[186-dl] = '  $_TMP(PW_13) addPoint [pwu::Vector3 add [$_CN(11) getPosition -arc 1] {0 0 %.6f}]\n'%span
    lines[198-dl] = '  $_TMP(PW_14) addPoint [pwu::Vector3 add [$_CN(13) getPosition -arc 1] {0 0 %.6f}]\n'%span
    lines[211-dl] = '  $_TMP(PW_15) addPoint [pwu::Vector3 add [$_CN(12) getPosition -arc 1] {0 0 %.6f}]\n'%span
    
    # number of points
    lines[380-dl] = '$_TMP(PW_28) do setDimension %d\n'%nWallChord
    lines[387-dl] = '$_TMP(PW_29) do setDimension %d\n'%nWallSeg1
    lines[394-dl] = '$_TMP(PW_30) do setDimension %d\n'%nWallSeg2
    lines[401-dl] = '$_TMP(PW_31) do setDimension %d\n'%nWallTip
    lines[408-dl] = '$_TMP(PW_32) do setDimension %d\n'%(nWallSeg1+nWallSeg2+nWallTip-2)
    
    lines[416-dl] = '$_TMP(PW_33) do setDimension %d\n'%nFFx
    lines[424-dl] = '$_TMP(PW_34) do setDimension %d\n'%nFFy
    lines[432-dl] = '$_TMP(PW_35) do setDimension %d\n'%nFFz
    lines[439-dl] = '$_TMP(PW_36) do setDimension %d\n'%(2*nWallChord-1)
    lines[446-dl] = '$_TMP(PW_37) do setDimension %d\n'%nFFz
    # wall spacing BL
    ds1 = ac.designGoals.fc.get_wall_spacing(yplus)
    cr = ac.wing.chords[0]
    ct = ac.wing.chords[-1]
    
    #FIXME: high taper ratio caused negative jacobean, so it is decided
    # temporarily assume yplus at MAC for all wing
    cr = ac.wing.MAC
    ct = ac.wing.MAC
    lines[453-dl] = '  $_TMP(PW_38) setBeginSpacing %.6e\n'%(ds1*cr)
    lines[456-dl] = '  $_TMP(PW_39) setBeginSpacing %.6e\n'%(ds1*cr)
    lines[464-dl] = '  $_TMP(PW_40) setBeginSpacing %.6e\n'%(ds1*ct)
    lines[467-dl] = '  $_TMP(PW_41) setBeginSpacing %.6e\n'%(ds1*ct)

    # leading/trailing edge spacing
    c2 = ac.wing.chords[1]
    dsLEr = dsLE*cr
    dsLE2 = dsLE*c2
    dsLEt = dsLE*ct
    
    lines[551-dl] = '  $_TMP(PW_59) setBeginSpacing %.10f\n'%(dsLEr)
    lines[554-dl] = '  $_TMP(PW_60) setEndSpacing %.10f\n'%(dsLEr)
    lines[557-dl] = '  $_TMP(PW_61) setBeginSpacing %.10f\n'%(dsLEr)
    lines[560-dl] = '  $_TMP(PW_62) setEndSpacing %.10f\n'%(dsLEr)
    
    lines[568-dl] = '  $_TMP(PW_63) setBeginSpacing %.10f\n'%(dsLE2)
    lines[571-dl] = '  $_TMP(PW_64) setEndSpacing %.10f\n'%(dsLE2)
    lines[574-dl] = '  $_TMP(PW_65) setBeginSpacing %.10f\n'%(dsLE2)
    lines[577-dl] = '  $_TMP(PW_66) setEndSpacing %.10f\n'%(dsLE2)
    
    lines[585-dl] = '  $_TMP(PW_67) setBeginSpacing %.10f\n'%(dsLEt)
    lines[588-dl] = '  $_TMP(PW_68) setEndSpacing %.10f\n'%(dsLEt)
    lines[591-dl] = '  $_TMP(PW_69) setBeginSpacing %.10f\n'%(dsLEt)
    lines[594-dl] = '  $_TMP(PW_70) setEndSpacing %.10f\n'%(dsLEt)
    lines[597-dl] = '  $_TMP(PW_71) setBeginSpacing %.10f\n'%(dsLEt)
    lines[600-dl] = '  $_TMP(PW_72) setEndSpacing %.10f\n'%(dsLEt)
    lines[608-dl] = '  $_TMP(PW_73) setEndSpacing %.10f\n'%(dsLEt)

    # case file export
    lines[1089] = '  $_TMP(mode_1) initialize -type CAE {%s}\n'%casPathNonsym
    lines[1113] = '  $_TMP(mode_4) initialize -type CAE {%s}\n'%casPathSym

    #glfPath = os.path.abspath('temp/new.glf')
    fid = open(glfPath,'at')
    for line in lines:
        fid.write(line)
    fid.close()
    #print glfPath
    os.system('\"%s\"'%glfPath)