C AMOR SOURCE CB215821 19/07/31 21:15:25 10277 SUBROUTINE AMOR C C*********************************************************************** C * C Premiere option : * C * C FABRICATION DE LA MATRICE D'AMORTISSEMENT MODAL * C SYNTAXE : AMO1= AMOR BASE PROG ; * C AMO1 MATRICE D'AMORTISSEMENT * C BASE OBJET DE TYPE BASE MODALE * C PROG OBJET DE TYPE MLREEL LISTE DES * C COEFFICIENTS D'AMORTISSEMENT REDUITS (%) * C CREATION : 26/11/86 * C PROGRAMMEUR : GUILBAUD * C * C______________________________________________________________________* C * C Deuxieme option : calcule la matrice d'amortissement visqueux * C associee a la frontiere d'un maillage * C * C Syntaxe : * C -------- * C * C RIG1 = AMOR MODL1 MAT1 GEO1 ; * C * C RIG1 : matrice d'amortissement construite (TYPE rigidite) * C MODL1: objet MMODEL, modele du sol ou du fluide a modeliser * C MAT1 : objet MCHAML, caracteristiques materiau * C GEO1 : objet MELEME, maillage de la frontiere * C * C date de creation : 26/02/98 * C "programmeur" : Olivier ROCHET * C * C______________________________________________________________________* C * C Troisieme option : calcule la matrice d'amortissement * C d'un materiau viscoelastique * C * C Syntaxe : * C -------- * C * C RIG1 (RIG2) = AMOR MODL1 MAT1 ('COROTATIF') ; * C * C RIG1 : matrice d'amortissement construite (TYPE rigidite) * C MODL1: objet MMODEL, modele du sol ou du fluide a modeliser * C MAT1 : objet MCHAML, caracteristiques materiau * C L'option COROTATIF permet de calculer la matrice de rigidite * C antisymetrique d'un arbre tournant (elements de poutre uniquement) * C * C date de creation : 07/07/03 * C "programmeur" : Didier COMBESCURE * C * C*********************************************************************** C IMPLICIT INTEGER(I-N) IMPLICIT REAL*8 (A-H,O-Z) -INC PPARAM -INC CCOPTIO * PARAMETER (NPARAM = 1) LOGICAL BASMUL CHARACTER*8 CTYP CHARACTER*4 LPARAM(NPARAM) * DATA LPARAM / 'CORO' / * iretou = 0 * CALL LIROBJ('LISTREEL',IPRO,0,iretou) IF (IERR.NE.0) RETURN * * ----- * Cas 1 - Amortissement modal * ----- IF (iretou.EQ.1) THEN * ICAS = 1 IPRIG = 0 * IBASE = 0 ITBAS = 0 BASMUL = .FALSE. * CALL QUETYP(CTYP,1,iretou) IF (IERR.NE.0) RETURN IF (CTYP(1:8).EQ.'TABLE ') THEN CALL LIRTAB('BASE_MODALE',ITBAS,0,iretou) IF (IERR.NE.0) RETURN IF (iretou.EQ.0) THEN CALL LIRTAB('ENSEMBLE_DE_BASES',ITBAS,1,iretou) IF (IERR.NE.0) RETURN BASMUL = .TRUE. ENDIF ELSE CALL LIROBJ('BASEMODA',IBASE,1,iretou) IF (IERR.NE.0) RETURN ENDIF * CALL AMORMO(IPRO,IBASE,ITBAS,BASMUL, IPRIG) IF (IERR.NE.0 .OR. IPRIG.LE.0) RETURN * CALL ECROBJ('RIGIDITE',IPRIG) * * ---------- * Cas 2 et 3 - Frontieres absorbantes et amortissement visqueux * ---------- ELSE * IPMODL = 0 IPCHE1 = 0 IPMAIL = 0 IPRIG = 0 IPRIG2 = 0 C C lecture du modele C CALL LIROBJ('MMODEL ',IPMODL,1,iretou) CALL ACTOBJ('MMODEL ',IPMODL,1) IF (IERR.NE.0) RETURN C C lecture du mchaml de caracteristiques materiau C CALL LIROBJ('MCHAML ',IPIN,1,iretou) CALL ACTOBJ('MCHAML ',IPIN,1) IF (IERR.NE.0) RETURN CALL REDUAF(IPIN,IPMODL,IPCHE1,0,IR,KER) IF(IR .NE. 1) CALL ERREUR(KER) IF(IERR .NE. 0) RETURN C C lecture du maillage de la frontiere C CALL LIROBJ('MAILLAGE',IPMAIL,0,iretou) IF (IERR.NE.0) RETURN * IF (iretou.NE.0) THEN ICAS = 2 ELSE ICAS = 3 CALL LIRMOT(LPARAM,NPARAM,iretou,0) IF (IERR.NE.0) RETURN IF (iretou.EQ.1) ICAS = 4 ENDIF C IF (ICAS.EQ.2) THEN C CALL FRVISQ(IPMODL,IPMAIL,IPCHE1, IPRIG) IF (IERR.NE.0 .OR. IPRIG.LE.0) RETURN C ELSE IF (ICAS.EQ.3) THEN C CALL AMOR1(IPMODL,IPCHE1,1, IPRIG) IF (IERR.NE.0 .OR. IPRIG.LE.0) RETURN C ELSE IF (ICAS.EQ.4) THEN C CALL AMOR1(IPMODL,IPCHE1,2, IPRIG) IF (IERR.NE.0 .OR. IPRIG.LE.0) RETURN C CALL AMOR1(IPMODL,IPCHE1,1, IPRIG2) IF (IERR.NE.0 .OR. IPRIG2.LE.0) RETURN ENDIF C CALL ECROBJ('RIGIDITE',IPRIG) IF (ICAS.EQ.4) CALL ECROBJ('RIGIDITE',IPRIG2) C ENDIF END