55 INTEGER :: max_f_index = -1, &
61 REAL(kind=
dp),
ALLOCATABLE,
DIMENSION(:) :: eigenvalues, w0, we, a_k, &
62 quasi_energies, m0_energies, &
63 m0_weights, e_k_kp_spin
64 REAL(kind=
dp),
ALLOCATABLE,
DIMENSION(:, :) :: de_dk_kp_spin
65 COMPLEX(KIND=dp),
ALLOCATABLE,
DIMENSION(:, :, :) :: dipole_kp_spin
66 REAL(kind=
dp),
ALLOCATABLE,
DIMENSION(:, :, :) :: all_quasi_energies, all_a_k, &
67 all_m0_energies, all_m0_weights
81 CHARACTER(LEN=*),
PARAMETER :: routinen =
'floquet_env_create'
83 INTEGER :: handle, nao, ne, nf, nk, ns
85 CALL timeset(routinen, handle)
87 floquet_env%nao = bs_env%n_ao
88 floquet_env%n_spin = bs_env%n_spin
89 floquet_env%max_f_index = bs_env%max_floquet_index
90 floquet_env%n_f_size = floquet_env%nao*(1 + 2*floquet_env%max_f_index)
91 floquet_env%n_E = nint(2*bs_env%energy_window_floquet/bs_env%energy_step_floquet)
92 floquet_env%nkp_only_bs = bs_env%nkp_only_bs
95 nf = floquet_env%n_f_size
97 ns = floquet_env%n_spin
98 nk = floquet_env%nkp_only_bs
101 ALLOCATE (floquet_env%eigenvalues(nf), floquet_env%w0(nf), floquet_env%wE(nf))
102 ALLOCATE (floquet_env%a_k(ne))
103 ALLOCATE (floquet_env%quasi_energies(nao), floquet_env%m0_energies(nao), &
104 floquet_env%m0_weights(nao))
105 ALLOCATE (floquet_env%e_k_kp_spin(nao), floquet_env%de_dk_kp_spin(3, nao), &
106 floquet_env%dipole_kp_spin(3, nao, nao))
110 ALLOCATE (floquet_env%all_quasi_energies(nao, ns, nk), source=0.0_dp)
111 ALLOCATE (floquet_env%all_a_k(ne, ns, nk), source=0.0_dp)
112 ALLOCATE (floquet_env%all_m0_energies(nao, ns, nk), source=0.0_dp)
113 ALLOCATE (floquet_env%all_m0_weights(nao, ns, nk), source=0.0_dp)
115 CALL timestop(handle)
126 CHARACTER(LEN=*),
PARAMETER :: routinen =
'floquet_env_release'
130 CALL timeset(routinen, handle)
132 IF (
ALLOCATED(floquet_env%eigenvalues))
DEALLOCATE (floquet_env%eigenvalues)
133 IF (
ALLOCATED(floquet_env%w0))
DEALLOCATE (floquet_env%w0)
134 IF (
ALLOCATED(floquet_env%wE))
DEALLOCATE (floquet_env%wE)
135 IF (
ALLOCATED(floquet_env%a_k))
DEALLOCATE (floquet_env%a_k)
136 IF (
ALLOCATED(floquet_env%quasi_energies))
DEALLOCATE (floquet_env%quasi_energies)
137 IF (
ALLOCATED(floquet_env%m0_energies))
DEALLOCATE (floquet_env%m0_energies)
138 IF (
ALLOCATED(floquet_env%m0_weights))
DEALLOCATE (floquet_env%m0_weights)
139 IF (
ALLOCATED(floquet_env%e_k_kp_spin))
DEALLOCATE (floquet_env%e_k_kp_spin)
140 IF (
ALLOCATED(floquet_env%de_dk_kp_spin))
DEALLOCATE (floquet_env%de_dk_kp_spin)
141 IF (
ALLOCATED(floquet_env%dipole_kp_spin))
DEALLOCATE (floquet_env%dipole_kp_spin)
142 IF (
ALLOCATED(floquet_env%all_quasi_energies))
DEALLOCATE (floquet_env%all_quasi_energies)
143 IF (
ALLOCATED(floquet_env%all_a_k))
DEALLOCATE (floquet_env%all_a_k)
144 IF (
ALLOCATED(floquet_env%all_m0_energies))
DEALLOCATE (floquet_env%all_m0_energies)
145 IF (
ALLOCATED(floquet_env%all_m0_weights))
DEALLOCATE (floquet_env%all_m0_weights)
147 CALL timestop(handle)