1
0
mirror of https://github.com/TREX-CoE/trexio.git synced 2025-01-10 21:18:35 +01:00

FIX: more flexible ECP format

This commit is contained in:
q-posev 2021-10-18 16:23:07 +02:00
parent 5b6d78e015
commit 8b463dbc54

View File

@ -122,7 +122,7 @@ arrays are 0-based. Hence, we introduce the ~index~ type which is an
\[ \[
V_A^{\text{ECP}} = V_A^{\text{ECP}} =
V_{A \ell_{\max}} + V_{A \ell_{\max}} +
\sum_{\ell=0}^{\ell_{\max} -1} \sum_{\ell=0}^{\ell_{\max}-1}
\sum_{m=-\ell}^{\ell} | Y_{\ell m} \rangle \left[ \sum_{m=-\ell}^{\ell} | Y_{\ell m} \rangle \left[
V_{A \ell} - V_{A \ell_{\max}} \right] \langle Y_{\ell m} | V_{A \ell} - V_{A \ell_{\max}} \right] \langle Y_{\ell m} |
\] \]
@ -138,20 +138,24 @@ arrays are 0-based. Hence, we introduce the ~index~ type which is an
See http://dx.doi.org/10.1063/1.4984046 for more info. See http://dx.doi.org/10.1063/1.4984046 for more info.
#+NAME: ecp #+NAME: ecp
| Variable | Type | Dimensions | Description | | Variable | Type | Dimensions | Description |
|-----------------------+---------+------------------------------------------+----------------------------------------------------------------------------------------------| |---------------+---------+-----------------+-----------------------------------------------------------------------------|
| ~lmax_plus_1~ | ~int~ | ~(nucleus.num)~ | $\ell_{\max} + 1$, one higher than the maximum angular momentum in the removed core orbitals | | ~max_ang_mom~ | ~int~ | ~(nucleus.num)~ | $\ell_{\max}$ the maximum angular momentum in the removed core orbitals |
| ~z_core~ | ~float~ | ~(nucleus.num)~ | Charges to remove | | ~z_core~ | ~float~ | ~(nucleus.num)~ | Charges to remove |
| ~local_n~ | ~int~ | ~(nucleus.num)~ | Number of local functions $N_{q \ell}$ | | ~num~ | ~dim~ | | Total number of ECP functions for all atoms and all values of $\ell$ |
| ~local_num_n_max~ | ~dim~ | | Maximum value of ~local_n~, used for dimensioning arrays | | ~ang_mom~ | ~int~ | ~(ecp.num)~ | One-to-one correspondence between ECP items and the angular momentum $\ell$ |
| ~local_exponent~ | ~float~ | ~(ecp.local_num_n_max, nucleus.num)~ | $\alpha_{A q \ell_{\max}}$ | | ~nucleus~ | ~index~ | ~(ecp.num)~ | One-to-one correspondence between ECP items and the atom index |
| ~local_coef~ | ~float~ | ~(ecp.local_num_n_max, nucleus.num)~ | $\beta_{A q \ell_{\max}}$ | | ~exponent~ | ~float~ | ~(ecp.num)~ | $\alpha_{A q \ell}$ all ECP exponents |
| ~local_power~ | ~int~ | ~(ecp.local_num_n_max, nucleus.num)~ | $n_{A q \ell_{\max}}$ | | ~coefficient~ | ~float~ | ~(ecp.num)~ | $\beta_{A q \ell}$ all ECP coefficients |
| ~non_local_n~ | ~int~ | ~(nucleus.num)~ | $N_{q \ell_{\max}}$ | | ~power~ | ~int~ | ~(ecp.num)~ | $n_{A q \ell}$ all ECP powers |
| ~non_local_num_n_max~ | ~dim~ | | Maximum value of ~non_local_n~, used for dimensioning arrays |
| ~non_local_exponent~ | ~float~ | ~(ecp.non_local_num_n_max, nucleus.num)~ | $\alpha_{A q \ell}$ |
| ~non_local_coef~ | ~float~ | ~(ecp.non_local_num_n_max, nucleus.num)~ | $\beta_{A q \ell}$ | *Note for developers*: avoid having variables with similar prefix in their name.
| ~non_local_power~ | ~int~ | ~(ecp.non_local_num_n_max, nucleus.num)~ | $n_{A q \ell}$ | HDF5 back end might cause issues due to the way `find_dataset` function works
in the H5LT module. For example, in the ECP group we use ~max_ang_mom~ and
~ang_mom_max~ due to this.
The latter causes issues when written before ~ang_mom~ in the TREXIO file.
#+CALL: json(data=ecp, title="ecp") #+CALL: json(data=ecp, title="ecp")
@ -159,22 +163,20 @@ arrays are 0-based. Hence, we introduce the ~index~ type which is an
:RESULTS: :RESULTS:
#+begin_src python :tangle trex.json #+begin_src python :tangle trex.json
"ecp": { "ecp": {
"lmax_plus_1" : [ "int" , [ "nucleus.num" ] ] "max_ang_mom" : [ "int" , [ "nucleus.num" ] ]
, "z_core" : [ "float", [ "nucleus.num" ] ] , "z_core" : [ "float", [ "nucleus.num" ] ]
, "local_n" : [ "int" , [ "nucleus.num" ] ] , "num" : [ "dim" , [] ]
, "local_num_n_max" : [ "dim" , [] ] , "ang_mom" : [ "int" , [ "ecp.num" ] ]
, "local_exponent" : [ "float", [ "nucleus.num", "ecp.local_num_n_max" ] ] , "nucleus" : [ "index", [ "ecp.num" ] ]
, "local_coef" : [ "float", [ "nucleus.num", "ecp.local_num_n_max" ] ] , "exponent" : [ "float", [ "ecp.num" ] ]
, "local_power" : [ "int" , [ "nucleus.num", "ecp.local_num_n_max" ] ] , "coefficient" : [ "float", [ "ecp.num" ] ]
, "non_local_n" : [ "int" , [ "nucleus.num" ] ] , "power" : [ "int" , [ "ecp.num" ] ]
, "non_local_num_n_max" : [ "dim" , [] ]
, "non_local_exponent" : [ "float", [ "nucleus.num", "ecp.non_local_num_n_max" ] ]
, "non_local_coef" : [ "float", [ "nucleus.num", "ecp.non_local_num_n_max" ] ]
, "non_local_power" : [ "int" , [ "nucleus.num", "ecp.non_local_num_n_max" ] ]
} , } ,
#+end_src #+end_src
:END: :END:
* Basis set (basis group) * Basis set (basis group)
We consider here basis functions centered on nuclei. Hence, we enable We consider here basis functions centered on nuclei. Hence, we enable