QMCPACK
MagnetizationDensity Class Reference

Magnetization density estimator for non-collinear spin calculations. More...

+ Inheritance diagram for MagnetizationDensity:
+ Collaboration diagram for MagnetizationDensity:

Public Types

using Value = QMCTraits::ValueType
 
using FullPrecValue = QMCTraits::FullPrecValueType
 
using Real = RealAlias< Value >
 
using FullPrecReal = RealAlias< FullPrecValue >
 
using Grad = TinyVector< Value, OHMMS_DIM >
 
using Lattice = PtclOnLatticeTraits::ParticleLayout
 
using Position = QMCTraits::PosType
 
using Integrator = MagnetizationDensityInput::Integrator
 
- Public Types inherited from OperatorEstBase
using QMCT = QMCTraits
 
using FullPrecRealType = QMCT::FullPrecRealType
 
using MCPWalker = Walker< QMCTraits, PtclOnLatticeTraits >
 
using Data = std::vector< QMCT::RealType >
 

Public Member Functions

 MagnetizationDensity (MagnetizationDensityInput &&min, const Lattice &lattice)
 
 MagnetizationDensity (const MagnetizationDensity &magdens, DataLocality dl)
 
void startBlock (int steps) override
 
void accumulate (const RefVector< MCPWalker > &walkers, const RefVector< ParticleSet > &psets, const RefVector< TrialWaveFunction > &wfns, const RefVector< QMCHamiltonian > &hams, RandomBase< FullPrecReal > &rng) override
 
void collect (const RefVector< OperatorEstBase > &operator_estimators) override
 Reduce estimator result data from crowds to rank. More...
 
size_t getFullDataSize ()
 This returns the total size of data object required for this estimator. More...
 
std::unique_ptr< OperatorEstBasespawnCrowdClone () const override
 
void registerOperatorEstimator (hdf_archive &file) override
 
Value integrateMagnetizationDensity (const std::vector< Value > &fgrid) const
 This is a convenience function that handles ^{2} dx f(x). More...
 
- Public Member Functions inherited from OperatorEstBase
 OperatorEstBase (DataLocality dl)
 constructor More...
 
 OperatorEstBase (const OperatorEstBase &oth)
 Shallow copy constructor! This alows us to keep the default copy constructors for derived classes which is quite useful to the spawnCrowdClone design. More...
 
virtual ~OperatorEstBase ()=default
 virtual destructor More...
 
virtual void accumulate (const RefVector< MCPWalker > &walkers, const RefVector< ParticleSet > &psets, const RefVector< TrialWaveFunction > &wfns, const RefVector< QMCHamiltonian > &hams, RandomBase< FullPrecRealType > &rng)=0
 Accumulate whatever it is you are accumulating with respect to walkers. More...
 
virtual void normalize (QMCT::RealType invToWgt)
 
std::vector< QMCT::RealType > & get_data ()
 
void write (hdf_archive &file)
 Write to previously registered observable_helper hdf5 wrapper. More...
 
void zero ()
 zero data appropriately for the DataLocality More...
 
QMCT::FullPrecRealType get_walkers_weight () const
 Return the total walker weight for this block. More...
 
const std::string & get_my_name () const
 
virtual void registerListeners (QMCHamiltonian &ham_leader)
 Register 0-many listeners with a leading QMCHamiltonian instance i.e. More...
 
bool isListenerRequired ()
 
DataLocality get_data_locality () const
 

Static Public Attributes

static constexpr int DIM = QMCTraits::DIM
 

Private Member Functions

 MagnetizationDensity (const MagnetizationDensity &magdens)=default
 
void generateSpinIntegrand (ParticleSet &pset, TrialWaveFunction &wfn, const int iat, std::vector< Value > &sx, std::vector< Value > &sy, std::vector< Value > &sz)
 Generates the spin integrand (s')/Psi(s)* s | {} | s' for a specific electron iat. More...
 
Value integrateBySimpsonsRule (const std::vector< Value > &fgrid, Real gridDx) const
 Implementation of Simpson's 1/3 rule to integrate a function on a uniform grid. More...
 
void generateGrid (std::vector< Real > &sgrid) const
 Convenience function to generate a grid between 0 and 2pi, consistent with nsamples_ and integration method. More...
 
void generateUniformGrid (std::vector< Real > &sgrid, const Real start, const Real stop) const
 Generate a uniform grid between [start,stop] for numerical quadrature. More...
 
void generateRandomGrid (std::vector< Real > &sgrid, RandomBase< FullPrecReal > &rng, Real start, Real stop) const
 Generate random grid between [start,stop] for MC integration. More...
 
size_t computeBin (const Position &r, const unsigned int component) const
 For a given spatial position r and spin component s, this returns the bin for accumulating the observable. More...
 

Private Attributes

MagnetizationDensityInput input_
 
Integrator integrator_
 
Lattice lattice_
 
Position rcorner_
 
Position center_
 
TinyVector< int, DIMgrid_
 
TinyVector< int, DIMgdims_
 
size_t npoints_
 
int nsamples_
 

Friends

class testing::MagnetizationDensityTests
 

Additional Inherited Members

- Protected Attributes inherited from OperatorEstBase
DataLocality data_locality_
 locality for accumulation of estimator data. More...
 
std::string my_name_
 name of this object – only used for debugging and h5 output More...
 
QMCT::FullPrecRealType walkers_weight_
 
std::vector< ObservableHelperh5desc_
 
Data data_
 
bool requires_listener_ = false
 

Detailed Description

Magnetization density estimator for non-collinear spin calculations.

As documented in the manual, the following formula is computed:
{m}_c = d{X} |{({X})}|^2 {}d{r} ({r}-{{r}}_i)^{2} {ds'_i}{2} {( {r}_i s'_i )}{( {r}_i s_i )} s_i | {} | s'_i

The way that the above relates to the underlying data structure data_ is as follows. We grid space up and assign an index for each of the real space bins (identical to SpinDensityNew). To account for the fact that magnetization is vectorial, we triple the length of this array. If grid_i is the index of the real space gridpoint i, then the data is layed out like: [grid_0_x, grid_0_y, grid_0_z, grid_1_x, ..., grid_N_x, grid_N_y, grid_N_z]. This is also the way it is stored in HDF5.

Definition at line 42 of file MagnetizationDensity.h.

Member Typedef Documentation

◆ FullPrecReal

Definition at line 48 of file MagnetizationDensity.h.

◆ FullPrecValue

◆ Grad

Definition at line 49 of file MagnetizationDensity.h.

◆ Integrator

◆ Lattice

◆ Position

Definition at line 51 of file MagnetizationDensity.h.

◆ Real

using Real = RealAlias<Value>

Definition at line 47 of file MagnetizationDensity.h.

◆ Value

Definition at line 45 of file MagnetizationDensity.h.

Constructor & Destructor Documentation

◆ MagnetizationDensity() [1/3]

MagnetizationDensity ( MagnetizationDensityInput &&  min,
const Lattice lattice 
)

Definition at line 16 of file MagnetizationDensity.cpp.

References CrystalLattice< T, D >::Center, MagnetizationDensity::center_, MagnetizationDensityInput::DerivedParameters::corner, qmcplusplus::crowd, OperatorEstBase::data_, MagnetizationDensityInput::DerivedParameters::gdims, MagnetizationDensity::gdims_, MagnetizationDensityInput::get_integrator(), MagnetizationDensityInput::get_nsamples(), MagnetizationDensity::getFullDataSize(), MagnetizationDensityInput::DerivedParameters::grid, MagnetizationDensity::grid_, MagnetizationDensity::input_, MagnetizationDensity::integrator_, MagnetizationDensity::lattice_, OperatorEstBase::my_name_, MagnetizationDensityInput::DerivedParameters::npoints, MagnetizationDensity::npoints_, MagnetizationDensity::nsamples_, and MagnetizationDensity::rcorner_.

18 {
19  my_name_ = "MagnetizationDensity";
20  //Pull consistent corner, grids, etc., from already inititalized input.
21  //DerivedParameters does the sanity checks and consistent initialization of these variables.
22  MagnetizationDensityInput::DerivedParameters derived = minput.calculateDerivedParameters(lat);
23 
24  //If DerivedParameters does its job, these are all correct, so we pull them and keep them in the class.
25  npoints_ = derived.npoints;
26  grid_ = derived.grid;
27  gdims_ = derived.gdims;
28 
29  rcorner_ = derived.corner;
31 
34 
35  //Resize the data arrays.
36  data_.resize(getFullDataSize(), 0);
37 }
SingleParticlePos Center
Center of the cell sum(Rv[i])/2.
OperatorEstBase(DataLocality dl)
constructor
size_t getFullDataSize()
This returns the total size of data object required for this estimator.
std::string my_name_
name of this object – only used for debugging and h5 output

◆ MagnetizationDensity() [2/3]

Definition at line 39 of file MagnetizationDensity.cpp.

References OperatorEstBase::data_locality_, and OperatorEstBase::my_name_.

40  : MagnetizationDensity(magdens)
41 {
42  my_name_ = "MagnetizationDensity";
43  data_locality_ = dl;
44 }
MagnetizationDensity(MagnetizationDensityInput &&min, const Lattice &lattice)
DataLocality data_locality_
locality for accumulation of estimator data.
std::string my_name_
name of this object – only used for debugging and h5 output

◆ MagnetizationDensity() [3/3]

MagnetizationDensity ( const MagnetizationDensity magdens)
privatedefault

Member Function Documentation

◆ accumulate()

void accumulate ( const RefVector< MCPWalker > &  walkers,
const RefVector< ParticleSet > &  psets,
const RefVector< TrialWaveFunction > &  wfns,
const RefVector< QMCHamiltonian > &  hams,
RandomBase< FullPrecReal > &  rng 
)
override

Definition at line 49 of file MagnetizationDensity.cpp.

References MagnetizationDensity::computeBin(), OperatorEstBase::data_, MagnetizationDensity::generateSpinIntegrand(), MagnetizationDensity::integrateMagnetizationDensity(), MagnetizationDensity::nsamples_, qmcplusplus::pset, qmcplusplus::walker, qmcplusplus::hdf::walkers, and OperatorEstBase::walkers_weight_.

54 {
55  for (int iw = 0; iw < walkers.size(); ++iw)
56  {
57  MCPWalker& walker = walkers[iw];
58  ParticleSet& pset = psets[iw];
59  TrialWaveFunction& wfn = wfns[iw];
60 
61  QMCT::RealType weight = walker.Weight;
62  std::vector<Value> sxgrid(nsamples_, 0.0);
63  std::vector<Value> sygrid(nsamples_, 0.0);
64  std::vector<Value> szgrid(nsamples_, 0.0);
65 
66  //Temporary variables to hold the integrated sx, sy, sz estimates.
67  //These are overwritten as needed in the loop over particles.
68  Value sx(0.0);
69  Value sy(0.0);
70  Value sz(0.0);
71 
72  const int np = pset.getTotalNum();
73  assert(weight >= 0);
74 
75  walkers_weight_ += weight;
76  for (int p = 0; p < np; ++p)
77  {
78  size_t sxindex = computeBin(pset.R[p], 0);
79  generateSpinIntegrand(pset, wfn, p, sxgrid, sygrid, szgrid);
80  sx = integrateMagnetizationDensity(sxgrid);
81  sy = integrateMagnetizationDensity(sygrid);
82  sz = integrateMagnetizationDensity(szgrid);
83 
84  data_[sxindex] += std::real(sx * weight);
85  data_[sxindex + 1] += std::real(sy * weight);
86  data_[sxindex + 2] += std::real(sz * weight);
87  }
88  }
89 };
QMCTraits::RealType real
size_t computeBin(const Position &r, const unsigned int component) const
For a given spatial position r and spin component s, this returns the bin for accumulating the observ...
QTBase::RealType RealType
Definition: Configuration.h:58
void generateSpinIntegrand(ParticleSet &pset, TrialWaveFunction &wfn, const int iat, std::vector< Value > &sx, std::vector< Value > &sy, std::vector< Value > &sz)
Generates the spin integrand (s&#39;)/Psi(s)* s | {} | s&#39; for a specific electron iat.
const char walkers[]
Definition: HDFVersion.h:36
Value integrateMagnetizationDensity(const std::vector< Value > &fgrid) const
This is a convenience function that handles ^{2} dx f(x).
QMCT::FullPrecRealType walkers_weight_
Walker< QMCTraits, PtclOnLatticeTraits > MCPWalker

◆ collect()

void collect ( const RefVector< OperatorEstBase > &  oebs)
overridevirtual

Reduce estimator result data from crowds to rank.

This is assumed to be called from only from one thread per crowds->rank reduction. Implied is this is during a global sync or there is a guarantee that the crowd operator estimators accumulation data is not being written to.

There could be concurrent operations inside the scope of the collect call.

Reimplemented from OperatorEstBase.

Definition at line 91 of file MagnetizationDensity.cpp.

References OperatorEstBase::collect(), qmcplusplus::crowd, and OperatorEstBase::data_locality_.

92 {
94  {
95  OperatorEstBase::collect(type_erased_operator_estimators);
96  }
97  else
98  {
99  throw std::runtime_error("You cannot call collect on MagnetizationDensity with this DataLocality");
100  }
101 }
DataLocality data_locality_
locality for accumulation of estimator data.
virtual void collect(const RefVector< OperatorEstBase > &oebs)
Reduce estimator result data from crowds to rank.

◆ computeBin()

size_t computeBin ( const Position r,
const unsigned int  component 
) const
private

For a given spatial position r and spin component s, this returns the bin for accumulating the observable.

Parameters
[in]Positionin real space. 3D
[in]component,thex=0,y=1,z=2 component of the spin.
Returns
Index of appropriate bin for this position and spin component

Definition at line 103 of file MagnetizationDensity.cpp.

References QMCTraits::DIM, MagnetizationDensity::DIM, qmcplusplus::floor(), MagnetizationDensity::gdims_, MagnetizationDensity::grid_, MagnetizationDensity::lattice_, MagnetizationDensity::rcorner_, and CrystalLattice< T, D >::toUnit().

Referenced by MagnetizationDensity::accumulate(), and MagnetizationDensityTests::computeBinAccessor().

104 {
105  assert(component < QMCT::DIM);
107  size_t point = 0; //This establishes the real space grid point.
108  for (int d = 0; d < QMCT::DIM; ++d)
109  point += gdims_[d] * ((int)(grid_[d] * (u[d] - std::floor(u[d])))); //periodic only
110 
111  //We now have the real space grid point. For each grid point, we store sx[point],sy[point],sz[point].
112  //Thus, the actual position in array is DIM*point+component.
113  return DIM * point + component;
114 }
QTBase::PosType PosType
Definition: Configuration.h:61
SingleParticlePos toUnit(const TinyVector< T1, D > &r) const
Convert a cartesian vector to a unit vector.
MakeReturn< UnaryNode< FnFloor, typename CreateLeaf< Vector< T1, C1 > >::Leaf_t > >::Expression_t floor(const Vector< T1, C1 > &l)

◆ generateGrid()

void generateGrid ( std::vector< Real > &  sgrid) const
private

Convenience function to generate a grid between 0 and 2pi, consistent with nsamples_ and integration method.

Can be uniform or random, depending on choice of integrator.

Parameters
[out]sgridA grid with nsamples_ points between 0 and 2pi. Overwritten.

Definition at line 174 of file MagnetizationDensity.cpp.

References MagnetizationDensity::generateUniformGrid(), MagnetizationDensity::integrator_, MagnetizationDensityInput::MONTECARLO, MagnetizationDensity::nsamples_, and MagnetizationDensityInput::SIMPSONS.

Referenced by MagnetizationDensity::generateSpinIntegrand().

175 {
176  sgrid.resize(nsamples_);
177  Real start = 0.0;
178  Real stop = 2 * M_PI;
179 
180  switch (integrator_)
181  {
183  generateUniformGrid(sgrid, start, stop);
184  break;
186  throw std::runtime_error("Monte Carlo sampling not implemented yet");
187  break;
188  }
189 }
void generateUniformGrid(std::vector< Real > &sgrid, const Real start, const Real stop) const
Generate a uniform grid between [start,stop] for numerical quadrature.

◆ generateRandomGrid()

void generateRandomGrid ( std::vector< Real > &  sgrid,
RandomBase< FullPrecReal > &  rng,
Real  start,
Real  stop 
) const
private

Generate random grid between [start,stop] for MC integration.

Template Parameters
RAN_GENRandom number generator type.
Parameters
[out]sgridRandom number grid between "start" and "stop". Number of points taken from size of sgrid.
[in]rngRandom number generator queried to generate random points.
[in]startstart of grid interval
[in]stopend of grid interval

Definition at line 244 of file MagnetizationDensity.cpp.

Referenced by MagnetizationDensityTests::testGrids().

248 {
249  size_t npoints = sgrid.size();
250  for (int i = 0; i < npoints; i++)
251  sgrid[i] = (stop - start) * rng();
252 }

◆ generateSpinIntegrand()

void generateSpinIntegrand ( ParticleSet pset,
TrialWaveFunction wfn,
const int  iat,
std::vector< Value > &  sx,
std::vector< Value > &  sy,
std::vector< Value > &  sz 
)
private

Generates the spin integrand (s')/Psi(s)* s | {} | s' for a specific electron iat.

Since this is a vectorial quantity, this function returns sx, sy, and sz in their own arrays.

Parameters
[in]psetParticleSet
[in]wfnTrialWaveFunction
[in]iatelectron index
[out]sxx component of spin integrand
[out]syy component of spin integrand
[out]szz component of spin integrand

Definition at line 136 of file MagnetizationDensity.cpp.

References qmcplusplus::cos(), TrialWaveFunction::evaluateRatios(), MagnetizationDensity::generateGrid(), MagnetizationDensity::nsamples_, qmcplusplus::pset_target, and qmcplusplus::sin().

Referenced by MagnetizationDensity::accumulate().

143 {
144  std::vector<Real> sgrid(nsamples_);
145  std::vector<Real> ds(nsamples_, 0.0);
146  std::vector<Value> ratios(nsamples_, 0);
147  generateGrid(sgrid);
148  for (int samp = 0; samp < nsamples_; samp++)
149  ds[samp] = sgrid[samp] - pset_target.spins[iat];
150 
151  VirtualParticleSet vp(pset_target, nsamples_);
152  std::vector<Position> dV(nsamples_, 0);
153  vp.makeMovesWithSpin(pset_target, iat, dV, ds);
154  psi_target.evaluateRatios(vp, ratios);
155 
156  const std::complex<Real> eye(0, 1.0);
157 
158  for (int samp = 0; samp < nsamples_; samp++)
159  {
160  sxgrid[samp] = std::real(Real(2.0) * Real(std::cos(sgrid[samp] + pset_target.spins[iat])) * ratios[samp]);
161  sygrid[samp] = std::real(Real(2.0) * Real(std::sin(sgrid[samp] + pset_target.spins[iat])) * ratios[samp]);
162  szgrid[samp] = std::real(Real(-2.0) * eye * std::sin(ds[samp]) * ratios[samp]);
163  }
164 }
QMCTraits::RealType real
MakeReturn< UnaryNode< FnSin, typename CreateLeaf< Vector< T1, C1 > >::Leaf_t > >::Expression_t sin(const Vector< T1, C1 > &l)
MakeReturn< UnaryNode< FnCos, typename CreateLeaf< Vector< T1, C1 > >::Leaf_t > >::Expression_t cos(const Vector< T1, C1 > &l)
void generateGrid(std::vector< Real > &sgrid) const
Convenience function to generate a grid between 0 and 2pi, consistent with nsamples_ and integration ...

◆ generateUniformGrid()

void generateUniformGrid ( std::vector< Real > &  sgrid,
const Real  start,
const Real  stop 
) const
private

Generate a uniform grid between [start,stop] for numerical quadrature.

Parameters
[out]sgridRandom number grid between "start" and "stop". Number of points taken from size of sgrid.
[in]startstart of grid interval
[in]stopend of grid interval

Definition at line 166 of file MagnetizationDensity.cpp.

Referenced by MagnetizationDensity::generateGrid(), and MagnetizationDensityTests::testGrids().

167 {
168  size_t num_gridpoints = sgrid.size();
169  Real delta = (stop - start) / (num_gridpoints - 1.0);
170  for (int i = 0; i < num_gridpoints; i++)
171  sgrid[i] = start + i * delta;
172 }

◆ getFullDataSize()

size_t getFullDataSize ( )

This returns the total size of data object required for this estimator.

Right now, it's 3*number_of_realspace_gridpoints

Returns
Size of data.

Definition at line 47 of file MagnetizationDensity.cpp.

References MagnetizationDensity::DIM, and MagnetizationDensity::npoints_.

Referenced by MagnetizationDensity::MagnetizationDensity(), and MagnetizationDensity::registerOperatorEstimator().

◆ integrateBySimpsonsRule()

MagnetizationDensity::Value integrateBySimpsonsRule ( const std::vector< Value > &  fgrid,
Real  gridDx 
) const
private

Implementation of Simpson's 1/3 rule to integrate a function on a uniform grid.

Parameters
[in]fgridf(x), the function to integrate.
[in]gridDx,thegrid spacing for the uniform grid. Assumed to be consistent with size of fgrid.
Returns
Value of integral.

Definition at line 203 of file MagnetizationDensity.cpp.

Referenced by MagnetizationDensity::integrateMagnetizationDensity(), and MagnetizationDensityTests::testIntegrationFunctions().

205 {
206  Value sint(0.0);
207  int gridsize = fgrid.size();
208  for (int is = 1; is < gridsize - 1; is += 2)
209  sint += Real(4. / 3.) * gridDx * fgrid[is];
210 
211  for (int is = 2; is < gridsize - 1; is += 2)
212  sint += Real(2. / 3.) * gridDx * fgrid[is];
213 
214  sint += Real(1. / 3.) * gridDx * fgrid[0];
215  sint += Real(1. / 3.) * gridDx * fgrid[gridsize - 1];
216 
217  return sint;
218 }

◆ integrateMagnetizationDensity()

MagnetizationDensity::Value integrateMagnetizationDensity ( const std::vector< Value > &  fgrid) const

This is a convenience function that handles ^{2} dx f(x).

There are two provided methods for integrating this, so this function picks Simpson's or Monte Carlo to perform this integration, while keeping awareness of the integration interval and number of samples.

Template Parameters
Valuetype. Real or complex in double or single precision. Return type is same as fgrid type.
Parameters
[in]fgridf(x), the function to integrate. Assumed to be on a [0-2pi] interval, and if the grid isn't random, it's assumed to be uniform.
Returns
Value of integral.

Definition at line 220 of file MagnetizationDensity.cpp.

References MagnetizationDensity::integrateBySimpsonsRule(), MagnetizationDensity::integrator_, MagnetizationDensityInput::MONTECARLO, MagnetizationDensity::nsamples_, and MagnetizationDensityInput::SIMPSONS.

Referenced by MagnetizationDensity::accumulate().

221 {
222  Real start = 0.0;
223  Real stop = 2 * M_PI;
224  Real deltax = (stop - start) / (nsamples_ - 1.0);
225  Value val = 0.0;
226  switch (integrator_)
227  {
229  //There's a normalizing 2pi factor in this integral. Take care of it here.
230  val = integrateBySimpsonsRule(fgrid, deltax) / Real(2.0 * M_PI);
231 
232  break;
234  //Integrand has form that can be monte carlo sampled. This means the 2*PI
235  //is taken care of if the integrand is uniformly sampled between [0,2PI),
236  //which it is. The following is just an average.
237  val = std::accumulate(fgrid.begin(), fgrid.end(), Value(0));
238  val /= Real(nsamples_);
239  break;
240  }
241  return val;
242 }
Value integrateBySimpsonsRule(const std::vector< Value > &fgrid, Real gridDx) const
Implementation of Simpson&#39;s 1/3 rule to integrate a function on a uniform grid.

◆ registerOperatorEstimator()

void registerOperatorEstimator ( hdf_archive file)
overridevirtual

Reimplemented from OperatorEstBase.

Definition at line 191 of file MagnetizationDensity.cpp.

References MagnetizationDensity::getFullDataSize(), OperatorEstBase::h5desc_, OperatorEstBase::my_name_, qmcplusplus::oh, and ObservableHelper::set_dimensions().

192 {
193  std::vector<size_t> my_indexes;
194 
195  std::vector<int> ng(1, getFullDataSize());
196 
197  hdf_path hdf_name{my_name_};
198  h5desc_.emplace_back(hdf_name);
199  auto& oh = h5desc_.back();
200  oh.set_dimensions(ng, 0);
201 }
std::vector< ObservableHelper > h5desc_
size_t getFullDataSize()
This returns the total size of data object required for this estimator.
void set_dimensions(const std::vector< int > &dims, int first)
set the shape of this observable
ObservableHelper oh
std::string my_name_
name of this object – only used for debugging and h5 output

◆ spawnCrowdClone()

std::unique_ptr< OperatorEstBase > spawnCrowdClone ( ) const
overridevirtual

Implements OperatorEstBase.

Definition at line 116 of file MagnetizationDensity.cpp.

References OperatorEstBase::data_, OperatorEstBase::data_locality_, qmcplusplus::queue, and qmcplusplus::rank.

117 {
118  std::size_t data_size = data_.size();
119  auto spawn_data_locality = data_locality_;
120 
121  //Everyone else has this attempt to set up a non-implemented memory saving optimization.
122  //We won't rock the boat.
124  {
125  // This is just a stub until a memory saving optimization is deemed necessary
126  spawn_data_locality = DataLocality::queue;
127  data_size = 0;
128  throw std::runtime_error("There is no memory savings implementation for MagnetizationDensity");
129  }
130 
131  UPtr<MagnetizationDensity> spawn(std::make_unique<MagnetizationDensity>(*this, spawn_data_locality));
132  spawn->get_data().resize(data_size);
133  return spawn;
134 };
DataLocality data_locality_
locality for accumulation of estimator data.

◆ startBlock()

void startBlock ( int  steps)
overridevirtual

Implements OperatorEstBase.

Definition at line 45 of file MagnetizationDensity.cpp.

45 {};

Friends And Related Function Documentation

◆ testing::MagnetizationDensityTests

Definition at line 172 of file MagnetizationDensity.h.

Member Data Documentation

◆ center_

◆ DIM

constexpr int DIM = QMCTraits::DIM
static

◆ gdims_

◆ grid_

◆ input_

MagnetizationDensityInput input_
private

Definition at line 161 of file MagnetizationDensity.h.

Referenced by MagnetizationDensity::MagnetizationDensity().

◆ integrator_

◆ lattice_

◆ npoints_

size_t npoints_
private

◆ nsamples_

◆ rcorner_


The documentation for this class was generated from the following files: