Télécharger verlag.eso

Retour à la liste

Numérotation des lignes :

verlag
  1. C VERLAG SOURCE FANDEUR 22/01/19 21:15:18 11256
  2. subroutine verlag(mrigid)
  3. * verification que les noeuds supports des LX n'aparaissent
  4. * qu'une seule fois
  5. * si ce n'est pas le cas et si c'est le meme descr, fusion des raideurs elementaires
  6. IMPLICIT INTEGER(I-N)
  7. IMPLICIT REAL*8(A-H,O-Z)
  8. -INC SMRIGID
  9. -INC PPARAM
  10. -INC CCOPTIO
  11. -INC SMCHPOI
  12. -INC SMCOORD
  13. -INC SMELEME
  14. * tableau de compression general
  15. segment ncpr(nbpts)
  16. * tableau ir par lx
  17. segment lxir(nbpt)
  18. * tableau elem par lx
  19. segment lxel(nbpt)
  20. * tableau descripteur par lx
  21. segment lxde(nbpt)
  22. *
  23. segini ncpr
  24. nbpt=0
  25. segact mrigid
  26. do irig=1,irigel(/2)
  27. meleme=irigel(1,irig)
  28. segact meleme
  29. if (itypel.eq.22) then
  30. do iel=1,num(/2)
  31. ipt=num(1,iel)
  32. if (ncpr(ipt).eq.0) then
  33. nbpt=nbpt+1
  34. ncpr(num(1,iel))=nbpt
  35. endif
  36. enddo
  37. endif
  38. enddo
  39. *
  40. segini lxir,lxel,lxde
  41. nrigel=0
  42. segini ri1
  43. ri1.mtymat = 'VERLAG'
  44. ri1.iforig = mrigid.iforig
  45. do ir=1,irigel(/2)
  46. meleme=irigel(1,ir)
  47. descr =irigel(3,ir)
  48. xmatri=irigel(4,ir)
  49. ** write(6,*) ' verlag ir meleme xmatri',ir,meleme,xmatri
  50. segact xmatri
  51. if(itypel.eq.22) then
  52. do iel=1,num(/2)
  53. lx=ncpr(num(1,iel))
  54. if (lxir(lx).eq.0) then
  55. lxir(lx)=ir
  56. lxel(lx)=iel
  57. lxde(lx)=descr
  58. * write(6,*) 'premier passage ',iel,lx,lxir(lx),lxel(lx)
  59. else
  60. * doit t'on faire une fusion?
  61. if (lxde(lx).ne.descr.or.lxir(lx).lt.0) then
  62. write(6,*) 'lxde lxel lxir',ir,lx,lxde(lx),lxel(lx),lxir(lx)
  63. interr(1)=num(2,iel)
  64. interr(2)=num(1,iel)
  65. call erreur(919)
  66. return
  67. endif
  68. ** write(6,*) 'fusion avec ',iel,lx,lxir(lx),lxel(lx)
  69. * ok on fusionne
  70. nrigel=nrigel+1
  71. segadj ri1
  72. nbsous=0
  73. nbref=0
  74. nbelem=1
  75. nbnn=num(/1)
  76. segini ipt1
  77. ipt1.itypel=22
  78. ipt2=irigel(1,lxir(lx))
  79. segact ipt2
  80. do ip=1,nbnn
  81. ipt1.num(ip,1)=num(ip,iel)
  82. if(ipt2.num(ip,lxel(lx)).ne.num(ip,iel))call erreur(919)
  83. enddo
  84. ri1.irigel(1,nrigel)=ipt1
  85. ri1.irigel(3,nrigel)=descr
  86. xmatr1=irigel(4,lxir(lx))
  87. segact xmatr1
  88. ielo=lxel(lx)
  89. nelrig=1
  90. nligrd=re(/1)
  91. nligrp=re(/2)
  92. if(nligrd.ne.xmatr1.re(/1).or.nligrp.ne.xmatr1.re(/2)) then
  93. call erreur(919)
  94. endif
  95. ** write(6,*) 'xmatr2 nligrd,nligrp,nelrig ',
  96. ** > nligrd,nligrp,nelrig
  97. segini xmatr2
  98. xmatr2.symre=max(symre,xmatr1.symre)
  99. do ip=1,re(/2)
  100. do id=1,re(/1)
  101. xmatr2.re(id,ip,1)=re(id,ip,iel)*coerig(ir)+
  102. > xmatr1.re(id,ip,ielo)*coerig(lxir(lx))
  103. enddo
  104. enddo
  105. ri1.irigel(4,nrigel)=xmatr2
  106. ri1.coerig(nrigel)=1.d0
  107. ri1.irigel(6,nrigel)=irigel(6,ir)
  108. ri1.irigel(7,nrigel)=max(irigel(7,ir),
  109. > irigel(7,lxir(lx)))
  110. ri1.irigel(8,nrigel)=max(irigel(8,ir),
  111. > irigel(8,lxir(lx)))
  112. * flag raideur a supprimer
  113. lxir(lx)=-nrigel
  114. endif
  115. enddo
  116. endif
  117. enddo
  118. * ri1 contient les matrices fusionnees
  119. * il ne reste plus qu'a comprimer mrigid
  120. if(nrigel.eq.0) then
  121. segsup ncpr,lxir,lxel,lxde
  122. segsup ri1
  123. return
  124. endif
  125. nrigcr=nrigel
  126. nrigel=nrigcr+irigel(/2)
  127. segadj ri1
  128. ir2=nrigcr
  129. do ir=1,irigel(/2)
  130. meleme=irigel(1,ir)
  131. xmatri=irigel(4,ir)
  132. iel2=0
  133. * si pas de lx, on ne fait rien
  134. if(itypel.ne.22) then
  135. iel2=num(/2)
  136. else
  137. do iel=1,num(/2)
  138. if(lxir(ncpr(num(1,iel))).gt.0) iel2=iel2+1
  139. enddo
  140. endif
  141. if (iel2.ne.num(/2)) then
  142. nbsous=0
  143. nbref=0
  144. nbnn=num(/1)
  145. nbelem=iel2
  146. segini ipt1
  147. ipt1.itypel=itypel
  148. nligrd=re(/1)
  149. nligrp=re(/2)
  150. nelrig=iel2
  151. ** write(6,*) 'verlag ipt1 nbnn nbelem ',ipt1,nbnn,nbelem
  152. segini xmatr1
  153. xmatr1.symre=symre
  154. iel2=0
  155. do iel=1,num(/2)
  156. if(lxir(ncpr(num(1,iel))).gt.0) then
  157. iel2=iel2+1
  158. do ip=1,num(/1)
  159. ipt1.num(ip,iel2)=num(ip,iel)
  160. enddo
  161. ** write(6,*) (ipt1.num(ii,iel2),ii=1,nbnn)
  162. do ip=1,nligrp
  163. do id=1,nligrd
  164. xmatr1.re(id,ip,iel2)=re(id,ip,iel)
  165. enddo
  166. enddo
  167. endif
  168. enddo
  169. if(nbelem.ne.0) then
  170. ir2=ir2+1
  171. ri1.irigel(1,ir2)=ipt1
  172. ri1.irigel(4,ir2)=xmatr1
  173. ri1.irigel(7,ir2)=xmatr1.symre
  174. endif
  175. else
  176. ir2=ir2+1
  177. nbelem=num(/2)
  178. ri1.irigel(1,ir2)=meleme
  179. ri1.irigel(4,ir2)=xmatri
  180. ri1.irigel(7,ir2)=symre
  181. endif
  182. if(nbelem.ne.0) then
  183. ri1.coerig(ir2)=coerig(ir)
  184. ri1.irigel(3,ir2)=irigel(3,ir)
  185. ri1.irigel(5,ir2)=irigel(5,ir)
  186. ri1.irigel(6,ir2)=irigel(6,ir)
  187. ri1.irigel(8,ir2)=irigel(8,ir)
  188. endif
  189. xmatri=ri1.irigel(4,ir2)
  190. ** write(6,*) 'ir2 xmatr1 irigel ',ir2,xmatri.symre,
  191. ** > ri1.irigel(7,ir2)
  192. enddo
  193. nrigel=ir2
  194. segadj ri1
  195. mrigid=ri1
  196. * call prrigi(mrigid,0)
  197. segsup ncpr,lxir,lxel,lxde
  198. end
  199.  
  200.  
  201.  

© Cast3M 2003 - Tous droits réservés.
Mentions légales