Télécharger rfco.eso

Retour à la liste

Numérotation des lignes :

rfco
  1. C RFCO SOURCE PV090527 25/03/25 21:15:05 10831
  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. if (ierr.ne.0) return
  119. C--------------------------------------------------------------------
  120. CCC if (mchpo2.ne.0) call frig3C(ipt1,ri1,mchpo2,ri2)
  121. C--------------------------------------------------------------------
  122. if (inatuu.eq.1.and.mchpo2.ne.0) then
  123. call frig3C(ipt1,ri1,mchpo2,ri2)
  124. if (ierr.ne.0) return
  125. endif
  126. endif
  127. C
  128. if(idim.eq.2) then
  129. if (ifomod .ne. -1 .and. ifomod .ne. 0) then
  130. call erreur(710)
  131. return
  132. endif
  133. ** write(6,*) ' appel impos2 '
  134. call impos2(ipt1,ipt6,ipt8,itcont,mchelx,ri1,mchpo2)
  135. if (ierr.ne.0) return
  136. C--------------------------------------------------------------------
  137. CCC if (mchpo2.ne.0) call frig2C(ipt1,ri1,mchpo2,ri2)
  138. C--------------------------------------------------------------------
  139. if (inatuu.eq.1.and.mchpo2.ne.0) then
  140. call frig2C(ipt1,ri1,mchpo2,ri2)
  141. if (ierr.ne.0) return
  142. endif
  143. endif
  144. C
  145. call ftaill(ipt1,mchpo2)
  146. if (ierr.ne.0) goto 9000
  147. C
  148. C Fusionner les objets pour le modele elementaire courant
  149. ri3=ri1
  150. if (inatuu.eq.1.and.mchpo2.ne.0) call fusrig(ri1,ri2,ri3)
  151. C
  152. C--------------------------------------------------------------------
  153. C Fusionner les objets avec les autres modeles elementaires
  154. CCC if(irigi0.eq.0.or.ri2.eq.0) then
  155. CCC irigi0=irigi0+ri2
  156. CCC else
  157. CCC call fusrig(irigi0,ri2,inoup)
  158. CCC irigi0=inoup
  159. CCC endif
  160. C--------------------------------------------------------------------
  161. C
  162. C Fusionner les objets avec les autres modeles elementaires
  163. if(irigi1.eq.0) then
  164. irigi1=ri3
  165. else
  166. call fusrig(irigi1,ri3,inoup)
  167. irigi1=inoup
  168. endif
  169. C
  170. if(mforc.eq.0.or.mchpo2.eq.0) then
  171. mforc=mforc+mchpo2
  172. else
  173. call adchpo(mchpo2,mforc,iret,1.D0,1.D0)
  174. mforc=iret
  175. endif
  176. C
  177. endif
  178. C
  179. endif
  180. 10 CONTINUE
  181. C
  182. C IRIGI2 : Pointeur sur les rigidites des modeles FROCABLES
  183. C IRIGI1 : Pointeur sur les rigidites des autres modeles
  184. * on reordonne mrigid pour mettre en premier toutes
  185. * les relations unilatérales ( frocables peut en sortir des pas unil)
  186. mrigid=irigi1
  187. if(irigi2.ne.0) then
  188. mrigid=irigi2
  189. segini,ri1=mrigid
  190. ide=0
  191. segact mrigid
  192. ifi=irigel(/2)+1
  193. do i=1,irigel(/2)
  194. if( irigel(6,i). eq .0) then
  195. ifi=ifi-1
  196. ipla=ifi
  197. else
  198. ide=ide+1
  199. ipla=ide
  200. endif
  201. do ib=1,irigel(/1)
  202. ri1.irigel(ib,ipla)=irigel(ib,i)
  203. enddo
  204. ri1.coerig(ipla)= coerig(i)
  205. enddo
  206. segdes ri1
  207. **** segsup mrigid
  208. mrigid=ri1
  209. * une seule raideur en sortie
  210. if (ri1.eq.0.or.irigi1.eq.0) then
  211. mrigid = ri1+irigi1
  212. else
  213. call fusrig(ri1,irigi1,mrigid)
  214. endif
  215. endif
  216. C
  217. C--------------------------------------------------------------------
  218. C Conditions de frottement : pour tests dans unpas
  219. CCC if(irigi0.eq.0) then
  220. CCC call ecrent(irigi0)
  221. CCC else
  222. CCC call actobj('RIGIDITE',irigi0,0)
  223. CCC call ecrobj('RIGIDITE',irigi0)
  224. CCC endif
  225. C--------------------------------------------------------------------
  226. C
  227. if(mrigid.eq.0) then
  228. call ecrent(mrigid)
  229. else
  230. call actobj('RIGIDITE',mrigid,0)
  231. call ecrobj('RIGIDITE',mrigid)
  232. endif
  233. C
  234. if(mforc.eq.0) then
  235. call ecrent(mforc)
  236. else
  237. call actobj('CHPOINT',mforc,1)
  238. call ecrobj('CHPOINT',mforc)
  239. endif
  240. C
  241. RETURN
  242. C
  243. 9000 CONTINUE
  244. CALL ERREUR (19)
  245. END
  246.  
  247.  
  248.  

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