PSCF v1.4.0
cpc/field/FieldIo.h
1#ifndef CPC_FIELD_IO_H
2#define CPC_FIELD_IO_H
3
4/*
5* PSCF - Polymer Self-Consistent Field
6*
7* Copyright 2015 - 2025, The Regents of the University of Minnesota
8* Distributed under the terms of the GNU General Public License.
9*/
10
11#include <cp/field/FieldIo.h> // base class template
12#include <prdc/cpu/CField.h> // base class template argument
13#include <prdc/cpu/FFT.h> // base class template argument
14
15// Forward declarations
16namespace Util {
17 class FileMaster;
18 template <typename T> class DArray;
19}
20namespace Pscf {
21 namespace Prdc {
22 template <int D> class UnitCell;
23 }
24}
25
26// Explicit instantiation declaration for base class
27namespace Pscf {
28 namespace Cp {
29 using namespace Prdc::Cpu;
30 extern template class FieldIo<1, CField<1>, FFT<1> >;
31 extern template class FieldIo<2, CField<2>, FFT<2> >;
32 extern template class FieldIo<3, CField<3>, FFT<3> >;
33 }
34}
35
36namespace Pscf {
37namespace Cpc {
38
39 using namespace Util;
40 using namespace Pscf::Prdc;
41 using namespace Pscf::Prdc::Cpu;
42
65 template <int D>
66 class FieldIo
67 : public Cp::FieldIo< D, CField<D>, FFT<D> >
68 {
69
70 public:
71
74
84 void readFields(std::istream& in,
85 DArray< CField<D> >& fields,
86 UnitCell<D> & unitCell) const override;
87
97 void readFieldsData(std::istream& in,
98 DArray< CField<D> >& fields,
99 int nMonomer) const override;
100
110 void readField(std::istream &in,
111 CField<D> & field,
112 UnitCell<D>& unitCell) const override;
113
129 void readFieldsRGrid(std::istream &in,
130 DArray< CField<D> > & fields,
131 UnitCell<D>& unitCell) const;
132
136
148 void writeFields(std::ostream& out,
149 DArray< CField<D> > const & fields,
150 UnitCell<D> const & unitCell,
151 bool writeHeader = true,
152 bool writeMeshSize = true) const override;
153
164 void writeField(std::ostream &out,
165 CField<D> const & field,
166 UnitCell<D> const & unitCell,
167 bool writeHeader = true) const override;
168
170 #if 0
173
183 void compareFields(DArray< CField<D> > const & field1,
184 DArray< CField<D> > const & field2)
185 const override;
186 #endif
187
190
191 // Inherited public member functions
192 using Base::associate;
194 using Base::readFields;
196 using Base::readField;
197 using Base::writeFields;
198 using Base::writeField;
199 //using Base::convertKGridToRGrid;
200 //using Base::convertRGridToKGrid;
201 //using Base::compareFieldsRGrid;
204 using Base::mesh;
205 using Base::fileMaster;
206
207 protected:
208
209 // Inherited protected member functions
210 using Base::lattice;
211 using Base::fft;
212
213 };
214
215 // Explicit instantiation declarations
216 extern template class FieldIo<1>;
217 extern template class FieldIo<2>;
218 extern template class FieldIo<3>;
219
220} // namespace Cpc
221
222} // namespace Pscf
223#endif
File IO and other utilities for complex fields.
void readFieldHeader(std::istream &in, int &nMonomer, UnitCell< D > &unitCell) const
virtual void writeFields(std::ostream &out, DArray< CField< D > > const &fields, UnitCell< D > const &unitCell, bool writeHeader=true, bool writeMeshSize=true) const=0
void writeFieldHeader(std::ostream &out, int nMonomer, UnitCell< D > const &unitCell) const
virtual void readFieldsData(std::istream &in, DArray< CField< D > > &fields, int nMonomer) const=0
virtual void readFields(std::istream &in, DArray< CField< D > > &fields, UnitCell< D > &unitCell) const=0
virtual void readField(std::istream &in, CField< D > &field, UnitCell< D > &unitCell) const=0
UnitCell< D >::LatticeSystem const & lattice() const
void setFileMaster(FileMaster const &fileMaster)
void associate(Mesh< D > const &mesh, FFT const &fft, typename UnitCell< D >::LatticeSystem const &lattice)
virtual void writeField(std::ostream &out, CField< D > const &field, UnitCell< D > const &unitCell, bool writeHeader=true) const=0
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.
Cp::FieldIo< D, CField< D >, FFT< D > > Base
Alias for base class.
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.
Field of complex double precision values on an FFT mesh.
Definition cpu/CField.h:29
Fourier transform wrapper.
Definition cpu/FFT.h:39
Base template for UnitCell<D> classes, D=1, 2 or 3.
Definition UnitCell.h:56
Dynamically allocatable contiguous array template.
Definition DArray.h:32
A FileMaster manages input and output files for a simulation.
Definition FileMaster.h:143
Complex-valued periodic fields (class templates).
Definition cp.mod:6
Complex periodic fields, CL-FTS (CPU).
Definition cpc.mod:6
Fields and FFTs for periodic boundary conditions (CPU)
Definition complex.cpp:12
Periodic fields and crystallography.
Definition complex.cpp:11
PSCF package top-level namespace.
Utility classes for scientific computation.