opermu
C OPERMU SOURCE PASCAL 22/11/21 21:15:05 11502 SUBROUTINE OPERMU C_______________________________________________________________________ C C multiplie un champ par point par un objet rigidite. C multiplie un listreel par un flottant (ou un entier) C multiplie un listreel par un listreel terme a terme. C multiplie un objet rigidite par un flottant (ou 1 entier) C multiplie un champs par elemt par un flottant (ou 1 entier) C multiplie un champ par element par un autre champ par element C multiplie un champ par element par une evolution C multiplie un champ par point par un autre champ par point C multiplie un champ par point par un flottant (ou 1 entier) C multiplie un champ par point par une evolution C multiplie 2 nombres (flottant ou entier) C multiplie un point par un nombre C multiplie un objet evolutio (ordonnees) par un flottant C (ou un entier) C multiplie un objet evolutio par un objet evolutio C multiplie une table soustype vecteur par un reel C multiplie une table soustype LIAISONS_STATIQUES ou C BASE_DE_MODES par une rigidite C C passage aux nouveaux MCHAML par jm campenon le 29 10 90 C C_______________________________________________________________________ C IMPLICIT INTEGER(I-N) IMPLICIT REAL*8 (A-H,O-Z) -INC PPARAM -INC CCOPTIO -INC SMCOORD -INC SMLENTI -INC SMLREEL -INC SMTABLE -INC SMLMOTS PARAMETER (NCLEVO = 2) C CHARACTER*4 CLEVO(NCLEVO) INTEGER ICH1 INTEGER IOPERA INTEGER IARGU INTEGER I1 REAL*8 FLO INTEGER ICHR INTEGER IRET DATA CLEVO/'ABSC','ORDO'/ ICH1 = 0 IOPERA = 0 IARGU = 0 I1 = 0 FLO = 0.D0 ICHR = 0 IRET = 0 C_______________________________________________________________________ C C produit de deux CHPOINT C_______________________________________________________________________ C IF (IRETOU.EQ.0) GOTO 1 IF (IRETOU.EQ.0) THEN CALL REFUS GOTO 1 ENDIF IF ( IRETOU .EQ. 1) THEN IF (IERR .NE. 0) RETURN IF (IERR .NE. 0) RETURN IF (IERR .NE. 0) RETURN IF(IRETOU .EQ. 1)THEN SEGACT,MLREE1 ENDIF SEGACT,MLMOT1,MLMOT2,MLMOT3 ELSE ENDIF IF (IERR .NE. 0) RETURN IF (IRET.NE.0) THEN ENDIF RETURN C 1 CONTINUE IF (IERR .NE. 0) RETURN C_______________________________________________________________________ C C multiplication de deux ENTIER C_______________________________________________________________________ C IF (IRETOU.EQ.0) GOTO 2 IF (IRETOU.EQ.0) THEN CALL REFUS GOTO 2 ENDIF C Cas du produit de 2 ENTIERS RETURN C 2 CONTINUE IF (IERR .NE. 0) RETURN C_______________________________________________________________________ C C multiplication de deux FLOTTANT C_______________________________________________________________________ C IF (IRETOU.EQ.0) GOTO 3 IF (IRETOU.EQ.0) THEN CALL REFUS GOTO 3 ENDIF RETURN C 3 CONTINUE IF (IERR .NE. 0) RETURN C_______________________________________________________________________ C C produit d'un FLOTTANT par un POINT C_______________________________________________________________________ C IF (IRETOU.EQ.0) GOTO 4 IF (IRETOU.EQ.0) THEN CALL REFUS GOTO 4 ENDIF SEGACT MCOORD*MOD nbpts=nbpts+1 segadj mcoord DO ILDIM=1,IDIM+1 XCOOR((nbpts-1)*(idim+1)+ildim)= > XCOOR((IPT-1)*(IDIM+1)+ILDIM)*FLO1 ENDDO IRET=nbpts SEGACT MCOORD*NOMOD RETURN C 4 CONTINUE IF (IERR .NE. 0) RETURN C_______________________________________________________________________ C C produit d'un CHPOINT par un FLOTTANT C_______________________________________________________________________ C IF (IRETOU.EQ.0) GOTO 5 IF (IRETOU.EQ.0) THEN CALL REFUS GOTO 5 ENDIF C IOPERA= 2 pour l'operation PRODUIT C IARGU = 2 pour FLOTTANT IOPERA= 2 IARGU = 2 I1 = 0 IF(IRET.NE.0) THEN ELSE ENDIF RETURN C 5 CONTINUE IF (IERR .NE. 0) RETURN C_______________________________________________________________________ C C produit d'un MCHAML par un FLOTTANT C_______________________________________________________________________ C IF (IRETOU.EQ.0) GOTO 6 IF (IRETOU.EQ.0) THEN CALL REFUS GOTO 6 ENDIF C IOPERA= 2 pour l'operation PRODUIT C IARGU = 2 pour FLOTTANT IOPERA= 2 IARGU = 2 I1 = 0 ICHR = 0 IRET = 0 IF(IRET.NE.0) THEN ELSE ENDIF RETURN C 6 CONTINUE IF (IERR .NE. 0) RETURN C_______________________________________________________________________ C C produit d'une RIGIDITE par un FLOTTANT C_______________________________________________________________________ C IF (IRETOU.EQ.0) GOTO 7 IF (IRETOU.EQ.0) THEN CALL REFUS GOTO 7 ENDIF RETURN C 7 CONTINUE IF (IERR .NE. 0) RETURN C_______________________________________________________________________ C C produit d'un MATRIK par un FLOTTANT C_______________________________________________________________________ C IF (IRETOU.EQ.0) GOTO 71 IF (IRETOU.EQ.0) THEN CALL REFUS GOTO 71 ENDIF RETURN C 71 CONTINUE IF (IERR .NE. 0) RETURN C_______________________________________________________________________ C C produit d'une RIGIDITE par un CHPOINT C_______________________________________________________________________ C IF (IRETOU.EQ.0) GOTO 8 IF (IRETOU.EQ.0) THEN CALL REFUS GOTO 8 ENDIF RETURN C 8 CONTINUE IF (IERR .NE. 0) RETURN C_______________________________________________________________________ C C produit d'un MATRIK par un CHPOINT C_______________________________________________________________________ C IF (IRETOU.EQ.0) GOTO 9 IF (IRETOU.EQ.0) THEN CALL REFUS GOTO 9 ENDIF RETURN C 9 CONTINUE IF (IERR .NE. 0) RETURN C_______________________________________________________________________ C C produit de deux MCHAML C_______________________________________________________________________ C IF (IRETOU.EQ.0) IPMODL=0 IF (IRETOU.EQ.0) GOTO 10 IF (IRETOU.EQ.0) THEN CALL REFUS GOTO 10 ENDIF C LMOT1 = -1 LMOT2 = -1 LMOT3 = -1 ILREE = -1 IF ( IRETOU .EQ. 1) THEN IF (IERR .NE. 0) RETURN IF (IERR .NE. 0) RETURN IF (IERR .NE. 0) RETURN ENDIF C IF(IERR.NE.0) RETURN C IF (IPCHMU.NE.0) THEN ELSE ENDIF RETURN 10 CONTINUE IF (IERR .NE. 0) RETURN C_______________________________________________________________________ C C produit ENTIER EVOLUTION C_______________________________________________________________________ C IF (IRETOU.EQ.0) GOTO 101 IF (IRETOU.EQ.0) THEN CALL REFUS GOTO 101 ENDIF C IOPERA= 2 pour l'operation PRODUIT C IARGU = 1 pour ENTIER IOPERA= 2 IARGU = 1 FLO = 0.D0 ICLE = 0 IF (ICLE.EQ.0) ICLE = 2 IF(IRET.NE.0) THEN ELSE ENDIF RETURN C 101 CONTINUE IF (IERR .NE. 0) RETURN C_______________________________________________________________________ C C produit FLOTTANT EVOLUTION C_______________________________________________________________________ C IF (IRETOU.EQ.0) GOTO 11 IF (IRETOU.EQ.0) THEN CALL REFUS GOTO 11 ENDIF C IOPERA= 2 pour l'operation PRODUIT C IARGU = 2 pour FLOTTANT IOPERA= 2 IARGU = 2 I1 = 0 ICLE = 0 IF (ICLE.EQ.0) ICLE = 2 IF(IRET.NE.0) THEN ELSE ENDIF RETURN C 11 CONTINUE IF (IERR .NE. 0) RETURN C_______________________________________________________________________ C C produit de deux EVOLUTIO C_______________________________________________________________________ C IF (IRETOU.EQ.0) GOTO 12 IF (IRETOU.EQ.0) THEN CALL REFUS GOTO 12 ENDIF RETURN C 12 CONTINUE IF (IERR .NE. 0) RETURN C_______________________________________________________________________ C C produit FLOTTANT LISTREEL C_______________________________________________________________________ C IF (IRETOU.EQ.0) GOTO 13 IF (IRETOU.EQ.0) THEN CALL REFUS GOTO 13 ENDIF MLREEL=ICH1 SEGACT,MLREEL C IOPERA= 2 pour l'operation PRODUIT C IARGU = 2 pour FLOTTANT IOPERA= 2 IARGU = 2 I1 = 0 IF(IRET.NE.0) THEN MLREEL=ICHR SEGACT,MLREEL*NOMOD ELSE ENDIF RETURN C 13 CONTINUE IF (IERR .NE. 0) RETURN C_______________________________________________________________________ C C produit CHPOINT EVOLUTION C_______________________________________________________________________ C IF (IRETOU.EQ.0) GOTO 14 IF (IRETOU.EQ.0) THEN CALL REFUS GOTO 14 ENDIF IF (IRETOU.NE.0) THEN ENDIF RETURN C 14 CONTINUE IF (IERR .NE. 0) RETURN C_______________________________________________________________________ C C produit MCHAML EVOLUTION C_______________________________________________________________________ C IF (IRETOU.EQ.0) GOTO 15 IF (IRETOU.EQ.0) THEN CALL REFUS GOTO 15 ENDIF C IF (IRETOU.NE.0) THEN ENDIF RETURN C 15 CONTINUE IF (IERR .NE. 0) RETURN C_______________________________________________________________________ C C produit LISTREEL LISTREEL C_______________________________________________________________________ C IF(IRETOU.EQ.0) GOTO 16 MLREEL=ICH1 SEGACT,MLREEL*NOMOD IF (IRETOU.EQ.0) THEN CALL REFUS GOTO 16 ENDIF MLREEL=ICHR SEGACT,MLREEL*NOMOD C IOPERA= 2 pour l'operation PRODUIT C IARGU = 0 IOPERA= 2 IARGU = 0 I1 = 0 FLO = 0.D0 IF(IRET.NE.0) THEN MLREEL=ICHR SEGACT,MLREEL*NOMOD ELSE ENDIF RETURN C 16 CONTINUE IF (IERR .NE. 0) RETURN C_______________________________________________________________________ C C produit LISTENTI ENTIER C_______________________________________________________________________ C IF(IRETOU.EQ.0) GOTO 17 SEGACT,MLENT1 IF (IRETOU.EQ.0) THEN CALL REFUS GOTO 17 ENDIF JG=MLENT1.LECT(/1) SEGINI,MLENTI DO 160 I=1,JG LECT(I)=MLENT1.LECT(I)*IVA 160 CONTINUE SEGACT,MLENTI*NOMOD RETURN C 17 CONTINUE IF (IERR .NE. 0) RETURN C_______________________________________________________________________ C C produit LISTENTI FLOTTANT C_______________________________________________________________________ C IF(IRETOU.EQ.0) GOTO 18 SEGACT,MLENT1 IF (IRETOU.EQ.0) THEN CALL REFUS GOTO 18 ENDIF JG=MLENT1.LECT(/1) SEGINI,MLREEL DO 170 I=1,JG 170 CONTINUE SEGACT,MLREEL*NOMOD RETURN C 18 CONTINUE IF (IERR .NE. 0) RETURN C_______________________________________________________________________ C C produit LISTENTI LISTENTI C_______________________________________________________________________ C IF(IRETOU.EQ.0) GOTO 19 SEGACT,MLENT1 IF (IRETOU.EQ.0) THEN CALL REFUS GOTO 19 ENDIF SEGACT,MLENT2 JG=MLENT2.LECT(/1) IF(MLENT1.LECT(/1).NE.JG) THEN RETURN ENDIF SEGINI MLENTI DO 180 I=1,JG LECT(I)=MLENT1.LECT(I)*MLENT2.LECT(I) 180 CONTINUE SEGACT,MLENTI*NOMOD RETURN C 19 CONTINUE IF (IERR .NE. 0) RETURN C_______________________________________________________________________ C C produit TABLE-VECTEUR FLOTTANT C_______________________________________________________________________ C IF(IRETOU.EQ.0) GOTO 20 IF (IRETOU.EQ.0) THEN CALL REFUS GOTO 20 ENDIF SEGINI,MTABLE=MTAB1 DO 200 I=1,MLOTAB IF (MTABTV(I).EQ.'FLOTTANT') THEN RMTABV(I)=RMTABV(I)*FLO1 ELSE IF (MTABTV(I).EQ.'ENTIER ') THEN RMTABV(I)=REAL(MTABIV(I))*FLO1 MTABTV(I)='FLOTTANT' ENDIF 200 CONTINUE SEGDES,MTABLE,MTAB1 RETURN C 20 CONTINUE IF (IERR .NE. 0) RETURN C_______________________________________________________________________ C C produit d'une RIGIDITE par un CHPOINT C_______________________________________________________________________ C IF (IRETOU.EQ.0) GOTO 21 IF (IRETOU.EQ.0) THEN CALL REFUS GOTO 21 ENDIF RETURN C 21 CONTINUE IF (IERR .NE. 0) RETURN C_______________________________________________________________________ C C produit table-liaisons_statiques RIGIDITE C_______________________________________________________________________ C IF(IRETOU.EQ.0) GOTO 22 IF (IRETOU.EQ.0) THEN CALL REFUS GOTO 22 ENDIF RETURN C 22 CONTINUE IF (IERR .NE. 0) RETURN C_______________________________________________________________________ C C produit LISTREEL LISTENTI C_______________________________________________________________________ C IF(IRETOU.EQ.0) GOTO 23 SEGACT,MLREE1 IF (IRETOU.EQ.0) THEN CALL REFUS GOTO 23 ENDIF SEGACT,MLENT1 JG=MLENT1.LECT(/1) RETURN ENDIF SEGINI,MLREEL DO 220 I=1,JG 220 CONTINUE SEGACT,MLREEL*NOMOD RETURN 23 CONTINUE IF (IERR .NE. 0) RETURN C_______________________________________________________________________ C C produit ENTIER NUAGE C_______________________________________________________________________ C IF (IRETOU.EQ.0) GOTO 24 IF (IRETOU.EQ.0) THEN CALL REFUS GOTO 24 ENDIF IF (IERR.NE.0) RETURN C IOPERA= 2 pour l'operation PRODUIT C IARGU = 1 pour ENTIER IOPERA= 2 IARGU = 1 FLO = 0.D0 C Lecture du nom de la composante IF (IERR.NE.0) RETURN IF (IERR.NE.0) RETURN IF(IRET.NE.0) THEN ELSE C ERREUR 5 car erreurs gerees dans OPNUA1 ENDIF RETURN 24 CONTINUE IF (IERR .NE. 0) RETURN C_______________________________________________________________________ C C produit FLOTTANT NUAGE C_______________________________________________________________________ C IF (IRETOU.EQ.0) GOTO 30 IF (IRETOU.EQ.0) THEN CALL REFUS GOTO 30 ENDIF IF (IERR.NE.0) RETURN C IOPERA= 2 pour l'operation PRODUIT C IARGU = 1 pour ENTIER IOPERA= 2 IARGU = 2 I1 = 0 C Lecture du nom de la composante IF (IERR.NE.0) RETURN IF (IERR.NE.0) RETURN IF(IRET.NE.0) THEN ELSE C ERREUR 5 car erreurs gerees dans OPNUA1 ENDIF RETURN C_______________________________________________________________________ C C ON A DONC RIEN TROUVE POUR FAIRE L OPERATION C_______________________________________________________________________ C 30 CONTINUE IF (IERR .NE. 0) RETURN IF(IRETOU.NE.0) THEN IF (IRETOU.EQ.0) MOTERR(9:16) = ' ???? ' ELSE ENDIF RETURN END
© Cast3M 2003 - Tous droits réservés.
Mentions légales