Operators

Arguments:

  • list of names of operators (json object) to compute during the simulation. Options are:

    • “Hamiltonian” (string) - Intensive Hamiltonian. Both real and imaginary component are output.

    • “CellStress” - Cell stress \(\tilde{\sigma}\) and cell tensor \(\pmb{h}\) (see Variable Cell)

    • “ChemicalPotential”

      • “incl_ideal_gas” - include ideal gas contribution to chemical potential. Default: True.

      • “incl_self” - include self interaction contribution to chemical potential. Default: False.

      • “split_by_term” (bool) - split into separate terms \(\mu = \mu_logQ + \mu_{ideal} + \mu_{self}\). This can be useful for debugging. Default: False.

    • “Pressure” -

      • “calc_tensor” (bool) - output full pressure tensor into P[] in Voigt ordering (Pxx, Pyy, Pzz, Pyz, Pxz, Pxy). Default: False.

      • “incl_ideal_gas” (bool) - include ideal gas contribution to pressure. Default: True.

      • “incl_mean_field” (bool) - only for DriverRPA. Default: True.

      • “incl_fluct” (bool) - only for DriverRPA. Default: True.

      • “split_by_term” (bool) - split Pressure into separate terms \(P = P_{ideal} + P_{chain} + P_{smear} + P_{charge}\). See Nb#5 p117 for each of these terms. This can be useful for debugging). Default: False.

      • “units” (string) - Units to output pressure in. Options: beta_Rg3 (units of \(\beta P R_g^3\)) or beta_b3 (units of \(\beta P b^3\)). Default: beta_Rg3.

    • “PressureUVSensitive” - (beta)

    • “DensityMolecule” - output density per molecule

    • “DensitySpecies” - output density per species

    • “DensityModelCustom” - output density of quanties customized to model of interest. For ModelEdwardsCharge this is the total and charge density.

    • “SpeciesFields” - output species fields.

  • Each operator needs to specify the following parameters

    • “averaging_type” (string) - Specify how this operator should be averaged throughout the simulation. Options are

      • “none” - do not perform any averaging

      • “block” - average the operator over a block of size specified by block_size in Driver. See Block Averaging section below.

    • “save_history” (bool) - Option to save history of operator to separate files. Always = true for scalar operators. Can be optionally set for field operators.

These operators are output to a file specified by Output.

Block Averaging

Block averaging (i.e. block_size) and the output frequency (i.e. output_freq) are handled independently within the code. Block averaging reports operators that are averaged over block_size sequential timesteps. The current value of operators are written to operators.dat and op*.dat files every output_freq steps.

To see the expected results of block averaging, consider a timeseries of a given operator that takes the values d1 to d8 on 8 sequential timesteps t1 to d8:

timestep

t1

t2

t3

t4

t5

t6

t7

t8

value

d1

d2

d3

d4

d5

d6

d7

d8

If block_size = 2 and output_freq=1 then the output to operators.dat will be

timestep

t1

t2

t3

t4

t5

t6

t7

t8

value

d1

(d1+d2)/2

d3

(d3+d4)/2

d5

(d5+d6)/2

d7

(d7+d8)/2

If block_size = 1 and output_freq=2 then the output to operators.dat will be

timestep

t2

t4

t6

t8

value

d2

d4

d6

d8

If block_size = 2 and output_freq=2 then the output to operators.dat will be

timestep

t2

t4

t6

t8

value

(d1+d2)/2

(d3+d4)/2

(d5+d6)/2

(d7+d8)/2

Examples

Example (json)

"operators" : {
  "Hamiltonian": {"averaging_type": "none"},
  "CellStress": {"averaging_type": "none"}
},

Example (python)

import openfts
fts = openfts.OpenFTS()
...
fts.add_operator(averaging_type='none',type='Hamiltonian')
fts.add_operator(averaging_type='none',type='CellStress')
...