Octopus
propagator_bomd.F90
Go to the documentation of this file.
1!! Copyright (C) 2023 N. Tancogne-Dejean, M. Lueders, A. Buccheri
2!!
3!! This program is free software; you can redistribute it and/or modify
4!! it under the terms of the GNU General Public License as published by
5!! the Free Software Foundation; either version 2, or (at your option)
6!! any later version.
7!!
8!! This program is distributed in the hope that it will be useful,
9!! but WITHOUT ANY WARRANTY; without even the implied warranty of
10!! MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
11!! GNU General Public License for more details.
12!!
13!! You should have received a copy of the GNU General Public License
14!! along with this program; if not, write to the Free Software
15!! Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
16!! 02110-1301, USA.
17!!
18
19#include "global.h"
20
23 use debug_oct_m
24 use global_oct_m
27
28 implicit none
29
30 private
31 public :: &
33
35 type, extends(propagator_t) :: propagator_bomd_t
36 private
37 end type propagator_bomd_t
38
39 interface propagator_bomd_t
40 procedure propagator_bomd_constructor
41 end interface propagator_bomd_t
42
43 !# doc_start bomd_propagation_operations
44 ! Specific exponential mid-point propagation operations identifiers
45 character(len=ALGO_LABEL_LEN), public, parameter :: &
46 BOMD_START = 'BOMD_START', &
47 bomd_finish = 'BOMD_FINISH', &
48 bomd_elec_scf = 'BOMD_ELEC_SCF'
49
50 ! Specific exponential mid-point propagation operations
51 type(algorithmic_operation_t), public, parameter :: &
52 OP_BOMD_START = algorithmic_operation_t(bomd_start, 'Starting Born-Oppenheimer MD'), &
53 op_bomd_finish = algorithmic_operation_t(bomd_finish, 'Finishing Born-Oppenheimer MD'), &
55 !# doc_end
56
57contains
58
59 ! ---------------------------------------------------------
60 function propagator_bomd_constructor(dt) result(this)
61 real(real64), intent(in) :: dt
62 type(propagator_bomd_t), pointer :: this
63
65
66 allocate(this)
67
68 this%predictor_corrector = .false.
69 this%start_operation = op_bomd_start
70 this%final_operation = op_bomd_finish
71
72 call this%add_operation(op_verlet_update_pos)
73 call this%add_operation(op_update_couplings)
74 call this%add_operation(op_update_interactions)
75 call this%add_operation(op_bomd_elec_scf)
76 call this%add_operation(op_verlet_compute_acc)
77 call this%add_operation(op_verlet_compute_vel)
78 call this%add_operation(op_iteration_done)
79 call this%add_operation(op_rewind_algorithm)
80
81 this%algo_steps = 1
82 this%dt = dt
83
86
87end module propagator_bomd_oct_m
88
89
90!! Local Variables:
91!! mode: f90
92!! coding: utf-8
93!! End:
This module implements the basic elements defining algorithms.
Definition: algorithm.F90:141
type(algorithmic_operation_t), parameter, public op_iteration_done
Definition: algorithm.F90:179
type(algorithmic_operation_t), parameter, public op_rewind_algorithm
Definition: algorithm.F90:179
type(algorithmic_operation_t), parameter, public op_update_couplings
Definition: algorithm.F90:179
type(algorithmic_operation_t), parameter, public op_update_interactions
Definition: algorithm.F90:179
type(algorithmic_operation_t), parameter, public op_bomd_finish
type(propagator_bomd_t) function, pointer propagator_bomd_constructor(dt)
character(len=algo_label_len), parameter, public bomd_elec_scf
type(algorithmic_operation_t), parameter, public op_bomd_elec_scf
character(len=algo_label_len), parameter, public bomd_finish
This module implements the basic propagator framework.
Definition: propagator.F90:117
type(algorithmic_operation_t), parameter, public op_verlet_compute_acc
type(algorithmic_operation_t), parameter, public op_verlet_update_pos
type(algorithmic_operation_t), parameter, public op_verlet_compute_vel
Descriptor of one algorithmic operation.
Definition: algorithm.F90:163
Implements a propagator for Born-Oppenheimer molecular dynamics.
Abstract class implementing propagators.
Definition: propagator.F90:138