mirror of
https://github.com/TREX-CoE/trexio.git
synced 2024-12-23 04:43:57 +01:00
Fixed
This commit is contained in:
parent
e6a211127c
commit
455168efc6
@ -1,4 +1,3 @@
|
|||||||
/* [[file:trexio_text.org::*File prefixes][File prefixes:4]] */
|
|
||||||
/* This file was generated from the trexio.org org-mode file.
|
/* This file was generated from the trexio.org org-mode file.
|
||||||
To generate it, open trexio.org in Emacs and execute
|
To generate it, open trexio.org in Emacs and execute
|
||||||
M-x org-babel-tangle
|
M-x org-babel-tangle
|
||||||
@ -7,9 +6,7 @@
|
|||||||
|
|
||||||
|
|
||||||
#include "trexio_text.h"
|
#include "trexio_text.h"
|
||||||
/* File prefixes:4 ends here */
|
|
||||||
|
|
||||||
/* [[file:trexio_text.org::*Init/deinit functions][Init/deinit functions:2]] */
|
|
||||||
trexio_exit_code trexio_text_init(trexio_t* file) {
|
trexio_exit_code trexio_text_init(trexio_t* file) {
|
||||||
if (file == NULL) return TREXIO_INVALID_ARG_1;
|
if (file == NULL) return TREXIO_INVALID_ARG_1;
|
||||||
|
|
||||||
@ -52,9 +49,7 @@ trexio_exit_code trexio_text_init(trexio_t* file) {
|
|||||||
|
|
||||||
return TREXIO_SUCCESS;
|
return TREXIO_SUCCESS;
|
||||||
}
|
}
|
||||||
/* Init/deinit functions:2 ends here */
|
|
||||||
|
|
||||||
/* [[file:trexio_text.org::*Init/deinit functions][Init/deinit functions:4]] */
|
|
||||||
trexio_exit_code trexio_text_lock(trexio_t* file) {
|
trexio_exit_code trexio_text_lock(trexio_t* file) {
|
||||||
if (file == NULL) return TREXIO_INVALID_ARG_1;
|
if (file == NULL) return TREXIO_INVALID_ARG_1;
|
||||||
|
|
||||||
@ -73,9 +68,7 @@ trexio_exit_code trexio_text_lock(trexio_t* file) {
|
|||||||
|
|
||||||
return TREXIO_SUCCESS;
|
return TREXIO_SUCCESS;
|
||||||
}
|
}
|
||||||
/* Init/deinit functions:4 ends here */
|
|
||||||
|
|
||||||
/* [[file:trexio_text.org::*Init/deinit functions][Init/deinit functions:6]] */
|
|
||||||
trexio_exit_code trexio_text_finalize(trexio_t* file) {
|
trexio_exit_code trexio_text_finalize(trexio_t* file) {
|
||||||
if (file == NULL) return TREXIO_INVALID_ARG_1;
|
if (file == NULL) return TREXIO_INVALID_ARG_1;
|
||||||
|
|
||||||
@ -88,9 +81,7 @@ trexio_exit_code trexio_text_finalize(trexio_t* file) {
|
|||||||
|
|
||||||
return TREXIO_SUCCESS;
|
return TREXIO_SUCCESS;
|
||||||
}
|
}
|
||||||
/* Init/deinit functions:6 ends here */
|
|
||||||
|
|
||||||
/* [[file:trexio_text.org::*Init/deinit functions][Init/deinit functions:8]] */
|
|
||||||
trexio_exit_code trexio_text_unlock(trexio_t* file) {
|
trexio_exit_code trexio_text_unlock(trexio_t* file) {
|
||||||
if (file == NULL) return TREXIO_INVALID_ARG_1;
|
if (file == NULL) return TREXIO_INVALID_ARG_1;
|
||||||
|
|
||||||
@ -109,9 +100,7 @@ trexio_exit_code trexio_text_unlock(trexio_t* file) {
|
|||||||
close(f->lock_file);
|
close(f->lock_file);
|
||||||
return TREXIO_SUCCESS;
|
return TREXIO_SUCCESS;
|
||||||
}
|
}
|
||||||
/* Init/deinit functions:8 ends here */
|
|
||||||
|
|
||||||
/* [[file:trexio_text.org::*Read the struct][Read the struct:2]] */
|
|
||||||
#define DEBUG printf("%s : line %d\n", __FILE__, __LINE__);
|
#define DEBUG printf("%s : line %d\n", __FILE__, __LINE__);
|
||||||
|
|
||||||
nucleus_t* trexio_text_read_nucleus(trexio_text_t* file) {
|
nucleus_t* trexio_text_read_nucleus(trexio_text_t* file) {
|
||||||
@ -182,9 +171,9 @@ DEBUG
|
|||||||
}
|
}
|
||||||
|
|
||||||
uint64_t size_charge = 1;
|
uint64_t size_charge = 1;
|
||||||
for (uint i=0; i<nucleus->rank_charge; i++){
|
for (unsigned int i=0; i<nucleus->rank_charge; i++){
|
||||||
|
|
||||||
uint j=-1;
|
unsigned int j=-1;
|
||||||
rc = fscanf(f, "%s %u", buffer, &j);
|
rc = fscanf(f, "%s %u", buffer, &j);
|
||||||
if ((rc != 2) || (strcmp(buffer, "dims_charge") != 0) || (j!=i)) {
|
if ((rc != 2) || (strcmp(buffer, "dims_charge") != 0) || (j!=i)) {
|
||||||
FREE(buffer);
|
FREE(buffer);
|
||||||
@ -227,9 +216,9 @@ DEBUG
|
|||||||
}
|
}
|
||||||
|
|
||||||
uint64_t size_coord = 1;
|
uint64_t size_coord = 1;
|
||||||
for (uint i=0; i<nucleus->rank_coord; i++){
|
for (unsigned int i=0; i<nucleus->rank_coord; i++){
|
||||||
|
|
||||||
uint j=-1;
|
unsigned int j=-1;
|
||||||
rc = fscanf(f, "%s %u", buffer, &j);
|
rc = fscanf(f, "%s %u", buffer, &j);
|
||||||
if ((rc != 2) || (strcmp(buffer, "dims_coord") != 0) || (j!=i)) {
|
if ((rc != 2) || (strcmp(buffer, "dims_coord") != 0) || (j!=i)) {
|
||||||
FREE(buffer);
|
FREE(buffer);
|
||||||
@ -367,9 +356,7 @@ DEBUG
|
|||||||
file->nucleus = nucleus;
|
file->nucleus = nucleus;
|
||||||
return nucleus;
|
return nucleus;
|
||||||
}
|
}
|
||||||
/* Read the struct:2 ends here */
|
|
||||||
|
|
||||||
/* [[file:trexio_text.org::*Flush the struct][Flush the struct:2]] */
|
|
||||||
trexio_exit_code trexio_text_flush_nucleus(const trexio_text_t* file) {
|
trexio_exit_code trexio_text_flush_nucleus(const trexio_text_t* file) {
|
||||||
if (file == NULL) return TREXIO_INVALID_ARG_1;
|
if (file == NULL) return TREXIO_INVALID_ARG_1;
|
||||||
|
|
||||||
@ -389,7 +376,7 @@ trexio_exit_code trexio_text_flush_nucleus(const trexio_text_t* file) {
|
|||||||
fprintf(f, "rank_charge %d\n", nucleus->rank_charge);
|
fprintf(f, "rank_charge %d\n", nucleus->rank_charge);
|
||||||
|
|
||||||
uint64_t size_charge = 1;
|
uint64_t size_charge = 1;
|
||||||
for (uint i=0; i<nucleus->rank_charge; i++){
|
for (unsigned int i=0; i<nucleus->rank_charge; i++){
|
||||||
fprintf(f, "dims_charge %d %ld\n", i, nucleus->dims_charge[i]);
|
fprintf(f, "dims_charge %d %ld\n", i, nucleus->dims_charge[i]);
|
||||||
size_charge *= nucleus->dims_charge[i];
|
size_charge *= nucleus->dims_charge[i];
|
||||||
}
|
}
|
||||||
@ -397,7 +384,7 @@ trexio_exit_code trexio_text_flush_nucleus(const trexio_text_t* file) {
|
|||||||
fprintf(f, "rank_coord %d\n", nucleus->rank_coord);
|
fprintf(f, "rank_coord %d\n", nucleus->rank_coord);
|
||||||
|
|
||||||
uint64_t size_coord = 1;
|
uint64_t size_coord = 1;
|
||||||
for (uint i=0; i<nucleus->rank_coord; i++){
|
for (unsigned int i=0; i<nucleus->rank_coord; i++){
|
||||||
fprintf(f, "dims_coord %d %ld\n", i, nucleus->dims_coord[i]);
|
fprintf(f, "dims_coord %d %ld\n", i, nucleus->dims_coord[i]);
|
||||||
size_coord *= nucleus->dims_coord[i];
|
size_coord *= nucleus->dims_coord[i];
|
||||||
}
|
}
|
||||||
@ -417,9 +404,7 @@ trexio_exit_code trexio_text_flush_nucleus(const trexio_text_t* file) {
|
|||||||
file->nucleus->to_flush = 0;
|
file->nucleus->to_flush = 0;
|
||||||
return TREXIO_SUCCESS;
|
return TREXIO_SUCCESS;
|
||||||
}
|
}
|
||||||
/* Flush the struct:2 ends here */
|
|
||||||
|
|
||||||
/* [[file:trexio_text.org::*Free memory][Free memory:2]] */
|
|
||||||
trexio_exit_code trexio_text_free_nucleus(trexio_text_t* file) {
|
trexio_exit_code trexio_text_free_nucleus(trexio_text_t* file) {
|
||||||
if (file == NULL) return TREXIO_INVALID_ARG_1;
|
if (file == NULL) return TREXIO_INVALID_ARG_1;
|
||||||
|
|
||||||
@ -449,9 +434,7 @@ trexio_exit_code trexio_text_free_nucleus(trexio_text_t* file) {
|
|||||||
FREE (nucleus);
|
FREE (nucleus);
|
||||||
return TREXIO_SUCCESS;
|
return TREXIO_SUCCESS;
|
||||||
}
|
}
|
||||||
/* Free memory:2 ends here */
|
|
||||||
|
|
||||||
/* [[file:trexio_text.org::*Read/Write the num attribute][Read/Write the num attribute:2]] */
|
|
||||||
trexio_exit_code trexio_text_read_nucleus_num(const trexio_t* file, uint64_t* num) {
|
trexio_exit_code trexio_text_read_nucleus_num(const trexio_t* file, uint64_t* num) {
|
||||||
|
|
||||||
if (file == NULL) return TREXIO_INVALID_ARG_1;
|
if (file == NULL) return TREXIO_INVALID_ARG_1;
|
||||||
@ -480,9 +463,7 @@ trexio_exit_code trexio_text_write_nucleus_num(const trexio_t* file, const uint6
|
|||||||
|
|
||||||
return TREXIO_SUCCESS;
|
return TREXIO_SUCCESS;
|
||||||
}
|
}
|
||||||
/* Read/Write the num attribute:2 ends here */
|
|
||||||
|
|
||||||
/* [[file:trexio_text.org::*Read/Write the coord attribute][Read/Write the coord attribute:2]] */
|
|
||||||
trexio_exit_code trexio_text_read_nucleus_coord(const trexio_t* file, double* coord, const uint32_t rank, const uint64_t* dims) {
|
trexio_exit_code trexio_text_read_nucleus_coord(const trexio_t* file, double* coord, const uint32_t rank, const uint64_t* dims) {
|
||||||
|
|
||||||
if (file == NULL) return TREXIO_INVALID_ARG_1;
|
if (file == NULL) return TREXIO_INVALID_ARG_1;
|
||||||
@ -494,7 +475,7 @@ trexio_exit_code trexio_text_read_nucleus_coord(const trexio_t* file, double* co
|
|||||||
if (rank != nucleus->rank_coord) return TREXIO_INVALID_ARG_3;
|
if (rank != nucleus->rank_coord) return TREXIO_INVALID_ARG_3;
|
||||||
|
|
||||||
uint64_t dim_size = 1;
|
uint64_t dim_size = 1;
|
||||||
for (uint i=0; i<rank; i++){
|
for (unsigned int i=0; i<rank; i++){
|
||||||
if (dims[i] != nucleus->dims_coord[i]) return TREXIO_INVALID_ARG_4;
|
if (dims[i] != nucleus->dims_coord[i]) return TREXIO_INVALID_ARG_4;
|
||||||
dim_size *= dims[i];
|
dim_size *= dims[i];
|
||||||
}
|
}
|
||||||
@ -523,7 +504,7 @@ trexio_exit_code trexio_text_write_nucleus_coord(const trexio_t* file, const dou
|
|||||||
nucleus->rank_coord = rank;
|
nucleus->rank_coord = rank;
|
||||||
|
|
||||||
uint64_t dim_size = 1;
|
uint64_t dim_size = 1;
|
||||||
for (uint i=0; i<nucleus->rank_coord; i++){
|
for (unsigned int i=0; i<nucleus->rank_coord; i++){
|
||||||
nucleus->dims_coord[i] = dims[i];
|
nucleus->dims_coord[i] = dims[i];
|
||||||
dim_size *= dims[i];
|
dim_size *= dims[i];
|
||||||
}
|
}
|
||||||
@ -537,9 +518,7 @@ trexio_exit_code trexio_text_write_nucleus_coord(const trexio_t* file, const dou
|
|||||||
nucleus->to_flush = 1;
|
nucleus->to_flush = 1;
|
||||||
return TREXIO_SUCCESS;
|
return TREXIO_SUCCESS;
|
||||||
}
|
}
|
||||||
/* Read/Write the coord attribute:2 ends here */
|
|
||||||
|
|
||||||
/* [[file:trexio_text.org::*Read/Write the charge attribute][Read/Write the charge attribute:2]] */
|
|
||||||
trexio_exit_code trexio_text_read_nucleus_charge(const trexio_t* file, double* charge, const uint32_t rank, const uint64_t* dims) {
|
trexio_exit_code trexio_text_read_nucleus_charge(const trexio_t* file, double* charge, const uint32_t rank, const uint64_t* dims) {
|
||||||
|
|
||||||
if (file == NULL) return TREXIO_INVALID_ARG_1;
|
if (file == NULL) return TREXIO_INVALID_ARG_1;
|
||||||
@ -551,7 +530,7 @@ trexio_exit_code trexio_text_read_nucleus_charge(const trexio_t* file, double* c
|
|||||||
if (rank != nucleus->rank_charge) return TREXIO_INVALID_ARG_3;
|
if (rank != nucleus->rank_charge) return TREXIO_INVALID_ARG_3;
|
||||||
|
|
||||||
uint64_t dim_size = 1;
|
uint64_t dim_size = 1;
|
||||||
for (uint i=0; i<rank; i++){
|
for (unsigned int i=0; i<rank; i++){
|
||||||
if (dims[i] != nucleus->dims_charge[i]) return TREXIO_INVALID_ARG_4;
|
if (dims[i] != nucleus->dims_charge[i]) return TREXIO_INVALID_ARG_4;
|
||||||
dim_size *= dims[i];
|
dim_size *= dims[i];
|
||||||
}
|
}
|
||||||
@ -580,7 +559,7 @@ trexio_exit_code trexio_text_write_nucleus_charge(const trexio_t* file, const do
|
|||||||
nucleus->rank_charge = rank;
|
nucleus->rank_charge = rank;
|
||||||
|
|
||||||
uint64_t dim_size = 1;
|
uint64_t dim_size = 1;
|
||||||
for (uint i=0; i<nucleus->rank_charge; i++){
|
for (unsigned int i=0; i<nucleus->rank_charge; i++){
|
||||||
nucleus->dims_charge[i] = dims[i];
|
nucleus->dims_charge[i] = dims[i];
|
||||||
dim_size *= dims[i];
|
dim_size *= dims[i];
|
||||||
}
|
}
|
||||||
@ -594,9 +573,7 @@ trexio_exit_code trexio_text_write_nucleus_charge(const trexio_t* file, const do
|
|||||||
nucleus->to_flush = 1;
|
nucleus->to_flush = 1;
|
||||||
return TREXIO_SUCCESS;
|
return TREXIO_SUCCESS;
|
||||||
}
|
}
|
||||||
/* Read/Write the charge attribute:2 ends here */
|
|
||||||
|
|
||||||
/* [[file:trexio_text.org::*Read the complete struct][Read the complete struct:2]] */
|
|
||||||
rdm_t* trexio_text_read_rdm(trexio_text_t* file) {
|
rdm_t* trexio_text_read_rdm(trexio_text_t* file) {
|
||||||
if (file == NULL) return NULL;
|
if (file == NULL) return NULL;
|
||||||
|
|
||||||
@ -676,9 +653,7 @@ rdm_t* trexio_text_read_rdm(trexio_text_t* file) {
|
|||||||
file->rdm = rdm ;
|
file->rdm = rdm ;
|
||||||
return rdm;
|
return rdm;
|
||||||
}
|
}
|
||||||
/* Read the complete struct:2 ends here */
|
|
||||||
|
|
||||||
/* [[file:trexio_text.org::*Flush the complete struct][Flush the complete struct:2]] */
|
|
||||||
trexio_exit_code trexio_text_flush_rdm(const trexio_text_t* file) {
|
trexio_exit_code trexio_text_flush_rdm(const trexio_text_t* file) {
|
||||||
if (file == NULL) return TREXIO_INVALID_ARG_1;
|
if (file == NULL) return TREXIO_INVALID_ARG_1;
|
||||||
|
|
||||||
@ -709,9 +684,7 @@ trexio_exit_code trexio_text_flush_rdm(const trexio_text_t* file) {
|
|||||||
file->rdm->to_flush = 0;
|
file->rdm->to_flush = 0;
|
||||||
return TREXIO_SUCCESS;
|
return TREXIO_SUCCESS;
|
||||||
}
|
}
|
||||||
/* Flush the complete struct:2 ends here */
|
|
||||||
|
|
||||||
/* [[file:trexio_text.org::*Free memory][Free memory:2]] */
|
|
||||||
trexio_exit_code trexio_text_free_rdm(trexio_text_t* file) {
|
trexio_exit_code trexio_text_free_rdm(trexio_text_t* file) {
|
||||||
if (file == NULL) return TREXIO_INVALID_ARG_1;
|
if (file == NULL) return TREXIO_INVALID_ARG_1;
|
||||||
|
|
||||||
@ -741,9 +714,7 @@ trexio_exit_code trexio_text_free_rdm(trexio_text_t* file) {
|
|||||||
file->rdm = NULL;
|
file->rdm = NULL;
|
||||||
return TREXIO_SUCCESS;
|
return TREXIO_SUCCESS;
|
||||||
}
|
}
|
||||||
/* Free memory:2 ends here */
|
|
||||||
|
|
||||||
/* [[file:trexio_text.org::*Read/Write the one_e attribute][Read/Write the one_e attribute:2]] */
|
|
||||||
trexio_exit_code trexio_text_read_rdm_one_e(const trexio_t* file, double* one_e, const uint64_t dim_one_e) {
|
trexio_exit_code trexio_text_read_rdm_one_e(const trexio_t* file, double* one_e, const uint64_t dim_one_e) {
|
||||||
|
|
||||||
if (file == NULL) return TREXIO_INVALID_ARG_1;
|
if (file == NULL) return TREXIO_INVALID_ARG_1;
|
||||||
@ -778,9 +749,7 @@ trexio_exit_code trexio_text_write_rdm_one_e(const trexio_t* file, const double*
|
|||||||
rdm->to_flush = 1;
|
rdm->to_flush = 1;
|
||||||
return TREXIO_SUCCESS;
|
return TREXIO_SUCCESS;
|
||||||
}
|
}
|
||||||
/* Read/Write the one_e attribute:2 ends here */
|
|
||||||
|
|
||||||
/* [[file:trexio_text.org::*Read/Write the two_e attribute][Read/Write the two_e attribute:2]] */
|
|
||||||
trexio_exit_code trexio_text_buffered_read_rdm_two_e(const trexio_t* file, const uint64_t offset, const uint64_t size, int64_t* index, double* value) {
|
trexio_exit_code trexio_text_buffered_read_rdm_two_e(const trexio_t* file, const uint64_t offset, const uint64_t size, int64_t* index, double* value) {
|
||||||
|
|
||||||
if (file == NULL) return TREXIO_INVALID_ARG_1;
|
if (file == NULL) return TREXIO_INVALID_ARG_1;
|
||||||
@ -845,4 +814,3 @@ trexio_exit_code trexio_text_buffered_write_rdm_two_e(const trexio_t* file, cons
|
|||||||
|
|
||||||
return TREXIO_SUCCESS;
|
return TREXIO_SUCCESS;
|
||||||
}
|
}
|
||||||
/* Read/Write the two_e attribute:2 ends here */
|
|
||||||
|
@ -1,4 +1,3 @@
|
|||||||
/* [[file:trexio_text.org::*File prefixes][File prefixes:3]] */
|
|
||||||
/* This file was generated from the trexio.org org-mode file.
|
/* This file was generated from the trexio.org org-mode file.
|
||||||
To generate it, open trexio.org in Emacs and execute
|
To generate it, open trexio.org in Emacs and execute
|
||||||
M-x org-babel-tangle
|
M-x org-babel-tangle
|
||||||
@ -21,11 +20,7 @@
|
|||||||
#include <fcntl.h>
|
#include <fcntl.h>
|
||||||
#include <unistd.h>
|
#include <unistd.h>
|
||||||
#include <sys/stat.h>
|
#include <sys/stat.h>
|
||||||
/* File prefixes:3 ends here */
|
|
||||||
|
|
||||||
/* Structs for blocks */
|
|
||||||
|
|
||||||
/* [[file:trexio_text.org::*Structs for blocks][Structs for blocks:1]] */
|
|
||||||
typedef struct nucleus_s {
|
typedef struct nucleus_s {
|
||||||
FILE* file;
|
FILE* file;
|
||||||
double* coord;
|
double* coord;
|
||||||
@ -52,12 +47,7 @@ typedef struct rdm_s {
|
|||||||
char* two_e_file_name;
|
char* two_e_file_name;
|
||||||
int to_flush;
|
int to_flush;
|
||||||
} rdm_t;
|
} rdm_t;
|
||||||
/* Structs for blocks:1 ends here */
|
|
||||||
|
|
||||||
/* Structs for the text back end */
|
|
||||||
|
|
||||||
|
|
||||||
/* [[file:trexio_text.org::*Structs for the text back end][Structs for the text back end:1]] */
|
|
||||||
typedef struct trexio_text_s {
|
typedef struct trexio_text_s {
|
||||||
trexio_t parent ;
|
trexio_t parent ;
|
||||||
int lock_file;
|
int lock_file;
|
||||||
@ -66,128 +56,40 @@ typedef struct trexio_text_s {
|
|||||||
electron_t* electron;
|
electron_t* electron;
|
||||||
rdm_t* rdm;
|
rdm_t* rdm;
|
||||||
} trexio_text_t;
|
} trexio_text_t;
|
||||||
/* Structs for the text back end:1 ends here */
|
|
||||||
|
|
||||||
/* Init/deinit functions */
|
|
||||||
|
|
||||||
|
|
||||||
/* [[file:trexio_text.org::*Init/deinit functions][Init/deinit functions:1]] */
|
|
||||||
trexio_exit_code trexio_text_init(trexio_t* file);
|
trexio_exit_code trexio_text_init(trexio_t* file);
|
||||||
/* Init/deinit functions:1 ends here */
|
|
||||||
|
|
||||||
/* [[file:trexio_text.org::*Init/deinit functions][Init/deinit functions:3]] */
|
|
||||||
trexio_exit_code trexio_text_lock(trexio_t* file);
|
trexio_exit_code trexio_text_lock(trexio_t* file);
|
||||||
/* Init/deinit functions:3 ends here */
|
|
||||||
|
|
||||||
/* [[file:trexio_text.org::*Init/deinit functions][Init/deinit functions:5]] */
|
|
||||||
trexio_exit_code trexio_text_finalize(trexio_t* file);
|
trexio_exit_code trexio_text_finalize(trexio_t* file);
|
||||||
/* Init/deinit functions:5 ends here */
|
|
||||||
|
|
||||||
/* [[file:trexio_text.org::*Init/deinit functions][Init/deinit functions:7]] */
|
|
||||||
trexio_exit_code trexio_text_unlock(trexio_t* file);
|
trexio_exit_code trexio_text_unlock(trexio_t* file);
|
||||||
/* Init/deinit functions:7 ends here */
|
|
||||||
|
|
||||||
/* Read the struct */
|
|
||||||
|
|
||||||
|
|
||||||
/* [[file:trexio_text.org::*Read the struct][Read the struct:1]] */
|
|
||||||
nucleus_t* trexio_text_read_nucleus(trexio_text_t* file);
|
nucleus_t* trexio_text_read_nucleus(trexio_text_t* file);
|
||||||
/* Read the struct:1 ends here */
|
|
||||||
|
|
||||||
/* Flush the struct */
|
|
||||||
|
|
||||||
|
|
||||||
/* [[file:trexio_text.org::*Flush the struct][Flush the struct:1]] */
|
|
||||||
trexio_exit_code trexio_text_flush_nucleus(const trexio_text_t* file);
|
trexio_exit_code trexio_text_flush_nucleus(const trexio_text_t* file);
|
||||||
/* Flush the struct:1 ends here */
|
|
||||||
|
|
||||||
/* Free memory */
|
|
||||||
|
|
||||||
/* Memory is allocated when reading. The following function frees memory. */
|
|
||||||
|
|
||||||
|
|
||||||
/* [[file:trexio_text.org::*Free memory][Free memory:1]] */
|
|
||||||
trexio_exit_code trexio_text_free_nucleus(trexio_text_t* file);
|
trexio_exit_code trexio_text_free_nucleus(trexio_text_t* file);
|
||||||
/* Free memory:1 ends here */
|
|
||||||
|
|
||||||
/* Read/Write the num attribute */
|
|
||||||
|
|
||||||
|
|
||||||
/* [[file:trexio_text.org::*Read/Write the num attribute][Read/Write the num attribute:1]] */
|
|
||||||
trexio_exit_code trexio_text_read_nucleus_num(const trexio_t* file, uint64_t* num);
|
trexio_exit_code trexio_text_read_nucleus_num(const trexio_t* file, uint64_t* num);
|
||||||
trexio_exit_code trexio_text_write_nucleus_num(const trexio_t* file, const uint64_t num);
|
trexio_exit_code trexio_text_write_nucleus_num(const trexio_t* file, const uint64_t num);
|
||||||
/* Read/Write the num attribute:1 ends here */
|
|
||||||
|
|
||||||
/* Read/Write the coord attribute */
|
|
||||||
|
|
||||||
/* The ~coord~ array is assumed allocated with the appropriate size. */
|
|
||||||
|
|
||||||
|
|
||||||
/* [[file:trexio_text.org::*Read/Write the coord attribute][Read/Write the coord attribute:1]] */
|
|
||||||
trexio_exit_code trexio_text_read_nucleus_coord(const trexio_t* file, double* coord, const uint32_t rank, const uint64_t* dims);
|
trexio_exit_code trexio_text_read_nucleus_coord(const trexio_t* file, double* coord, const uint32_t rank, const uint64_t* dims);
|
||||||
trexio_exit_code trexio_text_write_nucleus_coord(const trexio_t* file, const double* coord, const uint32_t rank, const uint64_t* dims);
|
trexio_exit_code trexio_text_write_nucleus_coord(const trexio_t* file, const double* coord, const uint32_t rank, const uint64_t* dims);
|
||||||
/* Read/Write the coord attribute:1 ends here */
|
|
||||||
|
|
||||||
/* Read/Write the charge attribute */
|
|
||||||
|
|
||||||
/* The ~charge~ array is assumed allocated with the appropriate size. */
|
|
||||||
|
|
||||||
|
|
||||||
/* [[file:trexio_text.org::*Read/Write the charge attribute][Read/Write the charge attribute:1]] */
|
|
||||||
trexio_exit_code trexio_text_read_nucleus_charge(const trexio_t* file, double* charge, const uint32_t rank, const uint64_t* dims);
|
trexio_exit_code trexio_text_read_nucleus_charge(const trexio_t* file, double* charge, const uint32_t rank, const uint64_t* dims);
|
||||||
trexio_exit_code trexio_text_write_nucleus_charge(const trexio_t* file, const double* charge, const uint32_t rank, const uint64_t* dims);
|
trexio_exit_code trexio_text_write_nucleus_charge(const trexio_t* file, const double* charge, const uint32_t rank, const uint64_t* dims);
|
||||||
/* Read/Write the charge attribute:1 ends here */
|
|
||||||
|
|
||||||
/* Read the complete struct */
|
|
||||||
|
|
||||||
|
|
||||||
/* [[file:trexio_text.org::*Read the complete struct][Read the complete struct:1]] */
|
|
||||||
rdm_t* trexio_text_read_rdm(trexio_text_t* file);
|
rdm_t* trexio_text_read_rdm(trexio_text_t* file);
|
||||||
/* Read the complete struct:1 ends here */
|
|
||||||
|
|
||||||
/* Flush the complete struct */
|
|
||||||
|
|
||||||
|
|
||||||
/* [[file:trexio_text.org::*Flush the complete struct][Flush the complete struct:1]] */
|
|
||||||
trexio_exit_code trexio_text_flush_rdm(const trexio_text_t* file);
|
trexio_exit_code trexio_text_flush_rdm(const trexio_text_t* file);
|
||||||
/* Flush the complete struct:1 ends here */
|
|
||||||
|
|
||||||
/* Free memory */
|
|
||||||
|
|
||||||
/* Memory is allocated when reading. The followig function frees memory. */
|
|
||||||
|
|
||||||
|
|
||||||
/* [[file:trexio_text.org::*Free memory][Free memory:1]] */
|
|
||||||
trexio_exit_code trexio_text_free_rdm(trexio_text_t* file);
|
trexio_exit_code trexio_text_free_rdm(trexio_text_t* file);
|
||||||
/* Free memory:1 ends here */
|
|
||||||
|
|
||||||
/* Read/Write the one_e attribute */
|
|
||||||
|
|
||||||
/* The ~one_e~ array is assumed allocated with the appropriate size. */
|
|
||||||
|
|
||||||
|
|
||||||
/* [[file:trexio_text.org::*Read/Write the one_e attribute][Read/Write the one_e attribute:1]] */
|
|
||||||
trexio_exit_code trexio_text_read_rdm_one_e(const trexio_t* file, double* one_e, const uint64_t dim_one_e);
|
trexio_exit_code trexio_text_read_rdm_one_e(const trexio_t* file, double* one_e, const uint64_t dim_one_e);
|
||||||
trexio_exit_code trexio_text_write_rdm_one_e(const trexio_t* file, const double* one_e, const uint64_t dim_one_e);
|
trexio_exit_code trexio_text_write_rdm_one_e(const trexio_t* file, const double* one_e, const uint64_t dim_one_e);
|
||||||
/* Read/Write the one_e attribute:1 ends here */
|
|
||||||
|
|
||||||
/* Read/Write the two_e attribute */
|
|
||||||
|
|
||||||
/* ~two_e~ is a sparse data structure, which can be too large to fit */
|
|
||||||
/* in memory. So we provide functions to read and write it by */
|
|
||||||
/* chunks. */
|
|
||||||
/* In the text back end, the easiest way to do it is to create a */
|
|
||||||
/* file for each sparse float structure. */
|
|
||||||
|
|
||||||
|
|
||||||
/* [[file:trexio_text.org::*Read/Write the two_e attribute][Read/Write the two_e attribute:1]] */
|
|
||||||
trexio_exit_code trexio_text_buffered_read_rdm_two_e(const trexio_t* file, const uint64_t offset, const uint64_t size, int64_t* index, double* value);
|
trexio_exit_code trexio_text_buffered_read_rdm_two_e(const trexio_t* file, const uint64_t offset, const uint64_t size, int64_t* index, double* value);
|
||||||
trexio_exit_code trexio_text_buffered_write_rdm_two_e(const trexio_t* file, const uint64_t offset, const uint64_t size, const int64_t* index, const double* value);
|
trexio_exit_code trexio_text_buffered_write_rdm_two_e(const trexio_t* file, const uint64_t offset, const uint64_t size, const int64_t* index, const double* value);
|
||||||
/* Read/Write the two_e attribute:1 ends here */
|
|
||||||
|
|
||||||
/* File suffixes :noxport: */
|
|
||||||
|
|
||||||
|
|
||||||
/* [[file:trexio_text.org::*File suffixes][File suffixes:1]] */
|
|
||||||
#endif
|
#endif
|
||||||
/* File suffixes:1 ends here */
|
|
||||||
|
@ -100,13 +100,6 @@ typedef struct rdm_s {
|
|||||||
int to_flush;
|
int to_flush;
|
||||||
} rdm_t;
|
} rdm_t;
|
||||||
#+end_src
|
#+end_src
|
||||||
|
|
||||||
|
|
||||||
*** TO DO
|
|
||||||
- to_flush = 1 in write
|
|
||||||
- to_flush = 0 when flushed
|
|
||||||
- name
|
|
||||||
|
|
||||||
*** Structs for the text back end
|
*** Structs for the text back end
|
||||||
|
|
||||||
#+begin_src c :tangle trexio_text.h
|
#+begin_src c :tangle trexio_text.h
|
||||||
@ -321,11 +314,11 @@ DEBUG
|
|||||||
}
|
}
|
||||||
|
|
||||||
uint64_t size_charge = 1;
|
uint64_t size_charge = 1;
|
||||||
for (uint i=0; i<nucleus->rank_charge; i++){
|
for (unsigned int i=0; i<nucleus->rank_charge; i++){
|
||||||
|
|
||||||
uint j=-1;
|
unsigned int j=-1;
|
||||||
rc = fscanf(f, "%s %u", buffer, &j);
|
rc = fscanf(f, "%s %u", buffer, &j);
|
||||||
if ((rc != 1) || (strcmp(buffer, "dims_charge") != 0) || (j!=i)) {
|
if ((rc != 2) || (strcmp(buffer, "dims_charge") != 0) || (j!=i)) {
|
||||||
FREE(buffer);
|
FREE(buffer);
|
||||||
FREE(file_name);
|
FREE(file_name);
|
||||||
FREE(nucleus);
|
FREE(nucleus);
|
||||||
@ -366,11 +359,11 @@ DEBUG
|
|||||||
}
|
}
|
||||||
|
|
||||||
uint64_t size_coord = 1;
|
uint64_t size_coord = 1;
|
||||||
for (uint i=0; i<nucleus->rank_coord; i++){
|
for (unsigned int i=0; i<nucleus->rank_coord; i++){
|
||||||
|
|
||||||
uint j=-1;
|
unsigned int j=-1;
|
||||||
rc = fscanf(f, "%s %u", buffer, &j);
|
rc = fscanf(f, "%s %u", buffer, &j);
|
||||||
if ((rc != 1) || (strcmp(buffer, "dims_coord") != 0) || (j!=i)) {
|
if ((rc != 2) || (strcmp(buffer, "dims_coord") != 0) || (j!=i)) {
|
||||||
FREE(buffer);
|
FREE(buffer);
|
||||||
FREE(file_name);
|
FREE(file_name);
|
||||||
FREE(nucleus);
|
FREE(nucleus);
|
||||||
@ -534,7 +527,7 @@ trexio_exit_code trexio_text_flush_nucleus(const trexio_text_t* file) {
|
|||||||
fprintf(f, "rank_charge %d\n", nucleus->rank_charge);
|
fprintf(f, "rank_charge %d\n", nucleus->rank_charge);
|
||||||
|
|
||||||
uint64_t size_charge = 1;
|
uint64_t size_charge = 1;
|
||||||
for (uint i=0; i<nucleus->rank_charge; i++){
|
for (unsigned int i=0; i<nucleus->rank_charge; i++){
|
||||||
fprintf(f, "dims_charge %d %ld\n", i, nucleus->dims_charge[i]);
|
fprintf(f, "dims_charge %d %ld\n", i, nucleus->dims_charge[i]);
|
||||||
size_charge *= nucleus->dims_charge[i];
|
size_charge *= nucleus->dims_charge[i];
|
||||||
}
|
}
|
||||||
@ -542,7 +535,7 @@ trexio_exit_code trexio_text_flush_nucleus(const trexio_text_t* file) {
|
|||||||
fprintf(f, "rank_coord %d\n", nucleus->rank_coord);
|
fprintf(f, "rank_coord %d\n", nucleus->rank_coord);
|
||||||
|
|
||||||
uint64_t size_coord = 1;
|
uint64_t size_coord = 1;
|
||||||
for (uint i=0; i<nucleus->rank_coord; i++){
|
for (unsigned int i=0; i<nucleus->rank_coord; i++){
|
||||||
fprintf(f, "dims_coord %d %ld\n", i, nucleus->dims_coord[i]);
|
fprintf(f, "dims_coord %d %ld\n", i, nucleus->dims_coord[i]);
|
||||||
size_coord *= nucleus->dims_coord[i];
|
size_coord *= nucleus->dims_coord[i];
|
||||||
}
|
}
|
||||||
@ -573,33 +566,33 @@ trexio_exit_code trexio_text_free_nucleus(trexio_text_t* file);
|
|||||||
#+end_src
|
#+end_src
|
||||||
|
|
||||||
#+begin_src c :tangle trexio_text.c
|
#+begin_src c :tangle trexio_text.c
|
||||||
trexio_exit_code trexio_text_free_rdm(trexio_text_t* file) {
|
trexio_exit_code trexio_text_free_nucleus(trexio_text_t* file) {
|
||||||
if (file == NULL) return TREXIO_INVALID_ARG_1;
|
if (file == NULL) return TREXIO_INVALID_ARG_1;
|
||||||
|
|
||||||
trexio_exit_code rc;
|
trexio_exit_code rc;
|
||||||
|
|
||||||
if (file->parent.mode != 'r') {
|
if (file->parent.mode != 'r') {
|
||||||
rc = trexio_text_flush_rdm(file);
|
rc = trexio_text_flush_nucleus(file);
|
||||||
if (rc != TREXIO_SUCCESS) return TREXIO_FAILURE;
|
if (rc != TREXIO_SUCCESS) return TREXIO_FAILURE;
|
||||||
}
|
}
|
||||||
|
|
||||||
rdm_t* rdm = file->rdm;
|
nucleus_t* nucleus = file->nucleus;
|
||||||
if (rdm == NULL) return TREXIO_SUCCESS;
|
if (nucleus == NULL) return TREXIO_SUCCESS;
|
||||||
|
|
||||||
if (rdm->file != NULL) {
|
if (nucleus->file != NULL) {
|
||||||
fclose(rdm->file);
|
fclose(nucleus->file);
|
||||||
rdm->file = NULL;
|
nucleus->file = NULL;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (nucleus->coord != NULL) {
|
||||||
|
FREE (nucleus->coord);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (nucleus->charge != NULL) {
|
||||||
|
FREE (nucleus->charge);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (rdm->one_e != NULL) {
|
FREE (nucleus);
|
||||||
FREE (rdm->one_e);
|
|
||||||
}
|
|
||||||
|
|
||||||
if (rdm->two_e_file_name != NULL) {
|
|
||||||
FREE (rdm->two_e_file_name);
|
|
||||||
}
|
|
||||||
|
|
||||||
free (rdm);
|
|
||||||
file->rdm = NULL;
|
|
||||||
return TREXIO_SUCCESS;
|
return TREXIO_SUCCESS;
|
||||||
}
|
}
|
||||||
#+end_src
|
#+end_src
|
||||||
@ -663,7 +656,7 @@ trexio_exit_code trexio_text_read_nucleus_coord(const trexio_t* file, double* co
|
|||||||
if (rank != nucleus->rank_coord) return TREXIO_INVALID_ARG_3;
|
if (rank != nucleus->rank_coord) return TREXIO_INVALID_ARG_3;
|
||||||
|
|
||||||
uint64_t dim_size = 1;
|
uint64_t dim_size = 1;
|
||||||
for (uint i=0; i<rank; i++){
|
for (unsigned int i=0; i<rank; i++){
|
||||||
if (dims[i] != nucleus->dims_coord[i]) return TREXIO_INVALID_ARG_4;
|
if (dims[i] != nucleus->dims_coord[i]) return TREXIO_INVALID_ARG_4;
|
||||||
dim_size *= dims[i];
|
dim_size *= dims[i];
|
||||||
}
|
}
|
||||||
@ -692,7 +685,7 @@ trexio_exit_code trexio_text_write_nucleus_coord(const trexio_t* file, const dou
|
|||||||
nucleus->rank_coord = rank;
|
nucleus->rank_coord = rank;
|
||||||
|
|
||||||
uint64_t dim_size = 1;
|
uint64_t dim_size = 1;
|
||||||
for (uint i=0; i<nucleus->rank_coord; i++){
|
for (unsigned int i=0; i<nucleus->rank_coord; i++){
|
||||||
nucleus->dims_coord[i] = dims[i];
|
nucleus->dims_coord[i] = dims[i];
|
||||||
dim_size *= dims[i];
|
dim_size *= dims[i];
|
||||||
}
|
}
|
||||||
@ -728,7 +721,7 @@ trexio_exit_code trexio_text_read_nucleus_charge(const trexio_t* file, double* c
|
|||||||
if (rank != nucleus->rank_charge) return TREXIO_INVALID_ARG_3;
|
if (rank != nucleus->rank_charge) return TREXIO_INVALID_ARG_3;
|
||||||
|
|
||||||
uint64_t dim_size = 1;
|
uint64_t dim_size = 1;
|
||||||
for (uint i=0; i<rank; i++){
|
for (unsigned int i=0; i<rank; i++){
|
||||||
if (dims[i] != nucleus->dims_charge[i]) return TREXIO_INVALID_ARG_4;
|
if (dims[i] != nucleus->dims_charge[i]) return TREXIO_INVALID_ARG_4;
|
||||||
dim_size *= dims[i];
|
dim_size *= dims[i];
|
||||||
}
|
}
|
||||||
@ -757,7 +750,7 @@ trexio_exit_code trexio_text_write_nucleus_charge(const trexio_t* file, const do
|
|||||||
nucleus->rank_charge = rank;
|
nucleus->rank_charge = rank;
|
||||||
|
|
||||||
uint64_t dim_size = 1;
|
uint64_t dim_size = 1;
|
||||||
for (uint i=0; i<nucleus->rank_charge; i++){
|
for (unsigned int i=0; i<nucleus->rank_charge; i++){
|
||||||
nucleus->dims_charge[i] = dims[i];
|
nucleus->dims_charge[i] = dims[i];
|
||||||
dim_size *= dims[i];
|
dim_size *= dims[i];
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user