Télécharger resouc.eso

Retour à la liste

Numérotation des lignes :

resouc
  1. C RESOUC SOURCE MB234859 25/01/03 21:15:25 12105
  2. SUBROUTINE RESOUC(MRIGID,MRIGIC,IDEMEM,IDEME0,IDEME1,
  3. > NOUNIL,BDBLX,ICOND,IMULT,IF,IMTVID,NELIM)
  4. C----------------------------------------------------------------------
  5. C Subroutine dont le role est de :
  6. C - choisir les ddls a eliminer
  7. C - retirer les ddls elimines des autres rigidites et construire la
  8. C rigidite condensee
  9. C - modifier le second membre du fait de l'elimination de ddls
  10. C (ajout de forces et modification du jeu des relations ou un ddl
  11. C elimine intervient)
  12. C
  13. C Les multiplicateurs de Lagrange sont dedoubles.
  14. C
  15. C Entrees :
  16. C ---------
  17. C mrigid : pointeur sur la rigidite totale
  18. C idemem : tableau contenant le(s) second(s) membre(s)
  19. C nounil : vaut 0 si les conditions unilaterales doivent etre
  20. C traitees comme telles
  21. C nelim : vaut 0 s'il ne faut pas eliminer
  22. C if : passe d'elimination
  23. C bdblx : true si il faut dedoubler les mult. de Lagrange
  24. C
  25. C Sorties :
  26. C ---------
  27. C mrigic : pointeur sur la rigidite condensee
  28. C ideme0 : tableau contenant pour le(s) second(s) membre(s) les
  29. C valeurs des secondes membres a la passe d'elimination if
  30. C ideme1 : tableau contenant pour le(s) second(s) membre(s) les
  31. C valeurs de chaque condition eliminee a la passe d'elimination if
  32. C idemem : tableau contenant le(s) second(s) membre(s) apres la
  33. C passe d'elimiation if
  34. C imult : nombre de ddl(s) elimine(s)
  35. C icond : nombre de condition(s) restante(s)
  36. C imtvid : vaut 1 si la matrice condensee est vide
  37. C
  38. C----------------------------------------------------------------------
  39. IMPLICIT INTEGER(I-N)
  40. IMPLICIT REAL*8 (A-H,O-Z)
  41. C
  42. -INC PPARAM
  43. -INC CCOPTIO
  44. -INC SMRIGID
  45. -INC SMCHPOI
  46. -INC SMELEME
  47. C
  48. LOGICAL bdblx
  49. C
  50. segment idemem(0)
  51. segment ideme0(idemem(/1),30)
  52. segment ideme1(idemem(/1),30)
  53. C
  54. segact mrigid
  55. C write(6,*) ' resouc jrcond ichole ',jrcond,ichole,if
  56. C -----------------------------------------------------------------
  57. C Condensation des rigidites
  58. C -----------------------------------------------------------------
  59. if (jrcond.eq.0.and.ichole.eq.0) then
  60. C
  61. call separm(mrigid,ri1,ri2,nounil,bdblx,nelim,if)
  62. if(ierr.ne.0) return
  63. C
  64. call fusrig(ri1,ri2,ipoir0)
  65. if(ierr.ne.0) return
  66. C
  67. call depen3(ri1,ri6)
  68. if(ierr.ne.0) return
  69. C
  70. call scnd2(ri2,ri6,ri3)
  71. if(ierr.ne.0) return
  72. segact,ri3*mod
  73. ri3.mtymat='TEMPORAI'
  74. C
  75. call dual00(ri6,ri5)
  76. if(ierr.ne.0) return
  77. C
  78. segact mrigid*mod
  79. jrtot=ipoir0
  80. jrelim=ri1
  81. jrgard=ri2
  82. jrcond=ri3
  83. jrdepd=ri5
  84. jrdepp=ri6
  85. lagdua=0
  86. if (bdblx) then
  87. lagdua=ri2.imlag
  88. endif
  89. imlag=lagdua
  90. segact ri3*mod
  91. ri3.jrsup=mrigid
  92. ri3.imlag=imlag
  93. else
  94. ri1=jrelim
  95. ri2=jrgard
  96. ri3=jrcond
  97. ri5=jrdepd
  98. ri6=jrdepp
  99. lagdua=imlag
  100. endif
  101. mrigic=ri3
  102. segact,ri3
  103. C -----------------------------------------------------------------
  104. C Nombre de ddl elimine
  105. segact ri1
  106. imult=0
  107. if (ri1.irigel(/2).gt.0) then
  108. do ir=1,ri1.irigel(/2)
  109. ipt1=ri1.irigel(1,ir)
  110. segact ipt1
  111. imult=imult+ipt1.num(/2)
  112. enddo
  113. endif
  114. C
  115. C Nombre de conditions restantes dans ri3
  116. icond=0
  117. if (ri3.irigel(/2).eq.0) then
  118. imtvid=1
  119. * write(6,*) ' matrice vide ri3 '
  120. endif
  121. do ir=1,ri3.irigel(/2)
  122. ipt3=ri3.irigel(1,ir)
  123. segact ipt3
  124. if (ipt3.itypel.eq.22) icond=icond+ipt3.num(/2)
  125. enddo
  126. C -----------------------------------------------------------------
  127. C Condensation des second membres
  128. C -----------------------------------------------------------------
  129. do 1050 ig=1,idemem(/1)
  130. ichp2= idemem(ig)
  131. ideme0(ig,if)=ichp2
  132. * write(6,*) 'ideme0 ig if ',ideme0(ig,if),ig,if
  133. C Transferer les valeurs imposees des relations sur les inconnues à éliminer
  134. call transr(ichp2,ri1,ichp3)
  135. if(ierr.ne.0) return
  136. ideme1(ig,if)=ichp3
  137. * write(6,*) 'ideme1 ig if ',ideme1(ig,if),ig,if
  138. call mucpri(ichp3,ri2,ichp4)
  139. if(ierr.ne.0) return
  140. * Si lagdua /= 0, ri2 est deja dualise et il faut dedualiser ichp4
  141. call dbbcd(ichp4,lagdua)
  142. if(ierr.ne.0) return
  143. call adchpo(ichp2,ichp4,ichp1,1.D0,-1.0D0)
  144. if(ierr.ne.0) return
  145. call dtchpo(ichp4)
  146. call mucpri(ichp1,ri5,ichp2)
  147. if(ierr.ne.0) return
  148. C ichp1 et ichp2 sont censes etre de nature DISCRETE (JATTRI(1)=2)
  149. call adchpo(ichp1,ichp2,ichp3,1.D0,1.D0)
  150. if(ierr.ne.0) return
  151. if (ichp2.ne.ichp3) call dtchpo(ichp2)
  152. C Dedoublement des mult de lagrange
  153. call dbbch(ichp3,lagdua)
  154. * write(6,*) ' appel dbbch ',lagdua
  155. if(ierr.ne.0) return
  156. idemem(ig)=ichp3
  157. 1050 CONTINUE
  158. C -----------------------------------------------------------------
  159. segdes ri1,ri2,ri3,ri5,ri6,mrigid
  160. RETURN
  161. END
  162.  
  163.  

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