Appendix 1 - Exercises

Variables and data types

1-1 Which of the following names can be used as Fortran variable names?

  1. number_of_stars

  2. fortran_is_a_nice_language_to_use

  3. 2001_a_space_odyssey

  4. more$_money

1-2 Declare the following variables in Fortran: 2 scalar integers a, and b, 3 floating point scalars c, d and e, 2 character strings infile and outfile and a logical variable f.

1-3 Declare a floating point variable a that can represent values between 10\(^{-150}\) and 10\(^{150}\) with 14 significatn numbers.

1-4 What is printed by the following program?

program precision

    implicit none

    integer, parameter :: ap = &

    real(ap) :: a, b

    a = 1.234567890123456
    b = 1.234567890123456_ap

    if (a==b) then
        write(*,*) 'Values are equal.'
        write(*,*) 'Values are different.'


end program precision

Arrays and matrices

2-1 Declare a \([3 \times 3]\) floating point array, \(\mathbf{Ke}\), and an 3 element integer array, \(\mathbf{f}\).

2-2 Declare an integer array, \(\mathbf{idx}\), with the indices [0, 1, 2, 3, 4, 5, 6, 7]

2-3 Give the following assignments:

  1. Floating point array, A, is assigned the value 5.0 at (2,3).

  2. Integer matrix, C, is assigned the value 0 at row 2.

2-4 Write a program declaring a floating point matrix, I, with the dimensions [10×10] and initialise it with the identity matrix.

2-5 Declare an allocatable 2-dimensional floating point array and a 1-dimensional floating point vector. Also show programstatements how memory for these variables are allocated and deallocated.

2-6 Create a subroutine, identity, initialising a arbitrary twodimensionl to the identity matrix. Write a program illustrating the use of the subroutine.

2-7 Create a program that:

  1. Defines an array to have 100 elements;

  2. assigns to the elements the values 1,2,3, …, 100;

  3. reads two integer values in the range 1 to 100;

  4. reverses the order of the elements of the array in the range specified by the two values.

2-8 Given the array declaration

real, dimension(50,20) :: a

write array sections representing

  1. the first row of a;

  2. the last column of a;

  3. every second element in each row and column;

  4. as for (iii) in reverse order in both dimensions;

2-9 Complete excercise 2.8 using array syntax instead of do constructs.

2-10 Create a derived data type for a particle in a particle system. The particle should have the following attributes:

  • position

  • velocity

  • mass

Create an allocatable array with 1000 particles. Initialise all particles with the position (0,0,0) and a random velocity and a mass of 1.0.

Conditional statements

3-1 Give the following if-statements:

  1. If the value of the variable, i, is greater than 100 print ’i is greater than 100!’

  2. If the value of the logical variable, extra_filling, is true print ’Extra filling is ordered.’, otherwise print ’No extra filling.’.

3-2 Give a case-statment for the variable, a, printing ’a is 1’ when a is 1, ’a is between 2 and 20’ for values between 1 and 20 and prints ’a is not between 1 and 20’ for all other values.

Repetitive statements

4-1 Write a program consisting of a do-statement 1 to 20 with the control variable, i. For values, i, between 1 till 5, the value of i is printed, otherwise ’i > 5’ is printed. The loop is to be terminated when i equals 15.

Built-in functions

5-1 Give the following expressions in Fortran:

  1. \(\frac{1}{\sqrt{2}}\)

  2. \(e^{x} \sin ^{2} x\)

  3. \(\sqrt{a^{2} +b^{2}}\)

  4. \(\left| x-y\right|\)

5-2 Give the following matrix and vector expressions in Fortran. Also give appropriate array declarations:

  1. \(\mathbf{AB}\)

  2. \(\mathbf{A^{T} A}\)

  3. \(\mathbf{ABC}\)

  4. \(\mathbf{a\cdot b}\)

5-3 Show expressions in Fortran calculating maximum, mininmum, sum and product of the elements of an array.

Program units and subroutines

6-1 Implement a function returning the value of the the following expression:

\(e^{x} \sin ^{2} x\)

6-2 A subroutine receives as an argument an array of values, x, and the number of elements in x, n. If the mean and variance of the values in x are estimated by

\[mean = \frac{1}{n}\sum_{i=1}^{n}x(i)\]


\[variance = \frac{1}{n-1}\sum_{i=1}^{n}(x(i)-mean)^2\]

Write a subroutine which returns these calculated values as arguments. The subroutine check for invalid values of n (<=1). Write a main program that illustrates the use of this subroutine.

6-3 Create a module, statistics, containing the functions in 6-2. Change the program in 6-2 to use this module. The module is placed in a separate file, and the main program in main.f90.

Input and output

7-1 Write a program which reads a value, x, and calculates and prints the corresponding value x/(1.+x). The case x=-1 shoud produce an error message and be followed by an attempt to read a new value of x.

7-2 Write a program listing \(f(x)=\sin x\) from \(-1.0\) to \(1.0\) inintervals of \(0.1\). The output from the program should have the following format:

 x      f(x)
-1.000 -0.841
-0.900 -0.783
-0.800 -0.717
-0.700 -0.644
-0.600 -0.565
-0.500 -0.479
-0.400 -0.389
-0.300 -0.296
-0.200 -0.199
-0.100 -0.100
 0.000  0.000
 0.100  0.100
 0.200  0.199
 0.300  0.296
 0.400  0.389
 0.500  0.479
 0.600  0.565
 0.700  0.644
 0.800  0.717
 0.900  0.783
 1.000  0.841

7-3 Write a program calculating the total length of a piecewise linear curve. The curve is defined in a textfile line.dat.

The file has the following structure:

{number of points n in the file}
{x-coordinate point 1} {y-coordinate point 1}
{x-coordinate point 2} {y-coordinate point 2}
{x-coordinate point n} {y-coordinate point n}

The program must not contain any limitations regarding the number of points in the number of points in the curve read from the file.

String manipulation

8-1 Declare 3 strings, c1, c2 and c3 containing the words ’Fortran’, ’is’ och ’fun’. Merge these into a new string, c4, making a complete sentence.

8-2 Write a function converting a string into a floating point value. Write a program illustrating the use of the function. |

Object-oriented programming

9-1 Implement a derived datatype for a vector and use operator overloading to implement common vector operations such as adding, subtracting and multiplication (cross-product).