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}
|
||||
|
||||
\begin{quote}
|
||||
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
|
||||
guerre mondiale, en 1954, par
|
||||
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,
|
||||
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}.
|
||||
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
|
||||
@ -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
|
||||
en \textsl{free form format}.
|
||||
|
||||
\begin{verbatim}
|
||||
\begin{lstlisting}
|
||||
$ cat hello.f90
|
||||
program hello
|
||||
implicit none
|
||||
@ -42,7 +48,7 @@ end
|
||||
$ gfortran -Wall hello.f90 -o hello && ./hello
|
||||
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
|
||||
et les variables d'environnement.
|
||||
|
||||
\begin{verbatim}
|
||||
\begin{lstlisting}
|
||||
program rum_me
|
||||
implicit none
|
||||
integer :: nbarg, foo
|
||||
@ -69,18 +75,18 @@ program rum_me
|
||||
enddo
|
||||
endif
|
||||
end
|
||||
\end{verbatim}
|
||||
\end{lstlisting}
|
||||
|
||||
Si un des arguments doir être vu comme une valeur numérique,
|
||||
il faut la convertir avant usage. Exemple pour un nombre
|
||||
flottant~:
|
||||
il faut convertir la chaine de caractères avant usage.
|
||||
Exemple pour un nombre flottant~:
|
||||
|
||||
\begin{verbatim}
|
||||
\begin{lstlisting}
|
||||
character(len=89) :: arg
|
||||
real :: cx
|
||||
call getarg(2, string)
|
||||
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
|
||||
par défaut du premier élément d'un tableau est \textbf{1},
|
||||
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
|
||||
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}
|
||||
|
||||
La dernière ligne va vous étonner.
|
||||
|
||||
\begin{verbatim}
|
||||
\begin{lstlisting}
|
||||
integer, dimension(3) :: tarray
|
||||
integer :: t3
|
||||
real :: dummy
|
||||
@ -146,7 +204,7 @@ La dernière ligne va vous étonner.
|
||||
! after initializing the random generator engine,
|
||||
! you MUST use it for initializing the initializer
|
||||
dummy = rand()
|
||||
\end{verbatim}
|
||||
\end{lstlisting}
|
||||
|
||||
% --------------------------------------------------------
|
||||
% 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,
|
||||
mais ce ne sont probablement pas les seules.
|
||||
|
||||
% --------------------------------------------------------
|
||||
% new 29 decembre 2022
|
||||
|
||||
\section{Nombres complexes}
|
||||
|
||||
Partie imaginaire : \texttt{ipart = aimag(cmplx)}.
|
||||
|
||||
% --------------------------------------------------------
|
||||
|
||||
\section{Images}
|
||||
@ -177,7 +228,9 @@ un peu de \textsc{rtfm}.
|
||||
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}
|
||||
|
||||
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
|
||||
ou un \textsc{HelloWorld}~:
|
||||
|
||||
\begin{verbatim}
|
||||
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}
|
||||
\lstinputlisting{code/fortran/plplotting.f90}
|
||||
|
||||
Il ne se passe pas grand chose, sauf la proposition de choisir
|
||||
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'
|
||||
\lstset{frame=single} % dessin d'un cadre autour du listing
|
||||
\lstset{basicstyle=\ttfamily\small}
|
||||
\lstset{aboveskip=1.2em,belowskip=1.2em}
|
||||
\lstset{aboveskip=1.0em,belowskip=1.0em}
|
||||
|
||||
\setcounter{tocdepth}{1}
|
||||
\pagestyle{plain}
|
||||
|
Loading…
Reference in New Issue
Block a user