Compare commits
4 Commits
6c2d6476b8
...
0db76fef58
Author | SHA1 | Date | |
---|---|---|---|
|
0db76fef58 | ||
|
aa4f0664cb | ||
|
04eeae6de9 | ||
|
aa3d078e21 |
@ -19,6 +19,7 @@ Dans un premier temps, je vais les lister sommairement, et
|
|||||||
ensuite j'aurais une idée sur lesquels seront les plus funs
|
ensuite j'aurais une idée sur lesquels seront les plus funs
|
||||||
à explorer.
|
à explorer.
|
||||||
|
|
||||||
|
Dartmouth Time Sharing System
|
||||||
|
|
||||||
% -------------------------------------------
|
% -------------------------------------------
|
||||||
\section{Bywater} \index{bywater}
|
\section{Bywater} \index{bywater}
|
||||||
|
196
chap/Fortran.tex
196
chap/Fortran.tex
@ -1,13 +1,19 @@
|
|||||||
\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}
|
||||||
|
|
||||||
|
Pourquoi j'ai redécouvert un langage de ma jeunesse, et pourquoi
|
||||||
|
vous devriez vous aussi y jeter un regard attentif. Il y a plein
|
||||||
|
de bonnes choses, la septième va vous tenir compagnie.
|
||||||
|
|
||||||
% ========================================
|
% ========================================
|
||||||
|
|
||||||
\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 +21,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 +43,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 +52,7 @@ end
|
|||||||
$ gfortran -Wall hello.f90 -o hello && ./hello
|
$ gfortran -Wall hello.f90 -o hello && ./hello
|
||||||
hello world
|
hello world
|
||||||
$
|
$
|
||||||
\end{verbatim}
|
\end{lstlisting}
|
||||||
|
|
||||||
% --------------------------------------------------------
|
% --------------------------------------------------------
|
||||||
%
|
%
|
||||||
@ -50,12 +60,13 @@ $
|
|||||||
%
|
%
|
||||||
\section{Args \& Env}
|
\section{Args \& Env}
|
||||||
|
|
||||||
Un fort beau programme, mais il est un peu fermé au monde extérieur.
|
Un fort beau programme que ce \textsc{helloworld}, mais il est un peu
|
||||||
|
fermé au monde extérieur.
|
||||||
Quand on lance un programme, il peut recevoir des instructions
|
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 +80,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 +102,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.
|
||||||
|
|
||||||
% --------------------------------------------------------
|
% --------------------------------------------------------
|
||||||
|
|
||||||
@ -113,10 +149,15 @@ Il semble qu'il y ait deux concepts orthogonaux :
|
|||||||
|
|
||||||
XXX\index{XXX}
|
XXX\index{XXX}
|
||||||
|
|
||||||
|
Pour faire simple, on accède à chaque unité de donnée l'une après l'autre,
|
||||||
|
comme quand on déroule une bande 6250bpi.
|
||||||
|
|
||||||
\subsection{Indexé} \index{index}
|
\subsection{Indexé} \index{index}
|
||||||
|
|
||||||
XXX\index{XXX}
|
XXX\index{XXX}
|
||||||
|
|
||||||
|
C'est pas pareil.
|
||||||
|
|
||||||
% --------------------------------------------------------
|
% --------------------------------------------------------
|
||||||
|
|
||||||
\section{Modules}
|
\section{Modules}
|
||||||
@ -130,12 +171,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 +214,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,27 +225,22 @@ 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}
|
||||||
|
|
||||||
La bibliothèque \textbf{Plplot} semble être un bon choix pour commencer,
|
La bibliothèque \textbf{Plplot} semble être un bon choix pour commencer,
|
||||||
mais il existe bien d'autres options.
|
mais il existe bien d'autres options.
|
||||||
Par exemple \textbf{g2} (page \pageref{g2}) semble être utilisable
|
Par exemple \textbf{g2} (vue en page \pageref{g2}) semble être utilisable
|
||||||
avec les vieux F77, et possiblement avec un Fortran moderne, il faut juste
|
avec les vieux F77, et possiblement avec un Fortran moderne, il faut juste
|
||||||
un peu de \textsc{rtfm}.
|
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,29 +251,83 @@ 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}~:
|
||||||
|
|
||||||
|
\lstinputlisting{code/fortran/plplotting.f90}
|
||||||
|
|
||||||
|
Il ne se passe pas grand chose, sauf qu'on a une proposition de
|
||||||
|
choisir le type de sortie.
|
||||||
|
Dans la version que j'ai (XXX\index{XXX}), on a le choix entre
|
||||||
|
X-Window, PostScript mono ou couleur, Xfig, PNG, SVG, et bien
|
||||||
|
d'autres dont certains, pour moi, assez ésotériques.
|
||||||
|
D'autre part, avec cette méthode, il semble impossible de
|
||||||
|
préciser la taille de l'image.
|
||||||
|
Mais la démonstration est faite.
|
||||||
|
|
||||||
|
Il faut quand même regarder de plus près la subroutine
|
||||||
|
\texttt{plenv()} (\textsl{Set up standard window and draw box})
|
||||||
|
qui initialise simplement un contexte graphique 2D somme toute
|
||||||
|
assez classique. Elle prend six paramètres. Les quatre premiers
|
||||||
|
sont les coordonnées flottantes de deux coins du papier,
|
||||||
|
le cinquième controle l'échelle des axes, et le dernier
|
||||||
|
controle le tracé des boites autour du graphique.
|
||||||
|
|
||||||
|
Nous avons les bases, commençons donc à dessiner.
|
||||||
|
|
||||||
|
Premièrement, nous allons chosir de démarrer automatiquement
|
||||||
|
dans une fenètre X11,
|
||||||
|
en gardant le reste de la configuration avec ses valeurs par défaut.
|
||||||
|
Pour cela, il suffit de rajouter \texttt{call plsdev('xwin')} juste avant
|
||||||
|
l'appel à \texttt{plinit}, il vous faudra utiliser la touche
|
||||||
|
\textsl{<enter>} pour sortir\footnote{Une de mes prochaines tâche sera
|
||||||
|
de regarder comment quitter avec le '\textbf{q}' canonique}.
|
||||||
|
|
||||||
|
Ensuite, pour mettre en évidence notre art,
|
||||||
|
nous allons choisir une couleur pour l'encre (qui est d'un
|
||||||
|
rouge du meilleur effet par défaut en mode "xwin"),
|
||||||
|
puis écrire quelques légendes canoniques, donc inutiles, .
|
||||||
|
|
||||||
\begin{verbatim}
|
\begin{verbatim}
|
||||||
program dessine
|
call plcol0 (15) ! pure white
|
||||||
use plplot
|
call pllab ("Fuzzfactor", "Yoyodines", "Some nice plots")
|
||||||
implicit none
|
|
||||||
call plinit ()
|
|
||||||
call plenv(-2.1, 2.1, -2.1, 2.1, 0, 0)
|
|
||||||
call plend
|
|
||||||
end program
|
|
||||||
\end{verbatim}
|
\end{verbatim}
|
||||||
|
|
||||||
Il ne se passe pas grand chose, sauf la proposition de choisir
|
Il est maintenant temps de poser un premier trait de crayon numérique
|
||||||
le type de sortie.
|
sur notre feuille blanche numérique\footnote{Actuellement noire, mais
|
||||||
Dans la version que j'ai (XXX\index{XXX}), on a le choix entre
|
nous trouverons bien comment changer ça}.
|
||||||
X-Window, PostScript mono ou couleur, Xfig, Null, UserMemory et SVG.
|
La forme de ce tracé sera donnée par une suite de coordonnées
|
||||||
C'est intriguant de ne pas avoir au moins \textbf{un} format
|
flottantes \textsl{x/y}
|
||||||
pixmap\index{pixmap}.
|
stockées dans deux tableaux parallèles que nous allons
|
||||||
|
immédiatement garnir de données pertinentes~:
|
||||||
|
|
||||||
Laissons cette question en suspens, et commençons à dessiner.
|
\begin{verbatim}
|
||||||
D'accord, mais dessiner quoi ?
|
integer, parameter :: lg = 500
|
||||||
|
real :: x(lg), y(lg)
|
||||||
|
real :: k
|
||||||
|
integer :: i
|
||||||
|
k = 0.1
|
||||||
|
do i = 1, lg
|
||||||
|
x(i) = k * sin(real(i)/3.0)
|
||||||
|
y(i) = k * cos(real(i)/5.0)
|
||||||
|
k = k * 1.006021
|
||||||
|
enddo
|
||||||
|
\end{verbatim}
|
||||||
|
|
||||||
|
Une fois en possession de ces données conceptuelles, que l'on peut
|
||||||
|
aisément voire comme un cheminement, nous allons demander
|
||||||
|
au crayon de se promener sur notre feuille virtuelle en suivant
|
||||||
|
ce chemin~:
|
||||||
|
|
||||||
|
\begin{verbatim}
|
||||||
|
call plcol0 (12)
|
||||||
|
call plline (x, y)
|
||||||
|
\end{verbatim}
|
||||||
|
|
||||||
|
Au passage, vous pouvez remarquer la magie du Fortran moderne~:
|
||||||
|
il n'est plus nécessaire de signifier la dimension des tableaux
|
||||||
|
lors de l'appel de la procédure.
|
||||||
|
|
||||||
% --------------------------------------------------------
|
% --------------------------------------------------------
|
||||||
|
|
||||||
\section{Questions}
|
\section{Questions en attente}
|
||||||
|
|
||||||
\index{XXX}
|
\index{XXX}
|
||||||
|
|
||||||
@ -220,7 +337,7 @@ D'accord, mais dessiner quoi ?
|
|||||||
\item Est-il possible de causer à \texttt{libsndfile} ?
|
\item Est-il possible de causer à \texttt{libsndfile} ?
|
||||||
\item Comment caler une chaine à gauche avec un \textsc{format} ?
|
\item Comment caler une chaine à gauche avec un \textsc{format} ?
|
||||||
\item Is there a \texttt{-fortran} option for making comments with
|
\item Is there a \texttt{-fortran} option for making comments with
|
||||||
\texttt{figlet}\index{figlet} ?
|
\texttt{boxes} + \texttt{figlet}\index{figlet} ?
|
||||||
\end{itemize}
|
\end{itemize}
|
||||||
|
|
||||||
% --------------------------------------------------------
|
% --------------------------------------------------------
|
||||||
@ -228,6 +345,7 @@ D'accord, mais dessiner quoi ?
|
|||||||
|
|
||||||
\textsl{<Pas de réponse>}
|
\textsl{<Pas de réponse>}
|
||||||
|
|
||||||
|
Voilà, c'est tout pour le moment\dots
|
||||||
|
|
||||||
|
|
||||||
% ========================================
|
% ========================================
|
||||||
|
@ -170,7 +170,6 @@ nous aurons toujours la même séquence en sortie.
|
|||||||
\subsection{Trucs à voir}
|
\subsection{Trucs à voir}
|
||||||
|
|
||||||
\begin{verbatim}
|
\begin{verbatim}
|
||||||
|
|
||||||
#declare VIRGINIA =
|
#declare VIRGINIA =
|
||||||
transform {
|
transform {
|
||||||
matrix < 1, 1, 0,
|
matrix < 1, 1, 0,
|
||||||
@ -184,6 +183,12 @@ transform {VIRGINIA}
|
|||||||
}
|
}
|
||||||
\end{verbatim}
|
\end{verbatim}
|
||||||
|
|
||||||
|
% ================================================
|
||||||
|
|
||||||
|
\section{Avec Fortran}
|
||||||
|
|
||||||
|
plplot
|
||||||
|
|
||||||
|
|
||||||
% ------------------------------------------------
|
% ------------------------------------------------
|
||||||
|
|
||||||
|
@ -107,6 +107,12 @@ préciser le coef de qualité ( qscale : 1 = le mieux / 3 = correcte )
|
|||||||
|
|
||||||
https://engineering.giphy.com/how-to-make-gifs-with-ffmpeg/ \index{gif89a}
|
https://engineering.giphy.com/how-to-make-gifs-with-ffmpeg/ \index{gif89a}
|
||||||
|
|
||||||
|
\begin{verbatim}
|
||||||
|
ffmpeg -ss 0:5:59.600 -to 0:6:11.150 -i Downloads/foo.mp4 tmp/tragic.gif
|
||||||
|
\end{verbatim}
|
||||||
|
|
||||||
|
% -----------------------------------------------------------------
|
||||||
|
|
||||||
\subsection{Encoder un cloître}
|
\subsection{Encoder un cloître}
|
||||||
|
|
||||||
Là, nous sommes dans du \textsl{serious bizness}, puisque cette vidéo
|
Là, nous sommes dans du \textsl{serious bizness}, puisque cette vidéo
|
||||||
|
6
code/fortran/.gitignore
vendored
Normal file
6
code/fortran/.gitignore
vendored
Normal file
@ -0,0 +1,6 @@
|
|||||||
|
|
||||||
|
plplotting
|
||||||
|
dessiner
|
||||||
|
|
||||||
|
*.png
|
||||||
|
|
8
code/fortran/Makefile
Normal file
8
code/fortran/Makefile
Normal file
@ -0,0 +1,8 @@
|
|||||||
|
|
||||||
|
INCS = -I/usr/include/plplot -I/usr/lib/x86_64-linux-gnu/fortran/modules/plplot
|
||||||
|
|
||||||
|
plplotting: plplotting.f90 Makefile
|
||||||
|
gfortran -g $< $(INCS) -lplplotfortran -o $@
|
||||||
|
|
||||||
|
dessiner: dessiner.f90 Makefile
|
||||||
|
gfortran -g $< $(INCS) -lplplotfortran -o $@
|
66
code/fortran/dessiner.f90
Normal file
66
code/fortran/dessiner.f90
Normal file
@ -0,0 +1,66 @@
|
|||||||
|
program dessiner
|
||||||
|
use plplot
|
||||||
|
implicit none
|
||||||
|
|
||||||
|
integer :: i
|
||||||
|
real :: a, b, c, d
|
||||||
|
|
||||||
|
character(len=80) :: version
|
||||||
|
call plgver(version)
|
||||||
|
write (*,'(a,a)') 'plplot version: ', trim(version)
|
||||||
|
|
||||||
|
call plsdev('xwin')
|
||||||
|
call plinit ()
|
||||||
|
|
||||||
|
call plenv(-2.2, 2.2, -2.2, 2.2, 0, 1)
|
||||||
|
|
||||||
|
a = 0
|
||||||
|
b = 0
|
||||||
|
c = 0
|
||||||
|
d = 0
|
||||||
|
do i=1, 100
|
||||||
|
a = a + 0.01
|
||||||
|
b = b + 0.02
|
||||||
|
call dessin_1 (a, b, 12)
|
||||||
|
c = c + 0.03
|
||||||
|
d = d + 0.04
|
||||||
|
call dessin_1 (c, d, 13)
|
||||||
|
enddo
|
||||||
|
|
||||||
|
call plend
|
||||||
|
|
||||||
|
contains ! -----------------------------
|
||||||
|
!------------------------------------------------------
|
||||||
|
subroutine dessin_1 (sha, shb, color)
|
||||||
|
real, intent(in) :: sha, shb
|
||||||
|
integer, intent(in) :: color
|
||||||
|
|
||||||
|
integer, parameter :: lg = 2000
|
||||||
|
real :: x(lg), y(lg)
|
||||||
|
real :: k, amp
|
||||||
|
integer :: i
|
||||||
|
|
||||||
|
! print *, 'dessin 1'
|
||||||
|
amp = 2.0
|
||||||
|
do i = 1, lg
|
||||||
|
k = real(i)/real(lg) * 6.2832 * 4.0
|
||||||
|
x(i) = amp * sin((k+sha)*5)
|
||||||
|
y(i) = amp * cos((k+shb)*3)
|
||||||
|
enddo
|
||||||
|
! print *, k, x(i), y(i)
|
||||||
|
|
||||||
|
call plcol0 (15) ! pure white
|
||||||
|
call pllab ("Fuzzfactor", "Yoyodines", "Some nice plots from tTh")
|
||||||
|
call plcol0 (color)
|
||||||
|
call plline (x, y)
|
||||||
|
|
||||||
|
end subroutine
|
||||||
|
!------------------------------------------------------
|
||||||
|
subroutine dessin_2 ()
|
||||||
|
|
||||||
|
print *, 'dessin 2'
|
||||||
|
|
||||||
|
end subroutine
|
||||||
|
!------------------------------------------------------
|
||||||
|
|
||||||
|
end program
|
17
code/fortran/plplotting.f90
Normal file
17
code/fortran/plplotting.f90
Normal file
@ -0,0 +1,17 @@
|
|||||||
|
program plplotting
|
||||||
|
use plplot
|
||||||
|
implicit none
|
||||||
|
|
||||||
|
! Initializing the plotting package with a lot of
|
||||||
|
! default (and pertinent) values.
|
||||||
|
call plinit ()
|
||||||
|
|
||||||
|
! Sets up plotter environment for simple graphs
|
||||||
|
call plenv (-2.1, 2.1, -2.1, 2.1, 0, 0)
|
||||||
|
|
||||||
|
! Ends a plotting session, tidies up all the output
|
||||||
|
! files,switches interactive devices back into text
|
||||||
|
! mode and frees up any memory that was allocated.
|
||||||
|
call plend ()
|
||||||
|
|
||||||
|
end program
|
@ -5,7 +5,7 @@
|
|||||||
% Décembre, ça n'avance pas beaucoup...
|
% Décembre, ça n'avance pas beaucoup...
|
||||||
%
|
%
|
||||||
|
|
||||||
\usepackage[francais]{babel}
|
\usepackage[french]{babel}
|
||||||
\usepackage[utf8]{inputenc}
|
\usepackage[utf8]{inputenc}
|
||||||
\usepackage{xspace}
|
\usepackage{xspace}
|
||||||
\usepackage{makeidx}
|
\usepackage{makeidx}
|
||||||
@ -21,12 +21,12 @@
|
|||||||
\makeindex
|
\makeindex
|
||||||
|
|
||||||
\setlength \parindent {2em}
|
\setlength \parindent {2em}
|
||||||
\setlength \parskip {0.3333333em} % XXX
|
\setlength \parskip {0.33em} % XXX
|
||||||
|
|
||||||
%------ 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}
|
||||||
@ -50,7 +50,8 @@
|
|||||||
% ==============================================================
|
% ==============================================================
|
||||||
\chapter{Introduction}
|
\chapter{Introduction}
|
||||||
|
|
||||||
Un nouveau nouvel ouvrage, en vrac, complètement coronavraqué.
|
Un nouveau nouvel ouvrage, en vrac.
|
||||||
|
|
||||||
Des notes informelles sur l'utilisation
|
Des notes informelles sur l'utilisation
|
||||||
d'un ordinateur moderne, vous allez en avoir vraiment beaucoup.
|
d'un ordinateur moderne, vous allez en avoir vraiment beaucoup.
|
||||||
Mais elles sont en vrac, et surtout, elles sont reprises
|
Mais elles sont en vrac, et surtout, elles sont reprises
|
||||||
@ -141,7 +142,7 @@ en ligne sur le site du Tetalab. Your mileage may vary\dots
|
|||||||
% \input{chap/astronomie}
|
% \input{chap/astronomie}
|
||||||
% \input{chap/MINITEL}
|
% \input{chap/MINITEL}
|
||||||
% \input{chap/Raspberry}
|
% \input{chap/Raspberry}
|
||||||
\input{chap/Fedora}
|
% \input{chap/Fedora}
|
||||||
% \input{chap/IPv6}
|
% \input{chap/IPv6}
|
||||||
\input{chap/threads}
|
\input{chap/threads}
|
||||||
\input{chap/IPC}
|
\input{chap/IPC}
|
||||||
|
Loading…
Reference in New Issue
Block a user