PSCF v1.3
rpg/field/WFieldContainer.h
1#ifndef RPG_W_FIELD_CONTAINER_H
2#define RPG_W_FIELD_CONTAINER_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/WFieldsReal.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>
33 : public WFieldsReal<D, Prdc::Cuda::RField<D>, Rpg::FieldIo<D> >
34 {
35
36 public:
37
40
41 // Inherited public member functions
42 using Base::setFieldIo;
46 using Base::allocate;
47 using Base::setBasis;
48 using Base::setRGrid;
49 using Base::readBasis;
50 using Base::readRGrid;
51 using Base::symmetrize;
52 using Base::clear;
53 using Base::writeBasis;
54 using Base::writeRGrid;
55 using Base::basis;
56 using Base::rgrid;
59 using Base::hasData;
61
70 void setRGrid(DeviceArray<cudaReal>& fields);
71
72 protected:
73
75 using Base::meshSize;
76 using Base::nBasis;
77 using Base::nMonomer;
78 using Base::fieldIo;
79
80 private:
81
88 void assignRField(RField<D>& lhs, RField<D> const & rhs) const
89 override;
90
91 };
92
93 #ifndef RPG_W_FIELD_CONTAINER_TPP
94 // Suppress implicit instantiation
95 extern template class WFieldContainer<1>;
96 extern template class WFieldContainer<2>;
97 extern template class WFieldContainer<3>;
98 #endif
99
100} // namespace Rpg
101
102#ifndef RPG_W_FIELD_CONTAINER_TPP
103namespace Prdc {
104 // Suppress implicit instantiation
105 extern template class WFieldsReal<1, RField<1>, Rpg::FieldIo<1> >;
106 extern template class WFieldsReal<2, RField<2>, Rpg::FieldIo<2> >;
107 extern template class WFieldsReal<3, RField<3>, Rpg::FieldIo<3> >;
108} // namespace Prdc
109#endif
110
111} // namespace Pscf
112#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 WFieldsReal.h:93
DArray< DArray< double > > const & basis() const
void allocateRGrid(IntVec< D > const &dimensions)
void allocate(int nMonomer, int nBasis, IntVec< D > const &dimensions)
void readRGrid(std::istream &in, bool isSymmetric=false)
void setBasis(DArray< DArray< double > > const &fields)
void setRGrid(DArray< RField< D > > const &fields, bool isSymmetric=false)
DArray< RField< D > > const & rgrid() const
File input/output operations and format conversions for fields.
A container of fields stored in both basis and r-grid format.
WFieldsReal< D, RField< D >, FieldIo< D > > Base
Alias for base class template instantiation.
void setRGrid(DeviceArray< cudaReal > &fields)
Set new w fields, in unfolded real-space (r-grid) format.
Fields, FFTs, and utilities for periodic boundary conditions (CUDA)
Definition Reduce.cpp:14
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