source: src/builder.cpp@ 5773a9

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
Last change on this file since 5773a9 was bdb143, checked in by Frederik Heber <heber@…>, 15 years ago

Merge branch 'StructureRefactoring' into stable

Conflicts:

molecuilder/src/analysis_bonds.cpp
molecuilder/src/analysis_bonds.hpp
molecuilder/src/builder.cpp
molecuilder/src/unittests/Makefile.am
molecuilder/src/unittests/TestRunnerMain.cpp

  • TESTFIX: Tesselations/heptan - Due to different implementations of GetCircumCenter() sequence of triangles nodes has changed in degenerate case
  • TESTFIX: Tesselation/1-3 - Due to convexity criterion fourth argument (i.e. the value at the node) has changed.

Signed-off-by: Frederik Heber <heber@…>

  • Property mode set to 100755
File size: 7.2 KB
RevLine 
[14de469]1/** \file builder.cpp
[a8bcea6]2 *
[a356f2]3 * date: Jan 1, 2007
4 * author: heber
[a8bcea6]5 *
[14de469]6 */
7
[a356f2]8/*! \mainpage MoleCuilder - a molecular set builder
[a8bcea6]9 *
[a356f2]10 * This introductory shall briefly make acquainted with the program, helping in installing and a first run.
[a8bcea6]11 *
[14de469]12 * \section about About the Program
[a8bcea6]13 *
[a356f2]14 * MoleCuilder is a program, written entirely in C++, that enables the construction of a coordinate set for the
15 * atoms making up an molecule. It allows for both building of simple molecules by adding atom-wise giving bond
16 * angles and distances or absolute coordinates, but also using them as templates. Regions can be specified and
17 * ordered to be filled with a molecule in a certain manner. Greater conglomerations of molecules can be tesselated
18 * and recognized as a region themselves to be subsequently surrounded by other (surface solvated) molecules.
19 * In the end, MoleCuilder allows the construction of arbitrary nano structures, whether they be crystalline or
20 * amorphic in nature.
[a8bcea6]21 *
22 *
[14de469]23 * \section install Installation
[a8bcea6]24 *
[042f82]25 * Installation should without problems succeed as follows:
26 * -# ./configure (or: mkdir build;mkdir run;cd build; ../configure --bindir=../run)
27 * -# make
28 * -# make install
[a8bcea6]29 *
[042f82]30 * Further useful commands are
31 * -# make clean uninstall: deletes .o-files and removes executable from the given binary directory\n
32 * -# make doxygen-doc: Creates these html pages out of the documented source
[a356f2]33 * -# make check: Runs an extensive set of unit tests and a testsuite which also gives a good overview on the set of
34 * functions.
[a8bcea6]35 *
[14de469]36 * \section run Running
[a8bcea6]37 *
[042f82]38 * The program can be executed by running: ./molecuilder
[a8bcea6]39 *
[a356f2]40 * MoleCuilder has three interfaces at your disposal:
41 * -# Textmenu: A simple interactive console-based menu, where awaits your choices and inputs in order to set atoms
42 * as you like
43 * -# CommandLineUI: Every command can also be chained up as a sequence of actions on the command line to be executed
44 * with any user interaction.
45 * -# GraphicalUI: A graphical user interface that also display the molecular structure being built and lots of other
46 * informations to ease the construction of bigger geometries.
[a8bcea6]47 *
[a356f2]48 * The supported output formats right now are:
49 * -# mpqc: Configuration files of the Massively Parallel Quantum Chemistry package (Sandia labs)
50 * -# pcp: Configuration files of the Parallel Car-Parrinello program (Institute for Numerical Simulation)
51 * -# tremolo: Configuration files of TREMOLO (Institute for Numerical Simulation)
52 * -# xyz: the most basic format for the 3d arrangement of atoms consisting of a list of element and 3 coordinates.
[a8bcea6]53 *
[14de469]54 */
55
[112b09]56#include "Helpers/MemDebug.hpp"
[14de469]57
[b70721]58#include "bondgraph.hpp"
[c6efc1]59#include "CommandLineParser.hpp"
[f66195]60#include "config.hpp"
[e138de]61#include "log.hpp"
[aac3ef]62#include "memoryusageobserver.hpp"
[cee0b57]63#include "molecule.hpp"
[f66195]64#include "periodentafel.hpp"
[bfd839]65#include "tesselationhelpers.hpp"
[cc04b7]66#include "UIElements/UIFactory.hpp"
[5f5a7b]67#include "UIElements/TextUI/TextUIFactory.hpp"
68#include "UIElements/CommandLineUI/CommandLineUIFactory.hpp"
[82b71a]69#ifdef USE_GUI_QT
70#include "UIElements/QT4/QTUIFactory.hpp"
71#endif
[cc04b7]72#include "UIElements/MainWindow.hpp"
[45f5d6]73#include "UIElements/Dialog.hpp"
[12b845]74#include "Menu/ActionMenuItem.hpp"
[a356f2]75#include "verbose.hpp"
76#include "World.hpp"
77
[12b845]78#include "Actions/ActionRegistry.hpp"
[d56640]79#include "Actions/ActionHistory.hpp"
[97ebf8]80#include "Actions/MapOfActions.hpp"
[042f82]81
[a356f2]82#include "Parser/ChangeTracker.hpp"
83#include "Parser/FormatParserStorage.hpp"
[1907a7]84
[a356f2]85#include "UIElements/UIFactory.hpp"
86#include "UIElements/TextUI/TextUIFactory.hpp"
87#include "UIElements/CommandLineUI/CommandLineUIFactory.hpp"
88#include "UIElements/MainWindow.hpp"
89#include "UIElements/Dialog.hpp"
[1f1b23]90
[a356f2]91#include "version.h"
[1f1b23]92
[ca2b83]93
94/********************************************** Main routine **************************************/
[14de469]95
[148d8f0]96void cleanUp(){
[35b698]97 FormatParserStorage::purgeInstance();
[a1e929]98 ChangeTracker::purgeInstance();
[23b547]99 World::purgeInstance();
[354859]100 logger::purgeInstance();
101 errorLogger::purgeInstance();
[97ebf8]102 UIFactory::purgeInstance();
103 MapOfActions::purgeInstance();
[c6efc1]104 CommandLineParser::purgeInstance();
[e73a8a2]105 ActionRegistry::purgeInstance();
[632bc3]106 ActionHistory::purgeInstance();
[cd5047]107#ifdef LOG_OBSERVER
108 cout << observerLog().getLog();
109#endif
[68f03d]110 Memory::getState();
[354859]111}
112
[ca2b83]113int main(int argc, char **argv)
114{
[a356f2]115 // while we are non interactive, we want to abort from asserts
116 //ASSERT_DO(Assert::Abort);
117 string line;
118 char **Arguments = NULL;
119 int ArgcSize = 0;
120 int ExitFlag = 0;
121 bool ArgumentsCopied = false;
122 std::string BondGraphFileName("\n");
123 FormatParserStorage::getInstance().addMpqc();
124 FormatParserStorage::getInstance().addPcp();
125 FormatParserStorage::getInstance().addXyz();
126
127 // print version check whether arguments are present at all
128 cout << ESPACKVersion << endl;
129
130 setVerbosity(0);
131 // need to init the history before any action is created
132 ActionHistory::init();
133
134 // In the interactive mode, we can leave the user the choice in case of error
135 ASSERT_DO(Assert::Ask);
136
137 // from this moment on, we need to be sure to deeinitialize in the correct order
138 // this is handled by the cleanup function
139 atexit(cleanUp);
140
141 // Parse command line options and if present create respective UI
142 {
143 // construct bond graph
144 if (World::getInstance().getConfig()->BG == NULL) {
145 World::getInstance().getConfig()->BG = new BondGraph(World::getInstance().getConfig()->GetIsAngstroem());
146 if (World::getInstance().getConfig()->BG->LoadBondLengthTable(BondGraphFileName)) {
147 DoLog(0) && (Log() << Verbose(0) << "Bond length table loaded successfully." << endl);
[97ebf8]148 } else {
[a356f2]149 DoeLog(1) && (eLog()<< Verbose(1) << "Bond length table loading failed." << endl);
[97ebf8]150 }
[c6efc1]151 }
[a356f2]152 // handle remaining arguments by CommandLineParser
[326bbe]153 if (argc>1) {
154 MapOfActions::getInstance().AddOptionsToParser();
155 map <std::string, std::string> ShortFormToActionMap = MapOfActions::getInstance().getShortFormToActionMap();
156 CommandLineParser::getInstance().Run(argc,argv, ShortFormToActionMap);
[a356f2]157 DoLog(0) && (Log() << Verbose(0) << "Setting UI to CommandLine." << endl);
158 UIFactory::registerFactory(new CommandLineUIFactory::description());
159 UIFactory::makeUserInterface("CommandLine");
160 } else {
[04488a]161 #ifdef USE_GUI_QT
162 DoLog(0) && (Log() << Verbose(0) << "Setting UI to QT4." << endl);
163 UIFactory::registerFactory(new QTUIFactory::description());
164 UIFactory::makeUserInterface("QT4");
165 #else
166 DoLog(0) && (Log() << Verbose(0) << "Setting UI to Text." << endl);
167 cout << ESPACKVersion << endl;
168 UIFactory::registerFactory(new TextUIFactory::description());
169 UIFactory::makeUserInterface("Text");
170 #endif
[12b845]171 }
[a356f2]172 }
173
174 {
175 MainWindow *mainWindow = UIFactory::getInstance().makeMainWindow();
176 mainWindow->display();
177 delete mainWindow;
178 }
[6ac7ee]179
[a356f2]180 FormatParserStorage::getInstance().SaveAll();
181 ChangeTracker::getInstance().saveStatus();
[042f82]182
[97ebf8]183 // free the new argv
184 if (ArgumentsCopied) {
185 for (int i=0; i<ArgcSize;i++)
[920c70]186 delete[](Arguments[i]);
187 delete[](Arguments);
[97ebf8]188 }
[4f7f34e]189 //delete[](ConfigFileName);
[632bc3]190
[e4b5de]191 ExitFlag = World::getInstance().getExitFlag();
[99fcaf]192 return (ExitFlag == 1 ? 0 : ExitFlag);
[14de469]193}
194
195/********************************************** E N D **************************************************/
Note: See TracBrowser for help on using the repository browser.