45#include "./base/base_uses.f90"
51 CHARACTER(len=*),
PARAMETER,
PRIVATE :: moduleN =
'atom_output'
69 INTEGER,
INTENT(IN) :: zval
70 CHARACTER(len=*),
INTENT(IN) :: info
71 INTEGER,
INTENT(IN) :: iw
73 WRITE (iw,
'(/," ",A,T40,A," [",A,"]",T62,"Atomic number:",T78,I3,/)') &
74 adjustl(trim(info)), trim(
ptable(zval)%name), trim(
ptable(zval)%symbol), zval
89 INTEGER,
INTENT(IN) :: iw
91 CHARACTER(LEN=1),
DIMENSION(0:7),
PARAMETER :: &
92 label = [
"S",
"P",
"D",
"F",
"G",
"H",
"I",
"K"]
94 INTEGER :: j, l, mc, mlc, mlo, mm(0:
lmat), mo
97 WRITE (iw,
'(/,T2,A)')
"Electronic structure"
98 WRITE (iw,
'(T5,A,T71,F10.2)')
"Total number of core electrons", sum(state%core)
99 WRITE (iw,
'(T5,A,T71,F10.2)')
"Total number of valence electrons", sum(state%occ)
100 WRITE (iw,
'(T5,A,T71,F10.2)')
"Total number of electrons", sum(state%occ + state%core)
101 SELECT CASE (state%multiplicity)
103 WRITE (iw,
'(T5,A,T68,A)')
"Multiplicity",
"not specified"
105 WRITE (iw,
'(T5,A,T72,A)')
"Multiplicity",
"high spin"
107 WRITE (iw,
'(T5,A,T73,A)')
"Multiplicity",
"low spin"
109 WRITE (iw,
'(T5,A,T74,A)')
"Multiplicity",
"singlet"
111 WRITE (iw,
'(T5,A,T74,A)')
"Multiplicity",
"doublet"
113 WRITE (iw,
'(T5,A,T74,A)')
"Multiplicity",
"triplet"
115 WRITE (iw,
'(T5,A,T74,A)')
"Multiplicity",
"quartet"
117 WRITE (iw,
'(T5,A,T74,A)')
"Multiplicity",
"quintet"
119 WRITE (iw,
'(T5,A,T75,A)')
"Multiplicity",
"sextet"
121 WRITE (iw,
'(T5,A,T75,A)')
"Multiplicity",
"septet"
129 IF (state%multiplicity == -1)
THEN
130 DO l = 0, max(mlo, mlc)
131 mo = state%maxn_occ(l)
132 IF (sum(state%core(l, :)) == 0)
THEN
133 WRITE (iw,
'(A5,T10,10F6.2)') label(l), (state%occ(l, j), j=1, mo)
136 cpassert(sum(state%occ(l, 1:mc)) == 0)
137 WRITE (iw, advance=
"no", fmt=
'(A5,T9,A1,10F6.2)') label(l),
"[", (state%core(l, j), j=1, mc)
138 WRITE (iw, fmt=
'(A1,F5.2,10F6.2)')
"]", (state%occ(l, j), j=mc + 1, mc + mo)
142 WRITE (iw,
'(T5,A)')
"Alpha Electrons"
143 DO l = 0, max(mlo, mlc)
144 mo = state%maxn_occ(l)
145 IF (sum(state%core(l, :)) == 0)
THEN
146 WRITE (iw,
'(A5,T10,10F6.2)') label(l), (state%occa(l, j), j=1, mo)
149 WRITE (iw, advance=
"no", fmt=
'(A5,T9,A1,10F6.2)') label(l),
"[", (0.5_dp*state%core(l, j), j=1, mc)
150 WRITE (iw, fmt=
'(A1,F5.2,10F6.2)')
"]", (state%occa(l, j), j=1, mo)
153 WRITE (iw,
'(T5,A)')
"Beta Electrons"
154 DO l = 0, max(mlo, mlc)
155 mo = state%maxn_occ(l)
156 IF (sum(state%core(l, :)) == 0)
THEN
157 WRITE (iw,
'(A5,T10,10F6.2)') label(l), (state%occb(l, j), j=1, mo)
160 WRITE (iw, advance=
"no", fmt=
'(A5,T9,A1,10F6.2)') label(l),
"[", (0.5_dp*state%core(l, j), j=1, mc)
161 WRITE (iw, fmt=
'(A1,F5.2,10F6.2)')
"]", (state%occb(l, j), j=1, mo)
181 INTEGER,
INTENT(IN) :: iw
184 REAL(kind=
dp) :: drho
186 WRITE (iw,
'(/,A,T36,A,T61,F20.12)')
" Energy components [Hartree]", &
187 " Total Energy ::",
atom%energy%etot
188 WRITE (iw,
'(T36,A,T61,F20.12)')
" Band Energy ::",
atom%energy%eband
189 WRITE (iw,
'(T36,A,T61,F20.12)')
" Kinetic Energy ::",
atom%energy%ekin
190 WRITE (iw,
'(T36,A,T61,F20.12)')
"Potential Energy ::",
atom%energy%epot
191 IF (
atom%energy%ekin /= 0.0_dp)
THEN
192 WRITE (iw,
'(T36,A,T61,F20.12)')
" Virial (-V/T) ::", -
atom%energy%epot/
atom%energy%ekin
194 WRITE (iw,
'(T36,A,T61,F20.12)')
" Core Energy ::",
atom%energy%ecore
195 IF (
atom%energy%exc /= 0._dp)
THEN
196 WRITE (iw,
'(T36,A,T61,F20.12)')
" XC Energy ::",
atom%energy%exc
198 WRITE (iw,
'(T36,A,T61,F20.12)')
" Coulomb Energy ::",
atom%energy%ecoulomb
199 IF (
atom%energy%eexchange /= 0._dp)
THEN
200 WRITE (iw,
'(T34,A,T61,F20.12)')
"HF Exchange Energy ::",
atom%energy%eexchange
203 WRITE (iw,
'(T20,A,T61,F20.12)')
" Total Pseudopotential Energy ::",
atom%energy%epseudo
204 WRITE (iw,
'(T20,A,T61,F20.12)')
" Local Pseudopotential Energy ::",
atom%energy%eploc
205 IF (
atom%energy%elsd /= 0._dp)
THEN
206 WRITE (iw,
'(T20,A,T61,F20.12)')
" Local Spin-potential Energy ::",
atom%energy%elsd
208 WRITE (iw,
'(T20,A,T61,F20.12)')
" Nonlocal Pseudopotential Energy ::",
atom%energy%epnl
210 IF (
atom%potential%confinement)
THEN
211 WRITE (iw,
'(T36,A,T61,F20.12)')
" Confinement ::",
atom%energy%econfinement
214 IF (
atom%state%multiplicity == -1)
THEN
215 WRITE (iw,
'(/,A,T20,A,T30,A,T36,A,T49,A,T71,A,/)')
" Orbital energies", &
216 "State",
"L",
"Occupation",
"Energy[a.u.]",
"Energy[eV]"
217 DO l = 0,
atom%state%maxl_calc
218 n =
atom%state%maxn_calc(l)
220 WRITE (iw,
'(T23,I2,T30,I1,T36,F10.3,T46,F15.6,T66,F15.6)') &
221 i, l,
atom%state%occupation(l, i),
atom%orbitals%ener(i, l),
atom%orbitals%ener(i, l)*
evolt
223 IF (n > 0)
WRITE (iw, *)
226 WRITE (iw,
'(/,A,T20,A,T30,A,T36,A,T42,A,T55,A,T71,A,/)')
" Orbital energies", &
227 "State",
"Spin",
"L",
"Occupation",
"Energy[a.u.]",
"Energy[eV]"
228 DO l = 0,
atom%state%maxl_calc
229 n =
atom%state%maxn_calc(l)
231 WRITE (iw,
'(T23,I2,T29,A,T36,I1,T42,F10.3,T52,F15.6,T68,F13.6)') &
232 i,
"alpha", l,
atom%state%occa(l, i),
atom%orbitals%enera(i, l),
atom%orbitals%enera(i, l)*
evolt
235 WRITE (iw,
'(T23,I2,T29,A,T36,I1,T42,F10.3,T52,F15.6,T68,F13.6)') &
236 i,
" beta", l,
atom%state%occb(l, i),
atom%orbitals%enerb(i, l),
atom%orbitals%enerb(i, l)*
evolt
238 IF (n > 0)
WRITE (iw, *)
243 WRITE (iw,
'(/,A,T66,F15.6)')
" Total Electron Density at R=0: ", drho
256 INTEGER,
INTENT(IN) :: iter
257 REAL(
dp),
INTENT(IN) :: deps
259 INTEGER,
INTENT(IN) :: iw
262 WRITE (iw,
'(/," ",79("*"),/,T33,"Integral",T48,"Integral",/,T3,A,T16,A,T33,A,T46,A,T69,A/," ",79("*"))') &
263 "Iteration",
"Convergence",
"rho diff.",
"rho*v_xc[au]",
"Energy[au]"
265 WRITE (iw,
'(T3,I9,T15,G13.6,T30,G13.6,T46,G13.6,T61,F20.12)') iter, deps,
atom%rho_diff_integral, &
280 INTEGER,
INTENT(IN) :: iter
281 REAL(
dp),
INTENT(IN) :: deps, etot
282 INTEGER,
INTENT(IN) :: iw
285 WRITE (iw,
'(/," ",79("*"),/,T19,A,T38,A,T70,A,/," ",79("*"))') &
286 "Iteration",
"Convergence",
"Energy [au]"
288 WRITE (iw,
'(T20,i8,T34,G14.6,T61,F20.12)') iter, deps, etot
302 INTEGER,
INTENT(IN) :: iw
303 CHARACTER(len=*) :: title
307 WRITE (iw,
'(/,A)') trim(title)
311 WRITE (iw,
'(/," ",21("*"),A,22("*"))')
" Geometrical Gaussian Type Orbitals "
312 WRITE (iw,
'(A,F15.8,T41,A,F15.8)')
" Initial exponent: ",
atom_basis%aval, &
315 WRITE (iw,
'(/," ",21("*"),A,21("*"))')
" Uncontracted Gaussian Type Orbitals "
321 WRITE (iw,
'(/,T2,A,(T30,I5,T51,F30.8))') &
324 WRITE (iw,
'(/,T2,A,(T30,I5,T51,F30.8))') &
327 WRITE (iw,
'(/,T2,A,(T30,I5,T51,F30.8))') &
330 WRITE (iw,
'(/,T2,A,(T30,I5,T51,F30.8))') &
333 WRITE (iw,
'(/,T2,A,(T30,I5,T51,F30.8))') &
338 WRITE (iw,
'(" ",79("*"))')
340 WRITE (iw,
'(/," ",22("*"),A,22("*"))')
" Contracted Gaussian Type Orbitals "
343 IF (l == 0)
WRITE (iw,
'(A)')
" s Functions"
344 IF (l == 1)
WRITE (iw,
'(A)')
" p Functions"
345 IF (l == 2)
WRITE (iw,
'(A)')
" d Functions"
346 IF (l == 3)
WRITE (iw,
'(A)')
" f Functions"
347 IF (l >= 3)
WRITE (iw,
'(A)')
" x Functions"
349 WRITE (iw,
'(F15.6,5(T21,6F10.6,/))') &
354 WRITE (iw,
'(" ",79("*"))')
356 WRITE (iw,
'(/," ",28("*"),A,29("*"))')
" Slater Type Orbitals "
373 WRITE (iw,
'(" ",79("*"))')
375 cpabort(
"Numerical basis not yet implemented for atom_print_basis")
377 cpabort(
"Unknown basis type for atom_print_basis")
395 REAL(kind=
dp),
DIMENSION(:, :, 0:),
OPTIONAL :: wfn
397 INTEGER :: i, im, iw, l
398 REAL(kind=
dp) :: expzet, prefac, zeta
400 CALL open_file(file_name=
"OPT_BASIS", file_status=
"UNKNOWN", file_action=
"WRITE", unit_number=iw)
404 WRITE (iw,
'(/," ",21("*"),A,22("*"))')
" Geometrical Gaussian Type Orbitals "
405 WRITE (iw,
'(A,F15.8,T41,A,F15.8)')
" Initial exponent: ",
atom_basis%aval, &
408 WRITE (iw,
'(T3,A)')
"BASIS_TYPE GAUSSIAN"
414 WRITE (iw,
'(T3,A,(T15,F20.8,:," \"))') &
417 WRITE (iw,
'(T3,A,(T15,F20.8,:," \"))') &
420 WRITE (iw,
'(T3,A,(T15,F20.8,:," \"))') &
423 WRITE (iw,
'(T3,A,(T15,F20.8,:," \"))') &
426 WRITE (iw,
'(T3,A,(T15,F20.8,:," \"))') &
432 CALL cp_abort(__location__, &
433 "Contracted Gaussian-type basis not yet implemented "// &
434 "for atom_print_basis_file")
436 WRITE (iw,
'(T3,A)')
"BASIS_TYPE SLATER"
441 WRITE (iw,
'(T3,A,(T15,F20.8,:," \"))') &
443 WRITE (iw,
'(T3,A,60I3)') &
446 WRITE (iw,
'(T3,A,(T15,F20.8,:," \"))') &
448 WRITE (iw,
'(T3,A,60I3)') &
451 WRITE (iw,
'(T3,A,(T15,F20.8,:," \"))') &
453 WRITE (iw,
'(T3,A,60I3)') &
456 WRITE (iw,
'(T3,A,(T15,F20.8,:," \"))') &
458 WRITE (iw,
'(T3,A,60I3)') &
461 WRITE (iw,
'(T3,A,(T15,F20.8,:," \"))') &
463 WRITE (iw,
'(T3,A,60I3)') &
469 cpabort(
"Numerical basis not yet implemented for atom_print_basis_file")
471 cpabort(
"Unknown basis type for atom_print_basis_file")
474 IF (
PRESENT(wfn))
THEN
479 WRITE (iw,
'(/,T3,A)')
"ORBITAL COEFFICENTS (Quickstep normalization)"
480 im = min(6,
SIZE(wfn, 2))
483 WRITE (iw,
'(T3,A,I3)')
"L Quantum Number:", l
485 expzet = 0.25_dp*real(2*l + 3,
dp)
486 prefac = sqrt(
rootpi/2._dp**(l + 2)*
dfac(2*l + 1))
489 WRITE (iw,
'(T5,F14.8,2x,6F12.8)')
atom_basis%am(i, l), wfn(i, 1:im, l)*prefac/zeta
515 INTEGER,
INTENT(IN) :: iw
517 CHARACTER(len=160) :: shortform
518 CHARACTER(len=:),
ALLOCATABLE :: reference
519 INTEGER :: ifun, il, meth, myfun, reltyp
523 NULLIFY (xc_fun, xc_fun_section, xc_section)
525 meth =
atom%method_type
527 xc_section =>
atom%xc_section
531 cpabort(
"Unknown method for atom_print_method")
546 cpabort(
"Unknown method for atom_print_method")
548 IF (iw > 0)
WRITE (iw, fmt=
"(/,' METHOD | Restricted Kohn-Sham Calculation')")
550 IF (iw > 0)
WRITE (iw, fmt=
"(/,' METHOD | Unrestricted Kohn-Sham Calculation')")
552 IF (iw > 0)
WRITE (iw, fmt=
"(/,' METHOD | Restricted Hartree-Fock Calculation')")
554 IF (iw > 0)
WRITE (iw, fmt=
"(/,' METHOD | Unrestricted Hartree-Fock Calculation')")
556 IF (iw > 0)
WRITE (iw, fmt=
"(/,' METHOD | Restricted Open-Shell Kohn-Sham Calculation')")
560 IF (
atom%do_zmp)
THEN
561 IF (iw > 0)
WRITE (iw, fmt=
"(' ZMP | Method on atomic radial density')")
562 IF (iw > 0)
WRITE (iw, fmt=
"(' ZMP | Lambda : ',F5.1)")
atom%lambda
563 IF (iw > 0)
WRITE (iw, fmt=
"(' ZMP | Reading external density : ',A20)")
atom%ext_file
565 IF (iw > 0)
WRITE (iw, fmt=
"(' ZMP | The file is in the form of a density matrix')")
567 IF (iw > 0)
WRITE (iw, fmt=
"(' ZMP | The file is in the form of a linear density')")
569 IF (
atom%doread)
THEN
570 IF (iw > 0)
WRITE (iw, fmt=
"(' ZMP | Restarting calculation from ',A20,' file if present')")
atom%zmp_restart_file
572 ELSE IF (
atom%read_vxc)
THEN
573 IF (iw > 0)
WRITE (iw, fmt=
"(' ZMP | Calculating density from external V_xc')")
574 IF (iw > 0)
WRITE (iw, fmt=
"(' ZMP | Reading external v_xc file : ',A20)")
atom%ext_vxc_file
577 IF (
atom%pp_calc)
THEN
578 IF (iw > 0)
WRITE (iw, fmt=
"(' METHOD | Nonrelativistic Calculation')")
580 reltyp =
atom%relativistic
584 cpabort(
"Unknown relativistic type for atom_print_method")
586 IF (iw > 0)
WRITE (iw, fmt=
"(' METHOD | Nonrelativistic Calculation')")
588 IF (iw > 0)
WRITE (iw, fmt=
"(' METHOD | Relativistic Calculation using ZORA(MP)')")
590 IF (iw > 0)
WRITE (iw, fmt=
"(' METHOD | Relativistic Calculation using scaled ZORA(MP)')")
592 IF (iw > 0)
WRITE (iw, fmt=
"(' METHOD | Relativistic Calculation using Douglas-Kroll 0th order')")
593 IF (iw > 0)
WRITE (iw, fmt=
"(' METHOD | Relativistic Calculation using kietic energy scaling')")
595 IF (iw > 0)
WRITE (iw, fmt=
"(' METHOD | Relativistic Calculation using Douglas-Kroll 1st order')")
596 IF (iw > 0)
WRITE (iw, fmt=
"(' METHOD | Relativistic Calculation using Foldy-Wouthuysen transformation')")
598 IF (iw > 0)
WRITE (iw, fmt=
"(' METHOD | Relativistic Calculation using Douglas-Kroll 2nd order')")
600 IF (iw > 0)
WRITE (iw, fmt=
"(' METHOD | Relativistic Calculation using Douglas-Kroll 3rd order')")
613 IF (.NOT.
ASSOCIATED(xc_fun))
EXIT
615 ALLOCATE (
CHARACTER(LEN=libxc_get_reference_length(xc_fun, lsd)) :: reference)
617 ALLOCATE (
CHARACTER(LEN=20*default_string_length) :: reference)
620 WRITE (iw, fmt=
"(' FUNCTIONAL| ',a,':')") &
621 trim(xc_fun%section%name)
622 DO il = 1, len_trim(reference), 67
623 WRITE (iw, fmt=
"(' FUNCTIONAL| ',a67)") reference(il:)
625 DEALLOCATE (reference)
629 IF (iw > 0)
WRITE (iw, fmt=
"(' FUNCTIONAL| NO EXCHANGE-CORRELATION FUNCTIONAL USED.')")
648 INTEGER,
INTENT(IN) :: iw
650 CHARACTER(len=60) :: pline
651 INTEGER :: i, j, k, l
653 SELECT CASE (potential%ppot_type)
655 WRITE (iw,
'(/," ",28("*"),A,27("*"))')
" All Electron Potential "
657 WRITE (iw,
'(/," ",29("*"),A,29("*"))')
" GTH Pseudopotential "
658 WRITE (iw,
'(T10,A,T76,F5.1)')
" Core Charge ", potential%gth_pot%zion
659 WRITE (iw,
'(T10,A,T66,F15.6)')
" Rc ", potential%gth_pot%rc
660 WRITE (pline,
'(5F12.6)') (potential%gth_pot%cl(i), i=1, potential%gth_pot%ncl)
661 WRITE (iw,
'(T10,A,T21,A60)')
" C1 C2 ... ", adjustr(pline)
662 IF (potential%gth_pot%lpotextended)
THEN
663 DO k = 1, potential%gth_pot%nexp_lpot
664 WRITE (iw,
'(T10,A,F10.6,T38,A,4F10.6)')
" LPot: rc=", potential%gth_pot%alpha_lpot(k), &
665 "CX=", (potential%gth_pot%cval_lpot(i, k), i=1, potential%gth_pot%nct_lpot(k))
668 IF (potential%gth_pot%nlcc)
THEN
669 DO k = 1, potential%gth_pot%nexp_nlcc
670 WRITE (iw,
'(T10,A,F10.6,T38,A,4F10.6)')
" LSDPot: rc=", potential%gth_pot%alpha_nlcc(k), &
671 "CX=", (potential%gth_pot%cval_nlcc(i, k)*4.0_dp*
pi, i=1, potential%gth_pot%nct_nlcc(k))
674 IF (potential%gth_pot%lsdpot)
THEN
675 DO k = 1, potential%gth_pot%nexp_lsd
676 WRITE (iw,
'(T10,A,F10.6,T38,A,4F10.6)')
" LSDPot: rc=", potential%gth_pot%alpha_lsd(k), &
677 "CX=", (potential%gth_pot%cval_lsd(i, k), i=1, potential%gth_pot%nct_lsd(k))
681 IF (potential%gth_pot%nl(l) > 0)
THEN
682 WRITE (iw,
'(T10,A,T76,I5)')
" Angular momentum ", l
683 WRITE (iw,
'(T10,A,T66,F15.6)')
" Rcnl ", potential%gth_pot%rcnl(l)
684 WRITE (iw,
'(T10,A,T76,I5)')
" Nl ", potential%gth_pot%nl(l)
685 WRITE (pline,
'(5F12.6)') (potential%gth_pot%hnl(1, j, l), j=1, potential%gth_pot%nl(l))
686 WRITE (iw,
'(T10,A,T21,A60)')
" Hnl ", adjustr(pline)
687 DO i = 2, potential%gth_pot%nl(l)
688 WRITE (pline,
'(T21,5F12.6)') (potential%gth_pot%hnl(i, j, l), j=i, potential%gth_pot%nl(l))
689 WRITE (iw,
'(T21,A60)') adjustr(pline)
693 IF (potential%gth_pot%soc)
THEN
694 WRITE (iw,
'(T10,A)')
" Spin-orbit coupling parameters "
696 IF (potential%gth_pot%nl(l) > 0)
THEN
697 WRITE (iw,
'(T10,A,T76,I5)')
" Angular momentum ", l
698 WRITE (iw,
'(T10,A,T66,F15.6)')
" Rcnl ", potential%gth_pot%rcnl(l)
699 WRITE (iw,
'(T10,A,T76,I5)')
" Nl ", potential%gth_pot%nl(l)
700 WRITE (pline,
'(5F12.6)') (potential%gth_pot%knl(1, j, l), j=1, potential%gth_pot%nl(l))
701 WRITE (iw,
'(T10,A,T21,A60)')
" Hnl ", adjustr(pline)
702 DO i = 2, potential%gth_pot%nl(l)
703 WRITE (pline,
'(T21,5F12.6)') (potential%gth_pot%knl(i, j, l), j=i, potential%gth_pot%nl(l))
704 WRITE (iw,
'(T21,A60)') adjustr(pline)
710 WRITE (iw,
'(/," ",29("*"),A,29("*"))')
" UPF Pseudopotential "
711 DO k = 1, potential%upf_pot%maxinfo
712 WRITE (iw,
'(A80)') potential%upf_pot%info(k)
715 WRITE (iw,
'(/," ",29("*"),A,29("*"))')
" SGP Pseudopotential "
716 WRITE (iw,
'(T10,A,T76,F5.1)')
" Core Charge ", potential%sgp_pot%zion
718 WRITE (iw,
'(/," ",26("*"),A,27("*"))')
" Effective Core Potential "
719 WRITE (iw,
'(T10,A,T76,F5.1)')
" Core Charge ", potential%ecp_pot%zion
720 DO k = 1, potential%ecp_pot%nloc
722 WRITE (iw,
'(T10,A,T40,I3,T49,2F16.8)')
" Local Potential ", potential%ecp_pot%nrloc(k), &
723 potential%ecp_pot%bloc(k), potential%ecp_pot%aloc(k)
725 WRITE (iw,
'(T40,I3,T49,2F16.8)') potential%ecp_pot%nrloc(k), &
726 potential%ecp_pot%bloc(k), potential%ecp_pot%aloc(k)
729 DO l = 0, potential%ecp_pot%lmax
730 WRITE (iw,
'(T10,A,I3)')
" ECP l-value ", l
731 DO k = 1, potential%ecp_pot%npot(l)
732 WRITE (iw,
'(T40,I3,T49,2F16.8)') potential%ecp_pot%nrpot(k, l), &
733 potential%ecp_pot%bpot(k, l), potential%ecp_pot%apot(k, l)
737 cpabort(
"Unknown pseudopotential type for atom_print_potential")
739 IF (potential%confinement)
THEN
740 IF (potential%conf_type ==
poly_conf)
THEN
741 WRITE (iw,
'(/,T10,A,T51,F12.6," * (R /",F6.2,")**",F6.2)') &
742 " Confinement Potential ", potential%acon, potential%rcon, potential%scon
744 WRITE (iw,
'(/,T10,A)')
" Confinement Potential s*F[(r-ron)/w] "
745 WRITE (iw,
'(T57,A,F12.6,A)')
"s =", potential%acon,
" Ha"
746 WRITE (iw,
'(T57,A,F12.6,A)')
"w =", potential%rcon,
" Bohr"
747 WRITE (iw,
'(T57,A,F12.6,A)')
"ron =", potential%scon,
" Bohr"
749 cpabort(
"Unknown potential confinement type")
752 WRITE (iw,
'(/,T10,A)')
" No Confinement Potential is applied "
754 WRITE (iw,
'(" ",79("*"))')
770 INTEGER,
INTENT(IN),
OPTIONAL :: iunit
771 REAL(kind=
dp),
INTENT(IN),
OPTIONAL :: fopt
773 INTEGER :: i, iw, j, k, n
775 IF (
PRESENT(iunit))
THEN
778 CALL open_file(file_name=
"GTH-PARAMETER", file_status=
"UNKNOWN", file_action=
"WRITE", unit_number=iw)
780 IF (
PRESENT(fopt))
THEN
781 WRITE (iw,
'(A,F30.8)')
"# "//trim(adjustl(gthpot%symbol)), fopt
783 WRITE (iw,
'(A)') trim(adjustl(gthpot%symbol))//
" "//trim(adjustl(gthpot%pname))
785 WRITE (iw,
'(4I5)') gthpot%econf(0:3)
786 WRITE (iw,
'(F20.14,I8,5F20.14)') gthpot%rc, gthpot%ncl, (gthpot%cl(i), i=1, gthpot%ncl)
787 IF (gthpot%lpotextended)
THEN
788 WRITE (iw,
'(A,I5)')
" LPOT", gthpot%nexp_lpot
789 DO i = 1, gthpot%nexp_lpot
790 WRITE (iw,
'(F20.14,I8,5F20.14)') gthpot%alpha_lpot(i), gthpot%nct_lpot(i), &
791 (gthpot%cval_lpot(j, i), j=1, gthpot%nct_lpot(i))
794 IF (gthpot%lsdpot)
THEN
795 WRITE (iw,
'(A,I5)')
" LSD ", gthpot%nexp_lsd
796 DO i = 1, gthpot%nexp_lsd
797 WRITE (iw,
'(F20.14,I8,5F20.14)') gthpot%alpha_lsd(i), gthpot%nct_lsd(i), &
798 (gthpot%cval_lsd(j, i), j=1, gthpot%nct_lsd(i))
801 IF (gthpot%nlcc)
THEN
802 WRITE (iw,
'(A,I5)')
" NLCC ", gthpot%nexp_nlcc
803 DO i = 1, gthpot%nexp_nlcc
804 WRITE (iw,
'(F20.14,I8,5F20.14)') gthpot%alpha_nlcc(i), gthpot%nct_nlcc(i), &
805 (gthpot%cval_nlcc(j, i)*4.0_dp*
pi, j=1, gthpot%nct_nlcc(i))
810 IF (gthpot%nl(i) > 0)
THEN
817 WRITE (iw,
'(F20.14,I8,5F20.14)') gthpot%rcnl(i), gthpot%nl(i), (gthpot%hnl(1, k, i), k=1, gthpot%nl(i))
818 SELECT CASE (gthpot%nl(i))
820 WRITE (iw,
'(T49,F20.14)') gthpot%hnl(2, 2, i)
822 WRITE (iw,
'(T49,2F20.14)') gthpot%hnl(2, 2, i), gthpot%hnl(2, 3, i)
823 WRITE (iw,
'(T69,F20.14)') gthpot%hnl(3, 3, i)
825 DO j = 2, gthpot%nl(i)
826 WRITE (iw,
'(T29,5F20.14)') (gthpot%hnl(j, k, i), k=j, gthpot%nl(i))
832 WRITE (iw,
'(T29,5F20.14)') (gthpot%hnl(1, k, i), k=1, gthpot%nl(i))
833 SELECT CASE (gthpot%nl(i))
835 WRITE (iw,
'(T49,F20.14)') gthpot%knl(2, 2, i)
837 WRITE (iw,
'(T49,2F20.14)') gthpot%knl(2, 2, i), gthpot%knl(2, 3, i)
838 WRITE (iw,
'(T69,F20.14)') gthpot%knl(3, 3, i)
840 DO j = 2, gthpot%nl(i)
841 WRITE (iw,
'(T29,5F20.14)') (gthpot%knl(j, k, i), k=j, gthpot%nl(i))
846 IF (.NOT.
PRESENT(iunit))
CALL close_file(unit_number=iw)
860 INTEGER,
INTENT(IN) :: iw
861 LOGICAL,
INTENT(IN),
OPTIONAL ::
xmgrace
863 CHARACTER(LEN=40) :: fnbody
867 SELECT CASE (
atom%method_type)
869 cpabort(
"Unknown method type for atom_print_orbitals")
871 CALL atom_print_orbitals_helper(
atom,
atom%orbitals%wfn,
"", iw)
873 CALL atom_print_orbitals_helper(
atom,
atom%orbitals%wfna,
"Alpha", iw)
874 CALL atom_print_orbitals_helper(
atom,
atom%orbitals%wfnb,
"Beta", iw)
876 CALL atom_print_orbitals_helper(
atom,
atom%orbitals%wfn,
"", iw)
878 CALL atom_print_orbitals_helper(
atom,
atom%orbitals%wfna,
"Alpha", iw)
879 CALL atom_print_orbitals_helper(
atom,
atom%orbitals%wfnb,
"Beta", iw)
881 cpabort(
"ROHF not yet implemented for atom_print_orbitals")
886 IF (
graph .AND. iw > 0)
THEN
888 fnbody = trim(
ptable(z)%symbol)//
"_PPorbital"
889 SELECT CASE (
atom%method_type)
891 cpabort(
"Unknown method type for atom_print_orbitals")
893 CALL atom_orbitals_grace(
atom,
atom%orbitals%wfn, fnbody)
895 CALL atom_orbitals_grace(
atom,
atom%orbitals%wfna, trim(fnbody)//
"alpha")
896 CALL atom_orbitals_grace(
atom,
atom%orbitals%wfnb, trim(fnbody)//
"beta")
898 CALL atom_orbitals_grace(
atom,
atom%orbitals%wfn, fnbody)
900 CALL atom_orbitals_grace(
atom,
atom%orbitals%wfna, trim(fnbody)//
"alpha")
901 CALL atom_orbitals_grace(
atom,
atom%orbitals%wfnb, trim(fnbody)//
"beta")
903 cpabort(
"ROHF not yet implemented for atom_print_orbitals")
918 SUBROUTINE atom_print_orbitals_helper(atom, wfn, description, iw)
920 REAL(kind=
dp),
DIMENSION(:, :, 0:),
INTENT(INOUT) :: wfn
921 CHARACTER(len=*),
INTENT(IN) :: description
922 INTEGER,
INTENT(IN) :: iw
924 INTEGER :: b, l, maxl, nb, nv, v
926 WRITE (iw,
'(/,A,A,A)')
" Atomic orbital expansion coefficients [", description,
"]"
928 maxl =
atom%state%maxl_calc
931 nb =
atom%basis%nbas(l)
932 nv =
atom%state%maxn_calc(l)
933 IF (nb > 0 .AND. nv > 0)
THEN
934 nv = min(nv,
SIZE(wfn, 2))
936 WRITE (iw,
'(/," ORBITAL L = ",I1," State = ",I3)') l, v
938 WRITE (iw,
'(" ",ES23.15)') wfn(b, v, l)
943 END SUBROUTINE atom_print_orbitals_helper
953 SUBROUTINE atom_orbitals_grace(atom, wfn, fnbody)
955 REAL(kind=
dp),
DIMENSION(:, :, 0:),
INTENT(INOUT) :: wfn
956 CHARACTER(len=*),
INTENT(IN) :: fnbody
958 CHARACTER(LEN=1),
DIMENSION(0:8) :: lname
959 CHARACTER(LEN=1),
DIMENSION(1:9) :: wnum
960 CHARACTER(LEN=40) :: fname, legend
961 INTEGER :: b, i, iw, l, m, maxl, nb, nv, v
962 REAL(kind=
dp),
ALLOCATABLE,
DIMENSION(:, :) :: gdata, wfnr
963 REAL(kind=
dp),
DIMENSION(4) :: world_coord
965 lname = [
's',
'p',
'd',
'f',
'g',
'h',
'j',
'k',
'l']
966 wnum = [
'1',
'2',
'3',
'4',
'5',
'6',
'7',
'8',
'9']
967 m =
atom%basis%grid%nr
968 maxl =
atom%state%maxl_calc
970 fname = trim(fnbody)//
"_"//lname(l)//
".agr"
971 nb =
atom%basis%nbas(l)
972 nv =
atom%state%maxn_calc(l)
973 IF (nb > 0 .AND. nv > 0)
THEN
974 CALL open_file(file_name=fname, file_status=
"UNKNOWN", file_action=
"WRITE", unit_number=iw)
975 nv = min(nv,
SIZE(wfn, 2))
976 ALLOCATE (wfnr(m, nv))
980 wfnr(:, v) = wfnr(:, v) + wfn(b, v, l)*
atom%basis%bf(:, b, l)
983 world_coord(1) = 0.0_dp
984 world_coord(2) = minval(wfnr) - 0.5_dp
985 world_coord(3) = 15.0_dp
986 world_coord(4) = maxval(wfnr) + 0.5_dp
991 title=
"PP Radial Wavefunction", &
992 subtitle=lname(l)//
"-Quantum Number", &
993 xlabel=
"Radius [Bohr]", &
996 legend =
"WFN "//wnum(i + 1)
999 ALLOCATE (gdata(m, 2))
1000 gdata(1:m, 1) =
atom%basis%grid%rad(1:m)
1002 gdata(1:m, 2) = wfnr(1:m, i + 1)
1005 DEALLOCATE (gdata, wfnr)
1009 END SUBROUTINE atom_orbitals_grace
program graph
Program to Map on grid the hills spawned during a metadynamics run.
Routines that print various information about an atomic kind.
subroutine, public atom_print_energies(atom, iw)
Print energy components.
subroutine, public atom_print_orbitals(atom, iw, xmgrace)
Print atomic orbitals.
subroutine, public atom_print_basis(atom_basis, iw, title)
Print atomic basis set.
subroutine, public atom_print_iteration(iter, deps, etot, iw)
Print convergence information.
subroutine, public atom_print_basis_file(atom_basis, wfn)
Print the optimized atomic basis set into a file.
subroutine, public atom_print_state(state, iw)
Print information about electronic state.
subroutine, public atom_print_zmp_iteration(iter, deps, atom, iw)
Printing of the atomic iterations when ZMP is active.
subroutine, public atom_print_method(atom, iw)
Print information about the electronic structure method in use.
subroutine, public atom_write_pseudo_param(gthpot, iunit, fopt)
Print GTH pseudo-potential parameters.
subroutine, public atom_print_potential(potential, iw)
Print information about the pseudo-potential.
subroutine, public atom_print_info(zval, info, iw)
Print an information string related to the atomic kind.
Define the atom type and its sub types.
integer, parameter, public num_basis
integer, parameter, public cgto_basis
integer, parameter, public gto_basis
integer, parameter, public sto_basis
integer, parameter, public lmat
Some basic routines for atomic calculations.
pure integer function, dimension(0:lmat), public get_maxn_occ(occupation)
Return the maximum principal quantum number of occupied orbitals.
subroutine, public get_rho0(atom, rho0)
Calculate the total electron density at R=0.
pure integer function, public get_maxl_occ(occupation)
Return the maximum orbital quantum number of occupied orbitals.
Utility routines to open and close files. Tracking of preconnections.
subroutine, public open_file(file_name, file_status, file_form, file_action, file_position, file_pad, unit_number, debug, skip_get_unit_number, file_access)
Opens the requested file using a free unit number.
subroutine, public close_file(unit_number, file_status, keep_preconnection)
Close an open file given by its logical unit number. Optionally, keep the file and unit preconnected.
Defines the basic variable types.
integer, parameter, public dp
integer, parameter, public default_string_length
Definition of mathematical constants and functions.
real(kind=dp), parameter, public pi
real(kind=dp), dimension(-1:2 *maxfac+1), parameter, public dfac
real(kind=dp), parameter, public rootpi
Periodic Table related data definitions.
type(atom), dimension(0:nelem), public ptable
Definition of physical constants:
real(kind=dp), parameter, public evolt
subroutine, public xc_functional_get_info(functional, lsd, reference, shortform, needs, max_deriv, print_warn)
get the information about the given functional
calculates a functional from libxc and its derivatives
logical function, public libxc_check_existence_in_libxc(libxc_params)
This function checks whether a functional name belongs to LibXC.
integer function, public libxc_get_reference_length(libxc_params, lsd)
This function returns the maximum length of the reference string for a given LibXC functional.
Routines to facilitate writing XMGRACE files.
subroutine, public xm_graph_data(iw, gnum, gdata)
...
subroutine, public xm_write_frameport(iw)
...
subroutine, public xm_write_frame(iw, wcoord, title, subtitle, xlabel, ylabel)
...
subroutine, public xm_write_defaults(iw)
...
subroutine, public xm_graph_info(iw, gnum, linewidth, legend)
...
Provides all information about a basis set.
Provides all information about a pseudopotential.
Provides all information on states and occupation.
Provides all information about an atomic kind.