hdiff output

r33369/align_decide.f90 2017-10-04 18:30:39.268595420 +0100 r33368/align_decide.f90 2017-10-04 18:30:40.152607081 +0100
 14:  14: 
 15: IMPLICIT NONE 15: IMPLICIT NONE
 16:  16: 
 17: INTEGER NATOMS 17: INTEGER NATOMS
 18: DOUBLE PRECISION DIST2, COORDSA(3*NATOMS), COORDSB(3*NATOMS), DISTANCE, RMATBEST(3,3) 18: DOUBLE PRECISION DIST2, COORDSA(3*NATOMS), COORDSB(3*NATOMS), DISTANCE, RMATBEST(3,3)
 19: LOGICAL DEBUG, TWOD, RIGID, BULKT, SAVEPERMOPT, SAVEPERMINVOPT 19: LOGICAL DEBUG, TWOD, RIGID, BULKT, SAVEPERMOPT, SAVEPERMINVOPT
 20: DOUBLE PRECISION NBOXLX,NBOXLY,NBOXLZ 20: DOUBLE PRECISION NBOXLX,NBOXLY,NBOXLZ
 21:  21: 
 22: ! Start by performing some sanity checks, to make sure the keywords being used are compatible with the requested alignment method. 22: ! Start by performing some sanity checks, to make sure the keywords being used are compatible with the requested alignment method.
 23:  23: 
 24: IF (DEBUG .AND. BULKT .AND. ((ABS(NBOXLX-BOXLX).GT.1.0D-8) .OR. (ABS(NBOXLY-BOXLY).GT.1.0D-8) .OR. (ABS(NBOXLZ-BOXLZ).GT.1.0D-8))) THEN 24: IF (DEBUG .AND. ((ABS(NBOXLX-BOXLX).GT.1.0D-8) .OR. (ABS(NBOXLX-BOXLX).GT.1.0D-8) .OR. (ABS(NBOXLX-BOXLX).GT.1.0D-8))) THEN
 25:    WRITE(MYUNIT,*) "align_decide> ERROR: Box parameters passed in as arguments differ to those USEd from COMMONS." 25:    WRITE(MYUNIT,*) "align_decide> ERROR: Box parameters passed in as arguments differ to those USEd from COMMONS."
 26:    WRITE(MYUNIT,*) "Passed in: ", NBOXLX,NBOXLY,NBOXLZ 26:    WRITE(MYUNIT,*) "Passed in: ", NBOXLX,NBOXLY,NBOXLZ
 27:    WRITE(MYUNIT,*) "USEd: ", BOXLX, BOXLY, BOXLZ 27:    WRITE(MYUNIT,*) "USEd: ", BOXLX, BOXLY, BOXLZ
 28:    STOP 1 28:    STOP 1
 29: ENDIF   29: ENDIF  
 30:  30: 
 31: IF (FASTOVERLAPT .OR. BNB_ALIGNT) THEN 31: IF (FASTOVERLAPT .OR. BNB_ALIGNT) THEN
 32:    IF ((RIGIDINIT .AND. (.NOT.ATOMRIGIDCOORDT)) .OR. RIGID) THEN 32:    IF ((RIGIDINIT .AND. (.NOT.ATOMRIGIDCOORDT)) .OR. RIGID) THEN
 33:       WRITE(MYUNIT,*) "align_decide> fastoverlap and BNB methods do not work in rigid body coordinates. Use cartesians instead." 33:       WRITE(MYUNIT,*) "align_decide> fastoverlap and BNB methods do not work in rigid body coordinates. Use cartesians instead."
 34:       STOP 34:       STOP
 46:       PERMINVOPT = .FALSE. 46:       PERMINVOPT = .FALSE.
 47:    ELSE 47:    ELSE
 48:       PERMOPT = .TRUE. 48:       PERMOPT = .TRUE.
 49:       IF(.NOT.NOINVERSION) PERMINVOPT=.TRUE.  ! Inversion isomers will be identified unless you have NOINVERSION set! 49:       IF(.NOT.NOINVERSION) PERMINVOPT=.TRUE.  ! Inversion isomers will be identified unless you have NOINVERSION set!
 50:    ENDIF 50:    ENDIF
 51:  51: 
 52: ENDIF 52: ENDIF
 53:  53: 
 54: ! Now perform the actual alignment call. 54: ! Now perform the actual alignment call.
 55:  55: 
 56: ! FASTOVERLAP and BNB are not designed to work with LOCALPERMDIST. 56: IF (FASTOVERLAPT) THEN
 57: ! Using these new routines for non-permutable systems (without PERMDIST) is unnecessary and likely to be inefficient. 
 58: ! So in both of these cases, we bypass the new alignment routines and go straight to MINPERMDIST. 
 59: IF (PERMDIST .AND. (.NOT. LOCALPERMDIST)) THEN 
 60:  
 61:    IF (FASTOVERLAPT) THEN 
 62:     57:    
 63:       IF(BULKT) THEN 58:    IF(BULKT) THEN
 64:          IF (DEBUG) WRITE(MYUNIT,*) "align_decide> using fastoverlap periodic alignment" 59:       IF (DEBUG) WRITE(MYUNIT,*) "align_decide> using fastoverlap periodic alignment"
 65:          CALL FOM_ALIGN_BULK(COORDSB,COORDSA,NATOMS,DEBUG,BOXLX,BOXLY,BOXLZ,KERNELWIDTH,NDISPLACEMENTS,DISTANCE,DIST2) 60:       CALL FOM_ALIGN_BULK(COORDSB,COORDSA,NATOMS,DEBUG,BOXLX,BOXLY,BOXLZ,KERNELWIDTH,NDISPLACEMENTS,DISTANCE,DIST2)
 66:       ELSE 
 67:          IF (DEBUG) WRITE(MYUNIT,*) "align_decide> using fastoverlap cluster alignment" 
 68:          CALL FOM_ALIGN_CLUSTERS(COORDSB,COORDSA,NATOMS,DEBUG,MAX_ANGMOM,KERNELWIDTH,DISTANCE,DIST2,RMATBEST,NROTATIONS) 
 69:       ENDIF 
 70:  
 71:    ELSE IF (BNB_ALIGNT) THEN 
 72:  
 73:       IF(DEBUG) WRITE(MYUNIT,*) "align_decide> using BNB align" 
 74:       CALL BNB_ALIGN(COORDSB,COORDSA,NATOMS,DEBUG,BOXLX,BOXLY,BOXLZ,BULKT,DISTANCE,DIST2,RMATBEST,BNB_NSTEPS) 
 75:  
 76:    ELSE 61:    ELSE
 77:       IF(DEBUG) WRITE(MYUNIT,*) "align_decide> using original MINPERMDIST routine" 62:       IF (DEBUG) WRITE(MYUNIT,*) "align_decide> using fastoverlap cluster alignment"
 78:       CALL MINPERMDIST(COORDSB,COORDSA,NATOMS,DEBUG,BOXLX,BOXLY,BOXLZ,BULKT,TWOD,DISTANCE,DIST2,RIGID,RMATBEST) 63:       CALL FOM_ALIGN_CLUSTERS(COORDSB,COORDSA,NATOMS,DEBUG,MAX_ANGMOM,KERNELWIDTH,DISTANCE,DIST2,RMATBEST,NROTATIONS)
 79:  
 80:    ENDIF 64:    ENDIF
 81:  65: 
 82: ELSE 66: ELSE IF (BNB_ALIGNT) THEN
 83:  67: 
 84:    IF (DEBUG .AND. (FASTOVERLAPT .OR. BNB_ALIGNT)) THEN 68:    IF(DEBUG) WRITE(MYUNIT,*) "align_decide> using BNB align"
 85:       WRITE(MYUNIT,*) "Warning: Specified new ALIGN routines without PERMDIST or with LOCALPERMDIST. Using MINPERMDIST instead." 69:    CALL BNB_ALIGN(COORDSB,COORDSA,NATOMS,DEBUG,BOXLX,BOXLY,BOXLZ,BULKT,DISTANCE,DIST2,RMATBEST,BNB_NSTEPS)
 86:    ENDIF 70: 
  71: ELSE
 87:    IF(DEBUG) WRITE(MYUNIT,*) "align_decide> using original MINPERMDIST routine" 72:    IF(DEBUG) WRITE(MYUNIT,*) "align_decide> using original MINPERMDIST routine"
 88:    CALL MINPERMDIST(COORDSB,COORDSA,NATOMS,DEBUG,BOXLX,BOXLY,BOXLZ,BULKT,TWOD,DISTANCE,DIST2,RIGID,RMATBEST) 73:    CALL MINPERMDIST(COORDSB,COORDSA,NATOMS,DEBUG,BOXLX,BOXLY,BOXLZ,BULKT,TWOD,DISTANCE,DIST2,RIGID,RMATBEST)
 89:  74: 
  75: ENDIF
  76: 
 90: IF (FASTOVERLAPT .OR. BNB_ALIGNT) THEN 77: IF (FASTOVERLAPT .OR. BNB_ALIGNT) THEN
 91:    PERMOPT = SAVEPERMOPT; PERMINVOPT = SAVEPERMINVOPT 78:    PERMOPT = SAVEPERMOPT; PERMINVOPT = SAVEPERMINVOPT
 92: ENDIF 79: ENDIF
 93:  80: 
 94: END SUBROUTINE 81: END SUBROUTINE


r33369/alignutils.f90 2017-10-04 18:30:39.488598323 +0100 r33368/alignutils.f90 2017-10-04 18:30:40.376610037 +0100
 64: !    PAIRDIST(C1, C2) 64: !    PAIRDIST(C1, C2)
 65: !        calculates the distance between points C1 and C2 65: !        calculates the distance between points C1 and C2
 66: !        includes periodic boundary conditions 66: !        includes periodic boundary conditions
 67:  67: 
 68:  68: 
 69: ! INCLUDE "commons.f90" 69: ! INCLUDE "commons.f90"
 70:  70: 
 71: MODULE ALIGNUTILS 71: MODULE ALIGNUTILS
 72:  72: 
 73: USE COMMONS, ONLY : PERMGROUP, NPERMSIZE, NPERMGROUP, BESTPERM, MYUNIT, & 73: USE COMMONS, ONLY : PERMGROUP, NPERMSIZE, NPERMGROUP, BESTPERM, MYUNIT, &
 74:  & NSETS, SETS, NOINVERSION, BOXLX, BOXLY, BOXLZ, OHCELLT, TWOD!, PERMDIST, PERMOPT 74:  & NSETS, SETS, PERMINVOPT, NOINVERSION, BOXLX, BOXLY, BOXLZ, OHCELLT, TWOD!, PERMDIST, PERMOPT
 75: USE PREC, ONLY: INT64, REAL64 75: USE PREC, ONLY: INT64, REAL64
 76:  76: 
 77: IMPLICIT NONE 77: IMPLICIT NONE
 78:  78: 
 79: INTEGER, SAVE :: NATOMS, NLAP, NPERM, PATOMS, NTRIES, INFO 79: INTEGER, SAVE :: NATOMS, NLAP, NPERM, PATOMS, NTRIES, INFO
 80: INTEGER, SAVE :: PMAXNEI = 60 80: INTEGER, SAVE :: PMAXNEI = 60
 81: DOUBLE PRECISION, PARAMETER :: PSCALE = 1.D6 ! Scale for linear assignment problem 81: DOUBLE PRECISION, PARAMETER :: PSCALE = 1.D6 ! Scale for linear assignment problem
 82: INTEGER, PARAMETER :: MAXIMUMTRIES=20 ! Maximum number of iterations 82: INTEGER, PARAMETER :: MAXIMUMTRIES=20 ! Maximum number of iterations
 83:  83: 
 84: ! Arrays of distances and nearest neighbour distances 84: ! Arrays of distances and nearest neighbour distances


r33369/fastbulk.f90 2017-10-04 18:30:39.708601225 +0100 r33368/fastbulk.f90 2017-10-04 18:30:40.600612991 +0100
618: IMPLICIT NONE618: IMPLICIT NONE
619: 619: 
620: INTEGER, INTENT(IN) :: NCOORDS, NWAVE, NCOEFF620: INTEGER, INTENT(IN) :: NCOORDS, NWAVE, NCOEFF
621: DOUBLE PRECISION, INTENT(IN) :: COORDS(3*NCOORDS), WAVEK(3,2*NWAVE+1,2*NWAVE+1,2*NWAVE+1)621: DOUBLE PRECISION, INTENT(IN) :: COORDS(3*NCOORDS), WAVEK(3,2*NWAVE+1,2*NWAVE+1,2*NWAVE+1)
622: !COMPLEX(KIND=REAL64), INTENT(OUT) :: FCOEFF(NCOEFF,NCOEFF,NCOEFF)622: !COMPLEX(KIND=REAL64), INTENT(OUT) :: FCOEFF(NCOEFF,NCOEFF,NCOEFF)
623: COMPLEX(REAL64), INTENT(OUT) :: FCOEFF(NCOEFF,NCOEFF,NCOEFF)623: COMPLEX(REAL64), INTENT(OUT) :: FCOEFF(NCOEFF,NCOEFF,NCOEFF)
624: 624: 
625: INTEGER IX,IY,IZ, J, K625: INTEGER IX,IY,IZ, J, K
626: DOUBLE PRECISION KR626: DOUBLE PRECISION KR
627: 627: 
 628: NATOMS=NCOORDS
628: FCOEFF = CMPLX(0.d0,0.d0,REAL64)629: FCOEFF = CMPLX(0.d0,0.d0,REAL64)
629: DO IX=1,2*NWAVE+1630: DO IX=1,2*NWAVE+1
630:     DO IY=1,2*NWAVE+1631:     DO IY=1,2*NWAVE+1
631:         DO IZ=1,2*NWAVE+1632:         DO IZ=1,2*NWAVE+1
632: !            FCOEFF(IX,IY,IZ) = CMPLX(0.d0,0.d0)633: !            FCOEFF(IX,IY,IZ) = CMPLX(0.d0,0.d0)
633:             DO J=1, NCOORDS634:             DO J=1, NATOMS
634:                 KR=0.d0635:                 KR=0.d0
635:                 DO K=1,3636:                 DO K=1,3
636:                     KR = KR + COORDS(3*J-3+K) * WAVEK(K,IX,IY,IZ)637:                     KR = KR + COORDS(3*J-3+K) * WAVEK(K,IX,IY,IZ)
637:                 ENDDO638:                 ENDDO
638:                 FCOEFF(IX,IY,IZ) = FCOEFF(IX,IY,IZ) + EXP(CMPLX(0.d0, -KR, REAL64))639:                 FCOEFF(IX,IY,IZ) = FCOEFF(IX,IY,IZ) + EXP(CMPLX(0.d0, -KR, REAL64))
639:             ENDDO640:             ENDDO
640:         ENDDO641:         ENDDO
641:     ENDDO642:     ENDDO
642: ENDDO643: ENDDO
643: 644: 


r33369/minpermdist.f90 2017-10-04 18:30:39.928604127 +0100 r33368/minpermdist.f90 2017-10-04 18:30:40.824615947 +0100
251: !251: !
252: ! We don't want to do the standard orientation for PERMOPT or PERMINVOPT because then we always start252: ! We don't want to do the standard orientation for PERMOPT or PERMINVOPT because then we always start
253: ! from the same orientations and never make progress. Permutation-inversion isomers253: ! from the same orientations and never make progress. Permutation-inversion isomers
254: ! should still be recognisable eventually!254: ! should still be recognisable eventually!
255: !255: !
256: 256: 
257: IF ((NFREEZE.LE.0).AND.(.NOT.CSMT).AND.(.NOT.PERMOPT).AND.(.NOT.PERMINVOPT)) THEN257: IF ((NFREEZE.LE.0).AND.(.NOT.CSMT).AND.(.NOT.PERMOPT).AND.(.NOT.PERMINVOPT)) THEN
258: ! IF ((NFREEZE.LE.0).AND.(.NOT.CSMT)) THEN258: ! IF ((NFREEZE.LE.0).AND.(.NOT.CSMT)) THEN
259:    IF (BULKT) THEN259:    IF (BULKT) THEN
260:       NORBIT1=1; NORBIT2=1; NORBITB1=1; NORBITB2=1;260:       NORBIT1=1; NORBIT2=1; NORBITB1=1; NORBITB2=1;
261:  
262:       CALL BULKMINDIST(DUMMYB,DUMMYA,NATOMS,DISTANCE,TWOD,DEBUG,BOXLX,BOXLY,BOXLZ,PITEST,.TRUE.)261:       CALL BULKMINDIST(DUMMYB,DUMMYA,NATOMS,DISTANCE,TWOD,DEBUG,BOXLX,BOXLY,BOXLZ,PITEST,.TRUE.)
263: !262: !
264: ! If PITEST is true we are just checking for permutation-inversion isomers.263: ! If PITEST is true we are just checking for permutation-inversion isomers.
265: !264: !
266:       IF (PITEST) THEN265:       IF (PITEST) THEN
267:          COORDSA(1:3*NATOMS)=DUMMYA(1:3*NATOMS)266:          COORDSA(1:3*NATOMS)=DUMMYA(1:3*NATOMS)
268:          RMATBEST(1:3,1:3)=0.0D0267:          RMATBEST(1:3,1:3)=0.0D0
269:          RMATBEST(1,1)=1.0D0; RMATBEST(2,2)=1.0D0; RMATBEST(3,3)=1.0D0268:          RMATBEST(1,1)=1.0D0; RMATBEST(2,2)=1.0D0; RMATBEST(3,3)=1.0D0
270:          DISTANCE=SQRT(DISTANCE)269:          DISTANCE=SQRT(DISTANCE)
271:          RETURN270:          RETURN


legend
Lines Added 
Lines changed
 Lines Removed

hdiff - version: 2.1.0