Muutke küpsiste eelistusi

E-raamat: Modern Fortran Explained: Incorporating Fortran 2018

(Formerly of CERN, Geneva, Switzerland), (Numerical Analyst, JKR Associates, Oxfordshire), (Principal technical consultant, The Numerical Algorithms Group Ltd, Oxford, U.K.)
  • Formaat - PDF+DRM
  • Hind: 50,41 €*
  • * hind on lõplik, st. muud allahindlused enam ei rakendu
  • Lisa ostukorvi
  • Lisa soovinimekirja
  • See e-raamat on mõeldud ainult isiklikuks kasutamiseks. E-raamatuid ei saa tagastada.

DRM piirangud

  • Kopeerimine (copy/paste):

    ei ole lubatud

  • Printimine:

    ei ole lubatud

  • Kasutamine:

    Digitaalõiguste kaitse (DRM)
    Kirjastus on väljastanud selle e-raamatu krüpteeritud kujul, mis tähendab, et selle lugemiseks peate installeerima spetsiaalse tarkvara. Samuti peate looma endale  Adobe ID Rohkem infot siin. E-raamatut saab lugeda 1 kasutaja ning alla laadida kuni 6'de seadmesse (kõik autoriseeritud sama Adobe ID-ga).

    Vajalik tarkvara
    Mobiilsetes seadmetes (telefon või tahvelarvuti) lugemiseks peate installeerima selle tasuta rakenduse: PocketBook Reader (iOS / Android)

    PC või Mac seadmes lugemiseks peate installima Adobe Digital Editionsi (Seeon tasuta rakendus spetsiaalselt e-raamatute lugemiseks. Seda ei tohi segamini ajada Adober Reader'iga, mis tõenäoliselt on juba teie arvutisse installeeritud )

    Seda e-raamatut ei saa lugeda Amazon Kindle's. 

Fortran marches on, remaining one of the principal programming languages used in high-performance scientific, numerical, and engineering computing. A series of significant revisions to the standard versions of the language have progressively enhanced its capabilities, and the latest standard - Fortran 2018 - includes many additions and improvements.

This edition of Modern Fortran Explained expands on the last. Given the release of updated versions of Fortran compilers, the separate descriptions of Fortran 2003 and Fortran 2008 have been incorporated into the main text, which thereby becomes a unified description of the full Fortran 2008 version of the language. This clearer standard has allowed many deficiencies and irregularities in the earlier language versions to be resolved.

Four new chapters describe the additional features of Fortran 2018, with its enhancements to coarrays for parallel programming, interoperability with C, IEEE arithmetic, and various other improvements.

Written by leading experts in the field, two of whom have actively contributed to Fortran 2018, this is a complete and authoritative description of Fortran in its latest form. It is intended for new and existing users of the language, and for all those involved in scientific and numerical computing. It is suitable as a textbook for teaching and, with its index, as a handy reference for practitioners.

Arvustused

An excellent, authoritative and complete reference book on the modern Fortran language, where all its possibilities are collected and any detail of the language can be clearly consulted. * European Mathematical Society * Well organized and equipped with good examples, the text can be used as both a tutorial and a reference. It describes each of the language elements and explains where FORTRAN 2018 differs from its predecessors. A thorough index is provided; all illustrations are clear and concise. The language used in descriptions and explanations throughout the book is clear and easy to follow. This book is an excellent resource for all practitioners. * F. H. Wild III, University of Rhode Island, CHOICE Connect *

1 Whence Fortran?
1(8)
1.1 Introduction
1(1)
1.2 Fortran's early history
2(1)
1.3 The drive for the Fortran 90 standard
2(1)
1.4 Language evolution
3(1)
1.5 Fortran 95
4(1)
1.6 Extensions to Fortran 95
5(1)
1.7 Fortran 2003
5(1)
1.8 Extensions to Fortran 2003
6(1)
1.9 Fortran 2008
6(1)
1.10 Extensions to Fortran 2008
7(1)
1.11 Fortran 2018
7(1)
1.12 Conformance
7(2)
2 Language elements
9(24)
2.1 Introduction
9(1)
2.2 Fortran character set
9(1)
2.3 Tokens
10(1)
2.4 Source form
11(2)
2.5 Concept of type
13(1)
2.6 Literal constants of intrinsic type
13(6)
2.6.1 Integer literal constants
14(1)
2.6.2 Real literal constants
15(1)
2.6.3 Complex literal constants
16(1)
2.6.4 Character literal constants
16(2)
2.6.5 Logical literal constants
18(1)
2.6.6 Binary, octal, and hexadecimal constants
19(1)
2.7 Names
19(1)
2.8 Scalar variables of intrinsic type
20(1)
2.9 Derived data types
20(2)
2.10 Arrays of intrinsic type
22(4)
2.10.1 Declaring entities of differing shapes
25(1)
2.10.2 Allocatable objects
25(1)
2.11 Character substrings
26(1)
2.12 Pointers
27(1)
2.13 Objects and subobjects
28(1)
2.14 Summary
29(4)
3 Expressions and assignments
33(22)
3.1 Introduction
33(1)
3.2 Scalar numeric expressions
34(3)
3.3 Denned and undefined variables
37(1)
3.4 Scalar numeric assignment
37(1)
3.5 Scalar relational operators
38(1)
3.6 Scalar logical expressions and assignments
39(1)
3.7 Scalar character expressions and assignments
40(2)
3.7.1 ASCII character set
41(1)
3.7.2 ISO 10646 character set
42(1)
3.8 Structure constructors
42(1)
3.9 Scalar defined operators
43(2)
3.10 Scalar denned assignments
45(2)
3.11 Array expressions
47(1)
3.12 Array assignment
48(1)
3.13 Pointers in expressions and assignments
49(2)
3.14 The nullify statement
51(1)
3.15 Summary
51(4)
4 Control constructs
55(14)
4.1 Introduction
55(1)
4.2 The if construct and statement
55(2)
4.3 The case construct
57(2)
4.4 The do construct
59(3)
4.5 Exit from nearly any construct
62(1)
4.6 The go to statement
63(1)
4.7 Summary
64(5)
5 Program units and procedures
69(36)
5.1 Introduction
69(1)
5.2 Main program
70(1)
5.3 The stop statement
71(1)
5.4 External subprograms
72(1)
5.5 Modules
73(2)
5.6 Internal subprograms
75(1)
5.7 Arguments of procedures
76(4)
5.7.1 Assumed-shape arrays
78(1)
5.7.2 Pointer arguments
78(1)
5.7.3 Restrictions on actual arguments
79(1)
5.7.4 Arguments with the target attribute
80(1)
5.8 The return statement
80(1)
5.9 Argument intent
81(1)
5.10 Functions
82(1)
5.10.1 Prohibited side-effects
83(1)
5.11 Explicit and implicit interfaces
83(3)
5.11.1 The import statement
85(1)
5.12 Procedures as arguments
86(2)
5.13 Key word and optional arguments
88(2)
5.14 Scope of labels
90(1)
5.15 Scope of names
90(2)
5.16 Direct recursion
92(2)
5.17 Indirect recursion
94(1)
5.18 Overloading and generic interfaces
94(5)
5.19 Assumed character length
99(1)
5.20 The subroutine and function statements
99(2)
5.21 Summary
101(4)
6 Allocation of data
105(14)
6.1 Introduction
105(1)
6.2 The allocatable attribute
105(1)
6.3 Deferred type parameters
106(1)
6.4 Allocatable scalars
106(1)
6.5 The allocate statement
107(1)
6.6 The deallocate statement
108(1)
6.7 Automatic reallocation
109(1)
6.8 Transferring an allocation
110(1)
6.9 Allocatable dummy arguments
111(1)
6.10 Allocatable functions
111(1)
6.11 Allocatable components
112(4)
6.11.1 Allocatable components of recursive type
115(1)
6.12 Allocatable arrays vs. pointers
116(1)
6.13 Summary
117(2)
7 Array features
119(30)
7.1 Introduction
119(1)
7.2 Zero-sized arrays
119(1)
7.3 Automatic objects
120(1)
7.4 Elemental operations and assignments
121(1)
7.5 Array-valued functions
122(1)
7.6 The where statement and construct
123(3)
7.7 Mask arrays
126(1)
7.8 Pure procedures
126(1)
7.9 Elemental procedures
127(1)
7.10 Impure elemental procedures
128(1)
7.11 Array elements
129(1)
7.12 Array subobjects
130(3)
7.13 Arrays of pointers
133(1)
7.14 Pointers as aliases
134(1)
7.15 Pointer assignment
135(1)
7.16 Array constructors
135(2)
7.17 The do concurrent construct
137(2)
7.18 Performance-oriented features
139(6)
7.18.1 The contiguous attribute
139(3)
7.18.2 Simply contiguous array designators
142(2)
7.18.3 Automatic pointer targetting
144(1)
7.19 Summary
145(4)
8 Specification statements
149(38)
8.1 Introduction
149(1)
8.2 Implicit typing
149(1)
8.3 Named constants
150(2)
8.4 Constant expressions
152(1)
8.5 Initial values for variables
153(6)
8.5.1 Initialization in type declaration statements
153(1)
8.5.2 The data statement
154(2)
8.5.3 Pointer initialization as disassociated
156(1)
8.5.4 Pointer initialization as associated
157(1)
8.5.5 Default initialization of components
158(1)
8.6 Accessibility
159(2)
8.6.1 The public and private attributes
159(2)
8.6.2 More control of access from a module
161(1)
8.7 Pointer functions denoting variables
161(2)
8.8 The pointer, target, and allocatable statements
163(1)
8.9 The intent and optional statements
163(1)
8.10 The save attribute
164(1)
8.11 Volatility
165(3)
8.11.1 The volatile attribute
165(2)
8.11.2 Volatile scoping
167(1)
8.11.3 Volatile arguments
167(1)
8.12 The asynchronous attribute
168(1)
8.13 The block construct
168(2)
8.14 The use statement
170(3)
8.15 Derived-type definitions
173(3)
8.16 The type declaration statement
176(1)
8.17 Type and type parameter specification
177(1)
8.18 Specification expressions
178(3)
8.19 Structure constructors
181(1)
8.20 The namelist statement
181(2)
8.21 Summary
183(4)
9 Intrinsic procedures and modules
187(38)
9.1 Introduction
187(1)
9.1.1 Keyword calls
187(1)
9.1.2 Categories of intrinsic procedures
188(1)
9.1.3 The intrinsic statement
188(1)
9.1.4 Argument intents
188(1)
9.2 Inquiry functions for any type
188(1)
9.3 Elemental numeric functions
189(2)
9.3.1 Elemental functions that may convert
189(2)
9.3.2 Elemental functions that do not convert
191(1)
9.4 Elemental mathematical functions
191(3)
9.5 Transformational functions for Bessel functions
194(1)
9.6 Elemental character and logical functions
194(2)
9.6.1 Character-integer conversions
194(1)
9.6.2 Lexical comparison functions
195(1)
9.6.3 String-handling elemental functions
195(1)
9.6.4 Logical conversion
196(1)
9.7 Non-elemental string-handling functions
196(1)
9.7.1 String-handling inquiry function
196(1)
9.7.2 String-handling transformational functions
196(1)
9.8 Character inquiry function
197(1)
9.9 Numeric inquiry and manipulation functions
197(3)
9.9.1 Models for integer and real data
197(1)
9.9.2 Numeric inquiry functions
198(1)
9.9.3 Elemental functions to manipulate reals
199(1)
9.9.4 Transformational functions for kind values
199(1)
9.10 Bit manipulation procedures
200(5)
9.10.1 Model for bit data
200(1)
9.10.2 Inquiry function
200(1)
9.10.3 Basic elemental functions
201(1)
9.10.4 Shift operations
202(1)
9.10.5 Elemental subroutine
202(1)
9.10.6 Bitwise (unsigned) comparison
203(1)
9.10.7 Double-width shifting
203(1)
9.10.8 Bitwise reductions
204(1)
9.10.9 Counting bits
204(1)
9.10.10 Producing bitmasks
204(1)
9.10.11 Merging bits
204(1)
9.11 Transfer function
205(1)
9.12 Vector and matrix multiplication functions
205(1)
9.13 Transformational functions that reduce arrays
206(2)
9.13.1 Single argument case
206(1)
9.13.2 Additional argument dim
207(1)
9.13.3 Optional argument mask
207(1)
9.14 Array inquiry functions
208(1)
9.14.1 Contiguity
208(1)
9.14.2 Bounds, shape, and size
208(1)
9.15 Array construction and manipulation functions
209(2)
9.15.1 The merge elemental function
209(1)
9.15.2 Packing and unpacking arrays
209(1)
9.15.3 Reshaping an array
210(1)
9.15.4 Transformational function for replication
210(1)
9.15.5 Array shifting functions
210(1)
9.15.6 Matrix transpose
211(1)
9.16 Transformational functions for geometric location
211(1)
9.17 Transformational function for disassociated or unallocated
212(1)
9.18 Non-elemental intrinsic subroutines
212(3)
9.18.1 Real-time clock
212(1)
9.18.2 CPU time
213(1)
9.18.3 Random numbers
214(1)
9.18.4 Executing another program
214(1)
9.19 Access to the computing environment
215(2)
9.19.1 Environment variables
215(1)
9.19.2 Information about the program invocation
216(1)
9.20 Elemental functions for I/O status testing
217(1)
9.21 Size of an object in memory
217(1)
9.22 Miscellaneous procedures
218(1)
9.23 Intrinsic modules
218(1)
9.24 Fortran environment
219(3)
9.24.1 Named constants
219(1)
9.24.2 Compilation information
220(1)
9.24.3 Names for common kinds
220(1)
9.24.4 Kind arrays
221(1)
9.24.5 Lock type
222(1)
9.25 Summary
222(3)
10 Data transfer
225(24)
10.1 Introduction
225(1)
10.2 Number conversion
225(1)
10.3 I/O lists
226(2)
10.4 Format definition
228(2)
10.5 Unit numbers
230(1)
10.6 Internal files
231(2)
10.7 Formatted input
233(1)
10.8 Formatted output
234(2)
10.9 List-directed I/O
236(2)
10.10 Namelist I/O
238(1)
10.11 Non-advancing I/O
239(1)
10.12 Unformatted I/O
240(1)
10.13 Direct-access files
241(1)
10.14 UTF-8 files
242(1)
10.15 Asynchronous input/output
243(3)
10.15.1 Asynchronous execution
243(2)
10.15.2 The asynchronous attribute
245(1)
10.16 Stream access files
246(1)
10.17 Execution of a data transfer statement
247(1)
10.18 Summary
248(1)
11 Edit descriptors
249(18)
11.1 Introduction
249(1)
11.2 Character string edit descriptor
249(1)
11.3 Data edit descriptors
249(6)
11.3.1 Repeat counts
250(1)
11.3.2 Integer formatting
251(1)
11.3.3 Real formatting
251(2)
11.3.4 Complex formatting
253(1)
11.3.5 Logical formatting
253(1)
11.3.6 Character formatting
253(1)
11.3.7 General formatting
254(1)
11.3.8 Derived type formatting
255(1)
11.4 Control edit descriptors
255(3)
11.4.1 Scale factor
255(1)
11.4.2 Tabulation and spacing
256(1)
11.4.3 New records (slash editing)
257(1)
11.4.4 Colon editing
257(1)
11.5 Changeable file connection modes
258(2)
11.5.1 Embedded blank interpretation
258(1)
11.5.2 Input/output rounding mode
259(1)
11.5.3 Signs on positive values
259(1)
11.5.4 Decimal comma for input/output
260(1)
11.6 Defined derived-type input/output
260(4)
11.7 Recursive input/output
264(1)
11.8 Summary
265(2)
12 Operations on external files
267(12)
12.1 Introduction
267(1)
12.2 Positioning statements for sequential files
268(1)
12.2.1 The backspace statement
268(1)
12.2.2 The rewind statement
268(1)
12.2.3 The endfile statement
269(1)
12.2.4 Data transfer statements
269(1)
12.3 The flush statement
269(1)
12.4 The open statement
270(3)
12.5 The close statement
273(1)
12.6 The inquire statement
274(4)
12.7 Summary
278(1)
13 Advanced type parameter features
279(6)
13.1 Type parameter inquiry
279(1)
13.2 Parameterized derived types
279(6)
13.2.1 Defining a parameterized derived type
280(1)
13.2.2 Assumed and deferred type parameters
281(1)
13.2.3 Default type parameter values
281(1)
13.2.4 Derived type parameter inquiry
282(1)
13.2.5 Structure constructor
282(3)
14 Procedure pointers
285(6)
14.1 Abstract interfaces
285(2)
14.2 Procedure pointers
287(4)
14.2.1 Named procedure pointers
287(1)
14.2.2 Procedure pointer components
287(1)
14.2.3 The pass attribute
288(1)
14.2.4 Internal procedures as targets of a procedure pointer
289(2)
15 Object-oriented programming
291(30)
15.1 Introduction
291(1)
15.2 Type extension
291(2)
15.2.1 Type extension and type parameters
293(1)
15.3 Polymorphic entities
293(4)
15.3.1 Introduction to polymorphic entities
293(1)
15.3.2 Establishing the dynamic type
294(1)
15.3.3 Limitations on the use of a polymorphic variable
295(1)
15.3.4 Polymorphic arrays and scalars
295(1)
15.3.5 Unlimited polymorphic entities
295(1)
15.3.6 Polymorphic entities and generic resolution
296(1)
15.4 Typed and sourced allocation
297(3)
15.4.1 Introduction
297(1)
15.4.2 Typed allocation and deferred type parameters
297(1)
15.4.3 Polymorphic variables and typed allocation
298(1)
15.4.4 Sourced allocation
298(2)
15.5 Assignment for allocatable polymorphic variables
300(1)
15.6 The associate construct
300(2)
15.7 The select type construct
302(1)
15.8 Type-bound procedures
303(7)
15.8.1 Specific type-bound procedures
305(1)
15.8.2 Generic type-bound procedures
306(2)
15.8.3 Type extension and type-bound procedures
308(2)
15.9 Design for overriding
310(2)
15.10 Deferred bindings and abstract types
312(1)
15.11 Finalization
313(2)
15.11.1 Type extension and final subroutines
315(1)
15.12 Procedure encapsulation example
315(4)
15.13 Type inquiry functions
319(2)
16 Submodules
321(4)
16.1 Introduction
321(1)
16.2 Separate module procedures
321(2)
16.3 Submodules of submodules
323(1)
16.4 Submodule entities
323(1)
16.5 Submodules and use association
323(1)
16.6 The advantages of submodules
324(1)
17 Coarrays
325(22)
17.1 Introduction
325(1)
17.2 Referencing images
326(1)
17.3 The properties of coarrays
327(1)
17.4 Accessing coarrays
328(1)
17.5 The sync all statement
329(1)
17.6 Allocatable coarrays
330(1)
17.7 Coarrays with allocatable or pointer components
331(2)
17.7.1 Data components
332(1)
17.7.2 Procedure pointer components
333(1)
17.8 Coarray components
333(1)
17.9 Coarrays in procedures
333(2)
17.10 References to polymorphic subobjects
335(1)
17.11 Volatile and asynchronous attributes
336(1)
17.12 Interoperability
336(1)
17.13 Synchronization
336(6)
17.13.1 Execution segments
336(1)
17.13.2 The sync images statement
337(1)
17.13.3 The lock and unlock statements
338(2)
17.13.4 Critical sections
340(1)
17.13.5 Atomic subroutines and the sync memory statement
341(1)
17.13.6 The stat= and errmsg= specifiers in synchronization statements
341(1)
17.13.7 The image control statements
342(1)
17.14 Program termination
342(2)
17.15 Input/output
344(1)
17.16 Intrinsic procedures
344(1)
17.16.1 Inquiry functions
344(1)
17.16.2 Transformational functions
345(1)
17.17 Arrays of different sizes on different images
345(2)
18 Floating-point exception handling
347(20)
18.1 Introduction
347(1)
18.2 The IEEE standard
347(2)
18.3 Access to the features
349(2)
18.4 The Fortran flags
351(1)
18.5 Halting
352(1)
18.6 The rounding mode
352(1)
18.7 The underflow mode
353(1)
18.8 The module ieee_exceptions
353(3)
18.8.1 Derived types
353(1)
18.8.2 Inquiring about IEEE exceptions
354(1)
18.8.3 Subroutines for the flags and halting modes
354(1)
18.8.4 Subroutines for the whole of the floating-point status
355(1)
18.9 The module ieee_arithmetic
356(5)
18.9.1 Derived types
356(1)
18.9.2 Inquiring about IEEE arithmetic
356(2)
18.9.3 Elemental functions
358(2)
18.9.4 Non-elemental subroutines
360(1)
18.9.5 Transformational function for kind value
361(1)
18.10 Examples
361(6)
18.10.1 Dot product
361(1)
18.10.2 Calling alternative procedures
362(1)
18.10.3 Calling alternative in-line code
363(1)
18.10.4 Reliable hypotenuse function
363(2)
18.10.5 Access to IEEE arithmetic values
365(2)
19 Interoperability with C
367(16)
19.1 Introduction
367(1)
19.2 Interoperability of intrinsic types
367(1)
19.3 Interoperability with C pointer types
368(2)
19.4 Interoperability of derived types
370(1)
19.5 Shape and character length disagreement
371(2)
19.6 Interoperability of variables
373(1)
19.7 Function c_sizeof
373(1)
19.8 The value attribute
374(1)
19.9 Interoperability of procedures
375(2)
19.10 Interoperability of global data
377(1)
19.11 Invoking a C function from Fortran
377(1)
19.12 Invoking Fortran from C
378(3)
19.13 Enumerations
381(2)
20 Fortran 2018 coarray enhancements
383(14)
20.1 Teams
383(1)
20.2 Image failure
384(1)
20.3 Form team statement
385(1)
20.4 Change team construct
385(1)
20.5 Coarrays allocated in teams
386(1)
20.6 Critical construct and image failure
386(1)
20.7 Lock and unlock statements and image failure
386(1)
20.8 Sync team statement
387(1)
20.9 Image selectors
387(1)
20.10 Procedure calls and teams
388(1)
20.11 Intrinsic functions get_team and team_number
388(1)
20.12 Intrinsic function image_index
388(1)
20.13 Intrinsic function num_images
389(1)
20.14 Intrinsic function this_image
390(1)
20.15 Intrinsic function coshape
390(1)
20.16 Intrinsic function move_alloc
390(1)
20.17 Fail image statement
391(1)
20.18 Detecting failed and stopped images
391(1)
20.19 Collective subroutines
392(1)
20.20 New atomic subroutines
393(2)
20.21 Failed images and stat= specifiers
395(1)
20.22 Events
395(2)
21 Fortran 2018 enhancements to interoperability with C
397(26)
21.1 Introduction
397(1)
21.2 Optional arguments
397(2)
21.3 Low-level C interoperability
399(1)
21.4 Assumed character length
400(1)
21.5 C descriptors
401(3)
21.5.1 Introduction
401(1)
21.5.2 Standard members
401(1)
21.5.3 Argument classification (attribute codes)
402(1)
21.5.4 Argument data type
402(1)
21.5.5 Array layout information
403(1)
21.6 Accessing Fortran objects
404(10)
21.6.1 Traversing contiguous Fortran arrays
404(1)
21.6.2 Generic programming with assumed type
405(1)
21.6.3 Traversing discontiguous Fortran arrays
405(2)
21.6.4 Fortran pointer operations
407(2)
21.6.5 Allocatable objects
409(1)
21.6.6 Handling arrays of any rank
410(1)
21.6.7 Accessing individual array elements via a C descriptor
411(3)
21.6.8 Handling errors from CFI functions
414(1)
21.7 Calling Fortran with C descriptors
414(6)
21.7.1 Allocating storage for a C descriptor
414(1)
21.7.2 Establishing a C descriptor
415(1)
21.7.3 Constructing an array section
416(3)
21.7.4 Accessing components
419(1)
21.8 Restrictions
420(1)
21.8.1 Other limitations on C descriptors
420(1)
21.8.2 Lifetimes of C descriptors
420(1)
21.9 Miscellaneous C interoperability changes
420(3)
21.9.1 Interoperability with the C type ptrdiff_t
420(1)
21.9.2 Relaxation of interoperability requirements
420(3)
22 Fortran 2018 conformance with ISO/IEC/IEEE 60559:2011
423(6)
22.1 Introduction
423(1)
22.2 Subnormal values
423(1)
22.3 Type for floating-point modes
423(1)
22.4 Rounding modes
424(1)
22.5 Rounded conversions
424(1)
22.6 Fused multiply-add
425(1)
22.7 Test sign
425(1)
22.8 Conversion to integer type
425(1)
22.9 Remainder function
425(1)
22.10 Maximum and minimum values
425(1)
22.11 Adjacent machine numbers
426(1)
22.12 Comparisons
426(1)
22.13 Hexadecimal significand input/output
427(2)
23 Minor Fortran 2018 features
429(16)
23.1 Default accessibility for entities accessed from a module
429(1)
23.2 Requiring explicit procedure declarations
429(1)
23.3 Using the properties of an object in its initialization
430(1)
23.4 Generic procedures
430(1)
23.4.1 More concise generic specification
430(1)
23.4.2 Rules for disambiguation
431(1)
23.5 Enhancements to stop and error stop
431(1)
23.6 New intrinsic procedures
431(2)
23.6.1 Checking for unsafe conversions
431(1)
23.6.2 Generalized array reduction
432(1)
23.6.3 Controlling the random number generator
432(1)
23.7 Existing intrinsic procedures
433(2)
23.7.1 Intrinsic function sign
433(1)
23.7.2 Intrinsic functions extends_type_of and same_type_as
433(1)
23.7.3 Simplification of calls of the intrinsic function cmplx
433(1)
23.7.4 Remove many argument dim restrictions
434(1)
23.7.5 Kinds of arguments of intrinsic and IEEE procedures
434(1)
23.7.6 Intrinsic subroutines that access the computing environment
435(1)
23.8 Use of non-standard features
435(1)
23.9 Kind of the do variable in implied-do loops
435(1)
23.10 Improving do concurrent performance
436(1)
23.11 Control of host association
437(1)
23.12 Intent in requirements and the value attribute
438(1)
23.13 Pure procedures
438(1)
23.14 Recursive and non-recursive procedures
438(1)
23.15 Input/output
439(1)
23.15.1 More minimal field width editing
439(1)
23.15.2 Recovering from input format errors
439(1)
23.15.3 Advancing input with size=
439(1)
23.15.4 Precision of stat= variables
439(1)
23.15.5 Connect a file to more than one unit
439(1)
23.15.6 Enhancements to inquire
440(1)
23.15.7 Asynchronous communication
440(1)
23.16 Assumed rank
440(5)
23.16.1 Assumed-rank objects
440(2)
23.16.2 The select rank construct
442(3)
A Deprecated features
445(12)
1 Introduction
445(1)
2 Storage association
445(1)
3 Alternative form of relational operator
446(1)
4 The include line
447(1)
5 The do while statement
447(1)
6 Double precision real
448(1)
7 The dimension, codimension, and parameter statements
448(1)
8 Non-default mapping for implicit typing
449(1)
9 Fortran 2008 deprecated features
450(7)
9.1 The sync memory statement, and atomic_define and atomic_ref
450(3)
9.2 Components of type c_ptr or c_funptr
453(1)
9.3 Type declarations
453(1)
9.4 Denoting absent arguments
454(1)
9.5 Alternative form of complex constant
455(2)
B Obsolescent and deleted features
457(20)
1 Features obsolescent in Fortran 95
457(5)
1.1 Fixed source form
457(1)
1.2 Computed go to
458(1)
1.3 Character length specification with character*
458(1)
1.4 Data statements among executables
458(1)
1.5 Statement functions
459(1)
1.6 Assumed character length of function results
460(1)
1.7 Alternate return
460(2)
2 Feature obsolescent in Fortran 2008: Entry statement
462(1)
3 Features obsolescent in Fortran 2018
463(11)
3.1 The forall statement and construct
463(3)
3.2 The equivalence statement
466(2)
3.3 The common block
468(2)
3.4 The block data program unit
470(1)
3.5 The labelled do construct
471(1)
3.6 Specific names of intrinsic procedures
472(2)
4 Features deleted in Fortran 95
474(1)
5 Feature deleted in Fortran 2003: Carriage control
475(1)
6 Features deleted in Fortran 2018
475(2)
C Object-oriented list example
477(8)
D Solutions to exercises
485(22)
Index 507
Michael Metcalf worked for many years at CERN. He is the author or co-author of a range of publications, including forerunners to the present volume, as well as Effective FORTRAN 77 (OUP NY, 1985) and a number of contributions to technical encyclopaedias

John Reid is well-known as a numerical analyst and is a co-author of Direct Methods for Sparse Matrices (OUP, 2017). He is the Convenor of the ISO Fortran Committee and has played a leading role in the development of many of the features of modern Fortran, especially of coarrays.

Malcolm Cohen is a mathematician and the leading compiler writer at NAG. He has participated actively in the development of the Fortran standards, being a major designer of the objected-oriented features. He is the Editor of the Fortran 2008 standard.