2 |
|
!! Corresponds to the force field defined in lj_FF.cpp |
3 |
|
!! @author Charles F. Vardeman II |
4 |
|
!! @author Matthew Meineke |
5 |
< |
!! @version $Id: calc_LJ_FF.F90,v 1.1 2003-03-07 18:26:30 chuckv Exp $, $Date: 2003-03-07 18:26:30 $, $Name: not supported by cvs2svn $, $Revision: 1.1 $ |
5 |
> |
!! @version $Id: calc_LJ_FF.F90,v 1.2 2003-03-10 19:26:45 chuckv Exp $, $Date: 2003-03-10 19:26:45 $, $Name: not supported by cvs2svn $, $Revision: 1.2 $ |
6 |
|
|
7 |
|
|
8 |
|
|
9 |
|
module lj_ff |
10 |
|
use simulation |
11 |
|
use definitions |
12 |
< |
use generic_atypes |
12 |
> |
use generic_lists |
13 |
|
|
14 |
|
#ifdef IS_MPI |
15 |
|
use mpiSimulation |
25 |
|
public :: getLjPot |
26 |
|
public :: init_ljFF |
27 |
|
|
28 |
< |
type :: lj_mixed |
28 |
> |
type :: lj_mixed_params |
29 |
|
!! Mass of Particle |
30 |
|
real ( kind = dp ) :: mass = 0.0_dp |
31 |
|
!! Lennard-Jones epslon |
36 |
|
real ( kind = dp ) :: sigma2 = 0.0_dp |
37 |
|
!! Lennard-Jones Sigma to sixth |
38 |
|
real ( kind = dp ) :: sigma6 = 0.0_dp |
39 |
< |
end type lj_mixed |
39 |
> |
end type lj_mixed_params |
40 |
|
|
41 |
+ |
type (lj_mixed_params), dimension(:,:) :: ljMixed |
42 |
|
|
42 |
– |
|
43 |
|
contains |
44 |
|
|
45 |
|
subroutine init_ljFF(ListHead,status) |
50 |
|
integer :: myStatus |
51 |
|
|
52 |
|
status = 0 |
53 |
< |
call createMixinList(ListHead,myStatus) |
53 |
> |
call createMixingList(ListHead,myStatus) |
54 |
|
if (myStatus /= 0) then |
55 |
|
status = -1 |
56 |
|
return |
65 |
|
integer :: i |
66 |
|
integer :: j |
67 |
|
|
68 |
< |
integer :: outerCounter = 0 |
69 |
< |
integer :: innerCounter = 0 |
70 |
< |
type (atype), pointer :: tmpPtrOuter => null() |
71 |
< |
type (atype), pointer :: tmpPtrInner => null() |
68 |
> |
integer :: i = 0 |
69 |
> |
integer :: j = 0 |
70 |
> |
type (atype), pointer :: tmpPtr_i => null() |
71 |
> |
type (atype), pointer :: tmpPtr_j => null() |
72 |
|
status = 0 |
73 |
|
|
74 |
|
listSize = getListLen(ListHead) |
87 |
|
|
88 |
|
|
89 |
|
|
90 |
< |
tmpPtrOuter => ljListHead |
91 |
< |
tmpPtrInner => tmpPtrOuter%next |
92 |
< |
do while (associated(tmpPtrOuter)) |
93 |
< |
outerCounter = outerCounter + 1 |
90 |
> |
tmpPtr_i => ListHead |
91 |
> |
tmpPtr_j => tmpPtr_i%next |
92 |
> |
do while (associated(tmpPtr_i)) |
93 |
> |
i = i + 1 |
94 |
|
! do self mixing rule |
95 |
< |
ljMixed(outerCounter,outerCounter)%sigma = tmpPtrOuter%sigma |
95 |
> |
ljMixed(i,i)%sigma = tmpPtr_i%sigma |
96 |
|
|
97 |
< |
ljMixed(outerCounter,outerCounter)%sigma2 = ljMixed(outerCounter,outerCounter)%sigma & |
98 |
< |
* ljMixed(outerCounter,outerCounter)%sigma |
97 |
> |
ljMixed(i,i)%sigma2 = (ljMixed(i,i)%sigma) ** 2 |
98 |
|
|
99 |
< |
ljMixed(outerCounter,outerCounter)%sigma6 = ljMixed(outerCounter,outerCounter)%sigma2 & |
100 |
< |
* ljMixed(outerCounter,outerCounter)%sigma2 & |
102 |
< |
* ljMixed(outerCounter,outerCounter)%sigma2 |
103 |
< |
|
104 |
< |
ljMixed(outerCounter,outerCounter)%epsilon = tmpPtrOuter%epsilon |
99 |
> |
ljMixed(i,i)%sigma6 = (ljMixed(i,i)%sigma) ** 6 |
100 |
> |
ljMixed(i,i)%epsilon = tmpPtr_i%epsilon |
101 |
|
|
102 |
< |
innerCounter = outerCounter + 1 |
103 |
< |
do while (associated(tmpPtrInner)) |
108 |
< |
|
109 |
< |
ljMixed(outerCounter,innerCounter)%sigma = & |
110 |
< |
calcLJMix("sigma",tmpPtrOuter%sigma, & |
111 |
< |
tmpPtrInner%sigma) |
102 |
> |
j = i + 1 |
103 |
> |
do while (associated(tmpPtr_j)) |
104 |
|
|
105 |
< |
ljMixed(outerCounter,innerCounter)%sigma2 = & |
106 |
< |
(ljMixed(outerCounter,innerCounter)%sigma)**2 |
105 |
> |
ljMixed(i,j)%sigma = & |
106 |
> |
calcLJMix("sigma",tmpPtr_i%sigma, & |
107 |
> |
tmpPtr_j%sigma) |
108 |
|
|
109 |
< |
ljMixed(outerCounter,innerCounter)%sigma6 = & |
110 |
< |
(ljMixed(outerCounter,innerCounter)%sigma)**6 |
109 |
> |
ljMixed(i,j)%sigma2 = & |
110 |
> |
(ljMixed(i,j)%sigma)**2 |
111 |
|
|
112 |
< |
ljMixed(outerCounter,innerCounter)%epsilon = & |
113 |
< |
calcLJMix("epsilon",tmpPtrOuter%epsilon, & |
114 |
< |
tmpPtrInner%epsilon) |
115 |
< |
ljMixed(innerCounter,outerCounter)%sigma = ljMixed(outerCounter,innerCounter)%sigma |
116 |
< |
ljMixed(innerCounter,outerCounter)%sigma2 = ljMixed(outerCounter,innerCounter)%sigma2 |
117 |
< |
ljMixed(innerCounter,outerCounter)%sigma6 = ljMixed(outerCounter,innerCounter)%sigma6 |
118 |
< |
ljMixed(innerCounter,outerCounter)%epsilon = ljMixed(outerCounter,innerCounter)%epsilon |
112 |
> |
ljMixed(i,j)%sigma6 = & |
113 |
> |
(ljMixed(i,j)%sigma)**6 |
114 |
> |
|
115 |
> |
ljMixed(i,j)%epsilon = & |
116 |
> |
calcLJMix("epsilon",tmpPtr_i%epsilon, & |
117 |
> |
tmpPtr_j%epsilon) |
118 |
> |
ljMixed(j,i)%sigma = ljMixed(i,j)%sigma |
119 |
> |
ljMixed(j,i)%sigma2 = ljMixed(i,j)%sigma2 |
120 |
> |
ljMixed(j,i)%sigma6 = ljMixed(i,j)%sigma6 |
121 |
> |
ljMixed(j,i)%epsilon = ljMixed(i,j)%epsilon |
122 |
|
|
123 |
|
|
124 |
< |
tmpPtrInner => tmpPtrInner%next |
125 |
< |
innerCounter = innerCounter + 1 |
124 |
> |
tmpPtr_j => tmpPtr_j%next |
125 |
> |
j = j + 1 |
126 |
|
end do |
127 |
|
! advance pointers |
128 |
< |
tmpPtrOuter => tmpPtrOuter%next |
129 |
< |
if (associated(tmpPtrOuter)) then |
130 |
< |
tmpPtrInner => tmpPtrOuter%next |
128 |
> |
tmpPtr_i => tmpPtr_i%next |
129 |
> |
if (associated(tmpPtr_i)) then |
130 |
> |
tmpPtr_j => tmpPtr_i%next |
131 |
|
endif |
132 |
|
|
133 |
|
end do |
151 |
|
!! Second Derivative, optional, used mainly for normal mode calculations. |
152 |
|
real( kind = dp ), intent(out), optional :: d2 |
153 |
|
|
154 |
< |
type (lj_atype), pointer :: atype1 |
155 |
< |
type (lj_atype), pointer :: atype2 |
154 |
> |
type (atype), pointer :: atype1 |
155 |
> |
type (atype), pointer :: atype2 |
156 |
|
|
157 |
|
integer, intent(out), optional :: status |
158 |
|
|