From bbb025f2b67209d2c0074aa4284d90085c3bfc21 Mon Sep 17 00:00:00 2001 From: Christopher Sherman Date: Mon, 27 Aug 2018 11:24:24 -0700 Subject: [PATCH 1/8] Adding some allreduce calls to the event manager --- .../core/src/managers/EventManager.cpp | 22 +++++++++++++++++++ 1 file changed, 22 insertions(+) diff --git a/src/components/core/src/managers/EventManager.cpp b/src/components/core/src/managers/EventManager.cpp index 1cdbbf56e04..70c70b884ea 100644 --- a/src/components/core/src/managers/EventManager.cpp +++ b/src/components/core/src/managers/EventManager.cpp @@ -180,9 +180,17 @@ void EventManager::Run(dataRepository::ManagedGroup * domain) this->forSubGroups([&]( EventBase * subEvent ) -> void { + // Calculate the event and sub-event forecasts subEvent->CheckEvents(time, dt, cycle, domain); integer eventForecast = subEvent->GetForecast(); + #if USE_MPI + integer eventForecast_global; + MPI_Reduce(&eventForecast, &eventForecast_global, 1, MPI_INT, MPI_MIN, 0, MPI_COMM_WORLD); + eventForecast = eventForecast_global; + #endif + + // Execute, signal events if (eventForecast == 1) { subEvent->SignalToPrepareForExecution(time, dt, cycle, domain); @@ -193,6 +201,7 @@ void EventManager::Run(dataRepository::ManagedGroup * domain) subEvent->Execute(time, dt, cycle, domain); } + // Estimate the time-step for the next cycle real64 requestedDt = 1e6; if (eventForecast <= 1) { @@ -200,8 +209,15 @@ void EventManager::Run(dataRepository::ManagedGroup * domain) } nextDt = std::min(requestedDt, nextDt); + // Check the exit flag exitFlag += subEvent->GetExitFlag(); + #if USE_MPI + integer exitFlag_global; + MPI_Reduce(&exitFlag, &exitFlag_global, 1, MPI_INT, MPI_SUM, 0, MPI_COMM_WORLD); + exitFlag = exitFlag_global; + #endif + // Debug information if (verbosity > 0) { @@ -213,6 +229,12 @@ void EventManager::Run(dataRepository::ManagedGroup * domain) ++cycle; dt = nextDt; dt = (time + dt > maxTime) ? (maxTime - time) : dt; + + #if USE_MPI + real64 dt_global; + MPI_Reduce(&dt, &dt_global, 1, MPI_DOUBLE, MPI_MIN, 0, MPI_COMM_WORLD); + dt = dt_global; + #endif } From 4334656b9ca0593c3f1a0830c94fb709250db8e2 Mon Sep 17 00:00:00 2001 From: Christopher Sherman Date: Mon, 27 Aug 2018 16:05:33 -0700 Subject: [PATCH 2/8] Working on the event manager mpi handling --- .../core/src/managers/EventManager.cpp | 56 +++++++++++++------ .../core/src/managers/Events/EventBase.cpp | 20 +++++++ .../core/src/managers/Events/EventBase.hpp | 3 +- src/components/cxx-utilities | 2 +- 4 files changed, 60 insertions(+), 21 deletions(-) diff --git a/src/components/core/src/managers/EventManager.cpp b/src/components/core/src/managers/EventManager.cpp index 70c70b884ea..9e8e1ade6ca 100644 --- a/src/components/core/src/managers/EventManager.cpp +++ b/src/components/core/src/managers/EventManager.cpp @@ -166,6 +166,11 @@ void EventManager::Run(dataRepository::ManagedGroup * domain) integer const verbosity = this->getReference(viewKeys.verbosity); integer exitFlag = 0; + integer rank = 0; + #if USE_MPI + MPI_Comm_rank(MPI_COMM_WORLD, &rank); + #endif + // Setup event targets this->forSubGroups([]( EventBase * subEvent ) -> void { @@ -176,20 +181,19 @@ void EventManager::Run(dataRepository::ManagedGroup * domain) while((time < maxTime) && (cycle < maxCycle) && (exitFlag == 0)) { real64 nextDt = std::numeric_limits::max(); - std::cout << "Time: " << time << "s, dt:" << dt << "s, Cycle: " << cycle << std::endl; - + if (rank == 0) + { + std::cout << "Time: " << time << "s, dt:" << dt << "s, Cycle: " << cycle << std::endl; + } + this->forSubGroups([&]( EventBase * subEvent ) -> void { // Calculate the event and sub-event forecasts + // Note: because events can be nested, the mpi reduce for event + // forecasts need to happen in EventBase. subEvent->CheckEvents(time, dt, cycle, domain); integer eventForecast = subEvent->GetForecast(); - #if USE_MPI - integer eventForecast_global; - MPI_Reduce(&eventForecast, &eventForecast_global, 1, MPI_INT, MPI_MIN, 0, MPI_COMM_WORLD); - eventForecast = eventForecast_global; - #endif - // Execute, signal events if (eventForecast == 1) { @@ -211,15 +215,9 @@ void EventManager::Run(dataRepository::ManagedGroup * domain) // Check the exit flag exitFlag += subEvent->GetExitFlag(); - - #if USE_MPI - integer exitFlag_global; - MPI_Reduce(&exitFlag, &exitFlag_global, 1, MPI_INT, MPI_SUM, 0, MPI_COMM_WORLD); - exitFlag = exitFlag_global; - #endif - + // Debug information - if (verbosity > 0) + if ((verbosity > 0) && (rank == 0)) { std::cout << " Event: " << subEvent->getName() << ", f=" << eventForecast << ", dt_r=" << requestedDt << std::endl; } @@ -231,15 +229,37 @@ void EventManager::Run(dataRepository::ManagedGroup * domain) dt = (time + dt > maxTime) ? (maxTime - time) : dt; #if USE_MPI + if (rank == 0) + { + std::cout << "Cycle " << cycle << " dt requests (pre_mpi):" << std::endl; + } + std::cout << rank << ", " << cycle << ", " << dt << " (pre_mpi)" << std::endl; + + real64 dt_global; - MPI_Reduce(&dt, &dt_global, 1, MPI_DOUBLE, MPI_MIN, 0, MPI_COMM_WORLD); + MPI_Allreduce(&dt, &dt_global, 1, MPI_DOUBLE, MPI_MIN, MPI_COMM_WORLD); dt = dt_global; + + integer exitFlag_global; + MPI_Allreduce(&exitFlag, &exitFlag_global, 1, MPI_INT, MPI_SUM, MPI_COMM_WORLD); + exitFlag = exitFlag_global; + + + if (rank == 0) + { + std::cout << "Cycle " << cycle << " dt requests (post_mpi):" << std::endl; + } + std::cout << rank << ", " << cycle << ", " << dt << " (post_mpi)" << std::endl; #endif } // Cleanup - std::cout << "Cleaning up events" << std::endl; + if (rank == 0) + { + std::cout << "Cleaning up events" << std::endl; + } + this->forSubGroups([&]( EventBase * subEvent ) -> void { subEvent->Cleanup(time, cycle, domain); diff --git a/src/components/core/src/managers/Events/EventBase.cpp b/src/components/core/src/managers/Events/EventBase.cpp index c60023944b1..6400156d976 100644 --- a/src/components/core/src/managers/Events/EventBase.cpp +++ b/src/components/core/src/managers/Events/EventBase.cpp @@ -240,6 +240,13 @@ void EventBase::CheckEvents(real64 const time, { subEvent->CheckEvents(time, dt, cycle, domain); }); + + // Synchronize + #if USE_MPI + integer eventForecast_global; + MPI_Allreduce(&m_eventForecast, &eventForecast_global, 1, MPI_INT, MPI_MIN, MPI_COMM_WORLD); + m_eventForecast = eventForecast_global; + #endif } } @@ -306,6 +313,8 @@ void EventBase::Step(real64 const time, integer const cycle, dataRepository::ManagedGroup * domain ) { + // Note: do we need an mpi barrier here? + if (m_target != nullptr) { m_target->Execute(time, dt, cycle, domain); @@ -377,4 +386,15 @@ void EventBase::Cleanup(real64 const& time_n, +integer EventBase::GetExitFlag() +{ + this->forSubGroups([&]( EventBase * subEvent ) -> void + { + m_exitFlag += subEvent->GetExitFlag(); + }); + + return m_exitFlag; +} + + } /* namespace geosx */ diff --git a/src/components/core/src/managers/Events/EventBase.hpp b/src/components/core/src/managers/Events/EventBase.hpp index ccfd46fb25c..58c839de5cd 100644 --- a/src/components/core/src/managers/Events/EventBase.hpp +++ b/src/components/core/src/managers/Events/EventBase.hpp @@ -160,13 +160,12 @@ class EventBase : public ExecutableGroup integer GetForecast(){ return m_eventForecast; } void SetForecast(integer forecast){ m_eventForecast = forecast; } - integer GetExitFlag(){ return m_exitFlag; } + integer GetExitFlag(); void SetExitFlag(integer flag){ m_exitFlag = flag; } private: integer m_eventForecast = 0; integer m_exitFlag = 0; - }; } /* namespace geosx */ diff --git a/src/components/cxx-utilities b/src/components/cxx-utilities index aba79d70e6a..e385f6154a8 160000 --- a/src/components/cxx-utilities +++ b/src/components/cxx-utilities @@ -1 +1 @@ -Subproject commit aba79d70e6a4ac0705c5c867cdf3749647ee0c12 +Subproject commit e385f6154a832b1481a579451900b1b9618ce80c From 2aed13c88598559762cd110d78d531eada99c75b Mon Sep 17 00:00:00 2001 From: Christopher Sherman Date: Mon, 27 Aug 2018 16:09:57 -0700 Subject: [PATCH 3/8] Removing some debug info --- src/components/core/src/managers/EventManager.cpp | 14 -------------- 1 file changed, 14 deletions(-) diff --git a/src/components/core/src/managers/EventManager.cpp b/src/components/core/src/managers/EventManager.cpp index 9e8e1ade6ca..467d869f348 100644 --- a/src/components/core/src/managers/EventManager.cpp +++ b/src/components/core/src/managers/EventManager.cpp @@ -229,13 +229,6 @@ void EventManager::Run(dataRepository::ManagedGroup * domain) dt = (time + dt > maxTime) ? (maxTime - time) : dt; #if USE_MPI - if (rank == 0) - { - std::cout << "Cycle " << cycle << " dt requests (pre_mpi):" << std::endl; - } - std::cout << rank << ", " << cycle << ", " << dt << " (pre_mpi)" << std::endl; - - real64 dt_global; MPI_Allreduce(&dt, &dt_global, 1, MPI_DOUBLE, MPI_MIN, MPI_COMM_WORLD); dt = dt_global; @@ -243,13 +236,6 @@ void EventManager::Run(dataRepository::ManagedGroup * domain) integer exitFlag_global; MPI_Allreduce(&exitFlag, &exitFlag_global, 1, MPI_INT, MPI_SUM, MPI_COMM_WORLD); exitFlag = exitFlag_global; - - - if (rank == 0) - { - std::cout << "Cycle " << cycle << " dt requests (post_mpi):" << std::endl; - } - std::cout << rank << ", " << cycle << ", " << dt << " (post_mpi)" << std::endl; #endif } From b88a5f084fdf3ea8a12cb8ea8beef0637ceee57b Mon Sep 17 00:00:00 2001 From: Christopher Sherman Date: Tue, 28 Aug 2018 16:31:34 -0700 Subject: [PATCH 4/8] Removing a hard-coded maximum timestep value --- src/components/core/src/managers/EventManager.cpp | 7 +++---- 1 file changed, 3 insertions(+), 4 deletions(-) diff --git a/src/components/core/src/managers/EventManager.cpp b/src/components/core/src/managers/EventManager.cpp index 467d869f348..04e50ff70a4 100644 --- a/src/components/core/src/managers/EventManager.cpp +++ b/src/components/core/src/managers/EventManager.cpp @@ -206,12 +206,11 @@ void EventManager::Run(dataRepository::ManagedGroup * domain) } // Estimate the time-step for the next cycle - real64 requestedDt = 1e6; if (eventForecast <= 1) { - requestedDt = subEvent->GetTimestepRequest(time + dt); + real64 requestedDt = subEvent->GetTimestepRequest(time + dt); + nextDt = std::min(requestedDt, nextDt); } - nextDt = std::min(requestedDt, nextDt); // Check the exit flag exitFlag += subEvent->GetExitFlag(); @@ -219,7 +218,7 @@ void EventManager::Run(dataRepository::ManagedGroup * domain) // Debug information if ((verbosity > 0) && (rank == 0)) { - std::cout << " Event: " << subEvent->getName() << ", f=" << eventForecast << ", dt_r=" << requestedDt << std::endl; + std::cout << " Event: " << subEvent->getName() << ", f=" << eventForecast << std::endl; } }); From bfdf835e49a123f7bce535f558a04f51016dedda Mon Sep 17 00:00:00 2001 From: Christopher Sherman Date: Wed, 29 Aug 2018 15:32:43 -0700 Subject: [PATCH 5/8] Being more conservative with use of mpi calls, adding a dummy solver for testing time-stepping behavior --- .../core/src/managers/EventManager.cpp | 30 ++++- .../core/src/managers/Events/EventBase.cpp | 7 -- .../core/src/managers/Events/HaltEvent.cpp | 8 ++ .../src/managers/Events/PeriodicEvent.cpp | 8 ++ .../core/src/physicsSolvers/CMakeLists.txt | 2 + .../src/physicsSolvers/src/DummySolver.cpp | 107 ++++++++++++++++++ .../src/physicsSolvers/src/DummySolver.hpp | 64 +++++++++++ 7 files changed, 213 insertions(+), 13 deletions(-) create mode 100644 src/components/core/src/physicsSolvers/src/DummySolver.cpp create mode 100644 src/components/core/src/physicsSolvers/src/DummySolver.hpp diff --git a/src/components/core/src/managers/EventManager.cpp b/src/components/core/src/managers/EventManager.cpp index 04e50ff70a4..08a409d1441 100644 --- a/src/components/core/src/managers/EventManager.cpp +++ b/src/components/core/src/managers/EventManager.cpp @@ -167,8 +167,14 @@ void EventManager::Run(dataRepository::ManagedGroup * domain) integer exitFlag = 0; integer rank = 0; + integer comm_size = 1; + real64 *send_buffer = nullptr; + real64 *receive_buffer = nullptr; #if USE_MPI MPI_Comm_rank(MPI_COMM_WORLD, &rank); + MPI_Comm_size(MPI_COMM_WORLD, &comm_size); + send_buffer = static_cast(malloc(2 * sizeof(real64))); + receive_buffer = static_cast(malloc(2 * sizeof(real64) * comm_size)); #endif // Setup event targets @@ -228,13 +234,25 @@ void EventManager::Run(dataRepository::ManagedGroup * domain) dt = (time + dt > maxTime) ? (maxTime - time) : dt; #if USE_MPI - real64 dt_global; - MPI_Allreduce(&dt, &dt_global, 1, MPI_DOUBLE, MPI_MIN, MPI_COMM_WORLD); - dt = dt_global; + send_buffer[0] = dt; + send_buffer[1] = static_cast(exitFlag); + MPI_Gather(send_buffer, 2, MPI_DOUBLE, receive_buffer, 2, MPI_DOUBLE, 0, MPI_COMM_WORLD); - integer exitFlag_global; - MPI_Allreduce(&exitFlag, &exitFlag_global, 1, MPI_INT, MPI_SUM, MPI_COMM_WORLD); - exitFlag = exitFlag_global; + if (rank == 0) + { + for (integer ii=0; ii 0.5) + { + exitFlag = 1; + } #endif } diff --git a/src/components/core/src/managers/Events/EventBase.cpp b/src/components/core/src/managers/Events/EventBase.cpp index 6400156d976..80990c21913 100644 --- a/src/components/core/src/managers/Events/EventBase.cpp +++ b/src/components/core/src/managers/Events/EventBase.cpp @@ -240,13 +240,6 @@ void EventBase::CheckEvents(real64 const time, { subEvent->CheckEvents(time, dt, cycle, domain); }); - - // Synchronize - #if USE_MPI - integer eventForecast_global; - MPI_Allreduce(&m_eventForecast, &eventForecast_global, 1, MPI_INT, MPI_MIN, MPI_COMM_WORLD); - m_eventForecast = eventForecast_global; - #endif } } diff --git a/src/components/core/src/managers/Events/HaltEvent.cpp b/src/components/core/src/managers/Events/HaltEvent.cpp index f8bebad6c41..bbc10514f66 100644 --- a/src/components/core/src/managers/Events/HaltEvent.cpp +++ b/src/components/core/src/managers/Events/HaltEvent.cpp @@ -86,6 +86,14 @@ void HaltEvent::EstimateEventTiming(real64 const time, m_realDt = currentTime - m_lastTime; m_lastTime = currentTime; integer forecast = static_cast((maxRuntime - (currentTime - m_startTime)) / m_realDt); + + // The timing for the ranks may differ slightly, so synchronize + #if USE_MPI + integer forecast_global; + MPI_Allreduce(&forecast, &forecast_global, 1, MPI_INT, MPI_MIN, MPI_COMM_WORLD); + forecast = forecast_global; + #endif + SetForecast(forecast); if (this->GetForecast() <= 0) diff --git a/src/components/core/src/managers/Events/PeriodicEvent.cpp b/src/components/core/src/managers/Events/PeriodicEvent.cpp index bb3980b8e4e..6dea502e16c 100644 --- a/src/components/core/src/managers/Events/PeriodicEvent.cpp +++ b/src/components/core/src/managers/Events/PeriodicEvent.cpp @@ -245,6 +245,14 @@ void PeriodicEvent::CheckOptionalFunctionThreshold(real64 const time, // Find the function (min, average, max) real64_array stats = function->EvaluateStats(m_functionTarget, time, mySet); result = stats[functionStatOption]; + + // Because the function applied to an object may differ by rank, synchronize + // (Note: this shouldn't occur very often, since it is only called if the base forecast <= 0) + #if USE_MPI + real64 result_global; + MPI_Allreduce(&result, &result_global, 1, MPI_DOUBLE, MPI_MAX, MPI_COMM_WORLD); + result = result_global; + #endif } // Forcast event diff --git a/src/components/core/src/physicsSolvers/CMakeLists.txt b/src/components/core/src/physicsSolvers/CMakeLists.txt index d98738583d0..ad25e5688ba 100644 --- a/src/components/core/src/physicsSolvers/CMakeLists.txt +++ b/src/components/core/src/physicsSolvers/CMakeLists.txt @@ -8,6 +8,7 @@ set(physicsSolvers_headers FiniteVolume/SinglePhaseFlow.hpp SimpleSolvers/LaplaceFEM.hpp src/SolidMechanicsLagrangianFEM.hpp + src/DummySolver.hpp ) # @@ -19,6 +20,7 @@ set(physicsSolvers_sources FiniteVolume/SinglePhaseFlow.cpp SimpleSolvers/LaplaceFEM.cpp src/SolidMechanicsLagrangianFEM.cpp + src/DummySolver.cpp ) diff --git a/src/components/core/src/physicsSolvers/src/DummySolver.cpp b/src/components/core/src/physicsSolvers/src/DummySolver.cpp new file mode 100644 index 00000000000..9eb20e4587b --- /dev/null +++ b/src/components/core/src/physicsSolvers/src/DummySolver.cpp @@ -0,0 +1,107 @@ +/* + *~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + * Copyright (c) 2018, Lawrence Livermore National Security, LLC. + * + * Produced at the Lawrence Livermore National Laboratory + * + * LLNL-CODE-746361 + * + * All rights reserved. See COPYRIGHT for details. + * + * This file is part of the GEOSX Simulation Framework. + * + * GEOSX is a free software; you can redistribute it and/or modify it under + * the terms of the GNU Lesser General Public License (as published by the + * Free Software Foundation) version 2.1 dated February 1999. + *~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + */ + + +#include "DummySolver.hpp" +#include "dataRepository/ManagedGroup.hpp" +#include +#include + +namespace geosx +{ + + +using namespace dataRepository; + + +DummySolver::DummySolver( const std::string& name, + ManagedGroup * const parent ): + SolverBase( name, parent ) +{} + + + +DummySolver::~DummySolver() +{ + // TODO Auto-generated destructor stub +} + + +void DummySolver::FillDocumentationNode() +{ + cxx_utilities::DocumentationNode * const docNode = this->getDocumentationNode(); + SolverBase::FillDocumentationNode(); + + docNode->setName(this->CatalogName()); + docNode->setSchemaType("Node"); + docNode->setShortDescription("Dummy solver for testing time-stepping behavior"); + + docNode->AllocateChildNode( viewKeys.rand_scale.Key(), + viewKeys.rand_scale.Key(), + -1, + "real64", + "real64", + "Scale for modifying requested dt", + "Scale for modifying requested dt", + "1e-9", + "", + 1, + 1, + 0 ); + +} + + +void DummySolver::Initialize( ManagedGroup * const problemManager ) +{ + integer rank = 0; + #if USE_MPI + MPI_Comm_rank(MPI_COMM_WORLD, &rank); + #endif + std::srand(rank * 12345); +} + + +real64 DummySolver::SolverStep( real64 const& time_n, + real64 const& dt, + const int cycleNumber, + DomainPartition * domain ) +{ + std::this_thread::sleep_for(std::chrono::seconds(1)); + return dt; +} + + +real64 DummySolver::GetTimestepRequest(real64 const time) +{ + integer rank = 0; + #if USE_MPI + MPI_Comm_rank(MPI_COMM_WORLD, &rank); + #endif + + real64 const rand_scale = this->getReference(viewKeys.rand_scale); + real64 dt_request = std::rand() * rand_scale; + + std::cout << "time=" << time << ", solver=" << this->getName() << ", rank=" << rank << ", dt_r=" << dt_request << std::endl; + + return dt_request; +} + + +REGISTER_CATALOG_ENTRY( SolverBase, DummySolver, std::string const &, ManagedGroup * const ) +} /* namespace ANST */ diff --git a/src/components/core/src/physicsSolvers/src/DummySolver.hpp b/src/components/core/src/physicsSolvers/src/DummySolver.hpp new file mode 100644 index 00000000000..2ead93256d5 --- /dev/null +++ b/src/components/core/src/physicsSolvers/src/DummySolver.hpp @@ -0,0 +1,64 @@ +/* + *~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + * Copyright (c) 2018, Lawrence Livermore National Security, LLC. + * + * Produced at the Lawrence Livermore National Laboratory + * + * LLNL-CODE-746361 + * + * All rights reserved. See COPYRIGHT for details. + * + * This file is part of the GEOSX Simulation Framework. + * + * GEOSX is a free software; you can redistribute it and/or modify it under + * the terms of the GNU Lesser General Public License (as published by the + * Free Software Foundation) version 2.1 dated February 1999. + *~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + */ + + +#ifndef DUMMYSOLVER_HPP_ +#define DUMMYSOLVER_HPP_ + +#include "physicsSolvers/SolverBase.hpp" + +namespace geosx +{ +namespace dataRepository +{ +class ManagedGroup; +} +class DomainPartition; + +class DummySolver : public SolverBase +{ +public: + DummySolver( const std::string& name, + ManagedGroup * const parent ); + + + virtual ~DummySolver() override; + + static string CatalogName() { return "DummySolver"; } + + virtual void FillDocumentationNode() override; + + virtual void Initialize( ManagedGroup * const problemManager ) override final; + + virtual real64 SolverStep( real64 const& time_n, + real64 const& dt, + integer const cycleNumber, + DomainPartition * domain ) override; + + virtual real64 GetTimestepRequest(real64 const time) override; + + struct viewKeysStruct + { + dataRepository::ViewKey rand_scale = { "rand_scale" }; + } viewKeys; + +}; + +} /* namespace geosx */ + +#endif /* DUMMYSOLVER_HPP_ */ From 1adf510152b79ec2c1543d9acc5cfa832f9982ed Mon Sep 17 00:00:00 2001 From: Christopher Sherman Date: Thu, 30 Aug 2018 08:52:36 -0700 Subject: [PATCH 6/8] Changing a hard-coded limit in eventBase --- src/components/core/src/managers/Events/EventBase.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/components/core/src/managers/Events/EventBase.cpp b/src/components/core/src/managers/Events/EventBase.cpp index 80990c21913..0ceefc550b9 100644 --- a/src/components/core/src/managers/Events/EventBase.cpp +++ b/src/components/core/src/managers/Events/EventBase.cpp @@ -88,7 +88,7 @@ void EventBase::FillDocumentationNode() "real64", "end time", "end time", - "1.0e9", + "1.0e100", "", 0, 1, From ba28f934c7a48f0c035c5226314ae7cbcc58ce76 Mon Sep 17 00:00:00 2001 From: Christopher Sherman Date: Fri, 31 Aug 2018 14:49:28 -0700 Subject: [PATCH 7/8] Updatind the buffer in the event manager --- src/components/core/src/managers/EventManager.cpp | 9 ++++----- 1 file changed, 4 insertions(+), 5 deletions(-) diff --git a/src/components/core/src/managers/EventManager.cpp b/src/components/core/src/managers/EventManager.cpp index 08a409d1441..32d82075077 100644 --- a/src/components/core/src/managers/EventManager.cpp +++ b/src/components/core/src/managers/EventManager.cpp @@ -166,16 +166,15 @@ void EventManager::Run(dataRepository::ManagedGroup * domain) integer const verbosity = this->getReference(viewKeys.verbosity); integer exitFlag = 0; + // Setup MPI communication integer rank = 0; integer comm_size = 1; - real64 *send_buffer = nullptr; - real64 *receive_buffer = nullptr; #if USE_MPI MPI_Comm_rank(MPI_COMM_WORLD, &rank); MPI_Comm_size(MPI_COMM_WORLD, &comm_size); - send_buffer = static_cast(malloc(2 * sizeof(real64))); - receive_buffer = static_cast(malloc(2 * sizeof(real64) * comm_size)); #endif + real64 send_buffer[2]; + array1d receive_buffer(2 * comm_size); // Setup event targets this->forSubGroups([]( EventBase * subEvent ) -> void @@ -236,7 +235,7 @@ void EventManager::Run(dataRepository::ManagedGroup * domain) #if USE_MPI send_buffer[0] = dt; send_buffer[1] = static_cast(exitFlag); - MPI_Gather(send_buffer, 2, MPI_DOUBLE, receive_buffer, 2, MPI_DOUBLE, 0, MPI_COMM_WORLD); + MPI_Gather(send_buffer, 2, MPI_DOUBLE, receive_buffer.data(), 2, MPI_DOUBLE, 0, MPI_COMM_WORLD); if (rank == 0) { From 3df819a4a7c9ff00039d6c0fabd75c64b39d874d Mon Sep 17 00:00:00 2001 From: Christopher Sherman Date: Fri, 31 Aug 2018 15:52:35 -0700 Subject: [PATCH 8/8] Moving dummy solver to the correct location --- .../src => coreComponents}/physicsSolvers/src/DummySolver.cpp | 0 .../src => coreComponents}/physicsSolvers/src/DummySolver.hpp | 0 2 files changed, 0 insertions(+), 0 deletions(-) rename src/{components/core/src => coreComponents}/physicsSolvers/src/DummySolver.cpp (100%) rename src/{components/core/src => coreComponents}/physicsSolvers/src/DummySolver.hpp (100%) diff --git a/src/components/core/src/physicsSolvers/src/DummySolver.cpp b/src/coreComponents/physicsSolvers/src/DummySolver.cpp similarity index 100% rename from src/components/core/src/physicsSolvers/src/DummySolver.cpp rename to src/coreComponents/physicsSolvers/src/DummySolver.cpp diff --git a/src/components/core/src/physicsSolvers/src/DummySolver.hpp b/src/coreComponents/physicsSolvers/src/DummySolver.hpp similarity index 100% rename from src/components/core/src/physicsSolvers/src/DummySolver.hpp rename to src/coreComponents/physicsSolvers/src/DummySolver.hpp