PSCF v1.1
pspg/sweep/FieldState.h
1#ifndef PSPG_FIELD_STATE_H
2#define PSPG_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 <pspg/field/FieldIo.h> // member
13#include <util/containers/DArray.h> // member template
14
15namespace Pscf {
16namespace Pspg
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
46
47
51 FieldState();
52
61
66
73
75
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
128 System<D>& system();
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 FT const & 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>
182 inline
184 { return unitCell_; }
185
186 // Protected inline member functions
187
188 // Has the system been set?
189 template <int D, class FT>
190 inline
192 { return (systemPtr_ != 0); }
193
194 // Get the associated System<D> object.
195 template <int D, class FT>
196 inline
198 {
199 assert(systemPtr_ != 0);
200 return *systemPtr_;
201 }
202
203 #ifndef PSPG_FIELD_STATE_TPP
204 // Suppress implicit instantiation
205 extern template class FieldState< 1, DArray<double> >;
206 extern template class FieldState< 2, DArray<double> >;
207 extern template class FieldState< 3, DArray<double> >;
208 #endif
209
210} // namespace Pspg
211} // namespace Pscf
212#endif
Record of a state of a System (fields + unit cell).
FieldState()
Default constructor.
const DArray< FT > & fields() const
Get array of all fields by const reference.
const UnitCell< D > & unitCell() const
Get UnitCell (i.e., lattice type and parameters) by const reference.
const FT & field(int monomerId) const
Get a field for a single monomer type by const reference.
void setSystem(System< D > &system)
Set association with System, after default construction.
System< D > & system()
Get associated System by reference.
bool hasSystem()
Has a system been set?
Main class in SCFT simulation of one system.
Definition: pspg/System.h:71
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