Changeset 38ac25 for src/Actions/MoleculeAction/ForceAnnealingAction.cpp
- Timestamp:
- Nov 7, 2017, 7:34:56 AM (7 years ago)
- Branches:
- ForceAnnealing_with_BondGraph_continued_betteresults
- Children:
- 10b1ef
- Parents:
- 0f9726
- git-author:
- Frederik Heber <frederik.heber@…> (08/03/17 10:47:26)
- git-committer:
- Frederik Heber <frederik.heber@…> (11/07/17 07:34:56)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
src/Actions/MoleculeAction/ForceAnnealingAction.cpp
r0f9726 r38ac25 71 71 return Action::failure; 72 72 } 73 74 size_t CurrentStep = WorldTime::getInstance().getTime(); 75 if (CurrentStep == 0) { 76 ELOG(1, "WorldTime must be at least at step 1 already, use step-world-time if necessary."); 77 return Action::failure; 78 } 79 73 80 // first, we need to sort the mixin according to their ids (as selected atoms are sorted 74 81 // according to their arbitrary address in memory) … … 76 83 77 84 // create undo state for all selected atoms (undo info) 78 std::vector<AtomicInfo> UndoInfo; 79 UndoInfo.reserve(set.size()); 80 { 81 for (World::AtomSelectionConstIterator iter = World::getInstance().beginAtomSelection(); 82 iter != World::getInstance().endAtomSelection(); 83 ++iter) 84 UndoInfo.push_back(AtomicInfo(*(iter->second))); 85 std::vector< std::vector<AtomicInfo> > UndoInfo(2); 86 for (int i=0;i<2;++i) { 87 UndoInfo[i].reserve(set.size()); 88 { 89 for (World::AtomSelectionConstIterator iter = World::getInstance().beginAtomSelection(); 90 iter != World::getInstance().endAtomSelection(); 91 ++iter) 92 UndoInfo[i].push_back(AtomicInfo(*(iter->second), CurrentStep-i)); 93 } 85 94 } 86 95 … … 93 102 params.MaxDistance.get(), 94 103 params.DampingFactor.get()); 95 size_t CurrentStep = WorldTime::getInstance().getTime();96 if (CurrentStep == 0) {97 ELOG(1, "WorldTime must be at least at step 1 already, use step-world-time if necessary.");98 return Action::failure;99 }100 104 101 105 // parse forces into last step (assuming we stepped on already) … … 113 117 STATUS("Successfully optimized structure by one step."); 114 118 115 std::vector<AtomicInfo> RedoInfo; 116 RedoInfo.reserve(set.size()); 117 { 118 for (World::AtomSelectionConstIterator iter = World::getInstance().beginAtomSelection(); 119 iter != World::getInstance().endAtomSelection(); 120 ++iter) 121 RedoInfo.push_back(AtomicInfo(*(iter->second))); 119 std::vector< std::vector<AtomicInfo> > RedoInfo(2); 120 for (int i=0;i<2;++i) { 121 RedoInfo[i].reserve(set.size()); 122 { 123 for (World::AtomSelectionConstIterator iter = World::getInstance().beginAtomSelection(); 124 iter != World::getInstance().endAtomSelection(); 125 ++iter) 126 RedoInfo[i].push_back(AtomicInfo(*(iter->second), CurrentStep-i)); 127 } 122 128 } 129 123 130 MoleculeForceAnnealingState *UndoState = 124 131 new MoleculeForceAnnealingState(UndoInfo, RedoInfo, params); … … 130 137 MoleculeForceAnnealingState *state = 131 138 assert_cast<MoleculeForceAnnealingState*>(_state.get()); 139 const size_t CurrentStep = WorldTime::getInstance().getTime(); 132 140 133 141 // set stored old state 134 SetAtomsFromAtomicInfo(state->UndoInfo); 142 for (int i=0;i<2;++i) 143 SetAtomsFromAtomicInfo(state->UndoInfo[i], CurrentStep-i); 135 144 136 145 return ActionState::ptr(_state); … … 140 149 MoleculeForceAnnealingState *state = 141 150 assert_cast<MoleculeForceAnnealingState*>(_state.get()); 151 const size_t CurrentStep = WorldTime::getInstance().getTime(); 142 152 143 153 // set stored new state 144 SetAtomsFromAtomicInfo(state->RedoInfo); 154 for (int i=0;i<2;++i) 155 SetAtomsFromAtomicInfo(state->RedoInfo[i], CurrentStep-i); 145 156 146 157 return ActionState::ptr(_state);
Note:
See TracChangeset
for help on using the changeset viewer.