.. _keywords_list:

Keywords
********

Block program offers many keywords to control the calculation.  In the Block
input file, each keyword (and its value) should take one line.  There are two
types of format to input the keywords.  One is the key-value pattern::

    keyword value1 value2 ...

The other is the `schedule` section::

    schedule
    0 50  1.0e-6 1e-06
    5 50  1.0e-7 0e-06
    end

Hamiltonian Types
=================

Default Hamiltonian type is the chemistry Hamiltonian, in which the
2-electron interaction term is a dense matrix.  Block also supports model
Hamiltonians:

heisenberg
  No associated value.

hubbard
  No associated value.

Algorithm Types
===============

If no algorithm is specified, the default is twodot\_to\_onedot algorithm.

onedot
  No associated value.

twodot
  No associated value.

twodot\_to\_onedot
  followed by a single number to indicate the iteration when to switch from the
  two-dot to the one-dot algorithm.

Warm-up Types
=============

If ``warmup`` is not specified, the default is ``local\_0site``.

warmup
  followed by one of the following strings.

  | local\_0site
  | local\_2site
  | local\_3site
  | local\_4site
  | wilson


Solver Types
============

If not specified, default is ``davidson`` solver.

davidson
  No associated value

lanczos 
  No associated value

Orbital Reorder Types
=====================

If not specified, ``fielder`` ordering is used by default.

fiedler
  No associated value

gaopt
  followed by the filename

reorder
  followed by the filename which saves the indices of the reordered orbitals.

noreorder
  No associated value

Calculation Types
=================

dmrg
  No associated value.  This is the default calculation type.

calcoverlap
  No associated value.  If set, Compute only the overlap of two DMRG wave function.

calchamiltonian
  No associated value.

fourpdm (Not support in Block-1.5)
  No associated value.  If set, besides the regular dmrg calculation, the
  program also compute the 4-particle density matrix.

fullrestart 
  No associated value

nevpt2\_npdm
  No associated value

onepdm
  No associated value, If set, the program also computes and stores the
  1-particle density matrix in :file:`spatial_onepdm.*.*.txt`.

restart\_fourpdm
  No associated value

restart\_nevpt2\_npdm
  No associated value

restart\_onepdm
  No associated value

restart\_threepdm
  No associated value

restart\_tran\_onepdm
  No associated value

restart\_tran\_twopdm
  No associated value

restart\_twopdm
  No associated value

threepdm
  No associated value, If set, the program also computes and stores the
  3-particle density matrix in :file:`spatial_threepdm.*.*.txt`.

transition\_onepdm
  No associated value, If set, the program also computes and stores the
  transition density matrix in :file:`spatial_onepdm.*.*.txt`.

transition\_twopdm
  No associated value, If set, the program also computes and stores the
  transition 2-particle density matrix in :file:`spatial_twopdm.*.*.txt`.

twopdm
  No associated value, If set, the program also computes and stores the
  2-particle density matrix in :file:`spatial_twopdm.*.*.txt`.
  

Schedule
========

DMRG sweep schedule.  It supports two types of input format.  One is::

    schedule default

to generate the sweep schedule by Block program.  This is the default value of
``schedule`` keyword.  The other is to explicitly input the schedule, eg::

    schedule
    0 50  1.0e-6 1e-06
    5 50  1.0e-7 0e-06
    end

The first column is the sweep-iteration, the second column is the corresponding
bond dimension, the third column is the convergence tolerance for Davidson
diagonalization, the fourth column is the noise.


Expert Keywords
===============

backward
  No associated value.  If set, the program starts with backward sweep.

hf\_occ
  The initial HF wave function occupancies, in spin orbital.  It can be one of
  the following values.  The recommended one is ``integral``.

  integral
    Generate occupancy pattern based on the 1-electron integrals.
    
  canonical
    Based on the input orbital ordering, take the first N orbitals as occupied
    orbitals

  manual
    followed by the HF occupancy in the same line.

irrep
  followed by one or two numbers. If one number is given, it determines the wave
  function symmetry.  If two numbers are given, it means that calculations of
  transition density matrix between wavefunctions with different irreps.  The
  irrep value follows the Molpro symmetry convention, see also
  https://github.com/pyscf/dmrgscf/blob/master/pyscf/dmrgscf/dmrg_sym.py

lastM
  followed by an integer.  Default is 500

maxiter
  followed by an integer represents the max sweep iterations. Default is 10.

maxM
  followed by an integer, the maximum bond dimension.

nelec
  followed by an integer, for the total number of electrons.

.. new\_npdm\_code

nonspinadapted 
  No associated value.

nroots
  followed by one integer, for the number of states to solve. Default is 1.

.. occ nocc
..   followed by one integer, for the number of occupied orbitals.

orbitals
  followed by the orbital file

outputlevel **0** `|| 1 || 2 || 3`
  followed by an integer, range from 0 (less output) to 3 (very noise).  Default is 0.

.. pdm\_unsorted

scratch
  followed by the scratch directory to store the intermediates, the resultant
  wave function, and density matrices.

screen\_tol
  followed by a float number.  Default is 0.0

spin `2S`
  followed by an integer represents the difference of alpha and beta electron
  numbers. 

startM
  followed by an integer.  Default is 250.

statespecific 
  No associated value.  This option implies that a previous dmrg calculation has
  already been performed.  This calculation will take the previous wavefunctions
  and refine them.

sweep\_tol
  followed by a float number, for the convergence tolerance.

sym
  followed by the string for the symbol of point group symmetry, can be d2h and
  its subgroup.

weights
  followed by a list of float numbers for weight of each state.  You could chose
  to omit the keyword weights in which case the weights will be distributed
  uniformly bet ween the different roots.

num_thrds (new in Block-1.5)
  followed by an integer for the number of OpenMP threads to use.

memory (new in Block-1.5)
  followed by an integer and a letter as the unit (k, m, g).
  The default is ``2 g`` (2 GB memory).