PSCF v1.3.2
|
The Rpg::AmIteratorBasis iterator used by the pscf_pg programs is closely analogous to the Rpc::AmIteratorBasis iterator used by the pscf_pc programs. Both classes use a formulation of the Anderson mixing algorithm in which both the residual vector and the vector of unknowns are defined using symmetry-adapted Fourier expansions of all underlying fields. Both algorithm can be used to either solve the SCFT equations for a rigid unit cell or to solve the SCFT equations and also optimize the unit cell parameters of a flexible unit cell so as to minimize the free energy density.
The format of the associated parameter block is identical to that used by the corresponding pscf_pc algorithm, and is described more formally below:
Here, as elsewhere, labels followed by an asterisk (*) represent optional parameters. The meaning of the various parameters are described below:
Label | Description |
epsilon | Error tolerance for convergence - iteration stops if the magnitude of the scalar error becomes less than epsilon (Required) |
maxItr* | Maximum number of iterations that will be attempted (Optional, 200 by default) |
maxHist* | Maximum number of previous trial solultions that will be retained in memory for used by the AM algorithm (Optional, 50 by default) |
verbose* | Integer level 0, 1, 2 for verbosity of log output during iteration. Lower values are more concise. (Optional, 0 by default) |
errorType* | Identifer for the type of residual norm used to define scalar error. The allowed values are "norm", "rms", "max", and "relNorm", as discussed here. (Optional, and equal to "relNorm" by default) |
isFlexible* | Set isFlexible true to enable or false to disable iterative optimization of the unit cell parameters so as to minimize the free energy. (Optional, true by default) |
scaleStress* | Constant factor by which stress components are multipled in the definition of the residual attempted if isFlexible is true (optional, 10.0 by default). |
The iterative loop exits if the number of iterations has reaches maxItr or if the magnitude of the scalar error drops below epsilon.
The Rpg::AmIteratorBasis class is nearly identical to the corresponding Rpc::AmIteratorBasis class used by the pscf_pc program. The same definition of the the residual vector is used in both classes. Please see the documentation of the Rpc AmIteratorBasis class for the residual definition and some other details.