C DYNEVE SOURCE CHAT 05/01/12 23:18:59 5004 SUBROUTINE DYNEVE(IPRIG,ICHT1,ICHT2,ICHT3,ICHT4, & IPCGT,TINI,DT,NPAS,ITAB1,IPCHM,IPPT) IMPLICIT INTEGER(I-N) IMPLICIT REAL*8(A-H,O-Z) ************************************************************************ * * D Y N E V E * ----------- * * FONCTION: * --------- * UTILITAIRE DE L'OPERATEUR "DYNE" * VERIFICATION, IDENTIFICATION ET PREPARATION DES OPERANDES * * PARAMETRES: (E)=ENTREE (S)=SORTIE (+ = CONTENU DANS UN COMMUN) * ----------- * * IPRIG (E/S) TABLEAU DE POINTEURS SUR DES RIGIDITES, AVEC : * IPRIG(1) POINTEUR SUR L'OBJET M * IPRIG(2) POINTEUR SUR L'OBJET K * IPRIG(3) POINTEUR SUR L'OBJET A * IPRIG(4) POINTEUR SUR L'OBJET Z ( EN SORTIE ) * MCHT (S) POINTEUR SUR LE SEGMENT MCHT ( LAISSE ACTIF ) * IPCGT (E) TABLEAU DE POINTEURS SUR LES OBJETS CHARGEMENT, AVEC * IPCGT(1) POINTEUR SUR CGB * IPCGT(2) POINTEUR SUR CGF * TINI (E) TEMPS INITIAL * DT (E) PAS DE TEMPS * NPAS (E) NOMBRE DE PAS DE CALCUL * ITAB1 (E) POINTEUR SUR LA TABLE DES CHAMPS INITIAUX * IPCHM (S) TABLEAU DE POINTEURS SUR LES CHAMPS INITIAUX, AVEC : * IPCHM(1) POINTEUR SUR U0 * IPCHM(2) POINTEUR SUR V0 * IPPT (S) TABLEAU DE POINTEURS, AVEC : -1 * IPPT(1) POINTEUR SUR LE VECTDOUB CONTENANT M * ( ACTIF ) * IPPT(2) POINTEUR SUR UN SEGMENT MBLO ( ACTIF ) * IPPT(3) POINTEUR SUR UN SEGMENT MBLO ( ACTIF ) * IPPT(4) POINTEUR SUR LE SEGMENT MUCTRA ( ACTIF ) * IPPT(5) POINTEUR SUR LE SEGMENT MMATRI ( ACTIF ) * IPPT(6) POINTEUR SUR LE SEGMENT MZZZ ( ACTIF ) * * ATTENTION : ON ESSAIE DE D'ACTIVER UNE FOIS POUR TOUTES | * * AUTEUR, DATE DE CREATION: * ------------------------- * DENIS ROBERT, LE 20 OCTOBRE 1988. * REVU ET CORRIGE DECEMBRE 89 MP * * LANGAGE: * -------- * ESOPE + FORTRAN77 * ************************************************************************ * * MODULES UTILISES: * -INC CCOPTIO -INC SMVECTD * INTEGER IPRIG(4),IPCGT(2),IPCHM(2),IPPT(6) LOGICAL L0,L1 CHARACTER*9 MO1,TYPRET,CHARRE * IPM=0 IPCGTB=0 IPCGTF=0 ICHOLX=0 * SEGMENT,MCHT1 REAL*8 VCC1(IDDL) ENDSEGMENT * SEGMENT,MCHT2 REAL*8 VCC2(NDDL) ENDSEGMENT * SEGMENT,MCHT3 REAL*8 COE1(LCOE) ENDSEGMENT POINTEUR MCHT32.MCHT3 * *--- SEGMENTS CONTENANT A ET A M * SEGMENT,MBLO REAL*8 BLO(IDDL,NDDL) ENDSEGMENT POINTEUR MBLO2.MBLO * *--- VERIFICATION ET IDENTIFICATION DES OBJETS RIGIDITE *+* IPRIGM=IPRIG(1) IPRIGK=IPRIG(2) IPRIGA=IPRIG(3) * *-------------------------------------------------* *--- ASSEMBLAGE EVENTUEL DE LA MATRICE MASSE ---* *-------------------------------------------------* * CALL DYNE00(IPRIGM,IRSCPR,ICHOLX,LONVEC) IF (IERR.NE.0) RETURN INC=LONVEC SEGINI,MVECTD CALL ZERO(VECTBB,LONVEC,1) IPMASI=MVECTD * *--------------------------------------------------* *--- LUMPAGE ET INVERSION DE LA MATRICE MASSE ---* *--------------------------------------------------* * CALL DYNE01(ICHOLX,IRSCPR,IPRIGM,IPMASI) IF (IERR.NE.0) RETURN * *----------------------------------* * -1 T * *--- CALCUL DE : Z = A M A ---* *----------------------------------* * CALL DYNE02(ICHOLX,IRSCPR,LONVEC,IPRIGA,IPMASI,IPZ,IPM, & IBLO,IBLO2,IPRIGZ,ICPC) IF (IERR.NE.0) RETURN MBLO=IBLO IDDL=BLO(/1) NDDL=BLO(/2) MVECTD=IPMASI SEGSUP,MVECTD * *---------------------------------------* *--- CONCERNANT LES CHARGEMENTS... ---* *---------------------------------------* * NCGT=0 DO 110 ICGT=1,2 IF (IPCGT(ICGT).NE.0) THEN * *--- ON A TROUVE UN CHARGEMENT * NCGT=NCGT+1 ENDIF 110 CONTINUE * END DO IF (NCGT.EQ.1) THEN * *--- UN SEUL CHARGEMENT, A IDENTIFIER... *+* ON SUPPOSE ABUSIVEMENT QU'IL S'AGIT DE IPCGTF | IPCGTF=IPCGT(1) ELSE * *--- CGB ET CGF * IPCGTB=IPCGT(1) IPCGTF=IPCGT(2) ENDIF * | IPCGTB DANS IPCGT(1) *--- RANGEMENT | * | IPCGTF DANS IPCGT(2) IPCGT(1)=0 IPCGT(2)=0 IPCGT(1)=IPCGTB IPCGT(2)=IPCGTF * *--- D'UN OBJET CHARGEMENT, ON TIRE UN VECTEUR ET UNE LISTE DE *--- COEFFICIENTS, RANGES DANS LE SEGMENT MCHT * LCOE=NPAS+1 SEGINI,MCHT1 ICHT1=MCHT1 SEGINI,MCHT2 ICHT2=MCHT2 SEGINI,MCHT3 ICHT3=MCHT3 SEGINI,MCHT32 ICHT4=MCHT32 * CALL ZERO(VCC1,IDDL,1) CALL ZERO(COE1,LCOE,1) CALL ZERO(VCC2,NDDL,1) CALL ZERO(MCHT32.COE1,LCOE,1) * IF (IPCGT(2).NE.0) THEN CALL DYNECH(IPCGT(2),TINI,DT,NPAS,ICHOLX,NDDL,ICHT2,ICHT4) IF (IERR.NE.0) RETURN ENDIF * IF (IPCGT(1).NE.0) THEN CALL DYNE09(IPCGT(1),TINI,DT,NPAS,ICPC,IDDL,ICHT1,ICHT3) IF (IERR.NE.0) RETURN ENDIF * *--------------------------------------------------------------------* *--- VERIFICATION DE LA TABLE ET EXTRACTION DES CHAMPS INITIAUX ---* *--------------------------------------------------------------------* * CALL ACCTAB(ITAB1,'MOT',I0,X0,'SOUSTYPE',L0,IP0, & 'MOT',I1,X1,MO1,L1,IP1) IF (IERR.NE.0) RETURN IF (MO1.NE.'MOUVEMENT') THEN * *--- ERREUR DANS LA RECHERCHE DE L'INDICE D'UNE TABLE * CALL ERREUR(314) RETURN ENDIF * TYPRET=' ' CALL ACCTAB(ITAB1,'MOT',I0,X0,'