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.