Télécharger blopha.eso

Retour à la liste

Numérotation des lignes :

blopha
  1. C BLOPHA SOURCE PV090527 26/04/28 21:15:09 12529
  2. SUBROUTINE BLOPHA
  3.  
  4. IMPLICIT INTEGER(I-N)
  5. IMPLICIT REAL*8 (A-H,O-Z)
  6.  
  7. * +------------------------------------------------------------------------+
  8. * | création des matrices de bloquage pour le modele CHANGEMENT_PHASE |
  9. * | RIGIDITE sont de type 2 avec des 'FLX' a mettre en face |
  10. * +------------------------------------------------------------------------+
  11.  
  12.  
  13. -INC PPARAM
  14. -INC CCOPTIO
  15. -INC SMELEME
  16. -INC SMMODEL
  17. -INC SMRIGID
  18. -INC SMCOORD
  19. -INC SMCHPOI
  20. -INC SMCHAML
  21.  
  22. * +------------------------------------------------------------------------+
  23. call LIROBJ('MMODEL ',mmodel,1,iretou)
  24. call ACTOBJ('MMODEL ',mmodel,1)
  25. if(ierr.ne.0) return
  26. nbsou =kmodel(/1)
  27. nrigel=0
  28. do 100 i=1,nbsou
  29. imodel=kmodel(i)
  30.  
  31. nfor=imodel.formod(/2)
  32. call place(imodel.formod,nfor,iplac,'CHANGEMENT_PHASE')
  33. if (iplac .eq. 0) goto 100
  34.  
  35. C RAPPEL : RESO suppose un seul 'LX' par rigidite et il doit etre en premier
  36. IF (imodel.matmod(1)(1:10) .EQ. 'PARFAIT ')THEN
  37. C 1 seule RIGIDITE suffit
  38. nrigel = nrigel + 1
  39. ELSEIF(imodel.matmod(1)(1:10) .EQ. 'SOLUBILITE')THEN
  40. C 2 RIGIDITES pour les besoins de RESO
  41. nrigel = nrigel + 2
  42. ELSE
  43. CALL ERREUR(5)
  44. ENDIF
  45. 100 continue
  46.  
  47. segini,mrigid
  48. mtymat='BLO_PHAS'
  49. iforig = ifour
  50.  
  51. * Boucle sur les sous zones du model pour creer les matrices de blocages
  52. nrigel = 0
  53. do 1 i=1,nbsou
  54. imodel=kmodel(i)
  55.  
  56. nfor=imodel.formod(/2)
  57. call place(imodel.formod,nfor,iplac,'CHANGEMENT_PHASE')
  58. if (iplac .eq. 0) goto 1
  59.  
  60. IF (imodel.matmod(1)(1:10) .EQ. 'PARFAIT ')THEN
  61. ICAS = 1
  62. IF(tymode(2) .NE. 'MAILLAGE')THEN
  63. CALL ERREUR(5)
  64. ENDIF
  65. ipt2 = ivamod(2)
  66.  
  67. ELSEIF(imodel.matmod(1)(1:10) .EQ. 'SOLUBILITE')THEN
  68. ICAS = 2
  69. DO ii=1,imodel.tymode(/2) - 1
  70. IF(imodel.tymode(ii+1) .NE. 'MAILLAGE')THEN
  71. CALL ERREUR(5)
  72. ENDIF
  73. ENDDO
  74. ipt2 = ivamod(2)
  75. ipt3 = ivamod(3)
  76.  
  77. ELSE
  78. CALL ERREUR(5)
  79. ENDIF
  80.  
  81. C Remplissage des objets rigidite
  82. IF (ICAS .EQ. 1)THEN
  83. nrigel = nrigel + 1
  84. nelrig = ipt2.num(/2)
  85. nligrp = 2
  86. nligrd = 2
  87. rigrel=0
  88. segini,descr,xmatri
  89.  
  90. coerig(nrigel) = 1.D0
  91. irigel(1,nrigel)= ipt2
  92. irigel(3,nrigel)= descr
  93. irigel(4,nrigel)= xmatri
  94. irigel(5,nrigel)= nifour
  95. irigel(6,nrigel)= 2
  96. isym = 0
  97. irigel(7,nrigel)= isym
  98. xmatri.SYMRE = isym
  99.  
  100. NOMID=lnomid(1)
  101. lisinc(1)='LX'
  102. lisinc(2)= nomid.lesobl(1)
  103.  
  104. NOMID=lnomid(2)
  105. lisdua(1)='FLX'
  106. lisdua(2)= nomid.lesobl(1)
  107.  
  108. noelep(1)=1
  109. noelep(2)=2
  110. noeled(1)=1
  111. noeled(2)=2
  112.  
  113. do iou=1,nelrig
  114. re(1,1,iou)= 0.D0
  115. re(2,1,iou)= 1.D0
  116.  
  117. re(1,2,iou)= 1.D0
  118. re(2,2,iou)= 0.D0
  119. enddo
  120. segdes,descr,xmatri
  121.  
  122. ELSEIF(ICAS .EQ. 2)THEN
  123. C RIGIDITE n° 1
  124. C -------------
  125. nrigel = nrigel + 1
  126. nelrig = ipt2.num(/2)
  127. nligrp = 3
  128. nligrd = 3
  129. segini,descr,xmatri
  130. coerig(nrigel) = 1.D0
  131. irigel(1,nrigel)= ipt2
  132. irigel(3,nrigel)= descr
  133. irigel(4,nrigel)= xmatri
  134. irigel(5,nrigel)= nifour
  135. irigel(6,nrigel)= 1
  136. isym = 2
  137. irigel(7,nrigel)= isym
  138. xmatri.SYMRE = isym
  139.  
  140. NOMID = lnomid(1)
  141. lisinc(1)='LX'
  142. lisinc(2)= nomid.lesobl(1)
  143. lisinc(3)= nomid.lesobl(2)
  144.  
  145. NOMID = lnomid(2)
  146. lisdua(1)='FLX'
  147. lisdua(2)= nomid.lesobl(1)
  148. lisdua(3)= nomid.lesobl(2)
  149.  
  150. DO iel=1,nligrp
  151. noelep(iel)=iel
  152. noeled(iel)=iel
  153. ENDDO
  154.  
  155. do iou=1,nelrig
  156. re(1,1,iou)= 0.D0
  157. re(2,1,iou)= 1.D0
  158. re(3,1,iou)=-1.D0
  159.  
  160. re(1,2,iou)= 1.D0
  161. re(2,2,iou)= 0.D0
  162. re(3,2,iou)= 0.D0
  163.  
  164. re(1,3,iou)= 0.D0
  165. re(2,3,iou)= 0.D0
  166. re(3,3,iou)= 0.D0
  167. enddo
  168. segdes,descr,xmatri
  169.  
  170. C RIGIDITE n° 2
  171. C -------------
  172. nrigel = nrigel + 1
  173. nelrig2 = ipt3.num(/2)
  174. IF(nelrig2 .NE. nelrig)THEN
  175. CALL ERREUR(5)
  176. ENDIF
  177. nelrig = nelrig2
  178. nligrp = 3
  179. nligrd = 3
  180. rigrel=0
  181. segini,descr,xmatri
  182.  
  183. coerig(nrigel) = 1.D0
  184. irigel(1,nrigel)= ipt3
  185. irigel(3,nrigel)= descr
  186. irigel(4,nrigel)= xmatri
  187. irigel(5,nrigel)= nifour
  188. irigel(6,nrigel)=-1
  189. isym = 2
  190. irigel(7,nrigel)= isym
  191. xmatri.SYMRE = isym
  192.  
  193. NOMID = lnomid(1)
  194. lisinc(1)='LX'
  195. lisinc(2)= nomid.lesobl(1)
  196. lisinc(3)= nomid.lesobl(2)
  197.  
  198. NOMID = lnomid(2)
  199. lisdua(1)='FLX'
  200. lisdua(2)= nomid.lesobl(1)
  201. lisdua(3)= nomid.lesobl(2)
  202.  
  203. DO iel=1,nligrp
  204. noelep(iel)=iel
  205. noeled(iel)=iel
  206. ENDDO
  207.  
  208. do iou=1,nelrig
  209. re(1,1,iou)= 0.D0
  210. re(2,1,iou)=-1.D0
  211. re(3,1,iou)= 1.D0
  212.  
  213. re(1,2,iou)= 0.D0
  214. re(2,2,iou)= 0.D0
  215. re(3,2,iou)= 0.D0
  216.  
  217. re(1,3,iou)= 1.D0
  218. re(2,3,iou)= 0.D0
  219. re(3,3,iou)= 0.D0
  220. enddo
  221. segdes,descr,xmatri
  222.  
  223. ELSE
  224. CALL ERREUR(5)
  225. ENDIF
  226. 1 continue
  227. segdes,mrigid
  228.  
  229. call ECROBJ('RIGIDITE',mrigid)
  230.  
  231. end
  232.  
  233.  
  234.  
  235.  
  236.  

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