30#ifndef ILDG_CHECKPOINTER
31#define ILDG_CHECKPOINTER
42template <
class Implementation>
45 CheckpointerParameters Params;
49 typedef GaugeStatistics<Implementation> GaugeStats;
51 ILDGHmcCheckpointer(
const CheckpointerParameters &Params_) {
initialize(Params_); }
53 void initialize(
const CheckpointerParameters &Params_) {
57 int ieee32big = (Params.format == std::string(
"IEEE32BIG"));
58 int ieee64big = (Params.format == std::string(
"IEEE64BIG"));
60 if (!(ieee64big || ieee32big)) {
61 std::cout <<
GridLogError <<
"Unrecognized file format " << Params.format
64 <<
"Allowed: IEEE32BIG | IEEE64BIG"
69 if ( !((Params.group == std::string(
"su")) || (Params.group == std::string(
"sp"))) ) {
70 std::cout <<
GridLogError <<
"Unrecognized gauge group " << Params.group << std::endl;
71 std::cout <<
GridLogError <<
"Allowed: su | sp" << std::endl;
75 if ( Params.group == std::string(
"sp") &&
Nc%2!=0 ) {
77 std::cout <<
", Sp fields require even Nc" << std::endl;
86 void chooseIldgWriter( std::string format, std::string group,
bool reduced_matrix,
87 std::string lat_obj,
int traj,
88 ConfigurationBase<GaugeField> &SmartConfig) {
90 GridBase *grid = SmartConfig.
get_U(
false).Grid();
92 IldgWriter _IldgWriter(grid->
IsBoss());
93 _IldgWriter.open(lat_obj);
95 if(format==
"IEEE64BIG") {
96 if(group==
"su" && reduced_matrix) {
99 else if (group==
"su" && !reduced_matrix) {
102 else if (group==
"sp" && reduced_matrix) {
105 else if (group==
"sp" && !reduced_matrix) {
109 else if (format==
"IEEE32BIG") {
110 if(group==
"su" && reduced_matrix) {
113 else if (group==
"su" && !reduced_matrix) {
116 else if (group==
"sp" && reduced_matrix) {
119 else if (group==
"sp" && !reduced_matrix) {
129 ConfigurationBase<GaugeField> &SmartConfig,
131 GridParallelRNG &pRNG) {
132 if ((traj % Params.saveInterval) == 0) {
133 std::string config, rng, smr;
135 uint32_t nersc_csum,scidac_csuma,scidac_csumb;
138 <<
" checksum " << std::hex
142 << std::dec << std::endl;
144 chooseIldgWriter( Params.format, Params.group, Params.reduced_matrix, config, traj,
147 std::cout <<
GridLogMessage <<
"Written ILDG Configuration on " << config
148 <<
" checksum " << std::hex
152 << std::dec << std::endl;
154 if ( Params.saveSmeared ) {
155 chooseIldgWriter( Params.format, Params.group, Params.reduced_matrix, smr, traj,
158 std::cout <<
GridLogMessage <<
"Written ILDG Configuration on " << smr
159 <<
" checksum " << std::hex
163 << std::dec << std::endl;
170 GridParallelRNG &pRNG) {
171 std::string config, rng, smr;
176 uint32_t nersc_csum,scidac_csuma,scidac_csumb;
180 IldgReader _IldgReader;
181 _IldgReader.open(config);
183 if(Params.unique_su) {
184 _IldgReader.readConfiguration<GaugeStats,
true>(
U,
header);
186 else { _IldgReader.readConfiguration<GaugeStats,
false>(
U,
header); }
190 std::cout <<
GridLogMessage <<
"Read ILDG Configuration from " << config
191 <<
" checksum " << std::hex
195 << std::dec << std::endl;
#define INHERIT_GIMPL_TYPES(GImpl)
GridLogger GridLogError(1, "Error", GridLogColours, "RED")
GridLogger GridLogMessage(1, "Message", GridLogColours, "NORMAL")
#define NAMESPACE_BEGIN(A)
static INTERNAL_PRECISION U
virtual void TrajectoryComplete(int traj, typename Impl::Field &U, GridSerialRNG &sRNG, GridParallelRNG &pRNG)
virtual void CheckpointRestore(int traj, typename Impl::Field &U, GridSerialRNG &sRNG, GridParallelRNG &pRNG)=0
void build_filenames(int traj, CheckpointerParameters &Params, std::string &conf_file, std::string &smear_file, std::string &rng_file)
void check_filename(const std::string &filename)
virtual void initialize(const CheckpointerParameters &Params)=0
static void readRNG(GridSerialRNG &serial_rng, GridParallelRNG ¶llel_rng, std::string file, uint64_t offset, uint32_t &nersc_csum, uint32_t &scidac_csuma, uint32_t &scidac_csumb)
static void writeRNG(GridSerialRNG &serial_rng, GridParallelRNG ¶llel_rng, std::string file, uint64_t offset, uint32_t &nersc_csum, uint32_t &scidac_csuma, uint32_t &scidac_csumb)
virtual Field & get_U(bool smeared=false)=0