20#define RESTART_FILE 'dipoles'
34 use,
intrinsic :: iso_fortran_env
66 class(*),
intent(inout) :: system
67 logical,
intent(in) :: from_scratch
73 message(1) =
"CalculationMode = static_pol not implemented for multi-system calculations"
86 type(electrons_t),
intent(inout) :: sys
87 logical,
intent(in) :: fromScratch
90 integer :: iunit, ios, i_start, ii, jj, is, isign, ierr, read_count, verbosity, ip, imax
91 real(real64) :: e_field, e_field_saved
92 real(real64),
allocatable :: Vpsl_save(:), trrho(:), dipole(:, :, :)
93 real(real64),
allocatable :: elf(:,:), lr_elf(:,:), elfd(:,:), lr_elfd(:,:)
94 real(real64),
allocatable :: lr_rho(:,:), lr_rho2(:,:), gs_rho(:,:), tmp_rho(:,:)
95 real(real64) :: center_dipole(1:sys%space%dim), diag_dipole(1:sys%space%dim), ionic_dipole(1:sys%space%dim), &
96 print_dipole(1:sys%space%dim)
97 type(born_charges_t) :: born_charges
98 logical :: calc_born, start_density_is_zero_field, write_restart_densities, calc_diagonal, verbose
99 logical :: diagonal_done, center_written, fromScratch_local, field_written
100 character(len=MAX_PATH_LEN) :: fname, dir_name
101 character(len=120) :: line(1)
102 character :: sign_char
103 type(restart_t) :: gs_restart, restart_load, restart_dump
107 if (sys%hm%pcm%run_pcm)
then
111 if (sys%kpoints%use_symmetries)
then
112 call messages_experimental(
"KPoints symmetries with CalculationMode = em_resp", namespace=sys%namespace)
120 call states_elec_load(gs_restart, sys%namespace, sys%space, sys%st, sys%gr, sys%kpoints, &
121 fixed_occ=.false., ierr=ierr)
124 message(1) =
"Unable to read wavefunctions."
127 call gs_restart%end()
129 if (sys%space%is_periodic())
then
130 message(1) =
"Electric field cannot be applied to a periodic system (currently)."
135 message(1) =
'Info: Setting up Hamiltonian.'
137 call v_ks_h_setup(sys%namespace, sys%space, sys%gr, sys%ions, sys%ext_partners, sys%st, sys%ks, &
138 sys%hm, calc_eigenval = .false.)
141 safe_allocate(dipole(1:sys%space%dim, 1:sys%space%dim, 1:2))
145 center_written = .false.
146 diagonal_done = .false.
147 field_written = .false.
151 if (.not. fromscratch)
then
154 iunit = restart_load%open(restart_file)
159 if (iunit /= -1)
then
163 read(iunit, fmt=*, iostat = ios) e_field_saved
164 field_written = (ios == 0)
166 read(iunit, fmt=*, iostat = ios) (center_dipole(jj), jj = 1, sys%space%dim)
167 center_written = (ios == 0)
169 do ii = 1, sys%space%dim
170 read(iunit, fmt=*, iostat = ios) ((dipole(ii, jj, isign), jj = 1, sys%space%dim), isign = 1, 2)
172 i_start = i_start + 1
175 read(iunit, fmt=*, iostat = ios) (diag_dipole(jj), jj = 1, sys%space%dim)
176 diagonal_done = (ios == 0)
178 call restart_load%close(iunit)
182 if (field_written .and. abs(e_field_saved - e_field) >
m_epsilon)
then
183 message(1) =
"Saved dipoles are from a different electric field, cannot use them."
185 center_written = .false.
186 diagonal_done = .false.
190 read_count = (i_start - 1) * 2
191 if (center_written) read_count = read_count + 1
192 if (diagonal_done) read_count = read_count + 1
193 write(
message(1),
'(a,i5,a)')
"Using ", read_count,
" dipole(s) from file."
197 if (sys%outp%what(option__output__density) .or. &
198 sys%outp%what(option__output__pol_density))
then
199 if (i_start > 2 .and. calc_diagonal)
then
201 diagonal_done = .false.
206 if (i_start == 1)
then
208 iunit = restart_dump%open(restart_file, status=
'replace')
209 write(line(1), fmt=
'(e20.12)') e_field
210 call restart_dump%write(iunit, line, 1, ierr)
212 message(1) =
"Unsuccessful write of electric field."
215 call restart_dump%close(iunit)
216 center_written = .false.
220 safe_allocate(vpsl_save(1:sys%gr%np))
221 vpsl_save = sys%hm%ep%Vpsl
224 safe_allocate(trrho(1:sys%gr%np))
225 safe_allocate(gs_rho(1:sys%gr%np, 1:sys%st%d%nspin))
226 safe_allocate(tmp_rho(1:sys%gr%np, 1:sys%st%d%nspin))
231 call scf_init(scfv, sys%namespace, sys%gr, sys%ions, sys%st, sys%mc, sys%hm, sys%space)
232 call born_charges_init(born_charges, sys%namespace, sys%ions%natoms, sys%st%val_charge, &
233 sys%st%qtot, sys%space%dim)
237 sys%hm%ep%vpsl(1:sys%gr%np) = vpsl_save(1:sys%gr%np)
238 call sys%hm%update(sys%gr, sys%namespace, sys%space, sys%ext_partners)
241 write(
message(2),
'(a)')
'Info: Calculating dipole moment for zero field.'
243 call scf_run(scfv, sys%namespace, sys%space, sys%mc, sys%gr, sys%ions, sys%ext_partners, sys%st, &
244 sys%ks, sys%hm, verbosity = verbosity)
246 gs_rho(1:sys%gr%np, 1:sys%st%d%nspin) = sys%st%rho(1:sys%gr%np, 1:sys%st%d%nspin)
248 do is = 1, sys%st%d%spin_channels
253 do jj = 1, sys%space%dim
254 center_dipole(jj) =
dmf_moment(sys%gr, trrho, jj, 1)
258 if (.not. center_written)
then
259 iunit = restart_dump%open(restart_file, position=
'append')
260 write(line(1), fmt=
'(6e20.12)') (center_dipole(jj), jj = 1, sys%space%dim)
261 call restart_dump%write(iunit, line, 1, ierr)
263 message(1) =
"Unsuccessful write of center dipole."
266 call restart_dump%close(iunit)
270 ionic_dipole(1:sys%space%dim) = sys%ions%dipole()
271 print_dipole(1:sys%space%dim) = center_dipole(1:sys%space%dim) + ionic_dipole(1:sys%space%dim)
272 call output_dipole(print_dipole, sys%space%dim, namespace=sys%namespace)
275 do ii = i_start, sys%space%dim
278 write(
message(2),
'(a,f6.4,5a)')
'Info: Calculating dipole moment for field ', &
287 sys%hm%ep%vpsl(ip) = vpsl_save(ip) + (-1)**isign * sys%gr%x_t(ip, ii) * e_field
290 call sys%hm%update(sys%gr, sys%namespace, sys%space, sys%ext_partners)
298 write(dir_name,
'(a)')
"field_"//
index2axis(ii)//sign_char
299 fromscratch_local = fromscratch
301 if (.not. fromscratch)
then
302 call restart_load%open_dir(trim(dir_name), ierr)
304 call states_elec_load(restart_load, sys%namespace, sys%space, sys%st, sys%gr, sys%kpoints, &
305 fixed_occ=.false., ierr=ierr)
307 call v_ks_h_setup(sys%namespace, sys%space, sys%gr, sys%ions, sys%ext_partners, sys%st, sys%ks, sys%hm)
308 if (ierr /= 0) fromscratch_local = .
true.
309 call restart_load%close_dir()
312 if (fromscratch_local)
then
313 if (start_density_is_zero_field)
then
314 sys%st%rho(1:sys%gr%np, 1:sys%st%d%nspin) = gs_rho(1:sys%gr%np, 1:sys%st%d%nspin)
315 call v_ks_h_setup(sys%namespace, sys%space, sys%gr, sys%ions, sys%ext_partners, sys%st, sys%ks, sys%hm)
317 call lcao_run(sys%namespace, sys%space, sys%gr, sys%ions, sys%ext_partners, sys%st, sys%ks, &
318 sys%hm, lmm_r = scfv%lmm_r)
323 call scf_run(scfv, sys%namespace, sys%space, sys%mc, sys%gr, sys%ions, sys%ext_partners, sys%st, &
324 sys%ks, sys%hm, verbosity = verbosity)
327 do is = 1, sys%st%d%spin_channels
332 do jj = 1, sys%space%dim
333 dipole(ii, jj, isign) =
dmf_moment(sys%gr, trrho, jj, 1)
337 print_dipole(1:sys%space%dim) = dipole(ii, 1:sys%space%dim, isign) + ionic_dipole(1:sys%space%dim)
338 call output_dipole(print_dipole, sys%space%dim, namespace=sys%namespace)
343 if (write_restart_densities)
then
344 call restart_dump%open_dir(trim(dir_name), ierr)
346 call states_elec_dump(restart_dump, sys%space, sys%st, sys%gr, sys%kpoints, ierr)
348 call restart_dump%close_dir()
350 message(1) =
'Unable to write states wavefunctions.'
357 iunit = restart_dump%open(restart_file, position=
'append')
358 write(line(1),
'(6e20.12)') ((dipole(ii, jj, isign), jj = 1, sys%space%dim), isign = 1, 2)
359 call restart_dump%write(iunit, line, 1, ierr)
361 message(1) =
"Unsuccessful write of dipole."
364 call restart_dump%close(iunit)
367 if (.not. diagonal_done .and. calc_diagonal)
then
369 write(
message(2),
'(a,f6.4,3a, f6.4, 3a)')
'Info: Calculating dipole moment for field ', &
378 sys%hm%ep%vpsl(ip) = vpsl_save(ip) &
379 - (sys%gr%x_t(ip, 2) + sys%gr%x_t(ip, 3)) * e_field
382 call sys%hm%update(sys%gr, sys%namespace, sys%space, sys%ext_partners)
390 fromscratch_local = fromscratch
392 if (.not. fromscratch)
then
393 call restart_load%open_dir(
"field_yz+", ierr)
395 call states_elec_load(restart_load, sys%namespace, sys%space, sys%st, sys%gr, sys%kpoints, &
396 fixed_occ=.false., ierr=ierr)
398 call v_ks_h_setup(sys%namespace, sys%space, sys%gr, sys%ions, sys%ext_partners, sys%st, sys%ks, sys%hm)
399 if (ierr /= 0) fromscratch_local = .
true.
400 call restart_load%close_dir()
403 if (fromscratch_local)
then
404 if (start_density_is_zero_field)
then
405 sys%st%rho(1:sys%gr%np, 1:sys%st%d%nspin) = gs_rho(1:sys%gr%np, 1:sys%st%d%nspin)
406 call v_ks_h_setup(sys%namespace, sys%space, sys%gr, sys%ions, sys%ext_partners, sys%st, sys%ks, sys%hm)
408 call lcao_run(sys%namespace, sys%space, sys%gr, sys%ions, sys%ext_partners, sys%st, sys%ks, &
409 sys%hm, lmm_r = scfv%lmm_r)
414 call scf_run(scfv, sys%namespace, sys%space, sys%mc, sys%gr, sys%ions, sys%ext_partners, sys%st, &
415 sys%ks, sys%hm, verbosity = verbosity)
418 do is = 1, sys%st%d%spin_channels
423 do jj = 1, sys%space%dim
424 diag_dipole(jj) =
dmf_moment(sys%gr, trrho, jj, 1)
428 print_dipole(1:sys%space%dim) = diag_dipole(1:sys%space%dim) + ionic_dipole(1:sys%space%dim)
429 call output_dipole(print_dipole, sys%space%dim, namespace=sys%namespace)
433 iunit = restart_dump%open(restart_file, position=
'append')
434 write(line(1), fmt=
'(3e20.12)') (diag_dipole(jj), jj = 1, sys%space%dim)
435 call restart_dump%write(iunit, line, 1, ierr)
437 message(1) =
"Unsuccessful write of dipole."
440 call restart_dump%close(iunit)
442 if (write_restart_densities)
then
443 call restart_dump%open_dir(
"field_yz+", ierr)
445 call states_elec_dump(restart_dump, sys%space, sys%st, sys%gr, sys%kpoints, ierr)
447 call restart_dump%close_dir()
449 message(1) =
'Unable to write states wavefunctions.'
456 if (.not. fromscratch)
call restart_load%end()
461 safe_deallocate_a(vpsl_save)
462 safe_deallocate_a(trrho)
463 safe_deallocate_a(gs_rho)
464 safe_deallocate_a(tmp_rho)
465 safe_deallocate_a(dipole)
487 if (e_field <=
m_zero)
then
488 write(
message(1),
'(a,e14.6,a)')
"Input: '", e_field,
"' is not a valid EMStaticElectricField."
489 message(2) =
'(Must have EMStaticElectricField > 0)'
494 call parse_variable(sys%namespace,
'EMCalcbornCharges', .false., calc_born)
495 if (calc_born)
call messages_experimental(
"Calculation of born effective charges", namespace=sys%namespace)
508 call parse_variable(sys%namespace,
'EMStartDensityIsZeroField', .
true., start_density_is_zero_field)
529 call parse_variable(sys%namespace,
'EMWriteRestartDensities', .
true., write_restart_densities)
566 if (sys%outp%what(option__output__density) .or. &
567 sys%outp%what(option__output__pol_density))
then
568 safe_allocate(lr_rho(1:sys%gr%np, 1:sys%st%d%nspin))
569 safe_allocate(lr_rho2(1:sys%gr%np, 1:sys%st%d%nspin))
572 if (sys%outp%what(option__output__elf))
then
576 safe_allocate( elf(1:sys%gr%np, 1:imax))
577 safe_allocate( lr_elf(1:sys%gr%np, 1:imax))
578 safe_allocate( elfd(1:sys%gr%np, 1:imax))
579 safe_allocate(lr_elfd(1:sys%gr%np, 1:imax))
588 integer :: iatom, ip, ispin2
595 do iatom = 1, sys%ions%natoms
598 born_charges%charge(ii, 1:sys%space%dim, iatom) = sys%ions%tot_force(:, iatom)
600 born_charges%charge(ii, 1:sys%space%dim, iatom) = &
601 (sys%ions%tot_force(:, iatom) - born_charges%charge(ii, 1:sys%space%dim, iatom)) &
603 born_charges%charge(ii, ii, iatom) = born_charges%charge(ii, ii, iatom) + sys%ions%charge(iatom)
612 if (sys%outp%what(option__output__density) .or. &
613 sys%outp%what(option__output__pol_density))
then
615 if (isign == 1 .and. ii == 2)
then
616 tmp_rho(1:sys%gr%np, 1:sys%st%d%nspin) = sys%st%rho(1:sys%gr%np, 1:sys%st%d%nspin)
622 lr_rho(1:sys%gr%np, 1:sys%st%d%nspin) = sys%st%rho(1:sys%gr%np, 1:sys%st%d%nspin)
625 do ispin2 = 1, sys%st%d%nspin
628 lr_rho2(ip, ispin2) = &
629 -(sys%st%rho(ip, ispin2) + lr_rho(ip, ispin2) - &
630 2 * gs_rho(ip, ispin2)) / e_field**2
633 do ispin2 = 1, sys%st%d%nspin
636 lr_rho(ip, ispin2) = &
637 (sys%st%rho(ip, ispin2) - lr_rho(ip, ispin2)) / (
m_two*e_field)
643 do is = 1, sys%st%d%nspin
644 if (sys%outp%what(option__output__density))
then
646 write(fname,
'(a,i1,2a)')
'fd_density-sp', is,
'-',
index2axis(ii)
648 sys%namespace, sys%space, sys%gr, lr_rho(:, is), fn_unit, ierr, pos=sys%ions%pos, atoms=sys%ions%atom)
652 do jj = ii, sys%space%dim
655 sys%namespace, sys%space, sys%gr, lr_rho2(:, is), fn_unit, ierr, pos=sys%ions%pos, atoms=sys%ions%atom)
659 if (sys%outp%what(option__output__pol_density))
then
660 do jj = ii, sys%space%dim
664 sys%namespace, sys%space, sys%gr, -sys%gr%x_t(:, jj) * lr_rho(:, is), &
665 fn_unit, ierr, pos=sys%ions%pos, atoms=sys%ions%atom)
668 write(fname,
'(a,i1,6a)')
'beta_density-sp', is,
'-',
index2axis(ii), &
671 sys%namespace, sys%space, sys%gr, -sys%gr%x_t(:, jj) * lr_rho2(:, is), &
672 fn_unit, ierr, pos=sys%ions%pos, atoms=sys%ions%atom)
681 if (sys%outp%what(option__output__elf))
then
684 call elf_calc(sys%space, sys%st, sys%gr, sys%kpoints, elf, elfd)
686 call elf_calc(sys%space, sys%st, sys%gr, sys%kpoints, lr_elf, lr_elfd)
690 do ispin2 = 1, sys%st%d%spin_channels
693 lr_elf(ip, ispin2) = &
694 ( lr_elf(ip, ispin2) - elf(ip, ispin2)) / (
m_two * e_field)
697 do ispin2 = 1, sys%st%d%spin_channels
700 lr_elfd(ip, ispin2) = &
701 (lr_elfd(ip, ispin2) - elfd(ip, ispin2)) / (
m_two * e_field)
707 do is = 1, sys%st%d%spin_channels
708 write(fname,
'(a,i1,2a)')
'lr_elf-sp', is,
'-',
index2axis(ii)
710 sys%namespace, sys%space, sys%gr, lr_elf(:, is),
unit_one, ierr, pos=sys%ions%pos, atoms=sys%ions%atom)
711 write(fname,
'(a,i1,2a)')
'lr_elf_D-sp', is,
'-',
index2axis(ii)
713 sys%namespace, sys%space, sys%gr, lr_elfd(:, is),
unit_one, ierr, pos=sys%ions%pos, atoms=sys%ions%atom)
725 real(real64) :: alpha(sys%space%dim, sys%space%dim)
726 complex(real64) :: beta(sys%space%dim, sys%space%dim, sys%space%dim)
727 integer :: iunit, idir, ip, ispin2
729 real(real64) :: freq_factor(3)
735 if ((sys%outp%what(option__output__density) .or. &
736 sys%outp%what(option__output__pol_density)) .and. calc_diagonal)
then
738 do ispin2 = 1, sys%st%d%nspin
741 lr_rho2(ip, ispin2) = &
742 -(sys%st%rho(ip, ispin2) - lr_rho(ip, ispin2) &
743 - tmp_rho(ip, ispin2) + gs_rho(ip, ispin2)) / e_field**2
748 do is = 1, sys%st%d%nspin
749 if (sys%outp%what(option__output__density))
then
751 write(fname,
'(a,i1,a)')
'fd2_density-sp', is,
'-y-z'
753 sys%namespace, sys%space, sys%gr, lr_rho2(:, is), fn_unit, ierr, pos=sys%ions%pos, atoms=sys%ions%atom)
756 if (sys%outp%what(option__output__pol_density))
then
758 write(fname,
'(a,i1,a)')
'beta_density-sp', is,
'-x-y-z'
760 sys%namespace, sys%space, sys%gr, -sys%gr%x_t(:, 1) * lr_rho2(:, is), &
761 fn_unit, ierr, pos=sys%ions%pos, atoms=sys%ions%atom)
770 alpha(1:sys%space%dim, 1:sys%space%dim) = (dipole(1:sys%space%dim, 1:sys%space%dim, 1) - &
771 dipole(1:sys%space%dim, 1:sys%space%dim, 2)) / (
m_two * e_field)
775 do idir = 1, sys%space%dim
776 beta(1:sys%space%dim, idir, idir) = &
777 -(dipole(idir, 1:sys%space%dim, 1) + dipole(idir, 1:sys%space%dim, 2) - &
778 m_two * center_dipole(1:sys%space%dim)) / e_field**2
779 beta(idir, 1:sys%space%dim, idir) = beta(1:sys%space%dim, idir, idir)
780 beta(idir, idir, 1:sys%space%dim) = beta(1:sys%space%dim, idir, idir)
783 assert(sys%space%dim == 3)
785 if (calc_diagonal)
then
786 beta(1, 2, 3) = -(diag_dipole(1) - dipole(2, 1, 1) - dipole(3, 1, 1) + center_dipole(1)) / e_field**2
791 beta(2, 3, 1) = beta(1, 2, 3)
792 beta(3, 1, 2) = beta(1, 2, 3)
793 beta(3, 2, 1) = beta(1, 2, 3)
794 beta(1, 3, 2) = beta(1, 2, 3)
795 beta(2, 1, 3) = beta(1, 2, 3)
801 if (sys%st%system_grp%is_root())
then
811 if (sys%outp%what(option__output__density) .or. &
812 sys%outp%what(option__output__pol_density))
then
813 safe_deallocate_a(lr_rho)
814 safe_deallocate_a(lr_rho2)
817 if (sys%outp%what(option__output__elf))
then
818 safe_deallocate_a(lr_elf)
819 safe_deallocate_a(elf)
820 safe_deallocate_a(lr_elfd)
821 safe_deallocate_a(elfd)
subroutine init_(fromscratch)
constant times a vector plus a vector
subroutine, public born_charges_end(this)
subroutine, public born_output_charges(this, atom, charge, natoms, namespace, dim, dirname, write_real)
subroutine, public born_charges_init(this, namespace, natoms, val_charge, qtot, dim)
integer, parameter, public unpolarized
Parameters...
subroutine, public elf_calc(space, st, gr, kpoints, elf, de)
(time-dependent) electron localization function, (TD)ELF.
subroutine, public out_hyperpolarizability(box, beta, freq_factor, converged, dirname, namespace)
Ref: David M Bishop, Rev Mod Phys 62, 343 (1990) beta generalized to lack of Kleinman symmetry.
character(len= *), parameter, public em_resp_fd_dir
real(real64), parameter, public m_two
real(real64), parameter, public m_zero
real(real64), parameter, public m_epsilon
real(real64), parameter, public m_one
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 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)
subroutine, public lcao_run(namespace, space, gr, ions, ext_partners, st, ks, hm, st_start, lmm_r, known_lower_bound)
This module defines various routines, operating on mesh functions.
real(real64) function, public dmf_moment(mesh, ff, idir, order)
This function calculates the "order" moment of the function ff.
subroutine, public messages_not_implemented(feature, namespace)
subroutine, public messages_warning(no_lines, all_nodes, namespace)
subroutine, public messages_obsolete_variable(namespace, name, rep)
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)
type(mpi_grp_t), public mpi_world
This module implements the basic mulsisystem class, a container system for other systems.
integer, parameter, public restart_gs
integer, parameter, public restart_em_resp_fd
integer, parameter, public restart_type_dump
integer, parameter, public restart_type_load
subroutine, public scf_mix_clear(scf)
integer, parameter, public verb_full
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.
pure logical function, public states_are_real(st)
subroutine, public states_elec_deallocate_wfns(st)
Deallocates the KS wavefunctions defined within a states_elec_t structure.
subroutine, public states_elec_allocate_wfns(st, mesh, wfs_type, skip, packed)
Allocates the KS wavefunctions defined within a states_elec_t structure.
This module handles reading and writing restart information for the states_elec_t.
subroutine, public states_elec_load(restart, namespace, space, st, mesh, kpoints, fixed_occ, ierr, iter, lr, lowest_missing, label, verbose, skip)
returns in ierr: <0 => Fatal error, or nothing read =0 => read all wavefunctions >0 => could only rea...
subroutine, public states_elec_dump(restart, space, st, mesh, kpoints, ierr, iter, lr, verbose)
subroutine static_pol_run_legacy(sys, fromScratch)
subroutine, public static_pol_run(system, from_scratch)
brief This module defines the class unit_t which is used by the unit_systems_oct_m module.
character(len=20) pure function, public units_abbrev(this)
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.
subroutine, public output_tensor(tensor, ndim, unit, write_average, iunit, namespace)
subroutine, public output_dipole(dipole, ndim, iunit, namespace)
character pure function, public index2axis(idir)
subroutine, public v_ks_h_setup(namespace, space, gr, ions, ext_partners, st, ks, hm, calc_eigenval, calc_current)
subroutine output_init_()
subroutine output_cycle_()
Class describing the electron system.
Container class for lists of system_oct_m::system_t.