A small table can hold rates while an index chooses which row is active.

Program

Play the program to choose a different rate row and recompute the charge.

rate_lookup_table.f90
program rate_lookup_table_demo
    implicit none
    integer :: rate_cents(3)
    integer :: row
    integer :: units
    integer :: charge_cents

    rate_cents = [12, 15, 20]
    row = 
    units = 8
    charge_cents = units * rate_cents(row)
    print '(I0, 1X, I0)', row, charge_cents
end program rate_lookup_table_demo
program rate_lookup_table_demo
    implicit none
    integer :: rate_cents(3)
    integer :: row
    integer :: units
    integer :: charge_cents

    rate_cents = [12, 15, 20]
    row = 
    units = 8
    charge_cents = units * rate_cents(row)
    print '(I0, 1X, I0)', row, charge_cents
end program rate_lookup_table_demo
program rate_lookup_table_demo
    implicit none
    integer :: rate_cents(3)
    integer :: row
    integer :: units
    integer :: charge_cents

    rate_cents = [12, 15, 20]
    row = 
    units = 8
    charge_cents = units * rate_cents(row)
    print '(I0, 1X, I0)', row, charge_cents
end program rate_lookup_table_demo
lookup table A table turns row data into values that code can reuse.
row index `rate_cents(row)` selects one rate from the table.
derived value `charge_cents` is calculated from the selected table row.