12#include <pspc/field/FieldIo.h>
13#include <pspc/field/RFieldDft.h>
49 { fieldIoPtr_ = &fieldIo; }
61 meshDimensions_ = meshDimensions;
63 for (
int i = 0; i < D; ++i) {
65 meshSize_ *= meshDimensions[i];
69 basis_.allocate(nBasis);
70 rgrid_.allocate(meshDimensions);
81 for (
int j = 0; j < nBasis_; ++j) {
84 fieldIoPtr_->convertBasisToRGrid(basis_, rgrid_);
96 for (
int j = 0; j < meshSize_; ++j) {
100 fieldIoPtr_->convertRGridToBasis(rgrid_, basis_);
103 isSymmetric_ = isSymmetric;
116 fieldIoPtr_->readFieldBasis(in, basis_, unitCell);
119 fieldIoPtr_->convertBasisToRGrid(basis_, rgrid_);
135 fieldIoPtr_->readFieldBasis(filename, basis_, unitCell);
138 fieldIoPtr_->convertBasisToRGrid(basis_, rgrid_);
160 fieldIoPtr_->readFieldRGrid(in, rgrid_, unitCell);
163 fieldIoPtr_->convertRGridToBasis(rgrid_, basis_);
167 isSymmetric_ = isSymmetric;
186 fieldIoPtr_->readFieldRGrid(filename, rgrid_, unitCell);
189 fieldIoPtr_->convertRGridToBasis(rgrid_, basis_);
193 isSymmetric_ = isSymmetric;
203 if (isSymmetric() && hasData()) {
206 }
else if (!hasData()) {
211 kgrid.
allocate(rgrid_.meshDimensions());
212 fieldIoPtr_->convertRGridToKGrid(rgrid_, kgrid);
An IntVec<D, T> is a D-component vector of elements of integer type T.
File input/output operations and format conversions for fields.
void setFieldIo(FieldIo< D > const &fieldIo)
Create association with FieldIo (store pointer).
void setBasis(DArray< double > const &field)
Set field component values, in symmetrized Fourier format.
void setRGrid(RField< D > const &field, bool isSymmetric=false)
Set field values in real-space (r-grid) format.
void readRGrid(std::istream &in, UnitCell< D > &unitCell, bool isSymmetric=false)
Reads field from an input stream in real-space (r-grid) format.
void readBasis(std::istream &in, UnitCell< D > &unitCell)
Read field from input stream in symmetrized Fourier format.
void allocate(int nBasis, IntVec< D > const &dimensions)
Allocate memory for the field.
double phiTot() const
Volume fraction of the unit cell occupied by the polymers/solvents.
Fourier transform of a real field on an FFT mesh.
void allocate(IntVec< D > const &meshDimensions)
Allocate the underlying C array for an FFT grid.
Field of real double precision values on an FFT mesh.
Base template for UnitCell<D> classes, D=1, 2 or 3.
int capacity() const
Return allocated size.
Dynamically allocatable contiguous array template.
#define UTIL_CHECK(condition)
Assertion macro suitable for serial or parallel production code.
C++ namespace for polymer self-consistent field theory (PSCF).
Utility classes for scientific computation.