1 Getting Ready.- 1.1 Overview of the Chapter.- 1.2 FORTRAN, FORTRAN 77, Fortran 90, Fortran.- 1.3 Fortran 90 Compared with FORTRAN 77.- 1.4 Fortran 90 Version of the Hello, World Program.- 1.5 Preview: Simple Extensions of FORTRAN 77.- 1.6 Preview: Array Operations.- 1.7 Preview: Sharing Data by Way of a Module.- 1.8 Preview: Module Subprograms.- 1.9 Preview: Derived Types.- 1.10 Preview: Pointers.- 1.11 Preview: Interface Blocks.- 1.12 Preview: Scoping Units.- 1.13 Terminology: Constant, Variable, Array.- 1.14 Conventions Used in Specifying Syntax.- 2 Laying the Foundation.- 2.1 Overview of the Chapter.- 2.2 Programmer-Chosen Names.- 2.3 Free Source Form.- 2.4 The General Form of a Main Program.- 2.5 Simple Type Declarations for Intrinsic Types.- 2.6 Specifying Initial Values in a Type Declaration.- 2.7 Attribute List in a Type Declaration.- 2.8 The Fortran 90 Concept of Kind.- 2.9 Syntax of the Type Declaration Statement.- 2.10 Attribute Specification Statements.- 3 Control Constructs.- 3.1 Overview of Fortran Control Structures.- 3.2 Logical Expressions.- 3.3 The IF Construct.- 3.4 Introduction to the CASE Construct.- 3.5 A More General Example of the CASE Construct.- 3.6 CASE Selector of Type CHARACTER.- 3.7 The General Form of the CASE Construct.- 3.8 DO Construct with Loop Index.- 3.9 DO WHILE Construct.- 3.10 The Simple DO and the EXIT.- 3.11 The CYCLE Statement.- 3.12 Choosing the Right Control Structure.- 4 Arrays.- 4.1 Overview of Array Features.- 4.2 Introduction to Fortran 90 Arrays.- 4.3 Intrinsic Operators and Functions Used with Arrays.- 4.4 Masked Array Assignment.- 4.5 Array Constants.- 4.6 Array Sections.- 4.7 Array Constructors.- 4.8 The RESHAPE Intrinsic Function.- 4.9 Zero-Sized Arrays.- 4.10 Allocatable Arrays.- 4.11 Inverting a Matrix.- 5 Derived Types.- 5.1 Introduction to Derived Types and Structures.- 5.2 Defining a Derived Type and Using Structures.- 5.3 Components Need Not Be of Different Types.- 5.4 Assignment to Variables of a Derived Type.- 5.5 Structure Constructors.- 5.6 Components May Be of Derived Types.- 5.7 A Structure Component Can Be an Array.- 5.8 An Element of an Array Can Be a Structure.- 5.9 A Variable Name May Duplicate a Component Name.- 5.10 Derived-Type Definitions and Host Association.- 5.11 The SEQUENCE Statement.- 5.12 General Syntax of a Derived-Type Definition.- 5.13 Sorting an Array of Derived Type.- 6 External Subprograms.- 6.1 Background.- 6.2 Elementary Aspects of Subprograms.- 6.3 Array Arguments: A First Look.- 6.4 The INTENT Attribute.- 6.5 Automatic Data Objects.- 6.6 The SAVE Attribute.- 6.7 The RESULT Option in the FUNCTION Statement.- 6.8 Recursion.- 6.9 Syntax of SUBROUTINE and FUNCTION Statements.- 6.10 External Subprograms and Scope.- 6.11 Terminology: Subprograms and Procedures.- 7 Introduction to the Module.- 7.1 Overview of the Module.- 7.2 Module Containing Related Named Constants.- 7.3 A Module Containing a Derived-Type Definition.- 7.4 A Module May Use Another Module.- 7.5 Modules Facilitate Data Sharing.- 7.6 Global Allocatable Arrays.- 7.7 The SAVE Attribute for Variables in a Module.- 7.8 Initialization May Be Performed in a Module.- 7.9 A Module May Contain Subprograms.- 7.10 The Assumed-Shape Array.- 7.11 Function Result of Derived Type.- 7.12 A Function Can Return an Array-Valued Result.- 7.13 Elementary Language Rules Related to Modules.- 8 Internal Subprograms.- 8.1 Overview of Internal Subprograms.- 8.2 Example of an Internal Subroutine.- 8.3 Example of an Internal Function.- 8.4 Example of a Host Containing Four Internal Subprograms.- 8.5 The Scope of Variable Names.- 8.6 The Scope of Statement Labels.- 8.7 An Internal Function Whose Result Is of a Derived Type.- 8.8 An Internal Function Whose Result Is an Array.- 8.9 An Internal Subprogram May Be Recursive.- 8.10 A Module Subprogram May Contain Internal Subprograms.- 8.11 Internal Subprograms and Scoping Units.- 8.12 Language Rules Related to Internal Subprograms.- 9 Overloading and Defined Operations.- 9.1 Introduction to Generic Identifiers.- 9.2 A Programmer-Defined Generic Name.- 9.3 Intrinsic Operators.- 9.4 A First Example of Operator Overloading.- 9.5 Defined Operations Are Not Automatically Commutative.- 9.6 Overloading a Relational Operator.- 9.7 Programmer-Defined Operators.- 9.8 Precedence of Operators.- 9.9 Defined Assignment: Overloading the Equal Sign.- 9.10 Rules Applying to Generic Identifiers.- 10 Pointers to Arrays.- 10.1 Introduction to Fortran 90 Pointers.- 10.2 Pointer Assignment.- 10.3 Pointer to a Declared Array.- 10.4 An Array Section May Be the Target of a Pointer.- 10.5 Pointer Association Status.- 10.6 Dynamically Allocated Targets.- 10.7 Swapping Pointers Instead of Swapping Arrays.- 10.8 Array Pointer as a Component of a Derived Type.- 10.9 Achieving the Effect of an Array of Pointers.- 10.10 A Dummy Argument May Have the POINTER Attribute.- 10.11 A Dummy Argument May Have the TARGET Attribute.- 10.12 A Function May Return a Result That Is a Pointer.- 11 Pointers to Structures.- 11.1 Introduction to Pointers to Structures.- 11.2 Pointer to a Declared Structure.- 11.3 Pointer to a Dynamically Allocated Structure.- 11.4 Introduction to the Queue.- 11.5 Queue Operations Broken out into Subprograms.- 11.6 Stacks as Linked Lists.- 11.7 Binary Trees.- 12 Accessibility of Identifiers in a Module.- 12.1 Overview of Module Access.- 12.2 Using PRIVATE to Make Names Inaccessible.- 12.3 Using PUBLIC to Make Names Accessible.- 12.4 A Derived Type May Be Entirely Inaccessible.- 12.5 A PUBLIC Derived Type with Inaccessible Components.- 12.6 Generic Identifiers Are Not Automatically Accessible.- 12.7 Rules for Accessibility Statements.- 12.8 The Rename Capability in the USE Statement.- 12.9 The ONLY Option of the USE Statement.- 12.10 Rules Applicable to the USE Statement.- 13 Interface Bodies.- 13.1 General Remarks about the Interface Body.- 13.2 Elementary Aspects of Interface Bodies.- 13.3 Placing an Interface Block in a Module.- 13.4 Variable Names of a Derived Type in an Interface Body.- 13.5 When an Interface Body Is Mandatory.- 13.6 External Subprogram with Assumed-Shape Argument.- 13.7 External Function Returning Array of Values as Result.- 13.8 CHARACTER Function Result of Nonconstant Length.- 13.9 Argument Keywords.- 13.10 Optional Arguments.- 13.11 Generic Name Implemented Using External Procedures.- 13.12 Issues of Scope Related to Interface Bodies.- 14 Input/Output.- 14.1 Overview of New I/O Features.- 14.2 The STATUS = REPLACE Specifier in the OPEN.- 14.3 The POSITION= Specifier in the OPEN.- 14.4 The ACTION= Specifier in the OPEN.- 14.5 The PAD= Specifier in the OPEN.- 14.6 The DELIM= Specifier in the OPEN.- 14.7 Nonadvancing I/O.- 14.8 The SIZE= Specifier in a Nonadvancing READ.- 14.9 ES and EN Data Edit Descriptors.- 14.10 Namelist I/O.- 14.11 The New Specifiers in the INQUIRE Statement.- 14.12 Inquire-by-Output-List Form of the INQUIRE Statement.- Appendix A Fortran 90 Standard Statement Keywords.- Appendix B Order of Statements.- Appendix C Fortran 90 Standard Generic Intrinsic Procedures.- Appendix D Fixed Source Form.- Appendix E Binary, Octal, and Hexadecimal Values.- Appendix F Obsolescent Features.- F.1 The Nature of Obsolescent Features.- F.2 DO Control Variable of Type REAL.- F.3 DO Termination Other Than END DO or CONTINUE.- F.4 Shared DO Termination.- F.5 Arithmetic IF Statement.- F.6 Branch to END IF from Outside IF Construct.- F.7 H Edit Descriptor.- F.8 PAUSE Statement.- F.9 The ASSIGN Statement and the Assigned GO TO Statement.- F.10 Assigned Format.- F.11 Alternate Return.- Appendix G Special-Purpose Varieties of Procedures.- G.1 Overview of the Appendix.- G.2 Statement Functions.- G.3 Multiple-Entry Subprograms.- G.4 Dummy Procedures.- G.5 Intrinsic Procedure Name as an Actual Argument.