PSCF v1.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
9namespace Pscf {
10namespace Rpc {
11
12 using namespace Util;
13
14 /*
15 * Constructor
16 */
17 template <int D>
19 : sysPtr_(&system)
20 {}
21
22 /*
23 * Return a pointer to a instance of Iterator subclass className.
24 */
25 template <int D>
26 Iterator<D>* IteratorFactory<D>::factory(const std::string &className) const
27 {
28 Iterator<D>* ptr = 0;
29
30 // Try subfactories first
31 ptr = trySubfactories(className);
32 if (ptr) return ptr;
33
34 // Try to match classname
35 if (className == "Iterator" || className == "AmIteratorBasis"
36 || className == "AmIterator" ) {
37 ptr = new AmIteratorBasis<D>(*sysPtr_);
38 }
39
40 return ptr;
41 }
42
43}
44}
45#endif
Rpc implementation of the Anderson Mixing iterator with 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.
Definition rpc/System.h:34
Main class for SCFT or PS-FTS simulation of one system.
Definition rpc/System.h:100
PSCF package top-level namespace.
Definition param_pc.dox:1
Utility classes for scientific computation.