/[NO]ASSUME Specifies various assumptions, including the following: o What the compiler can assume about program behavior without affecting correct results when it optimizes code. o Whether the compiler should use certain code transformations that affect floating-point operations. These changes may affect the accuracy of the program's results. o Whether a single-precision constant assigned to a double-precision variable should be evaluated in single or double precision. o Changes the directory where the compiler searches for files specified by an INCLUDE statement to the directory where the source files reside, not the current default directory. The defaults are /ASSUME=(ACCURACY_SENSITIVE, ALTPARAM, NOBUFFERED_IO, NOBYTERECL, NODUMMY_ALIASES, NOF77RTL, NOFP_CONSTANT, NOINT_CONSTANT, PROTECT_CONSTANTS, NOSOURCE_INCLUDE,NO64BIT_STRING_PARAMS). [NO]ACCURACY_SENSITIVE Specifies whether certain code transformations that affect floating-point operations are allowed. These changes may or may affect the accuracy of the program's results. The default, /ASSUME=ACCURACY_SENSITIVE, directs the compiler to use only naive scalar rules for calculations. This setting may prevent some optimizations. Specifying /ASSUME=NOACCURACY_SENSITIVE allows the compiler to reorder floating-point operations based on algebraic identities (inverses, associativity, and distribution). For example, this allows the compiler to move divide operations outside of loops, thereby improving performance. The numeric results can be slightly different from the default (/ASSUME=ACCURACY_SENSITIVE) because of the way intermediate results are rounded. Numeric results with /ASSUME=NOACCURACY_SENSITIVE are not categorically less accurate. They can produce more accurate results for certain floating-point calculations, such as dot product summations. For example, the following expressions are mathematically equivalent but may not compute the same value using finite precision arithmetic. X = (A + B) - C X = A + (B - C) [NO]ALTPARAM Allows or disallows the alternate syntax for PARAMETER statements. The alternate form has no parentheses surrounding the list, and the form of the constant, rather than inplicit or explicit typing, determines the data type of the variable. The default is /ASSUME=ALTPARAM. [NO]BUFFERED_IO Controls whether buffered I/O is used for all Fortran logical units opened for sequential writing. The default is /ASSUME=NOBUFFERED_IO. [NO]BYTERECL Specifies (for unformatted data files) that the units for the OPEN statement RECL specifier (record length) value are in bytes, not longwords (four-byte units). For formatted files, the RECL unit is always in bytes. INQUIRE returns RECL in bytes if the unit is not open. INQUIRE returns RECL in longwords if the file is open for unformatted data and /ASSUME=BYTERECL is not specified; otherwise, it returns RECL in bytes. [NO]DUMMY_ALIASES Specifies whether dummy (formal) arguments are permitted to share memory locations with COMMON block variables or other dummy arguments. If you specify /ASSUME=DUMMY_ALIASES, the compiler assumes that dummy (formal) arguments to procedures may share memory locations with other dummy arguments or with variables shared through use association, host association, or common block use. These program semantics do not strictly obey the Fortran 95/90 standard and slow performance. If you specify /ASSUME=NODUMMY_ALIASES, the default, the compiler does not need to make these assumptions, which results in better run-time performance. However, omitting /ASSUME=DUMMY_ALIASES can cause some programs that depend on such aliases to fail or produce wrong answers. You only need to compile the called subprogram with /ASSUME=DUMMY_ALIASES. If you compile a program containing dummy aliasing with /ASSUME=NODUMMY_ALIASES in effect, the run-time behavior of the program will be unpredictable. The run-time behavior will depend on the exact optimizations that are performed. In some cases, normal results will occur. However, in other cases, results will differ because the values used in computations involving the offending aliases will differ. [NO]F77RTL Specifies whether certain run-time I/O defaults are to match those of HP Fortran 77 compilers. If you specify /ASSUME=F77RTL, the following behavior changes: - In NAMELIST-directed output, the HP Fortran 77 extension $ delimiters are used instead of the Fortran 90 standard delimiters - PAD='NO' is the default when files are opened The default is /ASSUME=NOF77RTL, which specifies that Fortran 95 semantics are to be followed. [NO]FP_CONSTANT Specifies whether a single-precision constant assigned to a double-precision variable will be evaluated in double precision. If you use /ASSUME=NOFP_CONSTANT (the default), a single-precision constant assigned to a double-precision variable is evaluated in single precision. The Fortran 95/90 standard requires that the constant be evaluated in single precision. If you specify /ASSUME=FP_CONSTANT, a single-precision constant assigned to a double-precision variable is evaluated in double precision. Certain programs created for Fortran 77 compilers (including HP Fortran 77) may show different results with /ASSUME=FP_CONSTANT than when you use /ASSUME=NOFP_CONSTANT, because they rely on single-precision constants assigned to a double-precision variable to be evaluated in double precision. In the following example, if you specify /ASSUME=FP_CONSTANT, identical values are assigned to D1 and D2. If you use /ASSUME=NOFP_CONSTANT, VSI Fortran will follow the standard and assign a less precise value to D1: REAL(KIND=8) D1,D2 DATA D1 /2.71828182846182/ ! REAL(KIND=4) value expanded to double DATA D2 /2.71828182846182D0/ ! REAL(KIND=8) value assigned to double [NO]INT_CONSTANT Specifies whether Fortran 77 or Fortran 95/90 semantics are used to determine the type for integer constants. If you specify /ASSUME=INT_CONSTANT, integer constants take their type from the value, as interpreted by HP Fortran 77. If you specify /ASSUME=NOINT_CONSTANT, integer constants have Fortran 95/90 "default integer" type. This is the default. [NO]MINUS0 Specifies whether the compiler uses F95 or F90/FORTRAN 77 standard semantics for the treatment of the IEEE floating value -0.0 in the SIGN intrinsic. If you specify /ASSUME=NOMINUS0, F90 (FORTRAN 77) standard semantics are used, where IEEE floating value -0.0 is treated as 0.0. This is the default. If /ASSUME=MINUS0 is specified, F95 standard semantics are used, where IEEE floating value -0.0 is treated as -0.0. Note that the processor must be capable of distinguishing the difference between -0.0 and +0.0. [NO]PROTECT_CONSTANTS Specifies whether a copy of a constant actual argument is passed. /ASSUME=NOPROTECT_CONSTANTS causes a copy of a constant actual argument to be passed, so it can be modified by the called routine, even though the Fortran Standard prohibits such modification. The constant is not modified in the calling routine. The default, /ASSUME=PROTECT_CONSTANTS, passes the constant actual argument. Any attempt to modify it results in an error. [NO]SOURCE_INCLUDE Specifies the directory where the compiler searches for source files or text libraries specified by an INCLUDE statement. The default, /ASSUME=NOSOURCE_INCLUDE, indicates that the compiler should search in the current default directory. Specifying /ASSUME=SOURCE_INCLUDE causes the compiler to search the directory of the source file specified on the F90 command line, instead of the current default directory. You can specify additional directories for the compiler to search for include files or include libraries by using the /INCLUDE qualifier. [NO]64BIT_STRING_PARAMS Specifies whether all string variables uses as parameters should use 64-bit descriptors. The default, /ASSUME=NO64BIT_STRING_PARAMS, indicates that the compiler should generate 32-bit descriptors for string variables unless such a variable is individually specified for a 64-bit descriptor by using a compiler directive. Specifying /ASSUME=64BIT_STRING_PARAMS causes ALL string variables used as parameters to be passed/received by 64-bit descriptors. Note that an unwanted side effect of changing explicit or implicit parameters to system calls or the Fortran Runtime Library can occur, causing runtime errors. For more information, see the HP Fortran for OpenVMS User Manual.