11#include <prdc/crystal/UnitCell.h>
12#include <pscf/math/IntVec.h>
13#include <util/containers/DArray.h>
18 template <
typename T>
class DMatrix;
21 template <
int D>
class Mesh;
23 template <
int D>
class Basis;
82 template <
int D,
class RFT,
class KFT,
class FFT>
351 int nMonomer)
const = 0;
408 bool writeHeader =
true,
409 bool isSymmetric =
true,
410 bool writeMeshSize =
true)
const = 0;
428 bool isSymmetric =
true)
const;
448 bool writeHeader =
true,
449 bool isSymmetric =
true)
const = 0;
468 bool isSymmetric =
true)
const;
528 bool isSymmetric =
true)
const = 0;
545 bool isSymmetric =
true)
const;
589 bool checkSymmetry =
true,
590 double epsilon = 1.0e-8)
const = 0;
607 bool checkSymmetry =
true,
608 double epsilon = 1.0e-8)
const;
644 bool checkSymmetry =
true,
645 double epsilon = 1.0e-8)
const;
663 bool checkSymmetry =
true,
664 double epsilon = 1.0e-8)
const;
733 std::string
const & outFileName)
const;
753 std::string
const & outFileName)
const;
765 std::string
const & outFileName)
const;
777 std::string
const & outFileName)
const;
797 std::string
const & outFileName)
const;
809 std::string
const & outFileName)
const;
833 double epsilon = 1.0e-8,
834 bool verbose =
true)
const = 0;
853 double epsilon = 1.0e-8,
854 bool verbose =
true)
const;
864 double epsilon = 1.0E-8)
const;
890 std::string
const & filename2)
const;
912 std::string
const & filename2)
const;
930 double factor)
const;
943 double factor)
const;
953 std::string
const & outFileName,
954 double factor)
const;
992 const std::string & outFileName,
993 double factor)
const;
1037 std::string
const & outFileName,
1095 std::string
const & outFileName,
1161 std::string
const & outFileName,
1217 bool & isSymmetric)
const;
1230 bool isSymmetric =
true)
const;
1260 return *fileMasterPtr_;
1283 return *latticePtr_;
1292 return *hasGroupPtr_;
1301 return *groupNamePtr_;
1349 FFT const * fftPtr_;
1355 bool const * hasGroupPtr_;
1358 std::string
const * groupNamePtr_;
1384 mutable KFT workDft_;
1387 mutable bool isAllocatedBasis_;
1390 mutable bool isAllocatedRGrid_;
1393 mutable bool isAllocatedKGrid_;
An IntVec<D, T> is a D-component vector of elements of integer type T.
Description of a regular grid of points in a periodic domain.
Symmetry-adapted Fourier basis for pseudo-spectral SCFT.
Fourier transform wrapper.
Crystallographic space group.
Base template for UnitCell<D> classes, D=1, 2 or 3.
virtual void scaleFieldRGrid(RFT &field, double factor) const =0
Multiply a single field in r-grid format by a scalar.
virtual void writeFieldsRGrid(std::ostream &out, DArray< RFT > const &fields, UnitCell< D > const &unitCell, bool writeHeader=true, bool isSymmetric=true, bool writeMeshSize=true) const =0
Write an array of r-grid fields to an output stream.
virtual void scaleFieldBasis(DArray< double > &field, double factor) const
Multiply a single field in basis form by a real scalar.
virtual void convertKGridToBasis(KFT const &in, DArray< double > &out, bool checkSymmetry=true, double epsilon=1.0e-8) const =0
Convert a single field from Fourier (k-grid) to basis form.
bool hasSymmetry(std::string const &inFileName, double epsilon=1.0E-8) const
Check if an r-grid field file has declared space group symmetry.
Mesh< D > const & mesh() const
void writeFieldsRGrid(std::string filename, DArray< RFT > const &fields, UnitCell< D > const &unitCell, bool isSymmetric=true) const
Write an array of r-grid fields to a named file.
virtual bool readFieldRGrid(std::istream &in, RFT &field, UnitCell< D > &unitCell) const =0
Read a single r-grid field from an input stream.
virtual void convertBasisToKGrid(DArray< double > const &components, KFT &dft) const =0
Convert a single field from basis to Fourier (k-grid) form.
virtual void compareFieldsRGrid(DArray< RFT > const &field1, DArray< RFT > const &field2) const =0
Compare two fields in r-grid form, write a report to Log file.
void readFieldBasis(std::string filename, DArray< double > &field, UnitCell< D > &unitCell) const
Read a single field in basis format from a named file.
bool readFieldRGrid(std::string filename, RFT &field, UnitCell< D > &unitCell) const
Read a single r-grid field from a named file.
void convertBasisToRGrid(DArray< DArray< double > > const &in, DArray< RFT > &out) const
Convert an array of fields from basis to r-grid format.
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 writeFieldBasis(std::string filename, DArray< double > const &field, UnitCell< D > const &unitCell) const
Write single field in basis format to a named file.
void checkAllocateBasis(std::string const &inFileName) const
Check if basis workspace is allocated, allocate if necessary.
void setNMonomer(int nMonomer)
Set the number of monomer types.
void convertKGridToRGrid(KFT const &in, RFT &out) const
Convert a single field from k-grid to r-grid format.
void convertBasisToRGrid(std::string const &inFileName, std::string const &outFileName) const
Convert a field file from basis format to r-grid format.
virtual bool hasSymmetry(KFT const &in, double epsilon=1.0e-8, bool verbose=true) const =0
Check if a k-grid field has the declared space group symmetry.
void convertBasisToKGrid(std::string const &inFileName, std::string const &outFileName) const
Convert a field file from basis to Fourier (k-grid) format.
void scaleFieldsBasis(DArray< DArray< double > > &fields, double factor) const
Multiply an array of fields in basis format by a real scalar.
virtual void replicateUnitCell(std::ostream &out, DArray< RFT > const &fields, UnitCell< D > const &unitCell, IntVec< D > const &replicas) const =0
Write r-grid fields in a replicated unit cell to std::ostream.
void expandRGridDimension(std::string filename, DArray< RFT > 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 compareFieldsRGrid(std::string const &filename1, std::string const &filename2) const
Compare two r-grid field files, write a report to Log 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 checkAllocateRGrid() const
Check if r-grid workspace is allocated, allocate if necessary.
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 convertRGridToKGrid(DArray< RFT > const &in, DArray< KFT > &out) const
Convert an array of fields from r-grid to k-grid (Fourier) format.
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 convertKGridToBasis(std::string const &inFileName, std::string const &outFileName) const
Convert a field file from Fourier (k-grid) to basis format.
FileMaster const & fileMaster() const
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 convertKGridToBasis(DArray< KFT > 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 convertRGridToBasis(RFT 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 checkAllocateKGrid() const
Check if k-grid workspace is allocated, allocate if necessary.
void estimateWBasis(DMatrix< double > const &chi, DArray< DArray< double > > &fields) const
Convert c fields to estimated w fields, in basis format.
void convertBasisToRGrid(DArray< double > const &in, RFT &out) const
Convert a single field from basis to r-grid format.
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 replicateUnitCell(std::string const &inFileName, std::string const &outFileName, IntVec< D > const &replicas) const
Write replicated fields read from one file to another.
void convertRGridToBasis(std::string const &inFileName, std::string const &outFileName) const
Convert a field file from r-grid to basis format.
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 scaleFieldsRGrid(DArray< RFT > &fields, double factor) const
Scale an array of r-grid fields by a scalar.
void writeFieldsKGrid(std::string filename, DArray< KFT > const &fields, UnitCell< D > const &unitCell, bool isSymmetric=true) const
Write an array of k-grid fields to a named file.
void writeFieldHeader(std::ostream &out, int nMonomer, UnitCell< D > const &unitCell, bool isSymmetric=true) const
Write header for field file (fortran pscf format).
void convertRGridToBasis(DArray< RFT > 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.
virtual void readFieldsKGrid(std::istream &in, DArray< KFT > &fields, UnitCell< D > &unitCell) const =0
Read an array of k-grid fields from an input stream.
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 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.
UnitCell< D >::LatticeSystem const & lattice() const
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.
virtual void expandRGridDimension(std::ostream &out, DArray< RFT > const &fields, UnitCell< D > const &unitCell, int d, DArray< int > const &newGridDimensions) const =0
Increase D for an array of r-grid fields, write to ostream.
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.
virtual void readFieldsRGridData(std::istream &in, DArray< RFT > &fields, int nMonomer) const =0
Read data for array of r-grid fields, with no header section.
void writeFieldRGrid(std::string filename, RFT 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< KFT > &fields, UnitCell< D > &unitCell) const
Read an array of k-grid fields from a named file.
std::string const & groupName() const
void convertKGridToRGrid(DArray< KFT > const &in, DArray< RFT > &out) const
Convert an array of field from k-grid to r-grid format.
void compareFieldsBasis(std::string const &filename1, std::string const &filename2) const
Compare two r-grid field files, write a report to Log file.
void convertRGridToKGrid(std::string const &inFileName, std::string const &outFileName) const
Convert a field file from r-grid to Fourier (k-grid) format.
virtual void writeFieldRGrid(std::ostream &out, RFT const &field, UnitCell< D > const &unitCell, bool writeHeader=true, bool isSymmetric=true) const =0
Write a single r-grid field to an an output stream.
void convertRGridToKGrid(RFT const &in, KFT &out) const
Convert a field from r-grid to k-grid (Fourier) format.
void readFieldHeader(std::istream &in, int &nMonomer, UnitCell< D > &unitCell, bool &isSymmetric) const
Reader header of field file (fortran PSCF format)
void replicateUnitCell(std::string filename, DArray< RFT > const &fields, UnitCell< D > const &unitCell, IntVec< D > const &replicas) const
Write r-grid fields in a replicated unit cell to a named file.
SpaceGroup< D > const & group() const
void setFileMaster(FileMaster const &fileMaster)
Create an association with a FileMaster.
bool hasSymmetry(RFT const &in, double epsilon=1.0e-8, bool verbose=true) const
Check if an r-grid field has the declared space group symmetry.
Basis< D > const & basis() const
virtual bool readFieldsRGrid(std::istream &in, DArray< RFT > &fields, UnitCell< D > &unitCell) const =0
Read array of r-grid fields from an input stream.
virtual void writeFieldsKGrid(std::ostream &out, DArray< KFT > const &fields, UnitCell< D > const &unitCell, bool isSymmetric=true) const =0
Write an array of k-grid fields to a output stream.
bool readFieldsRGrid(std::string filename, DArray< RFT > &fields, UnitCell< D > &unitCell) const
Read an array of r-grid fields from a named file.
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 convertKGridToRGrid(std::string const &inFileName, std::string const &outFileName) const
Convert a field file from Fourier (k-grid) to r-grid format.
void convertBasisToKGrid(DArray< DArray< double > > const &in, DArray< KFT > &out) const
Convert an array of fields from basis to Fourier (k-grid) form.
~FieldIo()=default
Destructor.
Dynamically allocatable contiguous array template.
Dynamically allocated Matrix.
A FileMaster manages input and output files for a simulation.
#define UTIL_ASSERT(condition)
Assertion macro suitable for debugging serial or parallel code.
Periodic fields and crystallography.
Class templates for real-valued periodic fields.
PSCF package top-level namespace.
Utility classes for scientific computation.