1
0
mirror of https://github.com/TREX-CoE/trexio.git synced 2024-10-02 14:31:05 +02:00
trexio/trex.html

2037 lines
65 KiB
HTML

<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" lang="en" xml:lang="en">
<head>
<!-- 2022-07-28 Thu 11:50 -->
<meta http-equiv="Content-Type" content="text/html;charset=utf-8" />
<meta name="viewport" content="width=device-width, initial-scale=1" />
<title>TREX Configuration file</title>
<meta name="generator" content="Org mode" />
<meta name="author" content="TREX-CoE" />
<style type="text/css">
<!--/*--><![CDATA[/*><!--*/
.title { text-align: center;
margin-bottom: .2em; }
.subtitle { text-align: center;
font-size: medium;
font-weight: bold;
margin-top:0; }
.todo { font-family: monospace; color: red; }
.done { font-family: monospace; color: green; }
.priority { font-family: monospace; color: orange; }
.tag { background-color: #eee; font-family: monospace;
padding: 2px; font-size: 80%; font-weight: normal; }
.timestamp { color: #bebebe; }
.timestamp-kwd { color: #5f9ea0; }
.org-right { margin-left: auto; margin-right: 0px; text-align: right; }
.org-left { margin-left: 0px; margin-right: auto; text-align: left; }
.org-center { margin-left: auto; margin-right: auto; text-align: center; }
.underline { text-decoration: underline; }
#postamble p, #preamble p { font-size: 90%; margin: .2em; }
p.verse { margin-left: 3%; }
pre {
border: 1px solid #ccc;
box-shadow: 3px 3px 3px #eee;
padding: 8pt;
font-family: monospace;
overflow: auto;
margin: 1.2em;
}
pre.src {
position: relative;
overflow: visible;
padding-top: 1.2em;
}
pre.src:before {
display: none;
position: absolute;
background-color: white;
top: -10px;
right: 10px;
padding: 3px;
border: 1px solid black;
}
pre.src:hover:before { display: inline;}
/* Languages per Org manual */
pre.src-asymptote:before { content: 'Asymptote'; }
pre.src-awk:before { content: 'Awk'; }
pre.src-C:before { content: 'C'; }
/* pre.src-C++ doesn't work in CSS */
pre.src-clojure:before { content: 'Clojure'; }
pre.src-css:before { content: 'CSS'; }
pre.src-D:before { content: 'D'; }
pre.src-ditaa:before { content: 'ditaa'; }
pre.src-dot:before { content: 'Graphviz'; }
pre.src-calc:before { content: 'Emacs Calc'; }
pre.src-emacs-lisp:before { content: 'Emacs Lisp'; }
pre.src-fortran:before { content: 'Fortran'; }
pre.src-gnuplot:before { content: 'gnuplot'; }
pre.src-haskell:before { content: 'Haskell'; }
pre.src-hledger:before { content: 'hledger'; }
pre.src-java:before { content: 'Java'; }
pre.src-js:before { content: 'Javascript'; }
pre.src-latex:before { content: 'LaTeX'; }
pre.src-ledger:before { content: 'Ledger'; }
pre.src-lisp:before { content: 'Lisp'; }
pre.src-lilypond:before { content: 'Lilypond'; }
pre.src-lua:before { content: 'Lua'; }
pre.src-matlab:before { content: 'MATLAB'; }
pre.src-mscgen:before { content: 'Mscgen'; }
pre.src-ocaml:before { content: 'Objective Caml'; }
pre.src-octave:before { content: 'Octave'; }
pre.src-org:before { content: 'Org mode'; }
pre.src-oz:before { content: 'OZ'; }
pre.src-plantuml:before { content: 'Plantuml'; }
pre.src-processing:before { content: 'Processing.js'; }
pre.src-python:before { content: 'Python'; }
pre.src-R:before { content: 'R'; }
pre.src-ruby:before { content: 'Ruby'; }
pre.src-sass:before { content: 'Sass'; }
pre.src-scheme:before { content: 'Scheme'; }
pre.src-screen:before { content: 'Gnu Screen'; }
pre.src-sed:before { content: 'Sed'; }
pre.src-sh:before { content: 'shell'; }
pre.src-sql:before { content: 'SQL'; }
pre.src-sqlite:before { content: 'SQLite'; }
/* additional languages in org.el's org-babel-load-languages alist */
pre.src-forth:before { content: 'Forth'; }
pre.src-io:before { content: 'IO'; }
pre.src-J:before { content: 'J'; }
pre.src-makefile:before { content: 'Makefile'; }
pre.src-maxima:before { content: 'Maxima'; }
pre.src-perl:before { content: 'Perl'; }
pre.src-picolisp:before { content: 'Pico Lisp'; }
pre.src-scala:before { content: 'Scala'; }
pre.src-shell:before { content: 'Shell Script'; }
pre.src-ebnf2ps:before { content: 'ebfn2ps'; }
/* additional language identifiers per "defun org-babel-execute"
in ob-*.el */
pre.src-cpp:before { content: 'C++'; }
pre.src-abc:before { content: 'ABC'; }
pre.src-coq:before { content: 'Coq'; }
pre.src-groovy:before { content: 'Groovy'; }
/* additional language identifiers from org-babel-shell-names in
ob-shell.el: ob-shell is the only babel language using a lambda to put
the execution function name together. */
pre.src-bash:before { content: 'bash'; }
pre.src-csh:before { content: 'csh'; }
pre.src-ash:before { content: 'ash'; }
pre.src-dash:before { content: 'dash'; }
pre.src-ksh:before { content: 'ksh'; }
pre.src-mksh:before { content: 'mksh'; }
pre.src-posh:before { content: 'posh'; }
/* Additional Emacs modes also supported by the LaTeX listings package */
pre.src-ada:before { content: 'Ada'; }
pre.src-asm:before { content: 'Assembler'; }
pre.src-caml:before { content: 'Caml'; }
pre.src-delphi:before { content: 'Delphi'; }
pre.src-html:before { content: 'HTML'; }
pre.src-idl:before { content: 'IDL'; }
pre.src-mercury:before { content: 'Mercury'; }
pre.src-metapost:before { content: 'MetaPost'; }
pre.src-modula-2:before { content: 'Modula-2'; }
pre.src-pascal:before { content: 'Pascal'; }
pre.src-ps:before { content: 'PostScript'; }
pre.src-prolog:before { content: 'Prolog'; }
pre.src-simula:before { content: 'Simula'; }
pre.src-tcl:before { content: 'tcl'; }
pre.src-tex:before { content: 'TeX'; }
pre.src-plain-tex:before { content: 'Plain TeX'; }
pre.src-verilog:before { content: 'Verilog'; }
pre.src-vhdl:before { content: 'VHDL'; }
pre.src-xml:before { content: 'XML'; }
pre.src-nxml:before { content: 'XML'; }
/* add a generic configuration mode; LaTeX export needs an additional
(add-to-list 'org-latex-listings-langs '(conf " ")) in .emacs */
pre.src-conf:before { content: 'Configuration File'; }
table { border-collapse:collapse; }
caption.t-above { caption-side: top; }
caption.t-bottom { caption-side: bottom; }
td, th { vertical-align:top; }
th.org-right { text-align: center; }
th.org-left { text-align: center; }
th.org-center { text-align: center; }
td.org-right { text-align: right; }
td.org-left { text-align: left; }
td.org-center { text-align: center; }
dt { font-weight: bold; }
.footpara { display: inline; }
.footdef { margin-bottom: 1em; }
.figure { padding: 1em; }
.figure p { text-align: center; }
.inlinetask {
padding: 10px;
border: 2px solid gray;
margin: 10px;
background: #ffffcc;
}
#org-div-home-and-up
{ text-align: right; font-size: 70%; white-space: nowrap; }
textarea { overflow-x: auto; }
.linenr { font-size: smaller }
.code-highlighted { background-color: #ffff00; }
.org-info-js_info-navigation { border-style: none; }
#org-info-js_console-label
{ font-size: 10px; font-weight: bold; white-space: nowrap; }
.org-info-js_search-highlight
{ background-color: #ffff00; color: #000000; font-weight: bold; }
.org-svg { width: 90%; }
/*]]>*/-->
</style>
<link rel="stylesheet" title="Standard" href="trexio.css" type="text/css" />
<script type="text/javascript" src="org-info.js">
/**
*
* @source: org-info.js
*
* @licstart The following is the entire license notice for the
* JavaScript code in org-info.js.
*
* Copyright (C) 2012-2019 Free Software Foundation, Inc.
*
*
* The JavaScript code in this tag is free software: you can
* redistribute it and/or modify it under the terms of the GNU
* General Public License (GNU GPL) as published by the Free Software
* Foundation, either version 3 of the License, or (at your option)
* any later version. The code is distributed WITHOUT ANY WARRANTY;
* without even the implied warranty of MERCHANTABILITY or FITNESS
* FOR A PARTICULAR PURPOSE. See the GNU GPL for more details.
*
* As additional permission under GNU GPL version 3 section 7, you
* may distribute non-source (e.g., minimized or compacted) forms of
* that code without the copy of the GNU GPL normally required by
* section 4, provided you include this license notice and a URL
* through which recipients can access the Corresponding Source.
*
* @licend The above is the entire license notice
* for the JavaScript code in org-info.js.
*
*/
</script>
<script type="text/javascript">
/*
@licstart The following is the entire license notice for the
JavaScript code in this tag.
Copyright (C) 2012-2019 Free Software Foundation, Inc.
The JavaScript code in this tag is free software: you can
redistribute it and/or modify it under the terms of the GNU
General Public License (GNU GPL) as published by the Free Software
Foundation, either version 3 of the License, or (at your option)
any later version. The code is distributed WITHOUT ANY WARRANTY;
without even the implied warranty of MERCHANTABILITY or FITNESS
FOR A PARTICULAR PURPOSE. See the GNU GPL for more details.
As additional permission under GNU GPL version 3 section 7, you
may distribute non-source (e.g., minimized or compacted) forms of
that code without the copy of the GNU GPL normally required by
section 4, provided you include this license notice and a URL
through which recipients can access the Corresponding Source.
@licend The above is the entire license notice
for the JavaScript code in this tag.
*/
<!--/*--><![CDATA[/*><!--*/
org_html_manager.set("TOC_DEPTH", "4");
org_html_manager.set("LINK_HOME", "index.html");
org_html_manager.set("LINK_UP", "");
org_html_manager.set("LOCAL_TOC", "1");
org_html_manager.set("VIEW_BUTTONS", "0");
org_html_manager.set("MOUSE_HINT", "underline");
org_html_manager.set("FIXED_TOC", "0");
org_html_manager.set("TOC", "1");
org_html_manager.set("VIEW", "info");
org_html_manager.setup(); // activate after the parameters are set
/*]]>*///-->
</script>
<script type="text/javascript">
/*
@licstart The following is the entire license notice for the
JavaScript code in this tag.
Copyright (C) 2012-2019 Free Software Foundation, Inc.
The JavaScript code in this tag is free software: you can
redistribute it and/or modify it under the terms of the GNU
General Public License (GNU GPL) as published by the Free Software
Foundation, either version 3 of the License, or (at your option)
any later version. The code is distributed WITHOUT ANY WARRANTY;
without even the implied warranty of MERCHANTABILITY or FITNESS
FOR A PARTICULAR PURPOSE. See the GNU GPL for more details.
As additional permission under GNU GPL version 3 section 7, you
may distribute non-source (e.g., minimized or compacted) forms of
that code without the copy of the GNU GPL normally required by
section 4, provided you include this license notice and a URL
through which recipients can access the Corresponding Source.
@licend The above is the entire license notice
for the JavaScript code in this tag.
*/
<!--/*--><![CDATA[/*><!--*/
function CodeHighlightOn(elem, id)
{
var target = document.getElementById(id);
if(null != target) {
elem.cacheClassElem = elem.className;
elem.cacheClassTarget = target.className;
target.className = "code-highlighted";
elem.className = "code-highlighted";
}
}
function CodeHighlightOff(elem, id)
{
var target = document.getElementById(id);
if(elem.cacheClassElem)
elem.className = elem.cacheClassElem;
if(elem.cacheClassTarget)
target.className = elem.cacheClassTarget;
}
/*]]>*///-->
</script>
<script type="text/x-mathjax-config">
MathJax.Hub.Config({
displayAlign: "center",
displayIndent: "0em",
"HTML-CSS": { scale: 100,
linebreaks: { automatic: "false" },
webFont: "TeX"
},
SVG: {scale: 100,
linebreaks: { automatic: "false" },
font: "TeX"},
NativeMML: {scale: 100},
TeX: { equationNumbers: {autoNumber: "AMS"},
MultLineWidth: "85%",
TagSide: "right",
TagIndent: ".8em"
}
});
</script>
<script type="text/javascript"
src="https://cdnjs.cloudflare.com/ajax/libs/mathjax/2.7.0/MathJax.js?config=TeX-AMS_HTML"></script>
</head>
<body>
<div id="org-div-home-and-up">
<a accesskey="h" href=""> UP </a>
|
<a accesskey="H" href="index.html"> HOME </a>
</div><div id="content">
<h1 class="title">TREX Configuration file</h1>
<div id="table-of-contents">
<h2>Table of Contents</h2>
<div id="text-table-of-contents">
<ul>
<li><a href="#org5616564">1. Metadata (metadata group)</a></li>
<li><a href="#org81e1d34">2. Electron (electron group)</a></li>
<li><a href="#orgaa99e7b">3. Nucleus (nucleus group)</a></li>
<li><a href="#org0e63431">4. Effective core potentials (ecp group)</a>
<ul>
<li><a href="#org7a10252">4.1. Example</a></li>
</ul>
</li>
<li><a href="#orgfbee7c3">5. Basis set (basis group)</a>
<ul>
<li><a href="#org5d46282">5.1. Example</a></li>
</ul>
</li>
<li><a href="#org3643ce9">6. Atomic orbitals (ao group)</a>
<ul>
<li><a href="#ao_one_e">6.1. One-electron integrals (<code>ao_1e_int</code> group)</a></li>
<li><a href="#ao_two_e">6.2. Two-electron integrals (<code>ao_2e_int</code> group)</a></li>
</ul>
</li>
<li><a href="#org5d46e89">7. Molecular orbitals (mo group)</a>
<ul>
<li><a href="#orgf72b0b6">7.1. One-electron integrals (<code>mo_1e_int</code> group)</a></li>
<li><a href="#org169f192">7.2. Two-electron integrals (<code>mo_2e_int</code> group)</a></li>
</ul>
</li>
<li><a href="#org93c2ce0">8. Slater determinants (determinant group)</a></li>
<li><a href="#org4327538">9. Excited states (state group)</a></li>
<li><a href="#orge1a7b0e">10. Reduced density matrices (rdm group)</a></li>
<li><a href="#orgc79c0a1">11. Cell (cell group)</a></li>
<li><a href="#org8c4d404">12. Periodic boundary calculations (pbc group)</a></li>
<li><a href="#orga1f1553">13. Quantum Monte Carlo data (qmc group)</a></li>
</ul>
</div>
</div>
<p>
This page contains information about the general structure of the
TREXIO library. The source code of the library can be automatically
generated based on the contents of the <code>trex.json</code> configuration file,
which itself is generated from different sections (groups) presented
below.
</p>
<p>
All quantities are saved in TREXIO files in atomic units. The
dimensions of the arrays in the tables below are given in column-major
order (as in Fortran), and the ordering of the dimensions is reversed
in the produced <code>trex.json</code> configuration file as the library is
written in C.
</p>
<p>
TREXIO currently supports <code>int</code>, <code>float</code> and <code>str</code> types for both
single attributes and arrays. Note, that some attributes might have
<code>dim</code> type (e.g. <code>num</code> of the <code>nucleus</code> group). This type is treated
exactly in the same way as <code>int</code> with the only difference that <code>dim</code>
variables cannot be negative. This additional constraint is required
because <code>dim</code> attributes are used internally to allocate memory and to
check array boundaries in the memory-safe API. Most of the times, the
<code>dim</code> variables contain the <code>num</code> suffix.
You may also encounter some <code>dim readonly</code> variables.
It means that the value is automatically computed and written by the
TREXIO library, thus it is read-only and cannot be (over)written by the
user.
</p>
<p>
In Fortran, arrays are 1-based and in most other languages the
arrays are 0-based. Hence, we introduce the <code>index</code> type which is a
1-based <code>int</code> in the Fortran interface and 0-based otherwise.
</p>
<p>
For sparse data structures such as electron replusion integrals,
the data can be too large to fit in memory and the data needs to be
fetched using multiple function calls to perform I/O on buffers.
For more information on how to read/write sparse data structures, see
the <a href="./examples.html">examples</a>.
</p>
<p>
For determinants, the <code>special</code> attribute is present in the type. This
means that the source code is not produced by the generator, but hand-written.
</p>
<div id="outline-container-org5616564" class="outline-2">
<h2 id="org5616564"><span class="section-number-2">1</span> Metadata (metadata group)</h2>
<div class="outline-text-2" id="text-1">
<p>
As we expect our files to be archived in open-data repositories, we
need to give the possibility to the users to store some metadata
inside the files. We propose to store the list of names of the codes
which have participated to the creation of the file, a list of
authors of the file, and a textual description.
</p>
<table id="org7949a13" border="2" cellspacing="0" cellpadding="6" rules="groups" frame="hsides">
<colgroup>
<col class="org-left" />
<col class="org-left" />
<col class="org-left" />
<col class="org-left" />
</colgroup>
<thead>
<tr>
<th scope="col" class="org-left">Variable</th>
<th scope="col" class="org-left">Type</th>
<th scope="col" class="org-left">Dimensions (for arrays)</th>
<th scope="col" class="org-left">Description</th>
</tr>
</thead>
<tbody>
<tr>
<td class="org-left"><code>code_num</code></td>
<td class="org-left"><code>dim</code></td>
<td class="org-left">&#xa0;</td>
<td class="org-left">Number of codes used to produce the file</td>
</tr>
<tr>
<td class="org-left"><code>code</code></td>
<td class="org-left"><code>str</code></td>
<td class="org-left"><code>(metadata.code_num)</code></td>
<td class="org-left">Names of the codes used</td>
</tr>
<tr>
<td class="org-left"><code>author_num</code></td>
<td class="org-left"><code>dim</code></td>
<td class="org-left">&#xa0;</td>
<td class="org-left">Number of authors of the file</td>
</tr>
<tr>
<td class="org-left"><code>author</code></td>
<td class="org-left"><code>str</code></td>
<td class="org-left"><code>(metadata.author_num)</code></td>
<td class="org-left">Names of the authors of the file</td>
</tr>
<tr>
<td class="org-left"><code>package_version</code></td>
<td class="org-left"><code>str</code></td>
<td class="org-left">&#xa0;</td>
<td class="org-left">TREXIO version used to produce the file</td>
</tr>
<tr>
<td class="org-left"><code>description</code></td>
<td class="org-left"><code>str</code></td>
<td class="org-left">&#xa0;</td>
<td class="org-left">Text describing the content of file</td>
</tr>
<tr>
<td class="org-left"><code>unsafe</code></td>
<td class="org-left"><code>int</code></td>
<td class="org-left">&#xa0;</td>
<td class="org-left"><code>1</code>: true, <code>0</code>: false</td>
</tr>
</tbody>
</table>
<p>
<b><b>Note:</b></b> <code>unsafe</code> attribute of the <code>metadata</code> group indicates whether the file has been previously opened with <code>'u'</code> mode.
It is automatically written in the file upon the first unsafe opening.
If the user has checked that the TREXIO file is valid (e.g. using <code>trexio-tools</code>) after unsafe operations,
then the <code>unsafe</code> attribute value can be manually overwritten (in unsafe mode) from <code>1</code> to <code>0</code>.
</p>
</div>
</div>
<div id="outline-container-org81e1d34" class="outline-2">
<h2 id="org81e1d34"><span class="section-number-2">2</span> Electron (electron group)</h2>
<div class="outline-text-2" id="text-2">
<p>
We consider wave functions expressed in the spin-free formalism, where
the number of &uarr; and &darr; electrons is fixed.
</p>
<table id="org106c53f" border="2" cellspacing="0" cellpadding="6" rules="groups" frame="hsides">
<colgroup>
<col class="org-left" />
<col class="org-left" />
<col class="org-left" />
<col class="org-left" />
</colgroup>
<thead>
<tr>
<th scope="col" class="org-left">Variable</th>
<th scope="col" class="org-left">Type</th>
<th scope="col" class="org-left">Dimensions</th>
<th scope="col" class="org-left">Description</th>
</tr>
</thead>
<tbody>
<tr>
<td class="org-left"><code>num</code></td>
<td class="org-left"><code>dim</code></td>
<td class="org-left">&#xa0;</td>
<td class="org-left">Number of electrons</td>
</tr>
<tr>
<td class="org-left"><code>up_num</code></td>
<td class="org-left"><code>int</code></td>
<td class="org-left">&#xa0;</td>
<td class="org-left">Number of &uarr;-spin electrons</td>
</tr>
<tr>
<td class="org-left"><code>dn_num</code></td>
<td class="org-left"><code>int</code></td>
<td class="org-left">&#xa0;</td>
<td class="org-left">Number of &darr;-spin electrons</td>
</tr>
</tbody>
</table>
</div>
</div>
<div id="outline-container-orgaa99e7b" class="outline-2">
<h2 id="orgaa99e7b"><span class="section-number-2">3</span> Nucleus (nucleus group)</h2>
<div class="outline-text-2" id="text-3">
<p>
The nuclei are considered as fixed point charges. Coordinates are
given in Cartesian \((x,y,z)\) format.
</p>
<table id="org18785e4" border="2" cellspacing="0" cellpadding="6" rules="groups" frame="hsides">
<colgroup>
<col class="org-left" />
<col class="org-left" />
<col class="org-left" />
<col class="org-left" />
</colgroup>
<thead>
<tr>
<th scope="col" class="org-left">Variable</th>
<th scope="col" class="org-left">Type</th>
<th scope="col" class="org-left">Dimensions</th>
<th scope="col" class="org-left">Description</th>
</tr>
</thead>
<tbody>
<tr>
<td class="org-left"><code>num</code></td>
<td class="org-left"><code>dim</code></td>
<td class="org-left">&#xa0;</td>
<td class="org-left">Number of nuclei</td>
</tr>
<tr>
<td class="org-left"><code>charge</code></td>
<td class="org-left"><code>float</code></td>
<td class="org-left"><code>(nucleus.num)</code></td>
<td class="org-left">Charges of the nuclei</td>
</tr>
<tr>
<td class="org-left"><code>coord</code></td>
<td class="org-left"><code>float</code></td>
<td class="org-left"><code>(3,nucleus.num)</code></td>
<td class="org-left">Coordinates of the atoms</td>
</tr>
<tr>
<td class="org-left"><code>label</code></td>
<td class="org-left"><code>str</code></td>
<td class="org-left"><code>(nucleus.num)</code></td>
<td class="org-left">Atom labels</td>
</tr>
<tr>
<td class="org-left"><code>point_group</code></td>
<td class="org-left"><code>str</code></td>
<td class="org-left">&#xa0;</td>
<td class="org-left">Symmetry point group</td>
</tr>
<tr>
<td class="org-left"><code>repulsion</code></td>
<td class="org-left"><code>float</code></td>
<td class="org-left">&#xa0;</td>
<td class="org-left">Nuclear repulsion energy</td>
</tr>
</tbody>
</table>
</div>
</div>
<div id="outline-container-org0e63431" class="outline-2">
<h2 id="org0e63431"><span class="section-number-2">4</span> Effective core potentials (ecp group)</h2>
<div class="outline-text-2" id="text-4">
<p>
An effective core potential (ECP) \(V_A^{\text{ECP}}\) replacing the
core electrons of atom \(A\) can be expressed as
\[
V_A^{\text{ECP}} =
V_{A \ell_{\max}+1} +
\sum_{\ell=0}^{\ell_{\max}}
\sum_{m=-\ell}^{\ell} | Y_{\ell m} \rangle \left[
V_{A \ell} - V_{A \ell_{\max}+1} \right] \langle Y_{\ell m} |
\]
</p>
<p>
The first term in the equation above is sometimes attributed to the local channel,
while the remaining terms correspond to the non-local channel projections.
</p>
<p>
The functions \(V_{A\ell}\) are parameterized as:
\[
V_{A \ell}(\mathbf{r}) =
\sum_{q=1}^{N_{q \ell}}
\beta_{A q \ell}\, |\mathbf{r}-\mathbf{R}_{A}|^{n_{A q \ell}}\,
e^{-\alpha_{A q \ell} |\mathbf{r}-\mathbf{R}_{A}|^2 }
\]
</p>
<p>
See <a href="http://dx.doi.org/10.1063/1.4984046">http://dx.doi.org/10.1063/1.4984046</a> or <a href="https://doi.org/10.1063/1.5121006">https://doi.org/10.1063/1.5121006</a> for more info.
</p>
<table id="org5de2895" border="2" cellspacing="0" cellpadding="6" rules="groups" frame="hsides">
<colgroup>
<col class="org-left" />
<col class="org-left" />
<col class="org-left" />
<col class="org-left" />
</colgroup>
<thead>
<tr>
<th scope="col" class="org-left">Variable</th>
<th scope="col" class="org-left">Type</th>
<th scope="col" class="org-left">Dimensions</th>
<th scope="col" class="org-left">Description</th>
</tr>
</thead>
<tbody>
<tr>
<td class="org-left"><code>max_ang_mom_plus_1</code></td>
<td class="org-left"><code>int</code></td>
<td class="org-left"><code>(nucleus.num)</code></td>
<td class="org-left">\(\ell_{\max}+1\), one higher than the max angular momentum in the removed core orbitals</td>
</tr>
<tr>
<td class="org-left"><code>z_core</code></td>
<td class="org-left"><code>int</code></td>
<td class="org-left"><code>(nucleus.num)</code></td>
<td class="org-left">Number of core electrons to remove per atom</td>
</tr>
<tr>
<td class="org-left"><code>num</code></td>
<td class="org-left"><code>dim</code></td>
<td class="org-left">&#xa0;</td>
<td class="org-left">Total number of ECP functions for all atoms and all values of \(\ell\)</td>
</tr>
<tr>
<td class="org-left"><code>ang_mom</code></td>
<td class="org-left"><code>int</code></td>
<td class="org-left"><code>(ecp.num)</code></td>
<td class="org-left">One-to-one correspondence between ECP items and the angular momentum \(\ell\)</td>
</tr>
<tr>
<td class="org-left"><code>nucleus_index</code></td>
<td class="org-left"><code>index</code></td>
<td class="org-left"><code>(ecp.num)</code></td>
<td class="org-left">One-to-one correspondence between ECP items and the atom index</td>
</tr>
<tr>
<td class="org-left"><code>exponent</code></td>
<td class="org-left"><code>float</code></td>
<td class="org-left"><code>(ecp.num)</code></td>
<td class="org-left">\(\alpha_{A q \ell}\) all ECP exponents</td>
</tr>
<tr>
<td class="org-left"><code>coefficient</code></td>
<td class="org-left"><code>float</code></td>
<td class="org-left"><code>(ecp.num)</code></td>
<td class="org-left">\(\beta_{A q \ell}\) all ECP coefficients</td>
</tr>
<tr>
<td class="org-left"><code>power</code></td>
<td class="org-left"><code>int</code></td>
<td class="org-left"><code>(ecp.num)</code></td>
<td class="org-left">\(n_{A q \ell}\) all ECP powers</td>
</tr>
</tbody>
</table>
<p>
There might be some confusion in the meaning of the \(\ell_{\max}\).
It can be attributed to the maximum angular momentum occupied
in the core orbitals, which are removed by the ECP.
On the other hand, it can be attributed to the maximum angular momentum of the
ECP that replaces the core electrons.
<b>Note</b>, that the latter \(\ell_{\max}\) is always higher by 1 than the former.
</p>
<p>
<b>Note for developers</b>: avoid having variables with similar prefix in their name.
HDF5 back end might cause issues due to the way <code>find_dataset</code> function works.
For example, in the ECP group we use <code>max_ang_mom</code> and not <code>ang_mom_max</code>.
The latter causes issues when written before the <code>ang_mom</code> array in the TREXIO file.
<b>Update</b>: in fact, the aforementioned issue has only been observed when using HDF5 version 1.10.4
installed via <code>apt-get</code>. Installing the same version from the <code>conda-forge</code> channel and running it in
an isolated <code>conda</code> environment works just fine. Thus, it seems to be a bug in the <code>apt</code>-provided package.
If you encounter the aforementioned issue, please report it to our <a href="https://github.com/TREX-CoE/trexio/issues">issue tracker on GitHub</a>.
</p>
</div>
<div id="outline-container-org7a10252" class="outline-3">
<h3 id="org7a10252"><span class="section-number-3">4.1</span> Example</h3>
<div class="outline-text-3" id="text-4-1">
<p>
For example, consider H<sub>2</sub> molecule with the following
<a href="https://pseudopotentiallibrary.org/recipes/H/ccECP/H.ccECP.gamess">effective core potential</a>
(in GAMESS input format for the H atom):
</p>
<pre class="example">
H-ccECP GEN 0 1
3
1.00000000000000 1 21.24359508259891
21.24359508259891 3 21.24359508259891
-10.85192405303825 2 21.77696655044365
1
0.00000000000000 2 1.000000000000000
</pre>
<p>
In TREXIO representation this would be:
</p>
<pre class="example">
num = 8
# lmax+1 per atom
max_ang_mom_plus_1 = [ 1, 1 ]
# number of core electrons to remove per atom
zcore = [ 0, 0 ]
# first 4 ECP elements correspond to the first H atom ; the remaining 4 elements are for the second H atom
nucleus_index = [
0, 0, 0, 0,
1, 1, 1, 1
]
# 3 first ECP elements correspond to potential of the P orbital (l=1), then 1 element for the S orbital (l=0) ; similar for the second H atom
ang_mom = [
1, 1, 1, 0,
1, 1, 1, 0
]
# ECP quantities that can be attributed to atoms and/or angular momenta based on the aforementioned ecp_nucleus and ecp_ang_mom arrays
coefficient = [
1.00000000000000, 21.24359508259891, -10.85192405303825, 0.00000000000000,
1.00000000000000, 21.24359508259891, -10.85192405303825, 0.00000000000000
]
exponent = [
21.24359508259891, 21.24359508259891, 21.77696655044365, 1.000000000000000,
21.24359508259891, 21.24359508259891, 21.77696655044365, 1.000000000000000
]
power = [
-1, 1, 0, 0,
-1, 1, 0, 0
]
</pre>
</div>
</div>
</div>
<div id="outline-container-orgfbee7c3" class="outline-2">
<h2 id="orgfbee7c3"><span class="section-number-2">5</span> Basis set (basis group)</h2>
<div class="outline-text-2" id="text-5">
<p>
We consider here basis functions centered on nuclei. Hence, we enable
the possibility to define <i>dummy atoms</i> to place basis functions in
random positions.
</p>
<p>
The atomic basis set is defined as a list of shells. Each shell \(s\) is
centered on a center \(A\), possesses a given angular momentum \(l\) and a
radial function \(R_s\). The radial function is a linear combination of
\(N_{\text{prim}}\) <i>primitive</i> functions that can be of type
Slater (\(p=1\)) or Gaussian (\(p=2\)),
parameterized by exponents \(\gamma_{ks}\) and coefficients \(a_{ks}\):
\[
R_s(\mathbf{r}) = \mathcal{N}_s \vert\mathbf{r}-\mathbf{R}_A\vert^{n_s}
\sum_{k=1}^{N_{\text{prim}}} a_{ks}\, f_{ks}(\gamma_{ks},p)\,
\exp \left( - \gamma_{ks}
\vert \mathbf{r}-\mathbf{R}_A \vert ^p \right).
\]
</p>
<p>
In the case of Gaussian functions, \(n_s\) is always zero.
</p>
<p>
Different codes normalize functions at different levels. Computing
normalization factors requires the ability to compute overlap
integrals, so the normalization factors should be written in the
file to ensure that the file is self-contained and does not need the
client program to have the ability to compute such integrals.
</p>
<p>
Some codes assume that the contraction coefficients are for a linear
combination of <i>normalized</i> primitives. This implies that a normalization
constant for the primitive \(ks\) needs to be computed and stored. If
this normalization factor is not required, \(f_{ks}=1\).
</p>
<p>
Some codes assume that the basis function are normalized. This
implies the computation of an extra normalization factor, \(\mathcal{N}_s\).
If the the basis function is not considered normalized, \(\mathcal{N}_s=1\).
</p>
<p>
All the basis set parameters are stored in one-dimensional arrays:
</p>
<table id="org7e2ddbb" border="2" cellspacing="0" cellpadding="6" rules="groups" frame="hsides">
<colgroup>
<col class="org-left" />
<col class="org-left" />
<col class="org-left" />
<col class="org-left" />
</colgroup>
<thead>
<tr>
<th scope="col" class="org-left">Variable</th>
<th scope="col" class="org-left">Type</th>
<th scope="col" class="org-left">Dimensions</th>
<th scope="col" class="org-left">Description</th>
</tr>
</thead>
<tbody>
<tr>
<td class="org-left"><code>type</code></td>
<td class="org-left"><code>str</code></td>
<td class="org-left">&#xa0;</td>
<td class="org-left">Type of basis set: "Gaussian" or "Slater"</td>
</tr>
<tr>
<td class="org-left"><code>prim_num</code></td>
<td class="org-left"><code>dim</code></td>
<td class="org-left">&#xa0;</td>
<td class="org-left">Total number of primitives</td>
</tr>
<tr>
<td class="org-left"><code>shell_num</code></td>
<td class="org-left"><code>dim</code></td>
<td class="org-left">&#xa0;</td>
<td class="org-left">Total number of shells</td>
</tr>
<tr>
<td class="org-left"><code>nucleus_index</code></td>
<td class="org-left"><code>index</code></td>
<td class="org-left"><code>(basis.shell_num)</code></td>
<td class="org-left">One-to-one correspondence between shells and atomic indices</td>
</tr>
<tr>
<td class="org-left"><code>shell_ang_mom</code></td>
<td class="org-left"><code>int</code></td>
<td class="org-left"><code>(basis.shell_num)</code></td>
<td class="org-left">One-to-one correspondence between shells and angular momenta</td>
</tr>
<tr>
<td class="org-left"><code>shell_factor</code></td>
<td class="org-left"><code>float</code></td>
<td class="org-left"><code>(basis.shell_num)</code></td>
<td class="org-left">Normalization factor of each shell (\(\mathcal{N}_s\))</td>
</tr>
<tr>
<td class="org-left"><code>shell_index</code></td>
<td class="org-left"><code>index</code></td>
<td class="org-left"><code>(basis.prim_num)</code></td>
<td class="org-left">One-to-one correspondence between primitives and shell index</td>
</tr>
<tr>
<td class="org-left"><code>exponent</code></td>
<td class="org-left"><code>float</code></td>
<td class="org-left"><code>(basis.prim_num)</code></td>
<td class="org-left">Exponents of the primitives (\(\gamma_{ks}\))</td>
</tr>
<tr>
<td class="org-left"><code>coefficient</code></td>
<td class="org-left"><code>float</code></td>
<td class="org-left"><code>(basis.prim_num)</code></td>
<td class="org-left">Coefficients of the primitives (\(a_{ks}\))</td>
</tr>
<tr>
<td class="org-left"><code>prim_factor</code></td>
<td class="org-left"><code>float</code></td>
<td class="org-left"><code>(basis.prim_num)</code></td>
<td class="org-left">Normalization coefficients for the primitives (\(f_{ks}\))</td>
</tr>
</tbody>
</table>
</div>
<div id="outline-container-org5d46282" class="outline-3">
<h3 id="org5d46282"><span class="section-number-3">5.1</span> Example</h3>
<div class="outline-text-3" id="text-5-1">
<p>
For example, consider H<sub>2</sub> with the following basis set (in GAMESS
format), where both the AOs and primitives are considered normalized:
</p>
<pre class="example">
HYDROGEN
S 5
1 3.387000E+01 6.068000E-03
2 5.095000E+00 4.530800E-02
3 1.159000E+00 2.028220E-01
4 3.258000E-01 5.039030E-01
5 1.027000E-01 3.834210E-01
S 1
1 3.258000E-01 1.000000E+00
S 1
1 1.027000E-01 1.000000E+00
P 1
1 1.407000E+00 1.000000E+00
P 1
1 3.880000E-01 1.000000E+00
D 1
1 1.057000E+00 1.000000E+00
</pre>
<p>
In TREXIO representaion we have:
</p>
<pre class="example">
type = "Gaussian"
prim_num = 20
shell_num = 12
# 6 shells per H atom
nucleus_index =
[ 0, 0, 0, 0, 0, 0,
1, 1, 1, 1, 1, 1 ]
# 3 shells in S (l=0), 2 in P (l=1), 1 in D (l=2)
shell_ang_mom =
[ 0, 0, 0, 1, 1, 2,
0, 0, 0, 1, 1, 2 ]
# no need to renormalize shells
shell_factor =
[ 1., 1., 1., 1., 1., 1.,
1., 1., 1., 1., 1., 1. ]
# 5 primitives for the first S shell and then 1 primitive per remaining shells in each H atom
shell_index =
[ 0, 0, 0, 0, 0, 1, 2, 3, 4, 5,
6, 6, 6, 6, 6, 7, 8, 9, 10, 11 ]
# parameters of the primitives (10 per H atom)
exponent =
[ 33.87, 5.095, 1.159, 0.3258, 0.1027, 0.3258, 0.1027, 1.407, 0.388, 1.057,
33.87, 5.095, 1.159, 0.3258, 0.1027, 0.3258, 0.1027, 1.407, 0.388, 1.057 ]
coefficient =
[ 0.006068, 0.045308, 0.202822, 0.503903, 0.383421, 1.0, 1.0, 1.0, 1.0, 1.0,
0.006068, 0.045308, 0.202822, 0.503903, 0.383421, 1.0, 1.0, 1.0, 1.0, 1.0 ]
`
prim_factor =
[ 1.0006253235944540e+01, 2.4169531573445120e+00, 7.9610924849766440e-01
3.0734305383061117e-01, 1.2929684417481876e-01, 3.0734305383061117e-01,
1.2929684417481876e-01, 2.1842769845268308e+00, 4.3649547399719840e-01,
1.8135965626177861e+00, 1.0006253235944540e+01, 2.4169531573445120e+00,
7.9610924849766440e-01, 3.0734305383061117e-01, 1.2929684417481876e-01,
3.0734305383061117e-01, 1.2929684417481876e-01, 2.1842769845268308e+00,
4.3649547399719840e-01, 1.8135965626177861e+00 ]
</pre>
</div>
</div>
</div>
<div id="outline-container-org3643ce9" class="outline-2">
<h2 id="org3643ce9"><span class="section-number-2">6</span> Atomic orbitals (ao group)</h2>
<div class="outline-text-2" id="text-6">
<p>
Going from the atomic basis set to AOs implies a systematic
construction of all the angular functions of each shell. We
consider two cases for the angular functions: the real-valued
spherical harmonics, and the polynomials in Cartesian coordinates.
In the case of real spherical harmonics, the AOs are ordered as
\(0, +1, -1, +2, -2, \dots, +m, -m\) (see <a href="https://en.wikipedia.org/wiki/Table_of_spherical_harmonics#Real_spherical_harmonics">Wikipedia</a>).
In the case of polynomials we
impose the canonical (or alphabetical) ordering), i.e
</p>
\begin{eqnarray}
p & : & p_x, p_y, p_z \nonumber \\
d & : & d_{xx}, d_{xy}, d_{xz}, d_{yy}, d_{yz}, d_{zz} \nonumber \\
f & : & f_{xxx}, f_{xxy}, f_{xxz}, f_{xyy}, f_{xyz}, f_{xzz}, f_{yyy}, f_{yyz}, f_{yzz}, …f_{zzz} \nonumber \\
{\rm etc.} \nonumber
\end{eqnarray}
<p>
Note that there is no exception for \(p\) orbitals in spherical
coordinates: the ordering is \(0,+1,-1\) which corresponds \(p_z, p_x, p_y\).
</p>
<p>
AOs are defined as
</p>
<p>
\[
\chi_i (\mathbf{r}) = \mathcal{N}_i\, P_{\eta(i)}(\mathbf{r})\, R_{\theta(i)} (\mathbf{r})
\]
</p>
<p>
where \(i\) is the atomic orbital index,
\(P\) encodes for either the
polynomials or the spherical harmonics, \(\theta(i)\) returns the
shell on which the AO is expanded, and \(\eta(i)\) denotes which
angular function is chosen.
\(\mathcal{N}_i\) is a normalization factor that enables the
possibility to have different normalization coefficients within a
shell, as in the GAMESS convention where
\(\mathcal{N}_{x^2} \ne \mathcal{N}_{xy}\) because
\[ \left[ \iiint \left(x-X_A \right)^2 R_{\theta(i)}
(\mathbf{r}) dx\, dy\, dz \right]^{-1/2} \ne
\left[ \iiint \left( x-X_A \right) \left( y-Y_A \right) R_{\theta(i)}
(\mathbf{r}) dx\, dy\, dz \right]^{-1/2}. \]
</p>
<p>
In such a case, one should set the normalization of the shell (in
the <a href="#orgfbee7c3">Basis set</a> section) to \(\mathcal{N}_{z^2}\), which is the
normalization factor of the atomic orbitals in spherical coordinates.
The normalization factor of the \(xy\) function which should be
introduced here should be \(\frac{\mathcal{N}_{xy}}{\mathcal{N}_{z^2}}\).
</p>
<table id="org247a970" border="2" cellspacing="0" cellpadding="6" rules="groups" frame="hsides">
<colgroup>
<col class="org-left" />
<col class="org-left" />
<col class="org-left" />
<col class="org-left" />
</colgroup>
<thead>
<tr>
<th scope="col" class="org-left">Variable</th>
<th scope="col" class="org-left">Type</th>
<th scope="col" class="org-left">Dimensions</th>
<th scope="col" class="org-left">Description</th>
</tr>
</thead>
<tbody>
<tr>
<td class="org-left"><code>cartesian</code></td>
<td class="org-left"><code>int</code></td>
<td class="org-left">&#xa0;</td>
<td class="org-left"><code>1</code>: true, <code>0</code>: false</td>
</tr>
<tr>
<td class="org-left"><code>num</code></td>
<td class="org-left"><code>dim</code></td>
<td class="org-left">&#xa0;</td>
<td class="org-left">Total number of atomic orbitals</td>
</tr>
<tr>
<td class="org-left"><code>shell</code></td>
<td class="org-left"><code>index</code></td>
<td class="org-left"><code>(ao.num)</code></td>
<td class="org-left">basis set shell for each AO</td>
</tr>
<tr>
<td class="org-left"><code>normalization</code></td>
<td class="org-left"><code>float</code></td>
<td class="org-left"><code>(ao.num)</code></td>
<td class="org-left">Normalization factors</td>
</tr>
</tbody>
</table>
</div>
<div id="outline-container-org11a3d67" class="outline-3">
<h3 id="ao_one_e"><a id="org11a3d67"></a><span class="section-number-3">6.1</span> One-electron integrals (<code>ao_1e_int</code> group)</h3>
<div class="outline-text-3" id="text-ao_one_e">
<ul class="org-ul">
<li>\[ \hat{V}_{\text{ne}} = \sum_{A=1}^{N_\text{nucl}}
\sum_{i=1}^{N_\text{elec}} \frac{-Z_A }{\vert \mathbf{R}_A -
\mathbf{r}_i \vert} \] : electron-nucleus attractive potential,</li>
<li>\[ \hat{T}_{\text{e}} =
\sum_{i=1}^{N_\text{elec}} -\frac{1}{2}\hat{\Delta}_i \] : electronic kinetic energy</li>
<li>\(\hat{h} = \hat{T}_\text{e} + \hat{V}_\text{ne} + \hat{V}_\text{ECP}\) : core electronic Hamiltonian</li>
</ul>
<p>
The one-electron integrals for a one-electron operator \(\hat{O}\) are
\[ \langle p \vert \hat{O} \vert q \rangle \], returned as a matrix
over atomic orbitals.
</p>
<table id="orgc28972f" border="2" cellspacing="0" cellpadding="6" rules="groups" frame="hsides">
<colgroup>
<col class="org-left" />
<col class="org-left" />
<col class="org-left" />
<col class="org-left" />
</colgroup>
<thead>
<tr>
<th scope="col" class="org-left">Variable</th>
<th scope="col" class="org-left">Type</th>
<th scope="col" class="org-left">Dimensions</th>
<th scope="col" class="org-left">Description</th>
</tr>
</thead>
<tbody>
<tr>
<td class="org-left"><code>overlap</code></td>
<td class="org-left"><code>float</code></td>
<td class="org-left"><code>(ao.num, ao.num)</code></td>
<td class="org-left">\(\langle p \vert q \rangle\) (real part, general case)</td>
</tr>
<tr>
<td class="org-left"><code>kinetic</code></td>
<td class="org-left"><code>float</code></td>
<td class="org-left"><code>(ao.num, ao.num)</code></td>
<td class="org-left">\(\langle p \vert \hat{T}_e \vert q \rangle\) (real part, general case)</td>
</tr>
<tr>
<td class="org-left"><code>potential_n_e</code></td>
<td class="org-left"><code>float</code></td>
<td class="org-left"><code>(ao.num, ao.num)</code></td>
<td class="org-left">\(\langle p \vert \hat{V}_{\text{ne}} \vert q \rangle\) (real part, general case)</td>
</tr>
<tr>
<td class="org-left"><code>ecp</code></td>
<td class="org-left"><code>float</code></td>
<td class="org-left"><code>(ao.num, ao.num)</code></td>
<td class="org-left">\(\langle p \vert \hat{V}_{\text{ecp}} \vert q \rangle\) (real part, general case)</td>
</tr>
<tr>
<td class="org-left"><code>core_hamiltonian</code></td>
<td class="org-left"><code>float</code></td>
<td class="org-left"><code>(ao.num, ao.num)</code></td>
<td class="org-left">\(\langle p \vert \hat{h} \vert q \rangle\) (real part, general case)</td>
</tr>
<tr>
<td class="org-left"><code>overlap_im</code></td>
<td class="org-left"><code>float</code></td>
<td class="org-left"><code>(ao.num, ao.num)</code></td>
<td class="org-left">\(\langle p \vert q \rangle\) (imaginary part) (imaginary part)</td>
</tr>
<tr>
<td class="org-left"><code>kinetic_im</code></td>
<td class="org-left"><code>float</code></td>
<td class="org-left"><code>(ao.num, ao.num)</code></td>
<td class="org-left">\(\langle p \vert \hat{T}_e \vert q \rangle\) (imaginary part)</td>
</tr>
<tr>
<td class="org-left"><code>potential_n_e_im</code></td>
<td class="org-left"><code>float</code></td>
<td class="org-left"><code>(ao.num, ao.num)</code></td>
<td class="org-left">\(\langle p \vert \hat{V}_{\text{ne}} \vert q \rangle\) (imaginary part)</td>
</tr>
<tr>
<td class="org-left"><code>ecp_im</code></td>
<td class="org-left"><code>float</code></td>
<td class="org-left"><code>(ao.num, ao.num)</code></td>
<td class="org-left">\(\langle p \vert \hat{V}_{\text{ECP}} \vert q \rangle\) (imaginary part)</td>
</tr>
<tr>
<td class="org-left"><code>core_hamiltonian_im</code></td>
<td class="org-left"><code>float</code></td>
<td class="org-left"><code>(ao.num, ao.num)</code></td>
<td class="org-left">\(\langle p \vert \hat{h} \vert q \rangle\) (imaginary part)</td>
</tr>
</tbody>
</table>
</div>
</div>
<div id="outline-container-org1fccbc1" class="outline-3">
<h3 id="ao_two_e"><a id="org1fccbc1"></a><span class="section-number-3">6.2</span> Two-electron integrals (<code>ao_2e_int</code> group)</h3>
<div class="outline-text-3" id="text-ao_two_e">
<p>
The two-electron integrals for a two-electron operator \(\hat{O}\) are
\[ \langle p q \vert \hat{O} \vert r s \rangle \] in physicists
notation or \[ ( pr \vert \hat{O} \vert qs ) \] in chemists
notation, where \(p,q,r,s\) are indices over atomic orbitals.
</p>
<p>
Functions are provided to get the indices in physicists or chemists
notation.
</p>
<ul class="org-ul">
<li>\[ \hat{W}_{\text{ee}} = \sum_{i=2}^{N_\text{elec}} \sum_{j=1}^{i-1} \frac{1}{\vert \mathbf{r}_i - \mathbf{r}_j \vert} \] : electron-electron repulsive potential operator.</li>
<li>\[ \hat{W}^{lr}_{\text{ee}} = \sum_{i=2}^{N_\text{elec}}
\sum_{j=1}^{i-1} \frac{\text{erf}(\vert \mathbf{r}_i -
\mathbf{r}_j \vert)}{\vert \mathbf{r}_i - \mathbf{r}_j \vert} \] : electron-electron long range potential</li>
</ul>
<table id="org9894992" border="2" cellspacing="0" cellpadding="6" rules="groups" frame="hsides">
<colgroup>
<col class="org-left" />
<col class="org-left" />
<col class="org-left" />
<col class="org-left" />
</colgroup>
<thead>
<tr>
<th scope="col" class="org-left">Variable</th>
<th scope="col" class="org-left">Type</th>
<th scope="col" class="org-left">Dimensions</th>
<th scope="col" class="org-left">Description</th>
</tr>
</thead>
<tbody>
<tr>
<td class="org-left"><code>eri</code></td>
<td class="org-left"><code>float sparse</code></td>
<td class="org-left"><code>(ao.num, ao.num, ao.num, ao.num)</code></td>
<td class="org-left">Electron repulsion integrals</td>
</tr>
<tr>
<td class="org-left"><code>eri_lr</code></td>
<td class="org-left"><code>float sparse</code></td>
<td class="org-left"><code>(ao.num, ao.num, ao.num, ao.num)</code></td>
<td class="org-left">Long-range Electron repulsion integrals</td>
</tr>
</tbody>
</table>
</div>
</div>
</div>
<div id="outline-container-org5d46e89" class="outline-2">
<h2 id="org5d46e89"><span class="section-number-2">7</span> Molecular orbitals (mo group)</h2>
<div class="outline-text-2" id="text-7">
<table id="org15cff2f" border="2" cellspacing="0" cellpadding="6" rules="groups" frame="hsides">
<colgroup>
<col class="org-left" />
<col class="org-left" />
<col class="org-left" />
<col class="org-left" />
</colgroup>
<thead>
<tr>
<th scope="col" class="org-left">Variable</th>
<th scope="col" class="org-left">Type</th>
<th scope="col" class="org-left">Dimensions</th>
<th scope="col" class="org-left">Description</th>
</tr>
</thead>
<tbody>
<tr>
<td class="org-left"><code>type</code></td>
<td class="org-left"><code>str</code></td>
<td class="org-left">&#xa0;</td>
<td class="org-left">Free text to identify the set of MOs (HF, Natural, Local, CASSCF, <i>etc</i>)</td>
</tr>
<tr>
<td class="org-left"><code>num</code></td>
<td class="org-left"><code>dim</code></td>
<td class="org-left">&#xa0;</td>
<td class="org-left">Number of MOs</td>
</tr>
<tr>
<td class="org-left"><code>coefficient</code></td>
<td class="org-left"><code>float</code></td>
<td class="org-left"><code>(ao.num, mo.num)</code></td>
<td class="org-left">MO coefficients (real part, general case)</td>
</tr>
<tr>
<td class="org-left"><code>coefficient_im</code></td>
<td class="org-left"><code>float</code></td>
<td class="org-left"><code>(ao.num, mo.num)</code></td>
<td class="org-left">MO coefficients (imaginary part, for periodic calculations)</td>
</tr>
<tr>
<td class="org-left"><code>class</code></td>
<td class="org-left"><code>str</code></td>
<td class="org-left"><code>(mo.num)</code></td>
<td class="org-left">Choose among: Core, Inactive, Active, Virtual, Deleted</td>
</tr>
<tr>
<td class="org-left"><code>symmetry</code></td>
<td class="org-left"><code>str</code></td>
<td class="org-left"><code>(mo.num)</code></td>
<td class="org-left">Symmetry in the point group</td>
</tr>
<tr>
<td class="org-left"><code>occupation</code></td>
<td class="org-left"><code>float</code></td>
<td class="org-left"><code>(mo.num)</code></td>
<td class="org-left">Occupation number</td>
</tr>
<tr>
<td class="org-left"><code>energy</code></td>
<td class="org-left"><code>float</code></td>
<td class="org-left"><code>(mo.num)</code></td>
<td class="org-left">For canonical MOs, corresponding eigenvalue</td>
</tr>
<tr>
<td class="org-left"><code>spin</code></td>
<td class="org-left"><code>int</code></td>
<td class="org-left"><code>(mo.num)</code></td>
<td class="org-left">For UHF wave functions, 0 is \(\alpha\) and 1 is \(\beta\)</td>
</tr>
</tbody>
</table>
</div>
<div id="outline-container-orgf72b0b6" class="outline-3">
<h3 id="orgf72b0b6"><span class="section-number-3">7.1</span> One-electron integrals (<code>mo_1e_int</code> group)</h3>
<div class="outline-text-3" id="text-7-1">
<p>
The operators as the same as those defined in the
<a href="#ao_one_e">AO one-electron integrals section</a>. Here, the integrals are given in
the basis of molecular orbitals.
</p>
<table id="org3123822" border="2" cellspacing="0" cellpadding="6" rules="groups" frame="hsides">
<colgroup>
<col class="org-left" />
<col class="org-left" />
<col class="org-left" />
<col class="org-left" />
</colgroup>
<thead>
<tr>
<th scope="col" class="org-left">Variable</th>
<th scope="col" class="org-left">Type</th>
<th scope="col" class="org-left">Dimensions</th>
<th scope="col" class="org-left">Description</th>
</tr>
</thead>
<tbody>
<tr>
<td class="org-left"><code>overlap</code></td>
<td class="org-left"><code>float</code></td>
<td class="org-left"><code>(mo.num, mo.num)</code></td>
<td class="org-left">\(\langle i \vert j \rangle\) (real part, general case)</td>
</tr>
<tr>
<td class="org-left"><code>kinetic</code></td>
<td class="org-left"><code>float</code></td>
<td class="org-left"><code>(mo.num, mo.num)</code></td>
<td class="org-left">\(\langle i \vert \hat{T}_e \vert j \rangle\) (real part, general case)</td>
</tr>
<tr>
<td class="org-left"><code>potential_n_e</code></td>
<td class="org-left"><code>float</code></td>
<td class="org-left"><code>(mo.num, mo.num)</code></td>
<td class="org-left">\(\langle i \vert \hat{V}_{\text{ne}} \vert j \rangle\) (real part, general case)</td>
</tr>
<tr>
<td class="org-left"><code>ecp</code></td>
<td class="org-left"><code>float</code></td>
<td class="org-left"><code>(mo.num, mo.num)</code></td>
<td class="org-left">\(\langle i \vert \hat{V}_{\text{ECP}} \vert j \rangle\) (real part, general case)</td>
</tr>
<tr>
<td class="org-left"><code>core_hamiltonian</code></td>
<td class="org-left"><code>float</code></td>
<td class="org-left"><code>(mo.num, mo.num)</code></td>
<td class="org-left">\(\langle i \vert \hat{h} \vert j \rangle\) (real part, general case)</td>
</tr>
<tr>
<td class="org-left"><code>overlap_im</code></td>
<td class="org-left"><code>float</code></td>
<td class="org-left"><code>(mo.num, mo.num)</code></td>
<td class="org-left">\(\langle i \vert j \rangle\) (imaginary part) (imaginary part)</td>
</tr>
<tr>
<td class="org-left"><code>kinetic_im</code></td>
<td class="org-left"><code>float</code></td>
<td class="org-left"><code>(mo.num, mo.num)</code></td>
<td class="org-left">\(\langle i \vert \hat{T}_e \vert j \rangle\) (imaginary part)</td>
</tr>
<tr>
<td class="org-left"><code>potential_n_e_im</code></td>
<td class="org-left"><code>float</code></td>
<td class="org-left"><code>(mo.num, mo.num)</code></td>
<td class="org-left">\(\langle i \vert \hat{V}_{\text{ne}} \vert j \rangle\) (imaginary part)</td>
</tr>
<tr>
<td class="org-left"><code>ecp_im</code></td>
<td class="org-left"><code>float</code></td>
<td class="org-left"><code>(mo.num, mo.num)</code></td>
<td class="org-left">\(\langle i \vert \hat{V}_{\text{ECP}} \vert j \rangle\) (imaginary part)</td>
</tr>
<tr>
<td class="org-left"><code>core_hamiltonian_im</code></td>
<td class="org-left"><code>float</code></td>
<td class="org-left"><code>(mo.num, mo.num)</code></td>
<td class="org-left">\(\langle i \vert \hat{h} \vert j \rangle\) (imaginary part)</td>
</tr>
</tbody>
</table>
</div>
</div>
<div id="outline-container-org169f192" class="outline-3">
<h3 id="org169f192"><span class="section-number-3">7.2</span> Two-electron integrals (<code>mo_2e_int</code> group)</h3>
<div class="outline-text-3" id="text-7-2">
<p>
The operators as the same as those defined in the
<a href="#ao_two_e">AO two-electron integrals section</a>. Here, the integrals are given in
the basis of molecular orbitals.
</p>
<table id="org272d5a8" border="2" cellspacing="0" cellpadding="6" rules="groups" frame="hsides">
<colgroup>
<col class="org-left" />
<col class="org-left" />
<col class="org-left" />
<col class="org-left" />
</colgroup>
<thead>
<tr>
<th scope="col" class="org-left">Variable</th>
<th scope="col" class="org-left">Type</th>
<th scope="col" class="org-left">Dimensions</th>
<th scope="col" class="org-left">Description</th>
</tr>
</thead>
<tbody>
<tr>
<td class="org-left"><code>eri</code></td>
<td class="org-left"><code>float sparse</code></td>
<td class="org-left"><code>(mo.num, mo.num, mo.num, mo.num)</code></td>
<td class="org-left">Electron repulsion integrals</td>
</tr>
<tr>
<td class="org-left"><code>eri_lr</code></td>
<td class="org-left"><code>float sparse</code></td>
<td class="org-left"><code>(mo.num, mo.num, mo.num, mo.num)</code></td>
<td class="org-left">Long-range Electron repulsion integrals</td>
</tr>
</tbody>
</table>
</div>
</div>
</div>
<div id="outline-container-org93c2ce0" class="outline-2">
<h2 id="org93c2ce0"><span class="section-number-2">8</span> Slater determinants (determinant group)</h2>
<div class="outline-text-2" id="text-8">
<p>
The configuration interaction (CI) wave function \(\Psi\)
can be expanded in the basis of Slater determinants \(D_I\) as follows
</p>
<p>
\[
\Psi = \sum_I C_I D_I
\]
</p>
<p>
For relatively small expansions, a given determinant can be represented as a list of occupied orbitals.
However, this becomes unfeasible for larger expansions and requires more advanced data structures.
The bit field representation is used here, namely a given determinant is represented as \(N_{\text{int}}\)
64-bit integers where j-th bit is set to 1 if there is an electron in the j-th orbital and 0 otherwise.
This gives access to larger determinant expansions by optimising the storage of the determinant lists
in the memory.
</p>
<p>
\[
D_I = \alpha_1 \alpha_2 \ldots \alpha_{n_\uparrow} \beta_1 \beta_2 \ldots \beta_{n_\downarrow}
\]
</p>
<p>
where \(\alpha\) and \(\beta\) denote &uarr;-spin and &darr;-spin electrons, respectively,
\(n_\uparrow\) and \(n_\downarrow\) correspond to <code>electron.up_num</code> and <code>electron.dn_num</code>, respectively.
</p>
<p>
Note: the <code>special</code> attribute is present in the types, meaning that the source node is not
produced by the code generator.
</p>
<p>
An illustration on how to read determinants is presented in the <a href="./examples.html">examples</a>.
</p>
<table id="org0ba9ffa" border="2" cellspacing="0" cellpadding="6" rules="groups" frame="hsides">
<colgroup>
<col class="org-left" />
<col class="org-left" />
<col class="org-left" />
<col class="org-left" />
</colgroup>
<thead>
<tr>
<th scope="col" class="org-left">Variable</th>
<th scope="col" class="org-left">Type</th>
<th scope="col" class="org-left">Dimensions</th>
<th scope="col" class="org-left">Description</th>
</tr>
</thead>
<tbody>
<tr>
<td class="org-left"><code>num</code></td>
<td class="org-left"><code>dim readonly</code></td>
<td class="org-left">&#xa0;</td>
<td class="org-left">Number of determinants</td>
</tr>
<tr>
<td class="org-left"><code>list</code></td>
<td class="org-left"><code>int special</code></td>
<td class="org-left"><code>(determinant.num)</code></td>
<td class="org-left">List of determinants as integer bit fields</td>
</tr>
<tr>
<td class="org-left"><code>coefficient</code></td>
<td class="org-left"><code>float special</code></td>
<td class="org-left"><code>(state.num,determinant.num)</code></td>
<td class="org-left">Coefficients of the determinants from the CI expansion</td>
</tr>
</tbody>
</table>
</div>
</div>
<div id="outline-container-org4327538" class="outline-2">
<h2 id="org4327538"><span class="section-number-2">9</span> Excited states (state group)</h2>
<div class="outline-text-2" id="text-9">
<p>
By default, the <code>determinant</code> group corresponds to the ground state.
However, it should be also possible to store the coefficients that
correspond to excited state wave functions for the same set of
determinants. This is the goal of the present group
</p>
<table id="orgaaed6a1" border="2" cellspacing="0" cellpadding="6" rules="groups" frame="hsides">
<colgroup>
<col class="org-left" />
<col class="org-left" />
<col class="org-left" />
<col class="org-left" />
</colgroup>
<thead>
<tr>
<th scope="col" class="org-left">Variable</th>
<th scope="col" class="org-left">Type</th>
<th scope="col" class="org-left">Dimensions</th>
<th scope="col" class="org-left">Description</th>
</tr>
</thead>
<tbody>
<tr>
<td class="org-left"><code>num</code></td>
<td class="org-left"><code>dim</code></td>
<td class="org-left">&#xa0;</td>
<td class="org-left">Number of states (including the ground state)</td>
</tr>
<tr>
<td class="org-left"><code>label</code></td>
<td class="org-left"><code>str</code></td>
<td class="org-left"><code>(state.num)</code></td>
<td class="org-left">Label of a given state (e.g. 'S' for singlets)</td>
</tr>
</tbody>
</table>
</div>
</div>
<div id="outline-container-orge1a7b0e" class="outline-2">
<h2 id="orge1a7b0e"><span class="section-number-2">10</span> Reduced density matrices (rdm group)</h2>
<div class="outline-text-2" id="text-10">
<p>
The reduced density matrices are defined in the basis of molecular
orbitals.
</p>
<p>
The &uarr;-spin and &darr;-spin components of the one-body
density matrix are given by
</p>
\begin{eqnarray*}
\gamma_{ij}^{\uparrow} &=& \langle \Psi | \hat{a}^{\dagger}_{j\alpha}\, \hat{a}_{i\alpha} | \Psi \rangle \\
\gamma_{ij}^{\downarrow} &=& \langle \Psi | \hat{a}^{\dagger}_{j\beta} \, \hat{a}_{i\beta} | \Psi \rangle
\end{eqnarray*}
<p>
and the spin-summed one-body density matrix is
\[
\gamma_{ij} = \gamma^{\uparrow}_{ij} + \gamma^{\downarrow}_{ij}
\]
</p>
<p>
The \(\uparrow \uparrow\), \(\downarrow \downarrow\), \(\uparrow \downarrow\), \(\downarrow \uparrow\)
components of the two-body density matrix are given by
</p>
\begin{eqnarray*}
\Gamma_{ijkl}^{\uparrow \uparrow} &=&
\langle \Psi | \hat{a}^{\dagger}_{k\alpha}\, \hat{a}^{\dagger}_{l\alpha} \hat{a}_{j\alpha}\, \hat{a}_{i\alpha} | \Psi \rangle \\
\Gamma_{ijkl}^{\downarrow \downarrow} &=&
\langle \Psi | \hat{a}^{\dagger}_{k\beta}\, \hat{a}^{\dagger}_{l\beta} \hat{a}_{j\beta}\, \hat{a}_{i\beta} | \Psi \rangle \\
\Gamma_{ijkl}^{\uparrow \downarrow} &=&
\langle \Psi | \hat{a}^{\dagger}_{k\alpha}\, \hat{a}^{\dagger}_{l\beta} \hat{a}_{j\beta}\, \hat{a}_{i\alpha} | \Psi \rangle \\
\Gamma_{ijkl}^{\downarrow \uparrow} &=&
\langle \Psi | \hat{a}^{\dagger}_{k\beta}\, \hat{a}^{\dagger}_{l\alpha} \hat{a}_{j\alpha}\, \hat{a}_{i\beta} | \Psi \rangle \\
\end{eqnarray*}
<p>
and the spin-summed one-body density matrix is
\[
\Gamma_{ijkl} = \Gamma_{ijkl}^{\uparrow \uparrow} +
\Gamma_{ijkl}^{\downarrow \downarrow} + \Gamma_{ijkl}^{\uparrow \downarrow} +
\Gamma_{ijkl}^{\downarrow \uparrow}
\]
</p>
<p>
The total energy can be computed as:
\[
E = E_{\text{NN}} + \sum_{ij} \gamma_{ij} \langle j|h|i \rangle +
\frac{1}{2} \sum_{ijlk} \Gamma_{ijkl} \langle k l | i j \rangle
\]
</p>
<table id="org3c855e8" border="2" cellspacing="0" cellpadding="6" rules="groups" frame="hsides">
<colgroup>
<col class="org-left" />
<col class="org-left" />
<col class="org-left" />
<col class="org-left" />
</colgroup>
<thead>
<tr>
<th scope="col" class="org-left">Variable</th>
<th scope="col" class="org-left">Type</th>
<th scope="col" class="org-left">Dimensions</th>
<th scope="col" class="org-left">Description</th>
</tr>
</thead>
<tbody>
<tr>
<td class="org-left"><code>1e</code></td>
<td class="org-left"><code>float</code></td>
<td class="org-left"><code>(mo.num, mo.num)</code></td>
<td class="org-left">One body density matrix</td>
</tr>
<tr>
<td class="org-left"><code>1e_up</code></td>
<td class="org-left"><code>float</code></td>
<td class="org-left"><code>(mo.num, mo.num)</code></td>
<td class="org-left">&uarr;-spin component of the one body density matrix</td>
</tr>
<tr>
<td class="org-left"><code>1e_dn</code></td>
<td class="org-left"><code>float</code></td>
<td class="org-left"><code>(mo.num, mo.num)</code></td>
<td class="org-left">&darr;-spin component of the one body density matrix</td>
</tr>
<tr>
<td class="org-left"><code>2e</code></td>
<td class="org-left"><code>float sparse</code></td>
<td class="org-left"><code>(mo.num, mo.num, mo.num, mo.num)</code></td>
<td class="org-left">Two-body reduced density matrix (spin trace)</td>
</tr>
<tr>
<td class="org-left"><code>2e_upup</code></td>
<td class="org-left"><code>float sparse</code></td>
<td class="org-left"><code>(mo.num, mo.num, mo.num, mo.num)</code></td>
<td class="org-left">&uarr;&uarr; component of the two-body reduced density matrix</td>
</tr>
<tr>
<td class="org-left"><code>2e_dndn</code></td>
<td class="org-left"><code>float sparse</code></td>
<td class="org-left"><code>(mo.num, mo.num, mo.num, mo.num)</code></td>
<td class="org-left">&darr;&darr; component of the two-body reduced density matrix</td>
</tr>
<tr>
<td class="org-left"><code>2e_updn</code></td>
<td class="org-left"><code>float sparse</code></td>
<td class="org-left"><code>(mo.num, mo.num, mo.num, mo.num)</code></td>
<td class="org-left">&uarr;&darr; component of the two-body reduced density matrix</td>
</tr>
<tr>
<td class="org-left"><code>2e_dnup</code></td>
<td class="org-left"><code>float sparse</code></td>
<td class="org-left"><code>(mo.num, mo.num, mo.num, mo.num)</code></td>
<td class="org-left">&darr;&uarr; component of the two-body reduced density matrix</td>
</tr>
</tbody>
</table>
</div>
</div>
<div id="outline-container-orgc79c0a1" class="outline-2">
<h2 id="orgc79c0a1"><span class="section-number-2">11</span> Cell (cell group)</h2>
<div class="outline-text-2" id="text-11">
<table id="orgf3f8eac" border="2" cellspacing="0" cellpadding="6" rules="groups" frame="hsides">
<colgroup>
<col class="org-left" />
<col class="org-left" />
<col class="org-left" />
<col class="org-left" />
</colgroup>
<thead>
<tr>
<th scope="col" class="org-left">Variable</th>
<th scope="col" class="org-left">Type</th>
<th scope="col" class="org-left">Dimensions</th>
<th scope="col" class="org-left">Description</th>
</tr>
</thead>
<tbody>
<tr>
<td class="org-left"><code>a</code></td>
<td class="org-left"><code>float</code></td>
<td class="org-left"><code>(3)</code></td>
<td class="org-left">First unit cell vector</td>
</tr>
<tr>
<td class="org-left"><code>b</code></td>
<td class="org-left"><code>float</code></td>
<td class="org-left"><code>(3)</code></td>
<td class="org-left">Second unit cell vector</td>
</tr>
<tr>
<td class="org-left"><code>c</code></td>
<td class="org-left"><code>float</code></td>
<td class="org-left"><code>(3)</code></td>
<td class="org-left">Third unit cell vector</td>
</tr>
</tbody>
</table>
</div>
</div>
<div id="outline-container-org8c4d404" class="outline-2">
<h2 id="org8c4d404"><span class="section-number-2">12</span> Periodic boundary calculations (pbc group)</h2>
<div class="outline-text-2" id="text-12">
<table id="org87da593" border="2" cellspacing="0" cellpadding="6" rules="groups" frame="hsides">
<colgroup>
<col class="org-left" />
<col class="org-left" />
<col class="org-left" />
<col class="org-left" />
</colgroup>
<thead>
<tr>
<th scope="col" class="org-left">Variable</th>
<th scope="col" class="org-left">Type</th>
<th scope="col" class="org-left">Dimensions</th>
<th scope="col" class="org-left">Description</th>
</tr>
</thead>
<tbody>
<tr>
<td class="org-left"><code>periodic</code></td>
<td class="org-left"><code>int</code></td>
<td class="org-left">&#xa0;</td>
<td class="org-left"><code>1</code>: true or <code>0</code>: false</td>
</tr>
<tr>
<td class="org-left"><code>k_point</code></td>
<td class="org-left"><code>float</code></td>
<td class="org-left"><code>(3)</code></td>
<td class="org-left">k-point sampling</td>
</tr>
</tbody>
</table>
</div>
</div>
<div id="outline-container-orga1f1553" class="outline-2">
<h2 id="orga1f1553"><span class="section-number-2">13</span> Quantum Monte Carlo data (qmc group)</h2>
<div class="outline-text-2" id="text-13">
<p>
In quantum Monte Carlo calculations, the wave function is evaluated
at points of the 3N-dimensional space. Some algorithms require multiple
independent <i>walkers</i>, so it is possible to store multiple coordinates,
as well as some quantities evaluated at those points.
</p>
<p>
By convention, the electron coordinates contain first all the electrons
of $&uarr;$-spin and then all the $&darr;$-spin.
</p>
<table id="orgf2e457d" border="2" cellspacing="0" cellpadding="6" rules="groups" frame="hsides">
<colgroup>
<col class="org-left" />
<col class="org-left" />
<col class="org-left" />
<col class="org-left" />
</colgroup>
<thead>
<tr>
<th scope="col" class="org-left">Variable</th>
<th scope="col" class="org-left">Type</th>
<th scope="col" class="org-left">Dimensions</th>
<th scope="col" class="org-left">Description</th>
</tr>
</thead>
<tbody>
<tr>
<td class="org-left"><code>num</code></td>
<td class="org-left"><code>dim</code></td>
<td class="org-left">&#xa0;</td>
<td class="org-left">Number of 3N-dimensional points</td>
</tr>
<tr>
<td class="org-left"><code>point</code></td>
<td class="org-left"><code>float</code></td>
<td class="org-left"><code>(3, electron.num, qmc.num)</code></td>
<td class="org-left">3N-dimensional points</td>
</tr>
<tr>
<td class="org-left"><code>psi</code></td>
<td class="org-left"><code>float</code></td>
<td class="org-left"><code>(qmc.num)</code></td>
<td class="org-left">Wave function evaluated at the points</td>
</tr>
<tr>
<td class="org-left"><code>e_loc</code></td>
<td class="org-left"><code>float</code></td>
<td class="org-left"><code>(qmc.num)</code></td>
<td class="org-left">Local energy evaluated at the points</td>
</tr>
</tbody>
</table>
</div>
</div>
</div>
<div id="postamble" class="status">
<p class="author">Author: TREX-CoE</p>
<p class="date">Created: 2022-07-28 Thu 11:50</p>
<p class="validation"><a href="http://validator.w3.org/check?uri=referer">Validate</a></p>
</div>
</body>
</html>