From 7a3a247fcb8778c4e99b0c9119b61954f16e602a Mon Sep 17 00:00:00 2001 From: hiwis <hiwis@irmb.tu-bs.de> Date: Tue, 12 Mar 2019 19:10:44 +0100 Subject: [PATCH] control Trafficsimulator from VirtualFluidsGPU, started sorting includes --- .../StreetPointFinder/StreetPointFinder.cpp | 4 ---- .../StreetPointFinder/StreetPointFinder.h | 6 ----- src/Traffic/Junction/JunctionRandom.cpp | 12 ++++++---- src/Traffic/Junction/JunctionRandom.h | 4 ++-- src/Traffic/Output/CarDisplay.cpp | 11 ++++++++- src/Traffic/Output/CarDisplay.h | 6 ----- .../Output/ConcBySpeedAndAcceleration.cpp | 24 +++++++++++++------ .../Output/ConcBySpeedAndAcceleration.h | 2 -- .../Output/ConcentrationByPosition.cpp | 17 +++++++++---- src/Traffic/Output/ConcentrationByPosition.h | 1 - src/Traffic/Output/ConcentrationOutwriter.cpp | 5 +++- src/Traffic/Output/ConcentrationOutwriter.h | 3 --- src/Traffic/RoadNetwork/RoadMaker.cpp | 9 ++++--- src/Traffic/RoadNetwork/RoadMaker.h | 4 +++- src/Traffic/RoadNetwork/RoadNetworkData.h | 4 +--- src/Traffic/Sink/Sink.h | 1 - src/Traffic/Sink/SinkData.h | 2 -- src/Traffic/Sink/SinkRandom.cpp | 2 +- src/Traffic/Sink/SinkRandom.h | 6 ++--- src/Traffic/TrafficMovement.cpp | 8 +++++++ src/Traffic/TrafficMovement.h | 18 ++++++-------- src/Traffic/TrafficMovementFactory.cpp | 14 +++++------ src/Traffic/TrafficMovementFactory.h | 5 ++-- src/Traffic/Utilities/VectorHelper.h | 6 ++--- src/Traffic/Utilities/safe_casting.h | 21 ++++++++++++++++ src/VirtualFluids_GPU/LBM/Simulation.cpp | 14 ++++++++++- src/VirtualFluids_GPU/LBM/Simulation.h | 2 ++ targets/apps/LBM/TrafficTest/TrafficTest.cpp | 12 +++++----- targets/libs/VirtualFluids_GPU/CMakeLists.txt | 8 ++++--- 29 files changed, 140 insertions(+), 91 deletions(-) create mode 100644 src/Traffic/Utilities/safe_casting.h diff --git a/src/GridGenerator/StreetPointFinder/StreetPointFinder.cpp b/src/GridGenerator/StreetPointFinder/StreetPointFinder.cpp index 9b6808e1c..05aef5d5e 100644 --- a/src/GridGenerator/StreetPointFinder/StreetPointFinder.cpp +++ b/src/GridGenerator/StreetPointFinder/StreetPointFinder.cpp @@ -471,7 +471,3 @@ void StreetPointFinder::writeMappingFile(std::string gridPath) *logging::out << logging::Logger::INFO_INTERMEDIATE << "done!\n"; } -void StreetPointFinder::dummy() -{ - int a = 5; -} \ No newline at end of file diff --git a/src/GridGenerator/StreetPointFinder/StreetPointFinder.h b/src/GridGenerator/StreetPointFinder/StreetPointFinder.h index f5dec13e9..177a4cbd2 100644 --- a/src/GridGenerator/StreetPointFinder/StreetPointFinder.h +++ b/src/GridGenerator/StreetPointFinder/StreetPointFinder.h @@ -6,8 +6,6 @@ #include "Core/PointerDefinitions.h" #include "Core/DataTypes.h" -//#include "Core/Logger/Logger.h" - #include <VirtualFluidsDefinitions.h> class Grid; @@ -59,10 +57,6 @@ struct VF_PUBLIC StreetPointFinder void writeSimulationFileSorted( std::string gridPath, real concentration, uint numberOfLevels, uint level ); void writeMappingFile( std::string gridPath ); - - - - void dummy(); }; diff --git a/src/Traffic/Junction/JunctionRandom.cpp b/src/Traffic/Junction/JunctionRandom.cpp index 8a1a941ed..fd8112804 100644 --- a/src/Traffic/Junction/JunctionRandom.cpp +++ b/src/Traffic/Junction/JunctionRandom.cpp @@ -1,11 +1,13 @@ #include "JunctionRandom.h" -//#include <iostream> +#include <iostream> #include <algorithm> #include "TrafficMovement.h" -//#include "Utilities/invalidInput_error.h" -//#include "Utilities/VectorHelper.h" + +#include "Utilities/invalidInput_error.h" +#include "Utilities/VectorHelper.h" +#include "Utilities/safe_casting.h" JunctionRandom::JunctionRandom(const std::vector<uint> &inCellIndices, const std::vector<uint> &outCellIndices) @@ -13,7 +15,7 @@ JunctionRandom::JunctionRandom(const std::vector<uint> &inCellIndices, const std data.inCellIndices = inCellIndices; data.outCellIndices = outCellIndices; - uint inRoads = inCellIndices.size(); + uint inRoads = castSizeT_Uint(inCellIndices.size()); data.carCanEnter.resize(inRoads); std::fill(data.carCanEnter.begin(), data.carCanEnter.end(), true); @@ -69,7 +71,7 @@ uint JunctionRandom::getInCellsVectorIndex(uint cellIndex) if (it != data.inCellIndices.end()) { - return distance(data.inCellIndices.begin(), it); + return static_cast <uint> (distance(data.inCellIndices.begin(), it)); } throw std::runtime_error("The passed cell is not an incoming cell to this junction."); diff --git a/src/Traffic/Junction/JunctionRandom.h b/src/Traffic/Junction/JunctionRandom.h index 416d03e7f..574e6098e 100644 --- a/src/Traffic/Junction/JunctionRandom.h +++ b/src/Traffic/Junction/JunctionRandom.h @@ -1,8 +1,8 @@ #pragma once -#include <VirtualFluidsDefinitions.h> - #include <random> #include <vector> + +#include <VirtualFluidsDefinitions.h> #include "Core/DataTypes.h" #include "Junction.h" diff --git a/src/Traffic/Output/CarDisplay.cpp b/src/Traffic/Output/CarDisplay.cpp index 6a22d2ae0..6543a9ca1 100644 --- a/src/Traffic/Output/CarDisplay.cpp +++ b/src/Traffic/Output/CarDisplay.cpp @@ -1,10 +1,19 @@ #include "CarDisplay.h" +#include <fstream> +#include <iostream> +#include <iomanip> //formatting output streams +#include <windows.h> //for colourful console output +#include <stdexcept> + +#include "Utilities/VectorHelper.h" +#include "Utilities/safe_casting.h" + CarDisplay::CarDisplay(std::vector<int> **pcurrent, const uint safetyDistance): safetyDistance{ safetyDistance } { this->ppcurrent = pcurrent; - roadLength = (*pcurrent)->size(); + roadLength = castSizeT_Uint((*pcurrent)->size()); } diff --git a/src/Traffic/Output/CarDisplay.h b/src/Traffic/Output/CarDisplay.h index 34e84fb7d..5c7f4a643 100644 --- a/src/Traffic/Output/CarDisplay.h +++ b/src/Traffic/Output/CarDisplay.h @@ -1,19 +1,13 @@ #pragma once #include <VirtualFluidsDefinitions.h> -#include <fstream> -#include <iostream> #include <vector> #include <memory> -#include <iomanip> //formatting output streams -#include <windows.h> //for colourful console output -#include <stdexcept> #include "Sink/Sink.h" #include "Source/Source.h" #include "Junction/Junction.h" -#include "Utilities/VectorHelper.h" class VF_PUBLIC CarDisplay { public: diff --git a/src/Traffic/Output/ConcBySpeedAndAcceleration.cpp b/src/Traffic/Output/ConcBySpeedAndAcceleration.cpp index 6305b2fe4..17d54719b 100644 --- a/src/Traffic/Output/ConcBySpeedAndAcceleration.cpp +++ b/src/Traffic/Output/ConcBySpeedAndAcceleration.cpp @@ -1,20 +1,30 @@ #include "ConcBySpeedAndAcceleration.h" +#include <iostream> + ConcBySpeedAndAcceleration::ConcBySpeedAndAcceleration(uint roadlength, uint maxSpeed) { + std::cout << "using ConcBySpeedAndAcceleration::concentration for concentrations" << std::endl; concentration.resize(roadlength); - this->maxAcceleration = static_cast<real>(maxAcceleration); this->maxSpeed = static_cast<real>(maxSpeed); } ConcBySpeedAndAcceleration::ConcBySpeedAndAcceleration(uint roadlength, real * concArrayStart, uint maxSpeed) { - useLBMConcArray = true; - this->roadLength = roadlength; - this->concArrayStart = concArrayStart; - this->maxAcceleration = static_cast<real>(maxAcceleration); - this->maxSpeed = static_cast<real>(maxSpeed); + if (concArrayStart == nullptr) { + std::cout << "using ConcBySpeedAndAcceleration::concentration for concentrations" << std::endl; + concentration.resize(roadlength); + this->maxSpeed = static_cast<real>(maxSpeed); + } + else { + std::cout << "using passed array for concentrations" << std::endl; + useLBMConcArray = true; + this->roadLength = roadlength; + this->concArrayStart = concArrayStart; + this->maxSpeed = static_cast<real>(maxSpeed); + } + } // @@ -53,7 +63,7 @@ real ConcBySpeedAndAcceleration::chooseConc(uint oldSpeed, uint speed) return 0.75f; else if (speed < oldSpeed) //Brake return 0.45f; - else + else std::cerr << "couldn't choose driving state in ConcentrationBySpeedAndAcceleration::chooseConc" << std::endl; return -1.0f; } diff --git a/src/Traffic/Output/ConcBySpeedAndAcceleration.h b/src/Traffic/Output/ConcBySpeedAndAcceleration.h index 5fcc5568c..bfd26c958 100644 --- a/src/Traffic/Output/ConcBySpeedAndAcceleration.h +++ b/src/Traffic/Output/ConcBySpeedAndAcceleration.h @@ -1,5 +1,4 @@ #pragma once -#include <VirtualFluidsDefinitions.h> #include "ConcentrationOutwriter.h" @@ -20,6 +19,5 @@ private: private: real maxSpeed = 0; - real maxAcceleration; }; diff --git a/src/Traffic/Output/ConcentrationByPosition.cpp b/src/Traffic/Output/ConcentrationByPosition.cpp index 39c6a07ad..4fe7926da 100644 --- a/src/Traffic/Output/ConcentrationByPosition.cpp +++ b/src/Traffic/Output/ConcentrationByPosition.cpp @@ -1,17 +1,26 @@ #include "ConcentrationByPosition.h" - +#include <iostream> ConcentrationByPosition::ConcentrationByPosition(uint roadlength, uint maxSpeed) { + std::cout << "using ConcentrationByPosition::concentration for concentrations" << std::endl; concentration.resize(roadlength); } ConcentrationByPosition::ConcentrationByPosition(uint roadlength, real * concArrayStart, uint maxSpeed) { - useLBMConcArray = true; - this->roadLength = roadLength; - this->concArrayStart = concArrayStart; + if (concArrayStart == nullptr) { + std::cout << "using ConcentrationByPosition::concentration for concentrations" << std::endl; + concentration.resize(roadlength); + } + else { + std::cout << "using passed array for concentrations" << std::endl; + useLBMConcArray = true; + this->roadLength = roadLength; + this->concArrayStart = concArrayStart; + } + } //void ConcentrationByPosition::calculateConcFromCarDistribution(const std::vector<int>& currentCarDistribution) diff --git a/src/Traffic/Output/ConcentrationByPosition.h b/src/Traffic/Output/ConcentrationByPosition.h index 939ef58fa..d87ded6d8 100644 --- a/src/Traffic/Output/ConcentrationByPosition.h +++ b/src/Traffic/Output/ConcentrationByPosition.h @@ -1,5 +1,4 @@ #pragma once -#include <VirtualFluidsDefinitions.h> #include "ConcentrationOutwriter.h" diff --git a/src/Traffic/Output/ConcentrationOutwriter.cpp b/src/Traffic/Output/ConcentrationOutwriter.cpp index bd2f03914..6b6301d3b 100644 --- a/src/Traffic/Output/ConcentrationOutwriter.cpp +++ b/src/Traffic/Output/ConcentrationOutwriter.cpp @@ -1,5 +1,8 @@ #include "ConcentrationOutwriter.h" +#include <iostream> +#include <iomanip> //formatting output streams +#include <windows.h> //for colourful console output void ConcentrationOutwriter::resetConcentrations() { @@ -7,7 +10,7 @@ void ConcentrationOutwriter::resetConcentrations() for (real* p = concArrayStart; p < concArrayStart + roadLength; ++p) *p = 0.0; else - std::fill(concentration.begin(), concentration.end(), 0.0); + std::fill(concentration.begin(), concentration.end(), 0.0f); } diff --git a/src/Traffic/Output/ConcentrationOutwriter.h b/src/Traffic/Output/ConcentrationOutwriter.h index 2df134907..8908b508c 100644 --- a/src/Traffic/Output/ConcentrationOutwriter.h +++ b/src/Traffic/Output/ConcentrationOutwriter.h @@ -1,9 +1,6 @@ #pragma once #include <vector> -#include <iostream> -#include <iomanip> //formatting output streams -#include <windows.h> //for colourful console output #include <VirtualFluidsDefinitions.h> #include "Core/DataTypes.h" diff --git a/src/Traffic/RoadNetwork/RoadMaker.cpp b/src/Traffic/RoadNetwork/RoadMaker.cpp index bdd8822cd..b9b84f65e 100644 --- a/src/Traffic/RoadNetwork/RoadMaker.cpp +++ b/src/Traffic/RoadNetwork/RoadMaker.cpp @@ -1,5 +1,8 @@ #include "RoadMaker.h" +#include "Utilities/VectorHelper.h" +#include "Utilities/invalidInput_error.h" +#include "Utilities/safe_casting.h" //random vehicle Distribution RoadMaker::RoadMaker(const uint roadLength, const uint maxVelocity, uint vehicleLength, const real vehicleDensity) @@ -24,7 +27,7 @@ RoadMaker::RoadMaker(const uint roadLength, const uint maxVelocity, uint vehicle //given vehicle distribution RoadMaker::RoadMaker(const std::vector<int> vehicleDistribution, const uint maxVelocity, uint vehicleLength) { - this->roadLength = vehicleDistribution.size(); + this->roadLength = castSizeT_Uint(vehicleDistribution.size()); this->maxVelocity = maxVelocity; initVehicleLength(vehicleLength); @@ -168,7 +171,7 @@ void RoadMaker::setJunctionAsNeighbor(std::unique_ptr<Junction> & junction) { //set the junction as neighbor of the incoming cells - int junctionIndex = -1000 - junctions.size(); //value range: -1000 to -1999 + int junctionIndex = -1000 - castSizeT_Int(junctions.size()); //value range: -1000 to -1999 std::vector<uint> inCells = junction->getInCellIndices(); try { @@ -221,7 +224,7 @@ void RoadMaker::setSinkAsNeighbor(std::unique_ptr<Sink> & sink) { //set the sink as neighbor of the incoming cell - int sinkIndex = -2000 - sinks.size(); //value range: -2000 to -2999 + int sinkIndex = -2000 - castSizeT_Int(sinks.size()); //value range: -2000 to -2999 uint sinkCell = sink->getIndex(); if (sinkCell >= roadLength) throw invalidInput_error("The index of a sink ist greater than the roadLength."); diff --git a/src/Traffic/RoadNetwork/RoadMaker.h b/src/Traffic/RoadNetwork/RoadMaker.h index 52569b745..5029d922b 100644 --- a/src/Traffic/RoadNetwork/RoadMaker.h +++ b/src/Traffic/RoadNetwork/RoadMaker.h @@ -1,8 +1,10 @@ #pragma once #include <random> + #include "RoadNetworkData.h" + #include "Utilities/RandomHelper.h" -#include <VirtualFluidsDefinitions.h> + struct VF_PUBLIC RoadMaker : public RoadNetworkData diff --git a/src/Traffic/RoadNetwork/RoadNetworkData.h b/src/Traffic/RoadNetwork/RoadNetworkData.h index c744b08bd..1a19822bf 100644 --- a/src/Traffic/RoadNetwork/RoadNetworkData.h +++ b/src/Traffic/RoadNetwork/RoadNetworkData.h @@ -2,11 +2,9 @@ #include <memory> #include <vector> -#include "Utilities/VectorHelper.h" -#include "Utilities/invalidInput_error.h" - #include <VirtualFluidsDefinitions.h> + #include "Source/Source.h" #include "Sink/Sink.h" #include "Junction/Junction.h" diff --git a/src/Traffic/Sink/Sink.h b/src/Traffic/Sink/Sink.h index ce75f248a..4954b40eb 100644 --- a/src/Traffic/Sink/Sink.h +++ b/src/Traffic/Sink/Sink.h @@ -1,7 +1,6 @@ #pragma once #include "SinkData.h" -#include <VirtualFluidsDefinitions.h> class VF_PUBLIC Sink { diff --git a/src/Traffic/Sink/SinkData.h b/src/Traffic/Sink/SinkData.h index 08f4c633c..fe573691c 100644 --- a/src/Traffic/Sink/SinkData.h +++ b/src/Traffic/Sink/SinkData.h @@ -1,7 +1,5 @@ #pragma once -#include <memory> -#include <vector> #include <VirtualFluidsDefinitions.h> #include "Core/DataTypes.h" diff --git a/src/Traffic/Sink/SinkRandom.cpp b/src/Traffic/Sink/SinkRandom.cpp index 2d7894104..63a792ac2 100644 --- a/src/Traffic/Sink/SinkRandom.cpp +++ b/src/Traffic/Sink/SinkRandom.cpp @@ -1,6 +1,6 @@ #include "SinkRandom.h" - +#include "Utilities/invalidInput_error.h" SinkRandom::SinkRandom(uint sinkIndex, real sinkBlockedPossibility) { diff --git a/src/Traffic/Sink/SinkRandom.h b/src/Traffic/Sink/SinkRandom.h index bbb539952..ed7426103 100644 --- a/src/Traffic/Sink/SinkRandom.h +++ b/src/Traffic/Sink/SinkRandom.h @@ -1,13 +1,11 @@ #pragma once -#include <VirtualFluidsDefinitions.h> - #include <iostream> #include <random> -#include "Utilities/RandomHelper.h" #include "Sink.h" -#include "Utilities/invalidInput_error.h" + +#include "Utilities/RandomHelper.h" class VF_PUBLIC SinkRandom: public Sink diff --git a/src/Traffic/TrafficMovement.cpp b/src/Traffic/TrafficMovement.cpp index 7a5beff95..47f046157 100644 --- a/src/Traffic/TrafficMovement.cpp +++ b/src/Traffic/TrafficMovement.cpp @@ -1,5 +1,13 @@ #include "TrafficMovement.h" +#include <iostream> +#include <stdexcept> + +#include "Utilities/invalidInput_error.h" +#include "Utilities/VectorHelper.h" +#include "Utilities/RandomHelper.h" +#include "Output/ConcentrationOutwriter.h" +#include "Output/CarDisplay.h" TrafficMovement::TrafficMovement(std::unique_ptr<RoadNetworkData> road, const real dawdlePossibility) { diff --git a/src/Traffic/TrafficMovement.h b/src/Traffic/TrafficMovement.h index 8551fa74c..f3f9a354d 100644 --- a/src/Traffic/TrafficMovement.h +++ b/src/Traffic/TrafficMovement.h @@ -1,22 +1,18 @@ #pragma once -#include <VirtualFluidsDefinitions.h> - -#include <iostream> #include <vector> #include <random> #include <memory> -#include <stdexcept> -#include "Utilities/invalidInput_error.h" -#include "Utilities/VectorHelper.h" -#include "Utilities/RandomHelper.h" +#include <VirtualFluidsDefinitions.h> +#include "Core/DataTypes.h" + #include "RoadNetwork/RoadNetworkData.h" -#include "Output/ConcentrationOutwriter.h" -#include "Output/CarDisplay.h" +class ConcentrationOutwriter; +class CarDisplay; -class VF_PUBLIC TrafficMovement +class VF_PUBLIC TrafficMovement { public: TrafficMovement(std::unique_ptr<RoadNetworkData> road, const real dawdlePossibility); @@ -90,7 +86,7 @@ private: std::vector<int> *pcurrent; std::vector<int> *pnext; - std::vector<int> *pdummy; + std::vector<int> *pdummy; real dawdlePossibility; diff --git a/src/Traffic/TrafficMovementFactory.cpp b/src/Traffic/TrafficMovementFactory.cpp index 9c61a1496..5c0f71378 100644 --- a/src/Traffic/TrafficMovementFactory.cpp +++ b/src/Traffic/TrafficMovementFactory.cpp @@ -1,7 +1,7 @@ #include "TrafficMovementFactory.h" +#include <iostream> -//#include "GridGenerator/StreetPointFinder/StreetPointFinder.h" #include "GridGenerator/StreetPointFinder/JunctionReader.h" #include "GridGenerator/StreetPointFinder/SourceReader.h" #include "GridGenerator/StreetPointFinder/SinkReader.h" @@ -13,13 +13,14 @@ #include "Sink/SinkRandom.h" #include "Output/ConcentrationByPosition.h" #include "Output/ConcBySpeedAndAcceleration.h" +#include "Utilities/safe_casting.h" TrafficMovementFactory::TrafficMovementFactory() { } -void TrafficMovementFactory::initTrafficMovement(real * pconcArrayStart, uint concArraySize) +void TrafficMovementFactory::initTrafficMovement(real * pconcArrayStart) { //Variables @@ -47,7 +48,7 @@ void TrafficMovementFactory::initTrafficMovement(real * pconcArrayStart, uint co //calculate RoadLength uint roadLength = 0; - uint numberOfStreets = finder.streets.size(); + uint numberOfStreets = castSizeT_Uint(finder.streets.size()); for (uint i = 0; i < numberOfStreets; i++) { roadLength += finder.streets[i].numberOfCells; } @@ -86,8 +87,7 @@ void TrafficMovementFactory::initTrafficMovement(real * pconcArrayStart, uint co //init ConcentrationOutwriter - std::unique_ptr<ConcentrationOutwriter> writer = std::make_unique<ConcBySpeedAndAcceleration>(ConcBySpeedAndAcceleration(simulator->getRoadLength(), simulator->getMaxVelocity())); - //std::unique_ptr<ConcentrationOutwriter> writer = std::make_unique<ConcentrationByPosition>(ConcentrationByPosition(simulator->getRoadLength()), pconcArrayStart, concArraySize); + std::unique_ptr<ConcentrationOutwriter> writer = std::make_unique<ConcBySpeedAndAcceleration>(ConcBySpeedAndAcceleration(simulator->getRoadLength(), pconcArrayStart)); simulator->setConcentrationOutwriter(move(writer)); //prepare writing to vtk @@ -99,9 +99,9 @@ void TrafficMovementFactory::initTrafficMovement(real * pconcArrayStart, uint co } -void TrafficMovementFactory::calculateTimestep(uint step) +void TrafficMovementFactory::calculateTimestep(uint step, uint stepForVTK) { simulator->calculateTimestep(step); simulator->visualizeVehicleLengthForVTK(); - finder.writeVTK(outputPath + outputFilename + "_" + std::to_string(step) + ".vtk", *cars); + finder.writeVTK(outputPath + outputFilename + "_" + std::to_string(stepForVTK) + ".vtk", *cars); } \ No newline at end of file diff --git a/src/Traffic/TrafficMovementFactory.h b/src/Traffic/TrafficMovementFactory.h index 622276364..4db4d0104 100644 --- a/src/Traffic/TrafficMovementFactory.h +++ b/src/Traffic/TrafficMovementFactory.h @@ -1,7 +1,6 @@ # pragma once //#include <VirtualFluidsDefinitions.h> -#include <iostream> #include <vector> #include <memory> @@ -15,8 +14,8 @@ class VF_PUBLIC TrafficMovementFactory { public: TrafficMovementFactory(); ~TrafficMovementFactory() {}; - void initTrafficMovement(real * pconcArrayStart = nullptr, uint concArraySize = 0); - void calculateTimestep(uint step); + void initTrafficMovement(real * pconcArrayStart = nullptr); + void calculateTimestep(uint step, uint stepForVTK); private: diff --git a/src/Traffic/Utilities/VectorHelper.h b/src/Traffic/Utilities/VectorHelper.h index bda0acf9e..21161e670 100644 --- a/src/Traffic/Utilities/VectorHelper.h +++ b/src/Traffic/Utilities/VectorHelper.h @@ -1,13 +1,13 @@ #pragma once -#include <VirtualFluidsDefinitions.h> -#include "Core/DataTypes.h" - #include <vector> #include <iostream> #include <windows.h> //for colourful console output #include <iomanip> //formatting output streams +#include <VirtualFluidsDefinitions.h> +#include "Core/DataTypes.h" + class VF_PUBLIC VectorHelper { public: diff --git a/src/Traffic/Utilities/safe_casting.h b/src/Traffic/Utilities/safe_casting.h new file mode 100644 index 000000000..1e921f9df --- /dev/null +++ b/src/Traffic/Utilities/safe_casting.h @@ -0,0 +1,21 @@ +#pragma once + +#include <stdexcept> +#include "Core/DataTypes.h" + + +static uint castSizeT_Uint(size_t number) { + if (number > UINT_MAX) + { + throw std::overflow_error("number is larger than UINT_MAX"); + } + return static_cast<uint>(number); +} + +static int castSizeT_Int(size_t number) { + if (number > INT_MAX) + { + throw std::overflow_error("number is larger than INT_MAX"); + } + return static_cast<uint>(number); +} \ No newline at end of file diff --git a/src/VirtualFluids_GPU/LBM/Simulation.cpp b/src/VirtualFluids_GPU/LBM/Simulation.cpp index b163b32f5..85de96476 100644 --- a/src/VirtualFluids_GPU/LBM/Simulation.cpp +++ b/src/VirtualFluids_GPU/LBM/Simulation.cpp @@ -63,6 +63,8 @@ #include "Output/DataWriter.h" #include "Kernel/KernelFactory/KernelFactory.h" #include "Kernel/Kernel.h" +////////////////////////////////////////////////////////////////////////// +#include "Traffic/TrafficMovementFactory.h" Simulation::Simulation() { @@ -172,6 +174,11 @@ void Simulation::init(SPtr<Parameter> para, SPtr<GridProvider> gridProvider, std //////////////////////////////////////////////////////////////////////////// + ////////////////////////////////////////////////////////////////////////// + //Init Traffic by Anna + ////////////////////////////////////////////////////////////////////////// + factory = new TrafficMovementFactory(); + factory->initTrafficMovement(/*para->getParH(0)->c*/); ////////////////////////////////////////////////////////////////////////// @@ -1057,6 +1064,11 @@ void Simulation::run() // ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// + //Calculate Traffic by Anna + if (t % 100 == 0) + factory->calculateTimestep(t/100, t); + //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// ////// comp @@ -1086,7 +1098,7 @@ void Simulation::run() QADDirichletDev27( para->getParD(0)->numberofthreads, para->getParD(0)->nx, para->getParD(0)->ny, para->getParD(0)->d0SP.f[0], para->getParD(0)->d27.f[0], para->getParD(0)->TempVel.tempPulse, para->getParD(0)->diffusivity, para->getParD(0)->concIndex, para->getParD(0)->QGeom.q27[0], - para->getParD(0)->numberOfPointsConc, para->getParD(0)->numberOfPointsConc, para->getParD(0)->omega, + para->getParD(0)->QGeom.kQ, para->getParD(0)->numberOfPointsConc, para->getParD(0)->omega, para->getParD(0)->neighborX_SP, para->getParD(0)->neighborY_SP, para->getParD(0)->neighborZ_SP, para->getParD(0)->size_Mat_SP, para->getParD(0)->evenOrOdd); getLastCudaError("QADDirichletDev27 execution failed"); diff --git a/src/VirtualFluids_GPU/LBM/Simulation.h b/src/VirtualFluids_GPU/LBM/Simulation.h index e5345fe2a..73e350a5b 100644 --- a/src/VirtualFluids_GPU/LBM/Simulation.h +++ b/src/VirtualFluids_GPU/LBM/Simulation.h @@ -21,6 +21,7 @@ class RestartPostprocessor; class ForceCalculations; class DataWriter; class Kernel; +class TrafficMovementFactory; class VF_PUBLIC Simulation @@ -89,6 +90,7 @@ protected: //////////////////////////////////////////////////////////////////////////// EnstrophyAnalyzer *enstrophyWriter; //////////////////////////////////////////////////////////////////////////// + TrafficMovementFactory *factory; }; #endif diff --git a/targets/apps/LBM/TrafficTest/TrafficTest.cpp b/targets/apps/LBM/TrafficTest/TrafficTest.cpp index 3369ed6b6..cf974aa7a 100644 --- a/targets/apps/LBM/TrafficTest/TrafficTest.cpp +++ b/targets/apps/LBM/TrafficTest/TrafficTest.cpp @@ -12,21 +12,21 @@ int main() { - uint numberOfTimesteps = 50; + uint numberOfTimesteps = 5; //Logger + logging::Logger::addStream(&std::cout); + logging::Logger::setDebugLevel(logging::Logger::Level::INFO_LOW); + logging::Logger::timeStamp(logging::Logger::ENABLE); + logging::Logger::enablePrintedRankNumbers(logging::Logger::ENABLE); - //logging::Logger::addStream(&std::cout); - //logging::Logger::setDebugLevel(logging::Logger::Level::INFO_LOW); - //logging::Logger::timeStamp(logging::Logger::ENABLE); - //logging::Logger::enablePrintedRankNumbers(logging::Logger::ENABLE); TrafficMovementFactory factory = TrafficMovementFactory(); factory.initTrafficMovement(); for (uint step = 1; step <= numberOfTimesteps; step++) { - factory.calculateTimestep(step); + factory.calculateTimestep(step,step); } std::cout << std::endl << std::endl; diff --git a/targets/libs/VirtualFluids_GPU/CMakeLists.txt b/targets/libs/VirtualFluids_GPU/CMakeLists.txt index 0a5661ab4..c350a2be2 100644 --- a/targets/libs/VirtualFluids_GPU/CMakeLists.txt +++ b/targets/libs/VirtualFluids_GPU/CMakeLists.txt @@ -3,16 +3,18 @@ setTargetNameToFolderName(${CMAKE_CURRENT_LIST_DIR}) set(linkDirectories "") IF(MSVC) - set(libsToLink ws2_32 GridGenerator VirtualFluidsBasics Core) # ws_32 throws an error on Phoenix + set(libsToLink ws2_32 GridGenerator VirtualFluidsBasics Core Traffic) # ws_32 throws an error on Phoenix ELSE(MSVC) - set(libsToLink GridGenerator VirtualFluidsBasics Core) + set(libsToLink GridGenerator VirtualFluidsBasics Core Traffic) ENDIF(MSVC) set(includeDirectories ${CMAKE_SOURCE_DIR}/src/${targetName} ${CMAKE_SOURCE_DIR}/src ${CMAKE_SOURCE_DIR}/src/GridGenerator ${CMAKE_SOURCE_DIR}/src/VirtualFluidsBasics - ${CMAKE_SOURCE_DIR}/src/Core ) + ${CMAKE_SOURCE_DIR}/src/Core + ${CMAKE_SOURCE_DIR}/src/Traffic + ) #glob files and save in MY_SRCS include(CMakePackage.cmake) -- GitLab