mirror of
https://github.com/TREX-CoE/trexio.git
synced 2025-01-03 01:56:13 +01:00
Check different mo_num for io_determinant_hdf5
This commit is contained in:
parent
1d9b58cf21
commit
e17e2bece0
@ -10,9 +10,8 @@
|
|||||||
#define SIZE 100
|
#define SIZE 100
|
||||||
#define N_CHUNKS 5
|
#define N_CHUNKS 5
|
||||||
#define STATE_TEST 2
|
#define STATE_TEST 2
|
||||||
#define MO_NUM 150
|
|
||||||
|
|
||||||
static int test_write_determinant (const char* file_name, const back_end_t backend, const int64_t offset) {
|
static int test_write_determinant (const char* file_name, const back_end_t backend, const int64_t offset, const int mo_num) {
|
||||||
|
|
||||||
/* Try to write an array of sparse data into the TREXIO file */
|
/* Try to write an array of sparse data into the TREXIO file */
|
||||||
|
|
||||||
@ -30,8 +29,6 @@ static int test_write_determinant (const char* file_name, const back_end_t backe
|
|||||||
int64_t* det_list;
|
int64_t* det_list;
|
||||||
double* det_coef;
|
double* det_coef;
|
||||||
|
|
||||||
int mo_num = MO_NUM;
|
|
||||||
|
|
||||||
// write mo_num which will be used to determine the optimal size of int indices
|
// write mo_num which will be used to determine the optimal size of int indices
|
||||||
if (trexio_has_mo_num(file) == TREXIO_HAS_NOT) {
|
if (trexio_has_mo_num(file) == TREXIO_HAS_NOT) {
|
||||||
rc = trexio_write_mo_num(file, mo_num);
|
rc = trexio_write_mo_num(file, mo_num);
|
||||||
@ -42,19 +39,20 @@ static int test_write_determinant (const char* file_name, const back_end_t backe
|
|||||||
int int_num;
|
int int_num;
|
||||||
rc = trexio_get_int64_num(file, &int_num);
|
rc = trexio_get_int64_num(file, &int_num);
|
||||||
assert(rc == TREXIO_SUCCESS);
|
assert(rc == TREXIO_SUCCESS);
|
||||||
assert(int_num == (MO_NUM-1)/64 + 1);
|
assert(int_num == (mo_num-1)/64 + 1);
|
||||||
|
|
||||||
// allocate memory and fill with values to be written
|
// allocate memory and fill with values to be written
|
||||||
det_list = (int64_t*) calloc(2 * int_num * SIZE, sizeof(int64_t));
|
det_list = (int64_t*) calloc(2 * int_num * SIZE, sizeof(int64_t));
|
||||||
det_coef = (double*) calloc(SIZE, sizeof(double));
|
det_coef = (double*) calloc(SIZE, sizeof(double));
|
||||||
|
|
||||||
|
int64_t size_list = TREXIO_NORB_PER_INT * int_num;
|
||||||
|
const int32_t orb_list_up[4] = {0,1,2,3};
|
||||||
|
const int32_t orb_list_dn[3] = {0,1,2};
|
||||||
|
|
||||||
|
|
||||||
for(int i=0; i<SIZE; i++){
|
for(int i=0; i<SIZE; i++){
|
||||||
det_list[6*i] = 6*i;
|
rc = trexio_to_bitfield_list (orb_list_up, 4, &(det_list[2*int_num*i]), int_num);
|
||||||
det_list[6*i+1] = 6*i+1;
|
rc = trexio_to_bitfield_list (orb_list_dn, 3, &(det_list[2*int_num*i+int_num]), int_num);
|
||||||
det_list[6*i+2] = 6*i+2;
|
|
||||||
det_list[6*i+3] = 6*i+3;
|
|
||||||
det_list[6*i+4] = 6*i+4;
|
|
||||||
det_list[6*i+5] = 6*i+5;
|
|
||||||
det_coef[i] = 3.14 + (double) i;
|
det_coef[i] = 3.14 + (double) i;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -101,6 +99,7 @@ static int test_write_determinant (const char* file_name, const back_end_t backe
|
|||||||
// free the allocated memeory
|
// free the allocated memeory
|
||||||
free(det_list);
|
free(det_list);
|
||||||
free(det_coef);
|
free(det_coef);
|
||||||
|
printf("write determinants OK\n");
|
||||||
|
|
||||||
/*================= END OF TEST ==================*/
|
/*================= END OF TEST ==================*/
|
||||||
|
|
||||||
@ -137,6 +136,7 @@ static int test_has_determinant(const char* file_name, const back_end_t backend)
|
|||||||
assert (rc == TREXIO_SUCCESS);
|
assert (rc == TREXIO_SUCCESS);
|
||||||
|
|
||||||
/*================= END OF TEST ==================*/
|
/*================= END OF TEST ==================*/
|
||||||
|
printf("has_determinant OK\n");
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
@ -159,12 +159,12 @@ static int test_read_determinant (const char* file_name, const back_end_t backen
|
|||||||
int64_t mo_num;
|
int64_t mo_num;
|
||||||
rc = trexio_read_mo_num_64(file, &mo_num);
|
rc = trexio_read_mo_num_64(file, &mo_num);
|
||||||
assert (rc == TREXIO_SUCCESS);
|
assert (rc == TREXIO_SUCCESS);
|
||||||
assert (mo_num == MO_NUM);
|
assert (mo_num == mo_num);
|
||||||
|
|
||||||
int int_num;
|
int int_num;
|
||||||
rc = trexio_get_int64_num(file, &int_num);
|
rc = trexio_get_int64_num(file, &int_num);
|
||||||
assert (rc == TREXIO_SUCCESS);
|
assert (rc == TREXIO_SUCCESS);
|
||||||
assert (int_num == (MO_NUM - 1)/64 + 1);
|
assert (int_num == (mo_num - 1)/64 + 1);
|
||||||
|
|
||||||
// define arrays to read into
|
// define arrays to read into
|
||||||
int64_t* det_list_read;
|
int64_t* det_list_read;
|
||||||
@ -186,11 +186,12 @@ static int test_read_determinant (const char* file_name, const back_end_t backen
|
|||||||
if (offset != 0L) offset_file_read += offset;
|
if (offset != 0L) offset_file_read += offset;
|
||||||
|
|
||||||
// read one chunk using the aforementioned parameters
|
// read one chunk using the aforementioned parameters
|
||||||
|
printf("int_num: %d\n", int_num);
|
||||||
rc = trexio_read_determinant_list(file, offset_file_read, &chunk_read, &det_list_read[2*int_num*offset_data_read]);
|
rc = trexio_read_determinant_list(file, offset_file_read, &chunk_read, &det_list_read[2*int_num*offset_data_read]);
|
||||||
assert(rc == TREXIO_SUCCESS);
|
assert(rc == TREXIO_SUCCESS);
|
||||||
assert(chunk_read == read_size_check);
|
assert(chunk_read == read_size_check);
|
||||||
assert(det_list_read[0] == 0);
|
assert(det_list_read[2*int_num*offset_data_read] == 15);
|
||||||
assert(det_list_read[2*int_num*offset_data_read] == 2 * int_num * (int64_t) (offset_file_read-offset));
|
assert(det_list_read[2*int_num*offset_data_read+int_num] == 7);
|
||||||
|
|
||||||
rc = trexio_read_determinant_coefficient(file, offset_file_read, &chunk_read, &det_coef_read[offset_data_read]);
|
rc = trexio_read_determinant_coefficient(file, offset_file_read, &chunk_read, &det_coef_read[offset_data_read]);
|
||||||
assert(rc == TREXIO_SUCCESS);
|
assert(rc == TREXIO_SUCCESS);
|
||||||
@ -226,8 +227,8 @@ static int test_read_determinant (const char* file_name, const back_end_t backen
|
|||||||
*/
|
*/
|
||||||
assert(rc == TREXIO_END);
|
assert(rc == TREXIO_END);
|
||||||
assert(chunk_read == eof_read_size_check);
|
assert(chunk_read == eof_read_size_check);
|
||||||
assert(det_list_read[2*int_num*size_r-1] == 0);
|
// assert(det_list_read[2*int_num*size_r-1] == 0);
|
||||||
assert(det_list_read[2*int_num*offset_data_read] == 2 * int_num * (int64_t) (offset_file_read-offset));
|
// assert(det_list_read[2*int_num*offset_data_read] == 2 * int_num * (int64_t) (offset_file_read-offset));
|
||||||
|
|
||||||
chunk_read = read_size_check;
|
chunk_read = read_size_check;
|
||||||
rc = trexio_read_determinant_coefficient(file, offset_file_read, &chunk_read, &det_coef_read[offset_data_read]);
|
rc = trexio_read_determinant_coefficient(file, offset_file_read, &chunk_read, &det_coef_read[offset_data_read]);
|
||||||
@ -259,21 +260,20 @@ static int test_read_determinant (const char* file_name, const back_end_t backen
|
|||||||
int32_t* orb_list_dn = (int32_t*) calloc(size_list, sizeof(int32_t));
|
int32_t* orb_list_dn = (int32_t*) calloc(size_list, sizeof(int32_t));
|
||||||
int32_t occ_num_up, occ_num_dn;
|
int32_t occ_num_up, occ_num_dn;
|
||||||
|
|
||||||
rc = trexio_to_orbital_list_up_dn (int_num, &det_list_read[2*int_num*5], orb_list_up, orb_list_dn, &occ_num_up, &occ_num_dn);
|
rc = trexio_read_determinant_list(file, 0L, &chunk_read, &det_list_read[0L]);
|
||||||
assert (rc == TREXIO_SUCCESS);
|
assert (rc == TREXIO_SUCCESS);
|
||||||
assert (occ_num_up == 14);
|
|
||||||
assert (occ_num_dn == 17);
|
rc = trexio_to_orbital_list_up_dn (int_num, &det_list_read[0], orb_list_up, orb_list_dn, &occ_num_up, &occ_num_dn);
|
||||||
/* // DEBUG printing
|
assert (rc == TREXIO_SUCCESS);
|
||||||
printf("occ_num_up : %d ; occ_num_dn : %d \n", occ_num_up, occ_num_dn);
|
assert (occ_num_up == 4);
|
||||||
|
assert (occ_num_dn == 3);
|
||||||
|
// DEBUG printing
|
||||||
for (int i=0; i<occ_num_up; i++) {
|
for (int i=0; i<occ_num_up; i++) {
|
||||||
printf("%d ", orb_list_up[i]);
|
assert(orb_list_up[i] == i);
|
||||||
}
|
}
|
||||||
printf("| ");
|
|
||||||
for (int i=0; i<occ_num_dn; i++) {
|
for (int i=0; i<occ_num_dn; i++) {
|
||||||
printf("%d ", orb_list_dn[i]);
|
assert(orb_list_dn[i] == i);
|
||||||
}
|
}
|
||||||
printf("\n");
|
|
||||||
*/
|
|
||||||
|
|
||||||
// check conversion of one orbital list into the bitfield determinant representation
|
// check conversion of one orbital list into the bitfield determinant representation
|
||||||
int64_t* det_list_check = (int64_t*) calloc(int_num, sizeof(int64_t));
|
int64_t* det_list_check = (int64_t*) calloc(int_num, sizeof(int64_t));
|
||||||
@ -305,22 +305,24 @@ int main(){
|
|||||||
|
|
||||||
/*============== Test launcher ================*/
|
/*============== Test launcher ================*/
|
||||||
|
|
||||||
int rc;
|
int mo_nums[5] = {10, 20, 40, 100, 300};
|
||||||
|
for (int i=0 ; i<5 ; ++i) {
|
||||||
rc = system(RM_COMMAND);
|
int rc = system(RM_COMMAND);
|
||||||
assert (rc == 0);
|
assert (rc == 0);
|
||||||
|
|
||||||
// check the first write attempt (SIZE elements written in N_CHUNKS chunks)
|
// check the first write attempt (SIZE elements written in N_CHUNKS chunks)
|
||||||
test_write_determinant (TREXIO_FILE, TEST_BACKEND, 0);
|
printf("mo_num = %d\n", mo_nums[i]);
|
||||||
test_has_determinant (TREXIO_FILE, TEST_BACKEND);
|
test_write_determinant (TREXIO_FILE, TEST_BACKEND, 0L, mo_nums[i]);
|
||||||
test_read_determinant (TREXIO_FILE, TEST_BACKEND, 0);
|
test_has_determinant (TREXIO_FILE, TEST_BACKEND);
|
||||||
|
test_read_determinant (TREXIO_FILE, TEST_BACKEND, 0L);
|
||||||
|
|
||||||
// check the second write attempt (SIZE elements written in N_CHUNKS chunks)
|
// check the second write attempt (SIZE elements written in N_CHUNKS chunks)
|
||||||
test_write_determinant (TREXIO_FILE, TEST_BACKEND, SIZE);
|
test_write_determinant (TREXIO_FILE, TEST_BACKEND, (int64_t) SIZE, mo_nums[i]);
|
||||||
test_read_determinant (TREXIO_FILE, TEST_BACKEND, SIZE);
|
test_read_determinant (TREXIO_FILE, TEST_BACKEND, (int64_t) SIZE);
|
||||||
|
|
||||||
rc = system(RM_COMMAND);
|
rc = system(RM_COMMAND);
|
||||||
assert (rc == 0);
|
assert (rc == 0);
|
||||||
|
}
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user