34 SymmInfo.setGroup(nGroup);
36 Isizes =
new int[SymmInfo.getNumberOfIrreps()];
37 storage =
new double*[SymmInfo.getNumberOfIrreps()];
39 for (
int cnt=0; cnt<SymmInfo.getNumberOfIrreps(); cnt++){
40 Isizes[cnt] = IrrepSizes[cnt];
41 if (Isizes[cnt]>0) storage[cnt] =
new double[Isizes[cnt]*(Isizes[cnt]+1)/2];
50 Isizes =
new int[SymmInfo.getNumberOfIrreps()];
51 storage =
new double*[SymmInfo.getNumberOfIrreps()];
53 for (
int cnt=0; cnt<SymmInfo.getNumberOfIrreps(); cnt++)
55 Isizes[cnt] = orig.
Isizes[cnt];
58 storage[cnt] =
new double[Isizes[cnt]*(Isizes[cnt]+1)/2];
59 memcpy(storage[cnt], orig.
storage[cnt],
sizeof(
double)*Isizes[cnt]*(Isizes[cnt]+1)/2);
66 for (
int cnt=0; cnt<SymmInfo.getNumberOfIrreps(); cnt++)
if (Isizes[cnt]>0)
delete [] storage[cnt];
74 if (i>j) storage[irrep][j + i*(i+1)/2] = val;
75 else storage[irrep][i + j*(j+1)/2] = val;
81 if (i>j)
return storage[irrep][j + i*(i+1)/2];
82 return storage[irrep][i + j*(j+1)/2];
89 hid_t file_id = H5Fcreate(name.c_str(), H5F_ACC_TRUNC, H5P_DEFAULT, H5P_DEFAULT);
92 hid_t group_id = H5Gcreate(file_id,
"/MetaData", H5P_DEFAULT, H5P_DEFAULT, H5P_DEFAULT);
95 hsize_t dimarray = SymmInfo.getNumberOfIrreps();
96 hid_t dataspace_id = H5Screate_simple(1, &dimarray, NULL);
97 hid_t dataset_id = H5Dcreate(group_id,
"IrrepSizes", H5T_STD_I32LE, dataspace_id, H5P_DEFAULT, H5P_DEFAULT, H5P_DEFAULT);
98 H5Dwrite(dataset_id, H5T_NATIVE_INT, H5S_ALL, H5S_ALL, H5P_DEFAULT, Isizes);
101 hid_t attribute_space_id1 = H5Screate(H5S_SCALAR);
102 hid_t attribute_id1 = H5Acreate(dataset_id,
"nGroup", H5T_STD_I32LE, attribute_space_id1, H5P_DEFAULT, H5P_DEFAULT);
103 int nGroup = SymmInfo.getGroupNumber();
104 H5Awrite(attribute_id1, H5T_NATIVE_INT, &nGroup);
106 hid_t attribute_space_id2 = H5Screate(H5S_SCALAR);
107 hid_t attribute_id2 = H5Acreate(dataset_id,
"nIrreps", H5T_STD_I32LE, attribute_space_id2, H5P_DEFAULT, H5P_DEFAULT);
108 int nIrreps = SymmInfo.getNumberOfIrreps();
109 H5Awrite(attribute_id2, H5T_NATIVE_INT, &nIrreps);
111 H5Aclose(attribute_id1);
112 H5Aclose(attribute_id2);
113 H5Sclose(attribute_space_id1);
114 H5Sclose(attribute_space_id2);
116 H5Dclose(dataset_id);
117 H5Sclose(dataspace_id);
122 for (
int cnt=0; cnt<SymmInfo.getNumberOfIrreps(); cnt++){
126 std::stringstream sstream;
127 sstream <<
"/TwoIndex" << cnt ;
128 hid_t group_id3 = H5Gcreate(file_id, sstream.str().c_str(), H5P_DEFAULT, H5P_DEFAULT, H5P_DEFAULT);
130 hsize_t dimarray3 = Isizes[cnt]*(Isizes[cnt]+1)/2;
131 hid_t dataspace_id3 = H5Screate_simple(1, &dimarray3, NULL);
132 hid_t dataset_id3 = H5Dcreate(group_id3,
"Matrix elements", H5T_IEEE_F64LE, dataspace_id3, H5P_DEFAULT, H5P_DEFAULT, H5P_DEFAULT);
133 H5Dwrite(dataset_id3, H5T_NATIVE_DOUBLE, H5S_ALL, H5S_ALL, H5P_DEFAULT, storage[cnt]);
135 H5Dclose(dataset_id3);
136 H5Sclose(dataspace_id3);
151 hid_t file_id = H5Fopen(name.c_str(), H5F_ACC_RDONLY, H5P_DEFAULT);
154 hid_t group_id = H5Gopen(file_id,
"/MetaData",H5P_DEFAULT);
157 hid_t dataset_id = H5Dopen(group_id,
"IrrepSizes", H5P_DEFAULT);
160 hid_t attribute_id1 = H5Aopen_by_name(group_id,
"IrrepSizes",
"nGroup", H5P_DEFAULT, H5P_DEFAULT);
162 H5Aread(attribute_id1, H5T_NATIVE_INT, &nGroup);
163 assert( nGroup==SymmInfo.getGroupNumber() );
165 hid_t attribute_id2 = H5Aopen_by_name(group_id,
"IrrepSizes",
"nIrreps", H5P_DEFAULT, H5P_DEFAULT);
167 H5Aread(attribute_id2, H5T_NATIVE_INT, &nIrreps);
168 assert( nIrreps==SymmInfo.getNumberOfIrreps() );
170 H5Aclose(attribute_id1);
171 H5Aclose(attribute_id2);
173 int * IsizesAgain =
new int[SymmInfo.getNumberOfIrreps()];
174 H5Dread(dataset_id, H5T_NATIVE_INT, H5S_ALL, H5S_ALL, H5P_DEFAULT, IsizesAgain);
175 for (
int cnt=0; cnt<SymmInfo.getNumberOfIrreps(); cnt++){
176 assert( IsizesAgain[cnt]==Isizes[cnt] );
178 delete [] IsizesAgain;
179 H5Dclose(dataset_id);
184 for (
int cnt=0; cnt<SymmInfo.getNumberOfIrreps(); cnt++){
188 std::stringstream sstream;
189 sstream <<
"/TwoIndex" << cnt ;
190 hid_t group_id3 = H5Gopen(file_id, sstream.str().c_str(), H5P_DEFAULT);
192 hid_t dataset_id3 = H5Dopen(group_id3,
"Matrix elements", H5P_DEFAULT);
193 H5Dread(dataset_id3, H5T_NATIVE_DOUBLE, H5S_ALL, H5S_ALL, H5P_DEFAULT, storage[cnt]);
194 H5Dclose(dataset_id3);
211 hid_t file_id = H5Fopen(name.c_str(), H5F_ACC_RDWR, H5P_DEFAULT);
213 hid_t group_id2 = H5Gcreate(file_id,
"TwoIndex", H5P_DEFAULT, H5P_DEFAULT, H5P_DEFAULT);
216 hid_t group_id = H5Gcreate(group_id2,
"MetaData", H5P_DEFAULT, H5P_DEFAULT, H5P_DEFAULT);
219 hsize_t dimarray = SymmInfo.getNumberOfIrreps();
220 hid_t dataspace_id = H5Screate_simple(1, &dimarray, NULL);
221 hid_t dataset_id = H5Dcreate(group_id,
"IrrepSizes", H5T_STD_I32LE, dataspace_id, H5P_DEFAULT, H5P_DEFAULT, H5P_DEFAULT);
222 H5Dwrite(dataset_id, H5T_NATIVE_INT, H5S_ALL, H5S_ALL, H5P_DEFAULT, Isizes);
225 hid_t attribute_space_id1 = H5Screate(H5S_SCALAR);
226 hid_t attribute_id1 = H5Acreate(dataset_id,
"nGroup", H5T_STD_I32LE, attribute_space_id1, H5P_DEFAULT, H5P_DEFAULT);
227 int nGroup = SymmInfo.getGroupNumber();
228 H5Awrite(attribute_id1, H5T_NATIVE_INT, &nGroup);
230 hid_t attribute_space_id2 = H5Screate(H5S_SCALAR);
231 hid_t attribute_id2 = H5Acreate(dataset_id,
"nIrreps", H5T_STD_I32LE, attribute_space_id2, H5P_DEFAULT, H5P_DEFAULT);
232 int nIrreps = SymmInfo.getNumberOfIrreps();
233 H5Awrite(attribute_id2, H5T_NATIVE_INT, &nIrreps);
235 H5Aclose(attribute_id1);
236 H5Aclose(attribute_id2);
237 H5Sclose(attribute_space_id1);
238 H5Sclose(attribute_space_id2);
240 H5Dclose(dataset_id);
241 H5Sclose(dataspace_id);
246 for (
int cnt=0; cnt<SymmInfo.getNumberOfIrreps(); cnt++){
250 std::stringstream sstream;
251 sstream <<
"TwoIndex" << cnt ;
252 hid_t group_id3 = H5Gcreate(group_id2, sstream.str().c_str(), H5P_DEFAULT, H5P_DEFAULT, H5P_DEFAULT);
254 hsize_t dimarray3 = Isizes[cnt]*(Isizes[cnt]+1)/2;
255 hid_t dataspace_id3 = H5Screate_simple(1, &dimarray3, NULL);
256 hid_t dataset_id3 = H5Dcreate(group_id3,
"Matrix elements", H5T_IEEE_F64LE, dataspace_id3, H5P_DEFAULT, H5P_DEFAULT, H5P_DEFAULT);
257 H5Dwrite(dataset_id3, H5T_NATIVE_DOUBLE, H5S_ALL, H5S_ALL, H5P_DEFAULT, storage[cnt]);
259 H5Dclose(dataset_id3);
260 H5Sclose(dataspace_id3);
277 hid_t file_id = H5Fopen(name.c_str(), H5F_ACC_RDONLY, H5P_DEFAULT);
280 hid_t group_id = H5Gopen(file_id,
"/TwoIndex/MetaData",H5P_DEFAULT);
283 hid_t dataset_id = H5Dopen(group_id,
"IrrepSizes", H5P_DEFAULT);
286 hid_t attribute_id1 = H5Aopen_by_name(group_id,
"IrrepSizes",
"nGroup", H5P_DEFAULT, H5P_DEFAULT);
288 H5Aread(attribute_id1, H5T_NATIVE_INT, &nGroup);
289 assert( nGroup==SymmInfo.getGroupNumber() );
291 hid_t attribute_id2 = H5Aopen_by_name(group_id,
"IrrepSizes",
"nIrreps", H5P_DEFAULT, H5P_DEFAULT);
293 H5Aread(attribute_id2, H5T_NATIVE_INT, &nIrreps);
294 assert( nIrreps==SymmInfo.getNumberOfIrreps() );
296 H5Aclose(attribute_id1);
297 H5Aclose(attribute_id2);
299 int * IsizesAgain =
new int[SymmInfo.getNumberOfIrreps()];
300 H5Dread(dataset_id, H5T_NATIVE_INT, H5S_ALL, H5S_ALL, H5P_DEFAULT, IsizesAgain);
301 for (
int cnt=0; cnt<SymmInfo.getNumberOfIrreps(); cnt++){
302 assert( IsizesAgain[cnt]==Isizes[cnt] );
304 delete [] IsizesAgain;
305 H5Dclose(dataset_id);
310 for (
int cnt=0; cnt<SymmInfo.getNumberOfIrreps(); cnt++){
314 std::stringstream sstream;
315 sstream <<
"/TwoIndex/TwoIndex" << cnt ;
316 hid_t group_id3 = H5Gopen(file_id, sstream.str().c_str(), H5P_DEFAULT);
318 hid_t dataset_id3 = H5Dopen(group_id3,
"Matrix elements", H5P_DEFAULT);
319 H5Dread(dataset_id3, H5T_NATIVE_DOUBLE, H5S_ALL, H5S_ALL, H5P_DEFAULT, storage[cnt]);
320 H5Dclose(dataset_id3);
333 for (
int cnt=0; cnt<SymmInfo.getNumberOfIrreps(); cnt++)
335 memset(storage[cnt], 0,
sizeof(
double)*(Isizes[cnt]*(Isizes[cnt]+1)/2));
void reset()
set everything to zero
virtual ~TwoIndex()
Destructor.
void read(const std::string name)
Load the TwoIndex object.
TwoIndex(const int nGroup, const int *IrrepSizes)
Constructor.
void read2(const std::string name)
void set(const int irrep, const int i, const int j, const double val)
Set an element.
double get(const int irrep, const int i, const int j) const
Get an element.
void save2(const std::string name) const
void save(const std::string name) const
Save the TwoIndex object.