print('==================== find the run-ways ==================== ') runWaysDB = RunWayDataBase() if runWaysDB.read(): print('runways DB correctly read') else: raise ValueError('runways not read correctly') print('==================== find the run-ways ==================== ') for arrivalRunway in runWaysDB.getRunWays(): print('==================== run-way ==================== ') print(arrivalRunway) airportIcaoCode = arrivalRunway.getAirportICAOcode() airport = airportsDb.getAirportFromICAOCode(airportIcaoCode) print('==================== airport ==================== ') print(airport) climbRamp = ClimbRamp(runway=arrivalRunway, aircraft=acA320, departureAirport=airport) climbRamp.buildClimbRamp() climbRamp.createXlsxOutputFile() descentSlope = DescentGlideSlope(runway=arrivalRunway, aircraft=acA320, arrivalAirport=airport) descentSlope.buildGlideSlope() descentSlope.createXlsxOutputFile()
aircraft.initStateVector( elapsedTimeSeconds=elapsedTimeSeconds, trueAirSpeedMetersSecond=tasMetersPerSecond, altitudeMeanSeaLevelMeters=firstGlideSlopeWayPoint. getAltitudeMeanSeaLevelMeters(), deltaDistanceFlownMeters=0.0) aircraft.setApproachConfiguration(0.0) aircraftMassKilograms = 49000.0 aircraft.setAircraftMassKilograms(aircraftMassKilograms) print( '===================== final 3 degrees descending glide slope ================' ) descentGlideSlope = DescentGlideSlope(runway=arrivalRunway, aircraft=aircraft, arrivalAirport=arrivalAirport, descentGlideSlopeDegrees=3.0) descentGlideSlope.buildGlideSlope(elapsedTimeSeconds=0.0, initialWayPoint=firstGlideSlopeWayPoint, flownDistanceMeters=300000.0, distanceStillToFlyMeters=10000.0) print('================= create output files =========================') descentGlideSlope.createXlsxOutputFile() descentGlideSlope.createKmlOutputFile() aircraft.createStateVectorOutputFile() print('===================== end of simulation ================')
departureAirportIcaoCode, 'TakeOff', aircraft.WakeTurbulenceCategory) print(departureRunway) print('==================== arrival run-way ==================== ' + time.strftime("%c")) arrivalRunway = runWaysDatabase.getFilteredRunWays( arrivalAirportIcaoCode, 'Landing', aircraft.WakeTurbulenceCategory) print(arrivalRunway) print( "=========== Three Degrees Descent GlideSlope constructor =========== " + time.strftime("%c")) threeDegreesDescentGlideSlope = DescentGlideSlope(arrivalRunway, aircraft, arrivalAirport) threeDegreesDescentGlideSlope.buildGlideSlope() finalVertex = threeDegreesDescentGlideSlope.getVertex( threeDegreesDescentGlideSlope.getNumberOfVertices() - 1) finalArrivalDescentSlopeWayPoint = finalVertex.getWeight() print(finalArrivalDescentSlopeWayPoint) initialVertex = threeDegreesDescentGlideSlope.getVertex(0) initialArrivalDescentSlopeWayPoint = initialVertex.getWeight() print("=========== initial Arrival Descent Slope Way Point =========== " + time.strftime("%c")) print('altitude of initial arrival Descent Slope Way Point= ' + str( initialArrivalDescentSlopeWayPoint.getAltitudeMeanSeaLevelMeters()) + ' meters')
def buildArrivalPhase(self, initialHeadingDegrees): print( self.className + ': initial heading= {0:.2f} degrees'.format(initialHeadingDegrees)) print(self.className + '==================== add last turn ==================== ') if self.isDomestic() or self.isInBound(): endOfLastGreatCircleWayPoint = self.finalRoute.getLastVertex( ).getWeight() finalHeadingDegrees = self.arrivalRunway.getTrueHeadingDegrees() finalHeadingDegrees = math.fmod(finalHeadingDegrees + 180.0, 360.0) print(self.className + ': runway final heading= {0:.2f} degrees'.format( finalHeadingDegrees)) turnLeg = TurnLeg( initialWayPoint=endOfLastGreatCircleWayPoint, #finalWayPoint = self.firstGlideSlopeWayPoint, finalWayPoint=self.touchDownWayPoint, initialHeadingDegrees=initialHeadingDegrees, aircraft=self.aircraft, reverse=False) distanceStillToFlyMeters = self.flightLengthMeters - self.finalRoute.getLengthMeters( ) distanceToLastFixMeters = self.computeDistanceToLastFixMeters( currentPosition=endOfLastGreatCircleWayPoint, fixListIndex=self.flightListIndex) distanceToLastFixMeters = distanceStillToFlyMeters ''' for the last turn => final heading towards the runway orientation ''' deltaTimeSeconds = 0.1 turnLeg.buildTurnLeg( deltaTimeSeconds=deltaTimeSeconds, elapsedTimeSeconds=endOfLastGreatCircleWayPoint. getElapsedTimeSeconds(), distanceStillToFlyMeters=distanceStillToFlyMeters, distanceToLastFixMeters=distanceToLastFixMeters, finalHeadingDegrees=finalHeadingDegrees, lastTurn=True, bankAngleDegrees=5.0, arrivalRunway=self.arrivalRunway) self.finalRoute.addGraph(turnLeg) endOfTurnLegWayPoint = self.finalRoute.getLastVertex().getWeight() ''' ============= use touch-down way-point to compute distance to fly =============''' distanceStillToFlyMeters = endOfTurnLegWayPoint.getDistanceMetersTo( self.touchDownWayPoint) print(self.className + ': distance still to fly= {0:.2f} nautics'.format( distanceStillToFlyMeters * Meter2NauticalMiles)) #print '==================== add descent slope ================= ' descentGlideSlope = DescentGlideSlope( runway=self.arrivalRunway, aircraft=self.aircraft, arrivalAirport=self.arrivalAirport, descentGlideSlopeDegrees=3.0) flownDistanceMeters = self.finalRoute.getLengthMeters() distanceStillToFlyMeters = self.flightLengthMeters - self.finalRoute.getLengthMeters( ) distanceToLastFixMeters = self.computeDistanceToLastFixMeters( currentPosition=endOfTurnLegWayPoint, fixListIndex=self.flightListIndex) distanceToLastFixMeters = distanceStillToFlyMeters descentGlideSlope.buildGlideSlope( deltaTimeSeconds=self.deltaTimeSeconds, elapsedTimeSeconds=endOfTurnLegWayPoint.getElapsedTimeSeconds( ), initialWayPoint=endOfTurnLegWayPoint, flownDistanceMeters=flownDistanceMeters, distanceStillToFlyMeters=distanceStillToFlyMeters, distanceToLastFixMeters=distanceToLastFixMeters) self.finalRoute.addGraph(descentGlideSlope) endOfDescentGlideSlope = self.finalRoute.getLastVertex().getWeight( ) #print '================= add arrival ground run ================' arrivalGroundRun = GroundRunLeg(runway=self.arrivalRunway, aircraft=self.aircraft, airport=self.arrivalAirport) arrivalGroundRun.buildArrivalGroundRun( deltaTimeSeconds=self.deltaTimeSeconds, elapsedTimeSeconds=endOfDescentGlideSlope. getElapsedTimeSeconds(), initialWayPoint=endOfDescentGlideSlope) self.finalRoute.addGraph(arrivalGroundRun)
def buildArrivalPhase(self, initialHeadingDegrees): print self.className + "==================== add last turn ==================== " if self.isDomestic() or self.isInBound(): endOfLastGreatCircleWayPoint = self.finalRoute.getLastVertex().getWeight() finalHeadingDegrees = self.arrivalRunway.getTrueHeadingDegrees() finalHeadingDegrees = math.fmod(finalHeadingDegrees + 180.0, 360.0) print self.className + ": runway final heading= {0:.2f} degrees".format(finalHeadingDegrees) turnLeg = TurnLeg( initialWayPoint=endOfLastGreatCircleWayPoint, # finalWayPoint = self.firstGlideSlopeWayPoint, finalWayPoint=self.touchDownWayPoint, initialHeadingDegrees=initialHeadingDegrees, aircraft=self.aircraft, reverse=False, ) distanceStillToFlyMeters = self.flightLengthMeters - self.finalRoute.getLengthMeters() distanceToLastFixMeters = self.computeDistanceToLastFixMeters( currentPosition=endOfLastGreatCircleWayPoint, fixListIndex=self.flightListIndex ) distanceToLastFixMeters = distanceStillToFlyMeters """ for the last turn => final heading towards the runway orientation """ deltaTimeSeconds = 0.1 turnLeg.buildTurnLeg( deltaTimeSeconds=deltaTimeSeconds, elapsedTimeSeconds=endOfLastGreatCircleWayPoint.getElapsedTimeSeconds(), distanceStillToFlyMeters=distanceStillToFlyMeters, distanceToLastFixMeters=distanceToLastFixMeters, finalHeadingDegrees=finalHeadingDegrees, lastTurn=True, bankAngleDegrees=5.0, ) self.finalRoute.addGraph(turnLeg) endOfTurnLegWayPoint = self.finalRoute.getLastVertex().getWeight() """ ============= use touch-down way-point to compute distance to fly =============""" distanceStillToFlyMeters = endOfTurnLegWayPoint.getDistanceMetersTo(self.touchDownWayPoint) print self.className + ": distance still to fly= {0:.2f} nautics".format( distanceStillToFlyMeters * Meter2NauticalMiles ) # print '==================== add descent slope ================= ' descentGlideSlope = DescentGlideSlope( runway=self.arrivalRunway, aircraft=self.aircraft, arrivalAirport=self.arrivalAirport, descentGlideSlopeDegrees=3.0, ) flownDistanceMeters = self.finalRoute.getLengthMeters() distanceStillToFlyMeters = self.flightLengthMeters - self.finalRoute.getLengthMeters() distanceToLastFixMeters = self.computeDistanceToLastFixMeters( currentPosition=endOfTurnLegWayPoint, fixListIndex=self.flightListIndex ) distanceToLastFixMeters = distanceStillToFlyMeters descentGlideSlope.buildGlideSlope( deltaTimeSeconds=self.deltaTimeSeconds, elapsedTimeSeconds=endOfTurnLegWayPoint.getElapsedTimeSeconds(), initialWayPoint=endOfTurnLegWayPoint, flownDistanceMeters=flownDistanceMeters, distanceStillToFlyMeters=distanceStillToFlyMeters, distanceToLastFixMeters=distanceToLastFixMeters, ) self.finalRoute.addGraph(descentGlideSlope) endOfDescentGlideSlope = self.finalRoute.getLastVertex().getWeight() # print '================= add arrival ground run ================' arrivalGroundRun = GroundRunLeg( runway=self.arrivalRunway, aircraft=self.aircraft, airport=self.arrivalAirport ) arrivalGroundRun.buildArrivalGroundRun( deltaTimeSeconds=self.deltaTimeSeconds, elapsedTimeSeconds=endOfDescentGlideSlope.getElapsedTimeSeconds(), initialWayPoint=endOfDescentGlideSlope, ) self.finalRoute.addGraph(arrivalGroundRun)