Skip to main content

Loop

DO Loop

Calculate factorial:

src/07_factorial.f90
! Program : Find factorial

PROGRAM factorial
IMPLICIT NONE

INTEGER :: input, ii, output = 1

PRINT *, "Input = "
READ *, input

DO ii = 1, input
output = output * ii
ENDDO

PRINT *, input, "! = ", output
END PROGRAM factorial

We can have a step size in a DO loop with a third parameter:

DO i = 1, 100, 10
! do something
END DO

Exit a loop based on condition:

DO i = 1, 10
CALL random_number(x)
IF (x > 0.5) EXIT
END DO

Skip rest of current iteration with cycle:

DO i = 1, 10
IF (iseven(i)) CYCLE
! do something with the odd numbers
END DO

Implied DO loops:

PRINT *, (i, i = 1, 10)

You can iterate multiple expressions:

PRINT *, (i, i**2, i = 0, 10)

With nested loops:

PRINT *, ((i*j, i = 1, 10), j = 1, 10)

DO concurrent: if the iterations of a DO loop are independent, we can use the CONCURRENT keyword to indicate, the loop can be iterated in parallel:

DO CONCURRENT (i = 1, 10)
! do something
END DO

DO WHILE

src/07_print_even_numbers.f90
PROGRAM even_numbers
IMPLICIT NONE

INTEGER :: num
num = 1

DO WHILE (num <= 10)
IF (MODULO(num, 2) == 0) THEN
PRINT *, num
END IF
num = num + 1
END DO
END PROGRAM even_numbers