PSCF v1.3.2
rpc/scft/iterator/IteratorFactory.tpp
1#ifndef RPC_ITERATOR_FACTORY_TPP
2#define RPC_ITERATOR_FACTORY_TPP
3
4#include "IteratorFactory.h"
5
6// Subclasses of Iterator
7#include "AmIteratorBasis.h"
8#include "AmIteratorGrid.h"
9
10namespace Pscf {
11namespace Rpc {
12
13 using namespace Util;
14
15 /*
16 * Constructor
17 */
18 template <int D>
20 : sysPtr_(&system)
21 {}
22
23 /*
24 * Return a pointer to a instance of Iterator subclass className.
25 */
26 template <int D>
27 Iterator<D>* IteratorFactory<D>::factory(const std::string &className)
28 const
29 {
30 Iterator<D>* ptr = nullptr;
31
32 // Try subfactories first
33 ptr = trySubfactories(className);
34 if (ptr) return ptr;
35
36 // Try to match classname
37 if (className == "Iterator" || className == "AmIteratorBasis"
38 || className == "AmIterator" ) {
39 ptr = new AmIteratorBasis<D>(*sysPtr_);
40 } else
41 if (className == "AmIteratorGrid") {
42 ptr = new AmIteratorGrid<D>(*sysPtr_);
43 }
44
45 return ptr;
46 }
47
48}
49}
50#endif
Anderson Mixing iterator with imposed space-group symmetry.
Anderson Mixing iterator on grid (no space-group symmetry).
Iterator< D > * factory(const std::string &className) const
Method to create any Iterator supplied with PSCF.
IteratorFactory(System< D > &system)
Constructor.
Base class for iterative solvers for SCF equations.
Main class, representing a complete physical system.
Iterator< 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.