coli
C COLI SOURCE BP208322 15/06/26 21:15:04 8562 SUBROUTINE COLI C======================================================================= C C COMBINAISON LINEAIRE DE CHPOINT OU DE MCHAML C C C OPERATEUR COLI : OBJ = | FLOT1*OBJ1 + FLOT2*OBJ2 + ...... | C | LCHPO LISTREEL | C | TABLE LISTREEL | C C OPERATION POSSIBLE SUR DES CHPOINTS ET DES CHAMELEMS C (sauf dans le cas LISTCHPO) C C - creation : ? C - PASSAGE AUX NOUVEAUX MCHAMLS PAR JM CAMPENON LE 01/91 C - OPERANDES TABLE ET LISTREEL INCORPORES LE 02/98 PAR MO C - LA VERSION DU 02/98 LAISSAIT TROP DE LIBERTE SUR LES INDICES DE C LA TABLE.ON NE PERMET DORENAVANT QUE DES INDICES DE TYPE ENTIER C ALLANT DE 1 a N PAR PAS DE 1 03/98 PAR MO C - extension aux LISTCHPO, 20/05/2015, Benoit Prabel C - extension aux Table de listreel, 25/06/2015, Benoit Prabel C C======================================================================= * IMPLICIT INTEGER(I-N) IMPLICIT REAL*8 (A-H,O-Z) -INC PPARAM -INC CCOPTIO -INC SMTABLE -INC SMLREEL -INC SMLCHPO SEGMENT ITA1(0) SEGMENT ITAN(0) * SEGMENT ITA2 REAL*8 TA2(0) ENDSEGMENT * CHARACTER*(8) ITYPE,ITCHPO,ITCHAM,ITTABL,ITYPIND,ITLCHP,ITLREE REAL*8 RET DATA ITCHPO/'CHPOINT '/ DATA ITCHAM/'MCHAML '/ DATA ITTABL/'TABLE '/ DATA ITLCHP/'LISTCHPO'/ DATA ITLREE/'LISTREEL'/ ICHP=0 * NA=nombre d elements NA=0 * C======================================================================= C Tentatives de Lecture d'objets permis en entree C======================================================================= C CHPOINT: IF(IRETOU.EQ.0) GOTO 2 ITYPE=ITCHPO GOTO 10 * C MCHAML: IF(IRETOU.EQ.0) GOTO 4 ITYPE=ITCHAM GOTO 10 C TABLE et LISTREEL : IF(IRETOU.NE.0) GOTO 40 C LISTCHPO et LISTREEL : IF(IRETOU.NE.0) GOTO 60 C PAS D OPERANDE CORRECT TROUVE IF(IRETOU.NE.0) THEN ELSE ENDIF RETURN C======================================================================= C Cas CHPOINT et MCHAML (+flottant) C======================================================================= 10 ICHP=1 SEGINI ITA1 SEGINI ITA2 NA=1 ITA1(**)=IRET IF(IERR.NE.0) GOTO 5001 TA2(**)=RET c on boucle jusqu a ne plus lire de champ ITYPE, puis goto 100 IF(IRETOU.EQ.0) GOTO 100 NA=NA+1 ITA1(**)=IRET IF(IERR.NE.0) GOTO 5001 TA2(**)=RET GOTO 11 C======================================================================= C Cas TABLE (+listreel) C======================================================================= 40 MTABLE=IRET SEGACT MTABLE NB=MLOTAB **** + listreel IF(IRETOU.EQ.0) GOTO 1 MLREEL= IRETR SEGACT MLREEL **** table de LISTREELs ou de CHPOINT ou de MCHAML SEGINI ITA1 SEGINI ITA2 NA = 0 ITYPE=' ' DO 50 IB=1,NB IF(MTABTI(IB).NE.'ENTIER ') GOTO 50 IF(NA.EQ.0) ITYPE=MTABTV(IB) IF(MTABTV(IB).NE.ITYPE) THEN SEGSUP ITA1,ITA2 SEGDES MTABLE,MLREEL WRITE(ioimp,*) 'Objet de type',MTABTV(IB), & ' au lieu de ',ITYPE,' attendu' RETURN ENDIF c ici, tout se passe bien NA = NA + 1 IJ = MTABII(IB) C extraction des LISTREELs ou de CHPOINT ou de MCHAML ITA1(**)=MTABIV(IB) C extraction des reels SEGSUP ITA1,ITA2 SEGDES MLREEL,MTABLE WRITE(ioimp,*) 'Indice',IJ, & ' au dela de la dimesnion du listreel' RETURN ENDIF 50 CONTINUE SEGDES MTABLE,MLREEL **** type d'objets admis ou pas ? IF(ITYPE.eq.ITLREE.OR.ITYPE.eq.ITCHPO.OR.ITYPE.eq.ITCHAM) THEN ICHP=1 GOTO 100 ELSE SEGSUP ITA1,ITA2 WRITE(ioimp,*) 'Type d objet interdit !' RETURN ENDIF C======================================================================= C Cas LISTCHPO (+listreel) C======================================================================= 60 MLCHPO=IRET SEGACT MLCHPO NA=ICHPOI(/1) ITYPE=ITCHPO ICHP=1 c lecture du listreel des coefficients IF(IRETOU.EQ.0) THEN SEGDES,MLCHPO GOTO 1 ENDIF MLREEL= IRETR SEGACT MLREEL * test dime de tab = dime listreel SEGDES MLREEL SEGDES MLCHPO RETURN ENDIF SEGINI ITA1 SEGINI ITA2 DO 61 IJ=1,NA C extraction des champs ITA1(**)=ICHPOI(IJ) C extraction des reels 61 CONTINUE SEGDES MLCHPO SEGDES MLREEL C GOTO 100 C======================================================================= C Calcul effectif de la combinaison lineaire C======================================================================= 100 CONTINUE c write(ioimp,*) 'ITYPE=',ITYPE c write(ioimp,*) 'ITA1=',(ITA1(iou),iou=1,NA) c write(ioimp,*) ' TA2=',(TA2(iou),iou=1,NA) *bp SEGDES ITA1,ITA2 *bp IF(ITYPE.EQ.ITCHPO) CALL COMBIL(ITA1,ITA2,IRET) *bp IF(ITYPE.EQ.ITCHAM) CALL COMBYL(ITA1,ITA2,IRET) IF(IERR.NE.0) GOTO 5001 * * Ecriture de l'objet resultat IF(ICHP.EQ.1) THEN ENDIF * Fin normale 5001 CONTINUE SEGSUP ITA1 SEGSUP ITA2 * RETURN END
© Cast3M 2003 - Tous droits réservés.
Mentions légales