diff --git a/source/Applications/Thermoplast/config.txt b/source/Applications/Thermoplast/config.txt index 654263c4da9faa0729d3e3896f191a98c009391e..bce2bb29f67465bb4492d7ca4023ca12eab3d009 100644 --- a/source/Applications/Thermoplast/config.txt +++ b/source/Applications/Thermoplast/config.txt @@ -10,7 +10,7 @@ boundingBox = 60 1370 130 190 1530 320 #test bb blocknx = 10 10 10 #blocknx = 300 420 320 endTime = 100000 -outTime = 1 +outTime = 100 availMem = 25e9 uLB = 0.1 @@ -31,7 +31,7 @@ pathGeo = d:/Projects/ThermoPlast/SimGeo michel = /michel.stl plexiglas = /plexiglas.stl -pathOut = g:/temp/thermoplastCluster1 +pathOut = g:/temp/thermoplast #restart cpStart = 20000000 diff --git a/source/Applications/Thermoplast/thermoplast.cpp b/source/Applications/Thermoplast/thermoplast.cpp index 484795506a7c798ef376ecf89162b804951106fd..353dc56051d8ad1678cf69d4d8fac37d52140fca 100644 --- a/source/Applications/Thermoplast/thermoplast.cpp +++ b/source/Applications/Thermoplast/thermoplast.cpp @@ -551,7 +551,7 @@ void thermoplast(string configname) // createSphereCoProcessor->addGeoObject(sphere, Vector3D(uLB, 0.0, 0.0)); // } - createSphereCoProcessor->process(0); + //createSphereCoProcessor->process(0); //write data for visualization of macroscopic quantities SPtr<UbScheduler> visSch(new UbScheduler(outTime)); diff --git a/source/DemCoupling/CreateDemObjectsCoProcessor.cpp b/source/DemCoupling/CreateDemObjectsCoProcessor.cpp index 58790643ffce06d177bbd1fa417d88f357947dd6..b7401d07f04b1a17a2959b7475cd796d30a3cac7 100644 --- a/source/DemCoupling/CreateDemObjectsCoProcessor.cpp +++ b/source/DemCoupling/CreateDemObjectsCoProcessor.cpp @@ -49,7 +49,7 @@ void CreateDemObjectsCoProcessor::process(double step) if (comm->isRoot()) UBLOG(logINFO, "CreateDemObjectsCoProcessor::process start step: " << istep); timer.resetAndStart(); #endif - + createGeoObjects(); #ifdef TIMING @@ -59,10 +59,10 @@ void CreateDemObjectsCoProcessor::process(double step) #endif demCoProcessor->distributeIDs(); -// -//#ifdef TIMING -// if (comm->isRoot()) UBLOG(logINFO, "demCoProcessor->distributeIDs() time = "<<timer.stop()<<" s"); -//#endif + +#ifdef TIMING + if (comm->isRoot()) UBLOG(logINFO, "demCoProcessor->distributeIDs() time = "<<timer.stop()<<" s"); +#endif } diff --git a/source/DemCoupling/CreateDemObjectsCoProcessor.h b/source/DemCoupling/CreateDemObjectsCoProcessor.h index ffb26a35d10b5c7a6d469d5fdfa8d44da195221c..bfd0d0c641d2a7ea0d641e4dcff1f7b475d46b5e 100644 --- a/source/DemCoupling/CreateDemObjectsCoProcessor.h +++ b/source/DemCoupling/CreateDemObjectsCoProcessor.h @@ -7,7 +7,7 @@ #include <array> -//#define TIMING +#define TIMING #ifdef TIMING #include "UbTiming.h" diff --git a/source/DemCoupling/DemCoProcessor.cpp b/source/DemCoupling/DemCoProcessor.cpp index 56dc9cdecf5fc1f76722fa55e6055843e1f71fdc..be3d7207075e4601c612f232ba7ca070b0f22b0d 100644 --- a/source/DemCoupling/DemCoProcessor.cpp +++ b/source/DemCoupling/DemCoProcessor.cpp @@ -585,7 +585,7 @@ bool DemCoProcessor::isSpheresIntersection(double centerX1, double centerX2, dou void DemCoProcessor::distributeIDs() { - std::vector<int> peIDsSend; + std::vector<unsigned long long> peIDsSend; std::vector<int> vfIDsSend; for (int i = 0; i < interactors.size(); i++) @@ -597,13 +597,13 @@ void DemCoProcessor::distributeIDs() } } - std::vector<int> peIDsRecv; + std::vector<unsigned long long> peIDsRecv; std::vector<int> vfIDsRecv; comm->allGather(peIDsSend, peIDsRecv); comm->allGather(vfIDsSend, vfIDsRecv); - std::map<int, int> idMap; + std::map<int, unsigned long long> idMap; for (int i = 0; i < peIDsRecv.size(); i++) { @@ -612,25 +612,25 @@ void DemCoProcessor::distributeIDs() for (int i = 0; i < interactors.size(); i++) { - std::map<int, int>::const_iterator it; + std::map<int, unsigned long long>::const_iterator it; if ((it=idMap.find(interactors[i]->getID())) == idMap.end()) { throw UbException(UB_EXARGS, "Interactor ID is invalid! The DEM object may be not in PE domain!"); } - std::dynamic_pointer_cast<PePhysicsEngineGeometryAdapter>(physicsEngineGeometrieAdapters[i])->setId(it->second); + std::dynamic_pointer_cast<PePhysicsEngineGeometryAdapter>(physicsEngineGeometrieAdapters[i])->setSystemId(it->second); //std::dynamic_pointer_cast<PePhysicsEngineGeometryAdapter>(physicsEngineGeometries[i])->setId(idMap.find(interactors[i]->getID())->second); } - for (int i = 0; i < physicsEngineGeometrieAdapters.size(); i++) - { - //physicsEngineSolver->updateGeometry(physicsEngineGeometries[i]); - if (std::dynamic_pointer_cast<PePhysicsEngineGeometryAdapter>(physicsEngineGeometrieAdapters[i])->isActive()) - { - interactors[i]->setPhysicsEngineGeometry(physicsEngineGeometrieAdapters[i]); - } - } + //for (int i = 0; i < physicsEngineGeometrieAdapters.size(); i++) + //{ + // //physicsEngineSolver->updateGeometry(physicsEngineGeometries[i]); + // if (std::dynamic_pointer_cast<PePhysicsEngineGeometryAdapter>(physicsEngineGeometrieAdapters[i])->isActive()) + // { + // interactors[i]->setPhysicsEngineGeometry(physicsEngineGeometrieAdapters[i]); + // } + //} } void DemCoProcessor::setBlockVisitor(std::shared_ptr<BoundaryConditionsBlockVisitor> boundaryConditionsBlockVisitor) diff --git a/source/DemCoupling/physicsEngineAdapter/pe/PePhysicsEngineGeometryAdapter.h b/source/DemCoupling/physicsEngineAdapter/pe/PePhysicsEngineGeometryAdapter.h index 03349b61cfc6908f35b0cd5781bcd69bb579792c..feea998f902724217bd88fffcea928820bf3bb3d 100644 --- a/source/DemCoupling/physicsEngineAdapter/pe/PePhysicsEngineGeometryAdapter.h +++ b/source/DemCoupling/physicsEngineAdapter/pe/PePhysicsEngineGeometryAdapter.h @@ -7,6 +7,7 @@ #include "PhysicsEngineGeometryAdapter.h" +#include <core\DataTypes.h> namespace walberla { @@ -56,13 +57,14 @@ public: int shadowCounter; int counter; - int getSystemId() const { return systemId; } - void setSystemId(int val) { systemId = val; } + unsigned long long getSystemId() const { return systemId; } + void setSystemId(unsigned long long val) { systemId = val; } private: walberla::pe::RigidBody* peGeoObject; //unsigned long long id; int id; - int systemId; + //walberla::id_t systemId; + unsigned long long systemId; bool active; }; diff --git a/source/DemCoupling/physicsEngineAdapter/pe/PePhysicsEngineSolverAdapter.cpp b/source/DemCoupling/physicsEngineAdapter/pe/PePhysicsEngineSolverAdapter.cpp index fd227a65b7079c6bfa2a952cca487834a9851c77..7e5f5fccef7f7b4c9da9498d2c30ab284479715f 100644 --- a/source/DemCoupling/physicsEngineAdapter/pe/PePhysicsEngineSolverAdapter.cpp +++ b/source/DemCoupling/physicsEngineAdapter/pe/PePhysicsEngineSolverAdapter.cpp @@ -46,8 +46,8 @@ std::shared_ptr<PhysicsEngineGeometryAdapter> PePhysicsEngineSolverAdapter::crea peGeometryAdapter->setId(id); peGeometryAdapter->setSystemId(peGeometry->getSystemID()); - if(peGeometry->getSystemID() != id+1) - UB_THROW(UbException(UB_EXARGS, "id="+UbSystem::toString(id)+" does not match pe::SystemId="+UbSystem::toString(peGeometry->getSystemID()))); + //if(peGeometry->getSystemID() != id+1) + // UB_THROW(UbException(UB_EXARGS, "id="+UbSystem::toString(id)+" does not match pe::SystemId="+UbSystem::toString(peGeometry->getSystemID()))); peGeometryAdapter->setActive(); peGeometryAdapter->setGeometry(peGeometry); diff --git a/source/VirtualFluidsCore/Parallel/Communicator.h b/source/VirtualFluidsCore/Parallel/Communicator.h index aa2e3d35d1371dbeb789e38d6a75848624b9df8e..3d07e06d41366c268e3d4d78e7d4ff7761e3fe70 100644 --- a/source/VirtualFluidsCore/Parallel/Communicator.h +++ b/source/VirtualFluidsCore/Parallel/Communicator.h @@ -33,10 +33,12 @@ public: virtual std::vector<int> gather(std::vector<int>& values) = 0; virtual std::vector<float> gather(std::vector<float>& values) = 0; virtual std::vector<double> gather(std::vector<double>& values) = 0; + virtual std::vector<unsigned long long> gather(std::vector<unsigned long long>& values) = 0; virtual void allGather(std::vector<int>& svalues, std::vector<int>& rvalues) = 0; virtual void allGather(std::vector<float>& svalues, std::vector<float>& rvalues) = 0; virtual void allGather(std::vector<double>& svalues, std::vector<double>& rvalues) = 0; + virtual void allGather(std::vector<unsigned long long>& svalues, std::vector<unsigned long long>& rvalues) = 0; virtual void broadcast(int& value) = 0; virtual void broadcast(float& value) = 0; diff --git a/source/VirtualFluidsCore/Parallel/MPICommunicator.cpp b/source/VirtualFluidsCore/Parallel/MPICommunicator.cpp index e2c32cdbcb8779150ea58e75eacd0bc710f5e925..cbd3cdf105c5567227b044ce1f3188cec680fde6 100644 --- a/source/VirtualFluidsCore/Parallel/MPICommunicator.cpp +++ b/source/VirtualFluidsCore/Parallel/MPICommunicator.cpp @@ -97,6 +97,11 @@ vector<double> MPICommunicator::gather(vector<double>& values) return gather<double>(values); } ////////////////////////////////////////////////////////////////////////// +std::vector<unsigned long long> MPICommunicator::gather(std::vector<unsigned long long>& values) +{ + return gather<unsigned long long>(values); +} +////////////////////////////////////////////////////////////////////////// int MPICommunicator::getProcessID() { return PID; @@ -193,6 +198,11 @@ void MPICommunicator::allGather(std::vector<double>& svalues, std::vector<double allGather<double>(svalues, rvalues); } ////////////////////////////////////////////////////////////////////////// +void MPICommunicator::allGather(std::vector<unsigned long long>& svalues, std::vector<unsigned long long>& rvalues) +{ + allGather<unsigned long long>(svalues, rvalues); +} +////////////////////////////////////////////////////////////////////////// void MPICommunicator::broadcast(std::vector<int>& values) { broadcast<int>(values); diff --git a/source/VirtualFluidsCore/Parallel/MPICommunicator.h b/source/VirtualFluidsCore/Parallel/MPICommunicator.h index f57a7db4c9a1346239142517e54e28360d69cbf5..9338a29259f6df3d71881a8095df2a4ff368b626 100644 --- a/source/VirtualFluidsCore/Parallel/MPICommunicator.h +++ b/source/VirtualFluidsCore/Parallel/MPICommunicator.h @@ -45,10 +45,12 @@ public: std::vector<int> gather(std::vector<int>& values); std::vector<float> gather(std::vector<float>& values); std::vector<double> gather(std::vector<double>& values); + std::vector<unsigned long long> gather(std::vector<unsigned long long>& values); void allGather(std::vector<int>& svalues, std::vector<int>& rvalues); void allGather(std::vector<float>& svalues, std::vector<float>& rvalues); void allGather(std::vector<double>& svalues, std::vector<double>& rvalues); + void allGather(std::vector<unsigned long long>& svalues, std::vector<unsigned long long>& rvalues); void broadcast(int& value); void broadcast(float& value); @@ -85,6 +87,7 @@ std::vector<T> MPICommunicator::gather(std::vector<T>& values) if ((std::string)typeid(T).name()==(std::string)typeid(double).name()) mpiDataType = MPI_DOUBLE; else if ((std::string)typeid(T).name()==(std::string)typeid(float).name()) mpiDataType = MPI_FLOAT; else if ((std::string)typeid(T).name()==(std::string)typeid(int).name()) mpiDataType = MPI_INT; + else if ((std::string)typeid(T).name()==(std::string)typeid(unsigned long long).name()) mpiDataType = MPI_UNSIGNED_LONG_LONG; else throw UbException(UB_EXARGS, "no MpiDataType for T"+(std::string)typeid(T).name()); int count = static_cast<int> (values.size()); @@ -107,6 +110,7 @@ void MPICommunicator::allGather(std::vector<T>& svalues, std::vector<T>& rvalues if ((std::string)typeid(T).name()==(std::string)typeid(double).name()) mpiDataType = MPI_DOUBLE; else if ((std::string)typeid(T).name()==(std::string)typeid(float).name()) mpiDataType = MPI_FLOAT; else if ((std::string)typeid(T).name()==(std::string)typeid(int).name()) mpiDataType = MPI_INT; + else if ((std::string)typeid(T).name()==(std::string)typeid(unsigned long long).name()) mpiDataType = MPI_UNSIGNED_LONG_LONG; else throw UbException(UB_EXARGS, "no MpiDataType for T"+(std::string)typeid(T).name()); int scount;