Télécharger dbblx.eso

Retour à la liste

Numérotation des lignes :

dbblx
  1. C DBBLX SOURCE PV 21/04/26 21:15:08 10866
  2. * dedouble les multiplicateurs de Lagrange
  3. *
  4. subroutine dbblx(mrigid,lagdua)
  5.  
  6. IMPLICIT INTEGER(I-N)
  7. IMPLICIT REAL*8 (A-H,O-Z)
  8.  
  9.  
  10. -INC PPARAM
  11. -INC CCOPTIO
  12. -INC SMCOORD
  13. -INC SMRIGID
  14. -INC SMELEME
  15. * write(6,*) ' dans dbblx '
  16. idimp1 = idim + 1
  17.  
  18. segact mcoord*mod
  19. nbini = nbpts
  20.  
  21. nbsous = 0
  22. nbref = 0
  23. nbnn = 2
  24. nbelem = 0
  25. segini,ipt8
  26. ipt8.itypel = 2
  27. nbele8 = nbelem
  28.  
  29. segact mrigid*mod
  30. nrigel = irigel(/2)
  31.  
  32. C Boucle d'activation et AJUSTEMENT MCOORD en 1 coup
  33. do 9 ir = 1, nrigel
  34. ipt1 = irigel(1,ir)
  35. segact ipt1
  36. i_z = ipt1.itypel
  37. if (i_z .ne. 22) goto 9
  38. nbpts = nbpts + ipt1.num(/2)
  39. 9 continue
  40. segadj,mcoord
  41.  
  42. nbpts=nbini
  43. do 10 ir = 1, nrigel
  44. ipt1 = irigel(1,ir)
  45. segact ipt1
  46. i_z = ipt1.itypel
  47. * write(6,*) ' dbblx itypel ',ipt1.itypel
  48. if (i_z .ne. 22) goto 10
  49. * write(6,*) ' dbblx dedoublement ',ir
  50. segini,meleme=ipt1
  51. * write(6,*) ' dbblx ipt1 meleme ',ipt1,meleme
  52. itypel=49
  53. nbsous = 0
  54. nbref = 0
  55. nbnn = meleme.num(/1)+1
  56. nbelem = meleme.num(/2)
  57. segadj meleme
  58. nbsup = nbelem
  59.  
  60. nbpts0 = nbpts
  61. nbpts = nbpts0 + nbsup
  62.  
  63. do 100 j = 1, nbsup
  64. do 120 i = nbnn,3,-1
  65. meleme.num(i,j) = meleme.num(i-1,j)
  66. 120 continue
  67. meleme.num(2,j) = nbpts0 + j
  68. ip2 = (meleme.num(2,j)-1) * idimp1
  69. ip1 = (meleme.num(1,j)-1) * idimp1
  70. do k = 1, idimp1
  71. xcoor(ip2+k) = xcoor(ip1+k)
  72. enddo
  73. 100 continue
  74. irigel(1,ir) = meleme
  75. ** on garde la liste des noeuds rajoutés
  76. * nbsous = 0
  77. * nbref = 0
  78. nbnn = 2
  79. nbelem = nbele8 + nbsup
  80. segadj ipt8
  81. do 130 j = 1, nbsup
  82. j8 = nbele8 + j
  83. ipt8.num(1,j8) = meleme.num(1,j)
  84. ipt8.num(2,j8) = meleme.num(2,j)
  85. 130 continue
  86. nbele8 = nbelem
  87. *
  88. des1 = irigel(3,ir)
  89. segini,descr=des1
  90. segdes,des1
  91. nligrp = lisinc(/2)+1
  92. nligrd = lisdua(/2)+1
  93. segadj descr
  94. do 200 i = nligrp, 3, -1
  95. lisinc(i) = lisinc(i-1)
  96. noelep(i) = noelep(i-1)+1
  97. 200 continue
  98. lisinc(2) = 'LX'
  99. noelep(2) = 2
  100. do 210 i = nligrd, 3, -1
  101. lisdua(i) = lisdua(i-1)
  102. noeled(i) = noeled(i-1)+1
  103. 210 continue
  104. lisdua(2)='FLX'
  105. noeled(2)=2
  106. segdes,descr
  107. irigel(3,ir) = descr
  108.  
  109. xmatr1 = irigel(4,ir)
  110. segini,xmatri=xmatr1
  111. segdes,xmatr1
  112. nelrig = re(/3)
  113. segadj,xmatri
  114. do 300 im = 1, nelrig
  115. do i = nligrp, 1, -1
  116. do j = nligrd, 2, -1
  117. * re(i,j,im) = re(i,j-1,im)
  118. re(j,i,im) = re(j-1,i,im)
  119. enddo
  120. enddo
  121. do j = nligrd, 1, -1
  122. do i = nligrp, 2, -1
  123. * re(i,j,im) = re(i-1,j,im)
  124. re(j,i,im) = re(j,i-1,im)
  125. enddo
  126. enddo
  127. * normaliser les nouveaux termes par rapport au max de la relation
  128. xnorm=0.D0
  129. do i1=1,re(/1)
  130. do i2=1,re(/2)
  131. xnorm=max(abs(re(i1,i2,im)),xnorm)
  132. enddo
  133. enddo
  134. re(1,1,im) = -xnorm+re(1,1,im)
  135. re(1,2,im) = +xnorm
  136. re(2,1,im) = +xnorm
  137. re(2,2,im) = re(1,1,im)
  138. 300 continue
  139. segdes,xmatri
  140. irigel(4,ir) = xmatri
  141.  
  142. 10 continue
  143. *
  144. *
  145. if (nbele8.eq.0) then
  146. segsup,ipt8
  147. ipt8 = 0
  148. endif
  149.  
  150. lagdua = ipt8
  151.  
  152. end
  153.  
  154.  
  155.  
  156.  
  157.  
  158.  
  159.  
  160.  
  161.  

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