Visualiser les détails du résultat

IdentifiantProjetCatégorieVisibilitéDernière mise à jour
0001278SICFortran Régulationpublic2016-10-21 09:32
RapporteurdorchAssigné àdorch 
PrioritéurgenteImpactbloquantReproductibilitétoujours
Statut ferméRésolutioncorrigé 
Version du produit 
Version ciblée5.37aRésolu dans la version5.37a 
Résumé0001278: Erreurs sur utilisations concurrentes de BOLST et PRINT
DescriptionSur 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.
BalisesAucune balise n'est associée.
Temps projeté (jours)

Activités

dorch

2016-10-19 18:28

administrateur   ~0001355

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

dorch

2016-10-21 09:32

administrateur   ~0001356

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

Historique du bogue

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