Télécharger tcnma.eso

Retour à la liste

Numérotation des lignes :

tcnma
  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.  
  50. -INC PPARAM
  51. -INC CCOPTIO
  52. -INC SMLMOTS
  53. C
  54. C
  55. C- Lecture de la table INCO
  56. C
  57. TYPE = 'TABLE '
  58. CALL ACMO(MTAB1,'INCO',TYPE,MTAB2)
  59. IF (IERR.NE.0) RETURN
  60. C
  61. C- Récupération du LISTMOTS à l'indice 'LISTOPER' de la table EQEX
  62. C
  63. TYPE = 'LISTMOTS'
  64. CALL ACMO(MTAB1,'LISTOPER',TYPE,MLMOTS)
  65. IF (IERR.NE.0) RETURN
  66. SEGACT MLMOTS
  67. NBIND = MOTS(/2)
  68. IF (NBIND.GE.100) THEN
  69. INTERR(1) = 100
  70. CALL ERREUR(762)
  71. ENDIF
  72. C
  73. C- Recherche de l'ensemble des champs à mettre à jour via DFDT
  74. C
  75. DO 10 K=1,NBIND
  76. NOMA = MOTS(K)
  77. IF (NOMA(1:4).EQ.'DFDT') THEN
  78. IF (K.LT.10) THEN
  79. WRITE(NOMA2,FMT='(I1,A7)') K,NOMA(1:7)
  80. ELSE
  81. WRITE(NOMA2,FMT='(I2,A6)') K,NOMA(1:6)
  82. ENDIF
  83. TYPE = ' '
  84. CALL ACMO(MTAB1,NOMA2,TYPE,MTABLE)
  85. IF (TYPE.EQ.'TABLE') THEN
  86. C
  87. C- Récupération du nom de l'indice de la table INCO contenant
  88. C- le CHPOINT au temps courant.
  89. C
  90. TYPE = 'LISTMOTS'
  91. CALL ACMO(MTABLE,'LISTINCO',TYPE,MLMOT1)
  92. IF (IERR.NE.0) RETURN
  93. SEGACT MLMOT1
  94. NOMINC = MLMOT1.MOTS(1)
  95. SEGDES MLMOT1
  96. C
  97. C- Récupération du pointeur du CHPOINT dans la table INCO.
  98. C
  99. TYPE = 'CHPOINT '
  100. CALL ACMO(MTAB2,NOMINC,TYPE,MCHPI)
  101. IF (IERR.NE.0) RETURN
  102. C
  103. C- Caractérisation de la syntaxe de DFDT : le champoint contenant
  104. C- les valeurs de l'inconnue au pas de temps précédant se trouve
  105. C- ISYNT =1 -> Dans la table DFDT
  106. C- ISYNT =2 -> Dans la table INCO
  107. C
  108. TYPE = ' '
  109. CALL ACMO(MTABLE,'ARG2',TYPE,MCHPN)
  110. IF (IERR.NE.0) RETURN
  111. IF (TYPE.EQ.'CHPOINT ') THEN
  112. ISYNT = 1
  113. ELSEIF (TYPE.EQ.'MOT ') THEN
  114. ISYNT = 2
  115. CALL ACMM(MTABLE,'ARG2',NOM)
  116. IF (IERR.NE.0) RETURN
  117. TYP2 = 'CHPOINT '
  118. CALL ACMO(MTAB2,NOM,TYP2,MCHPN)
  119. IF (IERR.NE.0) RETURN
  120. ELSE
  121. MOTERR( 1: 8) = NOMA
  122. MOTERR( 9:16) = 'ARG2 '
  123. MOTERR(17:30) = 'CHPOINT ou MOT'
  124. CALL ERREUR(763)
  125. RETURN
  126. ENDIF
  127. C
  128. C- Duplication du CHPOINT contenant l'inconnue au temps courant
  129. C
  130. * gounand 07/12/2012 : dans TCRR, on change de stratégie et on crée un
  131. * chpoint tout neuf, cela permet d'éviter les appels à COPIER dans TCNM
  132. * et dans les procédures utilisateurs. On pourra aussi se référer au
  133. * pointeur pour préconditionner.
  134. * CALL ECROBJ('CHPOINT',MCHPI)
  135. * CALL COPIER
  136. * CALL LIROBJ('CHPOINT',MCHPOI,1,IRET)
  137. MCHPOI=MCHPI
  138. C
  139. C- Update du CHPOINT contenant l'inconnue au temps précédant
  140. C
  141. IF (ISYNT.EQ.1) THEN
  142. CALL ECMO(MTABLE,'ARG2',TYPE,MCHPOI)
  143. ELSE
  144. CALL ECMO(MTAB2,NOM,TYP2,MCHPOI)
  145. ENDIF
  146. ENDIF
  147. ENDIF
  148. 10 CONTINUE
  149. C
  150. C- Désactivation et ménage
  151. C
  152. SEGDES MLMOTS
  153. RETURN
  154. END
  155.  
  156.  
  157.  
  158.  
  159.  
  160.  

© Cast3M 2003 - Tous droits réservés.
Mentions légales