- Timestamp:
- Sep 19, 2013, 8:22:55 PM (11 years ago)
- Branches:
- Action_Thermostats, Add_AtomRandomPerturbation, Add_FitFragmentPartialChargesAction, Add_RotateAroundBondAction, Add_SelectAtomByNameAction, Added_ParseSaveFragmentResults, AddingActions_SaveParseParticleParameters, Adding_Graph_to_ChangeBondActions, Adding_MD_integration_tests, Adding_ParticleName_to_Atom, Adding_StructOpt_integration_tests, AtomFragments, Automaking_mpqc_open, AutomationFragmentation_failures, Candidate_v1.5.4, Candidate_v1.6.0, Candidate_v1.6.1, ChangeBugEmailaddress, ChangingTestPorts, ChemicalSpaceEvaluator, CombiningParticlePotentialParsing, Combining_Subpackages, Debian_Package_split, Debian_package_split_molecuildergui_only, Disabling_MemDebug, Docu_Python_wait, EmpiricalPotential_contain_HomologyGraph, EmpiricalPotential_contain_HomologyGraph_documentation, Enable_parallel_make_install, Enhance_userguide, Enhanced_StructuralOptimization, Enhanced_StructuralOptimization_continued, Example_ManyWaysToTranslateAtom, Exclude_Hydrogens_annealWithBondGraph, FitPartialCharges_GlobalError, Fix_BoundInBox_CenterInBox_MoleculeActions, Fix_ChargeSampling_PBC, Fix_ChronosMutex, Fix_FitPartialCharges, Fix_FitPotential_needs_atomicnumbers, Fix_ForceAnnealing, Fix_IndependentFragmentGrids, Fix_ParseParticles, Fix_ParseParticles_split_forward_backward_Actions, Fix_PopActions, Fix_QtFragmentList_sorted_selection, Fix_Restrictedkeyset_FragmentMolecule, Fix_StatusMsg, Fix_StepWorldTime_single_argument, Fix_Verbose_Codepatterns, Fix_fitting_potentials, Fixes, ForceAnnealing_goodresults, ForceAnnealing_oldresults, ForceAnnealing_tocheck, ForceAnnealing_with_BondGraph, ForceAnnealing_with_BondGraph_continued, ForceAnnealing_with_BondGraph_continued_betteresults, ForceAnnealing_with_BondGraph_contraction-expansion, FragmentAction_writes_AtomFragments, FragmentMolecule_checks_bonddegrees, GeometryObjects, Gui_Fixes, Gui_displays_atomic_force_velocity, ImplicitCharges, IndependentFragmentGrids, IndependentFragmentGrids_IndividualZeroInstances, IndependentFragmentGrids_IntegrationTest, IndependentFragmentGrids_Sole_NN_Calculation, JobMarket_RobustOnKillsSegFaults, JobMarket_StableWorkerPool, JobMarket_unresolvable_hostname_fix, MoreRobust_FragmentAutomation, ODR_violation_mpqc_open, PartialCharges_OrthogonalSummation, PdbParser_setsAtomName, PythonUI_with_named_parameters, QtGui_reactivate_TimeChanged_changes, Recreated_GuiChecks, Rewrite_FitPartialCharges, RotateToPrincipalAxisSystem_UndoRedo, SaturateAtoms_findBestMatching, SaturateAtoms_singleDegree, StoppableMakroAction, Subpackage_CodePatterns, Subpackage_JobMarket, Subpackage_LinearAlgebra, Subpackage_levmar, Subpackage_mpqc_open, Subpackage_vmg, Switchable_LogView, ThirdParty_MPQC_rebuilt_buildsystem, TrajectoryDependenant_MaxOrder, TremoloParser_IncreasedPrecision, TremoloParser_MultipleTimesteps, TremoloParser_setsAtomName, Ubuntu_1604_changes, stable
- Children:
- 628577
- Parents:
- 1e5f84
- git-author:
- Frederik Heber <heber@…> (09/17/13 13:11:19)
- git-committer:
- Frederik Heber <heber@…> (09/19/13 20:22:55)
- Location:
- src/Fragmentation/Automation
- Files:
-
- 1 added
- 1 deleted
- 6 edited
Legend:
- Unmodified
- Added
- Removed
-
src/Fragmentation/Automation/MPQCFragmentController.hpp
r1e5f84 r732507 50 50 ); 51 51 52 void waitforResults(const size_t NoExpectedResults) 53 { results.waitforResults(NoExpectedResults, io_service, *this); } 54 52 55 /** Get results map of calculated jobs. 53 56 * … … 55 58 */ 56 59 void getResults(std::map<JobId_t, MPQCData> &fragmentData) { 57 SpecificFragmentController::getResults<MPQCData>(fragmentData); 60 fragmentData = results.IdData; 61 results.clear(); 58 62 } 59 63 … … 63 67 */ 64 68 void run(); 69 70 private: 71 //!> type-specific result container 72 SpecificFragmentController::ResultContainer<MPQCData> results; 65 73 }; 66 74 -
src/Fragmentation/Automation/Makefile.am
r1e5f84 r732507 17 17 Fragmentation/Automation/MPQCFragmentController.hpp \ 18 18 Fragmentation/Automation/SpecificFragmentController.hpp \ 19 Fragmentation/Automation/SpecificFragmentController_ impl.hpp19 Fragmentation/Automation/SpecificFragmentController_ResultContainer_impl.hpp 20 20 21 21 if CONDVMG -
src/Fragmentation/Automation/SpecificFragmentController.cpp
r1e5f84 r732507 56 56 RunService("Requesting ids"); 57 57 } 58 59 void SpecificFragmentController::waitforResults(const size_t NoExpectedResults)60 {61 size_t NoCalculatedResults = 0;62 while (NoCalculatedResults != NoExpectedResults) {63 // wait a bit64 boost::asio::deadline_timer timer(io_service);65 timer.expires_from_now(boost::posix_time::milliseconds(500));66 timer.wait();67 // then request status68 FragmentController::checkResults(host, port);69 RunService("Checking on results");70 71 const std::pair<size_t, size_t> JobStatus = FragmentController::getJobStatus();72 LOG(1, "INFO: #" << JobStatus.first << " are waiting in the queue and #" << JobStatus.second << " jobs are calculated so far.");73 NoCalculatedResults = JobStatus.second;74 }75 }76 -
src/Fragmentation/Automation/SpecificFragmentController.hpp
r1e5f84 r732507 39 39 40 40 void requestIds(const size_t numberjobs); 41 v oid waitforResults(const size_t NoExpectedResults);41 virtual void waitforResults(const size_t NoExpectedResults)=0; 42 42 void RunService(const std::string message); 43 43 … … 48 48 49 49 protected: 50 template <typename T>51 void getResults(std::map<JobId_t, T> &IdData);52 50 53 private: 54 /** Extracts specific Data type from received vector of FragmentResults. 51 /** Container for the results received from the server. 55 52 * 56 * @param results results to extract specific Data type from 57 * @param fragmentData on return array filled with extracted specific Data type 53 * These are received bit by bit until all jobs are calculated. 54 * This struct takes of the waiting. 55 * 58 56 */ 59 57 template <typename T> 60 void ConvertFragmentResultTo( 61 const std::vector<FragmentResult::ptr> &results, 62 std::vector<T> &fragmentData); 58 struct ResultContainer { 59 /** cycle to wait for results 60 * 61 * \param NoExpectedResults number of expected results 62 * \param io_service service used for waiting 63 * \param callback ref to call controller functions 64 */ 65 void waitforResults( 66 const size_t NoExpectedResults, 67 boost::asio::io_service &io_service, 68 SpecificFragmentController &callback); 69 70 /** Internal function to receive results if some are present. 71 * 72 * \param callback ref to call controller functions 73 * \return number of received results 74 */ 75 size_t receiveResults(SpecificFragmentController &callback); 76 77 /** Extracts specific Data type from received vector of FragmentResults. 78 * 79 * @param results results to extract specific Data type from 80 * @param fragmentData on return array filled with extracted specific Data type 81 */ 82 void ConvertFragmentResultTo( 83 const std::vector<FragmentResult::ptr> &results, 84 std::vector<T> &fragmentData); 85 86 /** Clears all internally stored results. 87 * 88 */ 89 void clear() 90 { IdData.clear(); } 91 92 //!> internal container for the received data 93 std::map<JobId_t, T> IdData; 94 }; 63 95 64 96 protected: … … 67 99 //!> port of the server to control 68 100 std::string port; 69 private:70 101 //!> reference to io_service for internal purposes 71 102 boost::asio::io_service &io_service; 72 103 }; 73 104 74 #include "SpecificFragmentController_ impl.hpp"105 #include "SpecificFragmentController_ResultContainer_impl.hpp" 75 106 76 107 #endif /* SPECIFICFRAGMENTCONTROLLER_HPP_ */ -
src/Fragmentation/Automation/VMGDebugGridFragmentController.hpp
r1e5f84 r732507 44 44 const bool _OpenBoundaryConditions = false); 45 45 46 void waitforResults(const size_t NoExpectedResults) 47 { results.waitforResults(NoExpectedResults, io_service, *this); } 48 46 49 // there are no results but server has empty string nonetheless 47 50 void getResults(std::map<JobId_t, std::string> &fragmentData) { 48 SpecificFragmentController::getResults<std::string>(fragmentData); 51 fragmentData = results.IdData; 52 results.clear(); 49 53 } 54 55 private: 56 //!> type-specific result container 57 SpecificFragmentController::ResultContainer<std::string> results; 50 58 }; 51 59 -
src/Fragmentation/Automation/VMGFragmentController.hpp
r1e5f84 r732507 75 75 const bool _OpenBoundaryConditions = false); 76 76 77 void waitforResults(const size_t NoExpectedResults) 78 { results.waitforResults(NoExpectedResults, io_service, *this); } 79 77 80 /** Get results of finished long-range jobs. 78 81 * … … 80 83 */ 81 84 void getResults(std::map<JobId_t, VMGData> &fragmentData) { 82 SpecificFragmentController::getResults<VMGData>(fragmentData); 85 fragmentData = results.IdData; 86 results.clear(); 83 87 } 88 89 private: 90 //!> type-specific result container 91 SpecificFragmentController::ResultContainer<VMGData> results; 84 92 }; 85 93
Note:
See TracChangeset
for help on using the changeset viewer.