Add measurement period for observables in DMC
Is your feature request related to a problem? Please describe.
Since the correlation time is often>100 steps in DMC, measuring observables every step is inefficient. This is particularly important for heavy/costly estimators such as density matrices, energy density etc.
Describe the solution you'd like
Implement an estimator_measurement_period input parameter to the DMC section. Update the driver to only measure observables every estimator_measurement_period steps. Enforce that estimator_measurement_period is a factor of the number of steps per block; abort if not.
Describe alternatives you've considered
Putting the parameter elsewhere makes less sense because e.g. VMC already has substeps.
I would suggest this input option being contained in the "estimators" node instead of being exposed directly in the DMC input section and then its name can be cut short as measurement_period
My initial reaction was the same but, the objects is this is a section dependent property. If the estimators are defined globally where will the setting go? And on further thought, the driver decides when to call accumulate not the estimator manager crowd or estimator manager. Its cleaner to not have the driver looking inside the estimators input.
So at the moment I also favor the driver level parameter. The validity of the parameter also should be determined at that level as it will require a comparison to the steps per block another driver level parameter.
I'm thinking of always requiring a driver scope estimators node to activate the global estimators. This rule allows us to disable the global estimators in places where we don't need estimators. ~~Then measurement_period can be placed in this required driver scope estimators node.~~
And on further thought, the driver decides when to call accumulate not the estimator manager crowd or estimator manager. Its cleaner to not have the driver looking inside the estimators input.
You are actually right.
This is key:
The validity of the parameter also should be determined at that level as it will require a comparison to the steps per block another driver level parameter.
It should be provided at driver level for this reason.