コード例 #1
0
ファイル: main.c プロジェクト: pandamaru712/FD_OFDMA
int main(int argc, char *argv[]){
	//Check option values from command line.
	//checkOption(argc, argv);
	//Apply option values to simulation settings.
	simSetting(argc,argv);

	if((gFileSta=fopen("sta's buffer.txt", "w"))==NULL){
		printf("File cannot open! 3");
		exit(33);
	}

	staInfo *sta;
	sta = (staInfo*)malloc(sizeof(staInfo)*gSpec.numSta);
	apInfo ap;
	resultInfo result;
	//Intialize result information.
	initializeResult(&result);

	if(gSpec.fDebug==true){
		debug();
		//printf("End debug.\n");
		//exit(99);
	}

	int numTx = 0;
	int trialID;
	bool fEmpty = false;

	for (trialID=0; trialID<gSpec.numTrial; trialID++){
		srand(trialID);
		numTx = 0;
		fEmpty = false;
		initializeNodeInfo(sta, &ap);

		gElapsedTime = (double)gStd.difs;
		idle(sta, &ap, &numTx, &fEmpty);
		//Wrong? fEmpty=true?

		for(; gElapsedTime<gSpec.simTime*1000000;){
			if(numTx==1){
				//debugSta(&sta[7],7);
				txSuccess(sta, &ap, &numTx);
				fEmpty = true;
				for(int i=0; i<gSpec.numSta; i++){
					if(sta[i].buffer[0].lengthMsdu!=0){
						fEmpty = false;
						break;
					}
				}
				if(ap.buffer[0].lengthMsdu!=0){
					fEmpty = false;
				}
				if(fEmpty==true){
					idle(sta, &ap, &numTx, &fEmpty);
				}else{
					afterSuccess(sta, &ap, &numTx);
				}
			}else{
				txCollision(sta, &ap);
				afterCollision(sta, &ap, &numTx);
			}
		}
		simulationResult(sta, &ap, &result, trialID);
	}

	if(gSpec.fOutput==true){
		fclose(gSpec.output);
	}
	fclose(gFileSta);
	free(sta);
	return 0;
}
コード例 #2
0
int AirsideSimulation::AirsideEventListInitialize( EventList* _eventlist)
{
	PLACE_METHOD_TRACK_STRING();
	if(!m_bInitialized) return FALSE;


	//flight init time 
	CArrivalETAOffsetList vETAoffsetSet;
	vETAoffsetSet.SetAirportDatabase(m_pEngine->getTerminal()->m_pAirportDB);
	vETAoffsetSet.ReadData(m_nPrjID);

	ElapsedTime tMinTime  = ElapsedTime::Max();
	for (int i = 0; i < m_pEngine->m_simFlightSchedule.getCount();i++) //it should user the m_simFlightSchedule, it's the flight which has been filted 
	{
		Flight * pFlt =  m_pEngine->m_simFlightSchedule.getItem(i);		

		pFlt->SetFlightIndex(i) ; // set the flight id to index , make the flight id is equal with the log entry. 
		//add birth event to list
		AirsideFlightInSim * pFlightInSim = new AirsideFlightInSim(m_pEngine,pFlt, i);
		m_vFlights.push_back(pFlightInSim);
		pFlightInSim->SetOutput(m_pOuput);		
		pFlightInSim->SetAirTrafficController(&m_AirTrafficController);
		pFlightInSim->SetPerformance(&m_FlightPerformanceManager);	
		pFlightInSim->InitScheduleEndTime(m_pEngine->getTerminal()->flightSchedule->GetFlightScheduleEndTime());

		//init vehicle service information 
		CFlightServiceInformation* pServiceInfo = new CFlightServiceInformation(pFlightInSim);
		FlightTypeDetailsManager *pManager = m_pFlightServiceManager->GetFlightServiceManager();
		FlightTypeDetailsItem *pItem = pManager->GetFlightDetailItem( pFlightInSim->GetLogEntry().GetAirsideDesc() );
		if (pItem)
		{
			pServiceInfo->SetFltServiceLocations(pItem->GetRelativeLocations());
			pServiceInfo->SetRingRoute(pItem->GetRingRoad());
		}
		pFlightInSim->SetFlightServiceInformation(pServiceInfo);	
		pFlightInSim->SetServiceRequestDispatcher(m_pVehicleRequestDispatcher);
		//

		//init arrival time
		pFlightInSim->InitBirth(vETAoffsetSet,m_simConfig);

		tMinTime = min( pFlightInSim->GetBirthTime(),tMinTime);


		CAirsideMobileElementEvent *fltbirth = NULL;
		if( m_simConfig.bOnlySimStand) 
		{
			fltbirth = new FlightBirthTerminalEvent(pFlightInSim, 
				m_Resource.GetAirportResource()->getStandResource());		
		}
		else
		{
			if (m_pEngine->IsOnboardSel())
				fltbirth = new FlightBirthEvent(pFlightInSim,m_pEngine);
			else
				fltbirth = new FlightBirthEvent(pFlightInSim);
		}
		fltbirth->setTime(pFlightInSim->GetBirthTime());
		fltbirth->addEvent();	

		//generate onboard flight close door event
		OnboardFlightGeneration(pFlightInSim);
		
		//Init Stand assignment register
		ALTObjectID standID;
		{
			StandInSim* pArrStand = NULL;
			StandInSim* pDepStand = NULL;
			StandInSim* pIntStand = NULL;
			ElapsedTime tArrOnTime;
			ElapsedTime tArrOffTime;
			ElapsedTime tDepOnTime;
			ElapsedTime tDepOffTime;
			ElapsedTime tIntOnTime;
			ElapsedTime tIntOffTime;

			if (pFlightInSim->IsArrival())
			{
				standID = pFlightInSim->getArrStand();
				pArrStand = m_Resource.GetAirportResource()->getStandResource()->GetStandByName(standID);	
				if (pArrStand)
				{
					tArrOnTime = pFlightInSim->getArrTime();
					tArrOffTime = tArrOnTime + pFlightInSim->getServiceTime(ARR_PARKING);
					pArrStand->GetStandAssignmentRegister()->StandAssignmentRecordInit(pFlightInSim, ARR_PARKING, tArrOnTime, tArrOffTime);
					if (!pFlightInSim->IsDeparture())
					{
						WriteStandPlanLog(pFlightInSim, pArrStand, ARR_PARKING, tArrOnTime, tArrOffTime);
					}
				}
			}
			if (pFlightInSim->IsDeparture())
			{
				standID = pFlightInSim->getDepStand();
				pDepStand = m_Resource.GetAirportResource()->getStandResource()->GetStandByName(standID);	
				if (pDepStand)
				{
					tDepOffTime = pFlightInSim->getDepTime();
					tDepOnTime = tDepOffTime - pFlightInSim->getServiceTime(DEP_PARKING);
					pDepStand->GetStandAssignmentRegister()->StandAssignmentRecordInit(pFlightInSim, DEP_PARKING, tDepOnTime, tDepOffTime);
					if (!pFlightInSim->IsArrival())
					{
						WriteStandPlanLog(pFlightInSim, pDepStand, DEP_PARKING, tDepOnTime, tDepOffTime);
					}
				}
			}

			if (!pFlightInSim->GetFlightInput()->getIntermediateStand().IsBlank())
			{
				standID = pFlightInSim->GetFlightInput()->getIntermediateStand();
				pIntStand = m_Resource.GetAirportResource()->getStandResource()->GetStandByName(standID);
				if (pIntStand)
				{
					ElapsedTime tIntOnTime = pFlightInSim->getArrTime() + pFlightInSim->getServiceTime(ARR_PARKING);
					ElapsedTime tIntOffTime = tIntOnTime + pFlightInSim->getServiceTime(INT_PARKING);
					pIntStand->GetStandAssignmentRegister()->StandAssignmentRecordInit(pFlightInSim, INT_PARKING, tIntOnTime, tIntOffTime);
					WriteStandPlanLog(pFlightInSim, pIntStand, INT_PARKING, tIntOnTime, tIntOffTime);
				}
			}

			if (pFlightInSim->IsArrival() && pFlightInSim->IsDeparture())
			{
				if (pIntStand || pArrStand != pDepStand)
				{
					if (pArrStand)
						WriteStandPlanLog(pFlightInSim, pArrStand, ARR_PARKING, tArrOnTime, tArrOffTime);
					if (pDepStand)
						WriteStandPlanLog(pFlightInSim, pDepStand, DEP_PARKING, tDepOnTime, tDepOffTime);
				}
				else
				{
					if(pArrStand)
						WriteStandPlanLog(pFlightInSim, pArrStand, ARR_PARKING, tArrOnTime, tDepOffTime);
				}
			}
		}			
	}
	if(m_simConfig.bOnlySimStand)
	{
		InitAirsideFlightExtraInfomation();
		return TRUE;
	}
	
	CAirsideSimSettingClosure simSetting(m_nPrjID);
	simSetting.ReadData();

	if (simSetting.IsItinerantFlight())
	{
		AirsideItinerantFlightInSimGenerator itiFltGenrator(m_nPrjID,
			m_pEngine->getTerminal(),
			m_pEngine->getTerminal()->flightSchedule->getCount(),
			this);

		itiFltGenrator.GenerateFlight(m_pEngine);
	}
	

	int nGeneratorCount = (int)m_vFlights.size();

	if(simSetting.IsTrainingFlight())
	{
		AirsideCircuiteFlightInSimGenerator circuiteFlightGenerator(m_pEngine->getTerminal(),this,nGeneratorCount);
		circuiteFlightGenerator.GenerateCircuiteFlight(m_pEngine,m_pTrainFlightsManger);
	}

	InitAirsideFlightExtraInfomation();

	//call this after all flight's info is prepared
	m_AirTrafficController.SetFlightList(m_vFlights);

	UpdateFlightWingSpanInfo(m_vFlights);


	m_bAllowCyclicGroundRoute = simSetting.AllowCyclicGroundRoute();

	bool bVehicleService = simSetting.IsVehicleService();

	m_pVehicleRequestDispatcher->SetVehicleService(bVehicleService);

//	int nVehicleBeginCount = 0;
	int nNextVehicleUnqiueID = 0;
	if (bVehicleService)
	{
		if(m_pVehicleSpecifications != NULL)
			delete m_pVehicleSpecifications;

		m_pVehicleSpecifications = new CVehicleSpecifications();
		m_pVehicleSpecifications->ReadData(m_nPrjID);

		VehiclePoolResourceManager* pPoolRes = m_Resource.GetAirportResource()->getVehicleResource();

		for (int i =0; i < pPoolRes->GetVehiclePoolCount(); i++)
		{
			VehiclePoolInSim* pPool = pPoolRes->GetVehiclePoolByIdx(i);
			if (pPool)
			{
				pPool->SetVehicleRequestDispatcher(m_pVehicleRequestDispatcher);
				pPool->SetVehiclePoolDeployment(m_pVehiclePoolsDeployment);

				int nPoolId = pPool->GetVehiclePoolID();
				for (int j =0; j < m_pVehiclePoolsDeployment->GetVehicleTypeCount(); j++)
				{
					int nVehicleTypeID =m_pVehiclePoolsDeployment->GetVehicleTypeIDByIdx(j);
					int nCount = m_pVehiclePoolsDeployment->GetVehicleQuantityInPool(nVehicleTypeID,nPoolId);
					if (nCount > 0)
					{
						CVehicleSpecificationItem* pVehicleSpecItem = m_pVehicleSpecifications->GetVehicleItemByID(nVehicleTypeID);
						VehicleGeneration(nNextVehicleUnqiueID,nCount,pVehicleSpecItem,nPoolId,tMinTime,m_pVehicleSpecifications);
					}
				}
			}

		}
	}

	return TRUE;

}