PSCF v1.4.0
CompressorFactory.cpp
1/*
2* PSCF - Polymer Self-Consistent Field
3*
4* Copyright 2015 - 2025, The Regents of the University of Minnesota
5* Distributed under the terms of the GNU General Public License.
6*/
7
8#include "CompressorFactory.h"
9
10// Subclasses of Compressor
11#include "AmCompressor.h"
12#include "LrCompressor.h"
13#include "LrAmCompressor.h"
14
15namespace Pscf {
16namespace Rpc {
17
18 using namespace Util;
19
20 /*
21 * Constructor
22 */
23 template <int D>
25 : sysPtr_(&system)
26 {}
27
28 /*
29 * Return a pointer to a instance of Compressor subclass className.
30 */
31 template <int D>
33 CompressorFactory<D>::factory(std::string const &className) const
34 {
35 Compressor<D>* ptr = 0;
36
37 // Try subfactories first
38 ptr = trySubfactories(className);
39 if (ptr) return ptr;
40
41 // Try to match classname
42 if (className == "Compressor" || className == "LrAmCompressor") {
43 ptr = new LrAmCompressor<D>(*sysPtr_);
44 } else if (className == "AmCompressor") {
45 ptr = new AmCompressor<D>(*sysPtr_);
46 } else if (className == "LrCompressor") {
47 ptr = new LrCompressor<D>(*sysPtr_);
48 }
49
50 return ptr;
51 }
52
53 // Explicit instantiation definitions
54 template class CompressorFactory<1>;
55 template class CompressorFactory<2>;
56 template class CompressorFactory<3>;
57
58}
59}
Anderson mixing compressor.
Factory for subclasses of Compressor.
Compressor< D > * factory(const std::string &className) const
Method to create any Compressor supplied with PSCF.
CompressorFactory(System< D > &system)
Constructor.
Base class for iterators that impose incompressibility.
Linear-response Anderson mixing compressor.
Linear-response Anderson mixing compressor.
A complete physical system.
Compressor< D > * trySubfactories(const std::string &className) const
Definition Factory.h:425
Real periodic fields, SCFT and PS-FTS (CPU).
Definition param_pc.dox:2
PSCF package top-level namespace.