== Where is what in the code == On this page we want to list all the stuff the MoleCuilder code can do and where to find it. === Functionality === * '''Linked Cell''': Linked Cell is a technique where a given domain is split up into sectors and atoms inside these spatial sectors are put into linked lists. Hence, the linked lists of each sector contains references to all atoms in this sector. This speeds up neighbour search as one does not have to look through all atoms anymore. See [source:molecuilder/src/linkedcell.hpp]. * '''Manipulating vectors''': Vectors can be scaled, added, subtracted. Norms, distances, angles, scalar products can be calculated. Matrix transformation can be applied. And there is much more. See [source:molecuilder/src/vector.hpp]. * '''Solving linear equations''': A wrapper for the [GSL http://www.gnu.org/software/gsl] library for solving (small) linear equations. See [source:molecuilder/src/gslvector.hpp], [source:molecuilder/src/gslmatrix.hpp] and [source:molecuilder/src/linearsystemofequations.hpp], * '''Principal Axis system''': The principal axis system of a molecule can be calculated and rotation to align with this system may be applied. See [source:molecuilder/src/molecule_geometry.cpp]. * '''Centering/Duplicating/Mirroring molecules''': The simulation domain along with molecules can be duplicated or mirrored. See [source:molecuilder/src/ * '''Analysing bonding structure of a molecular system''': Bonds can be detected in a given molecular system either by van-der-Waals-radii criteria or by mean bond distances between two elements from a parsed bond length table. The System can be split up into disconnected molecules (i.e. we regard the atoms as the nodes of a graph and the bonds as connecting edges). One may travel from atom to bonded neighbours and much more. See [source:molecuilder/src/bondgraph.hpp], [source:molecuilder/src/bond.hpp], [source:molecuilder/src/graph.hpp], * '''Time integration''': A basic ''Verlet'' time integration is implemented. Actually, this was only incorporated for the forces evaluated by a ab initio calculation for use in time integration. See [source:molecuilder/src/molecule_dynamics.cpp]. * '''Fragmentening a molecular system''': The system may be split up into overlapping fragments, allowing for faster computation of ground state energies by quantum chemistry packages such as PCP contained in ESPACK or [MPQC http://www.mpqc.org/]. See [source:molecuilder/src/molecule_fragmentation.cpp]. * '''Reading and writing many different formats''': Parsers for formats such as xyz, pdb, TREMOLO's .data, mpqc are included and can be written. See [source:molecuilder/src/config.hpp]. * '''Memory allocation wrappers ''': Wrappers allow for checking the amount of memory allocated and ensuring that everything is free'd on exit. See [source:molecuilder/src/memoryusageobserver.hpp],[source:molecuilder/src/memoryallocator.hpp], * '''General parsing of files''': Parsing of key value pairs in files is supported by a quite general parser routine. See [source:molecuilder/src/config.hpp]. * '''General parsing of matrices''': Parsing of matrices stored as tab- and newline-separated file is included. See [source:molecuilder/src/parser.hpp]. * '''Period table information''': A period table along with database for atoms from Z=1 to 80 is included with information such as mass, atomic number, name, symbol but also a color code for displaying. See [source:molecuilder/src/periodentafel.hpp]. * '''Tesselation of molecules''': The surface of a molecule can be tesselated, such that one receives a closed triangle mesh. The triangle mesh can be manipulated in various ways. See [source:molecuilder/src/tesselation.hpp], [source:molecuilder/src/tesselationhelpers.hpp] and [source:molecuilder/src/boundary.hpp].