From chemistry-request@ccl.net Tue Jun 25 01:56:20 1991 Date: Tue, 25 Jun 91 00:56 EDT From: "Scott Le Grand" Subject: Conformational Entropy To: chemistry@ccl.net Status: R Is there any way to crudely estimate the conformational entropy of a particular conformation of a molecule that does not involve the O(n3) matrix inversion of the Hessian matrix of the potential energy function? I'm unfortunately betting that there isn't... Scott Le Grand From chemistry-request@ccl.net Tue Jun 25 09:48:23 1991 Date: Tue, 25 Jun 91 13:22:43 GMT From: jpj@lotus.medicine.rochester.EDU (Jeffrey P. Jones) Subject: Floating point "precision" To: chemistry@ccl.net Status: RO Hello, I have been trying to get some code running that has two subroutines that require "relative precision of floating point arithmetic". The subroutines are described below. Does anyone know this machine dependent parameter or how to find it? I'm running a SGI/220 and a SGI/25. THIS SUBROUTINE FINDS THOSE EIGENVECTORS OF A TRIDIAGONAL SYMMETRIC MATRIX CORRESPONDING TO SPECIFIED EIGENVALUES, USING INVERSE ITERATION. MACHEP IS A MACHINE DEPENDENT PARAMETER SPECIFYING THE RELATIVE PRECISION OF FLOATING POINT ARITHMETIC. MACHEP = 16.0D0**(-13) FOR LONG FORM ARITHMETIC ON S360. THIS SUBROUTINE FINDS THE EIGENVALUES OF A SYMMETRIC TRIDIAGONAL MATRIX BY THE IMPLICIT QL METHOD AND ASSOCIATES WITH THEM THEIR CORRESPONDING SUBMATRIX INDICES. ############################################################################## Jeffrey P. Jones U. of Rochester Department of Pharmacology 601 Elmwood Ave. Rochester, NY 14642 internet jpj@lotus.medicine.rochester.edu %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% From jkl@ccl.net Tue Jun 25 10:16:58 1991 Date: Tue, 25 Jun 91 10:14:55 -0400 From: jkl@ccl.net To: jpj@lotus.medicine.rochester.EDU Subject: Re: Machine epsilon Status: R The machine epsilon (eps) is the smallest positive number which added to 1.0 produces result other than 1.0 in the computer. 1 + eps > 1 For a given machine you can write a small program such as /* remember that x, y and eps must be declared in a precision for which you need machine epsilon */ eps = 0.00001; y = 1.0; Again: x = y + eps; /* find rough value of eps */ if (x > y) { eps = 0.5*eps; goto Again; } eps = 2.0*eps; Again1: x = y + eps; /* find value of eps within 1% */ if (x > y) { eps = 0.99*eps; goto Again1; } eps = eps/0.99; "print eps" =============== Warning I did not check the program, it is only an idea. Jan Jan K. Labanowski, Ph.D., Senior Supercomputer Specialist Ohio Supercomputer Center, 1224 Kinnear Rd, Columbus, OH 43212-1163 ph:(614)-292-9279, FAX:(614)-292-7168, E-mail: jkl@ccl.net JKL@OHSTPY.BITNET From chemistry-request@ccl.net Tue Jun 25 10:18:44 1991 Date: 25 Jun 91 15:54 +0200 From: Jaime Combariza Subject: Force constants To: CHEMISTRY@ccl.net Status: R Would somebody know of an easy way to get information about the force constants for benzene and pyrazine? I am sure somebody has probably calculated these. Thanks! From chemistry-request@ccl.net Tue Jun 25 11:27:35 1991 Date: Tue, 25 Jun 91 17:01:57 +0100 From: LJOB1%BDILUC01@OHSTVMA.ACS.OHIO-STATE.EDU Subject: benzene and pyrazine force constants To: chemistry@ccl.net Status: R The one reference I know of for pyrazine (but there MUST be more) is F. Pang, P. Pulay, and J. E. Boggs, J. Mol. Struct. (THEOCHEM) 88, 79 (1982). For benzene the latest thing in my EndNote file is H. Guo and M. Karplus, J. Chem. Phys. 89, 4235 (1988). Take care, Jan M.L. Martin From jkl@ccl.net Tue Jun 25 11:28:56 1991 Date: Tue, 25 Jun 91 11:32:27 -0400 From: jkl@ccl.net To: chemistry@ccl.net Subject: Re: Machine epsilon Status: R I am forwarding the actual code for macheps kindly submitted by Eric: ---------- Begin Forwarded Message ---------- >From stahlber@hydrogen.mps.ohio-state.edu Tue Jun 25 11:11:02 1991 >Date: Tue, 25 Jun 91 11:15:22 EDT >From: Eric Stahlberg >To: jkl@ccl.net >Subject: Re: Machine epsilon The machine epsilon can easily be found with the following program: PROGRAM MACHPR REAL*4 R4,TOL4,ZERO4 REAL*8 R8,TOL8,ZERO8 *MDC*IF IBM CRAY REAL*16 R16,TOL16,ZERO16 *MDC*ENDIF C ZERO4=0.0 ZERO8=0.0 R4=1.0 TOL4=R4 100 IF ((R4+TOL4).EQ.R4) GOTO 200 PRINT *,TOL4 TOL4=TOL4/2.0+D0 GOTO 100 200 PRINT *,'MACHINE PRECISION R4 IS GT :', TOL4 R8=1.0 TOL8=R8 300 IF ((R8+TOL8).EQ.R8) GOTO 400 PRINT *,TOL8 TOL8=TOL8/2.0+D0 GOTO 300 400 PRINT *,'MACHINE PRECISION R8 IS GT :', TOL8 *MDC*IF IBM CRAY R16=1.0 TOL16=R16 500 IF ((R16+TOL16).EQ.R16) GOTO 600 PRINT *,TOL16 TOL16=TOL16/2.0+D0 GOTO 500 600 PRINT *,'MACHINE PRECISION R16 IS GT :', TOL16 *MDC*ENDIF STOP END I have used it to determine the machine precision for various machines and word sizes. Eric Stahlberg OSU Chemistry ----------- End Forwarded Message ----------- From chemistry-request@ccl.net Tue Jun 25 11:42:21 1991 Date: Tue, 25 Jun 91 10:16 CST From: Andy Holder Subject: Force Constant Calculations To: CHEMISTRY@ccl.net Status: R Performing force constant calculations on a molecule as small as benzene is a relatively simple task with a high quality semi- empirical method such as AM1. The results are also in pretty good agreement with experiment. Whether this will get you what need depends on the level of accuracy that you require of the numbers. There is no simple scaling factor for empirical adjust- ments as is the case with ab initio methods, but the frequencies from these type of calculations are generally good to +- 5-10%. =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-= DR. ANDREW HOLDER Department of Chemistry || BITNET Addr: AHOLDER@UMKCVAX1 University of Missouri - Kansas City || Internet Addr: aholder@vax1.umkc.edu Kansas City, Missouri 64110 || Phone Number: (816) 235-2293 =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-= From chemistry-request@ccl.net Tue Jun 25 12:20:17 1991 Date: Tue, 25 Jun 91 08:30:25 PDT From: lg562@koshland.pnl.GOV Subject: Floating point "precision" To: jpj@lotus.medicine.rochester.EDU Status: R About the relative precision of the SGI... You might look in the file called "/usr/include/float.h" This is the include-file for C which defines many of the constants you could be looking for. The parameter I believe you are looking for is the FLT_EPSILON and the DBL_EPSILON. Hope this helps! Michael Bass Molecular Science Research Center, K2-18 Battelle - Pacific Northwest Laboratory Richland, Washington 99352 lg562@pnl.gov From chemistry-request@ccl.net Tue Jun 25 12:52:17 1991 Date: Tue, 25 Jun 91 10:55:12 -0500 From: mcintosh@ccwf.cc.utexas.EDU (aubrey mcintosh) Subject: Re: Floating point "precision" To: chemistry@ccl.net Status: R > Hello, I have been trying to get some code running that has > two subroutines that require "relative precision of floating > point arithmetic". The subroutines are described below. Does > anyone know this machine dependent parameter or how to find it? > I'm running a SGI/220 and a SGI/25. > <...> > internet jpj@lotus.medicine.rochester.edu -------------------------------------------- I use this in our Natural Representation of Real Numbers package. PROCEDURE SetDynamicRange*; VAR aux0, aux1 : REAL; BEGIN dynamicRange := 0; aux0 := 1.0; aux1 := aux0; LOOP aux0 := 10.0 * aux1; aux1 := aux0 + 1.0; IF aux0 = aux1 THEN EXIT END; INC( dynamicRange ) END END SetDynamicRange; -------------------------------------------- Aubrey McIntosh chemistry department U.T. Austin, TX 78712 From jkl@ccl.net Tue Jun 25 13:03:02 1991 Date: Tue, 25 Jun 91 13:06:26 -0400 From: jkl@ccl.net To: chemistry@ccl.net Subject: Re: Machine epsilon Status: R Here is even a simpler way for macheps for Dr. Elbert ---------- Begin Forwarded Message ---------- > From elbert@tc1.chem.iastate.edu Tue Jun 25 12:38:19 1991 > Date: Tue, 25 Jun 91 11:40:12 CDT > From: elbert@tc1.chem.iastate.edu (Stephen T. Elbert) > To: jkl@ccl.net > Subject: Machine epsilon A much simpler, faster way of computing eps is a = 4.d0/3.d0 10 b = a - 1.0d0 c = b + b + b eps = abs(c - 1.0d0) if (eps .eq. 0.0d0) go to 10 This code has been used by EISPACK for years. The branch is to keep the compiler from using possibly incorrect register values. Stephen Elbert Iowa State University 515-294-1307 voice mail Ames Laboratory - USDOE 515-294-3226 FAX elbert@IaState.edU 315a Wilhelm Hall elbert@alisuvax.bitnet Ames, IA 50011 ----------- End Forwarded Message ----------- From djh@ccl.net Tue Jun 25 14:40:49 1991 Date: Tue, 25 Jun 91 13:34:57 -0400 From: djh@ccl.net Subject: floating point precision To: chemistry@ccl.net Status: R Kahan's "paranoia" is an interesting program that determines epsilon, as well as a host of other parameters, and makes a judgement on the quality of the machine's fp design and implementation. [It thoroughly pans Crays!] It's available from netlib. Send mail to netlib@ornl.gov Subject: send index from paranoia to get an overview of paranoia and directions on how to get various language versions of the program. You have to be careful in determining epsilon with a simple program. The Intel coprocessors, for example, work in 80 bit extended format, so depending on your compiler, you may get an epsilon of 2 ** (-52) if values get stored to memory, or 2 ** (-63) if they do not! The latter value isn't going to be achieved in most real programs. I think for all IEEE fp, appropriate values are 2 ** (-23) for single 2 ** (-52) for double -- David J. Heisterberg djh@ccl.net We are NOT all The Ohio Supercomputer Center djh@ohstpy.bitnet Keynesians now. Columbus, Ohio 43212 ohstpy::djh From chemistry-request@ccl.net Tue Jun 25 15:02:50 1991 From: system@alchemy.chem.utoronto.ca Date: Tue, 25 Jun 91 13:49:12 EDT To: chemistry@ccl.net Subject: Re: Machine epsilon Status: R In computing these machine constants, be very careful to ensure that the system does not use a higher precision in the cpu than can be stored in memory (e.g. 80 bits in cpu/fpu vs. 64 bits to memory). Some compilers have options to force the routine to store the results of any arithmetic operation that will be used in a comparison to memory before doing the comparison so that comparisons are done using 64 bits, not more. I think this is not a problem with the SGI, but will be for any system using M68881/M68882 coprocessors (old SUN, HP/Apollo for example). -- Mike Peterson, System Administrator, U/Toronto Department of Chemistry E-mail: system@alchemy.chem.utoronto.ca From chemistry-request@ccl.net Tue Jun 25 16:17:01 1991 Date: Tue, 25 Jun 91 14:20:48 CDT From: elbert@tc1.chem.iastate.edu (Stephen T. Elbert) To: chemistry@ccl.net Subject: Floating point "precision" Status: R After seeing several iterative schemes to calculate the value of machine epsilon posted here I feel compelled to make the following observations: 1) MACHEP is generally NOT NECESSARY. It typically appears in the form if (value .le. MACHEP) then ...CONVERGED... else ...NOT CONVERGED... end if which is better written if (scale + value .eq. scale) then ...CONVERGED... else ...NOT CONVERGED... end if where scale is typically 1.0, but should really be relevant to the scale of the problem. Not only is the numerical processing better in the second case, but it is completely portable! 2) If a value of MACHEP (eps) is really desirable, despite the previous point, it is simply, directly and portably calculated as follows: a = 4.0d0/3.d0 10 b = a - 1.0d0 c = b + b + b eps = abs(c - 1.0d0) if (eps .eq. 0.0d0) go to 10 This works as long as the base used in representing floating point numbers is not a power of three and the quantity A in statement 10 is represented to the accuracy used to store floating point variables in memory. The branch to 10 statment is designed to enforce the last assumption by forcing a memory load of A rather than using a possibly more precise register value. The branch is never taken. This code fragment has been used by the developers of LINPACK since the 70's and probably goes back much further than that. Stephen Elbert Iowa State University 515-294-1307 voice mail Ames Laboratory - USDOE 515-294-3226 FAX elbert@IaState.edU 315a Wilhelm Hall elbert@alisuvax.bitnet Ames, IA 50011 From chemistry-request@ccl.net Tue Jun 25 18:43:07 1991 Date: Tue, 25 Jun 91 14:36:44 PDT From: youkha@iris75.biosym.com (Philippe Youkharibache) To: chemistry@ccl.net Subject: BENZENE FORCE CONSTANTS Status: R References on "Force constants of Benzene" ========================================= In addition to the references already cited: -P. Pulay, G. Fogarasi, J.E. Boggs, J. Chem. Phys., 74 (1981) 3999 -H. Guo and M. Karplus, J. Chem. Phys.,89(1988) 4235 There is one additional important reference for Benzene: -A.G. Ozkabak, L. Goodman, J. Chem. Phys.,87(1987) 2564 The latter can be considered as an "experimental force field"; the authors have submitted recently a review paper, comparing this FF to high level ab initio calculations: -L. Goodman, A.G. Ozkaback and S.N. Thakur, "A Benchmark Vibrational Potential Surface: Ground State Benzene", J. Phys. Chem. , accepted. Finally, as pointed out by A. Holder in a previous E-mail, there are no scale factors available in the litterature for these type of compounds and adapted to Hessians calculated at the semi-empirical level such as AM1 and MNDO. We have recently submitted a paper on the subject: -N. Rougeau, J.P. Flament, P. Youkharibache; H. P. Gervais, G. Berthier "Vibrational Modelling in large Polycyclic Aromatic Hydrocarbons" J. Mol. Struct. (Theochem), accepted for publication. describing a Scaled Force Field for Benzene and larger polycyclic aromatic hydrocarbons (PAH) of astrophysical interest: calculating the Hessian at the MNDO level, determining scale factors independently for benzene and naphtalene to test their transferability, and using this set of transferable scale factors to calculate a scaled Hessian and associated vibrational frequencies. The overall agreement between experimental and MNDO-SQM frequencies for all molecules in the series (benzene, naphtalene, anthracene, phenanthrene, pyrene and coronene) is around 25-30 cm-1. Philippe Youkharibache internet: youkha@biosym.com tel: 619-546-5562 From chemistry-request@ccl.net Tue Jun 25 19:47:50 1991 Date: Tue, 25 Jun 91 17:56:58 CDT From: twhitley@ncsa.uiuc.edu (Timothy A. Whitley) To: chemistry@ccl.net Subject: Epsilon Status: R Eric Stahlberg's code does one too many divide; the results of his code are too small by a factor of two. The test is for a "just noticeable difference" from 1.0, not a "too small to be noticed difference." I believe that it should go like this: PROGRAM MACHPR REAL*4 R4,TOL4,ZERO4 REAL*8 R8,TOL8,ZERO8 *MDC*IF IBM CRAY REAL*16 R16,TOL16,ZERO16 *MDC*ENDIF C ZERO4=0.0 ZERO8=0.0 R4=1.0 TOL4=R4 100 IF ((R4+TOL4).EQ.R4) GOTO 200 PRINT *,TOL4 TOL4=TOL4/2.0 GOTO 100 200 tol4 = tol4 * 2.0 PRINT *,'MACHINE PRECISION R4 IS GT :', TOL4 R8=1.0 TOL8=R8 300 IF ((R8+TOL8).EQ.R8) GOTO 400 PRINT *,TOL8 TOL8=TOL8/2.0 GOTO 300 400 tol8 = tol8 * 2.0 PRINT *,'MACHINE PRECISION R8 IS GT :', TOL8 *MDC*IF IBM CRAY R16=1.0 TOL16=R16 500 IF ((R16+TOL16).EQ.R16) GOTO 600 PRINT *,TOL16 TOL16=TOL16/2.0 GOTO 500 600 tol16 = tol16 * 2.0 PRINT *,'MACHINE PRECISION R16 IS GT :', TOL16 *MDC*ENDIF STOP END C code from one of the earlier pseudo-code examples looks like: main() { float eps = 0.00001; float y = 1.0; float x; Again: x = y + eps; /* find rough value of eps */ if (x > y) { eps = 0.5*eps; goto Again; } eps = 2.0*eps; Again1: x = y + eps; /* find value of eps within 1% */ if (x > y) { eps = 0.99*eps; goto Again1; } eps = eps/0.99; printf("%e",eps); } Under Cray UNICOS, there is also a /usr/include/float.h file which specifies the epsilon limits. =~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~= Tim Whitley (( Internet...twhitley@ncsa.uiuc.edu Cray Research, Inc. )) Phone......(217) 244-4863 4139 Beckman Institute (( FAX........(217) 244-2909 405 N. Mathews Avenue )) "The views presented herein are not those Urbana, IL 61801 (( of Cray Research, but are solely my own." =~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~= From chemistry-request@ccl.net Tue Jun 25 21:45:32 1991 Date: Tue, 25 Jun 91 20:51:46 -0400 From: neal@iris.polymer.uakron.EDU (Neal Neuburger) Subject: bulk To: chemistry@ccl.net Status: R The following is a C version to evaluate epsilon that doesn't look like FORTRAN. #include typedef float CRD; main() { CRD eps = 0.00001, y = 1.0, x; while( (x = y + eps) > y) /* find rough value of eps */ { eps = 0.5*eps; } eps = 2.0*eps; while( (x = y + eps) > y) /* find value of eps within 1% */ { eps = 0.99*eps; } eps = eps/0.99; printf("%e\n",eps); }