Download tcnma.eso

Back to the list

   1 : C TCNMA     SOURCE    GOUNAND   12/12/10    21:15:11     7598           
   2 :       SUBROUTINE TCNMA(MTAB1)
   3 : C-----------------------------------------------------------------------
   4 : C Mise à jour des CHPOINTs à l'occasion du changement de pas de temps.
   5 : C-----------------------------------------------------------------------
   6 : C Les tables de sous type KIZX associées à l'opérateur DFDT permettent
   7 : C d'effectuer la mise à jour. Pour chaque opérateur DFDT, selon la
   8 : C syntaxe ayant été utilisée
   9 : C 1) si l'objet pointé à l'indice ARG2 de la table associée à
  10 : C    l'opérateur DFDT considéré est un CHPOINT on l'update ou
  11 : C 2) on récupere à l'indice ARG2 de la table associée à DFDT le nom
  12 : C    associé à l'inconnue à updater dans la table INCO et on update le
  13 : C    CHPOINT dans INCO.
  14 : C
  15 : C---------------------------
  16 : C Phrase d'appel (GIBIANE) :
  17 : C---------------------------
  18 : C
  19 : C TCNM TAB1 ;
  20 : C
  21 : C------------------------
  22 : C Opérandes et résultat :
  23 : C------------------------
  24 : C
  25 : C TAB1 : TABLE de sous type EQEX contenant l'ensemble des données pour
  26 : C        la modélisation.
  27 : C
  28 : C----------------------------
  29 : C Indices de table modifiés :
  30 : C----------------------------
  31 : C
  32 : C Indice ARG2 des tables DFDT si ISYNT=1.
  33 : C Indices de la table INCO alias du nom des inconnues à traiter sinon.
  34 : C
  35 : C----------------------
  36 : C Variables principales
  37 : C----------------------
  38 : C
  39 : C ISYNT  : Flag indiquant le type de syntaxe utilisé
  40 : C MTAB1  : Pointeur vers la table de sous type EQEX
  41 : C MTAB2  : Pointeur vers la table INCO
  42 : C MTABLE : Pointeur vers une table associée à un opérateur (DFDT...)
  43 : C
  44 : C-----------------------------------------------------------------------
  45 :       IMPLICIT INTEGER(I-N)
  46 :       IMPLICIT REAL*8 (A-H,O-Z)                 
  47 :       CHARACTER*8 NOMI,TYPE,NOMINC,TYP2,NOM,NOMA,NOMA2
  48 : C
  49 : -INC CCOPTIO
  50 : -INC SMLMOTS
  51 : C
  52 : C
  53 : C- Lecture de la table INCO
  54 : C
  55 :       TYPE  = 'TABLE   '
  55 :       CALL ACMO(MTAB1,'INCO',TYPE,MTAB2)
  56 :       IF (IERR.NE.0) RETURN
  57 : C
  58 : C- Récupération du LISTMOTS à l'indice 'LISTOPER' de la table EQEX
  59 : C
  60 :       TYPE = 'LISTMOTS'
  60 :       CALL ACMO(MTAB1,'LISTOPER',TYPE,MLMOTS)
  61 :       IF (IERR.NE.0) RETURN
  62 :       SEGACT MLMOTS
  63 :       NBIND = MOTS(/2)
  64 :       IF (NBIND.GE.100) THEN
  65 :           INTERR(1) = 100
  65 :           CALL ERREUR(762)
  66 :       ENDIF
  67 : C
  68 : C- Recherche de l'ensemble des champs à mettre à jour via DFDT
  69 : C
  70 :       DO 10 K=1,NBIND
  71 :          NOMA = MOTS(K)
  72 :          IF (NOMA(1:4).EQ.'DFDT') THEN
  73 :             IF (K.LT.10) THEN
  74 :                WRITE(NOMA2,FMT='(I1,A7)') K,NOMA(1:7)
  75 :             ELSE
  76 :                WRITE(NOMA2,FMT='(I2,A6)') K,NOMA(1:6)
  77 :             ENDIF
  78 :             TYPE = '        '
  78 :             CALL ACMO(MTAB1,NOMA2,TYPE,MTABLE)
  79 :             IF (TYPE.EQ.'TABLE') THEN
  80 : C
  81 : C- Récupération du nom de l'indice de la table INCO contenant
  82 : C- le CHPOINT au temps courant.
  83 : C
  84 :                TYPE = 'LISTMOTS'
  84 :                CALL ACMO(MTABLE,'LISTINCO',TYPE,MLMOT1)
  85 :                IF (IERR.NE.0) RETURN
  86 :                SEGACT MLMOT1
  87 :                NOMINC = MLMOT1.MOTS(1)
  88 :                SEGDES MLMOT1
  89 : C
  90 : C- Récupération du pointeur du CHPOINT dans la table INCO.
  91 : C
  92 :                TYPE = 'CHPOINT '
  92 :                CALL ACMO(MTAB2,NOMINC,TYPE,MCHPI)
  93 :                IF (IERR.NE.0) RETURN
  94 : C
  95 : C- Caractérisation de la syntaxe de DFDT : le champoint contenant
  96 : C- les valeurs de l'inconnue au pas de temps précédant se trouve
  97 : C-   ISYNT =1 -> Dans la table DFDT
  98 : C-   ISYNT =2 -> Dans la table INCO
  99 : C
 100 :                TYPE = '        '
 100 :                CALL ACMO(MTABLE,'ARG2',TYPE,MCHPN)
 101 :                IF (IERR.NE.0) RETURN
 102 :                IF (TYPE.EQ.'CHPOINT ') THEN
 103 :                   ISYNT = 1
 104 :                ELSEIF (TYPE.EQ.'MOT     ') THEN
 105 :                   ISYNT = 2
 105 :                   CALL ACMM(MTABLE,'ARG2',NOM)
 106 :                   IF (IERR.NE.0) RETURN
 107 :                   TYP2 = 'CHPOINT '
 107 :                   CALL ACMO(MTAB2,NOM,TYP2,MCHPN)
 108 :                   IF (IERR.NE.0) RETURN
 109 :                ELSE
 110 :                   MOTERR( 1: 8) = NOMA
 111 :                   MOTERR( 9:16) = 'ARG2    '
 112 :                   MOTERR(17:30) = 'CHPOINT ou MOT'
 112 :                   CALL ERREUR(763)
 113 :                   RETURN
 114 :                ENDIF
 115 : C
 116 : C- Duplication du CHPOINT contenant l'inconnue au temps courant
 117 : C
 118 : * gounand 07/12/2012 : dans TCRR, on change de stratégie et on crée un
 119 : * chpoint tout neuf, cela permet d'éviter les appels à COPIER dans TCNM
 120 : * et dans les procédures utilisateurs. On pourra aussi se référer au
 121 : * pointeur pour préconditionner.
 121 : *               CALL ECROBJ('CHPOINT',MCHPI)
 121 : *               CALL COPIER
 121 : *               CALL LIROBJ('CHPOINT',MCHPOI,1,IRET)
 122 :                MCHPOI=MCHPI
 123 : C
 124 : C- Update du CHPOINT contenant l'inconnue au temps précédant
 125 : C
 126 :                IF (ISYNT.EQ.1) THEN
 126 :                   CALL ECMO(MTABLE,'ARG2',TYPE,MCHPOI)
 127 :                ELSE
 127 :                   CALL ECMO(MTAB2,NOM,TYP2,MCHPOI)
 128 :                ENDIF
 129 :             ENDIF
 130 :          ENDIF
 131 :  10   CONTINUE
 132 : C
 133 : C- Désactivation et ménage
 134 : C
 135 :       SEGDES MLMOTS
 136 :       RETURN
 137 :       END                                                                       
 138 :  
 139 :  
 140 :  
 141 :  
 142 :  

© Cast3M 2003 - All rights reserved.
Disclaimer