1#ifndef PRDC_FIELD_IO_UTIL_H 
    2#define PRDC_FIELD_IO_UTIL_H 
   11#include <pscf/math/IntVec.h>    
   15   template <
typename T> 
class DArray;
 
   18   template <
int D> 
class Mesh;
 
   21      template <
int D> 
class Basis;
 
   54   template <
int D, 
class FT>
 
   80   template <
int D, 
class FT>
 
  101   template <
int D, 
class FT>
 
  127   template <
int D, 
class AT>
 
  191                         std::string 
const & groupName,
 
  240   template <
int D, 
class AT>
 
  261   template <
int D, 
class AT>
 
  282   template <
int D, 
class AT>
 
  303   template <
int D, 
class AT>
 
  326   template <
int D, 
class AT>
 
  347   template <
int D, 
class AT>
 
  368   template <
int D, 
class AT>
 
  389   template <
int D, 
class AT>
 
  517   template <
int D, 
class AT>
 
  540   template <
int D, 
class AT>
 
  545                            bool checkSymmetry = 
true,
 
  546                            double epsilon = 1.0e-8);
 
  566   template <
int D, 
class AT>
 
  570                    double epsilon = 1.0e-8,
 
  571                    bool verbose = 
true);
 
  594   template <
int D, 
class AT>
 
  633   template <
int D, 
class AT>
 
  643#include "fieldIoUtil.tpp" 
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.
 
Base template for UnitCell<D> classes, D=1, 2 or 3.
 
Dynamically allocatable contiguous array template.
 
void replicateUnitCell(IntVec< 1 > const &replicas, UnitCell< 1 > const &cellIn, UnitCell< 1 > &cellOut)
Create a replicated UnitCell<1>.
 
void writeFieldHeader(std::ostream &out, int ver1, int ver2, UnitCell< D > const &cell, std::string const &groupName, int nMonomer)
Write common part of field header (fortran PSCF format).
 
void readFieldHeader(std::istream &in, int &ver1, int &ver2, UnitCell< D > &cell, std::string &groupName, int &nMonomer)
Read common part of field header (fortran PSCF format).
 
void writeKGridData(std::ostream &out, DArray< AT > const &fields, int nMonomer, IntVec< D > const &dftDimensions)
Write data for array of k-grid fields, with no header section.
 
void writeNBasis(std::ostream &out, int nBasis)
Write the number of basis functions to a basis field file header.
 
bool hasSymmetry(AT const &in, Basis< D > const &basis, IntVec< D > const &dftDimensions, double epsilon=1.0e-8, bool verbose=true)
Check if a k-grid field has the declared space group symmetry.
 
void inspectArrays(DArray< AT > const &arrays, int &nMonomer, int &capacity)
Inspect dimensions of a DArray of 1D arrays, each of type AT.
 
void inspectFields(DArray< FT > const &fields, int &nMonomer, IntVec< D > &dimensions)
Inspect dimensions of a DArray of fields, each of type FT.
 
void checkAllocateArrays(DArray< AT > &arrays, int nMonomer, int capacity)
Check allocation of a DArray of 1D arrays, allocate if necessary.
 
void readKGridData(std::istream &in, DArray< AT > &fields, int nMonomer, IntVec< D > const &dftDimensions)
Read data for array of k-grid fields, with no header section.
 
void convertBasisToKGrid(DArray< double > const &components, AT &dft, Basis< D > const &basis, IntVec< D > const &dftDimensions)
Convert a real field from symmetrized basis to Fourier grid.
 
void writeMeshDimensions(std::ostream &out, IntVec< D > const &meshDimensions)
Write mesh dimensions to a field file header.
 
void expandRGridDimension(std::ostream &out, DArray< AT > const &fields, IntVec< D > const &meshDimensions, UnitCell< D > const &unitCell, int d, DArray< int > newGridDimensions)
Expand the dimensionality of space from D to d.
 
void writeRGridData(std::ostream &out, DArray< AT > const &fields, int nMonomer, IntVec< D > const &dimensions)
Write data for array of r-grid fields, with no header section.
 
void convertKGridToBasis(AT const &in, DArray< double > &out, Basis< D > const &basis, IntVec< D > const &dftDimensions, bool checkSymmetry=true, double epsilon=1.0e-8)
Convert a real field from Fourier grid to symmetrized basis.
 
int readNBasis(std::istream &in)
Read the number of basis functions from a basis field file header.
 
void readRGridData(std::istream &in, DArray< AT > &fields, int nMonomer, IntVec< D > const &dimensions)
Read data for array of r-grid fields, with no header section.
 
void readMeshDimensions(std::istream &in, IntVec< D > const &meshDimensions)
Read mesh dimensions from a field file header.
 
void writeBasisData(std::ostream &out, DArray< DArray< double > > const &fields, Basis< D > const &basis)
Write data section of an array of fields in basis format.
 
void readBasisData(std::istream &in, DArray< DArray< double > > &fields, UnitCell< D > const &unitCell, Mesh< D > const &mesh, Basis< D > const &basis, int nStarIn)
Read an array of fields in basis format, without a header.
 
void checkAllocateFields(DArray< FT > &fields, int nMonomer, IntVec< D > const &dimensions)
Check allocation of an array of fields, allocate if necessary.
 
void checkAllocateField(FT &field, IntVec< D > const &dimensions)
Check allocation of a single field, allocate if necessary.
 
Periodic fields and crystallography.
 
PSCF package top-level namespace.
 
Utility classes for scientific computation.