16 integer,
parameter ::
dp = kind(1.0d0)
19 real(
dp),
parameter ::
c0 = -6.0_dp
20 real(
dp),
parameter ::
c1 = 14.0_dp
21 real(
dp),
parameter ::
c2 = -8.0_dp
22 real(
dp),
parameter ::
c3 = -3.0_dp
23 real(
dp),
parameter ::
c4 = 4.0_dp
24 real(
dp),
parameter ::
c5 = -1.0_dp;
29 real(
dp),
parameter ::
cc = 0.9_dp;
35 character(20) :: jobname
43 integer :: maxscfinititer
66 integer,
parameter :: nkey_char = 1, nkey_int = 4, nkey_re = 2, nkey_log = 1
67 character(len=*) :: filename
70 character(len=50),
parameter :: keyvector_char(nkey_char) = [character(len=100) :: &
72 character(len=100) :: valvector_char(nkey_char) = [character(len=100) :: &
75 character(len=50),
parameter :: keyvector_int(nkey_int) = [character(len=50) :: &
76 'Verbose=',
'Mprg_init=',
'MaxSCFIter=',
'MaxSCFInitIter=']
77 integer :: valvector_int(nkey_int) = (/ &
80 character(len=50),
parameter :: keyvector_re(nkey_re) = [character(len=50) :: &
81 'NumThresh=',
'ScaledDeltaKernel=' ]
82 real(
dp) :: valvector_re(nkey_re) = (/&
85 character(len=50),
parameter :: keyvector_log(nkey_log) = [character(len=100) :: &
87 logical :: valvector_log(nkey_log) = (/&
91 character(len=50),
parameter :: startstop(2) = [character(len=50) :: &
95 ,keyvector_int,valvector_int,keyvector_re,valvector_re,&
96 keyvector_log,valvector_log,trim(filename),startstop)
99 xlbo%JobName = valvector_char(1)
102 xlbo%threshold = valvector_re(1)
103 xlbo%cc = valvector_re(2)
108 xlbo%verbose = valvector_int(1)
109 xlbo%minit = valvector_int(2)
110 xlbo%maxscfiter = valvector_int(3)
111 xlbo%maxscfinititer = valvector_int(4)
120 real(
dp),
allocatable,
intent(inout) :: n(:), n_0(:), n_1(:), n_2(:), n_3(:), n_4(:), n_5(:)
121 real(
dp),
allocatable,
intent(in) :: charges(:)
124 integer,
intent(in) :: mdstep
127 nats =
size(charges,dim=1)
129 if(.not.
allocated(n))
then
149 n = 2.0_dp*n_0 - n_1 + xl%cc*
kappa*(charges-n) &
151 n_5 = n_4; n_4 = n_3; n_3 = n_2; n_2 = n_1; n_1 = n_0; n_0 = n;
158 subroutine prg_xlbo_nint_kernel(charges,n,n_0,n_1,n_2,n_3,n_4,n_5,mdstep,kernel,xl)
160 real(
dp),
allocatable,
intent(inout) :: n(:), n_0(:), n_1(:), n_2(:), n_3(:), n_4(:), n_5(:)
161 real(
dp),
allocatable,
intent(in) :: charges(:)
162 real(
dp),
allocatable,
intent(in) :: kernel(:,:)
165 integer,
intent(in) :: mdstep
168 nats =
size(charges,dim=1)
170 if(.not.
allocated(n))
then
199 n = 2.0_dp*n_0 - n_1 - 1.0_dp*
kappa*matmul(kernel,(charges-n)) &
201 n_5 = n_4; n_4 = n_3; n_3 = n_2; n_2 = n_1; n_1 = n_0; n_0 = n;
210 subroutine prg_xlbo_nint_kerneltimesres(charges,n,n_0,n_1,n_2,n_3,n_4,n_5,mdstep,kernelTimesRes,xl)
212 real(
dp),
allocatable,
intent(inout) :: n(:), n_0(:), n_1(:), n_2(:), n_3(:), n_4(:), n_5(:)
213 real(
dp),
allocatable,
intent(in) :: charges(:)
214 real(
dp),
allocatable,
intent(in) :: kerneltimesres(:)
217 integer,
intent(in) :: mdstep
220 nats =
size(charges,dim=1)
222 if(.not.
allocated(n))
then
242 n = 2.0_dp*n_0 - n_1 - 1.0_dp*
kappa*kerneltimesres &
244 n_5 = n_4; n_4 = n_3; n_3 = n_2; n_2 = n_1; n_1 = n_0; n_0 = n;
254 real(
dp),
intent(inout) :: fcoul(:,:),charges(:)
255 real(
dp),
intent(inout) :: n(:)
257 fcoul(1,:) = (2.0_dp*charges(:)-n(:))*fcoul(1,:)/n(:);
258 fcoul(2,:) = (2.0_dp*charges(:)-n(:))*fcoul(2,:)/n(:);
259 fcoul(3,:) = (2.0_dp*charges(:)-n(:))*fcoul(3,:)/n(:);
Some general parsing functions.
subroutine, public prg_parsing_kernel(keyvector_char, valvector_char, keyvector_int, valvector_int, keyvector_re, valvector_re, keyvector_log, valvector_log, filename, startstop)
The general parsing function. It is used to vectorize a set of "keywords" "value" pairs as included i...
Module to handle input output files for the PROGRESS lib.
A module to perform XLBO integration.
real(dp), parameter kappa
Coefficients for modified Verlet integration.
subroutine, public prg_xlbo_nint_kernel(charges, n, n_0, n_1, n_2, n_3, n_4, n_5, mdstep, kernel, xl)
This routine integrates the dynamical variable "n".
real(dp), parameter alpha
subroutine, public prg_xlbo_nint(charges, n, n_0, n_1, n_2, n_3, n_4, n_5, mdstep, xl)
This routine integrates the dynamical variable "n".
subroutine, public prg_xlbo_fcoulupdate(fcoul, charges, n)
Adjust forces for the linearized XLBOMD functional.
real(dp), parameter c0
Coefficients for modified Verlet integration.
subroutine, public prg_parse_xlbo(xlbo, filename)
The parser for XLBO parser.
subroutine, public prg_xlbo_nint_kerneltimesres(charges, n, n_0, n_1, n_2, n_3, n_4, n_5, mdstep, kernelTimesRes, xl)
This routine integrates the dynamical variable "n".
General xlbo solver type.