111 use xc_functional_oct_m
127 type(electron_space_t) :: space
128 class(ions_t),
pointer :: ions => null()
129 type(photons_t),
pointer :: photons => null()
131 type(states_elec_t) :: st
133 type(output_t) :: outp
134 type(multicomm_t) :: mc
135 type(hamiltonian_elec_t) :: hm
137 type(current_t) :: current_calculator
138 type(dipole_t) :: dipole
142 type(kpoints_t) :: kpoints
144 logical :: generate_epot
146 type(states_elec_t) :: st_copy
149 class(lasers_t),
pointer :: lasers => null()
150 class(gauge_field_t),
pointer :: gfield => null()
154 type(partner_list_t) :: ext_partners
157 type(xc_interaction_t),
pointer :: xc_interaction => null()
159 logical :: ions_propagated = .false.
182 procedure electrons_constructor
189 class(electrons_t),
pointer :: sys
190 type(namespace_t),
intent(in) :: namespace
191 logical,
optional,
intent(in) :: generate_epot
194 type(lattice_vectors_t) :: latt_inp
195 logical :: has_photons
201 sys%namespace = namespace
206 call sys%space%write_info(sys%namespace)
207 if (sys%space%has_mixed_periodicity())
then
211 sys%ions =>
ions_t(sys%namespace, latt_inp=latt_inp)
213 call grid_init_stage_1(sys%gr, sys%namespace, sys%space, sys%ions%symm, latt_inp, sys%ions%natoms, sys%ions%pos)
215 if (sys%space%is_periodic())
then
216 call sys%ions%latt%write_info(sys%namespace)
220 do iatom = 1, sys%ions%natoms
221 if (.not. sys%gr%box%contains_point(sys%ions%pos(:, iatom)))
then
222 if (sys%space%periodic_dim /= sys%space%dim)
then
226 write(
message(1),
'(a,i5,a)')
"Atom ", iatom,
" is outside the box."
233 call kpoints_init(sys%kpoints, sys%namespace, sys%gr%symm, sys%space%dim, sys%space%periodic_dim, sys%ions%latt)
235 call states_elec_init(sys%st, sys%namespace, sys%space, sys%ions%val_charge(), sys%kpoints)
236 call sys%st%write_info(sys%namespace)
240 call sys%st%modelmbparticles%copy_masses(sys%gr%der%masses)
246 call sys%dipole%init(sys%space)
250 call sys%quantities%add(
quantity_t(
"wavefunctions", updated_on_demand = .false.))
251 call sys%quantities%add(
quantity_t(
"current", updated_on_demand = .
true., parents=[
"wavefunctions"]))
252 call sys%quantities%add(
quantity_t(
"dipole", updated_on_demand = .
true., parents=[
"wavefunctions"]))
253 call current_init(sys%current_calculator, sys%namespace)
269 if (has_photons)
then
285 integer :: rankmin, depth
286 logical :: mxll_interaction_present = .false.
287 logical :: calc_dipole
289 push_sub(electrons_init_interactions)
291 select type (interaction)
293 call interaction%init(this%gr, 3)
294 mxll_interaction_present = .
true.
297 call interaction%init(this%gr, 3)
298 mxll_interaction_present = .
true.
300 call interaction%init(this%gr, 3)
301 mxll_interaction_present = .
true.
303 message(1) =
"Trying to initialize an unsupported interaction by the electrons."
307 if (mxll_interaction_present)
then
308 calc_dipole = any(this%hm%mxll%coupling_mode == &
311 if (calc_dipole)
then
312 assert(this%space%periodic_dim == 0)
313 this%hm%mxll%calc_field_dip = .
true.
314 this%hm%mxll%center_of_mass(1:3) = this%ions%center_of_mass()
315 this%hm%mxll%center_of_mass_ip =
mesh_nearest_point(this%gr, this%hm%mxll%center_of_mass, dmin, rankmin)
316 this%hm%mxll%center_of_mass_rankmin = rankmin
321 select type (interaction)
324 select type (algo => this%algo)
332 message(1) =
"The chosen propagator does not yet support interaction interpolation"
336 call interaction%init_interpolation(depth, interaction%label)
339 pop_sub(electrons_init_interactions)
347 integer(int64) :: index_range(4)
348 real(real64) :: mesh_global, mesh_local, wfns
350 real(real64) :: spiral_q(3), spiral_q_red(3)
359 index_range(1) = this%gr%np_global
360 index_range(2) = this%st%nst
361 index_range(3) = this%st%nik
362 index_range(4) = 100000
366 mpi_world%size, index_range, (/ 5000, 1, 1, 1 /))
368 call this%ions%partition(this%mc)
375 if (
parse_block(this%namespace,
'TDMomentumTransfer', blk) == 0)
then
376 do idir = 1, this%space%dim
379 else if(
parse_block(this%namespace,
'TDReducedMomentumTransfer', blk) == 0)
then
380 do idir = 1, this%space%dim
383 call kpoints_to_absolute(this%kpoints%latt, spiral_q_red(1:this%space%dim), spiral_q(1:this%space%dim))
391 if (this%st%symmetrize_density)
then
395 call output_init(this%outp, this%namespace, this%space, this%st, this%gr, this%st%nst, this%ks)
399 if (
associated(this%photons))
then
400 this%ks%has_photons = .
true.
403 call v_ks_init(this%ks, this%namespace, this%gr, this%st, this%ions, this%mc, this%space, this%kpoints)
410 if(this%ks%has_photons)
then
411 this%ks%pt => this%photons%modes
414 write(
message(1),
'(a,i5,a)')
'Happy to have ', this%photons%modes%nmodes,
' photon modes with us.'
416 call mf_init(this%ks%pt_mx, this%gr, this%st, this%ions, this%ks%pt)
418 if(
bitand(this%ks%xc_family, xc_family_oep) /= 0 .and. this%ks%xc%functional(
func_x,1)%id == xc_oep_x)
then
419 this%ks%oep_photon%level = this%ks%oep%level
420 call xc_oep_photon_init(this%ks%oep_photon, this%namespace, this%ks%xc_family, this%gr, this%st, this%mc, this%space)
429 this%lasers =>
lasers_t(this%namespace)
432 if(this%lasers%no_lasers > 0)
then
433 call this%ext_partners%add(this%lasers)
436 deallocate(this%lasers)
440 this%gfield =>
gauge_field_t(this%namespace, this%ions%latt%rcell_volume)
442 call this%ext_partners%add(this%gfield)
445 deallocate(this%gfield)
448 call hamiltonian_elec_init(this%hm, this%namespace, this%space, this%gr, this%ions, this%ext_partners, &
449 this%st, this%ks%theory_level, this%ks%xc, this%mc, this%kpoints, &
451 xc_photons = this%ks%xc_photons )
491 if (this%generate_epot)
then
492 message(1) =
"Info: Generating external potential"
495 this%ext_partners, this%st)
509 allocate(this%supported_interactions(0))
510 select case (this%hm%mxll%coupling_mode)
515 if (this%hm%mxll%add_zeeman)
then
519 if (this%hm%mxll%add_electric_dip .or. this%hm%mxll%add_electric_quad)
then
522 if (this%hm%mxll%add_magnetic_dip)
then
528 message(1) =
"Unknown maxwell-matter coupling"
544 select type (algo => this%algo)
547 call td_init(this%td, this%namespace, this%space, this%gr, this%ions, this%st, this%ks, &
548 this%hm, this%ext_partners, this%outp)
553 call td_init_gaugefield(this%td, this%namespace, this%gr, this%st, this%ks, this%hm, &
554 this%ext_partners, this%space)
559 this%ions, this%mc, this%space)
574 select type (algo => this%algo)
578 this%ext_partners, this%st, this%ks, this%hm)
582 call gs_initialize(this%namespace, this%scf, this%rdm, this%gr, this%mc, this%st, &
583 this%hm, this%ions, this%ks, this%space, this%ext_partners, fromscratch=.
true.)
599 select type (algo => this%algo)
615 character(len=:),
allocatable,
intent(out) :: updated_quantities(:)
617 logical :: update_energy_
623 call profiling_in(trim(this%namespace%get())//
":"//trim(operation%id))
625 update_energy_ = .
true.
630 select type (algo => this%algo)
632 time = algo%iteration%value()
633 select case (operation%id)
638 this%hm, this%ext_partners, time)
644 call this%hm%ks_pot%interpolation_new(this%td%tr%vks_old, time+algo%dt, algo%dt)
654 this%st, this%namespace, this%space, this%td%ions_dyn, this%ions, this%ext_partners, &
655 time+algo%dt, algo%dt)
659 if(
associated(gfield))
then
661 algo%dt, time+algo%dt)
667 this%hm, this%ext_partners, time+algo%dt)
672 this%gr, this%hm,
m_half*algo%dt)
674 updated_quantities = [
"wavefunctions"]
679 if(
associated(gfield))
then
685 call this%hm%ks_pot%interpolation_new(this%td%tr%vks_old, time+algo%dt, algo%dt)
688 call this%hm%ks_pot%interpolate_potentials(this%td%tr%vks_old, 3, time+algo%dt, algo%dt, time + algo%dt/
m_two)
694 this%namespace, this%space, this%td%ions_dyn, this%ions, this%ext_partners, &
699 this%hm, this%ext_partners, time +
m_half*algo%dt)
704 this%gr, this%hm, algo%dt)
709 updated_quantities = [
"wavefunctions"]
712 call scf_init(this%scf, this%namespace, this%gr, this%ions, this%st, this%mc, this%hm, this%space)
714 this%ions_propagated = .
true.
719 algo%dt, this%namespace)
723 this%ext_partners, this%st, time = time+algo%dt)
725 call scf_run(this%scf, this%namespace, this%space, this%mc, this%gr, this%ions, &
726 this%ext_partners, this%st, this%ks, this%hm, verbosity =
verb_compact)
729 this%ext_partners, this%st, time = time+algo%dt)
732 call v_ks_calc(this%ks, this%namespace, this%space, this%hm, this%st, this%ions, this%ext_partners, &
733 calc_eigenval = .
true., time = time+algo%dt, calc_energy = .
true.)
736 call energy_calc_total(this%namespace, this%space, this%hm, this%gr, this%st, this%ext_partners, iunit = -1)
738 updated_quantities = [
"wavefunctions"]
747 this%ext_partners, this%st, time = time+algo%dt)
748 call this%ions%update_kinetic_energy()
751 this%ions_propagated = .false.
755 this%ions_propagated = .
true.
772 iter = nint(this%iteration%value()) + 1
774 select case(operation%id)
776 call scf_start(this%scf, this%namespace, this%space, this%gr, this%ions, this%st, this%ks, &
781 call scf_iter(this%scf, this%namespace, this%space, this%mc, this%gr, this%ions, &
782 this%ext_partners, this%st, this%ks, this%hm, iter, outp = this%outp, &
783 restart_dump=this%scf%restart_dump)
785 algo%converged =
scf_iter_finish(this%scf, this%namespace, this%space, this%gr, this%ions,&
786 this%st, this%ks, this%hm, iter, outp = this%outp)
788 updated_quantities = [
"wavefunctions"]
793 call scf_finish(this%scf, this%namespace, this%space, this%mc, this%gr, this%ions, &
794 this%ext_partners, this%st, this%ks, this%hm, iter-1, &
795 outp = this%outp, restart_dump=this%scf%restart_dump)
804 call profiling_out(trim(this%namespace%get())//
":"//trim(operation%id))
811 real(real64),
intent(in) :: tol
823 character(len=*),
intent(in) :: label
828 call profiling_in(trim(this%namespace%get())//
":"//
"UPDATE_QUANTITY")
830 quantity => this%quantities%get(label)
831 if(
associated(quantity))
then
832 assert(quantity%updated_on_demand)
839 this%hm, this%space, this%st)
841 call this%dipole%calculate(this%gr, this%ions, this%st)
843 message(1) =
"Incompatible quantity: "//trim(label)//
"."
847 call profiling_out(trim(this%namespace%get())//
":"//
"UPDATE_QUANTITY")
858 select type (interaction)
860 call interaction%init_from_partner(partner%gr, partner%space, partner%namespace)
862 message(1) =
"Unsupported interaction."
875 call profiling_in(trim(partner%namespace%get())//
":"//
"COPY_QUANTITY_INTER")
877 select type (interaction)
879 assert(
allocated(partner%st%current))
880 interaction%partner_field(:,:) = partner%st%current(1:partner%gr%np,:,1)
881 call interaction%do_mapping()
883 message(1) =
"Unsupported interaction."
887 call profiling_out(trim(partner%namespace%get())//
":"//
"COPY_QUANTITY_INTER")
907 call profiling_in(trim(this%namespace%get())//
":"//
"OUTPUT_WRITE")
909 select type (algo => this%algo)
911 iter = this%iteration%counter()
913 call td_write_iter(this%td%write_handler, this%namespace, this%space, this%outp, this%gr, &
914 this%st, this%hm, this%ions, this%ext_partners, this%hm%kick, this%ks, algo%dt, iter, this%mc, this%td%recalculate_gs)
916 if (this%outp%anything_now(iter))
then
917 call td_write_output(this%namespace, this%space, this%gr, this%st, this%hm, this%ks, &
918 this%outp, this%ions, this%ext_partners, iter, algo%dt)
922 call profiling_out(trim(this%namespace%get())//
":"//
"OUTPUT_WRITE")
953 logical :: update_energy_
959 call profiling_in(trim(this%namespace%get())//
":"//
"END_OF_TIMESTEP")
966 update_energy_ = .
true.
972 if (this%td%pesv%calc_spm .or. this%td%pesv%calc_mask .or. this%td%pesv%calc_flux)
then
973 call pes_calc(this%td%pesv, this%namespace, this%space, this%gr, this%st, &
974 prop%dt, nt, this%gr%der, this%hm%kpoints, this%ext_partners, stopping)
980 call profiling_out(trim(this%namespace%get())//
":"//
"END_OF_TIMESTEP")
989 if (.not. this%ions_propagated)
then
990 call ion_dynamics_propagate(this%td%ions_dyn, this%ions, abs(nt*prop%dt), this%td%ions_dyn%ionic_scale*prop%dt, &
997 if(
associated(gfield))
then
1003 if (generate .or. this%ions%has_time_dependent_species())
then
1005 this%ext_partners, this%st, time = abs(nt*prop%dt))
1008 call v_ks_calc(this%ks, this%namespace, this%space, this%hm, this%st, this%ions, this%ext_partners, &
1009 calc_eigenval = update_energy_, time = abs(nt*prop%dt), calc_energy = update_energy_)
1011 if (update_energy_)
then
1012 call energy_calc_total(this%namespace, this%space, this%hm, this%gr, this%st, this%ext_partners, iunit = -1)
1017 call forces_calculate(this%gr, this%namespace, this%ions, this%hm, this%ext_partners, this%st, &
1018 this%ks, t = abs(nt*prop%dt), dt = prop%dt)
1020 call this%ions%update_kinetic_energy()
1022 if (this%outp%what(option__output__forces) .or. this%td%write_handler%out(
out_separate_forces)%write)
then
1023 call forces_calculate(this%gr, this%namespace, this%ions, this%hm, this%ext_partners, &
1024 this%st, this%ks, t = abs(nt*prop%dt), dt = prop%dt)
1028 if (this%outp%what(option__output__stress))
then
1029 call stress_calculate(this%namespace, this%gr, this%hm, this%st, this%ions, this%ks, this%ext_partners)
1032 if(
associated(gfield))
then
1034 if(this%ks%xc%kernel_lrc_alpha>
m_epsilon)
then
1035 call gauge_field_get_force(gfield, this%gr, this%st%d%spin_channels, this%st%current, this%ks%xc%kernel_lrc_alpha)
1044 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)
1047 this%td%iter = this%td%iter + 1
1049 call profiling_out(trim(this%namespace%get())//
":"//
"END_OF_TIMESTEP")
1060 call profiling_in(trim(this%namespace%get())//
":"//
"RESTART_WRITE")
1062 select type (algo => this%algo)
1065 call td_dump(this%td, this%namespace, this%space, this%gr, this%st, this%hm, &
1066 this%ks, this%ext_partners, this%iteration%counter(), ierr)
1068 message(1) =
"Unable to write time-dependent restart information."
1073 call pes_output(this%td%pesv, this%namespace, this%space, this%gr, this%st, this%iteration%counter(), &
1074 this%outp, algo%dt, this%ions)
1077 call profiling_out(trim(this%namespace%get())//
":"//
"RESTART_WRITE")
1086 logical :: from_scratch
1089 call profiling_in(trim(this%namespace%get())//
":"//
"RESTART_READ")
1091 select type (algo => this%algo)
1093 from_scratch = .false.
1095 this%ext_partners, this%st, this%ks, this%hm, from_scratch)
1099 from_scratch = .false.
1101 this%ks, this%space, this%ions, this%ext_partners,from_scratch)
1107 if (from_scratch)
then
1115 call profiling_out(trim(this%namespace%get())//
":"//
"RESTART_READ")
1138 real(real64),
intent(in) :: time
1141 real(real64),
allocatable :: field_tmp(:, :)
1150 safe_allocate(field_tmp(1:this%gr%np, 1:this%gr%box%dim))
1151 this%hm%mxll%e_field =
m_zero
1152 this%hm%mxll%b_field =
m_zero
1153 this%hm%mxll%vec_pot =
m_zero
1156 call iter%start(this%interactions)
1157 do while (iter%has_next())
1158 select type (interaction => iter%get_next())
1160 call interaction%interpolate(time, field_tmp)
1161 call lalg_axpy(this%gr%np, 3,
m_one, field_tmp, this%hm%mxll%e_field)
1163 call interaction%interpolate(time, field_tmp)
1164 call lalg_axpy(this%gr%np, 3,
m_one, field_tmp, this%hm%mxll%vec_pot)
1166 call interaction%interpolate(time, field_tmp)
1167 call lalg_axpy(this%gr%np, 3,
m_one, field_tmp, this%hm%mxll%b_field)
1171 safe_deallocate_a(field_tmp)
1185 if (
associated(sys%algo))
then
1186 select type (algo => sys%algo)
1191 call gs_cleanup(sys%ks, sys%scf, sys%rdm, sys%st, sys%hm)
1199 call iter%start(sys%ext_partners)
1200 do while (iter%has_next())
1201 partner => iter%get_next()
1202 safe_deallocate_p(partner)
1204 call sys%ext_partners%empty()
1206 safe_deallocate_p(sys%xc_interaction)
1216 if (sys%ks%has_photons)
then
1217 call mf_end(sys%ks%pt_mx)
1220 call sys%dipole%end()
1226 deallocate(sys%ions)
1227 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.
subroutine, public gs_cleanup(ks, scf, rdm, st, hm)
subroutine, public gs_initialize(namespace, scf, rdm, gr, mc, st, hm, ions, ks, space, ext_partners, fromScratch)
subroutine, public gs_allocate_wavefunctions(namespace, gr, st, hm, scf, ks, ions, mc, space)
subroutine, public gs_load_from_restart(namespace, scf, gr, mc, st, hm, ks, space, ions, ext_partners, fromScratch)
subroutine electrons_initialize(this)
logical function electrons_restart_read_data(this)
subroutine electrons_init_parallelization(this, grp)
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_new_algorithm(this, factory)
subroutine electrons_output_write(this)
subroutine get_fields_from_interaction(this, time)
subroutine electrons_algorithm_start(this)
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_update_quantity(this, label)
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
subroutine, public zvmask(mesh, hm, st)
subroutine, public hamiltonian_elec_end(hm)
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 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)
A module to handle KS potential, without the external potential.
integer, parameter, public independent_particles
integer, parameter, public generalized_kohn_sham_dft
integer, parameter, public kohn_sham_dft
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_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)
subroutine, public messages_info(no_lines, iunit, debug_only, stress, all_nodes, namespace)
This module implements the basic minimizer framework.
character(len=algo_label_len), parameter, public gs_scf_start
character(len=algo_label_len), parameter, public gs_scf_finish
character(len=algo_label_len), parameter, public gs_scf_iteration
general module for modelmb particles
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 low-level part of 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 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(hm, mesh, vks_old)
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...
Implementation details for regridding.
logical function, public scf_iter_finish(scf, namespace, space, gr, ions, st, ks, hm, iter, outp, verbosity, iters_done)
subroutine, public scf_finish(scf, namespace, space, mc, gr, ions, ext_partners, st, ks, hm, iter, outp, verbosity, iters_done, restart_dump)
integer, parameter, public verb_compact
subroutine, public scf_init(scf, namespace, gr, ions, st, mc, hm, space)
subroutine, public scf_end(scf)
subroutine, public scf_run(scf, namespace, space, mc, gr, ions, ext_partners, st, ks, hm, outp, verbosity, iters_done, restart_dump)
Legacy version of the SCF code.
subroutine, public scf_iter(scf, namespace, space, mc, gr, ions, ext_partners, st, ks, hm, iter, outp, verbosity, iters_done, restart_dump)
subroutine, public scf_start(scf, namespace, space, gr, ions, st, ks, hm, outp, verbosity)
Preparation of the SCF cycle.
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_algorithm_start(this)
subroutine, public system_end(this)
subroutine, public system_new_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 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.
Abstract class implementing minimizers.
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.
Systems (system_t) can expose quantities that can be used to calculate interactions with other system...
Abstract class for systems.