Introducció

En aquest tema, explorarem els estàndards de Fortran i com assegurar la portabilitat del codi. La portabilitat és crucial per garantir que el codi escrit en Fortran pugui ser executat en diferents plataformes i compiladors sense necessitat de modificacions significatives.

Estàndards de Fortran

Fortran ha evolucionat significativament des de la seva creació, amb diverses versions estandarditzades. A continuació, es presenten els principals estàndards de Fortran:

  1. Fortran 66 (ANSI X3.9-1966): La primera versió estandarditzada de Fortran.
  2. Fortran 77 (ANSI X3.9-1978): Introducció de noves estructures de control i millores en la gestió de cadenes.
  3. Fortran 90 (ISO/IEC 1539:1991): Introducció de programació modular, arrays dinàmics, i altres característiques modernes.
  4. Fortran 95 (ISO/IEC 1539-1:1997): Millores en la programació paral·lela i altres refinaments.
  5. Fortran 2003 (ISO/IEC 1539-1:2004): Suport per a programació orientada a objectes i interoperabilitat amb C.
  6. Fortran 2008 (ISO/IEC 1539-1:2010): Millores en la programació paral·lela amb coarrays.
  7. Fortran 2018 (ISO/IEC 1539-1:2018): Millores addicionals en la programació paral·lela i altres característiques.

Taula de Comparació d'Estàndards

Estàndard Any Característiques Clau
Fortran 66 1966 Primera versió estandarditzada
Fortran 77 1978 Estructures de control, millores en cadenes
Fortran 90 1991 Programació modular, arrays dinàmics
Fortran 95 1997 Millores en programació paral·lela
Fortran 2003 2004 Programació orientada a objectes, interoperabilitat amb C
Fortran 2008 2010 Programació paral·lela amb coarrays
Fortran 2018 2018 Millores en programació paral·lela i altres característiques

Portabilitat del Codi

Bones Pràctiques per a la Portabilitat

  1. Adherir-se als Estàndards: Utilitza característiques estandarditzades de Fortran per assegurar la compatibilitat entre diferents compiladors.
  2. Evitar Extensions del Compilador: Les extensions específiques del compilador poden no ser compatibles amb altres compiladors.
  3. Proves en Diversos Compiladors: Prova el teu codi en diversos compiladors per assegurar la seva portabilitat.
  4. Documentació Clara: Documenta clarament el codi, incloent les dependències i les versions de Fortran utilitzades.
  5. Utilitzar Mòduls: Els mòduls ajuden a organitzar el codi i milloren la seva portabilitat.

Exemple Pràctic

A continuació, es presenta un exemple de codi que segueix les bones pràctiques per a la portabilitat:

module math_operations
  implicit none
contains
  function add(a, b)
    real, intent(in) :: a, b
    real :: add
    add = a + b
  end function add

  function subtract(a, b)
    real, intent(in) :: a, b
    real :: subtract
    subtract = a - b
  end function subtract
end module math_operations

program main
  use math_operations
  implicit none
  real :: x, y, result

  x = 5.0
  y = 3.0

  result = add(x, y)
  print *, 'Sum: ', result

  result = subtract(x, y)
  print *, 'Difference: ', result
end program main

Explicació del Codi

  1. Mòdul math_operations: Defineix un mòdul que conté dues funcions, add i subtract, per sumar i restar dos nombres reals.
  2. Funcions add i subtract: Cada funció pren dos arguments reals i retorna el resultat de l'operació.
  3. Programa Principal main: Utilitza el mòdul math_operations per realitzar operacions de suma i resta, i imprimeix els resultats.

Exercicis Pràctics

Exercici 1: Crear un Mòdul de Multiplicació i Divisió

  1. Crea un mòdul anomenat advanced_math que contingui funcions per multiplicar i dividir dos nombres reals.
  2. Escriu un programa principal que utilitzi aquest mòdul per realitzar operacions de multiplicació i divisió.

Solució

module advanced_math
  implicit none
contains
  function multiply(a, b)
    real, intent(in) :: a, b
    real :: multiply
    multiply = a * b
  end function multiply

  function divide(a, b)
    real, intent(in) :: a, b
    real :: divide
    if (b /= 0.0) then
      divide = a / b
    else
      print *, 'Error: Division by zero'
      divide = 0.0
    end if
  end function divide
end module advanced_math

program main
  use advanced_math
  implicit none
  real :: x, y, result

  x = 6.0
  y = 2.0

  result = multiply(x, y)
  print *, 'Product: ', result

  result = divide(x, y)
  print *, 'Quotient: ', result
end program main

Exercici 2: Provar el Codi en Diversos Compiladors

  1. Prova el codi de l'exercici anterior en almenys dos compiladors diferents (per exemple, gfortran i ifort).
  2. Documenta qualsevol problema de compatibilitat i com es va resoldre.

Conclusió

En aquesta secció, hem explorat els estàndards de Fortran i com assegurar la portabilitat del codi. Seguint les bones pràctiques i utilitzant característiques estandarditzades, podem escriure codi que sigui compatible amb diversos compiladors i plataformes. La portabilitat és essencial per al desenvolupament de programari robust i mantenible.

© Copyright 2024. Tots els drets reservats