| 1 | /*
 | 
|---|
| 2 |  * Project: MoleCuilder
 | 
|---|
| 3 |  * Description: creates and alters molecular systems
 | 
|---|
| 4 |  * Copyright (C)  2010 University of Bonn. All rights reserved.
 | 
|---|
| 5 |  * Please see the LICENSE file or "Copyright notice" in builder.cpp for details.
 | 
|---|
| 6 |  */
 | 
|---|
| 7 | 
 | 
|---|
| 8 | /**
 | 
|---|
| 9 |  * \file fragmentation.dox
 | 
|---|
| 10 |  *
 | 
|---|
| 11 |  * Created on: Oct 28, 2011
 | 
|---|
| 12 |  *    Author: heber
 | 
|---|
| 13 |  */
 | 
|---|
| 14 | 
 | 
|---|
| 15 | /** \page fragmentation Fragmentation
 | 
|---|
| 16 |  *
 | 
|---|
| 17 |  * Fragmentation contains all routines that are required to split a given
 | 
|---|
| 18 |  * molecular system into fragments. This is part of the so-called BOSSANOVA
 | 
|---|
| 19 |  * (Bond Order diSSection in an ANOVA-like fashion) approach to get linear
 | 
|---|
| 20 |  * scaling complexity for ab-initio quantum chemistry methods. This method is
 | 
|---|
| 21 |  * explained in the doctoral thesis of Frederik Heber.
 | 
|---|
| 22 |  *
 | 
|---|
| 23 |  * \secton fragmentation-fragmentation Fragmenting molecules
 | 
|---|
| 24 |  *
 | 
|---|
| 25 |  * Everything starts in the Action FragmentationFragmentationAction. We require
 | 
|---|
| 26 |  * a list of selected atoms. These are browsed and we note down all the associated
 | 
|---|
| 27 |  * molecules (fragmentation is molecule-based). Subsequently, we make sure that
 | 
|---|
| 28 |  * the bond degree has correct bond degress with respect to the selected set.
 | 
|---|
| 29 |  * Then, Fragmentation is created for each molecule in the list.
 | 
|---|
| 30 |  * The class Fragmentation contains with Fragmentation::FragmentMolecule()
 | 
|---|
| 31 |  * the main routine that dissect a given molecule
 | 
|---|
| 32 |  * Afterwards, all KeySet's are obtained as a Graph from the Fragmentation 
 | 
|---|
| 33 |  * instance and combined into a single graph.
 | 
|---|
| 34 |  * Via a depth first search analysis cycles are detected and added as
 | 
|---|
| 35 |  * cycle fragments to this sets of KeySet.
 | 
|---|
| 36 |  * Finally, all fragments are placed in the FragmentationResultContainer.
 | 
|---|
| 37 |  *
 | 
|---|
| 38 |  * If desired, \b inter-fragments, that fragments are combined if they are only
 | 
|---|
| 39 |  * a certain distance apart from another and their summed fragmentation orders
 | 
|---|
| 40 |  * do not exceed the specified value. This is required for local correlation 
 | 
|---|
| 41 |  * calculation. Otherwise correlation is only calculated (if supported by the 
 | 
|---|
| 42 |  * solver) within covalently connected fragments, i.e. we do not get any van
 | 
|---|
| 43 |  * der Waals interactions.
 | 
|---|
| 44 |  *
 | 
|---|
| 45 |  * These fragments may be exported to file if output file types \sa fileformats
 | 
|---|
| 46 |  * are given. There, the current FormatParserParameters are used. If none are
 | 
|---|
| 47 |  * given, fragments remain in the FragmentationResultContainer.
 | 
|---|
| 48 |  *
 | 
|---|
| 49 |  * \secton fragmentation-automation Calculating fragments
 | 
|---|
| 50 |  *
 | 
|---|
| 51 |  * If then FragmentationFragmentationAutomationAction is used, these are converted
 | 
|---|
| 52 |  * into MPQCJobs (and VMGJobs) that are passed on via a network connection to a
 | 
|---|
| 53 |  * JobMarket's server as a FragmentJob. 
 | 
|---|
| 54 |  * Any idling connected clients will then process each one of the jobs until the 
 | 
|---|
| 55 |  * whole bundle is completed. The Action checks on the current tatus of the jobs 
 | 
|---|
| 56 |  * and requests any finished jobs (FragmentResult).
 | 
|---|
| 57 |  * After all jobs' results have been received, they are stored in 
 | 
|---|
| 58 |  * FragmentationShortRangeResults and FragmentationLongrangeResults.
 | 
|---|
| 59 |  * FragmentationAnalyseFragmentResultsAction will process both these results and
 | 
|---|
| 60 |  * sum up the approximate energy and forces (where these are set as the atoms'
 | 
|---|
| 61 |  * forces for the current time step).
 | 
|---|
| 62 |  * 
 | 
|---|
| 63 |  * Alternatively to automation, where everything is done inside MoleCuilder, one
 | 
|---|
| 64 |  * may also use the exported files to calculate an approximation. To this end,
 | 
|---|
| 65 |  * the energies and forces are put together via \b joiner to approximation
 | 
|---|
| 66 |  * to the total energy and forces of the whole molecular system. Later,
 | 
|---|
| 67 |  * \b analyzer additionally gives data on how good this approximation has
 | 
|---|
| 68 |  * worked out in plotable format.
 | 
|---|
| 69 |  *
 | 
|---|
| 70 |  *
 | 
|---|
| 71 |  * \date 2014-03-10
 | 
|---|
| 72 |  *
 | 
|---|
| 73 |  */
 | 
|---|