2
c $Id: pspw_Three.F 22780 2012-08-26 19:56:12Z bylaska $
5
* *************************
9
* *************************
10
subroutine pspw_Three_init(rtdb)
14
#include "mafdecls.fh"
16
#include "pspw_Three.fh"
20
* **** local variables
26
integer i,j,l,k,nn,ntriple,shift
27
integer nkatm,nkatm_qm,nkatm2
30
* **** external functions ****
32
character*7 c_index_name
33
integer ion_nkatm,ion_nkatm_qm
37
external ion_nkatm,ion_nkatm_qm
41
nkatm_qm = ion_nkatm_qm()
44
value = rtdb_parallel(.true.)
46
* **** determine the ntriples ****
53
* **** check for standard triple potentials ****
54
rtdbname='pspw_Three_ion_ion_ion_ntriple:'
55
> //ion_atom(i)//ion_atom(j)//ion_atom(k)
56
if (rtdb_get(rtdb,rtdbname,mt_int,1,ntriple)) then
57
ntriples = ntriples + ntriple
58
if ((i.le.nkatm_qm).and.
59
> (j.le.nkatm_qm).and.
66
if (ntriples.gt.0) then
68
* **** allocate Three parameters ****
69
value = MA_alloc_get(mt_int,nkatm*nkatm*nkatm,
70
> 'ntriple_all',ntriple_all(2),ntriple_all(1))
72
> MA_alloc_get(mt_int,nkatm*nkatm*nkatm,
73
> 'triple_start',triple_start(2),triple_start(1))
75
> call errquit('pspw_Three_init:out of heap memory',1,MA_ERR)
76
call icopy(nkatm*nkatm*nkatm,0,0,int_mb(ntriple_all(1)),1)
77
call icopy(nkatm*nkatm*nkatm,0,0,int_mb(triple_start(1)),1)
80
> MA_alloc_get(mt_int,ntriples,
81
> 'type_all',type_all(2),type_all(1))
83
> MA_alloc_get(mt_dbl,4*ntriples,
84
> 'param_all',param_all(2),param_all(1))
86
> call errquit('pspw_Three_init:out of heap memory',2,MA_ERR)
88
* **** Generate Three potential parameters ****
94
* **** read and add standard pair potentials ****
95
rtdbname='pspw_Pair_ion_ion_ion_ntriple:'
96
> //ion_atom(i)//ion_atom(j)//ion_atom(k)
97
if (.not.rtdb_get(rtdb,rtdbname,mt_int,1,ntriple))
100
shift = (k-1)*nkatm2+(j-1)*nkatm+(i-1)
101
int_mb(ntriple_all(1)+shift) = npair
102
int_mb(triple_start(1)+shift) = nn
104
rtdbname = 'pspw_Three_ion_ion_ion_type:'
106
> //ion_atom(i)//ion_atom(j)//ion_atom(k)
108
> rtdb_get(rtdb,rtdbname,mt_int,1,
109
> int_mb(type_all(1)+nn))
111
rtdbname = 'pspw_Three_ion_ion_ion_param:'
113
> //ion_atom(i)//ion_atom(j)//ion_atom(k)
115
> rtdb_get(rtdb,rtdbname,mt_dbl,4,
116
> dbl_mb(param_all(1)+4*nn))
124
* **** write out Three potential data ****
125
call Parallel_taskid(taskid)
126
if (taskid.eq.MASTER) then
128
> 'Three-Body Ion-Ion-Ion Parameters (units=a.u.):'
131
> '- including QM/QM Three-Body interactions'
135
shift = (k-1)*nkatm2+(j-1)*nkatm+(i-1))
136
ntriple = int_mb(ntriple_all(1)+shift)
137
nn = int_mb(triple_start(1)+shift)
138
if (ntriple.gt.0) then
139
write(luout,'(A4,1x,A4,1x,A4)')
140
> ion_atom(i),ion_atom(j),ion_atom(k)
143
if (int_mb(type_all(1)+nn+l-1).eq.1) then
145
write(luout,'(4x,A49,E14.6,A5,E14.6,A3,E14.6,A3,E14.6)')
146
> '- Potential=A*exp(-rij/rho)-C/rij**6-D/rij**8, A:',
147
> dbl_mb(param_all(1)+4*(nn+l-1)),
149
> dbl_mb(param_all(1)+4*(nn+l-1)+1),
151
> dbl_mb(param_all(1)+4*(nn+l-1)+2),
153
> dbl_mb(param_all(1)+4*(nn+l-1)+3)
164
end if !*** ntriples.gt.0 ****
169
* *************************
173
* *************************
174
subroutine pspw_Three_end()
177
#include "mafdecls.fh"
178
#include "pspw_Three.fh"
179
#include "errquit.fh"
183
if (ntriples.gt.0) then
184
value = MA_free_heap(ntriple_all(2))
185
value = value.and.MA_free_heap(triple_start(2))
186
value = value.and.MA_free_heap(type_all(2))
187
value = value.and.MA_free_heap(param_all(2))
189
> call errquit('pspw_Three_end: error MA_free_heap',
195
c *************************************
197
c * pspw_gen_Neighbor_List *
199
c *************************************
200
subroutine pspw_gen_Neighbor_List(nion,rion,
202
> r2max,nlist_max,nlist)
209
integer nlist_max,nlist(nlist_max,*)
219
ijk(1,k) = nint(rion(1,k)/rmax)
220
ijk(2,k) = nint(rion(2,k)/rmax)
221
ijk(3,k) = nint(rion(3,k)/rmax)
223
if (ijk(1,k).gt.ijkmax(1)) ijkmax(1) = ijk(1,k)
224
if (ijk(2,k).gt.ijkmax(2)) ijkmax(2) = ijk(2,k)
225
if (ijk(3,k).gt.ijkmax(3)) ijkmax(3) = ijk(3,k)
227
if (ijk(1,k).lt.ijkmin(1)) ijkmin(1) = ijk(1,k)
228
if (ijk(2,k).lt.ijkmin(2)) ijkmin(2) = ijk(2,k)
229
if (ijk(3,k).lt.ijkmin(3)) ijkmin(3) = ijk(3,k)
231
nijk(1) = ijkmax(1)-ijkmin(1)+1
232
nijk(2) = ijkmax(2)-ijkmin(2)+1
233
nijk(3) = ijkmax(3)-ijkmin(3)+1
235
do k=ijkmin(3),ijkmax(3)
236
do j=ijkmin(2),ijkmax(2)
237
do i=ijkmin(1),ijkmax(1)
247
c *************************************
251
c *************************************
252
real*8 function pspw_Three_E(nion,nion_qm,katm,
253
> nfrag,indx_frag_start,size_frag,kfrag,
254
> self_interaction,lmbda,
261
integer indx_frag_start(*),size_frag(*)
263
logical self_interaction(*)
266
real*8 rcell(nshl3d,3)
269
#include "mafdecls.fh"
270
#include "pspw_Three.fh"
272
* **** local variables ****
273
integer dutask,taskid,np
274
integer i,j,ii,jj,nkatm,nkatm2
275
integer w1,a,k1,kk1,n1,npair,istart,k
279
* **** external functions ****
281
real*8 pspw_VThree_E_periodic,pspw_VThree_E_periodic_self
282
real*8 pspw_VThree_E_onecell,pspw_VThree_E_periodic_image
284
external pspw_VThree_E_periodic,pspw_VThree_E_periodic_self
285
external pspw_VThree_E_onecell,pspw_VThree_E_periodic_image
287
call nwpw_timing_start(40)
290
if (ntriple.gt.0) then
293
call Parallel_taskid(taskid)
299
c **** create neighbor list ****
303
r2 = (rion(1,j)-rion(1,k))**2
304
+ (rion(2,j)-rion(2,k))**2
305
+ (rion(3,j)-rion(3,k))**2
306
if (r2.le.r2_neighbor) then
307
int_mb(list_neighbor(1)+(k-1)*nion+nlist) = j
311
int_mb(nlist_neighbor(1)+k-1) = nlist
315
c **** QM/QM VThree energy ****
318
if (dutask.eq.taskid) then
321
nlist = int_mb(nlist_neighbor(1)+k-1)
323
j=int_mb(list_neighbor(1)+(k-1)*nion+r)
326
i=int_mb(list(1)+(k-1)*nion+s)
329
shift = (kk-1)*nkatm2 +(jj-1)*nkatm+ii-1
330
ntriple = int_mb(ntriple_all(1)+shift)
331
istart = int_mb(pair_start(1)+shift)
333
> E = E + pspw_VThree_E_periodic(ntriple,
334
> int_mb(type_all(1) +istart),
335
> dbl_mb(param_all(1)+4*istart),
336
> rion(1,i),rion(1,j),rion(1,k)
341
dutask = mod(dutask+1,np)
345
c **** QM/MM VPower energy ****
346
do j = nion_qm+1,nion
347
if (dutask.eq.taskid) then
351
npair = int_mb(npair_all(1) +(jj-1)*nkatm+ii-1)
352
istart = int_mb(pair_start(1)+(jj-1)*nkatm+ii-1)
354
> E = E + pspw_VPair_E_periodic(npair,
355
> int_mb(type_all(1) +istart),
356
> dbl_mb(param_all(1)+4*istart),
357
> rion(1,i),rion(1,j),
361
dutask = mod(dutask+1,np)
364
c **** MM/MM VPower 1 cell energy ****
366
if (dutask.eq.taskid) then
368
k1 = indx_frag_start(w1)
369
k2 = indx_frag_start(w2)
376
npair = int_mb(npair_all(1) +(jj-1)*nkatm+ii-1)
377
istart = int_mb(pair_start(1)+(jj-1)*nkatm+ii-1)
379
> E = E + pspw_VPair_E_onecell(npair,
380
> int_mb(type_all(1) +istart),
381
> dbl_mb(param_all(1)+4*istart),
382
> rion(1,kk1),rion(1,kk2))
389
dutask = mod(dutask+1,np)
392
c **** MM/MM VPower self energy ****
394
if (self_interaction(kfrag(w1))) then
395
if (dutask.eq.taskid) then
396
k1 = indx_frag_start(w1)
404
npair = int_mb(npair_all(1) +(jj-1)*nkatm+ii-1)
405
istart = int_mb(pair_start(1)+(jj-1)*nkatm+ii-1)
407
> E = E + pspw_VPair_E_onecell(npair,
408
> int_mb(type_all(1) +istart),
409
> dbl_mb(param_all(1)+4*istart),
410
> rion(1,kk1),rion(1,kk2))
416
dutask = mod(dutask+1,np)
420
c **** MM/MM VPair self image energy ****
421
if (nshl3d.gt.1) then
423
do j = nion_qm+1,nion
424
if (dutask.eq.taskid) then
426
npair = int_mb(npair_all(1) +(jj-1)*nkatm+jj-1)
427
istart = int_mb(pair_start(1)+(jj-1)*nkatm+jj-1)
429
> E = E + pspw_VPair_E_periodic_image(npair,
430
> int_mb(type_all(1) +istart),
431
> dbl_mb(param_all(1)+4*istart),
435
dutask = mod(dutask+1,np)
439
c **** MM/MM VPair image energy ****
440
do j = (nion_qm+1),(nion-1)
441
if (dutask.eq.taskid) then
445
npair = int_mb(npair_all(1) +(jj-1)*nkatm+ii-1)
446
istart = int_mb(pair_start(1)+(jj-1)*nkatm+ii-1)
448
> E = E + pspw_VPair_E_periodic_self(npair,
449
> int_mb(type_all(1) +istart),
450
> dbl_mb(param_all(1)+4*istart),
451
> rion(1,i),rion(1,j),
455
dutask = mod(dutask+1,np)
460
if (np.gt.1) call Parallel_SumAll(E)
462
end if !*** npairs.gt.0 ***
464
call nwpw_timing_end(40)
472
c *********************************************
474
c * pspw_VPair_E_onecell *
476
c *********************************************
478
real*8 function pspw_VPair_E_onecell(n,t,p,r1,r2)
485
* **** local variables ****
493
r = dsqrt(dx**2 + dy**2 + dz**2)
501
E = E + 4.0d0*p(1,k)*(u12-u6)
502
else if (t(k).eq.2) then
503
E = E + p(1,k)*dexp(-r/p(2,k)) - p(3,k)/r**6
504
else if (t(k).eq.3) then
505
E = E + p(1,k)*dexp(-r/p(2,k)) - p(3,k)/r**6 - p(4,k)/r**8
506
else if (t(k).eq.4) then
507
E = E + p(1,k)*( (r-p(2,k))**p(3,k) )
508
else if (t(k).eq.5) then
509
E = E + p(1,k)*dexp(-r/p(2,k))
510
else if (t(k).eq.6) then
511
E = E + p(1,k)*(1.0d0-dexp(-p(2,k)*(r-p(3,k))))**2
515
pspw_VPair_E_onecell = E
520
c *********************************************
522
c * pspw_VPair_E_periodic *
524
c *********************************************
526
real*8 function pspw_VPair_E_periodic(n,t,p,r1,r2,
534
real*8 rcell(nshl3d,3)
536
* **** local variables ****
550
r = dsqrt(x**2 + y**2 + z**2)
556
E = E + 4.0d0*p(1,k)*(u12-u6)
557
else if (t(k).eq.2) then
558
E = E + p(1,k)*dexp(-r/p(2,k)) - p(3,k)/r**6
559
else if (t(k).eq.3) then
560
E = E+ p(1,k)*dexp(-r/p(2,k)) - p(3,k)/r**6 - p(4,k)/r**8
561
else if (t(k).eq.4) then
562
E = E + p(1,k)*( (r-p(2,k))**p(3,k) )
563
else if (t(k).eq.5) then
564
E = E + p(1,k)*dexp(-r/p(2,k))
565
else if (t(k).eq.6) then
566
E = E + p(1,k)*(1.0d0-dexp(-p(2,k)*(r-p(3,k))))**2
570
pspw_VPair_E_periodic = E
575
c *********************************************
577
c * pspw_VPair_E_periodic_self *
579
c *********************************************
580
real*8 function pspw_VPair_E_periodic_self(n,t,p,r1,r2,
588
real*8 rcell(nshl3d,3)
590
* **** local variables ****
604
r = dsqrt(x**2 + y**2 + z**2)
610
E = E + 4.0d0*p(1,k)*(u12-u6)
611
else if (t(k).eq.2) then
612
E = E + p(1,k)*dexp(-r/p(2,k)) - p(3,k)/r**6
613
else if (t(k).eq.3) then
614
E = E+ p(1,k)*dexp(-r/p(2,k)) - p(3,k)/r**6 - p(4,k)/r**8
615
else if (t(k).eq.4) then
616
E = E + p(1,k)*( (r-p(2,k))**p(3,k) )
617
else if (t(k).eq.5) then
618
E = E + p(1,k)*dexp(-r/p(2,k))
619
else if (t(k).eq.6) then
620
E = E + p(1,k)*(1.0d0-dexp(-p(2,k)*(r-p(3,k))))**2
625
pspw_VPair_E_periodic_self = E
629
c *********************************************
631
c * pspw_VPair_E_periodic_image *
633
c *********************************************
634
real*8 function pspw_VPair_E_periodic_image(n,t,p,nshl3d,rcell)
639
real*8 rcell(nshl3d,3)
641
* **** local variables ****
651
r = dsqrt(x**2 + y**2 + z**2)
657
!E = E + 4.0d0*p(1,k)*(u12-u6)
658
E = E + 2.0d0*p(1,k)*(u12-u6)
659
else if (t(k).eq.2) then
660
!E = E + p(1,k)*dexp(-r/p(2,k)) - p(3,k)/r**6
661
E = E + 0.5d0*p(1,k)*dexp(-r/p(2,k)) - p(3,k)/r**6
662
else if (t(k).eq.3) then
663
E=E+0.5d0*p(1,k)*dexp(-r/p(2,k))-p(3,k)/r**6-p(4,k)/r**8
664
else if (t(k).eq.4) then
665
!E = E +p(1,k)*( (r-p(2,k))**p(3,k) )
666
E = E + 0.5d0*p(1,k)*( (r-p(2,k))**p(3,k) )
667
else if (t(k).eq.5) then
668
!E = E + p(1,k)*dexp( r/p(2,k) )
669
E = E + 0.5d0*p(1,k)*dexp(-r/p(2,k))
670
else if (t(k).eq.6) then
671
E = E+0.50d0*p(1,k)*(1.0d0-dexp(-p(2,k)*(r-p(3,k))))**2
675
pspw_VPair_E_periodic_image = E
682
c *************************************
686
c *************************************
687
subroutine pspw_Pair_fion(nion,nion_qm,katm,
688
> nfrag,indx_frag_start,size_frag,
690
> self_interaction,lmbda,
697
integer indx_frag_start(*),size_frag(*)
699
logical self_interaction(*)
702
real*8 rcell(nshl3d,3)
706
#include "mafdecls.fh"
707
#include "pspw_Pair.fh"
709
* **** local variables ****
710
integer dutask,taskid,np
711
integer i,j,ii,jj,nkatm,npair,istart
712
integer w1,a,k1,kk1,n1
716
* **** external functions ****
720
call nwpw_timing_start(40)
722
if (npairs.gt.0) then
725
call Parallel_taskid(taskid)
729
c **** QM/QM Pair force ****
732
if (dutask.eq.taskid) then
736
npair = int_mb(npair_all(1) +(jj-1)*nkatm+ii-1)
737
istart = int_mb(pair_start(1)+(jj-1)*nkatm+ii-1)
739
> call pspw_VPair_fion_periodic(npair,
740
> int_mb(type_all(1)+istart),
741
> dbl_mb(param_all(1)+4*istart),
742
> rion(1,i),fion(1,i),
743
> rion(1,j),fion(1,j),
747
dutask = mod(dutask+1,np)
751
c **** QM/MM LJ energy ****
752
do j = nion_qm+1,nion
753
if (dutask.eq.taskid) then
757
npair = int_mb(npair_all(1) +(jj-1)*nkatm+ii-1)
758
istart = int_mb(pair_start(1)+(jj-1)*nkatm+ii-1)
760
> call pspw_VPair_fion_periodic(npair,
761
> int_mb(type_all(1) +istart),
762
> dbl_mb(param_all(1)+4*istart),
763
> rion(1,i),fion(1,i),
764
> rion(1,j),fion(1,j),
768
dutask = mod(dutask+1,np)
771
c **** MM/MM LJ 1 cell energy ****
773
if (dutask.eq.taskid) then
775
k1 = indx_frag_start(w1)
776
k2 = indx_frag_start(w2)
783
npair = int_mb(npair_all(1) +(jj-1)*nkatm+ii-1)
784
istart = int_mb(pair_start(1)+(jj-1)*nkatm+ii-1)
786
> call pspw_VPair_fion_onecell(npair,
787
> int_mb(type_all(1) +istart),
788
> dbl_mb(param_all(1)+4*istart),
789
> rion(1,kk1),fion(1,kk1),
790
> rion(1,kk2),fion(1,kk2))
797
dutask = mod(dutask+1,np)
800
c **** MM/MM Pair self energy ****
802
if (self_interaction(kfrag(w1))) then
803
if (dutask.eq.taskid) then
804
k1 = indx_frag_start(w1)
812
npair = int_mb(npair_all(1) +(jj-1)*nkatm+ii-1)
813
istart = int_mb(pair_start(1)+(jj-1)*nkatm+ii-1)
815
> call pspw_VPair_fion_onecell(npair,
816
> int_mb(type_all(1) +istart),
817
> dbl_mb(param_all(1)+4*istart),
818
> rion(1,kk1),fion(1,kk1),
819
> rion(1,kk2),fion(1,kk2))
825
dutask = mod(dutask+1,np)
829
if (nshl3d.gt.1) then
831
c **** MM/MM Pair self image energy - no force ****
832
c **** MM/MM Pair image energy ****
833
do j = (nion_qm+1),(nion-1)
834
if (dutask.eq.taskid) then
838
npair = int_mb(npair_all(1) +(jj-1)*nkatm+ii-1)
839
istart = int_mb(pair_start(1)+(jj-1)*nkatm+ii-1)
841
> call pspw_VPair_fion_periodic_self(npair,
842
> int_mb(type_all(1) +istart),
843
> dbl_mb(param_all(1)+4*istart),
844
> rion(1,i),fion(1,i),
845
> rion(1,j),fion(1,j),
849
dutask = mod(dutask+1,np)
852
end if !*** nshl3d.gt.1 ***
854
end if !*** npairs.gt.0 ***
857
call nwpw_timing_end(40)
862
c *********************************************
864
c * pspw_VPair_fion_periodic *
866
c *********************************************
867
subroutine pspw_VPair_fion_periodic(n,t,p,
876
real*8 rcell(nshl3d,3)
878
* **** local variables ****
882
real*8 dVPair,u,u6,u12
891
r = dsqrt(x**2 + y**2 + z**2)
897
dVPair = -(4.0d0*p(1,k)/r)*(12.0d0*u12-6.0d0*u6)
898
else if (t(k).eq.2) then
899
dVPair= -p(1,k)/p(2,k)*dexp(-r/p(2,k))+6.0d0*p(3,k)/r**7
900
else if (t(k).eq.3) then
901
dVPair= -p(1,k)/p(2,k)*dexp(-r/p(2,k))+6.0d0*p(3,k)/r**7
903
else if (t(k).eq.4) then
904
dVPair = p(1,k)*p(3,k)*( (r-p(2,k))**(p(3,k)-1.0d0) )
905
else if (t(k).eq.5) then
906
dVPair = -p(1,k)/p(2,k)*dexp(-r/p(2,k))
907
else if (t(k).eq.6) then
908
dVpair = 2.0d0*p(1,k)*(1.0d0-dexp(-p(2,k)*(r-p(3,k))))
909
> *p(2,k)*dexp(-p(2,k)*(r-p(3,k)))
913
f1(1) = f1(1) - (x/r)*dVPair
914
f1(2) = f1(2) - (y/r)*dVPair
915
f1(3) = f1(3) - (z/r)*dVPair
916
f2(1) = f2(1) + (x/r)*dVPair
917
f2(2) = f2(2) + (y/r)*dVPair
918
f2(3) = f2(3) + (z/r)*dVPair
927
c *********************************************
929
c * pspw_VPair_fion_periodic_self *
931
c *********************************************
932
subroutine pspw_VPair_fion_periodic_self(n,t,p,
941
real*8 rcell(nshl3d,3)
943
* **** local variables ****
947
real*8 dVPair,u,u6,u12
956
r = dsqrt(x**2 + y**2 + z**2)
962
dVPair = -(4.0d0*p(1,k)/r)*(12.0d0*u12-6.0d0*u6)
963
else if (t(k).eq.2) then
964
dVPair= -p(1,k)/p(2,k)*dexp(-r/p(2,k))+6.0d0*p(3,k)/r**7
965
else if (t(k).eq.3) then
966
dVPair= -p(1,k)/p(2,k)*dexp(-r/p(2,k))+6.0d0*p(3,k)/r**7
968
else if (t(k).eq.4) then
969
dVPair = p(1,k)*p(3,k)*( (r-p(2,k))**(p(3,k)-1.0d0) )
970
else if (t(k).eq.5) then
971
dVPair = -p(1,k)/p(2,k)*dexp(-r/p(2,k))
972
else if (t(k).eq.6) then
973
dVpair = 2.0d0*p(1,k)*(1.0d0-dexp(-p(2,k)*(r-p(3,k))))
974
> *p(2,k)*dexp(-p(2,k)*(r-p(3,k)))
978
f1(1) = f1(1) - (x/r)*dVPair
979
f1(2) = f1(2) - (y/r)*dVPair
980
f1(3) = f1(3) - (z/r)*dVPair
981
f2(1) = f2(1) + (x/r)*dVPair
982
f2(2) = f2(2) + (y/r)*dVPair
983
f2(3) = f2(3) + (z/r)*dVPair
991
c *********************************************
993
c * pspw_VPair_fion_onecell *
995
c *********************************************
996
subroutine pspw_VPair_fion_onecell(n,t,p,r1,f1,r2,f2)
1003
* **** local variables ****
1006
real*8 dVPair,u,u6,u12
1011
r = dsqrt(x**2 + y**2 + z**2)
1017
dVPair = -(4.0d0*p(1,k)/r)*(12.0d0*u12-6.0d0*u6)
1018
else if (t(k).eq.2) then
1019
dVPair= -p(1,k)/p(2,k)*dexp(-r/p(2,k))+6.0d0*p(3,k)/r**7
1020
else if (t(k).eq.3) then
1021
dVPair= -p(1,k)/p(2,k)*dexp(-r/p(2,k))+6.0d0*p(3,k)/r**7
1022
> +8.0d0*p(4,k)/r**9
1023
else if (t(k).eq.4) then
1024
dVPair = p(1,k)*p(3,k)*( (r-p(2,k))**(p(3,k)-1.0d0) )
1025
else if (t(k).eq.5) then
1026
dVPair = -p(1,k)/p(2,k)*dexp(-r/p(2,k))
1027
else if (t(k).eq.6) then
1028
dVpair = 2.0d0*p(1,k)*(1.0d0-dexp(-p(2,k)*(r-p(3,k))))
1029
> *p(2,k)*dexp(-p(2,k)*(r-p(3,k)))
1033
f1(1) = f1(1) - (x/r)*dVPair
1034
f1(2) = f1(2) - (y/r)*dVPair
1035
f1(3) = f1(3) - (z/r)*dVPair
1036
f2(1) = f2(1) + (x/r)*dVPair
1037
f2(2) = f2(2) + (y/r)*dVPair
1038
f2(3) = f2(3) + (z/r)*dVPair