Download amor2.eso

Back to the list

   1 : C AMOR2     SOURCE    FANDEUR   10/08/31    21:15:10     6735           
   2 :       SUBROUTINE AMOR2(MATE,MELE,IPMAIL,IPMINT,NBPGAU,LRE,NSTRS,
   3 :      &  IVAMAT,IVACAR,CMATE,MFR,NBGMAT,NELMAT,IMAT,LHOOK,NMATT,
   4 :      &  IPORE,NDDL,IPMATR,IIPDPG,NCAR1)
   5 : *---------------------------------------------------------------------*
   6 : *        _________________________________________                    *
   7 : *        |                                       |                    *
   8 : *        |  CALCUL DE LA MATRICE D AMORTISSEMENT |                    *
   9 : *        |_______________________________________|                    *
  10 : *                                                                     *
  11 : *        massif                                                       *
  12 : *                                                                     *
  13 : *---------------------------------------------------------------------*
  14 : *                                                                     *
  15 : *   ENTREES :                                                         *
  16 : *   ________                                                          *
  17 : *                                                                     *
  18 : *        MATE     Numero du materiau                                  *
  19 : *        MELE     Numero de l'element fini                            *
  20 : *        IPMAIL   Pointeur sur un segment  MELEME                     *
  21 : *        IPMINT   Pointeur sur un segment MINTE                       *
  22 : *        NBPGAU   Nombre de point d'integration pour la rigidite      *
  23 : *        LRE      Nombre de ddl dans la matrice de rigidite           *
  24 : *        NSTRS    Nombre de composante de contraintes/deformations    *
  25 : *        IVAMAT   Pointeur sur un segment MPTVAL pour le materiau ou  *
  26 : *                 pour une matrice de hooke                           *
  27 : *        IVACAR   Pointeur sur un segment MPTVAL de caractéristiques  *
  28 : *        CMATE    Nom du materiau                                     *
  29 : *        MFR      Numero de la formulation element fini               *
  30 : *        NBGMAT   Taille maxi des melval du materiau (pt de gauss)    *
  31 : *        NELMAT   Taille maxi des melval du materiau (No d'element)   *
  32 : *        IMAT     (2 il y a une matrice de HOOKE,1 non  )             *
  33 : *        NMATT    Nombre de composante de materiau (IMAT=1)           *
  34 : *        LHOOK    Dimension de la matrice de Hooke                    *
  35 : *        IPORE    Nombre de fonctions de forme                        *
  36 : *        NDDL     Nombre de degre de liberte                          *
  37 : *                                                                     *
  38 : *   SORTIES :                                                         *
  39 : *   ________                                                          *
  40 : *                                                                     *
  41 : *        IPMATR   pointeur sur la rigidite de la sous-zone            *
  42 : *                                                                     *
  43 : *---------------------------------------------------------------------*
  44 :       IMPLICIT INTEGER(I-N)
  45 :       IMPLICIT REAL*8(A-H,O-Z)
  46 : *
  47 : -INC CCOPTIO
  48 : -INC CCHAMP
  49 : -INC CCREEL
  50 : -INC SMCHAML
  51 : -INC SMINTE
  52 : -INC SMELEME
  53 : -INC SMRIGID
  54 : -INC SMCOORD
  55 : -INC SMLREEL
  56 : *
  57 :       SEGMENT,MWRK1
  58 :        REAL*8 DDHOOK(LHOOK,LHOOK) ,DDHOMU(LHOOK,LHOOK)
  59 :        REAL*8 REL(LRE,LRE) ,RINT(LRE,LRE) , XE(3,NBBB)
  60 :       ENDSEGMENT
  61 : *
  62 :       SEGMENT,MWRK2
  63 :        REAL*8 SHPWRK(6,NBNO) ,BGENE(LHOOK,LRE)
  64 :       ENDSEGMENT
  65 : *
  66 :       SEGMENT,MWRK8
  67 :        REAL*8 XLOC(IDIM,IDIM),XGLOB(IDIM,IDIM),TXR(IDIM,IDIM)
  68 :        REAL*8 D1HO(LHOOK,LHOOK),ROTH(LHOOK,LHOOK)
  69 :        ENDSEGMENT
  70 : *
  71 :       SEGMENT,MVELCH
  72 :          REAL*8 VALMAT(NV1)
  73 :       ENDSEGMENT
  74 : *
  75 :       segment,mwrk67
  76 :          real*8 valcar(nca1)
  77 :       endsegment
  78 : *
  79 :       SEGMENT MPTVAL
  80 :         INTEGER IPOS(NS)    ,NSOF(NS)
  81 :         INTEGER      IVAL(NCOSOU)
  82 :         CHARACTER*16 TYVAL(NCOSOU)
  83 :       ENDSEGMENT
  84 : *
  85 :       CHARACTER*8 CMATE,CELEM
  86 : 
  87 :       DIMENSION A(4,60),BB(3,60),xatef1(3,3)
  88 :       logical drend,BDPGE
  89 : *
  90 : *      WRITE (*,*) 'Entrée dans AMOR2.'
  91 : C*?      SEGACT MCOORD
  92 :       MELEME=IPMAIL
  93 :       NBNN=NUM(/1)
  94 :       NBELEM=NUM(/2)
  95 : *
  96 :       NV1=NMATT
  97 :       SEGINI,MVELCH
  98 : *
  99 :       XMATRI=IPMATR
 100 :       NLIGRP=LRE
 101 :       NLIGRD=LRE
 102 : *
 103 : *     INTRODUCTION DU POINT AUTOUR DUQUEL SE FAIT LE MOUVEMENT
 104 : *     DE LA SECTION EN DEFO PLANE GENERALISEE
 105 : *     En 1D : pas de rotation
 106 :       IF (IFOUR.EQ.-3) THEN
 107 :         BDPGE=.TRUE.
 108 :         IREF=(IIPDPG-1)*(IDIM+1)
 109 :         XDPGE=XCOOR(IREF+1)
 110 :         YDPGE=XCOOR(IREF+2)
 111 :       ELSE IF ((IFOUR.GE.7.AND.IFOUR.LE.11).OR.IFOUR.EQ.14) THEN
 112 :         BDPGE=.TRUE.
 113 :         XDPGE=XZero
 114 :         YDPGE=XZero
 115 :       ELSE
 116 :         BDPGE=.FALSE.
 117 :         XDPGE=0.D0
 118 :         YDPGE=0.D0
 119 :       ENDIF
 120 : *
 121 :       NHRM=NIFOUR
 122 : *
 123 :       MINTE=IPMINT
 124 : C_______________________________________________________________________
 125 : C
 126 : C     NUMERO DES ETIQUETTES      :
 127 : C     ETIQUETTES DE 1 A 98 POUR TRAITEMENT SPECIFIQUE A L ELEMENT
 128 : C     DANS LA ZONE SPECIFIQUE A CHAQUE ELEMENT COMMENCANT PAR :
 129 : C     5  CONTINUE
 130 : C     ELEMENT 5   ETIQUETTES 1005 2005 3005 4005   ...
 131 : C     44 CONTINUE
 132 : C     ELEMENT 44  ETIQUETTES 1044 2044 3044 4044   ...
 133 : C_______________________________________________________________________
 134 : C
 135 :       GOTO (99,99,99, 4,99, 4,99, 4,99, 4,99,99,99, 4, 4, 4, 4,99,99,99,
 136 :      1      99,99, 4, 4, 4, 4,99,99,99,99,99,99,99,99,99,99,99,99,99,99,
 137 :      2      99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,
 138 :      3      99,99,99,99,99,99,99,99, 4, 4, 4, 4, 4,99,99, 4,99,99,99,99,
 139 :      4      99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,
 140 :      5      99,99,99,99,99,99,99,99,99,99, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4,
 141 :      6       4, 4),MELE
 142 : *
 143 :       IF (MELE.EQ.183.OR.MELE.EQ.184.OR.
 144 :      .    MELE.EQ.193.OR.MELE.EQ.194) GOTO 4
 145 : 
 146 :       GOTO 99
 147 : C_______________________________________________________________________
 148 : C
 149 : C     SECTEUR DE CALCUL POUR LES ELEMENTS MASSIFS ET ELEMENTS INCOMPRESSIBLES
 150 : C_______________________________________________________________________
 151 : C
 152 :    4  CONTINUE
 153 :       DIM3=1.D0
 154 :       IRTD=1
 155 : *
 156 : *  CAS  ORTHOTROPE ( 2)  ANISOTROPE ( 3) UNIDIRECTIONNEL (4)
 157 : *
 158 :       IPMIN2=0
 159 :       IF((MATE.EQ.2.OR.MATE.EQ.3.OR.MATE.EQ.4)
 160 :      1      .AND.IMAT.EQ.1)THEN
 161 : *  RECUPERATION DES FONCTIONS DE FORME ET LEURS DERIVEES AU CENTRE DE
 162 : *  L'ELEMENT POUR LE CALCUL DES AXES LOCAUX
 163 :         NLG=NUMGEO(MELE)
 163 :         CALL RESHPT(1,NBNN,NLG,MELE,0,IPMIN2,IRT1)
 164 :         MINTE2=IPMIN2
 165 :         SEGACT MINTE2
 166 :         SEGINI,MWRK8
 167 :       ENDIF
 168 :       NBNO=NBNN
 169 :       NBBB=NBNN
 170 :       SEGINI,MWRK1,MWRK2
 171 : 
 172 :       DO 3004  IB=1,NBELEM
 173 : C
 174 : C     ON CHERCHE  LES COORDONNEES DES NOEUDS DE L ELEMENT IB
 175 : C
 175 :       CALL DOXE(XCOOR,IDIM,NBNN,NUM,IB,XE)
 176 : C
 177 : C     CALCUL DES AXES LOCAUX DANS LE CAS DES MATERIAUX ORTHOTROPE ,
 178 : C     ANISOTROPE  ET UNIDIRECTIONNEL
 179 : C
 180 : C*      IF((MATE.EQ.2.OR.MATE.EQ.3.OR.MATE.EQ.4)
 181 : C*     1      .AND.IMAT.EQ.1)THEN
 182 :       IF (IPMIN2.NE.0) THEN
 183 :         NBSH=MINTE2.SHPTOT(/2)
 183 :         CALL RLOCAL (XE,MINTE2.SHPTOT,NBSH,NBNN,TXR)
 184 :         if (nbsh.eq.-1) then
 184 :          call erreur(525)
 185 :          GOTO 4999
 186 :         endif
 187 :       ENDIF
 188 : C
 188 :       CALL ZERO (RINT,LRE,LRE)
 189 : C
 190 : C     CALCUL DES COEFF DE MODIFICATION DE LA MATRICE B-BARRE
 191 : C     (Uniquement en cas d'elements incompressibles)
 192 :       IF (MFR.EQ.31) THEN
 193 : *        WRITE (*,*) 'Appel de BBCALC - IFOUR = ',IFOUR
 193 :         CALL BBCALC(XE,MELE,NBNN,IDIM,NBPGAU,POIGAU,
 194 :      1              QSIGAU,ETAGAU,DZEGAU,NSTRS,
 195 :      2              LRE,IFOUR,A,BB,NHRM,SHPTOT,SHPWRK,XDPGE,YDPGE)
 196 :       ENDIF
 197 : C
 198 : C     BOUCLE SUR LES POINTS DE GAUSS
 199 : C
 200 :       ISDJC=0
 201 :       DO 4004  IGAU=1,NBPGAU
 202 : C
 203 : C   RECUPERATION DE L'EPAISSEUR
 204 : C
 205 :       IF (IFOUR.EQ.-2)THEN
 206 :         MPTVAL=IVACAR
 207 :         IF (IVACAR.NE.0) THEN
 208 :          MELVAL=IVAL(1)
 209 :          IF (MELVAL.NE.0) THEN
 210 :           IGMN=MIN(IGAU,VELCHE(/1))
 211 :           IBMN=MIN(IB,VELCHE(/2))
 212 :           DIM3=VELCHE(IGMN,IBMN)
 213 :          ELSE
 214 :           DIM3=1.D0
 215 :          ENDIF
 216 :         ENDIF
 217 :       ENDIF
 218 : *
 218 :       CALL BMATST(IGAU,NBPGAU,POIGAU,QSIGAU,ETAGAU,DZEGAU,
 219 :      1            MELE,MFR,NBNN,LRE,IFOUR,NSTRS,NHRM,DIM3,XE,
 220 :      2            SHPTOT,SHPWRK,BGENE,DJAC,XDPGE,YDPGE)
 221 :       IF (DJAC.EQ.0.D0) THEN
 222 :         INTERR(1)=IB
 222 :         CALL ERREUR(259)
 223 :         GOTO 4999
 224 :       ENDIF
 225 :       IF (DJAC.LT.0.D0) ISDJC=ISDJC+1
 226 :       DJAC=ABS(DJAC)*POIGAU(IGAU)
 227 : 
 228 : C En cas d'elements incompressibles : BGENE selon la methode B-BARRE
 229 :       IF (MFR.EQ.31) THEN
 229 :         CALL BBAR(IGAU,NBPGAU,POIGAU,QSIGAU,ETAGAU,DZEGAU,
 230 :      &            MELE,NBNN,LRE,IFOUR,NSTRS,XE,DJAC,A,BB,BGENE)
 231 :       ENDIF
 232 : C
 233 :       MPTVAL=IVAMAT
 234 :       IF(IMAT.EQ.2) THEN
 235 :         MELVAL=IVAL(1)
 236 :         IBMN=MIN(IB  ,IELCHE(/2))
 237 :         IGMN=MIN(IGAU,IELCHE(/1))
 238 :         MLREEL=IELCHE(IGMN,IBMN)
 239 :         SEGACT MLREEL
 240 :         IF (IGAU.LE.NBGMAT.AND.(IB.LE.NELMAT.OR.NBGMAT.GT.1))
 240 :      1  CALL DOHOOO(PROG,LHOOK,DDHOOK)
 241 :         SEGDES MLREEL
 242 :       ELSE IF (IMAT.EQ.1) THEN
 243 :         DO 9004 IM=1,NMATT
 244 :           IF (IVAL(IM).NE.0) THEN
 245 :             MELVAL=IVAL(IM)
 246 :             IBMN=MIN(IB  ,VELCHE(/2))
 247 :             IGMN=MIN(IGAU,VELCHE(/1))
 248 :             VALMAT(IM)=VELCHE(IGMN,IBMN)
 249 :           ELSE
 250 :             VALMAT(IM)=0.D0
 251 :           ENDIF
 252 :  9004   CONTINUE
 253 :          IF(MATE.EQ.2.OR.MATE.EQ.3.OR.MATE.EQ.4)THEN
 254 :          IF (IGAU.LE.NBGMAT)
 254 :      1   CALL DOHMAO(VALMAT,CMATE,IFOUR,IDIM,TXR,XLOC,XGLOB,D1HO,
 255 :      2               ROTH,DDHOOK,LHOOK,1,IRTD)
 256 :         ELSE
 257 :          IF (IGAU.LE.NBGMAT.AND.(IB.LE.NELMAT.OR.NBGMAT.GT.1))
 257 :      1   CALL DOHMAS(VALMAT,CMATE,IFOUR,LHOOK,1,DDHOOK,IRTD)
 258 :         ENDIF
 259 :         IF (IRTD.EQ.0) THEN
 260 :           MOTERR(1:8)=CMATE
 261 :           MOTERR(9:16)=NOMFR(MFR/2+1)
 262 :           INTERR(1)=IFOUR
 262 :           CALL ERREUR(81)
 263 :           GOTO 510
 264 :         ENDIF
 265 :       ENDIF
 266 : C
 267 : C    CHOIX POUR BDB/DEFO PLANE GENE --- PRODUIT MATRICIEL NORMAL
 268 : C                  /MASSIF ------------ PRODUIT PAR BLOC
 269 : C
 270 : * initialise
 270 :       CALL ZERO (REL,LRE,LRE)
 271 : * calcul rigidite elementaire
 272 : C**   IF (IFOUR.EQ.-3) THEN
 273 :       IF (BDPGE) THEN
 273 :        CALL BDBST(BGENE,DJAC,DDHOOK,LRE,NSTRS,REL)
 274 :       ELSE
 274 :        CALL BDBS1(BGENE,DJAC,DDHOOK,LRE,NSTRS,REL,MFR,IFOUR,MATE,
 275 :      1    IGAU,IMAT,0.D0)
 276 :       ENDIF
 277 : * matrice d'efficacite
 278 :         drend = .false.
 279 :         MPTVAL=IVACAR
 280 :         IF (IVACAR.GT.0) THEN
 281 :          segact mptval
 282 :          nca1 = ival(/1) 
 283 :          segini,mwrk67
 284 :          celem = 'MASSIF  '
 285 :          IF(IVAL(NCAR1).GT.0.OR.IVAL(NCAR1+1).GT.0) THEN
 286 :           DO 9008 IM= 1,IVAL(/1)
 287 :           IF (IVAL(IM).GT.0) THEN
 288 :             MELVAL=IVAL(IM)
 289 :             IF (TYVAL(IM).EQ.'REAL*8') THEN 
 290 :               IBMN=MIN(IB  ,VELCHE(/2))
 291 :               IGMN=MIN(IGAU,VELCHE(/1))
 292 :               VALCAR(IM)=VELCHE(IGMN,IBMN)
 293 :             ELSE
 294 :               IBMN=MIN(IB  ,IELCHE(/2))
 295 :               IGMN=MIN(IGAU,IELCHE(/1))
 296 :               VALCAR(IM)=IELCHE(IGMN,IBMN)
 297 :             ENDIF
 298 :           ELSE
 299 :             VALCAR(IM)=0.D0
 300 :           ENDIF
 301 :  9008    CONTINUE
 302 :         nstep = 2
 303 :         if (ifour.eq.2) nstep = 3
 304 :         if (ival(ncar1).gt.0.and.tyval(ncar1).eq.'REAL*8') then
 305 :            drend = .true.
 306 :            do i = 1,nstep
 307 :             do j = 1, nstep
 308 :               xatef1(i,j) = 0.d0
 309 :             enddo
 310 :             xatef1(i,i) = valcar(ncar1)
 311 :           enddo
 312 :         endif
 313 :         if (ival(ncar1).eq.0.and.tyval(ncar1+1).eq.'REAL*8') then
 314 :           drend = .false.
 315 :           do i = 1,nstep
 316 :             do j = 1, nstep
 317 :               xatef1(i,j) = 0.d0
 318 :             enddo
 319 :             xatef1(1,1) = valcar(ncar1+7)
 320 :             xatef1(2,2) = valcar(ncar1+8)
 321 :             if (nstep.eq.3) xatef1(3,3) = valcar(ncar1+9)
 322 :           enddo
 323 :         endif
 323 :         call effi2(valcar,tyval,nca1,ncar1,rel,lre,ib,igau,xatef1,
 324 :      & nstep,drend,celem)
 325 :         ENDIF
 326 :       ENDIF
 327 : *  stocke 
 328 :        do ii = 1,LRE
 329 :          do jj = 1,LRE
 330 :            rint(ii,jj) = rint(ii,jj) + rel(ii,jj) 
 331 :          enddo
 332 :        enddo
 333 : *
 334 :  4004 CONTINUE
 335 : C
 336 :       IF (ISDJC.NE.0.AND.ISDJC.NE.NBPGAU) THEN
 337 :         INTERR(1) = IB
 337 :         CALL ERREUR(195)
 338 :         GOTO 4999
 339 :       ENDIF
 340 : C
 341 : C     REMPLISSAGE DE XMATRI
 342 : C
 342 : c      CALL REMPMT(RINT,LRE,RE)
 343 : C+DC
 344 : C       IF (ICAS.NE.3) THEN
 345 :         DO 4100 IAK=1,LRE 
 346 :          DO 4100 IBK=1,LRE      
 347 :           RE(IAK,IBK,IB)=RINT(IAK,IBK)
 348 :  4100   CONTINUE
 349 : C       ELSE
 350 : C        DO 4110 IAK=1,LRE/2 
 351 : C         DO 4110 IBK=1,LRE/2      
 352 : C          IF 
 353 : C          RE(2*IAK-1,2*IBK-1)=RINT(IAK,IBK)
 354 : C 4110   CONTINUE
 355 : C       ENDIF                                                        
 356 :  3004 CONTINUE
 357 : 
 358 : C Fin du traitement - Menage
 359 :  4999 CONTINUE
 360 :       IF (IPMIN2.NE.0) THEN
 361 : C*    IF((MATE.EQ.2.OR.MATE.EQ.3.OR.MATE.EQ.4)
 362 : C*   1      .AND.IMAT.EQ.1)THEN
 363 :        SEGDES MINTE2
 364 :        SEGSUP,MWRK8
 365 :       ENDIF
 366 :       SEGSUP,MWRK1,MWRK2
 367 :       GOTO 510
 368 : *
 369 :    99 CONTINUE
 370 :       MOTERR(1:4)=NOMTP(MELE)
 371 :       MOTERR(5:12)='AMOR2   '
 371 :       CALL ERREUR(86)
 372 : *
 373 :   510 CONTINUE
 374 :       SEGSUP,MVELCH
 375 : *     SEGDES XMATRI
 376 : *      WRITE (*,*) 'Sortie de AMOR2.'
 377 :       RETURN
 378 :       END
 379 : 
 380 :  

© Cast3M 2003 - All rights reserved.
Disclaimer