Download rigixr.eso

Back to the list

   1 : C RIGIXR    SOURCE    FANDEUR   11/07/19    21:17:22     7041           
   2 :       subroutine RIGIXR(ISOU,IPOI6,IMODEL,IPINF,
   3 :      $       IVAMAT,IVACAR,NMATT,CMATE,NCAR1,NBGMAT,NELMAT,IMAT,IRETER)
   4 : * as 2009/09/03 : ajout de IMAT en entrée de RIGIXR
   5 : c    
   6 : C Les sous programmes affectés à un type d'élément sont chargés
   7 : C de faire le tri des éléments suivant le type d'enrichissement.
   8 : c
   9 : C Par exemple le XQ4R peut sortir :
  10 : c     - des matrices ne comportant que des ddl standard du QUA4,
  11 : c     - des matrices enrichies par le saut du à la fissure, 
  12 : c     - des matrices enrichies par le saut et par les fonctions de 
  13 : c       la mécanique de la rupture
  14 : c
  15 : C Donc pour 1 type d'EF, on crée 1+NENR objet elementaire IMATTT
  16 : C Pour y parvenir, on utilise le tableau LOCIRI (=LOCal IRIgel)
  17 : c qui est l'équivalent local de IRIGEL et qui doit etre rempli
  18 : C par les sous programmes élémentaires (comme RIGIX.eso).
  19 : c Il est dimensionné en dur à (10,6) au lieu de (8,1+NENR) 
  20 : c pour etre large.
  21 : C
  22 : C Finalement, RIGIXR.eso recupere LOCIRI, ajuste et remplit IRIGEL
  23 : c
  24 :       IMPLICIT REAL*8 (A-H,O-Z)
  25 :       IMPLICIT INTEGER (I-N)
  26 : C
  27 : -INC CCOPTIO
  28 : -INC SMRIGID
  29 : -INC SMINTE
  30 : -INC SMMODEL
  31 : -INC SMELEME
  32 : C
  33 :       CHARACTER*8 CMATE
  34 :       PARAMETER (NBENRMAX=5)
  35 :       INTEGER    LOCIRI(10,(1+NBENRMAX))
  36 : c
  37 :       SEGMENT MPTVAL
  38 :         INTEGER      IPOS(NS),NSOF(NS)
  39 :         INTEGER      IVAL(NCOSOU)
  40 :         CHARACTER*16 TYVAL(NCOSOU)
  41 :       ENDSEGMENT
  42 : c
  43 : c      write(6,*) '##### entree dans rigixr #####'
  44 :       IRETER=0
  45 : C
  46 : Ccccc on active le modele, les caracteristiques materiau
  47 : c*      segact,imodel
  48 : 
  49 :       mele = nefmod
  50 : C     element XQ4R (2D rupture) ou  element XC8R (3D rupture)
  51 :       IF (mele.NE.263 .and. mele.NE.264) then
  51 :         call erreur (21)
  52 :         RETURN
  53 :       ENDIF
  54 : 
  55 : c*      mptval=ivacar
  56 : c*      segact mptval
  57 : 
  58 : Ccccc on initialise LOCIRI
  59 :       do i1=1,10
  60 :        do i2=1,(1+NBENRMAX)
  61 :          LOCIRI(i1,i2) = 0
  62 :        enddo
  63 :       enddo
  64 : C
  65 : ccccc Appel au calcul des rigidites elementaires
  65 :        call rigix(ivamat,ivacar,NMATT,CMATE,
  66 :      &            imodel,IPINF,LOCIRI,NBGMAT,NELMAT,IMAT)
  67 : * as 2009/09/03 : ajout de IMAT en entrée de RIGIX
  68 : 
  69 : ccccc de combien faut-il augmenter INFELE ?
  70 : c      write(6,*) 'LOCIRI=',(LOCIRI(1,iou),iou=1,5)
  71 :       nrigsup = -1
  72 :       do i=1,(1+NBENRMAX)
  73 :         if (LOCIRI(1,i).ne.0)  nrigsup=nrigsup+1
  74 :       enddo
  75 :       if (nrigsup.eq.-1) then
  76 :        write(*,*) 'on n a meme pas reussi a construire des rigidite',
  77 :      & 'associes aux ddl std'
  77 :        CALL ERREUR(21)
  78 :        return
  79 :       endif
  80 : 
  81 : c      write(*,*) 'ccccc on ouvre en modification MRIGID'
  82 :       MRIGID=IPOI6
  83 :       segact,MRIGID*mod
  84 : 
  85 :       NRIGE   = IRIGEL(/1)
  86 :       nrigini = IRIGEL(/2)
  87 :       NRIGEL  = nrigini + nrigsup
  88 :       if (nrigsup.gt.0) then
  89 : C       write(ioimp,*) 'c       modification de la taille de MRIGID de RIGI'
  90 : C     &                ,isou,'->',isou+nrigsup
  91 : c       write(ioimp,*) 'on doit augmenter IRIGEL de',nrigsup,
  92 : c     & ' rigidites elementaires'
  93 :         segadj,MRIGID
  94 :       ENDIF
  95 : c      write(*,*) 'ccccc remplissage de MRIGID'
  96 : 
  97 : c  Cas ou il ya une partie std -----------------------
  98 :       IF (LOCIRI(1,1).ne.0) THEN
  99 :       
 100 : c   + partie non enrichie (=std)
 101 :         do i1 = 1, NRIGE
 102 :           IRIGEL(i1,isou)=LOCIRI(i1,1)
 103 :         enddo
 104 :         COERIG(isou)= 1.D0
 105 : 
 106 : c   + partie enrichie
 107 :         if (nrigsup.gt.0) then
 108 :           ia = isou
 109 :           iloc = 1
 110 :           do i = 1, nrigsup
 111 :             ia = ia + 1
 112 : c         petit ajout pour le cas ou on a "sauté" le H-enrichissement
 113 :  1000       continue
 114 :             iloc = iloc + 1
 115 :             if( (LOCIRI(1,iloc)) .eq. 0)    goto 1000
 116 :             do i1 = 1,NRIGE
 117 :               IRIGEL(i1,ia) = LOCIRI(i1,iloc)
 118 :             enddo
 119 :             COERIG(ia)= 1.D0
 120 :           enddo
 121 :           isou = isou + nrigsup
 122 :         endif 
 123 :         
 124 : c   Cas ou il n y a pas (plus) de partie std -----------------------
 125 :       ELSE
 126 :       
 127 : c   + partie enrichie
 128 :         ia = isou - 1
 129 :         iloc = 1
 130 :         do i=0, nrigsup
 131 :           ia = ia + 1
 132 : c         petit ajout pour le cas ou on a "sauté" le H-enrichissement
 133 :  2000       continue
 134 :             iloc = iloc + 1
 135 :           if( (LOCIRI(1,iloc)) .eq. 0)    goto 2000
 136 :           do i1=1,NRIGE
 137 :             IRIGEL(i1,ia) = LOCIRI(i1,iloc)
 138 :           enddo
 139 :           COERIG(ia)= 1.D0
 140 :         enddo
 141 :         isou = isou + nrigsup
 142 : 
 143 :       ENDIF 
 144 : *
 145 : c      write(ioimp,*) 'IRIGEL=',(IRIGEL(1,iou),iou=1,NRIGEL)
 146 : c
 147 :       return
 148 :       end
 149 : 
 150 :  

© Cast3M 2003 - All rights reserved.
Disclaimer