1#ifndef PRDC_C_FIELDS_TMPL_TPP
2#define PRDC_C_FIELDS_TMPL_TPP
11#include "CFieldsTmpl.h"
12#include <prdc/crystal/UnitCell.h>
13#include <util/misc/FileMaster.h>
23 template <
int D,
class RFT,
class FIT>
28 writeUnitCellPtr_(nullptr),
30 isAllocatedRGrid_(false),
31 isAllocatedBasis_(false),
39 template <
int D,
class RFT,
class FIT>
46 template <
int D,
class RFT,
class FIT>
54 template <
int D,
class RFT,
class FIT>
58 writeUnitCellPtr_ = &cell;
64 template <
int D,
class RFT,
class FIT>
75 template <
int D,
class RFT,
class FIT>
83 rgrid_.allocate(nMonomer_);
84 for (
int i = 0; i < nMonomer_; ++i) {
85 rgrid_[i].allocate(dimensions);
87 isAllocatedRGrid_ =
true;
93 template <
int D,
class RFT,
class FIT>
100 basis_.allocate(nMonomer_);
101 for (
int i = 0; i < nMonomer_; ++i) {
102 basis_[i].allocate(nBasis);
104 isAllocatedBasis_ =
true;
110 template <
int D,
class RFT,
class FIT>
125 template <
int D,
class RFT,
class FIT>
136 fieldIo().writeFieldsBasis(out, basis_, *writeUnitCellPtr_);
142 template <
int D,
class RFT,
class FIT>
146 fieldIo().fileMaster().openOutputFile(filename, file);
154 template <
int D,
class RFT,
class FIT>
164 bool writeHeader =
true;
166 fieldIo().writeFieldsRGrid(out, rgrid_, *writeUnitCellPtr_, writeHeader,
173 template <
int D,
class RFT,
class FIT>
177 fieldIo().fileMaster().openOutputFile(filename, file);
185 template <
int D,
class RFT,
class FIT>
inline
190 isSymmetric_ =
false;
195 template <
int D,
class RFT,
class FIT>
inline
An IntVec<D, T> is a D-component vector of elements of integer type T.
void writeRGrid(std::ostream &out) const
Writes fields to an input stream in real-space (r-grid) format.
void allocate(int nMonomer, int nBasis, IntVec< D > const &dimensions)
Allocate memory for both r-grid and basis field formats.
void setNMonomer(int nMonomer)
Set stored value of nMonomer.
bool hasData() const
Does this container have up-to-date fields?
void setFieldIo(FIT const &fieldIo)
Create association with FIT (store pointer).
CFieldsTmpl()
Constructor.
void setWriteUnitCell(UnitCell< D > const &cell)
Set unit cell used when writing field files.
FIT const & fieldIo() const
Get associated FieldIo object (const reference).
void allocateBasis(int nBasis)
Allocate or re-allocate memory for fields in basis format.
void allocateRGrid(IntVec< D > const &dimensions)
Allocate memory for fields in rgrid format.
bool isSymmetric() const
Are the fields invariant under elements of the space group?
void writeBasis(std::ostream &out) const
Write fields to an input stream in symmetrized basis format.
~CFieldsTmpl()
Destructor.
void setHasData(bool hasData)
Set the hasData flag.
void setIsSymmetric(bool isSymmetric)
Set the isSymmetric flag.
Base template for UnitCell<D> classes, D=1, 2 or 3.
#define UTIL_CHECK(condition)
Assertion macro suitable for serial or parallel production code.
Periodic fields and crystallography.
PSCF package top-level namespace.