Download dbbsup.eso

Back to the list

   1 : C DBBSUP    SOURCE    CHAT      09/10/09    21:16:56     6519           
   2 : C  suppression des doubles multiplicateurs de L sur une restitution
   3 : C
   4 :       subroutine dbbsup(icolac)
   5 :       IMPLICIT INTEGER(I-N)
   6 :       IMPLICIT REAL*8 (A-H,O-Z)
   7 : -INC TMCOLAC
   8 : -INC SMELEME
   9 : -INC SMRIGID
  10 : -INC SMCHPOI
  11 : -INC SMCOORD
  12 : -INC CCOPTIO
  13 :       segment trav
  14 :        integer lag1(xcoor(/1)/(idim+1))
  15 :        integer lag2(xcoor(/1)/(idim+1))
  16 :       endsegment
  17 : 
  18 :       write (6,*) ' fusion des doubles multiplicateurs de Lagrange'
  19 :       segact mcoord
  20 :       segini trav
  21 :       nbnn=2
  22 :       nbelem=0
  23 :       nbsous=0
  24 :       nbref=0
  25 :       segini ipt8
  26 :       ipt8.itypel=2
  27 :       segact icolac
  28 : *    
  29 : *  on construit d'abord le meleme des couples de multiplicateurs
  30 : *
  31 :       ITLACC=KCOLA(1)
  32 :       segact itlacc
  33 :       IF (ITLAC(/1).EQ.0) GOTO 20
  34 :       DO 12 I=1,ITLAC(/1)
  35 :        MELEME=ITLAC(I)
  36 :        IF (meleme.eq.0) goto 12
  37 :        segact meleme*mod
  38 :        if (itypel.ne.22) then
  39 :         segdes meleme
  40 :         goto 12
  41 :        endif
  42 : *  ok on supprime le 2eme noeud
  43 :        nbele=num(/2)
  44 :        nbelem=nbelem+nbele
  45 :        nbnn=2
  46 :        segadj ipt8
  47 :        do 30 ie=1,nbele
  48 :        ipt8.num(1,nbelem-nbele+ie)=num(1,ie)
  49 :        ipt8.num(2,nbelem-nbele+ie)=num(2,ie)
  50 :        lag1(num(1,ie))=num(2,ie)
  51 :        lag2(num(2,ie))=num(1,ie)
  52 : *      do 40 in=2,num(/1)-1
  53 : *       num(in,ie)=num(in+1,ie)
  54 : * 40   continue
  55 :   30   continue
  56 : *      nbelem=num(/2)
  57 : *      nbnn=num(/1)-1
  58 : *      segadj meleme
  59 :        segdes meleme
  60 :   12   continue
  61 :    20  continue
  62 : *  on elimine dans les chpoint
  63 :        itlacc=kcola(2)
  64 :        segact itlacc
  65 :        if (itlac(/1).eq.0) goto 90
  66 :        do 100 i=1,itlac(/1)
  67 :        mchpoi=itlac(i)
  68 :        segact mchpoi
  69 :        do 110 isoupo=1,ipchp(/1)
  70 :         msoupo=ipchp(isoupo)
  71 :         segact msoupo
  72 :         if (nocomp(/2).ne.1) goto 110
  73 :         mul=0
  74 :         if (nocomp(1).eq.'LX') mul=2
  75 :         if (nocomp(1).eq.'FLX') mul=1
  76 :         if (mul.eq.0) goto 110 
  77 :         write (6,*) ' conversion du mpoval ',ipoval,nocomp(1)
  78 :         meleme=igeoc
  79 :         segact meleme
  80 :         mpoval=ipoval
  81 :         segact mpoval*mod
  82 :         ict=0
  83 :         do 130 iv=1,vpocha(/1)
  84 :           if (lag2(num(1,iv)).ne.0) goto 130
  85 :           val=vpocha(iv,1)
  86 :           if (lag1(num(1,iv)).ne.0) val=mul*val
  87 :           ict=ict+1
  88 :           vpocha(iv,1)=val
  89 :  130    continue
  90 :         n=ict
  91 :         nc=1
  92 :         segadj mpoval
  93 :         segdes mpoval,meleme
  94 :  110  continue
  95 :  100  continue
  96 :   90  continue
  97 : *  on élimine dans les raideurs
  98 :       itlacc=kcola(3)
  99 :       segact itlacc
 100 :       if (itlac(/1).eq.0) goto 290
 101 :       do 300 i=1,itlac(/1)
 102 :       mrigid=itlac(i)
 103 :       segact mrigid
 104 :       do 310 ir=1,irigel(/2)
 105 :       descr=irigel(3,ir)
 106 :       segact descr*mod
 107 :       if (lisinc(2).ne.'LX') goto 311
 108 :       write (6,*) 'conversion de la raideur ',mrigid,ir
 109 :       do 320 il=2,lisinc(/2)-1
 110 :        lisinc(il)=lisinc(il+1)
 111 :        lisdua(il)=lisdua(il+1)
 112 :        noelep(il)=noelep(il+1)-1
 113 :        noeled(il)=noeled(il+1)-1
 114 :  320  continue
 115 :       nligrp=lisinc(/2)-1
 116 :       nligrd=nligrp
 117 :       segadj descr
 118 :       xmatri=irigel(4,ir)
 119 :       segact xmatri*mod
 120 :           nelrig=re(/3)
 121 :           if (re(/1).ne.nligrd) then
 122 :           segadj xmatri
 123 :       do 330 im=1,nelrig
 124 : *      xmatri=imattt(im)
 125 : *      segact xmatri*mod
 126 : *  test si le xmatri a déjà été converti
 127 :       if (re(/1).eq.nligrd) goto 341
 128 :       do 340 il=1,nligrd
 129 :       do 340 ic=1,nligrd
 130 :       re(il,ic,im)=re(il+1,ic+1,im)
 131 :  340  continue
 132 :       re(1,1,im)=0.d0
 133 : *      segadj xmatri
 134 :  341  continue
 135 : *      segdes xmatri
 136 :  330  continue
 137 :       endif
 138 :       segdes xmatri
 139 :  311  continue
 140 :       segdes descr
 141 :  310  continue
 142 :       segdes mrigid
 143 :  300  continue
 144 :  290  continue
 145 : *  on elimine dans les maillages en dernier
 146 :       itlacc=kcola(1)
 147 :       segact itlacc
 148 :       if (itlac(/1).eq.0) goto 190
 149 :       do 200 i=1,itlac(/1)
 150 :        meleme=itlac(i)
 151 :        segact meleme*mod
 152 :        if (itypel.ne.1 ) goto 210
 153 :        ict=0
 154 :        do 220 j=1,num(/2)
 155 :          if (lag2(num(1,j)).ne.0) goto 220
 156 :          ict=ict+1
 157 :          num(1,ict)=num(1,j)
 158 :  220   continue
 159 :        if (nbelem.ne.ict) 
 160 :      >   write (6,*) ' conversion du meleme poin1 ',meleme
 161 :        nbnn=1
 162 :        nbelem=ict
 163 :        nbsous=0
 164 :        nbref=0
 165 :        segadj meleme
 166 :  210   continue
 167 :        if (itypel.ne.22) goto 230
 168 :        write (6,*) ' conversion du meleme type 22 ',meleme
 169 :        do 240 j=1,num(/2)
 170 :        do 240 ip=num(/1)-1,2,-1
 171 :         num(ip,j)=num(ip+1,j)
 172 :  240   continue
 173 :        nbnn=num(/1)-1
 174 :        nbelem=num(/2)
 175 :        nbsous=0
 176 :        nbref=0
 177 :        segadj meleme
 178 :  230   continue
 179 :        segdes meleme
 180 :  200  continue 
 181 :  190  continue
 182 :       segsup trav
 183 : *  
 184 :        return
 185 :        end
 186 :                                                                   
 187 :  
 188 :  
 189 :  
 190 :  
 191 :  
 192 :  
 193 :  

© Cast3M 2003 - All rights reserved.
Disclaimer