COMPLEX FUNCTION CACOSH(Z) C***BEGIN PROLOGUE CACOSH C***DATE WRITTEN 770401 (YYMMDD) C***REVISION DATE 820801 (YYMMDD) C***CATEGORY NO. C4C C***KEYWORDS ARC HYPERBOLIC COSINE,COMPLEX,ELEMENTARY FUNCTION C***AUTHOR FULLERTON, W., (LANL) C***PURPOSE Computes the complex arc hyperbolic Cosine. C***DESCRIPTION C C CACOSH(Z) calculates the complex arc hyperbolic cosine of Z. C***REFERENCES (NONE) C***ROUTINES CALLED CACOS C***END PROLOGUE CACOSH COMPLEX Z, CI, CACOS DATA CI /(0.,1.)/ C***FIRST EXECUTABLE STATEMENT CACOSH CACOSH = CI*CACOS(Z) C RETURN END COMPLEX FUNCTION CACOS(Z) C***BEGIN PROLOGUE CACOS C***DATE WRITTEN 770401 (YYMMDD) C***REVISION DATE 820801 (YYMMDD) C***CATEGORY NO. C4A C***KEYWORDS ARC COSINE,COMPLEX,ELEMEMTARY FUNCTION C***AUTHOR FULLERTON, W., (LANL) C***PURPOSE Computes the complex arc Cosine. C***DESCRIPTION C C CACOS(Z) calculates the complex trigonometric arc cosine of Z. C The result is in units of radians, and the real part is in the C first or second quadrant. C***REFERENCES (NONE) C***ROUTINES CALLED CASIN C***END PROLOGUE CACOS COMPLEX Z, CASIN DATA PI2 /1.5707963267 9489661923E0/ C***FIRST EXECUTABLE STATEMENT CACOS CACOS = PI2 - CASIN (Z) C RETURN END COMPLEX FUNCTION CASIN(ZINP) C***BEGIN PROLOGUE CASIN C***DATE WRITTEN 770701 (YYMMDD) C***REVISION DATE 820801 (YYMMDD) C***REVISION HISTORY (YYMMDD) C 000601 Changed CSQRT/CLOG to generic SQRT/LOG (JEC) C***CATEGORY NO. C4A C***KEYWORDS ARC SINE,COMPLEX,ELEMENTARY FUNCTION C***AUTHOR FULLERTON, W., (LANL) C***PURPOSE Computes the complex arc Sine. C***DESCRIPTION C C CASIN(ZINP) calculates the complex trigonometric arc sine of ZINP. C The result is in units of radians, and the real part is in the first C or fourth quadrant. C***REFERENCES (NONE) C***ROUTINES CALLED R1MACH C***END PROLOGUE CASIN COMPLEX ZINP, Z, Z2, SQZP1, CI DATA PI2 /1.5707963267 9489661923E0/ DATA PI /3.1415926535 8979324E0/ DATA CI /(0.,1.)/ DATA NTERMS, RMIN / 0, 0.0 / C***FIRST EXECUTABLE STATEMENT CASIN IF (NTERMS.NE.0) GO TO 10 C NTERMS = ALOG(EPS)/ALOG(RMAX) WHERE RMAX = 0.1 NTERMS = -0.4343*ALOG(R1MACH(3)) RMIN = SQRT (6.0*R1MACH(3)) C 10 Z = ZINP R = CABS (Z) IF (R.GT.0.1) GO TO 30 C CASIN = Z IF (R.LT.RMIN) RETURN C CASIN = (0.0, 0.0) Z2 = Z*Z DO 20 I=1,NTERMS TWOI = 2*(NTERMS-I) + 1 CASIN = 1.0/TWOI + TWOI*CASIN*Z2/(TWOI+1.0) 20 CONTINUE CASIN = Z*CASIN RETURN C 30 IF (REAL(ZINP).LT.0.0) Z = -ZINP C SQZP1 = SQRT (Z+1.0) IF (AIMAG(SQZP1).LT.0.) SQZP1 = -SQZP1 CASIN = PI2 - CI * LOG (Z + SQZP1*SQRT(Z-1.0)) C IF (REAL(CASIN).GT.PI2) CASIN = PI - CASIN IF (REAL(CASIN).LE.(-PI2)) CASIN = -PI - CASIN IF (REAL(ZINP).LT.0.) CASIN = -CASIN C RETURN END REAL FUNCTION R1MACH(I) C***BEGIN PROLOGUE R1MACH C***DATE WRITTEN 790101 (YYMMDD) C***REVISION DATE 860825 (YYMMDD) C***CATEGORY NO. R1 C***KEYWORDS MACHINE CONSTANTS C***AUTHOR FOX, P. A., (BELL LABS) C HALL, A. D., (BELL LABS) C SCHRYER, N. L., (BELL LABS) C***PURPOSE Returns single precision machine dependent constants C***DESCRIPTION C C This is the CMLIB version of R1MACH, the real machine C constants subroutine originally developed for the PORT library. C C R1MACH can be used to obtain machine-dependent parameters C for the local machine environment. It is a function C subroutine with one (input) argument, and can be called C as follows, for example C C A = R1MACH(I) C C where I=1,...,5. The (output) value of A above is C determined by the (input) value of I. The results for C various values of I are discussed below. C C Single-Precision Machine Constants C R1MACH(1) = B**(EMIN-1), the smallest positive magnitude. C R1MACH(2) = B**EMAX*(1 - B**(-T)), the largest magnitude. C R1MACH(3) = B**(-T), the smallest relative spacing. C R1MACH(4) = B**(1-T), the largest relative spacing. C R1MACH(5) = LOG10(B) C***REFERENCES FOX, P.A., HALL, A.D., SCHRYER, N.L, *FRAMEWORK FOR C A PORTABLE LIBRARY*, ACM TRANSACTIONS ON MATHE- C MATICAL SOFTWARE, VOL. 4, NO. 2, JUNE 1978, C PP. 177-188. C***ROUTINES CALLED XERROR C***END PROLOGUE R1MACH C INTEGER SMALL(2) INTEGER LARGE(2) INTEGER RIGHT(2) INTEGER DIVER(2) INTEGER LOG10(2) C REAL RMACH(5) C EQUIVALENCE (RMACH(1),SMALL(1)) EQUIVALENCE (RMACH(2),LARGE(1)) EQUIVALENCE (RMACH(3),RIGHT(1)) EQUIVALENCE (RMACH(4),DIVER(1)) EQUIVALENCE (RMACH(5),LOG10(1)) C C C MACHINE CONSTANTS FOR IEEE ARITHMETIC MACHINES, SUCH AS THE AT&T C 3B SERIES, MOTOROLA 68000 BASED MACHINES (E.G. SUN 3 AND AT&T C PC 7300), SUN SPARCSTATIONS, SILICON GRAPHCS WORKSTATIONS, HP C 9000 WORKSTATIONS, IBM RS/6000 WORKSTATIONS, AND 8087 BASED C MICROS (E.G. IBM PC AND AT&T 6300). C C === MACHINE = ATT.3B C === MACHINE = ATT.6300 C === MACHINE = ATT.7300 C === MACHINE = HP.9000 C === MACHINE = IBM.PC C === MACHINE = IBM.RS6000 C === MACHINE = IEEE.MOST-SIG-BYTE-FIRST C === MACHINE = IEEE.LEAST-SIG-BYTE-FIRST C === MACHINE = SGI C === MACHINE = SUN C === MACHINE = 68000 C === MACHINE = 8087 C DATA SMALL(1) / 8388608 / C DATA LARGE(1) / 2139095039 / C DATA RIGHT(1) / 864026624 / C DATA DIVER(1) / 872415232 / C DATA LOG10(1) / 1050288283 / C C MACHINE CONSTANTS FOR SUN WORKSTATIONS. f77 WITH -r8 OPTION. C MACHINE CONSTANTS FOR IBM RS/6000 WORKSTATIONS WITH -qautodbl=dblpad. C C === MACHINE = IBM.RS6000.XLF-WITH-AUTODBL-OPTION C === MACHINE = SUN.F77-WITH-R8-OPTION C === MACHINE = SGI.ORIGIN.F77-WITH-R8-D16-OPTIONS C DATA RMACH(1) / 2.2250738585072E-307 / C DATA RMACH(2) / 1.7976931348623E308 / C DATA RMACH(3) / 1.1102230246252E-16 / C DATA RMACH(4) / 2.2204460492503E-16 / C DATA RMACH(5) / 0.30102999566398 / C C MACHINE CONSTANTS FOR AMDAHL MACHINES. C C === MACHINE = AMDAHL C DATA SMALL(1) / 1048576 / C DATA LARGE(1) / 2147483647 / C DATA RIGHT(1) / 990904320 / C DATA DIVER(1) / 1007681536 / C DATA LOG10(1) / 1091781651 / C C MACHINE CONSTANTS FOR THE BURROUGHS 1700 SYSTEM. C C === MACHINE = BURROUGHS.1700 C DATA RMACH(1) / Z400800000 / C DATA RMACH(2) / Z5FFFFFFFF / C DATA RMACH(3) / Z4E9800000 / C DATA RMACH(4) / Z4EA800000 / C DATA RMACH(5) / Z500E730E8 / C C MACHINE CONSTANTS FOR THE BURROUGHS 5700/6700/7700 SYSTEMS. C C === MACHINE = BURROUGHS.5700 C === MACHINE = BURROUGHS.6700 C === MACHINE = BURROUGHS.7700 C DATA RMACH(1) / O1771000000000000 / C DATA RMACH(2) / O0777777777777777 / C DATA RMACH(3) / O1311000000000000 / C DATA RMACH(4) / O1301000000000000 / C DATA RMACH(5) / O1157163034761675 / C C MACHINE CONSTANTS FOR THE CONVEX C1, C2, C3 SERIES (NATIVE MODE) C C === MACHINE = CONVEX C DATA RMACH(1) / 2.9387360E-39 / C DATA RMACH(2) / 1.7014117E+38 / C DATA RMACH(3) / 5.9604645E-08 / C DATA RMACH(4) / 1.1920929E-07 / C DATA RMACH(5) / 3.0102999E-01 / C C MACHINE CONSTANTS FOR THE CONVEX C1, C2, C3 (NATIVE MODE) C WITH -P8 OPTION C C === MACHINE = CONVEX.P8 C DATA RMACH(1) / 5.562684646268007E-309 / C DATA RMACH(2) / 8.988465674311577E+307 / C DATA RMACH(3) / 1.110223024625157E-016 / C DATA RMACH(4) / 2.220446049250313E-016 / C DATA RMACH(5) / 3.010299956639812E-001 / C C MACHINE CONSTANTS FOR THE CONVEX C1, C2, C3 (IEEE MODE) C C === MACHINE = CONVEX.IEEE C DATA RMACH(1) / 1.1754945E-38 / C DATA RMACH(2) / 3.4028234E+38 / C DATA RMACH(3) / 5.9604645E-08 / C DATA RMACH(4) / 1.1920929E-07 / C DATA RMACH(5) / 3.0102999E-01 / C C MACHINE CONSTANTS FOR THE CONVEX C1, C2, C3 (IEEE MODE) C WITH -P8 OPTION C C === MACHINE = CONVEX.IEEE.P8 C DATA RMACH(1) / 2.225073858507202E-308 / C DATA RMACH(2) / 1.797693134862315E+308 / C DATA RMACH(3) / 1.110223024625157E-016 / C DATA RMACH(4) / 2.220446049250313E-016 / C DATA RMACH(5) / 3.010299956639812E-001 / C C MACHINE CONSTANTS FOR THE CYBER 170/180 SERIES USING NOS (FTN5). C C === MACHINE = CYBER.170.NOS C === MACHINE = CYBER.180.NOS C DATA RMACH(1) / O"00014000000000000000" / C DATA RMACH(2) / O"37767777777777777777" / C DATA RMACH(3) / O"16404000000000000000" / C DATA RMACH(4) / O"16414000000000000000" / C DATA RMACH(5) / O"17164642023241175720" / C C MACHINE CONSTANTS FOR THE CDC 180 SERIES USING NOS/VE C C === MACHINE = CYBER.180.NOS/VE C DATA RMACH(1) / Z"3001800000000000" / C DATA RMACH(2) / Z"4FFEFFFFFFFFFFFE" / C DATA RMACH(3) / Z"3FD2800000000000" / C DATA RMACH(4) / Z"3FD3800000000000" / C DATA RMACH(5) / Z"3FFF9A209A84FBCF" / C C MACHINE CONSTANTS FOR THE CYBER 205 C C === MACHINE = CYBER.205 C DATA RMACH(1) / X'9000400000000000' / C DATA RMACH(2) / X'6FFF7FFFFFFFFFFF' / C DATA RMACH(3) / X'FFA3400000000000' / C DATA RMACH(4) / X'FFA4400000000000' / C DATA RMACH(5) / X'FFD04D104D427DE8' / C C MACHINE CONSTANTS FOR THE CDC 6000/7000 SERIES. C C === MACHINE = CDC.6000 C === MACHINE = CDC.7000 C DATA RMACH(1) / 00014000000000000000B / C DATA RMACH(2) / 37767777777777777777B / C DATA RMACH(3) / 16404000000000000000B / C DATA RMACH(4) / 16414000000000000000B / C DATA RMACH(5) / 17164642023241175720B / C C MACHINE CONSTANTS FOR THE CRAY 1, XMP, 2, AND 3. C C === MACHINE = CRAY.46-BIT-INTEGER C === MACHINE = CRAY.64-BIT-INTEGER C DATA RMACH(1) / 200034000000000000000B / C DATA RMACH(2) / 577767777777777777776B / C DATA RMACH(3) / 377224000000000000000B / C DATA RMACH(4) / 377234000000000000000B / C DATA RMACH(5) / 377774642023241175720B / C C MACHINE CONSTANTS FOR THE DATA GENERAL ECLIPSE S/200 C C NOTE - IT MAY BE APPROPRIATE TO INCLUDE THE FOLLOWING LINE - C STATIC RMACH(5) C C === MACHINE = DATA_GENERAL.ECLIPSE.S/200 C DATA SMALL/20K,0/,LARGE/77777K,177777K/ C DATA RIGHT/35420K,0/,DIVER/36020K,0/ C DATA LOG10/40423K,42023K/ C C ELXSI 6400 C C === MACHINE = ELSXI.6400 C DATA SMALL(1) / '00800000'X / C DATA LARGE(1) / '7F7FFFFF'X / C DATA RIGHT(1) / '33800000'X / C DATA DIVER(1) / '34000000'X / C DATA LOG10(1) / '3E9A209B'X / C C MACHINE CONSTANTS FOR THE HARRIS 220 C MACHINE CONSTANTS FOR THE HARRIS SLASH 6 AND SLASH 7 C C === MACHINE = HARRIS.220 C === MACHINE = HARRIS.SLASH6 C === MACHINE = HARRIS.SLASH7 C DATA SMALL(1),SMALL(2) / '20000000, '00000201 / C DATA LARGE(1),LARGE(2) / '37777777, '00000177 / C DATA RIGHT(1),RIGHT(2) / '20000000, '00000352 / C DATA DIVER(1),DIVER(2) / '20000000, '00000353 / C DATA LOG10(1),LOG10(2) / '23210115, '00000377 / C C MACHINE CONSTANTS FOR THE HONEYWELL 600/6000 SERIES. C MACHINE CONSTANTS FOR THE HONEYWELL DPS 8/70 SERIES. C C === MACHINE = HONEYWELL.600/6000 C === MACHINE = HONEYWELL.DPS.8/70 C DATA RMACH(1) / O402400000000 / C DATA RMACH(2) / O376777777777 / C DATA RMACH(3) / O714400000000 / C DATA RMACH(4) / O716400000000 / C DATA RMACH(5) / O776464202324 / C C MACHINE CONSTANTS FOR THE HP 2100 C 3 WORD DOUBLE PRECISION WITH FTN4 C C === MACHINE = HP.2100.3_WORD_DP C DATA SMALL(1), SMALL(2) / 40000B, 1 / C DATA LARGE(1), LARGE(2) / 77777B, 177776B / C DATA RIGHT(1), RIGHT(2) / 40000B, 325B / C DATA DIVER(1), DIVER(2) / 40000B, 327B / C DATA LOG10(1), LOG10(2) / 46420B, 46777B / C C MACHINE CONSTANTS FOR THE HP 2100 C 4 WORD DOUBLE PRECISION WITH FTN4 C C === MACHINE = HP.2100.4_WORD_DP C DATA SMALL(1), SMALL(2) / 40000B, 1 / C DATA LARGE91), LARGE(2) / 77777B, 177776B / C DATA RIGHT(1), RIGHT(2) / 40000B, 325B / C DATA DIVER(1), DIVER(2) / 40000B, 327B / C DATA LOG10(1), LOG10(2) / 46420B, 46777B / C C MACHINE CONSTANTS FOR THE IBM 360/370 SERIES, C THE XEROX SIGMA 5/7/9, THE SEL SYSTEMS 85/86 AND C THE INTERDATA 3230 AND INTERDATA 7/32. C C === MACHINE = IBM.360 C === MACHINE = IBM.370 C === MACHINE = XEROX.SIGMA.5 C === MACHINE = XEROX.SIGMA.7 C === MACHINE = XEROX.SIGMA.9 C === MACHINE = SEL.85 C === MACHINE = SEL.86 C === MACHINE = INTERDATA.3230 C === MACHINE = INTERDATA.7/32 C DATA RMACH(1) / Z00100000 / C DATA RMACH(2) / Z7FFFFFFF / C DATA RMACH(3) / Z3B100000 / C DATA RMACH(4) / Z3C100000 / C DATA RMACH(5) / Z41134413 / C C MACHINE CONSTANTS FOR THE INTERDATA 8/32 C WITH THE UNIX SYSTEM FORTRAN 77 COMPILER. C C FOR THE INTERDATA FORTRAN VII COMPILER REPLACE C THE Z'S SPECIFYING HEX CONSTANTS WITH Y'S. C C === MACHINE = INTERDATA.8/32.UNIX C DATA RMACH(1) / Z'00100000' / C DATA RMACH(2) / Z'7EFFFFFF' / C DATA RMACH(3) / Z'3B100000' / C DATA RMACH(4) / Z'3C100000' / C DATA RMACH(5) / Z'41134413' / C C MACHINE CONSTANTS FOR THE PDP-10 (KA OR KI PROCESSOR). C C === MACHINE = PDP-10.KA C === MACHINE = PDP-10.KI C DATA RMACH(1) / "000400000000 / C DATA RMACH(2) / "377777777777 / C DATA RMACH(3) / "146400000000 / C DATA RMACH(4) / "147400000000 / C DATA RMACH(5) / "177464202324 / C C MACHINE CONSTANTS FOR PDP-11 FORTRAN SUPPORTING C 32-BIT INTEGERS (EXPRESSED IN INTEGER AND OCTAL). C C === MACHINE = PDP-11.32-BIT C DATA SMALL(1) / 8388608 / C DATA LARGE(1) / 2147483647 / C DATA RIGHT(1) / 880803840 / C DATA DIVER(1) / 889192448 / C DATA LOG10(1) / 1067065499 / C C DATA RMACH(1) / O00040000000 / C DATA RMACH(2) / O17777777777 / C DATA RMACH(3) / O06440000000 / C DATA RMACH(4) / O06500000000 / C DATA RMACH(5) / O07746420233 / C C MACHINE CONSTANTS FOR PDP-11 FORTRAN SUPPORTING C 16-BIT INTEGERS (EXPRESSED IN INTEGER AND OCTAL). C C === MACHINE = PDP-11.16-BIT C DATA SMALL(1),SMALL(2) / 128, 0 / C DATA LARGE(1),LARGE(2) / 32767, -1 / C DATA RIGHT(1),RIGHT(2) / 13440, 0 / C DATA DIVER(1),DIVER(2) / 13568, 0 / C DATA LOG10(1),LOG10(2) / 16282, 8347 / C C DATA SMALL(1),SMALL(2) / O000200, O000000 / C DATA LARGE(1),LARGE(2) / O077777, O177777 / C DATA RIGHT(1),RIGHT(2) / O032200, O000000 / C DATA DIVER(1),DIVER(2) / O032400, O000000 / C DATA LOG10(1),LOG10(2) / O037632, O020233 / C C MACHINE CONSTANTS FOR THE SEQUENT BALANCE 8000. C C === MACHINE = SEQUENT.BALANCE.8000 C DATA SMALL(1) / $00800000 / C DATA LARGE(1) / $7F7FFFFF / C DATA RIGHT(1) / $33800000 / C DATA DIVER(1) / $34000000 / C DATA LOG10(1) / $3E9A209B / C C MACHINE CONSTANTS FOR THE UNIVAC 1100 SERIES. C C === MACHINE = UNIVAC.1100 C DATA RMACH(1) / O000400000000 / C DATA RMACH(2) / O377777777777 / C DATA RMACH(3) / O146400000000 / C DATA RMACH(4) / O147400000000 / C DATA RMACH(5) / O177464202324 / C C MACHINE CONSTANTS FOR THE VAX 11/780 C (EXPRESSED IN INTEGER AND HEXADECIMAL) C *** THE INTEGER FORMAT SHOULD BE OK FOR UNIX SYSTEMS*** C C === MACHINE = VAX.11/780 C DATA SMALL(1) / 128 / C DATA LARGE(1) / -32769 / C DATA RIGHT(1) / 13440 / C DATA DIVER(1) / 13568 / C DATA LOG10(1) / 547045274 / C C ***THE HEX FORMAT BELOW MAY NOT BE SUITABLE FOR UNIX SYSTEMS*** C C DATA SMALL(1) / Z00000080 / C DATA LARGE(1) / ZFFFF7FFF / C DATA RIGHT(1) / Z00003480 / C DATA DIVER(1) / Z00003500 / C DATA LOG10(1) / Z209B3F9A / C C C***FIRST EXECUTABLE STATEMENT R1MACH C R1MACH = RMACH(I) RETURN C END