Visualiser les détails du résultat
Identifiant | Projet | Catégorie | Visibilité | Date de soumission | Dernière mise à jour |
---|---|---|---|---|---|
0001278 | SIC | Fortran Régulation | public | 2016-10-19 18:19 | 2016-10-21 09:32 |
Rapporteur | dorch | Assigné à | dorch | ||
Priorité | urgente | Impact | bloquant | Reproductibilité | toujours |
Statut | fermé | Résolution | corrigé | ||
Version du produit | |||||
Version ciblée | 5.37a | Résolu dans la version | 5.37a | ||
Résumé | 0001278: Erreurs sur utilisations concurrentes de BOLST et PRINT | ||||
Description | Sur l'exemple Lez, il y a plus de 10 modules BOLST, si on utilise le module PRINT on a un comportement bizarre : Si le fichier REGULPRINT est présent : la simulation s'arrête avec le message suivant dans le LST : Problème de lecture sur le fichier LU=61 Chaine ne respectant pas le format déclaré=Y: 300. 0.0000 0.0000 Si le fichier est absent, la simulation se déroule mais les débits injectés par certains BOLST sont modifiés. | ||||
Balises | Aucune balise n'est associée. | ||||
Temps projeté (jours) | |||||
|
J'ai trouvé : BOLST ouvre des fichiers à partir de LU=50 PRINT ouvre des fichiers à partir de LU=60 S'il y a plus de 10 BOLST les numérotations se chevauchent et les écritures de PRINT viennent perturber les lectures des BOLST n°10 et suivants. TAF s'assurer d'avoir des numéros de fichiers qui ne se chevauchent pas. J'ai une routine (cf. ci-dessous) qui renvoie le premier n° de fichier libre à partir d'un n° de départ. On pourrait l'utiliser et stocker les numéros dans un tableau d'entier pour PRINT et BOLST. Par la même occasion, on pourrait scruter toutes les autres ouvertures de fichier des modules de régulation et utiliser cette même routine pour éviter tout problème dans le futur. !******************************************************************************* !> Get free file unit number to open a file !> @param iLu_max0 Max number used (100 by default) !> @see http://stackoverflow.com/questions/7876075/getting-free-unit-number-in-fortran !> @author David Dorchies !> @date 14/11/2014 !******************************************************************************* INTEGER FUNCTION GetFreeFileUnit (iLu_max0) IMPLICIT NONE INTEGER, INTENT(IN), OPTIONAL :: iLu_max0 INTEGER :: iLu, iLu_max, iIO LOGICAL bOpened IF(PRESENT(iLu_max0)) THEN iLu_max = iLu_max0 ELSE iLu_max = 10000 ENDIF DO iLu = iLu_max,10,-1 INQUIRE(UNIT=iLu, OPENED=bOpened, iostat=iIO) IF (iIO /= 0) CYCLE IF (.NOT. bOpened) EXIT ENDDO ! GetFreeFileUnit = iLu END FUNCTION GetFreeFileUnit |
|
Pas besoin de stocker les n° de fichier dans un tableau. Les régulateurs PRINT et BOLST ont un PARA chargé de mémoriser le ° du fichier ouvert |
Date de modification | Nom d’utilisateur | Champ | Changement |
---|---|---|---|
2016-10-19 18:19 | dorch | Nouveau bogue | |
2016-10-19 18:19 | dorch | Statut | nouveau => affecté |
2016-10-19 18:19 | dorch | Assigné à | => dorch |
2016-10-19 18:28 | dorch | Note ajoutée: 0001355 | |
2016-10-21 09:32 | dorch | Note ajoutée: 0001356 | |
2016-10-21 09:32 | dorch | Statut | affecté => fermé |
2016-10-21 09:32 | dorch | Résolution | ouvert => corrigé |
2016-10-21 09:32 | dorch | Résolu dans la version | => 5.37a |