# Chapter 7, example 1: geometry optimization of an isolated H2O molecule (BFGS)
# Target versions: CP2K 2023.1 ... 2026.2 (no version-specific keywords used)
# Run:  cp2k.psmp -i h2o_geo_opt_bfgs.inp -o h2o_geo_opt_bfgs.out
# Try other optimizers (note: an @SET in the file overrides "-E VAR=value",
# so edit the two @SET lines instead, e.g. with sed):
#   sed -e 's/^@SET OPT .*/@SET OPT LBFGS/' -e 's/^@SET PROJ .*/@SET PROJ h2o_lbfgs/' \
#       h2o_geo_opt_bfgs.inp > h2o_lbfgs.inp
@SET PROJ h2o_opt
@SET OPT  BFGS

&GLOBAL
  PROJECT ${PROJ}
  RUN_TYPE GEO_OPT
  PRINT_LEVEL MEDIUM
&END GLOBAL

&FORCE_EVAL
  METHOD QUICKSTEP
  &DFT
    BASIS_SET_FILE_NAME BASIS_MOLOPT_UZH
    POTENTIAL_FILE_NAME POTENTIAL_UZH
    &MGRID
      CUTOFF 400
      REL_CUTOFF 60
    &END MGRID
    &QS
      EPS_DEFAULT 1.0E-12
      ! re-use the wavefunctions of previous steps as SCF guess
      EXTRAPOLATION ASPC
      EXTRAPOLATION_ORDER 3
    &END QS
    &POISSON
      PERIODIC NONE
      POISSON_SOLVER MT
    &END POISSON
    &SCF
      SCF_GUESS ATOMIC
      EPS_SCF 1.0E-7
      MAX_SCF 30
      &OT
        MINIMIZER DIIS
        PRECONDITIONER FULL_ALL
      &END OT
      &OUTER_SCF
        EPS_SCF 1.0E-7
        MAX_SCF 10
      &END OUTER_SCF
    &END SCF
    &XC
      &XC_FUNCTIONAL PBE
      &END XC_FUNCTIONAL
    &END XC
  &END DFT
  &SUBSYS
    &CELL
      ABC 10.0 10.0 10.0
      PERIODIC NONE
    &END CELL
    &TOPOLOGY
      COORD_FILE_NAME h2o_distorted.xyz
      COORD_FILE_FORMAT XYZ
      &CENTER_COORDINATES
      &END CENTER_COORDINATES
    &END TOPOLOGY
    &KIND O
      BASIS_SET DZVP-MOLOPT-PBE-GTH-q6
      POTENTIAL GTH-PBE-q6
    &END KIND
    &KIND H
      BASIS_SET DZVP-MOLOPT-PBE-GTH-q1
      POTENTIAL GTH-PBE-q1
    &END KIND
  &END SUBSYS
&END FORCE_EVAL

&MOTION
  &GEO_OPT
    TYPE MINIMIZATION
    OPTIMIZER ${OPT}
    MAX_ITER 200
    ! convergence criteria (these are the CP2K defaults, written out explicitly)
    MAX_FORCE 4.5E-4
    RMS_FORCE 3.0E-4
    MAX_DR 3.0E-3
    RMS_DR 1.5E-3
    &BFGS
      TRUST_RADIUS [angstrom] 0.25
      USE_MODEL_HESSIAN T
    &END BFGS
    &LBFGS
      MAX_H_RANK 20
    &END LBFGS
    &CG
      MAX_STEEP_STEPS 0
      &LINE_SEARCH
        TYPE 2PNT
      &END LINE_SEARCH
    &END CG
  &END GEO_OPT
  &PRINT
    &TRAJECTORY
      FORMAT XYZ
      &EACH
        GEO_OPT 1
      &END EACH
    &END TRAJECTORY
    &RESTART
      BACKUP_COPIES 1
      &EACH
        GEO_OPT 1
      &END EACH
    &END RESTART
  &END PRINT
&END MOTION
