1#ifndef PRDC_CL_W_FIELDS_TPP
2#define PRDC_CL_W_FIELDS_TPP
12#include <prdc/field/cFieldIo.h>
13#include <prdc/crystal/UnitCell.h>
14#include <pscf/mesh/Mesh.h>
15#include <util/signal/Signal.h>
16#include <util/misc/FileMaster.h>
29 template <
int D,
class CFT,
class FIT>
35 readUnitCellPtr_(nullptr),
36 writeUnitCellPtr_(nullptr),
46 template <
int D,
class CFT,
class FIT>
48 {
delete signalPtr_; }
53 template <
int D,
class CFT,
class FIT>
60 template <
int D,
class CFT,
class FIT>
64 readUnitCellPtr_ = &cell;
70 template <
int D,
class CFT,
class FIT>
74 writeUnitCellPtr_ = &cell;
80 template <
int D,
class CFT,
class FIT>
93 for (
int i = 0; i < D; ++i) {
99 fields_.allocate(nMonomer_);
100 for (
int i = 0; i < nMonomer_; ++i) {
112 template <
int D,
class CFT,
class FIT>
119 for (
int i = 0; i < nMonomer_; ++i) {
121 assignField(fields_[i],
fields[i]);
134 template <
int D,
class CFT,
class FIT>
142 fieldIo().readFields(in, fields_, *readUnitCellPtr_);
152 template <
int D,
class CFT,
class FIT>
156 fieldIo().fileMaster().openInputFile(filename, file);
166 template <
int D,
class CFT,
class FIT>
176 bool writeHeader =
true;
178 fieldIo().writeFields(out, fields_, *writeUnitCellPtr_,
185 template <
int D,
class CFT,
class FIT>
189 fieldIo().fileMaster().openOutputFile(filename, file);
199 template <
int D,
class CFT,
class FIT>
213 template <
int D,
class CFT,
class FIT>
214 void WFields<D,CFT,FIT>::assignField(CFT & lhs, CFT
const & rhs)
const
215 {
UTIL_THROW(
"Unimplemented function WFields::assignRField"); }
void writeFields(std::ostream &out) const
Write fields to an output stream.
void setFields(DArray< CFT > const &fields)
Set values for all fields.
int nMonomer() const
Get number of monomer types.
void setWriteUnitCell(UnitCell< D > const &cell)
Set unit cell used when writing field files.
void readFields(std::istream &in)
Read all fields from an input file.
void setFieldIo(FIT const &fieldIo)
Create association with FIT (store pointer).
IntVec< D > const & meshDimensions() const
Get mesh dimensions in each direction, set on r-grid allocation.
FIT const & fieldIo() const
Get associated FIT field IO object (const reference).
Signal< void > & signal()
Get the signal that notifies observers of w-field modification.
void allocate(int nMonomer, IntVec< D > const &dimensions)
Allocate memory for fields.
DArray< CFT > const & fields() const
Get the array of all fields.
void setReadUnitCell(UnitCell< D > &cell)
Set unit cell used when reading field files.
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.
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_THROW(msg)
Macro for throwing an Exception, reporting function, file and line number.
Complex-valued periodic fields (class templates).
Periodic fields and crystallography.
PSCF package top-level namespace.