********> bugfix.50 Author: Bill Ross Date: 10/21/95 Programs: Anal Severity: Moderate Problem: Simulations with unusually many parameters can overflow arrays, leading to probable crash or possible wrong results. Affects: Simulations with many parameters added to the standard force field, e.g. a protein/heme system using the dat/ contrib/heme/frcmod.* files, particularly if Leap is used, since Leap does not collapse all numerically equivalent parameters into one. Cause: Array bounds checking was never added to Anal. Fix: A new file, parms.h, is introduced, the Makefile is modified, and analb.f, anala.f are modified, all in src/anal. Improved error logging is also added to a dihedral calc routine. ---------- new file: parms.h ------------------------------------------- c -- parms.h: configurable constants parameter( mxbnd = 1000 ) parameter( mxang = 1000 ) parameter( mxtors = 2000 ) parameter( mxttyp = 2000 ) parameter( mxatyp = 60 ) parameter( mxhb = 500 ) COMMON/PARMS/RK(mxbnd),REQ(mxbnd),TK(mxang),TEQ(mxang), + PK(mxtors),PN(mxtors),PHASE(mxtors), + CN1(mxttyp),CN2(mxttyp), + SOLTY(mxatyp) COMMON/HBPAR/ASOL(mxhb),BSOL(mxhb),HBCUT(mxhb) ------------------------------------------------------------------------- *** OLD Makefile --- NEW Makefile *************** *** 55,60 cd $$SYSDIR ; make sys.a main.o anala.o analb.o analc.o: sizes.h #----------- --- 55,61 ----- cd $$SYSDIR ; make sys.a main.o anala.o analb.o analc.o: sizes.h + anala.o analb.o: parms.h #----------- ------------------------------------------------------------------------- *** OLD analb.f --- NEW analb.f *************** *** 2344,2349 C #include "sizes.h" #include "files.h" COMMON/INFOV/NATOM,NRES,NBONH,NBONA,NTHETH,NTHETA,NPHIH, + NPHIA,NNB,NTYPES,NRC,NCONP,MEMA,MEMB,MAXNB, + MBONA,MTHETA,MPHIA,NATC,NGRPA --- 2344,2350 ----- C #include "sizes.h" #include "files.h" + #include "parms.h" COMMON/INFOV/NATOM,NRES,NBONH,NBONA,NTHETH,NTHETA,NPHIH, + NPHIA,NNB,NTYPES,NRC,NCONP,MEMA,MEMB,MAXNB, + MBONA,MTHETA,MPHIA,NATC,NGRPA *************** *** 2348,2356 + NPHIA,NNB,NTYPES,NRC,NCONP,MEMA,MEMB,MAXNB, + MBONA,MTHETA,MPHIA,NATC,NGRPA COMMON/NBTERM/CUT,SCNB,SCEE,IDIEL,DIELC,NBUCK - COMMON/PARMS/RK(900),REQ(900),TK(900),TEQ(900),PK(900),PN(900), - + PHASE(900),CN1(1830),CN2(1830),SOLTY(60) - COMMON/HBPAR/ASOL(200),BSOL(200),HBCUT(200) COMMON/RUNHED/ITITL(20),ITITL1(20) COMMON/COREA/IX(MAXINT) COMMON/COREB/X(MAXREA) --- 2349,2354 ----- + NPHIA,NNB,NTYPES,NRC,NCONP,MEMA,MEMB,MAXNB, + MBONA,MTHETA,MPHIA,NATC,NGRPA COMMON/NBTERM/CUT,SCNB,SCEE,IDIEL,DIELC,NBUCK COMMON/RUNHED/ITITL(20),ITITL1(20) COMMON/COREA/IX(MAXINT) COMMON/COREB/X(MAXREA) *************** *** 2376,2381 + NHPARM,NPARM,NNB,NRES,NBONA,NTHETA,NPHIA, + NUMBND,NUMANG,NPTRA,NATYP,NPHB C C ----- NOW ALL THE DATA IS AVAILABLE FOR MEMORY ALLOCATION. C DO THE PARTITION AND LOAD THE ARRAYS ----- C --- 2374,2413 ----- + NHPARM,NPARM,NNB,NRES,NBONA,NTHETA,NPHIA, + NUMBND,NUMANG,NPTRA,NATYP,NPHB C + NTTYP = NTYPES*(NTYPES+1)/2 + c + c --- check dimensioning + c + ierr = 0 + if (NUMBND.gt.mxbnd) then + write(6,*) ' *** need to redimension mxbnd >= ', NUMBND + ierr = 1 + endif + if (NUMANG.gt.mxang) then + write(6,*) ' *** need to redimension mxang >= ', NUMANG + ierr = 1 + endif + if (NPTRA.gt.mxtors) then + write(6,*) ' *** need to redimension mxtors >= ', NPTRA + ierr = 1 + endif + if (NTTYP.gt.mxttyp) then + write(6,*) ' *** need to redimension mxttyp >= ', NTTYP + ierr = 1 + endif + if (NATYP.gt.mxatyp) then + write(6,*) ' *** need to redimension mxatyp >= ', NATYP + ierr = 1 + endif + if (NPHB.gt.mxhb) then + write(6,*) ' *** need to redimension mxhb >= ', NPHB + ierr = 1 + endif + if (ierr.ne.0) then + write(6,*) ' redimension (parms.h) and try again' + call mexit(6,1) + endif + C C ----- NOW ALL THE DATA IS AVAILABLE FOR MEMORY ALLOCATION. C DO THE PARTITION AND LOAD THE ARRAYS ----- C *************** *** 2406,2413 READ(20) (PN(I), I = 1,NPTRA) READ(20) (PHASE(I), I = 1,NPTRA) READ(20) (SOLTY(I), I = 1,NATYP) - C - NTTYP = NTYPES*(NTYPES+1)/2 C READ(20) (CN1(I), I = 1,NTTYP) READ(20) (CN2(I), I = 1,NTTYP) --- 2438,2443 ----- READ(20) (PN(I), I = 1,NPTRA) READ(20) (PHASE(I), I = 1,NPTRA) READ(20) (SOLTY(I), I = 1,NATYP) C READ(20) (CN1(I), I = 1,NTTYP) READ(20) (CN2(I), I = 1,NTTYP) ------------------------------------------------------------------------- *** OLD anala.f --- NEW anala.f *************** *** 19,24 C************************************************************************ C #include "sizes.h" DOUBLE PRECISION ENE,DUM LOGICAL KONST,DIELD,GRAD,BELLY C --- 19,25 ----- C************************************************************************ C #include "sizes.h" + #include "parms.h" DOUBLE PRECISION ENE,DUM LOGICAL KONST,DIELD,GRAD,BELLY C *************** *** 38,46 COMMON/COREB/X(MAXREA) C COMMON/NBTERM/CUT,SCNB,SCEE,IDIEL,DIELC,NBUCK - COMMON/PARMS/RK(900),REQ(900),TK(900),TEQ(900),PK(900),PN(900), - + PHASE(900),CN1(1830),CN2(1830),SOLTY(60) - COMMON/HBPAR/ASOL(200),BSOL(200),HBCUT(200) common/grpmem/ngrpx C DIMENSION ENE(30),ENER(30) --- 39,44 ----- COMMON/COREB/X(MAXREA) C COMMON/NBTERM/CUT,SCNB,SCEE,IDIEL,DIELC,NBUCK common/grpmem/ngrpx C DIMENSION ENE(30),ENER(30) *************** *** 757,762 c - core arrays are parameterized. c #include "sizes.h" parameter (MAXHB=2000) integer ihb(MAXHB),jhb(MAXHB),ich(MAXHB) DOUBLE PRECISION EHB --- 755,761 ----- c - core arrays are parameterized. c #include "sizes.h" + #include "parms.h" parameter (MAXHB=2000) integer ihb(MAXHB),jhb(MAXHB),ich(MAXHB) DOUBLE PRECISION EHB *************** *** 769,775 COMMON/COREA/IX(MAXINT) COMMON/COREB/X(MAXREA) C - COMMON/HBPAR/ASOL(200),BSOL(200),HBCUT(200) C C ----- FIRST GET THE HISTORY OF H-BONDS ----- C --- 768,773 ----- COMMON/COREA/IX(MAXINT) COMMON/COREB/X(MAXREA) C C C ----- FIRST GET THE HISTORY OF H-BONDS ----- C *************** *** 2018,2024 E = COS(ARGUM) DFP = -APN*SIN(ARGUM) DF = -DFP/SPHI ! WRITE(6,402) IPHI,I3,J3,K3,L3 C 65 E = PK(IC)+ARG*E DF = DF*ARG --- 2016,2023 ----- E = COS(ARGUM) DFP = -APN*SIN(ARGUM) DF = -DFP/SPHI ! WRITE(6,432) IPHI,I3,J3,K3,L3 ! 432 FORMAT (' DIHEDRAL ANGLE ERROR (??): ',5I8) C 65 E = PK(IC)+ARG*E DF = DF*ARG *************** *** 2213,2220 ENBP = ENBP/SCNB EELP = EELP/SCEE RETURN - 400 WRITE(6,402) IPHI,I3,J3,K3,L3,PHASE(IC) - 402 FORMAT (' DIHEDRAL ANGLE ERROR: ',5I4,F10.4) 9008 FORMAT(1X,I3,'-',I3,1X,3(I5,'-'),I5,' (',3(A2,'-'),a2,')', + F6.1,F7.3,F9.3,F11.3) 9018 FORMAT(1X,I3,'-',I3,1X,I5,'-',I5,' (',A2,'-',A2,')', --- 2212,2217 ----- ENBP = ENBP/SCNB EELP = EELP/SCEE RETURN 9008 FORMAT(1X,I3,'-',I3,1X,3(I5,'-'),I5,' (',3(A2,'-'),a2,')', + F6.1,F7.3,F9.3,F11.3) 9018 FORMAT(1X,I3,'-',I3,1X,I5,'-',I5,' (',A2,'-',A2,')', *************** *** 2219,2223 + F6.1,F7.3,F9.3,F11.3) 9018 FORMAT(1X,I3,'-',I3,1X,I5,'-',I5,' (',A2,'-',A2,')', + 3x,'1-4 Interaction',5x,F6.2,f10.3,f12.3) call mexit(6, 1) END --- 2216,2222 ----- + F6.1,F7.3,F9.3,F11.3) 9018 FORMAT(1X,I3,'-',I3,1X,I5,'-',I5,' (',A2,'-',A2,')', + 3x,'1-4 Interaction',5x,F6.2,f10.3,f12.3) + 400 WRITE(6,402) IPHI,I3,J3,K3,L3,IC,iper,PHASE(IC),PN(IC) + 402 FORMAT (' DIHEDRAL ANGLE ERROR: ',7I8,2F10.4) call mexit(6, 1) END ------------------------------------------------------------------------- Temporary workarounds: None --