diff --git a/README.html b/README.html index e52f536..76046b0 100644 --- a/README.html +++ b/README.html @@ -3,7 +3,7 @@ "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
- +program print_energy @@ -411,8 +411,8 @@ One needs to read from the TREXIO file:
integer :: i, j, k, l, m @@ -427,8 +427,8 @@ One needs to read from the TREXIO file:
call getarg(1, filename) @@ -444,8 +444,8 @@ f = trexio_open (filename, 'r', TREXIO_HDF5
rc = trexio_read_nucleus_repulsion(f, E_nn)
@@ -459,8 +459,8 @@ f = trexio_open (filename, 'r', TREXIO_HDF5
rc = trexio_read_mo_num(f, n)
@@ -474,8 +474,8 @@ f = trexio_open (filename, 'r', TREXIO_HDF5
allocate( D(n,n), h0(n,n) )
@@ -487,8 +487,8 @@ W(:,:,:,:) = 0.d0
rc = trexio_has_mo_1e_int_core_hamiltonian(f) @@ -520,8 +520,8 @@ rc = trexio_read_rdm_1e(f, D)
Reading is done with OpenMP. Each thread reads its own buffer, and @@ -537,8 +537,8 @@ to be protected in the critical section when modified.
rc = trexio_has_mo_2e_int_eri(f) @@ -587,8 +587,8 @@ icount = BUFSIZE
rc = trexio_has_rdm_2e(f) @@ -632,8 +632,8 @@ icount = bufsize
When the orbitals are real, we can use @@ -679,8 +679,8 @@ E = E + E_nn
deallocate( D, h0, G, W )
@@ -695,7 +695,7 @@ E = E + E_nn
stdint.h
Memory allocation of structures can be facilitated by using the @@ -551,8 +551,8 @@ The maximum string size for the filenames is 4096 characters.
All calls to TREXIO are thread-safe. @@ -560,10 +560,10 @@ TREXIO front end is modular, which simplifies implementation of new back ends.
trexio_exit_code
@@ -6061,8 +6061,8 @@ This section concerns API calls related to Slater determinants.
The Fortran
templates that provide an access to the C
API calls from Fortran.
@@ -6219,8 +6219,8 @@ These templates are based on the use of iso_c_binding
. Pointers hav
def write_determinant_list(trexio_file: File, offset_file: int, buffer_size: int, determinants: list) -> None:
@@ -6564,8 +6564,8 @@ These templates are based on the use of iso_c_binding
. Pointers hav
This section contains general helper functions like trexio_info
.
@@ -6599,54 +6599,20 @@ of the determinant and returns two list of orbitals each corresponding to a diff
trexio_exit_code trexio_info(void); trexio_exit_code trexio_mark_safety(trexio_t* const file, const int32_t safety_flag); --
typedef int64_t bitfield_t; +typedef int64_t bitfield_t; -#define ORBITAL_SHIFT 1 -#define INT_SIZE 64 -#define NORB_PER_INT ( 8*sizeof(bitfield_t) ) - -/* Popcount and trailz */ -#if INT_SIZE == 64 - - extern int __builtin_popcountll (unsigned long long x_0); - #define popcnt(X) __builtin_popcountll((unsigned long long) X) - - extern int __builtin_ctzll (unsigned long long x_0); - #define trailz(X) __builtin_ctzll((unsigned long long) X) - -#elif INT_SIZE == 32 - - extern int __builtin_popcountl (unsigned long x_0); - #define popcnt(X) __builtin_popcountl((unsigned long) X) - - extern int __builtin_ctzl(unsigned long x_0); - #define trailz(X) __builtin_ctzl((unsigned long) X) - -#elif INT_SIZE == 16 - - extern int __builtin_popcount (unsigned int x_0); - #define popcnt(X) __builtin_popcount((unsigned int) X) - - extern int __builtin_ctz (unsigned int x_0); - #define trailz(X) __builtin_ctz((unsigned int) X) - -#else - - #error("Invalid INT_SIZE") - -#endif - -trexio_exit_code trexio_to_orbital_list (const int32_t N_int, const bitfield_t* d1, int32_t* const list, int32_t* const occupied_num); +#define TREXIO_ORBITAL_SHIFT 1 +#define TREXIO_INT_SIZE 64 +#define TREXIO_NORB_PER_INT ( 8*sizeof(bitfield_t) ) +# +trexio_exit_code trexio_to_orbital_list (const int32_t N_int, const bitfield_t* d1, int32_t* const list, int32_t* const occupied_num); trexio_exit_code trexio_to_orbital_list_up_dn (const int32_t N_int, const bitfield_t* d1, int32_t* const list_up, int32_t* const list_dn, int32_t* const occ_num_up, int32_t* const occ_num_dn); trexio_exit_code trexio_safe_to_orbital_list (const int32_t N_int, const bitfield_t* dset_in, const int64_t dim_in, int32_t* const dset_out, const int64_t dim_out, int32_t* const num); trexio_exit_code trexio_safe_to_orbital_list_up_dn (const int32_t N_int, const bitfield_t* dset_in, const int64_t dim_in, int32_t* const dset_up_out, const int64_t dim_up_out, int32_t* const dset_dn_out, const int64_t dim_dn_out, int32_t* const num_up, int32_t* const num_dn); @@ -6670,7 +6636,7 @@ of the determinant and returns two list of orbitals each corresponding to a diff int32_t pos; k = 0; - shift = ORBITAL_SHIFT; + shift = TREXIO_ORBITAL_SHIFT; for (int32_t i=0 ; i<N_int ; i++) { @@ -6685,7 +6651,7 @@ of the determinant and returns two list of orbitals each corresponding to a diff tmp ^= ( ((bitfield_t) 1) << pos); k++; } - shift += NORB_PER_INT; + shift += TREXIO_NORB_PER_INT; } *occupied_num = (int32_t) k; @@ -6752,6 +6718,41 @@ of the determinant and returns two list of orbitals each corresponding to a diff
/* Popcount and trailz */ +#if TREXIO_INT_SIZE == 64 + + extern int __builtin_popcountll (unsigned long long x_0); + #define popcnt(X) __builtin_popcountll((unsigned long long) X) + + extern int __builtin_ctzll (unsigned long long x_0); + #define trailz(X) __builtin_ctzll((unsigned long long) X) + +#elif TREXIO_INT_SIZE == 32 + + extern int __builtin_popcountl (unsigned long x_0); + #define popcnt(X) __builtin_popcountl((unsigned long) X) + + extern int __builtin_ctzl(unsigned long x_0); + #define trailz(X) __builtin_ctzl((unsigned long) X) + +#elif TREXIO_INT_SIZE == 16 + + extern int __builtin_popcount (unsigned int x_0); + #define popcnt(X) __builtin_popcount((unsigned int) X) + + extern int __builtin_ctz (unsigned int x_0); + #define trailz(X) __builtin_ctz((unsigned int) X) + +#else + + #error("Invalid TREXIO_INT_SIZE") + +#endif ++
trexio_exit_code trexio_info (void) @@ -6795,8 +6796,8 @@ of the determinant and returns two list of orbitals each corresponding to a diff
interface
@@ -6841,8 +6842,8 @@ of the determinant and returns two list of orbitals each corresponding to a diff
def info(): @@ -6918,8 +6919,8 @@ of the determinant and returns two list of orbitals each corresponding to a diff
The function below adapts the original C-based trexio_open
for Fortran.
@@ -6974,7 +6975,7 @@ Note, that Fortran interface calls the main TREXIO
API, which is wr
-The subrotine below wrap the to_orbital_list
functions to shift the MO indices
+The subroutines below wrap the to_orbital_list
functions to shift the MO indices
by 1 since in Fortran arrays are 1-based and C/Python they are 0-based.
assert
statement pass.
#define $GROUP$_GROUP_NAME "$group$" @@ -339,8 +339,8 @@ for the JavaScript code in this tag.
Polymorphism of the trexio_t
type is handled by ensuring that the
@@ -360,8 +360,8 @@ corresponding types for all back ends can be safely casted to
trexio_exit_code
@@ -466,8 +466,8 @@ corresponding types for all back ends can be safely casted to
trexio_exit_code
@@ -571,8 +571,8 @@ corresponding types for all back ends can be safely casted to
trexio_exit_code
@@ -706,8 +706,8 @@ corresponding types for all back ends can be safely casted to
Sparse data is stored using extensible datasets of HDF5. Extensibility is required @@ -910,8 +910,8 @@ due to the fact that the sparse data will be written in chunks of user-defined s
trexio_exit_code
@@ -1109,8 +1109,8 @@ due to the fact that the sparse data will be written in chunks of user-defined s
trexio_exit_code
@@ -1237,8 +1237,8 @@ due to the fact that the sparse data will be written in chunks of user-defined s
Note: in early versions of the HDF5 library (v < 1.10) unlinking an object was not working as expected
@@ -1278,8 +1278,8 @@ Thus, any corrupted/lost file space will remain in the first file. The use of
Each array is stored in a separate HDF5 dataset due to the fact that determinant I/O has to be decoupled. @@ -1532,8 +1532,8 @@ Size specifies the number of data items (e.g. determinants) to process.
trexio_exit_code
@@ -1796,7 +1796,7 @@ Size specifies the number of data items (e.g. determinants) to process.
typedef struct $group$_s { @@ -366,8 +366,8 @@ The file is written when closed, or when the flush function is called.
Polymorphism of the trexio_t
type is handled by ensuring that the
@@ -387,8 +387,8 @@ corresponding types for all back ends can be safely casted to
trexio_exit_code
@@ -531,8 +531,8 @@ corresponding types for all back ends can be safely casted to
trexio_exit_code
@@ -554,8 +554,8 @@ corresponding types for all back ends can be safely casted to
$group$_t* @@ -779,8 +779,8 @@ trexio_text_read_$group$ (trexio_text_t*
trexio_exit_code @@ -844,8 +844,8 @@ trexio_text_read_$group$ (trexio_text_t*
Memory is allocated when reading. The following function frees memory.
@@ -914,8 +914,8 @@ This function is called upon the non-successful exit from the trexio_text_
trexio_exit_code
@@ -978,8 +978,8 @@ This function is called upon the non-successful exit from the trexio_text_
The group_dset
array is assumed allocated with the appropriate size.
@@ -1075,8 +1075,8 @@ The group_dset
array is assumed allocated with the appropriate size
The group_dset
array is assumed allocated with the appropriate size.
@@ -1177,8 +1177,8 @@ The group_dset
array is assumed allocated with the appropriate size
trexio_exit_code
@@ -1252,8 +1252,8 @@ The group_dset
array is assumed allocated with the appropriate size
Each sparse array is stored in a separate .txt
file due to the fact that sparse I/O has to be decoupled
@@ -1526,8 +1526,8 @@ User provides indices and values of the sparse array as two separate variables.
trexio_exit_code
@@ -1555,8 +1555,8 @@ User provides indices and values of the sparse array as two separate variables.
Each array is stored in a separate .txt
file due to the fact that determinant I/O has to be decoupled
@@ -1960,7 +1960,7 @@ Size specifies the number of data items, e.g. determinants.
As we expect our files to be archived in open-data repositories, we @@ -424,7 +424,7 @@ which have participated to the creation of the file, a list of authors of the file, and a textual description.
-