16#include "../base/base_uses.f90"
22 INTEGER,
PARAMETER :: lmat = 3
26 REAL(
dp),
ALLOCATABLE :: ae_wfc(:, :), ps_wfc(:, :)
27 INTEGER,
ALLOCATABLE :: angular_momenta(:)
31 CHARACTER(LEN=2) :: symbol =
""
32 CHARACTER(LEN=default_string_length) :: pname =
""
33 INTEGER,
DIMENSION(0:lmat) :: econf = 0
34 REAL(
dp) :: zion = 0.0_dp
35 CHARACTER(LEN=default_string_length) :: version =
""
36 CHARACTER(LEN=default_path_length) :: filename =
""
38 INTEGER :: maxinfo = 100
39 CHARACTER(LEN=default_string_length),
DIMENSION(100) &
42 CHARACTER(LEN=default_string_length) :: generated =
""
43 CHARACTER(LEN=default_string_length) :: author =
""
44 CHARACTER(LEN=default_string_length) :: date =
""
45 CHARACTER(LEN=default_string_length) :: comment =
""
46 CHARACTER(LEN=4) :: pseudo_type =
""
47 CHARACTER(LEN=15) :: relativistic =
""
48 CHARACTER(LEN=default_string_length) :: functional =
""
49 LOGICAL :: is_ultrasoft = .false.
50 LOGICAL :: is_paw = .false.
51 LOGICAL :: is_coulomb = .false.
52 LOGICAL :: has_so = .false.
53 LOGICAL :: has_wfc = .false.
54 LOGICAL :: has_gipaw = .false.
55 LOGICAL :: paw_as_gipaw = .false.
56 LOGICAL :: core_correction = .false.
57 REAL(
dp) :: total_psenergy = 0.0_dp
58 REAL(
dp) :: wfc_cutoff = 0.0_dp
59 REAL(
dp) :: rho_cutoff = 0.0_dp
60 INTEGER :: l_max = -100
61 INTEGER :: l_max_rho = -1
62 INTEGER :: l_local = -1
63 INTEGER :: mesh_size = -1
64 INTEGER :: number_of_wfc = -1
65 INTEGER :: number_of_proj = -1
67 REAL(
dp) :: dx = 0.0_dp
68 REAL(
dp) :: xmin = 0.0_dp
69 REAL(
dp) :: rmax = 0.0_dp
70 REAL(
dp) :: zmesh = 0.0_dp
71 REAL(
dp),
DIMENSION(:),
ALLOCATABLE :: r, rab
73 REAL(
dp),
DIMENSION(:),
ALLOCATABLE :: rho_nlcc
75 REAL(
dp),
DIMENSION(:),
ALLOCATABLE :: vlocal
78 REAL(
dp),
DIMENSION(:, :),
ALLOCATABLE :: dion
79 REAL(
dp),
DIMENSION(:, :),
ALLOCATABLE :: beta
80 INTEGER,
DIMENSION(:),
ALLOCATABLE :: lbeta
83 REAL(
dp),
DIMENSION(:, :),
ALLOCATABLE :: qij
84 REAL(
dp),
DIMENSION(:, :, :),
ALLOCATABLE :: qijl
87 REAL(
dp),
DIMENSION(:, :),
ALLOCATABLE :: vsemi
101 REAL(
dp) :: weights(size(pot%r))
106 cpassert(n >= 3 .AND.
SIZE(pot%rab) == n)
107 cpassert(all(pot%r(2:) > pot%r(:n - 1)) .AND. all(pot%rab > 0.0_dp))
110 weights(1:ns:2) = 2.0_dp/3.0_dp
111 weights(2:ns - 1:2) = 4.0_dp/3.0_dp
112 weights(1) = 1.0_dp/3.0_dp
113 weights(ns) = 1.0_dp/3.0_dp
114 IF (ns < n) weights(n - 1:n) = weights(n - 1:n) + 0.5_dp
115 weights(:) = weights*pot%rab
130 IF (.NOT.
ALLOCATED(pot%partial_waves))
RETURN
131 IF (.NOT.
ALLOCATED(pot%lbeta))
RETURN
132 IF (.NOT.
ALLOCATED(pot%r) .OR. .NOT.
ALLOCATED(pot%rab))
RETURN
134 nb = pot%number_of_proj
135 IF (n < 3 .OR. nb < 1 .OR.
SIZE(pot%lbeta) /= nb)
RETURN
136 IF (
SIZE(pot%r) /= n .OR.
SIZE(pot%rab) /= n)
RETURN
137 associate(waves => pot%partial_waves)
138 IF (.NOT.
ALLOCATED(waves%ae_wfc) .OR. .NOT.
ALLOCATED(waves%ps_wfc))
RETURN
139 IF (.NOT.
ALLOCATED(waves%angular_momenta))
RETURN
140 IF (any(shape(waves%ae_wfc) /= [n, nb]))
RETURN
141 IF (any(shape(waves%ps_wfc) /= [n, nb]))
RETURN
142 IF (
SIZE(waves%angular_momenta) /= nb)
RETURN
143 complete = all(waves%angular_momenta == pot%lbeta)
static GRID_HOST_DEVICE int modulo(int a, int m)
Equivalent of Fortran's MODULO, which always return a positive number. https://gcc....
Defines the basic variable types.
integer, parameter, public dp
integer, parameter, public default_string_length
integer, parameter, public default_path_length
Owned UPF dataset and radial conventions shared by ATOM and Quickstep. Dataset availability does not ...
real(dp) function, dimension(size(pot%r)), public upf_radial_weights(pot)
Composite Simpson weights for dr on the supplied UPF mesh index.
pure logical function, public upf_has_complete_partial_waves(pot)
Check for a complete projector-indexed pair of original AE and PS waves.
pure subroutine, public upf_release(pot)
Release every owned field and reset metadata before reusing a dataset.