hdiff output

r30557/genrigid.f90 2016-06-03 19:30:08.118610235 +0100 r30556/genrigid.f90 2016-06-03 19:30:08.358613399 +0100
2513: 2513: 
2514: DOUBLE PRECISION, INTENT(INOUT) :: COORDSA(:)2514: DOUBLE PRECISION, INTENT(INOUT) :: COORDSA(:)
2515: DOUBLE PRECISION, INTENT(IN) :: COORDSB(:)2515: DOUBLE PRECISION, INTENT(IN) :: COORDSB(:)
2516: LOGICAL, INTENT(IN) :: DEBUG, BULKT, TWOD2516: LOGICAL, INTENT(IN) :: DEBUG, BULKT, TWOD
2517: DOUBLE PRECISION, INTENT(OUT) :: DISTANCE, DIST22517: DOUBLE PRECISION, INTENT(OUT) :: DISTANCE, DIST2
2518: DOUBLE PRECISION, INTENT(OUT) :: RMATBEST(3,3)2518: DOUBLE PRECISION, INTENT(OUT) :: RMATBEST(3,3)
2519: 2519: 
2520: INTEGER :: DUMMY_NATOMS2520: INTEGER :: DUMMY_NATOMS
2521: DOUBLE PRECISION, ALLOCATABLE :: DUMMY_COORDSA(:), DUMMY_COORDSB(:)2521: DOUBLE PRECISION, ALLOCATABLE :: DUMMY_COORDSA(:), DUMMY_COORDSB(:)
2522: DOUBLE PRECISION :: TRANSLATION(3)2522: DOUBLE PRECISION :: TRANSLATION(3)
2523: INTEGER :: J1, J2, OFFSET2523: INTEGER :: J1, J2
2524: 2524: 
2525: IF(DEBUG) WRITE(*,*) "genrigid> aligning subset of rigid bodies"2525: IF(DEBUG) WRITE(*,*) "genrigid> aligning subset of rigid bodies"
2526: 2526: 
2527: !DISTANCE=0.0D02527: !DISTANCE=0.0D0
2528: !DO J1=1,3*NATOMS2528: !DO J1=1,3*NATOMS
2529: !     DISTANCE=DISTANCE+(COORDSA(J1)-COORDSB(J1))**22529: !     DISTANCE=DISTANCE+(COORDSA(J1)-COORDSB(J1))**2
2530: !ENDDO2530: !ENDDO
2531: !IF(DEBUG) WRITE(*,*) "genrigid> Total distance before alignment=", SQRT(DISTANCE)2531: !IF(DEBUG) WRITE(*,*) "genrigid> Total distance before alignment=", SQRT(DISTANCE)
2532: !write(*,*) "COORDSA before alignment", COORDSA2532: !write(*,*) "COORDSA before alignment", COORDSA
2533: !write(*,*) "COORDSB before alignment", COORDSB2533: !write(*,*) "COORDSB before alignment", COORDSB
2534: 2534: 
2535: DUMMY_NATOMS = 02535: DUMMY_NATOMS = 0
2536: DO J1 = 1, N_TO_ALIGN2536: DO J1 = 1, N_TO_ALIGN
2537:     DUMMY_NATOMS = DUMMY_NATOMS + NSITEPERBODY(TO_ALIGN(J1))2537:     DUMMY_NATOMS = DUMMY_NATOMS + NSITEPERBODY(TO_ALIGN(J1))
2538: ENDDO2538: ENDDO
2539: 2539: 
2540: ALLOCATE(DUMMY_COORDSA(3*DUMMY_NATOMS),DUMMY_COORDSB(3*DUMMY_NATOMS))2540: ALLOCATE(DUMMY_COORDSA(3*DUMMY_NATOMS),DUMMY_COORDSB(3*DUMMY_NATOMS))
2541: 2541: 
2542: OFFSET = 0 
2543: DO J1 = 1, N_TO_ALIGN2542: DO J1 = 1, N_TO_ALIGN
2544:     DO J2 = 1, NSITEPERBODY(TO_ALIGN(J1))2543:     DO J2 = 1, NSITEPERBODY(TO_ALIGN(J1))
2545:         DUMMY_COORDSA(OFFSET+3*J2-2:3*J2) = COORDSA(3*RIGIDGROUPS(J2,TO_ALIGN(J1))-2:3*RIGIDGROUPS(J2,TO_ALIGN(J1)))2544:         DUMMY_COORDSA(3*J2-2:3*J2) = COORDSA(3*RIGIDGROUPS(J2,TO_ALIGN(J1))-2:3*RIGIDGROUPS(J2,TO_ALIGN(J1)))
2546:         DUMMY_COORDSB(OFFSET+3*J2-2:3*J2) = COORDSB(3*RIGIDGROUPS(J2,TO_ALIGN(J1))-2:3*RIGIDGROUPS(J2,TO_ALIGN(J1)))2545:         DUMMY_COORDSB(3*J2-2:3*J2) = COORDSB(3*RIGIDGROUPS(J2,TO_ALIGN(J1))-2:3*RIGIDGROUPS(J2,TO_ALIGN(J1)))
2547:     ENDDO2546:     ENDDO
2548:     OFFSET = OFFSET+3*NSITEPERBODY(TO_ALIGN(J1)) 
2549: ENDDO2547: ENDDO
2550: 2548: 
2551: ALIGNRBST = .FALSE. ! Switch this off temporarily so we don't end up back at this routine (infinite loop)2549: ALIGNRBST = .FALSE. ! Switch this off temporarily so we don't end up back at this routine (infinite loop)
2552: 2550: 
2553: ! Use MINPERMDIST to obtain RMAT, the rotation matrix that puts DUMMYCOORDSA into the best alignment2551: ! Use MINPERMDIST to obtain RMAT, the rotation matrix that puts DUMMYCOORDSA into the best alignment
2554: ! with DUMMYCOORDSB2552: ! with DUMMYCOORDSB
2555: CALL MINPERMDIST(DUMMY_COORDSB(:),DUMMY_COORDSA(:),DUMMY_NATOMS,.FALSE., &2553: CALL MINPERMDIST(DUMMY_COORDSB(:),DUMMY_COORDSA(:),DUMMY_NATOMS,.FALSE., &
2556:           BULK_BOXVEC(1),BULK_BOXVEC(2),BULK_BOXVEC(3),.FALSE.,.FALSE.,DISTANCE,DIST2,.FALSE.,RMATBEST)2554:           BULK_BOXVEC(1),BULK_BOXVEC(2),BULK_BOXVEC(3),.FALSE.,.FALSE.,DISTANCE,DIST2,.FALSE.,RMATBEST)
2557: 2555: 
2558: IF(DEBUG) WRITE(*,*) "genrigid> Distance for aligned subset=", SQRT(DISTANCE)2556: IF(DEBUG) WRITE(*,*) "genrigid> Distance for aligned subset=", SQRT(DISTANCE)
2559: 2557: 
2560: ALIGNRBST = .TRUE.2558: ALIGNRBST = .TRUE.
2561: 2559: 
2562: ! MINPERMDIST should also have aligned the centres of mass, so we can extract the required translation from DUMMY_COORDSA2560: ! MINPERMDIST should also have aligned the centres of mass, so we can extract the required translation from DUMMY_COORDSA
2563: TRANSLATION(:) = DUMMY_COORDSA(1:3)-COORDSA(3*RIGIDGROUPS(1,TO_ALIGN(1))-2:3*RIGIDGROUPS(1,TO_ALIGN(1)))2561: TRANSLATION(:) = DUMMY_COORDSA(1:3)-COORDSA(3*RIGIDGROUPS(1,TO_ALIGN(1))-2:3*RIGIDGROUPS(1,TO_ALIGN(1)))
2564: 2562: 
2565: DIST2 = 0.0D02563: DIST2 = 0.0D0
2566: ! Apply the translation and rotation returned from MINPERMDIST, and calculate the optimised distance. 
2567: DO J1 = 1,NATOMS2564: DO J1 = 1,NATOMS
2568:     COORDSA(3*J1-2:3*J1) = COORDSA(3*J1-2:3*J1)+TRANSLATION(:)2565:     COORDSA(3*J1-2:3*J1) = COORDSA(3*J1-2:3*J1)+TRANSLATION(:)
2569:     COORDSA(3*J1-2:3*J1) = MATMUL(RMATBEST,COORDSA(3*J1-2:3*J1))2566:     COORDSA(3*J1-2:3*J1) = MATMUL(RMATBEST,COORDSA(3*J1-2:3*J1))
2570:     DIST2 = DIST2 + (COORDSA(3*J1-2)-COORDSB(3*J1-2))**2 + &2567:     DIST2 = DIST2 + (COORDSA(3*J1-2)-COORDSB(3*J1-2))**2 + &
2571:                     (COORDSA(3*J1-1)-COORDSB(3*J1-1))**2 + &2568:                     (COORDSA(3*J1-1)-COORDSB(3*J1-1))**2 + &
2572:                     (COORDSA(3*J1)-COORDSB(3*J1))**22569:                     (COORDSA(3*J1)-COORDSB(3*J1))**2
2573: ENDDO2570: ENDDO
2574: 2571: 
2575: DISTANCE=SQRT(DIST2)2572: DISTANCE=SQRT(DIST2)
2576: 2573: 


legend
Lines Added 
Lines changed
 Lines Removed

hdiff - version: 2.1.0