PSCF v1.4.0
Pscf::Rpc::FieldIo< D > Class Template Reference

File input/output operations and format conversions for fields. More...

#include <FieldIo.h>

Inheritance diagram for Pscf::Rpc::FieldIo< D >:
Pscf::Rp::FieldIo< D, RField< D >, RFieldDft< D >, FFT< D > >

Public Types

typedef Rp::FieldIo< D, RField< D >, RFieldDft< D >, FFT< D > > Base
 Alias for base class.

Public Member Functions

bool readFieldsRGrid (std::istream &in, DArray< RField< D > > &fields, UnitCell< D > &unitCell) const override
 Read array of RField objects (r-grid fields) from a stream.
void readFieldsRGridData (std::istream &in, DArray< RField< D > > &fields, int nMonomer) const override
 Read data for an array of r-grid fields, with no header section.
bool readFieldRGrid (std::istream &in, RField< D > &field, UnitCell< D > &unitCell) const override
 Read a single RField (field on an r-space grid) from a stream.
void writeFieldsRGrid (std::ostream &out, DArray< RField< D > > const &fields, UnitCell< D > const &unitCell, bool writeHeader=true, bool isSymmetric=true, bool writeMeshSize=true) const override
 Write array of RField objects (fields on r-space grid) to a stream.
void writeFieldRGrid (std::ostream &out, RField< D > const &field, UnitCell< D > const &unitCell, bool writeHeader=true, bool isSymmetric=true) const override
 Write a single RField (field on an r-space grid) to a stream.
void readFieldsKGrid (std::istream &in, DArray< RFieldDft< D > > &fields, UnitCell< D > &unitCell) const override
 Read array of RFieldDft objects (k-space fields) from a stream.
void writeFieldsKGrid (std::ostream &out, DArray< RFieldDft< D > > const &fields, UnitCell< D > const &unitCell, bool isSymmetric=true) const override
 Write array of RFieldDft objects (k-space fields) to file.
void convertBasisToKGrid (DArray< double > const &components, RFieldDft< D > &dft) const override
 Convert a field from symmetrized basis to Fourier grid (k-grid).
void convertKGridToBasis (RFieldDft< D > const &in, DArray< double > &out, bool checkSymmetry=true, double epsilon=1.0e-8) const override
 Convert a field from Fourier (k-grid) to symmetrized basis form.
bool hasSymmetry (RFieldDft< D > const &in, double epsilon=1.0e-8, bool verbose=true) const override
 Check if a k-grid field has the declared space group symmetry.
void compareFieldsRGrid (DArray< RField< D > > const &field1, DArray< RField< D > > const &field2) const override
 Compare two fields in r-grid format, output a report.
void scaleFieldRGrid (RField< D > &field, double factor) const override
 Rescale a single r-grid field by a scalar factor.
void expandRGridDimension (std::ostream &out, DArray< RField< D > > const &fields, UnitCell< D > const &unitCell, int d, DArray< int > const &newGridDimensions) const override
 Expand spatial dimension of an array of r-grid fields.
void replicateUnitCell (std::ostream &out, DArray< RField< D > > const &fields, UnitCell< D > const &unitCell, IntVec< D > const &replicas) const override
 Write r-grid fields in a replicated unit cell to std::ostream.
void writeFieldBasis (std::ostream &out, DArray< double > const &field, UnitCell< D > const &unitCell) const
 Write a single field in basis format to an output stream.
void writeFieldBasis (std::string filename, DArray< double > const &field, UnitCell< D > const &unitCell) const
 Write single field in basis format to a named file.
void writeFieldsBasis (std::ostream &out, DArray< DArray< double > > const &fields, UnitCell< D > const &unitCell) const
 Write an array of fields in basis format to an output stream.
void writeFieldsBasis (std::string filename, DArray< DArray< double > > const &fields, UnitCell< D > const &unitCell) const
 Write an array of fields in basis format to a named file.
bool readFieldsRGrid (std::string filename, DArray< RField< D > > &fields, UnitCell< D > &unitCell) const
 Read an array of r-grid fields from a named file.
bool readFieldRGrid (std::string filename, RField< D > &field, UnitCell< D > &unitCell) const
 Read a single r-grid field from a named file.
void writeFieldsRGrid (std::string filename, DArray< RField< D > > const &fields, UnitCell< D > const &unitCell, bool isSymmetric=true) const
 Write an array of r-grid fields to a named file.
void writeFieldRGrid (std::string filename, RField< D > const &field, UnitCell< D > const &unitCell, bool isSymmetric=true) const
 Write a single r-grid field to a named file.
void readFieldsKGrid (std::string filename, DArray< RFieldDft< D > > &fields, UnitCell< D > &unitCell) const
 Read an array of k-grid fields from a named file.
void writeFieldsKGrid (std::string filename, DArray< RFieldDft< D > > const &fields, UnitCell< D > const &unitCell, bool isSymmetric=true) const
 Write an array of k-grid fields to a named file.
void replicateUnitCell (std::string filename, DArray< RField< D > > const &fields, UnitCell< D > const &unitCell, IntVec< D > const &replicas) const
 Write r-grid fields in a replicated unit cell to a named file.
void replicateUnitCell (std::string const &inFileName, std::string const &outFileName, IntVec< D > const &replicas) const
 Write replicated fields read from one file to another.
void expandRGridDimension (std::string filename, DArray< RField< D > > const &fields, UnitCell< D > const &unitCell, int d, DArray< int > newGridDimensions) const
 Increase D for an array of r-grid fields, write to a named file.
void expandRGridDimension (std::string const &inFileName, std::string const &outFileName, int d, DArray< int > newGridDimensions) const
 Increase D for an r-grid field file.
void convertBasisToKGrid (DArray< DArray< double > > const &in, DArray< RFieldDft< D > > &out) const
 Convert an array of fields from basis to Fourier (k-grid) form.
void convertBasisToKGrid (std::string const &inFileName, std::string const &outFileName) const
 Convert a field file from basis to Fourier (k-grid) format.
void convertKGridToBasis (DArray< RFieldDft< D > > const &in, DArray< DArray< double > > &out, bool checkSymmetry=true, double epsilon=1.0e-8) const
 Convert an array of fields from Fourier (k-grid) to basis form.
void convertKGridToBasis (std::string const &inFileName, std::string const &outFileName) const
 Convert a field file from Fourier (k-grid) to basis format.
bool hasSymmetry (RField< D > const &in, double epsilon=1.0e-8, bool verbose=true) const
 Check if an r-grid field has the declared space group symmetry.
bool hasSymmetry (std::string const &inFileName, double epsilon=1.0E-8) const
 Check if an r-grid field file has declared space group symmetry.
void compareFieldsRGrid (std::string const &filename1, std::string const &filename2) const
 Compare two r-grid field files, write a report to Log file.
void scaleFieldsRGrid (DArray< RField< D > > &fields, double factor) const
 Scale an array of r-grid fields by a scalar.
void scaleFieldsRGrid (std::string const &inFileName, const std::string &outFileName, double factor) const
 Multiply all fields in an r-grid field file by a scalar.
Public Member Functions inherited from Pscf::Rp::FieldIo< D, RField< D >, RFieldDft< D >, FFT< D > >
void associate (Mesh< D > const &mesh, FFT const &fft, typename UnitCell< D >::LatticeSystem const &lattice, bool const &hasGroup, std::string const &groupName, SpaceGroup< D > const &group, Basis< D > &basis)
 Create associations with other members of the parent Domain.
void setFileMaster (FileMaster const &fileMaster)
 Create an association with a FileMaster.
void setNMonomer (int nMonomer)
 Set the number of monomer types.
void readFieldsBasis (std::istream &in, DArray< DArray< double > > &fields, UnitCell< D > &unitCell) const
 Read an array of fields in basis format from an input stream.
void readFieldsBasis (std::string filename, DArray< DArray< double > > &fields, UnitCell< D > &unitCell) const
 Read an array of fields in basis format from a named file.
void readFieldBasis (std::istream &in, DArray< double > &field, UnitCell< D > &unitCell) const
 Read a single field in basis format from an input stream.
void readFieldBasis (std::string filename, DArray< double > &field, UnitCell< D > &unitCell) const
 Read a single field in basis format from a named file.
void writeFieldsBasis (std::ostream &out, DArray< DArray< double > > const &fields, UnitCell< D > const &unitCell) const
 Write an array of fields in basis format to an output stream.
void writeFieldsBasis (std::string filename, DArray< DArray< double > > const &fields, UnitCell< D > const &unitCell) const
 Write an array of fields in basis format to a named file.
void writeFieldBasis (std::ostream &out, DArray< double > const &field, UnitCell< D > const &unitCell) const
 Write a single field in basis format to an output stream.
void writeFieldBasis (std::string filename, DArray< double > const &field, UnitCell< D > const &unitCell) const
 Write single field in basis format to a named file.
bool readFieldsRGrid (std::string filename, DArray< RField< D > > &fields, UnitCell< D > &unitCell) const
 Read an array of r-grid fields from a named file.
bool readFieldRGrid (std::string filename, RField< D > &field, UnitCell< D > &unitCell) const
 Read a single r-grid field from a named file.
void writeFieldsRGrid (std::string filename, DArray< RField< D > > const &fields, UnitCell< D > const &unitCell, bool isSymmetric=true) const
 Write an array of r-grid fields to a named file.
void writeFieldRGrid (std::string filename, RField< D > const &field, UnitCell< D > const &unitCell, bool isSymmetric=true) const
 Write a single r-grid field to a named file.
void readFieldsKGrid (std::string filename, DArray< RFieldDft< D > > &fields, UnitCell< D > &unitCell) const
 Read an array of k-grid fields from a named file.
void writeFieldsKGrid (std::string filename, DArray< RFieldDft< D > > const &fields, UnitCell< D > const &unitCell, bool isSymmetric=true) const
 Write an array of k-grid fields to a named file.
void convertBasisToKGrid (DArray< DArray< double > > const &in, DArray< RFieldDft< D > > &out) const
 Convert an array of fields from basis to Fourier (k-grid) form.
void convertKGridToBasis (DArray< RFieldDft< D > > const &in, DArray< DArray< double > > &out, bool checkSymmetry=true, double epsilon=1.0e-8) const
 Convert an array of fields from Fourier (k-grid) to basis form.
void convertBasisToRGrid (DArray< double > const &in, RField< D > &out) const
 Convert a single field from basis to r-grid format.
void convertBasisToRGrid (DArray< DArray< double > > const &in, DArray< RField< D > > &out) const
 Convert an array of fields from basis to r-grid format.
void convertRGridToBasis (RField< D > const &in, DArray< double > &out, bool checkSymmetry=true, double epsilon=1.0e-8) const
 Convert a single field from r-grid to basis form.
void convertRGridToBasis (DArray< RField< D > > const &in, DArray< DArray< double > > &out, bool checkSymmetry=true, double epsilon=1.0e-8) const
 Convert an array of fields from r-grid to basis format.
void convertKGridToRGrid (DArray< RFieldDft< D > > const &in, DArray< RField< D > > &out) const
 Convert an array of field from k-grid to r-grid format.
void convertKGridToRGrid (RFieldDft< D > const &in, RField< D > &out) const
 Convert a single field from k-grid to r-grid format.
void convertRGridToKGrid (DArray< RField< D > > const &in, DArray< RFieldDft< D > > &out) const
 Convert an array of fields from r-grid to k-grid (Fourier) format.
void convertRGridToKGrid (RField< D > const &in, RFieldDft< D > &out) const
 Convert a field from r-grid to k-grid (Fourier) format.
void convertBasisToRGrid (std::string const &inFileName, std::string const &outFileName) const
 Convert a field file from basis format to r-grid format.
void convertRGridToBasis (std::string const &inFileName, std::string const &outFileName) const
 Convert a field file from r-grid to basis format.
void convertKGridToRGrid (std::string const &inFileName, std::string const &outFileName) const
 Convert a field file from Fourier (k-grid) to r-grid format.
void convertRGridToKGrid (std::string const &inFileName, std::string const &outFileName) const
 Convert a field file from r-grid to Fourier (k-grid) format.
void convertKGridToBasis (std::string const &inFileName, std::string const &outFileName) const
 Convert a field file from Fourier (k-grid) to basis format.
void convertBasisToKGrid (std::string const &inFileName, std::string const &outFileName) const
 Convert a field file from basis to Fourier (k-grid) format.
bool hasSymmetry (RField< D > const &in, double epsilon=1.0e-8, bool verbose=true) const
 Check if an r-grid field has the declared space group symmetry.
bool hasSymmetry (std::string const &inFileName, double epsilon=1.0E-8) const
 Check if an r-grid field file has declared space group symmetry.
void compareFieldsBasis (DArray< DArray< double > > const &field1, DArray< DArray< double > > const &field2) const
 Compare array of fields in basis form, write a report to Log file.
void compareFieldsBasis (std::string const &filename1, std::string const &filename2) const
 Compare two r-grid field files, write a report to Log file.
void compareFieldsRGrid (std::string const &filename1, std::string const &filename2) const
 Compare two r-grid field files, write a report to Log file.
virtual void scaleFieldBasis (DArray< double > &field, double factor) const
 Multiply a single field in basis form by a real scalar.
void scaleFieldsBasis (DArray< DArray< double > > &fields, double factor) const
 Multiply an array of fields in basis format by a real scalar.
void scaleFieldsBasis (std::string const &inFileName, std::string const &outFileName, double factor) const
 Multiply all fields in a basis field file by a scalar.
void scaleFieldsRGrid (DArray< RField< D > > &fields, double factor) const
 Scale an array of r-grid fields by a scalar.
void scaleFieldsRGrid (std::string const &inFileName, const std::string &outFileName, double factor) const
 Multiply all fields in an r-grid field file by a scalar.
void estimateWBasis (DMatrix< double > const &chi, DArray< DArray< double > > &fields) const
 Convert c fields to estimated w fields, in basis format.
void estimateWBasis (std::string const &inFileName, std::string const &outFileName, DMatrix< double > const &chi) const
 Convert a file of c fields to estimated w fields, in basis format.
void replicateUnitCell (std::string filename, DArray< RField< D > > const &fields, UnitCell< D > const &unitCell, IntVec< D > const &replicas) const
 Write r-grid fields in a replicated unit cell to a named file.
void replicateUnitCell (std::string const &inFileName, std::string const &outFileName, IntVec< D > const &replicas) const
 Write replicated fields read from one file to another.
void expandRGridDimension (std::string filename, DArray< RField< D > > const &fields, UnitCell< D > const &unitCell, int d, DArray< int > newGridDimensions) const
 Increase D for an array of r-grid fields, write to a named file.
void expandRGridDimension (std::string const &inFileName, std::string const &outFileName, int d, DArray< int > newGridDimensions) const
 Increase D for an r-grid field file.
void readFieldHeader (std::istream &in, int &nMonomer, UnitCell< D > &unitCell, bool &isSymmetric) const
 Reader header of field file (fortran PSCF format)
void writeFieldHeader (std::ostream &out, int nMonomer, UnitCell< D > const &unitCell, bool isSymmetric=true) const
 Write header for field file (fortran pscf format).
Mesh< D > const & mesh () const
 Get spatial discretization mesh by const reference.
Basis< D > const & basis () const
 Get the associated Basis by const reference.
FileMaster const & fileMaster () const
 Get associated FileMaster by const reference.

Additional Inherited Members

Protected Member Functions inherited from Pscf::Rp::FieldIo< D, RField< D >, RFieldDft< D >, FFT< D > >
 FieldIo ()
 Constructor.
 ~FieldIo ()=default
 Destructor.
UnitCell< D >::LatticeSystem const & lattice () const
 Get the lattice type enum value by const reference.
bool hasGroup () const
 Has a space group been declared externally ?
std::string const & groupName () const
 Get an associated group name string by const reference.
SpaceGroup< D > const & group () const
 Get an associated SpaceGroup<D> by const reference.
FFT const & fft () const
 Get FFT object by const reference.
void checkAllocateRGrid () const
 Check if r-grid workspace is allocated, allocate if necessary.
void checkAllocateKGrid () const
 Check if k-grid workspace is allocated, allocate if necessary.
void checkAllocateBasis (std::string const &inFileName) const
 Check if basis workspace is allocated, allocate if necessary.

Detailed Description

template<int D>
class Pscf::Rpc::FieldIo< D >

File input/output operations and format conversions for fields.

Please refer to the documentation of the base class template Rp::FieldIo for complete API documentation. The public interface of this class is identical to that of the base class.

This class template is derived from a specialization of the class template Rp::FieldIo<D, RFT, KFT, FFT> using class arguments RFT = RField<D>, KFT = RFieldDft<D>, and FFT = FFT<D> that are all defined in the Prdc::Cpu subspace, and that all use conventional CPU hardware. An analogous class template named Rpg::FieldIo that is defined in the Pscf::Rpg namespace instead uses GPU hardware.

The member functions defined in this class are all implementations of pure virtual functions declared in the base class. These are all functions for which different implementations are required for the CPU and GPU variants, usually because the GPU implementation requires data transfer between CPU host and GPUdevice.

Definition at line 57 of file rpc/field/FieldIo.h.

Member Typedef Documentation

◆ Base

template<int D>
typedef Rp::FieldIo<D, RField<D>, RFieldDft<D>, FFT<D> > Pscf::Rpc::FieldIo< D >::Base

Alias for base class.

Definition at line 279 of file rpc/field/FieldIo.h.

Member Function Documentation

◆ readFieldsRGrid() [1/2]

template<int D>
bool Pscf::Rpc::FieldIo< D >::readFieldsRGrid ( std::istream & in,
DArray< RField< D > > & fields,
UnitCell< D > & unitCell ) const
overridevirtual

Read array of RField objects (r-grid fields) from a stream.

See documentation of analogous function in Rp::FieldIo.

Parameters
ininput file stream
fieldsarray of RField fields (r-space grid)
unitCellassociated crystallographic unit cell
Returns
true iff the header contains a space group (isSymmetric)

Implements Pscf::Rp::FieldIo< D, RField< D >, RFieldDft< D >, FFT< D > >.

Definition at line 29 of file rpc/field/FieldIo.tpp.

References Pscf::Prdc::checkAllocateFields(), Pscf::Rp::FieldIo< D, RField< D >, RFieldDft< D >, FFT< D > >::mesh(), Pscf::Rp::FieldIo< D, RField< D >, RFieldDft< D >, FFT< D > >::readFieldHeader(), Pscf::Prdc::readMeshDimensions(), and Pscf::Prdc::readRGridData().

◆ readFieldsRGridData()

template<int D>
void Pscf::Rpc::FieldIo< D >::readFieldsRGridData ( std::istream & in,
DArray< RField< D > > & fields,
int nMonomer ) const
overridevirtual

Read data for an array of r-grid fields, with no header section.

See documentation of analogous function in Rp::FieldIo.

Parameters
ininput file stream
fieldsarray of RField fields (r-space grid)
nMonomernumber of monomer types

Implements Pscf::Rp::FieldIo< D, RField< D >, RFieldDft< D >, FFT< D > >.

Definition at line 53 of file rpc/field/FieldIo.tpp.

References Pscf::Prdc::checkAllocateFields(), Pscf::Rp::FieldIo< D, RField< D >, RFieldDft< D >, FFT< D > >::mesh(), and Pscf::Prdc::readRGridData().

◆ readFieldRGrid() [1/2]

template<int D>
bool Pscf::Rpc::FieldIo< D >::readFieldRGrid ( std::istream & in,
RField< D > & field,
UnitCell< D > & unitCell ) const
overridevirtual

Read a single RField (field on an r-space grid) from a stream.

See documentation of analogous function in Rp::FieldIo.

Parameters
ininput file stream
fieldfields defined on r-space grid
unitCellassociated crystallographic unit cell
Returns
true iff the header contains a space group (isSymmetric)

Implements Pscf::Rp::FieldIo< D, RField< D >, RFieldDft< D >, FFT< D > >.

Definition at line 68 of file rpc/field/FieldIo.tpp.

References Pscf::Prdc::checkAllocateField(), Pscf::Rp::FieldIo< D, RField< D >, RFieldDft< D >, FFT< D > >::mesh(), Pscf::Rp::FieldIo< D, RField< D >, RFieldDft< D >, FFT< D > >::readFieldHeader(), Pscf::Prdc::readMeshDimensions(), Pscf::Prdc::readRGridData(), and UTIL_CHECK.

◆ writeFieldsRGrid() [1/2]

template<int D>
void Pscf::Rpc::FieldIo< D >::writeFieldsRGrid ( std::ostream & out,
DArray< RField< D > > const & fields,
UnitCell< D > const & unitCell,
bool writeHeader = true,
bool isSymmetric = true,
bool writeMeshSize = true ) const
overridevirtual

Write array of RField objects (fields on r-space grid) to a stream.

See documentation of analogous function in Rp::FieldIo.

Parameters
outoutput stream (i.e., output file)
fieldsarray of RField objects (fields on r-space grid)
unitCellassociated crystallographic unit cell
writeHeaderflag to write file header if true
isSymmetricDo fields have a space group symmetry ?
writeMeshSizeShould mesh size be written in header?

Implements Pscf::Rp::FieldIo< D, RField< D >, RFieldDft< D >, FFT< D > >.

Definition at line 93 of file rpc/field/FieldIo.tpp.

References Pscf::Prdc::inspectFields(), Pscf::Rp::FieldIo< D, RField< D >, RFieldDft< D >, FFT< D > >::writeFieldHeader(), Pscf::Prdc::writeMeshDimensions(), and Pscf::Prdc::writeRGridData().

◆ writeFieldRGrid() [1/2]

template<int D>
void Pscf::Rpc::FieldIo< D >::writeFieldRGrid ( std::ostream & out,
RField< D > const & field,
UnitCell< D > const & unitCell,
bool writeHeader = true,
bool isSymmetric = true ) const
overridevirtual

Write a single RField (field on an r-space grid) to a stream.

See documentation of analogous function in Rp::FieldIo.

Parameters
outoutput stream
fieldfield defined on r-space grid
unitCellassociated crystallographic unit cell
writeHeaderShould a file header be written?
isSymmetricDoes the field have a space group symmetry?

Implements Pscf::Rp::FieldIo< D, RField< D >, RFieldDft< D >, FFT< D > >.

Definition at line 124 of file rpc/field/FieldIo.tpp.

References Pscf::Prdc::Cpu::RField< D >::meshDimensions(), Pscf::Rp::FieldIo< D, RField< D >, RFieldDft< D >, FFT< D > >::writeFieldHeader(), Pscf::Prdc::writeMeshDimensions(), and Pscf::Prdc::writeRGridData().

◆ readFieldsKGrid() [1/2]

template<int D>
void Pscf::Rpc::FieldIo< D >::readFieldsKGrid ( std::istream & in,
DArray< RFieldDft< D > > & fields,
UnitCell< D > & unitCell ) const
overridevirtual

Read array of RFieldDft objects (k-space fields) from a stream.

See documentation of analogous function in Rp::FieldIo.

Parameters
ininput stream (i.e., input file)
fieldsarray of RFieldDft fields (k-space grid)
unitCellassociated crystallographic unit cell

Implements Pscf::Rp::FieldIo< D, RField< D >, RFieldDft< D >, FFT< D > >.

Definition at line 149 of file rpc/field/FieldIo.tpp.

References Pscf::Prdc::checkAllocateFields(), Pscf::Rp::FieldIo< D, RField< D >, RFieldDft< D >, FFT< D > >::mesh(), Pscf::Rp::FieldIo< D, RField< D >, RFieldDft< D >, FFT< D > >::readFieldHeader(), Pscf::Prdc::readKGridData(), and Pscf::Prdc::readMeshDimensions().

◆ writeFieldsKGrid() [1/2]

template<int D>
void Pscf::Rpc::FieldIo< D >::writeFieldsKGrid ( std::ostream & out,
DArray< RFieldDft< D > > const & fields,
UnitCell< D > const & unitCell,
bool isSymmetric = true ) const
overridevirtual

Write array of RFieldDft objects (k-space fields) to file.

See documentation of analogous function in Rp::FieldIo.

Parameters
outoutput stream (i.e., output file)
fieldsarray of RFieldDft fields
unitCellassociated crystallographic unit cell
isSymmetricDoes this field have space group symmetry?

Implements Pscf::Rp::FieldIo< D, RField< D >, RFieldDft< D >, FFT< D > >.

Definition at line 173 of file rpc/field/FieldIo.tpp.

References Pscf::Prdc::inspectFields(), Pscf::Rp::FieldIo< D, RField< D >, RFieldDft< D >, FFT< D > >::writeFieldHeader(), Pscf::Prdc::writeKGridData(), and Pscf::Prdc::writeMeshDimensions().

◆ convertBasisToKGrid() [1/3]

template<int D>
void Pscf::Rpc::FieldIo< D >::convertBasisToKGrid ( DArray< double > const & components,
RFieldDft< D > & dft ) const
overridevirtual

Convert a field from symmetrized basis to Fourier grid (k-grid).

See documentation of analogous function in Rp::FieldIo.

Parameters
componentscoefficients of in symmetry-adapted basis
dftdiscrete Fourier transform of a real field

Implements Pscf::Rp::FieldIo< D, RField< D >, RFieldDft< D >, FFT< D > >.

Definition at line 199 of file rpc/field/FieldIo.tpp.

References Pscf::Rp::FieldIo< D, RField< D >, RFieldDft< D >, FFT< D > >::basis(), Pscf::Prdc::convertBasisToKGrid(), and Pscf::Prdc::Cpu::RFieldDft< D >::dftDimensions().

◆ convertKGridToBasis() [1/3]

template<int D>
void Pscf::Rpc::FieldIo< D >::convertKGridToBasis ( RFieldDft< D > const & in,
DArray< double > & out,
bool checkSymmetry = true,
double epsilon = 1.0e-8 ) const
overridevirtual

Convert a field from Fourier (k-grid) to symmetrized basis form.

See documentation of analogous function in Rp::FieldIo.

Parameters
indiscrete Fourier transform (k-grid) of a field
outcomponents of field in asymmetry-adapted Fourier basis
checkSymmetryflag indicating whether to check symmetry
epsilonerror tolerance for symmetry test (if any)

Implements Pscf::Rp::FieldIo< D, RField< D >, RFieldDft< D >, FFT< D > >.

Definition at line 212 of file rpc/field/FieldIo.tpp.

References Pscf::Rp::FieldIo< D, RField< D >, RFieldDft< D >, FFT< D > >::basis(), Pscf::Prdc::convertKGridToBasis(), and Pscf::Prdc::Cpu::RFieldDft< D >::dftDimensions().

◆ hasSymmetry() [1/3]

template<int D>
bool Pscf::Rpc::FieldIo< D >::hasSymmetry ( RFieldDft< D > const & in,
double epsilon = 1.0e-8,
bool verbose = true ) const
overridevirtual

Check if a k-grid field has the declared space group symmetry.

See documentation of analogous function in Rp::FieldIo.

Parameters
infield in real space grid (r-grid) format
epsilonerror threshold used to test for symmetry
verboseif true, write error to Log::file()
Returns
true iff the field is symmetric to within tolerance

Implements Pscf::Rp::FieldIo< D, RField< D >, RFieldDft< D >, FFT< D > >.

Definition at line 228 of file rpc/field/FieldIo.tpp.

References Pscf::Rp::FieldIo< D, RField< D >, RFieldDft< D >, FFT< D > >::basis(), Pscf::Prdc::Cpu::RFieldDft< D >::dftDimensions(), and Pscf::Prdc::hasSymmetry().

◆ compareFieldsRGrid() [1/2]

template<int D>
void Pscf::Rpc::FieldIo< D >::compareFieldsRGrid ( DArray< RField< D > > const & field1,
DArray< RField< D > > const & field2 ) const
overridevirtual

Compare two fields in r-grid format, output a report.

Outputs maximum and root-mean-squared differences to the standard Log file.

Parameters
field1first array of fields (r-grid format)
field2second array of fields (r-grid format)

Implements Pscf::Rp::FieldIo< D, RField< D >, RFieldDft< D >, FFT< D > >.

Definition at line 243 of file rpc/field/FieldIo.tpp.

References Pscf::FieldComparison< FT >::compare(), Util::Log::file(), Pscf::FieldComparison< FT >::maxDiff(), and Pscf::FieldComparison< FT >::rmsDiff().

◆ scaleFieldRGrid()

template<int D>
void Pscf::Rpc::FieldIo< D >::scaleFieldRGrid ( RField< D > & field,
double factor ) const
overridevirtual

Rescale a single r-grid field by a scalar factor.

See documentation of analogous function in Rp::FieldIo. Multiplication is done in-place, and so modifies the input.

Parameters
fieldreal space (r-grid) field (in-out)
factorreal scalar by which to multiply all elements

Implements Pscf::Rp::FieldIo< D, RField< D >, RFieldDft< D >, FFT< D > >.

Definition at line 262 of file rpc/field/FieldIo.tpp.

References Util::Array< Data >::capacity().

◆ expandRGridDimension() [1/3]

template<int D>
void Pscf::Rpc::FieldIo< D >::expandRGridDimension ( std::ostream & out,
DArray< RField< D > > const & fields,
UnitCell< D > const & unitCell,
int d,
DArray< int > const & newGridDimensions ) const
overridevirtual

Expand spatial dimension of an array of r-grid fields.

See documentation of analogous function in Rp::FieldIo.

Parameters
outoutput file stream
fieldsinput array of D-dimensional r-grid fields
unitCelloriginal D-dimensional unit cell
dexpanded spatial dimension (d > D)
newGridDimensionsnumber of grid points in added dimensions

Implements Pscf::Rp::FieldIo< D, RField< D >, RFieldDft< D >, FFT< D > >.

Definition at line 298 of file rpc/field/FieldIo.tpp.

References Pscf::Prdc::expandRGridDimension().

◆ replicateUnitCell() [1/3]

template<int D>
void Pscf::Rpc::FieldIo< D >::replicateUnitCell ( std::ostream & out,
DArray< RField< D > > const & fields,
UnitCell< D > const & unitCell,
IntVec< D > const & replicas ) const
overridevirtual

Write r-grid fields in a replicated unit cell to std::ostream.


See documentation of analogous function in Rp::FieldIo.

Parameters
outoutput file stream
fieldsarray of RField (r-space) fields to be replicated
unitCelloriginal crystallographic unit cell
replicasnumber of unit cell replicas in each direction

Implements Pscf::Rp::FieldIo< D, RField< D >, RFieldDft< D >, FFT< D > >.

Definition at line 276 of file rpc/field/FieldIo.tpp.

References Pscf::Prdc::inspectFields(), and Pscf::Prdc::replicateUnitCell().

◆ writeFieldBasis() [1/2]

template<int D>
void Pscf::Rp::FieldIo< D, RField< D >, RFieldDft< D >, FFT >::writeFieldBasis ( std::ostream & out,
DArray< double > const & field,
UnitCell< D > const & unitCell ) const

Write a single field in basis format to an output stream.

This function writes one field in symmetry adapted basis format. On entry, the field array must be allocated with a capacity equal to the number of basis functions in the basis.

Parameters
outoutput stream (i.e., output file)
fieldfield to be written (symmetry adapted basis format)
unitCellassociated crystallographic unit cell

◆ writeFieldBasis() [2/2]

template<int D>
void Pscf::Rp::FieldIo< D, RField< D >, RFieldDft< D >, FFT >::writeFieldBasis ( std::string filename,
DArray< double > const & field,
UnitCell< D > const & unitCell ) const

Write single field in basis format to a named file.

This function opens an output file with the specified filename, writes the field in symmetry adapted basis format to that file, and closes the file. The overloaded writeFieldBasis that takes a std::ostream& argument is called to write the file.

Parameters
filenamename of output file
fieldfield to be written (symmetry adapted basis format)
unitCellassociated crystallographic unit cell

◆ writeFieldsBasis() [1/2]

template<int D>
void Pscf::Rp::FieldIo< D, RField< D >, RFieldDft< D >, FFT >::writeFieldsBasis ( std::ostream & out,
DArray< DArray< double > > const & fields,
UnitCell< D > const & unitCell ) const

Write an array of fields in basis format to an output stream.

This function writes field components in a symmetry adapted basis to an output stream. On entry, the fields array must be allocated, and the capacity of each field must be equal the number of basis functions in the basis.

Parameters
outoutput stream (i.e., output file)
fieldsarray of fields (symmetry adapted basis components)
unitCellassociated crystallographic unit cell

◆ writeFieldsBasis() [2/2]

template<int D>
void Pscf::Rp::FieldIo< D, RField< D >, RFieldDft< D >, FFT >::writeFieldsBasis ( std::string filename,
DArray< DArray< double > > const & fields,
UnitCell< D > const & unitCell ) const

Write an array of fields in basis format to a named file.

This function opens an output file with the specified filename, writes components in symmetry-adapted form to that file, and then closes the file. The overloaded writeFieldsBasis member function that takes a std::ostream& argument is called to write the file.

Parameters
filenamename of input file
fieldsarray of fields (symmetry adapted basis components)
unitCellassociated crystallographic unit cell

◆ readFieldsRGrid() [2/2]

template<int D>
bool Pscf::Rp::FieldIo< D, RField< D >, RFieldDft< D >, FFT >::readFieldsRGrid ( std::string filename,
DArray< RField< D > > & fields,
UnitCell< D > & unitCell ) const

Read an array of r-grid fields from a named file.

This function opens an input file with the specified filename, reads fields in real-space grid format from that file, and then closes the file. The overloaded readFieldsRGrid member function that takes a std::istream& argument is called to read the file.

Parameters
filenamename of input file
fieldsarray of r-grid fields (instances of RFT)
unitCellassociated crystallographic unit cell
Returns
true iff header declares a space group

◆ readFieldRGrid() [2/2]

template<int D>
bool Pscf::Rp::FieldIo< D, RField< D >, RFieldDft< D >, FFT >::readFieldRGrid ( std::string filename,
RField< D > & field,
UnitCell< D > & unitCell ) const

Read a single r-grid field from a named file.

This function opens an input file with the specified filename, reads a field in real-space grid format from that file, and then closes the file. The overloaded readFieldRGrid member function that takes a std::istream& argument is called to read the file.

Parameters
filenamename of input file
fieldsingle field defined on r-space grid
unitCellassociated crystallographic unit cell
Returns
true iff header has a space group (isSymmetric flag)

◆ writeFieldsRGrid() [2/2]

template<int D>
void Pscf::Rp::FieldIo< D, RField< D >, RFieldDft< D >, FFT >::writeFieldsRGrid ( std::string filename,
DArray< RField< D > > const & fields,
UnitCell< D > const & unitCell,
bool isSymmetric = true ) const

Write an array of r-grid fields to a named file.

This function opens a file, writes field file header and data to the file, and closes the file. The overloaded writeFieldsGrid member function that takes a std::ostream& argument is called internally with writeHeader == true to write the data.

Parameters
filenamename of output file
fieldsarray of RFT objects (fields on r-space grid)
unitCellassociated crystallographic unit cell
isSymmetriciff true, write space group name

◆ writeFieldRGrid() [2/2]

template<int D>
void Pscf::Rp::FieldIo< D, RField< D >, RFieldDft< D >, FFT >::writeFieldRGrid ( std::string filename,
RField< D > const & field,
UnitCell< D > const & unitCell,
bool isSymmetric = true ) const

Write a single r-grid field to a named file.

This function opens a file, writes the header and data for a single field to the file, and closes that file. The overloaded writeFieldGrid member function that takes a std::ostream& argument is called internally with writeHeader == true to write the file.

Parameters
filenamename of output file
fieldfield defined on r-space grid
unitCellassociated crystallographic unit cell
isSymmetriciff true, write space group name

◆ readFieldsKGrid() [2/2]

template<int D>
void Pscf::Rp::FieldIo< D, RField< D >, RFieldDft< D >, FFT >::readFieldsKGrid ( std::string filename,
DArray< RFieldDft< D > > & fields,
UnitCell< D > & unitCell ) const

Read an array of k-grid fields from a named file.

This function opens a file with name filename, reads discrete Fourier components (Dft) of fields from that file, and closes the file. The overloaded readFieldsKGrid member function that takes a std::istream& argument is called to read the file.

Parameters
filenamename of input file
fieldsarray of k-space (KFT) fields
unitCellassociated crystallographic unit cell

◆ writeFieldsKGrid() [2/2]

template<int D>
void Pscf::Rp::FieldIo< D, RField< D >, RFieldDft< D >, FFT >::writeFieldsKGrid ( std::string filename,
DArray< RFieldDft< D > > const & fields,
UnitCell< D > const & unitCell,
bool isSymmetric = true ) const

Write an array of k-grid fields to a named file.

This function opens a file with name filename, writes discrete Fourier transform components (DFT) components of fields to that file, and closes the file.

Parameters
filenamename of output file.
fieldsarray of Fourier-grid fields (instances of KFT)
unitCellassociated crystallographic unit cell
isSymmetriciff true, write space group name

◆ replicateUnitCell() [2/3]

template<int D>
void Pscf::Rp::FieldIo< D, RField< D >, RFieldDft< D >, FFT >::replicateUnitCell ( std::string filename,
DArray< RField< D > > const & fields,
UnitCell< D > const & unitCell,
IntVec< D > const & replicas ) const

Write r-grid fields in a replicated unit cell to a named file.

This function opens output file filename, writes fields within a replicated unit cell to the file, and closes the file. See documentation of the overloaded function of the same name with a std::ostream parameter, which is called internally.

Parameters
filenameoutput file name
fieldsarray of RField fields (r-space grid) needs
unitCelloriginal crystallographic unit cell
replicasnumber of unit cell replicas in each direction

◆ replicateUnitCell() [3/3]

template<int D>
void Pscf::Rp::FieldIo< D, RField< D >, RFieldDft< D >, FFT >::replicateUnitCell ( std::string const & inFileName,
std::string const & outFileName,
IntVec< D > const & replicas ) const

Write replicated fields read from one file to another.

This function reads a field file in r-grid format, and writes replicated fields to another file.

Parameters
inFileNamename of input field file
outFileNamename of output field file
replicasthe number of replicas in each D direction

◆ expandRGridDimension() [2/3]

template<int D>
void Pscf::Rp::FieldIo< D, RField< D >, RFieldDft< D >, FFT >::expandRGridDimension ( std::string filename,
DArray< RField< D > > const & fields,
UnitCell< D > const & unitCell,
int d,
DArray< int > newGridDimensions ) const

Increase D for an array of r-grid fields, write to a named file.

This function opens an output file with the specified filename, writes expanded fields in RField<d> real-space grid format to that file, and then closes the file. The overloaded function of the same name with an std::ostream parameter is called internally.

Parameters
filenamename of output file
fieldsinput array of RFT objects (r-space grid)
unitCelloriginal crystallographic unit cell
dexpanded dimension (greater than D)
newGridDimensionsnumber of grid points in added dimensions

◆ expandRGridDimension() [3/3]

template<int D>
void Pscf::Rp::FieldIo< D, RField< D >, RFieldDft< D >, FFT >::expandRGridDimension ( std::string const & inFileName,
std::string const & outFileName,
int d,
DArray< int > newGridDimensions ) const

Increase D for an r-grid field file.

This function reads an array of fields in D-dimensional space from an r-grid field file and writes expanded fields in d-dimensional space to another file.

Parameters
inFileNamefilename name of input field file
outFileNamefilename name of output field file
dintended dimensions (d > D)
newGridDimensionsnumber of grid points in added dimensions

◆ convertBasisToKGrid() [2/3]

template<int D>
void Pscf::Rp::FieldIo< D, RField< D >, RFieldDft< D >, FFT >::convertBasisToKGrid ( DArray< DArray< double > > const & in,
DArray< RFieldDft< D > > & out ) const

Convert an array of fields from basis to Fourier (k-grid) form.

The in and out parameters are arrays of fields, in which element number i is the field associated with monomer type i.

Parameters
infields expanded in symmetry-adapted Fourier basis
outfields defined as discrete Fourier transforms (k-grid)

◆ convertBasisToKGrid() [3/3]

template<int D>
void Pscf::Rp::FieldIo< D, RField< D >, RFieldDft< D >, FFT >::convertBasisToKGrid ( std::string const & inFileName,
std::string const & outFileName ) const

Convert a field file from basis to Fourier (k-grid) format.

The number of monomers in the input file must equal the number set by the setNMonomer(int) member function.

Parameters
inFileNamename of input file (basis format)
outFileNamename of output file (k-grid format)

◆ convertKGridToBasis() [2/3]

template<int D>
void Pscf::Rp::FieldIo< D, RField< D >, RFieldDft< D >, FFT >::convertKGridToBasis ( DArray< RFieldDft< D > > const & in,
DArray< DArray< double > > & out,
bool checkSymmetry = true,
double epsilon = 1.0e-8 ) const

Convert an array of fields from Fourier (k-grid) to basis form.

If the checkSymmetry parameter is true, this function checks if the input fields all satisfies the space group symmetry to within a tolerance given by the parameter epsilon, and prints a warning to Log::file() for each field that does not.

Parameters
infields defined as discrete Fourier transforms (k-grid)
outcomponents of fields in symmetry adapted basis
checkSymmetryflag indicate whether to check symmetry
epsilonerror tolerance for symmetry test (if any)

◆ convertKGridToBasis() [3/3]

template<int D>
void Pscf::Rp::FieldIo< D, RField< D >, RFieldDft< D >, FFT >::convertKGridToBasis ( std::string const & inFileName,
std::string const & outFileName ) const

Convert a field file from Fourier (k-grid) to basis format.

The number of monomers in the input file must equal the number set by the setNMonomer(int) member function.

This function checks if the input fields have the declared space group symmetry, and prints a warning if it detects deviations that exceed some small threshhold, but proceeds to attempt the conversion even if such an error is detected. Converting a field that does not have the declared space group symmetry to basis format is a destructive operation that modifies the field in unpredictable ways.

Parameters
inFileNamename of input file (k-grid format)
outFileNamename of output file (basis format)

◆ hasSymmetry() [2/3]

template<int D>
bool Pscf::Rp::FieldIo< D, RField< D >, RFieldDft< D >, FFT >::hasSymmetry ( RField< D > const & in,
double epsilon = 1.0e-8,
bool verbose = true ) const

Check if an r-grid field has the declared space group symmetry.

This function checks whether a field defined on the nodes of a regular real-space grid is invariant under all the symmetry operations of a declared space group to within an error threshhold given by function parameter epsilon. If parameter verbose is true and the deviation from symmetry exceeds the error threshhold, errors are written to Log::file().

Parameters
infield in real space grid (r-grid) format
epsilonerror threshold used to test for symmetry
verboseif true, write error to Log::file()
Returns
true if the field is symmetric, false otherwise

◆ hasSymmetry() [3/3]

template<int D>
bool Pscf::Rp::FieldIo< D, RField< D >, RFieldDft< D >, FFT >::hasSymmetry ( std::string const & inFileName,
double epsilon = 1.0E-8 ) const

Check if an r-grid field file has declared space group symmetry.

Parameters
inFileNamename of input r-grid field file
epsilonerror threshold used when testing for symmetry
Returns
true if fields all have symmetry, false otherwise

◆ compareFieldsRGrid() [2/2]

template<int D>
void Pscf::Rp::FieldIo< D, RField< D >, RFieldDft< D >, FFT >::compareFieldsRGrid ( std::string const & filename1,
std::string const & filename2 ) const

Compare two r-grid field files, write a report to Log file.

Parameters
filename1name of 1st field file
filename2name of 2nd field file

◆ scaleFieldsRGrid() [1/2]

template<int D>
void Pscf::Rp::FieldIo< D, RField< D >, RFieldDft< D >, FFT >::scaleFieldsRGrid ( DArray< RField< D > > & fields,
double factor ) const

Scale an array of r-grid fields by a scalar.

This function takes an array of real periodic fields and multiplies all elements in place by a common real scalar, thereby modifying the input.

Parameters
fieldsarray of r-grid (RFT) fields to be rescaled
factorfactor by which to multiply every field element

◆ scaleFieldsRGrid() [2/2]

template<int D>
void Pscf::Rp::FieldIo< D, RField< D >, RFieldDft< D >, FFT >::scaleFieldsRGrid ( std::string const & inFileName,
const std::string & outFileName,
double factor ) const

Multiply all fields in an r-grid field file by a scalar.

Read a set of fields from a file, multiply fields by a constant, and write rescaled fields to a different file.

Parameters
inFileNamename of input field file
outFileNamename of file for rescaled output fields
factorfactor by which to multiply all field elements

The documentation for this class was generated from the following files: