hdiff output

r31306/mc_gbh.F90 2016-10-12 18:30:15.834220895 +0100 r31305/mc_gbh.F90 2016-10-12 18:30:16.098224432 +0100
 15: !   You should have received a copy of the GNU General Public License 15: !   You should have received a copy of the GNU General Public License
 16: !   along with this program; if not, write to the Free Software     16: !   along with this program; if not, write to the Free Software    
 17: !   Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA 17: !   Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
 18: ! 18: !
 19: SUBROUTINE MC_GBH(NSTEPS) 19: SUBROUTINE MC_GBH(NSTEPS)
 20:   ! 20:   !
 21:   USE PORFUNCS 21:   USE PORFUNCS
 22:   USE COMMONS, ONLY : MYNODE, MYUNIT, DEBUG, NATOMSALLOC, NQ, & 22:   USE COMMONS, ONLY : MYNODE, MYUNIT, DEBUG, NATOMSALLOC, NQ, &
 23:        TSTART, COORDS, LABELS, ECONV, BOXCENTROIDT,RANDMULTIPERMT, & 23:        TSTART, COORDS, LABELS, ECONV, BOXCENTROIDT,RANDMULTIPERMT, &
 24:        NPAR_GBH, TEMP, RMS, TARGET, HIT, QALCST, QALCS_NBRHD, & 24:        NPAR_GBH, TEMP, RMS, TARGET, HIT, QALCST, QALCS_NBRHD, &
 25:        QALCSV, RESTART, NRELAX, STEP 25:        QALCSV
 26:   ! 26:   !
 27:   IMPLICIT NONE 27:   IMPLICIT NONE
 28:   ! 28:   !
 29: #ifdef MPI  29: #ifdef MPI 
 30:   INCLUDE 'mpif.h' 30:   INCLUDE 'mpif.h'
 31:   INTEGER MPIERR 31:   INTEGER MPIERR
 32: #endif 32: #endif
 33:   ! 33:   !
 34:   INTEGER, INTENT(IN) :: NSTEPS 34:   INTEGER, INTENT(IN) :: NSTEPS
 35:   ! 35:   !
 36:   LOGICAL :: ACCEPT 36:   LOGICAL :: ACCEPT
 37:   INTEGER :: I, ITRIAL, ITERNS, BRUN, QDONE, NQTOT, IPROC, IPROCLO, & 37:   INTEGER :: I, ITRIAL, ITERNS, BRUN, QDONE, NQTOT, IPROC, IPROCLO
 38:        NDUDSTREAK 38:   DOUBLE PRECISION :: TIME, SCREENC(3*NATOMSALLOC), POTEL, &
 39:   DOUBLE PRECISION :: TIME, SCREENC(3*NATOMSALLOC), POTEL, EXTRA, & 39:        POTEL_LIST(NPAR_GBH), POTELO, ELOWEST, R, DPRAND
 40:        POTEL_LIST(NPAR_GBH), POTELO, ELOWEST, R, DPRAND, EREF 
 41:   ! 40:   !
 42:   COMMON /MYPOT/ POTEL 41:   COMMON /MYPOT/ POTEL
 43:   ! 42:   !
 44:   WRITE(MYUNIT, '(A)')  'mc_gbh> Calculating initial energy' 43:   WRITE(MYUNIT, '(A)')  'mc_gbh> Calculating initial energy'
 45:   !WRITE(MYUNIT, *)  'mc_gbh> NATOMSALLOC=', NATOMSALLOC 44:   !WRITE(MYUNIT, *)  'mc_gbh> NATOMSALLOC=', NATOMSALLOC
 46:   CALL FLUSH(MYUNIT) 45:   CALL FLUSH(MYUNIT)
 47:   CALL QUENCH(.FALSE.,1,ITERNS,TIME,BRUN,QDONE,SCREENC) 46:   CALL QUENCH(.FALSE.,1,ITERNS,TIME,BRUN,QDONE,SCREENC)
 48:   NQ(1) = 0 47:   NQ(1) = 0
 49:   WRITE(MYUNIT,& 48:   WRITE(MYUNIT,&
 50:        '(A,I10,A,G20.10,A,I5,A,G12.5,A,F10.1)') & 49:        '(A,I10,A,G20.10,A,I5,A,G12.5,A,F10.1)') &
 51:        'Qu ',NQ(1),' E= ',POTEL,' steps= ',ITERNS,' RMS= ',RMS,& 50:        'Qu ',NQ(1),' E= ',POTEL,' steps= ',ITERNS,' RMS= ',RMS,&
 52:        ' t= ',TIME-TSTART 51:        ' t= ',TIME-TSTART
 53:   CALL FLUSH(MYUNIT) 52:   CALL FLUSH(MYUNIT)
 54:   ! 53:   !
 55:   WRITE(MYUNIT, '(A,I6)') & 54:   WRITE(MYUNIT, '(A,I6)') &
 56:        'mc_gbh> Starting GBH loop of length ',NSTEPS 55:        'mc_gbh> Starting GBH loop of length ',NSTEPS
 57:   ! 56:   !
 58:   EREF=1.0D+99 
 59:   NDUDSTREAK=0 
 60:   gbh_loop: DO ITRIAL=1,NSTEPS 57:   gbh_loop: DO ITRIAL=1,NSTEPS
 61:      ! 58:      !
 62:      IF(QALCSV) WRITE(MYUNIT, '(A,I10)') & 59:      IF(QALCSV) WRITE(MYUNIT, '(A,I10)') &
 63:           'mc_gbh> Starting iteration ', ITRIAL      60:           'mc_gbh> Starting iteration ', ITRIAL     
 64:      POTELO=POTEL 61:      POTELO=POTEL
 65:      ! 62:      !
 66:      IF(RESTART.AND.NDUDSTREAK >= NRELAX) THEN 
 67:         EXTRA=STEP(1) 
 68:         EREF=1.0D+99 
 69:         NDUDSTREAK=0 
 70:         WRITE(MYUNIT,'(A,I9)') & 
 71:              'mc_gbh> Big shake on iteration ',ITRIAL 
 72:      ELSE 
 73:         EXTRA=0.0D0 
 74:      ENDIF 
 75:      ! 
 76:      ! --- Stochastic cartesian move ------- 63:      ! --- Stochastic cartesian move -------
 77:      !CALL TAKESTEP(1) 64:      CALL TAKESTEP(1)
 78:      DO I=1,3*NATOMSALLOC 
 79:         R=(DPRAND()-0.5D0)*2.0D0 
 80:         COORDS(I,1)=COORDS(I,1) + STEP(1)*R + EXTRA*SIGN(1.0D0,R) 
 81:      ENDDO 
 82:      ! 
 83:      !IF (RANDMULTIPERMT.AND.MOD(J1,RANDMULTIPERM_STEP)==0) & 65:      !IF (RANDMULTIPERMT.AND.MOD(J1,RANDMULTIPERM_STEP)==0) &
 84:      !     CALL RANDMULTIPERM(1) ! re-write this routine!!!!! 66:      !     CALL RANDMULTIPERM(1) ! re-write this routine!!!!!
 85:      !IF(BOXCENTROIDT) CALL BOXCENTROID(COORDS(:,1)) 67:      !IF(BOXCENTROIDT) CALL BOXCENTROID(COORDS(:,1))
 86:      ! 68:      !
 87:      ! Quench perturbed state 69:      ! Quench perturbed state
 88:      NQ(1) = NQ(1) + 1 70:      NQ(1) = NQ(1) + 1
 89:      CALL QUENCH(.FALSE.,1,ITERNS,TIME,BRUN,QDONE,SCREENC) 71:      CALL QUENCH(.FALSE.,1,ITERNS,TIME,BRUN,QDONE,SCREENC)
 90:      WRITE(MYUNIT,& 72:      WRITE(MYUNIT,&
 91:           '(A,I10,A,G20.10,A,I5,A,G12.5,A,F10.1)') & 73:           '(A,I10,A,G20.10,A,I5,A,G12.5,A,F10.1)') &
 92:           'Qu ',NQ(1),' E= ',POTEL,' steps= ',ITERNS,' RMS= ',& 74:           'Qu ',NQ(1),' E= ',POTEL,' steps= ',ITERNS,' RMS= ',&
102:      POTEL_LIST(1) = POTEL 84:      POTEL_LIST(1) = POTEL
103: #endif 85: #endif
104:      ! 86:      !
105:      IF(MYNODE==0) THEN 87:      IF(MYNODE==0) THEN
106:         ! Find lowest energy in the gathered list. 88:         ! Find lowest energy in the gathered list.
107:         ELOWEST=MINVAL(POTEL_LIST) 89:         ELOWEST=MINVAL(POTEL_LIST)
108:         IPROCLO=MINLOC(POTEL_LIST, 1)-1 90:         IPROCLO=MINLOC(POTEL_LIST, 1)-1
109:         ! Choose a IPROC with Boltzmann probability. 91:         ! Choose a IPROC with Boltzmann probability.
110:         CALL CHOOSE_FROM_LIST(NPAR_GBH,POTEL_LIST,IPROC) 92:         CALL CHOOSE_FROM_LIST(NPAR_GBH,POTEL_LIST,IPROC)
111:         IPROC=IPROC-1 93:         IPROC=IPROC-1
112:         ! 
113:      ENDIF 94:      ENDIF
114:      ! 95:      !
115: #ifdef MPI  96: #ifdef MPI 
116:      ! Broadcast IPROC from master 97:      ! Broadcast IPROC from master
117:      CALL MPI_BCAST(IPROC,1,MPI_INTEGER,& 98:      CALL MPI_BCAST(IPROC,1,MPI_INTEGER,&
118:           0,MPI_COMM_WORLD,MPIERR) 99:           0,MPI_COMM_WORLD,MPIERR)
119:      ! Broadcast state from IPROC100:      ! Broadcast state from IPROC
120:      CALL MPI_BCAST(COORDS(:,1),3*NATOMSALLOC,&101:      CALL MPI_BCAST(COORDS(:,1),3*NATOMSALLOC,&
121:           MPI_DOUBLE_PRECISION,IPROC,MPI_COMM_WORLD,MPIERR)102:           MPI_DOUBLE_PRECISION,IPROC,MPI_COMM_WORLD,MPIERR)
122:      CALL MPI_BCAST(LABELS(:,1),NATOMSALLOC,MPI_INTEGER,&103:      CALL MPI_BCAST(LABELS(:,1),NATOMSALLOC,MPI_INTEGER,&
123:           IPROC,MPI_COMM_WORLD,MPIERR)104:           IPROC,MPI_COMM_WORLD,MPIERR)
124:      CALL MPI_BCAST(POTEL,1,MPI_DOUBLE_PRECISION,&105:      CALL MPI_BCAST(POTEL,1,MPI_DOUBLE_PRECISION,&
125:           IPROC,MPI_COMM_WORLD,MPIERR)106:           IPROC,MPI_COMM_WORLD,MPIERR)
126:      IF(QALCSV) WRITE(MYUNIT, '(A,F20.10,A,I6)') &107:      WRITE(MYUNIT, '(A,F20.10,A,I6)') &
127:           'mc_gbh> Use E= ', POTEL,' from node ',IPROC+1108:           'mc_gbh> Use E= ', POTEL,' from node ',IPROC+1
128:      ! Broadcast HIT from IPROCLO if targetting...109:      ! Broadcast HIT from IPROCLO if targetting...
129:      IF(TARGET) THEN110:      IF(TARGET) THEN
130:         ! Broadcast IPROCLO from master111:         ! Broadcast IPROCLO from master
131:         CALL MPI_BCAST(IPROCLO,1,MPI_INTEGER,&112:         CALL MPI_BCAST(IPROCLO,1,MPI_INTEGER,&
132:              0,MPI_COMM_WORLD,MPIERR)113:              0,MPI_COMM_WORLD,MPIERR)
133:         CALL MPI_BCAST(HIT,1,MPI_LOGICAL,&114:         CALL MPI_BCAST(HIT,1,MPI_LOGICAL,&
134:              IPROCLO,MPI_COMM_WORLD,MPIERR)        115:              IPROCLO,MPI_COMM_WORLD,MPIERR)        
135:      ENDIF116:      ENDIF
136: #endif                     117: #endif                     
137:      !118:      !
138:      IF(POTEL < EREF - ECONV) THEN 
139:         EREF = POTEL 
140:         NDUDSTREAK=0 
141:      ELSE 
142:         NDUDSTREAK = NDUDSTREAK+1 
143:      ENDIF 
144:      ! 
145:      IF(HIT) THEN119:      IF(HIT) THEN
146:         WRITE(MYUNIT,'(A,I3,A,I6)') &120:         WRITE(MYUNIT,'(A,I3,A,I6)') &
147:              'mc_gbh> Target hit stochastically by node ',IPROCLO+1,&121:              'mc_gbh> Target hit stochastically by node ',IPROCLO+1,&
148:              ' on trial ',ITRIAL122:              ' on trial ',ITRIAL
149:         EXIT gbh_loop123:         EXIT gbh_loop
150:      ENDIF124:      ENDIF
151:      !125:      !
152:      ! --- Deterministic refinement --------------------------126:      ! --- Deterministic refinement --------------------------
153:      IF(.NOT.HIT .AND. QALCST .AND. QALCS_NBRHD>0 &127:      IF(.NOT.HIT .AND. QALCST .AND. QALCS_NBRHD>0 &
154:           .AND. ABS(POTEL-POTELO)>ECONV) THEN128:           .AND. ABS(POTEL-POTELO)>ECONV) THEN


legend
Lines Added 
Lines changed
 Lines Removed

hdiff - version: 2.1.0