hdiff output

r29683/commons.f90 2016-03-16 18:35:12.712080342 +0000 r29682/commons.f90 2016-03-16 18:35:13.900092552 +0000
 98:      &        BARRIERSHORT, FREEZE, RATESHORT, DUMMYRUNT, REWEIGHTT, REGROUPFREET, RFMULTIT, REGROUPFREEABT, READMINT, & 98:      &        BARRIERSHORT, FREEZE, RATESHORT, DUMMYRUNT, REWEIGHTT, REGROUPFREET, RFMULTIT, REGROUPFREEABT, READMINT, &
 99:      &        DUMPGROUPST, FREEPAIRT, KSHORTESTPATHST, KSHORT_FULL_PRINTT, DIJINITFLYT, BHINTERPT, ICINTERPT, & 99:      &        DUMPGROUPST, FREEPAIRT, KSHORTESTPATHST, KSHORT_FULL_PRINTT, DIJINITFLYT, BHINTERPT, ICINTERPT, &
100:      &        DUMMYTST, DOCKT, DSTAGE(6), USEPAIRST, LOWESTFRQT, BISECTT, NGTDISCONNECTALL, ANGLEAXIS2, TFOLDT, &100:      &        DUMMYTST, DOCKT, DSTAGE(6), USEPAIRST, LOWESTFRQT, BISECTT, NGTDISCONNECTALL, ANGLEAXIS2, TFOLDT, &
101:      &        SLURMT, INDEXCOSTFUNCTION, CVT, DOST, IMFRQT, CLOSEFILEST, PULLT, FRICTIONT, ATOMMATCHFULL, &101:      &        SLURMT, INDEXCOSTFUNCTION, CVT, DOST, IMFRQT, CLOSEFILEST, PULLT, FRICTIONT, ATOMMATCHFULL, &
102:      &        INTCONSTRAINTT, CHECKCONINT, INTLJT, INTERPCOSTFUNCTION, REMOVEUNCONNECTEDT, ATOMMATCHDIST, &102:      &        INTCONSTRAINTT, CHECKCONINT, INTLJT, INTERPCOSTFUNCTION, REMOVEUNCONNECTEDT, ATOMMATCHDIST, &
103:      &        DBPT, DBPTDT, DMBLPYT, EFIELDT, MSSTOCKT, NTIPT, PAHAT, PAPT, PATCHYDT, STOCKAAT, RBAAT, RBSYMT, TRAPT, SILANET, &103:      &        DBPT, DBPTDT, DMBLPYT, EFIELDT, MSSTOCKT, NTIPT, PAHAT, PAPT, PATCHYDT, STOCKAAT, RBAAT, RBSYMT, TRAPT, SILANET, &
104:      &        OHCELLT, INTFREEZET, LPERMDIST, PBST, RANDOMMETRICT, SSHT, ALLTST, USERPOTT, CHECKMINT, &104:      &        OHCELLT, INTFREEZET, LPERMDIST, PBST, RANDOMMETRICT, SSHT, ALLTST, USERPOTT, CHECKMINT, &
105:      &        CHECKTST, CHECKSPT, FROMLOWESTT, ADDMINXYZT, MACHINE, RATESCYCLET, NOINVERSION, NEWCONNECTIONST, NIMET, NIHEAM7T, &105:      &        CHECKTST, CHECKSPT, FROMLOWESTT, ADDMINXYZT, MACHINE, RATESCYCLET, NOINVERSION, NEWCONNECTIONST, NIMET, NIHEAM7T, &
106:      &        NIH2LEPST, DISTANCET, RATETARGETT, TARGETHIT, ALLOWABT, MICROTHERMT, RFKMCT, REGROUPKMCT, ONEREGROUPT, PHI4MODT, &106:      &        NIH2LEPST, DISTANCET, RATETARGETT, TARGETHIT, ALLOWABT, MICROTHERMT, RFKMCT, REGROUPKMCT, ONEREGROUPT, PHI4MODT, &
107:      &        PERSISTT, REGROUPPERSISTT, NOLABELST, SHANNONT, MAKEPAIRS, SKIPPAIRST, PERSISTAPPROXT, ALLCOMPONENTST, &107:      &        PERSISTT, REGROUPPERSISTT, NOLABELST, SHANNONT, MAKEPAIRS, SKIPPAIRST, PERSISTAPPROXT, ALLCOMPONENTST, &
108:      &        SHANNONRT, SHANNONZT, CUDAT108:      &        SHANNONRT, SHANNONZT
109: 109: 
110:       LOGICAL, ALLOCATABLE :: SHIFTABLE(:)110:       LOGICAL, ALLOCATABLE :: SHIFTABLE(:)
111:       CHARACTER(LEN=80) COORDSLIGANDSTR, COORDSCOMPLEXSTR, COORDSPROTEINSTR111:       CHARACTER(LEN=80) COORDSLIGANDSTR, COORDSCOMPLEXSTR, COORDSPROTEINSTR
112:       CHARACTER(LEN=80) EXEC,EXECGMIN112:       CHARACTER(LEN=80) EXEC,EXECGMIN
113:       CHARACTER(LEN=80) PATHNAME, MINNAME, ADDMINXYZNAME, ALLCOMPS113:       CHARACTER(LEN=80) PATHNAME, MINNAME, ADDMINXYZNAME, ALLCOMPS
114:       CHARACTER(LEN=150) COPYFILES114:       CHARACTER(LEN=150) COPYFILES
115:       CHARACTER(LEN=80) USEPAIRSFILE115:       CHARACTER(LEN=80) USEPAIRSFILE
116:       CHARACTER(LEN=80) MAKEPAIRSFILE116:       CHARACTER(LEN=80) MAKEPAIRSFILE
117:       CHARACTER(LEN=2) DIRECTION117:       CHARACTER(LEN=2) DIRECTION
118:       CHARACTER(LEN=5) UNCONNECTEDS118:       CHARACTER(LEN=5) UNCONNECTEDS


r29683/keywords.f 2016-03-16 18:35:12.904082314 +0000 r29682/keywords.f 2016-03-16 18:35:14.212095761 +0000
249: 249: 
250:       USEPAIRST=.FALSE.250:       USEPAIRST=.FALSE.
251:       LOWESTFRQT=.FALSE.251:       LOWESTFRQT=.FALSE.
252:       IMFRQT=.FALSE.252:       IMFRQT=.FALSE.
253:       EVCUT=2.0D-6253:       EVCUT=2.0D-6
254: 254: 
255:       BISECTT=.FALSE.255:       BISECTT=.FALSE.
256:       DIAGT=.FALSE.256:       DIAGT=.FALSE.
257:       ARNOLDIT=.FALSE.257:       ARNOLDIT=.FALSE.
258:       SLURMT=.FALSE.258:       SLURMT=.FALSE.
259:       CUDAT=.FALSE. 
260:       CVT=.FALSE.259:       CVT=.FALSE.
261:       SHANNONT=.FALSE.260:       SHANNONT=.FALSE.
262:       SHANNONRT=.FALSE.261:       SHANNONRT=.FALSE.
263:       SHANNONZT=.FALSE.262:       SHANNONZT=.FALSE.
264:       NPEQ=100263:       NPEQ=100
265:       MICROTHERMT=.FALSE.264:       MICROTHERMT=.FALSE.
266:       DOST=.FALSE.265:       DOST=.FALSE.
267:       CHECKCONNECTIONST=.FALSE.266:       CHECKCONNECTIONST=.FALSE.
268:       NEWCONNECTIONST=.FALSE.267:       NEWCONNECTIONST=.FALSE.
269:       CONNMINSTART=1268:       CONNMINSTART=1
2149: 2148: 
2150: !      ELSE IF (WORD.EQ.'ST') THEN2149: !      ELSE IF (WORD.EQ.'ST') THEN
2151: 2150: 
2152: !         STOCKAAT = .TRUE.2151: !         STOCKAAT = .TRUE.
2153: !         NRBSITES = 12152: !         NRBSITES = 1
2154: !         ALLOCATE(RBSITE(NRBSITES,3))2153: !         ALLOCATE(RBSITE(NRBSITES,3))
2155: !         RBSITE(1,:) = 0.D02154: !         RBSITE(1,:) = 0.D0
2156: C2155: C
2157: C  Node specification in nodes.info file in slurm format.2156: C  Node specification in nodes.info file in slurm format.
2158: C2157: C
2159:       ELSE IF (WORD.EQ.'SLURM') THEN2158: !      ELSE IF (WORD.EQ.'SLURM') THEN ! Keywords SSH and PBS work fine with SLURM
2160:          SLURMT=.TRUE.2159: !         SLURMT=.TRUE.
2161:          CALL GETNODES(NCPU)2160: !        CALL READI(JPN)
2162:       ELSE IF (WORD.EQ.'CUDA') THEN2161: !         CALL GETNODES(NCPU)
2163:          CUDAT=.TRUE. 
2164: C2162: C
2165: C  Make the initial min.A and min.B files using information in path.info.<PATHNAME> and2163: C  Make the initial min.A and min.B files using information in path.info.<PATHNAME> and
2166: C  output.<PATHNAME>. This sets up a single A and a single B minimum, which are specified2164: C  output.<PATHNAME>. This sets up a single A and a single B minimum, which are specified
2167: C  by STARTMINA and STARTMINB. For path.info files in the DUMPALLPATHS format, these2165: C  by STARTMINA and STARTMINB. For path.info files in the DUMPALLPATHS format, these
2168: C  will usually not be the first and last entries!2166: C  will usually not be the first and last entries!
2169: C2167: C
2170:       ELSE IF (WORD.EQ.'STARTFROMPATH') THEN2168:       ELSE IF (WORD.EQ.'STARTFROMPATH') THEN
2171:          STARTFROMPATH=.TRUE.2169:          STARTFROMPATH=.TRUE.
2172:          CALL READA(PATHNAME)2170:          CALL READA(PATHNAME)
2173:          CALL READI(STARTMINA)2171:          CALL READI(STARTMINA)


r29683/main.F 2016-03-16 18:35:13.100084326 +0000 r29682/main.F 2016-03-16 18:35:14.448098187 +0000
 75:       PRINTT=.TRUE. 75:       PRINTT=.TRUE.
 76:       TTSSEARCH=0.0D0 76:       TTSSEARCH=0.0D0
 77:       TPFOLD=0.0D0 77:       TPFOLD=0.0D0
 78:       TTFOLD=0.0D0 78:       TTFOLD=0.0D0
 79:       TDIJKSTRA=0.0D0 79:       TDIJKSTRA=0.0D0
 80:       TKSHORTESTPATHS=0.0D0 80:       TKSHORTESTPATHS=0.0D0
 81:       TCONNECTDIST=0.0D0 81:       TCONNECTDIST=0.0D0
 82:       TGT=0.0D0 82:       TGT=0.0D0
 83:       PRINT '(A,A70)', 'PATHSAMPLE version r',VERSIONTEMP 83:       PRINT '(A,A70)', 'PATHSAMPLE version r',VERSIONTEMP
 84:       CALL KEYWORDS 84:       CALL KEYWORDS
 85:       IF (SLURMT .AND. (PBST.OR.SSHT)) THEN 
 86:          PRINT '(A)','Keyword SLURM should not be used with keywords PBS or SSH. ' 
 87:          STOP 
 88:       END IF 
 89:       IF ((PERMDIST.OR.PERMISOMER).AND.(CHARMMT).AND.(NPERMGROUP.EQ.NATOMS)) THEN 85:       IF ((PERMDIST.OR.PERMISOMER).AND.(CHARMMT).AND.(NPERMGROUP.EQ.NATOMS)) THEN
 90:          PRINT '(A)','main> Likely error in input - PERM set without perm.allow file for CHARMM potential' 86:          PRINT '(A)','main> Likely error in input - PERM set without perm.allow file for CHARMM potential'
 91:          STOP 87:          STOP
 92:       ENDIF 88:       ENDIF
 93:       IF ((PERMDIST.OR.PERMISOMER).AND.(VERIFY('perm.allow',COPYFILES).NE.0)) THEN 89:       IF ((PERMDIST.OR.PERMISOMER).AND.(VERIFY('perm.allow',COPYFILES).NE.0)) THEN
 94: ! 90: !
 95: ! This is not an error for monoatomic systems. 91: ! This is not an error for monoatomic systems.
 96: ! 92: !
 97:          PRINT '(A)','main> WARNING - PERM set without perm.allow file in COPYFILES' 93:          PRINT '(A)','main> WARNING - PERM set without perm.allow file in COPYFILES'
 98:       ENDIF 94:       ENDIF
231: 227: 
232:          NFFINISH=3*(NATOMS-NGLY)-6228:          NFFINISH=3*(NATOMS-NGLY)-6
233:          KAPPA=3*(NATOMS-NGLY)-6229:          KAPPA=3*(NATOMS-NGLY)-6
234:       ENDIF230:       ENDIF
235: 231: 
236:       WRITE(*,'(A)') '*************************************************************************************************'232:       WRITE(*,'(A)') '*************************************************************************************************'
237:       IF (.NOT.DEBUG) WRITE(*,'(A)') 'debug printing is OFF'233:       IF (.NOT.DEBUG) WRITE(*,'(A)') 'debug printing is OFF'
238:       IF (DEBUG) WRITE(*,'(A)') 'debug printing is ON'234:       IF (DEBUG) WRITE(*,'(A)') 'debug printing is ON'
239:       IF (PBST) THEN235:       IF (PBST) THEN
240:          WRITE(*,'(A,I10,A)') 'Running on ',NCPU,' processors for distributed memory PBS setup'236:          WRITE(*,'(A,I10,A)') 'Running on ',NCPU,' processors for distributed memory PBS setup'
241:       ELSE IF (SLURMT) THEN 
242:          WRITE(*,'(A,I10,A)') 'Running on ',NCPU,' processors for distributed memory SLURM setup' 
243:       ELSE237:       ELSE
244:          WRITE(*,'(A,I10,A)') 'Running on ',NCPU,' processors for shared memory, single node setup'238:          WRITE(*,'(A,I10,A)') 'Running on ',NCPU,' processors for shared memory, single node setup'
245:       ENDIF239:       ENDIF
246:       WRITE(*,'(A,I10)') 'Number of jobs per processor=',JPN240:       WRITE(*,'(A,I10)') 'Number of jobs per processor=',JPN
247:       WRITE(*,'(A,2G20.10)') 'Sleep times between OPTIM job submissions (s)=',SLEEPTIME1,SLEEPTIME2241:       WRITE(*,'(A,2G20.10)') 'Sleep times between OPTIM job submissions (s)=',SLEEPTIME1,SLEEPTIME2
248:       IF (TRIM(ADJUSTL(COPYFILES)).NE.'') 242:       IF (TRIM(ADJUSTL(COPYFILES)).NE.'') 
249:      &  PRINT '(2A)','The following additional files will be copied to distributed nodes: ',TRIM(ADJUSTL(COPYFILES))243:      &  PRINT '(2A)','The following additional files will be copied to distributed nodes: ',TRIM(ADJUSTL(COPYFILES))
250:       IF (ADDPT) WRITE(*,'(A)') 'all permutational isomers with different moments of inertia will be enumerated automatically'244:       IF (ADDPT) WRITE(*,'(A)') 'all permutational isomers with different moments of inertia will be enumerated automatically'
251:       IF (NTAG.GT.0) THEN245:       IF (NTAG.GT.0) THEN
252:          PRINT '(I10,A)',NTAG,' tagged atoms with mass factors:'246:          PRINT '(I10,A)',NTAG,' tagged atoms with mass factors:'
520:       WRITE(*,'(A)') '*************************************************************************************************'514:       WRITE(*,'(A)') '*************************************************************************************************'
521: 515: 
522:       IF (REGROUPT.AND.(NATTEMPT.GT.0)) THEN516:       IF (REGROUPT.AND.(NATTEMPT.GT.0)) THEN
523:          PRINT '(A)','ERROR - regroup can only be called once, set CYCLES=0'517:          PRINT '(A)','ERROR - regroup can only be called once, set CYCLES=0'
524: !        STOP518: !        STOP
525:       ENDIF519:       ENDIF
526:       IF (RELATIVEET.AND.(NATTEMPT.GT.0)) THEN520:       IF (RELATIVEET.AND.(NATTEMPT.GT.0)) THEN
527:          PRINT '(A)','ERROR - relative energy can only be subtracted for static databases. set CYCLES=0'521:          PRINT '(A)','ERROR - relative energy can only be subtracted for static databases. set CYCLES=0'
528: !        STOP522: !        STOP
529:       ENDIF523:       ENDIF
530:       IF (DOCKT) THEN524:       IF (DOCKT) CALL DOCK
531:          IF (SLURMT) THEN 
532:             PRINT '(A)','main> Job submission using srun is not implemented for keyword DOCK. ' 
533:             STOP 
534:          END IF 
535:          CALL DOCK 
536:       END IF 
537:       IF (SIST) THEN525:       IF (SIST) THEN
538:          CALL SETUP_SIS526:          CALL SETUP_SIS
539:       ELSE527:       ELSE
540:          CALL SETUP528:          CALL SETUP
541:       ENDIF529:       ENDIF
542:       IF (CHECKMINT) THEN530:       IF (CHECKMINT) THEN
543:          IF (CHECKSPS.LE.0) CHECKSPS=1531:          IF (CHECKSPS.LE.0) CHECKSPS=1
544:          IF (CHECKSPF.LE.0) CHECKSPF=NMIN532:          IF (CHECKSPF.LE.0) CHECKSPF=NMIN
545:          PRINT '(2(A,I10))','Checking minima from ',CHECKSPS,' to ',CHECKSPF533:          PRINT '(2(A,I10))','Checking minima from ',CHECKSPS,' to ',CHECKSPF
546:          INQUIRE(FILE='odata.checksp',EXIST=YESNOT)534:          INQUIRE(FILE='odata.checksp',EXIST=YESNOT)


r29683/nodes.f90 2016-03-16 18:35:13.296086337 +0000 r29682/nodes.f90 2016-03-16 18:35:14.648100244 +0000
 28:           IMPLICIT NONE 28:           IMPLICIT NONE
 29:       29:      
 30:           INTEGER,INTENT(OUT) :: NCPU 30:           INTEGER,INTENT(OUT) :: NCPU
 31:  31: 
 32:           INTEGER :: I 32:           INTEGER :: I
 33:           INTEGER,PARAMETER :: UNIT1=91 33:           INTEGER,PARAMETER :: UNIT1=91
 34:           CHARACTER(LEN=80) :: ARG 34:           CHARACTER(LEN=80) :: ARG
 35:  35: 
 36:           WRITE(*,'(A,I1,A)') 'GetNodes> Will run ',JPN,' jobs per core' 36:           WRITE(*,'(A,I1,A)') 'GetNodes> Will run ',JPN,' jobs per core'
 37:           INQUIRE(FILE='nodes.info',EXIST=YESNO) 37:           INQUIRE(FILE='nodes.info',EXIST=YESNO)
 38:           IF (YESNO.AND.(PBST.OR.SLURMT)) THEN 38:           IF (YESNO.AND.PBST) THEN
 39:              OPEN(UNIT=1,FILE='nodes.info',STATUS='OLD') 39:              OPEN(UNIT=1,FILE='nodes.info',STATUS='OLD')
 40:              IF (.FALSE.) THEN 40:              IF (.FALSE.) THEN
 41:                 READ(1,'(A)') NODESTRING 41:                 READ(1,'(A)') NODESTRING
 42:                 READ(1,*) NNODES 42:                 READ(1,*) NNODES
 43:                 IF (NNODES.EQ.1) THEN ! no list to pick apart! 43:                 IF (NNODES.EQ.1) THEN ! no list to pick apart!
 44:                    NNLEN=JPN*NNODES 44:                    NNLEN=JPN*NNODES
 45:                    IF (ALLOCATED(NODENAME)) DEALLOCATE(NODENAME) ! to allow for calling keyword more than once 45:                    IF (ALLOCATED(NODENAME)) DEALLOCATE(NODENAME) ! to allow for calling keyword more than once
 46:                    ALLOCATE(NODENAME(NNLEN)) 46:                    ALLOCATE(NODENAME(NNLEN))
 47:                    NCPU=JPN*NNODES 47:                    NCPU=JPN*NNODES
 48:                    WRITE(*,'(A,I6)') 'GetNodes> Number of simultaneous OPTIM jobs=',NCPU 48:                    WRITE(*,'(A,I6)') 'GetNodes> Number of simultaneous OPTIM jobs=',NCPU
115:                 CLOSE(1)115:                 CLOSE(1)
116:                 PRINT '(A,I8,A)','GetNodes> Complete list of cores to be used for ',NCPU,' jobs:'116:                 PRINT '(A,I8,A)','GetNodes> Complete list of cores to be used for ',NCPU,' jobs:'
117:                 PRINT '(A)',NODENAME(1:NCPU)117:                 PRINT '(A)',NODENAME(1:NCPU)
118:              ELSE118:              ELSE
119:                 READ(1,*) NNODES119:                 READ(1,*) NNODES
120:                 NNLEN=JPN*NNODES120:                 NNLEN=JPN*NNODES
121:                 IF (ALLOCATED(NODENAME)) DEALLOCATE(NODENAME) ! to allow for calling keyword more than once121:                 IF (ALLOCATED(NODENAME)) DEALLOCATE(NODENAME) ! to allow for calling keyword more than once
122:                 ALLOCATE(NODENAME(NNLEN))122:                 ALLOCATE(NODENAME(NNLEN))
123:                 NCPU=JPN*NNODES123:                 NCPU=JPN*NNODES
124:                 WRITE(*,'(A,I2)') 'GetNodes> Number of simultaneous OPTIM jobs=',NCPU124:                 WRITE(*,'(A,I2)') 'GetNodes> Number of simultaneous OPTIM jobs=',NCPU
125:                 IF (.NOT.SLURMT) THEN125:              
126:                    SSHPARALLEL=.TRUE.126:                 SSHPARALLEL=.TRUE.   
127:                 END IF 
128:                 WRITE(*,'(a,i2,a)') 'GetNodes> Following ',NNODES,' nodes are available:'127:                 WRITE(*,'(a,i2,a)') 'GetNodes> Following ',NNODES,' nodes are available:'
129:                 DO I=1,NNODES128:                 DO I=1,NNODES
130:                      READ(1,'(a)') arg129:                      READ(1,'(a)') arg
131:                      PRINT '(A)', TRIM(ADJUSTL(arg))130:                      PRINT '(A)', TRIM(ADJUSTL(arg))
132:                      NODENAME(JPN*(I-1)+1:JPN*I)=ADJUSTL(ARG)131:                      NODENAME(JPN*(I-1)+1:JPN*I)=ADJUSTL(ARG)
133:                 ENDDO132:                 ENDDO
134:                 READ(1,'(A)') USERNAME133:                 READ(1,'(A)') USERNAME
135:                 READ(1,'(A)') WORKINGDIRECTORY134:                 READ(1,'(A)') WORKINGDIRECTORY
136:                 WRITE(*,'(2A)') 'GetNodes> Working in directory ',TRIM(ADJUSTL(WORKINGDIRECTORY))135:                 WRITE(*,'(2A)') 'GetNodes> Working in directory ',TRIM(ADJUSTL(WORKINGDIRECTORY))
137:                 CLOSE(1)136:                 CLOSE(1)
138:              ENDIF137:              ENDIF
139:           ELSE138:           ELSE
140:              IF (.NOT.PBST) THEN139:              IF (.NOT.PBST) THEN
141:                 PRINT '(A)','getnodes> Interactive run - not checking for nodes.info file'140:                 PRINT '(A)','getnodes> Interactive run - not checking for nodes.info file'
142:              ELSE141:              ELSE
143:                 PRINT '(A)','getnodes> No nodes.info file - assuming no OPTIM jobs required for PBS run'142:                 PRINT '(A)','getnodes> No nodes.info file - assuming no OPTIM jobs required for PBS run'
144:              ENDIF143:              ENDIF
145:           ENDIF144:           ENDIF
146: 145: 
147:           ! Find hostname for the node that PATHSAMPLE is running on - necessary for scp146:           ! Find hostname for the node that PATHSAMPLE is running on - necessary for scp in ssh jobstring
148:           CALL MYSYSTEM(MYSTAT,DEBUG,'hostname > currentnode')147:           CALL MYSYSTEM(MYSTAT,DEBUG,'hostname > currentnode')
149:           INQUIRE(FILE='currentnode',EXIST=YESNO)148:           INQUIRE(FILE='currentnode',EXIST=YESNO)
150:           IF (YESNO) THEN149:           IF (YESNO) THEN
151:              OPEN(UNIT=125,FILE='currentnode',STATUS='OLD')150:              OPEN(UNIT=125,FILE='currentnode',STATUS='OLD')
152:              READ(125,'(A)') HOSTNAME151:              READ(125,'(A)') HOSTNAME
153:              CLOSE(125)152:              CLOSE(125)
154:              CALL MYSYSTEM(MYSTAT,DEBUG,'rm currentnode')153:              CALL MYSYSTEM(MYSTAT,DEBUG,'rm currentnode')
155:           ELSE154:           ELSE
156:              WRITE(*,'(A)') 'getnodes> Current node unknown - stopping'155:              WRITE(*,'(A)') 'getnodes> Current node unknown - stopping'
157:              STOP156:              STOP
158:           END IF157:           END IF
159: 158: 
160:           ! Read in current PATH so that this can be passed when submitting jobs using ssh159:           ! Read in current PATH so that this can be passed when submitting jobs using ssh
161:           IF (.NOT.SLURMT) THEN160:           CALL MYSYSTEM(MYSTAT,DEBUG,'echo $PATH > sshpath')
162:               CALL MYSYSTEM(MYSTAT,DEBUG,'echo $PATH > sshpath')161:           INQUIRE(FILE='sshpath',EXIST=YESNO)
163:               INQUIRE(FILE='sshpath',EXIST=YESNO)162:           IF (YESNO) THEN
164:               IF (YESNO) THEN163:              CALL MYSYSTEM(MYSTAT,DEBUG,'wc -c < sshpath >lenpath')
165:                  CALL MYSYSTEM(MYSTAT,DEBUG,'wc -c < sshpath >lenpath')164:              OPEN(UNIT=126,FILE='lenpath',STATUS='OLD')
166:                  OPEN(UNIT=126,FILE='lenpath',STATUS='OLD')165:              READ(126,*) ACTUALLENPATH
167:                  READ(126,*) ACTUALLENPATH166:              CLOSE(126)
168:                  CLOSE(126)167:              IF (ACTUALLENPATH > LENPATH) THEN
169:                  IF (ACTUALLENPATH > LENPATH) THEN168:                 WRITE(*,'(A)') 'getnodes> Length of $PATH exceeds static allocation size'
170:                     WRITE(*,'(A)') 'getnodes> Length of $PATH exceeds static allocation size'169:                 WRITE(*,'(A)') ' - increase size of LENPATH and possibly TOTALJOBSTRING'
171:                     WRITE(*,'(A)') ' - increase size of LENPATH and possibly TOTALJOBSTRING'170:                 STOP
172:                     STOP171:              END IF
173:                  END IF172:              OPEN(UNIT=127,FILE='sshpath',STATUS='OLD')
174:                  OPEN(UNIT=127,FILE='sshpath',STATUS='OLD')173:              READ(127,'(A)') SSHPATH
175:                  READ(127,'(A)') SSHPATH174:              CLOSE(127)
176:                  CLOSE(127)175:              CALL MYSYSTEM(MYSTAT,DEBUG,'rm sshpath lenpath')
177:                  CALL MYSYSTEM(MYSTAT,DEBUG,'rm sshpath lenpath')176:           ELSE
178:               ELSE177:              WRITE(*,'(A)') 'getnodes> Unable to read in $PATH - stopping'
179:                  WRITE(*,'(A)') 'getnodes> Unable to read in $PATH - stopping'178:              STOP
180:                  STOP 
181:               END IF 
182:           END IF179:           END IF
183:      END SUBROUTINE GETNODES180:      END SUBROUTINE GETNODES
184: 181: 
185:      SUBROUTINE SSHSUBMIT(ICPU,STAT,JOBSTRING,CONNSTR1,LDEBUG)182:      SUBROUTINE SSHSUBMIT(ICPU,STAT,JOBSTRING,CONNSTR1,LDEBUG)
186:           USE PORFUNCS, ONLY: SYSTEM_SUBR183:           USE PORFUNCS, ONLY: SYSTEM_SUBR
187:           USE COMMONS, ONLY: CHARMMT, ZSYM, COPYFILES, COPYOPTIMT, BHINTERPT, BISECTT, SSHT184:           USE COMMONS, ONLY: CHARMMT, ZSYM, COPYFILES, COPYOPTIMT, BHINTERPT, BISECTT, SSHT
188:           IMPLICIT NONE185:           IMPLICIT NONE
189:           REAL HARVEST186:           REAL HARVEST
190: 187: 
191:           INTEGER,INTENT(IN) :: ICPU188:           INTEGER,INTENT(IN) :: ICPU
230: !        PATHSAMPLE died. This has now been fixed. The code will remain here in case it is needed in the future.227: !        PATHSAMPLE died. This has now been fixed. The code will remain here in case it is needed in the future.
231: !          KILLSTRING='echo "ssh ' // TRIM(NODE) // ' quote ps -f | grep ' // TRIM(ADJUSTL(CONNSTR1)) // &228: !          KILLSTRING='echo "ssh ' // TRIM(NODE) // ' quote ps -f | grep ' // TRIM(ADJUSTL(CONNSTR1)) // &
232: !  &                  ' | grep -v ssh | grep -v bash | grep -v PATH | grep -v grep > poo1 ; ' // &229: !  &                  ' | grep -v ssh | grep -v bash | grep -v PATH | grep -v grep > poo1 ; ' // &
233: !  &                  ' cut -c10-15 poo1 > poo2 ; ' // TEMPSTRING // &230: !  &                  ' cut -c10-15 poo1 > poo2 ; ' // TEMPSTRING // &
234: !  &                  ' chmod +x poo3 ; ./poo3 quote"  >> killfile'231: !  &                  ' chmod +x poo3 ; ./poo3 quote"  >> killfile'
235: !232: !
236: ! Build up the complete rsh command step by step:233: ! Build up the complete rsh command step by step:
237: ! (1) make the scratch directory on the node. 234: ! (1) make the scratch directory on the node. 
238: !     -p flag means no error is generated if the directory already exists.235: !     -p flag means no error is generated if the directory already exists.
239: !     -x disables X forwarding.236: !     -x disables X forwarding.
240:           IF (SSHT) THEN237:           IF (SLURMT.OR.SSHT) THEN
241:              TOTALJOBSTRING= 'ssh -x ' // TRIM(node) // ' " mkdir -p ' // TRIM(ADJUSTL(PATHSTRING)) 238:              TOTALJOBSTRING= 'ssh -x ' // TRIM(node) // ' " mkdir -p ' // TRIM(ADJUSTL(PATHSTRING)) 
242:           ELSE239:           ELSE
243:              TOTALJOBSTRING= 'rsh ' // TRIM(node) // ' " mkdir -p ' // TRIM(ADJUSTL(PATHSTRING)) 240:              TOTALJOBSTRING= 'rsh ' // TRIM(node) // ' " mkdir -p ' // TRIM(ADJUSTL(PATHSTRING)) 
244:           ENDIF241:           ENDIF
245: ! (2) copy data from WORKINGDIRECTORY to the scratch directory on the node242: ! (2) copy data from WORKINGDIRECTORY to the scratch directory on the node
246: !     - scp used instead of copy as cannot rely on the contents of NFS-mounted directories to look the same on both nodes 243: !     - scp used instead of copy as cannot rely on the contents of NFS-mounted directories to look the same on both nodes 
247: !     Note that if any file is missing an error condition will result, and subsequent commands will fail.244: !     Note that if any file is missing an error condition will result, and subsequent commands will fail.
248:           TOTALJOBSTRING=TRIM(ADJUSTL(TOTALJOBSTRING)) &245:           TOTALJOBSTRING=TRIM(ADJUSTL(TOTALJOBSTRING)) &
249:   &          // ' ; scp -r ' // TRIM(ADJUSTL(HOSTNAME)) // ':' // TRIM(ADJUSTL(WORKINGDIRECTORY)) // '/' &246:   &          // ' ; scp -r ' // TRIM(ADJUSTL(HOSTNAME)) // ':' // TRIM(ADJUSTL(WORKINGDIRECTORY)) // '/' & 
250:   &          // TRIM(ADJUSTL(TEMPCOPYFILESDIR)) // '/* ' // TRIM(ADJUSTL(PATHSTRING)) // ' ; rm -rf ' & 247:   &          // TRIM(ADJUSTL(TEMPCOPYFILESDIR)) // '/* ' // TRIM(ADJUSTL(PATHSTRING)) // ' ; rm -rf ' & 
251:   &          // TRIM(ADJUSTL(WORKINGDIRECTORY)) // '/' // TRIM(ADJUSTL(TEMPCOPYFILESDIR))248:   &          // TRIM(ADJUSTL(WORKINGDIRECTORY)) // '/' // TRIM(ADJUSTL(TEMPCOPYFILESDIR))
252: ! (3) move to the scratch directory on the node249: ! (3) move to the scratch directory on the node
253:           TOTALJOBSTRING=TRIM(ADJUSTL(TOTALJOBSTRING)) // ' ; cd ' // TRIM(ADJUSTL(PATHSTRING))250:           TOTALJOBSTRING=TRIM(ADJUSTL(TOTALJOBSTRING)) // ' ; cd ' // TRIM(ADJUSTL(PATHSTRING))
254: ! (3b) delete any existing path.info.* file (a very rare but not impossible condition!)251: ! (3b) delete any existing path.info.* file (a very rare but not impossible condition!)
255:           TOTALJOBSTRING=TRIM(ADJUSTL(TOTALJOBSTRING)) // ' && rm -f path.info.* '252:           TOTALJOBSTRING=TRIM(ADJUSTL(TOTALJOBSTRING)) // ' && rm -f path.info.* '
256: ! (4) run the OPTIM job253: ! (4) run the OPTIM job
257:              TOTALJOBSTRING=TRIM(ADJUSTL(TOTALJOBSTRING)) // ' ; PATH=' // TRIM(ADJUSTL(SSHPATH)) // ' ' // JOBSTRING254:              TOTALJOBSTRING=TRIM(ADJUSTL(TOTALJOBSTRING)) // ' ; PATH=' // TRIM(ADJUSTL(SSHPATH)) // ' ' // JOBSTRING
258: ! (5) copy results back255: ! (5) copy results back
259:           IF (LDEBUG) THEN ! copy everything back 256:           IF (LDEBUG) THEN ! copy everything back 
288: !     or don;t rm it for debugging285: !     or don;t rm it for debugging
289: !         TOTALJOBSTRING=TRIM(ADJUSTL(TOTALJOBSTRING)) // ' ; ' // ' " '286: !         TOTALJOBSTRING=TRIM(ADJUSTL(TOTALJOBSTRING)) // ' ; ' // ' " '
290: !         TOTALJOBSTRING=TRIM(ADJUSTL(TOTALJOBSTRING)) // ' ; ls ' // TRIM(ADJUSTL(PATHSTRING)) // ' " '287: !         TOTALJOBSTRING=TRIM(ADJUSTL(TOTALJOBSTRING)) // ' ; ls ' // TRIM(ADJUSTL(PATHSTRING)) // ' " '
291:           IF (LDEBUG) PRINT '(2A)', 'nodes> complete job string: ',TRIM(ADJUSTL(TOTALJOBSTRING)) 288:           IF (LDEBUG) PRINT '(2A)', 'nodes> complete job string: ',TRIM(ADJUSTL(TOTALJOBSTRING)) 
292: ! (7) submit the job for real289: ! (7) submit the job for real
293: !         CALL SYSTEM_SUBR(TRIM(ADJUSTL(KILLSTRING)),MYSTATUS)  290: !         CALL SYSTEM_SUBR(TRIM(ADJUSTL(KILLSTRING)),MYSTATUS)  
294:           CALL SYSTEM_SUBR(TRIM(ADJUSTL(TOTALJOBSTRING)),MYSTATUS)  291:           CALL SYSTEM_SUBR(TRIM(ADJUSTL(TOTALJOBSTRING)),MYSTATUS)  
295:           STAT=MYSTATUS292:           STAT=MYSTATUS
296: 293: 
297:      END SUBROUTINE SSHSUBMIT294:      END SUBROUTINE SSHSUBMIT
298:  
299:      SUBROUTINE SLURMSUBMIT(STAT,JOBSTRING,CONNSTR1,LDEBUG) 
300:           USE PORFUNCS, ONLY: SYSTEM_SUBR 
301:           USE COMMONS, ONLY: COPYFILES, COPYOPTIMT, BHINTERPT, BISECTT, CUDAT 
302:           IMPLICIT NONE 
303:           REAL HARVEST 
304:  
305:           LOGICAL,INTENT(IN) :: LDEBUG 
306:           INTEGER,INTENT(OUT) :: STAT 
307:           CHARACTER(LEN=*) :: JOBSTRING,CONNSTR1 
308:  
309:           INTEGER :: MYSTATUS 
310:           CHARACTER(LEN=100) :: TEMPCOPYFILESDIR 
311:  
312: ! 
313: !  Incredibly, we occasionally see problems with jobs interfering with each other because 
314: !  the same process id is chosen. Add a random number to the temporary directory name... 
315: ! 
316:           CALL RANDOM_SEED() 
317:           CALL RANDOM_NUMBER(HARVEST) 
318:           WRITE(RANSTRING,'(F10.5)') HARVEST 
319:  
320:           PATHSTRING='/scratch/$USER/' // CONNSTR1 // '.' // TRIM(ADJUSTL(RANSTRING)) 
321:  
322: ! Put COPYFILES into temporary directory so contents can be copied as a group to avoid chopping up COPYFILES string 
323: ! *.connstr1 also put into temporary directory to avoid unnecessarily long jobstring 
324:           TEMPCOPYFILESDIR = connstr1 // '-tempcopyfiles' 
325:           CALL MYSYSTEM(MYSTAT,LDEBUG,'mkdir ' // TRIM(ADJUSTL(TEMPCOPYFILESDIR))) 
326:           CALL MYSYSTEM(MYSTAT,LDEBUG,'cp *.' // connstr1 // ' ' // TRIM(ADJUSTL(COPYFILES)) // ' ' // TRIM(ADJUSTL(TEMPCOPYFILESDIR))) 
327:  
328: ! (1) make the scratch directory on the node. 
329: !     -p flag means no error is generated if the directory already exists. 
330:           TOTALJOBSTRING= 'mkdir -p ' // TRIM(ADJUSTL(PATHSTRING)) 
331: ! (2) copy data from the working directory to the scratch directory on the node 
332: !     - scp used instead of copy as cannot rely on the contents of NFS-mounted directories to look the same on both nodes 
333: !     Note that if any file is missing an error condition will result, and subsequent commands will fail. 
334:           TOTALJOBSTRING=TRIM(ADJUSTL(TOTALJOBSTRING)) // ' ; scp -r ' // TRIM(ADJUSTL(HOSTNAME)) &  
335:   &          // ':$SLURM_SUBMIT_DIR/' // TRIM(ADJUSTL(TEMPCOPYFILESDIR)) // '/* ' // TRIM(ADJUSTL(PATHSTRING)) &  
336:   &          // ' ; rm -rf $SLURM_SUBMIT_DIR/' // TRIM(ADJUSTL(TEMPCOPYFILESDIR)) 
337: ! (3) move to the scratch directory on the node 
338:           TOTALJOBSTRING=TRIM(ADJUSTL(TOTALJOBSTRING)) // ' ; cd ' // TRIM(ADJUSTL(PATHSTRING)) 
339: ! (3b) delete any existing path.info.* file (a very rare but not impossible condition!) 
340:           TOTALJOBSTRING=TRIM(ADJUSTL(TOTALJOBSTRING)) // ' && rm -f path.info.* ' 
341: ! (4) run the OPTIM job 
342:              TOTALJOBSTRING=TRIM(ADJUSTL(TOTALJOBSTRING)) // ' ;' // JOBSTRING 
343: ! (5) copy results back 
344:           IF (LDEBUG) THEN ! copy everything back 
345:              TOTALJOBSTRING=TRIM(ADJUSTL(TOTALJOBSTRING)) // ' ; scp *.' // connstr1 & 
346:    &                      // ' ' // TRIM(ADJUSTL(HOSTNAME)) // ':$SLURM_SUBMIT_DIR' 
347:           ELSEIF (COPYOPTIMT.AND.(BHINTERPT.OR.BISECTT)) THEN ! copy path.info, OPTIM 
348:              TOTALJOBSTRING=TRIM(ADJUSTL(TOTALJOBSTRING)) & 
349:    &            // ' ; scp OPTIM* min.data.info* ' // TRIM(ADJUSTL(HOSTNAME)) // ':$SLURM_SUBMIT_DIR' 
350:           ELSEIF (COPYOPTIMT) THEN ! copy path.info, OPTIM, odata and finish 
351:                 IF (GETMINFRQST.OR.GETTSFRQST) THEN !need to copy frqs.dump 
352:                     TOTALJOBSTRING=TRIM(ADJUSTL(TOTALJOBSTRING)) & 
353:    &                // ' ; scp frqs.* ' // TRIM(ADJUSTL(HOSTNAME)) // ':$SLURM_SUBMIT_DIR' 
354:                 END IF 
355:                 TOTALJOBSTRING=TRIM(ADJUSTL(TOTALJOBSTRING)) & 
356:    &            // ' ; scp OPTIM* *info* ' // TRIM(ADJUSTL(HOSTNAME)) // ':$SLURM_SUBMIT_DIR' 
357:           ELSE ! we only really need path.info or min.data.info 
358:                 TOTALJOBSTRING=TRIM(ADJUSTL(TOTALJOBSTRING)) & 
359:    &            // ' ; scp *info* ' // TRIM(ADJUSTL(HOSTNAME)) // ':$SLURM_SUBMIT_DIR' 
360:           ENDIF 
361: ! (6) remove the scratch directory 
362:           TOTALJOBSTRING=TRIM(ADJUSTL(TOTALJOBSTRING)) // ' ; rm -r ' // TRIM(ADJUSTL(PATHSTRING)) 
363:           IF (LDEBUG) PRINT '(2A)', 'nodes> complete job string for srun command: ',TRIM(ADJUSTL(TOTALJOBSTRING)) 
364: ! (7) submit the job for real 
365: ! Commands for srun written into this script 
366:           OPEN(UNIT=225,FILE='submit_' // TRIM(ADJUSTL(RANSTRING)) // '.sh',STATUS='UNKNOWN') 
367:           WRITE(225,'(A)') '#!/bin/bash' 
368:           WRITE(225,'(A)') TRIM(ADJUSTL(TOTALJOBSTRING)) 
369:           CLOSE(225) 
370:           CALL MYSYSTEM(MYSTAT,LDEBUG,'chmod +x submit_' // TRIM(ADJUSTL(RANSTRING)) // '.sh') 
371:           IF (CUDAT) THEN 
372:              CALL SYSTEM_SUBR('srun -n1 -N1 -l --exclusive --gres=gpu:1 submit_' // TRIM(ADJUSTL(RANSTRING)) // '.sh',MYSTATUS) 
373:           ELSE 
374:              CALL SYSTEM_SUBR('srun -n1 -N1 -l --exclusive submit_' // TRIM(ADJUSTL(RANSTRING)) // '.sh',MYSTATUS) 
375:           END IF 
376: ! Remove srun script after completion 
377:           CALL MYSYSTEM(MYSTAT,LDEBUG,'rm -rf submit_' // TRIM(ADJUSTL(RANSTRING)) // '.sh') 
378:           STAT=MYSTATUS 
379:  
380:      END SUBROUTINE SLURMSUBMIT 
381:  
382: END MODULE NODES295: END MODULE NODES


r29683/submitoptimjob.f90 2016-03-16 18:35:13.512088564 +0000 r29682/submitoptimjob.f90 2016-03-16 18:35:14.868102506 +0000
 12: !   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the 12: !   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 13: !   GNU General Public License for more details. 13: !   GNU General Public License for more details.
 14: ! 14: !
 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:  19: 
 20: SUBROUTINE SUBMITOPTIMJOB(ICPU,CHARMMT,UNRST,CONNID,EXEC,LDEBUG,JOBSTRING) 20: SUBROUTINE SUBMITOPTIMJOB(ICPU,CHARMMT,UNRST,CONNID,EXEC,LDEBUG,JOBSTRING)
 21: USE PORFUNCS 21: USE PORFUNCS
 22: USE NODES, ONLY: SSHSUBMIT, SSHPARALLEL, SLURMSUBMIT 22: USE NODES, ONLY: SSHSUBMIT, SSHPARALLEL
 23: USE COMMONS, ONLY: DUMMYRUNT, AMBERT, AMHT, MACHINE, SLURMT 23: USE COMMONS, ONLY: DUMMYRUNT, AMBERT, AMHT, MACHINE
 24: IMPLICIT NONE 24: IMPLICIT NONE
 25: INTEGER, INTENT(IN) :: ICPU 25: INTEGER, INTENT(IN) :: ICPU
 26: CHARACTER(LEN=10) CONNSTR1, CONNSTR2 26: CHARACTER(LEN=10) CONNSTR1, CONNSTR2
 27: CHARACTER(LEN=*) JOBSTRING 27: CHARACTER(LEN=*) JOBSTRING
 28: CHARACTER(LEN=*) EXEC 28: CHARACTER(LEN=*) EXEC
 29: CHARACTER(LEN=256) MYJOBSTRING 29: CHARACTER(LEN=256) MYJOBSTRING
 30: INTEGER :: CHILDPID, CONNID, STATUS 30: INTEGER :: CHILDPID, CONNID, STATUS
 31: LOGICAL LDEBUG, CHARMMT, UNRST 31: LOGICAL LDEBUG, CHARMMT, UNRST
 32:  32: 
 33: CALL GETPID_SUBR(CHILDPID) 33: CALL GETPID_SUBR(CHILDPID)
 56: IF ((VERIFY('path',JOBSTRING).EQ.0).AND.(VERIFY('sloppy',JOBSTRING).NE.0)) CALL MYSYSTEM( & 56: IF ((VERIFY('path',JOBSTRING).EQ.0).AND.(VERIFY('sloppy',JOBSTRING).NE.0)) CALL MYSYSTEM( &
 57:   STATUS,LDEBUG,'mv vector.dump.' // TRIM(ADJUSTL(CONNSTR2)) // ' vector.dump.' // TRIM(ADJUSTL(CONNSTR1)) ) 57:   STATUS,LDEBUG,'mv vector.dump.' // TRIM(ADJUSTL(CONNSTR2)) // ' vector.dump.' // TRIM(ADJUSTL(CONNSTR1)) )
 58: IF (UNRST) CALL MYSYSTEM( & 58: IF (UNRST) CALL MYSYSTEM( &
 59:   STATUS,LDEBUG,'mv coords.' // TRIM(ADJUSTL(CONNSTR2)) // ' coords.' // TRIM(ADJUSTL(CONNSTR1)) ) 59:   STATUS,LDEBUG,'mv coords.' // TRIM(ADJUSTL(CONNSTR2)) // ' coords.' // TRIM(ADJUSTL(CONNSTR1)) )
 60:  60: 
 61: MYJOBSTRING=TRIM(ADJUSTL(EXEC))//' '//TRIM(ADJUSTL(CONNSTR1))//' > '//TRIM(ADJUSTL(JOBSTRING))//TRIM(ADJUSTL(CONNSTR1)) 61: MYJOBSTRING=TRIM(ADJUSTL(EXEC))//' '//TRIM(ADJUSTL(CONNSTR1))//' > '//TRIM(ADJUSTL(JOBSTRING))//TRIM(ADJUSTL(CONNSTR1))
 62: IF (DUMMYRUNT) MYJOBSTRING='sleep 10' 62: IF (DUMMYRUNT) MYJOBSTRING='sleep 10'
 63: IF (LDEBUG) PRINT '(2A)','submitoptimjob> myjobstring=',TRIM(ADJUSTL(MYJOBSTRING)) 63: IF (LDEBUG) PRINT '(2A)','submitoptimjob> myjobstring=',TRIM(ADJUSTL(MYJOBSTRING))
 64: IF (SSHPARALLEL) then 64: IF (SSHPARALLEL) then
 65:      CALL SSHSUBMIT(icpu,status,trim(adjustl(myjobstring)),trim(adjustl(CONNSTR1)),LDEBUG) 65:      CALL SSHSUBMIT(icpu,status,trim(adjustl(myjobstring)),trim(adjustl(CONNSTR1)),LDEBUG)
 66: ELSE IF (SLURMT) THEN 
 67:      CALL SLURMSUBMIT(status,trim(adjustl(myjobstring)),trim(adjustl(CONNSTR1)),LDEBUG) 
 68: ELSE 66: ELSE
 69:      CALL MYSYSTEM(STATUS,LDEBUG,trim(adjustl(myjobstring))) 67:      CALL MYSYSTEM(STATUS,LDEBUG,trim(adjustl(myjobstring)))
 70: ENDIF 68: ENDIF
 71: IF (STATUS.NE.0) PRINT '(A,I8)','submitoptimjob> WARNING - '//trim(adjustl(MYJOBSTRING))//' exit status=',STATUS 69: IF (STATUS.NE.0) PRINT '(A,I8)','submitoptimjob> WARNING - '//trim(adjustl(MYJOBSTRING))//' exit status=',STATUS
 72: CALL EXIT(STATUS) 70: CALL EXIT(STATUS)
 73: STOP 71: STOP
 74:  72: 
 75: RETURN 73: RETURN
 76: END 74: END


legend
Lines Added 
Lines changed
 Lines Removed

hdiff - version: 2.1.0