Changeset 732507 for src


Ignore:
Timestamp:
Sep 19, 2013, 8:22:55 PM (11 years ago)
Author:
Frederik Heber <heber@…>
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)
Message:

SpecificFragmentController now contains template ResultContainer.

  • Results are received as soon as possible (so far we waited until all are done).
  • Results are converted directly and stored in map with JobId's with specific result type internally.
  • NOTE: each specific controller needs to implement a getter, the member variable of the ResultContainer type and the virtual waitForResults() which just redirects to ResultContainer::waitForResults().
Location:
src/Fragmentation/Automation
Files:
1 added
1 deleted
6 edited

Legend:

Unmodified
Added
Removed
  • src/Fragmentation/Automation/MPQCFragmentController.hpp

    r1e5f84 r732507  
    5050      );
    5151
     52  void waitforResults(const size_t NoExpectedResults)
     53  { results.waitforResults(NoExpectedResults, io_service, *this); }
     54
    5255  /** Get results map of calculated jobs.
    5356   *
     
    5558   */
    5659  void getResults(std::map<JobId_t, MPQCData> &fragmentData) {
    57     SpecificFragmentController::getResults<MPQCData>(fragmentData);
     60    fragmentData = results.IdData;
     61    results.clear();
    5862  }
    5963
     
    6367   */
    6468  void run();
     69
     70private:
     71  //!> type-specific result container
     72  SpecificFragmentController::ResultContainer<MPQCData> results;
    6573};
    6674
  • src/Fragmentation/Automation/Makefile.am

    r1e5f84 r732507  
    1717        Fragmentation/Automation/MPQCFragmentController.hpp \
    1818        Fragmentation/Automation/SpecificFragmentController.hpp \
    19         Fragmentation/Automation/SpecificFragmentController_impl.hpp
     19        Fragmentation/Automation/SpecificFragmentController_ResultContainer_impl.hpp
    2020       
    2121if CONDVMG
  • src/Fragmentation/Automation/SpecificFragmentController.cpp

    r1e5f84 r732507  
    5656  RunService("Requesting ids");
    5757}
    58 
    59 void SpecificFragmentController::waitforResults(const size_t NoExpectedResults)
    60 {
    61   size_t NoCalculatedResults = 0;
    62   while (NoCalculatedResults != NoExpectedResults) {
    63     // wait a bit
    64     boost::asio::deadline_timer timer(io_service);
    65     timer.expires_from_now(boost::posix_time::milliseconds(500));
    66     timer.wait();
    67     // then request status
    68     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  
    3939
    4040  void requestIds(const size_t numberjobs);
    41   void waitforResults(const size_t NoExpectedResults);
     41  virtual void waitforResults(const size_t NoExpectedResults)=0;
    4242  void RunService(const std::string message);
    4343
     
    4848
    4949protected:
    50   template <typename T>
    51   void getResults(std::map<JobId_t, T> &IdData);
    5250
    53 private:
    54   /** Extracts specific Data type from received vector of FragmentResults.
     51  /** Container for the results received from the server.
    5552   *
    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   *
    5856   */
    5957  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  };
    6395
    6496protected:
     
    6799  //!> port of the server to control
    68100  std::string port;
    69 private:
    70101  //!> reference to io_service for internal purposes
    71102  boost::asio::io_service &io_service;
    72103};
    73104
    74 #include "SpecificFragmentController_impl.hpp"
     105#include "SpecificFragmentController_ResultContainer_impl.hpp"
    75106
    76107#endif /* SPECIFICFRAGMENTCONTROLLER_HPP_ */
  • src/Fragmentation/Automation/VMGDebugGridFragmentController.hpp

    r1e5f84 r732507  
    4444      const bool _OpenBoundaryConditions = false);
    4545
     46  void waitforResults(const size_t NoExpectedResults)
     47  { results.waitforResults(NoExpectedResults, io_service, *this); }
     48
    4649  // there are no results but server has empty string nonetheless
    4750  void getResults(std::map<JobId_t, std::string> &fragmentData) {
    48     SpecificFragmentController::getResults<std::string>(fragmentData);
     51    fragmentData = results.IdData;
     52    results.clear();
    4953  }
     54
     55private:
     56  //!> type-specific result container
     57  SpecificFragmentController::ResultContainer<std::string> results;
    5058};
    5159
  • src/Fragmentation/Automation/VMGFragmentController.hpp

    r1e5f84 r732507  
    7575      const bool _OpenBoundaryConditions = false);
    7676
     77  void waitforResults(const size_t NoExpectedResults)
     78  { results.waitforResults(NoExpectedResults, io_service, *this); }
     79
    7780  /** Get results of finished long-range jobs.
    7881   *
     
    8083   */
    8184  void getResults(std::map<JobId_t, VMGData> &fragmentData) {
    82     SpecificFragmentController::getResults<VMGData>(fragmentData);
     85    fragmentData = results.IdData;
     86    results.clear();
    8387  }
     88
     89private:
     90  //!> type-specific result container
     91  SpecificFragmentController::ResultContainer<VMGData> results;
    8492};
    8593
Note: See TracChangeset for help on using the changeset viewer.