tcnma
C TCNMA SOURCE GOUNAND 12/12/10 21:15:11 7598 C----------------------------------------------------------------------- C Mise à jour des CHPOINTs à l'occasion du changement de pas de temps. C----------------------------------------------------------------------- C Les tables de sous type KIZX associées à l'opérateur DFDT permettent C d'effectuer la mise à jour. Pour chaque opérateur DFDT, selon la C syntaxe ayant été utilisée C 1) si l'objet pointé à l'indice ARG2 de la table associée à C l'opérateur DFDT considéré est un CHPOINT on l'update ou C 2) on récupere à l'indice ARG2 de la table associée à DFDT le nom C associé à l'inconnue à updater dans la table INCO et on update le C CHPOINT dans INCO. C C--------------------------- C Phrase d'appel (GIBIANE) : C--------------------------- C C TCNM TAB1 ; C C------------------------ C Opérandes et résultat : C------------------------ C C TAB1 : TABLE de sous type EQEX contenant l'ensemble des données pour C la modélisation. C C---------------------------- C Indices de table modifiés : C---------------------------- C C Indice ARG2 des tables DFDT si ISYNT=1. C Indices de la table INCO alias du nom des inconnues à traiter sinon. C C---------------------- C Variables principales C---------------------- C C ISYNT : Flag indiquant le type de syntaxe utilisé C MTAB1 : Pointeur vers la table de sous type EQEX C MTAB2 : Pointeur vers la table INCO C MTABLE : Pointeur vers une table associée à un opérateur (DFDT...) C C----------------------------------------------------------------------- IMPLICIT INTEGER(I-N) IMPLICIT REAL*8 (A-H,O-Z) CHARACTER*8 NOMI,TYPE,NOMINC,TYP2,NOM,NOMA,NOMA2 C -INC PPARAM -INC CCOPTIO -INC SMLMOTS C C C- Lecture de la table INCO C TYPE = 'TABLE ' IF (IERR.NE.0) RETURN C C- Récupération du LISTMOTS à l'indice 'LISTOPER' de la table EQEX C TYPE = 'LISTMOTS' IF (IERR.NE.0) RETURN SEGACT MLMOTS IF (NBIND.GE.100) THEN INTERR(1) = 100 ENDIF C C- Recherche de l'ensemble des champs à mettre à jour via DFDT C DO 10 K=1,NBIND IF (NOMA(1:4).EQ.'DFDT') THEN IF (K.LT.10) THEN WRITE(NOMA2,FMT='(I1,A7)') K,NOMA(1:7) ELSE WRITE(NOMA2,FMT='(I2,A6)') K,NOMA(1:6) ENDIF TYPE = ' ' IF (TYPE.EQ.'TABLE') THEN C C- Récupération du nom de l'indice de la table INCO contenant C- le CHPOINT au temps courant. C TYPE = 'LISTMOTS' IF (IERR.NE.0) RETURN SEGACT MLMOT1 SEGDES MLMOT1 C C- Récupération du pointeur du CHPOINT dans la table INCO. C TYPE = 'CHPOINT ' IF (IERR.NE.0) RETURN C C- Caractérisation de la syntaxe de DFDT : le champoint contenant C- les valeurs de l'inconnue au pas de temps précédant se trouve C- ISYNT =1 -> Dans la table DFDT C- ISYNT =2 -> Dans la table INCO C TYPE = ' ' IF (IERR.NE.0) RETURN IF (TYPE.EQ.'CHPOINT ') THEN ISYNT = 1 ELSEIF (TYPE.EQ.'MOT ') THEN ISYNT = 2 IF (IERR.NE.0) RETURN TYP2 = 'CHPOINT ' IF (IERR.NE.0) RETURN ELSE MOTERR( 1: 8) = NOMA MOTERR( 9:16) = 'ARG2 ' MOTERR(17:30) = 'CHPOINT ou MOT' RETURN ENDIF C C- Duplication du CHPOINT contenant l'inconnue au temps courant C * gounand 07/12/2012 : dans TCRR, on change de stratégie et on crée un * chpoint tout neuf, cela permet d'éviter les appels à COPIER dans TCNM * et dans les procédures utilisateurs. On pourra aussi se référer au * pointeur pour préconditionner. * CALL ECROBJ('CHPOINT',MCHPI) * CALL COPIER * CALL LIROBJ('CHPOINT',MCHPOI,1,IRET) MCHPOI=MCHPI C C- Update du CHPOINT contenant l'inconnue au temps précédant C IF (ISYNT.EQ.1) THEN ELSE ENDIF ENDIF ENDIF 10 CONTINUE C C- Désactivation et ménage C SEGDES MLMOTS RETURN END
© Cast3M 2003 - Tous droits réservés.
Mentions légales