turborvb.x

Description

turborvb.x is the main TurboRVB executable, built from program main. CMake defines two targets (suffix .x):

Build target

Executable

Notes

turborvb-serial

turborvb-serial.x

Serial (no MPI); OpenMP may be used.

turborvb-mpi

turborvb-mpi.x

MPI parallel (PARALLEL); OpenMP may be used.

References to turborvb.x in documentation or scripts usually mean one of these (or a symlink at install time).

Roles

  • Variational Monte Carlo (VMC): Importance sampling with the trial wave function to estimate local energy, forces, etc.

  • Diffusion Monte Carlo (DMC) and lattice-regularized DMC (LRDMC): Projective ground-state sampling via branching (mode selected by itestr4 range).

  • Wave function optimization (iopt): Update Jastrow, determinant (AGP/ Pfaffian), or molecular orbitals by minimizing energy (and optionally variance) using linear method, stochastic reconfiguration, etc.

  • Classical / quantum dynamics: Ion motion and quantized dynamical degrees of freedom (enabled via input cards).

  • k-point parallel and replicas: MPI communicator splitting for multiple k-points or replica walkers.

Input and output

Input

  • Standard input: Namelists read by read_datasmin (and read_datasmin_mol, etc.): &simulation (itestr4, iopt, itest, ...), &pseudo, &vmc, &optimization, &readio (writescratch, wherescratch), &parameters (k-points, parallel), &molecul (open system / mesh), &kpoints (periodic). Use template/datasvmc, datasdmc, datasfn, datasmin, or test/*.input as reference.

  • fort.10 / fort.10_new: Initial or continuation wave function; which is read depends on iopt and itestr4.

  • pseudo.dat: When pseudopotentials are used.

  • parminimized.d: Parameter-block definitions for optimization (read and updated in optimization runs).

  • Scratch (under wherescratch / turborvb.scratch): Walker coordinates, weights, and history per generation, depending on writescratch.

  • Command line (serial build only): First argument help / -help / --help lists modes; vmc, dmc, lrdmc, opt, optmol, dyn, quantum, test print help_online for the corresponding template and exit.

In an MPI build, the command-line help branch may be omitted; use the serial executable for --help if needed.

Output

File / stream

Description

Standard output

Energy per generation, New Energy =, devmax, Norm correction, warnings, timing, MPI info. Used by plot_Energy.sh and similar scripts.

fort.12

Binary: weight and parameter history per generation (optimization, etc.). Post-processed by readalles.

fort.11

Header paired with fort.12.

fort.10_new

Updated wave function at end of optimization or run.

parminimized.d

Optimization state for continuation.

pip0.d, etc.

Energy/variance correction (depends on setup and post-processing).

Scratch files

DMC/LRDMC and forward-walking data; readforward reads details_*.all and related files.

What is written depends on itestr4, iopt, yeswrite10, writescratch, and related options.

Input parameters

Variable are read from standard input.

simulation section

Parameter name

Datatype

Default

Description

itestr4

integer

2

  • description(DFT):

itest4 = -4: Standard DFT run.

itest4 = -8: DFT calculation with twice larger basis for the Hartree potential.

  • description(VMC):

This keyword decides the optimization scheme and its kernel. It can assume an integer value according to the following scheme:

  • itestr4 = 2 (VMC) Variational Monte Carlo.

  • itestr4 = -4 (VMC-opt) Wavefunction optimization by Hessian matrix method. Only the lambda parameters and the coefficients of the contracted orbitals are optimized.

  • itestr4 = -8 (VMC-opt) Wavefunction optimization by Hessian matrix method. All the parameters are optimized.

  • itestr4 = -9, -5 (VMC-opt) Same as -4, -8, respectively, but using Stochastic reconfiguration (SR) wavefunction optimization method.

  • itestr4 = -6 (LRDMC) Lattice Regularized Diffusion Monte Carlo.

  • itestr4 = -24, -28 (LRDMC-opt) Same as -4, -8, respectively, but the derivatives are computed using LRDMC.

  • itestr4 = -29, -25 (LRDMC-opt) Same as -9, -5, respectively, but the derivatives are computed using LRDMC.

iopt

integer

1

  • description(DFT):

iopt = 1: Initialize with no potential (no Hartree, xc, correlation).

iopt = 0: Continuation, starting from wavefunctions read from fort.10_new and occupation read from occupationlevels.dat (both generated after iopt = 1 run).

iopt = 2: Same as iopt = 0, but write main matrices (basis set/Hamiltonian overlaps, charge/spin density).

-description(VMC):

This keyword controls the starting of the run. It can assume the following integer values:

  • iopt = 1: New run from scratch.

  • iopt = 0: Continue from previous run.

  • iopt = 2: Initialize the optimization from the initial values given by fort.10, but read the previous equilibrated configuration.

  • iopt = 3: Same as 2, but when combined with molopt=-1, recomputes from scratch the projection matrices required to enforce a given number of molecular orbitals.

ngen

integer

automatic

The number of iterations of any chosen method. Represents the total number of samples for the local energy or energy derivatives. In case of optimization, it must be a multiple of nweight given in the &optimization section.

nscra

integer

  • if no input

    • nel / 2 if ipf == 2

    • 2*nel + 2 if ipf /= 2

Inside an MC step, the determinant is usually updated instead of being recalculated from scratch. To avoid error summation, it’s necessary to calculate it from scratch every nscra accepted moves.

nbra

integer

automatic (4*nel, 2*nel, nel, 1, or 0)

In VMC, it indicates the number of Metropolis steps before computing a new sample. In LRDMC, if > 0, it uses the new more efficient method with perfect load balancing. Should be large enough (#electrons) to guarantee an efficient branching (% independent walkers / # walkers between 80% and 95%).

iseedr

integer

236413883

Seed of the random number generator.

nw

integer

nproc

Number of walkers. If not specified, it coincides with the number of processors. Otherwise, it must be a multiple of their number.

kSq

double precision

  • if no input

    • 1.d-8 if iespbc is .true.

    • 0d0 if iespbc is .false.

Precision for the Ewald summation.

kappar

real*8

automatic

Coefficient in the Ewald summation. The default value depends on the crystal type (orthorombic, nonorthorohmbic).

freqcheck

integer

  • if no input

    • -1 if nproc == 1

    • if nproc > 1

      • 100 if ngen > 1000

      • 10 if ngen > 100

      • 0 if ngen <= 100

Frequency for checking flag error.

membig

logical

.true.

Large memory is given or not.

membigcpu

logical

.true.

Large memory is given or not.

developer

integer

0

Unidentified (This will be removed in the future).

yesfast

integer

  • -1 if no input

  • ignore input

    • -1 if ireadminr > 0 and yesfast > 0

Fast I/O (This will be moved to /developer/ namelist).

maxtime

real*8

  • 86000 if no input

The program will stop after maxtime (sec.)

nproc_diag

integer

0

The number of intra MPI communicators. 0 means no intra communicator (this will be removed in the future).

disk_io

character(len=80)

'default'

‘default’: default I/O, temporary files for each MPI process, ‘nocont’: minimal I/O no continuation, ‘mpiio’: temporary files are not generated for each MPI rank. They are gathered to single file.

ip_reshuff

integer

-1

Unidentified (This will be moved to /developer/ namelist).

compute_bands

logical

.false.

WIP

double_mesh

logical

.false.

WIP

min_block

integer

automatic (1000 or 100)

The minimum block size for computational efficiency at expense of memory, used for SCALAPACK. A smaller value will require less memory. (This will be removed in the future).

max_target

integer

automatic (200000 or 0)

Unidentified (This will be moved to /developer/ namelist).

max_targetsr

integer

max_target

Unidentified (This will be moved to /developer/ namelist).

dielectric_ratio

real*8

1.d0

Parameter for dielectric constant: see dielectric.f90 (not tested).

dielectric_length

real*8

1.d0

Parameter for dielectric constant: see dielectric.f90 (not tested).

case_diel

integer

  • if no input

    • 2 if dielectric_ratio /= 1.d0

  • ignore input

    • 0 if dielectric_ratio == 1.d0

    • 0 if input case_diel < 0 or case_diel > 2

Flag for dielectric constant: see dielectric.f90 (not tested).

neigh

integer

  • if no input

    • 1 if iespbc is .true.

Neighbors in the Ewald summation (but not used?) unidentified.

novec_loop1

logical

.true.

Vectorize of subroutine upnewwf (This will be moved to /developer/ namelist).

yes_sparse

logical

.false.

Unidentified (This will be moved to /developer/ namelist).

yes_sparse_choose

logical

  • .false. if yesdft is .true.

  • .true. if yesdft is .false.

Unidentified (This will be moved to /developer/ namelist).

max_sparse_choice

integer

automatic (100 or 20)

Unidentified (This will be moved to /developer/ namelist).

pseudo section

Parameter name

Datatype

Default

Description

nintpsa

integer

automatic

Number of integer points for pseudopotential, if present.

npsamax

integer

  • if no input

    • 2 if npsa /= 0

    • 1 if npsa == 0

  • description(DFT): Multiplication factor for the number of pseudo integration points. Note that, use npsmax > 2 if the code terminates with the error ‘Increase npsamax’.

  • description(QMC): Multiplication factor for the number of pseudo integration points. Note that, you should use npsmax > 2 if the code terminates with the error ‘Increase npsamax’.

pseudorandom

logical

  • .false. yesdft is .true. and double_mesh is .true.

  • .true. otherwise

Use a random integration mesh for pseudo with the algorithm for QMC by R. Fahy.

vmc section

Parameter name

Datatype

Default

Description

tstep

real*8

  • if no input

    • 2.d0 if itest == 2

    • 0.d0 if itest /= 2

Time step for VMC moves. Adapted automatically.

hopfraction

real*8

0.d0

The hopping ratio used in the MCMC. See. subroutine hopping in detail.

epscut

real*8

  • if no input

    • 0.00001d0 if itest /= 1 and itestr4 /= -7

  • ignore input

    • if itest == 1 or itestr4 == -7

      • 0.d0 if epscuttype == 0

      • epscuttype if epscuttype < 0

      • error if epscuttype > 0

The threshold of regularization. epscut = 0 to be used only in the optimization of the Jastrow, when no regularization is necessary for finite variance energy derivatives. If epscut > 0, a regularization is applied (epscuttype=2) and finite variance forces and energy derivatives can be computed. It is tuned automatically starting from the value in input.

epstlrat

real*8

  • if no input

    • dsqrt(epsmach) if theta_reg == 0.5d0 and epstlrat is .true.

epstl = epstlrat*epscut. epstl is a precision control parameter used in subroutine ratio_psi() (if zero not used) dlamch(‘e’) is a lapack routine that returns the relative machine precision

epscuttype

integer

  • if no input

    • 0 if epscut == 0.d0

    • 2 if epscut > 0.d0

    • -1000 if epscut < 0.d0

  • ignore input

    • 0 if itest == 1 or itestr4 == -7

Accept default (0,2) determined by epscut. The type of regularization applied to the determinant. Type 0: no regularization. Type 2: best one. (Other options are possible but deprecated).

alat2v

real*8

0.d0

not used. This will be removed in the future

shift

real*8

0.d0

unidentified

change_epscut

logical

  • .false. ignore input if itest /= 2

  • .true. if no input

automatic adjustment of epscut

change_tstep

logical

  • .false. ignore input if itest /= 2

  • .true. if no input

automatic adjustment of tstep

epsvar

real*8

0.0001d0

epsvar is a precision control parameter used in subroutine ratiovar.f90 (if zero not used)

theta_reg

real*8

0.375d0

ratiodet = 1.d0/ratiodet**theta_reg used in subroutine ratiovar.f90. Eq.(121) in the paper [J. Chem. Phys. 152, 204121 (2020)].

true_wagner

integer

  • if no input

    • 2 if lrdmc_der is .true. and lrdmc_nonodes is .false.

    • -1 otherwise

WIP

cutweight

real*8

automatic (0.d0, 4*zmax, or others)

WIP

nbra_cyrus

integer

  • 0 if itest == 1 or itestr4 == -7

WIP

typereg

integer

0

WIP

npow

real*8

0.d0

WIP

dmclrdmc section

Parameter name

Datatype

Default

Description

etry

real*8

0.d0

Trial total energy. Please put the DFT or VMC energy.

npow

real*8

0.d0

The parameter npow gradually sets the degree of localization used in the effective Hamiltonian. npow = 0 corresponds to a Fixed Node Hamiltonian whereas npow = 1 corresponds to the local approximation. Accept default.

tbra

real*8

required

DMC time between consecutive branchings. Do not define when nbra > 0 in the simulation section.

gamma

real*8

0.d0

The γ parameter in LRDMC. Accept default.

plat

real*8 plat(3)

automatic

a function p(r) dividing the dense and coarse regions. Default value is 0.0 for the single-grid LRDMC (i.e., alat2=0.0), automatically adjusted for the double-grid LRDMC (i.e., alat2=finite value)

alat2

real*8

if alat > 0, alat2 is set automatically (double-grid scheme), else (i.e., alat < 0), the default value of alat2 is 0.

Double-grid Lattice space. alat2 = a’/a, where a is the smallest regularization grid and a’ is the larger one used in the valence region (i.e., far from nuclei). When you put a negative value for alat, you should not specify alat2 (i.e., please comment it out). The default value of alat2 is determined by Nakano’s algorithm.

alat

real*8

  • if no input

    • 0 if itestr /= -6 and itestr4 /= -7 and itestr4 >= -20

    • -1.d0/zmax otherwise

Z_max is the largest effective nuclear charge in the system. Lattice space a of the smallest regularization grid. Accept default. If you want to do a single-grid LRDMC calculation, please put a negative value to satisfy the detailed-balance. If you want to do a double-grid LRDMC, please put a positive value and switch on iesrandoma.

tstepfn

real*8

0.d0

0.0 -> Fixed-node, 1.0 -> LRDMC becomes a VMC calc.

Klrdmc

real*8

0.d0

η parameter of LRDMC. η = 1 + Ka^2

optbra

integer

0

unclear

parcutg

integer

1 for LRDMC, otherwise 0

Use parcutg=1. parcutg=0 for standard LRDMC with no cutoff (energy unbounded), but it now works.

novar

integer

  • 0 or -1 if no input

  • ignore input

    • 0 if parcutg == 0

    • 0 if parcutg /= 0 and itestr /= -6 and itestr4 /= -7 and itestr4 >= -20

unclear, used for evaluating local energies in the subroutines updiag/updiag_complex compute the local energy both diagonal and off-diagonal part. Regularization of the Coulomb potential is also computed.

epscutdmc

real*8

0.d0

regularization used in a DMC calculation. the detail is under investigation.

typereg

integer

0

How to deal with the spin-flip term, 0: Standard (Det. + Jas.), 6: only Det.

epstldmc

real*8

  • if no input

    • if itest == 1 or itestr4 == -7

      • 0.d0 if epscutdmc /= 0.d0

      • 0.d0 if epscutdmc == 0.d0 (ignore input)

      • -1.d0 otherwise

psidetln(j) is smaller than epstldmc, then kill the walker.

rejweight

logical

  • if no input

    • .true. if itest == 1 or itestr4 == -7

  • ignore input

    • .false. if (itest == 1 or itestr4 == -7) and itestr == -3

rejecting or rescaling the weights according to the acceptance/rejection step) in standard dmc or non local dmc with heat bath after all electron diffusion rejecting or rescaling the weights according to acceptance should be the best choice. In non local dmc with heat bath after single particle diffusion the best choice is not to reject the weights.

cutreg

real*8

automatic

DMC cutoff on local energy (Ry).

cutweight

real*8

automatic

regularization parameter in eq.4 of S. Pathak and L.K. Wagner [AIP Advances 10, 085213 (2020)]

better_dmc

logical

  • .true. if itest == 1 or itestr4 == -7

unclear

yesalfe

logical

  • if itest == 1 or itestr4 == -7

    • .false. itestr == -3

    • .true. itestr /= -3

unclear

safelrdmc

logical

.false.

unclear

changelambda

logical

  • .true. if itest == 1 or itestr4 == -7

  • .false. otherwise

unclear

noblocking

logical

  • .false. if itest == 1 or itestr4 == -7

unclear

add_diff

logical

.true.

unclear

nbra_cyrus

integer

  • 0 if itest == 1 or itestr4 == -7

A parameter to compute forces using the practical scheme developed by S. Moroni et al. (originally devised by Cyrus Umrigar), corresponding n in Eqs. 12 and 13 of the paper [J. Chem. Theory Comput. 2014, 10, 11, 4823–4829]

lrdmc_der

logical

.false.

unclear

lrdmc_nonodes

logical

.false.

unclear

enforce_detailb

logical

.false.

the detailed-balance

iesrandoma

logical

  • .true. if no input

  • ignore input

    • .true. if enforce_detailb is .true. or alat < 0.d0

flag to randomize the direction of the electron’s diffusion.

zmin

real*8

  • 0.d0 if itest == 1 or itestr4 == -7

the minimum effective Z for which the double-grid LRDMC is applied.

yes_fastbranch

logical

  • .false. if itest == 1 or itestr4 == -7

unclear

l0_kousuke

real*8

  • 2.d0 if itest == 1 or itestr4 == -7

a parameter for the double-grid LRDMC. See “l” in the Eq.6 of the paper (Phys. Rev. B 101, 155106 (2020)).

nw_max

integer

  • -1 if itest == 1 or itestr4 == -7

max number of. walker

true_wagner

integer

  • if no input

    • 2 lrdmc_der is .true. and lrdmc_nonodes is .false.

    • -1 otherwise

if true_wagner=2, the regularization developed by S. Pathak and L.K. Wagner [AIP Advances 10, 085213 (2020)]

weight_moroni

real*8

1.0d0

unclear

optimization section

Parameter name

Datatype

Default

Description

tpar

real*8

0.35d0

Optimization step; in the case of the linear method (itestr4 = -4, -8) reduces the step from its ideal value (tpar = 1) that is unfortunately unstable for large number of variational parameters or small statistics. In the simpler SR method tpar has to be set by hand as in the standard steepest descent method.

nfat

integer

0

WIP

iboot

integer

  • 0 no input

  • ignore input

    • 0 if nmore_force > 1

    • 0 if iboot < 0

Number of step before making averages in the bin of length nweight. nweight-iboot has to be a multiple of nbinr.

nweight

integer

1

Number of sampling used for each iteration of the optimization steps.

nmore_force

integer

1

If dynamics is employed, the number of samples used during the last step of optimization is increased by a factor (nmore_force+1).

epsi

real*8

10000d0

Cutoff for reducing too large changes of WF such that Δpsi/|psi| > epsi.

eps_dyn5

real*8

0.d0

WIP

epsdgel

real*8

0.001d0

WIP

kl

integer

  • -7 if no input

  • with input value

    • if npar /= 0 or nparsw /= 0 or nparinv /= 0 or npower /= 0

      • 7 if kl > 0

      • -7 if kl <= 0

Method used for the solution of the linear equation Sx = f, where f are energy derivatives and x parameters change in the stochastic reconfiguration. kl=-7 is mandatory for signalnoise=.true. optimization method. It is faster for large number of parameters and small number of sampling per processor. kl=-6 may be useful for small systems/computers when the number of sampling per processor is very large.

idyn

integer

  • 0 if no input

  • if yesquantum is .true. and yesturboq is .true.

    • 7 if idyn /= 5, 6, 7, 8

description(QMC):

To choose the type of ion dynamics. The available options are:

  • idyn=0: No dynamic option specified, i.e. standard optimization at fixed ion positions.

  • idyn=1: First order standard steepest descent dynamics.

  • idyn=2: Second order standard with damping.

  • idyn=3: More accurate.

  • idyn=5: New accelerated molecular dynamics.

  • idyn=6: Even more accurate but never published.

  • idyn=7: New second order Ornstein Uhlenbeck damped Newton dynamics.

  • idyn=8: Standard Ceriotti's second order damped Newton dynamics.

nbinr

integer

1

Number of bins used in the optimization step of length nweight-iboot. This binning is used to estimate error bars during the simulation.

npbra

integer

0

If npbra > 0 in the linear method, npbra parameters with the largest signal to noise ratio are also included.

ncg

integer

  • 1 if no input

  • ignore input

    • 1 if ncg > 1 and itestrr /= -4

    • np if ncg > np

    • iskipdyn if stepcg_recount is .true. and ncg > iskipdyn

If ncg > 1, a conjugate gradient approach is used with ncg gradients (generated on fly during the run) to accelerate convergence. ncg > 1 can be used only with the linear method (itestr4 = -4, -8).

minz

real*8

1.d-5

Minimum/Maximum AGP orbital exponent Z allowed.

maxz

real*8

-1000.d0

Minimum/Maximum AGP orbital exponent Z allowed.

minzj

real*8

  • 1.d-5 if no input

  • use input value

    • minz if minzj == -1000.d0 and minz /= -1000.d0

Minimum/Maximum Jastrow orbital exponent Z allowed.

maxzj

real*8

  • if no input

    • maxz if minz /= -1000.d0

    • -1000.d0 if minz == -1000.d0

Minimum/Maximum Jastrow orbital exponent Z allowed.

parr

real*8

0.0d0

Determines the accuracy in the calculationa of the inverse of the SR matrix. The smaller the value, the more accurate (and fast) is the optimization, but the stability of the method gets worse. It should be decreased systematically up to at least 0.001 for fairly accurate wavefunction optimizations.

parcute

real*8

0.d0

WIP

parcut

real*8

epsmach*100.d0

WIP

parcutmin

real*8

0.d0

If ncg > 1 is used in the minimization only the gradients that have a signal/noise ratio larger than parcutmin. If ncg = 0, the standard linear method with all parameters included in the optimization is used.

parcutpar

real*8

0.d0

If npbra > 0, among the npbra selected, only the parameters with signal/noise ratio > parcutpar are optimized.

tion

real*8

  • if no input

    • tpar if signalnoise is .true.

    • -1.d0 if signalnoise is .false.

When dynamics is on (idyn > 0) it represents the time-step of the molecular dynamics. With idyn=5, has the scale of an energy and should be set small enough inversely proportional to the number of samples used to evaluate the covariance matrix.

tcell

real*8

  • if no input

    • tion if ncore < 0 and tion /= -1.d0 and typedyncell /= 0

    • 0.d0

WIP

molopt

integer

  • 0 if no input

  • ignore input

    • 1 if molopt /= 0 and (itestr == -5 or read_molecul is .true.)

  • description(DFT): Do not change this value, as DFT works with molecular orbitals only.

  • description(QMC): If molopt = -1 optimization with fixed number of molecular orbitals is performed (nmolmax in the &molecul section should be defined in this case). If not specified, the standard optimization is employed.

epstion

real*8

0.d0

WIP

onebodysz

logical

  • .false. if no input

  • ignore input

    • .true. if twobodyoff is .true. and iessz is .true.

If .true., optimize only the one body part of the spin Jastrow factor.

twobodyoff

logical

.false.

WIP

iesdtwobodyoff

logical

.false.

WIP

iesdonebodyoff

logical

.false.

WIP

tolcg

real*8

1d-6

WIP

minjonetwobody

real*8

0.05d0

WIP

symiesup

logical

.false.

WIP

yescutjas

logical

.true.

WIP

yescutdet

logical

.true.

WIP

fixpar

logical

.false.

WIP

symmetrize_agp

logical

.true.

If .true. (default), symmetrize the agp at each iteration step, as it can deteriorate due to numerical accuracy.

yesquantum

logical

  • .false. if no input

  • ignore input

    • .true. if idyn == 8 and nbead > 1

If yesquantum=.true. quantum effects are included. No kaverage is possible for the time being.

nbead

integer

  • if no input

    • min(nproc, 16) idyn /= 0 and yesquantum is .true.

    • -1 otherwise

When yesquantum is true, one has to specify the number of beads of the corresponding path integral. The larger this number, the more accurate the Trotter approximation is (error vanishing as 1/nbead^2).

yeswrite10

logical

.false.

WIP

oldscaling

logical

  • .false. if no input

  • ignore input

    • .true. if idyn == 8

WIP

srcomplex

logical

  • .true. if no input

  • ignore input

    • .false. ipc == 1

WIP

power

real*8

1.d0

WIP

signalnoise

logical

.false.

If signalnoise=.true., one optimizes all the parameters (including atomic positions with ieskin ≠ 0) by following the direction of maximum signal to noise ratio. parr is also effective in this case to regularize the inversion.

gauge_fixing

logical

  • no initialize if no input

  • ignore input

    • .false. if itest == 1 or itestr4 == -7

WIP

beta_learning

real(8)

0.d0

WIP

noopt_onebody

logical

.false.

WIP

scalermax

logical

  • no initialize if no input

  • ignore input

    • .false. if itest == 1 or itestr4 == -7

WIP

yeswritebead

logical

.false.

WIP

yesread10

logical

.false.

WIP

change_parr

logical

.false.

WIP

parr_max

real*8

1d-1

WIP

parr_min

real*8

`` 1d-4``

WIP

delay_changeparr

integer

20

WIP

maxiter_changeparr

integer

-1

WIP

k6gen

logical

automatic(.false.)

WIP

max_ortho

integer

-1

WIP

prep

integer

automatic(-1 or others)

WIP

change_tpar

logical

.false.

WIP

inc_tpar_frequency

integer

  • 100 if no input

  • ignore input

    • 50 if use_stable_tpar is .true.

WIP

use_stable_tpar

logical

.true.

WIP

eps_umrigar

real*8

  • if parr < 0.d0

    • -parr/10.d0 if no input

  • if parr > 0.d0

    • 0.d0 if no input

    • 0.d0 if eps_umrigar /= 0.d0 (ignore input)

WIP

yes_adams

logical

.false.

WIP

divide_tpar

real(8)

4.0d0

WIP

multiply_tpar

real(8)

automatic

WIP

tpar_buffer_len

integer

40

WIP

tpar_max

real(8)

1.d0

WIP

cut_sigma

real(8)

3.5d0

WIP

n_sigmas_tpar

real(8)

5.0d0

WIP

len_tpar_stable_list

integer

10

WIP

yes_dgelscut

logical

.true.

WIP

readio section

Parameter name

Datatype

Default

Description

ncore

integer

automatic

WIP

np3

integer

  • 0 if no input

  • ignore input or above value

    • if np == -1

      • 0 if itestr == -5

      • iese + abs(isfix) + 2*(abs(iesinv) + iesm + iesd + abs(iesfree) + abs(iessw) + iesup + iesking) + 3*ieskin if itestr /= -5

WIP

np

integer

automatic

WIP

iread

integer

  • if no input

    • 6 if optbra > 3

    • 0 if optbra <= 3

  • 3 if io_level == 2 and iread == 2

For correlated sampling or measuring correlation functions with readforward, use iread=3.

writescratch

integer

1

Writes binary scratch files on disk to speed up continuation and allow non-self-consistent calculations and post-processing tools. The following files are written:

wherescratch

character(60 + lchlen)

automatic('./' or 'old')

WIP

unreliable

integer

0

WIP

ifreqdump

integer

1

WIP

nowrite12

logical

.false.

WIP

flush_write

logical

automatic(.true. or .false.)

WIP

parameters section

Parameter name

Datatype

Default

Description

ieser

integer

  • if no input

    • 0 if itestr == -5

    • if itestr /= -5

      • 6 itestr == -6 or itestr4 == -7

      • 1 otherwise

WIP

iesinv

integer

  • 0 if no input

  • ignore input

    • abs(iesinv) if iesinv < 0

Integer (-1, 0 or 1). If neq 0, the spin Jastrow factor matrix is optimized, if allowed in the input fort.10. If < 0, a range can be defined in the &fitpar section with rmaxinv.

iesm

integer

0

Integer (0 or 1). If neq 0, the exponent and/or the contracted coefficient of the basis defining the Jastrow are optimized. When itestr4 = -4,-9, only contracted coefficients are optimized if the basis contains them, otherwise yeszj=.true. is switched on and exponents are optimized.

iesd

integer

0

Integer (0 or 1). It acts as a switch for the 1-body and 2-body Jastrow.

isfix

integer

  • if itestr == -5

    • 0 (ignore input)

  • if itestr /= -5

    • if no input

      • 1 if parcutg == 0

      • if parcutg /= 0

        • 3 if gamma /= 0.d0 and optbra /= 3

        • 1 otherwise

Integer (0 or 1). If iesfix = 1, the variance of the energy is printed out (no optimization assumed).

iesfree

integer

  • 0 if no input

  • ignore input

    • abs(iesfree) if iesfree < 0

Integer (-1, 0 or 1). If neq 0, the density Jastrow factor matrix is optimized. If < 0, a range can be defined in the &fitpar section with rmaxj.

iessw

integer

  • 0 no input

  • ignore input

    • abs(iessw) if iessw < 0

Integer (-1, 0 or 1). If neq 0, the AGP matrix on the localized basis is optimized. If < 0, a range can be defined in the &fitpar section with rmax.

iesup

integer

0

Integer (0 or 1). Same as the above, but for the determinantal part. yeszagp=.true. replaces yeszj in this case.

ieskin

integer

  • 0 if no input

  • use input value or above value

    • ieskin = ieskin + 1 if yespress is .true. and iespbc is .true. and itestr /= -5 then

    • use above value if ieskinold /= 0

      • ieskin = ieskin + 2 if typedyncell == 1

      • ieskin = ieskin + 3 if typedyncell == 2

      • ieskin = ieskin + 1 if typedyncell == 3

Integer (0 or 1). If nuclear forces have to be computed (especially with dynamics idyn > 0), set ieskin > 0.

yespress

logical

  • .false. if no input

  • ignore input

    • .false. if iespbc is .false.

    • .false. if ieskinold == 0

WIP

warp

logical

.true.

WIP

powerwarp

real*8

4.d0

WIP

add_pulay

integer

2

WIP

yespulay

logical

.true.

WIP

typedyncell

integer

automatic (-2, -1, 0, or 3)

Integer value. typedyncell=0 means Standard NVT ensemble with no optimization of cell. typedyncell=1 implies fixed volume, but optimization of b/a and c/a at fixed volume V = a times b times c. typedyncell=2 stands for constant pressure, variable volume, optimizing a, b and c at pressfixed = constant. typedyncell=3 represents constant pressure and variable volume but without modifying b/a and c/a.

scalepulay

real*8

  • 0.d0 lrdmc_der is .true. and lrdmc_nonodes is .false.

  • 1.d0 otherwise

WIP

ext_pot

logical

.false.

WIP

vdw

logical

  • .false. if no input

  • ignore input

    • .false. if exp_pot is .false.

    • .true. if link_atom is .true.

WIP

link_atom

logical

  • .false. if no input

  • ignore input

    • .false. if ext_pot is .false.

    • .false. if mm_restr is .true.

WIP

mm_restr

logical

  • .false. if no input

  • ignore input

    • .false. if link_atom is .true.

WIP

write_rwalk

logical

.false.

WIP

yes_correct

logical

.true.

WIP

yesavopt

logical

  • if no input

    • .true. itestr = -5

    • .false. itestr /= -5

  • ignore input or above value

    • .false. if nrep_bead > 1 and yesquantum is .true.

    • .false. if kaverage is .true. and decoupled_run is .false. and molyes is .true. and yesavsr is .true.

    • .false. (with mol optimiz.)

WIP

yesavsr

logical

  • .true. if no input

  • ignore input

    • .true. if kaverage is .true. and decoupled_run is .false.

    • .false. if nrep_bead > 1 and yesquantum is .true.

WIP

yesavcov

logical

  • .false. if no input

  • ignore input

    • .false. if kaverage is .true. and decoupled_run is .false.

WIP

nrep_bead

integer

1

WIP

yesperiodize

logical

  • .false. if no input

  • ignore input

    • .false. if idyn /= 0 and yesquantum is .true. and yesturboq is .true. and yesperiodize is .true.

WIP

yes_kpoints

logical

.false.

WIP

epsbas

real*8

  • if no input

    • if yes_scemama is .true.

      • 1.0d-9 if yesdft is .true.

      • 1.0d-8 if yesdft is .false.

    • if yes_scemama is .false.

      • 1.0d-8 if yesdft is .true.

      • 1.0d-7 if yesdft is .false.

WIP

yeszj

logical

  • if no input

    • .true. itestr3 == -8 .or. itestr3 == -5

    • .false. otherwise

Logical value. If yeszj=.true., exponents of the Jastrow basis are optimized if iesm neq 0 even if itestr4 = -4, -9.

yeszagp

logical

  • if no input

    • .true. itestr3 == -8 .or. itestr3 == -5

    • .false. otherwise

Logical value. Same as above, but for the determinantal part.

decoupled_run

logical

  • if no input

    • .false. yesdft is .true.

    • yesdft is .false.

      • .true. itestr /= -5

      • .false. itestr == -5

  • ignore input or above value

    • .false. if kaverage is .false

WIP

scaleeloc

real*8

-1.d0

WIP

cutoff_p

real(8)

9.d0

WIP

fixa

logical

.false.

Logical value. If fixa = .true., a is kept fixed during dynamics.

fixb

logical

.false.

Logical value. If fixb = .true., b is kept fixed during dynamics.

fixc

logical

.false.

Logical value. If fixc = .true., c is kept fixed during dynamics.

real_contracted

logical

.true.

Logical value. For complex wf, if real_contracted=.true., only the real part of the contracted coefficient of the basis is optimized.

real_agp

logical

.false.

Logical value. For complex wf, if real_agp=.true. and iessw=neq 0, only the real part of the complex agp matrix is optimized. The imaginary part is assumed and set to zero.

no_sjbra

logical

.false.

WIP

pressfixed

real*8

0.d0

Value of the pressure in a.u., for dynamics at fixed pressure. Note: the classical value is not included.

read_molecul

logical

.false.

WIP

epsder

real*8

1d-5

WIP

yes_scemama

logical

.true.

WIP

yes_scemama_open

logical

.false.

WIP

unused section

Parameter name

Datatype

Default

Description

rsignr

real*8

0.d0

WIP

beta

real*8

0.d0

WIP

testderiv

integer

0

WIP

fitpar section

Parameter name

Datatype

Default

Description

nparinv

integer

  • 0 if no input

  • ignore input

    • 0 if iesinv >= 0

WIP

initparinv

integer

  • 0 if no input

  • ignore input

    • 0 if iesinv >= 0

WIP

rmaxinv

real*8

  • 1d-10 if no input

  • ignore input

    • 0.d0 if iesinv >= 0

    • 1d-10 if rmaxinv <= 0 and iesinv < 0

Real value. If iesinv < 0, then all matrix elements of the spin Jastrow at distance larger than rmaxinv are not optimized. The rule is the same as the ones above for the spin Jastrow.

npar

integer

  • 0 if no input

  • ignore input

    • 0 if iesfree >= 0

WIP

initpar

integer

  • -1 if no input

  • ignore input

    • 0 if iesfree >= 0

WIP

rmaxj

real*8

  • 1d-10 if no input

  • ignore input

    • 0.d0 if iesfree >= 0

    • 1d-10 if iesfree < 0 and rmaxj <= 0

Real value. If iefree < 0, then all matrix elements of the Jastrow at distance larger than rmaxj are not optimized. rmaxj = 0 has the same meaning as above, implying that only the so-called 3-body Jastrow is optimized.

nparsw

integer

  • 0 if no input

  • ignore input

    • 0 if iessw >= 0

WIP

initparsw

integer

  • -1 if no input

  • ignore input

    • 0 if iessw >= 0

WIP

rmax

real*8

  • 1d-10 if no input

  • ignore input

    • 0.d0 if iessw >= 0

    • 1d-10 if rmax <= 0 and iessw < 0

Real value. If iessw < 0, then all matrix elements of the AGP at distance larger than rmax are not optimized. rmax = 0 implies that no matrix elements connecting different atoms are optimized.

npower

integer

0

WIP

powermin

integer

0

WIP

npowersz

integer

0

WIP

powerminsz

integer

0

WIP

allfit

logical

.true.

WIP

dynamic section

Parameter name

Datatype

Default

Description

temp

real*8

  • 0.d0 if no input

  • use input value

    • -0.5*temp*kboltz/rydberg if temp <= 0.d0

Real value. The temperature in a.u. If temp < 0, then abs(temp) indicates the temperature in Kelvin. temp = 0 can be used for structural optimization. If the temperature is set to 0 K, it is purely structural optimization.

friction

real*8

0.d0

Real value. It is necessary to keep it non-zero in Newtonian dynamics (idyn=4,7,8) but can be set to zero (recommended) for idyn=5 (the recommended dynamics).

delta0

real*8

0.d0

Real value. Used with idyn = 5, it is a parameter that can help with convergence in the small time step limit (tion to 0). It should be set in such a way that the Hessian matrix during the dynamics is well approximated by delta0 times Covariance matrix. For other dynamics, it represents a multiplicative factor applied to the covariance matrix used to decrease the correlation times. In these cases, delta0 has to be larger than a critical value depending on the time step. However, this is chosen by default.

delta0q

real*8

  • if no input

    • friction if idyn == 7 or idyn == 8

    • 0.d0 otherwise

WIP

delta0k

real*8

  • if no input

    • 1.d0 if idyn == 7 or idyn == 8

    • 0.d0 otherwise

WIP

scalecov

real*8

  • 1.d0 if no input

  • ignore input

    • 1.d0 if scalecov <= 0.d0

WIP

iskipdyn

integer

  • if no input or iskipdyn <= 0

    • 1 + nmore_force - 1 if nmore_force > 1

    • 1 if nmore_force <= 1

  • if iskipdyn > 0

    • iskipdyn + nmore_force - 1 if nmore_force > 1

    • iskipdyn if nmore_force <= 1

Integer value. After iskipdyn times nweight MC steps, check if dev_mat < maxdev_dyn.

maxdev_dyn

real*8

0.d0

Real value. After each WF optimization, it is the maximum value of dev max accepted for an ion move. Deprecated.

stepcg_recount

logical

.false.

WIP

write_cov

logical

.false.

WIP

normcorr

real*8

1.d0

Real value. If non-zero and equal to one, it applies the noise correction to reduce the bias implied by the statistical evaluation of forces. In theory it should work, but in practice, it has little effects. So it is recommended to set to zero.

yesturboq

logical

  • if no input

    • .true. if yesquantum is .true.

    • .false. if yesquantum is .false.

  • ignore input or above value

    • .true. if idyn == 8 and nbread > 1

WIP

yessecond

logical

  • if no input

    • .true. if yesquantum is .true.

    • .false. if yesquantum is .false.

  • ignore input or above value

    • .true. if idyn == 8

WIP

smoothcut

real*8

0.d0

WIP

killcut

logical

.false.

WIP

scale_mass

real*8

1.d0

WIP

eqcellab

logical

.false.

WIP

eqcellac

logical

  • .false. if no input

  • ignore input

    • .false. if eqcellab is .false.

    • .false. if eqcellbc is .false.

WIP

eqcellbc

logical

  • .false. if no input

  • ignore input

    • .false. is eqcellab is .true.

WIP

yesrootc

logical

.false.

WIP

addrognoso

logical

  • if no input

    • .true. if idyn == 5

    • .false. if idyn /= 5

Logical value. With idyn = 5 it has to be set to .true. in order to eliminate the bias in describing the canonical ensemble for tion to 0.

cleanrognoso

logical

.false.

WIP

kpoints section

Parameter name

Datatype

Default

Description

kp_type

integer

0

  • description(DFT):

This integer specifies the type of k-points which will be chosen in the calculation.

  • kp_type = 0: Do not perform any k-points sampling and use the phase specified in the fort.10 as the unique k-point.

  • kp_type = 1: Use the Monkhorst-Pack algorithm to generate equally-spaced k-points in the first Brillouin zone. The size of the grid in the three Cartesian directions is determined by the integers nk1, nk2, nk3. Note that nk1 must be set to a value > 0. If nk2, nk3 are not set, then they are taken to be equal to nk1. Also, if skip_equivalence (see below) is set to .false. the number of k-points might be reduced.

    In this case, run the tool find_kpoints.x with the desired input in order to know how many processors must be allocated.

  • kp_type = 2: When this is used, k-points are set by the user and their number is specified by the integer nk1. In this case, the section KPOINTS is needed (see below).

  • kp_type = 3: Generates k-points path along high-symmetry lines in the first Brillouin zone. The initial and final points of these segments are specified in the section KPOINTS (see below). The number of extremal points is specified by the integer nk1 and the number of points in each segment is specified by the integer nk2.

  • kp_type = 4: Generate k-points randomly within the first Brillouin zone. The number of k-points is specified by nk1. KPOINTS section is not needed.

nk1

integer

-1

Meanings depend on the value of kp_type, see above for a detailed explanation.

nk2

integer

  • if no input

    • nk1 if manyfort10 is .true. and nbead <= 1

    • -1 otherwise

Meanings depend on the value of kp_type, see above for a detailed explanation.

nk3

integer

  • if no input

    • nk1 if manyfort10 is .true. and nbread <= 1

    • -1 otherwise

Meanings depend on the value of kp_type, see above for a detailed explanation.

k1

integer

0

For kp_type = 1, set k1, k2, k3 equal to 1 in order to apply an offset to the k-point grid generated by the Monkhorst-Pack algorithm. In some cases, this can help to reach

k2

integer

0

For kp_type = 1, set k1, k2, k3 equal to 1 in order to apply an offset to the k-point grid generated by the Monkhorst-Pack algorithm. In some cases, this can help to reach

k3

integer

0

For kp_type = 1, set k1, k2, k3 equal to 1 in order to apply an offset to the k-point grid generated by the Monkhorst-Pack algorithm. In some cases, this can help to reach

time_reversal

logical

.false.

WIP

skip_equivalence

logical

.true.

WIP

double_kpgrid

logical

  • .false. if no input

  • ignore input

    • .true. if manyfort10 is .true. and nbead <= 1 and abs(kp_type) == 5

WIP

compute_bands

logical

.false.

WIP

KPOINTS lines section

Parameter name

Datatype

Default

Description

KPOINTS

WIP

Required for a calculation with a k-grid.

User-defined k-points are written in the following manner. wkp(i) denotes the weight corresponding to the kpoint xkp(:,i) if the total weight is different from one.:

molecul section

Parameter name

Datatype

Default

Description

epsdgm

real*8

1d-14

WIP

nx

integer

0 (error, input required)

Number of lattice points for the real space integration grid in the x direction. By default, nx = ny = nz

ny

integer

  • nx if no input

WIP

nz

integer

  • ny if no input

WIP

nbufd

integer

automatic

Input value for the buffer dimension. Note that, in the complex code, the buffer dimension is automatically doubled. In this case, consider decreasing the buffer dimension if you have a memory problem.

ax

real*8

  • if no input

    • 0.d0

  • ignore input

    • cellscale(1)/nx if iespbc is .true.

Space (a.u.) for an open system in the x direction; for periodic systems, it is chosen as the cell parameter in the same direction and need not be specified. By default, ax = ay = az

ay

real*8

  • if no input

    • ax

  • ignore input

    • cellscale(2)/ny if iespbc is .true.

WIP

az

real*8

  • if no input

    • ay

  • ignore input

  • cellscale(3)/nz if iespbc is .true.

WIP

nmolmin

integer

  • neldo if no input

WIP

smearing

real*8

1d-5

WIP

nmolmax

integer

  • if no input

    • nmol if neldo == 0

    • neldo otherwise

  • error if nmolmax < neldo

WIP

weight_loc

real*8

  • -1.d0 if no input

  • if weight_loc == 0

    • epsdgm**2 if epsdgm == 0.d0

    • 1d-8 if epsdgm /= 0.d0

WIP

orthoyes

logical

  • if no input

    • .true.

  • ignore input

    • .true. if gramyes is .true.

WIP

epsrem_contr

real*8

epsdgel

WIP

nmolmaxw

integer

  • nmolmax if no input

WIP

gramyes

logical

.true.

WIP

add_onebody2det

logical

  • if no input

    • .false. npsar > 0

    • .true. npsar <= 0

WIP

shift_origin

logical

.true.

WIP

shiftx

logical

.false.

WIP

shifty

logical

.false.

WIP

shiftz

logical

.false.

WIP

Parallel execution and resources

  • turborvb-mpi.x: Run as mpirun -np N ./turborvb-mpi.x < datas.input. k-point pools, replicas, and I/O rank layout are controlled by &parameters / &readio.

  • OpenMP: Thread count from environment or runtime; rank 0 may read and broadcast it at startup.

  • GPU: Builds with CUDA / cuSOLVER can offload determinant evaluation ( main.f90 _CUSOLVER / _OFFLOAD blocks).

Notes and limitations

  • Input and source logic are complex; start from test/ and template/ for new runs.

  • MPI vs serial: Different executables; --help is reliable with turborvb-serial.x.

  • Log column positions depend on Fortran list-directed I/O; if the code changes, plot_*.sh grep/awk may need adjustment.

  • Memory and GPU usage depend strongly on nel, nion, Pfaffian/complex flags, and mesh density.