1#ifndef PRDC_W_FIELDS_TMPL_H
2#define PRDC_W_FIELDS_TMPL_H
11#include <pscf/math/IntVec.h>
12#include <util/containers/DArray.h>
16 template <
typename T>
class Signal;
17 template <>
class Signal<void>;
91 template <
int D,
class RFT,
class FIT>
381 RFT
const &
rgrid(
int monomerId)
const;
498 FIT
const * fieldIoPtr_;
510 bool isAllocatedRGrid_;
515 bool isAllocatedBasis_;
536 virtual void assignRField(RFT& lhs, RFT
const & rhs)
const;
543 template <
int D,
class RField,
class FieldIo>
545 { hasData_ =
false; }
548 template <
int D,
class RFT,
class FIT>
558 template <
int D,
class RFT,
class FIT>
568 template <
int D,
class RFT,
class FIT>
578 template <
int D,
class RFT,
class FIT>
587 template <
int D,
class RFT,
class FIT>
590 {
return isAllocatedRGrid_; }
593 template <
int D,
class RFT,
class FIT>
596 {
return isAllocatedBasis_; }
599 template <
int D,
class RFT,
class FIT>
605 template <
int D,
class RFT,
class FIT>
608 {
return isSymmetric_; }
613 template <
int D,
class RFT,
class FIT>
617 {
return meshDimensions_; }
620 template <
int D,
class RFT,
class FIT>
623 {
return meshSize_; }
626 template <
int D,
class RFT,
class FIT>
632 template <
int D,
class RFT,
class FIT>
635 {
return nMonomer_; }
638 template <
int D,
class RFT,
class FIT>
An IntVec<D, T> is a D-component vector of elements of integer type T.
Base template for UnitCell<D> classes, D=1, 2 or 3.
IntVec< D > const & meshDimensions() const
Get mesh dimensions in each direction, set on r-grid allocation.
void setBasis(DArray< DArray< double > > const &fields)
Set field component values, in symmetrized Fourier format.
void symmetrize()
Symmetrize r-grid fields, compute corresponding basis components.
FieldIo< D > const & fieldIo() const
void writeRGrid(std::ostream &out) const
Writes fields to an input stream in real-space (r-grid) format.
void readBasis(std::istream &in)
Read fields from an input stream in symmetrized basis format.
void clear()
Clear data stored in this object without deallocating.
int meshSize() const
Get mesh size (number of grid points), set on r-grid allocation.
DArray< double > const & basis(int monomerId) const
Get the field for one monomer type in basis format.
Signal< void > & signal()
Get a signal that notifies observers of field modification.
void writeBasis(std::string filename) const
Write fields to a named file, in symmetrized basis format.
void allocateRGrid(IntVec< D > const &dimensions)
Allocate or re-allocate memory for fields in rgrid format.
void setWriteUnitCell(UnitCell< D > const &cell)
Set unit cell used when writing field files.
void allocateBasis(int nBasis)
Allocate or re-allocate memory for fields in basis format.
void readBasis(std::string filename)
Read fields from a named file, in symmetrized basis format.
void readRGrid(std::string filename, bool isSymmetric=false)
Reads fields from a named file in real-space (r-grid) format.
WFieldsTmpl()
Constructor.
DArray< RFT > const & rgrid() const
Get array of all fields in r-space grid format.
bool isAllocatedBasis() const
Has memory been allocated for fields in basis format?
RFT const & rgrid(int monomerId) const
Get the field for one monomer type in r-space grid format.
DArray< DArray< double > > const & basis() const
Get array of all fields in basis format.
void setReadUnitCell(UnitCell< D > &cell)
Set unit cell used when reading field files.
void setFieldIo(FIT const &fieldIo)
Create association with FIT (store pointer).
void setNMonomer(int nMonomer)
Set stored value of nMonomer.
void allocate(int nMonomer, int nBasis, IntVec< D > const &dimensions)
Allocate memory for all fields.
bool isAllocatedRGrid() const
Has memory been allocated for fields in r-grid format?
void writeBasis(std::ostream &out) const
Write fields to an input stream in symmetrized basis format.
bool hasData() const
Has field data been set in either format?
void setRGrid(DArray< RFT > const &fields, bool isSymmetric=false)
Set fields values in real-space (r-grid) format.
~WFieldsTmpl()
Destructor.
void readRGrid(std::istream &in, bool isSymmetric=false)
Reads fields from an input stream in real-space (r-grid) format.
void writeRGrid(std::string filename) const
Writes fields to a named file in real-space (r-grid) format.
Dynamically allocatable contiguous array template.
Notifier (or subject) in the Observer design pattern.
#define UTIL_CHECK(condition)
Assertion macro suitable for serial or parallel production code.
#define UTIL_ASSERT(condition)
Assertion macro suitable for debugging serial or parallel code.
Periodic fields and crystallography.
PSCF package top-level namespace.
Utility classes for scientific computation.