1#ifndef CPC_FIELD_IO_TPP
2#define CPC_FIELD_IO_TPP
12#include <pscf/cpu/complex.h>
15#include <prdc/field/fieldCheck.h>
16#include <prdc/crystal/UnitCell.h>
17#include <prdc/cpu/CFieldComparison.h>
18#include <prdc/field/cFieldIo.h>
19#include <prdc/field/rFieldIo.h>
20#include <pscf/mesh/Mesh.h>
21#include <pscf/math/IntVec.h>
23#include <cp/field/FieldIo.tpp>
30 using namespace Prdc::Cpu;
119 bool writeMeshSize)
const
150 bool writeHeader)
const
179 comparison.
compare(field1, field2);
181 Log::file() <<
"\n Real-space field comparison results"
183 Log::file() <<
" Maximum Absolute Difference: "
184 << comparison.
maxDiff() << std::endl;
185 Log::file() <<
" Root-Mean-Square Difference: "
186 << comparison.
rmsDiff() <<
"\n" << std::endl;
File input/output operations for fields.
void writeFields(std::ostream &out, DArray< CField< D > > const &fields, UnitCell< D > const &unitCell, bool writeHeader=true, bool writeMeshSize=true) const override
Write array of CField objects (fields on r-space grid) to a stream.
void readFields(std::istream &in, DArray< CField< D > > &fields, UnitCell< D > &unitCell) const override
Read multiple complex-valued fields from an input stream.
void readField(std::istream &in, CField< D > &field, UnitCell< D > &unitCell) const override
Read a single CField (field on an r-space grid) from a stream.
void readFieldsData(std::istream &in, DArray< CField< D > > &fields, int nMonomer) const override
Read data for multiple complex fields, with no header section.
void readFieldsRGrid(std::istream &in, DArray< CField< D > > &fields, UnitCell< D > &unitCell) const
Read multiple real value field in r-grid format.
void writeField(std::ostream &out, CField< D > const &field, UnitCell< D > const &unitCell, bool writeHeader=true) const override
Write a single CField (field on an r-space grid) to a stream.
Mesh< D > const & mesh() const
Get spatial discretization mesh by const reference.
An IntVec<D, T> is a D-component vector of elements of integer type T.
Comparator for CField (k-grid) arrays.
double compare(CField< D > const &a, CField< D > const &b)
Compare individual fields.
double rmsDiff() const
Return the precomputed root-mean-squared difference.
double maxDiff() const
Return the precomputed maximum element-by-element difference.
Field of complex double precision values on an FFT mesh.
const IntVec< D > & meshDimensions() const
Return mesh dimensions by constant reference.
double RealType
Type of real and imaginary parts of a complex value.
Base template for UnitCell<D> classes, D=1, 2 or 3.
Dynamically allocatable contiguous array template.
static std::ostream & file()
Get log ostream by reference.
#define UTIL_CHECK(condition)
Assertion macro suitable for serial or parallel production code.
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 writeCFieldsData(std::ostream &out, DArray< AT > const &fields, IntVec< D > const &dimensions)
Write data for an array of complex fields, with no header section.
void readCFieldData(std::istream &in, AT &field, IntVec< D > const &dimensions)
Read data for a single complex field, with no header section.
void inspectFields(DArray< FT > const &fields, int &nMonomer, IntVec< D > &dimensions)
Inspect dimensions of a DArray of fields, each of type FT.
void writeMeshDimensions(std::ostream &out, IntVec< D > const &meshDimensions)
Write mesh dimensions to a field file header.
void writeCFieldData(std::ostream &out, AT const &field, IntVec< D > const &dimensions)
Write data for a single complex field, with no header section.
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 readCFieldsData(std::istream &in, DArray< AT > &fields, IntVec< D > const &dimensions)
Read data for an array of complex fields, with no header section.
void readMeshDimensions(std::istream &in, IntVec< D > const &meshDimensions)
Read mesh dimensions from a field file 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.
Complex periodic fields, CL-FTS (CPU).
Periodic fields and crystallography.
PSCF package top-level namespace.