Télécharger rfco.eso

Retour à la liste

Numérotation des lignes :

rfco
  1. C RFCO SOURCE MB234859 24/12/13 21:17:21 12099
  2. SUBROUTINE RFCO
  3. *----------------------------------------------------------------------
  4. * Calcul des raideurs et des jeux dans le cas de modeles de contact
  5. * avec ou sans frottements
  6. *
  7. * Entree : MMODEL de contact
  8. *
  9. * Sortie : CHPOINT (valeurs des jeux) (pas pour les frocable)
  10. * RIGIDITE conditions de contact et de frottements
  11. *
  12. * Remarque : faut-il egalement sortir les conditions de frottements
  13. * pour les utiliser comme indicateur de recalcul des
  14. * conditions en cas de grands glissements.
  15. * Les lignes commentees demarrant apr CCC permettent de
  16. * faire cela mais a tester davantage avant
  17. *----------------------------------------------------------------------
  18. C
  19. IMPLICIT REAL*8(A-H,O-Z)
  20. IMPLICIT INTEGER (I-N)
  21. C
  22. -INC PPARAM
  23. -INC CCOPTIO
  24. -INC SMMODEL
  25. pointeur mmode3.mmodel,imode3.imodel
  26. -INC SMRIGID
  27. -INC SMCHPOI
  28. -INC SMELEME
  29. -INC SMCOORD
  30. C
  31. logical lconv
  32. C
  33. CALL LIROBJ('MMODEL ',MMODEL,1,IRETOU)
  34. CALL ACTOBJ('MMODEL ',MMODEL,1)
  35. IF(IERR.NE.0) RETURN
  36. C
  37. CALL LIRLOG(lconv,1,iretou)
  38. C
  39. MCHELX=0
  40. CALL LIROBJ('MCHAML ', MCHELX,0,IRCHA1)
  41. IF(IRCHA1.EQ.1) CALL ACTOBJ('MCHAML ', MCHELX,1)
  42. IF(IERR.NE.0) RETURN
  43. C
  44. segact mcoord
  45. irigi0=0
  46. irigi1=0
  47. irigi2=0
  48. mforc=0
  49. C
  50. DO 10 ISOUS=1,KMODEL(/1)
  51. imodel=kmodel(isous)
  52. if (formod(1).NE.'CONTACT') GOTO 10
  53. C
  54. C D'apres NOMATE :
  55. C imate=1 unilateral; imate=2 maintenu;
  56. C inatu=0 sans frottement;inatu=1 coulomb; inatu=2 frocable
  57. C
  58. C CONTACT UNILATERAL
  59. if(imatee.eq.1) then
  60. C
  61. C FROCABLE
  62. if(inatuu.eq.2) then
  63. if (lconv) then
  64. ** write(6,*) ' ivamod ',ivamod(/1)
  65. if(ivamod(/1).ne.3) call erreur(5)
  66. ri3 = 0
  67. meleme = ivamod(2)
  68. ipt1 = ivamod(1)
  69. * call ecmail( meleme,1)
  70. * call ecmail ( ipt1,1)
  71. * Petit modele unitaire local (a detruire en fin de traitement)
  72. n1=1
  73. segini,mmode2,mmode3
  74. nfor=0
  75. nmat=0
  76. mn3=1
  77. nobmod=1
  78. segini imode2
  79. imode2.imamod=imamod
  80. imode2.conmod=conmod
  81. imode2.ivamod(1)=mmode3
  82. imode2.tymode(1)='MMODEL'
  83. mmode2.kmodel(1)=imode2
  84. nobmod=0
  85. segini imode3
  86. imode3.imamod=ipt1
  87. imode3.conmod=conmod
  88. mmode3.kmodel(1)=imode3
  89. * Option accro 'GLISS'
  90. igliss=1
  91. call ecrree(1.d-3)
  92. call ecrobj('MAILLAGE',meleme)
  93. call ecrobj('MMODEL ',mmode2)
  94. call accro(igliss)
  95. if (ierr.ne.0) goto 9000
  96. call lirobj('RIGIDITE',ri2,1,iretou)
  97. if (ierr.ne.0) goto 9000
  98. segsup mmode2,mmode3
  99. if(irigi2.eq.0) then
  100. irigi2=ri2
  101. else
  102. call fusrig(irigi2,ri2,Inoup)
  103. irigi2= inoup
  104. endif
  105. endif
  106. C
  107. else
  108. C Cas sans frottement ou avec frottement de Coulomb
  109. ipt1 = imamod
  110. ipt6 = ivamod(1)
  111. ipt8 = ivamod(2)
  112. itcont = ivamod(3)
  113. C
  114. if(idim.eq.3) then
  115. ** write(6,*) ' avant impo32 ipt6 ipt8 itcont inatuu',
  116. ** > ipt6,ipt8,itcont,inatuu
  117. call impo32(ipt1,ipt6,ipt8,itcont,mchelx,ri1,mchpo2)
  118. C--------------------------------------------------------------------
  119. CCC if (mchpo2.ne.0) call frig3C(ipt1,ri1,mchpo2,ri2)
  120. C--------------------------------------------------------------------
  121. if (inatuu.eq.1.and.mchpo2.ne.0) then
  122. call frig3C(ipt1,ri1,mchpo2,ri2)
  123. endif
  124. endif
  125. C
  126. if(idim.eq.2) then
  127. if (ifomod .ne. -1 .and. ifomod .ne. 0) then
  128. call erreur(710)
  129. return
  130. endif
  131. ** write(6,*) ' appel impos2 '
  132. call impos2(ipt1,ipt6,ipt8,itcont,mchelx,ri1,mchpo2)
  133. C--------------------------------------------------------------------
  134. CCC if (mchpo2.ne.0) call frig2C(ipt1,ri1,mchpo2,ri2)
  135. C--------------------------------------------------------------------
  136. if (inatuu.eq.1.and.mchpo2.ne.0) then
  137. call frig2C(ipt1,ri1,mchpo2,ri2)
  138. endif
  139. endif
  140. C
  141. call ftaill(ipt1,mchpo2)
  142. if (ierr.ne.0) goto 9000
  143. C
  144. C Fusionner les objets pour le modele elementaire courant
  145. ri3=ri1
  146. if (inatuu.eq.1.and.mchpo2.ne.0) call fusrig(ri1,ri2,ri3)
  147. C
  148. C--------------------------------------------------------------------
  149. C Fusionner les objets avec les autres modeles elementaires
  150. CCC if(irigi0.eq.0.or.ri2.eq.0) then
  151. CCC irigi0=irigi0+ri2
  152. CCC else
  153. CCC call fusrig(irigi0,ri2,inoup)
  154. CCC irigi0=inoup
  155. CCC endif
  156. C--------------------------------------------------------------------
  157. C
  158. C Fusionner les objets avec les autres modeles elementaires
  159. if(irigi1.eq.0) then
  160. irigi1=ri3
  161. else
  162. call fusrig(irigi1,ri3,inoup)
  163. irigi1=inoup
  164. endif
  165. C
  166. if(mforc.eq.0.or.mchpo2.eq.0) then
  167. mforc=mforc+mchpo2
  168. else
  169. call adchpo(mchpo2,mforc,iret,1.D0,1.D0)
  170. mforc=iret
  171. endif
  172. C
  173. endif
  174. C
  175. endif
  176. 10 CONTINUE
  177. C
  178. C IRIGI2 : Pointeur sur les rigidites des modeles FROCABLES
  179. C IRIGI1 : Pointeur sur les rigidites des autres modeles
  180. * on reordonne mrigid pour mettre en premier toutes
  181. * les relations unilatérales ( frocables peut en sortir des pas unil)
  182. mrigid=irigi1
  183. if(irigi2.ne.0) then
  184. mrigid=irigi2
  185. segini,ri1=mrigid
  186. ide=0
  187. segact mrigid
  188. ifi=irigel(/2)+1
  189. do i=1,irigel(/2)
  190. if( irigel(6,i). eq .0) then
  191. ifi=ifi-1
  192. ipla=ifi
  193. else
  194. ide=ide+1
  195. ipla=ide
  196. endif
  197. do ib=1,irigel(/1)
  198. ri1.irigel(ib,ipla)=irigel(ib,i)
  199. enddo
  200. ri1.coerig(ipla)= coerig(i)
  201. enddo
  202. segdes ri1
  203. **** segsup mrigid
  204. mrigid=ri1
  205. * une seule raideur en sortie
  206. if (ri1.eq.0.or.irigi1.eq.0) then
  207. mrigid = ri1+irigi1
  208. else
  209. call fusrig(ri1,irigi1,mrigid)
  210. endif
  211. endif
  212. C
  213. C--------------------------------------------------------------------
  214. C Conditions de frottement : pour tests dans unpas
  215. CCC if(irigi0.eq.0) then
  216. CCC call ecrent(irigi0)
  217. CCC else
  218. CCC call actobj('RIGIDITE',irigi0,0)
  219. CCC call ecrobj('RIGIDITE',irigi0)
  220. CCC endif
  221. C--------------------------------------------------------------------
  222. C
  223. if(mrigid.eq.0) then
  224. call ecrent(mrigid)
  225. else
  226. call actobj('RIGIDITE',mrigid,0)
  227. call ecrobj('RIGIDITE',mrigid)
  228. endif
  229. C
  230. if(mforc.eq.0) then
  231. call ecrent(mforc)
  232. else
  233. call actobj('CHPOINT',mforc,1)
  234. call ecrobj('CHPOINT',mforc)
  235. endif
  236. C
  237. RETURN
  238. C
  239. 9000 CONTINUE
  240. CALL ERREUR (19)
  241. END
  242.  
  243.  

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