PSCF v1.1
pspc/sweep/FieldState.h
1#ifndef PSPC_FIELD_STATE_H
2#define PSPC_FIELD_STATE_H
3
4/*
5* PSCF - Polymer Self-Consistent Field Theory
6*
7* Copyright 2016 - 2021, The Regents of the University of Minnesota
8* Distributed under the terms of the GNU General Public License.
9*/
10
11#include <pscf/crystal/UnitCell.h> // member
12#include <pspc/field/FieldIo.h> // member
13#include <util/containers/DArray.h> // member template
14
15namespace Pscf {
16namespace Pspc
17{
18
19 using namespace Util;
20
21 template <int D> class System;
22
39 template <int D, class FT>
41 {
42
43 public:
44
47
51 FieldState();
52
61
66
73
77
83 const DArray<FT>& fields() const;
84
91
97 const FT& field(int monomerId) const;
98
104 FT& field(int monomerId);
105
109 const UnitCell<D>& unitCell() const;
110
115
117
118 protected:
119
123 bool hasSystem();
124
129
130 private:
131
135 DArray<FT> fields_;
136
140 UnitCell<D> unitCell_;
141
145 System<D>* systemPtr_;
146
147 };
148
149 // Public inline member functions
150
151 // Get an array of all fields (const reference)
152 template <int D, class FT>
153 inline
155 { return fields_; }
156
157 // Get an array of all fields (non-const reference)
158 template <int D, class FT>
159 inline
161 { return fields_; }
162
163 // Get field for monomer type id (const reference)
164 template <int D, class FT>
165 inline
166 const FT& FieldState<D,FT>::field(int id) const
167 { return fields_[id]; }
168
169 // Get field for monomer type id (non-const reference)
170 template <int D, class FT>
171 inline FT& FieldState<D,FT>::field(int id)
172 { return fields_[id]; }
173
174 // Get the internal Unitcell (const reference)
175 template <int D, class FT>
176 inline
178 { return unitCell_; }
179
180 // Get the internal Unitcell (non-const reference)
181 template <int D, class FT>
183 { return unitCell_; }
184
185 // Protected inline member functions
186
187 // Has the system been set?
188 template <int D, class FT>
190 { return (systemPtr_ != 0); }
191
192 // Get the associated System<D> object.
193 template <int D, class FT>
195 {
196 assert(systemPtr_ != 0);
197 return *systemPtr_;
198 }
199
200 #ifndef PSPC_FIELD_STATE_TPP
201 // Suppress implicit instantiation
202 extern template class FieldState< 1, DArray<double> >;
203 extern template class FieldState< 2, DArray<double> >;
204 extern template class FieldState< 3, DArray<double> >;
205 #endif
206
207} // namespace Pspc
208} // namespace Pscf
209#endif
Record of a state of a System (fields + unit cell).
const FT & field(int monomerId) const
Get a field for a single monomer type by const reference.
const UnitCell< D > & unitCell() const
Get UnitCell (i.e., lattice type and parameters) by const reference.
DArray< FT > & fields()
Get array of all chemical potential fields (non-const reference).
FT & field(int monomerId)
Get field for a specific monomer type (non-const reference).
const DArray< FT > & fields() const
Get array of all fields by const reference.
FieldState()
Default constructor.
bool hasSystem()
Has a system been set?
System< D > & system()
Get associated System by reference.
UnitCell< D > & unitCell()
Get the UnitCell by non-const reference.
void setSystem(System< D > &system)
Set association with System, after default construction.
Main class for SCFT simulation of one system.
Definition: pspc/System.h:76
Base template for UnitCell<D> classes, D=1, 2 or 3.
Definition: UnitCell.h:44
Dynamically allocatable contiguous array template.
Definition: DArray.h:32
C++ namespace for polymer self-consistent field theory (PSCF).
Utility classes for scientific computation.
Definition: accumulators.mod:1