36#if defined(HAVE_ETSF_IO)
52 use,
intrinsic :: iso_fortran_env
114 subroutine output_init(outp, namespace, space, st, gr, nst, ks)
115 type(output_t),
intent(out) :: outp
116 type(namespace_t),
intent(in) :: namespace
117 class(space_t),
intent(in) :: space
118 type(states_elec_t),
intent(in) :: st
119 type(grid_t),
intent(in) :: gr
120 integer,
intent(in) :: nst
121 type(v_ks_t),
intent(inout) :: ks
125 character(len=80) :: nst_string, default
135 if (outp%what(option__output__wfs_fourier))
then
137 message(1) =
"Wave functions in Fourier space not supported on GPUs."
144 if (outp%what(option__output__elf) .or. outp%what(option__output__elf_basins))
then
145 if (space%dim /= 2 .and. space%dim /= 3)
then
146 outp%what(option__output__elf) = .false.
147 outp%what(option__output__elf_basins) = .false.
148 write(
message(1),
'(a)')
'Cannot calculate ELF except in 2D and 3D.'
154 if (outp%what(option__output__mmb_wfs))
then
158 if (outp%what(option__output__xc_torque))
then
159 if (st%d%ispin /=
spinors)
then
160 write(
message(1),
'(a)')
'The output xc_torque can only be computed for spinors.'
163 if (space%dim /= 3)
then
164 write(
message(1),
'(a)')
'The output xc_torque can only be computed in the 3D case.'
168 if (outp%what(option__output__mmb_den))
then
177 if (outp%what(option__output__energy_density))
call messages_experimental(
"'Output = energy_density'", namespace=namespace)
178 if (outp%what(option__output__heat_current))
call messages_experimental(
"'Output = heat_current'", namespace=namespace)
180 if (outp%what(option__output__wfs) .or. outp%what(option__output__wfs_sqmod))
then
192 write(nst_string,
'(i6)') nst
193 write(default,
'(a,a)')
"1-", trim(adjustl(nst_string))
194 call parse_variable(namespace,
'OutputWfsNumber', default, outp%wfs_list)
197 if (
parse_block(namespace,
'CurrentThroughPlane', blk) == 0)
then
198 if (.not. outp%what(option__output__j_flow))
then
199 outp%what(option__output__j_flow) = .
true.
200 call parse_variable(namespace,
'OutputInterval', 50, outp%output_interval(option__output__j_flow))
251 select case (space%dim)
269 norm = norm2(outp%plane%u(1:3))
271 write(
message(1),
'(a)')
'u-vector for CurrentThroughPlane cannot have norm zero.'
274 outp%plane%u(1:3) = outp%plane%u(1:3) / norm
276 norm = norm2(outp%plane%v(1:3))
278 write(
message(1),
'(a)')
'v-vector for CurrentThroughPlane cannot have norm zero.'
281 outp%plane%v(1:3) = outp%plane%v(1:3) / norm
283 outp%plane%n(1) = outp%plane%u(2)*outp%plane%v(3) - outp%plane%u(3)*outp%plane%v(2)
284 outp%plane%n(2) = outp%plane%u(3)*outp%plane%v(1) - outp%plane%u(1)*outp%plane%v(3)
285 outp%plane%n(3) = outp%plane%u(1)*outp%plane%v(2) - outp%plane%u(2)*outp%plane%v(1)
297 norm = norm2(outp%line%u(1:2))
299 write(
message(1),
'(a)')
'u-vector for CurrentThroughPlane cannot have norm zero.'
302 outp%line%u(1:2) = outp%line%u(1:2) / norm
304 outp%line%n(1) = -outp%line%u(2)
305 outp%line%n(2) = outp%line%u(1)
319 if (outp%what(option__output__matrix_elements))
then
322 outp%me%what = .false.
325 if (outp%what(option__output__berkeleygw))
then
327 message(1) =
"BerkeleyGW is not compatible with GPUs."
334 if (outp%what(option__output__potential_gradient) .and. .not. outp%what(option__output__potential))
then
335 outp%what(option__output__potential) = .
true.
336 outp%output_interval(option__output__potential) = outp%output_interval(option__output__potential_gradient)
348 call parse_variable(namespace,
'OutputDuringSCF', .false., outp%duringscf)
351 write(
message(1),
'(a)')
'Input variable RestartWriteInterval is obsolete.'
352 write(
message(2),
'(a)')
'Restart files are now written in periods of the wallclock time'
353 write(
message(3),
'(a)')
'given by RestartWallTimePeriod, so you can simply delete this variable.'
368 call parse_variable(namespace,
'OutputIterDir',
"output_iter", outp%iter_dir)
369 if (any(outp%what) .and. any(outp%output_interval > 0))
then
370 call io_mkdir(outp%iter_dir, namespace)
383 if (outp%what(option__output__current_dia))
then
384 message(1) =
"The diamagnetic current will be calculated only if CalculateDiamagneticCurrent = yes."
389 do iout = lbound(outp%how, 1), ubound(outp%how, 1)
390 if (
bitand(outp%how(iout), option__outputformat__etsf) /= 0)
then
391 message(1) =
"ETSF output can only be used if Octopus is compiled with ETSF-IO"
401 subroutine output_all(outp, namespace, space, dir, gr, ions, iter, st, hm, ks)
404 class(
space_t),
intent(in) :: space
405 character(len=*),
intent(in) :: dir
406 type(
grid_t),
intent(in) :: gr
407 type(
ions_t),
intent(in) :: ions
408 integer,
intent(in) :: iter
411 type(
v_ks_t),
intent(inout) :: ks
413 integer :: idir, ierr, iout, iunit
414 character(len=MAX_PATH_LEN) :: fname
419 if (any(outp%what))
then
420 message(1) =
"Info: Writing output to " // trim(dir)
425 if (outp%what_now(option__output__mesh_r, iter))
then
426 do idir = 1, space%dim
427 write(fname,
'(a,a)')
'mesh_r-',
index2axis(idir)
429 gr, gr%x(:,idir),
units_out%length, ierr, pos=ions%pos, atoms=ions%atom)
433 call output_states(outp, namespace, space, dir, st, gr, ions, hm, iter)
434 call output_hamiltonian(outp, namespace, space, dir, hm, st, gr%der, ions, gr, iter, st%st_kpt_mpi_grp)
437 if (outp%what_now(option__output__el_pressure, iter))
then
441 if (st%d%spin_channels > 1)
then
447 if (outp%what(option__output__kanamoriu) .and. hm%lda_u_level /=
dft_u_acbn0)
then
448 message(1) =
"kanamoriU output can only be computed for DFTULevel = dft_u_acbn0"
455 if (outp%what_now(option__output__j_flow, iter))
then
459 if (outp%what_now(option__output__geometry, iter))
then
460 if (
bitand(outp%how(option__output__geometry), option__outputformat__xcrysden) /= 0)
then
463 if (
bitand(outp%how(option__output__geometry), option__outputformat__xyz) /= 0)
then
464 call ions%write_xyz(trim(dir)//
'/geometry')
465 if (ions%space%is_periodic())
then
466 call ions%write_crystal(dir)
469 if (
bitand(outp%how(option__output__geometry), option__outputformat__vtk) /= 0)
then
470 call ions%write_vtk_geometry(trim(dir)//
'/geometry')
472 if (
bitand(outp%how(option__output__geometry), option__outputformat__poscar) /= 0)
then
473 call ions%write_poscar(trim(dir)//
'/POSCAR')
477 if (outp%what_now(option__output__forces, iter))
then
478 if (
bitand(outp%how(option__output__forces), option__outputformat__bild) /= 0)
then
479 call ions%write_bild_forces_file(dir,
"forces")
482 gr, namespace, total_forces = ions%tot_force)
486 if (outp%what_now(option__output__matrix_elements, iter))
then
487 call output_me(outp%me, namespace, space, dir, st, gr, ions, hm)
490 do iout = lbound(outp%how, 1), ubound(outp%how, 1)
491 if (
bitand(outp%how(iout), option__outputformat__etsf) /= 0)
then
492 call output_etsf(outp, namespace, space, dir, st, gr, hm%kpoints, ions, iter)
497 if (outp%what_now(option__output__berkeleygw, iter))
then
501 if (outp%what_now(option__output__energy_density, iter))
then
505 if (outp%what_now(option__output__stress, iter))
then
507 iunit =
io_open(trim(dir)//
'/stress', namespace, action=
'write')
508 call output_stress(iunit, space%periodic_dim, st%stress_tensors)
513 if (outp%what_now(option__output__occ_matrices, iter))&
516 if (outp%what_now(option__output__effectiveu, iter))&
519 if (outp%what_now(option__output__magnetization, iter))&
522 if (outp%what_now(option__output__local_orbitals, iter))&
523 call output_dftu_orbitals(outp, dir, namespace, space, hm%lda_u, st, gr, ions, hm%phase%is_allocated())
525 if (outp%what_now(option__output__kanamoriu, iter))&
529 if (outp%what_now(option__output__photon_correlator, iter))
then
530 write(fname,
'(a)')
'photon_correlator'
531 call dio_function_output(outp%how(option__output__photon_correlator), dir, trim(fname), namespace, space, &
532 gr, ks%oep_photon%pt%correlator(:,1),
units_out%length, ierr, pos=ions%pos, atoms=ions%atom)
538 if (outp%what_now(option__output__xc_torque, iter))
then
540 write(
message(1),
'(a)')
'The output xc_torque can only be computed when there is a xc potential.'
556 class(
space_t),
intent(in) :: space
557 character(len=*),
intent(in) :: dir
560 type(
grid_t),
intent(in) :: gr
561 type(
ions_t),
intent(in) :: ions
562 integer,
intent(in) :: iter
564 real(real64),
allocatable :: f_loc(:,:)
565 character(len=MAX_PATH_LEN) :: fname
566 integer :: is, ierr, imax
571 mpi_grp = st%dom_st_kpt_mpi_grp
577 safe_allocate(f_loc(1:gr%np, 1:imax))
580 if (outp%what_now(option__output__elf, iter) .or. outp%what_now(option__output__elf_basins, iter))
then
581 assert(space%dim /= 1)
583 call elf_calc(space, st, gr, hm%kpoints, f_loc)
586 if (outp%what_now(option__output__elf, iter))
then
587 write(fname,
'(a)')
'elf_rs'
588 call dio_function_output(outp%how(option__output__elf), dir, trim(fname), namespace, space, gr, &
589 f_loc(:,imax),
unit_one, ierr, pos=ions%pos, atoms=ions%atom, grp = mpi_grp)
594 write(fname,
'(a,i1)')
'elf_rs-sp', is
595 call dio_function_output(outp%how(option__output__elf), dir, trim(fname), namespace, space, gr, &
596 f_loc(:, is),
unit_one, ierr, pos=ions%pos, atoms=ions%atom, grp = mpi_grp)
602 if (outp%what_now(option__output__elf_basins, iter))
then
603 call out_basins(f_loc(:,1),
"elf_rs_basins", outp%how(option__output__elf_basins))
608 if (outp%what_now(option__output__bader, iter))
then
609 do is = 1, st%d%nspin
614 call dio_function_output(outp%how(option__output__bader), dir, trim(fname), namespace, space, gr, &
615 f_loc(:,is),
units_out%length**(-2 - space%dim), ierr, &
616 pos=ions%pos, atoms=ions%atom, grp = mpi_grp)
619 call out_basins(f_loc(:,1), fname, outp%how(option__output__bader))
624 if (outp%what_now(option__output__el_pressure, iter))
then
626 call dio_function_output(outp%how(option__output__el_pressure), dir,
"el_pressure", namespace, space, gr, &
627 f_loc(:,1),
unit_one, ierr, pos=ions%pos, atoms=ions%atom, grp = mpi_grp)
631 safe_deallocate_a(f_loc)
637 subroutine out_basins(ff, filename, output_how)
638 real(real64),
intent(in) :: ff(:)
639 character(len=*),
intent(in) :: filename
640 integer(int64),
intent(in) :: output_how
642 character(len=MAX_PATH_LEN) :: fname
649 call basins_analyze(basins, namespace, gr, ff(:), st%rho, 0.01_real64)
652 real(basins%map, real64) , unit_one, ierr, pos=ions%pos, atoms=ions%atom, grp = mpi_grp)
655 write(fname,
'(4a)') trim(dir),
'/', trim(filename),
'.info'
656 iunit =
io_open(trim(fname), namespace, action =
'write')
672 type(
grid_t),
intent(in) :: gr
673 real(real64),
intent(out) :: pressure(:)
675 real(real64),
allocatable :: rho(:,:), lrho(:), tau(:,:)
676 real(real64) :: p_tf, dens
681 safe_allocate( rho(1:gr%np_part, 1:st%d%nspin))
682 safe_allocate(lrho(1:gr%np))
683 safe_allocate( tau(1:gr%np, 1:st%d%nspin))
690 do is = 1, st%d%spin_channels
694 pressure(:) = pressure(:) + &
699 dens = sum(rho(ii,1:st%d%spin_channels))
706 pressure(ii) = pressure(ii) + (dens*hm%ks_pot%vxc(ii,1) - hm%energy%exchange - hm%energy%correlation)
708 pressure(ii) = pressure(ii)/p_tf
720 class(
space_t),
intent(in) :: space
721 character(len=*),
intent(in) :: dir
723 type(
v_ks_t),
intent(inout) :: ks
725 type(
ions_t),
intent(in) :: ions
726 type(
grid_t),
intent(in) :: gr
728 integer :: is, ierr, ip
729 character(len=MAX_PATH_LEN) :: fname
731 real(real64),
allocatable :: energy_density(:, :)
732 real(real64),
allocatable :: ex_density(:)
733 real(real64),
allocatable :: ec_density(:)
738 safe_allocate(energy_density(1:gr%np, 1:st%d%nspin))
744 do is = 1, st%d%nspin
746 energy_density(ip, is) = energy_density(ip, is) + st%rho(ip, is)*hm%ep%vpsl(ip)
751 do is = 1, st%d%nspin
753 energy_density(ip, is) = energy_density(ip, is) +
m_half*st%rho(ip, is)*hm%ks_pot%vhartree(ip)
758 safe_allocate(ex_density(1:gr%np))
759 safe_allocate(ec_density(1:gr%np))
761 call xc_get_vxc(gr, ks%xc, st, hm%kpoints, hm%psolver, namespace, space, st%rho, st%d%ispin, &
762 hm%ions%latt%rcell_volume, ex_density = ex_density, ec_density = ec_density)
763 do is = 1, st%d%nspin
765 energy_density(ip, is) = energy_density(ip, is) + ex_density(ip) + ec_density(ip)
769 safe_deallocate_a(ex_density)
770 safe_deallocate_a(ec_density)
772 do is = 1, st%d%spin_channels
774 call dio_function_output(outp%how(option__output__energy_density), dir, trim(fname), namespace, space, gr, &
775 energy_density(:, is),
unit_one, ierr, pos=ions%pos, atoms=ions%atom, grp = st%dom_st_kpt_mpi_grp)
777 safe_deallocate_a(energy_density)
787 need_exx =(outp%what(option__output__berkeleygw) &
788 .or. outp%me%what(option__outputmatrixelements__two_body) &
789 .or. outp%me%what(option__outputmatrixelements__two_body_exc_k))
796 character(len=*),
intent(in) :: dir
798 class(
space_t),
intent(in) :: space
799 type(
lda_u_t),
intent(in) :: this
801 class(
mesh_t),
intent(in) :: mesh
802 type(
ions_t),
intent(in) :: ions
803 logical,
intent(in) :: has_phase
805 integer :: ios, im, ik, idim, ierr
806 complex(real64),
allocatable :: tmp(:)
807 real(real64),
allocatable :: dtmp(:)
810 character(len=MAX_PATH_LEN) :: fname
816 if (this%basis%use_submesh)
then
818 safe_allocate(dtmp(1:mesh%np))
820 safe_allocate(tmp(1:mesh%np))
824 do ios = 1, this%norbsets
825 os => this%orbsets(ios)
826 do ik = st%d%kpt%start, st%d%kpt%end
827 do im = 1, this%orbsets(ios)%norbs
828 do idim = 1, min(os%ndim, st%d%dim)
830 if (min(os%ndim, st%d%dim) > 1)
then
831 write(fname,
'(a,i1,a,i3.3,a,i8.8,a,i1)')
'orb', im,
'-os', ios,
'-k', ik,
'-sp', idim
833 write(fname,
'(a,i1,a,i3.3,a,i8.8)')
'orb', im,
'-os', ios,
'-k', ik
836 if (min(os%ndim, st%d%dim) > 1)
then
837 write(fname,
'(a,i1,a,i3.3,a,i1)')
'orb', im,
'-os', ios,
'-sp', idim
839 write(fname,
'(a,i1,a,i3.3)')
'orb', im,
'-os', ios
843 if (.not. this%basis%use_submesh)
then
844 call zio_function_output(outp%how(option__output__local_orbitals), dir, fname, namespace, space, &
845 mesh, os%eorb_mesh(1:mesh%np,im,idim,ik), fn_unit, ierr, pos=ions%pos, atoms=ions%atom)
849 call zio_function_output(outp%how(option__output__local_orbitals), dir, fname, namespace, space, &
850 mesh, tmp, fn_unit, ierr, pos=ions%pos, atoms=ions%atom)
853 if (.not. this%basis%use_submesh)
then
855 call dio_function_output(outp%how(option__output__local_orbitals), dir, fname, namespace, space, mesh, &
856 os%dorb(1:mesh%np,idim,im), fn_unit, ierr, pos=ions%pos, atoms=ions%atom)
858 call zio_function_output(outp%how(option__output__local_orbitals), dir, fname, namespace, space, mesh, &
859 os%zorb(1:mesh%np,idim,im), fn_unit, ierr, pos=ions%pos, atoms=ions%atom)
865 call dio_function_output(outp%how(option__output__local_orbitals), dir, fname, namespace, space, &
866 mesh, dtmp, fn_unit, ierr, pos=ions%pos, atoms=ions%atom)
870 call zio_function_output(outp%how(option__output__local_orbitals), dir, fname, namespace, space, &
871 mesh, tmp, fn_unit, ierr, pos=ions%pos, atoms=ions%atom)
880 safe_deallocate_a(tmp)
881 safe_deallocate_a(dtmp)
889 logical,
intent(in) :: states_are_real
893 if (outp%what(option__output__current) &
894 .or. outp%what(option__output__current_dia) &
895 .or. outp%what(option__output__heat_current) &
896 .or. outp%what(option__output__current_kpt))
then
897 if (.not. states_are_real)
then
900 message(1) =
'No current density output for real states since it is identically zero.'
908#include "output_etsf_inc.F90"
910#include "output_states_inc.F90"
912#include "output_h_inc.F90"
915#include "complex.F90"
916#include "output_linear_response_inc.F90"
920#include "output_linear_response_inc.F90"
pure logical function, public accel_is_enabled()
subroutine, public basins_write(this, mesh, iunit)
subroutine, public basins_init(this, namespace, mesh)
subroutine, public basins_analyze(this, namespace, mesh, f, rho, threshold)
subroutine, public basins_end(this)
This module implements a calculator for the density and defines related functions.
subroutine, public density_calc(st, gr, density, istin)
Computes the density from the orbitals in st.
This module calculates the derivatives (gradients, Laplacians, etc.) of a function.
subroutine, public dderivatives_lapl(der, ff, op_ff, ghost_update, set_bc, factor)
apply the Laplacian to a mesh function
Module that handles computing and output of various density of states.
integer, parameter, public unpolarized
Parameters...
integer, parameter, public spinors
integer, parameter, public spin_polarized
subroutine, public elf_calc(space, st, gr, kpoints, elf, de)
(time-dependent) electron localization function, (TD)ELF.
Fast Fourier Transform module. This module provides a single interface that works with different FFT ...
real(real64), parameter, public m_two
real(real64), parameter, public m_zero
real(real64), parameter, public m_four
real(real64), parameter, public m_pi
some mathematical constants
complex(real64), parameter, public m_z0
integer, parameter, public generalized_kohn_sham_dft
integer, parameter, public kohn_sham_dft
real(real64), parameter, public m_epsilon
real(real64), parameter, public m_half
real(real64), parameter, public m_one
real(real64), parameter, public m_three
real(real64), parameter, public m_five
This module implements the underlying real-space grid.
This module defines classes and functions for interaction partners.
subroutine, public zio_function_output(how, dir, fname, namespace, space, mesh, ff, unit, ierr, pos, atoms, grp, root)
Top-level IO routine for functions defined on the mesh.
subroutine, public io_function_read_what_how_when(namespace, space, what, how, output_interval, what_tag_in, how_tag_in, output_interval_tag_in, ignore_error)
subroutine, public dio_function_output(how, dir, fname, namespace, space, mesh, ff, unit, ierr, pos, atoms, grp, root)
Top-level IO routine for functions defined on the mesh.
subroutine, public write_xsf_geometry_file(dir, fname, space, latt, pos, atoms, mesh, namespace, total_forces)
subroutine, public io_close(iunit, grp)
subroutine, public io_mkdir(fname, namespace, parents)
integer function, public io_open(file, namespace, action, status, form, position, die, recl, grp)
A module to handle KS potential, without the external potential.
subroutine, public lda_u_write_occupation_matrices(dir, this, st, namespace)
Prints the occupation matrices at the end of the scf calculation.
subroutine, public lda_u_write_kanamoriu(dir, st, this, namespace)
subroutine, public lda_u_write_magnetization(dir, this, ions, mesh, st, namespace)
subroutine, public lda_u_write_effectiveu(dir, this, namespace)
integer, parameter, public dft_u_none
integer, parameter, public dft_u_acbn0
This module is intended to contain "only mathematical" functions and procedures.
This module defines various routines, operating on mesh functions.
This module defines the meshes, which are used in Octopus.
subroutine, public messages_not_implemented(feature, namespace)
subroutine, public messages_warning(no_lines, all_nodes, namespace)
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)
subroutine, public output_berkeleygw(bgw, namespace, space, dir, st, gr, ks, hm, ions)
subroutine, public output_berkeleygw_init(nst, namespace, bgw, periodic_dim)
this module contains the low-level part of the output system
character(len=max_path_len) function, public get_filename_with_spin(output, nspin, spin_index)
Returns the filame as output, or output-spX is spin polarized.
subroutine, public output_me_init(this, namespace, space, st, gr, nst)
subroutine, public output_me(this, namespace, space, dir, st, gr, ions, hm)
this module contains the output system
subroutine calc_electronic_pressure(st, hm, gr, pressure)
subroutine, public output_states(outp, namespace, space, dir, st, gr, ions, hm, iter)
logical function, public output_needs_current(outp, states_are_real)
subroutine, public output_hamiltonian(outp, namespace, space, dir, hm, st, der, ions, gr, iter, grp)
subroutine, public output_all(outp, namespace, space, dir, gr, ions, iter, st, hm, ks)
logical function, public output_need_exchange(outp)
subroutine, public output_init(outp, namespace, space, st, gr, nst, ks)
subroutine output_xc_torque(outp, namespace, dir, mesh, hm, st, ions, space)
subroutine, public output_current_flow(outp, namespace, space, dir, gr, st, kpoints)
subroutine, public zoutput_lr(outp, namespace, space, dir, st, mesh, lr, idir, isigma, ions, pert_unit)
subroutine, public doutput_lr(outp, namespace, space, dir, st, mesh, lr, idir, isigma, ions, pert_unit)
subroutine, public output_scalar_pot(outp, namespace, space, dir, mesh, ions, ext_partners, time)
subroutine output_energy_density(outp, namespace, space, dir, hm, ks, st, ions, gr)
subroutine output_dftu_orbitals(outp, dir, namespace, space, this, st, mesh, ions, has_phase)
subroutine output_localization_funct(outp, namespace, space, dir, st, hm, gr, ions, iter)
subroutine output_etsf(outp, namespace, space, dir, st, gr, kpoints, ions, iter)
To create an etsf file one has to do the following:
logical function, public parse_is_defined(namespace, name)
integer function, public parse_block(namespace, name, blk, check_varinfo_)
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.
pure logical function, public states_are_real(st)
This module defines routines to write information about states.
subroutine, public states_elec_calc_quantities(gr, st, kpoints, nlcc, kinetic_energy_density, paramagnetic_current, density_gradient, density_laplacian, gi_kinetic_energy_density, st_end)
calculated selected quantities
This module implements the calculation of the stress tensor.
subroutine, public output_stress(iunit, space_dim, stress_tensors, all_terms)
subroutine, public add_last_slash(str)
Adds a '/' in the end of the string, only if it missing. Useful for directories.
brief This module defines the class unit_t which is used by the unit_systems_oct_m module.
This module defines the unit system, used for input and output.
type(unit_system_t), public units_out
type(unit_system_t), public units_inp
the units systems for reading and writing
type(unit_t), public unit_one
some special units required for particular quantities
This module is intended to contain simple general-purpose utility functions and procedures.
character pure function, public index2axis(idir)
subroutine, public v_ks_calculate_current(this, calc_cur)
subroutine, public xc_get_vxc(gr, xcs, st, kpoints, psolver, namespace, space, rho, ispin, rcell_volume, vxc, ex, ec, deltaxc, vtau, ex_density, ec_density, stress_xc, force_orbitalfree)
integer, parameter, public oep_level_full
subroutine out_basins(ff, filename, output_how)
Description of the grid, containing information on derivatives, stencil, and symmetries.
Class to describe DFT+U parameters.
Describes mesh distribution to nodes.
This is defined even when running serial.
Output information for BerkeleyGW.
The states_elec_t class contains all electronic wave functions.