Changeset 567357


Ignore:
Timestamp:
Nov 7, 2011, 4:13:17 PM (13 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:
d628da
Parents:
b5d38d
git-author:
Frederik Heber <heber@…> (11/01/11 22:28:03)
git-committer:
Frederik Heber <heber@…> (11/07/11 16:13:17)
Message:

FIX: cleanUp() replaced by module_reinit() and .._exit() in pyMoleCuilder.

  • this causes ostream to be set with FormatParserStorage and hence files to be correctly written.
  • module_reinit() is python exported as "reinit". This allows for reuse of the module.
  • both module_... reside in namespace MoleCuilder::detail.
  • ..._reinit() does not use cleanUp() but only purgeStaticInstances().
Location:
src
Files:
3 edited

Legend:

Unmodified
Added
Removed
  • src/Actions/pyMoleCuilder.cpp

    rb5d38d r567357  
    3232#include "cleanUp.hpp"
    3333#include "Actions/ActionHistory.hpp"
     34#include "cleanUp.hpp"
    3435
     36namespace MoleCuilder {
     37
     38namespace detail {
     39
     40void module_exit()
     41{
     42  // save everything
     43  std::cout << "Saving." << std::endl;
     44  saveAll();
     45  // purge everything
     46  std::cout << "Cleaning memory." << std::endl;
     47  cleanUp();
     48}
     49
     50void module_reinit()
     51{
     52  // save everything
     53  std::cout << "Saving." << std::endl;
     54  saveAll();
     55  // purge everything
     56  std::cout << "Cleaning static instances from memory." << std::endl;
     57  purgeStaticInstances();
     58  // need to init the history before any action is created
     59  std::cout << "Reinitializing." << std::endl;
     60  MoleCuilder::ActionHistory::init();
     61}
     62
     63} /* namespace MoleCuilder */
     64} /* namespace detail */
    3565
    3666BOOST_PYTHON_MODULE(pyMoleCuilder)
     
    4171  // from this moment on, we need to be sure to deeinitialize in the correct order
    4272  // this is handled by the cleanup function
    43   atexit(cleanUp);
     73  atexit(MoleCuilder::detail::module_exit);
    4474
    4575  // set the docstring of the current module scope
    4676  boost::python::scope().attr("__doc__") = "pyMolecuilder are the python bindings to all Actions of the program suite MoleCuilder.\n\nMoleCuilder is a program to build molecular (dynamics) worlds, allowing you indefinite manipulation, control and analysis over the atoms and molecules within a simulation domain.";
    4777
     78  boost::python::def("reinit", MoleCuilder::detail::module_reinit, "Reinitializes the internal state of the python module as if it had been freshly imported, saves all input files beforehand.");
    4879#define export_print(z,n,list) \
    4980        BOOST_PP_CAT(export_, BOOST_PP_SEQ_ELEM(n, list))();
  • src/cleanUp.cpp

    rb5d38d r567357  
    6262}
    6363
    64 /** Cleans all singleton instances in an orderly fashion.
    65  * C++ does not guarantee any specific sequence of removal of single instances
    66  * which have static/global variables. Some singletons depend on others hence we
    67  * acertain a specific ordering here, which is is used via the atexit() hook.
     64/** purges all static (singleton) instances in correct order of dependency.
     65 *
    6866 */
    69 void cleanUp()
     67void purgeStaticInstances()
    7068{
    71   printTimings();
    7269  Chronos::purgeInstance();
    73 
    7470  RandomNumberDistributionFactory::purgeInstance();
    7571  RandomNumberEngineFactory::purgeInstance();
     
    8581  MoleCuilder::OptionRegistry::purgeInstance();
    8682  MoleCuilder::ActionHistory::purgeInstance();
     83  logger::purgeInstance();
     84  errorLogger::purgeInstance();
     85}
     86
     87/** Cleans all singleton instances in an orderly fashion.
     88 * C++ does not guarantee any specific sequence of removal of single instances
     89 * which have static/global variables. Some singletons depend on others hence we
     90 * acertain a specific ordering here, which is is used via the atexit() hook.
     91 */
     92void cleanUp()
     93{
     94  // give timings per Action
     95  printTimings();
     96  // purge static instances from memory
     97  purgeStaticInstances();
    8798  // we have to remove these two static as otherwise their boost::shared_ptrs are still present
    8899  MoleCuilder::Action::removeStaticStateEntities();
     
    90101  // admonishing lateron
    91102  AddStaticEntitiestoIgnoreList();
    92   logger::purgeInstance();
    93   errorLogger::purgeInstance();
    94103#ifdef LOG_OBSERVER
    95104  cout << observerLog().getLog();
  • src/cleanUp.hpp

    rb5d38d r567357  
    1818void dumpMemory();
    1919void printTimings();
     20void purgeStaticInstances();
    2021int saveAll();
    2122
Note: See TracChangeset for help on using the changeset viewer.