-
Notifications
You must be signed in to change notification settings - Fork 5
/
eigen_driver.f
69 lines (49 loc) · 1.58 KB
/
eigen_driver.f
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
! Subroutine for computing time evolution through time slices
module QMDynamicSlice_driver_m
use type_m
use constants_m
use parameters_m , only : survival , driver , n_part
use Data_Output , only : Dump_stuff
use Schroedinger_m , only : DeAllocate_QDyn
use TDSE_adiabatic_m , only : TDSE_adiabatic
use CSDM_adiabatic_m , only : CSDM_adiabatic
use Chebyshev_driver_m , only : Chebyshev_driver
public :: QMDynamicSlice_driver
private
contains
!
!
!================================
subroutine QMDynamicSlice_driver
!================================
implicit none
! local variables ...
integer :: it
real*8 , allocatable :: QDyn_temp(:,:,:)
type(f_time) :: QDyn
If( .NOT. survival ) then
Print*, ">>> Survival = .FALSE. <<<"
Stop
end If
select case ( DRIVER )
case( "slice_AO" , "slice_FSSH" )
CALL TDSE_adiabatic ( QDyn , it )
case( "slice_CSDM" )
CALL CSDM_adiabatic ( QDyn , it )
case( "slice_Cheb" )
CALL Chebyshev_driver ( QDyn , it )
case default
Print*, " >>> Check your QMDynamicSlice_driver options <<< :" , driver
end select
! prepare data for survival probability ...
allocate ( QDyn_temp( it , 0:size(QDyn%fragments)+1 , n_part ) , source=QDyn%dyn( 1:it , 0:size(QDyn%fragments)+1 , : ) )
CALL move_alloc( from=QDyn_temp , to=QDyn%dyn )
CALL Dump_stuff( QDyn=QDyn )
! final procedures ...
CALL DeAllocate_QDyn( QDyn , flag="dealloc" )
include 'formats.h'
end subroutine QMDynamicSlice_driver
!
!
!
end module QMDynamicSlice_driver_m