tidep1
C TIDEP1 SOURCE PASCAL 20/11/13 21:15:18 10778 C $ IPTI7,IPCH2) C=============================================================== C appele par TIRE, la routine deplace un CHPOINT ou un MCHAML C suivant les consignes C en entree : T1, date d'evaluation C IPCH1, pointeur sur le champ a transformer C MOTYPE, mot 'MCHAML ' ou 'CHPOINT ' C MDEPTY, mot precisant le type de mouvement C IPTI4, pointeur sur un MELEME ou une TABLE C IPTI5, pointeur sur un MELEME ou une TABLE C IPTI6, pointeur sur un LISTREEL (instants t) C IPTI7, pointeur sur un listreel (vitesses a t) C en sortie : IPCH2, pointeur sur le champ resultat C C CREATION : 10/97, J. KICHENIN C================================================================ IMPLICIT INTEGER(I-N) IMPLICIT REAL*8 (A-H,O-Z) -INC PPARAM -INC CCOPTIO -INC CCGEOME -INC SMCOORD -INC SMLREEL -INC SMEVOLL -INC SMELEME DIMENSION X(3),Y(4) INTEGER IPCH1,IPCH2,IPTI4,IPTI5,IPTI6,IPTI7 CHARACTER*8 MOTYPE,TAPIND,TAPOBJ,TAPOB1,TAPOB2 CHARACTER*8 CHBOR CHARACTER*4 DMDEP(4),MDEPTY DATA DMDEP/'TRAN','ROTA','TRAJ','STAT'/ IF (MDEPTY.EQ.DMDEP(1)) GOTO 100 IF (MDEPTY.EQ.DMDEP(2)) GOTO 100 IF (MDEPTY.EQ.DMDEP(3)) GOTO 300 C------------- calcul du deplacement eventuel du champ ---------- 100 CONTINUE * le mouvement n est pas defini a l'instant r%1 MLREE3 = IPTI6 SEGINI, MLREE1=MLREE3 RETURN ENDIF * cree une evolution dont T1 est l'instant final MLREE3 = IPTI7 SEGINI, MLREE2=MLREE3 N = 0 JG = ILR GOTO 445 COAMPL = 0.D0 GOTO 460 JG = ILR GOTO 445 ENDIF 444 CONTINUE 445 CONTINUE SEGADJ MLREE1,MLREE2 N=1 SEGINI MEVOL2 SEGINI KEVOL2 MEVOL2.IEVOLL(1) = KEVOL2 KEVOL2.TYPX(1:8)='LISTREEL' KEVOL2.TYPY(1:8)='LISTREEL' KEVOL2.IPROGX = MLREE1 KEVOL2.IPROGY = MLREE2 SEGDES KEVOL2,MEVOL2 SEGDES MLREE1,MLREE2 * ecrire EVOLUTIO dans la pile et appeler INTG puis disposer du reel c CALL ECROBJ('EVOLUTIO',MEVOL2) cbp CALL SOMM c CALL INTGRA c CALL LIROBJ('LISTREEL',MLREE3,1,IRET1) cbp : on branche directement INTGEV XINT=0.D0 IPINT=0 IABSO=0 IA=0 IB=0 IF (IERR.NE.0) RETURN COAMPL = XINT SEGSUP MEVOL2,KEVOL2,MLREE1,MLREE2 C 460 CONTINUE IF (MDEPTY.EQ.DMDEP(2)) GOTO 200 * 'TRAN' : ecrire un POINT, puis un CHPOINT ou MCHAML, et appeler PROPER SEGACT MCOORD*mod IREF=IPREF*(IDIM+1)-IDIM X(1)=XCOOR(IREF) X(2)=XCOOR(IREF+1) IF (IDIM.GE.3) X(3)=XCOOR(IREF+2) NBPTS=nbpts+1 SEGADJ MCOORD XCOOR((NBPTS-1)*(IDIM+1)+1)=X(1)*COAMPL XCOOR((NBPTS-1)*(IDIM+1)+2)=X(2)*COAMPL IF (IDIM.GE.3) XCOOR((NBPTS-1)*(IDIM+1)+3)=X(3)*COAMPL XCOOR(NBPTS*(IDIM+1))=DENSIT IPRET=NBPTS IF(MOTYPE.EQ.'CHPOINT ') THEN ELSE ENDIF IF (MOTYPE.EQ.'CHPOINT ') THEN ELSE ENDIF RETURN * 200 CONTINUE C 'ROTA' : ecrire un CHPOINT, ou MCHAML , un FLOTTANT, c un ou deux POINT(s) pour l'axe de rotation, puis appeler TOURNE IF (IDIM.GE.3) THEN ENDIF IF (MOTYPE.EQ.'CHPOINT ') THEN ELSE ENDIF CALL TOURNE IF (MOTYPE.EQ.'CHPOINT ') THEN ELSE ENDIF * RETURN 300 CONTINUE C 'TRAJ' * se situer dans la progression des temps et extrapoler la position MLREE1 = IPTI6 SEGACT MLREE1 RETURN ENDIF IF ((WVALR2 - WVALR1).EQ.0) THEN SEGDES MLREE1 RETURN ENDIF SEGDES MLREE1 GOTO 350 ENDIF 344 CONTINUE 350 CONTINUE MELEME = IPTI5 SEGACT MELEME IF (ITYPEL.NE.1) THEN SEGDES MELEME RETURN ENDIF IOBR0 = NUM(1,1) IOBR1 = NUM(1,ILR-1) IOBR2 = NUM(1,ILR) SEGDES MELEME CALL OPERMU CALL OPERMU RETURN END
© Cast3M 2003 - Tous droits réservés.
Mentions légales