ortran

Lenguaje de programación orientado a aplicaciones científicas y numéricas de alto rendimiento

Plantillas

Boiler plate

Este es un buen punto de partida para construir todos los programas escritos en Fortran. Tiene una referencia al entorno iso y además tiene implicit none

program Boiler_plate
    use iso_fortran_env
    implicit none

    module mod_hola_mundo
    ! Datos globales
    end module mod_hola_mundo

    contains

    subroutine hola_mundo
    ! Test
    end subroutine hola_mundo
end program Boiler_plate

Makefile

Este es un ejemplo de un Makefile. Básicamente obtiene un listado de todos los ficheros fuente .f90 del directorio src y genera una lista de targets que asocia al directorio app.

Este es mi más reciente Makefile:

FC = ifort
SRC = $(wildcard *.f90)
TARGETS = $(addprefix bin/,$(SRC:.f90=))
ARGS=-fopenmp -check -warn all

all: bin out $(TARGETS)

bin/%: %.f90
    @cat $< | expand -t4 | sponge $<
    $(FC) $(ARGS) -o $@ $<

bin:
    mkdir -p bin

out:
    mkdir -p out

up:
    git add .
    git commit
    git push origin main

clean:
    rm -f bin/*

Este otro es un Makefile antiguo:

FC = gfortran
CAF = caf
SRC = $(wildcard src/*.f90)
FILES_NO_EXT = $(notdir $(SRC))
TARGETS = $(addprefix app/,$(FILES_NO_EXT:.f90=))

# Modules
MOD_SRC = $(wildcard src/mod/*.f)
MOD_TARGETS = $(addprefix app/mod/,$(notdir $(MOD_SRC:.f=.mod)))

# Arguments
ARGS = -Wall -Wextra -std=f2018 -O3 -pedantic -fdec-math -ffree-form -Imod

all: app mod $(TARGETS)

# Make target directory
app mod:
    @mkdir -p app
    @mkdir -p mod

# Caso genérico
app/%: src/%.f90
    $(FC) $(ARGS) $< -o $@

clean:
    @rm -f $(TARGETS)
    @rm -f mod/*.mod mod/*.o

Este otro lo he usado bastante en el pasado y me da buenos resultados:

FC = gfortran
CAF = caf
SRC = $(wildcard src/*.f)
FILES_NO_EXT = $(notdir $(SRC))
TARGETS = $(addprefix app/,$(FILES_NO_EXT:.f=))

# Modules
MOD_SRC = $(wildcard src/mod/*.f)
MOD_TARGETS = $(addprefix app/mod/,$(notdir $(MOD_SRC:.f=.mod)))

# Arguments
#ARGS = -Wall -Wextra -std=f2018 -O3 -pedantic -fdec-math -ffree-form -Imod
ARGS = -std=f2018 -ffree-form -Imod


all: app mod $(TARGETS)

# Make target directory
app mod:
    @mkdir -p app
    @mkdir -p mod

# Caso genérico
app/%: src/%.f
    $(FC) $(ARGS) $< -o $@

clean:
    @rm -f $(TARGETS)
    @rm -f mod/*.mod mod/*.o

Language Server

Se encuentra en el paquete fortran-language-server. Puede ser arrancado mediante la orden fortls

El paquete contiene estos archivos

samuel@hp-i5:~$ apt-file list fortran-language-server fortran-language-server: /usr/bin/fortls fortran-language-server: /usr/lib/python3/dist-packages/fortls/__init__.py fortran-language-server: /usr/lib/python3/dist-packages/fortls/intrinsic_funs.json fortran-language-server: /usr/lib/python3/dist-packages/fortls/intrinsic_mods.json fortran-language-server: /usr/lib/python3/dist-packages/fortls/intrinsics.py fortran-language-server: /usr/lib/python3/dist-packages/fortls/jsonrpc.py fortran-language-server: /usr/lib/python3/dist-packages/fortls/keywords.json fortran-language-server: /usr/lib/python3/dist-packages/fortls/langserver.py fortran-language-server: /usr/lib/python3/dist-packages/fortls/objects.py fortran-language-server: /usr/lib/python3/dist-packages/fortls/parse_fortran.py fortran-language-server: /usr/lib/python3/dist-packages/fortls/statements.json fortran-language-server: /usr/lib/python3/dist-packages/fortran_language_server-1.10.3.egg-info/PKG-INFO fortran-language-server: /usr/lib/python3/dist-packages/fortran_language_server-1.10.3.egg-info/dependency_links.txt fortran-language-server: /usr/lib/python3/dist-packages/fortran_language_server-1.10.3.egg-info/entry_points.txt fortran-language-server: /usr/lib/python3/dist-packages/fortran_language_server-1.10.3.egg-info/requires.txt fortran-language-server: /usr/lib/python3/dist-packages/fortran_language_server-1.10.3.egg-info/top_level.txt fortran-language-server: /usr/share/doc/fortran-language-server/README.rst.gz fortran-language-server: /usr/share/doc/fortran-language-server/changelog.Debian.gz fortran-language-server: /usr/share/doc/fortran-language-server/copyright fortran-language-server: /usr/share/man/man1/fortls.1.gz