Télécharger dbblx.eso

Retour à la liste

Numérotation des lignes :

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

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