50 INTEGER,
DIMENSION(3),
PARAMETER :: lattice_translation = [-1, 1, -2]
51 REAL(KIND=
dp),
PARAMETER :: delta = 8.0_dp*epsilon(1.0_dp)
53 REAL(KIND=
dp),
DIMENSION(3) :: r, scaled, wrapped, wrapped_scaled, &
55 wrapped_translated_scaled
57 scaled = [0.5_dp - delta, -0.5_dp + delta, 1.5_dp - delta]
61 IF (any(sign(1.0_dp, wrapped_scaled) /= [-1.0_dp, -1.0_dp, -1.0_dp]))
THEN
62 error stop
"Roundoff changed the image at a half-cell boundary"
64 IF (any(abs(abs(wrapped_scaled) - 0.5_dp) > 2.0_dp*delta))
THEN
65 error stop
"Unexpected wrapped coordinate at a half-cell boundary"
70 CALL real_to_scaled(wrapped_translated_scaled, wrapped_translated, cell)
71 IF (any(abs(wrapped_translated_scaled - wrapped_scaled) > 4.0_dp*delta))
THEN
72 error stop
"Periodic wrapping changed under a lattice translation"
75 scaled = [0.5_dp - 128.0_dp*epsilon(1.0_dp), &
76 -0.5_dp - 128.0_dp*epsilon(1.0_dp), &
77 1.5_dp + 128.0_dp*epsilon(1.0_dp)]
81 IF (any(sign(1.0_dp, wrapped_scaled) /= [1.0_dp, 1.0_dp, -1.0_dp]))
THEN
82 error stop
"Coordinate outside the boundary tolerance changed image"
real(kind=dp) function, dimension(3), public pbc_stable(r, cell)
Apply a stable periodic-image convention for k-point Bloch gauges.