HP OpenVMS Systems Documentation

Content starts here

HP Fortran for OpenVMS

Language Reference Manual

Order Number: BA368-90004


January 2005

This manual contains the complete description of the HP Fortran programming language, which includes Fortran 95 and Fortran 90 features.

Note

HP Fortran provides a number of extensions to the Fortran 95 Standard. In this online HTML version of the manual, these extensions are colored in teal.

Revision/Update Information: This is a new manual.

Software Version: HP Fortran for OpenVMS Systems Version 8.0

Operating System: OpenVMS Industry Standard 64 Systems Version 8.2
OpenVMS Alpha Systems Version 8.2




Hewlett-Packard Company Palo Alto, California


© Copyright 2005 Hewlett-Packard Development Company, L.P.

Confidential computer software. Valid license from HP required for possession, use or copying. Consistent with FAR 12.211 and 12.212, Commercial Computer Software, Computer Software Documentation, and Technical Data for Commercial Items are licensed to the U.S. Government under vendor's standard commercial license.

The information contained herein is subject to change without notice. The only warranties for HP products and services are set forth in the express warranty statements accompanying such products and services. Nothing herein should be construed as constituting an additional warranty. HP shall not be liable for technical or editorial errors or omissions contained herein.

Intel and Itanium are trademarks or registered trademarks of Intel Corporation or its subsidiaries in the United States and other countries.

Printed in the US

ZK6324

This manual is available on CD-ROM.

Contents Index


Preface

This manual contains the complete description of the HP Fortran programming language, which includes Fortran 95 and Fortran 90 features. It contains information about language syntax and semantics, adherence to various Fortran standards, and extensions to those standards.

Note

In this manual, the term OpenVMS refers to both OpenVMS I64 and OpenVMS Alpha systems. If there are differences in the behavior of the HP Fortran compiler on the two operating systems, those differences are noted in the text.

Intended Audience

This manual is intended for experienced applications programmers who have a basic understanding of Fortran concepts and the Fortran 95/90 language, and are using HP Fortran in either a single-platform or multiplatform environment.

Some familiarity with parallel programming concepts and OpenVMS is helpful. This manual is not a Fortran or programming tutorial.

Document Structure

This manual consists of the following chapters and appendixes:

  • Chapter 1 describes language standards, language compatibility, and some features of Fortran 95 and Fortran 90.
  • Chapter 2 describes program structure, the Fortran 95/90 character set, and source forms.
  • Chapter 3 describes intrinsic and derived data types, constants, variables (scalars and arrays), and substrings.
  • Chapter 4 describes expressions and assignment.
  • Chapter 5 describes specification statements, which declare the attributes of data objects.
  • Chapter 6 describes dynamic allocation.
  • Chapter 7 describes constructs and statements that can transfer control within a program.
  • Chapter 8 describes program units (including modules), subroutines and functions, and procedure interfaces.
  • Chapter 9 summarizes all intrinsic procedures.
  • Chapter 10 describes data transfer input/output (I/O) statements.
  • Chapter 11 describes the rules for I/O formatting.
  • Chapter 12 describes auxiliary I/O statements you can use to perform file operations.
  • Chapter 13 describes compilation control statements.
  • Chapter 14 describes compiler directives.
  • Chapter 15 describes scope and association.
  • Appendix A describes obsolescent language features in Fortran 95 and Fortran 90.
  • Appendix B describes some statements and language features supported for programs written in older versions of Fortran.
  • Appendix C describes the HP Fortran character sets.
  • Appendix D describes data representation models for numeric intrinsic functions.
  • Appendix E summarizes HP Fortran extensions to the Fortran 95 Standard.
  • The Glossary contains abbreviated definitions of some commonly used terms in this manual.

Note

If you are reading the printed version of this manual, be aware that the version at the HP Fortran Web site and the version on the Documentation CD-ROM from HP may contain updated and/or corrected information.

Related Documents

The following documents are also useful:

  • HP Fortran for OpenVMS User Manual
    This manual provides information about HP Fortran program development and the run-time environment. It describes compiling, linking, running, and debugging HP Fortran programs, run-time error-handling and I/O, performance guidelines, data types, numeric data conversion, calling other procedures and library routines, and compatibility with Compaq Fortran 77.
  • HP Fortran Installation Guide for OpenVMS I64 Systems or HP Fortran Installation Guide for OpenVMS Alpha Systems
    These guides provide information on how to install HP Fortran.
  • OpenVMS documentation set
    This set provides detailed information about components and features of the OpenVMS operating system, such as commands, tools, libraries, and other aspects of the programming environment.
  • Standards and Specifications
    The following copyrighted standard and specification documents contain precise descriptions of many of the features found in HP Fortran:
    • American National Standard Programming Language FORTRAN, ANSI X3.9-1978
    • American National Standard Programming Language Fortran 90, ANSI X3.198-1992
      This Standard is equivalent to: International Standards Organization Programming Language Fortran, ISO/IEC 1539:1991 (E).
    • American National Standard Programming Language Fortran 95, ANSI X3J3/96-007
      This Standard is equivalent to: International Standards Organization Programming Language Fortran, ISO/IEC 1539-1:1997 (E).

Other Sources of Information

This section alphabetically lists some commercially published documents that provide reference or tutorial information on Fortran 95 and Fortran 90:

  • Fortran 90/95 for Scientists and Engineers by S. Chapman; published by McGraw-Hill, ISBN 0-07-011938-4.
  • Fortran 90 Handbook by J. Adams, W. Brainerd, J. Martin, B. Smith, and J. Wagener; published by Intertext Publications (McGraw--Hill), ISBN 0-07-000406-4.
  • Fortran 90 Programming by T. Ellis, I. Philips, and T. Lahey; published by Addison--Wesley, ISBN 0201-54446-6.
  • Introduction to Fortran 90/95 by S. Chapman; published by WCB McGraw--Hill, ISBN 0-07-011969-4.
  • Programmer's Guide to Fortran 90, Second Edition by W. Brainerd, C. Goldberg, and J. Adams; published by Unicomp, ISBN 0-07-000248-7.

HP does not endorse these books or recommend them over other books on the same subjects.

Reader's Comments

HP welcomes your comments on this or any other HP Fortran manual. You can send comments by email to:


fortran@hp.com

HP Fortran Web Page

The HP Fortran home page is at:


http://www.hp.com/software/fortran

This Web site contains information about software patch kits, example programs, and additional product information.

Conventions

The following product names may appear in this manual:

  • HP OpenVMS Industry Standard 64 for Integrity Servers
  • OpenVMS I64
  • I64

All three names---the longer form and the two abbreviated forms---refer to the version of the OpenVMS operating system that runs on the Intel® Itanium® architecture.

The following conventions might be used in this manual:

Ctrl/ x A sequence such as Ctrl/ x indicates that you must hold down the key labeled Ctrl while you press another key or a pointing device button.
PF1 x A sequence such as PF1 x indicates that you must first press and release the key labeled PF1 and then press and release another key or a pointing device button.
[Return] In examples, a key name enclosed in a box indicates that you press a key on the keyboard. (In text, a key name is not enclosed in a box.)

In the HTML version of this document, this convention appears as brackets, rather than a box.

... A horizontal ellipsis in examples indicates one of the following possibilities:
  • Additional optional arguments in a statement have been omitted.
  • The preceding item or items can be repeated one or more times.
  • Additional parameters, values, or other information can be entered.
.
.
.
A vertical ellipsis indicates the omission of items from a code example or command format; the items are omitted because they are not important to the topic being discussed.
( ) In command format descriptions, parentheses indicate that you must enclose choices in parentheses if you specify more than one.
[ ] In command format descriptions, brackets indicate optional choices. You can choose one or more items or no items. Do not type the brackets on the command line. However, you must include the brackets in the syntax for OpenVMS directory specifications and for a substring specification in an assignment statement.
| In command format descriptions, vertical bars separate choices within brackets or braces. Within brackets, the choices are optional; within braces, at least one choice is required. Do not type the vertical bars on the command line.
{ } In command format descriptions, braces indicate required choices; you must choose at least one of the items listed. Do not type the braces on the command line.
bold type Bold type represents the introduction of a new term. It also represents the name of an argument, an attribute, or a reason.
italic type Italic type indicates important information, complete titles of manuals, or variables. Variables include information that varies in system output (Internal error number), in command lines (/PRODUCER= name), and in command parameters in text (where dd represents the predefined code for the device type).
UPPERCASE TYPE Uppercase type indicates a command, the name of a routine, the name of a file, or the abbreviation for a system privilege.
- A hyphen at the end of a command format description, command line, or code line indicates that the command or statement continues on the following line.
numbers All numbers in text are assumed to be decimal unless otherwise noted. Nondecimal radixes---binary, octal, or hexadecimal---are explicitly indicated.
real This term refers to all floating-point intrinsic data types as a group.
complex This term refers to all complex floating-point intrinsic data types as a group.
logical This term refers to logical intrinsic data types as a group.
integer This term refers to integer intrinsic data types as a group.
Fortran This term refers to language information that is common to ANSI FORTRAN-77, ANSI/ISO Fortran 90, ANSI/ISO Fortran 95, and HP Fortran 90.
Fortran 90 This term refers to language information that is common to ANSI/ISO Fortran 90 and HP Fortran. For example, a new language feature introduced in the Fortran 90 standard.
Fortran 95 This term refers to language information that is common to ISO Fortran 95 and HP Fortran. For example, a new language feature introduced in the Fortran 95 standard.
HP Fortran Unless otherwise specified, this term (formerly Compaq Fortran) refers to language information that is common to the Fortran 90 and 95 standards, and any HP Fortran extensions, running on the OpenVMS operating system. Since the Fortran 90 standard is a superset of the FORTRAN-77 standard, HP Fortran also supports the FORTRAN-77 standard. HP Fortran supports all of the deleted features of the Fortran 95 standard.


Chapter 1
Overview

This chapter describes:

1.1 Language Standards Conformance

Fortran 95 includes Fortran 90 and most features of FORTRAN 77. Fortran 90 is a superset that includes FORTRAN 77. HP Fortran fully supports the Fortran 95, Fortran 90, and FORTRAN 77 Standards.

HP Fortran conforms to the American National Standard Fortran 95 (ANSI X3J3/96-007)1 and the American National Standard Fortran 90 (ANSI X3.198-1992)2.

The ANSI committee X3J3 answers questions of interpretation of Fortran 95 and Fortran 90 language features. Any answers given by the ANSI committee that are related to features implemented in HP Fortran may result in changes in future releases of the HP Fortran compiler, even if the changes produce incompatibilities with earlier releases of HP Fortran.

HP Fortran provides a number of extensions to the Fortran 95 Standard. In the online HTML version of this manual, these extensions are colored in teal.

HP Fortran also includes support for programs that conform to the previous Fortran standards (ANSI X3.9-1978 and ANSI X3.0-1966), the International Standards Organization standard ISO 1539-1980 (E), the Federal Information Processing Institute standard FIPS 69-1, and the Military Standard 1753 Language Specification.

For More Information:

On HP Fortran language extensions, see Appendix E.

Note

1 This is the same as International Standards Organization standard ISO/IEC 1539-1:1997 (E).

2 This is the same as International Standards Organization standard ISO/IEC 1539:1991 (E).

1.2 Language Compatibility

HP Fortran is highly compatible with Compaq Fortran 77 on supported platforms, and it is substantially compatible with PDP-11 and VAX FORTRAN 77.

For More Information:

On language compatibility, compiler options, and program conversion considerations, see the HP Fortran for OpenVMS User Manual.

1.3 Fortran 95 Features

Following are some of the Fortran 95 features implemented in HP Fortran:

  • FORALL statement and construct
    In Fortran 90, you could build array values element-by-element by using array constructors and the RESHAPE and SPREAD intrinsics. The Fortran 95 FORALL statement and construct offer an alternative method.
    FORALL allows array elements, array sections, character substrings, or pointer targets to be explicitly specified as a function of the element subscripts. A FORALL construct allows several array assignments to share the same element subscript control.
    FORALL is a generalization of WHERE. They both allow masked array assignment, but FORALL uses element subscripts, while WHERE uses the whole array.
    For more information, see Section 4.2.5.
  • PURE user-defined procedures
    Pure user-defined procedures do not have side effects, such as changing the value of a variable in a common block. To specify a pure procedure, use the PURE prefix in the function or subroutine statement. Pure functions are allowed in specification statements.
    For more information, see Section 8.5.1.2.
  • ELEMENTAL user-defined procedures
    An elemental user-defined procedure is a restricted form of pure procedure. An elemental procedure can be passed an array, which is acted upon one element at a time. To specify an elemental procedure, use the ELEMENTAL prefix in the function or subroutine statement.
    For more information, see Sections 8.5.2 and 8.5.3.
  • CPU_TIME intrinsic subroutine
    This intrinsic subroutine returns a processor-dependent approximation of processor time.
    For more information, see Section 9.4.33.
  • NULL intrinsic function
    In Fortran 90, there was no way to assign a null value to the pointer by using a pointer assignment operation. A Fortran 90 pointer had to be explicitly allocated, nullified, or associated with a target during execution before association status could be determined.
    Fortran 95 provides the NULL intrinsic function that can be used to nullify a pointer.
    For more information, see Section 9.4.111.
  • Obsolescent features
    Fortran 95 deletes several language features that were obsolescent in Fortran 90, and identifies new obsolescent features.
    HP Fortran fully supports features deleted in Fortran 95.
    For more information, see Appendix A.
  • Derived-type structure default initialization
    In derived-type definitions, you can now specify default initial values for derived-type components.
    For more information, see Section 3.3.2.
  • Pointer initialization
    In Fortran 90, there was no way to define the initial value of a pointer. You can now specify default initialization for a pointer.
    For more information, see Sections 3.3.1 and 3.3.2.
  • Automatic deallocation of allocatable arrays
    Allocatable arrays whose status is allocated upon routine exit are now automatically deallocated.
    For more information, see Section 6.2.1.
  • Enhanced CEILING and FLOOR intrinsic functions
    KIND can now be specified for these intrinsic functions.
    For more information, see Sections 9.4.23 and 9.4.52.
  • Enhanced MAXLOC and MINLOC intrinsic functions
    DIM can now be specified for these intrinsic functions.
    For more information, see Sections 9.4.96 and 9.4.101.
  • Enhanced SIGN intrinsic function
    When a specific compiler option is specified, the SIGN function can now distinguish between positive and negative zero if the processor is capable of doing so.
    For more information, see Section 9.4.142.
  • Printing of --0.0
    When a specific compiler option is specified, a floating-point value of minus zero (--0.0) can now be printed if the processor can represent it.
  • Enhanced WHERE construct
    The WHERE construct has been improved to allow nested WHERE constructs and a masked ELSEWHERE statement. WHERE constructs can now be named.
    For more information, see Section 4.2.4.
  • Generic identifier allowed in END INTERFACE statement
    The END INTERFACE statement of an interface block defining a generic routine can now specify a generic identifier.
    For more information, see Section 8.9.2.
  • Zero-length formats
    On output, when using I, B, O, Z, and F edit descriptors, the specified value of the field width can be zero. In such cases, the compiler selects the smallest possible positive actual field width that does not result in the field being filled with asterisks (*).
  • Comments allowed in namelist input
    Fortran 95 allows comments (beginning with !) in namelist input data.

1.4 Fortran 90 Features

Following are some of the Fortran 90 features implemented in HP Fortran:

  • Free source form
    Fortran 90 provides a free-source form where line positions have no special meaning. There are no reserved columns, trailing comments can appear, and blanks have significance under certain circumstances (for example, P R O G R A M is not allowed as an alternative for PROGRAM ).
    For more information, see Section 2.3.1.
  • Modules
    Fortran 90 provides a form of program unit called a module, which is more powerful than (and overcomes limitations of) FORTRAN 77 block data program units.
    A module is a set of declarations that are grouped together under a single, global name. Modules let you encapsulate a set of related items such as data, procedures, and procedure interfaces, and make them available to another program unit.
    Module items can be made private to limit accessibility, provide data abstraction, and to create more secure and portable programs.
    For more information, see Section 8.3.
  • User-defined (derived) data types and operators
    Fortran 90 lets you define data types derived from any combination of the intrinsic data types and derived types. The derived-type object can be accessed as a whole, or its individual components can be accessed directly.
    You can extend the intrinsic operators (such as + and *) to user-defined data types, and also define new operators for operands of any type.
    For more information, see Sections 3.3 and 8.9.4.
  • Array operations and features
    In Fortran 90, intrinsic operators and intrinsic functions can operate on array-valued operands (whole arrays or array sections).
    Features for arrays include whole, partial, and masked array assignment (including the WHERE statement for selective assignment), and array-valued constants and expressions. You can create user-defined array-valued functions, use array constructors to specify values of a one-dimensional array, and allocate arrays dynamically (using ALLOCATABLE and POINTER attributes).
    Intrinsic procedures create multidimensional arrays, manipulate arrays, perform operations on arrays, and support computations involving arrays (for example, SUM sums the elements of an array).
    For more information, see Section 3.5.2 and Chapter 9.
  • Generic user-defined procedures
    In Fortran 90, user-defined procedures can be placed in generic interface blocks. This allows the procedures to be referenced using the generic name of the block.
    Selection of a specific procedure within the block is based on the properties of the argument, the same way as specific intrinsic functions are selected based on the properties of the argument when generic intrinsic function names are used.
    For more information, see Section 8.9.3.
  • Pointers
    Fortran 90 pointers are mechanisms that allow dynamic access and processing of data. They allow arrays to be sized dynamically and they allow structures to be linked together.
    A pointer can be of any intrinsic or derived type. When a pointer is associated with a target, it can appear in most expressions and assignments.
    For more information, see Sections 5.15 and 4.2.3.
  • Recursion
    Fortran 90 procedures can be recursive if the keyword RECURSIVE is specified on the FUNCTION or SUBROUTINE statement line.
    For more information, see Chapter 8.
  • Interface blocks
    A Fortran 90 procedure can contain an interface block. Interface blocks can be used to do the following:
    • Describe the characteristics of an external or dummy procedure
    • Define a generic name for a procedure
    • Define a new operator (or extend an intrinsic operator)
    • Define a new form of assignment

    For more information, see Section 8.9.
  • Extensibility and redundancy
    By using user-defined data types, operators, and meanings, you can extend Fortran to suit your needs. These new data types and their operations can be packaged in modules, which can be used by one or more program units to provide data abstraction.
    With the addition of new features and capabilities, some old features become redundant and may eventually be removed from the language. For example, the functionality of the ASSIGN and assigned GO TO statements can be replaced more effectively by internal procedures. The use of certain old features of Fortran can result in less than optimal performance on newer hardware architectures.
    For more information, see the HP Fortran for OpenVMS User Manual. For a list of obsolescent features, see Appendix A.
  • Additional features for source text
    Lowercase characters are now allowed in source text. A semicolon can be used to separate multiple statements on a single source line. Additional characters have been added to the Fortran character set, and names can have up to 31 characters (including underscores).
    For more information, see Chapter 2.
  • Improved facilities for numerical computation
    Intrinsic data types can be specified in a portable way by using a kind type parameter indicating the precision or accuracy required. There are also intrinsic functions that allow you to specify numeric precision and inquire about precision characteristics available on a processor.
    For more information, see Chapters 3 and 9.
  • Optional procedure arguments
    Procedure arguments can be made optional and keywords can be used when calling procedures, allowing arguments to be listed in any order.
    For more information, see Chapter 8.
  • Additional input/output features
    Fortran 90 provides additional keywords for the OPEN and INQUIRE statements. It also permits namelist formatting, and nonadvancing (stream) character-oriented input and output.
    For more information on formatting, see Chapter 10; on OPEN and INQUIRE, see Chapter 12.
  • Additional control constructs
    Fortran 90 provides a control construct (CASE) and improves the DO construct. The DO construct can now use CYCLE and EXIT statements, and can have additional (or no) control clauses (for example, WHILE). All control constructs (CASE, DO, and IF) can now be named.
    For more information, see Chapter 7.
  • Additional intrinsic procedures
    Fortran 90 provides many more intrinsic procedures than existed in FORTRAN 77. Many of these intrinsics support mathematical operations on arrays, including the construction and transformation of arrays. Bit manipulation and numerical accuracy intrinsics have been added.
    For more information, see Chapter 9.
  • Additional specification statements
    The following specification statements are in Fortran 90:
  • Additional way to specify attributes
    Fortran 90 lets you specify attributes (such as PARAMETER, SAVE, and INTRINSIC) in type declaration statements, as well as in specification statements.
    For more information, see Section 5.1.
  • Scope and association
    These concepts were implicit in FORTRAN 77, but they are explicitly defined in Fortran 90. In FORTRAN 77, the term scoping unit applies to a program unit, but Fortran 90 expands the term to include internal procedures, interface blocks, and derived-type definitions.
    For more information, see Chapter 15.


Next Contents Index