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) &
196 WRITE (iw,
'(T36,A,T61,F20.12)')
" XC Energy ::",
atom%energy%exc
197 WRITE (iw,
'(T36,A,T61,F20.12)')
" Coulomb Energy ::",
atom%energy%ecoulomb
198 IF (
atom%energy%eexchange /= 0._dp) &
199 WRITE (iw,
'(T34,A,T61,F20.12)')
"HF Exchange Energy ::",
atom%energy%eexchange
201 WRITE (iw,
'(T20,A,T61,F20.12)')
" Total Pseudopotential Energy ::",
atom%energy%epseudo
202 WRITE (iw,
'(T20,A,T61,F20.12)')
" Local Pseudopotential Energy ::",
atom%energy%eploc
203 IF (
atom%energy%elsd /= 0._dp) &
204 WRITE (iw,
'(T20,A,T61,F20.12)')
" Local Spin-potential Energy ::",
atom%energy%elsd
205 WRITE (iw,
'(T20,A,T61,F20.12)')
" Nonlocal Pseudopotential Energy ::",
atom%energy%epnl
207 IF (
atom%potential%confinement)
THEN
208 WRITE (iw,
'(T36,A,T61,F20.12)')
" Confinement ::",
atom%energy%econfinement
211 IF (
atom%state%multiplicity == -1)
THEN
212 WRITE (iw,
'(/,A,T20,A,T30,A,T36,A,T49,A,T71,A,/)')
" Orbital energies", &
213 "State",
"L",
"Occupation",
"Energy[a.u.]",
"Energy[eV]"
214 DO l = 0,
atom%state%maxl_calc
215 n =
atom%state%maxn_calc(l)
217 WRITE (iw,
'(T23,I2,T30,I1,T36,F10.3,T46,F15.6,T66,F15.6)') &
218 i, l,
atom%state%occupation(l, i),
atom%orbitals%ener(i, l),
atom%orbitals%ener(i, l)*
evolt
220 IF (n > 0)
WRITE (iw, *)
223 WRITE (iw,
'(/,A,T20,A,T30,A,T36,A,T42,A,T55,A,T71,A,/)')
" Orbital energies", &
224 "State",
"Spin",
"L",
"Occupation",
"Energy[a.u.]",
"Energy[eV]"
225 DO l = 0,
atom%state%maxl_calc
226 n =
atom%state%maxn_calc(l)
228 WRITE (iw,
'(T23,I2,T29,A,T36,I1,T42,F10.3,T52,F15.6,T68,F13.6)') &
229 i,
"alpha", l,
atom%state%occa(l, i),
atom%orbitals%enera(i, l),
atom%orbitals%enera(i, l)*
evolt
232 WRITE (iw,
'(T23,I2,T29,A,T36,I1,T42,F10.3,T52,F15.6,T68,F13.6)') &
233 i,
" beta", l,
atom%state%occb(l, i),
atom%orbitals%enerb(i, l),
atom%orbitals%enerb(i, l)*
evolt
235 IF (n > 0)
WRITE (iw, *)
240 WRITE (iw,
'(/,A,T66,F15.6)')
" Total Electron Density at R=0: ", drho
253 INTEGER,
INTENT(IN) :: iter
254 REAL(
dp),
INTENT(IN) :: deps
256 INTEGER,
INTENT(IN) :: iw
259 WRITE (iw,
'(/," ",79("*"),/,T33,"Integral",T48,"Integral",/,T3,A,T16,A,T33,A,T46,A,T69,A/," ",79("*"))') &
260 "Iteration",
"Convergence",
"rho diff.",
"rho*v_xc[au]",
"Energy[au]"
262 WRITE (iw,
'(T3,I9,T15,G13.6,T30,G13.6,T46,G13.6,T61,F20.12)') iter, deps,
atom%rho_diff_integral, &
277 INTEGER,
INTENT(IN) :: iter
278 REAL(
dp),
INTENT(IN) :: deps, etot
279 INTEGER,
INTENT(IN) :: iw
282 WRITE (iw,
'(/," ",79("*"),/,T19,A,T38,A,T70,A,/," ",79("*"))') &
283 "Iteration",
"Convergence",
"Energy [au]"
285 WRITE (iw,
'(T20,i8,T34,G14.6,T61,F20.12)') iter, deps, etot
299 INTEGER,
INTENT(IN) :: iw
300 CHARACTER(len=*) :: title
304 WRITE (iw,
'(/,A)') trim(title)
308 WRITE (iw,
'(/," ",21("*"),A,22("*"))')
" Geometrical Gaussian Type Orbitals "
309 WRITE (iw,
'(A,F15.8,T41,A,F15.8)')
" Initial exponent: ",
atom_basis%aval, &
312 WRITE (iw,
'(/," ",21("*"),A,21("*"))')
" Uncontracted Gaussian Type Orbitals "
318 WRITE (iw,
'(/,T2,A,(T30,I5,T51,F30.8))') &
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))') &
335 WRITE (iw,
'(" ",79("*"))')
337 WRITE (iw,
'(/," ",22("*"),A,22("*"))')
" Contracted Gaussian Type Orbitals "
340 IF (l == 0)
WRITE (iw,
'(A)')
" s Functions"
341 IF (l == 1)
WRITE (iw,
'(A)')
" p Functions"
342 IF (l == 2)
WRITE (iw,
'(A)')
" d Functions"
343 IF (l == 3)
WRITE (iw,
'(A)')
" f Functions"
344 IF (l >= 3)
WRITE (iw,
'(A)')
" x Functions"
346 WRITE (iw,
'(F15.6,5(T21,6F10.6,/))') &
351 WRITE (iw,
'(" ",79("*"))')
353 WRITE (iw,
'(/," ",28("*"),A,29("*"))')
" Slater Type Orbitals "
370 WRITE (iw,
'(" ",79("*"))')
392 REAL(kind=
dp),
DIMENSION(:, :, 0:),
OPTIONAL :: wfn
394 INTEGER :: i, im, iw, l
395 REAL(kind=
dp) :: expzet, prefac, zeta
397 CALL open_file(file_name=
"OPT_BASIS", file_status=
"UNKNOWN", file_action=
"WRITE", unit_number=iw)
401 WRITE (iw,
'(/," ",21("*"),A,22("*"))')
" Geometrical Gaussian Type Orbitals "
402 WRITE (iw,
'(A,F15.8,T41,A,F15.8)')
" Initial exponent: ",
atom_basis%aval, &
405 WRITE (iw,
'(T3,A)')
"BASIS_TYPE GAUSSIAN"
411 WRITE (iw,
'(T3,A,(T15,F20.8,:," \"))') &
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,:," \"))') &
431 WRITE (iw,
'(T3,A)')
"BASIS_TYPE SLATER"
436 WRITE (iw,
'(T3,A,(T15,F20.8,:," \"))') &
438 WRITE (iw,
'(T3,A,60I3)') &
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)') &
469 IF (
PRESENT(wfn))
THEN
474 WRITE (iw,
'(/,T3,A)')
"ORBITAL COEFFICENTS (Quickstep normalization)"
475 im = min(6,
SIZE(wfn, 2))
478 WRITE (iw,
'(T3,A,I3)')
"L Quantum Number:", l
480 expzet = 0.25_dp*real(2*l + 3,
dp)
481 prefac = sqrt(
rootpi/2._dp**(l + 2)*
dfac(2*l + 1))
484 WRITE (iw,
'(T5,F14.8,2x,6F12.8)')
atom_basis%am(i, l), wfn(i, 1:im, l)*prefac/zeta
510 INTEGER,
INTENT(IN) :: iw
512 CHARACTER(len=160) :: shortform
513 CHARACTER(len=:),
ALLOCATABLE :: reference
514 INTEGER :: ifun, il, meth, myfun, reltyp
518 NULLIFY (xc_fun, xc_fun_section, xc_section)
520 meth =
atom%method_type
522 xc_section =>
atom%xc_section
543 IF (iw > 0)
WRITE (iw, fmt=
"(/,' METHOD | Restricted Kohn-Sham Calculation')")
545 IF (iw > 0)
WRITE (iw, fmt=
"(/,' METHOD | Unrestricted Kohn-Sham Calculation')")
547 IF (iw > 0)
WRITE (iw, fmt=
"(/,' METHOD | Restricted Hartree-Fock Calculation')")
549 IF (iw > 0)
WRITE (iw, fmt=
"(/,' METHOD | Unrestricted Hartree-Fock Calculation')")
551 IF (iw > 0)
WRITE (iw, fmt=
"(/,' METHOD | Restricted Open-Shell Kohn-Sham Calculation')")
555 IF (
atom%do_zmp)
THEN
556 IF (iw > 0)
WRITE (iw, fmt=
"(' ZMP | Method on atomic radial density')")
557 IF (iw > 0)
WRITE (iw, fmt=
"(' ZMP | Lambda : ',F5.1)")
atom%lambda
558 IF (iw > 0)
WRITE (iw, fmt=
"(' ZMP | Reading external density : ',A20)")
atom%ext_file
560 IF (iw > 0)
WRITE (iw, fmt=
"(' ZMP | The file is in the form of a density matrix')")
562 IF (iw > 0)
WRITE (iw, fmt=
"(' ZMP | The file is in the form of a linear density')")
564 IF (
atom%doread)
THEN
565 IF (iw > 0)
WRITE (iw, fmt=
"(' ZMP | Restarting calculation from ',A20,' file if present')")
atom%zmp_restart_file
567 ELSE IF (
atom%read_vxc)
THEN
568 IF (iw > 0)
WRITE (iw, fmt=
"(' ZMP | Calculating density from external V_xc')")
569 IF (iw > 0)
WRITE (iw, fmt=
"(' ZMP | Reading external v_xc file : ',A20)")
atom%ext_vxc_file
572 IF (
atom%pp_calc)
THEN
573 IF (iw > 0)
WRITE (iw, fmt=
"(' METHOD | Nonrelativistic Calculation')")
575 reltyp =
atom%relativistic
581 IF (iw > 0)
WRITE (iw, fmt=
"(' METHOD | Nonrelativistic Calculation')")
583 IF (iw > 0)
WRITE (iw, fmt=
"(' METHOD | Relativistic Calculation using ZORA(MP)')")
585 IF (iw > 0)
WRITE (iw, fmt=
"(' METHOD | Relativistic Calculation using scaled ZORA(MP)')")
587 IF (iw > 0)
WRITE (iw, fmt=
"(' METHOD | Relativistic Calculation using Douglas-Kroll 0th order')")
588 IF (iw > 0)
WRITE (iw, fmt=
"(' METHOD | Relativistic Calculation using kietic energy scaling')")
590 IF (iw > 0)
WRITE (iw, fmt=
"(' METHOD | Relativistic Calculation using Douglas-Kroll 1st order')")
591 IF (iw > 0)
WRITE (iw, fmt=
"(' METHOD | Relativistic Calculation using Foldy-Wouthuysen transformation')")
593 IF (iw > 0)
WRITE (iw, fmt=
"(' METHOD | Relativistic Calculation using Douglas-Kroll 2nd order')")
595 IF (iw > 0)
WRITE (iw, fmt=
"(' METHOD | Relativistic Calculation using Douglas-Kroll 3rd order')")
608 IF (.NOT.
ASSOCIATED(xc_fun))
EXIT
610 ALLOCATE (
CHARACTER(LEN=libxc_get_reference_length(xc_fun, lsd)) :: reference)
612 ALLOCATE (
CHARACTER(LEN=20*default_string_length) :: reference)
615 WRITE (iw, fmt=
"(' FUNCTIONAL| ',a,':')") &
616 trim(xc_fun%section%name)
617 DO il = 1, len_trim(reference), 67
618 WRITE (iw, fmt=
"(' FUNCTIONAL| ',a67)") reference(il:)
620 DEALLOCATE (reference)
624 IF (iw > 0)
WRITE (iw, fmt=
"(' FUNCTIONAL| NO EXCHANGE-CORRELATION FUNCTIONAL USED.')")
643 INTEGER,
INTENT(IN) :: iw
645 CHARACTER(len=60) :: pline
646 INTEGER :: i, j, k, l
648 SELECT CASE (potential%ppot_type)
650 WRITE (iw,
'(/," ",28("*"),A,27("*"))')
" All Electron Potential "
652 WRITE (iw,
'(/," ",29("*"),A,29("*"))')
" GTH Pseudopotential "
653 WRITE (iw,
'(T10,A,T76,F5.1)')
" Core Charge ", potential%gth_pot%zion
654 WRITE (iw,
'(T10,A,T66,F15.6)')
" Rc ", potential%gth_pot%rc
655 WRITE (pline,
'(5F12.6)') (potential%gth_pot%cl(i), i=1, potential%gth_pot%ncl)
656 WRITE (iw,
'(T10,A,T21,A60)')
" C1 C2 ... ", adjustr(pline)
657 IF (potential%gth_pot%lpotextended)
THEN
658 DO k = 1, potential%gth_pot%nexp_lpot
659 WRITE (iw,
'(T10,A,F10.6,T38,A,4F10.6)')
" LPot: rc=", potential%gth_pot%alpha_lpot(k), &
660 "CX=", (potential%gth_pot%cval_lpot(i, k), i=1, potential%gth_pot%nct_lpot(k))
663 IF (potential%gth_pot%nlcc)
THEN
664 DO k = 1, potential%gth_pot%nexp_nlcc
665 WRITE (iw,
'(T10,A,F10.6,T38,A,4F10.6)')
" LSDPot: rc=", potential%gth_pot%alpha_nlcc(k), &
666 "CX=", (potential%gth_pot%cval_nlcc(i, k)*4.0_dp*
pi, i=1, potential%gth_pot%nct_nlcc(k))
669 IF (potential%gth_pot%lsdpot)
THEN
670 DO k = 1, potential%gth_pot%nexp_lsd
671 WRITE (iw,
'(T10,A,F10.6,T38,A,4F10.6)')
" LSDPot: rc=", potential%gth_pot%alpha_lsd(k), &
672 "CX=", (potential%gth_pot%cval_lsd(i, k), i=1, potential%gth_pot%nct_lsd(k))
676 IF (potential%gth_pot%nl(l) > 0)
THEN
677 WRITE (iw,
'(T10,A,T76,I5)')
" Angular momentum ", l
678 WRITE (iw,
'(T10,A,T66,F15.6)')
" Rcnl ", potential%gth_pot%rcnl(l)
679 WRITE (iw,
'(T10,A,T76,I5)')
" Nl ", potential%gth_pot%nl(l)
680 WRITE (pline,
'(5F12.6)') (potential%gth_pot%hnl(1, j, l), j=1, potential%gth_pot%nl(l))
681 WRITE (iw,
'(T10,A,T21,A60)')
" Hnl ", adjustr(pline)
682 DO i = 2, potential%gth_pot%nl(l)
683 WRITE (pline,
'(T21,5F12.6)') (potential%gth_pot%hnl(i, j, l), j=i, potential%gth_pot%nl(l))
684 WRITE (iw,
'(T21,A60)') adjustr(pline)
688 IF (potential%gth_pot%soc)
THEN
689 WRITE (iw,
'(T10,A)')
" Spin-orbit coupling parameters "
691 IF (potential%gth_pot%nl(l) > 0)
THEN
692 WRITE (iw,
'(T10,A,T76,I5)')
" Angular momentum ", l
693 WRITE (iw,
'(T10,A,T66,F15.6)')
" Rcnl ", potential%gth_pot%rcnl(l)
694 WRITE (iw,
'(T10,A,T76,I5)')
" Nl ", potential%gth_pot%nl(l)
695 WRITE (pline,
'(5F12.6)') (potential%gth_pot%knl(1, j, l), j=1, potential%gth_pot%nl(l))
696 WRITE (iw,
'(T10,A,T21,A60)')
" Hnl ", adjustr(pline)
697 DO i = 2, potential%gth_pot%nl(l)
698 WRITE (pline,
'(T21,5F12.6)') (potential%gth_pot%knl(i, j, l), j=i, potential%gth_pot%nl(l))
699 WRITE (iw,
'(T21,A60)') adjustr(pline)
705 WRITE (iw,
'(/," ",29("*"),A,29("*"))')
" UPF Pseudopotential "
706 DO k = 1, potential%upf_pot%maxinfo
707 WRITE (iw,
'(A80)') potential%upf_pot%info(k)
710 WRITE (iw,
'(/," ",29("*"),A,29("*"))')
" SGP Pseudopotential "
711 WRITE (iw,
'(T10,A,T76,F5.1)')
" Core Charge ", potential%sgp_pot%zion
713 WRITE (iw,
'(/," ",26("*"),A,27("*"))')
" Effective Core Potential "
714 WRITE (iw,
'(T10,A,T76,F5.1)')
" Core Charge ", potential%ecp_pot%zion
715 DO k = 1, potential%ecp_pot%nloc
717 WRITE (iw,
'(T10,A,T40,I3,T49,2F16.8)')
" Local Potential ", potential%ecp_pot%nrloc(k), &
718 potential%ecp_pot%bloc(k), potential%ecp_pot%aloc(k)
720 WRITE (iw,
'(T40,I3,T49,2F16.8)') potential%ecp_pot%nrloc(k), &
721 potential%ecp_pot%bloc(k), potential%ecp_pot%aloc(k)
724 DO l = 0, potential%ecp_pot%lmax
725 WRITE (iw,
'(T10,A,I3)')
" ECP l-value ", l
726 DO k = 1, potential%ecp_pot%npot(l)
727 WRITE (iw,
'(T40,I3,T49,2F16.8)') potential%ecp_pot%nrpot(k, l), &
728 potential%ecp_pot%bpot(k, l), potential%ecp_pot%apot(k, l)
734 IF (potential%confinement)
THEN
735 IF (potential%conf_type ==
poly_conf)
THEN
736 WRITE (iw,
'(/,T10,A,T51,F12.6," * (R /",F6.2,")**",F6.2)') &
737 " Confinement Potential ", potential%acon, potential%rcon, potential%scon
739 WRITE (iw,
'(/,T10,A)')
" Confinement Potential s*F[(r-ron)/w] "
740 WRITE (iw,
'(T57,A,F12.6,A)')
"s =", potential%acon,
" Ha"
741 WRITE (iw,
'(T57,A,F12.6,A)')
"w =", potential%rcon,
" Bohr"
742 WRITE (iw,
'(T57,A,F12.6,A)')
"ron =", potential%scon,
" Bohr"
747 WRITE (iw,
'(/,T10,A)')
" No Confinement Potential is applied "
749 WRITE (iw,
'(" ",79("*"))')
765 INTEGER,
INTENT(IN),
OPTIONAL :: iunit
766 REAL(kind=
dp),
INTENT(IN),
OPTIONAL :: fopt
768 INTEGER :: i, iw, j, k, n
770 IF (
PRESENT(iunit))
THEN
773 CALL open_file(file_name=
"GTH-PARAMETER", file_status=
"UNKNOWN", file_action=
"WRITE", unit_number=iw)
775 IF (
PRESENT(fopt))
THEN
776 WRITE (iw,
'(A,F30.8)')
"# "//trim(adjustl(gthpot%symbol)), fopt
778 WRITE (iw,
'(A)') trim(adjustl(gthpot%symbol))//
" "//trim(adjustl(gthpot%pname))
780 WRITE (iw,
'(4I5)') gthpot%econf(0:3)
781 WRITE (iw,
'(F20.14,I8,5F20.14)') gthpot%rc, gthpot%ncl, (gthpot%cl(i), i=1, gthpot%ncl)
782 IF (gthpot%lpotextended)
THEN
783 WRITE (iw,
'(A,I5)')
" LPOT", gthpot%nexp_lpot
784 DO i = 1, gthpot%nexp_lpot
785 WRITE (iw,
'(F20.14,I8,5F20.14)') gthpot%alpha_lpot(i), gthpot%nct_lpot(i), &
786 (gthpot%cval_lpot(j, i), j=1, gthpot%nct_lpot(i))
789 IF (gthpot%lsdpot)
THEN
790 WRITE (iw,
'(A,I5)')
" LSD ", gthpot%nexp_lsd
791 DO i = 1, gthpot%nexp_lsd
792 WRITE (iw,
'(F20.14,I8,5F20.14)') gthpot%alpha_lsd(i), gthpot%nct_lsd(i), &
793 (gthpot%cval_lsd(j, i), j=1, gthpot%nct_lsd(i))
796 IF (gthpot%nlcc)
THEN
797 WRITE (iw,
'(A,I5)')
" NLCC ", gthpot%nexp_nlcc
798 DO i = 1, gthpot%nexp_nlcc
799 WRITE (iw,
'(F20.14,I8,5F20.14)') gthpot%alpha_nlcc(i), gthpot%nct_nlcc(i), &
800 (gthpot%cval_nlcc(j, i)*4.0_dp*
pi, j=1, gthpot%nct_nlcc(i))
805 IF (gthpot%nl(i) > 0)
THEN
812 WRITE (iw,
'(F20.14,I8,5F20.14)') gthpot%rcnl(i), gthpot%nl(i), (gthpot%hnl(1, k, i), k=1, gthpot%nl(i))
813 SELECT CASE (gthpot%nl(i))
815 WRITE (iw,
'(T49,F20.14)') gthpot%hnl(2, 2, i)
817 WRITE (iw,
'(T49,2F20.14)') gthpot%hnl(2, 2, i), gthpot%hnl(2, 3, i)
818 WRITE (iw,
'(T69,F20.14)') gthpot%hnl(3, 3, i)
820 DO j = 2, gthpot%nl(i)
821 WRITE (iw,
'(T29,5F20.14)') (gthpot%hnl(j, k, i), k=j, gthpot%nl(i))
827 WRITE (iw,
'(T29,5F20.14)') (gthpot%hnl(1, k, i), k=1, gthpot%nl(i))
828 SELECT CASE (gthpot%nl(i))
830 WRITE (iw,
'(T49,F20.14)') gthpot%knl(2, 2, i)
832 WRITE (iw,
'(T49,2F20.14)') gthpot%knl(2, 2, i), gthpot%knl(2, 3, i)
833 WRITE (iw,
'(T69,F20.14)') gthpot%knl(3, 3, i)
835 DO j = 2, gthpot%nl(i)
836 WRITE (iw,
'(T29,5F20.14)') (gthpot%knl(j, k, i), k=j, gthpot%nl(i))
841 IF (.NOT.
PRESENT(iunit))
CALL close_file(unit_number=iw)
855 INTEGER,
INTENT(IN) :: iw
856 LOGICAL,
INTENT(IN),
OPTIONAL ::
xmgrace
858 CHARACTER(LEN=40) :: fnbody
862 SELECT CASE (
atom%method_type)
866 CALL atom_print_orbitals_helper(
atom,
atom%orbitals%wfn,
"", iw)
868 CALL atom_print_orbitals_helper(
atom,
atom%orbitals%wfna,
"Alpha", iw)
869 CALL atom_print_orbitals_helper(
atom,
atom%orbitals%wfnb,
"Beta", iw)
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)
881 IF (
graph .AND. iw > 0)
THEN
883 fnbody = trim(
ptable(z)%symbol)//
"_PPorbital"
884 SELECT CASE (
atom%method_type)
888 CALL atom_orbitals_grace(
atom,
atom%orbitals%wfn, fnbody)
890 CALL atom_orbitals_grace(
atom,
atom%orbitals%wfna, trim(fnbody)//
"alpha")
891 CALL atom_orbitals_grace(
atom,
atom%orbitals%wfnb, trim(fnbody)//
"beta")
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")
913 SUBROUTINE atom_print_orbitals_helper(atom, wfn, description, iw)
915 REAL(kind=
dp),
DIMENSION(:, :, 0:),
INTENT(INOUT) :: wfn
916 CHARACTER(len=*),
INTENT(IN) :: description
917 INTEGER,
INTENT(IN) :: iw
919 INTEGER :: b, l, maxl, nb, nv, v
921 WRITE (iw,
'(/,A,A,A)')
" Atomic orbital expansion coefficients [", description,
"]"
923 maxl =
atom%state%maxl_calc
926 nb =
atom%basis%nbas(l)
927 nv =
atom%state%maxn_calc(l)
928 IF (nb > 0 .AND. nv > 0)
THEN
929 nv = min(nv,
SIZE(wfn, 2))
931 WRITE (iw,
'(/," ORBITAL L = ",I1," State = ",I3)') l, v
933 WRITE (iw,
'(" ",ES23.15)') wfn(b, v, l)
938 END SUBROUTINE atom_print_orbitals_helper
948 SUBROUTINE atom_orbitals_grace(atom, wfn, fnbody)
950 REAL(kind=
dp),
DIMENSION(:, :, 0:),
INTENT(INOUT) :: wfn
951 CHARACTER(len=*),
INTENT(IN) :: fnbody
953 CHARACTER(LEN=1),
DIMENSION(0:8) :: lname
954 CHARACTER(LEN=1),
DIMENSION(1:9) :: wnum
955 CHARACTER(LEN=40) :: fname, legend
956 INTEGER :: b, i, iw, l, m, maxl, nb, nv, v
957 REAL(kind=
dp),
ALLOCATABLE,
DIMENSION(:, :) :: gdata, wfnr
958 REAL(kind=
dp),
DIMENSION(4) :: world_coord
960 lname = [
's',
'p',
'd',
'f',
'g',
'h',
'j',
'k',
'l']
961 wnum = [
'1',
'2',
'3',
'4',
'5',
'6',
'7',
'8',
'9']
962 m =
atom%basis%grid%nr
963 maxl =
atom%state%maxl_calc
965 fname = trim(fnbody)//
"_"//lname(l)//
".agr"
966 nb =
atom%basis%nbas(l)
967 nv =
atom%state%maxn_calc(l)
968 IF (nb > 0 .AND. nv > 0)
THEN
969 CALL open_file(file_name=fname, file_status=
"UNKNOWN", file_action=
"WRITE", unit_number=iw)
970 nv = min(nv,
SIZE(wfn, 2))
971 ALLOCATE (wfnr(m, nv))
975 wfnr(:, v) = wfnr(:, v) + wfn(b, v, l)*
atom%basis%bf(:, b, l)
978 world_coord(1) = 0.0_dp
979 world_coord(2) = minval(wfnr) - 0.5_dp
980 world_coord(3) = 15.0_dp
981 world_coord(4) = maxval(wfnr) + 0.5_dp
986 title=
"PP Radial Wavefunction", &
987 subtitle=lname(l)//
"-Quantum Number", &
988 xlabel=
"Radius [Bohr]", &
991 legend =
"WFN "//wnum(i + 1)
994 ALLOCATE (gdata(m, 2))
995 gdata(1:m, 1) =
atom%basis%grid%rad(1:m)
997 gdata(1:m, 2) = wfnr(1:m, i + 1)
1000 DEALLOCATE (gdata, wfnr)
1004 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.