Télécharger frig2c.eso

Retour à la liste

Numérotation des lignes :

frig2c
  1. C FRIG2C SOURCE SP204843 23/03/09 21:15:03 11621
  2.  
  3. SUBROUTINE FRIG2C (maifro,IPRIGI,IPCHJE,IPRIG2)
  4.  
  5. IMPLICIT INTEGER(I-N)
  6. IMPLICIT REAL*8(A-H,O-Z)
  7.  
  8. * Ce sous-programme calcule la raideur de frottement en 2D.
  9. * il a besoin pour cela du maillage de frottement et de la raideur
  10. * de contact (ou la raideur totale si c'est plus simple)
  11.  
  12. -INC PPARAM
  13. -INC CCOPTIO
  14. -INC CCREEL
  15.  
  16. -INC SMCHPOI
  17. -INC SMELEME
  18. -INC SMRIGID
  19. -INC SMCOORD
  20.  
  21. * icpr lx du contact ==> lx du frottement
  22. segment icpr(nbpts)
  23. * xjeu champs de jeux initiaux
  24. segment xjeu(nbpts)
  25. *
  26. *
  27. * creation et remplissage de icpr
  28. *
  29. segini icpr
  30. nbp=0
  31. meleme=maifro
  32. ipt1=meleme
  33. do is=1,max(1,lisous(/1))
  34. if (lisous(/1).ne.0) ipt1=lisous(is)
  35. if (ipt1.itypel.ne.22) call erreur(16)
  36. if (ierr.ne.0) return
  37. do iel=1,ipt1.num(/2)
  38. il=ipt1.num(1,iel)
  39. if (icpr(il).eq.0) then
  40. nbp=nbp+1
  41. icpr(il)=ipt1.num(ipt1.num(/1),iel)
  42. endif
  43. if(icpr(il).ne.ipt1.num(ipt1.num(/1),iel)) call erreur(5)
  44. enddo
  45. enddo
  46.  
  47. * remplissage du champ de jeux (demi-frottement si jeu non nul)
  48.  
  49. segini xjeu
  50. mchpoi = IPCHJE
  51. iOK=0
  52. do 15 isoupo = 1, ipchp(/1)
  53. msoupo = ipchp(isoupo)
  54. DO 16 i=1,nocomp(/2)
  55. IF (NOCOMP(i).NE.'FLX ') GOTO 16
  56. mpoval=ipoval
  57. ipt8=igeoc
  58. DO 17 j=1,vpocha(/1)
  59. xjeu(ipt8.num(1,j))=vpocha(j,i)
  60. 17 CONTINUE
  61. iOK=1
  62. 16 CONTINUE
  63. 15 continue
  64. IF (iOK.NE.1) THEN
  65. MOTERR(1:4)='FLX '
  66. MOTERR(5:8)='DEPI'
  67. CALL ERREUR(77)
  68. ENDIF
  69. IF (ierr.ne.0) return
  70.  
  71.  
  72.  
  73. *
  74. * boucle sur les raideurs de contact pour les transformer en frottement
  75. *
  76. mrigid=iprigi
  77. segact,mrigid
  78. segini,ri1=mrigid
  79. do 10 ir=1,irigel(/2)
  80. ri1.irigel(1,ir)=0
  81. ri1.irigel(4,ir)=0
  82. if (irigel(6,ir).eq.0) goto 10
  83. meleme=irigel(1,ir)
  84. if (itypel.ne.22) goto 10
  85. segini,ipt1=meleme
  86. xmatri=irigel(4,ir)
  87. segini,xmatr1=xmatri
  88. do iel=1,ipt1.num(/2)
  89. * si mult de lagrange pas connu on a 0
  90. il=ipt1.num(1,iel)
  91. if=icpr(il)
  92. ipt1.num(1,iel)=if
  93. ipt1.icolor(iel)=icolor(iel)
  94. do ic=2,re(/1),2
  95. xmatr1.re(1,ic,iel)=-re(1,ic+1,iel)
  96. xmatr1.re(1,ic+1,iel)=re(1,ic,iel)
  97. xmatr1.re(ic,1,iel)=-re(ic+1,1,iel)
  98. xmatr1.re(ic+1,1,iel)=re(ic,1,iel)
  99. enddo
  100. enddo
  101. ri1.irigel(1,ir)=ipt1
  102. ri1.irigel(4,ir)=xmatr1
  103. ri1.irigel(6,ir)=2
  104. 10 continue
  105. *
  106. * boucle de compaction du resultat
  107. *
  108. mrigid=ri1
  109. irr=0
  110. do 100 ir=1,irigel(/2)
  111. meleme=irigel(1,ir)
  112. xmatri=irigel(4,ir)
  113. if (meleme.eq.0) goto 100
  114. ill=0
  115. do iel=1,num(/2)
  116. if (num(1,iel).ne.0) then
  117. ill=ill+1
  118. if (ill.ne.0) then
  119. do in=1,num(/1)
  120. num(in,ill)=num(in,iel)
  121. enddo
  122. icolor(ill)=icolor(iel)
  123. do ic=1,re(/1)
  124. re(1,ic,ill)=re(1,ic,iel)
  125. re(ic,1,ill)=re(ic,1,iel)
  126. enddo
  127. endif
  128. endif
  129. enddo
  130. if (ill.eq.0) goto 100
  131. if (ill.ne.num(/2)) then
  132. nbsous=0
  133. nbref=0
  134. nbnn=num(/1)
  135. nbelem=ill
  136. segadj meleme
  137. endif
  138. ** write (6,*) ' meleme sortie dans frig2c '
  139. ** call ecmail(meleme,0)
  140.  
  141.  
  142. irr=irr+1
  143. if (irr.ne.ir) then
  144. do ir1=1,irigel(/1)
  145. irigel(ir1,irr)=irigel(ir1,ir)
  146. enddo
  147. coerig(irr)=coerig(ir)
  148. endif
  149. 100 continue
  150. nrigel=irr
  151. if (irigel(/2).ne.irr) segadj mrigid
  152. iprig2=mrigid
  153. segsup icpr,xjeu
  154. return
  155. end
  156.  
  157.  
  158.  
  159.  
  160.  
  161.  
  162.  
  163.  
  164.  
  165.  
  166.  
  167.  
  168.  

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