File abstractfield.h
File List > code_source > templat > include > TempLat > lattice > field > abstractfield.h
Go to the documentation of this file
#ifndef TEMPLAT_LATTICE_FIELD_ABSTRACTFIELD_H
#define TEMPLAT_LATTICE_FIELD_ABSTRACTFIELD_H
/* This file is part of TempLat, available at https://cosmolattice.github.io/templat .
Copyright 2021-2026 The TempLat authors, see AUTHORS.md.
Released under the MIT license, see LICENSE.md. */
// File info: Main contributor(s): Adrien Florio, Franz R. Sattler, Year: 2025
#include "TempLat/lattice/algebra/spacestateinterface.h"
#include "TempLat/lattice/latticeparameters.h"
#include "TempLat/lattice/memory/memorylayoutstate.h"
#include "TempLat/lattice/memory/memorymanager.h"
#include "TempLat/lattice/memory/memorytoolbox.h"
#include "TempLat/lattice/algebra/helpers/getderiv.h"
namespace TempLat
{
MakeException(FieldValueGetterException);
enum CANONICALTYPE { AMPLITUDE, MOMENTUM };
template <typename T, size_t _NDim> class AbstractField
{
public:
// Put public methods here. These should change very little over time.
static constexpr size_t NDim = _NDim;
AbstractField(std::string name, device::memory::host_ptr<MemoryToolBox<NDim>> toolBox, LatticeParameters<T> pLatPar)
: mToolBox(toolBox), mManager(mToolBox, name), latPar(pLatPar)
{
}
inline void confirmSpace(const LayoutStruct<NDim> &newLayout, const SpaceStateType &spaceType) const
{
switch (spaceType) {
case SpaceStateType::Fourier:
mManager->confirmFourierSpace();
break;
case SpaceStateType::Configuration:
default:
mManager->confirmConfigSpace();
break;
}
}
device::memory::host_ptr<MemoryToolBox<NDim>> getToolBox() const { return mToolBox; }
device::Idx confirmGhostsUpToDate() const { return this->mManager->confirmGhostsUpToDate(); }
// Mostly for testing purpose
bool isConfigSpace() const { return mManager->isConfigSpace(); }
bool isFourierSpace() const { return mManager->isFourierSpace(); }
void setGhostsAreStale() const { mManager->setGhostsAreStale(); }
bool areGhostsStale() const { return mManager->areGhostsStale(); }
device::memory::host_ptr<MemoryManager<T, NDim>> getMemoryManager() const { return mManager; }
auto getDx() const { return latPar.getDx(); }
auto getKIR() const { return latPar.getKIR(); }
auto getLatParams() const { return latPar; }
protected:
/* Put all member variables and private methods here. These may change arbitrarily. */
device::memory::host_ptr<MemoryToolBox<NDim>> mToolBox;
device::memory::host_ptr<MemoryManager<T, NDim>> mManager;
const LatticeParameters<T> latPar; // Information about the lattice (dx, kir...)
// Conceptually not amazing but really useful.
};
} // namespace TempLat
#endif