123 type(electron_space_t) :: space
124 class(ions_t),
pointer :: ions => null()
125 type(photons_t),
pointer :: photons => null()
127 type(states_elec_t) :: st
129 type(output_t) :: outp
130 type(multicomm_t) :: mc
131 type(hamiltonian_elec_t) :: hm
133 type(current_t) :: current_calculator
134 type(dipole_t) :: dipole
137 type(kpoints_t) :: kpoints
139 logical :: generate_epot
141 type(states_elec_t) :: st_copy
144 class(lasers_t),
pointer :: lasers => null()
145 class(gauge_field_t),
pointer :: gfield => null()
149 type(partner_list_t) :: ext_partners
152 type(xc_interaction_t),
pointer :: xc_interaction => null()
154 logical :: ions_propagated = .false.
177 procedure electrons_constructor
184 class(electrons_t),
pointer :: sys
185 type(namespace_t),
intent(in) :: namespace
186 logical,
optional,
intent(in) :: generate_epot
189 type(lattice_vectors_t) :: latt_inp
190 logical :: has_photons
196 sys%namespace = namespace
201 call sys%space%write_info(sys%namespace)
202 if (sys%space%has_mixed_periodicity())
then
206 sys%ions =>
ions_t(sys%namespace, latt_inp=latt_inp)
208 call grid_init_stage_1(sys%gr, sys%namespace, sys%space, sys%ions%symm, latt_inp, sys%ions%natoms, sys%ions%pos)
210 if (sys%space%is_periodic())
then
211 call sys%ions%latt%write_info(sys%namespace)
215 do iatom = 1, sys%ions%natoms
216 if (.not. sys%gr%box%contains_point(sys%ions%pos(:, iatom)))
then
217 if (sys%space%periodic_dim /= sys%space%dim)
then
221 write(
message(1),
'(a,i5,a)')
"Atom ", iatom,
" is outside the box."
228 call kpoints_init(sys%kpoints, sys%namespace, sys%gr%symm, sys%space%dim, sys%space%periodic_dim, sys%ions%latt)
230 call states_elec_init(sys%st, sys%namespace, sys%space, sys%ions%val_charge(), sys%kpoints)
231 call sys%st%write_info(sys%namespace)
239 call sys%dipole%init(sys%space)
243 sys%quantities(
dipole)%updated_on_demand = .
true.
244 call current_init(sys%current_calculator, sys%namespace)
260 if (has_photons)
then
276 integer :: rankmin, depth
277 logical :: mxll_interaction_present = .false.
278 logical :: calc_dipole
280 push_sub(electrons_init_interactions)
282 select type (interaction)
284 call interaction%init(this%gr, 3)
285 mxll_interaction_present = .
true.
288 call interaction%init(this%gr, 3)
289 mxll_interaction_present = .
true.
291 call interaction%init(this%gr, 3)
292 mxll_interaction_present = .
true.
294 message(1) =
"Trying to initialize an unsupported interaction by the electrons."
298 if (mxll_interaction_present)
then
299 calc_dipole = any(this%hm%mxll%coupling_mode == &
302 if (calc_dipole)
then
303 assert(this%space%periodic_dim == 0)
304 this%hm%mxll%calc_field_dip = .
true.
305 this%hm%mxll%center_of_mass(1:3) = this%ions%center_of_mass()
306 this%hm%mxll%center_of_mass_ip =
mesh_nearest_point(this%gr, this%hm%mxll%center_of_mass, dmin, rankmin)
307 this%hm%mxll%center_of_mass_rankmin = rankmin
312 select type (interaction)
315 select type (algo => this%algo)
323 message(1) =
"The chosen propagator does not yet support interaction interpolation"
327 call interaction%init_interpolation(depth, interaction%label)
330 pop_sub(electrons_init_interactions)
338 integer(int64) :: index_range(4)
339 real(real64) :: mesh_global, mesh_local, wfns
341 real(real64) :: spiral_q(3), spiral_q_red(3)
350 index_range(1) = this%gr%np_global
351 index_range(2) = this%st%nst
352 index_range(3) = this%st%nik
353 index_range(4) = 100000
357 mpi_world%size, index_range, (/ 5000, 1, 1, 1 /))
359 call this%ions%partition(this%mc)
366 if (
parse_block(this%namespace,
'TDMomentumTransfer', blk) == 0)
then
367 do idir = 1, this%space%dim
370 else if(
parse_block(this%namespace,
'TDReducedMomentumTransfer', blk) == 0)
then
371 do idir = 1, this%space%dim
374 call kpoints_to_absolute(this%kpoints%latt, spiral_q_red(1:this%space%dim), spiral_q(1:this%space%dim))
382 if (this%st%symmetrize_density)
then
386 call output_init(this%outp, this%namespace, this%space, this%st, this%gr, this%st%nst, this%ks)
390 if (
associated(this%photons))
then
391 this%ks%has_photons = .
true.
394 call v_ks_init(this%ks, this%namespace, this%gr, this%st, this%ions, this%mc, this%space, this%kpoints)
401 if(this%ks%has_photons)
then
402 this%ks%pt => this%photons%modes
405 write(
message(1),
'(a,i5,a)')
'Happy to have ', this%photons%modes%nmodes,
' photon modes with us.'
407 call mf_init(this%ks%pt_mx, this%gr, this%st, this%ions, this%ks%pt)
409 if(
bitand(this%ks%xc_family, xc_family_oep) /= 0 .and. this%ks%xc%functional(
func_x,1)%id ==
xc_oep_x)
then
410 this%ks%oep_photon%level = this%ks%oep%level
411 call xc_oep_photon_init(this%ks%oep_photon, this%namespace, this%ks%xc_family, this%gr, this%st, this%mc, this%space)
420 this%lasers =>
lasers_t(this%namespace)
423 if(this%lasers%no_lasers > 0)
then
424 call this%ext_partners%add(this%lasers)
427 deallocate(this%lasers)
431 this%gfield =>
gauge_field_t(this%namespace, this%ions%latt%rcell_volume)
433 call this%ext_partners%add(this%gfield)
436 deallocate(this%gfield)
439 call hamiltonian_elec_init(this%hm, this%namespace, this%space, this%gr, this%ions, this%ext_partners, &
440 this%st, this%ks%theory_level, this%ks%xc, this%mc, this%kpoints, &
442 xc_photons = this%ks%xc_photons )
482 if (this%generate_epot)
then
483 message(1) =
"Info: Generating external potential"
486 this%ext_partners, this%st)
500 allocate(this%supported_interactions(0))
501 select case (this%hm%mxll%coupling_mode)
506 if (this%hm%mxll%add_zeeman)
then
510 if (this%hm%mxll%add_electric_dip .or. this%hm%mxll%add_electric_quad)
then
513 if (this%hm%mxll%add_magnetic_dip)
then
519 message(1) =
"Unknown maxwell-matter coupling"
535 select type (algo => this%algo)
538 call td_init(this%td, this%namespace, this%space, this%gr, this%ions, this%st, this%ks, &
539 this%hm, this%ext_partners, this%outp)
544 call td_init_gaugefield(this%td, this%namespace, this%gr, this%st, this%ks, this%hm, &
545 this%ext_partners, this%space)
558 select type (algo => this%algo)
562 this%ext_partners, this%st, this%ks, this%hm)
587 integer,
allocatable,
intent(out) :: updated_quantities(:)
589 logical :: update_energy_
594 call profiling_in(trim(this%namespace%get())//
":"//trim(operation%id))
596 update_energy_ = .
true.
601 select type (algo => this%algo)
603 time = algo%iteration%value()
604 select case (operation%id)
609 this%hm, this%ext_partners, time)
616 time+algo%dt, algo%dt, this%hm%vhxc, vtau=this%hm%vtau)
626 this%st, this%namespace, this%space, this%td%ions_dyn, this%ions, this%ext_partners, &
627 time+algo%dt, algo%dt)
631 if(
associated(gfield))
then
633 algo%dt, time+algo%dt)
639 this%hm, this%ext_partners, time+algo%dt)
644 this%gr, this%hm,
m_half*algo%dt)
649 if(
associated(gfield))
then
656 time+algo%dt, algo%dt, this%hm%vhxc, vtau=this%hm%vtau)
661 time+algo%dt, algo%dt, time + algo%dt/
m_two, &
662 this%hm%vhxc, vtau=this%hm%vtau)
669 this%namespace, this%space, this%td%ions_dyn, this%ions, this%ext_partners, &
674 this%hm, this%ext_partners, time +
m_half*algo%dt)
679 this%gr, this%hm, algo%dt)
685 call scf_init(this%scf, this%namespace, this%gr, this%ions, this%st, this%mc, this%hm, this%space)
687 this%ions_propagated = .
true.
692 algo%dt, this%namespace)
696 this%ext_partners, this%st, time = time+algo%dt)
698 call scf_run(this%scf, this%namespace, this%space, this%mc, this%gr, this%ions, &
699 this%ext_partners, this%st, this%ks, this%hm, verbosity =
verb_compact)
702 this%ext_partners, this%st, time = time+algo%dt)
705 call v_ks_calc(this%ks, this%namespace, this%space, this%hm, this%st, this%ions, this%ext_partners, &
706 calc_eigenval = .
true., time = time+algo%dt, calc_energy = .
true.)
709 call energy_calc_total(this%namespace, this%space, this%hm, this%gr, this%st, this%ext_partners, iunit = -1)
718 this%ext_partners, this%st, time = time+algo%dt)
719 call this%ions%update_kinetic_energy()
722 this%ions_propagated = .false.
726 this%ions_propagated = .
true.
742 call profiling_out(trim(this%namespace%get())//
":"//trim(operation%id))
749 real(real64),
intent(in) :: tol
761 integer,
intent(in) :: iq
764 call profiling_in(trim(this%namespace%get())//
":"//
"UPDATE_QUANTITY")
767 assert(this%quantities(iq)%updated_on_demand)
773 this%hm, this%space, this%st)
775 call this%dipole%calculate(this%gr, this%ions, this%st)
777 message(1) =
"Incompatible quantity."
781 call profiling_out(trim(this%namespace%get())//
":"//
"UPDATE_QUANTITY")
792 select type (interaction)
794 call interaction%init_from_partner(partner%gr, partner%space, partner%namespace)
796 message(1) =
"Unsupported interaction."
809 call profiling_in(trim(partner%namespace%get())//
":"//
"COPY_QUANTITY_INTER")
811 select type (interaction)
813 assert(
allocated(partner%st%current))
814 interaction%partner_field(:,:) = partner%st%current(1:partner%gr%np,:,1)
815 call interaction%do_mapping()
817 message(1) =
"Unsupported interaction."
821 call profiling_out(trim(partner%namespace%get())//
":"//
"COPY_QUANTITY_INTER")
841 call profiling_in(trim(this%namespace%get())//
":"//
"OUTPUT_WRITE")
843 select type (algo => this%algo)
845 iter = this%iteration%counter()
847 call td_write_iter(this%td%write_handler, this%namespace, this%space, this%outp, this%gr, &
848 this%st, this%hm, this%ions, this%ext_partners, this%hm%kick, this%ks, algo%dt, iter, this%mc, this%td%recalculate_gs)
850 if (this%outp%anything_now(iter))
then
851 call td_write_output(this%namespace, this%space, this%gr, this%st, this%hm, this%ks, &
852 this%outp, this%ions, this%ext_partners, iter, algo%dt)
856 call profiling_out(trim(this%namespace%get())//
":"//
"OUTPUT_WRITE")
887 logical :: update_energy_
893 call profiling_in(trim(this%namespace%get())//
":"//
"END_OF_TIMESTEP")
900 update_energy_ = .
true.
906 if (this%td%pesv%calc_spm .or. this%td%pesv%calc_mask .or. this%td%pesv%calc_flux)
then
907 call pes_calc(this%td%pesv, this%namespace, this%space, this%gr, this%st, &
908 prop%dt, nt, this%gr%der, this%hm%kpoints, this%ext_partners, stopping)
914 call profiling_out(trim(this%namespace%get())//
":"//
"END_OF_TIMESTEP")
923 if (.not. this%ions_propagated)
then
924 call ion_dynamics_propagate(this%td%ions_dyn, this%ions, abs(nt*prop%dt), this%td%ions_dyn%ionic_scale*prop%dt, &
931 if(
associated(gfield))
then
937 if (generate .or. this%ions%has_time_dependent_species())
then
939 this%ext_partners, this%st, time = abs(nt*prop%dt))
942 call v_ks_calc(this%ks, this%namespace, this%space, this%hm, this%st, this%ions, this%ext_partners, &
943 calc_eigenval = update_energy_, time = abs(nt*prop%dt), calc_energy = update_energy_)
945 if (update_energy_)
then
946 call energy_calc_total(this%namespace, this%space, this%hm, this%gr, this%st, this%ext_partners, iunit = -1)
951 call forces_calculate(this%gr, this%namespace, this%ions, this%hm, this%ext_partners, this%st, &
952 this%ks, t = abs(nt*prop%dt), dt = prop%dt)
954 call this%ions%update_kinetic_energy()
956 if (this%outp%what(option__output__forces) .or. this%td%write_handler%out(
out_separate_forces)%write)
then
957 call forces_calculate(this%gr, this%namespace, this%ions, this%hm, this%ext_partners, &
958 this%st, this%ks, t = abs(nt*prop%dt), dt = prop%dt)
962 if (this%outp%what(option__output__stress))
then
963 call stress_calculate(this%namespace, this%gr, this%hm, this%st, this%ions, this%ks, this%ext_partners)
966 if(
associated(gfield))
then
968 if(this%ks%xc%kernel_lrc_alpha>
m_epsilon)
then
969 call gauge_field_get_force(gfield, this%gr, this%st%d%spin_channels, this%st%current, this%ks%xc%kernel_lrc_alpha)
978 call lda_u_update_occ_matrices(this%hm%lda_u, this%namespace, this%gr, this%st, this%hm%hm_base, this%hm%phase, this%hm%energy)
981 this%td%iter = this%td%iter + 1
983 call profiling_out(trim(this%namespace%get())//
":"//
"END_OF_TIMESTEP")
994 call profiling_in(trim(this%namespace%get())//
":"//
"RESTART_WRITE")
996 select type (algo => this%algo)
999 call td_dump(this%td, this%namespace, this%space, this%gr, this%st, this%hm, &
1000 this%ks, this%ext_partners, this%iteration%counter(), ierr)
1002 message(1) =
"Unable to write time-dependent restart information."
1007 call pes_output(this%td%pesv, this%namespace, this%space, this%gr, this%st, this%iteration%counter(), &
1008 this%outp, algo%dt, this%ions)
1011 call profiling_out(trim(this%namespace%get())//
":"//
"RESTART_WRITE")
1020 logical :: from_scratch
1023 call profiling_in(trim(this%namespace%get())//
":"//
"RESTART_READ")
1025 select type (algo => this%algo)
1027 from_scratch = .false.
1029 this%ext_partners, this%st, this%ks, this%hm, from_scratch)
1031 if (from_scratch)
then
1040 call profiling_out(trim(this%namespace%get())//
":"//
"RESTART_READ")
1063 real(real64),
intent(in) :: time
1066 real(real64),
allocatable :: field_tmp(:, :)
1075 safe_allocate(field_tmp(1:this%gr%np, 1:this%gr%box%dim))
1076 this%hm%mxll%e_field =
m_zero
1077 this%hm%mxll%b_field =
m_zero
1078 this%hm%mxll%vec_pot =
m_zero
1081 call iter%start(this%interactions)
1082 do while (iter%has_next())
1083 select type (interaction => iter%get_next())
1085 call interaction%interpolate(time, field_tmp)
1086 call lalg_axpy(this%gr%np, 3,
m_one, field_tmp, this%hm%mxll%e_field)
1088 call interaction%interpolate(time, field_tmp)
1089 call lalg_axpy(this%gr%np, 3,
m_one, field_tmp, this%hm%mxll%vec_pot)
1091 call interaction%interpolate(time, field_tmp)
1092 call lalg_axpy(this%gr%np, 3,
m_one, field_tmp, this%hm%mxll%b_field)
1096 safe_deallocate_a(field_tmp)
1110 if (
associated(sys%algo))
then
1111 select type (algo => sys%algo)
1122 call iter%start(sys%ext_partners)
1123 do while (iter%has_next())
1124 partner => iter%get_next()
1125 safe_deallocate_p(partner)
1127 call sys%ext_partners%empty()
1129 safe_deallocate_p(sys%xc_interaction)
1139 if (sys%ks%has_photons)
then
1140 call mf_end(sys%ks%pt_mx)
1143 call sys%dipole%end()
1149 deallocate(sys%ions)
1150 safe_deallocate_p(sys%photons)
constant times a vector plus a vector
integer, parameter, public mask_absorbing
This module defines the abstract interfact for algorithm factories.
This module implements the basic elements defining algorithms.
character(len=algo_label_len), parameter, public iteration_done
This module handles the calculation mode.
type(calc_mode_par_t), public calc_mode_par
Singleton instance of parallel calculation mode.
integer, parameter, public p_strategy_serial
single domain, all states, k-points on a single processor
integer, parameter, public p_strategy_states
parallelization in states
subroutine, public current_calculate(this, namespace, gr, hm, space, st)
Compute total electronic current density.
subroutine, public current_init(this, namespace)
This module implements a calculator for the density and defines related functions.
This modules implements the dipole moment of the matter system.
logical function electrons_restart_read_data(this)
subroutine electrons_init_parallelization(this, grp)
subroutine electrons_init_algorithm(this, factory)
logical function electrons_process_is_slave(this)
subroutine electrons_init_interaction(this, interaction)
subroutine electrons_finalize(sys)
subroutine electrons_exec_end_of_timestep_tasks(this, prop)
logical function electrons_do_algorithmic_operation(this, operation, updated_quantities)
subroutine electrons_update_quantity(this, iq)
subroutine electrons_propagation_start(this)
subroutine electrons_output_write(this)
subroutine get_fields_from_interaction(this, time)
subroutine electrons_output_finish(this)
subroutine electrons_output_start(this)
subroutine electrons_init_interaction_as_partner(partner, interaction)
class(electrons_t) function, pointer electrons_constructor(namespace, generate_epot)
subroutine electrons_update_kinetic_energy(this)
logical function electrons_is_tolerance_reached(this, tol)
subroutine electrons_copy_quantities_to_interaction(partner, interaction)
subroutine electrons_restart_write_data(this)
subroutine electrons_initial_conditions(this)
subroutine, public elf_init(namespace)
subroutine, public energy_calc_total(namespace, space, hm, gr, st, ext_partners, iunit, full)
This subroutine calculates the total energy of the system. Basically, it adds up the KS eigenvalues,...
real(real64) function, public zenergy_calc_electronic(namespace, hm, der, st, terms)
real(real64) function, public denergy_calc_electronic(namespace, hm, der, st, terms)
type(gauge_field_t) function, pointer, public list_get_gauge_field(partners)
This module implements the field transfer.
subroutine, public forces_calculate(gr, namespace, ions, hm, ext_partners, st, ks, vhxc_old, t, dt)
subroutine, public gauge_field_do_algorithmic_operation(this, operation, dt, time)
subroutine, public gauge_field_check_symmetries(this, kpoints)
subroutine, public gauge_field_get_force(this, gr, spin_channels, current, lrc_alpha)
logical pure function, public gauge_field_is_propagated(this)
logical pure function, public gauge_field_is_used(this)
real(real64), parameter, public m_two
real(real64), parameter, public m_zero
real(real64), parameter, public m_epsilon
real(real64), parameter, public m_half
real(real64), parameter, public m_one
This module implements the underlying real-space grid.
subroutine, public grid_init_stage_1(gr, namespace, space, symm, latt, n_sites, site_position)
First stage of the grid initialization.
subroutine, public grid_init_stage_2(gr, namespace, space, mc, qvector)
Second stage of the grid initialization.
subroutine, public grid_end(gr)
finalize a grid object
integer, parameter, public term_kinetic
integer, parameter, public generalized_kohn_sham_dft
subroutine, public zvmask(mesh, hm, st)
subroutine, public hamiltonian_elec_end(hm)
integer, parameter, public independent_particles
subroutine, public hamiltonian_elec_epot_generate(this, namespace, space, gr, ions, ext_partners, st, time)
subroutine, public hamiltonian_elec_init(hm, namespace, space, gr, ions, ext_partners, st, theory_level, xc, mc, kpoints, need_exchange, xc_photons)
integer, parameter, public kohn_sham_dft
integer, parameter, public mxll_vec_pot_to_matter
integer, parameter, public mxll_b_field_to_matter
integer, parameter, public mxll_e_field_to_matter
integer, parameter, public current_to_mxll_field
This module defines the abstract interaction_t class, and some auxiliary classes for interactions.
This module defines classes and functions for interaction partners.
subroutine, public ion_dynamics_propagate(this, ions, time, dt, namespace)
logical pure function, public ion_dynamics_ions_move(this)
subroutine, public ion_dynamics_propagate_vel(this, ions, atoms_moved)
subroutine, public kpoints_end(this)
subroutine, public kpoints_init(this, namespace, symm, dim, periodic_dim, latt)
subroutine, public kpoints_to_absolute(latt, kin, kout)
subroutine, public lasers_check_symmetries(this, kpoints)
subroutine, public lasers_parse_external_fields(this)
subroutine, public lasers_generate_potentials(this, mesh, space, latt)
subroutine, public lda_u_update_occ_matrices(this, namespace, mesh, st, hm_base, phase, energy)
This module defines the meshes, which are used in Octopus.
subroutine, public mesh_check_symmetries(mesh, symm, periodic_dim)
integer function, public mesh_nearest_point(mesh, pos, dmin, rankmin)
Returns the index of the point which is nearest to a given vector position pos.
real(real64) pure function, public mesh_global_memory(mesh)
real(real64) pure function, public mesh_local_memory(mesh)
subroutine, public messages_print_with_emphasis(msg, iunit, namespace)
character(len=512), private msg
subroutine, public messages_warning(no_lines, all_nodes, namespace)
subroutine, public messages_obsolete_variable(namespace, name, rep)
subroutine, public messages_info(no_lines, iunit, verbose_limit, stress, all_nodes, namespace)
subroutine, public messages_new_line()
character(len=256), dimension(max_lines), public message
to be output by fatal, warning
subroutine, public messages_fatal(no_lines, only_root_writes, namespace)
subroutine, public messages_experimental(name, namespace)
general module for modelmb particles
subroutine, public modelmb_copy_masses(this, masses)
==============================================================
subroutine mpi_grp_copy(mpi_grp_out, mpi_grp_in)
type(mpi_grp_t), public mpi_world
This module handles the communicators for the various parallelization strategies.
subroutine, public multicomm_end(mc)
logical pure function, public multicomm_is_slave(this)
subroutine, public multicomm_init(mc, namespace, base_grp, mode_para, n_node, index_range, min_range)
create index and domain communicators
integer, parameter, public mxll_field_trans
integer, parameter, public length_gauge_dipole
integer, parameter, public no_maxwell_coupling
integer, parameter, public velocity_gauge_dipole
integer, parameter, public multipolar_expansion
integer, parameter, public full_minimal_coupling
this module contains the output system
this module contains the output system
logical function, public output_need_exchange(outp)
subroutine, public output_init(outp, namespace, space, st, gr, nst, ks)
logical function, public parse_is_defined(namespace, name)
integer function, public parse_block(namespace, name, blk, check_varinfo_)
subroutine, public pes_calc(pes, namespace, space, mesh, st, dt, iter, der, kpoints, ext_partners, stopping)
subroutine, public pes_output(pes, namespace, space, gr, st, iter, outp, dt, ions)
subroutine, public mf_init(this, gr, st, ions, pt_mode)
subroutine, public mf_end(this)
subroutine, public photon_mode_set_n_electrons(this, qtot)
subroutine, public poisson_async_init(this, mc)
subroutine, public poisson_slave_work(this, namespace)
subroutine, public poisson_async_end(this, mc)
subroutine, public potential_interpolation_interpolate(potential_interpolation, order, time, dt, t, vhxc, vtau)
subroutine, public potential_interpolation_new(potential_interpolation, np, nspin, time, dt, vhxc, vtau)
subroutine, public profiling_out(label)
Increment out counter and sum up difference between entry and exit time.
subroutine, public profiling_in(label, exclude)
Increment in counter and save entry time.
subroutine, public propagation_ops_elec_restore_ions(wo, ions_dyn, ions)
subroutine, public propagation_ops_elec_move_ions(wo, gr, hm, st, namespace, space, ions_dyn, ions, ext_partners, time, dt, save_pos)
subroutine, public propagation_ops_elec_propagate_gauge_field(wo, gfield, dt, time, save_gf)
subroutine, public propagation_ops_elec_update_hamiltonian(namespace, space, st, mesh, hm, ext_partners, time)
subroutine, public propagation_ops_elec_exp_apply(te, namespace, st, mesh, hm, dt)
subroutine, public propagation_ops_elec_interpolate_get(mesh, hm, interp)
subroutine, public propagation_ops_elec_fuse_density_exp_apply(te, namespace, st, gr, hm, dt, dt2, vmagnus)
character(len=algo_label_len), parameter, public aetrs_start
character(len=algo_label_len), parameter, public aetrs_finish
character(len=algo_label_len), parameter, public aetrs_extrapolate
character(len=algo_label_len), parameter, public aetrs_first_half
character(len=algo_label_len), parameter, public aetrs_second_half
character(len=algo_label_len), parameter, public bomd_start
character(len=algo_label_len), parameter, public bomd_elec_scf
character(len=algo_label_len), parameter, public bomd_finish
character(len=algo_label_len), parameter, public expmid_extrapolate
character(len=algo_label_len), parameter, public expmid_finish
character(len=algo_label_len), parameter, public expmid_start
character(len=algo_label_len), parameter, public expmid_propagate
This module implements the basic propagator framework.
character(len=30), parameter, public verlet_compute_acc
type(algorithmic_operation_t), parameter, public op_verlet_compute_acc
character(len=30), parameter, public verlet_update_pos
type(algorithmic_operation_t), parameter, public op_verlet_compute_vel
character(len=30), parameter, public verlet_compute_vel
This module defines the quantity_t class and the IDs for quantities, which can be exposed by a system...
integer, parameter, public current
integer, parameter, public dipole
Implementation details for regridding.
subroutine, public scf_run(scf, namespace, space, mc, gr, ions, ext_partners, st, ks, hm, outp, verbosity, iters_done, restart_load, restart_dump)
integer, parameter, public verb_compact
subroutine, public scf_init(scf, namespace, gr, ions, st, mc, hm, space)
subroutine, public scf_end(scf)
This module is intended to contain "only mathematical" functions and procedures.
pure logical function, public states_are_real(st)
This module handles spin dimensions of the states and the k-point distribution.
real(real64) function, public states_elec_wfns_memory(st, mesh)
return the memory usage of a states_elec_t object
subroutine, public states_elec_distribute_nodes(st, namespace, mc)
@Brief. Distribute states over the processes for states parallelization
subroutine, public states_elec_densities_init(st, gr)
subroutine, public states_elec_end(st)
finalize the states_elec_t object
subroutine, public states_elec_init(st, namespace, space, valence_charge, kpoints)
Initialize a new states_elec_t object.
subroutine, public kpoints_distribute(this, mc)
distribute k-points over the nodes in the corresponding communicator
subroutine, public states_elec_exec_init(st, namespace, mc)
Further initializations.
subroutine, public states_elec_allocate_current(st, space, mesh)
This module implements the calculation of the stress tensor.
subroutine, public stress_calculate(namespace, gr, hm, st, ions, ks, ext_partners)
This computes the total stress on the lattice.
This module implements the abstract system type.
subroutine, public system_end(this)
subroutine, public system_propagation_start(this)
subroutine, public system_init_algorithm(this, factory)
subroutine, public td_end(td)
subroutine, public td_load_restart_from_gs(td, namespace, space, mc, gr, ext_partners, st, ks, hm)
subroutine, public td_end_run(td, st, hm)
subroutine, public td_init(td, namespace, space, gr, ions, st, ks, hm, ext_partners, outp)
subroutine, public td_allocate_wavefunctions(td, namespace, mc, gr, ions, st, hm, space)
logical function, public td_get_from_scratch(td)
subroutine, public td_set_from_scratch(td, from_scratch)
subroutine, public td_dump(td, namespace, space, gr, st, hm, ks, ext_partners, iter, ierr)
subroutine, public td_init_gaugefield(td, namespace, gr, st, ks, hm, ext_partners, space)
subroutine, public td_init_with_wavefunctions(td, namespace, space, mc, gr, ions, ext_partners, st, ks, hm, outp, from_scratch)
subroutine, public td_load_restart_from_td(td, namespace, space, mc, gr, ext_partners, st, ks, hm, from_scratch)
subroutine, public td_write_output(namespace, space, gr, st, hm, ks, outp, ions, ext_partners, iter, dt)
subroutine, public td_write_data(writ)
subroutine, public td_write_iter(writ, namespace, space, outp, gr, st, hm, ions, ext_partners, kick, ks, dt, iter, mc, recalculate_gs)
integer, parameter, public out_separate_forces
This module defines the unit system, used for input and output.
type(unit_t), public unit_megabytes
For large amounts of data (natural code units are bytes)
subroutine, public v_ks_end(ks)
subroutine, public v_ks_calc(ks, namespace, space, hm, st, ions, ext_partners, calc_eigenval, time, calc_energy, calc_current, force_semilocal)
subroutine, public v_ks_init(ks, namespace, gr, st, ions, mc, space, kpoints)
integer, parameter, public xc_oep_x
Exact exchange.
integer, parameter, public func_x
integer, parameter, public oep_level_none
the OEP levels
subroutine, public xc_oep_photon_init(oep, namespace, family, gr, st, mc, space)
subroutine, public xc_oep_photon_end(oep)
Abstract class for the algorithm factories.
Descriptor of one algorithmic operation.
Class to transfer a current to a Maxwell field.
Extension of space that contains the knowledge of the spin dimension.
Class describing the electron system.
class defining the field_transfer interaction
These class extend the list and list iterator to make an interaction list.
abstract interaction class
abstract class for general interaction partners
iterator for the list of partners
surrogate interaction class to avoid circular dependencies between modules.
This is defined even when running serial.
class to transfer a Maxwell B field to a matter system
class to transfer a Maxwell field to a medium
class to transfer a Maxwell vector potential to a medium
Implements a propagator for Approximate ETRS.
Implements a propagator for Born-Oppenheimer molecular dynamics.
Implements the explicit exponential midpoint propagator (without predictor-corrector)
Abstract class implementing propagators.
Abstract class for systems.