PSCF v1.3
DomainReal.h
1#ifndef PRDC_DOMAIN_REAL_H
2#define PRDC_DOMAIN_REAL_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 <util/param/ParamComposite.h> // base class
12
13#include <prdc/crystal/Basis.h> // member
14#include <prdc/crystal/SpaceGroup.h> // member
15#include <prdc/crystal/UnitCell.h> // member
16#include <pscf/mesh/Mesh.h> // member
17#include <string> // member (groupName)
18
19// Forward declaration
20namespace Util{
21 class FileMaster;
22 template <typename T> class Signal;
23 template <> class Signal<void>;
24}
25
26namespace Pscf {
27namespace Prdc {
28
29 using namespace Util;
30 using namespace Pscf::Prdc;
31
65 template <int D, class FFT, class WLT, class FIT>
67 {
68
69 public:
70
75
80
83
89 void setFileMaster(FileMaster& fileMaster);
90
96 virtual void readParameters(std::istream& in);
97
107 void readRGridFieldHeader(std::istream& in, int& nMonomer);
108
112 void makeBasis();
113
117
122
126 Mesh<D> const & mesh() const;
127
132
136 UnitCell<D> const & unitCell() const;
137
141 SpaceGroup<D> const & group() const ;
142
147
151 Basis<D> const & basis() const;
152
157
161 FFT const & fft() const;
162
166 WLT& waveList();
167
171 WLT const & waveList() const;
172
176 FIT& fieldIo();
177
181 FIT const & fieldIo() const;
182
186
191
195 std::string groupName() const;
196
200 bool hasGroup() const;
201
205 bool hasBasis() const;
206
210
219 void writeWaves(std::string const & filename) const;
220
229 void writeStars(std::string const & filename) const;
230
236 void writeGroup(std::string const & filename) const;
237
239
240 private:
241
242 // Private member variables
243
247 Mesh<D> mesh_;
248
252 UnitCell<D> unitCell_;
253
257 SpaceGroup<D> group_;
258
262 Basis<D> basis_;
263
267 FFT fft_;
268
272 WLT waveList_;
273
277 FIT fieldIo_;
278
282 typename UnitCell<D>::LatticeSystem lattice_;
283
287 std::string groupName_;
288
292 Signal<void>* signalPtr_;
293
297 FileMaster* fileMasterPtr_;
298
302 bool hasGroup_;
303
307 bool isInitialized_;
308
309 /*
310 * Get FileMaster as const reference.
311 */
312 FileMaster const & fileMaster() const
313 {
314 UTIL_CHECK(fileMasterPtr_);
315 return * fileMasterPtr_;
316 }
317
318 // Members of parent class with non-dependent names
321
322 };
323
324 // Inline member functions
325
326 // Get the UnitCell by non-const reference.
327 template <int D, class FFT, class WLT, class FIT>
329 { return unitCell_; }
330
331 // Get the UnitCell by const reference.
332 template <int D, class FFT, class WLT, class FIT>
334 { return unitCell_; }
335
336 // Get the Mesh by non-const reference.
337 template <int D, class FFT, class WLT, class FIT>
339 { return mesh_; }
340
341 // Get the Mesh by const reference.
342 template <int D, class FFT, class WLT, class FIT>
344 { return mesh_; }
345
346 // Get the SpaceGroup by const reference.
347 template <int D, class FFT, class WLT, class FIT>
349 { return group_; }
350
351 // Get the Basis by non-const reference.
352 template <int D, class FFT, class WLT, class FIT>
354 { return basis_; }
355
356 // Get the Basis by const reference.
357 template <int D, class FFT, class WLT, class FIT>
359 { return basis_; }
360
361 // Get the FFT by non-const reference.
362 template <int D, class FFT, class WLT, class FIT>
364 { return fft_; }
365
366 // Get the FFT by const reference.
367 template <int D, class FFT, class WLT, class FIT>
368 inline FFT const & DomainReal<D,FFT,WLT,FIT>::fft() const
369 { return fft_; }
370
371 // Get the WaveList by non-const reference.
372 template <int D, class FFT, class WLT, class FIT>
374 { return waveList_; }
375
376 // Get the WaveList by const reference.
377 template <int D, class FFT, class WLT, class FIT>
378 inline WLT const & DomainReal<D,FFT,WLT,FIT>::waveList() const
379 { return waveList_; }
380
381 // Get the FieldIo by const reference.
382 template <int D, class FFT, class WLT, class FIT>
384 { return fieldIo_; }
385
386 // Get the FieldIo by const reference.
387 template <int D, class FFT, class WLT, class FIT>
388 inline FIT const & DomainReal<D,FFT,WLT,FIT>::fieldIo() const
389 { return fieldIo_; }
390
391 // Get the lattice system enumeration value
392 template <int D, class FFT, class WLT, class FIT>
393 inline
395 const
396 { return lattice_; }
397
398 // Get the groupName string.
399 template <int D, class FFT, class WLT, class FIT>
400 inline std::string DomainReal<D,FFT,WLT,FIT>::groupName() const
401 { return groupName_; }
402
403 // Has a space group been identified?
404 template <int D, class FFT, class WLT, class FIT>
406 { return hasGroup_; }
407
408 // Has a symmetry-adapted Fourier basis been initialized ?
409 template <int D, class FFT, class WLT, class FIT>
411 { return basis_.isInitialized(); }
412
413} // namespace Prdc
414} // namespace Pscf
415#endif
Description of a regular grid of points in a periodic domain.
Definition Mesh.h:61
Symmetry-adapted Fourier basis for pseudo-spectral SCFT.
Definition Basis.h:383
Fourier transform wrapper.
Definition cpu/FFT.h:38
void writeGroup(std::string const &filename) const
Output all elements of the space group.
Basis< D > const & basis() const
Get the Basis by const reference.
Definition DomainReal.h:358
Mesh< D > const & mesh() const
Get the Mesh by const reference.
Definition DomainReal.h:343
UnitCell< D > & unitCell()
Get the UnitCell by non-const reference.
Definition DomainReal.h:328
virtual void readParameters(std::istream &in)
Read body of parameter block (without opening and closing lines).
SpaceGroup< D > const & group() const
Get the SpaceGroup by const reference.
Definition DomainReal.h:348
Mesh< D > & mesh()
Get the Mesh by non-const reference.
Definition DomainReal.h:338
void readRGridFieldHeader(std::istream &in, int &nMonomer)
Read initialization data from header of an r-grid field file.
std::string groupName() const
Get the group name.
Definition DomainReal.h:400
FFT & fft()
Get the FFT by non-const reference.
Definition DomainReal.h:363
~DomainReal()
Destructor.
void setFileMaster(FileMaster &fileMaster)
Create association with a FileMaster, needed by FieldIo.
bool hasBasis() const
Has a symmetry-adapted Fourier basis been initialized?
Definition DomainReal.h:410
DomainReal()
Constructor.
UnitCell< D > const & unitCell() const
Get the UnitCell by const reference.
Definition DomainReal.h:333
Basis< D > & basis()
Get the Basis object by non-const reference.
Definition DomainReal.h:353
void writeStars(std::string const &filename) const
Output information about stars and symmetrized basis functions.
WLT const & waveList() const
Get the WaveList by const reference.
Definition DomainReal.h:378
void makeBasis()
Construct basis if not done already.
bool hasGroup() const
Has a space group been declared?
Definition DomainReal.h:405
FIT const & fieldIo() const
Get the FieldIo by const reference.
Definition DomainReal.h:388
UnitCell< D >::LatticeSystem lattice() const
Get the lattice system (enumeration value).
Definition DomainReal.h:394
void writeWaves(std::string const &filename) const
Output information about waves.
FFT const & fft() const
Get the FFT object by non-const reference.
Definition DomainReal.h:368
WLT & waveList()
Get the WaveList by non-const reference.
Definition DomainReal.h:373
FIT & fieldIo()
Get the FieldIo by non-const reference.
Definition DomainReal.h:383
Crystallographic space group.
Definition SpaceGroup.h:32
Base template for UnitCell<D> classes, D=1, 2 or 3.
Definition UnitCell.h:56
A FileMaster manages input and output files for a simulation.
Definition FileMaster.h:143
ScalarParam< Type > & read(std::istream &in, const char *label, Type &value)
Add and read a new required ScalarParam < Type > object.
ScalarParam< Type > & readOptional(std::istream &in, const char *label, Type &value)
Add and read a new optional ScalarParam < Type > object.
ParamComposite()
Constructor.
Notifier (or subject) in the Observer design pattern.
Definition Signal.h:39
#define UTIL_CHECK(condition)
Assertion macro suitable for serial or parallel production code.
Definition global.h:68
Periodic fields and crystallography.
Definition CField.cpp:11
PSCF package top-level namespace.
Definition param_pc.dox:1
Utility classes for scientific computation.