1#ifndef PSPC_W_FIELD_CONTAINER_TPP
2#define PSPC_W_FIELD_CONTAINER_TPP
11#include "WFieldContainer.h"
12#include <pspc/field/FieldIo.h>
32 isAllocatedRGrid_(false),
33 isAllocatedBasis_(false),
50 { fieldIoPtr_ = &fieldIo; }
73 if (isAllocatedRGrid_) {
78 meshDimensions_ = meshDimensions;
80 for (
int i = 0; i < D; ++i) {
82 meshSize_ *= meshDimensions[i];
86 rgrid_.allocate(nMonomer_);
87 for (
int i = 0; i < nMonomer_; ++i) {
88 rgrid_[i].allocate(meshDimensions);
90 isAllocatedRGrid_ =
true;
102 for (
int i = 0; i < nMonomer_; ++i) {
103 rgrid_[i].deallocate();
108 isAllocatedRGrid_ =
false;
121 if (isAllocatedBasis_) {
127 basis_.allocate(nMonomer_);
128 for (
int i = 0; i < nMonomer_; ++i) {
129 basis_[i].allocate(nBasis);
131 isAllocatedBasis_ =
true;
143 for (
int i = 0; i < nMonomer_; ++i) {
144 basis_[i].deallocate();
148 isAllocatedBasis_ =
false;
158 setNMonomer(nMonomer);
159 allocateRGrid(meshDimensions);
160 allocateBasis(nBasis);
173 for (
int i = 0; i < nMonomer_; ++i) {
178 for (
int j = 0; j < nBasis_; ++j) {
184 fieldIoPtr_->convertBasisToRGrid(basis_, rgrid_);
200 for (
int i = 0; i < nMonomer_; ++i) {
205 for (
int j = 0; j < meshSize_; ++j) {
211 fieldIoPtr_->convertRGridToBasis(rgrid_, basis_);
215 isSymmetric_ = isSymmetric;
231 fieldIoPtr_->readFieldsBasis(in, basis_, unitCell);
234 fieldIoPtr_->convertBasisToRGrid(basis_, rgrid_);
253 fieldIoPtr_->readFieldsBasis(filename, basis_, unitCell);
256 fieldIoPtr_->convertBasisToRGrid(basis_, rgrid_);
280 fieldIoPtr_->readFieldsRGrid(in, rgrid_, unitCell);
283 fieldIoPtr_->convertRGridToBasis(rgrid_, basis_);
287 isSymmetric_ = isSymmetric;
308 fieldIoPtr_->readFieldsRGrid(filename, rgrid_, unitCell);
311 fieldIoPtr_->convertRGridToBasis(rgrid_, basis_);
315 isSymmetric_ = isSymmetric;
An IntVec<D, T> is a D-component vector of elements of integer type T.
File input/output operations and format conversions for fields.
Field of real double precision values on an FFT mesh.
void deallocateRGrid()
De-allocate fields in rgrid format.
void readRGrid(std::istream &in, UnitCell< D > &unitCell, bool isSymmetric=false)
Reads fields from an input stream in real-space (r-grid) format.
void deallocateBasis()
De-allocate fields in basis format.
~WFieldContainer()
Destructor.
void setFieldIo(FieldIo< D > const &fieldIo)
Create association with FieldIo (store pointer).
void setBasis(DArray< DArray< double > > const &fields)
Set field component values, in symmetrized Fourier format.
WFieldContainer()
Constructor.
void allocate(int nMonomer, int nBasis, IntVec< D > const &dimensions)
Allocate memory for all fields.
void allocateBasis(int nBasis)
Allocate or re-allocate memory for fields in basis format.
void setNMonomer(int nMonomer)
Set stored value of nMonomer.
void setRGrid(DArray< RField< D > > const &fields, bool isSymmetric=false)
Set fields values in real-space (r-grid) format.
void allocateRGrid(IntVec< D > const &dimensions)
Allocate or re-allocate memory for fields in rgrid format.
void readBasis(std::istream &in, UnitCell< D > &unitCell)
Read field component values from input stream, in symmetrized Fourier format.
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.