130 type(electron_space_t) :: space
131 class(ions_t),
pointer :: ions => null()
132 type(photons_t),
pointer :: photons => null()
134 type(states_elec_t) :: st
136 type(output_t) :: outp
137 type(multicomm_t) :: mc
138 type(hamiltonian_elec_t) :: hm
140 type(current_t) :: current_calculator
141 type(dipole_t) :: dipole
145 type(kpoints_t) :: kpoints
147 logical :: generate_epot
149 type(states_elec_t) :: st_copy
152 class(lasers_t),
pointer :: lasers => null()
153 class(gauge_field_t),
pointer :: gfield => null()
157 type(partner_list_t) :: ext_partners
160 type(xc_interaction_t),
pointer :: xc_interaction => null()
164 logical :: ions_propagated = .false.
167 type(wannier_t) :: wannier
191 procedure electrons_constructor
201 class(electrons_t),
pointer :: sys
202 type(namespace_t),
intent(in) :: namespace
203 type(mpi_grp_t),
intent(in) :: grp
204 integer,
optional,
intent(in) :: calc_mode_id
207 type(lattice_vectors_t) :: latt_inp
208 logical :: has_photons
214 sys%namespace = namespace
216 call sys%init_parallelization(grp)
221 call sys%space%write_info(sys%namespace)
222 if (sys%space%has_mixed_periodicity())
then
226 sys%ions =>
ions_t(sys%namespace, latt_inp=latt_inp)
228 call grid_init_stage_1(sys%gr, sys%namespace, sys%space, sys%grp, sys%ions%symm, latt_inp, sys%ions%natoms, sys%ions%pos)
230 if (sys%space%is_periodic())
then
231 call sys%ions%latt%write_info(sys%namespace)
235 do iatom = 1, sys%ions%natoms
238 if (.not. sys%gr%box%contains_point(sys%ions%pos(:, iatom), tol=1.0e-6_real64))
then
239 if (sys%space%periodic_dim /= sys%space%dim)
then
240 write(
message(1),
'(a,i5,a)')
"Atom ", iatom,
" is outside the box."
247 call kpoints_init(sys%kpoints, sys%namespace, sys%gr%symm, sys%space%dim, sys%space%periodic_dim, sys%ions%latt)
249 call states_elec_init(sys%st, sys%namespace, sys%space, sys%ions%val_charge(), sys%kpoints, calc_mode_id)
250 call sys%st%write_info(sys%namespace)
254 call sys%st%modelmbparticles%copy_masses(sys%gr%der%masses)
258 if (
present(calc_mode_id))
then
259 sys%generate_epot = calc_mode_id /= option__calculationmode__dummy
261 sys%generate_epot = .
true.
264 call sys%dipole%init(sys%space)
268 call sys%quantities%add(
quantity_t(
"wavefunctions", updated_on_demand = .false.))
269 call sys%quantities%add(
quantity_t(
"current", updated_on_demand = .
true., parents=[
"wavefunctions"]))
270 call sys%quantities%add(
quantity_t(
"dipole", updated_on_demand = .
true., parents=[
"wavefunctions"]))
286 call parse_variable(namespace,
'EnablePhotons', .false., has_photons)
287 if (has_photons)
then
294 call sys%wannier%init_from_input(sys%namespace, sys%kpoints)
307 integer :: rankmin, depth
308 logical :: mxll_interaction_present
309 logical :: calc_dipole
311 push_sub(electrons_init_interactions)
313 mxll_interaction_present = .false.
314 select type (interaction)
316 call interaction%init(this%gr, 3)
317 mxll_interaction_present = .
true.
320 call interaction%init(this%gr, 3)
321 mxll_interaction_present = .
true.
323 call interaction%init(this%gr, 3)
324 mxll_interaction_present = .
true.
326 message(1) =
"Trying to initialize an unsupported interaction by the electrons."
330 if (mxll_interaction_present)
then
331 calc_dipole = any(this%hm%mxll%coupling_mode == &
334 if (calc_dipole)
then
335 assert(this%space%periodic_dim == 0)
336 this%hm%mxll%calc_field_dip = .
true.
337 this%hm%mxll%center_of_mass(1:3) = this%ions%center_of_mass()
338 this%hm%mxll%center_of_mass_ip =
mesh_nearest_point(this%gr, this%hm%mxll%center_of_mass, dmin, rankmin)
339 this%hm%mxll%center_of_mass_rankmin = rankmin
344 select type (interaction)
347 select type (algo => this%algo)
355 message(1) =
"The chosen algorithm does not yet support interaction interpolation"
359 call interaction%init_interpolation(depth, interaction%label)
362 pop_sub(electrons_init_interactions)
369 integer(int64) :: index_range(4)
370 real(real64) :: mesh_global, mesh_local, wfns
372 real(real64) :: spiral_q(3), spiral_q_red(3)
379 index_range(1) = this%gr%np_global
380 index_range(2) = this%st%nst
381 index_range(3) = this%st%nik
382 index_range(4) = 100000
386 this%grp%size, index_range, (/ 5000, 1, 1, 1 /))
388 call this%ions%partition(this%mc)
396 if (
parse_block(this%namespace,
'TDMomentumTransfer', blk) == 0)
then
397 do idir = 1, this%space%dim
400 else if(
parse_block(this%namespace,
'TDReducedMomentumTransfer', blk) == 0)
then
401 do idir = 1, this%space%dim
404 call kpoints_to_absolute(this%kpoints%latt, spiral_q_red(1:this%space%dim), spiral_q(1:this%space%dim))
412 if (this%st%symmetrize_density)
then
416 call output_init(this%outp, this%namespace, this%space, this%st, this%gr, this%st%nst, this%ks)
420 if (
associated(this%photons))
then
421 this%ks%has_photons = .
true.
424 call v_ks_init(this%ks, this%namespace, this%gr, this%st, this%ions, this%mc, this%space, this%kpoints)
431 if(this%ks%has_photons)
then
432 this%ks%pt => this%photons%modes
435 write(
message(1),
'(a,i5,a)')
'Happy to have ', this%photons%modes%nmodes,
' photon modes with us.'
437 call mf_init(this%ks%pt_mx, this%gr, this%st, this%ions, this%ks%pt)
439 if(
bitand(this%ks%xc_family, xc_family_oep) /= 0 .and. this%ks%xc%functional(
func_x,1)%id ==
xc_oep_x)
then
440 this%ks%oep_photon%level = this%ks%oep%level
441 call xc_oep_photon_init(this%ks%oep_photon, this%namespace, this%ks%xc_family, this%gr, this%st, this%mc, this%space)
450 this%lasers =>
lasers_t(this%namespace)
453 if(this%lasers%no_lasers > 0)
then
454 call this%ext_partners%add(this%lasers)
457 deallocate(this%lasers)
463 call this%ext_partners%add(this%gfield)
466 deallocate(this%gfield)
469 call hamiltonian_elec_init(this%hm, this%namespace, this%space, this%gr, this%ions, this%ext_partners, &
470 this%st, this%ks%theory_level, this%ks%xc, this%mc, this%kpoints, &
472 xc_photons = this%ks%xc_photons )
512 if (this%generate_epot)
then
513 message(1) =
"Info: Generating external potential"
516 this%ext_partners, this%st)
530 allocate(this%supported_interactions(0))
531 select case (this%hm%mxll%coupling_mode)
536 if (this%hm%mxll%add_zeeman)
then
540 if (this%hm%mxll%add_electric_dip .or. this%hm%mxll%add_electric_quad)
then
543 if (this%hm%mxll%add_magnetic_dip)
then
549 message(1) =
"Unknown maxwell-matter coupling"
553 call this%wannier%init_parallelization(this%namespace, this%st, this%ions, this%kpoints)
567 select type (algo => this%algo)
570 call td_init(this%td, this%namespace, this%space, this%gr, this%ions, this%st, this%ks, &
571 this%hm, this%ext_partners, this%outp, this%dmp)
576 call td_init_gaugefield(this%td, this%namespace, this%gr, this%st, this%ks, this%hm, &
577 this%ext_partners, this%space)
597 if (
associated(this%ions))
call this%ions%initialize()
599 select type (algo => this%algo)
603 this%ext_partners, this%st, this%ks, this%hm)
604 call this%wannier%init_data_from_file(this%kpoints, this%space)
609 this%hm, this%ions, this%ks, this%space, this%ext_partners, fromscratch=.
true.)
625 select type (algo => this%algo)
630 this%ext_partners, this%st, this%ks, this%hm, this%outp, this%dmp,
td_get_from_scratch(this%td))
641 character(len=:),
allocatable,
intent(out) :: updated_quantities(:)
643 logical :: update_energy_
649 call profiling_in(trim(this%namespace%get())//
":"//trim(operation%id))
651 update_energy_ = .
true.
656 select type (algo => this%algo)
658 time = algo%iteration%value()
659 select case (operation%id)
664 this%hm, this%ext_partners, time)
670 call this%hm%ks_pot%interpolation_new(this%td%tr%vks_old, time+algo%dt, algo%dt)
680 this%st, this%namespace, this%space, this%td%ions_dyn, this%ions, this%ext_partners, &
681 this%mc, time+algo%dt, algo%dt)
685 if(
associated(gfield))
then
687 algo%dt, time+algo%dt)
693 this%hm, this%ext_partners, time+algo%dt)
698 this%gr, this%hm,
m_half*algo%dt)
700 updated_quantities = [
"wavefunctions"]
705 if(
associated(gfield))
then
711 call this%hm%ks_pot%interpolation_new(this%td%tr%vks_old, time+algo%dt, algo%dt)
714 call this%hm%ks_pot%interpolate_potentials(this%td%tr%vks_old, 3, time+algo%dt, algo%dt, time + algo%dt/
m_two)
720 this%namespace, this%space, this%td%ions_dyn, this%ions, this%ext_partners, &
725 this%hm, this%ext_partners, time +
m_half*algo%dt)
730 this%gr, this%hm, algo%dt)
735 updated_quantities = [
"wavefunctions"]
738 call scf_init(this%scf, this%namespace, this%gr, this%ions, this%st, this%mc, this%hm, this%space)
740 this%ions_propagated = .
true.
745 this%td%ions_dyn, this%ions, this%mc, time+algo%dt, algo%dt)
749 this%ext_partners, this%st, time = time+algo%dt)
751 call scf_run(this%scf, this%namespace, this%space, this%mc, this%gr, this%ions, &
752 this%ext_partners, this%st, this%ks, this%hm, verbosity =
verb_compact)
755 this%ext_partners, this%st, time = time+algo%dt)
758 call v_ks_calc(this%ks, this%namespace, this%space, this%hm, this%st, this%ions, this%ext_partners, &
759 calc_eigenval = .
true., time = time+algo%dt, calc_energy = .
true.)
762 call energy_calc_total(this%namespace, this%space, this%hm, this%gr, this%st, this%ext_partners, iunit = -1)
764 updated_quantities = [
"wavefunctions"]
768 if (this%td%ions_dyn%cell_relax())
then
769 assert(this%scf%calc_stress)
770 call this%td%ions_dyn%update_stress(this%ions%space, this%st%stress_tensors%total, &
771 this%ions%latt%rlattice, this%ions%latt%rcell_volume)
778 this%ext_partners, this%st, time = time+algo%dt)
779 call this%ions%update_kinetic_energy()
782 this%ions_propagated = .false.
786 this%ions_propagated = .
true.
803 iter = nint(this%iteration%value()) + 1
805 select case(operation%id)
807 call scf_start(this%scf, this%namespace, this%gr, this%ions, this%st, this%ks, this%hm, this%outp)
811 call scf_iter(this%scf, this%namespace, this%space, this%mc, this%gr, this%ions, &
812 this%ext_partners, this%st, this%ks, this%hm, iter, outp = this%outp, &
813 restart_dump=this%scf%restart_dump)
815 algo%converged =
scf_iter_finish(this%scf, this%namespace, this%space, this%gr, this%ions,&
816 this%st, this%ks, this%hm, iter, outp = this%outp)
818 updated_quantities = [
"wavefunctions"]
823 call scf_finish(this%scf, this%namespace, this%space, this%gr, this%ions, &
824 this%ext_partners, this%st, this%ks, this%hm, iter-1, outp = this%outp)
833 call profiling_out(trim(this%namespace%get())//
":"//trim(operation%id))
840 real(real64),
intent(in) :: tol
852 character(len=*),
intent(in) :: label
857 call profiling_in(trim(this%namespace%get())//
":"//
"UPDATE_QUANTITY")
859 quantity => this%quantities%get(label)
860 if(
associated(quantity))
then
861 assert(quantity%updated_on_demand)
868 this%hm, this%space, this%st)
870 call this%dipole%calculate(this%gr, this%ions, this%st)
872 message(1) =
"Incompatible quantity: "//trim(label)//
"."
876 call profiling_out(trim(this%namespace%get())//
":"//
"UPDATE_QUANTITY")
887 select type (interaction)
889 call interaction%init_from_partner(partner%gr, partner%space, partner%namespace)
891 message(1) =
"Unsupported interaction."
904 call profiling_in(trim(partner%namespace%get())//
":"//
"COPY_QUANTITY_INTER")
906 select type (interaction)
908 assert(
allocated(partner%st%current))
909 interaction%partner_field(:,:) = partner%st%current(1:partner%gr%np,:,1)
910 call interaction%do_mapping()
912 message(1) =
"Unsupported interaction."
916 call profiling_out(trim(partner%namespace%get())//
":"//
"COPY_QUANTITY_INTER")
936 call profiling_in(trim(this%namespace%get())//
":"//
"OUTPUT_WRITE")
938 select type (algo => this%algo)
940 iter = this%iteration%counter()
942 call td_write_iter(this%td%write_handler, this%namespace, this%space, this%outp, this%gr, &
943 this%st, this%hm, this%ions, this%ext_partners, this%hm%kick, this%ks, algo%dt, iter, this%mc, &
944 this%td%recalculate_gs, this%dmp%adiabatic_st)
946 if (this%outp%anything_now(iter))
then
947 call td_write_output(this%namespace, this%space, this%gr, this%st, this%hm, this%ks, &
948 this%outp, this%ions, this%ext_partners, iter, algo%dt)
953 call this%wannier%write_iter(this%namespace, this%outp, iter, this%ions, this%kpoints)
957 call profiling_out(trim(this%namespace%get())//
":"//
"OUTPUT_WRITE")
988 logical :: update_energy_
1001 update_energy_ = .
true.
1007 if (this%td%pesv%calc_spm .or. this%td%pesv%calc_mask .or. this%td%pesv%calc_flux)
then
1008 call pes_calc(this%td%pesv, this%namespace, this%space, this%gr, this%st, &
1009 prop%dt, nt, this%gr%der, this%hm%kpoints, this%ext_partners, stopping)
1015 call profiling_out(trim(this%namespace%get())//
":"//
"END_OF_TIMESTEP")
1023 if (this%td%ions_dyn%is_active())
then
1024 if (.not. this%ions_propagated)
then
1026 this%td%ions_dyn, this%ions, this%mc, abs(nt*prop%dt), this%td%ions_dyn%ionic_scale*prop%dt)
1032 if(
associated(gfield))
then
1038 if (generate .or. this%ions%has_time_dependent_species())
then
1040 this%ext_partners, this%st, time = abs(nt*prop%dt))
1043 call v_ks_calc(this%ks, this%namespace, this%space, this%hm, this%st, this%ions, this%ext_partners, &
1044 calc_eigenval = update_energy_, time = abs(nt*prop%dt), calc_energy = update_energy_)
1046 if (update_energy_)
then
1047 call energy_calc_total(this%namespace, this%space, this%hm, this%gr, this%st, this%ext_partners, iunit = -1)
1051 if (this%td%ions_dyn%ions_move() .or. this%outp%what(option__output__forces) &
1053 call forces_calculate(this%gr, this%namespace, this%ions, this%hm, this%ext_partners, &
1054 this%st, this%ks, t = abs(nt*prop%dt), dt = prop%dt)
1057 if (this%td%ions_dyn%cell_relax() .or. this%outp%what(option__output__stress))
then
1058 call stress_calculate(this%namespace, this%gr, this%hm, this%st, this%ions, this%ks, this%ext_partners)
1061 if(this%td%ions_dyn%is_active())
then
1063 call this%ions%update_kinetic_energy()
1066 if(
associated(gfield))
then
1068 call gauge_field_get_force(gfield, this%gr, this%st%d%spin_channels, this%st%current, this%ks%xc%lrc)
1077 this%td%iter = this%td%iter + 1
1079 call profiling_out(trim(this%namespace%get())//
":"//
"END_OF_TIMESTEP")
1090 call profiling_in(trim(this%namespace%get())//
":"//
"RESTART_WRITE")
1092 select type (algo => this%algo)
1095 call td_dump(this%td, this%namespace, this%space, this%gr, this%st, this%hm, &
1096 this%ks, this%ext_partners, this%iteration%counter(), ierr)
1098 message(1) =
"Unable to write time-dependent restart information."
1103 call pes_output(this%td%pesv, this%namespace, this%space, this%gr, this%st, this%iteration%counter(), &
1104 this%outp, algo%dt, this%ions)
1107 call this%wannier%restart_write_data(this%namespace, this%mc, this%gr)
1111 call profiling_out(trim(this%namespace%get())//
":"//
"RESTART_WRITE")
1120 logical :: from_scratch
1123 call profiling_in(trim(this%namespace%get())//
":"//
"RESTART_READ")
1125 select type (algo => this%algo)
1127 from_scratch = .false.
1129 this%ext_partners, this%st, this%ks, this%hm, from_scratch)
1132 call this%wannier%restart_read_data(this%namespace, this%mc, this%gr)
1138 from_scratch = .false.
1140 this%ks, this%space, this%ions, this%ext_partners,from_scratch)
1146 if (from_scratch)
then
1154 call profiling_out(trim(this%namespace%get())//
":"//
"RESTART_READ")
1177 real(real64),
intent(in) :: time
1180 real(real64),
allocatable :: field_tmp(:, :)
1189 assert(this%gr%box%dim == 3)
1191 safe_allocate(field_tmp(1:this%gr%np, 1:this%gr%box%dim))
1192 this%hm%mxll%e_field =
m_zero
1193 this%hm%mxll%b_field =
m_zero
1194 this%hm%mxll%vec_pot =
m_zero
1197 call iter%start(this%interactions)
1198 do while (iter%has_next())
1199 select type (interaction => iter%get_next())
1201 call interaction%interpolate(time, field_tmp)
1202 call lalg_axpy(this%gr%np, 3,
m_one, field_tmp, this%hm%mxll%e_field)
1204 call interaction%interpolate(time, field_tmp)
1205 call lalg_axpy(this%gr%np, 3,
m_one, field_tmp, this%hm%mxll%vec_pot)
1207 call interaction%interpolate(time, field_tmp)
1208 call lalg_axpy(this%gr%np, 3,
m_one, field_tmp, this%hm%mxll%b_field)
1212 safe_deallocate_a(field_tmp)
1221 logical,
intent(inout) :: from_scratch
1226 sys%ext_partners, sys%st, sys%ks, sys%hm, sys%outp, sys%space, from_scratch)
1241 if (
associated(sys%algo))
then
1242 select type (algo => sys%algo)
1244 call td_end_run(sys%td, sys%st, sys%hm, sys%dmp)
1255 call iter%start(sys%ext_partners)
1256 do while (iter%has_next())
1257 partner => iter%get_next()
1258 safe_deallocate_p(partner)
1260 call sys%ext_partners%empty()
1262 safe_deallocate_p(sys%xc_interaction)
1272 if (sys%ks%has_photons)
then
1273 call mf_end(sys%ks%pt_mx)
1276 call sys%dipole%end()
1282 deallocate(sys%ions)
1283 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.
A set of subroutines for performing the parts of a ground state calculation with an electrons system....
subroutine, public electrons_ground_state_run(namespace, mc, gr, ions, ext_partners, st, ks, hm, outp, space, fromScratch)
Run a ground state calculation for a system of electrons.
subroutine, public electrons_gs_allocate_wavefunctions(namespace, gr, st, hm, scf, ks, ions)
subroutine, public electrons_gs_initialize(namespace, scf, rdm, gr, mc, st, hm, ions, ks, space, ext_partners, fromScratch)
subroutine, public electrons_gs_load_from_restart(namespace, scf, gr, mc, st, hm, ks, space, ions, ext_partners, fromScratch)
subroutine, public electrons_gs_cleanup(ks, scf, rdm, st, hm)
subroutine electrons_initialize(this)
logical function electrons_restart_read_data(this)
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_parallelization(this)
subroutine electrons_init_interaction_as_partner(partner, interaction)
subroutine electrons_ground_state_run_system(sys, from_scratch)
Run a ground state calculation for a system of electrons.
subroutine electrons_update_kinetic_energy(this)
logical function electrons_is_tolerance_reached(this, tol)
class(electrons_t) function, pointer electrons_constructor(namespace, grp, calc_mode_id)
@ brief Instantiate an instance of an electrons system
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_get_force(this, gr, spin_channels, current, lrc)
subroutine, public gauge_field_do_algorithmic_operation(this, operation, dt, time)
subroutine, public gauge_field_check_symmetries(this, kpoints)
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
integer, parameter, public independent_particles
Theory level.
integer, parameter, public generalized_kohn_sham_dft
integer, parameter, public kohn_sham_dft
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, grp, 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_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.
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, phase, energy)
System information (time, memory, sysname)
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
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_propagate_gauge_field(wo, gfield, dt, time, save_gf)
subroutine, public propagation_ops_elec_propagate_ions_and_cell(gr, hm, st, namespace, space, ions_dyn, ions, mc, time, dt_ions)
subroutine, public propagation_ops_elec_update_hamiltonian(namespace, space, st, mesh, hm, ext_partners, time)
subroutine, public propagation_ops_elec_interpolate_get(hm, vks_old)
subroutine, public propagation_ops_elec_fuse_density_exp_apply(te, namespace, st, gr, hm, dt, dt2, op)
subroutine, public propagation_ops_elec_move_ions(wo, gr, hm, st, namespace, space, ions_dyn, ions, ext_partners, mc, time, dt, save_pos)
subroutine, public propagation_ops_elec_exp_apply(te, namespace, st, mesh, hm, dt, op)
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.
subroutine, public scf_finish(scf, namespace, space, gr, ions, ext_partners, st, ks, hm, iter, outp)
subroutine, public scf_start(scf, namespace, gr, ions, st, ks, hm, outp, verbosity)
Preparation of the SCF cycle.
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, restart_dump)
logical function, public scf_iter_finish(scf, namespace, space, gr, ions, st, ks, hm, iter, outp, iters_done)
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)
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 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_init(st, namespace, space, valence_charge, kpoints, calc_mode_id)
Initialize a new states_elec_t object.
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_init_with_wavefunctions(td, namespace, space, mc, gr, ions, ext_partners, st, ks, hm, outp, dmp, from_scratch)
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_allocate_wavefunctions(td, namespace, mc, gr, ions, st, hm, space)
subroutine, public td_init(td, namespace, space, gr, ions, st, ks, hm, ext_partners, outp, dmp)
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_load_restart_from_td(td, namespace, space, mc, gr, ext_partners, st, ks, hm, from_scratch)
subroutine, public td_end_run(td, st, hm, dmp)
subroutine, public td_write_output(namespace, space, gr, st, hm, ks, outp, ions, ext_partners, iter, dt)
subroutine, public td_write_iter(writ, namespace, space, outp, gr, st, hm, ions, ext_partners, kick, ks, dt, iter, mc, recalculate_gs, dmp_st)
subroutine, public td_write_data(writ)
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 td_wannier_method_none
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.
Abstract class implementing minimizers.
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.
Main object containing all Wannier-related data and methods.