#include <dirent.h>
#include <stdarg.h>
#include <stdio.h>
#include <stdlib.h>
#include <memory>
#include <string>
#include <list>
#include <sys/stat.h>
#include <sys/types.h>
#include <sys/times.h>
#include <errno.h>
#include "atom_labels.h"
#include "density_description_file_2.h"
#include "ergo_scripted.h"
#include "grid_reader.h"
#include "dft_common.h"
#include "lin_trans.h"
#include "integrals_2el.h"
#include "integrals_2el_explicit.h"
#include "integrals_2el_boxed.h"
#include "integrals_2el_exchange.h"
#include "integrals_2el_coulomb.h"
#include "integrals_general.h"
#include "operator_matrix.h"
#include "memorymanag.h"
#include "molecule.h"
#include "output.h"
#include "scf.h"
#include "scf_utils.h"
#include "slr.h"
#include "matrix_utilities.h"
#include "SCF_restricted.h"
#include "SCF_unrestricted.h"
#include "units.h"
#include "ci.h"
#include "license.h"
#include "xyz_file_parser.h"
Classes | |
class | Ergo |
An object representing the state of the input processor. More... | |
class | ErgoE2Evaluator |
ErgoE2Evaluator implements the linear tranformation of the trial vector/transition density matrix by the E[2] operator. More... | |
class | ErgoOperator |
Defines | |
#define | KW(kl, vname, type, defval, desc) kl = variable_new_ ##type(kl, (#vname), (desc), (type), (defval)) |
Macro for compact expression of recognized keywords. | |
#define | variable_new_VAR_STRING variable_new |
#define | variable_new_VAR_FLOAT(kl, n, h, t, v) variable_new(kl,n,h,t,double(v)) |
#define | variable_new_VAR_INT variable_new |
#define | variable_new_VAR_LIST variable_new |
#define | var_get_int(n) var_get_int_template(NULL, (n)) |
#define | var_get_intJK(n) var_get_int_template(ergo.J_K_params, (n)) |
#define | var_get_intLR(n) var_get_int_template(ergo.lr_params, (n)) |
#define | var_get_intMA(n) var_get_int_template(ergo.mat_params, (n)) |
#define | var_get_intOU(n) var_get_int_template(ergo.output_params, (n)) |
#define | var_get_intSCF(n) var_get_int_template(ergo.scf_params, (n)) |
#define | var_get_intXC(n) var_get_int_template(ergo.XC_params, (n)) |
#define | var_get_real(n) var_get_real_template(NULL, (n)) |
#define | var_get_realJK(n) var_get_real_template(ergo.J_K_params, (n)) |
#define | var_get_realLR(n) var_get_real_template(ergo.lr_params, (n)) |
#define | var_get_realMA(n) var_get_real_template(ergo.mat_params, (n)) |
#define | var_get_realOU(n) var_get_real_template(ergo.output_params, (n)) |
#define | var_get_realSCF(n) var_get_real_template(ergo.scf_params, (n)) |
#define | var_get_realXC(n) var_get_real_template(ergo.XC_params, (n)) |
#define | var_get_stringLR(n) var_get_string(ergo.lr_params, (n)) |
#define | var_get_stringSCF(n) var_get_string(ergo.scf_params, (n)) |
#define | var_get_stringOU(n) var_get_string(ergo.output_params, (n)) |
#define | var_get_stringXC(n) var_get_string(ergo.XC_params, (n)) |
#define | KL ergo.J_K_params |
#define | KWJK(n, type, d) KW(ergo.J_K_params,n,type,jkOptions.n,(d)) |
#define | KL ergo.XC_params |
#define | KL ergo.output_params |
#define | KL ergo.mat_params |
#define | KWMAT(n, type, d) KW(ergo.mat_params,n,type,matOptions.n,d) |
#define | KL ergo.lr_params |
#define | KL ergo.scf_params |
#define | KWSCF(n, type, d) KW(ergo.scf_params,n,type,scfOptions.n,d) |
#define | KL ergo.var_list |
Functions | |
static void | variable_free (struct variable *v) |
release variable data structure and its children. | |
static struct variable * | variable_new (struct variable *tail, const char *name, const char *description, enum VarType type,...) |
creates new variable item. | |
void | es_assign_num (struct variable *v, double val) |
es_assign_num assigns given numerical value to the variable. | |
void | es_assign_str (struct variable *v, const char *str) |
es_assign_str assigns given string to the variable. | |
int | es_assign_range (MolType mt, int rangeNo, int start, int cnt, const char *name) |
Defines a range of atoms that will be assigned a specific basis set. | |
variable * | es_find_var (struct variable *root, const char *name) |
finds the variable struct by | |
static int | var_get_int_template (struct variable *root, const char *name) |
static double | var_get_real_template (struct variable *root, const char *name) |
static const char * | var_get_string (struct variable *root, const char *name) |
static void | var_print_tree (struct variable *tree, FILE *f, int indent) |
void | es_mol_begin (enum MolType moleculeClass) |
starts processing the inline molecule input. | |
void | es_add_atom (const char *name, double x, double y, double z) |
adds single atom at given coordinates and given name. | |
void | es_mol_commit (void) |
Finish the inline definition of the molecule. | |
void | es_mol_unit_angstrom (void) |
Selects the units for the inline molecule format to be Angtroms, as opposed to default atomic units. | |
int | es_mol_read_molecule (const char *fname, enum MolType moleculeClass) |
reads molecule data in the MOLECULE.INP (Dalton) or XYZ format. | |
int | es_set_nthreads (int nThreads) |
int | es_set_nthreads_string (const char *str) |
static void | jkparams_set_from_vars (JK::Params &jkp) |
void | es_print_help () |
void | es_print_help_var (const struct variable *var) |
void | es_print_precision () |
Print precision that was selected for building the program. | |
static int | es_rmdir_with_content (const char *dirname) |
int | es_run (const char *mode, int save_pot) |
called when an actual calculation is to be commenced. | |
int | es_getexc (const char *mode, int no_exc) |
Computes the specified number of excited states. | |
static const int * | getOperatorParams (int opname) |
static void | solveForRHS (LR::SetOfEqSolver &solver, ErgoE2Evaluator &e2, int opName, const char *tmpdir, ergo_real freq) |
int | es_get_polarisability (const char *mode, const char *opName, double freq) |
Computes a dynamical polarizability for an operator specified by the. | |
static void | benchmark_mm () |
int | yyparse (void) |
void * | yy_scan_string (const char *str) |
void * | yy_create_buffer (FILE *f, int sz) |
void | yy_switch_to_buffer (void *) |
void | yy_delete_buffer (void *) |
static void | ergo_parse_file (FILE *inputFile) |
static void | ergo_parse_string (const char *str) |
void | es_warranty (void) |
int | main (int argc, char *argv[]) |
Variables | |
static Ergo | ergo |
static IntegralInfo * | ergoIntegralInfo = NULL |
Molecule stores geometry of the current molecule. | |
static BasisInfoStruct * | Basis_info = NULL |
FILE * | yyin |
file used by the lex-generated parser. |
It enables scripting and more complex input forms.
#define KL ergo.var_list |
#define KL ergo.scf_params |
#define KL ergo.lr_params |
#define KL ergo.mat_params |
#define KL ergo.output_params |
#define KL ergo.XC_params |
#define KL ergo.J_K_params |
#define KW | ( | kl, | |||
vname, | |||||
type, | |||||
defval, | |||||
desc | ) | kl = variable_new_ ##type(kl, (#vname), (desc), (type), (defval)) |
Macro for compact expression of recognized keywords.
We make some effort to convert all the floating-point default values to double type so that they can be passed through the stack without problem. The only potential problem is a potential loss of precision if sizeof(ergo_real) > sizeof(double) but this we can hopefully live with for input variables, can we?
#define KWJK | ( | n, | |||
type, | |||||
d | ) | KW(ergo.J_K_params,n,type,jkOptions.n,(d)) |
#define KWMAT | ( | n, | |||
type, | |||||
d | ) | KW(ergo.mat_params,n,type,matOptions.n,d) |
#define KWSCF | ( | n, | |||
type, | |||||
d | ) | KW(ergo.scf_params,n,type,scfOptions.n,d) |
#define var_get_int | ( | n | ) | var_get_int_template(NULL, (n)) |
#define var_get_intJK | ( | n | ) | var_get_int_template(ergo.J_K_params, (n)) |
#define var_get_intLR | ( | n | ) | var_get_int_template(ergo.lr_params, (n)) |
#define var_get_intMA | ( | n | ) | var_get_int_template(ergo.mat_params, (n)) |
#define var_get_intOU | ( | n | ) | var_get_int_template(ergo.output_params, (n)) |
#define var_get_intSCF | ( | n | ) | var_get_int_template(ergo.scf_params, (n)) |
#define var_get_intXC | ( | n | ) | var_get_int_template(ergo.XC_params, (n)) |
#define var_get_real | ( | n | ) | var_get_real_template(NULL, (n)) |
#define var_get_realJK | ( | n | ) | var_get_real_template(ergo.J_K_params, (n)) |
#define var_get_realLR | ( | n | ) | var_get_real_template(ergo.lr_params, (n)) |
#define var_get_realMA | ( | n | ) | var_get_real_template(ergo.mat_params, (n)) |
#define var_get_realOU | ( | n | ) | var_get_real_template(ergo.output_params, (n)) |
#define var_get_realSCF | ( | n | ) | var_get_real_template(ergo.scf_params, (n)) |
#define var_get_realXC | ( | n | ) | var_get_real_template(ergo.XC_params, (n)) |
#define var_get_stringLR | ( | n | ) | var_get_string(ergo.lr_params, (n)) |
#define var_get_stringOU | ( | n | ) | var_get_string(ergo.output_params, (n)) |
#define var_get_stringSCF | ( | n | ) | var_get_string(ergo.scf_params, (n)) |
#define var_get_stringXC | ( | n | ) | var_get_string(ergo.XC_params, (n)) |
#define variable_new_VAR_FLOAT | ( | kl, | |||
n, | |||||
h, | |||||
t, | |||||
v | ) | variable_new(kl,n,h,t,double(v)) |
#define variable_new_VAR_INT variable_new |
#define variable_new_VAR_LIST variable_new |
#define variable_new_VAR_STRING variable_new |
static void benchmark_mm | ( | ) | [static] |
static void ergo_parse_file | ( | FILE * | inputFile | ) | [static] |
static void ergo_parse_string | ( | const char * | str | ) | [static] |
void es_add_atom | ( | const char * | name, | |
double | x, | |||
double | y, | |||
double | z | |||
) |
adds single atom at given coordinates and given name.
The charge is specified currently by the name of the element.
void es_assign_num | ( | struct variable * | v, | |
double | val | |||
) |
es_assign_num assigns given numerical value to the variable.
int es_assign_range | ( | MolType | mt, | |
int | rangeNo, | |||
int | start, | |||
int | cnt, | |||
const char * | name | |||
) |
Defines a range of atoms that will be assigned a specific basis set.
The range can be reset by specifying a empty count.
mt | chooses main or the ghost molecule. | |
rangeNo | choose the range to be assigned (1 to 3). | |
start | the start index. | |
cnt | the count of atoms in the range. | |
name | the name of the basis set file. |
void es_assign_str | ( | struct variable * | v, | |
const char * | str | |||
) |
es_assign_str assigns given string to the variable.
It additionally clears some local variables if a value is assigned to one of the "special" variables like "output_basis or "basis".
finds the variable struct by
name | starting in the specified root. | |
root | must be of type VAR_LIST. |
int es_get_polarisability | ( | const char * | mode, | |
const char * | opName, | |||
double | freq | |||
) |
Computes a dynamical polarizability for an operator specified by the.
opName | and frequency | |
freq | - please check what does the literature say about computing multiple operators and/or frequencies at the same time. Consider using enumerated constants for operators instead of arbitrary strings to enforce parameter checking. It can be too early in this place for that - the operator names should be checked down the execution pipeline. | |
mode | is the type of Hamiltonian (HF, or the xc functional). | |
freq | tells the frequency. |
int es_getexc | ( | const char * | mode, | |
int | no_exc | |||
) |
Computes the specified number of excited states.
no_exc | specifies number of the excited states to be computed, | |
mode | specifies the calculation type (HF, LDA, etc). |
FIXME: consider passing callback functions instead of entire matrices. The callback functions fill in specified blocks of data with overlap matrix and the Fock matrix. Current solution keeps these two potentially huge data blocks allocated all the time in memory.
void es_mol_begin | ( | enum MolType | moleculeClass | ) |
starts processing the inline molecule input.
Call to this routine should be followed by calls to es_add_atom and es_mol_commit.
moleculeClass | selects the main molecule (MOL_MAIN) or the ghost molecule (MOL_GHOST). |
void es_mol_commit | ( | void | ) |
Finish the inline definition of the molecule.
int es_mol_read_molecule | ( | const char * | fname, | |
enum MolType | moleculeClass | |||
) |
reads molecule data in the MOLECULE.INP (Dalton) or XYZ format.
fname | contains the file name to be opened and read. | |
moleculeClass | determines whether it is the main molecule (MOL_MAIN) or the ghost molecule (MOL_GHOST) to be read. |
void es_mol_unit_angstrom | ( | void | ) |
Selects the units for the inline molecule format to be Angtroms, as opposed to default atomic units.
void es_print_help | ( | ) |
void es_print_help_var | ( | const struct variable * | var | ) |
void es_print_precision | ( | ) |
Print precision that was selected for building the program.
static int es_rmdir_with_content | ( | const char * | dirname | ) | [static] |
int es_run | ( | const char * | mode, | |
int | save_pot | |||
) |
called when an actual calculation is to be commenced.
mode | is the first specified keyword. Some calculation types - like response ones - require the Fock matrix. | |
save_pot | tells whether saving it is required: The save_final_potential configuration parameter will be overriden if save_pot is true. |
int es_set_nthreads | ( | int | nThreads | ) |
int es_set_nthreads_string | ( | const char * | str | ) |
void es_warranty | ( | void | ) |
static const int* getOperatorParams | ( | int | opname | ) | [static] |
static void jkparams_set_from_vars | ( | JK::Params & | jkp | ) | [static] |
int main | ( | int | argc, | |
char * | argv[] | |||
) |
static void solveForRHS | ( | LR::SetOfEqSolver & | solver, | |
ErgoE2Evaluator & | e2, | |||
int | opName, | |||
const char * | tmpdir, | |||
ergo_real | freq | |||
) | [static] |
static int var_get_int_template | ( | struct variable * | root, | |
const char * | name | |||
) | [inline, static] |
static double var_get_real_template | ( | struct variable * | root, | |
const char * | name | |||
) | [inline, static] |
static const char* var_get_string | ( | struct variable * | root, | |
const char * | name | |||
) | [inline, static] |
static void var_print_tree | ( | struct variable * | tree, | |
FILE * | f, | |||
int | indent | |||
) | [static] |
static void variable_free | ( | struct variable * | v | ) | [static] |
release variable data structure and its children.
static struct variable* variable_new | ( | struct variable * | tail, | |
const char * | name, | |||
const char * | description, | |||
enum VarType | type, | |||
... | ||||
) | [static] |
creates new variable item.
Such variable can be later assigned values etc.
tail | is a tail of the variable list, allowing easy variable list creation. | |
name | is the variable name. | |
description | is a string with a few sentences describing what the variable is for. | |
type | is the variable type (string, int, or float). |
void* yy_create_buffer | ( | FILE * | f, | |
int | sz | |||
) |
void yy_delete_buffer | ( | void * | ) |
void* yy_scan_string | ( | const char * | str | ) |
void yy_switch_to_buffer | ( | void * | ) |
int yyparse | ( | void | ) |
BasisInfoStruct* Basis_info = NULL [static] |
IntegralInfo* ergoIntegralInfo = NULL [static] |
Molecule stores geometry of the current molecule.
FILE* yyin |
file used by the lex-generated parser.