File scalefactormeasurer.h
File List > code_source > cosmolattice > include > CosmoInterface > measurements > scalefactormeasurer.h
Go to the documentation of this file
#ifndef COSMOINTERFACE_MEASUREMENTS_SCALEFACTORMEASURER_H
#define COSMOINTERFACE_MEASUREMENTS_SCALEFACTORMEASURER_H
/* This file is part of CosmoLattice, available at www.cosmolattice.net .
Copyright Daniel G. Figueroa, Adrien Florio, Francisco Torrenti and Wessel Valkenburg.
Released under the MIT license, see LICENSE.md. */
// File info: Main contributor(s): Daniel G. Figueroa, Adrien Florio, Francisco Torrenti, Year: 2021
#include "CosmoInterface/runparameters.h"
#include "CosmoInterface/measurements/measurementsIO/filesmanager.h"
#include "CosmoInterface/measurements/measurementsIO/measurementssaver.h"
#include "CosmoInterface/measurements/abstractmeasurer.h"
namespace TempLat
{
template <typename T> class ScaleFactorMeasurer : public AbstractMeasurer
{
public:
using AbstractMeasurer::lastMeas;
// Put public methods here. These should change very little over time.
template <typename Model>
ScaleFactorMeasurer(Model &model, FilesManager<Model::NDim> &filesManager, const RunParameters<T> &par, bool append)
: expansion(par.expansion),
scaleOut(filesManager, "scale_factor", model.getToolBox()->amIRoot(), append,
Model::IsNonMinimallyCoupled
?
std::vector<std::string>{"t", "a", "aDot", "H", "R"}
:
Model::DefectsModel
?
std::vector<std::string>{"t", "a", "aDot", "H", "resolutionPreservingFactor"}
:
std::vector<std::string>{"t", "a", "aDot", "H"},
!expansion) // Output file for scale factor and derivatives.
{
}
// Measures scale factor and time-derivatives
template <class Model> void measure(Model &model, T t)
{
if (expansion) {
scaleOut.addAverage(t); // Time
scaleOut.addAverage(model.aI); // Scale factor
scaleOut.addAverage(model.aDotI); // First time-derivative of the scale factor
scaleOut.addAverage(model.aDotI / model.aI); // Hubble parameter
if constexpr (Model::IsNonMinimallyCoupled) scaleOut.addAverage(model.RI);
if constexpr (Model::DefectsModel) scaleOut.addAverage(model.resolutionPreservingFactor);
}
scaleOut.save(lastMeas);
}
private:
/* Put all member variables and private methods here. These may change arbitrarily. */
const bool expansion;
MeasurementsSaver<T> scaleOut;
};
} // namespace TempLat
#endif