1#ifndef PRDC_CL_FIELD_IO_H
2#define PRDC_CL_FIELD_IO_H
11#include <prdc/crystal/UnitCell.h>
12#include <pscf/math/IntVec.h>
13#include <util/containers/DArray.h>
20 template <
int D>
class Mesh;
61 template <
int D,
class CFT,
class FFT>
178 int nMonomer)
const = 0;
230 bool writeHeader =
true,
231 bool writeMeshSize =
true)
const = 0;
266 bool writeHeader =
true)
const = 0;
312 std::string
const & outFileName)
const;
337 std::string
const & outFileName)
const;
363 void compareFields(std::string
const & filename1,
364 std::string
const & filename2)
const;
433 return *fileMasterPtr_;
486 mutable bool isAllocated_;
void convertRGridToKGrid(std::string const &inFileName, std::string const &outFileName) const
Fourier transform a field file from r-grid to k-grid format.
void readFieldHeader(std::istream &in, int &nMonomer, UnitCell< D > &unitCell) const
Reader header of field file (fortran PSCF format)
void checkAllocate() const
Check if r-grid workspace is allocated, allocate if necessary.
virtual void writeFields(std::ostream &out, DArray< CFT > const &fields, UnitCell< D > const &unitCell, bool writeHeader=true, bool writeMeshSize=true) const =0
Write an array of complex fields to an output stream.
void writeFieldHeader(std::ostream &out, int nMonomer, UnitCell< D > const &unitCell) const
Write header for field file (fortran pscf format).
virtual void readFieldsData(std::istream &in, DArray< CFT > &fields, int nMonomer) const =0
Read data for array of r-grid fields, with no header section.
void convertKGridToRGrid(DArray< CFT > const &in, DArray< CFT > &out) const
Fourier transform an array of fields from k-grid to r-grid format.
void convertKGridToRGrid(std::string const &inFileName, std::string const &outFileName) const
Transform a field file from Fourier (k-grid) to r-grid format.
FileMaster const & fileMaster() const
void readField(std::string filename, CFT &field, UnitCell< D > &unitCell) const
Read a single field from a named file.
virtual void readFields(std::istream &in, DArray< CFT > &fields, UnitCell< D > &unitCell) const =0
Read array of complex fields from an input stream.
void writeFields(std::string filename, DArray< CFT > const &fields, UnitCell< D > const &unitCell) const
Write an array of complex fields to a named file.
void setNMonomer(int nMonomer)
Set the number of monomer types.
void readFields(std::string filename, DArray< CFT > &fields, UnitCell< D > &unitCell) const
Read an array of complex fields from a named file.
void writeField(std::string filename, CFT const &field, UnitCell< D > const &unitCell) const
Write a single complex field to a named file.
void convertRGridToKGrid(DArray< CFT > const &in, DArray< CFT > &out) const
Fourier transform array of fields from r-grid to k-grid format.
virtual void readField(std::istream &in, CFT &field, UnitCell< D > &unitCell) const =0
Read a single r-grid field from an input stream.
Mesh< D > const & mesh() const
UnitCell< D >::LatticeSystem const & lattice() const
void setFileMaster(FileMaster const &fileMaster)
Create an association with a FileMaster.
virtual ~FieldIo()
Destructor.
void associate(Mesh< D > const &mesh, FFT const &fft, typename UnitCell< D >::LatticeSystem const &lattice)
Create associations with other members of the parent Domain.
virtual void writeField(std::ostream &out, CFT const &field, UnitCell< D > const &unitCell, bool writeHeader=true) const =0
Write a single complex field to an an output stream.
Description of a regular grid of points in a periodic domain.
Fourier transform wrapper.
Base template for UnitCell<D> classes, D=1, 2 or 3.
Dynamically allocatable contiguous array template.
A FileMaster manages input and output files for a simulation.
#define UTIL_ASSERT(condition)
Assertion macro suitable for debugging serial or parallel code.
Complex-valued periodic fields (class templates).
Periodic fields and crystallography.
PSCF package top-level namespace.
Utility classes for scientific computation.