20#define RESTART_FILE 'dipoles'
33 use,
intrinsic :: iso_fortran_env
65 class(*),
intent(inout) :: system
66 logical,
intent(in) :: from_scratch
72 message(1) =
"CalculationMode = static_pol not implemented for multi-system calculations"
85 type(electrons_t),
intent(inout) :: sys
86 logical,
intent(in) :: fromScratch
89 integer :: iunit, ios, i_start, ii, jj, is, isign, ierr, read_count, verbosity, ip
90 real(real64) :: e_field, e_field_saved
91 real(real64),
allocatable :: Vpsl_save(:), trrho(:), dipole(:, :, :)
92 real(real64),
allocatable :: elf(:,:), lr_elf(:,:), elfd(:,:), lr_elfd(:,:)
93 real(real64),
allocatable :: lr_rho(:,:), lr_rho2(:,:), gs_rho(:,:), tmp_rho(:,:)
94 real(real64) :: center_dipole(1:sys%space%dim), diag_dipole(1:sys%space%dim), ionic_dipole(1:sys%space%dim), &
95 print_dipole(1:sys%space%dim)
96 type(born_charges_t) :: born_charges
97 logical :: calc_born, start_density_is_zero_field, write_restart_densities, calc_diagonal, verbose
98 logical :: diagonal_done, center_written, fromScratch_local, field_written
99 character(len=MAX_PATH_LEN) :: fname, dir_name
100 character(len=120) :: line(1)
101 character :: sign_char
102 type(restart_t) :: gs_restart, restart_load, restart_dump
106 if (sys%hm%pcm%run_pcm)
then
110 if (sys%kpoints%use_symmetries)
then
111 call messages_experimental(
"KPoints symmetries with CalculationMode = em_resp", namespace=sys%namespace)
119 call states_elec_load(gs_restart, sys%namespace, sys%space, sys%st, sys%gr, sys%kpoints, &
120 fixed_occ=.false., ierr=ierr)
123 message(1) =
"Unable to read wavefunctions."
126 call gs_restart%end()
128 if (sys%space%is_periodic())
then
129 message(1) =
"Electric field cannot be applied to a periodic system (currently)."
134 message(1) =
'Info: Setting up Hamiltonian.'
136 call v_ks_h_setup(sys%namespace, sys%space, sys%gr, sys%ions, sys%ext_partners, sys%st, sys%ks, &
137 sys%hm, calc_eigenval = .false.)
140 safe_allocate(dipole(1:sys%space%dim, 1:sys%space%dim, 1:2))
144 center_written = .false.
145 diagonal_done = .false.
146 field_written = .false.
150 if (.not. fromscratch)
then
153 iunit = restart_load%open(restart_file)
158 if (iunit /= -1)
then
162 read(iunit, fmt=*, iostat = ios) e_field_saved
163 field_written = (ios == 0)
165 read(iunit, fmt=*, iostat = ios) (center_dipole(jj), jj = 1, sys%space%dim)
166 center_written = (ios == 0)
168 do ii = 1, sys%space%dim
169 read(iunit, fmt=*, iostat = ios) ((dipole(ii, jj, isign), jj = 1, sys%space%dim), isign = 1, 2)
171 i_start = i_start + 1
174 read(iunit, fmt=*, iostat = ios) (diag_dipole(jj), jj = 1, sys%space%dim)
175 diagonal_done = (ios == 0)
177 call restart_load%close(iunit)
181 if (field_written .and. abs(e_field_saved - e_field) >
m_epsilon)
then
182 message(1) =
"Saved dipoles are from a different electric field, cannot use them."
184 center_written = .false.
185 diagonal_done = .false.
189 read_count = (i_start - 1) * 2
190 if (center_written) read_count = read_count + 1
191 if (diagonal_done) read_count = read_count + 1
192 write(
message(1),
'(a,i5,a)')
"Using ", read_count,
" dipole(s) from file."
196 if (sys%outp%what(option__output__density) .or. &
197 sys%outp%what(option__output__pol_density))
then
198 if (i_start > 2 .and. calc_diagonal)
then
200 diagonal_done = .false.
205 if (i_start == 1)
then
207 iunit = restart_dump%open(restart_file, status=
'replace')
208 write(line(1), fmt=
'(e20.12)') e_field
209 call restart_dump%write(iunit, line, 1, ierr)
211 message(1) =
"Unsuccessful write of electric field."
214 call restart_dump%close(iunit)
215 center_written = .false.
219 safe_allocate(vpsl_save(1:sys%gr%np))
220 vpsl_save = sys%hm%ep%Vpsl
223 safe_allocate(trrho(1:sys%gr%np))
224 safe_allocate(gs_rho(1:sys%gr%np, 1:sys%st%d%nspin))
225 safe_allocate(tmp_rho(1:sys%gr%np, 1:sys%st%d%nspin))
230 call scf_init(scfv, sys%namespace, sys%gr, sys%ions, sys%st, sys%mc, sys%hm, sys%space)
231 call born_charges_init(born_charges, sys%namespace, sys%ions%natoms, sys%st%val_charge, &
232 sys%st%qtot, sys%space%dim)
236 sys%hm%ep%vpsl(1:sys%gr%np) = vpsl_save(1:sys%gr%np)
237 call sys%hm%update(sys%gr, sys%namespace, sys%space, sys%ext_partners)
240 write(
message(2),
'(a)')
'Info: Calculating dipole moment for zero field.'
242 call scf_run(scfv, sys%namespace, sys%space, sys%mc, sys%gr, sys%ions, sys%ext_partners, sys%st, &
243 sys%ks, sys%hm, verbosity = verbosity)
245 gs_rho(1:sys%gr%np, 1:sys%st%d%nspin) = sys%st%rho(1:sys%gr%np, 1:sys%st%d%nspin)
247 do is = 1, sys%st%d%spin_channels
252 do jj = 1, sys%space%dim
253 center_dipole(jj) =
dmf_moment(sys%gr, trrho, jj, 1)
257 if (.not. center_written)
then
258 iunit = restart_dump%open(restart_file, position=
'append')
259 write(line(1), fmt=
'(6e20.12)') (center_dipole(jj), jj = 1, sys%space%dim)
260 call restart_dump%write(iunit, line, 1, ierr)
262 message(1) =
"Unsuccessful write of center dipole."
265 call restart_dump%close(iunit)
269 ionic_dipole(1:sys%space%dim) = sys%ions%dipole()
270 print_dipole(1:sys%space%dim) = center_dipole(1:sys%space%dim) + ionic_dipole(1:sys%space%dim)
271 call output_dipole(print_dipole, sys%space%dim, namespace=sys%namespace)
274 do ii = i_start, sys%space%dim
277 write(
message(2),
'(a,f6.4,5a)')
'Info: Calculating dipole moment for field ', &
286 sys%hm%ep%vpsl(ip) = vpsl_save(ip) + (-1)**isign * sys%gr%x_t(ip, ii) * e_field
289 call sys%hm%update(sys%gr, sys%namespace, sys%space, sys%ext_partners)
297 write(dir_name,
'(a)')
"field_"//
index2axis(ii)//sign_char
298 fromscratch_local = fromscratch
300 if (.not. fromscratch)
then
301 call restart_load%open_dir(trim(dir_name), ierr)
303 call states_elec_load(restart_load, sys%namespace, sys%space, sys%st, sys%gr, sys%kpoints, &
304 fixed_occ=.false., ierr=ierr)
306 call v_ks_h_setup(sys%namespace, sys%space, sys%gr, sys%ions, sys%ext_partners, sys%st, sys%ks, sys%hm)
307 if (ierr /= 0) fromscratch_local = .
true.
308 call restart_load%close_dir()
311 if (fromscratch_local)
then
312 if (start_density_is_zero_field)
then
313 sys%st%rho(1:sys%gr%np, 1:sys%st%d%nspin) = gs_rho(1:sys%gr%np, 1:sys%st%d%nspin)
314 call v_ks_h_setup(sys%namespace, sys%space, sys%gr, sys%ions, sys%ext_partners, sys%st, sys%ks, sys%hm)
316 call lcao_run(sys%namespace, sys%space, sys%gr, sys%ions, sys%ext_partners, sys%st, sys%ks, &
317 sys%hm, lmm_r = scfv%lmm_r)
322 call scf_run(scfv, sys%namespace, sys%space, sys%mc, sys%gr, sys%ions, sys%ext_partners, sys%st, &
323 sys%ks, sys%hm, verbosity = verbosity)
326 do is = 1, sys%st%d%spin_channels
331 do jj = 1, sys%space%dim
332 dipole(ii, jj, isign) =
dmf_moment(sys%gr, trrho, jj, 1)
336 print_dipole(1:sys%space%dim) = dipole(ii, 1:sys%space%dim, isign) + ionic_dipole(1:sys%space%dim)
337 call output_dipole(print_dipole, sys%space%dim, namespace=sys%namespace)
342 if (write_restart_densities)
then
343 call restart_dump%open_dir(trim(dir_name), ierr)
345 call states_elec_dump(restart_dump, sys%space, sys%st, sys%gr, sys%kpoints, ierr)
347 call restart_dump%close_dir()
349 message(1) =
'Unable to write states wavefunctions.'
356 iunit = restart_dump%open(restart_file, position=
'append')
357 write(line(1),
'(6e20.12)') ((dipole(ii, jj, isign), jj = 1, sys%space%dim), isign = 1, 2)
358 call restart_dump%write(iunit, line, 1, ierr)
360 message(1) =
"Unsuccessful write of dipole."
363 call restart_dump%close(iunit)
366 if (.not. diagonal_done .and. calc_diagonal)
then
368 write(
message(2),
'(a,f6.4,3a, f6.4, 3a)')
'Info: Calculating dipole moment for field ', &
377 sys%hm%ep%vpsl(ip) = vpsl_save(ip) &
378 - (sys%gr%x_t(ip, 2) + sys%gr%x_t(ip, 3)) * e_field
381 call sys%hm%update(sys%gr, sys%namespace, sys%space, sys%ext_partners)
389 fromscratch_local = fromscratch
391 if (.not. fromscratch)
then
392 call restart_load%open_dir(
"field_yz+", ierr)
394 call states_elec_load(restart_load, sys%namespace, sys%space, sys%st, sys%gr, sys%kpoints, &
395 fixed_occ=.false., ierr=ierr)
397 call v_ks_h_setup(sys%namespace, sys%space, sys%gr, sys%ions, sys%ext_partners, sys%st, sys%ks, sys%hm)
398 if (ierr /= 0) fromscratch_local = .
true.
399 call restart_load%close_dir()
402 if (fromscratch_local)
then
403 if (start_density_is_zero_field)
then
404 sys%st%rho(1:sys%gr%np, 1:sys%st%d%nspin) = gs_rho(1:sys%gr%np, 1:sys%st%d%nspin)
405 call v_ks_h_setup(sys%namespace, sys%space, sys%gr, sys%ions, sys%ext_partners, sys%st, sys%ks, sys%hm)
407 call lcao_run(sys%namespace, sys%space, sys%gr, sys%ions, sys%ext_partners, sys%st, sys%ks, &
408 sys%hm, lmm_r = scfv%lmm_r)
413 call scf_run(scfv, sys%namespace, sys%space, sys%mc, sys%gr, sys%ions, sys%ext_partners, sys%st, &
414 sys%ks, sys%hm, verbosity = verbosity)
417 do is = 1, sys%st%d%spin_channels
422 do jj = 1, sys%space%dim
423 diag_dipole(jj) =
dmf_moment(sys%gr, trrho, jj, 1)
427 print_dipole(1:sys%space%dim) = diag_dipole(1:sys%space%dim) + ionic_dipole(1:sys%space%dim)
428 call output_dipole(print_dipole, sys%space%dim, namespace=sys%namespace)
432 iunit = restart_dump%open(restart_file, position=
'append')
433 write(line(1), fmt=
'(3e20.12)') (diag_dipole(jj), jj = 1, sys%space%dim)
434 call restart_dump%write(iunit, line, 1, ierr)
436 message(1) =
"Unsuccessful write of dipole."
439 call restart_dump%close(iunit)
441 if (write_restart_densities)
then
442 call restart_dump%open_dir(
"field_yz+", ierr)
444 call states_elec_dump(restart_dump, sys%space, sys%st, sys%gr, sys%kpoints, ierr)
446 call restart_dump%close_dir()
448 message(1) =
'Unable to write states wavefunctions.'
455 if (.not. fromscratch)
call restart_load%end()
460 safe_deallocate_a(vpsl_save)
461 safe_deallocate_a(trrho)
462 safe_deallocate_a(gs_rho)
463 safe_deallocate_a(tmp_rho)
464 safe_deallocate_a(dipole)
486 if (e_field <=
m_zero)
then
487 write(
message(1),
'(a,e14.6,a)')
"Input: '", e_field,
"' is not a valid EMStaticElectricField."
488 message(2) =
'(Must have EMStaticElectricField > 0)'
493 call parse_variable(sys%namespace,
'EMCalcbornCharges', .false., calc_born)
494 if (calc_born)
call messages_experimental(
"Calculation of born effective charges", namespace=sys%namespace)
507 call parse_variable(sys%namespace,
'EMStartDensityIsZeroField', .
true., start_density_is_zero_field)
528 call parse_variable(sys%namespace,
'EMWriteRestartDensities', .
true., write_restart_densities)
565 if (sys%outp%what(option__output__density) .or. &
566 sys%outp%what(option__output__pol_density))
then
567 safe_allocate(lr_rho(1:sys%gr%np, 1:sys%st%d%nspin))
568 safe_allocate(lr_rho2(1:sys%gr%np, 1:sys%st%d%nspin))
571 if (sys%outp%what(option__output__elf))
then
572 safe_allocate( elf(1:sys%gr%np, 1:sys%st%d%nspin))
573 safe_allocate( lr_elf(1:sys%gr%np, 1:sys%st%d%nspin))
574 safe_allocate( elfd(1:sys%gr%np, 1:sys%st%d%nspin))
575 safe_allocate(lr_elfd(1:sys%gr%np, 1:sys%st%d%nspin))
584 integer :: iatom, ip, ispin2
591 do iatom = 1, sys%ions%natoms
594 born_charges%charge(ii, 1:sys%space%dim, iatom) = sys%ions%tot_force(:, iatom)
596 born_charges%charge(ii, 1:sys%space%dim, iatom) = &
597 (sys%ions%tot_force(:, iatom) - born_charges%charge(ii, 1:sys%space%dim, iatom)) &
599 born_charges%charge(ii, ii, iatom) = born_charges%charge(ii, ii, iatom) + sys%ions%charge(iatom)
608 if (sys%outp%what(option__output__density) .or. &
609 sys%outp%what(option__output__pol_density))
then
611 if (isign == 1 .and. ii == 2)
then
612 tmp_rho(1:sys%gr%np, 1:sys%st%d%nspin) = sys%st%rho(1:sys%gr%np, 1:sys%st%d%nspin)
618 lr_rho(1:sys%gr%np, 1:sys%st%d%nspin) = sys%st%rho(1:sys%gr%np, 1:sys%st%d%nspin)
621 do ispin2 = 1, sys%st%d%nspin
624 lr_rho2(ip, ispin2) = &
625 -(sys%st%rho(ip, ispin2) + lr_rho(ip, ispin2) - &
626 2 * gs_rho(ip, ispin2)) / e_field**2
629 do ispin2 = 1, sys%st%d%nspin
632 lr_rho(ip, ispin2) = &
633 (sys%st%rho(ip, ispin2) - lr_rho(ip, ispin2)) / (
m_two*e_field)
639 do is = 1, sys%st%d%nspin
640 if (sys%outp%what(option__output__density))
then
642 write(fname,
'(a,i1,2a)')
'fd_density-sp', is,
'-',
index2axis(ii)
644 sys%namespace, sys%space, sys%gr, lr_rho(:, is), fn_unit, ierr, pos=sys%ions%pos, atoms=sys%ions%atom)
648 do jj = ii, sys%space%dim
651 sys%namespace, sys%space, sys%gr, lr_rho2(:, is), fn_unit, ierr, pos=sys%ions%pos, atoms=sys%ions%atom)
655 if (sys%outp%what(option__output__pol_density))
then
656 do jj = ii, sys%space%dim
660 sys%namespace, sys%space, sys%gr, -sys%gr%x_t(:, jj) * lr_rho(:, is), &
661 fn_unit, ierr, pos=sys%ions%pos, atoms=sys%ions%atom)
664 write(fname,
'(a,i1,6a)')
'beta_density-sp', is,
'-',
index2axis(ii), &
667 sys%namespace, sys%space, sys%gr, -sys%gr%x_t(:, jj) * lr_rho2(:, is), &
668 fn_unit, ierr, pos=sys%ions%pos, atoms=sys%ions%atom)
677 if (sys%outp%what(option__output__elf))
then
680 call elf_calc(sys%space, sys%st, sys%gr, sys%kpoints, elf, elfd)
682 call elf_calc(sys%space, sys%st, sys%gr, sys%kpoints, lr_elf, lr_elfd)
686 do ispin2 = 1, sys%st%d%nspin
689 lr_elf(ip, ispin2) = &
690 ( lr_elf(ip, ispin2) - elf(ip, ispin2)) / (
m_two * e_field)
693 do ispin2 = 1, sys%st%d%nspin
696 lr_elfd(ip, ispin2) = &
697 (lr_elfd(ip, ispin2) - elfd(ip, ispin2)) / (
m_two * e_field)
703 do is = 1, sys%st%d%nspin
704 write(fname,
'(a,i1,2a)')
'lr_elf-sp', is,
'-',
index2axis(ii)
706 sys%namespace, sys%space, sys%gr, lr_elf(:, is),
unit_one, ierr, pos=sys%ions%pos, atoms=sys%ions%atom)
707 write(fname,
'(a,i1,2a)')
'lr_elf_D-sp', is,
'-',
index2axis(ii)
709 sys%namespace, sys%space, sys%gr, lr_elfd(:, is),
unit_one, ierr, pos=sys%ions%pos, atoms=sys%ions%atom)
721 real(real64) :: alpha(sys%space%dim, sys%space%dim)
722 complex(real64) :: beta(sys%space%dim, sys%space%dim, sys%space%dim)
723 integer :: iunit, idir, ip, ispin2
725 real(real64) :: freq_factor(3)
731 if ((sys%outp%what(option__output__density) .or. &
732 sys%outp%what(option__output__pol_density)) .and. calc_diagonal)
then
734 do ispin2 = 1, sys%st%d%nspin
737 lr_rho2(ip, ispin2) = &
738 -(sys%st%rho(ip, ispin2) - lr_rho(ip, ispin2) &
739 - tmp_rho(ip, ispin2) + gs_rho(ip, ispin2)) / e_field**2
744 do is = 1, sys%st%d%nspin
745 if (sys%outp%what(option__output__density))
then
747 write(fname,
'(a,i1,a)')
'fd2_density-sp', is,
'-y-z'
749 sys%namespace, sys%space, sys%gr, lr_rho2(:, is), fn_unit, ierr, pos=sys%ions%pos, atoms=sys%ions%atom)
752 if (sys%outp%what(option__output__pol_density))
then
754 write(fname,
'(a,i1,a)')
'beta_density-sp', is,
'-x-y-z'
756 sys%namespace, sys%space, sys%gr, -sys%gr%x_t(:, 1) * lr_rho2(:, is), &
757 fn_unit, ierr, pos=sys%ions%pos, atoms=sys%ions%atom)
766 alpha(1:sys%space%dim, 1:sys%space%dim) = (dipole(1:sys%space%dim, 1:sys%space%dim, 1) - &
767 dipole(1:sys%space%dim, 1:sys%space%dim, 2)) / (
m_two * e_field)
771 do idir = 1, sys%space%dim
772 beta(1:sys%space%dim, idir, idir) = &
773 -(dipole(idir, 1:sys%space%dim, 1) + dipole(idir, 1:sys%space%dim, 2) - &
774 m_two * center_dipole(1:sys%space%dim)) / e_field**2
775 beta(idir, 1:sys%space%dim, idir) = beta(1:sys%space%dim, idir, idir)
776 beta(idir, idir, 1:sys%space%dim) = beta(1:sys%space%dim, idir, idir)
779 assert(sys%space%dim == 3)
781 if (calc_diagonal)
then
782 beta(1, 2, 3) = -(diag_dipole(1) - dipole(2, 1, 1) - dipole(3, 1, 1) + center_dipole(1)) / e_field**2
787 beta(2, 3, 1) = beta(1, 2, 3)
788 beta(3, 1, 2) = beta(1, 2, 3)
789 beta(3, 2, 1) = beta(1, 2, 3)
790 beta(1, 3, 2) = beta(1, 2, 3)
791 beta(2, 1, 3) = beta(1, 2, 3)
797 if (sys%st%system_grp%is_root())
then
807 if (sys%outp%what(option__output__density) .or. &
808 sys%outp%what(option__output__pol_density))
then
809 safe_deallocate_a(lr_rho)
810 safe_deallocate_a(lr_rho2)
813 if (sys%outp%what(option__output__elf))
then
814 safe_deallocate_a(lr_elf)
815 safe_deallocate_a(elf)
816 safe_deallocate_a(lr_elfd)
817 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)
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.