Source: Fortran 90 3 Day Course (Univ. of Liverpool) URL: Ngo Van Thanh, NIMS Oct. 4, 2010

Similar documents
Intrinsic Numeric Operations

Data Types and Basic Calculation

. Executable Statements

Goals for This Lecture:

MYSQL NUMERIC FUNCTIONS

Ordinary Differential Equation Solver Language (ODESL) Reference Manual

TECH TIP VISION Calibration and Data Acquisition Software

CT 229 Java Syntax Continued

Operators Functions Order of Operations Mixed Mode Arithmetic VOID Data. Syntax and type conventions Using the Script window interface

CSI31 Lecture 5. Topics: 3.1 Numeric Data Types 3.2 Using the Math Library 3.3 Accumulating Results: Factorial

2 3. Syllabus Time Event 9:00{10:00 morning lecture 10:00{10:30 morning break 10:30{12:30 morning practical session 12:30{1:30 lunch break 1:30{2:00 a

Chapter 2. Outline. Simple C++ Programs

Introduction to Computer Programming in Python Dr. William C. Bulko. Data Types

Product Price Formula extension for Magento2. User Guide

Introduction to Python, Cplex and Gurobi

ANSI C Programming Simple Programs

C++ Overview. Chapter 1. Chapter 2

Consider this m file that creates a file that you can load data into called rain.txt

6-1 (Function). (Function) !*+!"#!, Function Description Example. natural logarithm of x (base e) rounds x to smallest integer not less than x

2 Making Decisions. Store the value 3 in memory location y

FORTRAN - CHARACTERS

2. Basic Elements of Fortran

Maths Functions User Manual

Introduction to MATLAB

Introduction to Engineering gii

Program Structure and Format

Programming in MATLAB

Intrinsic Functions Outline

Introduction to Fortran

Lesson #3. Variables, Operators, and Expressions. 3. Variables, Operators and Expressions - Copyright Denis Hamelin - Ryerson University

C++ Programming Lecture 11 Functions Part I

ME 142 Engineering Computation I. Unit 1.2 Excel Functions

Macro Programming Reference Guide. Copyright 2005 Scott Martinez

Python Programming: An Introduction to Computer Science

Fortran 90 Basics. Fall I don t know what the programming language of the year 2000 will look like, but I know it will be called FORTRAN.

Chapter 4: Basic C Operators

Engineering Problem Solving with C++, Etter/Ingber

The Number object. to set specific number types (like integer, short, In JavaScript all numbers are 64bit floating point

Chapter 3 - Functions

How to Design Programs Languages

EP375 Computational Physics

Quick MATLAB Syntax Guide

C Programs: Simple Statements and Expressions

Sketchify Tutorial Properties and Variables. sketchify.sf.net Željko Obrenović

Programming in QBasic

Methods CSC 121 Fall 2014 Howard Rosenthal

Operators and Expression. Dr Muhamad Zaini Yunos JKBR, FKMP

Custom Variables (Virtual Variables)

Watcom FORTRAN 77. Language Reference. Edition 11.0c

Functions. Systems Programming Concepts

Methods CSC 121 Fall 2016 Howard Rosenthal

Week 2: Console I/O and Operators Arithmetic Operators. Integer Division. Arithmetic Operators. Gaddis: Chapter 3 (2.14,3.1-6,3.9-10,5.

A function is a named group of statements developed to solve a sub-problem and returns a value to other functions when it is called.

Arithmetic. 2.2.l Basic Arithmetic Operations. 2.2 Arithmetic 37

1 Lexical Considerations

Chapter 2. MATLAB Basis

Introduction to MATLAB

What is a Function? EF102 - Spring, A&S Lecture 4 Matlab Functions

9 Using Equation Networks

BIL 104E Introduction to Scientific and Engineering Computing. Lecture 4

Summary of basic C++-commands

MATLAB Tutorial EE351M DSP. Created: Thursday Jan 25, 2007 Rayyan Jaber. Modified by: Kitaek Bae. Outline

Introduction to MATLAB 7 for Engineers

Introduction to Fortran 90

Methods CSC 121 Spring 2017 Howard Rosenthal

The Expressions plugin PRINTED MANUAL

Fall Semester (081) Dr. El-Sayed El-Alfy Computer Science Department King Fahd University of Petroleum and Minerals

The SPL Programming Language Reference Manual

Lexical Considerations

Python Lists: Example 1: >>> items=["apple", "orange",100,25.5] >>> items[0] 'apple' >>> 3*items[:2]

3.1. Chapter 3: The cin Object. Expressions and Interactivity

Part V Appendices c Copyright, Todd Young and Martin Mohlenkamp, Department of Mathematics, Ohio University, 2017

C Functions. 5.2 Program Modules in C

Methods: A Deeper Look

CS1100 Introduction to Programming

Dr M Kasim A Jalil. Faculty of Mechanical Engineering UTM (source: Deitel Associates & Pearson)

Lecture 2 FORTRAN Basics. Lubna Ahmed

APPENDIX P. Derived Parameter Specification

Extending Ninox with NX

LinReg 2.06 Manual. DePauw University: Physics Department 120 Physics I and 130 Physics II

Scheme Quick Reference

This is a basic tutorial for the MATLAB program which is a high-performance language for technical computing for platforms:

Telemetry Standards, IRIG Standard (Part 1), Appendix P, June 2011 APPENDIX P DERIVED PARAMETER SPECIFICATION. Paragraph Title Page

USER-DEFINED ELEMENT IN ZMAN TM

Introduction to Programming

Fortran 2003 Part 1. École normale supérieure L3 geosciences 2018/2019. Lionel GUEZ Laboratoire de météorologie dynamique Office E324

Subprograms. FORTRAN 77 Chapter 5. Subprograms. Subprograms. Subprograms. Function Subprograms 1/5/2014. Satish Chandra.

Fundamentals of Programming & Procedural Programming

MATELECT PDsoft v1.00

XQ: An XML Query Language Language Reference Manual

9. Elementary Algebraic and Transcendental Scalar Functions

FORTRAN Basis. PROGRAM LAYOUT PROGRAM program name IMPLICIT NONE [declaration statements] [executable statements] END PROGRAM [program name]


Chapter 3. Computer Science & Engineering 155E Computer Science I: Systems Engineering Focus. Existing Information.

Process Optimization

Beginning C Programming for Engineers

Information technology Programming languages Fortran. Part 2: Varying length character strings. [This page to be replaced by ISO CS.

FANF. programming language. written by Konstantin Dimitrov. Revision 0.1 February Programming language FANF 1 / 21

Expressions. Eric Roberts Handout #3 CSCI 121 January 30, 2019 Expressions. Grace Murray Hopper. Arithmetic Expressions.

Flow Control. CSC215 Lecture

Transcription:

Source: Fortran 90 3 Day Course (Univ. of Liverpool) URL: http://www.liv.ac.uk/hpc/f90page.html Ngo Van Thanh, NIMS Oct. 4, 2010

II.1. Control Flow Overview: Fortran 90 supports the constructs: Conditional execution statements and constructs. IF statements, and IF THEN ELSEIF ELSE END IF They are useful if a section of code needs to be executed depending on a series of logical conditions being satisfied. A different control expression must be evaluated at each branch. Loops : the basic form of iteration mechanism DO END DO This structure allows the body of the loop to be executed a number of times. The number of iterations can be a constant, a variable (expression) or can be dependent on a particular condition being satisfied. DO loops can be nested. Multi-way choice construct SELECT CASE A particular branch is selected depending upon the value of the case expression. A single control expression is evaluated once and then its result is compared with each branch. unconditional jump statements GOTO Direct jump to a labeled line.

IF Statement: The basic form: IF (<logical-expression>) <exec-stmt> If the <logical-expression> evaluates to.true. then execute <exec-stmt>, otherwise do not. A different control expression must be evaluated at each branch. Ex: IF (x > y) value = y IF(I/=0.AND. J.NE.0) r = a/(i*j) Schematic Diagram of an IF statement IF (I > 12) PRINT*, I > 12!next statement

IF Constructs: The simplest form of the IF construct: IF (<logical-expression>) THEN <exec-statements> ENDIF Ex: IF (I > 12) THEN PRINT*, I > 12 END IF Schematic Diagram of an IF THEN construct IF (I > 12) THEN PRINT*, I > 12 ENDIF

IF construct contains an ELSE branch: IF (<logical-expression>) THEN <exec-statements> ELSE ENDIF <exec-statements> Ex: IF (I > 12) THEN PRINT*, I > 12 ELSE END IF PRINT*, I <= 12 IF (I > 12) THEN PRINT*, I > 12 PRINT*, I <= 12 Schematic Diagram of an IF THEN construct ENDIF

IF construct contains an ELSEIF branch: IF (<logical-expression>) THEN <exec-statements> ELSEIF (<logical-expression>) THEN <exec-statements> ELSE ENDIF <exec-statements> Ex: IF (I > 12) THEN PRINT*, I > 12 ELSEIF(I==12) THEN ELSE END IF PRINT*, I = 12 PRINT*, I < 12 PRINT*, I > 12 IF (I > 12) THEN ENDIF I = 12 PRINT*, I = 12 ELSEIF(I==12) THEN PRINT*, I < 12 Schematic Diagram of an IF THEN ELSEIF construct

The formal syntax: [<name>]: IF(<logical-expression>) THEN <then-block> ELSEIF(<logical-expression>) THEN [<name>] <elseif-block> ELSE [<name>] <else-block> END IF [<name>] Ex: IF (x.gt. 3) THEN! x > 3 CALL SUB1 ELSEIF (x.eq. 3) THEN! x = 3 CALL SUB2 ELSEIF (x.eq. 2) THEN! x = 2 CALL SUB3 ELSE! x < 3 and x 2 CALL SUB4 ENDIF

Nested and Named IF Constructs: All control constructs can be both named and nested: outa: IF (a.ne. 0) THEN! a 0 PRINT*, "a /= 0" IF (c.ne. 0) THEN! c 0 PRINT*, "a /= 0 AND c /= 0 ELSE! c == 0 PRINT*, "a /= 0 BUT c == 0" ENDIF ELSEIF (a.gt. 0) THEN outa! a > 0 PRINT*, "a > 0" ELSE outa! a < 0 PRINT*, "a must be < 0" ENDIF outa The names may only used once per program unit and are intended to make the code clearer. Even though construct names are only valid within the block that they apply to, their scope is the whole program unit.

Conditional Exit Loops: A loop comprises a block of statements that are executed cyclically. When the end of the loop is reached, the block is repeated from the start of the loop. The block of statements making up the loop is delimited by DO and END DO statements. This block is executed as many times as is required. Each time through the loop, the condition is evaluated and the first time it is true the EXIT is performed and processing continues from the statement following the next END DO. Ex: i = 0 DO i = i + 1 IF (i > 100) EXIT PRINT*, I is, i! i 100 END DO! if I > 100 control jumps here PRINT*, Loop finished. I now equals, i! i = 101

Named and Nested Loops: Sometimes it is necessary to jump out of more than the innermost DO loop, To allow this, loops can be given names and then the EXIT statement can be made to refer to a particular loop. An analogous situation also exists for CYCLE. Ex: 0 outa: DO 1 inna: DO 2 3 IF (a > b) EXIT outa! jump to line 9 4 IF (a == b) CYCLE outa! jump to line 0 5 IF (c > d) EXIT inna! jump to line 8 6 IF (c == a) CYCLE! jump to line 1 7 END DO inna 8 END DO outa 9 The (optional) name following the EXIT or CYCLE highlights which loop the statement refers to Loop names can only be used once per program unit.

Indexed DO Loops: Loops can be written which cycle a fixed number of times: Ex: DO I=1,100 PRINT*, I! i is 1, 2, 100; 100 iterations ENDDO Syntax: DO <DO-var>=<expr1>,<expr2>,[,<expr3>] <exec-stmts> ENDDO The number of iterations: If N is zero or negative then the loop is not executed. If <expr3> is absent it is assumed to be equal to 1.

Examples of Loop counts: Upper bound is not exact DO i = 1, 30, 2! i is 1, 3, 5 29! There are 15 iterations ENDDO Negative stride DO j = 30, 1, -2! i is 30, 28, 26 2! There are 15 iterations ENDDO Scope of DO variables Variable i is recalculated at the top of the loop and then compared with <expr2> IF the loop has finished, execution jumps to the statement after the corresponding ENDDO. Variable i retains the value that it had just been assigned. DO i = 4, 45, 17 A zero-trip loop DO k = 30, 1, 2! 0 iterations ENDDO Missing stride DO i = 1, 30! i is 1, 2, 3 30! 30 iterations ENDDO PRINT*, I in loop =, I! i is 4, 21, 38 ENDDO PRINT*, I after loop =, I! i is 55

DO WHILE Loops: If a condition is to be tested at the top of a loop a DO WHILE loop could be used: Ex: DO WHILE (a == b) ENDDO The above loop is functionally equivalent to DO; IF (a /= b) EXIT ENDDO EXIT and CYCLE can still be used in a DO WHILE loop, just as there could be multiple EXIT and CYCLE statements in a regular loop. i = 0 DO WHILE (i <= 30) i = i+1! 30 iterations ENDDO

SELECT CASE Construct I: The SELECT CASE Construct is similar to an IF construct. It is a useful control construct if one of several paths through an algorithm must be chosen based on the value of a particular expression: Ex: SELECT CASE (i) CASE (3,5,7) PRINT*, i is prime CASE (10:) PRINT*, i is > 10 CASE DEFAULT PRINT*, i is not prime and is < 10 END SELECT The first branch is executed if i is equal to 3, 5, 7 the second if i is greater than or equal to 10 the third branch if neither of the previous has already been executed

More complex example: SELECT CASE (num) CASE (6,9,99,66) PRINT*, Woof woof CASE (10:65,67:98) PRINT*, Bow Bow CASE (100:) PRINT*, Bark CASE DEFAULT PRINT*, Meow END SELECT! IF (num==6.or. num==66) THEN! IF ((num >= 10.AND. num<=66).or.) THEN! IF (num >= 100) THEN! ELSE! ENDIF Important points: the <case-expr> in this case is num If a case branch has been executed then when the next <case-selector> is encountered control jumps to the END SELECT statement. If a particular case expression is not satisfied then the next one is tested. SELECT CASE is more efficient than ELSEIF because there is only one expression that controls the branching. An IF ELSEIF has the potential to have a different expression to evaluate at each branch point making it less efficient.

Visualization of a SELECT CASE Construct: Consider the SELECT CASE construct SELECT CASE (I) CASE(1); PRINT*, I == 1 CASE(2:9); PRINT*, I >= 2 and I <= 9 CASE(10:); PRINT*, I >= 10 CASE DEFAULT; PRINT*, I <= 0 END SELECT CASE SELECT CASE(I) CASE(1) CASE(2:9) CASE(10:) CASE DEFAULT PRINT*, I == 1 PRINT*, I >= 2 and I <= 9 PRINT*, I >= 10 PRINT*, I <= 0 END SELECT CASE

SELECT CASE Construct II: Syntax: [<name>:] SELECT CASE (<case-expr>) [CASE (<case-selector>) [<name>] <exec-stmts>] [CASE DEFAULT <exec-stmts>] END SELECT [<name>] Note: the <case-expr> must be scalar and INTEGER, LOGICAL or CHARACTER valued there may be any number of general CASE statements but only one CASE DEFAULT branch the <case-selector> must be a parenthesized single value or a range (section with a stride of one), for example.true. or (99:101). A range specifier is a lower and upper limit separated by a single colon. One or other of the bounds is optional giving an open ended range specifier. The <case-expr> is evaluated and compared with the <case-selector> in turn to see which branch to take. if no branches are chosen then the CASE DEFAULT is executed (if present) when the <exec-stmts> in the selected branch have been executed, control jumps out of the CASE construct (via the END SELECT statement). as with other similar structures it is not possible to jump into a CASE construct.

More complex example: outa: SELECT CASE (n) CASE (:-1) outa! n <= -1 M =- 1 CASE (1:) outa! n >= 1 DO i =1,n inna: SELECT CASE (line(i:i))! Substring line CASE ( @, &, *, $ )! Special character PRINT*, At EOL CASE ( a : z, A : Z ) PRINT*, Alphabetic CASE DEFAULT PRINT*, CHAR OK END SELECT inna END DO CASE DEFAULT outa! n == 0 PRINT*, n is zero END SELECT outa This inner case structure is executed n times and then control passes back to the outer case structure.

II.2. Mixing Objects of Different Types Mixed Numeric Type Expressions: When an (sub)-expression is evaluated, the actual calculation in the CPU must be between operands of the same type, this means if the expression is of mixed type, the compiler must automatically convert one type to another. Default types have an implied ordering: 1. INTEGER! lowest 2. REAL 3. DOUBLE PRECISION 4. COMPLEX! highest thus if an INTEGER is mixed with a REAL the INTEGER is promoted to a REAL and then the calculation performed the resultant expression is of type REAL For example INTEGER*REAL! gives a REAL, (3*2.0 is 6.0) REAL*INTEGER! gives a REAL, (3.0*2.0 is 6.0) DOUBLE PRECISION*REAL COMPLEX* <anytype> DOUBLE PRECISION*REAL*INTEGER! gives DOUBLE PRECISION! gives COMPLEX! gives DOUBLE PRECISION

Mixed Type Assignment: When the RHS expression of a mixed type assignment statement has been evaluated it has a specific type, this type must then be converted to t in with the LHS This conversion could be either a promotion or a relegation. For example INTEGER = REAL (or DOUBLE PRECISION) The RHS needs relegating to be an INTEGER value, The right hand side is evaluated and then the value is truncated (all the decimal places lopped off) then assigned to the LHS. REAL (or DOUBLE PRECISION) = INTEGER The INTEGER needs promoting to become a REAL The right hand side expression is simply stored approximately in the LHS. REAL :: a = 1.1, b = 0.1 INTEGER :: i, j, k i = 3.9! i will be 3 j = -0.9! j will be 0 k = a - b! k will be 1 or 0 (a b) would be close to 1.0 (i.e. 1.00000001 or 0.99999999)

Integer Division: If one integer divides another in a sub-expression then the type of that sub-expression is INTEGER. Division of two integers produces an integer result by truncation (towards zero) REAL :: a, b, c, d, e a = 1999/1000! a will be 1.0 b = -1999/1000! b will be -1.0 c = (1999+1)/1000! c will be 2.0 d = 1999.0/1000! d will be 1.999 e = 1999/1000.0! e will be 1.999 a is about 1.000. The integer expression 1999/1000 is evaluated and then truncated towards zero to produce an integral value, 1. b is about -1.000 c is about 2.000 because, due to the parentheses 2000/1000 is calculated. d and e are about 1.9999 because both RHS s are evaluated to be real numbers, in 1999.0/1000 and 1999/1000.0 the integers are promoted to real numbers before the division.

II.3. Intrinsic Procedures intrinsic procedures is common tasks build-in to the language. F90 has 113 intrinsic procedures in the different classes. Elemental such as: Mathematical, such as, trigonometric and logarithms, for example: SIN, ACOS or LOG Numeric, for example: SUM or MAXVAL Character, for example: INDEX and TRIM Bit manipulation, for example: IAND and IOR. (There is no BIT data type but intrinsics exist for manipulating integers as if they were bit variables.) Inquiry, for example: ALLOCATED and SIZE the status of dynamic objects; array bounds, shape and size, kind parameters of an object and available kind representations Transformational, for example: REAL and TRANSPOSE repeat for characters mathematical reduction procedures, i.e., given an array return an object of less rank. array manipulation - shift operations: RESHAPE, PACK PRODUCT and DOT PRODUCT (arrays). Miscellaneous, for example: SYSTEM_CLOCK and DATE_AND_TIME. All intrinsics which take REAL valued arguments also accept DOUBLE PRECISION arguments.

Type Conversion Functions In Fortran 90, it is easy to explicitly transform the type of a constant or variable by using the in-built intrinsic functions. REAL(I) : converts the integer i to the corresponding real approximation. INT(x) : converts real x to the integer Other functions may form integers from non-integer values CEILING(x) : smallest integer greater or equal to x FLOOR(x) NINT(x) : largest integer less or equal to x : nearest integer to x DBLE(a) : converts a to DOUBLE PRECISION, the argument to DBLE can be INTEGER, REAL or COMPLEX CMPLX(x) or CMPLX(x,y) : converts x to a complex value x + iy IACHAR(c) : returns the position of the CHARACTER variable c in the ASCII collating sequence, the argument must be a single CHARACTER. ACHAR(i) : returns the i th character in the ASCII collating sequence, Ex.: the argument ACHAR must be a single INTEGER. PRINT*, REAL(1), INT(1.7), INT(0.9999)! 1.000000 1 0 PRINT*, IACHAR( C ), ACHAR(69)! 67 E

Mathematical Intrinsic Functions Summary: SIN(x) ASIN(x) SISH(x) COS(x) ACOS(x) COSH(x) TAN(x) ATAN(x) TANH(x) ATAN2(y,x) EXP(x) LOG(x) LOG10(x) SQRT(x) sine where x is in radians arcsine hyperbolic sine where x is in radians cosine where x is in radians arccosine hyperbolic cosine where x is in radians tangent where x is in radians arctangent hyperbolic tangent where x is in radians arctangent of complex number (x, y) e raised to the power x natural logarithm of x logarithm base 10 of x the square root of x

Numeric Intrinsic Functions Summary: INT(x) NINT(x) CELLING(x) FLOOR(x) AINT(x) ANINT(x) REAL(x) DBLE(x) CMPLX(x,y) ABS(x) DIM(x,y) MAX(a,b, ) MIN(a,b, ) MOD(a,p) MODULO(a,p) SIGN(a,b) truncates x into an integer : INT(2.2) 2 ; INT(2.7) 2 nearest INTEGER to a REAL number : NINT(2.2) 2 ; NINT(2.7) 3 smallest INTEGER greater than or equal to REAL number CELLING(2.2) 3; CELLING(2.7) 3 biggest INTEGER less than or equal to REAL number FLOOR(2.2) 2; FLOOR(2.7) 2 truncates x to whole REAL number : AINT(2.2) 2.0 ; AINT(2.7) 2.0 nearest whole REAL number : ANINT(2.2) 2.0; ANINT(2.7) 3.0 convert to the equivalent REAL number : REAL(2) 2.0 convert to DOUBLE PRECISION : DBLE(2) 2.D0 convert to COMPLEX : CMPLX(2.0, 3.0) 2.0 + i 3.0 absolute value : ABS(-2.0) 2.0 positive difference the maximum value of the arguments : MAX(2.0, 1.0, 4.0, 2.5) 4.0 the minimum value of the arguments : MIN(2.0, 1.0, 4.0, 2.5) 1.0 remainder function : MOD(5.0, 2.0) 1.0 modulo function : MODULO(5.0, 2.0) 2.0 transfer of sign : ABS(a)*(b/ABS(b)) : SIGN(5.0, -2.0) -5.0

Character Intrinsic Functions Summary: ACHAR(i) ADJUSTL(str) ADJUSTR(str) CHAR(i) IACHAR(ch) ICHAR(ch) INDEX(str,substr) LEN(str) LEN_TRIM(str) LGE(str1,str2) LGT(str1,str2) LLE(str1,str2) LLT(str1,str2) REPEAT(str,i) SCAN(str,set) TRIM(str) VERIFY(strset) i th character in ASCII collating sequence : ACHAR(100) d adjust left : ADJUSTL( the string ) the string adjust right : ADJUSTR( the string ) the string i th character in processor collating sequence position of character in ASCII collating sequence : IACHAR( d ) 100 position of character in processor collating sequence starting position of substring : INDEX( jibberish, eris ) 5 length of string length of string without trailing blanks lexically.ge. : lexical positional operators lexically.gt. lexically.le. lexically.lt. concatenate string i times scan a string for characters in a set remove trailing blanks verify the set of characters in a string, the result is the first position in the string which is a character that is NOT in the set. : VERIFY( ABBA, A ) is 2 and VERIFY( ABBA, BA ) is 0.

II.4. Simple Input/Output PRINT Statement: The simplest form of directing unformatted data to the standard output channel PROGRAM Outie CHARACTER(LEN=*), PARAMETER :: long_name = Llanfairphwyll...gogogoch REAL :: x, y, z LOGICAL :: lacigol x = 1; y = 2; z = 3 lacigol = (y.eq. x) PRINT*, long_name PRINT*, "Spock says ""illogical& &Captain"" "!.TRUE.! Llanfairphwyll...gogogoch! Spock says illogical Captain PRINT*, x =, x, y =, y, z =, z! x = 1.000 y = 2.000 z = 3.000 PRINT*, Logical val:, lacigol END PROGRAM Outie LOGICAL variables can be printed Strings can be split across lines Each PRINT statement begins a new line The double " in the string, the first one escapes the second. PRINT*, Spock says "illogical Captain"! x = Logical val: F

READ Statement: The simplest form of reading unformatted data from the standard input channel READ*, long_name! Llanfairphwyll...gogogoch READ*, x, y, z! 1.000 2.000 3.000 READ*, lacigol! F each READ statement reads from a newline. the READ statement can transfer any object of intrinsic type from the standard input. The CHARACTER variable should be written in a single line. READ*, x, y, z Can be in a single line with at least one blank between the variable : 1.0 2.0 3.0 or one variable per line: 1.0 2.0 3.0