PSCF v1.3.1
rpg/field/WFields.h
1#ifndef RPG_W_FIELDS_H
2#define RPG_W_FIELDS_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 <prdc/field/WFieldsTmpl.h> // base class template
12#include <prdc/cpu/RField.h> // template parameter
13#include <rpg/field/FieldIo.h> // template parameter
14
15namespace Pscf {
16namespace Rpg {
17
18 using namespace Util;
19 using namespace Pscf::Prdc;
20 //using namespace Pscf::Prdc::Cuda;
21
31 template <int D>
32 class WFields : public WFieldsTmpl<D, Cuda::RField<D>, FieldIo<D> >
33 {
34
35 public:
36
39
40 // Inherited public member functions
41 using Base::setFieldIo;
45 using Base::allocate;
46 using Base::setBasis;
47 using Base::setRGrid;
48 using Base::readBasis;
49 using Base::readRGrid;
50 using Base::symmetrize;
51 using Base::clear;
52 using Base::writeBasis;
53 using Base::writeRGrid;
54 using Base::basis;
55 using Base::rgrid;
58 using Base::hasData;
60
69 void setRGrid(DeviceArray<cudaReal>& fields);
70
71 protected:
72
74 using Base::meshSize;
75 using Base::nBasis;
76 using Base::nMonomer;
77 using Base::fieldIo;
78
79 private:
80
87 void assignRField(RField<D>& lhs, RField<D> const & rhs) const
88 override;
89
90 };
91
92 // Explicit instantiation declarations
93 extern template class WFields<1>;
94 extern template class WFields<2>;
95 extern template class WFields<3>;
96
97} // namespace Rpg
98
99namespace Prdc {
100 // Explicit instantiation declarations for base class
101 extern template class WFieldsTmpl<1, Cuda::RField<1>, Rpg::FieldIo<1> >;
102 extern template class WFieldsTmpl<2, Cuda::RField<2>, Rpg::FieldIo<2> >;
103 extern template class WFieldsTmpl<3, Cuda::RField<3>, Rpg::FieldIo<3> >;
104} // namespace Prdc
105
106} // namespace Pscf
107#endif
Dynamic array on the GPU device with aligned data.
Definition DeviceArray.h:43
Field of real double precision values on an FFT mesh.
Definition cpu/RField.h:29
A container of w fields stored in both basis and r-grid format.
Definition WFieldsTmpl.h:93
void setBasis(DArray< DArray< double > > const &fields)
void allocateRGrid(IntVec< D > const &dimensions)
DArray< RField< D > > const & rgrid() const
DArray< DArray< double > > const & basis() const
void allocate(int nMonomer, int nBasis, IntVec< D > const &dimensions)
void setRGrid(DArray< RField< D > > const &fields, bool isSymmetric=false)
void readRGrid(std::istream &in, bool isSymmetric=false)
File input/output operations and format conversions for fields.
A container of fields stored in both basis and r-grid format.
void setRGrid(DeviceArray< cudaReal > &fields)
Set new w fields, in unfolded real-space (r-grid) format.
WFieldsTmpl< D, RField< D >, FieldIo< D > > Base
Alias for base class template instantiation.
Periodic fields and crystallography.
Definition CField.cpp:11
SCFT and PS-FTS with real periodic fields (GPU)
PSCF package top-level namespace.
Definition param_pc.dox:1