Field Updaters

  • field_updater (string) - Algorithm used to update fields. See Field Updaters. Options:

    • type (string) - Name of field updater. Options:

      • EMPEC - Euler-Maruyama Predictor Corrected (preferred option)

      • Euler - Forward Euler

      • SIS - Semi-implicit Seidel

      • ETD - Exponential time differencing (beta)

    • lambdas (float array) - Lambda relaxation coefficient for fields. One should be specified for each field.

    • update_order (string) - Specify how often to update fields. Options are:

      • “staggered” - Update one field per time step. This is typically used for semi-implicit updaters like SIS or ETD.

      • “simultaneous” - Update all fields each time step. This is typically used for predictor-corrector updaters like EMPEC.

    • [WIP] adaptive_timestep (bool) - Option to use the adaptive timestep of Aarts et al 2010 Eq 2.9. If in doubt, set to False.

Example (python):

fts.field_updater(type='EMPEC',update_order='simultaneous',adaptive_timestep=False,lambdas=[1.0, 1.0])

Example (json):

"driver": {
  ...
  "field_updater": {
    "type": "EMPEC",
    "__update_order": "staggered",
    "update_order": "simultaneous",
    "adaptive_timestep": false,
    "lambdas": [1.0,1.0]
  }
}

TODO: add bold math using pmb{}

Field Updater EMPEC

Predictor step

\[\mu^{\tilde{t}} = \mu^{t} - \lambda \Delta t \gamma^2 \left[ \frac{\delta H[{\mu}]}{\delta \mu(\pmb{r},t)} \right]^{t} + \gamma \eta^{t}\]

Corrector step

\[\mu^{t + \Delta t} = \mu^{t} - \frac{\lambda \Delta t \gamma^2}{2} \left( \left[ \frac{\delta H[{\mu}]}{\delta \mu(\pmb{r},t)} \right]^{t} + \left[ \frac{\delta H[{\mu}]}{\delta \mu(\pmb{r},t)} \right]^{\tilde{t}} \right) + \gamma \eta^{t}\]

Note that the same noise \(\eta^{t}\) is applied at both predictor and corrector steps.

Field Updater Euler

\[\mu^{j+1}(\pmb{r}) = \mu^{j}(\pmb{r}) - \Delta t \lambda \gamma^2 \left[ \frac{\delta H[{\mu}]}{\delta \mu(\pmb{r})} \right]^j\]

for each \(\mu\). \(\gamma = i = \sqrt{-1}\) if the field \(\mu\) is Wick rotated, otherwise \(\gamma = 1\).

Note that only each \(\mu\) is updated sequentially

Field Updater SIS

Warning

Field Updater SIS require a linear response kernel which may or may not have been implemented for each model and molecule type. It is recommended to begin with the EMPEC field updater unless you are sure that these are correct.

\[\hat{\mu}^{j+1}(\pmb{k}) = \hat{\mu}^{j}(\pmb{k}) - \frac{\Delta t \lambda \gamma^2}{1 + \Delta t \lambda \gamma^2 \kappa(\pmb{k})} \left[ \hat{\frac{\delta H[{\mu}]}{\delta \mu(\pmb{k})}} \right]^j\]

Where \(\kappa(\pmb{k})\) is a linear response kernel that is derived for a particlular model. For the ModelMeltChiAB model (FIXME link to page)

\[\kappa_+(\vert \pmb{k} \vert) = - \sum_p \frac{C \phi_p}{\alpha_p} \hat{g}(\vert \pmb{k} \vert, \alpha_p)\]

In principle, \(\hat{g}(\vert \pmb{k} \vert)\) can be derived for any polymer chain architecture and any sequence of blocks (e.g. Duchs2014 Eq 44). However in the current verion of the code, I restrict myself to diblock polymers (though hopefully I will extend this in the future). NOTE also in the current code I ignore alpha_p in the debye functions. Should fix. For a linear diblock

\[\hat{g}(\vert \pmb{k} \vert) = g_{AA} + 2g_{AB} + g_{BB}\]

where \(g_{AA}\), \(g_{AB}\), \(g_{BB}\) are (see Leibler1980, GHF, Ceniceros2004)

\[\begin{split}g_{AA} = \frac{2}{k^4} (e^{- f_A k^2} + f_A k^2 - 1) \\ g_{AA} = \frac{2}{k^4} (e^{- (1-f_A) k^2} + (1-f_A) k^2 - 1) \\ g_{AB} = \frac{1}{k^4} (1 - e^{-f_A k^2} ) (1 - e^{- (1-f_A) k^2} )\end{split}\]
\[\kappa_{-} = C 2 / \chi N\]

Note that for SCFT, the factor of C is set to unity since it doesn’t affect the location of the saddle point.

This results in the following update scheme

\[\hat{\mu}_+^{j+1}(\pmb{k}) = \hat{\mu}_+^{j}(\pmb{k}) - \frac{\Delta t \lambda \gamma^2}{1 + \Delta t \lambda \gamma^2 \kappa_+(\pmb{k})} \left[ \hat{ \frac{\delta H[{\mu}]}{\delta \mu_+(\pmb{k})} } \right]^j\]
\[\mu_{-}^{j+1}(\pmb{r}) = \mu_{-}^{j}(\pmb{r}) - \frac{\Delta t \lambda \gamma^2}{1 + \Delta t \lambda \gamma^2 \kappa_-} \left[ \frac{\delta H[{\mu}]}{\delta \mu_{-}(\pmb{r})} \right]^j\]

where \(\mu_+\) is updated in kspace space and \(\mu_{-}\) is updated in real space.