do explicit loop over nlocal to avoid out-of-bounds access with implicit loop
This commit is contained in:
@ -323,44 +323,50 @@ SUBROUTINE f_lammps_find_forces() BIND(C)
|
|||||||
INTEGER(c_int) :: size_tagint
|
INTEGER(c_int) :: size_tagint
|
||||||
INTEGER(c_int), DIMENSION(:), POINTER :: id
|
INTEGER(c_int), DIMENSION(:), POINTER :: id
|
||||||
INTEGER(c_int64_t), DIMENSION(:), POINTER :: tag
|
INTEGER(c_int64_t), DIMENSION(:), POINTER :: tag
|
||||||
|
INTEGER :: i, nlocal
|
||||||
|
|
||||||
f3(:,:) = 0.0_c_double
|
f3(:,:) = 0.0_c_double
|
||||||
f4(:,:) = 0.0_c_double
|
f4(:,:) = 0.0_c_double
|
||||||
size_tagint = lmp%extract_setting('tagint')
|
size_tagint = lmp%extract_setting('tagint')
|
||||||
|
nlocal = lmp%extract_setting('nlocal')
|
||||||
IF (size_tagint == 4_c_int) THEN
|
IF (size_tagint == 4_c_int) THEN
|
||||||
id = lmp%extract_atom('id')
|
id = lmp%extract_atom('id')
|
||||||
WHERE (id == 1_c_int)
|
DO i=1,nlocal
|
||||||
f3(1,:) = 4.0_c_double
|
IF (id(i) == 1_c_int) THEN
|
||||||
f3(2,:) = -4.0_c_double
|
f3(1,i) = 4.0_c_double
|
||||||
f3(3,:) = 6.0_c_double
|
f3(2,i) = -4.0_c_double
|
||||||
f4(1,:) = 10.0_c_double
|
f3(3,i) = 6.0_c_double
|
||||||
f4(2,:) = -10.0_c_double
|
f4(1,i) = 10.0_c_double
|
||||||
f4(3,:) = 12.0_c_double
|
f4(2,i) = -10.0_c_double
|
||||||
ELSEWHERE
|
f4(3,i) = 12.0_c_double
|
||||||
f3(1,:) = 5.0_c_double
|
ELSE
|
||||||
f3(2,:) = -5.0_c_double
|
f3(1,i) = 5.0_c_double
|
||||||
f3(3,:) = 7.0_c_double
|
f3(2,i) = -5.0_c_double
|
||||||
f4(1,:) = 11.0_c_double
|
f3(3,i) = 7.0_c_double
|
||||||
f4(2,:) = -11.0_c_double
|
f4(1,i) = 11.0_c_double
|
||||||
f4(3,:) = 13.0_c_double
|
f4(2,i) = -11.0_c_double
|
||||||
END WHERE
|
f4(3,i) = 13.0_c_double
|
||||||
|
END IF
|
||||||
|
END DO
|
||||||
ELSE
|
ELSE
|
||||||
tag = lmp%extract_atom('id')
|
tag = lmp%extract_atom('id')
|
||||||
WHERE (tag == 1_c_int64_t)
|
DO i=1,nlocal
|
||||||
f3(1,:) = 4.0_c_double
|
IF (tag(i) == 1_c_int64_t) THEN
|
||||||
f3(2,:) = -4.0_c_double
|
f3(1,i) = 4.0_c_double
|
||||||
f3(3,:) = 6.0_c_double
|
f3(2,i) = -4.0_c_double
|
||||||
f4(1,:) = 10.0_c_double
|
f3(3,i) = 6.0_c_double
|
||||||
f4(2,:) = -10.0_c_double
|
f4(1,i) = 10.0_c_double
|
||||||
f4(3,:) = 12.0_c_double
|
f4(2,i) = -10.0_c_double
|
||||||
ELSEWHERE
|
f4(3,i) = 12.0_c_double
|
||||||
f3(1,:) = 5.0_c_double
|
ELSE
|
||||||
f3(2,:) = -5.0_c_double
|
f3(1,i) = 5.0_c_double
|
||||||
f3(3,:) = 7.0_c_double
|
f3(2,i) = -5.0_c_double
|
||||||
f4(1,:) = 11.0_c_double
|
f3(3,i) = 7.0_c_double
|
||||||
f4(2,:) = -11.0_c_double
|
f4(1,i) = 11.0_c_double
|
||||||
f4(3,:) = 13.0_c_double
|
f4(2,i) = -11.0_c_double
|
||||||
END WHERE
|
f4(3,i) = 13.0_c_double
|
||||||
|
END IF
|
||||||
|
END DO
|
||||||
END IF
|
END IF
|
||||||
END SUBROUTINE f_lammps_find_forces
|
END SUBROUTINE f_lammps_find_forces
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user