SpinParser  1.0
Public Types | Public Member Functions | Public Attributes | List of all members
XYZVertexTwoParticle Struct Reference

Two-particle vertex implementation for models with diagonal interactions. More...

#include <XYZVertexTwoParticle.hpp>

Public Types

enum  FrequencyChannel {
  FrequencyChannel::S, FrequencyChannel::T, FrequencyChannel::U, FrequencyChannel::All,
  FrequencyChannel::None
}
 Indicator for frequency channels that exactly lie on frequency mesh points.
More...
 

Public Member Functions

 XYZVertexTwoParticle ()
 Construct a new XYZVertexTwoParticle object and initialize all entries to zero. More...
 
 ~XYZVertexTwoParticle ()
 Destroy the XYZVertexTwoParticle object.
 
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. More...
 
void expandIterator (int iterator, float &s, float &t, float &u) const
 Expand a linear iterator in the range [0,sizeFrequency) that iterates over all paramtetrized frequency values. More...
 
float & getValueRef (const int iterator, const SpinComponent symmetry) const
 Directly access a vertex value via a linear iterator in the range [0,size). More...
 
float getValue (LatticeIterator i1, LatticeIterator i2, float s, float t, float u, SpinComponent symmetry, const XYZVertexTwoParticle::FrequencyChannel channel) const
 Access vertex value at arbitrary lattice sites, frequencies, and symmetry. More...
 
template<int n>
float getValue (const LatticeIterator i1, const LatticeIterator i2, SpinComponent symmetry, const XYZVertexTwoParticleAccessBuffer< n > &accessBuffer) const
 Access vertex value at arbitrary lattice sites and symmetry via a given access buffer. More...
 
template<int n>
float getValueLocal (const SpinComponent symmetry, const XYZVertexTwoParticleAccessBuffer< n > &accessBuffer) const
 Access vertex value locally at arbitrary symmetry via a given access buffer. More...
 
template<int n>
void getValueSuperbundle (const XYZVertexTwoParticleAccessBuffer< n > &accessBuffer, ValueSuperbundle< float, 4 > &superbundle) const
 Bundled vertex access on all lattice sites and symmetries simultaneously via a given access buffer. More...
 
XYZVertexTwoParticleAccessBuffer< 4 > generateAccessBuffer (float s, float t, float u, const XYZVertexTwoParticle::FrequencyChannel channel) const
 Generate an access buffer for a set of frequencies where one of them (specified by channel) exactly lies on the frequency mesh. Frequency channel must be either FrequencyChannel::S, FrequencyChannel::T, FrequencyChannel::U. More...
 
XYZVertexTwoParticleAccessBuffer< 8 > generateAccessBuffer (float s, float t, float u) const
 Generate an access buffer for an arbitrary set of frequencies.
More...
 
float _directAccessMapFrequencyExchange (const int siteOffset, const int sOffset, const int tOffset, const int uOffset, const SpinComponent symmetry) const
 Directly access a vertex via given frequency and site offsets, where sOffset may be lesser than uOffset. More...
 
float _directAccess (const int siteOffset, const int sOffset, const int tOffset, const int uOffset, const SpinComponent symmetry) const
 Directly access a vertex via given frequency and site offsets, where sOffset >= uOffset. More...
 
int _generateAccessBufferOffset (const int sOffset, const int tOffset, const int uOffset, int &signFlag) const
 Calculate the total memory offset (number of elements) from given frequency offsets, where sOffset may be lesser than uOffset. More...
 

Public Attributes

int size
 Size of the vertex per vertex channel (number of elements).
 
int sizeFrequency
 Size of the vertex per vertex channel in the frequency subspace (number of elements).
 
float * _dataXX
 Spin-X channel of the vertex.
 
float * _dataYY
 Spin-Y channel of the vertex.
 
float * _dataZZ
 Spin-Z channel of the vertex.
 
float * _dataDD
 Density channel of the vertex.
 
int _memoryStepLatticeT
 Memory stride width in the last-2 dimension.
 
int _memoryStepLattice
 Memory stride width in the last-1 dimension.
 

Detailed Description

Two-particle vertex implementation for models with diagonal interactions.

Member Enumeration Documentation

◆ FrequencyChannel

Indicator for frequency channels that exactly lie on frequency mesh points.

Enumerator

s-channel.

t-channel.

u-channel.

All 

All channels.

None 

No channel.

Constructor & Destructor Documentation

◆ XYZVertexTwoParticle()

XYZVertexTwoParticle::XYZVertexTwoParticle ( )
inline

Construct a new XYZVertexTwoParticle object and initialize all entries to zero.

Member Function Documentation

◆ _directAccess()

float XYZVertexTwoParticle::_directAccess ( const int  siteOffset,
const int  sOffset,
const int  tOffset,
const int  uOffset,
const SpinComponent  symmetry 
) const
inline

Directly access a vertex via given frequency and site offsets, where sOffset >= uOffset.

Parameters
siteOffsetLattice site offset (number of elements).
sOffsetFirst frequency offset (number of elements).
tOffsetSecond frequency offset (number of elements).
uOffsetThird frequency offset (number of elements).
symmetryVertex channel.
Returns
float Vertex value.

◆ _directAccessMapFrequencyExchange()

float XYZVertexTwoParticle::_directAccessMapFrequencyExchange ( const int  siteOffset,
const int  sOffset,
const int  tOffset,
const int  uOffset,
const SpinComponent  symmetry 
) const
inline

Directly access a vertex via given frequency and site offsets, where sOffset may be lesser than uOffset.

Parameters
siteOffsetLattice site offset (number of elements).
sOffsetFirst frequency offset (number of elements).
tOffsetSecond frequency offset (number of elements).
uOffsetThird frequency offset (number of elements).
symmetryVertex channel.
Returns
float Vertex value.

◆ _generateAccessBufferOffset()

int XYZVertexTwoParticle::_generateAccessBufferOffset ( const int  sOffset,
const int  tOffset,
const int  uOffset,
int &  signFlag 
) const
inline

Calculate the total memory offset (number of elements) from given frequency offsets, where sOffset may be lesser than uOffset.

Parameters
[in]sOffsetFirst frequency offset (number of elements).
[in]tOffsetSecond frequency offset (number of elements).
[in]uOffsetThird frequency offset (number of elements).
[out]signFlagSign flag to be stored in the access buffer.
Returns
int Memory offset (number of elements).

◆ expandIterator() [1/2]

void XYZVertexTwoParticle::expandIterator ( int  iterator,
float &  s,
float &  t,
float &  u 
) const
inline

Expand a linear iterator in the range [0,sizeFrequency) that iterates over all paramtetrized frequency values.

Parameters
[in]iteratorLinear iterator.
[out]sFirst frequency argument.
[out]tSecond frequency argument.
[out]uThird frequency argument.

◆ expandIterator() [2/2]

void XYZVertexTwoParticle::expandIterator ( int  iterator,
LatticeIterator i1,
float &  s,
float &  t,
float &  u 
) const
inline

Expand a linear iterator in the range [0,size) that iterates over all vertex entries.

Parameters
[in]iteratorLinear iterator.
[out]i1Lattice site iterator.
[out]sFirst frequency argument.
[out]tSecond frequency argument.
[out]uThird frequency argument.

◆ generateAccessBuffer() [1/2]

XYZVertexTwoParticleAccessBuffer<8> XYZVertexTwoParticle::generateAccessBuffer ( float  s,
float  t,
float  u 
) const
inline

Generate an access buffer for an arbitrary set of frequencies.

Parameters
sFirst frequency argument.
tSecond frequency argument.
uThird frequency argument.
Returns
XYZVertexTwoParticleAccessBuffer<8> Access buffer.

◆ generateAccessBuffer() [2/2]

XYZVertexTwoParticleAccessBuffer<4> XYZVertexTwoParticle::generateAccessBuffer ( float  s,
float  t,
float  u,
const XYZVertexTwoParticle::FrequencyChannel  channel 
) const
inline

Generate an access buffer for a set of frequencies where one of them (specified by channel) exactly lies on the frequency mesh. Frequency channel must be either FrequencyChannel::S, FrequencyChannel::T, FrequencyChannel::U.

Parameters
sFirst frequency argument.
tSecond frequency argument.
uThird frequency argument.
channelFrequency channel.
Returns
XYZVertexTwoParticleAccessBuffer<4> Access buffer.

◆ getValue() [1/2]

template<int n>
float XYZVertexTwoParticle::getValue ( const LatticeIterator  i1,
const LatticeIterator  i2,
SpinComponent  symmetry,
const XYZVertexTwoParticleAccessBuffer< n > &  accessBuffer 
) const
inline

Access vertex value at arbitrary lattice sites and symmetry via a given access buffer.

Template Parameters
nNumber of support sites in the access buffer.
Parameters
i1First lattice site argument.
i2Second lattice site argument.
symmetryVertex channel.
accessBufferAccess buffer.
Returns
float Vertex value.

◆ getValue() [2/2]

float XYZVertexTwoParticle::getValue ( LatticeIterator  i1,
LatticeIterator  i2,
float  s,
float  t,
float  u,
SpinComponent  symmetry,
const XYZVertexTwoParticle::FrequencyChannel  channel 
) const
inline

Access vertex value at arbitrary lattice sites, frequencies, and symmetry.

Parameters
i1First lattice site argument.
i2Second lattice site argument.
sFirst frequency argument.
tSecond frequency argument.
uThird frequency argument.
symmetryVertex channel.
channelFrequency channel.
Returns
float Vertex value.

◆ getValueLocal()

template<int n>
float XYZVertexTwoParticle::getValueLocal ( const SpinComponent  symmetry,
const XYZVertexTwoParticleAccessBuffer< n > &  accessBuffer 
) const
inline

Access vertex value locally at arbitrary symmetry via a given access buffer.

Template Parameters
nNumber of support sites in the access buffer.
Parameters
symmetryVertex channel.
accessBufferAccess buffer.
Returns
float Vertex value.

◆ getValueRef()

float& XYZVertexTwoParticle::getValueRef ( const int  iterator,
const SpinComponent  symmetry 
) const
inline

Directly access a vertex value via a linear iterator in the range [0,size).

Parameters
iteratorLinear iterator.
symmetryVertex channel.
Returns
float& Vertex value.

◆ getValueSuperbundle()

template<int n>
void XYZVertexTwoParticle::getValueSuperbundle ( const XYZVertexTwoParticleAccessBuffer< n > &  accessBuffer,
ValueSuperbundle< float, 4 > &  superbundle 
) const
inline

Bundled vertex access on all lattice sites and symmetries simultaneously via a given access buffer.

Template Parameters
nNumber of support sites in the access buffer.
Parameters
[in]accessBufferAccess buffer.
[out]superbundleVertex value bundle.

The documentation for this struct was generated from the following file: