-
Soeren Peters authoredSoeren Peters authored
TrafficMovementFactoryTestRoads.cpp 3.13 KiB
#include "TrafficMovementFactory - Kopie.h"
#include <iostream>
#include "GridGenerator/StreetPointFinder/JunctionReader.h"
#include "GridGenerator/StreetPointFinder/SourceReader.h"
#include "GridGenerator/StreetPointFinder/SinkReader.h"
#include "RoadNetwork/RoadMaker.h"
#include "TrafficMovement.h"
#include "Source/SourceRandom.h"
#include "Junction/JunctionRandom.h"
#include "Sink/SinkRandom.h"
#include "Output/ConcentrationByPosition.h"
#include "Output/ConcBySpeedAndAcceleration.h"
#include "Utilities/safe_casting.h"
void TrafficMovementFactoryTest::initTrafficMovement(real * pConcArray)
{
//Variables
uint roadLength = 40;
real vehicleDensity = 0.1f;
uint vehicleLength = 2;
uint maxVelocity = 5;
uint maxAcceleration = 1;
real dawdlePossibility = (real) 0.2; //typical value: 0.2
real slowToStartPossibility = (real) 0.4;
bool useGPU = true;
bool useSlowToStart = true;
//make RoadNetwork
std::vector<int> road(40);
std::fill(road.begin(), road.end(), -1);
road[9] = 5;
auto roadNetwork = std::make_unique<RoadMaker>(road, maxVelocity, vehicleLength);
//RoadMaker(const uint roadLength, const uint maxVelocity, uint vehicleLength, const real vehicleDensity); //random vehicle Distribution
//RoadMaker(const std::vector<int> vehicleDistribution, const uint maxVelocity, uint vehicleLength); //given vehicle distribution
//RoadMaker(const uint roadLength, const uint maxVelocity, uint vehicleLength);//empty road
//Sources
std::unique_ptr<Source> source = std::make_unique <SourceRandom>(SourceRandom(0, 0.9f, maxVelocity));
std::unique_ptr<Source> source1 = std::make_unique <SourceRandom>(SourceRandom(11, 0.9f, maxVelocity));
roadNetwork->addSource(source);
roadNetwork->addSource(source1);
//Sinks
std::unique_ptr<Sink> s = std::make_unique <SinkRandom>(SinkRandom(roadLength-1, 0.5f));
std::unique_ptr<Sink> s1 = std::make_unique <SinkRandom>(SinkRandom(29, 0.5f));
roadNetwork->addSink(move(s));
roadNetwork->addSink(move(s1));
//Junctions
std::vector<uint> inCellIndices = { 9,19 };
std::vector<uint> outCellIndices = { 21,31 };
std::unique_ptr<Junction> j = std::make_unique<JunctionRandom>(JunctionRandom(inCellIndices, outCellIndices,5));
roadNetwork->addJunction(std::move(j));
//init TrafficMovement
this->simulator = std::make_shared<TrafficMovement>(std::move(roadNetwork), dawdlePossibility);
if (useSlowToStart) simulator->setSlowToStart(slowToStartPossibility);
simulator->setMaxAcceleration(maxAcceleration);
if (useGPU) simulator->setUseGPU(pConcArray);
//init ConcentrationOutwriter
if (!useGPU) {
std::unique_ptr<ConcentrationOutwriter> writer = std::make_unique<ConcBySpeedAndAcceleration>(ConcBySpeedAndAcceleration(simulator->getRoadLength(), pConcArray));
simulator->setConcentrationOutwriter(move(writer));
}
}
void TrafficMovementFactoryTest::calculateTimestep(uint step, uint stepForVTK)
{
simulator->calculateTimestep(step);
writeTimestep(step);
}
void TrafficMovementFactoryTest::loopThroughTimesteps(uint timeSteps)
{
simulator->setSaveResultsTrue(timeSteps);
simulator->loopTroughTimesteps(timeSteps);
//std::cout << "Number of Cars: " << simulator->getNumberOfCars() << std::endl;
}