add the IAF spacing constraint to the arrival estimation
This commit is contained in:
		| @@ -141,6 +141,41 @@ class RunwayManager: | ||||
|                 lostTime = delta | ||||
|                 eta = candidate | ||||
|  | ||||
|         # find the corresponding IAF | ||||
|         iaf = node.ArrivalCandidates[selectedRunway.Name].ArrivalRoute[0].Waypoint.Name | ||||
|         if iaf in self.IafInbounds: | ||||
|             delta = 100000.0 | ||||
|             targetLevel = None | ||||
|  | ||||
|             # find the planned level | ||||
|             for level in self.IafInbounds[iaf]: | ||||
|                 difference = abs(level - node.ArrivalCandidates[selectedRunway.Name].ArrivalRoute[0].Altitude) | ||||
|                 if difference < delta: | ||||
|                     delta = difference | ||||
|                     targetLevel = level | ||||
|  | ||||
|             if targetLevel in self.IafInbounds[iaf]: | ||||
|                 # check if we have to lose time to ensure the IAF spacing | ||||
|                 # the function assumes that model allows only TTG during flight to IAF | ||||
|                 if None != self.IafInbounds[iaf][targetLevel]: | ||||
|                     if None != self.IafInbounds[iaf][targetLevel].Inbound.PlannedArrivalRoute: | ||||
|                         # ETA at IAF of preceeding traffic | ||||
|                         plannedDelta = self.IafInbounds[iaf][targetLevel].Inbound.PlannedArrivalTime - self.IafInbounds[iaf][targetLevel].Inbound.EnrouteArrivalTime | ||||
|                         iafETAPreceeding = self.IafInbounds[iaf][targetLevel].Inbound.PlannedArrivalRoute[0].ETA + plannedDelta | ||||
|  | ||||
|                         # ETA at IAF of current inbound | ||||
|                         plannedDelta = eta - node.Inbound.EnrouteArrivalTime | ||||
|                         iafETACurrent = node.ArrivalCandidates[selectedRunway.Name].ArrivalRoute[0].ETA | ||||
|  | ||||
|                         # required time delte to ensure IAF spacing | ||||
|                         timeSpacing = timedelta(hours = self.Configuration.AirportConfiguration.IafSpacing / node.ArrivalCandidates[selectedRunway.Name].ArrivalRoute[0].GroundSpeed) | ||||
|  | ||||
|                         # we are too close to preceeding traffic | ||||
|                         currentTimeSpacing = iafETACurrent - iafETAPreceeding | ||||
|                         if timeSpacing > currentTimeSpacing: | ||||
|                             eta = eta + (timeSpacing - currentTimeSpacing) | ||||
|                             lostTime += (timeSpacing - currentTimeSpacing) | ||||
|  | ||||
|         return selectedRunway, eta, lostTime | ||||
|  | ||||
|     def registerNode(self, node : Node, runway : str): | ||||
|   | ||||
		Reference in New Issue
	
	Block a user