hdiff output

r29899/rotate_hinge_takestep.f90 2016-03-16 18:33:26.714990436 +0000 r29898/rotate_hinge_takestep.f90 2016-03-16 18:33:26.906992410 +0000
 37:     ! 37:     !
 38:     ! The second line of each set contains a list of indices specifying which hinges will move. These indices must match the order in which the plates are specified in rbodyconfig. 38:     ! The second line of each set contains a list of indices specifying which hinges will move. These indices must match the order in which the plates are specified in rbodyconfig.
 39:     ! 39:     !
 40:     ! The third line contains a list of 4 atom indices. These are the reference atoms for the hinge. They should fall into 2 pairs 40:     ! The third line contains a list of 4 atom indices. These are the reference atoms for the hinge. They should fall into 2 pairs
 41:     ! (listed one after the other), with each pair straddling the hinge and joined by a stiff spring. 41:     ! (listed one after the other), with each pair straddling the hinge and joined by a stiff spring.
 42:     ! The two atoms on one side of the hinge should be connected by a vector parallel to the hinge. 42:     ! The two atoms on one side of the hinge should be connected by a vector parallel to the hinge.
 43:  43: 
 44:  44: 
 45:     OPEN(UNIT=22,FILE='hingeconfig',status='old') 45:     OPEN(UNIT=22,FILE='hingeconfig',status='old')
 46:     READ(22,*) NHINGES 46:     READ(22,*) NHINGES
 47:     IF(DEBUG) WRITE(MYUNIT,*) "Reading hingeconfig. NHINGES:", NHINGES 47: 
 48:     ALLOCATE(REFATOMS(NHINGES,4))  ! We may eventually want to move to 6 reference atoms so as to compute the angle between the two hinges as well. 48:     ALLOCATE(REFATOMS(NHINGES,4))  ! We may eventually want to move to 6 reference atoms so as to compute the angle between the two hinges as well.
 49:     ALLOCATE(PLATE_SETS(NHINGES,1)) 49:     ALLOCATE(PLATE_SETS(NHINGES,1))
 50:     ALLOCATE(SET_SIZES(NHINGES)) 50:     ALLOCATE(SET_SIZES(NHINGES))
 51:  51: 
 52:     DO J1=1,NHINGES 52:     DO J1=1,NHINGES
 53:        READ(22,*) SET_SIZES(J1) 53:        READ(22,*) SET_SIZES(J1)
 54:  
 55:        IF(DEBUG) WRITE(MYUNIT,'(A,I2,A)') "Hinge ", J1,". Moving side:" 
 56:  
 57:        READ(22,*) PLATE_SETS(J1,1:SET_SIZES(J1)) 54:        READ(22,*) PLATE_SETS(J1,1:SET_SIZES(J1))
 58:  55:        READ(22,*) REFATOMS(J1,:) 
 59:        IF(DEBUG) WRITE(MYUNIT,*) PLATE_SETS(J1,:) 
 60:  
 61:        READ(22,*) REFATOMS(J1,:) 
 62:  
 63:        IF(DEBUG) THEN 
 64:            WRITE(MYUNIT,*) "Reference atoms:" 
 65:            WRITE(MYUNIT,*) REFATOMS(J1,:) 
 66:        ENDIF 
 67:  
 68:     END DO 56:     END DO
 69:     CLOSE(22) 57:     CLOSE(22)
 70:  58: 
  59:     IF(DEBUG) THEN
  60:         WRITE(MYUNIT,*) "Read hingeconfig. NHINGES:", NHINGES
  61:         DO J1=1,NHINGES
  62:             WRITE(MYUNIT,'(A,I2,A)') "Hinge ", J1,". Moving side:"
  63:             WRITE(MYUNIT,*) PLATE_SETS(J1,:)
  64:             WRITE(MYUNIT,*) "Reference atoms:"
  65:             WRITE(MYUNIT,*) REFATOMS(J1,:)
  66:         ENDDO
  67:     ENDIF
  68: 
 71: END SUBROUTINE HINGE_INITIALISE 69: END SUBROUTINE HINGE_INITIALISE
 72:  70: 
 73: SUBROUTINE HINGE_ROTATE(XCOORDS, ROTATEFACTOR) 71: SUBROUTINE HINGE_ROTATE(XCOORDS, ROTATEFACTOR)
 74:  72: 
 75:     USE COMMONS, ONLY: NATOMS 73:     USE COMMONS, ONLY: NATOMS
 76:     USE ROTATIONS, ONLY: rot_aa2mx 74:     USE ROTATIONS, ONLY: rot_aa2mx
 77:     USE GENRIGID, ONLY: NSITEPERBODY, RIGIDGROUPS 75:     USE GENRIGID, ONLY: NSITEPERBODY, RIGIDGROUPS
 78:  76: 
 79:     IMPLICIT NONE 77:     IMPLICIT NONE
 80:  78: 
 81:     INTEGER :: J1, J2, J3, ATOM, PLATE_INDEX 79:     INTEGER :: J1, J2, J3, ATOM, PLATE_INDEX
 82:     DOUBLE PRECISION :: REFPOINT(3), PI, TWOPI, DPRAND 80:     DOUBLE PRECISION :: REFPOINT(3), PI, TWOPI, DPRAND
 83:     DOUBLE PRECISION :: AXIS(3), MATRIX(3,3), TOROTATE(3), ATOMROTATED(3) 81:     DOUBLE PRECISION :: AXIS(3), MATRIX(3,3), TOROTATE(3), ATOMROTATED(3)
 84:     DOUBLE PRECISION :: ANGLE, NORM 82:     DOUBLE PRECISION :: ANGLE, NORM
 85:     DOUBLE PRECISION, INTENT(INOUT) :: XCOORDS(3*NATOMS) 83:     DOUBLE PRECISION, INTENT(INOUT) :: XCOORDS(3*NATOMS)
 86:     DOUBLE PRECISION, INTENT(IN) :: ROTATEFACTOR 84:     DOUBLE PRECISION, INTENT(IN) :: ROTATEFACTOR
 87:  85: 
 88:     ! Current implementation - somewhat crude - is to change every hinge every time the subroutine is called. We pick a random rotation angle between -pi*rotatefactor and pi*rotatefactor 86:     ! Current implementation - somewhat crude - is to change every hinge every time the subroutine is called. We pick a random rotation angle between -pi*rotatefactor and pi*rotatefactor
 89:  87: 
 90: !    write(*,*) "Before hinge takestep" 88:     write(*,*) "Before hinge takestep"
 91: !    write(*,*) XCOORDS 89:     write(*,*) XCOORDS
 92:  90: 
 93:     MATRIX(:,:) = 0.0D0 91:     MATRIX(:,:) = 0.0D0
 94:     TOROTATE(:) = 0.0D0 92:     TOROTATE(:) = 0.0D0
 95:     ! Define some constants 93:     ! Define some constants
 96:     PI=ATAN(1.0D0)*4 94:     PI=ATAN(1.0D0)*4
 97:     TWOPI=2.0D0*PI 95:     TWOPI=2.0D0*PI
 98:  96: 
 99:     ! Loop over all hinges 97:     ! Loop over all hinges
100:     DO J1 = 1, NHINGES 98:     DO J1 = 1, NHINGES
101:  99: 
157:         DO J2 = 1, NATOMS155:         DO J2 = 1, NATOMS
158:             XCOORDS(3*J2-2:3*J2) = XCOORDS(3*J2-2:3*J2) + REFPOINT(:)156:             XCOORDS(3*J2-2:3*J2) = XCOORDS(3*J2-2:3*J2) + REFPOINT(:)
159:         ENDDO157:         ENDDO
160: 158: 
161: !        write(*,*) "After hinge", J1159: !        write(*,*) "After hinge", J1
162: !        write(*,*) XCOORDS160: !        write(*,*) XCOORDS
163: 161: 
164: 162: 
165:     ENDDO  ! End of loop over hinges163:     ENDDO  ! End of loop over hinges
166: 164: 
167: !    write(*,*) "After hinge takestep"165:     write(*,*) "After hinge takestep"
168: !    write(*,*) XCOORDS166:     write(*,*) XCOORDS
169: END SUBROUTINE HINGE_ROTATE167: END SUBROUTINE HINGE_ROTATE
170: 168: 
171: END MODULE169: END MODULE
172: 170: 


legend
Lines Added 
Lines changed
 Lines Removed

hdiff - version: 2.1.0