Go to the documentation of this file.
79 int writeCheckpoint(
const std::string &dataFilePath,
const bool append =
false)
const override
81 H5Eset_auto(H5E_DEFAULT, NULL, NULL);
85 if (append && H5Fis_hdf5(dataFilePath.c_str()) > 0) file = H5Fopen(dataFilePath.c_str(), H5F_ACC_RDWR, H5P_DEFAULT);
86 else file = H5Fcreate(dataFilePath.c_str(), H5F_ACC_TRUNC, H5P_DEFAULT, H5P_DEFAULT);
91 H5Gget_num_objs(file, &numObjects);
93 for (
int i = 0; i < int(numObjects); ++i)
95 if (H5Gget_objtype_by_idx(file, i) == H5G_GROUP)
99 const int groupNameMaxLength = 32;
100 char groupName[groupNameMaxLength];
101 H5Gget_objname_by_idx(file, i, groupName, groupNameMaxLength);
103 hid_t group = H5Gopen(file, groupName, H5P_DEFAULT);
104 hid_t attr = H5Aopen(group,
"cutoff", H5P_DEFAULT);
106 H5Aread(attr, H5T_NATIVE_FLOAT, &c);
112 Log::log << Log::LogLevel::Warning <<
"Found existing checkpoint at cutoff " + std::to_string(
cutoff) +
". Skipping checkpoint." << Log::endl;
118 std::string checkpointName =
"checkpoint_" + std::to_string(checkpointId);
121 hid_t group = H5Gcreate(file, checkpointName.c_str(), H5P_DEFAULT, H5P_DEFAULT, H5P_DEFAULT);
122 hsize_t attrSpaceSize[1] = { 1 };
123 const int attrSpaceDim = 1;
124 hid_t attrSpace = H5Screate_simple(attrSpaceDim, attrSpaceSize, NULL);
125 hid_t attr = H5Acreate(group,
"cutoff", H5T_NATIVE_FLOAT, attrSpace, H5P_DEFAULT, H5P_DEFAULT);
126 H5Awrite(attr, H5T_NATIVE_FLOAT, &
cutoff);
131 auto writeCheckpointDataset = [&group](
const std::string &identifier,
const int size,
const float *data)
133 const int dataSpaceDim = 1;
134 const hsize_t dataSpaceSize[1] = { (hsize_t)size };
135 hid_t dataSpace = H5Screate_simple(dataSpaceDim, dataSpaceSize, NULL);
136 hid_t dataset = H5Dcreate(group, identifier.c_str(), H5T_NATIVE_FLOAT, dataSpace, H5P_DEFAULT, H5P_DEFAULT, H5P_DEFAULT);
137 H5Dwrite(dataset, H5T_NATIVE_FLOAT, H5S_ALL, H5S_ALL, H5P_DEFAULT, data);
141 writeCheckpointDataset(
"cutoff", 1, &
cutoff);
159 bool readCheckpoint(
const std::string &dataFilePath,
const int checkpointId)
override
161 H5Eset_auto(H5E_DEFAULT, NULL, NULL);
164 hid_t file = H5Fopen(dataFilePath.c_str(), H5F_ACC_RDONLY, H5P_DEFAULT);
168 std::string checkpointName;
169 if (checkpointId >= 0) checkpointName =
"checkpoint_" + std::to_string(checkpointId);
173 H5Gget_num_objs(file, &numObjects);
174 for (
int i =
int(numObjects) - 1; i >= 0; --i)
176 if (H5Gget_objtype_by_idx(file, i) == H5G_GROUP)
178 checkpointName =
"checkpoint_" + std::to_string(i);
184 hid_t group = H5Gopen(file, checkpointName.c_str(), H5P_DEFAULT);
185 if (group < 0)
return false;
188 auto readDataset = [&group](
const std::string &name,
float *data)->
bool
190 hid_t dataset = H5Dopen(group, name.c_str(), H5P_DEFAULT);
191 if (dataset < 0)
return false;
192 H5Dread(dataset, H5T_NATIVE_FLOAT, H5S_ALL, H5S_ALL, H5P_DEFAULT, data);
196 if (!readDataset(
"cutoff", &
cutoff))
return false;
float normalization
Energy normalization factor.
Definition: SU2FrgCore.hpp:45
float & getValueRef(const int iterator, const SU2VertexTwoParticle::Symmetry symmetry) const
Directly access a vertex value via a linear iterator in the range [0,size).
Definition: SU2VertexTwoParticle.hpp:167
SU2VertexSingleParticle * vertexSingleParticle
Single-particle vertex data.
Definition: SU2EffectiveAction.hpp:232
SU2EffectiveAction(const float cutoff, const SpinModel &spinModel, const SU2FrgCore *core)
Construct a new effective action and initialize values at given cutoff for a given spin model.
Definition: SU2EffectiveAction.hpp:38
FrgCore implementation for SU(2) models.
Definition: SU2FrgCore.hpp:15
@ IOError
In/out error, raised when input or output routines fail.
Two-particle vertex implementation for SU(2) models.
float * _data
Vertex data.
Definition: SU2VertexSingleParticle.hpp:103
Descriptor object for exceptions.
Definition: Exception.hpp:17
int size
Size of the vertex per vertex channel (number of elements).
Definition: SU2VertexTwoParticle.hpp:634
Spin model representation.
Definition: SpinModel.hpp:19
Virtual implementation of a flowing effective action.
Definition: EffectiveAction.hpp:19
int size
Total number of vertex elements.
Definition: SU2VertexSingleParticle.hpp:102
bool readCheckpoint(const std::string &dataFilePath, const int checkpointId) override
Read checkpoint from file.
Definition: SU2EffectiveAction.hpp:159
float & getValueRef(const int iterator) const
Directly access a vertex value by reference via a linear iterator in the range [0,...
Definition: SU2VertexSingleParticle.hpp:60
Lattice iterator object.
Definition: Lattice.hpp:166
bool isDiverged() const override
Indicate whether the vertex has diverged to NaN.
Definition: SU2EffectiveAction.hpp:212
float * _dataDD
Density channel of the vertex.
Definition: SU2VertexTwoParticle.hpp:638
std::vector< std::pair< LatticeIterator, SpinInteraction > > interactions
List of two-spin interactions in the model. All interactions are between the lattice site pair (s1,...
Definition: SpinModel.hpp:38
Single-particle vertex implementation for SU(2) models.
float cutoff
Value of the RG cutoff.
Definition: EffectiveAction.hpp:59
Descriptor object for exceptions.
void expandIterator(int iterator, LatticeIterator &i1, float &s, float &t, float &u) const
Expand a linear iterator in the range [0,size) that iterates over all vertex entries.
Definition: SU2VertexTwoParticle.hpp:102
Two-particle vertex implementation for SU(2) models.
Definition: SU2VertexTwoParticle.hpp:41
SU2EffectiveAction()
Construct a new SU2EffectiveAction object.
Definition: SU2EffectiveAction.hpp:25
Single-particle vertex implementation for SU(2) models.
Definition: SU2VertexSingleParticle.hpp:17
Virtual implementation of a flowing effective action.
Implementation of a flowing effective action for SU(2) models.
Definition: SU2EffectiveAction.hpp:19
@ Density
Density-type vertex.
int writeCheckpoint(const std::string &dataFilePath, const bool append=false) const override
Write checkpoint file.
Definition: SU2EffectiveAction.hpp:79
~SU2EffectiveAction()
Destroy the SU2EffectiveAction object.
Definition: SU2EffectiveAction.hpp:65
FrgCore implementation for SU(2) models.
SU2VertexTwoParticle * vertexTwoParticle
Two-particle vertex data.
Definition: SU2EffectiveAction.hpp:233
float * _dataSS
Spin channel of the vertex.
Definition: SU2VertexTwoParticle.hpp:637