Programmation, Fortran, programmation modulaire, programmation générique, langage informatique, simulation de trafic routier, calcul scientifique, calcul numérique
Le projet propose de simuler numériquement l'évolution du trafic sur une route, et de mettre en évidence différents régimes de circulation, notamment la formation de bouchons.
Il y a plusieurs méthodes pour modéliser la circulation routière. La méthode proposée dans ce projet consiste à discrétiser la route en cases (comme pour le jeu des petits chevaux) et à placer sur ces cases un certain nombre de véhicules. [...]
[...] Programmation - Projet de simulation de trafic routier en langage Fortran Instructions de compilations : g95 *.f90 g95 proj *.f90 Sources : Name : types.f90 Author : Version : 1.0 Copyright : Description : Module contenant les types dérivés MODULE types IMPLICIT NONE Définition du type dérivé "vehicule" TYPE vehicule INTEGER pos numéro de la case sur laquelle se trouve le véhicule INTEGER vit vitesse END TYPE vehicule Définition du type dérivé "route" TYPE route INTEGER n_max longueur de la route INTEGER v_max vitesse maximale autorisée sur la route INTEGER n_v nombre de véhicules en circulation sur la route TYPE(vehicule), DIMENSION(:), ALLOCATABLE tab_v tableau dynamique de véhicules END TYPE route END MODULE types Name : procedures.f90 Author : Version : 1.0 Copyright : Description : Module contenant les procédures (fonctions et sub-routines) MODULE procedures USE types IMPLICIT NONE CONTAINS FONCTIONS SUBROUTINES Sous-programme permettant d'afficher l'état d'une route SUBROUTINE affichage(r, l_clear) TYPE(route), INTENT(IN) r LOGICAL, INTENT(IN) l_clear CHARACTER(1), DIMENSION(r%n_max) tableau_vehicule tableau contenant des lettres pour chaque véhicule CHARACTER(LEN = r%n_max) aff_tableau tableau à afficher initialisation tableau de véhicule INTEGER pos_v DO i = r%n_max-1 tableau_vehicule(i) = ' ' END DO remplissage du tableau DO j = r%n_v pos_v = r%tab_v(j)%pos tableau_vehicule(pos_v) = ACHAR(j+64) END DO si l_clear vaut True on efface l'écran IF(l_clear) THEN CALL SYSTEM('clear') END IF affichage du tableau à l'écran aff_tableau = DO i = LEN(aff_tableau) aff_tableau(i:i) = tableau_vehicule(i-1) END DO PRINT aff_tableau ralentissement du programme CALL SYSTEM('sleep 0.1') END SUBROUTINE affichage Sous-programme permettant de mettre à jour les positions des véhicules par la règle de la phase 4 (progression) SUBROUTINE progression(r) TYPE(route), INTENT(INOUT) r INTEGER i INTEGER pos, new_pos actuelle et nouvelle position mise à jour des positions des véhicules DO i = r%n_v pos = r%tab_v(i)%pos new_pos = MODULO(pos + r%tab_v(i)%vit, r%n_max) r%tab_v(i)%pos = new_pos END DO END SUBROUTINE progression Sous-programme permettant de mettre à jour les vitesses des véhicules par la règle de la phase 1 (accélération) SUBROUTINE acceleration(r) TYPE(route), INTENT(INOUT) r INTEGER i INTEGER vit, new_vit actuelle et nouvelle vitesse mise à jour des positions des véhicules DO i = r%n_v vit = r%tab_v(i)%vit IF(vit 0 .AND. [...]
Source aux normes APA
Pour votre bibliographieLecture en ligne
avec notre liseuse dédiée !Contenu vérifié
par notre comité de lecture