devps2
C DEVPS2 SOURCE CB215821 20/11/25 13:25:03 10792 & IBAS,NUMBAS) IMPLICIT INTEGER(I-N) IMPLICIT REAL*8(A-H,O-Z) *--------------------------------------------------------------------* * * * Opérateur DYNE : algorithme de Fu - de Vogelaere * * ________________________________________________ * * * * Remplissage du tableau FEXPSM, representant les pseudo-modes * * aux points de liaison. * * * * Paramètres: * * * * e ITCHAR Table représentant les chargements * * e ITBAS Table représentant la base modale * * e KTLIAB Segment contenant les liaisons sur base B * * e KTNUM Segment contenant les paramètres numériques * * e KTPHI Segment des déformées modales * * es KTFEX Segment contenant les chargements libres * * e REPRIS Logique indiquant si le calcul est en reprise * * e ITPS Table contenant les pseudo-modes * * e IBAS Table contenant les modes * * e NUMBAS numéro de la sous base * * * * Auteur, date de création: * * * * Lionel VIVAN, le 10 avril 1990 * * * *--------------------------------------------------------------------* * -INC PPARAM -INC CCOPTIO -INC SMCHARG -INC SMLREEL -INC SMCHPOI * * FEXPSM(.,.,1,.) valeur au pas m * FEXPSM(.,.,2,.) valeur au pas m - 1/2 * SEGMENT,MTNUM REAL*8 XDT(NPC1),XTEMPS(NPC1) ENDSEGMENT SEGMENT,MTFEX REAL*8 FEXA(NPFEXA,NPC1,2) REAL*8 FEXPSM(NPLB,NPC1,2,IDIMB) REAL*8 FTEXB(NPLB,NPC1,2,IDIM) * INTEGER IFEXA(NPFEXA),IFEXB(NPFEXB) ENDSEGMENT SEGMENT,MTPHI INTEGER IBASB(NPLB),IPLSB(NPLB),INMSB(NSB),IORSB(NSB) INTEGER IAROTA(NSB) REAL*8 XPHILB(NSB,NPLSB,NA2,IDIMB) ENDSEGMENT SEGMENT,MTLIAB INTEGER IPALB(NLIAB,NIPALB),IPLIB(NLIAB,NPLBB),JPLIB(NPLB) REAL*8 XPALB(NLIAB,NXPALB) REAL*8 XABSCI(NLIAB,NIP),XORDON(NLIAB,NIP) ENDSEGMENT SEGMENT,MTRAV REAL*8 FTCHG(NPC2) ENDSEGMENT * LOGICAL L0,L1,REPRIS CHARACTER*8 TYPRET,CHARRE CHARACTER*40 CMOT PARAMETER ( TOLER = 1.E-6 ) * DATA NOMAXI/'UR ','UZ ','UT ','RR ','RZ ','RT '/ DATA NOMTRI/'UX ','UY ','UZ ','RX ','RY ','RZ '/ * MTNUM = KTNUM MTFEX = KTFEX MTPHI = KTPHI MTLIAB = KTLIAB NPC1 = XDT(/1) NPLB = IBASB(/1) NSB = XPHILB(/1) IDIMB = XPHILB(/4) MCHARG = ICHAR1 SEGACT,MCHARG NCHAR = KCHARG(/1) * ************************************************************************ * BOUCLE SUR LES PSEUDO-MODES ************************************************************************ * IPS = 0 10 CONTINUE IPS = IPS + 1 TYPRET = ' ' & TYPRET,I1,X1,CHARRE,L1,ITPM) IF (ITPM.NE.0 .AND. TYPRET.EQ.'TABLE ') THEN & 'MOT',I1,X1,CMOT,L1,IP1) ******** CAS D'UN PSEUDO MODE DE SOUSTYPE : 'PSMO_FORC' **************** IF (CMOT(1:9).EQ.'PSMO_FORC') THEN & 'CHPOINT',I1,X1,CHARRE,L1,ICHBA) * *---------- boucle sur les chargements elementaires ------------------ * * jusqu'a trouver celui qui correspond au pseudo mode DO 20 ICHAR=1,NCHAR ICHARG = KCHARG(ICHAR) SEGACT,ICHARG IF(CHATYP.NE.'CHPOINT '.OR.CHAMOB(ICHAR).NE.'STAT' & .OR.CHALIE(ICHAR).NE.'LIE ') THEN SEGDES ICHARG GOTO 20 ENDIF c test sur le pointeur du CHPOINT definissant le pseudo-mode IF (ICHBA.EQ.ICHPO1) GOTO 120 20 CONTINUE * --- on n'a pas trouve le chargement : erreur ! --- INTERR(1) = IPS GOTO 10 * --- on a trouve le chargement : on continue --- 120 CONTINUE IF (IIMPI.EQ.333) THEN WRITE(IOIMP,*)'DEVPSM : pseudo-mode numero ',IPS WRITE(IOIMP,*)'DEVPSM : chargement ',ICHAR1 WRITE(IOIMP,*)'DEVPSM : numero ',ICHAR ENDIF *---------- interpolation de f(t) ------------------ * MLR1 = ICHPO2 MLR2 = ICHPO3 IF (IERR.NE.0) RETURN MTRAV = KTRAV SEGDES ICHARG * *---------- boucle sur les points de liaison ------------------ * DO 30 IPL = 1,NPLB IB = IBASB(IPL) IF (IB.EQ.NUMBAS) THEN IPTL = JPLIB(IPL) & 'CHPOINT',I1,X1,' ',L1,ICHPS) DO 40 ID = 1,IDIMB IF (IFOUR.EQ.0 .OR. IFOUR.EQ.1) THEN ELSE ENDIF IF (IRET.EQ.1) THEN DO 50 IT=1,NPC1 NP = 2 * IT FEXPSM(IPL,IT,1,ID) = FEXPSM(IPL,IT,1,ID) + & ( XVAL * FTCHG(NP) ) FEXPSM(IPL,IT,2,ID) = FEXPSM(IPL,IT,1,ID) + 50 CONTINUE ENDIF 40 CONTINUE ENDIF 30 CONTINUE *---------- fin de boucle sur les points de liaison ------------------ * SEGSUP MTRAV c ON PASSE AU PSEUDO-MODE SUIVANT GOTO 10 ******** CAS D'UN PSEUDO MODE DE SOUSTYPE : 'PSMO_SEIS' **************** ELSE IF (CMOT(1:9).EQ.'PSMO_SEIS') THEN & 'ENTIER',IENT,X1,' ',L1,IP1) & 'TABLE',I1,X1,' ',L1,ITMK) & L0,IP0,'TABLE',I1,X1,' ',L1,ITMD) & 'FLOTTANT',I1,XQXYZ,' ',L1,IP1) * *---------- boucle sur les chargements elementaires ------------------ * * jusqu'a trouver celui qui correspond au pseudo mode DO 24 ICHAR=1,NCHAR ICHARG = KCHARG(ICHAR) SEGACT,ICHARG IF(CHATYP.NE.'CHPOINT '.OR.CHAMOB(ICHAR).NE.'STAT' & .OR.CHALIE(ICHAR).NE.'LIE ') THEN SEGDES ICHARG GOTO 24 ENDIF MCHPOI = ICHPO1 SEGACT MCHPOI MSOUPO = IPCHP(1) SEGDES MCHPOI SEGACT MSOUPO MPOVAL = IPOVAL SEGDES MSOUPO SEGACT MPOVAL QXYZ = VPOCHA(1,1) SEGDES MPOVAL EPS = ABS(QXYZ + XQXYZ) c test sur l'unique valeur du CHPOINT definissant le pseudo-mode IF (EPS.LT.TOLER) GOTO 124 24 CONTINUE * --- on n'a pas trouve le chargement : erreur ! --- INTERR(1) = IPS GOTO 10 * --- on a trouve le chargement : on continue --- 124 CONTINUE IF (IIMPI.EQ.333) THEN WRITE(IOIMP,*)'DEVPSM : pseudo-mode numero ',IPS WRITE(IOIMP,*)'DEVPSM : chargement ',ICHAR1 WRITE(IOIMP,*)'DEVPSM : numero ',ICHAR ENDIF *---------- interpolation de f(t) ------------------ * MLR1 = ICHPO2 MLR2 = ICHPO3 IF (IERR.NE.0) RETURN MTRAV = KTRAV SEGDES ICHARG * *---------- boucle sur les points de liaison ------------------ * DO 32 IPL = 1,NPLB IB = IBASB(IPL) IF (IB.EQ.NUMBAS) THEN IPTL = JPLIB(IPL) & 'CHPOINT',I1,X1,' ',L1,ICHPS) DO 42 ID = 1,IDIMB IF (IFOUR.EQ.0 .OR. IFOUR.EQ.1) THEN ELSE ENDIF IRET=0 IF (IRET.EQ.1) THEN DO 52 IT=1,NPC1 NP = 2 * IT FEXPSM(IPL,IT,1,ID) = FEXPSM(IPL,IT,1,ID) + & ( XVAL * FTCHG(NP) ) FEXPSM(IPL,IT,2,ID) = FEXPSM(IPL,IT,1,ID) + 52 CONTINUE ENDIF 42 CONTINUE ENDIF 32 CONTINUE *---------- fin de boucle sur les points de liaison ------------------ * SEGSUP MTRAV c ON PASSE AU PSEUDO-MODE SUIVANT GOTO 10 ******** CAS D'UN PSEUDO MODE DE SOUSTYPE : 'PSMO_DEPL' **************** ELSE IF (CMOT(1:9).EQ.'PSMO_DEPL') THEN & 'CHPOINT',I1,X1,' ',L1,ICHBA) * *---------- boucle sur les chargements elementaires ------------------ * * jusqu'a trouver celui qui correspond au pseudo mode DO 28 ICHAR=1,NCHAR ICHARG = KCHARG(ICHAR) SEGACT,ICHARG IF(CHATYP.NE.'CHPOINT '.OR.CHAMOB(ICHAR).NE.'STAT' & .OR.CHALIE(ICHAR).NE.'LIE ') THEN SEGDES ICHARG GOTO 28 ENDIF c test sur le pointeur du CHPOINT definissant le pseudo-mode IF (ICHBA.EQ.ICHPO1) GOTO 128 28 CONTINUE * --- on n'a pas trouve le chargement : erreur ! --- INTERR(1) = IPS GOTO 10 * --- on a trouve le chargement : on continue --- 128 CONTINUE IF (IIMPI.EQ.333) THEN WRITE(IOIMP,*)'DEVPSM : pseudo-mode numero ',IPS WRITE(IOIMP,*)'DEVPSM : chargement ',ICHAR1 WRITE(IOIMP,*)'DEVPSM : numero ',ICHAR ENDIF *---------- interpolation de f(t) ------------------ * MLR1 = ICHPO2 MLR2 = ICHPO3 IF (IERR.NE.0) RETURN MTRAV = KTRAV SEGDES ICHARG * *---------- boucle sur les points de liaison ------------------ * DO 34 IPL = 1,NPLB IB = IBASB(IPL) IF (IB.EQ.NUMBAS) THEN IPTL = JPLIB(IPL) & 'CHPOINT',I1,X1,' ',L1,ICHPS) DO 44 ID = 1,IDIMB IF (IFOUR.EQ.0 .OR. IFOUR.EQ.1) THEN ELSE ENDIF IF (IRET.EQ.1) THEN DO 54 IT=1,NPC1 NP = 2 * IT FEXPSM(IPL,IT,1,ID) = FEXPSM(IPL,IT,1,ID) + & ( XVAL * FTCHG(NP) ) FEXPSM(IPL,IT,2,ID) = FEXPSM(IPL,IT,1,ID) + 54 CONTINUE ENDIF 44 CONTINUE ENDIF 34 CONTINUE *---------- fin de boucle sur les points de liaison ------------------ * SEGSUP MTRAV c ON PASSE AU PSEUDO-MODE SUIVANT GOTO 10 ENDIF ******** FIN DISTINCTION ENTRE LES SOUSTYPE DES PSEUDO MODE ************ ENDIF SEGDES MCHARG * END
© Cast3M 2003 - Tous droits réservés.
Mentions légales