ergo_scripted.cc File Reference

The main program for the ergo project. More...

#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 variablevariable_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.
struct variablees_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 IntegralInfoergoIntegralInfo = NULL
 Molecule stores geometry of the current molecule.
static BasisInfoStructBasis_info = NULL
FILE * yyin
 file used by the lex-generated parser.

Detailed Description

The main program for the ergo project.

It enables scripting and more complex input forms.

Author:
: Pawel Salek responsible. But feel free to modify the file if you are humbly convinced your ideas are correct.

Define Documentation

#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?

Referenced by Ergo::registerInputVariables().

#define KWJK ( n,
type,
 )     KW(ergo.J_K_params,n,type,jkOptions.n,(d))
#define KWMAT ( n,
type,
 )     KW(ergo.mat_params,n,type,matOptions.n,d)
#define KWSCF ( n,
type,
 )     KW(ergo.scf_params,n,type,scfOptions.n,d)
#define var_get_int (  )     var_get_int_template(NULL, (n))

Referenced by es_run().

#define var_get_intJK (  )     var_get_int_template(ergo.J_K_params, (n))

Referenced by jkparams_set_from_vars().

#define var_get_intLR (  )     var_get_int_template(ergo.lr_params, (n))

Referenced by es_get_polarisability(), and es_getexc().

#define var_get_intMA (  )     var_get_int_template(ergo.mat_params, (n))

Referenced by es_run().

#define var_get_intOU (  )     var_get_int_template(ergo.output_params, (n))
#define var_get_intSCF (  )     var_get_int_template(ergo.scf_params, (n))

Referenced by es_run().

#define var_get_intXC (  )     var_get_int_template(ergo.XC_params, (n))
#define var_get_real (  )     var_get_real_template(NULL, (n))

Referenced by es_run().

#define var_get_realJK (  )     var_get_real_template(ergo.J_K_params, (n))

Referenced by es_run(), and jkparams_set_from_vars().

#define var_get_realLR (  )     var_get_real_template(ergo.lr_params, (n))

Referenced by es_get_polarisability(), and es_getexc().

#define var_get_realMA (  )     var_get_real_template(ergo.mat_params, (n))

Referenced by es_run().

#define var_get_realOU (  )     var_get_real_template(ergo.output_params, (n))
#define var_get_realSCF (  )     var_get_real_template(ergo.scf_params, (n))

Referenced by es_run().

#define var_get_realXC (  )     var_get_real_template(ergo.XC_params, (n))
#define var_get_stringLR (  )     var_get_string(ergo.lr_params, (n))
#define var_get_stringOU (  )     var_get_string(ergo.output_params, (n))
#define var_get_stringSCF (  )     var_get_string(ergo.scf_params, (n))

Referenced by es_run().

#define var_get_stringXC (  )     var_get_string(ergo.XC_params, (n))

Referenced by es_run().

#define variable_new_VAR_FLOAT ( kl,
n,
h,
t,
 )     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

Function Documentation

static void benchmark_mm (  )  [static]

References BETA, and mat::gemm().

Referenced by main().

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.

References Molecule::atoms, Atom::charge, Atom::coords, do_output(), get_charge_int_from_atom_label(), Ergo::ghostMolecule, LOG_AREA_MAIN, LOG_CAT_ERROR, LOG_CAT_INFO, Molecule::MAX_NO_OF_ATOMS, MOL_GHOST, MOL_MAIN, Ergo::molecule, Ergo::moleculeUnit, Molecule::noOfAtoms, and Ergo::readingMoleculeClass.

Referenced by yyparse().

void es_assign_num ( struct variable v,
double  val 
)

es_assign_num assigns given numerical value to the variable.

References do_output(), LOG_AREA_MAIN, LOG_CAT_ERROR, LOG_CAT_INFO, variable::name, variable::num, variable::type, variable::v, VAR_FLOAT, VAR_INT, and variable::vint.

Referenced by es_set_nthreads(), and yyparse().

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.

Parameters:
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.

References BasissetNameRange::basisSetFileName, Ergo::basissetRangeList, Ergo::basissetRangeListGhost, BasissetNameRange::count, MOL_GHOST, MOL_MAIN, Ergo::NO_OF_BASIS_SET_RANGES, and BasissetNameRange::startAtomIndex.

Referenced by yyparse().

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.

References Ergo::Basis, do_output(), Ergo::GhostBasis, LOG_AREA_MAIN, LOG_CAT_INFO, variable::name, variable::str, and variable::v.

Referenced by yyparse().

struct variable* es_find_var ( struct variable root,
const char *  name 
) [read]

finds the variable struct by

Parameters:
name starting in the specified root.
root must be of type VAR_LIST.

References do_output(), es_find_var(), variable::list, LOG_AREA_MAIN, LOG_CAT_ERROR, variable::name, variable::next, variable::type, variable::v, Ergo::var_list, and VAR_LIST.

Referenced by es_find_var(), es_set_nthreads(), main(), var_get_int_template(), var_get_real_template(), var_get_string(), and yyparse().

int es_get_polarisability ( const char *  mode,
const char *  opName,
double  freq 
)

Computes a dynamical polarizability for an operator specified by the.

Parameters:
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.

References compute_overlap_matrix(), LR::LRSolver::convThreshold, ddf_load_density(), do_output(), ergo_free(), es_run(), Molecule::getNumberOfElectrons(), getOperatorParams(), LR::SetOfEqSolver::increaseSubspaceLimit(), LOG_AREA_MAIN, LOG_CAT_ERROR, LOG_CAT_INFO, Ergo::molecule, BasisInfoStruct::noOfBasisFuncs, solveForRHS(), var_get_intLR, var_get_realLR, and var_get_string().

Referenced by yyparse().

int es_getexc ( const char *  mode,
int  no_exc 
)

Computes the specified number of excited states.

Parameters:
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.

References compute_overlap_matrix(), LR::EigenSolver::computeMoments(), LR::LRSolver::convThreshold, ddf_load_density(), do_output(), ergo_free(), es_run(), LR::EigenSolver::getFreq(), Molecule::getNumberOfElectrons(), LR::EigenSolver::getTransitionMoment2(), grid_free_files(), LR::EigenSolver::increaseSubspaceLimit(), LOG_AREA_MAIN, LOG_CAT_ERROR, Ergo::molecule, BasisInfoStruct::noOfBasisFuncs, LR::LRSolver::solve(), var_get_intLR, var_get_realLR, and var_get_string().

Referenced by yyparse().

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.

Parameters:
moleculeClass selects the main molecule (MOL_MAIN) or the ghost molecule (MOL_GHOST).

References Ergo::ghostMolecule, MOL_GHOST, MOL_MAIN, Ergo::molecule, Ergo::moleculeUnit, Molecule::noOfAtoms, and Ergo::readingMoleculeClass.

void es_mol_commit ( void   ) 

Finish the inline definition of the molecule.

References Ergo::ghostMolecule, MOL_GHOST, Ergo::molecule, Molecule::noOfAtoms, and Ergo::readingMoleculeClass.

Referenced by yyparse().

int es_mol_read_molecule ( const char *  fname,
enum MolType  moleculeClass 
)

reads molecule data in the MOLECULE.INP (Dalton) or XYZ format.

Parameters:
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.

References Ergo::Basis, do_output(), ergo_free(), Ergo::GhostBasis, Ergo::ghostMolecule, LOG_AREA_MAIN, LOG_CAT_INFO, MOL_GHOST, MOL_MAIN, Ergo::molecule, and Molecule::setFromMoleculeFile().

Referenced by main(), and yyparse().

void es_mol_unit_angstrom ( void   ) 

Selects the units for the inline molecule format to be Angtroms, as opposed to default atomic units.

References Ergo::moleculeUnit, and UNIT_one_Angstrom.

void es_print_help (  ) 

References Ergo::var_list, and var_print_tree().

Referenced by main(), and yyparse().

void es_print_help_var ( const struct variable var  ) 

References variable::description, and variable::name.

Referenced by main(), and yyparse().

void es_print_precision (  ) 

Print precision that was selected for building the program.

Referenced by yyparse().

static int es_rmdir_with_content ( const char *  dirname  )  [static]

Referenced by es_run().

int es_run ( const char *  mode,
int  save_pot 
)

called when an actual calculation is to be commenced.

Parameters:
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.

References mat::FileWritable::activate(), BasisInfoStruct::addBasisfuncsForMolecule(), Molecule::atoms, Ergo::Basis, Ergo::basissetRangeList, Ergo::basissetRangeListGhost, SCF::Options::break_on_energy_increase, SCF::Options::calculation_identifier, Atom::charge, SCF::Options::convergence_threshold, SCF::Options::create_basis_func_coord_file, SCF::Options::create_mtx_file_S, SCF::Options::create_mtx_files_D, SCF::Options::create_mtx_files_dipole, SCF::Options::create_mtx_files_F, dft_setfunc(), dftreport_(), do_CI(), SCF::Options::do_electron_dynamics, do_output(), do_output_time(), SCF::Options::do_report_density_diff, SCF_general::do_SCF_iterations(), SCF::Options::electric_field, SCF::Options::electronic_temperature, enable_memory_usage_output(), SCF::Options::error_maxabs_for_diis, es_rmdir_with_content(), Ergo::extraChargesMolecule, SCF::Options::force_restricted, SCF::Options::force_unrestricted, mat::MatrixSymmetric< Treal, Tmatrix >::fullMatrix(), SCF::Options::gap_expected_lower_bound, Dft::GridParams::GC2, SCF_general::get_energy(), SCF_unrestricted::get_Fock_matrices(), SCF_general::get_H_core_matrix(), SCF_unrestricted::get_no_of_electrons(), SCF_general::get_overlap_matrix(), mat::getNormType(), Molecule::getNumberOfElectrons(), Ergo::GhostBasis, Ergo::ghostMolecule, grid_free_files(), grid_set_tmpdir(), Dft::GridParams::gridType, SCF::MatOptions::inversePermutationHML, Ergo::jkOptions, jkparams_set_from_vars(), Dft::GridParams::LMG, LOG_AREA_MAIN, LOG_AREA_SCF, LOG_CAT_ERROR, LOG_CAT_INFO, LOG_CAT_RESULTS, Ergo::matOptions, SCF::Options::max_no_of_diis_matrices, SCF::Options::max_number_of_iterations, SCF::Options::max_restart_count, SCF::Options::method_and_basis_set, SCF::Options::min_number_of_iterations, Ergo::molecule, Molecule::netCharge, Ergo::NO_OF_BASIS_SET_RANGES, SCF::Options::no_of_careful_first_scf_steps, SCF::Options::no_of_impr_req_for_diis, SCF::Options::no_of_threads_for_V, Molecule::noOfAtoms, BasisInfoStruct::noOfBasisFuncs, SCF::Options::output_density_at_every_step, SCF::Options::output_homo_and_lumo_eigenvectors, SCF::Options::output_mulliken_pop, SCF::MatOptions::parallelLevel, SCF::MatOptions::prepare(), SCF::Options::puri_eig_acc_factor_for_guess, SCF::Options::purification_eigvalue_err_limit, SCF::Options::purification_subspace_err_limit, SCF::Options::purification_truncation_norm, Dft::GridParams::radialGridScheme, SCF::Options::save_final_potential, Ergo::scfOptions, mat::FileWritable::setPath(), SCF::Options::shift_using_prev_density_matrix, SCF::MatOptions::sparse_matrix_block_factor_1, SCF::MatOptions::sparse_matrix_block_factor_2, SCF::MatOptions::sparse_matrix_block_factor_3, SCF::MatOptions::sparse_matrix_block_size, SCF::MatOptions::sparse_threshold, SCF::Options::sparse_threshold_for_S, SCF::Options::sparse_threshold_for_Z, SCF::Options::starting_guess_disturbance, SCF::Options::step_length_giveup, SCF::Options::step_length_start, SCF::MatOptions::threads, SCF::MatOptions::threshold_inch, Dft::GridParams::TURBO, Dft::GridParams::TYPE_HICU, SCF::Options::use_dft, SCF::Options::use_diag_on_error, SCF::Options::use_diag_on_error_guess, SCF::Options::use_diagonalization, SCF::Options::use_diis_always, SCF::Options::use_simple_dense_H_core, SCF::Options::use_simple_starting_guess, Vector3D::v, var_get_int, var_get_intMA, var_get_intSCF, var_get_intXC, var_get_real, var_get_realJK, var_get_realMA, var_get_realSCF, var_get_realXC, var_get_string(), var_get_stringSCF, var_get_stringXC, and SCF::Options::write_overlap_matrix.

Referenced by es_get_polarisability(), es_getexc(), and yyparse().

int es_set_nthreads ( int  nThreads  ) 
int es_set_nthreads_string ( const char *  str  ) 

References es_set_nthreads().

Referenced by main(), and yyparse().

void es_warranty ( void   ) 

References ERGO_LICENSE_TEXT_LONG.

Referenced by yyparse().

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]
static struct variable* variable_new ( struct variable tail,
const char *  name,
const char *  description,
enum VarType  type,
  ... 
) [static, read]

creates new variable item.

Such variable can be later assigned values etc.

Parameters:
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).

References variable::description, do_output(), ergo_new, variable::list, LOG_AREA_MAIN, LOG_CAT_ERROR, variable::name, variable::next, variable::num, variable::str, variable::type, variable::v, VAR_FLOAT, VAR_INT, VAR_LIST, VAR_STRING, and variable::vint.

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   ) 

Variable Documentation

BasisInfoStruct* Basis_info = NULL [static]
Ergo ergo [static]
IntegralInfo* ergoIntegralInfo = NULL [static]

Molecule stores geometry of the current molecule.

FILE* yyin

file used by the lex-generated parser.


Generated on 21 Nov 2012 for ergo by  doxygen 1.6.1