SpinParser  1.0
FrgCore.hpp
Go to the documentation of this file.
1 
9 #pragma once
10 #include <vector>
11 #include "EffectiveAction.hpp"
12 #include "Measurement.hpp"
13 #include "SpinModel.hpp"
14 #include "SpinParser.hpp"
15 
16 class SpinParser;
17 
29 class FrgCore
30 {
31  friend class SpinParser;
32 public:
36  void takeMeasurements() const
37  {
39  {
40  //perform deferred measurements
41  for (auto m : _measurements)
42  {
43  if (_flowingFunctional->cutoff <= m->maxCutoff() && _flowingFunctional->cutoff >= m->minCutoff())
44  {
45  if (SpinParser::spinParser()->getCommandLineOptions()->deferMeasurements() || m->isDeferred()) m->takeMeasurement(*_flowingFunctional, SpinParser::spinParser()->isMasterRank());
46  }
47  }
48  }
49  else
50  {
51  //perform non-deferred measurements
52  for (auto m : _measurements)
53  {
54  if (_flowingFunctional->cutoff <= m->maxCutoff() && _flowingFunctional->cutoff >= m->minCutoff())
55  {
56  if (!SpinParser::spinParser()->getCommandLineOptions()->deferMeasurements() && !m->isDeferred()) m->takeMeasurement(*_flowingFunctional, SpinParser::spinParser()->isMasterRank());
57  }
58  }
59 
60  //write vertex output, if deferred measurements are specified
61  bool postprocessingRequired = false;
62  if (SpinParser::spinParser()->getCommandLineOptions()->deferMeasurements()) postprocessingRequired = true;
63  for (auto m : _measurements) if (m->isDeferred()) postprocessingRequired = true;
64 
65 
66  if (postprocessingRequired && SpinParser::spinParser()->isMasterRank()) _flowingFunctional->writeCheckpoint(SpinParser::spinParser()->getFileset().dataFile, true);
67  }
68  }
69 
77  virtual void computeStep() = 0;
78 
86  virtual void finalizeStep(float newCutoff) = 0;
87 
94  {
95  return _flowingFunctional;
96  }
97 
104  {
105  return _flow;
106  }
107 
113  std::vector<Measurement *> measurements() const
114  {
115  return _measurements;
116  }
117 
118 protected:
125  FrgCore(const std::vector<Measurement *> &measurements) : _flowingFunctional(nullptr), _flow(nullptr), _measurements(measurements) {};
126 
130  virtual ~FrgCore()
131  {
132  while (_measurements.size() > 0)
133  {
134  delete _measurements.back();
135  _measurements.pop_back();
136  }
137  }
138 
141  std::vector<Measurement *> _measurements;
142 };
FrgCore::flowingFunctional
EffectiveAction * flowingFunctional() const
Retrieve the flowing functional.
Definition: FrgCore.hpp:93
FrgCore::~FrgCore
virtual ~FrgCore()
Destroy the FrgCore object and delete any associated measurement protocols.
Definition: FrgCore.hpp:130
FrgCore::measurements
std::vector< Measurement * > measurements() const
Retrieve the list of measurements.
Definition: FrgCore.hpp:113
FrgCore
Virtual implementation of a pf-FRG numerics core.
Definition: FrgCore.hpp:29
ComputationStatus::Identifier::Postprocessing
@ Postprocessing
Task has finished, but measurements remain to be performed.
SpinParser
Principal object and interface for the solution of pf-FRG flow equations.
Definition: SpinParser.hpp:57
SpinParser.hpp
Pf-FRG solver implementation.
FrgCore::_flow
EffectiveAction * _flow
Representation of the RG flow associated with the current state of the effective action.
Definition: FrgCore.hpp:140
SpinParser::spinParser
static SpinParser * spinParser()
Retrieve the SpinParser singleton.
Definition: SpinParser.cpp:21
Measurement.hpp
Abstract measurement protocol definition for pf-FRG calculations.
SpinParser::getComputationStatus
ComputationStatus getComputationStatus() const
Get the current computation status.
Definition: SpinParser.cpp:101
FrgCore::flow
EffectiveAction * flow() const
Retrieve the vertex flow.
Definition: FrgCore.hpp:103
FrgCore::_measurements
std::vector< Measurement * > _measurements
List of measurement protocols to invoke throughout the solution of the flow equations.
Definition: FrgCore.hpp:141
SpinParser::getCommandLineOptions
CommandLineOptions * getCommandLineOptions() const
Retrieve the internal command line parser.
Definition: SpinParser.cpp:111
FrgCore::computeStep
virtual void computeStep()=0
Virtual implementation of a single RG step in the solution of the flow equations.
EffectiveAction
Virtual implementation of a flowing effective action.
Definition: EffectiveAction.hpp:19
SpinModel.hpp
Representation of a spin model with two-spin interactions.
SpinParser::isMasterRank
bool isMasterRank() const
Query wheter the current instance is the MPI master rank.
Definition: SpinParser.cpp:96
FrgCore::_flowingFunctional
EffectiveAction * _flowingFunctional
Representation of the current state of the effective action.
Definition: FrgCore.hpp:139
FrgCore::FrgCore
FrgCore(const std::vector< Measurement * > &measurements)
Construct a new FrgCore, which takes ownership of the specified measurements.
Definition: FrgCore.hpp:125
EffectiveAction::writeCheckpoint
virtual int writeCheckpoint(const std::string &dataFilePath, const bool append=false) const =0
Write all internal data to a checkpoint at the specified file path and return the identifier of the c...
EffectiveAction::cutoff
float cutoff
Value of the RG cutoff.
Definition: EffectiveAction.hpp:59
SpinParser::getFileset
Fileset getFileset() const
Get file names of output files.
Definition: SpinParser.cpp:106
EffectiveAction.hpp
Virtual implementation of a flowing effective action.
FrgCore::finalizeStep
virtual void finalizeStep(float newCutoff)=0
Virtual implementation of the finalization of a single RG step in the solution of the flow equations.
FrgCore::takeMeasurements
void takeMeasurements() const
Invoke all associated measurement protocols.
Definition: FrgCore.hpp:36