Download frig.eso

Back to the list

   1 : C FRIG      SOURCE    FANDEUR   11/10/07    21:15:27     7159           
   2 : 
   3 :       SUBROUTINE FRIG
   4 : 
   5 :       IMPLICIT INTEGER(I-N)
   6 :       IMPLICIT REAL*8(A-H,O-Z)
   7 : 
   8 : *  Ce sous-programme calcule la raideur de frottement.
   9 : *  Il a besoin pour cela du maillage de frottement et de la raideur
  10 : *  de contact (ou la raideur totale si c'est plus simple)
  11 : 
  12 : -INC CCOPTIO
  13 : -INC CCREEL
  14 : 
  15 : -INC SMCHPOI
  16 : -INC SMCOORD
  17 : -INC SMELEME
  18 : -INC SMMODEL
  19 : -INC SMRIGID
  20 : 
  21 :       logical ltelq
  22 : 
  23 :       idimp1 = IDIM + 1
  24 : *
  25 : * Test sur les options de calcul
  26 :       if (idim .ne. 3) then
  27 :         if (ifomod .ne. -1 .and. ifomod .ne. 0) then
  27 :           call erreur(710)
  28 :           return
  29 :         endif
  30 :       endif
  31 : *
  32 : * Lecture obligatoire du modele de frottement
  33 : *
  33 :       call LIROBJ('MMODEL' , modini,1,iretou)
  34 :       if (ierr.ne.0) return
  35 : *
  36 : * Quelques initialisations
  37 : *
  38 :       mmodel = modini
  39 :       segact mmodel
  40 :       nsous = kmodel(/1)
  41 :       n1 = nsous
  42 :       segini,mmode1
  43 :       segini,mmode2
  44 : *
  45 : * Travail préparatoire de separation des modeles de frottement
  46 : *
  47 :       icoulo = 0
  48 :       icable = 0
  49 :       ipp2 = 0
  50 :       ltelq=.false.
  51 :       do 700 imod = 1, nsous
  52 :         imodel= kmodel(imod)
  53 :         segact imodel
  54 :         if (matmod(1).eq.'COULOMB') then
  55 :           icoulo=icoulo+1
  56 :           mmode1.kmodel(icoulo) = imodel
  57 : *  modele(s) de Coulomb : on agglomere les maillages sous-jacents
  58 :           if (icoulo.eq.1) then
  59 :             ipp2 = imamod
  60 :           else
  61 :             meleme = ipp2
  62 :             ipp1 = imamod
  62 :             call fuse(meleme,ipp1,ipp2,ltelq)
  63 :             if (icoulo.ge.3) segsup,meleme
  64 :           endif
  65 :         else if (matmod(1).eq.'FROCABLE') then
  66 :           icable = icable+1
  67 :           mmode2.kmodel(icable) = imodel
  68 :         else
  69 :           segdes,imodel
  70 :         endif
  71 :  700  continue
  72 :       segdes mmodel
  73 :       n1 = icoulo
  74 :       segadj,mmode1
  75 :       modcou = mmode1
  76 :       n1 = icable
  77 :       segadj,mmode2
  78 :       modcab = mmode2
  79 :       if (icoulo.eq.0 .and. icable.eq.0) then
  79 :         call erreur(21)
  80 :         goto 9000
  81 :       endif
  82 : *
  83 : * Lecture conditionnelle des arguments (selon les modeles de frottement)
  84 : *
  85 :       lecond = 0
  86 :       if (icoulo.ne.0) lecond = 1
  87 : *
  88 :       iraidc = 0
  89 :       ichjeu = 0
  90 : *
  91 : * Lecture de la raideur de contact
  91 :       call lirobj('RIGIDITE',iraidc,lecond,iretou)
  92 :       if (ierr.ne.0) GOTO 9000
  93 : *
  94 : * Lecture du champ de jeux
  94 :       call lirobj('CHPOINT ',ichjeu,lecond,iretou)
  95 :       if (ierr.ne.0) GOTO 9000
  96 : *
  97 : * Initialisation de la raideur (totale) de frottement
  98 : *
  99 :       mrigid = 0
 100 : *
 101 : * Traitement des modeles de Coulomb
 102 : *
 103 :       if (icoulo.ne.0) then
 104 :         ri1 = 0
 105 :         meleme = ipp2
 106 :         if (idim .eq. 3) then
 106 :           call frig3C(meleme,iraidc,ichjeu, ri1)
 107 :         else
 107 :           call frig2C(meleme,iraidc,ichjeu, ri1)
 108 :         endif
 109 :         if (icoulo.ge.2) segsup meleme
 110 :         if (ierr.ne.0 .or. ri1.eq.0) goto 9000
 111 :         mrigid = ri1
 112 :       endif
 113 : *
 114 : * Traitement des modeles Frocable
 115 : *
 116 :       if (icable.ne.0) then
 117 :         mmodel = modcab
 118 : * Petit modele unitaire local (a detruire en fin de traitement)
 119 :         n1=1
 120 :         segini,mmode2
 121 : * Option accro 'GLISS'
 122 :         igliss=1
 123 :         DO 500 imod=1,icable
 124 :           imodel = kmodel(imod)
 125 : C*        segact imodel
 126 :           segact,mmode2*mod
 127 :           mmode2.kmodel(1)=imodel
 128 :           do io=1,ivamod(/1)
 129 :             if (tymode(io).eq.'MAILLAGE') go to 510
 130 :           enddo
 130 :           call erreur(16)
 131 :           goto 9000
 132 :  510      continue
 133 :           ri2 = 0
 134 :           meleme=ivamod(io)
 134 :           call ecrobj('MAILLAGE',meleme)
 134 :           call ecrobj('MMODEL  ',mmode2)
 134 :           call accro(igliss)
 135 :           if (ierr.ne.0) goto 9000
 135 :           call lirobj('RIGIDITE',ri2,1,iretou)
 136 :           if (ierr.ne.0) goto 9000
 137 : c*        segdes imodel (desactive par accro)
 138 : c* On fusionne ri2 dans la rigidite (totale) mrigid
 139 :           if (mrigid.eq.0) then
 140 :             mrigid = ri2
 141 :           else
 142 :             segact,mrigid*mod,ri2
 143 :             nriav  = irigel(/2)
 144 :             nrigel = nriav + ri2.irigel(/2)
 145 :             segadj,mrigid
 146 :             do io = 1, ri2.irigel(/2)
 147 :               do iu = 1, ri2.irigel(/1)
 148 :                 irigel(iu,io+nriav) = ri2.irigel(iu,io)
 149 :               enddo
 150 :               coerig(io+nriav) = ri2.coerig(io)
 151 :             enddo
 152 :             segsup ri2
 153 :           endif
 154 :  500    continue
 155 :         segdes mrigid
 156 :         segsup mmode2
 157 :       endif
 158 : *
 159 : *  traitement des modeles ...
 160 : *
 161 : * ->  Brancher ici le traitement specifique a chaque autre modele de
 162 : *     frottement qui doit fournir la rigidite de frottement associee
 163 : *     qui sera fusionnee dans la rigidite mrigid (cf. modeles frocable)
 164 : *
 165 : *  Fin du traitement :
 166 : *
 166 :       call ecrobj('RIGIDITE',mrigid)
 166 : *      call prrigi(mrigid)
 167 : 
 168 :  9000 CONTINUE
 169 :       mmode1 = modcou
 170 :       segsup,mmode1
 171 :       mmode1 = modcab
 172 :       segsup,mmode1
 173 : *
 174 :       return
 175 :       end
 176 : 
 177 :  

© Cast3M 2003 - All rights reserved.
Disclaimer