Changeset 0763ce


Ignore:
Timestamp:
Feb 10, 2015, 2:09:38 PM (10 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:
c17aa8
Parents:
cd5aa0
git-author:
Frederik Heber <heber@…> (01/25/15 13:31:53)
git-committer:
Frederik Heber <heber@…> (02/10/15 14:09:38)
Message:

Added BondGraph::checkBondDegree, FragmentationAction only resets degrees when incorrect.

  • this fixes the bug where the molecular dynamics actions would flip the double bonds in an aromatic ring during the simulation steps because the bond degrees are reset even though the bond graph is present and should be re-used.
Location:
src
Files:
4 edited

Legend:

Unmodified
Added
Removed
  • src/Actions/FragmentationAction/FragmentationAction.cpp

    rcd5aa0 r0763ce  
    129129    BondGraph *BG = World::getInstance().getBondGraph();
    130130    World::AtomComposite Set = World::getInstance().getAllAtoms(AtomsBySelection());
    131     BG->CorrectBondDegree(Set);
     131    // check whether bond graph is correct
     132    if (!BG->checkBondDegree(Set))
     133      BG->CorrectBondDegree(Set);
     134    else
     135      LOG(1, "INFO: Bond degrees all valid, not correcting.");
    132136  }
    133137
  • src/Graph/BondGraph.cpp

    rcd5aa0 r0763ce  
    473473}
    474474
     475bool BondGraph::checkBondDegree(const deltaatoms_t &allatoms) const
     476{
     477  deltaatoms_t deltaatoms;
     478  return (gatherAllDeltaAtoms(allatoms, deltaatoms) == 0);
     479}
     480
    475481
    476482int BondGraph::calculateBondDegree(const deltaatoms_t &allatoms) const
  • src/Graph/BondGraph.hpp

    rcd5aa0 r0763ce  
    359359  }
    360360
     361  /** Checks whether the bond degree for each atom on the set matches with its valency.
     362   *
     363   * @param Set Range with atoms
     364   * @return true - bond degrees match valency, false - bond degree correction is needed
     365   */
     366  template <class container_type,
     367            class iterator_type,
     368            class const_iterator_type>
     369  bool checkBondDegree(
     370      AtomSetMixin<container_type,iterator_type,const_iterator_type> &Set) const
     371  {
     372    std::set<atom *> allatoms;
     373    for(iterator_type AtomRunner = Set.begin(); AtomRunner != Set.end(); ++AtomRunner)
     374      allatoms.insert(*AtomRunner);
     375    return checkBondDegree(allatoms);
     376  }
     377
    361378  /** correct bond degree by comparing valence and bond degree.
    362379   * correct Bond degree of each bond by checking both bond partners for a mismatch between valence and current sum of bond degrees,
     
    472489  }
    473490
     491  bool checkBondDegree(const std::set<atom *> &allatoms) const;
     492
    474493  /** Calculates the bond degree for each atom on the set.
    475494   *
  • src/World.cpp

    rcd5aa0 r0763ce  
    228228    const atom * const Walker = (*bonditer)->leftatom;
    229229    const atom * const OtherWalker = (*bonditer)->rightatom;
    230     const_cast<atom *>(Walker)->addBond(_deststep, const_cast<atom *>(OtherWalker));
     230    bond::ptr const _bond =
     231        const_cast<atom *>(Walker)->addBond(_deststep, const_cast<atom *>(OtherWalker));
     232    _bond->setDegree((*bonditer)->getDegree());
    231233  }
    232234}
Note: See TracChangeset for help on using the changeset viewer.