source: src/Actions/FragmentationAction/StructuralOptimizationAction.cpp@ 56b4c6

AutomationFragmentation_failures Candidate_v1.6.1 ChemicalSpaceEvaluator Enhanced_StructuralOptimization_continued Exclude_Hydrogens_annealWithBondGraph ForceAnnealing_with_BondGraph ForceAnnealing_with_BondGraph_contraction-expansion Gui_displays_atomic_force_velocity PythonUI_with_named_parameters StoppableMakroAction TremoloParser_IncreasedPrecision
Last change on this file since 56b4c6 was 985d1f, checked in by Frederik Heber <frederik.heber@…>, 7 years ago

FIX: Removed step-world-tme from StructuralOptimizationAction.

  • this was introduced in Fix_ForceAnnealing. However, there the default value of "1" was not properly parsed and instead the value 0 was set. This is different now (since the introduction of "handleSuccess" to the Querys). Therefore, we remove this extra step (we would step two times instead of one per annealing step) to be equivalent to commit 8754b15c.
  • Property mode set to 100644
File size: 5.0 KB
Line 
1/*
2 * Project: MoleCuilder
3 * Description: creates and alters molecular systems
4 * Copyright (C) 2014 Frederik Heber. All rights reserved.
5 *
6 *
7 * This file is part of MoleCuilder.
8 *
9 * MoleCuilder is free software: you can redistribute it and/or modify
10 * it under the terms of the GNU General Public License as published by
11 * the Free Software Foundation, either version 2 of the License, or
12 * (at your option) any later version.
13 *
14 * MoleCuilder is distributed in the hope that it will be useful,
15 * but WITHOUT ANY WARRANTY; without even the implied warranty of
16 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
17 * GNU General Public License for more details.
18 *
19 * You should have received a copy of the GNU General Public License
20 * along with MoleCuilder. If not, see <http://www.gnu.org/licenses/>.
21 */
22
23/*
24 * StructuralOptimizationAction.cpp
25 *
26 * Created on: Aug 02, 2014
27 * Author: heber
28 */
29
30// include config.h
31#ifdef HAVE_CONFIG_H
32#include <config.h>
33#endif
34
35//#include "CodePatterns/MemDebug.hpp"
36
37#include "CodePatterns/Chronos.hpp"
38
39#include "Actions/FragmentationAction/AnalyseFragmentationResultsAction.hpp"
40#include "Actions/FragmentationAction/FragmentationAutomationAction.hpp"
41#include "Actions/FragmentationAction/StructuralOptimizationAction.hpp"
42#include "Actions/MoleculeAction/ForceAnnealingAction.hpp"
43#include "Actions/ActionQueue.hpp"
44#include "Actions/ActionSequence.hpp"
45
46#include "Descriptors/AtomDescriptor.hpp"
47
48using namespace MoleCuilder;
49
50// and construct the stuff
51#include "StructuralOptimizationAction.def"
52#include "MakroAction_impl_pre.hpp"
53/** =========== define the function ====================== */
54
55// static instances
56ActionSequence FragmentationStructuralOptimizationAction::prototype_actions;
57bool FragmentationStructuralOptimizationAction::isPrepared = false;
58
59void FragmentationStructuralOptimizationAction::prepare(ActionRegistry &AR)
60{
61 // perform a verlet-integration first, if there are already forces or velocities
62 // present. If not, we still copy the position cleanly into a new step where then
63 // forces are set according to summed fragmentary contributions. This is much cleaner.
64 prototype_actions.addAction(AR.getActionByName(std::string("destroy-adjacency")).clone());
65 prototype_actions.addAction(AR.getActionByName(std::string("create-adjacency")).clone());
66 prototype_actions.addAction(AR.getActionByName(std::string("correct-bonddegree")).clone());
67 prototype_actions.addAction(AR.getActionByName(std::string("update-molecules")).clone());
68 prototype_actions.addAction(AR.getActionByName(std::string("fragment-molecule")).clone());
69 prototype_actions.addAction(AR.getActionByName(std::string("fragment-automation")).clone());
70 prototype_actions.addAction(AR.getActionByName(std::string("analyse-fragment-results")).clone());
71 prototype_actions.addAction(AR.getActionByName(std::string("force-annealing")).clone());
72 prototype_actions.addAction(AR.getActionByName(std::string("output")).clone());
73 prototype_actions.addAction(AR.getActionByName(std::string("clear-fragment-results")).clone());
74 isPrepared = true;
75}
76
77void FragmentationStructuralOptimizationAction::unprepare(ActionRegistry &AR)
78{
79 // empty sequence
80 Action *actionremove = NULL;
81 while ((actionremove = prototype_actions.removeLastAction()) != NULL)
82 delete actionremove;
83 isPrepared = false;
84}
85
86ActionState::ptr FragmentationStructuralOptimizationAction::performCall(){
87
88 // set number of steps
89 setLoop(params.steps.get());
90 // remove output from sequence if not desired.
91 if (!params.DoOutput.get()) {
92#ifndef NDEBUG
93 bool status =
94#endif
95 removeAction(std::string("output"));
96 ASSERT( status,
97 "FragmentationStructuralOptimizationAction::performCall() - output not found in ActionSequence.");
98 }
99 // don't recreate bond graph if not desired
100 if (params.DontCreateGraphEachStep.get()) {
101#ifndef NDEBUG
102 bool status = true;
103 status &=
104#endif
105 removeAction(std::string("destroy-adjacency"));
106
107#ifndef NDEBUG
108 status &=
109#endif
110 removeAction(std::string("create-adjacency"));
111
112#ifndef NDEBUG
113 status &=
114#endif
115 removeAction(std::string("correct-bonddegree"));
116
117#ifndef NDEBUG
118 status &=
119#endif
120 removeAction(std::string("update-molecules"));
121 ASSERT( status,
122 "FragmentationStructuralOptimizationAction::performCall() - at least one graph action not found in ActionSequence.");
123 }
124 // and call
125 ActionState::ptr state(MakroAction::performCall());
126
127 return state;
128}
129
130ActionState::ptr FragmentationStructuralOptimizationAction::performUndo(ActionState::ptr _state) {
131 ActionState::ptr state(MakroAction::performUndo(_state));
132
133 return state;
134}
135
136ActionState::ptr FragmentationStructuralOptimizationAction::performRedo(ActionState::ptr _state){
137 ActionState::ptr state(MakroAction::performRedo(_state));
138
139 return state;
140}
141
142bool FragmentationStructuralOptimizationAction::canUndo(){
143 return true;
144}
145
146bool FragmentationStructuralOptimizationAction::shouldUndo(){
147 return true;
148}
Note: See TracBrowser for help on using the repository browser.