Branch data Line data Source code
1 : : !!****m* ABINIT/m_rttddft_propagate
2 : : !! NAME
3 : : !! m_rttddft_propagate
4 : : !!
5 : : !! FUNCTION
6 : : !! Driver to perform electronic or nuclear step
7 : : !!
8 : : !! COPYRIGHT
9 : : !! Copyright (C) 2021-2026 ABINIT group (FB)
10 : : !! This file is distributed under the terms of the
11 : : !! GNU General Public License, see ~abinit/COPYING
12 : : !! or http://www.gnu.org/copyleft/gpl.txt .
13 : : !!
14 : : !! SOURCE
15 : :
16 : : #if defined HAVE_CONFIG_H
17 : : #include "config.h"
18 : : #endif
19 : :
20 : : #include "abi_common.h"
21 : :
22 : : module m_rttddft_propagate
23 : :
24 : : use defs_basis
25 : : use defs_abitypes, only: MPI_type
26 : : use defs_datatypes, only: pseudopotential_type
27 : :
28 : : use m_dtset, only: dataset_type
29 : : use m_errors, only: msg_hndl
30 : : use m_hamiltonian, only: gs_hamiltonian_type
31 : : use m_rttddft, only: rttddft_setup_ele_step
32 : : use m_rttddft_propagators, only: rttddft_propagator_er, &
33 : : & rttddft_propagator_emr
34 : : use m_rttddft_tdks, only: tdks_type
35 : : use m_specialmsg, only: wrtout
36 : :
37 : : implicit none
38 : :
39 : : private
40 : : !!***
41 : :
42 : : public :: rttddft_propagate_ele
43 : : !public :: rttddft_propagate_nuc
44 : : !!***
45 : :
46 : : contains
47 : : !!***
48 : :
49 : : !!****f* m_rttddft/rttddft_propagate_ele
50 : : !!
51 : : !! NAME
52 : : !! rttddft_propagate_ele
53 : : !!
54 : : !! FUNCTION
55 : : !! Main subroutine to propagate time-dependent KS orbitals
56 : : !!
57 : : !! INPUTS
58 : : !! dtset <type(dataset_type)>=all input variables for this dataset
59 : : !! istep <integer> = step number
60 : : !! mpi_enreg <MPI_type> = MPI-parallelisation information
61 : : !! psps <type(pseudopotential_type)> = variables related to pseudopotentials
62 : : !! tdks <type(tdks_type)> = the tdks object to initialize
63 : : !!
64 : : !! OUTPUT
65 : : !!
66 : : !! SOURCE
67 : 1725 : subroutine rttddft_propagate_ele(dtset, istep, mpi_enreg, psps, tdks)
68 : :
69 : : !Arguments ------------------------------------
70 : : !scalars
71 : : integer, intent(in) :: istep
72 : : type(dataset_type), intent(inout) :: dtset
73 : : type(MPI_type), intent(inout) :: mpi_enreg
74 : : type(pseudopotential_type), intent(inout) :: psps
75 : : type(tdks_type), intent(inout) :: tdks
76 : :
77 : : !Local variables-------------------------------
78 : : !scalars
79 : : character(len=500) :: msg
80 : : !arrays
81 : :
82 : : ! ***********************************************************************
83 : :
84 : 1725 : write(msg,'(a,a,i0)') ch10, '--- Iteration ', istep
85 : 1725 : call wrtout(ab_out,msg)
86 [ + + ]: 1725 : if (do_write_log) call wrtout(std_out,msg)
87 : :
88 : : ! Update various quantities after a nuclear step
89 [ - + ]: 1725 : if (dtset%ionmov /= 0) call rttddft_setup_ele_step(dtset,mpi_enreg,psps,tdks)
90 : :
91 : : ! Propagate cg
92 : 3430 : select case (dtset%td_propagator)
93 : : case(0)
94 : 1705 : call rttddft_propagator_er(dtset,istep,mpi_enreg,psps,tdks,calc_properties=.true.)
95 : : case(1)
96 : 20 : call rttddft_propagator_emr(dtset,istep,mpi_enreg,psps,tdks)
97 : : case default
98 : 0 : write(msg,"(a)") "Unknown Propagator - check the value of td_propagator"
99 [ + + - ]: 1725 : ABI_ERROR(msg)
100 : : end select
101 : :
102 : 1725 : end subroutine rttddft_propagate_ele
103 : : !!***
104 : :
105 : : !!****f* m_rttddft/rttddft_propagate_nuc
106 : : !!
107 : : !! NAME
108 : : !! rttddft_propagate_nuc
109 : : !!
110 : : !! FUNCTION
111 : : !! Main subroutine to propagate nuclei using Ehrenfest dynamics
112 : : !!
113 : : !! INPUTS
114 : : !! dtset <type(dataset_type)>=all input variables for this dataset
115 : : !! istep <integer> = step number
116 : : !! mpi_enreg <MPI_type> = MPI-parallelisation information
117 : : !! psps <type(pseudopotential_type)> = variables related to pseudopotentials
118 : : !! tdks <type(tdks_type)> = the tdks object to initialize
119 : : !!
120 : : !! OUTPUT
121 : : !!
122 : : !! SIDE EFFECTS
123 : : !!
124 : : !! SOURCE
125 : : !subroutine rttddft_propagate_nuc(dtset, istep, mpi_enreg, psps, tdks)
126 : :
127 : : !!Arguments ------------------------------------
128 : : !!scalars
129 : : !type(tdks_type), intent(inout) :: tdks
130 : : !integer, intent(in) :: istep
131 : : !type(dataset_type), intent(in) :: dtset
132 : : !type(MPI_type), intent(inout) :: mpi_enreg
133 : : !type(pseudopotential_type), intent(inout) :: psps
134 : : !
135 : : !!Local variables-------------------------------
136 : : !!scalars
137 : : !character(len=500) :: msg
138 : : !!arrays
139 : : !
140 : : ! ***********************************************************************
141 : :
142 : : !write(msg,'(2a,i5,a)') ch10,'--- Iteration',istep
143 : : !call wrtout(ab_out,msg)
144 : : !if (do_write_log) call wrtout(std_out,msg)
145 : :
146 : : !end subroutine rttddft_propagate_nuc
147 : : !!***
148 : :
149 : : end module m_rttddft_propagate
150 : : !!***
|