votca 2024-dev
Loading...
Searching...
No Matches
Namespaces | Classes | Typedefs
votca Namespace Reference

base class for all analysis tools More...

Namespaces

namespace  csg
 
namespace  tools
 
namespace  xtp
 Charge transport classes.
 

Classes

struct  Log
 

Typedefs

using Index = Eigen::Index
 

Detailed Description

base class for all analysis tools

Calculates three electron repulsion integrals for GW and DFT.

Small wrapper for a segment id and the corresponding QMState or filename.

base class to derive regions from

defines a qm region and runs dft and gwbse calculations

Container to define fragments of QMmolecules, containing atomindices, no pointers to atoms, it also handles the parsing of strings etc.. Values should have own destructor.

Takes a list of atoms, and the corresponding density matrix and puts out a table of wavefunction partial charges.

defines a polar region and of interacting electrostatic and induction segments

Supports operations on Matrices using OPENMP and CUDA.

Takes a list of atoms, and the corresponding density and overlap matrices and puts out a table of partial charges.

Class to set up the topology, e.g division of molecules into different regions for a specific job.

Small container for convergence checking, stores current and last value and gives the diff, or just the current value in the first iteration.

Takes a list of atoms, and creates CHELPG grid.

Takes a list of atoms, and the corresponding density matrix and puts out a table of partial charges.

Small container for the individual energy terms in a polar region.

Writes an orbital file to a .cube file.

Small container to keep occupation of BSE states for each atom.

Basic Container for QMAtoms,PolarSites and Atoms.

Parser to read strings containing indexes in the format "1 2:7 8" and returning a sorted expanded std::vector<Index> with only unique entries It can also do the opposite.

A graph visitor class for creating graph visitor objects.

A graph visitor determines the graph topology.

This file is a compilation of graph related algorithms.

A breadth first (DF) graph visitor.

A breadth first (BF) graph visitor.

Provides a means for comparing floating point numbers.

This is the base class for all analysis tool.

Todo:
do option functions!!!

Implements relative method - do not use for comparing with zero use this most of the time, tolerance needs to be meaningful in your context

Function taken from https://stackoverflow.com/questions/17333/what-is-the-most-effective-way-for-float-and-double-comparison user ShitalShal

This graph visitor will explore the vertices closest to the starting node first and proceed outwards.

This graph visitor will explore the vertices closest to the starting node first and proceed outwards.

These algorithms require the interplay of the graph and graph visitor classes and thus cannot be made methods of either. In most cases a graph visitor is specified explores the graph to determine some metric

This visitor will calculate the distance of each node from the starting node it is built on top of the graph breadth first visitor. As the visitor moves through the graph it adds a 'Dist' attribute to each graph node with an integer value corresponding to how far it is removed from the starting node.

E.g.

0 - 1 - 2 - 3

If vertex 1 is the starting vertex than the graph node associated with vertex 1 will have a distance of 0. Vertices 0 and 2 a distance of 1 and vertex 3 a distnace of 2.

This class serves as the base class for creating graph visitor objects it contains the framework by which all derived graph visitors should follow. The function of the graph visitor is to explore a graph, this can be done in different ways such as a breadth first or depth first algorithm or others.

The general flow of the class is as follows:

  1. Set the node the graph visitor will start on and create an edge queue
  2. Get an edge from the edge queue
  3. Explore the edge and operate on the unexplored node(optional) add more edges to the edge queue.
  4. Repeat until no more edges exist in the queue.

How energies are evaluated depends critically on the id of the region. a) Lower ids means being evaluated later. So expensive regions should have low ids, as they can then already incorporate partially converged results from higher id regions b) The energy of a region, includes all interactions with regions of higher ids. i.e. E(region0)=E0+E01+E02, whereas E(region1)=E1+E12 and not E10 The reason is that DFT codes only return E0+ all interaction energies and not the individual terms, this has to be changed once we want to have multiple QM regions.

This class allows to use to a limited amount CPUs and GPUs in parallel using the OPENMP scheduler.

Each operation works with 2-3 steps 1) Allocate temporary matrices and move fixed data to the gpu before the openmp region is created 2) Inside the openmp region, move the loop data to the GPU and perform calculation there 3) For reduction operations, transfer the GPU data back to the CPU after the loop is finished. Each GPU is served by one CPU thread, the other CPU threads perform the normal CPU based operations If no GPU is present all CPUs simply do CPU work.

While all the temporary data is pushed to the GPU for the CPU case we do not want to make copies on the CPU. As long as the data is identical for all threads, so instead we hold a pointer to that data. Only for temporary data special to a thread we hold pointers or make copies(depending on what is needed) using the CPU_data structures. So do not let objects you need fall out of scope in the calling code.

This class is NOT a generic interface for CPU/GPU calculations. Instead certain routines were hardcoded for certain computations. Any function containing "set" or "create" should be called outside the parallel loop. Functions, which require a threadid arguement should be called inside the openmp region, with the respective threadid

If this class is created inside an OPENMP region, it still ensures, that over that OPENMP region not more threads access the GPUs than GPUs are present. Otherwise it will work purely in serial. So this class does NOT work with nested OPENMP( nested OPENMP should be disabled anyway)

PATHWAYS TO A NEW THREADED CALCULATOR ... 1 Define 'JobContainer' (needs to define iterator), 'pJob' ( = *iterator) ... 2 Derive new calculator as ': public ParallelXJobCalc<JobContainer,pJob>' ... 3 Specialize XJOBS_FROM_TABLE< JobContainer, pJob> in xjob.cc ... 4 Register new calculator (see end of parallelxjobcalc.cc) REQUIRED MEMBERS FOR pJob pJob::JobResult (struct)

For an earlier history see ctp repo commit 77795ea591b29e664153f9404c8655ba28dc14e9

For earlier commit history see ctp commit 77795ea591b29e664153f9404c8655ba28dc14e9

Typedef Documentation

◆ Index

using votca::Index = typedef Eigen::Index

Definition at line 26 of file types.h.