tweak fortran pages
This commit is contained in:
parent
6c2d6476b8
commit
aa3d078e21
103
chap/Fortran.tex
103
chap/Fortran.tex
@ -1,13 +1,15 @@
|
|||||||
\chapter{Fortran} \label{chap:Fortran} \index{Fortran}
|
\chapter{Fortran} \label{chap:Fortran} \index{Fortran}
|
||||||
|
|
||||||
|
\begin{quote}
|
||||||
Fortran (\textsc{FORmula TRANslator}) est, avec le Cobol\index{Cobol},
|
Fortran (\textsc{FORmula TRANslator}) est, avec le Cobol\index{Cobol},
|
||||||
un des premiers langages évolués. Il a été conçu après la seconde
|
un des premiers langages évolués. Il a été conçu après la seconde
|
||||||
guerre mondiale, en 1954, par
|
guerre mondiale, en 1954, par
|
||||||
John Warner Backus, ingénieur en radiophonie chez IBM\index{IBM},
|
John Warner Backus, ingénieur en radiophonie chez IBM\index{IBM},
|
||||||
|
\end{quote}
|
||||||
|
|
||||||
% ========================================
|
% ========================================
|
||||||
|
|
||||||
\section{F77}
|
\section{FORTRAN77}
|
||||||
|
|
||||||
Dernière version à exiger le format '80 colonnes' des cartes perforées,
|
Dernière version à exiger le format '80 colonnes' des cartes perforées,
|
||||||
cette version est aussi (aux yeux de vieux dinos) la plus pure,
|
cette version est aussi (aux yeux de vieux dinos) la plus pure,
|
||||||
@ -15,6 +17,10 @@ cette version est aussi (aux yeux de vieux dinos) la plus pure,
|
|||||||
mythique \textsl{comefrom}\footnote{Keyword: Datamatic}.
|
mythique \textsl{comefrom}\footnote{Keyword: Datamatic}.
|
||||||
Nom officiel : \texttt{ANSI X3.9-1978}.
|
Nom officiel : \texttt{ANSI X3.9-1978}.
|
||||||
|
|
||||||
|
L'incarnation \texttt{g77}\index{g77} n'existe plus, meis peut être
|
||||||
|
à-priori émulable en jouant avec les options de \texttt{gfortran}
|
||||||
|
et un brin de shell.
|
||||||
|
|
||||||
% ============****************===============
|
% ============****************===============
|
||||||
|
|
||||||
% https://linuxfr.org/users/vmagnin/journaux/taptempo-fortran
|
% https://linuxfr.org/users/vmagnin/journaux/taptempo-fortran
|
||||||
@ -33,7 +39,7 @@ Il faut l'enregister dans un fichier nommé \texttt{hello.f90}
|
|||||||
pour que le compilateur puisse admettre que c'est écrit
|
pour que le compilateur puisse admettre que c'est écrit
|
||||||
en \textsl{free form format}.
|
en \textsl{free form format}.
|
||||||
|
|
||||||
\begin{verbatim}
|
\begin{lstlisting}
|
||||||
$ cat hello.f90
|
$ cat hello.f90
|
||||||
program hello
|
program hello
|
||||||
implicit none
|
implicit none
|
||||||
@ -42,7 +48,7 @@ end
|
|||||||
$ gfortran -Wall hello.f90 -o hello && ./hello
|
$ gfortran -Wall hello.f90 -o hello && ./hello
|
||||||
hello world
|
hello world
|
||||||
$
|
$
|
||||||
\end{verbatim}
|
\end{lstlisting}
|
||||||
|
|
||||||
% --------------------------------------------------------
|
% --------------------------------------------------------
|
||||||
%
|
%
|
||||||
@ -55,7 +61,7 @@ Quand on lance un programme, il peut recevoir des instructions
|
|||||||
par (mais pas que) deux canaux : les arguments de la ligne de commande
|
par (mais pas que) deux canaux : les arguments de la ligne de commande
|
||||||
et les variables d'environnement.
|
et les variables d'environnement.
|
||||||
|
|
||||||
\begin{verbatim}
|
\begin{lstlisting}
|
||||||
program rum_me
|
program rum_me
|
||||||
implicit none
|
implicit none
|
||||||
integer :: nbarg, foo
|
integer :: nbarg, foo
|
||||||
@ -69,18 +75,18 @@ program rum_me
|
|||||||
enddo
|
enddo
|
||||||
endif
|
endif
|
||||||
end
|
end
|
||||||
\end{verbatim}
|
\end{lstlisting}
|
||||||
|
|
||||||
Si un des arguments doir être vu comme une valeur numérique,
|
Si un des arguments doir être vu comme une valeur numérique,
|
||||||
il faut la convertir avant usage. Exemple pour un nombre
|
il faut convertir la chaine de caractères avant usage.
|
||||||
flottant~:
|
Exemple pour un nombre flottant~:
|
||||||
|
|
||||||
\begin{verbatim}
|
\begin{lstlisting}
|
||||||
character(len=89) :: arg
|
character(len=89) :: arg
|
||||||
real :: cx
|
real :: cx
|
||||||
call getarg(2, string)
|
call getarg(2, string)
|
||||||
read (string, *) cx
|
read (string, *) cx
|
||||||
\end{verbatim}
|
\end{lstlisting}
|
||||||
|
|
||||||
% --------------------------------------------------------
|
% --------------------------------------------------------
|
||||||
|
|
||||||
@ -91,7 +97,32 @@ Rank, Size, \textsc{allocatable}, toussa\dots
|
|||||||
Amies du C, soyez d'entrée prévenues, en Fortran, l'indice
|
Amies du C, soyez d'entrée prévenues, en Fortran, l'indice
|
||||||
par défaut du premier élément d'un tableau est \textbf{1},
|
par défaut du premier élément d'un tableau est \textbf{1},
|
||||||
mais cette valeur peut être modifiée à la déclaration
|
mais cette valeur peut être modifiée à la déclaration
|
||||||
du tableau.
|
du tableau. Ce qui permet des \textsl{of-by-anynumber}
|
||||||
|
du plus bel effet.
|
||||||
|
|
||||||
|
% --------------------------------------------------------
|
||||||
|
% new 29 decembre 2022
|
||||||
|
|
||||||
|
\section{Nombres complexes}
|
||||||
|
|
||||||
|
Partie imaginaire : \texttt{ipart = aimag(cmplx)}.
|
||||||
|
|
||||||
|
% --------------------------------------------------------
|
||||||
|
% nouveau 4 mars 2023
|
||||||
|
|
||||||
|
\section {Les structures}\index{type}
|
||||||
|
|
||||||
|
Une « structure », c'est comme une petite boite dans laquelle on peut
|
||||||
|
mettre des variables de différentes natures.
|
||||||
|
|
||||||
|
\begin{lstlisting}
|
||||||
|
type t_pixrgb
|
||||||
|
integer :: r, g, b
|
||||||
|
integer :: alpha = 0
|
||||||
|
end type
|
||||||
|
\end{lstlisting}
|
||||||
|
|
||||||
|
Nous verrons plus loin l'importance de cette notion.
|
||||||
|
|
||||||
% --------------------------------------------------------
|
% --------------------------------------------------------
|
||||||
|
|
||||||
@ -130,12 +161,39 @@ Il serait bon de voir un exemple du monde réel. Ou juste un
|
|||||||
exemple basique. Mais avec des explications. Parce que ce n'est pas
|
exemple basique. Mais avec des explications. Parce que ce n'est pas
|
||||||
vraiment évident. Mais c'est un concept balaize.
|
vraiment évident. Mais c'est un concept balaize.
|
||||||
|
|
||||||
|
Nous allons donc créer un module qui ne fait quasiment rien, ce qui
|
||||||
|
limitera le nombre de pannes possibles dans la suite des opérations.
|
||||||
|
|
||||||
|
\begin{lstlisting}
|
||||||
|
module dummy
|
||||||
|
implicit none
|
||||||
|
contains
|
||||||
|
subroutine print_dummy
|
||||||
|
print *, 'this is the dummy subroutine'
|
||||||
|
end subroutine
|
||||||
|
end module
|
||||||
|
\end{lstlisting}
|
||||||
|
|
||||||
|
Rien de bien compliqué~:
|
||||||
|
Un module peut être vu comme une boite qui contient (\texttt{contains})
|
||||||
|
des procédures (\texttt{function} ou \texttt{subroutine},
|
||||||
|
et qui sera utilisé avec ce genre de petit programme~:
|
||||||
|
|
||||||
|
\begin{lstlisting}
|
||||||
|
program t
|
||||||
|
use dummy
|
||||||
|
implicit none
|
||||||
|
print *, '=== programme de test ==='
|
||||||
|
call print_dummy
|
||||||
|
end program
|
||||||
|
\end{lstlisting}
|
||||||
|
|
||||||
% --------------------------------------------------------
|
% --------------------------------------------------------
|
||||||
\section{Random et Aléa}
|
\section{Random et Aléa}
|
||||||
|
|
||||||
La dernière ligne va vous étonner.
|
La dernière ligne va vous étonner.
|
||||||
|
|
||||||
\begin{verbatim}
|
\begin{lstlisting}
|
||||||
integer, dimension(3) :: tarray
|
integer, dimension(3) :: tarray
|
||||||
integer :: t3
|
integer :: t3
|
||||||
real :: dummy
|
real :: dummy
|
||||||
@ -146,7 +204,7 @@ La dernière ligne va vous étonner.
|
|||||||
! after initializing the random generator engine,
|
! after initializing the random generator engine,
|
||||||
! you MUST use it for initializing the initializer
|
! you MUST use it for initializing the initializer
|
||||||
dummy = rand()
|
dummy = rand()
|
||||||
\end{verbatim}
|
\end{lstlisting}
|
||||||
|
|
||||||
% --------------------------------------------------------
|
% --------------------------------------------------------
|
||||||
% new Thu 24 Nov 2022 02:27:05 AM CET
|
% new Thu 24 Nov 2022 02:27:05 AM CET
|
||||||
@ -157,13 +215,6 @@ Comme d'habitude avec gcc\footnote{The Gnu Compiler Collection}, les
|
|||||||
options sont innombrables. J'ai essayé d'en dégager les plus importantes,
|
options sont innombrables. J'ai essayé d'en dégager les plus importantes,
|
||||||
mais ce ne sont probablement pas les seules.
|
mais ce ne sont probablement pas les seules.
|
||||||
|
|
||||||
% --------------------------------------------------------
|
|
||||||
% new 29 decembre 2022
|
|
||||||
|
|
||||||
\section{Nombres complexes}
|
|
||||||
|
|
||||||
Partie imaginaire : \texttt{ipart = aimag(cmplx)}.
|
|
||||||
|
|
||||||
% --------------------------------------------------------
|
% --------------------------------------------------------
|
||||||
|
|
||||||
\section{Images}
|
\section{Images}
|
||||||
@ -177,7 +228,9 @@ un peu de \textsc{rtfm}.
|
|||||||
Nous allons donc commencer par Plplot, pour envisager ensuite les alternatives.
|
Nous allons donc commencer par Plplot, pour envisager ensuite les alternatives.
|
||||||
|
|
||||||
% --------------------------------------------------------
|
% --------------------------------------------------------
|
||||||
|
%
|
||||||
|
% $ dillo /usr/share/doc/plplot-doc/html/index.html &
|
||||||
|
%
|
||||||
\subsection{Plplot} \index{plplot} \label{ploplt}
|
\subsection{Plplot} \index{plplot} \label{ploplt}
|
||||||
|
|
||||||
Commençons directement par un EMC\footnote{Exemple Minimal Compilable}
|
Commençons directement par un EMC\footnote{Exemple Minimal Compilable}
|
||||||
@ -188,15 +241,7 @@ qui gèrent pour vous les valeurs « par défaut ».
|
|||||||
Voyez cette exemple comme un \textsl{boilerplate} simple
|
Voyez cette exemple comme un \textsl{boilerplate} simple
|
||||||
ou un \textsc{HelloWorld}~:
|
ou un \textsc{HelloWorld}~:
|
||||||
|
|
||||||
\begin{verbatim}
|
\lstinputlisting{code/fortran/plplotting.f90}
|
||||||
program dessine
|
|
||||||
use plplot
|
|
||||||
implicit none
|
|
||||||
call plinit ()
|
|
||||||
call plenv(-2.1, 2.1, -2.1, 2.1, 0, 0)
|
|
||||||
call plend
|
|
||||||
end program
|
|
||||||
\end{verbatim}
|
|
||||||
|
|
||||||
Il ne se passe pas grand chose, sauf la proposition de choisir
|
Il ne se passe pas grand chose, sauf la proposition de choisir
|
||||||
le type de sortie.
|
le type de sortie.
|
||||||
|
5
code/fortran/Makefile
Normal file
5
code/fortran/Makefile
Normal file
@ -0,0 +1,5 @@
|
|||||||
|
|
||||||
|
INCS = -I/usr/include/plplot -I/usr/lib/x86_64-linux-gnu/fortran/modules/plplot
|
||||||
|
|
||||||
|
plplotting: plplotting.f90 Makefile
|
||||||
|
gfortran -g $< $(INCS) -lplplotfortran -o $@
|
8
code/fortran/plplotting.f90
Normal file
8
code/fortran/plplotting.f90
Normal file
@ -0,0 +1,8 @@
|
|||||||
|
program plplotting
|
||||||
|
use plplot
|
||||||
|
implicit none
|
||||||
|
|
||||||
|
call plinit ()
|
||||||
|
call plenv(-2.1, 2.1, -2.1, 2.1, 0, 0)
|
||||||
|
call plend
|
||||||
|
end program
|
@ -26,7 +26,7 @@
|
|||||||
%------ reglages des 'listings'
|
%------ reglages des 'listings'
|
||||||
\lstset{frame=single} % dessin d'un cadre autour du listing
|
\lstset{frame=single} % dessin d'un cadre autour du listing
|
||||||
\lstset{basicstyle=\ttfamily\small}
|
\lstset{basicstyle=\ttfamily\small}
|
||||||
\lstset{aboveskip=1.2em,belowskip=1.2em}
|
\lstset{aboveskip=1.0em,belowskip=1.0em}
|
||||||
|
|
||||||
\setcounter{tocdepth}{1}
|
\setcounter{tocdepth}{1}
|
||||||
\pagestyle{plain}
|
\pagestyle{plain}
|
||||||
|
Loading…
Reference in New Issue
Block a user